footprintjs 4.17.2 → 6.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CLAUDE.md +71 -9
- package/dist/advanced.js +2 -3
- package/dist/esm/advanced.js +2 -2
- package/dist/esm/index.js +3 -3
- package/dist/esm/lib/builder/FlowChartBuilder.js +359 -70
- package/dist/esm/lib/builder/index.js +1 -1
- package/dist/esm/lib/builder/structure/StructureRecorder.js +158 -0
- package/dist/esm/lib/builder/structure/StructureRecorderDispatcher.js +171 -0
- package/dist/esm/lib/builder/types.js +1 -1
- package/dist/esm/lib/decide/decide.js +9 -9
- package/dist/esm/lib/decide/evidence.js +2 -2
- package/dist/esm/lib/engine/errors/errorInfo.js +4 -3
- package/dist/esm/lib/engine/handlers/ChildrenExecutor.js +11 -2
- package/dist/esm/lib/engine/handlers/DeciderHandler.js +5 -7
- package/dist/esm/lib/engine/handlers/RuntimeStructureManager.js +2 -2
- package/dist/esm/lib/engine/handlers/SelectorHandler.js +9 -7
- package/dist/esm/lib/engine/handlers/SubflowExecutor.js +7 -1
- package/dist/esm/lib/engine/handlers/index.js +1 -3
- package/dist/esm/lib/engine/handlers/types.js +2 -2
- package/dist/esm/lib/engine/narrative/CombinedNarrativeRecorder.js +14 -4
- package/dist/esm/lib/engine/narrative/FlowRecorderDispatcher.js +5 -5
- package/dist/esm/lib/engine/narrative/NarrativeFlowRecorder.js +8 -1
- package/dist/esm/lib/engine/narrative/types.js +1 -1
- package/dist/esm/lib/engine/runtimeStageId.js +64 -2
- package/dist/esm/lib/engine/traversal/FlowchartTraverser.js +30 -56
- package/dist/esm/lib/engine/types.js +1 -1
- package/dist/esm/lib/engine/walkSubflowSpec.js +144 -0
- package/dist/esm/lib/memory/StageContext.js +3 -3
- package/dist/esm/lib/memory/backtrack.js +1 -1
- package/dist/esm/lib/reactive/createTypedScope.js +5 -5
- package/dist/esm/lib/reactive/types.js +7 -7
- package/dist/esm/lib/recorder/BoundaryStateStore.js +167 -0
- package/dist/esm/lib/recorder/BoundaryStateTracker.js +4 -4
- package/dist/esm/lib/recorder/CombinedRecorder.js +9 -9
- package/dist/esm/lib/recorder/CommitRangeIndex.js +207 -0
- package/dist/esm/lib/recorder/CompositeRecorder.js +6 -6
- package/dist/esm/lib/recorder/EmitRecorder.js +3 -3
- package/dist/esm/lib/recorder/InOutRecorder.js +1 -1
- package/dist/esm/lib/recorder/KeyedStore.js +113 -0
- package/dist/esm/lib/recorder/QualityRecorder.js +2 -2
- package/dist/esm/lib/recorder/SequenceRecorder.js +2 -2
- package/dist/esm/lib/recorder/SequenceStore.js +195 -0
- package/dist/esm/lib/recorder/TopologyRecorder.js +1 -1
- package/dist/esm/lib/recorder/index.js +13 -3
- package/dist/esm/lib/runner/ExecutionRuntime.js +1 -1
- package/dist/esm/lib/runner/FlowChartExecutor.js +75 -44
- package/dist/esm/lib/runner/RunContext.js +2 -2
- package/dist/esm/lib/runner/RunnableChart.js +1 -1
- package/dist/esm/lib/runner/getSubtreeSnapshot.js +3 -2
- package/dist/esm/lib/runner/runId.js +65 -0
- package/dist/esm/lib/scope/ScopeFacade.js +6 -6
- package/dist/esm/lib/scope/index.js +1 -1
- package/dist/esm/lib/scope/recorders/DebugRecorder.js +4 -4
- package/dist/esm/lib/scope/recorders/MetricRecorder.js +2 -2
- package/dist/esm/lib/scope/recorders/index.js +1 -1
- package/dist/esm/lib/scope/types.js +1 -1
- package/dist/esm/recorders.js +1 -1
- package/dist/esm/trace.js +15 -2
- package/dist/index.js +3 -3
- package/dist/lib/builder/FlowChartBuilder.js +359 -70
- package/dist/lib/builder/index.js +1 -1
- package/dist/lib/builder/structure/StructureRecorder.js +159 -0
- package/dist/lib/builder/structure/StructureRecorderDispatcher.js +175 -0
- package/dist/lib/builder/types.js +1 -1
- package/dist/lib/decide/decide.js +9 -9
- package/dist/lib/decide/evidence.js +2 -2
- package/dist/lib/engine/errors/errorInfo.js +4 -3
- package/dist/lib/engine/handlers/ChildrenExecutor.js +11 -2
- package/dist/lib/engine/handlers/DeciderHandler.js +5 -7
- package/dist/lib/engine/handlers/RuntimeStructureManager.js +2 -2
- package/dist/lib/engine/handlers/SelectorHandler.js +9 -7
- package/dist/lib/engine/handlers/SubflowExecutor.js +7 -1
- package/dist/lib/engine/handlers/index.js +2 -5
- package/dist/lib/engine/handlers/types.js +2 -2
- package/dist/lib/engine/narrative/CombinedNarrativeRecorder.js +14 -4
- package/dist/lib/engine/narrative/FlowRecorderDispatcher.js +5 -5
- package/dist/lib/engine/narrative/NarrativeFlowRecorder.js +8 -1
- package/dist/lib/engine/narrative/types.js +1 -1
- package/dist/lib/engine/runtimeStageId.js +66 -3
- package/dist/lib/engine/traversal/FlowchartTraverser.js +30 -56
- package/dist/lib/engine/types.js +1 -1
- package/dist/lib/engine/walkSubflowSpec.js +148 -0
- package/dist/lib/memory/StageContext.js +3 -3
- package/dist/lib/memory/backtrack.js +1 -1
- package/dist/lib/reactive/createTypedScope.js +5 -5
- package/dist/lib/reactive/types.js +7 -7
- package/dist/lib/recorder/BoundaryStateStore.js +171 -0
- package/dist/lib/recorder/BoundaryStateTracker.js +4 -4
- package/dist/lib/recorder/CombinedRecorder.js +9 -9
- package/dist/lib/recorder/CommitRangeIndex.js +211 -0
- package/dist/lib/recorder/CompositeRecorder.js +6 -6
- package/dist/lib/recorder/EmitRecorder.js +3 -3
- package/dist/lib/recorder/InOutRecorder.js +1 -1
- package/dist/lib/recorder/KeyedStore.js +117 -0
- package/dist/lib/recorder/QualityRecorder.js +2 -2
- package/dist/lib/recorder/SequenceRecorder.js +2 -2
- package/dist/lib/recorder/SequenceStore.js +199 -0
- package/dist/lib/recorder/TopologyRecorder.js +1 -1
- package/dist/lib/recorder/index.js +19 -6
- package/dist/lib/runner/ExecutionRuntime.js +1 -1
- package/dist/lib/runner/FlowChartExecutor.js +75 -44
- package/dist/lib/runner/RunContext.js +2 -2
- package/dist/lib/runner/RunnableChart.js +1 -1
- package/dist/lib/runner/getSubtreeSnapshot.js +3 -2
- package/dist/lib/runner/runId.js +70 -0
- package/dist/lib/scope/ScopeFacade.js +6 -6
- package/dist/lib/scope/index.js +1 -1
- package/dist/lib/scope/recorders/DebugRecorder.js +4 -4
- package/dist/lib/scope/recorders/MetricRecorder.js +2 -2
- package/dist/lib/scope/recorders/index.js +1 -1
- package/dist/lib/scope/types.js +1 -1
- package/dist/recorders.js +1 -1
- package/dist/trace.js +21 -2
- package/dist/types/advanced.d.ts +4 -4
- package/dist/types/index.d.ts +6 -4
- package/dist/types/lib/builder/FlowChartBuilder.d.ts +110 -14
- package/dist/types/lib/builder/index.d.ts +2 -1
- package/dist/types/lib/builder/structure/StructureRecorder.d.ts +349 -0
- package/dist/types/lib/builder/structure/StructureRecorderDispatcher.d.ts +77 -0
- package/dist/types/lib/builder/types.d.ts +20 -6
- package/dist/types/lib/decide/evidence.d.ts +3 -3
- package/dist/types/lib/engine/errors/errorInfo.d.ts +3 -2
- package/dist/types/lib/engine/handlers/DeciderHandler.d.ts +3 -3
- package/dist/types/lib/engine/handlers/RuntimeStructureManager.d.ts +1 -1
- package/dist/types/lib/engine/handlers/SelectorHandler.d.ts +2 -2
- package/dist/types/lib/engine/handlers/index.d.ts +1 -2
- package/dist/types/lib/engine/handlers/types.d.ts +2 -9
- package/dist/types/lib/engine/narrative/CombinedNarrativeRecorder.d.ts +1 -1
- package/dist/types/lib/engine/narrative/FlowRecorderDispatcher.d.ts +4 -4
- package/dist/types/lib/engine/narrative/types.d.ts +43 -4
- package/dist/types/lib/engine/runtimeStageId.d.ts +57 -1
- package/dist/types/lib/engine/traversal/FlowchartTraverser.d.ts +12 -6
- package/dist/types/lib/engine/types.d.ts +0 -26
- package/dist/types/lib/engine/walkSubflowSpec.d.ts +95 -0
- package/dist/types/lib/memory/StageContext.d.ts +2 -2
- package/dist/types/lib/memory/backtrack.d.ts +1 -1
- package/dist/types/lib/reactive/types.d.ts +7 -7
- package/dist/types/lib/recorder/BoundaryStateStore.d.ts +115 -0
- package/dist/types/lib/recorder/BoundaryStateTracker.d.ts +3 -3
- package/dist/types/lib/recorder/CombinedRecorder.d.ts +11 -11
- package/dist/types/lib/recorder/CommitRangeIndex.d.ts +147 -0
- package/dist/types/lib/recorder/CompositeRecorder.d.ts +8 -8
- package/dist/types/lib/recorder/EmitRecorder.d.ts +2 -2
- package/dist/types/lib/recorder/InOutRecorder.d.ts +1 -1
- package/dist/types/lib/recorder/KeyedStore.d.ts +70 -0
- package/dist/types/lib/recorder/QualityRecorder.d.ts +4 -4
- package/dist/types/lib/recorder/SequenceRecorder.d.ts +1 -1
- package/dist/types/lib/recorder/SequenceStore.d.ts +120 -0
- package/dist/types/lib/recorder/TopologyRecorder.d.ts +1 -1
- package/dist/types/lib/recorder/index.d.ts +5 -2
- package/dist/types/lib/runner/ExecutionRuntime.d.ts +1 -1
- package/dist/types/lib/runner/FlowChartExecutor.d.ts +40 -30
- package/dist/types/lib/runner/RunContext.d.ts +2 -2
- package/dist/types/lib/runner/RunnableChart.d.ts +2 -2
- package/dist/types/lib/runner/runId.d.ts +45 -0
- package/dist/types/lib/scope/ScopeFacade.d.ts +4 -4
- package/dist/types/lib/scope/index.d.ts +1 -1
- package/dist/types/lib/scope/recorders/DebugRecorder.d.ts +4 -4
- package/dist/types/lib/scope/recorders/MetricRecorder.d.ts +4 -4
- package/dist/types/lib/scope/recorders/index.d.ts +1 -1
- package/dist/types/lib/scope/types.d.ts +1 -1
- package/dist/types/recorders.d.ts +1 -1
- package/dist/types/trace.d.ts +8 -1
- package/package.json +1 -1
- package/dist/esm/lib/engine/handlers/ExtractorRunner.js +0 -122
- package/dist/lib/engine/handlers/ExtractorRunner.js +0 -126
- package/dist/types/lib/engine/handlers/ExtractorRunner.d.ts +0 -41
|
@@ -52,7 +52,7 @@ class RunContext {
|
|
|
52
52
|
const executor = new FlowChartExecutor_js_1.FlowChartExecutor(this.chart);
|
|
53
53
|
// Attach scope recorders
|
|
54
54
|
for (const r of this.scopeRecorders) {
|
|
55
|
-
executor.
|
|
55
|
+
executor.attachScopeRecorder(r);
|
|
56
56
|
}
|
|
57
57
|
// Attach flow recorders (auto-enables narrative)
|
|
58
58
|
for (const r of this.flowRecorders) {
|
|
@@ -77,4 +77,4 @@ class RunContext {
|
|
|
77
77
|
}
|
|
78
78
|
}
|
|
79
79
|
exports.RunContext = RunContext;
|
|
80
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
80
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUnVuQ29udGV4dC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvcnVubmVyL1J1bkNvbnRleHQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7OztHQVFHOzs7QUFNSCxpRUFBMkQ7QUFjM0QsTUFBYSxVQUFVO0lBQ0osS0FBSyxDQUEwQjtJQUMvQixjQUFjLEdBQW9CLEVBQUUsQ0FBQztJQUNyQyxhQUFhLEdBQW1CLEVBQUUsQ0FBQztJQUM1QyxlQUFlLENBQW1CO0lBRTFDLFlBQVksS0FBOEI7UUFDeEMsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7SUFDckIsQ0FBQztJQUVELHlFQUF5RTtJQUN6RSxRQUFRLENBQUMsQ0FBK0I7UUFDdEMsTUFBTSxLQUFLLEdBQUcsT0FBUSxDQUFTLENBQUMsRUFBRSxLQUFLLFFBQVEsQ0FBQztRQUNoRCxNQUFNLGNBQWMsR0FDbEIsS0FBSztZQUNMLENBQUMsT0FBUSxDQUFrQixDQUFDLGVBQWUsS0FBSyxVQUFVO2dCQUN4RCxPQUFRLENBQWtCLENBQUMsVUFBVSxLQUFLLFVBQVU7Z0JBQ3BELE9BQVEsQ0FBa0IsQ0FBQyxNQUFNLEtBQUssVUFBVTtnQkFDaEQsT0FBUSxDQUFrQixDQUFDLE1BQU0sS0FBSyxVQUFVLENBQUMsQ0FBQztRQUN0RCxNQUFNLGVBQWUsR0FDbkIsS0FBSztZQUNMLENBQUMsT0FBUSxDQUFtQixDQUFDLE1BQU0sS0FBSyxVQUFVO2dCQUNoRCxPQUFRLENBQW1CLENBQUMsT0FBTyxLQUFLLFVBQVU7Z0JBQ2xELE9BQVEsQ0FBbUIsQ0FBQyxRQUFRLEtBQUssVUFBVSxDQUFDLENBQUM7UUFFekQsZ0VBQWdFO1FBQ2hFLElBQUksY0FBYztZQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQWlCLENBQUMsQ0FBQztRQUMvRCxJQUFJLGVBQWU7WUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFrQixDQUFDLENBQUM7UUFFbEUsc0NBQXNDO1FBQ3RDLElBQUksQ0FBQyxjQUFjLElBQUksQ0FBQyxlQUFlLElBQUksS0FBSyxFQUFFLENBQUM7WUFDakQsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBa0IsQ0FBQyxDQUFDO1FBQy9DLENBQUM7UUFFRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxvREFBb0Q7SUFDcEQsTUFBTSxDQUFDLE1BQXVCO1FBQzVCLElBQUksQ0FBQyxlQUFlLEdBQUcsTUFBTSxDQUFDO1FBQzlCLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELG9FQUFvRTtJQUNwRSxLQUFLLENBQUMsR0FBRyxDQUFDLE9BQW9CO1FBQzVCLE1BQU0sUUFBUSxHQUFHLElBQUksd0NBQWlCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRW5ELHlCQUF5QjtRQUN6QixLQUFLLE1BQU0sQ0FBQyxJQUFJLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUNwQyxRQUFRLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbEMsQ0FBQztRQUVELGlEQUFpRDtRQUNqRCxLQUFLLE1BQU0sQ0FBQyxJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUNuQyxRQUFRLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDakMsQ0FBQztRQUVELGdCQUFnQjtRQUNoQixJQUFJLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUN6QixRQUFRLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQ3BELENBQUM7UUFFRCxNQUFNO1FBQ04sTUFBTSxRQUFRLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRTVCLGVBQWU7UUFDZixNQUFNLFFBQVEsR0FBRyxRQUFRLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDeEMsTUFBTSxNQUFNLEdBQUksSUFBSSxDQUFDLEtBQWEsQ0FBQyxZQUFxRSxDQUFDO1FBQ3pHLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxXQUFXLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUM7UUFFbEYsT0FBTztZQUNMLEtBQUssRUFBRSxRQUFRLENBQUMsV0FBVyxJQUFJLEVBQUU7WUFDakMsTUFBTTtZQUNOLGFBQWEsRUFBRSxRQUFRLENBQUMsYUFBYTtZQUNyQyxTQUFTLEVBQUUsUUFBUSxDQUFDLFNBQVMsSUFBSSxFQUFFO1NBQ3BDLENBQUM7SUFDSixDQUFDO0NBQ0Y7QUE3RUQsZ0NBNkVDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBSdW5Db250ZXh0IC0tIGQzLXN0eWxlIGNoYWluYWJsZSBydW4gY29uZmlndXJhdGlvbi5cbiAqXG4gKiBSZXR1cm5lZCBieSBjaGFydC5yZWNvcmRlcigpIGFuZCBjaGFydC5yZWRhY3QoKS5cbiAqIEFjY3VtdWxhdGVzIHJlY29yZGVycyBhbmQgcmVkYWN0aW9uIHBvbGljeSwgdGhlbiBjcmVhdGVzXG4gKiBhIEZsb3dDaGFydEV4ZWN1dG9yIGludGVybmFsbHkgd2hlbiAucnVuKCkgaXMgY2FsbGVkLlxuICpcbiAqIFRoZSBjaGFydCBpcyBpbW11dGFibGUuIFJ1bkNvbnRleHQgaXMgZXBoZW1lcmFsIHBlci1ydW4gY29uZmlnLlxuICovXG5cbmltcG9ydCB0eXBlIHsgRmxvd0NoYXJ0IH0gZnJvbSAnLi4vYnVpbGRlci90eXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7IEZsb3dSZWNvcmRlciB9IGZyb20gJy4uL2VuZ2luZS9uYXJyYXRpdmUvdHlwZXMuanMnO1xuaW1wb3J0IHR5cGUgeyBSdW5PcHRpb25zIH0gZnJvbSAnLi4vZW5naW5lL3R5cGVzLmpzJztcbmltcG9ydCB0eXBlIHsgUmVkYWN0aW9uUG9saWN5LCBTY29wZVJlY29yZGVyIH0gZnJvbSAnLi4vc2NvcGUvdHlwZXMuanMnO1xuaW1wb3J0IHsgRmxvd0NoYXJ0RXhlY3V0b3IgfSBmcm9tICcuL0Zsb3dDaGFydEV4ZWN1dG9yLmpzJztcblxuLyoqIFJlc3VsdCBmcm9tIFJ1bkNvbnRleHQucnVuKCkg4oCUIG93bnMgc3RhdGUgYW5kIG91dHB1dC4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUnVuUmVzdWx0IHtcbiAgLyoqIFJhdyBzY29wZSBzdGF0ZSBhZnRlciBleGVjdXRpb24uICovXG4gIHN0YXRlOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgLyoqIE1hcHBlZCBvdXRwdXQgdmlhIGNvbnRyYWN0IG1hcHBlciAoaWYgZGVjbGFyZWQpLiAqL1xuICBvdXRwdXQ6IHVua25vd247XG4gIC8qKiBGdWxsIGV4ZWN1dGlvbiB0cmVlIGZvciBkZWJ1Z2dpbmcuICovXG4gIGV4ZWN1dGlvblRyZWU6IHVua25vd247XG4gIC8qKiBDb21taXQgbG9nIGZvciB0aW1lLXRyYXZlbC4gKi9cbiAgY29tbWl0TG9nOiB1bmtub3duW107XG59XG5cbmV4cG9ydCBjbGFzcyBSdW5Db250ZXh0PFRPdXQgPSBhbnksIFRTY29wZSA9IGFueT4ge1xuICBwcml2YXRlIHJlYWRvbmx5IGNoYXJ0OiBGbG93Q2hhcnQ8VE91dCwgVFNjb3BlPjtcbiAgcHJpdmF0ZSByZWFkb25seSBzY29wZVJlY29yZGVyczogU2NvcGVSZWNvcmRlcltdID0gW107XG4gIHByaXZhdGUgcmVhZG9ubHkgZmxvd1JlY29yZGVyczogRmxvd1JlY29yZGVyW10gPSBbXTtcbiAgcHJpdmF0ZSByZWRhY3Rpb25Qb2xpY3k/OiBSZWRhY3Rpb25Qb2xpY3k7XG5cbiAgY29uc3RydWN0b3IoY2hhcnQ6IEZsb3dDaGFydDxUT3V0LCBUU2NvcGU+KSB7XG4gICAgdGhpcy5jaGFydCA9IGNoYXJ0O1xuICB9XG5cbiAgLyoqIEF0dGFjaCBhIHJlY29yZGVyLiBBdXRvLWRldGVjdHMgc2NvcGUgdnMgZmxvdyByZWNvcmRlci4gQ2hhaW5hYmxlLiAqL1xuICByZWNvcmRlcihyOiBTY29wZVJlY29yZGVyIHwgRmxvd1JlY29yZGVyKTogUnVuQ29udGV4dDxUT3V0LCBUU2NvcGU+IHtcbiAgICBjb25zdCBoYXNJZCA9IHR5cGVvZiAociBhcyBhbnkpLmlkID09PSAnc3RyaW5nJztcbiAgICBjb25zdCBpc0Zsb3dSZWNvcmRlciA9XG4gICAgICBoYXNJZCAmJlxuICAgICAgKHR5cGVvZiAociBhcyBGbG93UmVjb3JkZXIpLm9uU3RhZ2VFeGVjdXRlZCA9PT0gJ2Z1bmN0aW9uJyB8fFxuICAgICAgICB0eXBlb2YgKHIgYXMgRmxvd1JlY29yZGVyKS5vbkRlY2lzaW9uID09PSAnZnVuY3Rpb24nIHx8XG4gICAgICAgIHR5cGVvZiAociBhcyBGbG93UmVjb3JkZXIpLm9uRm9yayA9PT0gJ2Z1bmN0aW9uJyB8fFxuICAgICAgICB0eXBlb2YgKHIgYXMgRmxvd1JlY29yZGVyKS5vbk5leHQgPT09ICdmdW5jdGlvbicpO1xuICAgIGNvbnN0IGlzU2NvcGVSZWNvcmRlciA9XG4gICAgICBoYXNJZCAmJlxuICAgICAgKHR5cGVvZiAociBhcyBTY29wZVJlY29yZGVyKS5vblJlYWQgPT09ICdmdW5jdGlvbicgfHxcbiAgICAgICAgdHlwZW9mIChyIGFzIFNjb3BlUmVjb3JkZXIpLm9uV3JpdGUgPT09ICdmdW5jdGlvbicgfHxcbiAgICAgICAgdHlwZW9mIChyIGFzIFNjb3BlUmVjb3JkZXIpLm9uQ29tbWl0ID09PSAnZnVuY3Rpb24nKTtcblxuICAgIC8vIENvbWJpbmVkTmFycmF0aXZlUmVjb3JkZXIgaW1wbGVtZW50cyBCT1RIIOKAlCBhZGQgdG8gYm90aCBsaXN0c1xuICAgIGlmIChpc0Zsb3dSZWNvcmRlcikgdGhpcy5mbG93UmVjb3JkZXJzLnB1c2gociBhcyBGbG93UmVjb3JkZXIpO1xuICAgIGlmIChpc1Njb3BlUmVjb3JkZXIpIHRoaXMuc2NvcGVSZWNvcmRlcnMucHVzaChyIGFzIFNjb3BlUmVjb3JkZXIpO1xuXG4gICAgLy8gUHVyZSBzY29wZSByZWNvcmRlciAobm8gZmxvdyBob29rcylcbiAgICBpZiAoIWlzRmxvd1JlY29yZGVyICYmICFpc1Njb3BlUmVjb3JkZXIgJiYgaGFzSWQpIHtcbiAgICAgIHRoaXMuc2NvcGVSZWNvcmRlcnMucHVzaChyIGFzIFNjb3BlUmVjb3JkZXIpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqIFNldCByZWRhY3Rpb24gcG9saWN5IGZvciB0aGlzIHJ1bi4gQ2hhaW5hYmxlLiAqL1xuICByZWRhY3QocG9saWN5OiBSZWRhY3Rpb25Qb2xpY3kpOiBSdW5Db250ZXh0PFRPdXQsIFRTY29wZT4ge1xuICAgIHRoaXMucmVkYWN0aW9uUG9saWN5ID0gcG9saWN5O1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqIEV4ZWN1dGUgdGhlIGNoYXJ0IHdpdGggYWNjdW11bGF0ZWQgY29uZmlnLiBSZXR1cm5zIFJ1blJlc3VsdC4gKi9cbiAgYXN5bmMgcnVuKG9wdGlvbnM/OiBSdW5PcHRpb25zKTogUHJvbWlzZTxSdW5SZXN1bHQ+IHtcbiAgICBjb25zdCBleGVjdXRvciA9IG5ldyBGbG93Q2hhcnRFeGVjdXRvcih0aGlzLmNoYXJ0KTtcblxuICAgIC8vIEF0dGFjaCBzY29wZSByZWNvcmRlcnNcbiAgICBmb3IgKGNvbnN0IHIgb2YgdGhpcy5zY29wZVJlY29yZGVycykge1xuICAgICAgZXhlY3V0b3IuYXR0YWNoU2NvcGVSZWNvcmRlcihyKTtcbiAgICB9XG5cbiAgICAvLyBBdHRhY2ggZmxvdyByZWNvcmRlcnMgKGF1dG8tZW5hYmxlcyBuYXJyYXRpdmUpXG4gICAgZm9yIChjb25zdCByIG9mIHRoaXMuZmxvd1JlY29yZGVycykge1xuICAgICAgZXhlY3V0b3IuYXR0YWNoRmxvd1JlY29yZGVyKHIpO1xuICAgIH1cblxuICAgIC8vIFNldCByZWRhY3Rpb25cbiAgICBpZiAodGhpcy5yZWRhY3Rpb25Qb2xpY3kpIHtcbiAgICAgIGV4ZWN1dG9yLnNldFJlZGFjdGlvblBvbGljeSh0aGlzLnJlZGFjdGlvblBvbGljeSk7XG4gICAgfVxuXG4gICAgLy8gUnVuXG4gICAgYXdhaXQgZXhlY3V0b3IucnVuKG9wdGlvbnMpO1xuXG4gICAgLy8gQnVpbGQgcmVzdWx0XG4gICAgY29uc3Qgc25hcHNob3QgPSBleGVjdXRvci5nZXRTbmFwc2hvdCgpO1xuICAgIGNvbnN0IG1hcHBlciA9ICh0aGlzLmNoYXJ0IGFzIGFueSkub3V0cHV0TWFwcGVyIGFzICgoczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pID0+IHVua25vd24pIHwgdW5kZWZpbmVkO1xuICAgIGNvbnN0IG91dHB1dCA9IG1hcHBlciA/IG1hcHBlcihzbmFwc2hvdC5zaGFyZWRTdGF0ZSB8fCB7fSkgOiBzbmFwc2hvdC5zaGFyZWRTdGF0ZTtcblxuICAgIHJldHVybiB7XG4gICAgICBzdGF0ZTogc25hcHNob3Quc2hhcmVkU3RhdGUgfHwge30sXG4gICAgICBvdXRwdXQsXG4gICAgICBleGVjdXRpb25UcmVlOiBzbmFwc2hvdC5leGVjdXRpb25UcmVlLFxuICAgICAgY29tbWl0TG9nOiBzbmFwc2hvdC5jb21taXRMb2cgfHwgW10sXG4gICAgfTtcbiAgfVxufVxuIl19
|
|
@@ -135,4 +135,4 @@ function slugify(id) {
|
|
|
135
135
|
.replace(/[^a-z0-9]+/g, '-')
|
|
136
136
|
.replace(/^-|-$/g, '') || 'execute');
|
|
137
137
|
}
|
|
138
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUnVubmFibGVDaGFydC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvcnVubmVyL1J1bm5hYmxlQ2hhcnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7R0FNRzs7O0FBR0gscURBQXdEO0FBS3hELG1EQUE2RDtBQTRDN0QsbUZBQW1GO0FBQ25GLHNEQUFzRDtBQUN0RCxNQUFNLFlBQVksR0FBRyxJQUFJLE9BQU8sRUFBcUIsQ0FBQztBQUN0RCxNQUFNLFFBQVEsR0FBRyxJQUFJLE9BQU8sRUFBaUMsQ0FBQztBQUU5RDs7O0dBR0c7QUFDSCxTQUFnQixZQUFZLENBQWUsS0FBOEI7SUFDdkUsTUFBTSxRQUFRLEdBQUcsS0FBd0MsQ0FBQztJQUUxRCxRQUFRLENBQUMsUUFBUSxHQUFHLFVBQVUsQ0FBMEI7UUFDdEQsT0FBTyxJQUFJLDBCQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzNDLENBQUMsQ0FBQztJQUVGLFFBQVEsQ0FBQyxNQUFNLEdBQUcsVUFBVSxNQUF1QjtRQUNqRCxPQUFPLElBQUksMEJBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDOUMsQ0FBQyxDQUFDO0lBRUYsUUFBUSxDQUFDLEdBQUcsR0FBRyxVQUFVLE9BQW9CO1FBQzNDLE9BQU8sSUFBSSwwQkFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUM1QyxDQUFDLENBQUM7SUFFRixRQUFRLENBQUMsU0FBUyxHQUFHLFVBQVUsT0FBNkI7UUFDMUQsb0VBQW9FO1FBQ3BFLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNiLE1BQU0sTUFBTSxHQUFHLFlBQVksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDdkMsSUFBSSxNQUFNO2dCQUFFLE9BQU8sTUFBTSxDQUFDO1FBQzVCLENBQUM7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O1FBRXBFLE1BQU0sSUFBSSxHQUF1QixFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLENBQUM7UUFFcEUsUUFBUSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDMUIsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDLENBQUM7SUFFRixPQUFPLFFBQVEsQ0FBQztBQUNsQixDQUFDO0FBM0dELG9DQTJHQztBQUVEOzs7O0dBSUc7QUFDSCxTQUFTLGVBQWUsQ0FBQyxFQUFVO0lBQ2pDLE9BQU8sRUFBRSxDQUFDLE9BQU8sQ0FBQyxtQkFBbUIsRUFBRSxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQyxJQUFJLFNBQVMsQ0FBQztBQUNuRixDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsU0FBUyxPQUFPLENBQUMsRUFBVTtJQUN6QixPQUFPLENBQ0wsRUFBRTtTQUNDLFdBQVcsRUFBRTtTQUNiLE9BQU8sQ0FBQyxhQUFhLEVBQUUsR0FBRyxDQUFDO1NBQzNCLE9BQU8sQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLElBQUksU0FBUyxDQUN0QyxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogUnVubmFibGVDaGFydCAtLSBBZGRzIC5yZWNvcmRlcigpLCAucmVkYWN0KCksIC5ydW4oKSwgLnRvT3BlbkFQSSgpLCAudG9NQ1BUb29sKClcbiAqIHRvIGEgRmxvd0NoYXJ0IG9iamVjdC5cbiAqXG4gKiBDYWxsZWQgYnkgRmxvd0NoYXJ0QnVpbGRlci5idWlsZCgpIHRvIGVucmljaCB0aGUgY29tcGlsZWQgY2hhcnQgd2l0aFxuICogZDMtc3R5bGUgY2hhaW5hYmxlIHJ1biBtZXRob2RzIGFuZCBzZWxmLWRlc2NyaWJpbmcgb3V0cHV0cy5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IEZsb3dDaGFydCB9IGZyb20gJy4uL2J1aWxkZXIvdHlwZXMuanMnO1xuaW1wb3J0IHsgbm9ybWFsaXplU2NoZW1hIH0gZnJvbSAnLi4vY29udHJhY3Qvc2NoZW1hLmpzJztcbmltcG9ydCB0eXBlIHsgSnNvblNjaGVtYSB9IGZyb20gJy4uL2NvbnRyYWN0L3R5cGVzLmpzJztcbmltcG9ydCB0eXBlIHsgRmxvd1JlY29yZGVyIH0gZnJvbSAnLi4vZW5naW5lL25hcnJhdGl2ZS90eXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7IFJ1bk9wdGlvbnMsIFN0YWdlTm9kZSB9IGZyb20gJy4uL2VuZ2luZS90eXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7IFJlY29yZGVyLCBSZWRhY3Rpb25Qb2xpY3kgfSBmcm9tICcuLi9zY29wZS90eXBlcy5qcyc7XG5pbXBvcnQgeyB0eXBlIFJ1blJlc3VsdCwgUnVuQ29udGV4dCB9IGZyb20gJy4vUnVuQ29udGV4dC5qcyc7XG5cbi8qKiBPcGVuQVBJIGdlbmVyYXRpb24gb3B0aW9ucy4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ2hhcnRPcGVuQVBJT3B0aW9ucyB7XG4gIHRpdGxlPzogc3RyaW5nO1xuICB2ZXJzaW9uPzogc3RyaW5nO1xuICBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgcGF0aD86IHN0cmluZztcbn1cblxuLyoqIE1DUCB0b29sIGRlc2NyaXB0aW9uIOKAlCBzaGFwZSByZXF1aXJlZCBieSB0aGUgTW9kZWwgQ29udGV4dCBQcm90b2NvbCBzcGVjLiAqL1xuZXhwb3J0IGludGVyZmFjZSBNQ1BUb29sRGVzY3JpcHRpb24ge1xuICBuYW1lOiBzdHJpbmc7XG4gIGRlc2NyaXB0aW9uOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBKU09OIFNjaGVtYSBvYmplY3QgZGVzY3JpYmluZyB0aGUgdG9vbCdzIGlucHV0LlxuICAgKiBBbHdheXMgcHJlc2VudCDigJQgdGhlIE1DUCBzcGVjIHJlcXVpcmVzIGlucHV0U2NoZW1hIGV2ZW4gZm9yIHRvb2xzIHdpdGggbm8gcGFyYW1ldGVycy5cbiAgICogRGVmYXVsdHMgdG8gYHsgdHlwZTogJ29iamVjdCcsIHByb3BlcnRpZXM6IHt9LCBhZGRpdGlvbmFsUHJvcGVydGllczogZmFsc2UgfWAuXG4gICAqL1xuICBpbnB1dFNjaGVtYTogSnNvblNjaGVtYTtcbn1cblxuLyoqXG4gKiBGbG93Q2hhcnQgZW5yaWNoZWQgd2l0aCBkMy1zdHlsZSBydW4gbWV0aG9kcyBhbmQgc2VsZi1kZXNjcmliaW5nIG91dHB1dHMuXG4gKlxuICogRXh0ZW5kcyBidWlsZGVyLkZsb3dDaGFydCAod2hpY2ggYWxyZWFkeSBjYXJyaWVzIGJ1aWxkVGltZVN0cnVjdHVyZSwgZGVzY3JpcHRpb24sXG4gKiBzdGFnZURlc2NyaXB0aW9ucywgaW5wdXRTY2hlbWEsIG91dHB1dFNjaGVtYSwgb3V0cHV0TWFwcGVyKSBhbmQgYWRkcyB0aGUgcnVudGltZVxuICogbWV0aG9kcyBhdHRhY2hlZCBieSBtYWtlUnVubmFibGUoKS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSdW5uYWJsZUZsb3dDaGFydDxUT3V0ID0gYW55LCBUU2NvcGUgPSBhbnk+IGV4dGVuZHMgRmxvd0NoYXJ0PFRPdXQsIFRTY29wZT4ge1xuICAvKiogQXR0YWNoIGEgcmVjb3JkZXIgZm9yIHRoZSBuZXh0IHJ1bi4gUmV0dXJucyBhIGNoYWluYWJsZSBSdW5Db250ZXh0LiAqL1xuICByZWNvcmRlcihyOiBSZWNvcmRlciB8IEZsb3dSZWNvcmRlcik6IFJ1bkNvbnRleHQ8VE91dCwgVFNjb3BlPjtcbiAgLyoqIFNldCByZWRhY3Rpb24gcG9saWN5IGZvciB0aGUgbmV4dCBydW4uIFJldHVybnMgYSBjaGFpbmFibGUgUnVuQ29udGV4dC4gKi9cbiAgcmVkYWN0KHBvbGljeTogUmVkYWN0aW9uUG9saWN5KTogUnVuQ29udGV4dDxUT3V0LCBUU2NvcGU+O1xuICAvKiogRXhlY3V0ZSB0aGUgY2hhcnQgZGlyZWN0bHkgKGJhcmUgcnVuLCBubyByZWNvcmRlcnMpLiAqL1xuICBydW4ob3B0aW9ucz86IFJ1bk9wdGlvbnMpOiBQcm9taXNlPFJ1blJlc3VsdD47XG4gIC8qKiBHZW5lcmF0ZSBPcGVuQVBJIDMuMSBzcGVjIGZyb20gY2hhcnQgbWV0YWRhdGEgKyBjb250cmFjdC4gQ2FjaGVkIGZvciBuby1vcHRpb25zIGNhbGxzLiAqL1xuICB0b09wZW5BUEkob3B0aW9ucz86IENoYXJ0T3BlbkFQSU9wdGlvbnMpOiBvYmplY3Q7XG4gIC8qKiBHZW5lcmF0ZSBNQ1AgdG9vbCBkZXNjcmlwdGlvbiBmcm9tIGNoYXJ0IG1ldGFkYXRhLiBDYWNoZWQuICovXG4gIHRvTUNQVG9vbCgpOiBNQ1BUb29sRGVzY3JpcHRpb247XG4gIC8qKiBHZW5lcmF0ZSBhIE1lcm1haWQgZmxvd2NoYXJ0IGRpYWdyYW0gc3RyaW5nIGZyb20gdGhlIGNoYXJ0J3Mgbm9kZSBncmFwaC4gKi9cbiAgdG9NZXJtYWlkKCk6IHN0cmluZztcbn1cblxuLy8gQ2FjaGUgZm9yIG5vLW9wdGlvbnMgdG9PcGVuQVBJKCkgY2FsbHMgb25seSDigJQgcGFyYW1ldGVyaXplZCBjYWxscyBhcmUgbm90IGNhY2hlZFxuLy8gYmVjYXVzZSBkaWZmZXJlbnQgb3B0aW9ucyBwcm9kdWNlIGRpZmZlcmVudCBvdXRwdXQuXG5jb25zdCBvcGVuQVBJQ2FjaGUgPSBuZXcgV2Vha01hcDxGbG93Q2hhcnQsIG9iamVjdD4oKTtcbmNvbnN0IG1jcENhY2hlID0gbmV3IFdlYWtNYXA8Rmxvd0NoYXJ0LCBNQ1BUb29sRGVzY3JpcHRpb24+KCk7XG5cbi8qKlxuICogRW5yaWNoIGEgRmxvd0NoYXJ0IHdpdGggcnVuICsgZGVzY3JpYmUgbWV0aG9kcy5cbiAqIENhbGxlZCBieSBGbG93Q2hhcnRCdWlsZGVyLmJ1aWxkKCkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtYWtlUnVubmFibGU8VE91dCwgVFNjb3BlPihjaGFydDogRmxvd0NoYXJ0PFRPdXQsIFRTY29wZT4pOiBSdW5uYWJsZUZsb3dDaGFydDxUT3V0LCBUU2NvcGU+IHtcbiAgY29uc3QgcnVubmFibGUgPSBjaGFydCBhcyBSdW5uYWJsZUZsb3dDaGFydDxUT3V0LCBUU2NvcGU+O1xuXG4gIHJ1bm5hYmxlLnJlY29yZGVyID0gZnVuY3Rpb24gKHI6IFJlY29yZGVyIHwgRmxvd1JlY29yZGVyKTogUnVuQ29udGV4dDxUT3V0LCBUU2NvcGU+IHtcbiAgICByZXR1cm4gbmV3IFJ1bkNvbnRleHQoY2hhcnQpLnJlY29yZGVyKHIpO1xuICB9O1xuXG4gIHJ1bm5hYmxlLnJlZGFjdCA9IGZ1bmN0aW9uIChwb2xpY3k6IFJlZGFjdGlvblBvbGljeSk6IFJ1bkNvbnRleHQ8VE91dCwgVFNjb3BlPiB7XG4gICAgcmV0dXJuIG5ldyBSdW5Db250ZXh0KGNoYXJ0KS5yZWRhY3QocG9saWN5KTtcbiAgfTtcblxuICBydW5uYWJsZS5ydW4gPSBmdW5jdGlvbiAob3B0aW9ucz86IFJ1bk9wdGlvbnMpOiBQcm9taXNlPFJ1blJlc3VsdD4ge1xuICAgIHJldHVybiBuZXcgUnVuQ29udGV4dChjaGFydCkucnVuKG9wdGlvbnMpO1xuICB9O1xuXG4gIHJ1bm5hYmxlLnRvT3BlbkFQSSA9IGZ1bmN0aW9uIChvcHRpb25zPzogQ2hhcnRPcGVuQVBJT3B0aW9ucyk6IG9iamVjdCB7XG4gICAgLy8gT25seSBjYWNoZSBuby1vcHRpb25zIGNhbGxzIOKAlCBwYXJhbWV0ZXJpemVkIGNhbGxzIHZhcnkgYnkgb3B0aW9uc1xuICAgIGlmICghb3B0aW9ucykge1xuICAgICAgY29uc3QgY2FjaGVkID0gb3BlbkFQSUNhY2hlLmdldChjaGFydCk7XG4gICAgICBpZiAoY2FjaGVkKSByZXR1cm4gY2FjaGVkO1xuICAgIH1cblxuICAgIGNvbnN0IGJ1aWxkZXJDaGFydCA9IGNoYXJ0IGFzIGFueTtcbiAgICBjb25zdCB0aXRsZSA9IG9wdGlvbnM/LnRpdGxlID8/IGJ1aWxkZXJDaGFydC5kZXNjcmlwdGlvbj8uc3BsaXQoJ1xcbicpWzBdID8/ICdBUEknO1xuICAgIGNvbnN0IHZlcnNpb24gPSBvcHRpb25zPy52ZXJzaW9uID8/ICcxLjAuMCc7XG4gICAgLy8gVXNlIHJvb3QuaWQgKHRoZSBleHBsaWNpdCBtYWNoaW5lLXJlYWRhYmxlIGlkKSBhcyB0aGUgcGF0aCBzZWdtZW50LCBzYW5pdGl6ZWRcbiAgICBjb25zdCByYXdJZCA9IGJ1aWxkZXJDaGFydC5yb290Py5pZCA/PyAnZXhlY3V0ZSc7XG4gICAgY29uc3QgcGF0aCA9IG9wdGlvbnM/LnBhdGggPz8gYC8ke3NsdWdpZnkocmF3SWQpfWA7XG5cbiAgICBjb25zdCBzcGVjOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHtcbiAgICAgIG9wZW5hcGk6ICczLjEuMCcsXG4gICAgICBpbmZvOiB7IHRpdGxlLCB2ZXJzaW9uLCBkZXNjcmlwdGlvbjogb3B0aW9ucz8uZGVzY3JpcHRpb24gPz8gYnVpbGRlckNoYXJ0LmRlc2NyaXB0aW9uIH0sXG4gICAgICBwYXRoczoge1xuICAgICAgICBbcGF0aF06IHtcbiAgICAgICAgICBwb3N0OiB7XG4gICAgICAgICAgICBzdW1tYXJ5OiB0aXRsZSxcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBidWlsZGVyQ2hhcnQuZGVzY3JpcHRpb24sXG4gICAgICAgICAgICAuLi4oYnVpbGRlckNoYXJ0LmlucHV0U2NoZW1hXG4gICAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgICAgcmVxdWVzdEJvZHk6IHtcbiAgICAgICAgICAgICAgICAgICAgY29udGVudDogeyAnYXBwbGljYXRpb24vanNvbic6IHsgc2NoZW1hOiBub3JtYWxpemVTY2hlbWEoYnVpbGRlckNoYXJ0LmlucHV0U2NoZW1hKSB9IH0sXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgOiB7fSksXG4gICAgICAgICAgICByZXNwb25zZXM6IHtcbiAgICAgICAgICAgICAgJzIwMCc6IHtcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogJ1N1Y2Nlc3MnLFxuICAgICAgICAgICAgICAgIC4uLihidWlsZGVyQ2hhcnQub3V0cHV0U2NoZW1hXG4gICAgICAgICAgICAgICAgICA/IHsgY29udGVudDogeyAnYXBwbGljYXRpb24vanNvbic6IHsgc2NoZW1hOiBub3JtYWxpemVTY2hlbWEoYnVpbGRlckNoYXJ0Lm91dHB1dFNjaGVtYSkgfSB9IH1cbiAgICAgICAgICAgICAgICAgIDoge30pLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9O1xuXG4gICAgaWYgKCFvcHRpb25zKSBvcGVuQVBJQ2FjaGUuc2V0KGNoYXJ0LCBzcGVjKTtcbiAgICByZXR1cm4gc3BlYztcbiAgfTtcblxuICBydW5uYWJsZS50b01lcm1haWQgPSBmdW5jdGlvbiAoKTogc3RyaW5nIHtcbiAgICBjb25zdCBsaW5lczogc3RyaW5nW10gPSBbJ2Zsb3djaGFydCBURCddO1xuICAgIGNvbnN0IGlkT2YgPSAoazogc3RyaW5nKSA9PiAoayB8fCAnJykucmVwbGFjZSgvW15hLXpBLVowLTlfXS9nLCAnXycpIHx8ICdfJztcbiAgICBjb25zdCB2aXNpdGVkID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gICAgY29uc3Qgd2FsayA9IChuOiBTdGFnZU5vZGUpID0+IHtcbiAgICAgIGNvbnN0IG5pZCA9IGlkT2Yobi5pZCk7XG4gICAgICBpZiAodmlzaXRlZC5oYXMobmlkKSkgcmV0dXJuO1xuICAgICAgdmlzaXRlZC5hZGQobmlkKTtcbiAgICAgIGxpbmVzLnB1c2goYCR7bmlkfVtcIiR7bi5uYW1lfVwiXWApO1xuICAgICAgZm9yIChjb25zdCBjIG9mIG4uY2hpbGRyZW4gfHwgW10pIHtcbiAgICAgICAgY29uc3QgY2lkID0gaWRPZihjLmlkKTtcbiAgICAgICAgbGluZXMucHVzaChgJHtuaWR9IC0tPiAke2NpZH1gKTtcbiAgICAgICAgd2FsayhjKTtcbiAgICAgIH1cbiAgICAgIGlmIChuLm5leHQpIHtcbiAgICAgICAgY29uc3QgbWlkID0gaWRPZihuLm5leHQuaWQpO1xuICAgICAgICBsaW5lcy5wdXNoKGAke25pZH0gLS0+ICR7bWlkfWApO1xuICAgICAgICB3YWxrKG4ubmV4dCk7XG4gICAgICB9XG4gICAgfTtcbiAgICB3YWxrKGNoYXJ0LnJvb3QpO1xuICAgIHJldHVybiBsaW5lcy5qb2luKCdcXG4nKTtcbiAgfTtcblxuICBydW5uYWJsZS50b01DUFRvb2wgPSBmdW5jdGlvbiAoKTogTUNQVG9vbERlc2NyaXB0aW9uIHtcbiAgICBjb25zdCBjYWNoZWQgPSBtY3BDYWNoZS5nZXQoY2hhcnQpO1xuICAgIGlmIChjYWNoZWQpIHJldHVybiBjYWNoZWQ7XG5cbiAgICBjb25zdCBidWlsZGVyQ2hhcnQgPSBjaGFydCBhcyBhbnk7XG4gICAgLy8gVXNlIHJvb3QuaWQgKGV4cGxpY2l0IG1hY2hpbmUtcmVhZGFibGUgaWQpLCBzYW5pdGl6ZWQgdG8gTUNQIG5hbWUgY2hhcmFjdGVyIGFsbG93bGlzdFxuICAgIGNvbnN0IG5hbWUgPSBzYW5pdGl6ZU1DUE5hbWUoYnVpbGRlckNoYXJ0LnJvb3Q/LmlkID8/ICdleGVjdXRlJyk7XG4gICAgY29uc3QgZGVzY3JpcHRpb24gPSBidWlsZGVyQ2hhcnQuZGVzY3JpcHRpb24gfHwgYEV4ZWN1dGUgdGhlICR7bmFtZX0gZmxvd2NoYXJ0YDtcblxuICAgIC8vIE1DUCBzcGVjIHJlcXVpcmVzIGlucHV0U2NoZW1hIHRvIGFsd2F5cyBiZSBwcmVzZW50LlxuICAgIC8vIFdoZW4gbm8gY29udHJhY3QgaXMgZGVmaW5lZCwgdXNlIHRoZSByZWNvbW1lbmRlZCBuby1wYXJhbWV0ZXIgZm9ybS5cbiAgICBjb25zdCBpbnB1dFNjaGVtYTogSnNvblNjaGVtYSA9IGJ1aWxkZXJDaGFydC5pbnB1dFNjaGVtYVxuICAgICAgPyBub3JtYWxpemVTY2hlbWEoYnVpbGRlckNoYXJ0LmlucHV0U2NoZW1hKVxuICAgICAgOiB7IHR5cGU6ICdvYmplY3QnLCBwcm9wZXJ0aWVzOiB7fSwgYWRkaXRpb25hbFByb3BlcnRpZXM6IGZhbHNlIH07XG5cbiAgICBjb25zdCB0b29sOiBNQ1BUb29sRGVzY3JpcHRpb24gPSB7IG5hbWUsIGRlc2NyaXB0aW9uLCBpbnB1dFNjaGVtYSB9O1xuXG4gICAgbWNwQ2FjaGUuc2V0KGNoYXJ0LCB0b29sKTtcbiAgICByZXR1cm4gdG9vbDtcbiAgfTtcblxuICByZXR1cm4gcnVubmFibGU7XG59XG5cbi8qKlxuICogU2FuaXRpemUgYSBzdHJpbmcgdG8gY29uZm9ybSB0byB0aGUgTUNQIHRvb2wgbmFtZSBjaGFyYWN0ZXIgYWxsb3dsaXN0OlxuICogW0EtWmEtejAtOV9cXC0uXSDigJQgYW55IG90aGVyIGNoYXJhY3RlciBpcyByZXBsYWNlZCB3aXRoIHVuZGVyc2NvcmUuXG4gKiBUcmltcyBsZWFkaW5nL3RyYWlsaW5nIHVuZGVyc2NvcmVzIGludHJvZHVjZWQgYnkgcmVwbGFjZW1lbnQuXG4gKi9cbmZ1bmN0aW9uIHNhbml0aXplTUNQTmFtZShpZDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIGlkLnJlcGxhY2UoL1teQS1aYS16MC05X1xcLS5dL2csICdfJykucmVwbGFjZSgvXl8rfF8rJC9nLCAnJykgfHwgJ2V4ZWN1dGUnO1xufVxuXG4vKipcbiAqIFNsdWdpZnkgYSBzdHJpbmcgZm9yIHVzZSBhcyBhbiBPcGVuQVBJIHBhdGggc2VnbWVudC5cbiAqIExvd2VyY2FzZXMgYW5kIHJlcGxhY2VzIG5vbi1hbHBoYW51bWVyaWMgcnVucyB3aXRoIGh5cGhlbnMuXG4gKi9cbmZ1bmN0aW9uIHNsdWdpZnkoaWQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiAoXG4gICAgaWRcbiAgICAgIC50b0xvd2VyQ2FzZSgpXG4gICAgICAucmVwbGFjZSgvW15hLXowLTldKy9nLCAnLScpXG4gICAgICAucmVwbGFjZSgvXi18LSQvZywgJycpIHx8ICdleGVjdXRlJ1xuICApO1xufVxuIl19
|
|
138
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUnVubmFibGVDaGFydC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvcnVubmVyL1J1bm5hYmxlQ2hhcnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7R0FNRzs7O0FBR0gscURBQXdEO0FBS3hELG1EQUE2RDtBQTRDN0QsbUZBQW1GO0FBQ25GLHNEQUFzRDtBQUN0RCxNQUFNLFlBQVksR0FBRyxJQUFJLE9BQU8sRUFBcUIsQ0FBQztBQUN0RCxNQUFNLFFBQVEsR0FBRyxJQUFJLE9BQU8sRUFBaUMsQ0FBQztBQUU5RDs7O0dBR0c7QUFDSCxTQUFnQixZQUFZLENBQWUsS0FBOEI7SUFDdkUsTUFBTSxRQUFRLEdBQUcsS0FBd0MsQ0FBQztJQUUxRCxRQUFRLENBQUMsUUFBUSxHQUFHLFVBQVUsQ0FBK0I7UUFDM0QsT0FBTyxJQUFJLDBCQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzNDLENBQUMsQ0FBQztJQUVGLFFBQVEsQ0FBQyxNQUFNLEdBQUcsVUFBVSxNQUF1QjtRQUNqRCxPQUFPLElBQUksMEJBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDOUMsQ0FBQyxDQUFDO0lBRUYsUUFBUSxDQUFDLEdBQUcsR0FBRyxVQUFVLE9BQW9CO1FBQzNDLE9BQU8sSUFBSSwwQkFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUM1QyxDQUFDLENBQUM7SUFFRixRQUFRLENBQUMsU0FBUyxHQUFHLFVBQVUsT0FBNkI7UUFDMUQsb0VBQW9FO1FBQ3BFLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNiLE1BQU0sTUFBTSxHQUFHLFlBQVksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDdkMsSUFBSSxNQUFNO2dCQUFFLE9BQU8sTUFBTSxDQUFDO1FBQzVCLENBQUM7UUFFRCxNQUFNLFlBQVksR0FBRyxLQUFZLENBQUM7UUFDbEMsTUFBTSxLQUFLLEdBQUcsT0FBTyxFQUFFLEtBQUssSUFBSSxZQUFZLENBQUMsV0FBVyxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUM7UUFDbEYsTUFBTSxPQUFPLEdBQUcsT0FBTyxFQUFFLE9BQU8sSUFBSSxPQUFPLENBQUM7UUFDNUMsZ0ZBQWdGO1FBQ2hGLE1BQU0sS0FBSyxHQUFHLFlBQVksQ0FBQyxJQUFJLEVBQUUsRUFBRSxJQUFJLFNBQVMsQ0FBQztRQUNqRCxNQUFNLElBQUksR0FBRyxPQUFPLEVBQUUsSUFBSSxJQUFJLElBQUksT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFFbkQsTUFBTSxJQUFJLEdBQTRCO1lBQ3BDLE9BQU8sRUFBRSxPQUFPO1lBQ2hCLElBQUksRUFBRSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE9BQU8sRUFBRSxXQUFXLElBQUksWUFBWSxDQUFDLFdBQVcsRUFBRTtZQUN2RixLQUFLLEVBQUU7Z0JBQ0wsQ0FBQyxJQUFJLENBQUMsRUFBRTtvQkFDTixJQUFJLEVBQUU7d0JBQ0osT0FBTyxFQUFFLEtBQUs7d0JBQ2QsV0FBVyxFQUFFLFlBQVksQ0FBQyxXQUFXO3dCQUNyQyxHQUFHLENBQUMsWUFBWSxDQUFDLFdBQVc7NEJBQzFCLENBQUMsQ0FBQztnQ0FDRSxXQUFXLEVBQUU7b0NBQ1gsT0FBTyxFQUFFLEVBQUUsa0JBQWtCLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBQSwyQkFBZSxFQUFDLFlBQVksQ0FBQyxXQUFXLENBQUMsRUFBRSxFQUFFO2lDQUN2Rjs2QkFDRjs0QkFDSCxDQUFDLENBQUMsRUFBRSxDQUFDO3dCQUNQLFNBQVMsRUFBRTs0QkFDVCxLQUFLLEVBQUU7Z0NBQ0wsV0FBVyxFQUFFLFNBQVM7Z0NBQ3RCLEdBQUcsQ0FBQyxZQUFZLENBQUMsWUFBWTtvQ0FDM0IsQ0FBQyxDQUFDLEVBQUUsT0FBTyxFQUFFLEVBQUUsa0JBQWtCLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBQSwyQkFBZSxFQUFDLFlBQVksQ0FBQyxZQUFZLENBQUMsRUFBRSxFQUFFLEVBQUU7b0NBQzdGLENBQUMsQ0FBQyxFQUFFLENBQUM7NkJBQ1I7eUJBQ0Y7cUJBQ0Y7aUJBQ0Y7YUFDRjtTQUNGLENBQUM7UUFFRixJQUFJLENBQUMsT0FBTztZQUFFLFlBQVksQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQzVDLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQyxDQUFDO0lBRUYsUUFBUSxDQUFDLFNBQVMsR0FBRztRQUNuQixNQUFNLEtBQUssR0FBYSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQ3pDLE1BQU0sSUFBSSxHQUFHLENBQUMsQ0FBUyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLEVBQUUsR0FBRyxDQUFDLElBQUksR0FBRyxDQUFDO1FBQzVFLE1BQU0sT0FBTyxHQUFHLElBQUksR0FBRyxFQUFVLENBQUM7UUFDbEMsTUFBTSxJQUFJLEdBQUcsQ0FBQyxDQUFZLEVBQUUsRUFBRTtZQUM1QixNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ3ZCLElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUM7Z0JBQUUsT0FBTztZQUM3QixPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ2pCLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLEtBQUssQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUM7WUFDbEMsS0FBSyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsUUFBUSxJQUFJLEVBQUUsRUFBRSxDQUFDO2dCQUNqQyxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUN2QixLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxRQUFRLEdBQUcsRUFBRSxDQUFDLENBQUM7Z0JBQ2hDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNWLENBQUM7WUFDRCxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFDWCxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFDNUIsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsUUFBUSxHQUFHLEVBQUUsQ0FBQyxDQUFDO2dCQUNoQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ2YsQ0FBQztRQUNILENBQUMsQ0FBQztRQUNGLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDakIsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzFCLENBQUMsQ0FBQztJQUVGLFFBQVEsQ0FBQyxTQUFTLEdBQUc7UUFDbkIsTUFBTSxNQUFNLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNuQyxJQUFJLE1BQU07WUFBRSxPQUFPLE1BQU0sQ0FBQztRQUUxQixNQUFNLFlBQVksR0FBRyxLQUFZLENBQUM7UUFDbEMsd0ZBQXdGO1FBQ3hGLE1BQU0sSUFBSSxHQUFHLGVBQWUsQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLEVBQUUsSUFBSSxTQUFTLENBQUMsQ0FBQztRQUNqRSxNQUFNLFdBQVcsR0FBRyxZQUFZLENBQUMsV0FBVyxJQUFJLGVBQWUsSUFBSSxZQUFZLENBQUM7UUFFaEYsc0RBQXNEO1FBQ3RELHNFQUFzRTtRQUN0RSxNQUFNLFdBQVcsR0FBZSxZQUFZLENBQUMsV0FBVztZQUN0RCxDQUFDLENBQUMsSUFBQSwyQkFBZSxFQUFDLFlBQVksQ0FBQyxXQUFXLENBQUM7WUFDM0MsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsRUFBRSxFQUFFLG9CQUFvQixFQUFFLEtBQUssRUFBRSxDQUFDO1FBRXBFLE1BQU0sSUFBSSxHQUF1QixFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLENBQUM7UUFFcEUsUUFBUSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDMUIsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDLENBQUM7SUFFRixPQUFPLFFBQVEsQ0FBQztBQUNsQixDQUFDO0FBM0dELG9DQTJHQztBQUVEOzs7O0dBSUc7QUFDSCxTQUFTLGVBQWUsQ0FBQyxFQUFVO0lBQ2pDLE9BQU8sRUFBRSxDQUFDLE9BQU8sQ0FBQyxtQkFBbUIsRUFBRSxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQyxJQUFJLFNBQVMsQ0FBQztBQUNuRixDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsU0FBUyxPQUFPLENBQUMsRUFBVTtJQUN6QixPQUFPLENBQ0wsRUFBRTtTQUNDLFdBQVcsRUFBRTtTQUNiLE9BQU8sQ0FBQyxhQUFhLEVBQUUsR0FBRyxDQUFDO1NBQzNCLE9BQU8sQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLElBQUksU0FBUyxDQUN0QyxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogUnVubmFibGVDaGFydCAtLSBBZGRzIC5yZWNvcmRlcigpLCAucmVkYWN0KCksIC5ydW4oKSwgLnRvT3BlbkFQSSgpLCAudG9NQ1BUb29sKClcbiAqIHRvIGEgRmxvd0NoYXJ0IG9iamVjdC5cbiAqXG4gKiBDYWxsZWQgYnkgRmxvd0NoYXJ0QnVpbGRlci5idWlsZCgpIHRvIGVucmljaCB0aGUgY29tcGlsZWQgY2hhcnQgd2l0aFxuICogZDMtc3R5bGUgY2hhaW5hYmxlIHJ1biBtZXRob2RzIGFuZCBzZWxmLWRlc2NyaWJpbmcgb3V0cHV0cy5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IEZsb3dDaGFydCB9IGZyb20gJy4uL2J1aWxkZXIvdHlwZXMuanMnO1xuaW1wb3J0IHsgbm9ybWFsaXplU2NoZW1hIH0gZnJvbSAnLi4vY29udHJhY3Qvc2NoZW1hLmpzJztcbmltcG9ydCB0eXBlIHsgSnNvblNjaGVtYSB9IGZyb20gJy4uL2NvbnRyYWN0L3R5cGVzLmpzJztcbmltcG9ydCB0eXBlIHsgRmxvd1JlY29yZGVyIH0gZnJvbSAnLi4vZW5naW5lL25hcnJhdGl2ZS90eXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7IFJ1bk9wdGlvbnMsIFN0YWdlTm9kZSB9IGZyb20gJy4uL2VuZ2luZS90eXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7IFJlZGFjdGlvblBvbGljeSwgU2NvcGVSZWNvcmRlciB9IGZyb20gJy4uL3Njb3BlL3R5cGVzLmpzJztcbmltcG9ydCB7IHR5cGUgUnVuUmVzdWx0LCBSdW5Db250ZXh0IH0gZnJvbSAnLi9SdW5Db250ZXh0LmpzJztcblxuLyoqIE9wZW5BUEkgZ2VuZXJhdGlvbiBvcHRpb25zLiAqL1xuZXhwb3J0IGludGVyZmFjZSBDaGFydE9wZW5BUElPcHRpb25zIHtcbiAgdGl0bGU/OiBzdHJpbmc7XG4gIHZlcnNpb24/OiBzdHJpbmc7XG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICBwYXRoPzogc3RyaW5nO1xufVxuXG4vKiogTUNQIHRvb2wgZGVzY3JpcHRpb24g4oCUIHNoYXBlIHJlcXVpcmVkIGJ5IHRoZSBNb2RlbCBDb250ZXh0IFByb3RvY29sIHNwZWMuICovXG5leHBvcnQgaW50ZXJmYWNlIE1DUFRvb2xEZXNjcmlwdGlvbiB7XG4gIG5hbWU6IHN0cmluZztcbiAgZGVzY3JpcHRpb246IHN0cmluZztcbiAgLyoqXG4gICAqIEpTT04gU2NoZW1hIG9iamVjdCBkZXNjcmliaW5nIHRoZSB0b29sJ3MgaW5wdXQuXG4gICAqIEFsd2F5cyBwcmVzZW50IOKAlCB0aGUgTUNQIHNwZWMgcmVxdWlyZXMgaW5wdXRTY2hlbWEgZXZlbiBmb3IgdG9vbHMgd2l0aCBubyBwYXJhbWV0ZXJzLlxuICAgKiBEZWZhdWx0cyB0byBgeyB0eXBlOiAnb2JqZWN0JywgcHJvcGVydGllczoge30sIGFkZGl0aW9uYWxQcm9wZXJ0aWVzOiBmYWxzZSB9YC5cbiAgICovXG4gIGlucHV0U2NoZW1hOiBKc29uU2NoZW1hO1xufVxuXG4vKipcbiAqIEZsb3dDaGFydCBlbnJpY2hlZCB3aXRoIGQzLXN0eWxlIHJ1biBtZXRob2RzIGFuZCBzZWxmLWRlc2NyaWJpbmcgb3V0cHV0cy5cbiAqXG4gKiBFeHRlbmRzIGJ1aWxkZXIuRmxvd0NoYXJ0ICh3aGljaCBhbHJlYWR5IGNhcnJpZXMgYnVpbGRUaW1lU3RydWN0dXJlLCBkZXNjcmlwdGlvbixcbiAqIHN0YWdlRGVzY3JpcHRpb25zLCBpbnB1dFNjaGVtYSwgb3V0cHV0U2NoZW1hLCBvdXRwdXRNYXBwZXIpIGFuZCBhZGRzIHRoZSBydW50aW1lXG4gKiBtZXRob2RzIGF0dGFjaGVkIGJ5IG1ha2VSdW5uYWJsZSgpLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJ1bm5hYmxlRmxvd0NoYXJ0PFRPdXQgPSBhbnksIFRTY29wZSA9IGFueT4gZXh0ZW5kcyBGbG93Q2hhcnQ8VE91dCwgVFNjb3BlPiB7XG4gIC8qKiBBdHRhY2ggYSByZWNvcmRlciBmb3IgdGhlIG5leHQgcnVuLiBSZXR1cm5zIGEgY2hhaW5hYmxlIFJ1bkNvbnRleHQuICovXG4gIHJlY29yZGVyKHI6IFNjb3BlUmVjb3JkZXIgfCBGbG93UmVjb3JkZXIpOiBSdW5Db250ZXh0PFRPdXQsIFRTY29wZT47XG4gIC8qKiBTZXQgcmVkYWN0aW9uIHBvbGljeSBmb3IgdGhlIG5leHQgcnVuLiBSZXR1cm5zIGEgY2hhaW5hYmxlIFJ1bkNvbnRleHQuICovXG4gIHJlZGFjdChwb2xpY3k6IFJlZGFjdGlvblBvbGljeSk6IFJ1bkNvbnRleHQ8VE91dCwgVFNjb3BlPjtcbiAgLyoqIEV4ZWN1dGUgdGhlIGNoYXJ0IGRpcmVjdGx5IChiYXJlIHJ1biwgbm8gcmVjb3JkZXJzKS4gKi9cbiAgcnVuKG9wdGlvbnM/OiBSdW5PcHRpb25zKTogUHJvbWlzZTxSdW5SZXN1bHQ+O1xuICAvKiogR2VuZXJhdGUgT3BlbkFQSSAzLjEgc3BlYyBmcm9tIGNoYXJ0IG1ldGFkYXRhICsgY29udHJhY3QuIENhY2hlZCBmb3Igbm8tb3B0aW9ucyBjYWxscy4gKi9cbiAgdG9PcGVuQVBJKG9wdGlvbnM/OiBDaGFydE9wZW5BUElPcHRpb25zKTogb2JqZWN0O1xuICAvKiogR2VuZXJhdGUgTUNQIHRvb2wgZGVzY3JpcHRpb24gZnJvbSBjaGFydCBtZXRhZGF0YS4gQ2FjaGVkLiAqL1xuICB0b01DUFRvb2woKTogTUNQVG9vbERlc2NyaXB0aW9uO1xuICAvKiogR2VuZXJhdGUgYSBNZXJtYWlkIGZsb3djaGFydCBkaWFncmFtIHN0cmluZyBmcm9tIHRoZSBjaGFydCdzIG5vZGUgZ3JhcGguICovXG4gIHRvTWVybWFpZCgpOiBzdHJpbmc7XG59XG5cbi8vIENhY2hlIGZvciBuby1vcHRpb25zIHRvT3BlbkFQSSgpIGNhbGxzIG9ubHkg4oCUIHBhcmFtZXRlcml6ZWQgY2FsbHMgYXJlIG5vdCBjYWNoZWRcbi8vIGJlY2F1c2UgZGlmZmVyZW50IG9wdGlvbnMgcHJvZHVjZSBkaWZmZXJlbnQgb3V0cHV0LlxuY29uc3Qgb3BlbkFQSUNhY2hlID0gbmV3IFdlYWtNYXA8Rmxvd0NoYXJ0LCBvYmplY3Q+KCk7XG5jb25zdCBtY3BDYWNoZSA9IG5ldyBXZWFrTWFwPEZsb3dDaGFydCwgTUNQVG9vbERlc2NyaXB0aW9uPigpO1xuXG4vKipcbiAqIEVucmljaCBhIEZsb3dDaGFydCB3aXRoIHJ1biArIGRlc2NyaWJlIG1ldGhvZHMuXG4gKiBDYWxsZWQgYnkgRmxvd0NoYXJ0QnVpbGRlci5idWlsZCgpLlxuICovXG5leHBvcnQgZnVuY3Rpb24gbWFrZVJ1bm5hYmxlPFRPdXQsIFRTY29wZT4oY2hhcnQ6IEZsb3dDaGFydDxUT3V0LCBUU2NvcGU+KTogUnVubmFibGVGbG93Q2hhcnQ8VE91dCwgVFNjb3BlPiB7XG4gIGNvbnN0IHJ1bm5hYmxlID0gY2hhcnQgYXMgUnVubmFibGVGbG93Q2hhcnQ8VE91dCwgVFNjb3BlPjtcblxuICBydW5uYWJsZS5yZWNvcmRlciA9IGZ1bmN0aW9uIChyOiBTY29wZVJlY29yZGVyIHwgRmxvd1JlY29yZGVyKTogUnVuQ29udGV4dDxUT3V0LCBUU2NvcGU+IHtcbiAgICByZXR1cm4gbmV3IFJ1bkNvbnRleHQoY2hhcnQpLnJlY29yZGVyKHIpO1xuICB9O1xuXG4gIHJ1bm5hYmxlLnJlZGFjdCA9IGZ1bmN0aW9uIChwb2xpY3k6IFJlZGFjdGlvblBvbGljeSk6IFJ1bkNvbnRleHQ8VE91dCwgVFNjb3BlPiB7XG4gICAgcmV0dXJuIG5ldyBSdW5Db250ZXh0KGNoYXJ0KS5yZWRhY3QocG9saWN5KTtcbiAgfTtcblxuICBydW5uYWJsZS5ydW4gPSBmdW5jdGlvbiAob3B0aW9ucz86IFJ1bk9wdGlvbnMpOiBQcm9taXNlPFJ1blJlc3VsdD4ge1xuICAgIHJldHVybiBuZXcgUnVuQ29udGV4dChjaGFydCkucnVuKG9wdGlvbnMpO1xuICB9O1xuXG4gIHJ1bm5hYmxlLnRvT3BlbkFQSSA9IGZ1bmN0aW9uIChvcHRpb25zPzogQ2hhcnRPcGVuQVBJT3B0aW9ucyk6IG9iamVjdCB7XG4gICAgLy8gT25seSBjYWNoZSBuby1vcHRpb25zIGNhbGxzIOKAlCBwYXJhbWV0ZXJpemVkIGNhbGxzIHZhcnkgYnkgb3B0aW9uc1xuICAgIGlmICghb3B0aW9ucykge1xuICAgICAgY29uc3QgY2FjaGVkID0gb3BlbkFQSUNhY2hlLmdldChjaGFydCk7XG4gICAgICBpZiAoY2FjaGVkKSByZXR1cm4gY2FjaGVkO1xuICAgIH1cblxuICAgIGNvbnN0IGJ1aWxkZXJDaGFydCA9IGNoYXJ0IGFzIGFueTtcbiAgICBjb25zdCB0aXRsZSA9IG9wdGlvbnM/LnRpdGxlID8/IGJ1aWxkZXJDaGFydC5kZXNjcmlwdGlvbj8uc3BsaXQoJ1xcbicpWzBdID8/ICdBUEknO1xuICAgIGNvbnN0IHZlcnNpb24gPSBvcHRpb25zPy52ZXJzaW9uID8/ICcxLjAuMCc7XG4gICAgLy8gVXNlIHJvb3QuaWQgKHRoZSBleHBsaWNpdCBtYWNoaW5lLXJlYWRhYmxlIGlkKSBhcyB0aGUgcGF0aCBzZWdtZW50LCBzYW5pdGl6ZWRcbiAgICBjb25zdCByYXdJZCA9IGJ1aWxkZXJDaGFydC5yb290Py5pZCA/PyAnZXhlY3V0ZSc7XG4gICAgY29uc3QgcGF0aCA9IG9wdGlvbnM/LnBhdGggPz8gYC8ke3NsdWdpZnkocmF3SWQpfWA7XG5cbiAgICBjb25zdCBzcGVjOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHtcbiAgICAgIG9wZW5hcGk6ICczLjEuMCcsXG4gICAgICBpbmZvOiB7IHRpdGxlLCB2ZXJzaW9uLCBkZXNjcmlwdGlvbjogb3B0aW9ucz8uZGVzY3JpcHRpb24gPz8gYnVpbGRlckNoYXJ0LmRlc2NyaXB0aW9uIH0sXG4gICAgICBwYXRoczoge1xuICAgICAgICBbcGF0aF06IHtcbiAgICAgICAgICBwb3N0OiB7XG4gICAgICAgICAgICBzdW1tYXJ5OiB0aXRsZSxcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBidWlsZGVyQ2hhcnQuZGVzY3JpcHRpb24sXG4gICAgICAgICAgICAuLi4oYnVpbGRlckNoYXJ0LmlucHV0U2NoZW1hXG4gICAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgICAgcmVxdWVzdEJvZHk6IHtcbiAgICAgICAgICAgICAgICAgICAgY29udGVudDogeyAnYXBwbGljYXRpb24vanNvbic6IHsgc2NoZW1hOiBub3JtYWxpemVTY2hlbWEoYnVpbGRlckNoYXJ0LmlucHV0U2NoZW1hKSB9IH0sXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgOiB7fSksXG4gICAgICAgICAgICByZXNwb25zZXM6IHtcbiAgICAgICAgICAgICAgJzIwMCc6IHtcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogJ1N1Y2Nlc3MnLFxuICAgICAgICAgICAgICAgIC4uLihidWlsZGVyQ2hhcnQub3V0cHV0U2NoZW1hXG4gICAgICAgICAgICAgICAgICA/IHsgY29udGVudDogeyAnYXBwbGljYXRpb24vanNvbic6IHsgc2NoZW1hOiBub3JtYWxpemVTY2hlbWEoYnVpbGRlckNoYXJ0Lm91dHB1dFNjaGVtYSkgfSB9IH1cbiAgICAgICAgICAgICAgICAgIDoge30pLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9O1xuXG4gICAgaWYgKCFvcHRpb25zKSBvcGVuQVBJQ2FjaGUuc2V0KGNoYXJ0LCBzcGVjKTtcbiAgICByZXR1cm4gc3BlYztcbiAgfTtcblxuICBydW5uYWJsZS50b01lcm1haWQgPSBmdW5jdGlvbiAoKTogc3RyaW5nIHtcbiAgICBjb25zdCBsaW5lczogc3RyaW5nW10gPSBbJ2Zsb3djaGFydCBURCddO1xuICAgIGNvbnN0IGlkT2YgPSAoazogc3RyaW5nKSA9PiAoayB8fCAnJykucmVwbGFjZSgvW15hLXpBLVowLTlfXS9nLCAnXycpIHx8ICdfJztcbiAgICBjb25zdCB2aXNpdGVkID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gICAgY29uc3Qgd2FsayA9IChuOiBTdGFnZU5vZGUpID0+IHtcbiAgICAgIGNvbnN0IG5pZCA9IGlkT2Yobi5pZCk7XG4gICAgICBpZiAodmlzaXRlZC5oYXMobmlkKSkgcmV0dXJuO1xuICAgICAgdmlzaXRlZC5hZGQobmlkKTtcbiAgICAgIGxpbmVzLnB1c2goYCR7bmlkfVtcIiR7bi5uYW1lfVwiXWApO1xuICAgICAgZm9yIChjb25zdCBjIG9mIG4uY2hpbGRyZW4gfHwgW10pIHtcbiAgICAgICAgY29uc3QgY2lkID0gaWRPZihjLmlkKTtcbiAgICAgICAgbGluZXMucHVzaChgJHtuaWR9IC0tPiAke2NpZH1gKTtcbiAgICAgICAgd2FsayhjKTtcbiAgICAgIH1cbiAgICAgIGlmIChuLm5leHQpIHtcbiAgICAgICAgY29uc3QgbWlkID0gaWRPZihuLm5leHQuaWQpO1xuICAgICAgICBsaW5lcy5wdXNoKGAke25pZH0gLS0+ICR7bWlkfWApO1xuICAgICAgICB3YWxrKG4ubmV4dCk7XG4gICAgICB9XG4gICAgfTtcbiAgICB3YWxrKGNoYXJ0LnJvb3QpO1xuICAgIHJldHVybiBsaW5lcy5qb2luKCdcXG4nKTtcbiAgfTtcblxuICBydW5uYWJsZS50b01DUFRvb2wgPSBmdW5jdGlvbiAoKTogTUNQVG9vbERlc2NyaXB0aW9uIHtcbiAgICBjb25zdCBjYWNoZWQgPSBtY3BDYWNoZS5nZXQoY2hhcnQpO1xuICAgIGlmIChjYWNoZWQpIHJldHVybiBjYWNoZWQ7XG5cbiAgICBjb25zdCBidWlsZGVyQ2hhcnQgPSBjaGFydCBhcyBhbnk7XG4gICAgLy8gVXNlIHJvb3QuaWQgKGV4cGxpY2l0IG1hY2hpbmUtcmVhZGFibGUgaWQpLCBzYW5pdGl6ZWQgdG8gTUNQIG5hbWUgY2hhcmFjdGVyIGFsbG93bGlzdFxuICAgIGNvbnN0IG5hbWUgPSBzYW5pdGl6ZU1DUE5hbWUoYnVpbGRlckNoYXJ0LnJvb3Q/LmlkID8/ICdleGVjdXRlJyk7XG4gICAgY29uc3QgZGVzY3JpcHRpb24gPSBidWlsZGVyQ2hhcnQuZGVzY3JpcHRpb24gfHwgYEV4ZWN1dGUgdGhlICR7bmFtZX0gZmxvd2NoYXJ0YDtcblxuICAgIC8vIE1DUCBzcGVjIHJlcXVpcmVzIGlucHV0U2NoZW1hIHRvIGFsd2F5cyBiZSBwcmVzZW50LlxuICAgIC8vIFdoZW4gbm8gY29udHJhY3QgaXMgZGVmaW5lZCwgdXNlIHRoZSByZWNvbW1lbmRlZCBuby1wYXJhbWV0ZXIgZm9ybS5cbiAgICBjb25zdCBpbnB1dFNjaGVtYTogSnNvblNjaGVtYSA9IGJ1aWxkZXJDaGFydC5pbnB1dFNjaGVtYVxuICAgICAgPyBub3JtYWxpemVTY2hlbWEoYnVpbGRlckNoYXJ0LmlucHV0U2NoZW1hKVxuICAgICAgOiB7IHR5cGU6ICdvYmplY3QnLCBwcm9wZXJ0aWVzOiB7fSwgYWRkaXRpb25hbFByb3BlcnRpZXM6IGZhbHNlIH07XG5cbiAgICBjb25zdCB0b29sOiBNQ1BUb29sRGVzY3JpcHRpb24gPSB7IG5hbWUsIGRlc2NyaXB0aW9uLCBpbnB1dFNjaGVtYSB9O1xuXG4gICAgbWNwQ2FjaGUuc2V0KGNoYXJ0LCB0b29sKTtcbiAgICByZXR1cm4gdG9vbDtcbiAgfTtcblxuICByZXR1cm4gcnVubmFibGU7XG59XG5cbi8qKlxuICogU2FuaXRpemUgYSBzdHJpbmcgdG8gY29uZm9ybSB0byB0aGUgTUNQIHRvb2wgbmFtZSBjaGFyYWN0ZXIgYWxsb3dsaXN0OlxuICogW0EtWmEtejAtOV9cXC0uXSDigJQgYW55IG90aGVyIGNoYXJhY3RlciBpcyByZXBsYWNlZCB3aXRoIHVuZGVyc2NvcmUuXG4gKiBUcmltcyBsZWFkaW5nL3RyYWlsaW5nIHVuZGVyc2NvcmVzIGludHJvZHVjZWQgYnkgcmVwbGFjZW1lbnQuXG4gKi9cbmZ1bmN0aW9uIHNhbml0aXplTUNQTmFtZShpZDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIGlkLnJlcGxhY2UoL1teQS1aYS16MC05X1xcLS5dL2csICdfJykucmVwbGFjZSgvXl8rfF8rJC9nLCAnJykgfHwgJ2V4ZWN1dGUnO1xufVxuXG4vKipcbiAqIFNsdWdpZnkgYSBzdHJpbmcgZm9yIHVzZSBhcyBhbiBPcGVuQVBJIHBhdGggc2VnbWVudC5cbiAqIExvd2VyY2FzZXMgYW5kIHJlcGxhY2VzIG5vbi1hbHBoYW51bWVyaWMgcnVucyB3aXRoIGh5cGhlbnMuXG4gKi9cbmZ1bmN0aW9uIHNsdWdpZnkoaWQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiAoXG4gICAgaWRcbiAgICAgIC50b0xvd2VyQ2FzZSgpXG4gICAgICAucmVwbGFjZSgvW15hLXowLTldKy9nLCAnLScpXG4gICAgICAucmVwbGFjZSgvXi18LSQvZywgJycpIHx8ICdleGVjdXRlJ1xuICApO1xufVxuIl19
|
|
@@ -64,7 +64,8 @@ function getSubtreeSnapshot(snapshot, path, allNarrativeEntries) {
|
|
|
64
64
|
return undefined;
|
|
65
65
|
if ((0, detectCircular_js_1.isDevMode)()) {
|
|
66
66
|
console.warn(`[footprint] getSubtreeSnapshot('${normalizedPath}'): subflowResults not populated — ` +
|
|
67
|
-
'sharedState will be undefined.
|
|
67
|
+
'sharedState will be undefined. The subflow may not have completed, ' +
|
|
68
|
+
'or its outputMapper did not write back to the parent scope.');
|
|
68
69
|
}
|
|
69
70
|
return {
|
|
70
71
|
subflowId: lastSegment,
|
|
@@ -130,4 +131,4 @@ function findSubflowInTree(node, subflowId) {
|
|
|
130
131
|
}
|
|
131
132
|
return undefined;
|
|
132
133
|
}
|
|
133
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2V0U3VidHJlZVNuYXBzaG90LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9ydW5uZXIvZ2V0U3VidHJlZVNuYXBzaG90LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBcUJHOzs7QUFJSCxrRUFBdUQ7QUFldkQ7Ozs7Ozs7Ozs7O0dBV0c7QUFDSCxTQUFnQixrQkFBa0IsQ0FDaEMsUUFBeUIsRUFDekIsSUFBWSxFQUNaLG1CQUE4QztJQUU5QyxJQUFJLENBQUMsUUFBUSxJQUFJLENBQUMsSUFBSTtRQUFFLE9BQU8sU0FBUyxDQUFDO0lBRXpDLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNqRSxJQUFJLENBQUMsY0FBYztRQUFFLE9BQU8sU0FBUyxDQUFDO0lBRXRDLE1BQU0sY0FBYyxHQUFHLFFBQVEsQ0FBQyxjQUFjLENBQUM7SUFDL0MsTUFBTSxXQUFXLEdBQUcsY0FBYyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUcsQ0FBQztJQUVyRCw0REFBNEQ7SUFDNUQsNkVBQTZFO0lBQzdFLElBQUksY0FBYyxJQUFJLGNBQWMsQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFDO1FBQ3JELE1BQU0sUUFBUSxHQUFHLGNBQWMsQ0FBQyxjQUFjLENBQTRCLENBQUM7UUFDM0UsTUFBTSxPQUFPLEdBQUcsUUFBUSxDQUFDLFdBQWtELENBQUM7UUFFNUUsT0FBTztZQUNMLFNBQVMsRUFBRSxXQUFXO1lBQ3RCLGFBQWEsRUFDVixPQUFPLEVBQUUsYUFBMEMsSUFBSSxpQkFBaUIsQ0FBQyxRQUFRLENBQUMsYUFBYSxFQUFFLFdBQVcsQ0FBQztZQUNoSCxXQUFXLEVBQUUsT0FBTyxFQUFFLGFBQW9EO1lBQzFFLGdCQUFnQixFQUFFLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxzQkFBc0IsQ0FBQyxtQkFBbUIsRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUztTQUM3RyxDQUFDO0lBQ0osQ0FBQztJQUVELGdFQUFnRTtJQUNoRSxrRUFBa0U7SUFDbEUsMkVBQTJFO0lBQzNFLE1BQU0sU0FBUyxHQUFHLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxhQUFhLEVBQUUsV0FBVyxDQUFDLENBQUM7SUFDekUsSUFBSSxDQUFDLFNBQVM7UUFBRSxPQUFPLFNBQVMsQ0FBQztJQUVqQyxJQUFJLElBQUEsNkJBQVMsR0FBRSxFQUFFLENBQUM7UUFDaEIsT0FBTyxDQUFDLElBQUksQ0FDVixtQ0FBbUMsY0FBYyxxQ0FBcUM7WUFDcEYsNkZBQTZGLENBQ2hHLENBQUM7SUFDSixDQUFDO0lBRUQsT0FBTztRQUNMLFNBQVMsRUFBRSxXQUFXO1FBQ3RCLGFBQWEsRUFBRSxTQUFTO1FBQ3hCLFdBQVcsRUFBRSxTQUFTO1FBQ3RCLGdCQUFnQixFQUFFLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxzQkFBc0IsQ0FBQyxtQkFBbUIsRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUztLQUM3RyxDQUFDO0FBQ0osQ0FBQztBQS9DRCxnREErQ0M7QUFFRDs7Ozs7Ozs7O0dBU0c7QUFDSCxTQUFnQixnQkFBZ0IsQ0FBQyxRQUF5QjtJQUN4RCxJQUFJLENBQUMsUUFBUSxFQUFFLGNBQWM7UUFBRSxPQUFPLEVBQUUsQ0FBQztJQUN6QyxPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0FBQzlDLENBQUM7QUFIRCw0Q0FHQztBQUVEOzs7O0dBSUc7QUFDSCxTQUFTLHNCQUFzQixDQUFDLE9BQWlDLEVBQUUsSUFBWTtJQUM3RSxrRUFBa0U7SUFDbEUsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUcsQ0FBQztJQUN6QyxPQUFPLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtRQUM5QixxRkFBcUY7UUFDckYsSUFBSSxLQUFLLENBQUMsU0FBUyxLQUFLLFNBQVM7WUFBRSxPQUFPLElBQUksQ0FBQztRQUMvQyw2RkFBNkY7UUFDN0YsSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLFNBQVMsSUFBSSxLQUFLLENBQUMsT0FBTyxLQUFLLFNBQVM7WUFBRSxPQUFPLElBQUksQ0FBQztRQUN6RSxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxTQUFTLGlCQUFpQixDQUFDLElBQStCLEVBQUUsU0FBaUI7SUFDM0UsSUFBSSxDQUFDLElBQUk7UUFBRSxPQUFPLFNBQVMsQ0FBQztJQUU1QixJQUFJLElBQUksQ0FBQyxTQUFTLEtBQUssU0FBUztRQUFFLE9BQU8sSUFBSSxDQUFDO0lBRTlDLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ2xCLEtBQUssTUFBTSxLQUFLLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ2xDLE1BQU0sS0FBSyxHQUFHLGlCQUFpQixDQUFDLEtBQUssRUFBRSxTQUFTLENBQUMsQ0FBQztZQUNsRCxJQUFJLEtBQUs7Z0JBQUUsT0FBTyxLQUFLLENBQUM7UUFDMUIsQ0FBQztJQUNILENBQUM7SUFFRCxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNkLE9BQU8saUJBQWlCLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsQ0FBQztJQUNqRCxDQUFDO0lBRUQsT0FBTyxTQUFTLENBQUM7QUFDbkIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogZ2V0U3VidHJlZVNuYXBzaG90IOKAlCBuYXZpZ2F0ZSBhbiBleGVjdXRpb24gc25hcHNob3QgdHJlZSBieSBzdWJmbG93IHBhdGguXG4gKlxuICogR2l2ZW4gYSBSdW50aW1lU25hcHNob3QgYW5kIGEgc2xhc2gtc2VwYXJhdGVkIHBhdGggb2Ygc3ViZmxvdyBJRHMsXG4gKiByZXR1cm5zIHRoZSBzdWJ0cmVlIHJvb3RlZCBhdCB0aGF0IHN1YmZsb3cuIFVzZWZ1bCBmb3IgTExNIGRyaWxsLWRvd246XG4gKiBpbnN0ZWFkIG9mIGR1bXBpbmcgdGhlIGZ1bGwgdHJhY2UsIGZldGNoIG9ubHkgdGhlIHJlbGV2YW50IHN1YnRyZWUuXG4gKlxuICogVXNhZ2U6XG4gKiAgIGNvbnN0IHNuYXBzaG90ID0gZXhlY3V0b3IuZ2V0U25hcHNob3QoKTtcbiAqXG4gKiAgIC8vIFRvcC1sZXZlbCBzdWJmbG93XG4gKiAgIGdldFN1YnRyZWVTbmFwc2hvdChzbmFwc2hvdCwgJ3NmLXBheW1lbnQnKTtcbiAqXG4gKiAgIC8vIE5lc3RlZCBzdWJmbG93IChwYXltZW50IOKGkiB2YWxpZGF0aW9uKVxuICogICBnZXRTdWJ0cmVlU25hcHNob3Qoc25hcHNob3QsICdzZi1wYXltZW50L3NmLXZhbGlkYXRpb24nKTtcbiAqXG4gKiAgIC8vIFJldHVybnMgdW5kZWZpbmVkIGlmIHBhdGggbm90IGZvdW5kXG4gKiAgIGdldFN1YnRyZWVTbmFwc2hvdChzbmFwc2hvdCwgJ25vbmV4aXN0ZW50Jyk7IC8vIHVuZGVmaW5lZFxuICpcbiAqICAgLy8gRGlzY292ZXIgYXZhaWxhYmxlIHBhdGhzXG4gKiAgIGxpc3RTdWJmbG93UGF0aHMoc25hcHNob3QpOyAvLyBbJ3NmLXBheW1lbnQnLCAnc2YtcGF5bWVudC9zZi12YWxpZGF0aW9uJ11cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IENvbWJpbmVkTmFycmF0aXZlRW50cnkgfSBmcm9tICcuLi9lbmdpbmUvbmFycmF0aXZlL25hcnJhdGl2ZVR5cGVzLmpzJztcbmltcG9ydCB0eXBlIHsgU3RhZ2VTbmFwc2hvdCB9IGZyb20gJy4uL21lbW9yeS90eXBlcy5qcyc7XG5pbXBvcnQgeyBpc0Rldk1vZGUgfSBmcm9tICcuLi9zY29wZS9kZXRlY3RDaXJjdWxhci5qcyc7XG5pbXBvcnQgdHlwZSB7IFJ1bnRpbWVTbmFwc2hvdCB9IGZyb20gJy4vRXhlY3V0aW9uUnVudGltZS5qcyc7XG5cbi8qKiBUaGUgcmVzdWx0IG9mIG5hdmlnYXRpbmcgdG8gYSBzdWJ0cmVlIHdpdGhpbiBhIHNuYXBzaG90LiAqL1xuZXhwb3J0IGludGVyZmFjZSBTdWJ0cmVlU25hcHNob3Qge1xuICAvKiogVGhlIHN1YmZsb3cgSUQgdGhhdCB3YXMgbWF0Y2hlZCAobGFzdCBzZWdtZW50IG9mIHRoZSBwYXRoKS4gKi9cbiAgcmVhZG9ubHkgc3ViZmxvd0lkOiBzdHJpbmc7XG4gIC8qKiBUaGUgZXhlY3V0aW9uIHRyZWUgcm9vdGVkIGF0IHRoaXMgc3ViZmxvdy4gKi9cbiAgcmVhZG9ubHkgZXhlY3V0aW9uVHJlZTogU3RhZ2VTbmFwc2hvdDtcbiAgLyoqIFNoYXJlZCBzdGF0ZSBzY29wZWQgdG8gdGhpcyBzdWJmbG93IChmcm9tIHN1YmZsb3dSZXN1bHRzIGlmIGF2YWlsYWJsZSkuICovXG4gIHJlYWRvbmx5IHNoYXJlZFN0YXRlPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIC8qKiBOYXJyYXRpdmUgZW50cmllcyBzY29wZWQgdG8gdGhpcyBzdWJmbG93IChiZXR3ZWVuIGVudHJ5L2V4aXQgZXZlbnRzKS4gKi9cbiAgcmVhZG9ubHkgbmFycmF0aXZlRW50cmllcz86IENvbWJpbmVkTmFycmF0aXZlRW50cnlbXTtcbn1cblxuLyoqXG4gKiBOYXZpZ2F0ZSB0aGUgZXhlY3V0aW9uIHNuYXBzaG90IHRyZWUgYnkgYSBzbGFzaC1zZXBhcmF0ZWQgc3ViZmxvdyBwYXRoLlxuICpcbiAqICoqSW1wbGVtZW50YXRpb24gbm90ZToqKiBmb290cHJpbnRqcydzIFN1YmZsb3dFeGVjdXRvciBzdG9yZXMgbmVzdGVkIHN1YmZsb3dcbiAqIHJlc3VsdHMgd2l0aCBjb21wb3NpdGUgc2xhc2gtc2VwYXJhdGVkIGtleXMgKGUuZy4gXCJzZi1vdXRlci9zZi1pbm5lclwiKSBpblxuICogdGhlIGZsYXQgYHN1YmZsb3dSZXN1bHRzYCBtYXAuIFRoaXMgZnVuY3Rpb24gdXNlcyB0aG9zZSBrZXlzIGZvciBsb29rdXAuXG4gKlxuICogQHBhcmFtIHNuYXBzaG90IOKAlCB0aGUgZnVsbCBSdW50aW1lU25hcHNob3QgZnJvbSBgZXhlY3V0b3IuZ2V0U25hcHNob3QoKWBcbiAqIEBwYXJhbSBwYXRoIOKAlCBzbGFzaC1zZXBhcmF0ZWQgc3ViZmxvdyBJRHMsIGUuZy4gYFwic2YtcGF5bWVudFwiYCBvciBgXCJzZi1wYXltZW50L3NmLXZhbGlkYXRpb25cImBcbiAqIEBwYXJhbSBhbGxOYXJyYXRpdmVFbnRyaWVzIOKAlCBvcHRpb25hbCBmdWxsIG5hcnJhdGl2ZSBlbnRyaWVzIGZyb20gYGV4ZWN1dG9yLmdldE5hcnJhdGl2ZUVudHJpZXMoKWAsIHVzZWQgdG8gZXh0cmFjdCBzY29wZWQgbmFycmF0aXZlIGZvciB0aGUgc3VidHJlZVxuICogQHJldHVybnMgdGhlIG1hdGNoaW5nIFN1YnRyZWVTbmFwc2hvdCwgb3IgYHVuZGVmaW5lZGAgaWYgdGhlIHBhdGggaXMgbm90IGZvdW5kXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRTdWJ0cmVlU25hcHNob3QoXG4gIHNuYXBzaG90OiBSdW50aW1lU25hcHNob3QsXG4gIHBhdGg6IHN0cmluZyxcbiAgYWxsTmFycmF0aXZlRW50cmllcz86IENvbWJpbmVkTmFycmF0aXZlRW50cnlbXSxcbik6IFN1YnRyZWVTbmFwc2hvdCB8IHVuZGVmaW5lZCB7XG4gIGlmICghc25hcHNob3QgfHwgIXBhdGgpIHJldHVybiB1bmRlZmluZWQ7XG5cbiAgY29uc3Qgbm9ybWFsaXplZFBhdGggPSBwYXRoLnNwbGl0KCcvJykuZmlsdGVyKEJvb2xlYW4pLmpvaW4oJy8nKTtcbiAgaWYgKCFub3JtYWxpemVkUGF0aCkgcmV0dXJuIHVuZGVmaW5lZDtcblxuICBjb25zdCBzdWJmbG93UmVzdWx0cyA9IHNuYXBzaG90LnN1YmZsb3dSZXN1bHRzO1xuICBjb25zdCBsYXN0U2VnbWVudCA9IG5vcm1hbGl6ZWRQYXRoLnNwbGl0KCcvJykucG9wKCkhO1xuXG4gIC8vIFN0cmF0ZWd5IDE6IERpcmVjdCBsb29rdXAgaW4gc3ViZmxvd1Jlc3VsdHMgYnkgZnVsbCBwYXRoLlxuICAvLyBTdWJmbG93RXhlY3V0b3Igc3RvcmVzIG5lc3RlZCByZXN1bHRzIHdpdGggY29tcG9zaXRlIHNsYXNoLXNlcGFyYXRlZCBrZXlzLlxuICBpZiAoc3ViZmxvd1Jlc3VsdHMgJiYgc3ViZmxvd1Jlc3VsdHNbbm9ybWFsaXplZFBhdGhdKSB7XG4gICAgY29uc3Qgc2ZSZXN1bHQgPSBzdWJmbG93UmVzdWx0c1tub3JtYWxpemVkUGF0aF0gYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgY29uc3QgdHJlZUN0eCA9IHNmUmVzdWx0LnRyZWVDb250ZXh0IGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgdW5kZWZpbmVkO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHN1YmZsb3dJZDogbGFzdFNlZ21lbnQsXG4gICAgICBleGVjdXRpb25UcmVlOlxuICAgICAgICAodHJlZUN0eD8uc3RhZ2VDb250ZXh0cyBhcyB1bmtub3duIGFzIFN0YWdlU25hcHNob3QpID8/IGZpbmRTdWJmbG93SW5UcmVlKHNuYXBzaG90LmV4ZWN1dGlvblRyZWUsIGxhc3RTZWdtZW50KSxcbiAgICAgIHNoYXJlZFN0YXRlOiB0cmVlQ3R4Py5nbG9iYWxDb250ZXh0IGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgdW5kZWZpbmVkLFxuICAgICAgbmFycmF0aXZlRW50cmllczogYWxsTmFycmF0aXZlRW50cmllcyA/IGV4dHJhY3RTY29wZWROYXJyYXRpdmUoYWxsTmFycmF0aXZlRW50cmllcywgbGFzdFNlZ21lbnQpIDogdW5kZWZpbmVkLFxuICAgIH07XG4gIH1cblxuICAvLyBTdHJhdGVneSAyOiBGaW5kIHRoZSBub2RlIGluIHRoZSBleGVjdXRpb24gdHJlZSBieSBzdWJmbG93SWQuXG4gIC8vIFRoaXMgcGF0aCBsYWNrcyBzaGFyZWRTdGF0ZSAoc3ViZmxvd1Jlc3VsdHMgd2FzIG5vdCBwb3B1bGF0ZWQpLlxuICAvLyBUaGlzIHR5cGljYWxseSBtZWFucyB0aGUgZXhlY3V0b3IgcmFuIHdpdGhvdXQgc3ViZmxvdyByZXN1bHQgZW5yaWNobWVudC5cbiAgY29uc3QgZm91bmROb2RlID0gZmluZFN1YmZsb3dJblRyZWUoc25hcHNob3QuZXhlY3V0aW9uVHJlZSwgbGFzdFNlZ21lbnQpO1xuICBpZiAoIWZvdW5kTm9kZSkgcmV0dXJuIHVuZGVmaW5lZDtcblxuICBpZiAoaXNEZXZNb2RlKCkpIHtcbiAgICBjb25zb2xlLndhcm4oXG4gICAgICBgW2Zvb3RwcmludF0gZ2V0U3VidHJlZVNuYXBzaG90KCcke25vcm1hbGl6ZWRQYXRofScpOiBzdWJmbG93UmVzdWx0cyBub3QgcG9wdWxhdGVkIOKAlCBgICtcbiAgICAgICAgJ3NoYXJlZFN0YXRlIHdpbGwgYmUgdW5kZWZpbmVkLiBEaWQgeW91IGVuYWJsZSBlbnJpY2hTbmFwc2hvdHMgb3IgYXR0YWNoIGFuIEV4dHJhY3RvclJ1bm5lcj8nLFxuICAgICk7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHN1YmZsb3dJZDogbGFzdFNlZ21lbnQsXG4gICAgZXhlY3V0aW9uVHJlZTogZm91bmROb2RlLFxuICAgIHNoYXJlZFN0YXRlOiB1bmRlZmluZWQsXG4gICAgbmFycmF0aXZlRW50cmllczogYWxsTmFycmF0aXZlRW50cmllcyA/IGV4dHJhY3RTY29wZWROYXJyYXRpdmUoYWxsTmFycmF0aXZlRW50cmllcywgbGFzdFNlZ21lbnQpIDogdW5kZWZpbmVkLFxuICB9O1xufVxuXG4vKipcbiAqIExpc3QgYWxsIGF2YWlsYWJsZSBzdWJmbG93IHBhdGhzIGluIGEgc25hcHNob3QuXG4gKlxuICogUmV0dXJucyB0aGUga2V5cyBmcm9tIGBzdWJmbG93UmVzdWx0c2AsIHdoaWNoIGFyZSBzbGFzaC1zZXBhcmF0ZWRcbiAqIHN1YmZsb3cgSUQgcGF0aHMgKGUuZy4gYFtcInNmLXBheW1lbnRcIiwgXCJzZi1vdXRlci9zZi1pbm5lclwiXWApLlxuICogVXNlZnVsIGZvciBkaXNjb3Zlcnkg4oCUIGFuIExMTSBvciBVSSBjYW4gZW51bWVyYXRlIGF2YWlsYWJsZSBkcmlsbC1kb3duIHRhcmdldHMuXG4gKlxuICogQHBhcmFtIHNuYXBzaG90IOKAlCB0aGUgZnVsbCBSdW50aW1lU25hcHNob3QgZnJvbSBgZXhlY3V0b3IuZ2V0U25hcHNob3QoKWBcbiAqIEByZXR1cm5zIGFycmF5IG9mIGF2YWlsYWJsZSBzdWJmbG93IHBhdGhzLCBlbXB0eSBpZiBub25lXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsaXN0U3ViZmxvd1BhdGhzKHNuYXBzaG90OiBSdW50aW1lU25hcHNob3QpOiBzdHJpbmdbXSB7XG4gIGlmICghc25hcHNob3Q/LnN1YmZsb3dSZXN1bHRzKSByZXR1cm4gW107XG4gIHJldHVybiBPYmplY3Qua2V5cyhzbmFwc2hvdC5zdWJmbG93UmVzdWx0cyk7XG59XG5cbi8qKlxuICogRXh0cmFjdCBuYXJyYXRpdmUgZW50cmllcyBzY29wZWQgdG8gYSBzcGVjaWZpYyBzdWJmbG93LlxuICogRmlsdGVycyBieSBlbnRyeS5zdWJmbG93SWQgZmllbGQgKHNldCBieSBDb21iaW5lZE5hcnJhdGl2ZVJlY29yZGVyIGR1cmluZyB0cmF2ZXJzYWwpLlxuICogQWxzbyBpbmNsdWRlcyB0aGUgc3ViZmxvdyBlbnRyeS9leGl0IG1hcmtlciBlbnRyaWVzIHRoZW1zZWx2ZXMuXG4gKi9cbmZ1bmN0aW9uIGV4dHJhY3RTY29wZWROYXJyYXRpdmUoZW50cmllczogQ29tYmluZWROYXJyYXRpdmVFbnRyeVtdLCBwYXRoOiBzdHJpbmcpOiBDb21iaW5lZE5hcnJhdGl2ZUVudHJ5W10ge1xuICAvLyBUaGUgbGFzdCBzZWdtZW50IG9mIHRoZSBwYXRoIGlzIHRoZSBzdWJmbG93SWQgc3RvcmVkIG9uIGVudHJpZXNcbiAgY29uc3Qgc3ViZmxvd0lkID0gcGF0aC5zcGxpdCgnLycpLnBvcCgpITtcbiAgcmV0dXJuIGVudHJpZXMuZmlsdGVyKChlbnRyeSkgPT4ge1xuICAgIC8vIEluY2x1ZGUgZW50cmllcyB3aG9zZSBzdWJmbG93SWQgbWF0Y2hlcyAoZXZlbnRzIGVtaXR0ZWQgd2hpbGUgaW5zaWRlIHRoaXMgc3ViZmxvdylcbiAgICBpZiAoZW50cnkuc3ViZmxvd0lkID09PSBzdWJmbG93SWQpIHJldHVybiB0cnVlO1xuICAgIC8vIEFsc28gaW5jbHVkZSB0aGUgc3ViZmxvdyBlbnRyeS9leGl0IG1hcmtlcnMgKHRoZXkgY2FycnkgdGhlIHBhcmVudCBzdWJmbG93SWQgb3IgdW5kZWZpbmVkKVxuICAgIGlmIChlbnRyeS50eXBlID09PSAnc3ViZmxvdycgJiYgZW50cnkuc3RhZ2VJZCA9PT0gc3ViZmxvd0lkKSByZXR1cm4gdHJ1ZTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH0pO1xufVxuXG4vKipcbiAqIEZpbmQgYSBzdWJmbG93IG5vZGUgaW4gdGhlIGV4ZWN1dGlvbiB0cmVlIGJ5IHNlYXJjaGluZyBmb3IgYSBub2RlXG4gKiB3aG9zZSBzdWJmbG93SWQgbWF0Y2hlcy5cbiAqIFNlYXJjaGVzIGRlcHRoLWZpcnN0IHRocm91Z2ggYG5leHRgIGFuZCBgY2hpbGRyZW5gIGxpbmtzLlxuICovXG5mdW5jdGlvbiBmaW5kU3ViZmxvd0luVHJlZShub2RlOiBTdGFnZVNuYXBzaG90IHwgdW5kZWZpbmVkLCBzdWJmbG93SWQ6IHN0cmluZyk6IFN0YWdlU25hcHNob3QgfCB1bmRlZmluZWQge1xuICBpZiAoIW5vZGUpIHJldHVybiB1bmRlZmluZWQ7XG5cbiAgaWYgKG5vZGUuc3ViZmxvd0lkID09PSBzdWJmbG93SWQpIHJldHVybiBub2RlO1xuXG4gIGlmIChub2RlLmNoaWxkcmVuKSB7XG4gICAgZm9yIChjb25zdCBjaGlsZCBvZiBub2RlLmNoaWxkcmVuKSB7XG4gICAgICBjb25zdCBmb3VuZCA9IGZpbmRTdWJmbG93SW5UcmVlKGNoaWxkLCBzdWJmbG93SWQpO1xuICAgICAgaWYgKGZvdW5kKSByZXR1cm4gZm91bmQ7XG4gICAgfVxuICB9XG5cbiAgaWYgKG5vZGUubmV4dCkge1xuICAgIHJldHVybiBmaW5kU3ViZmxvd0luVHJlZShub2RlLm5leHQsIHN1YmZsb3dJZCk7XG4gIH1cblxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuIl19
|
|
134
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2V0U3VidHJlZVNuYXBzaG90LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9ydW5uZXIvZ2V0U3VidHJlZVNuYXBzaG90LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBcUJHOzs7QUFJSCxrRUFBdUQ7QUFldkQ7Ozs7Ozs7Ozs7O0dBV0c7QUFDSCxTQUFnQixrQkFBa0IsQ0FDaEMsUUFBeUIsRUFDekIsSUFBWSxFQUNaLG1CQUE4QztJQUU5QyxJQUFJLENBQUMsUUFBUSxJQUFJLENBQUMsSUFBSTtRQUFFLE9BQU8sU0FBUyxDQUFDO0lBRXpDLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNqRSxJQUFJLENBQUMsY0FBYztRQUFFLE9BQU8sU0FBUyxDQUFDO0lBRXRDLE1BQU0sY0FBYyxHQUFHLFFBQVEsQ0FBQyxjQUFjLENBQUM7SUFDL0MsTUFBTSxXQUFXLEdBQUcsY0FBYyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUcsQ0FBQztJQUVyRCw0REFBNEQ7SUFDNUQsNkVBQTZFO0lBQzdFLElBQUksY0FBYyxJQUFJLGNBQWMsQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFDO1FBQ3JELE1BQU0sUUFBUSxHQUFHLGNBQWMsQ0FBQyxjQUFjLENBQTRCLENBQUM7UUFDM0UsTUFBTSxPQUFPLEdBQUcsUUFBUSxDQUFDLFdBQWtELENBQUM7UUFFNUUsT0FBTztZQUNMLFNBQVMsRUFBRSxXQUFXO1lBQ3RCLGFBQWEsRUFDVixPQUFPLEVBQUUsYUFBMEMsSUFBSSxpQkFBaUIsQ0FBQyxRQUFRLENBQUMsYUFBYSxFQUFFLFdBQVcsQ0FBQztZQUNoSCxXQUFXLEVBQUUsT0FBTyxFQUFFLGFBQW9EO1lBQzFFLGdCQUFnQixFQUFFLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxzQkFBc0IsQ0FBQyxtQkFBbUIsRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUztTQUM3RyxDQUFDO0lBQ0osQ0FBQztJQUVELGdFQUFnRTtJQUNoRSxrRUFBa0U7SUFDbEUsMkVBQTJFO0lBQzNFLE1BQU0sU0FBUyxHQUFHLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxhQUFhLEVBQUUsV0FBVyxDQUFDLENBQUM7SUFDekUsSUFBSSxDQUFDLFNBQVM7UUFBRSxPQUFPLFNBQVMsQ0FBQztJQUVqQyxJQUFJLElBQUEsNkJBQVMsR0FBRSxFQUFFLENBQUM7UUFDaEIsT0FBTyxDQUFDLElBQUksQ0FDVixtQ0FBbUMsY0FBYyxxQ0FBcUM7WUFDcEYscUVBQXFFO1lBQ3JFLDZEQUE2RCxDQUNoRSxDQUFDO0lBQ0osQ0FBQztJQUVELE9BQU87UUFDTCxTQUFTLEVBQUUsV0FBVztRQUN0QixhQUFhLEVBQUUsU0FBUztRQUN4QixXQUFXLEVBQUUsU0FBUztRQUN0QixnQkFBZ0IsRUFBRSxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsc0JBQXNCLENBQUMsbUJBQW1CLEVBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVM7S0FDN0csQ0FBQztBQUNKLENBQUM7QUFoREQsZ0RBZ0RDO0FBRUQ7Ozs7Ozs7OztHQVNHO0FBQ0gsU0FBZ0IsZ0JBQWdCLENBQUMsUUFBeUI7SUFDeEQsSUFBSSxDQUFDLFFBQVEsRUFBRSxjQUFjO1FBQUUsT0FBTyxFQUFFLENBQUM7SUFDekMsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsQ0FBQztBQUM5QyxDQUFDO0FBSEQsNENBR0M7QUFFRDs7OztHQUlHO0FBQ0gsU0FBUyxzQkFBc0IsQ0FBQyxPQUFpQyxFQUFFLElBQVk7SUFDN0Usa0VBQWtFO0lBQ2xFLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFHLENBQUM7SUFDekMsT0FBTyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7UUFDOUIscUZBQXFGO1FBQ3JGLElBQUksS0FBSyxDQUFDLFNBQVMsS0FBSyxTQUFTO1lBQUUsT0FBTyxJQUFJLENBQUM7UUFDL0MsNkZBQTZGO1FBQzdGLElBQUksS0FBSyxDQUFDLElBQUksS0FBSyxTQUFTLElBQUksS0FBSyxDQUFDLE9BQU8sS0FBSyxTQUFTO1lBQUUsT0FBTyxJQUFJLENBQUM7UUFDekUsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDLENBQUMsQ0FBQztBQUNMLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsU0FBUyxpQkFBaUIsQ0FBQyxJQUErQixFQUFFLFNBQWlCO0lBQzNFLElBQUksQ0FBQyxJQUFJO1FBQUUsT0FBTyxTQUFTLENBQUM7SUFFNUIsSUFBSSxJQUFJLENBQUMsU0FBUyxLQUFLLFNBQVM7UUFBRSxPQUFPLElBQUksQ0FBQztJQUU5QyxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNsQixLQUFLLE1BQU0sS0FBSyxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNsQyxNQUFNLEtBQUssR0FBRyxpQkFBaUIsQ0FBQyxLQUFLLEVBQUUsU0FBUyxDQUFDLENBQUM7WUFDbEQsSUFBSSxLQUFLO2dCQUFFLE9BQU8sS0FBSyxDQUFDO1FBQzFCLENBQUM7SUFDSCxDQUFDO0lBRUQsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDZCxPQUFPLGlCQUFpQixDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDakQsQ0FBQztJQUVELE9BQU8sU0FBUyxDQUFDO0FBQ25CLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIGdldFN1YnRyZWVTbmFwc2hvdCDigJQgbmF2aWdhdGUgYW4gZXhlY3V0aW9uIHNuYXBzaG90IHRyZWUgYnkgc3ViZmxvdyBwYXRoLlxuICpcbiAqIEdpdmVuIGEgUnVudGltZVNuYXBzaG90IGFuZCBhIHNsYXNoLXNlcGFyYXRlZCBwYXRoIG9mIHN1YmZsb3cgSURzLFxuICogcmV0dXJucyB0aGUgc3VidHJlZSByb290ZWQgYXQgdGhhdCBzdWJmbG93LiBVc2VmdWwgZm9yIExMTSBkcmlsbC1kb3duOlxuICogaW5zdGVhZCBvZiBkdW1waW5nIHRoZSBmdWxsIHRyYWNlLCBmZXRjaCBvbmx5IHRoZSByZWxldmFudCBzdWJ0cmVlLlxuICpcbiAqIFVzYWdlOlxuICogICBjb25zdCBzbmFwc2hvdCA9IGV4ZWN1dG9yLmdldFNuYXBzaG90KCk7XG4gKlxuICogICAvLyBUb3AtbGV2ZWwgc3ViZmxvd1xuICogICBnZXRTdWJ0cmVlU25hcHNob3Qoc25hcHNob3QsICdzZi1wYXltZW50Jyk7XG4gKlxuICogICAvLyBOZXN0ZWQgc3ViZmxvdyAocGF5bWVudCDihpIgdmFsaWRhdGlvbilcbiAqICAgZ2V0U3VidHJlZVNuYXBzaG90KHNuYXBzaG90LCAnc2YtcGF5bWVudC9zZi12YWxpZGF0aW9uJyk7XG4gKlxuICogICAvLyBSZXR1cm5zIHVuZGVmaW5lZCBpZiBwYXRoIG5vdCBmb3VuZFxuICogICBnZXRTdWJ0cmVlU25hcHNob3Qoc25hcHNob3QsICdub25leGlzdGVudCcpOyAvLyB1bmRlZmluZWRcbiAqXG4gKiAgIC8vIERpc2NvdmVyIGF2YWlsYWJsZSBwYXRoc1xuICogICBsaXN0U3ViZmxvd1BhdGhzKHNuYXBzaG90KTsgLy8gWydzZi1wYXltZW50JywgJ3NmLXBheW1lbnQvc2YtdmFsaWRhdGlvbiddXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBDb21iaW5lZE5hcnJhdGl2ZUVudHJ5IH0gZnJvbSAnLi4vZW5naW5lL25hcnJhdGl2ZS9uYXJyYXRpdmVUeXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7IFN0YWdlU25hcHNob3QgfSBmcm9tICcuLi9tZW1vcnkvdHlwZXMuanMnO1xuaW1wb3J0IHsgaXNEZXZNb2RlIH0gZnJvbSAnLi4vc2NvcGUvZGV0ZWN0Q2lyY3VsYXIuanMnO1xuaW1wb3J0IHR5cGUgeyBSdW50aW1lU25hcHNob3QgfSBmcm9tICcuL0V4ZWN1dGlvblJ1bnRpbWUuanMnO1xuXG4vKiogVGhlIHJlc3VsdCBvZiBuYXZpZ2F0aW5nIHRvIGEgc3VidHJlZSB3aXRoaW4gYSBzbmFwc2hvdC4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3VidHJlZVNuYXBzaG90IHtcbiAgLyoqIFRoZSBzdWJmbG93IElEIHRoYXQgd2FzIG1hdGNoZWQgKGxhc3Qgc2VnbWVudCBvZiB0aGUgcGF0aCkuICovXG4gIHJlYWRvbmx5IHN1YmZsb3dJZDogc3RyaW5nO1xuICAvKiogVGhlIGV4ZWN1dGlvbiB0cmVlIHJvb3RlZCBhdCB0aGlzIHN1YmZsb3cuICovXG4gIHJlYWRvbmx5IGV4ZWN1dGlvblRyZWU6IFN0YWdlU25hcHNob3Q7XG4gIC8qKiBTaGFyZWQgc3RhdGUgc2NvcGVkIHRvIHRoaXMgc3ViZmxvdyAoZnJvbSBzdWJmbG93UmVzdWx0cyBpZiBhdmFpbGFibGUpLiAqL1xuICByZWFkb25seSBzaGFyZWRTdGF0ZT86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAvKiogTmFycmF0aXZlIGVudHJpZXMgc2NvcGVkIHRvIHRoaXMgc3ViZmxvdyAoYmV0d2VlbiBlbnRyeS9leGl0IGV2ZW50cykuICovXG4gIHJlYWRvbmx5IG5hcnJhdGl2ZUVudHJpZXM/OiBDb21iaW5lZE5hcnJhdGl2ZUVudHJ5W107XG59XG5cbi8qKlxuICogTmF2aWdhdGUgdGhlIGV4ZWN1dGlvbiBzbmFwc2hvdCB0cmVlIGJ5IGEgc2xhc2gtc2VwYXJhdGVkIHN1YmZsb3cgcGF0aC5cbiAqXG4gKiAqKkltcGxlbWVudGF0aW9uIG5vdGU6KiogZm9vdHByaW50anMncyBTdWJmbG93RXhlY3V0b3Igc3RvcmVzIG5lc3RlZCBzdWJmbG93XG4gKiByZXN1bHRzIHdpdGggY29tcG9zaXRlIHNsYXNoLXNlcGFyYXRlZCBrZXlzIChlLmcuIFwic2Ytb3V0ZXIvc2YtaW5uZXJcIikgaW5cbiAqIHRoZSBmbGF0IGBzdWJmbG93UmVzdWx0c2AgbWFwLiBUaGlzIGZ1bmN0aW9uIHVzZXMgdGhvc2Uga2V5cyBmb3IgbG9va3VwLlxuICpcbiAqIEBwYXJhbSBzbmFwc2hvdCDigJQgdGhlIGZ1bGwgUnVudGltZVNuYXBzaG90IGZyb20gYGV4ZWN1dG9yLmdldFNuYXBzaG90KClgXG4gKiBAcGFyYW0gcGF0aCDigJQgc2xhc2gtc2VwYXJhdGVkIHN1YmZsb3cgSURzLCBlLmcuIGBcInNmLXBheW1lbnRcImAgb3IgYFwic2YtcGF5bWVudC9zZi12YWxpZGF0aW9uXCJgXG4gKiBAcGFyYW0gYWxsTmFycmF0aXZlRW50cmllcyDigJQgb3B0aW9uYWwgZnVsbCBuYXJyYXRpdmUgZW50cmllcyBmcm9tIGBleGVjdXRvci5nZXROYXJyYXRpdmVFbnRyaWVzKClgLCB1c2VkIHRvIGV4dHJhY3Qgc2NvcGVkIG5hcnJhdGl2ZSBmb3IgdGhlIHN1YnRyZWVcbiAqIEByZXR1cm5zIHRoZSBtYXRjaGluZyBTdWJ0cmVlU25hcHNob3QsIG9yIGB1bmRlZmluZWRgIGlmIHRoZSBwYXRoIGlzIG5vdCBmb3VuZFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0U3VidHJlZVNuYXBzaG90KFxuICBzbmFwc2hvdDogUnVudGltZVNuYXBzaG90LFxuICBwYXRoOiBzdHJpbmcsXG4gIGFsbE5hcnJhdGl2ZUVudHJpZXM/OiBDb21iaW5lZE5hcnJhdGl2ZUVudHJ5W10sXG4pOiBTdWJ0cmVlU25hcHNob3QgfCB1bmRlZmluZWQge1xuICBpZiAoIXNuYXBzaG90IHx8ICFwYXRoKSByZXR1cm4gdW5kZWZpbmVkO1xuXG4gIGNvbnN0IG5vcm1hbGl6ZWRQYXRoID0gcGF0aC5zcGxpdCgnLycpLmZpbHRlcihCb29sZWFuKS5qb2luKCcvJyk7XG4gIGlmICghbm9ybWFsaXplZFBhdGgpIHJldHVybiB1bmRlZmluZWQ7XG5cbiAgY29uc3Qgc3ViZmxvd1Jlc3VsdHMgPSBzbmFwc2hvdC5zdWJmbG93UmVzdWx0cztcbiAgY29uc3QgbGFzdFNlZ21lbnQgPSBub3JtYWxpemVkUGF0aC5zcGxpdCgnLycpLnBvcCgpITtcblxuICAvLyBTdHJhdGVneSAxOiBEaXJlY3QgbG9va3VwIGluIHN1YmZsb3dSZXN1bHRzIGJ5IGZ1bGwgcGF0aC5cbiAgLy8gU3ViZmxvd0V4ZWN1dG9yIHN0b3JlcyBuZXN0ZWQgcmVzdWx0cyB3aXRoIGNvbXBvc2l0ZSBzbGFzaC1zZXBhcmF0ZWQga2V5cy5cbiAgaWYgKHN1YmZsb3dSZXN1bHRzICYmIHN1YmZsb3dSZXN1bHRzW25vcm1hbGl6ZWRQYXRoXSkge1xuICAgIGNvbnN0IHNmUmVzdWx0ID0gc3ViZmxvd1Jlc3VsdHNbbm9ybWFsaXplZFBhdGhdIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgIGNvbnN0IHRyZWVDdHggPSBzZlJlc3VsdC50cmVlQ29udGV4dCBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IHVuZGVmaW5lZDtcblxuICAgIHJldHVybiB7XG4gICAgICBzdWJmbG93SWQ6IGxhc3RTZWdtZW50LFxuICAgICAgZXhlY3V0aW9uVHJlZTpcbiAgICAgICAgKHRyZWVDdHg/LnN0YWdlQ29udGV4dHMgYXMgdW5rbm93biBhcyBTdGFnZVNuYXBzaG90KSA/PyBmaW5kU3ViZmxvd0luVHJlZShzbmFwc2hvdC5leGVjdXRpb25UcmVlLCBsYXN0U2VnbWVudCksXG4gICAgICBzaGFyZWRTdGF0ZTogdHJlZUN0eD8uZ2xvYmFsQ29udGV4dCBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IHVuZGVmaW5lZCxcbiAgICAgIG5hcnJhdGl2ZUVudHJpZXM6IGFsbE5hcnJhdGl2ZUVudHJpZXMgPyBleHRyYWN0U2NvcGVkTmFycmF0aXZlKGFsbE5hcnJhdGl2ZUVudHJpZXMsIGxhc3RTZWdtZW50KSA6IHVuZGVmaW5lZCxcbiAgICB9O1xuICB9XG5cbiAgLy8gU3RyYXRlZ3kgMjogRmluZCB0aGUgbm9kZSBpbiB0aGUgZXhlY3V0aW9uIHRyZWUgYnkgc3ViZmxvd0lkLlxuICAvLyBUaGlzIHBhdGggbGFja3Mgc2hhcmVkU3RhdGUgKHN1YmZsb3dSZXN1bHRzIHdhcyBub3QgcG9wdWxhdGVkKS5cbiAgLy8gVGhpcyB0eXBpY2FsbHkgbWVhbnMgdGhlIGV4ZWN1dG9yIHJhbiB3aXRob3V0IHN1YmZsb3cgcmVzdWx0IGVucmljaG1lbnQuXG4gIGNvbnN0IGZvdW5kTm9kZSA9IGZpbmRTdWJmbG93SW5UcmVlKHNuYXBzaG90LmV4ZWN1dGlvblRyZWUsIGxhc3RTZWdtZW50KTtcbiAgaWYgKCFmb3VuZE5vZGUpIHJldHVybiB1bmRlZmluZWQ7XG5cbiAgaWYgKGlzRGV2TW9kZSgpKSB7XG4gICAgY29uc29sZS53YXJuKFxuICAgICAgYFtmb290cHJpbnRdIGdldFN1YnRyZWVTbmFwc2hvdCgnJHtub3JtYWxpemVkUGF0aH0nKTogc3ViZmxvd1Jlc3VsdHMgbm90IHBvcHVsYXRlZCDigJQgYCArXG4gICAgICAgICdzaGFyZWRTdGF0ZSB3aWxsIGJlIHVuZGVmaW5lZC4gVGhlIHN1YmZsb3cgbWF5IG5vdCBoYXZlIGNvbXBsZXRlZCwgJyArXG4gICAgICAgICdvciBpdHMgb3V0cHV0TWFwcGVyIGRpZCBub3Qgd3JpdGUgYmFjayB0byB0aGUgcGFyZW50IHNjb3BlLicsXG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgc3ViZmxvd0lkOiBsYXN0U2VnbWVudCxcbiAgICBleGVjdXRpb25UcmVlOiBmb3VuZE5vZGUsXG4gICAgc2hhcmVkU3RhdGU6IHVuZGVmaW5lZCxcbiAgICBuYXJyYXRpdmVFbnRyaWVzOiBhbGxOYXJyYXRpdmVFbnRyaWVzID8gZXh0cmFjdFNjb3BlZE5hcnJhdGl2ZShhbGxOYXJyYXRpdmVFbnRyaWVzLCBsYXN0U2VnbWVudCkgOiB1bmRlZmluZWQsXG4gIH07XG59XG5cbi8qKlxuICogTGlzdCBhbGwgYXZhaWxhYmxlIHN1YmZsb3cgcGF0aHMgaW4gYSBzbmFwc2hvdC5cbiAqXG4gKiBSZXR1cm5zIHRoZSBrZXlzIGZyb20gYHN1YmZsb3dSZXN1bHRzYCwgd2hpY2ggYXJlIHNsYXNoLXNlcGFyYXRlZFxuICogc3ViZmxvdyBJRCBwYXRocyAoZS5nLiBgW1wic2YtcGF5bWVudFwiLCBcInNmLW91dGVyL3NmLWlubmVyXCJdYCkuXG4gKiBVc2VmdWwgZm9yIGRpc2NvdmVyeSDigJQgYW4gTExNIG9yIFVJIGNhbiBlbnVtZXJhdGUgYXZhaWxhYmxlIGRyaWxsLWRvd24gdGFyZ2V0cy5cbiAqXG4gKiBAcGFyYW0gc25hcHNob3Qg4oCUIHRoZSBmdWxsIFJ1bnRpbWVTbmFwc2hvdCBmcm9tIGBleGVjdXRvci5nZXRTbmFwc2hvdCgpYFxuICogQHJldHVybnMgYXJyYXkgb2YgYXZhaWxhYmxlIHN1YmZsb3cgcGF0aHMsIGVtcHR5IGlmIG5vbmVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxpc3RTdWJmbG93UGF0aHMoc25hcHNob3Q6IFJ1bnRpbWVTbmFwc2hvdCk6IHN0cmluZ1tdIHtcbiAgaWYgKCFzbmFwc2hvdD8uc3ViZmxvd1Jlc3VsdHMpIHJldHVybiBbXTtcbiAgcmV0dXJuIE9iamVjdC5rZXlzKHNuYXBzaG90LnN1YmZsb3dSZXN1bHRzKTtcbn1cblxuLyoqXG4gKiBFeHRyYWN0IG5hcnJhdGl2ZSBlbnRyaWVzIHNjb3BlZCB0byBhIHNwZWNpZmljIHN1YmZsb3cuXG4gKiBGaWx0ZXJzIGJ5IGVudHJ5LnN1YmZsb3dJZCBmaWVsZCAoc2V0IGJ5IENvbWJpbmVkTmFycmF0aXZlUmVjb3JkZXIgZHVyaW5nIHRyYXZlcnNhbCkuXG4gKiBBbHNvIGluY2x1ZGVzIHRoZSBzdWJmbG93IGVudHJ5L2V4aXQgbWFya2VyIGVudHJpZXMgdGhlbXNlbHZlcy5cbiAqL1xuZnVuY3Rpb24gZXh0cmFjdFNjb3BlZE5hcnJhdGl2ZShlbnRyaWVzOiBDb21iaW5lZE5hcnJhdGl2ZUVudHJ5W10sIHBhdGg6IHN0cmluZyk6IENvbWJpbmVkTmFycmF0aXZlRW50cnlbXSB7XG4gIC8vIFRoZSBsYXN0IHNlZ21lbnQgb2YgdGhlIHBhdGggaXMgdGhlIHN1YmZsb3dJZCBzdG9yZWQgb24gZW50cmllc1xuICBjb25zdCBzdWJmbG93SWQgPSBwYXRoLnNwbGl0KCcvJykucG9wKCkhO1xuICByZXR1cm4gZW50cmllcy5maWx0ZXIoKGVudHJ5KSA9PiB7XG4gICAgLy8gSW5jbHVkZSBlbnRyaWVzIHdob3NlIHN1YmZsb3dJZCBtYXRjaGVzIChldmVudHMgZW1pdHRlZCB3aGlsZSBpbnNpZGUgdGhpcyBzdWJmbG93KVxuICAgIGlmIChlbnRyeS5zdWJmbG93SWQgPT09IHN1YmZsb3dJZCkgcmV0dXJuIHRydWU7XG4gICAgLy8gQWxzbyBpbmNsdWRlIHRoZSBzdWJmbG93IGVudHJ5L2V4aXQgbWFya2VycyAodGhleSBjYXJyeSB0aGUgcGFyZW50IHN1YmZsb3dJZCBvciB1bmRlZmluZWQpXG4gICAgaWYgKGVudHJ5LnR5cGUgPT09ICdzdWJmbG93JyAmJiBlbnRyeS5zdGFnZUlkID09PSBzdWJmbG93SWQpIHJldHVybiB0cnVlO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfSk7XG59XG5cbi8qKlxuICogRmluZCBhIHN1YmZsb3cgbm9kZSBpbiB0aGUgZXhlY3V0aW9uIHRyZWUgYnkgc2VhcmNoaW5nIGZvciBhIG5vZGVcbiAqIHdob3NlIHN1YmZsb3dJZCBtYXRjaGVzLlxuICogU2VhcmNoZXMgZGVwdGgtZmlyc3QgdGhyb3VnaCBgbmV4dGAgYW5kIGBjaGlsZHJlbmAgbGlua3MuXG4gKi9cbmZ1bmN0aW9uIGZpbmRTdWJmbG93SW5UcmVlKG5vZGU6IFN0YWdlU25hcHNob3QgfCB1bmRlZmluZWQsIHN1YmZsb3dJZDogc3RyaW5nKTogU3RhZ2VTbmFwc2hvdCB8IHVuZGVmaW5lZCB7XG4gIGlmICghbm9kZSkgcmV0dXJuIHVuZGVmaW5lZDtcblxuICBpZiAobm9kZS5zdWJmbG93SWQgPT09IHN1YmZsb3dJZCkgcmV0dXJuIG5vZGU7XG5cbiAgaWYgKG5vZGUuY2hpbGRyZW4pIHtcbiAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIG5vZGUuY2hpbGRyZW4pIHtcbiAgICAgIGNvbnN0IGZvdW5kID0gZmluZFN1YmZsb3dJblRyZWUoY2hpbGQsIHN1YmZsb3dJZCk7XG4gICAgICBpZiAoZm91bmQpIHJldHVybiBmb3VuZDtcbiAgICB9XG4gIH1cblxuICBpZiAobm9kZS5uZXh0KSB7XG4gICAgcmV0dXJuIGZpbmRTdWJmbG93SW5UcmVlKG5vZGUubmV4dCwgc3ViZmxvd0lkKTtcbiAgfVxuXG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG4iXX0=
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* runId — per-`executor.run()` identifier generator.
|
|
4
|
+
*
|
|
5
|
+
* Pattern: monotonic counter + clock-guarded timestamp. One id per
|
|
6
|
+
* call to `executor.run()` (or `executor.resume()`). Stable
|
|
7
|
+
* for the duration of that run; unique across consecutive
|
|
8
|
+
* runs.
|
|
9
|
+
* Role: primitive that solves the "two consecutive runs of the
|
|
10
|
+
* same executor produce identical runtimeStageIds" class of
|
|
11
|
+
* bugs. Recorders that accumulate state across runs detect
|
|
12
|
+
* "new run" via `runId` change and reset transient
|
|
13
|
+
* bookkeeping.
|
|
14
|
+
*
|
|
15
|
+
* Format: `${timestamp}-${counter}`.
|
|
16
|
+
* - `timestamp` is `Date.now()` clamped to a monotonic-clock guard
|
|
17
|
+
* (never decreases — protects against NTP / system-clock
|
|
18
|
+
* adjustments).
|
|
19
|
+
* - `counter` is a process-local incrementing integer, ZERO-PADDED
|
|
20
|
+
* to 10 digits so lexicographic sort matches numeric order
|
|
21
|
+
* (`"...001"` < `"...010"` < `"...100"`). 10 digits = 10 billion
|
|
22
|
+
* runs in a single process — sufficient for any real workload.
|
|
23
|
+
*
|
|
24
|
+
* Lexicographic ordering of `runId` strings matches chronological
|
|
25
|
+
* ordering for runs that are at least 1ms apart, AND for runs that
|
|
26
|
+
* happen within the same millisecond (because the padded counter
|
|
27
|
+
* tie-breaks). The counter NEVER resets — it is process-global.
|
|
28
|
+
*
|
|
29
|
+
* Process-local only. Cross-process correlation uses
|
|
30
|
+
* `getEnv().traceId` (consumer-supplied), not `runId`. Documented
|
|
31
|
+
* in `docs/design/v5-recorder-redesign.md` Section 8.1.
|
|
32
|
+
*/
|
|
33
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
34
|
+
exports._resetRunIdStateForTesting = exports.generateRunId = void 0;
|
|
35
|
+
let _counter = 0;
|
|
36
|
+
let _lastTimestamp = 0;
|
|
37
|
+
/**
|
|
38
|
+
* Generate a fresh runId. Called once per `executor.run()` and once
|
|
39
|
+
* per `executor.resume()`. Pure (deterministic for a given clock +
|
|
40
|
+
* counter state); no side effects beyond advancing the counter and
|
|
41
|
+
* monotonic-clock guard.
|
|
42
|
+
*/
|
|
43
|
+
function generateRunId() {
|
|
44
|
+
// Monotonic-clock guard: if Date.now() ticks backward (NTP slew,
|
|
45
|
+
// VM pause + resume, etc.), pin to the last seen timestamp so
|
|
46
|
+
// sort order never breaks.
|
|
47
|
+
const now = Date.now();
|
|
48
|
+
if (now > _lastTimestamp) {
|
|
49
|
+
_lastTimestamp = now;
|
|
50
|
+
}
|
|
51
|
+
// Counter is process-global, monotonic. Never resets across runs.
|
|
52
|
+
// Even if two runs share the same `_lastTimestamp` value, their
|
|
53
|
+
// counter values differ, so runIds remain unique.
|
|
54
|
+
// Pad to 10 digits so lexicographic sort matches numeric order.
|
|
55
|
+
const counter = (++_counter).toString().padStart(10, '0');
|
|
56
|
+
return `${_lastTimestamp}-${counter}`;
|
|
57
|
+
}
|
|
58
|
+
exports.generateRunId = generateRunId;
|
|
59
|
+
/**
|
|
60
|
+
* Reset the runId state. Test-only. NEVER call from production code —
|
|
61
|
+
* runIds must be process-globally monotonic.
|
|
62
|
+
*
|
|
63
|
+
* @internal
|
|
64
|
+
*/
|
|
65
|
+
function _resetRunIdStateForTesting() {
|
|
66
|
+
_counter = 0;
|
|
67
|
+
_lastTimestamp = 0;
|
|
68
|
+
}
|
|
69
|
+
exports._resetRunIdStateForTesting = _resetRunIdStateForTesting;
|
|
70
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVuSWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3J1bm5lci9ydW5JZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQThCRzs7O0FBRUgsSUFBSSxRQUFRLEdBQUcsQ0FBQyxDQUFDO0FBQ2pCLElBQUksY0FBYyxHQUFHLENBQUMsQ0FBQztBQUV2Qjs7Ozs7R0FLRztBQUNILFNBQWdCLGFBQWE7SUFDM0IsaUVBQWlFO0lBQ2pFLDhEQUE4RDtJQUM5RCwyQkFBMkI7SUFDM0IsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO0lBQ3ZCLElBQUksR0FBRyxHQUFHLGNBQWMsRUFBRSxDQUFDO1FBQ3pCLGNBQWMsR0FBRyxHQUFHLENBQUM7SUFDdkIsQ0FBQztJQUNELGtFQUFrRTtJQUNsRSxnRUFBZ0U7SUFDaEUsa0RBQWtEO0lBQ2xELGdFQUFnRTtJQUNoRSxNQUFNLE9BQU8sR0FBRyxDQUFDLEVBQUUsUUFBUSxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUMxRCxPQUFPLEdBQUcsY0FBYyxJQUFJLE9BQU8sRUFBRSxDQUFDO0FBQ3hDLENBQUM7QUFkRCxzQ0FjQztBQUVEOzs7OztHQUtHO0FBQ0gsU0FBZ0IsMEJBQTBCO0lBQ3hDLFFBQVEsR0FBRyxDQUFDLENBQUM7SUFDYixjQUFjLEdBQUcsQ0FBQyxDQUFDO0FBQ3JCLENBQUM7QUFIRCxnRUFHQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogcnVuSWQg4oCUIHBlci1gZXhlY3V0b3IucnVuKClgIGlkZW50aWZpZXIgZ2VuZXJhdG9yLlxuICpcbiAqIFBhdHRlcm46IG1vbm90b25pYyBjb3VudGVyICsgY2xvY2stZ3VhcmRlZCB0aW1lc3RhbXAuIE9uZSBpZCBwZXJcbiAqICAgICAgICAgIGNhbGwgdG8gYGV4ZWN1dG9yLnJ1bigpYCAob3IgYGV4ZWN1dG9yLnJlc3VtZSgpYCkuIFN0YWJsZVxuICogICAgICAgICAgZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGF0IHJ1bjsgdW5pcXVlIGFjcm9zcyBjb25zZWN1dGl2ZVxuICogICAgICAgICAgcnVucy5cbiAqIFJvbGU6ICAgIHByaW1pdGl2ZSB0aGF0IHNvbHZlcyB0aGUgXCJ0d28gY29uc2VjdXRpdmUgcnVucyBvZiB0aGVcbiAqICAgICAgICAgIHNhbWUgZXhlY3V0b3IgcHJvZHVjZSBpZGVudGljYWwgcnVudGltZVN0YWdlSWRzXCIgY2xhc3Mgb2ZcbiAqICAgICAgICAgIGJ1Z3MuIFJlY29yZGVycyB0aGF0IGFjY3VtdWxhdGUgc3RhdGUgYWNyb3NzIHJ1bnMgZGV0ZWN0XG4gKiAgICAgICAgICBcIm5ldyBydW5cIiB2aWEgYHJ1bklkYCBjaGFuZ2UgYW5kIHJlc2V0IHRyYW5zaWVudFxuICogICAgICAgICAgYm9va2tlZXBpbmcuXG4gKlxuICogRm9ybWF0OiBgJHt0aW1lc3RhbXB9LSR7Y291bnRlcn1gLlxuICogICAtIGB0aW1lc3RhbXBgIGlzIGBEYXRlLm5vdygpYCBjbGFtcGVkIHRvIGEgbW9ub3RvbmljLWNsb2NrIGd1YXJkXG4gKiAgICAgKG5ldmVyIGRlY3JlYXNlcyDigJQgcHJvdGVjdHMgYWdhaW5zdCBOVFAgLyBzeXN0ZW0tY2xvY2tcbiAqICAgICBhZGp1c3RtZW50cykuXG4gKiAgIC0gYGNvdW50ZXJgIGlzIGEgcHJvY2Vzcy1sb2NhbCBpbmNyZW1lbnRpbmcgaW50ZWdlciwgWkVSTy1QQURERURcbiAqICAgICB0byAxMCBkaWdpdHMgc28gbGV4aWNvZ3JhcGhpYyBzb3J0IG1hdGNoZXMgbnVtZXJpYyBvcmRlclxuICogICAgIChgXCIuLi4wMDFcImAgPCBgXCIuLi4wMTBcImAgPCBgXCIuLi4xMDBcImApLiAxMCBkaWdpdHMgPSAxMCBiaWxsaW9uXG4gKiAgICAgcnVucyBpbiBhIHNpbmdsZSBwcm9jZXNzIOKAlCBzdWZmaWNpZW50IGZvciBhbnkgcmVhbCB3b3JrbG9hZC5cbiAqXG4gKiBMZXhpY29ncmFwaGljIG9yZGVyaW5nIG9mIGBydW5JZGAgc3RyaW5ncyBtYXRjaGVzIGNocm9ub2xvZ2ljYWxcbiAqIG9yZGVyaW5nIGZvciBydW5zIHRoYXQgYXJlIGF0IGxlYXN0IDFtcyBhcGFydCwgQU5EIGZvciBydW5zIHRoYXRcbiAqIGhhcHBlbiB3aXRoaW4gdGhlIHNhbWUgbWlsbGlzZWNvbmQgKGJlY2F1c2UgdGhlIHBhZGRlZCBjb3VudGVyXG4gKiB0aWUtYnJlYWtzKS4gVGhlIGNvdW50ZXIgTkVWRVIgcmVzZXRzIOKAlCBpdCBpcyBwcm9jZXNzLWdsb2JhbC5cbiAqXG4gKiBQcm9jZXNzLWxvY2FsIG9ubHkuIENyb3NzLXByb2Nlc3MgY29ycmVsYXRpb24gdXNlc1xuICogYGdldEVudigpLnRyYWNlSWRgIChjb25zdW1lci1zdXBwbGllZCksIG5vdCBgcnVuSWRgLiBEb2N1bWVudGVkXG4gKiBpbiBgZG9jcy9kZXNpZ24vdjUtcmVjb3JkZXItcmVkZXNpZ24ubWRgIFNlY3Rpb24gOC4xLlxuICovXG5cbmxldCBfY291bnRlciA9IDA7XG5sZXQgX2xhc3RUaW1lc3RhbXAgPSAwO1xuXG4vKipcbiAqIEdlbmVyYXRlIGEgZnJlc2ggcnVuSWQuIENhbGxlZCBvbmNlIHBlciBgZXhlY3V0b3IucnVuKClgIGFuZCBvbmNlXG4gKiBwZXIgYGV4ZWN1dG9yLnJlc3VtZSgpYC4gUHVyZSAoZGV0ZXJtaW5pc3RpYyBmb3IgYSBnaXZlbiBjbG9jayArXG4gKiBjb3VudGVyIHN0YXRlKTsgbm8gc2lkZSBlZmZlY3RzIGJleW9uZCBhZHZhbmNpbmcgdGhlIGNvdW50ZXIgYW5kXG4gKiBtb25vdG9uaWMtY2xvY2sgZ3VhcmQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmF0ZVJ1bklkKCk6IHN0cmluZyB7XG4gIC8vIE1vbm90b25pYy1jbG9jayBndWFyZDogaWYgRGF0ZS5ub3coKSB0aWNrcyBiYWNrd2FyZCAoTlRQIHNsZXcsXG4gIC8vIFZNIHBhdXNlICsgcmVzdW1lLCBldGMuKSwgcGluIHRvIHRoZSBsYXN0IHNlZW4gdGltZXN0YW1wIHNvXG4gIC8vIHNvcnQgb3JkZXIgbmV2ZXIgYnJlYWtzLlxuICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICBpZiAobm93ID4gX2xhc3RUaW1lc3RhbXApIHtcbiAgICBfbGFzdFRpbWVzdGFtcCA9IG5vdztcbiAgfVxuICAvLyBDb3VudGVyIGlzIHByb2Nlc3MtZ2xvYmFsLCBtb25vdG9uaWMuIE5ldmVyIHJlc2V0cyBhY3Jvc3MgcnVucy5cbiAgLy8gRXZlbiBpZiB0d28gcnVucyBzaGFyZSB0aGUgc2FtZSBgX2xhc3RUaW1lc3RhbXBgIHZhbHVlLCB0aGVpclxuICAvLyBjb3VudGVyIHZhbHVlcyBkaWZmZXIsIHNvIHJ1bklkcyByZW1haW4gdW5pcXVlLlxuICAvLyBQYWQgdG8gMTAgZGlnaXRzIHNvIGxleGljb2dyYXBoaWMgc29ydCBtYXRjaGVzIG51bWVyaWMgb3JkZXIuXG4gIGNvbnN0IGNvdW50ZXIgPSAoKytfY291bnRlcikudG9TdHJpbmcoKS5wYWRTdGFydCgxMCwgJzAnKTtcbiAgcmV0dXJuIGAke19sYXN0VGltZXN0YW1wfS0ke2NvdW50ZXJ9YDtcbn1cblxuLyoqXG4gKiBSZXNldCB0aGUgcnVuSWQgc3RhdGUuIFRlc3Qtb25seS4gTkVWRVIgY2FsbCBmcm9tIHByb2R1Y3Rpb24gY29kZSDigJRcbiAqIHJ1bklkcyBtdXN0IGJlIHByb2Nlc3MtZ2xvYmFsbHkgbW9ub3RvbmljLlxuICpcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgZnVuY3Rpb24gX3Jlc2V0UnVuSWRTdGF0ZUZvclRlc3RpbmcoKTogdm9pZCB7XG4gIF9jb3VudGVyID0gMDtcbiAgX2xhc3RUaW1lc3RhbXAgPSAwO1xufVxuIl19
|
|
@@ -46,7 +46,7 @@ class ScopeFacade {
|
|
|
46
46
|
this._frozenArgs = (0, readonlyInput_js_1.createFrozenArgs)(readOnlyValues);
|
|
47
47
|
this._executionEnv = Object.freeze({ ...executionEnv });
|
|
48
48
|
this._redactedKeys = new Set();
|
|
49
|
-
// Register as commit observer so
|
|
49
|
+
// Register as commit observer so ScopeRecorder.onCommit fires when StageContext.commit() is called
|
|
50
50
|
this._stageContext.setCommitObserver((mutations) => {
|
|
51
51
|
this._onCommitFired(mutations);
|
|
52
52
|
});
|
|
@@ -99,16 +99,16 @@ class ScopeFacade {
|
|
|
99
99
|
patterns: (this._redactionPolicy?.patterns ?? []).map((p) => p.source),
|
|
100
100
|
};
|
|
101
101
|
}
|
|
102
|
-
// ──
|
|
103
|
-
|
|
102
|
+
// ── ScopeRecorder Management ──────────────────────────────────────────────────
|
|
103
|
+
attachScopeRecorder(recorder) {
|
|
104
104
|
// Replace existing recorder with same ID (idempotent — prevents double-counting)
|
|
105
105
|
this._recorders = this._recorders.filter((r) => r.id !== recorder.id);
|
|
106
106
|
this._recorders.push(recorder);
|
|
107
107
|
}
|
|
108
|
-
|
|
108
|
+
detachScopeRecorder(recorderId) {
|
|
109
109
|
this._recorders = this._recorders.filter((r) => r.id !== recorderId);
|
|
110
110
|
}
|
|
111
|
-
|
|
111
|
+
getScopeRecorders() {
|
|
112
112
|
return [...this._recorders];
|
|
113
113
|
}
|
|
114
114
|
/** @internal */
|
|
@@ -635,4 +635,4 @@ class ScopeFacade {
|
|
|
635
635
|
}
|
|
636
636
|
}
|
|
637
637
|
exports.ScopeFacade = ScopeFacade;
|
|
638
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2NvcGVGYWNhZGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3Njb3BlL1Njb3BlRmFjYWRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7Ozs7Ozs7Ozs7R0FjRzs7O0FBRUgsaURBRzRCO0FBRTVCLHFEQUFzRjtBQUV0RiwyREFBc0U7QUFDdEUsb0VBQW9GO0FBR3BGLE1BQWEsV0FBVztJQUNmLE1BQU0sQ0FBVSxLQUFLLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBRTVEOzs7O09BSUc7SUFDSyxNQUFNLENBQVUsbUJBQW1CLEdBQXNCLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7SUFFekUsYUFBYSxDQUFlO0lBQzVCLFVBQVUsQ0FBUztJQUNWLGVBQWUsQ0FBVztJQUU3QywrRUFBK0U7SUFDOUQsV0FBVyxDQUEwQjtJQUV0RCx5RUFBeUU7SUFDeEQsYUFBYSxDQUF5QjtJQUUvQyxVQUFVLEdBQWUsRUFBRSxDQUFDO0lBQzVCLGFBQWEsQ0FBYztJQUMzQixnQkFBZ0IsQ0FBOEI7SUFDOUMsb0JBQW9CLEdBQTZCLElBQUksR0FBRyxFQUFFLENBQUM7SUFFbkUsWUFBWSxPQUFxQixFQUFFLFNBQWlCLEVBQUUsY0FBd0IsRUFBRSxZQUEyQjtRQUN6RyxJQUFJLENBQUMsYUFBYSxHQUFHLE9BQU8sQ0FBQztRQUM3QixJQUFJLENBQUMsVUFBVSxHQUFHLFNBQVMsQ0FBQztRQUM1QixJQUFJLENBQUMsZUFBZSxHQUFHLGNBQWMsQ0FBQztRQUN0QyxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUEsbUNBQWdCLEVBQUMsY0FBYyxDQUFDLENBQUM7UUFDcEQsSUFBSSxDQUFDLGFBQWEsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsR0FBRyxZQUFZLEVBQUUsQ0FBQyxDQUFDO1FBQ3hELElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxHQUFHLEVBQVUs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Z0JBQ0wsQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQzs7QUFsckJILGtDQW1yQkMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFNjb3BlRmFjYWRlIOKAlCBCYXNlIGNsYXNzIHRoYXQgbGlicmFyeSBjb25zdW1lcnMgZXh0ZW5kIHRvIGNyZWF0ZSBjdXN0b20gc2NvcGUgY2xhc3Nlc1xuICpcbiAqIFdyYXBzIFN0YWdlQ29udGV4dCAoZnJvbSBtZW1vcnkvKSB0byBwcm92aWRlIGEgY29uc3VtZXItZnJpZW5kbHkgQVBJIGZvclxuICogc3RhdGUgYWNjZXNzLCBkZWJ1ZyBsb2dnaW5nLCBtZXRyaWNzLCBhbmQgcmVjb3JkZXIgaG9va3MuXG4gKlxuICogQ29uc3VtZXJzIGV4dGVuZCB0aGlzIGNsYXNzIHRvIGFkZCBkb21haW4tc3BlY2lmaWMgcHJvcGVydGllczpcbiAqXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjbGFzcyBNeVNjb3BlIGV4dGVuZHMgU2NvcGVGYWNhZGUge1xuICogICBnZXQgdXNlck5hbWUoKTogc3RyaW5nIHsgcmV0dXJuIHRoaXMuZ2V0VmFsdWUoJ25hbWUnKSBhcyBzdHJpbmc7IH1cbiAqICAgc2V0IHVzZXJOYW1lKHZhbHVlOiBzdHJpbmcpIHsgdGhpcy5zZXRWYWx1ZSgnbmFtZScsIHZhbHVlKTsgfVxuICogfVxuICogYGBgXG4gKi9cblxuaW1wb3J0IHtcbiAgZGV0YWNoQW5kRm9yZ2V0IGFzIGRldGFjaEFuZEZvcmdldFNwYXduLFxuICBkZXRhY2hBbmRKb2luTGF0ZXIgYXMgZGV0YWNoQW5kSm9pbkxhdGVyU3Bhd24sXG59IGZyb20gJy4uL2RldGFjaC9zcGF3bi5qcyc7XG5pbXBvcnQgdHlwZSB7IEV4ZWN1dGlvbkVudiB9IGZyb20gJy4uL2VuZ2luZS90eXBlcy5qcyc7XG5pbXBvcnQgeyBuYXRpdmVIYXMgYXMgbG9kYXNoSGFzLCBuYXRpdmVTZXQgYXMgbG9kYXNoU2V0IH0gZnJvbSAnLi4vbWVtb3J5L3BhdGhPcHMuanMnO1xuaW1wb3J0IHsgU3RhZ2VDb250ZXh0IH0gZnJvbSAnLi4vbWVtb3J5L1N0YWdlQ29udGV4dC5qcyc7XG5pbXBvcnQgeyBoYXNDaXJjdWxhclJlZmVyZW5jZSwgaXNEZXZNb2RlIH0gZnJvbSAnLi9kZXRlY3RDaXJjdWxhci5qcyc7XG5pbXBvcnQgeyBhc3NlcnROb3RSZWFkb25seSwgY3JlYXRlRnJvemVuQXJncyB9IGZyb20gJy4vcHJvdGVjdGlvbi9yZWFkb25seUlucHV0LmpzJztcbmltcG9ydCB0eXBlIHsgQ29tbWl0RXZlbnQsIFJlY29yZGVyLCBSZWRhY3Rpb25Qb2xpY3ksIFJlZGFjdGlvblJlcG9ydCB9IGZyb20gJy4vdHlwZXMuanMnO1xuXG5leHBvcnQgY2xhc3MgU2NvcGVGYWNhZGUge1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEJSQU5EID0gU3ltYm9sLmZvcignU2NvcGVGYWNhZGVAdjEnKTtcblxuICAvKipcbiAgICogU2hhcmVkIHNlbnRpbmVsIHJldHVybmVkIGJ5IGBfZ2V0U3ViZmxvd1BhdGgoKWAgZm9yIHJvb3QtbGV2ZWwgc3RhZ2VzXG4gICAqIChubyBzdWJmbG93IG5lc3RpbmcpLiBBdm9pZHMgcGVyLWNhbGwgYWxsb2NhdGlvbiBvZiBhIGZyZXNoXG4gICAqIGBPYmplY3QuZnJlZXplKFtdKWAgb24gZXZlcnkgYGVtaXRFdmVudGAgaW4gdGhlIGNvbW1vbiBuby1zdWJmbG93IGNhc2UuXG4gICAqL1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfRU1QVFlfU1VCRkxPV19QQVRIOiByZWFkb25seSBzdHJpbmdbXSA9IE9iamVjdC5mcmVlemUoW10pO1xuXG4gIHByb3RlY3RlZCBfc3RhZ2VDb250ZXh0OiBTdGFnZUNvbnRleHQ7XG4gIHByb3RlY3RlZCBfc3RhZ2VOYW1lOiBzdHJpbmc7XG4gIHByb3RlY3RlZCByZWFkb25seSBfcmVhZE9ubHlWYWx1ZXM/OiB1bmtub3duO1xuXG4gIC8qKiBDYWNoZWQgZGVlcGx5LWZyb3plbiBjb3B5IG9mIHJlYWRPbmx5VmFsdWVzIGZvciBnZXRBcmdzKCkuIENyZWF0ZWQgb25jZS4gKi9cbiAgcHJpdmF0ZSByZWFkb25seSBfZnJvemVuQXJnczogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG5cbiAgLyoqIEV4ZWN1dGlvbiBlbnZpcm9ubWVudCDigJQgcmVhZC1vbmx5LCBpbmhlcml0ZWQgZnJvbSBwYXJlbnQgZXhlY3V0b3IuICovXG4gIHByaXZhdGUgcmVhZG9ubHkgX2V4ZWN1dGlvbkVudjogUmVhZG9ubHk8RXhlY3V0aW9uRW52PjtcblxuICBwcml2YXRlIF9yZWNvcmRlcnM6IFJlY29yZGVyW10gPSBbXTtcbiAgcHJpdmF0ZSBfcmVkYWN0ZWRLZXlzOiBTZXQ8c3RyaW5nPjtcbiAgcHJpdmF0ZSBfcmVkYWN0aW9uUG9saWN5OiBSZWRhY3Rpb25Qb2xpY3kgfCB1bmRlZmluZWQ7XG4gIHByaXZhdGUgX3JlZGFjdGVkRmllbGRzQnlLZXk6IE1hcDxzdHJpbmcsIFNldDxzdHJpbmc+PiA9IG5ldyBNYXAoKTtcblxuICBjb25zdHJ1Y3Rvcihjb250ZXh0OiBTdGFnZUNvbnRleHQsIHN0YWdlTmFtZTogc3RyaW5nLCByZWFkT25seVZhbHVlcz86IHVua25vd24sIGV4ZWN1dGlvbkVudj86IEV4ZWN1dGlvbkVudikge1xuICAgIHRoaXMuX3N0YWdlQ29udGV4dCA9IGNvbnRleHQ7XG4gICAgdGhpcy5fc3RhZ2VOYW1lID0gc3RhZ2VOYW1lO1xuICAgIHRoaXMuX3JlYWRPbmx5VmFsdWVzID0gcmVhZE9ubHlWYWx1ZXM7XG4gICAgdGhpcy5fZnJvemVuQXJncyA9IGNyZWF0ZUZyb3plbkFyZ3MocmVhZE9ubHlWYWx1ZXMpO1xuICAgIHRoaXMuX2V4ZWN1dGlvbkVudiA9IE9iamVjdC5mcmVlemUoeyAuLi5leGVjdXRpb25FbnYgfSk7XG4gICAgdGhpcy5fcmVkYWN0ZWRLZXlzID0gbmV3IFNldDxzdHJpbmc+KCk7XG5cbiAgICAvLyBSZWdpc3RlciBhcyBjb21taXQgb2JzZXJ2ZXIgc28gUmVjb3JkZXIub25Db21taXQgZmlyZXMgd2hlbiBTdGFnZUNvbnRleHQuY29tbWl0KCkgaXMgY2FsbGVkXG4gICAgdGhpcy5fc3RhZ2VDb250ZXh0LnNldENvbW1pdE9ic2VydmVyKChtdXRhdGlvbnMpID0+IHtcbiAgICAgIHRoaXMuX29uQ29tbWl0RmlyZWQobXV0YXRpb25zKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTaGFyZSBhIHJlZGFjdGVkLWtleXMgc2V0IGFjcm9zcyBtdWx0aXBsZSBTY29wZUZhY2FkZSBpbnN0YW5jZXMuXG4gICAqIENhbGwgdGhpcyB0byBtYWtlIHJlZGFjdGlvbiBwZXJzaXN0IGFjcm9zcyBzdGFnZXMgaW4gdGhlIHNhbWUgcGlwZWxpbmUuXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgdXNlU2hhcmVkUmVkYWN0ZWRLZXlzKHNoYXJlZFNldDogU2V0PHN0cmluZz4pOiB2b2lkIHtcbiAgICB0aGlzLl9yZWRhY3RlZEtleXMgPSBzaGFyZWRTZXQ7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgY3VycmVudCByZWRhY3RlZC1rZXlzIHNldCAoZm9yIHNoYXJpbmcgd2l0aCBvdGhlciBzY29wZXMpLlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIGdldFJlZGFjdGVkS2V5cygpOiBTZXQ8c3RyaW5nPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlZGFjdGVkS2V5cztcbiAgfVxuXG4gIC8qKlxuICAgKiBBcHBseSBhIGRlY2xhcmF0aXZlIHJlZGFjdGlvbiBwb2xpY3kuIFRoZSBwb2xpY3kgaXMgYWRkaXRpdmUg4oCUXG4gICAqIGl0IHdvcmtzIGFsb25nc2lkZSBtYW51YWwgYHNldFZhbHVlKC4uLiwgdHJ1ZSlgIGNhbGxzLlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHVzZVJlZGFjdGlvblBvbGljeShwb2xpY3k6IFJlZGFjdGlvblBvbGljeSk6IHZvaWQge1xuICAgIHRoaXMuX3JlZGFjdGlvblBvbGljeSA9IHBvbGljeTtcbiAgICAvLyBQcmUtcG9wdWxhdGUgZmllbGQtbGV2ZWwgcmVkYWN0aW9uIG1hcCBmcm9tIHBvbGljeVxuICAgIGlmIChwb2xpY3kuZmllbGRzKSB7XG4gICAgICBmb3IgKGNvbnN0IFtrZXksIGZpZWxkc10gb2YgT2JqZWN0LmVudHJpZXMocG9saWN5LmZpZWxkcykpIHtcbiAgICAgICAgdGhpcy5fcmVkYWN0ZWRGaWVsZHNCeUtleS5zZXQoa2V5LCBuZXcgU2V0KGZpZWxkcykpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKiBAaW50ZXJuYWwgKi9cbiAgZ2V0UmVkYWN0aW9uUG9saWN5KCk6IFJlZGFjdGlvblBvbGljeSB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX3JlZGFjdGlvblBvbGljeTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgY29tcGxpYW5jZS1mcmllbmRseSByZXBvcnQgb2YgYWxsIHJlZGFjdGlvbiBhY3Rpdml0eS5cbiAgICogTmV2ZXIgaW5jbHVkZXMgYWN0dWFsIHZhbHVlcyDigJQgb25seSBrZXkgbmFtZXMsIGZpZWxkIG5hbWVzLCBhbmQgcGF0dGVybnMuXG4gICAqL1xuICBnZXRSZWRhY3Rpb25SZXBvcnQoKTogUmVkYWN0aW9uUmVwb3J0IHtcbiAgICBjb25zdCBmaWVsZFJlZGFjdGlvbnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZ1tdPiA9IHt9O1xuICAgIGZvciAoY29uc3QgW2tleSwgZmllbGRzXSBvZiB0aGlzLl9yZWRhY3RlZEZpZWxkc0J5S2V5KSB7XG4gICAgICBmaWVsZFJlZGFjdGlvbnNba2V5XSA9IFsuLi5maWVsZHNdO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgcmVkYWN0ZWRLZXlzOiBbLi4udGhpcy5fcmVkYWN0ZWRLZXlzXSxcbiAgICAgIGZpZWxkUmVkYWN0aW9ucyxcbiAgICAgIHBhdHRlcm5zOiAodGhpcy5fcmVkYWN0aW9uUG9saWN5Py5wYXR0ZXJucyA/PyBbXSkubWFwKChwKSA9PiBwLnNvdXJjZSksXG4gICAgfTtcbiAgfVxuXG4gIC8vIOKUgOKUgCBSZWNvcmRlciBNYW5hZ2VtZW50IOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4gIGF0dGFjaFJlY29yZGVyKHJlY29yZGVyOiBSZWNvcmRlcik6IHZvaWQge1xuICAgIC8vIFJlcGxhY2UgZXhpc3RpbmcgcmVjb3JkZXIgd2l0aCBzYW1lIElEIChpZGVtcG90ZW50IOKAlCBwcmV2ZW50cyBkb3VibGUtY291bnRpbmcpXG4gICAgdGhpcy5fcmVjb3JkZXJzID0gdGhpcy5fcmVjb3JkZXJzLmZpbHRlcigocikgPT4gci5pZCAhPT0gcmVjb3JkZXIuaWQpO1xuICAgIHRoaXMuX3JlY29yZGVycy5wdXNoKHJlY29yZGVyKTtcbiAgfVxuXG4gIGRldGFjaFJlY29yZGVyKHJlY29yZGVySWQ6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuX3JlY29yZGVycyA9IHRoaXMuX3JlY29yZGVycy5maWx0ZXIoKHIpID0+IHIuaWQgIT09IHJlY29yZGVySWQpO1xuICB9XG5cbiAgZ2V0UmVjb3JkZXJzKCk6IFJlY29yZGVyW10ge1xuICAgIHJldHVybiBbLi4udGhpcy5fcmVjb3JkZXJzXTtcbiAgfVxuXG4gIC8qKiBAaW50ZXJuYWwgKi9cbiAgbm90aWZ5U3RhZ2VTdGFydCgpOiB2b2lkIHtcbiAgICB0aGlzLl9pbnZva2VIb29rKCdvblN0YWdlU3RhcnQnLCB7XG4gICAgICBzdGFnZU5hbWU6IHRoaXMuX3N0YWdlTmFtZSxcbiAgICAgIHN0YWdlSWQ6IHRoaXMuX3N0YWdlQ29udGV4dC5zdGFnZUlkLFxuICAgICAgcnVudGltZVN0YWdlSWQ6IHRoaXMuX3N0YWdlQ29udGV4dC5ydW50aW1lU3RhZ2VJZCxcbiAgICAgIHBpcGVsaW5lSWQ6IHRoaXMuX3N0YWdlQ29udGV4dC5ydW5JZCxcbiAgICAgIHRpbWVzdGFtcDogRGF0ZS5ub3coKSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKiBAaW50ZXJuYWwgKi9cbiAgbm90aWZ5U3RhZ2VFbmQoZHVyYXRpb24/OiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLl9pbnZva2VIb29rKCdvblN0YWdlRW5kJywge1xuICAgICAgc3RhZ2VOYW1lOiB0aGlzLl9zdGFnZU5hbWUsXG4gICAgICBzdGFnZUlkOiB0aGlzLl9zdGFnZUNvbnRleHQuc3RhZ2VJZCxcbiAgICAgIHJ1bnRpbWVTdGFnZUlkOiB0aGlzLl9zdGFnZUNvbnRleHQucnVudGltZVN0YWdlSWQsXG4gICAgICBwaXBlbGluZUlkOiB0aGlzLl9zdGFnZUNvbnRleHQucnVuSWQsXG4gICAgICB0aW1lc3RhbXA6IERhdGUubm93KCksXG4gICAgICBkdXJhdGlvbixcbiAgICB9KTtcbiAgfVxuXG4gIC8qKiBAaW50ZXJuYWwgKi9cbiAgbm90aWZ5UGF1c2UocGF1c2VEYXRhPzogdW5rbm93bik6IHZvaWQge1xuICAgIHRoaXMuX2ludm9rZUhvb2soJ29uUGF1c2UnLCB7XG4gICAgICBzdGFnZU5hbWU6IHRoaXMuX3N0YWdlTmFtZSxcbiAgICAgIHN0YWdlSWQ6IHRoaXMuX3N0YWdlQ29udGV4dC5zdGFnZUlkLFxuICAgICAgcnVudGltZVN0YWdlSWQ6IHRoaXMuX3N0YWdlQ29udGV4dC5ydW50aW1lU3RhZ2VJZCxcbiAgICAgIHBpcGVsaW5lSWQ6IHRoaXMuX3N0YWdlQ29udGV4dC5ydW5JZCxcbiAgICAgIHRpbWVzdGFtcDogRGF0ZS5ub3coKSxcbiAgICAgIHBhdXNlRGF0YSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKiBAaW50ZXJuYWwgKi9cbiAgbm90aWZ5UmVzdW1lKGhhc0lucHV0OiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5faW52b2tlSG9vaygnb25SZXN1bWUnLCB7XG4gICAgICBzdGFnZU5hbWU6IHRoaXMuX3N0YWdlTmFtZSxcbiAgICAgIHN0YWdlSWQ6IHRoaXMuX3N0YWdlQ29udGV4dC5zdGFnZUlkLFxuICAgICAgcnVudGltZVN0YWdlSWQ6IHRoaXMuX3N0YWdlQ29udGV4dC5ydW50aW1lU3RhZ2VJZCxcbiAgICAgIHBpcGVsaW5lSWQ6IHRoaXMuX3N0YWdlQ29udGV4dC5ydW5JZCxcbiAgICAgIHRpbWVzdGFtcDogRGF0ZS5ub3coKSxcbiAgICAgIGhhc0lucHV0LFxuICAgIH0pO1xuICB9XG5cbiAgLyoqIEBpbnRlcm5hbCAqL1xuICBub3RpZnlDb21taXQobXV0YXRpb25zOiBDb21taXRFdmVudFsnbXV0YXRpb25zJ10pOiB2b2lkIHtcbiAgICB0aGlzLl9pbnZva2VIb29rKCdvbkNvbW1pdCcsIHtcbiAgICAgIHN0YWdlTmFtZTogdGhpcy5fc3RhZ2VOYW1lLFxuICAgICAgc3RhZ2VJZDogdGhpcy5fc3RhZ2VDb250ZXh0LnN0YWdlSWQsXG4gICAgICBydW50aW1lU3RhZ2VJZDogdGhpcy5fc3RhZ2VDb250ZXh0LnJ1bnRpbWVTdGFnZUlkLFxuICAgICAgcGlwZWxpbmVJZDogdGhpcy5fc3RhZ2VDb250ZXh0LnJ1bklkLFxuICAgICAgdGltZXN0YW1wOiBEYXRlLm5vdygpLFxuICAgICAgbXV0YXRpb25zLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqIENhbGxlZCBieSBTdGFnZUNvbnRleHQuY29tbWl0KCkgb2JzZXJ2ZXIuIENvbnZlcnRzIHRyYWNrZWQgd3JpdGVzIHRvIENvbW1pdEV2ZW50IGZvcm1hdC5cbiAgICogIEVycm9ycyBhcmUgY2F1Z2h0IHRvIHByZXZlbnQgcmVjb3JkZXIgaXNzdWVzIGZyb20gYWJvcnRpbmcgdGhlIHRyYXZlcnNhbC4gKi9cbiAgcHJpdmF0ZSBfb25Db21taXRGaXJlZChtdXRhdGlvbnM6IFJlY29yZDxzdHJpbmcsIHsgdmFsdWU6IHVua25vd247IG9wZXJhdGlvbjogJ3NldCcgfCAndXBkYXRlJyB8ICdkZWxldGUnIH0+KTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX3JlY29yZGVycy5sZW5ndGggPT09IDApIHJldHVybjtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBjb21taXRNdXRhdGlvbnM6IENvbW1pdEV2ZW50WydtdXRhdGlvbnMnXSA9IE9iamVjdC5lbnRyaWVzKG11dGF0aW9ucykubWFwKChba2V5LCBlbnRyeV0pID0+IHtcbiAgICAgICAgY29uc3QgaXNSZWRhY3RlZCA9IHRoaXMuX2lzS2V5UmVkYWN0ZWQoa2V5KSB8fCB0aGlzLl9pc1BvbGljeVJlZGFjdGVkKGtleSk7XG4gICAgICAgIGNvbnN0IGZpZWxkU2V0ID0gdGhpcy5fcmVkYWN0ZWRGaWVsZHNCeUtleS5nZXQoa2V5KTtcblxuICAgICAgICBsZXQgcmVjb3JkZXJWYWx1ZTogdW5rbm93bjtcbiAgICAgICAgaWYgKGlzUmVkYWN0ZWQpIHtcbiAgICAgICAgICByZWNvcmRlclZhbHVlID0gJ1tSRURBQ1RFRF0nO1xuICAgICAgICB9IGVsc2UgaWYgKGZpZWxkU2V0ICYmIGVudHJ5LnZhbHVlICYmIHR5cGVvZiBlbnRyeS52YWx1ZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICByZWNvcmRlclZhbHVlID0gdGhpcy5fc2NydWJGaWVsZHMoZW50cnkudmFsdWUgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4sIGZpZWxkU2V0KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZWNvcmRlclZhbHVlID0gZW50cnkudmFsdWU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGtleSxcbiAgICAgICAgICB2YWx1ZTogcmVjb3JkZXJWYWx1ZSxcbiAgICAgICAgICBvcGVyYXRpb246IGVudHJ5Lm9wZXJhdGlvbixcbiAgICAgICAgfTtcbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLm5vdGlmeUNvbW1pdChjb21taXRNdXRhdGlvbnMpO1xuICAgIH0gY2F0Y2gge1xuICAgICAgLy8gU3dhbGxvdyDigJQgcmVjb3JkZXIgZXJyb3JzIG11c3Qgbm90IGFib3J0IHRoZSB0cmF2ZXJzYWwuXG4gICAgICAvLyBJbmRpdmlkdWFsIHJlY29yZGVyIGVycm9ycyBhcmUgYWxyZWFkeSBpc29sYXRlZCBieSBfaW52b2tlSG9vay5cbiAgICB9XG4gIH1cblxuICAvLyDilIDilIAgRGVidWcgLyBEaWFnbm9zdGljcyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbiAgLy9cbiAgLy8gVGhlc2UgbGVnYWN5IG1ldGhvZHMgc3RpbGwgd3JpdGUgdG8gdGhlIGBTdGFnZUNvbnRleHRgIGRpYWdub3N0aWNcbiAgLy8gc2lkZSBiYWdzIChsb2dDb250ZXh0IC8gZXJyb3JDb250ZXh0IC8gbWV0cmljQ29udGV4dCAvIGV2YWxDb250ZXh0KSBmb3JcbiAgLy8gc25hcHNob3QgaW5jbHVzaW9uLiBUaGV5IEFMU08gZmlyZSB0aHJvdWdoIHRoZSBFbWl0IGNoYW5uZWwgc28gYW55XG4gIC8vIGF0dGFjaGVkIGBFbWl0UmVjb3JkZXJgIHNlZXMgdGhlbSBpbiByZWFsIHRpbWUg4oCUIGNsb3NpbmcgdGhlXG4gIC8vIGxvbmctc3RhbmRpbmcgZ2FwIHdoZXJlIGAkZGVidWdgL2AkbWV0cmljYCB3ZW50IHRvIHVub2JzZXJ2ZWQgYmFncy5cblxuICBhZGREZWJ1Z0luZm8oa2V5OiBzdHJpbmcsIHZhbHVlOiB1bmtub3duKSB7XG4gICAgdGhpcy5fc3RhZ2VDb250ZXh0LmFkZExvZyhrZXksIHZhbHVlKTtcbiAgICB0aGlzLmVtaXRFdmVudChgbG9nLmRlYnVnLiR7a2V5fWAsIHsga2V5LCB2YWx1ZSwgbGV2ZWw6ICdkZWJ1ZycgfSk7XG4gIH1cblxuICBhZGREZWJ1Z01lc3NhZ2UodmFsdWU6IHVua25vd24pIHtcbiAgICB0aGlzLl9zdGFnZUNvbnRleHQuYWRkTG9nKCdtZXNzYWdlcycsIFt2YWx1ZV0pO1xuICAgIHRoaXMuZW1pdEV2ZW50KCdsb2cuZGVidWcubWVzc2FnZXMnLCB7IHZhbHVlLCBsZXZlbDogJ2RlYnVnJyB9KTtcbiAgfVxuXG4gIGFkZEVycm9ySW5mbyhrZXk6IHN0cmluZywgdmFsdWU6IHVua25vd24pIHtcbiAgICB0aGlzLl9zdGFnZUNvbnRleHQuYWRkRXJyb3Ioa2V5LCB2YWx1ZSk7XG4gICAgdGhpcy5lbWl0RXZlbnQoYGxvZy5lcnJvci4ke2tleX1gLCB7IGtleSwgdmFsdWUsIGxldmVsOiAnZXJyb3InIH0pO1xuICB9XG5cbiAgYWRkTWV0cmljKG1ldHJpY05hbWU6IHN0cmluZywgdmFsdWU6IHVua25vd24pIHtcbiAgICB0aGlzLl9zdGFnZUNvbnRleHQuYWRkTWV0cmljKG1ldHJpY05hbWUsIHZhbHVlKTtcbiAgICB0aGlzLmVtaXRFdmVudChgbWV0cmljLiR7bWV0cmljTmFtZX1gLCB7IG5hbWU6IG1ldHJpY05hbWUsIHZhbHVlIH0pO1xuICB9XG5cbiAgYWRkRXZhbChtZXRyaWNOYW1lOiBzdHJpbmcsIHZhbHVlOiB1bmtub3duKSB7XG4gICAgdGhpcy5fc3RhZ2VDb250ZXh0LmFkZEV2YWwobWV0cmljTmFtZSwgdmFsdWUpO1xuICAgIHRoaXMuZW1pdEV2ZW50KGBldmFsLiR7bWV0cmljTmFtZX1gLCB7IG5hbWU6IG1ldHJpY05hbWUsIHZhbHVlIH0pO1xuICB9XG5cbiAgLy8g4pSA4pSAIEVtaXQg4oCUIFBoYXNlIDMgcHJpbWFyeSBwcmltaXRpdmUg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbiAgLyoqXG4gICAqIEZpcmUgYSBzdHJ1Y3R1cmVkIGV2ZW50IHRvIGV2ZXJ5IGF0dGFjaGVkIHJlY29yZGVyIGltcGxlbWVudGluZ1xuICAgKiBgb25FbWl0YC4gU3luY2hyb25vdXMsIGluLW9yZGVyLCBwYXNzLXRocm91Z2gg4oCUIG5vIGJ1ZmZlcmluZy5cbiAgICpcbiAgICogLSAqKkZhc3QtcGF0aCoqOiB6ZXJvIGFsbG9jYXRpb24gKyB6ZXJvIGNvc3Qgd2hlbiBubyByZWNvcmRlcnMgYXJlXG4gICAqICAgYXR0YWNoZWQgKGVhcmx5IHJldHVybiBvbiBlbXB0eSBsaXN0KS5cbiAgICogLSAqKkVucmljaG1lbnQqKjogbGlicmFyeSBhdXRvLWFkZHMgYHN0YWdlTmFtZWAsIGBydW50aW1lU3RhZ2VJZGAsXG4gICAqICAgYHN1YmZsb3dQYXRoYCwgYHBpcGVsaW5lSWRgLCBgdGltZXN0YW1wYCB0byB0aGUgZXZlbnQuXG4gICAqIC0gKipSZWRhY3Rpb24qKjogYFJlZGFjdGlvblBvbGljeS5lbWl0UGF0dGVybnNgIHJlZ2V4ZXMgYXJlIG1hdGNoZWRcbiAgICogICBhZ2FpbnN0IGBuYW1lYCDigJQgbWF0Y2hlZCBldmVudHMgaGF2ZSB0aGVpciBwYXlsb2FkIHJlcGxhY2VkIHdpdGhcbiAgICogICBgJ1tSRURBQ1RFRF0nYCBiZWZvcmUgZGlzcGF0Y2guXG4gICAqIC0gKipFcnJvciBpc29sYXRpb24qKjogYSB0aHJvd2luZyBgb25FbWl0YCBkb2VzIG5vdCBwcm9wYWdhdGUg4oCUIGl0IGlzXG4gICAqICAgY2F1Z2h0IGFuZCByb3V0ZWQgdG8gYG9uRXJyb3JgIG9uIHJlbWFpbmluZyByZWNvcmRlcnMsIG1hdGNoaW5nIHRoZVxuICAgKiAgIHBhdHRlcm4gdXNlZCBieSBvdGhlciBzY29wZSBldmVudHMuXG4gICAqXG4gICAqIENvbnN1bWVycyBjYWxsIHRoaXMgdmlhIHRoZSBgc2NvcGUuJGVtaXQobmFtZSwgcGF5bG9hZClgIHNjb3BlIG1ldGhvZDtcbiAgICogdGhlIG1ldGhvZCByb3V0ZXMgaGVyZSB2aWEgYGNyZWF0ZVR5cGVkU2NvcGVgLlxuICAgKi9cbiAgZW1pdEV2ZW50KG5hbWU6IHN0cmluZywgcGF5bG9hZDogdW5rbm93bik6IHZvaWQge1xuICAgIC8vIEZhc3QtcGF0aDogemVybyB3b3JrIHdoZW4gbm8gcmVjb3JkZXJzIGFyZSBhdHRhY2hlZC5cbiAgICBpZiAodGhpcy5fcmVjb3JkZXJzLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuXG4gICAgLy8gUmVkYWN0aW9uOiBpZiB0aGUgZXZlbnQgbmFtZSBtYXRjaGVzIGFueSBlbWl0UGF0dGVybiwgcmVwbGFjZSBwYXlsb2FkXG4gICAgLy8gd2l0aCAnW1JFREFDVEVEXScgQkVGT1JFIGNvbnN0cnVjdGluZyB0aGUgZXZlbnQgKG5vIGxlYWsgdGhyb3VnaFxuICAgIC8vIGNvcHktb24td3JpdGUsIG5vIHdheSBmb3IgcmVjb3JkZXJzIHRvIHNlZSB0aGUgcmF3IHZhbHVlKS5cbiAgICBsZXQgZmluYWxQYXlsb2FkOiB1bmtub3duID0gcGF5bG9hZDtcbiAgICBjb25zdCBwYXR0ZXJucyA9IHRoaXMuX3JlZGFjdGlvblBvbGljeT8uZW1pdFBhdHRlcm5zO1xuICAgIGlmIChwYXR0ZXJucyAmJiBwYXR0ZXJucy5sZW5ndGggPiAwKSB7XG4gICAgICBmb3IgKGNvbnN0IHBhdHRlcm4gb2YgcGF0dGVybnMpIHtcbiAgICAgICAgaWYgKHBhdHRlcm4udGVzdChuYW1lKSkge1xuICAgICAgICAgIGZpbmFsUGF5bG9hZCA9ICdbUkVEQUNURURdJztcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEJ1aWxkIHRoZSBlbnJpY2hlZCBldmVudCBvbmNlOyBwYXNzIHRoZSBzYW1lIHJlZmVyZW5jZSB0byBhbGxcbiAgICAvLyByZWNvcmRlcnMuIFNpbmNlIEVtaXRFdmVudCBpcyBgcmVhZG9ubHlgLCBzaGFyaW5nIGlzIHNhZmUuXG4gICAgY29uc3QgZXZlbnQgPSB7XG4gICAgICBuYW1lLFxuICAgICAgcGF5bG9hZDogZmluYWxQYXlsb2FkLFxuICAgICAgc3RhZ2VOYW1lOiB0aGlzLl9zdGFnZU5hbWUsXG4gICAgICBydW50aW1lU3RhZ2VJZDogdGhpcy5fc3RhZ2VDb250ZXh0LnJ1bnRpbWVTdGFnZUlkLFxuICAgICAgc3ViZmxvd1BhdGg6IHRoaXMuX2dldFN1YmZsb3dQYXRoKCksXG4gICAgICBwaXBlbGluZUlkOiB0aGlzLl9zdGFnZUNvbnRleHQucnVuSWQsXG4gICAgICB0aW1lc3RhbXA6IERhdGUubm93KCksXG4gICAgfSBhcyBjb25zdDtcblxuICAgIC8vIERpc3BhdGNoIHdpdGggZXJyb3IgaXNvbGF0aW9uIOKAlCBzYW1lIHBhdHRlcm4gYXMgX2ludm9rZUhvb2sgdXNlcyBmb3JcbiAgICAvLyBvdGhlciBzY29wZSBldmVudHMuIEEgdGhyb3dpbmcgcmVjb3JkZXIncyBlcnJvciBpcyBzdXJmYWNlZCB2aWFcbiAgICAvLyBvbkVycm9yIG9uIHRoZSBvdGhlciByZWNvcmRlcnM7IHRoZSBlbWl0IGxvb3AgY29udGludWVzIHVuYWZmZWN0ZWQuXG4gICAgZm9yIChjb25zdCByZWNvcmRlciBvZiB0aGlzLl9yZWNvcmRlcnMpIHtcbiAgICAgIGNvbnN0IG9uRW1pdCA9IHJlY29yZGVyLm9uRW1pdDtcbiAgICAgIGlmICh0eXBlb2Ygb25FbWl0ICE9PSAnZnVuY3Rpb24nKSBjb250aW51ZTtcbiAgICAgIHRyeSB7XG4gICAgICAgIG9uRW1pdC5jYWxsKHJlY29yZGVyLCBldmVudCk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICB0aGlzLl9pbnZva2VIb29rKCdvbkVycm9yJywge1xuICAgICAgICAgIHN0YWdlTmFtZTogdGhpcy5fc3RhZ2VOYW1lLFxuICAgICAgICAgIHN0YWdlSWQ6IHRoaXMuX3N0YWdlQ29udGV4dC5zdGFnZUlkLFxuICAgICAgICAgIHJ1bnRpbWVTdGFnZUlkOiB0aGlzLl9zdGFnZUNvbnRleHQucnVudGltZVN0YWdlSWQsXG4gICAgICAgICAgcGlwZWxpbmVJZDogdGhpcy5fc3RhZ2VDb250ZXh0LnJ1bklkLFxuICAgICAgICAgIHRpbWVzdGFtcDogRGF0ZS5ub3coKSxcbiAgICAgICAgICBlcnJvcjogZXJyb3IgYXMgRXJyb3IsXG4gICAgICAgICAgb3BlcmF0aW9uOiAnd3JpdGUnLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyDilIDilIAgRGV0YWNoIOKAlCBmaXJlLWFuZC1mb3JnZXQgY2hpbGQgZmxvd2NoYXJ0IGV4ZWN1dGlvbiDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbiAgLy9cbiAgLy8gRGVsZWdhdGVzIHRvIHRoZSBzaGFyZWQgYGRldGFjaC9zcGF3bmAgaGVscGVyLCB3aGljaCBtaW50cyBhIHJlZklkXG4gIC8vIGZyb20gdGhpcyBzdGFnZSdzIGBydW50aW1lU3RhZ2VJZGAgYW5kIGNhbGxzIGBkcml2ZXIuc2NoZWR1bGUoKWAuXG4gIC8vIFJvdXRlZCB0aHJvdWdoIGBjcmVhdGVUeXBlZFNjb3BlYCBhcyBgc2NvcGUuJGRldGFjaEFuZEpvaW5MYXRlciguLi4pYFxuICAvLyBhbmQgYHNjb3BlLiRkZXRhY2hBbmRGb3JnZXQoLi4uKWAuXG5cbiAgLyoqIFNlZSBgU2NvcGVNZXRob2RzLiRkZXRhY2hBbmRKb2luTGF0ZXJgLiAqL1xuICBkZXRhY2hBbmRKb2luTGF0ZXIoXG4gICAgZHJpdmVyOiBpbXBvcnQoJy4uL2RldGFjaC90eXBlcy5qcycpLkRldGFjaERyaXZlcixcbiAgICBjaGlsZDogaW1wb3J0KCcuLi9idWlsZGVyL3R5cGVzLmpzJykuRmxvd0NoYXJ0LFxuICAgIGlucHV0PzogdW5rbm93bixcbiAgKTogaW1wb3J0KCcuLi9kZXRhY2gvdHlwZXMuanMnKS5EZXRhY2hIYW5kbGUge1xuICAgIHJldHVybiBkZXRhY2hBbmRKb2luTGF0ZXJTcGF3bihkcml2ZXIsIGNoaWxkLCBpbnB1dCwgdGhpcy5fc3RhZ2VDb250ZXh0LnJ1bnRpbWVTdGFnZUlkKTtcbiAgfVxuXG4gIC8qKiBTZWUgYFNjb3BlTWV0aG9kcy4kZGV0YWNoQW5kRm9yZ2V0YC4gKi9cbiAgZGV0YWNoQW5kRm9yZ2V0KFxuICAgIGRyaXZlcjogaW1wb3J0KCcuLi9kZXRhY2gvdHlwZXMuanMnKS5EZXRhY2hEcml2ZXIsXG4gICAgY2hpbGQ6IGltcG9ydCgnLi4vYnVpbGRlci90eXBlcy5qcycpLkZsb3dDaGFydCxcbiAgICBpbnB1dD86IHVua25vd24sXG4gICk6IHZvaWQge1xuICAgIGRldGFjaEFuZEZvcmdldFNwYXduKGRyaXZlciwgY2hpbGQsIGlucHV0LCB0aGlzLl9zdGFnZUNvbnRleHQucnVudGltZVN0YWdlSWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEJ1aWxkIHRoZSBzdWJmbG93UGF0aCAob3V0ZXIg4oaSIGlubmVyKSBmb3IgZXZlbnQgZW5yaWNobWVudC5cbiAgICpcbiAgICogUGFyc2VzIGZyb20gYHJ1bnRpbWVTdGFnZUlkYCB3aGljaCBoYXMgdGhlIGZvcm1hdFxuICAgKiBgW3N1YmZsb3dQYXRoL11zdGFnZUlkI2V4ZWN1dGlvbkluZGV4YCAoc2VlIGBsaWIvZW5naW5lL3J1bnRpbWVTdGFnZUlkLnRzYCkuXG4gICAqIFN1YmZsb3cgaXNvbGF0aW9uIHByZXZlbnRzIHdhbGtpbmcgdGhlIHBhcmVudC1jaGFpbiBhY3Jvc3MgYm91bmRhcmllcyxcbiAgICogc28gdGhlIHJ1bnRpbWVTdGFnZUlkIOKAlCBnbG9iYWxseSB1bmlxdWUsIGluY2x1ZGVzIGZ1bGwgcGF0aCDigJQgaXMgdGhlXG4gICAqIGNhbm9uaWNhbCBzb3VyY2Ugb2YgdHJ1dGggZm9yIHRoZSBzdWJmbG93IGhpZXJhcmNoeSBhdCBlbWl0IHRpbWUuXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKiAgICdzZWVkIzAnICAgICAgICAgICAgICAgICDihpIgW10gICAgICAgICAgICAgICAgICAgIChyb290KVxuICAgKiAgICdzZi1pbm5lci9pbm5lciM1JyAgICAgICDihpIgWydzZi1pbm5lciddXG4gICAqICAgJ3NmLWEvc2YtYi9zdGFnZSMzJyAgICAgIOKGkiBbJ3NmLWEnLCAnc2YtYiddICAgICAgKG5lc3RlZClcbiAgICovXG4gIHByaXZhdGUgX2dldFN1YmZsb3dQYXRoKCk6IHJlYWRvbmx5IHN0cmluZ1tdIHtcbiAgICBjb25zdCBydGlkID0gdGhpcy5fc3RhZ2VDb250ZXh0LnJ1bnRpbWVTdGFnZUlkO1xuICAgIGlmICghcnRpZCkgcmV0dXJuIFNjb3BlRmFjYWRlLl9FTVBUWV9TVUJGTE9XX1BBVEg7XG4gICAgLy8gU3RyaXAgdGhlIHRyYWlsaW5nIGAjZXhlY3V0aW9uSW5kZXhgIHRvIGlzb2xhdGUgdGhlIHBhdGggcG9ydGlvbi5cbiAgICBjb25zdCBoYXNoSWR4ID0gcnRpZC5sYXN0SW5kZXhPZignIycpO1xuICAgIGNvbnN0IHBhdGhQb3J0aW9uID0gaGFzaElkeCA+PSAwID8gcnRpZC5zbGljZSgwLCBoYXNoSWR4KSA6IHJ0aWQ7XG4gICAgLy8gcGF0aFBvcnRpb24gaXMgbm93IGBbc3ViZmxvd1BhdGgvXXN0YWdlSWRgLiBTcGxpdCBvbiAnLycgYW5kIGRyb3AgdGhlXG4gICAgLy8gbGFzdCBzZWdtZW50IChzdGFnZUlkKSDigJQgd2hhdCByZW1haW5zIGlzIHRoZSBzdWJmbG93IHBhdGguXG4gICAgY29uc3Qgc2VnbWVudHMgPSBwYXRoUG9ydGlvbi5zcGxpdCgnLycpO1xuICAgIGlmIChzZWdtZW50cy5sZW5ndGggPD0gMSkgcmV0dXJuIFNjb3BlRmFjYWRlLl9FTVBUWV9TVUJGTE9XX1BBVEg7XG4gICAgcmV0dXJuIE9iamVjdC5mcmVlemUoc2VnbWVudHMuc2xpY2UoMCwgLTEpKTtcbiAgfVxuXG4gIC8vIOKUgOKUgCBOb24tVHJhY2tpbmcgU3RhdGUgSW5zcGVjdGlvbiAoZm9yIFR5cGVkU2NvcGUgcHJveHkgaW50ZXJuYWxzKSDilIDilIDilIDilIDilIDilIBcblxuICAvKiogUmV0dXJucyBhbGwgc3RhdGUga2V5cyB3aXRob3V0IGZpcmluZyBvblJlYWQuIFVzZWQgYnkgVHlwZWRTY29wZSBvd25LZXlzL2hhcyB0cmFwcy4gKi9cbiAgZ2V0U3RhdGVLZXlzKCk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCBzbmFwc2hvdCA9IHRoaXMuX3N0YWdlQ29udGV4dC5nZXRWYWx1ZShbXSwgdW5kZWZpbmVkKTtcbiAgICBpZiAoIXNuYXBzaG90IHx8IHR5cGVvZiBzbmFwc2hvdCAhPT0gJ29iamVjdCcpIHJldHVybiBbXTtcbiAgICByZXR1cm4gT2JqZWN0LmtleXMoc25hcHNob3QgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pO1xuICB9XG5cbiAgLyoqIENoZWNrIGtleSBleGlzdGVuY2Ugd2l0aG91dCBmaXJpbmcgb25SZWFkLiBVc2VkIGJ5IFR5cGVkU2NvcGUgaGFzIHRyYXAuXG4gICAqICBDb250cmFjdDogcmV0dXJucyBmYWxzZSBmb3Iga2V5cyBuZXZlciBzZXQgT1Iga2V5cyBzZXQgdG8gdW5kZWZpbmVkLlxuICAgKiAgVGhpcyBtYXRjaGVzIGRlbGV0ZVZhbHVlKCkgc2VtYW50aWNzIChzZXRzIHRvIHVuZGVmaW5lZCA9IGRlbGV0ZWQpLiAqL1xuICBoYXNLZXkoa2V5OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fc3RhZ2VDb250ZXh0LmdldFZhbHVlKFtdLCBrZXkpICE9PSB1bmRlZmluZWQ7XG4gIH1cblxuICAvKiogUmVhZCBzdGF0ZSB3aXRob3V0IGZpcmluZyBvblJlYWQuIFVzZWQgYnkgYXJyYXkgcHJveHkgZ2V0Q3VycmVudCgpIHRvIGF2b2lkXG4gICAqICBwaGFudG9tIHJlYWRzIG9uIGludGVybmFsIGFycmF5IG9wZXJhdGlvbnMgKC5sZW5ndGgsIC5oYXMsIGl0ZXJhdGlvbiwgZXRjLikuXG4gICAqICBUaGUgaW5pdGlhbCBwcm9wZXJ0eSBhY2Nlc3MgZmlyZXMgb25lIHRyYWNrZWQgb25SZWFkIHZpYSBnZXRWYWx1ZSgpOyBzdWJzZXF1ZW50XG4gICAqICBpbnRlcm5hbCBhcnJheSBvcGVyYXRpb25zIHVzZSB0aGlzIG1ldGhvZCB0byBzdGF5IHNpbGVudC5cbiAgICogIE5PVEU6IExpa2UgZ2V0VmFsdWUoKSwgcmV0dXJucyB0aGUgcmF3IHZhbHVlIHRvIHRoZSBjYWxsZXIuIFJlZGFjdGlvbiBhcHBsaWVzXG4gICAqICBvbmx5IHRvIHJlY29yZGVyIGRpc3BhdGNoIOKAlCBpdCBkb2VzIG5vdCBmaWx0ZXIgdGhlIHJldHVybmVkIHZhbHVlLiBUaGlzIG1hdGNoZXNcbiAgICogIHRoZSBleGlzdGluZyBnZXRWYWx1ZSgpIGNvbnRyYWN0IHdoZXJlIHVzZXIgY29kZSBhbHdheXMgcmVjZWl2ZXMgcmF3IGRhdGEuICovXG4gIGdldFZhbHVlU2lsZW50KGtleT86IHN0cmluZyk6IHVua25vd24ge1xuICAgIHJldHVybiB0aGlzLl9zdGFnZUNvbnRleHQuZ2V0VmFsdWVEaXJlY3QoW10sIGtleSk7XG4gIH1cblxuICAvLyDilIDilIAgU3RhdGUgQWNjZXNzIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4gIGdldEluaXRpYWxWYWx1ZUZvcihrZXk6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLl9zdGFnZUNvbnRleHQuZ2V0R2xvYmFsPy4oa2V5KTtcbiAgfVxuXG4gIGdldFZhbHVlKGtleT86IHN0cmluZykge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5fc3RhZ2VDb250ZXh0LmdldFZhbHVlKFtdLCBrZXkpO1xuXG4gICAgaWYgKHRoaXMuX3JlY29yZGVycy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBpc1JlZGFjdGVkID0ga2V5ICE9PSB1bmRlZmluZWQgJiYgdGhpcy5faXNLZXlSZWRhY3RlZChrZXkpO1xuICAgICAgY29uc3QgZmllbGRTZXQgPSBrZXkgIT09IHVuZGVmaW5lZCA/IHRoaXMuX3JlZGFjdGVkRmllbGRzQnlLZXkuZ2V0KGtleSkgOiB1bmRlZmluZWQ7XG5cbiAgICAgIGxldCByZWNvcmRlclZhbHVlOiB1bmtub3duO1xuICAgICAgaWYgKGlzUmVkYWN0ZWQpIHtcbiAgICAgICAgcmVjb3JkZXJWYWx1ZSA9ICdbUkVEQUNURURdJztcbiAgICAgIH0gZWxzZSBpZiAoZmllbGRTZXQgJiYgdmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0Jykge1xuICAgICAgICByZWNvcmRlclZhbHVlID0gdGhpcy5fc2NydWJGaWVsZHModmFsdWUgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4sIGZpZWxkU2V0KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlY29yZGVyVmFsdWUgPSB2YWx1ZTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5faW52b2tlSG9vaygnb25SZWFkJywge1xuICAgICAgICBzdGFnZU5hbWU6IHRoaXMuX3N0YWdlTmFtZSxcbiAgICAgICAgc3RhZ2VJZDogdGhpcy5fc3RhZ2VDb250ZXh0LnN0YWdlSWQsXG4gICAgICAgIHJ1bnRpbWVTdGFnZUlkOiB0aGlzLl9zdGFnZUNvbnRleHQucnVudGltZVN0YWdlSWQsXG4gICAgICAgIHBpcGVsaW5lSWQ6IHRoaXMuX3N0YWdlQ29udGV4dC5ydW5JZCxcbiAgICAgICAgdGltZXN0YW1wOiBEYXRlLm5vdygpLFxuICAgICAgICBrZXksXG4gICAgICAgIHZhbHVlOiByZWNvcmRlclZhbHVlLFxuICAgICAgICByZWRhY3RlZDogaXNSZWRhY3RlZCB8fCBmaWVsZFNldCAhPT0gdW5kZWZpbmVkIHx8IHVuZGVmaW5lZCxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIHNldFZhbHVlKGtleTogc3RyaW5nLCB2YWx1ZTogdW5rbm93biwgc2hvdWxkUmVkYWN0PzogYm9vbGVhbiwgZGVzY3JpcHRpb24/OiBzdHJpbmcpIHtcbiAgICBhc3NlcnROb3RSZWFkb25seSh0aGlzLl9yZWFkT25seVZhbHVlcywga2V5LCAnd3JpdGUnKTtcblxuICAgIC8vIERldi1tb2RlOiB3YXJuIGlmIHRoZSB2YWx1ZSBjb250YWlucyBjaXJjdWxhciByZWZlcmVuY2VzLlxuICAgIC8vIENoZWNrIEFGVEVSIGFzc2VydE5vdFJlYWRvbmx5IOKAlCBkb24ndCB3YXJuIGZvciB3cml0ZXMgdGhhdCB3aWxsIGJlIGJsb2NrZWQuXG4gICAgLy8gQ2lyY3VsYXIgdmFsdWVzIHdvcmsgKHRlcm1pbmFsIHByb3h5IGhhbmRsZXMgdGhlbSkgYnV0IGNhbiBwcm9kdWNlXG4gICAgLy8gc3VycHJpc2luZyBiZWhhdmlvciBpbiBuYXJyYXRpdmUsIEpTT04gc2VyaWFsaXphdGlvbiwgYW5kIHNuYXBzaG90cy5cbiAgICBpZiAoaXNEZXZNb2RlKCkgJiYgdmFsdWUgIT09IG51bGwgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0Jykge1xuICAgICAgaWYgKGhhc0NpcmN1bGFyUmVmZXJlbmNlKHZhbHVlKSkge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgYFtmb290cHJpbnRdIENpcmN1bGFyIHJlZmVyZW5jZSBkZXRlY3RlZCBpbiBzZXRWYWx1ZSgnJHtrZXl9JykuIGAgK1xuICAgICAgICAgICAgJ1dyaXRlcyBwYXN0IHRoZSBjeWNsZSBkZXB0aCB3aWxsIHVzZSB0ZXJtaW5hbCBwcm94eSB0cmFja2luZy4gJyArXG4gICAgICAgICAgICAnQ29uc2lkZXIgZmxhdHRlbmluZyB0aGUgZGF0YSBzdHJ1Y3R1cmUuJyxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBBdXRvLXJlZGFjdCBpZiBrZXkgbWF0Y2hlcyBwb2xpY3kgKGV4YWN0IGtleXMgb3IgcGF0dGVybnMpLCBvciBpZiB0aGUga2V5IHdhc1xuICAgIC8vIHByZXZpb3VzbHkgbWFya2VkIHJlZGFjdGVkIChlLmcuIGNhcnJpZWQgb3ZlciBmcm9tIGEgc3ViZmxvdyB2aWEgb3V0cHV0TWFwcGVyKS5cbiAgICBjb25zdCBlZmZlY3RpdmVSZWRhY3QgPSBzaG91bGRSZWRhY3QgfHwgdGhpcy5faXNQb2xpY3lSZWRhY3RlZChrZXkpIHx8IHRoaXMuX3JlZGFjdGVkS2V5cy5oYXMoa2V5KTtcblxuICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuX3N0YWdlQ29udGV4dC5zZXRPYmplY3QoW10sIGtleSwgdmFsdWUsIGVmZmVjdGl2ZVJlZGFjdCwgZGVzY3JpcHRpb24pO1xuXG4gICAgaWYgKGVmZmVjdGl2ZVJlZGFjdCkge1xuICAgICAgdGhpcy5fcmVkYWN0ZWRLZXlzLmFkZChrZXkpO1xuICAgIH1cblxuICAgIC8vIENoZWNrIGZvciBmaWVsZC1sZXZlbCByZWRhY3Rpb24gZnJvbSBwb2xpY3lcbiAgICBjb25zdCBmaWVsZFNldCA9IHRoaXMuX3JlZGFjdGVkRmllbGRzQnlLZXkuZ2V0KGtleSk7XG5cbiAgICBpZiAodGhpcy5fcmVjb3JkZXJzLmxlbmd0aCA+IDApIHtcbiAgICAgIGxldCByZWNvcmRlclZhbHVlOiB1bmtub3duO1xuICAgICAgaWYgKGVmZmVjdGl2ZVJlZGFjdCkge1xuICAgICAgICByZWNvcmRlclZhbHVlID0gJ1tSRURBQ1RFRF0nO1xuICAgICAgfSBlbHNlIGlmIChmaWVsZFNldCAmJiB2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIHJlY29yZGVyVmFsdWUgPSB0aGlzLl9zY3J1YkZpZWxkcyh2YWx1ZSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiwgZmllbGRTZXQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVjb3JkZXJWYWx1ZSA9IHZhbHVlO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9pbnZva2VIb29rKCdvbldyaXRlJywge1xuICAgICAgICBzdGFnZU5hbWU6IHRoaXMuX3N0YWdlTmFtZSxcbiAgICAgICAgc3RhZ2VJZDogdGhpcy5fc3RhZ2VDb250ZXh0LnN0YWdlSWQsXG4gICAgICAgIHJ1bnRpbWVTdGFnZUlkOiB0aGlzLl9zdGFnZUNvbnRleHQucnVudGltZVN0YWdlSWQsXG4gICAgICAgIHBpcGVsaW5lSWQ6IHRoaXMuX3N0YWdlQ29udGV4dC5ydW5JZCxcbiAgICAgICAgdGltZXN0YW1wOiBEYXRlLm5vdygpLFxuICAgICAgICBrZXksXG4gICAgICAgIHZhbHVlOiByZWNvcmRlclZhbHVlLFxuICAgICAgICBvcGVyYXRpb246ICdzZXQnLFxuICAgICAgICByZWRhY3RlZDogZWZmZWN0aXZlUmVkYWN0IHx8IGZpZWxkU2V0ICE9PSB1bmRlZmluZWQgfHwgdW5kZWZpbmVkLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHVwZGF0ZVZhbHVlKGtleTogc3RyaW5nLCB2YWx1ZTogdW5rbm93biwgZGVzY3JpcHRpb24/OiBzdHJpbmcpIHtcbiAgICBhc3NlcnROb3RSZWFkb25seSh0aGlzLl9yZWFkT25seVZhbHVlcywga2V5LCAnd3JpdGUnKTtcblxuICAgIC8vIERldi1tb2RlOiBzYW1lIGNpcmN1bGFyIGNoZWNrIGFzIHNldFZhbHVlIChtZXJnZSB0YXJnZXRzIGNhbiBiZSBjaXJjdWxhciB0b28pXG4gICAgaWYgKGlzRGV2TW9kZSgpICYmIHZhbHVlICE9PSBudWxsICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgIGlmIChoYXNDaXJjdWxhclJlZmVyZW5jZSh2YWx1ZSkpIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgIGBbZm9vdHByaW50XSBDaXJjdWxhciByZWZlcmVuY2UgZGV0ZWN0ZWQgaW4gdXBkYXRlVmFsdWUoJyR7a2V5fScpLiBgICtcbiAgICAgICAgICAgICdDb25zaWRlciBmbGF0dGVuaW5nIHRoZSBkYXRhIHN0cnVjdHVyZS4nLFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGlzUmVkYWN0ZWQgPSB0aGlzLl9pc0tleVJlZGFjdGVkKGtleSkgfHwgdGhpcy5faXNQb2xpY3lSZWRhY3RlZChrZXkpO1xuICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuX3N0YWdlQ29udGV4dC51cGRhdGVPYmplY3QoW10sIGtleSwgdmFsdWUsIGRlc2NyaXB0aW9uLCBpc1JlZGFjdGVkKTtcblxuICAgIGlmICh0aGlzLl9yZWNvcmRlcnMubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgZmllbGRTZXQgPSB0aGlzLl9yZWRhY3RlZEZpZWxkc0J5S2V5LmdldChrZXkpO1xuXG4gICAgICBsZXQgcmVjb3JkZXJWYWx1ZTogdW5rbm93bjtcbiAgICAgIGlmIChpc1JlZGFjdGVkKSB7XG4gICAgICAgIHJlY29yZGVyVmFsdWUgPSAnW1JFREFDVEVEXSc7XG4gICAgICB9IGVsc2UgaWYgKGZpZWxkU2V0ICYmIHZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgcmVjb3JkZXJWYWx1ZSA9IHRoaXMuX3NjcnViRmllbGRzKHZhbHVlIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+LCBmaWVsZFNldCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZWNvcmRlclZhbHVlID0gdmFsdWU7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX2ludm9rZUhvb2soJ29uV3JpdGUnLCB7XG4gICAgICAgIHN0YWdlTmFtZTogdGhpcy5fc3RhZ2VOYW1lLFxuICAgICAgICBzdGFnZUlkOiB0aGlzLl9zdGFnZUNvbnRleHQuc3RhZ2VJZCxcbiAgICAgICAgcnVudGltZVN0YWdlSWQ6IHRoaXMuX3N0YWdlQ29udGV4dC5ydW50aW1lU3RhZ2VJZCxcbiAgICAgICAgcGlwZWxpbmVJZDogdGhpcy5fc3RhZ2VDb250ZXh0LnJ1bklkLFxuICAgICAgICB0aW1lc3RhbXA6IERhdGUubm93KCksXG4gICAgICAgIGtleSxcbiAgICAgICAgdmFsdWU6IHJlY29yZGVyVmFsdWUsXG4gICAgICAgIG9wZXJhdGlvbjogJ3VwZGF0ZScsXG4gICAgICAgIHJlZGFjdGVkOiBpc1JlZGFjdGVkIHx8IGZpZWxkU2V0ICE9PSB1bmRlZmluZWQgfHwgdW5kZWZpbmVkLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIGRlbGV0ZVZhbHVlKGtleTogc3RyaW5nLCBkZXNjcmlwdGlvbj86IHN0cmluZykge1xuICAgIGFzc2VydE5vdFJlYWRvbmx5KHRoaXMuX3JlYWRPbmx5VmFsdWVzLCBrZXksICdkZWxldGUnKTtcblxuICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuX3N0YWdlQ29udGV4dC5zZXRPYmplY3QoW10sIGtleSwgdW5kZWZpbmVkLCBmYWxzZSwgZGVzY3JpcHRpb24gPz8gYGRlbGV0ZWQgJHtrZXl9YCwgJ2RlbGV0ZScpO1xuXG4gICAgLy8gRGVsZXRpbmcgYSByZWRhY3RlZCBrZXkgY2xlYXJzIGl0cyByZWRhY3Rpb24gc3RhdHVzXG4gICAgdGhpcy5fcmVkYWN0ZWRLZXlzLmRlbGV0ZShrZXkpO1xuXG4gICAgaWYgKHRoaXMuX3JlY29yZGVycy5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLl9pbnZva2VIb29rKCdvbldyaXRlJywge1xuICAgICAgICBzdGFnZU5hbWU6IHRoaXMuX3N0YWdlTmFtZSxcbiAgICAgICAgc3RhZ2VJZDogdGhpcy5fc3RhZ2VDb250ZXh0LnN0YWdlSWQsXG4gICAgICAgIHJ1bnRpbWVTdGFnZUlkOiB0aGlzLl9zdGFnZUNvbnRleHQucnVudGltZVN0YWdlSWQsXG4gICAgICAgIHBpcGVsaW5lSWQ6IHRoaXMuX3N0YWdlQ29udGV4dC5ydW5JZCxcbiAgICAgICAgdGltZXN0YW1wOiBEYXRlLm5vdygpLFxuICAgICAgICBrZXksXG4gICAgICAgIHZhbHVlOiB1bmRlZmluZWQsXG4gICAgICAgIG9wZXJhdGlvbjogJ2RlbGV0ZScsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLyoqIEBpbnRlcm5hbCAqL1xuICBzZXRHbG9iYWwoa2V5OiBzdHJpbmcsIHZhbHVlOiB1bmtub3duLCBkZXNjcmlwdGlvbj86IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLl9zdGFnZUNvbnRleHQuc2V0R2xvYmFsPy4oa2V5LCB2YWx1ZSwgZGVzY3JpcHRpb24pO1xuICB9XG5cbiAgLyoqIEBpbnRlcm5hbCAqL1xuICBnZXRHbG9iYWwoa2V5OiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5fc3RhZ2VDb250ZXh0LmdldEdsb2JhbD8uKGtleSk7XG4gIH1cblxuICAvKiogQGludGVybmFsICovXG4gIHNldE9iamVjdEluUm9vdChrZXk6IHN0cmluZywgdmFsdWU6IHVua25vd24pIHtcbiAgICByZXR1cm4gdGhpcy5fc3RhZ2VDb250ZXh0LnNldFJvb3Q/LihrZXksIHZhbHVlKTtcbiAgfVxuXG4gIC8vIOKUgOKUgCBSZWFkLW9ubHkgKyBtaXNjIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSByZWFkb25seSBpbnB1dCB2YWx1ZXMgcGFzc2VkIHRvIHRoaXMgcGlwZWxpbmUsIGNhc3QgdG8gYFRgLlxuICAgKiBUaGUgcmV0dXJuZWQgb2JqZWN0IGlzIGRlZXBseSBmcm96ZW4g4oCUIGFueSBhdHRlbXB0IHRvIG11dGF0ZSBpdCB0aHJvd3MuXG4gICAqIENhY2hlZCBhdCBjb25zdHJ1Y3Rpb24gdGltZSBmb3IgemVyby1hbGxvY2F0aW9uIHJlcGVhdGVkIGFjY2Vzcy5cbiAgICpcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiBjb25zdCB7IGFwcGxpY2FudE5hbWUsIGluY29tZSB9ID0gc2NvcGUuZ2V0QXJnczx7IGFwcGxpY2FudE5hbWU6IHN0cmluZzsgaW5jb21lOiBudW1iZXIgfT4oKTtcbiAgICogYGBgXG4gICAqL1xuICBnZXRBcmdzPFQgPSBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4oKTogVCB7XG4gICAgcmV0dXJuIHRoaXMuX2Zyb3plbkFyZ3MgYXMgVDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBleGVjdXRpb24gZW52aXJvbm1lbnQg4oCUIHJlYWQtb25seSBpbmZyYXN0cnVjdHVyZSB2YWx1ZXNcbiAgICogdGhhdCBwcm9wYWdhdGUgdGhyb3VnaCBuZXN0ZWQgZXhlY3V0b3JzIChsaWtlIGBwcm9jZXNzLmVudmAgZm9yIGZsb3djaGFydHMpLlxuICAgKlxuICAgKiBDb250YWluczogc2lnbmFsIChhYm9ydCksIHRpbWVvdXRNcywgdHJhY2VJZC5cbiAgICogRnJvemVuIGF0IGNvbnN0cnVjdGlvbiB0aW1lLiBJbmhlcml0ZWQgYnkgc3ViZmxvd3MgYXV0b21hdGljYWxseS5cbiAgICpcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiBjb25zdCB7IHNpZ25hbCwgdHJhY2VJZCB9ID0gc2NvcGUuZ2V0RW52KCk7XG4gICAqIGBgYFxuICAgKi9cbiAgZ2V0RW52KCk6IFJlYWRvbmx5PEV4ZWN1dGlvbkVudj4ge1xuICAgIHJldHVybiB0aGlzLl9leGVjdXRpb25FbnY7XG4gIH1cblxuICAvKiogQGludGVybmFsICovXG4gIGdldFBpcGVsaW5lSWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3N0YWdlQ29udGV4dC5ydW5JZDtcbiAgfVxuXG4gIC8vIOKUgOKUgCBJbnRlcm5hbCDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuICAvKiogQ2hlY2tzIGlmIGEga2V5IGlzIHJlZGFjdGVkIChleHBsaWNpdCBfcmVkYWN0ZWRLZXlzIHNldCkuICovXG4gIHByaXZhdGUgX2lzS2V5UmVkYWN0ZWQoa2V5OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fcmVkYWN0ZWRLZXlzLmhhcyhrZXkpO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiBhIGtleSBzaG91bGQgYmUgYXV0by1yZWRhY3RlZCBieSB0aGUgcG9saWN5IChleGFjdCBrZXlzICsgcGF0dGVybnMpLlxuICAgKlxuICAgKiBSZURvUyBndWFyZDogcGF0dGVybiB0ZXN0aW5nIGlzIGNhcHBlZCBhdCBNQVhfUEFUVEVSTl9LRVlfTEVOIGNoYXJhY3RlcnMuXG4gICAqIFNjb3BlIHN0YXRlIGtleXMgYXJlIGFsd2F5cyBzaG9ydCBpZGVudGlmaWVyczsgYW55IGtleSBleGNlZWRpbmcgdGhlIGNhcFxuICAgKiBpcyBhbG1vc3QgY2VydGFpbmx5IG5vdCBhIGxlZ2l0aW1hdGUgc2NvcGUga2V5LCBzbyBza2lwcGluZyBwYXR0ZXJuIG1hdGNoaW5nXG4gICAqIGZvciBpdCBkb2VzIG5vdCByaXNrIGxlYWtpbmcgUElJLiBFeGFjdC1rZXkgbWF0Y2hpbmcgKEFycmF5LmluY2x1ZGVzKSBpc1xuICAgKiBzdGlsbCBhcHBsaWVkIHJlZ2FyZGxlc3Mgb2YgbGVuZ3RoIGFuZCBpcyBub3QgdnVsbmVyYWJsZSB0byBSZURvUy5cbiAgICovXG4gIHByaXZhdGUgX2lzUG9saWN5UmVkYWN0ZWQoa2V5OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBpZiAoIXRoaXMuX3JlZGFjdGlvblBvbGljeSkgcmV0dXJuIGZhbHNlO1xuICAgIGlmICh0aGlzLl9yZWRhY3Rpb25Qb2xpY3kua2V5cz8uaW5jbHVkZXMoa2V5KSkgcmV0dXJuIHRydWU7XG4gICAgaWYgKHRoaXMuX3JlZGFjdGlvblBvbGljeS5wYXR0ZXJucykge1xuICAgICAgaWYgKGtleS5sZW5ndGggPiBTY29wZUZhY2FkZS5fTUFYX1BBVFRFUk5fS0VZX0xFTikge1xuICAgICAgICAvLyBEZXYtbW9kZSB3YXJuaW5nOiBwYXR0ZXJuIG1hdGNoaW5nIHdhcyBzaWxlbnRseSBza2lwcGVkIGZvciB0aGlzIGtleS5cbiAgICAgICAgLy8gVXNlIHBvbGljeS5rZXlzIGZvciBleGFjdCBtYXRjaGluZyBvZiBsb25nIGtleSBuYW1lcy5cbiAgICAgICAgaWYgKGlzRGV2TW9kZSgpKSB7XG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgICBgW2Zvb3RwcmludF0gUmVkYWN0aW9uUG9saWN5OiBrZXkgJyR7a2V5LnNsaWNlKDAsIDQwKX0uLi4nICgke2tleS5sZW5ndGh9IGNoYXJzKSBleGNlZWRzIGAgK1xuICAgICAgICAgICAgICAndGhlIHBhdHRlcm4tbWF0Y2hpbmcgbGVuZ3RoIGNhcCBhbmQgd2FzIHNraXBwZWQuICcgK1xuICAgICAgICAgICAgICAnVXNlIHBvbGljeS5rZXlzIGZvciBleGFjdCBtYXRjaGluZyBvZiBsb25nIGtleSBuYW1lcy4nLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZvciAoY29uc3QgcCBvZiB0aGlzLl9yZWRhY3Rpb25Qb2xpY3kucGF0dGVybnMpIHtcbiAgICAgICAgICBwLmxhc3RJbmRleCA9IDA7IC8vIFJlc2V0IHN0YXRlZnVsIGdsb2JhbC9zdGlja3kgcmVnZXhlc1xuICAgICAgICAgIGlmIChwLnRlc3Qoa2V5KSkgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIE1heGltdW0ga2V5IGxlbmd0aCAoY2hhcmFjdGVycykgdGhhdCB3aWxsIGJlIHRlc3RlZCBhZ2FpbnN0IHJlZ2V4IHJlZGFjdGlvblxuICAgKiBwYXR0ZXJucy4gS2V5cyBsb25nZXIgdGhhbiB0aGlzIGFyZSBza2lwcGVkIGZvciBwYXR0ZXJuIG1hdGNoaW5nIHRvIHByZXZlbnRcbiAgICogUmVEb1M6IGEgcGF0aG9sb2dpY2FsIHJlZ2V4IHRlc3RlZCBhZ2FpbnN0IGFuIHVuYm91bmRlZGx5IGxvbmcga2V5IHN0cmluZ1xuICAgKiBjYW4gY2F1c2UgY2F0YXN0cm9waGljIGJhY2t0cmFja2luZy5cbiAgICpcbiAgICogMjU2IGNoYXJhY3RlcnMgY29tZm9ydGFibHkgZXhjZWVkcyBhbnkgcmVhbGlzdGljIHNjb3BlLXN0YXRlIGtleSBuYW1lLlxuICAgKi9cbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX01BWF9QQVRURVJOX0tFWV9MRU4gPSAyNTY7XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYSBkZWVwLWNsb25lZCBjb3B5IHdpdGggc3BlY2lmaWVkIGZpZWxkcyByZXBsYWNlZCBieSAnW1JFREFDVEVEXScuXG4gICAqIFN1cHBvcnRzIGRvdC1ub3RhdGlvbiBwYXRocyAoZS5nLiAnYWRkcmVzcy56aXAnKSBmb3IgbmVzdGVkIG9iamVjdHMuXG4gICAqL1xuICBwcml2YXRlIF9zY3J1YkZpZWxkcyhvYmo6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LCBmaWVsZHM6IFNldDxzdHJpbmc+KTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4ge1xuICAgIGNvbnN0IGNvcHkgPSBzdHJ1Y3R1cmVkQ2xvbmUob2JqKTtcbiAgICBmb3IgKGNvbnN0IGZpZWxkIG9mIGZpZWxkcykge1xuICAgICAgaWYgKGZpZWxkLmluY2x1ZGVzKCcuJykgJiYgIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChjb3B5LCBmaWVsZCkpIHtcbiAgICAgICAgLy8gRG90LW5vdGF0aW9uIHBhdGgg4oaSIGRlZXAgc2NydWIgKG9ubHkgaWYgbm90IGEgbGl0ZXJhbCBmbGF0IGtleSlcbiAgICAgICAgaWYgKGxvZGFzaEhhcyhjb3B5LCBmaWVsZCkpIHtcbiAgICAgICAgICBsb2Rhc2hTZXQoY29weSwgZmllbGQsICdbUkVEQUNURURdJyk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoY29weSwgZmllbGQpKSB7XG4gICAgICAgICAgY29weVtmaWVsZF0gPSAnW1JFREFDVEVEXSc7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGNvcHk7XG4gIH1cblxuICBwcml2YXRlIF9pbnZva2VIb29rKGhvb2s6IGtleW9mIE9taXQ8UmVjb3JkZXIsICdpZCc+LCBldmVudDogdW5rbm93bik6IHZvaWQge1xuICAgIGZvciAoY29uc3QgcmVjb3JkZXIgb2YgdGhpcy5fcmVjb3JkZXJzKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBob29rRm4gPSByZWNvcmRlcltob29rXTtcbiAgICAgICAgaWYgKHR5cGVvZiBob29rRm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAoaG9va0ZuIGFzIChldmVudDogdW5rbm93bikgPT4gdm9pZCkuY2FsbChyZWNvcmRlciwgZXZlbnQpO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBpZiAoaG9vayAhPT0gJ29uRXJyb3InKSB7XG4gICAgICAgICAgdGhpcy5faW52b2tlSG9vaygnb25FcnJvcicsIHtcbiAgICAgICAgICAgIHN0YWdlTmFtZTogdGhpcy5fc3RhZ2VOYW1lLFxuICAgICAgICAgICAgc3RhZ2VJZDogdGhpcy5fc3RhZ2VDb250ZXh0LnN0YWdlSWQsXG4gICAgICAgICAgICBydW50aW1lU3RhZ2VJZDogdGhpcy5fc3RhZ2VDb250ZXh0LnJ1bnRpbWVTdGFnZUlkLFxuICAgICAgICAgICAgcGlwZWxpbmVJZDogdGhpcy5fc3RhZ2VDb250ZXh0LnJ1bklkLFxuICAgICAgICAgICAgdGltZXN0YW1wOiBEYXRlLm5vdygpLFxuICAgICAgICAgICAgZXJyb3I6IGVycm9yIGFzIEVycm9yLFxuICAgICAgICAgICAgb3BlcmF0aW9uOiBob29rID09PSAnb25SZWFkJyA/ICdyZWFkJyA6IGhvb2sgPT09ICdvbkNvbW1pdCcgPyAnY29tbWl0JyA6ICd3cml0ZScsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiJdfQ==
|
|
638
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2NvcGVGYWNhZGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3Njb3BlL1Njb3BlRmFjYWRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7Ozs7Ozs7Ozs7R0FjRzs7O0FBRUgsaURBRzRCO0FBRTVCLHFEQUFzRjtBQUV0RiwyREFBc0U7QUFDdEUsb0VBQW9GO0FBR3BGLE1BQWEsV0FBVztJQUNmLE1BQU0sQ0FBVSxLQUFLLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBRTVEOzs7O09BSUc7SUFDSyxNQUFNLENBQVUsbUJBQW1CLEdBQXNCLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7SUFFekUsYUFBYSxDQUFlO0lBQzVCLFVBQVUsQ0FBUztJQUNWLGVBQWUsQ0FBVztJQUU3QywrRUFBK0U7SUFDOUQsV0FBVyxDQUEwQjtJQUV0RCx5RUFBeUU7SUFDeEQsYUFBYSxDQUF5QjtJQUUvQyxVQUFVLEdBQW9CLEVBQUUsQ0FBQztJQUNqQyxhQUFhLENBQWM7SUFDM0IsZ0JBQWdCLENBQThCO0lBQzlDLG9CQUFvQixHQUE2QixJQUFJLEdBQUcsRUFBRSxDQUFDO0lBRW5FLFlBQVksT0FBcUIsRUFBRSxTQUFpQixFQUFFLGNBQXdCLEVBQUUsWUFBMkI7UUFDekcsSUFBSSxDQUFDLGFBQWEsR0FBRyxPQUFPLENBQUM7UUFDN0IsSUFBSSxDQUFDLFVBQVUsR0FBRyxTQUFTLENBQUM7UUFDNUIsSUFBSSxDQUFDLGVBQWUsR0FBRyxjQUFjLENBQUM7UUFDdEMsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFBLG1DQUFnQixFQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQ3BELElBQUksQ0FBQyxhQUFhLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEdBQUcsWUFBWSxFQUFFLENBQUMsQ0FBQztRQUN4RCxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksR0FBRyxFQUFV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QyxDQUFDO2dCQUNMLENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7O0FBbHJCSCxrQ0FtckJDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBTY29wZUZhY2FkZSDigJQgQmFzZSBjbGFzcyB0aGF0IGxpYnJhcnkgY29uc3VtZXJzIGV4dGVuZCB0byBjcmVhdGUgY3VzdG9tIHNjb3BlIGNsYXNzZXNcbiAqXG4gKiBXcmFwcyBTdGFnZUNvbnRleHQgKGZyb20gbWVtb3J5LykgdG8gcHJvdmlkZSBhIGNvbnN1bWVyLWZyaWVuZGx5IEFQSSBmb3JcbiAqIHN0YXRlIGFjY2VzcywgZGVidWcgbG9nZ2luZywgbWV0cmljcywgYW5kIHJlY29yZGVyIGhvb2tzLlxuICpcbiAqIENvbnN1bWVycyBleHRlbmQgdGhpcyBjbGFzcyB0byBhZGQgZG9tYWluLXNwZWNpZmljIHByb3BlcnRpZXM6XG4gKlxuICogYGBgdHlwZXNjcmlwdFxuICogY2xhc3MgTXlTY29wZSBleHRlbmRzIFNjb3BlRmFjYWRlIHtcbiAqICAgZ2V0IHVzZXJOYW1lKCk6IHN0cmluZyB7IHJldHVybiB0aGlzLmdldFZhbHVlKCduYW1lJykgYXMgc3RyaW5nOyB9XG4gKiAgIHNldCB1c2VyTmFtZSh2YWx1ZTogc3RyaW5nKSB7IHRoaXMuc2V0VmFsdWUoJ25hbWUnLCB2YWx1ZSk7IH1cbiAqIH1cbiAqIGBgYFxuICovXG5cbmltcG9ydCB7XG4gIGRldGFjaEFuZEZvcmdldCBhcyBkZXRhY2hBbmRGb3JnZXRTcGF3bixcbiAgZGV0YWNoQW5kSm9pbkxhdGVyIGFzIGRldGFjaEFuZEpvaW5MYXRlclNwYXduLFxufSBmcm9tICcuLi9kZXRhY2gvc3Bhd24uanMnO1xuaW1wb3J0IHR5cGUgeyBFeGVjdXRpb25FbnYgfSBmcm9tICcuLi9lbmdpbmUvdHlwZXMuanMnO1xuaW1wb3J0IHsgbmF0aXZlSGFzIGFzIGxvZGFzaEhhcywgbmF0aXZlU2V0IGFzIGxvZGFzaFNldCB9IGZyb20gJy4uL21lbW9yeS9wYXRoT3BzLmpzJztcbmltcG9ydCB7IFN0YWdlQ29udGV4dCB9IGZyb20gJy4uL21lbW9yeS9TdGFnZUNvbnRleHQuanMnO1xuaW1wb3J0IHsgaGFzQ2lyY3VsYXJSZWZlcmVuY2UsIGlzRGV2TW9kZSB9IGZyb20gJy4vZGV0ZWN0Q2lyY3VsYXIuanMnO1xuaW1wb3J0IHsgYXNzZXJ0Tm90UmVhZG9ubHksIGNyZWF0ZUZyb3plbkFyZ3MgfSBmcm9tICcuL3Byb3RlY3Rpb24vcmVhZG9ubHlJbnB1dC5qcyc7XG5pbXBvcnQgdHlwZSB7IENvbW1pdEV2ZW50LCBSZWRhY3Rpb25Qb2xpY3ksIFJlZGFjdGlvblJlcG9ydCwgU2NvcGVSZWNvcmRlciB9IGZyb20gJy4vdHlwZXMuanMnO1xuXG5leHBvcnQgY2xhc3MgU2NvcGVGYWNhZGUge1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEJSQU5EID0gU3ltYm9sLmZvcignU2NvcGVGYWNhZGVAdjEnKTtcblxuICAvKipcbiAgICogU2hhcmVkIHNlbnRpbmVsIHJldHVybmVkIGJ5IGBfZ2V0U3ViZmxvd1BhdGgoKWAgZm9yIHJvb3QtbGV2ZWwgc3RhZ2VzXG4gICAqIChubyBzdWJmbG93IG5lc3RpbmcpLiBBdm9pZHMgcGVyLWNhbGwgYWxsb2NhdGlvbiBvZiBhIGZyZXNoXG4gICAqIGBPYmplY3QuZnJlZXplKFtdKWAgb24gZXZlcnkgYGVtaXRFdmVudGAgaW4gdGhlIGNvbW1vbiBuby1zdWJmbG93IGNhc2UuXG4gICAqL1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfRU1QVFlfU1VCRkxPV19QQVRIOiByZWFkb25seSBzdHJpbmdbXSA9IE9iamVjdC5mcmVlemUoW10pO1xuXG4gIHByb3RlY3RlZCBfc3RhZ2VDb250ZXh0OiBTdGFnZUNvbnRleHQ7XG4gIHByb3RlY3RlZCBfc3RhZ2VOYW1lOiBzdHJpbmc7XG4gIHByb3RlY3RlZCByZWFkb25seSBfcmVhZE9ubHlWYWx1ZXM/OiB1bmtub3duO1xuXG4gIC8qKiBDYWNoZWQgZGVlcGx5LWZyb3plbiBjb3B5IG9mIHJlYWRPbmx5VmFsdWVzIGZvciBnZXRBcmdzKCkuIENyZWF0ZWQgb25jZS4gKi9cbiAgcHJpdmF0ZSByZWFkb25seSBfZnJvemVuQXJnczogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG5cbiAgLyoqIEV4ZWN1dGlvbiBlbnZpcm9ubWVudCDigJQgcmVhZC1vbmx5LCBpbmhlcml0ZWQgZnJvbSBwYXJlbnQgZXhlY3V0b3IuICovXG4gIHByaXZhdGUgcmVhZG9ubHkgX2V4ZWN1dGlvbkVudjogUmVhZG9ubHk8RXhlY3V0aW9uRW52PjtcblxuICBwcml2YXRlIF9yZWNvcmRlcnM6IFNjb3BlUmVjb3JkZXJbXSA9IFtdO1xuICBwcml2YXRlIF9yZWRhY3RlZEtleXM6IFNldDxzdHJpbmc+O1xuICBwcml2YXRlIF9yZWRhY3Rpb25Qb2xpY3k6IFJlZGFjdGlvblBvbGljeSB8IHVuZGVmaW5lZDtcbiAgcHJpdmF0ZSBfcmVkYWN0ZWRGaWVsZHNCeUtleTogTWFwPHN0cmluZywgU2V0PHN0cmluZz4+ID0gbmV3IE1hcCgpO1xuXG4gIGNvbnN0cnVjdG9yKGNvbnRleHQ6IFN0YWdlQ29udGV4dCwgc3RhZ2VOYW1lOiBzdHJpbmcsIHJlYWRPbmx5VmFsdWVzPzogdW5rbm93biwgZXhlY3V0aW9uRW52PzogRXhlY3V0aW9uRW52KSB7XG4gICAgdGhpcy5fc3RhZ2VDb250ZXh0ID0gY29udGV4dDtcbiAgICB0aGlzLl9zdGFnZU5hbWUgPSBzdGFnZU5hbWU7XG4gICAgdGhpcy5fcmVhZE9ubHlWYWx1ZXMgPSByZWFkT25seVZhbHVlcztcbiAgICB0aGlzLl9mcm96ZW5BcmdzID0gY3JlYXRlRnJvemVuQXJncyhyZWFkT25seVZhbHVlcyk7XG4gICAgdGhpcy5fZXhlY3V0aW9uRW52ID0gT2JqZWN0LmZyZWV6ZSh7IC4uLmV4ZWN1dGlvbkVudiB9KTtcbiAgICB0aGlzLl9yZWRhY3RlZEtleXMgPSBuZXcgU2V0PHN0cmluZz4oKTtcblxuICAgIC8vIFJlZ2lzdGVyIGFzIGNvbW1pdCBvYnNlcnZlciBzbyBTY29wZVJlY29yZGVyLm9uQ29tbWl0IGZpcmVzIHdoZW4gU3RhZ2VDb250ZXh0LmNvbW1pdCgpIGlzIGNhbGxlZFxuICAgIHRoaXMuX3N0YWdlQ29udGV4dC5zZXRDb21taXRPYnNlcnZlcigobXV0YXRpb25zKSA9PiB7XG4gICAgICB0aGlzLl9vbkNvbW1pdEZpcmVkKG11dGF0aW9ucyk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogU2hhcmUgYSByZWRhY3RlZC1rZXlzIHNldCBhY3Jvc3MgbXVsdGlwbGUgU2NvcGVGYWNhZGUgaW5zdGFuY2VzLlxuICAgKiBDYWxsIHRoaXMgdG8gbWFrZSByZWRhY3Rpb24gcGVyc2lzdCBhY3Jvc3Mgc3RhZ2VzIGluIHRoZSBzYW1lIHBpcGVsaW5lLlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHVzZVNoYXJlZFJlZGFjdGVkS2V5cyhzaGFyZWRTZXQ6IFNldDxzdHJpbmc+KTogdm9pZCB7XG4gICAgdGhpcy5fcmVkYWN0ZWRLZXlzID0gc2hhcmVkU2V0O1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGN1cnJlbnQgcmVkYWN0ZWQta2V5cyBzZXQgKGZvciBzaGFyaW5nIHdpdGggb3RoZXIgc2NvcGVzKS5cbiAgICogQGludGVybmFsXG4gICAqL1xuICBnZXRSZWRhY3RlZEtleXMoKTogU2V0PHN0cmluZz4ge1xuICAgIHJldHVybiB0aGlzLl9yZWRhY3RlZEtleXM7XG4gIH1cblxuICAvKipcbiAgICogQXBwbHkgYSBkZWNsYXJhdGl2ZSByZWRhY3Rpb24gcG9saWN5LiBUaGUgcG9saWN5IGlzIGFkZGl0aXZlIOKAlFxuICAgKiBpdCB3b3JrcyBhbG9uZ3NpZGUgbWFudWFsIGBzZXRWYWx1ZSguLi4sIHRydWUpYCBjYWxscy5cbiAgICogQGludGVybmFsXG4gICAqL1xuICB1c2VSZWRhY3Rpb25Qb2xpY3kocG9saWN5OiBSZWRhY3Rpb25Qb2xpY3kpOiB2b2lkIHtcbiAgICB0aGlzLl9yZWRhY3Rpb25Qb2xpY3kgPSBwb2xpY3k7XG4gICAgLy8gUHJlLXBvcHVsYXRlIGZpZWxkLWxldmVsIHJlZGFjdGlvbiBtYXAgZnJvbSBwb2xpY3lcbiAgICBpZiAocG9saWN5LmZpZWxkcykge1xuICAgICAgZm9yIChjb25zdCBba2V5LCBmaWVsZHNdIG9mIE9iamVjdC5lbnRyaWVzKHBvbGljeS5maWVsZHMpKSB7XG4gICAgICAgIHRoaXMuX3JlZGFjdGVkRmllbGRzQnlLZXkuc2V0KGtleSwgbmV3IFNldChmaWVsZHMpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKiogQGludGVybmFsICovXG4gIGdldFJlZGFjdGlvblBvbGljeSgpOiBSZWRhY3Rpb25Qb2xpY3kgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9yZWRhY3Rpb25Qb2xpY3k7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhIGNvbXBsaWFuY2UtZnJpZW5kbHkgcmVwb3J0IG9mIGFsbCByZWRhY3Rpb24gYWN0aXZpdHkuXG4gICAqIE5ldmVyIGluY2x1ZGVzIGFjdHVhbCB2YWx1ZXMg4oCUIG9ubHkga2V5IG5hbWVzLCBmaWVsZCBuYW1lcywgYW5kIHBhdHRlcm5zLlxuICAgKi9cbiAgZ2V0UmVkYWN0aW9uUmVwb3J0KCk6IFJlZGFjdGlvblJlcG9ydCB7XG4gICAgY29uc3QgZmllbGRSZWRhY3Rpb25zOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmdbXT4gPSB7fTtcbiAgICBmb3IgKGNvbnN0IFtrZXksIGZpZWxkc10gb2YgdGhpcy5fcmVkYWN0ZWRGaWVsZHNCeUtleSkge1xuICAgICAgZmllbGRSZWRhY3Rpb25zW2tleV0gPSBbLi4uZmllbGRzXTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIHJlZGFjdGVkS2V5czogWy4uLnRoaXMuX3JlZGFjdGVkS2V5c10sXG4gICAgICBmaWVsZFJlZGFjdGlvbnMsXG4gICAgICBwYXR0ZXJuczogKHRoaXMuX3JlZGFjdGlvblBvbGljeT8ucGF0dGVybnMgPz8gW10pLm1hcCgocCkgPT4gcC5zb3VyY2UpLFxuICAgIH07XG4gIH1cblxuICAvLyDilIDilIAgU2NvcGVSZWNvcmRlciBNYW5hZ2VtZW50IOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4gIGF0dGFjaFNjb3BlUmVjb3JkZXIocmVjb3JkZXI6IFNjb3BlUmVjb3JkZXIpOiB2b2lkIHtcbiAgICAvLyBSZXBsYWNlIGV4aXN0aW5nIHJlY29yZGVyIHdpdGggc2FtZSBJRCAoaWRlbXBvdGVudCDigJQgcHJldmVudHMgZG91YmxlLWNvdW50aW5nKVxuICAgIHRoaXMuX3JlY29yZGVycyA9IHRoaXMuX3JlY29yZGVycy5maWx0ZXIoKHIpID0+IHIuaWQgIT09IHJlY29yZGVyLmlkKTtcbiAgICB0aGlzLl9yZWNvcmRlcnMucHVzaChyZWNvcmRlcik7XG4gIH1cblxuICBkZXRhY2hTY29wZVJlY29yZGVyKHJlY29yZGVySWQ6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuX3JlY29yZGVycyA9IHRoaXMuX3JlY29yZGVycy5maWx0ZXIoKHIpID0+IHIuaWQgIT09IHJlY29yZGVySWQpO1xuICB9XG5cbiAgZ2V0U2NvcGVSZWNvcmRlcnMoKTogU2NvcGVSZWNvcmRlcltdIHtcbiAgICByZXR1cm4gWy4uLnRoaXMuX3JlY29yZGVyc107XG4gIH1cblxuICAvKiogQGludGVybmFsICovXG4gIG5vdGlmeVN0YWdlU3RhcnQoKTogdm9pZCB7XG4gICAgdGhpcy5faW52b2tlSG9vaygnb25TdGFnZVN0YXJ0Jywge1xuICAgICAgc3RhZ2VOYW1lOiB0aGlzLl9zdGFnZU5hbWUsXG4gICAgICBzdGFnZUlkOiB0aGlzLl9zdGFnZUNvbnRleHQuc3RhZ2VJZCxcbiAgICAgIHJ1bnRpbWVTdGFnZUlkOiB0aGlzLl9zdGFnZUNvbnRleHQucnVudGltZVN0YWdlSWQsXG4gICAgICBwaXBlbGluZUlkOiB0aGlzLl9zdGFnZUNvbnRleHQucnVuSWQsXG4gICAgICB0aW1lc3RhbXA6IERhdGUubm93KCksXG4gICAgfSk7XG4gIH1cblxuICAvKiogQGludGVybmFsICovXG4gIG5vdGlmeVN0YWdlRW5kKGR1cmF0aW9uPzogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5faW52b2tlSG9vaygnb25TdGFnZUVuZCcsIHtcbiAgICAgIHN0YWdlTmFtZTogdGhpcy5fc3RhZ2VOYW1lLFxuICAgICAgc3RhZ2VJZDogdGhpcy5fc3RhZ2VDb250ZXh0LnN0YWdlSWQsXG4gICAgICBydW50aW1lU3RhZ2VJZDogdGhpcy5fc3RhZ2VDb250ZXh0LnJ1bnRpbWVTdGFnZUlkLFxuICAgICAgcGlwZWxpbmVJZDogdGhpcy5fc3RhZ2VDb250ZXh0LnJ1bklkLFxuICAgICAgdGltZXN0YW1wOiBEYXRlLm5vdygpLFxuICAgICAgZHVyYXRpb24sXG4gICAgfSk7XG4gIH1cblxuICAvKiogQGludGVybmFsICovXG4gIG5vdGlmeVBhdXNlKHBhdXNlRGF0YT86IHVua25vd24pOiB2b2lkIHtcbiAgICB0aGlzLl9pbnZva2VIb29rKCdvblBhdXNlJywge1xuICAgICAgc3RhZ2VOYW1lOiB0aGlzLl9zdGFnZU5hbWUsXG4gICAgICBzdGFnZUlkOiB0aGlzLl9zdGFnZUNvbnRleHQuc3RhZ2VJZCxcbiAgICAgIHJ1bnRpbWVTdGFnZUlkOiB0aGlzLl9zdGFnZUNvbnRleHQucnVudGltZVN0YWdlSWQsXG4gICAgICBwaXBlbGluZUlkOiB0aGlzLl9zdGFnZUNvbnRleHQucnVuSWQsXG4gICAgICB0aW1lc3RhbXA6IERhdGUubm93KCksXG4gICAgICBwYXVzZURhdGEsXG4gICAgfSk7XG4gIH1cblxuICAvKiogQGludGVybmFsICovXG4gIG5vdGlmeVJlc3VtZShoYXNJbnB1dDogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuX2ludm9rZUhvb2soJ29uUmVzdW1lJywge1xuICAgICAgc3RhZ2VOYW1lOiB0aGlzLl9zdGFnZU5hbWUsXG4gICAgICBzdGFnZUlkOiB0aGlzLl9zdGFnZUNvbnRleHQuc3RhZ2VJZCxcbiAgICAgIHJ1bnRpbWVTdGFnZUlkOiB0aGlzLl9zdGFnZUNvbnRleHQucnVudGltZVN0YWdlSWQsXG4gICAgICBwaXBlbGluZUlkOiB0aGlzLl9zdGFnZUNvbnRleHQucnVuSWQsXG4gICAgICB0aW1lc3RhbXA6IERhdGUubm93KCksXG4gICAgICBoYXNJbnB1dCxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKiBAaW50ZXJuYWwgKi9cbiAgbm90aWZ5Q29tbWl0KG11dGF0aW9uczogQ29tbWl0RXZlbnRbJ211dGF0aW9ucyddKTogdm9pZCB7XG4gICAgdGhpcy5faW52b2tlSG9vaygnb25Db21taXQnLCB7XG4gICAgICBzdGFnZU5hbWU6IHRoaXMuX3N0YWdlTmFtZSxcbiAgICAgIHN0YWdlSWQ6IHRoaXMuX3N0YWdlQ29udGV4dC5zdGFnZUlkLFxuICAgICAgcnVudGltZVN0YWdlSWQ6IHRoaXMuX3N0YWdlQ29udGV4dC5ydW50aW1lU3RhZ2VJZCxcbiAgICAgIHBpcGVsaW5lSWQ6IHRoaXMuX3N0YWdlQ29udGV4dC5ydW5JZCxcbiAgICAgIHRpbWVzdGFtcDogRGF0ZS5ub3coKSxcbiAgICAgIG11dGF0aW9ucyxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKiBDYWxsZWQgYnkgU3RhZ2VDb250ZXh0LmNvbW1pdCgpIG9ic2VydmVyLiBDb252ZXJ0cyB0cmFja2VkIHdyaXRlcyB0byBDb21taXRFdmVudCBmb3JtYXQuXG4gICAqICBFcnJvcnMgYXJlIGNhdWdodCB0byBwcmV2ZW50IHJlY29yZGVyIGlzc3VlcyBmcm9tIGFib3J0aW5nIHRoZSB0cmF2ZXJzYWwuICovXG4gIHByaXZhdGUgX29uQ29tbWl0RmlyZWQobXV0YXRpb25zOiBSZWNvcmQ8c3RyaW5nLCB7IHZhbHVlOiB1bmtub3duOyBvcGVyYXRpb246ICdzZXQnIHwgJ3VwZGF0ZScgfCAnZGVsZXRlJyB9Pik6IHZvaWQge1xuICAgIGlmICh0aGlzLl9yZWNvcmRlcnMubGVuZ3RoID09PSAwKSByZXR1cm47XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgY29tbWl0TXV0YXRpb25zOiBDb21taXRFdmVudFsnbXV0YXRpb25zJ10gPSBPYmplY3QuZW50cmllcyhtdXRhdGlvbnMpLm1hcCgoW2tleSwgZW50cnldKSA9PiB7XG4gICAgICAgIGNvbnN0IGlzUmVkYWN0ZWQgPSB0aGlzLl9pc0tleVJlZGFjdGVkKGtleSkgfHwgdGhpcy5faXNQb2xpY3lSZWRhY3RlZChrZXkpO1xuICAgICAgICBjb25zdCBmaWVsZFNldCA9IHRoaXMuX3JlZGFjdGVkRmllbGRzQnlLZXkuZ2V0KGtleSk7XG5cbiAgICAgICAgbGV0IHJlY29yZGVyVmFsdWU6IHVua25vd247XG4gICAgICAgIGlmIChpc1JlZGFjdGVkKSB7XG4gICAgICAgICAgcmVjb3JkZXJWYWx1ZSA9ICdbUkVEQUNURURdJztcbiAgICAgICAgfSBlbHNlIGlmIChmaWVsZFNldCAmJiBlbnRyeS52YWx1ZSAmJiB0eXBlb2YgZW50cnkudmFsdWUgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgcmVjb3JkZXJWYWx1ZSA9IHRoaXMuX3NjcnViRmllbGRzKGVudHJ5LnZhbHVlIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+LCBmaWVsZFNldCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVjb3JkZXJWYWx1ZSA9IGVudHJ5LnZhbHVlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBrZXksXG4gICAgICAgICAgdmFsdWU6IHJlY29yZGVyVmFsdWUsXG4gICAgICAgICAgb3BlcmF0aW9uOiBlbnRyeS5vcGVyYXRpb24sXG4gICAgICAgIH07XG4gICAgICB9KTtcblxuICAgICAgdGhpcy5ub3RpZnlDb21taXQoY29tbWl0TXV0YXRpb25zKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vIFN3YWxsb3cg4oCUIHJlY29yZGVyIGVycm9ycyBtdXN0IG5vdCBhYm9ydCB0aGUgdHJhdmVyc2FsLlxuICAgICAgLy8gSW5kaXZpZHVhbCByZWNvcmRlciBlcnJvcnMgYXJlIGFscmVhZHkgaXNvbGF0ZWQgYnkgX2ludm9rZUhvb2suXG4gICAgfVxuICB9XG5cbiAgLy8g4pSA4pSAIERlYnVnIC8gRGlhZ25vc3RpY3Mg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4gIC8vXG4gIC8vIFRoZXNlIGxlZ2FjeSBtZXRob2RzIHN0aWxsIHdyaXRlIHRvIHRoZSBgU3RhZ2VDb250ZXh0YCBkaWFnbm9zdGljXG4gIC8vIHNpZGUgYmFncyAobG9nQ29udGV4dCAvIGVycm9yQ29udGV4dCAvIG1ldHJpY0NvbnRleHQgLyBldmFsQ29udGV4dCkgZm9yXG4gIC8vIHNuYXBzaG90IGluY2x1c2lvbi4gVGhleSBBTFNPIGZpcmUgdGhyb3VnaCB0aGUgRW1pdCBjaGFubmVsIHNvIGFueVxuICAvLyBhdHRhY2hlZCBgRW1pdFJlY29yZGVyYCBzZWVzIHRoZW0gaW4gcmVhbCB0aW1lIOKAlCBjbG9zaW5nIHRoZVxuICAvLyBsb25nLXN0YW5kaW5nIGdhcCB3aGVyZSBgJGRlYnVnYC9gJG1ldHJpY2Agd2VudCB0byB1bm9ic2VydmVkIGJhZ3MuXG5cbiAgYWRkRGVidWdJbmZvKGtleTogc3RyaW5nLCB2YWx1ZTogdW5rbm93bikge1xuICAgIHRoaXMuX3N0YWdlQ29udGV4dC5hZGRMb2coa2V5LCB2YWx1ZSk7XG4gICAgdGhpcy5lbWl0RXZlbnQoYGxvZy5kZWJ1Zy4ke2tleX1gLCB7IGtleSwgdmFsdWUsIGxldmVsOiAnZGVidWcnIH0pO1xuICB9XG5cbiAgYWRkRGVidWdNZXNzYWdlKHZhbHVlOiB1bmtub3duKSB7XG4gICAgdGhpcy5fc3RhZ2VDb250ZXh0LmFkZExvZygnbWVzc2FnZXMnLCBbdmFsdWVdKTtcbiAgICB0aGlzLmVtaXRFdmVudCgnbG9nLmRlYnVnLm1lc3NhZ2VzJywgeyB2YWx1ZSwgbGV2ZWw6ICdkZWJ1ZycgfSk7XG4gIH1cblxuICBhZGRFcnJvckluZm8oa2V5OiBzdHJpbmcsIHZhbHVlOiB1bmtub3duKSB7XG4gICAgdGhpcy5fc3RhZ2VDb250ZXh0LmFkZEVycm9yKGtleSwgdmFsdWUpO1xuICAgIHRoaXMuZW1pdEV2ZW50KGBsb2cuZXJyb3IuJHtrZXl9YCwgeyBrZXksIHZhbHVlLCBsZXZlbDogJ2Vycm9yJyB9KTtcbiAgfVxuXG4gIGFkZE1ldHJpYyhtZXRyaWNOYW1lOiBzdHJpbmcsIHZhbHVlOiB1bmtub3duKSB7XG4gICAgdGhpcy5fc3RhZ2VDb250ZXh0LmFkZE1ldHJpYyhtZXRyaWNOYW1lLCB2YWx1ZSk7XG4gICAgdGhpcy5lbWl0RXZlbnQoYG1ldHJpYy4ke21ldHJpY05hbWV9YCwgeyBuYW1lOiBtZXRyaWNOYW1lLCB2YWx1ZSB9KTtcbiAgfVxuXG4gIGFkZEV2YWwobWV0cmljTmFtZTogc3RyaW5nLCB2YWx1ZTogdW5rbm93bikge1xuICAgIHRoaXMuX3N0YWdlQ29udGV4dC5hZGRFdmFsKG1ldHJpY05hbWUsIHZhbHVlKTtcbiAgICB0aGlzLmVtaXRFdmVudChgZXZhbC4ke21ldHJpY05hbWV9YCwgeyBuYW1lOiBtZXRyaWNOYW1lLCB2YWx1ZSB9KTtcbiAgfVxuXG4gIC8vIOKUgOKUgCBFbWl0IOKAlCBQaGFzZSAzIHByaW1hcnkgcHJpbWl0aXZlIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4gIC8qKlxuICAgKiBGaXJlIGEgc3RydWN0dXJlZCBldmVudCB0byBldmVyeSBhdHRhY2hlZCByZWNvcmRlciBpbXBsZW1lbnRpbmdcbiAgICogYG9uRW1pdGAuIFN5bmNocm9ub3VzLCBpbi1vcmRlciwgcGFzcy10aHJvdWdoIOKAlCBubyBidWZmZXJpbmcuXG4gICAqXG4gICAqIC0gKipGYXN0LXBhdGgqKjogemVybyBhbGxvY2F0aW9uICsgemVybyBjb3N0IHdoZW4gbm8gcmVjb3JkZXJzIGFyZVxuICAgKiAgIGF0dGFjaGVkIChlYXJseSByZXR1cm4gb24gZW1wdHkgbGlzdCkuXG4gICAqIC0gKipFbnJpY2htZW50Kio6IGxpYnJhcnkgYXV0by1hZGRzIGBzdGFnZU5hbWVgLCBgcnVudGltZVN0YWdlSWRgLFxuICAgKiAgIGBzdWJmbG93UGF0aGAsIGBwaXBlbGluZUlkYCwgYHRpbWVzdGFtcGAgdG8gdGhlIGV2ZW50LlxuICAgKiAtICoqUmVkYWN0aW9uKio6IGBSZWRhY3Rpb25Qb2xpY3kuZW1pdFBhdHRlcm5zYCByZWdleGVzIGFyZSBtYXRjaGVkXG4gICAqICAgYWdhaW5zdCBgbmFtZWAg4oCUIG1hdGNoZWQgZXZlbnRzIGhhdmUgdGhlaXIgcGF5bG9hZCByZXBsYWNlZCB3aXRoXG4gICAqICAgYCdbUkVEQUNURURdJ2AgYmVmb3JlIGRpc3BhdGNoLlxuICAgKiAtICoqRXJyb3IgaXNvbGF0aW9uKio6IGEgdGhyb3dpbmcgYG9uRW1pdGAgZG9lcyBub3QgcHJvcGFnYXRlIOKAlCBpdCBpc1xuICAgKiAgIGNhdWdodCBhbmQgcm91dGVkIHRvIGBvbkVycm9yYCBvbiByZW1haW5pbmcgcmVjb3JkZXJzLCBtYXRjaGluZyB0aGVcbiAgICogICBwYXR0ZXJuIHVzZWQgYnkgb3RoZXIgc2NvcGUgZXZlbnRzLlxuICAgKlxuICAgKiBDb25zdW1lcnMgY2FsbCB0aGlzIHZpYSB0aGUgYHNjb3BlLiRlbWl0KG5hbWUsIHBheWxvYWQpYCBzY29wZSBtZXRob2Q7XG4gICAqIHRoZSBtZXRob2Qgcm91dGVzIGhlcmUgdmlhIGBjcmVhdGVUeXBlZFNjb3BlYC5cbiAgICovXG4gIGVtaXRFdmVudChuYW1lOiBzdHJpbmcsIHBheWxvYWQ6IHVua25vd24pOiB2b2lkIHtcbiAgICAvLyBGYXN0LXBhdGg6IHplcm8gd29yayB3aGVuIG5vIHJlY29yZGVycyBhcmUgYXR0YWNoZWQuXG4gICAgaWYgKHRoaXMuX3JlY29yZGVycy5sZW5ndGggPT09IDApIHJldHVybjtcblxuICAgIC8vIFJlZGFjdGlvbjogaWYgdGhlIGV2ZW50IG5hbWUgbWF0Y2hlcyBhbnkgZW1pdFBhdHRlcm4sIHJlcGxhY2UgcGF5bG9hZFxuICAgIC8vIHdpdGggJ1tSRURBQ1RFRF0nIEJFRk9SRSBjb25zdHJ1Y3RpbmcgdGhlIGV2ZW50IChubyBsZWFrIHRocm91Z2hcbiAgICAvLyBjb3B5LW9uLXdyaXRlLCBubyB3YXkgZm9yIHJlY29yZGVycyB0byBzZWUgdGhlIHJhdyB2YWx1ZSkuXG4gICAgbGV0IGZpbmFsUGF5bG9hZDogdW5rbm93biA9IHBheWxvYWQ7XG4gICAgY29uc3QgcGF0dGVybnMgPSB0aGlzLl9yZWRhY3Rpb25Qb2xpY3k/LmVtaXRQYXR0ZXJucztcbiAgICBpZiAocGF0dGVybnMgJiYgcGF0dGVybnMubGVuZ3RoID4gMCkge1xuICAgICAgZm9yIChjb25zdCBwYXR0ZXJuIG9mIHBhdHRlcm5zKSB7XG4gICAgICAgIGlmIChwYXR0ZXJuLnRlc3QobmFtZSkpIHtcbiAgICAgICAgICBmaW5hbFBheWxvYWQgPSAnW1JFREFDVEVEXSc7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBCdWlsZCB0aGUgZW5yaWNoZWQgZXZlbnQgb25jZTsgcGFzcyB0aGUgc2FtZSByZWZlcmVuY2UgdG8gYWxsXG4gICAgLy8gcmVjb3JkZXJzLiBTaW5jZSBFbWl0RXZlbnQgaXMgYHJlYWRvbmx5YCwgc2hhcmluZyBpcyBzYWZlLlxuICAgIGNvbnN0IGV2ZW50ID0ge1xuICAgICAgbmFtZSxcbiAgICAgIHBheWxvYWQ6IGZpbmFsUGF5bG9hZCxcbiAgICAgIHN0YWdlTmFtZTogdGhpcy5fc3RhZ2VOYW1lLFxuICAgICAgcnVudGltZVN0YWdlSWQ6IHRoaXMuX3N0YWdlQ29udGV4dC5ydW50aW1lU3RhZ2VJZCxcbiAgICAgIHN1YmZsb3dQYXRoOiB0aGlzLl9nZXRTdWJmbG93UGF0aCgpLFxuICAgICAgcGlwZWxpbmVJZDogdGhpcy5fc3RhZ2VDb250ZXh0LnJ1bklkLFxuICAgICAgdGltZXN0YW1wOiBEYXRlLm5vdygpLFxuICAgIH0gYXMgY29uc3Q7XG5cbiAgICAvLyBEaXNwYXRjaCB3aXRoIGVycm9yIGlzb2xhdGlvbiDigJQgc2FtZSBwYXR0ZXJuIGFzIF9pbnZva2VIb29rIHVzZXMgZm9yXG4gICAgLy8gb3RoZXIgc2NvcGUgZXZlbnRzLiBBIHRocm93aW5nIHJlY29yZGVyJ3MgZXJyb3IgaXMgc3VyZmFjZWQgdmlhXG4gICAgLy8gb25FcnJvciBvbiB0aGUgb3RoZXIgcmVjb3JkZXJzOyB0aGUgZW1pdCBsb29wIGNvbnRpbnVlcyB1bmFmZmVjdGVkLlxuICAgIGZvciAoY29uc3QgcmVjb3JkZXIgb2YgdGhpcy5fcmVjb3JkZXJzKSB7XG4gICAgICBjb25zdCBvbkVtaXQgPSByZWNvcmRlci5vbkVtaXQ7XG4gICAgICBpZiAodHlwZW9mIG9uRW1pdCAhPT0gJ2Z1bmN0aW9uJykgY29udGludWU7XG4gICAgICB0cnkge1xuICAgICAgICBvbkVtaXQuY2FsbChyZWNvcmRlciwgZXZlbnQpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgdGhpcy5faW52b2tlSG9vaygnb25FcnJvcicsIHtcbiAgICAgICAgICBzdGFnZU5hbWU6IHRoaXMuX3N0YWdlTmFtZSxcbiAgICAgICAgICBzdGFnZUlkOiB0aGlzLl9zdGFnZUNvbnRleHQuc3RhZ2VJZCxcbiAgICAgICAgICBydW50aW1lU3RhZ2VJZDogdGhpcy5fc3RhZ2VDb250ZXh0LnJ1bnRpbWVTdGFnZUlkLFxuICAgICAgICAgIHBpcGVsaW5lSWQ6IHRoaXMuX3N0YWdlQ29udGV4dC5ydW5JZCxcbiAgICAgICAgICB0aW1lc3RhbXA6IERhdGUubm93KCksXG4gICAgICAgICAgZXJyb3I6IGVycm9yIGFzIEVycm9yLFxuICAgICAgICAgIG9wZXJhdGlvbjogJ3dyaXRlJyxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8g4pSA4pSAIERldGFjaCDigJQgZmlyZS1hbmQtZm9yZ2V0IGNoaWxkIGZsb3djaGFydCBleGVjdXRpb24g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4gIC8vXG4gIC8vIERlbGVnYXRlcyB0byB0aGUgc2hhcmVkIGBkZXRhY2gvc3Bhd25gIGhlbHBlciwgd2hpY2ggbWludHMgYSByZWZJZFxuICAvLyBmcm9tIHRoaXMgc3RhZ2UncyBgcnVudGltZVN0YWdlSWRgIGFuZCBjYWxscyBgZHJpdmVyLnNjaGVkdWxlKClgLlxuICAvLyBSb3V0ZWQgdGhyb3VnaCBgY3JlYXRlVHlwZWRTY29wZWAgYXMgYHNjb3BlLiRkZXRhY2hBbmRKb2luTGF0ZXIoLi4uKWBcbiAgLy8gYW5kIGBzY29wZS4kZGV0YWNoQW5kRm9yZ2V0KC4uLilgLlxuXG4gIC8qKiBTZWUgYFNjb3BlTWV0aG9kcy4kZGV0YWNoQW5kSm9pbkxhdGVyYC4gKi9cbiAgZGV0YWNoQW5kSm9pbkxhdGVyKFxuICAgIGRyaXZlcjogaW1wb3J0KCcuLi9kZXRhY2gvdHlwZXMuanMnKS5EZXRhY2hEcml2ZXIsXG4gICAgY2hpbGQ6IGltcG9ydCgnLi4vYnVpbGRlci90eXBlcy5qcycpLkZsb3dDaGFydCxcbiAgICBpbnB1dD86IHVua25vd24sXG4gICk6IGltcG9ydCgnLi4vZGV0YWNoL3R5cGVzLmpzJykuRGV0YWNoSGFuZGxlIHtcbiAgICByZXR1cm4gZGV0YWNoQW5kSm9pbkxhdGVyU3Bhd24oZHJpdmVyLCBjaGlsZCwgaW5wdXQsIHRoaXMuX3N0YWdlQ29udGV4dC5ydW50aW1lU3RhZ2VJZCk7XG4gIH1cblxuICAvKiogU2VlIGBTY29wZU1ldGhvZHMuJGRldGFjaEFuZEZvcmdldGAuICovXG4gIGRldGFjaEFuZEZvcmdldChcbiAgICBkcml2ZXI6IGltcG9ydCgnLi4vZGV0YWNoL3R5cGVzLmpzJykuRGV0YWNoRHJpdmVyLFxuICAgIGNoaWxkOiBpbXBvcnQoJy4uL2J1aWxkZXIvdHlwZXMuanMnKS5GbG93Q2hhcnQsXG4gICAgaW5wdXQ/OiB1bmtub3duLFxuICApOiB2b2lkIHtcbiAgICBkZXRhY2hBbmRGb3JnZXRTcGF3bihkcml2ZXIsIGNoaWxkLCBpbnB1dCwgdGhpcy5fc3RhZ2VDb250ZXh0LnJ1bnRpbWVTdGFnZUlkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCdWlsZCB0aGUgc3ViZmxvd1BhdGggKG91dGVyIOKGkiBpbm5lcikgZm9yIGV2ZW50IGVucmljaG1lbnQuXG4gICAqXG4gICAqIFBhcnNlcyBmcm9tIGBydW50aW1lU3RhZ2VJZGAgd2hpY2ggaGFzIHRoZSBmb3JtYXRcbiAgICogYFtzdWJmbG93UGF0aC9dc3RhZ2VJZCNleGVjdXRpb25JbmRleGAgKHNlZSBgbGliL2VuZ2luZS9ydW50aW1lU3RhZ2VJZC50c2ApLlxuICAgKiBTdWJmbG93IGlzb2xhdGlvbiBwcmV2ZW50cyB3YWxraW5nIHRoZSBwYXJlbnQtY2hhaW4gYWNyb3NzIGJvdW5kYXJpZXMsXG4gICAqIHNvIHRoZSBydW50aW1lU3RhZ2VJZCDigJQgZ2xvYmFsbHkgdW5pcXVlLCBpbmNsdWRlcyBmdWxsIHBhdGgg4oCUIGlzIHRoZVxuICAgKiBjYW5vbmljYWwgc291cmNlIG9mIHRydXRoIGZvciB0aGUgc3ViZmxvdyBoaWVyYXJjaHkgYXQgZW1pdCB0aW1lLlxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICogICAnc2VlZCMwJyAgICAgICAgICAgICAgICAg4oaSIFtdICAgICAgICAgICAgICAgICAgICAocm9vdClcbiAgICogICAnc2YtaW5uZXIvaW5uZXIjNScgICAgICAg4oaSIFsnc2YtaW5uZXInXVxuICAgKiAgICdzZi1hL3NmLWIvc3RhZ2UjMycgICAgICDihpIgWydzZi1hJywgJ3NmLWInXSAgICAgIChuZXN0ZWQpXG4gICAqL1xuICBwcml2YXRlIF9nZXRTdWJmbG93UGF0aCgpOiByZWFkb25seSBzdHJpbmdbXSB7XG4gICAgY29uc3QgcnRpZCA9IHRoaXMuX3N0YWdlQ29udGV4dC5ydW50aW1lU3RhZ2VJZDtcbiAgICBpZiAoIXJ0aWQpIHJldHVybiBTY29wZUZhY2FkZS5fRU1QVFlfU1VCRkxPV19QQVRIO1xuICAgIC8vIFN0cmlwIHRoZSB0cmFpbGluZyBgI2V4ZWN1dGlvbkluZGV4YCB0byBpc29sYXRlIHRoZSBwYXRoIHBvcnRpb24uXG4gICAgY29uc3QgaGFzaElkeCA9IHJ0aWQubGFzdEluZGV4T2YoJyMnKTtcbiAgICBjb25zdCBwYXRoUG9ydGlvbiA9IGhhc2hJZHggPj0gMCA/IHJ0aWQuc2xpY2UoMCwgaGFzaElkeCkgOiBydGlkO1xuICAgIC8vIHBhdGhQb3J0aW9uIGlzIG5vdyBgW3N1YmZsb3dQYXRoL11zdGFnZUlkYC4gU3BsaXQgb24gJy8nIGFuZCBkcm9wIHRoZVxuICAgIC8vIGxhc3Qgc2VnbWVudCAoc3RhZ2VJZCkg4oCUIHdoYXQgcmVtYWlucyBpcyB0aGUgc3ViZmxvdyBwYXRoLlxuICAgIGNvbnN0IHNlZ21lbnRzID0gcGF0aFBvcnRpb24uc3BsaXQoJy8nKTtcbiAgICBpZiAoc2VnbWVudHMubGVuZ3RoIDw9IDEpIHJldHVybiBTY29wZUZhY2FkZS5fRU1QVFlfU1VCRkxPV19QQVRIO1xuICAgIHJldHVybiBPYmplY3QuZnJlZXplKHNlZ21lbnRzLnNsaWNlKDAsIC0xKSk7XG4gIH1cblxuICAvLyDilIDilIAgTm9uLVRyYWNraW5nIFN0YXRlIEluc3BlY3Rpb24gKGZvciBUeXBlZFNjb3BlIHByb3h5IGludGVybmFscykg4pSA4pSA4pSA4pSA4pSA4pSAXG5cbiAgLyoqIFJldHVybnMgYWxsIHN0YXRlIGtleXMgd2l0aG91dCBmaXJpbmcgb25SZWFkLiBVc2VkIGJ5IFR5cGVkU2NvcGUgb3duS2V5cy9oYXMgdHJhcHMuICovXG4gIGdldFN0YXRlS2V5cygpOiBzdHJpbmdbXSB7XG4gICAgY29uc3Qgc25hcHNob3QgPSB0aGlzLl9zdGFnZUNvbnRleHQuZ2V0VmFsdWUoW10sIHVuZGVmaW5lZCk7XG4gICAgaWYgKCFzbmFwc2hvdCB8fCB0eXBlb2Ygc25hcHNob3QgIT09ICdvYmplY3QnKSByZXR1cm4gW107XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKHNuYXBzaG90IGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KTtcbiAgfVxuXG4gIC8qKiBDaGVjayBrZXkgZXhpc3RlbmNlIHdpdGhvdXQgZmlyaW5nIG9uUmVhZC4gVXNlZCBieSBUeXBlZFNjb3BlIGhhcyB0cmFwLlxuICAgKiAgQ29udHJhY3Q6IHJldHVybnMgZmFsc2UgZm9yIGtleXMgbmV2ZXIgc2V0IE9SIGtleXMgc2V0IHRvIHVuZGVmaW5lZC5cbiAgICogIFRoaXMgbWF0Y2hlcyBkZWxldGVWYWx1ZSgpIHNlbWFudGljcyAoc2V0cyB0byB1bmRlZmluZWQgPSBkZWxldGVkKS4gKi9cbiAgaGFzS2V5KGtleTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX3N0YWdlQ29udGV4dC5nZXRWYWx1ZShbXSwga2V5KSAhPT0gdW5kZWZpbmVkO1xuICB9XG5cbiAgLyoqIFJlYWQgc3RhdGUgd2l0aG91dCBmaXJpbmcgb25SZWFkLiBVc2VkIGJ5IGFycmF5IHByb3h5IGdldEN1cnJlbnQoKSB0byBhdm9pZFxuICAgKiAgcGhhbnRvbSByZWFkcyBvbiBpbnRlcm5hbCBhcnJheSBvcGVyYXRpb25zICgubGVuZ3RoLCAuaGFzLCBpdGVyYXRpb24sIGV0Yy4pLlxuICAgKiAgVGhlIGluaXRpYWwgcHJvcGVydHkgYWNjZXNzIGZpcmVzIG9uZSB0cmFja2VkIG9uUmVhZCB2aWEgZ2V0VmFsdWUoKTsgc3Vic2VxdWVudFxuICAgKiAgaW50ZXJuYWwgYXJyYXkgb3BlcmF0aW9ucyB1c2UgdGhpcyBtZXRob2QgdG8gc3RheSBzaWxlbnQuXG4gICAqICBOT1RFOiBMaWtlIGdldFZhbHVlKCksIHJldHVybnMgdGhlIHJhdyB2YWx1ZSB0byB0aGUgY2FsbGVyLiBSZWRhY3Rpb24gYXBwbGllc1xuICAgKiAgb25seSB0byByZWNvcmRlciBkaXNwYXRjaCDigJQgaXQgZG9lcyBub3QgZmlsdGVyIHRoZSByZXR1cm5lZCB2YWx1ZS4gVGhpcyBtYXRjaGVzXG4gICAqICB0aGUgZXhpc3RpbmcgZ2V0VmFsdWUoKSBjb250cmFjdCB3aGVyZSB1c2VyIGNvZGUgYWx3YXlzIHJlY2VpdmVzIHJhdyBkYXRhLiAqL1xuICBnZXRWYWx1ZVNpbGVudChrZXk/OiBzdHJpbmcpOiB1bmtub3duIHtcbiAgICByZXR1cm4gdGhpcy5fc3RhZ2VDb250ZXh0LmdldFZhbHVlRGlyZWN0KFtdLCBrZXkpO1xuICB9XG5cbiAgLy8g4pSA4pSAIFN0YXRlIEFjY2VzcyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuICBnZXRJbml0aWFsVmFsdWVGb3Ioa2V5OiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5fc3RhZ2VDb250ZXh0LmdldEdsb2JhbD8uKGtleSk7XG4gIH1cblxuICBnZXRWYWx1ZShrZXk/OiBzdHJpbmcpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuX3N0YWdlQ29udGV4dC5nZXRWYWx1ZShbXSwga2V5KTtcblxuICAgIGlmICh0aGlzLl9yZWNvcmRlcnMubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgaXNSZWRhY3RlZCA9IGtleSAhPT0gdW5kZWZpbmVkICYmIHRoaXMuX2lzS2V5UmVkYWN0ZWQoa2V5KTtcbiAgICAgIGNvbnN0IGZpZWxkU2V0ID0ga2V5ICE9PSB1bmRlZmluZWQgPyB0aGlzLl9yZWRhY3RlZEZpZWxkc0J5S2V5LmdldChrZXkpIDogdW5kZWZpbmVkO1xuXG4gICAgICBsZXQgcmVjb3JkZXJWYWx1ZTogdW5rbm93bjtcbiAgICAgIGlmIChpc1JlZGFjdGVkKSB7XG4gICAgICAgIHJlY29yZGVyVmFsdWUgPSAnW1JFREFDVEVEXSc7XG4gICAgICB9IGVsc2UgaWYgKGZpZWxkU2V0ICYmIHZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgcmVjb3JkZXJWYWx1ZSA9IHRoaXMuX3NjcnViRmllbGRzKHZhbHVlIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+LCBmaWVsZFNldCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZWNvcmRlclZhbHVlID0gdmFsdWU7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX2ludm9rZUhvb2soJ29uUmVhZCcsIHtcbiAgICAgICAgc3RhZ2VOYW1lOiB0aGlzLl9zdGFnZU5hbWUsXG4gICAgICAgIHN0YWdlSWQ6IHRoaXMuX3N0YWdlQ29udGV4dC5zdGFnZUlkLFxuICAgICAgICBydW50aW1lU3RhZ2VJZDogdGhpcy5fc3RhZ2VDb250ZXh0LnJ1bnRpbWVTdGFnZUlkLFxuICAgICAgICBwaXBlbGluZUlkOiB0aGlzLl9zdGFnZUNvbnRleHQucnVuSWQsXG4gICAgICAgIHRpbWVzdGFtcDogRGF0ZS5ub3coKSxcbiAgICAgICAga2V5LFxuICAgICAgICB2YWx1ZTogcmVjb3JkZXJWYWx1ZSxcbiAgICAgICAgcmVkYWN0ZWQ6IGlzUmVkYWN0ZWQgfHwgZmllbGRTZXQgIT09IHVuZGVmaW5lZCB8fCB1bmRlZmluZWQsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICBzZXRWYWx1ZShrZXk6IHN0cmluZywgdmFsdWU6IHVua25vd24sIHNob3VsZFJlZGFjdD86IGJvb2xlYW4sIGRlc2NyaXB0aW9uPzogc3RyaW5nKSB7XG4gICAgYXNzZXJ0Tm90UmVhZG9ubHkodGhpcy5fcmVhZE9ubHlWYWx1ZXMsIGtleSwgJ3dyaXRlJyk7XG5cbiAgICAvLyBEZXYtbW9kZTogd2FybiBpZiB0aGUgdmFsdWUgY29udGFpbnMgY2lyY3VsYXIgcmVmZXJlbmNlcy5cbiAgICAvLyBDaGVjayBBRlRFUiBhc3NlcnROb3RSZWFkb25seSDigJQgZG9uJ3Qgd2FybiBmb3Igd3JpdGVzIHRoYXQgd2lsbCBiZSBibG9ja2VkLlxuICAgIC8vIENpcmN1bGFyIHZhbHVlcyB3b3JrICh0ZXJtaW5hbCBwcm94eSBoYW5kbGVzIHRoZW0pIGJ1dCBjYW4gcHJvZHVjZVxuICAgIC8vIHN1cnByaXNpbmcgYmVoYXZpb3IgaW4gbmFycmF0aXZlLCBKU09OIHNlcmlhbGl6YXRpb24sIGFuZCBzbmFwc2hvdHMuXG4gICAgaWYgKGlzRGV2TW9kZSgpICYmIHZhbHVlICE9PSBudWxsICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgIGlmIChoYXNDaXJjdWxhclJlZmVyZW5jZSh2YWx1ZSkpIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgIGBbZm9vdHByaW50XSBDaXJjdWxhciByZWZlcmVuY2UgZGV0ZWN0ZWQgaW4gc2V0VmFsdWUoJyR7a2V5fScpLiBgICtcbiAgICAgICAgICAgICdXcml0ZXMgcGFzdCB0aGUgY3ljbGUgZGVwdGggd2lsbCB1c2UgdGVybWluYWwgcHJveHkgdHJhY2tpbmcuICcgK1xuICAgICAgICAgICAgJ0NvbnNpZGVyIGZsYXR0ZW5pbmcgdGhlIGRhdGEgc3RydWN0dXJlLicsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gQXV0by1yZWRhY3QgaWYga2V5IG1hdGNoZXMgcG9saWN5IChleGFjdCBrZXlzIG9yIHBhdHRlcm5zKSwgb3IgaWYgdGhlIGtleSB3YXNcbiAgICAvLyBwcmV2aW91c2x5IG1hcmtlZCByZWRhY3RlZCAoZS5nLiBjYXJyaWVkIG92ZXIgZnJvbSBhIHN1YmZsb3cgdmlhIG91dHB1dE1hcHBlcikuXG4gICAgY29uc3QgZWZmZWN0aXZlUmVkYWN0ID0gc2hvdWxkUmVkYWN0IHx8IHRoaXMuX2lzUG9saWN5UmVkYWN0ZWQoa2V5KSB8fCB0aGlzLl9yZWRhY3RlZEtleXMuaGFzKGtleSk7XG5cbiAgICBjb25zdCByZXN1bHQgPSB0aGlzLl9zdGFnZUNvbnRleHQuc2V0T2JqZWN0KFtdLCBrZXksIHZhbHVlLCBlZmZlY3RpdmVSZWRhY3QsIGRlc2NyaXB0aW9uKTtcblxuICAgIGlmIChlZmZlY3RpdmVSZWRhY3QpIHtcbiAgICAgIHRoaXMuX3JlZGFjdGVkS2V5cy5hZGQoa2V5KTtcbiAgICB9XG5cbiAgICAvLyBDaGVjayBmb3IgZmllbGQtbGV2ZWwgcmVkYWN0aW9uIGZyb20gcG9saWN5XG4gICAgY29uc3QgZmllbGRTZXQgPSB0aGlzLl9yZWRhY3RlZEZpZWxkc0J5S2V5LmdldChrZXkpO1xuXG4gICAgaWYgKHRoaXMuX3JlY29yZGVycy5sZW5ndGggPiAwKSB7XG4gICAgICBsZXQgcmVjb3JkZXJWYWx1ZTogdW5rbm93bjtcbiAgICAgIGlmIChlZmZlY3RpdmVSZWRhY3QpIHtcbiAgICAgICAgcmVjb3JkZXJWYWx1ZSA9ICdbUkVEQUNURURdJztcbiAgICAgIH0gZWxzZSBpZiAoZmllbGRTZXQgJiYgdmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0Jykge1xuICAgICAgICByZWNvcmRlclZhbHVlID0gdGhpcy5fc2NydWJGaWVsZHModmFsdWUgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4sIGZpZWxkU2V0KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlY29yZGVyVmFsdWUgPSB2YWx1ZTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5faW52b2tlSG9vaygnb25Xcml0ZScsIHtcbiAgICAgICAgc3RhZ2VOYW1lOiB0aGlzLl9zdGFnZU5hbWUsXG4gICAgICAgIHN0YWdlSWQ6IHRoaXMuX3N0YWdlQ29udGV4dC5zdGFnZUlkLFxuICAgICAgICBydW50aW1lU3RhZ2VJZDogdGhpcy5fc3RhZ2VDb250ZXh0LnJ1bnRpbWVTdGFnZUlkLFxuICAgICAgICBwaXBlbGluZUlkOiB0aGlzLl9zdGFnZUNvbnRleHQucnVuSWQsXG4gICAgICAgIHRpbWVzdGFtcDogRGF0ZS5ub3coKSxcbiAgICAgICAga2V5LFxuICAgICAgICB2YWx1ZTogcmVjb3JkZXJWYWx1ZSxcbiAgICAgICAgb3BlcmF0aW9uOiAnc2V0JyxcbiAgICAgICAgcmVkYWN0ZWQ6IGVmZmVjdGl2ZVJlZGFjdCB8fCBmaWVsZFNldCAhPT0gdW5kZWZpbmVkIHx8IHVuZGVmaW5lZCxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICB1cGRhdGVWYWx1ZShrZXk6IHN0cmluZywgdmFsdWU6IHVua25vd24sIGRlc2NyaXB0aW9uPzogc3RyaW5nKSB7XG4gICAgYXNzZXJ0Tm90UmVhZG9ubHkodGhpcy5fcmVhZE9ubHlWYWx1ZXMsIGtleSwgJ3dyaXRlJyk7XG5cbiAgICAvLyBEZXYtbW9kZTogc2FtZSBjaXJjdWxhciBjaGVjayBhcyBzZXRWYWx1ZSAobWVyZ2UgdGFyZ2V0cyBjYW4gYmUgY2lyY3VsYXIgdG9vKVxuICAgIGlmIChpc0Rldk1vZGUoKSAmJiB2YWx1ZSAhPT0gbnVsbCAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnKSB7XG4gICAgICBpZiAoaGFzQ2lyY3VsYXJSZWZlcmVuY2UodmFsdWUpKSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICBgW2Zvb3RwcmludF0gQ2lyY3VsYXIgcmVmZXJlbmNlIGRldGVjdGVkIGluIHVwZGF0ZVZhbHVlKCcke2tleX0nKS4gYCArXG4gICAgICAgICAgICAnQ29uc2lkZXIgZmxhdHRlbmluZyB0aGUgZGF0YSBzdHJ1Y3R1cmUuJyxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBpc1JlZGFjdGVkID0gdGhpcy5faXNLZXlSZWRhY3RlZChrZXkpIHx8IHRoaXMuX2lzUG9saWN5UmVkYWN0ZWQoa2V5KTtcbiAgICBjb25zdCByZXN1bHQgPSB0aGlzLl9zdGFnZUNvbnRleHQudXBkYXRlT2JqZWN0KFtdLCBrZXksIHZhbHVlLCBkZXNjcmlwdGlvbiwgaXNSZWRhY3RlZCk7XG5cbiAgICBpZiAodGhpcy5fcmVjb3JkZXJzLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IGZpZWxkU2V0ID0gdGhpcy5fcmVkYWN0ZWRGaWVsZHNCeUtleS5nZXQoa2V5KTtcblxuICAgICAgbGV0IHJlY29yZGVyVmFsdWU6IHVua25vd247XG4gICAgICBpZiAoaXNSZWRhY3RlZCkge1xuICAgICAgICByZWNvcmRlclZhbHVlID0gJ1tSRURBQ1RFRF0nO1xuICAgICAgfSBlbHNlIGlmIChmaWVsZFNldCAmJiB2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIHJlY29yZGVyVmFsdWUgPSB0aGlzLl9zY3J1YkZpZWxkcyh2YWx1ZSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiwgZmllbGRTZXQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVjb3JkZXJWYWx1ZSA9IHZhbHVlO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9pbnZva2VIb29rKCdvbldyaXRlJywge1xuICAgICAgICBzdGFnZU5hbWU6IHRoaXMuX3N0YWdlTmFtZSxcbiAgICAgICAgc3RhZ2VJZDogdGhpcy5fc3RhZ2VDb250ZXh0LnN0YWdlSWQsXG4gICAgICAgIHJ1bnRpbWVTdGFnZUlkOiB0aGlzLl9zdGFnZUNvbnRleHQucnVudGltZVN0YWdlSWQsXG4gICAgICAgIHBpcGVsaW5lSWQ6IHRoaXMuX3N0YWdlQ29udGV4dC5ydW5JZCxcbiAgICAgICAgdGltZXN0YW1wOiBEYXRlLm5vdygpLFxuICAgICAgICBrZXksXG4gICAgICAgIHZhbHVlOiByZWNvcmRlclZhbHVlLFxuICAgICAgICBvcGVyYXRpb246ICd1cGRhdGUnLFxuICAgICAgICByZWRhY3RlZDogaXNSZWRhY3RlZCB8fCBmaWVsZFNldCAhPT0gdW5kZWZpbmVkIHx8IHVuZGVmaW5lZCxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBkZWxldGVWYWx1ZShrZXk6IHN0cmluZywgZGVzY3JpcHRpb24/OiBzdHJpbmcpIHtcbiAgICBhc3NlcnROb3RSZWFkb25seSh0aGlzLl9yZWFkT25seVZhbHVlcywga2V5LCAnZGVsZXRlJyk7XG5cbiAgICBjb25zdCByZXN1bHQgPSB0aGlzLl9zdGFnZUNvbnRleHQuc2V0T2JqZWN0KFtdLCBrZXksIHVuZGVmaW5lZCwgZmFsc2UsIGRlc2NyaXB0aW9uID8/IGBkZWxldGVkICR7a2V5fWAsICdkZWxldGUnKTtcblxuICAgIC8vIERlbGV0aW5nIGEgcmVkYWN0ZWQga2V5IGNsZWFycyBpdHMgcmVkYWN0aW9uIHN0YXR1c1xuICAgIHRoaXMuX3JlZGFjdGVkS2V5cy5kZWxldGUoa2V5KTtcblxuICAgIGlmICh0aGlzLl9yZWNvcmRlcnMubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5faW52b2tlSG9vaygnb25Xcml0ZScsIHtcbiAgICAgICAgc3RhZ2VOYW1lOiB0aGlzLl9zdGFnZU5hbWUsXG4gICAgICAgIHN0YWdlSWQ6IHRoaXMuX3N0YWdlQ29udGV4dC5zdGFnZUlkLFxuICAgICAgICBydW50aW1lU3RhZ2VJZDogdGhpcy5fc3RhZ2VDb250ZXh0LnJ1bnRpbWVTdGFnZUlkLFxuICAgICAgICBwaXBlbGluZUlkOiB0aGlzLl9zdGFnZUNvbnRleHQucnVuSWQsXG4gICAgICAgIHRpbWVzdGFtcDogRGF0ZS5ub3coKSxcbiAgICAgICAga2V5LFxuICAgICAgICB2YWx1ZTogdW5kZWZpbmVkLFxuICAgICAgICBvcGVyYXRpb246ICdkZWxldGUnLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8qKiBAaW50ZXJuYWwgKi9cbiAgc2V0R2xvYmFsKGtleTogc3RyaW5nLCB2YWx1ZTogdW5rbm93biwgZGVzY3JpcHRpb24/OiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5fc3RhZ2VDb250ZXh0LnNldEdsb2JhbD8uKGtleSwgdmFsdWUsIGRlc2NyaXB0aW9uKTtcbiAgfVxuXG4gIC8qKiBAaW50ZXJuYWwgKi9cbiAgZ2V0R2xvYmFsKGtleTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuX3N0YWdlQ29udGV4dC5nZXRHbG9iYWw/LihrZXkpO1xuICB9XG5cbiAgLyoqIEBpbnRlcm5hbCAqL1xuICBzZXRPYmplY3RJblJvb3Qoa2V5OiBzdHJpbmcsIHZhbHVlOiB1bmtub3duKSB7XG4gICAgcmV0dXJuIHRoaXMuX3N0YWdlQ29udGV4dC5zZXRSb290Py4oa2V5LCB2YWx1ZSk7XG4gIH1cblxuICAvLyDilIDilIAgUmVhZC1vbmx5ICsgbWlzYyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgcmVhZG9ubHkgaW5wdXQgdmFsdWVzIHBhc3NlZCB0byB0aGlzIHBpcGVsaW5lLCBjYXN0IHRvIGBUYC5cbiAgICogVGhlIHJldHVybmVkIG9iamVjdCBpcyBkZWVwbHkgZnJvemVuIOKAlCBhbnkgYXR0ZW1wdCB0byBtdXRhdGUgaXQgdGhyb3dzLlxuICAgKiBDYWNoZWQgYXQgY29uc3RydWN0aW9uIHRpbWUgZm9yIHplcm8tYWxsb2NhdGlvbiByZXBlYXRlZCBhY2Nlc3MuXG4gICAqXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogY29uc3QgeyBhcHBsaWNhbnROYW1lLCBpbmNvbWUgfSA9IHNjb3BlLmdldEFyZ3M8eyBhcHBsaWNhbnROYW1lOiBzdHJpbmc7IGluY29tZTogbnVtYmVyIH0+KCk7XG4gICAqIGBgYFxuICAgKi9cbiAgZ2V0QXJnczxUID0gUmVjb3JkPHN0cmluZywgdW5rbm93bj4+KCk6IFQge1xuICAgIHJldHVybiB0aGlzLl9mcm96ZW5BcmdzIGFzIFQ7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgZXhlY3V0aW9uIGVudmlyb25tZW50IOKAlCByZWFkLW9ubHkgaW5mcmFzdHJ1Y3R1cmUgdmFsdWVzXG4gICAqIHRoYXQgcHJvcGFnYXRlIHRocm91Z2ggbmVzdGVkIGV4ZWN1dG9ycyAobGlrZSBgcHJvY2Vzcy5lbnZgIGZvciBmbG93Y2hhcnRzKS5cbiAgICpcbiAgICogQ29udGFpbnM6IHNpZ25hbCAoYWJvcnQpLCB0aW1lb3V0TXMsIHRyYWNlSWQuXG4gICAqIEZyb3plbiBhdCBjb25zdHJ1Y3Rpb24gdGltZS4gSW5oZXJpdGVkIGJ5IHN1YmZsb3dzIGF1dG9tYXRpY2FsbHkuXG4gICAqXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogY29uc3QgeyBzaWduYWwsIHRyYWNlSWQgfSA9IHNjb3BlLmdldEVudigpO1xuICAgKiBgYGBcbiAgICovXG4gIGdldEVudigpOiBSZWFkb25seTxFeGVjdXRpb25FbnY+IHtcbiAgICByZXR1cm4gdGhpcy5fZXhlY3V0aW9uRW52O1xuICB9XG5cbiAgLyoqIEBpbnRlcm5hbCAqL1xuICBnZXRQaXBlbGluZUlkKCkge1xuICAgIHJldHVybiB0aGlzLl9zdGFnZUNvbnRleHQucnVuSWQ7XG4gIH1cblxuICAvLyDilIDilIAgSW50ZXJuYWwg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbiAgLyoqIENoZWNrcyBpZiBhIGtleSBpcyByZWRhY3RlZCAoZXhwbGljaXQgX3JlZGFjdGVkS2V5cyBzZXQpLiAqL1xuICBwcml2YXRlIF9pc0tleVJlZGFjdGVkKGtleTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlZGFjdGVkS2V5cy5oYXMoa2V5KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgYSBrZXkgc2hvdWxkIGJlIGF1dG8tcmVkYWN0ZWQgYnkgdGhlIHBvbGljeSAoZXhhY3Qga2V5cyArIHBhdHRlcm5zKS5cbiAgICpcbiAgICogUmVEb1MgZ3VhcmQ6IHBhdHRlcm4gdGVzdGluZyBpcyBjYXBwZWQgYXQgTUFYX1BBVFRFUk5fS0VZX0xFTiBjaGFyYWN0ZXJzLlxuICAgKiBTY29wZSBzdGF0ZSBrZXlzIGFyZSBhbHdheXMgc2hvcnQgaWRlbnRpZmllcnM7IGFueSBrZXkgZXhjZWVkaW5nIHRoZSBjYXBcbiAgICogaXMgYWxtb3N0IGNlcnRhaW5seSBub3QgYSBsZWdpdGltYXRlIHNjb3BlIGtleSwgc28gc2tpcHBpbmcgcGF0dGVybiBtYXRjaGluZ1xuICAgKiBmb3IgaXQgZG9lcyBub3QgcmlzayBsZWFraW5nIFBJSS4gRXhhY3Qta2V5IG1hdGNoaW5nIChBcnJheS5pbmNsdWRlcykgaXNcbiAgICogc3RpbGwgYXBwbGllZCByZWdhcmRsZXNzIG9mIGxlbmd0aCBhbmQgaXMgbm90IHZ1bG5lcmFibGUgdG8gUmVEb1MuXG4gICAqL1xuICBwcml2YXRlIF9pc1BvbGljeVJlZGFjdGVkKGtleTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgaWYgKCF0aGlzLl9yZWRhY3Rpb25Qb2xpY3kpIHJldHVybiBmYWxzZTtcbiAgICBpZiAodGhpcy5fcmVkYWN0aW9uUG9saWN5LmtleXM/LmluY2x1ZGVzKGtleSkpIHJldHVybiB0cnVlO1xuICAgIGlmICh0aGlzLl9yZWRhY3Rpb25Qb2xpY3kucGF0dGVybnMpIHtcbiAgICAgIGlmIChrZXkubGVuZ3RoID4gU2NvcGVGYWNhZGUuX01BWF9QQVRURVJOX0tFWV9MRU4pIHtcbiAgICAgICAgLy8gRGV2LW1vZGUgd2FybmluZzogcGF0dGVybiBtYXRjaGluZyB3YXMgc2lsZW50bHkgc2tpcHBlZCBmb3IgdGhpcyBrZXkuXG4gICAgICAgIC8vIFVzZSBwb2xpY3kua2V5cyBmb3IgZXhhY3QgbWF0Y2hpbmcgb2YgbG9uZyBrZXkgbmFtZXMuXG4gICAgICAgIGlmIChpc0Rldk1vZGUoKSkge1xuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgICAgYFtmb290cHJpbnRdIFJlZGFjdGlvblBvbGljeToga2V5ICcke2tleS5zbGljZSgwLCA0MCl9Li4uJyAoJHtrZXkubGVuZ3RofSBjaGFycykgZXhjZWVkcyBgICtcbiAgICAgICAgICAgICAgJ3RoZSBwYXR0ZXJuLW1hdGNoaW5nIGxlbmd0aCBjYXAgYW5kIHdhcyBza2lwcGVkLiAnICtcbiAgICAgICAgICAgICAgJ1VzZSBwb2xpY3kua2V5cyBmb3IgZXhhY3QgbWF0Y2hpbmcgb2YgbG9uZyBrZXkgbmFtZXMuJyxcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmb3IgKGNvbnN0IHAgb2YgdGhpcy5fcmVkYWN0aW9uUG9saWN5LnBhdHRlcm5zKSB7XG4gICAgICAgICAgcC5sYXN0SW5kZXggPSAwOyAvLyBSZXNldCBzdGF0ZWZ1bCBnbG9iYWwvc3RpY2t5IHJlZ2V4ZXNcbiAgICAgICAgICBpZiAocC50ZXN0KGtleSkpIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNYXhpbXVtIGtleSBsZW5ndGggKGNoYXJhY3RlcnMpIHRoYXQgd2lsbCBiZSB0ZXN0ZWQgYWdhaW5zdCByZWdleCByZWRhY3Rpb25cbiAgICogcGF0dGVybnMuIEtleXMgbG9uZ2VyIHRoYW4gdGhpcyBhcmUgc2tpcHBlZCBmb3IgcGF0dGVybiBtYXRjaGluZyB0byBwcmV2ZW50XG4gICAqIFJlRG9TOiBhIHBhdGhvbG9naWNhbCByZWdleCB0ZXN0ZWQgYWdhaW5zdCBhbiB1bmJvdW5kZWRseSBsb25nIGtleSBzdHJpbmdcbiAgICogY2FuIGNhdXNlIGNhdGFzdHJvcGhpYyBiYWNrdHJhY2tpbmcuXG4gICAqXG4gICAqIDI1NiBjaGFyYWN0ZXJzIGNvbWZvcnRhYmx5IGV4Y2VlZHMgYW55IHJlYWxpc3RpYyBzY29wZS1zdGF0ZSBrZXkgbmFtZS5cbiAgICovXG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9NQVhfUEFUVEVSTl9LRVlfTEVOID0gMjU2O1xuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgZGVlcC1jbG9uZWQgY29weSB3aXRoIHNwZWNpZmllZCBmaWVsZHMgcmVwbGFjZWQgYnkgJ1tSRURBQ1RFRF0nLlxuICAgKiBTdXBwb3J0cyBkb3Qtbm90YXRpb24gcGF0aHMgKGUuZy4gJ2FkZHJlc3MuemlwJykgZm9yIG5lc3RlZCBvYmplY3RzLlxuICAgKi9cbiAgcHJpdmF0ZSBfc2NydWJGaWVsZHMob2JqOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiwgZmllbGRzOiBTZXQ8c3RyaW5nPik6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgICBjb25zdCBjb3B5ID0gc3RydWN0dXJlZENsb25lKG9iaik7XG4gICAgZm9yIChjb25zdCBmaWVsZCBvZiBmaWVsZHMpIHtcbiAgICAgIGlmIChmaWVsZC5pbmNsdWRlcygnLicpICYmICFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoY29weSwgZmllbGQpKSB7XG4gICAgICAgIC8vIERvdC1ub3RhdGlvbiBwYXRoIOKGkiBkZWVwIHNjcnViIChvbmx5IGlmIG5vdCBhIGxpdGVyYWwgZmxhdCBrZXkpXG4gICAgICAgIGlmIChsb2Rhc2hIYXMoY29weSwgZmllbGQpKSB7XG4gICAgICAgICAgbG9kYXNoU2V0KGNvcHksIGZpZWxkLCAnW1JFREFDVEVEXScpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGNvcHksIGZpZWxkKSkge1xuICAgICAgICAgIGNvcHlbZmllbGRdID0gJ1tSRURBQ1RFRF0nO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBjb3B5O1xuICB9XG5cbiAgcHJpdmF0ZSBfaW52b2tlSG9vayhob29rOiBrZXlvZiBPbWl0PFNjb3BlUmVjb3JkZXIsICdpZCc+LCBldmVudDogdW5rbm93bik6IHZvaWQge1xuICAgIGZvciAoY29uc3QgcmVjb3JkZXIgb2YgdGhpcy5fcmVjb3JkZXJzKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBob29rRm4gPSByZWNvcmRlcltob29rXTtcbiAgICAgICAgaWYgKHR5cGVvZiBob29rRm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAoaG9va0ZuIGFzIChldmVudDogdW5rbm93bikgPT4gdm9pZCkuY2FsbChyZWNvcmRlciwgZXZlbnQpO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBpZiAoaG9vayAhPT0gJ29uRXJyb3InKSB7XG4gICAgICAgICAgdGhpcy5faW52b2tlSG9vaygnb25FcnJvcicsIHtcbiAgICAgICAgICAgIHN0YWdlTmFtZTogdGhpcy5fc3RhZ2VOYW1lLFxuICAgICAgICAgICAgc3RhZ2VJZDogdGhpcy5fc3RhZ2VDb250ZXh0LnN0YWdlSWQsXG4gICAgICAgICAgICBydW50aW1lU3RhZ2VJZDogdGhpcy5fc3RhZ2VDb250ZXh0LnJ1bnRpbWVTdGFnZUlkLFxuICAgICAgICAgICAgcGlwZWxpbmVJZDogdGhpcy5fc3RhZ2VDb250ZXh0LnJ1bklkLFxuICAgICAgICAgICAgdGltZXN0YW1wOiBEYXRlLm5vdygpLFxuICAgICAgICAgICAgZXJyb3I6IGVycm9yIGFzIEVycm9yLFxuICAgICAgICAgICAgb3BlcmF0aW9uOiBob29rID09PSAnb25SZWFkJyA/ICdyZWFkJyA6IGhvb2sgPT09ICdvbkNvbW1pdCcgPyAnY29tbWl0JyA6ICd3cml0ZScsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiJdfQ==
|