footprintjs 9.37.0 → 9.39.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CLAUDE.md +4 -4
- package/dist/esm/index.d.ts +1 -1
- package/dist/esm/index.js +1 -1
- package/dist/esm/lib/builder/FlowChartBuilder.d.ts +41 -0
- package/dist/esm/lib/builder/FlowChartBuilder.js +93 -7
- package/dist/esm/lib/engine/handlers/ChildrenExecutor.d.ts +1 -1
- package/dist/esm/lib/engine/handlers/ChildrenExecutor.js +10 -5
- package/dist/esm/lib/engine/handlers/DeciderHandler.js +2 -2
- package/dist/esm/lib/engine/handlers/ResumeEntry.js +9 -40
- package/dist/esm/lib/engine/handlers/SelectorHandler.js +2 -2
- package/dist/esm/lib/engine/handlers/SubflowExecutor.js +4 -2
- package/dist/esm/lib/engine/index.d.ts +3 -3
- package/dist/esm/lib/engine/index.js +2 -2
- package/dist/esm/lib/engine/narrative/CombinedNarrativeRecorder.d.ts +1 -1
- package/dist/esm/lib/engine/narrative/FlowRecorderDispatcher.d.ts +2 -1
- package/dist/esm/lib/engine/narrative/FlowRecorderDispatcher.js +16 -2
- package/dist/esm/lib/engine/narrative/types.d.ts +37 -1
- package/dist/esm/lib/engine/narrative/types.js +1 -1
- package/dist/esm/lib/engine/traversal/FlowchartTraverser.js +5 -8
- package/dist/esm/lib/{engine/errors → errors}/errorInfo.d.ts +1 -1
- package/dist/{lib/engine → esm/lib}/errors/errorInfo.js +5 -10
- package/dist/esm/lib/memory/StageContext.d.ts +12 -4
- package/dist/esm/lib/memory/StageContext.js +16 -4
- package/dist/esm/lib/memory/commitLogUtils.d.ts +32 -6
- package/dist/esm/lib/memory/commitLogUtils.js +51 -6
- package/dist/esm/lib/memory/types.d.ts +25 -2
- package/dist/esm/lib/memory/types.js +1 -1
- package/dist/esm/lib/pause/record.d.ts +65 -0
- package/dist/esm/lib/pause/record.js +139 -0
- package/dist/esm/lib/pause/types.d.ts +13 -18
- package/dist/esm/lib/pause/types.js +7 -15
- package/dist/esm/lib/recorder/CompositeRecorder.d.ts +1 -1
- package/dist/esm/lib/recorder/CompositeRecorder.js +1 -1
- package/dist/esm/lib/recorder/hooks.d.ts +24 -1
- package/dist/esm/lib/recorder/hooks.js +25 -1
- package/dist/esm/lib/runner/DeferredObserverTier.d.ts +8 -3
- package/dist/esm/lib/runner/DeferredObserverTier.js +24 -19
- package/dist/esm/lib/runner/FlowChartExecutor.d.ts +6 -3
- package/dist/esm/lib/runner/FlowChartExecutor.js +14 -32
- package/dist/esm/lib/scope/ScopeFacade.js +4 -8
- package/dist/esm/lib/scope/recorders/DebugRecorder.js +12 -2
- package/dist/esm/lib/scope/types.d.ts +14 -1
- package/dist/esm/lib/scope/types.js +1 -1
- package/dist/esm/lib/time-travel/commitStops.d.ts +12 -8
- package/dist/esm/lib/time-travel/commitStops.js +58 -32
- package/dist/esm/lib/time-travel/tagStops.js +5 -4
- package/dist/esm/lib/time-travel/timeTravel.js +2 -2
- package/dist/esm/lib/time-travel/types.d.ts +5 -1
- package/dist/esm/lib/time-travel/types.js +1 -1
- package/dist/esm/trace.d.ts +2 -1
- package/dist/esm/trace.js +6 -2
- package/dist/index.js +1 -1
- package/dist/lib/builder/FlowChartBuilder.js +93 -7
- package/dist/lib/engine/handlers/ChildrenExecutor.js +10 -5
- package/dist/lib/engine/handlers/DeciderHandler.js +2 -2
- package/dist/lib/engine/handlers/ResumeEntry.js +9 -40
- package/dist/lib/engine/handlers/SelectorHandler.js +2 -2
- package/dist/lib/engine/handlers/SubflowExecutor.js +4 -2
- package/dist/lib/engine/index.js +2 -2
- package/dist/lib/engine/narrative/FlowRecorderDispatcher.js +16 -2
- package/dist/lib/engine/narrative/types.js +1 -1
- package/dist/lib/engine/traversal/FlowchartTraverser.js +5 -8
- package/dist/lib/errors/errorInfo.js +91 -0
- package/dist/lib/memory/StageContext.js +16 -4
- package/dist/lib/memory/commitLogUtils.js +54 -7
- package/dist/lib/memory/types.js +1 -1
- package/dist/lib/pause/record.js +146 -0
- package/dist/lib/pause/types.js +7 -15
- package/dist/lib/recorder/CompositeRecorder.js +1 -1
- package/dist/lib/recorder/hooks.js +27 -2
- package/dist/lib/runner/DeferredObserverTier.js +23 -18
- package/dist/lib/runner/FlowChartExecutor.js +13 -31
- package/dist/lib/scope/ScopeFacade.js +3 -7
- package/dist/lib/scope/recorders/DebugRecorder.js +12 -2
- package/dist/lib/scope/types.js +1 -1
- package/dist/lib/time-travel/commitStops.js +57 -31
- package/dist/lib/time-travel/tagStops.js +5 -4
- package/dist/lib/time-travel/timeTravel.js +2 -2
- package/dist/lib/time-travel/types.js +1 -1
- package/dist/trace.js +8 -3
- package/dist/types/index.d.ts +1 -1
- package/dist/types/lib/builder/FlowChartBuilder.d.ts +41 -0
- package/dist/types/lib/engine/handlers/ChildrenExecutor.d.ts +1 -1
- package/dist/types/lib/engine/index.d.ts +3 -3
- package/dist/types/lib/engine/narrative/CombinedNarrativeRecorder.d.ts +1 -1
- package/dist/types/lib/engine/narrative/FlowRecorderDispatcher.d.ts +2 -1
- package/dist/types/lib/engine/narrative/types.d.ts +37 -1
- package/dist/types/lib/{engine/errors → errors}/errorInfo.d.ts +1 -1
- package/dist/types/lib/memory/StageContext.d.ts +12 -4
- package/dist/types/lib/memory/commitLogUtils.d.ts +32 -6
- package/dist/types/lib/memory/types.d.ts +25 -2
- package/dist/types/lib/pause/record.d.ts +65 -0
- package/dist/types/lib/pause/types.d.ts +13 -18
- package/dist/types/lib/recorder/CompositeRecorder.d.ts +1 -1
- package/dist/types/lib/recorder/hooks.d.ts +24 -1
- package/dist/types/lib/runner/DeferredObserverTier.d.ts +8 -3
- package/dist/types/lib/runner/FlowChartExecutor.d.ts +6 -3
- package/dist/types/lib/scope/types.d.ts +14 -1
- package/dist/types/lib/time-travel/commitStops.d.ts +12 -8
- package/dist/types/lib/time-travel/types.d.ts +5 -1
- package/dist/types/trace.d.ts +2 -1
- package/package.json +1 -1
- package/dist/esm/lib/engine/errors/errorInfo.js +0 -86
- package/dist/esm/lib/engine/errors/index.d.ts +0 -2
- package/dist/esm/lib/engine/errors/index.js +0 -2
- package/dist/lib/engine/errors/index.js +0 -7
- package/dist/types/lib/engine/errors/index.d.ts +0 -2
package/CLAUDE.md
CHANGED
|
@@ -19,7 +19,7 @@ Entry points: `footprintjs` (public API) · `/recorders` (factories) · `/trace`
|
|
|
19
19
|
| slice/ | variable-first backward slicing (triage query layer): sliceForKey (anchor at last writer → causalChain) + arrayProvenance/elementProvenance (append-fold element births — the agent mega-key fix) + KeysReadSource strategies. Pure post-hoc queries; imports memory/ ONLY (see src/lib/slice/README.md) |
|
|
20
20
|
| time-travel/ | the READER'S cursor over a finished trace (9.17.0): `timeTravel()` stops/moves/marks/`drill()`, `stateAt()` fold + honesty basis, `TimeTravelStrategy<TMeta>` seam (one shipped: `commitStops`). 9.18.0 composer's side: axis.ts (`splitAxis` = the ONE guard of the `[start,…stages,end]` contract; `filterStops` = filter + re-partition + `Stop.meta` vocabulary + `Stop.prologue` on an absorbing start — a FLAG, deliberately not a 5th StopKind), bundles.ts (per-bundle narrowing of `unknown[]` rows → index-holding GAPS in `FoldedState.skipped`), chain.ts (`timeTravel([paused, resumed])`: commit indices stay RUN-LOCAL + `Stop.sourceIdx`; refused unless execution indices are monotonic across legs and no id repeats). Read-time only — never a second live cursor. Imports memory/ + `engine/runtimeStageId` (see src/lib/time-travel/README.md) |
|
|
21
21
|
| pause/ | PauseSignal / FlowchartCheckpoint types + `interrupt(scope, payload)` (throws InterruptSignal; converted to PauseSignal at the StageRunner boundary, `pausedBy:'interrupt'`) |
|
|
22
|
-
| engine/ | FlowchartTraverser + handlers/; narrative/ = the whole FlowRecorder channel (dispatcher + 9 strategies), not just text; branchSegment.ts = the ONE owner of the generated-segment grammar (`<stageId>~<index>`, marker `~` RESERVED); `executeStage` (:720) = the ONE funnel every stage fn passes through — and therefore the ONE owner of the declarative `retry` loop; `handlers/ResumeEntry.ts` = the ONE owner of a resume's ONE-SHOT re-entry (M2, 9.28.0: start + one hop per subflow on the pause path, each level's dispatcher continuation read from the chart, waiting sibling pauses queued at their fan-out) |
|
|
22
|
+
| engine/ | FlowchartTraverser + handlers/; narrative/ = the whole FlowRecorder channel (dispatcher + 9 strategies), not just text; `lib/ids/branchSegment.ts` (moved to the `ids/` leaf in 9.37.0) = the ONE owner of the generated-segment grammar (`<stageId>~<index>`, marker `~` RESERVED); `executeStage` (:720) = the ONE funnel every stage fn passes through — and therefore the ONE owner of the declarative `retry` loop; `handlers/ResumeEntry.ts` = the ONE owner of a resume's ONE-SHOT re-entry (M2, 9.28.0: start + one hop per subflow on the pause path, each level's dispatcher continuation read from the chart, waiting sibling pauses queued at their fan-out) |
|
|
23
23
|
| runner/ | FlowChartExecutor wiring (runtime, recorders, pause/resume, snapshot, DeferredObserverTier). RunContext.ts is a fluent run builder, NOT the threaded per-run context |
|
|
24
24
|
| observer-queue/ | pure deferred-delivery pipeline (engine imports IT, never reverse) |
|
|
25
25
|
| contract/, detach/ | I/O schema + OpenAPI; fire-and-forget child charts (drivers passed explicitly) |
|
|
@@ -36,7 +36,7 @@ Entry points: `footprintjs` (public API) · `/recorders` (factories) · `/trace`
|
|
|
36
36
|
|
|
37
37
|
**Retry (9.15.0):** `StageNode.retry` is a POLICY on a stage, not a kind — no new node type, no `computeNodeType` edit. The loop lives in `FlowchartTraverser.executeStage` (:720), so linear/streaming/pausable/decider/selector/fork-child/subflow-inner all get it from one implementation. A failed non-final attempt calls `StageContext.discardStaged()` (buffer + stateView + _stageWrites/_stageReads + _provenanceReads + _untrackedSources); the final attempt is today's law untouched. PauseSignal and abort are NEVER retried. One runtimeStageId + one CommitBundle per stage regardless of attempts; retries do not consume `maxIterations`.
|
|
38
38
|
|
|
39
|
-
**Declared tags (9.21.0):** `StageNode.tags?: readonly string[]` is a NAME on a stage, declared at build time — POLICY-like (the retry precedent): no node type, no `computeNodeType` edit, no type-union site, and
|
|
39
|
+
**Declared tags (9.21.0):** `StageNode.tags?: readonly string[]` is a NAME on a stage, declared at build time — POLICY-like (the retry precedent): no node type, no `computeNodeType` edit, no type-union site, and the one prefixer (`engine/graph/prefixNodeTree.ts`, 9.37.0) spreads `{ ...node }` so it rides subflow prefixing untouched. ONE landing site `FlowChartBuilder.ts · applyTags` (twin of `applyRetryPolicy`) serves the `.tag(...names)` cursor modifier and every `options.tags` site; refuses empty/non-string/`~`/duplicate/double-declare at build. Stamp: `FlowchartTraverser.executeNodeStep` sets `context.tags = node.tags` beside `runtimeStageId` (unconditionally — a re-used context must not keep a prior node's names); `StageContext.commit` spreads `tagsFragment()` beside `untrackedSourcesFragment()` on BOTH commit paths and RELEASES it, so a double-commit path (fork child fan-out repeat, mount exit) records it once — absent when empty (`CommitBundle.tags?`; pinned byte-identical to 9.20.0 by test/lib/engine/scenario/declared-tags-byte-identity.test.ts). NOT inherited by createNext/createChild; the one synthetic node that could lose it is `FlowChartExecutor.resume`'s stand-in for the paused stage — built by `FlowChartExecutor · standInFor` from the paused node ITSELF (fn swapped), so it keeps the tags on both re-entries; it runs ONCE — a later visit of the paused id runs the chart's real node, which carries its own tags. The spec carries `tags` as-is (Map advertises the vocabulary; `RuntimeStructureManager.stageNodeToStructure` copies it for run-time-resolved nodes). Reader: `time-travel/tagStops.ts` = `filterStops(commitStops(...), any-of over log[stop.commitIdx].tags, meta = the array)`, exported from `/trace`. Never a runtime `$tag()` — a value would ride past every redaction point. Design: docs/design/2026-09-declared-tags.md.
|
|
40
40
|
|
|
41
41
|
**Event order (code-verified; older docs had 3/4 swapped):** onStageStart → onRead/onWrite (live, PRE-commit) → **onStageEnd (StageRunner.ts:81) → onCommit (StageContext.ts:587)** → FlowRecorder onDecision/onFork/onSelected/onSubflowEntry → onStageExecuted (uniform, with stageType). Error path: commit STILL happens (FlowchartTraverser.ts:1088) before onError+rethrow — a failing stage's writes land. `interrupt()` rides the ERROR path's shape, not the pausable one: the stage function threw, so onStageEnd does NOT fire (the `addPausableFunction` pause DOES fire it — there the function returned normally).
|
|
42
42
|
|
|
@@ -55,8 +55,8 @@ Entry points: `footprintjs` (public API) · `/recorders` (factories) · `/trace`
|
|
|
55
55
|
## Change-impact map
|
|
56
56
|
- **Trace verbs** (`set|merge|append|delete`, memory/types.ts:42) → ONE law, `memory/verbs.ts` (L1) — F2 deleted the three replicas. `applyVerb` is the ONLY function with an arm per verb (a fifth verb in the union stops compiling there; `TRAITS` — `isTotal` / `recordsTail` — says what a verb IS, pinned against the step), `placeVerb` puts its value or removes the key (`ABSENT`), and two loops fold it: `foldRows` folds ONE bundle's rows into a state with the clone DISCIPLINE as a parameter (`'private'` = the PUBLIC `applySmartMerge`, which keeps its 9.28.0 contract: base deep-cloned, fully detached result — 9.29.0; `'pathCopy'` = the engine's `nextGeneration` — live commit + redacted mirror — and the folds' `applySmartMergeInto` — `stateAt`, `EventLog.materialise`; `'byReference'` = `dryFold`, the admitted record's comparison fold — 9.30.0), and `foldKey` folds ONE path's rows across a log — `commitLogUtils · commitValueAt` (anchored at the last total row) and `slice/elementProvenance · arrayProvenance` (an OBSERVER of that fold: it keeps the births and has no verb switch); causalChain/findLastWriter only match paths. A bundle's merge delta is detached ONCE per bundle (`RecordedPayload`): `deepSmartMerge` dedups an array union BY REFERENCE, so the merge rows of one bundle must see the same objects (a per-row clone made `commitValueAt` double the elements — the 9.29.0 reader bug, fixed here); `foldKey` narrows that copy to its one path. **An unknown verb is REFUSED** (`UnknownVerbError`, public on `/trace`; R2) by `foldRows` (so `applySmartMerge`), `commitValueAt`, `arrayProvenance` — they used to fold it as a `merge`; `time-travel/bundles · bundleRefusal` asks the same `isVerb` and makes it a GAP instead. Pinned: the three old replicas live on as the CONTROL in test/lib/memory/property/verb-law-differential.property.test.ts (kept for the packet's lifetime). The delta encoder keeps VOCABULARY only since 9.30.0 (it picks a verb; its values come from `dryFold` of the stage's 'full' rows — `TransactionBuffer · fullRowsValue`; `replayPathVerbs`/`replayFamilyVerbs` deleted). NOT a second loop (9.22.1): `verbs.ts · supersededByNextSet` — the ONE repeated-path skip (CONSECUTIVE same-path `set` rows: only the last is applied), asked by `foldRows` before its step; its commit-side twin is the last-materialised-path memo in `toChangeOnlyPayload`. Rows are never dropped from the log; a non-consecutive skip is WRONG (a descendant op in between coerces/shells the container) — pinned by test/lib/memory/scenario/repeated-path-byte-identity.test.ts. Since 9.23.0 the clone in that memo loop (and every `structuredClone` in `toDeltaPayload`) is THE clone — the patch trees hold references until commit; no verb switch was touched.
|
|
57
57
|
- **StageContext.commit / dials** → ONE owner since 9.35.0 (F5): `memory/runPolicy.ts` — a frozen `RunPolicy` (the four dials + the `RedactionRule` + the mirror flag) built ONCE by `FlowChartExecutor · createTraverser` (run AND resume), handed to `ExecutionRuntime`, held BY REFERENCE by every `StageContext` (`inheritRun` in createNext/createChild) and passed by `SubflowExecutor · executeSubflow` to the nested runtime BEFORE the seed. A fifth dial = the policy type + its consumer. The old per-dial `use*`/`get*` and `enableRedactedMirror` were removed in 9.36.0 (no compat shims — owner ruling). `commit()`'s FIRST act (9.23.0) is `materialiseWrites` — the `writeTracking` retained form is taken there, once per key, from `_pendingWrites` (bare references + the write-time verdict); anything that reads `_stageWrites` goes through `retainedWrites()` (a non-consuming fold, so a mid-run snapshot is honest), and `discardStaged` drops the pending map with the rest.
|
|
58
|
-
- **runtimeStageId format** (`#`/`/` delimiters) →
|
|
59
|
-
- **Subflow id prefixing** →
|
|
58
|
+
- **runtimeStageId format** (`#`/`/` delimiters) → ONE grammar owner since 9.37.0 (F7): `src/lib/ids/` (L0 leaf: `runtimeStageId.ts` — `parseRuntimeStageId`, `isExecutionKey`, `stageIdOf`, `subflowPathOf`, `refuseReservedId`; `branchSegment.ts` — the `~` grammar). Every parser (ScopeFacade subflow path, subflowResults dual-keying, checkpoint lean-filter, narrative buffering, store keys) calls it; none re-derives the grammar. R5: every id door (22 at build, plus the run-time dynamic-StageNode door) refuses `#` and `/`; stage ids may contain `~`. `TraversalContext` has ONE constructor (`engine/traversalContext.ts`); `depth` = subflow nesting read off the runtimeStageId on every stamp. Brands `RuntimeStageId`/`ExecutionIndex`/`CommitIdx` on `/trace` (types only).
|
|
59
|
+
- **Subflow id prefixing** → ONE prefixer since 9.37.0: `engine/graph/prefixNodeTree.ts`, used by the builder AND the traverser (eager, lazy and `parallelForEach` mounts — lazy/branch roots were unprefixed before 9.37.0, so branch ids collided); change it + stageMap key composition + resume drilling. test/lib/engine/branch-segment-prefixer-equivalence.test.ts stays as a guard.
|
|
60
60
|
- **Checkpoint shape** → `FlowChartExecutor · buildPauseCheckpoint` ↔ `FlowChartExecutor · resume` (validation) ↔ `checkpointSanitize.ts` ↔ `ResumeEntry.plan` (the path's mounts + captures + dispatcher continuations, the `pendingPauses` queue; refused up front when unwalkable, ambiguous, or a pending record is not a sibling) ↔ `SubflowExecutor · executeSubflow` resume hop (seed from the capture in place of the mapper's values — the mapper still runs, for the args — FIRST entry only) ↔ `ChildrenExecutor · raisePauses` (fills `pendingPauses`). 9.28.0 adds ONE optional field, `pendingPauses` (present only when parallel siblings wait); `continuationStageId` is a record, no longer read. Pinned: a 9.27.0 checkpoint resumes, test/lib/pause/resume-real-chart-9.27.0-checkpoints.test.ts.
|
|
61
61
|
- **Committed-state writers** (copy-on-write, 9.29.0) → anything that writes into `SharedMemory`'s state, a fold's working copy or the buffer's working copy must copy before it writes: `pathOps · ownSpine` for the containers on the path, `ownedRootOf` for the root, `own`/`adopt` for what it created. An in-place edit of a container it did not create edits every generation sharing it — the counted guard stays green while the generations property fails. A new READ path through `TransactionBuffer` goes through `get` (private after the first write) unless it only compares (`peek`); a read the working copy cannot answer is served from LIVE state (`StageContext · readState`, as on 9.28.0) after `TransactionBuffer · detachBase` gives the diff base a private copy at that path — a private copy of the value handed out instead would change live state wherever 9.28.0 let an in-place edit in (a fork child's read of a parent key). `TransactionBuffer · merge` privatises its base first: `deepSmartMerge` dedups arrays BY REFERENCE, so the identity of the base is part of the bytes.
|
|
62
62
|
- **Redaction** (9.19.0) has ONE owner: `memory/redaction.ts` `RedactionRule` (verdict per user-level path: `clear | whole | fields`), installed on the root StageContext by `ExecutionRuntime.useRedaction` and carried on the run's `RunPolicy` with the four dials (F5). `StageContext.stageWrite` is the ONE write funnel (facade writes, subflow seed, outputMapper merge-back, resume re-seed) and `getValue` retention asks the same rule; the facade asks it for recorder payloads; `SubflowExecutor` for the narrated seed (`retainRecord`). The LAW: a policy covers everything retained or served (log both encodings, mirror, stageReads/stageWrites, narrative, subflow seed + merge-back) and NEVER the live heap or the resume checkpoint. `emitPatterns` is the one separate scrub (emit channel). Two placeholders, historical: log/mirror `'REDACTED'`, scope-tier `'[REDACTED]'`.
|
package/dist/esm/index.d.ts
CHANGED
|
@@ -99,7 +99,7 @@ export { hasEmitRecorderMethods, hasFlowRecorderMethods, hasRecorderMethods, isF
|
|
|
99
99
|
*/
|
|
100
100
|
export type { EmitEvent, EmitRecorder } from './lib/recorder/index.js';
|
|
101
101
|
/** @category Observe — Flow */
|
|
102
|
-
export type { FlowBreakEvent, FlowDecisionEvent, FlowErrorEvent, FlowForkEvent, FlowLoopEvent, FlowNextEvent, FlowRecorder, FlowRunEvent, FlowRunFailedEvent, FlowSelectedEvent, FlowStageEvent, FlowStageRetryEvent, FlowSubflowEvent, FlowSubflowRegisteredEvent, ResumeLink, TraversalContext, } from './lib/engine/index.js';
|
|
102
|
+
export type { FlowBreakEvent, FlowDecisionEvent, FlowErrorEvent, FlowForkEvent, FlowLoopEvent, FlowNextEvent, FlowRecorder, FlowRunEvent, FlowRunFailedEvent, FlowSelectedEvent, FlowStageEvent, FlowStageRetryEvent, FlowSubflowEvent, FlowSubflowRegisteredEvent, FlowThrottledEvent, ResumeLink, TraversalContext, } from './lib/engine/index.js';
|
|
103
103
|
/** @category Observe — Flow */
|
|
104
104
|
export type { CombinedNarrativeEntry } from './lib/engine/index.js';
|
|
105
105
|
/**
|
package/dist/esm/index.js
CHANGED
|
@@ -86,4 +86,4 @@ export { disableDevMode, enableDevMode, isDevMode } from './lib/devMode.js';
|
|
|
86
86
|
// A run's record as JSON without the engine's recursion limit (9.26.0): the
|
|
87
87
|
// same bytes JSON.stringify emits, for a deep `next` chain it cannot encode.
|
|
88
88
|
export { stringifySnapshot } from './lib/runner/stringifySnapshot.js';
|
|
89
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7O0dBY0c7QUFTSCw0QkFBNEI7QUFDNUIsT0FBTyxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBNkJ4Riw0QkFBNEI7QUFDNUIsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBb0IzQyxtQ0FBbUM7QUFDbkMsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQWtCdkQsb0JBQW9CO0FBQ3BCLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRTFELG9CQUFvQjtBQUNwQixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFxQm5ELCtCQUErQjtBQUMvQixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFFdEQsK0JBQStCO0FBQy9CLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUVyRCxvQ0FBb0M7QUFDcEMsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFtQzVELHFFQUFxRTtBQUNyRSxPQUFPLEVBQ0wsc0JBQXNCLEVBQ3RCLHNCQUFzQixFQUN0QixrQkFBa0IsRUFDbEIsV0FBVyxHQUNaLE1BQU0seUJBQXlCLENBQUM7QUFrRGpDLCtCQUErQjtBQUMvQixPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUs5RCwrQkFBK0I7QUFDL0IsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFN0QsK0JBQStCO0FBQy9CLE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRXRFLCtCQUErQjtBQUMvQixPQUFPLEVBQUUsOEJBQThCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUV2RSwrQkFBK0I7QUFDL0IsT0FBTyxFQUFFLGdDQUFnQyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFekUsK0JBQStCO0FBQy9CLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRWpFLCtCQUErQjtBQUMvQixPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUV0RSwrQkFBK0I7QUFDL0IsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFcEUsK0JBQStCO0FBQy9CLE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBeUJ0RSx1Q0FBdUM7QUFDdkMsT0FBTyxFQUFFLGtCQUFrQixFQUFFLGdCQUFnQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFN0UsK0VBQStFO0FBQy9FLDRFQUE0RTtBQUM1RSwrRUFBK0U7QUFFL0UsOEJBQThCO0FBQzlCLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBb0I1RCw2QkFBNkI7QUFDN0IsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBaUVqRCxzQ0FBc0M7QUFDdEMsT0FBTyxFQUFFLFlBQVksRUFBRSxhQUFhLEVBQUUsS0FBSyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFM0Usc0NBQXNDO0FBQ3RDLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxxQkFBcUIsRUFBRSxlQUFlLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQVNyRyxnQ0FBZ0M7QUFDaEMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLGVBQWUsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRTFFLCtFQUErRTtBQUMvRSxpREFBaUQ7QUFDakQsK0VBQStFO0FBRS9FOzs7Ozs7Ozs7OztHQVdHO0FBQ0gsT0FBTyxFQUFFLGNBQWMsRUFBRSxhQUFhLEVBQUUsU0FBUyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFNUUsaUZBQWlGO0FBQ2pGLDRFQUE0RTtBQUM1RSxzREFBc0Q7QUFDdEQsNEVBQTRFO0FBQzVFLDZFQUE2RTtBQUM3RSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogRm9vdFByaW50IOKAlCBQdWJsaWMgQVBJICh2MylcbiAqXG4gKiBUaGUgZmxvd2NoYXJ0IHBhdHRlcm4gZm9yIGJhY2tlbmQgY29kZS5cbiAqIEJ1aWxkIOKGkiBSdW4g4oaSIE9ic2VydmUuXG4gKlxuICogKipUaHJlZSBpbXBvcnQgcGF0aHM6KipcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyBmbG93Q2hhcnQsIGRlY2lkZSwgbmFycmF0aXZlIH0gZnJvbSAnZm9vdHByaW50anMnOyAgICAgICAgICAgLy8gbWFpbiDigJQgc3RhcnQgaGVyZVxuICogaW1wb3J0IHsgbWV0cmljcywgZGVidWcsIG1hbmlmZXN0IH0gICAgIGZyb20gJ2Zvb3RwcmludGpzL3JlY29yZGVycyc7IC8vIHJlY29yZGVyIGZhY3Rvcmllc1xuICogaW1wb3J0IHsgU2hhcmVkTWVtb3J5LCBTdGFnZUNvbnRleHQgfSAgIGZyb20gJ2Zvb3RwcmludGpzL2FkdmFuY2VkJzsgIC8vIGludGVybmFsc1xuICogYGBgXG4gKlxuICogQG1vZHVsZVxuICovXG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIFF1aWNrIFN0YXJ0IOKAlCBFdmVyeXRoaW5nIHlvdSBuZWVkIGZvciA5MCUgb2YgdXNlIGNhc2VzXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKiBAY2F0ZWdvcnkgUXVpY2sgU3RhcnQgKi9cbmV4cG9ydCB0eXBlIHsgRmxvd0NoYXJ0LCBTdGFnZUZ1bmN0aW9uIGFzIFN0YWdlSGFuZGxlciwgU3RyZWFtSGFuZGxlcnMgfSBmcm9tICcuL2xpYi9idWlsZGVyL2luZGV4LmpzJztcblxuLyoqIEBjYXRlZ29yeSBRdWljayBTdGFydCAqL1xuZXhwb3J0IHsgZmxvd0NoYXJ0LCBGbG93Q2hhcnRCdWlsZGVyLCBmbG93Q2hhcnRTZWxlY3RvciB9IGZyb20gJy4vbGliL2J1aWxkZXIvaW5kZXguanMnO1xuXG4vKipcbiAqIEBjYXRlZ29yeSBRdWljayBTdGFydFxuICpcbiAqIENvbmZpZyBmb3IgYC5hZGRQYXJhbGxlbEZvckVhY2goKWAg4oCUIG9uZSBicmFuY2ggcGVyIGl0ZW0sIGJyYW5jaCBjb3VudFxuICogZGVjaWRlZCBhdCBydW4gdGltZSBmcm9tIHRoZSBwYXlsb2FkLiBgbWF4QnJhbmNoZXNgIGFuZCBgaW50b2AgYXJlIHJlcXVpcmVkXG4gKiBvbiBwdXJwb3NlIChzZWUgZG9jcy9kZXNpZ24vZXhlY3V0aW9uLWNvbnRyb2wubWQpLlxuICovXG5leHBvcnQgdHlwZSB7IEJyYW5jaENoYXJ0LCBQYXJhbGxlbEZvckVhY2hDb25maWcsIFJldHJ5UG9saWN5IH0gZnJvbSAnLi9saWIvYnVpbGRlci9pbmRleC5qcyc7XG5cbi8qKiBAY2F0ZWdvcnkgUXVpY2sgU3RhcnQg4oCUIGJ1aWxkLXRpbWUgb2JzZXJ2ZXIgKHR3aW4gb2YgRmxvd1JlY29yZGVyKSAqL1xuZXhwb3J0IHR5cGUge1xuICBTdHJ1Y3R1cmVEZWNpZGVyQ29tcGxldGVFdmVudCxcbiAgU3RydWN0dXJlRWRnZUFkZGVkRXZlbnQsXG4gIFN0cnVjdHVyZUVkZ2VLaW5kLFxuICBTdHJ1Y3R1cmVMb29wRWRnZUFkZGVkRXZlbnQsXG4gIFN0cnVjdHVyZVJlY29yZGVyLFxuICBTdHJ1Y3R1cmVTdGFnZUFkZGVkRXZlbnQsXG4gIFN0cnVjdHVyZVN0YWdlVGFnZ2VkRXZlbnQsXG4gIFN0cnVjdHVyZVN1YmZsb3dNb3VudGVkRXZlbnQsXG59IGZyb20gJy4vbGliL2J1aWxkZXIvaW5kZXguanMnO1xuXG4vKiogQGNhdGVnb3J5IFF1aWNrIFN0YXJ0ICovXG5leHBvcnQgdHlwZSB7IFR5cGVkU3RhZ2VGdW5jdGlvbiB9IGZyb20gJy4vbGliL2J1aWxkZXIvdHlwZWRGbG93Q2hhcnQuanMnO1xuXG4vKiogQGNhdGVnb3J5IFF1aWNrIFN0YXJ0ICovXG5leHBvcnQgdHlwZSB7IFNjb3BlTWV0aG9kcywgVHlwZWRTY29wZSB9IGZyb20gJy4vbGliL3JlYWN0aXZlL2luZGV4LmpzJztcblxuLyoqIEBjYXRlZ29yeSBRdWljayBTdGFydCAqL1xuZXhwb3J0IHsgbmFycmF0aXZlIH0gZnJvbSAnLi9yZWNvcmRlcnMuanMnO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBEZWNpc2lvbiBCcmFuY2hpbmcg4oCUIGRlY2lkZSgpIC8gc2VsZWN0KCkgd2l0aCBldmlkZW5jZSBjYXB0dXJlXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKiBAY2F0ZWdvcnkgRGVjaXNpb24gQnJhbmNoaW5nICovXG5leHBvcnQgdHlwZSB7XG4gIERlY2lkZVJ1bGUsXG4gIERlY2lzaW9uRXZpZGVuY2UsXG4gIERlY2lzaW9uUmVzdWx0LFxuICBEZWZhdWx0QnJhbmNoLFxuICBGaWx0ZXJPcHMsXG4gIFJ1bGVFdmlkZW5jZSxcbiAgU2VsZWN0aW9uRXZpZGVuY2UsXG4gIFNlbGVjdGlvblJlc3VsdCxcbiAgV2hlbkNsYXVzZSxcbiAgV2hlcmVGaWx0ZXIsXG59IGZyb20gJy4vbGliL2RlY2lkZS9pbmRleC5qcyc7XG5cbi8qKiBAY2F0ZWdvcnkgRGVjaXNpb24gQnJhbmNoaW5nICovXG5leHBvcnQgeyBkZWNpZGUsIHNlbGVjdCB9IGZyb20gJy4vbGliL2RlY2lkZS9pbmRleC5qcyc7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIFJ1biDigJQgRXhlY3V0ZSBjaGFydHMgYW5kIGNvbGxlY3QgcmVzdWx0c1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKiogQGNhdGVnb3J5IFJ1biAqL1xuZXhwb3J0IHR5cGUgeyBSdW5SZXN1bHQgfSBmcm9tICcuL2xpYi9ydW5uZXIvaW5kZXguanMnO1xuXG4vKiogQGNhdGVnb3J5IFJ1biAqL1xuZXhwb3J0IHR5cGUgeyBGbG93Q2hhcnRFeGVjdXRvck9wdGlvbnMgfSBmcm9tICcuL2xpYi9ydW5uZXIvaW5kZXguanMnO1xuXG4vKipcbiAqIFRoZSBmb3VyIG9ic2VydmFiaWxpdHkgZGlhbHMgYEZsb3dDaGFydEV4ZWN1dG9yT3B0aW9uc2AgaW5oZXJpdHMuXG4gKiBAY2F0ZWdvcnkgUnVuXG4gKi9cbmV4cG9ydCB0eXBlIHsgUnVuRGlhbHMgfSBmcm9tICcuL2xpYi9tZW1vcnkvaW5kZXguanMnO1xuXG4vKiogQGNhdGVnb3J5IFJ1biAqL1xuZXhwb3J0IHsgRmxvd0NoYXJ0RXhlY3V0b3IgfSBmcm9tICcuL2xpYi9ydW5uZXIvaW5kZXguanMnO1xuXG4vKiogQGNhdGVnb3J5IFJ1biAqL1xuZXhwb3J0IHsgUnVuQ29udGV4dCB9IGZyb20gJy4vbGliL3J1bm5lci9pbmRleC5qcyc7XG5cbi8qKiBAY2F0ZWdvcnkgUnVuICovXG5leHBvcnQgdHlwZSB7IENoYXJ0T3BlbkFQSU9wdGlvbnMsIE1DUFRvb2xEZXNjcmlwdGlvbiwgUnVubmFibGVGbG93Q2hhcnQgfSBmcm9tICcuL2xpYi9ydW5uZXIvUnVubmFibGVDaGFydC5qcyc7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIE9ic2VydmUg4oCUIERhdGEgKHNjb3BlIHJlY29yZGVycywgZmlyZSBkdXJpbmcgc3RhZ2UgZXhlY3V0aW9uKVxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKiogQGNhdGVnb3J5IE9ic2VydmUg4oCUIERhdGEgKi9cbmV4cG9ydCB0eXBlIHtcbiAgQ29tbWl0RXZlbnQsXG4gIEVycm9yRXZlbnQsXG4gIFJlYWRFdmVudCxcbiAgUmVkYWN0aW9uUG9saWN5LFxuICBSZWRhY3Rpb25SZXBvcnQsXG4gIFNjb3BlUmVjb3JkZXIsXG4gIFN0YWdlRXZlbnQsXG4gIFdyaXRlRXZlbnQsXG59IGZyb20gJy4vbGliL3Njb3BlL2luZGV4LmpzJztcblxuLyoqIEBjYXRlZ29yeSBPYnNlcnZlIOKAlCBEYXRhICovXG5leHBvcnQgeyBNZXRyaWNSZWNvcmRlciB9IGZyb20gJy4vbGliL3Njb3BlL2luZGV4LmpzJztcblxuLyoqIEBjYXRlZ29yeSBPYnNlcnZlIOKAlCBEYXRhICovXG5leHBvcnQgeyBEZWJ1Z1JlY29yZGVyIH0gZnJvbSAnLi9saWIvc2NvcGUvaW5kZXguanMnO1xuXG4vKiogQGNhdGVnb3J5IE9ic2VydmUg4oCUIE9wZXJhdGlvbiAqL1xuZXhwb3J0IHsgUmVjb3JkZXJPcGVyYXRpb24gfSBmcm9tICcuL2xpYi9yZWNvcmRlci9pbmRleC5qcyc7XG5cbi8qKlxuICogQGNhdGVnb3J5IE9ic2VydmUg4oCUIERlbGl2ZXJ5IHRpZXIgKFJGQy0wMDEgZGVmZXJyZWQgb2JzZXJ2ZXJzKVxuICpcbiAqIEV2ZXJ5IGBhdHRhY2gqUmVjb3JkZXJgIGNhbGwgYWNjZXB0cyBhbiBvcHRpb25zIGJhZzpcbiAqIGBleGVjdXRvci5hdHRhY2hTY29wZVJlY29yZGVyKHJlYywgeyBkZWxpdmVyeTogJ2RlZmVycmVkJyB9KWAgdGFrZXMgdGhlXG4gKiByZWNvcmRlciBPVVQgb2YgdGhlIGVuZ2luZSdzIGhvdCBwYXRoIOKAlCBldmVudHMgYXJlIGNhcHR1cmVkIGludG8gb25lXG4gKiBib3VuZGVkLCB0b3RhbGx5LW9yZGVyZWQgcXVldWUgYW5kIGRlbGl2ZXJlZCBhdCB0aGUgbmV4dCBtaWNyb3Rhc2tcbiAqIGNoZWNrcG9pbnQgKFwib25lIGJlYXQgYmVoaW5kXCIpLiBPbWl0IGBkZWxpdmVyeWAgZm9yIHRoZSBoaXN0b3JpY2FsXG4gKiBzeW5jaHJvbm91cyBjYWxsIChieXRlLWlkZW50aWNhbCB0byBwcmV2aW91cyByZWxlYXNlcykuIEFjY291bnRpbmdcbiAqIHN1cmZhY2VzIG9uIGBzbmFwc2hvdC5vYnNlcnZlclN0YXRzYDsgYGV4ZWN1dG9yLmRyYWluT2JzZXJ2ZXJzKClgIHNldHRsZXNcbiAqIGFzeW5jIGxpc3RlbmVycyBiZWZvcmUgc2h1dGRvd24uIFNlZSBgZG9jcy9ndWlkZXMvb2JzZXJ2ZXJzLWRlZmVycmVkLm1kYC5cbiAqL1xuZXhwb3J0IHR5cGUge1xuICBBdHRhY2hSZWNvcmRlck9wdGlvbnMsXG4gIE9ic2VydmVyRGVsaXZlcnksXG4gIE9ic2VydmVyRHJhaW5SZXN1bHQsXG4gIE9ic2VydmVyU3RhdHMsXG59IGZyb20gJy4vbGliL3J1bm5lci9pbmRleC5qcyc7XG5cbi8qKlxuICogQGNhdGVnb3J5IE9ic2VydmUg4oCUIERlbGl2ZXJ5IHRpZXIgKFJGQy0wMDEgZGVmZXJyZWQgb2JzZXJ2ZXJzKVxuICpcbiAqIGBDYXB0dXJlUG9saWN5YCDigJQgaG93IGEgZGVmZXJyZWQgZXZlbnQncyBwYXlsb2FkIGlzIG1hdGVyaWFsaXplZCBhdFxuICogY2FwdHVyZSB0aW1lIChgJ3N1bW1hcnknYCBkZWZhdWx0IC8gYCdjbG9uZSdgIC8gYCdyZWYnYCkuIGBPdmVyZmxvd1BvbGljeWBcbiAqIOKAlCB3aGF0IGEgc2F0dXJhdGVkIHF1ZXVlIGRvZXMgKGAnZHJvcC1vbGRlc3QnYCBkZWZhdWx0IC8gYCdzYW1wbGUnYCAvXG4gKiBgJ2Jsb2NrJ2ApLiBgRGlzcGF0Y2hlclN0YXRzYCAvIGBMaXN0ZW5lclN0YXRzYCDigJQgdGhlIGFjY291bnRpbmcgc2hhcGVzXG4gKiBlbWJlZGRlZCBpbiBgT2JzZXJ2ZXJTdGF0c2AuIFR5cGVzIG9ubHkg4oCUIHRoZSBvYnNlcnZlci1xdWV1ZSBtb2R1bGVcbiAqIGl0c2VsZiBpcyBpbnRlcm5hbDsgY29uc3VtZXJzIHVzZSB0aGUgYXR0YWNoIG9wdGlvbnMuXG4gKi9cbmV4cG9ydCB0eXBlIHsgQ2FwdHVyZVBvbGljeSwgRGlzcGF0Y2hlclN0YXRzLCBMaXN0ZW5lclN0YXRzLCBPdmVyZmxvd1BvbGljeSB9IGZyb20gJy4vbGliL29ic2VydmVyLXF1ZXVlL2luZGV4LmpzJztcblxuLyoqIEBjYXRlZ29yeSBPYnNlcnZlIOKAlCBDb21iaW5lZCAoYm90aCBkYXRhLWZsb3cgYW5kIGNvbnRyb2wtZmxvdykgKi9cbmV4cG9ydCB0eXBlIHsgQ29tYmluZWRSZWNvcmRlciB9IGZyb20gJy4vbGliL3JlY29yZGVyL2luZGV4LmpzJztcbi8qKiBAY2F0ZWdvcnkgT2JzZXJ2ZSDigJQgQ29tYmluZWQgKGJvdGggZGF0YS1mbG93IGFuZCBjb250cm9sLWZsb3cpICovXG5leHBvcnQge1xuICBoYXNFbWl0UmVjb3JkZXJNZXRob2RzLFxuICBoYXNGbG93UmVjb3JkZXJNZXRob2RzLFxuICBoYXNSZWNvcmRlck1ldGhvZHMsXG4gIGlzRmxvd0V2ZW50LFxufSBmcm9tICcuL2xpYi9yZWNvcmRlci9pbmRleC5qcyc7XG5cbi8qKlxuICogQGNhdGVnb3J5IE9ic2VydmUg4oCUIEVtaXQgKHVzZXItYXV0aG9yZWQgc3RydWN0dXJlZCBldmVudHMpXG4gKlxuICogVGhpcmQgb2JzZXJ2ZXIgY2hhbm5lbCAoYWxvbmdzaWRlIGBTY29wZVJlY29yZGVyYCBhbmQgYEZsb3dSZWNvcmRlcmApLiBDb25zdW1lclxuICogY29kZSBjYWxscyBgc2NvcGUuJGVtaXQobmFtZSwgcGF5bG9hZClgIGZyb20gaW5zaWRlIGEgc3RhZ2U7IGV2ZXJ5IGF0dGFjaGVkXG4gKiBgRW1pdFJlY29yZGVyLm9uRW1pdChldmVudClgIGZpcmVzIHN5bmNocm9ub3VzbHkgd2l0aCBzdGFnZS1jb250ZXh0XG4gKiBlbnJpY2htZW50LiBQYXNzLXRocm91Z2gg4oCUIG5vIGJ1ZmZlcmluZywgemVybyBhbGxvY2F0aW9uIHdoZW4gbm8gcmVjb3JkZXJcbiAqIGlzIGF0dGFjaGVkLlxuICovXG5leHBvcnQgdHlwZSB7IEVtaXRFdmVudCwgRW1pdFJlY29yZGVyIH0gZnJvbSAnLi9saWIvcmVjb3JkZXIvaW5kZXguanMnO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBPYnNlcnZlIOKAlCBGbG93IChGbG93UmVjb3JkZXIsIGZpcmVzIGFmdGVyIHN0YWdlIGV4ZWN1dGlvbilcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqIEBjYXRlZ29yeSBPYnNlcnZlIOKAlCBGbG93ICovXG5leHBvcnQgdHlwZSB7XG4gIEZsb3dCcmVha0V2ZW50LFxuICBGbG93RGVjaXNpb25FdmVudCxcbiAgRmxvd0Vycm9yRXZlbnQsXG4gIEZsb3dGb3JrRXZlbnQsXG4gIEZsb3dMb29wRXZlbnQsXG4gIEZsb3dOZXh0RXZlbnQsXG4gIEZsb3dSZWNvcmRlcixcbiAgRmxvd1J1bkV2ZW50LFxuICBGbG93UnVuRmFpbGVkRXZlbnQsXG4gIEZsb3dTZWxlY3RlZEV2ZW50LFxuICBGbG93U3RhZ2VFdmVudCxcbiAgRmxvd1N0YWdlUmV0cnlFdmVudCxcbiAgRmxvd1N1YmZsb3dFdmVudCxcbiAgRmxvd1N1YmZsb3dSZWdpc3RlcmVkRXZlbnQsXG4gIFJlc3VtZUxpbmssXG4gIFRyYXZlcnNhbENvbnRleHQsXG59IGZyb20gJy4vbGliL2VuZ2luZS9pbmRleC5qcyc7XG5cbi8qKiBAY2F0ZWdvcnkgT2JzZXJ2ZSDigJQgRmxvdyAqL1xuZXhwb3J0IHR5cGUgeyBDb21iaW5lZE5hcnJhdGl2ZUVudHJ5IH0gZnJvbSAnLi9saWIvZW5naW5lL2luZGV4LmpzJztcblxuLyoqXG4gKiBAY2F0ZWdvcnkgT2JzZXJ2ZSDigJQgRmxvd1xuICpcbiAqIGBOYXJyYXRpdmVGb3JtYXR0ZXJgIOKAlCBwbHVnZ2FibGUgZm9ybWF0dGVyIHRoYXQgY29udmVydHMgZXZlbnQgY29udGV4dFxuICogb2JqZWN0cyBpbnRvIHRoZSB0ZXh0IGxpbmVzIG9mIHRoZSBuYXJyYXRpdmUuIFByZWZlciB0aGlzIG5hbWUgaW4gbmV3XG4gKiBjb2RlOyBgTmFycmF0aXZlUmVuZGVyZXJgIGlzIGEgZGVwcmVjYXRlZCBhbGlhcyB0aGF0IHdpbGwgYmUgcmVtb3ZlZCBpblxuICogdGhlIG5leHQgbWFqb3IgcmVsZWFzZS5cbiAqL1xuZXhwb3J0IHR5cGUgeyBOYXJyYXRpdmVGb3JtYXR0ZXIsIE5hcnJhdGl2ZVJlbmRlcmVyIH0gZnJvbSAnLi9saWIvZW5naW5lL2luZGV4LmpzJztcblxuLyoqIEBjYXRlZ29yeSBPYnNlcnZlIOKAlCBGbG93ICovXG5leHBvcnQgeyBOYXJyYXRpdmVGbG93UmVjb3JkZXIgfSBmcm9tICcuL2xpYi9lbmdpbmUvaW5kZXguanMnO1xuXG4vKiogQGNhdGVnb3J5IE9ic2VydmUg4oCUIEZsb3cgKi9cbmV4cG9ydCB0eXBlIHsgTWFuaWZlc3RFbnRyeSB9IGZyb20gJy4vbGliL2VuZ2luZS9pbmRleC5qcyc7XG5cbi8qKiBAY2F0ZWdvcnkgT2JzZXJ2ZSDigJQgRmxvdyAqL1xuZXhwb3J0IHsgTWFuaWZlc3RGbG93UmVjb3JkZXIgfSBmcm9tICcuL2xpYi9lbmdpbmUvaW5kZXguanMnO1xuXG4vKiogQGNhdGVnb3J5IE9ic2VydmUg4oCUIEZsb3cgKi9cbmV4cG9ydCB7IEFkYXB0aXZlTmFycmF0aXZlRmxvd1JlY29yZGVyIH0gZnJvbSAnLi9saWIvZW5naW5lL2luZGV4LmpzJztcblxuLyoqIEBjYXRlZ29yeSBPYnNlcnZlIOKAlCBGbG93ICovXG5leHBvcnQgeyBNaWxlc3RvbmVOYXJyYXRpdmVGbG93UmVjb3JkZXIgfSBmcm9tICcuL2xpYi9lbmdpbmUvaW5kZXguanMnO1xuXG4vKiogQGNhdGVnb3J5IE9ic2VydmUg4oCUIEZsb3cgKi9cbmV4cG9ydCB7IFByb2dyZXNzaXZlTmFycmF0aXZlRmxvd1JlY29yZGVyIH0gZnJvbSAnLi9saWIvZW5naW5lL2luZGV4LmpzJztcblxuLyoqIEBjYXRlZ29yeSBPYnNlcnZlIOKAlCBGbG93ICovXG5leHBvcnQgeyBSTEVOYXJyYXRpdmVGbG93UmVjb3JkZXIgfSBmcm9tICcuL2xpYi9lbmdpbmUvaW5kZXguanMnO1xuXG4vKiogQGNhdGVnb3J5IE9ic2VydmUg4oCUIEZsb3cgKi9cbmV4cG9ydCB7IFNlcGFyYXRlTmFycmF0aXZlRmxvd1JlY29yZGVyIH0gZnJvbSAnLi9saWIvZW5naW5lL2luZGV4LmpzJztcblxuLyoqIEBjYXRlZ29yeSBPYnNlcnZlIOKAlCBGbG93ICovXG5leHBvcnQgeyBTaWxlbnROYXJyYXRpdmVGbG93UmVjb3JkZXIgfSBmcm9tICcuL2xpYi9lbmdpbmUvaW5kZXguanMnO1xuXG4vKiogQGNhdGVnb3J5IE9ic2VydmUg4oCUIEZsb3cgKi9cbmV4cG9ydCB7IFdpbmRvd2VkTmFycmF0aXZlRmxvd1JlY29yZGVyIH0gZnJvbSAnLi9saWIvZW5naW5lL2luZGV4LmpzJztcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gU2VsZi1EZXNjcmliaW5nIOKAlCAuY29udHJhY3QoKSwgdG9PcGVuQVBJKCksIHRvTUNQVG9vbCgpXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKiBAY2F0ZWdvcnkgU2VsZi1EZXNjcmliaW5nICovXG5leHBvcnQgdHlwZSB7XG4gIEZsb3dDaGFydENvbnRyYWN0LFxuICBGbG93Q2hhcnRDb250cmFjdE9wdGlvbnMsXG4gIEpzb25TY2hlbWEsXG4gIE9wZW5BUElPcHRpb25zLFxuICBPcGVuQVBJU3BlYyxcbn0gZnJvbSAnLi9saWIvY29udHJhY3QvaW5kZXguanMnO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBTbmFwc2hvdCAmIENvbXBvc2l0aW9uIOKAlCBTdWJmbG93IG5hdmlnYXRpb24gYW5kIENvbXBvc2FibGVSdW5uZXJcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqIEBjYXRlZ29yeSBTbmFwc2hvdCAmIENvbXBvc2l0aW9uICovXG5leHBvcnQgdHlwZSB7IENvbXBvc2FibGVSdW5uZXIgfSBmcm9tICcuL2xpYi9ydW5uZXIvaW5kZXguanMnO1xuXG4vKiogQGNhdGVnb3J5IFNuYXBzaG90ICYgQ29tcG9zaXRpb24gKi9cbmV4cG9ydCB0eXBlIHsgUmVjb3JkZXJTbmFwc2hvdCwgUnVudGltZVNuYXBzaG90LCBTdWJ0cmVlU25hcHNob3QgfSBmcm9tICcuL2xpYi9ydW5uZXIvaW5kZXguanMnO1xuXG4vKiogQGNhdGVnb3J5IFNuYXBzaG90ICYgQ29tcG9zaXRpb24gKi9cbmV4cG9ydCB7IGdldFN1YnRyZWVTbmFwc2hvdCwgbGlzdFN1YmZsb3dQYXRocyB9IGZyb20gJy4vbGliL3J1bm5lci9pbmRleC5qcyc7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIFNjb3BlUmVjb3JkZXIgQ29tcG9zaXRpb24g4oCUIEJ1bmRsZSBtdWx0aXBsZSByZWNvcmRlcnMgaW50byBkb21haW4gcHJlc2V0c1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKiogQGNhdGVnb3J5IFNjb3BlUmVjb3JkZXIgKi9cbmV4cG9ydCB7IENvbXBvc2l0ZVJlY29yZGVyIH0gZnJvbSAnLi9saWIvcmVjb3JkZXIvaW5kZXguanMnO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBQYXVzZS9SZXN1bWUg4oCUIFNlcmlhbGl6YWJsZSBjaGVja3BvaW50cyBmb3IgbG9uZy1ydW5uaW5nIG9yIGh1bWFuLWluLXRoZS1sb29wIGZsb3dzXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKiBAY2F0ZWdvcnkgUGF1c2UvUmVzdW1lICovXG4vKiogQGNhdGVnb3J5IFBhdXNlL1Jlc3VtZSAqL1xuZXhwb3J0IHR5cGUgeyBGbG93Y2hhcnRDaGVja3BvaW50LCBQYXVzYWJsZUhhbmRsZXIsIFBhdXNlZEV4ZWN1dGlvbiwgUGVuZGluZ1BhdXNlIH0gZnJvbSAnLi9saWIvcGF1c2UvaW5kZXguanMnO1xuXG4vKipcbiAqIEBjYXRlZ29yeSBQYXVzZS9SZXN1bWVcbiAqXG4gKiBgaW50ZXJydXB0KHNjb3BlLCB7IHJlYXNvbiwgZXhwZWN0cz8gfSlgIOKAlCBzdG9wIG1pZC1zdGFnZSB0byBhc2sgYSBxdWVzdGlvbixcbiAqIGFuZCBnZXQgdGhlIGFuc3dlciBiYWNrIGF0IHRoZSBzYW1lIGNhbGwgc2l0ZSB3aGVuIHRoZSBydW4gcmVzdW1lcy4gUmVzdW1lXG4gKiByZS1lbnRlcnMgdGhlIHN0YWdlIGZyb20gaXRzIFRPUCAoc3RhZ2VzIGFyZSBhdG9taWMpLCBzbyBrZWVwIHRoZSBoYWxmXG4gKiBiZWZvcmUgdGhlIGNhbGwgaWRlbXBvdGVudC5cbiAqL1xuZXhwb3J0IHR5cGUgeyBJbnRlcnJ1cHRQYXlsb2FkIH0gZnJvbSAnLi9saWIvcGF1c2UvaW5kZXguanMnO1xuXG4vKiogQGNhdGVnb3J5IFBhdXNlL1Jlc3VtZSAqL1xuZXhwb3J0IHsgaW50ZXJydXB0IH0gZnJvbSAnLi9saWIvcGF1c2UvaW5kZXguanMnO1xuXG4vKiogQGNhdGVnb3J5IFNjb3BlUmVjb3JkZXIgKi9cbmV4cG9ydCB0eXBlIHsgQ29tcG9zaXRlU25hcHNob3QgfSBmcm9tICcuL2xpYi9yZWNvcmRlci9pbmRleC5qcyc7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIENvbmZpZ3VyYXRpb24g4oCUIFR5cGVzIHBhc3NlZCB0byBGbG93Q2hhcnRFeGVjdXRvciBhbmQgcnVuKClcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqIEBjYXRlZ29yeSBDb25maWd1cmF0aW9uICovXG5leHBvcnQgdHlwZSB7IEV4ZWN1dGlvbkVudiwgRXhlY3V0b3JSZXN1bHQsIFBhdXNlZFJlc3VsdCwgUnVuT3B0aW9ucyB9IGZyb20gJy4vbGliL2VuZ2luZS9pbmRleC5qcyc7XG5cbi8qKiBAY2F0ZWdvcnkgQ29uZmlndXJhdGlvbiAqL1xuZXhwb3J0IHR5cGUgeyBTY29wZUZhY3RvcnkgfSBmcm9tICcuL2xpYi9lbmdpbmUvaW5kZXguanMnO1xuXG4vKipcbiAqIEBjYXRlZ29yeSBDb25maWd1cmF0aW9uXG4gKlxuICogUmVhZC10cmFja2luZyBwb2xpY3kgZm9yIGBTdGFnZVNuYXBzaG90LnN0YWdlUmVhZHNgICgjMTQpOlxuICogYCdmdWxsJ2AgKGRlZmF1bHQg4oCUIHBlci1yZWFkIHZhbHVlIGNsb25lLCBoaXN0b3JpY2FsIGJlaGF2aW9yKSAvXG4gKiBgJ3N1bW1hcnknYCAoY2hlYXAgYFJlYWRTdW1tYXJ5TWFya2VyYCBwZXIgcmVhZCkgLyBgJ29mZidgIChubyB0cmFja2luZyxcbiAqIHplcm8gcGVyLXJlYWQgY2xvbmUpLiBQYXNzIGFzIGBuZXcgRmxvd0NoYXJ0RXhlY3V0b3IoY2hhcnQsIHsgcmVhZFRyYWNraW5nIH0pYFxuICogb3IgY2FsbCBgZXhlY3V0b3Iuc2V0UmVhZFRyYWNraW5nKG1vZGUpYCBiZWZvcmUgYHJ1bigpYC5cbiAqL1xuZXhwb3J0IHR5cGUgeyBSZWFkU3VtbWFyeU1hcmtlciwgUmVhZFRyYWNraW5nTW9kZSB9IGZyb20gJy4vbGliL21lbW9yeS9pbmRleC5qcyc7XG5cbi8qKlxuICogQGNhdGVnb3J5IENvbmZpZ3VyYXRpb25cbiAqXG4gKiBXcml0ZS10cmFja2luZyBwb2xpY3kgZm9yIGBTdGFnZVNuYXBzaG90LnN0YWdlV3JpdGVzYCAoIzEzYy1BKSDigJQgdGhlXG4gKiBzaWJsaW5nIG9mIGBSZWFkVHJhY2tpbmdNb2RlYDsgYm90aCBhbGlhcyB0aGUgc2hhcmVkIGBSZXRlbnRpb25Qb2xpY3lgXG4gKiBmYW1pbHkgZnJvbSBgbGliL2NhcHR1cmVgLiBgJ2Z1bGwnYCAoZGVmYXVsdCDigJQgcGVyLXdyaXRlIHZhbHVlIGNsb25lLFxuICogaGlzdG9yaWNhbCBiZWhhdmlvcikgLyBgJ3N1bW1hcnknYCAoY2hlYXAgYFdyaXRlU3VtbWFyeU1hcmtlcmAgcGVyIHdyaXRlKVxuICogLyBgJ29mZidgIChubyB0cmFja2luZzsgYHN0YWdlV3JpdGVzYCBhYnNlbnQgYW5kIHRoZSBgb25Db21taXRgIG11dGF0aW9uc1xuICogcGF5bG9hZCBpcyBlbXB0eSDigJQgd3JpdGVzIHRoZW1zZWx2ZXMgc3RpbGwgY29tbWl0LCBhbmQgdGhlIGNvbW1pdCBsb2cgaXNcbiAqIHVuYWZmZWN0ZWQpLiBQYXNzIGFzIGBuZXcgRmxvd0NoYXJ0RXhlY3V0b3IoY2hhcnQsIHsgd3JpdGVUcmFja2luZyB9KWAgb3JcbiAqIGNhbGwgYGV4ZWN1dG9yLnNldFdyaXRlVHJhY2tpbmcobW9kZSlgIGJlZm9yZSBgcnVuKClgLlxuICovXG5leHBvcnQgdHlwZSB7IFJldGVudGlvblBvbGljeSwgV3JpdGVTdW1tYXJ5TWFya2VyLCBXcml0ZVRyYWNraW5nTW9kZSB9IGZyb20gJy4vbGliL21lbW9yeS9pbmRleC5qcyc7XG5cbi8qKlxuICogQGNhdGVnb3J5IENvbmZpZ3VyYXRpb25cbiAqXG4gKiBDb21taXQtdmFsdWVzIGVuY29kaW5nIGZvciB0aGUgQ09NTUlUIExPRyAoIzEzYy1CKSDigJQgdGhlIHRoaXJkIGRpYWwgb2ZcbiAqIHRoZSBmYW1pbHksIGFuZCB0aGUgb25seSBMT1NTTEVTUyBvbmUgKGl0IGNoYW5nZXMgdGhlIGxvZydzIGVuY29kaW5nLFxuICogbmV2ZXIgaXRzIGluZm9ybWF0aW9uKS4gYCdmdWxsJ2AgKGRlZmF1bHQg4oCUIGV2ZXJ5IHN1cnZpdmluZyBgc2V0YCBzdG9yZXNcbiAqIHRoZSBmdWxsIGZpbmFsIHZhbHVlLCBieXRlLWlkZW50aWNhbCB0byBoaXN0b3J5KSAvIGAnZGVsdGEnYCAoYXJyYXlcbiAqIG5ldC1jaGFuZ2VzIHRoYXQgYXJlIFwiYmFzZSBwbHVzIGEgdGFpbFwiIGNvbW1pdCBhcyBhbiBgYXBwZW5kYCB2ZXJiXG4gKiBzdG9yaW5nIG9ubHkgdGhlIHRhaWw7IGBkZWxldGVWYWx1ZSgpYCBjb21taXRzIGFzIGEgcmVhbCBgZGVsZXRlYCB2ZXJiO1xuICogb25lIHRyYWNlIGVudHJ5IHBlciBzdXJ2aXZpbmcgcGF0aCkuIFJlcGxheSByZWNvbnN0cnVjdHMgZXZlcnkgc3RlcCdzXG4gKiBmdWxsIHN0YXRlIGV4YWN0bHkuIENvbnN1bWVycyByZWFkaW5nIGBidW5kbGUub3ZlcndyaXRlW2tleV1gIGFzIHRoZSBmdWxsXG4gKiB2YWx1ZSBtdXN0IHVzZSBgY29tbWl0VmFsdWVBdGAgZnJvbSBgZm9vdHByaW50anMvdHJhY2VgLiBQYXNzIGFzXG4gKiBgbmV3IEZsb3dDaGFydEV4ZWN1dG9yKGNoYXJ0LCB7IGNvbW1pdFZhbHVlcyB9KWAgb3IgY2FsbFxuICogYGV4ZWN1dG9yLnNldENvbW1pdFZhbHVlcyhtb2RlKWAgYmVmb3JlIGBydW4oKWA7IHRoZSBhY3RpdmUgbW9kZSBpcyB0aGVcbiAqIHNuYXBzaG90IGRpc2NyaW1pbmFudCBgZ2V0U25hcHNob3QoKS5jb21taXRWYWx1ZXNgLlxuICovXG5leHBvcnQgdHlwZSB7IENvbW1pdFZhbHVlc01vZGUgfSBmcm9tICcuL2xpYi9tZW1vcnkvaW5kZXguanMnO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBDb250cmFjdCAmIFZhbGlkYXRpb25cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqIEBjYXRlZ29yeSBDb250cmFjdCAmIFZhbGlkYXRpb24gKi9cbmV4cG9ydCB0eXBlIHsgU2NoZW1hS2luZCwgVmFsaWRhdGlvbklzc3VlLCBWYWxpZGF0aW9uUmVzdWx0IH0gZnJvbSAnLi9saWIvc2NoZW1hL2luZGV4LmpzJztcblxuLyoqIEBjYXRlZ29yeSBDb250cmFjdCAmIFZhbGlkYXRpb24gKi9cbmV4cG9ydCB7IGRldGVjdFNjaGVtYSwgaXNWYWxpZGF0YWJsZSwgaXNab2QgfSBmcm9tICcuL2xpYi9zY2hlbWEvaW5kZXguanMnO1xuXG4vKiogQGNhdGVnb3J5IENvbnRyYWN0ICYgVmFsaWRhdGlvbiAqL1xuZXhwb3J0IHsgSW5wdXRWYWxpZGF0aW9uRXJyb3IsIHZhbGlkYXRlQWdhaW5zdFNjaGVtYSwgdmFsaWRhdGVPclRocm93IH0gZnJvbSAnLi9saWIvc2NoZW1hL2luZGV4LmpzJztcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gRXJyb3IgVXRpbGl0aWVzXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKiBAY2F0ZWdvcnkgRXJyb3IgVXRpbGl0aWVzICovXG5leHBvcnQgdHlwZSB7IFN0cnVjdHVyZWRFcnJvckluZm8gfSBmcm9tICcuL2xpYi9lbmdpbmUvaW5kZXguanMnO1xuXG4vKiogQGNhdGVnb3J5IEVycm9yIFV0aWxpdGllcyAqL1xuZXhwb3J0IHsgZXh0cmFjdEVycm9ySW5mbywgZm9ybWF0RXJyb3JJbmZvIH0gZnJvbSAnLi9saWIvZW5naW5lL2luZGV4LmpzJztcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gRGV2IFRvb2xzIOKAlCBNb2RlIGZsYWdzIGFuZCBab2Qgc2NvcGUgdXRpbGl0aWVzXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKlxuICogQGNhdGVnb3J5IERldiBUb29sc1xuICpcbiAqIEdsb2JhbCBkZXYtbW9kZSBmbGFnLiBDYWxsIGBlbmFibGVEZXZNb2RlKClgIGF0IGFwcGxpY2F0aW9uIHN0YXJ0dXAgdG9cbiAqIHR1cm4gb24gZGV2ZWxvcGVyLW9ubHkgZGlhZ25vc3RpY3MgYWNyb3NzIHRoZSBsaWJyYXJ5IOKAlCBjaXJjdWxhci1yZWZlcmVuY2VcbiAqIGRldGVjdGlvbiBpbiBzY29wZSB3cml0ZXMsIHdhcm5pbmdzIHdoZW4gYSByZWNvcmRlciBoYXMgbm8gb2JzZXJ2ZXJcbiAqIG1ldGhvZHMsIHN1c3BpY2lvdXMtcHJlZGljYXRlIHdhcm5pbmdzIGluIGRlY2lkZS9zZWxlY3QsIHN0cnVjdHVyYWxcbiAqIGNoZWNrcyBpbiBgZ2V0U3VidHJlZVNuYXBzaG90YCwgYW5kIGFueSBmdXR1cmUgZGV2LW9ubHkgZGlhZ25vc3RpYy5cbiAqXG4gKiBQcm9kdWN0aW9uIGxlYXZlcyBpdCBPRkYgYnkgZGVmYXVsdCAoemVybyBvdmVyaGVhZCkuIFNlZSB0aGUgSlNEb2Mgb25cbiAqIGBlbmFibGVEZXZNb2RlYCBmb3IgdGhlIGZ1bGwgbGlzdCBhbmQgdXNhZ2UgZXhhbXBsZS5cbiAqL1xuZXhwb3J0IHsgZGlzYWJsZURldk1vZGUsIGVuYWJsZURldk1vZGUsIGlzRGV2TW9kZSB9IGZyb20gJy4vbGliL2Rldk1vZGUuanMnO1xuXG4vLyBgZGVmaW5lU2NvcGVGcm9tWm9kYCBhbmQgdGhlIG90aGVyIHpvZC1iYXNlZCBzY29wZSBoZWxwZXJzIG1vdmVkIHRvIHRoZSBvcHQtaW5cbi8vIGBmb290cHJpbnRqcy96b2RgIGVudHJ5IOKAlCBrZWVwaW5nIHpvZCBvdXQgb2YgdGhlIGNvcmUgbG9hZCBwYXRoIChpdCBpcyBhblxuLy8gb3B0aW9uYWwgcGVlcikuIEltcG9ydCB0aGVtIGZyb20gJ2Zvb3RwcmludGpzL3pvZCcuXG4vLyBBIHJ1bidzIHJlY29yZCBhcyBKU09OIHdpdGhvdXQgdGhlIGVuZ2luZSdzIHJlY3Vyc2lvbiBsaW1pdCAoOS4yNi4wKTogdGhlXG4vLyBzYW1lIGJ5dGVzIEpTT04uc3RyaW5naWZ5IGVtaXRzLCBmb3IgYSBkZWVwIGBuZXh0YCBjaGFpbiBpdCBjYW5ub3QgZW5jb2RlLlxuZXhwb3J0IHsgc3RyaW5naWZ5U25hcHNob3QgfSBmcm9tICcuL2xpYi9ydW5uZXIvc3RyaW5naWZ5U25hcHNob3QuanMnO1xuIl19
|
|
89
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7O0dBY0c7QUFTSCw0QkFBNEI7QUFDNUIsT0FBTyxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBNkJ4Riw0QkFBNEI7QUFDNUIsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBb0IzQyxtQ0FBbUM7QUFDbkMsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQWtCdkQsb0JBQW9CO0FBQ3BCLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRTFELG9CQUFvQjtBQUNwQixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFxQm5ELCtCQUErQjtBQUMvQixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFFdEQsK0JBQStCO0FBQy9CLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUVyRCxvQ0FBb0M7QUFDcEMsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFtQzVELHFFQUFxRTtBQUNyRSxPQUFPLEVBQ0wsc0JBQXNCLEVBQ3RCLHNCQUFzQixFQUN0QixrQkFBa0IsRUFDbEIsV0FBVyxHQUNaLE1BQU0seUJBQXlCLENBQUM7QUFtRGpDLCtCQUErQjtBQUMvQixPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUs5RCwrQkFBK0I7QUFDL0IsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFN0QsK0JBQStCO0FBQy9CLE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRXRFLCtCQUErQjtBQUMvQixPQUFPLEVBQUUsOEJBQThCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUV2RSwrQkFBK0I7QUFDL0IsT0FBTyxFQUFFLGdDQUFnQyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFekUsK0JBQStCO0FBQy9CLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRWpFLCtCQUErQjtBQUMvQixPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUV0RSwrQkFBK0I7QUFDL0IsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFcEUsK0JBQStCO0FBQy9CLE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBeUJ0RSx1Q0FBdUM7QUFDdkMsT0FBTyxFQUFFLGtCQUFrQixFQUFFLGdCQUFnQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFN0UsK0VBQStFO0FBQy9FLDRFQUE0RTtBQUM1RSwrRUFBK0U7QUFFL0UsOEJBQThCO0FBQzlCLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBb0I1RCw2QkFBNkI7QUFDN0IsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBaUVqRCxzQ0FBc0M7QUFDdEMsT0FBTyxFQUFFLFlBQVksRUFBRSxhQUFhLEVBQUUsS0FBSyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFM0Usc0NBQXNDO0FBQ3RDLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxxQkFBcUIsRUFBRSxlQUFlLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQVNyRyxnQ0FBZ0M7QUFDaEMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLGVBQWUsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRTFFLCtFQUErRTtBQUMvRSxpREFBaUQ7QUFDakQsK0VBQStFO0FBRS9FOzs7Ozs7Ozs7OztHQVdHO0FBQ0gsT0FBTyxFQUFFLGNBQWMsRUFBRSxhQUFhLEVBQUUsU0FBUyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFNUUsaUZBQWlGO0FBQ2pGLDRFQUE0RTtBQUM1RSxzREFBc0Q7QUFDdEQsNEVBQTRFO0FBQzVFLDZFQUE2RTtBQUM3RSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogRm9vdFByaW50IOKAlCBQdWJsaWMgQVBJICh2MylcbiAqXG4gKiBUaGUgZmxvd2NoYXJ0IHBhdHRlcm4gZm9yIGJhY2tlbmQgY29kZS5cbiAqIEJ1aWxkIOKGkiBSdW4g4oaSIE9ic2VydmUuXG4gKlxuICogKipUaHJlZSBpbXBvcnQgcGF0aHM6KipcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyBmbG93Q2hhcnQsIGRlY2lkZSwgbmFycmF0aXZlIH0gZnJvbSAnZm9vdHByaW50anMnOyAgICAgICAgICAgLy8gbWFpbiDigJQgc3RhcnQgaGVyZVxuICogaW1wb3J0IHsgbWV0cmljcywgZGVidWcsIG1hbmlmZXN0IH0gICAgIGZyb20gJ2Zvb3RwcmludGpzL3JlY29yZGVycyc7IC8vIHJlY29yZGVyIGZhY3Rvcmllc1xuICogaW1wb3J0IHsgU2hhcmVkTWVtb3J5LCBTdGFnZUNvbnRleHQgfSAgIGZyb20gJ2Zvb3RwcmludGpzL2FkdmFuY2VkJzsgIC8vIGludGVybmFsc1xuICogYGBgXG4gKlxuICogQG1vZHVsZVxuICovXG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIFF1aWNrIFN0YXJ0IOKAlCBFdmVyeXRoaW5nIHlvdSBuZWVkIGZvciA5MCUgb2YgdXNlIGNhc2VzXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKiBAY2F0ZWdvcnkgUXVpY2sgU3RhcnQgKi9cbmV4cG9ydCB0eXBlIHsgRmxvd0NoYXJ0LCBTdGFnZUZ1bmN0aW9uIGFzIFN0YWdlSGFuZGxlciwgU3RyZWFtSGFuZGxlcnMgfSBmcm9tICcuL2xpYi9idWlsZGVyL2luZGV4LmpzJztcblxuLyoqIEBjYXRlZ29yeSBRdWljayBTdGFydCAqL1xuZXhwb3J0IHsgZmxvd0NoYXJ0LCBGbG93Q2hhcnRCdWlsZGVyLCBmbG93Q2hhcnRTZWxlY3RvciB9IGZyb20gJy4vbGliL2J1aWxkZXIvaW5kZXguanMnO1xuXG4vKipcbiAqIEBjYXRlZ29yeSBRdWljayBTdGFydFxuICpcbiAqIENvbmZpZyBmb3IgYC5hZGRQYXJhbGxlbEZvckVhY2goKWAg4oCUIG9uZSBicmFuY2ggcGVyIGl0ZW0sIGJyYW5jaCBjb3VudFxuICogZGVjaWRlZCBhdCBydW4gdGltZSBmcm9tIHRoZSBwYXlsb2FkLiBgbWF4QnJhbmNoZXNgIGFuZCBgaW50b2AgYXJlIHJlcXVpcmVkXG4gKiBvbiBwdXJwb3NlIChzZWUgZG9jcy9kZXNpZ24vZXhlY3V0aW9uLWNvbnRyb2wubWQpLlxuICovXG5leHBvcnQgdHlwZSB7IEJyYW5jaENoYXJ0LCBQYXJhbGxlbEZvckVhY2hDb25maWcsIFJldHJ5UG9saWN5IH0gZnJvbSAnLi9saWIvYnVpbGRlci9pbmRleC5qcyc7XG5cbi8qKiBAY2F0ZWdvcnkgUXVpY2sgU3RhcnQg4oCUIGJ1aWxkLXRpbWUgb2JzZXJ2ZXIgKHR3aW4gb2YgRmxvd1JlY29yZGVyKSAqL1xuZXhwb3J0IHR5cGUge1xuICBTdHJ1Y3R1cmVEZWNpZGVyQ29tcGxldGVFdmVudCxcbiAgU3RydWN0dXJlRWRnZUFkZGVkRXZlbnQsXG4gIFN0cnVjdHVyZUVkZ2VLaW5kLFxuICBTdHJ1Y3R1cmVMb29wRWRnZUFkZGVkRXZlbnQsXG4gIFN0cnVjdHVyZVJlY29yZGVyLFxuICBTdHJ1Y3R1cmVTdGFnZUFkZGVkRXZlbnQsXG4gIFN0cnVjdHVyZVN0YWdlVGFnZ2VkRXZlbnQsXG4gIFN0cnVjdHVyZVN1YmZsb3dNb3VudGVkRXZlbnQsXG59IGZyb20gJy4vbGliL2J1aWxkZXIvaW5kZXguanMnO1xuXG4vKiogQGNhdGVnb3J5IFF1aWNrIFN0YXJ0ICovXG5leHBvcnQgdHlwZSB7IFR5cGVkU3RhZ2VGdW5jdGlvbiB9IGZyb20gJy4vbGliL2J1aWxkZXIvdHlwZWRGbG93Q2hhcnQuanMnO1xuXG4vKiogQGNhdGVnb3J5IFF1aWNrIFN0YXJ0ICovXG5leHBvcnQgdHlwZSB7IFNjb3BlTWV0aG9kcywgVHlwZWRTY29wZSB9IGZyb20gJy4vbGliL3JlYWN0aXZlL2luZGV4LmpzJztcblxuLyoqIEBjYXRlZ29yeSBRdWljayBTdGFydCAqL1xuZXhwb3J0IHsgbmFycmF0aXZlIH0gZnJvbSAnLi9yZWNvcmRlcnMuanMnO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBEZWNpc2lvbiBCcmFuY2hpbmcg4oCUIGRlY2lkZSgpIC8gc2VsZWN0KCkgd2l0aCBldmlkZW5jZSBjYXB0dXJlXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKiBAY2F0ZWdvcnkgRGVjaXNpb24gQnJhbmNoaW5nICovXG5leHBvcnQgdHlwZSB7XG4gIERlY2lkZVJ1bGUsXG4gIERlY2lzaW9uRXZpZGVuY2UsXG4gIERlY2lzaW9uUmVzdWx0LFxuICBEZWZhdWx0QnJhbmNoLFxuICBGaWx0ZXJPcHMsXG4gIFJ1bGVFdmlkZW5jZSxcbiAgU2VsZWN0aW9uRXZpZGVuY2UsXG4gIFNlbGVjdGlvblJlc3VsdCxcbiAgV2hlbkNsYXVzZSxcbiAgV2hlcmVGaWx0ZXIsXG59IGZyb20gJy4vbGliL2RlY2lkZS9pbmRleC5qcyc7XG5cbi8qKiBAY2F0ZWdvcnkgRGVjaXNpb24gQnJhbmNoaW5nICovXG5leHBvcnQgeyBkZWNpZGUsIHNlbGVjdCB9IGZyb20gJy4vbGliL2RlY2lkZS9pbmRleC5qcyc7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIFJ1biDigJQgRXhlY3V0ZSBjaGFydHMgYW5kIGNvbGxlY3QgcmVzdWx0c1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKiogQGNhdGVnb3J5IFJ1biAqL1xuZXhwb3J0IHR5cGUgeyBSdW5SZXN1bHQgfSBmcm9tICcuL2xpYi9ydW5uZXIvaW5kZXguanMnO1xuXG4vKiogQGNhdGVnb3J5IFJ1biAqL1xuZXhwb3J0IHR5cGUgeyBGbG93Q2hhcnRFeGVjdXRvck9wdGlvbnMgfSBmcm9tICcuL2xpYi9ydW5uZXIvaW5kZXguanMnO1xuXG4vKipcbiAqIFRoZSBmb3VyIG9ic2VydmFiaWxpdHkgZGlhbHMgYEZsb3dDaGFydEV4ZWN1dG9yT3B0aW9uc2AgaW5oZXJpdHMuXG4gKiBAY2F0ZWdvcnkgUnVuXG4gKi9cbmV4cG9ydCB0eXBlIHsgUnVuRGlhbHMgfSBmcm9tICcuL2xpYi9tZW1vcnkvaW5kZXguanMnO1xuXG4vKiogQGNhdGVnb3J5IFJ1biAqL1xuZXhwb3J0IHsgRmxvd0NoYXJ0RXhlY3V0b3IgfSBmcm9tICcuL2xpYi9ydW5uZXIvaW5kZXguanMnO1xuXG4vKiogQGNhdGVnb3J5IFJ1biAqL1xuZXhwb3J0IHsgUnVuQ29udGV4dCB9IGZyb20gJy4vbGliL3J1bm5lci9pbmRleC5qcyc7XG5cbi8qKiBAY2F0ZWdvcnkgUnVuICovXG5leHBvcnQgdHlwZSB7IENoYXJ0T3BlbkFQSU9wdGlvbnMsIE1DUFRvb2xEZXNjcmlwdGlvbiwgUnVubmFibGVGbG93Q2hhcnQgfSBmcm9tICcuL2xpYi9ydW5uZXIvUnVubmFibGVDaGFydC5qcyc7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIE9ic2VydmUg4oCUIERhdGEgKHNjb3BlIHJlY29yZGVycywgZmlyZSBkdXJpbmcgc3RhZ2UgZXhlY3V0aW9uKVxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKiogQGNhdGVnb3J5IE9ic2VydmUg4oCUIERhdGEgKi9cbmV4cG9ydCB0eXBlIHtcbiAgQ29tbWl0RXZlbnQsXG4gIEVycm9yRXZlbnQsXG4gIFJlYWRFdmVudCxcbiAgUmVkYWN0aW9uUG9saWN5LFxuICBSZWRhY3Rpb25SZXBvcnQsXG4gIFNjb3BlUmVjb3JkZXIsXG4gIFN0YWdlRXZlbnQsXG4gIFdyaXRlRXZlbnQsXG59IGZyb20gJy4vbGliL3Njb3BlL2luZGV4LmpzJztcblxuLyoqIEBjYXRlZ29yeSBPYnNlcnZlIOKAlCBEYXRhICovXG5leHBvcnQgeyBNZXRyaWNSZWNvcmRlciB9IGZyb20gJy4vbGliL3Njb3BlL2luZGV4LmpzJztcblxuLyoqIEBjYXRlZ29yeSBPYnNlcnZlIOKAlCBEYXRhICovXG5leHBvcnQgeyBEZWJ1Z1JlY29yZGVyIH0gZnJvbSAnLi9saWIvc2NvcGUvaW5kZXguanMnO1xuXG4vKiogQGNhdGVnb3J5IE9ic2VydmUg4oCUIE9wZXJhdGlvbiAqL1xuZXhwb3J0IHsgUmVjb3JkZXJPcGVyYXRpb24gfSBmcm9tICcuL2xpYi9yZWNvcmRlci9pbmRleC5qcyc7XG5cbi8qKlxuICogQGNhdGVnb3J5IE9ic2VydmUg4oCUIERlbGl2ZXJ5IHRpZXIgKFJGQy0wMDEgZGVmZXJyZWQgb2JzZXJ2ZXJzKVxuICpcbiAqIEV2ZXJ5IGBhdHRhY2gqUmVjb3JkZXJgIGNhbGwgYWNjZXB0cyBhbiBvcHRpb25zIGJhZzpcbiAqIGBleGVjdXRvci5hdHRhY2hTY29wZVJlY29yZGVyKHJlYywgeyBkZWxpdmVyeTogJ2RlZmVycmVkJyB9KWAgdGFrZXMgdGhlXG4gKiByZWNvcmRlciBPVVQgb2YgdGhlIGVuZ2luZSdzIGhvdCBwYXRoIOKAlCBldmVudHMgYXJlIGNhcHR1cmVkIGludG8gb25lXG4gKiBib3VuZGVkLCB0b3RhbGx5LW9yZGVyZWQgcXVldWUgYW5kIGRlbGl2ZXJlZCBhdCB0aGUgbmV4dCBtaWNyb3Rhc2tcbiAqIGNoZWNrcG9pbnQgKFwib25lIGJlYXQgYmVoaW5kXCIpLiBPbWl0IGBkZWxpdmVyeWAgZm9yIHRoZSBoaXN0b3JpY2FsXG4gKiBzeW5jaHJvbm91cyBjYWxsIChieXRlLWlkZW50aWNhbCB0byBwcmV2aW91cyByZWxlYXNlcykuIEFjY291bnRpbmdcbiAqIHN1cmZhY2VzIG9uIGBzbmFwc2hvdC5vYnNlcnZlclN0YXRzYDsgYGV4ZWN1dG9yLmRyYWluT2JzZXJ2ZXJzKClgIHNldHRsZXNcbiAqIGFzeW5jIGxpc3RlbmVycyBiZWZvcmUgc2h1dGRvd24uIFNlZSBgZG9jcy9ndWlkZXMvb2JzZXJ2ZXJzLWRlZmVycmVkLm1kYC5cbiAqL1xuZXhwb3J0IHR5cGUge1xuICBBdHRhY2hSZWNvcmRlck9wdGlvbnMsXG4gIE9ic2VydmVyRGVsaXZlcnksXG4gIE9ic2VydmVyRHJhaW5SZXN1bHQsXG4gIE9ic2VydmVyU3RhdHMsXG59IGZyb20gJy4vbGliL3J1bm5lci9pbmRleC5qcyc7XG5cbi8qKlxuICogQGNhdGVnb3J5IE9ic2VydmUg4oCUIERlbGl2ZXJ5IHRpZXIgKFJGQy0wMDEgZGVmZXJyZWQgb2JzZXJ2ZXJzKVxuICpcbiAqIGBDYXB0dXJlUG9saWN5YCDigJQgaG93IGEgZGVmZXJyZWQgZXZlbnQncyBwYXlsb2FkIGlzIG1hdGVyaWFsaXplZCBhdFxuICogY2FwdHVyZSB0aW1lIChgJ3N1bW1hcnknYCBkZWZhdWx0IC8gYCdjbG9uZSdgIC8gYCdyZWYnYCkuIGBPdmVyZmxvd1BvbGljeWBcbiAqIOKAlCB3aGF0IGEgc2F0dXJhdGVkIHF1ZXVlIGRvZXMgKGAnZHJvcC1vbGRlc3QnYCBkZWZhdWx0IC8gYCdzYW1wbGUnYCAvXG4gKiBgJ2Jsb2NrJ2ApLiBgRGlzcGF0Y2hlclN0YXRzYCAvIGBMaXN0ZW5lclN0YXRzYCDigJQgdGhlIGFjY291bnRpbmcgc2hhcGVzXG4gKiBlbWJlZGRlZCBpbiBgT2JzZXJ2ZXJTdGF0c2AuIFR5cGVzIG9ubHkg4oCUIHRoZSBvYnNlcnZlci1xdWV1ZSBtb2R1bGVcbiAqIGl0c2VsZiBpcyBpbnRlcm5hbDsgY29uc3VtZXJzIHVzZSB0aGUgYXR0YWNoIG9wdGlvbnMuXG4gKi9cbmV4cG9ydCB0eXBlIHsgQ2FwdHVyZVBvbGljeSwgRGlzcGF0Y2hlclN0YXRzLCBMaXN0ZW5lclN0YXRzLCBPdmVyZmxvd1BvbGljeSB9IGZyb20gJy4vbGliL29ic2VydmVyLXF1ZXVlL2luZGV4LmpzJztcblxuLyoqIEBjYXRlZ29yeSBPYnNlcnZlIOKAlCBDb21iaW5lZCAoYm90aCBkYXRhLWZsb3cgYW5kIGNvbnRyb2wtZmxvdykgKi9cbmV4cG9ydCB0eXBlIHsgQ29tYmluZWRSZWNvcmRlciB9IGZyb20gJy4vbGliL3JlY29yZGVyL2luZGV4LmpzJztcbi8qKiBAY2F0ZWdvcnkgT2JzZXJ2ZSDigJQgQ29tYmluZWQgKGJvdGggZGF0YS1mbG93IGFuZCBjb250cm9sLWZsb3cpICovXG5leHBvcnQge1xuICBoYXNFbWl0UmVjb3JkZXJNZXRob2RzLFxuICBoYXNGbG93UmVjb3JkZXJNZXRob2RzLFxuICBoYXNSZWNvcmRlck1ldGhvZHMsXG4gIGlzRmxvd0V2ZW50LFxufSBmcm9tICcuL2xpYi9yZWNvcmRlci9pbmRleC5qcyc7XG5cbi8qKlxuICogQGNhdGVnb3J5IE9ic2VydmUg4oCUIEVtaXQgKHVzZXItYXV0aG9yZWQgc3RydWN0dXJlZCBldmVudHMpXG4gKlxuICogVGhpcmQgb2JzZXJ2ZXIgY2hhbm5lbCAoYWxvbmdzaWRlIGBTY29wZVJlY29yZGVyYCBhbmQgYEZsb3dSZWNvcmRlcmApLiBDb25zdW1lclxuICogY29kZSBjYWxscyBgc2NvcGUuJGVtaXQobmFtZSwgcGF5bG9hZClgIGZyb20gaW5zaWRlIGEgc3RhZ2U7IGV2ZXJ5IGF0dGFjaGVkXG4gKiBgRW1pdFJlY29yZGVyLm9uRW1pdChldmVudClgIGZpcmVzIHN5bmNocm9ub3VzbHkgd2l0aCBzdGFnZS1jb250ZXh0XG4gKiBlbnJpY2htZW50LiBQYXNzLXRocm91Z2gg4oCUIG5vIGJ1ZmZlcmluZywgemVybyBhbGxvY2F0aW9uIHdoZW4gbm8gcmVjb3JkZXJcbiAqIGlzIGF0dGFjaGVkLlxuICovXG5leHBvcnQgdHlwZSB7IEVtaXRFdmVudCwgRW1pdFJlY29yZGVyIH0gZnJvbSAnLi9saWIvcmVjb3JkZXIvaW5kZXguanMnO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBPYnNlcnZlIOKAlCBGbG93IChGbG93UmVjb3JkZXIsIGZpcmVzIGFmdGVyIHN0YWdlIGV4ZWN1dGlvbilcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqIEBjYXRlZ29yeSBPYnNlcnZlIOKAlCBGbG93ICovXG5leHBvcnQgdHlwZSB7XG4gIEZsb3dCcmVha0V2ZW50LFxuICBGbG93RGVjaXNpb25FdmVudCxcbiAgRmxvd0Vycm9yRXZlbnQsXG4gIEZsb3dGb3JrRXZlbnQsXG4gIEZsb3dMb29wRXZlbnQsXG4gIEZsb3dOZXh0RXZlbnQsXG4gIEZsb3dSZWNvcmRlcixcbiAgRmxvd1J1bkV2ZW50LFxuICBGbG93UnVuRmFpbGVkRXZlbnQsXG4gIEZsb3dTZWxlY3RlZEV2ZW50LFxuICBGbG93U3RhZ2VFdmVudCxcbiAgRmxvd1N0YWdlUmV0cnlFdmVudCxcbiAgRmxvd1N1YmZsb3dFdmVudCxcbiAgRmxvd1N1YmZsb3dSZWdpc3RlcmVkRXZlbnQsXG4gIEZsb3dUaHJvdHRsZWRFdmVudCxcbiAgUmVzdW1lTGluayxcbiAgVHJhdmVyc2FsQ29udGV4dCxcbn0gZnJvbSAnLi9saWIvZW5naW5lL2luZGV4LmpzJztcblxuLyoqIEBjYXRlZ29yeSBPYnNlcnZlIOKAlCBGbG93ICovXG5leHBvcnQgdHlwZSB7IENvbWJpbmVkTmFycmF0aXZlRW50cnkgfSBmcm9tICcuL2xpYi9lbmdpbmUvaW5kZXguanMnO1xuXG4vKipcbiAqIEBjYXRlZ29yeSBPYnNlcnZlIOKAlCBGbG93XG4gKlxuICogYE5hcnJhdGl2ZUZvcm1hdHRlcmAg4oCUIHBsdWdnYWJsZSBmb3JtYXR0ZXIgdGhhdCBjb252ZXJ0cyBldmVudCBjb250ZXh0XG4gKiBvYmplY3RzIGludG8gdGhlIHRleHQgbGluZXMgb2YgdGhlIG5hcnJhdGl2ZS4gUHJlZmVyIHRoaXMgbmFtZSBpbiBuZXdcbiAqIGNvZGU7IGBOYXJyYXRpdmVSZW5kZXJlcmAgaXMgYSBkZXByZWNhdGVkIGFsaWFzIHRoYXQgd2lsbCBiZSByZW1vdmVkIGluXG4gKiB0aGUgbmV4dCBtYWpvciByZWxlYXNlLlxuICovXG5leHBvcnQgdHlwZSB7IE5hcnJhdGl2ZUZvcm1hdHRlciwgTmFycmF0aXZlUmVuZGVyZXIgfSBmcm9tICcuL2xpYi9lbmdpbmUvaW5kZXguanMnO1xuXG4vKiogQGNhdGVnb3J5IE9ic2VydmUg4oCUIEZsb3cgKi9cbmV4cG9ydCB7IE5hcnJhdGl2ZUZsb3dSZWNvcmRlciB9IGZyb20gJy4vbGliL2VuZ2luZS9pbmRleC5qcyc7XG5cbi8qKiBAY2F0ZWdvcnkgT2JzZXJ2ZSDigJQgRmxvdyAqL1xuZXhwb3J0IHR5cGUgeyBNYW5pZmVzdEVudHJ5IH0gZnJvbSAnLi9saWIvZW5naW5lL2luZGV4LmpzJztcblxuLyoqIEBjYXRlZ29yeSBPYnNlcnZlIOKAlCBGbG93ICovXG5leHBvcnQgeyBNYW5pZmVzdEZsb3dSZWNvcmRlciB9IGZyb20gJy4vbGliL2VuZ2luZS9pbmRleC5qcyc7XG5cbi8qKiBAY2F0ZWdvcnkgT2JzZXJ2ZSDigJQgRmxvdyAqL1xuZXhwb3J0IHsgQWRhcHRpdmVOYXJyYXRpdmVGbG93UmVjb3JkZXIgfSBmcm9tICcuL2xpYi9lbmdpbmUvaW5kZXguanMnO1xuXG4vKiogQGNhdGVnb3J5IE9ic2VydmUg4oCUIEZsb3cgKi9cbmV4cG9ydCB7IE1pbGVzdG9uZU5hcnJhdGl2ZUZsb3dSZWNvcmRlciB9IGZyb20gJy4vbGliL2VuZ2luZS9pbmRleC5qcyc7XG5cbi8qKiBAY2F0ZWdvcnkgT2JzZXJ2ZSDigJQgRmxvdyAqL1xuZXhwb3J0IHsgUHJvZ3Jlc3NpdmVOYXJyYXRpdmVGbG93UmVjb3JkZXIgfSBmcm9tICcuL2xpYi9lbmdpbmUvaW5kZXguanMnO1xuXG4vKiogQGNhdGVnb3J5IE9ic2VydmUg4oCUIEZsb3cgKi9cbmV4cG9ydCB7IFJMRU5hcnJhdGl2ZUZsb3dSZWNvcmRlciB9IGZyb20gJy4vbGliL2VuZ2luZS9pbmRleC5qcyc7XG5cbi8qKiBAY2F0ZWdvcnkgT2JzZXJ2ZSDigJQgRmxvdyAqL1xuZXhwb3J0IHsgU2VwYXJhdGVOYXJyYXRpdmVGbG93UmVjb3JkZXIgfSBmcm9tICcuL2xpYi9lbmdpbmUvaW5kZXguanMnO1xuXG4vKiogQGNhdGVnb3J5IE9ic2VydmUg4oCUIEZsb3cgKi9cbmV4cG9ydCB7IFNpbGVudE5hcnJhdGl2ZUZsb3dSZWNvcmRlciB9IGZyb20gJy4vbGliL2VuZ2luZS9pbmRleC5qcyc7XG5cbi8qKiBAY2F0ZWdvcnkgT2JzZXJ2ZSDigJQgRmxvdyAqL1xuZXhwb3J0IHsgV2luZG93ZWROYXJyYXRpdmVGbG93UmVjb3JkZXIgfSBmcm9tICcuL2xpYi9lbmdpbmUvaW5kZXguanMnO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBTZWxmLURlc2NyaWJpbmcg4oCUIC5jb250cmFjdCgpLCB0b09wZW5BUEkoKSwgdG9NQ1BUb29sKClcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqIEBjYXRlZ29yeSBTZWxmLURlc2NyaWJpbmcgKi9cbmV4cG9ydCB0eXBlIHtcbiAgRmxvd0NoYXJ0Q29udHJhY3QsXG4gIEZsb3dDaGFydENvbnRyYWN0T3B0aW9ucyxcbiAgSnNvblNjaGVtYSxcbiAgT3BlbkFQSU9wdGlvbnMsXG4gIE9wZW5BUElTcGVjLFxufSBmcm9tICcuL2xpYi9jb250cmFjdC9pbmRleC5qcyc7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIFNuYXBzaG90ICYgQ29tcG9zaXRpb24g4oCUIFN1YmZsb3cgbmF2aWdhdGlvbiBhbmQgQ29tcG9zYWJsZVJ1bm5lclxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKiogQGNhdGVnb3J5IFNuYXBzaG90ICYgQ29tcG9zaXRpb24gKi9cbmV4cG9ydCB0eXBlIHsgQ29tcG9zYWJsZVJ1bm5lciB9IGZyb20gJy4vbGliL3J1bm5lci9pbmRleC5qcyc7XG5cbi8qKiBAY2F0ZWdvcnkgU25hcHNob3QgJiBDb21wb3NpdGlvbiAqL1xuZXhwb3J0IHR5cGUgeyBSZWNvcmRlclNuYXBzaG90LCBSdW50aW1lU25hcHNob3QsIFN1YnRyZWVTbmFwc2hvdCB9IGZyb20gJy4vbGliL3J1bm5lci9pbmRleC5qcyc7XG5cbi8qKiBAY2F0ZWdvcnkgU25hcHNob3QgJiBDb21wb3NpdGlvbiAqL1xuZXhwb3J0IHsgZ2V0U3VidHJlZVNuYXBzaG90LCBsaXN0U3ViZmxvd1BhdGhzIH0gZnJvbSAnLi9saWIvcnVubmVyL2luZGV4LmpzJztcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gU2NvcGVSZWNvcmRlciBDb21wb3NpdGlvbiDigJQgQnVuZGxlIG11bHRpcGxlIHJlY29yZGVycyBpbnRvIGRvbWFpbiBwcmVzZXRzXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKiBAY2F0ZWdvcnkgU2NvcGVSZWNvcmRlciAqL1xuZXhwb3J0IHsgQ29tcG9zaXRlUmVjb3JkZXIgfSBmcm9tICcuL2xpYi9yZWNvcmRlci9pbmRleC5qcyc7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIFBhdXNlL1Jlc3VtZSDigJQgU2VyaWFsaXphYmxlIGNoZWNrcG9pbnRzIGZvciBsb25nLXJ1bm5pbmcgb3IgaHVtYW4taW4tdGhlLWxvb3AgZmxvd3Ncbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqIEBjYXRlZ29yeSBQYXVzZS9SZXN1bWUgKi9cbi8qKiBAY2F0ZWdvcnkgUGF1c2UvUmVzdW1lICovXG5leHBvcnQgdHlwZSB7IEZsb3djaGFydENoZWNrcG9pbnQsIFBhdXNhYmxlSGFuZGxlciwgUGF1c2VkRXhlY3V0aW9uLCBQZW5kaW5nUGF1c2UgfSBmcm9tICcuL2xpYi9wYXVzZS9pbmRleC5qcyc7XG5cbi8qKlxuICogQGNhdGVnb3J5IFBhdXNlL1Jlc3VtZVxuICpcbiAqIGBpbnRlcnJ1cHQoc2NvcGUsIHsgcmVhc29uLCBleHBlY3RzPyB9KWAg4oCUIHN0b3AgbWlkLXN0YWdlIHRvIGFzayBhIHF1ZXN0aW9uLFxuICogYW5kIGdldCB0aGUgYW5zd2VyIGJhY2sgYXQgdGhlIHNhbWUgY2FsbCBzaXRlIHdoZW4gdGhlIHJ1biByZXN1bWVzLiBSZXN1bWVcbiAqIHJlLWVudGVycyB0aGUgc3RhZ2UgZnJvbSBpdHMgVE9QIChzdGFnZXMgYXJlIGF0b21pYyksIHNvIGtlZXAgdGhlIGhhbGZcbiAqIGJlZm9yZSB0aGUgY2FsbCBpZGVtcG90ZW50LlxuICovXG5leHBvcnQgdHlwZSB7IEludGVycnVwdFBheWxvYWQgfSBmcm9tICcuL2xpYi9wYXVzZS9pbmRleC5qcyc7XG5cbi8qKiBAY2F0ZWdvcnkgUGF1c2UvUmVzdW1lICovXG5leHBvcnQgeyBpbnRlcnJ1cHQgfSBmcm9tICcuL2xpYi9wYXVzZS9pbmRleC5qcyc7XG5cbi8qKiBAY2F0ZWdvcnkgU2NvcGVSZWNvcmRlciAqL1xuZXhwb3J0IHR5cGUgeyBDb21wb3NpdGVTbmFwc2hvdCB9IGZyb20gJy4vbGliL3JlY29yZGVyL2luZGV4LmpzJztcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gQ29uZmlndXJhdGlvbiDigJQgVHlwZXMgcGFzc2VkIHRvIEZsb3dDaGFydEV4ZWN1dG9yIGFuZCBydW4oKVxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKiogQGNhdGVnb3J5IENvbmZpZ3VyYXRpb24gKi9cbmV4cG9ydCB0eXBlIHsgRXhlY3V0aW9uRW52LCBFeGVjdXRvclJlc3VsdCwgUGF1c2VkUmVzdWx0LCBSdW5PcHRpb25zIH0gZnJvbSAnLi9saWIvZW5naW5lL2luZGV4LmpzJztcblxuLyoqIEBjYXRlZ29yeSBDb25maWd1cmF0aW9uICovXG5leHBvcnQgdHlwZSB7IFNjb3BlRmFjdG9yeSB9IGZyb20gJy4vbGliL2VuZ2luZS9pbmRleC5qcyc7XG5cbi8qKlxuICogQGNhdGVnb3J5IENvbmZpZ3VyYXRpb25cbiAqXG4gKiBSZWFkLXRyYWNraW5nIHBvbGljeSBmb3IgYFN0YWdlU25hcHNob3Quc3RhZ2VSZWFkc2AgKCMxNCk6XG4gKiBgJ2Z1bGwnYCAoZGVmYXVsdCDigJQgcGVyLXJlYWQgdmFsdWUgY2xvbmUsIGhpc3RvcmljYWwgYmVoYXZpb3IpIC9cbiAqIGAnc3VtbWFyeSdgIChjaGVhcCBgUmVhZFN1bW1hcnlNYXJrZXJgIHBlciByZWFkKSAvIGAnb2ZmJ2AgKG5vIHRyYWNraW5nLFxuICogemVybyBwZXItcmVhZCBjbG9uZSkuIFBhc3MgYXMgYG5ldyBGbG93Q2hhcnRFeGVjdXRvcihjaGFydCwgeyByZWFkVHJhY2tpbmcgfSlgXG4gKiBvciBjYWxsIGBleGVjdXRvci5zZXRSZWFkVHJhY2tpbmcobW9kZSlgIGJlZm9yZSBgcnVuKClgLlxuICovXG5leHBvcnQgdHlwZSB7IFJlYWRTdW1tYXJ5TWFya2VyLCBSZWFkVHJhY2tpbmdNb2RlIH0gZnJvbSAnLi9saWIvbWVtb3J5L2luZGV4LmpzJztcblxuLyoqXG4gKiBAY2F0ZWdvcnkgQ29uZmlndXJhdGlvblxuICpcbiAqIFdyaXRlLXRyYWNraW5nIHBvbGljeSBmb3IgYFN0YWdlU25hcHNob3Quc3RhZ2VXcml0ZXNgICgjMTNjLUEpIOKAlCB0aGVcbiAqIHNpYmxpbmcgb2YgYFJlYWRUcmFja2luZ01vZGVgOyBib3RoIGFsaWFzIHRoZSBzaGFyZWQgYFJldGVudGlvblBvbGljeWBcbiAqIGZhbWlseSBmcm9tIGBsaWIvY2FwdHVyZWAuIGAnZnVsbCdgIChkZWZhdWx0IOKAlCBwZXItd3JpdGUgdmFsdWUgY2xvbmUsXG4gKiBoaXN0b3JpY2FsIGJlaGF2aW9yKSAvIGAnc3VtbWFyeSdgIChjaGVhcCBgV3JpdGVTdW1tYXJ5TWFya2VyYCBwZXIgd3JpdGUpXG4gKiAvIGAnb2ZmJ2AgKG5vIHRyYWNraW5nOyBgc3RhZ2VXcml0ZXNgIGFic2VudCBhbmQgdGhlIGBvbkNvbW1pdGAgbXV0YXRpb25zXG4gKiBwYXlsb2FkIGlzIGVtcHR5IOKAlCB3cml0ZXMgdGhlbXNlbHZlcyBzdGlsbCBjb21taXQsIGFuZCB0aGUgY29tbWl0IGxvZyBpc1xuICogdW5hZmZlY3RlZCkuIFBhc3MgYXMgYG5ldyBGbG93Q2hhcnRFeGVjdXRvcihjaGFydCwgeyB3cml0ZVRyYWNraW5nIH0pYCBvclxuICogY2FsbCBgZXhlY3V0b3Iuc2V0V3JpdGVUcmFja2luZyhtb2RlKWAgYmVmb3JlIGBydW4oKWAuXG4gKi9cbmV4cG9ydCB0eXBlIHsgUmV0ZW50aW9uUG9saWN5LCBXcml0ZVN1bW1hcnlNYXJrZXIsIFdyaXRlVHJhY2tpbmdNb2RlIH0gZnJvbSAnLi9saWIvbWVtb3J5L2luZGV4LmpzJztcblxuLyoqXG4gKiBAY2F0ZWdvcnkgQ29uZmlndXJhdGlvblxuICpcbiAqIENvbW1pdC12YWx1ZXMgZW5jb2RpbmcgZm9yIHRoZSBDT01NSVQgTE9HICgjMTNjLUIpIOKAlCB0aGUgdGhpcmQgZGlhbCBvZlxuICogdGhlIGZhbWlseSwgYW5kIHRoZSBvbmx5IExPU1NMRVNTIG9uZSAoaXQgY2hhbmdlcyB0aGUgbG9nJ3MgZW5jb2RpbmcsXG4gKiBuZXZlciBpdHMgaW5mb3JtYXRpb24pLiBgJ2Z1bGwnYCAoZGVmYXVsdCDigJQgZXZlcnkgc3Vydml2aW5nIGBzZXRgIHN0b3Jlc1xuICogdGhlIGZ1bGwgZmluYWwgdmFsdWUsIGJ5dGUtaWRlbnRpY2FsIHRvIGhpc3RvcnkpIC8gYCdkZWx0YSdgIChhcnJheVxuICogbmV0LWNoYW5nZXMgdGhhdCBhcmUgXCJiYXNlIHBsdXMgYSB0YWlsXCIgY29tbWl0IGFzIGFuIGBhcHBlbmRgIHZlcmJcbiAqIHN0b3Jpbmcgb25seSB0aGUgdGFpbDsgYGRlbGV0ZVZhbHVlKClgIGNvbW1pdHMgYXMgYSByZWFsIGBkZWxldGVgIHZlcmI7XG4gKiBvbmUgdHJhY2UgZW50cnkgcGVyIHN1cnZpdmluZyBwYXRoKS4gUmVwbGF5IHJlY29uc3RydWN0cyBldmVyeSBzdGVwJ3NcbiAqIGZ1bGwgc3RhdGUgZXhhY3RseS4gQ29uc3VtZXJzIHJlYWRpbmcgYGJ1bmRsZS5vdmVyd3JpdGVba2V5XWAgYXMgdGhlIGZ1bGxcbiAqIHZhbHVlIG11c3QgdXNlIGBjb21taXRWYWx1ZUF0YCBmcm9tIGBmb290cHJpbnRqcy90cmFjZWAuIFBhc3MgYXNcbiAqIGBuZXcgRmxvd0NoYXJ0RXhlY3V0b3IoY2hhcnQsIHsgY29tbWl0VmFsdWVzIH0pYCBvciBjYWxsXG4gKiBgZXhlY3V0b3Iuc2V0Q29tbWl0VmFsdWVzKG1vZGUpYCBiZWZvcmUgYHJ1bigpYDsgdGhlIGFjdGl2ZSBtb2RlIGlzIHRoZVxuICogc25hcHNob3QgZGlzY3JpbWluYW50IGBnZXRTbmFwc2hvdCgpLmNvbW1pdFZhbHVlc2AuXG4gKi9cbmV4cG9ydCB0eXBlIHsgQ29tbWl0VmFsdWVzTW9kZSB9IGZyb20gJy4vbGliL21lbW9yeS9pbmRleC5qcyc7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIENvbnRyYWN0ICYgVmFsaWRhdGlvblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKiogQGNhdGVnb3J5IENvbnRyYWN0ICYgVmFsaWRhdGlvbiAqL1xuZXhwb3J0IHR5cGUgeyBTY2hlbWFLaW5kLCBWYWxpZGF0aW9uSXNzdWUsIFZhbGlkYXRpb25SZXN1bHQgfSBmcm9tICcuL2xpYi9zY2hlbWEvaW5kZXguanMnO1xuXG4vKiogQGNhdGVnb3J5IENvbnRyYWN0ICYgVmFsaWRhdGlvbiAqL1xuZXhwb3J0IHsgZGV0ZWN0U2NoZW1hLCBpc1ZhbGlkYXRhYmxlLCBpc1pvZCB9IGZyb20gJy4vbGliL3NjaGVtYS9pbmRleC5qcyc7XG5cbi8qKiBAY2F0ZWdvcnkgQ29udHJhY3QgJiBWYWxpZGF0aW9uICovXG5leHBvcnQgeyBJbnB1dFZhbGlkYXRpb25FcnJvciwgdmFsaWRhdGVBZ2FpbnN0U2NoZW1hLCB2YWxpZGF0ZU9yVGhyb3cgfSBmcm9tICcuL2xpYi9zY2hlbWEvaW5kZXguanMnO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBFcnJvciBVdGlsaXRpZXNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqIEBjYXRlZ29yeSBFcnJvciBVdGlsaXRpZXMgKi9cbmV4cG9ydCB0eXBlIHsgU3RydWN0dXJlZEVycm9ySW5mbyB9IGZyb20gJy4vbGliL2VuZ2luZS9pbmRleC5qcyc7XG5cbi8qKiBAY2F0ZWdvcnkgRXJyb3IgVXRpbGl0aWVzICovXG5leHBvcnQgeyBleHRyYWN0RXJyb3JJbmZvLCBmb3JtYXRFcnJvckluZm8gfSBmcm9tICcuL2xpYi9lbmdpbmUvaW5kZXguanMnO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBEZXYgVG9vbHMg4oCUIE1vZGUgZmxhZ3MgYW5kIFpvZCBzY29wZSB1dGlsaXRpZXNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqXG4gKiBAY2F0ZWdvcnkgRGV2IFRvb2xzXG4gKlxuICogR2xvYmFsIGRldi1tb2RlIGZsYWcuIENhbGwgYGVuYWJsZURldk1vZGUoKWAgYXQgYXBwbGljYXRpb24gc3RhcnR1cCB0b1xuICogdHVybiBvbiBkZXZlbG9wZXItb25seSBkaWFnbm9zdGljcyBhY3Jvc3MgdGhlIGxpYnJhcnkg4oCUIGNpcmN1bGFyLXJlZmVyZW5jZVxuICogZGV0ZWN0aW9uIGluIHNjb3BlIHdyaXRlcywgd2FybmluZ3Mgd2hlbiBhIHJlY29yZGVyIGhhcyBubyBvYnNlcnZlclxuICogbWV0aG9kcywgc3VzcGljaW91cy1wcmVkaWNhdGUgd2FybmluZ3MgaW4gZGVjaWRlL3NlbGVjdCwgc3RydWN0dXJhbFxuICogY2hlY2tzIGluIGBnZXRTdWJ0cmVlU25hcHNob3RgLCBhbmQgYW55IGZ1dHVyZSBkZXYtb25seSBkaWFnbm9zdGljLlxuICpcbiAqIFByb2R1Y3Rpb24gbGVhdmVzIGl0IE9GRiBieSBkZWZhdWx0ICh6ZXJvIG92ZXJoZWFkKS4gU2VlIHRoZSBKU0RvYyBvblxuICogYGVuYWJsZURldk1vZGVgIGZvciB0aGUgZnVsbCBsaXN0IGFuZCB1c2FnZSBleGFtcGxlLlxuICovXG5leHBvcnQgeyBkaXNhYmxlRGV2TW9kZSwgZW5hYmxlRGV2TW9kZSwgaXNEZXZNb2RlIH0gZnJvbSAnLi9saWIvZGV2TW9kZS5qcyc7XG5cbi8vIGBkZWZpbmVTY29wZUZyb21ab2RgIGFuZCB0aGUgb3RoZXIgem9kLWJhc2VkIHNjb3BlIGhlbHBlcnMgbW92ZWQgdG8gdGhlIG9wdC1pblxuLy8gYGZvb3RwcmludGpzL3pvZGAgZW50cnkg4oCUIGtlZXBpbmcgem9kIG91dCBvZiB0aGUgY29yZSBsb2FkIHBhdGggKGl0IGlzIGFuXG4vLyBvcHRpb25hbCBwZWVyKS4gSW1wb3J0IHRoZW0gZnJvbSAnZm9vdHByaW50anMvem9kJy5cbi8vIEEgcnVuJ3MgcmVjb3JkIGFzIEpTT04gd2l0aG91dCB0aGUgZW5naW5lJ3MgcmVjdXJzaW9uIGxpbWl0ICg5LjI2LjApOiB0aGVcbi8vIHNhbWUgYnl0ZXMgSlNPTi5zdHJpbmdpZnkgZW1pdHMsIGZvciBhIGRlZXAgYG5leHRgIGNoYWluIGl0IGNhbm5vdCBlbmNvZGUuXG5leHBvcnQgeyBzdHJpbmdpZnlTbmFwc2hvdCB9IGZyb20gJy4vbGliL3J1bm5lci9zdHJpbmdpZnlTbmFwc2hvdC5qcyc7XG4iXX0=
|
|
@@ -585,6 +585,47 @@ export declare class FlowChartBuilder<TOut = any, TScope = any> {
|
|
|
585
585
|
toMermaid(): string;
|
|
586
586
|
private _needCursor;
|
|
587
587
|
private _needCursorSpec;
|
|
588
|
+
/**
|
|
589
|
+
* The node a fan-out (`addListOfFunction`, `addSubFlowChart`,
|
|
590
|
+
* `addLazySubFlowChart`) hangs its children on — the cursor, unless the
|
|
591
|
+
* cursor's `children` already MEAN something else:
|
|
592
|
+
*
|
|
593
|
+
* - a subflow MOUNT — the engine reads a mount that carries children as the
|
|
594
|
+
* mounted chart's OWN content (`NodeResolver · resolveSubflowReference`),
|
|
595
|
+
* so a fork hung there ran INSIDE the subflow: the subflow's real chart
|
|
596
|
+
* never ran, everything after the fork ran twice, and a pause after it was
|
|
597
|
+
* checkpointed under the wrong subflow path (and refused on resume);
|
|
598
|
+
* - a DECIDER or a SELECTOR (the cursor after `.end()`) — its children are
|
|
599
|
+
* its branches, so a fork child became a branch nobody picks;
|
|
600
|
+
* - a `parallelForEach` — its branches come from `items` at run time and
|
|
601
|
+
* built children are never dispatched, so the fork never ran.
|
|
602
|
+
*
|
|
603
|
+
* Through 9.37.0 the builder hung the fork there anyway. So after such a
|
|
604
|
+
* node the fork continues AFTER it: a function-less fork node
|
|
605
|
+
* `<nodeId>-fork` becomes the node's `next` and the new cursor — the shape
|
|
606
|
+
* `addFunction(...).addListOfFunction(...)` already builds, which every
|
|
607
|
+
* reader (engine, resume, structure, spec) handles. A second fan-out call
|
|
608
|
+
* reuses that node, as it would any cursor. The id is reserved both ways:
|
|
609
|
+
* refused here when a stage already has it, and by `_addToMap` /
|
|
610
|
+
* `_registerSubflowDef` when a later stage or mount asks for it.
|
|
611
|
+
*/
|
|
612
|
+
private _needForkParent;
|
|
613
|
+
/** Ids `_needForkParent` generated — no later stage or mount may take one. */
|
|
614
|
+
private _forkNodeIds;
|
|
615
|
+
/** Asked by `_addToMap` / `_registerSubflowDef`: an id a generated fork node or a claiming door holds is refused. */
|
|
616
|
+
private _refuseForkNodeId;
|
|
617
|
+
/** Ids the lazy-mount and parallelForEach doors claimed (they register in no map). */
|
|
618
|
+
private _claimedIds;
|
|
619
|
+
/** True when an earlier stage, branch, fork child, mount or generated fork node holds `id`. */
|
|
620
|
+
private _idTaken;
|
|
621
|
+
/**
|
|
622
|
+
* @internal The lazy-mount doors and `addParallelForEach` register their id
|
|
623
|
+
* in no map, so through 9.37.0 they accepted an id another stage or mount
|
|
624
|
+
* already had (and a later stage could take theirs). They claim it here:
|
|
625
|
+
* refused when taken, recorded when fresh. Loop-ref stubs never pass
|
|
626
|
+
* through a door, so they stay the one deliberate duplicate.
|
|
627
|
+
*/
|
|
628
|
+
_claimFreshId(id: string, door: string): void;
|
|
588
629
|
/**
|
|
589
630
|
* Advance the spec cursor. Retained as a method so call sites stay
|
|
590
631
|
* one-liners and future cursor-related side effects have a hook.
|