footprintjs 5.0.0 → 6.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (78) hide show
  1. package/CLAUDE.md +32 -8
  2. package/dist/advanced.js +2 -3
  3. package/dist/esm/advanced.js +2 -2
  4. package/dist/esm/index.js +1 -1
  5. package/dist/esm/lib/builder/FlowChartBuilder.js +364 -100
  6. package/dist/esm/lib/builder/index.js +1 -1
  7. package/dist/esm/lib/builder/structure/StructureRecorder.js +158 -0
  8. package/dist/esm/lib/builder/structure/StructureRecorderDispatcher.js +171 -0
  9. package/dist/esm/lib/builder/types.js +1 -1
  10. package/dist/esm/lib/engine/errors/errorInfo.js +4 -3
  11. package/dist/esm/lib/engine/handlers/ChildrenExecutor.js +11 -2
  12. package/dist/esm/lib/engine/handlers/DeciderHandler.js +5 -7
  13. package/dist/esm/lib/engine/handlers/RuntimeStructureManager.js +2 -2
  14. package/dist/esm/lib/engine/handlers/SelectorHandler.js +9 -7
  15. package/dist/esm/lib/engine/handlers/SubflowExecutor.js +7 -1
  16. package/dist/esm/lib/engine/handlers/index.js +1 -3
  17. package/dist/esm/lib/engine/handlers/types.js +2 -2
  18. package/dist/esm/lib/engine/narrative/CombinedNarrativeRecorder.js +12 -2
  19. package/dist/esm/lib/engine/narrative/FlowRecorderDispatcher.js +3 -3
  20. package/dist/esm/lib/engine/narrative/NarrativeFlowRecorder.js +8 -1
  21. package/dist/esm/lib/engine/narrative/types.js +1 -1
  22. package/dist/esm/lib/engine/runtimeStageId.js +64 -2
  23. package/dist/esm/lib/engine/traversal/FlowchartTraverser.js +11 -54
  24. package/dist/esm/lib/engine/types.js +1 -1
  25. package/dist/esm/lib/engine/walkSubflowSpec.js +144 -0
  26. package/dist/esm/lib/runner/FlowChartExecutor.js +4 -17
  27. package/dist/esm/lib/runner/getSubtreeSnapshot.js +3 -2
  28. package/dist/esm/trace.js +3 -2
  29. package/dist/index.js +1 -1
  30. package/dist/lib/builder/FlowChartBuilder.js +364 -100
  31. package/dist/lib/builder/index.js +1 -1
  32. package/dist/lib/builder/structure/StructureRecorder.js +159 -0
  33. package/dist/lib/builder/structure/StructureRecorderDispatcher.js +175 -0
  34. package/dist/lib/builder/types.js +1 -1
  35. package/dist/lib/engine/errors/errorInfo.js +4 -3
  36. package/dist/lib/engine/handlers/ChildrenExecutor.js +11 -2
  37. package/dist/lib/engine/handlers/DeciderHandler.js +5 -7
  38. package/dist/lib/engine/handlers/RuntimeStructureManager.js +2 -2
  39. package/dist/lib/engine/handlers/SelectorHandler.js +9 -7
  40. package/dist/lib/engine/handlers/SubflowExecutor.js +7 -1
  41. package/dist/lib/engine/handlers/index.js +2 -5
  42. package/dist/lib/engine/handlers/types.js +2 -2
  43. package/dist/lib/engine/narrative/CombinedNarrativeRecorder.js +12 -2
  44. package/dist/lib/engine/narrative/FlowRecorderDispatcher.js +3 -3
  45. package/dist/lib/engine/narrative/NarrativeFlowRecorder.js +8 -1
  46. package/dist/lib/engine/narrative/types.js +1 -1
  47. package/dist/lib/engine/runtimeStageId.js +66 -3
  48. package/dist/lib/engine/traversal/FlowchartTraverser.js +11 -54
  49. package/dist/lib/engine/types.js +1 -1
  50. package/dist/lib/engine/walkSubflowSpec.js +148 -0
  51. package/dist/lib/runner/FlowChartExecutor.js +4 -17
  52. package/dist/lib/runner/getSubtreeSnapshot.js +3 -2
  53. package/dist/trace.js +5 -2
  54. package/dist/types/advanced.d.ts +4 -4
  55. package/dist/types/index.d.ts +2 -0
  56. package/dist/types/lib/builder/FlowChartBuilder.d.ts +110 -14
  57. package/dist/types/lib/builder/index.d.ts +2 -1
  58. package/dist/types/lib/builder/structure/StructureRecorder.d.ts +349 -0
  59. package/dist/types/lib/builder/structure/StructureRecorderDispatcher.d.ts +77 -0
  60. package/dist/types/lib/builder/types.d.ts +20 -6
  61. package/dist/types/lib/engine/errors/errorInfo.d.ts +3 -2
  62. package/dist/types/lib/engine/handlers/DeciderHandler.d.ts +3 -3
  63. package/dist/types/lib/engine/handlers/RuntimeStructureManager.d.ts +1 -1
  64. package/dist/types/lib/engine/handlers/SelectorHandler.d.ts +2 -2
  65. package/dist/types/lib/engine/handlers/index.d.ts +1 -2
  66. package/dist/types/lib/engine/handlers/types.d.ts +2 -9
  67. package/dist/types/lib/engine/narrative/FlowRecorderDispatcher.d.ts +2 -2
  68. package/dist/types/lib/engine/narrative/types.d.ts +24 -2
  69. package/dist/types/lib/engine/runtimeStageId.d.ts +57 -1
  70. package/dist/types/lib/engine/traversal/FlowchartTraverser.d.ts +1 -6
  71. package/dist/types/lib/engine/types.d.ts +0 -26
  72. package/dist/types/lib/engine/walkSubflowSpec.d.ts +95 -0
  73. package/dist/types/lib/runner/FlowChartExecutor.d.ts +4 -16
  74. package/dist/types/trace.d.ts +3 -1
  75. package/package.json +1 -1
  76. package/dist/esm/lib/engine/handlers/ExtractorRunner.js +0 -122
  77. package/dist/lib/engine/handlers/ExtractorRunner.js +0 -126
  78. package/dist/types/lib/engine/handlers/ExtractorRunner.d.ts +0 -41
@@ -10,4 +10,4 @@ export { DeciderList, FlowChartBuilder, SelectorFnList } from './FlowChartBuilde
10
10
  // Factory & utilities
11
11
  export { flowChart, specToStageNode } from './FlowChartBuilder.js';
12
12
  export { ArrayMergeMode } from './types.js';
