footprintjs 4.17.2 → 5.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.
Files changed (115) hide show
  1. package/CLAUDE.md +39 -1
  2. package/dist/advanced.js +1 -1
  3. package/dist/esm/advanced.js +1 -1
  4. package/dist/esm/index.js +3 -3
  5. package/dist/esm/lib/builder/FlowChartBuilder.js +32 -7
  6. package/dist/esm/lib/decide/decide.js +9 -9
  7. package/dist/esm/lib/decide/evidence.js +2 -2
  8. package/dist/esm/lib/engine/narrative/CombinedNarrativeRecorder.js +3 -3
  9. package/dist/esm/lib/engine/narrative/FlowRecorderDispatcher.js +3 -3
  10. package/dist/esm/lib/engine/narrative/types.js +1 -1
  11. package/dist/esm/lib/engine/traversal/FlowchartTraverser.js +20 -3
  12. package/dist/esm/lib/memory/StageContext.js +3 -3
  13. package/dist/esm/lib/memory/backtrack.js +1 -1
  14. package/dist/esm/lib/reactive/createTypedScope.js +5 -5
  15. package/dist/esm/lib/reactive/types.js +7 -7
  16. package/dist/esm/lib/recorder/BoundaryStateStore.js +167 -0
  17. package/dist/esm/lib/recorder/BoundaryStateTracker.js +4 -4
  18. package/dist/esm/lib/recorder/CombinedRecorder.js +9 -9
  19. package/dist/esm/lib/recorder/CommitRangeIndex.js +207 -0
  20. package/dist/esm/lib/recorder/CompositeRecorder.js +6 -6
  21. package/dist/esm/lib/recorder/EmitRecorder.js +3 -3
  22. package/dist/esm/lib/recorder/InOutRecorder.js +1 -1
  23. package/dist/esm/lib/recorder/KeyedStore.js +113 -0
  24. package/dist/esm/lib/recorder/QualityRecorder.js +2 -2
  25. package/dist/esm/lib/recorder/SequenceRecorder.js +2 -2
  26. package/dist/esm/lib/recorder/SequenceStore.js +195 -0
  27. package/dist/esm/lib/recorder/TopologyRecorder.js +1 -1
  28. package/dist/esm/lib/recorder/index.js +13 -3
  29. package/dist/esm/lib/runner/ExecutionRuntime.js +1 -1
  30. package/dist/esm/lib/runner/FlowChartExecutor.js +72 -28
  31. package/dist/esm/lib/runner/RunContext.js +2 -2
  32. package/dist/esm/lib/runner/RunnableChart.js +1 -1
  33. package/dist/esm/lib/runner/runId.js +65 -0
  34. package/dist/esm/lib/scope/ScopeFacade.js +6 -6
  35. package/dist/esm/lib/scope/index.js +1 -1
  36. package/dist/esm/lib/scope/recorders/DebugRecorder.js +4 -4
  37. package/dist/esm/lib/scope/recorders/MetricRecorder.js +2 -2
  38. package/dist/esm/lib/scope/recorders/index.js +1 -1
  39. package/dist/esm/lib/scope/types.js +1 -1
  40. package/dist/esm/recorders.js +1 -1
  41. package/dist/esm/trace.js +13 -1
  42. package/dist/index.js +3 -3
  43. package/dist/lib/builder/FlowChartBuilder.js +32 -7
  44. package/dist/lib/decide/decide.js +9 -9
  45. package/dist/lib/decide/evidence.js +2 -2
  46. package/dist/lib/engine/narrative/CombinedNarrativeRecorder.js +3 -3
  47. package/dist/lib/engine/narrative/FlowRecorderDispatcher.js +3 -3
  48. package/dist/lib/engine/narrative/types.js +1 -1
  49. package/dist/lib/engine/traversal/FlowchartTraverser.js +20 -3
  50. package/dist/lib/memory/StageContext.js +3 -3
  51. package/dist/lib/memory/backtrack.js +1 -1
  52. package/dist/lib/reactive/createTypedScope.js +5 -5
  53. package/dist/lib/reactive/types.js +7 -7
  54. package/dist/lib/recorder/BoundaryStateStore.js +171 -0
  55. package/dist/lib/recorder/BoundaryStateTracker.js +4 -4
  56. package/dist/lib/recorder/CombinedRecorder.js +9 -9
  57. package/dist/lib/recorder/CommitRangeIndex.js +211 -0
  58. package/dist/lib/recorder/CompositeRecorder.js +6 -6
  59. package/dist/lib/recorder/EmitRecorder.js +3 -3
  60. package/dist/lib/recorder/InOutRecorder.js +1 -1
  61. package/dist/lib/recorder/KeyedStore.js +117 -0
  62. package/dist/lib/recorder/QualityRecorder.js +2 -2
  63. package/dist/lib/recorder/SequenceRecorder.js +2 -2
  64. package/dist/lib/recorder/SequenceStore.js +199 -0
  65. package/dist/lib/recorder/TopologyRecorder.js +1 -1
  66. package/dist/lib/recorder/index.js +19 -6
  67. package/dist/lib/runner/ExecutionRuntime.js +1 -1
  68. package/dist/lib/runner/FlowChartExecutor.js +72 -28
  69. package/dist/lib/runner/RunContext.js +2 -2
  70. package/dist/lib/runner/RunnableChart.js +1 -1
  71. package/dist/lib/runner/runId.js +70 -0
  72. package/dist/lib/scope/ScopeFacade.js +6 -6
  73. package/dist/lib/scope/index.js +1 -1
  74. package/dist/lib/scope/recorders/DebugRecorder.js +4 -4
  75. package/dist/lib/scope/recorders/MetricRecorder.js +2 -2
  76. package/dist/lib/scope/recorders/index.js +1 -1
  77. package/dist/lib/scope/types.js +1 -1
  78. package/dist/recorders.js +1 -1
  79. package/dist/trace.js +18 -2
  80. package/dist/types/index.d.ts +4 -4
  81. package/dist/types/lib/decide/evidence.d.ts +3 -3
  82. package/dist/types/lib/engine/narrative/CombinedNarrativeRecorder.d.ts +1 -1
  83. package/dist/types/lib/engine/narrative/FlowRecorderDispatcher.d.ts +2 -2
  84. package/dist/types/lib/engine/narrative/types.d.ts +19 -2
  85. package/dist/types/lib/engine/traversal/FlowchartTraverser.d.ts +11 -0
  86. package/dist/types/lib/memory/StageContext.d.ts +2 -2
  87. package/dist/types/lib/memory/backtrack.d.ts +1 -1
  88. package/dist/types/lib/reactive/types.d.ts +7 -7
  89. package/dist/types/lib/recorder/BoundaryStateStore.d.ts +115 -0
  90. package/dist/types/lib/recorder/BoundaryStateTracker.d.ts +3 -3
  91. package/dist/types/lib/recorder/CombinedRecorder.d.ts +11 -11
  92. package/dist/types/lib/recorder/CommitRangeIndex.d.ts +147 -0
  93. package/dist/types/lib/recorder/CompositeRecorder.d.ts +8 -8
  94. package/dist/types/lib/recorder/EmitRecorder.d.ts +2 -2
  95. package/dist/types/lib/recorder/InOutRecorder.d.ts +1 -1
  96. package/dist/types/lib/recorder/KeyedStore.d.ts +70 -0
  97. package/dist/types/lib/recorder/QualityRecorder.d.ts +4 -4
  98. package/dist/types/lib/recorder/SequenceRecorder.d.ts +1 -1
  99. package/dist/types/lib/recorder/SequenceStore.d.ts +120 -0
  100. package/dist/types/lib/recorder/TopologyRecorder.d.ts +1 -1
  101. package/dist/types/lib/recorder/index.d.ts +5 -2
  102. package/dist/types/lib/runner/ExecutionRuntime.d.ts +1 -1
  103. package/dist/types/lib/runner/FlowChartExecutor.d.ts +36 -14
  104. package/dist/types/lib/runner/RunContext.d.ts +2 -2
  105. package/dist/types/lib/runner/RunnableChart.d.ts +2 -2
  106. package/dist/types/lib/runner/runId.d.ts +45 -0
  107. package/dist/types/lib/scope/ScopeFacade.d.ts +4 -4
  108. package/dist/types/lib/scope/index.d.ts +1 -1
  109. package/dist/types/lib/scope/recorders/DebugRecorder.d.ts +4 -4
  110. package/dist/types/lib/scope/recorders/MetricRecorder.d.ts +4 -4
  111. package/dist/types/lib/scope/recorders/index.d.ts +1 -1
  112. package/dist/types/lib/scope/types.d.ts +1 -1
  113. package/dist/types/recorders.d.ts +1 -1
  114. package/dist/types/trace.d.ts +5 -0
  115. package/package.json +1 -1
@@ -16,7 +16,7 @@
16
16
  * if (event.stageName.includes('llm')) return 0.7;
17
17
  * return 1.0;
18
18
  * });
19
- * executor.attachRecorder(quality);
19
+ * executor.attachScopeRecorder(quality);
20
20
  * await executor.run();
21
21
  *
22
22
  * // Per-step score
@@ -130,4 +130,4 @@ export class QualityRecorder extends KeyedRecorder {
130
130
  this.currentKeysWritten = [];
131
131
  }
132
132
  }
133
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUXVhbGl0eVJlY29yZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9yZWNvcmRlci9RdWFsaXR5UmVjb3JkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQThCRztBQUdILE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQTJDbkQsTUFBTSxPQUFPLGVBQWdCLFNBQVEsYUFBMkI7SUFDdEQsTUFBTSxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUM7SUFFbkIsRUFBRSxDQUFTO0lBQ1gsa0JBQWtCLENBQW9CO0lBQzlCLFNBQVMsQ0FBbUI7SUFFN0MsK0NBQStDO0lBQ3ZDLHFCQUFxQixHQUFHLEVBQUUsQ0FBQztJQUMzQixjQUFjLEdBQUcsRUFBRSxDQUFDO0lBQ3BCLGdCQUFnQixHQUFHLEVBQUUsQ0FBQztJQUN0QixlQUFlLEdBQWEsRUFBRSxDQUFDO0lBQy9CLGtCQUFrQixHQUFhLEVBQUUsQ0FBQztJQUUxQyxZQUFZLFNBQTJCLEVBQUUsT0FBZ0M7UUFDdkUsS0FBSyxFQUFFLENBQUM7UUFDUixJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQztRQUMzQixJQUFJLENBQUMsRUFBRSxHQUFHLE9BQU8sRUFBRSxFQUFFLElBQUksV0FBVyxFQUFFLGVBQWUsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNqRSxJQUFJLENBQUMsa0JBQWtCLEdBQUcsT0FBTyxFQUFFLGtCQUFrQixJQUFJLFlBQVksQ0FBQztJQUN4RSxDQUFDO0lBRUQsWUFBWSxDQUFDLEtBQWlCO1FBQzVCLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxLQUFLLENBQUMsY0FBYyxDQUFDO1FBQ2xELElBQUksQ0FBQyxjQUFjLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQztRQUNwQyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQztRQUN4QyxJ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O0lBQzNDLENBQUM7SUFFRCxVQUFVO1FBQ1IsTUFBTSxLQUFLLEdBQTRCLEVBQUUsQ0FBQztRQUMxQyxLQUFLLE1BQU0sQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUM7WUFDekMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQztRQUNyQixDQUFDO1FBQ0QsT0FBTztZQUNMLElBQUksRUFBRSxTQUFTO1lBQ2YsV0FBVyxFQUFFLDZEQUE2RDtZQUMxRSxrQkFBa0IsRUFBRSxJQUFJLENBQUMsa0JBQWtCO1lBQzNDLElBQUksRUFBRTtnQkFDSixZQUFZLEVBQUUsT0FBTztnQkFDckIsWUFBWSxFQUFFLElBQUksQ0FBQyxlQUFlLEVBQUU7Z0JBQ3BDLFVBQVUsRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLEVBQUUsY0FBYztnQkFDNUMsS0FBSzthQUNOO1NBQ0YsQ0FBQztJQUNKLENBQUM7SUFFUSxLQUFLO1FBQ1osS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ2QsSUFBSSxDQUFDLHFCQUFxQixHQUFHLEVBQUUsQ0FBQztRQUNoQyxJQUFJLENBQUMsY0FBYyxHQUFHLEVBQUUsQ0FBQztRQUN6QixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsRUFBRSxDQUFDO1FBQzNCLElBQUksQ0FBQyxlQUFlLEdBQUcsRUFBRSxDQUFDO1FBQzFCLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxFQUFFLENBQUM7SUFDL0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogUXVhbGl0eVJlY29yZGVyIOKAlCBwZXItc3RlcCBxdWFsaXR5IHNjb3Jpbmcga2V5ZWQgYnkgcnVudGltZVN0YWdlSWQuXG4gKlxuICogQ29sbGVjdHMgcXVhbGl0eSBzY29yZXMgZHVyaW5nIHRyYXZlcnNhbCAoYWNjdW11bGF0ZSBwYXR0ZXJuKS5cbiAqIEFmdGVyIGV4ZWN1dGlvbiwgdXNlIHF1YWxpdHlUcmFjZSgpIHRvIGJhY2t0cmFjayBmcm9tIGFueSBsb3ctc2NvcmluZyBzdGVwLlxuICpcbiAqIEV4dGVuZHMgS2V5ZWRSZWNvcmRlcjxRdWFsaXR5RW50cnk+IGZvciBPKDEpIGxvb2t1cCBhbmQgc3RhbmRhcmQgb3BlcmF0aW9uczpcbiAqICAgLSAqKlRyYW5zbGF0ZSoqOiBgZ2V0QnlLZXkoJ2NhbGwtbGxtIzUnKWAg4oCUIHF1YWxpdHkgYXQgdGhpcyBzdGVwXG4gKiAgIC0gKipBY2N1bXVsYXRlKio6IHByb2dyZXNzaXZlIHF1YWxpdHkgdXAgdG8gc2xpZGVyIHBvc2l0aW9uXG4gKiAgIC0gKipBZ2dyZWdhdGUqKjogb3ZlcmFsbCBwaXBlbGluZSBxdWFsaXR5IHNjb3JlXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IHF1YWxpdHkgPSBuZXcgUXVhbGl0eVJlY29yZGVyKChydW50aW1lU3RhZ2VJZCwgZXZlbnQpID0+IHtcbiAqICAgLy8gQ3VzdG9tIHNjb3JpbmcgZnVuY3Rpb24g4oCUIHJldHVybiAwLjDigJMxLjBcbiAqICAgaWYgKGV2ZW50LnN0YWdlTmFtZS5pbmNsdWRlcygnbGxtJykpIHJldHVybiAwLjc7XG4gKiAgIHJldHVybiAxLjA7XG4gKiB9KTtcbiAqIGV4ZWN1dG9yLmF0dGFjaFJlY29yZGVyKHF1YWxpdHkpO1xuICogYXdhaXQgZXhlY3V0b3IucnVuKCk7XG4gKlxuICogLy8gUGVyLXN0ZXAgc2NvcmVcbiAqIHF1YWxpdHkuZ2V0QnlLZXkoJ2NhbGwtbGxtIzUnKTsgIC8vIHsgc2NvcmU6IDAuNywgc3RhZ2VOYW1lOiAnQ2FsbExMTScsIGZhY3RvcnM6IFsuLi5dIH1cbiAqXG4gKiAvLyBPdmVyYWxsIHF1YWxpdHlcbiAqIHF1YWxpdHkuZ2V0T3ZlcmFsbFNjb3JlKCk7ICAvLyAwLjg1XG4gKlxuICogLy8gTG93ZXN0LXNjb3Jpbmcgc3RlcFxuICogcXVhbGl0eS5nZXRMb3dlc3QoKTsgIC8vIHsgcnVudGltZVN0YWdlSWQ6ICdjYWxsLWxsbSM1JywgZW50cnk6IHsgc2NvcmU6IDAuNywgLi4uIH0gfVxuICogYGBgXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBSZWFkRXZlbnQsIFJlY29yZGVyLCBTdGFnZUV2ZW50LCBXcml0ZUV2ZW50IH0gZnJvbSAnLi4vc2NvcGUvdHlwZXMuanMnO1xuaW1wb3J0IHsgS2V5ZWRSZWNvcmRlciB9IGZyb20gJy4vS2V5ZWRSZWNvcmRlci5qcyc7XG5pbXBvcnQgdHlwZSB7IFJlY29yZGVyT3BlcmF0aW9uIH0gZnJvbSAnLi9SZWNvcmRlck9wZXJhdGlvbi5qcyc7XG5cbi8qKiBQZXItc3RlcCBxdWFsaXR5IGRhdGEgc3RvcmVkIGJ5IFF1YWxpdHlSZWNvcmRlci4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUXVhbGl0eUVudHJ5IHtcbiAgLyoqIEh1bWFuLXJlYWRhYmxlIHN0YWdlIG5hbWUuICovXG4gIHN0YWdlTmFtZTogc3RyaW5nO1xuICAvKiogU3RhYmxlIHN0YWdlIGlkZW50aWZpZXIuICovXG4gIHN0YWdlSWQ6IHN0cmluZztcbiAgLyoqIFF1YWxpdHkgc2NvcmUgZm9yIHRoaXMgc3RlcCAoMC4wID0gd29yc3QsIDEuMCA9IGJlc3QpLiAqL1xuICBzY29yZTogbnVtYmVyO1xuICAvKiogV2hhdCBjb250cmlidXRlZCB0byB0aGlzIHNjb3JlLiAqL1xuICBmYWN0b3JzOiBzdHJpbmdbXTtcbiAgLyoqIEtleXMgcmVhZCBkdXJpbmcgdGhpcyBzdGVwIChmb3IgYmFja3RyYWNraW5nKS4gKi9cbiAga2V5c1JlYWQ6IHN0cmluZ1tdO1xuICAvKiogS2V5cyB3cml0dGVuIGR1cmluZyB0aGlzIHN0ZXAgKGZvciBiYWNrdHJhY2tpbmcpLiAqL1xuICBrZXlzV3JpdHRlbjogc3RyaW5nW107XG59XG5cbi8qKlxuICogU2NvcmluZyBmdW5jdGlvbiBjYWxsZWQgYXQgdGhlIGVuZCBvZiBlYWNoIHN0YWdlLlxuICogUmVjZWl2ZXMgdGhlIHJ1bnRpbWVTdGFnZUlkLCBzdGFnZSBldmVudCwgYW5kIGEgc3VtbWFyeSBvZiByZWFkcy93cml0ZXMuXG4gKiBSZXR1cm4gYSBzY29yZSAoMC4w4oCTMS4wKSBhbmQgb3B0aW9uYWwgZmFjdG9ycyBleHBsYWluaW5nIHRoZSBzY29yZS5cbiAqL1xuZXhwb3J0IHR5cGUgUXVhbGl0eVNjb3JpbmdGbiA9IChcbiAgcnVudGltZVN0YWdlSWQ6IHN0cmluZyxcbiAgY29udGV4dDoge1xuICAgIHN0YWdlTmFtZTogc3RyaW5nO1xuICAgIHN0YWdlSWQ6IHN0cmluZztcbiAgICBrZXlzUmVhZDogc3RyaW5nW107XG4gICAga2V5c1dyaXR0ZW46IHN0cmluZ1tdO1xuICAgIGR1cmF0aW9uPzogbnVtYmVyO1xuICB9LFxuKSA9PiB7IHNjb3JlOiBudW1iZXI7IGZhY3RvcnM/OiBzdHJpbmdbXSB9O1xuXG4vKiogT3B0aW9ucyBmb3IgUXVhbGl0eVJlY29yZGVyLiAqL1xuZXhwb3J0IGludGVyZmFjZSBRdWFsaXR5UmVjb3JkZXJPcHRpb25zIHtcbiAgLyoqIFJlY29yZGVyIElELiBEZWZhdWx0cyB0byBhdXRvLWluY3JlbWVudC4gKi9cbiAgaWQ/OiBzdHJpbmc7XG4gIC8qKiBQcmVmZXJyZWQgVUkgb3BlcmF0aW9uLiBEZWZhdWx0cyB0byAnYWNjdW11bGF0ZScgKHByb2dyZXNzaXZlIHF1YWxpdHkpLiAqL1xuICBwcmVmZXJyZWRPcGVyYXRpb24/OiBSZWNvcmRlck9wZXJhdGlvbjtcbn1cblxuZXhwb3J0IGNsYXNzIFF1YWxpdHlSZWNvcmRlciBleHRlbmRzIEtleWVkUmVjb3JkZXI8UXVhbGl0eUVudHJ5PiBpbXBsZW1lbnRzIFJlY29yZGVyIHtcbiAgcHJpdmF0ZSBzdGF0aWMgX2NvdW50ZXIgPSAwO1xuXG4gIHJlYWRvbmx5IGlkOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHByZWZlcnJlZE9wZXJhdGlvbjogUmVjb3JkZXJPcGVyYXRpb247XG4gIHByaXZhdGUgcmVhZG9ubHkgc2NvcmluZ0ZuOiBRdWFsaXR5U2NvcmluZ0ZuO1xuXG4gIC8vIFBlci1zdGFnZSBidWZmZXJzIChyZXNldCBvbiBlYWNoIHN0YWdlU3RhcnQpXG4gIHByaXZhdGUgY3VycmVudFJ1bnRpbWVTdGFnZUlkID0gJyc7XG4gIHByaXZhdGUgY3VycmVudFN0YWdlSWQgPSAnJztcbiAgcHJpdmF0ZSBjdXJyZW50U3RhZ2VOYW1lID0gJyc7XG4gIHByaXZhdGUgY3VycmVudEtleXNSZWFkOiBzdHJpbmdbXSA9IFtdO1xuICBwcml2YXRlIGN1cnJlbnRLZXlzV3JpdHRlbjogc3RyaW5nW10gPSBbXTtcblxuICBjb25zdHJ1Y3RvcihzY29yaW5nRm46IFF1YWxpdHlTY29yaW5nRm4sIG9wdGlvbnM/OiBRdWFsaXR5UmVjb3JkZXJPcHRpb25zKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLnNjb3JpbmdGbiA9IHNjb3JpbmdGbjtcbiAgICB0aGlzLmlkID0gb3B0aW9ucz8uaWQgPz8gYHF1YWxpdHktJHsrK1F1YWxpdHlSZWNvcmRlci5fY291bnRlcn1gO1xuICAgIHRoaXMucHJlZmVycmVkT3BlcmF0aW9uID0gb3B0aW9ucz8ucHJlZmVycmVkT3BlcmF0aW9uID8/ICdhY2N1bXVsYXRlJztcbiAgfVxuXG4gIG9uU3RhZ2VTdGFydChldmVudDogU3RhZ2VFdmVudCk6IHZvaWQge1xuICAgIHRoaXMuY3VycmVudFJ1bnRpbWVTdGFnZUlkID0gZXZlbnQucnVudGltZVN0YWdlSWQ7XG4gICAgdGhpcy5jdXJyZW50U3RhZ2VJZCA9IGV2ZW50LnN0YWdlSWQ7XG4gICAgdGhpcy5jdXJyZW50U3RhZ2VOYW1lID0gZXZlbnQuc3RhZ2VOYW1lO1xuICAgIHRoaXMuY3VycmVudEtleXNSZWFkID0gW107XG4gICAgdGhpcy5jdXJyZW50S2V5c1dyaXR0ZW4gPSBbXTtcbiAgfVxuXG4gIG9uUmVhZChldmVudDogUmVhZEV2ZW50KTogdm9pZCB7XG4gICAgaWYgKGV2ZW50LmtleSkgdGhpcy5jdXJyZW50S2V5c1JlYWQucHVzaChldmVudC5rZXkpO1xuICB9XG5cbiAgb25Xcml0ZShldmVudDogV3JpdGVFdmVudCk6IHZvaWQge1xuICAgIHRoaXMuY3VycmVudEtleXNXcml0dGVuLnB1c2goZXZlbnQua2V5KTtcbiAgfVxuXG4gIG9uU3RhZ2VFbmQoZXZlbnQ6IFN0YWdlRXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCB7IHNjb3JlLCBmYWN0b3JzIH0gPSB0aGlzLnNjb3JpbmdGbih0aGlzLmN1cnJlbnRSdW50aW1lU3RhZ2VJZCwge1xuICAgICAgc3RhZ2VOYW1lOiB0aGlzLmN1cnJlbnRTdGFnZU5hbWUsXG4gICAgICBzdGFnZUlkOiB0aGlzLmN1cnJlbnRTdGFnZUlkLFxuICAgICAga2V5c1JlYWQ6IHRoaXMuY3VycmVudEtleXNSZWFkLFxuICAgICAga2V5c1dyaXR0ZW46IHRoaXMuY3VycmVudEtleXNXcml0dGVuLFxuICAgICAgZHVyYXRpb246IGV2ZW50LmR1cmF0aW9uLFxuICAgIH0pO1xuXG4gICAgdGhpcy5zdG9yZSh0aGlzLmN1cnJlbnRSdW50aW1lU3RhZ2VJZCwge1xuICAgICAgc3RhZ2VOYW1lOiB0aGlzLmN1cnJlbnRTdGFnZU5hbWUsXG4gICAgICBzdGFnZUlkOiB0aGlzLmN1cnJlbnRTdGFnZUlkLFxuICAgICAgc2NvcmU6IE1hdGgubWF4KDAsIE1hdGgubWluKDEsIHNjb3JlKSksXG4gICAgICBmYWN0b3JzOiBmYWN0b3JzID8/IFtdLFxuICAgICAga2V5c1JlYWQ6IFsuLi50aGlzLmN1cnJlbnRLZXlzUmVhZF0sXG4gICAgICBrZXlzV3JpdHRlbjogWy4uLnRoaXMuY3VycmVudEtleXNXcml0dGVuXSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKiBPdmVyYWxsIHF1YWxpdHkgc2NvcmUg4oCUIGF2ZXJhZ2Ugb2YgYWxsIHN0ZXAgc2NvcmVzLiAqL1xuICBnZXRPdmVyYWxsU2NvcmUoKTogbnVtYmVyIHtcbiAgICBpZiAodGhpcy5zaXplID09PSAwKSByZXR1cm4gMS4wO1xuICAgIGNvbnN0IHRvdGFsID0gdGhpcy5hZ2dyZWdhdGUoKHN1bSwgZSkgPT4gc3VtICsgZS5zY29yZSwgMCk7XG4gICAgcmV0dXJuIHRvdGFsIC8gdGhpcy5zaXplO1xuICB9XG5cbiAgLyoqIEZpbmQgdGhlIGxvd2VzdC1zY29yaW5nIHN0ZXAuICovXG4gIGdldExvd2VzdCgpOiB7IHJ1bnRpbWVTdGFnZUlkOiBzdHJpbmc7IGVudHJ5OiBRdWFsaXR5RW50cnkgfSB8IHVuZGVmaW5lZCB7XG4gICAgbGV0IGxvd2VzdDogeyBydW50aW1lU3RhZ2VJZDogc3RyaW5nOyBlbnRyeTogUXVhbGl0eUVudHJ5IH0gfCB1bmRlZmluZWQ7XG4gICAgZm9yIChjb25zdCBba2V5LCBlbnRyeV0gb2YgdGhpcy5nZXRNYXAoKSkge1xuICAgICAgaWYgKCFsb3dlc3QgfHwgZW50cnkuc2NvcmUgPCBsb3dlc3QuZW50cnkuc2NvcmUpIHtcbiAgICAgICAgbG93ZXN0ID0geyBydW50aW1lU3RhZ2VJZDoga2V5LCBlbnRyeSB9O1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbG93ZXN0O1xuICB9XG5cbiAgLyoqIFByb2dyZXNzaXZlIHF1YWxpdHkgc2NvcmUgdXAgdG8gYSBzbGlkZXIgcG9zaXRpb24uICovXG4gIGdldFNjb3JlVXBUbyh2aXNpYmxlS2V5czogUmVhZG9ubHlTZXQ8c3RyaW5nPik6IG51bWJlciB7XG4gICAgbGV0IGNvdW50ID0gMDtcbiAgICBjb25zdCB0b3RhbCA9IHRoaXMuYWNjdW11bGF0ZShcbiAgICAgIChzdW0sIGUpID0+IHtcbiAgICAgICAgY291bnQrKztcbiAgICAgICAgcmV0dXJuIHN1bSArIGUuc2NvcmU7XG4gICAgICB9LFxuICAgICAgMCxcbiAgICAgIHZpc2libGVLZXlzLFxuICAgICk7XG4gICAgcmV0dXJuIGNvdW50ID09PSAwID8gMS4wIDogdG90YWwgLyBjb3VudDtcbiAgfVxuXG4gIHRvU25hcHNob3QoKSB7XG4gICAgY29uc3Qgc3RlcHM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge307XG4gICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgdGhpcy5nZXRNYXAoKSkge1xuICAgICAgc3RlcHNba2V5XSA9IHZhbHVlO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgbmFtZTogJ1F1YWxpdHknLFxuICAgICAgZGVzY3JpcHRpb246ICdRdWFsaXR5IHNjb3JlcyBwZXIgZXhlY3V0aW9uIHN0ZXAgd2l0aCBiYWNrdHJhY2tpbmcgc3VwcG9ydCcsXG4gICAgICBwcmVmZXJyZWRPcGVyYXRpb246IHRoaXMucHJlZmVycmVkT3BlcmF0aW9uLFxuICAgICAgZGF0YToge1xuICAgICAgICBudW1lcmljRmllbGQ6ICdzY29yZScsXG4gICAgICAgIG92ZXJhbGxTY29yZTogdGhpcy5nZXRPdmVyYWxsU2NvcmUoKSxcbiAgICAgICAgbG93ZXN0U3RlcDogdGhpcy5nZXRMb3dlc3QoKT8ucnVudGltZVN0YWdlSWQsXG4gICAgICAgIHN0ZXBzLFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgb3ZlcnJpZGUgY2xlYXIoKTogdm9pZCB7XG4gICAgc3VwZXIuY2xlYXIoKTtcbiAgICB0aGlzLmN1cnJlbnRSdW50aW1lU3RhZ2VJZCA9ICcnO1xuICAgIHRoaXMuY3VycmVudFN0YWdlSWQgPSAnJztcbiAgICB0aGlzLmN1cnJlbnRTdGFnZU5hbWUgPSAnJztcbiAgICB0aGlzLmN1cnJlbnRLZXlzUmVhZCA9IFtdO1xuICAgIHRoaXMuY3VycmVudEtleXNXcml0dGVuID0gW107XG4gIH1cbn1cbiJdfQ==
133
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUXVhbGl0eVJlY29yZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9yZWNvcmRlci9RdWFsaXR5UmVjb3JkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQThCRztBQUdILE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQTJDbkQsTUFBTSxPQUFPLGVBQWdCLFNBQVEsYUFBMkI7SUFDdEQsTUFBTSxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUM7SUFFbkIsRUFBRSxDQUFTO0lBQ1gsa0JBQWtCLENBQW9CO0lBQzlCLFNBQVMsQ0FBbUI7SUFFN0MsK0NBQStDO0lBQ3ZDLHFCQUFxQixHQUFHLEVBQUUsQ0FBQztJQUMzQixjQUFjLEdBQUcsRUFBRSxDQUFDO0lBQ3BCLGdCQUFnQixHQUFHLEVBQUUsQ0FBQztJQUN0QixlQUFlLEdBQWEsRUFBRSxDQUFDO0lBQy9CLGtCQUFrQixHQUFhLEVBQUUsQ0FBQztJQUUxQyxZQUFZLFNBQTJCLEVBQUUsT0FBZ0M7UUFDdkUsS0FBSyxFQUFFLENBQUM7UUFDUixJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQztRQUMzQixJQUFJLENBQUMsRUFBRSxHQUFHLE9BQU8sRUFBRSxFQUFFLElBQUksV0FBVyxFQUFFLGVBQWUsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNqRSxJQUFJLENBQUMsa0JBQWtCLEdBQUcsT0FBTyxFQUFFLGtCQUFrQixJQUFJLFlBQVksQ0FBQztJQUN4RSxDQUFDO0lBRUQsWUFBWSxDQUFDLEtBQWlCO1FBQzVCLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxLQUFLLENBQUMsY0FBYyxDQUFDO1FBQ2xELElBQUksQ0FBQyxjQUFjLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQztRQUNwQyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQztRQUN4QyxJ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O0lBQzNDLENBQUM7SUFFRCxVQUFVO1FBQ1IsTUFBTSxLQUFLLEdBQTRCLEVBQUUsQ0FBQztRQUMxQyxLQUFLLE1BQU0sQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUM7WUFDekMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQztRQUNyQixDQUFDO1FBQ0QsT0FBTztZQUNMLElBQUksRUFBRSxTQUFTO1lBQ2YsV0FBVyxFQUFFLDZEQUE2RDtZQUMxRSxrQkFBa0IsRUFBRSxJQUFJLENBQUMsa0JBQWtCO1lBQzNDLElBQUksRUFBRTtnQkFDSixZQUFZLEVBQUUsT0FBTztnQkFDckIsWUFBWSxFQUFFLElBQUksQ0FBQyxlQUFlLEVBQUU7Z0JBQ3BDLFVBQVUsRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLEVBQUUsY0FBYztnQkFDNUMsS0FBSzthQUNOO1NBQ0YsQ0FBQztJQUNKLENBQUM7SUFFUSxLQUFLO1FBQ1osS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ2QsSUFBSSxDQUFDLHFCQUFxQixHQUFHLEVBQUUsQ0FBQztRQUNoQyxJQUFJLENBQUMsY0FBYyxHQUFHLEVBQUUsQ0FBQztRQUN6QixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsRUFBRSxDQUFDO1FBQzNCLElBQUksQ0FBQyxlQUFlLEdBQUcsRUFBRSxDQUFDO1FBQzFCLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxFQUFFLENBQUM7SUFDL0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogUXVhbGl0eVJlY29yZGVyIOKAlCBwZXItc3RlcCBxdWFsaXR5IHNjb3Jpbmcga2V5ZWQgYnkgcnVudGltZVN0YWdlSWQuXG4gKlxuICogQ29sbGVjdHMgcXVhbGl0eSBzY29yZXMgZHVyaW5nIHRyYXZlcnNhbCAoYWNjdW11bGF0ZSBwYXR0ZXJuKS5cbiAqIEFmdGVyIGV4ZWN1dGlvbiwgdXNlIHF1YWxpdHlUcmFjZSgpIHRvIGJhY2t0cmFjayBmcm9tIGFueSBsb3ctc2NvcmluZyBzdGVwLlxuICpcbiAqIEV4dGVuZHMgS2V5ZWRSZWNvcmRlcjxRdWFsaXR5RW50cnk+IGZvciBPKDEpIGxvb2t1cCBhbmQgc3RhbmRhcmQgb3BlcmF0aW9uczpcbiAqICAgLSAqKlRyYW5zbGF0ZSoqOiBgZ2V0QnlLZXkoJ2NhbGwtbGxtIzUnKWAg4oCUIHF1YWxpdHkgYXQgdGhpcyBzdGVwXG4gKiAgIC0gKipBY2N1bXVsYXRlKio6IHByb2dyZXNzaXZlIHF1YWxpdHkgdXAgdG8gc2xpZGVyIHBvc2l0aW9uXG4gKiAgIC0gKipBZ2dyZWdhdGUqKjogb3ZlcmFsbCBwaXBlbGluZSBxdWFsaXR5IHNjb3JlXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IHF1YWxpdHkgPSBuZXcgUXVhbGl0eVJlY29yZGVyKChydW50aW1lU3RhZ2VJZCwgZXZlbnQpID0+IHtcbiAqICAgLy8gQ3VzdG9tIHNjb3JpbmcgZnVuY3Rpb24g4oCUIHJldHVybiAwLjDigJMxLjBcbiAqICAgaWYgKGV2ZW50LnN0YWdlTmFtZS5pbmNsdWRlcygnbGxtJykpIHJldHVybiAwLjc7XG4gKiAgIHJldHVybiAxLjA7XG4gKiB9KTtcbiAqIGV4ZWN1dG9yLmF0dGFjaFNjb3BlUmVjb3JkZXIocXVhbGl0eSk7XG4gKiBhd2FpdCBleGVjdXRvci5ydW4oKTtcbiAqXG4gKiAvLyBQZXItc3RlcCBzY29yZVxuICogcXVhbGl0eS5nZXRCeUtleSgnY2FsbC1sbG0jNScpOyAgLy8geyBzY29yZTogMC43LCBzdGFnZU5hbWU6ICdDYWxsTExNJywgZmFjdG9yczogWy4uLl0gfVxuICpcbiAqIC8vIE92ZXJhbGwgcXVhbGl0eVxuICogcXVhbGl0eS5nZXRPdmVyYWxsU2NvcmUoKTsgIC8vIDAuODVcbiAqXG4gKiAvLyBMb3dlc3Qtc2NvcmluZyBzdGVwXG4gKiBxdWFsaXR5LmdldExvd2VzdCgpOyAgLy8geyBydW50aW1lU3RhZ2VJZDogJ2NhbGwtbGxtIzUnLCBlbnRyeTogeyBzY29yZTogMC43LCAuLi4gfSB9XG4gKiBgYGBcbiAqL1xuXG5pbXBvcnQgdHlwZSB7IFJlYWRFdmVudCwgU2NvcGVSZWNvcmRlciwgU3RhZ2VFdmVudCwgV3JpdGVFdmVudCB9IGZyb20gJy4uL3Njb3BlL3R5cGVzLmpzJztcbmltcG9ydCB7IEtleWVkUmVjb3JkZXIgfSBmcm9tICcuL0tleWVkUmVjb3JkZXIuanMnO1xuaW1wb3J0IHR5cGUgeyBSZWNvcmRlck9wZXJhdGlvbiB9IGZyb20gJy4vUmVjb3JkZXJPcGVyYXRpb24uanMnO1xuXG4vKiogUGVyLXN0ZXAgcXVhbGl0eSBkYXRhIHN0b3JlZCBieSBRdWFsaXR5UmVjb3JkZXIuICovXG5leHBvcnQgaW50ZXJmYWNlIFF1YWxpdHlFbnRyeSB7XG4gIC8qKiBIdW1hbi1yZWFkYWJsZSBzdGFnZSBuYW1lLiAqL1xuICBzdGFnZU5hbWU6IHN0cmluZztcbiAgLyoqIFN0YWJsZSBzdGFnZSBpZGVudGlmaWVyLiAqL1xuICBzdGFnZUlkOiBzdHJpbmc7XG4gIC8qKiBRdWFsaXR5IHNjb3JlIGZvciB0aGlzIHN0ZXAgKDAuMCA9IHdvcnN0LCAxLjAgPSBiZXN0KS4gKi9cbiAgc2NvcmU6IG51bWJlcjtcbiAgLyoqIFdoYXQgY29udHJpYnV0ZWQgdG8gdGhpcyBzY29yZS4gKi9cbiAgZmFjdG9yczogc3RyaW5nW107XG4gIC8qKiBLZXlzIHJlYWQgZHVyaW5nIHRoaXMgc3RlcCAoZm9yIGJhY2t0cmFja2luZykuICovXG4gIGtleXNSZWFkOiBzdHJpbmdbXTtcbiAgLyoqIEtleXMgd3JpdHRlbiBkdXJpbmcgdGhpcyBzdGVwIChmb3IgYmFja3RyYWNraW5nKS4gKi9cbiAga2V5c1dyaXR0ZW46IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIFNjb3JpbmcgZnVuY3Rpb24gY2FsbGVkIGF0IHRoZSBlbmQgb2YgZWFjaCBzdGFnZS5cbiAqIFJlY2VpdmVzIHRoZSBydW50aW1lU3RhZ2VJZCwgc3RhZ2UgZXZlbnQsIGFuZCBhIHN1bW1hcnkgb2YgcmVhZHMvd3JpdGVzLlxuICogUmV0dXJuIGEgc2NvcmUgKDAuMOKAkzEuMCkgYW5kIG9wdGlvbmFsIGZhY3RvcnMgZXhwbGFpbmluZyB0aGUgc2NvcmUuXG4gKi9cbmV4cG9ydCB0eXBlIFF1YWxpdHlTY29yaW5nRm4gPSAoXG4gIHJ1bnRpbWVTdGFnZUlkOiBzdHJpbmcsXG4gIGNvbnRleHQ6IHtcbiAgICBzdGFnZU5hbWU6IHN0cmluZztcbiAgICBzdGFnZUlkOiBzdHJpbmc7XG4gICAga2V5c1JlYWQ6IHN0cmluZ1tdO1xuICAgIGtleXNXcml0dGVuOiBzdHJpbmdbXTtcbiAgICBkdXJhdGlvbj86IG51bWJlcjtcbiAgfSxcbikgPT4geyBzY29yZTogbnVtYmVyOyBmYWN0b3JzPzogc3RyaW5nW10gfTtcblxuLyoqIE9wdGlvbnMgZm9yIFF1YWxpdHlSZWNvcmRlci4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUXVhbGl0eVJlY29yZGVyT3B0aW9ucyB7XG4gIC8qKiBTY29wZVJlY29yZGVyIElELiBEZWZhdWx0cyB0byBhdXRvLWluY3JlbWVudC4gKi9cbiAgaWQ/OiBzdHJpbmc7XG4gIC8qKiBQcmVmZXJyZWQgVUkgb3BlcmF0aW9uLiBEZWZhdWx0cyB0byAnYWNjdW11bGF0ZScgKHByb2dyZXNzaXZlIHF1YWxpdHkpLiAqL1xuICBwcmVmZXJyZWRPcGVyYXRpb24/OiBSZWNvcmRlck9wZXJhdGlvbjtcbn1cblxuZXhwb3J0IGNsYXNzIFF1YWxpdHlSZWNvcmRlciBleHRlbmRzIEtleWVkUmVjb3JkZXI8UXVhbGl0eUVudHJ5PiBpbXBsZW1lbnRzIFNjb3BlUmVjb3JkZXIge1xuICBwcml2YXRlIHN0YXRpYyBfY291bnRlciA9IDA7XG5cbiAgcmVhZG9ubHkgaWQ6IHN0cmluZztcbiAgcmVhZG9ubHkgcHJlZmVycmVkT3BlcmF0aW9uOiBSZWNvcmRlck9wZXJhdGlvbjtcbiAgcHJpdmF0ZSByZWFkb25seSBzY29yaW5nRm46IFF1YWxpdHlTY29yaW5nRm47XG5cbiAgLy8gUGVyLXN0YWdlIGJ1ZmZlcnMgKHJlc2V0IG9uIGVhY2ggc3RhZ2VTdGFydClcbiAgcHJpdmF0ZSBjdXJyZW50UnVudGltZVN0YWdlSWQgPSAnJztcbiAgcHJpdmF0ZSBjdXJyZW50U3RhZ2VJZCA9ICcnO1xuICBwcml2YXRlIGN1cnJlbnRTdGFnZU5hbWUgPSAnJztcbiAgcHJpdmF0ZSBjdXJyZW50S2V5c1JlYWQ6IHN0cmluZ1tdID0gW107XG4gIHByaXZhdGUgY3VycmVudEtleXNXcml0dGVuOiBzdHJpbmdbXSA9IFtdO1xuXG4gIGNvbnN0cnVjdG9yKHNjb3JpbmdGbjogUXVhbGl0eVNjb3JpbmdGbiwgb3B0aW9ucz86IFF1YWxpdHlSZWNvcmRlck9wdGlvbnMpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuc2NvcmluZ0ZuID0gc2NvcmluZ0ZuO1xuICAgIHRoaXMuaWQgPSBvcHRpb25zPy5pZCA/PyBgcXVhbGl0eS0keysrUXVhbGl0eVJlY29yZGVyLl9jb3VudGVyfWA7XG4gICAgdGhpcy5wcmVmZXJyZWRPcGVyYXRpb24gPSBvcHRpb25zPy5wcmVmZXJyZWRPcGVyYXRpb24gPz8gJ2FjY3VtdWxhdGUnO1xuICB9XG5cbiAgb25TdGFnZVN0YXJ0KGV2ZW50OiBTdGFnZUV2ZW50KTogdm9pZCB7XG4gICAgdGhpcy5jdXJyZW50UnVudGltZVN0YWdlSWQgPSBldmVudC5ydW50aW1lU3RhZ2VJZDtcbiAgICB0aGlzLmN1cnJlbnRTdGFnZUlkID0gZXZlbnQuc3RhZ2VJZDtcbiAgICB0aGlzLmN1cnJlbnRTdGFnZU5hbWUgPSBldmVudC5zdGFnZU5hbWU7XG4gICAgdGhpcy5jdXJyZW50S2V5c1JlYWQgPSBbXTtcbiAgICB0aGlzLmN1cnJlbnRLZXlzV3JpdHRlbiA9IFtdO1xuICB9XG5cbiAgb25SZWFkKGV2ZW50OiBSZWFkRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAoZXZlbnQua2V5KSB0aGlzLmN1cnJlbnRLZXlzUmVhZC5wdXNoKGV2ZW50LmtleSk7XG4gIH1cblxuICBvbldyaXRlKGV2ZW50OiBXcml0ZUV2ZW50KTogdm9pZCB7XG4gICAgdGhpcy5jdXJyZW50S2V5c1dyaXR0ZW4ucHVzaChldmVudC5rZXkpO1xuICB9XG5cbiAgb25TdGFnZUVuZChldmVudDogU3RhZ2VFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IHsgc2NvcmUsIGZhY3RvcnMgfSA9IHRoaXMuc2NvcmluZ0ZuKHRoaXMuY3VycmVudFJ1bnRpbWVTdGFnZUlkLCB7XG4gICAgICBzdGFnZU5hbWU6IHRoaXMuY3VycmVudFN0YWdlTmFtZSxcbiAgICAgIHN0YWdlSWQ6IHRoaXMuY3VycmVudFN0YWdlSWQsXG4gICAgICBrZXlzUmVhZDogdGhpcy5jdXJyZW50S2V5c1JlYWQsXG4gICAgICBrZXlzV3JpdHRlbjogdGhpcy5jdXJyZW50S2V5c1dyaXR0ZW4sXG4gICAgICBkdXJhdGlvbjogZXZlbnQuZHVyYXRpb24sXG4gICAgfSk7XG5cbiAgICB0aGlzLnN0b3JlKHRoaXMuY3VycmVudFJ1bnRpbWVTdGFnZUlkLCB7XG4gICAgICBzdGFnZU5hbWU6IHRoaXMuY3VycmVudFN0YWdlTmFtZSxcbiAgICAgIHN0YWdlSWQ6IHRoaXMuY3VycmVudFN0YWdlSWQsXG4gICAgICBzY29yZTogTWF0aC5tYXgoMCwgTWF0aC5taW4oMSwgc2NvcmUpKSxcbiAgICAgIGZhY3RvcnM6IGZhY3RvcnMgPz8gW10sXG4gICAgICBrZXlzUmVhZDogWy4uLnRoaXMuY3VycmVudEtleXNSZWFkXSxcbiAgICAgIGtleXNXcml0dGVuOiBbLi4udGhpcy5jdXJyZW50S2V5c1dyaXR0ZW5dLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqIE92ZXJhbGwgcXVhbGl0eSBzY29yZSDigJQgYXZlcmFnZSBvZiBhbGwgc3RlcCBzY29yZXMuICovXG4gIGdldE92ZXJhbGxTY29yZSgpOiBudW1iZXIge1xuICAgIGlmICh0aGlzLnNpemUgPT09IDApIHJldHVybiAxLjA7XG4gICAgY29uc3QgdG90YWwgPSB0aGlzLmFnZ3JlZ2F0ZSgoc3VtLCBlKSA9PiBzdW0gKyBlLnNjb3JlLCAwKTtcbiAgICByZXR1cm4gdG90YWwgLyB0aGlzLnNpemU7XG4gIH1cblxuICAvKiogRmluZCB0aGUgbG93ZXN0LXNjb3Jpbmcgc3RlcC4gKi9cbiAgZ2V0TG93ZXN0KCk6IHsgcnVudGltZVN0YWdlSWQ6IHN0cmluZzsgZW50cnk6IFF1YWxpdHlFbnRyeSB9IHwgdW5kZWZpbmVkIHtcbiAgICBsZXQgbG93ZXN0OiB7IHJ1bnRpbWVTdGFnZUlkOiBzdHJpbmc7IGVudHJ5OiBRdWFsaXR5RW50cnkgfSB8IHVuZGVmaW5lZDtcbiAgICBmb3IgKGNvbnN0IFtrZXksIGVudHJ5XSBvZiB0aGlzLmdldE1hcCgpKSB7XG4gICAgICBpZiAoIWxvd2VzdCB8fCBlbnRyeS5zY29yZSA8IGxvd2VzdC5lbnRyeS5zY29yZSkge1xuICAgICAgICBsb3dlc3QgPSB7IHJ1bnRpbWVTdGFnZUlkOiBrZXksIGVudHJ5IH07XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBsb3dlc3Q7XG4gIH1cblxuICAvKiogUHJvZ3Jlc3NpdmUgcXVhbGl0eSBzY29yZSB1cCB0byBhIHNsaWRlciBwb3NpdGlvbi4gKi9cbiAgZ2V0U2NvcmVVcFRvKHZpc2libGVLZXlzOiBSZWFkb25seVNldDxzdHJpbmc+KTogbnVtYmVyIHtcbiAgICBsZXQgY291bnQgPSAwO1xuICAgIGNvbnN0IHRvdGFsID0gdGhpcy5hY2N1bXVsYXRlKFxuICAgICAgKHN1bSwgZSkgPT4ge1xuICAgICAgICBjb3VudCsrO1xuICAgICAgICByZXR1cm4gc3VtICsgZS5zY29yZTtcbiAgICAgIH0sXG4gICAgICAwLFxuICAgICAgdmlzaWJsZUtleXMsXG4gICAgKTtcbiAgICByZXR1cm4gY291bnQgPT09IDAgPyAxLjAgOiB0b3RhbCAvIGNvdW50O1xuICB9XG5cbiAgdG9TbmFwc2hvdCgpIHtcbiAgICBjb25zdCBzdGVwczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fTtcbiAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiB0aGlzLmdldE1hcCgpKSB7XG4gICAgICBzdGVwc1trZXldID0gdmFsdWU7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBuYW1lOiAnUXVhbGl0eScsXG4gICAgICBkZXNjcmlwdGlvbjogJ1F1YWxpdHkgc2NvcmVzIHBlciBleGVjdXRpb24gc3RlcCB3aXRoIGJhY2t0cmFja2luZyBzdXBwb3J0JyxcbiAgICAgIHByZWZlcnJlZE9wZXJhdGlvbjogdGhpcy5wcmVmZXJyZWRPcGVyYXRpb24sXG4gICAgICBkYXRhOiB7XG4gICAgICAgIG51bWVyaWNGaWVsZDogJ3Njb3JlJyxcbiAgICAgICAgb3ZlcmFsbFNjb3JlOiB0aGlzLmdldE92ZXJhbGxTY29yZSgpLFxuICAgICAgICBsb3dlc3RTdGVwOiB0aGlzLmdldExvd2VzdCgpPy5ydW50aW1lU3RhZ2VJZCxcbiAgICAgICAgc3RlcHMsXG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICBvdmVycmlkZSBjbGVhcigpOiB2b2lkIHtcbiAgICBzdXBlci5jbGVhcigpO1xuICAgIHRoaXMuY3VycmVudFJ1bnRpbWVTdGFnZUlkID0gJyc7XG4gICAgdGhpcy5jdXJyZW50U3RhZ2VJZCA9ICcnO1xuICAgIHRoaXMuY3VycmVudFN0YWdlTmFtZSA9ICcnO1xuICAgIHRoaXMuY3VycmVudEtleXNSZWFkID0gW107XG4gICAgdGhpcy5jdXJyZW50S2V5c1dyaXR0ZW4gPSBbXTtcbiAgfVxufVxuIl19
@@ -3,7 +3,7 @@
3
3
  *
