footprintjs 4.1.0 → 4.3.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 (82) hide show
  1. package/CLAUDE.md +49 -1
  2. package/dist/esm/index.js +6 -1
  3. package/dist/esm/lib/builder/FlowChartBuilder.js +53 -1
  4. package/dist/esm/lib/builder/types.js +1 -1
  5. package/dist/esm/lib/engine/graph/StageNode.js +1 -1
  6. package/dist/esm/lib/engine/handlers/ChildrenExecutor.js +14 -1
  7. package/dist/esm/lib/engine/handlers/DeciderHandler.js +7 -1
  8. package/dist/esm/lib/engine/handlers/SelectorHandler.js +7 -1
  9. package/dist/esm/lib/engine/handlers/StageRunner.js +13 -1
  10. package/dist/esm/lib/engine/handlers/SubflowExecutor.js +8 -1
  11. package/dist/esm/lib/engine/narrative/CombinedNarrativeRecorder.js +39 -1
  12. package/dist/esm/lib/engine/narrative/FlowRecorderDispatcher.js +31 -1
  13. package/dist/esm/lib/engine/narrative/NarrativeFlowRecorder.js +10 -1
  14. package/dist/esm/lib/engine/narrative/NullControlFlowNarrativeGenerator.js +3 -1
  15. package/dist/esm/lib/engine/narrative/narrativeTypes.js +1 -1
  16. package/dist/esm/lib/engine/narrative/types.js +1 -1
  17. package/dist/esm/lib/engine/traversal/FlowchartTraverser.js +8 -1
  18. package/dist/esm/lib/engine/types.js +2 -1
  19. package/dist/esm/lib/pause/index.js +2 -0
  20. package/dist/esm/lib/pause/types.js +58 -0
  21. package/dist/esm/lib/reactive/types.js +2 -1
  22. package/dist/esm/lib/recorder/CompositeRecorder.js +172 -0
  23. package/dist/esm/lib/recorder/index.js +2 -0
  24. package/dist/esm/lib/runner/ExecutionRuntime.js +11 -2
  25. package/dist/esm/lib/runner/FlowChartExecutor.js +260 -8
  26. package/dist/esm/lib/scope/ScopeFacade.js +23 -1
  27. package/dist/esm/lib/scope/recorders/DebugRecorder.js +36 -2
  28. package/dist/esm/lib/scope/recorders/MetricRecorder.js +60 -4
  29. package/dist/esm/lib/scope/types.js +1 -1
  30. package/dist/esm/recorders.js +4 -3
  31. package/dist/index.js +21 -15
  32. package/dist/lib/builder/FlowChartBuilder.js +53 -1
  33. package/dist/lib/builder/types.js +1 -1
  34. package/dist/lib/engine/graph/StageNode.js +1 -1
  35. package/dist/lib/engine/handlers/ChildrenExecutor.js +14 -1
  36. package/dist/lib/engine/handlers/DeciderHandler.js +7 -1
  37. package/dist/lib/engine/handlers/SelectorHandler.js +7 -1
  38. package/dist/lib/engine/handlers/StageRunner.js +17 -5
  39. package/dist/lib/engine/handlers/SubflowExecutor.js +8 -1
  40. package/dist/lib/engine/narrative/CombinedNarrativeRecorder.js +39 -1
  41. package/dist/lib/engine/narrative/FlowRecorderDispatcher.js +31 -1
  42. package/dist/lib/engine/narrative/NarrativeFlowRecorder.js +10 -1
  43. package/dist/lib/engine/narrative/NullControlFlowNarrativeGenerator.js +3 -1
  44. package/dist/lib/engine/narrative/narrativeTypes.js +1 -1
  45. package/dist/lib/engine/narrative/types.js +1 -1
  46. package/dist/lib/engine/traversal/FlowchartTraverser.js +8 -1
  47. package/dist/lib/engine/types.js +6 -2
  48. package/dist/lib/pause/index.js +8 -0
  49. package/dist/lib/pause/types.js +64 -0
  50. package/dist/lib/reactive/types.js +2 -1
  51. package/dist/lib/recorder/CompositeRecorder.js +176 -0
  52. package/dist/lib/recorder/index.js +6 -0
  53. package/dist/lib/runner/ExecutionRuntime.js +11 -2
  54. package/dist/lib/runner/FlowChartExecutor.js +260 -8
  55. package/dist/lib/scope/ScopeFacade.js +23 -1
  56. package/dist/lib/scope/recorders/DebugRecorder.js +36 -2
  57. package/dist/lib/scope/recorders/MetricRecorder.js +60 -4
  58. package/dist/lib/scope/types.js +1 -1
  59. package/dist/recorders.js +6 -4
  60. package/dist/types/index.d.ts +8 -1
  61. package/dist/types/lib/builder/FlowChartBuilder.d.ts +22 -0
  62. package/dist/types/lib/builder/types.d.ts +3 -1
  63. package/dist/types/lib/engine/graph/StageNode.d.ts +9 -0
  64. package/dist/types/lib/engine/narrative/CombinedNarrativeRecorder.d.ts +9 -1
  65. package/dist/types/lib/engine/narrative/FlowRecorderDispatcher.d.ts +2 -0
  66. package/dist/types/lib/engine/narrative/NarrativeFlowRecorder.d.ts +3 -1
  67. package/dist/types/lib/engine/narrative/NullControlFlowNarrativeGenerator.d.ts +2 -0
  68. package/dist/types/lib/engine/narrative/narrativeTypes.d.ts +1 -1
  69. package/dist/types/lib/engine/narrative/types.d.ts +24 -0
  70. package/dist/types/lib/engine/types.d.ts +23 -0
  71. package/dist/types/lib/pause/index.d.ts +2 -0
  72. package/dist/types/lib/pause/types.d.ts +175 -0
  73. package/dist/types/lib/recorder/CompositeRecorder.d.ts +95 -0
  74. package/dist/types/lib/recorder/index.d.ts +2 -0
  75. package/dist/types/lib/runner/ExecutionRuntime.d.ts +4 -0
  76. package/dist/types/lib/runner/FlowChartExecutor.d.ts +78 -2
  77. package/dist/types/lib/scope/ScopeFacade.d.ts +4 -0
  78. package/dist/types/lib/scope/recorders/DebugRecorder.d.ts +20 -2
  79. package/dist/types/lib/scope/recorders/MetricRecorder.d.ts +51 -3
  80. package/dist/types/lib/scope/types.d.ts +10 -0
  81. package/dist/types/recorders.d.ts +5 -2
  82. package/package.json +1 -1
@@ -4,6 +4,7 @@
4
4
  * Centralizes type definitions to avoid circular dependencies.
5
5
  * Every handler receives HandlerDeps (the DI bag) instead of importing the traverser.
6
6
  */
7
+ export { isPauseResult, isPauseSignal, PauseSignal } from '../pause/index.js';
7
8
  /** Default console-based logger. */
8
9
  /* istanbul ignore next -- trivial console delegation */