13
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL2J1aWxkZXIvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsMEJBQTBCO0FBQzFCOzs7OztHQUtHO0FBRUgsVUFBVTtBQUNWLE9BQU8sRUFBRSxXQUFXLEVBQUUsZ0JBQWdCLEVBQUUsY0FBYyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFdEYsc0JBQXNCO0FBQ3RCLE9BQU8sRUFBRSxTQUFTLEVBQUUsZUFBZSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUF3Qm5FLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxZQUFZLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBpc3RhbmJ1bCBpZ25vcmUgZmlsZSAqL1xuLyoqXG4gKiBidWlsZGVyLyDigJQgRmxvd2NoYXJ0IGNvbnN0cnVjdGlvbiBsaWJyYXJ5ICh6ZXJvIGRlcHMgb24gb2xkIGNvZGUpXG4gKlxuICogRmx1ZW50IEFQSSBmb3IgYnVpbGRpbmcgU3RhZ2VOb2RlIHRyZWVzIGFuZCBTZXJpYWxpemVkUGlwZWxpbmVTdHJ1Y3R1cmUuXG4gKiBDYW4gYmUgdXNlZCBzdGFuZGFsb25lIGZvciBidWlsZGluZyBmbG93Y2hhcnQgc3BlY3Mgd2l0aG91dCBleGVjdXRpb24uXG4gKi9cblxuLy8gQ2xhc3Nlc1xuZXhwb3J0IHsgRGVjaWRlckxpc3QsIEZsb3dDaGFydEJ1aWxkZXIsIFNlbGVjdG9yRm5MaXN0IH0gZnJvbSAnLi9GbG93Q2hhcnRCdWlsZGVyLmpzJztcblxuLy8gRmFjdG9yeSAmIHV0aWxpdGllc1xuZXhwb3J0IHsgZmxvd0NoYXJ0LCBzcGVjVG9TdGFnZU5vZGUgfSBmcm9tICcuL0Zsb3dDaGFydEJ1aWxkZXIuanMnO1xuXG4vLyBUeXBlc1xuZXhwb3J0IHR5cGUge1xuICBCdWlsZFRpbWVFeHRyYWN0b3IsXG4gIEJ1aWxkVGltZU5vZGVNZXRhZGF0YSxcbiAgRXhlY09wdGlvbnMsXG4gIEZsb3dDaGFydCxcbiAgRmxvd0NoYXJ0U3BlYyxcbiAgSUxvZ2dlcixcbiAgU2NvcGVQcm90ZWN0aW9uTW9kZSxcbiAgU2VyaWFsaXplZFBpcGVsaW5lU3RydWN0dXJlLFxuICBTaW1wbGlmaWVkUGFyYWxsZWxTcGVjLFxuICBTdGFnZUZuLFxuICBTdGFnZUZ1bmN0aW9uLFxuICBTdGFnZU5vZGUsXG4gIFN0cmVhbUNhbGxiYWNrLFxuICBTdHJlYW1IYW5kbGVycyxcbiAgU3RyZWFtTGlmZWN5Y2xlSGFuZGxlcixcbiAgU3RyZWFtVG9rZW5IYW5kbGVyLFxuICBTdWJmbG93TW91bnRPcHRpb25zLFxuICBTdWJmbG93UmVmLFxuICBUcmF2ZXJzYWxFeHRyYWN0b3IsXG59IGZyb20gJy4vdHlwZXMuanMnO1xuZXhwb3J0IHsgQXJyYXlNZXJnZU1vZGUgfSBmcm9tICcuL3R5cGVzLmpzJztcbiJdfQ==
13
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL2J1aWxkZXIvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsMEJBQTBCO0FBQzFCOzs7OztHQUtHO0FBRUgsVUFBVTtBQUNWLE9BQU8sRUFBRSxXQUFXLEVBQUUsZ0JBQWdCLEVBQUUsY0FBYyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFdEYsc0JBQXNCO0FBQ3RCLE9BQU8sRUFBRSxTQUFTLEVBQUUsZUFBZSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFzQm5FLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxZQUFZLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBpc3RhbmJ1bCBpZ25vcmUgZmlsZSAqL1xuLyoqXG4gKiBidWlsZGVyLyDigJQgRmxvd2NoYXJ0IGNvbnN0cnVjdGlvbiBsaWJyYXJ5ICh6ZXJvIGRlcHMgb24gb2xkIGNvZGUpXG4gKlxuICogRmx1ZW50IEFQSSBmb3IgYnVpbGRpbmcgU3RhZ2VOb2RlIHRyZWVzIGFuZCBTZXJpYWxpemVkUGlwZWxpbmVTdHJ1Y3R1cmUuXG4gKiBDYW4gYmUgdXNlZCBzdGFuZGFsb25lIGZvciBidWlsZGluZyBmbG93Y2hhcnQgc3BlY3Mgd2l0aG91dCBleGVjdXRpb24uXG4gKi9cblxuLy8gQ2xhc3Nlc1xuZXhwb3J0IHsgRGVjaWRlckxpc3QsIEZsb3dDaGFydEJ1aWxkZXIsIFNlbGVjdG9yRm5MaXN0IH0gZnJvbSAnLi9GbG93Q2hhcnRCdWlsZGVyLmpzJztcblxuLy8gRmFjdG9yeSAmIHV0aWxpdGllc1xuZXhwb3J0IHsgZmxvd0NoYXJ0LCBzcGVjVG9TdGFnZU5vZGUgfSBmcm9tICcuL0Zsb3dDaGFydEJ1aWxkZXIuanMnO1xuXG4vLyBUeXBlc1xuZXhwb3J0IHR5cGUge1xuICBFeGVjT3B0aW9ucyxcbiAgRmxvd0NoYXJ0LFxuICBGbG93Q2hhcnRPcHRpb25zLFxuICBGbG93Q2hhcnRTcGVjLFxuICBJTG9nZ2VyLFxuICBTY29wZVByb3RlY3Rpb25Nb2RlLFxuICBTZXJpYWxpemVkUGlwZWxpbmVTdHJ1Y3R1cmUsXG4gIFNpbXBsaWZpZWRQYXJhbGxlbFNwZWMsXG4gIFN0YWdlRm4sXG4gIFN0YWdlRnVuY3Rpb24sXG4gIFN0YWdlTm9kZSxcbiAgU3RyZWFtQ2FsbGJhY2ssXG4gIFN0cmVhbUhhbmRsZXJzLFxuICBTdHJlYW1MaWZlY3ljbGVIYW5kbGVyLFxuICBTdHJlYW1Ub2tlbkhhbmRsZXIsXG4gIFN1YmZsb3dNb3VudE9wdGlvbnMsXG4gIFN1YmZsb3dSZWYsXG59IGZyb20gJy4vdHlwZXMuanMnO1xuZXhwb3J0IHsgQXJyYXlNZXJnZU1vZGUgfSBmcm9tICcuL3R5cGVzLmpzJztcblxuLy8g4pSA4pSAIEw3IOKAlCBTdHJ1Y3R1cmFsIG9ic2VydmVyIHN1cmZhY2Ug4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4vLyBgU3RydWN0dXJlUmVjb3JkZXJgIGlzIHRoZSBidWlsZC10aW1lIHR3aW4gb2YgYEZsb3dSZWNvcmRlcmAuIFRvZ2V0aGVyIHRoZXlcbi8vIGNvdmVyIGJvdGggcGhhc2VzIG9mIGNoYXJ0IGxpZmUg4oCUIHNlZSBgU3RydWN0dXJlUmVjb3JkZXIudHNgIEpTRG9jIGZvciB0aGVcbi8vIGFyY2hpdGVjdHVyYWwgcmF0aW9uYWxlICh3aHkgdHdvIGludGVyZmFjZXMsIG5vdCBvbmUgcGhhc2UtdGFnZ2VkIGV2ZW50KS5cbmV4cG9ydCB0eXBlIHtcbiAgU3RydWN0dXJlRGVjaWRlckNvbXBsZXRlRXZlbnQsXG4gIFN0cnVjdHVyZUVkZ2VBZGRlZEV2ZW50LFxuICBTdHJ1Y3R1cmVFZGdlS2luZCxcbiAgU3RydWN0dXJlTG9vcEVkZ2VBZGRlZEV2ZW50LFxuICBTdHJ1Y3R1cmVSZWNvcmRlcixcbiAgU3RydWN0dXJlU3RhZ2VBZGRlZEV2ZW50LFxuICBTdHJ1Y3R1cmVTdWJmbG93TW91bnRlZEV2ZW50LFxufSBmcm9tICcuL3N0cnVjdHVyZS9TdHJ1Y3R1cmVSZWNvcmRlci5qcyc7XG4iXX0=
@@ -0,0 +1,158 @@
1
+ /**
2
+ * StructureRecorder — passive observer of BUILD-TIME chart construction events.
3
+ *
4
+ * The build-time twin of `FlowRecorder`. Where `FlowRecorder` observes
5
+ * RUNTIME control-flow transitions (per-execution `runtimeStageId`,
6
+ * iteration counts, errors, pauses), `StructureRecorder` observes
7
+ * STATIC chart shape as it's assembled by the builder — every spec
8
+ * node added, every outgoing edge wired, every decider closed.
9
+ *
10
+ * Why two interfaces, not one
11
+ * ───────────────────────────
12
+ * Build and runtime events have different INVARIANTS, not just
13
+ * different timing:
14
+ *
15
+ * - Runtime events carry `runtimeStageId` (`[subflowPath/]stageId#N`),
16
+ * `iteration`, `traversalContext` — load-bearing for time-travel
17
+ * UIs, commit-log indices, and `SequenceRecorder<T>` consumers.
18
+ * NONE of these exist at build time.
19
+ *
20
+ * - Build events carry only `stageId` + structural fields. No
21
+ * execution index, no iteration, no snapshot.
22
+ *
23
+ * - Some events have no analog across phases: `onPause` /
24
+ * `onResume` / `onError` / `onRunStart` are runtime-only;
25
+ * `onDeciderComplete` / `onStageAdded` are build-only.
26
+ *
27
+ * A single `FlowRecorder` with `phase: 'static' | 'dynamic'`
28
+ * discriminator would force every consumer to write
29
+ * `if (e.phase === 'static') ...` branches and would erase the
30
+ * least-privilege boundary (a static-only consumer should NOT
31
+ * accidentally observe runtime data — e.g., a public docs site
32
+ * rendering chart topology must not see scope values).
33
+ *
34
+ * Two interfaces, same mental model, clean separation. Two
35
+ * registration sites ship today (pick whichever fits your call
36
+ * site):
37
+ *
38
+ * 1. **Options-bag** (preferred when the recorder set is known
39
+ * at construction time — registers BEFORE `start()` so even
40
+ * the seed event fires through the normal dispatcher fan-out):
41
+ * ```ts
42
+ * flowChart('seed', fn, 'seed', { structureRecorders: [rec] })
43
+ * .addFunction('a', fnA, 'a').build();
44
+ * ```
45
+ *
46
+ * 2. **Fluent** (preferred when attach is conditional, late, or
47
+ * in a chain builder — the just-attached recorder gets a
48
+ * one-time seed replay so it observes the root stage):
49
+ * ```ts
50
+ * flowChart('seed', fn, 'seed')
51
+ * .attachStructureRecorder(rec)
52
+ * .addFunction('a', fnA, 'a').build();
53
+ * ```
54
+ *
55
+ * Both deliver the same event stream to the same recorder. See the
56
+ * `@example` block below for a fully-fleshed-out implementation.
57
+ *
58
+ * Lifecycle + ordering invariants
59
+ * ───────────────────────────────
60
+ * - Fires SYNCHRONOUSLY during builder chain calls (and during
61
+ * `.build()` for the terminal node) at the natural moment each
62
+ * spec mutation completes.
63
+ * - `onStageAdded(A)` and `onStageAdded(B)` fire BEFORE any
64
+ * `onEdgeAdded({from: A, to: B})` — endpoint registration
65
+ * happens before edge wiring.
66
+ * - `onDeciderComplete(D)` fires at sub-builder `.end()` time, AFTER
67
+ * every child's `onStageAdded` and every `onEdgeAdded({from: D,
68
+ * to: child})`. Marks the decider as no-further-mutation.
69
+ * - `onSubflowMounted({subflowId})` fires once per mount.
70
+ * **MOUNT-ONLY**: parent recorders do NOT receive a replay of
71
+ * the subflow's own internal structure events (those fired
72
+ * during the subflow's own `.build()`). Matches the runtime
73
+ * `onSubflowEntry` semantics — composition over replay.
74
+ *
75
+ * Error isolation (matches FlowRecorder contract)
76
+ * ───────────────────────────────────────────────
77
+ * - A throwing handler is caught, logged via `isDevMode()` warning,
78
+ * and accumulated on `builder.getStructureBuildErrors()` for
79
+ * post-hoc inspection.
80
+ * - Subsequent recorders + subsequent events fire normally; one
81
+ * misbehaving recorder cannot THROW its way into blocking
82
+ * construction.
83
+ * - The errors[] accumulator is soft-capped (~100 entries) with a
84
+ * `__truncated__` sentinel record once the cap is hit, to prevent
85
+ * unbounded growth on chatty broken recorders.
86
+ * - Note: throw isolation does NOT defend against a handler that
87
+ * succeeds at runtime but mutates `event.spec` to corrupt the
88
+ * chart. See "Spec mutation" below.
89
+ *
90
+ * Spec mutation — readonly-by-contract (NOT runtime-enforced)
91
+ * ────────────────────────────────────────────────────────────
92
+ * - Event payloads pass spec references where useful (e.g., `spec`
93
+ * on `onStageAdded`). Every field on every event payload is
94
+ * marked `readonly` in TypeScript — the type system signals
95
+ * consumer intent at author time.
96
+ * - There is NO runtime freeze. The builder fires `onStageAdded`
97
+ * IMMEDIATELY when a spec node is added, BEFORE the builder
98
+ * wires that node's `.next`/`.children`/`.loopTarget` in the
99
+ * subsequent `addX` call. Freezing here would break the
100
+ * builder's own subsequent mutation.
101
+ * - Handler mutation of `event.spec` is DOCUMENTED UNDEFINED
102
+ * BEHAVIOR — it will succeed at runtime, but is not supported
103
+ * and downstream consumers may break. Specifically, mutating
104
+ * `event.spec.fn`, `event.spec.id`, or `event.spec.children`
105
+ * can corrupt subsequent runtime behavior of the chart.
106
+ * - **Trust model**: attach ONLY recorders from trusted code paths.
107
+ * A hostile or buggy recorder can effectively substitute stage
108
+ * functions or rewire the chart structure. The `readonly`
109
+ * markers cannot defend against intentional mutation.
110
+ *
111
+ * @example
112
+ * ```ts
113
+ * class TraceStructureRecorder implements StructureRecorder {
114
+ * readonly id = 'trace-static';
115
+ * nodes: XyflowNode[] = [];
116
+ * edges: XyflowEdge[] = [];
117
+ *
118
+ * onStageAdded(e) {
119
+ * // Node role: 'stage' is the initial type. If outgoing edges
120
+ * // arrive with kind 'fork-branch' / 'decision-branch' the node
121
+ * // is functioning as a fork/decider — derive the visual style
122
+ * // from those edges, not from `e.type` alone.
123
+ * this.nodes.push({ id: e.stageId, type: 'lensStage', data: { label: e.name } });
124
+ * }
125
+ * onEdgeAdded(e) {
126
+ * this.edges.push({ id: `${e.from}->${e.to}`, source: e.from, target: e.to });
127
+ * }
128
+ * onSubflowMounted(e) {
129
+ * this.nodes.push({ id: e.subflowId, type: 'subflow', data: { label: e.subflowName } });
130
+ * }
131
+ * onDeciderComplete(e) {
132
+ * // Optional: finalize node styling now that branch list is sealed.
133
+ * }
134
+ * }
135
+ *
136
+ * // Registration option A — options-bag (preferred when recorders
137
+ * // are known up front; attaches BEFORE the seed event fires):
138
+ * const rec = new TraceStructureRecorder();
139
+ * const builder = flowChart('seed', fn, 'seed', {
140
+ * structureRecorders: [rec],
141
+ * }).addFunction('a', fnA, 'a');
142
+ * const chart = builder.build();
143
+ *
144
+ * // Registration option B — fluent chain (preferred for conditional
145
+ * // or late attach; the just-attached recorder gets a seed replay):
146
+ * const rec2 = new TraceStructureRecorder();
147
+ * const builder2 = flowChart('seed', fn, 'seed')
148
+ * .attachStructureRecorder(rec2)
149
+ * .addFunction('a', fnA, 'a');
150
+ *
151
+ * // Inspect any recorder errors (call on the BUILDER, not the chart):
152
+ * const errors = builder.getStructureBuildErrors();
153
+ *
154
+ * <ReactFlow nodes={rec.nodes} edges={rec.edges} />
155
+ * ```
156
+ */
157
+ export {};
158
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3RydWN0dXJlUmVjb3JkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL2J1aWxkZXIvc3RydWN0dXJlL1N0cnVjdHVyZVJlY29yZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTJKRyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogU3RydWN0dXJlUmVjb3JkZXIg4oCUIHBhc3NpdmUgb2JzZXJ2ZXIgb2YgQlVJTEQtVElNRSBjaGFydCBjb25zdHJ1Y3Rpb24gZXZlbnRzLlxuICpcbiAqIFRoZSBidWlsZC10aW1lIHR3aW4gb2YgYEZsb3dSZWNvcmRlcmAuIFdoZXJlIGBGbG93UmVjb3JkZXJgIG9ic2VydmVzXG4gKiBSVU5USU1FIGNvbnRyb2wtZmxvdyB0cmFuc2l0aW9ucyAocGVyLWV4ZWN1dGlvbiBgcnVudGltZVN0YWdlSWRgLFxuICogaXRlcmF0aW9uIGNvdW50cywgZXJyb3JzLCBwYXVzZXMpLCBgU3RydWN0dXJlUmVjb3JkZXJgIG9ic2VydmVzXG4gKiBTVEFUSUMgY2hhcnQgc2hhcGUgYXMgaXQncyBhc3NlbWJsZWQgYnkgdGhlIGJ1aWxkZXIg4oCUIGV2ZXJ5IHNwZWNcbiAqIG5vZGUgYWRkZWQsIGV2ZXJ5IG91dGdvaW5nIGVkZ2Ugd2lyZWQsIGV2ZXJ5IGRlY2lkZXIgY2xvc2VkLlxuICpcbiAqIFdoeSB0d28gaW50ZXJmYWNlcywgbm90IG9uZVxuICog4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4gKiAgIEJ1aWxkIGFuZCBydW50aW1lIGV2ZW50cyBoYXZlIGRpZmZlcmVudCBJTlZBUklBTlRTLCBub3QganVzdFxuICogICBkaWZmZXJlbnQgdGltaW5nOlxuICpcbiAqICAgICAtIFJ1bnRpbWUgZXZlbnRzIGNhcnJ5IGBydW50aW1lU3RhZ2VJZGAgKGBbc3ViZmxvd1BhdGgvXXN0YWdlSWQjTmApLFxuICogICAgICAgYGl0ZXJhdGlvbmAsIGB0cmF2ZXJzYWxDb250ZXh0YCDigJQgbG9hZC1iZWFyaW5nIGZvciB0aW1lLXRyYXZlbFxuICogICAgICAgVUlzLCBjb21taXQtbG9nIGluZGljZXMsIGFuZCBgU2VxdWVuY2VSZWNvcmRlcjxUPmAgY29uc3VtZXJzLlxuICogICAgICAgTk9ORSBvZiB0aGVzZSBleGlzdCBhdCBidWlsZCB0aW1lLlxuICpcbiAqICAgICAtIEJ1aWxkIGV2ZW50cyBjYXJyeSBvbmx5IGBzdGFnZUlkYCArIHN0cnVjdHVyYWwgZmllbGRzLiBOb1xuICogICAgICAgZXhlY3V0aW9uIGluZGV4LCBubyBpdGVyYXRpb24sIG5vIHNuYXBzaG90LlxuICpcbiAqICAgICAtIFNvbWUgZXZlbnRzIGhhdmUgbm8gYW5hbG9nIGFjcm9zcyBwaGFzZXM6IGBvblBhdXNlYCAvXG4gKiAgICAgICBgb25SZXN1bWVgIC8gYG9uRXJyb3JgIC8gYG9uUnVuU3RhcnRgIGFyZSBydW50aW1lLW9ubHk7XG4gKiAgICAgICBgb25EZWNpZGVyQ29tcGxldGVgIC8gYG9uU3RhZ2VBZGRlZGAgYXJlIGJ1aWxkLW9ubHkuXG4gKlxuICogICBBIHNpbmdsZSBgRmxvd1JlY29yZGVyYCB3aXRoIGBwaGFzZTogJ3N0YXRpYycgfCAnZHluYW1pYydgXG4gKiAgIGRpc2NyaW1pbmF0b3Igd291bGQgZm9yY2UgZXZlcnkgY29uc3VtZXIgdG8gd3JpdGVcbiAqICAgYGlmIChlLnBoYXNlID09PSAnc3RhdGljJykgLi4uYCBicmFuY2hlcyBhbmQgd291bGQgZXJhc2UgdGhlXG4gKiAgIGxlYXN0LXByaXZpbGVnZSBib3VuZGFyeSAoYSBzdGF0aWMtb25seSBjb25zdW1lciBzaG91bGQgTk9UXG4gKiAgIGFjY2lkZW50YWxseSBvYnNlcnZlIHJ1bnRpbWUgZGF0YSDigJQgZS5nLiwgYSBwdWJsaWMgZG9jcyBzaXRlXG4gKiAgIHJlbmRlcmluZyBjaGFydCB0b3BvbG9neSBtdXN0IG5vdCBzZWUgc2NvcGUgdmFsdWVzKS5cbiAqXG4gKiAgIFR3byBpbnRlcmZhY2VzLCBzYW1lIG1lbnRhbCBtb2RlbCwgY2xlYW4gc2VwYXJhdGlvbi4gVHdvXG4gKiAgIHJlZ2lzdHJhdGlvbiBzaXRlcyBzaGlwIHRvZGF5IChwaWNrIHdoaWNoZXZlciBmaXRzIHlvdXIgY2FsbFxuICogICBzaXRlKTpcbiAqXG4gKiAgICAgMS4gKipPcHRpb25zLWJhZyoqIChwcmVmZXJyZWQgd2hlbiB0aGUgcmVjb3JkZXIgc2V0IGlzIGtub3duXG4gKiAgICAgICAgYXQgY29uc3RydWN0aW9uIHRpbWUg4oCUIHJlZ2lzdGVycyBCRUZPUkUgYHN0YXJ0KClgIHNvIGV2ZW5cbiAqICAgICAgICB0aGUgc2VlZCBldmVudCBmaXJlcyB0aHJvdWdoIHRoZSBub3JtYWwgZGlzcGF0Y2hlciBmYW4tb3V0KTpcbiAqICAgICAgICBgYGB0c1xuICogICAgICAgIGZsb3dDaGFydCgnc2VlZCcsIGZuLCAnc2VlZCcsIHsgc3RydWN0dXJlUmVjb3JkZXJzOiBbcmVjXSB9KVxuICogICAgICAgICAgLmFkZEZ1bmN0aW9uKCdhJywgZm5BLCAnYScpLmJ1aWxkKCk7XG4gKiAgICAgICAgYGBgXG4gKlxuICogICAgIDIuICoqRmx1ZW50KiogKHByZWZlcnJlZCB3aGVuIGF0dGFjaCBpcyBjb25kaXRpb25hbCwgbGF0ZSwgb3JcbiAqICAgICAgICBpbiBhIGNoYWluIGJ1aWxkZXIg4oCUIHRoZSBqdXN0LWF0dGFjaGVkIHJlY29yZGVyIGdldHMgYVxuICogICAgICAgIG9uZS10aW1lIHNlZWQgcmVwbGF5IHNvIGl0IG9ic2VydmVzIHRoZSByb290IHN0YWdlKTpcbiAqICAgICAgICBgYGB0c1xuICogICAgICAgIGZsb3dDaGFydCgnc2VlZCcsIGZuLCAnc2VlZCcpXG4gKiAgICAgICAgICAuYXR0YWNoU3RydWN0dXJlUmVjb3JkZXIocmVjKVxuICogICAgICAgICAgLmFkZEZ1bmN0aW9uKCdhJywgZm5BLCAnYScpLmJ1aWxkKCk7XG4gKiAgICAgICAgYGBgXG4gKlxuICogICBCb3RoIGRlbGl2ZXIgdGhlIHNhbWUgZXZlbnQgc3RyZWFtIHRvIHRoZSBzYW1lIHJlY29yZGVyLiBTZWUgdGhlXG4gKiAgIGBAZXhhbXBsZWAgYmxvY2sgYmVsb3cgZm9yIGEgZnVsbHktZmxlc2hlZC1vdXQgaW1wbGVtZW50YXRpb24uXG4gKlxuICogTGlmZWN5Y2xlICsgb3JkZXJpbmcgaW52YXJpYW50c1xuICog4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4gKiAgIC0gRmlyZXMgU1lOQ0hST05PVVNMWSBkdXJpbmcgYnVpbGRlciBjaGFpbiBjYWxscyAoYW5kIGR1cmluZ1xuICogICAgIGAuYnVpbGQoKWAgZm9yIHRoZSB0ZXJtaW5hbCBub2RlKSBhdCB0aGUgbmF0dXJhbCBtb21lbnQgZWFjaFxuICogICAgIHNwZWMgbXV0YXRpb24gY29tcGxldGVzLlxuICogICAtIGBvblN0YWdlQWRkZWQoQSlgIGFuZCBgb25TdGFnZUFkZGVkKEIpYCBmaXJlIEJFRk9SRSBhbnlcbiAqICAgICBgb25FZGdlQWRkZWQoe2Zyb206IEEsIHRvOiBCfSlgIOKAlCBlbmRwb2ludCByZWdpc3RyYXRpb25cbiAqICAgICBoYXBwZW5zIGJlZm9yZSBlZGdlIHdpcmluZy5cbiAqICAgLSBgb25EZWNpZGVyQ29tcGxldGUoRClgIGZpcmVzIGF0IHN1Yi1idWlsZGVyIGAuZW5kKClgIHRpbWUsIEFGVEVSXG4gKiAgICAgZXZlcnkgY2hpbGQncyBgb25TdGFnZUFkZGVkYCBhbmQgZXZlcnkgYG9uRWRnZUFkZGVkKHtmcm9tOiBELFxuICogICAgIHRvOiBjaGlsZH0pYC4gTWFya3MgdGhlIGRlY2lkZXIgYXMgbm8tZnVydGhlci1tdXRhdGlvbi5cbiAqICAgLSBgb25TdWJmbG93TW91bnRlZCh7c3ViZmxvd0lkfSlgIGZpcmVzIG9uY2UgcGVyIG1vdW50LlxuICogICAgICoqTU9VTlQtT05MWSoqOiBwYXJlbnQgcmVjb3JkZXJzIGRvIE5PVCByZWNlaXZlIGEgcmVwbGF5IG9mXG4gKiAgICAgdGhlIHN1YmZsb3cncyBvd24gaW50ZXJuYWwgc3RydWN0dXJlIGV2ZW50cyAodGhvc2UgZmlyZWRcbiAqICAgICBkdXJpbmcgdGhlIHN1YmZsb3cncyBvd24gYC5idWlsZCgpYCkuIE1hdGNoZXMgdGhlIHJ1bnRpbWVcbiAqICAgICBgb25TdWJmbG93RW50cnlgIHNlbWFudGljcyDigJQgY29tcG9zaXRpb24gb3ZlciByZXBsYXkuXG4gKlxuICogRXJyb3IgaXNvbGF0aW9uIChtYXRjaGVzIEZsb3dSZWNvcmRlciBjb250cmFjdClcbiAqIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuICogICAtIEEgdGhyb3dpbmcgaGFuZGxlciBpcyBjYXVnaHQsIGxvZ2dlZCB2aWEgYGlzRGV2TW9kZSgpYCB3YXJuaW5nLFxuICogICAgIGFuZCBhY2N1bXVsYXRlZCBvbiBgYnVpbGRlci5nZXRTdHJ1Y3R1cmVCdWlsZEVycm9ycygpYCBmb3JcbiAqICAgICBwb3N0LWhvYyBpbnNwZWN0aW9uLlxuICogICAtIFN1YnNlcXVlbnQgcmVjb3JkZXJzICsgc3Vic2VxdWVudCBldmVudHMgZmlyZSBub3JtYWxseTsgb25lXG4gKiAgICAgbWlzYmVoYXZpbmcgcmVjb3JkZXIgY2Fubm90IFRIUk9XIGl0cyB3YXkgaW50byBibG9ja2luZ1xuICogICAgIGNvbnN0cnVjdGlvbi5cbiAqICAgLSBUaGUgZXJyb3JzW10gYWNjdW11bGF0b3IgaXMgc29mdC1jYXBwZWQgKH4xMDAgZW50cmllcykgd2l0aCBhXG4gKiAgICAgYF9fdHJ1bmNhdGVkX19gIHNlbnRpbmVsIHJlY29yZCBvbmNlIHRoZSBjYXAgaXMgaGl0LCB0byBwcmV2ZW50XG4gKiAgICAgdW5ib3VuZGVkIGdyb3d0aCBvbiBjaGF0dHkgYnJva2VuIHJlY29yZGVycy5cbiAqICAgLSBOb3RlOiB0aHJvdyBpc29sYXRpb24gZG9lcyBOT1QgZGVmZW5kIGFnYWluc3QgYSBoYW5kbGVyIHRoYXRcbiAqICAgICBzdWNjZWVkcyBhdCBydW50aW1lIGJ1dCBtdXRhdGVzIGBldmVudC5zcGVjYCB0byBjb3JydXB0IHRoZVxuICogICAgIGNoYXJ0LiBTZWUgXCJTcGVjIG11dGF0aW9uXCIgYmVsb3cuXG4gKlxuICogU3BlYyBtdXRhdGlvbiDigJQgcmVhZG9ubHktYnktY29udHJhY3QgKE5PVCBydW50aW1lLWVuZm9yY2VkKVxuICog4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4gKiAgIC0gRXZlbnQgcGF5bG9hZHMgcGFzcyBzcGVjIHJlZmVyZW5jZXMgd2hlcmUgdXNlZnVsIChlLmcuLCBgc3BlY2BcbiAqICAgICBvbiBgb25TdGFnZUFkZGVkYCkuIEV2ZXJ5IGZpZWxkIG9uIGV2ZXJ5IGV2ZW50IHBheWxvYWQgaXNcbiAqICAgICBtYXJrZWQgYHJlYWRvbmx5YCBpbiBUeXBlU2NyaXB0IOKAlCB0aGUgdHlwZSBzeXN0ZW0gc2lnbmFsc1xuICogICAgIGNvbnN1bWVyIGludGVudCBhdCBhdXRob3IgdGltZS5cbiAqICAgLSBUaGVyZSBpcyBOTyBydW50aW1lIGZyZWV6ZS4gVGhlIGJ1aWxkZXIgZmlyZXMgYG9uU3RhZ2VBZGRlZGBcbiAqICAgICBJTU1FRElBVEVMWSB3aGVuIGEgc3BlYyBub2RlIGlzIGFkZGVkLCBCRUZPUkUgdGhlIGJ1aWxkZXJcbiAqICAgICB3aXJlcyB0aGF0IG5vZGUncyBgLm5leHRgL2AuY2hpbGRyZW5gL2AubG9vcFRhcmdldGAgaW4gdGhlXG4gKiAgICAgc3Vic2VxdWVudCBgYWRkWGAgY2FsbC4gRnJlZXppbmcgaGVyZSB3b3VsZCBicmVhayB0aGVcbiAqICAgICBidWlsZGVyJ3Mgb3duIHN1YnNlcXVlbnQgbXV0YXRpb24uXG4gKiAgIC0gSGFuZGxlciBtdXRhdGlvbiBvZiBgZXZlbnQuc3BlY2AgaXMgRE9DVU1FTlRFRCBVTkRFRklORURcbiAqICAgICBCRUhBVklPUiDigJQgaXQgd2lsbCBzdWNjZWVkIGF0IHJ1bnRpbWUsIGJ1dCBpcyBub3Qgc3VwcG9ydGVkXG4gKiAgICAgYW5kIGRvd25zdHJlYW0gY29uc3VtZXJzIG1heSBicmVhay4gU3BlY2lmaWNhbGx5LCBtdXRhdGluZ1xuICogICAgIGBldmVudC5zcGVjLmZuYCwgYGV2ZW50LnNwZWMuaWRgLCBvciBgZXZlbnQuc3BlYy5jaGlsZHJlbmBcbiAqICAgICBjYW4gY29ycnVwdCBzdWJzZXF1ZW50IHJ1bnRpbWUgYmVoYXZpb3Igb2YgdGhlIGNoYXJ0LlxuICogICAtICoqVHJ1c3QgbW9kZWwqKjogYXR0YWNoIE9OTFkgcmVjb3JkZXJzIGZyb20gdHJ1c3RlZCBjb2RlIHBhdGhzLlxuICogICAgIEEgaG9zdGlsZSBvciBidWdneSByZWNvcmRlciBjYW4gZWZmZWN0aXZlbHkgc3Vic3RpdHV0ZSBzdGFnZVxuICogICAgIGZ1bmN0aW9ucyBvciByZXdpcmUgdGhlIGNoYXJ0IHN0cnVjdHVyZS4gVGhlIGByZWFkb25seWBcbiAqICAgICBtYXJrZXJzIGNhbm5vdCBkZWZlbmQgYWdhaW5zdCBpbnRlbnRpb25hbCBtdXRhdGlvbi5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHNcbiAqIGNsYXNzIFRyYWNlU3RydWN0dXJlUmVjb3JkZXIgaW1wbGVtZW50cyBTdHJ1Y3R1cmVSZWNvcmRlciB7XG4gKiAgIHJlYWRvbmx5IGlkID0gJ3RyYWNlLXN0YXRpYyc7XG4gKiAgIG5vZGVzOiBYeWZsb3dOb2RlW10gPSBbXTtcbiAqICAgZWRnZXM6IFh5Zmxvd0VkZ2VbXSA9IFtdO1xuICpcbiAqICAgb25TdGFnZUFkZGVkKGUpIHtcbiAqICAgICAvLyBOb2RlIHJvbGU6ICdzdGFnZScgaXMgdGhlIGluaXRpYWwgdHlwZS4gSWYgb3V0Z29pbmcgZWRnZXNcbiAqICAgICAvLyBhcnJpdmUgd2l0aCBraW5kICdmb3JrLWJyYW5jaCcgLyAnZGVjaXNpb24tYnJhbmNoJyB0aGUgbm9kZVxuICogICAgIC8vIGlzIGZ1bmN0aW9uaW5nIGFzIGEgZm9yay9kZWNpZGVyIOKAlCBkZXJpdmUgdGhlIHZpc3VhbCBzdHlsZVxuICogICAgIC8vIGZyb20gdGhvc2UgZWRnZXMsIG5vdCBmcm9tIGBlLnR5cGVgIGFsb25lLlxuICogICAgIHRoaXMubm9kZXMucHVzaCh7IGlkOiBlLnN0YWdlSWQsIHR5cGU6ICdsZW5zU3RhZ2UnLCBkYXRhOiB7IGxhYmVsOiBlLm5hbWUgfSB9KTtcbiAqICAgfVxuICogICBvbkVkZ2VBZGRlZChlKSB7XG4gKiAgICAgdGhpcy5lZGdlcy5wdXNoKHsgaWQ6IGAke2UuZnJvbX0tPiR7ZS50b31gLCBzb3VyY2U6IGUuZnJvbSwgdGFyZ2V0OiBlLnRvIH0pO1xuICogICB9XG4gKiAgIG9uU3ViZmxvd01vdW50ZWQoZSkge1xuICogICAgIHRoaXMubm9kZXMucHVzaCh7IGlkOiBlLnN1YmZsb3dJZCwgdHlwZTogJ3N1YmZsb3cnLCBkYXRhOiB7IGxhYmVsOiBlLnN1YmZsb3dOYW1lIH0gfSk7XG4gKiAgIH1cbiAqICAgb25EZWNpZGVyQ29tcGxldGUoZSkge1xuICogICAgIC8vIE9wdGlvbmFsOiBmaW5hbGl6ZSBub2RlIHN0eWxpbmcgbm93IHRoYXQgYnJhbmNoIGxpc3QgaXMgc2VhbGVkLlxuICogICB9XG4gKiB9XG4gKlxuICogLy8gUmVnaXN0cmF0aW9uIG9wdGlvbiBBIOKAlCBvcHRpb25zLWJhZyAocHJlZmVycmVkIHdoZW4gcmVjb3JkZXJzXG4gKiAvLyBhcmUga25vd24gdXAgZnJvbnQ7IGF0dGFjaGVzIEJFRk9SRSB0aGUgc2VlZCBldmVudCBmaXJlcyk6XG4gKiBjb25zdCByZWMgPSBuZXcgVHJhY2VTdHJ1Y3R1cmVSZWNvcmRlcigpO1xuICogY29uc3QgYnVpbGRlciA9IGZsb3dDaGFydCgnc2VlZCcsIGZuLCAnc2VlZCcsIHtcbiAqICAgc3RydWN0dXJlUmVjb3JkZXJzOiBbcmVjXSxcbiAqIH0pLmFkZEZ1bmN0aW9uKCdhJywgZm5BLCAnYScpO1xuICogY29uc3QgY2hhcnQgPSBidWlsZGVyLmJ1aWxkKCk7XG4gKlxuICogLy8gUmVnaXN0cmF0aW9uIG9wdGlvbiBCIOKAlCBmbHVlbnQgY2hhaW4gKHByZWZlcnJlZCBmb3IgY29uZGl0aW9uYWxcbiAqIC8vIG9yIGxhdGUgYXR0YWNoOyB0aGUganVzdC1hdHRhY2hlZCByZWNvcmRlciBnZXRzIGEgc2VlZCByZXBsYXkpOlxuICogY29uc3QgcmVjMiA9IG5ldyBUcmFjZVN0cnVjdHVyZVJlY29yZGVyKCk7XG4gKiBjb25zdCBidWlsZGVyMiA9IGZsb3dDaGFydCgnc2VlZCcsIGZuLCAnc2VlZCcpXG4gKiAgIC5hdHRhY2hTdHJ1Y3R1cmVSZWNvcmRlcihyZWMyKVxuICogICAuYWRkRnVuY3Rpb24oJ2EnLCBmbkEsICdhJyk7XG4gKlxuICogLy8gSW5zcGVjdCBhbnkgcmVjb3JkZXIgZXJyb3JzIChjYWxsIG9uIHRoZSBCVUlMREVSLCBub3QgdGhlIGNoYXJ0KTpcbiAqIGNvbnN0IGVycm9ycyA9IGJ1aWxkZXIuZ2V0U3RydWN0dXJlQnVpbGRFcnJvcnMoKTtcbiAqXG4gKiA8UmVhY3RGbG93IG5vZGVzPXtyZWMubm9kZXN9IGVkZ2VzPXtyZWMuZWRnZXN9IC8+XG4gKiBgYGBcbiAqL1xuXG5pbXBvcnQgdHlwZSB7IEZsb3dDaGFydFNwZWMsIFNlcmlhbGl6ZWRQaXBlbGluZVN0cnVjdHVyZSB9IGZyb20gJy4uL3R5cGVzLmpzJztcblxuLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4vLyBFdmVudCBwYXlsb2FkIHR5cGVzXG4vLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuLyoqXG4gKiBFdmVudCBwYXlsb2FkIGZvciBgU3RydWN0dXJlUmVjb3JkZXIub25TdGFnZUFkZGVkYC4gRmlyZXMgZm9yIGV2ZXJ5XG4gKiBzcGVjIG5vZGUgYWRkZWQgdG8gdGhlIGNoYXJ0LCBpbmNsdWRpbmcgdGhlIHNlZWQgKGFkZGVkIHZpYVxuICogYGZsb3dDaGFydCgpYCBmYWN0b3J5KSBhbmQgc3ViZmxvdyBtb3VudCBub2Rlcy4gRXhjbHVkZXMgc3ludGhldGljXG4gKiBsb29wLXJlZmVyZW5jZSBub2RlcyAodGhvc2UgY2FycnkgYGlzTG9vcFJlZmVyZW5jZTogdHJ1ZWAgb24gdGhlXG4gKiBzcGVjOyBjb25zdW1lcnMgc2VlIHRoZW0gdmlhIHRoZSBzZXBhcmF0ZSBgb25Mb29wRWRnZUFkZGVkYCBldmVudFxuICogaW5zdGVhZCBvZiBhcyBmcmVzaCBzdGFnZXMpLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFN0cnVjdHVyZVN0YWdlQWRkZWRFdmVudCB7XG4gIC8qKlxuICAgKiBTdGFibGUgaWRlbnRpZmllciBmb3IgdGhpcyBub2RlLiBBVCBFVkVOVCBGSVJFIFRJTUUgdGhpcyBpcyB0aGVcbiAgICogYnVpbGRlcidzIExPQ0FMIGZvcm0gKG5vIHN1YmZsb3cgcHJlZml4IOKAlCB0aGUgcHJlZml4IGlzIGFwcGxpZWRcbiAgICogbGF0ZXIgYnkgYF9wcmVmaXhOb2RlVHJlZWAgd2hlbiB0aGlzIGJ1aWxkZXIgaXMgbW91bnRlZCBhcyBhXG4gICAqIHN1YmZsb3cgaW50byBhIHBhcmVudCkuXG4gICAqXG4gICAqIE5vdGU6IGBzcGVjLmlkYCBpcyBhIExJVkUgcmVmZXJlbmNlLiBJZiB5b3UgcmVhZCBpdCBBRlRFUiB0aGlzXG4gICAqIGNoYXJ0IGhhcyBiZWVuIG1vdW50ZWQgYXMgYSBzdWJmbG93LCBpdCBtYXkgaGF2ZSBiZWVuIHJld3JpdHRlblxuICAgKiB0byB0aGUgRlVMTCBwcmVmaXhlZCBmb3JtLiBVc2UgYHNwbGl0U3RhZ2VJZChzcGVjLmlkKWAgZnJvbVxuICAgKiBgZm9vdHByaW50anMvdHJhY2VgIHRvIGRlY29tcG9zZSBpdCBiYWNrIGludG8gbG9jYWwgKyBzdWJmbG93UGF0aC5cbiAgICpcbiAgICogQ29ycmVsYXRpbmcgd2l0aCBydW50aW1lIGV2ZW50czpcbiAgICogICAtIFNhbWUgYnVpbGRlciAobm8gbW91bnQpIOKGklxuICAgKiAgICAgYGV2ZW50LnN0YWdlSWQgPT09IHBhcnNlUnVudGltZVN0YWdlSWQocnVudGltZSkuc3RhZ2VJZGBcbiAgICogICAtIFRoaXMgYnVpbGRlciBtb3VudGVkIGFzIHN1YmZsb3cg4oaSIHVzZSBgc3BsaXRTdGFnZUlkYCBvbiB0aGVcbiAgICogICAgIHByZWZpeGVkIGZvcm0gKG9yIGBwYXJzZVJ1bnRpbWVTdGFnZUlkYCBvbiB0aGUgZnVsbFxuICAgKiAgICAgcnVudGltZVN0YWdlSWQpIGJlZm9yZSBjb21wYXJpbmcuXG4gICAqL1xuICByZWFkb25seSBzdGFnZUlkOiBzdHJpbmc7XG4gIC8qKiBIdW1hbi1yZWFkYWJsZSBsYWJlbCBmb3IgdGhlIG5vZGUuICovXG4gIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcbiAgLyoqIFNwZWMgbm9kZSBgdHlwZWAuIExldHMgcmVjb3JkZXJzIGJyYW5jaCBvbiBzdGFnZSB2cyBkZWNpZGVyIHZzXG4gICAqICBmb3JrIHZzIHN1YmZsb3cgd2l0aG91dCByZS1kZXJpdmluZyBmcm9tIG90aGVyIGZpZWxkcy4gKi9cbiAgcmVhZG9ubHkgdHlwZTogTm9uTnVsbGFibGU8Rmxvd0NoYXJ0U3BlY1sndHlwZSddPjtcbiAgLyoqIFRydWUgZm9yIG5vZGVzIGFkZGVkIHZpYSBgYWRkUGF1c2FibGVGdW5jdGlvbigpYCDigJQgdXNlZnVsIGZvclxuICAgKiAgdmlzdWFsaXNlcnMgdGhhdCB3YW50IHRvIG1hcmsgc3RhZ2VzIHRoYXQgY2FuIHBhdXNlIGV4ZWN1dGlvbi4gKi9cbiAgcmVhZG9ubHkgaXNQYXVzYWJsZT86IGJvb2xlYW47XG4gIC8qKiBMaXZlIHJlZmVyZW5jZSB0byB0aGUgZnVsbCBzcGVjIG5vZGUsIGZvciBoYW5kbGVycyB0aGF0IHdhbnRcbiAgICogIGRldGFpbHMgYmV5b25kIHRoZSBkaXNjcmltaW5hdG9yIGZpZWxkcyBhYm92ZS4gTVVTVCBOT1QgYmVcbiAgICogIG11dGF0ZWQgYnkgdGhlIGhhbmRsZXIg4oCUIHJlYWRvbmx5IGlzIHR5cGUtbGV2ZWwgaW50ZW50OyBub1xuICAgKiAgcnVudGltZSBmcmVlemUuIFNlZSBcIlNwZWMgbXV0YXRpb25cIiBpbiB0aGUgZmlsZSBoZWFkZXIgZm9yIHRoZVxuICAgKiAgdHJ1c3QtbW9kZWwgY2F2ZWF0cy4gKi9cbiAgcmVhZG9ubHkgc3BlYzogRmxvd0NoYXJ0U3BlYztcbn1cblxuLyoqIEVkZ2Uga2luZHMgdGhlIGJ1aWxkZXIgcHJvZHVjZXMgYXQgc3RydWN0dXJhbCB0aW1lLiBNYXRjaGVzIHRoZVxuICogIGZvb3RwcmludGpzIGNvbnRyb2wtZmxvdyB2b2NhYnVsYXJ5IHVzZWQgYXQgcnVudGltZS5cbiAqXG4gKiAgV2h5IG5vIGBzdWJmbG93LWVudHJ5YCBoZXJlOiBzdWJmbG93IG1vdW50cyB1c2UgdGhlIGxpZmVjeWNsZVxuICogIGV2ZW50IGBvblN1YmZsb3dNb3VudGVkYCAobm90IGFuIGVkZ2UgZXZlbnQpLiBJZiBhIGZ1dHVyZSB1c2UgY2FzZVxuICogIG5lZWRzIHRoZSBwYXJlbnTihpJzdWJmbG93LXJvb3QgZWRnZSBhcyBhIGRpc3RpbmN0IGtpbmQsIGl0J2xsIGJlXG4gKiAgYWRkZWQgdGhlbiDigJQgWUFHTkkgbm93IChQYW5lbCAzLCBMNy4yIHJldmlldykuICovXG5leHBvcnQgdHlwZSBTdHJ1Y3R1cmVFZGdlS2luZCA9XG4gIHwgJ25leHQnIC8vIGxpbmVhciBjaGFpbjogcHJldi5uZXh0ID0gY3VyclxuICB8ICdmb3JrLWJyYW5jaCcgLy8gZm9yayBwYXJlbnQg4oaSIHBhcmFsbGVsIGNoaWxkXG4gIHwgJ2RlY2lzaW9uLWJyYW5jaCc7IC8vIGRlY2lkZXIg4oaSIGJyYW5jaCBjaGlsZFxuXG4vKipcbiAqIEV2ZW50IHBheWxvYWQgZm9yIGBTdHJ1Y3R1cmVSZWNvcmRlci5vbkVkZ2VBZGRlZGAuIEZpcmVzIHdoZW5ldmVyXG4gKiB0aGUgYnVpbGRlciB3aXJlcyBhbiBvdXRnb2luZyBlZGdlIGZyb20gb25lIG5vZGUgdG8gYW5vdGhlci4gQm90aFxuICogZW5kcG9pbnRzIGhhdmUgYWxyZWFkeSBiZWVuIGFubm91bmNlZCB2aWEgYG9uU3RhZ2VBZGRlZGAgYnkgdGhlXG4gKiB0aW1lIHRoaXMgZmlyZXMuXG4gKlxuICogTG9vcCBiYWNrLWVkZ2VzIGhhdmUgdGhlaXIgT1dOIGV2ZW50IChgb25Mb29wRWRnZUFkZGVkYCkgc29cbiAqIGNvbnN1bWVycyBjYW4gdGhlbWUgdGhlbSBkaXN0aW5jdGx5IGFuZCBzbyBidWlsZC10aW1lIGV2ZW50cyBzdGF5XG4gKiBmcmVlIG9mIHRoZSBydW50aW1lLW9ubHkgYGl0ZXJhdGlvbmAgZmllbGQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3RydWN0dXJlRWRnZUFkZGVkRXZlbnQge1xuICByZWFkb25seSBmcm9tOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHRvOiBzdHJpbmc7XG4gIHJlYWRvbmx5IGtpbmQ6IFN0cnVjdHVyZUVkZ2VLaW5kO1xuICAvKiogT3B0aW9uYWwgaHVtYW4tcmVhZGFibGUgbGFiZWwg4oCUIHVzZWQgdG9kYXkgZm9yIGRlY2lkZXIgYnJhbmNoXG4gICAqICBrZXlzIChlLmcuLCBgJ2xvdydgLCBgJ2hpZ2gnYCwgYCdoaWdoIChkZWZhdWx0KSdgKSBhbmQgcGFyYWxsZWxcbiAgICogIGJyYW5jaCBpZHMuICovXG4gIHJlYWRvbmx5IGxhYmVsPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEV2ZW50IHBheWxvYWQgZm9yIGBTdHJ1Y3R1cmVSZWNvcmRlci5vbkxvb3BFZGdlQWRkZWRgLiBGaXJlcyB3aGVuXG4gKiBgLmxvb3BUbyh0YXJnZXQpYCBpbnN0YWxscyBhIGJhY2stZWRnZS4gRGlzdGluY3QgZnJvbVxuICogYG9uRWRnZUFkZGVkYCBzbyBjb25zdW1lcnMgY2FuIHRoZW1lIGJhY2stZWRnZXMgZGlmZmVyZW50bHkgYW5kXG4gKiBiZWNhdXNlIHJ1bnRpbWUgYG9uTG9vcGAgY2FycmllcyBgaXRlcmF0aW9uOiBudW1iZXJgIHdoaWNoIGhhcyBub1xuICogYnVpbGQtdGltZSBtZWFuaW5nIOKAlCBrZWVwaW5nIHRoZSBldmVudHMgc2VwYXJhdGVkIGF2b2lkcyBmb3JjaW5nXG4gKiBhbiBgaXRlcmF0aW9uPzogbnVtYmVyYCBsaWUgaW50byB0aGUgc3RydWN0dXJhbCBzaGFwZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTdHJ1Y3R1cmVMb29wRWRnZUFkZGVkRXZlbnQge1xuICByZWFkb25seSBmcm9tOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHRvOiBzdHJpbmc7XG59XG5cbi8qKlxuICogRXZlbnQgcGF5bG9hZCBmb3IgYFN0cnVjdHVyZVJlY29yZGVyLm9uRGVjaWRlckNvbXBsZXRlYC4gRmlyZXNcbiAqIHdoZW4gYSBkZWNpZGVyIC8gc2VsZWN0b3Igc3ViLWJ1aWxkZXIgY2xvc2VzIHZpYSBgLmVuZCgpYC4gQnkgdGhlXG4gKiB0aW1lIHRoaXMgZmlyZXMgZXZlcnkgYnJhbmNoIGhhcyBiZWVuIGFubm91bmNlZCBhbmQgdGhlXG4gKiBgZGVmYXVsdEJyYW5jaGAgKGlmIHNldCB2aWEgYC5zZXREZWZhdWx0KClgKSBpcyBmaW5hbC4gTGV0c1xuICogcmVjb3JkZXJzIHRyZWF0IHRoZSBkZWNpZGVyIGFzIG5vLWZ1cnRoZXItbXV0YXRpb24gYW5kIHNuYXBzaG90XG4gKiBpdHMgYnJhbmNoIGxpc3QgYXMgZmluYWwuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3RydWN0dXJlRGVjaWRlckNvbXBsZXRlRXZlbnQge1xuICAvKiogRGVjaWRlciAvIHNlbGVjdG9yIHN0YWdlIGlkLiAqL1xuICByZWFkb25seSBkZWNpZGVyOiBzdHJpbmc7XG4gIC8qKiBTcGVjIHR5cGUgKGAnZGVjaWRlcidgIHZzIGAnc2VsZWN0b3InYCkg4oCUIGV4cG9zZWQgc28gY29uc3VtZXJzXG4gICAqICBkb24ndCBuZWVkIHRvIGxvb2sgdXAgdGhlIG9yaWdpbmFsIGBvblN0YWdlQWRkZWRgIGV2ZW50LiAqL1xuICByZWFkb25seSB0eXBlOiAnZGVjaWRlcicgfCAnc2VsZWN0b3InO1xuICAvKiogQnJhbmNoIG1lbWJlciBpZHMgaW4gZGVjbGFyYXRpb24gb3JkZXIuICovXG4gIHJlYWRvbmx5IGJyYW5jaElkczogcmVhZG9ubHkgc3RyaW5nW107XG4gIC8qKiBEZWZhdWx0IGJyYW5jaCBpZCB3aGVuIHNldCB2aWEgYC5zZXREZWZhdWx0KClgOyB1bmRlZmluZWQgd2hlblxuICAgKiAgbm8gZGVmYXVsdCBpcyBjb25maWd1cmVkIChlLmcuLCBzZWxlY3RvcnMpLiAqL1xuICByZWFkb25seSBkZWZhdWx0QnJhbmNoPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEV2ZW50IHBheWxvYWQgZm9yIGBTdHJ1Y3R1cmVSZWNvcmRlci5vblN1YmZsb3dNb3VudGVkYC4gRmlyZXMgb25jZVxuICogcGVyIHN1YmZsb3cgbW91bnQgKGBhZGRTdWJGbG93Q2hhcnRgIC8gYGFkZFN1YkZsb3dDaGFydE5leHRgIGFuZFxuICogdGhlaXIgbGF6eSB2YXJpYW50cykuXG4gKlxuICogKipNT1VOVC1PTkxZIHNlbWFudGljcyoqIOKAlCB0aGUgc3ViZmxvdydzIE9XTiBzdHJ1Y3R1cmUgZXZlbnRzXG4gKiAoZXZlcnkgYG9uU3RhZ2VBZGRlZGAgLyBgb25FZGdlQWRkZWRgIGluc2lkZSB0aGUgc3ViZmxvdykgZmlyZWRcbiAqIGR1cmluZyB0aGUgc3ViZmxvdydzIG93biBgLmJ1aWxkKClgLCBiZWZvcmUgdGhlIG1vdW50LiBQYXJlbnRcbiAqIHJlY29yZGVycyBkbyBOT1QgcmVjZWl2ZSBhIHJlcGxheS4gSW5zdGVhZCwgdGhpcyBldmVudCBkZWxpdmVyc1xuICogdGhlIHN1YmZsb3cncyBmdWxsIHN0cnVjdHVyZSB2aWEgYHN1YmZsb3dTcGVjYCwgYW5kIGNvbnN1bWVycyBjYW5cbiAqIHdhbGsgaXQgdmlhIGB3YWxrU3ViZmxvd1NwZWNgIGZyb20gYGZvb3RwcmludGpzL3RyYWNlYC5cbiAqXG4gKiBUaGlzIG1hdGNoZXMgYEZsb3dSZWNvcmRlci5vblN1YmZsb3dFbnRyeWAgc2VtYW50aWNzIGF0IHJ1bnRpbWVcbiAqIChwYXJlbnRzIHNlZSB0aGUgYm91bmRhcnksIG5vdCBhIHJlcGxheSBvZiBpbnRlcm5hbHMpIGFuZFxuICogcHJlc2VydmVzIHRoZSBcIm9uZSBwdXJwb3NlIHBlciByZWNvcmRlclwiIGNvbnZlbnRpb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3RydWN0dXJlU3ViZmxvd01vdW50ZWRFdmVudCB7XG4gIC8qKiBTdWJmbG93IGlkZW50aWZpZXIgdGhlIHBhcmVudCBhc3NpZ25lZCBhdCBtb3VudC4gKi9cbiAgcmVhZG9ubHkgc3ViZmxvd0lkOiBzdHJpbmc7XG4gIC8qKiBIdW1hbi1yZWFkYWJsZSBzdWJmbG93IG5hbWUuICovXG4gIHJlYWRvbmx5IHN1YmZsb3dOYW1lOiBzdHJpbmc7XG4gIC8qKiBNb3VudCBub2RlIGlkIGluIHRoZSBwYXJlbnQncyBjaGFydC4gKi9cbiAgcmVhZG9ubHkgcm9vdFN0YWdlSWQ6IHN0cmluZztcbiAgLyoqIFRydWUgd2hlbiB0aGUgbW91bnQgdXNlcyBsYXp5IHJlc29sdXRpb24gKGRlZmVycmVkIHN1YmZsb3dcbiAgICogIHJlc29sdXRpb24gdW50aWwgZXhlY3V0aW9uKS4gKi9cbiAgcmVhZG9ubHkgaXNMYXp5PzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIG1vdW50ZWQgc3ViZmxvdydzIGNvbXBsZXRlIHNwZWMg4oCUIHRoZSBTQU1FIE9CSkVDVFxuICAgKiAoPT09IHJlZmVyZW5jZSBlcXVhbGl0eSkgcmVhY2hhYmxlIHZpYSBgc3ViZmxvdy5idWlsZFRpbWVTdHJ1Y3R1cmVgXG4gICAqIGZvciB0aGUgRmxvd0NoYXJ0IHRoZSBjb25zdW1lciBwYXNzZWQgdG8gYGFkZFN1YkZsb3dDaGFydEJyYW5jaGAgL1xuICAgKiBgYWRkU3ViRmxvd0NoYXJ0YCAvIGBhZGRTdWJGbG93Q2hhcnROZXh0YC5cbiAgICpcbiAgICogVU5ERUZJTkVEIGZvciBsYXp5IG1vdW50cyBhdCBidWlsZCB0aW1lIChgaXNMYXp5OiB0cnVlYCkg4oCUIHRoZVxuICAgKiBzdWJmbG93J3Mgc3RydWN0dXJlIGhhc24ndCBiZWVuIHJlc29sdmVkIHlldC4gQ29uc3VtZXJzIHdhaXRpbmcgb25cbiAgICogbGF6eSBzdWJmbG93cyBoYW5kbGUgdGhlIHJ1bnRpbWUgYG9uU3ViZmxvd0VudHJ5YCBldmVudCBpbnN0ZWFkLlxuICAgKlxuICAgKiBJbW11dGFibGUgcG9zdC1idWlsZDsgY29uc3VtZXJzIE1VU1QgTk9UIG11dGF0ZS5cbiAgICpcbiAgICogQGludGVybmFsIGBTZXJpYWxpemVkUGlwZWxpbmVTdHJ1Y3R1cmVgIGlzIGxpYnJhcnktaW50ZXJuYWwuXG4gICAqICAgICAgICAgICBVc2UgYHdhbGtTdWJmbG93U3BlY2AgZnJvbSBgZm9vdHByaW50anMvdHJhY2VgIGZvciB0aGVcbiAgICogICAgICAgICAgIHN0YWJsZSBwdWJsaWMgY29udHJhY3QuXG4gICAqL1xuICByZWFkb25seSBzdWJmbG93U3BlYz86IFNlcmlhbGl6ZWRQaXBlbGluZVN0cnVjdHVyZTtcblxuICAvKipcbiAgICogTG9jYWwgbW91bnQgaWQgb2YgdGhpcyBzdWJmbG93IHdpdGhpbiBpdHMgcGFyZW50IOKAlCBlcXVhbCB0b1xuICAgKiBgc3ViZmxvd0lkYCBmb3IgdG9wLWxldmVsIG1vdW50cyAoZS5nLiBgJ2F1dGgnYCksIGNvbXBvc2VkXG4gICAqIChgJ2F1dGgvdmVyaWZ5J2ApIGZvciBuZXN0ZWQgbW91bnRzIHdob3NlIHJlY29yZGVyIGlzIGF0dGFjaGVkXG4gICAqIHRvIHRoZSBncmFuZHBhcmVudC4gTWF0Y2hlcyBydW50aW1lIGB0cmF2ZXJzYWxDb250ZXh0LnN1YmZsb3dQYXRoYFxuICAgKiBzZW1hbnRpY3Mg4oCUIE5FVkVSIHByZWZpeGVkIHdpdGggYF9fcm9vdF9fL2AuXG4gICAqL1xuICByZWFkb25seSBzdWJmbG93UGF0aDogc3RyaW5nO1xufVxuXG4vLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbi8vIFN0cnVjdHVyZVJlY29yZGVyIGludGVyZmFjZVxuLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbi8qKlxuICogUGx1Z2dhYmxlIG9ic2VydmVyIGZvciBCVUlMRC1USU1FIGNoYXJ0IGNvbnN0cnVjdGlvbiBldmVudHMuXG4gKlxuICogQWxsIG1ldGhvZHMgYXJlIG9wdGlvbmFsIOKAlCBpbXBsZW1lbnQgb25seSB0aGUgaG9va3MgeW91IG5lZWQuXG4gKiBIYW5kbGVycyBmaXJlIFNZTkNIUk9OT1VTTFkgZHVyaW5nIGJ1aWxkZXIgb3BlcmF0aW9ucyBhbmQgYC5idWlsZCgpYC5cbiAqIEEgdGhyb3dpbmcgaGFuZGxlciBpcyBjYXVnaHQgKHNlZSBcIkVycm9yIGlzb2xhdGlvblwiIGluIHRoZSBmaWxlXG4gKiBoZWFkZXIpOyBzdWJzZXF1ZW50IGRpc3BhdGNoIGNvbnRpbnVlcy5cbiAqXG4gKiBMaWZlY3ljbGU6IGVhY2ggYFN0cnVjdHVyZVJlY29yZGVyYCBpbnN0YW5jZSBpcyByZWdpc3RlcmVkIHZpYVxuICogRUlUSEVSIHRoZSBgZmxvd0NoYXJ0KClgIG9wdGlvbnMgYmFnIChgeyBzdHJ1Y3R1cmVSZWNvcmRlcnM6IFtyZWNdIH1gKVxuICogT1IgdGhlIGZsdWVudCBgLmF0dGFjaFN0cnVjdHVyZVJlY29yZGVyKHJlYylgIGNoYWluIOKAlCBzZWUgdGhlIGZpbGVcbiAqIGhlYWRlciBmb3IgdGhlIHRyYWRlLW9mZnMuIFJlZ2lzdHJhdGlvbiBhZnRlciBgLmJ1aWxkKClgIGlzXG4gKiByZWplY3RlZCAoY2hhcnQgaXMgc2VhbGVkKS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTdHJ1Y3R1cmVSZWNvcmRlciB7XG4gIC8qKlxuICAgKiBTdGFibGUgaWRlbnRpZmllciDigJQgdXNlZCBieSB0aGUgZGlzcGF0Y2hlciB0byBzY29wZSBlcnJvclxuICAgKiBtZXNzYWdlcyBhbmQgdG8gc3VwcG9ydCBgZGV0YWNoKGlkKWAgbG9va3VwLlxuICAgKlxuICAgKiBDb252ZW50aW9uIChtYXRjaGVzIGBGbG93UmVjb3JkZXIuaWRgIGZyb20gQ0xBVURFLm1kKTpcbiAgICogICAtIGRvbWFpbi1wcmVmaXhlZCBrZWJhYi1jYXNlIChgJ2xlbnMtc3RydWN0dXJlJ2AsXG4gICAqICAgICBgJ2FnZW50Zm9vdHByaW50LWNvbXBvc2l0aW9uJ2AsIGAndHJhY2UtZXhwbGFpbmFibGUnYClcbiAgICogICAtIHNhbWUgaWQg4oaSIG11bHRpcGxlIHJlY29yZGVycyBjb2V4aXN0IChOT1QgZGVkdXBsaWNhdGVkIGJ5XG4gICAqICAgICBpZDsgdGhlIGRpc3BhdGNoZXIgZmlyZXMgZXZlcnkgYXR0YWNoZWQgcmVjb3JkZXIgcmVnYXJkbGVzcylcbiAgICogICAtIGBkZXRhY2goaWQpYCByZW1vdmVzIEVWRVJZIHJlY29yZGVyIHdpdGggdGhhdCBpZCDigJQgYmVcbiAgICogICAgIGludGVudGlvbmFsIGFib3V0IHJldXNlIGlmIHlvdSByZWx5IG9uIHNlbGVjdGl2ZSBkZXRhY2hcbiAgICpcbiAgICogQ2hvb3NlIGEgc3RhYmxlIGlkIGF0IG1vZHVsZSBsb2FkIGFuZCBkb24ndCByYW5kb21pc2UgaXQgYWNyb3NzXG4gICAqIHJ1bnMg4oCUIGl0IGxhbmRzIGluIGBTdHJ1Y3R1cmVCdWlsZEVycm9yLnJlY29yZGVySWRgIHNvIGRlYnVnXG4gICAqIG91dHB1dCBpcyBncmVwcGFibGUuXG4gICAqL1xuICByZWFkb25seSBpZDogc3RyaW5nO1xuXG4gIG9uU3RhZ2VBZGRlZD8oZXZlbnQ6IFN0cnVjdHVyZVN0YWdlQWRkZWRFdmVudCk6IHZvaWQ7XG4gIG9uRWRnZUFkZGVkPyhldmVudDogU3RydWN0dXJlRWRnZUFkZGVkRXZlbnQpOiB2b2lkO1xuICBvbkxvb3BFZGdlQWRkZWQ/KGV2ZW50OiBTdHJ1Y3R1cmVMb29wRWRnZUFkZGVkRXZlbnQpOiB2b2lkO1xuICBvbkRlY2lkZXJDb21wbGV0ZT8oZXZlbnQ6IFN0cnVjdHVyZURlY2lkZXJDb21wbGV0ZUV2ZW50KTogdm9pZDtcbiAgb25TdWJmbG93TW91bnRlZD8oZXZlbnQ6IFN0cnVjdHVyZVN1YmZsb3dNb3VudGVkRXZlbnQpOiB2b2lkO1xufVxuIl19
@@ -0,0 +1,171 @@
1
+ /**
2
+ * StructureRecorderDispatcher — Fans build-time structure events out to N
3
+ * attached `StructureRecorder` instances.
4
+ *
5
+ * Mirrors `FlowRecorderDispatcher` (engine/narrative/) exactly:
6
+ *
7
+ * - `recorders: StructureRecorder[]` — attach order preserved
8
+ * - per-event fire methods early-return when no recorders attached
9
+ * (zero-allocation fast path)
10
+ * - per-recorder try/catch isolates errors; one bad recorder cannot
11
+ * cascade into the chain build or sibling recorders
12
+ * - errors route to BOTH the dev-mode console warning (matches
13
+ * FlowRecorderDispatcher) AND a structured `buildErrors`
14
+ * accumulator so consumers can inspect failures post-build
15
+ * - spec payloads are NOT frozen at dispatch time — handlers must
16
+ * respect the `readonly` markers on event payload types (the
17
+ * builder still needs to mutate `spec.next` after the immediate
18
+ * `onStageAdded` fires; see `fireStageAdded` for the full note,
19
+ * and `StructureRecorder.ts` header "Spec mutation" for the
20
+ * trust-model implications)
21
+ *
22
+ * The dispatcher itself owns NO chart state. The builder owns the
23
+ * dispatcher; events fire from the natural mutation points in
24
+ * FlowChartBuilder (L7.3).
25
+ */
26
+ import { isDevMode } from '../../scope/detectCircular.js';
27
+ /**
28
+ * Soft cap on the `errors[]` accumulator. Builds with thousands of
29
+ * stages and a misbehaving recorder that throws on every event would
30
+ * otherwise retain unbounded `{recorderId, method, message, error}`
31
+ * records — each closing over the thrown value (often an Error with
32
+ * a captured stack), preventing GC of any closure data the throw
33
+ * captured. The cap is for diagnosis, not forensic completeness;
34
+ * once exceeded, a single sentinel record signals truncation.
35
+ */
36
+ const STRUCTURE_BUILD_ERRORS_CAP = 100;
37
+ export class StructureRecorderDispatcher {
38
+ recorders = [];
39
+ errors = [];
40
+ _truncated = false;
41
+ /** Attach a `StructureRecorder`. Multiple recorders with the same
42
+ * id are allowed; the convention is one id per logical concern. */
43
+ attach(recorder) {
44
+ this.recorders.push(recorder);
45
+ }
46
+ /** Detach every recorder with the given id. */
47
+ detach(id) {
48
+ this.recorders = this.recorders.filter((r) => r.id !== id);
49
+ }
50
+ /** Defensive copy of the attached recorders — used in tests + by
51
+ * tooling that wants to inspect what's registered. */
52
+ getRecorders() {
53
+ return [...this.recorders];
54
+ }
55
+ /** Find one recorder by id. */
56
+ getRecorderById(id) {
57
+ return this.recorders.find((r) => r.id === id);
58
+ }
59
+ /** Read accumulated errors from this build. Returns a defensive copy. */
60
+ getErrors() {
61
+ return [...this.errors];
62
+ }
63
+ // ── fire* methods — called by the builder at each event moment ─────
64
+ fireStageAdded(event) {
65
+ if (this.recorders.length === 0)
66
+ return;
67
+ // NOTE: `event.spec` is NOT frozen here. `onStageAdded` fires
68
+ // IMMEDIATELY when a spec node is added — the builder still needs
69
+ // to mutate `spec.next` later (in the subsequent `addX` call).
70
+ // Freezing here would break the builder. Handler mutation of
71
+ // `event.spec` is documented as undefined behavior — see the
72
+ // StructureRecorder type's JSDoc + readonly markers on the
73
+ // event payload interface.
74
+ for (const r of this.recorders) {
75
+ try {
76
+ r.onStageAdded?.(event);
77
+ }
78
+ catch (err) {
79
+ this.recordError(r.id, 'onStageAdded', err);
80
+ }
81
+ }
82
+ }
83
+ fireEdgeAdded(event) {
84
+ if (this.recorders.length === 0)
85
+ return;
86
+ // No spec on this event — pass through.
87
+ for (const r of this.recorders) {
88
+ try {
89
+ r.onEdgeAdded?.(event);
90
+ }
91
+ catch (err) {
92
+ this.recordError(r.id, 'onEdgeAdded', err);
93
+ }
94
+ }
95
+ }
96
+ fireLoopEdgeAdded(event) {
97
+ if (this.recorders.length === 0)
98
+ return;
99
+ for (const r of this.recorders) {
100
+ try {
101
+ r.onLoopEdgeAdded?.(event);
102
+ }
103
+ catch (err) {
104
+ this.recordError(r.id, 'onLoopEdgeAdded', err);
105
+ }
106
+ }
107
+ }
108
+ fireDeciderComplete(event) {
109
+ if (this.recorders.length === 0)
110
+ return;
111
+ for (const r of this.recorders) {
112
+ try {
113
+ r.onDeciderComplete?.(event);
114
+ }
115
+ catch (err) {
116
+ this.recordError(r.id, 'onDeciderComplete', err);
117
+ }
118
+ }
119
+ }
120
+ fireSubflowMounted(event) {
121
+ if (this.recorders.length === 0)
122
+ return;
123
+ for (const r of this.recorders) {
124
+ try {
125
+ r.onSubflowMounted?.(event);
126
+ }
127
+ catch (err) {
128
+ this.recordError(r.id, 'onSubflowMounted', err);
129
+ }
130
+ }
131
+ }
132
+ /**
133
+ * Externally-callable error capture for events the builder fires
134
+ * OUTSIDE the normal fire* fan-out path — specifically the seed
135
+ * replay in `FlowChartBuilder.attachStructureRecorder()`, which
136
+ * targets one specific recorder rather than every attached recorder.
137
+ *
138
+ * Same observability contract as the internal `recordError`:
139
+ * accumulates on `getErrors()` AND logs in dev mode.
140
+ */
141
+ recordErrorForReplay(recorderId, method, err) {
142
+ this.recordError(recorderId, method, err);
143
+ }
144
+ // ── Internals ───────────────────────────────────────────────────────
145
+ recordError(recorderId, method, err) {
146
+ const e = err;
147
+ const message = typeof e?.message === 'string' ? e.message : String(err);
148
+ // Soft cap to prevent unbounded growth + closure retention. Once
149
+ // hit, push a single sentinel describing the truncation and drop
150
+ // further records on the floor (still log in dev mode so the
151
+ // consumer notices the spam at its source).
152
+ if (this.errors.length < STRUCTURE_BUILD_ERRORS_CAP) {
153
+ this.errors.push({ recorderId, method, message, error: err });
154
+ }
155
+ else if (!this._truncated) {
156
+ this._truncated = true;
157
+ this.errors.push({
158
+ recorderId: '__truncated__',
159
+ method: '__truncated__',
160
+ message: `StructureRecorderDispatcher: error accumulator truncated at ${STRUCTURE_BUILD_ERRORS_CAP} entries; further errors suppressed.`,
161
+ error: null,
162
+ });
163
+ }
164
+ if (isDevMode()) {
165
+ // eslint-disable-next-line no-console
166
+ console.warn(`[footprint] StructureRecorderDispatcher: recorder "${recorderId}" threw in ${method}: ${message}. ` +
167
+ 'See builder.getStructureBuildErrors() for the full list.');
168
+ }
169
+ }
170
+ }
171
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3RydWN0dXJlUmVjb3JkZXJEaXNwYXRjaGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9idWlsZGVyL3N0cnVjdHVyZS9TdHJ1Y3R1cmVSZWNvcmRlckRpc3BhdGNoZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXdCRztBQUVILE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQTJCMUQ7Ozs7Ozs7O0dBUUc7QUFDSCxNQUFNLDBCQUEwQixHQUFHLEdBQUcsQ0FBQztBQUV2QyxNQUFNLE9BQU8sMkJBQTJCO0lBQzlCLFNBQVMsR0FBd0IsRUFBRSxDQUFDO0lBQzNCLE1BQU0sR0FBMEIsRUFBRSxDQUFDO0lBQzVDLFVBQVUsR0FBRyxLQUFLLENBQUM7SUFFM0I7d0VBQ29FO0lBQ3BFLE1BQU0sQ0FBQyxRQUEyQjtRQUNoQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBRUQsK0NBQStDO0lBQy9DLE1BQU0sQ0FBQyxFQUFVO1FBQ2YsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUM3RCxDQUFDO0lBRUQ7MkRBQ3VEO0lBQ3ZELFlBQVk7UUFDVixPQUFPLENBQUMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDN0IsQ0FBQztJQUVELCtCQUErQjtJQUMvQixlQUFlLENBQWtELEVBQVU7UUFDekUsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQWtCLENBQUM7SUFDbEUsQ0FBQztJQUVELHlFQUF5RTtJQUN6RSxTQUFTO1FBQ1AsT0FBTyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzFCLENBQUM7SUFFRCxzRUFBc0U7SUFFdEUsY0FBYyxDQUFDLEtBQStCO1FBQzVDLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEtBQUssQ0FBQztZQUFFLE9BQU87UUFDeEMsOERBQThEO1FBQzlELGtFQUFrRTtRQUNsRSwrREFBK0Q7UUFDL0QsNkRBQTZEO1FBQzdELDZEQUE2RDtRQUM3RCwyREFBMkQ7UUFDM0QsMkJBQTJCO1FBQzNCLEtBQUssTUFBTSxDQUFDLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQy9CLElBQUksQ0FBQztnQkFDSCxDQUFDLENBQUMsWUFBWSxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDMUIsQ0FBQztZQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7Z0JBQ2IsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLGNBQWMsRUFBRSxHQUFHLENBQUMsQ0FBQztZQUM5QyxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFFRCxhQUFhLENBQUMsS0FBOEI7UUFDMUMsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sS0FBSyxDQUFDO1lBQUUsT0FBTztRQUN4Qyx3Q0FBd0M7UUFDeEMsS0FBSyxNQUFNLENBQUMsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDL0IsSUFBSSxDQUFDO2dCQUNILENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUN6QixDQUFDO1lBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztnQkFDYixJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsYUFBYSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBQzdDLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUVELGlCQUFpQixDQUFDLEtBQWtDO1FBQ2xELElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEtBQUssQ0FBQztZQUFFLE9BQU87UUFDeEMsS0FBSyxNQUFNLENBQUMsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDL0IsSUFBSSxDQUFDO2dCQUNILENBQUMsQ0FBQyxlQUFlLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUM3QixDQUFDO1lBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztnQkFDYixJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsaUJBQWlCLEVBQUUsR0FBRyxDQUFDLENBQUM7WUFDakQsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBRUQsbUJBQW1CLENBQUMsS0FBb0M7UUFDdEQsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sS0FBSyxDQUFDO1lBQUUsT0FBTztRQUN4QyxLQUFLLE1BQU0sQ0FBQyxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUMvQixJQUFJLENBQUM7Z0JBQ0gsQ0FBQyxDQUFDLGlCQUFpQixFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDL0IsQ0FBQztZQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7Z0JBQ2IsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLG1CQUFtQixFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBQ25ELENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUVELGtCQUFrQixDQUFDLEtBQW1DO1FBQ3BELElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEtBQUssQ0FBQztZQUFFLE9BQU87UUFDeEMsS0FBSyxNQUFNLENBQUMsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDL0IsSUFBSSxDQUFDO2dCQUNILENBQUMsQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzlCLENBQUM7WUFBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO2dCQUNiLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxrQkFBa0IsRUFBRSxHQUFHLENBQUMsQ0FBQztZQUNsRCxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFFRDs7Ozs7Ozs7T0FRRztJQUNILG9CQUFvQixDQUFDLFVBQWtCLEVBQUUsTUFBYyxFQUFFLEdBQVk7UUFDbkUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLEVBQUUsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQzVDLENBQUM7SUFFRCx1RUFBdUU7SUFFL0QsV0FBVyxDQUFDLFVBQWtCLEVBQUUsTUFBYyxFQUFFLEdBQVk7UUFDbEUsTUFBTSxDQUFDLEdBQUcsR0FBd0MsQ0FBQztRQUNuRCxNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsRUFBRSxPQUFPLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDekUsaUVBQWlFO1FBQ2pFLGlFQUFpRTtRQUNqRSw2REFBNkQ7UUFDN0QsNENBQTRDO1FBQzVDLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsMEJBQTBCLEVBQUUsQ0FBQztZQUNwRCxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO1FBQ2hFLENBQUM7YUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQzVCLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDO2dCQUNmLFVBQVUsRUFBRSxlQUFlO2dCQUMzQixNQUFNLEVBQUUsZUFBZTtnQkFDdkIsT0FBTyxFQUFFLCtEQUErRCwwQkFBMEIsc0NBQXNDO2dCQUN4SSxLQUFLLEVBQUUsSUFBSTthQUNaLENBQUMsQ0FBQztRQUNMLENBQUM7UUFDRCxJQUFJLFNBQVMsRUFBRSxFQUFFLENBQUM7WUFDaEIsc0NBQXNDO1lBQ3RDLE9BQU8sQ0FBQyxJQUFJLENBQ1Ysc0RBQXNELFVBQVUsY0FBYyxNQUFNLEtBQUssT0FBTyxJQUFJO2dCQUNsRywwREFBMEQsQ0FDN0QsQ0FBQztRQUNKLENBQUM7SUFDSCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFN0cnVjdHVyZVJlY29yZGVyRGlzcGF0Y2hlciDigJQgRmFucyBidWlsZC10aW1lIHN0cnVjdHVyZSBldmVudHMgb3V0IHRvIE5cbiAqIGF0dGFjaGVkIGBTdHJ1Y3R1cmVSZWNvcmRlcmAgaW5zdGFuY2VzLlxuICpcbiAqIE1pcnJvcnMgYEZsb3dSZWNvcmRlckRpc3BhdGNoZXJgIChlbmdpbmUvbmFycmF0aXZlLykgZXhhY3RseTpcbiAqXG4gKiAgIC0gYHJlY29yZGVyczogU3RydWN0dXJlUmVjb3JkZXJbXWAg4oCUIGF0dGFjaCBvcmRlciBwcmVzZXJ2ZWRcbiAqICAgLSBwZXItZXZlbnQgZmlyZSBtZXRob2RzIGVhcmx5LXJldHVybiB3aGVuIG5vIHJlY29yZGVycyBhdHRhY2hlZFxuICogICAgICh6ZXJvLWFsbG9jYXRpb24gZmFzdCBwYXRoKVxuICogICAtIHBlci1yZWNvcmRlciB0cnkvY2F0Y2ggaXNvbGF0ZXMgZXJyb3JzOyBvbmUgYmFkIHJlY29yZGVyIGNhbm5vdFxuICogICAgIGNhc2NhZGUgaW50byB0aGUgY2hhaW4gYnVpbGQgb3Igc2libGluZyByZWNvcmRlcnNcbiAqICAgLSBlcnJvcnMgcm91dGUgdG8gQk9USCB0aGUgZGV2LW1vZGUgY29uc29sZSB3YXJuaW5nIChtYXRjaGVzXG4gKiAgICAgRmxvd1JlY29yZGVyRGlzcGF0Y2hlcikgQU5EIGEgc3RydWN0dXJlZCBgYnVpbGRFcnJvcnNgXG4gKiAgICAgYWNjdW11bGF0b3Igc28gY29uc3VtZXJzIGNhbiBpbnNwZWN0IGZhaWx1cmVzIHBvc3QtYnVpbGRcbiAqICAgLSBzcGVjIHBheWxvYWRzIGFyZSBOT1QgZnJvemVuIGF0IGRpc3BhdGNoIHRpbWUg4oCUIGhhbmRsZXJzIG11c3RcbiAqICAgICByZXNwZWN0IHRoZSBgcmVhZG9ubHlgIG1hcmtlcnMgb24gZXZlbnQgcGF5bG9hZCB0eXBlcyAodGhlXG4gKiAgICAgYnVpbGRlciBzdGlsbCBuZWVkcyB0byBtdXRhdGUgYHNwZWMubmV4dGAgYWZ0ZXIgdGhlIGltbWVkaWF0ZVxuICogICAgIGBvblN0YWdlQWRkZWRgIGZpcmVzOyBzZWUgYGZpcmVTdGFnZUFkZGVkYCBmb3IgdGhlIGZ1bGwgbm90ZSxcbiAqICAgICBhbmQgYFN0cnVjdHVyZVJlY29yZGVyLnRzYCBoZWFkZXIgXCJTcGVjIG11dGF0aW9uXCIgZm9yIHRoZVxuICogICAgIHRydXN0LW1vZGVsIGltcGxpY2F0aW9ucylcbiAqXG4gKiBUaGUgZGlzcGF0Y2hlciBpdHNlbGYgb3ducyBOTyBjaGFydCBzdGF0ZS4gVGhlIGJ1aWxkZXIgb3ducyB0aGVcbiAqIGRpc3BhdGNoZXI7IGV2ZW50cyBmaXJlIGZyb20gdGhlIG5hdHVyYWwgbXV0YXRpb24gcG9pbnRzIGluXG4gKiBGbG93Q2hhcnRCdWlsZGVyIChMNy4zKS5cbiAqL1xuXG5pbXBvcnQgeyBpc0Rldk1vZGUgfSBmcm9tICcuLi8uLi9zY29wZS9kZXRlY3RDaXJjdWxhci5qcyc7XG5pbXBvcnQgdHlwZSB7IEZsb3dDaGFydFNwZWMgfSBmcm9tICcuLi90eXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7XG4gIFN0cnVjdHVyZURlY2lkZXJDb21wbGV0ZUV2ZW50LFxuICBTdHJ1Y3R1cmVFZGdlQWRkZWRFdmVudCxcbiAgU3RydWN0dXJlTG9vcEVkZ2VBZGRlZEV2ZW50LFxuICBTdHJ1Y3R1cmVSZWNvcmRlcixcbiAgU3RydWN0dXJlU3RhZ2VBZGRlZEV2ZW50LFxuICBTdHJ1Y3R1cmVTdWJmbG93TW91bnRlZEV2ZW50LFxufSBmcm9tICcuL1N0cnVjdHVyZVJlY29yZGVyLmpzJztcblxuLyoqIFN0cnVjdHVyZWQgZXJyb3IgY2FwdHVyZWQgd2hlbiBhIHJlY29yZGVyIHRocm93cy4gUmVhZCBwb3N0LWJ1aWxkXG4gKiAgdmlhIGBidWlsZGVyLmdldFN0cnVjdHVyZUJ1aWxkRXJyb3JzKClgIOKAlCBjYWxsIG9uIHRoZSBCVUlMREVSXG4gKiAgcmVmZXJlbmNlIChOT1QgdGhlIGNoYXJ0IHJldHVybmVkIGJ5IGAuYnVpbGQoKWApLiBDYXB0dXJlIHRoZVxuICogIGJ1aWxkZXIgcmVmZXJlbmNlIGJlZm9yZSBgLmJ1aWxkKClgIGlmIHlvdSBuZWVkIHBvc3QtYnVpbGQgYWNjZXNzLiAqL1xuZXhwb3J0IGludGVyZmFjZSBTdHJ1Y3R1cmVCdWlsZEVycm9yIHtcbiAgLyoqIFdoaWNoIHJlY29yZGVyJ3MgaGFuZGxlciB0aHJldy4gKi9cbiAgcmVhZG9ubHkgcmVjb3JkZXJJZDogc3RyaW5nO1xuICAvKiogV2hpY2ggZXZlbnQgbWV0aG9kIChgJ29uU3RhZ2VBZGRlZCdgLCBgJ29uRWRnZUFkZGVkJ2AsIC4uLikuICovXG4gIHJlYWRvbmx5IG1ldGhvZDogc3RyaW5nO1xuICAvKiogRXJyb3IgbWVzc2FnZSBleHRyYWN0ZWQgZnJvbSB0aGUgdGhyb3duIHZhbHVlLiAqL1xuICByZWFkb25seSBtZXNzYWdlOiBzdHJpbmc7XG4gIC8qKiBUaGUgb3JpZ2luYWwgdGhyb3duIHZhbHVlIOKAlCBgRXJyb3JgIGluc3RhbmNlIG9yIHdoYXRldmVyIHRoZVxuICAgKiAgcmVjb3JkZXIgdGhyZXcuIFVzZWZ1bCB3aGVuIGRpYWdub3NpcyBuZWVkcyBhIHN0YWNrIHRyYWNlLiAqL1xuICByZWFkb25seSBlcnJvcjogdW5rbm93bjtcbn1cblxuLyoqXG4gKiBTb2Z0IGNhcCBvbiB0aGUgYGVycm9yc1tdYCBhY2N1bXVsYXRvci4gQnVpbGRzIHdpdGggdGhvdXNhbmRzIG9mXG4gKiBzdGFnZXMgYW5kIGEgbWlzYmVoYXZpbmcgcmVjb3JkZXIgdGhhdCB0aHJvd3Mgb24gZXZlcnkgZXZlbnQgd291bGRcbiAqIG90aGVyd2lzZSByZXRhaW4gdW5ib3VuZGVkIGB7cmVjb3JkZXJJZCwgbWV0aG9kLCBtZXNzYWdlLCBlcnJvcn1gXG4gKiByZWNvcmRzIOKAlCBlYWNoIGNsb3Npbmcgb3ZlciB0aGUgdGhyb3duIHZhbHVlIChvZnRlbiBhbiBFcnJvciB3aXRoXG4gKiBhIGNhcHR1cmVkIHN0YWNrKSwgcHJldmVudGluZyBHQyBvZiBhbnkgY2xvc3VyZSBkYXRhIHRoZSB0aHJvd1xuICogY2FwdHVyZWQuIFRoZSBjYXAgaXMgZm9yIGRpYWdub3Npcywgbm90IGZvcmVuc2ljIGNvbXBsZXRlbmVzcztcbiAqIG9uY2UgZXhjZWVkZWQsIGEgc2luZ2xlIHNlbnRpbmVsIHJlY29yZCBzaWduYWxzIHRydW5jYXRpb24uXG4gKi9cbmNvbnN0IFNUUlVDVFVSRV9CVUlMRF9FUlJPUlNfQ0FQID0gMTAwO1xuXG5leHBvcnQgY2xhc3MgU3RydWN0dXJlUmVjb3JkZXJEaXNwYXRjaGVyIHtcbiAgcHJpdmF0ZSByZWNvcmRlcnM6IFN0cnVjdHVyZVJlY29yZGVyW10gPSBbXTtcbiAgcHJpdmF0ZSByZWFkb25seSBlcnJvcnM6IFN0cnVjdHVyZUJ1aWxkRXJyb3JbXSA9IFtdO1xuICBwcml2YXRlIF90cnVuY2F0ZWQgPSBmYWxzZTtcblxuICAvKiogQXR0YWNoIGEgYFN0cnVjdHVyZVJlY29yZGVyYC4gTXVsdGlwbGUgcmVjb3JkZXJzIHdpdGggdGhlIHNhbWVcbiAgICogIGlkIGFyZSBhbGxvd2VkOyB0aGUgY29udmVudGlvbiBpcyBvbmUgaWQgcGVyIGxvZ2ljYWwgY29uY2Vybi4gKi9cbiAgYXR0YWNoKHJlY29yZGVyOiBTdHJ1Y3R1cmVSZWNvcmRlcik6IHZvaWQge1xuICAgIHRoaXMucmVjb3JkZXJzLnB1c2gocmVjb3JkZXIpO1xuICB9XG5cbiAgLyoqIERldGFjaCBldmVyeSByZWNvcmRlciB3aXRoIHRoZSBnaXZlbiBpZC4gKi9cbiAgZGV0YWNoKGlkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLnJlY29yZGVycyA9IHRoaXMucmVjb3JkZXJzLmZpbHRlcigocikgPT4gci5pZCAhPT0gaWQpO1xuICB9XG5cbiAgLyoqIERlZmVuc2l2ZSBjb3B5IG9mIHRoZSBhdHRhY2hlZCByZWNvcmRlcnMg4oCUIHVzZWQgaW4gdGVzdHMgKyBieVxuICAgKiAgdG9vbGluZyB0aGF0IHdhbnRzIHRvIGluc3BlY3Qgd2hhdCdzIHJlZ2lzdGVyZWQuICovXG4gIGdldFJlY29yZGVycygpOiBTdHJ1Y3R1cmVSZWNvcmRlcltdIHtcbiAgICByZXR1cm4gWy4uLnRoaXMucmVjb3JkZXJzXTtcbiAgfVxuXG4gIC8qKiBGaW5kIG9uZSByZWNvcmRlciBieSBpZC4gKi9cbiAgZ2V0UmVjb3JkZXJCeUlkPFQgZXh0ZW5kcyBTdHJ1Y3R1cmVSZWNvcmRlciA9IFN0cnVjdHVyZVJlY29yZGVyPihpZDogc3RyaW5nKTogVCB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMucmVjb3JkZXJzLmZpbmQoKHIpID0+IHIuaWQgPT09IGlkKSBhcyBUIHwgdW5kZWZpbmVkO1xuICB9XG5cbiAgLyoqIFJlYWQgYWNjdW11bGF0ZWQgZXJyb3JzIGZyb20gdGhpcyBidWlsZC4gUmV0dXJucyBhIGRlZmVuc2l2ZSBjb3B5LiAqL1xuICBnZXRFcnJvcnMoKTogU3RydWN0dXJlQnVpbGRFcnJvcltdIHtcbiAgICByZXR1cm4gWy4uLnRoaXMuZXJyb3JzXTtcbiAgfVxuXG4gIC8vIOKUgOKUgCBmaXJlKiBtZXRob2RzIOKAlCBjYWxsZWQgYnkgdGhlIGJ1aWxkZXIgYXQgZWFjaCBldmVudCBtb21lbnQg4pSA4pSA4pSA4pSA4pSAXG5cbiAgZmlyZVN0YWdlQWRkZWQoZXZlbnQ6IFN0cnVjdHVyZVN0YWdlQWRkZWRFdmVudCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnJlY29yZGVycy5sZW5ndGggPT09IDApIHJldHVybjtcbiAgICAvLyBOT1RFOiBgZXZlbnQuc3BlY2AgaXMgTk9UIGZyb3plbiBoZXJlLiBgb25TdGFnZUFkZGVkYCBmaXJlc1xuICAgIC8vIElNTUVESUFURUxZIHdoZW4gYSBzcGVjIG5vZGUgaXMgYWRkZWQg4oCUIHRoZSBidWlsZGVyIHN0aWxsIG5lZWRzXG4gICAgLy8gdG8gbXV0YXRlIGBzcGVjLm5leHRgIGxhdGVyIChpbiB0aGUgc3Vic2VxdWVudCBgYWRkWGAgY2FsbCkuXG4gICAgLy8gRnJlZXppbmcgaGVyZSB3b3VsZCBicmVhayB0aGUgYnVpbGRlci4gSGFuZGxlciBtdXRhdGlvbiBvZlxuICAgIC8vIGBldmVudC5zcGVjYCBpcyBkb2N1bWVudGVkIGFzIHVuZGVmaW5lZCBiZWhhdmlvciDigJQgc2VlIHRoZVxuICAgIC8vIFN0cnVjdHVyZVJlY29yZGVyIHR5cGUncyBKU0RvYyArIHJlYWRvbmx5IG1hcmtlcnMgb24gdGhlXG4gICAgLy8gZXZlbnQgcGF5bG9hZCBpbnRlcmZhY2UuXG4gICAgZm9yIChjb25zdCByIG9mIHRoaXMucmVjb3JkZXJzKSB7XG4gICAgICB0cnkge1xuICAgICAgICByLm9uU3RhZ2VBZGRlZD8uKGV2ZW50KTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICB0aGlzLnJlY29yZEVycm9yKHIuaWQsICdvblN0YWdlQWRkZWQnLCBlcnIpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZpcmVFZGdlQWRkZWQoZXZlbnQ6IFN0cnVjdHVyZUVkZ2VBZGRlZEV2ZW50KTogdm9pZCB7XG4gICAgaWYgKHRoaXMucmVjb3JkZXJzLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuICAgIC8vIE5vIHNwZWMgb24gdGhpcyBldmVudCDigJQgcGFzcyB0aHJvdWdoLlxuICAgIGZvciAoY29uc3QgciBvZiB0aGlzLnJlY29yZGVycykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgci5vbkVkZ2VBZGRlZD8uKGV2ZW50KTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICB0aGlzLnJlY29yZEVycm9yKHIuaWQsICdvbkVkZ2VBZGRlZCcsIGVycik7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZmlyZUxvb3BFZGdlQWRkZWQoZXZlbnQ6IFN0cnVjdHVyZUxvb3BFZGdlQWRkZWRFdmVudCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnJlY29yZGVycy5sZW5ndGggPT09IDApIHJldHVybjtcbiAgICBmb3IgKGNvbnN0IHIgb2YgdGhpcy5yZWNvcmRlcnMpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHIub25Mb29wRWRnZUFkZGVkPy4oZXZlbnQpO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHRoaXMucmVjb3JkRXJyb3Ioci5pZCwgJ29uTG9vcEVkZ2VBZGRlZCcsIGVycik7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZmlyZURlY2lkZXJDb21wbGV0ZShldmVudDogU3RydWN0dXJlRGVjaWRlckNvbXBsZXRlRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5yZWNvcmRlcnMubGVuZ3RoID09PSAwKSByZXR1cm47XG4gICAgZm9yIChjb25zdCByIG9mIHRoaXMucmVjb3JkZXJzKSB7XG4gICAgICB0cnkge1xuICAgICAgICByLm9uRGVjaWRlckNvbXBsZXRlPy4oZXZlbnQpO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHRoaXMucmVjb3JkRXJyb3Ioci5pZCwgJ29uRGVjaWRlckNvbXBsZXRlJywgZXJyKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmaXJlU3ViZmxvd01vdW50ZWQoZXZlbnQ6IFN0cnVjdHVyZVN1YmZsb3dNb3VudGVkRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5yZWNvcmRlcnMubGVuZ3RoID09PSAwKSByZXR1cm47XG4gICAgZm9yIChjb25zdCByIG9mIHRoaXMucmVjb3JkZXJzKSB7XG4gICAgICB0cnkge1xuICAgICAgICByLm9uU3ViZmxvd01vdW50ZWQ/LihldmVudCk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgdGhpcy5yZWNvcmRFcnJvcihyLmlkLCAnb25TdWJmbG93TW91bnRlZCcsIGVycik7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEV4dGVybmFsbHktY2FsbGFibGUgZXJyb3IgY2FwdHVyZSBmb3IgZXZlbnRzIHRoZSBidWlsZGVyIGZpcmVzXG4gICAqIE9VVFNJREUgdGhlIG5vcm1hbCBmaXJlKiBmYW4tb3V0IHBhdGgg4oCUIHNwZWNpZmljYWxseSB0aGUgc2VlZFxuICAgKiByZXBsYXkgaW4gYEZsb3dDaGFydEJ1aWxkZXIuYXR0YWNoU3RydWN0dXJlUmVjb3JkZXIoKWAsIHdoaWNoXG4gICAqIHRhcmdldHMgb25lIHNwZWNpZmljIHJlY29yZGVyIHJhdGhlciB0aGFuIGV2ZXJ5IGF0dGFjaGVkIHJlY29yZGVyLlxuICAgKlxuICAgKiBTYW1lIG9ic2VydmFiaWxpdHkgY29udHJhY3QgYXMgdGhlIGludGVybmFsIGByZWNvcmRFcnJvcmA6XG4gICAqIGFjY3VtdWxhdGVzIG9uIGBnZXRFcnJvcnMoKWAgQU5EIGxvZ3MgaW4gZGV2IG1vZGUuXG4gICAqL1xuICByZWNvcmRFcnJvckZvclJlcGxheShyZWNvcmRlcklkOiBzdHJpbmcsIG1ldGhvZDogc3RyaW5nLCBlcnI6IHVua25vd24pOiB2b2lkIHtcbiAgICB0aGlzLnJlY29yZEVycm9yKHJlY29yZGVySWQsIG1ldGhvZCwgZXJyKTtcbiAgfVxuXG4gIC8vIOKUgOKUgCBJbnRlcm5hbHMg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbiAgcHJpdmF0ZSByZWNvcmRFcnJvcihyZWNvcmRlcklkOiBzdHJpbmcsIG1ldGhvZDogc3RyaW5nLCBlcnI6IHVua25vd24pOiB2b2lkIHtcbiAgICBjb25zdCBlID0gZXJyIGFzIHsgbWVzc2FnZT86IHVua25vd24gfSB8IHVuZGVmaW5lZDtcbiAgICBjb25zdCBtZXNzYWdlID0gdHlwZW9mIGU/Lm1lc3NhZ2UgPT09ICdzdHJpbmcnID8gZS5tZXNzYWdlIDogU3RyaW5nKGVycik7XG4gICAgLy8gU29mdCBjYXAgdG8gcHJldmVudCB1bmJvdW5kZWQgZ3Jvd3RoICsgY2xvc3VyZSByZXRlbnRpb24uIE9uY2VcbiAgICAvLyBoaXQsIHB1c2ggYSBzaW5nbGUgc2VudGluZWwgZGVzY3JpYmluZyB0aGUgdHJ1bmNhdGlvbiBhbmQgZHJvcFxuICAgIC8vIGZ1cnRoZXIgcmVjb3JkcyBvbiB0aGUgZmxvb3IgKHN0aWxsIGxvZyBpbiBkZXYgbW9kZSBzbyB0aGVcbiAgICAvLyBjb25zdW1lciBub3RpY2VzIHRoZSBzcGFtIGF0IGl0cyBzb3VyY2UpLlxuICAgIGlmICh0aGlzLmVycm9ycy5sZW5ndGggPCBTVFJVQ1RVUkVfQlVJTERfRVJST1JTX0NBUCkge1xuICAgICAgdGhpcy5lcnJvcnMucHVzaCh7IHJlY29yZGVySWQsIG1ldGhvZCwgbWVzc2FnZSwgZXJyb3I6IGVyciB9KTtcbiAgICB9IGVsc2UgaWYgKCF0aGlzLl90cnVuY2F0ZWQpIHtcbiAgICAgIHRoaXMuX3RydW5jYXRlZCA9IHRydWU7XG4gICAgICB0aGlzLmVycm9ycy5wdXNoKHtcbiAgICAgICAgcmVjb3JkZXJJZDogJ19fdHJ1bmNhdGVkX18nLFxuICAgICAgICBtZXRob2Q6ICdfX3RydW5jYXRlZF9fJyxcbiAgICAgICAgbWVzc2FnZTogYFN0cnVjdHVyZVJlY29yZGVyRGlzcGF0Y2hlcjogZXJyb3IgYWNjdW11bGF0b3IgdHJ1bmNhdGVkIGF0ICR7U1RSVUNUVVJFX0JVSUxEX0VSUk9SU19DQVB9IGVudHJpZXM7IGZ1cnRoZXIgZXJyb3JzIHN1cHByZXNzZWQuYCxcbiAgICAgICAgZXJyb3I6IG51bGwsXG4gICAgICB9KTtcbiAgICB9XG4gICAgaWYgKGlzRGV2TW9kZSgpKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICBgW2Zvb3RwcmludF0gU3RydWN0dXJlUmVjb3JkZXJEaXNwYXRjaGVyOiByZWNvcmRlciBcIiR7cmVjb3JkZXJJZH1cIiB0aHJldyBpbiAke21ldGhvZH06ICR7bWVzc2FnZX0uIGAgK1xuICAgICAgICAgICdTZWUgYnVpbGRlci5nZXRTdHJ1Y3R1cmVCdWlsZEVycm9ycygpIGZvciB0aGUgZnVsbCBsaXN0LicsXG4gICAgICApO1xuICAgIH1cbiAgfVxufVxuXG4vKiogUmUtZXhwb3J0IHRoZSBGbG93Q2hhcnRTcGVjIHR5cGUgZm9yIGRvd25zdHJlYW0gdHlwZSBjb21wbGV0ZW5lc3MuICovXG5leHBvcnQgdHlwZSB7IEZsb3dDaGFydFNwZWMgfTtcbiJdfQ==
@@ -9,4 +9,4 @@
9
9
  * The builder remains standalone at runtime.