4
4
  * Provides dual-indexed storage: a flat array preserving insertion order plus a
5
5
  * Map<runtimeStageId, T[]> for O(1) per-step lookup. One entry type, multiple entries
6
- * per step. Designed for recorders that implement BOTH Recorder and FlowRecorder
6
+ * per step. Designed for recorders that implement BOTH ScopeRecorder and FlowRecorder
7
7
  * (merging data ops and control flow into a single interleaved sequence).
8
8
  *
9
9
  * **Contrast with KeyedRecorder<T>:**
@@ -190,4 +190,4 @@ export class SequenceRecorder {
190
190
  this.lastEmittedId = undefined;
191
191
  }
192
192
  }
193
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2VxdWVuY2VSZWNvcmRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvcmVjb3JkZXIvU2VxdWVuY2VSZWNvcmRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXVERztBQUNILE1BQU0sT0FBZ0IsZ0JBQWdCO0lBR3BDLHlEQUF5RDtJQUN4QyxPQUFPLEdBQVEsRUFBRSxDQUFDO0lBQ25DLHlGQUF5RjtJQUN4RSxnQkFBZ0IsR0FBRyxJQUFJLEdBQUcsRUFBZSxDQUFDO0lBQzNEO21HQUMrRjtJQUM5RSxXQUFXLEdBQUcsSUFBSSxHQUFHLEVBQWdELENBQUM7SUFDdkYsK0dBQStHO0lBQ3ZHLGFBQWEsQ0FBcUI7SUFFMUMseUVBQXlFO0lBRXpFOzs7T0FHRztJQUNPLElBQUksQ0FBQyxLQUFRO1FBQ3JCLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDO1FBQ2hDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3pCLE1BQU0sRUFBRSxHQUFHLEtBQUssQ0FBQyxjQUFjLENBQUM7UUFDaEMsSUFBSSxFQUFFLEVBQUUsQ0FBQztZQUNQLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDeEMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO2dCQUNULEdBQUcsR0FBRyxFQUFFLENBQUM7Z0JBQ1QsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUM7Z0JBQ25DLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLFFBQVEsRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLEdBQUcsR0FBRyxDQUFD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QyxFQUFFLEVBQUUsQ0FBQztnQkFDUixpR0FBaUc7Z0JBQ2pHLElBQUksTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDO29CQUFFLGNBQWMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDcEQsQ0FBQztpQkFBTSxJQUFJLFVBQVUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztnQkFDOUIsa0ZBQWtGO2dCQUNsRixJQUFJLGNBQWMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7b0JBQzlCLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxjQUFjLENBQUMsQ0FBQztvQkFDL0IsY0FBYyxHQUFHLEVBQUUsQ0FBQztnQkFDdEIsQ0FBQztnQkFDRCxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3JCLENBQUM7WUFDRCxtRkFBbUY7WUFDbkYsMEVBQTBFO1FBQzVFLENBQUM7UUFDRCx1RUFBdUU7UUFDdkUsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQUVELHlFQUF5RTtJQUV6RSxtRUFBbUU7SUFDbkUsS0FBSztRQUNILElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztRQUN4QixJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDOUIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUN6QixJQUFJLENBQUMsYUFBYSxHQUFHLFNBQVMsQ0FBQztJQUNqQyxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFNlcXVlbmNlUmVjb3JkZXI8VD4g4oCUIGJhc2UgY2xhc3MgZm9yIG9yZGVyZWQgc2VxdWVuY2UgcmVjb3JkZXJzIHdpdGgga2V5ZWQgaW5kZXguXG4gKlxuICogUHJvdmlkZXMgZHVhbC1pbmRleGVkIHN0b3JhZ2U6IGEgZmxhdCBhcnJheSBwcmVzZXJ2aW5nIGluc2VydGlvbiBvcmRlciBwbHVzIGFcbiAqIE1hcDxydW50aW1lU3RhZ2VJZCwgVFtdPiBmb3IgTygxKSBwZXItc3RlcCBsb29rdXAuIE9uZSBlbnRyeSB0eXBlLCBtdWx0aXBsZSBlbnRyaWVzXG4gKiBwZXIgc3RlcC4gRGVzaWduZWQgZm9yIHJlY29yZGVycyB0aGF0IGltcGxlbWVudCBCT1RIIFJlY29yZGVyIGFuZCBGbG93UmVjb3JkZXJcbiAqIChtZXJnaW5nIGRhdGEgb3BzIGFuZCBjb250cm9sIGZsb3cgaW50byBhIHNpbmdsZSBpbnRlcmxlYXZlZCBzZXF1ZW5jZSkuXG4gKlxuICogKipDb250cmFzdCB3aXRoIEtleWVkUmVjb3JkZXI8VD46KipcbiAqIC0gYEtleWVkUmVjb3JkZXI8VD5gIOKAlCAxOjEgTWFwLiBPbmUgZW50cnkgcGVyIHJ1bnRpbWVTdGFnZUlkLiBGb3Igc2luZ2xlLXZhbHVlIHJlY29yZGVyc1xuICogICBsaWtlIE1ldHJpY1JlY29yZGVyIChvbmUgU3RlcE1ldHJpY3MgcGVyIHN0YWdlIGV4ZWN1dGlvbikuXG4gKiAtIGBTZXF1ZW5jZVJlY29yZGVyPFQ+YCDigJQgMTpOIHNlcXVlbmNlICsgTWFwLiBNdWx0aXBsZSBlbnRyaWVzIHBlciBydW50aW1lU3RhZ2VJZCxcbiAqICAgcGx1cyBvcmRlcmluZyBtYXR0ZXJzLiBGb3IgcmVjb3JkZXJzIHRoYXQgcHJvZHVjZSBhIHByb3NlIG5hcnJhdGl2ZSBvciBldmVudCBsb2dcbiAqICAgd2hlcmUgYSBzaW5nbGUgc3RlcCBnZW5lcmF0ZXMgc3RhZ2UgKyBkYXRhICsgZGVjaXNpb24gZW50cmllcy5cbiAqXG4gKiAqKkhvdyB0byBjaG9vc2U6KipcbiAqIC0gSWYgZWFjaCBzdGVwIHByb2R1Y2VzIGV4YWN0bHkgb25lIHJlY29yZCDihpIgZXh0ZW5kIGBLZXllZFJlY29yZGVyPFQ+YFxuICogLSBJZiBlYWNoIHN0ZXAgcHJvZHVjZXMgbXVsdGlwbGUgcmVjb3JkcyBvciBvcmRlcmluZyBtYXR0ZXJzIOKGkiBleHRlbmQgYFNlcXVlbmNlUmVjb3JkZXI8VD5gXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGltcG9ydCB7IFNlcXVlbmNlUmVjb3JkZXIgfSBmcm9tICdmb290cHJpbnRqcy90cmFjZSc7XG4gKlxuICogaW50ZXJmYWNlIEF1ZGl0RW50cnkge1xuICogICBydW50aW1lU3RhZ2VJZD86IHN0cmluZztcbiAqICAgdHlwZTogJ3JlYWQnIHwgJ3dyaXRlJyB8ICdkZWNpc2lvbic7XG4gKiAgIGRldGFpbDogc3RyaW5nO1xuICogfVxuICpcbiAqIGNsYXNzIEF1ZGl0UmVjb3JkZXIgZXh0ZW5kcyBTZXF1ZW5jZVJlY29yZGVyPEF1ZGl0RW50cnk+IHtcbiAqICAgcmVhZG9ubHkgaWQgPSAnYXVkaXQnO1xuICpcbiAqICAgLy8gU2NvcGUgaG9va3MgKGZpcmVzIGR1cmluZyBzdGFnZSBleGVjdXRpb24pXG4gKiAgIG9uUmVhZChldmVudDogUmVhZEV2ZW50KSB7XG4gKiAgICAgdGhpcy5lbWl0KHsgcnVudGltZVN0YWdlSWQ6IGV2ZW50LnJ1bnRpbWVTdGFnZUlkLCB0eXBlOiAncmVhZCcsIGRldGFpbDogZXZlbnQua2V5IH0pO1xuICogICB9XG4gKiAgIG9uV3JpdGUoZXZlbnQ6IFdyaXRlRXZlbnQpIHtcbiAqICAgICB0aGlzLmVtaXQoeyBydW50aW1lU3RhZ2VJZDogZXZlbnQucnVudGltZVN0YWdlSWQsIHR5cGU6ICd3cml0ZScsIGRldGFpbDogZXZlbnQua2V5IH0pO1xuICogICB9XG4gKlxuICogICAvLyBGbG93IGhvb2tzIChmaXJlcyBhZnRlciBzdGFnZSBleGVjdXRpb24pXG4gKiAgIG9uRGVjaXNpb24oZXZlbnQ6IEZsb3dEZWNpc2lvbkV2ZW50KSB7XG4gKiAgICAgdGhpcy5lbWl0KHtcbiAqICAgICAgIHJ1bnRpbWVTdGFnZUlkOiBldmVudC50cmF2ZXJzYWxDb250ZXh0Py5ydW50aW1lU3RhZ2VJZCxcbiAqICAgICAgIHR5cGU6ICdkZWNpc2lvbicsXG4gKiAgICAgICBkZXRhaWw6IGAke2V2ZW50LmRlY2lkZXJ9IGNob3NlICR7ZXZlbnQuY2hvc2VufWAsXG4gKiAgICAgfSk7XG4gKiAgIH1cbiAqXG4gKiAgIC8vIFRpbWUtdHJhdmVsOiBlbnRyaWVzIHVwIHRvIHNsaWRlciBwb3NpdGlvblxuICogICBnZXRBdWRpdFVwVG8odmlzaWJsZUlkczogUmVhZG9ubHlTZXQ8c3RyaW5nPikge1xuICogICAgIHJldHVybiB0aGlzLmdldEVudHJpZXNVcFRvKHZpc2libGVJZHMpO1xuICogICB9XG4gKiB9XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFNlcXVlbmNlUmVjb3JkZXI8VCBleHRlbmRzIHsgcnVudGltZVN0YWdlSWQ/OiBzdHJpbmcgfT4ge1xuICBhYnN0cmFjdCByZWFkb25seSBpZDogc3RyaW5nO1xuXG4gIC8qKiBPcmRlcmVkIHNlcXVlbmNlIG9mIGFsbCBlbnRyaWVzIChpbnNlcnRpb24gb3JkZXIpLiAqL1xuICBwcml2YXRlIHJlYWRvbmx5IGVudHJpZXM6IFRbXSA9IFtdO1xuICAvKiogUGVyLXN0ZXAgaW5kZXg6IHJ1bnRpbWVTdGFnZUlkIOKGkiBlbnRyaWVzIGZvciB0aGF0IHN0ZXAuIFNhbWUgb2JqZWN0cyBhcyBlbnRyaWVzW10uICovXG4gIHByaXZhdGUgcmVhZG9ubHkgYnlSdW50aW1lU3RhZ2VJZCA9IG5ldyBNYXA8c3RyaW5nLCBUW10+KCk7XG4gIC8qKiBQZXItc3RlcCByYW5nZSBpbmRleDogcnVudGltZVN0YWdlSWQg4oaSIFtmaXJzdElkeCwgZW5kSWR4KSBpbiBlbnRyaWVzIGFycmF5LlxuICAgKiAgZW5kSWR4IGluY2x1ZGVzIHRyYWlsaW5nIGtleWxlc3MgZW50cmllcyAoc3RydWN0dXJhbCBtYXJrZXJzKS4gTWFpbnRhaW5lZCBkdXJpbmcgZW1pdCgpLiAqL1xuICBwcml2YXRlIHJlYWRvbmx5IGVudHJ5UmFuZ2VzID0gbmV3IE1hcDxzdHJpbmcsIHsgZmlyc3RJZHg6IG51bWJlcjsgZW5kSWR4OiBudW1iZXIgfT4oKTtcbiAgLyoqIFRoZSBydW50aW1lU3RhZ2VJZCBvZiB0aGUgbW9zdCByZWNlbnRseSBlbWl0dGVkIGtleWVkIGVudHJ5LiBVc2VkIHRvIGV4dGVuZCByYW5nZXMgZm9yIHRyYWlsaW5nIG1hcmtlcnMuICovXG4gIHByaXZhdGUgbGFzdEVtaXR0ZWRJZDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gIC8vIOKUgOKUgCBXcml0ZSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuICAvKipcbiAgICogQXBwZW5kIGFuIGVudHJ5IHRvIGJvdGggdGhlIG9yZGVyZWQgc2VxdWVuY2UsIGtleWVkIGluZGV4LCBhbmQgcmFuZ2UgaW5kZXguXG4gICAqIEFsbCByZWZlcmVuY2UgdGhlIHNhbWUgZW50cnkgb2JqZWN0IOKAlCBubyBkdXBsaWNhdGlvbi5cbiAgICovXG4gIHByb3RlY3RlZCBlbWl0KGVudHJ5OiBUKTogdm9pZCB7XG4gICAgY29uc3QgaWR4ID0gdGhpcy5lbnRyaWVzLmxlbmd0aDtcbiAgICB0aGlzLmVudHJpZXMucHVzaChlbnRyeSk7XG4gICAgY29uc3QgaWQgPSBlbnRyeS5ydW50aW1lU3RhZ2VJZDtcbiAgICBpZiAoaWQpIHtcbiAgICAgIGxldCBhcnIgPSB0aGlzLmJ5UnVudGltZVN0YWdlSWQuZ2V0KGlkKTtcbiAgICAgIGlmICghYXJyKSB7XG4gICAgICAgIGFyciA9IFtdO1xuICAgICAgICB0aGlzLmJ5UnVudGltZVN0YWdlSWQuc2V0KGlkLCBhcnIpO1xuICAgICAgICB0aGlzLmVudHJ5UmFuZ2VzLnNldChpZCwgeyBmaXJzdElkeDogaWR4LCBlbmRJZHg6IGlkeCArIDEgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmVudHJ5UmFuZ2VzLmdldChpZCkhLmVuZElkeCA9IGlkeCArIDE7XG4gICAgICB9XG4gICAgICBhcnIucHVzaChlbnRyeSk7XG4gICAgICB0aGlzLmxhc3RFbWl0dGVkSWQgPSBpZDtcbiAgICB9IGVsc2UgaWYgKHRoaXMubGFzdEVtaXR0ZWRJZCkge1xuICAgICAgLy8gU3RydWN0dXJhbCBtYXJrZXIgKG5vIHJ1bnRpbWVTdGFnZUlkKSDigJQgZXh0ZW5kIHRoZSBwcmVjZWRpbmcgc3RlcCdzIHJhbmdlXG4gICAgICB0aGlzLmVudHJ5UmFuZ2VzLmdldCh0aGlzLmxhc3RFbWl0dGVkSWQpIS5lbmRJZHggPSBpZHggKyAxO1xuICAgIH1cbiAgfVxuXG4gIC8vIOKUgOKUgCBPcmRlcmVkIGFjY2VzcyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuICAvKiogQWxsIGVudHJpZXMgaW4gaW5zZXJ0aW9uIG9yZGVyIChyZXR1cm5zIGEgc2hhbGxvdyBjb3B5IOKAlCBlbnRyeSBvYmplY3RzIGFyZSBzaGFyZWQpLiAqL1xuICBnZXRFbnRyaWVzKCk6IFRbXSB7XG4gICAgcmV0dXJuIFsuLi50aGlzLmVudHJpZXNdO1xuICB9XG5cbiAgLyoqIE51bWJlciBvZiBlbnRyaWVzIGluIHRoZSBzZXF1ZW5jZS4gKi9cbiAgZ2V0IGVudHJ5Q291bnQoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5lbnRyaWVzLmxlbmd0aDtcbiAgfVxuXG4gIC8qKiBaZXJvLWNvcHkgaXRlcmF0aW9uIGZvciBzdWJjbGFzcyByZW5kZXJpbmcgbWV0aG9kcyAoYXZvaWRzIGdldEVudHJpZXMoKSBzcHJlYWQpLiAqL1xuICBwcm90ZWN0ZWQgZm9yRWFjaEVudHJ5KGZuOiAoZW50cnk6IFQpID0+IHZvaWQpOiB2b2lkIHtcbiAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIHRoaXMuZW50cmllcykge1xuICAgICAgZm4oZW50cnkpO1xuICAgIH1cbiAgfVxuXG4gIC8vIOKUgOKUgCBLZXllZCBhY2Nlc3Mg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbiAgLyoqIE8oMSkgbG9va3VwOiBhbGwgZW50cmllcyBmb3IgYSBzcGVjaWZpYyBleGVjdXRpb24gc3RlcCAocmV0dXJucyBhIGNvcHkpLiAqL1xuICBnZXRFbnRyaWVzRm9yU3RlcChydW50aW1lU3RhZ2VJZDogc3RyaW5nKTogVFtdIHtcbiAgICByZXR1cm4gWy4uLih0aGlzLmJ5UnVudGltZVN0YWdlSWQuZ2V0KHJ1bnRpbWVTdGFnZUlkKSA/PyBbXSldO1xuICB9XG5cbiAgLyoqIE51bWJlciBvZiB1bmlxdWUgZXhlY3V0aW9uIHN0ZXBzIHRoYXQgaGF2ZSBlbnRyaWVzLiAqL1xuICBnZXQgc3RlcENvdW50KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuYnlSdW50aW1lU3RhZ2VJZC5zaXplO1xuICB9XG5cbiAgLyoqXG4gICAqIFByZS1idWlsdCByYW5nZSBpbmRleDogcnVudGltZVN0YWdlSWQg4oaSIGhhbGYtb3BlbiByYW5nZSBbZmlyc3RJZHgsIGVuZElkeCkgaW4gZW50cmllcyBhcnJheS5cbiAgICogTWFpbnRhaW5lZCBkdXJpbmcgZW1pdCgpIOKAlCBubyByZWJ1aWxkIG5lZWRlZC4gVXNlIGZvciBPKDEpIHBlci1zdGVwIGxvb2t1cHMgZHVyaW5nIHRpbWUtdHJhdmVsLlxuICAgKiBlbmRJZHggaW5jbHVkZXMgdHJhaWxpbmcga2V5bGVzcyBlbnRyaWVzIChzdHJ1Y3R1cmFsIG1hcmtlcnMgZm9sbG93aW5nIGEgc3RlcCkuXG4gICAqL1xuICBnZXRFbnRyeVJhbmdlcygpOiBSZWFkb25seU1hcDxzdHJpbmcsIHsgcmVhZG9ubHkgZmlyc3RJZHg6IG51bWJlcjsgcmVhZG9ubHkgZW5kSWR4OiBudW1iZXIgfT4ge1xuICAgIHJldHVybiB0aGlzLmVudHJ5UmFuZ2VzO1xuICB9XG5cbiAgLy8g4pSA4pSAIEFnZ3JlZ2F0ZSAocmVkdWNlIGFsbCBlbnRyaWVzKSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuICAvKiogUmVkdWNlIEFMTCBlbnRyaWVzIHRvIGEgc2luZ2xlIHZhbHVlLiBGb3IgZGFzaGJvYXJkcywgdG90YWxzLCBzdW1tYXJpZXMuICovXG4gIGFnZ3JlZ2F0ZTxSPihmbjogKGFjYzogUiwgZW50cnk6IFQpID0+IFIsIGluaXRpYWw6IFIpOiBSIHtcbiAgICBsZXQgYWNjID0gaW5pdGlhbDtcbiAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIHRoaXMuZW50cmllcykge1xuICAgICAgYWNjID0gZm4oYWNjLCBlbnRyeSk7XG4gICAgfVxuICAgIHJldHVybiBhY2M7XG4gIH1cblxuICAvLyDilIDilIAgQWNjdW11bGF0ZSAocHJvZ3Jlc3NpdmUgcmVkdWNlKSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuICAvKipcbiAgICogUmVkdWNlIGVudHJpZXMsIG9wdGlvbmFsbHkgZmlsdGVyZWQgYnkgYSBzZXQgb2YgcnVudGltZVN0YWdlSWRzLlxuICAgKiBGb3IgdGltZS10cmF2ZWwgcHJvZ3Jlc3NpdmUgdmlldzogcGFzcyB0aGUgcnVudGltZVN0YWdlSWRzIHZpc2libGUgYXQgdGhlIGN1cnJlbnQgc2xpZGVyIHBvc2l0aW9uLlxuICAgKiBFbnRyaWVzIHdpdGhvdXQgcnVudGltZVN0YWdlSWQgKHN0cnVjdHVyYWwgbWFya2VycykgYXJlIGV4Y2x1ZGVkIHdoZW4ga2V5cyBhcmUgcHJvdmlkZWQuXG4gICAqIFdpdGhvdXQga2V5cywgcmVkdWNlcyBhbGwgZW50cmllcyAoc2FtZSBhcyBhZ2dyZWdhdGUpLlxuICAgKi9cbiAgYWNjdW11bGF0ZTxSPihmbjogKGFjYzogUiwgZW50cnk6IFQpID0+IFIsIGluaXRpYWw6IFIsIGtleXM/OiBSZWFkb25seVNldDxzdHJpbmc+KTogUiB7XG4gICAgbGV0IGFjYyA9IGluaXRpYWw7XG4gICAgZm9yIChjb25zdCBlbnRyeSBvZiB0aGlzLmVudHJpZXMpIHtcbiAgICAgIGlmIChrZXlzKSB7XG4gICAgICAgIGlmICghZW50cnkucnVudGltZVN0YWdlSWQgfHwgIWtleXMuaGFzKGVudHJ5LnJ1bnRpbWVTdGFnZUlkKSkgY29udGludWU7XG4gICAgICB9XG4gICAgICBhY2MgPSBmbihhY2MsIGVudHJ5KTtcbiAgICB9XG4gICAgcmV0dXJuIGFjYztcbiAgfVxuXG4gIC8vIOKUgOKUgCBUaW1lLXRyYXZlbCBxdWVyaWVzIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4gIC8qKlxuICAgKiBQcm9ncmVzc2l2ZSByZXZlYWw6IGVudHJpZXMgd2hvc2UgcnVudGltZVN0YWdlSWQgaXMgaW4gdGhlIHZpc2libGUgc2V0LlxuICAgKiBQcmVzZXJ2ZXMgaW5zZXJ0aW9uIG9yZGVyLiBFbnRyaWVzIHdpdGhvdXQgcnVudGltZVN0YWdlSWQgKHN0cnVjdHVyYWwgbWFya2VycylcbiAgICogYXJlIGJ1ZmZlcmVkIGFuZCBpbmNsdWRlZCBvbmx5IHdoZW4gc3Vycm91bmRlZCBieSB2aXNpYmxlIHN0ZXBzIG9uIGJvdGggc2lkZXMg4oCUXG4gICAqIHRyYWlsaW5nIG1hcmtlcnMgYWZ0ZXIgdGhlIGxhc3QgdmlzaWJsZSBzdGVwIGFyZSBkaXNjYXJkZWQuXG4gICAqL1xuICBnZXRFbnRyaWVzVXBUbyh2aXNpYmxlSWRzOiBSZWFkb25seVNldDxzdHJpbmc+KTogVFtdIHtcbiAgICBjb25zdCByZXN1bHQ6IFRbXSA9IFtdO1xuICAgIGxldCBwZW5kaW5nTWFya2VyczogVFtdID0gW107XG4gICAgZm9yIChjb25zdCBlbnRyeSBvZiB0aGlzLmVudHJpZXMpIHtcbiAgICAgIGNvbnN0IGlkID0gZW50cnkucnVudGltZVN0YWdlSWQ7XG4gICAgICBpZiAoIWlkKSB7XG4gICAgICAgIC8vIFN0cnVjdHVyYWwgbWFya2VyIOKAlCBidWZmZXIgdW50aWwgbmV4dCB2aXNpYmxlIGtleWVkIGVudHJ5IGNvbmZpcm1zIGl0J3MgYmV0d2VlbiB2aXNpYmxlIHN0ZXBzLlxuICAgICAgICBpZiAocmVzdWx0Lmxlbmd0aCA+IDApIHBlbmRpbmdNYXJrZXJzLnB1c2goZW50cnkpO1xuICAgICAgfSBlbHNlIGlmICh2aXNpYmxlSWRzLmhhcyhpZCkpIHtcbiAgICAgICAgLy8gRmx1c2ggYnVmZmVyZWQgbWFya2VycyDigJQgdGhleSBzaXQgYmV0d2VlbiBhIHByZXZpb3VzIHZpc2libGUgc3RlcCBhbmQgdGhpcyBvbmUuXG4gICAgICAgIGlmIChwZW5kaW5nTWFya2Vycy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgcmVzdWx0LnB1c2goLi4ucGVuZGluZ01hcmtlcnMpO1xuICAgICAgICAgIHBlbmRpbmdNYXJrZXJzID0gW107XG4gICAgICAgIH1cbiAgICAgICAgcmVzdWx0LnB1c2goZW50cnkpO1xuICAgICAgfVxuICAgICAgLy8gTm9uLXZpc2libGUga2V5ZWQgZW50cmllczogZG9uJ3QgZGlzY2FyZCBwZW5kaW5nIG1hcmtlcnMg4oCUIGEgbGF0ZXIgdmlzaWJsZSBlbnRyeVxuICAgICAgLy8gbWF5IHN0aWxsIGZsdXNoIHRoZW0uIE1hcmtlcnMgYXJlIG9ubHkgZGlzY2FyZGVkIGF0IHRoZSBlbmQgKHRyYWlsaW5nKS5cbiAgICB9XG4gICAgLy8gRGlzY2FyZCByZW1haW5pbmcgcGVuZGluZ01hcmtlcnMg4oCUIHRoZXkgdHJhaWwgdGhlIGxhc3QgdmlzaWJsZSBzdGVwLlxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvLyDilIDilIAgTGlmZWN5Y2xlIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4gIC8qKiBDbGVhciBhbGwgc3RvcmVkIGRhdGEuIENhbGxlZCBieSBleGVjdXRvciBiZWZvcmUgZWFjaCBydW4oKS4gKi9cbiAgY2xlYXIoKTogdm9pZCB7XG4gICAgdGhpcy5lbnRyaWVzLmxlbmd0aCA9IDA7XG4gICAgdGhpcy5ieVJ1bnRpbWVTdGFnZUlkLmNsZWFyKCk7XG4gICAgdGhpcy5lbnRyeVJhbmdlcy5jbGVhcigpO1xuICAgIHRoaXMubGFzdEVtaXR0ZWRJZCA9IHVuZGVmaW5lZDtcbiAgfVxufVxuIl19
193
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2VxdWVuY2VSZWNvcmRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvcmVjb3JkZXIvU2VxdWVuY2VSZWNvcmRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXVERztBQUNILE1BQU0sT0FBZ0IsZ0JBQWdCO0lBR3BDLHlEQUF5RDtJQUN4QyxPQUFPLEdBQVEsRUFBRSxDQUFDO0lBQ25DLHlGQUF5RjtJQUN4RSxnQkFBZ0IsR0FBRyxJQUFJLEdBQUcsRUFBZSxDQUFDO0lBQzNEO21HQUMrRjtJQUM5RSxXQUFXLEdBQUcsSUFBSSxHQUFHLEVBQWdELENBQUM7SUFDdkYsK0dBQStHO0lBQ3ZHLGFBQWEsQ0FBcUI7SUFFMUMseUVBQXlFO0lBRXpFOzs7T0FHRztJQUNPLElBQUksQ0FBQyxLQUFRO1FBQ3JCLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDO1FBQ2hDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3pCLE1BQU0sRUFBRSxHQUFHLEtBQUssQ0FBQyxjQUFjLENBQUM7UUFDaEMsSUFBSSxFQUFFLEVBQUUsQ0FBQztZQUNQLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDeEMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO2dCQUNULEdBQUcsR0FBRyxFQUFFLENBQUM7Z0JBQ1QsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUM7Z0JBQ25DLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLFFBQVEsRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLEdBQUcsR0FBRyxDQUFD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QyxFQUFFLEVBQUUsQ0FBQztnQkFDUixpR0FBaUc7Z0JBQ2pHLElBQUksTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDO29CQUFFLGNBQWMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDcEQsQ0FBQztpQkFBTSxJQUFJLFVBQVUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztnQkFDOUIsa0ZBQWtGO2dCQUNsRixJQUFJLGNBQWMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7b0JBQzlCLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxjQUFjLENBQUMsQ0FBQztvQkFDL0IsY0FBYyxHQUFHLEVBQUUsQ0FBQztnQkFDdEIsQ0FBQztnQkFDRCxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3JCLENBQUM7WUFDRCxtRkFBbUY7WUFDbkYsMEVBQTBFO1FBQzVFLENBQUM7UUFDRCx1RUFBdUU7UUFDdkUsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQUVELHlFQUF5RTtJQUV6RSxtRUFBbUU7SUFDbkUsS0FBSztRQUNILElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztRQUN4QixJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDOUIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUN6QixJQUFJLENBQUMsYUFBYSxHQUFHLFNBQVMsQ0FBQztJQUNqQyxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFNlcXVlbmNlUmVjb3JkZXI8VD4g4oCUIGJhc2UgY2xhc3MgZm9yIG9yZGVyZWQgc2VxdWVuY2UgcmVjb3JkZXJzIHdpdGgga2V5ZWQgaW5kZXguXG4gKlxuICogUHJvdmlkZXMgZHVhbC1pbmRleGVkIHN0b3JhZ2U6IGEgZmxhdCBhcnJheSBwcmVzZXJ2aW5nIGluc2VydGlvbiBvcmRlciBwbHVzIGFcbiAqIE1hcDxydW50aW1lU3RhZ2VJZCwgVFtdPiBmb3IgTygxKSBwZXItc3RlcCBsb29rdXAuIE9uZSBlbnRyeSB0eXBlLCBtdWx0aXBsZSBlbnRyaWVzXG4gKiBwZXIgc3RlcC4gRGVzaWduZWQgZm9yIHJlY29yZGVycyB0aGF0IGltcGxlbWVudCBCT1RIIFNjb3BlUmVjb3JkZXIgYW5kIEZsb3dSZWNvcmRlclxuICogKG1lcmdpbmcgZGF0YSBvcHMgYW5kIGNvbnRyb2wgZmxvdyBpbnRvIGEgc2luZ2xlIGludGVybGVhdmVkIHNlcXVlbmNlKS5cbiAqXG4gKiAqKkNvbnRyYXN0IHdpdGggS2V5ZWRSZWNvcmRlcjxUPjoqKlxuICogLSBgS2V5ZWRSZWNvcmRlcjxUPmAg4oCUIDE6MSBNYXAuIE9uZSBlbnRyeSBwZXIgcnVudGltZVN0YWdlSWQuIEZvciBzaW5nbGUtdmFsdWUgcmVjb3JkZXJzXG4gKiAgIGxpa2UgTWV0cmljUmVjb3JkZXIgKG9uZSBTdGVwTWV0cmljcyBwZXIgc3RhZ2UgZXhlY3V0aW9uKS5cbiAqIC0gYFNlcXVlbmNlUmVjb3JkZXI8VD5gIOKAlCAxOk4gc2VxdWVuY2UgKyBNYXAuIE11bHRpcGxlIGVudHJpZXMgcGVyIHJ1bnRpbWVTdGFnZUlkLFxuICogICBwbHVzIG9yZGVyaW5nIG1hdHRlcnMuIEZvciByZWNvcmRlcnMgdGhhdCBwcm9kdWNlIGEgcHJvc2UgbmFycmF0aXZlIG9yIGV2ZW50IGxvZ1xuICogICB3aGVyZSBhIHNpbmdsZSBzdGVwIGdlbmVyYXRlcyBzdGFnZSArIGRhdGEgKyBkZWNpc2lvbiBlbnRyaWVzLlxuICpcbiAqICoqSG93IHRvIGNob29zZToqKlxuICogLSBJZiBlYWNoIHN0ZXAgcHJvZHVjZXMgZXhhY3RseSBvbmUgcmVjb3JkIOKGkiBleHRlbmQgYEtleWVkUmVjb3JkZXI8VD5gXG4gKiAtIElmIGVhY2ggc3RlcCBwcm9kdWNlcyBtdWx0aXBsZSByZWNvcmRzIG9yIG9yZGVyaW5nIG1hdHRlcnMg4oaSIGV4dGVuZCBgU2VxdWVuY2VSZWNvcmRlcjxUPmBcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogaW1wb3J0IHsgU2VxdWVuY2VSZWNvcmRlciB9IGZyb20gJ2Zvb3RwcmludGpzL3RyYWNlJztcbiAqXG4gKiBpbnRlcmZhY2UgQXVkaXRFbnRyeSB7XG4gKiAgIHJ1bnRpbWVTdGFnZUlkPzogc3RyaW5nO1xuICogICB0eXBlOiAncmVhZCcgfCAnd3JpdGUnIHwgJ2RlY2lzaW9uJztcbiAqICAgZGV0YWlsOiBzdHJpbmc7XG4gKiB9XG4gKlxuICogY2xhc3MgQXVkaXRSZWNvcmRlciBleHRlbmRzIFNlcXVlbmNlUmVjb3JkZXI8QXVkaXRFbnRyeT4ge1xuICogICByZWFkb25seSBpZCA9ICdhdWRpdCc7XG4gKlxuICogICAvLyBTY29wZSBob29rcyAoZmlyZXMgZHVyaW5nIHN0YWdlIGV4ZWN1dGlvbilcbiAqICAgb25SZWFkKGV2ZW50OiBSZWFkRXZlbnQpIHtcbiAqICAgICB0aGlzLmVtaXQoeyBydW50aW1lU3RhZ2VJZDogZXZlbnQucnVudGltZVN0YWdlSWQsIHR5cGU6ICdyZWFkJywgZGV0YWlsOiBldmVudC5rZXkgfSk7XG4gKiAgIH1cbiAqICAgb25Xcml0ZShldmVudDogV3JpdGVFdmVudCkge1xuICogICAgIHRoaXMuZW1pdCh7IHJ1bnRpbWVTdGFnZUlkOiBldmVudC5ydW50aW1lU3RhZ2VJZCwgdHlwZTogJ3dyaXRlJywgZGV0YWlsOiBldmVudC5rZXkgfSk7XG4gKiAgIH1cbiAqXG4gKiAgIC8vIEZsb3cgaG9va3MgKGZpcmVzIGFmdGVyIHN0YWdlIGV4ZWN1dGlvbilcbiAqICAgb25EZWNpc2lvbihldmVudDogRmxvd0RlY2lzaW9uRXZlbnQpIHtcbiAqICAgICB0aGlzLmVtaXQoe1xuICogICAgICAgcnVudGltZVN0YWdlSWQ6IGV2ZW50LnRyYXZlcnNhbENvbnRleHQ/LnJ1bnRpbWVTdGFnZUlkLFxuICogICAgICAgdHlwZTogJ2RlY2lzaW9uJyxcbiAqICAgICAgIGRldGFpbDogYCR7ZXZlbnQuZGVjaWRlcn0gY2hvc2UgJHtldmVudC5jaG9zZW59YCxcbiAqICAgICB9KTtcbiAqICAgfVxuICpcbiAqICAgLy8gVGltZS10cmF2ZWw6IGVudHJpZXMgdXAgdG8gc2xpZGVyIHBvc2l0aW9uXG4gKiAgIGdldEF1ZGl0VXBUbyh2aXNpYmxlSWRzOiBSZWFkb25seVNldDxzdHJpbmc+KSB7XG4gKiAgICAgcmV0dXJuIHRoaXMuZ2V0RW50cmllc1VwVG8odmlzaWJsZUlkcyk7XG4gKiAgIH1cbiAqIH1cbiAqIGBgYFxuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgU2VxdWVuY2VSZWNvcmRlcjxUIGV4dGVuZHMgeyBydW50aW1lU3RhZ2VJZD86IHN0cmluZyB9PiB7XG4gIGFic3RyYWN0IHJlYWRvbmx5IGlkOiBzdHJpbmc7XG5cbiAgLyoqIE9yZGVyZWQgc2VxdWVuY2Ugb2YgYWxsIGVudHJpZXMgKGluc2VydGlvbiBvcmRlcikuICovXG4gIHByaXZhdGUgcmVhZG9ubHkgZW50cmllczogVFtdID0gW107XG4gIC8qKiBQZXItc3RlcCBpbmRleDogcnVudGltZVN0YWdlSWQg4oaSIGVudHJpZXMgZm9yIHRoYXQgc3RlcC4gU2FtZSBvYmplY3RzIGFzIGVudHJpZXNbXS4gKi9cbiAgcHJpdmF0ZSByZWFkb25seSBieVJ1bnRpbWVTdGFnZUlkID0gbmV3IE1hcDxzdHJpbmcsIFRbXT4oKTtcbiAgLyoqIFBlci1zdGVwIHJhbmdlIGluZGV4OiBydW50aW1lU3RhZ2VJZCDihpIgW2ZpcnN0SWR4LCBlbmRJZHgpIGluIGVudHJpZXMgYXJyYXkuXG4gICAqICBlbmRJZHggaW5jbHVkZXMgdHJhaWxpbmcga2V5bGVzcyBlbnRyaWVzIChzdHJ1Y3R1cmFsIG1hcmtlcnMpLiBNYWludGFpbmVkIGR1cmluZyBlbWl0KCkuICovXG4gIHByaXZhdGUgcmVhZG9ubHkgZW50cnlSYW5nZXMgPSBuZXcgTWFwPHN0cmluZywgeyBmaXJzdElkeDogbnVtYmVyOyBlbmRJZHg6IG51bWJlciB9PigpO1xuICAvKiogVGhlIHJ1bnRpbWVTdGFnZUlkIG9mIHRoZSBtb3N0IHJlY2VudGx5IGVtaXR0ZWQga2V5ZWQgZW50cnkuIFVzZWQgdG8gZXh0ZW5kIHJhbmdlcyBmb3IgdHJhaWxpbmcgbWFya2Vycy4gKi9cbiAgcHJpdmF0ZSBsYXN0RW1pdHRlZElkOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgLy8g4pSA4pSAIFdyaXRlIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4gIC8qKlxuICAgKiBBcHBlbmQgYW4gZW50cnkgdG8gYm90aCB0aGUgb3JkZXJlZCBzZXF1ZW5jZSwga2V5ZWQgaW5kZXgsIGFuZCByYW5nZSBpbmRleC5cbiAgICogQWxsIHJlZmVyZW5jZSB0aGUgc2FtZSBlbnRyeSBvYmplY3Qg4oCUIG5vIGR1cGxpY2F0aW9uLlxuICAgKi9cbiAgcHJvdGVjdGVkIGVtaXQoZW50cnk6IFQpOiB2b2lkIHtcbiAgICBjb25zdCBpZHggPSB0aGlzLmVudHJpZXMubGVuZ3RoO1xuICAgIHRoaXMuZW50cmllcy5wdXNoKGVudHJ5KTtcbiAgICBjb25zdCBpZCA9IGVudHJ5LnJ1bnRpbWVTdGFnZUlkO1xuICAgIGlmIChpZCkge1xuICAgICAgbGV0IGFyciA9IHRoaXMuYnlSdW50aW1lU3RhZ2VJZC5nZXQoaWQpO1xuICAgICAgaWYgKCFhcnIpIHtcbiAgICAgICAgYXJyID0gW107XG4gICAgICAgIHRoaXMuYnlSdW50aW1lU3RhZ2VJZC5zZXQoaWQsIGFycik7XG4gICAgICAgIHRoaXMuZW50cnlSYW5nZXMuc2V0KGlkLCB7IGZpcnN0SWR4OiBpZHgsIGVuZElkeDogaWR4ICsgMSB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuZW50cnlSYW5nZXMuZ2V0KGlkKSEuZW5kSWR4ID0gaWR4ICsgMTtcbiAgICAgIH1cbiAgICAgIGFyci5wdXNoKGVudHJ5KTtcbiAgICAgIHRoaXMubGFzdEVtaXR0ZWRJZCA9IGlkO1xuICAgIH0gZWxzZSBpZiAodGhpcy5sYXN0RW1pdHRlZElkKSB7XG4gICAgICAvLyBTdHJ1Y3R1cmFsIG1hcmtlciAobm8gcnVudGltZVN0YWdlSWQpIOKAlCBleHRlbmQgdGhlIHByZWNlZGluZyBzdGVwJ3MgcmFuZ2VcbiAgICAgIHRoaXMuZW50cnlSYW5nZXMuZ2V0KHRoaXMubGFzdEVtaXR0ZWRJZCkhLmVuZElkeCA9IGlkeCArIDE7XG4gICAgfVxuICB9XG5cbiAgLy8g4pSA4pSAIE9yZGVyZWQgYWNjZXNzIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4gIC8qKiBBbGwgZW50cmllcyBpbiBpbnNlcnRpb24gb3JkZXIgKHJldHVybnMgYSBzaGFsbG93IGNvcHkg4oCUIGVudHJ5IG9iamVjdHMgYXJlIHNoYXJlZCkuICovXG4gIGdldEVudHJpZXMoKTogVFtdIHtcbiAgICByZXR1cm4gWy4uLnRoaXMuZW50cmllc107XG4gIH1cblxuICAvKiogTnVtYmVyIG9mIGVudHJpZXMgaW4gdGhlIHNlcXVlbmNlLiAqL1xuICBnZXQgZW50cnlDb3VudCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmVudHJpZXMubGVuZ3RoO1xuICB9XG5cbiAgLyoqIFplcm8tY29weSBpdGVyYXRpb24gZm9yIHN1YmNsYXNzIHJlbmRlcmluZyBtZXRob2RzIChhdm9pZHMgZ2V0RW50cmllcygpIHNwcmVhZCkuICovXG4gIHByb3RlY3RlZCBmb3JFYWNoRW50cnkoZm46IChlbnRyeTogVCkgPT4gdm9pZCk6IHZvaWQge1xuICAgIGZvciAoY29uc3QgZW50cnkgb2YgdGhpcy5lbnRyaWVzKSB7XG4gICAgICBmbihlbnRyeSk7XG4gICAgfVxuICB9XG5cbiAgLy8g4pSA4pSAIEtleWVkIGFjY2VzcyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuICAvKiogTygxKSBsb29rdXA6IGFsbCBlbnRyaWVzIGZvciBhIHNwZWNpZmljIGV4ZWN1dGlvbiBzdGVwIChyZXR1cm5zIGEgY29weSkuICovXG4gIGdldEVudHJpZXNGb3JTdGVwKHJ1bnRpbWVTdGFnZUlkOiBzdHJpbmcpOiBUW10ge1xuICAgIHJldHVybiBbLi4uKHRoaXMuYnlSdW50aW1lU3RhZ2VJZC5nZXQocnVudGltZVN0YWdlSWQpID8/IFtdKV07XG4gIH1cblxuICAvKiogTnVtYmVyIG9mIHVuaXF1ZSBleGVjdXRpb24gc3RlcHMgdGhhdCBoYXZlIGVudHJpZXMuICovXG4gIGdldCBzdGVwQ291bnQoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5ieVJ1bnRpbWVTdGFnZUlkLnNpemU7XG4gIH1cblxuICAvKipcbiAgICogUHJlLWJ1aWx0IHJhbmdlIGluZGV4OiBydW50aW1lU3RhZ2VJZCDihpIgaGFsZi1vcGVuIHJhbmdlIFtmaXJzdElkeCwgZW5kSWR4KSBpbiBlbnRyaWVzIGFycmF5LlxuICAgKiBNYWludGFpbmVkIGR1cmluZyBlbWl0KCkg4oCUIG5vIHJlYnVpbGQgbmVlZGVkLiBVc2UgZm9yIE8oMSkgcGVyLXN0ZXAgbG9va3VwcyBkdXJpbmcgdGltZS10cmF2ZWwuXG4gICAqIGVuZElkeCBpbmNsdWRlcyB0cmFpbGluZyBrZXlsZXNzIGVudHJpZXMgKHN0cnVjdHVyYWwgbWFya2VycyBmb2xsb3dpbmcgYSBzdGVwKS5cbiAgICovXG4gIGdldEVudHJ5UmFuZ2VzKCk6IFJlYWRvbmx5TWFwPHN0cmluZywgeyByZWFkb25seSBmaXJzdElkeDogbnVtYmVyOyByZWFkb25seSBlbmRJZHg6IG51bWJlciB9PiB7XG4gICAgcmV0dXJuIHRoaXMuZW50cnlSYW5nZXM7XG4gIH1cblxuICAvLyDilIDilIAgQWdncmVnYXRlIChyZWR1Y2UgYWxsIGVudHJpZXMpIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4gIC8qKiBSZWR1Y2UgQUxMIGVudHJpZXMgdG8gYSBzaW5nbGUgdmFsdWUuIEZvciBkYXNoYm9hcmRzLCB0b3RhbHMsIHN1bW1hcmllcy4gKi9cbiAgYWdncmVnYXRlPFI+KGZuOiAoYWNjOiBSLCBlbnRyeTogVCkgPT4gUiwgaW5pdGlhbDogUik6IFIge1xuICAgIGxldCBhY2MgPSBpbml0aWFsO1xuICAgIGZvciAoY29uc3QgZW50cnkgb2YgdGhpcy5lbnRyaWVzKSB7XG4gICAgICBhY2MgPSBmbihhY2MsIGVudHJ5KTtcbiAgICB9XG4gICAgcmV0dXJuIGFjYztcbiAgfVxuXG4gIC8vIOKUgOKUgCBBY2N1bXVsYXRlIChwcm9ncmVzc2l2ZSByZWR1Y2UpIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4gIC8qKlxuICAgKiBSZWR1Y2UgZW50cmllcywgb3B0aW9uYWxseSBmaWx0ZXJlZCBieSBhIHNldCBvZiBydW50aW1lU3RhZ2VJZHMuXG4gICAqIEZvciB0aW1lLXRyYXZlbCBwcm9ncmVzc2l2ZSB2aWV3OiBwYXNzIHRoZSBydW50aW1lU3RhZ2VJZHMgdmlzaWJsZSBhdCB0aGUgY3VycmVudCBzbGlkZXIgcG9zaXRpb24uXG4gICAqIEVudHJpZXMgd2l0aG91dCBydW50aW1lU3RhZ2VJZCAoc3RydWN0dXJhbCBtYXJrZXJzKSBhcmUgZXhjbHVkZWQgd2hlbiBrZXlzIGFyZSBwcm92aWRlZC5cbiAgICogV2l0aG91dCBrZXlzLCByZWR1Y2VzIGFsbCBlbnRyaWVzIChzYW1lIGFzIGFnZ3JlZ2F0ZSkuXG4gICAqL1xuICBhY2N1bXVsYXRlPFI+KGZuOiAoYWNjOiBSLCBlbnRyeTogVCkgPT4gUiwgaW5pdGlhbDogUiwga2V5cz86IFJlYWRvbmx5U2V0PHN0cmluZz4pOiBSIHtcbiAgICBsZXQgYWNjID0gaW5pdGlhbDtcbiAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIHRoaXMuZW50cmllcykge1xuICAgICAgaWYgKGtleXMpIHtcbiAgICAgICAgaWYgKCFlbnRyeS5ydW50aW1lU3RhZ2VJZCB8fCAha2V5cy5oYXMoZW50cnkucnVudGltZVN0YWdlSWQpKSBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGFjYyA9IGZuKGFjYywgZW50cnkpO1xuICAgIH1cbiAgICByZXR1cm4gYWNjO1xuICB9XG5cbiAgLy8g4pSA4pSAIFRpbWUtdHJhdmVsIHF1ZXJpZXMg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbiAgLyoqXG4gICAqIFByb2dyZXNzaXZlIHJldmVhbDogZW50cmllcyB3aG9zZSBydW50aW1lU3RhZ2VJZCBpcyBpbiB0aGUgdmlzaWJsZSBzZXQuXG4gICAqIFByZXNlcnZlcyBpbnNlcnRpb24gb3JkZXIuIEVudHJpZXMgd2l0aG91dCBydW50aW1lU3RhZ2VJZCAoc3RydWN0dXJhbCBtYXJrZXJzKVxuICAgKiBhcmUgYnVmZmVyZWQgYW5kIGluY2x1ZGVkIG9ubHkgd2hlbiBzdXJyb3VuZGVkIGJ5IHZpc2libGUgc3RlcHMgb24gYm90aCBzaWRlcyDigJRcbiAgICogdHJhaWxpbmcgbWFya2VycyBhZnRlciB0aGUgbGFzdCB2aXNpYmxlIHN0ZXAgYXJlIGRpc2NhcmRlZC5cbiAgICovXG4gIGdldEVudHJpZXNVcFRvKHZpc2libGVJZHM6IFJlYWRvbmx5U2V0PHN0cmluZz4pOiBUW10ge1xuICAgIGNvbnN0IHJlc3VsdDogVFtdID0gW107XG4gICAgbGV0IHBlbmRpbmdNYXJrZXJzOiBUW10gPSBbXTtcbiAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIHRoaXMuZW50cmllcykge1xuICAgICAgY29uc3QgaWQgPSBlbnRyeS5ydW50aW1lU3RhZ2VJZDtcbiAgICAgIGlmICghaWQpIHtcbiAgICAgICAgLy8gU3RydWN0dXJhbCBtYXJrZXIg4oCUIGJ1ZmZlciB1bnRpbCBuZXh0IHZpc2libGUga2V5ZWQgZW50cnkgY29uZmlybXMgaXQncyBiZXR3ZWVuIHZpc2libGUgc3RlcHMuXG4gICAgICAgIGlmIChyZXN1bHQubGVuZ3RoID4gMCkgcGVuZGluZ01hcmtlcnMucHVzaChlbnRyeSk7XG4gICAgICB9IGVsc2UgaWYgKHZpc2libGVJZHMuaGFzKGlkKSkge1xuICAgICAgICAvLyBGbHVzaCBidWZmZXJlZCBtYXJrZXJzIOKAlCB0aGV5IHNpdCBiZXR3ZWVuIGEgcHJldmlvdXMgdmlzaWJsZSBzdGVwIGFuZCB0aGlzIG9uZS5cbiAgICAgICAgaWYgKHBlbmRpbmdNYXJrZXJzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICByZXN1bHQucHVzaCguLi5wZW5kaW5nTWFya2Vycyk7XG4gICAgICAgICAgcGVuZGluZ01hcmtlcnMgPSBbXTtcbiAgICAgICAgfVxuICAgICAgICByZXN1bHQucHVzaChlbnRyeSk7XG4gICAgICB9XG4gICAgICAvLyBOb24tdmlzaWJsZSBrZXllZCBlbnRyaWVzOiBkb24ndCBkaXNjYXJkIHBlbmRpbmcgbWFya2VycyDigJQgYSBsYXRlciB2aXNpYmxlIGVudHJ5XG4gICAgICAvLyBtYXkgc3RpbGwgZmx1c2ggdGhlbS4gTWFya2VycyBhcmUgb25seSBkaXNjYXJkZWQgYXQgdGhlIGVuZCAodHJhaWxpbmcpLlxuICAgIH1cbiAgICAvLyBEaXNjYXJkIHJlbWFpbmluZyBwZW5kaW5nTWFya2VycyDigJQgdGhleSB0cmFpbCB0aGUgbGFzdCB2aXNpYmxlIHN0ZXAuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8vIOKUgOKUgCBMaWZlY3ljbGUg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbiAgLyoqIENsZWFyIGFsbCBzdG9yZWQgZGF0YS4gQ2FsbGVkIGJ5IGV4ZWN1dG9yIGJlZm9yZSBlYWNoIHJ1bigpLiAqL1xuICBjbGVhcigpOiB2b2lkIHtcbiAgICB0aGlzLmVudHJpZXMubGVuZ3RoID0gMDtcbiAgICB0aGlzLmJ5UnVudGltZVN0YWdlSWQuY2xlYXIoKTtcbiAgICB0aGlzLmVudHJ5UmFuZ2VzLmNsZWFyKCk7XG4gICAgdGhpcy5sYXN0RW1pdHRlZElkID0gdW5kZWZpbmVkO1xuICB9XG59XG4iXX0=
@@ -0,0 +1,195 @@
1
+ /**
2
+ * SequenceStore<T> — concrete, composable storage for ordered sequence data.
3
+ *
4
+ * Pattern: COMPOSITION primitive. Concrete class — instantiate with
5
+ * `new SequenceStore<T>()` and own it as a field on your
6
+ * recorder. Replaces the abstract `SequenceRecorder<T>` base
7
+ * class for the v5 "one purpose per recorder" rule:
8
+ * stores ARE storage; recorders ARE event handlers; consumers
9
+ * COMPOSE.
10
+ * Role: Dual-indexed append-only sequence: a flat array preserving
11
+ * insertion order plus a `Map<runtimeStageId, T[]>` for O(1)
12
+ * per-step lookup. Plus a precomputed range index for time-
13
+ * travel scrubbing.
14
+ *
15
+ * @example
16
+ * ```typescript
17
+ * import { SequenceStore } from 'footprintjs/trace';
18
+ * import type { ScopeRecorder } from 'footprintjs';
19
+ *
20
+ * interface AuditEntry {
21
+ * runtimeStageId?: string;
22
+ * type: 'read' | 'write' | 'decision';
23
+ * detail: string;
24
+ * }
25
+ *
26
+ * // ONE PURPOSE: scope-event handler. Storage is composed in.
27
+ * class AuditRecorder implements ScopeRecorder {
28
+ * readonly id = 'audit';
29
+ * private readonly store = new SequenceStore<AuditEntry>();
30
+ *
31
+ * onRead(event: ReadEvent) {
32
+ * this.store.push({
33
+ * runtimeStageId: event.runtimeStageId,
34
+ * type: 'read',
35
+ * detail: event.key,
36
+ * });
37
+ * }
38
+ * onWrite(event: WriteEvent) {
39
+ * this.store.push({
40
+ * runtimeStageId: event.runtimeStageId,
41
+ * type: 'write',
42
+ * detail: event.key,
43
+ * });
44
+ * }
45
+ *
46
+ * getAudit() { return this.store.getAll(); }
47
+ * getAuditUpTo(ids: ReadonlySet<string>) {
48
+ * return this.store.getEntriesUpTo(ids);
49
+ * }
50
+ *
51
+ * clear() { this.store.clear(); }
52
+ * }
53
+ * ```
54
+ *
55
+ * **Contrast with `KeyedStore<T>`:** SequenceStore stores 1:N entries
56
+ * per runtimeStageId in insertion order. Use KeyedStore for 1:1
57
+ * (one record per step — token counts, metric snapshots).
58
+ */
59
+ export class SequenceStore {
60
+ /** Ordered sequence of all entries (insertion order). */
61
+ entries = [];
62
+ /** Per-step index: runtimeStageId → entries for that step. Same objects as `entries[]`. */
63
+ byRuntimeStageId = new Map();
64
+ /** Per-step range index: runtimeStageId → [firstIdx, endIdx) in entries array.
65
+ * endIdx includes trailing keyless entries (structural markers). Maintained during push(). */
66
+ entryRanges = new Map();
67
+ /** The runtimeStageId of the most recently emitted keyed entry. Used to extend
68
+ * ranges for trailing markers (entries without runtimeStageId attached after a step). */
69
+ lastEmittedId;
70
+ // ── Write ────────────────────────────────────────────────────────────
71
+ /**
72
+ * Append an entry to both the ordered sequence, keyed index, and range index.
73
+ * All three reference the SAME entry object — no duplication.
74
+ */
75
+ push(entry) {
76
+ const idx = this.entries.length;
77
+ this.entries.push(entry);
78
+ const id = entry.runtimeStageId;
79
+ if (id) {
80
+ let arr = this.byRuntimeStageId.get(id);
81
+ if (!arr) {
82
+ arr = [];
83
+ this.byRuntimeStageId.set(id, arr);
84
+ this.entryRanges.set(id, { firstIdx: idx, endIdx: idx + 1 });
85
+ }
86
+ else {
87
+ this.entryRanges.get(id).endIdx = idx + 1;
88
+ }
89
+ arr.push(entry);
90
+ this.lastEmittedId = id;
91
+ }
92
+ else if (this.lastEmittedId) {
93
+ // Structural marker (no runtimeStageId) — extend the preceding step's range.
94
+ this.entryRanges.get(this.lastEmittedId).endIdx = idx + 1;
95
+ }
96
+ }
97
+ // ── Ordered access ───────────────────────────────────────────────────
98
+ /** All entries in insertion order. Returns a shallow copy — entry objects are shared. */
99
+ getAll() {
100
+ return [...this.entries];
101
+ }
102
+ /** Number of entries in the sequence. */
103
+ get size() {
104
+ return this.entries.length;
105
+ }
106
+ /** Zero-copy iteration. Avoids the `getAll()` spread when the caller just needs
107
+ * to walk the entries (e.g., aggregating, rendering). */
108
+ forEach(fn) {
109
+ for (const entry of this.entries)
110
+ fn(entry);
111
+ }
112
+ // ── Keyed access ─────────────────────────────────────────────────────
113
+ /** O(1) lookup: all entries for a specific execution step. Returns a copy. */
114
+ getByKey(runtimeStageId) {
115
+ return [...(this.byRuntimeStageId.get(runtimeStageId) ?? [])];
116
+ }
117
+ /** Number of distinct execution steps that have at least one entry. */
118
+ get keyCount() {
119
+ return this.byRuntimeStageId.size;
120
+ }
121
+ /**
122
+ * Pre-built range index: runtimeStageId → half-open `[firstIdx, endIdx)`
123
+ * range in the entries array. Maintained during `push()` — no rebuild
124
+ * needed. Use for O(1) per-step lookups during time-travel scrubbing.
125
+ * `endIdx` includes trailing keyless entries (structural markers
126
+ * following a step).
127
+ */
128
+ getEntryRanges() {
129
+ return this.entryRanges;
130
+ }
131
+ // ── Aggregate (reduce all entries) ───────────────────────────────────
132
+ /** Reduce ALL entries to a single value. For dashboards, totals, summaries. */
133
+ aggregate(fn, initial) {
134
+ let acc = initial;
135
+ for (const entry of this.entries)
136
+ acc = fn(acc, entry);
137
+ return acc;
138
+ }
139
+ // ── Accumulate (progressive reduce) ──────────────────────────────────
140
+ /**
141
+ * Reduce entries, optionally filtered by a set of `runtimeStageIds`.
142
+ * For time-travel progressive view: pass the runtimeStageIds visible
143
+ * at the current slider position. Entries without `runtimeStageId`
144
+ * (structural markers) are excluded when keys are provided. Without
145
+ * keys, reduces all entries (same as `aggregate`).
146
+ */
147
+ accumulate(fn, initial, keys) {
148
+ let acc = initial;
149
+ for (const entry of this.entries) {
150
+ if (keys) {
151
+ if (!entry.runtimeStageId || !keys.has(entry.runtimeStageId))
152
+ continue;
153
+ }
154
+ acc = fn(acc, entry);
155
+ }
156
+ return acc;
157
+ }
158
+ // ── Time-travel ──────────────────────────────────────────────────────
159
+ /**
160
+ * Progressive reveal: entries whose `runtimeStageId` is in the visible
161
+ * set. Preserves insertion order. Entries without `runtimeStageId`
162
+ * (structural markers) are buffered and included only when surrounded
163
+ * by visible steps on both sides — trailing markers after the last
164
+ * visible step are discarded.
165
+ */
166
+ getEntriesUpTo(visibleIds) {
167
+ const result = [];
168
+ let pendingMarkers = [];
169
+ for (const entry of this.entries) {
170
+ const id = entry.runtimeStageId;
171
+ if (!id) {
172
+ if (result.length > 0)
173
+ pendingMarkers.push(entry);
174
+ }
175
+ else if (visibleIds.has(id)) {
176
+ if (pendingMarkers.length > 0) {
177
+ result.push(...pendingMarkers);
178
+ pendingMarkers = [];
179
+ }
180
+ result.push(entry);
181
+ }
182
+ }
183
+ return result;
184
+ }
185
+ // ── Lifecycle ────────────────────────────────────────────────────────
186
+ /** Clear all stored data. Recorders typically call this from their own
187
+ * `clear()` method, which the executor invokes before each run. */
188
+ clear() {
189
+ this.entries.length = 0;
190
+ this.byRuntimeStageId.clear();
191
+ this.entryRanges.clear();
192
+ this.lastEmittedId = undefined;
193
+ }
194
+ }
195
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2VxdWVuY2VTdG9yZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvcmVjb3JkZXIvU2VxdWVuY2VTdG9yZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBeURHO0FBQ0gsTUFBTSxPQUFPLGFBQWE7SUFDeEIseURBQXlEO0lBQ3hDLE9BQU8sR0FBUSxFQUFFLENBQUM7SUFDbkMsMkZBQTJGO0lBQzFFLGdCQUFnQixHQUFHLElBQUksR0FBRyxFQUFlLENBQUM7SUFDM0Q7bUdBQytGO0lBQzlFLFdBQVcsR0FBRyxJQUFJLEdBQUcsRUFBZ0QsQ0FBQztJQUN2Rjs4RkFDMEY7SUFDbEYsYUFBYSxDQUFxQjtJQUUxQyx3RUFBd0U7SUFFeEU7OztPQUdHO0lBQ0gsSUFBSSxDQUFDLEtBQVE7UUFDWCxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQztRQUNoQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN6QixNQUFNLEVBQUUsR0FBRyxLQUFLLENBQUMsY0FBYyxDQUFDO1FBQ2hDLElBQUksRUFBRSxFQUFFLENBQUM7WUFDUCxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ3hDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztnQkFDVCxHQUFHLEdBQUcsRUFBRSxDQUFDO2dCQUNULElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDO2dCQUNuQyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxHQUFHLEdBQUcsQ0FBQyxFQUFFLENB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LENBQUM7b0JBQUUsY0FBYyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNwRCxDQUFDO2lCQUFNLElBQUksVUFBVSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO2dCQUM5QixJQUFJLGNBQWMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7b0JBQzlCLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxjQUFjLENBQUMsQ0FBQztvQkFDL0IsY0FBYyxHQUFHLEVBQUUsQ0FBQztnQkFDdEIsQ0FBQztnQkFDRCxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3JCLENBQUM7UUFDSCxDQUFDO1FBQ0QsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQUVELHdFQUF3RTtJQUV4RTt3RUFDb0U7SUFDcEUsS0FBSztRQUNILElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztRQUN4QixJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDOUIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUN6QixJQUFJLENBQUMsYUFBYSxHQUFHLFNBQVMsQ0FBQztJQUNqQyxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFNlcXVlbmNlU3RvcmU8VD4g4oCUIGNvbmNyZXRlLCBjb21wb3NhYmxlIHN0b3JhZ2UgZm9yIG9yZGVyZWQgc2VxdWVuY2UgZGF0YS5cbiAqXG4gKiBQYXR0ZXJuOiBDT01QT1NJVElPTiBwcmltaXRpdmUuIENvbmNyZXRlIGNsYXNzIOKAlCBpbnN0YW50aWF0ZSB3aXRoXG4gKiAgICAgICAgICBgbmV3IFNlcXVlbmNlU3RvcmU8VD4oKWAgYW5kIG93biBpdCBhcyBhIGZpZWxkIG9uIHlvdXJcbiAqICAgICAgICAgIHJlY29yZGVyLiBSZXBsYWNlcyB0aGUgYWJzdHJhY3QgYFNlcXVlbmNlUmVjb3JkZXI8VD5gIGJhc2VcbiAqICAgICAgICAgIGNsYXNzIGZvciB0aGUgdjUgXCJvbmUgcHVycG9zZSBwZXIgcmVjb3JkZXJcIiBydWxlOlxuICogICAgICAgICAgc3RvcmVzIEFSRSBzdG9yYWdlOyByZWNvcmRlcnMgQVJFIGV2ZW50IGhhbmRsZXJzOyBjb25zdW1lcnNcbiAqICAgICAgICAgIENPTVBPU0UuXG4gKiBSb2xlOiAgICBEdWFsLWluZGV4ZWQgYXBwZW5kLW9ubHkgc2VxdWVuY2U6IGEgZmxhdCBhcnJheSBwcmVzZXJ2aW5nXG4gKiAgICAgICAgICBpbnNlcnRpb24gb3JkZXIgcGx1cyBhIGBNYXA8cnVudGltZVN0YWdlSWQsIFRbXT5gIGZvciBPKDEpXG4gKiAgICAgICAgICBwZXItc3RlcCBsb29rdXAuIFBsdXMgYSBwcmVjb21wdXRlZCByYW5nZSBpbmRleCBmb3IgdGltZS1cbiAqICAgICAgICAgIHRyYXZlbCBzY3J1YmJpbmcuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGltcG9ydCB7IFNlcXVlbmNlU3RvcmUgfSBmcm9tICdmb290cHJpbnRqcy90cmFjZSc7XG4gKiBpbXBvcnQgdHlwZSB7IFNjb3BlUmVjb3JkZXIgfSBmcm9tICdmb290cHJpbnRqcyc7XG4gKlxuICogaW50ZXJmYWNlIEF1ZGl0RW50cnkge1xuICogICBydW50aW1lU3RhZ2VJZD86IHN0cmluZztcbiAqICAgdHlwZTogJ3JlYWQnIHwgJ3dyaXRlJyB8ICdkZWNpc2lvbic7XG4gKiAgIGRldGFpbDogc3RyaW5nO1xuICogfVxuICpcbiAqIC8vIE9ORSBQVVJQT1NFOiBzY29wZS1ldmVudCBoYW5kbGVyLiBTdG9yYWdlIGlzIGNvbXBvc2VkIGluLlxuICogY2xhc3MgQXVkaXRSZWNvcmRlciBpbXBsZW1lbnRzIFNjb3BlUmVjb3JkZXIge1xuICogICByZWFkb25seSBpZCA9ICdhdWRpdCc7XG4gKiAgIHByaXZhdGUgcmVhZG9ubHkgc3RvcmUgPSBuZXcgU2VxdWVuY2VTdG9yZTxBdWRpdEVudHJ5PigpO1xuICpcbiAqICAgb25SZWFkKGV2ZW50OiBSZWFkRXZlbnQpIHtcbiAqICAgICB0aGlzLnN0b3JlLnB1c2goe1xuICogICAgICAgcnVudGltZVN0YWdlSWQ6IGV2ZW50LnJ1bnRpbWVTdGFnZUlkLFxuICogICAgICAgdHlwZTogJ3JlYWQnLFxuICogICAgICAgZGV0YWlsOiBldmVudC5rZXksXG4gKiAgICAgfSk7XG4gKiAgIH1cbiAqICAgb25Xcml0ZShldmVudDogV3JpdGVFdmVudCkge1xuICogICAgIHRoaXMuc3RvcmUucHVzaCh7XG4gKiAgICAgICBydW50aW1lU3RhZ2VJZDogZXZlbnQucnVudGltZVN0YWdlSWQsXG4gKiAgICAgICB0eXBlOiAnd3JpdGUnLFxuICogICAgICAgZGV0YWlsOiBldmVudC5rZXksXG4gKiAgICAgfSk7XG4gKiAgIH1cbiAqXG4gKiAgIGdldEF1ZGl0KCkgeyByZXR1cm4gdGhpcy5zdG9yZS5nZXRBbGwoKTsgfVxuICogICBnZXRBdWRpdFVwVG8oaWRzOiBSZWFkb25seVNldDxzdHJpbmc+KSB7XG4gKiAgICAgcmV0dXJuIHRoaXMuc3RvcmUuZ2V0RW50cmllc1VwVG8oaWRzKTtcbiAqICAgfVxuICpcbiAqICAgY2xlYXIoKSB7IHRoaXMuc3RvcmUuY2xlYXIoKTsgfVxuICogfVxuICogYGBgXG4gKlxuICogKipDb250cmFzdCB3aXRoIGBLZXllZFN0b3JlPFQ+YDoqKiBTZXF1ZW5jZVN0b3JlIHN0b3JlcyAxOk4gZW50cmllc1xuICogcGVyIHJ1bnRpbWVTdGFnZUlkIGluIGluc2VydGlvbiBvcmRlci4gVXNlIEtleWVkU3RvcmUgZm9yIDE6MVxuICogKG9uZSByZWNvcmQgcGVyIHN0ZXAg4oCUIHRva2VuIGNvdW50cywgbWV0cmljIHNuYXBzaG90cykuXG4gKi9cbmV4cG9ydCBjbGFzcyBTZXF1ZW5jZVN0b3JlPFQgZXh0ZW5kcyB7IHJ1bnRpbWVTdGFnZUlkPzogc3RyaW5nIH0+IHtcbiAgLyoqIE9yZGVyZWQgc2VxdWVuY2Ugb2YgYWxsIGVudHJpZXMgKGluc2VydGlvbiBvcmRlcikuICovXG4gIHByaXZhdGUgcmVhZG9ubHkgZW50cmllczogVFtdID0gW107XG4gIC8qKiBQZXItc3RlcCBpbmRleDogcnVudGltZVN0YWdlSWQg4oaSIGVudHJpZXMgZm9yIHRoYXQgc3RlcC4gU2FtZSBvYmplY3RzIGFzIGBlbnRyaWVzW11gLiAqL1xuICBwcml2YXRlIHJlYWRvbmx5IGJ5UnVudGltZVN0YWdlSWQgPSBuZXcgTWFwPHN0cmluZywgVFtdPigpO1xuICAvKiogUGVyLXN0ZXAgcmFuZ2UgaW5kZXg6IHJ1bnRpbWVTdGFnZUlkIOKGkiBbZmlyc3RJZHgsIGVuZElkeCkgaW4gZW50cmllcyBhcnJheS5cbiAgICogIGVuZElkeCBpbmNsdWRlcyB0cmFpbGluZyBrZXlsZXNzIGVudHJpZXMgKHN0cnVjdHVyYWwgbWFya2VycykuIE1haW50YWluZWQgZHVyaW5nIHB1c2goKS4gKi9cbiAgcHJpdmF0ZSByZWFkb25seSBlbnRyeVJhbmdlcyA9IG5ldyBNYXA8c3RyaW5nLCB7IGZpcnN0SWR4OiBudW1iZXI7IGVuZElkeDogbnVtYmVyIH0+KCk7XG4gIC8qKiBUaGUgcnVudGltZVN0YWdlSWQgb2YgdGhlIG1vc3QgcmVjZW50bHkgZW1pdHRlZCBrZXllZCBlbnRyeS4gVXNlZCB0byBleHRlbmRcbiAgICogIHJhbmdlcyBmb3IgdHJhaWxpbmcgbWFya2VycyAoZW50cmllcyB3aXRob3V0IHJ1bnRpbWVTdGFnZUlkIGF0dGFjaGVkIGFmdGVyIGEgc3RlcCkuICovXG4gIHByaXZhdGUgbGFzdEVtaXR0ZWRJZDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gIC8vIOKUgOKUgCBXcml0ZSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuICAvKipcbiAgICogQXBwZW5kIGFuIGVudHJ5IHRvIGJvdGggdGhlIG9yZGVyZWQgc2VxdWVuY2UsIGtleWVkIGluZGV4LCBhbmQgcmFuZ2UgaW5kZXguXG4gICAqIEFsbCB0aHJlZSByZWZlcmVuY2UgdGhlIFNBTUUgZW50cnkgb2JqZWN0IOKAlCBubyBkdXBsaWNhdGlvbi5cbiAgICovXG4gIHB1c2goZW50cnk6IFQpOiB2b2lkIHtcbiAgICBjb25zdCBpZHggPSB0aGlzLmVudHJpZXMubGVuZ3RoO1xuICAgIHRoaXMuZW50cmllcy5wdXNoKGVudHJ5KTtcbiAgICBjb25zdCBpZCA9IGVudHJ5LnJ1bnRpbWVTdGFnZUlkO1xuICAgIGlmIChpZCkge1xuICAgICAgbGV0IGFyciA9IHRoaXMuYnlSdW50aW1lU3RhZ2VJZC5nZXQoaWQpO1xuICAgICAgaWYgKCFhcnIpIHtcbiAgICAgICAgYXJyID0gW107XG4gICAgICAgIHRoaXMuYnlSdW50aW1lU3RhZ2VJZC5zZXQoaWQsIGFycik7XG4gICAgICAgIHRoaXMuZW50cnlSYW5nZXMuc2V0KGlkLCB7IGZpcnN0SWR4OiBpZHgsIGVuZElkeDogaWR4ICsgMSB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuZW50cnlSYW5nZXMuZ2V0KGlkKSEuZW5kSWR4ID0gaWR4ICsgMTtcbiAgICAgIH1cbiAgICAgIGFyci5wdXNoKGVudHJ5KTtcbiAgICAgIHRoaXMubGFzdEVtaXR0ZWRJZCA9IGlkO1xuICAgIH0gZWxzZSBpZiAodGhpcy5sYXN0RW1pdHRlZElkKSB7XG4gICAgICAvLyBTdHJ1Y3R1cmFsIG1hcmtlciAobm8gcnVudGltZVN0YWdlSWQpIOKAlCBleHRlbmQgdGhlIHByZWNlZGluZyBzdGVwJ3MgcmFuZ2UuXG4gICAgICB0aGlzLmVudHJ5UmFuZ2VzLmdldCh0aGlzLmxhc3RFbWl0dGVkSWQpIS5lbmRJZHggPSBpZHggKyAxO1xuICAgIH1cbiAgfVxuXG4gIC8vIOKUgOKUgCBPcmRlcmVkIGFjY2VzcyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuICAvKiogQWxsIGVudHJpZXMgaW4gaW5zZXJ0aW9uIG9yZGVyLiBSZXR1cm5zIGEgc2hhbGxvdyBjb3B5IOKAlCBlbnRyeSBvYmplY3RzIGFyZSBzaGFyZWQuICovXG4gIGdldEFsbCgpOiBUW10ge1xuICAgIHJldHVybiBbLi4udGhpcy5lbnRyaWVzXTtcbiAgfVxuXG4gIC8qKiBOdW1iZXIgb2YgZW50cmllcyBpbiB0aGUgc2VxdWVuY2UuICovXG4gIGdldCBzaXplKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuZW50cmllcy5sZW5ndGg7XG4gIH1cblxuICAvKiogWmVyby1jb3B5IGl0ZXJhdGlvbi4gQXZvaWRzIHRoZSBgZ2V0QWxsKClgIHNwcmVhZCB3aGVuIHRoZSBjYWxsZXIganVzdCBuZWVkc1xuICAgKiAgdG8gd2FsayB0aGUgZW50cmllcyAoZS5nLiwgYWdncmVnYXRpbmcsIHJlbmRlcmluZykuICovXG4gIGZvckVhY2goZm46IChlbnRyeTogVCkgPT4gdm9pZCk6IHZvaWQge1xuICAgIGZvciAoY29uc3QgZW50cnkgb2YgdGhpcy5lbnRyaWVzKSBmbihlbnRyeSk7XG4gIH1cblxuICAvLyDilIDilIAgS2V5ZWQgYWNjZXNzIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4gIC8qKiBPKDEpIGxvb2t1cDogYWxsIGVudHJpZXMgZm9yIGEgc3BlY2lmaWMgZXhlY3V0aW9uIHN0ZXAuIFJldHVybnMgYSBjb3B5LiAqL1xuICBnZXRCeUtleShydW50aW1lU3RhZ2VJZDogc3RyaW5nKTogVFtdIHtcbiAgICByZXR1cm4gWy4uLih0aGlzLmJ5UnVudGltZVN0YWdlSWQuZ2V0KHJ1bnRpbWVTdGFnZUlkKSA/PyBbXSldO1xuICB9XG5cbiAgLyoqIE51bWJlciBvZiBkaXN0aW5jdCBleGVjdXRpb24gc3RlcHMgdGhhdCBoYXZlIGF0IGxlYXN0IG9uZSBlbnRyeS4gKi9cbiAgZ2V0IGtleUNvdW50KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuYnlSdW50aW1lU3RhZ2VJZC5zaXplO1xuICB9XG5cbiAgLyoqXG4gICAqIFByZS1idWlsdCByYW5nZSBpbmRleDogcnVudGltZVN0YWdlSWQg4oaSIGhhbGYtb3BlbiBgW2ZpcnN0SWR4LCBlbmRJZHgpYFxuICAgKiByYW5nZSBpbiB0aGUgZW50cmllcyBhcnJheS4gTWFpbnRhaW5lZCBkdXJpbmcgYHB1c2goKWAg4oCUIG5vIHJlYnVpbGRcbiAgICogbmVlZGVkLiBVc2UgZm9yIE8oMSkgcGVyLXN0ZXAgbG9va3VwcyBkdXJpbmcgdGltZS10cmF2ZWwgc2NydWJiaW5nLlxuICAgKiBgZW5kSWR4YCBpbmNsdWRlcyB0cmFpbGluZyBrZXlsZXNzIGVudHJpZXMgKHN0cnVjdHVyYWwgbWFya2Vyc1xuICAgKiBmb2xsb3dpbmcgYSBzdGVwKS5cbiAgICovXG4gIGdldEVudHJ5UmFuZ2VzKCk6IFJlYWRvbmx5TWFwPHN0cmluZywgeyByZWFkb25seSBmaXJzdElkeDogbnVtYmVyOyByZWFkb25seSBlbmRJZHg6IG51bWJlciB9PiB7XG4gICAgcmV0dXJuIHRoaXMuZW50cnlSYW5nZXM7XG4gIH1cblxuICAvLyDilIDilIAgQWdncmVnYXRlIChyZWR1Y2UgYWxsIGVudHJpZXMpIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4gIC8qKiBSZWR1Y2UgQUxMIGVudHJpZXMgdG8gYSBzaW5nbGUgdmFsdWUuIEZvciBkYXNoYm9hcmRzLCB0b3RhbHMsIHN1bW1hcmllcy4gKi9cbiAgYWdncmVnYXRlPFI+KGZuOiAoYWNjOiBSLCBlbnRyeTogVCkgPT4gUiwgaW5pdGlhbDogUik6IFIge1xuICAgIGxldCBhY2MgPSBpbml0aWFsO1xuICAgIGZvciAoY29uc3QgZW50cnkgb2YgdGhpcy5lbnRyaWVzKSBhY2MgPSBmbihhY2MsIGVudHJ5KTtcbiAgICByZXR1cm4gYWNjO1xuICB9XG5cbiAgLy8g4pSA4pSAIEFjY3VtdWxhdGUgKHByb2dyZXNzaXZlIHJlZHVjZSkg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbiAgLyoqXG4gICAqIFJlZHVjZSBlbnRyaWVzLCBvcHRpb25hbGx5IGZpbHRlcmVkIGJ5IGEgc2V0IG9mIGBydW50aW1lU3RhZ2VJZHNgLlxuICAgKiBGb3IgdGltZS10cmF2ZWwgcHJvZ3Jlc3NpdmUgdmlldzogcGFzcyB0aGUgcnVudGltZVN0YWdlSWRzIHZpc2libGVcbiAgICogYXQgdGhlIGN1cnJlbnQgc2xpZGVyIHBvc2l0aW9uLiBFbnRyaWVzIHdpdGhvdXQgYHJ1bnRpbWVTdGFnZUlkYFxuICAgKiAoc3RydWN0dXJhbCBtYXJrZXJzKSBhcmUgZXhjbHVkZWQgd2hlbiBrZXlzIGFyZSBwcm92aWRlZC4gV2l0aG91dFxuICAgKiBrZXlzLCByZWR1Y2VzIGFsbCBlbnRyaWVzIChzYW1lIGFzIGBhZ2dyZWdhdGVgKS5cbiAgICovXG4gIGFjY3VtdWxhdGU8Uj4oZm46IChhY2M6IFIsIGVudHJ5OiBUKSA9PiBSLCBpbml0aWFsOiBSLCBrZXlzPzogUmVhZG9ubHlTZXQ8c3RyaW5nPik6IFIge1xuICAgIGxldCBhY2MgPSBpbml0aWFsO1xuICAgIGZvciAoY29uc3QgZW50cnkgb2YgdGhpcy5lbnRyaWVzKSB7XG4gICAgICBpZiAoa2V5cykge1xuICAgICAgICBpZiAoIWVudHJ5LnJ1bnRpbWVTdGFnZUlkIHx8ICFrZXlzLmhhcyhlbnRyeS5ydW50aW1lU3RhZ2VJZCkpIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgYWNjID0gZm4oYWNjLCBlbnRyeSk7XG4gICAgfVxuICAgIHJldHVybiBhY2M7XG4gIH1cblxuICAvLyDilIDilIAgVGltZS10cmF2ZWwg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbiAgLyoqXG4gICAqIFByb2dyZXNzaXZlIHJldmVhbDogZW50cmllcyB3aG9zZSBgcnVudGltZVN0YWdlSWRgIGlzIGluIHRoZSB2aXNpYmxlXG4gICAqIHNldC4gUHJlc2VydmVzIGluc2VydGlvbiBvcmRlci4gRW50cmllcyB3aXRob3V0IGBydW50aW1lU3RhZ2VJZGBcbiAgICogKHN0cnVjdHVyYWwgbWFya2VycykgYXJlIGJ1ZmZlcmVkIGFuZCBpbmNsdWRlZCBvbmx5IHdoZW4gc3Vycm91bmRlZFxuICAgKiBieSB2aXNpYmxlIHN0ZXBzIG9uIGJvdGggc2lkZXMg4oCUIHRyYWlsaW5nIG1hcmtlcnMgYWZ0ZXIgdGhlIGxhc3RcbiAgICogdmlzaWJsZSBzdGVwIGFyZSBkaXNjYXJkZWQuXG4gICAqL1xuICBnZXRFbnRyaWVzVXBUbyh2aXNpYmxlSWRzOiBSZWFkb25seVNldDxzdHJpbmc+KTogVFtdIHtcbiAgICBjb25zdCByZXN1bHQ6IFRbXSA9IFtdO1xuICAgIGxldCBwZW5kaW5nTWFya2VyczogVFtdID0gW107XG4gICAgZm9yIChjb25zdCBlbnRyeSBvZiB0aGlzLmVudHJpZXMpIHtcbiAgICAgIGNvbnN0IGlkID0gZW50cnkucnVudGltZVN0YWdlSWQ7XG4gICAgICBpZiAoIWlkKSB7XG4gICAgICAgIGlmIChyZXN1bHQubGVuZ3RoID4gMCkgcGVuZGluZ01hcmtlcnMucHVzaChlbnRyeSk7XG4gICAgICB9IGVsc2UgaWYgKHZpc2libGVJZHMuaGFzKGlkKSkge1xuICAgICAgICBpZiAocGVuZGluZ01hcmtlcnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIHJlc3VsdC5wdXNoKC4uLnBlbmRpbmdNYXJrZXJzKTtcbiAgICAgICAgICBwZW5kaW5nTWFya2VycyA9IFtdO1xuICAgICAgICB9XG4gICAgICAgIHJlc3VsdC5wdXNoKGVudHJ5KTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8vIOKUgOKUgCBMaWZlY3ljbGUg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbiAgLyoqIENsZWFyIGFsbCBzdG9yZWQgZGF0YS4gUmVjb3JkZXJzIHR5cGljYWxseSBjYWxsIHRoaXMgZnJvbSB0aGVpciBvd25cbiAgICogIGBjbGVhcigpYCBtZXRob2QsIHdoaWNoIHRoZSBleGVjdXRvciBpbnZva2VzIGJlZm9yZSBlYWNoIHJ1bi4gKi9cbiAgY2xlYXIoKTogdm9pZCB7XG4gICAgdGhpcy5lbnRyaWVzLmxlbmd0aCA9IDA7XG4gICAgdGhpcy5ieVJ1bnRpbWVTdGFnZUlkLmNsZWFyKCk7XG4gICAgdGhpcy5lbnRyeVJhbmdlcy5jbGVhcigpO1xuICAgIHRoaXMubGFzdEVtaXR0ZWRJZCA9IHVuZGVmaW5lZDtcbiAgfVxufVxuIl19
@@ -319,4 +319,4 @@ export class TopologyRecorder {
319
319
  };
