footprintjs 10.0.0 → 10.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENTS.md +2 -1
- package/CLAUDE.md +43 -7
- package/README.md +136 -312
- package/dist/esm/index.d.ts +60 -2
- package/dist/esm/index.js +13 -6
- package/dist/esm/lib/attempt/anySignal.d.ts +19 -0
- package/dist/esm/lib/attempt/anySignal.js +39 -0
- package/dist/esm/lib/attempt/call.d.ts +88 -0
- package/dist/esm/lib/attempt/call.js +129 -0
- package/dist/esm/lib/attempt/category.d.ts +31 -0
- package/dist/esm/lib/attempt/category.js +107 -0
- package/dist/esm/lib/attempt/correlation.d.ts +95 -0
- package/dist/esm/lib/attempt/correlation.js +178 -0
- package/dist/esm/lib/attempt/deadline.d.ts +44 -0
- package/dist/esm/lib/attempt/deadline.js +101 -0
- package/dist/esm/lib/attempt/decision.d.ts +52 -0
- package/dist/esm/lib/attempt/decision.js +134 -0
- package/dist/esm/lib/attempt/effect.d.ts +76 -0
- package/dist/esm/lib/attempt/effect.js +160 -0
- package/dist/esm/lib/attempt/errors.d.ts +41 -0
- package/dist/esm/lib/attempt/errors.js +44 -0
- package/dist/esm/lib/attempt/index.d.ts +18 -0
- package/dist/esm/lib/attempt/index.js +15 -0
- package/dist/esm/lib/attempt/name.d.ts +21 -0
- package/dist/esm/lib/attempt/name.js +43 -0
- package/dist/esm/lib/attempt/observed.d.ts +66 -0
- package/dist/esm/lib/attempt/observed.js +171 -0
- package/dist/esm/lib/attempt/policy.d.ts +45 -0
- package/dist/esm/lib/attempt/policy.js +83 -0
- package/dist/esm/lib/attempt/record.d.ts +11 -0
- package/dist/esm/lib/attempt/record.js +24 -0
- package/dist/esm/lib/attempt/retryLoopContext.d.ts +18 -0
- package/dist/esm/lib/attempt/retryLoopContext.js +24 -0
- package/dist/esm/lib/attempt/retryLoopTypes.d.ts +18 -0
- package/dist/esm/lib/attempt/retryLoopTypes.js +2 -0
- package/dist/esm/lib/attempt/runner.d.ts +155 -0
- package/dist/esm/lib/attempt/runner.js +503 -0
- package/dist/esm/lib/attempt/standalone.d.ts +47 -0
- package/dist/esm/lib/attempt/standalone.js +126 -0
- package/dist/esm/lib/attempt/types.d.ts +453 -0
- package/dist/esm/lib/attempt/types.js +16 -0
- package/dist/esm/lib/budget/index.d.ts +9 -0
- package/dist/esm/lib/budget/index.js +9 -0
- package/dist/esm/lib/budget/timeBudget.d.ts +136 -0
- package/dist/esm/lib/budget/timeBudget.js +666 -0
- package/dist/esm/lib/builder/FlowChartBuilder.d.ts +88 -3
- package/dist/esm/lib/builder/FlowChartBuilder.js +224 -16
- package/dist/esm/lib/builder/retryLoop.d.ts +56 -0
- package/dist/esm/lib/builder/retryLoop.js +283 -0
- package/dist/esm/lib/builder/types.d.ts +35 -1
- package/dist/esm/lib/builder/types.js +1 -1
- package/dist/esm/lib/decide/decide.js +2 -2
- package/dist/esm/lib/decide/index.d.ts +1 -1
- package/dist/esm/lib/decide/index.js +2 -2
- package/dist/esm/lib/decide/types.d.ts +3 -0
- package/dist/esm/lib/decide/types.js +1 -8
- package/dist/esm/lib/engine/graph/StageNode.d.ts +11 -1
- package/dist/esm/lib/engine/graph/StageNode.js +1 -1
- package/dist/esm/lib/engine/graph/prefixNodeTree.js +5 -1
- package/dist/esm/lib/engine/handlers/ResumeEntry.js +3 -1
- package/dist/esm/lib/engine/handlers/StageRunner.d.ts +8 -1
- package/dist/esm/lib/engine/handlers/StageRunner.js +36 -9
- package/dist/esm/lib/engine/handlers/SubflowExecutor.js +20 -4
- package/dist/esm/lib/engine/handlers/stageError.d.ts +7 -0
- package/dist/esm/lib/engine/handlers/stageError.js +11 -1
- package/dist/esm/lib/engine/index.d.ts +2 -2
- package/dist/esm/lib/engine/index.js +1 -1
- package/dist/esm/lib/engine/narrative/CombinedNarrativeRecorder.d.ts +27 -13
- package/dist/esm/lib/engine/narrative/CombinedNarrativeRecorder.js +68 -40
- package/dist/esm/lib/engine/narrative/FlowRecorderDispatcher.d.ts +2 -0
- package/dist/esm/lib/engine/narrative/FlowRecorderDispatcher.js +14 -1
- package/dist/esm/lib/engine/narrative/NarrativeFlowRecorder.d.ts +22 -3
- package/dist/esm/lib/engine/narrative/NarrativeFlowRecorder.js +61 -9
- package/dist/esm/lib/engine/narrative/NullControlFlowNarrativeGenerator.d.ts +1 -0
- package/dist/esm/lib/engine/narrative/NullControlFlowNarrativeGenerator.js +2 -1
- package/dist/esm/lib/engine/narrative/formatting/sentences.d.ts +23 -0
- package/dist/esm/lib/engine/narrative/formatting/sentences.js +127 -1
- package/dist/esm/lib/engine/narrative/index.d.ts +2 -2
- package/dist/esm/lib/engine/narrative/index.js +1 -1
- package/dist/esm/lib/engine/narrative/narrativeTypes.d.ts +27 -21
- package/dist/esm/lib/engine/narrative/narrativeTypes.js +1 -1
- package/dist/esm/lib/engine/narrative/recorders/ManifestFlowRecorder.d.ts +45 -2
- package/dist/esm/lib/engine/narrative/recorders/ManifestFlowRecorder.js +55 -2
- package/dist/esm/lib/engine/narrative/recorders/index.d.ts +1 -1
- package/dist/esm/lib/engine/narrative/recorders/index.js +1 -1
- package/dist/esm/lib/engine/narrative/types.d.ts +70 -4
- package/dist/esm/lib/engine/narrative/types.js +1 -1
- package/dist/esm/lib/engine/traversal/FlowchartTraverser.d.ts +59 -19
- package/dist/esm/lib/engine/traversal/FlowchartTraverser.js +182 -114
- package/dist/esm/lib/engine/traversalContext.d.ts +7 -2
- package/dist/esm/lib/engine/traversalContext.js +6 -3
- package/dist/esm/lib/engine/types.d.ts +52 -57
- package/dist/esm/lib/engine/types.js +1 -1
- package/dist/esm/lib/{decide → filter}/evaluator.d.ts +7 -2
- package/dist/esm/lib/filter/evaluator.js +135 -0
- package/dist/esm/lib/ids/idempotencyKey.d.ts +14 -0
- package/dist/esm/lib/ids/idempotencyKey.js +24 -0
- package/dist/esm/lib/memory/StageContext.d.ts +109 -3
- package/dist/esm/lib/memory/StageContext.js +214 -4
- package/dist/esm/lib/memory/borrowedMutation.d.ts +8 -0
- package/dist/esm/lib/memory/borrowedMutation.js +14 -1
- package/dist/esm/lib/memory/frameTypes.d.ts +30 -0
- package/dist/esm/lib/memory/frameTypes.js +3 -1
- package/dist/esm/lib/memory/redaction.d.ts +12 -0
- package/dist/esm/lib/memory/redaction.js +54 -5
- package/dist/esm/lib/pause/record.js +10 -1
- package/dist/esm/lib/pause/types.d.ts +19 -0
- package/dist/esm/lib/pause/types.js +17 -1
- package/dist/esm/lib/reactive/createTypedScope.js +3 -1
- package/dist/esm/lib/reactive/types.d.ts +36 -4
- package/dist/esm/lib/reactive/types.js +3 -1
- package/dist/esm/lib/recorder/AttemptRecorder.d.ts +141 -0
- package/dist/esm/lib/recorder/AttemptRecorder.js +412 -0
- package/dist/esm/lib/recorder/ControlDepRecorder.d.ts +22 -2
- package/dist/esm/lib/recorder/ControlDepRecorder.js +33 -2
- package/dist/esm/lib/recorder/EmitRecorder.d.ts +3 -0
- package/dist/esm/lib/recorder/EmitRecorder.js +1 -1
- package/dist/esm/lib/recorder/InOutRecorder.d.ts +37 -1
- package/dist/esm/lib/recorder/InOutRecorder.js +75 -6
- package/dist/esm/lib/recorder/QualityRecorder.d.ts +32 -5
- package/dist/esm/lib/recorder/QualityRecorder.js +87 -29
- package/dist/esm/lib/recorder/TopologyRecorder.d.ts +35 -5
- package/dist/esm/lib/recorder/TopologyRecorder.js +76 -2
- package/dist/esm/lib/recorder/attemptMetricRows.d.ts +11 -0
- package/dist/esm/lib/recorder/attemptMetricRows.js +202 -0
- package/dist/esm/lib/recorder/attemptMetrics.d.ts +7 -0
- package/dist/esm/lib/recorder/attemptMetrics.js +165 -0
- package/dist/esm/lib/recorder/attemptMetricsTypes.d.ts +114 -0
- package/dist/esm/lib/recorder/attemptMetricsTypes.js +2 -0
- package/dist/esm/lib/recorder/attemptOTel.d.ts +78 -0
- package/dist/esm/lib/recorder/attemptOTel.js +107 -0
- package/dist/esm/lib/recorder/attemptSeries.d.ts +81 -0
- package/dist/esm/lib/recorder/attemptSeries.js +103 -0
- package/dist/esm/lib/recorder/hooks.d.ts +9 -0
- package/dist/esm/lib/recorder/hooks.js +4 -1
- package/dist/esm/lib/recorder/qualityTrace.d.ts +4 -1
- package/dist/esm/lib/recorder/qualityTrace.js +14 -6
- package/dist/esm/lib/runner/DeferredObserverTier.js +13 -1
- package/dist/esm/lib/runner/ExecutionRuntime.d.ts +54 -6
- package/dist/esm/lib/runner/ExecutionRuntime.js +57 -5
- package/dist/esm/lib/runner/FlowChartExecutor.d.ts +42 -2
- package/dist/esm/lib/runner/FlowChartExecutor.js +238 -45
- package/dist/esm/lib/runner/RunnableChart.d.ts +6 -0
- package/dist/esm/lib/runner/RunnableChart.js +5 -1
- package/dist/esm/lib/runner/attach.d.ts +2 -1
- package/dist/esm/lib/runner/attach.js +8 -2
- package/dist/esm/lib/runner/checkpoint.js +3 -1
- package/dist/esm/lib/runner/deadline.d.ts +42 -0
- package/dist/esm/lib/runner/deadline.js +90 -0
- package/dist/esm/lib/runner/index.d.ts +3 -1
- package/dist/esm/lib/runner/index.js +2 -1
- package/dist/esm/lib/runner/options.d.ts +17 -0
- package/dist/esm/lib/runner/options.js +3 -1
- package/dist/esm/lib/runner/recordSink.d.ts +128 -0
- package/dist/esm/lib/runner/recordSink.js +296 -0
- package/dist/esm/lib/runner/resume.d.ts +3 -0
- package/dist/esm/lib/runner/resume.js +22 -2
- package/dist/esm/lib/runner/snapshot.d.ts +2 -2
- package/dist/esm/lib/runner/snapshot.js +6 -2
- package/dist/esm/lib/scope/ScopeFacade.d.ts +118 -4
- package/dist/esm/lib/scope/ScopeFacade.js +304 -7
- package/dist/esm/lib/scope/recorders/DebugRecorder.d.ts +17 -3
- package/dist/esm/lib/scope/recorders/DebugRecorder.js +79 -13
- package/dist/esm/lib/scope/recorders/MetricRecorder.d.ts +10 -0
- package/dist/esm/lib/scope/recorders/MetricRecorder.js +15 -2
- package/dist/esm/lib/scope/runtime.d.ts +3 -0
- package/dist/esm/lib/scope/runtime.js +1 -1
- package/dist/esm/lib/scope/types.d.ts +6 -0
- package/dist/esm/lib/scope/types.js +1 -1
- package/dist/esm/lib/sinks/fileSink.d.ts +135 -0
- package/dist/esm/lib/sinks/fileSink.js +387 -0
- package/dist/esm/recorders.d.ts +8 -2
- package/dist/esm/recorders.js +7 -1
- package/dist/esm/sinks.d.ts +23 -0
- package/dist/esm/sinks.js +23 -0
- package/dist/esm/trace.d.ts +2 -2
- package/dist/esm/trace.js +1 -1
- package/dist/index.js +77 -60
- package/dist/lib/attempt/anySignal.js +43 -0
- package/dist/lib/attempt/call.js +134 -0
- package/dist/lib/attempt/category.js +111 -0
- package/dist/lib/attempt/correlation.js +186 -0
- package/dist/lib/attempt/deadline.js +112 -0
- package/dist/lib/attempt/decision.js +139 -0
- package/dist/lib/attempt/effect.js +174 -0
- package/dist/lib/attempt/errors.js +49 -0
- package/dist/lib/attempt/index.js +26 -0
- package/dist/lib/attempt/name.js +48 -0
- package/dist/lib/attempt/observed.js +177 -0
- package/dist/lib/attempt/policy.js +92 -0
- package/dist/lib/attempt/record.js +29 -0
- package/dist/lib/attempt/retryLoopContext.js +31 -0
- package/dist/lib/attempt/retryLoopTypes.js +3 -0
- package/dist/lib/attempt/runner.js +510 -0
- package/dist/lib/attempt/standalone.js +130 -0
- package/dist/lib/attempt/types.js +17 -0
- package/dist/lib/budget/index.js +17 -0
- package/dist/lib/budget/timeBudget.js +674 -0
- package/dist/lib/builder/FlowChartBuilder.js +224 -16
- package/dist/lib/builder/retryLoop.js +287 -0
- package/dist/lib/builder/types.js +1 -1
- package/dist/lib/decide/decide.js +2 -2
- package/dist/lib/decide/index.js +2 -2
- package/dist/lib/decide/types.js +1 -8
- package/dist/lib/engine/graph/StageNode.js +1 -1
- package/dist/lib/engine/graph/prefixNodeTree.js +5 -1
- package/dist/lib/engine/handlers/ResumeEntry.js +3 -1
- package/dist/lib/engine/handlers/StageRunner.js +36 -9
- package/dist/lib/engine/handlers/SubflowExecutor.js +20 -4
- package/dist/lib/engine/handlers/stageError.js +13 -2
- package/dist/lib/engine/index.js +1 -1
- package/dist/lib/engine/narrative/CombinedNarrativeRecorder.js +67 -39
- package/dist/lib/engine/narrative/FlowRecorderDispatcher.js +14 -1
- package/dist/lib/engine/narrative/NarrativeFlowRecorder.js +60 -8
- package/dist/lib/engine/narrative/NullControlFlowNarrativeGenerator.js +2 -1
- package/dist/lib/engine/narrative/formatting/sentences.js +131 -2
- package/dist/lib/engine/narrative/index.js +1 -1
- package/dist/lib/engine/narrative/narrativeTypes.js +1 -1
- package/dist/lib/engine/narrative/recorders/ManifestFlowRecorder.js +55 -2
- package/dist/lib/engine/narrative/recorders/index.js +1 -1
- package/dist/lib/engine/narrative/types.js +1 -1
- package/dist/lib/engine/traversal/FlowchartTraverser.js +181 -113
- package/dist/lib/engine/traversalContext.js +6 -3
- package/dist/lib/engine/types.js +1 -1
- package/dist/lib/filter/evaluator.js +139 -0
- package/dist/lib/ids/idempotencyKey.js +28 -0
- package/dist/lib/memory/StageContext.js +215 -5
- package/dist/lib/memory/borrowedMutation.js +16 -2
- package/dist/lib/memory/frameTypes.js +3 -1
- package/dist/lib/memory/redaction.js +54 -5
- package/dist/lib/pause/record.js +10 -1
- package/dist/lib/pause/types.js +17 -1
- package/dist/lib/reactive/createTypedScope.js +3 -1
- package/dist/lib/reactive/types.js +3 -1
- package/dist/lib/recorder/AttemptRecorder.js +417 -0
- package/dist/lib/recorder/ControlDepRecorder.js +33 -2
- package/dist/lib/recorder/EmitRecorder.js +1 -1
- package/dist/lib/recorder/InOutRecorder.js +75 -6
- package/dist/lib/recorder/QualityRecorder.js +87 -29
- package/dist/lib/recorder/TopologyRecorder.js +76 -2
- package/dist/lib/recorder/attemptMetricRows.js +209 -0
- package/dist/lib/recorder/attemptMetrics.js +174 -0
- package/dist/lib/recorder/attemptMetricsTypes.js +3 -0
- package/dist/lib/recorder/attemptOTel.js +111 -0
- package/dist/lib/recorder/attemptSeries.js +113 -0
- package/dist/lib/recorder/hooks.js +4 -1
- package/dist/lib/recorder/qualityTrace.js +14 -6
- package/dist/lib/runner/DeferredObserverTier.js +13 -1
- package/dist/lib/runner/ExecutionRuntime.js +57 -5
- package/dist/lib/runner/FlowChartExecutor.js +238 -45
- package/dist/lib/runner/RunnableChart.js +5 -1
- package/dist/lib/runner/attach.js +8 -2
- package/dist/lib/runner/checkpoint.js +3 -1
- package/dist/lib/runner/deadline.js +94 -0
- package/dist/lib/runner/index.js +4 -2
- package/dist/lib/runner/options.js +3 -1
- package/dist/lib/runner/recordSink.js +302 -0
- package/dist/lib/runner/resume.js +22 -2
- package/dist/lib/runner/snapshot.js +6 -2
- package/dist/lib/scope/ScopeFacade.js +303 -6
- package/dist/lib/scope/recorders/DebugRecorder.js +79 -13
- package/dist/lib/scope/recorders/MetricRecorder.js +15 -2
- package/dist/lib/scope/runtime.js +1 -1
- package/dist/lib/scope/types.js +1 -1
- package/dist/lib/sinks/fileSink.js +392 -0
- package/dist/recorders.js +10 -2
- package/dist/sinks.js +32 -0
- package/dist/trace.js +1 -1
- package/dist/types/index.d.ts +60 -2
- package/dist/types/lib/attempt/anySignal.d.ts +19 -0
- package/dist/types/lib/attempt/call.d.ts +88 -0
- package/dist/types/lib/attempt/category.d.ts +31 -0
- package/dist/types/lib/attempt/correlation.d.ts +95 -0
- package/dist/types/lib/attempt/deadline.d.ts +44 -0
- package/dist/types/lib/attempt/decision.d.ts +52 -0
- package/dist/types/lib/attempt/effect.d.ts +76 -0
- package/dist/types/lib/attempt/errors.d.ts +41 -0
- package/dist/types/lib/attempt/index.d.ts +18 -0
- package/dist/types/lib/attempt/name.d.ts +21 -0
- package/dist/types/lib/attempt/observed.d.ts +66 -0
- package/dist/types/lib/attempt/policy.d.ts +45 -0
- package/dist/types/lib/attempt/record.d.ts +11 -0
- package/dist/types/lib/attempt/retryLoopContext.d.ts +18 -0
- package/dist/types/lib/attempt/retryLoopTypes.d.ts +18 -0
- package/dist/types/lib/attempt/runner.d.ts +155 -0
- package/dist/types/lib/attempt/standalone.d.ts +47 -0
- package/dist/types/lib/attempt/types.d.ts +453 -0
- package/dist/types/lib/budget/index.d.ts +9 -0
- package/dist/types/lib/budget/timeBudget.d.ts +136 -0
- package/dist/types/lib/builder/FlowChartBuilder.d.ts +88 -3
- package/dist/types/lib/builder/retryLoop.d.ts +56 -0
- package/dist/types/lib/builder/types.d.ts +35 -1
- package/dist/types/lib/decide/index.d.ts +1 -1
- package/dist/types/lib/decide/types.d.ts +3 -0
- package/dist/types/lib/engine/graph/StageNode.d.ts +11 -1
- package/dist/types/lib/engine/handlers/StageRunner.d.ts +8 -1
- package/dist/types/lib/engine/handlers/stageError.d.ts +7 -0
- package/dist/types/lib/engine/index.d.ts +2 -2
- package/dist/types/lib/engine/narrative/CombinedNarrativeRecorder.d.ts +27 -13
- package/dist/types/lib/engine/narrative/FlowRecorderDispatcher.d.ts +2 -0
- package/dist/types/lib/engine/narrative/NarrativeFlowRecorder.d.ts +22 -3
- package/dist/types/lib/engine/narrative/NullControlFlowNarrativeGenerator.d.ts +1 -0
- package/dist/types/lib/engine/narrative/formatting/sentences.d.ts +23 -0
- package/dist/types/lib/engine/narrative/index.d.ts +2 -2
- package/dist/types/lib/engine/narrative/narrativeTypes.d.ts +27 -21
- package/dist/types/lib/engine/narrative/recorders/ManifestFlowRecorder.d.ts +45 -2
- package/dist/types/lib/engine/narrative/recorders/index.d.ts +1 -1
- package/dist/types/lib/engine/narrative/types.d.ts +70 -4
- package/dist/types/lib/engine/traversal/FlowchartTraverser.d.ts +59 -19
- package/dist/types/lib/engine/traversalContext.d.ts +7 -2
- package/dist/types/lib/engine/types.d.ts +52 -57
- package/dist/types/lib/{decide → filter}/evaluator.d.ts +7 -2
- package/dist/types/lib/ids/idempotencyKey.d.ts +14 -0
- package/dist/types/lib/memory/StageContext.d.ts +109 -3
- package/dist/types/lib/memory/borrowedMutation.d.ts +8 -0
- package/dist/types/lib/memory/frameTypes.d.ts +30 -0
- package/dist/types/lib/memory/redaction.d.ts +12 -0
- package/dist/types/lib/pause/types.d.ts +19 -0
- package/dist/types/lib/reactive/types.d.ts +36 -4
- package/dist/types/lib/recorder/AttemptRecorder.d.ts +141 -0
- package/dist/types/lib/recorder/ControlDepRecorder.d.ts +22 -2
- package/dist/types/lib/recorder/EmitRecorder.d.ts +3 -0
- package/dist/types/lib/recorder/InOutRecorder.d.ts +37 -1
- package/dist/types/lib/recorder/QualityRecorder.d.ts +32 -5
- package/dist/types/lib/recorder/TopologyRecorder.d.ts +35 -5
- package/dist/types/lib/recorder/attemptMetricRows.d.ts +11 -0
- package/dist/types/lib/recorder/attemptMetrics.d.ts +7 -0
- package/dist/types/lib/recorder/attemptMetricsTypes.d.ts +114 -0
- package/dist/types/lib/recorder/attemptOTel.d.ts +78 -0
- package/dist/types/lib/recorder/attemptSeries.d.ts +81 -0
- package/dist/types/lib/recorder/hooks.d.ts +9 -0
- package/dist/types/lib/recorder/qualityTrace.d.ts +4 -1
- package/dist/types/lib/runner/ExecutionRuntime.d.ts +54 -6
- package/dist/types/lib/runner/FlowChartExecutor.d.ts +42 -2
- package/dist/types/lib/runner/RunnableChart.d.ts +6 -0
- package/dist/types/lib/runner/attach.d.ts +2 -1
- package/dist/types/lib/runner/deadline.d.ts +42 -0
- package/dist/types/lib/runner/index.d.ts +3 -1
- package/dist/types/lib/runner/options.d.ts +17 -0
- package/dist/types/lib/runner/recordSink.d.ts +128 -0
- package/dist/types/lib/runner/resume.d.ts +3 -0
- package/dist/types/lib/runner/snapshot.d.ts +2 -2
- package/dist/types/lib/scope/ScopeFacade.d.ts +118 -4
- package/dist/types/lib/scope/recorders/DebugRecorder.d.ts +17 -3
- package/dist/types/lib/scope/recorders/MetricRecorder.d.ts +10 -0
- package/dist/types/lib/scope/runtime.d.ts +3 -0
- package/dist/types/lib/scope/types.d.ts +6 -0
- package/dist/types/lib/sinks/fileSink.d.ts +135 -0
- package/dist/types/recorders.d.ts +8 -2
- package/dist/types/sinks.d.ts +23 -0
- package/dist/types/trace.d.ts +2 -2
- package/package.json +17 -3
- package/dist/esm/lib/decide/evaluator.js +0 -130
- package/dist/lib/decide/evaluator.js +0 -134
package/dist/esm/index.js
CHANGED
|
@@ -17,10 +17,22 @@
|
|
|
17
17
|
*/
|
|
18
18
|
/** @category Quick Start */
|
|
19
19
|
export { flowChart, FlowChartBuilder, flowChartSelector } from './lib/builder/index.js';
|
|
20
|
+
export { timeBudget } from './lib/budget/index.js';
|
|
20
21
|
/** @category Quick Start */
|
|
21
22
|
export { narrative } from './recorders.js';
|
|
22
23
|
/** @category Decision Branching */
|
|
23
24
|
export { decide, select } from './lib/decide/index.js';
|
|
25
|
+
/**
|
|
26
|
+
* @category Attempts
|
|
27
|
+
*
|
|
28
|
+
* `attempt()` — the attempt runner for code that is not a stage (records go to its `onAttempt`); `errorCategory`
|
|
29
|
+
* — the one failure classifier (seven fixed categories); `retryRules` — the one retry rule table, as `decide()`
|
|
30
|
+
* rules; the attempt contract's two errors.
|
|
31
|
+
*/
|
|
32
|
+
export { attempt, AttemptTimeoutError, errorCategory, retryRules, UnknownEffectError } from './lib/attempt/index.js';
|
|
33
|
+
export { formatTraceparent, parseTraceparent, TraceparentError } from './lib/attempt/index.js';
|
|
34
|
+
/** @category Run */
|
|
35
|
+
export { RecordSinkError } from './lib/runner/index.js';
|
|
24
36
|
/** @category Run */
|
|
25
37
|
export { FlowChartExecutor } from './lib/runner/index.js';
|
|
26
38
|
/** @category Run */
|
|
@@ -82,10 +94,5 @@ export { extractErrorInfo, formatErrorInfo } from './lib/engine/index.js';
|
|
|
82
94
|
* `enableDevMode` for the full list and usage example.
|
|
83
95
|
*/
|
|
84
96
|
export { disableDevMode, enableDevMode, isDevMode } from './lib/devMode.js';
|
|
85
|
-
// `defineScopeFromZod` and the other zod-based scope helpers moved to the opt-in
|
|
86
|
-
// `footprintjs/zod` entry — keeping zod out of the core load path (it is an
|
|
87
|
-
// optional peer). Import them from 'footprintjs/zod'.
|
|
88
|
-
// A run's record as JSON without the engine's recursion limit (9.26.0): the
|
|
89
|
-
// same bytes JSON.stringify emits, for a deep `next` chain it cannot encode.
|
|
90
97
|
export { stringifySnapshot } from './lib/runner/stringifySnapshot.js';
|
|
91
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7R0FnQkc7QUFTSCw0QkFBNEI7QUFDNUIsT0FBTyxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBNkJ4Riw0QkFBNEI7QUFDNUIsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBb0IzQyxtQ0FBbUM7QUFDbkMsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQWtCdkQsb0JBQW9CO0FBQ3BCLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRTFELG9CQUFvQjtBQUNwQixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFxQm5ELCtCQUErQjtBQUMvQixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFFdEQsK0JBQStCO0FBQy9CLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUVyRCxvQ0FBb0M7QUFDcEMsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFtQzVELHFFQUFxRTtBQUNyRSxPQUFPLEVBQ0wsc0JBQXNCLEVBQ3RCLHNCQUFzQixFQUN0QixrQkFBa0IsRUFDbEIsV0FBVyxHQUNaLE1BQU0seUJBQXlCLENBQUM7QUFpRGpDLCtCQUErQjtBQUMvQixPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUs5RCwrQkFBK0I7QUFDL0IsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFN0QsK0JBQStCO0FBQy9CLE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRXRFLCtCQUErQjtBQUMvQixPQUFPLEVBQUUsOEJBQThCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUV2RSwrQkFBK0I7QUFDL0IsT0FBTyxFQUFFLGdDQUFnQyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFekUsK0JBQStCO0FBQy9CLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRWpFLCtCQUErQjtBQUMvQixPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUV0RSwrQkFBK0I7QUFDL0IsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFcEUsK0JBQStCO0FBQy9CLE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBbUJ0RSx1Q0FBdUM7QUFDdkMsT0FBTyxFQUFFLGtCQUFrQixFQUFFLGdCQUFnQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFN0UsK0VBQStFO0FBQy9FLDRFQUE0RTtBQUM1RSwrRUFBK0U7QUFFL0UsOEJBQThCO0FBQzlCLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBMEI1RCw2QkFBNkI7QUFDN0IsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBZ0VqRCxzQ0FBc0M7QUFDdEMsT0FBTyxFQUFFLFlBQVksRUFBRSxhQUFhLEVBQUUsS0FBSyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFM0Usc0NBQXNDO0FBQ3RDLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxxQkFBcUIsRUFBRSxlQUFlLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQVNyRyxnQ0FBZ0M7QUFDaEMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLGVBQWUsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRTFFLCtFQUErRTtBQUMvRSxpREFBaUQ7QUFDakQsK0VBQStFO0FBRS9FOzs7Ozs7Ozs7OztHQVdHO0FBQ0gsT0FBTyxFQUFFLGNBQWMsRUFBRSxhQUFhLEVBQUUsU0FBUyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFNUUsaUZBQWlGO0FBQ2pGLDRFQUE0RTtBQUM1RSxzREFBc0Q7QUFDdEQsNEVBQTRFO0FBQzVFLDZFQUE2RTtBQUM3RSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogRm9vdFByaW50IOKAlCBQdWJsaWMgQVBJICh2MylcbiAqXG4gKiBUaGUgZmxvd2NoYXJ0IHBhdHRlcm4gZm9yIGJhY2tlbmQgY29kZS5cbiAqIEJ1aWxkIOKGkiBSdW4g4oaSIE9ic2VydmUuXG4gKlxuICogKipUaGUgY29tbW9uIGltcG9ydCBwYXRoczoqKlxuICogYGBgdHNcbiAqIGltcG9ydCB7IGZsb3dDaGFydCwgZGVjaWRlLCBuYXJyYXRpdmUgfSBmcm9tICdmb290cHJpbnRqcyc7ICAgICAgICAgICAvLyBtYWluIOKAlCBzdGFydCBoZXJlXG4gKiBpbXBvcnQgeyBtZXRyaWNzLCBkZWJ1ZywgbWFuaWZlc3QgfSAgICAgZnJvbSAnZm9vdHByaW50anMvcmVjb3JkZXJzJzsgLy8gcmVjb3JkZXIgZmFjdG9yaWVzXG4gKiBpbXBvcnQgeyBzdGF0ZUF0LCBjYXVzYWxDaGFpbiB9IGZyb20gJ2Zvb3R0cmFjZSc7ICAgICAvLyByZWFkIGEgZmluaXNoZWQgcnVuXG4gKiBpbXBvcnQgeyBSZWNvcmRGcmFtZSwgRXZlbnRMb2cgfSBmcm9tICdmb290dHJhY2Uvd3JpdGUnOyAgICAgLy8gd3JpdGUgYSByZWNvcmQgeW91cnNlbGZcbiAqIGltcG9ydCB7IFN0YWdlQ29udGV4dCB9ICAgICAgICAgICAgICAgICBmcm9tICdmb290cHJpbnRqcy9hZHZhbmNlZCc7ICAvLyBlbmdpbmUgaW50ZXJuYWxzXG4gKiBgYGBcbiAqXG4gKiBAbW9kdWxlXG4gKi9cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gUXVpY2sgU3RhcnQg4oCUIEV2ZXJ5dGhpbmcgeW91IG5lZWQgZm9yIDkwJSBvZiB1c2UgY2FzZXNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqIEBjYXRlZ29yeSBRdWljayBTdGFydCAqL1xuZXhwb3J0IHR5cGUgeyBGbG93Q2hhcnQsIFN0YWdlRnVuY3Rpb24gYXMgU3RhZ2VIYW5kbGVyLCBTdHJlYW1IYW5kbGVycyB9IGZyb20gJy4vbGliL2J1aWxkZXIvaW5kZXguanMnO1xuXG4vKiogQGNhdGVnb3J5IFF1aWNrIFN0YXJ0ICovXG5leHBvcnQgeyBmbG93Q2hhcnQsIEZsb3dDaGFydEJ1aWxkZXIsIGZsb3dDaGFydFNlbGVjdG9yIH0gZnJvbSAnLi9saWIvYnVpbGRlci9pbmRleC5qcyc7XG5cbi8qKlxuICogQGNhdGVnb3J5IFF1aWNrIFN0YXJ0XG4gKlxuICogQ29uZmlnIGZvciBgLmFkZFBhcmFsbGVsRm9yRWFjaCgpYCDigJQgb25lIGJyYW5jaCBwZXIgaXRlbSwgYnJhbmNoIGNvdW50XG4gKiBkZWNpZGVkIGF0IHJ1biB0aW1lIGZyb20gdGhlIHBheWxvYWQuIGBtYXhCcmFuY2hlc2AgYW5kIGBpbnRvYCBhcmUgcmVxdWlyZWRcbiAqIG9uIHB1cnBvc2UgKHNlZSBkb2NzL2Rlc2lnbi9leGVjdXRpb24tY29udHJvbC5tZCkuXG4gKi9cbmV4cG9ydCB0eXBlIHsgQnJhbmNoQ2hhcnQsIFBhcmFsbGVsRm9yRWFjaENvbmZpZywgUmV0cnlQb2xpY3kgfSBmcm9tICcuL2xpYi9idWlsZGVyL2luZGV4LmpzJztcblxuLyoqIEBjYXRlZ29yeSBRdWljayBTdGFydCDigJQgYnVpbGQtdGltZSBvYnNlcnZlciAodHdpbiBvZiBGbG93UmVjb3JkZXIpICovXG5leHBvcnQgdHlwZSB7XG4gIFN0cnVjdHVyZURlY2lkZXJDb21wbGV0ZUV2ZW50LFxuICBTdHJ1Y3R1cmVFZGdlQWRkZWRFdmVudCxcbiAgU3RydWN0dXJlRWRnZUtpbmQsXG4gIFN0cnVjdHVyZUxvb3BFZGdlQWRkZWRFdmVudCxcbiAgU3RydWN0dXJlUmVjb3JkZXIsXG4gIFN0cnVjdHVyZVN0YWdlQWRkZWRFdmVudCxcbiAgU3RydWN0dXJlU3RhZ2VUYWdnZWRFdmVudCxcbiAgU3RydWN0dXJlU3ViZmxvd01vdW50ZWRFdmVudCxcbn0gZnJvbSAnLi9saWIvYnVpbGRlci9pbmRleC5qcyc7XG5cbi8qKiBAY2F0ZWdvcnkgUXVpY2sgU3RhcnQgKi9cbmV4cG9ydCB0eXBlIHsgVHlwZWRTdGFnZUZ1bmN0aW9uIH0gZnJvbSAnLi9saWIvYnVpbGRlci90eXBlZEZsb3dDaGFydC5qcyc7XG5cbi8qKiBAY2F0ZWdvcnkgUXVpY2sgU3RhcnQgKi9cbmV4cG9ydCB0eXBlIHsgU2NvcGVNZXRob2RzLCBUeXBlZFNjb3BlIH0gZnJvbSAnLi9saWIvcmVhY3RpdmUvaW5kZXguanMnO1xuXG4vKiogQGNhdGVnb3J5IFF1aWNrIFN0YXJ0ICovXG5leHBvcnQgeyBuYXJyYXRpdmUgfSBmcm9tICcuL3JlY29yZGVycy5qcyc7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIERlY2lzaW9uIEJyYW5jaGluZyDigJQgZGVjaWRlKCkgLyBzZWxlY3QoKSB3aXRoIGV2aWRlbmNlIGNhcHR1cmVcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqIEBjYXRlZ29yeSBEZWNpc2lvbiBCcmFuY2hpbmcgKi9cbmV4cG9ydCB0eXBlIHtcbiAgRGVjaWRlUnVsZSxcbiAgRGVjaXNpb25FdmlkZW5jZSxcbiAgRGVjaXNpb25SZXN1bHQsXG4gIERlZmF1bHRCcmFuY2gsXG4gIEZpbHRlck9wcyxcbiAgUnVsZUV2aWRlbmNlLFxuICBTZWxlY3Rpb25FdmlkZW5jZSxcbiAgU2VsZWN0aW9uUmVzdWx0LFxuICBXaGVuQ2xhdXNlLFxuICBXaGVyZUZpbHRlcixcbn0gZnJvbSAnLi9saWIvZGVjaWRlL2luZGV4LmpzJztcblxuLyoqIEBjYXRlZ29yeSBEZWNpc2lvbiBCcmFuY2hpbmcgKi9cbmV4cG9ydCB7IGRlY2lkZSwgc2VsZWN0IH0gZnJvbSAnLi9saWIvZGVjaWRlL2luZGV4LmpzJztcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gUnVuIOKAlCBFeGVjdXRlIGNoYXJ0cyBhbmQgY29sbGVjdCByZXN1bHRzXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKiBAY2F0ZWdvcnkgUnVuICovXG5leHBvcnQgdHlwZSB7IFJ1blJlc3VsdCB9IGZyb20gJy4vbGliL3J1bm5lci9pbmRleC5qcyc7XG5cbi8qKiBAY2F0ZWdvcnkgUnVuICovXG5leHBvcnQgdHlwZSB7IEZsb3dDaGFydEV4ZWN1dG9yT3B0aW9ucyB9IGZyb20gJy4vbGliL3J1bm5lci9pbmRleC5qcyc7XG5cbi8qKlxuICogVGhlIGZvdXIgb2JzZXJ2YWJpbGl0eSBkaWFscyBgRmxvd0NoYXJ0RXhlY3V0b3JPcHRpb25zYCBpbmhlcml0cy5cbiAqIEBjYXRlZ29yeSBSdW5cbiAqL1xuZXhwb3J0IHR5cGUgeyBSdW5EaWFscyB9IGZyb20gJy4vbGliL21lbW9yeS9pbmRleC5qcyc7XG5cbi8qKiBAY2F0ZWdvcnkgUnVuICovXG5leHBvcnQgeyBGbG93Q2hhcnRFeGVjdXRvciB9IGZyb20gJy4vbGliL3J1bm5lci9pbmRleC5qcyc7XG5cbi8qKiBAY2F0ZWdvcnkgUnVuICovXG5leHBvcnQgeyBSdW5Db250ZXh0IH0gZnJvbSAnLi9saWIvcnVubmVyL2luZGV4LmpzJztcblxuLyoqIEBjYXRlZ29yeSBSdW4gKi9cbmV4cG9ydCB0eXBlIHsgQ2hhcnRPcGVuQVBJT3B0aW9ucywgTUNQVG9vbERlc2NyaXB0aW9uLCBSdW5uYWJsZUZsb3dDaGFydCB9IGZyb20gJy4vbGliL3J1bm5lci9SdW5uYWJsZUNoYXJ0LmpzJztcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gT2JzZXJ2ZSDigJQgRGF0YSAoc2NvcGUgcmVjb3JkZXJzLCBmaXJlIGR1cmluZyBzdGFnZSBleGVjdXRpb24pXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKiBAY2F0ZWdvcnkgT2JzZXJ2ZSDigJQgRGF0YSAqL1xuZXhwb3J0IHR5cGUge1xuICBDb21taXRFdmVudCxcbiAgRXJyb3JFdmVudCxcbiAgUmVhZEV2ZW50LFxuICBSZWRhY3Rpb25Qb2xpY3ksXG4gIFJlZGFjdGlvblJlcG9ydCxcbiAgU2NvcGVSZWNvcmRlcixcbiAgU3RhZ2VFdmVudCxcbiAgV3JpdGVFdmVudCxcbn0gZnJvbSAnLi9saWIvc2NvcGUvaW5kZXguanMnO1xuXG4vKiogQGNhdGVnb3J5IE9ic2VydmUg4oCUIERhdGEgKi9cbmV4cG9ydCB7IE1ldHJpY1JlY29yZGVyIH0gZnJvbSAnLi9saWIvc2NvcGUvaW5kZXguanMnO1xuXG4vKiogQGNhdGVnb3J5IE9ic2VydmUg4oCUIERhdGEgKi9cbmV4cG9ydCB7IERlYnVnUmVjb3JkZXIgfSBmcm9tICcuL2xpYi9zY29wZS9pbmRleC5qcyc7XG5cbi8qKiBAY2F0ZWdvcnkgT2JzZXJ2ZSDigJQgT3BlcmF0aW9uICovXG5leHBvcnQgeyBSZWNvcmRlck9wZXJhdGlvbiB9IGZyb20gJy4vbGliL3JlY29yZGVyL2luZGV4LmpzJztcblxuLyoqXG4gKiBAY2F0ZWdvcnkgT2JzZXJ2ZSDigJQgRGVsaXZlcnkgdGllciAoUkZDLTAwMSBkZWZlcnJlZCBvYnNlcnZlcnMpXG4gKlxuICogRXZlcnkgYGF0dGFjaCpSZWNvcmRlcmAgY2FsbCBhY2NlcHRzIGFuIG9wdGlvbnMgYmFnOlxuICogYGV4ZWN1dG9yLmF0dGFjaFNjb3BlUmVjb3JkZXIocmVjLCB7IGRlbGl2ZXJ5OiAnZGVmZXJyZWQnIH0pYCB0YWtlcyB0aGVcbiAqIHJlY29yZGVyIE9VVCBvZiB0aGUgZW5naW5lJ3MgaG90IHBhdGgg4oCUIGV2ZW50cyBhcmUgY2FwdHVyZWQgaW50byBvbmVcbiAqIGJvdW5kZWQsIHRvdGFsbHktb3JkZXJlZCBxdWV1ZSBhbmQgZGVsaXZlcmVkIGF0IHRoZSBuZXh0IG1pY3JvdGFza1xuICogY2hlY2twb2ludCAoXCJvbmUgYmVhdCBiZWhpbmRcIikuIE9taXQgYGRlbGl2ZXJ5YCBmb3IgdGhlIGhpc3RvcmljYWxcbiAqIHN5bmNocm9ub3VzIGNhbGwgKGJ5dGUtaWRlbnRpY2FsIHRvIHByZXZpb3VzIHJlbGVhc2VzKS4gQWNjb3VudGluZ1xuICogc3VyZmFjZXMgb24gYHNuYXBzaG90Lm9ic2VydmVyU3RhdHNgOyBgZXhlY3V0b3IuZHJhaW5PYnNlcnZlcnMoKWAgc2V0dGxlc1xuICogYXN5bmMgbGlzdGVuZXJzIGJlZm9yZSBzaHV0ZG93bi4gU2VlIGBkb2NzL2d1aWRlcy9vYnNlcnZlcnMtZGVmZXJyZWQubWRgLlxuICovXG5leHBvcnQgdHlwZSB7XG4gIEF0dGFjaFJlY29yZGVyT3B0aW9ucyxcbiAgT2JzZXJ2ZXJEZWxpdmVyeSxcbiAgT2JzZXJ2ZXJEcmFpblJlc3VsdCxcbiAgT2JzZXJ2ZXJTdGF0cyxcbn0gZnJvbSAnLi9saWIvcnVubmVyL2luZGV4LmpzJztcblxuLyoqXG4gKiBAY2F0ZWdvcnkgT2JzZXJ2ZSDigJQgRGVsaXZlcnkgdGllciAoUkZDLTAwMSBkZWZlcnJlZCBvYnNlcnZlcnMpXG4gKlxuICogYENhcHR1cmVQb2xpY3lgIOKAlCBob3cgYSBkZWZlcnJlZCBldmVudCdzIHBheWxvYWQgaXMgbWF0ZXJpYWxpemVkIGF0XG4gKiBjYXB0dXJlIHRpbWUgKGAnY2xvbmUnYCBieSBkZWZhdWx0IGZvciBhdHRhY2ggb3B0aW9ucyAvIGAnc3VtbWFyeSdgIC8gYCdyZWYnYCkuIGBPdmVyZmxvd1BvbGljeWBcbiAqIOKAlCB3aGF0IGEgc2F0dXJhdGVkIHF1ZXVlIGRvZXMgKGAnZHJvcC1vbGRlc3QnYCBkZWZhdWx0IC8gYCdzYW1wbGUnYCAvXG4gKiBgJ2Jsb2NrJ2ApLiBgRGlzcGF0Y2hlclN0YXRzYCAvIGBMaXN0ZW5lclN0YXRzYCDigJQgdGhlIGFjY291bnRpbmcgc2hhcGVzXG4gKiBlbWJlZGRlZCBpbiBgT2JzZXJ2ZXJTdGF0c2AuIFR5cGVzIG9ubHkg4oCUIHRoZSBvYnNlcnZlci1xdWV1ZSBtb2R1bGVcbiAqIGl0c2VsZiBpcyBpbnRlcm5hbDsgY29uc3VtZXJzIHVzZSB0aGUgYXR0YWNoIG9wdGlvbnMuXG4gKi9cbmV4cG9ydCB0eXBlIHsgQ2FwdHVyZVBvbGljeSwgRGlzcGF0Y2hlclN0YXRzLCBMaXN0ZW5lclN0YXRzLCBPdmVyZmxvd1BvbGljeSB9IGZyb20gJy4vbGliL29ic2VydmVyLXF1ZXVlL2luZGV4LmpzJztcblxuLyoqIEBjYXRlZ29yeSBPYnNlcnZlIOKAlCBDb21iaW5lZCAoYm90aCBkYXRhLWZsb3cgYW5kIGNvbnRyb2wtZmxvdykgKi9cbmV4cG9ydCB0eXBlIHsgQ29tYmluZWRSZWNvcmRlciB9IGZyb20gJy4vbGliL3JlY29yZGVyL2luZGV4LmpzJztcbi8qKiBAY2F0ZWdvcnkgT2JzZXJ2ZSDigJQgQ29tYmluZWQgKGJvdGggZGF0YS1mbG93IGFuZCBjb250cm9sLWZsb3cpICovXG5leHBvcnQge1xuICBoYXNFbWl0UmVjb3JkZXJNZXRob2RzLFxuICBoYXNGbG93UmVjb3JkZXJNZXRob2RzLFxuICBoYXNSZWNvcmRlck1ldGhvZHMsXG4gIGlzRmxvd0V2ZW50LFxufSBmcm9tICcuL2xpYi9yZWNvcmRlci9pbmRleC5qcyc7XG5cbi8qKlxuICogQGNhdGVnb3J5IE9ic2VydmUg4oCUIEVtaXQgKHVzZXItYXV0aG9yZWQgc3RydWN0dXJlZCBldmVudHMpXG4gKlxuICogVGhpcmQgb2JzZXJ2ZXIgY2hhbm5lbCAoYWxvbmdzaWRlIGBTY29wZVJlY29yZGVyYCBhbmQgYEZsb3dSZWNvcmRlcmApLiBDb25zdW1lclxuICogY29kZSBjYWxscyBgc2NvcGUuJGVtaXQobmFtZSwgcGF5bG9hZClgIGZyb20gaW5zaWRlIGEgc3RhZ2U7IGV2ZXJ5IGF0dGFjaGVkXG4gKiBgRW1pdFJlY29yZGVyLm9uRW1pdChldmVudClgIGZpcmVzIHN5bmNocm9ub3VzbHkgd2l0aCBzdGFnZS1jb250ZXh0XG4gKiBlbnJpY2htZW50LiBQYXNzLXRocm91Z2gg4oCUIG5vIGJ1ZmZlcmluZywgemVybyBhbGxvY2F0aW9uIHdoZW4gbm8gcmVjb3JkZXJcbiAqIGlzIGF0dGFjaGVkLlxuICovXG5leHBvcnQgdHlwZSB7IEVtaXRFdmVudCwgRW1pdFJlY29yZGVyIH0gZnJvbSAnLi9saWIvcmVjb3JkZXIvaW5kZXguanMnO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBPYnNlcnZlIOKAlCBGbG93IChGbG93UmVjb3JkZXIsIGZpcmVzIGFmdGVyIHN0YWdlIGV4ZWN1dGlvbilcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqIEBjYXRlZ29yeSBPYnNlcnZlIOKAlCBGbG93ICovXG5leHBvcnQgdHlwZSB7XG4gIEZsb3dCcmVha0V2ZW50LFxuICBGbG93RGVjaXNpb25FdmVudCxcbiAgRmxvd0Vycm9yRXZlbnQsXG4gIEZsb3dGb3JrRXZlbnQsXG4gIEZsb3dMb29wRXZlbnQsXG4gIEZsb3dOZXh0RXZlbnQsXG4gIEZsb3dSZWNvcmRlcixcbiAgRmxvd1J1bkV2ZW50LFxuICBGbG93UnVuRmFpbGVkRXZlbnQsXG4gIEZsb3dTZWxlY3RlZEV2ZW50LFxuICBGbG93U3RhZ2VFdmVudCxcbiAgRmxvd1N0YWdlUmV0cnlFdmVudCxcbiAgRmxvd1N1YmZsb3dFdmVudCxcbiAgRmxvd1N1YmZsb3dSZWdpc3RlcmVkRXZlbnQsXG4gIEZsb3dUaHJvdHRsZWRFdmVudCxcbiAgUmVzdW1lTGluayxcbiAgVHJhdmVyc2FsQ29udGV4dCxcbn0gZnJvbSAnLi9saWIvZW5naW5lL2luZGV4LmpzJztcblxuLyoqIEBjYXRlZ29yeSBPYnNlcnZlIOKAlCBGbG93ICovXG5leHBvcnQgdHlwZSB7IENvbWJpbmVkTmFycmF0aXZlRW50cnkgfSBmcm9tICcuL2xpYi9lbmdpbmUvaW5kZXguanMnO1xuXG4vKipcbiAqIEBjYXRlZ29yeSBPYnNlcnZlIOKAlCBGbG93XG4gKlxuICogYE5hcnJhdGl2ZUZvcm1hdHRlcmAg4oCUIHBsdWdnYWJsZSBmb3JtYXR0ZXIgdGhhdCBjb252ZXJ0cyBldmVudCBjb250ZXh0XG4gKiBvYmplY3RzIGludG8gdGhlIHRleHQgbGluZXMgb2YgdGhlIG5hcnJhdGl2ZS5cbiAqL1xuZXhwb3J0IHR5cGUgeyBOYXJyYXRpdmVGb3JtYXR0ZXIgfSBmcm9tICcuL2xpYi9lbmdpbmUvaW5kZXguanMnO1xuXG4vKiogQGNhdGVnb3J5IE9ic2VydmUg4oCUIEZsb3cgKi9cbmV4cG9ydCB7IE5hcnJhdGl2ZUZsb3dSZWNvcmRlciB9IGZyb20gJy4vbGliL2VuZ2luZS9pbmRleC5qcyc7XG5cbi8qKiBAY2F0ZWdvcnkgT2JzZXJ2ZSDigJQgRmxvdyAqL1xuZXhwb3J0IHR5cGUgeyBNYW5pZmVzdEVudHJ5IH0gZnJvbSAnLi9saWIvZW5naW5lL2luZGV4LmpzJztcblxuLyoqIEBjYXRlZ29yeSBPYnNlcnZlIOKAlCBGbG93ICovXG5leHBvcnQgeyBNYW5pZmVzdEZsb3dSZWNvcmRlciB9IGZyb20gJy4vbGliL2VuZ2luZS9pbmRleC5qcyc7XG5cbi8qKiBAY2F0ZWdvcnkgT2JzZXJ2ZSDigJQgRmxvdyAqL1xuZXhwb3J0IHsgQWRhcHRpdmVOYXJyYXRpdmVGbG93UmVjb3JkZXIgfSBmcm9tICcuL2xpYi9lbmdpbmUvaW5kZXguanMnO1xuXG4vKiogQGNhdGVnb3J5IE9ic2VydmUg4oCUIEZsb3cgKi9cbmV4cG9ydCB7IE1pbGVzdG9uZU5hcnJhdGl2ZUZsb3dSZWNvcmRlciB9IGZyb20gJy4vbGliL2VuZ2luZS9pbmRleC5qcyc7XG5cbi8qKiBAY2F0ZWdvcnkgT2JzZXJ2ZSDigJQgRmxvdyAqL1xuZXhwb3J0IHsgUHJvZ3Jlc3NpdmVOYXJyYXRpdmVGbG93UmVjb3JkZXIgfSBmcm9tICcuL2xpYi9lbmdpbmUvaW5kZXguanMnO1xuXG4vKiogQGNhdGVnb3J5IE9ic2VydmUg4oCUIEZsb3cgKi9cbmV4cG9ydCB7IFJMRU5hcnJhdGl2ZUZsb3dSZWNvcmRlciB9IGZyb20gJy4vbGliL2VuZ2luZS9pbmRleC5qcyc7XG5cbi8qKiBAY2F0ZWdvcnkgT2JzZXJ2ZSDigJQgRmxvdyAqL1xuZXhwb3J0IHsgU2VwYXJhdGVOYXJyYXRpdmVGbG93UmVjb3JkZXIgfSBmcm9tICcuL2xpYi9lbmdpbmUvaW5kZXguanMnO1xuXG4vKiogQGNhdGVnb3J5IE9ic2VydmUg4oCUIEZsb3cgKi9cbmV4cG9ydCB7IFNpbGVudE5hcnJhdGl2ZUZsb3dSZWNvcmRlciB9IGZyb20gJy4vbGliL2VuZ2luZS9pbmRleC5qcyc7XG5cbi8qKiBAY2F0ZWdvcnkgT2JzZXJ2ZSDigJQgRmxvdyAqL1xuZXhwb3J0IHsgV2luZG93ZWROYXJyYXRpdmVGbG93UmVjb3JkZXIgfSBmcm9tICcuL2xpYi9lbmdpbmUvaW5kZXguanMnO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBTZWxmLURlc2NyaWJpbmcg4oCUIC5jb250cmFjdCgpLCB0b09wZW5BUEkoKSwgdG9NQ1BUb29sKClcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqIEBjYXRlZ29yeSBTZWxmLURlc2NyaWJpbmcgKi9cbmV4cG9ydCB0eXBlIHsgSnNvblNjaGVtYSB9IGZyb20gJy4vbGliL2NvbnRyYWN0L2luZGV4LmpzJztcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gU25hcHNob3QgJiBDb21wb3NpdGlvbiDigJQgU3ViZmxvdyBuYXZpZ2F0aW9uIGFuZCBDb21wb3NhYmxlUnVubmVyXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKiBAY2F0ZWdvcnkgU25hcHNob3QgJiBDb21wb3NpdGlvbiAqL1xuZXhwb3J0IHR5cGUgeyBDb21wb3NhYmxlUnVubmVyIH0gZnJvbSAnLi9saWIvcnVubmVyL2luZGV4LmpzJztcblxuLyoqIEBjYXRlZ29yeSBTbmFwc2hvdCAmIENvbXBvc2l0aW9uICovXG5leHBvcnQgdHlwZSB7IFJlY29yZGVyU25hcHNob3QsIFJ1bnRpbWVTbmFwc2hvdCwgU3VidHJlZVNuYXBzaG90IH0gZnJvbSAnLi9saWIvcnVubmVyL2luZGV4LmpzJztcblxuLyoqIEBjYXRlZ29yeSBTbmFwc2hvdCAmIENvbXBvc2l0aW9uICovXG5leHBvcnQgeyBnZXRTdWJ0cmVlU25hcHNob3QsIGxpc3RTdWJmbG93UGF0aHMgfSBmcm9tICcuL2xpYi9ydW5uZXIvaW5kZXguanMnO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBTY29wZVJlY29yZGVyIENvbXBvc2l0aW9uIOKAlCBCdW5kbGUgbXVsdGlwbGUgcmVjb3JkZXJzIGludG8gZG9tYWluIHByZXNldHNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqIEBjYXRlZ29yeSBTY29wZVJlY29yZGVyICovXG5leHBvcnQgeyBDb21wb3NpdGVSZWNvcmRlciB9IGZyb20gJy4vbGliL3JlY29yZGVyL2luZGV4LmpzJztcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gUGF1c2UvUmVzdW1lIOKAlCBTZXJpYWxpemFibGUgY2hlY2twb2ludHMgZm9yIGxvbmctcnVubmluZyBvciBodW1hbi1pbi10aGUtbG9vcCBmbG93c1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKiogQGNhdGVnb3J5IFBhdXNlL1Jlc3VtZSAqL1xuLyoqIEBjYXRlZ29yeSBQYXVzZS9SZXN1bWUgKi9cbmV4cG9ydCB0eXBlIHtcbiAgRmxvd2NoYXJ0Q2hlY2twb2ludCxcbiAgUGF1c2FibGVIYW5kbGVyLFxuICBQYXVzZWRFeGVjdXRpb24sXG4gIFBlbmRpbmdQYXVzZSxcbiAgUmVkYWN0aW9uTWFya3MsXG59IGZyb20gJy4vbGliL3BhdXNlL2luZGV4LmpzJztcblxuLyoqXG4gKiBAY2F0ZWdvcnkgUGF1c2UvUmVzdW1lXG4gKlxuICogYGludGVycnVwdChzY29wZSwgeyByZWFzb24sIGV4cGVjdHM/IH0pYCDigJQgc3RvcCBtaWQtc3RhZ2UgdG8gYXNrIGEgcXVlc3Rpb24sXG4gKiBhbmQgZ2V0IHRoZSBhbnN3ZXIgYmFjayBhdCB0aGUgc2FtZSBjYWxsIHNpdGUgd2hlbiB0aGUgcnVuIHJlc3VtZXMuIFJlc3VtZVxuICogcmUtZW50ZXJzIHRoZSBzdGFnZSBmcm9tIGl0cyBUT1AgKHN0YWdlcyBhcmUgYXRvbWljKSwgc28ga2VlcCB0aGUgaGFsZlxuICogYmVmb3JlIHRoZSBjYWxsIGlkZW1wb3RlbnQuXG4gKi9cbmV4cG9ydCB0eXBlIHsgSW50ZXJydXB0UGF5bG9hZCB9IGZyb20gJy4vbGliL3BhdXNlL2luZGV4LmpzJztcblxuLyoqIEBjYXRlZ29yeSBQYXVzZS9SZXN1bWUgKi9cbmV4cG9ydCB7IGludGVycnVwdCB9IGZyb20gJy4vbGliL3BhdXNlL2luZGV4LmpzJztcblxuLyoqIEBjYXRlZ29yeSBTY29wZVJlY29yZGVyICovXG5leHBvcnQgdHlwZSB7IENvbXBvc2l0ZVNuYXBzaG90IH0gZnJvbSAnLi9saWIvcmVjb3JkZXIvaW5kZXguanMnO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBDb25maWd1cmF0aW9uIOKAlCBUeXBlcyBwYXNzZWQgdG8gRmxvd0NoYXJ0RXhlY3V0b3IgYW5kIHJ1bigpXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKiBAY2F0ZWdvcnkgQ29uZmlndXJhdGlvbiAqL1xuZXhwb3J0IHR5cGUgeyBFeGVjdXRpb25FbnYsIEV4ZWN1dG9yUmVzdWx0LCBQYXVzZWRSZXN1bHQsIFJ1bk9wdGlvbnMgfSBmcm9tICcuL2xpYi9lbmdpbmUvaW5kZXguanMnO1xuXG4vKiogQGNhdGVnb3J5IENvbmZpZ3VyYXRpb24gKi9cbmV4cG9ydCB0eXBlIHsgU2NvcGVGYWN0b3J5IH0gZnJvbSAnLi9saWIvZW5naW5lL2luZGV4LmpzJztcblxuLyoqXG4gKiBAY2F0ZWdvcnkgQ29uZmlndXJhdGlvblxuICpcbiAqIFJlYWQtdHJhY2tpbmcgcG9saWN5IGZvciBgU3RhZ2VTbmFwc2hvdC5zdGFnZVJlYWRzYCAoIzE0KTpcbiAqIGAnZnVsbCdgIChkZWZhdWx0IOKAlCBwZXItcmVhZCB2YWx1ZSBjbG9uZSwgaGlzdG9yaWNhbCBiZWhhdmlvcikgL1xuICogYCdzdW1tYXJ5J2AgKGNoZWFwIGBSZWFkU3VtbWFyeU1hcmtlcmAgcGVyIHJlYWQpIC8gYCdvZmYnYCAobm8gdHJhY2tpbmcsXG4gKiB6ZXJvIHBlci1yZWFkIGNsb25lKS4gUGFzcyBhcyBgbmV3IEZsb3dDaGFydEV4ZWN1dG9yKGNoYXJ0LCB7IHJlYWRUcmFja2luZyB9KWBcbiAqIG9yIGNhbGwgYGV4ZWN1dG9yLnNldFJlYWRUcmFja2luZyhtb2RlKWAgYmVmb3JlIGBydW4oKWAuXG4gKi9cbmV4cG9ydCB0eXBlIHsgUmVhZFN1bW1hcnlNYXJrZXIsIFJlYWRUcmFja2luZ01vZGUgfSBmcm9tICcuL2xpYi9tZW1vcnkvaW5kZXguanMnO1xuXG4vKipcbiAqIEBjYXRlZ29yeSBDb25maWd1cmF0aW9uXG4gKlxuICogV3JpdGUtdHJhY2tpbmcgcG9saWN5IGZvciBgU3RhZ2VTbmFwc2hvdC5zdGFnZVdyaXRlc2AgKCMxM2MtQSkg4oCUIHRoZVxuICogc2libGluZyBvZiBgUmVhZFRyYWNraW5nTW9kZWA7IGJvdGggYWxpYXMgdGhlIHNoYXJlZCBgUmV0ZW50aW9uUG9saWN5YFxuICogZmFtaWx5IGZyb20gYGxpYi9jYXB0dXJlYC4gYCdmdWxsJ2AgKGRlZmF1bHQg4oCUIHBlci13cml0ZSB2YWx1ZSBjbG9uZSxcbiAqIGhpc3RvcmljYWwgYmVoYXZpb3IpIC8gYCdzdW1tYXJ5J2AgKGNoZWFwIGBXcml0ZVN1bW1hcnlNYXJrZXJgIHBlciB3cml0ZSlcbiAqIC8gYCdvZmYnYCAobm8gdHJhY2tpbmc7IGBzdGFnZVdyaXRlc2AgYWJzZW50IGFuZCB0aGUgYG9uQ29tbWl0YCBtdXRhdGlvbnNcbiAqIHBheWxvYWQgaXMgZW1wdHkg4oCUIHdyaXRlcyB0aGVtc2VsdmVzIHN0aWxsIGNvbW1pdCwgYW5kIHRoZSBjb21taXQgbG9nIGlzXG4gKiB1bmFmZmVjdGVkKS4gUGFzcyBhcyBgbmV3IEZsb3dDaGFydEV4ZWN1dG9yKGNoYXJ0LCB7IHdyaXRlVHJhY2tpbmcgfSlgIG9yXG4gKiBjYWxsIGBleGVjdXRvci5zZXRXcml0ZVRyYWNraW5nKG1vZGUpYCBiZWZvcmUgYHJ1bigpYC5cbiAqL1xuZXhwb3J0IHR5cGUgeyBSZXRlbnRpb25Qb2xpY3ksIFdyaXRlU3VtbWFyeU1hcmtlciwgV3JpdGVUcmFja2luZ01vZGUgfSBmcm9tICcuL2xpYi9tZW1vcnkvaW5kZXguanMnO1xuXG4vKipcbiAqIEBjYXRlZ29yeSBDb25maWd1cmF0aW9uXG4gKlxuICogQ29tbWl0LXZhbHVlcyBlbmNvZGluZyBmb3IgdGhlIENPTU1JVCBMT0cgKCMxM2MtQikg4oCUIHRoZSB0aGlyZCBkaWFsIG9mXG4gKiB0aGUgZmFtaWx5LCBhbmQgdGhlIG9ubHkgTE9TU0xFU1Mgb25lIChpdCBjaGFuZ2VzIHRoZSBsb2cncyBlbmNvZGluZyxcbiAqIG5ldmVyIGl0cyBpbmZvcm1hdGlvbikuIGAnZnVsbCdgIChkZWZhdWx0IOKAlCBldmVyeSBzdXJ2aXZpbmcgYHNldGAgc3RvcmVzXG4gKiB0aGUgZnVsbCBmaW5hbCB2YWx1ZSwgYnl0ZS1pZGVudGljYWwgdG8gaGlzdG9yeSkgLyBgJ2RlbHRhJ2AgKGFycmF5XG4gKiBuZXQtY2hhbmdlcyB0aGF0IGFyZSBcImJhc2UgcGx1cyBhIHRhaWxcIiBjb21taXQgYXMgYW4gYGFwcGVuZGAgdmVyYlxuICogc3RvcmluZyBvbmx5IHRoZSB0YWlsOyBgZGVsZXRlVmFsdWUoKWAgY29tbWl0cyBhcyBhIHJlYWwgYGRlbGV0ZWAgdmVyYjtcbiAqIG9uZSB0cmFjZSBlbnRyeSBwZXIgc3Vydml2aW5nIHBhdGgpLiBSZXBsYXkgcmVjb25zdHJ1Y3RzIGV2ZXJ5IHN0ZXAnc1xuICogZnVsbCBzdGF0ZSBleGFjdGx5LiBDb25zdW1lcnMgcmVhZGluZyBgYnVuZGxlLm92ZXJ3cml0ZVtrZXldYCBhcyB0aGUgZnVsbFxuICogdmFsdWUgbXVzdCB1c2UgYGNvbW1pdFZhbHVlQXRgIGZyb20gYGZvb3R0cmFjZWAuIFBhc3MgYXNcbiAqIGBuZXcgRmxvd0NoYXJ0RXhlY3V0b3IoY2hhcnQsIHsgY29tbWl0VmFsdWVzIH0pYCBvciBjYWxsXG4gKiBgZXhlY3V0b3Iuc2V0Q29tbWl0VmFsdWVzKG1vZGUpYCBiZWZvcmUgYHJ1bigpYDsgdGhlIGFjdGl2ZSBtb2RlIGlzIHRoZVxuICogc25hcHNob3QgZGlzY3JpbWluYW50IGBnZXRTbmFwc2hvdCgpLmNvbW1pdFZhbHVlc2AuXG4gKi9cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gQ29udHJhY3QgJiBWYWxpZGF0aW9uXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKiBAY2F0ZWdvcnkgQ29udHJhY3QgJiBWYWxpZGF0aW9uICovXG5leHBvcnQgdHlwZSB7IFNjaGVtYUtpbmQsIFZhbGlkYXRpb25Jc3N1ZSwgVmFsaWRhdGlvblJlc3VsdCB9IGZyb20gJy4vbGliL3NjaGVtYS9pbmRleC5qcyc7XG5cbi8qKiBAY2F0ZWdvcnkgQ29udHJhY3QgJiBWYWxpZGF0aW9uICovXG5leHBvcnQgeyBkZXRlY3RTY2hlbWEsIGlzVmFsaWRhdGFibGUsIGlzWm9kIH0gZnJvbSAnLi9saWIvc2NoZW1hL2luZGV4LmpzJztcblxuLyoqIEBjYXRlZ29yeSBDb250cmFjdCAmIFZhbGlkYXRpb24gKi9cbmV4cG9ydCB7IElucHV0VmFsaWRhdGlvbkVycm9yLCB2YWxpZGF0ZUFnYWluc3RTY2hlbWEsIHZhbGlkYXRlT3JUaHJvdyB9IGZyb20gJy4vbGliL3NjaGVtYS9pbmRleC5qcyc7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIEVycm9yIFV0aWxpdGllc1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKiogQGNhdGVnb3J5IEVycm9yIFV0aWxpdGllcyAqL1xuZXhwb3J0IHR5cGUgeyBTdHJ1Y3R1cmVkRXJyb3JJbmZvIH0gZnJvbSAnLi9saWIvZW5naW5lL2luZGV4LmpzJztcblxuLyoqIEBjYXRlZ29yeSBFcnJvciBVdGlsaXRpZXMgKi9cbmV4cG9ydCB7IGV4dHJhY3RFcnJvckluZm8sIGZvcm1hdEVycm9ySW5mbyB9IGZyb20gJy4vbGliL2VuZ2luZS9pbmRleC5qcyc7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIERldiBUb29scyDigJQgTW9kZSBmbGFncyBhbmQgWm9kIHNjb3BlIHV0aWxpdGllc1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKipcbiAqIEBjYXRlZ29yeSBEZXYgVG9vbHNcbiAqXG4gKiBHbG9iYWwgZGV2LW1vZGUgZmxhZy4gQ2FsbCBgZW5hYmxlRGV2TW9kZSgpYCBhdCBhcHBsaWNhdGlvbiBzdGFydHVwIHRvXG4gKiB0dXJuIG9uIGRldmVsb3Blci1vbmx5IGRpYWdub3N0aWNzIGFjcm9zcyB0aGUgbGlicmFyeSDigJQgY2lyY3VsYXItcmVmZXJlbmNlXG4gKiBkZXRlY3Rpb24gaW4gc2NvcGUgd3JpdGVzLCB3YXJuaW5ncyB3aGVuIGEgcmVjb3JkZXIgaGFzIG5vIG9ic2VydmVyXG4gKiBtZXRob2RzLCBzdXNwaWNpb3VzLXByZWRpY2F0ZSB3YXJuaW5ncyBpbiBkZWNpZGUvc2VsZWN0LCBzdHJ1Y3R1cmFsXG4gKiBjaGVja3MgaW4gYGdldFN1YnRyZWVTbmFwc2hvdGAsIGFuZCBhbnkgZnV0dXJlIGRldi1vbmx5IGRpYWdub3N0aWMuXG4gKlxuICogUHJvZHVjdGlvbiBsZWF2ZXMgaXQgT0ZGIGJ5IGRlZmF1bHQgKHplcm8gb3ZlcmhlYWQpLiBTZWUgdGhlIEpTRG9jIG9uXG4gKiBgZW5hYmxlRGV2TW9kZWAgZm9yIHRoZSBmdWxsIGxpc3QgYW5kIHVzYWdlIGV4YW1wbGUuXG4gKi9cbmV4cG9ydCB7IGRpc2FibGVEZXZNb2RlLCBlbmFibGVEZXZNb2RlLCBpc0Rldk1vZGUgfSBmcm9tICcuL2xpYi9kZXZNb2RlLmpzJztcblxuLy8gYGRlZmluZVNjb3BlRnJvbVpvZGAgYW5kIHRoZSBvdGhlciB6b2QtYmFzZWQgc2NvcGUgaGVscGVycyBtb3ZlZCB0byB0aGUgb3B0LWluXG4vLyBgZm9vdHByaW50anMvem9kYCBlbnRyeSDigJQga2VlcGluZyB6b2Qgb3V0IG9mIHRoZSBjb3JlIGxvYWQgcGF0aCAoaXQgaXMgYW5cbi8vIG9wdGlvbmFsIHBlZXIpLiBJbXBvcnQgdGhlbSBmcm9tICdmb290cHJpbnRqcy96b2QnLlxuLy8gQSBydW4ncyByZWNvcmQgYXMgSlNPTiB3aXRob3V0IHRoZSBlbmdpbmUncyByZWN1cnNpb24gbGltaXQgKDkuMjYuMCk6IHRoZVxuLy8gc2FtZSBieXRlcyBKU09OLnN0cmluZ2lmeSBlbWl0cywgZm9yIGEgZGVlcCBgbmV4dGAgY2hhaW4gaXQgY2Fubm90IGVuY29kZS5cbmV4cG9ydCB7IHN0cmluZ2lmeVNuYXBzaG90IH0gZnJvbSAnLi9saWIvcnVubmVyL3N0cmluZ2lmeVNuYXBzaG90LmpzJztcbiJdfQ==
|
|
98
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7R0FnQkc7QUFTSCw0QkFBNEI7QUFDNUIsT0FBTyxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBc0N4RixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFRbkQsNEJBQTRCO0FBQzVCLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQW9CM0MsbUNBQW1DO0FBQ25DLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUE4Q3ZEOzs7Ozs7R0FNRztBQUNILE9BQU8sRUFBRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsYUFBYSxFQUFFLFVBQVUsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBV3JILE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxnQkFBZ0IsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBMEIvRixvQkFBb0I7QUFDcEIsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBUXhELG9CQUFvQjtBQUNwQixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUUxRCxvQkFBb0I7QUFDcEIsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBcUJuRCwrQkFBK0I7QUFDL0IsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRXRELCtCQUErQjtBQUMvQixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFFckQsb0NBQW9DO0FBQ3BDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBbUM1RCxxRUFBcUU7QUFDckUsT0FBTyxFQUNMLHNCQUFzQixFQUN0QixzQkFBc0IsRUFDdEIsa0JBQWtCLEVBQ2xCLFdBQVcsR0FDWixNQUFNLHlCQUF5QixDQUFDO0FBa0RqQywrQkFBK0I7QUFDL0IsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFLOUQsK0JBQStCO0FBQy9CLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRTdELCtCQUErQjtBQUMvQixPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUV0RSwrQkFBK0I7QUFDL0IsT0FBTyxFQUFFLDhCQUE4QixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFdkUsK0JBQStCO0FBQy9CLE9BQU8sRUFBRSxnQ0FBZ0MsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRXpFLCtCQUErQjtBQUMvQixPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUVqRSwrQkFBK0I7QUFDL0IsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFdEUsK0JBQStCO0FBQy9CLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRXBFLCtCQUErQjtBQUMvQixPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQW1CdEUsdUNBQXVDO0FBQ3ZDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRTdFLCtFQUErRTtBQUMvRSw0RUFBNEU7QUFDNUUsK0VBQStFO0FBRS9FLDhCQUE4QjtBQUM5QixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQTBCNUQsNkJBQTZCO0FBQzdCLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQWdFakQsc0NBQXNDO0FBQ3RDLE9BQU8sRUFBRSxZQUFZLEVBQUUsYUFBYSxFQUFFLEtBQUssRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRTNFLHNDQUFzQztBQUN0QyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUscUJBQXFCLEVBQUUsZUFBZSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFTckcsZ0NBQWdDO0FBQ2hDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxlQUFlLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUUxRSwrRUFBK0U7QUFDL0UsaURBQWlEO0FBQ2pELCtFQUErRTtBQUUvRTs7Ozs7Ozs7Ozs7R0FXRztBQUNILE9BQU8sRUFBRSxjQUFjLEVBQUUsYUFBYSxFQUFFLFNBQVMsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBUzVFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG1DQUFtQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBGb290UHJpbnQg4oCUIFB1YmxpYyBBUEkgKHYzKVxuICpcbiAqIFRoZSBmbG93Y2hhcnQgcGF0dGVybiBmb3IgYmFja2VuZCBjb2RlLlxuICogQnVpbGQg4oaSIFJ1biDihpIgT2JzZXJ2ZS5cbiAqXG4gKiAqKlRoZSBjb21tb24gaW1wb3J0IHBhdGhzOioqXG4gKiBgYGB0c1xuICogaW1wb3J0IHsgZmxvd0NoYXJ0LCBkZWNpZGUsIG5hcnJhdGl2ZSB9IGZyb20gJ2Zvb3RwcmludGpzJzsgICAgICAgICAgIC8vIG1haW4g4oCUIHN0YXJ0IGhlcmVcbiAqIGltcG9ydCB7IG1ldHJpY3MsIGRlYnVnLCBtYW5pZmVzdCB9ICAgICBmcm9tICdmb290cHJpbnRqcy9yZWNvcmRlcnMnOyAvLyByZWNvcmRlciBmYWN0b3JpZXNcbiAqIGltcG9ydCB7IHN0YXRlQXQsIGNhdXNhbENoYWluIH0gZnJvbSAnZm9vdHRyYWNlJzsgICAgIC8vIHJlYWQgYSBmaW5pc2hlZCBydW5cbiAqIGltcG9ydCB7IFJlY29yZEZyYW1lLCBFdmVudExvZyB9IGZyb20gJ2Zvb3R0cmFjZS93cml0ZSc7ICAgICAvLyB3cml0ZSBhIHJlY29yZCB5b3Vyc2VsZlxuICogaW1wb3J0IHsgU3RhZ2VDb250ZXh0IH0gICAgICAgICAgICAgICAgIGZyb20gJ2Zvb3RwcmludGpzL2FkdmFuY2VkJzsgIC8vIGVuZ2luZSBpbnRlcm5hbHNcbiAqIGBgYFxuICpcbiAqIEBtb2R1bGVcbiAqL1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBRdWljayBTdGFydCDigJQgRXZlcnl0aGluZyB5b3UgbmVlZCBmb3IgOTAlIG9mIHVzZSBjYXNlc1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKiogQGNhdGVnb3J5IFF1aWNrIFN0YXJ0ICovXG5leHBvcnQgdHlwZSB7IEZsb3dDaGFydCwgU3RhZ2VGdW5jdGlvbiBhcyBTdGFnZUhhbmRsZXIsIFN0cmVhbUhhbmRsZXJzIH0gZnJvbSAnLi9saWIvYnVpbGRlci9pbmRleC5qcyc7XG5cbi8qKiBAY2F0ZWdvcnkgUXVpY2sgU3RhcnQgKi9cbmV4cG9ydCB7IGZsb3dDaGFydCwgRmxvd0NoYXJ0QnVpbGRlciwgZmxvd0NoYXJ0U2VsZWN0b3IgfSBmcm9tICcuL2xpYi9idWlsZGVyL2luZGV4LmpzJztcblxuLyoqXG4gKiBAY2F0ZWdvcnkgUXVpY2sgU3RhcnRcbiAqXG4gKiBDb25maWcgZm9yIGAuYWRkUGFyYWxsZWxGb3JFYWNoKClgIOKAlCBvbmUgYnJhbmNoIHBlciBpdGVtLCBicmFuY2ggY291bnRcbiAqIGRlY2lkZWQgYXQgcnVuIHRpbWUgZnJvbSB0aGUgcGF5bG9hZC4gYG1heEJyYW5jaGVzYCBhbmQgYGludG9gIGFyZSByZXF1aXJlZFxuICogb24gcHVycG9zZSAoc2VlIGRvY3MvZGVzaWduL2V4ZWN1dGlvbi1jb250cm9sLm1kKS5cbiAqL1xuZXhwb3J0IHR5cGUgeyBCcmFuY2hDaGFydCwgUGFyYWxsZWxGb3JFYWNoQ29uZmlnLCBSZXRyeVBvbGljeSB9IGZyb20gJy4vbGliL2J1aWxkZXIvaW5kZXguanMnO1xuXG4vKiogQGNhdGVnb3J5IFF1aWNrIFN0YXJ0IOKAlCBidWlsZC10aW1lIG9ic2VydmVyICh0d2luIG9mIEZsb3dSZWNvcmRlcikgKi9cbmV4cG9ydCB0eXBlIHtcbiAgU3RydWN0dXJlRGVjaWRlckNvbXBsZXRlRXZlbnQsXG4gIFN0cnVjdHVyZUVkZ2VBZGRlZEV2ZW50LFxuICBTdHJ1Y3R1cmVFZGdlS2luZCxcbiAgU3RydWN0dXJlTG9vcEVkZ2VBZGRlZEV2ZW50LFxuICBTdHJ1Y3R1cmVSZWNvcmRlcixcbiAgU3RydWN0dXJlU3RhZ2VBZGRlZEV2ZW50LFxuICBTdHJ1Y3R1cmVTdGFnZVRhZ2dlZEV2ZW50LFxuICBTdHJ1Y3R1cmVTdWJmbG93TW91bnRlZEV2ZW50LFxufSBmcm9tICcuL2xpYi9idWlsZGVyL2luZGV4LmpzJztcblxuLyoqXG4gKiBAY2F0ZWdvcnkgVGltZSBCdWRnZXRcbiAqXG4gKiBgdGltZUJ1ZGdldChjaGFydClgIOKAlCB0aGUgc2xvd2VzdCBhIGNoYXJ0IGNhbiB0YWtlLCBmcm9tIGl0cyBkZWNsYXJlZCByZXRyeSBwb2xpY2llcyAoYGF0dGVtcHRzIMOXIHRpbWVvdXRNc2AgcGx1c1xuICogdGhlIHdhaXRzLCBzdW1tZWQgYWxvbmcgdGhlIHNsb3dlc3QgcGF0aCksIGFuZCBldmVyeSBzdGFnZSB0aGF0IG1ha2VzIGEgcGF0aCB1bmJvdW5kZWQsIGJ5IG5hbWUuIGAuYnVkZ2V0KG1zKWBcbiAqIGRlY2xhcmVzIHRoZSBjYWxsZXIncyBjb250cmFjdDsgYGJ1aWxkKClgIHJlZnVzZXMgYSBjaGFydCB0aGF0IGNhbm5vdCBrZWVwIGl0LiBBbHNvIGBjaGFydC50aW1lQnVkZ2V0KClgLlxuICovXG5leHBvcnQgdHlwZSB7XG4gIEJ1ZGdldEFzc3VtcHRpb25zLFxuICBCdWRnZXRTdGVwLFxuICBUaW1lQnVkZ2V0T3B0aW9ucyxcbiAgVGltZUJ1ZGdldFJlcG9ydCxcbiAgVW5ib3VuZGVkUmVhc29uLFxuICBVbmJvdW5kZWRTdGFnZSxcbn0gZnJvbSAnLi9saWIvYnVkZ2V0L2luZGV4LmpzJztcbmV4cG9ydCB7IHRpbWVCdWRnZXQgfSBmcm9tICcuL2xpYi9idWRnZXQvaW5kZXguanMnO1xuXG4vKiogQGNhdGVnb3J5IFF1aWNrIFN0YXJ0ICovXG5leHBvcnQgdHlwZSB7IFR5cGVkU3RhZ2VGdW5jdGlvbiB9IGZyb20gJy4vbGliL2J1aWxkZXIvdHlwZWRGbG93Q2hhcnQuanMnO1xuXG4vKiogQGNhdGVnb3J5IFF1aWNrIFN0YXJ0ICovXG5leHBvcnQgdHlwZSB7IFNjb3BlTWV0aG9kcywgVHlwZWRTY29wZSB9IGZyb20gJy4vbGliL3JlYWN0aXZlL2luZGV4LmpzJztcblxuLyoqIEBjYXRlZ29yeSBRdWljayBTdGFydCAqL1xuZXhwb3J0IHsgbmFycmF0aXZlIH0gZnJvbSAnLi9yZWNvcmRlcnMuanMnO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBEZWNpc2lvbiBCcmFuY2hpbmcg4oCUIGRlY2lkZSgpIC8gc2VsZWN0KCkgd2l0aCBldmlkZW5jZSBjYXB0dXJlXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKiBAY2F0ZWdvcnkgRGVjaXNpb24gQnJhbmNoaW5nICovXG5leHBvcnQgdHlwZSB7XG4gIERlY2lkZVJ1bGUsXG4gIERlY2lzaW9uRXZpZGVuY2UsXG4gIERlY2lzaW9uUmVzdWx0LFxuICBEZWZhdWx0QnJhbmNoLFxuICBGaWx0ZXJPcHMsXG4gIFJ1bGVFdmlkZW5jZSxcbiAgU2VsZWN0aW9uRXZpZGVuY2UsXG4gIFNlbGVjdGlvblJlc3VsdCxcbiAgV2hlbkNsYXVzZSxcbiAgV2hlcmVGaWx0ZXIsXG59IGZyb20gJy4vbGliL2RlY2lkZS9pbmRleC5qcyc7XG5cbi8qKiBAY2F0ZWdvcnkgRGVjaXNpb24gQnJhbmNoaW5nICovXG5leHBvcnQgeyBkZWNpZGUsIHNlbGVjdCB9IGZyb20gJy4vbGliL2RlY2lkZS9pbmRleC5qcyc7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIEF0dGVtcHRzIOKAlCBldmVyeSB0cnkgb2YgYSByZXRyaWVkIHN0YWdlLCBhbmQgdGhlIGRlY2lzaW9uIHRoYXQgZm9sbG93ZWQgaXRcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqXG4gKiBAY2F0ZWdvcnkgQXR0ZW1wdHNcbiAqXG4gKiBPbmUgYEF0dGVtcHRSZWNvcmRgIHBlciBhdHRlbXB0IG9mIGEgc3RhZ2Ugd2l0aCBhIGRlY2xhcmVkIGByZXRyeWAgcG9saWN5LCBhIGB0aW1lb3V0TXNgLCBvciBhIHJ1biBkZWFkbGluZSDigJRcbiAqIHRpbWluZywgb3V0Y29tZSwgZmFpbHVyZSBjYXRlZ29yeSwgYW5kIHRoZSByZXRyeS1vci1zdG9wIGRlY2lzaW9uIGFzIGBEZWNpc2lvbkV2aWRlbmNlYCDigJQgb24gdGhlIHN0YWdlJ3NcbiAqIGV4ZWN1dGlvbi10cmVlIG5vZGUgKGBTdGFnZVNuYXBzaG90LmF0dGVtcHRzYCAvIGBhdHRlbXB0U3VtbWFyeWApIGFuZCBvbiBgRmxvd1JlY29yZGVyLm9uQXR0ZW1wdGAuXG4gKiBBIGNhbGwgYSBzdGFnZSBtYWtlcyB0aHJvdWdoIGBzY29wZS4kY2FsbGAgaXMgcmVjb3JkZWQgdGhlIHNhbWUgd2F5IChraW5kIGAnY2FsbCdgKSwgYW5kIHNvIGlzIGFuIFNESydzIG93biByZXRyeVxuICogYW4gYWRhcHRlciByZXBvcnRzIHRocm91Z2ggYG9ic2VydmVkKClgIChgT2JzZXJ2ZWRBdHRlbXB0YCwga2luZCBgJ29ic2VydmVkJ2ApLiBgQXR0ZW1wdENvbnRleHRgIGlzIHdoYXRcbiAqIGBzY29wZS4kYXR0ZW1wdCgpYCByZXR1cm5zLCBhbmQgd2hhdCBhIGNhbGwncyBmdW5jdGlvbiBnZXRzICh0aGUgYXR0ZW1wdCdzIHNpZ25hbCwgdGhlIHRpbWUgbGVmdCwgYG9ic2VydmVkYCk7XG4gKiBgTGF0ZVdyaXRlYCBpcyBhIHdyaXRlIChvciBjYWxsKSBhbiBlbmRlZCBhdHRlbXB0IHRyaWVkIChgU3RhZ2VTbmFwc2hvdC5sYXRlV3JpdGVzYCkuIEEgc3RhZ2UgdGhhdCBjaGFuZ2VzIGFuXG4gKiBvdXRzaWRlIHN5c3RlbSBkZWNsYXJlcyBpdCAoYFN0YWdlVG91Y2hlc2AsIGAudG91Y2hlcygpYCksIGFuZCBhIGNhbGwgZG9lcyAoYENhbGxPcHRpb25zYCk6IGV2ZXJ5IGF0dGVtcHQgdGhlblxuICogY2FycmllcyBpdHMgYEF0dGVtcHRFZmZlY3RgLCBhbmQgdGhlIGtleSBydWxlIGlzIGhhbmRlZCBhbiBgSWRlbXBvdGVuY3lLZXlDb250ZXh0YCBvbmNlIHBlciBleGVjdXRpb24uXG4gKi9cbmV4cG9ydCB0eXBlIHtcbiAgQXR0ZW1wdENhdGVnb3J5LFxuICBBdHRlbXB0Q29udGV4dCxcbiAgQXR0ZW1wdEVmZmVjdCxcbiAgQXR0ZW1wdEVycm9yLFxuICBBdHRlbXB0SW5wdXRzLFxuICBBdHRlbXB0S2luZCxcbiAgQXR0ZW1wdE5leHQsXG4gIEF0dGVtcHRPcHRpb25zLFxuICBBdHRlbXB0T3V0Y29tZSxcbiAgQXR0ZW1wdFJlYXNvbixcbiAgQXR0ZW1wdFJlY29yZCxcbiAgQXR0ZW1wdFN1bW1hcnksXG4gIENhbGxPcHRpb25zLFxuICBJZGVtcG90ZW5jeUtleUNvbnRleHQsXG4gIExhdGVXcml0ZSxcbiAgT2JzZXJ2ZWRBdHRlbXB0LFxuICBTdGFnZVRvdWNoZXMsXG4gIFVua25vd25FZmZlY3RJbml0LFxufSBmcm9tICcuL2xpYi9hdHRlbXB0L2luZGV4LmpzJztcbi8qKlxuICogQGNhdGVnb3J5IEF0dGVtcHRzXG4gKlxuICogQW4gYXR0ZW1wdCBieSBuYW1lIChgc2VyaWVzYCArIGBhdHRlbXB0YCkgYW5kIHBlci1vdXRjb21lIGNvdW50cyDigJQgd2hhdCByZWNvcmRlciByb3dzIGhvbGQgb2YgYXR0ZW1wdHMuXG4gKi9cbmV4cG9ydCB0eXBlIHsgQXR0ZW1wdE91dGNvbWVDb3VudHMsIEF0dGVtcHRSZWYgfSBmcm9tICcuL2xpYi9yZWNvcmRlci9hdHRlbXB0U2VyaWVzLmpzJztcblxuLyoqXG4gKiBAY2F0ZWdvcnkgQXR0ZW1wdHNcbiAqXG4gKiBgYXR0ZW1wdCgpYCDigJQgdGhlIGF0dGVtcHQgcnVubmVyIGZvciBjb2RlIHRoYXQgaXMgbm90IGEgc3RhZ2UgKHJlY29yZHMgZ28gdG8gaXRzIGBvbkF0dGVtcHRgKTsgYGVycm9yQ2F0ZWdvcnlgXG4gKiDigJQgdGhlIG9uZSBmYWlsdXJlIGNsYXNzaWZpZXIgKHNldmVuIGZpeGVkIGNhdGVnb3JpZXMpOyBgcmV0cnlSdWxlc2Ag4oCUIHRoZSBvbmUgcmV0cnkgcnVsZSB0YWJsZSwgYXMgYGRlY2lkZSgpYFxuICogcnVsZXM7IHRoZSBhdHRlbXB0IGNvbnRyYWN0J3MgdHdvIGVycm9ycy5cbiAqL1xuZXhwb3J0IHsgYXR0ZW1wdCwgQXR0ZW1wdFRpbWVvdXRFcnJvciwgZXJyb3JDYXRlZ29yeSwgcmV0cnlSdWxlcywgVW5rbm93bkVmZmVjdEVycm9yIH0gZnJvbSAnLi9saWIvYXR0ZW1wdC9pbmRleC5qcyc7XG5cbi8qKlxuICogQGNhdGVnb3J5IENvcnJlbGF0aW9uXG4gKlxuICogVGhlIHJ1bidzIGNvcnJlbGF0aW9uICgxMC4xKTogYGVudi50cmFjZXBhcmVudGAgKFczQywgcGFyc2VkIHN0cmljdGx5KSBvciBgZW52LnRyYWNlSWRgICsgYGVudi5vcGVyYXRpb25JZGBcbiAqIGJlY29tZSBPTkUgZnJvemVuIGBSdW5Db3JyZWxhdGlvbmAgcGVyIHJ1biDigJQgb24gYGdldFNuYXBzaG90KCkuY29ycmVsYXRpb25gLCBldmVyeSBmbG93IGV2ZW50J3NcbiAqIGB0cmF2ZXJzYWxDb250ZXh0LmNvcnJlbGF0aW9uYCBhbmQgZXZlcnkgc2NvcGUgYW5kIGVtaXQgZXZlbnQncyBgY29ycmVsYXRpb25gLiBgcGFyc2VUcmFjZXBhcmVudGAgL1xuICogYGZvcm1hdFRyYWNlcGFyZW50YCBhcmUgdGhlIFczQyBjb2RlYzsgYSByZWZ1c2VkIGhlYWRlciB0aHJvd3MgYFRyYWNlcGFyZW50RXJyb3JgIHdpdGggYSBuYW1lZCBgcmVhc29uYC5cbiAqL1xuZXhwb3J0IHR5cGUgeyBQYXJzZWRUcmFjZXBhcmVudCwgUnVuQ29ycmVsYXRpb24sIFRyYWNlcGFyZW50RmllbGRzLCBUcmFjZXBhcmVudFJlZnVzYWwgfSBmcm9tICcuL2xpYi9hdHRlbXB0L2luZGV4LmpzJztcbmV4cG9ydCB7IGZvcm1hdFRyYWNlcGFyZW50LCBwYXJzZVRyYWNlcGFyZW50LCBUcmFjZXBhcmVudEVycm9yIH0gZnJvbSAnLi9saWIvYXR0ZW1wdC9pbmRleC5qcyc7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIFJ1biDigJQgRXhlY3V0ZSBjaGFydHMgYW5kIGNvbGxlY3QgcmVzdWx0c1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKiogQGNhdGVnb3J5IFJ1biAqL1xuZXhwb3J0IHR5cGUgeyBSdW5SZXN1bHQgfSBmcm9tICcuL2xpYi9ydW5uZXIvaW5kZXguanMnO1xuXG4vKiogQGNhdGVnb3J5IFJ1biAqL1xuZXhwb3J0IHR5cGUgeyBGbG93Q2hhcnRFeGVjdXRvck9wdGlvbnMgfSBmcm9tICcuL2xpYi9ydW5uZXIvaW5kZXguanMnO1xuXG4vKipcbiAqIFRoZSBjcmFzaC1zYWZlIHJlY29yZCAoMTAuMSk6IHRoZSBleGVjdXRvcidzIGBzaW5rYCBvcHRpb24sIGl0cyBhY2NvdW50aW5nIG9uIGBnZXRTbmFwc2hvdCgpLnNpbmtgLFxuICogYGV4ZWN1dG9yLmZsdXNoUmVjb3JkKClgJ3MgcmVzdWx0LCBhbmQgdGhlIGVycm9yIGEgcnVuIHdpdGggYG9uRmFpbHVyZTogJ2ZhaWwnYCByZWplY3RzIHdpdGguIFRoZSBwb3J0XG4gKiAoYFJlY29yZFNpbmtgLCBgbWVtb3J5U2lua2ApIGlzIGBmb290dHJhY2Uvd3JpdGVgJ3M7IHRoZSBmaWxlIGFkYXB0ZXIgaXMgYGZvb3RwcmludGpzL3NpbmtzYC5cbiAqIEBjYXRlZ29yeSBSdW5cbiAqL1xuZXhwb3J0IHR5cGUge1xuICBSZWNvcmRGbHVzaFJlc3VsdCxcbiAgUmVjb3JkU2lua0ZhaWx1cmVNb2RlLFxuICBSZWNvcmRTaW5rRmx1c2hNb2RlLFxuICBSZWNvcmRTaW5rT3B0aW9uLFxuICBSZWNvcmRTaW5rT3B0aW9ucyxcbiAgUmVjb3JkU2lua1N0YXRzLFxufSBmcm9tICcuL2xpYi9ydW5uZXIvaW5kZXguanMnO1xuLyoqIEBjYXRlZ29yeSBSdW4gKi9cbmV4cG9ydCB7IFJlY29yZFNpbmtFcnJvciB9IGZyb20gJy4vbGliL3J1bm5lci9pbmRleC5qcyc7XG5cbi8qKlxuICogVGhlIGZvdXIgb2JzZXJ2YWJpbGl0eSBkaWFscyBgRmxvd0NoYXJ0RXhlY3V0b3JPcHRpb25zYCBpbmhlcml0cy5cbiAqIEBjYXRlZ29yeSBSdW5cbiAqL1xuZXhwb3J0IHR5cGUgeyBSdW5EaWFscyB9IGZyb20gJy4vbGliL21lbW9yeS9pbmRleC5qcyc7XG5cbi8qKiBAY2F0ZWdvcnkgUnVuICovXG5leHBvcnQgeyBGbG93Q2hhcnRFeGVjdXRvciB9IGZyb20gJy4vbGliL3J1bm5lci9pbmRleC5qcyc7XG5cbi8qKiBAY2F0ZWdvcnkgUnVuICovXG5leHBvcnQgeyBSdW5Db250ZXh0IH0gZnJvbSAnLi9saWIvcnVubmVyL2luZGV4LmpzJztcblxuLyoqIEBjYXRlZ29yeSBSdW4gKi9cbmV4cG9ydCB0eXBlIHsgQ2hhcnRPcGVuQVBJT3B0aW9ucywgTUNQVG9vbERlc2NyaXB0aW9uLCBSdW5uYWJsZUZsb3dDaGFydCB9IGZyb20gJy4vbGliL3J1bm5lci9SdW5uYWJsZUNoYXJ0LmpzJztcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gT2JzZXJ2ZSDigJQgRGF0YSAoc2NvcGUgcmVjb3JkZXJzLCBmaXJlIGR1cmluZyBzdGFnZSBleGVjdXRpb24pXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKiBAY2F0ZWdvcnkgT2JzZXJ2ZSDigJQgRGF0YSAqL1xuZXhwb3J0IHR5cGUge1xuICBDb21taXRFdmVudCxcbiAgRXJyb3JFdmVudCxcbiAgUmVhZEV2ZW50LFxuICBSZWRhY3Rpb25Qb2xpY3ksXG4gIFJlZGFjdGlvblJlcG9ydCxcbiAgU2NvcGVSZWNvcmRlcixcbiAgU3RhZ2VFdmVudCxcbiAgV3JpdGVFdmVudCxcbn0gZnJvbSAnLi9saWIvc2NvcGUvaW5kZXguanMnO1xuXG4vKiogQGNhdGVnb3J5IE9ic2VydmUg4oCUIERhdGEgKi9cbmV4cG9ydCB7IE1ldHJpY1JlY29yZGVyIH0gZnJvbSAnLi9saWIvc2NvcGUvaW5kZXguanMnO1xuXG4vKiogQGNhdGVnb3J5IE9ic2VydmUg4oCUIERhdGEgKi9cbmV4cG9ydCB7IERlYnVnUmVjb3JkZXIgfSBmcm9tICcuL2xpYi9zY29wZS9pbmRleC5qcyc7XG5cbi8qKiBAY2F0ZWdvcnkgT2JzZXJ2ZSDigJQgT3BlcmF0aW9uICovXG5leHBvcnQgeyBSZWNvcmRlck9wZXJhdGlvbiB9IGZyb20gJy4vbGliL3JlY29yZGVyL2luZGV4LmpzJztcblxuLyoqXG4gKiBAY2F0ZWdvcnkgT2JzZXJ2ZSDigJQgRGVsaXZlcnkgdGllciAoUkZDLTAwMSBkZWZlcnJlZCBvYnNlcnZlcnMpXG4gKlxuICogRXZlcnkgYGF0dGFjaCpSZWNvcmRlcmAgY2FsbCBhY2NlcHRzIGFuIG9wdGlvbnMgYmFnOlxuICogYGV4ZWN1dG9yLmF0dGFjaFNjb3BlUmVjb3JkZXIocmVjLCB7IGRlbGl2ZXJ5OiAnZGVmZXJyZWQnIH0pYCB0YWtlcyB0aGVcbiAqIHJlY29yZGVyIE9VVCBvZiB0aGUgZW5naW5lJ3MgaG90IHBhdGgg4oCUIGV2ZW50cyBhcmUgY2FwdHVyZWQgaW50byBvbmVcbiAqIGJvdW5kZWQsIHRvdGFsbHktb3JkZXJlZCBxdWV1ZSBhbmQgZGVsaXZlcmVkIGF0IHRoZSBuZXh0IG1pY3JvdGFza1xuICogY2hlY2twb2ludCAoXCJvbmUgYmVhdCBiZWhpbmRcIikuIE9taXQgYGRlbGl2ZXJ5YCBmb3IgdGhlIGhpc3RvcmljYWxcbiAqIHN5bmNocm9ub3VzIGNhbGwgKGJ5dGUtaWRlbnRpY2FsIHRvIHByZXZpb3VzIHJlbGVhc2VzKS4gQWNjb3VudGluZ1xuICogc3VyZmFjZXMgb24gYHNuYXBzaG90Lm9ic2VydmVyU3RhdHNgOyBgZXhlY3V0b3IuZHJhaW5PYnNlcnZlcnMoKWAgc2V0dGxlc1xuICogYXN5bmMgbGlzdGVuZXJzIGJlZm9yZSBzaHV0ZG93bi4gU2VlIGBkb2NzL2d1aWRlcy9vYnNlcnZlcnMtZGVmZXJyZWQubWRgLlxuICovXG5leHBvcnQgdHlwZSB7XG4gIEF0dGFjaFJlY29yZGVyT3B0aW9ucyxcbiAgT2JzZXJ2ZXJEZWxpdmVyeSxcbiAgT2JzZXJ2ZXJEcmFpblJlc3VsdCxcbiAgT2JzZXJ2ZXJTdGF0cyxcbn0gZnJvbSAnLi9saWIvcnVubmVyL2luZGV4LmpzJztcblxuLyoqXG4gKiBAY2F0ZWdvcnkgT2JzZXJ2ZSDigJQgRGVsaXZlcnkgdGllciAoUkZDLTAwMSBkZWZlcnJlZCBvYnNlcnZlcnMpXG4gKlxuICogYENhcHR1cmVQb2xpY3lgIOKAlCBob3cgYSBkZWZlcnJlZCBldmVudCdzIHBheWxvYWQgaXMgbWF0ZXJpYWxpemVkIGF0XG4gKiBjYXB0dXJlIHRpbWUgKGAnY2xvbmUnYCBieSBkZWZhdWx0IGZvciBhdHRhY2ggb3B0aW9ucyAvIGAnc3VtbWFyeSdgIC8gYCdyZWYnYCkuIGBPdmVyZmxvd1BvbGljeWBcbiAqIOKAlCB3aGF0IGEgc2F0dXJhdGVkIHF1ZXVlIGRvZXMgKGAnZHJvcC1vbGRlc3QnYCBkZWZhdWx0IC8gYCdzYW1wbGUnYCAvXG4gKiBgJ2Jsb2NrJ2ApLiBgRGlzcGF0Y2hlclN0YXRzYCAvIGBMaXN0ZW5lclN0YXRzYCDigJQgdGhlIGFjY291bnRpbmcgc2hhcGVzXG4gKiBlbWJlZGRlZCBpbiBgT2JzZXJ2ZXJTdGF0c2AuIFR5cGVzIG9ubHkg4oCUIHRoZSBvYnNlcnZlci1xdWV1ZSBtb2R1bGVcbiAqIGl0c2VsZiBpcyBpbnRlcm5hbDsgY29uc3VtZXJzIHVzZSB0aGUgYXR0YWNoIG9wdGlvbnMuXG4gKi9cbmV4cG9ydCB0eXBlIHsgQ2FwdHVyZVBvbGljeSwgRGlzcGF0Y2hlclN0YXRzLCBMaXN0ZW5lclN0YXRzLCBPdmVyZmxvd1BvbGljeSB9IGZyb20gJy4vbGliL29ic2VydmVyLXF1ZXVlL2luZGV4LmpzJztcblxuLyoqIEBjYXRlZ29yeSBPYnNlcnZlIOKAlCBDb21iaW5lZCAoYm90aCBkYXRhLWZsb3cgYW5kIGNvbnRyb2wtZmxvdykgKi9cbmV4cG9ydCB0eXBlIHsgQ29tYmluZWRSZWNvcmRlciB9IGZyb20gJy4vbGliL3JlY29yZGVyL2luZGV4LmpzJztcbi8qKiBAY2F0ZWdvcnkgT2JzZXJ2ZSDigJQgQ29tYmluZWQgKGJvdGggZGF0YS1mbG93IGFuZCBjb250cm9sLWZsb3cpICovXG5leHBvcnQge1xuICBoYXNFbWl0UmVjb3JkZXJNZXRob2RzLFxuICBoYXNGbG93UmVjb3JkZXJNZXRob2RzLFxuICBoYXNSZWNvcmRlck1ldGhvZHMsXG4gIGlzRmxvd0V2ZW50LFxufSBmcm9tICcuL2xpYi9yZWNvcmRlci9pbmRleC5qcyc7XG5cbi8qKlxuICogQGNhdGVnb3J5IE9ic2VydmUg4oCUIEVtaXQgKHVzZXItYXV0aG9yZWQgc3RydWN0dXJlZCBldmVudHMpXG4gKlxuICogVGhpcmQgb2JzZXJ2ZXIgY2hhbm5lbCAoYWxvbmdzaWRlIGBTY29wZVJlY29yZGVyYCBhbmQgYEZsb3dSZWNvcmRlcmApLiBDb25zdW1lclxuICogY29kZSBjYWxscyBgc2NvcGUuJGVtaXQobmFtZSwgcGF5bG9hZClgIGZyb20gaW5zaWRlIGEgc3RhZ2U7IGV2ZXJ5IGF0dGFjaGVkXG4gKiBgRW1pdFJlY29yZGVyLm9uRW1pdChldmVudClgIGZpcmVzIHN5bmNocm9ub3VzbHkgd2l0aCBzdGFnZS1jb250ZXh0XG4gKiBlbnJpY2htZW50LiBQYXNzLXRocm91Z2gg4oCUIG5vIGJ1ZmZlcmluZywgemVybyBhbGxvY2F0aW9uIHdoZW4gbm8gcmVjb3JkZXJcbiAqIGlzIGF0dGFjaGVkLlxuICovXG5leHBvcnQgdHlwZSB7IEVtaXRFdmVudCwgRW1pdFJlY29yZGVyIH0gZnJvbSAnLi9saWIvcmVjb3JkZXIvaW5kZXguanMnO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBPYnNlcnZlIOKAlCBGbG93IChGbG93UmVjb3JkZXIsIGZpcmVzIGFmdGVyIHN0YWdlIGV4ZWN1dGlvbilcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqIEBjYXRlZ29yeSBPYnNlcnZlIOKAlCBGbG93ICovXG5leHBvcnQgdHlwZSB7XG4gIEZsb3dBdHRlbXB0RXZlbnQsXG4gIEZsb3dCcmVha0V2ZW50LFxuICBGbG93RGVjaXNpb25FdmVudCxcbiAgRmxvd0Vycm9yRXZlbnQsXG4gIEZsb3dGb3JrRXZlbnQsXG4gIEZsb3dMb29wRXZlbnQsXG4gIEZsb3dOZXh0RXZlbnQsXG4gIEZsb3dSZWNvcmRlcixcbiAgRmxvd1J1bkV2ZW50LFxuICBGbG93UnVuRmFpbGVkRXZlbnQsXG4gIEZsb3dTZWxlY3RlZEV2ZW50LFxuICBGbG93U3RhZ2VFdmVudCxcbiAgRmxvd1N0YWdlUmV0cnlFdmVudCxcbiAgRmxvd1N1YmZsb3dFdmVudCxcbiAgRmxvd1N1YmZsb3dSZWdpc3RlcmVkRXZlbnQsXG4gIEZsb3dUaHJvdHRsZWRFdmVudCxcbiAgUmVzdW1lTGluayxcbiAgVHJhdmVyc2FsQ29udGV4dCxcbn0gZnJvbSAnLi9saWIvZW5naW5lL2luZGV4LmpzJztcblxuLyoqIEBjYXRlZ29yeSBPYnNlcnZlIOKAlCBGbG93ICovXG5leHBvcnQgdHlwZSB7IENvbWJpbmVkTmFycmF0aXZlRW50cnkgfSBmcm9tICcuL2xpYi9lbmdpbmUvaW5kZXguanMnO1xuXG4vKipcbiAqIEBjYXRlZ29yeSBPYnNlcnZlIOKAlCBGbG93XG4gKlxuICogYE5hcnJhdGl2ZUZvcm1hdHRlcmAg4oCUIHBsdWdnYWJsZSBmb3JtYXR0ZXIgdGhhdCBjb252ZXJ0cyBldmVudCBjb250ZXh0XG4gKiBvYmplY3RzIGludG8gdGhlIHRleHQgbGluZXMgb2YgdGhlIG5hcnJhdGl2ZS5cbiAqL1xuZXhwb3J0IHR5cGUgeyBOYXJyYXRpdmVGb3JtYXR0ZXIgfSBmcm9tICcuL2xpYi9lbmdpbmUvaW5kZXguanMnO1xuXG4vKiogQGNhdGVnb3J5IE9ic2VydmUg4oCUIEZsb3cgKi9cbmV4cG9ydCB7IE5hcnJhdGl2ZUZsb3dSZWNvcmRlciB9IGZyb20gJy4vbGliL2VuZ2luZS9pbmRleC5qcyc7XG5cbi8qKiBAY2F0ZWdvcnkgT2JzZXJ2ZSDigJQgRmxvdyAqL1xuZXhwb3J0IHR5cGUgeyBNYW5pZmVzdEF0dGVtcHRSb3csIE1hbmlmZXN0RW50cnkgfSBmcm9tICcuL2xpYi9lbmdpbmUvaW5kZXguanMnO1xuXG4vKiogQGNhdGVnb3J5IE9ic2VydmUg4oCUIEZsb3cgKi9cbmV4cG9ydCB7IE1hbmlmZXN0Rmxvd1JlY29yZGVyIH0gZnJvbSAnLi9saWIvZW5naW5lL2luZGV4LmpzJztcblxuLyoqIEBjYXRlZ29yeSBPYnNlcnZlIOKAlCBGbG93ICovXG5leHBvcnQgeyBBZGFwdGl2ZU5hcnJhdGl2ZUZsb3dSZWNvcmRlciB9IGZyb20gJy4vbGliL2VuZ2luZS9pbmRleC5qcyc7XG5cbi8qKiBAY2F0ZWdvcnkgT2JzZXJ2ZSDigJQgRmxvdyAqL1xuZXhwb3J0IHsgTWlsZXN0b25lTmFycmF0aXZlRmxvd1JlY29yZGVyIH0gZnJvbSAnLi9saWIvZW5naW5lL2luZGV4LmpzJztcblxuLyoqIEBjYXRlZ29yeSBPYnNlcnZlIOKAlCBGbG93ICovXG5leHBvcnQgeyBQcm9ncmVzc2l2ZU5hcnJhdGl2ZUZsb3dSZWNvcmRlciB9IGZyb20gJy4vbGliL2VuZ2luZS9pbmRleC5qcyc7XG5cbi8qKiBAY2F0ZWdvcnkgT2JzZXJ2ZSDigJQgRmxvdyAqL1xuZXhwb3J0IHsgUkxFTmFycmF0aXZlRmxvd1JlY29yZGVyIH0gZnJvbSAnLi9saWIvZW5naW5lL2luZGV4LmpzJztcblxuLyoqIEBjYXRlZ29yeSBPYnNlcnZlIOKAlCBGbG93ICovXG5leHBvcnQgeyBTZXBhcmF0ZU5hcnJhdGl2ZUZsb3dSZWNvcmRlciB9IGZyb20gJy4vbGliL2VuZ2luZS9pbmRleC5qcyc7XG5cbi8qKiBAY2F0ZWdvcnkgT2JzZXJ2ZSDigJQgRmxvdyAqL1xuZXhwb3J0IHsgU2lsZW50TmFycmF0aXZlRmxvd1JlY29yZGVyIH0gZnJvbSAnLi9saWIvZW5naW5lL2luZGV4LmpzJztcblxuLyoqIEBjYXRlZ29yeSBPYnNlcnZlIOKAlCBGbG93ICovXG5leHBvcnQgeyBXaW5kb3dlZE5hcnJhdGl2ZUZsb3dSZWNvcmRlciB9IGZyb20gJy4vbGliL2VuZ2luZS9pbmRleC5qcyc7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIFNlbGYtRGVzY3JpYmluZyDigJQgLmNvbnRyYWN0KCksIHRvT3BlbkFQSSgpLCB0b01DUFRvb2woKVxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKiogQGNhdGVnb3J5IFNlbGYtRGVzY3JpYmluZyAqL1xuZXhwb3J0IHR5cGUgeyBKc29uU2NoZW1hIH0gZnJvbSAnLi9saWIvY29udHJhY3QvaW5kZXguanMnO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBTbmFwc2hvdCAmIENvbXBvc2l0aW9uIOKAlCBTdWJmbG93IG5hdmlnYXRpb24gYW5kIENvbXBvc2FibGVSdW5uZXJcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqIEBjYXRlZ29yeSBTbmFwc2hvdCAmIENvbXBvc2l0aW9uICovXG5leHBvcnQgdHlwZSB7IENvbXBvc2FibGVSdW5uZXIgfSBmcm9tICcuL2xpYi9ydW5uZXIvaW5kZXguanMnO1xuXG4vKiogQGNhdGVnb3J5IFNuYXBzaG90ICYgQ29tcG9zaXRpb24gKi9cbmV4cG9ydCB0eXBlIHsgUmVjb3JkZXJTbmFwc2hvdCwgUnVudGltZVNuYXBzaG90LCBTdWJ0cmVlU25hcHNob3QgfSBmcm9tICcuL2xpYi9ydW5uZXIvaW5kZXguanMnO1xuXG4vKiogQGNhdGVnb3J5IFNuYXBzaG90ICYgQ29tcG9zaXRpb24gKi9cbmV4cG9ydCB7IGdldFN1YnRyZWVTbmFwc2hvdCwgbGlzdFN1YmZsb3dQYXRocyB9IGZyb20gJy4vbGliL3J1bm5lci9pbmRleC5qcyc7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIFNjb3BlUmVjb3JkZXIgQ29tcG9zaXRpb24g4oCUIEJ1bmRsZSBtdWx0aXBsZSByZWNvcmRlcnMgaW50byBkb21haW4gcHJlc2V0c1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKiogQGNhdGVnb3J5IFNjb3BlUmVjb3JkZXIgKi9cbmV4cG9ydCB7IENvbXBvc2l0ZVJlY29yZGVyIH0gZnJvbSAnLi9saWIvcmVjb3JkZXIvaW5kZXguanMnO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBQYXVzZS9SZXN1bWUg4oCUIFNlcmlhbGl6YWJsZSBjaGVja3BvaW50cyBmb3IgbG9uZy1ydW5uaW5nIG9yIGh1bWFuLWluLXRoZS1sb29wIGZsb3dzXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKiBAY2F0ZWdvcnkgUGF1c2UvUmVzdW1lICovXG4vKiogQGNhdGVnb3J5IFBhdXNlL1Jlc3VtZSAqL1xuZXhwb3J0IHR5cGUge1xuICBGbG93Y2hhcnRDaGVja3BvaW50LFxuICBQYXVzYWJsZUhhbmRsZXIsXG4gIFBhdXNlZEV4ZWN1dGlvbixcbiAgUGVuZGluZ1BhdXNlLFxuICBSZWRhY3Rpb25NYXJrcyxcbn0gZnJvbSAnLi9saWIvcGF1c2UvaW5kZXguanMnO1xuXG4vKipcbiAqIEBjYXRlZ29yeSBQYXVzZS9SZXN1bWVcbiAqXG4gKiBgaW50ZXJydXB0KHNjb3BlLCB7IHJlYXNvbiwgZXhwZWN0cz8gfSlgIOKAlCBzdG9wIG1pZC1zdGFnZSB0byBhc2sgYSBxdWVzdGlvbixcbiAqIGFuZCBnZXQgdGhlIGFuc3dlciBiYWNrIGF0IHRoZSBzYW1lIGNhbGwgc2l0ZSB3aGVuIHRoZSBydW4gcmVzdW1lcy4gUmVzdW1lXG4gKiByZS1lbnRlcnMgdGhlIHN0YWdlIGZyb20gaXRzIFRPUCAoc3RhZ2VzIGFyZSBhdG9taWMpLCBzbyBrZWVwIHRoZSBoYWxmXG4gKiBiZWZvcmUgdGhlIGNhbGwgaWRlbXBvdGVudC5cbiAqL1xuZXhwb3J0IHR5cGUgeyBJbnRlcnJ1cHRQYXlsb2FkIH0gZnJvbSAnLi9saWIvcGF1c2UvaW5kZXguanMnO1xuXG4vKiogQGNhdGVnb3J5IFBhdXNlL1Jlc3VtZSAqL1xuZXhwb3J0IHsgaW50ZXJydXB0IH0gZnJvbSAnLi9saWIvcGF1c2UvaW5kZXguanMnO1xuXG4vKiogQGNhdGVnb3J5IFNjb3BlUmVjb3JkZXIgKi9cbmV4cG9ydCB0eXBlIHsgQ29tcG9zaXRlU25hcHNob3QgfSBmcm9tICcuL2xpYi9yZWNvcmRlci9pbmRleC5qcyc7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIENvbmZpZ3VyYXRpb24g4oCUIFR5cGVzIHBhc3NlZCB0byBGbG93Q2hhcnRFeGVjdXRvciBhbmQgcnVuKClcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqIEBjYXRlZ29yeSBDb25maWd1cmF0aW9uICovXG5leHBvcnQgdHlwZSB7IEV4ZWN1dGlvbkVudiwgRXhlY3V0b3JSZXN1bHQsIFBhdXNlZFJlc3VsdCwgUnVuT3B0aW9ucyB9IGZyb20gJy4vbGliL2VuZ2luZS9pbmRleC5qcyc7XG5cbi8qKiBAY2F0ZWdvcnkgQ29uZmlndXJhdGlvbiAqL1xuZXhwb3J0IHR5cGUgeyBTY29wZUZhY3RvcnkgfSBmcm9tICcuL2xpYi9lbmdpbmUvaW5kZXguanMnO1xuXG4vKipcbiAqIEBjYXRlZ29yeSBDb25maWd1cmF0aW9uXG4gKlxuICogUmVhZC10cmFja2luZyBwb2xpY3kgZm9yIGBTdGFnZVNuYXBzaG90LnN0YWdlUmVhZHNgICgjMTQpOlxuICogYCdmdWxsJ2AgKGRlZmF1bHQg4oCUIHBlci1yZWFkIHZhbHVlIGNsb25lLCBoaXN0b3JpY2FsIGJlaGF2aW9yKSAvXG4gKiBgJ3N1bW1hcnknYCAoY2hlYXAgYFJlYWRTdW1tYXJ5TWFya2VyYCBwZXIgcmVhZCkgLyBgJ29mZidgIChubyB0cmFja2luZyxcbiAqIHplcm8gcGVyLXJlYWQgY2xvbmUpLiBQYXNzIGFzIGBuZXcgRmxvd0NoYXJ0RXhlY3V0b3IoY2hhcnQsIHsgcmVhZFRyYWNraW5nIH0pYFxuICogb3IgY2FsbCBgZXhlY3V0b3Iuc2V0UmVhZFRyYWNraW5nKG1vZGUpYCBiZWZvcmUgYHJ1bigpYC5cbiAqL1xuZXhwb3J0IHR5cGUgeyBSZWFkU3VtbWFyeU1hcmtlciwgUmVhZFRyYWNraW5nTW9kZSB9IGZyb20gJy4vbGliL21lbW9yeS9pbmRleC5qcyc7XG5cbi8qKlxuICogQGNhdGVnb3J5IENvbmZpZ3VyYXRpb25cbiAqXG4gKiBXcml0ZS10cmFja2luZyBwb2xpY3kgZm9yIGBTdGFnZVNuYXBzaG90LnN0YWdlV3JpdGVzYCAoIzEzYy1BKSDigJQgdGhlXG4gKiBzaWJsaW5nIG9mIGBSZWFkVHJhY2tpbmdNb2RlYDsgYm90aCBhbGlhcyB0aGUgc2hhcmVkIGBSZXRlbnRpb25Qb2xpY3lgXG4gKiBmYW1pbHkgZnJvbSBgbGliL2NhcHR1cmVgLiBgJ2Z1bGwnYCAoZGVmYXVsdCDigJQgcGVyLXdyaXRlIHZhbHVlIGNsb25lLFxuICogaGlzdG9yaWNhbCBiZWhhdmlvcikgLyBgJ3N1bW1hcnknYCAoY2hlYXAgYFdyaXRlU3VtbWFyeU1hcmtlcmAgcGVyIHdyaXRlKVxuICogLyBgJ29mZidgIChubyB0cmFja2luZzsgYHN0YWdlV3JpdGVzYCBhYnNlbnQgYW5kIHRoZSBgb25Db21taXRgIG11dGF0aW9uc1xuICogcGF5bG9hZCBpcyBlbXB0eSDigJQgd3JpdGVzIHRoZW1zZWx2ZXMgc3RpbGwgY29tbWl0LCBhbmQgdGhlIGNvbW1pdCBsb2cgaXNcbiAqIHVuYWZmZWN0ZWQpLiBQYXNzIGFzIGBuZXcgRmxvd0NoYXJ0RXhlY3V0b3IoY2hhcnQsIHsgd3JpdGVUcmFja2luZyB9KWAgb3JcbiAqIGNhbGwgYGV4ZWN1dG9yLnNldFdyaXRlVHJhY2tpbmcobW9kZSlgIGJlZm9yZSBgcnVuKClgLlxuICovXG5leHBvcnQgdHlwZSB7IFJldGVudGlvblBvbGljeSwgV3JpdGVTdW1tYXJ5TWFya2VyLCBXcml0ZVRyYWNraW5nTW9kZSB9IGZyb20gJy4vbGliL21lbW9yeS9pbmRleC5qcyc7XG5cbi8qKlxuICogQGNhdGVnb3J5IENvbmZpZ3VyYXRpb25cbiAqXG4gKiBDb21taXQtdmFsdWVzIGVuY29kaW5nIGZvciB0aGUgQ09NTUlUIExPRyAoIzEzYy1CKSDigJQgdGhlIHRoaXJkIGRpYWwgb2ZcbiAqIHRoZSBmYW1pbHksIGFuZCB0aGUgb25seSBMT1NTTEVTUyBvbmUgKGl0IGNoYW5nZXMgdGhlIGxvZydzIGVuY29kaW5nLFxuICogbmV2ZXIgaXRzIGluZm9ybWF0aW9uKS4gYCdmdWxsJ2AgKGRlZmF1bHQg4oCUIGV2ZXJ5IHN1cnZpdmluZyBgc2V0YCBzdG9yZXNcbiAqIHRoZSBmdWxsIGZpbmFsIHZhbHVlLCBieXRlLWlkZW50aWNhbCB0byBoaXN0b3J5KSAvIGAnZGVsdGEnYCAoYXJyYXlcbiAqIG5ldC1jaGFuZ2VzIHRoYXQgYXJlIFwiYmFzZSBwbHVzIGEgdGFpbFwiIGNvbW1pdCBhcyBhbiBgYXBwZW5kYCB2ZXJiXG4gKiBzdG9yaW5nIG9ubHkgdGhlIHRhaWw7IGBkZWxldGVWYWx1ZSgpYCBjb21taXRzIGFzIGEgcmVhbCBgZGVsZXRlYCB2ZXJiO1xuICogb25lIHRyYWNlIGVudHJ5IHBlciBzdXJ2aXZpbmcgcGF0aCkuIFJlcGxheSByZWNvbnN0cnVjdHMgZXZlcnkgc3RlcCdzXG4gKiBmdWxsIHN0YXRlIGV4YWN0bHkuIENvbnN1bWVycyByZWFkaW5nIGBidW5kbGUub3ZlcndyaXRlW2tleV1gIGFzIHRoZSBmdWxsXG4gKiB2YWx1ZSBtdXN0IHVzZSBgY29tbWl0VmFsdWVBdGAgZnJvbSBgZm9vdHRyYWNlYC4gUGFzcyBhc1xuICogYG5ldyBGbG93Q2hhcnRFeGVjdXRvcihjaGFydCwgeyBjb21taXRWYWx1ZXMgfSlgIG9yIGNhbGxcbiAqIGBleGVjdXRvci5zZXRDb21taXRWYWx1ZXMobW9kZSlgIGJlZm9yZSBgcnVuKClgOyB0aGUgYWN0aXZlIG1vZGUgaXMgdGhlXG4gKiBzbmFwc2hvdCBkaXNjcmltaW5hbnQgYGdldFNuYXBzaG90KCkuY29tbWl0VmFsdWVzYC5cbiAqL1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBDb250cmFjdCAmIFZhbGlkYXRpb25cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqIEBjYXRlZ29yeSBDb250cmFjdCAmIFZhbGlkYXRpb24gKi9cbmV4cG9ydCB0eXBlIHsgU2NoZW1hS2luZCwgVmFsaWRhdGlvbklzc3VlLCBWYWxpZGF0aW9uUmVzdWx0IH0gZnJvbSAnLi9saWIvc2NoZW1hL2luZGV4LmpzJztcblxuLyoqIEBjYXRlZ29yeSBDb250cmFjdCAmIFZhbGlkYXRpb24gKi9cbmV4cG9ydCB7IGRldGVjdFNjaGVtYSwgaXNWYWxpZGF0YWJsZSwgaXNab2QgfSBmcm9tICcuL2xpYi9zY2hlbWEvaW5kZXguanMnO1xuXG4vKiogQGNhdGVnb3J5IENvbnRyYWN0ICYgVmFsaWRhdGlvbiAqL1xuZXhwb3J0IHsgSW5wdXRWYWxpZGF0aW9uRXJyb3IsIHZhbGlkYXRlQWdhaW5zdFNjaGVtYSwgdmFsaWRhdGVPclRocm93IH0gZnJvbSAnLi9saWIvc2NoZW1hL2luZGV4LmpzJztcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gRXJyb3IgVXRpbGl0aWVzXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKiBAY2F0ZWdvcnkgRXJyb3IgVXRpbGl0aWVzICovXG5leHBvcnQgdHlwZSB7IFN0cnVjdHVyZWRFcnJvckluZm8gfSBmcm9tICcuL2xpYi9lbmdpbmUvaW5kZXguanMnO1xuXG4vKiogQGNhdGVnb3J5IEVycm9yIFV0aWxpdGllcyAqL1xuZXhwb3J0IHsgZXh0cmFjdEVycm9ySW5mbywgZm9ybWF0RXJyb3JJbmZvIH0gZnJvbSAnLi9saWIvZW5naW5lL2luZGV4LmpzJztcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gRGV2IFRvb2xzIOKAlCBNb2RlIGZsYWdzIGFuZCBab2Qgc2NvcGUgdXRpbGl0aWVzXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKlxuICogQGNhdGVnb3J5IERldiBUb29sc1xuICpcbiAqIEdsb2JhbCBkZXYtbW9kZSBmbGFnLiBDYWxsIGBlbmFibGVEZXZNb2RlKClgIGF0IGFwcGxpY2F0aW9uIHN0YXJ0dXAgdG9cbiAqIHR1cm4gb24gZGV2ZWxvcGVyLW9ubHkgZGlhZ25vc3RpY3MgYWNyb3NzIHRoZSBsaWJyYXJ5IOKAlCBjaXJjdWxhci1yZWZlcmVuY2VcbiAqIGRldGVjdGlvbiBpbiBzY29wZSB3cml0ZXMsIHdhcm5pbmdzIHdoZW4gYSByZWNvcmRlciBoYXMgbm8gb2JzZXJ2ZXJcbiAqIG1ldGhvZHMsIHN1c3BpY2lvdXMtcHJlZGljYXRlIHdhcm5pbmdzIGluIGRlY2lkZS9zZWxlY3QsIHN0cnVjdHVyYWxcbiAqIGNoZWNrcyBpbiBgZ2V0U3VidHJlZVNuYXBzaG90YCwgYW5kIGFueSBmdXR1cmUgZGV2LW9ubHkgZGlhZ25vc3RpYy5cbiAqXG4gKiBQcm9kdWN0aW9uIGxlYXZlcyBpdCBPRkYgYnkgZGVmYXVsdCAoemVybyBvdmVyaGVhZCkuIFNlZSB0aGUgSlNEb2Mgb25cbiAqIGBlbmFibGVEZXZNb2RlYCBmb3IgdGhlIGZ1bGwgbGlzdCBhbmQgdXNhZ2UgZXhhbXBsZS5cbiAqL1xuZXhwb3J0IHsgZGlzYWJsZURldk1vZGUsIGVuYWJsZURldk1vZGUsIGlzRGV2TW9kZSB9IGZyb20gJy4vbGliL2Rldk1vZGUuanMnO1xuXG4vLyBgZGVmaW5lU2NvcGVGcm9tWm9kYCBhbmQgdGhlIG90aGVyIHpvZC1iYXNlZCBzY29wZSBoZWxwZXJzIG1vdmVkIHRvIHRoZSBvcHQtaW5cbi8vIGBmb290cHJpbnRqcy96b2RgIGVudHJ5IOKAlCBrZWVwaW5nIHpvZCBvdXQgb2YgdGhlIGNvcmUgbG9hZCBwYXRoIChpdCBpcyBhblxuLy8gb3B0aW9uYWwgcGVlcikuIEltcG9ydCB0aGVtIGZyb20gJ2Zvb3RwcmludGpzL3pvZCcuXG4vLyBBIHJ1bidzIHJlY29yZCBhcyBKU09OIHdpdGhvdXQgdGhlIGVuZ2luZSdzIHJlY3Vyc2lvbiBsaW1pdCAoOS4yNi4wKTogdGhlXG4vLyBzYW1lIGJ5dGVzIEpTT04uc3RyaW5naWZ5IGVtaXRzLCBmb3IgYSBkZWVwIGBuZXh0YCBjaGFpbiBpdCBjYW5ub3QgZW5jb2RlLlxuZXhwb3J0IHR5cGUgeyBSZXRyeUxvb3BDYWxsLCBSZXRyeUxvb3BEZWNpc2lvbiwgUmV0cnlMb29wSWRlbnRpdHkgfSBmcm9tICcuL2xpYi9hdHRlbXB0L3JldHJ5TG9vcFR5cGVzLmpzJztcbmV4cG9ydCB0eXBlIHsgUmV0cnlMb29wQ29udGV4dCwgUmV0cnlMb29wT3B0aW9ucywgUmV0cnlMb29wU3RhdGUgfSBmcm9tICcuL2xpYi9idWlsZGVyL3JldHJ5TG9vcC5qcyc7XG5leHBvcnQgeyBzdHJpbmdpZnlTbmFwc2hvdCB9IGZyb20gJy4vbGliL3J1bm5lci9zdHJpbmdpZnlTbmFwc2hvdC5qcyc7XG4iXX0=
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* attempt/anySignal.ts — one signal that aborts when ANY of its inputs does.
|
|
3
|
+
*
|
|
4
|
+
* The attempt runner gives each attempt its own signal: the run's signal (cancellation, the deadline) composed
|
|
5
|
+
* with the attempt's own time cap. `AbortSignal.any` does this natively, but not in every browser this library
|
|
6
|
+
* runs in (design §3.1), so the composition is ours: small, and leak-free — every listener it adds to an input
|
|
7
|
+
* is removed the moment it aborts or is disposed, so a long run of attempts leaves nothing on the run's signal.
|
|
8
|
+
*/
|
|
9
|
+
/** A composed signal and the one call that releases its inputs. */
|
|
10
|
+
export interface ComposedSignal {
|
|
11
|
+
readonly signal: AbortSignal;
|
|
12
|
+
/** Remove every listener this composition added to its inputs. Idempotent. */
|
|
13
|
+
dispose(): void;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Compose `inputs` (undefined entries ignored): the result aborts with the reason of the first input to abort,
|
|
17
|
+
* or at once with the reason of an input that already has. Call `dispose()` when the attempt ends.
|
|
18
|
+
*/
|
|
19
|
+
export declare function anySignal(inputs: ReadonlyArray<AbortSignal | undefined>): ComposedSignal;
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* attempt/anySignal.ts — one signal that aborts when ANY of its inputs does.
|
|
3
|
+
*
|
|
4
|
+
* The attempt runner gives each attempt its own signal: the run's signal (cancellation, the deadline) composed
|
|
5
|
+
* with the attempt's own time cap. `AbortSignal.any` does this natively, but not in every browser this library
|
|
6
|
+
* runs in (design §3.1), so the composition is ours: small, and leak-free — every listener it adds to an input
|
|
7
|
+
* is removed the moment it aborts or is disposed, so a long run of attempts leaves nothing on the run's signal.
|
|
8
|
+
*/
|
|
9
|
+
/**
|
|
10
|
+
* Compose `inputs` (undefined entries ignored): the result aborts with the reason of the first input to abort,
|
|
11
|
+
* or at once with the reason of an input that already has. Call `dispose()` when the attempt ends.
|
|
12
|
+
*/
|
|
13
|
+
export function anySignal(inputs) {
|
|
14
|
+
const controller = new AbortController();
|
|
15
|
+
const signals = inputs.filter((s) => s !== undefined);
|
|
16
|
+
const already = signals.find((s) => s.aborted);
|
|
17
|
+
if (already) {
|
|
18
|
+
controller.abort(already.reason);
|
|
19
|
+
return { signal: controller.signal, dispose: () => undefined };
|
|
20
|
+
}
|
|
21
|
+
let listening = true;
|
|
22
|
+
const listeners = signals.map((source) => {
|
|
23
|
+
const onAbort = () => {
|
|
24
|
+
release();
|
|
25
|
+
controller.abort(source.reason);
|
|
26
|
+
};
|
|
27
|
+
source.addEventListener('abort', onAbort);
|
|
28
|
+
return { source, onAbort };
|
|
29
|
+
});
|
|
30
|
+
function release() {
|
|
31
|
+
if (!listening)
|
|
32
|
+
return;
|
|
33
|
+
listening = false;
|
|
34
|
+
for (const { source, onAbort } of listeners)
|
|
35
|
+
source.removeEventListener('abort', onAbort);
|
|
36
|
+
}
|
|
37
|
+
return { signal: controller.signal, dispose: release };
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW55U2lnbmFsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9hdHRlbXB0L2FueVNpZ25hbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7OztHQU9HO0FBU0g7OztHQUdHO0FBQ0gsTUFBTSxVQUFVLFNBQVMsQ0FBQyxNQUE4QztJQUN0RSxNQUFNLFVBQVUsR0FBRyxJQUFJLGVBQWUsRUFBRSxDQUFDO0lBQ3pDLE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQW9CLEVBQUUsQ0FBQyxDQUFDLEtBQUssU0FBUyxDQUFDLENBQUM7SUFDeEUsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQy9DLElBQUksT0FBTyxFQUFFLENBQUM7UUFDWixVQUFVLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNqQyxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsQ0FBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxDQUFDLFNBQVMsRUFBRSxDQUFDO0lBQ2pFLENBQUM7SUFFRCxJQUFJLFNBQVMsR0FBRyxJQUFJLENBQUM7SUFDckIsTUFBTSxTQUFTLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFO1FBQ3ZDLE1BQU0sT0FBTyxHQUFHLEdBQUcsRUFBRTtZQUNuQixPQUFPLEVBQUUsQ0FBQztZQUNWLFVBQVUsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ2xDLENBQUMsQ0FBQztRQUNGLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDMUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsQ0FBQztJQUM3QixDQUFDLENBQUMsQ0FBQztJQUNILFNBQVMsT0FBTztRQUNkLElBQUksQ0FBQyxTQUFTO1lBQUUsT0FBTztRQUN2QixTQUFTLEdBQUcsS0FBSyxDQUFDO1FBQ2xCLEtBQUssTUFBTSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsSUFBSSxTQUFTO1lBQUUsTUFBTSxDQUFDLG1CQUFtQixDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztJQUM1RixDQUFDO0lBQ0QsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQztBQUN6RCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBhdHRlbXB0L2FueVNpZ25hbC50cyDigJQgb25lIHNpZ25hbCB0aGF0IGFib3J0cyB3aGVuIEFOWSBvZiBpdHMgaW5wdXRzIGRvZXMuXG4gKlxuICogVGhlIGF0dGVtcHQgcnVubmVyIGdpdmVzIGVhY2ggYXR0ZW1wdCBpdHMgb3duIHNpZ25hbDogdGhlIHJ1bidzIHNpZ25hbCAoY2FuY2VsbGF0aW9uLCB0aGUgZGVhZGxpbmUpIGNvbXBvc2VkXG4gKiB3aXRoIHRoZSBhdHRlbXB0J3Mgb3duIHRpbWUgY2FwLiBgQWJvcnRTaWduYWwuYW55YCBkb2VzIHRoaXMgbmF0aXZlbHksIGJ1dCBub3QgaW4gZXZlcnkgYnJvd3NlciB0aGlzIGxpYnJhcnlcbiAqIHJ1bnMgaW4gKGRlc2lnbiDCpzMuMSksIHNvIHRoZSBjb21wb3NpdGlvbiBpcyBvdXJzOiBzbWFsbCwgYW5kIGxlYWstZnJlZSDigJQgZXZlcnkgbGlzdGVuZXIgaXQgYWRkcyB0byBhbiBpbnB1dFxuICogaXMgcmVtb3ZlZCB0aGUgbW9tZW50IGl0IGFib3J0cyBvciBpcyBkaXNwb3NlZCwgc28gYSBsb25nIHJ1biBvZiBhdHRlbXB0cyBsZWF2ZXMgbm90aGluZyBvbiB0aGUgcnVuJ3Mgc2lnbmFsLlxuICovXG5cbi8qKiBBIGNvbXBvc2VkIHNpZ25hbCBhbmQgdGhlIG9uZSBjYWxsIHRoYXQgcmVsZWFzZXMgaXRzIGlucHV0cy4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29tcG9zZWRTaWduYWwge1xuICByZWFkb25seSBzaWduYWw6IEFib3J0U2lnbmFsO1xuICAvKiogUmVtb3ZlIGV2ZXJ5IGxpc3RlbmVyIHRoaXMgY29tcG9zaXRpb24gYWRkZWQgdG8gaXRzIGlucHV0cy4gSWRlbXBvdGVudC4gKi9cbiAgZGlzcG9zZSgpOiB2b2lkO1xufVxuXG4vKipcbiAqIENvbXBvc2UgYGlucHV0c2AgKHVuZGVmaW5lZCBlbnRyaWVzIGlnbm9yZWQpOiB0aGUgcmVzdWx0IGFib3J0cyB3aXRoIHRoZSByZWFzb24gb2YgdGhlIGZpcnN0IGlucHV0IHRvIGFib3J0LFxuICogb3IgYXQgb25jZSB3aXRoIHRoZSByZWFzb24gb2YgYW4gaW5wdXQgdGhhdCBhbHJlYWR5IGhhcy4gQ2FsbCBgZGlzcG9zZSgpYCB3aGVuIHRoZSBhdHRlbXB0IGVuZHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhbnlTaWduYWwoaW5wdXRzOiBSZWFkb25seUFycmF5PEFib3J0U2lnbmFsIHwgdW5kZWZpbmVkPik6IENvbXBvc2VkU2lnbmFsIHtcbiAgY29uc3QgY29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcbiAgY29uc3Qgc2lnbmFscyA9IGlucHV0cy5maWx0ZXIoKHMpOiBzIGlzIEFib3J0U2lnbmFsID0+IHMgIT09IHVuZGVmaW5lZCk7XG4gIGNvbnN0IGFscmVhZHkgPSBzaWduYWxzLmZpbmQoKHMpID0+IHMuYWJvcnRlZCk7XG4gIGlmIChhbHJlYWR5KSB7XG4gICAgY29udHJvbGxlci5hYm9ydChhbHJlYWR5LnJlYXNvbik7XG4gICAgcmV0dXJuIHsgc2lnbmFsOiBjb250cm9sbGVyLnNpZ25hbCwgZGlzcG9zZTogKCkgPT4gdW5kZWZpbmVkIH07XG4gIH1cblxuICBsZXQgbGlzdGVuaW5nID0gdHJ1ZTtcbiAgY29uc3QgbGlzdGVuZXJzID0gc2lnbmFscy5tYXAoKHNvdXJjZSkgPT4ge1xuICAgIGNvbnN0IG9uQWJvcnQgPSAoKSA9PiB7XG4gICAgICByZWxlYXNlKCk7XG4gICAgICBjb250cm9sbGVyLmFib3J0KHNvdXJjZS5yZWFzb24pO1xuICAgIH07XG4gICAgc291cmNlLmFkZEV2ZW50TGlzdGVuZXIoJ2Fib3J0Jywgb25BYm9ydCk7XG4gICAgcmV0dXJuIHsgc291cmNlLCBvbkFib3J0IH07XG4gIH0pO1xuICBmdW5jdGlvbiByZWxlYXNlKCk6IHZvaWQge1xuICAgIGlmICghbGlzdGVuaW5nKSByZXR1cm47XG4gICAgbGlzdGVuaW5nID0gZmFsc2U7XG4gICAgZm9yIChjb25zdCB7IHNvdXJjZSwgb25BYm9ydCB9IG9mIGxpc3RlbmVycykgc291cmNlLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Fib3J0Jywgb25BYm9ydCk7XG4gIH1cbiAgcmV0dXJuIHsgc2lnbmFsOiBjb250cm9sbGVyLnNpZ25hbCwgZGlzcG9zZTogcmVsZWFzZSB9O1xufVxuIl19
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* attempt/call.ts — a call made INSIDE a stage attempt: `scope.$call(target, fn, policy?)` (design §3.6, §3.8,
|
|
3
|
+
* packet P2).
|
|
4
|
+
*
|
|
5
|
+
* The same loop as a stage's retry (`runAttempts`, law 1), kind `'call'`, its `target` on every record — and a
|
|
6
|
+
* record even for a single call (`attempts: 1`): timing and outcome evidence with no retry. Its series is the
|
|
7
|
+
* call level of foottrace's attempt-id grammar ({@link callSeries}).
|
|
8
|
+
*
|
|
9
|
+
* THE LAW — a call lives within the attempt that made it. The host (the stage's scope) hands it that attempt's
|
|
10
|
+
* signal and its end as the call's deadline, so the call is capped by the time its stage attempt has left, and is
|
|
11
|
+
* cut when the stage attempt is cut (a time limit, so `'timeout'`; a cancellation, so `'aborted'`); and an `ended`
|
|
12
|
+
* signal that aborts when the attempt is over however it ended (it returned, threw, or its frame committed), so a
|
|
13
|
+
* call never outlives it. Following the P1b fence:
|
|
14
|
+
* - the record of a call attempt cut BY its stage attempt's own abort lands — the cut is evidence;
|
|
15
|
+
* - any other record that arrives once the stage attempt is over is REFUSED: noted by name (`host.refused`), never
|
|
16
|
+
* kept, never fired; the call stops (its in-flight attempt is cut, a wait ends) and no further attempt of an
|
|
17
|
+
* outside call starts — and the library-made rejection of such an orphan never surfaces as an unhandled one;
|
|
18
|
+
* - a call never starts under a signal already aborted, nor past its deadline while that signal is still due (a
|
|
19
|
+
* busy event loop fires timers late): no attempt, no record — the host's signal is its ONE deadline source.
|
|
20
|
+
* What the call's function does after its attempt ended cannot be trapped — it should RETURN its answer, not write
|
|
21
|
+
* the stage's scope (the scope's own fence still refuses a write from an ended stage attempt).
|
|
22
|
+
*
|
|
23
|
+
* A LEAF of the engine (L5): the host is a port, so nothing here names the scope.
|
|
24
|
+
*/
|
|
25
|
+
import type { StructuredErrorInfo } from '../errors/errorInfo.js';
|
|
26
|
+
import type { EffectTarget } from './effect.js';
|
|
27
|
+
import type { AttemptContext, AttemptRecord, ObservedAttempt, RetryPolicy } from './types.js';
|
|
28
|
+
/**
|
|
29
|
+
* The series of the `ordinal`-th call (1-based) made during attempt `stageAttempt` of the stage execution
|
|
30
|
+
* `runtimeStageId`: `<runtimeStageId>@<n>.<k>` — so the id of the call's attempt `m` is `<series>@<m>`, foottrace's
|
|
31
|
+
* `buildAttemptId(runtimeStageId, n, { ordinal: k, attempt: m })` (design §3.4). Written here, in this one place,
|
|
32
|
+
* until the engine adopts foottrace 1.1.0's codec (P6); the bytes are the grammar's.
|
|
33
|
+
*/
|
|
34
|
+
export declare function callSeries(runtimeStageId: string, stageAttempt: number, ordinal: number): string;
|
|
35
|
+
/** What the attempt that makes a call gives it — the scope implements it. */
|
|
36
|
+
export interface CallHost {
|
|
37
|
+
/**
|
|
38
|
+
* The call's series ({@link callSeries}) — asked once, only when the call starts, so a call refused before it
|
|
39
|
+
* starts takes no ordinal and leaves no gap.
|
|
40
|
+
*/
|
|
41
|
+
openSeries(): string;
|
|
42
|
+
/**
|
|
43
|
+
* The stage attempt's signal: the run's cancellation, the run's deadline and the attempt's own cap. When given, it
|
|
44
|
+
* is the call's ONE deadline source — it must abort at {@link deadline}, with a time-limit reason
|
|
45
|
+
* (`deadline.ts · markTimeLimit` / `deadlineReason`); the call arms no timer of its own.
|
|
46
|
+
*/
|
|
47
|
+
readonly signal?: AbortSignal;
|
|
48
|
+
/**
|
|
49
|
+
* When the stage attempt must end, epoch ms — the call's deadline, capping each attempt by the time left. Absent
|
|
50
|
+
* for an uncapped attempt. Without a {@link signal}, the call arms the one timer that ends it here.
|
|
51
|
+
*/
|
|
52
|
+
readonly deadline?: number;
|
|
53
|
+
/** The clock (default `Date.now`). */
|
|
54
|
+
readonly now?: () => number;
|
|
55
|
+
/**
|
|
56
|
+
* Aborts when the attempt that makes the call is over — however it ended — and when its frame commits: the call
|
|
57
|
+
* stops (its in-flight attempt is cut, a wait ends, no attempt follows) and its records are refused. No call
|
|
58
|
+
* outlives the attempt that made it.
|
|
59
|
+
*/
|
|
60
|
+
readonly ended?: AbortSignal;
|
|
61
|
+
/**
|
|
62
|
+
* May a record of the call land on the stage now? `cut`: the call attempt was ended BY the stage attempt's own
|
|
63
|
+
* end, so its record is the evidence of that cut.
|
|
64
|
+
*/
|
|
65
|
+
admits(cut: boolean): boolean;
|
|
66
|
+
/** The served form of an attempt's error — the run's redaction rule. */
|
|
67
|
+
serve(error: unknown): StructuredErrorInfo;
|
|
68
|
+
/** A record that may land: onto the stage, and the run's `onAttempt`. */
|
|
69
|
+
report(record: AttemptRecord, structuredError: StructuredErrorInfo | undefined): void;
|
|
70
|
+
/** A record that may not — the call outlived the attempt that made it. A name is noted; nothing is kept. */
|
|
71
|
+
refused(): void;
|
|
72
|
+
/**
|
|
73
|
+
* The outside system the call touches and its key (P3) — admitted at the call (`effect.ts · callTouches`), the
|
|
74
|
+
* recorded key served under the run's rule. Every record then carries its `effect`, and a series ended without an answer after an attempt of unknown
|
|
75
|
+
* effect rejects with `UnknownEffectError`.
|
|
76
|
+
*/
|
|
77
|
+
readonly effect?: EffectTarget;
|
|
78
|
+
/** An observed report made through the call's own attempt context (`ended`: that call attempt was over). */
|
|
79
|
+
observe(report: ObservedAttempt, at: {
|
|
80
|
+
readonly attempt: number;
|
|
81
|
+
readonly ended: boolean;
|
|
82
|
+
}): void;
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Run `fn` as the call `target` under `policy` (already admitted — `policy.ts · admitCallPolicy`) for `host`.
|
|
86
|
+
* Resolves with the answer, or rejects with the last attempt's own error.
|
|
87
|
+
*/
|
|
88
|
+
export declare function runCall<T>(target: string, fn: (attempt: AttemptContext) => Promise<T> | T, policy: RetryPolicy, host: CallHost): Promise<T>;
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* attempt/call.ts — a call made INSIDE a stage attempt: `scope.$call(target, fn, policy?)` (design §3.6, §3.8,
|
|
3
|
+
* packet P2).
|
|
4
|
+
*
|
|
5
|
+
* The same loop as a stage's retry (`runAttempts`, law 1), kind `'call'`, its `target` on every record — and a
|
|
6
|
+
* record even for a single call (`attempts: 1`): timing and outcome evidence with no retry. Its series is the
|
|
7
|
+
* call level of foottrace's attempt-id grammar ({@link callSeries}).
|
|
8
|
+
*
|
|
9
|
+
* THE LAW — a call lives within the attempt that made it. The host (the stage's scope) hands it that attempt's
|
|
10
|
+
* signal and its end as the call's deadline, so the call is capped by the time its stage attempt has left, and is
|
|
11
|
+
* cut when the stage attempt is cut (a time limit, so `'timeout'`; a cancellation, so `'aborted'`); and an `ended`
|
|
12
|
+
* signal that aborts when the attempt is over however it ended (it returned, threw, or its frame committed), so a
|
|
13
|
+
* call never outlives it. Following the P1b fence:
|
|
14
|
+
* - the record of a call attempt cut BY its stage attempt's own abort lands — the cut is evidence;
|
|
15
|
+
* - any other record that arrives once the stage attempt is over is REFUSED: noted by name (`host.refused`), never
|
|
16
|
+
* kept, never fired; the call stops (its in-flight attempt is cut, a wait ends) and no further attempt of an
|
|
17
|
+
* outside call starts — and the library-made rejection of such an orphan never surfaces as an unhandled one;
|
|
18
|
+
* - a call never starts under a signal already aborted, nor past its deadline while that signal is still due (a
|
|
19
|
+
* busy event loop fires timers late): no attempt, no record — the host's signal is its ONE deadline source.
|
|
20
|
+
* What the call's function does after its attempt ended cannot be trapped — it should RETURN its answer, not write
|
|
21
|
+
* the stage's scope (the scope's own fence still refuses a write from an ended stage attempt).
|
|
22
|
+
*
|
|
23
|
+
* A LEAF of the engine (L5): the host is a port, so nothing here names the scope.
|
|
24
|
+
*/
|
|
25
|
+
import { anySignal } from './anySignal.js';
|
|
26
|
+
import { armDeadline } from './deadline.js';
|
|
27
|
+
import { runAttempts } from './runner.js';
|
|
28
|
+
/**
|
|
29
|
+
* The series of the `ordinal`-th call (1-based) made during attempt `stageAttempt` of the stage execution
|
|
30
|
+
* `runtimeStageId`: `<runtimeStageId>@<n>.<k>` — so the id of the call's attempt `m` is `<series>@<m>`, foottrace's
|
|
31
|
+
* `buildAttemptId(runtimeStageId, n, { ordinal: k, attempt: m })` (design §3.4). Written here, in this one place,
|
|
32
|
+
* until the engine adopts foottrace 1.1.0's codec (P6); the bytes are the grammar's.
|
|
33
|
+
*/
|
|
34
|
+
export function callSeries(runtimeStageId, stageAttempt, ordinal) {
|
|
35
|
+
return `${runtimeStageId}@${stageAttempt}.${ordinal}`;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Run `fn` as the call `target` under `policy` (already admitted — `policy.ts · admitCallPolicy`) for `host`.
|
|
39
|
+
* Resolves with the answer, or rejects with the last attempt's own error.
|
|
40
|
+
*/
|
|
41
|
+
export function runCall(target, fn, policy, host) {
|
|
42
|
+
const hostSignal = host.signal;
|
|
43
|
+
const now = host.now ?? Date.now;
|
|
44
|
+
// Started under an aborted signal, or after the attempt that makes it ended: no attempt, no record.
|
|
45
|
+
for (const signal of [hostSignal, host.ended])
|
|
46
|
+
if (signal?.aborted)
|
|
47
|
+
return Promise.reject(signal.reason);
|
|
48
|
+
const stop = new AbortController();
|
|
49
|
+
// ONE deadline source. A host's signal aborts at the host's deadline (its attempt's cap, or the run's deadline),
|
|
50
|
+
// so a second timer for the same instant could only race it — and, firing first, end the call with a reason of
|
|
51
|
+
// its own and fail the stage instead of timing it out. A host with a deadline and no signal gets the one timer.
|
|
52
|
+
const own = hostSignal === undefined
|
|
53
|
+
? armDeadline(undefined, host.deadline, lateCallMessage(target, undefined, 'ran out of time'), now)
|
|
54
|
+
: undefined;
|
|
55
|
+
const composed = anySignal([hostSignal, host.ended, own?.signal, stop.signal]);
|
|
56
|
+
// An orphan — a call still running when the attempt that made it ended — is stopped by the library, so its
|
|
57
|
+
// rejection must not surface as an unhandled one; whoever awaits it still gets it.
|
|
58
|
+
let result;
|
|
59
|
+
const quiet = () => {
|
|
60
|
+
result?.catch(() => undefined);
|
|
61
|
+
};
|
|
62
|
+
host.ended?.addEventListener('abort', quiet, { once: true });
|
|
63
|
+
const release = () => {
|
|
64
|
+
host.ended?.removeEventListener('abort', quiet);
|
|
65
|
+
own?.dispose();
|
|
66
|
+
composed.dispose();
|
|
67
|
+
};
|
|
68
|
+
if (composed.signal.aborted) {
|
|
69
|
+
release();
|
|
70
|
+
return Promise.reject(composed.signal.reason);
|
|
71
|
+
}
|
|
72
|
+
// Past the deadline while its signal is still due (a busy event loop fires timers late): nothing is sent — the
|
|
73
|
+
// call ends, with no record, when that signal aborts.
|
|
74
|
+
if (host.deadline !== undefined && now() >= host.deadline) {
|
|
75
|
+
result = new Promise((_resolve, reject) => {
|
|
76
|
+
composed.signal.addEventListener('abort', () => {
|
|
77
|
+
release();
|
|
78
|
+
reject(composed.signal.reason);
|
|
79
|
+
}, { once: true });
|
|
80
|
+
});
|
|
81
|
+
return result;
|
|
82
|
+
}
|
|
83
|
+
const seriesName = host.openSeries();
|
|
84
|
+
/** Call attempts ended BY the stage attempt's end — their records are the evidence of the cut. */
|
|
85
|
+
const cut = new Set();
|
|
86
|
+
const ended = () => new Error(lateCallMessage(target, seriesName, 'cannot continue'));
|
|
87
|
+
const series = runAttempts((_attempt, context) => {
|
|
88
|
+
// The attempt that made this call is over: no further attempt of an outside call starts.
|
|
89
|
+
if (!host.admits(false)) {
|
|
90
|
+
const reason = ended();
|
|
91
|
+
stop.abort(reason);
|
|
92
|
+
throw reason;
|
|
93
|
+
}
|
|
94
|
+
return fn(context);
|
|
95
|
+
}, policy, {
|
|
96
|
+
series: seriesName,
|
|
97
|
+
kind: 'call',
|
|
98
|
+
target,
|
|
99
|
+
...(host.effect !== undefined && { effect: host.effect }),
|
|
100
|
+
signal: composed.signal,
|
|
101
|
+
...(host.deadline !== undefined && { deadline: host.deadline }),
|
|
102
|
+
now,
|
|
103
|
+
serve: (error) => host.serve(error),
|
|
104
|
+
// Synchronous at the abort: the stage attempt's signal aborting is what cut this call attempt.
|
|
105
|
+
onAbandon: (attempt) => {
|
|
106
|
+
if (hostSignal?.aborted)
|
|
107
|
+
cut.add(attempt);
|
|
108
|
+
},
|
|
109
|
+
onAttempt: (record, structuredError) => {
|
|
110
|
+
if (host.admits(cut.has(record.attempt))) {
|
|
111
|
+
host.report(record, structuredError);
|
|
112
|
+
return;
|
|
113
|
+
}
|
|
114
|
+
host.refused();
|
|
115
|
+
// Nothing follows a refused record: a wait ends now and the series stops `aborted`.
|
|
116
|
+
if (!stop.signal.aborted)
|
|
117
|
+
stop.abort(ended());
|
|
118
|
+
},
|
|
119
|
+
observe: (report, at) => host.observe(report, at),
|
|
120
|
+
});
|
|
121
|
+
result = series.finally(release);
|
|
122
|
+
return result;
|
|
123
|
+
}
|
|
124
|
+
/** Why a call stopped or could not go on — its target and series are names; no value is in the message. */
|
|
125
|
+
function lateCallMessage(target, series, what) {
|
|
126
|
+
return (`[footprint] $call "${target}"${series === undefined ? '' : ` (${series})`} ${what}: the attempt that made this ` +
|
|
127
|
+
'call has ended — no further attempt of it starts, and nothing it records lands on the stage.');
|
|
128
|
+
}
|
|
129
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvYXR0ZW1wdC9jYWxsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXVCRztBQUdILE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzQyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTVDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFHMUM7Ozs7O0dBS0c7QUFDSCxNQUFNLFVBQVUsVUFBVSxDQUFDLGNBQXNCLEVBQUUsWUFBb0IsRUFBRSxPQUFlO0lBQ3RGLE9BQU8sR0FBRyxjQUFjLElBQUksWUFBWSxJQUFJLE9BQU8sRUFBRSxDQUFDO0FBQ3hELENBQUM7QUFpREQ7OztHQUdHO0FBQ0gsTUFBTSxVQUFVLE9BQU8sQ0FDckIsTUFBYyxFQUNkLEVBQStDLEVBQy9DLE1BQW1CLEVBQ25CLElBQWM7SUFFZCxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO0lBQy9CLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQztJQUNqQyxvR0FBb0c7SUFDcEcsS0FBSyxNQUFNLE1BQU0sSUFBSSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDO1FBQUUsSUFBSSxNQUFNLEVBQUUsT0FBTztZQUFFLE9BQU8sT0FBTyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDekcsTUFBTSxJQUFJLEdBQUcsSUFBSSxlQUFlLEVBQUUsQ0FBQztJQUNuQyxpSEFBaUg7SUFDakgsK0dBQStHO0lBQy9HLGdIQUFnSDtJQUNoSCxNQUFNLEdBQUcsR0FDUCxVQUFVLEtBQUssU0FBUztRQUN0QixDQUFDLENBQUMsV0FBVyxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLGVBQWUsQ0FBQyxNQUFNLEVBQUUsU0FBUyxFQUFFLGlCQUFpQixDQUFDLEVBQUUsR0FBRyxDQUFDO1FBQ25HLENBQUMsQ0FBQyxTQUFTLENBQUM7SUFDaEIsTUFBTSxRQUFRLEdBQUcsU0FBUyxDQUFDLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUMvRSwyR0FBMkc7SUFDM0csbUZBQW1GO0lBQ25GLElBQUksTUFBOEIsQ0FBQztJQUNuQyxNQUFNLEtBQUssR0FBRyxHQUFHLEVBQUU7UUFDakIsTUFBTSxFQUFFLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUNqQyxDQUFDLENBQUM7SUFDRixJQUFJLENBQUMsS0FBSyxFQUFFLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUUsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUM3RCxNQUFNLE9BQU8sR0FBRyxHQUFHLEVBQUU7UUFDbkIsSUFBSSxDQUFDLEtBQUssRUFBRSxtQkFBbUIsQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDaEQsR0FBRyxFQUFFLE9BQU8sRUFBRSxDQUFDO1FBQ2YsUUFBUSxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ3JCLENBQUMsQ0FBQztJQUNGLElBQUksUUFBUSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUM1QixPQUFPLEVBQUUsQ0FBQztRQUNWLE9BQU8sT0FBTyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ2hELENBQUM7SUFDRCwrR0FBK0c7SUFDL0csc0RBQXNEO0lBQ3RELElBQUksSUFBSSxDQUFDLFFBQVEsS0FBSyxTQUFTLElBQUksR0FBRyxFQUFFLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQzFELE1BQU0sR0FBRyxJQUFJLE9BQU8sQ0FBSSxDQUFDLFFBQVEsRUFBRSxNQUFNLEVBQUUsRUFBRTtZQUMzQyxRQUFRLENBQUMsTUFBTSxDQUFDLGdCQUFnQixDQUM5QixPQUFPLEVBQ1AsR0FBRyxFQUFFO2dCQUNILE9BQU8sRUFBRSxDQUFDO2dCQUNWLE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ2pDLENBQUMsRUFDRCxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FDZixDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQUM7UUFDSCxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDO0lBRUQsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO0lBQ3JDLGtHQUFrRztJQUNsRyxNQUFNLEdBQUcsR0FBRyxJQUFJLEdBQUcsRUFBVSxDQUFDO0lBQzlCLE1BQU0sS0FBSyxHQUFHLEdBQUcsRUFBRSxDQUFDLElBQUksS0FBSyxDQUFDLGVBQWUsQ0FBQyxNQUFNLEVBQUUsVUFBVSxFQUFFLGlCQUFpQixDQUFDLENBQUMsQ0FBQztJQUN0RixNQUFNLE1BQU0sR0FBRyxXQUFXLENBQ3hCLENBQUMsUUFBUSxFQUFFLE9BQU8sRUFBRSxFQUFFO1FBQ3BCLHlGQUF5RjtRQUN6RixJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ3hCLE1BQU0sTUFBTSxHQUFHLEtBQUssRUFBRSxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDbkIsTUFBTSxNQUFNLENBQUM7UUFDZixDQUFDO1FBQ0QsT0FBTyxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDckIsQ0FBQyxFQUNELE1BQU0sRUFDTjtRQUNFLE1BQU0sRUFBRSxVQUFVO1FBQ2xCLElBQUksRUFBRSxNQUFNO1FBQ1osTUFBTTtRQUNOLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxLQUFLLFNBQVMsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDekQsTUFBTSxFQUFFLFFBQVEsQ0FBQyxNQUFNO1FBQ3ZCLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxLQUFLLFNBQVMsSUFBSSxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDL0QsR0FBRztRQUNILEtBQUssRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUM7UUFDbkMsK0ZBQStGO1FBQy9GLFNBQVMsRUFBRSxDQUFDLE9BQU8sRUFBRSxFQUFFO1lBQ3JCLElBQUksVUFBVSxFQUFFLE9BQU87Z0JBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUM1QyxDQUFDO1FBQ0QsU0FBUyxFQUFFLENBQUMsTUFBTSxFQUFFLGVBQWUsRUFBRSxFQUFFO1lBQ3JDLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFLENBQUM7Z0JBQ3pDLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLGVBQWUsQ0FBQyxDQUFDO2dCQUNyQyxPQUFPO1lBQ1QsQ0FBQztZQUNELElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNmLG9GQUFvRjtZQUNwRixJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPO2dCQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUNoRCxDQUFDO1FBQ0QsT0FBTyxFQUFFLENBQUMsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDO0tBQ2xELENBQ0YsQ0FBQztJQUNGLE1BQU0sR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ2pDLE9BQU8sTUFBTSxDQUFDO0FBQ2hCLENBQUM7QUFFRCwyR0FBMkc7QUFDM0csU0FBUyxlQUFlLENBQUMsTUFBYyxFQUFFLE1BQTBCLEVBQUUsSUFBWTtJQUMvRSxPQUFPLENBQ0wsc0JBQXNCLE1BQU0sSUFBSSxNQUFNLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssTUFBTSxHQUFHLElBQUksSUFBSSwrQkFBK0I7UUFDakgsOEZBQThGLENBQy9GLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBhdHRlbXB0L2NhbGwudHMg4oCUIGEgY2FsbCBtYWRlIElOU0lERSBhIHN0YWdlIGF0dGVtcHQ6IGBzY29wZS4kY2FsbCh0YXJnZXQsIGZuLCBwb2xpY3k/KWAgKGRlc2lnbiDCpzMuNiwgwqczLjgsXG4gKiBwYWNrZXQgUDIpLlxuICpcbiAqIFRoZSBzYW1lIGxvb3AgYXMgYSBzdGFnZSdzIHJldHJ5IChgcnVuQXR0ZW1wdHNgLCBsYXcgMSksIGtpbmQgYCdjYWxsJ2AsIGl0cyBgdGFyZ2V0YCBvbiBldmVyeSByZWNvcmQg4oCUIGFuZCBhXG4gKiByZWNvcmQgZXZlbiBmb3IgYSBzaW5nbGUgY2FsbCAoYGF0dGVtcHRzOiAxYCk6IHRpbWluZyBhbmQgb3V0Y29tZSBldmlkZW5jZSB3aXRoIG5vIHJldHJ5LiBJdHMgc2VyaWVzIGlzIHRoZVxuICogY2FsbCBsZXZlbCBvZiBmb290dHJhY2UncyBhdHRlbXB0LWlkIGdyYW1tYXIgKHtAbGluayBjYWxsU2VyaWVzfSkuXG4gKlxuICogVEhFIExBVyDigJQgYSBjYWxsIGxpdmVzIHdpdGhpbiB0aGUgYXR0ZW1wdCB0aGF0IG1hZGUgaXQuIFRoZSBob3N0ICh0aGUgc3RhZ2UncyBzY29wZSkgaGFuZHMgaXQgdGhhdCBhdHRlbXB0J3NcbiAqIHNpZ25hbCBhbmQgaXRzIGVuZCBhcyB0aGUgY2FsbCdzIGRlYWRsaW5lLCBzbyB0aGUgY2FsbCBpcyBjYXBwZWQgYnkgdGhlIHRpbWUgaXRzIHN0YWdlIGF0dGVtcHQgaGFzIGxlZnQsIGFuZCBpc1xuICogY3V0IHdoZW4gdGhlIHN0YWdlIGF0dGVtcHQgaXMgY3V0IChhIHRpbWUgbGltaXQsIHNvIGAndGltZW91dCdgOyBhIGNhbmNlbGxhdGlvbiwgc28gYCdhYm9ydGVkJ2ApOyBhbmQgYW4gYGVuZGVkYFxuICogc2lnbmFsIHRoYXQgYWJvcnRzIHdoZW4gdGhlIGF0dGVtcHQgaXMgb3ZlciBob3dldmVyIGl0IGVuZGVkIChpdCByZXR1cm5lZCwgdGhyZXcsIG9yIGl0cyBmcmFtZSBjb21taXR0ZWQpLCBzbyBhXG4gKiBjYWxsIG5ldmVyIG91dGxpdmVzIGl0LiBGb2xsb3dpbmcgdGhlIFAxYiBmZW5jZTpcbiAqICAgLSB0aGUgcmVjb3JkIG9mIGEgY2FsbCBhdHRlbXB0IGN1dCBCWSBpdHMgc3RhZ2UgYXR0ZW1wdCdzIG93biBhYm9ydCBsYW5kcyDigJQgdGhlIGN1dCBpcyBldmlkZW5jZTtcbiAqICAgLSBhbnkgb3RoZXIgcmVjb3JkIHRoYXQgYXJyaXZlcyBvbmNlIHRoZSBzdGFnZSBhdHRlbXB0IGlzIG92ZXIgaXMgUkVGVVNFRDogbm90ZWQgYnkgbmFtZSAoYGhvc3QucmVmdXNlZGApLCBuZXZlclxuICogICAgIGtlcHQsIG5ldmVyIGZpcmVkOyB0aGUgY2FsbCBzdG9wcyAoaXRzIGluLWZsaWdodCBhdHRlbXB0IGlzIGN1dCwgYSB3YWl0IGVuZHMpIGFuZCBubyBmdXJ0aGVyIGF0dGVtcHQgb2YgYW5cbiAqICAgICBvdXRzaWRlIGNhbGwgc3RhcnRzIOKAlCBhbmQgdGhlIGxpYnJhcnktbWFkZSByZWplY3Rpb24gb2Ygc3VjaCBhbiBvcnBoYW4gbmV2ZXIgc3VyZmFjZXMgYXMgYW4gdW5oYW5kbGVkIG9uZTtcbiAqICAgLSBhIGNhbGwgbmV2ZXIgc3RhcnRzIHVuZGVyIGEgc2lnbmFsIGFscmVhZHkgYWJvcnRlZCwgbm9yIHBhc3QgaXRzIGRlYWRsaW5lIHdoaWxlIHRoYXQgc2lnbmFsIGlzIHN0aWxsIGR1ZSAoYVxuICogICAgIGJ1c3kgZXZlbnQgbG9vcCBmaXJlcyB0aW1lcnMgbGF0ZSk6IG5vIGF0dGVtcHQsIG5vIHJlY29yZCDigJQgdGhlIGhvc3QncyBzaWduYWwgaXMgaXRzIE9ORSBkZWFkbGluZSBzb3VyY2UuXG4gKiBXaGF0IHRoZSBjYWxsJ3MgZnVuY3Rpb24gZG9lcyBhZnRlciBpdHMgYXR0ZW1wdCBlbmRlZCBjYW5ub3QgYmUgdHJhcHBlZCDigJQgaXQgc2hvdWxkIFJFVFVSTiBpdHMgYW5zd2VyLCBub3Qgd3JpdGVcbiAqIHRoZSBzdGFnZSdzIHNjb3BlICh0aGUgc2NvcGUncyBvd24gZmVuY2Ugc3RpbGwgcmVmdXNlcyBhIHdyaXRlIGZyb20gYW4gZW5kZWQgc3RhZ2UgYXR0ZW1wdCkuXG4gKlxuICogQSBMRUFGIG9mIHRoZSBlbmdpbmUgKEw1KTogdGhlIGhvc3QgaXMgYSBwb3J0LCBzbyBub3RoaW5nIGhlcmUgbmFtZXMgdGhlIHNjb3BlLlxuICovXG5cbmltcG9ydCB0eXBlIHsgU3RydWN0dXJlZEVycm9ySW5mbyB9IGZyb20gJy4uL2Vycm9ycy9lcnJvckluZm8uanMnO1xuaW1wb3J0IHsgYW55U2lnbmFsIH0gZnJvbSAnLi9hbnlTaWduYWwuanMnO1xuaW1wb3J0IHsgYXJtRGVhZGxpbmUgfSBmcm9tICcuL2RlYWRsaW5lLmpzJztcbmltcG9ydCB0eXBlIHsgRWZmZWN0VGFyZ2V0IH0gZnJvbSAnLi9lZmZlY3QuanMnO1xuaW1wb3J0IHsgcnVuQXR0ZW1wdHMgfSBmcm9tICcuL3J1bm5lci5qcyc7XG5pbXBvcnQgdHlwZSB7IEF0dGVtcHRDb250ZXh0LCBBdHRlbXB0UmVjb3JkLCBPYnNlcnZlZEF0dGVtcHQsIFJldHJ5UG9saWN5IH0gZnJvbSAnLi90eXBlcy5qcyc7XG5cbi8qKlxuICogVGhlIHNlcmllcyBvZiB0aGUgYG9yZGluYWxgLXRoIGNhbGwgKDEtYmFzZWQpIG1hZGUgZHVyaW5nIGF0dGVtcHQgYHN0YWdlQXR0ZW1wdGAgb2YgdGhlIHN0YWdlIGV4ZWN1dGlvblxuICogYHJ1bnRpbWVTdGFnZUlkYDogYDxydW50aW1lU3RhZ2VJZD5APG4+LjxrPmAg4oCUIHNvIHRoZSBpZCBvZiB0aGUgY2FsbCdzIGF0dGVtcHQgYG1gIGlzIGA8c2VyaWVzPkA8bT5gLCBmb290dHJhY2Unc1xuICogYGJ1aWxkQXR0ZW1wdElkKHJ1bnRpbWVTdGFnZUlkLCBuLCB7IG9yZGluYWw6IGssIGF0dGVtcHQ6IG0gfSlgIChkZXNpZ24gwqczLjQpLiBXcml0dGVuIGhlcmUsIGluIHRoaXMgb25lIHBsYWNlLFxuICogdW50aWwgdGhlIGVuZ2luZSBhZG9wdHMgZm9vdHRyYWNlIDEuMS4wJ3MgY29kZWMgKFA2KTsgdGhlIGJ5dGVzIGFyZSB0aGUgZ3JhbW1hcidzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY2FsbFNlcmllcyhydW50aW1lU3RhZ2VJZDogc3RyaW5nLCBzdGFnZUF0dGVtcHQ6IG51bWJlciwgb3JkaW5hbDogbnVtYmVyKTogc3RyaW5nIHtcbiAgcmV0dXJuIGAke3J1bnRpbWVTdGFnZUlkfUAke3N0YWdlQXR0ZW1wdH0uJHtvcmRpbmFsfWA7XG59XG5cbi8qKiBXaGF0IHRoZSBhdHRlbXB0IHRoYXQgbWFrZXMgYSBjYWxsIGdpdmVzIGl0IOKAlCB0aGUgc2NvcGUgaW1wbGVtZW50cyBpdC4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ2FsbEhvc3Qge1xuICAvKipcbiAgICogVGhlIGNhbGwncyBzZXJpZXMgKHtAbGluayBjYWxsU2VyaWVzfSkg4oCUIGFza2VkIG9uY2UsIG9ubHkgd2hlbiB0aGUgY2FsbCBzdGFydHMsIHNvIGEgY2FsbCByZWZ1c2VkIGJlZm9yZSBpdFxuICAgKiBzdGFydHMgdGFrZXMgbm8gb3JkaW5hbCBhbmQgbGVhdmVzIG5vIGdhcC5cbiAgICovXG4gIG9wZW5TZXJpZXMoKTogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIHN0YWdlIGF0dGVtcHQncyBzaWduYWw6IHRoZSBydW4ncyBjYW5jZWxsYXRpb24sIHRoZSBydW4ncyBkZWFkbGluZSBhbmQgdGhlIGF0dGVtcHQncyBvd24gY2FwLiBXaGVuIGdpdmVuLCBpdFxuICAgKiBpcyB0aGUgY2FsbCdzIE9ORSBkZWFkbGluZSBzb3VyY2Ug4oCUIGl0IG11c3QgYWJvcnQgYXQge0BsaW5rIGRlYWRsaW5lfSwgd2l0aCBhIHRpbWUtbGltaXQgcmVhc29uXG4gICAqIChgZGVhZGxpbmUudHMgwrcgbWFya1RpbWVMaW1pdGAgLyBgZGVhZGxpbmVSZWFzb25gKTsgdGhlIGNhbGwgYXJtcyBubyB0aW1lciBvZiBpdHMgb3duLlxuICAgKi9cbiAgcmVhZG9ubHkgc2lnbmFsPzogQWJvcnRTaWduYWw7XG4gIC8qKlxuICAgKiBXaGVuIHRoZSBzdGFnZSBhdHRlbXB0IG11c3QgZW5kLCBlcG9jaCBtcyDigJQgdGhlIGNhbGwncyBkZWFkbGluZSwgY2FwcGluZyBlYWNoIGF0dGVtcHQgYnkgdGhlIHRpbWUgbGVmdC4gQWJzZW50XG4gICAqIGZvciBhbiB1bmNhcHBlZCBhdHRlbXB0LiBXaXRob3V0IGEge0BsaW5rIHNpZ25hbH0sIHRoZSBjYWxsIGFybXMgdGhlIG9uZSB0aW1lciB0aGF0IGVuZHMgaXQgaGVyZS5cbiAgICovXG4gIHJlYWRvbmx5IGRlYWRsaW5lPzogbnVtYmVyO1xuICAvKiogVGhlIGNsb2NrIChkZWZhdWx0IGBEYXRlLm5vd2ApLiAqL1xuICByZWFkb25seSBub3c/OiAoKSA9PiBudW1iZXI7XG4gIC8qKlxuICAgKiBBYm9ydHMgd2hlbiB0aGUgYXR0ZW1wdCB0aGF0IG1ha2VzIHRoZSBjYWxsIGlzIG92ZXIg4oCUIGhvd2V2ZXIgaXQgZW5kZWQg4oCUIGFuZCB3aGVuIGl0cyBmcmFtZSBjb21taXRzOiB0aGUgY2FsbFxuICAgKiBzdG9wcyAoaXRzIGluLWZsaWdodCBhdHRlbXB0IGlzIGN1dCwgYSB3YWl0IGVuZHMsIG5vIGF0dGVtcHQgZm9sbG93cykgYW5kIGl0cyByZWNvcmRzIGFyZSByZWZ1c2VkLiBObyBjYWxsXG4gICAqIG91dGxpdmVzIHRoZSBhdHRlbXB0IHRoYXQgbWFkZSBpdC5cbiAgICovXG4gIHJlYWRvbmx5IGVuZGVkPzogQWJvcnRTaWduYWw7XG4gIC8qKlxuICAgKiBNYXkgYSByZWNvcmQgb2YgdGhlIGNhbGwgbGFuZCBvbiB0aGUgc3RhZ2Ugbm93PyBgY3V0YDogdGhlIGNhbGwgYXR0ZW1wdCB3YXMgZW5kZWQgQlkgdGhlIHN0YWdlIGF0dGVtcHQncyBvd25cbiAgICogZW5kLCBzbyBpdHMgcmVjb3JkIGlzIHRoZSBldmlkZW5jZSBvZiB0aGF0IGN1dC5cbiAgICovXG4gIGFkbWl0cyhjdXQ6IGJvb2xlYW4pOiBib29sZWFuO1xuICAvKiogVGhlIHNlcnZlZCBmb3JtIG9mIGFuIGF0dGVtcHQncyBlcnJvciDigJQgdGhlIHJ1bidzIHJlZGFjdGlvbiBydWxlLiAqL1xuICBzZXJ2ZShlcnJvcjogdW5rbm93bik6IFN0cnVjdHVyZWRFcnJvckluZm87XG4gIC8qKiBBIHJlY29yZCB0aGF0IG1heSBsYW5kOiBvbnRvIHRoZSBzdGFnZSwgYW5kIHRoZSBydW4ncyBgb25BdHRlbXB0YC4gKi9cbiAgcmVwb3J0KHJlY29yZDogQXR0ZW1wdFJlY29yZCwgc3RydWN0dXJlZEVycm9yOiBTdHJ1Y3R1cmVkRXJyb3JJbmZvIHwgdW5kZWZpbmVkKTogdm9pZDtcbiAgLyoqIEEgcmVjb3JkIHRoYXQgbWF5IG5vdCDigJQgdGhlIGNhbGwgb3V0bGl2ZWQgdGhlIGF0dGVtcHQgdGhhdCBtYWRlIGl0LiBBIG5hbWUgaXMgbm90ZWQ7IG5vdGhpbmcgaXMga2VwdC4gKi9cbiAgcmVmdXNlZCgpOiB2b2lkO1xuICAvKipcbiAgICogVGhlIG91dHNpZGUgc3lzdGVtIHRoZSBjYWxsIHRvdWNoZXMgYW5kIGl0cyBrZXkgKFAzKSDigJQgYWRtaXR0ZWQgYXQgdGhlIGNhbGwgKGBlZmZlY3QudHMgwrcgY2FsbFRvdWNoZXNgKSwgdGhlXG4gICAqIHJlY29yZGVkIGtleSBzZXJ2ZWQgdW5kZXIgdGhlIHJ1bidzIHJ1bGUuIEV2ZXJ5IHJlY29yZCB0aGVuIGNhcnJpZXMgaXRzIGBlZmZlY3RgLCBhbmQgYSBzZXJpZXMgZW5kZWQgd2l0aG91dCBhbiBhbnN3ZXIgYWZ0ZXIgYW4gYXR0ZW1wdCBvZiB1bmtub3duXG4gICAqIGVmZmVjdCByZWplY3RzIHdpdGggYFVua25vd25FZmZlY3RFcnJvcmAuXG4gICAqL1xuICByZWFkb25seSBlZmZlY3Q/OiBFZmZlY3RUYXJnZXQ7XG4gIC8qKiBBbiBvYnNlcnZlZCByZXBvcnQgbWFkZSB0aHJvdWdoIHRoZSBjYWxsJ3Mgb3duIGF0dGVtcHQgY29udGV4dCAoYGVuZGVkYDogdGhhdCBjYWxsIGF0dGVtcHQgd2FzIG92ZXIpLiAqL1xuICBvYnNlcnZlKHJlcG9ydDogT2JzZXJ2ZWRBdHRlbXB0LCBhdDogeyByZWFkb25seSBhdHRlbXB0OiBudW1iZXI7IHJlYWRvbmx5IGVuZGVkOiBib29sZWFuIH0pOiB2b2lkO1xufVxuXG4vKipcbiAqIFJ1biBgZm5gIGFzIHRoZSBjYWxsIGB0YXJnZXRgIHVuZGVyIGBwb2xpY3lgIChhbHJlYWR5IGFkbWl0dGVkIOKAlCBgcG9saWN5LnRzIMK3IGFkbWl0Q2FsbFBvbGljeWApIGZvciBgaG9zdGAuXG4gKiBSZXNvbHZlcyB3aXRoIHRoZSBhbnN3ZXIsIG9yIHJlamVjdHMgd2l0aCB0aGUgbGFzdCBhdHRlbXB0J3Mgb3duIGVycm9yLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcnVuQ2FsbDxUPihcbiAgdGFyZ2V0OiBzdHJpbmcsXG4gIGZuOiAoYXR0ZW1wdDogQXR0ZW1wdENvbnRleHQpID0+IFByb21pc2U8VD4gfCBULFxuICBwb2xpY3k6IFJldHJ5UG9saWN5LFxuICBob3N0OiBDYWxsSG9zdCxcbik6IFByb21pc2U8VD4ge1xuICBjb25zdCBob3N0U2lnbmFsID0gaG9zdC5zaWduYWw7XG4gIGNvbnN0IG5vdyA9IGhvc3Qubm93ID8/IERhdGUubm93O1xuICAvLyBTdGFydGVkIHVuZGVyIGFuIGFib3J0ZWQgc2lnbmFsLCBvciBhZnRlciB0aGUgYXR0ZW1wdCB0aGF0IG1ha2VzIGl0IGVuZGVkOiBubyBhdHRlbXB0LCBubyByZWNvcmQuXG4gIGZvciAoY29uc3Qgc2lnbmFsIG9mIFtob3N0U2lnbmFsLCBob3N0LmVuZGVkXSkgaWYgKHNpZ25hbD8uYWJvcnRlZCkgcmV0dXJuIFByb21pc2UucmVqZWN0KHNpZ25hbC5yZWFzb24pO1xuICBjb25zdCBzdG9wID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuICAvLyBPTkUgZGVhZGxpbmUgc291cmNlLiBBIGhvc3QncyBzaWduYWwgYWJvcnRzIGF0IHRoZSBob3N0J3MgZGVhZGxpbmUgKGl0cyBhdHRlbXB0J3MgY2FwLCBvciB0aGUgcnVuJ3MgZGVhZGxpbmUpLFxuICAvLyBzbyBhIHNlY29uZCB0aW1lciBmb3IgdGhlIHNhbWUgaW5zdGFudCBjb3VsZCBvbmx5IHJhY2UgaXQg4oCUIGFuZCwgZmlyaW5nIGZpcnN0LCBlbmQgdGhlIGNhbGwgd2l0aCBhIHJlYXNvbiBvZlxuICAvLyBpdHMgb3duIGFuZCBmYWlsIHRoZSBzdGFnZSBpbnN0ZWFkIG9mIHRpbWluZyBpdCBvdXQuIEEgaG9zdCB3aXRoIGEgZGVhZGxpbmUgYW5kIG5vIHNpZ25hbCBnZXRzIHRoZSBvbmUgdGltZXIuXG4gIGNvbnN0IG93biA9XG4gICAgaG9zdFNpZ25hbCA9PT0gdW5kZWZpbmVkXG4gICAgICA/IGFybURlYWRsaW5lKHVuZGVmaW5lZCwgaG9zdC5kZWFkbGluZSwgbGF0ZUNhbGxNZXNzYWdlKHRhcmdldCwgdW5kZWZpbmVkLCAncmFuIG91dCBvZiB0aW1lJyksIG5vdylcbiAgICAgIDogdW5kZWZpbmVkO1xuICBjb25zdCBjb21wb3NlZCA9IGFueVNpZ25hbChbaG9zdFNpZ25hbCwgaG9zdC5lbmRlZCwgb3duPy5zaWduYWwsIHN0b3Auc2lnbmFsXSk7XG4gIC8vIEFuIG9ycGhhbiDigJQgYSBjYWxsIHN0aWxsIHJ1bm5pbmcgd2hlbiB0aGUgYXR0ZW1wdCB0aGF0IG1hZGUgaXQgZW5kZWQg4oCUIGlzIHN0b3BwZWQgYnkgdGhlIGxpYnJhcnksIHNvIGl0c1xuICAvLyByZWplY3Rpb24gbXVzdCBub3Qgc3VyZmFjZSBhcyBhbiB1bmhhbmRsZWQgb25lOyB3aG9ldmVyIGF3YWl0cyBpdCBzdGlsbCBnZXRzIGl0LlxuICBsZXQgcmVzdWx0OiBQcm9taXNlPFQ+IHwgdW5kZWZpbmVkO1xuICBjb25zdCBxdWlldCA9ICgpID0+IHtcbiAgICByZXN1bHQ/LmNhdGNoKCgpID0+IHVuZGVmaW5lZCk7XG4gIH07XG4gIGhvc3QuZW5kZWQ/LmFkZEV2ZW50TGlzdGVuZXIoJ2Fib3J0JywgcXVpZXQsIHsgb25jZTogdHJ1ZSB9KTtcbiAgY29uc3QgcmVsZWFzZSA9ICgpID0+IHtcbiAgICBob3N0LmVuZGVkPy5yZW1vdmVFdmVudExpc3RlbmVyKCdhYm9ydCcsIHF1aWV0KTtcbiAgICBvd24/LmRpc3Bvc2UoKTtcbiAgICBjb21wb3NlZC5kaXNwb3NlKCk7XG4gIH07XG4gIGlmIChjb21wb3NlZC5zaWduYWwuYWJvcnRlZCkge1xuICAgIHJlbGVhc2UoKTtcbiAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoY29tcG9zZWQuc2lnbmFsLnJlYXNvbik7XG4gIH1cbiAgLy8gUGFzdCB0aGUgZGVhZGxpbmUgd2hpbGUgaXRzIHNpZ25hbCBpcyBzdGlsbCBkdWUgKGEgYnVzeSBldmVudCBsb29wIGZpcmVzIHRpbWVycyBsYXRlKTogbm90aGluZyBpcyBzZW50IOKAlCB0aGVcbiAgLy8gY2FsbCBlbmRzLCB3aXRoIG5vIHJlY29yZCwgd2hlbiB0aGF0IHNpZ25hbCBhYm9ydHMuXG4gIGlmIChob3N0LmRlYWRsaW5lICE9PSB1bmRlZmluZWQgJiYgbm93KCkgPj0gaG9zdC5kZWFkbGluZSkge1xuICAgIHJlc3VsdCA9IG5ldyBQcm9taXNlPFQ+KChfcmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBjb21wb3NlZC5zaWduYWwuYWRkRXZlbnRMaXN0ZW5lcihcbiAgICAgICAgJ2Fib3J0JyxcbiAgICAgICAgKCkgPT4ge1xuICAgICAgICAgIHJlbGVhc2UoKTtcbiAgICAgICAgICByZWplY3QoY29tcG9zZWQuc2lnbmFsLnJlYXNvbik7XG4gICAgICAgIH0sXG4gICAgICAgIHsgb25jZTogdHJ1ZSB9LFxuICAgICAgKTtcbiAgICB9KTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgY29uc3Qgc2VyaWVzTmFtZSA9IGhvc3Qub3BlblNlcmllcygpO1xuICAvKiogQ2FsbCBhdHRlbXB0cyBlbmRlZCBCWSB0aGUgc3RhZ2UgYXR0ZW1wdCdzIGVuZCDigJQgdGhlaXIgcmVjb3JkcyBhcmUgdGhlIGV2aWRlbmNlIG9mIHRoZSBjdXQuICovXG4gIGNvbnN0IGN1dCA9IG5ldyBTZXQ8bnVtYmVyPigpO1xuICBjb25zdCBlbmRlZCA9ICgpID0+IG5ldyBFcnJvcihsYXRlQ2FsbE1lc3NhZ2UodGFyZ2V0LCBzZXJpZXNOYW1lLCAnY2Fubm90IGNvbnRpbnVlJykpO1xuICBjb25zdCBzZXJpZXMgPSBydW5BdHRlbXB0czxUPihcbiAgICAoX2F0dGVtcHQsIGNvbnRleHQpID0+IHtcbiAgICAgIC8vIFRoZSBhdHRlbXB0IHRoYXQgbWFkZSB0aGlzIGNhbGwgaXMgb3Zlcjogbm8gZnVydGhlciBhdHRlbXB0IG9mIGFuIG91dHNpZGUgY2FsbCBzdGFydHMuXG4gICAgICBpZiAoIWhvc3QuYWRtaXRzKGZhbHNlKSkge1xuICAgICAgICBjb25zdCByZWFzb24gPSBlbmRlZCgpO1xuICAgICAgICBzdG9wLmFib3J0KHJlYXNvbik7XG4gICAgICAgIHRocm93IHJlYXNvbjtcbiAgICAgIH1cbiAgICAgIHJldHVybiBmbihjb250ZXh0KTtcbiAgICB9LFxuICAgIHBvbGljeSxcbiAgICB7XG4gICAgICBzZXJpZXM6IHNlcmllc05hbWUsXG4gICAgICBraW5kOiAnY2FsbCcsXG4gICAgICB0YXJnZXQsXG4gICAgICAuLi4oaG9zdC5lZmZlY3QgIT09IHVuZGVmaW5lZCAmJiB7IGVmZmVjdDogaG9zdC5lZmZlY3QgfSksXG4gICAgICBzaWduYWw6IGNvbXBvc2VkLnNpZ25hbCxcbiAgICAgIC4uLihob3N0LmRlYWRsaW5lICE9PSB1bmRlZmluZWQgJiYgeyBkZWFkbGluZTogaG9zdC5kZWFkbGluZSB9KSxcbiAgICAgIG5vdyxcbiAgICAgIHNlcnZlOiAoZXJyb3IpID0+IGhvc3Quc2VydmUoZXJyb3IpLFxuICAgICAgLy8gU3luY2hyb25vdXMgYXQgdGhlIGFib3J0OiB0aGUgc3RhZ2UgYXR0ZW1wdCdzIHNpZ25hbCBhYm9ydGluZyBpcyB3aGF0IGN1dCB0aGlzIGNhbGwgYXR0ZW1wdC5cbiAgICAgIG9uQWJhbmRvbjogKGF0dGVtcHQpID0+IHtcbiAgICAgICAgaWYgKGhvc3RTaWduYWw/LmFib3J0ZWQpIGN1dC5hZGQoYXR0ZW1wdCk7XG4gICAgICB9LFxuICAgICAgb25BdHRlbXB0OiAocmVjb3JkLCBzdHJ1Y3R1cmVkRXJyb3IpID0+IHtcbiAgICAgICAgaWYgKGhvc3QuYWRtaXRzKGN1dC5oYXMocmVjb3JkLmF0dGVtcHQpKSkge1xuICAgICAgICAgIGhvc3QucmVwb3J0KHJlY29yZCwgc3RydWN0dXJlZEVycm9yKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaG9zdC5yZWZ1c2VkKCk7XG4gICAgICAgIC8vIE5vdGhpbmcgZm9sbG93cyBhIHJlZnVzZWQgcmVjb3JkOiBhIHdhaXQgZW5kcyBub3cgYW5kIHRoZSBzZXJpZXMgc3RvcHMgYGFib3J0ZWRgLlxuICAgICAgICBpZiAoIXN0b3Auc2lnbmFsLmFib3J0ZWQpIHN0b3AuYWJvcnQoZW5kZWQoKSk7XG4gICAgICB9LFxuICAgICAgb2JzZXJ2ZTogKHJlcG9ydCwgYXQpID0+IGhvc3Qub2JzZXJ2ZShyZXBvcnQsIGF0KSxcbiAgICB9LFxuICApO1xuICByZXN1bHQgPSBzZXJpZXMuZmluYWxseShyZWxlYXNlKTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqIFdoeSBhIGNhbGwgc3RvcHBlZCBvciBjb3VsZCBub3QgZ28gb24g4oCUIGl0cyB0YXJnZXQgYW5kIHNlcmllcyBhcmUgbmFtZXM7IG5vIHZhbHVlIGlzIGluIHRoZSBtZXNzYWdlLiAqL1xuZnVuY3Rpb24gbGF0ZUNhbGxNZXNzYWdlKHRhcmdldDogc3RyaW5nLCBzZXJpZXM6IHN0cmluZyB8IHVuZGVmaW5lZCwgd2hhdDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIChcbiAgICBgW2Zvb3RwcmludF0gJGNhbGwgXCIke3RhcmdldH1cIiR7c2VyaWVzID09PSB1bmRlZmluZWQgPyAnJyA6IGAgKCR7c2VyaWVzfSlgfSAke3doYXR9OiB0aGUgYXR0ZW1wdCB0aGF0IG1hZGUgdGhpcyBgICtcbiAgICAnY2FsbCBoYXMgZW5kZWQg4oCUIG5vIGZ1cnRoZXIgYXR0ZW1wdCBvZiBpdCBzdGFydHMsIGFuZCBub3RoaW5nIGl0IHJlY29yZHMgbGFuZHMgb24gdGhlIHN0YWdlLidcbiAgKTtcbn1cbiJdfQ==
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* attempt/category.ts — `errorCategory`, the ONE failure classifier (design §3.9).
|
|
3
|
+
*
|
|
4
|
+
* Seven fixed values, so every recorder — the narrative, the metric layer, an agent's own — breaks failures down
|
|
5
|
+
* the same way; a recorder never invents a category of its own. Borrowed from agentfootprint's
|
|
6
|
+
* `classifyRetryReason` and widened, so its decorators adopt this one rather than keep theirs.
|
|
7
|
+
*
|
|
8
|
+
* Category is EVIDENCE, never policy: the default `retryOn` retries every category. A chart that wants "never
|
|
9
|
+
* retry a permanent failure" says so: `retryOn: (e) => errorCategory(e) !== 'permanent'`.
|
|
10
|
+
*
|
|
11
|
+
* Precedence — what the failure LOOKED like wins over what it declares:
|
|
12
|
+
* 1. the attempt's own timer (outcome `'timeout'`, or our `AttemptTimeoutError`) → timeout
|
|
13
|
+
* 2. the run's signal ended it (outcome `'aborted'`) → unknown
|
|
14
|
+
* 3. status 429, or a declared `retryAfterMs` / `retryAfterSeconds` → rate-limited
|
|
15
|
+
* 4. status 5xx → server
|
|
16
|
+
* 5. status 401 / 403 → auth
|
|
17
|
+
* 6. any other 4xx → permanent
|
|
18
|
+
* 7. `retryable: false`, or a validation error → permanent
|
|
19
|
+
* 8. a transport failure (a socket code on the error or its cause, a fetch
|
|
20
|
+
* `TypeError`, an `AbortError` / `TimeoutError` that was not the run's) → network
|
|
21
|
+
* 9. anything else → unknown
|
|
22
|
+
*
|
|
23
|
+
* A status is a NUMBER (`status` or `statusCode`); a numeric string is not read as one. Total: a value whose
|
|
24
|
+
* reads throw (a hostile Proxy) is `'unknown'`, never a second throw from an error path.
|
|
25
|
+
*/
|
|
26
|
+
import type { AttemptCategory, AttemptOutcome } from './types.js';
|
|
27
|
+
/**
|
|
28
|
+
* The category of an attempt's failure. `outcome` is how the attempt ended (default `'failed'`): it decides
|
|
29
|
+
* `'timeout'` (the attempt's own timer) and `'unknown'` (the run's signal) before the error is read.
|
|
30
|
+
*/
|
|
31
|
+
export declare function errorCategory(error: unknown, outcome?: AttemptOutcome): AttemptCategory;
|