{"assessments":[],"deployments":[],"fuzz":[],"identity":{"adapter":"0xde152afb7db5373f34876e1499fbd893a82dd336","chainId":1,"collection":"0x0000ec93127baa929e58e97dd0095a2bfb38ec1d","registry":"0x8004a169fb4a3325136eb29fa0ceb6d2e539a432"},"interpretation":"Records acceptance and evidence. Neither completion nor an AI assessment establishes correctness, safety, or independent review.","jobId":"3bc9ffc9-2c14-4259-b152-0359575ece53","kind":"skill:build-contract-project","nodes":[{"acceptedSubmissionHash":"85181fcb63e929abf1ad40f6de029447b06f19183dee96a868f5e228637df76a","dependsOn":[],"execution":{"network":false,"profile":"foundry","requires":[],"skillHash":"15b04fc8f60521936b9e2b37c09a804685ec689fc98cd5b04510d986d3106a15","skillId":"build-contract-project","tools":[]},"key":"build_contract_project","kind":"code","role":"implement","skillHash":"15b04fc8f60521936b9e2b37c09a804685ec689fc98cd5b04510d986d3106a15","skillId":"build-contract-project","state":"accepted"}],"objective":"A Uniswap v4 hook: # JOB ORDER: SigmaHook v2 — Remove Vault, Add Operator Parameters\n# REPO: github.com/identity-md-launches/launch-2658-sigmahook\n# BRANCH: main\n\n## 1. Delete\n- src/SigmaVault.sol (entire file)\n- All references to SigmaVault, vault(), svSHK, vTokenShares in src/SigmaHook.sol\n- Any test files referencing vault, svSHK, or ERC4626\n- Keep: src/SigmaMath.sol, src/PermanentTokenLock.sol, src/SigmaToken.sol, src/libraries/ (all)\n\n## 2. Add to src/SigmaHook.sol (replace REBALANCE_INTERVAL constant)\n\nRemove:\n    uint256 public constant REBALANCE_INTERVAL = 30 minutes;\n\nAdd:\n    uint8 public triggerSigma = 15;   // 1.5σ in tenths\n    uint8 public rangeSigma = 30;     // 3.0σ in tenths\n    uint32 public cooldown = 1800;    // 30 min in seconds\n\n    struct Preset { uint8 trigger; uint8 range; uint32 cooldown; }\n    Preset[6] public presets;\n\n    // In constructor, after existing init:\n    presets[0] = Preset(30, 30, 3600);   // SLEEP\n    presets[1] = Preset(15, 20, 1800);   // STANDARD\n    presets[2] = Preset(10, 15, 900);    // AGGRESSIVE\n    presets[3] = Preset(5, 10, 300);     // MAX\n    presets[4] = Preset(30, 40, 7200);   // DEFENSIVE\n    presets[5] = Preset(255, 255, type(uint32).max); // PAUSED\n\n    // New functions (all onlyOwner):\n    function setMode(uint8 m) external onlyOwner {\n        require(m < 6, \"invalid mode\");\n        Preset memory p = presets[m];\n        triggerSigma = p.trigger;\n        rangeSigma = p.range;\n        cooldown = p.cooldown;\n        emit ModeChanged(m);\n    }\n    function setTriggerSigma(uint8 v) external onlyOwner {\n        require(v >= 5 && v <= 50, \"bounds\");\n        triggerSigma = v;\n    }\n    function setRangeSigma(uint8 v) external onlyOwner {\n        require(v >= 10 && v <= 50, \"bounds\");\n        rangeSigma = v;\n    }\n    function setCooldown(uint32 v) external onlyOwner {\n        require(v >= 300 && v <= 86400, \"bounds\");\n        cooldown = v;\n    }\n    function pause() external onlyOwner { triggerSigma = 255; }\n    function resume() external onlyOwner { triggerSigma = presets[1].trigger; }\n\n    // New events:\n    event ModeChanged(uint8 mode);\n\n## 3. Modify src/libraries/BandMath.sol\n\nChange deviates() signature and body:\n    function deviates(int24 tick, int256 sum, uint256 sigma8, uint256 triggerSigma) internal pure returns (bool) {\n        int256 distance = int256(tick) * SAMPLES - sum;\n        uint256 absolute = uint256(distance < 0 ? -distance : distance);\n        return 10 * absolute > triggerSigma * sigma8;\n    }\n\nChange bands() signature and body:\n    function bands(int256 sum, uint256 sigma8, int24 spacing, uint256 rangeSigma) internal pure returns (int24 lower, int24 upper) {\n        int256 width = int256(int256(rangeSigma * sigma8 / 10));\n        // ... rest unchanged\n    }\n\n## 4. Modify src/SigmaMath.sol\n\nUpdate bands() wrapper to pass rangeSigma through:\n    function bands(int256 sum, uint256 sigma8, int24 spacing, uint256 rangeSigma) external pure returns (int24 lower, int24 upper) {\n        return BandMath.bands(sum, sigma8, spacing, rangeSigma);\n    }\n\n## 5. Update all call sites in SigmaHook.sol\n\n- flashRebalance: replace REBALANCE_INTERVAL with cooldown\n- flashRebalance: BandMath.deviates(tick, sum, sigma8) → BandMath.deviates(tick, sum, sigma8, triggerSigma)\n- All math.bands(...) calls: add rangeSigma as 4th argument\n- _afterInitialize: math.bands(int256(tick) * BandMath.SAMPLES, 0, key.tickSpacing) → add rangeSigma\n- _rebalance: math.bands(sum, sigma8, _key.tickSpacing) → add rangeSigma\n- _quoteDeposit: math.bands(sum, sigma8, _key.tickSpacing) → add rangeSigma\n- proposedBands: math.bands(sum, sigma8, _key.tickSpacing) → add rangeSigma\n\n## 6. Verify\nforge build\nforge test\nforge fmt --check\n\nAll tests must pass. No ERC4626 references remaining. Push to main.","parentJobId":null,"planHash":"43dd2c75ddfb88600eff4a85dde5e205ffb837fedd267c36a7d48b99bfc897e4","previousHash":"0000000000000000000000000000000000000000000000000000000000000000","projectId":"3bc9ffc9-2c14-4259-b152-0359575ece53","publication":{"commit":null,"deliveredAt":null,"repoUrl":"https://github.com/identity-md-launches/launch-2680-uniswap-v4-hook"},"receiptIdentity":{"adapter":"0xde152afb7db5373f34876e1499fbd893a82dd336","chainId":1,"collection":"0x0000ec93127baa929e58e97dd0095a2bfb38ec1d","registry":"0x8004a169fb4a3325136eb29fa0ceb6d2e539a432"},"registry":"0xb6d0a187b050fa5bb0b87033a203f37becf4a775","research":[],"schema":"identitymd-work-v1","signals":[{"agentId":"52161","feedbackHash":"4ad49404ddd114c9aa1d7662e026138191d8eb31816f9231a50ed614e556c606","nodeKey":"build_contract_project","submissionHash":"85181fcb63e929abf1ad40f6de029447b06f19183dee96a868f5e228637df76a","tag1":"verification:checks","tag2":"acceptance-v2","value":1}],"site":null,"snapshotHash":"a93768f7412853a546ed88caf844ef65dc5520122914ba9f12977ef0d08721bc","state":"completed","submissions":[{"artifacts":[],"attempt":1,"bundleHash":"c18fc18f6eaf150c897ff35de13d49dc2c16fdbf12ec0fb22a16810bf67793d7","device":"ca075d17c94a854b","findings":[],"hash":"85181fcb63e929abf1ad40f6de029447b06f19183dee96a868f5e228637df76a","nodeId":"6cfce1c1-8a9d-4ca4-996c-ee09abbf789a","outcome":"completed","summary":"SigmaHook v2 is implemented, verified, and committed on `main` in this workspace. The workspace started empty, so I cloned the job's repository, applied the changes, and committed the full project with its vendored libraries as ordinary files (no submodules). I could not push to GitHub from here; the upload step after this run carries the commit.\n\n**Verification with the pinned compiler settings**\n\n| Check | Result |\n| --- | --- |\n| `forge build` | passes (lint advisories only, as before) |\n| `forge test` with the verifier's fuzz seed | 115 passed, 0 failed, 0 skipped across 13 suites |\n| `forge fmt --check` | passes |\n| Hook runtime size | 24,376 of 24,576 bytes (EIP-170) |\n\n**What changed**\n\n- Deleted `src/SigmaVault.sol` and `test/SigmaVault.t.sol`, and removed the wrapper import, immutable, constructor deployment, and getter from the hook. Nothing in `src/`, `test/`, `script/`, or `docs/` references the wrapper, its share symbol, or the tokenized-vault standard any more.\n- Replaced the fixed cooldown constant with `triggerSigma`, `rangeSigma`, `cooldown`, the six-entry `presets` table filled in the constructor, `setMode`, the three bounded setters, `pause`, `resume`, and the `ModeChanged` event, exactly as the job order specifies.\n- `BandMath.deviates` and `BandMath.bands` take the setting as a fourth argument, with the `SigmaMath` wrapper updated. All five hook call sites pass the live value.\n- Existing tests were updated for the new signatures with the defaults (15 and 30), which reproduce v1 behaviour exactly. The invariant handler now reads the live cooldown and trigger.\n- New `test/OperatorParams.t.sol` (18 tests): defaults, exact preset table, `setMode` success and failure (mode 6, mode 255, non-owner, the deploying factory), inclusive bounds and out-of-bounds reverts for every setter, pause/resume touching only the trigger, cooldown gating at the exact second, PAUSED never elapsing, one outlier swap firing STANDARD but not SLEEP or paused, three-of-eight and four-of-eight feeds separating STANDARD, AGGRESSIVE and MAX at the strict boundary, `rangeSigma` shaping proposed, deployed and first-deposit bands, plus two 1,000-run fuzz properties over any tenths setting.\n- README, `docs/SECURITY.md`, and `test/README.md` document the parameters, presets, bounds, owner trust assumptions, keeper responsibilities, and the after-launch steps. The existing `launch.json` was kept with its constructor args and permissions untouched. Only its prose notes were updated so they no longer describe the removed wrapper.\n\n**Two properties of the specified presets worth knowing**\n\n- The current tick is normally the newest of the eight samples, so it can sit at most about 2.65 sigma from the mean. Triggers of 2.7 sigma or more, which includes SLEEP and DEFENSIVE at 3.0 sigma, fire only on tiny moves where the floored sigma tips the integer comparison. I implemented them as specified and documented them as \"nearly never rebalance\" modes rather than changing the formula.\n- The fresh-deployment defaults (15 / 30 / 1800) differ from the STANDARD preset (15 / 20 / 1800) in range width. Both are as the job order wrote them; the README calls this out.\n\n**One pitfall I hit and fixed**: under via-IR the optimizer merged two identical `block.timestamp` reads in a test, so a second `vm.warp` re-used the first value. The test now warps to absolute times. Existing tests were not affected.","treeHash":"bcfcede1b87b2406cb9d46412c55bd290f0f648b","usage":{"cachedInputTokens":3255560,"inputTokens":738,"model":"claude-fable-5-1","outputTokens":64635,"runtime":"claude","turns":90,"wallClockMs":1139895}}],"verification":[{"checks":[{"durationMs":62650,"exitCode":0,"name":"build","output":"Compiling 114 files with Solc 0.8.26\nSolc 0.8.26 finished in 62.52s\nCompiler run successful!\n","passed":true},{"durationMs":8483,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\n\nRan 3 tests for test/SigmaToken.t.sol:SigmaTokenTest\n[PASS] testFuzz_transferAndAllowance(uint256) (runs: 256, μ: 179909, ~: 179807)\nLogs:\n  Bound result 8\n\n[PASS] test_fixedSupplyAndMetadata() (gas: 49353)\n[PASS] test_noAdminOrAdditionalMint() (gas: 127664)\nSuite result: ok. 3 passed; 0 failed; 0 skipped; finished in 21.44ms (21.34ms CPU time)\n\nRan 6 tests for test/WethVaultIntegration.t.sol:WethVaultIntegrationTest\n[PASS] test_emergencyReturnsWrappedEtherToChosenReceiverWithoutUnwrapping() (gas: 1108108)\n[PASS] test_firstDepositAfterEmptyPoolMoveRecentresBandOnFeed() (gas: 904744)\n[PASS] test_priceAboveLaunchSoleVaultReserveExactInputRebalance() (gas: 1496306)\n[PASS] test_priceAboveLaunchSoleVaultReserveExactOutputRebalance() (gas: 1495467)\n[PASS] test_priceBelowLaunchSoleVaultReserveExactInputRebalance() (gas: 1496001)\n[PASS] test_priceBelowLaunchSoleVaultReserveExactOutputRebalance() (gas: 1495512)\nSuite result: ok. 6 passed; 0 failed; 0 skipped; finished in 57.22ms (6.95ms CPU time)\n\nRan 9 tests for test/VaultFailurePaths.t.sol:VaultFailurePathsTest\n[PASS] test_allUninitializedVaultEntrypointsRefuseBeforeTokenTransfers() (gas: 51638638)\n[PASS] test_budgetAboveInt128LimitCannotHarvestFeesOrPullTokens() (gas: 1990205)\n[PASS] test_emergencyCannotBeUsedBeforeActivationAndLiveEntrypointsCloseAfterward() (gas: 1846399)\n[PASS] test_invalidPoolAttemptsDoNotPoisonLaterValidInitialization() (gas: 52833723)\n[PASS] test_invalidReceiversAreAtomicInLiveAndEmergencyModes() (gas: 2280645)\n[PASS] test_minSharesFailureAfterHarvestRestoresUncollectedFees() (gas: 2063350)\n[PASS] test_pendingAndFormerOwnerCannotActivateEmergency() (gas: 858546)\n[PASS] test_secondCurrencyWithdrawalMinimumRollsBackBurnAndPosition() (gas: 1976072)\n[PASS] test_secondTokenPullFailureRestoresHarvestMintAndFirstTokenPull() (gas: 2168970)\nSuite result: ok. 9 passed; 0 failed; 0 skipped; finished in 65.95ms (89.74ms CPU time)\n\nRan 11 tests for test/BandMath.t.sol:BandMathTest\n[PASS] testFuzz_liquiditySizingNeverOverspends(int24,int24,int24,uint128,uint128,uint128) (runs: 256, μ: 30670, ~: 30695)\nLogs:\n  Bound result -38839\n  Bound result 78646\n  Bound result 133\n\n[PASS] testFuzz_statisticsMatchIndependentIntegerReference(int24[8],uint16) (runs: 256, μ: 108678, ~: 108766)\nLogs:\n  Bound result 21322\n  Bound result -1500\n  Bound result 1900\n  Bound result 3050\n  Bound result -6\n  Bound result -6\n  Bound result 2524\n  Bound result 8249\n  Bound result 2795\n\n[PASS] test_extremeTicksStayWithinUsableGrid() (gas: 27507)\n[PASS] test_knownPopulationStatistics() (gas: 37951)\n[PASS] test_lowPriceSizingKeepsPrecision() (gas: 10369)\n[PASS] test_meanRoundsToNearestAndNegativeGridFloors() (gas: 21621)\n[PASS] test_rebalanceTradeTargetsBandRatioAndRespectsDeadband() (gas: 21249)\n[PASS] test_restingTickDoesNotDeviateButOutlierDoes() (gas: 26774)\n[PASS] test_sizingOneSqrtUnitFromUpperAndVeryLowTicks() (gas: 13646)\n[PASS] test_strictTriggerAndHalfIntegerThreshold() (gas: 12405)\n[PASS] test_tradeLimitStopsAtBandEdgeOrCap() (gas: 20709)\nSuite result: ok. 11 passed; 0 failed; 0 skipped; finished in 103.92ms (69.39ms CPU time)\n\nRan 4 tests for test/NativeSafety.t.sol:NativeSafetyTest\n[PASS] testFuzz_initialDepositRefundsNativeBudgetAndMatchesFreshPreview(uint64,uint64,int24) (runs: 256, μ: 1060383, ~: 1071251)\nLogs:\n  Bound result 9900000000000000031\n  Bound result 9900000000498795579\n  Bound result 4657\n\n[PASS] test_keeperCallbackCannotReenterAndRejectedBountyRollsBack() (gas: 3006082)\n[PASS] test_ownerRescuesOnlyForcedSurplusAndCannotSweepLPCapital() (gas: 867738)\n[PASS] test_receiveAllowsOnlyManagerOrOnceConfiguredWETH() (gas: 266440)\nSuite result: ok. 4 passed; 0 failed; 0 skipped; finished in 115.27ms (102.64ms CPU time)\n\nRan 18 tests for test/OperatorParams.t.sol:OperatorParamsTest\n[PASS] testFuzz_bandsEncloseRangeSigmaOnTheSmallestUsableGrid(int256,uint256,uint8) (runs: 1000, μ: 25597, ~: 25751)\nLogs:\n  Bound result -500000\n  Bound result 1442426\n  Bound result 42\n\n[PASS] testFuzz_triggerIsStrictAtBothSidesForAnyTenthsSetting(uint24,int24,uint8) (runs: 1000, μ: 21662, ~: 21701)\nLogs:\n  Bound result 3923\n  Bound result 6591\n  Bound result 50\n\n[PASS] test_bandsWidenMonotonicallyWithRangeSigma() (gas: 41219)\n[PASS] test_cooldownGateUsesTheLiveSetting() (gas: 2460884)\n[PASS] test_defaultsMatchTheSprintOneBehaviour() (gas: 46261)\n[PASS] test_firstDepositUsesTheLiveRangeSigma() (gas: 1271749)\n[PASS] test_pauseAndResumeTouchOnlyTheTrigger() (gas: 215606)\n[PASS] test_pausedPresetCooldownNeverElapses() (gas: 1122188)\n[PASS] test_pausedTriggerIsBeyondAnyEightSampleDeviation() (gas: 20132)\n[PASS] test_presetTableIsExactlyAsOrdered() (gas: 79677)\n[PASS] test_rangeSigmaShapesProposedAndDeployedBands() (gas: 1710613)\n[PASS] test_setCooldownBounds() (gas: 238216)\n[PASS] test_setModeLoadsEveryPresetAndEmits() (gas: 462066)\n[PASS] test_setModeRejectsUnknownModeAndNonOwner() (gas: 138403)\n[PASS] test_setRangeSigmaBounds() (gas: 206381)\n[PASS] test_setTriggerSigmaBounds() (gas: 230897)\n[PASS] test_tighterTriggerFiresWhereStandardDoesNot() (gas: 2303064)\n[PASS] test_triggerGateUsesTheLiveSettingAndPauseResume() (gas: 1839934)\nSuite result: ok. 18 passed; 0 failed; 0 skipped; finished in 145.17ms (245.72ms CPU time)\n\nRan 8 tests for test/Adversarial.t.sol:AdversarialTest\n[PASS] test_emergencyCannotBurnOtherHoldersShares() (gas: 825183)\n[PASS] test_emptyVaultCanEnterEmergency() (gas: 137845)\n[PASS] test_feeOnTransferDepositIsRejectedAtomically() (gas: 54939204)\n[PASS] test_initializationAtPriceExtremesAndSingleSidedDeposits() (gas: 432365091)\n[PASS] test_liquidityCapacityCannotBlockSwapRebalance() (gas: 2093518)\n[PASS] test_prepayRouterSwapSurvivesARebalance() (gas: 2659513)\n[PASS] test_saltToolUsesExactFactoryAndConstructorArguments() (gas: 24573101)\n[PASS] test_tokenCallbackCannotReenterDeposit() (gas: 55361125)\nSuite result: ok. 8 passed; 0 failed; 0 skipped; finished in 182.81ms (226.46ms CPU time)\n\nRan 11 tests for test/Flywheel.t.sol:FlywheelTest\n[PASS] testFuzz_dislocatedPriceStillMintsOrExplicitlyDefers(int24,uint64) (runs: 256, μ: 1661536, ~: 1711473)\nLogs:\n  Bound result 3\n  Bound result 209457185972222917\n\n[PASS] test_afterSwapOnlySamplesEvenWhenKeeperIsDue() (gas: 1080138)\n[PASS] test_deferredAssetsRemainWithdrawable() (gas: 1201518)\n[PASS] test_deferredBuybackIsSpentOnlyOnceOnNextEligibleCycle() (gas: 3922094)\n[PASS] test_depositCannotRefreshDeferredRangeToBypassKeeperCooldown() (gas: 1431649)\n[PASS] test_emptyAndEmergencyVaultCannotPayBounty() (gas: 751568)\n[PASS] test_harvestByNewDepositCannotEvadeFeeReservesOrDiluteOldHolder() (gas: 1643344)\n[PASS] test_keeperGatesWrongPoolCooldownDeviationAndReplay() (gas: 1776946)\n[PASS] test_noExternalLiquidityDefersAndPermissionlessRetryRecovers() (gas: 1861360)\n[PASS] test_triSplitUsesFeesOnlyAndPaysActualKeeperBeforeReinvestment() (gas: 1944318)\n[PASS] test_zeroAddressCompatibleTokenUsesRequestedDisposalPath() (gas: 56586067)\nSuite result: ok. 11 passed; 0 failed; 0 skipped; finished in 182.73ms (219.44ms CPU time)\n\nRan 26 tests for test/SigmaHook.t.sol:SigmaHookTest\n[PASS] testFuzz_donationsDoNotAllowZeroShareDeposit(uint80) (runs: 256, μ: 1013731, ~: 1152620)\nLogs:\n  Bound result 783515122132848809\n\n[PASS] testFuzz_roundTripNeverCreatesAssets(uint96,uint96) (runs: 256, μ: 851495, ~: 850968)\nLogs:\n  Bound result 99999999999999001698\n  Bound result 1000001\n\n[PASS] test_balancingTradeStaysInsideBand() (gas: 1661228)\n[PASS] test_callbacksAndUnlockRefuseUnauthorizedCalls() (gas: 125067)\n[PASS] test_circularFeedUsesPostExecutionSlot0AndWraps() (gas: 2238769)\n[PASS] test_cooldownRequiresFullThirtyMinutesAndDeviation() (gas: 1972218)\n[PASS] test_deepPoolTrendRebalanceDeploysMostCapital() (gas: 1749786)\n[PASS] test_depositAndWithdrawalSlippageDeadlineAndZeroChecks() (gas: 1205584)\n[PASS] test_emergencyFreezesInvestmentButNotSwapsOrShareTransfers() (gas: 1338234)\n[PASS] test_emergencyRemovesAllLiquidityAndWithdrawsProRata() (gas: 1728691)\n[PASS] test_emptiedVaultDoesNotRebalanceUntilSomeoneDepositsAgain() (gas: 2080240)\n[PASS] test_feeOwnershipCannotBeDilutedByNewDepositor() (gas: 1668070)\n[PASS] test_firstDepositAfterPriceMoveUsesFreshBand() (gas: 1231661)\n[PASS] test_firstDepositAndProportionalSecondDeposit() (gas: 1115411)\n[PASS] test_firstDepositPullsOnlyWhatTheBandNeeds() (gas: 832992)\n[PASS] test_minedPermissionsInitializationAndExplicitOwner() (gas: 201414)\n[PASS] test_noBalancingTradeInAnEmptyPool() (gas: 1084747)\n[PASS] test_noDeviationDoesNotRebalanceAfterCooldown() (gas: 909534)\n[PASS] test_otherLpCanCollectZeroDeltaFeesEvenInEmergency() (gas: 1605599)\n[PASS] test_ownerTransferRequiresAcceptanceAndCannotRenounce() (gas: 153947)\n[PASS] test_rebalanceBurnsEntireOldPositionAndKeepsAllCapital() (gas: 1794326)\n[PASS] test_rebalanceCompoundsNetAccruedFeesAndDust() (gas: 1564733)\n[PASS] test_rejectsSecondPoolAndWrongCallbackPool() (gas: 127656)\n[PASS] test_strayEthIsRefusedOnAnErc20Pair() (gas: 116888)\n[PASS] test_trendRebalanceSellsSurplusAndRedeploys() (gas: 9112978)\n[PASS] test_uninitializedFunctionsAndFactoryGate() (gas: 52043657)\nSuite result: ok. 26 passed; 0 failed; 0 skipped; finished in 211.40ms (221.36ms CPU time)\n\nRan 7 tests for test/NativeVault.t.sol:NativeVaultTest\n[PASS] testFuzz_freshManagerRebalanceBeforeInputSettlement(bool) (runs: 256, μ: 2563204, ~: 2583563)\n[PASS] test_emergencyRedeemsClaimsAndNeedsNoManagerForWithdrawal() (gas: 1795544)\n[PASS] test_exactInputAndOutputBothDirectionsRemainUsable() (gas: 1271445)\n[PASS] test_nativeDepositRefundAndOrdinaryExit() (gas: 995474)\n[PASS] test_onlyTheManagerMaySendEthToTheHook() (gas: 100811)\n[PASS] test_reentrantEmergencyReceiverCannotRedeemTwice() (gas: 1103756)\n[PASS] test_rejectingEthRecipientRollsBackAndCanChooseAnotherReceiver() (gas: 1045487)\nSuite result: ok. 7 passed; 0 failed; 0 skipped; finished in 211.51ms (206.32ms CPU time)\n\nRan 9 tests for test/MathProperties.t.sol:MathPropertiesTest\n[PASS] testFuzz_bandsEncloseThreeSigmaOnTheSmallestUsableGrid(int256,uint256) (runs: 1000, μ: 21522, ~: 21765)\nLogs:\n  Bound result -63268\n  Bound result 2202519\n\n[PASS] testFuzz_largerBudgetsNeverReduceLiquidity(int24,int24,int24,uint128,uint128,uint128) (runs: 1000, μ: 31102, ~: 31029)\nLogs:\n  Bound result -147573\n  Bound result -5\n  Bound result 0\n\n[PASS] testFuzz_momentsIgnoreOrderAndReflectAboutZero(int24[8],uint8) (runs: 1000, μ: 106206, ~: 106166)\nLogs:\n  Bound result 11279\n  Bound result 15807\n  Bound result -60\n  Bound result 199\n  Bound result -6\n  Bound result 199\n  Bound result 0\n  Bound result 6\n\n[PASS] testFuzz_principalRoundingAndPriceMonotonicity(int24,int24,int24,int24,uint128) (runs: 1000, μ: 42868, ~: 42927)\nLogs:\n  Bound result -314\n  Bound result 5413\n  Bound result 367\n  Bound result 35521\n\n[PASS] testFuzz_symmetricTwoPointDistributionHasKnownPopulationSigma(int24,uint24) (runs: 1000, μ: 31553, ~: 31513)\nLogs:\n  Bound result -1\n  Bound result 12\n\n[PASS] testFuzz_triggerIsStrictAtBothSidesOfOneAndAHalfSigma(uint24,int24) (runs: 1000, μ: 17534, ~: 17405)\nLogs:\n  Bound result 138\n  Bound result 0\n\n[PASS] test_oneWeiFundsOnlyAffordableLiquidityAtExactBandBoundaries() (gas: 11129)\n[PASS] test_triggerUsesTheUnroundedMean() (gas: 13674)\n[PASS] test_zeroLiquidityZeroBudgetsAndZeroCapacity() (gas: 9238)\nSuite result: ok. 9 passed; 0 failed; 0 skipped; finished in 211.61ms (905.34ms CPU time)\n\nRan 1 test for test/VaultInvariant.t.sol:VaultInvariantTest\n[PASS]\nVaultInvariantTest invariants:\n[PASS] invariant_currencyAndShareConservation\n[PASS] invariant_positionAndFlashAccounting\n VaultInvariantTest invariants (runs: 64, calls: 2048, reverts: 0)\n\n╭--------------+----------------+-------+---------+----------╮\n| Contract     | Selector       | Calls | Reverts | Discards |\n+============================================================+\n| VaultHandler | advanceTime    | 239   | 0       | 0        |\n|--------------+----------------+-------+---------+----------|\n| VaultHandler | deposit        | 276   | 0       | 0        |\n|--------------+----------------+-------+---------+----------|\n| VaultHandler | donate         | 257   | 0       | 0        |\n|--------------+----------------+-------+---------+----------|\n| VaultHandler | emergency      | 237   | 0       | 0        |\n|--------------+----------------+-------+---------+----------|\n| VaultHandler | rebalance      | 260   | 0       | 0        |\n|--------------+----------------+-------+---------+----------|\n| VaultHandler | trade          | 238   | 0       | 0        |\n|--------------+----------------+-------+---------+----------|\n| VaultHandler | transferShares | 268   | 0       | 0        |\n|--------------+----------------+-------+---------+----------|\n| VaultHandler | withdraw       | 273   | 0       | 0        |\n╰--------------+----------------+-------+---------+----------╯\n\nLogs:\n  Bound result 4\n  Bound result 2082855670860682179098\n  Bound result 16\n  Bound result 22787\n  Bound result -182\n  Bound result 1024\n  Bound result 1578572978172490069028\n  Bound result 12\n  Bound result 999999999999887272\n  Bound result 4100096\n  Bound result 60\n  Bound result 299\n  Bound result 6577\n  Bound result 16\n  Bound result 2239\n  Bound result 999999999999000721\n  Bound result 1000000\n  Bound result 999999999999000011\n  Bound result 31536000\n  Bound result 8813\n  Bound result 2170665075\n  Bound result 3403\n  Bound result 11622\n  Bound result 4096\n  Bound result -102\n  Bound result 66\n  Bound result 22321\n  Bound result 999999999999001063\n  Bound result 580000000010999989\n  Bound result 19986\n  Bound result 8\n  Bound result 2000\n  Bound result 0\n  Bound result 2442\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 724.56ms (703.64ms CPU time)\n\nRan 2 tests for test/VaultAccountingInvariant.t.sol:VaultAccountingInvariantTest\n[PASS] invariant_assetsBackedByExternalCashFlows() (runs: 256, calls: 16384, reverts: 0)\n\n╭-------------------+----------------+-------+---------+----------╮\n| Contract          | Selector       | Calls | Reverts | Discards |\n+=================================================================+\n| AccountingHandler | deposit        | 2035  | 0       | 0        |\n|-------------------+----------------+-------+---------+----------|\n| AccountingHandler | donateFees     | 2020  | 0       | 0        |\n|-------------------+----------------+-------+---------+----------|\n| AccountingHandler | donateRaw      | 2089  | 0       | 0        |\n|-------------------+----------------+-------+---------+----------|\n| AccountingHandler | emergency      | 1992  | 0       | 0        |\n|-------------------+----------------+-------+---------+----------|\n| AccountingHandler | roundTrip      | 2051  | 0       | 0        |\n|-------------------+----------------+-------+---------+----------|\n| AccountingHandler | trade          | 2031  | 0       | 0        |\n|-------------------+----------------+-------+---------+----------|\n| AccountingHandler | transferShares | 2053  | 0       | 0        |\n|-------------------+----------------+-------+---------+----------|\n| AccountingHandler | withdraw       | 2113  | 0       | 0        |\n╰-------------------+----------------+-------+---------+----------╯\n\nLogs:\n  Bound result 4999999999999996001\n  Bound result 5955\n  Bound result 538832945359796653\n  Bound result 1000000000000\n  Bound result 4740\n  Bound result 1024\n  Bound result 4707\n  Bound result 21\n  Bound result 15106\n  Bound result 887271\n  Bound result 6892\n  Bound result 4582\n  Bound result 180\n  Bound result 1861\n  Bound result 4514\n  Bound result 14471\n  Bound result 600\n  Bound result 999999999999999995\n  Bound result 1158\n  Bound result 14\n  Bound result 123\n  Bound result 9\n  Bound result 0\n  Bound result 98\n  Bound result 14451\n  Bound result 243217742055707677\n  Bound result 192927968\n  Bound result 4160\n  Bound result 11359\n  Bound result 880840862777993395\n  Bound result 6\n  Bound result 0\n  Bound result -134\n  Bound result 5969\n  Bound result 5\n  Bound result 206\n  Bound result 200000000000000000\n  Bound result 822\n  Bound result 3\n  Bound result 3255\n  Bound result 96\n  Bound result 3453\n  Bound result -299\n  Bound result 967498425913701946\n  Bound result 6124\n  Bound result 4554377\n  Bound result 3\n  Bound result 2170\n  Bound result -599\n  Bound result 2219\n  Bound result 10\n  Bound result 18347044537239999045310\n  Bound result 881\n  Bound result 2070\n  Bound result 935454111198311790\n  Bound result 5\n  Bound result 2842\n  Bound result 267\n  Bound result 9360\n  Bound result 900\n  Bound result 999999999999999990\n  Bound result 61\n  Bound result 10964\n  Bound result 10276\n  Bound result 14643\n  Bound result 3523462942\n  Bound result 4\n  Bound result 99\n  Bound result 50\n\n[PASS] test_accountingHandlerExercisesEveryActionAndFullExit() (gas: 3553359)\nLogs:\n  Bound result 3000000000000000000\n  Bound result 2000000000000000000\n  Bound result 1000000000000000000\n  Bound result 500000000000000000\n  Bound result 100000000000000000\n  Bound result 200000000000000000\n  Bound result 1002724390519861757235\n  Bound result 1800\n  Bound result 20\n  Bound result 1000000000000000000\n  Bound result 1000000000000000000\n  Bound result 1\n\nSuite result: ok. 2 passed; 0 failed; 0 skipped; finished in 8.33s (8.31s CPU time)\n\nRan 13 test suites in 8.34s (10.57s CPU time): 115 tests passed, 0 failed, 0 skipped (115 total tests)\n","passed":true},{"durationMs":123,"exitCode":0,"name":"source-index","output":"{\"v\":1,\"entryPoints\":[\"SigmaHook.acceptOwnership()\",\"SigmaHook.activateEmergencyMode()\",\"SigmaHook.afterAddLiquidity(address,(address,address,uint24,int24,address),(int24,int24,int256,bytes32),int256,int256,bytes)\",\"SigmaHook.afterDonate(address,(address,address,uint24,int24,address),uint256,uint256,bytes)\",\"SigmaHook.afterInitialize(address,(address,address,uint24,int24,address),uint160,int24)\",\"SigmaHook.afterRemoveLiquidity(address,(address,address,uint24,int24,address),(int24,int24,int256,bytes32),int256,int256,bytes)\",\"SigmaHook.afterSwap(address,(address,address,uint24,int24,address),(bool,int256,uint160),int256,bytes)\",\"SigmaHook.approve(address,uint256)\",\"SigmaHook.beforeAddLiquidity(address,(address,address,uint24,int24,address),(int24,int24,int256,bytes32),bytes)\",\"SigmaHook.beforeDonate(address,(address,address,uint24,int24,address),uint256,uint256,bytes)\",\"SigmaHook.beforeInitialize(address,(address,address,uint24,int24,address),uint160)\",\"SigmaHook.beforeRemoveLiquidity(address,(address,address,uint24,int24,address),(int24,int24,int256,bytes32),bytes)\",\"SigmaHook.beforeSwap(address,(address,address,uint24,int24,address),(bool,int256,uint160),bytes)\",\"SigmaHook.deposit(uint256,uint256,uint256,address,uint256)\",\"SigmaHook.emergencyWithdraw()\",\"SigmaHook.emergencyWithdraw(uint256,address)\",\"SigmaHook.flashRebalance((address,address,uint24,int24,address))\",\"SigmaHook.pause()\",\"SigmaHook.receive()\",\"SigmaHook.rescueStrayETH()\",\"SigmaHook.resume()\",\"SigmaHook.retryInvestment((address,address,uint24,int24,address))\",\"SigmaHook.setCooldown(uint32)\",\"SigmaHook.setMode(uint8)\",\"SigmaHook.setRangeSigma(uint8)\",\"SigmaHook.setTriggerSigma(uint8)\",\"SigmaHook.setWETH(address)\",\"SigmaHook.transfer(address,uint256)\",\"SigmaHook.transferFrom(address,address,uint256)\",\"SigmaHook.transferOwnership(address)\",\"SigmaHook.unlockCallback(bytes)\",\"SigmaHook.withdraw(uint256,uint256,uint256,address,uint256)\",\"SigmaToken.approve(address,uint256)\",\"SigmaToken.transfer(address,uint256)\",\"SigmaToken.transferFrom(address,address,uint256)\"],\"files\":{\".gitignore\":3,\"LICENSE\":21,\"README.md\":111,\"dependencies.lock.json\":64,\"docs/SECURITY.md\":51,\"foundry.toml\":21,\"launch.json\":29,\"remappings.txt\":8,\"script/MineSalt.s.sol\":31,\"src/HookFlags.sol\":30,\"src/PermanentTokenLock.sol\":7,\"src/SigmaHook.sol\":788,\"src/SigmaMath.sol\":103,\"src/SigmaToken.sol\":11,\"src/libraries/BandMath.sol\":81,\"src/libraries/VaultMath.sol\":122,\"test/Adversarial.t.sol\":237,\"test/BandMath.t.sol\":234,\"test/Flywheel.t.sol\":296,\"test/MathProperties.t.sol\":202,\"test/NativeSafety.t.sol\":138,\"test/NativeVault.t.sol\":165,\"test/OperatorParams.t.sol\":446,\"test/README.md\":32,\"test/SigmaHook.t.sol\":553,\"test/SigmaToken.t.sol\":51,\"test/VaultAccountingInvariant.t.sol\":330,\"test/VaultFailurePaths.t.sol\":267,\"test/VaultInvariant.t.sol\":186,\"test/WethVaultIntegration.t.sol\":200,\"test/helpers/Fixture.sol\":117,\"test/helpers/MockERC20.sol\":24,\"test/helpers/TestRouter.sol\":84},\"excluded\":[\"lib/\",\"node_modules/\"],\"truncated\":false}","passed":true},{"durationMs":9934,"exitCode":0,"name":"slither","output":"[high/medium] reentrancy-balance at src/SigmaHook.sol:602: Reentrancy in SigmaHook._disposeLaunch(uint256) (src/SigmaHook.sol#602-610):\n[high/medium] reentrancy-balance at src/SigmaHook.sol:235: Reentrancy in SigmaHook.deposit(uint256,uint256,uint256,address,uint256) (src/SigmaHook.sol#235-276):\n[high/medium] reentrancy-eth at src/SigmaHook.sol:477: Reentrancy in SigmaHook._rebalance(address) (src/SigmaHook.sol#477-486):\n[high/medium] reentrancy-eth at src/SigmaHook.sol:458: Reentrancy in SigmaHook._initialDeposit(uint128,address,uint256) (src/SigmaHook.sol#458-475):\n[high/medium] reentrancy-eth at src/SigmaHook.sol:541: Reentrancy in SigmaHook._balanceInventory() (src/SigmaHook.sol#541-555):\n[high/medium] reentrancy-eth at src/SigmaHook.sol:492: Reentrancy in SigmaHook._changeLiquidity(int256) (src/SigmaHook.sol#492-515):\n[high/medium] reentrancy-eth at src/SigmaHook.sol:517: Reentrancy in SigmaHook._invest() (src/SigmaHook.sol#517-537):\n[high/medium] reentrancy-eth at src/SigmaHook.sol:561: Reentrancy in SigmaHook._distributeFees(address) (src/SigmaHook.sol#561-600):\n[high/medium] reentrancy-eth at src/SigmaHook.sol:477: Reentrancy in SigmaHook._rebalance(address) (src/SigmaHook.sol#477-486):\n[high/medium] reentrancy-eth at src/SigmaHook.sol:411: Reentrancy in SigmaHook.unlockCallback(bytes) (src/SigmaHook.sol#411-451):\n[high/medium] reentrancy-eth at src/SigmaHook.sol:561: Reentrancy in SigmaHook._distributeFees(address) (src/SigmaHook.sol#561-600):\n[high/medium] reentrancy-eth at src/SigmaHook.sol:477: Reentrancy in SigmaHook._rebalance(address) (src/SigmaHook.sol#477-486):\n[high/medium] reentrancy-eth at src/SigmaHook.sol:411: Reentrancy in SigmaHook.unlockCallback(bytes) (src/SigmaHook.sol#411-451):\n[high/medium] reentrancy-eth at src/SigmaHook.sol:411: Reentrancy in SigmaHook.unlockCallback(bytes) (src/SigmaHook.sol#411-451):\n[high/medium] reentrancy-eth at src/SigmaHook.sol:477: Reentrancy in SigmaHook._rebalance(address) (src/SigmaHook.sol#477-486):\n[medium/medium] reentrancy-no-eth at src/SigmaHook.sol:235: Reentrancy in SigmaHook.deposit(uint256,uint256,uint256,address,uint256) (src/SigmaHook.sol#235-276):\n[medium/medium] unused-return at src/SigmaHook.sol:625: SigmaHook._capacityFor(int24,int24) (src/SigmaHook.sol#625-633) ignores return value by (grossLower,None) = poolManager.getTickLiquidity(poolId,lower) (src/SigmaHook.sol#629)\n[medium/medium] unused-return at src/SigmaHook.sol:541: SigmaHook._balanceInventory() (src/SigmaHook.sol#541-555) ignores return value by (price,None,None,None) = poolManager.getSlot0(poolId) (src/SigmaHook.sol#543)\n[medium/medium] unused-return at src/SigmaHook.sol:458: SigmaHook._initialDeposit(uint128,address,uint256) (src/SigmaHook.sol#458-475) ignores return value by (price,None,None,None) = poolManager.getSlot0(poolId) (src/SigmaHook.sol#459)\n[medium/medium] unused-return at src/SigmaHook.sol:350: SigmaHook._afterSwap(address,PoolKey,SwapParams,BalanceDelta,bytes) (src/SigmaHook.sol#350-364) ignores return value by (None,tick,None,None) = poolManager.getSlot0(poolId) (src/SigmaHook.sol#358)\n[medium/medium] unused-return at src/SigmaHook.sol:367: SigmaHook.flashRebalance(PoolKey) (src/SigmaHook.sol#367-377) ignores return value by (None,tick,None,None) = poolManager.getSlot0(poolId) (src/SigmaHook.sol#371)\n[medium/medium] unused-return at src/SigmaHook.sol:561: SigmaHook._distributeFees(address) (src/SigmaHook.sol#561-600) ignores return value by (price,None,None,None) = poolManager.getSlot0(poolId) (src/SigmaHook.sol#566)\n[medium/medium] unused-return at src/SigmaMath.sol:26: SigmaMath.positionAssets(address,bool) (src/SigmaMath.sol#26-52) ignores return value by (price,None,None,None) = manager.getSlot0(id) (src/SigmaMath.sol#38)\n[medium/medium] unused-return at src/SigmaHook.sol:690: SigmaHook.feeLiabilities() (src/SigmaHook.sol#690-694) ignores return value by (None,None,fee0,fee1) = math.positionAssets(address(this),false) (src/SigmaHook.sol#691)\n[medium/medium] unused-return at src/SigmaHook.sol:706: SigmaHook._quoteDeposit(uint256,uint256,uint256) (src/SigmaHook.sol#706-732) ignores return value by (price,None,None,None) = poolManager.getSlot0(poolId) (src/SigmaHook.sol#717)\n[medium/medium] unused-return at src/SigmaMath.sol:26: SigmaMath.positionAssets(address,bool) (src/SigmaMath.sol#26-52) ignores return value by (None,last0,last1) = manager.getPositionInfo(id,basket,lower,upper,keccak256(bytes)(SigmaHook.vault)) (src/SigmaMath.sol#42-43)\n[medium/medium] unused-return at src/SigmaHook.sol:625: SigmaHook._capacityFor(int24,int24) (src/SigmaHook.sol#625-633) ignores return value by (grossUpper,None) = poolManager.getTickLiquidity(poolId,upper) (src/SigmaHook.sol#630)\n[medium/medium] unused-return at src/SigmaHook.sol:517: SigmaHook._invest() (src/SigmaHook.sol#517-537) ignores return value by (price,None,None,None) = poolManager.getSlot0(poolId) (src/SigmaHook.sol#522)\n[low/medium] events-maths at src/SigmaHook.sol:162: SigmaHook.setTriggerSigma(uint8) (src/SigmaHook.sol#162-165) should emit an event for: \n[low/medium] events-maths at src/SigmaHook.sol:782: SigmaHook.receive() (src/SigmaHook.sol#782-787) should emit an event for: \n[low/medium] events-maths at src/SigmaHook.sol:172: SigmaHook.setCooldown(uint32) (src/SigmaHook.sol#172-175) should emit an event for: \n[low/medium] events-maths at src/SigmaHook.sol:167: SigmaHook.setRangeSigma(uint8) (src/SigmaHook.sol#167-170) should emit an event for: \n[low/medium] calls-loop at src/SigmaHook.sol:541: SigmaHook._balanceInventory() (src/SigmaHook.sol#541-555) has external calls inside a loop: (zeroForOne,amountIn) = math.rebalanceTrade(price,tickLower,tickUpper,_budget(_key.currency0),_budget(_key.currency1),REBALANCE_SWAP_DEADBAND_BPS) (src/SigmaHook.sol#544-546)\n[low/medium] calls-loop at src/SigmaHook.sol:613: SigmaHook._budget(Currency) (src/SigmaHook.sol#613-618) has external calls inside a loop: amount = poolManager.balanceOf(address(this),currency.toId()) (src/SigmaHook.sol#614)\n[low/medium] calls-loop at src/SigmaHook.sol:517: SigmaHook._invest() (src/SigmaHook.sol#517-537) has external calls inside a loop: added = math.liquidityForAmounts(price,tickLower,tickUpper,_budget(_key.currency0),_budget(_key.currency1),capacity) (src/SigmaHook.sol#523-525)\n[low/medium] calls-loop at src/SigmaHook.sol:557: SigmaHook._routeLimit(bool) (src/SigmaHook.sol#557-559) has external calls inside a loop: math.priceAtTick(tickLower + 1) (src/SigmaHook.sol#558)\n[low/medium] calls-loop at src/SigmaHook.sol:541: SigmaHook._balanceInventory() (src/SigmaHook.sol#541-555) has external calls inside a loop: delta = poolManager.swap(_key,SwapParams(zeroForOne,- int256(amountIn),limit),) (src/SigmaHook.sol#550)\n[low/medium] calls-loop at src/SigmaHook.sol:557: SigmaHook._routeLimit(bool) (src/SigmaHook.sol#557-559) has external calls inside a loop: math.priceAtTick(tickUpper - 1) (src/SigmaHook.sol#558)\n[low/medium] reentrancy-benign at src/SigmaHook.sol:492: Reentrancy in SigmaHook._changeLiquidity(int256) (src/SigmaHook.sol#492-515):\n[low/medium] reentrancy-benign at src/SigmaHook.sol:517: Reentrancy in SigmaHook._invest() (src/SigmaHook.sol#517-537):\n[low/medium] reentrancy-benign at src/SigmaHook.sol:517: Reentrancy in SigmaHook._invest() (src/SigmaHook.sol#517-537):\n[low/medium] reentrancy-benign at src/SigmaHook.sol:235: Reentrancy in SigmaHook.deposit(uint256,uint256,uint256,address,uint256) (src/SigmaHook.sol#235-276):\n[low/medium] reentrancy-benign at src/SigmaHook.sol:411: Reentrancy in SigmaHook.unlockCallback(bytes) (src/SigmaHook.sol#411-451):\n[low/medium] reentrancy-benign at src/SigmaHook.sol:637: Reentrancy in SigmaHook._settle(Currency,int128) (src/SigmaHook.sol#637-658):\n[low/medium] reentrancy-benign at src/SigmaHook.sol:561: Reentrancy in SigmaHook._distributeFees(address) (src/SigmaHook.sol#561-600):\n[low/medium] reentrancy-benign at src/SigmaHook.sol:279: Reentrancy in SigmaHook.withdraw(uint256,uint256,uint256,address,uint256) (src/SigmaHook.sol#279-294):\n[low/medium] reentrancy-events at src/SigmaHook.sol:477: Reentrancy in SigmaHook._rebalance(address) (src/SigmaHook.sol#477-486):\n[low/medium] reentrancy-events at src/SigmaHook.sol:411: Reentrancy in SigmaHook.unlockCallback(bytes) (src/SigmaHook.sol#411-451):\n[low/medium] reentrancy-events at src/SigmaHook.sol:411: Reentrancy in SigmaHook.unlockCallback(bytes) (src/SigmaHook.sol#411-451):\n[low/medium] reentrancy-events at src/SigmaHook.sol:517: Reentrancy in SigmaHook._invest() (src/SigmaHook.sol#517-537):\n[low/medium] reentrancy-events at src/SigmaHook.sol:477: Reentrancy in SigmaHook._rebalance(address) (src/SigmaHook.sol#477-486):\n[low/medium] reentrancy-events at src/SigmaHook.sol:492: Reentrancy in SigmaHook._changeLiquidity(int256) (src/SigmaHook.sol#492-515):\n[low/medium] reentrancy-events at src/SigmaHook.sol:517: Reentrancy in SigmaHook._invest() (src/SigmaHook.sol#517-537):\n[low/medium] reentrancy-events at src/SigmaHook.sol:477: Reentrancy in SigmaHook._rebalance(address) (src/SigmaHook.sol#477-486):\n[low/medium] reentrancy-events at src/SigmaHook.sol:602: Reentrancy in SigmaHook._disposeLaunch(uint256) (src/SigmaHook.sol#602-610):\n[low/medium] reentrancy-events at src/SigmaHook.sol:561: Reentrancy in SigmaHook._distributeFees(address) (src/SigmaHook.sol#561-600):\n[low/medium] reentrancy-events at src/SigmaHook.sol:541: Reentrancy in SigmaHook._balanceInventory() (src/SigmaHook.sol#541-555):\n[low/medium] reentrancy-events at src/SigmaHook.sol:561: Reentrancy in SigmaHook._distributeFees(address) (src/SigmaHook.sol#561-600):\n[low/medium] reentrancy-events at src/SigmaHook.sol:561: Reentrancy in SigmaHook._distributeFees(address) (src/SigmaHook.sol#561-600):\n[low/medium] timestamp at src/SigmaHook.sol:279: SigmaHook.withdraw(uint256,uint256,uint256,address,uint256) (src/SigmaHook.sol#279-294) uses timestamp for comparisons\n[low/medium] timestamp at src/SigmaHook.sol:235: SigmaHook.deposit(uint256,uint256,uint256,address,uint256) (src/SigmaHook.sol#235-276) uses timestamp for comparisons\n[low/medium] timestamp at src/SigmaHook.sol:367: SigmaHook.flashRebalance(PoolKey) (src/SigmaHook.sol#367-377) uses timestamp for comparisons","passed":true},{"durationMs":837,"exitCode":0,"name":"aderyn","output":"[high] contract-locks-ether at src/SigmaHook.sol:31: Contract locks Ether without a withdraw function\n[high] unsafe-casting at src/SigmaHook.sol:419: Unsafe Casting of integers\n[low] centralization-risk at src/SigmaHook.sol:31: Centralization Risk (11 places)\n[low] costly-loop at src/SigmaHook.sol:341: Costly operations inside loop (2 places)\n[low] internal-function-used-once at src/HookFlags.sol:23: Internal Function Used Only Once (7 places)\n[low] large-numeric-literal at src/SigmaHook.sol:504: Large Numeric Literal (8 places)\n[low] literal-instead-of-constant at src/SigmaHook.sol:144: Literal Instead of Constant (37 places)\n[low] local-variable-shadowing at src/SigmaHook.sol:65: Local Variable Shadows State Variable\n[low] non-reentrant-not-first at src/SigmaHook.sol:298: `nonReentrant` is Not the First Modifier (2 places)\n[low] require-revert-in-loop at src/SigmaHook.sol:521: Loop Contains `require`/`revert`\n[low] state-change-without-event at src/SigmaHook.sol:162: State Change Without Event (8 places)\n[low] unchecked-return at src/SigmaHook.sol:251: Unchecked Return (6 places)\n[low] uninitialized-local-variable at src/SigmaHook.sol:521: Uninitialized Local Variable (3 places)\n[low] unsafe-erc20-operation at src/SigmaHook.sol:403: Unsafe ERC20 Operation (4 places)\n[low] unused-public-function at src/SigmaHook.sol:197: Public Function Not Used Internally","passed":true}],"detail":"all checks passed","evaluation":"checks","profile":"foundry","status":"accepted","submissionHash":"85181fcb63e929abf1ad40f6de029447b06f19183dee96a868f5e228637df76a","verifiedTreeHash":"bcfcede1b87b2406cb9d46412c55bd290f0f648b","verifierVersion":"0.1.0+d372f99e"}]}