10
10
  */
11
11
  export { ArrayMergeMode } from '../engine/types.js';
12
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL2J1aWxkZXIvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7OztHQVNHO0FBb0JILE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogYnVpbGRlci90eXBlcy50cyDigJQgQWxsIHR5cGVzIHVzZWQgYnkgdGhlIGJ1aWxkZXIgbGlicmFyeS5cbiAqXG4gKiBTaGFyZWQgdHlwZXMgKFN0YWdlTm9kZSwgU3RhZ2VGdW5jdGlvbiwgZXRjLikgYXJlIGltcG9ydGVkIGZyb20gdGhlIGVuZ2luZS5cbiAqIEJ1aWxkZXItc3BlY2lmaWMgdHlwZXMgKEZsb3dDaGFydFNwZWMsIEZsb3dDaGFydCwgU2VyaWFsaXplZFBpcGVsaW5lU3RydWN0dXJlKVxuICogYXJlIGRlZmluZWQgbG9jYWxseSDigJQgdGhleSBjYXJyeSBidWlsZGVyLW9ubHkgZmllbGRzIChkZXNjcmlwdGlvbiwgb3V0cHV0TWFwcGVyLCBldGMuKS5cbiAqXG4gKiBOT1RFOiBBbGwgZW5naW5lIGltcG9ydHMgYXJlIGBpbXBvcnQgdHlwZWAg4oCUIHplcm8gcnVudGltZSBkZXBlbmRlbmN5LlxuICogVGhlIGJ1aWxkZXIgcmVtYWlucyBzdGFuZGFsb25lIGF0IHJ1bnRpbWUuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBTdGFnZU5vZGUgfSBmcm9tICcuLi9lbmdpbmUvZ3JhcGgvU3RhZ2VOb2RlLmpzJztcbmltcG9ydCB0eXBlIHsgSUxvZ2dlciwgU2NvcGVGYWN0b3J5LCBTdGFnZUZ1bmN0aW9uLCBUcmF2ZXJzYWxFeHRyYWN0b3IgfSBmcm9tICcuLi9lbmdpbmUvdHlwZXMuanMnO1xuaW1wb3J0IHR5cGUgeyBTY29wZVByb3RlY3Rpb25Nb2RlIH0gZnJvbSAnLi4vc2NvcGUvcHJvdGVjdGlvbi90eXBlcy5qcyc7XG5cbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuLy8gUmUtZXhwb3J0cyBmcm9tIGVuZ2luZSAoY2Fub25pY2FsIGRlZmluaXRpb25zKVxuLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbmV4cG9ydCB0eXBlIHsgUmVzdW1lRm4sIFN0YWdlTm9kZSB9IGZyb20gJy4uL2VuZ2luZS9ncmFwaC9TdGFnZU5vZGUuanMnO1xuZXhwb3J0IHR5cGUge1xuICBJTG9nZ2VyLFxuICBTdGFnZUZ1bmN0aW9uLFxuICBTdHJlYW1DYWxsYmFjayxcbiAgU3RyZWFtSGFuZGxlcnMsXG4gIFN0cmVhbUxpZmVjeWNsZUhhbmRsZXIsXG4gIFN0cmVhbVRva2VuSGFuZGxlcixcbiAgU3ViZmxvd01vdW50T3B0aW9ucyxcbn0gZnJvbSAnLi4vZW5naW5lL3R5cGVzLmpzJztcbmV4cG9ydCB7IEFycmF5TWVyZ2VNb2RlIH0gZnJvbSAnLi4vZW5naW5lL3R5cGVzLmpzJztcblxuLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4vLyBBbGlhc2VzXG4vLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuLyoqIFJlbGF4ZWQtZ2VuZXJpYyBhbGlhcyBmb3IgYnVpbGRlciBlcmdvbm9taWNzLiAqL1xuZXhwb3J0IHR5cGUgU3RhZ2VGbiA9IFN0YWdlRnVuY3Rpb248YW55LCBhbnk+O1xuXG4vLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbi8vIFNjb3BlIFByb3RlY3Rpb24g4oCUIGNhbm9uaWNhbCBkZWZpbml0aW9uIGluIHNjb3BlL3Byb3RlY3Rpb24vdHlwZXMudHNcbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG5leHBvcnQgdHlwZSB7IFNjb3BlUHJvdGVjdGlvbk1vZGUgfTtcblxuLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4vLyBTZXJpYWxpemVkIFBpcGVsaW5lIFN0cnVjdHVyZSAoSlNPTi1zYWZlLCBmb3IgdmlzdWFsaXphdGlvbilcbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG5leHBvcnQgaW50ZXJmYWNlIFNlcmlhbGl6ZWRQaXBlbGluZVN0cnVjdHVyZSB7XG4gIG5hbWU6IHN0cmluZztcbiAgaWQ6IHN0cmluZztcbiAgdHlwZTogJ3N0YWdlJyB8ICdkZWNpZGVyJyB8ICdzZWxlY3RvcicgfCAnZm9yaycgfCAnc3RyZWFtaW5nJyB8ICdzdWJmbG93JyB8ICdsb29wJztcbiAgLyoqIFNlbWFudGljIGljb24gaGludCBmb3IgdmlzdWFsaXphdGlvbiAoZS5nLiwgXCJsbG1cIiwgXCJ0b29sXCIsIFwicmFnXCIsIFwiYWdlbnRcIiwgXCJzdGFydFwiKSAqL1xuICBpY29uPzogc3RyaW5nO1xuICBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgY2hpbGRyZW4/OiBTZXJpYWxpemVkUGlwZWxpbmVTdHJ1Y3R1cmVbXTtcbiAgbmV4dD86IFNlcmlhbGl6ZWRQaXBlbGluZVN0cnVjdHVyZTtcbiAgaGFzRGVjaWRlcj86IGJvb2xlYW47XG4gIGhhc1NlbGVjdG9yPzogYm9vbGVhbjtcbiAgYnJhbmNoSWRzPzogc3RyaW5nW107XG4gIGxvb3BUYXJnZXQ/OiBzdHJpbmc7XG4gIGlzU3RyZWFtaW5nPzogYm9vbGVhbjtcbiAgc3RyZWFtSWQ/OiBzdHJpbmc7XG4gIGlzUGFyYWxsZWxDaGlsZD86IGJvb2xlYW47XG4gIHBhcmFsbGVsR3JvdXBJZD86IHN0cmluZztcbiAgaXNTdWJmbG93Um9vdD86IGJvb2xlYW47XG4gIHN1YmZsb3dJZD86IHN0cmluZztcbiAgc3ViZmxvd05hbWU/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBOZXN0ZWQgcGlwZWxpbmUgc3RydWN0dXJlIGZvciBhIHN1YmZsb3cgbm9kZS5cbiAgICogV0FSTklORzogQW55IGZ1dHVyZSB3YWxrZXIgdGhhdCB0cmF2ZXJzZXMgdGhpcyBmaWVsZCByZWN1cnNpdmVseSBtdXN0IGFwcGx5IGl0cyBvd25cbiAgICogZGVwdGggZ3VhcmQgKHNlZSBNQVhfV0FMS19ERVBUSCBpbiBjb250cmFjdC9vcGVuYXBpLnRzKS4gVGhlIGN1cnJlbnQgYGJ1aWxkRGVzY3JpcHRpb25gXG4gICAqIHdhbGsgaW4gb3BlbmFwaS50cyBkb2VzIE5PVCB0cmF2ZXJzZSBzdWJmbG93U3RydWN0dXJlIOKAlCBpZiBpdCBldmVyIGRvZXMsIHRoZSBkZXB0aFxuICAgKiBndWFyZCBtdXN0IGNvdmVyIGJvdGggdGhlIGBuZXh0YCBjaGFpbiBhbmQgdGhpcyBuZXN0ZWQgc3RydWN0dXJlLlxuICAgKi9cbiAgc3ViZmxvd1N0cnVjdHVyZT86IFNlcmlhbGl6ZWRQaXBlbGluZVN0cnVjdHVyZTtcbiAgaXRlcmF0aW9uQ291bnQ/OiBudW1iZXI7XG4gIC8qKiBUcnVlIHdoZW4gdGhpcyBzdWJmbG93IHVzZXMgbGF6eSByZXNvbHV0aW9uIChkZWZlcnJlZCB1bnRpbCBleGVjdXRpb24pLiAqL1xuICBpc0xhenk/OiBib29sZWFuO1xuICAvKiogVHJ1ZSB3aGVuIHRoaXMgbm9kZSBpcyBhIGJhY2stZWRnZSByZWZlcmVuY2UgY3JlYXRlZCBieSBsb29wVG8oKSDigJQgbm90IGFuIGV4ZWN1dGFibGUgc3RhZ2UuICovXG4gIGlzTG9vcFJlZmVyZW5jZT86IGJvb2xlYW47XG4gIC8qKiBXaGVuIHRydWUsIHRoaXMgc3RhZ2UgY2FuIHBhdXNlIGV4ZWN1dGlvbiAoUGF1c2FibGVIYW5kbGVyIHBhdHRlcm4pLiAqL1xuICBpc1BhdXNhYmxlPzogYm9vbGVhbjtcbn1cblxuLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4vLyBGbG93Q2hhcnRTcGVjIChwdXJlIEpTT04sIG5vIGZ1bmN0aW9ucyDigJQgZm9yIEZF4oaSQkUgdHJhbnNwb3J0KVxuLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbmV4cG9ydCBpbnRlcmZhY2UgRmxvd0NoYXJ0U3BlYyB7XG4gIG5hbWU6IHN0cmluZztcbiAgaWQ6IHN0cmluZztcbiAgLyoqIE5vZGUgdHlwZSDigJQgbWF0Y2hlcyBgU2VyaWFsaXplZFBpcGVsaW5lU3RydWN0dXJlLnR5cGVgIGZvciB2aXN1YWxpemF0aW9uIGFsaWdubWVudC4gKi9cbiAgdHlwZT86ICdzdGFnZScgfCAnZGVjaWRlcicgfCAnc2VsZWN0b3InIHwgJ2ZvcmsnIHwgJ3N0cmVhbWluZycgfCAnc3ViZmxvdycgfCAnbG9vcCc7XG4gIC8qKiBTZW1hbnRpYyBpY29uIGhpbnQgZm9yIHZpc3VhbGl6YXRpb24gKGUuZy4sIFwibGxtXCIsIFwidG9vbFwiLCBcInJhZ1wiLCBcImFnZW50XCIsIFwic3RhcnRcIikgKi9cbiAgaWNvbj86IHN0cmluZztcbiAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIGNoaWxkcmVuPzogRmxvd0NoYXJ0U3BlY1tdO1xuICBuZXh0PzogRmxvd0NoYXJ0U3BlYztcbiAgaGFzRGVjaWRlcj86IGJvb2xlYW47XG4gIGhhc1NlbGVjdG9yPzogYm9vbGVhbjtcbiAgYnJhbmNoSWRzPzogc3RyaW5nW107XG4gIGxvb3BUYXJnZXQ/OiBzdHJpbmc7XG4gIGlzU3RyZWFtaW5nPzogYm9vbGVhbjtcbiAgc3RyZWFtSWQ/OiBzdHJpbmc7XG4gIGlzUGFyYWxsZWxDaGlsZD86IGJvb2xlYW47XG4gIHBhcmFsbGVsR3JvdXBJZD86IHN0cmluZztcbiAgaXNTdWJmbG93Um9vdD86IGJvb2xlYW47XG4gIHN1YmZsb3dJZD86IHN0cmluZztcbiAgc3ViZmxvd05hbWU/OiBzdHJpbmc7XG4gIC8qKiBUcnVlIHdoZW4gdGhpcyBub2RlIGlzIGEgYmFjay1lZGdlIHJlZmVyZW5jZSBjcmVhdGVkIGJ5IGxvb3BUbygpIOKAlCBub3QgYW4gZXhlY3V0YWJsZSBzdGFnZS4gKi9cbiAgaXNMb29wUmVmZXJlbmNlPzogYm9vbGVhbjtcbn1cblxuLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4vLyBCdWlsZC1UaW1lIEV4dHJhY3RvclxuLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbi8qKiBNZXRhZGF0YSBwcm92aWRlZCB0byB0aGUgYnVpbGQtdGltZSBleHRyYWN0b3IgZm9yIGVhY2ggbm9kZS4gKi9cbmV4cG9ydCB0eXBlIEJ1aWxkVGltZU5vZGVNZXRhZGF0YSA9IEZsb3dDaGFydFNwZWM7XG5cbmV4cG9ydCB0eXBlIEJ1aWxkVGltZUV4dHJhY3RvcjxUUmVzdWx0ID0gRmxvd0NoYXJ0U3BlYz4gPSAobWV0YWRhdGE6IEJ1aWxkVGltZU5vZGVNZXRhZGF0YSkgPT4gVFJlc3VsdDtcblxuLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4vLyBUcmF2ZXJzYWwgRXh0cmFjdG9yIChydW50aW1lKSDigJQgY2Fub25pY2FsIGRlZmluaXRpb24gbGl2ZXMgaW4gZW5naW5lL3R5cGVzLlxuLy8gUmUtZXhwb3J0ZWQgaGVyZSBzbyBjYWxsZXJzIGRvbid0IG5lZWQgdHdvIGltcG9ydCBwYXRocy5cbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG5leHBvcnQgdHlwZSB7IFRyYXZlcnNhbEV4dHJhY3RvciB9IGZyb20gJy4uL2VuZ2luZS90eXBlcy5qcyc7XG5cbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuLy8gRmxvd0NoYXJ0IOKAlCBjb21waWxlZCBvdXRwdXQgb2YgYnVpbGQoKVxuLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbmV4cG9ydCB0eXBlIEZsb3dDaGFydDxUT3V0ID0gYW55LCBUU2NvcGUgPSBhbnk+ID0ge1xuICByb290OiBTdGFnZU5vZGU8VE91dCwgVFNjb3BlPjtcbiAgc3RhZ2VNYXA6IE1hcDxzdHJpbmcsIFN0YWdlRnVuY3Rpb248VE91dCwgVFNjb3BlPj47XG4gIGV4dHJhY3Rvcj86IFRyYXZlcnNhbEV4dHJhY3RvcjtcbiAgc3ViZmxvd3M/OiBSZWNvcmQ8c3RyaW5nLCB7IHJvb3Q6IFN0YWdlTm9kZTxUT3V0LCBUU2NvcGU+IH0+O1xuICBidWlsZFRpbWVTdHJ1Y3R1cmU6IFNlcmlhbGl6ZWRQaXBlbGluZVN0cnVjdHVyZTtcbiAgZW5hYmxlTmFycmF0aXZlPzogYm9vbGVhbjtcbiAgbG9nZ2VyPzogSUxvZ2dlcjtcbiAgZGVzY3JpcHRpb246IHN0cmluZztcbiAgc3RhZ2VEZXNjcmlwdGlvbnM6IE1hcDxzdHJpbmcsIHN0cmluZz47XG4gIC8qKiBJbnB1dCBzY2hlbWEgKFpvZCBvciBKU09OIFNjaGVtYSkg4oCUIGRlY2xhcmVkIHZpYSBzZXRJbnB1dFNjaGVtYSgpIG9yIC5jb250cmFjdCgpLiAqL1xuICBpbnB1dFNjaGVtYT86IHVua25vd247XG4gIC8qKiBPdXRwdXQgc2NoZW1hIChab2Qgb3IgSlNPTiBTY2hlbWEpIOKAlCBkZWNsYXJlZCB2aWEgc2V0T3V0cHV0U2NoZW1hKCkgb3IgLmNvbnRyYWN0KCkuICovXG4gIG91dHB1dFNjaGVtYT86IHVua25vd247XG4gIC8qKiBPdXRwdXQgbWFwcGVyIOKAlCBleHRyYWN0cyByZXNwb25zZSBmcm9tIGZpbmFsIHNjb3BlLiAqL1xuICBvdXRwdXRNYXBwZXI/OiAoZmluYWxTY29wZTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pID0+IHVua25vd247XG4gIC8qKiBTY29wZSBmYWN0b3J5IOKAlCBhdXRvLWVtYmVkZGVkIGJ5IGZsb3dDaGFydDxUPigpLiBFeGVjdXRvciByZWFkcyB0aGlzIGlmIG5vIGZhY3RvcnkgcGFyYW0uICovXG4gIHNjb3BlRmFjdG9yeT86IFNjb3BlRmFjdG9yeTxUU2NvcGU+O1xufTtcblxuLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4vLyBTaW1wbGlmaWVkIFBhcmFsbGVsIFNwZWMgKGZvciBhZGRMaXN0T2ZGdW5jdGlvbilcbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG5leHBvcnQgdHlwZSBTaW1wbGlmaWVkUGFyYWxsZWxTcGVjPFRPdXQgPSBhbnksIFRTY29wZSA9IGFueT4gPSB7XG4gIGlkOiBzdHJpbmc7XG4gIG5hbWU6IHN0cmluZztcbiAgZm4/OiBTdGFnZUZ1bmN0aW9uPFRPdXQsIFRTY29wZT47XG59O1xuXG4vLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbi8vIEV4ZWNPcHRpb25zIChmb3IgZXhlY3V0ZSgpIGNvbnZlbmllbmNlIOKAlCB1c2VkIGJ5IHJ1bm5lciBsYXllcilcbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG5leHBvcnQgdHlwZSBFeGVjT3B0aW9ucyA9IHtcbiAgZGVmYXVsdHM/OiB1bmtub3duO1xuICBpbml0aWFsPzogdW5rbm93bjtcbiAgcmVhZE9ubHk/OiB1bmtub3duO1xuICB0aHJvdHRsaW5nRXJyb3JDaGVja2VyPzogKGU6IHVua25vd24pID0+IGJvb2xlYW47XG4gIHNjb3BlUHJvdGVjdGlvbk1vZGU/OiBTY29wZVByb3RlY3Rpb25Nb2RlO1xuICBlbmFibGVOYXJyYXRpdmU/OiBib29sZWFuO1xufTtcblxuLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4vLyBTdWJmbG93UmVmXG4vLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuZXhwb3J0IGludGVyZmFjZSBTdWJmbG93UmVmIHtcbiAgJHJlZjogc3RyaW5nO1xuICBtb3VudElkOiBzdHJpbmc7XG59XG4iXX0=
12
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL2J1aWxkZXIvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7OztHQVNHO0FBcUJILE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogYnVpbGRlci90eXBlcy50cyDigJQgQWxsIHR5cGVzIHVzZWQgYnkgdGhlIGJ1aWxkZXIgbGlicmFyeS5cbiAqXG4gKiBTaGFyZWQgdHlwZXMgKFN0YWdlTm9kZSwgU3RhZ2VGdW5jdGlvbiwgZXRjLikgYXJlIGltcG9ydGVkIGZyb20gdGhlIGVuZ2luZS5cbiAqIEJ1aWxkZXItc3BlY2lmaWMgdHlwZXMgKEZsb3dDaGFydFNwZWMsIEZsb3dDaGFydCwgU2VyaWFsaXplZFBpcGVsaW5lU3RydWN0dXJlKVxuICogYXJlIGRlZmluZWQgbG9jYWxseSDigJQgdGhleSBjYXJyeSBidWlsZGVyLW9ubHkgZmllbGRzIChkZXNjcmlwdGlvbiwgb3V0cHV0TWFwcGVyLCBldGMuKS5cbiAqXG4gKiBOT1RFOiBBbGwgZW5naW5lIGltcG9ydHMgYXJlIGBpbXBvcnQgdHlwZWAg4oCUIHplcm8gcnVudGltZSBkZXBlbmRlbmN5LlxuICogVGhlIGJ1aWxkZXIgcmVtYWlucyBzdGFuZGFsb25lIGF0IHJ1bnRpbWUuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBTdGFnZU5vZGUgfSBmcm9tICcuLi9lbmdpbmUvZ3JhcGgvU3RhZ2VOb2RlLmpzJztcbmltcG9ydCB0eXBlIHsgSUxvZ2dlciwgU2NvcGVGYWN0b3J5LCBTdGFnZUZ1bmN0aW9uIH0gZnJvbSAnLi4vZW5naW5lL3R5cGVzLmpzJztcbmltcG9ydCB0eXBlIHsgU2NvcGVQcm90ZWN0aW9uTW9kZSB9IGZyb20gJy4uL3Njb3BlL3Byb3RlY3Rpb24vdHlwZXMuanMnO1xuaW1wb3J0IHR5cGUgeyBTdHJ1Y3R1cmVSZWNvcmRlciB9IGZyb20gJy4vc3RydWN0dXJlL1N0cnVjdHVyZVJlY29yZGVyLmpzJztcblxuLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4vLyBSZS1leHBvcnRzIGZyb20gZW5naW5lIChjYW5vbmljYWwgZGVmaW5pdGlvbnMpXG4vLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuZXhwb3J0IHR5cGUgeyBSZXN1bWVGbiwgU3RhZ2VOb2RlIH0gZnJvbSAnLi4vZW5naW5lL2dyYXBoL1N0YWdlTm9kZS5qcyc7XG5leHBvcnQgdHlwZSB7XG4gIElMb2dnZXIsXG4gIFN0YWdlRnVuY3Rpb24sXG4gIFN0cmVhbUNhbGxiYWNrLFxuICBTdHJlYW1IYW5kbGVycyxcbiAgU3RyZWFtTGlmZWN5Y2xlSGFuZGxlcixcbiAgU3RyZWFtVG9rZW5IYW5kbGVyLFxuICBTdWJmbG93TW91bnRPcHRpb25zLFxufSBmcm9tICcuLi9lbmdpbmUvdHlwZXMuanMnO1xuZXhwb3J0IHsgQXJyYXlNZXJnZU1vZGUgfSBmcm9tICcuLi9lbmdpbmUvdHlwZXMuanMnO1xuXG4vLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbi8vIEFsaWFzZXNcbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4vKiogUmVsYXhlZC1nZW5lcmljIGFsaWFzIGZvciBidWlsZGVyIGVyZ29ub21pY3MuICovXG5leHBvcnQgdHlwZSBTdGFnZUZuID0gU3RhZ2VGdW5jdGlvbjxhbnksIGFueT47XG5cbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuLy8gU2NvcGUgUHJvdGVjdGlvbiDigJQgY2Fub25pY2FsIGRlZmluaXRpb24gaW4gc2NvcGUvcHJvdGVjdGlvbi90eXBlcy50c1xuLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbmV4cG9ydCB0eXBlIHsgU2NvcGVQcm90ZWN0aW9uTW9kZSB9O1xuXG4vLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbi8vIFNlcmlhbGl6ZWQgUGlwZWxpbmUgU3RydWN0dXJlIChKU09OLXNhZmUsIGZvciB2aXN1YWxpemF0aW9uKVxuLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbmV4cG9ydCBpbnRlcmZhY2UgU2VyaWFsaXplZFBpcGVsaW5lU3RydWN0dXJlIHtcbiAgbmFtZTogc3RyaW5nO1xuICBpZDogc3RyaW5nO1xuICB0eXBlOiAnc3RhZ2UnIHwgJ2RlY2lkZXInIHwgJ3NlbGVjdG9yJyB8ICdmb3JrJyB8ICdzdHJlYW1pbmcnIHwgJ3N1YmZsb3cnIHwgJ2xvb3AnO1xuICAvKiogU2VtYW50aWMgaWNvbiBoaW50IGZvciB2aXN1YWxpemF0aW9uIChlLmcuLCBcImxsbVwiLCBcInRvb2xcIiwgXCJyYWdcIiwgXCJhZ2VudFwiLCBcInN0YXJ0XCIpICovXG4gIGljb24/OiBzdHJpbmc7XG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICBjaGlsZHJlbj86IFNlcmlhbGl6ZWRQaXBlbGluZVN0cnVjdHVyZVtdO1xuICBuZXh0PzogU2VyaWFsaXplZFBpcGVsaW5lU3RydWN0dXJlO1xuICBoYXNEZWNpZGVyPzogYm9vbGVhbjtcbiAgaGFzU2VsZWN0b3I/OiBib29sZWFuO1xuICBicmFuY2hJZHM/OiBzdHJpbmdbXTtcbiAgbG9vcFRhcmdldD86IHN0cmluZztcbiAgaXNTdHJlYW1pbmc/OiBib29sZWFuO1xuICBzdHJlYW1JZD86IHN0cmluZztcbiAgaXNQYXJhbGxlbENoaWxkPzogYm9vbGVhbjtcbiAgcGFyYWxsZWxHcm91cElkPzogc3RyaW5nO1xuICBpc1N1YmZsb3dSb290PzogYm9vbGVhbjtcbiAgc3ViZmxvd0lkPzogc3RyaW5nO1xuICBzdWJmbG93TmFtZT86IHN0cmluZztcbiAgLyoqXG4gICAqIE5lc3RlZCBwaXBlbGluZSBzdHJ1Y3R1cmUgZm9yIGEgc3ViZmxvdyBub2RlLlxuICAgKiBXQVJOSU5HOiBBbnkgZnV0dXJlIHdhbGtlciB0aGF0IHRyYXZlcnNlcyB0aGlzIGZpZWxkIHJlY3Vyc2l2ZWx5IG11c3QgYXBwbHkgaXRzIG93blxuICAgKiBkZXB0aCBndWFyZCAoc2VlIE1BWF9XQUxLX0RFUFRIIGluIGNvbnRyYWN0L29wZW5hcGkudHMpLiBUaGUgY3VycmVudCBgYnVpbGREZXNjcmlwdGlvbmBcbiAgICogd2FsayBpbiBvcGVuYXBpLnRzIGRvZXMgTk9UIHRyYXZlcnNlIHN1YmZsb3dTdHJ1Y3R1cmUg4oCUIGlmIGl0IGV2ZXIgZG9lcywgdGhlIGRlcHRoXG4gICAqIGd1YXJkIG11c3QgY292ZXIgYm90aCB0aGUgYG5leHRgIGNoYWluIGFuZCB0aGlzIG5lc3RlZCBzdHJ1Y3R1cmUuXG4gICAqL1xuICBzdWJmbG93U3RydWN0dXJlPzogU2VyaWFsaXplZFBpcGVsaW5lU3RydWN0dXJlO1xuICBpdGVyYXRpb25Db3VudD86IG51bWJlcjtcbiAgLyoqIFRydWUgd2hlbiB0aGlzIHN1YmZsb3cgdXNlcyBsYXp5IHJlc29sdXRpb24gKGRlZmVycmVkIHVudGlsIGV4ZWN1dGlvbikuICovXG4gIGlzTGF6eT86IGJvb2xlYW47XG4gIC8qKiBUcnVlIHdoZW4gdGhpcyBub2RlIGlzIGEgYmFjay1lZGdlIHJlZmVyZW5jZSBjcmVhdGVkIGJ5IGxvb3BUbygpIOKAlCBub3QgYW4gZXhlY3V0YWJsZSBzdGFnZS4gKi9cbiAgaXNMb29wUmVmZXJlbmNlPzogYm9vbGVhbjtcbiAgLyoqIFdoZW4gdHJ1ZSwgdGhpcyBzdGFnZSBjYW4gcGF1c2UgZXhlY3V0aW9uIChQYXVzYWJsZUhhbmRsZXIgcGF0dGVybikuICovXG4gIGlzUGF1c2FibGU/OiBib29sZWFuO1xufVxuXG4vLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbi8vIEZsb3dDaGFydFNwZWMgKHB1cmUgSlNPTiwgbm8gZnVuY3Rpb25zIOKAlCBmb3IgRkXihpJCRSB0cmFuc3BvcnQpXG4vLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuZXhwb3J0IGludGVyZmFjZSBGbG93Q2hhcnRTcGVjIHtcbiAgbmFtZTogc3RyaW5nO1xuICBpZDogc3RyaW5nO1xuICAvKiogTm9kZSB0eXBlIOKAlCBtYXRjaGVzIGBTZXJpYWxpemVkUGlwZWxpbmVTdHJ1Y3R1cmUudHlwZWAgZm9yIHZpc3VhbGl6YXRpb24gYWxpZ25tZW50LiAqL1xuICB0eXBlPzogJ3N0YWdlJyB8ICdkZWNpZGVyJyB8ICdzZWxlY3RvcicgfCAnZm9yaycgfCAnc3RyZWFtaW5nJyB8ICdzdWJmbG93JyB8ICdsb29wJztcbiAgLyoqIFNlbWFudGljIGljb24gaGludCBmb3IgdmlzdWFsaXphdGlvbiAoZS5nLiwgXCJsbG1cIiwgXCJ0b29sXCIsIFwicmFnXCIsIFwiYWdlbnRcIiwgXCJzdGFydFwiKSAqL1xuICBpY29uPzogc3RyaW5nO1xuICBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgY2hpbGRyZW4/OiBGbG93Q2hhcnRTcGVjW107XG4gIG5leHQ/OiBGbG93Q2hhcnRTcGVjO1xuICBoYXNEZWNpZGVyPzogYm9vbGVhbjtcbiAgaGFzU2VsZWN0b3I/OiBib29sZWFuO1xuICBicmFuY2hJZHM/OiBzdHJpbmdbXTtcbiAgbG9vcFRhcmdldD86IHN0cmluZztcbiAgaXNTdHJlYW1pbmc/OiBib29sZWFuO1xuICBzdHJlYW1JZD86IHN0cmluZztcbiAgaXNQYXJhbGxlbENoaWxkPzogYm9vbGVhbjtcbiAgcGFyYWxsZWxHcm91cElkPzogc3RyaW5nO1xuICBpc1N1YmZsb3dSb290PzogYm9vbGVhbjtcbiAgc3ViZmxvd0lkPzogc3RyaW5nO1xuICBzdWJmbG93TmFtZT86IHN0cmluZztcbiAgLyoqIFRydWUgd2hlbiB0aGlzIG5vZGUgaXMgYSBiYWNrLWVkZ2UgcmVmZXJlbmNlIGNyZWF0ZWQgYnkgbG9vcFRvKCkg4oCUIG5vdCBhbiBleGVjdXRhYmxlIHN0YWdlLiAqL1xuICBpc0xvb3BSZWZlcmVuY2U/OiBib29sZWFuO1xufVxuXG4vLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbi8vIGZsb3dDaGFydCgpIG9wdGlvbnMgYmFnXG4vLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuLyoqXG4gKiBPcHRpb25zLWJhZyBhcmd1bWVudCBzaGFwZSBmb3IgdGhlIGBmbG93Q2hhcnQoKWAgZmFjdG9yeS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGbG93Q2hhcnRPcHRpb25zIHtcbiAgLyoqXG4gICAqIEJ1aWxkLXRpbWUgcmVjb3JkZXJzIHRvIGF0dGFjaCBCRUZPUkUgYHN0YXJ0KClgIGZpcmVzLiBFcXVpdmFsZW50XG4gICAqIHRvIGNoYWluaW5nIGAuYXR0YWNoU3RydWN0dXJlUmVjb3JkZXIocmVjKWAgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlXG4gICAqIGZhY3RvcnkgcmV0dXJucyDigJQgYnV0IHJlZ2lzdGVyZWQgRUFSTElFUiwgc28gZXZlbiB0aGUgc2VlZCBldmVudFxuICAgKiBmaXJlcyB0aHJvdWdoIHRoZSBkaXNwYXRjaGVyIHdpdGhvdXQgbmVlZGluZyB0aGUgc2VlZC1yZXBsYXkgcGF0aC5cbiAgICpcbiAgICogTXVsdGlwbGUgcmVjb3JkZXJzIGF0dGFjaCBpbiBhcnJheSBvcmRlciAoc2FtZSBhc1xuICAgKiBgLmF0dGFjaFN0cnVjdHVyZVJlY29yZGVyYCByZXBlYXRlZCkuIFNlZSBgU3RydWN0dXJlUmVjb3JkZXJgIEpTRG9jXG4gICAqIGZvciBldmVudCBzZW1hbnRpY3MsIG9yZGVyaW5nIGludmFyaWFudHMsIGFuZCB0aGUgdHJ1c3QgbW9kZWwuXG4gICAqL1xuICBzdHJ1Y3R1cmVSZWNvcmRlcnM/OiBTdHJ1Y3R1cmVSZWNvcmRlcltdO1xuICAvKiogRnJlZS1mb3JtIGRlc2NyaXB0aW9uIHNob3duIG9uIHRoZSByb290IHNwZWMgbm9kZS4gKi9cbiAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG59XG5cbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuLy8gRmxvd0NoYXJ0IOKAlCBjb21waWxlZCBvdXRwdXQgb2YgYnVpbGQoKVxuLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbmV4cG9ydCB0eXBlIEZsb3dDaGFydDxUT3V0ID0gYW55LCBUU2NvcGUgPSBhbnk+ID0ge1xuICByb290OiBTdGFnZU5vZGU8VE91dCwgVFNjb3BlPjtcbiAgc3RhZ2VNYXA6IE1hcDxzdHJpbmcsIFN0YWdlRnVuY3Rpb248VE91dCwgVFNjb3BlPj47XG4gIHN1YmZsb3dzPzogUmVjb3JkPHN0cmluZywgeyByb290OiBTdGFnZU5vZGU8VE91dCwgVFNjb3BlPiB9PjtcbiAgYnVpbGRUaW1lU3RydWN0dXJlOiBTZXJpYWxpemVkUGlwZWxpbmVTdHJ1Y3R1cmU7XG4gIGVuYWJsZU5hcnJhdGl2ZT86IGJvb2xlYW47XG4gIGxvZ2dlcj86IElMb2dnZXI7XG4gIGRlc2NyaXB0aW9uOiBzdHJpbmc7XG4gIHN0YWdlRGVzY3JpcHRpb25zOiBNYXA8c3RyaW5nLCBzdHJpbmc+O1xuICAvKiogSW5wdXQgc2NoZW1hIChab2Qgb3IgSlNPTiBTY2hlbWEpIOKAlCBkZWNsYXJlZCB2aWEgc2V0SW5wdXRTY2hlbWEoKSBvciAuY29udHJhY3QoKS4gKi9cbiAgaW5wdXRTY2hlbWE/OiB1bmtub3duO1xuICAvKiogT3V0cHV0IHNjaGVtYSAoWm9kIG9yIEpTT04gU2NoZW1hKSDigJQgZGVjbGFyZWQgdmlhIHNldE91dHB1dFNjaGVtYSgpIG9yIC5jb250cmFjdCgpLiAqL1xuICBvdXRwdXRTY2hlbWE/OiB1bmtub3duO1xuICAvKiogT3V0cHV0IG1hcHBlciDigJQgZXh0cmFjdHMgcmVzcG9uc2UgZnJvbSBmaW5hbCBzY29wZS4gKi9cbiAgb3V0cHV0TWFwcGVyPzogKGZpbmFsU2NvcGU6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KSA9PiB1bmtub3duO1xuICAvKiogU2NvcGUgZmFjdG9yeSDigJQgYXV0by1lbWJlZGRlZCBieSBmbG93Q2hhcnQ8VD4oKS4gRXhlY3V0b3IgcmVhZHMgdGhpcyBpZiBubyBmYWN0b3J5IHBhcmFtLiAqL1xuICBzY29wZUZhY3Rvcnk/OiBTY29wZUZhY3Rvcnk8VFNjb3BlPjtcbn07XG5cbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuLy8gU2ltcGxpZmllZCBQYXJhbGxlbCBTcGVjIChmb3IgYWRkTGlzdE9mRnVuY3Rpb24pXG4vLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuZXhwb3J0IHR5cGUgU2ltcGxpZmllZFBhcmFsbGVsU3BlYzxUT3V0ID0gYW55LCBUU2NvcGUgPSBhbnk+ID0ge1xuICBpZDogc3RyaW5nO1xuICBuYW1lOiBzdHJpbmc7XG4gIGZuPzogU3RhZ2VGdW5jdGlvbjxUT3V0LCBUU2NvcGU+O1xufTtcblxuLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4vLyBFeGVjT3B0aW9ucyAoZm9yIGV4ZWN1dGUoKSBjb252ZW5pZW5jZSDigJQgdXNlZCBieSBydW5uZXIgbGF5ZXIpXG4vLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuZXhwb3J0IHR5cGUgRXhlY09wdGlvbnMgPSB7XG4gIGRlZmF1bHRzPzogdW5rbm93bjtcbiAgaW5pdGlhbD86IHVua25vd247XG4gIHJlYWRPbmx5PzogdW5rbm93bjtcbiAgdGhyb3R0bGluZ0Vycm9yQ2hlY2tlcj86IChlOiB1bmtub3duKSA9PiBib29sZWFuO1xuICBzY29wZVByb3RlY3Rpb25Nb2RlPzogU2NvcGVQcm90ZWN0aW9uTW9kZTtcbiAgZW5hYmxlTmFycmF0aXZlPzogYm9vbGVhbjtcbn07XG5cbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuLy8gU3ViZmxvd1JlZlxuLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbmV4cG9ydCBpbnRlcmZhY2UgU3ViZmxvd1JlZiB7XG4gICRyZWY6IHN0cmluZztcbiAgbW91bnRJZDogc3RyaW5nO1xufVxuIl19
@@ -6,8 +6,9 @@
6
6
  * a single extraction point that preserves structured details while still