320
320
  }
321
321
  }
322
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVG9wb2xvZ3lSZWNvcmRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvcmVjb3JkZXIvVG9wb2xvZ3lSZWNvcmRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQWlERztBQTJFSCxJQUFJLFFBQVEsR0FBRyxDQUFDLENBQUM7QUFFakI7O0dBRUc7QUFDSCxNQUFNLFVBQVUsZ0JBQWdCLENBQUMsVUFBbUMsRUFBRTtJQUNwRSxPQUFPLElBQUksZ0JBQWdCLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDdkMsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxNQUFNLE9BQU8sZ0JBQWdCO0lBQ2xCLEVBQUUsQ0FBUztJQUVILFNBQVMsR0FBRyxJQUFJLEdBQUcsRUFBd0IsQ0FBQztJQUM1QyxTQUFTLEdBQWEsRUFBRSxDQUFDO0lBQ3pCLEtBQUssR0FBbUIsRUFBRSxDQUFDO0lBQzVDLCtFQUErRTtJQUM5RCxZQUFZLEdBQWEsRUFBRSxDQUFDO0lBRTdDOzhDQUMwQztJQUN6QixpQkFBaUIsR0FBRyxJQUFJLEdBQUcsRUFBd0IsQ0FBQztJQUNyRSw0RUFBNEU7SUFDcEUsZUFBZSxDQUFtQztJQUMxRDs7Ozs7Ozs7Ozs7O09BWUc7SUFDYyxzQkFBc0IsR0FBRyxJQUFJLEdBQUcsRUFBZ0QsQ0FBQztJQUVsRyxZQUFZLFVBQW1DLEVBQUU7UUFDL0MsSUFBSSxDQUFDLEVBQUUsR0FBRyxPQUFPLENBQUMsRUFBRSxJQUFJLFlBQVksRUFBRSxRQUFRLEVBQUUsQ0FBQztJQUNuRCxDQUFDO0lBRUQseUVBQXlFO0lBRXpFLGNBQWMsQ0FBQyxLQUF1QjtRQUNwQyxNQUFNLFNBQVMsR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDO1FBQ2xDLElBQUksQ0FBQyxTQUFTO1lBQUUsT0FBTyxDQUFDLDZCQUE2QjtRQUVyRCxNQUFNLFNBQVMsR0FB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LENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxhQUFhLENBQUMsQ0FBQztJQUNqRixDQUFDO0lBRUQsd0VBQXdFO0lBQ3hFLFVBQVU7UUFDUixPQUFPO1lBQ0wsSUFBSSxFQUFFLFVBQVU7WUFDaEIsV0FBVyxFQUFFLHlFQUF5RTtZQUN0RixrQkFBa0IsRUFBRSxXQUFvQjtZQUN4QyxJQUFJLEVBQUUsSUFBSSxDQUFDLFdBQVcsRUFBRTtTQUN6QixDQUFDO0lBQ0osQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBUb3BvbG9neVJlY29yZGVyIOKAlCBjb21wb3NpdGlvbiBncmFwaCBidWlsdCBkdXJpbmcgdHJhdmVyc2FsLlxuICpcbiAqIFRoZSBnYXAgdGhpcyBmaWxsczpcbiAqICAgZm9vdHByaW50anMgZmlyZXMgYXRvbWljIGZsb3cgZXZlbnRzIChvblN1YmZsb3dFbnRyeSwgb25Gb3JrLCBvbkRlY2lzaW9uLFxuICogICBvbkxvb3ApIGJ1dCB0aGUgYWNjdW11bGF0ZWQgKnNoYXBlKiBvZiBhIHJ1biDigJQgd2hvIG5lc3RzIGluc2lkZSB3aG9tLFxuICogICB3aGljaCBub2RlcyBhcmUgcGFyYWxsZWwgc2libGluZ3MgdnMgYnJhbmNoZXMgb2YgYSBkZWNpc2lvbiDigJQgaXMgb25seVxuICogICB2aXNpYmxlIHBvc3QtcnVuIHZpYSBgZXhlY3V0b3IuZ2V0U25hcHNob3QoKWAgdHJlZS13YWxraW5nLlxuICpcbiAqICAgU3RyZWFtaW5nIGNvbnN1bWVycyAobGl2ZSBVSXMsIGluLWZsaWdodCBkZWJ1Z2dlcnMpIHNlZSBvbmx5IHRoZSBldmVudFxuICogICBzdHJlYW0uIEV2ZXJ5IHN1Y2ggY29uc3VtZXIgaGFzIHRvIHJlYnVpbGQgc3ViZmxvdy1zdGFjayArIGZvcmstbWFwICtcbiAqICAgZGVjaXNpb24tdHJhY2tlciBmcm9tIHNjcmF0Y2gsIHVzdWFsbHkgc2xpZ2h0bHkgd3JvbmcgaW4gZGlmZmVyZW50IHdheXMuXG4gKlxuICogICBUb3BvbG9neVJlY29yZGVyIGlzIHRoZSBzdGFuZGFyZCBhY2N1bXVsYXRvcjogb25lIHN1YnNjcmlwdGlvbiB0byB0aGVcbiAqICAgdGhyZWUgcHJpbWl0aXZlIGNoYW5uZWxzLCBvbmUgbGl2ZSBncmFwaCwgcXVlcnlhYmxlIGF0IGFueSBtb21lbnQgZHVyaW5nXG4gKiAgIG9yIGFmdGVyIGEgcnVuLlxuICpcbiAqIFdoYXQgaXQgcmVjb3JkcyDigJQgVEhSRUUgbm9kZSBraW5kcyBmb3IgY29tcGxldGUgY29tcG9zaXRpb24gY292ZXJhZ2U6XG4gKiAgIDEuICdzdWJmbG93JyAgICAgICAgICDigJQgdmlhIG9uU3ViZmxvd0VudHJ5IChhIG1vdW50ZWQgc3ViZmxvdyBib3VuZGFyeSlcbiAqICAgMi4gJ2ZvcmstYnJhbmNoJyAgICAgIOKAlCB2aWEgb25Gb3JrIChvbmUgbm9kZSBwZXIgY2hpbGQsIHN5bnRoZXNpemVkKVxuICogICAzLiAnZGVjaXNpb24tYnJhbmNoJyAg4oCUIHZpYSBvbkRlY2lzaW9uICh0aGUgY2hvc2VuIGJyYW5jaCwgc3ludGhlc2l6ZWQpXG4gKlxuICogICBXaGVuIGEgZm9yay1icmFuY2ggb3IgZGVjaXNpb24tYnJhbmNoIHRhcmdldCBJUyBBTFNPIGEgc3ViZmxvdywgdGhlXG4gKiAgIHN1YnNlcXVlbnQgb25TdWJmbG93RW50cnkgY3JlYXRlcyBhIHN1YmZsb3cgQ0hJTEQgb2YgdGhlIHN5bnRoZXRpYyBub2RlLlxuICogICBUaGUgbGF5ZXJlZCBzaGFwZSBwcmVzZXJ2ZXMgYm90aCBcIndobyBicmFuY2hlZFwiIGFuZCBcIndoYXQgdGhlIGJyYW5jaCByYW4uXCJcbiAqXG4gKiAgIFBsYWluIHNlcXVlbnRpYWwgc3RhZ2VzIGFyZSBOT1Qgbm9kZXMg4oCUIHRoYXQncyBTdGFnZUNvbnRleHQncyBqb2IuXG4gKiAgIFRvcG9sb2d5IGlzIGEgZ3JhcGggb2YgY29udHJvbC1mbG93IGJyYW5jaGluZywgbm90IGEgZnVsbCBleGVjdXRpb24gdHJlZS5cbiAqXG4gKiBFZGdlczpcbiAqICAgT25lIGVkZ2UgcGVyIHRyYXZlcnNhbCB0cmFuc2l0aW9uIOKAlCBga2luZGAgbWF0Y2hlcyB0aGUgY2hpbGQnc1xuICogICBgaW5jb21pbmdLaW5kYC4gQSBjb25zdW1lciByZW5kZXJpbmcgXCJwYXJhbGxlbCBjb2x1bW5zXCIgZmlsdGVycyBlZGdlc1xuICogICB3aGVyZSBga2luZCA9PT0gJ2ZvcmstYnJhbmNoJ2Agc2hhcmluZyB0aGUgc2FtZSBgZnJvbWAuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGltcG9ydCB7IHRvcG9sb2d5UmVjb3JkZXIgfSBmcm9tICdmb290cHJpbnRqcy90cmFjZSc7XG4gKlxuICogY29uc3QgdG9wbyA9IHRvcG9sb2d5UmVjb3JkZXIoKTtcbiAqIGV4ZWN1dG9yLmF0dGFjaENvbWJpbmVkUmVjb3JkZXIodG9wbyk7ICAvLyBhdXRvLXJvdXRlcyB0byBGbG93UmVjb3JkZXIgY2hhbm5lbFxuICpcbiAqIGF3YWl0IGV4ZWN1dG9yLnJ1bigpO1xuICpcbiAqIGNvbnN0IHsgbm9kZXMsIGVkZ2VzLCBhY3RpdmVOb2RlSWQsIHJvb3RJZCB9ID0gdG9wby5nZXRUb3BvbG9neSgpO1xuICogLy8gQ29uc3VtZXIgcXVlcmllczpcbiAqIHRvcG8uZ2V0Q2hpbGRyZW4oJ3NmLXBhcmVudCcpOyAgICAgICAgICAgICAgLy8gZGlyZWN0IGNoaWxkcmVuIChhbnkga2luZClcbiAqIHRvcG8uZ2V0QnlLaW5kKCdmb3JrLWJyYW5jaCcpOyAgICAgICAgICAgICAgLy8gYWxsIHBhcmFsbGVsIGJyYW5jaGVzXG4gKiB0b3BvLmdldFN1YmZsb3dOb2RlcygpOyAgICAgICAgICAgICAgICAgICAgIC8vIG9ubHkgbW91bnRlZCBzdWJmbG93c1xuICogYGBgXG4gKi9cblxuaW1wb3J0IHR5cGUge1xuICBGbG93RGVjaXNpb25FdmVudCxcbiAgRmxvd0ZvcmtFdmVudCxcbiAgRmxvd0xvb3BFdmVudCxcbiAgRmxvd1JlY29yZGVyLFxuICBGbG93U3ViZmxvd0V2ZW50LFxufSBmcm9tICcuLi9lbmdpbmUvbmFycmF0aXZlL3R5cGVzLmpzJztcblxuLyoqIFRoZSBraW5kIG9mIGNvbXBvc2l0aW9uIHVuaXQgYSBub2RlIHJlcHJlc2VudHMuICovXG5leHBvcnQgdHlwZSBUb3BvbG9neU5vZGVLaW5kID0gJ3N1YmZsb3cnIHwgJ2ZvcmstYnJhbmNoJyB8ICdkZWNpc2lvbi1icmFuY2gnO1xuXG4vKiogSG93IHRoZSB0cmF2ZXJzYWwgcmVhY2hlZCB0aGlzIG5vZGUg4oCUIGRyaXZlcyBjb25zdW1lciBsYXlvdXQgZGVjaXNpb25zLiAqL1xuZXhwb3J0IHR5cGUgVG9wb2xvZ3lJbmNvbWluZ0tpbmQgPSAncm9vdCcgfCAnbmV4dCcgfCAnZm9yay1icmFuY2gnIHwgJ2RlY2lzaW9uLWJyYW5jaCcgfCAnbG9vcC1pdGVyYXRpb24nO1xuXG4vKiogQSBjb21wb3NpdGlvbi1zaWduaWZpY2FudCBwb2ludCBpbiB0aGUgZ3JhcGguICovXG5leHBvcnQgaW50ZXJmYWNlIFRvcG9sb2d5Tm9kZSB7XG4gIC8qKiBVbmlxdWUgaWQuIFN1YmZsb3dzIHVzZSB0aGVpciBzdWJmbG93SWQgKHdpdGggYCNuYCBzdWZmaXggb24gcmUtZW50cnkpLlxuICAgKiAgU3ludGhldGljIG5vZGVzIChmb3JrLWJyYW5jaCAvIGRlY2lzaW9uLWJyYW5jaCkgdXNlXG4gICAqICBgZm9yay0ke3J1bnRpbWVTdGFnZUlkfS0ke2l9YCAvIGBkZWNpc2lvbi0ke3J1bnRpbWVTdGFnZUlkfWAgZm9ybS4gKi9cbiAgcmVhZG9ubHkgaWQ6IHN0cmluZztcbiAgLyoqIFdoYXQgdGhpcyBub2RlIHJlcHJlc2VudHMuICovXG4gIHJlYWRvbmx5IGtpbmQ6IFRvcG9sb2d5Tm9kZUtpbmQ7XG4gIC8qKiBEaXNwbGF5IG5hbWUuIEZvciBzdWJmbG93czogYEZsb3dTdWJmbG93RXZlbnQubmFtZWAuIEZvciBmb3JrLWJyYW5jaGVzOlxuICAgKiAgdGhlIGNoaWxkIG5hbWUgZnJvbSBgRmxvd0ZvcmtFdmVudC5jaGlsZHJlbmAuIEZvciBkZWNpc2lvbi1icmFuY2hlczpcbiAgICogIHRoZSBjaG9zZW4gbmFtZSBmcm9tIGBGbG93RGVjaXNpb25FdmVudC5jaG9zZW5gLiAqL1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG4gIC8qKiBQYXJlbnQgbm9kZSBpZC4gVW5kZWZpbmVkIHdoZW4gdGhpcyBub2RlIHNpdHMgYXQgdGhlIHJ1bidzIHRvcCBsZXZlbC4gKi9cbiAgcmVhZG9ubHkgcGFyZW50SWQ/OiBzdHJpbmc7XG4gIC8qKiBEZXB0aCBpbiB0aGUgdG9wb2xvZ3kgdHJlZSAoMCA9IHRvcC1sZXZlbCkuICovXG4gIHJlYWRvbmx5IGRlcHRoOiBudW1iZXI7XG4gIC8qKiBIb3cgdGhlIHRyYXZlcnNhbCByZWFjaGVkIHRoaXMgbm9kZS4gKi9cbiAgcmVhZG9ubHkgaW5jb21pbmdLaW5kOiBUb3BvbG9neUluY29taW5nS2luZDtcbiAgLyoqIHJ1bnRpbWVTdGFnZUlkIGF0IHRoZSBtb21lbnQgdGhlIG5vZGUgd2FzIGNyZWF0ZWQuICovXG4gIHJlYWRvbmx5IGVudGVyZWRBdDogc3RyaW5nO1xuICAvKiogcnVudGltZVN0YWdlSWQgd2hlbiB0aGUgY29ycmVzcG9uZGluZyBzdWJmbG93IGV4aXRlZC4gT25seSBtZWFuaW5nZnVsXG4gICAqICBmb3Iga2luZD0nc3ViZmxvdyc7IGZvcmsvZGVjaXNpb24tYnJhbmNoIG5vZGVzIGFyZSBpbnN0YW50YW5lb3VzLiAqL1xuICBleGl0ZWRBdD86IHN0cmluZztcbiAgLyoqIEtpbmQtc3BlY2lmaWMgZXh0cmFzOiBmb3JrUGFyZW50LCBkZWNpZGVyLCByYXRpb25hbGUsIGRlc2NyaXB0aW9uLiAqL1xuICByZWFkb25seSBtZXRhZGF0YT86IFJlYWRvbmx5PFJlY29yZDxzdHJpbmcsIHVua25vd24+Pjtcbn1cblxuLyoqIEEgdHJhdmVyc2FsIHRyYW5zaXRpb24gYmV0d2VlbiB0d28gbm9kZXMuICovXG5leHBvcnQgaW50ZXJmYWNlIFRvcG9sb2d5RWRnZSB7XG4gIHJlYWRvbmx5IGZyb206IHN0cmluZztcbiAgcmVhZG9ubHkgdG86IHN0cmluZztcbiAgcmVhZG9ubHkga2luZDogRXhjbHVkZTxUb3BvbG9neUluY29taW5nS2luZCwgJ3Jvb3QnPjtcbiAgcmVhZG9ubHkgYXQ6IHN0cmluZztcbn1cblxuLyoqIFNuYXBzaG90IG9mIHRoZSBjb21wb3NpdGlvbiBncmFwaC4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVG9wb2xvZ3kge1xuICByZWFkb25seSBub2RlczogUmVhZG9ubHlBcnJheTxUb3BvbG9neU5vZGU+O1xuICByZWFkb25seSBlZGdlczogUmVhZG9ubHlBcnJheTxUb3BvbG9neUVkZ2U+O1xuICAvKiogQ3VycmVudGx5LWFjdGl2ZSBzdWJmbG93ICh0b3Agb2YgdGhlIHN1YmZsb3cgc3RhY2spLiBGb3JrLWJyYW5jaCBhbmRcbiAgICogIGRlY2lzaW9uLWJyYW5jaCBub2RlcyBhcmUgaW5zdGFudGFuZW91cyDigJQgdGhleSBkb24ndCBhZmZlY3QgYWN0aXZlTm9kZUlkLiAqL1xuICByZWFkb25seSBhY3RpdmVOb2RlSWQ6IHN0cmluZyB8IG51bGw7XG4gIC8qKiBGaXJzdCBub2RlIGluc2VydGVkLiBudWxsIGJlZm9yZSBhbnkgY29tcG9zaXRpb24gZXZlbnQgZmlyZXMuICovXG4gIHJlYWRvbmx5IHJvb3RJZDogc3RyaW5nIHwgbnVsbDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUb3BvbG9neVJlY29yZGVyT3B0aW9ucyB7XG4gIC8qKiBSZWNvcmRlciBpZC4gRGVmYXVsdHMgdG8gYHRvcG9sb2d5LU5gIChhdXRvLWluY3JlbWVudGVkKS4gKi9cbiAgaWQ/OiBzdHJpbmc7XG59XG5cbi8vIENvcnJlbGF0aW9uIHN0YXRlOiBtYXBzIGEgcGVuZGluZyBmb3JrL2RlY2lzaW9uIGNoaWxkIG5hbWUgdG8gaXRzIHN5bnRoZXRpY1xuLy8gbm9kZSBpZCwgc28gYSBzdWJzZXF1ZW50IG9uU3ViZmxvd0VudHJ5IG1hdGNoaW5nIHRoYXQgbmFtZSBjYW4gYmUgbmVzdGVkXG4vLyB1bmRlciB0aGUgc3ludGhldGljIG5vZGUgKHJhdGhlciB0aGFuIGNyZWF0aW5nIGEgcGVlcikuXG5pbnRlcmZhY2UgUGVuZGluZ0NoaWxkIHtcbiAgbm9kZUlkOiBzdHJpbmc7XG4gIGF0OiBzdHJpbmc7XG59XG5cbmxldCBfY291bnRlciA9IDA7XG5cbi8qKlxuICogRmFjdG9yeSDigJQgbWF0Y2hlcyB0aGUgYG5hcnJhdGl2ZSgpYCAvIGBtZXRyaWNzKClgIHN0eWxlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdG9wb2xvZ3lSZWNvcmRlcihvcHRpb25zOiBUb3BvbG9neVJlY29yZGVyT3B0aW9ucyA9IHt9KTogVG9wb2xvZ3lSZWNvcmRlciB7XG4gIHJldHVybiBuZXcgVG9wb2xvZ3lSZWNvcmRlcihvcHRpb25zKTtcbn1cblxuLyoqXG4gKiBTdGF0ZWZ1bCBhY2N1bXVsYXRvciB0aGF0IHdhdGNoZXMgRmxvd1JlY29yZGVyIGV2ZW50cyBhbmQgbWFpbnRhaW5zIGEgbGl2ZVxuICogY29tcG9zaXRpb24gZ3JhcGguIEF0dGFjaCB2aWEgYGV4ZWN1dG9yLmF0dGFjaENvbWJpbmVkUmVjb3JkZXIocmVjb3JkZXIpYCDigJRcbiAqIGZvb3RwcmludGpzIGRldGVjdHMgdGhlIGBGbG93UmVjb3JkZXJgIG1ldGhvZCBzaGFwZSBhbmQgcm91dGVzIGV2ZW50cy5cbiAqL1xuZXhwb3J0IGNsYXNzIFRvcG9sb2d5UmVjb3JkZXIgaW1wbGVtZW50cyBGbG93UmVjb3JkZXIge1xuICByZWFkb25seSBpZDogc3RyaW5nO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgbm9kZXNCeUlkID0gbmV3IE1hcDxzdHJpbmcsIFRvcG9sb2d5Tm9kZT4oKTtcbiAgcHJpdmF0ZSByZWFkb25seSBub2RlT3JkZXI6IHN0cmluZ1tdID0gW107XG4gIHByaXZhdGUgcmVhZG9ubHkgZWRnZXM6IFRvcG9sb2d5RWRnZVtdID0gW107XG4gIC8qKiBTdGFjayBvZiBhY3RpdmUgU1VCRkxPVyBub2RlIGlkcy4gRm9yay9kZWNpc2lvbi1icmFuY2ggbm9kZXMgbmV2ZXIgcHVzaC4gKi9cbiAgcHJpdmF0ZSByZWFkb25seSBzdWJmbG93U3RhY2s6IHN0cmluZ1tdID0gW107XG5cbiAgLyoqIE1hcCBvZiBjaGlsZE5hbWUg4oaSIHBlbmRpbmcgZm9yay1icmFuY2ggc3ludGhldGljIG5vZGUsIGNvbnN1bWVkIGJ5XG4gICAqICB0aGUgbmV4dCBtYXRjaGluZyBgb25TdWJmbG93RW50cnlgLiAqL1xuICBwcml2YXRlIHJlYWRvbmx5IHBlbmRpbmdGb3JrQnlOYW1lID0gbmV3IE1hcDxzdHJpbmcsIFBlbmRpbmdDaGlsZD4oKTtcbiAgLyoqIFBlbmRpbmcgZGVjaXNpb24tYnJhbmNoIHN5bnRoZXRpYyBub2RlLCBjb25zdW1lZCBieSBhIG1hdGNoaW5nIGVudHJ5LiAqL1xuICBwcml2YXRlIHBlbmRpbmdEZWNpc2lvbj86IHsgbmFtZTogc3RyaW5nIH0gJiBQZW5kaW5nQ2hpbGQ7XG4gIC8qKlxuICAgKiBUaGUgcHJldmlvdXMgc3ViZmxvdyB0aGF0IGp1c3QgZmluaXNoZWQsIGtleWVkIGJ5IHNjb3BlIChwYXJlbnRJZCxcbiAgICogb3IgJycgZm9yIHJvb3QpLiBXaGVuIGEgbmV3IHN1YmZsb3cgZW50ZXJzIGluIHRoZSBzYW1lIHNjb3BlIHZpYVxuICAgKiB0aGUgbm9ybWFsIG5leHQtY2hhaW5lZCBwYXRoIChub3QgZm9yay9kZWNpc2lvbiksIHdlIGVtaXQgYSBgbmV4dGBcbiAgICogZWRnZSBmcm9tIHRoZSBwcmV2aW91cyBzdWJmbG93IHRvIHRoZSBuZXcgb25lIOKAlCBtYXRjaGluZyBob3cgdGhlXG4gICAqIGJ1aWxkZXIgYWN0dWFsbHkgd2lyZWQgdGhlbTogYC5hZGRTdWJGbG93Q2hhcnROZXh0KEEpLmFkZFN1YkZsb3dDaGFydE5leHQoQilgXG4gICAqIG1lYW5zIEEg4oaSIEIsIG9uZSBhZnRlciB0aGUgb3RoZXIuXG4gICAqXG4gICAqIFdpdGhvdXQgdGhpcywgY29uc3VtZXJzIG9ubHkgc2VlIHBhcmVudOKGkmNoaWxkIGVkZ2VzIChBLCBCLCBDIGFsbFxuICAgKiBjaGlsZHJlbiBvZiB0aGVpciBjb21tb24gYW5jZXN0b3IpIHdpdGggbm8gcmVjb3JkIG9mIHRoZSBhY3R1YWxcbiAgICogQSDihpIgQiDihpIgQyBzZXF1ZW50aWFsIGNoYWluIHRoYXQgcmFuIOKAlCB3aGljaCBpcyBleGFjdGx5IHdoYXRcbiAgICogVG9wb2xvZ3lSZWNvcmRlciBpcyBzdXBwb3NlZCB0byBleHBvc2UuXG4gICAqL1xuICBwcml2YXRlIHJlYWRvbmx5IHByZXZpb3VzU3ViZmxvd0luU2NvcGUgPSBuZXcgTWFwPHN0cmluZywgeyBub2RlSWQ6IHN0cmluZzsgZXhpdGVkQXQ6IHN0cmluZyB9PigpO1xuXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnM6IFRvcG9sb2d5UmVjb3JkZXJPcHRpb25zID0ge30pIHtcbiAgICB0aGlzLmlkID0gb3B0aW9ucy5pZCA/PyBgdG9wb2xvZ3ktJHsrK19jb3VudGVyfWA7XG4gIH1cblxuICAvLyDilIDilIAgRmxvd1JlY29yZGVyIGhvb2tzIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4gIG9uU3ViZmxvd0VudHJ5KGV2ZW50OiBGbG93U3ViZmxvd0V2ZW50KTogdm9pZCB7XG4gICAgY29uc3Qgc3ViZmxvd0lkID0gZXZlbnQuc3ViZmxvd0lkO1xuICAgIGlmICghc3ViZmxvd0lkKSByZXR1cm47IC8vIE5lZWQgYSBzdGFibGUgaWQgdG8gdHJhY2suXG5cbiAgICBjb25zdCBlbnRlcmVkQXQgPSBldmVudC50cmF2ZXJzYWxDb250ZXh0Py5ydW50aW1lU3RhZ2VJZCA/PyAnJztcblxuICAgIC8vIERldGVybWluZSB0aGUgcGFyZW50OiBwcmVmZXIgYSBwZW5kaW5nIGZvcmsvZGVjaXNpb24gbWF0Y2ggYnkgbmFtZSxcbiAgICAvLyBvdGhlcndpc2UgdGhlIGN1cnJlbnQgdG9wLW9mLXN1YmZsb3ctc3RhY2suXG4gICAgbGV0IHBhcmVudElkOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgbGV0IGluY29taW5nS2luZDogVG9wb2xvZ3lJbmNvbWluZ0tpbmQ7XG5cbiAgICBjb25zdCBwZW5kaW5nRm9yayA9IHRoaXMucGVuZGluZ0ZvcmtCeU5hbWUuZ2V0KGV2ZW50Lm5hbWUpO1xuICAgIGlmIChwZW5kaW5nRm9yaykge1xuICAgICAgcGFyZW50SWQgPSBwZW5kaW5nRm9yay5ub2RlSWQ7XG4gICAgICBpbmNvbWluZ0tpbmQgPSAnbmV4dCc7IC8vIENoaWxkIE9GIGEgZm9yay1icmFuY2ggbm9kZTsgdGhlIGZvcmsgc2VtYW50aWNcbiAgICAgIC8vIGlzIGNhcHR1cmVkIGJ5IHRoZSBmb3JrLWJyYW5jaCdzIG93biBpbmNvbWluZ0tpbmQuXG4gICAgICB0aGlzLnBlbmRpbmdGb3JrQnlOYW1lLmRlbGV0ZShldmVudC5uYW1lKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMucGVuZGluZ0RlY2lzaW9uICYmIHRoaXMucGVuZGluZ0RlY2lzaW9uLm5hbWUgPT09IGV2ZW50Lm5hbWUpIHtcbiAgICAgIHBhcmVudElkID0gdGhpcy5wZW5kaW5nRGVjaXNpb24ubm9kZUlkO1xuICAgICAgaW5jb21pbmdLaW5kID0gJ25leHQnO1xuICAgICAgdGhpcy5wZW5kaW5nRGVjaXNpb24gPSB1bmRlZmluZWQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHBhcmVudElkID0gdGhpcy5zdWJmbG93U3RhY2tbdGhpcy5zdWJmbG93U3RhY2subGVuZ3RoIC0gMV07XG4gICAgICBpbmNvbWluZ0tpbmQgPSBwYXJlbnRJZCA/ICduZXh0JyA6ICdyb290JztcbiAgICB9XG5cbiAgICAvLyBEaXNhbWJpZ3VhdGUgcmUtZW50cnkgKGUuZy4sIGxvb3AgYm9keSByZS1lbnRlcnMgdGhlIHNhbWUgc3ViZmxvdykuXG4gICAgbGV0IG5vZGVJZCA9IHN1YmZsb3dJZDtcbiAgICBpZiAodGhpcy5ub2Rlc0J5SWQuaGFzKG5vZGVJZCkpIHtcbiAgICAgIGxldCBuID0gMTtcbiAgICAgIHdoaWxlICh0aGlzLm5vZGVzQnlJZC5oYXMoYCR7c3ViZmxvd0lkfSMke259YCkpIG4rKztcbiAgICAgIG5vZGVJZCA9IGAke3N1YmZsb3dJZH0jJHtufWA7XG4gICAgfVxuXG4gICAgY29uc3QgZGVwdGggPSBwYXJlbnRJZCA/IHRoaXMubm9kZXNCeUlkLmdldChwYXJlbnRJZCkhLmRlcHRoICsgMSA6IDA7XG4gICAgY29uc3QgbWV0YWRhdGEgPSBldmVudC5kZXNjcmlwdGlvbiA/IHsgZGVzY3JpcHRpb246IGV2ZW50LmRlc2NyaXB0aW9uIH0gOiB1bmRlZmluZWQ7XG5cbiAgICBjb25zdCBub2RlOiBUb3BvbG9neU5vZGUgPSB7XG4gICAgICBpZDogbm9kZUlkLFxuICAgICAga2luZDogJ3N1YmZsb3cnLFxuICAgICAgbmFtZTogZXZlbnQubmFtZSxcbiAgICAgIHBhcmVudElkLFxuICAgICAgZGVwdGgsXG4gICAgICBpbmNvbWluZ0tpbmQsXG4gICAgICBlbnRlcmVkQXQsXG4gICAgICBtZXRhZGF0YSxcbiAgICB9O1xuICAgIHRoaXMubm9kZXNCeUlkLnNldChub2RlSWQsIG5vZGUpO1xuICAgIHRoaXMubm9kZU9yZGVyLnB1c2gobm9kZUlkKTtcblxuICAgIGlmIChwYXJlbnRJZCAmJiBpbmNvbWluZ0tpbmQgIT09ICdyb290Jykge1xuICAgICAgdGhpcy5lZGdlcy5wdXNoKHtcbiAgICAgICAgZnJvbTogcGFyZW50SWQsXG4gICAgICAgIHRvOiBub2RlSWQsXG4gICAgICAgIGtpbmQ6IGluY29taW5nS2luZCxcbiAgICAgICAgYXQ6IGVudGVyZWRBdCxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIE5leHQtY2hhaW5lZCBlZGdlIGZyb20gdGhlIFBSRVZJT1VTIHN1YmZsb3cgaW4gdGhpcyBzY29wZS5cbiAgICAvL1xuICAgIC8vIGAuYWRkU3ViRmxvd0NoYXJ0TmV4dChBKS5hZGRTdWJGbG93Q2hhcnROZXh0KEIpLmFkZFN1YkZsb3dDaGFydE5leHQoQylgXG4gICAgLy8gcnVucyBhczogQSBlbnRlcnMg4oaSIEEgZXhpdHMg4oaSIEIgZW50ZXJzIOKGkiBCIGV4aXRzIOKGkiBDIGVudGVycy4gQXRcbiAgICAvLyBCJ3MgZW50cnkgdGhlIHN0YWNrIGhhcyByZXR1cm5lZCB0byB0aGUgc2NvcGUgaXQgd2FzIGluIGJlZm9yZSBBXG4gICAgLy8gZW50ZXJlZCAocm9vdCwgb3IgdGhlIHNoYXJlZCBhbmNlc3RvcikuIFdpdGhvdXQgdGhpcyBlZGdlIHdlJ2RcbiAgICAvLyBzZWUgbm9kZXMge0EsIEIsIEN9IGJ1dCBubyByZWNvcmQgdGhhdCBBIHJhbiBCRUZPUkUgQiB3aGljaCByYW5cbiAgICAvLyBCRUZPUkUgQyDigJQgYW5kIGRvd25zdHJlYW0gY29uc3VtZXJzIHdvdWxkIGhhdmUgdG8gcmVjb25zdHJ1Y3RcbiAgICAvLyBzZXF1ZW50aWFsIG9yZGVyaW5nIHRoZW1zZWx2ZXMuXG4gICAgLy9cbiAgICAvLyBPbmx5IGVtaXQgb24gdGhlIHJlZ3VsYXItZW50cnkgcGF0aC4gRm9yay9kZWNpc2lvbiBlbnRyaWVzIGhhdmVcbiAgICAvLyB0aGVpciBvd24gZWRnZSBtZWNoYW5pY3MgKHBhcmVudOKGkmZvcmstYnJhbmNoLCBwYXJlbnTihpJkZWNpc2lvbi1cbiAgICAvLyBicmFuY2gpIHRoYXQgY2FycnkgdGhlIGJyYW5jaGluZyBzZW1hbnRpY3MuXG4gICAgaWYgKGluY29taW5nS2luZCA9PT0gJ25leHQnIHx8IGluY29taW5nS2luZCA9PT0gJ3Jvb3QnKSB7XG4gICAgICBjb25zdCBzY29wZUtleSA9IHBhcmVudElkID8/ICcnO1xuICAgICAgY29uc3QgcHJldmlvdXMgPSB0aGlzLnByZXZpb3VzU3ViZmxvd0luU2NvcGUuZ2V0KHNjb3BlS2V5KTtcbiAgICAgIGlmIChwcmV2aW91cykge1xuICAgICAgICB0aGlzLmVkZ2VzLnB1c2goe1xuICAgICAgICAgIGZyb206IHByZXZpb3VzLm5vZGVJZCxcbiAgICAgICAgICB0bzogbm9kZUlkLFxuICAgICAgICAgIGtpbmQ6ICduZXh0JyxcbiAgICAgICAgICBhdDogZW50ZXJlZEF0LFxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5wcmV2aW91c1N1YmZsb3dJblNjb3BlLmRlbGV0ZShzY29wZUtleSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5zdWJmbG93U3RhY2sucHVzaChub2RlSWQpO1xuICB9XG5cbiAgb25TdWJmbG93RXhpdChldmVudDogRmxvd1N1YmZsb3dFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IG5vZGVJZCA9IHRoaXMuc3ViZmxvd1N0YWNrLnBvcCgpO1xuICAgIGlmICghbm9kZUlkKSByZXR1cm47XG4gICAgY29uc3Qgbm9kZSA9IHRoaXMubm9kZXNCeUlkLmdldChub2RlSWQpO1xuICAgIGNvbnN0IGV4aXRlZEF0ID0gZXZlbnQudHJhdmVyc2FsQ29udGV4dD8ucnVudGltZVN0YWdlSWQgPz8gJyc7XG4gICAgaWYgKG5vZGUpIHtcbiAgICAgIG5vZGUuZXhpdGVkQXQgPSBleGl0ZWRBdDtcbiAgICAgIC8vIFJlbWVtYmVyIHRoaXMgbm9kZSBhcyB0aGUgXCJwcmV2aW91cyBzdWJmbG93XCIgaW4gaXRzIHNjb3BlLlxuICAgICAgLy8gV2hhdGV2ZXIgc3ViZmxvdyBlbnRlcnMgTkVYVCBpbiB0aGUgc2FtZSBzY29wZSAobm9ybWFsLWVudHJ5XG4gICAgICAvLyBwYXRoLCBub3QgZm9yay9kZWNpc2lvbikgZ2V0cyBhIGBuZXh0YCBlZGdlIGRyYXduIGZyb20gaGVyZVxuICAgICAgLy8g4oCUIHRoaXMgaXMgdGhlIHJlYWwgc2VxdWVudGlhbCBBIOKGkiBCIHRyYW5zaXRpb24gdGhhdCB0aGVcbiAgICAgIC8vIGAuYWRkU3ViRmxvd0NoYXJ0TmV4dCgpYCBidWlsZGVyIHByb2R1Y2VkLlxuICAgICAgY29uc3Qgc2NvcGVLZXkgPSBub2RlLnBhcmVudElkID8/ICcnO1xuICAgICAgdGhpcy5wcmV2aW91c1N1YmZsb3dJblNjb3BlLnNldChzY29wZUtleSwgeyBub2RlSWQsIGV4aXRlZEF0IH0pO1xuICAgIH1cbiAgICAvLyBDbGVhciBwZW5kaW5nRGVjaXNpb24gb24gZXhpdCDigJQgYSBkZWNpc2lvbiBpZGVudGlmaWVzIGV4YWN0bHkgT05FXG4gICAgLy8gdGFyZ2V0LiBJZiB0aGUgY2hvc2VuIGdvZXMgdG8gYSBwbGFpbiBzdGFnZSAobm90IGEgc3ViZmxvdyksIHRoZVxuICAgIC8vIHBlbmRpbmcgZW50cnkgd291bGQgb3RoZXJ3aXNlIGxpbmdlciBhbmQgZmFsc2VseSBtYXRjaCBhblxuICAgIC8vIHVucmVsYXRlZCBzdWJmbG93IGxhdGVyIGluIGEgZGlmZmVyZW50IHNjb3BlLlxuICAgIHRoaXMucGVuZGluZ0RlY2lzaW9uID0gdW5kZWZpbmVkO1xuICAgIC8vIERlbGliZXJhdGVseSBOT1QgY2xlYXJpbmcgcGVuZGluZ0ZvcmtCeU5hbWUg4oCUIGZvcmsgc2libGluZ3MgbmVlZFxuICAgIC8vIHRoZWlyIHBlbmRpbmcgZW50cmllcyB0byBzdXJ2aXZlIHNjb3BlIGV4aXRzIG9mIGVhcmxpZXIgc2libGluZ3NcbiAgICAvLyAoZS5nLiBBbHBoYSdzIGlubmVyIHNmLW1lc3NhZ2VzIGV4aXRzIGJlZm9yZSBCZXRhIGVudGVycykuIEZvcmtcbiAgICAvLyBwZW5kaW5nIGVudHJpZXMgYXJlIGNsZWFyZWQgb24gbmV3IGBvbkZvcmtgIG9yIGNvbnN1bWVkIG9uIG1hdGNoLlxuICB9XG5cbiAgb25Gb3JrKGV2ZW50OiBGbG93Rm9ya0V2ZW50KTogdm9pZCB7XG4gICAgY29uc3QgYWN0aXZlSWQgPSB0aGlzLnN1YmZsb3dTdGFja1t0aGlzLnN1YmZsb3dTdGFjay5sZW5ndGggLSAxXTtcbiAgICBjb25zdCBhdCA9IGV2ZW50LnRyYXZlcnNhbENvbnRleHQ/LnJ1bnRpbWVTdGFnZUlkID8/ICcnO1xuICAgIGNvbnN0IGRlcHRoID0gYWN0aXZlSWQgPyB0aGlzLm5vZGVzQnlJZC5nZXQoYWN0aXZlSWQpIS5kZXB0aCArIDEgOiAwO1xuXG4gICAgLy8gUmVzZXQgYW55IHByaW9yIHBlbmRpbmcgZm9yayBzdGF0ZSDigJQgYSBuZXcgZm9yayBzdGFydHMgZnJlc2guXG4gICAgdGhpcy5wZW5kaW5nRm9ya0J5TmFtZS5jbGVhcigpO1xuXG4gICAgZXZlbnQuY2hpbGRyZW4uZm9yRWFjaCgoY2hpbGROYW1lLCBpKSA9PiB7XG4gICAgICBjb25zdCBub2RlSWQgPSBgZm9yay0ke2F0IHx8IGV2ZW50LnBhcmVudH0tJHtpfS0ke2NoaWxkTmFtZX1gO1xuICAgICAgY29uc3Qgbm9kZTogVG9wb2xvZ3lOb2RlID0ge1xuICAgICAgICBpZDogbm9kZUlkLFxuICAgICAgICBraW5kOiAnZm9yay1icmFuY2gnLFxuICAgICAgICBuYW1lOiBjaGlsZE5hbWUsXG4gICAgICAgIHBhcmVudElkOiBhY3RpdmVJZCxcbiAgICAgICAgZGVwdGgsXG4gICAgICAgIGluY29taW5nS2luZDogJ2ZvcmstYnJhbmNoJyxcbiAgICAgICAgZW50ZXJlZEF0OiBhdCxcbiAgICAgICAgbWV0YWRhdGE6IHsgZm9ya1BhcmVudDogZXZlbnQucGFyZW50IH0sXG4gICAgICB9O1xuICAgICAgdGhpcy5ub2Rlc0J5SWQuc2V0KG5vZGVJZCwgbm9kZSk7XG4gICAgICB0aGlzLm5vZGVPcmRlci5wdXNoKG5vZGVJZCk7XG4gICAgICBpZiAoYWN0aXZlSWQpIHtcbiAgICAgICAgdGhpcy5lZGdlcy5wdXNoKHsgZnJvbTogYWN0aXZlSWQsIHRvOiBub2RlSWQsIGtpbmQ6ICdmb3JrLWJyYW5jaCcsIGF0IH0pO1xuICAgICAgfVxuICAgICAgdGhpcy5wZW5kaW5nRm9ya0J5TmFtZS5zZXQoY2hpbGROYW1lLCB7IG5vZGVJZCwgYXQgfSk7XG4gICAgfSk7XG4gIH1cblxuICBvbkRlY2lzaW9uKGV2ZW50OiBGbG93RGVjaXNpb25FdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IGFjdGl2ZUlkID0gdGhpcy5zdWJmbG93U3RhY2tbdGhpcy5zdWJmbG93U3RhY2subGVuZ3RoIC0gMV07XG4gICAgY29uc3QgYXQgPSBldmVudC50cmF2ZXJzYWxDb250ZXh0Py5ydW50aW1lU3RhZ2VJZCA/PyAnJztcbiAgICBjb25zdCBkZXB0aCA9IGFjdGl2ZUlkID8gdGhpcy5ub2Rlc0J5SWQuZ2V0KGFjdGl2ZUlkKSEuZGVwdGggKyAxIDogMDtcblxuICAgIC8vIEEgbmV3IGRlY2lzaW9uIHN1cGVyc2VkZXMgYW55IHByaW9yIHVucmVzb2x2ZWQgcGVuZGluZyBvbmUuXG4gICAgdGhpcy5wZW5kaW5nRGVjaXNpb24gPSB1bmRlZmluZWQ7XG5cbiAgICBjb25zdCBub2RlSWQgPSBgZGVjaXNpb24tJHthdCB8fCBldmVudC5kZWNpZGVyfS0ke2V2ZW50LmNob3Nlbn1gO1xuICAgIGNvbnN0IG1ldGFkYXRhOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHsgZGVjaWRlcjogZXZlbnQuZGVjaWRlciB9O1xuICAgIGlmIChldmVudC5yYXRpb25hbGUpIG1ldGFkYXRhLnJhdGlvbmFsZSA9IGV2ZW50LnJhdGlvbmFsZTtcbiAgICBpZiAoZXZlbnQuZGVzY3JpcHRpb24pIG1ldGFkYXRhLmRlc2NyaXB0aW9uID0gZXZlbnQuZGVzY3JpcHRpb247XG5cbiAgICBjb25zdCBub2RlOiBUb3BvbG9neU5vZGUgPSB7XG4gICAgICBpZDogbm9kZUlkLFxuICAgICAga2luZDogJ2RlY2lzaW9uLWJyYW5jaCcsXG4gICAgICBuYW1lOiBldmVudC5jaG9zZW4sXG4gICAgICBwYXJlbnRJZDogYWN0aXZlSWQsXG4gICAgICBkZXB0aCxcbiAgICAgIGluY29taW5nS2luZDogJ2RlY2lzaW9uLWJyYW5jaCcsXG4gICAgICBlbnRlcmVkQXQ6IGF0LFxuICAgICAgbWV0YWRhdGEsXG4gICAgfTtcbiAgICB0aGlzLm5vZGVzQnlJZC5zZXQobm9kZUlkLCBub2RlKTtcbiAgICB0aGlzLm5vZGVPcmRlci5wdXNoKG5vZGVJZCk7XG4gICAgaWYgKGFjdGl2ZUlkKSB7XG4gICAgICB0aGlzLmVkZ2VzLnB1c2goeyBmcm9tOiBhY3RpdmVJZCwgdG86IG5vZGVJZCwga2luZDogJ2RlY2lzaW9uLWJyYW5jaCcsIGF0IH0pO1xuICAgIH1cbiAgICB0aGlzLnBlbmRpbmdEZWNpc2lvbiA9IHsgbmFtZTogZXZlbnQuY2hvc2VuLCBub2RlSWQsIGF0IH07XG4gIH1cblxuICBvbkxvb3AoZXZlbnQ6IEZsb3dMb29wRXZlbnQpOiB2b2lkIHtcbiAgICAvLyBsb29wVG8ganVtcHMgYmFjayBpbnNpZGUgdGhlIENVUlJFTlQgc3ViZmxvdy4gUmVjb3JkIGEgc2VsZi1lZGdlIG9uIHRoZVxuICAgIC8vIGFjdGl2ZSBzdWJmbG93IOKAlCBzeW50aGV0aWMgZm9yay9kZWNpc2lvbiBub2RlcyBkb24ndCBwYXJ0aWNpcGF0ZSBpbiBsb29wcy5cbiAgICBjb25zdCBhY3RpdmVJZCA9IHRoaXMuc3ViZmxvd1N0YWNrW3RoaXMuc3ViZmxvd1N0YWNrLmxlbmd0aCAtIDFdO1xuICAgIGlmICghYWN0aXZlSWQpIHJldHVybjtcbiAgICB0aGlzLmVkZ2VzLnB1c2goe1xuICAgICAgZnJvbTogYWN0aXZlSWQsXG4gICAgICB0bzogYWN0aXZlSWQsXG4gICAgICBraW5kOiAnbG9vcC1pdGVyYXRpb24nLFxuICAgICAgYXQ6IGV2ZW50LnRyYXZlcnNhbENvbnRleHQ/LnJ1bnRpbWVTdGFnZUlkID8/ICcnLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqIENhbGxlZCBieSB0aGUgZXhlY3V0b3IgYmVmb3JlIGVhY2ggYHJ1bigpYCDigJQgcmVzZXRzIGFsbCBzdGF0ZS4gKi9cbiAgY2xlYXIoKTogdm9pZCB7XG4gICAgdGhpcy5ub2Rlc0J5SWQuY2xlYXIoKTtcbiAgICB0aGlzLm5vZGVPcmRlci5sZW5ndGggPSAwO1xuICAgIHRoaXMuZWRnZXMubGVuZ3RoID0gMDtcbiAgICB0aGlzLnN1YmZsb3dTdGFjay5sZW5ndGggPSAwO1xuICAgIHRoaXMucGVuZGluZ0ZvcmtCeU5hbWUuY2xlYXIoKTtcbiAgICB0aGlzLnByZXZpb3VzU3ViZmxvd0luU2NvcGUuY2xlYXIoKTtcbiAgICB0aGlzLnBlbmRpbmdEZWNpc2lvbiA9IHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8vIOKUgOKUgCBRdWVyeSBBUEkg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbiAgLyoqIExpdmUgc25hcHNob3Qgb2YgdGhlIGNvbXBvc2l0aW9uIGdyYXBoLiBTYWZlIGR1cmluZyBvciBhZnRlciBhIHJ1bi4gKi9cbiAgZ2V0VG9wb2xvZ3koKTogVG9wb2xvZ3kge1xuICAgIGNvbnN0IG5vZGVzID0gdGhpcy5ub2RlT3JkZXIubWFwKChpZCkgPT4gdGhpcy5ub2Rlc0J5SWQuZ2V0KGlkKSEpO1xuICAgIHJldHVybiB7XG4gICAgICBub2RlcyxcbiAgICAgIGVkZ2VzOiBbLi4udGhpcy5lZGdlc10sXG4gICAgICBhY3RpdmVOb2RlSWQ6IHRoaXMuc3ViZmxvd1N0YWNrW3RoaXMuc3ViZmxvd1N0YWNrLmxlbmd0aCAtIDFdID8/IG51bGwsXG4gICAgICByb290SWQ6IHRoaXMubm9kZU9yZGVyWzBdID8/IG51bGwsXG4gICAgfTtcbiAgfVxuXG4gIC8qKiBEaXJlY3QgY2hpbGRyZW4gb2YgYSBub2RlIOKAlCBpbnNlcnRpb24tb3JkZXJlZC4gKi9cbiAgZ2V0Q2hpbGRyZW4obm9kZUlkOiBzdHJpbmcpOiBUb3BvbG9neU5vZGVbXSB7XG4gICAgcmV0dXJuIHRoaXMubm9kZU9yZGVyLm1hcCgoaWQpID0+IHRoaXMubm9kZXNCeUlkLmdldChpZCkhKS5maWx0ZXIoKG4pID0+IG4ucGFyZW50SWQgPT09IG5vZGVJZCk7XG4gIH1cblxuICAvKiogQWxsIG5vZGVzIG9mIGEgZ2l2ZW4ga2luZC4gKi9cbiAgZ2V0QnlLaW5kKGtpbmQ6IFRvcG9sb2d5Tm9kZUtpbmQpOiBUb3BvbG9neU5vZGVbXSB7XG4gICAgcmV0dXJuIHRoaXMubm9kZU9yZGVyLm1hcCgoaWQpID0+IHRoaXMubm9kZXNCeUlkLmdldChpZCkhKS5maWx0ZXIoKG4pID0+IG4ua2luZCA9PT0ga2luZCk7XG4gIH1cblxuICAvKiogQWxsIG1vdW50ZWQgc3ViZmxvdyBub2Rlcy4gQ29udmVuaWVuY2UgZm9yIGFnZW50LWNlbnRyaWMgdmlld3MuICovXG4gIGdldFN1YmZsb3dOb2RlcygpOiBUb3BvbG9neU5vZGVbXSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0QnlLaW5kKCdzdWJmbG93Jyk7XG4gIH1cblxuICAvKiogQWxsIGZvcmstYnJhbmNoIG5vZGVzIHNoYXJpbmcgdGhlIHNhbWUgcGFyZW50IGFzIGBub2RlSWRgIOKAlCBpLmUuLFxuICAgKiAgcGFyYWxsZWwgc2libGluZ3Mgb2YgYSBwYXJhbGxlbCBicmFuY2guIEVtcHR5IGlmIGBub2RlSWRgIGlzbid0IGFcbiAgICogIGZvcmstYnJhbmNoIG9yIGhhcyBubyBwYXJlbnQuICovXG4gIGdldFBhcmFsbGVsU2libGluZ3Mobm9kZUlkOiBzdHJpbmcpOiBUb3BvbG9neU5vZGVbXSB7XG4gICAgY29uc3Qgbm9kZSA9IHRoaXMubm9kZXNCeUlkLmdldChub2RlSWQpO1xuICAgIGlmICghbm9kZSB8fCBub2RlLmtpbmQgIT09ICdmb3JrLWJyYW5jaCcgfHwgIW5vZGUucGFyZW50SWQpIHJldHVybiBbXTtcbiAgICByZXR1cm4gdGhpcy5nZXRDaGlsZHJlbihub2RlLnBhcmVudElkKS5maWx0ZXIoKG4pID0+IG4ua2luZCA9PT0gJ2ZvcmstYnJhbmNoJyk7XG4gIH1cblxuICAvKiogRW1pdCBhIHNuYXBzaG90IGJ1bmRsZSBmb3IgaW5jbHVzaW9uIGluIGBleGVjdXRvci5nZXRTbmFwc2hvdCgpYC4gKi9cbiAgdG9TbmFwc2hvdCgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbmFtZTogJ1RvcG9sb2d5JyxcbiAgICAgIGRlc2NyaXB0aW9uOiAnQ29tcG9zaXRpb24gZ3JhcGg6IHN1YmZsb3cgYm91bmRhcmllcywgZm9yayBicmFuY2hlcywgZGVjaXNpb24gYnJhbmNoZXMnLFxuICAgICAgcHJlZmVycmVkT3BlcmF0aW9uOiAndHJhbnNsYXRlJyBhcyBjb25zdCxcbiAgICAgIGRhdGE6IHRoaXMuZ2V0VG9wb2xvZ3koKSxcbiAgICB9O1xuICB9XG59XG4iXX0=
322
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVG9wb2xvZ3lSZWNvcmRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvcmVjb3JkZXIvVG9wb2xvZ3lSZWNvcmRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQWlERztBQTJFSCxJQUFJLFFBQVEsR0FBRyxDQUFDLENBQUM7QUFFakI7O0dBRUc7QUFDSCxNQUFNLFVBQVUsZ0JBQWdCLENBQUMsVUFBbUMsRUFBRTtJQUNwRSxPQUFPLElBQUksZ0JBQWdCLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDdkMsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxNQUFNLE9BQU8sZ0JBQWdCO0lBQ2xCLEVBQUUsQ0FBUztJQUVILFNBQVMsR0FBRyxJQUFJLEdBQUcsRUFBd0IsQ0FBQztJQUM1QyxTQUFTLEdBQWEsRUFBRSxDQUFDO0lBQ3pCLEtBQUssR0FBbUIsRUFBRSxDQUFDO0lBQzVDLCtFQUErRTtJQUM5RCxZQUFZLEdBQWEsRUFBRSxDQUFDO0lBRTdDOzhDQUMwQztJQUN6QixpQkFBaUIsR0FBRyxJQUFJLEdBQUcsRUFBd0IsQ0FBQztJQUNyRSw0RUFBNEU7SUFDcEUsZUFBZSxDQUFtQztJQUMxRDs7Ozs7Ozs7Ozs7O09BWUc7SUFDYyxzQkFBc0IsR0FBRyxJQUFJLEdBQUcsRUFBZ0QsQ0FBQztJQUVsRyxZQUFZLFVBQW1DLEVBQUU7UUFDL0MsSUFBSSxDQUFDLEVBQUUsR0FBRyxPQUFPLENBQUMsRUFBRSxJQUFJLFlBQVksRUFBRSxRQUFRLEVBQUUsQ0FBQztJQUNuRCxDQUFDO0lBRUQseUVBQXlFO0lBRXpFLGNBQWMsQ0FBQyxLQUF1QjtRQUNwQyxNQUFNLFNBQVMsR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDO1FBQ2xDLElBQUksQ0FBQyxTQUFTO1lBQUUsT0FBTyxDQUFDLDZCQUE2QjtRQUVyRCxNQUFNLFNBQVMsR0FB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LENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxhQUFhLENBQUMsQ0FBQztJQUNqRixDQUFDO0lBRUQsd0VBQXdFO0lBQ3hFLFVBQVU7UUFDUixPQUFPO1lBQ0wsSUFBSSxFQUFFLFVBQVU7WUFDaEIsV0FBVyxFQUFFLHlFQUF5RTtZQUN0RixrQkFBa0IsRUFBRSxXQUFvQjtZQUN4QyxJQUFJLEVBQUUsSUFBSSxDQUFDLFdBQVcsRUFBRTtTQUN6QixDQUFDO0lBQ0osQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBUb3BvbG9neVJlY29yZGVyIOKAlCBjb21wb3NpdGlvbiBncmFwaCBidWlsdCBkdXJpbmcgdHJhdmVyc2FsLlxuICpcbiAqIFRoZSBnYXAgdGhpcyBmaWxsczpcbiAqICAgZm9vdHByaW50anMgZmlyZXMgYXRvbWljIGZsb3cgZXZlbnRzIChvblN1YmZsb3dFbnRyeSwgb25Gb3JrLCBvbkRlY2lzaW9uLFxuICogICBvbkxvb3ApIGJ1dCB0aGUgYWNjdW11bGF0ZWQgKnNoYXBlKiBvZiBhIHJ1biDigJQgd2hvIG5lc3RzIGluc2lkZSB3aG9tLFxuICogICB3aGljaCBub2RlcyBhcmUgcGFyYWxsZWwgc2libGluZ3MgdnMgYnJhbmNoZXMgb2YgYSBkZWNpc2lvbiDigJQgaXMgb25seVxuICogICB2aXNpYmxlIHBvc3QtcnVuIHZpYSBgZXhlY3V0b3IuZ2V0U25hcHNob3QoKWAgdHJlZS13YWxraW5nLlxuICpcbiAqICAgU3RyZWFtaW5nIGNvbnN1bWVycyAobGl2ZSBVSXMsIGluLWZsaWdodCBkZWJ1Z2dlcnMpIHNlZSBvbmx5IHRoZSBldmVudFxuICogICBzdHJlYW0uIEV2ZXJ5IHN1Y2ggY29uc3VtZXIgaGFzIHRvIHJlYnVpbGQgc3ViZmxvdy1zdGFjayArIGZvcmstbWFwICtcbiAqICAgZGVjaXNpb24tdHJhY2tlciBmcm9tIHNjcmF0Y2gsIHVzdWFsbHkgc2xpZ2h0bHkgd3JvbmcgaW4gZGlmZmVyZW50IHdheXMuXG4gKlxuICogICBUb3BvbG9neVJlY29yZGVyIGlzIHRoZSBzdGFuZGFyZCBhY2N1bXVsYXRvcjogb25lIHN1YnNjcmlwdGlvbiB0byB0aGVcbiAqICAgdGhyZWUgcHJpbWl0aXZlIGNoYW5uZWxzLCBvbmUgbGl2ZSBncmFwaCwgcXVlcnlhYmxlIGF0IGFueSBtb21lbnQgZHVyaW5nXG4gKiAgIG9yIGFmdGVyIGEgcnVuLlxuICpcbiAqIFdoYXQgaXQgcmVjb3JkcyDigJQgVEhSRUUgbm9kZSBraW5kcyBmb3IgY29tcGxldGUgY29tcG9zaXRpb24gY292ZXJhZ2U6XG4gKiAgIDEuICdzdWJmbG93JyAgICAgICAgICDigJQgdmlhIG9uU3ViZmxvd0VudHJ5IChhIG1vdW50ZWQgc3ViZmxvdyBib3VuZGFyeSlcbiAqICAgMi4gJ2ZvcmstYnJhbmNoJyAgICAgIOKAlCB2aWEgb25Gb3JrIChvbmUgbm9kZSBwZXIgY2hpbGQsIHN5bnRoZXNpemVkKVxuICogICAzLiAnZGVjaXNpb24tYnJhbmNoJyAg4oCUIHZpYSBvbkRlY2lzaW9uICh0aGUgY2hvc2VuIGJyYW5jaCwgc3ludGhlc2l6ZWQpXG4gKlxuICogICBXaGVuIGEgZm9yay1icmFuY2ggb3IgZGVjaXNpb24tYnJhbmNoIHRhcmdldCBJUyBBTFNPIGEgc3ViZmxvdywgdGhlXG4gKiAgIHN1YnNlcXVlbnQgb25TdWJmbG93RW50cnkgY3JlYXRlcyBhIHN1YmZsb3cgQ0hJTEQgb2YgdGhlIHN5bnRoZXRpYyBub2RlLlxuICogICBUaGUgbGF5ZXJlZCBzaGFwZSBwcmVzZXJ2ZXMgYm90aCBcIndobyBicmFuY2hlZFwiIGFuZCBcIndoYXQgdGhlIGJyYW5jaCByYW4uXCJcbiAqXG4gKiAgIFBsYWluIHNlcXVlbnRpYWwgc3RhZ2VzIGFyZSBOT1Qgbm9kZXMg4oCUIHRoYXQncyBTdGFnZUNvbnRleHQncyBqb2IuXG4gKiAgIFRvcG9sb2d5IGlzIGEgZ3JhcGggb2YgY29udHJvbC1mbG93IGJyYW5jaGluZywgbm90IGEgZnVsbCBleGVjdXRpb24gdHJlZS5cbiAqXG4gKiBFZGdlczpcbiAqICAgT25lIGVkZ2UgcGVyIHRyYXZlcnNhbCB0cmFuc2l0aW9uIOKAlCBga2luZGAgbWF0Y2hlcyB0aGUgY2hpbGQnc1xuICogICBgaW5jb21pbmdLaW5kYC4gQSBjb25zdW1lciByZW5kZXJpbmcgXCJwYXJhbGxlbCBjb2x1bW5zXCIgZmlsdGVycyBlZGdlc1xuICogICB3aGVyZSBga2luZCA9PT0gJ2ZvcmstYnJhbmNoJ2Agc2hhcmluZyB0aGUgc2FtZSBgZnJvbWAuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGltcG9ydCB7IHRvcG9sb2d5UmVjb3JkZXIgfSBmcm9tICdmb290cHJpbnRqcy90cmFjZSc7XG4gKlxuICogY29uc3QgdG9wbyA9IHRvcG9sb2d5UmVjb3JkZXIoKTtcbiAqIGV4ZWN1dG9yLmF0dGFjaENvbWJpbmVkUmVjb3JkZXIodG9wbyk7ICAvLyBhdXRvLXJvdXRlcyB0byBGbG93UmVjb3JkZXIgY2hhbm5lbFxuICpcbiAqIGF3YWl0IGV4ZWN1dG9yLnJ1bigpO1xuICpcbiAqIGNvbnN0IHsgbm9kZXMsIGVkZ2VzLCBhY3RpdmVOb2RlSWQsIHJvb3RJZCB9ID0gdG9wby5nZXRUb3BvbG9neSgpO1xuICogLy8gQ29uc3VtZXIgcXVlcmllczpcbiAqIHRvcG8uZ2V0Q2hpbGRyZW4oJ3NmLXBhcmVudCcpOyAgICAgICAgICAgICAgLy8gZGlyZWN0IGNoaWxkcmVuIChhbnkga2luZClcbiAqIHRvcG8uZ2V0QnlLaW5kKCdmb3JrLWJyYW5jaCcpOyAgICAgICAgICAgICAgLy8gYWxsIHBhcmFsbGVsIGJyYW5jaGVzXG4gKiB0b3BvLmdldFN1YmZsb3dOb2RlcygpOyAgICAgICAgICAgICAgICAgICAgIC8vIG9ubHkgbW91bnRlZCBzdWJmbG93c1xuICogYGBgXG4gKi9cblxuaW1wb3J0IHR5cGUge1xuICBGbG93RGVjaXNpb25FdmVudCxcbiAgRmxvd0ZvcmtFdmVudCxcbiAgRmxvd0xvb3BFdmVudCxcbiAgRmxvd1JlY29yZGVyLFxuICBGbG93U3ViZmxvd0V2ZW50LFxufSBmcm9tICcuLi9lbmdpbmUvbmFycmF0aXZlL3R5cGVzLmpzJztcblxuLyoqIFRoZSBraW5kIG9mIGNvbXBvc2l0aW9uIHVuaXQgYSBub2RlIHJlcHJlc2VudHMuICovXG5leHBvcnQgdHlwZSBUb3BvbG9neU5vZGVLaW5kID0gJ3N1YmZsb3cnIHwgJ2ZvcmstYnJhbmNoJyB8ICdkZWNpc2lvbi1icmFuY2gnO1xuXG4vKiogSG93IHRoZSB0cmF2ZXJzYWwgcmVhY2hlZCB0aGlzIG5vZGUg4oCUIGRyaXZlcyBjb25zdW1lciBsYXlvdXQgZGVjaXNpb25zLiAqL1xuZXhwb3J0IHR5cGUgVG9wb2xvZ3lJbmNvbWluZ0tpbmQgPSAncm9vdCcgfCAnbmV4dCcgfCAnZm9yay1icmFuY2gnIHwgJ2RlY2lzaW9uLWJyYW5jaCcgfCAnbG9vcC1pdGVyYXRpb24nO1xuXG4vKiogQSBjb21wb3NpdGlvbi1zaWduaWZpY2FudCBwb2ludCBpbiB0aGUgZ3JhcGguICovXG5leHBvcnQgaW50ZXJmYWNlIFRvcG9sb2d5Tm9kZSB7XG4gIC8qKiBVbmlxdWUgaWQuIFN1YmZsb3dzIHVzZSB0aGVpciBzdWJmbG93SWQgKHdpdGggYCNuYCBzdWZmaXggb24gcmUtZW50cnkpLlxuICAgKiAgU3ludGhldGljIG5vZGVzIChmb3JrLWJyYW5jaCAvIGRlY2lzaW9uLWJyYW5jaCkgdXNlXG4gICAqICBgZm9yay0ke3J1bnRpbWVTdGFnZUlkfS0ke2l9YCAvIGBkZWNpc2lvbi0ke3J1bnRpbWVTdGFnZUlkfWAgZm9ybS4gKi9cbiAgcmVhZG9ubHkgaWQ6IHN0cmluZztcbiAgLyoqIFdoYXQgdGhpcyBub2RlIHJlcHJlc2VudHMuICovXG4gIHJlYWRvbmx5IGtpbmQ6IFRvcG9sb2d5Tm9kZUtpbmQ7XG4gIC8qKiBEaXNwbGF5IG5hbWUuIEZvciBzdWJmbG93czogYEZsb3dTdWJmbG93RXZlbnQubmFtZWAuIEZvciBmb3JrLWJyYW5jaGVzOlxuICAgKiAgdGhlIGNoaWxkIG5hbWUgZnJvbSBgRmxvd0ZvcmtFdmVudC5jaGlsZHJlbmAuIEZvciBkZWNpc2lvbi1icmFuY2hlczpcbiAgICogIHRoZSBjaG9zZW4gbmFtZSBmcm9tIGBGbG93RGVjaXNpb25FdmVudC5jaG9zZW5gLiAqL1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG4gIC8qKiBQYXJlbnQgbm9kZSBpZC4gVW5kZWZpbmVkIHdoZW4gdGhpcyBub2RlIHNpdHMgYXQgdGhlIHJ1bidzIHRvcCBsZXZlbC4gKi9cbiAgcmVhZG9ubHkgcGFyZW50SWQ/OiBzdHJpbmc7XG4gIC8qKiBEZXB0aCBpbiB0aGUgdG9wb2xvZ3kgdHJlZSAoMCA9IHRvcC1sZXZlbCkuICovXG4gIHJlYWRvbmx5IGRlcHRoOiBudW1iZXI7XG4gIC8qKiBIb3cgdGhlIHRyYXZlcnNhbCByZWFjaGVkIHRoaXMgbm9kZS4gKi9cbiAgcmVhZG9ubHkgaW5jb21pbmdLaW5kOiBUb3BvbG9neUluY29taW5nS2luZDtcbiAgLyoqIHJ1bnRpbWVTdGFnZUlkIGF0IHRoZSBtb21lbnQgdGhlIG5vZGUgd2FzIGNyZWF0ZWQuICovXG4gIHJlYWRvbmx5IGVudGVyZWRBdDogc3RyaW5nO1xuICAvKiogcnVudGltZVN0YWdlSWQgd2hlbiB0aGUgY29ycmVzcG9uZGluZyBzdWJmbG93IGV4aXRlZC4gT25seSBtZWFuaW5nZnVsXG4gICAqICBmb3Iga2luZD0nc3ViZmxvdyc7IGZvcmsvZGVjaXNpb24tYnJhbmNoIG5vZGVzIGFyZSBpbnN0YW50YW5lb3VzLiAqL1xuICBleGl0ZWRBdD86IHN0cmluZztcbiAgLyoqIEtpbmQtc3BlY2lmaWMgZXh0cmFzOiBmb3JrUGFyZW50LCBkZWNpZGVyLCByYXRpb25hbGUsIGRlc2NyaXB0aW9uLiAqL1xuICByZWFkb25seSBtZXRhZGF0YT86IFJlYWRvbmx5PFJlY29yZDxzdHJpbmcsIHVua25vd24+Pjtcbn1cblxuLyoqIEEgdHJhdmVyc2FsIHRyYW5zaXRpb24gYmV0d2VlbiB0d28gbm9kZXMuICovXG5leHBvcnQgaW50ZXJmYWNlIFRvcG9sb2d5RWRnZSB7XG4gIHJlYWRvbmx5IGZyb206IHN0cmluZztcbiAgcmVhZG9ubHkgdG86IHN0cmluZztcbiAgcmVhZG9ubHkga2luZDogRXhjbHVkZTxUb3BvbG9neUluY29taW5nS2luZCwgJ3Jvb3QnPjtcbiAgcmVhZG9ubHkgYXQ6IHN0cmluZztcbn1cblxuLyoqIFNuYXBzaG90IG9mIHRoZSBjb21wb3NpdGlvbiBncmFwaC4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVG9wb2xvZ3kge1xuICByZWFkb25seSBub2RlczogUmVhZG9ubHlBcnJheTxUb3BvbG9neU5vZGU+O1xuICByZWFkb25seSBlZGdlczogUmVhZG9ubHlBcnJheTxUb3BvbG9neUVkZ2U+O1xuICAvKiogQ3VycmVudGx5LWFjdGl2ZSBzdWJmbG93ICh0b3Agb2YgdGhlIHN1YmZsb3cgc3RhY2spLiBGb3JrLWJyYW5jaCBhbmRcbiAgICogIGRlY2lzaW9uLWJyYW5jaCBub2RlcyBhcmUgaW5zdGFudGFuZW91cyDigJQgdGhleSBkb24ndCBhZmZlY3QgYWN0aXZlTm9kZUlkLiAqL1xuICByZWFkb25seSBhY3RpdmVOb2RlSWQ6IHN0cmluZyB8IG51bGw7XG4gIC8qKiBGaXJzdCBub2RlIGluc2VydGVkLiBudWxsIGJlZm9yZSBhbnkgY29tcG9zaXRpb24gZXZlbnQgZmlyZXMuICovXG4gIHJlYWRvbmx5IHJvb3RJZDogc3RyaW5nIHwgbnVsbDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUb3BvbG9neVJlY29yZGVyT3B0aW9ucyB7XG4gIC8qKiBTY29wZVJlY29yZGVyIGlkLiBEZWZhdWx0cyB0byBgdG9wb2xvZ3ktTmAgKGF1dG8taW5jcmVtZW50ZWQpLiAqL1xuICBpZD86IHN0cmluZztcbn1cblxuLy8gQ29ycmVsYXRpb24gc3RhdGU6IG1hcHMgYSBwZW5kaW5nIGZvcmsvZGVjaXNpb24gY2hpbGQgbmFtZSB0byBpdHMgc3ludGhldGljXG4vLyBub2RlIGlkLCBzbyBhIHN1YnNlcXVlbnQgb25TdWJmbG93RW50cnkgbWF0Y2hpbmcgdGhhdCBuYW1lIGNhbiBiZSBuZXN0ZWRcbi8vIHVuZGVyIHRoZSBzeW50aGV0aWMgbm9kZSAocmF0aGVyIHRoYW4gY3JlYXRpbmcgYSBwZWVyKS5cbmludGVyZmFjZSBQZW5kaW5nQ2hpbGQge1xuICBub2RlSWQ6IHN0cmluZztcbiAgYXQ6IHN0cmluZztcbn1cblxubGV0IF9jb3VudGVyID0gMDtcblxuLyoqXG4gKiBGYWN0b3J5IOKAlCBtYXRjaGVzIHRoZSBgbmFycmF0aXZlKClgIC8gYG1ldHJpY3MoKWAgc3R5bGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b3BvbG9neVJlY29yZGVyKG9wdGlvbnM6IFRvcG9sb2d5UmVjb3JkZXJPcHRpb25zID0ge30pOiBUb3BvbG9neVJlY29yZGVyIHtcbiAgcmV0dXJuIG5ldyBUb3BvbG9neVJlY29yZGVyKG9wdGlvbnMpO1xufVxuXG4vKipcbiAqIFN0YXRlZnVsIGFjY3VtdWxhdG9yIHRoYXQgd2F0Y2hlcyBGbG93UmVjb3JkZXIgZXZlbnRzIGFuZCBtYWludGFpbnMgYSBsaXZlXG4gKiBjb21wb3NpdGlvbiBncmFwaC4gQXR0YWNoIHZpYSBgZXhlY3V0b3IuYXR0YWNoQ29tYmluZWRSZWNvcmRlcihyZWNvcmRlcilgIOKAlFxuICogZm9vdHByaW50anMgZGV0ZWN0cyB0aGUgYEZsb3dSZWNvcmRlcmAgbWV0aG9kIHNoYXBlIGFuZCByb3V0ZXMgZXZlbnRzLlxuICovXG5leHBvcnQgY2xhc3MgVG9wb2xvZ3lSZWNvcmRlciBpbXBsZW1lbnRzIEZsb3dSZWNvcmRlciB7XG4gIHJlYWRvbmx5IGlkOiBzdHJpbmc7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBub2Rlc0J5SWQgPSBuZXcgTWFwPHN0cmluZywgVG9wb2xvZ3lOb2RlPigpO1xuICBwcml2YXRlIHJlYWRvbmx5IG5vZGVPcmRlcjogc3RyaW5nW10gPSBbXTtcbiAgcHJpdmF0ZSByZWFkb25seSBlZGdlczogVG9wb2xvZ3lFZGdlW10gPSBbXTtcbiAgLyoqIFN0YWNrIG9mIGFjdGl2ZSBTVUJGTE9XIG5vZGUgaWRzLiBGb3JrL2RlY2lzaW9uLWJyYW5jaCBub2RlcyBuZXZlciBwdXNoLiAqL1xuICBwcml2YXRlIHJlYWRvbmx5IHN1YmZsb3dTdGFjazogc3RyaW5nW10gPSBbXTtcblxuICAvKiogTWFwIG9mIGNoaWxkTmFtZSDihpIgcGVuZGluZyBmb3JrLWJyYW5jaCBzeW50aGV0aWMgbm9kZSwgY29uc3VtZWQgYnlcbiAgICogIHRoZSBuZXh0IG1hdGNoaW5nIGBvblN1YmZsb3dFbnRyeWAuICovXG4gIHByaXZhdGUgcmVhZG9ubHkgcGVuZGluZ0ZvcmtCeU5hbWUgPSBuZXcgTWFwPHN0cmluZywgUGVuZGluZ0NoaWxkPigpO1xuICAvKiogUGVuZGluZyBkZWNpc2lvbi1icmFuY2ggc3ludGhldGljIG5vZGUsIGNvbnN1bWVkIGJ5IGEgbWF0Y2hpbmcgZW50cnkuICovXG4gIHByaXZhdGUgcGVuZGluZ0RlY2lzaW9uPzogeyBuYW1lOiBzdHJpbmcgfSAmIFBlbmRpbmdDaGlsZDtcbiAgLyoqXG4gICAqIFRoZSBwcmV2aW91cyBzdWJmbG93IHRoYXQganVzdCBmaW5pc2hlZCwga2V5ZWQgYnkgc2NvcGUgKHBhcmVudElkLFxuICAgKiBvciAnJyBmb3Igcm9vdCkuIFdoZW4gYSBuZXcgc3ViZmxvdyBlbnRlcnMgaW4gdGhlIHNhbWUgc2NvcGUgdmlhXG4gICAqIHRoZSBub3JtYWwgbmV4dC1jaGFpbmVkIHBhdGggKG5vdCBmb3JrL2RlY2lzaW9uKSwgd2UgZW1pdCBhIGBuZXh0YFxuICAgKiBlZGdlIGZyb20gdGhlIHByZXZpb3VzIHN1YmZsb3cgdG8gdGhlIG5ldyBvbmUg4oCUIG1hdGNoaW5nIGhvdyB0aGVcbiAgICogYnVpbGRlciBhY3R1YWxseSB3aXJlZCB0aGVtOiBgLmFkZFN1YkZsb3dDaGFydE5leHQoQSkuYWRkU3ViRmxvd0NoYXJ0TmV4dChCKWBcbiAgICogbWVhbnMgQSDihpIgQiwgb25lIGFmdGVyIHRoZSBvdGhlci5cbiAgICpcbiAgICogV2l0aG91dCB0aGlzLCBjb25zdW1lcnMgb25seSBzZWUgcGFyZW504oaSY2hpbGQgZWRnZXMgKEEsIEIsIEMgYWxsXG4gICAqIGNoaWxkcmVuIG9mIHRoZWlyIGNvbW1vbiBhbmNlc3Rvcikgd2l0aCBubyByZWNvcmQgb2YgdGhlIGFjdHVhbFxuICAgKiBBIOKGkiBCIOKGkiBDIHNlcXVlbnRpYWwgY2hhaW4gdGhhdCByYW4g4oCUIHdoaWNoIGlzIGV4YWN0bHkgd2hhdFxuICAgKiBUb3BvbG9neVJlY29yZGVyIGlzIHN1cHBvc2VkIHRvIGV4cG9zZS5cbiAgICovXG4gIHByaXZhdGUgcmVhZG9ubHkgcHJldmlvdXNTdWJmbG93SW5TY29wZSA9IG5ldyBNYXA8c3RyaW5nLCB7IG5vZGVJZDogc3RyaW5nOyBleGl0ZWRBdDogc3RyaW5nIH0+KCk7XG5cbiAgY29uc3RydWN0b3Iob3B0aW9uczogVG9wb2xvZ3lSZWNvcmRlck9wdGlvbnMgPSB7fSkge1xuICAgIHRoaXMuaWQgPSBvcHRpb25zLmlkID8/IGB0b3BvbG9neS0keysrX2NvdW50ZXJ9YDtcbiAgfVxuXG4gIC8vIOKUgOKUgCBGbG93UmVjb3JkZXIgaG9va3Mg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbiAgb25TdWJmbG93RW50cnkoZXZlbnQ6IEZsb3dTdWJmbG93RXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCBzdWJmbG93SWQgPSBldmVudC5zdWJmbG93SWQ7XG4gICAgaWYgKCFzdWJmbG93SWQpIHJldHVybjsgLy8gTmVlZCBhIHN0YWJsZSBpZCB0byB0cmFjay5cblxuICAgIGNvbnN0IGVudGVyZWRBdCA9IGV2ZW50LnRyYXZlcnNhbENvbnRleHQ/LnJ1bnRpbWVTdGFnZUlkID8/ICcnO1xuXG4gICAgLy8gRGV0ZXJtaW5lIHRoZSBwYXJlbnQ6IHByZWZlciBhIHBlbmRpbmcgZm9yay9kZWNpc2lvbiBtYXRjaCBieSBuYW1lLFxuICAgIC8vIG90aGVyd2lzZSB0aGUgY3VycmVudCB0b3Atb2Ytc3ViZmxvdy1zdGFjay5cbiAgICBsZXQgcGFyZW50SWQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBsZXQgaW5jb21pbmdLaW5kOiBUb3BvbG9neUluY29taW5nS2luZDtcblxuICAgIGNvbnN0IHBlbmRpbmdGb3JrID0gdGhpcy5wZW5kaW5nRm9ya0J5TmFtZS5nZXQoZXZlbnQubmFtZSk7XG4gICAgaWYgKHBlbmRpbmdGb3JrKSB7XG4gICAgICBwYXJlbnRJZCA9IHBlbmRpbmdGb3JrLm5vZGVJZDtcbiAgICAgIGluY29taW5nS2luZCA9ICduZXh0JzsgLy8gQ2hpbGQgT0YgYSBmb3JrLWJyYW5jaCBub2RlOyB0aGUgZm9yayBzZW1hbnRpY1xuICAgICAgLy8gaXMgY2FwdHVyZWQgYnkgdGhlIGZvcmstYnJhbmNoJ3Mgb3duIGluY29taW5nS2luZC5cbiAgICAgIHRoaXMucGVuZGluZ0ZvcmtCeU5hbWUuZGVsZXRlKGV2ZW50Lm5hbWUpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5wZW5kaW5nRGVjaXNpb24gJiYgdGhpcy5wZW5kaW5nRGVjaXNpb24ubmFtZSA9PT0gZXZlbnQubmFtZSkge1xuICAgICAgcGFyZW50SWQgPSB0aGlzLnBlbmRpbmdEZWNpc2lvbi5ub2RlSWQ7XG4gICAgICBpbmNvbWluZ0tpbmQgPSAnbmV4dCc7XG4gICAgICB0aGlzLnBlbmRpbmdEZWNpc2lvbiA9IHVuZGVmaW5lZDtcbiAgICB9IGVsc2Uge1xuICAgICAgcGFyZW50SWQgPSB0aGlzLnN1YmZsb3dTdGFja1t0aGlzLnN1YmZsb3dTdGFjay5sZW5ndGggLSAxXTtcbiAgICAgIGluY29taW5nS2luZCA9IHBhcmVudElkID8gJ25leHQnIDogJ3Jvb3QnO1xuICAgIH1cblxuICAgIC8vIERpc2FtYmlndWF0ZSByZS1lbnRyeSAoZS5nLiwgbG9vcCBib2R5IHJlLWVudGVycyB0aGUgc2FtZSBzdWJmbG93KS5cbiAgICBsZXQgbm9kZUlkID0gc3ViZmxvd0lkO1xuICAgIGlmICh0aGlzLm5vZGVzQnlJZC5oYXMobm9kZUlkKSkge1xuICAgICAgbGV0IG4gPSAxO1xuICAgICAgd2hpbGUgKHRoaXMubm9kZXNCeUlkLmhhcyhgJHtzdWJmbG93SWR9IyR7bn1gKSkgbisrO1xuICAgICAgbm9kZUlkID0gYCR7c3ViZmxvd0lkfSMke259YDtcbiAgICB9XG5cbiAgICBjb25zdCBkZXB0aCA9IHBhcmVudElkID8gdGhpcy5ub2Rlc0J5SWQuZ2V0KHBhcmVudElkKSEuZGVwdGggKyAxIDogMDtcbiAgICBjb25zdCBtZXRhZGF0YSA9IGV2ZW50LmRlc2NyaXB0aW9uID8geyBkZXNjcmlwdGlvbjogZXZlbnQuZGVzY3JpcHRpb24gfSA6IHVuZGVmaW5lZDtcblxuICAgIGNvbnN0IG5vZGU6IFRvcG9sb2d5Tm9kZSA9IHtcbiAgICAgIGlkOiBub2RlSWQsXG4gICAgICBraW5kOiAnc3ViZmxvdycsXG4gICAgICBuYW1lOiBldmVudC5uYW1lLFxuICAgICAgcGFyZW50SWQsXG4gICAgICBkZXB0aCxcbiAgICAgIGluY29taW5nS2luZCxcbiAgICAgIGVudGVyZWRBdCxcbiAgICAgIG1ldGFkYXRhLFxuICAgIH07XG4gICAgdGhpcy5ub2Rlc0J5SWQuc2V0KG5vZGVJZCwgbm9kZSk7XG4gICAgdGhpcy5ub2RlT3JkZXIucHVzaChub2RlSWQpO1xuXG4gICAgaWYgKHBhcmVudElkICYmIGluY29taW5nS2luZCAhPT0gJ3Jvb3QnKSB7XG4gICAgICB0aGlzLmVkZ2VzLnB1c2goe1xuICAgICAgICBmcm9tOiBwYXJlbnRJZCxcbiAgICAgICAgdG86IG5vZGVJZCxcbiAgICAgICAga2luZDogaW5jb21pbmdLaW5kLFxuICAgICAgICBhdDogZW50ZXJlZEF0LFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gTmV4dC1jaGFpbmVkIGVkZ2UgZnJvbSB0aGUgUFJFVklPVVMgc3ViZmxvdyBpbiB0aGlzIHNjb3BlLlxuICAgIC8vXG4gICAgLy8gYC5hZGRTdWJGbG93Q2hhcnROZXh0KEEpLmFkZFN1YkZsb3dDaGFydE5leHQoQikuYWRkU3ViRmxvd0NoYXJ0TmV4dChDKWBcbiAgICAvLyBydW5zIGFzOiBBIGVudGVycyDihpIgQSBleGl0cyDihpIgQiBlbnRlcnMg4oaSIEIgZXhpdHMg4oaSIEMgZW50ZXJzLiBBdFxuICAgIC8vIEIncyBlbnRyeSB0aGUgc3RhY2sgaGFzIHJldHVybmVkIHRvIHRoZSBzY29wZSBpdCB3YXMgaW4gYmVmb3JlIEFcbiAgICAvLyBlbnRlcmVkIChyb290LCBvciB0aGUgc2hhcmVkIGFuY2VzdG9yKS4gV2l0aG91dCB0aGlzIGVkZ2Ugd2UnZFxuICAgIC8vIHNlZSBub2RlcyB7QSwgQiwgQ30gYnV0IG5vIHJlY29yZCB0aGF0IEEgcmFuIEJFRk9SRSBCIHdoaWNoIHJhblxuICAgIC8vIEJFRk9SRSBDIOKAlCBhbmQgZG93bnN0cmVhbSBjb25zdW1lcnMgd291bGQgaGF2ZSB0byByZWNvbnN0cnVjdFxuICAgIC8vIHNlcXVlbnRpYWwgb3JkZXJpbmcgdGhlbXNlbHZlcy5cbiAgICAvL1xuICAgIC8vIE9ubHkgZW1pdCBvbiB0aGUgcmVndWxhci1lbnRyeSBwYXRoLiBGb3JrL2RlY2lzaW9uIGVudHJpZXMgaGF2ZVxuICAgIC8vIHRoZWlyIG93biBlZGdlIG1lY2hhbmljcyAocGFyZW504oaSZm9yay1icmFuY2gsIHBhcmVudOKGkmRlY2lzaW9uLVxuICAgIC8vIGJyYW5jaCkgdGhhdCBjYXJyeSB0aGUgYnJhbmNoaW5nIHNlbWFudGljcy5cbiAgICBpZiAoaW5jb21pbmdLaW5kID09PSAnbmV4dCcgfHwgaW5jb21pbmdLaW5kID09PSAncm9vdCcpIHtcbiAgICAgIGNvbnN0IHNjb3BlS2V5ID0gcGFyZW50SWQgPz8gJyc7XG4gICAgICBjb25zdCBwcmV2aW91cyA9IHRoaXMucHJldmlvdXNTdWJmbG93SW5TY29wZS5nZXQoc2NvcGVLZXkpO1xuICAgICAgaWYgKHByZXZpb3VzKSB7XG4gICAgICAgIHRoaXMuZWRnZXMucHVzaCh7XG4gICAgICAgICAgZnJvbTogcHJldmlvdXMubm9kZUlkLFxuICAgICAgICAgIHRvOiBub2RlSWQsXG4gICAgICAgICAga2luZDogJ25leHQnLFxuICAgICAgICAgIGF0OiBlbnRlcmVkQXQsXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnByZXZpb3VzU3ViZmxvd0luU2NvcGUuZGVsZXRlKHNjb3BlS2V5KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnN1YmZsb3dTdGFjay5wdXNoKG5vZGVJZCk7XG4gIH1cblxuICBvblN1YmZsb3dFeGl0KGV2ZW50OiBGbG93U3ViZmxvd0V2ZW50KTogdm9pZCB7XG4gICAgY29uc3Qgbm9kZUlkID0gdGhpcy5zdWJmbG93U3RhY2sucG9wKCk7XG4gICAgaWYgKCFub2RlSWQpIHJldHVybjtcbiAgICBjb25zdCBub2RlID0gdGhpcy5ub2Rlc0J5SWQuZ2V0KG5vZGVJZCk7XG4gICAgY29uc3QgZXhpdGVkQXQgPSBldmVudC50cmF2ZXJzYWxDb250ZXh0Py5ydW50aW1lU3RhZ2VJZCA/PyAnJztcbiAgICBpZiAobm9kZSkge1xuICAgICAgbm9kZS5leGl0ZWRBdCA9IGV4aXRlZEF0O1xuICAgICAgLy8gUmVtZW1iZXIgdGhpcyBub2RlIGFzIHRoZSBcInByZXZpb3VzIHN1YmZsb3dcIiBpbiBpdHMgc2NvcGUuXG4gICAgICAvLyBXaGF0ZXZlciBzdWJmbG93IGVudGVycyBORVhUIGluIHRoZSBzYW1lIHNjb3BlIChub3JtYWwtZW50cnlcbiAgICAgIC8vIHBhdGgsIG5vdCBmb3JrL2RlY2lzaW9uKSBnZXRzIGEgYG5leHRgIGVkZ2UgZHJhd24gZnJvbSBoZXJlXG4gICAgICAvLyDigJQgdGhpcyBpcyB0aGUgcmVhbCBzZXF1ZW50aWFsIEEg4oaSIEIgdHJhbnNpdGlvbiB0aGF0IHRoZVxuICAgICAgLy8gYC5hZGRTdWJGbG93Q2hhcnROZXh0KClgIGJ1aWxkZXIgcHJvZHVjZWQuXG4gICAgICBjb25zdCBzY29wZUtleSA9IG5vZGUucGFyZW50SWQgPz8gJyc7XG4gICAgICB0aGlzLnByZXZpb3VzU3ViZmxvd0luU2NvcGUuc2V0KHNjb3BlS2V5LCB7IG5vZGVJZCwgZXhpdGVkQXQgfSk7XG4gICAgfVxuICAgIC8vIENsZWFyIHBlbmRpbmdEZWNpc2lvbiBvbiBleGl0IOKAlCBhIGRlY2lzaW9uIGlkZW50aWZpZXMgZXhhY3RseSBPTkVcbiAgICAvLyB0YXJnZXQuIElmIHRoZSBjaG9zZW4gZ29lcyB0byBhIHBsYWluIHN0YWdlIChub3QgYSBzdWJmbG93KSwgdGhlXG4gICAgLy8gcGVuZGluZyBlbnRyeSB3b3VsZCBvdGhlcndpc2UgbGluZ2VyIGFuZCBmYWxzZWx5IG1hdGNoIGFuXG4gICAgLy8gdW5yZWxhdGVkIHN1YmZsb3cgbGF0ZXIgaW4gYSBkaWZmZXJlbnQgc2NvcGUuXG4gICAgdGhpcy5wZW5kaW5nRGVjaXNpb24gPSB1bmRlZmluZWQ7XG4gICAgLy8gRGVsaWJlcmF0ZWx5IE5PVCBjbGVhcmluZyBwZW5kaW5nRm9ya0J5TmFtZSDigJQgZm9yayBzaWJsaW5ncyBuZWVkXG4gICAgLy8gdGhlaXIgcGVuZGluZyBlbnRyaWVzIHRvIHN1cnZpdmUgc2NvcGUgZXhpdHMgb2YgZWFybGllciBzaWJsaW5nc1xuICAgIC8vIChlLmcuIEFscGhhJ3MgaW5uZXIgc2YtbWVzc2FnZXMgZXhpdHMgYmVmb3JlIEJldGEgZW50ZXJzKS4gRm9ya1xuICAgIC8vIHBlbmRpbmcgZW50cmllcyBhcmUgY2xlYXJlZCBvbiBuZXcgYG9uRm9ya2Agb3IgY29uc3VtZWQgb24gbWF0Y2guXG4gIH1cblxuICBvbkZvcmsoZXZlbnQ6IEZsb3dGb3JrRXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCBhY3RpdmVJZCA9IHRoaXMuc3ViZmxvd1N0YWNrW3RoaXMuc3ViZmxvd1N0YWNrLmxlbmd0aCAtIDFdO1xuICAgIGNvbnN0IGF0ID0gZXZlbnQudHJhdmVyc2FsQ29udGV4dD8ucnVudGltZVN0YWdlSWQgPz8gJyc7XG4gICAgY29uc3QgZGVwdGggPSBhY3RpdmVJZCA/IHRoaXMubm9kZXNCeUlkLmdldChhY3RpdmVJZCkhLmRlcHRoICsgMSA6IDA7XG5cbiAgICAvLyBSZXNldCBhbnkgcHJpb3IgcGVuZGluZyBmb3JrIHN0YXRlIOKAlCBhIG5ldyBmb3JrIHN0YXJ0cyBmcmVzaC5cbiAgICB0aGlzLnBlbmRpbmdGb3JrQnlOYW1lLmNsZWFyKCk7XG5cbiAgICBldmVudC5jaGlsZHJlbi5mb3JFYWNoKChjaGlsZE5hbWUsIGkpID0+IHtcbiAgICAgIGNvbnN0IG5vZGVJZCA9IGBmb3JrLSR7YXQgfHwgZXZlbnQucGFyZW50fS0ke2l9LSR7Y2hpbGROYW1lfWA7XG4gICAgICBjb25zdCBub2RlOiBUb3BvbG9neU5vZGUgPSB7XG4gICAgICAgIGlkOiBub2RlSWQsXG4gICAgICAgIGtpbmQ6ICdmb3JrLWJyYW5jaCcsXG4gICAgICAgIG5hbWU6IGNoaWxkTmFtZSxcbiAgICAgICAgcGFyZW50SWQ6IGFjdGl2ZUlkLFxuICAgICAgICBkZXB0aCxcbiAgICAgICAgaW5jb21pbmdLaW5kOiAnZm9yay1icmFuY2gnLFxuICAgICAgICBlbnRlcmVkQXQ6IGF0LFxuICAgICAgICBtZXRhZGF0YTogeyBmb3JrUGFyZW50OiBldmVudC5wYXJlbnQgfSxcbiAgICAgIH07XG4gICAgICB0aGlzLm5vZGVzQnlJZC5zZXQobm9kZUlkLCBub2RlKTtcbiAgICAgIHRoaXMubm9kZU9yZGVyLnB1c2gobm9kZUlkKTtcbiAgICAgIGlmIChhY3RpdmVJZCkge1xuICAgICAgICB0aGlzLmVkZ2VzLnB1c2goeyBmcm9tOiBhY3RpdmVJZCwgdG86IG5vZGVJZCwga2luZDogJ2ZvcmstYnJhbmNoJywgYXQgfSk7XG4gICAgICB9XG4gICAgICB0aGlzLnBlbmRpbmdGb3JrQnlOYW1lLnNldChjaGlsZE5hbWUsIHsgbm9kZUlkLCBhdCB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIG9uRGVjaXNpb24oZXZlbnQ6IEZsb3dEZWNpc2lvbkV2ZW50KTogdm9pZCB7XG4gICAgY29uc3QgYWN0aXZlSWQgPSB0aGlzLnN1YmZsb3dTdGFja1t0aGlzLnN1YmZsb3dTdGFjay5sZW5ndGggLSAxXTtcbiAgICBjb25zdCBhdCA9IGV2ZW50LnRyYXZlcnNhbENvbnRleHQ/LnJ1bnRpbWVTdGFnZUlkID8/ICcnO1xuICAgIGNvbnN0IGRlcHRoID0gYWN0aXZlSWQgPyB0aGlzLm5vZGVzQnlJZC5nZXQoYWN0aXZlSWQpIS5kZXB0aCArIDEgOiAwO1xuXG4gICAgLy8gQSBuZXcgZGVjaXNpb24gc3VwZXJzZWRlcyBhbnkgcHJpb3IgdW5yZXNvbHZlZCBwZW5kaW5nIG9uZS5cbiAgICB0aGlzLnBlbmRpbmdEZWNpc2lvbiA9IHVuZGVmaW5lZDtcblxuICAgIGNvbnN0IG5vZGVJZCA9IGBkZWNpc2lvbi0ke2F0IHx8IGV2ZW50LmRlY2lkZXJ9LSR7ZXZlbnQuY2hvc2VufWA7XG4gICAgY29uc3QgbWV0YWRhdGE6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0geyBkZWNpZGVyOiBldmVudC5kZWNpZGVyIH07XG4gICAgaWYgKGV2ZW50LnJhdGlvbmFsZSkgbWV0YWRhdGEucmF0aW9uYWxlID0gZXZlbnQucmF0aW9uYWxlO1xuICAgIGlmIChldmVudC5kZXNjcmlwdGlvbikgbWV0YWRhdGEuZGVzY3JpcHRpb24gPSBldmVudC5kZXNjcmlwdGlvbjtcblxuICAgIGNvbnN0IG5vZGU6IFRvcG9sb2d5Tm9kZSA9IHtcbiAgICAgIGlkOiBub2RlSWQsXG4gICAgICBraW5kOiAnZGVjaXNpb24tYnJhbmNoJyxcbiAgICAgIG5hbWU6IGV2ZW50LmNob3NlbixcbiAgICAgIHBhcmVudElkOiBhY3RpdmVJZCxcbiAgICAgIGRlcHRoLFxuICAgICAgaW5jb21pbmdLaW5kOiAnZGVjaXNpb24tYnJhbmNoJyxcbiAgICAgIGVudGVyZWRBdDogYXQsXG4gICAgICBtZXRhZGF0YSxcbiAgICB9O1xuICAgIHRoaXMubm9kZXNCeUlkLnNldChub2RlSWQsIG5vZGUpO1xuICAgIHRoaXMubm9kZU9yZGVyLnB1c2gobm9kZUlkKTtcbiAgICBpZiAoYWN0aXZlSWQpIHtcbiAgICAgIHRoaXMuZWRnZXMucHVzaCh7IGZyb206IGFjdGl2ZUlkLCB0bzogbm9kZUlkLCBraW5kOiAnZGVjaXNpb24tYnJhbmNoJywgYXQgfSk7XG4gICAgfVxuICAgIHRoaXMucGVuZGluZ0RlY2lzaW9uID0geyBuYW1lOiBldmVudC5jaG9zZW4sIG5vZGVJZCwgYXQgfTtcbiAgfVxuXG4gIG9uTG9vcChldmVudDogRmxvd0xvb3BFdmVudCk6IHZvaWQge1xuICAgIC8vIGxvb3BUbyBqdW1wcyBiYWNrIGluc2lkZSB0aGUgQ1VSUkVOVCBzdWJmbG93LiBSZWNvcmQgYSBzZWxmLWVkZ2Ugb24gdGhlXG4gICAgLy8gYWN0aXZlIHN1YmZsb3cg4oCUIHN5bnRoZXRpYyBmb3JrL2RlY2lzaW9uIG5vZGVzIGRvbid0IHBhcnRpY2lwYXRlIGluIGxvb3BzLlxuICAgIGNvbnN0IGFjdGl2ZUlkID0gdGhpcy5zdWJmbG93U3RhY2tbdGhpcy5zdWJmbG93U3RhY2subGVuZ3RoIC0gMV07XG4gICAgaWYgKCFhY3RpdmVJZCkgcmV0dXJuO1xuICAgIHRoaXMuZWRnZXMucHVzaCh7XG4gICAgICBmcm9tOiBhY3RpdmVJZCxcbiAgICAgIHRvOiBhY3RpdmVJZCxcbiAgICAgIGtpbmQ6ICdsb29wLWl0ZXJhdGlvbicsXG4gICAgICBhdDogZXZlbnQudHJhdmVyc2FsQ29udGV4dD8ucnVudGltZVN0YWdlSWQgPz8gJycsXG4gICAgfSk7XG4gIH1cblxuICAvKiogQ2FsbGVkIGJ5IHRoZSBleGVjdXRvciBiZWZvcmUgZWFjaCBgcnVuKClgIOKAlCByZXNldHMgYWxsIHN0YXRlLiAqL1xuICBjbGVhcigpOiB2b2lkIHtcbiAgICB0aGlzLm5vZGVzQnlJZC5jbGVhcigpO1xuICAgIHRoaXMubm9kZU9yZGVyLmxlbmd0aCA9IDA7XG4gICAgdGhpcy5lZGdlcy5sZW5ndGggPSAwO1xuICAgIHRoaXMuc3ViZmxvd1N0YWNrLmxlbmd0aCA9IDA7XG4gICAgdGhpcy5wZW5kaW5nRm9ya0J5TmFtZS5jbGVhcigpO1xuICAgIHRoaXMucHJldmlvdXNTdWJmbG93SW5TY29wZS5jbGVhcigpO1xuICAgIHRoaXMucGVuZGluZ0RlY2lzaW9uID0gdW5kZWZpbmVkO1xuICB9XG5cbiAgLy8g4pSA4pSAIFF1ZXJ5IEFQSSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuICAvKiogTGl2ZSBzbmFwc2hvdCBvZiB0aGUgY29tcG9zaXRpb24gZ3JhcGguIFNhZmUgZHVyaW5nIG9yIGFmdGVyIGEgcnVuLiAqL1xuICBnZXRUb3BvbG9neSgpOiBUb3BvbG9neSB7XG4gICAgY29uc3Qgbm9kZXMgPSB0aGlzLm5vZGVPcmRlci5tYXAoKGlkKSA9PiB0aGlzLm5vZGVzQnlJZC5nZXQoaWQpISk7XG4gICAgcmV0dXJuIHtcbiAgICAgIG5vZGVzLFxuICAgICAgZWRnZXM6IFsuLi50aGlzLmVkZ2VzXSxcbiAgICAgIGFjdGl2ZU5vZGVJZDogdGhpcy5zdWJmbG93U3RhY2tbdGhpcy5zdWJmbG93U3RhY2subGVuZ3RoIC0gMV0gPz8gbnVsbCxcbiAgICAgIHJvb3RJZDogdGhpcy5ub2RlT3JkZXJbMF0gPz8gbnVsbCxcbiAgICB9O1xuICB9XG5cbiAgLyoqIERpcmVjdCBjaGlsZHJlbiBvZiBhIG5vZGUg4oCUIGluc2VydGlvbi1vcmRlcmVkLiAqL1xuICBnZXRDaGlsZHJlbihub2RlSWQ6IHN0cmluZyk6IFRvcG9sb2d5Tm9kZVtdIHtcbiAgICByZXR1cm4gdGhpcy5ub2RlT3JkZXIubWFwKChpZCkgPT4gdGhpcy5ub2Rlc0J5SWQuZ2V0KGlkKSEpLmZpbHRlcigobikgPT4gbi5wYXJlbnRJZCA9PT0gbm9kZUlkKTtcbiAgfVxuXG4gIC8qKiBBbGwgbm9kZXMgb2YgYSBnaXZlbiBraW5kLiAqL1xuICBnZXRCeUtpbmQoa2luZDogVG9wb2xvZ3lOb2RlS2luZCk6IFRvcG9sb2d5Tm9kZVtdIHtcbiAgICByZXR1cm4gdGhpcy5ub2RlT3JkZXIubWFwKChpZCkgPT4gdGhpcy5ub2Rlc0J5SWQuZ2V0KGlkKSEpLmZpbHRlcigobikgPT4gbi5raW5kID09PSBraW5kKTtcbiAgfVxuXG4gIC8qKiBBbGwgbW91bnRlZCBzdWJmbG93IG5vZGVzLiBDb252ZW5pZW5jZSBmb3IgYWdlbnQtY2VudHJpYyB2aWV3cy4gKi9cbiAgZ2V0U3ViZmxvd05vZGVzKCk6IFRvcG9sb2d5Tm9kZVtdIHtcbiAgICByZXR1cm4gdGhpcy5nZXRCeUtpbmQoJ3N1YmZsb3cnKTtcbiAgfVxuXG4gIC8qKiBBbGwgZm9yay1icmFuY2ggbm9kZXMgc2hhcmluZyB0aGUgc2FtZSBwYXJlbnQgYXMgYG5vZGVJZGAg4oCUIGkuZS4sXG4gICAqICBwYXJhbGxlbCBzaWJsaW5ncyBvZiBhIHBhcmFsbGVsIGJyYW5jaC4gRW1wdHkgaWYgYG5vZGVJZGAgaXNuJ3QgYVxuICAgKiAgZm9yay1icmFuY2ggb3IgaGFzIG5vIHBhcmVudC4gKi9cbiAgZ2V0UGFyYWxsZWxTaWJsaW5ncyhub2RlSWQ6IHN0cmluZyk6IFRvcG9sb2d5Tm9kZVtdIHtcbiAgICBjb25zdCBub2RlID0gdGhpcy5ub2Rlc0J5SWQuZ2V0KG5vZGVJZCk7XG4gICAgaWYgKCFub2RlIHx8IG5vZGUua2luZCAhPT0gJ2ZvcmstYnJhbmNoJyB8fCAhbm9kZS5wYXJlbnRJZCkgcmV0dXJuIFtdO1xuICAgIHJldHVybiB0aGlzLmdldENoaWxkcmVuKG5vZGUucGFyZW50SWQpLmZpbHRlcigobikgPT4gbi5raW5kID09PSAnZm9yay1icmFuY2gnKTtcbiAgfVxuXG4gIC8qKiBFbWl0IGEgc25hcHNob3QgYnVuZGxlIGZvciBpbmNsdXNpb24gaW4gYGV4ZWN1dG9yLmdldFNuYXBzaG90KClgLiAqL1xuICB0b1NuYXBzaG90KCkge1xuICAgIHJldHVybiB7XG4gICAgICBuYW1lOiAnVG9wb2xvZ3knLFxuICAgICAgZGVzY3JpcHRpb246ICdDb21wb3NpdGlvbiBncmFwaDogc3ViZmxvdyBib3VuZGFyaWVzLCBmb3JrIGJyYW5jaGVzLCBkZWNpc2lvbiBicmFuY2hlcycsXG4gICAgICBwcmVmZXJyZWRPcGVyYXRpb246ICd0cmFuc2xhdGUnIGFzIGNvbnN0LFxuICAgICAgZGF0YTogdGhpcy5nZXRUb3BvbG9neSgpLFxuICAgIH07XG4gIH1cbn1cbiJdfQ==
@@ -1,7 +1,17 @@
1
+ // ── Stores (concrete, composable — v5 primary API) ────────────────────
2
+ // Compose these via `new Store<T>()` as a field on your recorder class.
3
+ // One purpose per recorder: stores are storage; recorders are event hooks.
4
+ export { BoundaryStateStore } from './BoundaryStateStore.js';
5
+ export { KeyedStore } from './KeyedStore.js';
6
+ export { SequenceStore } from './SequenceStore.js';
7
+ // ── Abstract bases (DEPRECATED — slated for removal in 5.0 final) ─────
8
+ // Kept during the v5 migration window for downstream consumers (agentfootprint,
9
+ // agentfootprint-lens) that still extend them. New code should compose Stores
10
+ // instead. See `docs/design/v5-recorder-redesign.md`.
1
11
  export { BoundaryStateTracker } from './BoundaryStateTracker.js';
