footprintjs 4.16.0 → 4.17.2
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 +567 -82
- package/CLAUDE.md +57 -0
- package/README.md +2 -0
- package/dist/advanced.js +4 -2
- package/dist/detach.js +78 -0
- package/dist/esm/advanced.js +2 -1
- package/dist/esm/detach.js +57 -0
- package/dist/esm/lib/builder/FlowChartBuilder.js +171 -61
- package/dist/esm/lib/contract/openapi.js +4 -5
- package/dist/esm/lib/contract/schema.js +115 -4
- package/dist/esm/lib/decide/decide.js +4 -5
- package/dist/esm/lib/decide/evidence.js +3 -2
- package/dist/esm/lib/detach/drivers/immediate.js +66 -0
- package/dist/esm/lib/detach/drivers/microtaskBatch.js +113 -0
- package/dist/esm/lib/detach/drivers/sendBeacon.js +78 -0
- package/dist/esm/lib/detach/drivers/setImmediate.js +81 -0
- package/dist/esm/lib/detach/drivers/setTimeout.js +69 -0
- package/dist/esm/lib/detach/drivers/workerThread.js +117 -0
- package/dist/esm/lib/detach/flush.js +91 -0
- package/dist/esm/lib/detach/handle.js +134 -0
- package/dist/esm/lib/detach/registry.js +97 -0
- package/dist/esm/lib/detach/runChild.js +40 -0
- package/dist/esm/lib/detach/spawn.js +86 -0
- package/dist/esm/lib/detach/types.js +37 -0
- package/dist/esm/lib/engine/errors/errorInfo.js +4 -4
- package/dist/esm/lib/engine/graph/StageNode.js +2 -2
- package/dist/esm/lib/engine/handlers/ChildrenExecutor.js +9 -8
- package/dist/esm/lib/engine/handlers/ContinuationResolver.js +12 -9
- package/dist/esm/lib/engine/handlers/DeciderHandler.js +7 -8
- package/dist/esm/lib/engine/handlers/ExtractorRunner.js +14 -8
- package/dist/esm/lib/engine/handlers/NodeResolver.js +5 -3
- package/dist/esm/lib/engine/handlers/RuntimeStructureManager.js +11 -14
- package/dist/esm/lib/engine/handlers/SelectorHandler.js +9 -9
- package/dist/esm/lib/engine/handlers/StageRunner.js +9 -11
- package/dist/esm/lib/engine/handlers/SubflowExecutor.js +13 -12
- package/dist/esm/lib/engine/handlers/SubflowInputMapper.js +4 -4
- package/dist/esm/lib/engine/narrative/CombinedNarrativeRecorder.js +85 -96
- package/dist/esm/lib/engine/narrative/FlowRecorderDispatcher.js +18 -36
- package/dist/esm/lib/engine/narrative/NarrativeFlowRecorder.js +6 -5
- package/dist/esm/lib/engine/narrative/recorders/AdaptiveNarrativeFlowRecorder.js +7 -6
- package/dist/esm/lib/engine/narrative/recorders/ManifestFlowRecorder.js +10 -10
- package/dist/esm/lib/engine/narrative/recorders/MilestoneNarrativeFlowRecorder.js +5 -3
- package/dist/esm/lib/engine/narrative/recorders/ProgressiveNarrativeFlowRecorder.js +4 -3
- package/dist/esm/lib/engine/narrative/recorders/RLENarrativeFlowRecorder.js +4 -4
- package/dist/esm/lib/engine/narrative/recorders/SeparateNarrativeFlowRecorder.js +5 -6
- package/dist/esm/lib/engine/narrative/recorders/SilentNarrativeFlowRecorder.js +5 -6
- package/dist/esm/lib/engine/narrative/recorders/WindowedNarrativeFlowRecorder.js +5 -3
- package/dist/esm/lib/engine/traversal/FlowchartTraverser.js +97 -71
- package/dist/esm/lib/memory/DiagnosticCollector.js +6 -8
- package/dist/esm/lib/memory/EventLog.js +5 -3
- package/dist/esm/lib/memory/SharedMemory.js +3 -2
- package/dist/esm/lib/memory/StageContext.js +44 -14
- package/dist/esm/lib/memory/TransactionBuffer.js +9 -8
- package/dist/esm/lib/memory/backtrack.js +3 -4
- package/dist/esm/lib/memory/commitLogUtils.js +2 -2
- package/dist/esm/lib/memory/utils.js +2 -3
- package/dist/esm/lib/pause/types.js +33 -14
- package/dist/esm/lib/reactive/createTypedScope.js +10 -8
- package/dist/esm/lib/reactive/types.js +3 -1
- package/dist/esm/lib/recorder/BoundaryStateTracker.js +263 -0
- package/dist/esm/lib/recorder/CompositeRecorder.js +3 -1
- package/dist/esm/lib/recorder/InOutRecorder.js +5 -6
- package/dist/esm/lib/recorder/KeyedRecorder.js +2 -4
- package/dist/esm/lib/recorder/QualityRecorder.js +15 -14
- package/dist/esm/lib/recorder/SequenceRecorder.js +11 -12
- package/dist/esm/lib/recorder/TopologyRecorder.js +36 -40
- package/dist/esm/lib/recorder/index.js +2 -1
- package/dist/esm/lib/recorder/qualityTrace.js +4 -5
- package/dist/esm/lib/runner/ExecutionRuntime.js +20 -4
- package/dist/esm/lib/runner/FlowChartExecutor.js +99 -55
- package/dist/esm/lib/runner/RunContext.js +5 -3
- package/dist/esm/lib/runner/RunnableChart.js +7 -9
- package/dist/esm/lib/runner/getSubtreeSnapshot.js +4 -5
- package/dist/esm/lib/schema/errors.js +4 -3
- package/dist/esm/lib/schema/validate.js +4 -5
- package/dist/esm/lib/scope/ScopeFacade.js +52 -35
- package/dist/esm/lib/scope/providers/baseStateCompatible.js +9 -9
- package/dist/esm/lib/scope/providers/guards.js +2 -2
- package/dist/esm/lib/scope/recorders/DebugRecorder.js +9 -7
- package/dist/esm/lib/scope/recorders/MetricRecorder.js +10 -8
- package/dist/esm/lib/scope/state/zod/defineScopeFromZod.js +2 -3
- package/dist/esm/lib/scope/state/zod/resolver.js +2 -3
- package/dist/esm/lib/scope/state/zod/scopeFactory.js +16 -20
- package/dist/esm/lib/scope/state/zod/utils/validateHelper.js +57 -14
- package/dist/esm/trace.js +4 -1
- package/dist/lib/builder/FlowChartBuilder.js +171 -61
- package/dist/lib/contract/openapi.js +4 -5
- package/dist/lib/contract/schema.js +115 -4
- package/dist/lib/decide/decide.js +4 -5
- package/dist/lib/decide/evidence.js +3 -2
- package/dist/lib/detach/drivers/immediate.js +70 -0
- package/dist/lib/detach/drivers/microtaskBatch.js +117 -0
- package/dist/lib/detach/drivers/sendBeacon.js +82 -0
- package/dist/lib/detach/drivers/setImmediate.js +85 -0
- package/dist/lib/detach/drivers/setTimeout.js +73 -0
- package/dist/lib/detach/drivers/workerThread.js +121 -0
- package/dist/lib/detach/flush.js +95 -0
- package/dist/lib/detach/handle.js +140 -0
- package/dist/lib/detach/registry.js +106 -0
- package/dist/lib/detach/runChild.js +67 -0
- package/dist/lib/detach/spawn.js +92 -0
- package/dist/lib/detach/types.js +38 -0
- package/dist/lib/engine/errors/errorInfo.js +4 -4
- package/dist/lib/engine/graph/StageNode.js +2 -2
- package/dist/lib/engine/handlers/ChildrenExecutor.js +9 -8
- package/dist/lib/engine/handlers/ContinuationResolver.js +12 -9
- package/dist/lib/engine/handlers/DeciderHandler.js +7 -8
- package/dist/lib/engine/handlers/ExtractorRunner.js +14 -8
- package/dist/lib/engine/handlers/NodeResolver.js +5 -3
- package/dist/lib/engine/handlers/RuntimeStructureManager.js +11 -14
- package/dist/lib/engine/handlers/SelectorHandler.js +9 -9
- package/dist/lib/engine/handlers/StageRunner.js +9 -11
- package/dist/lib/engine/handlers/SubflowExecutor.js +13 -12
- package/dist/lib/engine/handlers/SubflowInputMapper.js +4 -4
- package/dist/lib/engine/narrative/CombinedNarrativeRecorder.js +85 -96
- package/dist/lib/engine/narrative/FlowRecorderDispatcher.js +18 -36
- package/dist/lib/engine/narrative/NarrativeFlowRecorder.js +6 -5
- package/dist/lib/engine/narrative/recorders/AdaptiveNarrativeFlowRecorder.js +7 -6
- package/dist/lib/engine/narrative/recorders/ManifestFlowRecorder.js +10 -10
- package/dist/lib/engine/narrative/recorders/MilestoneNarrativeFlowRecorder.js +5 -3
- package/dist/lib/engine/narrative/recorders/ProgressiveNarrativeFlowRecorder.js +4 -3
- package/dist/lib/engine/narrative/recorders/RLENarrativeFlowRecorder.js +4 -4
- package/dist/lib/engine/narrative/recorders/SeparateNarrativeFlowRecorder.js +5 -6
- package/dist/lib/engine/narrative/recorders/SilentNarrativeFlowRecorder.js +5 -6
- package/dist/lib/engine/narrative/recorders/WindowedNarrativeFlowRecorder.js +5 -3
- package/dist/lib/engine/traversal/FlowchartTraverser.js +97 -71
- package/dist/lib/memory/DiagnosticCollector.js +6 -8
- package/dist/lib/memory/EventLog.js +5 -3
- package/dist/lib/memory/SharedMemory.js +3 -2
- package/dist/lib/memory/StageContext.js +44 -14
- package/dist/lib/memory/TransactionBuffer.js +9 -8
- package/dist/lib/memory/backtrack.js +3 -4
- package/dist/lib/memory/commitLogUtils.js +2 -2
- package/dist/lib/memory/utils.js +2 -3
- package/dist/lib/pause/types.js +33 -14
- package/dist/lib/reactive/createTypedScope.js +10 -8
- package/dist/lib/reactive/types.js +3 -1
- package/dist/lib/recorder/BoundaryStateTracker.js +267 -0
- package/dist/lib/recorder/CompositeRecorder.js +3 -1
- package/dist/lib/recorder/InOutRecorder.js +5 -6
- package/dist/lib/recorder/KeyedRecorder.js +2 -4
- package/dist/lib/recorder/QualityRecorder.js +15 -14
- package/dist/lib/recorder/SequenceRecorder.js +11 -12
- package/dist/lib/recorder/TopologyRecorder.js +36 -40
- package/dist/lib/recorder/index.js +4 -2
- package/dist/lib/recorder/qualityTrace.js +4 -5
- package/dist/lib/runner/ExecutionRuntime.js +20 -4
- package/dist/lib/runner/FlowChartExecutor.js +99 -55
- package/dist/lib/runner/RunContext.js +5 -3
- package/dist/lib/runner/RunnableChart.js +7 -9
- package/dist/lib/runner/getSubtreeSnapshot.js +4 -5
- package/dist/lib/schema/errors.js +4 -3
- package/dist/lib/schema/validate.js +4 -5
- package/dist/lib/scope/ScopeFacade.js +52 -35
- package/dist/lib/scope/providers/baseStateCompatible.js +9 -9
- package/dist/lib/scope/providers/guards.js +2 -2
- package/dist/lib/scope/recorders/DebugRecorder.js +9 -7
- package/dist/lib/scope/recorders/MetricRecorder.js +10 -8
- package/dist/lib/scope/state/zod/defineScopeFromZod.js +2 -3
- package/dist/lib/scope/state/zod/resolver.js +2 -3
- package/dist/lib/scope/state/zod/scopeFactory.js +16 -20
- package/dist/lib/scope/state/zod/utils/validateHelper.js +57 -14
- package/dist/trace.js +6 -2
- package/dist/types/advanced.d.ts +1 -0
- package/dist/types/detach.d.ts +59 -0
- package/dist/types/lib/builder/FlowChartBuilder.d.ts +81 -0
- package/dist/types/lib/detach/drivers/immediate.d.ts +39 -0
- package/dist/types/lib/detach/drivers/microtaskBatch.d.ts +57 -0
- package/dist/types/lib/detach/drivers/sendBeacon.d.ts +38 -0
- package/dist/types/lib/detach/drivers/setImmediate.d.ts +32 -0
- package/dist/types/lib/detach/drivers/setTimeout.d.ts +34 -0
- package/dist/types/lib/detach/drivers/workerThread.d.ts +50 -0
- package/dist/types/lib/detach/flush.d.ts +62 -0
- package/dist/types/lib/detach/handle.d.ts +83 -0
- package/dist/types/lib/detach/registry.d.ts +82 -0
- package/dist/types/lib/detach/runChild.d.ts +41 -0
- package/dist/types/lib/detach/spawn.d.ts +64 -0
- package/dist/types/lib/detach/types.d.ts +200 -0
- package/dist/types/lib/engine/traversal/FlowchartTraverser.d.ts +0 -1
- package/dist/types/lib/engine/types.d.ts +0 -1
- package/dist/types/lib/reactive/types.d.ts +4 -0
- package/dist/types/lib/recorder/BoundaryStateTracker.d.ts +215 -0
- package/dist/types/lib/recorder/index.d.ts +1 -0
- package/dist/types/lib/runner/FlowChartExecutor.d.ts +28 -0
- package/dist/types/lib/scope/ScopeFacade.d.ts +4 -0
- package/dist/types/lib/scope/state/zod/utils/validateHelper.d.ts +13 -1
- package/dist/types/trace.d.ts +1 -0
- package/package.json +6 -1
|
@@ -27,11 +27,10 @@ function slugify(name) {
|
|
|
27
27
|
* no post-processing walk of buildTimeStructure is performed here.
|
|
28
28
|
*/
|
|
29
29
|
export function generateOpenAPI(contract, options) {
|
|
30
|
-
var _a, _b, _c;
|
|
31
30
|
const { chart, inputSchema, outputSchema } = contract;
|
|
32
|
-
const version =
|
|
33
|
-
const basePath =
|
|
34
|
-
const method =
|
|
31
|
+
const version = options?.version ?? '1.0.0';
|
|
32
|
+
const basePath = options?.basePath ?? '/';
|
|
33
|
+
const method = options?.method ?? 'post';
|
|
35
34
|
const rootName = chart.root.name;
|
|
36
35
|
const operationId = slugify(rootName);
|
|
37
36
|
const path = `${basePath === '/' ? '' : basePath}/${operationId}`;
|
|
@@ -96,4 +95,4 @@ export function generateOpenAPI(contract, options) {
|
|
|
96
95
|
};
|
|
97
96
|
return spec;
|
|
98
97
|
}
|
|
99
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
98
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3BlbmFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvY29udHJhY3Qvb3BlbmFwaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7OztHQVVHO0FBS0gsZ0ZBQWdGO0FBQ2hGLG1CQUFtQjtBQUNuQixnRkFBZ0Y7QUFFaEYsU0FBUyxPQUFPLENBQUMsSUFBWTtJQUMzQixPQUFPLElBQUk7U0FDUixXQUFXLEVBQUU7U0FDYixPQUFPLENBQUMsYUFBYSxFQUFFLEdBQUcsQ0FBQztTQUMzQixPQUFPLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQzNCLENBQUM7QUFFRCxnRkFBZ0Y7QUFDaEYsYUFBYTtBQUNiLGdGQUFnRjtBQUVoRjs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLGVBQWUsQ0FBQyxRQUEyQixFQUFFLE9BQXdCO0lBQ25GLE1BQU0sRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLFlBQVksRUFBRSxHQUFHLFFBQVEsQ0FBQztJQUN0RCxNQUFNLE9BQU8sR0FBRyxPQUFPLEVBQUUsT0FBTyxJQUFJLE9BQU8sQ0FBQztJQUM1QyxNQUFNLFFBQVEsR0FBRyxPQUFPLEVBQUUsUUFBUSxJQUFJLEdBQUcsQ0FBQztJQUMxQyxNQUFNLE1BQU0sR0FBRyxPQUFPLEVBQUUsTUFBTSxJQUFJLE1BQU0sQ0FBQztJQUV6QyxNQUFNLFFBQVEsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztJQUNqQyxNQUFNLFdBQVcsR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDdEMsTUFBTSxJQUFJLEdBQUcsR0FBRyxRQUFRLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsSUFBSSxXQUFXLEVBQUUsQ0FBQztJQUVsRSwwRkFBMEY7SUFDMUYsTUFBTSxlQUFlLEdBQUcsS0FBSyxDQUFDLFdBQVcsQ0FBQztJQUUxQywrQkFBK0I7SUFDL0IsTUFBTSxPQUFPLEdBQStCLEVBQUUsQ0FBQztJQUMvQyxNQUFNLFFBQVEsR0FBRyxHQUFHLFFBQVEsT0FBTyxDQUFDO0lBQ3BDLE1BQU0sU0FBUyxHQUFHLEdBQUcsUUFBUSxRQUFRLENBQUM7SUFFdEMsSUFBSSxXQUFXO1FBQUUsT0FBTyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFdBQVcsQ0FBQztJQUNqRCxJQUFJLFlBQVk7UUFBRSxPQUFPLENBQUMsU0FBUyxDQUFDLEdBQUcsWUFBWSxDQUFDO0lBRXBELGtCQUFrQjtJQUNsQixNQUFNLFNBQVMsR0FBcUI7UUFDbEMsV0FBVztRQUNYLE9BQU8sRUFBRSxRQUFRO1FBQ2pCLFdBQVcsRUFBRSxlQUFlO1FBQzVCLEdBQUcsQ0FBQyxXQUFXO1lBQ2IsQ0FBQyxDQUFDO2dCQUNFLFdBQVcsRUFBRTtvQkFDWCxRQUFRLEVBQUUsSUFBSTtvQkFDZCxPQUFPLEVBQUU7d0JBQ1Asa0JBQWtCLEVBQUU7NEJBQ2xCLE1BQU0sRUFBRSxFQUFFLElBQUksRUFBRSx3QkFBd0IsUUFBUSxFQUFFLEVBQUU7eUJBQ3JEO3FCQUNGO2lCQUNGO2FBQ0Y7WUFDSCxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ1AsU0FBUyxFQUFFO1lBQ1QsS0FBSyxFQUFFO2dCQUNMLFdBQVcsRUFBRSxzQkFBc0I7Z0JBQ25DLEdBQUcsQ0FBQyxZQUFZO29CQUNkLENBQUMsQ0FBQzt3QkFDRSxPQUFPLEVBQUU7NEJBQ1Asa0JBQWtCLEVBQUU7Z0NBQ2xCLE1BQU0sRUFBRSxFQUFFLElBQUksRUFBRSx3QkFBd0IsU0FBUyxFQUFFLEVBQUU7NkJBQ3REO3lCQUNGO3FCQUNGO29CQUNILENBQUMsQ0FBQyxFQUFFLENBQUM7YUFDUjtZQUNELEtBQUssRUFBRTtnQkFDTCxXQUFXLEVBQUUsMEJBQTBCO2FBQ3hDO1NBQ0Y7S0FDRixDQUFDO0lBRUYsTUFBTSxJQUFJLEdBQWdCO1FBQ3hCLE9BQU8sRUFBRSxPQUFPO1FBQ2hCLElBQUksRUFBRTtZQUNKLEtBQUssRUFBRSxRQUFRO1lBQ2YsV0FBVyxFQUFFLGVBQWU7WUFDNUIsT0FBTztTQUNSO1FBQ0QsS0FBSyxFQUFFO1lBQ0wsQ0FBQyxJQUFJLENBQUMsRUFBRTtnQkFDTixDQUFDLE1BQU0sQ0FBQyxFQUFFLFNBQVM7YUFDcEI7U0FDRjtRQUNELEdBQUcsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsVUFBVSxFQUFFLEVBQUUsT0FBTyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0tBQ3hFLENBQUM7SUFFRixPQUFPLElBQUksQ0FBQztBQUNkLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIGNvbnRyYWN0L29wZW5hcGkudHMg4oCUIE9wZW5BUEkgMy4xIHNwZWMgZ2VuZXJhdG9yLlxuICpcbiAqIEdlbmVyYXRlcyBhbiBPcGVuQVBJIHNwZWMgZnJvbSBhIEZsb3dDaGFydENvbnRyYWN0IGJ5IGNvbWJpbmluZzpcbiAqIC0gY2hhcnQuZGVzY3JpcHRpb24g4oaSIG9wZXJhdGlvbiBkZXNjcmlwdGlvbiAoYnVpbHQgaW5jcmVtZW50YWxseSBkdXJpbmcgRmxvd0NoYXJ0QnVpbGRlci5idWlsZCgpKVxuICogLSBpbnB1dFNjaGVtYSDihpIgcmVxdWVzdEJvZHlcbiAqIC0gb3V0cHV0U2NoZW1hIOKGkiByZXNwb25zZVxuICpcbiAqIGNoYXJ0LmRlc2NyaXB0aW9uIGlzIGFzc2VtYmxlZCBieSBGbG93Q2hhcnRCdWlsZGVyIGFzIGVhY2ggc3RhZ2UgaXMgYWRkZWQg4oCUXG4gKiBubyBwb3N0LXByb2Nlc3Npbmcgd2FsayBvZiBidWlsZFRpbWVTdHJ1Y3R1cmUgaXMgbmVlZGVkIG9yIHBlcmZvcm1lZCBoZXJlLlxuICovXG5cbmltcG9ydCB0eXBlIHsgRmxvd0NoYXJ0IH0gZnJvbSAnLi4vYnVpbGRlci90eXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7IEZsb3dDaGFydENvbnRyYWN0LCBKc29uU2NoZW1hLCBPcGVuQVBJT3BlcmF0aW9uLCBPcGVuQVBJT3B0aW9ucywgT3BlbkFQSVNwZWMgfSBmcm9tICcuL3R5cGVzLmpzJztcblxuLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4vLyBJbnRlcm5hbCBoZWxwZXJzXG4vLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuZnVuY3Rpb24gc2x1Z2lmeShuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gbmFtZVxuICAgIC50b0xvd2VyQ2FzZSgpXG4gICAgLnJlcGxhY2UoL1teYS16MC05XSsvZywgJy0nKVxuICAgIC5yZXBsYWNlKC9eLXwtJC9nLCAnJyk7XG59XG5cbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuLy8gUHVibGljIEFQSVxuLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbi8qKlxuICogR2VuZXJhdGVzIGFuIE9wZW5BUEkgMy4xIHNwZWMgZnJvbSBhIEZsb3dDaGFydENvbnRyYWN0LlxuICogVXNlcyBgY2hhcnQuZGVzY3JpcHRpb25gIHdoaWNoIEZsb3dDaGFydEJ1aWxkZXIgYXNzZW1ibGVzIGF0IGJ1aWxkIHRpbWUg4oCUXG4gKiBubyBwb3N0LXByb2Nlc3Npbmcgd2FsayBvZiBidWlsZFRpbWVTdHJ1Y3R1cmUgaXMgcGVyZm9ybWVkIGhlcmUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmF0ZU9wZW5BUEkoY29udHJhY3Q6IEZsb3dDaGFydENvbnRyYWN0LCBvcHRpb25zPzogT3BlbkFQSU9wdGlvbnMpOiBPcGVuQVBJU3BlYyB7XG4gIGNvbnN0IHsgY2hhcnQsIGlucHV0U2NoZW1hLCBvdXRwdXRTY2hlbWEgfSA9IGNvbnRyYWN0O1xuICBjb25zdCB2ZXJzaW9uID0gb3B0aW9ucz8udmVyc2lvbiA/PyAnMS4wLjAnO1xuICBjb25zdCBiYXNlUGF0aCA9IG9wdGlvbnM/LmJhc2VQYXRoID8/ICcvJztcbiAgY29uc3QgbWV0aG9kID0gb3B0aW9ucz8ubWV0aG9kID8/ICdwb3N0JztcblxuICBjb25zdCByb290TmFtZSA9IGNoYXJ0LnJvb3QubmFtZTtcbiAgY29uc3Qgb3BlcmF0aW9uSWQgPSBzbHVnaWZ5KHJvb3ROYW1lKTtcbiAgY29uc3QgcGF0aCA9IGAke2Jhc2VQYXRoID09PSAnLycgPyAnJyA6IGJhc2VQYXRofS8ke29wZXJhdGlvbklkfWA7XG5cbiAgLy8gRGVzY3JpcHRpb24gd2FzIGJ1aWx0IGluY3JlbWVudGFsbHkgZHVyaW5nIEZsb3dDaGFydEJ1aWxkZXIuYnVpbGQoKSDigJQgcmVhZCBpdCBkaXJlY3RseS5cbiAgY29uc3QgZnVsbERlc2NyaXB0aW9uID0gY2hhcnQuZGVzY3JpcHRpb247XG5cbiAgLy8gQnVpbGQgc2NoZW1hcyBmb3IgY29tcG9uZW50c1xuICBjb25zdCBzY2hlbWFzOiBSZWNvcmQ8c3RyaW5nLCBKc29uU2NoZW1hPiA9IHt9O1xuICBjb25zdCBpbnB1dFJlZiA9IGAke3Jvb3ROYW1lfUlucHV0YDtcbiAgY29uc3Qgb3V0cHV0UmVmID0gYCR7cm9vdE5hbWV9T3V0cHV0YDtcblxuICBpZiAoaW5wdXRTY2hlbWEpIHNjaGVtYXNbaW5wdXRSZWZdID0gaW5wdXRTY2hlbWE7XG4gIGlmIChvdXRwdXRTY2hlbWEpIHNjaGVtYXNbb3V0cHV0UmVmXSA9IG91dHB1dFNjaGVtYTtcblxuICAvLyBCdWlsZCBvcGVyYXRpb25cbiAgY29uc3Qgb3BlcmF0aW9uOiBPcGVuQVBJT3BlcmF0aW9uID0ge1xuICAgIG9wZXJhdGlvbklkLFxuICAgIHN1bW1hcnk6IHJvb3ROYW1lLFxuICAgIGRlc2NyaXB0aW9uOiBmdWxsRGVzY3JpcHRpb24sXG4gICAgLi4uKGlucHV0U2NoZW1hXG4gICAgICA/IHtcbiAgICAgICAgICByZXF1ZXN0Qm9keToge1xuICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgICAgICBjb250ZW50OiB7XG4gICAgICAgICAgICAgICdhcHBsaWNhdGlvbi9qc29uJzoge1xuICAgICAgICAgICAgICAgIHNjaGVtYTogeyAkcmVmOiBgIy9jb21wb25lbnRzL3NjaGVtYXMvJHtpbnB1dFJlZn1gIH0sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH1cbiAgICAgIDoge30pLFxuICAgIHJlc3BvbnNlczoge1xuICAgICAgJzIwMCc6IHtcbiAgICAgICAgZGVzY3JpcHRpb246ICdTdWNjZXNzZnVsIGV4ZWN1dGlvbicsXG4gICAgICAgIC4uLihvdXRwdXRTY2hlbWFcbiAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgY29udGVudDoge1xuICAgICAgICAgICAgICAgICdhcHBsaWNhdGlvbi9qc29uJzoge1xuICAgICAgICAgICAgICAgICAgc2NoZW1hOiB7ICRyZWY6IGAjL2NvbXBvbmVudHMvc2NoZW1hcy8ke291dHB1dFJlZn1gIH0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICA6IHt9KSxcbiAgICAgIH0sXG4gICAgICAnNTAwJzoge1xuICAgICAgICBkZXNjcmlwdGlvbjogJ1BpcGVsaW5lIGV4ZWN1dGlvbiBlcnJvcicsXG4gICAgICB9LFxuICAgIH0sXG4gIH07XG5cbiAgY29uc3Qgc3BlYzogT3BlbkFQSVNwZWMgPSB7XG4gICAgb3BlbmFwaTogJzMuMS4wJyxcbiAgICBpbmZvOiB7XG4gICAgICB0aXRsZTogcm9vdE5hbWUsXG4gICAgICBkZXNjcmlwdGlvbjogZnVsbERlc2NyaXB0aW9uLFxuICAgICAgdmVyc2lvbixcbiAgICB9LFxuICAgIHBhdGhzOiB7XG4gICAgICBbcGF0aF06IHtcbiAgICAgICAgW21ldGhvZF06IG9wZXJhdGlvbixcbiAgICAgIH0sXG4gICAgfSxcbiAgICAuLi4oT2JqZWN0LmtleXMoc2NoZW1hcykubGVuZ3RoID4gMCA/IHsgY29tcG9uZW50czogeyBzY2hlbWFzIH0gfSA6IHt9KSxcbiAgfTtcblxuICByZXR1cm4gc3BlYztcbn1cbiJdfQ==
|
|
@@ -24,12 +24,115 @@ function getDef(zodSchema) {
|
|
|
24
24
|
if (zodSchema.def && typeof zodSchema.def === 'object') {
|
|
25
25
|
return zodSchema.def;
|
|
26
26
|
}
|
|
27
|
-
//
|
|
27
|
+
// Zod v3 (and Zod v4 inner types): `._def` property. v3 uses
|
|
28
|
+
// `typeName: 'ZodString'` etc.; we normalize to v4-shape `type:
|
|
29
|
+
// 'string'` so the rest of the converter doesn't have to branch.
|
|
28
30
|
if (zodSchema._def && typeof zodSchema._def === 'object') {
|
|
29
|
-
return zodSchema._def;
|
|
31
|
+
return normalizeV3Def(zodSchema._def);
|
|
30
32
|
}
|
|
31
33
|
return undefined;
|
|
32
34
|
}
|
|
35
|
+
// Map Zod v3 typeName ('ZodString', 'ZodArray', ...) to Zod v4 type tag
|
|
36
|
+
// ('string', 'array', ...). Idempotent — if def already has v4-shape
|
|
37
|
+
// `.type`, returns as-is. New v3 typeNames added here as needed.
|
|
38
|
+
const V3_TYPE_TAG = {
|
|
39
|
+
ZodString: 'string',
|
|
40
|
+
ZodNumber: 'number',
|
|
41
|
+
ZodBoolean: 'boolean',
|
|
42
|
+
ZodLiteral: 'literal',
|
|
43
|
+
ZodEnum: 'enum',
|
|
44
|
+
ZodNativeEnum: 'enum',
|
|
45
|
+
ZodArray: 'array',
|
|
46
|
+
ZodObject: 'object',
|
|
47
|
+
ZodOptional: 'optional',
|
|
48
|
+
ZodDefault: 'default',
|
|
49
|
+
ZodNullable: 'nullable',
|
|
50
|
+
ZodUnion: 'union',
|
|
51
|
+
ZodRecord: 'record',
|
|
52
|
+
ZodEffects: 'transform',
|
|
53
|
+
ZodPipeline: 'pipe',
|
|
54
|
+
};
|
|
55
|
+
function normalizeV3Def(def) {
|
|
56
|
+
// Already v4-shape? Pass through.
|
|
57
|
+
if (typeof def.type === 'string')
|
|
58
|
+
return def;
|
|
59
|
+
const tn = def.typeName;
|
|
60
|
+
if (!tn)
|
|
61
|
+
return def;
|
|
62
|
+
const v4Type = V3_TYPE_TAG[tn];
|
|
63
|
+
if (!v4Type)
|
|
64
|
+
return def;
|
|
65
|
+
// For ZodArray: in v3, `def.type` IS the element schema. We must
|
|
66
|
+
// CAPTURE it as `def.element` BEFORE spreading, otherwise our
|
|
67
|
+
// overwrite of `type` (to the v4 tag) destroys it.
|
|
68
|
+
const out = { ...def };
|
|
69
|
+
if (tn === 'ZodArray' && def.type && typeof def.type === 'object') {
|
|
70
|
+
out.element = def.type;
|
|
71
|
+
}
|
|
72
|
+
out.type = v4Type;
|
|
73
|
+
switch (tn) {
|
|
74
|
+
case 'ZodLiteral': {
|
|
75
|
+
// v3 `value` (single) → v4 `values` (array).
|
|
76
|
+
if (Object.hasOwn(def, 'value') && !Object.hasOwn(def, 'values'))
|
|
77
|
+
out.values = [def.value];
|
|
78
|
+
break;
|
|
79
|
+
}
|
|
80
|
+
case 'ZodEnum': {
|
|
81
|
+
// v3 `values: string[]` → v4 `entries: { key: value }`.
|
|
82
|
+
const values = def.values;
|
|
83
|
+
if (values && Array.isArray(values) && !Object.hasOwn(def, 'entries')) {
|
|
84
|
+
out.entries = Object.fromEntries(values.map((v) => [String(v), v]));
|
|
85
|
+
}
|
|
86
|
+
break;
|
|
87
|
+
}
|
|
88
|
+
case 'ZodNativeEnum': {
|
|
89
|
+
const values = def.values;
|
|
90
|
+
if (values && typeof values === 'object' && !Object.hasOwn(def, 'entries'))
|
|
91
|
+
out.entries = values;
|
|
92
|
+
break;
|
|
93
|
+
}
|
|
94
|
+
case 'ZodObject': {
|
|
95
|
+
// v3 `shape: () => Record<string, ZodType>` → v4 `shape: Record`.
|
|
96
|
+
if (typeof def.shape === 'function') {
|
|
97
|
+
out.shape = def.shape();
|
|
98
|
+
}
|
|
99
|
+
break;
|
|
100
|
+
}
|
|
101
|
+
case 'ZodEffects': {
|
|
102
|
+
// v3 `schema` → v4 `inner` / `innerType`.
|
|
103
|
+
if (Object.hasOwn(def, 'schema') && !Object.hasOwn(def, 'innerType') && !Object.hasOwn(def, 'inner')) {
|
|
104
|
+
out.innerType = def.schema;
|
|
105
|
+
out.inner = def.schema;
|
|
106
|
+
}
|
|
107
|
+
break;
|
|
108
|
+
}
|
|
109
|
+
case 'ZodDefault': {
|
|
110
|
+
// v3 `defaultValue: () => unknown` (function) → v4 raw value.
|
|
111
|
+
if (typeof def.defaultValue === 'function') {
|
|
112
|
+
try {
|
|
113
|
+
out.defaultValue = def.defaultValue();
|
|
114
|
+
}
|
|
115
|
+
catch {
|
|
116
|
+
/* fall through with original */
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
break;
|
|
120
|
+
}
|
|
121
|
+
case 'ZodUnion': {
|
|
122
|
+
// v3 `options: ZodType[]` → v4 `options: ZodType[]` (same name).
|
|
123
|
+
break;
|
|
124
|
+
}
|
|
125
|
+
case 'ZodRecord': {
|
|
126
|
+
// v3 `keyType` / `valueType` → same names in v4.
|
|
127
|
+
break;
|
|
128
|
+
}
|
|
129
|
+
case 'ZodPipeline': {
|
|
130
|
+
// v3 `in` / `out` → v4 likely same; passthrough.
|
|
131
|
+
break;
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
return out;
|
|
135
|
+
}
|
|
33
136
|
/** Get description from a Zod v4 schema (stored via .description or .meta()) */
|
|
34
137
|
function getDescription(zodSchema) {
|
|
35
138
|
if (typeof zodSchema.description === 'string')
|
|
@@ -55,7 +158,7 @@ function zodDefToJsonSchema(def, zodSchema) {
|
|
|
55
158
|
if (values && values.length === 1) {
|
|
56
159
|
return { ...base, type: typeof values[0], enum: values };
|
|
57
160
|
}
|
|
58
|
-
return { ...base, enum: values
|
|
161
|
+
return { ...base, enum: values ?? [] };
|
|
59
162
|
}
|
|
60
163
|
case 'enum': {
|
|
61
164
|
// Zod v4: _def.entries is { key: value } object
|
|
@@ -161,6 +264,14 @@ function zodDefToJsonSchema(def, zodSchema) {
|
|
|
161
264
|
const innerDef = inner ? getDef(inner) : undefined;
|
|
162
265
|
return innerDef ? zodDefToJsonSchema(innerDef, inner) : base;
|
|
163
266
|
}
|
|
267
|
+
case 'transform': {
|
|
268
|
+
// Zod v3: ZodEffects (.transform / .refine) — unwrap to input
|
|
269
|
+
// schema. Our v3 normalizer copies ZodEffects's `.schema` into
|
|
270
|
+
// both `inner` and `innerType` for downstream lookups.
|
|
271
|
+
const inner = (def.inner ?? def.innerType);
|
|
272
|
+
const innerDef = inner ? getDef(inner) : undefined;
|
|
273
|
+
return innerDef ? zodDefToJsonSchema(innerDef, inner) : base;
|
|
274
|
+
}
|
|
164
275
|
default:
|
|
165
276
|
// Unknown Zod type — return empty schema
|
|
166
277
|
return base;
|
|
@@ -183,4 +294,4 @@ export function normalizeSchema(input) {
|
|
|
183
294
|
// Already a JSON Schema
|
|
184
295
|
return input;
|
|
185
296
|
}
|
|
186
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NoZW1hLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9jb250cmFjdC9zY2hlbWEudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7O0dBUUc7QUFFSCxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFHNUMsZ0ZBQWdGO0FBQ2hGLHdEQUF3RDtBQUN4RCxnRkFBZ0Y7QUFFaEYsZ0ZBQWdGO0FBQ2hGLDREQUE0RDtBQUM1RCxnRkFBZ0Y7QUFFaEY7Ozs7R0FJRztBQUNILFNBQVMsTUFBTSxDQUFDLFNBQWtDO0lBQ2hELDJDQUEyQztJQUMzQyxJQUFJLFNBQVMsQ0FBQyxHQUFHLElBQUksT0FBTyxTQUFTLENBQUMsR0FBRyxLQUFLLFFBQVEsRUFBRSxDQUFDO1FBQ3ZELE9BQU8sU0FBUyxDQUFDLEdBQThCLENBQUM7SUFDbEQsQ0FBQztJQUNELGtEQUFrRDtJQUNsRCxJQUFJLFNBQVMsQ0FBQyxJQUFJLElBQUksT0FBTyxTQUFTLENBQUMsSUFBSSxLQUFLLFFBQVEsRUFBRSxDQUFDO1FBQ3pELE9BQU8sU0FBUyxDQUFDLElBQStCLENBQUM7SUFDbkQsQ0FBQztJQUNELE9BQU8sU0FBUyxDQUFDO0FBQ25CLENBQUM7QUFFRCxnRkFBZ0Y7QUFDaEYsU0FBUyxjQUFjLENBQUMsU0FBa0M7SUFDeEQsSUFBSSxPQUFPLFNBQVMsQ0FBQyxXQUFXLEtBQUssUUFBUTtRQUFFLE9BQU8sU0FBUyxDQUFDLFdBQVcsQ0FBQztJQUM1RSxPQUFPLFNBQVMsQ0FBQztBQUNuQixDQUFDO0FBRUQsU0FBUyxrQkFBa0IsQ0FBQyxHQUE0QixFQUFFLFNBQW1DO0lBQzNGLE1BQU0sUUFBUSxHQUFHLEdBQUcsQ0FBQyxJQUEwQixDQUFDO0lBQ2hELE1BQU0sV0FBVyxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7SUFDdEUs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QUssQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7WUFDbkQsT0FBTyxRQUFRLENBQUMsQ0FBQyxDQUFDLGtCQUFrQixDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1FBQy9ELENBQUM7UUFFRDtZQUNFLHlDQUF5QztZQUN6QyxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0FBQ0gsQ0FBQztBQUVELGtEQUFrRDtBQUNsRCxNQUFNLFVBQVUsZUFBZSxDQUFDLFNBQWtDO0lBQ2hFLE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUM5QixJQUFJLENBQUMsR0FBRztRQUFFLE9BQU8sRUFBRSxDQUFDO0lBQ3BCLE9BQU8sa0JBQWtCLENBQUMsR0FBRyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0FBQzVDLENBQUM7QUFFRCxnRkFBZ0Y7QUFDaEYscUVBQXFFO0FBQ3JFLGdGQUFnRjtBQUVoRixNQUFNLFVBQVUsZUFBZSxDQUFDLEtBQWtCO0lBQ2hELElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDakIsT0FBTyxlQUFlLENBQUMsS0FBZ0MsQ0FBQyxDQUFDO0lBQzNELENBQUM7SUFDRCx3QkFBd0I7SUFDeEIsT0FBTyxLQUFtQixDQUFDO0FBQzdCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIGNvbnRyYWN0L3NjaGVtYS50cyDigJQgU2NoZW1hIG5vcm1hbGl6YXRpb24gdXRpbGl0aWVzLlxuICpcbiAqIENvbnZlcnRzIFpvZCBzY2hlbWFzIG9yIHJhdyBKU09OIFNjaGVtYSBvYmplY3RzIGludG8gYSBub3JtYWxpemVkXG4gKiBKc29uU2NoZW1hIGZvcm1hdC4gRGV0ZWN0aW9uIGRlbGVnYXRlZCB0byBzY2hlbWEvZGV0ZWN0LnRzIChzaW5nbGUgc291cmNlIG9mIHRydXRoKS5cbiAqXG4gKiBTdGFuZGFsb25lOiBubyBkZXBlbmRlbmN5IG9uIFpvZCBhdCBpbXBvcnQgdGltZS5cbiAqIENvbXBhdGlibGUgd2l0aCBab2QgdjQgaW50ZXJuYWxzLlxuICovXG5cbmltcG9ydCB7IGlzWm9kIH0gZnJvbSAnLi4vc2NoZW1hL2RldGVjdC5qcyc7XG5pbXBvcnQgdHlwZSB7IEpzb25TY2hlbWEsIFNjaGVtYUlucHV0IH0gZnJvbSAnLi90eXBlcy5qcyc7XG5cbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuLy8gWm9kIERldGVjdGlvbiDigJQgZGVsZWdhdGVzIHRvIHVuaWZpZWQgc2NoZW1hL2RldGVjdC50c1xuLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuLy8gWm9kIHY0IOKGkiBKU09OIFNjaGVtYSAobWluaW1hbCBjb252ZXJ0ZXIgZm9yIGNvbW1vbiB0eXBlcylcbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4vKipcbiAqIEdldCB0aGUgZGVmIG9iamVjdCBmcm9tIGEgWm9kIHNjaGVtYS5cbiAqIEluIFpvZCB2NCwgdG9wLWxldmVsIHNjaGVtYXMgaGF2ZSBgLmRlZmAsIGlubmVyIHR5cGVzIGFjY2Vzc2VkIHZpYVxuICogYF9kZWZgIG9yIGAuZGVmYCBkZXBlbmRpbmcgb24gY29udGV4dC5cbiAqL1xuZnVuY3Rpb24gZ2V0RGVmKHpvZFNjaGVtYTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IHVuZGVmaW5lZCB7XG4gIC8vIFRvcC1sZXZlbCBab2QgdjQgc2NoZW1hOiBgLmRlZmAgcHJvcGVydHlcbiAgaWYgKHpvZFNjaGVtYS5kZWYgJiYgdHlwZW9mIHpvZFNjaGVtYS5kZWYgPT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIHpvZFNjaGVtYS5kZWYgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIH1cbiAgLy8gTmVzdGVkIHZpYSBfZGVmIChlLmcuLCB3aGVuIGFjY2Vzc2luZyBkaXJlY3RseSlcbiAgaWYgKHpvZFNjaGVtYS5fZGVmICYmIHR5cGVvZiB6b2RTY2hlbWEuX2RlZiA9PT0gJ29iamVjdCcpIHtcbiAgICByZXR1cm4gem9kU2NoZW1hLl9kZWYgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIH1cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuLyoqIEdldCBkZXNjcmlwdGlvbiBmcm9tIGEgWm9kIHY0IHNjaGVtYSAoc3RvcmVkIHZpYSAuZGVzY3JpcHRpb24gb3IgLm1ldGEoKSkgKi9cbmZ1bmN0aW9uIGdldERlc2NyaXB0aW9uKHpvZFNjaGVtYTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBpZiAodHlwZW9mIHpvZFNjaGVtYS5kZXNjcmlwdGlvbiA9PT0gJ3N0cmluZycpIHJldHVybiB6b2RTY2hlbWEuZGVzY3JpcHRpb247XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIHpvZERlZlRvSnNvblNjaGVtYShkZWY6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LCB6b2RTY2hlbWE/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IEpzb25TY2hlbWEge1xuICBjb25zdCB0eXBlTmFtZSA9IGRlZi50eXBlIGFzIHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgY29uc3QgZGVzY3JpcHRpb24gPSB6b2RTY2hlbWEgPyBnZXREZXNjcmlwdGlvbih6b2RTY2hlbWEpIDogdW5kZWZpbmVkO1xuICBjb25zdCBiYXNlOiBKc29uU2NoZW1hID0ge307XG4gIGlmIChkZXNjcmlwdGlvbikgYmFzZS5kZXNjcmlwdGlvbiA9IGRlc2NyaXB0aW9uO1xuXG4gIHN3aXRjaCAodHlwZU5hbWUpIHtcbiAgICBjYXNlICdzdHJpbmcnOlxuICAgICAgcmV0dXJuIHsgLi4uYmFzZSwgdHlwZTogJ3N0cmluZycgfTtcblxuICAgIGNhc2UgJ251bWJlcic6XG4gICAgICByZXR1cm4geyAuLi5iYXNlLCB0eXBlOiAnbnVtYmVyJyB9O1xuXG4gICAgY2FzZSAnYm9vbGVhbic6XG4gICAgICByZXR1cm4geyAuLi5iYXNlLCB0eXBlOiAnYm9vbGVhbicgfTtcblxuICAgIGNhc2UgJ2xpdGVyYWwnOiB7XG4gICAgICAvLyBab2QgdjQ6IF9kZWYudmFsdWVzIGlzIGFuIGFycmF5IG9mIGxpdGVyYWwgdmFsdWVzXG4gICAgICBjb25zdCB2YWx1ZXMgPSBkZWYudmFsdWVzIGFzIHVua25vd25bXSB8IHVuZGVmaW5lZDtcbiAgICAgIGlmICh2YWx1ZXMgJiYgdmFsdWVzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICByZXR1cm4geyAuLi5iYXNlLCB0eXBlOiB0eXBlb2YgdmFsdWVzWzBdLCBlbnVtOiB2YWx1ZXMgfTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7IC4uLmJhc2UsIGVudW06IHZhbHVlcyA/PyBbXSB9O1xuICAgIH1cblxuICAgIGNhc2UgJ2VudW0nOiB7XG4gICAgICAvLyBab2QgdjQ6IF9kZWYuZW50cmllcyBpcyB7IGtleTogdmFsdWUgfSBvYmplY3RcbiAgICAgIGNvbnN0IGVudHJpZXMgPSBkZWYuZW50cmllcyBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IHVuZGVmaW5lZDtcbiAgICAgIGNvbnN0IHZhbHVlcyA9IGVudHJpZXMgPyBPYmplY3QudmFsdWVzKGVudHJpZXMpIDogW107XG4gICAgICByZXR1cm4geyAuLi5iYXNlLCB0eXBlOiAnc3RyaW5nJywgZW51bTogdmFsdWVzIH07XG4gICAgfVxuXG4gICAgY2FzZSAnYXJyYXknOiB7XG4gICAgICAvLyBab2QgdjQ6IF9kZWYuZWxlbWVudCBpcyB0aGUgaW5uZXIgc2NoZW1hIG9iamVjdFxuICAgICAgY29uc3QgZWxlbWVudCA9IGRlZi5lbGVtZW50IGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgdW5kZWZpbmVkO1xuICAgICAgY29uc3QgZWxlbWVudERlZiA9IGVsZW1lbnQgPyBnZXREZWYoZWxlbWVudCkgOiB1bmRlZmluZWQ7XG4gICAgICBjb25zdCBpdGVtcyA9IGVsZW1lbnREZWYgPyB6b2REZWZUb0pzb25TY2hlbWEoZWxlbWVudERlZiwgZWxlbWVudCkgOiB7fTtcbiAgICAgIHJldHVybiB7IC4uLmJhc2UsIHR5cGU6ICdhcnJheScsIGl0ZW1zIH07XG4gICAgfVxuXG4gICAgY2FzZSAnb2JqZWN0Jzoge1xuICAgICAgLy8gWm9kIHY0OiBfZGVmLnNoYXBlIGlzIGEgZGlyZWN0IG9iamVjdCAobm90IGEgZnVuY3Rpb24pXG4gICAgICBjb25zdCBzaGFwZSA9IGRlZi5zaGFwZSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IHVuZGVmaW5lZDtcbiAgICAgIGlmICghc2hhcGUpIHJldHVybiB7IC4uLmJhc2UsIHR5cGU6ICdvYmplY3QnIH07XG5cbiAgICAgIGNvbnN0IHByb3BlcnRpZXM6IFJlY29yZDxzdHJpbmcsIEpzb25TY2hlbWE+ID0ge307XG4gICAgICBjb25zdCByZXF1aXJlZDogc3RyaW5nW10gPSBbXTtcblxuICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoc2hhcGUpKSB7XG4gICAgICAgIGNvbnN0IGZpZWxkU2NoZW1hID0gdmFsdWUgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgICAgIGNvbnN0IGZpZWxkRGVmID0gZ2V0RGVmKGZpZWxkU2NoZW1hKTtcbiAgICAgICAgaWYgKGZpZWxkRGVmKSB7XG4gICAgICAgICAgLy8gQ2hlY2sgaWYgZmllbGQgaXMgb3B0aW9uYWwgb3IgaGFzIGRlZmF1bHRcbiAgICAgICAgICBpZiAoZmllbGREZWYudHlwZSA9PT0gJ29wdGlvbmFsJyB8fCBmaWVsZERlZi50eXBlID09PSAnZGVmYXVsdCcpIHtcbiAgICAgICAgICAgIGNvbnN0IGlubmVyID0gZmllbGREZWYuaW5uZXJUeXBlIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgdW5kZWZpbmVkO1xuICAgICAgICAgICAgY29uc3QgaW5uZXJEZWYgPSBpbm5lciA/IGdldERlZihpbm5lcikgOiB1bmRlZmluZWQ7XG4gICAgICAgICAgICBpZiAoaW5uZXJEZWYpIHtcbiAgICAgICAgICAgICAgY29uc3Qgc2NoZW1hID0gem9kRGVmVG9Kc29uU2NoZW1hKGlubmVyRGVmLCBpbm5lcik7XG4gICAgICAgICAgICAgIGlmIChmaWVsZERlZi50eXBlID09PSAnZGVmYXVsdCcgJiYgZmllbGREZWYuZGVmYXVsdFZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBzY2hlbWEuZGVmYXVsdCA9IGZpZWxkRGVmLmRlZmF1bHRWYWx1ZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBwcm9wZXJ0aWVzW2tleV0gPSBzY2hlbWE7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBwcm9wZXJ0aWVzW2tleV0gPSB7fTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcHJvcGVydGllc1trZXldID0gem9kRGVmVG9Kc29uU2NoZW1hKGZpZWxkRGVmLCBmaWVsZFNjaGVtYSk7XG4gICAgICAgICAgICByZXF1aXJlZC5wdXNoKGtleSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLmJhc2UsXG4gICAgICAgIHR5cGU6ICdvYmplY3QnLFxuICAgICAgICBwcm9wZXJ0aWVzLFxuICAgICAgICAuLi4ocmVxdWlyZWQubGVuZ3RoID4gMCA/IHsgcmVxdWlyZWQgfSA6IHt9KSxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgY2FzZSAnb3B0aW9uYWwnOiB7XG4gICAgICBjb25zdCBpbm5lciA9IGRlZi5pbm5lclR5cGUgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCB1bmRlZmluZWQ7XG4gICAgICBjb25zdCBpbm5lckRlZiA9IGlubmVyID8gZ2V0RGVmKGlubmVyKSA6IHVuZGVmaW5lZDtcbiAgICAgIHJldHVybiBpbm5lckRlZiA/IHpvZERlZlRvSnNvblNjaGVtYShpbm5lckRlZiwgaW5uZXIpIDogYmFzZTtcbiAgICB9XG5cbiAgICBjYXNlICdkZWZhdWx0Jzoge1xuICAgICAgY29uc3QgaW5uZXIgPSBkZWYuaW5uZXJUeXBlIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgdW5kZWZpbmVkO1xuICAgICAgY29uc3QgaW5uZXJEZWYgPSBpbm5lciA/IGdldERlZihpbm5lcikgOiB1bmRlZmluZWQ7XG4gICAgICBjb25zdCBzY2hlbWEgPSBpbm5lckRlZiA/IHpvZERlZlRvSnNvblNjaGVtYShpbm5lckRlZiwgaW5uZXIpIDogYmFzZTtcbiAgICAgIGlmIChkZWYuZGVmYXVsdFZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgc2NoZW1hLmRlZmF1bHQgPSBkZWYuZGVmYXVsdFZhbHVlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHNjaGVtYTtcbiAgICB9XG5cbiAgICBjYXNlICdudWxsYWJsZSc6IHtcbiAgICAgIGNvbnN0IGlubmVyID0gZGVmLmlubmVyVHlwZSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IHVuZGVmaW5lZDtcbiAgICAgIGNvbnN0IGlubmVyRGVmID0gaW5uZXIgPyBnZXREZWYoaW5uZXIpIDogdW5kZWZpbmVkO1xuICAgICAgY29uc3Qgc2NoZW1hID0gaW5uZXJEZWYgPyB6b2REZWZUb0pzb25TY2hlbWEoaW5uZXJEZWYsIGlubmVyKSA6IHt9O1xuICAgICAgcmV0dXJuIHsgLi4uYmFzZSwgb25lT2Y6IFtzY2hlbWEsIHsgdHlwZTogJ251bGwnIH1dIH07XG4gICAgfVxuXG4gICAgY2FzZSAndW5pb24nOiB7XG4gICAgICBjb25zdCBvcHRpb25zID0gZGVmLm9wdGlvbnMgYXMgQXJyYXk8UmVjb3JkPHN0cmluZywgdW5rbm93bj4+IHwgdW5kZWZpbmVkO1xuICAgICAgaWYgKCFvcHRpb25zKSByZXR1cm4gYmFzZTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLmJhc2UsXG4gICAgICAgIG9uZU9mOiBvcHRpb25zXG4gICAgICAgICAgLm1hcCgobykgPT4ge1xuICAgICAgICAgICAgY29uc3Qgb0RlZiA9IGdldERlZihvKTtcbiAgICAgICAgICAgIHJldHVybiBvRGVmID8gem9kRGVmVG9Kc29uU2NoZW1hKG9EZWYsIG8pIDogbnVsbDtcbiAgICAgICAgICB9KVxuICAgICAgICAgIC5maWx0ZXIoKHMpOiBzIGlzIEpzb25TY2hlbWEgPT4gcyAhPT0gbnVsbCksXG4gICAgICB9O1xuICAgIH1cblxuICAgIGNhc2UgJ3JlY29yZCc6IHtcbiAgICAgIC8vIFpvZCB2NDogX2RlZi52YWx1ZVR5cGUgaXMgdGhlIHZhbHVlIHNjaGVtYVxuICAgICAgY29uc3QgdmFsdWVUeXBlID0gZGVmLnZhbHVlVHlwZSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IHVuZGVmaW5lZDtcbiAgICAgIGNvbnN0IHZhbHVlRGVmID0gdmFsdWVUeXBlID8gZ2V0RGVmKHZhbHVlVHlwZSkgOiB1bmRlZmluZWQ7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5iYXNlLFxuICAgICAgICB0eXBlOiAnb2JqZWN0JyxcbiAgICAgICAgYWRkaXRpb25hbFByb3BlcnRpZXM6IHZhbHVlRGVmID8gem9kRGVmVG9Kc29uU2NoZW1hKHZhbHVlRGVmLCB2YWx1ZVR5cGUpIDogdHJ1ZSxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgY2FzZSAnYW55JzpcbiAgICAgIHJldHVybiBiYXNlO1xuXG4gICAgY2FzZSAncGlwZSc6IHtcbiAgICAgIC8vIFpvZCB2NDogLnRyYW5zZm9ybSgpIC8gLnJlZmluZSgpIOKAlCB1bndyYXAgdG8gaW5wdXQgc2NoZW1hXG4gICAgICBjb25zdCBpbm5lciA9IGRlZi5pbiBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IHVuZGVmaW5lZDtcbiAgICAgIGNvbnN0IGlubmVyRGVmID0gaW5uZXIgPyBnZXREZWYoaW5uZXIpIDogdW5kZWZpbmVkO1xuICAgICAgcmV0dXJuIGlubmVyRGVmID8gem9kRGVmVG9Kc29uU2NoZW1hKGlubmVyRGVmLCBpbm5lcikgOiBiYXNlO1xuICAgIH1cblxuICAgIGRlZmF1bHQ6XG4gICAgICAvLyBVbmtub3duIFpvZCB0eXBlIOKAlCByZXR1cm4gZW1wdHkgc2NoZW1hXG4gICAgICByZXR1cm4gYmFzZTtcbiAgfVxufVxuXG4vKiogQ29udmVydCBhIFpvZCBzY2hlbWEgb2JqZWN0IHRvIEpTT04gU2NoZW1hLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHpvZFRvSnNvblNjaGVtYSh6b2RTY2hlbWE6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogSnNvblNjaGVtYSB7XG4gIGNvbnN0IGRlZiA9IGdldERlZih6b2RTY2hlbWEpO1xuICBpZiAoIWRlZikgcmV0dXJuIHt9O1xuICByZXR1cm4gem9kRGVmVG9Kc29uU2NoZW1hKGRlZiwgem9kU2NoZW1hKTtcbn1cblxuLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4vLyBOb3JtYWxpemUg4oCUIGFjY2VwdHMgZWl0aGVyIFpvZCBvciBKU09OIFNjaGVtYSwgcmV0dXJucyBKU09OIFNjaGVtYVxuLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbmV4cG9ydCBmdW5jdGlvbiBub3JtYWxpemVTY2hlbWEoaW5wdXQ6IFNjaGVtYUlucHV0KTogSnNvblNjaGVtYSB7XG4gIGlmIChpc1pvZChpbnB1dCkpIHtcbiAgICByZXR1cm4gem9kVG9Kc29uU2NoZW1hKGlucHV0IGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KTtcbiAgfVxuICAvLyBBbHJlYWR5IGEgSlNPTiBTY2hlbWFcbiAgcmV0dXJuIGlucHV0IGFzIEpzb25TY2hlbWE7XG59XG4iXX0=
|
|
297
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NoZW1hLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9jb250cmFjdC9zY2hlbWEudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7O0dBUUc7QUFFSCxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFHNUMsZ0ZBQWdGO0FBQ2hGLHdEQUF3RDtBQUN4RCxnRkFBZ0Y7QUFFaEYsZ0ZBQWdGO0FBQ2hGLDREQUE0RDtBQUM1RCxnRkFBZ0Y7QUFFaEY7Ozs7R0FJRztBQUNILFNBQVMsTUFBTSxDQUFDLFNBQWtDO0lBQ2hELDJDQUEyQztJQUMzQyxJQUFJLFNBQVMsQ0FBQyxHQUFHLElBQUksT0FBTyxTQUFTLENBQUMsR0FBRyxLQUFLLFFBQVEsRUFBRSxDQUFDO1FBQ3ZELE9BQU8sU0FBUyxDQUFDLEdBQThCLENBQUM7SUFDbEQsQ0FBQztJQUNELDZEQUE2RDtJQUM3RCxnRUFBZ0U7SUFDaEUsaUVBQWlFO0lBQ2pFLElBQUksU0FBUyxDQUFDLElBQUksSUFBSSxPQUFPLFNBQVMsQ0FBQyxJQUFJLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDekQsT0FBTyxjQUFjLENBQUMsU0FBUyxDQUFDLElBQStCLENBQUMsQ0FBQztJQUNuRSxDQUFDO0lBQ0QsT0FBTyxTQUFTLENBQUM7QUFDbkIsQ0FBQztBQUVELHdFQUF3RTtBQUN4RSxxRUFBcUU7QUFDckUsaUVBQWlFO0FBQ2pFLE1BQU0sV0FBVyxHQUEyQjtJQUMxQyxTQUFTLEVBQUUsUUFBUTtJQUNuQixTQUFTLEVBQUUsUUFBUTtJQUNuQixVQUFVLEVBQUUsU0FBUztJQUNyQixVQUFVLEVBQUUsU0FBUztJQUNyQixPQUFPLEVBQUUsTUFBTTtJQUNmLGFBQWEsRUFBRSxNQUFNO0lBQ3JCLFFBQVEsRUFBRSxPQUFPO0lBQ2pCLFNBQVMsRUFBRSxRQUFRO0lBQ25CLFdBQVcsRUFBRSxVQUFVO0lBQ3ZCLFVBQVUsRUFBRSxTQUFTO0lBQ3JC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QUssQ0FBQyxFQUFFLENBQUM7UUFDakIsT0FBTyxlQUFlLENBQUMsS0FBZ0MsQ0FBQyxDQUFDO0lBQzNELENBQUM7SUFDRCx3QkFBd0I7SUFDeEIsT0FBTyxLQUFtQixDQUFDO0FBQzdCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIGNvbnRyYWN0L3NjaGVtYS50cyDigJQgU2NoZW1hIG5vcm1hbGl6YXRpb24gdXRpbGl0aWVzLlxuICpcbiAqIENvbnZlcnRzIFpvZCBzY2hlbWFzIG9yIHJhdyBKU09OIFNjaGVtYSBvYmplY3RzIGludG8gYSBub3JtYWxpemVkXG4gKiBKc29uU2NoZW1hIGZvcm1hdC4gRGV0ZWN0aW9uIGRlbGVnYXRlZCB0byBzY2hlbWEvZGV0ZWN0LnRzIChzaW5nbGUgc291cmNlIG9mIHRydXRoKS5cbiAqXG4gKiBTdGFuZGFsb25lOiBubyBkZXBlbmRlbmN5IG9uIFpvZCBhdCBpbXBvcnQgdGltZS5cbiAqIENvbXBhdGlibGUgd2l0aCBab2QgdjQgaW50ZXJuYWxzLlxuICovXG5cbmltcG9ydCB7IGlzWm9kIH0gZnJvbSAnLi4vc2NoZW1hL2RldGVjdC5qcyc7XG5pbXBvcnQgdHlwZSB7IEpzb25TY2hlbWEsIFNjaGVtYUlucHV0IH0gZnJvbSAnLi90eXBlcy5qcyc7XG5cbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuLy8gWm9kIERldGVjdGlvbiDigJQgZGVsZWdhdGVzIHRvIHVuaWZpZWQgc2NoZW1hL2RldGVjdC50c1xuLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuLy8gWm9kIHY0IOKGkiBKU09OIFNjaGVtYSAobWluaW1hbCBjb252ZXJ0ZXIgZm9yIGNvbW1vbiB0eXBlcylcbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4vKipcbiAqIEdldCB0aGUgZGVmIG9iamVjdCBmcm9tIGEgWm9kIHNjaGVtYS5cbiAqIEluIFpvZCB2NCwgdG9wLWxldmVsIHNjaGVtYXMgaGF2ZSBgLmRlZmAsIGlubmVyIHR5cGVzIGFjY2Vzc2VkIHZpYVxuICogYF9kZWZgIG9yIGAuZGVmYCBkZXBlbmRpbmcgb24gY29udGV4dC5cbiAqL1xuZnVuY3Rpb24gZ2V0RGVmKHpvZFNjaGVtYTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IHVuZGVmaW5lZCB7XG4gIC8vIFRvcC1sZXZlbCBab2QgdjQgc2NoZW1hOiBgLmRlZmAgcHJvcGVydHlcbiAgaWYgKHpvZFNjaGVtYS5kZWYgJiYgdHlwZW9mIHpvZFNjaGVtYS5kZWYgPT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIHpvZFNjaGVtYS5kZWYgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIH1cbiAgLy8gWm9kIHYzIChhbmQgWm9kIHY0IGlubmVyIHR5cGVzKTogYC5fZGVmYCBwcm9wZXJ0eS4gdjMgdXNlc1xuICAvLyBgdHlwZU5hbWU6ICdab2RTdHJpbmcnYCBldGMuOyB3ZSBub3JtYWxpemUgdG8gdjQtc2hhcGUgYHR5cGU6XG4gIC8vICdzdHJpbmcnYCBzbyB0aGUgcmVzdCBvZiB0aGUgY29udmVydGVyIGRvZXNuJ3QgaGF2ZSB0byBicmFuY2guXG4gIGlmICh6b2RTY2hlbWEuX2RlZiAmJiB0eXBlb2Ygem9kU2NoZW1hLl9kZWYgPT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIG5vcm1hbGl6ZVYzRGVmKHpvZFNjaGVtYS5fZGVmIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KTtcbiAgfVxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG4vLyBNYXAgWm9kIHYzIHR5cGVOYW1lICgnWm9kU3RyaW5nJywgJ1pvZEFycmF5JywgLi4uKSB0byBab2QgdjQgdHlwZSB0YWdcbi8vICgnc3RyaW5nJywgJ2FycmF5JywgLi4uKS4gSWRlbXBvdGVudCDigJQgaWYgZGVmIGFscmVhZHkgaGFzIHY0LXNoYXBlXG4vLyBgLnR5cGVgLCByZXR1cm5zIGFzLWlzLiBOZXcgdjMgdHlwZU5hbWVzIGFkZGVkIGhlcmUgYXMgbmVlZGVkLlxuY29uc3QgVjNfVFlQRV9UQUc6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gIFpvZFN0cmluZzogJ3N0cmluZycsXG4gIFpvZE51bWJlcjogJ251bWJlcicsXG4gIFpvZEJvb2xlYW46ICdib29sZWFuJyxcbiAgWm9kTGl0ZXJhbDogJ2xpdGVyYWwnLFxuICBab2RFbnVtOiAnZW51bScsXG4gIFpvZE5hdGl2ZUVudW06ICdlbnVtJyxcbiAgWm9kQXJyYXk6ICdhcnJheScsXG4gIFpvZE9iamVjdDogJ29iamVjdCcsXG4gIFpvZE9wdGlvbmFsOiAnb3B0aW9uYWwnLFxuICBab2REZWZhdWx0OiAnZGVmYXVsdCcsXG4gIFpvZE51bGxhYmxlOiAnbnVsbGFibGUnLFxuICBab2RVbmlvbjogJ3VuaW9uJyxcbiAgWm9kUmVjb3JkOiAncmVjb3JkJyxcbiAgWm9kRWZmZWN0czogJ3RyYW5zZm9ybScsXG4gIFpvZFBpcGVsaW5lOiAncGlwZScsXG59O1xuXG5mdW5jdGlvbiBub3JtYWxpemVWM0RlZihkZWY6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4ge1xuICAvLyBBbHJlYWR5IHY0LXNoYXBlPyBQYXNzIHRocm91Z2guXG4gIGlmICh0eXBlb2YgZGVmLnR5cGUgPT09ICdzdHJpbmcnKSByZXR1cm4gZGVmO1xuXG4gIGNvbnN0IHRuID0gZGVmLnR5cGVOYW1lIGFzIHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgaWYgKCF0bikgcmV0dXJuIGRlZjtcbiAgY29uc3QgdjRUeXBlID0gVjNfVFlQRV9UQUdbdG5dO1xuICBpZiAoIXY0VHlwZSkgcmV0dXJuIGRlZjtcblxuICAvLyBGb3IgWm9kQXJyYXk6IGluIHYzLCBgZGVmLnR5cGVgIElTIHRoZSBlbGVtZW50IHNjaGVtYS4gV2UgbXVzdFxuICAvLyBDQVBUVVJFIGl0IGFzIGBkZWYuZWxlbWVudGAgQkVGT1JFIHNwcmVhZGluZywgb3RoZXJ3aXNlIG91clxuICAvLyBvdmVyd3JpdGUgb2YgYHR5cGVgICh0byB0aGUgdjQgdGFnKSBkZXN0cm95cyBpdC5cbiAgY29uc3Qgb3V0OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHsgLi4uZGVmIH07XG4gIGlmICh0biA9PT0gJ1pvZEFycmF5JyAmJiBkZWYudHlwZSAmJiB0eXBlb2YgZGVmLnR5cGUgPT09ICdvYmplY3QnKSB7XG4gICAgb3V0LmVsZW1lbnQgPSBkZWYudHlwZTtcbiAgfVxuICBvdXQudHlwZSA9IHY0VHlwZTtcblxuICBzd2l0Y2ggKHRuKSB7XG4gICAgY2FzZSAnWm9kTGl0ZXJhbCc6IHtcbiAgICAgIC8vIHYzIGB2YWx1ZWAgKHNpbmdsZSkg4oaSIHY0IGB2YWx1ZXNgIChhcnJheSkuXG4gICAgICBpZiAoT2JqZWN0Lmhhc093bihkZWYsICd2YWx1ZScpICYmICFPYmplY3QuaGFzT3duKGRlZiwgJ3ZhbHVlcycpKSBvdXQudmFsdWVzID0gW2RlZi52YWx1ZV07XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgY2FzZSAnWm9kRW51bSc6IHtcbiAgICAgIC8vIHYzIGB2YWx1ZXM6IHN0cmluZ1tdYCDihpIgdjQgYGVudHJpZXM6IHsga2V5OiB2YWx1ZSB9YC5cbiAgICAgIGNvbnN0IHZhbHVlcyA9IGRlZi52YWx1ZXMgYXMgdW5rbm93bltdIHwgdW5kZWZpbmVkO1xuICAgICAgaWYgKHZhbHVlcyAmJiBBcnJheS5pc0FycmF5KHZhbHVlcykgJiYgIU9iamVjdC5oYXNPd24oZGVmLCAnZW50cmllcycpKSB7XG4gICAgICAgIG91dC5lbnRyaWVzID0gT2JqZWN0LmZyb21FbnRyaWVzKHZhbHVlcy5tYXAoKHYpID0+IFtTdHJpbmcodiksIHZdKSk7XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgY2FzZSAnWm9kTmF0aXZlRW51bSc6IHtcbiAgICAgIGNvbnN0IHZhbHVlcyA9IGRlZi52YWx1ZXMgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCB1bmRlZmluZWQ7XG4gICAgICBpZiAodmFsdWVzICYmIHR5cGVvZiB2YWx1ZXMgPT09ICdvYmplY3QnICYmICFPYmplY3QuaGFzT3duKGRlZiwgJ2VudHJpZXMnKSkgb3V0LmVudHJpZXMgPSB2YWx1ZXM7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgY2FzZSAnWm9kT2JqZWN0Jzoge1xuICAgICAgLy8gdjMgYHNoYXBlOiAoKSA9PiBSZWNvcmQ8c3RyaW5nLCBab2RUeXBlPmAg4oaSIHY0IGBzaGFwZTogUmVjb3JkYC5cbiAgICAgIGlmICh0eXBlb2YgZGVmLnNoYXBlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIG91dC5zaGFwZSA9IChkZWYuc2hhcGUgYXMgKCkgPT4gUmVjb3JkPHN0cmluZywgdW5rbm93bj4pKCk7XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgY2FzZSAnWm9kRWZmZWN0cyc6IHtcbiAgICAgIC8vIHYzIGBzY2hlbWFgIOKGkiB2NCBgaW5uZXJgIC8gYGlubmVyVHlwZWAuXG4gICAgICBpZiAoT2JqZWN0Lmhhc093bihkZWYsICdzY2hlbWEnKSAmJiAhT2JqZWN0Lmhhc093bihkZWYsICdpbm5lclR5cGUnKSAmJiAhT2JqZWN0Lmhhc093bihkZWYsICdpbm5lcicpKSB7XG4gICAgICAgIG91dC5pbm5lclR5cGUgPSBkZWYuc2NoZW1hO1xuICAgICAgICBvdXQuaW5uZXIgPSBkZWYuc2NoZW1hO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGNhc2UgJ1pvZERlZmF1bHQnOiB7XG4gICAgICAvLyB2MyBgZGVmYXVsdFZhbHVlOiAoKSA9PiB1bmtub3duYCAoZnVuY3Rpb24pIOKGkiB2NCByYXcgdmFsdWUuXG4gICAgICBpZiAodHlwZW9mIGRlZi5kZWZhdWx0VmFsdWUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBvdXQuZGVmYXVsdFZhbHVlID0gKGRlZi5kZWZhdWx0VmFsdWUgYXMgKCkgPT4gdW5rbm93bikoKTtcbiAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgLyogZmFsbCB0aHJvdWdoIHdpdGggb3JpZ2luYWwgKi9cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGNhc2UgJ1pvZFVuaW9uJzoge1xuICAgICAgLy8gdjMgYG9wdGlvbnM6IFpvZFR5cGVbXWAg4oaSIHY0IGBvcHRpb25zOiBab2RUeXBlW11gIChzYW1lIG5hbWUpLlxuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGNhc2UgJ1pvZFJlY29yZCc6IHtcbiAgICAgIC8vIHYzIGBrZXlUeXBlYCAvIGB2YWx1ZVR5cGVgIOKGkiBzYW1lIG5hbWVzIGluIHY0LlxuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGNhc2UgJ1pvZFBpcGVsaW5lJzoge1xuICAgICAgLy8gdjMgYGluYCAvIGBvdXRgIOKGkiB2NCBsaWtlbHkgc2FtZTsgcGFzc3Rocm91Z2guXG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICByZXR1cm4gb3V0O1xufVxuXG4vKiogR2V0IGRlc2NyaXB0aW9uIGZyb20gYSBab2QgdjQgc2NoZW1hIChzdG9yZWQgdmlhIC5kZXNjcmlwdGlvbiBvciAubWV0YSgpKSAqL1xuZnVuY3Rpb24gZ2V0RGVzY3JpcHRpb24oem9kU2NoZW1hOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGlmICh0eXBlb2Ygem9kU2NoZW1hLmRlc2NyaXB0aW9uID09PSAnc3RyaW5nJykgcmV0dXJuIHpvZFNjaGVtYS5kZXNjcmlwdGlvbjtcbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gem9kRGVmVG9Kc29uU2NoZW1hKGRlZjogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sIHpvZFNjaGVtYT86IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogSnNvblNjaGVtYSB7XG4gIGNvbnN0IHR5cGVOYW1lID0gZGVmLnR5cGUgYXMgc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBjb25zdCBkZXNjcmlwdGlvbiA9IHpvZFNjaGVtYSA/IGdldERlc2NyaXB0aW9uKHpvZFNjaGVtYSkgOiB1bmRlZmluZWQ7XG4gIGNvbnN0IGJhc2U6IEpzb25TY2hlbWEgPSB7fTtcbiAgaWYgKGRlc2NyaXB0aW9uKSBiYXNlLmRlc2NyaXB0aW9uID0gZGVzY3JpcHRpb247XG5cbiAgc3dpdGNoICh0eXBlTmFtZSkge1xuICAgIGNhc2UgJ3N0cmluZyc6XG4gICAgICByZXR1cm4geyAuLi5iYXNlLCB0eXBlOiAnc3RyaW5nJyB9O1xuXG4gICAgY2FzZSAnbnVtYmVyJzpcbiAgICAgIHJldHVybiB7IC4uLmJhc2UsIHR5cGU6ICdudW1iZXInIH07XG5cbiAgICBjYXNlICdib29sZWFuJzpcbiAgICAgIHJldHVybiB7IC4uLmJhc2UsIHR5cGU6ICdib29sZWFuJyB9O1xuXG4gICAgY2FzZSAnbGl0ZXJhbCc6IHtcbiAgICAgIC8vIFpvZCB2NDogX2RlZi52YWx1ZXMgaXMgYW4gYXJyYXkgb2YgbGl0ZXJhbCB2YWx1ZXNcbiAgICAgIGNvbnN0IHZhbHVlcyA9IGRlZi52YWx1ZXMgYXMgdW5rbm93bltdIHwgdW5kZWZpbmVkO1xuICAgICAgaWYgKHZhbHVlcyAmJiB2YWx1ZXMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIHJldHVybiB7IC4uLmJhc2UsIHR5cGU6IHR5cGVvZiB2YWx1ZXNbMF0sIGVudW06IHZhbHVlcyB9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHsgLi4uYmFzZSwgZW51bTogdmFsdWVzID8/IFtdIH07XG4gICAgfVxuXG4gICAgY2FzZSAnZW51bSc6IHtcbiAgICAgIC8vIFpvZCB2NDogX2RlZi5lbnRyaWVzIGlzIHsga2V5OiB2YWx1ZSB9IG9iamVjdFxuICAgICAgY29uc3QgZW50cmllcyA9IGRlZi5lbnRyaWVzIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgdW5kZWZpbmVkO1xuICAgICAgY29uc3QgdmFsdWVzID0gZW50cmllcyA/IE9iamVjdC52YWx1ZXMoZW50cmllcykgOiBbXTtcbiAgICAgIHJldHVybiB7IC4uLmJhc2UsIHR5cGU6ICdzdHJpbmcnLCBlbnVtOiB2YWx1ZXMgfTtcbiAgICB9XG5cbiAgICBjYXNlICdhcnJheSc6IHtcbiAgICAgIC8vIFpvZCB2NDogX2RlZi5lbGVtZW50IGlzIHRoZSBpbm5lciBzY2hlbWEgb2JqZWN0XG4gICAgICBjb25zdCBlbGVtZW50ID0gZGVmLmVsZW1lbnQgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCB1bmRlZmluZWQ7XG4gICAgICBjb25zdCBlbGVtZW50RGVmID0gZWxlbWVudCA/IGdldERlZihlbGVtZW50KSA6IHVuZGVmaW5lZDtcbiAgICAgIGNvbnN0IGl0ZW1zID0gZWxlbWVudERlZiA/IHpvZERlZlRvSnNvblNjaGVtYShlbGVtZW50RGVmLCBlbGVtZW50KSA6IHt9O1xuICAgICAgcmV0dXJuIHsgLi4uYmFzZSwgdHlwZTogJ2FycmF5JywgaXRlbXMgfTtcbiAgICB9XG5cbiAgICBjYXNlICdvYmplY3QnOiB7XG4gICAgICAvLyBab2QgdjQ6IF9kZWYuc2hhcGUgaXMgYSBkaXJlY3Qgb2JqZWN0IChub3QgYSBmdW5jdGlvbilcbiAgICAgIGNvbnN0IHNoYXBlID0gZGVmLnNoYXBlIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgdW5kZWZpbmVkO1xuICAgICAgaWYgKCFzaGFwZSkgcmV0dXJuIHsgLi4uYmFzZSwgdHlwZTogJ29iamVjdCcgfTtcblxuICAgICAgY29uc3QgcHJvcGVydGllczogUmVjb3JkPHN0cmluZywgSnNvblNjaGVtYT4gPSB7fTtcbiAgICAgIGNvbnN0IHJlcXVpcmVkOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhzaGFwZSkpIHtcbiAgICAgICAgY29uc3QgZmllbGRTY2hlbWEgPSB2YWx1ZSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICAgICAgY29uc3QgZmllbGREZWYgPSBnZXREZWYoZmllbGRTY2hlbWEpO1xuICAgICAgICBpZiAoZmllbGREZWYpIHtcbiAgICAgICAgICAvLyBDaGVjayBpZiBmaWVsZCBpcyBvcHRpb25hbCBvciBoYXMgZGVmYXVsdFxuICAgICAgICAgIGlmIChmaWVsZERlZi50eXBlID09PSAnb3B0aW9uYWwnIHx8IGZpZWxkRGVmLnR5cGUgPT09ICdkZWZhdWx0Jykge1xuICAgICAgICAgICAgY29uc3QgaW5uZXIgPSBmaWVsZERlZi5pbm5lclR5cGUgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCB1bmRlZmluZWQ7XG4gICAgICAgICAgICBjb25zdCBpbm5lckRlZiA9IGlubmVyID8gZ2V0RGVmKGlubmVyKSA6IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIGlmIChpbm5lckRlZikge1xuICAgICAgICAgICAgICBjb25zdCBzY2hlbWEgPSB6b2REZWZUb0pzb25TY2hlbWEoaW5uZXJEZWYsIGlubmVyKTtcbiAgICAgICAgICAgICAgaWYgKGZpZWxkRGVmLnR5cGUgPT09ICdkZWZhdWx0JyAmJiBmaWVsZERlZi5kZWZhdWx0VmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHNjaGVtYS5kZWZhdWx0ID0gZmllbGREZWYuZGVmYXVsdFZhbHVlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHByb3BlcnRpZXNba2V5XSA9IHNjaGVtYTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHByb3BlcnRpZXNba2V5XSA9IHt9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwcm9wZXJ0aWVzW2tleV0gPSB6b2REZWZUb0pzb25TY2hlbWEoZmllbGREZWYsIGZpZWxkU2NoZW1hKTtcbiAgICAgICAgICAgIHJlcXVpcmVkLnB1c2goa2V5KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uYmFzZSxcbiAgICAgICAgdHlwZTogJ29iamVjdCcsXG4gICAgICAgIHByb3BlcnRpZXMsXG4gICAgICAgIC4uLihyZXF1aXJlZC5sZW5ndGggPiAwID8geyByZXF1aXJlZCB9IDoge30pLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBjYXNlICdvcHRpb25hbCc6IHtcbiAgICAgIGNvbnN0IGlubmVyID0gZGVmLmlubmVyVHlwZSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IHVuZGVmaW5lZDtcbiAgICAgIGNvbnN0IGlubmVyRGVmID0gaW5uZXIgPyBnZXREZWYoaW5uZXIpIDogdW5kZWZpbmVkO1xuICAgICAgcmV0dXJuIGlubmVyRGVmID8gem9kRGVmVG9Kc29uU2NoZW1hKGlubmVyRGVmLCBpbm5lcikgOiBiYXNlO1xuICAgIH1cblxuICAgIGNhc2UgJ2RlZmF1bHQnOiB7XG4gICAgICBjb25zdCBpbm5lciA9IGRlZi5pbm5lclR5cGUgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCB1bmRlZmluZWQ7XG4gICAgICBjb25zdCBpbm5lckRlZiA9IGlubmVyID8gZ2V0RGVmKGlubmVyKSA6IHVuZGVmaW5lZDtcbiAgICAgIGNvbnN0IHNjaGVtYSA9IGlubmVyRGVmID8gem9kRGVmVG9Kc29uU2NoZW1hKGlubmVyRGVmLCBpbm5lcikgOiBiYXNlO1xuICAgICAgaWYgKGRlZi5kZWZhdWx0VmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBzY2hlbWEuZGVmYXVsdCA9IGRlZi5kZWZhdWx0VmFsdWU7XG4gICAgICB9XG4gICAgICByZXR1cm4gc2NoZW1hO1xuICAgIH1cblxuICAgIGNhc2UgJ251bGxhYmxlJzoge1xuICAgICAgY29uc3QgaW5uZXIgPSBkZWYuaW5uZXJUeXBlIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgdW5kZWZpbmVkO1xuICAgICAgY29uc3QgaW5uZXJEZWYgPSBpbm5lciA/IGdldERlZihpbm5lcikgOiB1bmRlZmluZWQ7XG4gICAgICBjb25zdCBzY2hlbWEgPSBpbm5lckRlZiA/IHpvZERlZlRvSnNvblNjaGVtYShpbm5lckRlZiwgaW5uZXIpIDoge307XG4gICAgICByZXR1cm4geyAuLi5iYXNlLCBvbmVPZjogW3NjaGVtYSwgeyB0eXBlOiAnbnVsbCcgfV0gfTtcbiAgICB9XG5cbiAgICBjYXNlICd1bmlvbic6IHtcbiAgICAgIGNvbnN0IG9wdGlvbnMgPSBkZWYub3B0aW9ucyBhcyBBcnJheTxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4gfCB1bmRlZmluZWQ7XG4gICAgICBpZiAoIW9wdGlvbnMpIHJldHVybiBiYXNlO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uYmFzZSxcbiAgICAgICAgb25lT2Y6IG9wdGlvbnNcbiAgICAgICAgICAubWFwKChvKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBvRGVmID0gZ2V0RGVmKG8pO1xuICAgICAgICAgICAgcmV0dXJuIG9EZWYgPyB6b2REZWZUb0pzb25TY2hlbWEob0RlZiwgbykgOiBudWxsO1xuICAgICAgICAgIH0pXG4gICAgICAgICAgLmZpbHRlcigocyk6IHMgaXMgSnNvblNjaGVtYSA9PiBzICE9PSBudWxsKSxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgY2FzZSAncmVjb3JkJzoge1xuICAgICAgLy8gWm9kIHY0OiBfZGVmLnZhbHVlVHlwZSBpcyB0aGUgdmFsdWUgc2NoZW1hXG4gICAgICBjb25zdCB2YWx1ZVR5cGUgPSBkZWYudmFsdWVUeXBlIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgdW5kZWZpbmVkO1xuICAgICAgY29uc3QgdmFsdWVEZWYgPSB2YWx1ZVR5cGUgPyBnZXREZWYodmFsdWVUeXBlKSA6IHVuZGVmaW5lZDtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLmJhc2UsXG4gICAgICAgIHR5cGU6ICdvYmplY3QnLFxuICAgICAgICBhZGRpdGlvbmFsUHJvcGVydGllczogdmFsdWVEZWYgPyB6b2REZWZUb0pzb25TY2hlbWEodmFsdWVEZWYsIHZhbHVlVHlwZSkgOiB0cnVlLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBjYXNlICdhbnknOlxuICAgICAgcmV0dXJuIGJhc2U7XG5cbiAgICBjYXNlICdwaXBlJzoge1xuICAgICAgLy8gWm9kIHY0OiAudHJhbnNmb3JtKCkgLyAucmVmaW5lKCkg4oCUIHVud3JhcCB0byBpbnB1dCBzY2hlbWFcbiAgICAgIGNvbnN0IGlubmVyID0gZGVmLmluIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgdW5kZWZpbmVkO1xuICAgICAgY29uc3QgaW5uZXJEZWYgPSBpbm5lciA/IGdldERlZihpbm5lcikgOiB1bmRlZmluZWQ7XG4gICAgICByZXR1cm4gaW5uZXJEZWYgPyB6b2REZWZUb0pzb25TY2hlbWEoaW5uZXJEZWYsIGlubmVyKSA6IGJhc2U7XG4gICAgfVxuXG4gICAgY2FzZSAndHJhbnNmb3JtJzoge1xuICAgICAgLy8gWm9kIHYzOiBab2RFZmZlY3RzICgudHJhbnNmb3JtIC8gLnJlZmluZSkg4oCUIHVud3JhcCB0byBpbnB1dFxuICAgICAgLy8gc2NoZW1hLiBPdXIgdjMgbm9ybWFsaXplciBjb3BpZXMgWm9kRWZmZWN0cydzIGAuc2NoZW1hYCBpbnRvXG4gICAgICAvLyBib3RoIGBpbm5lcmAgYW5kIGBpbm5lclR5cGVgIGZvciBkb3duc3RyZWFtIGxvb2t1cHMuXG4gICAgICBjb25zdCBpbm5lciA9IChkZWYuaW5uZXIgPz8gZGVmLmlubmVyVHlwZSkgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCB1bmRlZmluZWQ7XG4gICAgICBjb25zdCBpbm5lckRlZiA9IGlubmVyID8gZ2V0RGVmKGlubmVyKSA6IHVuZGVmaW5lZDtcbiAgICAgIHJldHVybiBpbm5lckRlZiA/IHpvZERlZlRvSnNvblNjaGVtYShpbm5lckRlZiwgaW5uZXIpIDogYmFzZTtcbiAgICB9XG5cbiAgICBkZWZhdWx0OlxuICAgICAgLy8gVW5rbm93biBab2QgdHlwZSDigJQgcmV0dXJuIGVtcHR5IHNjaGVtYVxuICAgICAgcmV0dXJuIGJhc2U7XG4gIH1cbn1cblxuLyoqIENvbnZlcnQgYSBab2Qgc2NoZW1hIG9iamVjdCB0byBKU09OIFNjaGVtYS4gKi9cbmV4cG9ydCBmdW5jdGlvbiB6b2RUb0pzb25TY2hlbWEoem9kU2NoZW1hOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IEpzb25TY2hlbWEge1xuICBjb25zdCBkZWYgPSBnZXREZWYoem9kU2NoZW1hKTtcbiAgaWYgKCFkZWYpIHJldHVybiB7fTtcbiAgcmV0dXJuIHpvZERlZlRvSnNvblNjaGVtYShkZWYsIHpvZFNjaGVtYSk7XG59XG5cbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuLy8gTm9ybWFsaXplIOKAlCBhY2NlcHRzIGVpdGhlciBab2Qgb3IgSlNPTiBTY2hlbWEsIHJldHVybnMgSlNPTiBTY2hlbWFcbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG5leHBvcnQgZnVuY3Rpb24gbm9ybWFsaXplU2NoZW1hKGlucHV0OiBTY2hlbWFJbnB1dCk6IEpzb25TY2hlbWEge1xuICBpZiAoaXNab2QoaW5wdXQpKSB7XG4gICAgcmV0dXJuIHpvZFRvSnNvblNjaGVtYShpbnB1dCBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik7XG4gIH1cbiAgLy8gQWxyZWFkeSBhIEpTT04gU2NoZW1hXG4gIHJldHVybiBpbnB1dCBhcyBKc29uU2NoZW1hO1xufVxuIl19
|
|
@@ -53,7 +53,6 @@ function getRedactedFn(scope) {
|
|
|
53
53
|
}
|
|
54
54
|
// -- evaluate a single rule --------------------------------------------------
|
|
55
55
|
function evaluateRule(scope, rule, index, attachFn, detachFn, valueFn, redactedFn) {
|
|
56
|
-
var _a;
|
|
57
56
|
if (typeof rule.when === 'function') {
|
|
58
57
|
// FUNCTION PATH: temp recorder captures reads (lazy — skip if no recorder support)
|
|
59
58
|
const hasRecorderSupport = Boolean(attachFn);
|
|
@@ -86,15 +85,15 @@ function evaluateRule(scope, rule, index, attachFn, detachFn, valueFn, redactedF
|
|
|
86
85
|
matched,
|
|
87
86
|
label: rule.label,
|
|
88
87
|
// Partial reads: if rule threw after some getValue() calls, collector holds reads up to the throw point
|
|
89
|
-
inputs:
|
|
88
|
+
inputs: collector?.getInputs() ?? [],
|
|
90
89
|
...(matchError !== undefined && { matchError }),
|
|
91
90
|
};
|
|
92
91
|
return evidence;
|
|
93
92
|
}
|
|
94
93
|
else {
|
|
95
94
|
// FILTER PATH: reads values directly via callbacks (no recorder); exceptions treated as non-match
|
|
96
|
-
const resolvedValueFn = valueFn
|
|
97
|
-
const resolvedRedactedFn = redactedFn
|
|
95
|
+
const resolvedValueFn = valueFn ?? (() => undefined);
|
|
96
|
+
const resolvedRedactedFn = redactedFn ?? (() => false);
|
|
98
97
|
let filterMatched = false;
|
|
99
98
|
let filterConditions = [];
|
|
100
99
|
let matchError;
|
|
@@ -197,4 +196,4 @@ export function select(scope, rules) {
|
|
|
197
196
|
};
|
|
198
197
|
return { branches: selectedBranches, [DECISION_RESULT]: true, evidence };
|
|
199
198
|
}
|
|
200
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVjaWRlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9kZWNpZGUvZGVjaWRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7R0FTRztBQUVILE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUV2RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDaEQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBYWxELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFFN0MsK0VBQStFO0FBRS9FLFNBQVMsV0FBVyxDQUFDLEtBQWM7SUFDakMsTUFBTSxDQUFDLEdBQUcsS0FBZ0MsQ0FBQztJQUMzQyxJQUFJLE9BQU8sQ0FBQyxDQUFDLGVBQWUsS0FBSyxVQUFVO1FBQUUsT0FBTyxDQUFDLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM5RSxJQUFJLE9BQU8sQ0FBQyxDQUFDLGNBQWMsS0FBSyxVQUFVO1FBQUUsT0FBTyxDQUFDLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM1RSxPQUFPLFNBQVMsQ0FBQztBQUNuQixDQUFDO0FBRUQsU0FBUyxXQUFXLENBQUMsS0FBYztJQUNqQyxNQUFNLENBQUMsR0FBRyxLQUFnQyxDQUFDO0lBQzNDLElBQUksT0FBTyxDQUFDLENBQUMsZUFBZSxLQUFLLFVBQVU7UUFBRSxPQUFPLENBQUMsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzlFLElBQUksT0FBTyxDQUFDLENBQUMsY0FBYyxLQUFLLFVBQVU7UUFBRSxPQUFPLENBQUMsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzVFLE9BQU8sU0FBUyxDQUFDO0FBQ25CLENBQUM7QUFFRCxTQUFTLFVBQVUs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O0lBQzFDLE1BQU0sZ0JBQWdCLEdBQWEsRUFBRSxDQUFDO0lBRXRDLEtBQUssTUFBTSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsSUFBSSxLQUFLLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQztRQUM1QyxNQUFNLFlBQVksR0FBRyxZQUFZLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFDL0YsY0FBYyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUVsQyxJQUFJLFlBQVksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUN6QixnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ25DLENBQUM7SUFDSCxDQUFDO0lBRUQsTUFBTSxRQUFRLEdBQXNCO1FBQ2xDLEtBQUssRUFBRSxjQUFjO1FBQ3JCLFFBQVEsRUFBRSxnQkFBZ0I7S0FDM0IsQ0FBQztJQUNGLE9BQU8sRUFBRSxRQUFRLEVBQUUsZ0JBQWdCLEVBQUUsQ0FBQyxlQUFlLENBQUMsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLENBQUM7QUFDM0UsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogZGVjaWRlL2RlY2lkZSAtLSBDb3JlIGRlY2lkZSgpIGFuZCBzZWxlY3QoKSBoZWxwZXIgZnVuY3Rpb25zLlxuICpcbiAqIGRlY2lkZSgpIGV2YWx1YXRlcyBydWxlcyBpbiBvcmRlciAoZmlyc3QtbWF0Y2gpIGFuZCByZXR1cm5zIGEgRGVjaXNpb25SZXN1bHQuXG4gKiBzZWxlY3QoKSBldmFsdWF0ZXMgQUxMIHJ1bGVzIGFuZCByZXR1cm5zIGEgU2VsZWN0aW9uUmVzdWx0IHdpdGggYWxsIG1hdGNoZXMuXG4gKlxuICogRWFjaCBydWxlJ3MgYHdoZW5gIGNhbiBiZTpcbiAqIC0gQSBmdW5jdGlvbjogKHMpID0+IHMuY3JlZGl0U2NvcmUgPiA3MDAgIChhdXRvLWNhcHR1cmVzIHJlYWRzIHZpYSB0ZW1wIHJlY29yZGVyKVxuICogLSBBIGZpbHRlcjogICB7IGNyZWRpdFNjb3JlOiB7IGd0OiA3MDAgfSB9IChjYXB0dXJlcyByZWFkcyArIG9wZXJhdG9ycyArIHRocmVzaG9sZHMpXG4gKi9cblxuaW1wb3J0IHsgaXNEZXZNb2RlIH0gZnJvbSAnLi4vc2NvcGUvZGV0ZWN0Q2lyY3VsYXIuanMnO1xuaW1wb3J0IHR5cGUgeyBSZWNvcmRlciB9IGZyb20gJy4uL3Njb3BlL3R5cGVzLmpzJztcbmltcG9ydCB7IGV2YWx1YXRlRmlsdGVyIH0gZnJvbSAnLi9ldmFsdWF0b3IuanMnO1xuaW1wb3J0IHsgRXZpZGVuY2VDb2xsZWN0b3IgfSBmcm9tICcuL2V2aWRlbmNlLmpzJztcbmltcG9ydCB0eXBlIHtcbiAgRGVjaWRlUnVsZSxcbiAgRGVjaXNpb25FdmlkZW5jZSxcbiAgRGVjaXNpb25SZXN1bHQsXG4gIEZpbHRlckNvbmRpdGlvbixcbiAgRmlsdGVyUnVsZUV2aWRlbmNlLFxuICBGdW5jdGlvblJ1bGVFdmlkZW5jZSxcbiAgUnVsZUV2aWRlbmNlLFxuICBTZWxlY3Rpb25FdmlkZW5jZSxcbiAgU2VsZWN0aW9uUmVzdWx0LFxuICBXaGVyZUZpbHRlcixcbn0gZnJvbSAnLi90eXBlcy5qcyc7XG5pbXBvcnQgeyBERUNJU0lPTl9SRVNVTFQgfSBmcm9tICcuL3R5cGVzLmpzJztcblxuLy8gLS0gU2NvcGUgYWNjZXNzb3IgaGVscGVycyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5mdW5jdGlvbiBnZXRBdHRhY2hGbihzY29wZTogdW5rbm93bik6ICgocjogUmVjb3JkZXIpID0+IHZvaWQpIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgcyA9IHNjb3BlIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICBpZiAodHlwZW9mIHMuJGF0dGFjaFJlY29yZGVyID09PSAnZnVuY3Rpb24nKSByZXR1cm4gcy4kYXR0YWNoUmVjb3JkZXIuYmluZChzKTtcbiAgaWYgKHR5cGVvZiBzLmF0dGFjaFJlY29yZGVyID09PSAnZnVuY3Rpb24nKSByZXR1cm4gcy5hdHRhY2hSZWNvcmRlci5iaW5kKHMpO1xuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiBnZXREZXRhY2hGbihzY29wZTogdW5rbm93bik6ICgoaWQ6IHN0cmluZykgPT4gdm9pZCkgfCB1bmRlZmluZWQge1xuICBjb25zdCBzID0gc2NvcGUgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIGlmICh0eXBlb2Ygcy4kZGV0YWNoUmVjb3JkZXIgPT09ICdmdW5jdGlvbicpIHJldHVybiBzLiRkZXRhY2hSZWNvcmRlci5iaW5kKHMpO1xuICBpZiAodHlwZW9mIHMuZGV0YWNoUmVjb3JkZXIgPT09ICdmdW5jdGlvbicpIHJldHVybiBzLmRldGFjaFJlY29yZGVyLmJpbmQocyk7XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGdldFZhbHVlRm4oc2NvcGU6IHVua25vd24pOiAoa2V5OiBzdHJpbmcpID0+IHVua25vd24ge1xuICBjb25zdCBzID0gc2NvcGUgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIC8vIENoZWNrICRnZXRWYWx1ZSBmaXJzdDogb24gVHlwZWRTY29wZSwgYWNjZXNzaW5nIC5nZXRWYWx1ZSB0cmlnZ2VycyBhIHNwdXJpb3VzXG4gIC8vIG9uUmVhZCBmb3Iga2V5IFwiZ2V0VmFsdWVcIiB2aWEgdGhlIFByb3h5IGdldCB0cmFwLiAkZ2V0VmFsdWUgcm91dGVzIHRocm91Z2hcbiAgLy8gU0NPUEVfTUVUSE9EX05BTUVTIGFuZCBhdm9pZHMgdGhlIHN0YXRlLXJlYWQgcGF0aC5cbiAgaWYgKHR5cGVvZiBzLiRnZXRWYWx1ZSA9PT0gJ2Z1bmN0aW9uJykgcmV0dXJuIHMuJGdldFZhbHVlLmJpbmQocyk7XG4gIGlmICh0eXBlb2Ygcy5nZXRWYWx1ZSA9PT0gJ2Z1bmN0aW9uJykgcmV0dXJuIHMuZ2V0VmFsdWUuYmluZChzKTtcbiAgcmV0dXJuICgpID0+IHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gZ2V0UmVkYWN0ZWRGbihzY29wZTogdW5rbm93bik6IChrZXk6IHN0cmluZykgPT4gYm9vbGVhbiB7XG4gIGNvbnN0IHMgPSBzY29wZSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgLy8gVHJ5ICR0b1JhdygpIGZpcnN0IChUeXBlZFNjb3BlKSwgdGhlbiBkaXJlY3RcbiAgY29uc3QgcmF3ID0gdHlwZW9mIHMuJHRvUmF3ID09PSAnZnVuY3Rpb24nID8gcy4kdG9SYXcoKSA6IHM7XG4gIGNvbnN0IHIgPSByYXcgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIGlmICh0eXBlb2Ygci5nZXRSZWRhY3RlZEtleXMgPT09ICdmdW5jdGlvbicpIHtcbiAgICBjb25zdCBrZXlzID0gci5nZXRSZWRhY3RlZEtleXMoKSBhcyBTZXQ8c3RyaW5nPjtcbiAgICByZXR1cm4gKGtleTogc3RyaW5nKSA9PiBrZXlzLmhhcyhrZXkpO1xuICB9XG4gIHJldHVybiAoKSA9PiBmYWxzZTtcbn1cblxuLy8gLS0gZXZhbHVhdGUgYSBzaW5nbGUgcnVsZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5mdW5jdGlvbiBldmFsdWF0ZVJ1bGU8UyBleHRlbmRzIG9iamVjdD4oXG4gIHNjb3BlOiBTLFxuICBydWxlOiBEZWNpZGVSdWxlPFM+LFxuICBpbmRleDogbnVtYmVyLFxuICBhdHRhY2hGbj86IChyOiBSZWNvcmRlcikgPT4gdm9pZCxcbiAgZGV0YWNoRm4/OiAoaWQ6IHN0cmluZykgPT4gdm9pZCxcbiAgdmFsdWVGbj86IChrZXk6IHN0cmluZykgPT4gdW5rbm93bixcbiAgcmVkYWN0ZWRGbj86IChrZXk6IHN0cmluZykgPT4gYm9vbGVhbixcbik6IFJ1bGVFdmlkZW5jZSB7XG4gIGlmICh0eXBlb2YgcnVsZS53aGVuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgLy8gRlVOQ1RJT04gUEFUSDogdGVtcCByZWNvcmRlciBjYXB0dXJlcyByZWFkcyAobGF6eSDigJQgc2tpcCBpZiBubyByZWNvcmRlciBzdXBwb3J0KVxuICAgIGNvbnN0IGhhc1JlY29yZGVyU3VwcG9ydCA9IEJvb2xlYW4oYXR0YWNoRm4pO1xuICAgIGNvbnN0IGNvbGxlY3RvciA9IGhhc1JlY29yZGVyU3VwcG9ydCA/IG5ldyBFdmlkZW5jZUNvbGxlY3RvcigpIDogdW5kZWZpbmVkO1xuICAgIGlmIChjb2xsZWN0b3IgJiYgYXR0YWNoRm4pIGF0dGFjaEZuKGNvbGxlY3Rvcik7XG5cbiAgICBsZXQgbWF0Y2hlZDogYm9vbGVhbjtcbiAgICBsZXQgbWF0Y2hFcnJvcjogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIHRyeSB7XG4gICAgICBtYXRjaGVkID0gcnVsZS53aGVuKHNjb3BlKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBtYXRjaGVkID0gZmFsc2U7XG4gICAgICAvLyBDYXB0dXJlIHRoZSBlcnJvciBmb3IgZGVidWdnaW5nIOKAlCBzdXJmYWNlIGl0IGluIGV2aWRlbmNlIGluc3RlYWQgb2Ygc3dhbGxvd2luZyBzaWxlbnRseVxuICAgICAgbWF0Y2hFcnJvciA9IGUgaW5zdGFuY2VvZiBFcnJvciA/IGUubWVzc2FnZSA6IFN0cmluZyhlKTtcbiAgICAgIGlmIChpc0Rldk1vZGUoKSkge1xuICAgICAgICBjb25zdCBsYWJlbCA9IHJ1bGUubGFiZWwgPyBgICgnJHtydWxlLmxhYmVsfScpYCA6ICcnO1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgICBjb25zb2xlLndhcm4oYFtmb290cHJpbnRdIGRlY2lkZSgpIHJ1bGUgJHtpbmRleH0ke2xhYmVsfSB0aHJldyBkdXJpbmcgZXZhbHVhdGlvbjogJHttYXRjaEVycm9yfWApO1xuICAgICAgfVxuICAgIH0gZmluYWxseSB7XG4gICAgICBpZiAoY29sbGVjdG9yICYmIGRldGFjaEZuKSBkZXRhY2hGbihjb2xsZWN0b3IuaWQpO1xuICAgIH1cblxuICAgIGNvbnN0IGV2aWRlbmNlOiBGdW5jdGlvblJ1bGVFdmlkZW5jZSA9IHtcbiAgICAgIHR5cGU6ICdmdW5jdGlvbicsXG4gICAgICBydWxlSW5kZXg6IGluZGV4LFxuICAgICAgYnJhbmNoOiBydWxlLnRoZW4sXG4gICAgICBtYXRjaGVkLFxuICAgICAgbGFiZWw6IHJ1bGUubGFiZWwsXG4gICAgICAvLyBQYXJ0aWFsIHJlYWRzOiBpZiBydWxlIHRocmV3IGFmdGVyIHNvbWUgZ2V0VmFsdWUoKSBjYWxscywgY29sbGVjdG9yIGhvbGRzIHJlYWRzIHVwIHRvIHRoZSB0aHJvdyBwb2ludFxuICAgICAgaW5wdXRzOiBjb2xsZWN0b3I/LmdldElucHV0cygpID8/IFtdLFxuICAgICAgLi4uKG1hdGNoRXJyb3IgIT09IHVuZGVmaW5lZCAmJiB7IG1hdGNoRXJyb3IgfSksXG4gICAgfTtcbiAgICByZXR1cm4gZXZpZGVuY2U7XG4gIH0gZWxzZSB7XG4gICAgLy8gRklMVEVSIFBBVEg6IHJlYWRzIHZhbHVlcyBkaXJlY3RseSB2aWEgY2FsbGJhY2tzIChubyByZWNvcmRlcik7IGV4Y2VwdGlvbnMgdHJlYXRlZCBhcyBub24tbWF0Y2hcbiAgICBjb25zdCByZXNvbHZlZFZhbHVlRm4gPSB2YWx1ZUZuID8/ICgoKSA9PiB1bmRlZmluZWQpO1xuICAgIGNvbnN0IHJlc29sdmVkUmVkYWN0ZWRGbiA9IHJlZGFjdGVkRm4gPz8gKCgpID0+IGZhbHNlKTtcbiAgICBsZXQgZmlsdGVyTWF0Y2hlZCA9IGZhbHNlO1xuICAgIGxldCBmaWx0ZXJDb25kaXRpb25zOiBGaWx0ZXJDb25kaXRpb25bXSA9IFtdO1xuICAgIGxldCBtYXRjaEVycm9yOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGV2YWx1YXRlRmlsdGVyKHJlc29sdmVkVmFsdWVGbiwgcmVzb2x2ZWRSZWRhY3RlZEZuLCBydWxlLndoZW4gYXMgV2hlcmVGaWx0ZXI8Uz4pO1xuICAgICAgZmlsdGVyTWF0Y2hlZCA9IHJlc3VsdC5tYXRjaGVkO1xuICAgICAgZmlsdGVyQ29uZGl0aW9ucyA9IHJlc3VsdC5jb25kaXRpb25zO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGZpbHRlck1hdGNoZWQgPSBmYWxzZTtcbiAgICAgIGZpbHRlckNvbmRpdGlvbnMgPSBbXTtcbiAgICAgIC8vIENhcHR1cmUgdGhlIGVycm9yIGZvciBkZWJ1Z2dpbmcg4oCUIHN1cmZhY2UgaXQgaW4gZXZpZGVuY2UgaW5zdGVhZCBvZiBzd2FsbG93aW5nIHNpbGVudGx5XG4gICAgICBtYXRjaEVycm9yID0gZSBpbnN0YW5jZW9mIEVycm9yID8gZS5tZXNzYWdlIDogU3RyaW5nKGUpO1xuICAgICAgaWYgKGlzRGV2TW9kZSgpKSB7XG4gICAgICAgIGNvbnN0IGxhYmVsID0gcnVsZS5sYWJlbCA/IGAgKCcke3J1bGUubGFiZWx9JylgIDogJyc7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICAgIGNvbnNvbGUud2FybihgW2Zvb3RwcmludF0gZGVjaWRlKCkgZmlsdGVyIHJ1bGUgJHtpbmRleH0ke2xhYmVsfSB0aHJldyBkdXJpbmcgZXZhbHVhdGlvbjogJHttYXRjaEVycm9yfWApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGV2aWRlbmNlOiBGaWx0ZXJSdWxlRXZpZGVuY2UgPSB7XG4gICAgICB0eXBlOiAnZmlsdGVyJyxcbiAgICAgIHJ1bGVJbmRleDogaW5kZXgsXG4gICAgICBicmFuY2g6IHJ1bGUudGhlbixcbiAgICAgIG1hdGNoZWQ6IGZpbHRlck1hdGNoZWQsXG4gICAgICBsYWJlbDogcnVsZS5sYWJlbCxcbiAgICAgIGNvbmRpdGlvbnM6IGZpbHRlckNvbmRpdGlvbnMsXG4gICAgICAuLi4obWF0Y2hFcnJvciAhPT0gdW5kZWZpbmVkICYmIHsgbWF0Y2hFcnJvciB9KSxcbiAgICB9O1xuICAgIHJldHVybiBldmlkZW5jZTtcbiAgfVxufVxuXG4vLyAtLSBkZWNpZGUoKSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8qKlxuICogRXZhbHVhdGVzIHJ1bGVzIGluIG9yZGVyIChmaXJzdC1tYXRjaCkuIFJldHVybnMgYSBicmFuZGVkIERlY2lzaW9uUmVzdWx0LlxuICpcbiAqIEBwYXJhbSBzY29wZSAtIFR5cGVkU2NvcGUgb3IgU2NvcGVGYWNhZGVcbiAqIEBwYXJhbSBydWxlcyAtIEFycmF5IG9mIERlY2lkZVJ1bGUgKGZ1bmN0aW9uIG9yIGZpbHRlciB3aGVuIGNsYXVzZXMpXG4gKiBAcGFyYW0gZGVmYXVsdEJyYW5jaCAtIEJyYW5jaCBJRCBpZiBubyBydWxlIG1hdGNoZXNcbiAqXG4gKiAqKkVycm9yIGJlaGF2aW9yOioqIElmIGEgYHdoZW5gIGZ1bmN0aW9uIHRocm93cyBkdXJpbmcgZXZhbHVhdGlvbiwgdGhlIHJ1bGUgaXNcbiAqIHRyZWF0ZWQgYXMgbm9uLW1hdGNoaW5nIChgbWF0Y2hlZDogZmFsc2VgKSBhbmQgdGhlIGVycm9yIG1lc3NhZ2UgaXMgY2FwdHVyZWQgaW5cbiAqIGBtYXRjaEVycm9yYCBvbiB0aGF0IHJ1bGUncyBgUnVsZUV2aWRlbmNlYCBlbnRyeS4gRXhlY3V0aW9uIGNvbnRpbnVlcyB3aXRoXG4gKiBzdWJzZXF1ZW50IHJ1bGVzOyBlcnJvcnMgZG8gbm90IHByb3BhZ2F0ZSB0byB0aGUgY2FsbGVyLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVjaWRlPFMgZXh0ZW5kcyBvYmplY3Q+KHNjb3BlOiBTLCBydWxlczogRGVjaWRlUnVsZTxTPltdLCBkZWZhdWx0QnJhbmNoOiBzdHJpbmcpOiBEZWNpc2lvblJlc3VsdCB7XG4gIGNvbnN0IGF0dGFjaEZuID0gZ2V0QXR0YWNoRm4oc2NvcGUpO1xuICBjb25zdCBkZXRhY2hGbiA9IGdldERldGFjaEZuKHNjb3BlKTtcbiAgY29uc3QgdmFsdWVGbiA9IGdldFZhbHVlRm4oc2NvcGUpO1xuICBjb25zdCByZWRhY3RlZEZuID0gZ2V0UmVkYWN0ZWRGbihzY29wZSk7XG5cbiAgY29uc3QgZXZhbHVhdGVkUnVsZXM6IFJ1bGVFdmlkZW5jZVtdID0gW107XG5cbiAgZm9yIChjb25zdCBbaW5kZXgsIHJ1bGVdIG9mIHJ1bGVzLmVudHJpZXMoKSkge1xuICAgIGNvbnN0IHJ1bGVFdmlkZW5jZSA9IGV2YWx1YXRlUnVsZShzY29wZSwgcnVsZSwgaW5kZXgsIGF0dGFjaEZuLCBkZXRhY2hGbiwgdmFsdWVGbiwgcmVkYWN0ZWRGbik7XG4gICAgZXZhbHVhdGVkUnVsZXMucHVzaChydWxlRXZpZGVuY2UpO1xuXG4gICAgaWYgKHJ1bGVFdmlkZW5jZS5tYXRjaGVkKSB7XG4gICAgICBjb25zdCBldmlkZW5jZTogRGVjaXNpb25FdmlkZW5jZSA9IHtcbiAgICAgICAgcnVsZXM6IGV2YWx1YXRlZFJ1bGVzLFxuICAgICAgICBjaG9zZW46IHJ1bGUudGhlbixcbiAgICAgICAgZGVmYXVsdDogZGVmYXVsdEJyYW5jaCxcbiAgICAgIH07XG4gICAgICByZXR1cm4geyBicmFuY2g6IHJ1bGUudGhlbiwgW0RFQ0lTSU9OX1JFU1VMVF06IHRydWUsIGV2aWRlbmNlIH07XG4gICAgfVxuICB9XG5cbiAgLy8gRGVmYXVsdDogbm8gcnVsZSBtYXRjaGVkXG4gIGNvbnN0IGV2aWRlbmNlOiBEZWNpc2lvbkV2aWRlbmNlID0ge1xuICAgIHJ1bGVzOiBldmFsdWF0ZWRSdWxlcyxcbiAgICBjaG9zZW46IGRlZmF1bHRCcmFuY2gsXG4gICAgZGVmYXVsdDogZGVmYXVsdEJyYW5jaCxcbiAgfTtcbiAgcmV0dXJuIHsgYnJhbmNoOiBkZWZhdWx0QnJhbmNoLCBbREVDSVNJT05fUkVTVUxUXTogdHJ1ZSwgZXZpZGVuY2UgfTtcbn1cblxuLy8gLS0gc2VsZWN0KCkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vKipcbiAqIEV2YWx1YXRlcyBBTEwgcnVsZXMgKG5vdCBmaXJzdC1tYXRjaCkuIFJldHVybnMgYSBicmFuZGVkIFNlbGVjdGlvblJlc3VsdC5cbiAqXG4gKiBAcGFyYW0gc2NvcGUgLSBUeXBlZFNjb3BlIG9yIFNjb3BlRmFjYWRlXG4gKiBAcGFyYW0gcnVsZXMgLSBBcnJheSBvZiBEZWNpZGVSdWxlIChmdW5jdGlvbiBvciBmaWx0ZXIgd2hlbiBjbGF1c2VzKVxuICpcbiAqICoqRXJyb3IgYmVoYXZpb3I6KiogSWYgYSBgd2hlbmAgZnVuY3Rpb24gdGhyb3dzIGR1cmluZyBldmFsdWF0aW9uLCB0aGUgcnVsZSBpc1xuICogdHJlYXRlZCBhcyBub24tbWF0Y2hpbmcgKGBtYXRjaGVkOiBmYWxzZWApIGFuZCB0aGUgZXJyb3IgbWVzc2FnZSBpcyBjYXB0dXJlZCBpblxuICogYG1hdGNoRXJyb3JgIG9uIHRoYXQgcnVsZSdzIGBSdWxlRXZpZGVuY2VgIGVudHJ5LiBFdmFsdWF0aW9uIGNvbnRpbnVlcyB3aXRoXG4gKiByZW1haW5pbmcgcnVsZXM7IGVycm9ycyBkbyBub3QgcHJvcGFnYXRlIHRvIHRoZSBjYWxsZXIuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZWxlY3Q8UyBleHRlbmRzIG9iamVjdD4oc2NvcGU6IFMsIHJ1bGVzOiBEZWNpZGVSdWxlPFM+W10pOiBTZWxlY3Rpb25SZXN1bHQge1xuICBjb25zdCBhdHRhY2hGbiA9IGdldEF0dGFjaEZuKHNjb3BlKTtcbiAgY29uc3QgZGV0YWNoRm4gPSBnZXREZXRhY2hGbihzY29wZSk7XG4gIGNvbnN0IHZhbHVlRm4gPSBnZXRWYWx1ZUZuKHNjb3BlKTtcbiAgY29uc3QgcmVkYWN0ZWRGbiA9IGdldFJlZGFjdGVkRm4oc2NvcGUpO1xuXG4gIGNvbnN0IGV2YWx1YXRlZFJ1bGVzOiBSdWxlRXZpZGVuY2VbXSA9IFtdO1xuICBjb25zdCBzZWxlY3RlZEJyYW5jaGVzOiBzdHJpbmdbXSA9IFtdO1xuXG4gIGZvciAoY29uc3QgW2luZGV4LCBydWxlXSBvZiBydWxlcy5lbnRyaWVzKCkpIHtcbiAgICBjb25zdCBydWxlRXZpZGVuY2UgPSBldmFsdWF0ZVJ1bGUoc2NvcGUsIHJ1bGUsIGluZGV4LCBhdHRhY2hGbiwgZGV0YWNoRm4sIHZhbHVlRm4sIHJlZGFjdGVkRm4pO1xuICAgIGV2YWx1YXRlZFJ1bGVzLnB1c2gocnVsZUV2aWRlbmNlKTtcblxuICAgIGlmIChydWxlRXZpZGVuY2UubWF0Y2hlZCkge1xuICAgICAgc2VsZWN0ZWRCcmFuY2hlcy5wdXNoKHJ1bGUudGhlbik7XG4gICAgfVxuICB9XG5cbiAgY29uc3QgZXZpZGVuY2U6IFNlbGVjdGlvbkV2aWRlbmNlID0ge1xuICAgIHJ1bGVzOiBldmFsdWF0ZWRSdWxlcyxcbiAgICBzZWxlY3RlZDogc2VsZWN0ZWRCcmFuY2hlcyxcbiAgfTtcbiAgcmV0dXJuIHsgYnJhbmNoZXM6IHNlbGVjdGVkQnJhbmNoZXMsIFtERUNJU0lPTl9SRVNVTFRdOiB0cnVlLCBldmlkZW5jZSB9O1xufVxuIl19
|
|
199
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVjaWRlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9kZWNpZGUvZGVjaWRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7R0FTRztBQUVILE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUV2RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDaEQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBYWxELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFFN0MsK0VBQStFO0FBRS9FLFNBQVMsV0FBVyxDQUFDLEtBQWM7SUFDakMsTUFBTSxDQUFDLEdBQUcsS0FBZ0MsQ0FBQztJQUMzQyxJQUFJLE9BQU8sQ0FBQyxDQUFDLGVBQWUsS0FBSyxVQUFVO1FBQUUsT0FBTyxDQUFDLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM5RSxJQUFJLE9BQU8sQ0FBQyxDQUFDLGNBQWMsS0FBSyxVQUFVO1FBQUUsT0FBTyxDQUFDLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM1RSxPQUFPLFNBQVMsQ0FBQztBQUNuQixDQUFDO0FBRUQsU0FBUyxXQUFXLENBQUMsS0FBYztJQUNqQyxNQUFNLENBQUMsR0FBRyxLQUFnQyxDQUFDO0lBQzNDLElBQUksT0FBTyxDQUFDLENBQUMsZUFBZSxLQUFLLFVBQVU7UUFBRSxPQUFPLENBQUMsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzlFLElBQUksT0FBTyxDQUFDLENBQUMsY0FBYyxLQUFLLFVBQVU7UUFBRSxPQUFPLENBQUMsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzVFLE9BQU8sU0FBUyxDQUFDO0FBQ25CLENBQUM7QUFFRCxTQUFTLFVBQVUs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SSxDQUFDLElBQUksS0FBSyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUM7UUFDNUMsTUFBTSxZQUFZLEdBQUcsWUFBWSxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBQy9GLGNBQWMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7UUFFbEMsSUFBSSxZQUFZLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDekIsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNuQyxDQUFDO0lBQ0gsQ0FBQztJQUVELE1BQU0sUUFBUSxHQUFzQjtRQUNsQyxLQUFLLEVBQUUsY0FBYztRQUNyQixRQUFRLEVBQUUsZ0JBQWdCO0tBQzNCLENBQUM7SUFDRixPQUFPLEVBQUUsUUFBUSxFQUFFLGdCQUFnQixFQUFFLENBQUMsZUFBZSxDQUFDLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxDQUFDO0FBQzNFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIGRlY2lkZS9kZWNpZGUgLS0gQ29yZSBkZWNpZGUoKSBhbmQgc2VsZWN0KCkgaGVscGVyIGZ1bmN0aW9ucy5cbiAqXG4gKiBkZWNpZGUoKSBldmFsdWF0ZXMgcnVsZXMgaW4gb3JkZXIgKGZpcnN0LW1hdGNoKSBhbmQgcmV0dXJucyBhIERlY2lzaW9uUmVzdWx0LlxuICogc2VsZWN0KCkgZXZhbHVhdGVzIEFMTCBydWxlcyBhbmQgcmV0dXJucyBhIFNlbGVjdGlvblJlc3VsdCB3aXRoIGFsbCBtYXRjaGVzLlxuICpcbiAqIEVhY2ggcnVsZSdzIGB3aGVuYCBjYW4gYmU6XG4gKiAtIEEgZnVuY3Rpb246IChzKSA9PiBzLmNyZWRpdFNjb3JlID4gNzAwICAoYXV0by1jYXB0dXJlcyByZWFkcyB2aWEgdGVtcCByZWNvcmRlcilcbiAqIC0gQSBmaWx0ZXI6ICAgeyBjcmVkaXRTY29yZTogeyBndDogNzAwIH0gfSAoY2FwdHVyZXMgcmVhZHMgKyBvcGVyYXRvcnMgKyB0aHJlc2hvbGRzKVxuICovXG5cbmltcG9ydCB7IGlzRGV2TW9kZSB9IGZyb20gJy4uL3Njb3BlL2RldGVjdENpcmN1bGFyLmpzJztcbmltcG9ydCB0eXBlIHsgUmVjb3JkZXIgfSBmcm9tICcuLi9zY29wZS90eXBlcy5qcyc7XG5pbXBvcnQgeyBldmFsdWF0ZUZpbHRlciB9IGZyb20gJy4vZXZhbHVhdG9yLmpzJztcbmltcG9ydCB7IEV2aWRlbmNlQ29sbGVjdG9yIH0gZnJvbSAnLi9ldmlkZW5jZS5qcyc7XG5pbXBvcnQgdHlwZSB7XG4gIERlY2lkZVJ1bGUsXG4gIERlY2lzaW9uRXZpZGVuY2UsXG4gIERlY2lzaW9uUmVzdWx0LFxuICBGaWx0ZXJDb25kaXRpb24sXG4gIEZpbHRlclJ1bGVFdmlkZW5jZSxcbiAgRnVuY3Rpb25SdWxlRXZpZGVuY2UsXG4gIFJ1bGVFdmlkZW5jZSxcbiAgU2VsZWN0aW9uRXZpZGVuY2UsXG4gIFNlbGVjdGlvblJlc3VsdCxcbiAgV2hlcmVGaWx0ZXIsXG59IGZyb20gJy4vdHlwZXMuanMnO1xuaW1wb3J0IHsgREVDSVNJT05fUkVTVUxUIH0gZnJvbSAnLi90eXBlcy5qcyc7XG5cbi8vIC0tIFNjb3BlIGFjY2Vzc29yIGhlbHBlcnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuZnVuY3Rpb24gZ2V0QXR0YWNoRm4oc2NvcGU6IHVua25vd24pOiAoKHI6IFJlY29yZGVyKSA9PiB2b2lkKSB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IHMgPSBzY29wZSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgaWYgKHR5cGVvZiBzLiRhdHRhY2hSZWNvcmRlciA9PT0gJ2Z1bmN0aW9uJykgcmV0dXJuIHMuJGF0dGFjaFJlY29yZGVyLmJpbmQocyk7XG4gIGlmICh0eXBlb2Ygcy5hdHRhY2hSZWNvcmRlciA9PT0gJ2Z1bmN0aW9uJykgcmV0dXJuIHMuYXR0YWNoUmVjb3JkZXIuYmluZChzKTtcbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gZ2V0RGV0YWNoRm4oc2NvcGU6IHVua25vd24pOiAoKGlkOiBzdHJpbmcpID0+IHZvaWQpIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgcyA9IHNjb3BlIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICBpZiAodHlwZW9mIHMuJGRldGFjaFJlY29yZGVyID09PSAnZnVuY3Rpb24nKSByZXR1cm4gcy4kZGV0YWNoUmVjb3JkZXIuYmluZChzKTtcbiAgaWYgKHR5cGVvZiBzLmRldGFjaFJlY29yZGVyID09PSAnZnVuY3Rpb24nKSByZXR1cm4gcy5kZXRhY2hSZWNvcmRlci5iaW5kKHMpO1xuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiBnZXRWYWx1ZUZuKHNjb3BlOiB1bmtub3duKTogKGtleTogc3RyaW5nKSA9PiB1bmtub3duIHtcbiAgY29uc3QgcyA9IHNjb3BlIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAvLyBDaGVjayAkZ2V0VmFsdWUgZmlyc3Q6IG9uIFR5cGVkU2NvcGUsIGFjY2Vzc2luZyAuZ2V0VmFsdWUgdHJpZ2dlcnMgYSBzcHVyaW91c1xuICAvLyBvblJlYWQgZm9yIGtleSBcImdldFZhbHVlXCIgdmlhIHRoZSBQcm94eSBnZXQgdHJhcC4gJGdldFZhbHVlIHJvdXRlcyB0aHJvdWdoXG4gIC8vIFNDT1BFX01FVEhPRF9OQU1FUyBhbmQgYXZvaWRzIHRoZSBzdGF0ZS1yZWFkIHBhdGguXG4gIGlmICh0eXBlb2Ygcy4kZ2V0VmFsdWUgPT09ICdmdW5jdGlvbicpIHJldHVybiBzLiRnZXRWYWx1ZS5iaW5kKHMpO1xuICBpZiAodHlwZW9mIHMuZ2V0VmFsdWUgPT09ICdmdW5jdGlvbicpIHJldHVybiBzLmdldFZhbHVlLmJpbmQocyk7XG4gIHJldHVybiAoKSA9PiB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGdldFJlZGFjdGVkRm4oc2NvcGU6IHVua25vd24pOiAoa2V5OiBzdHJpbmcpID0+IGJvb2xlYW4ge1xuICBjb25zdCBzID0gc2NvcGUgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIC8vIFRyeSAkdG9SYXcoKSBmaXJzdCAoVHlwZWRTY29wZSksIHRoZW4gZGlyZWN0XG4gIGNvbnN0IHJhdyA9IHR5cGVvZiBzLiR0b1JhdyA9PT0gJ2Z1bmN0aW9uJyA/IHMuJHRvUmF3KCkgOiBzO1xuICBjb25zdCByID0gcmF3IGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICBpZiAodHlwZW9mIHIuZ2V0UmVkYWN0ZWRLZXlzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgY29uc3Qga2V5cyA9IHIuZ2V0UmVkYWN0ZWRLZXlzKCkgYXMgU2V0PHN0cmluZz47XG4gICAgcmV0dXJuIChrZXk6IHN0cmluZykgPT4ga2V5cy5oYXMoa2V5KTtcbiAgfVxuICByZXR1cm4gKCkgPT4gZmFsc2U7XG59XG5cbi8vIC0tIGV2YWx1YXRlIGEgc2luZ2xlIHJ1bGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuZnVuY3Rpb24gZXZhbHVhdGVSdWxlPFMgZXh0ZW5kcyBvYmplY3Q+KFxuICBzY29wZTogUyxcbiAgcnVsZTogRGVjaWRlUnVsZTxTPixcbiAgaW5kZXg6IG51bWJlcixcbiAgYXR0YWNoRm4/OiAocjogUmVjb3JkZXIpID0+IHZvaWQsXG4gIGRldGFjaEZuPzogKGlkOiBzdHJpbmcpID0+IHZvaWQsXG4gIHZhbHVlRm4/OiAoa2V5OiBzdHJpbmcpID0+IHVua25vd24sXG4gIHJlZGFjdGVkRm4/OiAoa2V5OiBzdHJpbmcpID0+IGJvb2xlYW4sXG4pOiBSdWxlRXZpZGVuY2Uge1xuICBpZiAodHlwZW9mIHJ1bGUud2hlbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIC8vIEZVTkNUSU9OIFBBVEg6IHRlbXAgcmVjb3JkZXIgY2FwdHVyZXMgcmVhZHMgKGxhenkg4oCUIHNraXAgaWYgbm8gcmVjb3JkZXIgc3VwcG9ydClcbiAgICBjb25zdCBoYXNSZWNvcmRlclN1cHBvcnQgPSBCb29sZWFuKGF0dGFjaEZuKTtcbiAgICBjb25zdCBjb2xsZWN0b3IgPSBoYXNSZWNvcmRlclN1cHBvcnQgPyBuZXcgRXZpZGVuY2VDb2xsZWN0b3IoKSA6IHVuZGVmaW5lZDtcbiAgICBpZiAoY29sbGVjdG9yICYmIGF0dGFjaEZuKSBhdHRhY2hGbihjb2xsZWN0b3IpO1xuXG4gICAgbGV0IG1hdGNoZWQ6IGJvb2xlYW47XG4gICAgbGV0IG1hdGNoRXJyb3I6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICB0cnkge1xuICAgICAgbWF0Y2hlZCA9IHJ1bGUud2hlbihzY29wZSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgbWF0Y2hlZCA9IGZhbHNlO1xuICAgICAgLy8gQ2FwdHVyZSB0aGUgZXJyb3IgZm9yIGRlYnVnZ2luZyDigJQgc3VyZmFjZSBpdCBpbiBldmlkZW5jZSBpbnN0ZWFkIG9mIHN3YWxsb3dpbmcgc2lsZW50bHlcbiAgICAgIG1hdGNoRXJyb3IgPSBlIGluc3RhbmNlb2YgRXJyb3IgPyBlLm1lc3NhZ2UgOiBTdHJpbmcoZSk7XG4gICAgICBpZiAoaXNEZXZNb2RlKCkpIHtcbiAgICAgICAgY29uc3QgbGFiZWwgPSBydWxlLmxhYmVsID8gYCAoJyR7cnVsZS5sYWJlbH0nKWAgOiAnJztcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgICAgY29uc29sZS53YXJuKGBbZm9vdHByaW50XSBkZWNpZGUoKSBydWxlICR7aW5kZXh9JHtsYWJlbH0gdGhyZXcgZHVyaW5nIGV2YWx1YXRpb246ICR7bWF0Y2hFcnJvcn1gKTtcbiAgICAgIH1cbiAgICB9IGZpbmFsbHkge1xuICAgICAgaWYgKGNvbGxlY3RvciAmJiBkZXRhY2hGbikgZGV0YWNoRm4oY29sbGVjdG9yLmlkKTtcbiAgICB9XG5cbiAgICBjb25zdCBldmlkZW5jZTogRnVuY3Rpb25SdWxlRXZpZGVuY2UgPSB7XG4gICAgICB0eXBlOiAnZnVuY3Rpb24nLFxuICAgICAgcnVsZUluZGV4OiBpbmRleCxcbiAgICAgIGJyYW5jaDogcnVsZS50aGVuLFxuICAgICAgbWF0Y2hlZCxcbiAgICAgIGxhYmVsOiBydWxlLmxhYmVsLFxuICAgICAgLy8gUGFydGlhbCByZWFkczogaWYgcnVsZSB0aHJldyBhZnRlciBzb21lIGdldFZhbHVlKCkgY2FsbHMsIGNvbGxlY3RvciBob2xkcyByZWFkcyB1cCB0byB0aGUgdGhyb3cgcG9pbnRcbiAgICAgIGlucHV0czogY29sbGVjdG9yPy5nZXRJbnB1dHMoKSA/PyBbXSxcbiAgICAgIC4uLihtYXRjaEVycm9yICE9PSB1bmRlZmluZWQgJiYgeyBtYXRjaEVycm9yIH0pLFxuICAgIH07XG4gICAgcmV0dXJuIGV2aWRlbmNlO1xuICB9IGVsc2Uge1xuICAgIC8vIEZJTFRFUiBQQVRIOiByZWFkcyB2YWx1ZXMgZGlyZWN0bHkgdmlhIGNhbGxiYWNrcyAobm8gcmVjb3JkZXIpOyBleGNlcHRpb25zIHRyZWF0ZWQgYXMgbm9uLW1hdGNoXG4gICAgY29uc3QgcmVzb2x2ZWRWYWx1ZUZuID0gdmFsdWVGbiA/PyAoKCkgPT4gdW5kZWZpbmVkKTtcbiAgICBjb25zdCByZXNvbHZlZFJlZGFjdGVkRm4gPSByZWRhY3RlZEZuID8/ICgoKSA9PiBmYWxzZSk7XG4gICAgbGV0IGZpbHRlck1hdGNoZWQgPSBmYWxzZTtcbiAgICBsZXQgZmlsdGVyQ29uZGl0aW9uczogRmlsdGVyQ29uZGl0aW9uW10gPSBbXTtcbiAgICBsZXQgbWF0Y2hFcnJvcjogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXN1bHQgPSBldmFsdWF0ZUZpbHRlcihyZXNvbHZlZFZhbHVlRm4sIHJlc29sdmVkUmVkYWN0ZWRGbiwgcnVsZS53aGVuIGFzIFdoZXJlRmlsdGVyPFM+KTtcbiAgICAgIGZpbHRlck1hdGNoZWQgPSByZXN1bHQubWF0Y2hlZDtcbiAgICAgIGZpbHRlckNvbmRpdGlvbnMgPSByZXN1bHQuY29uZGl0aW9ucztcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBmaWx0ZXJNYXRjaGVkID0gZmFsc2U7XG4gICAgICBmaWx0ZXJDb25kaXRpb25zID0gW107XG4gICAgICAvLyBDYXB0dXJlIHRoZSBlcnJvciBmb3IgZGVidWdnaW5nIOKAlCBzdXJmYWNlIGl0IGluIGV2aWRlbmNlIGluc3RlYWQgb2Ygc3dhbGxvd2luZyBzaWxlbnRseVxuICAgICAgbWF0Y2hFcnJvciA9IGUgaW5zdGFuY2VvZiBFcnJvciA/IGUubWVzc2FnZSA6IFN0cmluZyhlKTtcbiAgICAgIGlmIChpc0Rldk1vZGUoKSkge1xuICAgICAgICBjb25zdCBsYWJlbCA9IHJ1bGUubGFiZWwgPyBgICgnJHtydWxlLmxhYmVsfScpYCA6ICcnO1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgICBjb25zb2xlLndhcm4oYFtmb290cHJpbnRdIGRlY2lkZSgpIGZpbHRlciBydWxlICR7aW5kZXh9JHtsYWJlbH0gdGhyZXcgZHVyaW5nIGV2YWx1YXRpb246ICR7bWF0Y2hFcnJvcn1gKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBldmlkZW5jZTogRmlsdGVyUnVsZUV2aWRlbmNlID0ge1xuICAgICAgdHlwZTogJ2ZpbHRlcicsXG4gICAgICBydWxlSW5kZXg6IGluZGV4LFxuICAgICAgYnJhbmNoOiBydWxlLnRoZW4sXG4gICAgICBtYXRjaGVkOiBmaWx0ZXJNYXRjaGVkLFxuICAgICAgbGFiZWw6IHJ1bGUubGFiZWwsXG4gICAgICBjb25kaXRpb25zOiBmaWx0ZXJDb25kaXRpb25zLFxuICAgICAgLi4uKG1hdGNoRXJyb3IgIT09IHVuZGVmaW5lZCAmJiB7IG1hdGNoRXJyb3IgfSksXG4gICAgfTtcbiAgICByZXR1cm4gZXZpZGVuY2U7XG4gIH1cbn1cblxuLy8gLS0gZGVjaWRlKCkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vKipcbiAqIEV2YWx1YXRlcyBydWxlcyBpbiBvcmRlciAoZmlyc3QtbWF0Y2gpLiBSZXR1cm5zIGEgYnJhbmRlZCBEZWNpc2lvblJlc3VsdC5cbiAqXG4gKiBAcGFyYW0gc2NvcGUgLSBUeXBlZFNjb3BlIG9yIFNjb3BlRmFjYWRlXG4gKiBAcGFyYW0gcnVsZXMgLSBBcnJheSBvZiBEZWNpZGVSdWxlIChmdW5jdGlvbiBvciBmaWx0ZXIgd2hlbiBjbGF1c2VzKVxuICogQHBhcmFtIGRlZmF1bHRCcmFuY2ggLSBCcmFuY2ggSUQgaWYgbm8gcnVsZSBtYXRjaGVzXG4gKlxuICogKipFcnJvciBiZWhhdmlvcjoqKiBJZiBhIGB3aGVuYCBmdW5jdGlvbiB0aHJvd3MgZHVyaW5nIGV2YWx1YXRpb24sIHRoZSBydWxlIGlzXG4gKiB0cmVhdGVkIGFzIG5vbi1tYXRjaGluZyAoYG1hdGNoZWQ6IGZhbHNlYCkgYW5kIHRoZSBlcnJvciBtZXNzYWdlIGlzIGNhcHR1cmVkIGluXG4gKiBgbWF0Y2hFcnJvcmAgb24gdGhhdCBydWxlJ3MgYFJ1bGVFdmlkZW5jZWAgZW50cnkuIEV4ZWN1dGlvbiBjb250aW51ZXMgd2l0aFxuICogc3Vic2VxdWVudCBydWxlczsgZXJyb3JzIGRvIG5vdCBwcm9wYWdhdGUgdG8gdGhlIGNhbGxlci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlY2lkZTxTIGV4dGVuZHMgb2JqZWN0PihzY29wZTogUywgcnVsZXM6IERlY2lkZVJ1bGU8Uz5bXSwgZGVmYXVsdEJyYW5jaDogc3RyaW5nKTogRGVjaXNpb25SZXN1bHQge1xuICBjb25zdCBhdHRhY2hGbiA9IGdldEF0dGFjaEZuKHNjb3BlKTtcbiAgY29uc3QgZGV0YWNoRm4gPSBnZXREZXRhY2hGbihzY29wZSk7XG4gIGNvbnN0IHZhbHVlRm4gPSBnZXRWYWx1ZUZuKHNjb3BlKTtcbiAgY29uc3QgcmVkYWN0ZWRGbiA9IGdldFJlZGFjdGVkRm4oc2NvcGUpO1xuXG4gIGNvbnN0IGV2YWx1YXRlZFJ1bGVzOiBSdWxlRXZpZGVuY2VbXSA9IFtdO1xuXG4gIGZvciAoY29uc3QgW2luZGV4LCBydWxlXSBvZiBydWxlcy5lbnRyaWVzKCkpIHtcbiAgICBjb25zdCBydWxlRXZpZGVuY2UgPSBldmFsdWF0ZVJ1bGUoc2NvcGUsIHJ1bGUsIGluZGV4LCBhdHRhY2hGbiwgZGV0YWNoRm4sIHZhbHVlRm4sIHJlZGFjdGVkRm4pO1xuICAgIGV2YWx1YXRlZFJ1bGVzLnB1c2gocnVsZUV2aWRlbmNlKTtcblxuICAgIGlmIChydWxlRXZpZGVuY2UubWF0Y2hlZCkge1xuICAgICAgY29uc3QgZXZpZGVuY2U6IERlY2lzaW9uRXZpZGVuY2UgPSB7XG4gICAgICAgIHJ1bGVzOiBldmFsdWF0ZWRSdWxlcyxcbiAgICAgICAgY2hvc2VuOiBydWxlLnRoZW4sXG4gICAgICAgIGRlZmF1bHQ6IGRlZmF1bHRCcmFuY2gsXG4gICAgICB9O1xuICAgICAgcmV0dXJuIHsgYnJhbmNoOiBydWxlLnRoZW4sIFtERUNJU0lPTl9SRVNVTFRdOiB0cnVlLCBldmlkZW5jZSB9O1xuICAgIH1cbiAgfVxuXG4gIC8vIERlZmF1bHQ6IG5vIHJ1bGUgbWF0Y2hlZFxuICBjb25zdCBldmlkZW5jZTogRGVjaXNpb25FdmlkZW5jZSA9IHtcbiAgICBydWxlczogZXZhbHVhdGVkUnVsZXMsXG4gICAgY2hvc2VuOiBkZWZhdWx0QnJhbmNoLFxuICAgIGRlZmF1bHQ6IGRlZmF1bHRCcmFuY2gsXG4gIH07XG4gIHJldHVybiB7IGJyYW5jaDogZGVmYXVsdEJyYW5jaCwgW0RFQ0lTSU9OX1JFU1VMVF06IHRydWUsIGV2aWRlbmNlIH07XG59XG5cbi8vIC0tIHNlbGVjdCgpIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLyoqXG4gKiBFdmFsdWF0ZXMgQUxMIHJ1bGVzIChub3QgZmlyc3QtbWF0Y2gpLiBSZXR1cm5zIGEgYnJhbmRlZCBTZWxlY3Rpb25SZXN1bHQuXG4gKlxuICogQHBhcmFtIHNjb3BlIC0gVHlwZWRTY29wZSBvciBTY29wZUZhY2FkZVxuICogQHBhcmFtIHJ1bGVzIC0gQXJyYXkgb2YgRGVjaWRlUnVsZSAoZnVuY3Rpb24gb3IgZmlsdGVyIHdoZW4gY2xhdXNlcylcbiAqXG4gKiAqKkVycm9yIGJlaGF2aW9yOioqIElmIGEgYHdoZW5gIGZ1bmN0aW9uIHRocm93cyBkdXJpbmcgZXZhbHVhdGlvbiwgdGhlIHJ1bGUgaXNcbiAqIHRyZWF0ZWQgYXMgbm9uLW1hdGNoaW5nIChgbWF0Y2hlZDogZmFsc2VgKSBhbmQgdGhlIGVycm9yIG1lc3NhZ2UgaXMgY2FwdHVyZWQgaW5cbiAqIGBtYXRjaEVycm9yYCBvbiB0aGF0IHJ1bGUncyBgUnVsZUV2aWRlbmNlYCBlbnRyeS4gRXZhbHVhdGlvbiBjb250aW51ZXMgd2l0aFxuICogcmVtYWluaW5nIHJ1bGVzOyBlcnJvcnMgZG8gbm90IHByb3BhZ2F0ZSB0byB0aGUgY2FsbGVyLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc2VsZWN0PFMgZXh0ZW5kcyBvYmplY3Q+KHNjb3BlOiBTLCBydWxlczogRGVjaWRlUnVsZTxTPltdKTogU2VsZWN0aW9uUmVzdWx0IHtcbiAgY29uc3QgYXR0YWNoRm4gPSBnZXRBdHRhY2hGbihzY29wZSk7XG4gIGNvbnN0IGRldGFjaEZuID0gZ2V0RGV0YWNoRm4oc2NvcGUpO1xuICBjb25zdCB2YWx1ZUZuID0gZ2V0VmFsdWVGbihzY29wZSk7XG4gIGNvbnN0IHJlZGFjdGVkRm4gPSBnZXRSZWRhY3RlZEZuKHNjb3BlKTtcblxuICBjb25zdCBldmFsdWF0ZWRSdWxlczogUnVsZUV2aWRlbmNlW10gPSBbXTtcbiAgY29uc3Qgc2VsZWN0ZWRCcmFuY2hlczogc3RyaW5nW10gPSBbXTtcblxuICBmb3IgKGNvbnN0IFtpbmRleCwgcnVsZV0gb2YgcnVsZXMuZW50cmllcygpKSB7XG4gICAgY29uc3QgcnVsZUV2aWRlbmNlID0gZXZhbHVhdGVSdWxlKHNjb3BlLCBydWxlLCBpbmRleCwgYXR0YWNoRm4sIGRldGFjaEZuLCB2YWx1ZUZuLCByZWRhY3RlZEZuKTtcbiAgICBldmFsdWF0ZWRSdWxlcy5wdXNoKHJ1bGVFdmlkZW5jZSk7XG5cbiAgICBpZiAocnVsZUV2aWRlbmNlLm1hdGNoZWQpIHtcbiAgICAgIHNlbGVjdGVkQnJhbmNoZXMucHVzaChydWxlLnRoZW4pO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGV2aWRlbmNlOiBTZWxlY3Rpb25FdmlkZW5jZSA9IHtcbiAgICBydWxlczogZXZhbHVhdGVkUnVsZXMsXG4gICAgc2VsZWN0ZWQ6IHNlbGVjdGVkQnJhbmNoZXMsXG4gIH07XG4gIHJldHVybiB7IGJyYW5jaGVzOiBzZWxlY3RlZEJyYW5jaGVzLCBbREVDSVNJT05fUkVTVUxUXTogdHJ1ZSwgZXZpZGVuY2UgfTtcbn1cbiJdfQ==
|
|
@@ -14,8 +14,9 @@ let evidenceCounter = 0;
|
|
|
14
14
|
* Attach before when(), detach after. Collect via getInputs().
|
|
15
15
|
*/
|
|
16
16
|
export class EvidenceCollector {
|
|
17
|
+
id;
|
|
18
|
+
inputs = [];
|
|
17
19
|
constructor() {
|
|
18
|
-
this.inputs = [];
|
|
19
20
|
this.id = `evidence-${++evidenceCounter}`;
|
|
20
21
|
}
|
|
21
22
|
onRead(event) {
|
|
@@ -32,4 +33,4 @@ export class EvidenceCollector {
|
|
|
32
33
|
return this.inputs;
|
|
33
34
|
}
|
|
34
35
|
}
|
|
35
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
36
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZpZGVuY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL2RlY2lkZS9ldmlkZW5jZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7OztHQU9HO0FBRUgsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBSXRFLE1BQU0sYUFBYSxHQUFHLEVBQUUsQ0FBQztBQUV6QixJQUFJLGVBQWUsR0FBRyxDQUFDLENBQUM7QUFFeEI7OztHQUdHO0FBQ0gsTUFBTSxPQUFPLGlCQUFpQjtJQUNuQixFQUFFLENBQVM7SUFDWixNQUFNLEdBQWdCLEVBQUUsQ0FBQztJQUVqQztRQUNFLElBQUksQ0FBQyxFQUFFLEdBQUcsWUFBWSxFQUFFLGVBQWUsRUFBRSxDQUFDO0lBQzVDLENBQUM7SUFFRCxNQUFNLENBQUMsS0FBZ0I7UUFDckIsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHO1lBQUUsT0FBTztRQUN2QixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQztZQUNmLEdBQUcsRUFBRSxLQUFLLENBQUMsR0FBRztZQUNkLFlBQVksRUFBRSxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLGFBQWEsQ0FBQztZQUN4RixRQUFRLEVBQUUsS0FBSyxDQUFDLFFBQVEsS0FBSyxJQUFJO1NBQ2xDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxxQ0FBcUM7SUFDckMsU0FBUztRQUNQLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQztJQUNyQixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIGRlY2lkZS9ldmlkZW5jZSAtLSBMaWdodHdlaWdodCB0ZW1wIHJlY29yZGVyIGZvciBhdXRvLWNhcHR1cmluZyByZWFkc1xuICogZHVyaW5nIGEgd2hlbigpIGZ1bmN0aW9uIGNhbGwuXG4gKlxuICogQXR0YWNoZWQgdG8gc2NvcGUgYmVmb3JlIGNhbGxpbmcgd2hlbihzY29wZSksIGRldGFjaGVkIGFmdGVyLlxuICogQ2FwdHVyZXMgUmVhZEV2ZW50IGtleSArIHN1bW1hcml6ZWQgdmFsdWUgKyByZWRhY3Rpb24gZmxhZy5cbiAqIFVzZXMgc3VtbWFyaXplVmFsdWUoKSBhdCBjYXB0dXJlIHRpbWUgKG5vIHJhdyBvYmplY3QgcmVmZXJlbmNlcyBoZWxkKS5cbiAqL1xuXG5pbXBvcnQgeyBzdW1tYXJpemVWYWx1ZSB9IGZyb20gJy4uL3Njb3BlL3JlY29yZGVycy9zdW1tYXJpemVWYWx1ZS5qcyc7XG5pbXBvcnQgdHlwZSB7IFJlYWRFdmVudCwgUmVjb3JkZXIgfSBmcm9tICcuLi9zY29wZS90eXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7IFJlYWRJbnB1dCB9IGZyb20gJy4vdHlwZXMuanMnO1xuXG5jb25zdCBNQVhfVkFMVUVfTEVOID0gODA7XG5cbmxldCBldmlkZW5jZUNvdW50ZXIgPSAwO1xuXG4vKipcbiAqIE1pbmltYWwgUmVjb3JkZXIgdGhhdCBjYXB0dXJlcyByZWFkcyBmb3IgZGVjaXNpb24gZXZpZGVuY2UuXG4gKiBBdHRhY2ggYmVmb3JlIHdoZW4oKSwgZGV0YWNoIGFmdGVyLiBDb2xsZWN0IHZpYSBnZXRJbnB1dHMoKS5cbiAqL1xuZXhwb3J0IGNsYXNzIEV2aWRlbmNlQ29sbGVjdG9yIGltcGxlbWVudHMgUmVjb3JkZXIge1xuICByZWFkb25seSBpZDogc3RyaW5nO1xuICBwcml2YXRlIGlucHV0czogUmVhZElucHV0W10gPSBbXTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLmlkID0gYGV2aWRlbmNlLSR7KytldmlkZW5jZUNvdW50ZXJ9YDtcbiAgfVxuXG4gIG9uUmVhZChldmVudDogUmVhZEV2ZW50KTogdm9pZCB7XG4gICAgaWYgKCFldmVudC5rZXkpIHJldHVybjtcbiAgICB0aGlzLmlucHV0cy5wdXNoKHtcbiAgICAgIGtleTogZXZlbnQua2V5LFxuICAgICAgdmFsdWVTdW1tYXJ5OiBldmVudC5yZWRhY3RlZCA/ICdbUkVEQUNURURdJyA6IHN1bW1hcml6ZVZhbHVlKGV2ZW50LnZhbHVlLCBNQVhfVkFMVUVfTEVOKSxcbiAgICAgIHJlZGFjdGVkOiBldmVudC5yZWRhY3RlZCA9PT0gdHJ1ZSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKiBSZXR1cm5zIGNvbGxlY3RlZCByZWFkIGlucHV0cy4gKi9cbiAgZ2V0SW5wdXRzKCk6IFJlYWRJbnB1dFtdIHtcbiAgICByZXR1cm4gdGhpcy5pbnB1dHM7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* detach/drivers/immediate.ts — Run detached work synchronously inside `schedule()`.
|
|
3
|
+
*
|
|
4
|
+
* Pattern: Null-object driver for the "no actual deferral" case. Same
|
|
5
|
+
* intent as a `setTimeout(fn, 0)` shim that just calls `fn()`
|
|
6
|
+
* — keeps the API surface uniform so consumers can swap drivers
|
|
7
|
+
* without changing call sites.
|
|
8
|
+
* Role: Test fixture + opt-in for consumers who want fire-and-forget
|
|
9
|
+
* ergonomics (the handle API) without actually deferring. Useful
|
|
10
|
+
* for:
|
|
11
|
+
*
|
|
12
|
+
* - unit tests where deterministic, synchronous completion
|
|
13
|
+
* beats microtask gymnastics
|
|
14
|
+
* - very small detach payloads where the overhead of a
|
|
15
|
+
* microtask roundtrip exceeds the work itself
|
|
16
|
+
* - debugging — easier to step through with breakpoints
|
|
17
|
+
*
|
|
18
|
+
* Performance:
|
|
19
|
+
* - Sync runChild → handle becomes terminal before `schedule()` returns
|
|
20
|
+
* - Async runChild → handle marks running sync, terminal at runChild's
|
|
21
|
+
* resolution. The `wait()` Promise is the same one consumers use for
|
|
22
|
+
* any other driver; behaviour is uniform.
|
|
23
|
+
*
|
|
24
|
+
* Caveat — this is NOT a passive-recorder by default:
|
|
25
|
+
* When runChild is sync, the parent stage observes the work's side
|
|
26
|
+
* effects WITHIN its own slice. That's intentional for the test/debug
|
|
27
|
+
* use case but means consumers should NOT use `immediateDriver` for
|
|
28
|
+
* long-running work in production hot paths — pick `microtaskBatchDriver`
|
|
29
|
+
* for that.
|
|
30
|
+
*/
|
|
31
|
+
import { asImpl, createHandle } from '../handle.js';
|
|
32
|
+
import { register, unregister } from '../registry.js';
|
|
33
|
+
import { defaultRunChild } from '../runChild.js';
|
|
34
|
+
/**
|
|
35
|
+
* Build an immediate driver wired to a custom child runner. Most
|
|
36
|
+
* consumers want the default singleton `immediateDriver`.
|
|
37
|
+
*/
|
|
38
|
+
export function createImmediateDriver(runChild = defaultRunChild) {
|
|
39
|
+
return {
|
|
40
|
+
name: 'immediate',
|
|
41
|
+
capabilities: { browserSafe: true, nodeSafe: true, edgeSafe: true },
|
|
42
|
+
schedule(child, input, refId) {
|
|
43
|
+
const handle = createHandle(refId);
|
|
44
|
+
register(handle);
|
|
45
|
+
const impl = asImpl(handle);
|
|
46
|
+
impl._markRunning();
|
|
47
|
+
// Don't await here — driver schedule() must return synchronously
|
|
48
|
+
// (passive recorder rule). The Promise from runChild handles the
|
|
49
|
+
// rest; if it's already-resolved (sync runner), the .then runs on
|
|
50
|
+
// the next microtask but the schedule() call still returns sync.
|
|
51
|
+
Promise.resolve()
|
|
52
|
+
.then(() => runChild(child, input))
|
|
53
|
+
.then((result) => {
|
|
54
|
+
impl._markDone(result);
|
|
55
|
+
unregister(impl.id);
|
|
56
|
+
}, (err) => {
|
|
57
|
+
impl._markFailed(err instanceof Error ? err : new Error(String(err)));
|
|
58
|
+
unregister(impl.id);
|
|
59
|
+
});
|
|
60
|
+
return handle;
|
|
61
|
+
},
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
/** Default singleton — most consumers use this. */
|
|
65
|
+
export const immediateDriver = createImmediateDriver();
|
|
66
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1tZWRpYXRlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9kZXRhY2gvZHJpdmVycy9pbW1lZGlhdGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBNkJHO0FBR0gsT0FBTyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDcEQsT0FBTyxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN0RCxPQUFPLEVBQW9CLGVBQWUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBR25FOzs7R0FHRztBQUNILE1BQU0sVUFBVSxxQkFBcUIsQ0FBQyxXQUF3QixlQUFlO0lBQzNFLE9BQU87UUFDTCxJQUFJLEVBQUUsV0FBVztRQUNqQixZQUFZLEVBQUUsRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRTtRQUNuRSxRQUFRLENBQUMsS0FBZ0IsRUFBRSxLQUFjLEVBQUUsS0FBYTtZQUN0RCxNQUFNLE1BQU0sR0FBRyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDbkMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ2pCLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUM1QixJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDcEIsaUVBQWlFO1lBQ2pFLGlFQUFpRTtZQUNqRSxrRUFBa0U7WUFDbEUsaUVBQWlFO1lBQ2pFLE9BQU8sQ0FBQyxPQUFPLEVBQUU7aUJBQ2QsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7aUJBQ2xDLElBQUksQ0FDSCxDQUFDLE1BQU0sRUFBRSxFQUFFO2dCQUNULElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQ3ZCLFVBQVUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDdEIsQ0FBQyxFQUNELENBQUMsR0FBWSxFQUFFLEVBQUU7Z0JBQ2YsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLFlBQVksS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3RFLFVBQVUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDdEIsQ0FBQyxDQUNGLENBQUM7WUFDSixPQUFPLE1BQU0sQ0FBQztRQUNoQixDQUFDO0tBQ0YsQ0FBQztBQUNKLENBQUM7QUFFRCxtREFBbUQ7QUFDbkQsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUFpQixxQkFBcUIsRUFBRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBkZXRhY2gvZHJpdmVycy9pbW1lZGlhdGUudHMg4oCUIFJ1biBkZXRhY2hlZCB3b3JrIHN5bmNocm9ub3VzbHkgaW5zaWRlIGBzY2hlZHVsZSgpYC5cbiAqXG4gKiBQYXR0ZXJuOiAgTnVsbC1vYmplY3QgZHJpdmVyIGZvciB0aGUgXCJubyBhY3R1YWwgZGVmZXJyYWxcIiBjYXNlLiBTYW1lXG4gKiAgICAgICAgICAgaW50ZW50IGFzIGEgYHNldFRpbWVvdXQoZm4sIDApYCBzaGltIHRoYXQganVzdCBjYWxscyBgZm4oKWBcbiAqICAgICAgICAgICDigJQga2VlcHMgdGhlIEFQSSBzdXJmYWNlIHVuaWZvcm0gc28gY29uc3VtZXJzIGNhbiBzd2FwIGRyaXZlcnNcbiAqICAgICAgICAgICB3aXRob3V0IGNoYW5naW5nIGNhbGwgc2l0ZXMuXG4gKiBSb2xlOiAgICAgVGVzdCBmaXh0dXJlICsgb3B0LWluIGZvciBjb25zdW1lcnMgd2hvIHdhbnQgZmlyZS1hbmQtZm9yZ2V0XG4gKiAgICAgICAgICAgZXJnb25vbWljcyAodGhlIGhhbmRsZSBBUEkpIHdpdGhvdXQgYWN0dWFsbHkgZGVmZXJyaW5nLiBVc2VmdWxcbiAqICAgICAgICAgICBmb3I6XG4gKlxuICogICAgICAgICAgICAgLSB1bml0IHRlc3RzIHdoZXJlIGRldGVybWluaXN0aWMsIHN5bmNocm9ub3VzIGNvbXBsZXRpb25cbiAqICAgICAgICAgICAgICAgYmVhdHMgbWljcm90YXNrIGd5bW5hc3RpY3NcbiAqICAgICAgICAgICAgIC0gdmVyeSBzbWFsbCBkZXRhY2ggcGF5bG9hZHMgd2hlcmUgdGhlIG92ZXJoZWFkIG9mIGFcbiAqICAgICAgICAgICAgICAgbWljcm90YXNrIHJvdW5kdHJpcCBleGNlZWRzIHRoZSB3b3JrIGl0c2VsZlxuICogICAgICAgICAgICAgLSBkZWJ1Z2dpbmcg4oCUIGVhc2llciB0byBzdGVwIHRocm91Z2ggd2l0aCBicmVha3BvaW50c1xuICpcbiAqIFBlcmZvcm1hbmNlOlxuICogICAtIFN5bmMgcnVuQ2hpbGQg4oaSIGhhbmRsZSBiZWNvbWVzIHRlcm1pbmFsIGJlZm9yZSBgc2NoZWR1bGUoKWAgcmV0dXJuc1xuICogICAtIEFzeW5jIHJ1bkNoaWxkIOKGkiBoYW5kbGUgbWFya3MgcnVubmluZyBzeW5jLCB0ZXJtaW5hbCBhdCBydW5DaGlsZCdzXG4gKiAgICAgcmVzb2x1dGlvbi4gVGhlIGB3YWl0KClgIFByb21pc2UgaXMgdGhlIHNhbWUgb25lIGNvbnN1bWVycyB1c2UgZm9yXG4gKiAgICAgYW55IG90aGVyIGRyaXZlcjsgYmVoYXZpb3VyIGlzIHVuaWZvcm0uXG4gKlxuICogQ2F2ZWF0IOKAlCB0aGlzIGlzIE5PVCBhIHBhc3NpdmUtcmVjb3JkZXIgYnkgZGVmYXVsdDpcbiAqICAgV2hlbiBydW5DaGlsZCBpcyBzeW5jLCB0aGUgcGFyZW50IHN0YWdlIG9ic2VydmVzIHRoZSB3b3JrJ3Mgc2lkZVxuICogICBlZmZlY3RzIFdJVEhJTiBpdHMgb3duIHNsaWNlLiBUaGF0J3MgaW50ZW50aW9uYWwgZm9yIHRoZSB0ZXN0L2RlYnVnXG4gKiAgIHVzZSBjYXNlIGJ1dCBtZWFucyBjb25zdW1lcnMgc2hvdWxkIE5PVCB1c2UgYGltbWVkaWF0ZURyaXZlcmAgZm9yXG4gKiAgIGxvbmctcnVubmluZyB3b3JrIGluIHByb2R1Y3Rpb24gaG90IHBhdGhzIOKAlCBwaWNrIGBtaWNyb3Rhc2tCYXRjaERyaXZlcmBcbiAqICAgZm9yIHRoYXQuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBGbG93Q2hhcnQgfSBmcm9tICcuLi8uLi9idWlsZGVyL3R5cGVzLmpzJztcbmltcG9ydCB7IGFzSW1wbCwgY3JlYXRlSGFuZGxlIH0gZnJvbSAnLi4vaGFuZGxlLmpzJztcbmltcG9ydCB7IHJlZ2lzdGVyLCB1bnJlZ2lzdGVyIH0gZnJvbSAnLi4vcmVnaXN0cnkuanMnO1xuaW1wb3J0IHsgdHlwZSBDaGlsZFJ1bm5lciwgZGVmYXVsdFJ1bkNoaWxkIH0gZnJvbSAnLi4vcnVuQ2hpbGQuanMnO1xuaW1wb3J0IHR5cGUgeyBEZXRhY2hEcml2ZXIsIERldGFjaEhhbmRsZSB9IGZyb20gJy4uL3R5cGVzLmpzJztcblxuLyoqXG4gKiBCdWlsZCBhbiBpbW1lZGlhdGUgZHJpdmVyIHdpcmVkIHRvIGEgY3VzdG9tIGNoaWxkIHJ1bm5lci4gTW9zdFxuICogY29uc3VtZXJzIHdhbnQgdGhlIGRlZmF1bHQgc2luZ2xldG9uIGBpbW1lZGlhdGVEcml2ZXJgLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlSW1tZWRpYXRlRHJpdmVyKHJ1bkNoaWxkOiBDaGlsZFJ1bm5lciA9IGRlZmF1bHRSdW5DaGlsZCk6IERldGFjaERyaXZlciB7XG4gIHJldHVybiB7XG4gICAgbmFtZTogJ2ltbWVkaWF0ZScsXG4gICAgY2FwYWJpbGl0aWVzOiB7IGJyb3dzZXJTYWZlOiB0cnVlLCBub2RlU2FmZTogdHJ1ZSwgZWRnZVNhZmU6IHRydWUgfSxcbiAgICBzY2hlZHVsZShjaGlsZDogRmxvd0NoYXJ0LCBpbnB1dDogdW5rbm93biwgcmVmSWQ6IHN0cmluZyk6IERldGFjaEhhbmRsZSB7XG4gICAgICBjb25zdCBoYW5kbGUgPSBjcmVhdGVIYW5kbGUocmVmSWQpO1xuICAgICAgcmVnaXN0ZXIoaGFuZGxlKTtcbiAgICAgIGNvbnN0IGltcGwgPSBhc0ltcGwoaGFuZGxlKTtcbiAgICAgIGltcGwuX21hcmtSdW5uaW5nKCk7XG4gICAgICAvLyBEb24ndCBhd2FpdCBoZXJlIOKAlCBkcml2ZXIgc2NoZWR1bGUoKSBtdXN0IHJldHVybiBzeW5jaHJvbm91c2x5XG4gICAgICAvLyAocGFzc2l2ZSByZWNvcmRlciBydWxlKS4gVGhlIFByb21pc2UgZnJvbSBydW5DaGlsZCBoYW5kbGVzIHRoZVxuICAgICAgLy8gcmVzdDsgaWYgaXQncyBhbHJlYWR5LXJlc29sdmVkIChzeW5jIHJ1bm5lciksIHRoZSAudGhlbiBydW5zIG9uXG4gICAgICAvLyB0aGUgbmV4dCBtaWNyb3Rhc2sgYnV0IHRoZSBzY2hlZHVsZSgpIGNhbGwgc3RpbGwgcmV0dXJucyBzeW5jLlxuICAgICAgUHJvbWlzZS5yZXNvbHZlKClcbiAgICAgICAgLnRoZW4oKCkgPT4gcnVuQ2hpbGQoY2hpbGQsIGlucHV0KSlcbiAgICAgICAgLnRoZW4oXG4gICAgICAgICAgKHJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgaW1wbC5fbWFya0RvbmUocmVzdWx0KTtcbiAgICAgICAgICAgIHVucmVnaXN0ZXIoaW1wbC5pZCk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICAoZXJyOiB1bmtub3duKSA9PiB7XG4gICAgICAgICAgICBpbXBsLl9tYXJrRmFpbGVkKGVyciBpbnN0YW5jZW9mIEVycm9yID8gZXJyIDogbmV3IEVycm9yKFN0cmluZyhlcnIpKSk7XG4gICAgICAgICAgICB1bnJlZ2lzdGVyKGltcGwuaWQpO1xuICAgICAgICAgIH0sXG4gICAgICAgICk7XG4gICAgICByZXR1cm4gaGFuZGxlO1xuICAgIH0sXG4gIH07XG59XG5cbi8qKiBEZWZhdWx0IHNpbmdsZXRvbiDigJQgbW9zdCBjb25zdW1lcnMgdXNlIHRoaXMuICovXG5leHBvcnQgY29uc3QgaW1tZWRpYXRlRHJpdmVyOiBEZXRhY2hEcml2ZXIgPSBjcmVhdGVJbW1lZGlhdGVEcml2ZXIoKTtcbiJdfQ==
|