7
7
  * producing a human-readable message.
8
8
  *
9
- * Consumers (narrative recorders, extractors, diagnostic collectors) receive
10
- * StructuredErrorInfo instead of a flat string, and can decide how to render it.
9
+ * Consumers (narrative recorders, FlowRecorder.onError handlers, diagnostic
10
+ * collectors) receive StructuredErrorInfo instead of a flat string, and can
11
+ * decide how to render it.
11
12
  * String-ification happens only at the final rendering boundary.
12
13
  */
13
14
  import { InputValidationError } from '../../schema/errors.js';
@@ -82,4 +83,4 @@ export function formatErrorInfo(info) {
82
83
  });
83
84
  return `${info.message}\n${issueLines.join('\n')}`;
84
85
  }
85
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3JJbmZvLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9lbmdpbmUvZXJyb3JzL2Vycm9ySW5mby50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7R0FXRztBQUdILE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBcUI5RDs7Ozs7O0dBTUc7QUFDSCxNQUFNLFVBQVUsZ0JBQWdCLENBQUMsS0FBYztJQUM3QyxJQUFJLEtBQUssWUFBWSxvQkFBb0IsRUFBRSxDQUFDO1FBQzFDLE9BQU87WUFDTCxPQUFPLEVBQUUsS0FBSyxDQUFDLE9BQU87WUFDdEIsSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJO1lBQ2hCLE1BQU0sRUFBRSxLQUFLLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUMxRSxJQUFJLEVBQUUsd0JBQXdCO1lBQzlCLEdBQUcsRUFBRSxLQUFLO1NBQ1gsQ0FBQztJQUNKLENBQUM7SUFFRCxJQUFJLEtBQUssWUFBWSxLQUFLLEVBQUUsQ0FBQztRQUMzQixpRkFBaUY7UUFDakYsSUFBSSxDQUFDO1lBQ0gsTUFBTSxJQUFJLEdBQXdCO2dCQUNoQyxPQUFPLEVBQUUsS0FBSyxDQUFDLE9BQU87Z0JBQ3RCLElBQUksRUFBRSxLQUFLLENBQUMsSUFBSTtnQkFDaEIsR0FBRyxFQUFFLEtBQUs7YUFDWCxDQUFDO1lBRUYsa0VBQWtFO1lBQ2xFLElBQUksQ0FBQztnQkFDSCxNQUFNLFNBQVMsR0FBSSxLQUE0QyxDQUFDLElBQUksQ0FBQztnQkFDckUsSUFBSSxPQUFPLFNBQVMsS0FBSyxRQUFRLEVBQUUsQ0FBQztvQkFDbEMsSUFBSSxDQUFDLElBQUksR0FBRyxTQUFTLENBQUM7Z0JBQ3hCLENBQUM7WUFDSCxDQUFDO1lBQUMsTUFBTSxDQUFDO2dCQUNQLG9DQUFvQztZQUN0QyxDQUFDO1lBRUQsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO1FBQUMsTUFBTSxDQUFDO1lBQ1AsbUVBQW1FO1FBQ3JFLENBQUM7SUFDSCxDQUFDO0lBRUQsd0RBQXdEO0lBQ3hELElBQUksQ0FBQztRQUNILE9BQU87WUFDTCxPQUFPLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQztZQUN0QixHQUFHLEVBQUUsS0FBSztTQUNYLENBQUM7SUFDSixDQUFDO0lBQUMsTUFBTSxDQUFDO1FBQ1AscUVBQXFFO1FBQ3JFLE9BQU87WUFDTCxPQUFPLEVBQUUsd0JBQXdCO1lBQ2pDLEdBQUcsRUFBRSxLQUFLO1NBQ1gsQ0FBQztJQUNKLENBQUM7QUFDSCxDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILE1BQU0sVUFBVSxlQUFlLENBQUMsSUFBeUI7SUFDdkQsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDN0MsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDO0lBQ3RCLENBQUM7SUFFRCxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO1FBQzNDLE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQztRQUNyRSxPQUFPLE9BQU8sSUFBSSxLQUFLLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUN6QyxDQUFDLENBQUMsQ0FBQztJQUVILE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxLQUFLLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztBQUNyRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBlcnJvckluZm8udHMg4oCUIEV4dHJhY3Qgc3RydWN0dXJlZCBpbmZvcm1hdGlvbiBmcm9tIGFueSBlcnJvciB0eXBlLlxuICpcbiAqIFRoZSBlbmdpbmUncyBlcnJvciBjYXRjaCBibG9ja3MgY3VycmVudGx5IGNhbGwgZXJyb3IudG9TdHJpbmcoKSwgZGVzdHJveWluZ1xuICogc3RydWN0dXJlZCBkYXRhIChlLmcuIElucHV0VmFsaWRhdGlvbkVycm9yLmlzc3VlcykuIFRoaXMgbW9kdWxlIHByb3ZpZGVzXG4gKiBhIHNpbmdsZSBleHRyYWN0aW9uIHBvaW50IHRoYXQgcHJlc2VydmVzIHN0cnVjdHVyZWQgZGV0YWlscyB3aGlsZSBzdGlsbFxuICogcHJvZHVjaW5nIGEgaHVtYW4tcmVhZGFibGUgbWVzc2FnZS5cbiAqXG4gKiBDb25zdW1lcnMgKG5hcnJhdGl2ZSByZWNvcmRlcnMsIGV4dHJhY3RvcnMsIGRpYWdub3N0aWMgY29sbGVjdG9ycykgcmVjZWl2ZVxuICogU3RydWN0dXJlZEVycm9ySW5mbyBpbnN0ZWFkIG9mIGEgZmxhdCBzdHJpbmcsIGFuZCBjYW4gZGVjaWRlIGhvdyB0byByZW5kZXIgaXQuXG4gKiBTdHJpbmctaWZpY2F0aW9uIGhhcHBlbnMgb25seSBhdCB0aGUgZmluYWwgcmVuZGVyaW5nIGJvdW5kYXJ5LlxuICovXG5cbmltcG9ydCB0eXBlIHsgVmFsaWRhdGlvbklzc3VlIH0gZnJvbSAnLi4vLi4vc2NoZW1hL2Vycm9ycy5qcyc7XG5pbXBvcnQgeyBJbnB1dFZhbGlkYXRpb25FcnJvciB9IGZyb20gJy4uLy4uL3NjaGVtYS9lcnJvcnMuanMnO1xuXG4vKiogU3RydWN0dXJlZCByZXByZXNlbnRhdGlvbiBvZiBhbnkgZXJyb3IgY2F1Z2h0IGR1cmluZyBzdGFnZSBleGVjdXRpb24uICovXG5leHBvcnQgaW50ZXJmYWNlIFN0cnVjdHVyZWRFcnJvckluZm8ge1xuICAvKiogSHVtYW4tcmVhZGFibGUgZXJyb3IgbWVzc2FnZSAoYWx3YXlzIHByZXNlbnQpLiAqL1xuICBtZXNzYWdlOiBzdHJpbmc7XG4gIC8qKiBFcnJvciBjbGFzcyBuYW1lIHdoZW4gYXZhaWxhYmxlIChlLmcuICdJbnB1dFZhbGlkYXRpb25FcnJvcicsICdUeXBlRXJyb3InKS4gKi9cbiAgbmFtZT86IHN0cmluZztcbiAgLyoqIEZpZWxkLWxldmVsIHZhbGlkYXRpb24gaXNzdWVzIChwcmVzZW50IGZvciBJbnB1dFZhbGlkYXRpb25FcnJvcikuICovXG4gIGlzc3Vlcz86IFZhbGlkYXRpb25Jc3N1ZVtdO1xuICAvKiogTWFjaGluZS1yZWFkYWJsZSBlcnJvciBjb2RlIGlmIHRoZSBlcnJvciBjYXJyaWVzIG9uZS4gKi9cbiAgY29kZT86IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSBvcmlnaW5hbCBlcnJvciBvYmplY3QsIGZvciBjb25zdW1lcnMgdGhhdCBuZWVkIGZ1bGwgYWNjZXNzLlxuICAgKiBOb3Qgc2FmZSB0byBzZXJpYWxpemUgZGlyZWN0bHkg4oCUIG1heSBjb250YWluIGNpcmN1bGFyIHJlZmVyZW5jZXMsXG4gICAqIHN0YWNrIHRyYWNlcywgb3Igc2Vuc2l0aXZlIGludGVybmFscy4gVXNlIGBmb3JtYXRFcnJvckluZm8oKWAgZm9yXG4gICAqIHNhZmUgc3RyaW5nIG91dHB1dC5cbiAgICovXG4gIHJhdzogdW5rbm93bjtcbn1cblxuLyoqXG4gKiBFeHRyYWN0IHN0cnVjdHVyZWQgZXJyb3IgaW5mbyBmcm9tIGFueSB0aHJvd24gdmFsdWUuXG4gKlxuICogLSBJbnB1dFZhbGlkYXRpb25FcnJvciDihpIgcHJlc2VydmVzIC5pc3N1ZXMgYXJyYXlcbiAqIC0gU3RhbmRhcmQgRXJyb3Ig4oaSIHByZXNlcnZlcyAubmFtZSwgLm1lc3NhZ2VcbiAqIC0gTm9uLUVycm9yIHRocm93biB2YWx1ZXMg4oaSIGNvZXJjZXMgdG8gc3RyaW5nXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBleHRyYWN0RXJyb3JJbmZvKGVycm9yOiB1bmtub3duKTogU3RydWN0dXJlZEVycm9ySW5mbyB7XG4gIGlmIChlcnJvciBpbnN0YW5jZW9mIElucHV0VmFsaWRhdGlvbkVycm9yKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG1lc3NhZ2U6IGVycm9yLm1lc3NhZ2UsXG4gICAgICBuYW1lOiBlcnJvci5uYW1lLFxuICAgICAgaXNzdWVzOiBlcnJvci5pc3N1ZXMubWFwKChpc3N1ZSkgPT4gKHsgLi4uaXNzdWUsIHBhdGg6IFsuLi5pc3N1ZS5wYXRoXSB9KSksXG4gICAgICBjb2RlOiAnSU5QVVRfVkFMSURBVElPTl9FUlJPUicsXG4gICAgICByYXc6IGVycm9yLFxuICAgIH07XG4gIH1cblxuICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgIC8vIEd1YXJkIGFnYWluc3QgYWR2ZXJzYXJpYWwgZXJyb3JzIHdpdGggdGhyb3dpbmcgZ2V0dGVycyBvbiAubWVzc2FnZS8ubmFtZS8uY29kZVxuICAgIHRyeSB7XG4gICAgICBjb25zdCBpbmZvOiBTdHJ1Y3R1cmVkRXJyb3JJbmZvID0ge1xuICAgICAgICBtZXNzYWdlOiBlcnJvci5tZXNzYWdlLFxuICAgICAgICBuYW1lOiBlcnJvci5uYW1lLFxuICAgICAgICByYXc6IGVycm9yLFxuICAgICAgfTtcblxuICAgICAgLy8gUHJlc2VydmUgLmNvZGUgaWYgcHJlc2VudCAoY29tbW9uIE5vZGUuanMgcGF0dGVybiwgZS5nLiBFTk9FTlQpXG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBtYXliZUNvZGUgPSAoZXJyb3IgYXMgdW5rbm93biBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikuY29kZTtcbiAgICAgICAgaWYgKHR5cGVvZiBtYXliZUNvZGUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgaW5mby5jb2RlID0gbWF5YmVDb2RlO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgLyogLmNvZGUgYWNjZXNzb3IgdGhyZXcg4oCUIHNraXAgaXQgKi9cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGluZm87XG4gICAgfSBjYXRjaCB7XG4gICAgICAvLyAubWVzc2FnZSBvciAubmFtZSBnZXR0ZXIgdGhyZXcg4oCUIGZhbGwgdGhyb3VnaCB0byBzdHJpbmcgY29lcmNpb25cbiAgICB9XG4gIH1cblxuICAvLyBOb24tRXJyb3IgdGhyb3duIHZhbHVlIChzdHJpbmcsIG51bWJlciwgb2JqZWN0LCBldGMuKVxuICB0cnkge1xuICAgIHJldHVybiB7XG4gICAgICBtZXNzYWdlOiBTdHJpbmcoZXJyb3IpLFxuICAgICAgcmF3OiBlcnJvcixcbiAgICB9O1xuICB9IGNhdGNoIHtcbiAgICAvLyBTdHJpbmcoKSBmYWlsZWQgKGUuZy4gbnVsbC1wcm90b3R5cGUgb2JqZWN0LCB0aHJvd2luZyAudG9TdHJpbmcoKSlcbiAgICByZXR1cm4ge1xuICAgICAgbWVzc2FnZTogJ1t1bnNlcmlhbGl6YWJsZSBlcnJvcl0nLFxuICAgICAgcmF3OiBlcnJvcixcbiAgICB9O1xuICB9XG59XG5cbi8qKlxuICogRm9ybWF0IGEgU3RydWN0dXJlZEVycm9ySW5mbyBiYWNrIHRvIGEgaHVtYW4tcmVhZGFibGUgc3RyaW5nLlxuICogVXNlIHRoaXMgYXQgcmVuZGVyaW5nIGJvdW5kYXJpZXMgKG5hcnJhdGl2ZSBvdXRwdXQsIGxvZyBsaW5lcykuXG4gKiBJbmNsdWRlcyBmaWVsZC1sZXZlbCBkZXRhaWxzIHdoZW4gaXNzdWVzIGFyZSBwcmVzZW50LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0RXJyb3JJbmZvKGluZm86IFN0cnVjdHVyZWRFcnJvckluZm8pOiBzdHJpbmcge1xuICBpZiAoIWluZm8uaXNzdWVzIHx8IGluZm8uaXNzdWVzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBpbmZvLm1lc3NhZ2U7XG4gIH1cblxuICBjb25zdCBpc3N1ZUxpbmVzID0gaW5mby5pc3N1ZXMubWFwKChpc3N1ZSkgPT4ge1xuICAgIGNvbnN0IHBhdGggPSBpc3N1ZS5wYXRoLmxlbmd0aCA+IDAgPyBpc3N1ZS5wYXRoLmpvaW4oJy4nKSA6ICcocm9vdCknO1xuICAgIHJldHVybiBgICAtICR7cGF0aH06ICR7aXNzdWUubWVzc2FnZX1gO1xuICB9KTtcblxuICByZXR1cm4gYCR7aW5mby5tZXNzYWdlfVxcbiR7aXNzdWVMaW5lcy5qb2luKCdcXG4nKX1gO1xufVxuIl19
86
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3JJbmZvLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9lbmdpbmUvZXJyb3JzL2Vycm9ySW5mby50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7O0dBWUc7QUFHSCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQXFCOUQ7Ozs7OztHQU1HO0FBQ0gsTUFBTSxVQUFVLGdCQUFnQixDQUFDLEtBQWM7SUFDN0MsSUFBSSxLQUFLLFlBQVksb0JBQW9CLEVBQUUsQ0FBQztRQUMxQyxPQUFPO1lBQ0wsT0FBTyxFQUFFLEtBQUssQ0FBQyxPQUFPO1lBQ3RCLElBQUksRUFBRSxLQUFLLENBQUMsSUFBSTtZQUNoQixNQUFNLEVBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxHQUFHLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDMUUsSUFBSSxFQUFFLHdCQUF3QjtZQUM5QixHQUFHLEVBQUUsS0FBSztTQUNYLENBQUM7SUFDSixDQUFDO0lBRUQsSUFBSSxLQUFLLFlBQVksS0FBSyxFQUFFLENBQUM7UUFDM0IsaUZBQWlGO1FBQ2pGLElBQUksQ0FBQztZQUNILE1BQU0sSUFBSSxHQUF3QjtnQkFDaEMsT0FBTyxFQUFFLEtBQUssQ0FBQyxPQUFPO2dCQUN0QixJQUFJLEVBQUUsS0FBSyxDQUFDLElBQUk7Z0JBQ2hCLEdBQUcsRUFBRSxLQUFLO2FBQ1gsQ0FBQztZQUVGLGtFQUFrRTtZQUNsRSxJQUFJLENBQUM7Z0JBQ0gsTUFBTSxTQUFTLEdBQUksS0FBNEMsQ0FBQyxJQUFJLENBQUM7Z0JBQ3JFLElBQUksT0FBTyxTQUFTLEtBQUssUUFBUSxFQUFFLENBQUM7b0JBQ2xDLElBQUksQ0FBQyxJQUFJLEdBQUcsU0FBUyxDQUFDO2dCQUN4QixDQUFDO1lBQ0gsQ0FBQztZQUFDLE1BQU0sQ0FBQztnQkFDUCxvQ0FBb0M7WUFDdEMsQ0FBQztZQUVELE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztRQUFDLE1BQU0sQ0FBQztZQUNQLG1FQUFtRTtRQUNyRSxDQUFDO0lBQ0gsQ0FBQztJQUVELHdEQUF3RDtJQUN4RCxJQUFJLENBQUM7UUFDSCxPQUFPO1lBQ0wsT0FBTyxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUM7WUFDdEIsR0FBRyxFQUFFLEtBQUs7U0FDWCxDQUFDO0lBQ0osQ0FBQztJQUFDLE1BQU0sQ0FBQztRQUNQLHFFQUFxRTtRQUNyRSxPQUFPO1lBQ0wsT0FBTyxFQUFFLHdCQUF3QjtZQUNqQyxHQUFHLEVBQUUsS0FBSztTQUNYLENBQUM7SUFDSixDQUFDO0FBQ0gsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxNQUFNLFVBQVUsZUFBZSxDQUFDLElBQXlCO0lBQ3ZELElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQzdDLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUN0QixDQUFDO0lBRUQsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtRQUMzQyxNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUM7UUFDckUsT0FBTyxPQUFPLElBQUksS0FBSyxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDekMsQ0FBQyxDQUFDLENBQUM7SUFFSCxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sS0FBSyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7QUFDckQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogZXJyb3JJbmZvLnRzIOKAlCBFeHRyYWN0IHN0cnVjdHVyZWQgaW5mb3JtYXRpb24gZnJvbSBhbnkgZXJyb3IgdHlwZS5cbiAqXG4gKiBUaGUgZW5naW5lJ3MgZXJyb3IgY2F0Y2ggYmxvY2tzIGN1cnJlbnRseSBjYWxsIGVycm9yLnRvU3RyaW5nKCksIGRlc3Ryb3lpbmdcbiAqIHN0cnVjdHVyZWQgZGF0YSAoZS5nLiBJbnB1dFZhbGlkYXRpb25FcnJvci5pc3N1ZXMpLiBUaGlzIG1vZHVsZSBwcm92aWRlc1xuICogYSBzaW5nbGUgZXh0cmFjdGlvbiBwb2ludCB0aGF0IHByZXNlcnZlcyBzdHJ1Y3R1cmVkIGRldGFpbHMgd2hpbGUgc3RpbGxcbiAqIHByb2R1Y2luZyBhIGh1bWFuLXJlYWRhYmxlIG1lc3NhZ2UuXG4gKlxuICogQ29uc3VtZXJzIChuYXJyYXRpdmUgcmVjb3JkZXJzLCBGbG93UmVjb3JkZXIub25FcnJvciBoYW5kbGVycywgZGlhZ25vc3RpY1xuICogY29sbGVjdG9ycykgcmVjZWl2ZSBTdHJ1Y3R1cmVkRXJyb3JJbmZvIGluc3RlYWQgb2YgYSBmbGF0IHN0cmluZywgYW5kIGNhblxuICogZGVjaWRlIGhvdyB0byByZW5kZXIgaXQuXG4gKiBTdHJpbmctaWZpY2F0aW9uIGhhcHBlbnMgb25seSBhdCB0aGUgZmluYWwgcmVuZGVyaW5nIGJvdW5kYXJ5LlxuICovXG5cbmltcG9ydCB0eXBlIHsgVmFsaWRhdGlvbklzc3VlIH0gZnJvbSAnLi4vLi4vc2NoZW1hL2Vycm9ycy5qcyc7XG5pbXBvcnQgeyBJbnB1dFZhbGlkYXRpb25FcnJvciB9IGZyb20gJy4uLy4uL3NjaGVtYS9lcnJvcnMuanMnO1xuXG4vKiogU3RydWN0dXJlZCByZXByZXNlbnRhdGlvbiBvZiBhbnkgZXJyb3IgY2F1Z2h0IGR1cmluZyBzdGFnZSBleGVjdXRpb24uICovXG5leHBvcnQgaW50ZXJmYWNlIFN0cnVjdHVyZWRFcnJvckluZm8ge1xuICAvKiogSHVtYW4tcmVhZGFibGUgZXJyb3IgbWVzc2FnZSAoYWx3YXlzIHByZXNlbnQpLiAqL1xuICBtZXNzYWdlOiBzdHJpbmc7XG4gIC8qKiBFcnJvciBjbGFzcyBuYW1lIHdoZW4gYXZhaWxhYmxlIChlLmcuICdJbnB1dFZhbGlkYXRpb25FcnJvcicsICdUeXBlRXJyb3InKS4gKi9cbiAgbmFtZT86IHN0cmluZztcbiAgLyoqIEZpZWxkLWxldmVsIHZhbGlkYXRpb24gaXNzdWVzIChwcmVzZW50IGZvciBJbnB1dFZhbGlkYXRpb25FcnJvcikuICovXG4gIGlzc3Vlcz86IFZhbGlkYXRpb25Jc3N1ZVtdO1xuICAvKiogTWFjaGluZS1yZWFkYWJsZSBlcnJvciBjb2RlIGlmIHRoZSBlcnJvciBjYXJyaWVzIG9uZS4gKi9cbiAgY29kZT86IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSBvcmlnaW5hbCBlcnJvciBvYmplY3QsIGZvciBjb25zdW1lcnMgdGhhdCBuZWVkIGZ1bGwgYWNjZXNzLlxuICAgKiBOb3Qgc2FmZSB0byBzZXJpYWxpemUgZGlyZWN0bHkg4oCUIG1heSBjb250YWluIGNpcmN1bGFyIHJlZmVyZW5jZXMsXG4gICAqIHN0YWNrIHRyYWNlcywgb3Igc2Vuc2l0aXZlIGludGVybmFscy4gVXNlIGBmb3JtYXRFcnJvckluZm8oKWAgZm9yXG4gICAqIHNhZmUgc3RyaW5nIG91dHB1dC5cbiAgICovXG4gIHJhdzogdW5rbm93bjtcbn1cblxuLyoqXG4gKiBFeHRyYWN0IHN0cnVjdHVyZWQgZXJyb3IgaW5mbyBmcm9tIGFueSB0aHJvd24gdmFsdWUuXG4gKlxuICogLSBJbnB1dFZhbGlkYXRpb25FcnJvciDihpIgcHJlc2VydmVzIC5pc3N1ZXMgYXJyYXlcbiAqIC0gU3RhbmRhcmQgRXJyb3Ig4oaSIHByZXNlcnZlcyAubmFtZSwgLm1lc3NhZ2VcbiAqIC0gTm9uLUVycm9yIHRocm93biB2YWx1ZXMg4oaSIGNvZXJjZXMgdG8gc3RyaW5nXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBleHRyYWN0RXJyb3JJbmZvKGVycm9yOiB1bmtub3duKTogU3RydWN0dXJlZEVycm9ySW5mbyB7XG4gIGlmIChlcnJvciBpbnN0YW5jZW9mIElucHV0VmFsaWRhdGlvbkVycm9yKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG1lc3NhZ2U6IGVycm9yLm1lc3NhZ2UsXG4gICAgICBuYW1lOiBlcnJvci5uYW1lLFxuICAgICAgaXNzdWVzOiBlcnJvci5pc3N1ZXMubWFwKChpc3N1ZSkgPT4gKHsgLi4uaXNzdWUsIHBhdGg6IFsuLi5pc3N1ZS5wYXRoXSB9KSksXG4gICAgICBjb2RlOiAnSU5QVVRfVkFMSURBVElPTl9FUlJPUicsXG4gICAgICByYXc6IGVycm9yLFxuICAgIH07XG4gIH1cblxuICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgIC8vIEd1YXJkIGFnYWluc3QgYWR2ZXJzYXJpYWwgZXJyb3JzIHdpdGggdGhyb3dpbmcgZ2V0dGVycyBvbiAubWVzc2FnZS8ubmFtZS8uY29kZVxuICAgIHRyeSB7XG4gICAgICBjb25zdCBpbmZvOiBTdHJ1Y3R1cmVkRXJyb3JJbmZvID0ge1xuICAgICAgICBtZXNzYWdlOiBlcnJvci5tZXNzYWdlLFxuICAgICAgICBuYW1lOiBlcnJvci5uYW1lLFxuICAgICAgICByYXc6IGVycm9yLFxuICAgICAgfTtcblxuICAgICAgLy8gUHJlc2VydmUgLmNvZGUgaWYgcHJlc2VudCAoY29tbW9uIE5vZGUuanMgcGF0dGVybiwgZS5nLiBFTk9FTlQpXG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBtYXliZUNvZGUgPSAoZXJyb3IgYXMgdW5rbm93biBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikuY29kZTtcbiAgICAgICAgaWYgKHR5cGVvZiBtYXliZUNvZGUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgaW5mby5jb2RlID0gbWF5YmVDb2RlO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgLyogLmNvZGUgYWNjZXNzb3IgdGhyZXcg4oCUIHNraXAgaXQgKi9cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGluZm87XG4gICAgfSBjYXRjaCB7XG4gICAgICAvLyAubWVzc2FnZSBvciAubmFtZSBnZXR0ZXIgdGhyZXcg4oCUIGZhbGwgdGhyb3VnaCB0byBzdHJpbmcgY29lcmNpb25cbiAgICB9XG4gIH1cblxuICAvLyBOb24tRXJyb3IgdGhyb3duIHZhbHVlIChzdHJpbmcsIG51bWJlciwgb2JqZWN0LCBldGMuKVxuICB0cnkge1xuICAgIHJldHVybiB7XG4gICAgICBtZXNzYWdlOiBTdHJpbmcoZXJyb3IpLFxuICAgICAgcmF3OiBlcnJvcixcbiAgICB9O1xuICB9IGNhdGNoIHtcbiAgICAvLyBTdHJpbmcoKSBmYWlsZWQgKGUuZy4gbnVsbC1wcm90b3R5cGUgb2JqZWN0LCB0aHJvd2luZyAudG9TdHJpbmcoKSlcbiAgICByZXR1cm4ge1xuICAgICAgbWVzc2FnZTogJ1t1bnNlcmlhbGl6YWJsZSBlcnJvcl0nLFxuICAgICAgcmF3OiBlcnJvcixcbiAgICB9O1xuICB9XG59XG5cbi8qKlxuICogRm9ybWF0IGEgU3RydWN0dXJlZEVycm9ySW5mbyBiYWNrIHRvIGEgaHVtYW4tcmVhZGFibGUgc3RyaW5nLlxuICogVXNlIHRoaXMgYXQgcmVuZGVyaW5nIGJvdW5kYXJpZXMgKG5hcnJhdGl2ZSBvdXRwdXQsIGxvZyBsaW5lcykuXG4gKiBJbmNsdWRlcyBmaWVsZC1sZXZlbCBkZXRhaWxzIHdoZW4gaXNzdWVzIGFyZSBwcmVzZW50LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0RXJyb3JJbmZvKGluZm86IFN0cnVjdHVyZWRFcnJvckluZm8pOiBzdHJpbmcge1xuICBpZiAoIWluZm8uaXNzdWVzIHx8IGluZm8uaXNzdWVzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBpbmZvLm1lc3NhZ2U7XG4gIH1cblxuICBjb25zdCBpc3N1ZUxpbmVzID0gaW5mby5pc3N1ZXMubWFwKChpc3N1ZSkgPT4ge1xuICAgIGNvbnN0IHBhdGggPSBpc3N1ZS5wYXRoLmxlbmd0aCA+IDAgPyBpc3N1ZS5wYXRoLmpvaW4oJy4nKSA6ICcocm9vdCknO1xuICAgIHJldHVybiBgICAtICR7cGF0aH06ICR7aXNzdWUubWVzc2FnZX1gO1xuICB9KTtcblxuICByZXR1cm4gYCR7aW5mby5tZXNzYWdlfVxcbiR7aXNzdWVMaW5lcy5qb2luKCdcXG4nKX1gO1xufVxuIl19