footprintjs 9.3.0 → 9.5.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/AGENTS.md +2 -1
- package/CLAUDE.md +2 -1
- package/dist/advanced.js +1 -1
- package/dist/esm/advanced.js +1 -1
- package/dist/esm/index.js +1 -1
- package/dist/esm/lib/builder/FlowChartBuilder.js +15 -2
- package/dist/esm/lib/capture/envelope.js +187 -0
- package/dist/esm/lib/capture/index.js +16 -0
- package/dist/esm/lib/capture/policies.js +29 -0
- package/dist/esm/lib/capture/summarize.js +58 -0
- package/dist/esm/lib/engine/handlers/ContinuationResolver.js +23 -4
- package/dist/esm/lib/engine/handlers/SubflowExecutor.js +9 -1
- package/dist/esm/lib/engine/types.js +1 -1
- package/dist/esm/lib/memory/StageContext.js +62 -44
- package/dist/esm/lib/memory/index.js +2 -2
- package/dist/esm/lib/memory/types.js +7 -4
- package/dist/esm/lib/observer-queue/deferredDispatcher.js +226 -0
- package/dist/esm/lib/observer-queue/flushDriver.js +163 -0
- package/dist/esm/lib/observer-queue/index.js +22 -0
- package/dist/esm/lib/observer-queue/mergedQueue.js +91 -0
- package/dist/esm/lib/observer-queue/ring.js +122 -0
- package/dist/esm/lib/runner/ExecutionRuntime.js +13 -1
- package/dist/esm/lib/runner/FlowChartExecutor.js +20 -1
- package/dist/index.js +1 -1
- package/dist/lib/builder/FlowChartBuilder.js +15 -2
- package/dist/lib/capture/envelope.js +192 -0
- package/dist/lib/capture/index.js +23 -0
- package/dist/lib/capture/policies.js +30 -0
- package/dist/lib/capture/summarize.js +63 -0
- package/dist/lib/engine/handlers/ContinuationResolver.js +23 -4
- package/dist/lib/engine/handlers/SubflowExecutor.js +9 -1
- package/dist/lib/engine/types.js +1 -1
- package/dist/lib/memory/StageContext.js +63 -45
- package/dist/lib/memory/index.js +3 -2
- package/dist/lib/memory/types.js +10 -5
- package/dist/lib/observer-queue/deferredDispatcher.js +230 -0
- package/dist/lib/observer-queue/flushDriver.js +167 -0
- package/dist/lib/observer-queue/index.js +36 -0
- package/dist/lib/observer-queue/mergedQueue.js +95 -0
- package/dist/lib/observer-queue/ring.js +126 -0
- package/dist/lib/runner/ExecutionRuntime.js +13 -1
- package/dist/lib/runner/FlowChartExecutor.js +20 -1
- package/dist/types/advanced.d.ts +1 -1
- package/dist/types/index.d.ts +13 -0
- package/dist/types/lib/capture/envelope.d.ts +169 -0
- package/dist/types/lib/capture/index.d.ts +16 -0
- package/dist/types/lib/capture/policies.d.ts +42 -0
- package/dist/types/lib/capture/summarize.d.ts +65 -0
- package/dist/types/lib/engine/handlers/ContinuationResolver.d.ts +15 -2
- package/dist/types/lib/engine/types.d.ts +3 -0
- package/dist/types/lib/memory/StageContext.d.ts +38 -1
- package/dist/types/lib/memory/index.d.ts +2 -2
- package/dist/types/lib/memory/types.d.ts +33 -22
- package/dist/types/lib/observer-queue/deferredDispatcher.d.ts +169 -0
- package/dist/types/lib/observer-queue/flushDriver.d.ts +124 -0
- package/dist/types/lib/observer-queue/index.d.ts +25 -0
- package/dist/types/lib/observer-queue/mergedQueue.d.ts +85 -0
- package/dist/types/lib/observer-queue/ring.d.ts +99 -0
- package/dist/types/lib/runner/ExecutionRuntime.d.ts +11 -1
- package/dist/types/lib/runner/FlowChartExecutor.d.ts +43 -1
- package/package.json +1 -1
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* observer-queue/ring.ts — RFC-001 Block 2: bounded ring with overflow policies.
|
|
3
|
+
*
|
|
4
|
+
* Pattern: Fixed-capacity circular buffer with explicit, COUNTED overflow
|
|
5
|
+
* behavior. The deferred-observer queue must never grow without
|
|
6
|
+
* bound (a slow consumer cannot OOM the producer), and must never
|
|
7
|
+
* lose an event silently (every loss increments `drops`).
|
|
8
|
+
* Role: Storage primitive under the merged queue (Block 3). Pure data
|
|
9
|
+
* structure — zero imports, zero engine knowledge, generic over T.
|
|
10
|
+
*
|
|
11
|
+
* Overflow policies (RFC-001 §5, with the accepted 'block' resolution):
|
|
12
|
+
* - `'drop-oldest'` — evict the oldest queued item to admit the new one.
|
|
13
|
+
* The evicted item is LOST (`drops`++) and returned on the push result
|
|
14
|
+
* so the caller can account for it. Sequence stamps on surviving items
|
|
15
|
+
* keep loss visible as seq gaps (honest loss accounting). DEFAULT
|
|
16
|
+
* posture for telemetry-grade delivery.
|
|
17
|
+
* - `'sample'` — while saturated, admit 1 in `sampleEvery` arrivals
|
|
18
|
+
* (evicting the oldest to make room — that eviction is also a counted
|
|
19
|
+
* loss); refuse the rest (each a counted loss). Keeps a thinned,
|
|
20
|
+
* still-fresh stream under sustained overload. The saturation counter
|
|
21
|
+
* is episode-scoped: it resets whenever a push succeeds through the
|
|
22
|
+
* non-full path.
|
|
23
|
+
* - `'block'` — the ring REFUSES the new item (`accepted: false`,
|
|
24
|
+
* `rejections`++) and drops NOTHING. In a single-threaded runtime a
|
|
25
|
+
* queue cannot literally block its producer; the dispatcher (Block 5)
|
|
26
|
+
* interprets a refusal as "deliver this event synchronously inline" —
|
|
27
|
+
* re-introducing blocking delivery by the consumer's EXPLICIT choice.
|
|
28
|
+
* Rejections are NOT losses: the event is still delivered (inline), so
|
|
29
|
+
* `drops` stays untouched.
|
|
30
|
+
*
|
|
31
|
+
* Conservation invariant (property-tested):
|
|
32
|
+
* pushes === delivered + drops + rejections + size
|
|
33
|
+
*
|
|
34
|
+
* CURSOR-READY (amendment A2): v1 consumes destructively through ONE cursor
|
|
35
|
+
* (`shift()` advances `head`). The designed v1.1 path keeps items in the
|
|
36
|
+
* ring and gives each listener its own read cursor; `head` then advances to
|
|
37
|
+
* `min(cursors)` (the reclaim watermark) instead of on read. The storage
|
|
38
|
+
* layout (contiguous circular window, `head` + `count`) already supports
|
|
39
|
+
* that — only the consumption surface changes. Documented, not implemented.
|
|
40
|
+
*/
|
|
41
|
+
const DEFAULT_SAMPLE_EVERY = 10;
|
|
42
|
+
export class BoundedRing {
|
|
43
|
+
buffer;
|
|
44
|
+
policy;
|
|
45
|
+
sampleEvery;
|
|
46
|
+
/** Index of the oldest queued item — the single v1 cursor (see header). */
|
|
47
|
+
head = 0;
|
|
48
|
+
count = 0;
|
|
49
|
+
/** Arrivals seen while saturated in the current episode (`'sample'`). */
|
|
50
|
+
saturatedArrivals = 0;
|
|
51
|
+
pushes = 0;
|
|
52
|
+
delivered = 0;
|
|
53
|
+
drops = 0;
|
|
54
|
+
rejections = 0;
|
|
55
|
+
constructor(opts) {
|
|
56
|
+
if (!Number.isInteger(opts.capacity) || opts.capacity <= 0) {
|
|
57
|
+
throw new RangeError(`BoundedRing capacity must be a positive integer (got ${opts.capacity})`);
|
|
58
|
+
}
|
|
59
|
+
const sampleEvery = opts.sampleEvery ?? DEFAULT_SAMPLE_EVERY;
|
|
60
|
+
if (!Number.isInteger(sampleEvery) || sampleEvery <= 0) {
|
|
61
|
+
throw new RangeError(`BoundedRing sampleEvery must be a positive integer (got ${opts.sampleEvery})`);
|
|
62
|
+
}
|
|
63
|
+
this.buffer = new Array(opts.capacity);
|
|
64
|
+
this.policy = opts.policy;
|
|
65
|
+
this.sampleEvery = sampleEvery;
|
|
66
|
+
}
|
|
67
|
+
get size() {
|
|
68
|
+
return this.count;
|
|
69
|
+
}
|
|
70
|
+
get capacity() {
|
|
71
|
+
return this.buffer.length;
|
|
72
|
+
}
|
|
73
|
+
/** Lifetime counters — see {@link RingCounters}. */
|
|
74
|
+
getCounters() {
|
|
75
|
+
return { pushes: this.pushes, delivered: this.delivered, drops: this.drops, rejections: this.rejections };
|
|
76
|
+
}
|
|
77
|
+
/** Admit, evict-and-admit, refuse, or sample per policy — never throws. */
|
|
78
|
+
push(item) {
|
|
79
|
+
this.pushes += 1;
|
|
80
|
+
if (this.count < this.buffer.length) {
|
|
81
|
+
this.saturatedArrivals = 0; // new saturation episode starts fresh
|
|
82
|
+
this.store(item);
|
|
83
|
+
return { accepted: true };
|
|
84
|
+
}
|
|
85
|
+
if (this.policy === 'block') {
|
|
86
|
+
this.rejections += 1;
|
|
87
|
+
return { accepted: false };
|
|
88
|
+
}
|
|
89
|
+
if (this.policy === 'sample') {
|
|
90
|
+
this.saturatedArrivals += 1;
|
|
91
|
+
if (this.saturatedArrivals % this.sampleEvery !== 0) {
|
|
92
|
+
this.drops += 1; // the incoming item is sampled out — lost
|
|
93
|
+
return { accepted: false };
|
|
94
|
+
}
|
|
95
|
+
// The 1-in-N admission falls through to evict-and-store.
|
|
96
|
+
}
|
|
97
|
+
// 'drop-oldest' (and the 'sample' admission): evict the oldest — lost.
|
|
98
|
+
const evicted = this.buffer[this.head];
|
|
99
|
+
this.buffer[this.head] = undefined;
|
|
100
|
+
this.head = (this.head + 1) % this.buffer.length;
|
|
101
|
+
this.count -= 1;
|
|
102
|
+
this.drops += 1;
|
|
103
|
+
this.store(item);
|
|
104
|
+
return { accepted: true, evicted };
|
|
105
|
+
}
|
|
106
|
+
/** Pop the oldest queued item (FIFO). `undefined` when empty. */
|
|
107
|
+
shift() {
|
|
108
|
+
if (this.count === 0)
|
|
109
|
+
return undefined;
|
|
110
|
+
const item = this.buffer[this.head];
|
|
111
|
+
this.buffer[this.head] = undefined; // release the reference for GC
|
|
112
|
+
this.head = (this.head + 1) % this.buffer.length;
|
|
113
|
+
this.count -= 1;
|
|
114
|
+
this.delivered += 1;
|
|
115
|
+
return item;
|
|
116
|
+
}
|
|
117
|
+
store(item) {
|
|
118
|
+
this.buffer[(this.head + this.count) % this.buffer.length] = item;
|
|
119
|
+
this.count += 1;
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmluZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvb2JzZXJ2ZXItcXVldWUvcmluZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBdUNHO0FBeUNILE1BQU0sb0JBQW9CLEdBQUcsRUFBRSxDQUFDO0FBRWhDLE1BQU0sT0FBTyxXQUFXO0lBQ0wsTUFBTSxDQUF1QjtJQUM3QixNQUFNLENBQWlCO0lBQ3ZCLFdBQVcsQ0FBUztJQUNyQywyRUFBMkU7SUFDbkUsSUFBSSxHQUFHLENBQUMsQ0FBQztJQUNULEtBQUssR0FBRyxDQUFDLENBQUM7SUFDbEIseUVBQXlFO0lBQ2pFLGlCQUFpQixHQUFHLENBQUMsQ0FBQztJQUV0QixNQUFNLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsU0FBUyxHQUFHLENBQUMsQ0FBQztJQUNkLEtBQUssR0FBRyxDQUFDLENBQUM7SUFDVixVQUFVLEdBQUcsQ0FBQyxDQUFDO0lBRXZCLFlBQVksSUFBaUI7UUFDM0IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLElBQUksQ0FBQyxRQUFRLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDM0QsTUFBTSxJQUFJLFVBQVUsQ0FBQyx3REFBd0QsSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUM7UUFDakcsQ0FBQztRQUNELE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxXQUFXLElBQUksb0JBQW9CLENBQUM7UUFDN0QsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLElBQUksV0FBVyxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQ3ZELE1BQU0sSUFBSSxVQUFVLENBQUMsMkRBQTJELElBQUksQ0FBQyxXQUFXLEdBQUcsQ0FBQyxDQUFDO1FBQ3ZHLENBQUM7UUFDRCxJQUFJLENBQUMsTUFBTSxHQUFHLElB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QyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDO1FBQ2pELElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDO1FBQ2hCLElBQUksQ0FBQyxTQUFTLElBQUksQ0FBQyxDQUFDO1FBQ3BCLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVPLEtBQUssQ0FBQyxJQUFPO1FBQ25CLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQztRQUNsRSxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQztJQUNsQixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIG9ic2VydmVyLXF1ZXVlL3JpbmcudHMg4oCUIFJGQy0wMDEgQmxvY2sgMjogYm91bmRlZCByaW5nIHdpdGggb3ZlcmZsb3cgcG9saWNpZXMuXG4gKlxuICogUGF0dGVybjogIEZpeGVkLWNhcGFjaXR5IGNpcmN1bGFyIGJ1ZmZlciB3aXRoIGV4cGxpY2l0LCBDT1VOVEVEIG92ZXJmbG93XG4gKiAgICAgICAgICAgYmVoYXZpb3IuIFRoZSBkZWZlcnJlZC1vYnNlcnZlciBxdWV1ZSBtdXN0IG5ldmVyIGdyb3cgd2l0aG91dFxuICogICAgICAgICAgIGJvdW5kIChhIHNsb3cgY29uc3VtZXIgY2Fubm90IE9PTSB0aGUgcHJvZHVjZXIpLCBhbmQgbXVzdCBuZXZlclxuICogICAgICAgICAgIGxvc2UgYW4gZXZlbnQgc2lsZW50bHkgKGV2ZXJ5IGxvc3MgaW5jcmVtZW50cyBgZHJvcHNgKS5cbiAqIFJvbGU6ICAgICBTdG9yYWdlIHByaW1pdGl2ZSB1bmRlciB0aGUgbWVyZ2VkIHF1ZXVlIChCbG9jayAzKS4gUHVyZSBkYXRhXG4gKiAgICAgICAgICAgc3RydWN0dXJlIOKAlCB6ZXJvIGltcG9ydHMsIHplcm8gZW5naW5lIGtub3dsZWRnZSwgZ2VuZXJpYyBvdmVyIFQuXG4gKlxuICogT3ZlcmZsb3cgcG9saWNpZXMgKFJGQy0wMDEgwqc1LCB3aXRoIHRoZSBhY2NlcHRlZCAnYmxvY2snIHJlc29sdXRpb24pOlxuICogICAtIGAnZHJvcC1vbGRlc3QnYCDigJQgZXZpY3QgdGhlIG9sZGVzdCBxdWV1ZWQgaXRlbSB0byBhZG1pdCB0aGUgbmV3IG9uZS5cbiAqICAgICBUaGUgZXZpY3RlZCBpdGVtIGlzIExPU1QgKGBkcm9wc2ArKykgYW5kIHJldHVybmVkIG9uIHRoZSBwdXNoIHJlc3VsdFxuICogICAgIHNvIHRoZSBjYWxsZXIgY2FuIGFjY291bnQgZm9yIGl0LiBTZXF1ZW5jZSBzdGFtcHMgb24gc3Vydml2aW5nIGl0ZW1zXG4gKiAgICAga2VlcCBsb3NzIHZpc2libGUgYXMgc2VxIGdhcHMgKGhvbmVzdCBsb3NzIGFjY291bnRpbmcpLiBERUZBVUxUXG4gKiAgICAgcG9zdHVyZSBmb3IgdGVsZW1ldHJ5LWdyYWRlIGRlbGl2ZXJ5LlxuICogICAtIGAnc2FtcGxlJ2Ag4oCUIHdoaWxlIHNhdHVyYXRlZCwgYWRtaXQgMSBpbiBgc2FtcGxlRXZlcnlgIGFycml2YWxzXG4gKiAgICAgKGV2aWN0aW5nIHRoZSBvbGRlc3QgdG8gbWFrZSByb29tIOKAlCB0aGF0IGV2aWN0aW9uIGlzIGFsc28gYSBjb3VudGVkXG4gKiAgICAgbG9zcyk7IHJlZnVzZSB0aGUgcmVzdCAoZWFjaCBhIGNvdW50ZWQgbG9zcykuIEtlZXBzIGEgdGhpbm5lZCxcbiAqICAgICBzdGlsbC1mcmVzaCBzdHJlYW0gdW5kZXIgc3VzdGFpbmVkIG92ZXJsb2FkLiBUaGUgc2F0dXJhdGlvbiBjb3VudGVyXG4gKiAgICAgaXMgZXBpc29kZS1zY29wZWQ6IGl0IHJlc2V0cyB3aGVuZXZlciBhIHB1c2ggc3VjY2VlZHMgdGhyb3VnaCB0aGVcbiAqICAgICBub24tZnVsbCBwYXRoLlxuICogICAtIGAnYmxvY2snYCDigJQgdGhlIHJpbmcgUkVGVVNFUyB0aGUgbmV3IGl0ZW0gKGBhY2NlcHRlZDogZmFsc2VgLFxuICogICAgIGByZWplY3Rpb25zYCsrKSBhbmQgZHJvcHMgTk9USElORy4gSW4gYSBzaW5nbGUtdGhyZWFkZWQgcnVudGltZSBhXG4gKiAgICAgcXVldWUgY2Fubm90IGxpdGVyYWxseSBibG9jayBpdHMgcHJvZHVjZXI7IHRoZSBkaXNwYXRjaGVyIChCbG9jayA1KVxuICogICAgIGludGVycHJldHMgYSByZWZ1c2FsIGFzIFwiZGVsaXZlciB0aGlzIGV2ZW50IHN5bmNocm9ub3VzbHkgaW5saW5lXCIg4oCUXG4gKiAgICAgcmUtaW50cm9kdWNpbmcgYmxvY2tpbmcgZGVsaXZlcnkgYnkgdGhlIGNvbnN1bWVyJ3MgRVhQTElDSVQgY2hvaWNlLlxuICogICAgIFJlamVjdGlvbnMgYXJlIE5PVCBsb3NzZXM6IHRoZSBldmVudCBpcyBzdGlsbCBkZWxpdmVyZWQgKGlubGluZSksIHNvXG4gKiAgICAgYGRyb3BzYCBzdGF5cyB1bnRvdWNoZWQuXG4gKlxuICogQ29uc2VydmF0aW9uIGludmFyaWFudCAocHJvcGVydHktdGVzdGVkKTpcbiAqICAgcHVzaGVzID09PSBkZWxpdmVyZWQgKyBkcm9wcyArIHJlamVjdGlvbnMgKyBzaXplXG4gKlxuICogQ1VSU09SLVJFQURZIChhbWVuZG1lbnQgQTIpOiB2MSBjb25zdW1lcyBkZXN0cnVjdGl2ZWx5IHRocm91Z2ggT05FIGN1cnNvclxuICogKGBzaGlmdCgpYCBhZHZhbmNlcyBgaGVhZGApLiBUaGUgZGVzaWduZWQgdjEuMSBwYXRoIGtlZXBzIGl0ZW1zIGluIHRoZVxuICogcmluZyBhbmQgZ2l2ZXMgZWFjaCBsaXN0ZW5lciBpdHMgb3duIHJlYWQgY3Vyc29yOyBgaGVhZGAgdGhlbiBhZHZhbmNlcyB0b1xuICogYG1pbihjdXJzb3JzKWAgKHRoZSByZWNsYWltIHdhdGVybWFyaykgaW5zdGVhZCBvZiBvbiByZWFkLiBUaGUgc3RvcmFnZVxuICogbGF5b3V0IChjb250aWd1b3VzIGNpcmN1bGFyIHdpbmRvdywgYGhlYWRgICsgYGNvdW50YCkgYWxyZWFkeSBzdXBwb3J0c1xuICogdGhhdCDigJQgb25seSB0aGUgY29uc3VtcHRpb24gc3VyZmFjZSBjaGFuZ2VzLiBEb2N1bWVudGVkLCBub3QgaW1wbGVtZW50ZWQuXG4gKi9cblxuLyoqIEhvdyB0aGUgcmluZyB0cmVhdHMgYSBwdXNoIHdoZW4gaXQgaXMgYXQgY2FwYWNpdHkgKFJGQy0wMDEgwqc1KS4gKi9cbmV4cG9ydCB0eXBlIE92ZXJmbG93UG9saWN5ID0gJ2Jsb2NrJyB8ICdkcm9wLW9sZGVzdCcgfCAnc2FtcGxlJztcblxuZXhwb3J0IGludGVyZmFjZSBSaW5nT3B0aW9ucyB7XG4gIC8qKiBNYXggcXVldWVkIGl0ZW1zLiBQb3NpdGl2ZSBpbnRlZ2VyLiAqL1xuICByZWFkb25seSBjYXBhY2l0eTogbnVtYmVyO1xuICAvKiogT3ZlcmZsb3cgYmVoYXZpb3IgYXQgY2FwYWNpdHkg4oCUIHNlZSB0aGUgbW9kdWxlIGhlYWRlci4gKi9cbiAgcmVhZG9ubHkgcG9saWN5OiBPdmVyZmxvd1BvbGljeTtcbiAgLyoqXG4gICAqIGAnc2FtcGxlJ2Agb25seTogYWRtaXQgMSBpbiB0aGlzIG1hbnkgYXJyaXZhbHMgd2hpbGUgc2F0dXJhdGVkLlxuICAgKiBQb3NpdGl2ZSBpbnRlZ2VyOyBkZWZhdWx0IDEwLlxuICAgKi9cbiAgcmVhZG9ubHkgc2FtcGxlRXZlcnk/OiBudW1iZXI7XG59XG5cbi8qKiBPdXRjb21lIG9mIG9uZSB7QGxpbmsgQm91bmRlZFJpbmcucHVzaH0uICovXG5leHBvcnQgaW50ZXJmYWNlIFJpbmdQdXNoUmVzdWx0PFQ+IHtcbiAgLyoqIFRydWUgd2hlbiB0aGUgcHVzaGVkIGl0ZW0gaXMgbm93IHF1ZXVlZC4gKi9cbiAgcmVhZG9ubHkgYWNjZXB0ZWQ6IGJvb2xlYW47XG4gIC8qKlxuICAgKiBUaGUgb2xkZXN0IGl0ZW0sIHdoZW4gYWRtaXR0aW5nIHRoZSBuZXcgb25lIGV2aWN0ZWQgaXRcbiAgICogKGAnZHJvcC1vbGRlc3QnYCwgb3IgYSBgJ3NhbXBsZSdgIGFkbWlzc2lvbikuIEFscmVhZHkgY291bnRlZCBpblxuICAgKiBgZHJvcHNgIOKAlCBzdXJmYWNlZCBzbyBjYWxsZXJzIGNhbiBkbyB0aGVpciBvd24gbG9zcyBhY2NvdW50aW5nLlxuICAgKi9cbiAgcmVhZG9ubHkgZXZpY3RlZD86IFQ7XG59XG5cbi8qKiBNb25vdG9uaWMgY291bnRlcnMg4oCUIG5ldmVyIHJlc2V0IGZvciB0aGUgbGlmZXRpbWUgb2YgdGhlIHJpbmcuICovXG5leHBvcnQgaW50ZXJmYWNlIFJpbmdDb3VudGVycyB7XG4gIC8qKiBUb3RhbCBgcHVzaCgpYCBjYWxscy4gKi9cbiAgcmVhZG9ubHkgcHVzaGVzOiBudW1iZXI7XG4gIC8qKiBgc2hpZnQoKWAgY2FsbHMgdGhhdCByZXR1cm5lZCBhbiBpdGVtLiAqL1xuICByZWFkb25seSBkZWxpdmVyZWQ6IG51bWJlcjtcbiAgLyoqIEl0ZW1zIExPU1Qg4oCUIGV2aWN0aW9ucyBwbHVzIHNhbXBsZWQtb3V0IHJlZnVzYWxzLiBOZXZlciBzaWxlbnQuICovXG4gIHJlYWRvbmx5IGRyb3BzOiBudW1iZXI7XG4gIC8qKiBgJ2Jsb2NrJ2AgcmVmdXNhbHMg4oCUIE5PVCBsb3NzZXM7IHRoZSBjYWxsZXIgZGVsaXZlcnMgdGhlc2UgaW5saW5lLiAqL1xuICByZWFkb25seSByZWplY3Rpb25zOiBudW1iZXI7XG59XG5cbmNvbnN0IERFRkFVTFRfU0FNUExFX0VWRVJZID0gMTA7XG5cbmV4cG9ydCBjbGFzcyBCb3VuZGVkUmluZzxUPiB7XG4gIHByaXZhdGUgcmVhZG9ubHkgYnVmZmVyOiBBcnJheTxUIHwgdW5kZWZpbmVkPjtcbiAgcHJpdmF0ZSByZWFkb25seSBwb2xpY3k6IE92ZXJmbG93UG9saWN5O1xuICBwcml2YXRlIHJlYWRvbmx5IHNhbXBsZUV2ZXJ5OiBudW1iZXI7XG4gIC8qKiBJbmRleCBvZiB0aGUgb2xkZXN0IHF1ZXVlZCBpdGVtIOKAlCB0aGUgc2luZ2xlIHYxIGN1cnNvciAoc2VlIGhlYWRlcikuICovXG4gIHByaXZhdGUgaGVhZCA9IDA7XG4gIHByaXZhdGUgY291bnQgPSAwO1xuICAvKiogQXJyaXZhbHMgc2VlbiB3aGlsZSBzYXR1cmF0ZWQgaW4gdGhlIGN1cnJlbnQgZXBpc29kZSAoYCdzYW1wbGUnYCkuICovXG4gIHByaXZhdGUgc2F0dXJhdGVkQXJyaXZhbHMgPSAwO1xuXG4gIHByaXZhdGUgcHVzaGVzID0gMDtcbiAgcHJpdmF0ZSBkZWxpdmVyZWQgPSAwO1xuICBwcml2YXRlIGRyb3BzID0gMDtcbiAgcHJpdmF0ZSByZWplY3Rpb25zID0gMDtcblxuICBjb25zdHJ1Y3RvcihvcHRzOiBSaW5nT3B0aW9ucykge1xuICAgIGlmICghTnVtYmVyLmlzSW50ZWdlcihvcHRzLmNhcGFjaXR5KSB8fCBvcHRzLmNhcGFjaXR5IDw9IDApIHtcbiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKGBCb3VuZGVkUmluZyBjYXBhY2l0eSBtdXN0IGJlIGEgcG9zaXRpdmUgaW50ZWdlciAoZ290ICR7b3B0cy5jYXBhY2l0eX0pYCk7XG4gICAgfVxuICAgIGNvbnN0IHNhbXBsZUV2ZXJ5ID0gb3B0cy5zYW1wbGVFdmVyeSA/PyBERUZBVUxUX1NBTVBMRV9FVkVSWTtcbiAgICBpZiAoIU51bWJlci5pc0ludGVnZXIoc2FtcGxlRXZlcnkpIHx8IHNhbXBsZUV2ZXJ5IDw9IDApIHtcbiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKGBCb3VuZGVkUmluZyBzYW1wbGVFdmVyeSBtdXN0IGJlIGEgcG9zaXRpdmUgaW50ZWdlciAoZ290ICR7b3B0cy5zYW1wbGVFdmVyeX0pYCk7XG4gICAgfVxuICAgIHRoaXMuYnVmZmVyID0gbmV3IEFycmF5PFQgfCB1bmRlZmluZWQ+KG9wdHMuY2FwYWNpdHkpO1xuICAgIHRoaXMucG9saWN5ID0gb3B0cy5wb2xpY3k7XG4gICAgdGhpcy5zYW1wbGVFdmVyeSA9IHNhbXBsZUV2ZXJ5O1xuICB9XG5cbiAgZ2V0IHNpemUoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5jb3VudDtcbiAgfVxuXG4gIGdldCBjYXBhY2l0eSgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmJ1ZmZlci5sZW5ndGg7XG4gIH1cblxuICAvKiogTGlmZXRpbWUgY291bnRlcnMg4oCUIHNlZSB7QGxpbmsgUmluZ0NvdW50ZXJzfS4gKi9cbiAgZ2V0Q291bnRlcnMoKTogUmluZ0NvdW50ZXJzIHtcbiAgICByZXR1cm4geyBwdXNoZXM6IHRoaXMucHVzaGVzLCBkZWxpdmVyZWQ6IHRoaXMuZGVsaXZlcmVkLCBkcm9wczogdGhpcy5kcm9wcywgcmVqZWN0aW9uczogdGhpcy5yZWplY3Rpb25zIH07XG4gIH1cblxuICAvKiogQWRtaXQsIGV2aWN0LWFuZC1hZG1pdCwgcmVmdXNlLCBvciBzYW1wbGUgcGVyIHBvbGljeSDigJQgbmV2ZXIgdGhyb3dzLiAqL1xuICBwdXNoKGl0ZW06IFQpOiBSaW5nUHVzaFJlc3VsdDxUPiB7XG4gICAgdGhpcy5wdXNoZXMgKz0gMTtcblxuICAgIGlmICh0aGlzLmNvdW50IDwgdGhpcy5idWZmZXIubGVuZ3RoKSB7XG4gICAgICB0aGlzLnNhdHVyYXRlZEFycml2YWxzID0gMDsgLy8gbmV3IHNhdHVyYXRpb24gZXBpc29kZSBzdGFydHMgZnJlc2hcbiAgICAgIHRoaXMuc3RvcmUoaXRlbSk7XG4gICAgICByZXR1cm4geyBhY2NlcHRlZDogdHJ1ZSB9O1xuICAgIH1cblxuICAgIGlmICh0aGlzLnBvbGljeSA9PT0gJ2Jsb2NrJykge1xuICAgICAgdGhpcy5yZWplY3Rpb25zICs9IDE7XG4gICAgICByZXR1cm4geyBhY2NlcHRlZDogZmFsc2UgfTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5wb2xpY3kgPT09ICdzYW1wbGUnKSB7XG4gICAgICB0aGlzLnNhdHVyYXRlZEFycml2YWxzICs9IDE7XG4gICAgICBpZiAodGhpcy5zYXR1cmF0ZWRBcnJpdmFscyAlIHRoaXMuc2FtcGxlRXZlcnkgIT09IDApIHtcbiAgICAgICAgdGhpcy5kcm9wcyArPSAxOyAvLyB0aGUgaW5jb21pbmcgaXRlbSBpcyBzYW1wbGVkIG91dCDigJQgbG9zdFxuICAgICAgICByZXR1cm4geyBhY2NlcHRlZDogZmFsc2UgfTtcbiAgICAgIH1cbiAgICAgIC8vIFRoZSAxLWluLU4gYWRtaXNzaW9uIGZhbGxzIHRocm91Z2ggdG8gZXZpY3QtYW5kLXN0b3JlLlxuICAgIH1cblxuICAgIC8vICdkcm9wLW9sZGVzdCcgKGFuZCB0aGUgJ3NhbXBsZScgYWRtaXNzaW9uKTogZXZpY3QgdGhlIG9sZGVzdCDigJQgbG9zdC5cbiAgICBjb25zdCBldmljdGVkID0gdGhpcy5idWZmZXJbdGhpcy5oZWFkXSBhcyBUO1xuICAgIHRoaXMuYnVmZmVyW3RoaXMuaGVhZF0gPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5oZWFkID0gKHRoaXMuaGVhZCArIDEpICUgdGhpcy5idWZmZXIubGVuZ3RoO1xuICAgIHRoaXMuY291bnQgLT0gMTtcbiAgICB0aGlzLmRyb3BzICs9IDE7XG4gICAgdGhpcy5zdG9yZShpdGVtKTtcbiAgICByZXR1cm4geyBhY2NlcHRlZDogdHJ1ZSwgZXZpY3RlZCB9O1xuICB9XG5cbiAgLyoqIFBvcCB0aGUgb2xkZXN0IHF1ZXVlZCBpdGVtIChGSUZPKS4gYHVuZGVmaW5lZGAgd2hlbiBlbXB0eS4gKi9cbiAgc2hpZnQoKTogVCB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKHRoaXMuY291bnQgPT09IDApIHJldHVybiB1bmRlZmluZWQ7XG4gICAgY29uc3QgaXRlbSA9IHRoaXMuYnVmZmVyW3RoaXMuaGVhZF0gYXMgVDtcbiAgICB0aGlzLmJ1ZmZlclt0aGlzLmhlYWRdID0gdW5kZWZpbmVkOyAvLyByZWxlYXNlIHRoZSByZWZlcmVuY2UgZm9yIEdDXG4gICAgdGhpcy5oZWFkID0gKHRoaXMuaGVhZCArIDEpICUgdGhpcy5idWZmZXIubGVuZ3RoO1xuICAgIHRoaXMuY291bnQgLT0gMTtcbiAgICB0aGlzLmRlbGl2ZXJlZCArPSAxO1xuICAgIHJldHVybiBpdGVtO1xuICB9XG5cbiAgcHJpdmF0ZSBzdG9yZShpdGVtOiBUKTogdm9pZCB7XG4gICAgdGhpcy5idWZmZXJbKHRoaXMuaGVhZCArIHRoaXMuY291bnQpICUgdGhpcy5idWZmZXIubGVuZ3RoXSA9IGl0ZW07XG4gICAgdGhpcy5jb3VudCArPSAxO1xuICB9XG59XG4iXX0=
|
|
@@ -69,6 +69,18 @@ export class ExecutionRuntime {
|
|
|
69
69
|
useReadTracking(mode) {
|
|
70
70
|
this.rootStageContext.useReadTracking(mode);
|
|
71
71
|
}
|
|
72
|
+
/**
|
|
73
|
+
* Set the write-tracking policy (#13c-A) on the root stage context — the
|
|
74
|
+
* sibling of {@link useReadTracking}, with identical plumbing: descendant
|
|
75
|
+
* contexts inherit via `createNext`/`createChild`; subflow root contexts
|
|
76
|
+
* inherit from their parent-mount context via `SubflowExecutor`. Called by
|
|
77
|
+
* `FlowChartExecutor.createTraverser()` when the executor's policy is not
|
|
78
|
+
* the default `'full'` — including the resume path, where it is applied to
|
|
79
|
+
* the freshly-created continuation root.
|
|
80
|
+
*/
|
|
81
|
+
useWriteTracking(mode) {
|
|
82
|
+
this.rootStageContext.useWriteTracking(mode);
|
|
83
|
+
}
|
|
72
84
|
/** Preserve the current rootStageContext for snapshots before changing it for resume. */
|
|
73
85
|
preserveSnapshotRoot() {
|
|
74
86
|
if (!this._snapshotRoot) {
|
|
@@ -109,4 +121,4 @@ export class ExecutionRuntime {
|
|
|
109
121
|
};
|
|
110
122
|
}
|
|
111
123
|
}
|
|
112
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRXhlY3V0aW9uUnVudGltZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvcnVubmVyL0V4ZWN1dGlvblJ1bnRpbWUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7R0FVRztBQUVILE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNqRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDekQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBd0J6RCxNQUFNLE9BQU8sZ0JBQWdCO0lBQ3BCLFdBQVcsQ0FBZTtJQUNqQzs7Ozs7Ozs7T0FRRztJQUNJLGFBQWEsQ0FBZ0I7SUFDN0IsZ0JBQWdCLENBQWU7SUFDL0IsZ0JBQWdCLENBQVc7SUFDbEMsb0ZBQW9GO0lBQzVFLGFBQWEsQ0FBZ0I7SUFDN0IsYUFBYSxDQUFVO0lBQ3ZCLGNBQWMsQ0FBVTtJQUVoQyxZQUFZLFFBQWdCLEVBQUUsTUFBYyxFQUFFLGFBQXVCLEVBQUUsWUFBc0I7UUFDM0YsSUFBSSxDQUFDLGFBQWEsR0FBRyxZQUFZLENBQUM7UUFDbEMsSUFBSSxDQUFDLGNBQWMsR0FBRyxhQUFhLENBQUM7UUFDcEMsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksUUFBUSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ25ELElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxZQUFZLENBQUMsYUFBYSxFQUFFLFlBQVksQ0FBQyxDQUFDO1FBQ2pFLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLFlBQVksQ0FBQyxFQUFFLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsV0FBVyxFQUFFLEVBQUUsRUFBRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUM5RyxDQUFDO0lBRUQ7Ozs7Ozs7Ozs7T0FVRztJQUNILG9CQUFvQjtRQUNsQixJQUFJLElBQUksQ0FBQyxhQUFhO1lBQUUsT0FBTyxDQUFDLGFBQWE7UUFDN0MsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLFlBQVksQ0FDbkMsSUFBSSxDQUFDLGNBQWM7UUFDbkIsa0VBQWtFO1FBQ2xFLG9FQUFvRTtRQUNwRSwrQkFBK0I7UUFDL0IsSUFBSSxDQUFDLGFBQWEsQ0FDbkIsQ0FBQztRQUNGLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDOUQsQ0FBQztJQUVEOzs7Ozs7O09BT0c7SUFDSCxlQUFlLENBQUMsSUFBc0I7UUFDcEMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM5QyxDQUFDO0lBRUQseUZBQXlGO0lBQ3pGLG9CQUFvQjtRQUNsQixJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQ3hCLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDO1FBQzdDLENBQUM7SUFDSCxDQUFDO0lBRUQsWUFBWTtRQUNWLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDMUMsT0FBTyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFvQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUN4RixDQUFDO0lBRUQsYUFBYSxDQUFDLElBQWMsRUFBRSxHQUFXLEVBQUUsS0FBYztRQUN2RCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDcEQsQ0FBQztJQUVEOzs7Ozs7Ozs7Ozs7Ozs7O09BZ0JHO0lBQ0gsV0FBVyxDQUFDLE9BQThCO1FBQ3hDLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxhQUFhLElBQUksSUFBSSxDQUFDLGdCQUFnQixDQUFDO1FBQ2pFLE1BQU0sV0FBVyxHQUFHLE9BQU8sRUFBRSxNQUFNLEtBQUssSUFBSSxJQUFJLElBQUksQ0FBQyxhQUFhLEtBQUssU0FBUyxDQUFDO1FBQ2pGLE9BQU87WUFDTCxXQUFXLEVBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsRUFBRTtZQUN2RixhQUFhLEVBQUUsWUFBWSxDQUFDLFdBQVcsRUFBRTtZQUN6QyxTQUFTLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksRUFBRTtTQUN4QyxDQUFDO0lBQ0osQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBFeGVjdXRpb25SdW50aW1lIOKAlCBUaGUgcnVudGltZSBlbnZpcm9ubWVudCBmb3Igb25lIGZsb3djaGFydCBleGVjdXRpb24uXG4gKlxuICogV2lyZXMgdXAgdGhlIHRocmVlIG1lbW9yeSBwcmltaXRpdmVzIGludG8gYSBzaW5nbGUgY29udGFpbmVyOlxuICogICAtIFNoYXJlZE1lbW9yeSAodGhlIGhlYXAg4oCUIHNoYXJlZCBzdGF0ZSBhY3Jvc3MgYWxsIHN0YWdlcylcbiAqICAgLSBTdGFnZUNvbnRleHQgICh0aGUgY2FsbCBzdGFjayDigJQgcGVyLXN0YWdlIGV4ZWN1dGlvbiB0cmVlKVxuICogICAtIEV2ZW50TG9nICAgICAgKHRoZSB0cmFuc2FjdGlvbiBsb2cg4oCUIGNvbW1pdCBoaXN0b3J5IGZvciByZXBsYXkpXG4gKlxuICogVGhlIGVuZ2luZSAoRmxvd2NoYXJ0VHJhdmVyc2VyKSByZWNlaXZlcyB0aGlzIGFzIGl0cyBydW50aW1lIHBhcmFtZXRlci5cbiAqIEFmdGVyIGV4ZWN1dGlvbiwgY29uc3VtZXJzIHF1ZXJ5IGl0IGZvciB0aGUgZnVsbCBleGVjdXRpb24gc3RhdGUuXG4gKi9cblxuaW1wb3J0IHsgRXZlbnRMb2cgfSBmcm9tICcuLi9tZW1vcnkvRXZlbnRMb2cuanMnO1xuaW1wb3J0IHsgU2hhcmVkTWVtb3J5IH0gZnJvbSAnLi4vbWVtb3J5L1NoYXJlZE1lbW9yeS5qcyc7XG5pbXBvcnQgeyBTdGFnZUNvbnRleHQgfSBmcm9tICcuLi9tZW1vcnkvU3RhZ2VDb250ZXh0LmpzJztcbmltcG9ydCB0eXBlIHsgQ29tbWl0QnVuZGxlLCBSZWFkVHJhY2tpbmdNb2RlLCBTdGFnZVNuYXBzaG90IH0gZnJvbSAnLi4vbWVtb3J5L3R5cGVzLmpzJztcblxuLyoqIFNuYXBzaG90IG9mIGEgc2luZ2xlIHJlY29yZGVyJ3MgY29sbGVjdGVkIGRhdGEuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlY29yZGVyU25hcHNob3Qge1xuICBpZDogc3RyaW5nO1xuICBuYW1lOiBzdHJpbmc7XG4gIC8qKiBTY29wZVJlY29yZGVyIHR5cGUgYW5kIHBhdHRlcm4gZGVzY3JpcHRpb24gKGUuZy4sIFwiVHJhbnNsYXRvciAoS2V5ZWRTdG9yZSkg4oCUIHBlci1zdGVwIHRva2VuIHVzYWdlXCIpLiAqL1xuICBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgLyoqIFByZWZlcnJlZCByZWFkLXRpbWUgb3BlcmF0aW9uIOKAlCBoaW50cyB0aGUgVUkgYWJvdXQgd2hpY2ggdmlldyB0byBzaG93IHByb21pbmVudGx5LiAqL1xuICBwcmVmZXJyZWRPcGVyYXRpb24/OiAndHJhbnNsYXRlJyB8ICdhY2N1bXVsYXRlJyB8ICdhZ2dyZWdhdGUnO1xuICBkYXRhOiB1bmtub3duO1xufVxuXG5leHBvcnQgdHlwZSBSdW50aW1lU25hcHNob3QgPSB7XG4gIHNoYXJlZFN0YXRlOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgZXhlY3V0aW9uVHJlZTogU3RhZ2VTbmFwc2hvdDtcbiAgY29tbWl0TG9nOiBDb21taXRCdW5kbGVbXTtcbiAgLyoqIFBlci1zdWJmbG93IGV4ZWN1dGlvbiByZXN1bHRzIChrZXllZCBieSBzdWJmbG93SWQpLiAqL1xuICBzdWJmbG93UmVzdWx0cz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAvKiogU25hcHNob3QgZGF0YSBmcm9tIHJlY29yZGVycyB0aGF0IGltcGxlbWVudCB0b1NuYXBzaG90KCkuICovXG4gIHJlY29yZGVycz86IFJlY29yZGVyU25hcHNob3RbXTtcbn07XG5cbmV4cG9ydCBjbGFzcyBFeGVjdXRpb25SdW50aW1lIHtcbiAgcHVibGljIGdsb2JhbFN0b3JlOiBTaGFyZWRNZW1vcnk7XG4gIC8qKlxuICAgKiBQYXJhbGxlbCByZWRhY3RlZCBtaXJyb3Igb2YgYGdsb2JhbFN0b3JlYC4gUG9wdWxhdGVkIGR1cmluZyB0cmF2ZXJzYWwgdmlhXG4gICAqIGBTdGFnZUNvbnRleHQuY29tbWl0KClgIHVzaW5nIHRoZSBhbHJlYWR5LWNvbXB1dGVkIHJlZGFjdGVkIHBhdGNoZXMuXG4gICAqIE9ubHkgZXhpc3RzIHdoZW4gYGVuYWJsZVJlZGFjdGVkTWlycm9yKClgIGhhcyBiZWVuIGNhbGxlZCDigJQgdHlwaWNhbGx5IGJ5XG4gICAqIGBGbG93Q2hhcnRFeGVjdXRvcmAgd2hlbiBhIGBSZWRhY3Rpb25Qb2xpY3lgIGlzIGNvbmZpZ3VyZWQuIE90aGVyd2lzZVxuICAgKiB1bmRlZmluZWQgYW5kIHplcm8gY29zdC5cbiAgICpcbiAgICogUmVhZCB2aWEgYGdldFNuYXBzaG90KHsgcmVkYWN0OiB0cnVlIH0pYC5cbiAgICovXG4gIHB1YmxpYyByZWRhY3RlZFN0b3JlPzogU2hhcmVkTWVtb3J5O1xuICBwdWJsaWMgcm9vdFN0YWdlQ29udGV4dDogU3RhZ2VDb250ZXh0O1xuICBwdWJsaWMgZXhlY3V0aW9uSGlzdG9yeTogRXZlbnRMb2c7XG4gIC8qKiBPcmlnaW5hbCByb290IGZvciBnZXRTbmFwc2hvdCgpIOKAlCBzZXQgYmVmb3JlIHJlc3VtZSBjaGFuZ2VzIHJvb3RTdGFnZUNvbnRleHQuICovXG4gIHByaXZhdGUgX3NuYXBzaG90Um9vdD86IFN0YWdlQ29udGV4dDtcbiAgcHJpdmF0ZSBfaW5pdGlhbFN0YXRlOiB1bmtub3duO1xuICBwcml2YXRlIF9kZWZhdWx0VmFsdWVzOiB1bmtub3duO1xuXG4gIGNvbnN0cnVjdG9yKHJvb3ROYW1lOiBzdHJpbmcsIHJvb3RJZDogc3RyaW5nLCBkZWZhdWx0VmFsdWVzPzogdW5rbm93biwgaW5pdGlhbFN0YXRlPzogdW5rbm93bikge1xuICAgIHRoaXMuX2luaXRpYWxTdGF0ZSA9IGluaXRpYWxTdGF0ZTtcbiAgICB0aGlzLl9kZWZhdWx0VmFsdWVzID0gZGVmYXVsdFZhbHVlcztcbiAgICB0aGlzLmV4ZWN1dGlvbkhpc3RvcnkgPSBuZXcgRXZlbnRMb2coaW5pdGlhbFN0YXRlKTtcbiAgICB0aGlzLmdsb2JhbFN0b3JlID0gbmV3IFNoYXJlZE1lbW9yeShkZWZhdWx0VmFsdWVzLCBpbml0aWFsU3RhdGUpO1xuICAgIHRoaXMucm9vdFN0YWdlQ29udGV4dCA9IG5ldyBTdGFnZUNvbnRleHQoJycsIHJvb3ROYW1lLCByb290SWQsIHRoaXMuZ2xvYmFsU3RvcmUsICcnLCB0aGlzLmV4ZWN1dGlvbkhpc3RvcnkpO1xuICB9XG5cbiAgLyoqXG4gICAqIE9wdCBpbiB0byBtYWludGFpbmluZyBhIHBhcmFsbGVsIHJlZGFjdGVkIG1pcnJvciBvZiBgZ2xvYmFsU3RvcmVgLiBBZnRlclxuICAgKiB0aGlzIGNhbGwsIGV2ZXJ5IGBTdGFnZUNvbnRleHQuY29tbWl0KClgIGluIHRoZSBydW4gd3JpdGVzIHRoZSByZWRhY3RlZFxuICAgKiBwYXRjaGVzICh0aGUgc2FtZSBvbmVzIGZlZCB0byB0aGUgZXZlbnQgbG9nKSBpbnRvIGByZWRhY3RlZFN0b3JlYCBpblxuICAgKiBhZGRpdGlvbiB0byB0aGUgcmF3IG9uZXMgd3JpdHRlbiB0byBgZ2xvYmFsU3RvcmVgLlxuICAgKlxuICAgKiBUaGUgbWlycm9yIGlzIGNyZWF0ZWQgbGF6aWx5IGFuZCBwcm9wYWdhdGVkIGludG8gYWxsIGNoaWxkIC8gbmV4dFxuICAgKiBjb250ZXh0cywgc28gaXQgY29ycmVjdGx5IHJlZmxlY3RzIHN1YmZsb3ctc2NvcGUgd3JpdGVzLiBXaGVuIG5vXG4gICAqIGBSZWRhY3Rpb25Qb2xpY3lgIGlzIGNvbmZpZ3VyZWQsIGNhbGxlcnMgc2hvdWxkIHNraXAgdGhpcyDigJQgdW51c2VkXG4gICAqIGFsbG9jYXRpb24sIG5vIGZ1bmN0aW9uYWwgZGlmZmVyZW5jZSBpbiB0aGUgc25hcHNob3QuXG4gICAqL1xuICBlbmFibGVSZWRhY3RlZE1pcnJvcigpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5yZWRhY3RlZFN0b3JlKSByZXR1cm47IC8vIGlkZW1wb3RlbnRcbiAgICB0aGlzLnJlZGFjdGVkU3RvcmUgPSBuZXcgU2hhcmVkTWVtb3J5KFxuICAgICAgdGhpcy5fZGVmYXVsdFZhbHVlcyxcbiAgICAgIC8vIFNlZWQgd2l0aCB0aGUgc2FtZSBpbml0aWFsIHN0YXRlIGFzIHRoZSByYXcgc3RvcmUgc28gdGhlIG1pcnJvclxuICAgICAgLy8gc3RhcnRzIGZyb20gYSBzY3J1YmJlZC1ub3RoaW5nIGJhc2VsaW5lOyBzdWJzZXF1ZW50IGNvbW1pdHMgYXBwbHlcbiAgICAgIC8vIHRoZSByZWRhY3RlZCBwYXRjaGVzIG9uIHRvcC5cbiAgICAgIHRoaXMuX2luaXRpYWxTdGF0ZSxcbiAgICApO1xuICAgIHRoaXMucm9vdFN0YWdlQ29udGV4dC51c2VSZWRhY3RlZE1pcnJvcih0aGlzLnJlZGFjdGVkU3RvcmUpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgcmVhZC10cmFja2luZyBwb2xpY3kgKCMxNCkgb24gdGhlIHJvb3Qgc3RhZ2UgY29udGV4dC4gRGVzY2VuZGFudFxuICAgKiBjb250ZXh0cyBpbmhlcml0IHZpYSBgY3JlYXRlTmV4dGAvYGNyZWF0ZUNoaWxkYDsgc3ViZmxvdyByb290IGNvbnRleHRzXG4gICAqIGluaGVyaXQgZnJvbSB0aGVpciBwYXJlbnQtbW91bnQgY29udGV4dCB2aWEgYFN1YmZsb3dFeGVjdXRvcmAuIENhbGxlZCBieVxuICAgKiBgRmxvd0NoYXJ0RXhlY3V0b3IuY3JlYXRlVHJhdmVyc2VyKClgIHdoZW4gdGhlIGV4ZWN1dG9yJ3MgcG9saWN5IGlzIG5vdFxuICAgKiB0aGUgZGVmYXVsdCBgJ2Z1bGwnYCDigJQgaW5jbHVkaW5nIHRoZSByZXN1bWUgcGF0aCwgd2hlcmUgaXQgaXMgYXBwbGllZCB0b1xuICAgKiB0aGUgZnJlc2hseS1jcmVhdGVkIGNvbnRpbnVhdGlvbiByb290LlxuICAgKi9cbiAgdXNlUmVhZFRyYWNraW5nKG1vZGU6IFJlYWRUcmFja2luZ01vZGUpOiB2b2lkIHtcbiAgICB0aGlzLnJvb3RTdGFnZUNvbnRleHQudXNlUmVhZFRyYWNraW5nKG1vZGUpO1xuICB9XG5cbiAgLyoqIFByZXNlcnZlIHRoZSBjdXJyZW50IHJvb3RTdGFnZUNvbnRleHQgZm9yIHNuYXBzaG90cyBiZWZvcmUgY2hhbmdpbmcgaXQgZm9yIHJlc3VtZS4gKi9cbiAgcHJlc2VydmVTbmFwc2hvdFJvb3QoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLl9zbmFwc2hvdFJvb3QpIHtcbiAgICAgIHRoaXMuX3NuYXBzaG90Um9vdCA9IHRoaXMucm9vdFN0YWdlQ29udGV4dDtcbiAgICB9XG4gIH1cblxuICBnZXRQaXBlbGluZXMoKTogc3RyaW5nW10ge1xuICAgIGNvbnN0IHN0YXRlID0gdGhpcy5nbG9iYWxTdG9yZS5nZXRTdGF0ZSgpO1xuICAgIHJldHVybiBzdGF0ZS5waXBlbGluZXMgPyBPYmplY3Qua2V5cyhzdGF0ZS5waXBlbGluZXMgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pIDogW107XG4gIH1cblxuICBzZXRSb290T2JqZWN0KHBhdGg6IHN0cmluZ1tdLCBrZXk6IHN0cmluZywgdmFsdWU6IHVua25vd24pIHtcbiAgICB0aGlzLnJvb3RTdGFnZUNvbnRleHQuc2V0T2JqZWN0KHBhdGgsIGtleSwgdmFsdWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiB0aGUgcnVudGltZSBzbmFwc2hvdC5cbiAgICpcbiAgICogQHBhcmFtIG9wdGlvbnMucmVkYWN0ICBXaGVuIGB0cnVlYCwgcmV0dXJucyBgc2hhcmVkU3RhdGVgIGZyb20gdGhlXG4gICAqICAgcGFyYWxsZWwgcmVkYWN0ZWQgbWlycm9yIChpZiBvbmUgd2FzIGVuYWJsZWQpLiBUaGlzIGlzIHRoZSBzYWZlIHZpZXdcbiAgICogICBmb3Igc2hhcmluZyB0cmFjZXMgZXh0ZXJuYWxseSDigJQgcGFzdGUgaW50byBhIHZpZXdlciwgc2hpcCB0byBzdXBwb3J0LFxuICAgKiAgIGV0Yy4gV2hlbiB0aGUgbWlycm9yIHdhcyBuZXZlciBlbmFibGVkLCBmYWxscyBiYWNrIHRvIHJhdyBgZ2xvYmFsU3RvcmVgXG4gICAqICAgYW5kIGEgZGV2LW1vZGUgd2FybmluZyBpcyBlbWl0dGVkIChzaWxlbnQgaW4gcHJvZHVjdGlvbikuXG4gICAqXG4gICAqICAgRGVmYXVsdCBgZmFsc2VgIHByZXNlcnZlcyB0aGUgcnVudGltZSB2aWV3IOKAlCBuZWNlc3NhcnkgZm9yIHBhdXNlIC9cbiAgICogICByZXN1bWUgKHJlc3VtcHRpb24gbXVzdCByZXBsYXkgYWdhaW5zdCB0aGUgcmVhbCB2YWx1ZXMsIG5vdFxuICAgKiAgICdbUkVEQUNURURdJykuXG4gICAqXG4gICAqIE90aGVyIGZpZWxkcyAoYGV4ZWN1dGlvblRyZWVgLCBgY29tbWl0TG9nYCkgYXJlIHRoZSBzYW1lIGVpdGhlciB3YXkg4oCUXG4gICAqIHRoZSBjb21taXQgbG9nIGlzIGFscmVhZHkgcmVkYWN0ZWQgYXQgd3JpdGUtdGltZSwgYW5kIHRoZSBleGVjdXRpb25cbiAgICogdHJlZSBvbmx5IGNhcnJpZXMgc3RydWN0dXJhbCBtZXRhZGF0YS5cbiAgICovXG4gIGdldFNuYXBzaG90KG9wdGlvbnM/OiB7IHJlZGFjdD86IGJvb2xlYW4gfSk6IFJ1bnRpbWVTbmFwc2hvdCB7XG4gICAgY29uc3Qgc25hcHNob3RSb290ID0gdGhpcy5fc25hcHNob3RSb290ID8/IHRoaXMucm9vdFN0YWdlQ29udGV4dDtcbiAgICBjb25zdCB1c2VSZWRhY3RlZCA9IG9wdGlvbnM/LnJlZGFjdCA9PT0gdHJ1ZSAmJiB0aGlzLnJlZGFjdGVkU3RvcmUgIT09IHVuZGVmaW5lZDtcbiAgICByZXR1cm4ge1xuICAgICAgc2hhcmVkU3RhdGU6IHVzZVJlZGFjdGVkID8gdGhpcy5yZWRhY3RlZFN0b3JlIS5nZXRTdGF0ZSgpIDogdGhpcy5nbG9iYWxTdG9yZS5nZXRTdGF0ZSgpLFxuICAgICAgZXhlY3V0aW9uVHJlZTogc25hcHNob3RSb290LmdldFNuYXBzaG90KCksXG4gICAgICBjb21taXRMb2c6IHRoaXMuZXhlY3V0aW9uSGlzdG9yeS5saXN0KCksXG4gICAgfTtcbiAgfVxufVxuIl19
|
|
124
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRXhlY3V0aW9uUnVudGltZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvcnVubmVyL0V4ZWN1dGlvblJ1bnRpbWUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7R0FVRztBQUVILE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNqRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDekQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBd0J6RCxNQUFNLE9BQU8sZ0JBQWdCO0lBQ3BCLFdBQVcsQ0FBZTtJQUNqQzs7Ozs7Ozs7T0FRRztJQUNJLGFBQWEsQ0FBZ0I7SUFDN0IsZ0JBQWdCLENBQWU7SUFDL0IsZ0JBQWdCLENBQVc7SUFDbEMsb0ZBQW9GO0lBQzVFLGFBQWEsQ0FBZ0I7SUFDN0IsYUFBYSxDQUFVO0lBQ3ZCLGNBQWMsQ0FBVTtJQUVoQyxZQUFZLFFBQWdCLEVBQUUsTUFBYyxFQUFFLGFBQXVCLEVBQUUsWUFBc0I7UUFDM0YsSUFBSSxDQUFDLGFBQWEsR0FBRyxZQUFZLENBQUM7UUFDbEMsSUFBSSxDQUFDLGNBQWMsR0FBRyxhQUFhLENBQUM7UUFDcEMsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksUUFBUSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ25ELElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxZQUFZLENBQUMsYUFBYSxFQUFFLFlBQVksQ0FBQyxDQUFDO1FBQ2pFLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLFlBQVksQ0FBQyxFQUFFLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsV0FBVyxFQUFFLEVBQUUsRUFBRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUM5RyxDQUFDO0lBRUQ7Ozs7Ozs7Ozs7T0FVRztJQUNILG9CQUFvQjtRQUNsQixJQUFJLElBQUksQ0FBQyxhQUFhO1lBQUUsT0FBTyxDQUFDLGFBQWE7UUFDN0MsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLFlBQVksQ0FDbkMsSUFBSSxDQUFDLGNBQWM7UUFDbkIsa0VBQWtFO1FBQ2xFLG9FQUFvRTtRQUNwRSwrQkFBK0I7UUFDL0IsSUFBSSxDQUFDLGFBQWEsQ0FDbkIsQ0FBQztRQUNGLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDOUQsQ0FBQztJQUVEOzs7Ozs7O09BT0c7SUFDSCxlQUFlLENBQUMsSUFBc0I7UUFDcEMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM5QyxDQUFDO0lBRUQ7Ozs7Ozs7O09BUUc7SUFDSCxnQkFBZ0IsQ0FBQyxJQUF1QjtRQUN0QyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDL0MsQ0FBQztJQUVELHlGQUF5RjtJQUN6RixvQkFBb0I7UUFDbEIsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUN4QixJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQztRQUM3QyxDQUFDO0lBQ0gsQ0FBQztJQUVELFlBQVk7UUFDVixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQzFDLE9BQU8sS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBb0MsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFDeEYsQ0FBQztJQUVELGFBQWEsQ0FBQyxJQUFjLEVBQUUsR0FBVyxFQUFFLEtBQWM7UUFDdkQsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ3BELENBQUM7SUFFRDs7Ozs7Ozs7Ozs7Ozs7OztPQWdCRztJQUNILFdBQVcsQ0FBQyxPQUE4QjtRQUN4QyxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsYUFBYSxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQztRQUNqRSxNQUFNLFdBQVcsR0FBRyxPQUFPLEVBQUUsTUFBTSxLQUFLLElBQUksSUFBSSxJQUFJLENBQUMsYUFBYSxLQUFLLFNBQVMsQ0FBQztRQUNqRixPQUFPO1lBQ0wsV0FBVyxFQUFFLFdBQVcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGFBQWMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLEVBQUU7WUFDdkYsYUFBYSxFQUFFLFlBQVksQ0FBQyxXQUFXLEVBQUU7WUFDekMsU0FBUyxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUU7U0FDeEMsQ0FBQztJQUNKLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogRXhlY3V0aW9uUnVudGltZSDigJQgVGhlIHJ1bnRpbWUgZW52aXJvbm1lbnQgZm9yIG9uZSBmbG93Y2hhcnQgZXhlY3V0aW9uLlxuICpcbiAqIFdpcmVzIHVwIHRoZSB0aHJlZSBtZW1vcnkgcHJpbWl0aXZlcyBpbnRvIGEgc2luZ2xlIGNvbnRhaW5lcjpcbiAqICAgLSBTaGFyZWRNZW1vcnkgKHRoZSBoZWFwIOKAlCBzaGFyZWQgc3RhdGUgYWNyb3NzIGFsbCBzdGFnZXMpXG4gKiAgIC0gU3RhZ2VDb250ZXh0ICAodGhlIGNhbGwgc3RhY2sg4oCUIHBlci1zdGFnZSBleGVjdXRpb24gdHJlZSlcbiAqICAgLSBFdmVudExvZyAgICAgICh0aGUgdHJhbnNhY3Rpb24gbG9nIOKAlCBjb21taXQgaGlzdG9yeSBmb3IgcmVwbGF5KVxuICpcbiAqIFRoZSBlbmdpbmUgKEZsb3djaGFydFRyYXZlcnNlcikgcmVjZWl2ZXMgdGhpcyBhcyBpdHMgcnVudGltZSBwYXJhbWV0ZXIuXG4gKiBBZnRlciBleGVjdXRpb24sIGNvbnN1bWVycyBxdWVyeSBpdCBmb3IgdGhlIGZ1bGwgZXhlY3V0aW9uIHN0YXRlLlxuICovXG5cbmltcG9ydCB7IEV2ZW50TG9nIH0gZnJvbSAnLi4vbWVtb3J5L0V2ZW50TG9nLmpzJztcbmltcG9ydCB7IFNoYXJlZE1lbW9yeSB9IGZyb20gJy4uL21lbW9yeS9TaGFyZWRNZW1vcnkuanMnO1xuaW1wb3J0IHsgU3RhZ2VDb250ZXh0IH0gZnJvbSAnLi4vbWVtb3J5L1N0YWdlQ29udGV4dC5qcyc7XG5pbXBvcnQgdHlwZSB7IENvbW1pdEJ1bmRsZSwgUmVhZFRyYWNraW5nTW9kZSwgU3RhZ2VTbmFwc2hvdCwgV3JpdGVUcmFja2luZ01vZGUgfSBmcm9tICcuLi9tZW1vcnkvdHlwZXMuanMnO1xuXG4vKiogU25hcHNob3Qgb2YgYSBzaW5nbGUgcmVjb3JkZXIncyBjb2xsZWN0ZWQgZGF0YS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVjb3JkZXJTbmFwc2hvdCB7XG4gIGlkOiBzdHJpbmc7XG4gIG5hbWU6IHN0cmluZztcbiAgLyoqIFNjb3BlUmVjb3JkZXIgdHlwZSBhbmQgcGF0dGVybiBkZXNjcmlwdGlvbiAoZS5nLiwgXCJUcmFuc2xhdG9yIChLZXllZFN0b3JlKSDigJQgcGVyLXN0ZXAgdG9rZW4gdXNhZ2VcIikuICovXG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICAvKiogUHJlZmVycmVkIHJlYWQtdGltZSBvcGVyYXRpb24g4oCUIGhpbnRzIHRoZSBVSSBhYm91dCB3aGljaCB2aWV3IHRvIHNob3cgcHJvbWluZW50bHkuICovXG4gIHByZWZlcnJlZE9wZXJhdGlvbj86ICd0cmFuc2xhdGUnIHwgJ2FjY3VtdWxhdGUnIHwgJ2FnZ3JlZ2F0ZSc7XG4gIGRhdGE6IHVua25vd247XG59XG5cbmV4cG9ydCB0eXBlIFJ1bnRpbWVTbmFwc2hvdCA9IHtcbiAgc2hhcmVkU3RhdGU6IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICBleGVjdXRpb25UcmVlOiBTdGFnZVNuYXBzaG90O1xuICBjb21taXRMb2c6IENvbW1pdEJ1bmRsZVtdO1xuICAvKiogUGVyLXN1YmZsb3cgZXhlY3V0aW9uIHJlc3VsdHMgKGtleWVkIGJ5IHN1YmZsb3dJZCkuICovXG4gIHN1YmZsb3dSZXN1bHRzPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIC8qKiBTbmFwc2hvdCBkYXRhIGZyb20gcmVjb3JkZXJzIHRoYXQgaW1wbGVtZW50IHRvU25hcHNob3QoKS4gKi9cbiAgcmVjb3JkZXJzPzogUmVjb3JkZXJTbmFwc2hvdFtdO1xufTtcblxuZXhwb3J0IGNsYXNzIEV4ZWN1dGlvblJ1bnRpbWUge1xuICBwdWJsaWMgZ2xvYmFsU3RvcmU6IFNoYXJlZE1lbW9yeTtcbiAgLyoqXG4gICAqIFBhcmFsbGVsIHJlZGFjdGVkIG1pcnJvciBvZiBgZ2xvYmFsU3RvcmVgLiBQb3B1bGF0ZWQgZHVyaW5nIHRyYXZlcnNhbCB2aWFcbiAgICogYFN0YWdlQ29udGV4dC5jb21taXQoKWAgdXNpbmcgdGhlIGFscmVhZHktY29tcHV0ZWQgcmVkYWN0ZWQgcGF0Y2hlcy5cbiAgICogT25seSBleGlzdHMgd2hlbiBgZW5hYmxlUmVkYWN0ZWRNaXJyb3IoKWAgaGFzIGJlZW4gY2FsbGVkIOKAlCB0eXBpY2FsbHkgYnlcbiAgICogYEZsb3dDaGFydEV4ZWN1dG9yYCB3aGVuIGEgYFJlZGFjdGlvblBvbGljeWAgaXMgY29uZmlndXJlZC4gT3RoZXJ3aXNlXG4gICAqIHVuZGVmaW5lZCBhbmQgemVybyBjb3N0LlxuICAgKlxuICAgKiBSZWFkIHZpYSBgZ2V0U25hcHNob3QoeyByZWRhY3Q6IHRydWUgfSlgLlxuICAgKi9cbiAgcHVibGljIHJlZGFjdGVkU3RvcmU/OiBTaGFyZWRNZW1vcnk7XG4gIHB1YmxpYyByb290U3RhZ2VDb250ZXh0OiBTdGFnZUNvbnRleHQ7XG4gIHB1YmxpYyBleGVjdXRpb25IaXN0b3J5OiBFdmVudExvZztcbiAgLyoqIE9yaWdpbmFsIHJvb3QgZm9yIGdldFNuYXBzaG90KCkg4oCUIHNldCBiZWZvcmUgcmVzdW1lIGNoYW5nZXMgcm9vdFN0YWdlQ29udGV4dC4gKi9cbiAgcHJpdmF0ZSBfc25hcHNob3RSb290PzogU3RhZ2VDb250ZXh0O1xuICBwcml2YXRlIF9pbml0aWFsU3RhdGU6IHVua25vd247XG4gIHByaXZhdGUgX2RlZmF1bHRWYWx1ZXM6IHVua25vd247XG5cbiAgY29uc3RydWN0b3Iocm9vdE5hbWU6IHN0cmluZywgcm9vdElkOiBzdHJpbmcsIGRlZmF1bHRWYWx1ZXM/OiB1bmtub3duLCBpbml0aWFsU3RhdGU/OiB1bmtub3duKSB7XG4gICAgdGhpcy5faW5pdGlhbFN0YXRlID0gaW5pdGlhbFN0YXRlO1xuICAgIHRoaXMuX2RlZmF1bHRWYWx1ZXMgPSBkZWZhdWx0VmFsdWVzO1xuICAgIHRoaXMuZXhlY3V0aW9uSGlzdG9yeSA9IG5ldyBFdmVudExvZyhpbml0aWFsU3RhdGUpO1xuICAgIHRoaXMuZ2xvYmFsU3RvcmUgPSBuZXcgU2hhcmVkTWVtb3J5KGRlZmF1bHRWYWx1ZXMsIGluaXRpYWxTdGF0ZSk7XG4gICAgdGhpcy5yb290U3RhZ2VDb250ZXh0ID0gbmV3IFN0YWdlQ29udGV4dCgnJywgcm9vdE5hbWUsIHJvb3RJZCwgdGhpcy5nbG9iYWxTdG9yZSwgJycsIHRoaXMuZXhlY3V0aW9uSGlzdG9yeSk7XG4gIH1cblxuICAvKipcbiAgICogT3B0IGluIHRvIG1haW50YWluaW5nIGEgcGFyYWxsZWwgcmVkYWN0ZWQgbWlycm9yIG9mIGBnbG9iYWxTdG9yZWAuIEFmdGVyXG4gICAqIHRoaXMgY2FsbCwgZXZlcnkgYFN0YWdlQ29udGV4dC5jb21taXQoKWAgaW4gdGhlIHJ1biB3cml0ZXMgdGhlIHJlZGFjdGVkXG4gICAqIHBhdGNoZXMgKHRoZSBzYW1lIG9uZXMgZmVkIHRvIHRoZSBldmVudCBsb2cpIGludG8gYHJlZGFjdGVkU3RvcmVgIGluXG4gICAqIGFkZGl0aW9uIHRvIHRoZSByYXcgb25lcyB3cml0dGVuIHRvIGBnbG9iYWxTdG9yZWAuXG4gICAqXG4gICAqIFRoZSBtaXJyb3IgaXMgY3JlYXRlZCBsYXppbHkgYW5kIHByb3BhZ2F0ZWQgaW50byBhbGwgY2hpbGQgLyBuZXh0XG4gICAqIGNvbnRleHRzLCBzbyBpdCBjb3JyZWN0bHkgcmVmbGVjdHMgc3ViZmxvdy1zY29wZSB3cml0ZXMuIFdoZW4gbm9cbiAgICogYFJlZGFjdGlvblBvbGljeWAgaXMgY29uZmlndXJlZCwgY2FsbGVycyBzaG91bGQgc2tpcCB0aGlzIOKAlCB1bnVzZWRcbiAgICogYWxsb2NhdGlvbiwgbm8gZnVuY3Rpb25hbCBkaWZmZXJlbmNlIGluIHRoZSBzbmFwc2hvdC5cbiAgICovXG4gIGVuYWJsZVJlZGFjdGVkTWlycm9yKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnJlZGFjdGVkU3RvcmUpIHJldHVybjsgLy8gaWRlbXBvdGVudFxuICAgIHRoaXMucmVkYWN0ZWRTdG9yZSA9IG5ldyBTaGFyZWRNZW1vcnkoXG4gICAgICB0aGlzLl9kZWZhdWx0VmFsdWVzLFxuICAgICAgLy8gU2VlZCB3aXRoIHRoZSBzYW1lIGluaXRpYWwgc3RhdGUgYXMgdGhlIHJhdyBzdG9yZSBzbyB0aGUgbWlycm9yXG4gICAgICAvLyBzdGFydHMgZnJvbSBhIHNjcnViYmVkLW5vdGhpbmcgYmFzZWxpbmU7IHN1YnNlcXVlbnQgY29tbWl0cyBhcHBseVxuICAgICAgLy8gdGhlIHJlZGFjdGVkIHBhdGNoZXMgb24gdG9wLlxuICAgICAgdGhpcy5faW5pdGlhbFN0YXRlLFxuICAgICk7XG4gICAgdGhpcy5yb290U3RhZ2VDb250ZXh0LnVzZVJlZGFjdGVkTWlycm9yKHRoaXMucmVkYWN0ZWRTdG9yZSk7XG4gIH1cblxuICAvKipcbiAgICogU2V0IHRoZSByZWFkLXRyYWNraW5nIHBvbGljeSAoIzE0KSBvbiB0aGUgcm9vdCBzdGFnZSBjb250ZXh0LiBEZXNjZW5kYW50XG4gICAqIGNvbnRleHRzIGluaGVyaXQgdmlhIGBjcmVhdGVOZXh0YC9gY3JlYXRlQ2hpbGRgOyBzdWJmbG93IHJvb3QgY29udGV4dHNcbiAgICogaW5oZXJpdCBmcm9tIHRoZWlyIHBhcmVudC1tb3VudCBjb250ZXh0IHZpYSBgU3ViZmxvd0V4ZWN1dG9yYC4gQ2FsbGVkIGJ5XG4gICAqIGBGbG93Q2hhcnRFeGVjdXRvci5jcmVhdGVUcmF2ZXJzZXIoKWAgd2hlbiB0aGUgZXhlY3V0b3IncyBwb2xpY3kgaXMgbm90XG4gICAqIHRoZSBkZWZhdWx0IGAnZnVsbCdgIOKAlCBpbmNsdWRpbmcgdGhlIHJlc3VtZSBwYXRoLCB3aGVyZSBpdCBpcyBhcHBsaWVkIHRvXG4gICAqIHRoZSBmcmVzaGx5LWNyZWF0ZWQgY29udGludWF0aW9uIHJvb3QuXG4gICAqL1xuICB1c2VSZWFkVHJhY2tpbmcobW9kZTogUmVhZFRyYWNraW5nTW9kZSk6IHZvaWQge1xuICAgIHRoaXMucm9vdFN0YWdlQ29udGV4dC51c2VSZWFkVHJhY2tpbmcobW9kZSk7XG4gIH1cblxuICAvKipcbiAgICogU2V0IHRoZSB3cml0ZS10cmFja2luZyBwb2xpY3kgKCMxM2MtQSkgb24gdGhlIHJvb3Qgc3RhZ2UgY29udGV4dCDigJQgdGhlXG4gICAqIHNpYmxpbmcgb2Yge0BsaW5rIHVzZVJlYWRUcmFja2luZ30sIHdpdGggaWRlbnRpY2FsIHBsdW1iaW5nOiBkZXNjZW5kYW50XG4gICAqIGNvbnRleHRzIGluaGVyaXQgdmlhIGBjcmVhdGVOZXh0YC9gY3JlYXRlQ2hpbGRgOyBzdWJmbG93IHJvb3QgY29udGV4dHNcbiAgICogaW5oZXJpdCBmcm9tIHRoZWlyIHBhcmVudC1tb3VudCBjb250ZXh0IHZpYSBgU3ViZmxvd0V4ZWN1dG9yYC4gQ2FsbGVkIGJ5XG4gICAqIGBGbG93Q2hhcnRFeGVjdXRvci5jcmVhdGVUcmF2ZXJzZXIoKWAgd2hlbiB0aGUgZXhlY3V0b3IncyBwb2xpY3kgaXMgbm90XG4gICAqIHRoZSBkZWZhdWx0IGAnZnVsbCdgIOKAlCBpbmNsdWRpbmcgdGhlIHJlc3VtZSBwYXRoLCB3aGVyZSBpdCBpcyBhcHBsaWVkIHRvXG4gICAqIHRoZSBmcmVzaGx5LWNyZWF0ZWQgY29udGludWF0aW9uIHJvb3QuXG4gICAqL1xuICB1c2VXcml0ZVRyYWNraW5nKG1vZGU6IFdyaXRlVHJhY2tpbmdNb2RlKTogdm9pZCB7XG4gICAgdGhpcy5yb290U3RhZ2VDb250ZXh0LnVzZVdyaXRlVHJhY2tpbmcobW9kZSk7XG4gIH1cblxuICAvKiogUHJlc2VydmUgdGhlIGN1cnJlbnQgcm9vdFN0YWdlQ29udGV4dCBmb3Igc25hcHNob3RzIGJlZm9yZSBjaGFuZ2luZyBpdCBmb3IgcmVzdW1lLiAqL1xuICBwcmVzZXJ2ZVNuYXBzaG90Um9vdCgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuX3NuYXBzaG90Um9vdCkge1xuICAgICAgdGhpcy5fc25hcHNob3RSb290ID0gdGhpcy5yb290U3RhZ2VDb250ZXh0O1xuICAgIH1cbiAgfVxuXG4gIGdldFBpcGVsaW5lcygpOiBzdHJpbmdbXSB7XG4gICAgY29uc3Qgc3RhdGUgPSB0aGlzLmdsb2JhbFN0b3JlLmdldFN0YXRlKCk7XG4gICAgcmV0dXJuIHN0YXRlLnBpcGVsaW5lcyA/IE9iamVjdC5rZXlzKHN0YXRlLnBpcGVsaW5lcyBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikgOiBbXTtcbiAgfVxuXG4gIHNldFJvb3RPYmplY3QocGF0aDogc3RyaW5nW10sIGtleTogc3RyaW5nLCB2YWx1ZTogdW5rbm93bikge1xuICAgIHRoaXMucm9vdFN0YWdlQ29udGV4dC5zZXRPYmplY3QocGF0aCwga2V5LCB2YWx1ZSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIHRoZSBydW50aW1lIHNuYXBzaG90LlxuICAgKlxuICAgKiBAcGFyYW0gb3B0aW9ucy5yZWRhY3QgIFdoZW4gYHRydWVgLCByZXR1cm5zIGBzaGFyZWRTdGF0ZWAgZnJvbSB0aGVcbiAgICogICBwYXJhbGxlbCByZWRhY3RlZCBtaXJyb3IgKGlmIG9uZSB3YXMgZW5hYmxlZCkuIFRoaXMgaXMgdGhlIHNhZmUgdmlld1xuICAgKiAgIGZvciBzaGFyaW5nIHRyYWNlcyBleHRlcm5hbGx5IOKAlCBwYXN0ZSBpbnRvIGEgdmlld2VyLCBzaGlwIHRvIHN1cHBvcnQsXG4gICAqICAgZXRjLiBXaGVuIHRoZSBtaXJyb3Igd2FzIG5ldmVyIGVuYWJsZWQsIGZhbGxzIGJhY2sgdG8gcmF3IGBnbG9iYWxTdG9yZWBcbiAgICogICBhbmQgYSBkZXYtbW9kZSB3YXJuaW5nIGlzIGVtaXR0ZWQgKHNpbGVudCBpbiBwcm9kdWN0aW9uKS5cbiAgICpcbiAgICogICBEZWZhdWx0IGBmYWxzZWAgcHJlc2VydmVzIHRoZSBydW50aW1lIHZpZXcg4oCUIG5lY2Vzc2FyeSBmb3IgcGF1c2UgL1xuICAgKiAgIHJlc3VtZSAocmVzdW1wdGlvbiBtdXN0IHJlcGxheSBhZ2FpbnN0IHRoZSByZWFsIHZhbHVlcywgbm90XG4gICAqICAgJ1tSRURBQ1RFRF0nKS5cbiAgICpcbiAgICogT3RoZXIgZmllbGRzIChgZXhlY3V0aW9uVHJlZWAsIGBjb21taXRMb2dgKSBhcmUgdGhlIHNhbWUgZWl0aGVyIHdheSDigJRcbiAgICogdGhlIGNvbW1pdCBsb2cgaXMgYWxyZWFkeSByZWRhY3RlZCBhdCB3cml0ZS10aW1lLCBhbmQgdGhlIGV4ZWN1dGlvblxuICAgKiB0cmVlIG9ubHkgY2FycmllcyBzdHJ1Y3R1cmFsIG1ldGFkYXRhLlxuICAgKi9cbiAgZ2V0U25hcHNob3Qob3B0aW9ucz86IHsgcmVkYWN0PzogYm9vbGVhbiB9KTogUnVudGltZVNuYXBzaG90IHtcbiAgICBjb25zdCBzbmFwc2hvdFJvb3QgPSB0aGlzLl9zbmFwc2hvdFJvb3QgPz8gdGhpcy5yb290U3RhZ2VDb250ZXh0O1xuICAgIGNvbnN0IHVzZVJlZGFjdGVkID0gb3B0aW9ucz8ucmVkYWN0ID09PSB0cnVlICYmIHRoaXMucmVkYWN0ZWRTdG9yZSAhPT0gdW5kZWZpbmVkO1xuICAgIHJldHVybiB7XG4gICAgICBzaGFyZWRTdGF0ZTogdXNlUmVkYWN0ZWQgPyB0aGlzLnJlZGFjdGVkU3RvcmUhLmdldFN0YXRlKCkgOiB0aGlzLmdsb2JhbFN0b3JlLmdldFN0YXRlKCksXG4gICAgICBleGVjdXRpb25UcmVlOiBzbmFwc2hvdFJvb3QuZ2V0U25hcHNob3QoKSxcbiAgICAgIGNvbW1pdExvZzogdGhpcy5leGVjdXRpb25IaXN0b3J5Lmxpc3QoKSxcbiAgICB9O1xuICB9XG59XG4iXX0=
|