footprintjs 9.38.0 → 9.40.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 +3 -3
- package/dist/esm/index.d.ts +1 -1
- package/dist/esm/index.js +1 -1
- package/dist/esm/lib/engine/handlers/ChildrenExecutor.d.ts +1 -1
- package/dist/esm/lib/engine/handlers/ChildrenExecutor.js +20 -7
- package/dist/esm/lib/engine/handlers/DeciderHandler.js +7 -5
- package/dist/esm/lib/engine/handlers/ResumeEntry.js +9 -40
- package/dist/esm/lib/engine/handlers/SelectorHandler.js +7 -5
- package/dist/esm/lib/engine/handlers/StageRunner.js +3 -3
- package/dist/esm/lib/engine/handlers/SubflowExecutor.js +12 -7
- package/dist/esm/lib/engine/handlers/TraversalDepthError.d.ts +22 -0
- package/dist/esm/lib/engine/handlers/TraversalDepthError.js +39 -0
- package/dist/esm/lib/engine/handlers/commitStage.d.ts +13 -0
- package/dist/esm/lib/engine/handlers/commitStage.js +21 -0
- 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.d.ts +41 -11
- package/dist/esm/lib/engine/traversal/FlowchartTraverser.js +117 -61
- package/dist/esm/lib/{engine/errors → errors}/errorInfo.d.ts +11 -1
- package/dist/esm/lib/errors/errorInfo.js +122 -0
- 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/interrupt.js +13 -5
- 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 +20 -20
- 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/engine/handlers/ChildrenExecutor.js +20 -7
- package/dist/lib/engine/handlers/DeciderHandler.js +7 -5
- package/dist/lib/engine/handlers/ResumeEntry.js +9 -40
- package/dist/lib/engine/handlers/SelectorHandler.js +7 -5
- package/dist/lib/engine/handlers/StageRunner.js +2 -2
- package/dist/lib/engine/handlers/SubflowExecutor.js +12 -7
- package/dist/lib/engine/handlers/TraversalDepthError.js +44 -0
- package/dist/lib/engine/handlers/commitStage.js +25 -0
- 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 +117 -61
- package/dist/lib/errors/errorInfo.js +128 -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/interrupt.js +13 -5
- package/dist/lib/pause/record.js +146 -0
- package/dist/lib/pause/types.js +20 -20
- 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/engine/handlers/ChildrenExecutor.d.ts +1 -1
- package/dist/types/lib/engine/handlers/TraversalDepthError.d.ts +22 -0
- package/dist/types/lib/engine/handlers/commitStage.d.ts +13 -0
- 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/traversal/FlowchartTraverser.d.ts +41 -11
- package/dist/types/lib/{engine/errors → errors}/errorInfo.d.ts +11 -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/errorInfo.js +0 -91
- package/dist/lib/engine/errors/index.js +0 -7
- package/dist/types/lib/engine/errors/index.d.ts +0 -2
package/CLAUDE.md
CHANGED
|
@@ -57,7 +57,7 @@ Entry points: `footprintjs` (public API) · `/recorders` (factories) · `/trace`
|
|
|
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
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
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
|
-
- **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); `
|
|
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); every stored checkpoint enters through `pause/record.ts · decodeCheckpoint` (`checkpointVersion: 1`, one upcaster from unversioned v0 which drops the legacy `continuationStageId`, one validator, one message set; 9.39.0). 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]'`.
|
|
63
63
|
- **Traverser phases** → node-shape reads must use eff* overlay accessors (:646-703) or dynamic StageNode returns break; tail continuations must return ContinuationHops or stacks regrow; decider flat-dispatch must keep InvokerStamp or pause loses its invoker.
|
|
@@ -77,13 +77,13 @@ Seven mechanisms, no state rollback anywhere: **M1** TransactionBuffer staging +
|
|
|
77
77
|
- **The admitted record (9.30.0)** — a commit's bundle, replayed onto the state its stage began from, gives back the stage's read-your-writes view (its working copy, by `deepEqual`, as a record can hold it — through `structuredClone`, so an `Error`'s dropped own fields never count) at every path it touched and at every container and array slot its writes made on the way there, below the stage's address (`runs/<id>` is where a namespaced stage writes, not a value it reads). VERIFIED for every commit that staged a `merge` or a nested op (`TransactionBuffer · admit` → `admission.ts · lossyFamilies`: one `dryFold`, no clone, families of TOUCHED paths compared at their roots); a family that does not fold back is re-encoded as `set` rows of the read-back at its last touch (`emitReadBack`). BY CONSTRUCTION for a stage of `set`/`delete` only, directly under its address (no fold). Every commit that already folded back keeps its bytes. NOT covered: an in-place edit of a value the stage read but never wrote at or above (M2 — still lost), and readers (`commitValueAt`) that disagree with the fold. Pinned by test/lib/memory/property/record-equals-read-back.property.test.ts (independent oracle) and, end to end on both engines, by the witness in property/copy-on-write-fixture.ts.
|
|
78
78
|
- Committed state immutable-after-swap — a generation is NEVER edited, and since 9.29.0 generations SHARE every untouched subtree (copy-on-write). First-touch views AND the transaction buffer's net-change diff base hold bare references on that guarantee — an in-place mutation of a committed container corrupts every generation that shares it and blinds the diff. Every writer copies before it writes (`pathOps · ownSpine` / `ownedRootOf`); pinned by the generations property in test/lib/memory/scenario/copy-on-write-commit.test.ts and the counted guard in test/lib/memory/boundary/commit-cost-independent-of-state.test.ts.
|
|
79
79
|
- Reads are borrowed live references (recorders get them un-cloned) — never mutate.
|
|
80
|
-
- executionIndex globally monotonic per run; continues across resume.
|
|
80
|
+
- executionIndex globally monotonic per run; continues across resume. The FIRST CommitBundle per runtimeStageId is the stage's own: no `phase`, carries its tags. Only a later bundle of the same execution is a continuation, stamped by the WRITER (`phase: 'exit'` = a mount's exit after its merge-back; `phase: 'repeat'` = a fork child's fan-out settle), so a mount with no merge-back (lazy, `parallelForEach` branch, no `outputMapper`) is one bundle. Readers group by runtimeStageId and read `phase`, never the log's shape (9.39.0, F8); a pre-9.39.0 log is inferred only by `inferLegacyPhases` (on `/trace`), only without a tree; tree-less, a `subflowResults` entry marks a mount. Empty commits are deliberate cursor stops.
|
|
81
81
|
- runtimeStageId stamped BEFORE the stage runs — the entire event-correlation model rests on scope+flow events sharing it.
|
|
82
82
|
- One executor = one run at a time (_isExecuting guard). State values must survive structuredClone.
|
|
83
83
|
- A resume re-enters ONCE (`ResumeEntry`, 9.28.0): the stand-in carries the paused stage's id but is only a START node — every graph lookup (node map, loop targets, subflow roots) must go through the real chart, never through it; a pause-path capture seeds its subflow's first entry only; what runs after an entry is read from the chart, never from the checkpoint. A paused-and-resumed run equals the never-paused run — same trace, same final state — for linear, decider-branch, selector-branch and fork-child placements at every depth and with parallel siblings pausing together (fast-check property, test/lib/pause/resume-real-chart.property.test.ts). Qualified: the RECORD differs by design (the stand-in is one more execution of the paused stage; the loop budget is per leg), and the three pinned limitations above hold.
|
|
84
84
|
- Loop-ref stubs deliberately VIOLATE node-id uniqueness — every graph search must skip `isLoopRef` first.
|
|
85
85
|
- runId regenerates per run() AND per resume(); recorders detect new runs via traversalContext.runId (engine never resets them).
|
|
86
|
-
- Recorder errors never abort traversal (isolated
|
|
86
|
+
- Recorder errors never abort traversal (isolated by `recorder/hooks.ts · fire`; every recorder `ErrorEvent.error` is a `StructuredErrorInfo` built once by `recorderFailureEvent`, inline and deferred alike; `errorInfo` lives in the L0 leaf `src/lib/errors/`).
|
|
87
87
|
- Deferred-observer capture default at the executor tier is **'clone'** (DeferredObserverTier.ts:167), not 'summary'.
|
|
88
88
|
- `getSnapshot().recorders` = ONE row per recorder **id**, across both channels and both delivery tiers (collectRecorderSnapshots, FlowChartExecutor.ts) — a shared-name hook (onError/onPause/onResume) puts one recorder on two lists by design, and rows must survive structuredClone (the narrative row drops `rawValue`, a live reference).
|
|
89
89
|
|
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=
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* Responsibilities:
|
|
5
5
|
* - Execute all children in parallel (fork pattern)
|
|
6
6
|
* - Execute selected children based on selector output (multi-choice)
|
|
7
|
-
* -
|
|
7
|
+
* - Name a child's throttling error as an `onThrottled` flow event (9.39.0)
|
|
8
8
|
* - Aggregate results into { childId: { result, isError } }
|
|
9
9
|
*/
|
|
10
10
|
import type { StageContext } from '../../memory/StageContext.js';
|
|
@@ -4,10 +4,11 @@
|
|
|
4
4
|
* Responsibilities:
|
|
5
5
|
* - Execute all children in parallel (fork pattern)
|
|
6
6
|
* - Execute selected children based on selector output (multi-choice)
|
|
7
|
-
* -
|
|
7
|
+
* - Name a child's throttling error as an `onThrottled` flow event (9.39.0)
|
|
8
8
|
* - Aggregate results into { childId: { result, isError } }
|
|
9
9
|
*/
|
|
10
10
|
import { isPauseSignal } from '../../pause/types.js';
|
|
11
|
+
import { isTraversalDepthError } from './TraversalDepthError.js';
|
|
11
12
|
/**
|
|
12
13
|
* The ONE pause a fan-out raises when several of its children paused (9.28.0).
|
|
13
14
|
*
|
|
@@ -66,19 +67,26 @@ export class ChildrenExecutor {
|
|
|
66
67
|
};
|
|
67
68
|
return this.executeNode(child, childContext, childBreakFlag, childBranchPath)
|
|
68
69
|
.then((result) => {
|
|
69
|
-
|
|
70
|
+
// The fan-out's settle commit is a CONTINUATION of the child's
|
|
71
|
+
// execution — named on the record (9.39.0), never inferred.
|
|
72
|
+
childContext.commit('repeat');
|
|
70
73
|
updateParentBreakFlag();
|
|
71
74
|
return { id: child.id, result, isError: false };
|
|
72
75
|
})
|
|
73
76
|
.catch((error) => {
|
|
74
77
|
// PauseSignal is expected control flow — re-throw immediately.
|
|
75
|
-
|
|
78
|
+
// A reached depth cap is a RUN failure, never a contained child
|
|
79
|
+
// result: the child never ran, so there is nothing to record.
|
|
80
|
+
if (isPauseSignal(error) || isTraversalDepthError(error))
|
|
76
81
|
throw error;
|
|
77
|
-
childContext.commit();
|
|
82
|
+
childContext.commit('repeat');
|
|
78
83
|
updateParentBreakFlag();
|
|
79
84
|
this.deps.logger.info(`TREE PIPELINE: executeNodeChildren - Error for id: ${child?.id}`, { error });
|
|
85
|
+
// Throttling is telemetry (R9): an event, not a state key. Before
|
|
86
|
+
// 9.39.0 this wrote `monitor.isThrottled` AFTER the child's last
|
|
87
|
+
// commit, so it landed nowhere.
|
|
80
88
|
if (this.deps.throttlingErrorChecker && this.deps.throttlingErrorChecker(error)) {
|
|
81
|
-
|
|
89
|
+
this.deps.narrativeGenerator.onThrottled?.(child.name, child.id, error, traversalContext);
|
|
82
90
|
}
|
|
83
91
|
return { id: child.id, result: error, isError: true };
|
|
84
92
|
});
|
|
@@ -86,6 +94,9 @@ export class ChildrenExecutor {
|
|
|
86
94
|
const childrenResults = {};
|
|
87
95
|
// Every child that paused, by CHILD index (not settle order) — see raisePauses.
|
|
88
96
|
const pausedAt = [];
|
|
97
|
+
// The first run failure by CHILD index (a reached depth cap) — rethrown
|
|
98
|
+
// after every child settles, ahead of any pause.
|
|
99
|
+
let failure;
|
|
89
100
|
if (node.failFast) {
|
|
90
101
|
// Fail-fast: first child ERROR rejects immediately (unwrapped). A pause
|
|
91
102
|
// is not an error: it settles like a result, so the fork waits for its
|
|
@@ -120,10 +131,12 @@ export class ChildrenExecutor {
|
|
|
120
131
|
pausedAt[i] = s.reason;
|
|
121
132
|
}
|
|
122
133
|
else {
|
|
123
|
-
|
|
134
|
+
failure ??= { error: s.reason };
|
|
124
135
|
}
|
|
125
136
|
});
|
|
126
137
|
}
|
|
138
|
+
if (failure)
|
|
139
|
+
throw failure.error;
|
|
127
140
|
// Re-throw after every child has settled.
|
|
128
141
|
const pauses = pausedAt.filter((p) => p !== undefined);
|
|
129
142
|
if (pauses.length > 0)
|
|
@@ -175,4 +188,4 @@ export class ChildrenExecutor {
|
|
|
175
188
|
return await this.executeNodeChildren(tempNode, context, undefined, branchPath, traversalContext);
|
|
176
189
|
}
|
|
177
190
|
}
|
|
178
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ2hpbGRyZW5FeGVjdXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvZW5naW5lL2hhbmRsZXJzL0NoaWxkcmVuRXhlY3V0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7O0dBUUc7QUFJSCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFRckQ7Ozs7Ozs7Ozs7OztHQVlHO0FBQ0gsU0FBUyxXQUFXLENBQUMsTUFBOEI7SUFDakQsTUFBTSxDQUFDLEtBQUssRUFBRSxHQUFHLE1BQU0sQ0FBQyxHQUFHLE1BQU0sQ0FBQztJQUNsQyxLQUFLLE1BQU0sS0FBSyxJQUFJLE1BQU0sRUFBRSxDQUFDO1FBQzNCLEtBQUssQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDLENBQUM7UUFDOUMsS0FBSyxNQUFNLE9BQU8sSUFBSSxLQUFLLENBQUMsYUFBYTtZQUFFLEtBQUssQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDNUUsQ0FBQztJQUNELE9BQU8sS0FBSyxDQUFDO0FBQ2YsQ0FBQztBQUVELE1BQU0sT0FBTyxnQkFBZ0I7SUFDUDtJQUF5QztJQUE3RCxZQUFvQixJQUErQixFQUFVLFdBQXdDO1FBQWpGLFNBQUksR0FBSixJQUFJLENBQTJCO1FBQVUsZ0JBQVcsR0FBWCxXQUFXLENBQTZCO0lBQUcsQ0FBQztJQUV6Rzs7O09BR0c7SUFDSCxLQUFLLENBQUMsbUJBQW1CLENBQ3ZCLElBQTZCLEVBQzdCLE9BQXFCLEVBQ3JCLGVBQTBDLEVBQzFDLFVBQW1CLEVBQ25CLGdCQUFtQztRQUVuQyxJQUFJLFVBQVUsR0FBRyxDQUFDLENBQUM7UUFDbkIsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxNQUFNLElBQUksQ0FBQyxDQUFDO1FBQ2pELE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxRQUFRLElBQUksRUFBRSxDQUFD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QixDQUFDLFVBQVUsQ0FBQyxZQUFZLEVBQUUsb0JBQW9CLEVBQUUsUUFBUSxDQUFDLE1BQU0sRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO1FBQy9HLG1FQUFtRTtRQUNuRSxJQUFJLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGVBQWUsQ0FBQyxZQUFZLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBRXBHLE1BQU0sUUFBUSxHQUE0QjtZQUN4QyxJQUFJLEVBQUUsZUFBZTtZQUNyQixFQUFFLEVBQUUsZUFBZTtZQUNuQixRQUFRLEVBQUUsZ0JBQWdCO1lBQzFCLDRFQUE0RTtZQUM1RSxRQUFRO1NBQ1QsQ0FBQztRQUNGLE9BQU8sTUFBTSxJQUFJLENBQUMsbUJBQW1CLENBQUMsUUFBUSxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLGdCQUFnQixDQUFDLENBQUM7SUFDcEcsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDaGlsZHJlbkV4ZWN1dG9yIOKAlCBQYXJhbGxlbCBmYW4tb3V0IHZpYSBQcm9taXNlLmFsbFNldHRsZWQuXG4gKlxuICogUmVzcG9uc2liaWxpdGllczpcbiAqIC0gRXhlY3V0ZSBhbGwgY2hpbGRyZW4gaW4gcGFyYWxsZWwgKGZvcmsgcGF0dGVybilcbiAqIC0gRXhlY3V0ZSBzZWxlY3RlZCBjaGlsZHJlbiBiYXNlZCBvbiBzZWxlY3RvciBvdXRwdXQgKG11bHRpLWNob2ljZSlcbiAqIC0gSGFuZGxlIHRocm90dGxpbmcgZXJyb3IgZmxhZ2dpbmcgZm9yIHJhdGUtbGltaXRlZCBvcGVyYXRpb25zXG4gKiAtIEFnZ3JlZ2F0ZSByZXN1bHRzIGludG8geyBjaGlsZElkOiB7IHJlc3VsdCwgaXNFcnJvciB9IH1cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IFN0YWdlQ29udGV4dCB9IGZyb20gJy4uLy4uL21lbW9yeS9TdGFnZUNvbnRleHQuanMnO1xuaW1wb3J0IHR5cGUgeyBQYXVzZVNpZ25hbCB9IGZyb20gJy4uLy4uL3BhdXNlL3R5cGVzLmpzJztcbmltcG9ydCB7IGlzUGF1c2VTaWduYWwgfSBmcm9tICcuLi8uLi9wYXVzZS90eXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7IFNlbGVjdG9yLCBTdGFnZU5vZGUgfSBmcm9tICcuLi9ncmFwaC9TdGFnZU5vZGUuanMnO1xuaW1wb3J0IHR5cGUgeyBUcmF2ZXJzYWxDb250ZXh0IH0gZnJvbSAnLi4vbmFycmF0aXZlL3R5cGVzLmpzJztcbmltcG9ydCB0eXBlIHsgSGFuZGxlckRlcHMsIE5vZGVSZXN1bHRUeXBlIH0gZnJvbSAnLi4vdHlwZXMuanMnO1xuaW1wb3J0IHR5cGUgeyBFeGVjdXRlTm9kZUZuIH0gZnJvbSAnLi90eXBlcy5qcyc7XG5cbmV4cG9ydCB0eXBlIHsgRXhlY3V0ZU5vZGVGbiB9O1xuXG4vKipcbiAqIFRoZSBPTkUgcGF1c2UgYSBmYW4tb3V0IHJhaXNlcyB3aGVuIHNldmVyYWwgb2YgaXRzIGNoaWxkcmVuIHBhdXNlZCAoOS4yOC4wKS5cbiAqXG4gKiBPbmx5IG9uZSBxdWVzdGlvbiBpcyBhc2tlZCBhdCBhIHRpbWUsIHNvIHRoZSBGSVJTVCBjaGlsZCdzIHBhdXNlIChjaGlsZFxuICogb3JkZXIpIGlzIHRoZSBvbmUgcmFpc2VkOyBldmVyeSBvdGhlciBjaGlsZCdzIHBhdXNlIOKAlCBhbmQgYW55IHBhdXNlIGFscmVhZHlcbiAqIHdhaXRpbmcgYmVoaW5kIGl0IOKAlCBpcyBxdWV1ZWQgb24gaXQgKGBQYXVzZVNpZ25hbC5wZW5kaW5nUGF1c2VzYCkgYW5kIHJpZGVzXG4gKiB0aGUgY2hlY2twb2ludCBhcyBgcGVuZGluZ1BhdXNlc2AuIEJlZm9yZSA5LjI4LjAgdGhlIG90aGVycyB3ZXJlIGRyb3BwZWRcbiAqIHNpbGVudGx5OiB0aGUgY2hlY2twb2ludCBhc2tlZCBvbmUgY2hpbGQsIGFuZCB0aGUgcmVzdW1lIG5ldmVyIGFza2VkIHRoZVxuICogcmVzdCAob3IsIG9uIDkuMjcuMCwgcmUtcmFuIHRoZSB3aG9sZSBmYW4tb3V0IGZvcmV2ZXIpLlxuICpcbiAqIEV2ZXJ5IHF1ZXVlZCBlbnRyeSBpcyByZWxhdGl2ZSB0byB0aGUgZmFuLW91dCdzIGxldmVsIOKAlCB0aGUgc2FtZSBsZXZlbCB0aGVcbiAqIGZpcnN0IHNpZ25hbCBpcyBhdCDigJQgc28gdGhlIGJ1YmJsZS11cCBncm93cyB0aGVtIHRvZ2V0aGVyLlxuICovXG5mdW5jdGlvbiByYWlzZVBhdXNlcyhwYXVzZXM6IHJlYWRvbmx5IFBhdXNlU2lnbmFsW10pOiBQYXVzZVNpZ25hbCB7XG4gIGNvbnN0IFtmaXJzdCwgLi4ub3RoZXJzXSA9IHBhdXNlcztcbiAgZm9yIChjb25zdCBvdGhlciBvZiBvdGhlcnMpIHtcbiAgICBmaXJzdC5hZGRQZW5kaW5nUGF1c2Uob3RoZXIudG9QZW5kaW5nUGF1c2UoKSk7XG4gICAgZm9yIChjb25zdCB3YWl0aW5nIG9mIG90aGVyLnBlbmRpbmdQYXVzZXMpIGZpcnN0LmFkZFBlbmRpbmdQYXVzZSh3YWl0aW5nKTtcbiAgfVxuICByZXR1cm4gZmlyc3Q7XG59XG5cbmV4cG9ydCBjbGFzcyBDaGlsZHJlbkV4ZWN1dG9yPFRPdXQgPSBhbnksIFRTY29wZSA9IGFueT4ge1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGRlcHM6IEhhbmRsZXJEZXBzPFRPdXQsIFRTY29wZT4sIHByaXZhdGUgZXhlY3V0ZU5vZGU6IEV4ZWN1dGVOb2RlRm48VE91dCwgVFNjb3BlPikge31cblxuICAvKipcbiAgICogRXhlY3V0ZSBhbGwgY2hpbGRyZW4gaW4gcGFyYWxsZWwuIEVhY2ggY2hpbGQgY29tbWl0cyBvbiBzZXR0bGUuXG4gICAqIFVzZXMgUHJvbWlzZS5hbGxTZXR0bGVkIHRvIGVuc3VyZSBhbGwgY2hpbGRyZW4gY29tcGxldGUgZXZlbiBpZiBzb21lIGZhaWwuXG4gICAqL1xuICBhc3luYyBleGVjdXRlTm9kZUNoaWxkcmVuKFxuICAgIG5vZGU6IFN0YWdlTm9kZTxUT3V0LCBUU2NvcGU+LFxuICAgIGNvbnRleHQ6IFN0YWdlQ29udGV4dCxcbiAgICBwYXJlbnRCcmVha0ZsYWc/OiB7IHNob3VsZEJyZWFrOiBib29sZWFuIH0sXG4gICAgYnJhbmNoUGF0aD86IHN0cmluZyxcbiAgICB0cmF2ZXJzYWxDb250ZXh0PzogVHJhdmVyc2FsQ29udGV4dCxcbiAgKTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCBOb2RlUmVzdWx0VHlwZT4+IHtcbiAgICBsZXQgYnJlYWtDb3VudCA9IDA7XG4gICAgY29uc3QgdG90YWxDaGlsZHJlbiA9IG5vZGUuY2hpbGRyZW4/Lmxlbmd0aCA/PyAwO1xuICAgIGNvbnN0IGFsbENoaWxkcmVuID0gbm9kZS5jaGlsZHJlbiA/PyBbXTtcblxuICAgIC8vIE5hcnJhdGl2ZTogY2FwdHVyZSB0aGUgZmFuLW91dFxuICAgIGNvbnN0IGNoaWxkRGlzcGxheU5hbWVzID0gYWxsQ2hpbGRyZW4ubWFwKChjKSA9PiBjLm5hbWUpO1xuICAgIHRoaXMuZGVwcy5uYXJyYXRpdmVHZW5lcmF0b3Iub25Gb3JrKG5vZGUubmFtZSwgY2hpbGREaXNwbGF5TmFtZXMsIHRyYXZlcnNhbENvbnRleHQpO1xuICAgIC8vIFByb3Bvc2FsICMwMDM6IGZpcmUgb25TdGFnZUV4ZWN1dGVkIGZvciB0aGUgZm9yayBwYXJlbnQgQUZURVJcbiAgICAvLyB0aGUgc3BlY2lhbGl6ZWQgZXZlbnQgc28gY29uc3VtZXJzIHRyYWNraW5nIFwiZGlkIHRoaXMgc3RhZ2UgcnVuXCJcbiAgICAvLyB3b3JrIHVuaWZvcm1seS4gRmlyZXMgQkVGT1JFIGNoaWxkcmVuIGV4ZWN1dGUg4oCUIG1hdGNoaW5nIHRoZVxuICAgIC8vIFwiZGVjaXNpb24gbWFkZVwiIHNlbWFudGljICh0aGUgZm9yaydzIG1haW4gd29yayBpcyB0aGUgZGVjaXNpb25cbiAgICAvLyB0byBmYW4gb3V0OyBjaGlsZHJlbiBhcmUgc2VwYXJhdGUgc3RhZ2VzIHdpdGggdGhlaXIgb3duIGxpZmVjeWNsZXMpLlxuICAgIHRoaXMuZGVwcy5uYXJyYXRpdmVHZW5lcmF0b3Iub25TdGFnZUV4ZWN1dGVkKG5vZGUubmFtZSwgbm9kZS5kZXNjcmlwdGlvbiwgdHJhdmVyc2FsQ29udGV4dCwgJ2ZvcmsnKTtcblxuICAgIGNvbnN0IGNoaWxkUHJvbWlzZXM6IFByb21pc2U8Tm9kZVJlc3VsdFR5cGU+W10gPSBhbGxDaGlsZHJlbi5tYXAoKGNoaWxkKSA9PiB7XG4gICAgICBjb25zdCBjaGlsZEJyYW5jaFBhdGggPSBicmFuY2hQYXRoIHx8IGNoaWxkLmlkO1xuICAgICAgY29uc3QgY2hpbGRDb250ZXh0ID0gY29udGV4dC5jcmVhdGVDaGlsZChjaGlsZEJyYW5jaFBhdGggYXMgc3RyaW5nLCBjaGlsZC5pZCBhcyBzdHJpbmcsIGNoaWxkLm5hbWUsIGNoaWxkLmlkKTtcbiAgICAgIGNvbnN0IGNoaWxkQnJlYWtGbGFnID0geyBzaG91bGRCcmVhazogZmFsc2UgfTtcblxuICAgICAgY29uc3QgdXBkYXRlUGFyZW50QnJlYWtGbGFnID0gKCkgPT4ge1xuICAgICAgICBpZiAoY2hpbGRCcmVha0ZsYWcuc2hvdWxkQnJlYWspIGJyZWFrQ291bnQgKz0gMTtcbiAgICAgICAgaWYgKHBhcmVudEJyZWFrRmxhZyAmJiBicmVha0NvdW50ID09PSB0b3RhbENoaWxkcmVuKSBwYXJlbnRCcmVha0ZsYWcuc2hvdWxkQnJlYWsgPSB0cnVlO1xuICAgICAgfTtcblxuICAgICAgcmV0dXJuIHRoaXMuZXhlY3V0ZU5vZGUoY2hpbGQsIGNoaWxkQ29udGV4dCwgY2hpbGRCcmVha0ZsYWcsIGNoaWxkQnJhbmNoUGF0aClcbiAgICAgICAgLnRoZW4oKHJlc3VsdCkgPT4ge1xuICAgICAgICAgIGNoaWxkQ29udGV4dC5jb21taXQoKTtcbiAgICAgICAgICB1cGRhdGVQYXJlbnRCcmVha0ZsYWcoKTtcbiAgICAgICAgICByZXR1cm4geyBpZDogY2hpbGQuaWQhLCByZXN1bHQsIGlzRXJyb3I6IGZhbHNlIH07XG4gICAgICAgIH0pXG4gICAgICAgIC5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgICAgICAvLyBQYXVzZVNpZ25hbCBpcyBleHBlY3RlZCBjb250cm9sIGZsb3cg4oCUIHJlLXRocm93IGltbWVkaWF0ZWx5LlxuICAgICAgICAgIGlmIChpc1BhdXNlU2lnbmFsKGVycm9yKSkgdGhyb3cgZXJyb3I7XG4gICAgICAgICAgY2hpbGRDb250ZXh0LmNvbW1pdCgpO1xuICAgICAgICAgIHVwZGF0ZVBhcmVudEJyZWFrRmxhZygpO1xuICAgICAgICAgIHRoaXMuZGVwcy5sb2dnZXIuaW5mbyhgVFJFRSBQSVBFTElORTogZXhlY3V0ZU5vZGVDaGlsZHJlbiAtIEVycm9yIGZvciBpZDogJHtjaGlsZD8uaWR9YCwgeyBlcnJvciB9KTtcbiAgICAgICAgICBpZiAodGhpcy5kZXBzLnRocm90dGxpbmdFcnJvckNoZWNrZXIgJiYgdGhpcy5kZXBzLnRocm90dGxpbmdFcnJvckNoZWNrZXIoZXJyb3IpKSB7XG4gICAgICAgICAgICBjaGlsZENvbnRleHQudXBkYXRlT2JqZWN0KFsnbW9uaXRvciddLCAnaXNUaHJvdHRsZWQnLCB0cnVlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHsgaWQ6IGNoaWxkLmlkISwgcmVzdWx0OiBlcnJvciwgaXNFcnJvcjogdHJ1ZSB9O1xuICAgICAgICB9KTtcbiAgICB9KTtcblxuICAgIGNvbnN0IGNoaWxkcmVuUmVzdWx0czogUmVjb3JkPHN0cmluZywgTm9kZVJlc3VsdFR5cGU+ID0ge307XG4gICAgLy8gRXZlcnkgY2hpbGQgdGhhdCBwYXVzZWQsIGJ5IENISUxEIGluZGV4IChub3Qgc2V0dGxlIG9yZGVyKSDigJQgc2VlIHJhaXNlUGF1c2VzLlxuICAgIGNvbnN0IHBhdXNlZEF0OiAoUGF1c2VTaWduYWwgfCB1bmRlZmluZWQpW10gPSBbXTtcblxuICAgIGlmIChub2RlLmZhaWxGYXN0KSB7XG4gICAgICAvLyBGYWlsLWZhc3Q6IGZpcnN0IGNoaWxkIEVSUk9SIHJlamVjdHMgaW1tZWRpYXRlbHkgKHVud3JhcHBlZCkuIEEgcGF1c2VcbiAgICAgIC8vIGlzIG5vdCBhbiBlcnJvcjogaXQgc2V0dGxlcyBsaWtlIGEgcmVzdWx0LCBzbyB0aGUgZm9yayB3YWl0cyBmb3IgaXRzXG4gICAgICAvLyBzaWJsaW5ncyBiZWZvcmUgaXQgcGF1c2VzIOKAlCB0aGVpciB3cml0ZXMgbGFuZCBiZWZvcmUgdGhlIGNoZWNrcG9pbnRcbiAgICAgIC8vIGlzIHRha2VuLCBhbmQgYSBzZWNvbmQgcGF1c2luZyBzaWJsaW5nIGlzIHNlZW4sIG5vdCByYWNlZCBwYXN0LlxuICAgICAgY29uc3QgcmVzdWx0cyA9IGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgICBhbGxDaGlsZHJlbi5tYXAoKGNoaWxkLCBpKSA9PlxuICAgICAgICAgIGNoaWxkUHJvbWlzZXNbaV0udGhlbihcbiAgICAgICAgICAgIChyKSA9PiB7XG4gICAgICAgICAgICAgIGlmIChyLmlzRXJyb3IpIHRocm93IHIucmVzdWx0O1xuICAgICAgICAgICAgICByZXR1cm4gcjtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAoZXJyb3I6IHVua25vd24pID0+IHtcbiAgICAgICAgICAgICAgaWYgKCFpc1BhdXNlU2lnbmFsKGVycm9yKSkgdGhyb3cgZXJyb3I7XG4gICAgICAgICAgICAgIHBhdXNlZEF0W2ldID0gZXJyb3I7XG4gICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICksXG4gICAgICAgICksXG4gICAgICApO1xuICAgICAgZm9yIChjb25zdCByIG9mIHJlc3VsdHMpIHtcbiAgICAgICAgaWYgKHIgPT09IHVuZGVmaW5lZCkgY29udGludWU7IC8vIGEgcGF1c2VkIGNoaWxkXG4gICAgICAgIGNoaWxkcmVuUmVzdWx0c1tyLmlkXSA9IHsgaWQ6IHIuaWQsIHJlc3VsdDogci5yZXN1bHQsIGlzRXJyb3I6IHIuaXNFcnJvciA/PyBmYWxzZSB9O1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBEZWZhdWx0OiBydW4gYWxsIGNoaWxkcmVuIHRvIGNvbXBsZXRpb24gZXZlbiBpZiBzb21lIGZhaWxcbiAgICAgIGNvbnN0IHNldHRsZWQgPSBhd2FpdCBQcm9taXNlLmFsbFNldHRsZWQoY2hpbGRQcm9taXNlcyk7XG4gICAgICBzZXR0bGVkLmZvckVhY2goKHMsIGkpID0+IHtcbiAgICAgICAgaWYgKHMuc3RhdHVzID09PSAnZnVsZmlsbGVkJykge1xuICAgICAgICAgIGNvbnN0IHsgaWQsIHJlc3VsdCwgaXNFcnJvciB9ID0gcy52YWx1ZTtcbiAgICAgICAgICBjaGlsZHJlblJlc3VsdHNbaWRdID0geyBpZCwgcmVzdWx0LCBpc0Vycm9yOiBpc0Vycm9yID8/IGZhbHNlIH07XG4gICAgICAgIH0gZWxzZSBpZiAoaXNQYXVzZVNpZ25hbChzLnJlYXNvbikpIHtcbiAgICAgICAgICAvLyBQYXVzZVNpZ25hbCBmcm9tIGEgY2hpbGQg4oCUIHJlLXRocm93biBhZnRlciBhbGwgY2hpbGRyZW4gc2V0dGxlLlxuICAgICAgICAgIHBhdXNlZEF0W2ldID0gcy5yZWFzb247XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5kZXBzLmxvZ2dlci5lcnJvcihgRXhlY3V0aW9uIGZhaWxlZDogJHtzLnJlYXNvbn1gKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gUmUtdGhyb3cgYWZ0ZXIgZXZlcnkgY2hpbGQgaGFzIHNldHRsZWQuXG4gICAgY29uc3QgcGF1c2VzID0gcGF1c2VkQXQuZmlsdGVyKChwKTogcCBpcyBQYXVzZVNpZ25hbCA9PiBwICE9PSB1bmRlZmluZWQpO1xuICAgIGlmIChwYXVzZXMubGVuZ3RoID4gMCkgdGhyb3cgcmFpc2VQYXVzZXMocGF1c2VzKTtcblxuICAgIHJldHVybiBjaGlsZHJlblJlc3VsdHM7XG4gIH1cblxuICAvKipcbiAgICogRXhlY3V0ZSBzZWxlY3RlZCBjaGlsZHJlbiBiYXNlZCBvbiBzZWxlY3RvciByZXN1bHQuXG4gICAqIFZhbGlkYXRlcyBJRHMsIHJlY29yZHMgc2VsZWN0aW9uIGluZm8sIHRoZW4gZGVsZWdhdGVzIHRvIGV4ZWN1dGVOb2RlQ2hpbGRyZW4uXG4gICAqL1xuICBhc3luYyBleGVjdXRlU2VsZWN0ZWRDaGlsZHJlbihcbiAgICBzZWxlY3RvcjogU2VsZWN0b3IsXG4gICAgY2hpbGRyZW46IFN0YWdlTm9kZTxUT3V0LCBUU2NvcGU+W10sXG4gICAgaW5wdXQ6IGFueSxcbiAgICBjb250ZXh0OiBTdGFnZUNvbnRleHQsXG4gICAgYnJhbmNoUGF0aDogc3RyaW5nLFxuICAgIHRyYXZlcnNhbENvbnRleHQ/OiBUcmF2ZXJzYWxDb250ZXh0LFxuICAgIGZhaWxGYXN0PzogYm9vbGVhbixcbiAgKTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCBOb2RlUmVzdWx0VHlwZT4+IHtcbiAgICBjb25zdCBzZWxlY3RvclJlc3VsdCA9IGF3YWl0IHNlbGVjdG9yKGlucHV0KTtcbiAgICBjb25zdCBzZWxlY3RlZElkcyA9IEFycmF5LmlzQXJyYXkoc2VsZWN0b3JSZXN1bHQpID8gc2VsZWN0b3JSZXN1bHQgOiBbc2VsZWN0b3JSZXN1bHRdO1xuXG4gICAgY29udGV4dC5hZGRMb2coJ3NlbGVjdGVkQ2hpbGRJZHMnLCBzZWxlY3RlZElkcyk7XG4gICAgY29udGV4dC5hZGRMb2coJ3NlbGVjdG9yUGF0dGVybicsICdtdWx0aS1jaG9pY2UnKTtcblxuICAgIGlmIChzZWxlY3RlZElkcy5sZW5ndGggPT09IDApIHtcbiAgICAgIGNvbnRleHQuYWRkTG9nKCdza2lwcGVkQWxsQ2hpbGRyZW4nLCB0cnVlKTtcbiAgICAgIHJldHVybiB7fTtcbiAgICB9XG5cbiAgICBjb25zdCBzZWxlY3RlZENoaWxkcmVuID0gY2hpbGRyZW4uZmlsdGVyKChjKSA9PiBzZWxlY3RlZElkcy5pbmNsdWRlcyhjLmlkISkpO1xuXG4gICAgLy8gVmFsaWRhdGUgYWxsIElEcyBleGlzdCAoZmFpbCBmYXN0KVxuICAgIGlmIChzZWxlY3RlZENoaWxkcmVuLmxlbmd0aCAhPT0gc2VsZWN0ZWRJZHMubGVuZ3RoKSB7XG4gICAgICBjb25zdCBjaGlsZElkcyA9IGNoaWxkcmVuLm1hcCgoYykgPT4gYy5pZCk7XG4gICAgICBjb25zdCBtaXNzaW5nID0gc2VsZWN0ZWRJZHMuZmlsdGVyKChpZCkgPT4gIWNoaWxkSWRzLmluY2x1ZGVzKGlkKSk7XG4gICAgICBjb25zdCBlcnJvck1lc3NhZ2UgPSBgU2VsZWN0b3IgcmV0dXJuZWQgdW5rbm93biBjaGlsZCBJRHM6ICR7bWlzc2luZy5qb2luKCcsICcpfS4gQXZhaWxhYmxlOiAke2NoaWxkSWRzLmpvaW4oXG4gICAgICAgICcsICcsXG4gICAgICApfWA7XG4gICAgICB0aGlzLmRlcHMubG9nZ2VyLmVycm9yKGBFcnJvciBpbiBwaXBlbGluZSAoJHticmFuY2hQYXRofSk6YCwgeyBlcnJvcjogZXJyb3JNZXNzYWdlIH0pO1xuICAgICAgY29udGV4dC5hZGRFcnJvcignc2VsZWN0b3JFcnJvcicsIGVycm9yTWVzc2FnZSk7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoZXJyb3JNZXNzYWdlKTtcbiAgICB9XG5cbiAgICBjb25zdCBza2lwcGVkSWRzID0gY2hpbGRyZW4uZmlsdGVyKChjKSA9PiAhc2VsZWN0ZWRJZHMuaW5jbHVkZXMoYy5pZCEpKS5tYXAoKGMpID0+IGMuaWQpO1xuICAgIGlmIChza2lwcGVkSWRzLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnRleHQuYWRkTG9nKCdza2lwcGVkQ2hpbGRJZHMnLCBza2lwcGVkSWRzKTtcbiAgICB9XG5cbiAgICBjb25zdCBzZWxlY3RlZE5hbWVzID0gc2VsZWN0ZWRDaGlsZHJlbi5tYXAoKGMpID0+IGMubmFtZSkuam9pbignLCAnKTtcbiAgICBjb250ZXh0LmFkZEZsb3dEZWJ1Z01lc3NhZ2UoXG4gICAgICAnc2VsZWN0ZWQnLFxuICAgICAgYFJ1bm5pbmcgJHtzZWxlY3RlZE5hbWVzfSAoJHtzZWxlY3RlZENoaWxkcmVuLmxlbmd0aH0gb2YgJHtjaGlsZHJlbi5sZW5ndGh9IG1hdGNoZWQpYCxcbiAgICAgIHsgY291bnQ6IHNlbGVjdGVkQ2hpbGRyZW4ubGVuZ3RoLCB0YXJnZXRTdGFnZTogc2VsZWN0ZWRDaGlsZHJlbi5tYXAoKGMpID0+IGMubmFtZSkgfSxcbiAgICApO1xuXG4gICAgLy8gTmFycmF0aXZlOiBjYXB0dXJlIHRoZSBzZWxlY3Rpb25cbiAgICBjb25zdCBzZWxlY3RlZERpc3BsYXlOYW1lcyA9IHNlbGVjdGVkQ2hpbGRyZW4ubWFwKChjKSA9PiBjLm5hbWUpO1xuICAgIGNvbnN0IHNlbGVjdG9yTmFtZSA9IGNvbnRleHQuc3RhZ2VOYW1lIHx8ICdzZWxlY3Rvcic7XG4gICAgdGhpcy5kZXBzLm5hcnJhdGl2ZUdlbmVyYXRvci5vblNlbGVjdGVkKHNlbGVjdG9yTmFtZSwgc2VsZWN0ZWREaXNwbGF5TmFtZXMsIGNoaWxkcmVuLmxlbmd0aCwgdHJhdmVyc2FsQ29udGV4dCk7XG4gICAgLy8gUHJvcG9zYWwgIzAwMzogZmlyZSBvblN0YWdlRXhlY3V0ZWQgQUZURVIgdGhlIHNwZWNpYWxpemVkIGV2ZW50LlxuICAgIHRoaXMuZGVwcy5uYXJyYXRpdmVHZW5lcmF0b3Iub25TdGFnZUV4ZWN1dGVkKHNlbGVjdG9yTmFtZSwgdW5kZWZpbmVkLCB0cmF2ZXJzYWxDb250ZXh0LCAnc2VsZWN0b3InKTtcblxuICAgIGNvbnN0IHRlbXBOb2RlOiBTdGFnZU5vZGU8VE91dCwgVFNjb3BlPiA9IHtcbiAgICAgIG5hbWU6ICdzZWxlY3Rvci10ZW1wJyxcbiAgICAgIGlkOiAnc2VsZWN0b3ItdGVtcCcsXG4gICAgICBjaGlsZHJlbjogc2VsZWN0ZWRDaGlsZHJlbixcbiAgICAgIC8vIEhvbm9yIHRoZSBzZWxlY3RvciBub2RlJ3MgZmFuLW91dCBlcnJvciBtb2RlIChQcm9taXNlLmFsbCB2cyBhbGxTZXR0bGVkKS5cbiAgICAgIGZhaWxGYXN0LFxuICAgIH07XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuZXhlY3V0ZU5vZGVDaGlsZHJlbih0ZW1wTm9kZSwgY29udGV4dCwgdW5kZWZpbmVkLCBicmFuY2hQYXRoLCB0cmF2ZXJzYWxDb250ZXh0KTtcbiAgfVxufVxuIl19
|
|
191
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ2hpbGRyZW5FeGVjdXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvZW5naW5lL2hhbmRsZXJzL0NoaWxkcmVuRXhlY3V0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7O0dBUUc7QUFJSCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFJckQsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFLakU7Ozs7Ozs7Ozs7OztHQVlHO0FBQ0gsU0FBUyxXQUFXLENBQUMsTUFBOEI7SUFDakQsTUFBTSxDQUFDLEtBQUssRUFBRSxHQUFHLE1BQU0sQ0FBQyxHQUFHLE1BQU0sQ0FBQztJQUNsQyxLQUFLLE1BQU0sS0FBSyxJQUFJLE1BQU0sRUFBRSxDQUFDO1FBQzNCLEtBQUssQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDLENBQUM7UUFDOUMsS0FBSyxNQUFNLE9BQU8sSUFBSSxLQUFLLENBQUMsYUFBYTtZQUFFLEtBQUssQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDNUUsQ0FBQztJQUNELE9BQU8sS0FBSyxDQUFDO0FBQ2YsQ0FBQztBQUVELE1BQU0sT0FBTyxnQkFBZ0I7SUFDUDtJQUF5QztJQUE3RCxZQUFvQixJQUErQixFQUFVLFdBQXdDO1FBQWpGLFNBQUksR0FBSixJQUFJLENBQTJCO1FBQVUsZ0JBQVcsR0FBWCxXQUFXLENBQTZCO0lBQUcsQ0FBQztJQUV6Rzs7O09BR0c7SUFDSCxLQUFLLENBQUMsbUJBQW1CLENBQ3ZCLElBQTZCLEVBQzdCLE9BQXFCLEVBQ3JCLGVBQTBDLEVBQzFDLFVBQW1CLEVBQ25CLGdCQUFtQztRQUVuQyxJQUFJLFVBQVUsR0FBRyxDQUFDLENBQUM7UUFDbkIsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxNQUFNLElBQUksQ0FBQyxDQUFDO1FBQ2pE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RSxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUUsV0FBVyxFQUFFLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQ3JGLENBQUM7UUFFRixtQ0FBbUM7UUFDbkMsTUFBTSxvQkFBb0IsR0FBRyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNqRSxNQUFNLFlBQVksR0FBRyxPQUFPLENBQUMsU0FBUyxJQUFJLFVBQVUsQ0FBQztRQUNyRCxJQUFJLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFVBQVUsQ0FBQyxZQUFZLEVBQUUsb0JBQW9CLEVBQUUsUUFBUSxDQUFDLE1BQU0sRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO1FBQy9HLG1FQUFtRTtRQUNuRSxJQUFJLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGVBQWUsQ0FBQyxZQUFZLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBRXBHLE1BQU0sUUFBUSxHQUE0QjtZQUN4QyxJQUFJLEVBQUUsZUFBZTtZQUNyQixFQUFFLEVBQUUsZUFBZTtZQUNuQixRQUFRLEVBQUUsZ0JBQWdCO1lBQzFCLDRFQUE0RTtZQUM1RSxRQUFRO1NBQ1QsQ0FBQztRQUNGLE9BQU8sTUFBTSxJQUFJLENBQUMsbUJBQW1CLENBQUMsUUFBUSxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLGdCQUFnQixDQUFDLENBQUM7SUFDcEcsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDaGlsZHJlbkV4ZWN1dG9yIOKAlCBQYXJhbGxlbCBmYW4tb3V0IHZpYSBQcm9taXNlLmFsbFNldHRsZWQuXG4gKlxuICogUmVzcG9uc2liaWxpdGllczpcbiAqIC0gRXhlY3V0ZSBhbGwgY2hpbGRyZW4gaW4gcGFyYWxsZWwgKGZvcmsgcGF0dGVybilcbiAqIC0gRXhlY3V0ZSBzZWxlY3RlZCBjaGlsZHJlbiBiYXNlZCBvbiBzZWxlY3RvciBvdXRwdXQgKG11bHRpLWNob2ljZSlcbiAqIC0gTmFtZSBhIGNoaWxkJ3MgdGhyb3R0bGluZyBlcnJvciBhcyBhbiBgb25UaHJvdHRsZWRgIGZsb3cgZXZlbnQgKDkuMzkuMClcbiAqIC0gQWdncmVnYXRlIHJlc3VsdHMgaW50byB7IGNoaWxkSWQ6IHsgcmVzdWx0LCBpc0Vycm9yIH0gfVxuICovXG5cbmltcG9ydCB0eXBlIHsgU3RhZ2VDb250ZXh0IH0gZnJvbSAnLi4vLi4vbWVtb3J5L1N0YWdlQ29udGV4dC5qcyc7XG5pbXBvcnQgdHlwZSB7IFBhdXNlU2lnbmFsIH0gZnJvbSAnLi4vLi4vcGF1c2UvdHlwZXMuanMnO1xuaW1wb3J0IHsgaXNQYXVzZVNpZ25hbCB9IGZyb20gJy4uLy4uL3BhdXNlL3R5cGVzLmpzJztcbmltcG9ydCB0eXBlIHsgU2VsZWN0b3IsIFN0YWdlTm9kZSB9IGZyb20gJy4uL2dyYXBoL1N0YWdlTm9kZS5qcyc7XG5pbXBvcnQgdHlwZSB7IFRyYXZlcnNhbENvbnRleHQgfSBmcm9tICcuLi9uYXJyYXRpdmUvdHlwZXMuanMnO1xuaW1wb3J0IHR5cGUgeyBIYW5kbGVyRGVwcywgTm9kZVJlc3VsdFR5cGUgfSBmcm9tICcuLi90eXBlcy5qcyc7XG5pbXBvcnQgeyBpc1RyYXZlcnNhbERlcHRoRXJyb3IgfSBmcm9tICcuL1RyYXZlcnNhbERlcHRoRXJyb3IuanMnO1xuaW1wb3J0IHR5cGUgeyBFeGVjdXRlTm9kZUZuIH0gZnJvbSAnLi90eXBlcy5qcyc7XG5cbmV4cG9ydCB0eXBlIHsgRXhlY3V0ZU5vZGVGbiB9O1xuXG4vKipcbiAqIFRoZSBPTkUgcGF1c2UgYSBmYW4tb3V0IHJhaXNlcyB3aGVuIHNldmVyYWwgb2YgaXRzIGNoaWxkcmVuIHBhdXNlZCAoOS4yOC4wKS5cbiAqXG4gKiBPbmx5IG9uZSBxdWVzdGlvbiBpcyBhc2tlZCBhdCBhIHRpbWUsIHNvIHRoZSBGSVJTVCBjaGlsZCdzIHBhdXNlIChjaGlsZFxuICogb3JkZXIpIGlzIHRoZSBvbmUgcmFpc2VkOyBldmVyeSBvdGhlciBjaGlsZCdzIHBhdXNlIOKAlCBhbmQgYW55IHBhdXNlIGFscmVhZHlcbiAqIHdhaXRpbmcgYmVoaW5kIGl0IOKAlCBpcyBxdWV1ZWQgb24gaXQgKGBQYXVzZVNpZ25hbC5wZW5kaW5nUGF1c2VzYCkgYW5kIHJpZGVzXG4gKiB0aGUgY2hlY2twb2ludCBhcyBgcGVuZGluZ1BhdXNlc2AuIEJlZm9yZSA5LjI4LjAgdGhlIG90aGVycyB3ZXJlIGRyb3BwZWRcbiAqIHNpbGVudGx5OiB0aGUgY2hlY2twb2ludCBhc2tlZCBvbmUgY2hpbGQsIGFuZCB0aGUgcmVzdW1lIG5ldmVyIGFza2VkIHRoZVxuICogcmVzdCAob3IsIG9uIDkuMjcuMCwgcmUtcmFuIHRoZSB3aG9sZSBmYW4tb3V0IGZvcmV2ZXIpLlxuICpcbiAqIEV2ZXJ5IHF1ZXVlZCBlbnRyeSBpcyByZWxhdGl2ZSB0byB0aGUgZmFuLW91dCdzIGxldmVsIOKAlCB0aGUgc2FtZSBsZXZlbCB0aGVcbiAqIGZpcnN0IHNpZ25hbCBpcyBhdCDigJQgc28gdGhlIGJ1YmJsZS11cCBncm93cyB0aGVtIHRvZ2V0aGVyLlxuICovXG5mdW5jdGlvbiByYWlzZVBhdXNlcyhwYXVzZXM6IHJlYWRvbmx5IFBhdXNlU2lnbmFsW10pOiBQYXVzZVNpZ25hbCB7XG4gIGNvbnN0IFtmaXJzdCwgLi4ub3RoZXJzXSA9IHBhdXNlcztcbiAgZm9yIChjb25zdCBvdGhlciBvZiBvdGhlcnMpIHtcbiAgICBmaXJzdC5hZGRQZW5kaW5nUGF1c2Uob3RoZXIudG9QZW5kaW5nUGF1c2UoKSk7XG4gICAgZm9yIChjb25zdCB3YWl0aW5nIG9mIG90aGVyLnBlbmRpbmdQYXVzZXMpIGZpcnN0LmFkZFBlbmRpbmdQYXVzZSh3YWl0aW5nKTtcbiAgfVxuICByZXR1cm4gZmlyc3Q7XG59XG5cbmV4cG9ydCBjbGFzcyBDaGlsZHJlbkV4ZWN1dG9yPFRPdXQgPSBhbnksIFRTY29wZSA9IGFueT4ge1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGRlcHM6IEhhbmRsZXJEZXBzPFRPdXQsIFRTY29wZT4sIHByaXZhdGUgZXhlY3V0ZU5vZGU6IEV4ZWN1dGVOb2RlRm48VE91dCwgVFNjb3BlPikge31cblxuICAvKipcbiAgICogRXhlY3V0ZSBhbGwgY2hpbGRyZW4gaW4gcGFyYWxsZWwuIEVhY2ggY2hpbGQgY29tbWl0cyBvbiBzZXR0bGUuXG4gICAqIFVzZXMgUHJvbWlzZS5hbGxTZXR0bGVkIHRvIGVuc3VyZSBhbGwgY2hpbGRyZW4gY29tcGxldGUgZXZlbiBpZiBzb21lIGZhaWwuXG4gICAqL1xuICBhc3luYyBleGVjdXRlTm9kZUNoaWxkcmVuKFxuICAgIG5vZGU6IFN0YWdlTm9kZTxUT3V0LCBUU2NvcGU+LFxuICAgIGNvbnRleHQ6IFN0YWdlQ29udGV4dCxcbiAgICBwYXJlbnRCcmVha0ZsYWc/OiB7IHNob3VsZEJyZWFrOiBib29sZWFuIH0sXG4gICAgYnJhbmNoUGF0aD86IHN0cmluZyxcbiAgICB0cmF2ZXJzYWxDb250ZXh0PzogVHJhdmVyc2FsQ29udGV4dCxcbiAgKTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCBOb2RlUmVzdWx0VHlwZT4+IHtcbiAgICBsZXQgYnJlYWtDb3VudCA9IDA7XG4gICAgY29uc3QgdG90YWxDaGlsZHJlbiA9IG5vZGUuY2hpbGRyZW4/Lmxlbmd0aCA/PyAwO1xuICAgIGNvbnN0IGFsbENoaWxkcmVuID0gbm9kZS5jaGlsZHJlbiA/PyBbXTtcblxuICAgIC8vIE5hcnJhdGl2ZTogY2FwdHVyZSB0aGUgZmFuLW91dFxuICAgIGNvbnN0IGNoaWxkRGlzcGxheU5hbWVzID0gYWxsQ2hpbGRyZW4ubWFwKChjKSA9PiBjLm5hbWUpO1xuICAgIHRoaXMuZGVwcy5uYXJyYXRpdmVHZW5lcmF0b3Iub25Gb3JrKG5vZGUubmFtZSwgY2hpbGREaXNwbGF5TmFtZXMsIHRyYXZlcnNhbENvbnRleHQpO1xuICAgIC8vIFByb3Bvc2FsICMwMDM6IGZpcmUgb25TdGFnZUV4ZWN1dGVkIGZvciB0aGUgZm9yayBwYXJlbnQgQUZURVJcbiAgICAvLyB0aGUgc3BlY2lhbGl6ZWQgZXZlbnQgc28gY29uc3VtZXJzIHRyYWNraW5nIFwiZGlkIHRoaXMgc3RhZ2UgcnVuXCJcbiAgICAvLyB3b3JrIHVuaWZvcm1seS4gRmlyZXMgQkVGT1JFIGNoaWxkcmVuIGV4ZWN1dGUg4oCUIG1hdGNoaW5nIHRoZVxuICAgIC8vIFwiZGVjaXNpb24gbWFkZVwiIHNlbWFudGljICh0aGUgZm9yaydzIG1haW4gd29yayBpcyB0aGUgZGVjaXNpb25cbiAgICAvLyB0byBmYW4gb3V0OyBjaGlsZHJlbiBhcmUgc2VwYXJhdGUgc3RhZ2VzIHdpdGggdGhlaXIgb3duIGxpZmVjeWNsZXMpLlxuICAgIHRoaXMuZGVwcy5uYXJyYXRpdmVHZW5lcmF0b3Iub25TdGFnZUV4ZWN1dGVkKG5vZGUubmFtZSwgbm9kZS5kZXNjcmlwdGlvbiwgdHJhdmVyc2FsQ29udGV4dCwgJ2ZvcmsnKTtcblxuICAgIGNvbnN0IGNoaWxkUHJvbWlzZXM6IFByb21pc2U8Tm9kZVJlc3VsdFR5cGU+W10gPSBhbGxDaGlsZHJlbi5tYXAoKGNoaWxkKSA9PiB7XG4gICAgICBjb25zdCBjaGlsZEJyYW5jaFBhdGggPSBicmFuY2hQYXRoIHx8IGNoaWxkLmlkO1xuICAgICAgY29uc3QgY2hpbGRDb250ZXh0ID0gY29udGV4dC5jcmVhdGVDaGlsZChjaGlsZEJyYW5jaFBhdGggYXMgc3RyaW5nLCBjaGlsZC5pZCBhcyBzdHJpbmcsIGNoaWxkLm5hbWUsIGNoaWxkLmlkKTtcbiAgICAgIGNvbnN0IGNoaWxkQnJlYWtGbGFnID0geyBzaG91bGRCcmVhazogZmFsc2UgfTtcblxuICAgICAgY29uc3QgdXBkYXRlUGFyZW50QnJlYWtGbGFnID0gKCkgPT4ge1xuICAgICAgICBpZiAoY2hpbGRCcmVha0ZsYWcuc2hvdWxkQnJlYWspIGJyZWFrQ291bnQgKz0gMTtcbiAgICAgICAgaWYgKHBhcmVudEJyZWFrRmxhZyAmJiBicmVha0NvdW50ID09PSB0b3RhbENoaWxkcmVuKSBwYXJlbnRCcmVha0ZsYWcuc2hvdWxkQnJlYWsgPSB0cnVlO1xuICAgICAgfTtcblxuICAgICAgcmV0dXJuIHRoaXMuZXhlY3V0ZU5vZGUoY2hpbGQsIGNoaWxkQ29udGV4dCwgY2hpbGRCcmVha0ZsYWcsIGNoaWxkQnJhbmNoUGF0aClcbiAgICAgICAgLnRoZW4oKHJlc3VsdCkgPT4ge1xuICAgICAgICAgIC8vIFRoZSBmYW4tb3V0J3Mgc2V0dGxlIGNvbW1pdCBpcyBhIENPTlRJTlVBVElPTiBvZiB0aGUgY2hpbGQnc1xuICAgICAgICAgIC8vIGV4ZWN1dGlvbiDigJQgbmFtZWQgb24gdGhlIHJlY29yZCAoOS4zOS4wKSwgbmV2ZXIgaW5mZXJyZWQuXG4gICAgICAgICAgY2hpbGRDb250ZXh0LmNvbW1pdCgncmVwZWF0Jyk7XG4gICAgICAgICAgdXBkYXRlUGFyZW50QnJlYWtGbGFnKCk7XG4gICAgICAgICAgcmV0dXJuIHsgaWQ6IGNoaWxkLmlkISwgcmVzdWx0LCBpc0Vycm9yOiBmYWxzZSB9O1xuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goKGVycm9yKSA9PiB7XG4gICAgICAgICAgLy8gUGF1c2VTaWduYWwgaXMgZXhwZWN0ZWQgY29udHJvbCBmbG93IOKAlCByZS10aHJvdyBpbW1lZGlhdGVseS5cbiAgICAgICAgICAvLyBBIHJlYWNoZWQgZGVwdGggY2FwIGlzIGEgUlVOIGZhaWx1cmUsIG5ldmVyIGEgY29udGFpbmVkIGNoaWxkXG4gICAgICAgICAgLy8gcmVzdWx0OiB0aGUgY2hpbGQgbmV2ZXIgcmFuLCBzbyB0aGVyZSBpcyBub3RoaW5nIHRvIHJlY29yZC5cbiAgICAgICAgICBpZiAoaXNQYXVzZVNpZ25hbChlcnJvcikgfHwgaXNUcmF2ZXJzYWxEZXB0aEVycm9yKGVycm9yKSkgdGhyb3cgZXJyb3I7XG4gICAgICAgICAgY2hpbGRDb250ZXh0LmNvbW1pdCgncmVwZWF0Jyk7XG4gICAgICAgICAgdXBkYXRlUGFyZW50QnJlYWtGbGFnKCk7XG4gICAgICAgICAgdGhpcy5kZXBzLmxvZ2dlci5pbmZvKGBUUkVFIFBJUEVMSU5FOiBleGVjdXRlTm9kZUNoaWxkcmVuIC0gRXJyb3IgZm9yIGlkOiAke2NoaWxkPy5pZH1gLCB7IGVycm9yIH0pO1xuICAgICAgICAgIC8vIFRocm90dGxpbmcgaXMgdGVsZW1ldHJ5IChSOSk6IGFuIGV2ZW50LCBub3QgYSBzdGF0ZSBrZXkuIEJlZm9yZVxuICAgICAgICAgIC8vIDkuMzkuMCB0aGlzIHdyb3RlIGBtb25pdG9yLmlzVGhyb3R0bGVkYCBBRlRFUiB0aGUgY2hpbGQncyBsYXN0XG4gICAgICAgICAgLy8gY29tbWl0LCBzbyBpdCBsYW5kZWQgbm93aGVyZS5cbiAgICAgICAgICBpZiAodGhpcy5kZXBzLnRocm90dGxpbmdFcnJvckNoZWNrZXIgJiYgdGhpcy5kZXBzLnRocm90dGxpbmdFcnJvckNoZWNrZXIoZXJyb3IpKSB7XG4gICAgICAgICAgICB0aGlzLmRlcHMubmFycmF0aXZlR2VuZXJhdG9yLm9uVGhyb3R0bGVkPy4oY2hpbGQubmFtZSwgY2hpbGQuaWQgYXMgc3RyaW5nLCBlcnJvciwgdHJhdmVyc2FsQ29udGV4dCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB7IGlkOiBjaGlsZC5pZCEsIHJlc3VsdDogZXJyb3IsIGlzRXJyb3I6IHRydWUgfTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBjb25zdCBjaGlsZHJlblJlc3VsdHM6IFJlY29yZDxzdHJpbmcsIE5vZGVSZXN1bHRUeXBlPiA9IHt9O1xuICAgIC8vIEV2ZXJ5IGNoaWxkIHRoYXQgcGF1c2VkLCBieSBDSElMRCBpbmRleCAobm90IHNldHRsZSBvcmRlcikg4oCUIHNlZSByYWlzZVBhdXNlcy5cbiAgICBjb25zdCBwYXVzZWRBdDogKFBhdXNlU2lnbmFsIHwgdW5kZWZpbmVkKVtdID0gW107XG4gICAgLy8gVGhlIGZpcnN0IHJ1biBmYWlsdXJlIGJ5IENISUxEIGluZGV4IChhIHJlYWNoZWQgZGVwdGggY2FwKSDigJQgcmV0aHJvd25cbiAgICAvLyBhZnRlciBldmVyeSBjaGlsZCBzZXR0bGVzLCBhaGVhZCBvZiBhbnkgcGF1c2UuXG4gICAgbGV0IGZhaWx1cmU6IHsgZXJyb3I6IHVua25vd24gfSB8IHVuZGVmaW5lZDtcblxuICAgIGlmIChub2RlLmZhaWxGYXN0KSB7XG4gICAgICAvLyBGYWlsLWZhc3Q6IGZpcnN0IGNoaWxkIEVSUk9SIHJlamVjdHMgaW1tZWRpYXRlbHkgKHVud3JhcHBlZCkuIEEgcGF1c2VcbiAgICAgIC8vIGlzIG5vdCBhbiBlcnJvcjogaXQgc2V0dGxlcyBsaWtlIGEgcmVzdWx0LCBzbyB0aGUgZm9yayB3YWl0cyBmb3IgaXRzXG4gICAgICAvLyBzaWJsaW5ncyBiZWZvcmUgaXQgcGF1c2VzIOKAlCB0aGVpciB3cml0ZXMgbGFuZCBiZWZvcmUgdGhlIGNoZWNrcG9pbnRcbiAgICAgIC8vIGlzIHRha2VuLCBhbmQgYSBzZWNvbmQgcGF1c2luZyBzaWJsaW5nIGlzIHNlZW4sIG5vdCByYWNlZCBwYXN0LlxuICAgICAgY29uc3QgcmVzdWx0cyA9IGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgICBhbGxDaGlsZHJlbi5tYXAoKGNoaWxkLCBpKSA9PlxuICAgICAgICAgIGNoaWxkUHJvbWlzZXNbaV0udGhlbihcbiAgICAgICAgICAgIChyKSA9PiB7XG4gICAgICAgICAgICAgIGlmIChyLmlzRXJyb3IpIHRocm93IHIucmVzdWx0O1xuICAgICAgICAgICAgICByZXR1cm4gcjtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAoZXJyb3I6IHVua25vd24pID0+IHtcbiAgICAgICAgICAgICAgaWYgKCFpc1BhdXNlU2lnbmFsKGVycm9yKSkgdGhyb3cgZXJyb3I7XG4gICAgICAgICAgICAgIHBhdXNlZEF0W2ldID0gZXJyb3I7XG4gICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICksXG4gICAgICAgICksXG4gICAgICApO1xuICAgICAgZm9yIChjb25zdCByIG9mIHJlc3VsdHMpIHtcbiAgICAgICAgaWYgKHIgPT09IHVuZGVmaW5lZCkgY29udGludWU7IC8vIGEgcGF1c2VkIGNoaWxkXG4gICAgICAgIGNoaWxkcmVuUmVzdWx0c1tyLmlkXSA9IHsgaWQ6IHIuaWQsIHJlc3VsdDogci5yZXN1bHQsIGlzRXJyb3I6IHIuaXNFcnJvciA/PyBmYWxzZSB9O1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBEZWZhdWx0OiBydW4gYWxsIGNoaWxkcmVuIHRvIGNvbXBsZXRpb24gZXZlbiBpZiBzb21lIGZhaWxcbiAgICAgIGNvbnN0IHNldHRsZWQgPSBhd2FpdCBQcm9taXNlLmFsbFNldHRsZWQoY2hpbGRQcm9taXNlcyk7XG4gICAgICBzZXR0bGVkLmZvckVhY2goKHMsIGkpID0+IHtcbiAgICAgICAgaWYgKHMuc3RhdHVzID09PSAnZnVsZmlsbGVkJykge1xuICAgICAgICAgIGNvbnN0IHsgaWQsIHJlc3VsdCwgaXNFcnJvciB9ID0gcy52YWx1ZTtcbiAgICAgICAgICBjaGlsZHJlblJlc3VsdHNbaWRdID0geyBpZCwgcmVzdWx0LCBpc0Vycm9yOiBpc0Vycm9yID8/IGZhbHNlIH07XG4gICAgICAgIH0gZWxzZSBpZiAoaXNQYXVzZVNpZ25hbChzLnJlYXNvbikpIHtcbiAgICAgICAgICAvLyBQYXVzZVNpZ25hbCBmcm9tIGEgY2hpbGQg4oCUIHJlLXRocm93biBhZnRlciBhbGwgY2hpbGRyZW4gc2V0dGxlLlxuICAgICAgICAgIHBhdXNlZEF0W2ldID0gcy5yZWFzb247XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZmFpbHVyZSA/Pz0geyBlcnJvcjogcy5yZWFzb24gfTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIGlmIChmYWlsdXJlKSB0aHJvdyBmYWlsdXJlLmVycm9yO1xuXG4gICAgLy8gUmUtdGhyb3cgYWZ0ZXIgZXZlcnkgY2hpbGQgaGFzIHNldHRsZWQuXG4gICAgY29uc3QgcGF1c2VzID0gcGF1c2VkQXQuZmlsdGVyKChwKTogcCBpcyBQYXVzZVNpZ25hbCA9PiBwICE9PSB1bmRlZmluZWQpO1xuICAgIGlmIChwYXVzZXMubGVuZ3RoID4gMCkgdGhyb3cgcmFpc2VQYXVzZXMocGF1c2VzKTtcblxuICAgIHJldHVybiBjaGlsZHJlblJlc3VsdHM7XG4gIH1cblxuICAvKipcbiAgICogRXhlY3V0ZSBzZWxlY3RlZCBjaGlsZHJlbiBiYXNlZCBvbiBzZWxlY3RvciByZXN1bHQuXG4gICAqIFZhbGlkYXRlcyBJRHMsIHJlY29yZHMgc2VsZWN0aW9uIGluZm8sIHRoZW4gZGVsZWdhdGVzIHRvIGV4ZWN1dGVOb2RlQ2hpbGRyZW4uXG4gICAqL1xuICBhc3luYyBleGVjdXRlU2VsZWN0ZWRDaGlsZHJlbihcbiAgICBzZWxlY3RvcjogU2VsZWN0b3IsXG4gICAgY2hpbGRyZW46IFN0YWdlTm9kZTxUT3V0LCBUU2NvcGU+W10sXG4gICAgaW5wdXQ6IGFueSxcbiAgICBjb250ZXh0OiBTdGFnZUNvbnRleHQsXG4gICAgYnJhbmNoUGF0aDogc3RyaW5nLFxuICAgIHRyYXZlcnNhbENvbnRleHQ/OiBUcmF2ZXJzYWxDb250ZXh0LFxuICAgIGZhaWxGYXN0PzogYm9vbGVhbixcbiAgKTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCBOb2RlUmVzdWx0VHlwZT4+IHtcbiAgICBjb25zdCBzZWxlY3RvclJlc3VsdCA9IGF3YWl0IHNlbGVjdG9yKGlucHV0KTtcbiAgICBjb25zdCBzZWxlY3RlZElkcyA9IEFycmF5LmlzQXJyYXkoc2VsZWN0b3JSZXN1bHQpID8gc2VsZWN0b3JSZXN1bHQgOiBbc2VsZWN0b3JSZXN1bHRdO1xuXG4gICAgY29udGV4dC5hZGRMb2coJ3NlbGVjdGVkQ2hpbGRJZHMnLCBzZWxlY3RlZElkcyk7XG4gICAgY29udGV4dC5hZGRMb2coJ3NlbGVjdG9yUGF0dGVybicsICdtdWx0aS1jaG9pY2UnKTtcblxuICAgIGlmIChzZWxlY3RlZElkcy5sZW5ndGggPT09IDApIHtcbiAgICAgIGNvbnRleHQuYWRkTG9nKCdza2lwcGVkQWxsQ2hpbGRyZW4nLCB0cnVlKTtcbiAgICAgIHJldHVybiB7fTtcbiAgICB9XG5cbiAgICBjb25zdCBzZWxlY3RlZENoaWxkcmVuID0gY2hpbGRyZW4uZmlsdGVyKChjKSA9PiBzZWxlY3RlZElkcy5pbmNsdWRlcyhjLmlkISkpO1xuXG4gICAgLy8gVmFsaWRhdGUgYWxsIElEcyBleGlzdCAoZmFpbCBmYXN0KVxuICAgIGlmIChzZWxlY3RlZENoaWxkcmVuLmxlbmd0aCAhPT0gc2VsZWN0ZWRJZHMubGVuZ3RoKSB7XG4gICAgICBjb25zdCBjaGlsZElkcyA9IGNoaWxkcmVuLm1hcCgoYykgPT4gYy5pZCk7XG4gICAgICBjb25zdCBtaXNzaW5nID0gc2VsZWN0ZWRJZHMuZmlsdGVyKChpZCkgPT4gIWNoaWxkSWRzLmluY2x1ZGVzKGlkKSk7XG4gICAgICBjb25zdCBlcnJvck1lc3NhZ2UgPSBgU2VsZWN0b3IgcmV0dXJuZWQgdW5rbm93biBjaGlsZCBJRHM6ICR7bWlzc2luZy5qb2luKCcsICcpfS4gQXZhaWxhYmxlOiAke2NoaWxkSWRzLmpvaW4oXG4gICAgICAgICcsICcsXG4gICAgICApfWA7XG4gICAgICB0aGlzLmRlcHMubG9nZ2VyLmVycm9yKGBFcnJvciBpbiBwaXBlbGluZSAoJHticmFuY2hQYXRofSk6YCwgeyBlcnJvcjogZXJyb3JNZXNzYWdlIH0pO1xuICAgICAgY29udGV4dC5hZGRFcnJvcignc2VsZWN0b3JFcnJvcicsIGVycm9yTWVzc2FnZSk7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoZXJyb3JNZXNzYWdlKTtcbiAgICB9XG5cbiAgICBjb25zdCBza2lwcGVkSWRzID0gY2hpbGRyZW4uZmlsdGVyKChjKSA9PiAhc2VsZWN0ZWRJZHMuaW5jbHVkZXMoYy5pZCEpKS5tYXAoKGMpID0+IGMuaWQpO1xuICAgIGlmIChza2lwcGVkSWRzLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnRleHQuYWRkTG9nKCdza2lwcGVkQ2hpbGRJZHMnLCBza2lwcGVkSWRzKTtcbiAgICB9XG5cbiAgICBjb25zdCBzZWxlY3RlZE5hbWVzID0gc2VsZWN0ZWRDaGlsZHJlbi5tYXAoKGMpID0+IGMubmFtZSkuam9pbignLCAnKTtcbiAgICBjb250ZXh0LmFkZEZsb3dEZWJ1Z01lc3NhZ2UoXG4gICAgICAnc2VsZWN0ZWQnLFxuICAgICAgYFJ1bm5pbmcgJHtzZWxlY3RlZE5hbWVzfSAoJHtzZWxlY3RlZENoaWxkcmVuLmxlbmd0aH0gb2YgJHtjaGlsZHJlbi5sZW5ndGh9IG1hdGNoZWQpYCxcbiAgICAgIHsgY291bnQ6IHNlbGVjdGVkQ2hpbGRyZW4ubGVuZ3RoLCB0YXJnZXRTdGFnZTogc2VsZWN0ZWRDaGlsZHJlbi5tYXAoKGMpID0+IGMubmFtZSkgfSxcbiAgICApO1xuXG4gICAgLy8gTmFycmF0aXZlOiBjYXB0dXJlIHRoZSBzZWxlY3Rpb25cbiAgICBjb25zdCBzZWxlY3RlZERpc3BsYXlOYW1lcyA9IHNlbGVjdGVkQ2hpbGRyZW4ubWFwKChjKSA9PiBjLm5hbWUpO1xuICAgIGNvbnN0IHNlbGVjdG9yTmFtZSA9IGNvbnRleHQuc3RhZ2VOYW1lIHx8ICdzZWxlY3Rvcic7XG4gICAgdGhpcy5kZXBzLm5hcnJhdGl2ZUdlbmVyYXRvci5vblNlbGVjdGVkKHNlbGVjdG9yTmFtZSwgc2VsZWN0ZWREaXNwbGF5TmFtZXMsIGNoaWxkcmVuLmxlbmd0aCwgdHJhdmVyc2FsQ29udGV4dCk7XG4gICAgLy8gUHJvcG9zYWwgIzAwMzogZmlyZSBvblN0YWdlRXhlY3V0ZWQgQUZURVIgdGhlIHNwZWNpYWxpemVkIGV2ZW50LlxuICAgIHRoaXMuZGVwcy5uYXJyYXRpdmVHZW5lcmF0b3Iub25TdGFnZUV4ZWN1dGVkKHNlbGVjdG9yTmFtZSwgdW5kZWZpbmVkLCB0cmF2ZXJzYWxDb250ZXh0LCAnc2VsZWN0b3InKTtcblxuICAgIGNvbnN0IHRlbXBOb2RlOiBTdGFnZU5vZGU8VE91dCwgVFNjb3BlPiA9IHtcbiAgICAgIG5hbWU6ICdzZWxlY3Rvci10ZW1wJyxcbiAgICAgIGlkOiAnc2VsZWN0b3ItdGVtcCcsXG4gICAgICBjaGlsZHJlbjogc2VsZWN0ZWRDaGlsZHJlbixcbiAgICAgIC8vIEhvbm9yIHRoZSBzZWxlY3RvciBub2RlJ3MgZmFuLW91dCBlcnJvciBtb2RlIChQcm9taXNlLmFsbCB2cyBhbGxTZXR0bGVkKS5cbiAgICAgIGZhaWxGYXN0LFxuICAgIH07XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuZXhlY3V0ZU5vZGVDaGlsZHJlbih0ZW1wTm9kZSwgY29udGV4dCwgdW5kZWZpbmVkLCBicmFuY2hQYXRoLCB0cmF2ZXJzYWxDb250ZXh0KTtcbiAgfVxufVxuIl19
|
|
@@ -15,7 +15,9 @@
|
|
|
15
15
|
* and for deciders whose own `.next` must run after the branch completes.
|
|
16
16
|
*/
|
|
17
17
|
import { DECISION_RESULT } from '../../decide/types.js';
|
|
18
|
+
import { thrownText } from '../../errors/errorInfo.js';
|
|
18
19
|
import { isPauseSignal } from '../../pause/types.js';
|
|
20
|
+
import { commitStage } from './commitStage.js';
|
|
19
21
|
export class DeciderHandler {
|
|
20
22
|
deps;
|
|
21
23
|
constructor(deps) {
|
|
@@ -38,7 +40,7 @@ export class DeciderHandler {
|
|
|
38
40
|
// Stamp invoker context on PauseSignal during bubble-up.
|
|
39
41
|
// The decider (node) is the invoker; its .next is the continuation target.
|
|
40
42
|
if (isPauseSignal(error)) {
|
|
41
|
-
error.setInvoker(node.id
|
|
43
|
+
error.setInvoker(node.id);
|
|
42
44
|
throw error;
|
|
43
45
|
}
|
|
44
46
|
throw error;
|
|
@@ -73,11 +75,11 @@ export class DeciderHandler {
|
|
|
73
75
|
}
|
|
74
76
|
context.commit();
|
|
75
77
|
this.deps.logger.error(`Error in pipeline (${branchPath}) stage [${node.name}]:`, { error });
|
|
76
|
-
context.addError('stageExecutionError', error
|
|
77
|
-
this.deps.narrativeGenerator.onError(node.name, error
|
|
78
|
+
context.addError('stageExecutionError', thrownText(error));
|
|
79
|
+
this.deps.narrativeGenerator.onError(node.name, thrownText(error), error, traversalContext);
|
|
78
80
|
throw error;
|
|
79
81
|
}
|
|
80
|
-
context.
|
|
82
|
+
commitStage(context, this.deps.narrativeGenerator, node.name, traversalContext);
|
|
81
83
|
if (breakFlag.shouldBreak) {
|
|
82
84
|
return { kind: 'break', branchId };
|
|
83
85
|
}
|
|
@@ -122,4 +124,4 @@ export class DeciderHandler {
|
|
|
122
124
|
return { kind: 'dispatch', chosen, branchContext };
|
|
123
125
|
}
|
|
124
126
|
}
|
|
125
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRGVjaWRlckhhbmRsZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL2VuZ2luZS9oYW5kbGVycy9EZWNpZGVySGFuZGxlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFHSCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFeEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBaUJyRCxNQUFNLE9BQU8sY0FBYztJQUNJO0lBQTdCLFlBQTZCLElBQStCO1FBQS9CLFNBQUksR0FBSixJQUFJLENBQTJCO0lBQUcsQ0FBQztJQUVoRTs7OztPQUlHO0lBQ0gsS0FBSyxDQUFDLGdCQUFnQixDQUNwQixJQUE2QixFQUM3QixTQUFzQyxFQUN0QyxPQUFxQixFQUNyQixTQUFtQyxFQUNuQyxVQUE4QixFQUM5QixRQUFrQyxFQUNsQyxXQUF3QyxFQUN4QyxnQkFBbUM7UUFFbkMsTUFBTSxRQUFRLEdBQUcsTUFBTSxJQUFJLENBQUMsZUFBZSxDQUN6QyxJQUFJLEVBQ0osU0FBUyxFQUNULE9BQU8sRUFDUCxTQUFTLEVBQ1QsVUFBVSxFQUNWLFFBQVEsRUFDUixnQkFBZ0IsQ0FDakIsQ0FBQztRQUVGLElBQUksUUFBUSxDQUFDLElBQUksS0FBSyxPQUFPLEVBQUUsQ0FBQztZQUM5QixPQUFPLFFBQVEsQ0FBQyxRQUFRLENBQUM7UUFDM0IsQ0FBQztRQUVELElBQUksQ0FBQztZQUNILE9BQU8sTUFBTSxXQUFXLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxRQUFRLENBQUMsYUFBYSxFQUFFLFNBQVMsRUFBRSxVQUFVLENBQUMsQ0FBQztRQUMzRixDQUFDO1FBQUMsT0FBTyxLQUFjLEVBQUUsQ0FBQztZQUN4Qix5REFBeUQ7WUFDekQsMkVBQTJFO1lBQzNFLElBQUksYUFBYSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7Z0JBQ3pC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RUFDVCxJQUFJLENBQUMsV0FBVyxFQUNoQixnQkFBZ0IsRUFDaEIsZ0JBQWdCLENBQ2pCLENBQUM7UUFDRixrRUFBa0U7UUFDbEUsNkRBQTZEO1FBQzdELElBQUksQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLFdBQVcsRUFBRSxnQkFBZ0IsRUFBRSxTQUFTLENBQUMsQ0FBQztRQUV2RyxNQUFNLGFBQWEsR0FBRyxPQUFPLENBQUMsV0FBVyxDQUFDLFVBQW9CLEVBQUUsTUFBTSxDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUVuRyxPQUFPLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsYUFBYSxFQUFFLENBQUM7SUFDckQsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBEZWNpZGVySGFuZGxlciDigJQgU2luZ2xlLWNob2ljZSBjb25kaXRpb25hbCBicmFuY2hpbmcuXG4gKlxuICogSGFuZGxlcyBzY29wZS1iYXNlZCBkZWNpZGVycyAoc3RhZ2UgSVMgdGhlIGRlY2lkZXIsIHJldHVybnMgYnJhbmNoIElEKS5cbiAqIExvZ3MgZmxvdyBjb250cm9sIGRlY2lzaW9ucyBhbmQgbmFycmF0aXZlIHNlbnRlbmNlcy5cbiAqXG4gKiBUd28gZW50cnkgcG9pbnRzOlxuICogLSBgcHJlcGFyZURpc3BhdGNoYCDigJQgcnVucyB0aGUgZGVjaWRlciBzdGFnZSwgY29tbWl0cywgcmVzb2x2ZXMgdGhlIGNob3NlblxuICogICBicmFuY2gsIGZpcmVzIG5hcnJhdGl2ZSwgYW5kIHJldHVybnMgdGhlIGNob3NlbiBub2RlICsgYnJhbmNoIGNvbnRleHRcbiAqICAgV0lUSE9VVCBleGVjdXRpbmcgaXQuIFRoZSB0cmF2ZXJzZXIncyB0cmFtcG9saW5lIGRyaXZlciB1c2VzIHRoaXMgc28gYVxuICogICBkZWNpZGVyIHdpdGggbm8gY29udGludWF0aW9uIG9mIGl0cyBvd24gY2FuIGhhbmQgdGhlIGJyYW5jaCB0byB0aGVcbiAqICAgZHJpdmVyIGFzIGEgZmxhdCBob3AgKGxvb3AtaGVhdnkgZGVjaWRlciBjaGFydHMgc3RheSBmbGF0LXN0YWNrZWQpLlxuICogLSBgaGFuZGxlU2NvcGVCYXNlZGAg4oCUIHByZXBhcmVEaXNwYXRjaCArIGltbWVkaWF0ZSBicmFuY2ggZXhlY3V0aW9uIHZpYVxuICogICB0aGUgcHJvdmlkZWQgYGV4ZWN1dGVOb2RlYCBjYWxsYmFjay4gS2VwdCBmb3IgZGlyZWN0L2FkdmFuY2VkIGNhbGxlcnNcbiAqICAgYW5kIGZvciBkZWNpZGVycyB3aG9zZSBvd24gYC5uZXh0YCBtdXN0IHJ1biBhZnRlciB0aGUgYnJhbmNoIGNvbXBsZXRlcy5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IERlY2lzaW9uRXZpZGVuY2UgfSBmcm9tICcuLi8uLi9kZWNpZGUvdHlwZXMuanMnO1xuaW1wb3J0IHsgREVDSVNJT05fUkVTVUxUIH0gZnJvbSAnLi4vLi4vZGVjaWRlL3R5cGVzLmpzJztcbmltcG9ydCB0eXBlIHsgU3RhZ2VDb250ZXh0IH0gZnJvbSAnLi4vLi4vbWVtb3J5L1N0YWdlQ29udGV4dC5qcyc7XG5pbXBvcnQgeyBpc1BhdXNlU2lnbmFsIH0gZnJvbSAnLi4vLi4vcGF1c2UvdHlwZXMuanMnO1xuaW1wb3J0IHR5cGUgeyBTdGFnZU5vZGUgfSBmcm9tICcuLi9ncmFwaC9TdGFnZU5vZGUuanMnO1xuaW1wb3J0IHR5cGUgeyBUcmF2ZXJzYWxDb250ZXh0IH0gZnJvbSAnLi4vbmFycmF0aXZlL3R5cGVzLmpzJztcbmltcG9ydCB0eXBlIHsgSGFuZGxlckRlcHMsIFN0YWdlRnVuY3Rpb24gfSBmcm9tICcuLi90eXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7IEV4ZWN1dGVOb2RlRm4sIFJ1blN0YWdlRm4gfSBmcm9tICcuL3R5cGVzLmpzJztcblxuZXhwb3J0IHR5cGUgeyBFeGVjdXRlTm9kZUZuLCBSdW5TdGFnZUZuIH07XG5cbi8qKlxuICogUmVzdWx0IG9mIGBwcmVwYXJlRGlzcGF0Y2hgIOKAlCBlaXRoZXIgdGhlIGRlY2lkZXIgc3RhZ2UgYnJva2UgKG5vIGJyYW5jaFxuICogcnVuczsgYGJyYW5jaElkYCBpcyB0aGUgZGVjaWRlcidzIHJldHVybiB2YWx1ZSksIG9yIGEgYnJhbmNoIHdhcyBjaG9zZW5cbiAqIGFuZCBpcyByZWFkeSB0byBleGVjdXRlIGluIGBicmFuY2hDb250ZXh0YC5cbiAqL1xuZXhwb3J0IHR5cGUgRGVjaWRlckRpc3BhdGNoPFRPdXQgPSBhbnksIFRTY29wZSA9IGFueT4gPVxuICB8IHsga2luZDogJ2JyZWFrJzsgYnJhbmNoSWQ6IHN0cmluZyB9XG4gIHwgeyBraW5kOiAnZGlzcGF0Y2gnOyBjaG9zZW46IFN0YWdlTm9kZTxUT3V0LCBUU2NvcGU+OyBicmFuY2hDb250ZXh0OiBTdGFnZUNvbnRleHQgfTtcblxuZXhwb3J0IGNsYXNzIERlY2lkZXJIYW5kbGVyPFRPdXQgPSBhbnksIFRTY29wZSA9IGFueT4ge1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IGRlcHM6IEhhbmRsZXJEZXBzPFRPdXQsIFRTY29wZT4pIHt9XG5cbiAgLyoqXG4gICAqIEhhbmRsZSBhIHNjb3BlLWJhc2VkIGRlY2lkZXIgKGNyZWF0ZWQgdmlhIGFkZERlY2lkZXJGdW5jdGlvbikuXG4gICAqIFRoZSBzdGFnZSBmdW5jdGlvbiBJUyB0aGUgZGVjaWRlciDigJQgaXRzIHJldHVybiB2YWx1ZSBpcyB0aGUgYnJhbmNoIElELlxuICAgKiBFeGVjdXRpb24gb3JkZXI6IHJ1blN0YWdlKGZuKSDihpIgY29tbWl0IOKGkiByZXNvbHZlIGNoaWxkIOKGkiBsb2cg4oaSIGV4ZWN1dGVOb2RlKGNoaWxkKS5cbiAgICovXG4gIGFzeW5jIGhhbmRsZVNjb3BlQmFzZWQoXG4gICAgbm9kZTogU3RhZ2VOb2RlPFRPdXQsIFRTY29wZT4sXG4gICAgc3RhZ2VGdW5jOiBTdGFnZUZ1bmN0aW9uPFRPdXQsIFRTY29wZT4sXG4gICAgY29udGV4dDogU3RhZ2VDb250ZXh0LFxuICAgIGJyZWFrRmxhZzogeyBzaG91bGRCcmVhazogYm9vbGVhbiB9LFxuICAgIGJyYW5jaFBhdGg6IHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgICBydW5TdGFnZTogUnVuU3RhZ2VGbjxUT3V0LCBUU2NvcGU+LFxuICAgIGV4ZWN1dGVOb2RlOiBFeGVjdXRlTm9kZUZuPFRPdXQsIFRTY29wZT4sXG4gICAgdHJhdmVyc2FsQ29udGV4dD86IFRyYXZlcnNhbENvbnRleHQsXG4gICk6IFByb21pc2U8YW55PiB7XG4gICAgY29uc3QgZGlzcGF0Y2ggPSBhd2FpdCB0aGlzLnByZXBhcmVEaXNwYXRjaChcbiAgICAgIG5vZGUsXG4gICAgICBzdGFnZUZ1bmMsXG4gICAgICBjb250ZXh0LFxuICAgICAgYnJlYWtGbGFnLFxuICAgICAgYnJhbmNoUGF0aCxcbiAgICAgIHJ1blN0YWdlLFxuICAgICAgdHJhdmVyc2FsQ29udGV4dCxcbiAgICApO1xuXG4gICAgaWYgKGRpc3BhdGNoLmtpbmQgPT09ICdicmVhaycpIHtcbiAgICAgIHJldHVybiBkaXNwYXRjaC5icmFuY2hJZDtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGF3YWl0IGV4ZWN1dGVOb2RlKGRpc3BhdGNoLmNob3NlbiwgZGlzcGF0Y2guYnJhbmNoQ29udGV4dCwgYnJlYWtGbGFnLCBicmFuY2hQYXRoKTtcbiAgICB9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuICAgICAgLy8gU3RhbXAgaW52b2tlciBjb250ZXh0IG9uIFBhdXNlU2lnbmFsIGR1cmluZyBidWJibGUtdXAuXG4gICAgICAvLyBUaGUgZGVjaWRlciAobm9kZSkgaXMgdGhlIGludm9rZXI7IGl0cyAubmV4dCBpcyB0aGUgY29udGludWF0aW9uIHRhcmdldC5cbiAgICAgIGlmIChpc1BhdXNlU2lnbmFsKGVycm9yKSkge1xuICAgICAgICBlcnJvci5zZXRJbnZva2VyKG5vZGUuaWQhLCBub2RlLm5leHQ/LmlkKTtcbiAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICB9XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUnVuIHRoZSBkZWNpZGVyIHN0YWdlIGFuZCByZXNvbHZlIHRoZSBjaG9zZW4gYnJhbmNoIFdJVEhPVVQgZXhlY3V0aW5nIGl0LlxuICAgKiBFdmVyeXRoaW5nIHVwIHRvIChhbmQgaW5jbHVkaW5nKSB0aGUgYG9uRGVjaXNpb25gL2BvblN0YWdlRXhlY3V0ZWRgXG4gICAqIG5hcnJhdGl2ZSBhbmQgdGhlIGJyYW5jaCBjb250ZXh0IGNyZWF0aW9uIGhhcHBlbnMgaGVyZSDigJQgb25seSB0aGVcbiAgICogYnJhbmNoIGV4ZWN1dGlvbiBpdHNlbGYgaXMgbGVmdCB0byB0aGUgY2FsbGVyLlxuICAgKi9cbiAgYXN5bmMgcHJlcGFyZURpc3BhdGNoKFxuICAgIG5vZGU6IFN0YWdlTm9kZTxUT3V0LCBUU2NvcGU+LFxuICAgIHN0YWdlRnVuYzogU3RhZ2VGdW5jdGlvbjxUT3V0LCBUU2NvcGU+LFxuICAgIGNvbnRleHQ6IFN0YWdlQ29udGV4dCxcbiAgICBicmVha0ZsYWc6IHsgc2hvdWxkQnJlYWs6IGJvb2xlYW4gfSxcbiAgICBicmFuY2hQYXRoOiBzdHJpbmcgfCB1bmRlZmluZWQsXG4gICAgcnVuU3RhZ2U6IFJ1blN0YWdlRm48VE91dCwgVFNjb3BlPixcbiAgICB0cmF2ZXJzYWxDb250ZXh0PzogVHJhdmVyc2FsQ29udGV4dCxcbiAgKTogUHJvbWlzZTxEZWNpZGVyRGlzcGF0Y2g8VE91dCwgVFNjb3BlPj4ge1xuICAgIGNvbnN0IGJyZWFrRm4gPSAoKSA9PiAoYnJlYWtGbGFnLnNob3VsZEJyZWFrID0gdHJ1ZSk7XG5cbiAgICBsZXQgYnJhbmNoSWQ6IHN0cmluZztcbiAgICBsZXQgZGVjaXNpb25FdmlkZW5jZTogRGVjaXNpb25FdmlkZW5jZSB8IHVuZGVmaW5lZDtcbiAgICB0cnkge1xuICAgICAgY29uc3Qgc3RhZ2VPdXRwdXQgPSBhd2FpdCBydW5TdGFnZShub2RlLCBzdGFnZUZ1bmMsIGNvbnRleHQsIGJyZWFrRm4sIHRyYXZlcnNhbENvbnRleHQpO1xuICAgICAgLy8gRGV0ZWN0IERlY2lzaW9uUmVzdWx0IGZyb20gZGVjaWRlKCkgaGVscGVyIHZpYSBTeW1ib2wgYnJhbmRcbiAgICAgIGlmIChzdGFnZU91dHB1dCAmJiB0eXBlb2Ygc3RhZ2VPdXRwdXQgPT09ICdvYmplY3QnICYmIFJlZmxlY3QuaGFzKHN0YWdlT3V0cHV0IGFzIG9iamVjdCwgREVDSVNJT05fUkVTVUxUKSkge1xuICAgICAgICBicmFuY2hJZCA9IChzdGFnZU91dHB1dCBhcyBhbnkpLmJyYW5jaDtcbiAgICAgICAgZGVjaXNpb25FdmlkZW5jZSA9IChzdGFnZU91dHB1dCBhcyBhbnkpLmV2aWRlbmNlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYnJhbmNoSWQgPSBTdHJpbmcoc3RhZ2VPdXRwdXQpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgIC8vIFBhdXNlU2lnbmFsIGlzIGV4cGVjdGVkIGNvbnRyb2wgZmxvdyDigJQgY29tbWl0IGFuZCByZS10aHJvdyB3aXRob3V0IGVycm9yIGxvZ2dpbmcuXG4gICAgICBpZiAoaXNQYXVzZVNpZ25hbChlcnJvcikpIHtcbiAgICAgICAgY29udGV4dC5jb21taXQoKTtcbiAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICB9XG4gICAgICBjb250ZXh0LmNvbW1pdCgpO1xuICAgICAgdGhpcy5kZXBzLmxvZ2dlci5lcnJvcihgRXJyb3IgaW4gcGlwZWxpbmUgKCR7YnJhbmNoUGF0aH0pIHN0YWdlIFske25vZGUubmFtZX1dOmAsIHsgZXJyb3IgfSk7XG4gICAgICBjb250ZXh0LmFkZEVycm9yKCdzdGFnZUV4ZWN1dGlvbkVycm9yJywgZXJyb3IudG9TdHJpbmcoKSk7XG4gICAgICB0aGlzLmRlcHMubmFycmF0aXZlR2VuZXJhdG9yLm9uRXJyb3Iobm9kZS5uYW1lLCBlcnJvci50b1N0cmluZygpLCBlcnJvciwgdHJhdmVyc2FsQ29udGV4dCk7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG5cbiAgICBjb250ZXh0LmNvbW1pdCgpO1xuXG4gICAgaWYgKGJyZWFrRmxhZy5zaG91bGRCcmVhaykge1xuICAgICAgcmV0dXJuIHsga2luZDogJ2JyZWFrJywgYnJhbmNoSWQgfTtcbiAgICB9XG5cbiAgICAvLyBSZXNvbHZlIGNoaWxkIGJ5IG1hdGNoaW5nIGJyYW5jaCBJRCBhZ2FpbnN0IG5vZGUuY2hpbGRyZW4uXG4gICAgLy8gTWF0Y2ggYnJhbmNoSWQgZmlyc3QgKG9yaWdpbmFsIHVucHJlZml4ZWQgSUQpLCBmYWxsIGJhY2sgdG8gaWQgZm9yIGJhY2t3YXJkIGNvbXBhdC5cbiAgICBjb25zdCBjaGlsZHJlbiA9IG5vZGUuY2hpbGRyZW4gYXMgU3RhZ2VOb2RlPFRPdXQsIFRTY29wZT5bXTtcbiAgICBsZXQgY2hvc2VuID0gY2hpbGRyZW4uZmluZCgoY2hpbGQpID0+IChjaGlsZC5icmFuY2hJZCA/PyBjaGlsZC5pZCkgPT09IGJyYW5jaElkKTtcblxuICAgIC8vIEZhbGwgYmFjayB0byBkZWZhdWx0IGJyYW5jaFxuICAgIGlmICghY2hvc2VuKSB7XG4gICAgICBjb25zdCBkZWZhdWx0Q2hpbGQgPSBjaGlsZHJlbi5maW5kKChjaGlsZCkgPT4gKGNoaWxkLmJyYW5jaElkID8/IGNoaWxkLmlkKSA9PT0gJ2RlZmF1bHQnKTtcbiAgICAgIGlmIChkZWZhdWx0Q2hpbGQpIHtcbiAgICAgICAgY2hvc2VuID0gZGVmYXVsdENoaWxkO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgZXJyb3JNZXNzYWdlID0gYFNjb3BlLWJhc2VkIGRlY2lkZXIgJyR7bm9kZS5uYW1lfScgcmV0dXJuZWQgYnJhbmNoIElEICcke2JyYW5jaElkfScgd2hpY2ggZG9lc24ndCBtYXRjaCBhbnkgY2hpbGQgYW5kIG5vIGRlZmF1bHQgYnJhbmNoIGlzIHNldGA7XG4gICAgICAgIGNvbnRleHQuYWRkRXJyb3IoJ2RlY2lkZXJFcnJvcicsIGVycm9yTWVzc2FnZSk7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihlcnJvck1lc3NhZ2UpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGNob3Nlbk5hbWUgPSBjaG9zZW4ubmFtZTtcbiAgICBjb25zdCB3YXNEZWZhdWx0ID0gKGNob3Nlbi5icmFuY2hJZCA/PyBjaG9zZW4uaWQpICE9PSBicmFuY2hJZDtcbiAgICBjb25zdCByYXRpb25hbGUgPSBjb250ZXh0LmRlYnVnPy5sb2dDb250ZXh0Py5kZWNpZGVyUmF0aW9uYWxlIGFzIHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBsZXQgYnJhbmNoUmVhc29uOiBzdHJpbmc7XG4gICAgaWYgKHdhc0RlZmF1bHQpIHtcbiAgICAgIGJyYW5jaFJlYXNvbiA9IGBSZXR1cm5lZCAnJHticmFuY2hJZH0nIChubyBtYXRjaCksIGZlbGwgYmFjayB0byBkZWZhdWx0IOKGkiAke2Nob3Nlbk5hbWV9IHBhdGguYDtcbiAgICB9IGVsc2UgaWYgKHJhdGlvbmFsZSkge1xuICAgICAgYnJhbmNoUmVhc29uID0gYEJhc2VkIG9uOiAke3JhdGlvbmFsZX0g4oaSIGNob3NlICR7Y2hvc2VuTmFtZX0gcGF0aC5gO1xuICAgIH0gZWxzZSB7XG4gICAgICBicmFuY2hSZWFzb24gPSBgRXZhbHVhdGVkIHNjb3BlIGFuZCByZXR1cm5lZCAnJHticmFuY2hJZH0nIOKGkiBjaG9zZSAke2Nob3Nlbk5hbWV9IHBhdGguYDtcbiAgICB9XG4gICAgY29udGV4dC5hZGRGbG93RGVidWdNZXNzYWdlKCdicmFuY2gnLCBicmFuY2hSZWFzb24sIHtcbiAgICAgIHRhcmdldFN0YWdlOiBjaG9zZW4ubmFtZSxcbiAgICAgIHJhdGlvbmFsZTogcmF0aW9uYWxlIHx8IGByZXR1cm5lZCBicmFuY2hJZDogJHticmFuY2hJZH1gLFxuICAgIH0pO1xuXG4gICAgdGhpcy5kZXBzLm5hcnJhdGl2ZUdlbmVyYXRvci5vbkRlY2lzaW9uKFxuICAgICAgbm9kZS5uYW1lLFxuICAgICAgY2hvc2VuLm5hbWUsXG4gICAgICByYXRpb25hbGUsXG4gICAgICBub2RlLmRlc2NyaXB0aW9uLFxuICAgICAgdHJhdmVyc2FsQ29udGV4dCxcbiAgICAgIGRlY2lzaW9uRXZpZGVuY2UsXG4gICAgKTtcbiAgICAvLyBQcm9wb3NhbCAjMDAzOiBmaXJlIG9uU3RhZ2VFeGVjdXRlZCBBRlRFUiB0aGUgc3BlY2lhbGl6ZWQgZXZlbnRcbiAgICAvLyBzbyBjb25zdW1lcnMgdHJhY2tpbmcgXCJkaWQgdGhpcyBzdGFnZSBydW5cIiB3b3JrIHVuaWZvcm1seS5cbiAgICB0aGlzLmRlcHMubmFycmF0aXZlR2VuZXJhdG9yLm9uU3RhZ2VFeGVjdXRlZChub2RlLm5hbWUsIG5vZGUuZGVzY3JpcHRpb24sIHRyYXZlcnNhbENvbnRleHQsICdkZWNpZGVyJyk7XG5cbiAgICBjb25zdCBicmFuY2hDb250ZXh0ID0gY29udGV4dC5jcmVhdGVDaGlsZChicmFuY2hQYXRoIGFzIHN0cmluZywgY2hvc2VuLmlkLCBjaG9zZW4ubmFtZSwgY2hvc2VuLmlkKTtcblxuICAgIHJldHVybiB7IGtpbmQ6ICdkaXNwYXRjaCcsIGNob3NlbiwgYnJhbmNoQ29udGV4dCB9O1xuICB9XG59XG4iXX0=
|
|
127
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRGVjaWRlckhhbmRsZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL2VuZ2luZS9oYW5kbGVycy9EZWNpZGVySGFuZGxlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFHSCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDeEQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBRXZELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUlyRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFjL0MsTUFBTSxPQUFPLGNBQWM7SUFDSTtJQUE3QixZQUE2QixJQUErQjtRQUEvQixTQUFJLEdBQUosSUFBSSxDQUEyQjtJQUFHLENBQUM7SUFFaEU7Ozs7T0FJRztJQUNILEtBQUssQ0FBQyxnQkFBZ0IsQ0FDcEIsSUFBNkIsRUFDN0IsU0FBc0MsRUFDdEMsT0FBcUIsRUFDckIsU0FBbUMsRUFDbkMsVUFBOEIsRUFDOUIsUUFBa0MsRUFDbEMsV0FBd0MsRUFDeEMsZ0JBQW1DO1FBRW5DLE1BQU0sUUFBUSxHQUFHLE1BQU0sSUFBSSxDQUFDLGVBQWUsQ0FDekMsSUFBSSxFQUNKLFNBQVMsRUFDVCxPQUFPLEVBQ1AsU0FBUyxFQUNULFVBQVUsRUFDVixRQUFRLEVBQ1IsZ0JBQWdCLENBQ2pCLENBQUM7UUFFRixJQUFJLFFBQVEsQ0FBQyxJQUFJLEtBQUssT0FBTyxFQUFFLENBQUM7WUFDOUIsT0FBTyxRQUFRLENBQUMsUUFBUSxDQUFDO1FBQzNCLENBQUM7UUFFRCxJQUFJLENBQUM7WUFDSCxPQUFPLE1BQU0sV0FBVyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLGFBQWEsRUFBRSxTQUFTLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFDM0YsQ0FBQztRQUFDLE9BQU8sS0FB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UUFBUSxFQUFFO1NBQ3pELENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsVUFBVSxDQUNyQyxJQUFJLENBQUMsSUFBSSxFQUNULE1BQU0sQ0FBQyxJQUFJLEVBQ1gsU0FBUyxFQUNULElBQUksQ0FBQyxXQUFXLEVBQ2hCLGdCQUFnQixFQUNoQixnQkFBZ0IsQ0FDakIsQ0FBQztRQUNGLGtFQUFrRTtRQUNsRSw2REFBNkQ7UUFDN0QsSUFBSSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsV0FBVyxFQUFFLGdCQUFnQixFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBRXZHLE1BQU0sYUFBYSxHQUFHLE9BQU8sQ0FBQyxXQUFXLENBQUMsVUFBb0IsRUFBRSxNQUFNLENBQUMsRUFBRSxFQUFFLE1BQU0sQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBRW5HLE9BQU8sRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxhQUFhLEVBQUUsQ0FBQztJQUNyRCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIERlY2lkZXJIYW5kbGVyIOKAlCBTaW5nbGUtY2hvaWNlIGNvbmRpdGlvbmFsIGJyYW5jaGluZy5cbiAqXG4gKiBIYW5kbGVzIHNjb3BlLWJhc2VkIGRlY2lkZXJzIChzdGFnZSBJUyB0aGUgZGVjaWRlciwgcmV0dXJucyBicmFuY2ggSUQpLlxuICogTG9ncyBmbG93IGNvbnRyb2wgZGVjaXNpb25zIGFuZCBuYXJyYXRpdmUgc2VudGVuY2VzLlxuICpcbiAqIFR3byBlbnRyeSBwb2ludHM6XG4gKiAtIGBwcmVwYXJlRGlzcGF0Y2hgIOKAlCBydW5zIHRoZSBkZWNpZGVyIHN0YWdlLCBjb21taXRzLCByZXNvbHZlcyB0aGUgY2hvc2VuXG4gKiAgIGJyYW5jaCwgZmlyZXMgbmFycmF0aXZlLCBhbmQgcmV0dXJucyB0aGUgY2hvc2VuIG5vZGUgKyBicmFuY2ggY29udGV4dFxuICogICBXSVRIT1VUIGV4ZWN1dGluZyBpdC4gVGhlIHRyYXZlcnNlcidzIHRyYW1wb2xpbmUgZHJpdmVyIHVzZXMgdGhpcyBzbyBhXG4gKiAgIGRlY2lkZXIgd2l0aCBubyBjb250aW51YXRpb24gb2YgaXRzIG93biBjYW4gaGFuZCB0aGUgYnJhbmNoIHRvIHRoZVxuICogICBkcml2ZXIgYXMgYSBmbGF0IGhvcCAobG9vcC1oZWF2eSBkZWNpZGVyIGNoYXJ0cyBzdGF5IGZsYXQtc3RhY2tlZCkuXG4gKiAtIGBoYW5kbGVTY29wZUJhc2VkYCDigJQgcHJlcGFyZURpc3BhdGNoICsgaW1tZWRpYXRlIGJyYW5jaCBleGVjdXRpb24gdmlhXG4gKiAgIHRoZSBwcm92aWRlZCBgZXhlY3V0ZU5vZGVgIGNhbGxiYWNrLiBLZXB0IGZvciBkaXJlY3QvYWR2YW5jZWQgY2FsbGVyc1xuICogICBhbmQgZm9yIGRlY2lkZXJzIHdob3NlIG93biBgLm5leHRgIG11c3QgcnVuIGFmdGVyIHRoZSBicmFuY2ggY29tcGxldGVzLlxuICovXG5cbmltcG9ydCB0eXBlIHsgRGVjaXNpb25FdmlkZW5jZSB9IGZyb20gJy4uLy4uL2RlY2lkZS90eXBlcy5qcyc7XG5pbXBvcnQgeyBERUNJU0lPTl9SRVNVTFQgfSBmcm9tICcuLi8uLi9kZWNpZGUvdHlwZXMuanMnO1xuaW1wb3J0IHsgdGhyb3duVGV4dCB9IGZyb20gJy4uLy4uL2Vycm9ycy9lcnJvckluZm8uanMnO1xuaW1wb3J0IHR5cGUgeyBTdGFnZUNvbnRleHQgfSBmcm9tICcuLi8uLi9tZW1vcnkvU3RhZ2VDb250ZXh0LmpzJztcbmltcG9ydCB7IGlzUGF1c2VTaWduYWwgfSBmcm9tICcuLi8uLi9wYXVzZS90eXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7IFN0YWdlTm9kZSB9IGZyb20gJy4uL2dyYXBoL1N0YWdlTm9kZS5qcyc7XG5pbXBvcnQgdHlwZSB7IFRyYXZlcnNhbENvbnRleHQgfSBmcm9tICcuLi9uYXJyYXRpdmUvdHlwZXMuanMnO1xuaW1wb3J0IHR5cGUgeyBIYW5kbGVyRGVwcywgU3RhZ2VGdW5jdGlvbiB9IGZyb20gJy4uL3R5cGVzLmpzJztcbmltcG9ydCB7IGNvbW1pdFN0YWdlIH0gZnJvbSAnLi9jb21taXRTdGFnZS5qcyc7XG5pbXBvcnQgdHlwZSB7IEV4ZWN1dGVOb2RlRm4sIFJ1blN0YWdlRm4gfSBmcm9tICcuL3R5cGVzLmpzJztcblxuZXhwb3J0IHR5cGUgeyBFeGVjdXRlTm9kZUZuLCBSdW5TdGFnZUZuIH07XG5cbi8qKlxuICogUmVzdWx0IG9mIGBwcmVwYXJlRGlzcGF0Y2hgIOKAlCBlaXRoZXIgdGhlIGRlY2lkZXIgc3RhZ2UgYnJva2UgKG5vIGJyYW5jaFxuICogcnVuczsgYGJyYW5jaElkYCBpcyB0aGUgZGVjaWRlcidzIHJldHVybiB2YWx1ZSksIG9yIGEgYnJhbmNoIHdhcyBjaG9zZW5cbiAqIGFuZCBpcyByZWFkeSB0byBleGVjdXRlIGluIGBicmFuY2hDb250ZXh0YC5cbiAqL1xuZXhwb3J0IHR5cGUgRGVjaWRlckRpc3BhdGNoPFRPdXQgPSBhbnksIFRTY29wZSA9IGFueT4gPVxuICB8IHsga2luZDogJ2JyZWFrJzsgYnJhbmNoSWQ6IHN0cmluZyB9XG4gIHwgeyBraW5kOiAnZGlzcGF0Y2gnOyBjaG9zZW46IFN0YWdlTm9kZTxUT3V0LCBUU2NvcGU+OyBicmFuY2hDb250ZXh0OiBTdGFnZUNvbnRleHQgfTtcblxuZXhwb3J0IGNsYXNzIERlY2lkZXJIYW5kbGVyPFRPdXQgPSBhbnksIFRTY29wZSA9IGFueT4ge1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IGRlcHM6IEhhbmRsZXJEZXBzPFRPdXQsIFRTY29wZT4pIHt9XG5cbiAgLyoqXG4gICAqIEhhbmRsZSBhIHNjb3BlLWJhc2VkIGRlY2lkZXIgKGNyZWF0ZWQgdmlhIGFkZERlY2lkZXJGdW5jdGlvbikuXG4gICAqIFRoZSBzdGFnZSBmdW5jdGlvbiBJUyB0aGUgZGVjaWRlciDigJQgaXRzIHJldHVybiB2YWx1ZSBpcyB0aGUgYnJhbmNoIElELlxuICAgKiBFeGVjdXRpb24gb3JkZXI6IHJ1blN0YWdlKGZuKSDihpIgY29tbWl0IOKGkiByZXNvbHZlIGNoaWxkIOKGkiBsb2cg4oaSIGV4ZWN1dGVOb2RlKGNoaWxkKS5cbiAgICovXG4gIGFzeW5jIGhhbmRsZVNjb3BlQmFzZWQoXG4gICAgbm9kZTogU3RhZ2VOb2RlPFRPdXQsIFRTY29wZT4sXG4gICAgc3RhZ2VGdW5jOiBTdGFnZUZ1bmN0aW9uPFRPdXQsIFRTY29wZT4sXG4gICAgY29udGV4dDogU3RhZ2VDb250ZXh0LFxuICAgIGJyZWFrRmxhZzogeyBzaG91bGRCcmVhazogYm9vbGVhbiB9LFxuICAgIGJyYW5jaFBhdGg6IHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgICBydW5TdGFnZTogUnVuU3RhZ2VGbjxUT3V0LCBUU2NvcGU+LFxuICAgIGV4ZWN1dGVOb2RlOiBFeGVjdXRlTm9kZUZuPFRPdXQsIFRTY29wZT4sXG4gICAgdHJhdmVyc2FsQ29udGV4dD86IFRyYXZlcnNhbENvbnRleHQsXG4gICk6IFByb21pc2U8YW55PiB7XG4gICAgY29uc3QgZGlzcGF0Y2ggPSBhd2FpdCB0aGlzLnByZXBhcmVEaXNwYXRjaChcbiAgICAgIG5vZGUsXG4gICAgICBzdGFnZUZ1bmMsXG4gICAgICBjb250ZXh0LFxuICAgICAgYnJlYWtGbGFnLFxuICAgICAgYnJhbmNoUGF0aCxcbiAgICAgIHJ1blN0YWdlLFxuICAgICAgdHJhdmVyc2FsQ29udGV4dCxcbiAgICApO1xuXG4gICAgaWYgKGRpc3BhdGNoLmtpbmQgPT09ICdicmVhaycpIHtcbiAgICAgIHJldHVybiBkaXNwYXRjaC5icmFuY2hJZDtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGF3YWl0IGV4ZWN1dGVOb2RlKGRpc3BhdGNoLmNob3NlbiwgZGlzcGF0Y2guYnJhbmNoQ29udGV4dCwgYnJlYWtGbGFnLCBicmFuY2hQYXRoKTtcbiAgICB9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuICAgICAgLy8gU3RhbXAgaW52b2tlciBjb250ZXh0IG9uIFBhdXNlU2lnbmFsIGR1cmluZyBidWJibGUtdXAuXG4gICAgICAvLyBUaGUgZGVjaWRlciAobm9kZSkgaXMgdGhlIGludm9rZXI7IGl0cyAubmV4dCBpcyB0aGUgY29udGludWF0aW9uIHRhcmdldC5cbiAgICAgIGlmIChpc1BhdXNlU2lnbmFsKGVycm9yKSkge1xuICAgICAgICBlcnJvci5zZXRJbnZva2VyKG5vZGUuaWQhKTtcbiAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICB9XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUnVuIHRoZSBkZWNpZGVyIHN0YWdlIGFuZCByZXNvbHZlIHRoZSBjaG9zZW4gYnJhbmNoIFdJVEhPVVQgZXhlY3V0aW5nIGl0LlxuICAgKiBFdmVyeXRoaW5nIHVwIHRvIChhbmQgaW5jbHVkaW5nKSB0aGUgYG9uRGVjaXNpb25gL2BvblN0YWdlRXhlY3V0ZWRgXG4gICAqIG5hcnJhdGl2ZSBhbmQgdGhlIGJyYW5jaCBjb250ZXh0IGNyZWF0aW9uIGhhcHBlbnMgaGVyZSDigJQgb25seSB0aGVcbiAgICogYnJhbmNoIGV4ZWN1dGlvbiBpdHNlbGYgaXMgbGVmdCB0byB0aGUgY2FsbGVyLlxuICAgKi9cbiAgYXN5bmMgcHJlcGFyZURpc3BhdGNoKFxuICAgIG5vZGU6IFN0YWdlTm9kZTxUT3V0LCBUU2NvcGU+LFxuICAgIHN0YWdlRnVuYzogU3RhZ2VGdW5jdGlvbjxUT3V0LCBUU2NvcGU+LFxuICAgIGNvbnRleHQ6IFN0YWdlQ29udGV4dCxcbiAgICBicmVha0ZsYWc6IHsgc2hvdWxkQnJlYWs6IGJvb2xlYW4gfSxcbiAgICBicmFuY2hQYXRoOiBzdHJpbmcgfCB1bmRlZmluZWQsXG4gICAgcnVuU3RhZ2U6IFJ1blN0YWdlRm48VE91dCwgVFNjb3BlPixcbiAgICB0cmF2ZXJzYWxDb250ZXh0PzogVHJhdmVyc2FsQ29udGV4dCxcbiAgKTogUHJvbWlzZTxEZWNpZGVyRGlzcGF0Y2g8VE91dCwgVFNjb3BlPj4ge1xuICAgIGNvbnN0IGJyZWFrRm4gPSAoKSA9PiAoYnJlYWtGbGFnLnNob3VsZEJyZWFrID0gdHJ1ZSk7XG5cbiAgICBsZXQgYnJhbmNoSWQ6IHN0cmluZztcbiAgICBsZXQgZGVjaXNpb25FdmlkZW5jZTogRGVjaXNpb25FdmlkZW5jZSB8IHVuZGVmaW5lZDtcbiAgICB0cnkge1xuICAgICAgY29uc3Qgc3RhZ2VPdXRwdXQgPSBhd2FpdCBydW5TdGFnZShub2RlLCBzdGFnZUZ1bmMsIGNvbnRleHQsIGJyZWFrRm4sIHRyYXZlcnNhbENvbnRleHQpO1xuICAgICAgLy8gRGV0ZWN0IERlY2lzaW9uUmVzdWx0IGZyb20gZGVjaWRlKCkgaGVscGVyIHZpYSBTeW1ib2wgYnJhbmRcbiAgICAgIGlmIChzdGFnZU91dHB1dCAmJiB0eXBlb2Ygc3RhZ2VPdXRwdXQgPT09ICdvYmplY3QnICYmIFJlZmxlY3QuaGFzKHN0YWdlT3V0cHV0IGFzIG9iamVjdCwgREVDSVNJT05fUkVTVUxUKSkge1xuICAgICAgICBicmFuY2hJZCA9IChzdGFnZU91dHB1dCBhcyBhbnkpLmJyYW5jaDtcbiAgICAgICAgZGVjaXNpb25FdmlkZW5jZSA9IChzdGFnZU91dHB1dCBhcyBhbnkpLmV2aWRlbmNlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYnJhbmNoSWQgPSBTdHJpbmcoc3RhZ2VPdXRwdXQpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgIC8vIFBhdXNlU2lnbmFsIGlzIGV4cGVjdGVkIGNvbnRyb2wgZmxvdyDigJQgY29tbWl0IGFuZCByZS10aHJvdyB3aXRob3V0IGVycm9yIGxvZ2dpbmcuXG4gICAgICBpZiAoaXNQYXVzZVNpZ25hbChlcnJvcikpIHtcbiAgICAgICAgY29udGV4dC5jb21taXQoKTtcbiAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICB9XG4gICAgICBjb250ZXh0LmNvbW1pdCgpO1xuICAgICAgdGhpcy5kZXBzLmxvZ2dlci5lcnJvcihgRXJyb3IgaW4gcGlwZWxpbmUgKCR7YnJhbmNoUGF0aH0pIHN0YWdlIFske25vZGUubmFtZX1dOmAsIHsgZXJyb3IgfSk7XG4gICAgICBjb250ZXh0LmFkZEVycm9yKCdzdGFnZUV4ZWN1dGlvbkVycm9yJywgdGhyb3duVGV4dChlcnJvcikpO1xuICAgICAgdGhpcy5kZXBzLm5hcnJhdGl2ZUdlbmVyYXRvci5vbkVycm9yKG5vZGUubmFtZSwgdGhyb3duVGV4dChlcnJvciksIGVycm9yLCB0cmF2ZXJzYWxDb250ZXh0KTtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cblxuICAgIGNvbW1pdFN0YWdlKGNvbnRleHQsIHRoaXMuZGVwcy5uYXJyYXRpdmVHZW5lcmF0b3IsIG5vZGUubmFtZSwgdHJhdmVyc2FsQ29udGV4dCk7XG5cbiAgICBpZiAoYnJlYWtGbGFnLnNob3VsZEJyZWFrKSB7XG4gICAgICByZXR1cm4geyBraW5kOiAnYnJlYWsnLCBicmFuY2hJZCB9O1xuICAgIH1cblxuICAgIC8vIFJlc29sdmUgY2hpbGQgYnkgbWF0Y2hpbmcgYnJhbmNoIElEIGFnYWluc3Qgbm9kZS5jaGlsZHJlbi5cbiAgICAvLyBNYXRjaCBicmFuY2hJZCBmaXJzdCAob3JpZ2luYWwgdW5wcmVmaXhlZCBJRCksIGZhbGwgYmFjayB0byBpZCBmb3IgYmFja3dhcmQgY29tcGF0LlxuICAgIGNvbnN0IGNoaWxkcmVuID0gbm9kZS5jaGlsZHJlbiBhcyBTdGFnZU5vZGU8VE91dCwgVFNjb3BlPltdO1xuICAgIGxldCBjaG9zZW4gPSBjaGlsZHJlbi5maW5kKChjaGlsZCkgPT4gKGNoaWxkLmJyYW5jaElkID8/IGNoaWxkLmlkKSA9PT0gYnJhbmNoSWQpO1xuXG4gICAgLy8gRmFsbCBiYWNrIHRvIGRlZmF1bHQgYnJhbmNoXG4gICAgaWYgKCFjaG9zZW4pIHtcbiAgICAgIGNvbnN0IGRlZmF1bHRDaGlsZCA9IGNoaWxkcmVuLmZpbmQoKGNoaWxkKSA9PiAoY2hpbGQuYnJhbmNoSWQgPz8gY2hpbGQuaWQpID09PSAnZGVmYXVsdCcpO1xuICAgICAgaWYgKGRlZmF1bHRDaGlsZCkge1xuICAgICAgICBjaG9zZW4gPSBkZWZhdWx0Q2hpbGQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBlcnJvck1lc3NhZ2UgPSBgU2NvcGUtYmFzZWQgZGVjaWRlciAnJHtub2RlLm5hbWV9JyByZXR1cm5lZCBicmFuY2ggSUQgJyR7YnJhbmNoSWR9JyB3aGljaCBkb2Vzbid0IG1hdGNoIGFueSBjaGlsZCBhbmQgbm8gZGVmYXVsdCBicmFuY2ggaXMgc2V0YDtcbiAgICAgICAgY29udGV4dC5hZGRFcnJvcignZGVjaWRlckVycm9yJywgZXJyb3JNZXNzYWdlKTtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGVycm9yTWVzc2FnZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgY2hvc2VuTmFtZSA9IGNob3Nlbi5uYW1lO1xuICAgIGNvbnN0IHdhc0RlZmF1bHQgPSAoY2hvc2VuLmJyYW5jaElkID8/IGNob3Nlbi5pZCkgIT09IGJyYW5jaElkO1xuICAgIGNvbnN0IHJhdGlvbmFsZSA9IGNvbnRleHQuZGVidWc/LmxvZ0NvbnRleHQ/LmRlY2lkZXJSYXRpb25hbGUgYXMgc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIGxldCBicmFuY2hSZWFzb246IHN0cmluZztcbiAgICBpZiAod2FzRGVmYXVsdCkge1xuICAgICAgYnJhbmNoUmVhc29uID0gYFJldHVybmVkICcke2JyYW5jaElkfScgKG5vIG1hdGNoKSwgZmVsbCBiYWNrIHRvIGRlZmF1bHQg4oaSICR7Y2hvc2VuTmFtZX0gcGF0aC5gO1xuICAgIH0gZWxzZSBpZiAocmF0aW9uYWxlKSB7XG4gICAgICBicmFuY2hSZWFzb24gPSBgQmFzZWQgb246ICR7cmF0aW9uYWxlfSDihpIgY2hvc2UgJHtjaG9zZW5OYW1lfSBwYXRoLmA7XG4gICAgfSBlbHNlIHtcbiAgICAgIGJyYW5jaFJlYXNvbiA9IGBFdmFsdWF0ZWQgc2NvcGUgYW5kIHJldHVybmVkICcke2JyYW5jaElkfScg4oaSIGNob3NlICR7Y2hvc2VuTmFtZX0gcGF0aC5gO1xuICAgIH1cbiAgICBjb250ZXh0LmFkZEZsb3dEZWJ1Z01lc3NhZ2UoJ2JyYW5jaCcsIGJyYW5jaFJlYXNvbiwge1xuICAgICAgdGFyZ2V0U3RhZ2U6IGNob3Nlbi5uYW1lLFxuICAgICAgcmF0aW9uYWxlOiByYXRpb25hbGUgfHwgYHJldHVybmVkIGJyYW5jaElkOiAke2JyYW5jaElkfWAsXG4gICAgfSk7XG5cbiAgICB0aGlzLmRlcHMubmFycmF0aXZlR2VuZXJhdG9yLm9uRGVjaXNpb24oXG4gICAgICBub2RlLm5hbWUsXG4gICAgICBjaG9zZW4ubmFtZSxcbiAgICAgIHJhdGlvbmFsZSxcbiAgICAgIG5vZGUuZGVzY3JpcHRpb24sXG4gICAgICB0cmF2ZXJzYWxDb250ZXh0LFxuICAgICAgZGVjaXNpb25FdmlkZW5jZSxcbiAgICApO1xuICAgIC8vIFByb3Bvc2FsICMwMDM6IGZpcmUgb25TdGFnZUV4ZWN1dGVkIEFGVEVSIHRoZSBzcGVjaWFsaXplZCBldmVudFxuICAgIC8vIHNvIGNvbnN1bWVycyB0cmFja2luZyBcImRpZCB0aGlzIHN0YWdlIHJ1blwiIHdvcmsgdW5pZm9ybWx5LlxuICAgIHRoaXMuZGVwcy5uYXJyYXRpdmVHZW5lcmF0b3Iub25TdGFnZUV4ZWN1dGVkKG5vZGUubmFtZSwgbm9kZS5kZXNjcmlwdGlvbiwgdHJhdmVyc2FsQ29udGV4dCwgJ2RlY2lkZXInKTtcblxuICAgIGNvbnN0IGJyYW5jaENvbnRleHQgPSBjb250ZXh0LmNyZWF0ZUNoaWxkKGJyYW5jaFBhdGggYXMgc3RyaW5nLCBjaG9zZW4uaWQsIGNob3Nlbi5uYW1lLCBjaG9zZW4uaWQpO1xuXG4gICAgcmV0dXJuIHsga2luZDogJ2Rpc3BhdGNoJywgY2hvc2VuLCBicmFuY2hDb250ZXh0IH07XG4gIH1cbn1cbiJdfQ==
|