12
+ export { KeyedRecorder } from './KeyedRecorder.js';
13
+ export { SequenceRecorder } from './SequenceRecorder.js';
2
14
  export { hasEmitRecorderMethods, hasFlowRecorderMethods, hasRecorderMethods, isFlowEvent } from './CombinedRecorder.js';
3
15
  export { CompositeRecorder } from './CompositeRecorder.js';
4
- export { KeyedRecorder } from './KeyedRecorder.js';
5
16
  export { RecorderOperation } from './RecorderOperation.js';
6
- export { SequenceRecorder } from './SequenceRecorder.js';
7
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL3JlY29yZGVyL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBRWpFLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxzQkFBc0IsRUFBRSxrQkFBa0IsRUFBRSxXQUFXLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUV4SCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUUzRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDbkQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sdUJBQXVCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgeyBCb3VuZGFyeVN0YXRlVHJhY2tlciB9IGZyb20gJy4vQm91bmRhcnlTdGF0ZVRyYWNrZXIuanMnO1xuZXhwb3J0IHR5cGUgeyBDb21iaW5lZFJlY29yZGVyIH0gZnJvbSAnLi9Db21iaW5lZFJlY29yZGVyLmpzJztcbmV4cG9ydCB7IGhhc0VtaXRSZWNvcmRlck1ldGhvZHMsIGhhc0Zsb3dSZWNvcmRlck1ldGhvZHMsIGhhc1JlY29yZGVyTWV0aG9kcywgaXNGbG93RXZlbnQgfSBmcm9tICcuL0NvbWJpbmVkUmVjb3JkZXIuanMnO1xuZXhwb3J0IHR5cGUgeyBDb21wb3NpdGVTbmFwc2hvdCB9IGZyb20gJy4vQ29tcG9zaXRlUmVjb3JkZXIuanMnO1xuZXhwb3J0IHsgQ29tcG9zaXRlUmVjb3JkZXIgfSBmcm9tICcuL0NvbXBvc2l0ZVJlY29yZGVyLmpzJztcbmV4cG9ydCB0eXBlIHsgRW1pdEV2ZW50LCBFbWl0UmVjb3JkZXIgfSBmcm9tICcuL0VtaXRSZWNvcmRlci5qcyc7XG5leHBvcnQgeyBLZXllZFJlY29yZGVyIH0gZnJvbSAnLi9LZXllZFJlY29yZGVyLmpzJztcbmV4cG9ydCB7IFJlY29yZGVyT3BlcmF0aW9uIH0gZnJvbSAnLi9SZWNvcmRlck9wZXJhdGlvbi5qcyc7XG5leHBvcnQgeyBTZXF1ZW5jZVJlY29yZGVyIH0gZnJvbSAnLi9TZXF1ZW5jZVJlY29yZGVyLmpzJztcbiJdfQ==
17
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL3JlY29yZGVyL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHlFQUF5RTtBQUN6RSx3RUFBd0U7QUFDeEUsMkVBQTJFO0FBQzNFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzdELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUM3QyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFFbkQseUVBQXlFO0FBQ3pFLGdGQUFnRjtBQUNoRiw4RUFBOEU7QUFDOUUsc0RBQXNEO0FBQ3RELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNuRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUl6RCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsc0JBQXNCLEVBQUUsa0JBQWtCLEVBQUUsV0FBVyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFeEgsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFFM0QsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sd0JBQXdCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyDilIDilIAgU3RvcmVzIChjb25jcmV0ZSwgY29tcG9zYWJsZSDigJQgdjUgcHJpbWFyeSBBUEkpIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuLy8gQ29tcG9zZSB0aGVzZSB2aWEgYG5ldyBTdG9yZTxUPigpYCBhcyBhIGZpZWxkIG9uIHlvdXIgcmVjb3JkZXIgY2xhc3MuXG4vLyBPbmUgcHVycG9zZSBwZXIgcmVjb3JkZXI6IHN0b3JlcyBhcmUgc3RvcmFnZTsgcmVjb3JkZXJzIGFyZSBldmVudCBob29rcy5cbmV4cG9ydCB7IEJvdW5kYXJ5U3RhdGVTdG9yZSB9IGZyb20gJy4vQm91bmRhcnlTdGF0ZVN0b3JlLmpzJztcbmV4cG9ydCB7IEtleWVkU3RvcmUgfSBmcm9tICcuL0tleWVkU3RvcmUuanMnO1xuZXhwb3J0IHsgU2VxdWVuY2VTdG9yZSB9IGZyb20gJy4vU2VxdWVuY2VTdG9yZS5qcyc7XG5cbi8vIOKUgOKUgCBBYnN0cmFjdCBiYXNlcyAoREVQUkVDQVRFRCDigJQgc2xhdGVkIGZvciByZW1vdmFsIGluIDUuMCBmaW5hbCkg4pSA4pSA4pSA4pSA4pSAXG4vLyBLZXB0IGR1cmluZyB0aGUgdjUgbWlncmF0aW9uIHdpbmRvdyBmb3IgZG93bnN0cmVhbSBjb25zdW1lcnMgKGFnZW50Zm9vdHByaW50LFxuLy8gYWdlbnRmb290cHJpbnQtbGVucykgdGhhdCBzdGlsbCBleHRlbmQgdGhlbS4gTmV3IGNvZGUgc2hvdWxkIGNvbXBvc2UgU3RvcmVzXG4vLyBpbnN0ZWFkLiBTZWUgYGRvY3MvZGVzaWduL3Y1LXJlY29yZGVyLXJlZGVzaWduLm1kYC5cbmV4cG9ydCB7IEJvdW5kYXJ5U3RhdGVUcmFja2VyIH0gZnJvbSAnLi9Cb3VuZGFyeVN0YXRlVHJhY2tlci5qcyc7XG5leHBvcnQgeyBLZXllZFJlY29yZGVyIH0gZnJvbSAnLi9LZXllZFJlY29yZGVyLmpzJztcbmV4cG9ydCB7IFNlcXVlbmNlUmVjb3JkZXIgfSBmcm9tICcuL1NlcXVlbmNlUmVjb3JkZXIuanMnO1xuXG4vLyDilIDilIAgSW50ZXJmYWNlcyAoZXZlbnQgaG9va3MpIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuZXhwb3J0IHR5cGUgeyBDb21iaW5lZFJlY29yZGVyIH0gZnJvbSAnLi9Db21iaW5lZFJlY29yZGVyLmpzJztcbmV4cG9ydCB7IGhhc0VtaXRSZWNvcmRlck1ldGhvZHMsIGhhc0Zsb3dSZWNvcmRlck1ldGhvZHMsIGhhc1JlY29yZGVyTWV0aG9kcywgaXNGbG93RXZlbnQgfSBmcm9tICcuL0NvbWJpbmVkUmVjb3JkZXIuanMnO1xuZXhwb3J0IHR5cGUgeyBDb21wb3NpdGVTbmFwc2hvdCB9IGZyb20gJy4vQ29tcG9zaXRlUmVjb3JkZXIuanMnO1xuZXhwb3J0IHsgQ29tcG9zaXRlUmVjb3JkZXIgfSBmcm9tICcuL0NvbXBvc2l0ZVJlY29yZGVyLmpzJztcbmV4cG9ydCB0eXBlIHsgRW1pdEV2ZW50LCBFbWl0UmVjb3JkZXIgfSBmcm9tICcuL0VtaXRSZWNvcmRlci5qcyc7XG5leHBvcnQgeyBSZWNvcmRlck9wZXJhdGlvbiB9IGZyb20gJy4vUmVjb3JkZXJPcGVyYXRpb24uanMnO1xuIl19