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
|
@@ -18,6 +18,8 @@ exports.SubflowExecutor = void 0;
|
|
|
18
18
|
const types_js_1 = require("../../pause/types.js");
|
|
19
19
|
const SubflowInputMapper_js_1 = require("./SubflowInputMapper.js");
|
|
20
20
|
class SubflowExecutor {
|
|
21
|
+
deps;
|
|
22
|
+
traverserFactory;
|
|
21
23
|
constructor(deps, traverserFactory) {
|
|
22
24
|
this.deps = deps;
|
|
23
25
|
this.traverserFactory = traverserFactory;
|
|
@@ -32,9 +34,8 @@ class SubflowExecutor {
|
|
|
32
34
|
* 5. Stores execution data for debugging/visualization
|
|
33
35
|
*/
|
|
34
36
|
async executeSubflow(node, parentContext, breakFlag, branchPath, subflowResultsMap, parentTraversalContext) {
|
|
35
|
-
var _a, _b, _c, _d, _e, _f, _g;
|
|
36
37
|
const subflowId = node.subflowId;
|
|
37
|
-
const subflowName =
|
|
38
|
+
const subflowName = node.subflowName ?? node.name;
|
|
38
39
|
parentContext.addFlowDebugMessage('subflow', `Entering ${subflowName} subflow`, {
|
|
39
40
|
targetStage: subflowId,
|
|
40
41
|
});
|
|
@@ -47,7 +48,7 @@ class SubflowExecutor {
|
|
|
47
48
|
// pausedToolCallId, etc.) with the parent's start-of-subflow view.
|
|
48
49
|
const mountOptions = node.subflowMountOptions;
|
|
49
50
|
let mappedInput = {};
|
|
50
|
-
const resumeCapture =
|
|
51
|
+
const resumeCapture = this.deps.subflowStatesForResume?.[subflowId];
|
|
51
52
|
const isResumeForThisSubflow = resumeCapture !== undefined;
|
|
52
53
|
if (mountOptions && !isResumeForThisSubflow) {
|
|
53
54
|
try {
|
|
@@ -71,8 +72,8 @@ class SubflowExecutor {
|
|
|
71
72
|
// a description (builders don't copy it), so reading `node.description` here returns
|
|
72
73
|
// `undefined` and taxonomy markers set on the subflow root (e.g. agentfootprint's
|
|
73
74
|
// `'Agent: ReAct loop'` / `'LLMCall: one-shot'`) never reach downstream consumers.
|
|
74
|
-
const rootDescription =
|
|
75
|
-
this.deps.narrativeGenerator.onSubflowEntry(subflowName, subflowId, rootDescription
|
|
75
|
+
const rootDescription = this.deps.subflows?.[subflowId]?.root?.description;
|
|
76
|
+
this.deps.narrativeGenerator.onSubflowEntry(subflowName, subflowId, rootDescription ?? node.description, parentTraversalContext, narrativeInput);
|
|
76
77
|
// Create isolated runtime via dynamic construction (avoids circular import)
|
|
77
78
|
const ExecutionRuntimeClass = this.deps.executionRuntime.constructor;
|
|
78
79
|
const nestedRuntime = new ExecutionRuntimeClass(node.name, node.id);
|
|
@@ -142,7 +143,7 @@ class SubflowExecutor {
|
|
|
142
143
|
// is safe — SharedMemory snapshot returns a plain object.
|
|
143
144
|
error.captureSubflowScope(subflowId, snap.sharedState);
|
|
144
145
|
}
|
|
145
|
-
catch
|
|
146
|
+
catch {
|
|
146
147
|
// Snapshot failure shouldn't mask the pause — let the pause
|
|
147
148
|
// bubble up; resume will fall back to checkpoint.sharedState
|
|
148
149
|
// (the parent scope) for this subflow's keys.
|
|
@@ -175,7 +176,7 @@ class SubflowExecutor {
|
|
|
175
176
|
// lands in the parent scope. Consumers who need to suppress output on
|
|
176
177
|
// break check the break state inside their outputMapper and early-return.
|
|
177
178
|
// See `SubflowMountOptions.propagateBreak` JSDoc for rationale.
|
|
178
|
-
if (traverserHandle &&
|
|
179
|
+
if (traverserHandle && mountOptions?.propagateBreak === true) {
|
|
179
180
|
const innerBreak = traverserHandle.getBreakState();
|
|
180
181
|
if (innerBreak.shouldBreak) {
|
|
181
182
|
breakFlag.shouldBreak = true;
|
|
@@ -190,7 +191,7 @@ class SubflowExecutor {
|
|
|
190
191
|
}
|
|
191
192
|
const subflowTreeContext = nestedRuntime.getSnapshot();
|
|
192
193
|
// ─── Output Mapping ───
|
|
193
|
-
if (!subflowError &&
|
|
194
|
+
if (!subflowError && mountOptions?.outputMapper) {
|
|
194
195
|
try {
|
|
195
196
|
let outputContext = parentContext;
|
|
196
197
|
if (parentContext.branchId && parentContext.branchId !== '' && parentContext.parent) {
|
|
@@ -206,7 +207,7 @@ class SubflowExecutor {
|
|
|
206
207
|
// so any key marked redacted in the subflow is already visible in the parent's scope.
|
|
207
208
|
// ScopeFacade.setValue checks _redactedKeys.has(key), so writes via outputMapper
|
|
208
209
|
// automatically inherit the subflow's dynamic redaction state.
|
|
209
|
-
const effectiveOutput = subflowOutput
|
|
210
|
+
const effectiveOutput = subflowOutput ?? { ...subflowTreeContext.sharedState };
|
|
210
211
|
const mappedOutput = (0, SubflowInputMapper_js_1.applyOutputMapping)(effectiveOutput, parentScope, outputContext, mountOptions);
|
|
211
212
|
outputContext.commit();
|
|
212
213
|
}
|
|
@@ -225,7 +226,7 @@ class SubflowExecutor {
|
|
|
225
226
|
},
|
|
226
227
|
parentStageId: parentContext.getStageId(),
|
|
227
228
|
};
|
|
228
|
-
const subflowDef =
|
|
229
|
+
const subflowDef = this.deps.subflows?.[subflowId];
|
|
229
230
|
if (subflowDef && subflowDef.buildTimeStructure) {
|
|
230
231
|
subflowResult.pipelineStructure = subflowDef.buildTimeStructure;
|
|
231
232
|
}
|
|
@@ -233,7 +234,7 @@ class SubflowExecutor {
|
|
|
233
234
|
parentContext.addFlowDebugMessage('subflow', `Exiting ${subflowName} subflow`, {
|
|
234
235
|
targetStage: subflowId,
|
|
235
236
|
});
|
|
236
|
-
this.deps.narrativeGenerator.onSubflowExit(subflowName, subflowId, parentTraversalContext,
|
|
237
|
+
this.deps.narrativeGenerator.onSubflowExit(subflowName, subflowId, parentTraversalContext, subflowResult.treeContext?.globalContext);
|
|
237
238
|
parentContext.commit();
|
|
238
239
|
if (subflowError) {
|
|
239
240
|
throw subflowError;
|
|
@@ -242,4 +243,4 @@ class SubflowExecutor {
|
|
|
242
243
|
}
|
|
243
244
|
}
|
|
244
245
|
exports.SubflowExecutor = SubflowExecutor;
|
|
245
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3ViZmxvd0V4ZWN1dG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9lbmdpbmUvaGFuZGxlcnMvU3ViZmxvd0V4ZWN1dG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7Ozs7Ozs7OztHQWFHOzs7QUFHSCxtREFBcUQ7QUFVckQsbUVBQTRHO0FBRzVHLE1BQWEsZUFBZTtJQUMxQixZQUNVLElBQStCLEVBQy9CLGdCQUF1RDtRQUR2RCxTQUFJLEdBQUosSUFBSSxDQUEyQjtRQUMvQixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQXVDO0lBQzlELENBQUM7SUFFSjs7Ozs7Ozs7T0FRRztJQUNILEtBQUssQ0FBQyxjQUFjLENBQ2xCLElBQTZCLEVBQzdCLGFBQTJCLEVBQzNCLFNBQW9CLEVBQ3BCLFVBQThCLEVBQzlCLGlCQUE2QyxFQUM3QyxzQkFBeUM7O1FBRXpDLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFVLENBQUM7UUFDbEMsTUFBTSxXQUFXLEdBQUcsTUFBQSxJQUFJLENBQUMsV0FBVyxtQ0FBSSxJQUFJLENBQUMsSUFBSSxDQUFDO1FBRWxELGFBQWEsQ0FBQyxtQkFBbUIsQ0FBQyxTQUFTLEVBQUUsWUFBWSxXQUFXLFVBQVUsRUFBRTtZQUM5RSxXQUFXLEVBQUUsU0FBUztTQUN2QixDQUFDLENBQUM7UUFFSCx3QkFBd0I7UUFDeEIsRUFBRTtRQUNGLGlFQUFpRTtRQUNqRSxpRUFBaUU7UUFDakUsK0RBQStEO1FBQy9ELHlEQUF5RDtRQUN6RCxtRUFBbUU7UUFDbkUsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDO1FBQzlDLElBQUksV0FBVyxHQUE0QixFQUFFLENBQUM7UUFDOUMsTUFBTSxhQUFhLEdBQUcsTUFBQSxJQUFJLENBQUMsSUFBSSxDQUFDLHNCQUFzQiwwQ0FBRyxTQUFTLENBQUMsQ0FBQztRQUNwRSxNQUFNLHNCQUFzQixHQUFHLGFBQWEsS0FBSyxTQUFTLENBQUM7UUFFM0QsSUFBSSxZQUFZLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO1lBQzVDLElBQUksQ0FBQztnQkFDSCxNQUFNLFdBQVcsR0FBRyxhQUFhLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBQzdDLFdBQVcsR0FBRyxJQUFBLDZDQUFxQixFQUFDLFdBQVcsRUFBRSxZQUFZLENBQUMsQ0FBQztnQkFDL0QsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztvQkFDeEMscUVBQXFFO2dCQUN2RSxDQUFDO1lBQ0gsQ0FBQztZQUFDLE9BQU8sS0FBVSxFQUFFLENBQUM7Z0JBQ3BCLGFBQWEsQ0FBQyxRQUFRLENBQUMsa0JBQWtCLEVBQUUsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7Z0JBQzdELElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxxQ0FBcUMsU0FBUyxJQUFJLEVBQUUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO2dCQUN0RixNQUFNLEtBQUssQ0FBQztZQUNkLENBQUM7UUFDSCxDQUFDO1FBRUQsc0ZBQXNGO1FBQ3RGLDJGQUEyRjtRQUMzRixNQUFNLGNBQWMsR0FBRyxXQUFXLENBQUM7UUFDbkMseUZBQXlGO1FBQ3pGLHlGQUF5RjtRQUN6RixxRkFBcUY7UUFDckYsa0ZBQWtGO1FBQ2xGLG1GQUFtRjtRQUNuRixNQUFNLGVBQWUsR0FBRyxNQUFBLE1BQUEsTUFBQSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsMENBQUcsU0FBUyxDQUFDLDBDQUFFLElBQUksMENBQUUsV0FBVyxDQUFDO1FBQzNFLElBQUksQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsY0FBYyxDQUN6QyxXQUFXLEVBQ1gsU0FBUyxFQUNULGVBQWUsYUFBZixlQUFlLGNBQWYsZUFBZSxHQUFJLElBQUksQ0FBQyxXQUFXLEVBQ25DLHNCQUFzQixFQUN0QixjQUFjLENBQ2YsQ0FBQztRQUVGLDRFQUE0RTtRQUM1RSxNQUFNLHFCQUFxQixHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsV0FHbkMsQ0FBQztRQUN2QixNQUFNLGFBQWEsR0FBRyxJQUFJLHFCQUFxQixDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3BFLElBQUksaUJBQWlCLEdBQUcsYUFBYSxDQUFDLGdCQUFnQixDQUFDO1FBRXZELHNEQUFzRDtRQUN0RCxrRUFBa0U7UUFDbEUsbUVBQW1FO1FBQ25FLDhEQUE4RDtRQUM5RCxNQUFNLFVBQVUsR0FBNEIsc0JBQXNCLENBQUMsQ0FBQyxDQUFDLGFBQWMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDO1FBQ2xHLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDdkMsSUFBQSw4Q0FBc0IsRUFBQyxhQUFhLEVBQUUsVUFBVSxDQUFDLENBQUM7WUFDbEQsOERBQThEO1lBQzlELE1BQU0saUJBQWlCLEdBQUcsaUJBQWlCLENBQUMsV0FBbUQsQ0FBQztZQUNoRyxpQkFBaUIsR0FBRyxJQUFJLGlCQUFpQixDQUN2QyxFQUFFLEVBQ0YsaUJBQWlCLENBQUMsU0FBUyxFQUMzQixpQkFBaUIsQ0FBQyxPQUFPLEVBQ3pCLGFBQWEsQ0FBQyxXQUFXLEVBQ3pCLEVBQUUsRUFDRixhQUFhLENBQUMsZ0JBQWdCLENBQy9CLENBQUM7WUFDRixhQUFhLENBQUMsZ0JBQWdCLEdBQUcsaUJBQWlCLENBQUM7UUFDckQsQ0FBQztRQUVELDRFQUE0RTtRQUM1RSxFQUFFO1FBQ0Ysa0VBQWtFO1FBQ2xFLCtEQUErRDtRQUMvRCwrREFBK0Q7UUFDL0QsK0RBQStEO1FBQy9ELGlFQUFpRTtRQUNqRSxrRUFBa0U7UUFDbEUsbUVBQW1FO1FBQ25FLEVBQUU7UUFDRixvRUFBb0U7UUFDcEUsb0VBQW9FO1FBQ3BFLG1EQUFtRDtRQUNuRCxNQUFNLFdBQVcsR0FBNEI7WUFDM0MsR0FBRyxJQUFJO1lBQ1AsYUFBYSxFQUFFLEtBQUs7U0FDckIsQ0FBQztRQUVGLHdDQUF3QztRQUN4QyxpRkFBaUY7UUFDakYseUVBQXlFO1FBQ3pFLElBQUksYUFBa0IsQ0FBQztRQUN2QixJQUFJLFlBQStCLENBQUM7UUFDcEMsSUFBSSxlQUFpRSxDQUFDO1FBRXRFLElBQUksQ0FBQztZQUNILGVBQWUsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUM7Z0JBQ3RDLElBQUksRUFBRSxXQUFXO2dCQUNqQixnQkFBZ0IsRUFBRSxhQUFhO2dCQUMvQixlQUFlLEVBQUUsV0FBVztnQkFDNUIsU0FBUzthQUNWLENBQUMsQ0FBQztZQUVILGFBQWEsR0FBRyxNQUFNLGVBQWUsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNsRCxDQUFDO1FBQUMsT0FBTyxLQUFVLEVBQUUsQ0FBQztZQUNwQixnRUFBZ0U7WUFDaEUsOERBQThEO1lBQzlELDZCQUE2QjtZQUM3QixFQUFFO1lBQ0YsK0RBQStEO1lBQy9ELCtEQUErRDtZQUMvRCxpRUFBaUU7WUFDakUsaUVBQWlFO1lBQ2pFLDJEQUEyRDtZQUMzRCxFQUFFO1lBQ0YsaUVBQWlFO1lBQ2pFLGlFQUFpRTtZQUNqRSxJQUFJLElBQUEsd0JBQWEsRUFBQyxLQUFLLENBQUMsRUFBRSxDQUFDO2dCQUN6QixJQUFJLENBQUM7b0JBQ0gsTUFBTSxJQUFJLEdBQUcsYUFBYSxDQUFDLFdBQVcsRUFBRSxDQUFDO29CQUN6Qyx5REFBeUQ7b0JBQ3pELDJEQUEyRDtvQkFDM0QsMERBQTBEO29CQUMxRCxLQUFLLENBQUMsbUJBQW1CLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxXQUFzQyxDQUFDLENBQUM7Z0JBQ3BGLENBQUM7Z0JBQUMsV0FBTSxDQUFDO29CQUNQLDREQUE0RDtvQkFDNUQsNkRBQTZEO29CQUM3RCw4Q0FBOEM7Z0JBQ2hELENBQUM7Z0JBQ0QsS0FBSyxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsQ0FBQztnQkFDaEMsTUFBTSxLQUFLLENBQUM7WUFDZCxDQUFDO1lBQ0QsWUFBWSxHQUFHLEtBQUssQ0FBQztZQUNyQixhQUFhLENBQUMsUUFBUSxDQUFDLGNBQWMsRUFBRSxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztZQUN6RCxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMscUJBQXFCLFNBQVMsSUFBSSxFQUFFLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUN4RSxDQUFDO1FBRUQsc0ZBQXNGO1FBQ3RGLElBQUksZUFBZSxFQUFFLENBQUM7WUFDcEIsS0FBSyxNQUFNLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxJQUFJLGVBQWUsQ0FBQyxpQkFBaUIsRUFBRSxFQUFFLENBQUM7Z0JBQy9ELGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDcEMsQ0FBQztRQUNILENBQUM7UUFFRCwyRUFBMkU7UUFDM0UsRUFBRTtRQUNGLGlFQUFpRTtRQUNqRSx5RUFBeUU7UUFDekUsZ0VBQWdFO1FBQ2hFLDhEQUE4RDtRQUM5RCxFQUFFO1FBQ0YscUVBQXFFO1FBQ3JFLHdEQUF3RDtRQUN4RCxFQUFFO1FBQ0Ysd0VBQXdFO1FBQ3hFLHFFQUFxRTtRQUNyRSxzRUFBc0U7UUFDdEUsMEVBQTBFO1FBQzFFLGdFQUFnRTtRQUNoRSxJQUFJLGVBQWUsSUFBSSxDQUFBLFlBQVksYUFBWixZQUFZLHVCQUFaLFlBQVksQ0FBRSxjQUFjLE1BQUssSUFBSSxFQUFFLENBQUM7WUFDN0QsTUFBTSxVQUFVLEdBQUcsZUFBZSxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQ25ELElBQUksVUFBVSxDQUFDLFdBQVcsRUFBRSxDQUFDO2dCQUMzQixTQUFTLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztnQkFDN0IsSUFBSSxVQUFVLENBQUMsTUFBTSxLQUFLLFNBQVMsSUFBSSxTQUFTLENBQUMsTUFBTSxLQUFLLFNBQVMsRUFBRSxDQUFDO29CQUN0RSxTQUFTLENBQUMsTUFBTSxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUM7Z0JBQ3ZDLENBQUM7Z0JBQ0Qsa0VBQWtFO2dCQUNsRSxtRUFBbUU7Z0JBQ25FLDJEQUEyRDtnQkFDM0QsSUFBSSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLHNCQUFzQixFQUFFLFVBQVUsQ0FBQyxNQUFNLEVBQUUsU0FBUyxDQUFDLENBQUM7WUFDMUcsQ0FBQztRQUNILENBQUM7UUFFRCxNQUFNLGtCQUFrQixHQUFHLGFBQWEsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUV2RCx5QkFBeUI7UUFDekIsSUFBSSxDQUFDLFlBQVksS0FBSSxZQUFZLGFBQVosWUFBWSx1QkFBWixZQUFZLENBQUUsWUFBWSxDQUFBLEVBQUUsQ0FBQztZQUNoRCxJQUFJLENBQUM7Z0JBQ0gsSUFBSSxhQUFhLEdBQUcsYUFBYSxDQUFDO2dCQUNsQyxJQUFJLGFBQWEsQ0FBQyxRQUFRLElBQUksYUFBYSxDQUFDLFFBQVEsS0FBSyxFQUFFLElBQUksYUFBYSxDQUFDLE1BQU0sRUFBRSxDQUFDO29CQUNwRixhQUFhLEdBQUcsYUFBYSxDQUFDLE1BQU0sQ0FBQztnQkFDdkMsQ0FBQztnQkFFRCxNQUFNLFdBQVcsR0FBRyxhQUFhLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBQzdDLHNGQUFzRjtnQkFDdEYsb0ZBQW9GO2dCQUNwRix3RkFBd0Y7Z0JBQ3hGLGlGQUFpRjtnQkFDakYscURBQXFEO2dCQUNyRCw0RkFBNEY7Z0JBQzVGLHNGQUFzRjtnQkFDdEYsaUZBQWlGO2dCQUNqRiwrREFBK0Q7Z0JBQy9ELE1BQU0sZUFBZSxHQUFHLGFBQWEsYUFBYixhQUFhLGNBQWIsYUFBYSxHQUFJLEVBQUUsR0FBRyxrQkFBa0IsQ0FBQyxXQUFXLEVBQUUsQ0FBQztnQkFDL0UsTUFBTSxZQUFZLEdBQUcsSUFBQSwwQ0FBa0IsRUFBQyxlQUFlLEVBQUUsV0FBVyxFQUFFLGFBQWEsRUFBRSxZQUFZLENBQUMsQ0FBQztnQkFFbkcsYUFBYSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ3pCLENBQUM7WUFBQyxPQUFPLEtBQVUsRUFBRSxDQUFDO2dCQUNwQixhQUFhLENBQUMsUUFBUSxDQUFDLG1CQUFtQixFQUFFLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO2dCQUM5RCxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsc0NBQXNDLFNBQVMsSUFBSSxFQUFFLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztZQUN6RixDQUFDO1FBQ0gsQ0FBQztRQUVELE1BQU0sYUFBYSxHQUFrQjtZQUNuQyxTQUFTO1lBQ1QsV0FBVztZQUNYLFdBQVcsRUFBRTtnQkFDWCxhQUFhLEVBQUUsa0JBQWtCLENBQUMsV0FBVztnQkFDN0MsYUFBYSxFQUFFLGtCQUFrQixDQUFDLGFBQW1EO2dCQUNyRixPQUFPLEVBQUUsa0JBQWtCLENBQUMsU0FBUzthQUN0QztZQUNELGFBQWEsRUFBRSxhQUFhLENBQUMsVUFBVSxFQUFFO1NBQzFDLENBQUM7UUFFRixNQUFNLFVBQVUsR0FBRyxNQUFBLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSwwQ0FBRyxTQUFTLENBQUMsQ0FBQztRQUNuRCxJQUFJLFVBQVUsSUFBSyxVQUFrQixDQUFDLGtCQUFrQixFQUFFLENBQUM7WUFDekQsYUFBYSxDQUFDLGlCQUFpQixHQUFJLFVBQWtCLENBQUMsa0JBQWtCLENBQUM7UUFDM0UsQ0FBQztRQUVELGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxTQUFTLEVBQUUsYUFBYSxDQUFDLENBQUM7UUFFaEQsYUFBYSxDQUFDLG1CQUFtQixDQUFDLFNBQVMsRUFBRSxXQUFXLFdBQVcsVUFBVSxFQUFFO1lBQzdFLFdBQVcsRUFBRSxTQUFTO1NBQ3ZCLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsYUFBYSxDQUN4QyxXQUFXLEVBQ1gsU0FBUyxFQUNULHNCQUFzQixFQUN0QixNQUFBLGFBQWEsQ0FBQyxXQUFXLDBDQUFFLGFBQWEsQ0FDekMsQ0FBQztRQUVGLGFBQWEsQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUV2QixJQUFJLFlBQVksRUFBRSxDQUFDO1lBQ2pCLE1BQU0sWUFBWSxDQUFDO1FBQ3JCLENBQUM7UUFFRCxPQUFPLGFBQWEsQ0FBQztJQUN2QixDQUFDO0NBQ0Y7QUE5UUQsMENBOFFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBTdWJmbG93RXhlY3V0b3Ig4oCUIElzb2xhdGlvbiBib3VuZGFyeSBmb3Igc3ViZmxvdyBleGVjdXRpb24uXG4gKlxuICogUmVzcG9uc2liaWxpdGllczpcbiAqIC0gQ3JlYXRlIGlzb2xhdGVkIEV4ZWN1dGlvblJ1bnRpbWUgZm9yIGVhY2ggc3ViZmxvd1xuICogLSBBcHBseSBpbnB1dC9vdXRwdXQgbWFwcGluZyB2aWEgU3ViZmxvd0lucHV0TWFwcGVyXG4gKiAtIERlbGVnYXRlIHRyYXZlcnNhbCB0byBhIGZhY3RvcnktY3JlYXRlZCBGbG93Y2hhcnRUcmF2ZXJzZXJcbiAqIC0gVHJhY2sgc3ViZmxvdyByZXN1bHRzIGZvciBkZWJ1Z2dpbmcvdmlzdWFsaXphdGlvblxuICpcbiAqIEVhY2ggc3ViZmxvdyBnZXRzIGl0cyBvd24gR2xvYmFsU3RvcmUgZm9yIGlzb2xhdGlvbi5cbiAqIFRyYXZlcnNhbCB1c2VzIHRoZSBTQU1FIDctcGhhc2UgYWxnb3JpdGhtIGFzIHRoZSB0b3AtbGV2ZWwgdHJhdmVyc2VyXG4gKiAodmlhIFN1YmZsb3dUcmF2ZXJzZXJGYWN0b3J5KSwgc28gZGVjaWRlcnMsIHNlbGVjdG9ycywgbG9vcHMsIGxhenkgc3ViZmxvd3MsXG4gKiBhbmQgYWJvcnQgc2lnbmFscyBhbGwgd29yayBpbnNpZGUgc3ViZmxvd3MgYXV0b21hdGljYWxseS5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IFN0YWdlQ29udGV4dCB9IGZyb20gJy4uLy4uL21lbW9yeS9TdGFnZUNvbnRleHQuanMnO1xuaW1wb3J0IHsgaXNQYXVzZVNpZ25hbCB9IGZyb20gJy4uLy4uL3BhdXNlL3R5cGVzLmpzJztcbmltcG9ydCB0eXBlIHsgU3RhZ2VOb2RlIH0gZnJvbSAnLi4vZ3JhcGgvU3RhZ2VOb2RlLmpzJztcbmltcG9ydCB0eXBlIHsgVHJhdmVyc2FsQ29udGV4dCB9IGZyb20gJy4uL25hcnJhdGl2ZS90eXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7XG4gIEhhbmRsZXJEZXBzLFxuICBJRXhlY3V0aW9uUnVudGltZSxcbiAgU3ViZmxvd1Jlc3VsdCxcbiAgU3ViZmxvd1RyYXZlcnNlckZhY3RvcnksXG4gIFN1YmZsb3dUcmF2ZXJzZXJIYW5kbGUsXG59IGZyb20gJy4uL3R5cGVzLmpzJztcbmltcG9ydCB7IGFwcGx5T3V0cHV0TWFwcGluZywgZ2V0SW5pdGlhbFNjb3BlVmFsdWVzLCBzZWVkU3ViZmxvd0dsb2JhbFN0b3JlIH0gZnJvbSAnLi9TdWJmbG93SW5wdXRNYXBwZXIuanMnO1xuaW1wb3J0IHR5cGUgeyBCcmVha0ZsYWcgfSBmcm9tICcuL3R5cGVzLmpzJztcblxuZXhwb3J0IGNsYXNzIFN1YmZsb3dFeGVjdXRvcjxUT3V0ID0gYW55LCBUU2NvcGUgPSBhbnk+IHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBkZXBzOiBIYW5kbGVyRGVwczxUT3V0LCBUU2NvcGU+LFxuICAgIHByaXZhdGUgdHJhdmVyc2VyRmFjdG9yeTogU3ViZmxvd1RyYXZlcnNlckZhY3Rvcnk8VE91dCwgVFNjb3BlPixcbiAgKSB7fVxuXG4gIC8qKlxuICAgKiBFeGVjdXRlIGEgc3ViZmxvdyB3aXRoIGlzb2xhdGVkIGNvbnRleHQuXG4gICAqXG4gICAqIDEuIENyZWF0ZXMgYSBmcmVzaCBFeGVjdXRpb25SdW50aW1lIGZvciB0aGUgc3ViZmxvd1xuICAgKiAyLiBBcHBsaWVzIGlucHV0IG1hcHBpbmcgdG8gc2VlZCB0aGUgc3ViZmxvdydzIEdsb2JhbFN0b3JlXG4gICAqIDMuIERlbGVnYXRlcyB0cmF2ZXJzYWwgdG8gYSBmYWN0b3J5LWNyZWF0ZWQgRmxvd2NoYXJ0VHJhdmVyc2VyXG4gICAqIDQuIEFwcGxpZXMgb3V0cHV0IG1hcHBpbmcgdG8gd3JpdGUgcmVzdWx0cyBiYWNrIHRvIHBhcmVudCBzY29wZVxuICAgKiA1LiBTdG9yZXMgZXhlY3V0aW9uIGRhdGEgZm9yIGRlYnVnZ2luZy92aXN1YWxpemF0aW9uXG4gICAqL1xuICBhc3luYyBleGVjdXRlU3ViZmxvdyhcbiAgICBub2RlOiBTdGFnZU5vZGU8VE91dCwgVFNjb3BlPixcbiAgICBwYXJlbnRDb250ZXh0OiBTdGFnZUNvbnRleHQsXG4gICAgYnJlYWtGbGFnOiBCcmVha0ZsYWcsXG4gICAgYnJhbmNoUGF0aDogc3RyaW5nIHwgdW5kZWZpbmVkLFxuICAgIHN1YmZsb3dSZXN1bHRzTWFwOiBNYXA8c3RyaW5nLCBTdWJmbG93UmVzdWx0PixcbiAgICBwYXJlbnRUcmF2ZXJzYWxDb250ZXh0PzogVHJhdmVyc2FsQ29udGV4dCxcbiAgKTogUHJvbWlzZTxhbnk+IHtcbiAgICBjb25zdCBzdWJmbG93SWQgPSBub2RlLnN1YmZsb3dJZCE7XG4gICAgY29uc3Qgc3ViZmxvd05hbWUgPSBub2RlLnN1YmZsb3dOYW1lID8/IG5vZGUubmFtZTtcblxuICAgIHBhcmVudENvbnRleHQuYWRkRmxvd0RlYnVnTWVzc2FnZSgnc3ViZmxvdycsIGBFbnRlcmluZyAke3N1YmZsb3dOYW1lfSBzdWJmbG93YCwge1xuICAgICAgdGFyZ2V0U3RhZ2U6IHN1YmZsb3dJZCxcbiAgICB9KTtcblxuICAgIC8vIOKUgOKUgOKUgCBJbnB1dCBNYXBwaW5nIOKUgOKUgOKUgFxuICAgIC8vXG4gICAgLy8gUkVTVU1FIFBBVEggTk9URTogd2hlbiBgZGVwcy5zdWJmbG93U3RhdGVzRm9yUmVzdW1lYCBjYXJyaWVzIGFcbiAgICAvLyBjYXB0dXJlIGZvciBUSElTIHN1YmZsb3cgaWQsIHdlIFNLSVAgdGhlIGlucHV0TWFwcGVyIGVudGlyZWx5LlxuICAgIC8vIFRoZSBjYXB0dXJlIGlzIHRoZSBwb3N0LWlucHV0IHByZS1wYXVzZSBtZW1vcnkg4oCUIHJ1bm5pbmcgdGhlXG4gICAgLy8gbWFwcGVyIGFnYWluIHdvdWxkIGNsb2JiZXIgcG9zdC1pbnB1dCB3cml0ZXMgKGhpc3RvcnksXG4gICAgLy8gcGF1c2VkVG9vbENhbGxJZCwgZXRjLikgd2l0aCB0aGUgcGFyZW50J3Mgc3RhcnQtb2Ytc3ViZmxvdyB2aWV3LlxuICAgIGNvbnN0IG1vdW50T3B0aW9ucyA9IG5vZGUuc3ViZmxvd01vdW50T3B0aW9ucztcbiAgICBsZXQgbWFwcGVkSW5wdXQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge307XG4gICAgY29uc3QgcmVzdW1lQ2FwdHVyZSA9IHRoaXMuZGVwcy5zdWJmbG93U3RhdGVzRm9yUmVzdW1lPy5bc3ViZmxvd0lkXTtcbiAgICBjb25zdCBpc1Jlc3VtZUZvclRoaXNTdWJmbG93ID0gcmVzdW1lQ2FwdHVyZSAhPT0gdW5kZWZpbmVkO1xuXG4gICAgaWYgKG1vdW50T3B0aW9ucyAmJiAhaXNSZXN1bWVGb3JUaGlzU3ViZmxvdykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcGFyZW50U2NvcGUgPSBwYXJlbnRDb250ZXh0LmdldFNjb3BlKCk7XG4gICAgICAgIG1hcHBlZElucHV0ID0gZ2V0SW5pdGlhbFNjb3BlVmFsdWVzKHBhcmVudFNjb3BlLCBtb3VudE9wdGlvbnMpO1xuICAgICAgICBpZiAoT2JqZWN0LmtleXMobWFwcGVkSW5wdXQpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAvLyBtYXBwZWRJbnB1dCBpcyBjYXB0dXJlZCBpbiBTdWJmbG93UmVzdWx0LnRyZWVDb250ZXh0IGZvciBkZWJ1Z2dpbmdcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgICBwYXJlbnRDb250ZXh0LmFkZEVycm9yKCdpbnB1dE1hcHBlckVycm9yJywgZXJyb3IudG9TdHJpbmcoKSk7XG4gICAgICAgIHRoaXMuZGVwcy5sb2dnZXIuZXJyb3IoYEVycm9yIGluIGlucHV0TWFwcGVyIGZvciBzdWJmbG93ICgke3N1YmZsb3dJZH0pOmAsIHsgZXJyb3IgfSk7XG4gICAgICAgIHRocm93IGVycm9yO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIE5hcnJhdGl2ZSByZWNlaXZlcyBtYXBwZWQgaW5wdXQuIGlucHV0TWFwcGVyIGlzIGEgY29uc3VtZXIgZnVuY3Rpb24gdGhhdCBtYXkgaW5qZWN0XG4gICAgLy8gdmFsdWVzIG5vdCBmcm9tIHRoZSBzY29wZSAoYnlwYXNzaW5nIHJlZGFjdGlvbikuIFRoZSByZWNvcmRlciByZW5kZXJzIHBlciBpbmNsdWRlVmFsdWVzLlxuICAgIGNvbnN0IG5hcnJhdGl2ZUlucHV0ID0gbWFwcGVkSW5wdXQ7XG4gICAgLy8gYEZsb3dTdWJmbG93RXZlbnQuZGVzY3JpcHRpb25gIGlzIHNlbWFudGljYWxseSBcIndoYXQgdGhpcyBzdWJmbG93IGRvZXNcIiDigJQgc291cmNlZCBmcm9tXG4gICAgLy8gdGhlIHN1YmZsb3cncyBvd24gcm9vdCBzdGFnZSwgbm90IHRoZSBwYXJlbnQgbW91bnQgcG9pbnQuIFRoZSBtb3VudCBub2RlIG5ldmVyIGNhcnJpZXNcbiAgICAvLyBhIGRlc2NyaXB0aW9uIChidWlsZGVycyBkb24ndCBjb3B5IGl0KSwgc28gcmVhZGluZyBgbm9kZS5kZXNjcmlwdGlvbmAgaGVyZSByZXR1cm5zXG4gICAgLy8gYHVuZGVmaW5lZGAgYW5kIHRheG9ub215IG1hcmtlcnMgc2V0IG9uIHRoZSBzdWJmbG93IHJvb3QgKGUuZy4gYWdlbnRmb290cHJpbnQnc1xuICAgIC8vIGAnQWdlbnQ6IFJlQWN0IGxvb3AnYCAvIGAnTExNQ2FsbDogb25lLXNob3QnYCkgbmV2ZXIgcmVhY2ggZG93bnN0cmVhbSBjb25zdW1lcnMuXG4gICAgY29uc3Qgcm9vdERlc2NyaXB0aW9uID0gdGhpcy5kZXBzLnN1YmZsb3dzPy5bc3ViZmxvd0lkXT8ucm9vdD8uZGVzY3JpcHRpb247XG4gICAgdGhpcy5kZXBzLm5hcnJhdGl2ZUdlbmVyYXRvci5vblN1YmZsb3dFbnRyeShcbiAgICAgIHN1YmZsb3dOYW1lLFxuICAgICAgc3ViZmxvd0lkLFxuICAgICAgcm9vdERlc2NyaXB0aW9uID8/IG5vZGUuZGVzY3JpcHRpb24sXG4gICAgICBwYXJlbnRUcmF2ZXJzYWxDb250ZXh0LFxuICAgICAgbmFycmF0aXZlSW5wdXQsXG4gICAgKTtcblxuICAgIC8vIENyZWF0ZSBpc29sYXRlZCBydW50aW1lIHZpYSBkeW5hbWljIGNvbnN0cnVjdGlvbiAoYXZvaWRzIGNpcmN1bGFyIGltcG9ydClcbiAgICBjb25zdCBFeGVjdXRpb25SdW50aW1lQ2xhc3MgPSB0aGlzLmRlcHMuZXhlY3V0aW9uUnVudGltZS5jb25zdHJ1Y3RvciBhcyBuZXcgKFxuICAgICAgbmFtZTogc3RyaW5nLFxuICAgICAgaWQ6IHN0cmluZyxcbiAgICApID0+IElFeGVjdXRpb25SdW50aW1lO1xuICAgIGNvbnN0IG5lc3RlZFJ1bnRpbWUgPSBuZXcgRXhlY3V0aW9uUnVudGltZUNsYXNzKG5vZGUubmFtZSwgbm9kZS5pZCk7XG4gICAgbGV0IG5lc3RlZFJvb3RDb250ZXh0ID0gbmVzdGVkUnVudGltZS5yb290U3RhZ2VDb250ZXh0O1xuXG4gICAgLy8gU2VlZCBHbG9iYWxTdG9yZSB3aXRoIHRoZSByaWdodCBzaGFwZSBmb3IgdGhlIHBhdGg6XG4gICAgLy8gICDigKIgUmVzdW1lIGludG8gVEhJUyBzdWJmbG93IOKGkiBzZWVkIGZyb20gdGhlIGNhcHR1cmVkIHByZS1wYXVzZVxuICAgIC8vICAgICBzY29wZSBzbyByZXN1bWUgaGFuZGxlcnMgc2VlIGhpc3RvcnksIHBhdXNlZFRvb2xDYWxsSWQsIGV0Yy5cbiAgICAvLyAgIOKAoiBOb3JtYWwgZW50cnkg4oaSIHNlZWQgZnJvbSB0aGUgaW5wdXRNYXBwZXIncyBtYXBwZWRJbnB1dC5cbiAgICBjb25zdCBzZWVkVmFsdWVzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IGlzUmVzdW1lRm9yVGhpc1N1YmZsb3cgPyByZXN1bWVDYXB0dXJlISA6IG1hcHBlZElucHV0O1xuICAgIGlmIChPYmplY3Qua2V5cyhzZWVkVmFsdWVzKS5sZW5ndGggPiAwKSB7XG4gICAgICBzZWVkU3ViZmxvd0dsb2JhbFN0b3JlKG5lc3RlZFJ1bnRpbWUsIHNlZWRWYWx1ZXMpO1xuICAgICAgLy8gUmVmcmVzaCByb290U3RhZ2VDb250ZXh0IHNvIFdyaXRlQnVmZmVyIHNlZXMgY29tbWl0dGVkIGRhdGFcbiAgICAgIGNvbnN0IFN0YWdlQ29udGV4dENsYXNzID0gbmVzdGVkUm9vdENvbnRleHQuY29uc3RydWN0b3IgYXMgbmV3ICguLi5hcmdzOiBhbnlbXSkgPT4gU3RhZ2VDb250ZXh0O1xuICAgICAgbmVzdGVkUm9vdENvbnRleHQgPSBuZXcgU3RhZ2VDb250ZXh0Q2xhc3MoXG4gICAgICAgICcnLFxuICAgICAgICBuZXN0ZWRSb290Q29udGV4dC5zdGFnZU5hbWUsXG4gICAgICAgIG5lc3RlZFJvb3RDb250ZXh0LnN0YWdlSWQsXG4gICAgICAgIG5lc3RlZFJ1bnRpbWUuZ2xvYmFsU3RvcmUsXG4gICAgICAgICcnLFxuICAgICAgICBuZXN0ZWRSdW50aW1lLmV4ZWN1dGlvbkhpc3RvcnksXG4gICAgICApO1xuICAgICAgbmVzdGVkUnVudGltZS5yb290U3RhZ2VDb250ZXh0ID0gbmVzdGVkUm9vdENvbnRleHQ7XG4gICAgfVxuXG4gICAgLy8gUHJlcGFyZSBzdWJmbG93IHJvb3Qgbm9kZSDigJQgc3RyaXAgaXNTdWJmbG93Um9vdCB0byBwcmV2ZW50IHJlLWRlbGVnYXRpb24uXG4gICAgLy9cbiAgICAvLyBQUkVTRVJWRSBgbmV4dGAuIEVhcmxpZXIgcmV2aXNpb25zIHN0cmlwcGVkIGBuZXh0YCB3aGVuZXZlciB0aGVcbiAgICAvLyBzdWJmbG93IHJvb3QgaGFkIGNoaWxkcmVuLCBvbiB0aGUgYXNzdW1wdGlvbiB0aGF0IGBuZXh0YCB3YXNcbiAgICAvLyBhbHdheXMgdGhlIE9VVEVSIG1vdW50J3MgY29udGludWF0aW9uIGxlYWtpbmcgaW50byB0aGUgaW5uZXJcbiAgICAvLyB0cmVlLiBUaGF0IGFzc3VtcHRpb24gd2FzIHdyb25nOiB0aGUgcmVzb2x2ZWQgc3ViZmxvdyByb290J3NcbiAgICAvLyBgbmV4dGAgaXMgdGhlIElOTkVSIGpvaW4gc3RhZ2UgKGUuZy4sIFBhcmFsbGVsJ3MgTWVyZ2UgYWZ0ZXIgYVxuICAgIC8vIGZhbi1vdXQsIFRvVCdzIFBydW5lcikuIFN0cmlwcGluZyBpdCBicm9rZSBjb21wb3NpdGUgc3ViZmxvd3Mg4oCUXG4gICAgLy8gdGhlIGpvaW4gc3RhZ2UgbmV2ZXIgcmFuLCBzbyB0aGUgc3ViZmxvdyByZXR1cm5lZCBwYXJ0aWFsIHN0YXRlLlxuICAgIC8vXG4gICAgLy8gVGhlIG91dGVyIG1vdW50J3MgcG9zdC1zdWJmbG93IGNvbnRpbnVhdGlvbiBpcyBoYW5kbGVkIHNlcGFyYXRlbHlcbiAgICAvLyBieSB0aGUgcGFyZW50IHRyYXZlcnNlciB2aWEgYHBhcmVudENvbnRleHQubmV4dE5vZGVgIGFuZCBpcyBuZXZlclxuICAgIC8vIGNvbmZsYXRlZCB3aXRoIHRoZSBpbm5lciBzdWJmbG93J3MgYG5leHRgIGNoYWluLlxuICAgIGNvbnN0IHN1YmZsb3dOb2RlOiBTdGFnZU5vZGU8VE91dCwgVFNjb3BlPiA9IHtcbiAgICAgIC4uLm5vZGUsXG4gICAgICBpc1N1YmZsb3dSb290OiBmYWxzZSxcbiAgICB9O1xuXG4gICAgLy8g4pSA4pSA4pSAIEV4ZWN1dGUgdmlhIGZhY3RvcnkgdHJhdmVyc2VyIOKUgOKUgOKUgFxuICAgIC8vIFRoZSBmYWN0b3J5IGNyZWF0ZXMgYSBmdWxsIEZsb3djaGFydFRyYXZlcnNlciB3aXRoIHRoZSBzYW1lIDctcGhhc2UgYWxnb3JpdGhtLFxuICAgIC8vIHNoYXJpbmcgdGhlIHBhcmVudCdzIHN0YWdlTWFwLCBzdWJmbG93cyBkaWN0LCBhbmQgbmFycmF0aXZlIGdlbmVyYXRvci5cbiAgICBsZXQgc3ViZmxvd091dHB1dDogYW55O1xuICAgIGxldCBzdWJmbG93RXJyb3I6IEVycm9yIHwgdW5kZWZpbmVkO1xuICAgIGxldCB0cmF2ZXJzZXJIYW5kbGU6IFN1YmZsb3dUcmF2ZXJzZXJIYW5kbGU8VE91dCwgVFNjb3BlPiB8IHVuZGVmaW5lZDtcblxuICAgIHRyeSB7XG4gICAgICB0cmF2ZXJzZXJIYW5kbGUgPSB0aGlzLnRyYXZlcnNlckZhY3Rvcnkoe1xuICAgICAgICByb290OiBzdWJmbG93Tm9kZSxcbiAgICAgICAgZXhlY3V0aW9uUnVudGltZTogbmVzdGVkUnVudGltZSxcbiAgICAgICAgcmVhZE9ubHlDb250ZXh0OiBtYXBwZWRJbnB1dCxcbiAgICAgICAgc3ViZmxvd0lkLFxuICAgICAgfSk7XG5cbiAgICAgIHN1YmZsb3dPdXRwdXQgPSBhd2FpdCB0cmF2ZXJzZXJIYW5kbGUuZXhlY3V0ZSgpO1xuICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgIC8vIFBhdXNlU2lnbmFsIGlzIG5vdCBhbiBlcnJvciDigJQgcHJlcGVuZCBzdWJmbG93IElEIGFuZCByZS10aHJvd1xuICAgICAgLy8gaW1tZWRpYXRlbHkuIE5vIGVycm9yIGxvZ2dpbmcsIG5vIHN1YmZsb3dSZXN1bHQgcmVjb3JkaW5nIOKAlFxuICAgICAgLy8gdGhlIHBhdXNlIGlzIGNvbnRyb2wgZmxvdy5cbiAgICAgIC8vXG4gICAgICAvLyBCRUZPUkUgcmUtdGhyb3csIHNuYXBzaG90IHRoZSBuZXN0ZWQgcnVudGltZSdzIGBzaGFyZWRTdGF0ZWBcbiAgICAgIC8vIG9udG8gdGhlIHNpZ25hbC4gVGhpcyBpcyB0aGUgb25seSBjaGFuY2Ug4oCUIG9uY2Ugd2UgcmUtdGhyb3csXG4gICAgICAvLyB0aGUgb3V0ZXIgdHJhdmVyc2VyIHVud2luZHMgYW5kIHRoZSBuZXN0ZWQgcnVudGltZSBpcyBHQydkLiBPblxuICAgICAgLy8gcmVzdW1lLCB3ZSdsbCByZS1zZWVkIGEgZnJlc2ggbmVzdGVkIHJ1bnRpbWUgZnJvbSB0aGlzIGNhcHR1cmVcbiAgICAgIC8vIHNvIHJlc3VtZSBoYW5kbGVycyBjYW4gcmVhZCB0aGUgcHJlLXBhdXNlIHN1YmZsb3cgc2NvcGUuXG4gICAgICAvL1xuICAgICAgLy8gQ2FwdHVyZSBpcyBrZXllZCBieSB0aGUgU0FNRSBwYXRoLXByZWZpeGVkIGBzdWJmbG93SWRgIHVzZWQgaW5cbiAgICAgIC8vIGBzdWJmbG93UGF0aGAsIHNvIHJlc3VtZSBjYW4gbG9vayB1cCBcInNjb3BlIGZvciBzZi1mb29cIiBieSBpZC5cbiAgICAgIGlmIChpc1BhdXNlU2lnbmFsKGVycm9yKSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHNuYXAgPSBuZXN0ZWRSdW50aW1lLmdldFNuYXBzaG90KCk7XG4gICAgICAgICAgLy8gYHNoYXJlZFN0YXRlYCBpcyB0aGUgc3ViZmxvdydzIHdvcmtpbmcgbWVtb3J5IGF0IHBhdXNlXG4gICAgICAgICAgLy8gdGltZSAoYWZ0ZXIgZXZlcnkgY29tbWl0dGVkIHdyaXRlIHVwIHRvIHRoZSBwYXVzZSkuIENhc3RcbiAgICAgICAgICAvLyBpcyBzYWZlIOKAlCBTaGFyZWRNZW1vcnkgc25hcHNob3QgcmV0dXJucyBhIHBsYWluIG9iamVjdC5cbiAgICAgICAgICBlcnJvci5jYXB0dXJlU3ViZmxvd1Njb3BlKHN1YmZsb3dJZCwgc25hcC5zaGFyZWRTdGF0ZSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik7XG4gICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgIC8vIFNuYXBzaG90IGZhaWx1cmUgc2hvdWxkbid0IG1hc2sgdGhlIHBhdXNlIOKAlCBsZXQgdGhlIHBhdXNlXG4gICAgICAgICAgLy8gYnViYmxlIHVwOyByZXN1bWUgd2lsbCBmYWxsIGJhY2sgdG8gY2hlY2twb2ludC5zaGFyZWRTdGF0ZVxuICAgICAgICAgIC8vICh0aGUgcGFyZW50IHNjb3BlKSBmb3IgdGhpcyBzdWJmbG93J3Mga2V5cy5cbiAgICAgICAgfVxuICAgICAgICBlcnJvci5wcmVwZW5kU3ViZmxvdyhzdWJmbG93SWQpO1xuICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgIH1cbiAgICAgIHN1YmZsb3dFcnJvciA9IGVycm9yO1xuICAgICAgcGFyZW50Q29udGV4dC5hZGRFcnJvcignc3ViZmxvd0Vycm9yJywgZXJyb3IudG9TdHJpbmcoKSk7XG4gICAgICB0aGlzLmRlcHMubG9nZ2VyLmVycm9yKGBFcnJvciBpbiBzdWJmbG93ICgke3N1YmZsb3dJZH0pOmAsIHsgZXJyb3IgfSk7XG4gICAgfVxuXG4gICAgLy8gQWx3YXlzIG1lcmdlIG5lc3RlZCBzdWJmbG93IHJlc3VsdHMgKGV2ZW4gb24gZXJyb3Ig4oCUIHBhcnRpYWwgcmVzdWx0cyBhaWQgZGVidWdnaW5nKVxuICAgIGlmICh0cmF2ZXJzZXJIYW5kbGUpIHtcbiAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIHRyYXZlcnNlckhhbmRsZS5nZXRTdWJmbG93UmVzdWx0cygpKSB7XG4gICAgICAgIHN1YmZsb3dSZXN1bHRzTWFwLnNldChrZXksIHZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyDilIDilIDilIAgQnJlYWsgcHJvcGFnYXRpb24gKG9wdC1pbiB2aWEgU3ViZmxvd01vdW50T3B0aW9ucy5wcm9wYWdhdGVCcmVhaykg4pSA4pSAXG4gICAgLy9cbiAgICAvLyBJZiB0aGUgc3ViZmxvdydzIGlubmVyIHRyYXZlcnNhbCBicm9rZSAoYmVjYXVzZSBhIHN0YWdlIGNhbGxlZFxuICAgIC8vIGBzY29wZS4kYnJlYWsocmVhc29uKWApIEFORCB0aGUgbW91bnQgZGVjbGFyZWQgYHByb3BhZ2F0ZUJyZWFrOiB0cnVlYCxcbiAgICAvLyBmb3J3YXJkIHRoZSBicmVhayBzdGF0ZSB0byB0aGUgUEFSRU5UJ3MgYnJlYWtGbGFnLiBUaGUgcGFyZW50XG4gICAgLy8gdHJhdmVyc2VyIHdpbGwgc2VlIGBzaG91bGRCcmVha2Agb24gaXRzIG5leHQgc3RlcCBhbmQgc3RvcC5cbiAgICAvL1xuICAgIC8vIFdpdGhvdXQgdGhpcywgaW5uZXIgYnJlYWtzIGFyZSBsb2NhbGx5IHNjb3BlZCB0byB0aGUgc3ViZmxvdyDigJQgdGhlXG4gICAgLy8gcGFyZW50IGNvbnRpbnVlcyBhcyBpZiB0aGUgc3ViZmxvdyByZXR1cm5lZCBub3JtYWxseS5cbiAgICAvL1xuICAgIC8vIElNUE9SVEFOVDogdGhpcyBydW5zIEJFRk9SRSBgb3V0cHV0TWFwcGluZ2AgYmVsb3csIGludGVudGlvbmFsbHkuIFRoZVxuICAgIC8vIG91dHB1dE1hcHBlciBzdGlsbCBleGVjdXRlcywgc28gdGhlIHN1YmZsb3cncyBwYXJ0aWFsIHJlc3VsdCBzdGlsbFxuICAgIC8vIGxhbmRzIGluIHRoZSBwYXJlbnQgc2NvcGUuIENvbnN1bWVycyB3aG8gbmVlZCB0byBzdXBwcmVzcyBvdXRwdXQgb25cbiAgICAvLyBicmVhayBjaGVjayB0aGUgYnJlYWsgc3RhdGUgaW5zaWRlIHRoZWlyIG91dHB1dE1hcHBlciBhbmQgZWFybHktcmV0dXJuLlxuICAgIC8vIFNlZSBgU3ViZmxvd01vdW50T3B0aW9ucy5wcm9wYWdhdGVCcmVha2AgSlNEb2MgZm9yIHJhdGlvbmFsZS5cbiAgICBpZiAodHJhdmVyc2VySGFuZGxlICYmIG1vdW50T3B0aW9ucz8ucHJvcGFnYXRlQnJlYWsgPT09IHRydWUpIHtcbiAgICAgIGNvbnN0IGlubmVyQnJlYWsgPSB0cmF2ZXJzZXJIYW5kbGUuZ2V0QnJlYWtTdGF0ZSgpO1xuICAgICAgaWYgKGlubmVyQnJlYWsuc2hvdWxkQnJlYWspIHtcbiAgICAgICAgYnJlYWtGbGFnLnNob3VsZEJyZWFrID0gdHJ1ZTtcbiAgICAgICAgaWYgKGlubmVyQnJlYWsucmVhc29uICE9PSB1bmRlZmluZWQgJiYgYnJlYWtGbGFnLnJlYXNvbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgYnJlYWtGbGFnLnJlYXNvbiA9IGlubmVyQnJlYWsucmVhc29uO1xuICAgICAgICB9XG4gICAgICAgIC8vIFJhaXNlIGEgcGFyZW50LWxldmVsIG9uQnJlYWsgZXZlbnQgc28gcmVjb3JkZXJzIGNhbiBkaXN0aW5ndWlzaFxuICAgICAgICAvLyB0aGUgaW5uZXIgb3JpZ2luYXRpbmcgYnJlYWsgKGZpcmVkIGluc2lkZSB0aGUgc3ViZmxvdykgZnJvbSB0aGlzXG4gICAgICAgIC8vIHByb3BhZ2F0ZWQgb25lIChmaXJlZCBhdCB0aGUgbW91bnQgbGV2ZWwgb24gdGhlIHBhcmVudCkuXG4gICAgICAgIHRoaXMuZGVwcy5uYXJyYXRpdmVHZW5lcmF0b3Iub25CcmVhayhzdWJmbG93TmFtZSwgcGFyZW50VHJhdmVyc2FsQ29udGV4dCwgaW5uZXJCcmVhay5yZWFzb24sIHN1YmZsb3dJZCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3Qgc3ViZmxvd1RyZWVDb250ZXh0ID0gbmVzdGVkUnVudGltZS5nZXRTbmFwc2hvdCgpO1xuXG4gICAgLy8g4pSA4pSA4pSAIE91dHB1dCBNYXBwaW5nIOKUgOKUgOKUgFxuICAgIGlmICghc3ViZmxvd0Vycm9yICYmIG1vdW50T3B0aW9ucz8ub3V0cHV0TWFwcGVyKSB7XG4gICAgICB0cnkge1xuICAgICAgICBsZXQgb3V0cHV0Q29udGV4dCA9IHBhcmVudENvbnRleHQ7XG4gICAgICAgIGlmIChwYXJlbnRDb250ZXh0LmJyYW5jaElkICYmIHBhcmVudENvbnRleHQuYnJhbmNoSWQgIT09ICcnICYmIHBhcmVudENvbnRleHQucGFyZW50KSB7XG4gICAgICAgICAgb3V0cHV0Q29udGV4dCA9IHBhcmVudENvbnRleHQucGFyZW50O1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcGFyZW50U2NvcGUgPSBvdXRwdXRDb250ZXh0LmdldFNjb3BlKCk7XG4gICAgICAgIC8vIEZvciBUeXBlZFNjb3BlIHN1YmZsb3dzLCBzdGFnZSBmdW5jdGlvbnMgcmV0dXJuIHZvaWQg4oCUIGZhbGwgYmFjayB0byBhIHNoYWxsb3cgY2xvbmVcbiAgICAgICAgLy8gb2YgdGhlIHN1YmZsb3cncyBzaGFyZWQgc3RhdGUgc28gb3V0cHV0TWFwcGVyIGNhbiBhY2Nlc3MgYWxsIHNjb3BlIHZhbHVlcyB3cml0dGVuXG4gICAgICAgIC8vIGR1cmluZyB0aGUgc3ViZmxvdy4gV2Ugc2hhbGxvdy1jbG9uZSB0byBhdm9pZCBhbGlhc2luZyB0aGUgbGl2ZSBTaGFyZWRNZW1vcnkgY29udGV4dC5cbiAgICAgICAgLy8gTk9URTogdGhlIGZ1bGwgc2NvcGUgaXMgcGFzc2VkIChub3QganVzdCBkZWNsYXJlZCBvdXRwdXRzKSDigJQgb3V0cHV0TWFwcGVyIG11c3RcbiAgICAgICAgLy8gZXhwbGljaXRseSBzZWxlY3Qgd2hhdCB0byBwcm9wYWdhdGUgdG8gdGhlIHBhcmVudC5cbiAgICAgICAgLy8gUmVkYWN0aW9uOiB0aGUgc3ViZmxvdyBzaGFyZXMgdGhlIHBhcmVudCdzIF9yZWRhY3RlZEtleXMgU2V0ICh2aWEgdGhlIHNhbWUgU2NvcGVGYWN0b3J5KSxcbiAgICAgICAgLy8gc28gYW55IGtleSBtYXJrZWQgcmVkYWN0ZWQgaW4gdGhlIHN1YmZsb3cgaXMgYWxyZWFkeSB2aXNpYmxlIGluIHRoZSBwYXJlbnQncyBzY29wZS5cbiAgICAgICAgLy8gU2NvcGVGYWNhZGUuc2V0VmFsdWUgY2hlY2tzIF9yZWRhY3RlZEtleXMuaGFzKGtleSksIHNvIHdyaXRlcyB2aWEgb3V0cHV0TWFwcGVyXG4gICAgICAgIC8vIGF1dG9tYXRpY2FsbHkgaW5oZXJpdCB0aGUgc3ViZmxvdydzIGR5bmFtaWMgcmVkYWN0aW9uIHN0YXRlLlxuICAgICAgICBjb25zdCBlZmZlY3RpdmVPdXRwdXQgPSBzdWJmbG93T3V0cHV0ID8/IHsgLi4uc3ViZmxvd1RyZWVDb250ZXh0LnNoYXJlZFN0YXRlIH07XG4gICAgICAgIGNvbnN0IG1hcHBlZE91dHB1dCA9IGFwcGx5T3V0cHV0TWFwcGluZyhlZmZlY3RpdmVPdXRwdXQsIHBhcmVudFNjb3BlLCBvdXRwdXRDb250ZXh0LCBtb3VudE9wdGlvbnMpO1xuXG4gICAgICAgIG91dHB1dENvbnRleHQuY29tbWl0KCk7XG4gICAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICAgIHBhcmVudENvbnRleHQuYWRkRXJyb3IoJ291dHB1dE1hcHBlckVycm9yJywgZXJyb3IudG9TdHJpbmcoKSk7XG4gICAgICAgIHRoaXMuZGVwcy5sb2dnZXIuZXJyb3IoYEVycm9yIGluIG91dHB1dE1hcHBlciBmb3Igc3ViZmxvdyAoJHtzdWJmbG93SWR9KTpgLCB7IGVycm9yIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHN1YmZsb3dSZXN1bHQ6IFN1YmZsb3dSZXN1bHQgPSB7XG4gICAgICBzdWJmbG93SWQsXG4gICAgICBzdWJmbG93TmFtZSxcbiAgICAgIHRyZWVDb250ZXh0OiB7XG4gICAgICAgIGdsb2JhbENvbnRleHQ6IHN1YmZsb3dUcmVlQ29udGV4dC5zaGFyZWRTdGF0ZSxcbiAgICAgICAgc3RhZ2VDb250ZXh0czogc3ViZmxvd1RyZWVDb250ZXh0LmV4ZWN1dGlvblRyZWUgYXMgdW5rbm93biBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgICAgICAgaGlzdG9yeTogc3ViZmxvd1RyZWVDb250ZXh0LmNvbW1pdExvZyxcbiAgICAgIH0sXG4gICAgICBwYXJlbnRTdGFnZUlkOiBwYXJlbnRDb250ZXh0LmdldFN0YWdlSWQoKSxcbiAgICB9O1xuXG4gICAgY29uc3Qgc3ViZmxvd0RlZiA9IHRoaXMuZGVwcy5zdWJmbG93cz8uW3N1YmZsb3dJZF07XG4gICAgaWYgKHN1YmZsb3dEZWYgJiYgKHN1YmZsb3dEZWYgYXMgYW55KS5idWlsZFRpbWVTdHJ1Y3R1cmUpIHtcbiAgICAgIHN1YmZsb3dSZXN1bHQucGlwZWxpbmVTdHJ1Y3R1cmUgPSAoc3ViZmxvd0RlZiBhcyBhbnkpLmJ1aWxkVGltZVN0cnVjdHVyZTtcbiAgICB9XG5cbiAgICBzdWJmbG93UmVzdWx0c01hcC5zZXQoc3ViZmxvd0lkLCBzdWJmbG93UmVzdWx0KTtcblxuICAgIHBhcmVudENvbnRleHQuYWRkRmxvd0RlYnVnTWVzc2FnZSgnc3ViZmxvdycsIGBFeGl0aW5nICR7c3ViZmxvd05hbWV9IHN1YmZsb3dgLCB7XG4gICAgICB0YXJnZXRTdGFnZTogc3ViZmxvd0lkLFxuICAgIH0pO1xuICAgIHRoaXMuZGVwcy5uYXJyYXRpdmVHZW5lcmF0b3Iub25TdWJmbG93RXhpdChcbiAgICAgIHN1YmZsb3dOYW1lLFxuICAgICAgc3ViZmxvd0lkLFxuICAgICAgcGFyZW50VHJhdmVyc2FsQ29udGV4dCxcbiAgICAgIHN1YmZsb3dSZXN1bHQudHJlZUNvbnRleHQ/Lmdsb2JhbENvbnRleHQsXG4gICAgKTtcblxuICAgIHBhcmVudENvbnRleHQuY29tbWl0KCk7XG5cbiAgICBpZiAoc3ViZmxvd0Vycm9yKSB7XG4gICAgICB0aHJvdyBzdWJmbG93RXJyb3I7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN1YmZsb3dPdXRwdXQ7XG4gIH1cbn1cbiJdfQ==
|
|
246
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3ViZmxvd0V4ZWN1dG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9lbmdpbmUvaGFuZGxlcnMvU3ViZmxvd0V4ZWN1dG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7Ozs7Ozs7OztHQWFHOzs7QUFHSCxtREFBcUQ7QUFVckQsbUVBQTRHO0FBRzVHLE1BQWEsZUFBZTtJQUVoQjtJQUNBO0lBRlYsWUFDVSxJQUErQixFQUMvQixnQkFBdUQ7UUFEdkQsU0FBSSxHQUFKLElBQUksQ0FBMkI7UUFDL0IscUJBQWdCLEdBQWhCLGdCQUFnQixDQUF1QztJQUM5RCxDQUFDO0lBRUo7Ozs7Ozs7O09BUUc7SUFDSCxLQUFLLENBQUMsY0FBYyxDQUNsQixJQUE2QixFQUM3QixhQUEyQixFQUMzQixTQUFvQixFQUNwQixVQUE4QixFQUM5QixpQkFBNkMsRUFDN0Msc0JBQXlDO1FBRXpDLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFVLENBQUM7UUFDbEMsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLFdBQVcsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDO1FBRWxELGFBQWEsQ0FBQyxtQkFBbUIsQ0FBQyxTQUFTLEVBQUUsWUFBWSxXQUFXLFVBQVUsRUFBRTtZQUM5RSxXQUFXLEVBQUUsU0FBUztTQUN2QixDQUFDLENBQUM7UUFFSCx3QkFBd0I7UUFDeEIsRUFBRTtRQUNGLGlFQUFpRTtRQUNqRSxpRUFBaUU7UUFDakUsK0RBQStEO1FBQy9ELHlEQUF5RDtRQUN6RCxtRUFBbUU7UUFDbkUsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDO1FBQzlDLElBQUksV0FBVyxHQUE0QixFQUFFLENBQUM7UUFDOUMsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3BFLE1BQU0sc0JBQXNCLEdBQUcsYUFBYSxLQUFL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ZWN1dG9yIOKAlCBJc29sYXRpb24gYm91bmRhcnkgZm9yIHN1YmZsb3cgZXhlY3V0aW9uLlxuICpcbiAqIFJlc3BvbnNpYmlsaXRpZXM6XG4gKiAtIENyZWF0ZSBpc29sYXRlZCBFeGVjdXRpb25SdW50aW1lIGZvciBlYWNoIHN1YmZsb3dcbiAqIC0gQXBwbHkgaW5wdXQvb3V0cHV0IG1hcHBpbmcgdmlhIFN1YmZsb3dJbnB1dE1hcHBlclxuICogLSBEZWxlZ2F0ZSB0cmF2ZXJzYWwgdG8gYSBmYWN0b3J5LWNyZWF0ZWQgRmxvd2NoYXJ0VHJhdmVyc2VyXG4gKiAtIFRyYWNrIHN1YmZsb3cgcmVzdWx0cyBmb3IgZGVidWdnaW5nL3Zpc3VhbGl6YXRpb25cbiAqXG4gKiBFYWNoIHN1YmZsb3cgZ2V0cyBpdHMgb3duIEdsb2JhbFN0b3JlIGZvciBpc29sYXRpb24uXG4gKiBUcmF2ZXJzYWwgdXNlcyB0aGUgU0FNRSA3LXBoYXNlIGFsZ29yaXRobSBhcyB0aGUgdG9wLWxldmVsIHRyYXZlcnNlclxuICogKHZpYSBTdWJmbG93VHJhdmVyc2VyRmFjdG9yeSksIHNvIGRlY2lkZXJzLCBzZWxlY3RvcnMsIGxvb3BzLCBsYXp5IHN1YmZsb3dzLFxuICogYW5kIGFib3J0IHNpZ25hbHMgYWxsIHdvcmsgaW5zaWRlIHN1YmZsb3dzIGF1dG9tYXRpY2FsbHkuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBTdGFnZUNvbnRleHQgfSBmcm9tICcuLi8uLi9tZW1vcnkvU3RhZ2VDb250ZXh0LmpzJztcbmltcG9ydCB7IGlzUGF1c2VTaWduYWwgfSBmcm9tICcuLi8uLi9wYXVzZS90eXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7IFN0YWdlTm9kZSB9IGZyb20gJy4uL2dyYXBoL1N0YWdlTm9kZS5qcyc7XG5pbXBvcnQgdHlwZSB7IFRyYXZlcnNhbENvbnRleHQgfSBmcm9tICcuLi9uYXJyYXRpdmUvdHlwZXMuanMnO1xuaW1wb3J0IHR5cGUge1xuICBIYW5kbGVyRGVwcyxcbiAgSUV4ZWN1dGlvblJ1bnRpbWUsXG4gIFN1YmZsb3dSZXN1bHQsXG4gIFN1YmZsb3dUcmF2ZXJzZXJGYWN0b3J5LFxuICBTdWJmbG93VHJhdmVyc2VySGFuZGxlLFxufSBmcm9tICcuLi90eXBlcy5qcyc7XG5pbXBvcnQgeyBhcHBseU91dHB1dE1hcHBpbmcsIGdldEluaXRpYWxTY29wZVZhbHVlcywgc2VlZFN1YmZsb3dHbG9iYWxTdG9yZSB9IGZyb20gJy4vU3ViZmxvd0lucHV0TWFwcGVyLmpzJztcbmltcG9ydCB0eXBlIHsgQnJlYWtGbGFnIH0gZnJvbSAnLi90eXBlcy5qcyc7XG5cbmV4cG9ydCBjbGFzcyBTdWJmbG93RXhlY3V0b3I8VE91dCA9IGFueSwgVFNjb3BlID0gYW55PiB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgZGVwczogSGFuZGxlckRlcHM8VE91dCwgVFNjb3BlPixcbiAgICBwcml2YXRlIHRyYXZlcnNlckZhY3Rvcnk6IFN1YmZsb3dUcmF2ZXJzZXJGYWN0b3J5PFRPdXQsIFRTY29wZT4sXG4gICkge31cblxuICAvKipcbiAgICogRXhlY3V0ZSBhIHN1YmZsb3cgd2l0aCBpc29sYXRlZCBjb250ZXh0LlxuICAgKlxuICAgKiAxLiBDcmVhdGVzIGEgZnJlc2ggRXhlY3V0aW9uUnVudGltZSBmb3IgdGhlIHN1YmZsb3dcbiAgICogMi4gQXBwbGllcyBpbnB1dCBtYXBwaW5nIHRvIHNlZWQgdGhlIHN1YmZsb3cncyBHbG9iYWxTdG9yZVxuICAgKiAzLiBEZWxlZ2F0ZXMgdHJhdmVyc2FsIHRvIGEgZmFjdG9yeS1jcmVhdGVkIEZsb3djaGFydFRyYXZlcnNlclxuICAgKiA0LiBBcHBsaWVzIG91dHB1dCBtYXBwaW5nIHRvIHdyaXRlIHJlc3VsdHMgYmFjayB0byBwYXJlbnQgc2NvcGVcbiAgICogNS4gU3RvcmVzIGV4ZWN1dGlvbiBkYXRhIGZvciBkZWJ1Z2dpbmcvdmlzdWFsaXphdGlvblxuICAgKi9cbiAgYXN5bmMgZXhlY3V0ZVN1YmZsb3coXG4gICAgbm9kZTogU3RhZ2VOb2RlPFRPdXQsIFRTY29wZT4sXG4gICAgcGFyZW50Q29udGV4dDogU3RhZ2VDb250ZXh0LFxuICAgIGJyZWFrRmxhZzogQnJlYWtGbGFnLFxuICAgIGJyYW5jaFBhdGg6IHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgICBzdWJmbG93UmVzdWx0c01hcDogTWFwPHN0cmluZywgU3ViZmxvd1Jlc3VsdD4sXG4gICAgcGFyZW50VHJhdmVyc2FsQ29udGV4dD86IFRyYXZlcnNhbENvbnRleHQsXG4gICk6IFByb21pc2U8YW55PiB7XG4gICAgY29uc3Qgc3ViZmxvd0lkID0gbm9kZS5zdWJmbG93SWQhO1xuICAgIGNvbnN0IHN1YmZsb3dOYW1lID0gbm9kZS5zdWJmbG93TmFtZSA/PyBub2RlLm5hbWU7XG5cbiAgICBwYXJlbnRDb250ZXh0LmFkZEZsb3dEZWJ1Z01lc3NhZ2UoJ3N1YmZsb3cnLCBgRW50ZXJpbmcgJHtzdWJmbG93TmFtZX0gc3ViZmxvd2AsIHtcbiAgICAgIHRhcmdldFN0YWdlOiBzdWJmbG93SWQsXG4gICAgfSk7XG5cbiAgICAvLyDilIDilIDilIAgSW5wdXQgTWFwcGluZyDilIDilIDilIBcbiAgICAvL1xuICAgIC8vIFJFU1VNRSBQQVRIIE5PVEU6IHdoZW4gYGRlcHMuc3ViZmxvd1N0YXRlc0ZvclJlc3VtZWAgY2FycmllcyBhXG4gICAgLy8gY2FwdHVyZSBmb3IgVEhJUyBzdWJmbG93IGlkLCB3ZSBTS0lQIHRoZSBpbnB1dE1hcHBlciBlbnRpcmVseS5cbiAgICAvLyBUaGUgY2FwdHVyZSBpcyB0aGUgcG9zdC1pbnB1dCBwcmUtcGF1c2UgbWVtb3J5IOKAlCBydW5uaW5nIHRoZVxuICAgIC8vIG1hcHBlciBhZ2FpbiB3b3VsZCBjbG9iYmVyIHBvc3QtaW5wdXQgd3JpdGVzIChoaXN0b3J5LFxuICAgIC8vIHBhdXNlZFRvb2xDYWxsSWQsIGV0Yy4pIHdpdGggdGhlIHBhcmVudCdzIHN0YXJ0LW9mLXN1YmZsb3cgdmlldy5cbiAgICBjb25zdCBtb3VudE9wdGlvbnMgPSBub2RlLnN1YmZsb3dNb3VudE9wdGlvbnM7XG4gICAgbGV0IG1hcHBlZElucHV0OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHt9O1xuICAgIGNvbnN0IHJlc3VtZUNhcHR1cmUgPSB0aGlzLmRlcHMuc3ViZmxvd1N0YXRlc0ZvclJlc3VtZT8uW3N1YmZsb3dJZF07XG4gICAgY29uc3QgaXNSZXN1bWVGb3JUaGlzU3ViZmxvdyA9IHJlc3VtZUNhcHR1cmUgIT09IHVuZGVmaW5lZDtcblxuICAgIGlmIChtb3VudE9wdGlvbnMgJiYgIWlzUmVzdW1lRm9yVGhpc1N1YmZsb3cpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHBhcmVudFNjb3BlID0gcGFyZW50Q29udGV4dC5nZXRTY29wZSgpO1xuICAgICAgICBtYXBwZWRJbnB1dCA9IGdldEluaXRpYWxTY29wZVZhbHVlcyhwYXJlbnRTY29wZSwgbW91bnRPcHRpb25zKTtcbiAgICAgICAgaWYgKE9iamVjdC5rZXlzKG1hcHBlZElucHV0KS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgLy8gbWFwcGVkSW5wdXQgaXMgY2FwdHVyZWQgaW4gU3ViZmxvd1Jlc3VsdC50cmVlQ29udGV4dCBmb3IgZGVidWdnaW5nXG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgICAgcGFyZW50Q29udGV4dC5hZGRFcnJvcignaW5wdXRNYXBwZXJFcnJvcicsIGVycm9yLnRvU3RyaW5nKCkpO1xuICAgICAgICB0aGlzLmRlcHMubG9nZ2VyLmVycm9yKGBFcnJvciBpbiBpbnB1dE1hcHBlciBmb3Igc3ViZmxvdyAoJHtzdWJmbG93SWR9KTpgLCB7IGVycm9yIH0pO1xuICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBOYXJyYXRpdmUgcmVjZWl2ZXMgbWFwcGVkIGlucHV0LiBpbnB1dE1hcHBlciBpcyBhIGNvbnN1bWVyIGZ1bmN0aW9uIHRoYXQgbWF5IGluamVjdFxuICAgIC8vIHZhbHVlcyBub3QgZnJvbSB0aGUgc2NvcGUgKGJ5cGFzc2luZyByZWRhY3Rpb24pLiBUaGUgcmVjb3JkZXIgcmVuZGVycyBwZXIgaW5jbHVkZVZhbHVlcy5cbiAgICBjb25zdCBuYXJyYXRpdmVJbnB1dCA9IG1hcHBlZElucHV0O1xuICAgIC8vIGBGbG93U3ViZmxvd0V2ZW50LmRlc2NyaXB0aW9uYCBpcyBzZW1hbnRpY2FsbHkgXCJ3aGF0IHRoaXMgc3ViZmxvdyBkb2VzXCIg4oCUIHNvdXJjZWQgZnJvbVxuICAgIC8vIHRoZSBzdWJmbG93J3Mgb3duIHJvb3Qgc3RhZ2UsIG5vdCB0aGUgcGFyZW50IG1vdW50IHBvaW50LiBUaGUgbW91bnQgbm9kZSBuZXZlciBjYXJyaWVzXG4gICAgLy8gYSBkZXNjcmlwdGlvbiAoYnVpbGRlcnMgZG9uJ3QgY29weSBpdCksIHNvIHJlYWRpbmcgYG5vZGUuZGVzY3JpcHRpb25gIGhlcmUgcmV0dXJuc1xuICAgIC8vIGB1bmRlZmluZWRgIGFuZCB0YXhvbm9teSBtYXJrZXJzIHNldCBvbiB0aGUgc3ViZmxvdyByb290IChlLmcuIGFnZW50Zm9vdHByaW50J3NcbiAgICAvLyBgJ0FnZW50OiBSZUFjdCBsb29wJ2AgLyBgJ0xMTUNhbGw6IG9uZS1zaG90J2ApIG5ldmVyIHJlYWNoIGRvd25zdHJlYW0gY29uc3VtZXJzLlxuICAgIGNvbnN0IHJvb3REZXNjcmlwdGlvbiA9IHRoaXMuZGVwcy5zdWJmbG93cz8uW3N1YmZsb3dJZF0/LnJvb3Q/LmRlc2NyaXB0aW9uO1xuICAgIHRoaXMuZGVwcy5uYXJyYXRpdmVHZW5lcmF0b3Iub25TdWJmbG93RW50cnkoXG4gICAgICBzdWJmbG93TmFtZSxcbiAgICAgIHN1YmZsb3dJZCxcbiAgICAgIHJvb3REZXNjcmlwdGlvbiA/PyBub2RlLmRlc2NyaXB0aW9uLFxuICAgICAgcGFyZW50VHJhdmVyc2FsQ29udGV4dCxcbiAgICAgIG5hcnJhdGl2ZUlucHV0LFxuICAgICk7XG5cbiAgICAvLyBDcmVhdGUgaXNvbGF0ZWQgcnVudGltZSB2aWEgZHluYW1pYyBjb25zdHJ1Y3Rpb24gKGF2b2lkcyBjaXJjdWxhciBpbXBvcnQpXG4gICAgY29uc3QgRXhlY3V0aW9uUnVudGltZUNsYXNzID0gdGhpcy5kZXBzLmV4ZWN1dGlvblJ1bnRpbWUuY29uc3RydWN0b3IgYXMgbmV3IChcbiAgICAgIG5hbWU6IHN0cmluZyxcbiAgICAgIGlkOiBzdHJpbmcsXG4gICAgKSA9PiBJRXhlY3V0aW9uUnVudGltZTtcbiAgICBjb25zdCBuZXN0ZWRSdW50aW1lID0gbmV3IEV4ZWN1dGlvblJ1bnRpbWVDbGFzcyhub2RlLm5hbWUsIG5vZGUuaWQpO1xuICAgIGxldCBuZXN0ZWRSb290Q29udGV4dCA9IG5lc3RlZFJ1bnRpbWUucm9vdFN0YWdlQ29udGV4dDtcblxuICAgIC8vIFNlZWQgR2xvYmFsU3RvcmUgd2l0aCB0aGUgcmlnaHQgc2hhcGUgZm9yIHRoZSBwYXRoOlxuICAgIC8vICAg4oCiIFJlc3VtZSBpbnRvIFRISVMgc3ViZmxvdyDihpIgc2VlZCBmcm9tIHRoZSBjYXB0dXJlZCBwcmUtcGF1c2VcbiAgICAvLyAgICAgc2NvcGUgc28gcmVzdW1lIGhhbmRsZXJzIHNlZSBoaXN0b3J5LCBwYXVzZWRUb29sQ2FsbElkLCBldGMuXG4gICAgLy8gICDigKIgTm9ybWFsIGVudHJ5IOKGkiBzZWVkIGZyb20gdGhlIGlucHV0TWFwcGVyJ3MgbWFwcGVkSW5wdXQuXG4gICAgY29uc3Qgc2VlZFZhbHVlczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSBpc1Jlc3VtZUZvclRoaXNTdWJmbG93ID8gcmVzdW1lQ2FwdHVyZSEgOiBtYXBwZWRJbnB1dDtcbiAgICBpZiAoT2JqZWN0LmtleXMoc2VlZFZhbHVlcykubGVuZ3RoID4gMCkge1xuICAgICAgc2VlZFN1YmZsb3dHbG9iYWxTdG9yZShuZXN0ZWRSdW50aW1lLCBzZWVkVmFsdWVzKTtcbiAgICAgIC8vIFJlZnJlc2ggcm9vdFN0YWdlQ29udGV4dCBzbyBXcml0ZUJ1ZmZlciBzZWVzIGNvbW1pdHRlZCBkYXRhXG4gICAgICBjb25zdCBTdGFnZUNvbnRleHRDbGFzcyA9IG5lc3RlZFJvb3RDb250ZXh0LmNvbnN0cnVjdG9yIGFzIG5ldyAoLi4uYXJnczogYW55W10pID0+IFN0YWdlQ29udGV4dDtcbiAgICAgIG5lc3RlZFJvb3RDb250ZXh0ID0gbmV3IFN0YWdlQ29udGV4dENsYXNzKFxuICAgICAgICAnJyxcbiAgICAgICAgbmVzdGVkUm9vdENvbnRleHQuc3RhZ2VOYW1lLFxuICAgICAgICBuZXN0ZWRSb290Q29udGV4dC5zdGFnZUlkLFxuICAgICAgICBuZXN0ZWRSdW50aW1lLmdsb2JhbFN0b3JlLFxuICAgICAgICAnJyxcbiAgICAgICAgbmVzdGVkUnVudGltZS5leGVjdXRpb25IaXN0b3J5LFxuICAgICAgKTtcbiAgICAgIG5lc3RlZFJ1bnRpbWUucm9vdFN0YWdlQ29udGV4dCA9IG5lc3RlZFJvb3RDb250ZXh0O1xuICAgIH1cblxuICAgIC8vIFByZXBhcmUgc3ViZmxvdyByb290IG5vZGUg4oCUIHN0cmlwIGlzU3ViZmxvd1Jvb3QgdG8gcHJldmVudCByZS1kZWxlZ2F0aW9uLlxuICAgIC8vXG4gICAgLy8gUFJFU0VSVkUgYG5leHRgLiBFYXJsaWVyIHJldmlzaW9ucyBzdHJpcHBlZCBgbmV4dGAgd2hlbmV2ZXIgdGhlXG4gICAgLy8gc3ViZmxvdyByb290IGhhZCBjaGlsZHJlbiwgb24gdGhlIGFzc3VtcHRpb24gdGhhdCBgbmV4dGAgd2FzXG4gICAgLy8gYWx3YXlzIHRoZSBPVVRFUiBtb3VudCdzIGNvbnRpbnVhdGlvbiBsZWFraW5nIGludG8gdGhlIGlubmVyXG4gICAgLy8gdHJlZS4gVGhhdCBhc3N1bXB0aW9uIHdhcyB3cm9uZzogdGhlIHJlc29sdmVkIHN1YmZsb3cgcm9vdCdzXG4gICAgLy8gYG5leHRgIGlzIHRoZSBJTk5FUiBqb2luIHN0YWdlIChlLmcuLCBQYXJhbGxlbCdzIE1lcmdlIGFmdGVyIGFcbiAgICAvLyBmYW4tb3V0LCBUb1QncyBQcnVuZXIpLiBTdHJpcHBpbmcgaXQgYnJva2UgY29tcG9zaXRlIHN1YmZsb3dzIOKAlFxuICAgIC8vIHRoZSBqb2luIHN0YWdlIG5ldmVyIHJhbiwgc28gdGhlIHN1YmZsb3cgcmV0dXJuZWQgcGFydGlhbCBzdGF0ZS5cbiAgICAvL1xuICAgIC8vIFRoZSBvdXRlciBtb3VudCdzIHBvc3Qtc3ViZmxvdyBjb250aW51YXRpb24gaXMgaGFuZGxlZCBzZXBhcmF0ZWx5XG4gICAgLy8gYnkgdGhlIHBhcmVudCB0cmF2ZXJzZXIgdmlhIGBwYXJlbnRDb250ZXh0Lm5leHROb2RlYCBhbmQgaXMgbmV2ZXJcbiAgICAvLyBjb25mbGF0ZWQgd2l0aCB0aGUgaW5uZXIgc3ViZmxvdydzIGBuZXh0YCBjaGFpbi5cbiAgICBjb25zdCBzdWJmbG93Tm9kZTogU3RhZ2VOb2RlPFRPdXQsIFRTY29wZT4gPSB7XG4gICAgICAuLi5ub2RlLFxuICAgICAgaXNTdWJmbG93Um9vdDogZmFsc2UsXG4gICAgfTtcblxuICAgIC8vIOKUgOKUgOKUgCBFeGVjdXRlIHZpYSBmYWN0b3J5IHRyYXZlcnNlciDilIDilIDilIBcbiAgICAvLyBUaGUgZmFjdG9yeSBjcmVhdGVzIGEgZnVsbCBGbG93Y2hhcnRUcmF2ZXJzZXIgd2l0aCB0aGUgc2FtZSA3LXBoYXNlIGFsZ29yaXRobSxcbiAgICAvLyBzaGFyaW5nIHRoZSBwYXJlbnQncyBzdGFnZU1hcCwgc3ViZmxvd3MgZGljdCwgYW5kIG5hcnJhdGl2ZSBnZW5lcmF0b3IuXG4gICAgbGV0IHN1YmZsb3dPdXRwdXQ6IGFueTtcbiAgICBsZXQgc3ViZmxvd0Vycm9yOiBFcnJvciB8IHVuZGVmaW5lZDtcbiAgICBsZXQgdHJhdmVyc2VySGFuZGxlOiBTdWJmbG93VHJhdmVyc2VySGFuZGxlPFRPdXQsIFRTY29wZT4gfCB1bmRlZmluZWQ7XG5cbiAgICB0cnkge1xuICAgICAgdHJhdmVyc2VySGFuZGxlID0gdGhpcy50cmF2ZXJzZXJGYWN0b3J5KHtcbiAgICAgICAgcm9vdDogc3ViZmxvd05vZGUsXG4gICAgICAgIGV4ZWN1dGlvblJ1bnRpbWU6IG5lc3RlZFJ1bnRpbWUsXG4gICAgICAgIHJlYWRPbmx5Q29udGV4dDogbWFwcGVkSW5wdXQsXG4gICAgICAgIHN1YmZsb3dJZCxcbiAgICAgIH0pO1xuXG4gICAgICBzdWJmbG93T3V0cHV0ID0gYXdhaXQgdHJhdmVyc2VySGFuZGxlLmV4ZWN1dGUoKTtcbiAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICAvLyBQYXVzZVNpZ25hbCBpcyBub3QgYW4gZXJyb3Ig4oCUIHByZXBlbmQgc3ViZmxvdyBJRCBhbmQgcmUtdGhyb3dcbiAgICAgIC8vIGltbWVkaWF0ZWx5LiBObyBlcnJvciBsb2dnaW5nLCBubyBzdWJmbG93UmVzdWx0IHJlY29yZGluZyDigJRcbiAgICAgIC8vIHRoZSBwYXVzZSBpcyBjb250cm9sIGZsb3cuXG4gICAgICAvL1xuICAgICAgLy8gQkVGT1JFIHJlLXRocm93LCBzbmFwc2hvdCB0aGUgbmVzdGVkIHJ1bnRpbWUncyBgc2hhcmVkU3RhdGVgXG4gICAgICAvLyBvbnRvIHRoZSBzaWduYWwuIFRoaXMgaXMgdGhlIG9ubHkgY2hhbmNlIOKAlCBvbmNlIHdlIHJlLXRocm93LFxuICAgICAgLy8gdGhlIG91dGVyIHRyYXZlcnNlciB1bndpbmRzIGFuZCB0aGUgbmVzdGVkIHJ1bnRpbWUgaXMgR0MnZC4gT25cbiAgICAgIC8vIHJlc3VtZSwgd2UnbGwgcmUtc2VlZCBhIGZyZXNoIG5lc3RlZCBydW50aW1lIGZyb20gdGhpcyBjYXB0dXJlXG4gICAgICAvLyBzbyByZXN1bWUgaGFuZGxlcnMgY2FuIHJlYWQgdGhlIHByZS1wYXVzZSBzdWJmbG93IHNjb3BlLlxuICAgICAgLy9cbiAgICAgIC8vIENhcHR1cmUgaXMga2V5ZWQgYnkgdGhlIFNBTUUgcGF0aC1wcmVmaXhlZCBgc3ViZmxvd0lkYCB1c2VkIGluXG4gICAgICAvLyBgc3ViZmxvd1BhdGhgLCBzbyByZXN1bWUgY2FuIGxvb2sgdXAgXCJzY29wZSBmb3Igc2YtZm9vXCIgYnkgaWQuXG4gICAgICBpZiAoaXNQYXVzZVNpZ25hbChlcnJvcikpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBzbmFwID0gbmVzdGVkUnVudGltZS5nZXRTbmFwc2hvdCgpO1xuICAgICAgICAgIC8vIGBzaGFyZWRTdGF0ZWAgaXMgdGhlIHN1YmZsb3cncyB3b3JraW5nIG1lbW9yeSBhdCBwYXVzZVxuICAgICAgICAgIC8vIHRpbWUgKGFmdGVyIGV2ZXJ5IGNvbW1pdHRlZCB3cml0ZSB1cCB0byB0aGUgcGF1c2UpLiBDYXN0XG4gICAgICAgICAgLy8gaXMgc2FmZSDigJQgU2hhcmVkTWVtb3J5IHNuYXBzaG90IHJldHVybnMgYSBwbGFpbiBvYmplY3QuXG4gICAgICAgICAgZXJyb3IuY2FwdHVyZVN1YmZsb3dTY29wZShzdWJmbG93SWQsIHNuYXAuc2hhcmVkU3RhdGUgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pO1xuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAvLyBTbmFwc2hvdCBmYWlsdXJlIHNob3VsZG4ndCBtYXNrIHRoZSBwYXVzZSDigJQgbGV0IHRoZSBwYXVzZVxuICAgICAgICAgIC8vIGJ1YmJsZSB1cDsgcmVzdW1lIHdpbGwgZmFsbCBiYWNrIHRvIGNoZWNrcG9pbnQuc2hhcmVkU3RhdGVcbiAgICAgICAgICAvLyAodGhlIHBhcmVudCBzY29wZSkgZm9yIHRoaXMgc3ViZmxvdydzIGtleXMuXG4gICAgICAgIH1cbiAgICAgICAgZXJyb3IucHJlcGVuZFN1YmZsb3coc3ViZmxvd0lkKTtcbiAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICB9XG4gICAgICBzdWJmbG93RXJyb3IgPSBlcnJvcjtcbiAgICAgIHBhcmVudENvbnRleHQuYWRkRXJyb3IoJ3N1YmZsb3dFcnJvcicsIGVycm9yLnRvU3RyaW5nKCkpO1xuICAgICAgdGhpcy5kZXBzLmxvZ2dlci5lcnJvcihgRXJyb3IgaW4gc3ViZmxvdyAoJHtzdWJmbG93SWR9KTpgLCB7IGVycm9yIH0pO1xuICAgIH1cblxuICAgIC8vIEFsd2F5cyBtZXJnZSBuZXN0ZWQgc3ViZmxvdyByZXN1bHRzIChldmVuIG9uIGVycm9yIOKAlCBwYXJ0aWFsIHJlc3VsdHMgYWlkIGRlYnVnZ2luZylcbiAgICBpZiAodHJhdmVyc2VySGFuZGxlKSB7XG4gICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiB0cmF2ZXJzZXJIYW5kbGUuZ2V0U3ViZmxvd1Jlc3VsdHMoKSkge1xuICAgICAgICBzdWJmbG93UmVzdWx0c01hcC5zZXQoa2V5LCB2YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8g4pSA4pSA4pSAIEJyZWFrIHByb3BhZ2F0aW9uIChvcHQtaW4gdmlhIFN1YmZsb3dNb3VudE9wdGlvbnMucHJvcGFnYXRlQnJlYWspIOKUgOKUgFxuICAgIC8vXG4gICAgLy8gSWYgdGhlIHN1YmZsb3cncyBpbm5lciB0cmF2ZXJzYWwgYnJva2UgKGJlY2F1c2UgYSBzdGFnZSBjYWxsZWRcbiAgICAvLyBgc2NvcGUuJGJyZWFrKHJlYXNvbilgKSBBTkQgdGhlIG1vdW50IGRlY2xhcmVkIGBwcm9wYWdhdGVCcmVhazogdHJ1ZWAsXG4gICAgLy8gZm9yd2FyZCB0aGUgYnJlYWsgc3RhdGUgdG8gdGhlIFBBUkVOVCdzIGJyZWFrRmxhZy4gVGhlIHBhcmVudFxuICAgIC8vIHRyYXZlcnNlciB3aWxsIHNlZSBgc2hvdWxkQnJlYWtgIG9uIGl0cyBuZXh0IHN0ZXAgYW5kIHN0b3AuXG4gICAgLy9cbiAgICAvLyBXaXRob3V0IHRoaXMsIGlubmVyIGJyZWFrcyBhcmUgbG9jYWxseSBzY29wZWQgdG8gdGhlIHN1YmZsb3cg4oCUIHRoZVxuICAgIC8vIHBhcmVudCBjb250aW51ZXMgYXMgaWYgdGhlIHN1YmZsb3cgcmV0dXJuZWQgbm9ybWFsbHkuXG4gICAgLy9cbiAgICAvLyBJTVBPUlRBTlQ6IHRoaXMgcnVucyBCRUZPUkUgYG91dHB1dE1hcHBpbmdgIGJlbG93LCBpbnRlbnRpb25hbGx5LiBUaGVcbiAgICAvLyBvdXRwdXRNYXBwZXIgc3RpbGwgZXhlY3V0ZXMsIHNvIHRoZSBzdWJmbG93J3MgcGFydGlhbCByZXN1bHQgc3RpbGxcbiAgICAvLyBsYW5kcyBpbiB0aGUgcGFyZW50IHNjb3BlLiBDb25zdW1lcnMgd2hvIG5lZWQgdG8gc3VwcHJlc3Mgb3V0cHV0IG9uXG4gICAgLy8gYnJlYWsgY2hlY2sgdGhlIGJyZWFrIHN0YXRlIGluc2lkZSB0aGVpciBvdXRwdXRNYXBwZXIgYW5kIGVhcmx5LXJldHVybi5cbiAgICAvLyBTZWUgYFN1YmZsb3dNb3VudE9wdGlvbnMucHJvcGFnYXRlQnJlYWtgIEpTRG9jIGZvciByYXRpb25hbGUuXG4gICAgaWYgKHRyYXZlcnNlckhhbmRsZSAmJiBtb3VudE9wdGlvbnM/LnByb3BhZ2F0ZUJyZWFrID09PSB0cnVlKSB7XG4gICAgICBjb25zdCBpbm5lckJyZWFrID0gdHJhdmVyc2VySGFuZGxlLmdldEJyZWFrU3RhdGUoKTtcbiAgICAgIGlmIChpbm5lckJyZWFrLnNob3VsZEJyZWFrKSB7XG4gICAgICAgIGJyZWFrRmxhZy5zaG91bGRCcmVhayA9IHRydWU7XG4gICAgICAgIGlmIChpbm5lckJyZWFrLnJlYXNvbiAhPT0gdW5kZWZpbmVkICYmIGJyZWFrRmxhZy5yZWFzb24gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGJyZWFrRmxhZy5yZWFzb24gPSBpbm5lckJyZWFrLnJlYXNvbjtcbiAgICAgICAgfVxuICAgICAgICAvLyBSYWlzZSBhIHBhcmVudC1sZXZlbCBvbkJyZWFrIGV2ZW50IHNvIHJlY29yZGVycyBjYW4gZGlzdGluZ3Vpc2hcbiAgICAgICAgLy8gdGhlIGlubmVyIG9yaWdpbmF0aW5nIGJyZWFrIChmaXJlZCBpbnNpZGUgdGhlIHN1YmZsb3cpIGZyb20gdGhpc1xuICAgICAgICAvLyBwcm9wYWdhdGVkIG9uZSAoZmlyZWQgYXQgdGhlIG1vdW50IGxldmVsIG9uIHRoZSBwYXJlbnQpLlxuICAgICAgICB0aGlzLmRlcHMubmFycmF0aXZlR2VuZXJhdG9yLm9uQnJlYWsoc3ViZmxvd05hbWUsIHBhcmVudFRyYXZlcnNhbENvbnRleHQsIGlubmVyQnJlYWsucmVhc29uLCBzdWJmbG93SWQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHN1YmZsb3dUcmVlQ29udGV4dCA9IG5lc3RlZFJ1bnRpbWUuZ2V0U25hcHNob3QoKTtcblxuICAgIC8vIOKUgOKUgOKUgCBPdXRwdXQgTWFwcGluZyDilIDilIDilIBcbiAgICBpZiAoIXN1YmZsb3dFcnJvciAmJiBtb3VudE9wdGlvbnM/Lm91dHB1dE1hcHBlcikge1xuICAgICAgdHJ5IHtcbiAgICAgICAgbGV0IG91dHB1dENvbnRleHQgPSBwYXJlbnRDb250ZXh0O1xuICAgICAgICBpZiAocGFyZW50Q29udGV4dC5icmFuY2hJZCAmJiBwYXJlbnRDb250ZXh0LmJyYW5jaElkICE9PSAnJyAmJiBwYXJlbnRDb250ZXh0LnBhcmVudCkge1xuICAgICAgICAgIG91dHB1dENvbnRleHQgPSBwYXJlbnRDb250ZXh0LnBhcmVudDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHBhcmVudFNjb3BlID0gb3V0cHV0Q29udGV4dC5nZXRTY29wZSgpO1xuICAgICAgICAvLyBGb3IgVHlwZWRTY29wZSBzdWJmbG93cywgc3RhZ2UgZnVuY3Rpb25zIHJldHVybiB2b2lkIOKAlCBmYWxsIGJhY2sgdG8gYSBzaGFsbG93IGNsb25lXG4gICAgICAgIC8vIG9mIHRoZSBzdWJmbG93J3Mgc2hhcmVkIHN0YXRlIHNvIG91dHB1dE1hcHBlciBjYW4gYWNjZXNzIGFsbCBzY29wZSB2YWx1ZXMgd3JpdHRlblxuICAgICAgICAvLyBkdXJpbmcgdGhlIHN1YmZsb3cuIFdlIHNoYWxsb3ctY2xvbmUgdG8gYXZvaWQgYWxpYXNpbmcgdGhlIGxpdmUgU2hhcmVkTWVtb3J5IGNvbnRleHQuXG4gICAgICAgIC8vIE5PVEU6IHRoZSBmdWxsIHNjb3BlIGlzIHBhc3NlZCAobm90IGp1c3QgZGVjbGFyZWQgb3V0cHV0cykg4oCUIG91dHB1dE1hcHBlciBtdXN0XG4gICAgICAgIC8vIGV4cGxpY2l0bHkgc2VsZWN0IHdoYXQgdG8gcHJvcGFnYXRlIHRvIHRoZSBwYXJlbnQuXG4gICAgICAgIC8vIFJlZGFjdGlvbjogdGhlIHN1YmZsb3cgc2hhcmVzIHRoZSBwYXJlbnQncyBfcmVkYWN0ZWRLZXlzIFNldCAodmlhIHRoZSBzYW1lIFNjb3BlRmFjdG9yeSksXG4gICAgICAgIC8vIHNvIGFueSBrZXkgbWFya2VkIHJlZGFjdGVkIGluIHRoZSBzdWJmbG93IGlzIGFscmVhZHkgdmlzaWJsZSBpbiB0aGUgcGFyZW50J3Mgc2NvcGUuXG4gICAgICAgIC8vIFNjb3BlRmFjYWRlLnNldFZhbHVlIGNoZWNrcyBfcmVkYWN0ZWRLZXlzLmhhcyhrZXkpLCBzbyB3cml0ZXMgdmlhIG91dHB1dE1hcHBlclxuICAgICAgICAvLyBhdXRvbWF0aWNhbGx5IGluaGVyaXQgdGhlIHN1YmZsb3cncyBkeW5hbWljIHJlZGFjdGlvbiBzdGF0ZS5cbiAgICAgICAgY29uc3QgZWZmZWN0aXZlT3V0cHV0ID0gc3ViZmxvd091dHB1dCA/PyB7IC4uLnN1YmZsb3dUcmVlQ29udGV4dC5zaGFyZWRTdGF0ZSB9O1xuICAgICAgICBjb25zdCBtYXBwZWRPdXRwdXQgPSBhcHBseU91dHB1dE1hcHBpbmcoZWZmZWN0aXZlT3V0cHV0LCBwYXJlbnRTY29wZSwgb3V0cHV0Q29udGV4dCwgbW91bnRPcHRpb25zKTtcblxuICAgICAgICBvdXRwdXRDb250ZXh0LmNvbW1pdCgpO1xuICAgICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgICBwYXJlbnRDb250ZXh0LmFkZEVycm9yKCdvdXRwdXRNYXBwZXJFcnJvcicsIGVycm9yLnRvU3RyaW5nKCkpO1xuICAgICAgICB0aGlzLmRlcHMubG9nZ2VyLmVycm9yKGBFcnJvciBpbiBvdXRwdXRNYXBwZXIgZm9yIHN1YmZsb3cgKCR7c3ViZmxvd0lkfSk6YCwgeyBlcnJvciB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBzdWJmbG93UmVzdWx0OiBTdWJmbG93UmVzdWx0ID0ge1xuICAgICAgc3ViZmxvd0lkLFxuICAgICAgc3ViZmxvd05hbWUsXG4gICAgICB0cmVlQ29udGV4dDoge1xuICAgICAgICBnbG9iYWxDb250ZXh0OiBzdWJmbG93VHJlZUNvbnRleHQuc2hhcmVkU3RhdGUsXG4gICAgICAgIHN0YWdlQ29udGV4dHM6IHN1YmZsb3dUcmVlQ29udGV4dC5leGVjdXRpb25UcmVlIGFzIHVua25vd24gYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gICAgICAgIGhpc3Rvcnk6IHN1YmZsb3dUcmVlQ29udGV4dC5jb21taXRMb2csXG4gICAgICB9LFxuICAgICAgcGFyZW50U3RhZ2VJZDogcGFyZW50Q29udGV4dC5nZXRTdGFnZUlkKCksXG4gICAgfTtcblxuICAgIGNvbnN0IHN1YmZsb3dEZWYgPSB0aGlzLmRlcHMuc3ViZmxvd3M/LltzdWJmbG93SWRdO1xuICAgIGlmIChzdWJmbG93RGVmICYmIChzdWJmbG93RGVmIGFzIGFueSkuYnVpbGRUaW1lU3RydWN0dXJlKSB7XG4gICAgICBzdWJmbG93UmVzdWx0LnBpcGVsaW5lU3RydWN0dXJlID0gKHN1YmZsb3dEZWYgYXMgYW55KS5idWlsZFRpbWVTdHJ1Y3R1cmU7XG4gICAgfVxuXG4gICAgc3ViZmxvd1Jlc3VsdHNNYXAuc2V0KHN1YmZsb3dJZCwgc3ViZmxvd1Jlc3VsdCk7XG5cbiAgICBwYXJlbnRDb250ZXh0LmFkZEZsb3dEZWJ1Z01lc3NhZ2UoJ3N1YmZsb3cnLCBgRXhpdGluZyAke3N1YmZsb3dOYW1lfSBzdWJmbG93YCwge1xuICAgICAgdGFyZ2V0U3RhZ2U6IHN1YmZsb3dJZCxcbiAgICB9KTtcbiAgICB0aGlzLmRlcHMubmFycmF0aXZlR2VuZXJhdG9yLm9uU3ViZmxvd0V4aXQoXG4gICAgICBzdWJmbG93TmFtZSxcbiAgICAgIHN1YmZsb3dJZCxcbiAgICAgIHBhcmVudFRyYXZlcnNhbENvbnRleHQsXG4gICAgICBzdWJmbG93UmVzdWx0LnRyZWVDb250ZXh0Py5nbG9iYWxDb250ZXh0LFxuICAgICk7XG5cbiAgICBwYXJlbnRDb250ZXh0LmNvbW1pdCgpO1xuXG4gICAgaWYgKHN1YmZsb3dFcnJvcikge1xuICAgICAgdGhyb3cgc3ViZmxvd0Vycm9yO1xuICAgIH1cblxuICAgIHJldHVybiBzdWJmbG93T3V0cHV0O1xuICB9XG59XG4iXX0=
|
|
@@ -18,7 +18,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
18
18
|
exports.applyOutputMapping = exports.seedSubflowGlobalStore = exports.createSubflowHandlerDeps = exports.getInitialScopeValues = exports.extractParentScopeValues = void 0;
|
|
19
19
|
/** Extract values from parent scope using inputMapper. */
|
|
20
20
|
function extractParentScopeValues(parentScope, options) {
|
|
21
|
-
if (!
|
|
21
|
+
if (!options?.inputMapper) {
|
|
22
22
|
return {};
|
|
23
23
|
}
|
|
24
24
|
const result = options.inputMapper(parentScope);
|
|
@@ -82,7 +82,7 @@ exports.seedSubflowGlobalStore = seedSubflowGlobalStore;
|
|
|
82
82
|
* arrays are appended, objects are shallow-merged, scalars are replaced.
|
|
83
83
|
*/
|
|
84
84
|
function applyOutputMapping(subflowOutput, parentScope, parentContext, options) {
|
|
85
|
-
if (!
|
|
85
|
+
if (!options?.outputMapper) {
|
|
86
86
|
return undefined;
|
|
87
87
|
}
|
|
88
88
|
const mappedOutput = options.outputMapper(subflowOutput, parentScope);
|
|
@@ -104,7 +104,7 @@ function applyOutputMapping(subflowOutput, parentScope, parentContext, options)
|
|
|
104
104
|
}
|
|
105
105
|
}
|
|
106
106
|
else if (Array.isArray(value)) {
|
|
107
|
-
if (
|
|
107
|
+
if (options?.arrayMerge === 'replace') {
|
|
108
108
|
parentContext.setGlobal(key, value);
|
|
109
109
|
}
|
|
110
110
|
else {
|
|
@@ -124,4 +124,4 @@ function applyOutputMapping(subflowOutput, parentScope, parentContext, options)
|
|
|
124
124
|
return mappedOutput;
|
|
125
125
|
}
|
|
126
126
|
exports.applyOutputMapping = applyOutputMapping;
|
|
127
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3ViZmxvd0lucHV0TWFwcGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9lbmdpbmUvaGFuZGxlcnMvU3ViZmxvd0lucHV0TWFwcGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7Ozs7Ozs7Ozs7R0FjRzs7O0FBS0gsMERBQTBEO0FBQzFELFNBQWdCLHdCQUF3QixDQUN0QyxXQUF5QixFQUN6QixPQUEwRDtJQUUxRCxJQUFJLENBQUMsQ0FBQSxPQUFPLGFBQVAsT0FBTyx1QkFBUCxPQUFPLENBQUUsV0FBVyxDQUFBLEVBQUUsQ0FBQztRQUMxQixPQUFPLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRCxNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ2hELElBQUksTUFBTSxLQUFLLElBQUksSUFBSSxNQUFNLEtBQUssU0FBUyxFQUFFLENBQUM7UUFDNUMsT0FBTyxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQsT0FBTyxNQUFNLENBQUM7QUFDaEIsQ0FBQztBQWRELDREQWNDO0FBRUQ7OztHQUdHO0FBQ0gsU0FBZ0IscUJBQXFCLENBQ25DLFdBQXlCLEVBQ3pCLE9BQTBEO0lBRTFELE9BQU8sd0JBQXdCLENBQUMsV0FBVyxFQUFFLE9BQU8sQ0FBNEIsQ0FBQztBQUNuRixDQUFDO0FBTEQsc0RBS0M7QUFFRDs7O0dBR0c7QUFDSCxTQUFnQix3QkFBd0IsQ0FDdEMsVUFBcUMsRUFDckMsY0FBaUMsRUFDakMsV0FBb0M7SUFFcEMsT0FBTztRQUNMLFFBQVEsRUFBRSxVQUFVLENBQUMsUUFBUTtRQUM3QixJQUFJLEVBQUUsVUFBVSxDQUFDLElBQUk7UUFDckIsWUFBWSxFQUFFLFVBQVUsQ0FBQyxZQUFZO1FBQ3JDLFFBQVEsRUFBRSxVQUFVLENBQUMsUUFBUTtRQUM3QixzQkFBc0IsRUFBRSxVQUFVLENBQUMsc0JBQXNCO1FBQ3pELGNBQWMsRUFBRSxV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QUMsQ0FBQztnQkFDekQsQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDO2FBQU0sSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDaEMsSUFBSSxDQUFBLE9BQU8sYUFBUCxPQUFPLHVCQUFQLE9BQU8sQ0FBRSxVQUFVLE1BQUssU0FBUyxFQUFFLENBQUM7Z0JBQ3RDLGFBQWEsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ3RDLENBQUM7aUJBQU0sQ0FBQztnQkFDTixNQUFNLFFBQVEsR0FBRyxhQUFhLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUM5QyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztvQkFDNUIsYUFBYSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLFFBQVEsRUFBRSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUM7Z0JBQ3hELENBQUM7cUJBQU0sQ0FBQztvQkFDTixhQUFhLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQztnQkFDdEMsQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDO2FBQU0sQ0FBQztZQUNOLGFBQWEsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ3RDLENBQUM7SUFDSCxDQUFDO0lBRUQsT0FBTyxZQUFZLENBQUM7QUFDdEIsQ0FBQztBQTVDRCxnREE0Q0MiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFN1YmZsb3dJbnB1dE1hcHBlciDigJQgUHVyZSBmdW5jdGlvbnMgZm9yIHN1YmZsb3cgZGF0YSBjb250cmFjdHMuXG4gKlxuICogTWVudGFsIG1vZGVsOiBTdWJmbG93ID0gUHVyZSBGdW5jdGlvblxuICogLSBJc29sYXRlZCBzY29wZSAob3duIEdsb2JhbFN0b3JlKVxuICogLSBFeHBsaWNpdCBpbnB1dHMgdmlhIGlucHV0TWFwcGVyXG4gKiAtIEV4cGxpY2l0IG91dHB1dHMgdmlhIG91dHB1dE1hcHBlclxuICpcbiAqIHwgU2NlbmFyaW8gICAgICAgIHwgQmVoYXZpb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICogfC0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18XG4gKiB8IE5vIGlucHV0TWFwcGVyICB8IFN1YmZsb3cgc3RhcnRzIHdpdGggZW1wdHkgc2NvcGUgICAgICAgICAgIHxcbiAqIHwgTm8gb3V0cHV0TWFwcGVyIHwgU3ViZmxvdyBzY29wZSBjaGFuZ2VzIGRpc2NhcmRlZCAgICAgICAgICAgfFxuICogfCBCb3RoIHByZXNlbnQgICAgfCBGdWxsIGRhdGEgY29udHJhY3QgKGFyZ3MgaW4sIHJlc3VsdHMgb3V0KSB8XG4gKiB8IE5laXRoZXIgcHJlc2VudCB8IENvbXBsZXRlIGlzb2xhdGlvbiAoc2lkZSBlZmZlY3RzIG9ubHkpICAgIHxcbiAqL1xuXG5pbXBvcnQgdHlwZSB7IFN0YWdlQ29udGV4dCB9IGZyb20gJy4uLy4uL21lbW9yeS9TdGFnZUNvbnRleHQuanMnO1xuaW1wb3J0IHR5cGUgeyBIYW5kbGVyRGVwcywgSUV4ZWN1dGlvblJ1bnRpbWUsIFN1YmZsb3dNb3VudE9wdGlvbnMgfSBmcm9tICcuLi90eXBlcy5qcyc7XG5cbi8qKiBFeHRyYWN0IHZhbHVlcyBmcm9tIHBhcmVudCBzY29wZSB1c2luZyBpbnB1dE1hcHBlci4gKi9cbmV4cG9ydCBmdW5jdGlvbiBleHRyYWN0UGFyZW50U2NvcGVWYWx1ZXM8VFBhcmVudFNjb3BlLCBUU3ViZmxvd0lucHV0PihcbiAgcGFyZW50U2NvcGU6IFRQYXJlbnRTY29wZSxcbiAgb3B0aW9ucz86IFN1YmZsb3dNb3VudE9wdGlvbnM8VFBhcmVudFNjb3BlLCBUU3ViZmxvd0lucHV0Pixcbik6IFRTdWJmbG93SW5wdXQgfCBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB7XG4gIGlmICghb3B0aW9ucz8uaW5wdXRNYXBwZXIpIHtcbiAgICByZXR1cm4ge307XG4gIH1cblxuICBjb25zdCByZXN1bHQgPSBvcHRpb25zLmlucHV0TWFwcGVyKHBhcmVudFNjb3BlKTtcbiAgaWYgKHJlc3VsdCA9PT0gbnVsbCB8fCByZXN1bHQgPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiB7fTtcbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogR2V0IHRoZSBpbml0aWFsIHNjb3BlIHZhbHVlcyBmb3IgYSBzdWJmbG93LlxuICogQWx3YXlzIGlzb2xhdGVkIOKAlCBvbmx5IGlucHV0TWFwcGVyIHZhbHVlcyBhcmUgaW5jbHVkZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRJbml0aWFsU2NvcGVWYWx1ZXM8VFBhcmVudFNjb3BlLCBUU3ViZmxvd0lucHV0PihcbiAgcGFyZW50U2NvcGU6IFRQYXJlbnRTY29wZSxcbiAgb3B0aW9ucz86IFN1YmZsb3dNb3VudE9wdGlvbnM8VFBhcmVudFNjb3BlLCBUU3ViZmxvd0lucHV0Pixcbik6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgcmV0dXJuIGV4dHJhY3RQYXJlbnRTY29wZVZhbHVlcyhwYXJlbnRTY29wZSwgb3B0aW9ucykgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG59XG5cbi8qKlxuICogQ3JlYXRlIGEgbmV3IEhhbmRsZXJEZXBzIGZvciBzdWJmbG93IGV4ZWN1dGlvbi5cbiAqIEtleTogc2V0cyByZWFkT25seUNvbnRleHQgdG8gbWFwcGVkIGlucHV0IHNvIFN0YWdlUnVubmVyIHBhc3NlcyBpdCB0byBTY29wZUZhY3RvcnkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVTdWJmbG93SGFuZGxlckRlcHM8VE91dCA9IGFueSwgVFNjb3BlID0gYW55PihcbiAgcGFyZW50RGVwczogSGFuZGxlckRlcHM8VE91dCwgVFNjb3BlPixcbiAgc3ViZmxvd1J1bnRpbWU6IElFeGVjdXRpb25SdW50aW1lLFxuICBtYXBwZWRJbnB1dDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4pOiBIYW5kbGVyRGVwczxUT3V0LCBUU2NvcGU+IHtcbiAgcmV0dXJuIHtcbiAgICBzdGFnZU1hcDogcGFyZW50RGVwcy5zdGFnZU1hcCxcbiAgICByb290OiBwYXJlbnREZXBzLnJvb3QsXG4gICAgc2NvcGVGYWN0b3J5OiBwYXJlbnREZXBzLnNjb3BlRmFjdG9yeSxcbiAgICBzdWJmbG93czogcGFyZW50RGVwcy5zdWJmbG93cyxcbiAgICB0aHJvdHRsaW5nRXJyb3JDaGVja2VyOiBwYXJlbnREZXBzLnRocm90dGxpbmdFcnJvckNoZWNrZXIsXG4gICAgc3RyZWFtSGFuZGxlcnM6IHBhcmVudERlcHMuc3RyZWFtSGFuZGxlcnMsXG4gICAgc2NvcGVQcm90ZWN0aW9uTW9kZTogcGFyZW50RGVwcy5zY29wZVByb3RlY3Rpb25Nb2RlLFxuICAgIGV4ZWN1dGlvblJ1bnRpbWU6IHN1YmZsb3dSdW50aW1lLFxuICAgIHJlYWRPbmx5Q29udGV4dDogbWFwcGVkSW5wdXQsXG4gICAgZXhlY3V0aW9uRW52OiBwYXJlbnREZXBzLmV4ZWN1dGlvbkVudiwgLy8gaW5oZXJpdGVkIOKAlCBsaWtlIHByb2Nlc3MuZW52XG4gICAgbmFycmF0aXZlR2VuZXJhdG9yOiBwYXJlbnREZXBzLm5hcnJhdGl2ZUdlbmVyYXRvcixcbiAgICBsb2dnZXI6IHBhcmVudERlcHMubG9nZ2VyLFxuICB9O1xufVxuXG4vKipcbiAqIFNlZWQgdGhlIHN1YmZsb3cncyBHbG9iYWxTdG9yZSB3aXRoIGluaXRpYWwgdmFsdWVzLlxuICogQ2FsbGVkIGJlZm9yZSBzdWJmbG93IGV4ZWN1dGlvbiB0byBtYWtlIGlucHV0TWFwcGVyIHZhbHVlcyBhdmFpbGFibGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZWVkU3ViZmxvd0dsb2JhbFN0b3JlKFxuICBzdWJmbG93UnVudGltZTogSUV4ZWN1dGlvblJ1bnRpbWUsXG4gIGluaXRpYWxWYWx1ZXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuKTogdm9pZCB7XG4gIGNvbnN0IHJvb3RDb250ZXh0ID0gc3ViZmxvd1J1bnRpbWUucm9vdFN0YWdlQ29udGV4dDtcblxuICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhpbml0aWFsVmFsdWVzKSkge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICE9PSBudWxsICYmICFBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgZm9yIChjb25zdCBbbmVzdGVkS2V5LCBuZXN0ZWRWYWx1ZV0gb2YgT2JqZWN0LmVudHJpZXModmFsdWUgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pKSB7XG4gICAgICAgIHJvb3RDb250ZXh0LnNldE9iamVjdChba2V5XSwgbmVzdGVkS2V5LCBuZXN0ZWRWYWx1ZSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJvb3RDb250ZXh0LnNldEdsb2JhbChrZXksIHZhbHVlKTtcbiAgICB9XG4gIH1cblxuICByb290Q29udGV4dC5jb21taXQoKTtcbn1cblxuLyoqXG4gKiBBcHBseSBvdXRwdXQgbWFwcGluZyBhZnRlciBzdWJmbG93IGNvbXBsZXRpb24uXG4gKiBXcml0ZXMgbWFwcGVkIHZhbHVlcyBiYWNrIHRvIHBhcmVudCBzY29wZSB1c2luZyBtZXJnZSBzZW1hbnRpY3M6XG4gKiBhcnJheXMgYXJlIGFwcGVuZGVkLCBvYmplY3RzIGFyZSBzaGFsbG93LW1lcmdlZCwgc2NhbGFycyBhcmUgcmVwbGFjZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhcHBseU91dHB1dE1hcHBpbmc8VFBhcmVudFNjb3BlLCBUU3ViZmxvd091dHB1dD4oXG4gIHN1YmZsb3dPdXRwdXQ6IFRTdWJmbG93T3V0cHV0LFxuICBwYXJlbnRTY29wZTogVFBhcmVudFNjb3BlLFxuICBwYXJlbnRDb250ZXh0OiBTdGFnZUNvbnRleHQsXG4gIG9wdGlvbnM/OiBTdWJmbG93TW91bnRPcHRpb25zPFRQYXJlbnRTY29wZSwgYW55LCBUU3ViZmxvd091dHB1dD4sXG4pOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IHVuZGVmaW5lZCB7XG4gIGlmICghb3B0aW9ucz8ub3V0cHV0TWFwcGVyKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGNvbnN0IG1hcHBlZE91dHB1dCA9IG9wdGlvbnMub3V0cHV0TWFwcGVyKHN1YmZsb3dPdXRwdXQsIHBhcmVudFNjb3BlKTtcblxuICBpZiAobWFwcGVkT3V0cHV0ID09PSBudWxsIHx8IG1hcHBlZE91dHB1dCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKG1hcHBlZE91dHB1dCkpIHtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAhPT0gbnVsbCAmJiAhQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgIGZvciAoY29uc3QgW25lc3RlZEtleSwgbmVzdGVkVmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHZhbHVlIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KSkge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShuZXN0ZWRWYWx1ZSkpIHtcbiAgICAgICAgICBwYXJlbnRDb250ZXh0LmFwcGVuZFRvQXJyYXkoW2tleV0sIG5lc3RlZEtleSwgbmVzdGVkVmFsdWUpO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBuZXN0ZWRWYWx1ZSA9PT0gJ29iamVjdCcgJiYgbmVzdGVkVmFsdWUgIT09IG51bGwpIHtcbiAgICAgICAgICBwYXJlbnRDb250ZXh0Lm1lcmdlT2JqZWN0KFtrZXldLCBuZXN0ZWRLZXksIG5lc3RlZFZhbHVlIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwYXJlbnRDb250ZXh0LnNldE9iamVjdChba2V5XSwgbmVzdGVkS2V5LCBuZXN0ZWRWYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICBpZiAob3B0aW9ucz8uYXJyYXlNZXJnZSA9PT0gJ3JlcGxhY2UnKSB7XG4gICAgICAgIHBhcmVudENvbnRleHQuc2V0R2xvYmFsKGtleSwgdmFsdWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgZXhpc3RpbmcgPSBwYXJlbnRDb250ZXh0LmdldEdsb2JhbChrZXkpO1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShleGlzdGluZykpIHtcbiAgICAgICAgICBwYXJlbnRDb250ZXh0LnNldEdsb2JhbChrZXksIFsuLi5leGlzdGluZywgLi4udmFsdWVdKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwYXJlbnRDb250ZXh0LnNldEdsb2JhbChrZXksIHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBwYXJlbnRDb250ZXh0LnNldEdsb2JhbChrZXksIHZhbHVlKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbWFwcGVkT3V0cHV0O1xufVxuIl19
|
|
127
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3ViZmxvd0lucHV0TWFwcGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9lbmdpbmUvaGFuZGxlcnMvU3ViZmxvd0lucHV0TWFwcGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7Ozs7Ozs7Ozs7R0FjRzs7O0FBS0gsMERBQTBEO0FBQzFELFNBQWdCLHdCQUF3QixDQUN0QyxXQUF5QixFQUN6QixPQUEwRDtJQUUxRCxJQUFJLENBQUMsT0FBTyxFQUFFLFdBQVcsRUFBRSxDQUFDO1FBQzFCLE9BQU8sRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVELE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDaEQsSUFBSSxNQUFNLEtBQUssSUFBSSxJQUFJLE1BQU0sS0FBSyxTQUFTLEVBQUUsQ0FBQztRQUM1QyxPQUFPLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRCxPQUFPLE1BQU0sQ0FBQztBQUNoQixDQUFDO0FBZEQsNERBY0M7QUFFRDs7O0dBR0c7QUFDSCxTQUFnQixxQkFBcUIsQ0FDbkMsV0FBeUIsRUFDekIsT0FBMEQ7SUFFMUQsT0FBTyx3QkFBd0IsQ0FBQyxXQUFXLEVBQUUsT0FBTyxDQUE0QixDQUFDO0FBQ25GLENBQUM7QUFMRCxzREFLQztBQUVEOzs7R0FHRztBQUNILFNBQWdCLHdCQUF3QixDQUN0QyxVQUFxQyxFQUNyQyxjQUFpQyxFQUNqQyxXQUFvQztJQUVwQyxPQUFPO1FBQ0wsUUFBUSxFQUFFLFVBQVUsQ0FBQyxRQUFRO1FBQzdCLElBQUksRUFBRSxVQUFVLENBQUMsSUFBSTtRQUNyQixZQUFZLEVBQUUsVUFBVSxDQUFDLFlBQVk7UUFDckMsUUFBUSxFQUFFLFVBQVUsQ0FBQyxRQUFRO1FBQzdCLHNCQUFzQixFQUFFLFVBQVUsQ0FBQyxzQkFBc0I7UUFDekQsY0FBYyxFQUFFLFVBQVUsQ0FBQyxjQUFjO1FBQ3pDLG1CQUFtQixFQUFF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QU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ2hDLElBQUksT0FBTyxFQUFFLFVBQVUsS0FBSyxTQUFTLEVBQUUsQ0FBQztnQkFDdEMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDdEMsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLE1BQU0sUUFBUSxHQUFHLGFBQWEsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQzlDLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO29CQUM1QixhQUFhLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsUUFBUSxFQUFFLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQztnQkFDeEQsQ0FBQztxQkFBTSxDQUFDO29CQUNOLGFBQWEsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO2dCQUN0QyxDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUM7YUFBTSxDQUFDO1lBQ04sYUFBYSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDdEMsQ0FBQztJQUNILENBQUM7SUFFRCxPQUFPLFlBQVksQ0FBQztBQUN0QixDQUFDO0FBNUNELGdEQTRDQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogU3ViZmxvd0lucHV0TWFwcGVyIOKAlCBQdXJlIGZ1bmN0aW9ucyBmb3Igc3ViZmxvdyBkYXRhIGNvbnRyYWN0cy5cbiAqXG4gKiBNZW50YWwgbW9kZWw6IFN1YmZsb3cgPSBQdXJlIEZ1bmN0aW9uXG4gKiAtIElzb2xhdGVkIHNjb3BlIChvd24gR2xvYmFsU3RvcmUpXG4gKiAtIEV4cGxpY2l0IGlucHV0cyB2aWEgaW5wdXRNYXBwZXJcbiAqIC0gRXhwbGljaXQgb3V0cHV0cyB2aWEgb3V0cHV0TWFwcGVyXG4gKlxuICogfCBTY2VuYXJpbyAgICAgICAgfCBCZWhhdmlvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8LS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXxcbiAqIHwgTm8gaW5wdXRNYXBwZXIgIHwgU3ViZmxvdyBzdGFydHMgd2l0aCBlbXB0eSBzY29wZSAgICAgICAgICAgfFxuICogfCBObyBvdXRwdXRNYXBwZXIgfCBTdWJmbG93IHNjb3BlIGNoYW5nZXMgZGlzY2FyZGVkICAgICAgICAgICB8XG4gKiB8IEJvdGggcHJlc2VudCAgICB8IEZ1bGwgZGF0YSBjb250cmFjdCAoYXJncyBpbiwgcmVzdWx0cyBvdXQpIHxcbiAqIHwgTmVpdGhlciBwcmVzZW50IHwgQ29tcGxldGUgaXNvbGF0aW9uIChzaWRlIGVmZmVjdHMgb25seSkgICAgfFxuICovXG5cbmltcG9ydCB0eXBlIHsgU3RhZ2VDb250ZXh0IH0gZnJvbSAnLi4vLi4vbWVtb3J5L1N0YWdlQ29udGV4dC5qcyc7XG5pbXBvcnQgdHlwZSB7IEhhbmRsZXJEZXBzLCBJRXhlY3V0aW9uUnVudGltZSwgU3ViZmxvd01vdW50T3B0aW9ucyB9IGZyb20gJy4uL3R5cGVzLmpzJztcblxuLyoqIEV4dHJhY3QgdmFsdWVzIGZyb20gcGFyZW50IHNjb3BlIHVzaW5nIGlucHV0TWFwcGVyLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGV4dHJhY3RQYXJlbnRTY29wZVZhbHVlczxUUGFyZW50U2NvcGUsIFRTdWJmbG93SW5wdXQ+KFxuICBwYXJlbnRTY29wZTogVFBhcmVudFNjb3BlLFxuICBvcHRpb25zPzogU3ViZmxvd01vdW50T3B0aW9uczxUUGFyZW50U2NvcGUsIFRTdWJmbG93SW5wdXQ+LFxuKTogVFN1YmZsb3dJbnB1dCB8IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgaWYgKCFvcHRpb25zPy5pbnB1dE1hcHBlcikge1xuICAgIHJldHVybiB7fTtcbiAgfVxuXG4gIGNvbnN0IHJlc3VsdCA9IG9wdGlvbnMuaW5wdXRNYXBwZXIocGFyZW50U2NvcGUpO1xuICBpZiAocmVzdWx0ID09PSBudWxsIHx8IHJlc3VsdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIHt9O1xuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBHZXQgdGhlIGluaXRpYWwgc2NvcGUgdmFsdWVzIGZvciBhIHN1YmZsb3cuXG4gKiBBbHdheXMgaXNvbGF0ZWQg4oCUIG9ubHkgaW5wdXRNYXBwZXIgdmFsdWVzIGFyZSBpbmNsdWRlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEluaXRpYWxTY29wZVZhbHVlczxUUGFyZW50U2NvcGUsIFRTdWJmbG93SW5wdXQ+KFxuICBwYXJlbnRTY29wZTogVFBhcmVudFNjb3BlLFxuICBvcHRpb25zPzogU3ViZmxvd01vdW50T3B0aW9uczxUUGFyZW50U2NvcGUsIFRTdWJmbG93SW5wdXQ+LFxuKTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4ge1xuICByZXR1cm4gZXh0cmFjdFBhcmVudFNjb3BlVmFsdWVzKHBhcmVudFNjb3BlLCBvcHRpb25zKSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbn1cblxuLyoqXG4gKiBDcmVhdGUgYSBuZXcgSGFuZGxlckRlcHMgZm9yIHN1YmZsb3cgZXhlY3V0aW9uLlxuICogS2V5OiBzZXRzIHJlYWRPbmx5Q29udGV4dCB0byBtYXBwZWQgaW5wdXQgc28gU3RhZ2VSdW5uZXIgcGFzc2VzIGl0IHRvIFNjb3BlRmFjdG9yeS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVN1YmZsb3dIYW5kbGVyRGVwczxUT3V0ID0gYW55LCBUU2NvcGUgPSBhbnk+KFxuICBwYXJlbnREZXBzOiBIYW5kbGVyRGVwczxUT3V0LCBUU2NvcGU+LFxuICBzdWJmbG93UnVudGltZTogSUV4ZWN1dGlvblJ1bnRpbWUsXG4gIG1hcHBlZElucHV0OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbik6IEhhbmRsZXJEZXBzPFRPdXQsIFRTY29wZT4ge1xuICByZXR1cm4ge1xuICAgIHN0YWdlTWFwOiBwYXJlbnREZXBzLnN0YWdlTWFwLFxuICAgIHJvb3Q6IHBhcmVudERlcHMucm9vdCxcbiAgICBzY29wZUZhY3Rvcnk6IHBhcmVudERlcHMuc2NvcGVGYWN0b3J5LFxuICAgIHN1YmZsb3dzOiBwYXJlbnREZXBzLnN1YmZsb3dzLFxuICAgIHRocm90dGxpbmdFcnJvckNoZWNrZXI6IHBhcmVudERlcHMudGhyb3R0bGluZ0Vycm9yQ2hlY2tlcixcbiAgICBzdHJlYW1IYW5kbGVyczogcGFyZW50RGVwcy5zdHJlYW1IYW5kbGVycyxcbiAgICBzY29wZVByb3RlY3Rpb25Nb2RlOiBwYXJlbnREZXBzLnNjb3BlUHJvdGVjdGlvbk1vZGUsXG4gICAgZXhlY3V0aW9uUnVudGltZTogc3ViZmxvd1J1bnRpbWUsXG4gICAgcmVhZE9ubHlDb250ZXh0OiBtYXBwZWRJbnB1dCxcbiAgICBleGVjdXRpb25FbnY6IHBhcmVudERlcHMuZXhlY3V0aW9uRW52LCAvLyBpbmhlcml0ZWQg4oCUIGxpa2UgcHJvY2Vzcy5lbnZcbiAgICBuYXJyYXRpdmVHZW5lcmF0b3I6IHBhcmVudERlcHMubmFycmF0aXZlR2VuZXJhdG9yLFxuICAgIGxvZ2dlcjogcGFyZW50RGVwcy5sb2dnZXIsXG4gIH07XG59XG5cbi8qKlxuICogU2VlZCB0aGUgc3ViZmxvdydzIEdsb2JhbFN0b3JlIHdpdGggaW5pdGlhbCB2YWx1ZXMuXG4gKiBDYWxsZWQgYmVmb3JlIHN1YmZsb3cgZXhlY3V0aW9uIHRvIG1ha2UgaW5wdXRNYXBwZXIgdmFsdWVzIGF2YWlsYWJsZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNlZWRTdWJmbG93R2xvYmFsU3RvcmUoXG4gIHN1YmZsb3dSdW50aW1lOiBJRXhlY3V0aW9uUnVudGltZSxcbiAgaW5pdGlhbFZhbHVlczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4pOiB2b2lkIHtcbiAgY29uc3Qgcm9vdENvbnRleHQgPSBzdWJmbG93UnVudGltZS5yb290U3RhZ2VDb250ZXh0O1xuXG4gIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGluaXRpYWxWYWx1ZXMpKSB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgIT09IG51bGwgJiYgIUFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICBmb3IgKGNvbnN0IFtuZXN0ZWRLZXksIG5lc3RlZFZhbHVlXSBvZiBPYmplY3QuZW50cmllcyh2YWx1ZSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikpIHtcbiAgICAgICAgcm9vdENvbnRleHQuc2V0T2JqZWN0KFtrZXldLCBuZXN0ZWRLZXksIG5lc3RlZFZhbHVlKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcm9vdENvbnRleHQuc2V0R2xvYmFsKGtleSwgdmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIHJvb3RDb250ZXh0LmNvbW1pdCgpO1xufVxuXG4vKipcbiAqIEFwcGx5IG91dHB1dCBtYXBwaW5nIGFmdGVyIHN1YmZsb3cgY29tcGxldGlvbi5cbiAqIFdyaXRlcyBtYXBwZWQgdmFsdWVzIGJhY2sgdG8gcGFyZW50IHNjb3BlIHVzaW5nIG1lcmdlIHNlbWFudGljczpcbiAqIGFycmF5cyBhcmUgYXBwZW5kZWQsIG9iamVjdHMgYXJlIHNoYWxsb3ctbWVyZ2VkLCBzY2FsYXJzIGFyZSByZXBsYWNlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFwcGx5T3V0cHV0TWFwcGluZzxUUGFyZW50U2NvcGUsIFRTdWJmbG93T3V0cHV0PihcbiAgc3ViZmxvd091dHB1dDogVFN1YmZsb3dPdXRwdXQsXG4gIHBhcmVudFNjb3BlOiBUUGFyZW50U2NvcGUsXG4gIHBhcmVudENvbnRleHQ6IFN0YWdlQ29udGV4dCxcbiAgb3B0aW9ucz86IFN1YmZsb3dNb3VudE9wdGlvbnM8VFBhcmVudFNjb3BlLCBhbnksIFRTdWJmbG93T3V0cHV0Pixcbik6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKCFvcHRpb25zPy5vdXRwdXRNYXBwZXIpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgY29uc3QgbWFwcGVkT3V0cHV0ID0gb3B0aW9ucy5vdXRwdXRNYXBwZXIoc3ViZmxvd091dHB1dCwgcGFyZW50U2NvcGUpO1xuXG4gIGlmIChtYXBwZWRPdXRwdXQgPT09IG51bGwgfHwgbWFwcGVkT3V0cHV0ID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMobWFwcGVkT3V0cHV0KSkge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICE9PSBudWxsICYmICFBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgZm9yIChjb25zdCBbbmVzdGVkS2V5LCBuZXN0ZWRWYWx1ZV0gb2YgT2JqZWN0LmVudHJpZXModmFsdWUgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pKSB7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KG5lc3RlZFZhbHVlKSkge1xuICAgICAgICAgIHBhcmVudENvbnRleHQuYXBwZW5kVG9BcnJheShba2V5XSwgbmVzdGVkS2V5LCBuZXN0ZWRWYWx1ZSk7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIG5lc3RlZFZhbHVlID09PSAnb2JqZWN0JyAmJiBuZXN0ZWRWYWx1ZSAhPT0gbnVsbCkge1xuICAgICAgICAgIHBhcmVudENvbnRleHQubWVyZ2VPYmplY3QoW2tleV0sIG5lc3RlZEtleSwgbmVzdGVkVmFsdWUgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHBhcmVudENvbnRleHQuc2V0T2JqZWN0KFtrZXldLCBuZXN0ZWRLZXksIG5lc3RlZFZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgIGlmIChvcHRpb25zPy5hcnJheU1lcmdlID09PSAncmVwbGFjZScpIHtcbiAgICAgICAgcGFyZW50Q29udGV4dC5zZXRHbG9iYWwoa2V5LCB2YWx1ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBleGlzdGluZyA9IHBhcmVudENvbnRleHQuZ2V0R2xvYmFsKGtleSk7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGV4aXN0aW5nKSkge1xuICAgICAgICAgIHBhcmVudENvbnRleHQuc2V0R2xvYmFsKGtleSwgWy4uLmV4aXN0aW5nLCAuLi52YWx1ZV0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHBhcmVudENvbnRleHQuc2V0R2xvYmFsKGtleSwgdmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHBhcmVudENvbnRleHQuc2V0R2xvYmFsKGtleSwgdmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBtYXBwZWRPdXRwdXQ7XG59XG4iXX0=
|