9
10
  export const defaultLogger = {
@@ -13,4 +14,4 @@ export const defaultLogger = {
13
14
  error: (message, ...args) => console.error(message, ...args),
14
15
  warn: (message, ...args) => console.warn(message, ...args),
15
16
  };
16
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL2VuZ2luZS90eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7R0FLRztBQXdCSCxvQ0FBb0M7QUFDcEMsd0RBQXdEO0FBQ3hELE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBWTtJQUNwQyxJQUFJLEVBQUUsQ0FBQyxPQUFhLEVBQUUsR0FBRyxJQUFXLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLEdBQUcsSUFBSSxDQUFDO0lBQ3ZFLEdBQUcsRUFBRSxDQUFDLE9BQWEsRUFBRSxHQUFHLElBQVcsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsR0FBRyxJQUFJLENBQUM7SUFDckUsS0FBSyxFQUFFLENBQUMsT0FBYSxFQUFFLEdBQUcsSUFBVyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxHQUFHLElBQUksQ0FBQztJQUN6RSxLQUFLLEVBQUUsQ0FBQyxPQUFhLEVBQUUsR0FBRyxJQUFXLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLEdBQUcsSUFBSSxDQUFDO0lBQ3pFLElBQUksRUFBRSxDQUFDLE9BQWEsRUFBRSxHQUFHLElBQVcsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsR0FBRyxJQUFJLENBQUM7Q0FDeEUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogdHlwZXMudHMg4oCUIEFsbCB0eXBlIGRlZmluaXRpb25zIGZvciB0aGUgZW5naW5lIGxpYnJhcnkuXG4gKlxuICogQ2VudHJhbGl6ZXMgdHlwZSBkZWZpbml0aW9ucyB0byBhdm9pZCBjaXJjdWxhciBkZXBlbmRlbmNpZXMuXG4gKiBFdmVyeSBoYW5kbGVyIHJlY2VpdmVzIEhhbmRsZXJEZXBzICh0aGUgREkgYmFnKSBpbnN0ZWFkIG9mIGltcG9ydGluZyB0aGUgdHJhdmVyc2VyLlxuICovXG5cbmltcG9ydCB0eXBlIHsgU3RhZ2VDb250ZXh0IH0gZnJvbSAnLi4vbWVtb3J5L1N0YWdlQ29udGV4dC5qcyc7XG5pbXBvcnQgdHlwZSB7IEZsb3dDb250cm9sVHlwZSwgRmxvd01lc3NhZ2UgfSBmcm9tICcuLi9tZW1vcnkvdHlwZXMuanMnO1xuaW1wb3J0IHR5cGUgeyBTY29wZVByb3RlY3Rpb25Nb2RlIH0gZnJvbSAnLi4vc2NvcGUvcHJvdGVjdGlvbi90eXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7IERlY2lkZXIsIFNlbGVjdG9yLCBTdGFnZU5vZGUgfSBmcm9tICcuL2dyYXBoL1N0YWdlTm9kZS5qcyc7XG5pbXBvcnQgdHlwZSB7IElDb250cm9sRmxvd05hcnJhdGl2ZSB9IGZyb20gJy4vbmFycmF0aXZlL3R5cGVzLmpzJztcblxuLy8gUmUtZXhwb3J0IFN0YWdlTm9kZSB0eXBlcyBmb3IgY29udmVuaWVuY2VcbmV4cG9ydCB0eXBlIHsgRGVjaWRlciwgU2VsZWN0b3IsIFN0YWdlTm9kZSB9IGZyb20gJy4vZ3JhcGgvU3RhZ2VOb2RlLmpzJztcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBMb2dnZXJcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vKiogTWluaW1hbCBsb2dnaW5nIGNvbnRyYWN0LiBNaXJyb3JzIENvbnNvbGUgQVBJIHN1YnNldC4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSUxvZ2dlciB7XG4gIGluZm8obWVzc2FnZT86IGFueSwgLi4ub3B0aW9uYWxQYXJhbXM6IGFueVtdKTogdm9pZDtcbiAgbG9nKG1lc3NhZ2U/OiBhbnksIC4uLm9wdGlvbmFsUGFyYW1zOiBhbnlbXSk6IHZvaWQ7XG4gIGRlYnVnKG1lc3NhZ2U/OiBhbnksIC4uLm9wdGlvbmFsUGFyYW1zOiBhbnlbXSk6IHZvaWQ7XG4gIGVycm9yKG1lc3NhZ2U/OiBhbnksIC4uLm9wdGlvbmFsUGFyYW1zOiBhbnlbXSk6IHZvaWQ7XG4gIHdhcm4obWVzc2FnZT86IGFueSwgLi4ub3B0aW9uYWxQYXJhbXM6IGFueVtdKTogdm9pZDtcbn1cblxuLyoqIERlZmF1bHQgY29uc29sZS1iYXNlZCBsb2dnZXIuICovXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAtLSB0cml2aWFsIGNvbnNvbGUgZGVsZWdhdGlvbiAqL1xuZXhwb3J0IGNvbnN0IGRlZmF1bHRMb2dnZXI6IElMb2dnZXIgPSB7XG4gIGluZm86IChtZXNzYWdlPzogYW55LCAuLi5hcmdzOiBhbnlbXSkgPT4gY29uc29sZS5pbmZvKG1lc3NhZ2UsIC4uLmFyZ3MpLFxuICBsb2c6IChtZXNzYWdlPzogYW55LCAuLi5hcmdzOiBhbnlbXSkgPT4gY29uc29sZS5sb2cobWVzc2FnZSwgLi4uYXJncyksXG4gIGRlYnVnOiAobWVzc2FnZT86IGFueSwgLi4uYXJnczogYW55W10pID0+IGNvbnNvbGUuZGVidWcobWVzc2FnZSwgLi4uYXJncyksXG4gIGVycm9yOiAobWVzc2FnZT86IGFueSwgLi4uYXJnczogYW55W10pID0+IGNvbnNvbGUuZXJyb3IobWVzc2FnZSwgLi4uYXJncyksXG4gIHdhcm46IChtZXNzYWdlPzogYW55LCAuLi5hcmdzOiBhbnlbXSkgPT4gY29uc29sZS53YXJuKG1lc3NhZ2UsIC4uLmFyZ3MpLFxufTtcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBTdGFnZSBGdW5jdGlvblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8qKiBDYWxsYmFjayB0aGF0IHJlY2VpdmVzIHRva2VucyBkdXJpbmcgc3RyZWFtaW5nLiAqL1xuZXhwb3J0IHR5cGUgU3RyZWFtQ2FsbGJhY2sgPSAodG9rZW46IHN0cmluZykgPT4gdm9pZDtcblxuLyoqXG4gKiBUaGUgZnVuY3Rpb24gc2lnbmF0dXJlIGZvciBzdGFnZSBoYW5kbGVycy5cbiAqIC0gVE91dDogcmV0dXJuIHR5cGUgcHJvZHVjZWQgYnkgdGhlIHN0YWdlXG4gKiAtIFRTY29wZTogdGhlIHNjb3BlIG9iamVjdCBwYXNzZWQgdG8gdGhlIHN0YWdlXG4gKiAtIE9wdGlvbmFsIDNyZCBwYXJhbWV0ZXIgYHN0cmVhbUNhbGxiYWNrYCBpbmplY3RlZCBmb3Igc3RyZWFtaW5nIHN0YWdlcy5cbiAqL1xuZXhwb3J0IHR5cGUgU3RhZ2VGdW5jdGlvbjxUT3V0ID0gYW55LCBUU2NvcGUgPSBhbnk+ID0gKFxuICBzY29wZTogVFNjb3BlLFxuICBicmVha1BpcGVsaW5lOiAoKSA9PiB2b2lkLFxuICBzdHJlYW1DYWxsYmFjaz86IFN0cmVhbUNhbGxiYWNrLFxuKSA9PiBQcm9taXNlPFRPdXQgfCB2b2lkPiB8IFRPdXQgfCB2b2lkO1xuXG4vKiogRmFjdG9yeSB0aGF0IGNyZWF0ZXMgYSBzY29wZSBpbnN0YW5jZSBmb3IgZWFjaCBzdGFnZS4gKi9cbmV4cG9ydCB0eXBlIFNjb3BlRmFjdG9yeTxUU2NvcGUgPSBhbnk+ID0gKFxuICBjb250ZXh0OiBTdGFnZUNvbnRleHQsXG4gIHN0YWdlTmFtZTogc3RyaW5nLFxuICByZWFkT25seUNvbnRleHQ/OiB1bmtub3duLFxuICBleGVjdXRpb25FbnY/OiBFeGVjdXRpb25FbnYsXG4pID0+IFRTY29wZTtcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBTdHJlYW1pbmdcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5leHBvcnQgdHlwZSBTdHJlYW1Ub2tlbkhhbmRsZXIgPSAoc3RyZWFtSWQ6IHN0cmluZywgdG9rZW46IHN0cmluZykgPT4gdm9pZDtcbmV4cG9ydCB0eXBlIFN0cmVhbUxpZmVjeWNsZUhhbmRsZXIgPSAoc3RyZWFtSWQ6IHN0cmluZywgZnVsbFRleHQ/OiBzdHJpbmcpID0+IHZvaWQ7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3RyZWFtSGFuZGxlcnMge1xuICBvblRva2VuPzogU3RyZWFtVG9rZW5IYW5kbGVyO1xuICBvblN0YXJ0PzogU3RyZWFtTGlmZWN5Y2xlSGFuZGxlcjtcbiAgb25FbmQ/OiBTdHJlYW1MaWZlY3ljbGVIYW5kbGVyO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFN1YmZsb3dcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5leHBvcnQgaW50ZXJmYWNlIFN1YmZsb3dNb3VudE9wdGlvbnM8VFBhcmVudFNjb3BlID0gYW55LCBUU3ViZmxvd0lucHV0ID0gYW55LCBUU3ViZmxvd091dHB1dCA9IGFueT4ge1xuICBpbnB1dE1hcHBlcj86IChwYXJlbnRTY29wZTogVFBhcmVudFNjb3BlKSA9PiBUU3ViZmxvd0lucHV0O1xuICAvKipcbiAgICogTWFwcyBzdWJmbG93IG91dHB1dCBiYWNrIGludG8gcGFyZW50IHNjb3BlLlxuICAgKlxuICAgKiAqKkFycmF5IHZhbHVlcyBhcmUgY29uY2F0ZW5hdGVkLCBub3QgcmVwbGFjZWQuKiogYGFwcGx5T3V0cHV0TWFwcGluZ2AgdXNlc1xuICAgKiBgWy4uLmV4aXN0aW5nLCAuLi52YWx1ZV1gIGZvciBhcnJheXMuIFJldHVybiBvbmx5IHRoZSAqKmRlbHRhKiogKG5ldyBpdGVtcylcbiAgICogZm9yIGFycmF5IGtleXMsIG9yIHRoZSBwYXJlbnQncyBleGlzdGluZyBhcnJheSBpdGVtcyB3aWxsIGJlIGR1cGxpY2F0ZWQuXG4gICAqIFNjYWxhciB2YWx1ZXMgYXJlIHJlcGxhY2VkIG5vcm1hbGx5LlxuICAgKi9cbiAgb3V0cHV0TWFwcGVyPzogKHN1YmZsb3dPdXRwdXQ6IFRTdWJmbG93T3V0cHV0LCBwYXJlbnRTY29wZTogVFBhcmVudFNjb3BlKSA9PiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTdWJmbG93UmVzdWx0IHtcbiAgc3ViZmxvd0lkOiBzdHJpbmc7XG4gIHN1YmZsb3dOYW1lOiBzdHJpbmc7XG4gIHRyZWVDb250ZXh0OiB7XG4gICAgZ2xvYmFsQ29udGV4dDogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgc3RhZ2VDb250ZXh0czogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgaGlzdG9yeTogdW5rbm93bltdO1xuICB9O1xuICBwYXJlbnRTdGFnZUlkOiBzdHJpbmc7XG4gIHBpcGVsaW5lU3RydWN0dXJlPzogdW5rbm93bjtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBTdWJmbG93IFRyYXZlcnNlciBGYWN0b3J5XG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLyoqXG4gKiBTdWJmbG93VHJhdmVyc2VyRmFjdG9yeSDigJQgQ3JlYXRlcyBhIEZsb3djaGFydFRyYXZlcnNlciBmb3Igc3ViZmxvdyBleGVjdXRpb24uXG4gKlxuICogSW5qZWN0ZWQgaW50byBTdWJmbG93RXhlY3V0b3IgdG8gYnJlYWsgdGhlIGNpcmN1bGFyIGRlcGVuZGVuY3k6XG4gKiBGbG93Y2hhcnRUcmF2ZXJzZXIg4oaSIFN1YmZsb3dFeGVjdXRvciDihpIgRmxvd2NoYXJ0VHJhdmVyc2VyLlxuICpcbiAqIFRoZSBmYWN0b3J5IGNhcHR1cmVzIHBhcmVudCB0cmF2ZXJzZXIgY29uZmlnIChzdGFnZU1hcCwgc2NvcGVGYWN0b3J5LCBuYXJyYXRpdmUsIGV0Yy4pXG4gKiBpbiBhIGNsb3N1cmUuIFN1YmZsb3dFeGVjdXRvciBjYWxscyBpdCB3aXRoIHN1YmZsb3ctc3BlY2lmaWMgb3ZlcnJpZGVzIChyb290LCBydW50aW1lLCBpbnB1dCkuXG4gKiBUaGUgcmV0dXJuZWQgdHJhdmVyc2VyIHVzZXMgdGhlIFNBTUUgNy1waGFzZSBhbGdvcml0aG0gYXMgdGhlIHRvcC1sZXZlbCB0cmF2ZXJzZXIsXG4gKiBzbyBkZWNpZGVycywgc2VsZWN0b3JzLCBsb29wcywgbGF6eSBzdWJmbG93cywgYW5kIGFib3J0IHNpZ25hbHMgYWxsIHdvcmsgaW5zaWRlIHN1YmZsb3dzLlxuICovXG5leHBvcnQgdHlwZSBTdWJmbG93VHJhdmVyc2VyRmFjdG9yeTxUT3V0ID0gYW55LCBUU2NvcGUgPSBhbnk+ID0gKG9wdGlvbnM6IHtcbiAgLyoqIFJvb3Qgbm9kZSBvZiB0aGUgc3ViZmxvdyAod2l0aCBpc1N1YmZsb3dSb290IHN0cmlwcGVkKS4gKi9cbiAgcm9vdDogU3RhZ2VOb2RlPFRPdXQsIFRTY29wZT47XG4gIC8qKiBJc29sYXRlZCBleGVjdXRpb24gcnVudGltZSBmb3IgdGhlIHN1YmZsb3cuICovXG4gIGV4ZWN1dGlvblJ1bnRpbWU6IElFeGVjdXRpb25SdW50aW1lO1xuICAvKiogTWFwcGVkIGlucHV0IGZyb20gcGFyZW50IHNjb3BlIChiZWNvbWVzIHJlYWRPbmx5Q29udGV4dCBmb3Igc3RhZ2VzKS4gKi9cbiAgcmVhZE9ubHlDb250ZXh0PzogdW5rbm93bjtcbiAgLyoqIFN1YmZsb3cgaWRlbnRpZmllciDigJQgdXNlZCBhcyBicmFuY2hQYXRoIGZvciBuYXJyYXRpdmUgY29udGV4dC4gKi9cbiAgc3ViZmxvd0lkPzogc3RyaW5nO1xufSkgPT4gU3ViZmxvd1RyYXZlcnNlckhhbmRsZTxUT3V0LCBUU2NvcGU+O1xuXG4vKipcbiAqIEhhbmRsZSByZXR1cm5lZCBieSBTdWJmbG93VHJhdmVyc2VyRmFjdG9yeS5cbiAqIFByb3ZpZGVzIGV4ZWN1dGUoKSArIGFjY2VzcyB0byBuZXN0ZWQgc3ViZmxvdyByZXN1bHRzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFN1YmZsb3dUcmF2ZXJzZXJIYW5kbGU8VE91dCA9IGFueSwgVFNjb3BlID0gYW55PiB7XG4gIC8qKiBFeGVjdXRlIHRoZSBzdWJmbG93J3MgZ3JhcGggdXNpbmcgdGhlIGZ1bGwgNy1waGFzZSB0cmF2ZXJzYWwgYWxnb3JpdGhtLiAqL1xuICBleGVjdXRlKCk6IFByb21pc2U8VHJhdmVyc2FsUmVzdWx0PjtcbiAgLyoqIENvbGxlY3QgbmVzdGVkIHN1YmZsb3cgcmVzdWx0cyAoZnJvbSBzdWJmbG93cyBtb3VudGVkIGluc2lkZSB0aGlzIHN1YmZsb3cpLiAqL1xuICBnZXRTdWJmbG93UmVzdWx0cygpOiBNYXA8c3RyaW5nLCBTdWJmbG93UmVzdWx0Pjtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBFeGVjdXRpb24gUnVudGltZSBJbnRlcmZhY2Vcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vKipcbiAqIElFeGVjdXRpb25SdW50aW1lIOKAlCBJbnRlcmZhY2UgZm9yIHRoZSBydW50aW1lIGVudmlyb25tZW50LlxuICpcbiAqIERlZmluZXMgdGhlIGNvbnRyYWN0IHRoYXQgZW5naW5lIGhhbmRsZXJzIG5lZWQgZnJvbSB0aGUgcnVubmVyIGxheWVyLFxuICogYXZvaWRpbmcgY2lyY3VsYXIgaW1wb3J0cyBiZXR3ZWVuIGVuZ2luZS8gYW5kIHJ1bm5lci8uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSUV4ZWN1dGlvblJ1bnRpbWUge1xuICBnbG9iYWxTdG9yZTogeyBnZXRTdGF0ZSgpOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB9O1xuICByb290U3RhZ2VDb250ZXh0OiBTdGFnZUNvbnRleHQ7XG4gIGV4ZWN1dGlvbkhpc3Rvcnk6IHsgbGlzdCgpOiB1bmtub3duW10gfTtcbiAgZ2V0U25hcHNob3QoKToge1xuICAgIHNoYXJlZFN0YXRlOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICBleGVjdXRpb25UcmVlOiB1bmtub3duO1xuICAgIGNvbW1pdExvZzogdW5rbm93bltdO1xuICAgIHN1YmZsb3dSZXN1bHRzPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgcmVjb3JkZXJzPzogQXJyYXk8eyBpZDogc3RyaW5nOyBuYW1lOiBzdHJpbmc7IGRhdGE6IHVua25vd24gfT47XG4gIH07XG4gIHNldFJvb3RPYmplY3QocGF0aDogc3RyaW5nW10sIGtleTogc3RyaW5nLCB2YWx1ZTogdW5rbm93bik6IHZvaWQ7XG4gIGdldFBpcGVsaW5lcygpOiBzdHJpbmdbXTtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBFeGVjdXRpb24gRW52aXJvbm1lbnQg4oCUIHJlYWQtb25seSwgcHJvcGFnYXRlcyB0aHJvdWdoIG5lc3RlZCBleGVjdXRvcnNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vKipcbiAqIEV4ZWN1dGlvbkVudiDigJQgaW5mcmFzdHJ1Y3R1cmUgdmFsdWVzIHRoYXQgcHJvcGFnYXRlIHRocm91Z2ggbmVzdGVkIGV4ZWN1dG9ycy5cbiAqXG4gKiBMaWtlIGBwcm9jZXNzLmVudmAgZm9yIGZsb3djaGFydHM6IHJlYWQtb25seSwgaW5oZXJpdGVkIGJ5IGNoaWxkIGV4ZWN1dG9ycyxcbiAqIGluZnJhc3RydWN0dXJlLW9ubHkgKG5vdCBidXNpbmVzcyBsb2dpYykuXG4gKlxuICogTGl0bXVzIHRlc3Q6IENyZWF0ZWQgZXh0ZXJuYWwgdG8gdGhlIGZsb3djaGFydCArIHBhc3NlZCBpbiBmb3IgZXhlY3V0aW9uID0gZW52LlxuICogQnVzaW5lc3MgY29uZmlnIGZvciBhIHNwZWNpZmljIGZsb3djaGFydCA9IGFyZ3MgKGdldEFyZ3MoKSkuXG4gKlxuICogSW50ZW50aW9uYWxseSBhIGNsb3NlZCB0eXBlIOKAlCBub3QgZXh0ZW5zaWJsZSB0byBwcmV2ZW50IGNvdXBsaW5nIGJldHdlZW5cbiAqIHBhcmVudCBhbmQgY2hpbGQgZmxvd2NoYXJ0cy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFeGVjdXRpb25FbnYge1xuICAvKiogQWJvcnRTaWduYWwgZm9yIGNvb3BlcmF0aXZlIGNhbmNlbGxhdGlvbiBhY3Jvc3MgbmVzdGVkIGV4ZWN1dG9ycy4gKi9cbiAgcmVhZG9ubHkgc2lnbmFsPzogQWJvcnRTaWduYWw7XG4gIC8qKiBUaW1lb3V0IGJ1ZGdldCBpbiBtaWxsaXNlY29uZHMuICovXG4gIHJlYWRvbmx5IHRpbWVvdXRNcz86IG51bWJlcjtcbiAgLyoqIFRyYWNlIGlkZW50aWZpZXIgZm9yIGRpc3RyaWJ1dGVkIHRyYWNpbmcgLyBvYnNlcnZhYmlsaXR5LiAqL1xuICByZWFkb25seSB0cmFjZUlkPzogc3RyaW5nO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIEhhbmRsZXIgRGVwZW5kZW5jaWVzIChESSBiYWcpIOKAlCB3YXMgUGlwZWxpbmVDb250ZXh0XG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLyoqXG4gKiBIYW5kbGVyRGVwcyDigJQgRGVwZW5kZW5jeSBpbmplY3Rpb24gYmFnIHBhc3NlZCB0byBhbGwgaGFuZGxlciBtb2R1bGVzLlxuICpcbiAqIFByb3ZpZGVzIHNoYXJlZCBzdGF0ZSAoc3RhZ2VNYXAsIHJ1bnRpbWUsIHNjb3BlRmFjdG9yeSwgZXRjLikgd2l0aG91dFxuICogaGFuZGxlcnMgbmVlZGluZyB0byBpbXBvcnQgdGhlIHRyYXZlcnNlciBkaXJlY3RseS4gQXZvaWRzIGNpcmN1bGFyIGRlcHMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSGFuZGxlckRlcHM8VE91dCA9IGFueSwgVFNjb3BlID0gYW55PiB7XG4gIHN0YWdlTWFwOiBNYXA8c3RyaW5nLCBTdGFnZUZ1bmN0aW9uPFRPdXQsIFRTY29wZT4+O1xuICByb290OiBTdGFnZU5vZGU8VE91dCwgVFNjb3BlPjtcbiAgZXhlY3V0aW9uUnVudGltZTogSUV4ZWN1dGlvblJ1bnRpbWU7XG4gIHNjb3BlRmFjdG9yeTogU2NvcGVGYWN0b3J5PFRTY29wZT47XG4gIHN1YmZsb3dzPzogUmVjb3JkPHN0cmluZywgeyByb290OiBTdGFnZU5vZGU8VE91dCwgVFNjb3BlPiB9PjtcbiAgdGhyb3R0bGluZ0Vycm9yQ2hlY2tlcj86IChlcnJvcjogdW5rbm93bikgPT4gYm9vbGVhbjtcbiAgc3RyZWFtSGFuZGxlcnM/OiBTdHJlYW1IYW5kbGVycztcbiAgc2NvcGVQcm90ZWN0aW9uTW9kZTogU2NvcGVQcm90ZWN0aW9uTW9kZTtcbiAgcmVhZE9ubHlDb250ZXh0PzogdW5rbm93bjtcbiAgLyoqIEV4ZWN1dGlvbiBlbnZpcm9ubWVudCDigJQgcHJvcGFnYXRlcyB0byBzdWJmbG93cyBhdXRvbWF0aWNhbGx5LiAqL1xuICBleGVjdXRpb25FbnY/OiBFeGVjdXRpb25FbnY7XG4gIG5hcnJhdGl2ZUdlbmVyYXRvcjogSUNvbnRyb2xGbG93TmFycmF0aXZlO1xuICBsb2dnZXI6IElMb2dnZXI7XG4gIHNpZ25hbD86IEFib3J0U2lnbmFsO1xufVxuXG4vKiogT3B0aW9ucyBmb3IgRmxvd0NoYXJ0RXhlY3V0b3IucnVuKCkuICovXG5leHBvcnQgaW50ZXJmYWNlIFJ1bk9wdGlvbnMge1xuICAvKiogQWJvcnRTaWduYWwgZm9yIGNvb3BlcmF0aXZlIGNhbmNlbGxhdGlvbi4gKi9cbiAgc2lnbmFsPzogQWJvcnRTaWduYWw7XG4gIC8qKiBUaW1lb3V0IGluIG1pbGxpc2Vjb25kcy4gQ3JlYXRlcyBhbiBpbnRlcm5hbCBBYm9ydENvbnRyb2xsZXIuICovXG4gIHRpbWVvdXRNcz86IG51bWJlcjtcbiAgLyoqXG4gICAqIFJ1bnRpbWUgaW5wdXQgZGF0YSBmb3IgdGhlIHBpcGVsaW5lLlxuICAgKiBCZWNvbWVzIHRoZSByZWFkT25seUNvbnRleHQgYWNjZXNzaWJsZSB2aWEgYHNjb3BlLmdldEFyZ3MoKWAuXG4gICAqIFN0YWdlcyBjYW5ub3Qgb3ZlcndyaXRlIHRoZXNlIGtleXMgd2l0aCBgc2V0VmFsdWUoKWAuXG4gICAqL1xuICBpbnB1dD86IHVua25vd247XG4gIC8qKlxuICAgKiBFeGVjdXRpb24gZW52aXJvbm1lbnQg4oCUIHJlYWQtb25seSBpbmZyYXN0cnVjdHVyZSB2YWx1ZXMgdGhhdCBwcm9wYWdhdGVcbiAgICogdGhyb3VnaCBuZXN0ZWQgZXhlY3V0b3JzIChsaWtlIGBwcm9jZXNzLmVudmAgZm9yIGZsb3djaGFydHMpLlxuICAgKiBBY2Nlc3NpYmxlIHZpYSBgc2NvcGUuZ2V0RW52KClgLiBJbmhlcml0ZWQgYnkgc3ViZmxvd3MgYXV0b21hdGljYWxseS5cbiAgICovXG4gIGVudj86IEV4ZWN1dGlvbkVudjtcbiAgLyoqXG4gICAqIE92ZXJyaWRlIHRoZSBtYXhpbXVtIHJlY3Vyc2l2ZSBgZXhlY3V0ZU5vZGVgIGRlcHRoIGZvciB0aGlzIHJ1bi5cbiAgICogRGVmYXVsdHMgdG8gYEZsb3djaGFydFRyYXZlcnNlci5NQVhfRVhFQ1VURV9ERVBUSGAgKDUwMCkuXG4gICAqIFVzZWZ1bCB3aGVuIGRlZXBseSBuZXN0ZWQgc3ViZmxvd3Mgb3IgbG9uZyBjaGFpbnMgbmVlZCBtb3JlIGhlYWRyb29tLlxuICAgKiBNdXN0IGJlID49IDEuXG4gICAqL1xuICBtYXhEZXB0aD86IG51bWJlcjtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBGbG93IENvbnRyb2wgTmFycmF0aXZlIOKAlCBjYW5vbmljYWwgZGVmaW5pdGlvbnMgbGl2ZSBpbiBtZW1vcnkvdHlwZXMudHNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5leHBvcnQgdHlwZSB7IEZsb3dDb250cm9sVHlwZSwgRmxvd01lc3NhZ2UgfTtcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBUcmF2ZXJzYWwgRXh0cmFjdG9yXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuZXhwb3J0IGludGVyZmFjZSBSdW50aW1lU3RydWN0dXJlTWV0YWRhdGEge1xuICB0eXBlOiAnc3RhZ2UnIHwgJ2RlY2lkZXInIHwgJ3NlbGVjdG9yJyB8ICdmb3JrJyB8ICdzdHJlYW1pbmcnIHwgJ3N1YmZsb3cnIHwgJ2xvb3AnO1xuICBzdWJmbG93SWQ/OiBzdHJpbmc7XG4gIGlzU3ViZmxvd1Jvb3Q/OiBib29sZWFuO1xuICBzdWJmbG93TmFtZT86IHN0cmluZztcbiAgaXNQYXJhbGxlbENoaWxkPzogYm9vbGVhbjtcbiAgcGFyYWxsZWxHcm91cElkPzogc3RyaW5nO1xuICBsb29wVGFyZ2V0Pzogc3RyaW5nO1xuICBpc0R5bmFtaWM/OiBib29sZWFuO1xuICBpc0xvb3BSZWZlcmVuY2U/OiBib29sZWFuO1xuICBzdHJlYW1JZD86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTdGFnZVNuYXBzaG90PFRPdXQgPSBhbnksIFRTY29wZSA9IGFueT4ge1xuICBub2RlOiBTdGFnZU5vZGU8VE91dCwgVFNjb3BlPjtcbiAgY29udGV4dDogU3RhZ2VDb250ZXh0O1xuICBzdGVwTnVtYmVyOiBudW1iZXI7XG4gIHN0cnVjdHVyZU1ldGFkYXRhOiBSdW50aW1lU3RydWN0dXJlTWV0YWRhdGE7XG4gIHNjb3BlU3RhdGU/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgZGVidWdJbmZvPzoge1xuICAgIGxvZ3M6IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgIGVycm9yczogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgbWV0cmljczogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgZXZhbHM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgIGZsb3dNZXNzYWdlcz86IEZsb3dNZXNzYWdlW107XG4gIH07XG4gIHN0YWdlT3V0cHV0PzogdW5rbm93bjtcbiAgZXJyb3JJbmZvPzogeyB0eXBlOiBzdHJpbmc7IG1lc3NhZ2U6IHN0cmluZyB9O1xuICBoaXN0b3J5SW5kZXg/OiBudW1iZXI7XG59XG5cbmV4cG9ydCB0eXBlIFRyYXZlcnNhbEV4dHJhY3RvcjxUUmVzdWx0ID0gdW5rbm93bj4gPSAoc25hcHNob3Q6IFN0YWdlU25hcHNob3QpID0+IFRSZXN1bHQgfCB1bmRlZmluZWQgfCBudWxsO1xuXG5leHBvcnQgaW50ZXJmYWNlIEV4dHJhY3RvckVycm9yIHtcbiAgc3RhZ2VQYXRoOiBzdHJpbmc7XG4gIG1lc3NhZ2U6IHN0cmluZztcbiAgZXJyb3I6IHVua25vd247XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gTm9kZSBSZXN1bHRcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5leHBvcnQgdHlwZSBOb2RlUmVzdWx0VHlwZSA9IHtcbiAgaWQ6IHN0cmluZztcbiAgcmVzdWx0OiB1bmtub3duO1xuICBpc0Vycm9yPzogYm9vbGVhbjtcbn07XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gRXhlY3V0aW9uIFJlc3BvbnNlXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuZXhwb3J0IHR5cGUgQnJhbmNoUmVzdWx0ID0ge1xuICByZXN1bHQ6IHN0cmluZyB8IEVycm9yO1xuICBpc0Vycm9yOiBib29sZWFuO1xufTtcblxuZXhwb3J0IHR5cGUgQnJhbmNoUmVzdWx0cyA9IHsgW2JyYW5jaElkOiBzdHJpbmddOiBCcmFuY2hSZXN1bHQgfTtcbmV4cG9ydCB0eXBlIFRyYXZlcnNhbFJlc3VsdCA9IEJyYW5jaFJlc3VsdHMgfCBzdHJpbmcgfCBFcnJvcjtcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBTZXJpYWxpemVkIFBpcGVsaW5lIFN0cnVjdHVyZSAoZm9yIHZpc3VhbGl6YXRpb24pXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuZXhwb3J0IGludGVyZmFjZSBTZXJpYWxpemVkUGlwZWxpbmVOb2RlIHtcbiAgbmFtZTogc3RyaW5nO1xuICBpZDogc3RyaW5nO1xuICB0eXBlPzpcbiAgICB8ICdzdGFnZSdcbiAgICB8ICdkZWNpZGVyJ1xuICAgIHwgJ3NlbGVjdG9yJ1xuICAgIHwgJ2ZvcmsnXG4gICAgfCAnc3RyZWFtaW5nJ1xuICAgIHwgJ3N1YmZsb3cnXG4gICAgfCAnbG9vcCdcbiAgICB8ICd1c2VyJ1xuICAgIHwgJ3Rvb2wnXG4gICAgfCAnZnVuY3Rpb24nXG4gICAgfCAnc2VxdWVuY2UnO1xuICBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgY2hpbGRyZW4/OiBTZXJpYWxpemVkUGlwZWxpbmVOb2RlW107XG4gIG5leHQ/OiBTZXJpYWxpemVkUGlwZWxpbmVOb2RlO1xuICBicmFuY2hlcz86IFJlY29yZDxzdHJpbmcsIFNlcmlhbGl6ZWRQaXBlbGluZU5vZGU+O1xuICBoYXNEZWNpZGVyPzogYm9vbGVhbjtcbiAgaGFzU2VsZWN0b3I/OiBib29sZWFuO1xuICBoYXNTdWJ0cmVlPzogYm9vbGVhbjtcbiAgaXNTdHJlYW1pbmc/OiBib29sZWFuO1xuICBzdHJlYW1JZD86IHN0cmluZztcbiAgaXNTdWJmbG93Um9vdD86IGJvb2xlYW47XG4gIHN1YmZsb3dJZD86IHN0cmluZztcbiAgc3ViZmxvd05hbWU/OiBzdHJpbmc7XG4gIGxvb3BUYXJnZXQ/OiBzdHJpbmc7XG4gIGlzTG9vcFJlZmVyZW5jZT86IGJvb2xlYW47XG4gIGlzUGFyYWxsZWxDaGlsZD86IGJvb2xlYW47XG4gIHBhcmFsbGVsR3JvdXBJZD86IHN0cmluZztcbiAgaXNEeW5hbWljPzogYm9vbGVhbjtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBGbG93Q2hhcnQgKGNvbXBpbGVkIG91dHB1dCBvZiBGbG93Q2hhcnRCdWlsZGVyKVxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmV4cG9ydCB0eXBlIEZsb3dDaGFydDxUT3V0ID0gYW55LCBUU2NvcGUgPSBhbnk+ID0ge1xuICByb290OiBTdGFnZU5vZGU8VE91dCwgVFNjb3BlPjtcbiAgc3RhZ2VNYXA6IE1hcDxzdHJpbmcsIFN0YWdlRnVuY3Rpb248VE91dCwgVFNjb3BlPj47XG4gIGV4dHJhY3Rvcj86IFRyYXZlcnNhbEV4dHJhY3RvcjtcbiAgc3ViZmxvd3M/OiBSZWNvcmQ8c3RyaW5nLCB7IHJvb3Q6IFN0YWdlTm9kZTxUT3V0LCBUU2NvcGU+IH0+O1xuICBlbnJpY2hTbmFwc2hvdHM/OiBib29sZWFuO1xuICBlbmFibGVOYXJyYXRpdmU/OiBib29sZWFuO1xuICBsb2dnZXI/OiBJTG9nZ2VyO1xuICBidWlsZFRpbWVTdHJ1Y3R1cmU/OiBTZXJpYWxpemVkUGlwZWxpbmVTdHJ1Y3R1cmU7XG4gIC8qKiBJbnB1dCBzY2hlbWEgKFpvZCBvciBKU09OIFNjaGVtYSkg4oCUIHVzZWQgZm9yIHJ1bnRpbWUgaW5wdXQgdmFsaWRhdGlvbi4gKi9cbiAgaW5wdXRTY2hlbWE/OiB1bmtub3duO1xuICAvKiogU2NvcGUgZmFjdG9yeSDigJQgYXV0by1lbWJlZGRlZCBieSBmbG93Q2hhcnQ8VD4oKS4gRXhlY3V0b3IgcmVhZHMgdGhpcyBpZiBubyBmYWN0b3J5IHBhcmFtLiAqL1xuICBzY29wZUZhY3Rvcnk/OiBTY29wZUZhY3Rvcnk8VFNjb3BlPjtcbn07XG5cbi8qKiBBbGlhcyBmb3IgU2VyaWFsaXplZFBpcGVsaW5lTm9kZSB1c2VkIGFzIGZ1bGwgc3RydWN0dXJlICovXG5leHBvcnQgdHlwZSBTZXJpYWxpemVkUGlwZWxpbmVTdHJ1Y3R1cmUgPSBTZXJpYWxpemVkUGlwZWxpbmVOb2RlICYge1xuICBicmFuY2hJZHM/OiBzdHJpbmdbXTtcbiAgc3ViZmxvd1N0cnVjdHVyZT86IFNlcmlhbGl6ZWRQaXBlbGluZVN0cnVjdHVyZTtcbiAgaXRlcmF0aW9uQ291bnQ/OiBudW1iZXI7XG59O1xuIl19
17
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL2VuZ2luZS90eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7R0FLRztBQWFILE9BQU8sRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLFdBQVcsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBZTlFLG9DQUFvQztBQUNwQyx3REFBd0Q7QUFDeEQsTUFBTSxDQUFDLE1BQU0sYUFBYSxHQUFZO0lBQ3BDLElBQUksRUFBRSxDQUFDLE9BQWEsRUFBRSxHQUFHLElBQVcsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsR0FBRyxJQUFJLENBQUM7SUFDdkUsR0FBRyxFQUFFLENBQUMsT0FBYSxFQUFFLEdBQUcsSUFBVyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxHQUFHLElBQUksQ0FBQztJQUNyRSxLQUFLLEVBQUUsQ0FBQyxPQUFhLEVBQUUsR0FBRyxJQUFXLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLEdBQUcsSUFBSSxDQUFDO0lBQ3pFLEtBQUssRUFBRSxDQUFDLE9BQWEsRUFBRSxHQUFHLElBQVcsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsR0FBRyxJQUFJLENBQUM7SUFDekUsSUFBSSxFQUFFLENBQUMsT0FBYSxFQUFFLEdBQUcsSUFBVyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxHQUFHLElBQUksQ0FBQztDQUN4RSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiB0eXBlcy50cyDigJQgQWxsIHR5cGUgZGVmaW5pdGlvbnMgZm9yIHRoZSBlbmdpbmUgbGlicmFyeS5cbiAqXG4gKiBDZW50cmFsaXplcyB0eXBlIGRlZmluaXRpb25zIHRvIGF2b2lkIGNpcmN1bGFyIGRlcGVuZGVuY2llcy5cbiAqIEV2ZXJ5IGhhbmRsZXIgcmVjZWl2ZXMgSGFuZGxlckRlcHMgKHRoZSBESSBiYWcpIGluc3RlYWQgb2YgaW1wb3J0aW5nIHRoZSB0cmF2ZXJzZXIuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBTdGFnZUNvbnRleHQgfSBmcm9tICcuLi9tZW1vcnkvU3RhZ2VDb250ZXh0LmpzJztcbmltcG9ydCB0eXBlIHsgRmxvd0NvbnRyb2xUeXBlLCBGbG93TWVzc2FnZSB9IGZyb20gJy4uL21lbW9yeS90eXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7IFNjb3BlUHJvdGVjdGlvbk1vZGUgfSBmcm9tICcuLi9zY29wZS9wcm90ZWN0aW9uL3R5cGVzLmpzJztcbmltcG9ydCB0eXBlIHsgRGVjaWRlciwgU2VsZWN0b3IsIFN0YWdlTm9kZSB9IGZyb20gJy4vZ3JhcGgvU3RhZ2VOb2RlLmpzJztcbmltcG9ydCB0eXBlIHsgSUNvbnRyb2xGbG93TmFycmF0aXZlIH0gZnJvbSAnLi9uYXJyYXRpdmUvdHlwZXMuanMnO1xuXG4vLyBSZS1leHBvcnQgU3RhZ2VOb2RlIHR5cGVzIGZvciBjb252ZW5pZW5jZVxuZXhwb3J0IHR5cGUgeyBEZWNpZGVyLCBTZWxlY3RvciwgU3RhZ2VOb2RlIH0gZnJvbSAnLi9ncmFwaC9TdGFnZU5vZGUuanMnO1xuXG4vLyBSZS1leHBvcnQgcGF1c2UgdHlwZXMgZnJvbSBwYXVzZS8gbGlicmFyeVxuZXhwb3J0IHR5cGUgeyBGbG93Y2hhcnRDaGVja3BvaW50LCBQYXVzYWJsZUhhbmRsZXIsIFBhdXNlUmVzdWx0IH0gZnJvbSAnLi4vcGF1c2UvaW5kZXguanMnO1xuZXhwb3J0IHsgaXNQYXVzZVJlc3VsdCwgaXNQYXVzZVNpZ25hbCwgUGF1c2VTaWduYWwgfSBmcm9tICcuLi9wYXVzZS9pbmRleC5qcyc7XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gTG9nZ2VyXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLyoqIE1pbmltYWwgbG9nZ2luZyBjb250cmFjdC4gTWlycm9ycyBDb25zb2xlIEFQSSBzdWJzZXQuICovXG5leHBvcnQgaW50ZXJmYWNlIElMb2dnZXIge1xuICBpbmZvKG1lc3NhZ2U/OiBhbnksIC4uLm9wdGlvbmFsUGFyYW1zOiBhbnlbXSk6IHZvaWQ7XG4gIGxvZyhtZXNzYWdlPzogYW55LCAuLi5vcHRpb25hbFBhcmFtczogYW55W10pOiB2b2lkO1xuICBkZWJ1ZyhtZXNzYWdlPzogYW55LCAuLi5vcHRpb25hbFBhcmFtczogYW55W10pOiB2b2lkO1xuICBlcnJvcihtZXNzYWdlPzogYW55LCAuLi5vcHRpb25hbFBhcmFtczogYW55W10pOiB2b2lkO1xuICB3YXJuKG1lc3NhZ2U/OiBhbnksIC4uLm9wdGlvbmFsUGFyYW1zOiBhbnlbXSk6IHZvaWQ7XG59XG5cbi8qKiBEZWZhdWx0IGNvbnNvbGUtYmFzZWQgbG9nZ2VyLiAqL1xuLyogaXN0YW5idWwgaWdub3JlIG5leHQgLS0gdHJpdmlhbCBjb25zb2xlIGRlbGVnYXRpb24gKi9cbmV4cG9ydCBjb25zdCBkZWZhdWx0TG9nZ2VyOiBJTG9nZ2VyID0ge1xuICBpbmZvOiAobWVzc2FnZT86IGFueSwgLi4uYXJnczogYW55W10pID0+IGNvbnNvbGUuaW5mbyhtZXNzYWdlLCAuLi5hcmdzKSxcbiAgbG9nOiAobWVzc2FnZT86IGFueSwgLi4uYXJnczogYW55W10pID0+IGNvbnNvbGUubG9nKG1lc3NhZ2UsIC4uLmFyZ3MpLFxuICBkZWJ1ZzogKG1lc3NhZ2U/OiBhbnksIC4uLmFyZ3M6IGFueVtdKSA9PiBjb25zb2xlLmRlYnVnKG1lc3NhZ2UsIC4uLmFyZ3MpLFxuICBlcnJvcjogKG1lc3NhZ2U/OiBhbnksIC4uLmFyZ3M6IGFueVtdKSA9PiBjb25zb2xlLmVycm9yKG1lc3NhZ2UsIC4uLmFyZ3MpLFxuICB3YXJuOiAobWVzc2FnZT86IGFueSwgLi4uYXJnczogYW55W10pID0+IGNvbnNvbGUud2FybihtZXNzYWdlLCAuLi5hcmdzKSxcbn07XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gU3RhZ2UgRnVuY3Rpb25cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vKiogQ2FsbGJhY2sgdGhhdCByZWNlaXZlcyB0b2tlbnMgZHVyaW5nIHN0cmVhbWluZy4gKi9cbmV4cG9ydCB0eXBlIFN0cmVhbUNhbGxiYWNrID0gKHRva2VuOiBzdHJpbmcpID0+IHZvaWQ7XG5cbi8qKlxuICogVGhlIGZ1bmN0aW9uIHNpZ25hdHVyZSBmb3Igc3RhZ2UgaGFuZGxlcnMuXG4gKiAtIFRPdXQ6IHJldHVybiB0eXBlIHByb2R1Y2VkIGJ5IHRoZSBzdGFnZVxuICogLSBUU2NvcGU6IHRoZSBzY29wZSBvYmplY3QgcGFzc2VkIHRvIHRoZSBzdGFnZVxuICogLSBPcHRpb25hbCAzcmQgcGFyYW1ldGVyIGBzdHJlYW1DYWxsYmFja2AgaW5qZWN0ZWQgZm9yIHN0cmVhbWluZyBzdGFnZXMuXG4gKi9cbmV4cG9ydCB0eXBlIFN0YWdlRnVuY3Rpb248VE91dCA9IGFueSwgVFNjb3BlID0gYW55PiA9IChcbiAgc2NvcGU6IFRTY29wZSxcbiAgYnJlYWtQaXBlbGluZTogKCkgPT4gdm9pZCxcbiAgc3RyZWFtQ2FsbGJhY2s/OiBTdHJlYW1DYWxsYmFjayxcbikgPT4gUHJvbWlzZTxUT3V0IHwgdm9pZD4gfCBUT3V0IHwgdm9pZDtcblxuLyoqIEZhY3RvcnkgdGhhdCBjcmVhdGVzIGEgc2NvcGUgaW5zdGFuY2UgZm9yIGVhY2ggc3RhZ2UuICovXG5leHBvcnQgdHlwZSBTY29wZUZhY3Rvcnk8VFNjb3BlID0gYW55PiA9IChcbiAgY29udGV4dDogU3RhZ2VDb250ZXh0LFxuICBzdGFnZU5hbWU6IHN0cmluZyxcbiAgcmVhZE9ubHlDb250ZXh0PzogdW5rbm93bixcbiAgZXhlY3V0aW9uRW52PzogRXhlY3V0aW9uRW52LFxuKSA9PiBUU2NvcGU7XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gU3RyZWFtaW5nXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuZXhwb3J0IHR5cGUgU3RyZWFtVG9rZW5IYW5kbGVyID0gKHN0cmVhbUlkOiBzdHJpbmcsIHRva2VuOiBzdHJpbmcpID0+IHZvaWQ7XG5leHBvcnQgdHlwZSBTdHJlYW1MaWZlY3ljbGVIYW5kbGVyID0gKHN0cmVhbUlkOiBzdHJpbmcsIGZ1bGxUZXh0Pzogc3RyaW5nKSA9PiB2b2lkO1xuXG5leHBvcnQgaW50ZXJmYWNlIFN0cmVhbUhhbmRsZXJzIHtcbiAgb25Ub2tlbj86IFN0cmVhbVRva2VuSGFuZGxlcjtcbiAgb25TdGFydD86IFN0cmVhbUxpZmVjeWNsZUhhbmRsZXI7XG4gIG9uRW5kPzogU3RyZWFtTGlmZWN5Y2xlSGFuZGxlcjtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBTdWJmbG93XG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuZXhwb3J0IGludGVyZmFjZSBTdWJmbG93TW91bnRPcHRpb25zPFRQYXJlbnRTY29wZSA9IGFueSwgVFN1YmZsb3dJbnB1dCA9IGFueSwgVFN1YmZsb3dPdXRwdXQgPSBhbnk+IHtcbiAgaW5wdXRNYXBwZXI/OiAocGFyZW50U2NvcGU6IFRQYXJlbnRTY29wZSkgPT4gVFN1YmZsb3dJbnB1dDtcbiAgLyoqXG4gICAqIE1hcHMgc3ViZmxvdyBvdXRwdXQgYmFjayBpbnRvIHBhcmVudCBzY29wZS5cbiAgICpcbiAgICogKipBcnJheSB2YWx1ZXMgYXJlIGNvbmNhdGVuYXRlZCwgbm90IHJlcGxhY2VkLioqIGBhcHBseU91dHB1dE1hcHBpbmdgIHVzZXNcbiAgICogYFsuLi5leGlzdGluZywgLi4udmFsdWVdYCBmb3IgYXJyYXlzLiBSZXR1cm4gb25seSB0aGUgKipkZWx0YSoqIChuZXcgaXRlbXMpXG4gICAqIGZvciBhcnJheSBrZXlzLCBvciB0aGUgcGFyZW50J3MgZXhpc3RpbmcgYXJyYXkgaXRlbXMgd2lsbCBiZSBkdXBsaWNhdGVkLlxuICAgKiBTY2FsYXIgdmFsdWVzIGFyZSByZXBsYWNlZCBub3JtYWxseS5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiAvLyBXUk9ORyDigJQgcmV0dXJucyBmdWxsIGFycmF5LCBwYXJlbnQgY29uY2F0cyDihpIgZHVwbGljYXRlc1xuICAgKiBvdXRwdXRNYXBwZXI6IChzZikgPT4gKHsgbWVzc2FnZXM6IHNmLmFsbE1lc3NhZ2VzIH0pXG4gICAqXG4gICAqIC8vIFJJR0hUIOKAlCByZXR1cm5zIG9ubHkgbmV3IGl0ZW1zIChkZWx0YSksIGNvbmNhdCBhcHBlbmRzIGNvcnJlY3RseVxuICAgKiBvdXRwdXRNYXBwZXI6IChzZikgPT4gKHsgbWVzc2FnZXM6IHNmLm5ld01lc3NhZ2VzIH0pXG4gICAqXG4gICAqIC8vIFNjYWxhcnMgYXJlIGZpbmUg4oCUIHJlcGxhY2VkLCBub3QgY29uY2F0ZW5hdGVkXG4gICAqIG91dHB1dE1hcHBlcjogKHNmKSA9PiAoeyBzdGF0dXM6IHNmLnJlc3VsdCwgY291bnQ6IHNmLnRvdGFsIH0pXG4gICAqIGBgYFxuICAgKi9cbiAgb3V0cHV0TWFwcGVyPzogKHN1YmZsb3dPdXRwdXQ6IFRTdWJmbG93T3V0cHV0LCBwYXJlbnRTY29wZTogVFBhcmVudFNjb3BlKSA9PiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTdWJmbG93UmVzdWx0IHtcbiAgc3ViZmxvd0lkOiBzdHJpbmc7XG4gIHN1YmZsb3dOYW1lOiBzdHJpbmc7XG4gIHRyZWVDb250ZXh0OiB7XG4gICAgZ2xvYmFsQ29udGV4dDogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgc3RhZ2VDb250ZXh0czogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgaGlzdG9yeTogdW5rbm93bltdO1xuICB9O1xuICBwYXJlbnRTdGFnZUlkOiBzdHJpbmc7XG4gIHBpcGVsaW5lU3RydWN0dXJlPzogdW5rbm93bjtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBTdWJmbG93IFRyYXZlcnNlciBGYWN0b3J5XG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLyoqXG4gKiBTdWJmbG93VHJhdmVyc2VyRmFjdG9yeSDigJQgQ3JlYXRlcyBhIEZsb3djaGFydFRyYXZlcnNlciBmb3Igc3ViZmxvdyBleGVjdXRpb24uXG4gKlxuICogSW5qZWN0ZWQgaW50byBTdWJmbG93RXhlY3V0b3IgdG8gYnJlYWsgdGhlIGNpcmN1bGFyIGRlcGVuZGVuY3k6XG4gKiBGbG93Y2hhcnRUcmF2ZXJzZXIg4oaSIFN1YmZsb3dFeGVjdXRvciDihpIgRmxvd2NoYXJ0VHJhdmVyc2VyLlxuICpcbiAqIFRoZSBmYWN0b3J5IGNhcHR1cmVzIHBhcmVudCB0cmF2ZXJzZXIgY29uZmlnIChzdGFnZU1hcCwgc2NvcGVGYWN0b3J5LCBuYXJyYXRpdmUsIGV0Yy4pXG4gKiBpbiBhIGNsb3N1cmUuIFN1YmZsb3dFeGVjdXRvciBjYWxscyBpdCB3aXRoIHN1YmZsb3ctc3BlY2lmaWMgb3ZlcnJpZGVzIChyb290LCBydW50aW1lLCBpbnB1dCkuXG4gKiBUaGUgcmV0dXJuZWQgdHJhdmVyc2VyIHVzZXMgdGhlIFNBTUUgNy1waGFzZSBhbGdvcml0aG0gYXMgdGhlIHRvcC1sZXZlbCB0cmF2ZXJzZXIsXG4gKiBzbyBkZWNpZGVycywgc2VsZWN0b3JzLCBsb29wcywgbGF6eSBzdWJmbG93cywgYW5kIGFib3J0IHNpZ25hbHMgYWxsIHdvcmsgaW5zaWRlIHN1YmZsb3dzLlxuICovXG5leHBvcnQgdHlwZSBTdWJmbG93VHJhdmVyc2VyRmFjdG9yeTxUT3V0ID0gYW55LCBUU2NvcGUgPSBhbnk+ID0gKG9wdGlvbnM6IHtcbiAgLyoqIFJvb3Qgbm9kZSBvZiB0aGUgc3ViZmxvdyAod2l0aCBpc1N1YmZsb3dSb290IHN0cmlwcGVkKS4gKi9cbiAgcm9vdDogU3RhZ2VOb2RlPFRPdXQsIFRTY29wZT47XG4gIC8qKiBJc29sYXRlZCBleGVjdXRpb24gcnVudGltZSBmb3IgdGhlIHN1YmZsb3cuICovXG4gIGV4ZWN1dGlvblJ1bnRpbWU6IElFeGVjdXRpb25SdW50aW1lO1xuICAvKiogTWFwcGVkIGlucHV0IGZyb20gcGFyZW50IHNjb3BlIChiZWNvbWVzIHJlYWRPbmx5Q29udGV4dCBmb3Igc3RhZ2VzKS4gKi9cbiAgcmVhZE9ubHlDb250ZXh0PzogdW5rbm93bjtcbiAgLyoqIFN1YmZsb3cgaWRlbnRpZmllciDigJQgdXNlZCBhcyBicmFuY2hQYXRoIGZvciBuYXJyYXRpdmUgY29udGV4dC4gKi9cbiAgc3ViZmxvd0lkPzogc3RyaW5nO1xufSkgPT4gU3ViZmxvd1RyYXZlcnNlckhhbmRsZTxUT3V0LCBUU2NvcGU+O1xuXG4vKipcbiAqIEhhbmRsZSByZXR1cm5lZCBieSBTdWJmbG93VHJhdmVyc2VyRmFjdG9yeS5cbiAqIFByb3ZpZGVzIGV4ZWN1dGUoKSArIGFjY2VzcyB0byBuZXN0ZWQgc3ViZmxvdyByZXN1bHRzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFN1YmZsb3dUcmF2ZXJzZXJIYW5kbGU8VE91dCA9IGFueSwgVFNjb3BlID0gYW55PiB7XG4gIC8qKiBFeGVjdXRlIHRoZSBzdWJmbG93J3MgZ3JhcGggdXNpbmcgdGhlIGZ1bGwgNy1waGFzZSB0cmF2ZXJzYWwgYWxnb3JpdGhtLiAqL1xuICBleGVjdXRlKCk6IFByb21pc2U8VHJhdmVyc2FsUmVzdWx0PjtcbiAgLyoqIENvbGxlY3QgbmVzdGVkIHN1YmZsb3cgcmVzdWx0cyAoZnJvbSBzdWJmbG93cyBtb3VudGVkIGluc2lkZSB0aGlzIHN1YmZsb3cpLiAqL1xuICBnZXRTdWJmbG93UmVzdWx0cygpOiBNYXA8c3RyaW5nLCBTdWJmbG93UmVzdWx0Pjtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBFeGVjdXRpb24gUnVudGltZSBJbnRlcmZhY2Vcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vKipcbiAqIElFeGVjdXRpb25SdW50aW1lIOKAlCBJbnRlcmZhY2UgZm9yIHRoZSBydW50aW1lIGVudmlyb25tZW50LlxuICpcbiAqIERlZmluZXMgdGhlIGNvbnRyYWN0IHRoYXQgZW5naW5lIGhhbmRsZXJzIG5lZWQgZnJvbSB0aGUgcnVubmVyIGxheWVyLFxuICogYXZvaWRpbmcgY2lyY3VsYXIgaW1wb3J0cyBiZXR3ZWVuIGVuZ2luZS8gYW5kIHJ1bm5lci8uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSUV4ZWN1dGlvblJ1bnRpbWUge1xuICBnbG9iYWxTdG9yZTogeyBnZXRTdGF0ZSgpOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB9O1xuICByb290U3RhZ2VDb250ZXh0OiBTdGFnZUNvbnRleHQ7XG4gIGV4ZWN1dGlvbkhpc3Rvcnk6IHsgbGlzdCgpOiB1bmtub3duW10gfTtcbiAgZ2V0U25hcHNob3QoKToge1xuICAgIHNoYXJlZFN0YXRlOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICBleGVjdXRpb25UcmVlOiB1bmtub3duO1xuICAgIGNvbW1pdExvZzogdW5rbm93bltdO1xuICAgIHN1YmZsb3dSZXN1bHRzPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgcmVjb3JkZXJzPzogQXJyYXk8eyBpZDogc3RyaW5nOyBuYW1lOiBzdHJpbmc7IGRhdGE6IHVua25vd24gfT47XG4gIH07XG4gIHNldFJvb3RPYmplY3QocGF0aDogc3RyaW5nW10sIGtleTogc3RyaW5nLCB2YWx1ZTogdW5rbm93bik6IHZvaWQ7XG4gIGdldFBpcGVsaW5lcygpOiBzdHJpbmdbXTtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBFeGVjdXRpb24gRW52aXJvbm1lbnQg4oCUIHJlYWQtb25seSwgcHJvcGFnYXRlcyB0aHJvdWdoIG5lc3RlZCBleGVjdXRvcnNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vKipcbiAqIEV4ZWN1dGlvbkVudiDigJQgaW5mcmFzdHJ1Y3R1cmUgdmFsdWVzIHRoYXQgcHJvcGFnYXRlIHRocm91Z2ggbmVzdGVkIGV4ZWN1dG9ycy5cbiAqXG4gKiBMaWtlIGBwcm9jZXNzLmVudmAgZm9yIGZsb3djaGFydHM6IHJlYWQtb25seSwgaW5oZXJpdGVkIGJ5IGNoaWxkIGV4ZWN1dG9ycyxcbiAqIGluZnJhc3RydWN0dXJlLW9ubHkgKG5vdCBidXNpbmVzcyBsb2dpYykuXG4gKlxuICogTGl0bXVzIHRlc3Q6IENyZWF0ZWQgZXh0ZXJuYWwgdG8gdGhlIGZsb3djaGFydCArIHBhc3NlZCBpbiBmb3IgZXhlY3V0aW9uID0gZW52LlxuICogQnVzaW5lc3MgY29uZmlnIGZvciBhIHNwZWNpZmljIGZsb3djaGFydCA9IGFyZ3MgKGdldEFyZ3MoKSkuXG4gKlxuICogSW50ZW50aW9uYWxseSBhIGNsb3NlZCB0eXBlIOKAlCBub3QgZXh0ZW5zaWJsZSB0byBwcmV2ZW50IGNvdXBsaW5nIGJldHdlZW5cbiAqIHBhcmVudCBhbmQgY2hpbGQgZmxvd2NoYXJ0cy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFeGVjdXRpb25FbnYge1xuICAvKiogQWJvcnRTaWduYWwgZm9yIGNvb3BlcmF0aXZlIGNhbmNlbGxhdGlvbiBhY3Jvc3MgbmVzdGVkIGV4ZWN1dG9ycy4gKi9cbiAgcmVhZG9ubHkgc2lnbmFsPzogQWJvcnRTaWduYWw7XG4gIC8qKiBUaW1lb3V0IGJ1ZGdldCBpbiBtaWxsaXNlY29uZHMuICovXG4gIHJlYWRvbmx5IHRpbWVvdXRNcz86IG51bWJlcjtcbiAgLyoqIFRyYWNlIGlkZW50aWZpZXIgZm9yIGRpc3RyaWJ1dGVkIHRyYWNpbmcgLyBvYnNlcnZhYmlsaXR5LiAqL1xuICByZWFkb25seSB0cmFjZUlkPzogc3RyaW5nO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIEhhbmRsZXIgRGVwZW5kZW5jaWVzIChESSBiYWcpIOKAlCB3YXMgUGlwZWxpbmVDb250ZXh0XG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLyoqXG4gKiBIYW5kbGVyRGVwcyDigJQgRGVwZW5kZW5jeSBpbmplY3Rpb24gYmFnIHBhc3NlZCB0byBhbGwgaGFuZGxlciBtb2R1bGVzLlxuICpcbiAqIFByb3ZpZGVzIHNoYXJlZCBzdGF0ZSAoc3RhZ2VNYXAsIHJ1bnRpbWUsIHNjb3BlRmFjdG9yeSwgZXRjLikgd2l0aG91dFxuICogaGFuZGxlcnMgbmVlZGluZyB0byBpbXBvcnQgdGhlIHRyYXZlcnNlciBkaXJlY3RseS4gQXZvaWRzIGNpcmN1bGFyIGRlcHMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSGFuZGxlckRlcHM8VE91dCA9IGFueSwgVFNjb3BlID0gYW55PiB7XG4gIHN0YWdlTWFwOiBNYXA8c3RyaW5nLCBTdGFnZUZ1bmN0aW9uPFRPdXQsIFRTY29wZT4+O1xuICByb290OiBTdGFnZU5vZGU8VE91dCwgVFNjb3BlPjtcbiAgZXhlY3V0aW9uUnVudGltZTogSUV4ZWN1dGlvblJ1bnRpbWU7XG4gIHNjb3BlRmFjdG9yeTogU2NvcGVGYWN0b3J5PFRTY29wZT47XG4gIHN1YmZsb3dzPzogUmVjb3JkPHN0cmluZywgeyByb290OiBTdGFnZU5vZGU8VE91dCwgVFNjb3BlPiB9PjtcbiAgdGhyb3R0bGluZ0Vycm9yQ2hlY2tlcj86IChlcnJvcjogdW5rbm93bikgPT4gYm9vbGVhbjtcbiAgc3RyZWFtSGFuZGxlcnM/OiBTdHJlYW1IYW5kbGVycztcbiAgc2NvcGVQcm90ZWN0aW9uTW9kZTogU2NvcGVQcm90ZWN0aW9uTW9kZTtcbiAgcmVhZE9ubHlDb250ZXh0PzogdW5rbm93bjtcbiAgLyoqIEV4ZWN1dGlvbiBlbnZpcm9ubWVudCDigJQgcHJvcGFnYXRlcyB0byBzdWJmbG93cyBhdXRvbWF0aWNhbGx5LiAqL1xuICBleGVjdXRpb25FbnY/OiBFeGVjdXRpb25FbnY7XG4gIG5hcnJhdGl2ZUdlbmVyYXRvcjogSUNvbnRyb2xGbG93TmFycmF0aXZlO1xuICBsb2dnZXI6IElMb2dnZXI7XG4gIHNpZ25hbD86IEFib3J0U2lnbmFsO1xufVxuXG4vKiogT3B0aW9ucyBmb3IgRmxvd0NoYXJ0RXhlY3V0b3IucnVuKCkuICovXG5leHBvcnQgaW50ZXJmYWNlIFJ1bk9wdGlvbnMge1xuICAvKiogQWJvcnRTaWduYWwgZm9yIGNvb3BlcmF0aXZlIGNhbmNlbGxhdGlvbi4gKi9cbiAgc2lnbmFsPzogQWJvcnRTaWduYWw7XG4gIC8qKiBUaW1lb3V0IGluIG1pbGxpc2Vjb25kcy4gQ3JlYXRlcyBhbiBpbnRlcm5hbCBBYm9ydENvbnRyb2xsZXIuICovXG4gIHRpbWVvdXRNcz86IG51bWJlcjtcbiAgLyoqXG4gICAqIFJ1bnRpbWUgaW5wdXQgZGF0YSBmb3IgdGhlIHBpcGVsaW5lLlxuICAgKiBCZWNvbWVzIHRoZSByZWFkT25seUNvbnRleHQgYWNjZXNzaWJsZSB2aWEgYHNjb3BlLmdldEFyZ3MoKWAuXG4gICAqIFN0YWdlcyBjYW5ub3Qgb3ZlcndyaXRlIHRoZXNlIGtleXMgd2l0aCBgc2V0VmFsdWUoKWAuXG4gICAqL1xuICBpbnB1dD86IHVua25vd247XG4gIC8qKlxuICAgKiBFeGVjdXRpb24gZW52aXJvbm1lbnQg4oCUIHJlYWQtb25seSBpbmZyYXN0cnVjdHVyZSB2YWx1ZXMgdGhhdCBwcm9wYWdhdGVcbiAgICogdGhyb3VnaCBuZXN0ZWQgZXhlY3V0b3JzIChsaWtlIGBwcm9jZXNzLmVudmAgZm9yIGZsb3djaGFydHMpLlxuICAgKiBBY2Nlc3NpYmxlIHZpYSBgc2NvcGUuZ2V0RW52KClgLiBJbmhlcml0ZWQgYnkgc3ViZmxvd3MgYXV0b21hdGljYWxseS5cbiAgICovXG4gIGVudj86IEV4ZWN1dGlvbkVudjtcbiAgLyoqXG4gICAqIE92ZXJyaWRlIHRoZSBtYXhpbXVtIHJlY3Vyc2l2ZSBgZXhlY3V0ZU5vZGVgIGRlcHRoIGZvciB0aGlzIHJ1bi5cbiAgICogRGVmYXVsdHMgdG8gYEZsb3djaGFydFRyYXZlcnNlci5NQVhfRVhFQ1VURV9ERVBUSGAgKDUwMCkuXG4gICAqIFVzZWZ1bCB3aGVuIGRlZXBseSBuZXN0ZWQgc3ViZmxvd3Mgb3IgbG9uZyBjaGFpbnMgbmVlZCBtb3JlIGhlYWRyb29tLlxuICAgKiBNdXN0IGJlID49IDEuXG4gICAqL1xuICBtYXhEZXB0aD86IG51bWJlcjtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBGbG93IENvbnRyb2wgTmFycmF0aXZlIOKAlCBjYW5vbmljYWwgZGVmaW5pdGlvbnMgbGl2ZSBpbiBtZW1vcnkvdHlwZXMudHNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5leHBvcnQgdHlwZSB7IEZsb3dDb250cm9sVHlwZSwgRmxvd01lc3NhZ2UgfTtcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBUcmF2ZXJzYWwgRXh0cmFjdG9yXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuZXhwb3J0IGludGVyZmFjZSBSdW50aW1lU3RydWN0dXJlTWV0YWRhdGEge1xuICB0eXBlOiAnc3RhZ2UnIHwgJ2RlY2lkZXInIHwgJ3NlbGVjdG9yJyB8ICdmb3JrJyB8ICdzdHJlYW1pbmcnIHwgJ3N1YmZsb3cnIHwgJ2xvb3AnO1xuICBzdWJmbG93SWQ/OiBzdHJpbmc7XG4gIGlzU3ViZmxvd1Jvb3Q/OiBib29sZWFuO1xuICBzdWJmbG93TmFtZT86IHN0cmluZztcbiAgaXNQYXJhbGxlbENoaWxkPzogYm9vbGVhbjtcbiAgcGFyYWxsZWxHcm91cElkPzogc3RyaW5nO1xuICBsb29wVGFyZ2V0Pzogc3RyaW5nO1xuICBpc0R5bmFtaWM/OiBib29sZWFuO1xuICBpc0xvb3BSZWZlcmVuY2U/OiBib29sZWFuO1xuICBzdHJlYW1JZD86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTdGFnZVNuYXBzaG90PFRPdXQgPSBhbnksIFRTY29wZSA9IGFueT4ge1xuICBub2RlOiBTdGFnZU5vZGU8VE91dCwgVFNjb3BlPjtcbiAgY29udGV4dDogU3RhZ2VDb250ZXh0O1xuICBzdGVwTnVtYmVyOiBudW1iZXI7XG4gIHN0cnVjdHVyZU1ldGFkYXRhOiBSdW50aW1lU3RydWN0dXJlTWV0YWRhdGE7XG4gIHNjb3BlU3RhdGU/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgZGVidWdJbmZvPzoge1xuICAgIGxvZ3M6IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgIGVycm9yczogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgbWV0cmljczogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgZXZhbHM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgIGZsb3dNZXNzYWdlcz86IEZsb3dNZXNzYWdlW107XG4gIH07XG4gIHN0YWdlT3V0cHV0PzogdW5rbm93bjtcbiAgZXJyb3JJbmZvPzogeyB0eXBlOiBzdHJpbmc7IG1lc3NhZ2U6IHN0cmluZyB9O1xuICBoaXN0b3J5SW5kZXg/OiBudW1iZXI7XG59XG5cbmV4cG9ydCB0eXBlIFRyYXZlcnNhbEV4dHJhY3RvcjxUUmVzdWx0ID0gdW5rbm93bj4gPSAoc25hcHNob3Q6IFN0YWdlU25hcHNob3QpID0+IFRSZXN1bHQgfCB1bmRlZmluZWQgfCBudWxsO1xuXG5leHBvcnQgaW50ZXJmYWNlIEV4dHJhY3RvckVycm9yIHtcbiAgc3RhZ2VQYXRoOiBzdHJpbmc7XG4gIG1lc3NhZ2U6IHN0cmluZztcbiAgZXJyb3I6IHVua25vd247XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gTm9kZSBSZXN1bHRcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5leHBvcnQgdHlwZSBOb2RlUmVzdWx0VHlwZSA9IHtcbiAgaWQ6IHN0cmluZztcbiAgcmVzdWx0OiB1bmtub3duO1xuICBpc0Vycm9yPzogYm9vbGVhbjtcbn07XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gRXhlY3V0aW9uIFJlc3BvbnNlXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuZXhwb3J0IHR5cGUgQnJhbmNoUmVzdWx0ID0ge1xuICByZXN1bHQ6IHN0cmluZyB8IEVycm9yO1xuICBpc0Vycm9yOiBib29sZWFuO1xufTtcblxuZXhwb3J0IHR5cGUgQnJhbmNoUmVzdWx0cyA9IHsgW2JyYW5jaElkOiBzdHJpbmddOiBCcmFuY2hSZXN1bHQgfTtcbmV4cG9ydCB0eXBlIFRyYXZlcnNhbFJlc3VsdCA9IEJyYW5jaFJlc3VsdHMgfCBzdHJpbmcgfCBFcnJvcjtcblxuLyoqIFJldHVybmVkIGJ5IHJ1bigpL3Jlc3VtZSgpIHdoZW4gZXhlY3V0aW9uIHBhdXNlcy4gKi9cbmV4cG9ydCB0eXBlIFBhdXNlZFJlc3VsdCA9IHtcbiAgcmVhZG9ubHkgcGF1c2VkOiB0cnVlO1xuICByZWFkb25seSBjaGVja3BvaW50OiBpbXBvcnQoJy4uL3BhdXNlL3R5cGVzLmpzJykuRmxvd2NoYXJ0Q2hlY2twb2ludDtcbn07XG5cbi8qKiBGdWxsIHJldHVybiB0eXBlIG9mIEZsb3dDaGFydEV4ZWN1dG9yLnJ1bigpIGFuZCByZXN1bWUoKS4gKi9cbmV4cG9ydCB0eXBlIEV4ZWN1dG9yUmVzdWx0ID0gVHJhdmVyc2FsUmVzdWx0IHwgUGF1c2VkUmVzdWx0O1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFNlcmlhbGl6ZWQgUGlwZWxpbmUgU3RydWN0dXJlIChmb3IgdmlzdWFsaXphdGlvbilcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5leHBvcnQgaW50ZXJmYWNlIFNlcmlhbGl6ZWRQaXBlbGluZU5vZGUge1xuICBuYW1lOiBzdHJpbmc7XG4gIGlkOiBzdHJpbmc7XG4gIHR5cGU/OlxuICAgIHwgJ3N0YWdlJ1xuICAgIHwgJ2RlY2lkZXInXG4gICAgfCAnc2VsZWN0b3InXG4gICAgfCAnZm9yaydcbiAgICB8ICdzdHJlYW1pbmcnXG4gICAgfCAnc3ViZmxvdydcbiAgICB8ICdsb29wJ1xuICAgIHwgJ3VzZXInXG4gICAgfCAndG9vbCdcbiAgICB8ICdmdW5jdGlvbidcbiAgICB8ICdzZXF1ZW5jZSc7XG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICBjaGlsZHJlbj86IFNlcmlhbGl6ZWRQaXBlbGluZU5vZGVbXTtcbiAgbmV4dD86IFNlcmlhbGl6ZWRQaXBlbGluZU5vZGU7XG4gIGJyYW5jaGVzPzogUmVjb3JkPHN0cmluZywgU2VyaWFsaXplZFBpcGVsaW5lTm9kZT47XG4gIGhhc0RlY2lkZXI/OiBib29sZWFuO1xuICBoYXNTZWxlY3Rvcj86IGJvb2xlYW47XG4gIGhhc1N1YnRyZWU/OiBib29sZWFuO1xuICBpc1N0cmVhbWluZz86IGJvb2xlYW47XG4gIHN0cmVhbUlkPzogc3RyaW5nO1xuICBpc1N1YmZsb3dSb290PzogYm9vbGVhbjtcbiAgc3ViZmxvd0lkPzogc3RyaW5nO1xuICBzdWJmbG93TmFtZT86IHN0cmluZztcbiAgbG9vcFRhcmdldD86IHN0cmluZztcbiAgaXNMb29wUmVmZXJlbmNlPzogYm9vbGVhbjtcbiAgaXNQYXJhbGxlbENoaWxkPzogYm9vbGVhbjtcbiAgcGFyYWxsZWxHcm91cElkPzogc3RyaW5nO1xuICBpc0R5bmFtaWM/OiBib29sZWFuO1xuICAvKiogV2hlbiB0cnVlLCB0aGlzIHN0YWdlIGNhbiBwYXVzZSBleGVjdXRpb24gKFBhdXNhYmxlSGFuZGxlciBwYXR0ZXJuKS4gKi9cbiAgaXNQYXVzYWJsZT86IGJvb2xlYW47XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gRmxvd0NoYXJ0IChjb21waWxlZCBvdXRwdXQgb2YgRmxvd0NoYXJ0QnVpbGRlcilcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5leHBvcnQgdHlwZSBGbG93Q2hhcnQ8VE91dCA9IGFueSwgVFNjb3BlID0gYW55PiA9IHtcbiAgcm9vdDogU3RhZ2VOb2RlPFRPdXQsIFRTY29wZT47XG4gIHN0YWdlTWFwOiBNYXA8c3RyaW5nLCBTdGFnZUZ1bmN0aW9uPFRPdXQsIFRTY29wZT4+O1xuICBleHRyYWN0b3I/OiBUcmF2ZXJzYWxFeHRyYWN0b3I7XG4gIHN1YmZsb3dzPzogUmVjb3JkPHN0cmluZywgeyByb290OiBTdGFnZU5vZGU8VE91dCwgVFNjb3BlPiB9PjtcbiAgZW5yaWNoU25hcHNob3RzPzogYm9vbGVhbjtcbiAgZW5hYmxlTmFycmF0aXZlPzogYm9vbGVhbjtcbiAgbG9nZ2VyPzogSUxvZ2dlcjtcbiAgYnVpbGRUaW1lU3RydWN0dXJlPzogU2VyaWFsaXplZFBpcGVsaW5lU3RydWN0dXJlO1xuICAvKiogSW5wdXQgc2NoZW1hIChab2Qgb3IgSlNPTiBTY2hlbWEpIOKAlCB1c2VkIGZvciBydW50aW1lIGlucHV0IHZhbGlkYXRpb24uICovXG4gIGlucHV0U2NoZW1hPzogdW5rbm93bjtcbiAgLyoqIFNjb3BlIGZhY3Rvcnkg4oCUIGF1dG8tZW1iZWRkZWQgYnkgZmxvd0NoYXJ0PFQ+KCkuIEV4ZWN1dG9yIHJlYWRzIHRoaXMgaWYgbm8gZmFjdG9yeSBwYXJhbS4gKi9cbiAgc2NvcGVGYWN0b3J5PzogU2NvcGVGYWN0b3J5PFRTY29wZT47XG59O1xuXG4vKiogQWxpYXMgZm9yIFNlcmlhbGl6ZWRQaXBlbGluZU5vZGUgdXNlZCBhcyBmdWxsIHN0cnVjdHVyZSAqL1xuZXhwb3J0IHR5cGUgU2VyaWFsaXplZFBpcGVsaW5lU3RydWN0dXJlID0gU2VyaWFsaXplZFBpcGVsaW5lTm9kZSAmIHtcbiAgYnJhbmNoSWRzPzogc3RyaW5nW107XG4gIHN1YmZsb3dTdHJ1Y3R1cmU/OiBTZXJpYWxpemVkUGlwZWxpbmVTdHJ1Y3R1cmU7XG4gIGl0ZXJhdGlvbkNvdW50PzogbnVtYmVyO1xufTtcbiJdfQ==
@@ -0,0 +1,2 @@
1
+ export { isPauseResult, isPauseSignal, PauseSignal } from './types.js';
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL3BhdXNlL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLFdBQVcsRUFBRSxNQUFNLFlBQVksQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB0eXBlIHsgRmxvd2NoYXJ0Q2hlY2twb2ludCwgUGF1c2FibGVIYW5kbGVyLCBQYXVzZVJlc3VsdCB9IGZyb20gJy4vdHlwZXMuanMnO1xuZXhwb3J0IHsgaXNQYXVzZVJlc3VsdCwgaXNQYXVzZVNpZ25hbCwgUGF1c2VTaWduYWwgfSBmcm9tICcuL3R5cGVzLmpzJztcbiJdfQ==
@@ -0,0 +1,58 @@
1
+ /**
2
+ * Pause/Resume — serializable checkpoint for long-running or human-in-the-loop flows.
3
+ *
4
+ * A stage signals pause by calling `scope.$pause(data)` which throws a PauseSignal.
5
+ * The signal bubbles up through SubflowExecutor → FlowchartTraverser → FlowChartExecutor,
6
+ * each level adding its subflow ID to the path.
7
+ *
8
+ * The checkpoint captures:
9
+ * - pausedPath: full path to the paused stage (e.g., ['sf-payment', 'approve'])
10
+ * - sharedState: scope at the pause point
11
+ * - executionTree: completed stages for BTS/narrative
12
+ * - pauseData: question, reason, or metadata from $pause()
13
+ *
14
+ * Resume rebuilds the flowchart, restores scope, navigates to the paused stage,
15
+ * injects resumeInput, and continues traversal.
16
+ *
17
+ * Supported topologies: linear, subflow, lazy subflow, loop, nested subflow in loop.
18
+ */
19
+ // ── PauseSignal ─────────────────────────────────────────────
20
+ /**
21
+ * Thrown by `scope.$pause()` to signal that execution should stop
22
+ * and create a serializable checkpoint.
23
+ *
24
+ * Bubbles up through SubflowExecutor (which prepends subflow ID to path)
25
+ * and is caught by FlowchartTraverser/FlowChartExecutor.
26
+ */
27
+ export class PauseSignal extends Error {
28
+ constructor(data, stageId) {
29
+ super('Execution paused');
30
+ this.name = 'PauseSignal';
31
+ this.pauseData = data;
32
+ this.stageId = stageId;
33
+ this._subflowPath = [];
34
+ // PauseSignal is control flow, not a real error — stack trace has no diagnostic value.
35
+ this.stack = '';
36
+ }
37
+ get subflowPath() {
38
+ return this._subflowPath;
39
+ }
40
+ /** Prepend a subflow ID to the path (called during bubble-up). */
41
+ prependSubflow(subflowId) {
42
+ this._subflowPath.unshift(subflowId);
43
+ }
44
+ }
45
+ // ── Type guard ──────────────────────────────────────────────
46
+ /** Check if a value is a PauseResult (stage wants to pause). */
47
+ export function isPauseResult(value) {
48
+ return typeof value === 'object' && value !== null && value.pause === true;
49
+ }
50
+ /** Check if an error is a PauseSignal. Uses instanceof + name brand fallback for cross-realm safety. */
51
+ export function isPauseSignal(error) {
52
+ return (error instanceof PauseSignal ||
53
+ (error instanceof Error &&
54
+ error.name === 'PauseSignal' &&
55
+ Object.prototype.hasOwnProperty.call(error, 'pauseData') &&
56
+ Object.prototype.hasOwnProperty.call(error, 'stageId')));
57
+ }
58
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL3BhdXNlL3R5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7OztHQWlCRztBQUVILCtEQUErRDtBQUUvRDs7Ozs7O0dBTUc7QUFDSCxNQUFNLE9BQU8sV0FBWSxTQUFRLEtBQUs7SUFRcEMsWUFBWSxJQUFhLEVBQUUsT0FBZTtRQUN4QyxLQUFLLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUMxQixJQUFJLENBQUMsSUFBSSxHQUFHLGFBQWEsQ0FBQztRQUMxQixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztRQUN0QixJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztRQUN2QixJQUFJLENBQUMsWUFBWSxHQUFHLEVBQUUsQ0FBQztRQUN2Qix1RkFBdUY7UUFDdkYsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7SUFDbEIsQ0FBQztJQUVELElBQUksV0FBVztRQUNiLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQztJQUMzQixDQUFDO0lBRUQsa0VBQWtFO0lBQ2xFLGNBQWMsQ0FBQyxTQUFpQjtRQUM5QixJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUN2QyxDQUFDO0NBQ0Y7QUF1SkQsK0RBQStEO0FBRS9ELGdFQUFnRTtBQUNoRSxNQUFNLFVBQVUsYUFBYSxDQUFDLEtBQWM7SUFDMUMsT0FBTyxPQUFPLEtBQUssS0FBSyxRQUFRLElBQUksS0FBSyxLQUFLLElBQUksSUFBSyxLQUFxQixDQUFDLEtBQUssS0FBSyxJQUFJLENBQUM7QUFDOUYsQ0FBQztBQUVELHdHQUF3RztBQUN4RyxNQUFNLFVBQVUsYUFBYSxDQUFDLEtBQWM7SUFDMUMsT0FBTyxDQUNMLEtBQUssWUFBWSxXQUFXO1FBQzVCLENBQUMsS0FBSyxZQUFZLEtBQUs7WUFDckIsS0FBSyxDQUFDLElBQUksS0FBSyxhQUFhO1lBQzVCLE1BQU0sQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsV0FBVyxDQUFDO1lBQ3hELE1BQU0sQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FDMUQsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFBhdXNlL1Jlc3VtZSDigJQgc2VyaWFsaXphYmxlIGNoZWNrcG9pbnQgZm9yIGxvbmctcnVubmluZyBvciBodW1hbi1pbi10aGUtbG9vcCBmbG93cy5cbiAqXG4gKiBBIHN0YWdlIHNpZ25hbHMgcGF1c2UgYnkgY2FsbGluZyBgc2NvcGUuJHBhdXNlKGRhdGEpYCB3aGljaCB0aHJvd3MgYSBQYXVzZVNpZ25hbC5cbiAqIFRoZSBzaWduYWwgYnViYmxlcyB1cCB0aHJvdWdoIFN1YmZsb3dFeGVjdXRvciDihpIgRmxvd2NoYXJ0VHJhdmVyc2VyIOKGkiBGbG93Q2hhcnRFeGVjdXRvcixcbiAqIGVhY2ggbGV2ZWwgYWRkaW5nIGl0cyBzdWJmbG93IElEIHRvIHRoZSBwYXRoLlxuICpcbiAqIFRoZSBjaGVja3BvaW50IGNhcHR1cmVzOlxuICogICAtIHBhdXNlZFBhdGg6IGZ1bGwgcGF0aCB0byB0aGUgcGF1c2VkIHN0YWdlIChlLmcuLCBbJ3NmLXBheW1lbnQnLCAnYXBwcm92ZSddKVxuICogICAtIHNoYXJlZFN0YXRlOiBzY29wZSBhdCB0aGUgcGF1c2UgcG9pbnRcbiAqICAgLSBleGVjdXRpb25UcmVlOiBjb21wbGV0ZWQgc3RhZ2VzIGZvciBCVFMvbmFycmF0aXZlXG4gKiAgIC0gcGF1c2VEYXRhOiBxdWVzdGlvbiwgcmVhc29uLCBvciBtZXRhZGF0YSBmcm9tICRwYXVzZSgpXG4gKlxuICogUmVzdW1lIHJlYnVpbGRzIHRoZSBmbG93Y2hhcnQsIHJlc3RvcmVzIHNjb3BlLCBuYXZpZ2F0ZXMgdG8gdGhlIHBhdXNlZCBzdGFnZSxcbiAqIGluamVjdHMgcmVzdW1lSW5wdXQsIGFuZCBjb250aW51ZXMgdHJhdmVyc2FsLlxuICpcbiAqIFN1cHBvcnRlZCB0b3BvbG9naWVzOiBsaW5lYXIsIHN1YmZsb3csIGxhenkgc3ViZmxvdywgbG9vcCwgbmVzdGVkIHN1YmZsb3cgaW4gbG9vcC5cbiAqL1xuXG4vLyDilIDilIAgUGF1c2VTaWduYWwg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbi8qKlxuICogVGhyb3duIGJ5IGBzY29wZS4kcGF1c2UoKWAgdG8gc2lnbmFsIHRoYXQgZXhlY3V0aW9uIHNob3VsZCBzdG9wXG4gKiBhbmQgY3JlYXRlIGEgc2VyaWFsaXphYmxlIGNoZWNrcG9pbnQuXG4gKlxuICogQnViYmxlcyB1cCB0aHJvdWdoIFN1YmZsb3dFeGVjdXRvciAod2hpY2ggcHJlcGVuZHMgc3ViZmxvdyBJRCB0byBwYXRoKVxuICogYW5kIGlzIGNhdWdodCBieSBGbG93Y2hhcnRUcmF2ZXJzZXIvRmxvd0NoYXJ0RXhlY3V0b3IuXG4gKi9cbmV4cG9ydCBjbGFzcyBQYXVzZVNpZ25hbCBleHRlbmRzIEVycm9yIHtcbiAgLyoqIERhdGEgZnJvbSAkcGF1c2UoKSDigJQgcXVlc3Rpb24sIHJlYXNvbiwgbWV0YWRhdGEuICovXG4gIHJlYWRvbmx5IHBhdXNlRGF0YTogdW5rbm93bjtcbiAgLyoqIElEIG9mIHRoZSBzdGFnZSB0aGF0IGNhbGxlZCAkcGF1c2UoKS4gKi9cbiAgcmVhZG9ubHkgc3RhZ2VJZDogc3RyaW5nO1xuICAvKiogUGF0aCB0aHJvdWdoIHN1YmZsb3dzIHRvIHRoZSBwYXVzZWQgc3RhZ2UuIEJ1aWx0IGR1cmluZyBidWJibGUtdXAuICovXG4gIHByaXZhdGUgX3N1YmZsb3dQYXRoOiBzdHJpbmdbXTtcblxuICBjb25zdHJ1Y3RvcihkYXRhOiB1bmtub3duLCBzdGFnZUlkOiBzdHJpbmcpIHtcbiAgICBzdXBlcignRXhlY3V0aW9uIHBhdXNlZCcpO1xuICAgIHRoaXMubmFtZSA9ICdQYXVzZVNpZ25hbCc7XG4gICAgdGhpcy5wYXVzZURhdGEgPSBkYXRhO1xuICAgIHRoaXMuc3RhZ2VJZCA9IHN0YWdlSWQ7XG4gICAgdGhpcy5fc3ViZmxvd1BhdGggPSBbXTtcbiAgICAvLyBQYXVzZVNpZ25hbCBpcyBjb250cm9sIGZsb3csIG5vdCBhIHJlYWwgZXJyb3Ig4oCUIHN0YWNrIHRyYWNlIGhhcyBubyBkaWFnbm9zdGljIHZhbHVlLlxuICAgIHRoaXMuc3RhY2sgPSAnJztcbiAgfVxuXG4gIGdldCBzdWJmbG93UGF0aCgpOiByZWFkb25seSBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIHRoaXMuX3N1YmZsb3dQYXRoO1xuICB9XG5cbiAgLyoqIFByZXBlbmQgYSBzdWJmbG93IElEIHRvIHRoZSBwYXRoIChjYWxsZWQgZHVyaW5nIGJ1YmJsZS11cCkuICovXG4gIHByZXBlbmRTdWJmbG93KHN1YmZsb3dJZDogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5fc3ViZmxvd1BhdGgudW5zaGlmdChzdWJmbG93SWQpO1xuICB9XG59XG5cbi8vIOKUgOKUgCBQYXVzZVJlc3VsdCDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuLyoqXG4gKiBSZXR1cm5lZCBieSBhIHBhdXNhYmxlIHN0YWdlJ3MgZXhlY3V0ZS9yZXN1bWUgZnVuY3Rpb24gdG8gc2lnbmFsIHBhdXNlLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBleGVjdXRlOiBhc3luYyAoc2NvcGUpID0+IHtcbiAqICAgc2NvcGUub3JkZXJJZCA9ICcxMjMnO1xuICogICByZXR1cm4geyBwYXVzZTogdHJ1ZSwgZGF0YTogeyBxdWVzdGlvbjogJ0FwcHJvdmUgb3JkZXIgMTIzPycgfSB9O1xuICogfVxuICogYGBgXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGF1c2VSZXN1bHQge1xuICByZWFkb25seSBwYXVzZTogdHJ1ZTtcbiAgLyoqIERhdGEgdG8gaW5jbHVkZSBpbiB0aGUgY2hlY2twb2ludCDigJQgcXVlc3Rpb24sIHJlYXNvbiwgbWV0YWRhdGEuICovXG4gIHJlYWRvbmx5IGRhdGE/OiB1bmtub3duO1xufVxuXG4vLyDilIDilIAgRmxvd2NoYXJ0Q2hlY2twb2ludCDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuLyoqXG4gKiBTZXJpYWxpemFibGUgY2hlY2twb2ludCDigJQgZXZlcnl0aGluZyBuZWVkZWQgdG8gcmVzdW1lIGEgcGF1c2VkIGZsb3djaGFydC5cbiAqXG4gKiBKU09OLXNhZmU6IG5vIGZ1bmN0aW9ucywgbm8gY2xhc3MgaW5zdGFuY2VzLCBubyBTREsgY2xpZW50cy5cbiAqIFN0b3JlIGFueXdoZXJlOiBSZWRpcywgUG9zdGdyZXMsIGxvY2FsU3RvcmFnZSwgYSBmaWxlLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiAvLyBTYXZlXG4gKiBjb25zdCBjaGVja3BvaW50ID0gZXhlY3V0b3IuZ2V0Q2hlY2twb2ludCgpOyAvLyBhZnRlciBwYXVzZVxuICogYXdhaXQgcmVkaXMuc2V0KGBzZXNzaW9uOiR7aWR9YCwgSlNPTi5zdHJpbmdpZnkoY2hlY2twb2ludCkpO1xuICpcbiAqIC8vIFJlc3VtZSAoaG91cnMgbGF0ZXIsIHBvc3NpYmx5IGRpZmZlcmVudCBzZXJ2ZXIpXG4gKiBjb25zdCBjaGVja3BvaW50ID0gSlNPTi5wYXJzZShhd2FpdCByZWRpcy5nZXQoYHNlc3Npb246JHtpZH1gKSk7XG4gKiBjb25zdCBleGVjdXRvciA9IG5ldyBGbG93Q2hhcnRFeGVjdXRvcihjaGFydCk7XG4gKiBhd2FpdCBleGVjdXRvci5yZXN1bWUoY2hlY2twb2ludCwgeyBhcHByb3ZlZDogdHJ1ZSB9KTtcbiAqIGBgYFxuICovXG4vKipcbiAqIFNlcmlhbGl6YWJsZSBjaGVja3BvaW50IOKAlCBldmVyeXRoaW5nIG5lZWRlZCB0byByZXN1bWUgYSBwYXVzZWQgZmxvd2NoYXJ0LlxuICpcbiAqIFRoZSBleGVjdXRpb24gdHJlZSBJUyB0aGUgdHJhdmVyc2VkIHBhdGguIFRoZSBsZWFmIG5vZGUgd2l0aCBzdGF0dXMgJ3BhdXNlZCdcbiAqIElTIHRoZSBjdXJzb3IuIE5vIHNlcGFyYXRlIHBhdGggYXJyYXkgbmVlZGVkIOKAlCB0aGUgdHJlZSBzdHJ1Y3R1cmUgY2FwdHVyZXNcbiAqIHRoZSBmdWxsIG5lc3RpbmcgKGluY2x1ZGluZyBzdWJmbG93cykuXG4gKlxuICogSlNPTi1zYWZlOiBubyBmdW5jdGlvbnMsIG5vIGNsYXNzIGluc3RhbmNlcywgbm8gU0RLIGNsaWVudHMuXG4gKiBTdG9yZSBhbnl3aGVyZTogUmVkaXMsIFBvc3RncmVzLCBsb2NhbFN0b3JhZ2UsIGEgZmlsZS5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogY29uc3QgY2hlY2twb2ludCA9IGV4ZWN1dG9yLmdldENoZWNrcG9pbnQoKTsgLy8gYWZ0ZXIgcGF1c2VcbiAqIGF3YWl0IHJlZGlzLnNldChgc2Vzc2lvbjoke2lkfWAsIEpTT04uc3RyaW5naWZ5KGNoZWNrcG9pbnQpKTtcbiAqXG4gKiAvLyBSZXN1bWUgKGhvdXJzIGxhdGVyLCBwb3NzaWJseSBkaWZmZXJlbnQgc2VydmVyKVxuICogY29uc3QgY2hlY2twb2ludCA9IEpTT04ucGFyc2UoYXdhaXQgcmVkaXMuZ2V0KGBzZXNzaW9uOiR7aWR9YCkpO1xuICogY29uc3QgZXhlY3V0b3IgPSBuZXcgRmxvd0NoYXJ0RXhlY3V0b3IoY2hhcnQpO1xuICogYXdhaXQgZXhlY3V0b3IucmVzdW1lKGNoZWNrcG9pbnQsIHsgYXBwcm92ZWQ6IHRydWUgfSk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGbG93Y2hhcnRDaGVja3BvaW50IHtcbiAgLyoqIFNjb3BlIHN0YXRlIGF0IHRoZSBwYXVzZSBwb2ludCDigJQgYWxsIHNoYXJlZCBtZW1vcnkga2V5L3ZhbHVlcy4gKi9cbiAgcmVhZG9ubHkgc2hhcmVkU3RhdGU6IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXG4gIC8qKiBFeGVjdXRpb24gdHJlZSDigJQgdGhlIHRyYXZlcnNlZCBwYXRoLiBUaGUgbGVhZiB3aXRoIHN0YXR1cyAncGF1c2VkJyBpcyB0aGUgY3Vyc29yLlxuICAgKiAgQ29udGFpbnMgc3ViZmxvdyBuZXN0aW5nLiBVc2VkIGZvciBCVFMgdmlzdWFsaXphdGlvbiBhbmQgdG8gZmluZCB0aGUgcmVzdW1lIHBvaW50LiAqL1xuICByZWFkb25seSBleGVjdXRpb25UcmVlOiB1bmtub3duO1xuXG4gIC8qKiBJRCBvZiB0aGUgc3RhZ2UgdGhhdCBwYXVzZWQuIFVzZWQgYnkgcmVzdW1lKCkgdG8gZmluZCB0aGUgbm9kZSBpbiB0aGUgZ3JhcGguICovXG4gIHJlYWRvbmx5IHBhdXNlZFN0YWdlSWQ6IHN0cmluZztcblxuICAvKiogUGF0aCB0aHJvdWdoIHN1YmZsb3dzIHRvIHRoZSBwYXVzZWQgc3RhZ2UgKGUuZy4sIFsnc2YtcGF5bWVudCcsICdzZi12YWxpZGF0aW9uJ10pLlxuICAgKiAgRW1wdHkgYXJyYXkgd2hlbiBwYXVzZWQgYXQgdGhlIHRvcCBsZXZlbC4gKi9cbiAgcmVhZG9ubHkgc3ViZmxvd1BhdGg6IHJlYWRvbmx5IHN0cmluZ1tdO1xuXG4gIC8qKiBEYXRhIGZyb20gJHBhdXNlKCkg4oCUIHF1ZXN0aW9uLCByZWFzb24sIG1ldGFkYXRhLiAqL1xuICByZWFkb25seSBwYXVzZURhdGE/OiB1bmtub3duO1xuXG4gIC8qKiBTdWJmbG93IHJlc3VsdHMgY29sbGVjdGVkIGJlZm9yZSB0aGUgcGF1c2UuICovXG4gIHJlYWRvbmx5IHN1YmZsb3dSZXN1bHRzPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG5cbiAgLyoqIFRpbWVzdGFtcCBvZiB3aGVuIHRoZSBwYXVzZSBvY2N1cnJlZC4gKi9cbiAgcmVhZG9ubHkgcGF1c2VkQXQ6IG51bWJlcjtcbn1cblxuLy8g4pSA4pSAIFBhdXNhYmxlSGFuZGxlciDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuLyoqXG4gKiBIYW5kbGVyIGZvciBhIHBhdXNhYmxlIHN0YWdlIOKAlCBoYXMgdHdvIHBoYXNlczogZXhlY3V0ZSBhbmQgcmVzdW1lLlxuICpcbiAqIGBleGVjdXRlYCBydW5zIHRoZSBmaXJzdCB0aW1lLiBJdCBjYW4gcmV0dXJuIGB7IHBhdXNlOiB0cnVlIH1gIHRvIHBhdXNlLlxuICogYHJlc3VtZWAgcnVucyB3aGVuIHRoZSBmbG93Y2hhcnQgaXMgcmVzdW1lZC4gSXQgcmVjZWl2ZXMgdGhlIHJlc3VtZSBpbnB1dC5cbiAqXG4gKiBCb3RoIHBoYXNlcyByZWNlaXZlIHRoZSBzYW1lIHNjb3BlLiBBZnRlciBleGVjdXRlIHBhdXNlcywgdGhlIHNjb3BlIHN0YXRlXG4gKiBpcyBwcmVzZXJ2ZWQgaW4gdGhlIGNoZWNrcG9pbnQuIE9uIHJlc3VtZSwgdGhlIHNjb3BlIGlzIHJlc3RvcmVkIGJlZm9yZVxuICogY2FsbGluZyByZXN1bWUuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIC5hZGRQYXVzYWJsZUZ1bmN0aW9uKCdBcHByb3ZlT3JkZXInLCB7XG4gKiAgIGV4ZWN1dGU6IGFzeW5jIChzY29wZSkgPT4ge1xuICogICAgIHNjb3BlLm9yZGVySWQgPSAnMTIzJztcbiAqICAgICBzY29wZS5hbW91bnQgPSAyOTk7XG4gKiAgICAgcmV0dXJuIHsgcGF1c2U6IHRydWUsIGRhdGE6IHsgcXVlc3Rpb246IGBBcHByb3ZlICQke3Njb3BlLmFtb3VudH0gcmVmdW5kP2AgfSB9O1xuICogICB9LFxuICogICByZXN1bWU6IGFzeW5jIChzY29wZSwgaW5wdXQpID0+IHtcbiAqICAgICBzY29wZS5hcHByb3ZlZCA9IGlucHV0LmFwcHJvdmVkO1xuICogICAgIHNjb3BlLmFwcHJvdmVyID0gaW5wdXQuYXBwcm92ZXI7XG4gKiAgIH0sXG4gKiB9LCAnYXBwcm92ZS1vcmRlcicsICdNYW5hZ2VyIGFwcHJvdmFsIGdhdGUnKVxuICpcbiAqIC8vIExhdGVyIOKAlCByZXN1bWUgd2l0aCBodW1hbidzIGFuc3dlclxuICogYXdhaXQgZXhlY3V0b3IucmVzdW1lKGNoZWNrcG9pbnQsIHsgYXBwcm92ZWQ6IHRydWUsIGFwcHJvdmVyOiAnSmFuZScgfSk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQYXVzYWJsZUhhbmRsZXI8VFNjb3BlID0gYW55LCBUSW5wdXQgPSB1bmtub3duPiB7XG4gIC8qKlxuICAgKiBGaXJzdC1ydW4gcGhhc2UuIFJldHVybiBkYXRhIHRvIHBhdXNlLCBvciB2b2lkL3VuZGVmaW5lZCB0byBjb250aW51ZSBub3JtYWxseS5cbiAgICpcbiAgICogQW55IG5vbi12b2lkIHJldHVybiB2YWx1ZSBiZWNvbWVzIHRoZSBgcGF1c2VEYXRhYCBpbiB0aGUgY2hlY2twb2ludC5cbiAgICogVGhlIGxpYnJhcnkgZGV0ZWN0cyB0aGUgcmV0dXJuIGFuZCBwYXVzZXMgYXV0b21hdGljYWxseSDigJQgbm8gbmVlZCB0b1xuICAgKiBjYWxsIGBwYXVzZSgpYCBvciBjb25zdHJ1Y3QgYHsgcGF1c2U6IHRydWUgfWAuXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogZXhlY3V0ZTogYXN5bmMgKHNjb3BlKSA9PiB7XG4gICAqICAgc2NvcGUub3JkZXJJZCA9ICcxMjMnO1xuICAgKiAgIHJldHVybiB7IHF1ZXN0aW9uOiBgQXBwcm92ZSBvcmRlciAke3Njb3BlLm9yZGVySWR9P2AgfTsgLy8g4oaQIHBhdXNlc1xuICAgKiB9XG4gICAqXG4gICAqIC8vIENvbmRpdGlvbmFsIHBhdXNlXG4gICAqIGV4ZWN1dGU6IGFzeW5jIChzY29wZSkgPT4ge1xuICAgKiAgIGlmIChzY29wZS5hbW91bnQgPiA1MDApIHtcbiAgICogICAgIHJldHVybiB7IHJlYXNvbjogJ0hpZ2gtdmFsdWUgb3JkZXIgbmVlZHMgYXBwcm92YWwnIH07IC8vIOKGkCBwYXVzZXNcbiAgICogICB9XG4gICAqICAgLy8gdm9pZCByZXR1cm4g4oaSIG5vIHBhdXNlLCBjb250aW51ZXMgbm9ybWFsbHlcbiAgICogfVxuICAgKiBgYGBcbiAgICovXG4gIGV4ZWN1dGU6IChzY29wZTogVFNjb3BlKSA9PiBQcm9taXNlPHVua25vd24+IHwgdW5rbm93bjtcbiAgLyoqXG4gICAqIFJlc3VtZSBwaGFzZS4gQ2FsbGVkIHdpdGggdGhlIHJlc3VtZSBpbnB1dCB3aGVuIGV4ZWN1dGlvbiBjb250aW51ZXMuXG4gICAqXG4gICAqIFRoZSBzY29wZSBpcyByZXN0b3JlZCBmcm9tIHRoZSBjaGVja3BvaW50J3MgYHNoYXJlZFN0YXRlYC4gV3JpdGVzIGR1cmluZ1xuICAgKiBgcmVzdW1lYCBhcmUgY29tbWl0dGVkIGFuZCB2aXNpYmxlIHRvIHN1YnNlcXVlbnQgc3RhZ2VzLlxuICAgKi9cbiAgcmVzdW1lOiAoc2NvcGU6IFRTY29wZSwgaW5wdXQ6IFRJbnB1dCkgPT4gUHJvbWlzZTx2b2lkPiB8IHZvaWQ7XG59XG5cbi8vIOKUgOKUgCBUeXBlIGd1YXJkIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4vKiogQ2hlY2sgaWYgYSB2YWx1ZSBpcyBhIFBhdXNlUmVzdWx0IChzdGFnZSB3YW50cyB0byBwYXVzZSkuICovXG5leHBvcnQgZnVuY3Rpb24gaXNQYXVzZVJlc3VsdCh2YWx1ZTogdW5rbm93bik6IHZhbHVlIGlzIFBhdXNlUmVzdWx0IHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgIT09IG51bGwgJiYgKHZhbHVlIGFzIFBhdXNlUmVzdWx0KS5wYXVzZSA9PT0gdHJ1ZTtcbn1cblxuLyoqIENoZWNrIGlmIGFuIGVycm9yIGlzIGEgUGF1c2VTaWduYWwuIFVzZXMgaW5zdGFuY2VvZiArIG5hbWUgYnJhbmQgZmFsbGJhY2sgZm9yIGNyb3NzLXJlYWxtIHNhZmV0eS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1BhdXNlU2lnbmFsKGVycm9yOiB1bmtub3duKTogZXJyb3IgaXMgUGF1c2VTaWduYWwge1xuICByZXR1cm4gKFxuICAgIGVycm9yIGluc3RhbmNlb2YgUGF1c2VTaWduYWwgfHxcbiAgICAoZXJyb3IgaW5zdGFuY2VvZiBFcnJvciAmJlxuICAgICAgZXJyb3IubmFtZSA9PT0gJ1BhdXNlU2lnbmFsJyAmJlxuICAgICAgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGVycm9yLCAncGF1c2VEYXRhJykgJiZcbiAgICAgIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlcnJvciwgJ3N0YWdlSWQnKSlcbiAgKTtcbn1cbiJdfQ==
@@ -44,10 +44,11 @@ export const IS_TYPED_SCOPE = Symbol('footprint:reactive:isTypedScope');
44
44
  export const EXECUTOR_INTERNAL_METHODS = new Set([
45
45
  'notifyStageStart', // StageRunner.run() line 59
46
46
  'notifyStageEnd', // StageRunner.run() line 79
47
+ 'notifyPause', // StageRunner.run() — pause detection
47
48
  'attachRecorder', // FlowChartExecutor.createTraverser() — narrative + user recorders
48
49
  'detachRecorder', // FlowChartExecutor.detachRecorder()
49
50
  'getRecorders', // FlowChartExecutor.getRecorders()
50
51
  'useSharedRedactedKeys', // FlowChartExecutor.createTraverser() — redaction wrapping
51
52
  'useRedactionPolicy', // FlowChartExecutor.createTraverser() — redaction wrapping
52
53
  ]);
53
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL3JlYWN0aXZlL3R5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7OztHQVFHO0FBaUlILCtFQUErRTtBQUMvRSx1RUFBdUU7QUFFdkUsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxHQUFHLENBQVM7SUFDaEQsV0FBVztJQUNYLFdBQVc7SUFDWCxTQUFTO0lBQ1QsU0FBUztJQUNULE9BQU87SUFDUCxVQUFVO0lBQ1YsU0FBUztJQUNULFFBQVE7SUFDUixNQUFNO0lBQ04sUUFBUTtJQUNSLFNBQVM7SUFDVCxPQUFPO0lBQ1AsaUJBQWlCO0lBQ2pCLGlCQUFpQjtJQUNqQixlQUFlO0lBQ2YsYUFBYTtJQUNiLFFBQVE7SUFDUixRQUFRO0NBQ1QsQ0FBQyxDQUFDO0FBRUgsK0VBQStFO0FBQy9FLGdFQUFnRTtBQUNoRSxxRUFBcUU7QUFFckUsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUFHLE1BQU0sQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDO0FBRWxFLCtFQUErRTtBQUMvRSw2RUFBNkU7QUFDN0UsK0NBQStDO0FBRS9DLE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FBRyxNQUFNLENBQUMsaUNBQWlDLENBQUMsQ0FBQztBQUV4RSwrRUFBK0U7QUFDL0UsZ0ZBQWdGO0FBQ2hGLDBFQUEwRTtBQUMxRSwwRUFBMEU7QUFFMUUsTUFBTSxDQUFDLE1BQU0seUJBQXlCLEdBQUcsSUFBSSxHQUFHLENBQUM7SUFDL0Msa0JBQWtCLEVBQUUsNEJBQTRCO0lBQ2hELGdCQUFnQixFQUFFLDRCQUE0QjtJQUM5QyxnQkFBZ0IsRUFBRSxtRUFBbUU7SUFDckYsZ0JBQWdCLEVBQUUscUNBQXFDO0lBQ3ZELGNBQWMsRUFBRSxtQ0FBbUM7SUFDbkQsdUJBQXVCLEVBQUUsMkRBQTJEO0lBQ3BGLG9CQUFvQixFQUFFLDJEQUEyRDtDQUNsRixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIHJlYWN0aXZlL3R5cGVzIC0tIFR5cGUgZGVmaW5pdGlvbnMgZm9yIHRoZSBUeXBlZFNjb3BlPFQ+IHJlYWN0aXZlIHByb3h5IHN5c3RlbS5cbiAqXG4gKiBUeXBlZFNjb3BlPFQ+IHdyYXBzIGEgUmVhY3RpdmVUYXJnZXQgKFNjb3BlRmFjYWRlKSBpbiBhIFByb3h5IHRoYXQgcHJvdmlkZXNcbiAqIHR5cGVkIHByb3BlcnR5IGFjY2Vzcy4gQWxsIHNjb3BlIGluZnJhc3RydWN0dXJlIG1ldGhvZHMgYXJlICQtcHJlZml4ZWQgdG9cbiAqIGF2b2lkIGNvbGxpc2lvbnMgd2l0aCB1c2VyIHN0YXRlIGtleXMuXG4gKlxuICogRGVwZW5kZW5jeTogdHlwZS1vbmx5IGltcG9ydHMgZnJvbSBlbmdpbmUvIGFuZCBzY29wZS8gKHplcm8gcnVudGltZSBjb3N0KS5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IEV4ZWN1dGlvbkVudiB9IGZyb20gJy4uL2VuZ2luZS90eXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7IFJlY29yZGVyIH0gZnJvbSAnLi4vc2NvcGUvdHlwZXMuanMnO1xuXG4vLyAtLSBSZWFjdGl2ZVRhcmdldCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBNaW5pbXVtIHByb3RvY29sIHJlcXVpcmVkIGJ5IFR5cGVkU2NvcGUgLS0gYSBjdXJhdGVkIHN1YnNldCBvZiBTY29wZUZhY2FkZSdzXG4vLyBwdWJsaWMgQVBJLiBOb3QgYSBmdWxsIG1pcnJvcjogZXhjbHVkZXMgaW50ZXJuYWwvcmVkYWN0aW9uIG1ldGhvZHMgdGhhdCBhcmVcbi8vIGhhbmRsZWQgYXQgdGhlIGV4ZWN1dG9yIGxldmVsICh1c2VSZWRhY3Rpb25Qb2xpY3ksIHVzZVNoYXJlZFJlZGFjdGVkS2V5cywgZXRjLilcbi8vIGFuZCBpbmZyYXN0cnVjdHVyZSBtZXRob2RzIChnZXRQaXBlbGluZUlkLCBzZXRHbG9iYWwsIGdldEdsb2JhbCwgZXRjLikuXG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVhY3RpdmVUYXJnZXQge1xuICAvLyBTdGF0ZSBhY2Nlc3MgKHRyYWNrZWQgYnkgcmVjb3JkZXJzKVxuICBnZXRWYWx1ZShrZXk/OiBzdHJpbmcpOiB1bmtub3duO1xuICBzZXRWYWx1ZShrZXk6IHN0cmluZywgdmFsdWU6IHVua25vd24sIHNob3VsZFJlZGFjdD86IGJvb2xlYW4sIGRlc2NyaXB0aW9uPzogc3RyaW5nKTogdm9pZDtcbiAgdXBkYXRlVmFsdWUoa2V5OiBzdHJpbmcsIHZhbHVlOiB1bmtub3duLCBkZXNjcmlwdGlvbj86IHN0cmluZyk6IHZvaWQ7XG4gIGRlbGV0ZVZhbHVlKGtleTogc3RyaW5nLCBkZXNjcmlwdGlvbj86IHN0cmluZyk6IHZvaWQ7XG5cbiAgLy8gTm9uLXRyYWNraW5nIHN0YXRlIGluc3BlY3Rpb24gKGZvciBwcm94eSBpbnRlcm5hbHMg4oCUIG5vIHJlY29yZGVyIGRpc3BhdGNoKVxuICAvKiogUmV0dXJucyBhbGwgc3RhdGUga2V5cyB3aXRob3V0IGZpcmluZyBvblJlYWQuIFVzZWQgYnkgb3duS2V5cy9oYXMgdHJhcHMuICovXG4gIGdldFN0YXRlS2V5cz8oKTogc3RyaW5nW107XG4gIC8qKiBDaGVjayBrZXkgZXhpc3RlbmNlIHdpdGhvdXQgZmlyaW5nIG9uUmVhZC4gVXNlZCBieSBoYXMgdHJhcC4gKi9cbiAgaGFzS2V5PyhrZXk6IHN0cmluZyk6IGJvb2xlYW47XG4gIC8qKiBSZWFkIHN0YXRlIHdpdGhvdXQgZmlyaW5nIG9uUmVhZC4gVXNlZCBieSBhcnJheSBwcm94eSBnZXRDdXJyZW50KCkuICovXG4gIGdldFZhbHVlU2lsZW50PyhrZXk/OiBzdHJpbmcpOiB1bmtub3duO1xuXG4gIC8vIElucHV0ICYgZW52aXJvbm1lbnQgKHJlYWRvbmx5LCBOT1QgdHJhY2tlZClcbiAgZ2V0QXJnczxUID0gUmVjb3JkPHN0cmluZywgdW5rbm93bj4+KCk6IFQ7XG4gIGdldEVudigpOiBSZWFkb25seTxFeGVjdXRpb25FbnY+O1xuXG4gIC8vIFJlY29yZGVyIG1hbmFnZW1lbnRcbiAgYXR0YWNoUmVjb3JkZXIocmVjb3JkZXI6IFJlY29yZGVyKTogdm9pZDtcbiAgZGV0YWNoUmVjb3JkZXIocmVjb3JkZXJJZDogc3RyaW5nKTogdm9pZDtcbiAgZ2V0UmVjb3JkZXJzKCk6IFJlY29yZGVyW107XG5cbiAgLy8gRGlhZ25vc3RpY3NcbiAgYWRkRGVidWdJbmZvKGtleTogc3RyaW5nLCB2YWx1ZTogdW5rbm93bik6IHZvaWQ7XG4gIGFkZERlYnVnTWVzc2FnZSh2YWx1ZTogdW5rbm93bik6IHZvaWQ7XG4gIGFkZEVycm9ySW5mbyhrZXk6IHN0cmluZywgdmFsdWU6IHVua25vd24pOiB2b2lkO1xuICBhZGRNZXRyaWMobmFtZTogc3RyaW5nLCB2YWx1ZTogdW5rbm93bik6IHZvaWQ7XG4gIGFkZEV2YWwobmFtZTogc3RyaW5nLCB2YWx1ZTogdW5rbm93bik6IHZvaWQ7XG59XG5cbi8vIC0tIFNjb3BlTWV0aG9kcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vICQtcHJlZml4ZWQgZXNjYXBlIGhhdGNoZXMuIE5vbi1lbnVtZXJhYmxlIG9uIHRoZSBwcm94eSAtLSBkb24ndCBhcHBlYXIgaW5cbi8vIE9iamVjdC5rZXlzKCksIGRlc3RydWN0dXJpbmcsIG9yIGZvci4uLmluLiBPbmx5IHN0YXRlIGtleXMgYXJlIHZpc2libGUuXG5cbmV4cG9ydCBpbnRlcmZhY2UgU2NvcGVNZXRob2RzIHtcbiAgLy8gU3RhdGUgKHVudHlwZWQgZXNjYXBlIGhhdGNoIC0tIGZvciBkeW5hbWljIGtleXMsIHJlZGFjdGlvbiwgZGVzY3JpcHRpb24pXG4gICRnZXRWYWx1ZShrZXk6IHN0cmluZyk6IHVua25vd247XG4gICRzZXRWYWx1ZShrZXk6IHN0cmluZywgdmFsdWU6IHVua25vd24sIHNob3VsZFJlZGFjdD86IGJvb2xlYW4sIGRlc2NyaXB0aW9uPzogc3RyaW5nKTogdm9pZDtcbiAgJHVwZGF0ZShrZXk6IHN0cmluZywgdmFsdWU6IHVua25vd24sIGRlc2NyaXB0aW9uPzogc3RyaW5nKTogdm9pZDtcbiAgJGRlbGV0ZShrZXk6IHN0cmluZywgZGVzY3JpcHRpb24/OiBzdHJpbmcpOiB2b2lkO1xuICAvKiogUHJveHktc3ludGhlc2l6ZWQ6IGNhbGxzIGdldFZhbHVlKHJvb3RLZXkpIHRoZW4gbG9kYXNoLmdldCBmb3IgbmVzdGVkIHBhdGguIE5vdCBhIGRpcmVjdCBkZWxlZ2F0aW9uLiAqL1xuICAkcmVhZChkb3RQYXRoOiBzdHJpbmcpOiB1bmtub3duO1xuXG4gIC8vIElucHV0ICYgZW52aXJvbm1lbnQgKHJlYWRvbmx5KVxuICAkZ2V0QXJnczxUID0gUmVjb3JkPHN0cmluZywgdW5rbm93bj4+KCk6IFQ7XG4gICRnZXRFbnYoKTogUmVhZG9ubHk8RXhlY3V0aW9uRW52PjtcblxuICAvLyBPYnNlcnZhYmlsaXR5XG4gICRkZWJ1ZyhrZXk6IHN0cmluZywgdmFsdWU6IHVua25vd24pOiB2b2lkO1xuICAkbG9nKHZhbHVlOiB1bmtub3duKTogdm9pZDtcbiAgJGVycm9yKGtleTogc3RyaW5nLCB2YWx1ZTogdW5rbm93bik6IHZvaWQ7XG4gICRtZXRyaWMobmFtZTogc3RyaW5nLCB2YWx1ZTogdW5rbm93bik6IHZvaWQ7XG4gICRldmFsKG5hbWU6IHN0cmluZywgdmFsdWU6IHVua25vd24pOiB2b2lkO1xuXG4gIC8vIFJlY29yZGVyIG1hbmFnZW1lbnRcbiAgJGF0dGFjaFJlY29yZGVyKHJlY29yZGVyOiBSZWNvcmRlcik6IHZvaWQ7XG4gICRkZXRhY2hSZWNvcmRlcihyZWNvcmRlcklkOiBzdHJpbmcpOiB2b2lkO1xuICAkZ2V0UmVjb3JkZXJzKCk6IFJlY29yZGVyW107XG5cbiAgLyoqXG4gICAqIEJhdGNoLW11dGF0ZSBhbiBhcnJheSBrZXkgaW4gYSBzaW5nbGUgY2xvbmUrd3JpdGUgY3ljbGUuXG4gICAqXG4gICAqIEV2ZXJ5IGBzY29wZS5pdGVtcy5wdXNoKHgpYCBjbG9uZXMgdGhlIGVudGlyZSBhcnJheSBhbmQgY29tbWl0cyBpdCDigJQgTyhOKSBwZXIgY2FsbC5cbiAgICogRm9yIE4gbXV0YXRpb25zIG9uIGFuIE0tbGVuZ3RoIGFycmF5IHRoYXQgaXMgTyhOw5dNKS4gVXNlIGAkYmF0Y2hBcnJheWAgdG8gY2xvbmUgb25jZSxcbiAgICogYXBwbHkgYWxsIG11dGF0aW9ucyBpbnNpZGUgYGZuYCwgdGhlbiBjb21taXQgb25jZSDigJQgTyhNKSB0b3RhbC5cbiAgICpcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiAvLyBCZWZvcmU6IDEwMDAgY2xvbmVzIMOXIGdyb3dpbmcgYXJyYXkgPSBPKE7CsilcbiAgICogZm9yIChsZXQgaSA9IDA7IGkgPCAxMDAwOyBpKyspIHNjb3BlLml0ZW1zLnB1c2goaSk7XG4gICAqXG4gICAqIC8vIEFmdGVyOiAxIGNsb25lICsgMSBjb21taXQgPSBPKE4pXG4gICAqIHNjb3BlLiRiYXRjaEFycmF5KCdpdGVtcycsIChhcnIpID0+IHtcbiAgICogICBmb3IgKGxldCBpID0gMDsgaSA8IDEwMDA7IGkrKykgYXJyLnB1c2goaSk7XG4gICAqIH0pO1xuICAgKiBgYGBcbiAgICpcbiAgICogYGZuYCByZWNlaXZlcyBhIHBsYWluIChub24tcHJveHkpIG11dGFibGUgKipzaGFsbG93IGNvcHkqKiBvZiB0aGUgY3VycmVudCBhcnJheS5cbiAgICogVGhlIGFycmF5IGl0c2VsZiBpcyBhIG5ldyBpbnN0YW5jZSwgYnV0IG9iamVjdCByZWZlcmVuY2VzIGluc2lkZSBpdCBhcmUgc2hhcmVkIHdpdGhcbiAgICogdGhlIG9yaWdpbmFsIHN0YXRlIOKAlCBtdXRhdGlvbnMgdG8gbmVzdGVkIG9iamVjdHMgaW5zaWRlIGBmbmAgYWZmZWN0IHRob3NlIG9yaWdpbmFscy5cbiAgICogT25seSBwdXNoL3BvcC9zb3J0L3NwbGljZSBhbmQgb3RoZXIgb3BlcmF0aW9ucyB0aGF0IGNoYW5nZSB0aGUgYXJyYXkncyBvd24gc2xvdHMgYXJlXG4gICAqIHNhZmVseSBpc29sYXRlZC5cbiAgICpcbiAgICogTXV0YXRpb25zIGluc2lkZSBgZm5gIGFyZSBOT1QgdHJhY2tlZCBpbmRpdmlkdWFsbHkg4oCUIG9ubHkgdGhlIGZpbmFsIGNvbW1pdHRlZCBhcnJheVxuICAgKiBhcHBlYXJzIGluIHRoZSBuYXJyYXRpdmUgYXMgYSBzaW5nbGUgd3JpdGUuIElmIHRoZSBrZXkgZG9lcyBub3QgZXhpc3Qgb3IgaXMgbm90IGFuXG4gICAqIGFycmF5LCBgZm5gIHJlY2VpdmVzIGFuIGVtcHR5IGFycmF5IGFuZCB0aGUgcmVzdWx0IGlzIGNvbW1pdHRlZCBhcyB0aGUgbmV3IHZhbHVlLlxuICAgKlxuICAgKiBJZiBgZm5gIHRocm93cywgYHNldFZhbHVlYCBpcyBuZXZlciBjYWxsZWQgYW5kIHN0YXRlIHJlbWFpbnMgdW5jaGFuZ2VkIChhdG9taWMgb25cbiAgICogZXJyb3IpLiBUaGUgZXhjZXB0aW9uIHByb3BhZ2F0ZXMgdG8gdGhlIGNhbGxlci5cbiAgICpcbiAgICogYGtleWAgaXMgdW50eXBlZCAoYHN0cmluZ2ApIOKAlCBUeXBlU2NyaXB0IHdpbGwgbm90IGNhdGNoIHR5cG9zLiBgYXJyYCBpcyB0eXBlZCBhc1xuICAgKiBgdW5rbm93bltdYCBiZWNhdXNlIGBTY29wZU1ldGhvZHNgIGlzIG5vdCBwYXJhbWV0ZXJpemVkIGJ5IGBUYDsgY2FzdCBpbnNpZGUgYGZuYFxuICAgKiB3aGVuIGVsZW1lbnQgdHlwZXMgYXJlIGtub3duOiBgKGFyciBhcyBzdHJpbmdbXSkucHVzaCh4KWAuXG4gICAqL1xuICAkYmF0Y2hBcnJheShrZXk6IHN0cmluZywgZm46IChhcnI6IHVua25vd25bXSkgPT4gdm9pZCk6IHZvaWQ7XG5cbiAgLy8gUGlwZWxpbmUgY29udHJvbFxuICAkYnJlYWsoKTogdm9pZDtcblxuICAvLyBFc2NhcGUgaGF0Y2ggLS0gdW53cmFwIHRvIHVuZGVybHlpbmcgUmVhY3RpdmVUYXJnZXRcbiAgJHRvUmF3KCk6IFJlYWN0aXZlVGFyZ2V0O1xufVxuXG4vLyAtLSBUeXBlZFNjb3BlPFQ+IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBUaGUgY29uc3VtZXItZmFjaW5nIHR5cGUuIFQgaXMgdGhlIHVzZXIncyBzdGF0ZSBpbnRlcmZhY2UuXG4vLyBQcm9wZXJ0eSBhY2Nlc3MgaXMgdHlwZWQ7ICQtbWV0aG9kcyBwcm92aWRlIGVzY2FwZSBoYXRjaGVzLlxuXG5leHBvcnQgdHlwZSBUeXBlZFNjb3BlPFQgZXh0ZW5kcyBvYmplY3QgPSBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4gPSBUICYgU2NvcGVNZXRob2RzO1xuXG4vLyAtLSBSZWFjdGl2ZU9wdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBDb25maWd1cmF0aW9uIHBhc3NlZCB0byBjcmVhdGVUeXBlZFNjb3BlLlxuXG5leHBvcnQgaW50ZXJmYWNlIFJlYWN0aXZlT3B0aW9ucyB7XG4gIC8qKiBQaXBlbGluZSBicmVhayBmdW5jdGlvbiAtLSBpbmplY3RlZCBieSBTdGFnZVJ1bm5lciBhZnRlciBzY29wZSBjcmVhdGlvbi4gKi9cbiAgYnJlYWtQaXBlbGluZT86ICgpID0+IHZvaWQ7XG59XG5cbi8vIC0tIEludGVybmFsOiAkLW1ldGhvZCBuYW1lIHNldCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFVzZWQgYnkgdGhlIFByb3h5IGdldCB0cmFwIHRvIGRpc3Rpbmd1aXNoICQtbWV0aG9kcyBmcm9tIHN0YXRlIGtleXMuXG5cbmV4cG9ydCBjb25zdCBTQ09QRV9NRVRIT0RfTkFNRVMgPSBuZXcgU2V0PHN0cmluZz4oW1xuICAnJGdldFZhbHVlJyxcbiAgJyRzZXRWYWx1ZScsXG4gICckdXBkYXRlJyxcbiAgJyRkZWxldGUnLFxuICAnJHJlYWQnLFxuICAnJGdldEFyZ3MnLFxuICAnJGdldEVudicsXG4gICckZGVidWcnLFxuICAnJGxvZycsXG4gICckZXJyb3InLFxuICAnJG1ldHJpYycsXG4gICckZXZhbCcsXG4gICckYXR0YWNoUmVjb3JkZXInLFxuICAnJGRldGFjaFJlY29yZGVyJyxcbiAgJyRnZXRSZWNvcmRlcnMnLFxuICAnJGJhdGNoQXJyYXknLFxuICAnJGJyZWFrJyxcbiAgJyR0b1JhdycsXG5dKTtcblxuLy8gLS0gSW50ZXJuYWw6IFN5bWJvbCBmb3IgZGVmZXJyZWQgYnJlYWsgaW5qZWN0aW9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gU3RhZ2VSdW5uZXIgc2V0cyB0aGlzIGFmdGVyIHNjb3BlIGNyZWF0aW9uIHNvICRicmVhaygpIHdvcmtzLlxuLy8gUHJpdmF0ZSBTeW1ib2wgKG5vdCBTeW1ib2wuZm9yKSB0byBwcmV2ZW50IGNyb3NzLW1vZHVsZSB0YW1wZXJpbmcuXG5cbmV4cG9ydCBjb25zdCBCUkVBS19TRVRURVIgPSBTeW1ib2woJ2Zvb3RwcmludDpyZWFjdGl2ZTpzZXRCcmVhaycpO1xuXG4vLyAtLSBJbnRlcm5hbDogU3ltYm9sIGZvciBUeXBlZFNjb3BlIGRldGVjdGlvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBVc2VkIGJ5IFN0YWdlUnVubmVyIHRvIHNraXAgY3JlYXRlUHJvdGVjdGVkU2NvcGUgZm9yIFR5cGVkU2NvcGUgaW5zdGFuY2VzLlxuLy8gUHJpdmF0ZSBTeW1ib2wgcHJldmVudHMgc3RyaW5nLXRhZyBzcG9vZmluZy5cblxuZXhwb3J0IGNvbnN0IElTX1RZUEVEX1NDT1BFID0gU3ltYm9sKCdmb290cHJpbnQ6cmVhY3RpdmU6aXNUeXBlZFNjb3BlJyk7XG5cbi8vIC0tIEludGVybmFsOiBleGVjdXRvciBtZXRob2QgYWxsb3dsaXN0IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFNjb3BlRmFjYWRlIG1ldGhvZHMgY2FsbGVkIGJ5IEZsb3dDaGFydEV4ZWN1dG9yIHdyYXBwaW5nIGNvZGUgYW5kIFN0YWdlUnVubmVyXG4vLyBUSFJPVUdIIGEgVHlwZWRTY29wZSBwcm94eS4gT25seSBhZGQgbWV0aG9kcyB3aXRoIGNvbmZpcm1lZCBjYWxsIHNpdGVzLlxuLy8gU2hhcmVkIGJldHdlZW4gY3JlYXRlVHlwZWRTY29wZS50cyBhbmQgU3RhZ2VSdW5uZXIudHMgdG8gcHJldmVudCBkcmlmdC5cblxuZXhwb3J0IGNvbnN0IEVYRUNVVE9SX0lOVEVSTkFMX01FVEhPRFMgPSBuZXcgU2V0KFtcbiAgJ25vdGlmeVN0YWdlU3RhcnQnLCAvLyBTdGFnZVJ1bm5lci5ydW4oKSBsaW5lIDU5XG4gICdub3RpZnlTdGFnZUVuZCcsIC8vIFN0YWdlUnVubmVyLnJ1bigpIGxpbmUgNzlcbiAgJ2F0dGFjaFJlY29yZGVyJywgLy8gRmxvd0NoYXJ0RXhlY3V0b3IuY3JlYXRlVHJhdmVyc2VyKCkg4oCUIG5hcnJhdGl2ZSArIHVzZXIgcmVjb3JkZXJzXG4gICdkZXRhY2hSZWNvcmRlcicsIC8vIEZsb3dDaGFydEV4ZWN1dG9yLmRldGFjaFJlY29yZGVyKClcbiAgJ2dldFJlY29yZGVycycsIC8vIEZsb3dDaGFydEV4ZWN1dG9yLmdldFJlY29yZGVycygpXG4gICd1c2VTaGFyZWRSZWRhY3RlZEtleXMnLCAvLyBGbG93Q2hhcnRFeGVjdXRvci5jcmVhdGVUcmF2ZXJzZXIoKSDigJQgcmVkYWN0aW9uIHdyYXBwaW5nXG4gICd1c2VSZWRhY3Rpb25Qb2xpY3knLCAvLyBGbG93Q2hhcnRFeGVjdXRvci5jcmVhdGVUcmF2ZXJzZXIoKSDigJQgcmVkYWN0aW9uIHdyYXBwaW5nXG5dKTtcbiJdfQ==
54
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL3JlYWN0aXZlL3R5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7OztHQVFHO0FBaUlILCtFQUErRTtBQUMvRSx1RUFBdUU7QUFFdkUsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxHQUFHLENBQVM7SUFDaEQsV0FBVztJQUNYLFdBQVc7SUFDWCxTQUFTO0lBQ1QsU0FBUztJQUNULE9BQU87SUFDUCxVQUFVO0lBQ1YsU0FBUztJQUNULFFBQVE7SUFDUixNQUFNO0lBQ04sUUFBUTtJQUNSLFNBQVM7SUFDVCxPQUFPO0lBQ1AsaUJBQWlCO0lBQ2pCLGlCQUFpQjtJQUNqQixlQUFlO0lBQ2YsYUFBYTtJQUNiLFFBQVE7SUFDUixRQUFRO0NBQ1QsQ0FBQyxDQUFDO0FBRUgsK0VBQStFO0FBQy9FLGdFQUFnRTtBQUNoRSxxRUFBcUU7QUFFckUsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUFHLE1BQU0sQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDO0FBRWxFLCtFQUErRTtBQUMvRSw2RUFBNkU7QUFDN0UsK0NBQStDO0FBRS9DLE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FBRyxNQUFNLENBQUMsaUNBQWlDLENBQUMsQ0FBQztBQUV4RSwrRUFBK0U7QUFDL0UsZ0ZBQWdGO0FBQ2hGLDBFQUEwRTtBQUMxRSwwRUFBMEU7QUFFMUUsTUFBTSxDQUFDLE1BQU0seUJBQXlCLEdBQUcsSUFBSSxHQUFHLENBQUM7SUFDL0Msa0JBQWtCLEVBQUUsNEJBQTRCO0lBQ2hELGdCQUFnQixFQUFFLDRCQUE0QjtJQUM5QyxhQUFhLEVBQUUsc0NBQXNDO0lBQ3JELGdCQUFnQixFQUFFLG1FQUFtRTtJQUNyRixnQkFBZ0IsRUFBRSxxQ0FBcUM7SUFDdkQsY0FBYyxFQUFFLG1DQUFtQztJQUNuRCx1QkFBdUIsRUFBRSwyREFBMkQ7SUFDcEYsb0JBQW9CLEVBQUUsMkRBQTJEO0NBQ2xGLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogcmVhY3RpdmUvdHlwZXMgLS0gVHlwZSBkZWZpbml0aW9ucyBmb3IgdGhlIFR5cGVkU2NvcGU8VD4gcmVhY3RpdmUgcHJveHkgc3lzdGVtLlxuICpcbiAqIFR5cGVkU2NvcGU8VD4gd3JhcHMgYSBSZWFjdGl2ZVRhcmdldCAoU2NvcGVGYWNhZGUpIGluIGEgUHJveHkgdGhhdCBwcm92aWRlc1xuICogdHlwZWQgcHJvcGVydHkgYWNjZXNzLiBBbGwgc2NvcGUgaW5mcmFzdHJ1Y3R1cmUgbWV0aG9kcyBhcmUgJC1wcmVmaXhlZCB0b1xuICogYXZvaWQgY29sbGlzaW9ucyB3aXRoIHVzZXIgc3RhdGUga2V5cy5cbiAqXG4gKiBEZXBlbmRlbmN5OiB0eXBlLW9ubHkgaW1wb3J0cyBmcm9tIGVuZ2luZS8gYW5kIHNjb3BlLyAoemVybyBydW50aW1lIGNvc3QpLlxuICovXG5cbmltcG9ydCB0eXBlIHsgRXhlY3V0aW9uRW52IH0gZnJvbSAnLi4vZW5naW5lL3R5cGVzLmpzJztcbmltcG9ydCB0eXBlIHsgUmVjb3JkZXIgfSBmcm9tICcuLi9zY29wZS90eXBlcy5qcyc7XG5cbi8vIC0tIFJlYWN0aXZlVGFyZ2V0IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIE1pbmltdW0gcHJvdG9jb2wgcmVxdWlyZWQgYnkgVHlwZWRTY29wZSAtLSBhIGN1cmF0ZWQgc3Vic2V0IG9mIFNjb3BlRmFjYWRlJ3Ncbi8vIHB1YmxpYyBBUEkuIE5vdCBhIGZ1bGwgbWlycm9yOiBleGNsdWRlcyBpbnRlcm5hbC9yZWRhY3Rpb24gbWV0aG9kcyB0aGF0IGFyZVxuLy8gaGFuZGxlZCBhdCB0aGUgZXhlY3V0b3IgbGV2ZWwgKHVzZVJlZGFjdGlvblBvbGljeSwgdXNlU2hhcmVkUmVkYWN0ZWRLZXlzLCBldGMuKVxuLy8gYW5kIGluZnJhc3RydWN0dXJlIG1ldGhvZHMgKGdldFBpcGVsaW5lSWQsIHNldEdsb2JhbCwgZ2V0R2xvYmFsLCBldGMuKS5cblxuZXhwb3J0IGludGVyZmFjZSBSZWFjdGl2ZVRhcmdldCB7XG4gIC8vIFN0YXRlIGFjY2VzcyAodHJhY2tlZCBieSByZWNvcmRlcnMpXG4gIGdldFZhbHVlKGtleT86IHN0cmluZyk6IHVua25vd247XG4gIHNldFZhbHVlKGtleTogc3RyaW5nLCB2YWx1ZTogdW5rbm93biwgc2hvdWxkUmVkYWN0PzogYm9vbGVhbiwgZGVzY3JpcHRpb24/OiBzdHJpbmcpOiB2b2lkO1xuICB1cGRhdGVWYWx1ZShrZXk6IHN0cmluZywgdmFsdWU6IHVua25vd24sIGRlc2NyaXB0aW9uPzogc3RyaW5nKTogdm9pZDtcbiAgZGVsZXRlVmFsdWUoa2V5OiBzdHJpbmcsIGRlc2NyaXB0aW9uPzogc3RyaW5nKTogdm9pZDtcblxuICAvLyBOb24tdHJhY2tpbmcgc3RhdGUgaW5zcGVjdGlvbiAoZm9yIHByb3h5IGludGVybmFscyDigJQgbm8gcmVjb3JkZXIgZGlzcGF0Y2gpXG4gIC8qKiBSZXR1cm5zIGFsbCBzdGF0ZSBrZXlzIHdpdGhvdXQgZmlyaW5nIG9uUmVhZC4gVXNlZCBieSBvd25LZXlzL2hhcyB0cmFwcy4gKi9cbiAgZ2V0U3RhdGVLZXlzPygpOiBzdHJpbmdbXTtcbiAgLyoqIENoZWNrIGtleSBleGlzdGVuY2Ugd2l0aG91dCBmaXJpbmcgb25SZWFkLiBVc2VkIGJ5IGhhcyB0cmFwLiAqL1xuICBoYXNLZXk/KGtleTogc3RyaW5nKTogYm9vbGVhbjtcbiAgLyoqIFJlYWQgc3RhdGUgd2l0aG91dCBmaXJpbmcgb25SZWFkLiBVc2VkIGJ5IGFycmF5IHByb3h5IGdldEN1cnJlbnQoKS4gKi9cbiAgZ2V0VmFsdWVTaWxlbnQ/KGtleT86IHN0cmluZyk6IHVua25vd247XG5cbiAgLy8gSW5wdXQgJiBlbnZpcm9ubWVudCAocmVhZG9ubHksIE5PVCB0cmFja2VkKVxuICBnZXRBcmdzPFQgPSBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4oKTogVDtcbiAgZ2V0RW52KCk6IFJlYWRvbmx5PEV4ZWN1dGlvbkVudj47XG5cbiAgLy8gUmVjb3JkZXIgbWFuYWdlbWVudFxuICBhdHRhY2hSZWNvcmRlcihyZWNvcmRlcjogUmVjb3JkZXIpOiB2b2lkO1xuICBkZXRhY2hSZWNvcmRlcihyZWNvcmRlcklkOiBzdHJpbmcpOiB2b2lkO1xuICBnZXRSZWNvcmRlcnMoKTogUmVjb3JkZXJbXTtcblxuICAvLyBEaWFnbm9zdGljc1xuICBhZGREZWJ1Z0luZm8oa2V5OiBzdHJpbmcsIHZhbHVlOiB1bmtub3duKTogdm9pZDtcbiAgYWRkRGVidWdNZXNzYWdlKHZhbHVlOiB1bmtub3duKTogdm9pZDtcbiAgYWRkRXJyb3JJbmZvKGtleTogc3RyaW5nLCB2YWx1ZTogdW5rbm93bik6IHZvaWQ7XG4gIGFkZE1ldHJpYyhuYW1lOiBzdHJpbmcsIHZhbHVlOiB1bmtub3duKTogdm9pZDtcbiAgYWRkRXZhbChuYW1lOiBzdHJpbmcsIHZhbHVlOiB1bmtub3duKTogdm9pZDtcbn1cblxuLy8gLS0gU2NvcGVNZXRob2RzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gJC1wcmVmaXhlZCBlc2NhcGUgaGF0Y2hlcy4gTm9uLWVudW1lcmFibGUgb24gdGhlIHByb3h5IC0tIGRvbid0IGFwcGVhciBpblxuLy8gT2JqZWN0LmtleXMoKSwgZGVzdHJ1Y3R1cmluZywgb3IgZm9yLi4uaW4uIE9ubHkgc3RhdGUga2V5cyBhcmUgdmlzaWJsZS5cblxuZXhwb3J0IGludGVyZmFjZSBTY29wZU1ldGhvZHMge1xuICAvLyBTdGF0ZSAodW50eXBlZCBlc2NhcGUgaGF0Y2ggLS0gZm9yIGR5bmFtaWMga2V5cywgcmVkYWN0aW9uLCBkZXNjcmlwdGlvbilcbiAgJGdldFZhbHVlKGtleTogc3RyaW5nKTogdW5rbm93bjtcbiAgJHNldFZhbHVlKGtleTogc3RyaW5nLCB2YWx1ZTogdW5rbm93biwgc2hvdWxkUmVkYWN0PzogYm9vbGVhbiwgZGVzY3JpcHRpb24/OiBzdHJpbmcpOiB2b2lkO1xuICAkdXBkYXRlKGtleTogc3RyaW5nLCB2YWx1ZTogdW5rbm93biwgZGVzY3JpcHRpb24/OiBzdHJpbmcpOiB2b2lkO1xuICAkZGVsZXRlKGtleTogc3RyaW5nLCBkZXNjcmlwdGlvbj86IHN0cmluZyk6IHZvaWQ7XG4gIC8qKiBQcm94eS1zeW50aGVzaXplZDogY2FsbHMgZ2V0VmFsdWUocm9vdEtleSkgdGhlbiBsb2Rhc2guZ2V0IGZvciBuZXN0ZWQgcGF0aC4gTm90IGEgZGlyZWN0IGRlbGVnYXRpb24uICovXG4gICRyZWFkKGRvdFBhdGg6IHN0cmluZyk6IHVua25vd247XG5cbiAgLy8gSW5wdXQgJiBlbnZpcm9ubWVudCAocmVhZG9ubHkpXG4gICRnZXRBcmdzPFQgPSBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4oKTogVDtcbiAgJGdldEVudigpOiBSZWFkb25seTxFeGVjdXRpb25FbnY+O1xuXG4gIC8vIE9ic2VydmFiaWxpdHlcbiAgJGRlYnVnKGtleTogc3RyaW5nLCB2YWx1ZTogdW5rbm93bik6IHZvaWQ7XG4gICRsb2codmFsdWU6IHVua25vd24pOiB2b2lkO1xuICAkZXJyb3Ioa2V5OiBzdHJpbmcsIHZhbHVlOiB1bmtub3duKTogdm9pZDtcbiAgJG1ldHJpYyhuYW1lOiBzdHJpbmcsIHZhbHVlOiB1bmtub3duKTogdm9pZDtcbiAgJGV2YWwobmFtZTogc3RyaW5nLCB2YWx1ZTogdW5rbm93bik6IHZvaWQ7XG5cbiAgLy8gUmVjb3JkZXIgbWFuYWdlbWVudFxuICAkYXR0YWNoUmVjb3JkZXIocmVjb3JkZXI6IFJlY29yZGVyKTogdm9pZDtcbiAgJGRldGFjaFJlY29yZGVyKHJlY29yZGVySWQ6IHN0cmluZyk6IHZvaWQ7XG4gICRnZXRSZWNvcmRlcnMoKTogUmVjb3JkZXJbXTtcblxuICAvKipcbiAgICogQmF0Y2gtbXV0YXRlIGFuIGFycmF5IGtleSBpbiBhIHNpbmdsZSBjbG9uZSt3cml0ZSBjeWNsZS5cbiAgICpcbiAgICogRXZlcnkgYHNjb3BlLml0ZW1zLnB1c2goeClgIGNsb25lcyB0aGUgZW50aXJlIGFycmF5IGFuZCBjb21taXRzIGl0IOKAlCBPKE4pIHBlciBjYWxsLlxuICAgKiBGb3IgTiBtdXRhdGlvbnMgb24gYW4gTS1sZW5ndGggYXJyYXkgdGhhdCBpcyBPKE7Dl00pLiBVc2UgYCRiYXRjaEFycmF5YCB0byBjbG9uZSBvbmNlLFxuICAgKiBhcHBseSBhbGwgbXV0YXRpb25zIGluc2lkZSBgZm5gLCB0aGVuIGNvbW1pdCBvbmNlIOKAlCBPKE0pIHRvdGFsLlxuICAgKlxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIC8vIEJlZm9yZTogMTAwMCBjbG9uZXMgw5cgZ3Jvd2luZyBhcnJheSA9IE8oTsKyKVxuICAgKiBmb3IgKGxldCBpID0gMDsgaSA8IDEwMDA7IGkrKykgc2NvcGUuaXRlbXMucHVzaChpKTtcbiAgICpcbiAgICogLy8gQWZ0ZXI6IDEgY2xvbmUgKyAxIGNvbW1pdCA9IE8oTilcbiAgICogc2NvcGUuJGJhdGNoQXJyYXkoJ2l0ZW1zJywgKGFycikgPT4ge1xuICAgKiAgIGZvciAobGV0IGkgPSAwOyBpIDwgMTAwMDsgaSsrKSBhcnIucHVzaChpKTtcbiAgICogfSk7XG4gICAqIGBgYFxuICAgKlxuICAgKiBgZm5gIHJlY2VpdmVzIGEgcGxhaW4gKG5vbi1wcm94eSkgbXV0YWJsZSAqKnNoYWxsb3cgY29weSoqIG9mIHRoZSBjdXJyZW50IGFycmF5LlxuICAgKiBUaGUgYXJyYXkgaXRzZWxmIGlzIGEgbmV3IGluc3RhbmNlLCBidXQgb2JqZWN0IHJlZmVyZW5jZXMgaW5zaWRlIGl0IGFyZSBzaGFyZWQgd2l0aFxuICAgKiB0aGUgb3JpZ2luYWwgc3RhdGUg4oCUIG11dGF0aW9ucyB0byBuZXN0ZWQgb2JqZWN0cyBpbnNpZGUgYGZuYCBhZmZlY3QgdGhvc2Ugb3JpZ2luYWxzLlxuICAgKiBPbmx5IHB1c2gvcG9wL3NvcnQvc3BsaWNlIGFuZCBvdGhlciBvcGVyYXRpb25zIHRoYXQgY2hhbmdlIHRoZSBhcnJheSdzIG93biBzbG90cyBhcmVcbiAgICogc2FmZWx5IGlzb2xhdGVkLlxuICAgKlxuICAgKiBNdXRhdGlvbnMgaW5zaWRlIGBmbmAgYXJlIE5PVCB0cmFja2VkIGluZGl2aWR1YWxseSDigJQgb25seSB0aGUgZmluYWwgY29tbWl0dGVkIGFycmF5XG4gICAqIGFwcGVhcnMgaW4gdGhlIG5hcnJhdGl2ZSBhcyBhIHNpbmdsZSB3cml0ZS4gSWYgdGhlIGtleSBkb2VzIG5vdCBleGlzdCBvciBpcyBub3QgYW5cbiAgICogYXJyYXksIGBmbmAgcmVjZWl2ZXMgYW4gZW1wdHkgYXJyYXkgYW5kIHRoZSByZXN1bHQgaXMgY29tbWl0dGVkIGFzIHRoZSBuZXcgdmFsdWUuXG4gICAqXG4gICAqIElmIGBmbmAgdGhyb3dzLCBgc2V0VmFsdWVgIGlzIG5ldmVyIGNhbGxlZCBhbmQgc3RhdGUgcmVtYWlucyB1bmNoYW5nZWQgKGF0b21pYyBvblxuICAgKiBlcnJvcikuIFRoZSBleGNlcHRpb24gcHJvcGFnYXRlcyB0byB0aGUgY2FsbGVyLlxuICAgKlxuICAgKiBga2V5YCBpcyB1bnR5cGVkIChgc3RyaW5nYCkg4oCUIFR5cGVTY3JpcHQgd2lsbCBub3QgY2F0Y2ggdHlwb3MuIGBhcnJgIGlzIHR5cGVkIGFzXG4gICAqIGB1bmtub3duW11gIGJlY2F1c2UgYFNjb3BlTWV0aG9kc2AgaXMgbm90IHBhcmFtZXRlcml6ZWQgYnkgYFRgOyBjYXN0IGluc2lkZSBgZm5gXG4gICAqIHdoZW4gZWxlbWVudCB0eXBlcyBhcmUga25vd246IGAoYXJyIGFzIHN0cmluZ1tdKS5wdXNoKHgpYC5cbiAgICovXG4gICRiYXRjaEFycmF5KGtleTogc3RyaW5nLCBmbjogKGFycjogdW5rbm93bltdKSA9PiB2b2lkKTogdm9pZDtcblxuICAvLyBQaXBlbGluZSBjb250cm9sXG4gICRicmVhaygpOiB2b2lkO1xuXG4gIC8vIEVzY2FwZSBoYXRjaCAtLSB1bndyYXAgdG8gdW5kZXJseWluZyBSZWFjdGl2ZVRhcmdldFxuICAkdG9SYXcoKTogUmVhY3RpdmVUYXJnZXQ7XG59XG5cbi8vIC0tIFR5cGVkU2NvcGU8VD4gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFRoZSBjb25zdW1lci1mYWNpbmcgdHlwZS4gVCBpcyB0aGUgdXNlcidzIHN0YXRlIGludGVyZmFjZS5cbi8vIFByb3BlcnR5IGFjY2VzcyBpcyB0eXBlZDsgJC1tZXRob2RzIHByb3ZpZGUgZXNjYXBlIGhhdGNoZXMuXG5cbmV4cG9ydCB0eXBlIFR5cGVkU2NvcGU8VCBleHRlbmRzIG9iamVjdCA9IFJlY29yZDxzdHJpbmcsIHVua25vd24+PiA9IFQgJiBTY29wZU1ldGhvZHM7XG5cbi8vIC0tIFJlYWN0aXZlT3B0aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIENvbmZpZ3VyYXRpb24gcGFzc2VkIHRvIGNyZWF0ZVR5cGVkU2NvcGUuXG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVhY3RpdmVPcHRpb25zIHtcbiAgLyoqIFBpcGVsaW5lIGJyZWFrIGZ1bmN0aW9uIC0tIGluamVjdGVkIGJ5IFN0YWdlUnVubmVyIGFmdGVyIHNjb3BlIGNyZWF0aW9uLiAqL1xuICBicmVha1BpcGVsaW5lPzogKCkgPT4gdm9pZDtcbn1cblxuLy8gLS0gSW50ZXJuYWw6ICQtbWV0aG9kIG5hbWUgc2V0IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gVXNlZCBieSB0aGUgUHJveHkgZ2V0IHRyYXAgdG8gZGlzdGluZ3Vpc2ggJC1tZXRob2RzIGZyb20gc3RhdGUga2V5cy5cblxuZXhwb3J0IGNvbnN0IFNDT1BFX01FVEhPRF9OQU1FUyA9IG5ldyBTZXQ8c3RyaW5nPihbXG4gICckZ2V0VmFsdWUnLFxuICAnJHNldFZhbHVlJyxcbiAgJyR1cGRhdGUnLFxuICAnJGRlbGV0ZScsXG4gICckcmVhZCcsXG4gICckZ2V0QXJncycsXG4gICckZ2V0RW52JyxcbiAgJyRkZWJ1ZycsXG4gICckbG9nJyxcbiAgJyRlcnJvcicsXG4gICckbWV0cmljJyxcbiAgJyRldmFsJyxcbiAgJyRhdHRhY2hSZWNvcmRlcicsXG4gICckZGV0YWNoUmVjb3JkZXInLFxuICAnJGdldFJlY29yZGVycycsXG4gICckYmF0Y2hBcnJheScsXG4gICckYnJlYWsnLFxuICAnJHRvUmF3Jyxcbl0pO1xuXG4vLyAtLSBJbnRlcm5hbDogU3ltYm9sIGZvciBkZWZlcnJlZCBicmVhayBpbmplY3Rpb24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBTdGFnZVJ1bm5lciBzZXRzIHRoaXMgYWZ0ZXIgc2NvcGUgY3JlYXRpb24gc28gJGJyZWFrKCkgd29ya3MuXG4vLyBQcml2YXRlIFN5bWJvbCAobm90IFN5bWJvbC5mb3IpIHRvIHByZXZlbnQgY3Jvc3MtbW9kdWxlIHRhbXBlcmluZy5cblxuZXhwb3J0IGNvbnN0IEJSRUFLX1NFVFRFUiA9IFN5bWJvbCgnZm9vdHByaW50OnJlYWN0aXZlOnNldEJyZWFrJyk7XG5cbi8vIC0tIEludGVybmFsOiBTeW1ib2wgZm9yIFR5cGVkU2NvcGUgZGV0ZWN0aW9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFVzZWQgYnkgU3RhZ2VSdW5uZXIgdG8gc2tpcCBjcmVhdGVQcm90ZWN0ZWRTY29wZSBmb3IgVHlwZWRTY29wZSBpbnN0YW5jZXMuXG4vLyBQcml2YXRlIFN5bWJvbCBwcmV2ZW50cyBzdHJpbmctdGFnIHNwb29maW5nLlxuXG5leHBvcnQgY29uc3QgSVNfVFlQRURfU0NPUEUgPSBTeW1ib2woJ2Zvb3RwcmludDpyZWFjdGl2ZTppc1R5cGVkU2NvcGUnKTtcblxuLy8gLS0gSW50ZXJuYWw6IGV4ZWN1dG9yIG1ldGhvZCBhbGxvd2xpc3QgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gU2NvcGVGYWNhZGUgbWV0aG9kcyBjYWxsZWQgYnkgRmxvd0NoYXJ0RXhlY3V0b3Igd3JhcHBpbmcgY29kZSBhbmQgU3RhZ2VSdW5uZXJcbi8vIFRIUk9VR0ggYSBUeXBlZFNjb3BlIHByb3h5LiBPbmx5IGFkZCBtZXRob2RzIHdpdGggY29uZmlybWVkIGNhbGwgc2l0ZXMuXG4vLyBTaGFyZWQgYmV0d2VlbiBjcmVhdGVUeXBlZFNjb3BlLnRzIGFuZCBTdGFnZVJ1bm5lci50cyB0byBwcmV2ZW50IGRyaWZ0LlxuXG5leHBvcnQgY29uc3QgRVhFQ1VUT1JfSU5URVJOQUxfTUVUSE9EUyA9IG5ldyBTZXQoW1xuICAnbm90aWZ5U3RhZ2VTdGFydCcsIC8vIFN0YWdlUnVubmVyLnJ1bigpIGxpbmUgNTlcbiAgJ25vdGlmeVN0YWdlRW5kJywgLy8gU3RhZ2VSdW5uZXIucnVuKCkgbGluZSA3OVxuICAnbm90aWZ5UGF1c2UnLCAvLyBTdGFnZVJ1bm5lci5ydW4oKSDigJQgcGF1c2UgZGV0ZWN0aW9uXG4gICdhdHRhY2hSZWNvcmRlcicsIC8vIEZsb3dDaGFydEV4ZWN1dG9yLmNyZWF0ZVRyYXZlcnNlcigpIOKAlCBuYXJyYXRpdmUgKyB1c2VyIHJlY29yZGVyc1xuICAnZGV0YWNoUmVjb3JkZXInLCAvLyBGbG93Q2hhcnRFeGVjdXRvci5kZXRhY2hSZWNvcmRlcigpXG4gICdnZXRSZWNvcmRlcnMnLCAvLyBGbG93Q2hhcnRFeGVjdXRvci5nZXRSZWNvcmRlcnMoKVxuICAndXNlU2hhcmVkUmVkYWN0ZWRLZXlzJywgLy8gRmxvd0NoYXJ0RXhlY3V0b3IuY3JlYXRlVHJhdmVyc2VyKCkg4oCUIHJlZGFjdGlvbiB3cmFwcGluZ1xuICAndXNlUmVkYWN0aW9uUG9saWN5JywgLy8gRmxvd0NoYXJ0RXhlY3V0b3IuY3JlYXRlVHJhdmVyc2VyKCkg4oCUIHJlZGFjdGlvbiB3cmFwcGluZ1xuXSk7XG4iXX0=
@@ -0,0 +1,172 @@
1
+ /**
2
+ * CompositeRecorder — fan-out a single recorder attachment to multiple child recorders.
3
+ *
4
+ * Implements both Recorder (scope data ops) and FlowRecorder (control flow events)
5
+ * so it works with both `executor.attachRecorder()` and `executor.attachFlowRecorder()`.
6
+ *
7
+ * The composite has a single ID for idempotent attach/detach. Child recorders
8
+ * keep their own IDs internally but are not individually visible to the executor.
9
+ *
10
+ * Domain libraries (e.g., agentfootprint) use this to bundle multiple recorders
11
+ * into a single preset — the consumer calls one function, gets full observability.
12
+ *
13
+ * @example
14
+ * ```typescript
15
+ * import { CompositeRecorder, MetricRecorder, DebugRecorder } from 'footprintjs';
16
+ *
17
+ * // Bundle metrics + debug into a single recorder
18
+ * const observability = new CompositeRecorder('observability', [
19
+ * new MetricRecorder({ stageFilter: (name) => name === 'CallLLM' }),
20
+ * new DebugRecorder({ verbosity: 'minimal' }),
21
+ * ]);
22
+ *
23
+ * executor.attachRecorder(observability);
24
+ *
25
+ * // Access child recorders by type
26
+ * const metrics = observability.get(MetricRecorder);
27
+ * metrics?.getMetrics(); // timing data
28
+ * ```
29
+ *
30
+ * @example
31
+ * ```typescript
32
+ * // Domain library preset (e.g., agentfootprint)
33
+ * export function agentObservability(options?: AgentObservabilityOptions) {
34
+ * return new CompositeRecorder('agent-observability', [
35
+ * new MetricRecorder(options?.stageFilter ? { stageFilter: options.stageFilter } : undefined),
36
+ * new TokenRecorder(),
37
+ * new ToolUsageRecorder(),
38
+ * ]);
39
+ * }
40
+ *
41
+ * // Consumer
42
+ * executor.attachRecorder(agentObservability());
43
+ * ```
44
+ */
45
+ export class CompositeRecorder {
46
+ constructor(id, children) {
47
+ this.id = id;
48
+ this.children = [...children];
49
+ }
50
+ // ── Child access ──────────────────────────────────────────────────────
51
+ /**
52
+ * Get a child recorder by class type.
53
+ *
54
+ * @example
55
+ * ```typescript
56
+ * const metrics = composite.get(MetricRecorder);
57
+ * ```
58
+ */
59
+ get(type) {
60
+ return this.children.find((c) => c instanceof type);
61
+ }
62
+ /** Get all child recorders. */
63
+ getChildren() {
64
+ return this.children;
65
+ }
66
+ // ── Scope Recorder hooks (fan-out to children that implement Recorder) ─
67
+ onRead(event) {
68
+ for (const c of this.children)
69
+ if (c.onRead)
70
+ c.onRead(event);
71
+ }
72
+ onWrite(event) {
73
+ for (const c of this.children)
74
+ if (c.onWrite)
75
+ c.onWrite(event);
76
+ }
77
+ onCommit(event) {
78
+ for (const c of this.children)
79
+ if (c.onCommit)
80
+ c.onCommit(event);
81
+ }
82
+ onError(event) {
83
+ for (const c of this.children)
84
+ if (c.onError)
85
+ c.onError(event);
86
+ }
87
+ onStageStart(event) {
88
+ for (const c of this.children)
89
+ if (c.onStageStart)
90
+ c.onStageStart(event);
91
+ }
92
+ onStageEnd(event) {
93
+ for (const c of this.children)
94
+ if (c.onStageEnd)
95
+ c.onStageEnd(event);
96
+ }
97
+ // ── FlowRecorder hooks (fan-out to children that implement FlowRecorder) ─
98
+ onStageExecuted(event) {
99
+ for (const c of this.children)
100
+ if (c.onStageExecuted)
101
+ c.onStageExecuted(event);
102
+ }
103
+ onNext(event) {
104
+ for (const c of this.children)
105
+ if (c.onNext)
106
+ c.onNext(event);
107
+ }
108
+ onDecision(event) {
109
+ for (const c of this.children)
110
+ if (c.onDecision)
111
+ c.onDecision(event);
112
+ }
113
+ onFork(event) {
114
+ for (const c of this.children)
115
+ if (c.onFork)
116
+ c.onFork(event);
117
+ }
118
+ onSelected(event) {
119
+ for (const c of this.children)
120
+ if (c.onSelected)
121
+ c.onSelected(event);
122
+ }
123
+ onSubflowEntry(event) {
124
+ for (const c of this.children)
125
+ if (c.onSubflowEntry)
126
+ c.onSubflowEntry(event);
127
+ }
128
+ onSubflowExit(event) {
129
+ for (const c of this.children)
130
+ if (c.onSubflowExit)
131
+ c.onSubflowExit(event);
132
+ }
133
+ onSubflowRegistered(event) {
134
+ for (const c of this.children)
135
+ if (c.onSubflowRegistered)
136
+ c.onSubflowRegistered(event);
137
+ }
138
+ onLoop(event) {
139
+ for (const c of this.children)
140
+ if (c.onLoop)
141
+ c.onLoop(event);
142
+ }
143
+ onBreak(event) {
144
+ for (const c of this.children)
145
+ if (c.onBreak)
146
+ c.onBreak(event);
147
+ }
148
+ // ── Lifecycle ─────────────────────────────────────────────────────────
149
+ clear() {
150
+ for (const c of this.children)
151
+ if (c.clear)
152
+ c.clear();
153
+ }
154
+ /**
155
+ * Snapshot merges all child snapshots into a single composite entry.
156
+ * Each child's snapshot is preserved with its own id/name/data.
157
+ */
158
+ toSnapshot() {
159
+ const childSnapshots = [];
160
+ for (const c of this.children) {
161
+ if (c.toSnapshot) {
162
+ const { name, data } = c.toSnapshot();
163
+ childSnapshots.push({ id: c.id, name, data });
164
+ }
165
+ }
166
+ return {
167
+ name: 'Composite',
168
+ data: { children: childSnapshots },
169
+ };
170
+ }
171
+ }
172
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29tcG9zaXRlUmVjb3JkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL3JlY29yZGVyL0NvbXBvc2l0ZVJlY29yZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBMkNHO0FBeUJILE1BQU0sT0FBTyxpQkFBaUI7SUFJNUIsWUFBWSxFQUFVLEVBQUUsUUFBd0M7UUFDOUQsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUM7UUFDYixJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsR0FBRyxRQUFRLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBRUQseUVBQXlFO0lBRXpFOzs7Ozs7O09BT0c7SUFDSCxHQUFHLENBQUksSUFBK0I7UUFDcEMsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxZQUFZLElBQUksQ0FBa0IsQ0FBQztJQUN2RSxDQUFDO0lBRUQsK0JBQStCO0lBQy9CLFdBQVc7UUFDVCxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUM7SUFDdkIsQ0FBQztJQUVELDBFQUEwRTtJQUUxRSxNQUFNLENBQUMsS0FBZ0I7UUFDckIsS0FBSyxNQUFNLENBQUMsSUFBSSxJQUFJLENBQUMsUUFBUTtZQUFFLElBQUssQ0FBYyxDQUFDLE1BQU07Z0JBQUcsQ0FBYyxDQUFDLE1BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM1RixDQUFDO0lBRUQsT0FBTyxDQUFDLEtBQWlCO1FBQ3ZCLEtBQUssTUFBTSxDQUFDLElBQUksSUFBSSxDQUFDLFFBQVE7WUFBRSxJQUFLLENBQWMsQ0FBQyxPQUFPO2dCQUFHLENBQWMsQ0FBQyxPQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDOUYsQ0FBQztJQUVELFFBQVEsQ0FBQyxLQUFrQjtRQUN6QixLQUFLLE1BQU0sQ0FBQyxJQUFJLElBQUksQ0FBQyxRQUFRO1lBQUUsSUFBSyxDQUFjLENBQUMsUUFBUTtnQkFBRyxDQUFjLENBQUMsUUFBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2hHLENBQUM7SUFFRCxPQUFPLENBQUMsS0FBa0M7UUFDeEMsS0FBSyxNQUFNLENBQUMsSUFBSSxJQUFJLENBQUMsUUFBUTtZQUFFLElBQUssQ0FBYyxDQUFDLE9BQU87Z0JBQUcsQ0FBYyxDQUFDLE9BQVEsQ0FBQyxLQUFZLENBQUMsQ0FBQztJQUNyRyxDQUFDO0lBRUQsWUFBWSxDQUFDLEtBQWlCO1FBQzVCLEtBQUssTUFBTSxDQUFDLElBQUksSUFBSSxDQUFDLFFBQVE7WUFBRSxJQUFLLENBQWMsQ0FBQyxZQUFZO2dCQUFHLENBQWMsQ0FBQyxZQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDeEcsQ0FBQztJQUVELFVBQVUsQ0FBQyxLQUFpQjtRQUMxQixLQUFLLE1BQU0sQ0FBQyxJQUFJLElBQUksQ0FBQyxRQUFRO1lBQUUsSUFBSyxDQUFjLENBQUMsVUFBVTtnQkFBRyxDQUFjLENBQUMsVUFBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3BHLENBQUM7SUFFRCw0RUFBNEU7SUFFNUUsZUFBZSxDQUFDLEtBQXFCO1FBQ25DLEtBQUssTUFBTSxDQUFDLElBQUksSUFBSSxDQUFDLFFBQVE7WUFBRSxJQUFLLENBQWtCLENBQUMsZUFBZTtnQkFBRyxDQUFrQixDQUFDLGVBQWdCLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDdEgsQ0FBQztJQUVELE1BQU0sQ0FBQyxLQUFvQjtRQUN6QixLQUFLLE1BQU0sQ0FBQyxJQUFJLElBQUksQ0FBQyxRQUFRO1lBQUUsSUFBSyxDQUFrQixDQUFDLE1BQU07Z0JBQUcsQ0FBa0IsQ0FBQyxNQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDcEcsQ0FBQztJQUVELFVBQVUsQ0FBQyxLQUF3QjtRQUNqQyxLQUFLLE1BQU0sQ0FBQyxJQUFJLElBQUksQ0FBQyxRQUFRO1lBQUUsSUFBSyxDQUFrQixDQUFDLFVBQVU7Z0JBQUcsQ0FBa0IsQ0FBQyxVQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDNUcsQ0FBQztJQUVELE1BQU0sQ0FBQyxLQUFvQjtRQUN6QixLQUFLLE1BQU0sQ0FBQyxJQUFJLElBQUksQ0FBQyxRQUFRO1lBQUUsSUFBSyxDQUFrQixDQUFDLE1BQU07Z0JBQUcsQ0FBa0IsQ0FBQyxNQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDcEcsQ0FBQztJQUVELFVBQVUsQ0FBQyxLQUF3QjtRQUNqQyxLQUFLLE1BQU0sQ0FBQyxJQUFJLElBQUksQ0FBQyxRQUFRO1lBQUUsSUFBSyxDQUFrQixDQUFDLFVBQVU7Z0JBQUcsQ0FBa0IsQ0FBQyxVQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDNUcsQ0FBQztJQUVELGNBQWMsQ0FBQyxLQUF1QjtRQUNwQyxLQUFLLE1BQU0sQ0FBQyxJQUFJLElBQUksQ0FBQyxRQUFRO1lBQUUsSUFBSyxDQUFrQixDQUFDLGNBQWM7Z0JBQUcsQ0FBa0IsQ0FBQyxjQUFlLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDcEgsQ0FBQztJQUVELGFBQWEsQ0FBQyxLQUF1QjtRQUNuQyxLQUFLLE1BQU0sQ0FBQyxJQUFJLElBQUksQ0FBQyxRQUFRO1lBQUUsSUFBSyxDQUFrQixDQUFDLGFBQWE7Z0JBQUcsQ0FBa0IsQ0FBQyxhQUFjLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDbEgsQ0FBQztJQUVELG1CQUFtQixDQUFDLEtBQWlDO1FBQ25ELEtBQUssTUFBTSxDQUFDLElBQUksSUFBSSxDQUFDLFFBQVE7WUFDM0IsSUFBSyxDQUFrQixDQUFDLG1CQUFtQjtnQkFBRyxDQUFrQixDQUFDLG1CQUFvQixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2pHLENBQUM7SUFFRCxNQUFNLENBQUMsS0FBb0I7UUFDekIsS0FBSyxNQUFNLENBQUMsSUFBSSxJQUFJLENBQUMsUUFBUTtZQUFFLElBQUssQ0FBa0IsQ0FBQyxNQUFNO2dCQUFHLENBQWtCLENBQUMsTUFBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3BHLENBQUM7SUFFRCxPQUFPLENBQUMsS0FBcUI7UUFDM0IsS0FBSyxNQUFNLENBQUMsSUFBSSxJQUFJLENBQUMsUUFBUTtZQUFFLElBQUssQ0FBa0IsQ0FBQyxPQUFPO2dCQUFHLENBQWtCLENBQUMsT0FBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3RHLENBQUM7SUFFRCx5RUFBeUU7SUFFekUsS0FBSztRQUNILEtBQUssTUFBTSxDQUFDLElBQUksSUFBSSxDQUFDLFFBQVE7WUFBRSxJQUFJLENBQUMsQ0FBQyxLQUFLO2dCQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUN4RCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsVUFBVTtRQUNSLE1BQU0sY0FBYyxHQUF1RCxFQUFFLENBQUM7UUFDOUUsS0FBSyxNQUFNLENBQUMsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDOUIsSUFBSSxDQUFDLENBQUMsVUFBVSxFQUFFLENBQUM7Z0JBQ2pCLE1BQU0sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLFVBQVUsRUFBRSxDQUFDO2dCQUN0QyxjQUFjLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7WUFDaEQsQ0FBQztRQUNILENBQUM7UUFDRCxPQUFPO1lBQ0wsSUFBSSxFQUFFLFdBQVc7WUFDakIsSUFBSSxFQUFFLEVBQUUsUUFBUSxFQUFFLGNBQWMsRUFBRTtTQUNuQyxDQUFDO0lBQ0osQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb21wb3NpdGVSZWNvcmRlciDigJQgZmFuLW91dCBhIHNpbmdsZSByZWNvcmRlciBhdHRhY2htZW50IHRvIG11bHRpcGxlIGNoaWxkIHJlY29yZGVycy5cbiAqXG4gKiBJbXBsZW1lbnRzIGJvdGggUmVjb3JkZXIgKHNjb3BlIGRhdGEgb3BzKSBhbmQgRmxvd1JlY29yZGVyIChjb250cm9sIGZsb3cgZXZlbnRzKVxuICogc28gaXQgd29ya3Mgd2l0aCBib3RoIGBleGVjdXRvci5hdHRhY2hSZWNvcmRlcigpYCBhbmQgYGV4ZWN1dG9yLmF0dGFjaEZsb3dSZWNvcmRlcigpYC5cbiAqXG4gKiBUaGUgY29tcG9zaXRlIGhhcyBhIHNpbmdsZSBJRCBmb3IgaWRlbXBvdGVudCBhdHRhY2gvZGV0YWNoLiBDaGlsZCByZWNvcmRlcnNcbiAqIGtlZXAgdGhlaXIgb3duIElEcyBpbnRlcm5hbGx5IGJ1dCBhcmUgbm90IGluZGl2aWR1YWxseSB2aXNpYmxlIHRvIHRoZSBleGVjdXRvci5cbiAqXG4gKiBEb21haW4gbGlicmFyaWVzIChlLmcuLCBhZ2VudGZvb3RwcmludCkgdXNlIHRoaXMgdG8gYnVuZGxlIG11bHRpcGxlIHJlY29yZGVyc1xuICogaW50byBhIHNpbmdsZSBwcmVzZXQg4oCUIHRoZSBjb25zdW1lciBjYWxscyBvbmUgZnVuY3Rpb24sIGdldHMgZnVsbCBvYnNlcnZhYmlsaXR5LlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBpbXBvcnQgeyBDb21wb3NpdGVSZWNvcmRlciwgTWV0cmljUmVjb3JkZXIsIERlYnVnUmVjb3JkZXIgfSBmcm9tICdmb290cHJpbnRqcyc7XG4gKlxuICogLy8gQnVuZGxlIG1ldHJpY3MgKyBkZWJ1ZyBpbnRvIGEgc2luZ2xlIHJlY29yZGVyXG4gKiBjb25zdCBvYnNlcnZhYmlsaXR5ID0gbmV3IENvbXBvc2l0ZVJlY29yZGVyKCdvYnNlcnZhYmlsaXR5JywgW1xuICogICBuZXcgTWV0cmljUmVjb3JkZXIoeyBzdGFnZUZpbHRlcjogKG5hbWUpID0+IG5hbWUgPT09ICdDYWxsTExNJyB9KSxcbiAqICAgbmV3IERlYnVnUmVjb3JkZXIoeyB2ZXJib3NpdHk6ICdtaW5pbWFsJyB9KSxcbiAqIF0pO1xuICpcbiAqIGV4ZWN1dG9yLmF0dGFjaFJlY29yZGVyKG9ic2VydmFiaWxpdHkpO1xuICpcbiAqIC8vIEFjY2VzcyBjaGlsZCByZWNvcmRlcnMgYnkgdHlwZVxuICogY29uc3QgbWV0cmljcyA9IG9ic2VydmFiaWxpdHkuZ2V0KE1ldHJpY1JlY29yZGVyKTtcbiAqIG1ldHJpY3M/LmdldE1ldHJpY3MoKTsgLy8gdGltaW5nIGRhdGFcbiAqIGBgYFxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiAvLyBEb21haW4gbGlicmFyeSBwcmVzZXQgKGUuZy4sIGFnZW50Zm9vdHByaW50KVxuICogZXhwb3J0IGZ1bmN0aW9uIGFnZW50T2JzZXJ2YWJpbGl0eShvcHRpb25zPzogQWdlbnRPYnNlcnZhYmlsaXR5T3B0aW9ucykge1xuICogICByZXR1cm4gbmV3IENvbXBvc2l0ZVJlY29yZGVyKCdhZ2VudC1vYnNlcnZhYmlsaXR5JywgW1xuICogICAgIG5ldyBNZXRyaWNSZWNvcmRlcihvcHRpb25zPy5zdGFnZUZpbHRlciA/IHsgc3RhZ2VGaWx0ZXI6IG9wdGlvbnMuc3RhZ2VGaWx0ZXIgfSA6IHVuZGVmaW5lZCksXG4gKiAgICAgbmV3IFRva2VuUmVjb3JkZXIoKSxcbiAqICAgICBuZXcgVG9vbFVzYWdlUmVjb3JkZXIoKSxcbiAqICAgXSk7XG4gKiB9XG4gKlxuICogLy8gQ29uc3VtZXJcbiAqIGV4ZWN1dG9yLmF0dGFjaFJlY29yZGVyKGFnZW50T2JzZXJ2YWJpbGl0eSgpKTtcbiAqIGBgYFxuICovXG5cbmltcG9ydCB0eXBlIHtcbiAgRmxvd0JyZWFrRXZlbnQsXG4gIEZsb3dEZWNpc2lvbkV2ZW50LFxuICBGbG93RXJyb3JFdmVudCxcbiAgRmxvd0ZvcmtFdmVudCxcbiAgRmxvd0xvb3BFdmVudCxcbiAgRmxvd05leHRFdmVudCxcbiAgRmxvd1JlY29yZGVyLFxuICBGbG93U2VsZWN0ZWRFdmVudCxcbiAgRmxvd1N0YWdlRXZlbnQsXG4gIEZsb3dTdWJmbG93RXZlbnQsXG4gIEZsb3dTdWJmbG93UmVnaXN0ZXJlZEV2ZW50LFxufSBmcm9tICcuLi9lbmdpbmUvbmFycmF0aXZlL3R5cGVzLmpzJztcbmltcG9ydCB0eXBlIHsgQ29tbWl0RXZlbnQsIEVycm9yRXZlbnQsIFJlYWRFdmVudCwgUmVjb3JkZXIsIFN0YWdlRXZlbnQsIFdyaXRlRXZlbnQgfSBmcm9tICcuLi9zY29wZS90eXBlcy5qcyc7XG5cbi8qKiBTbmFwc2hvdCBmb3JtYXQgZm9yIGNvbXBvc2l0ZSByZWNvcmRlcnMg4oCUIHdyYXBzIGNoaWxkIHNuYXBzaG90cy4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29tcG9zaXRlU25hcHNob3Qge1xuICBuYW1lOiBzdHJpbmc7XG4gIGRhdGE6IHtcbiAgICBjaGlsZHJlbjogQXJyYXk8eyBpZDogc3RyaW5nOyBuYW1lOiBzdHJpbmc7IGRhdGE6IHVua25vd24gfT47XG4gIH07XG59XG5cbmV4cG9ydCBjbGFzcyBDb21wb3NpdGVSZWNvcmRlciBpbXBsZW1lbnRzIFJlY29yZGVyLCBGbG93UmVjb3JkZXIge1xuICByZWFkb25seSBpZDogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IGNoaWxkcmVuOiBBcnJheTxSZWNvcmRlciB8IEZsb3dSZWNvcmRlcj47XG5cbiAgY29uc3RydWN0b3IoaWQ6IHN0cmluZywgY2hpbGRyZW46IEFycmF5PFJlY29yZGVyIHwgRmxvd1JlY29yZGVyPikge1xuICAgIHRoaXMuaWQgPSBpZDtcbiAgICB0aGlzLmNoaWxkcmVuID0gWy4uLmNoaWxkcmVuXTtcbiAgfVxuXG4gIC8vIOKUgOKUgCBDaGlsZCBhY2Nlc3Mg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbiAgLyoqXG4gICAqIEdldCBhIGNoaWxkIHJlY29yZGVyIGJ5IGNsYXNzIHR5cGUuXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogY29uc3QgbWV0cmljcyA9IGNvbXBvc2l0ZS5nZXQoTWV0cmljUmVjb3JkZXIpO1xuICAgKiBgYGBcbiAgICovXG4gIGdldDxUPih0eXBlOiBuZXcgKC4uLmFyZ3M6IGFueVtdKSA9PiBUKTogVCB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuY2hpbGRyZW4uZmluZCgoYykgPT4gYyBpbnN0YW5jZW9mIHR5cGUpIGFzIFQgfCB1bmRlZmluZWQ7XG4gIH1cblxuICAvKiogR2V0IGFsbCBjaGlsZCByZWNvcmRlcnMuICovXG4gIGdldENoaWxkcmVuKCk6IFJlYWRvbmx5QXJyYXk8UmVjb3JkZXIgfCBGbG93UmVjb3JkZXI+IHtcbiAgICByZXR1cm4gdGhpcy5jaGlsZHJlbjtcbiAgfVxuXG4gIC8vIOKUgOKUgCBTY29wZSBSZWNvcmRlciBob29rcyAoZmFuLW91dCB0byBjaGlsZHJlbiB0aGF0IGltcGxlbWVudCBSZWNvcmRlcikg4pSAXG5cbiAgb25SZWFkKGV2ZW50OiBSZWFkRXZlbnQpOiB2b2lkIHtcbiAgICBmb3IgKGNvbnN0IGMgb2YgdGhpcy5jaGlsZHJlbikgaWYgKChjIGFzIFJlY29yZGVyKS5vblJlYWQpIChjIGFzIFJlY29yZGVyKS5vblJlYWQhKGV2ZW50KTtcbiAgfVxuXG4gIG9uV3JpdGUoZXZlbnQ6IFdyaXRlRXZlbnQpOiB2b2lkIHtcbiAgICBmb3IgKGNvbnN0IGMgb2YgdGhpcy5jaGlsZHJlbikgaWYgKChjIGFzIFJlY29yZGVyKS5vbldyaXRlKSAoYyBhcyBSZWNvcmRlcikub25Xcml0ZSEoZXZlbnQpO1xuICB9XG5cbiAgb25Db21taXQoZXZlbnQ6IENvbW1pdEV2ZW50KTogdm9pZCB7XG4gICAgZm9yIChjb25zdCBjIG9mIHRoaXMuY2hpbGRyZW4pIGlmICgoYyBhcyBSZWNvcmRlcikub25Db21taXQpIChjIGFzIFJlY29yZGVyKS5vbkNvbW1pdCEoZXZlbnQpO1xuICB9XG5cbiAgb25FcnJvcihldmVudDogRXJyb3JFdmVudCB8IEZsb3dFcnJvckV2ZW50KTogdm9pZCB7XG4gICAgZm9yIChjb25zdCBjIG9mIHRoaXMuY2hpbGRyZW4pIGlmICgoYyBhcyBSZWNvcmRlcikub25FcnJvcikgKGMgYXMgUmVjb3JkZXIpLm9uRXJyb3IhKGV2ZW50IGFzIGFueSk7XG4gIH1cblxuICBvblN0YWdlU3RhcnQoZXZlbnQ6IFN0YWdlRXZlbnQpOiB2b2lkIHtcbiAgICBmb3IgKGNvbnN0IGMgb2YgdGhpcy5jaGlsZHJlbikgaWYgKChjIGFzIFJlY29yZGVyKS5vblN0YWdlU3RhcnQpIChjIGFzIFJlY29yZGVyKS5vblN0YWdlU3RhcnQhKGV2ZW50KTtcbiAgfVxuXG4gIG9uU3RhZ2VFbmQoZXZlbnQ6IFN0YWdlRXZlbnQpOiB2b2lkIHtcbiAgICBmb3IgKGNvbnN0IGMgb2YgdGhpcy5jaGlsZHJlbikgaWYgKChjIGFzIFJlY29yZGVyKS5vblN0YWdlRW5kKSAoYyBhcyBSZWNvcmRlcikub25TdGFnZUVuZCEoZXZlbnQpO1xuICB9XG5cbiAgLy8g4pSA4pSAIEZsb3dSZWNvcmRlciBob29rcyAoZmFuLW91dCB0byBjaGlsZHJlbiB0aGF0IGltcGxlbWVudCBGbG93UmVjb3JkZXIpIOKUgFxuXG4gIG9uU3RhZ2VFeGVjdXRlZChldmVudDogRmxvd1N0YWdlRXZlbnQpOiB2b2lkIHtcbiAgICBmb3IgKGNvbnN0IGMgb2YgdGhpcy5jaGlsZHJlbikgaWYgKChjIGFzIEZsb3dSZWNvcmRlcikub25TdGFnZUV4ZWN1dGVkKSAoYyBhcyBGbG93UmVjb3JkZXIpLm9uU3RhZ2VFeGVjdXRlZCEoZXZlbnQpO1xuICB9XG5cbiAgb25OZXh0KGV2ZW50OiBGbG93TmV4dEV2ZW50KTogdm9pZCB7XG4gICAgZm9yIChjb25zdCBjIG9mIHRoaXMuY2hpbGRyZW4pIGlmICgoYyBhcyBGbG93UmVjb3JkZXIpLm9uTmV4dCkgKGMgYXMgRmxvd1JlY29yZGVyKS5vbk5leHQhKGV2ZW50KTtcbiAgfVxuXG4gIG9uRGVjaXNpb24oZXZlbnQ6IEZsb3dEZWNpc2lvbkV2ZW50KTogdm9pZCB7XG4gICAgZm9yIChjb25zdCBjIG9mIHRoaXMuY2hpbGRyZW4pIGlmICgoYyBhcyBGbG93UmVjb3JkZXIpLm9uRGVjaXNpb24pIChjIGFzIEZsb3dSZWNvcmRlcikub25EZWNpc2lvbiEoZXZlbnQpO1xuICB9XG5cbiAgb25Gb3JrKGV2ZW50OiBGbG93Rm9ya0V2ZW50KTogdm9pZCB7XG4gICAgZm9yIChjb25zdCBjIG9mIHRoaXMuY2hpbGRyZW4pIGlmICgoYyBhcyBGbG93UmVjb3JkZXIpLm9uRm9yaykgKGMgYXMgRmxvd1JlY29yZGVyKS5vbkZvcmshKGV2ZW50KTtcbiAgfVxuXG4gIG9uU2VsZWN0ZWQoZXZlbnQ6IEZsb3dTZWxlY3RlZEV2ZW50KTogdm9pZCB7XG4gICAgZm9yIChjb25zdCBjIG9mIHRoaXMuY2hpbGRyZW4pIGlmICgoYyBhcyBGbG93UmVjb3JkZXIpLm9uU2VsZWN0ZWQpIChjIGFzIEZsb3dSZWNvcmRlcikub25TZWxlY3RlZCEoZXZlbnQpO1xuICB9XG5cbiAgb25TdWJmbG93RW50cnkoZXZlbnQ6IEZsb3dTdWJmbG93RXZlbnQpOiB2b2lkIHtcbiAgICBmb3IgKGNvbnN0IGMgb2YgdGhpcy5jaGlsZHJlbikgaWYgKChjIGFzIEZsb3dSZWNvcmRlcikub25TdWJmbG93RW50cnkpIChjIGFzIEZsb3dSZWNvcmRlcikub25TdWJmbG93RW50cnkhKGV2ZW50KTtcbiAgfVxuXG4gIG9uU3ViZmxvd0V4aXQoZXZlbnQ6IEZsb3dTdWJmbG93RXZlbnQpOiB2b2lkIHtcbiAgICBmb3IgKGNvbnN0IGMgb2YgdGhpcy5jaGlsZHJlbikgaWYgKChjIGFzIEZsb3dSZWNvcmRlcikub25TdWJmbG93RXhpdCkgKGMgYXMgRmxvd1JlY29yZGVyKS5vblN1YmZsb3dFeGl0IShldmVudCk7XG4gIH1cblxuICBvblN1YmZsb3dSZWdpc3RlcmVkKGV2ZW50OiBGbG93U3ViZmxvd1JlZ2lzdGVyZWRFdmVudCk6IHZvaWQge1xuICAgIGZvciAoY29uc3QgYyBvZiB0aGlzLmNoaWxkcmVuKVxuICAgICAgaWYgKChjIGFzIEZsb3dSZWNvcmRlcikub25TdWJmbG93UmVnaXN0ZXJlZCkgKGMgYXMgRmxvd1JlY29yZGVyKS5vblN1YmZsb3dSZWdpc3RlcmVkIShldmVudCk7XG4gIH1cblxuICBvbkxvb3AoZXZlbnQ6IEZsb3dMb29wRXZlbnQpOiB2b2lkIHtcbiAgICBmb3IgKGNvbnN0IGMgb2YgdGhpcy5jaGlsZHJlbikgaWYgKChjIGFzIEZsb3dSZWNvcmRlcikub25Mb29wKSAoYyBhcyBGbG93UmVjb3JkZXIpLm9uTG9vcCEoZXZlbnQpO1xuICB9XG5cbiAgb25CcmVhayhldmVudDogRmxvd0JyZWFrRXZlbnQpOiB2b2lkIHtcbiAgICBmb3IgKGNvbnN0IGMgb2YgdGhpcy5jaGlsZHJlbikgaWYgKChjIGFzIEZsb3dSZWNvcmRlcikub25CcmVhaykgKGMgYXMgRmxvd1JlY29yZGVyKS5vbkJyZWFrIShldmVudCk7XG4gIH1cblxuICAvLyDilIDilIAgTGlmZWN5Y2xlIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4gIGNsZWFyKCk6IHZvaWQge1xuICAgIGZvciAoY29uc3QgYyBvZiB0aGlzLmNoaWxkcmVuKSBpZiAoYy5jbGVhcikgYy5jbGVhcigpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNuYXBzaG90IG1lcmdlcyBhbGwgY2hpbGQgc25hcHNob3RzIGludG8gYSBzaW5nbGUgY29tcG9zaXRlIGVudHJ5LlxuICAgKiBFYWNoIGNoaWxkJ3Mgc25hcHNob3QgaXMgcHJlc2VydmVkIHdpdGggaXRzIG93biBpZC9uYW1lL2RhdGEuXG4gICAqL1xuICB0b1NuYXBzaG90KCk6IENvbXBvc2l0ZVNuYXBzaG90IHtcbiAgICBjb25zdCBjaGlsZFNuYXBzaG90czogQXJyYXk8eyBpZDogc3RyaW5nOyBuYW1lOiBzdHJpbmc7IGRhdGE6IHVua25vd24gfT4gPSBbXTtcbiAgICBmb3IgKGNvbnN0IGMgb2YgdGhpcy5jaGlsZHJlbikge1xuICAgICAgaWYgKGMudG9TbmFwc2hvdCkge1xuICAgICAgICBjb25zdCB7IG5hbWUsIGRhdGEgfSA9IGMudG9TbmFwc2hvdCgpO1xuICAgICAgICBjaGlsZFNuYXBzaG90cy5wdXNoKHsgaWQ6IGMuaWQsIG5hbWUsIGRhdGEgfSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBuYW1lOiAnQ29tcG9zaXRlJyxcbiAgICAgIGRhdGE6IHsgY2hpbGRyZW46IGNoaWxkU25hcHNob3RzIH0sXG4gICAgfTtcbiAgfVxufVxuIl19
@@ -0,0 +1,2 @@
1
+ export { CompositeRecorder } from './CompositeRecorder.js';
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL3JlY29yZGVyL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHdCQUF3QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHR5cGUgeyBDb21wb3NpdGVTbmFwc2hvdCB9IGZyb20gJy4vQ29tcG9zaXRlUmVjb3JkZXIuanMnO1xuZXhwb3J0IHsgQ29tcG9zaXRlUmVjb3JkZXIgfSBmcm9tICcuL0NvbXBvc2l0ZVJlY29yZGVyLmpzJztcbiJdfQ==
@@ -18,6 +18,12 @@ export class ExecutionRuntime {
18
18
  this.globalStore = new SharedMemory(defaultValues, initialState);
19
19
  this.rootStageContext = new StageContext('', rootName, rootId, this.globalStore, '', this.executionHistory);
20
20
  }
21
+ /** Preserve the current rootStageContext for snapshots before changing it for resume. */
22
+ preserveSnapshotRoot() {
23
+ if (!this._snapshotRoot) {
24
+ this._snapshotRoot = this.rootStageContext;
25
+ }
26
+ }
21
27
  getPipelines() {
22
28
  const state = this.globalStore.getState();
23
29
  return state.pipelines ? Object.keys(state.pipelines) : [];
@@ -26,11 +32,14 @@ export class ExecutionRuntime {
26
32
  this.rootStageContext.setObject(path, key, value);
27
33
  }
28
34
  getSnapshot() {
35
+ var _a;
36
+ // Use the original root (preserved before resume) for the full execution tree
37
+ const snapshotRoot = (_a = this._snapshotRoot) !== null && _a !== void 0 ? _a : this.rootStageContext;
29
38
  return {
30
39
  sharedState: this.globalStore.getState(),
31
- executionTree: this.rootStageContext.getSnapshot(),
40
+ executionTree: snapshotRoot.getSnapshot(),
32
41
  commitLog: this.executionHistory.list(),
33
42
  };
34
43
  }
35
44
  }
36
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRXhlY3V0aW9uUnVudGltZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvcnVubmVyL0V4ZWN1dGlvblJ1bnRpbWUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7R0FVRztBQUVILE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNqRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDekQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBb0J6RCxNQUFNLE9BQU8sZ0JBQWdCO0lBSzNCLFlBQVksUUFBZ0IsRUFBRSxNQUFjLEVBQUUsYUFBdUIsRUFBRSxZQUFzQjtRQUMzRixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxRQUFRLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDbkQsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLFlBQVksQ0FBQyxhQUFhLEVBQUUsWUFBWSxDQUFDLENBQUM7UUFDakUsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksWUFBWSxDQUFDLEVBQUUsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxXQUFXLEVBQUUsRUFBRSxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQzlHLENBQUM7SUFFRCxZQUFZO1FBQ1YsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUMxQyxPQUFPLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQW9DLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0lBQ3hGLENBQUM7SUFFRCxhQUFhLENBQUMsSUFBYyxFQUFFLEdBQVcsRUFBRSxLQUFjO1FBQ3ZELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNwRCxDQUFDO0lBRUQsV0FBVztRQUNULE9BQU87WUFDTCxXQUFXLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLEVBQUU7WUFDeEMsYUFBYSxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXLEVBQUU7WUFDbEQsU0FBUyxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUU7U0FDeEMsQ0FBQztJQUNKLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogRXhlY3V0aW9uUnVudGltZSDigJQgVGhlIHJ1bnRpbWUgZW52aXJvbm1lbnQgZm9yIG9uZSBmbG93Y2hhcnQgZXhlY3V0aW9uLlxuICpcbiAqIFdpcmVzIHVwIHRoZSB0aHJlZSBtZW1vcnkgcHJpbWl0aXZlcyBpbnRvIGEgc2luZ2xlIGNvbnRhaW5lcjpcbiAqICAgLSBTaGFyZWRNZW1vcnkgKHRoZSBoZWFwIOKAlCBzaGFyZWQgc3RhdGUgYWNyb3NzIGFsbCBzdGFnZXMpXG4gKiAgIC0gU3RhZ2VDb250ZXh0ICAodGhlIGNhbGwgc3RhY2sg4oCUIHBlci1zdGFnZSBleGVjdXRpb24gdHJlZSlcbiAqICAgLSBFdmVudExvZyAgICAgICh0aGUgdHJhbnNhY3Rpb24gbG9nIOKAlCBjb21taXQgaGlzdG9yeSBmb3IgcmVwbGF5KVxuICpcbiAqIFRoZSBlbmdpbmUgKEZsb3djaGFydFRyYXZlcnNlcikgcmVjZWl2ZXMgdGhpcyBhcyBpdHMgcnVudGltZSBwYXJhbWV0ZXIuXG4gKiBBZnRlciBleGVjdXRpb24sIGNvbnN1bWVycyBxdWVyeSBpdCBmb3IgdGhlIGZ1bGwgZXhlY3V0aW9uIHN0YXRlLlxuICovXG5cbmltcG9ydCB7IEV2ZW50TG9nIH0gZnJvbSAnLi4vbWVtb3J5L0V2ZW50TG9nLmpzJztcbmltcG9ydCB7IFNoYXJlZE1lbW9yeSB9IGZyb20gJy4uL21lbW9yeS9TaGFyZWRNZW1vcnkuanMnO1xuaW1wb3J0IHsgU3RhZ2VDb250ZXh0IH0gZnJvbSAnLi4vbWVtb3J5L1N0YWdlQ29udGV4dC5qcyc7XG5pbXBvcnQgdHlwZSB7IENvbW1pdEJ1bmRsZSwgU3RhZ2VTbmFwc2hvdCB9IGZyb20gJy4uL21lbW9yeS90eXBlcy5qcyc7XG5cbi8qKiBTbmFwc2hvdCBvZiBhIHNpbmdsZSByZWNvcmRlcidzIGNvbGxlY3RlZCBkYXRhLiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZWNvcmRlclNuYXBzaG90IHtcbiAgaWQ6IHN0cmluZztcbiAgbmFtZTogc3RyaW5nO1xuICBkYXRhOiB1bmtub3duO1xufVxuXG5leHBvcnQgdHlwZSBSdW50aW1lU25hcHNob3QgPSB7XG4gIHNoYXJlZFN0YXRlOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgZXhlY3V0aW9uVHJlZTogU3RhZ2VTbmFwc2hvdDtcbiAgY29tbWl0TG9nOiBDb21taXRCdW5kbGVbXTtcbiAgLyoqIFBlci1zdWJmbG93IGV4ZWN1dGlvbiByZXN1bHRzIChrZXllZCBieSBzdWJmbG93SWQpLiAqL1xuICBzdWJmbG93UmVzdWx0cz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAvKiogU25hcHNob3QgZGF0YSBmcm9tIHJlY29yZGVycyB0aGF0IGltcGxlbWVudCB0b1NuYXBzaG90KCkuICovXG4gIHJlY29yZGVycz86IFJlY29yZGVyU25hcHNob3RbXTtcbn07XG5cbmV4cG9ydCBjbGFzcyBFeGVjdXRpb25SdW50aW1lIHtcbiAgcHVibGljIGdsb2JhbFN0b3JlOiBTaGFyZWRNZW1vcnk7XG4gIHB1YmxpYyByb290U3RhZ2VDb250ZXh0OiBTdGFnZUNvbnRleHQ7XG4gIHB1YmxpYyBleGVjdXRpb25IaXN0b3J5OiBFdmVudExvZztcblxuICBjb25zdHJ1Y3Rvcihyb290TmFtZTogc3RyaW5nLCByb290SWQ6IHN0cmluZywgZGVmYXVsdFZhbHVlcz86IHVua25vd24sIGluaXRpYWxTdGF0ZT86IHVua25vd24pIHtcbiAgICB0aGlzLmV4ZWN1dGlvbkhpc3RvcnkgPSBuZXcgRXZlbnRMb2coaW5pdGlhbFN0YXRlKTtcbiAgICB0aGlzLmdsb2JhbFN0b3JlID0gbmV3IFNoYXJlZE1lbW9yeShkZWZhdWx0VmFsdWVzLCBpbml0aWFsU3RhdGUpO1xuICAgIHRoaXMucm9vdFN0YWdlQ29udGV4dCA9IG5ldyBTdGFnZUNvbnRleHQoJycsIHJvb3ROYW1lLCByb290SWQsIHRoaXMuZ2xvYmFsU3RvcmUsICcnLCB0aGlzLmV4ZWN1dGlvbkhpc3RvcnkpO1xuICB9XG5cbiAgZ2V0UGlwZWxpbmVzKCk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCBzdGF0ZSA9IHRoaXMuZ2xvYmFsU3RvcmUuZ2V0U3RhdGUoKTtcbiAgICByZXR1cm4gc3RhdGUucGlwZWxpbmVzID8gT2JqZWN0LmtleXMoc3RhdGUucGlwZWxpbmVzIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KSA6IFtdO1xuICB9XG5cbiAgc2V0Um9vdE9iamVjdChwYXRoOiBzdHJpbmdbXSwga2V5OiBzdHJpbmcsIHZhbHVlOiB1bmtub3duKSB7XG4gICAgdGhpcy5yb290U3RhZ2VDb250ZXh0LnNldE9iamVjdChwYXRoLCBrZXksIHZhbHVlKTtcbiAgfVxuXG4gIGdldFNuYXBzaG90KCk6IFJ1bnRpbWVTbmFwc2hvdCB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHNoYXJlZFN0YXRlOiB0aGlzLmdsb2JhbFN0b3JlLmdldFN0YXRlKCksXG4gICAgICBleGVjdXRpb25UcmVlOiB0aGlzLnJvb3RTdGFnZUNvbnRleHQuZ2V0U25hcHNob3QoKSxcbiAgICAgIGNvbW1pdExvZzogdGhpcy5leGVjdXRpb25IaXN0b3J5Lmxpc3QoKSxcbiAgICB9O1xuICB9XG59XG4iXX0=
45
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRXhlY3V0aW9uUnVudGltZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvcnVubmVyL0V4ZWN1dGlvblJ1bnRpbWUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7R0FVRztBQUVILE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNqRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDekQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBb0J6RCxNQUFNLE9BQU8sZ0JBQWdCO0lBTzNCLFlBQVksUUFBZ0IsRUFBRSxNQUFjLEVBQUUsYUFBdUIsRUFBRSxZQUFzQjtRQUMzRixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxRQUFRLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDbkQsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLFlBQVksQ0FBQyxhQUFhLEVBQUUsWUFBWSxDQUFDLENBQUM7UUFDakUsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksWUFBWSxDQUFDLEVBQUUsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxXQUFXLEVBQUUsRUFBRSxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQzlHLENBQUM7SUFFRCx5RkFBeUY7SUFDekYsb0JBQW9CO1FBQ2xCLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDeEIsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUM7UUFDN0MsQ0FBQztJQUNILENBQUM7SUFFRCxZQUFZO1FBQ1YsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUMxQyxPQUFPLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQW9DLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0lBQ3hGLENBQUM7SUFFRCxhQUFhLENBQUMsSUFBYyxFQUFFLEdBQVcsRUFBRSxLQUFjO1FBQ3ZELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNwRCxDQUFDO0lBRUQsV0FBVzs7UUFDVCw4RUFBOEU7UUFDOUUsTUFBTSxZQUFZLEdBQUcsTUFBQSxJQUFJLENBQUMsYUFBYSxtQ0FBSSxJQUFJLENBQUMsZ0JBQWdCLENBQUM7UUFDakUsT0FBTztZQUNMLFdBQVcsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsRUFBRTtZQUN4QyxhQUFhLEVBQUUsWUFBWSxDQUFDLFdBQVcsRUFBRTtZQUN6QyxTQUFTLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksRUFBRTtTQUN4QyxDQUFDO0lBQ0osQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBFeGVjdXRpb25SdW50aW1lIOKAlCBUaGUgcnVudGltZSBlbnZpcm9ubWVudCBmb3Igb25lIGZsb3djaGFydCBleGVjdXRpb24uXG4gKlxuICogV2lyZXMgdXAgdGhlIHRocmVlIG1lbW9yeSBwcmltaXRpdmVzIGludG8gYSBzaW5nbGUgY29udGFpbmVyOlxuICogICAtIFNoYXJlZE1lbW9yeSAodGhlIGhlYXAg4oCUIHNoYXJlZCBzdGF0ZSBhY3Jvc3MgYWxsIHN0YWdlcylcbiAqICAgLSBTdGFnZUNvbnRleHQgICh0aGUgY2FsbCBzdGFjayDigJQgcGVyLXN0YWdlIGV4ZWN1dGlvbiB0cmVlKVxuICogICAtIEV2ZW50TG9nICAgICAgKHRoZSB0cmFuc2FjdGlvbiBsb2cg4oCUIGNvbW1pdCBoaXN0b3J5IGZvciByZXBsYXkpXG4gKlxuICogVGhlIGVuZ2luZSAoRmxvd2NoYXJ0VHJhdmVyc2VyKSByZWNlaXZlcyB0aGlzIGFzIGl0cyBydW50aW1lIHBhcmFtZXRlci5cbiAqIEFmdGVyIGV4ZWN1dGlvbiwgY29uc3VtZXJzIHF1ZXJ5IGl0IGZvciB0aGUgZnVsbCBleGVjdXRpb24gc3RhdGUuXG4gKi9cblxuaW1wb3J0IHsgRXZlbnRMb2cgfSBmcm9tICcuLi9tZW1vcnkvRXZlbnRMb2cuanMnO1xuaW1wb3J0IHsgU2hhcmVkTWVtb3J5IH0gZnJvbSAnLi4vbWVtb3J5L1NoYXJlZE1lbW9yeS5qcyc7XG5pbXBvcnQgeyBTdGFnZUNvbnRleHQgfSBmcm9tICcuLi9tZW1vcnkvU3RhZ2VDb250ZXh0LmpzJztcbmltcG9ydCB0eXBlIHsgQ29tbWl0QnVuZGxlLCBTdGFnZVNuYXBzaG90IH0gZnJvbSAnLi4vbWVtb3J5L3R5cGVzLmpzJztcblxuLyoqIFNuYXBzaG90IG9mIGEgc2luZ2xlIHJlY29yZGVyJ3MgY29sbGVjdGVkIGRhdGEuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlY29yZGVyU25hcHNob3Qge1xuICBpZDogc3RyaW5nO1xuICBuYW1lOiBzdHJpbmc7XG4gIGRhdGE6IHVua25vd247XG59XG5cbmV4cG9ydCB0eXBlIFJ1bnRpbWVTbmFwc2hvdCA9IHtcbiAgc2hhcmVkU3RhdGU6IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICBleGVjdXRpb25UcmVlOiBTdGFnZVNuYXBzaG90O1xuICBjb21taXRMb2c6IENvbW1pdEJ1bmRsZVtdO1xuICAvKiogUGVyLXN1YmZsb3cgZXhlY3V0aW9uIHJlc3VsdHMgKGtleWVkIGJ5IHN1YmZsb3dJZCkuICovXG4gIHN1YmZsb3dSZXN1bHRzPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIC8qKiBTbmFwc2hvdCBkYXRhIGZyb20gcmVjb3JkZXJzIHRoYXQgaW1wbGVtZW50IHRvU25hcHNob3QoKS4gKi9cbiAgcmVjb3JkZXJzPzogUmVjb3JkZXJTbmFwc2hvdFtdO1xufTtcblxuZXhwb3J0IGNsYXNzIEV4ZWN1dGlvblJ1bnRpbWUge1xuICBwdWJsaWMgZ2xvYmFsU3RvcmU6IFNoYXJlZE1lbW9yeTtcbiAgcHVibGljIHJvb3RTdGFnZUNvbnRleHQ6IFN0YWdlQ29udGV4dDtcbiAgcHVibGljIGV4ZWN1dGlvbkhpc3Rvcnk6IEV2ZW50TG9nO1xuICAvKiogT3JpZ2luYWwgcm9vdCBmb3IgZ2V0U25hcHNob3QoKSDigJQgc2V0IGJlZm9yZSByZXN1bWUgY2hhbmdlcyByb290U3RhZ2VDb250ZXh0LiAqL1xuICBwcml2YXRlIF9zbmFwc2hvdFJvb3Q/OiBTdGFnZUNvbnRleHQ7XG5cbiAgY29uc3RydWN0b3Iocm9vdE5hbWU6IHN0cmluZywgcm9vdElkOiBzdHJpbmcsIGRlZmF1bHRWYWx1ZXM/OiB1bmtub3duLCBpbml0aWFsU3RhdGU/OiB1bmtub3duKSB7XG4gICAgdGhpcy5leGVjdXRpb25IaXN0b3J5ID0gbmV3IEV2ZW50TG9nKGluaXRpYWxTdGF0ZSk7XG4gICAgdGhpcy5nbG9iYWxTdG9yZSA9IG5ldyBTaGFyZWRNZW1vcnkoZGVmYXVsdFZhbHVlcywgaW5pdGlhbFN0YXRlKTtcbiAgICB0aGlzLnJvb3RTdGFnZUNvbnRleHQgPSBuZXcgU3RhZ2VDb250ZXh0KCcnLCByb290TmFtZSwgcm9vdElkLCB0aGlzLmdsb2JhbFN0b3JlLCAnJywgdGhpcy5leGVjdXRpb25IaXN0b3J5KTtcbiAgfVxuXG4gIC8qKiBQcmVzZXJ2ZSB0aGUgY3VycmVudCByb290U3RhZ2VDb250ZXh0IGZvciBzbmFwc2hvdHMgYmVmb3JlIGNoYW5naW5nIGl0IGZvciByZXN1bWUuICovXG4gIHByZXNlcnZlU25hcHNob3RSb290KCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5fc25hcHNob3RSb290KSB7XG4gICAgICB0aGlzLl9zbmFwc2hvdFJvb3QgPSB0aGlzLnJvb3RTdGFnZUNvbnRleHQ7XG4gICAgfVxuICB9XG5cbiAgZ2V0UGlwZWxpbmVzKCk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCBzdGF0ZSA9IHRoaXMuZ2xvYmFsU3RvcmUuZ2V0U3RhdGUoKTtcbiAgICByZXR1cm4gc3RhdGUucGlwZWxpbmVzID8gT2JqZWN0LmtleXMoc3RhdGUucGlwZWxpbmVzIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KSA6IFtdO1xuICB9XG5cbiAgc2V0Um9vdE9iamVjdChwYXRoOiBzdHJpbmdbXSwga2V5OiBzdHJpbmcsIHZhbHVlOiB1bmtub3duKSB7XG4gICAgdGhpcy5yb290U3RhZ2VDb250ZXh0LnNldE9iamVjdChwYXRoLCBrZXksIHZhbHVlKTtcbiAgfVxuXG4gIGdldFNuYXBzaG90KCk6IFJ1bnRpbWVTbmFwc2hvdCB7XG4gICAgLy8gVXNlIHRoZSBvcmlnaW5hbCByb290IChwcmVzZXJ2ZWQgYmVmb3JlIHJlc3VtZSkgZm9yIHRoZSBmdWxsIGV4ZWN1dGlvbiB0cmVlXG4gICAgY29uc3Qgc25hcHNob3RSb290ID0gdGhpcy5fc25hcHNob3RSb290ID8/IHRoaXMucm9vdFN0YWdlQ29udGV4dDtcbiAgICByZXR1cm4ge1xuICAgICAgc2hhcmVkU3RhdGU6IHRoaXMuZ2xvYmFsU3RvcmUuZ2V0U3RhdGUoKSxcbiAgICAgIGV4ZWN1dGlvblRyZWU6IHNuYXBzaG90Um9vdC5nZXRTbmFwc2hvdCgpLFxuICAgICAgY29tbWl0TG9nOiB0aGlzLmV4ZWN1dGlvbkhpc3RvcnkubGlzdCgpLFxuICAgIH07XG4gIH1cbn1cbiJdfQ==