footprintjs 9.48.1 → 9.48.3

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.
@@ -5,20 +5,20 @@
5
5
  * segments (__proto__, constructor, prototype). Each operation's traversal
6
6
  * contract is explicit below; merely using this module is not a sandbox.
7
7
  *
8
- * Intentional asymmetry:
9
- * - nativeSet — DENIED check at each segment; used on writer-owned
10
- * containers. It can follow an inherited object under an ordinary key.
8
+ * Selector operations read only own fields. Writers preflight the whole path
9
+ * before creating or copying any container, then place through putOwn.
11
10
  * - nativeGet — DENIED check + hasOwnProperty at every step.
12
11
  * - nativeHas — own-property existence only, including own denied names
13
12
  * and own undefined values; it does not use the DENIED rule.
14
- * - mergeContextWins — DENIED check only; Object.keys() is own-enumerable-only
15
- * by spec so prototype keys never appear in the iteration.
13
+ * - mergeContextWins — own-enumerable source keys, DENIED check, own-only
14
+ * destination precedence. Inherited fields are never destination data.
16
15
  *
17
- * Nested diagnostic writers have their own whole-selector preflight and
18
- * own-property writes in utils.ts, using the same isDeniedSegment predicate.
16
+ * Diagnostic writers retain their distinct creation/merge laws in utils.ts,
17
+ * using the same isDeniedSegment predicate and shared own-slot writer.
19
18
  *
20
19
  * Paths may be dot-notation strings or pre-split (string|number)[] arrays.
21
20
  */
21
+ import { putOwn } from '../capture/ownData.js';
22
22
  const DENIED = new Set(['__proto__', 'constructor', 'prototype']);
23
23
  /** Is `segment` one of the three denied prototype-pollution selector names? */
24
24
  export function isDeniedSegment(segment) {
@@ -49,23 +49,27 @@ export function nativeGet(obj, path, defaultValue) {
49
49
  }
50
50
  return curr === undefined ? defaultValue : curr;
51
51
  }
52
- /** Mutate `obj`, setting `value` at `path` (creates intermediate objects). Returns `obj`. */
52
+ /**
53
+ * Set an own path in a writer-owned container, creating missing intermediates.
54
+ * A denied selector is a no-op BEFORE any prefix is created. Inherited values
55
+ * and accessors do not participate; existing own accessors keep normal behavior.
56
+ */
53
57
  export function nativeSet(obj, path, value) {
54
58
  const segs = toSegments(path);
59
+ if (segs.some(isDeniedSegment))
60
+ return obj;
55
61
  let curr = obj;
56
62
  for (let i = 0; i < segs.length - 1; i++) {
57
63
  const k = segs[i];
58
- if (DENIED.has(String(k)))
59
- return obj;
60
- if (curr[k] == null || typeof curr[k] !== 'object') {
61
- curr[k] = typeof segs[i + 1] === 'number' ? [] : {};
64
+ // Do not read an inherited accessor. For an OWN accessor, retain the
65
+ // original null/type/traversal read sequence (including getter calls).
66
+ if (!Object.prototype.hasOwnProperty.call(curr, k) || curr[k] == null || typeof curr[k] !== 'object') {
67
+ putOwn(curr, k, typeof segs[i + 1] === 'number' ? [] : {});
62
68
  }
63
69
  curr = curr[k];
64
70
  }
65
71
  const last = segs[segs.length - 1];
66
- if (DENIED.has(String(last)))
67
- return obj;
68
- curr[last] = value;
72
+ putOwn(curr, last, value);
69
73
  return obj;
70
74
  }
71
75
  /**
@@ -152,7 +156,7 @@ export function shallowCopy(container) {
152
156
  if (Array.isArray(container)) {
153
157
  const copy = container.slice();
154
158
  for (const key of namedArrayKeys(container))
155
- copy[key] = container[key];
159
+ putOwn(copy, key, container[key]);
156
160
  return copy;
157
161
  }
158
162
  const proto = Object.getPrototypeOf(container);
@@ -161,7 +165,7 @@ export function shallowCopy(container) {
161
165
  const copy = structuredClone(container);
162
166
  for (const key of Object.keys(container)) {
163
167
  if (!Object.prototype.hasOwnProperty.call(copy, key))
164
- copy[key] = container[key];
168
+ putOwn(copy, key, container[key]);
165
169
  }
166
170
  return copy;
167
171
  }
@@ -172,10 +176,10 @@ export function shallowCopy(container) {
172
176
  *
173
177
  * `root` must already be owned. Walking down, every container the writer did
174
178
  * not create (`owned` does not hold it) is replaced, in its parent, by its
175
- * {@link shallowCopy}, which the writer then owns. The walk stops where
176
- * `nativeSet` would stop or create: a DENIED segment (the write is refused
177
- * there anyway), or a missing / primitive intermediate (`nativeSet` makes a
178
- * fresh container from that point on). The leaf itself is never copied — the
179
+ * {@link shallowCopy}, which the writer then owns. A denied segment anywhere
180
+ * refuses the entire walk before copying. Otherwise the walk stops at a
181
+ * missing / inherited / primitive intermediate (`nativeSet` makes a fresh
182
+ * own container from that point on). The leaf itself is never copied — the
179
183
  * write replaces it.
180
184
  *
181
185
  * Cost: one shallow copy per container on the path that this writer has not
@@ -185,12 +189,12 @@ export function shallowCopy(container) {
185
189
  */
186
190
  export function ownSpine(root, path, owned) {
187
191
  const segs = toSegments(path);
192
+ if (segs.some(isDeniedSegment))
193
+ return;
188
194
  let curr = root;
189
195
  for (let i = 0; i < segs.length - 1; i++) {
190
196
  const k = segs[i];
191
- if (DENIED.has(String(k)))
192
- return;
193
- const next = curr[k];
197
+ const next = ownChild(curr, k);
194
198
  if (!isContainer(next))
195
199
  return;
196
200
  if (owned.has(next)) {
@@ -199,7 +203,7 @@ export function ownSpine(root, path, owned) {
199
203
  }
200
204
  const copy = shallowCopy(next);
201
205
  owned.add(copy);
202
- curr[k] = copy;
206
+ putOwn(curr, k, copy);
203
207
  curr = copy;
204
208
  }
205
209
  }
@@ -267,7 +271,7 @@ export function mergeContextWins(dst, src) {
267
271
  for (const key of Object.keys(src)) {
268
272
  if (DENIED.has(key))
269
273
  continue;
270
- const dstVal = out[key];
274
+ const dstVal = ownChild(out, key);
271
275
  if (dstVal !== undefined) {
272
276
  // dst wins; recurse only if both sides are plain objects
273
277
  if (dstVal !== null &&
@@ -276,14 +280,14 @@ export function mergeContextWins(dst, src) {
276
280
  src[key] !== null &&
277
281
  typeof src[key] === 'object' &&
278
282
  !Array.isArray(src[key])) {
279
- out[key] = mergeContextWins(dstVal, src[key]);
283
+ putOwn(out, key, mergeContextWins(dstVal, src[key]));
280
284
  }
281
285
  // else keep dstVal unchanged
282
286
  }
283
287
  else {
284
- out[key] = src[key];
288
+ putOwn(out, key, src[key]);
285
289
  }
286
290
  }
287
291
  return out;
288
292
  }
289
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGF0aE9wcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvbWVtb3J5L3BhdGhPcHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBb0JHO0FBRUgsTUFBTSxNQUFNLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxXQUFXLEVBQUUsYUFBYSxFQUFFLFdBQVcsQ0FBQyxDQUFDLENBQUM7QUFFbEUsK0VBQStFO0FBQy9FLE1BQU0sVUFBVSxlQUFlLENBQUMsT0FBd0I7SUFDdEQsT0FBTyxNQUFNLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO0FBQ3JDLENBQUM7QUFFRCxTQUFTLFVBQVUsQ0FBQyxJQUFrQztJQUNwRCxPQUFPLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN0RCxDQUFDO0FBRUQ7Ozs7Ozs7R0FPRztBQUNILE1BQU0sVUFBVSxTQUFTLENBQUMsR0FBUSxFQUFFLElBQWtDLEVBQUUsWUFBa0I7SUFDeEYsTUFBTSxJQUFJLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzlCLElBQUksSUFBSSxHQUFHLEdBQUcsQ0FBQztJQUNmLEtBQUssTUFBTSxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7UUFDdkIsSUFBSSxJQUFJLElBQUksSUFBSTtZQUFFLE9BQU8sWUFBWSxDQUFDO1FBQ3RDLElBQUksTUFBTSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7WUFBRSxPQUFPLFlBQVksQ0FBQztRQUNqRCxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUM7WUFBRSxPQUFPLFlBQVksQ0FB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RyxDQUFDLENBQUMsRUFDeEIsQ0FBQztnQkFDRCxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQ2hELENBQUM7WUFDRCw2QkFBNkI7UUFDL0IsQ0FBQzthQUFNLENBQUM7WUFDTixHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3RCLENBQUM7SUFDSCxDQUFDO0lBQ0QsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBwYXRoT3BzLnRzIOKAlCBOYXRpdmUgbmVzdGVkLXBhdGggaGVscGVycyAocmVwbGFjZXMgbG9kYXNoLmdldC9zZXQvaGFzL21lcmdld2l0aClcbiAqXG4gKiBUaGUgREVOSUVEIHNldCBpcyB0aGUgc2hhcmVkIHJ1bGUgZm9yIHRocmVlIHByb3RvdHlwZS1wb2xsdXRpb24gc2VsZWN0b3JcbiAqIHNlZ21lbnRzIChfX3Byb3RvX18sIGNvbnN0cnVjdG9yLCBwcm90b3R5cGUpLiBFYWNoIG9wZXJhdGlvbidzIHRyYXZlcnNhbFxuICogY29udHJhY3QgaXMgZXhwbGljaXQgYmVsb3c7IG1lcmVseSB1c2luZyB0aGlzIG1vZHVsZSBpcyBub3QgYSBzYW5kYm94LlxuICpcbiAqIEludGVudGlvbmFsIGFzeW1tZXRyeTpcbiAqICAgLSBuYXRpdmVTZXQg4oCUIERFTklFRCBjaGVjayBhdCBlYWNoIHNlZ21lbnQ7IHVzZWQgb24gd3JpdGVyLW93bmVkXG4gKiAgICAgY29udGFpbmVycy4gSXQgY2FuIGZvbGxvdyBhbiBpbmhlcml0ZWQgb2JqZWN0IHVuZGVyIGFuIG9yZGluYXJ5IGtleS5cbiAqICAgLSBuYXRpdmVHZXQg4oCUIERFTklFRCBjaGVjayArIGhhc093blByb3BlcnR5IGF0IGV2ZXJ5IHN0ZXAuXG4gKiAgIC0gbmF0aXZlSGFzIOKAlCBvd24tcHJvcGVydHkgZXhpc3RlbmNlIG9ubHksIGluY2x1ZGluZyBvd24gZGVuaWVkIG5hbWVzXG4gKiAgICAgYW5kIG93biB1bmRlZmluZWQgdmFsdWVzOyBpdCBkb2VzIG5vdCB1c2UgdGhlIERFTklFRCBydWxlLlxuICogICAtIG1lcmdlQ29udGV4dFdpbnMg4oCUIERFTklFRCBjaGVjayBvbmx5OyBPYmplY3Qua2V5cygpIGlzIG93bi1lbnVtZXJhYmxlLW9ubHlcbiAqICAgICBieSBzcGVjIHNvIHByb3RvdHlwZSBrZXlzIG5ldmVyIGFwcGVhciBpbiB0aGUgaXRlcmF0aW9uLlxuICpcbiAqIE5lc3RlZCBkaWFnbm9zdGljIHdyaXRlcnMgaGF2ZSB0aGVpciBvd24gd2hvbGUtc2VsZWN0b3IgcHJlZmxpZ2h0IGFuZFxuICogb3duLXByb3BlcnR5IHdyaXRlcyBpbiB1dGlscy50cywgdXNpbmcgdGhlIHNhbWUgaXNEZW5pZWRTZWdtZW50IHByZWRpY2F0ZS5cbiAqXG4gKiBQYXRocyBtYXkgYmUgZG90LW5vdGF0aW9uIHN0cmluZ3Mgb3IgcHJlLXNwbGl0IChzdHJpbmd8bnVtYmVyKVtdIGFycmF5cy5cbiAqL1xuXG5jb25zdCBERU5JRUQgPSBuZXcgU2V0KFsnX19wcm90b19fJywgJ2NvbnN0cnVjdG9yJywgJ3Byb3RvdHlwZSddKTtcblxuLyoqIElzIGBzZWdtZW50YCBvbmUgb2YgdGhlIHRocmVlIGRlbmllZCBwcm90b3R5cGUtcG9sbHV0aW9uIHNlbGVjdG9yIG5hbWVzPyAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzRGVuaWVkU2VnbWVudChzZWdtZW50OiBzdHJpbmcgfCBudW1iZXIpOiBib29sZWFuIHtcbiAgcmV0dXJuIERFTklFRC5oYXMoU3RyaW5nKHNlZ21lbnQpKTtcbn1cblxuZnVuY3Rpb24gdG9TZWdtZW50cyhwYXRoOiBzdHJpbmcgfCAoc3RyaW5nIHwgbnVtYmVyKVtdKTogKHN0cmluZyB8IG51bWJlcilbXSB7XG4gIHJldHVybiBBcnJheS5pc0FycmF5KHBhdGgpID8gcGF0aCA6IHBhdGguc3BsaXQoJy4nKTtcbn1cblxuLyoqXG4gKiBHZXQgdGhlIHZhbHVlIGF0IGBwYXRoYCBpbiBgb2JqYCwgcmV0dXJuaW5nIGBkZWZhdWx0VmFsdWVgIGlmIGFic2VudC5cbiAqXG4gKiBTZWN1cml0eTogZWFjaCBwYXRoIHNlZ21lbnQgaXMgY2hlY2tlZCBhZ2FpbnN0IHRoZSBERU5JRUQgbGlzdCBhbmQgcmVxdWlyZXNcbiAqIGFuIG93biBwcm9wZXJ0eSBhdCBldmVyeSBzdGVwLCBwcmV2ZW50aW5nIHByb3RvdHlwZS1jaGFpbiByZWFkcy5cbiAqIGUuZy4gbmF0aXZlR2V0KHt9LCAnX19wcm90b19fJykgYW5kIG5hdGl2ZUdldCh7fSwgJ2NvbnN0cnVjdG9yJykgYm90aCByZXR1cm5cbiAqIGBkZWZhdWx0VmFsdWVgIGluc3RlYWQgb2YgbGVha2luZyBPYmplY3QucHJvdG90eXBlIC8gdGhlIE9iamVjdCBjb25zdHJ1Y3Rvci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5hdGl2ZUdldChvYmo6IGFueSwgcGF0aDogc3RyaW5nIHwgKHN0cmluZyB8IG51bWJlcilbXSwgZGVmYXVsdFZhbHVlPzogYW55KTogYW55IHtcbiAgY29uc3Qgc2VncyA9IHRvU2VnbWVudHMocGF0aCk7XG4gIGxldCBjdXJyID0gb2JqO1xuICBmb3IgKGNvbnN0IHNlZyBvZiBzZWdzKSB7XG4gICAgaWYgKGN1cnIgPT0gbnVsbCkgcmV0dXJuIGRlZmF1bHRWYWx1ZTtcbiAgICBpZiAoREVOSUVELmhhcyhTdHJpbmcoc2VnKSkpIHJldHVybiBkZWZhdWx0VmFsdWU7XG4gICAgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoY3Vyciwgc2VnKSkgcmV0dXJuIGRlZmF1bHRWYWx1ZTtcbiAgICBjdXJyID0gY3VycltzZWddO1xuICB9XG4gIHJldHVybiBjdXJyID09PSB1bmRlZmluZWQgPyBkZWZhdWx0VmFsdWUgOiBjdXJyO1xufVxuXG4vKiogTXV0YXRlIGBvYmpgLCBzZXR0aW5nIGB2YWx1ZWAgYXQgYHBhdGhgIChjcmVhdGVzIGludGVybWVkaWF0ZSBvYmplY3RzKS4gUmV0dXJucyBgb2JqYC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBuYXRpdmVTZXQob2JqOiBhbnksIHBhdGg6IHN0cmluZyB8IChzdHJpbmcgfCBudW1iZXIpW10sIHZhbHVlOiBhbnkpOiBhbnkge1xuICBjb25zdCBzZWdzID0gdG9TZWdtZW50cyhwYXRoKTtcbiAgbGV0IGN1cnIgPSBvYmo7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgc2Vncy5sZW5ndGggLSAxOyBpKyspIHtcbiAgICBjb25zdCBrID0gc2Vnc1tpXTtcbiAgICBpZiAoREVOSUVELmhhcyhTdHJpbmcoaykpKSByZXR1cm4gb2JqO1xuICAgIGlmIChjdXJyW2tdID09IG51bGwgfHwgdHlwZW9mIGN1cnJba10gIT09ICdvYmplY3QnKSB7XG4gICAgICBjdXJyW2tdID0gdHlwZW9mIHNlZ3NbaSArIDFdID09PSAnbnVtYmVyJyA/IFtdIDoge307XG4gICAgfVxuICAgIGN1cnIgPSBjdXJyW2tdO1xuICB9XG4gIGNvbnN0IGxhc3QgPSBzZWdzW3NlZ3MubGVuZ3RoIC0gMV07XG4gIGlmIChERU5JRUQuaGFzKFN0cmluZyhsYXN0KSkpIHJldHVybiBvYmo7XG4gIGN1cnJbbGFzdF0gPSB2YWx1ZTtcbiAgcmV0dXJuIG9iajtcbn1cblxuLyoqXG4gKiBSZW1vdmUgdGhlIG93biBwcm9wZXJ0eSBhdCBgcGF0aGAgaW4gYG9iamAgKHRoZSByZXBsYXkgcHJpbWl0aXZlIGZvciB0aGVcbiAqIGBkZWxldGVgIGNvbW1pdCB2ZXJiLCAjMTNjLUIpLiBOby1vcCB3aGVuIGFueSBpbnRlcm1lZGlhdGUgc2VnbWVudCBpc1xuICogbWlzc2luZyDigJQgZGVsZXRpbmcgYW4gYWJzZW50IGtleSBoYXMgbm90aGluZyB0byByZW1vdmUuXG4gKlxuICogU2VjdXJpdHk6IHNhbWUgREVOSUVEICsgaGFzT3duUHJvcGVydHkgZGlzY2lwbGluZSBhcyBuYXRpdmVHZXQg4oCUIGV2ZXJ5XG4gKiBzZWdtZW50IGlzIGNoZWNrZWQsIHNvIGBuYXRpdmVEZWxldGUob2JqLCAnX19wcm90b19fXHUwMDFmeCcpYCBhbmRcbiAqIHByb3RvdHlwZS1jaGFpbiB3YWxrcyBhcmUgaW5lcnQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBuYXRpdmVEZWxldGUob2JqOiBhbnksIHBhdGg6IHN0cmluZyB8IChzdHJpbmcgfCBudW1iZXIpW10pOiB2b2lkIHtcbiAgY29uc3Qgc2VncyA9IHRvU2VnbWVudHMocGF0aCk7XG4gIGxldCBjdXJyID0gb2JqO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHNlZ3MubGVuZ3RoIC0gMTsgaSsrKSB7XG4gICAgY29uc3Qgc2VnID0gc2Vnc1tpXTtcbiAgICBpZiAoREVOSUVELmhhcyhTdHJpbmcoc2VnKSkpIHJldHVybjtcbiAgICBpZiAoY3VyciA9PSBudWxsIHx8IHR5cGVvZiBjdXJyICE9PSAnb2JqZWN0JyB8fCAhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGN1cnIsIHNlZykpIHJldHVybjtcbiAgICBjdXJyID0gY3VycltzZWddO1xuICB9XG4gIGNvbnN0IGxhc3QgPSBzZWdzW3NlZ3MubGVuZ3RoIC0gMV07XG4gIGlmIChERU5JRUQuaGFzKFN0cmluZyhsYXN0KSkpIHJldHVybjtcbiAgaWYgKGN1cnIgIT0gbnVsbCAmJiB0eXBlb2YgY3VyciA9PT0gJ29iamVjdCcpIHtcbiAgICBkZWxldGUgY3VycltsYXN0XTtcbiAgfVxufVxuXG4vLyDilIDilIAgQ29weS1vbi13cml0ZSBwcmltaXRpdmVzIChkb2NzL2Rlc2lnbi8yMDI2LTEwLWNvcHktb24td3JpdGUtY29tbWl0Lm1kKSDilIDilIBcbi8vXG4vLyBUSEUgTEFXOiBhIGNvbW1pdHRlZCBnZW5lcmF0aW9uIGlzIG5ldmVyIGVkaXRlZC4gQSB3cml0ZXIgY29waWVzIHRoZSByb290XG4vLyBhbmQgZXZlcnkgY29udGFpbmVyIG9uIGVhY2ggcGF0aCBpdCB3cml0ZXMsIGVkaXRzIG9ubHkgY29udGFpbmVycyBpdFxuLy8gY3JlYXRlZCBkdXJpbmcgdGhlIGN1cnJlbnQgb3BlcmF0aW9uIChpdHMgYG93bmVkYCBzZXQpLCBhbmQgc2hhcmVzIGV2ZXJ5XG4vLyBvdGhlciBzdWJ0cmVlIHdpdGggdGhlIGdlbmVyYXRpb24gYmVmb3JlIGl0LiBUaGUgc2FtZSBsYXdcbi8vIGByZWFjdGl2ZS9zdHJ1Y3R1cmFsV3JpdGUudHMgwrcgc2V0SW5QYXRoYCBhcHBsaWVzIHRvIGEgc2luZ2xlIHZhbHVlLlxuXG4vKiogQSBjb250YWluZXIgYSB3cml0ZXIgbWF5IG93bjogYW55dGhpbmcgYHR5cGVvZiAnb2JqZWN0J2AgYW5kIG5vdCBudWxsLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzQ29udGFpbmVyKHZhbHVlOiB1bmtub3duKTogdmFsdWUgaXMgb2JqZWN0IHtcbiAgcmV0dXJuIHZhbHVlICE9PSBudWxsICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCc7XG59XG5cbi8qKlxuICogYHBhcmVudFtrZXldYCB3aGVuIGBwYXJlbnRgIGlzIGEgY29udGFpbmVyIHRoYXQgT1dOUyBga2V5YCDigJQgdGhlIHNsb3RcbiAqIHtAbGluayBuYXRpdmVHZXR9IHdvdWxkIHJlYWQsIHJlZnVzaW5nIHRoZSBzYW1lIHByb3RvdHlwZS1wb2xsdXRpb25cbiAqIHNlZ21lbnRzIOKAlCBlbHNlIGB1bmRlZmluZWRgLiBPbmUgc3RlcCBvZiBhIHBhdGggd2Fsay5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG93bkNoaWxkKHBhcmVudDogdW5rbm93biwga2V5OiBzdHJpbmcgfCBudW1iZXIpOiB1bmtub3duIHtcbiAgcmV0dXJuIGlzQ29udGFpbmVyKHBhcmVudCkgJiYgIURFTklFRC5oYXMoU3RyaW5nKGtleSkpICYmIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChwYXJlbnQsIGtleSlcbiAgICA/IChwYXJlbnQgYXMgUmVjb3JkPHN0cmluZyB8IG51bWJlciwgdW5rbm93bj4pW2tleV1cbiAgICA6IHVuZGVmaW5lZDtcbn1cblxuLyoqIFRydWUgZm9yIGFuIG93biBrZXkgb2YgYW4gYXJyYXkgdGhhdCBpcyBhbiBhcnJheSBJTkRFWCAoYCcwJ2AsIGAnMTInYCksIG5vdCBhIG5hbWUgKGBhcnIubm90ZWApLiAqL1xuZnVuY3Rpb24gaXNBcnJheUluZGV4S2V5KGtleTogc3RyaW5nKTogYm9vbGVhbiB7XG4gIGNvbnN0IG4gPSBOdW1iZXIoa2V5KTtcbiAgcmV0dXJuIE51bWJlci5pc0ludGVnZXIobikgJiYgbiA+PSAwICYmIG4gPCA0Mjk0OTY3Mjk1ICYmIFN0cmluZyhuKSA9PT0ga2V5O1xufVxuXG4vKipcbiAqIFRoZSBuYW1lZCAobm9uLWluZGV4KSBvd24ga2V5cyBvZiBhbiBhcnJheSwgaW4gb3JkZXIuIE93bi1rZXkgb3JkZXIgcHV0c1xuICogZXZlcnkgaW5kZXggZmlyc3QsIGFzY2VuZGluZywgYW5kIG5hbWVzIGFmdGVyIHRoZW0g4oCUIHNvIHRoZSBuYW1lcyBhcmUgdGhlXG4gKiB0YWlsIG9mIGBPYmplY3Qua2V5c2AsIGFuZCBhbiBhcnJheSB3aXRob3V0IGFueSBpcyB0b2xkIGJ5IGl0cyBsYXN0IGtleS5cbiAqL1xuZnVuY3Rpb24gbmFtZWRBcnJheUtleXMoYXJyYXk6IHVua25vd25bXSk6IHN0cmluZ1tdIHtcbiAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKGFycmF5KTtcbiAgbGV0IGZpcnN0ID0ga2V5cy5sZW5ndGg7XG4gIHdoaWxlIChmaXJzdCA+IDAgJiYgIWlzQXJyYXlJbmRleEtleShrZXlzW2ZpcnN0IC0gMV0pKSBmaXJzdC0tO1xuICByZXR1cm4ga2V5cy5zbGljZShmaXJzdCk7XG59XG5cbi8qKlxuICogQSBTSEFMTE9XIGNvcHkgb2Ygb25lIGNvbnRhaW5lciB0aGF0IGtlZXBzIGV2ZXJ5IHNsb3QgdGhlIHdob2xlLXN0YXRlXG4gKiBgc3RydWN0dXJlZENsb25lYCB0aGlzIHJlcGxhY2VkIGtlcHQg4oCUIHNvIGEgcGF0aCBjb3B5IGFuZCBhIGRlZXAgY2xvbmUgZ2l2ZVxuICogdGhlIHNhbWUgdmFsdWUgYXQgZXZlcnkgcGF0aDpcbiAqICAgLSBhIHBsYWluIG9iamVjdCAob3IgYSBudWxsLXByb3RvdHlwZSBvbmUpOiBpdHMgb3duIGVudW1lcmFibGUga2V5cywgaW5cbiAqICAgICBvcmRlciwgYnkgc3ByZWFkIOKAlCBhbiBvd24gYF9fcHJvdG9fX2Aga2V5IHN0YXlzIGEga2V5OyB0aGUgcmVzdWx0IGhhc1xuICogICAgIGBPYmplY3QucHJvdG90eXBlYCwgYXMgYSBjbG9uZSdzIGRvZXM7XG4gKiAgIC0gYW4gYXJyYXk6IGl0cyBpbmRpY2VzLCBob2xlcyBhbmQgbGVuZ3RoIChgc2xpY2VgKSBBTkQgYW55IG5hbWVkXG4gKiAgICAgcHJvcGVydHkgYSBuZXN0ZWQgd3JpdGUgaHVuZyBvZmYgaXQgKGBzbGljZWAgYWxvbmUgd291bGQgZHJvcCB0aG9zZSk7XG4gKiAgIC0gYW55dGhpbmcgZWxzZSDigJQgYSBgRGF0ZWAsIGBNYXBgLCBgU2V0YCwgdHlwZWQgYXJyYXksIGEgY2xhc3MgaW5zdGFuY2Ug4oCUXG4gKiAgICAgaXMgZGVlcC1jbG9uZWQsIHdoaWNoIGlzIHdoYXQgdGhlIHdob2xlLXN0YXRlIGNsb25lIGRpZCB0byBpdDsgYW5kIHRoZVxuICogICAgIG93biBlbnVtZXJhYmxlIHByb3BlcnRpZXMgdGhlIGNsb25lIGNhbm5vdCBjYXJyeSAoYW4gZXhwYW5kbyBhIG5lc3RlZFxuICogICAgIHdyaXRlIGh1bmcgb24gYSBgRGF0ZWApIGFyZSBjYXJyaWVkIG92ZXIgYnkgcmVmZXJlbmNlLCBzbyBhIGxhdGVyIHdyaXRlXG4gKiAgICAgdGhyb3VnaCBpdCBjaGFuZ2VzIGV4YWN0bHkgaXRzIG93biBwYXRoLiBSYXJlIG9uIGEgd3JpdGUgcGF0aC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNoYWxsb3dDb3B5PFQgZXh0ZW5kcyBvYmplY3Q+KGNvbnRhaW5lcjogVCk6IFQge1xuICBpZiAoQXJyYXkuaXNBcnJheShjb250YWluZXIpKSB7XG4gICAgY29uc3QgY29weSA9IGNvbnRhaW5lci5zbGljZSgpIGFzIHVua25vd24gYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgZm9yIChjb25zdCBrZXkgb2YgbmFtZWRBcnJheUtleXMoY29udGFpbmVyKSkgY29weVtrZXldID0gKGNvbnRhaW5lciBhcyB1bmtub3duIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KVtrZXldO1xuICAgIHJldHVybiBjb3B5IGFzIHVua25vd24gYXMgVDtcbiAgfVxuICBjb25zdCBwcm90byA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihjb250YWluZXIpO1xuICBpZiAocHJvdG8gPT09IE9iamVjdC5wcm90b3R5cGUgfHwgcHJvdG8gPT09IG51bGwpIHJldHVybiB7IC4uLmNvbnRhaW5lciB9O1xuICBjb25zdCBjb3B5ID0gc3RydWN0dXJlZENsb25lKGNvbnRhaW5lcikgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKGNvbnRhaW5lcikpIHtcbiAgICBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChjb3B5LCBrZXkpKSBjb3B5W2tleV0gPSAoY29udGFpbmVyIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KVtrZXldO1xuICB9XG4gIHJldHVybiBjb3B5IGFzIFQ7XG59XG5cbi8qKlxuICogTWFrZSB0aGUgY29udGFpbmVycyBvbiB0aGUgd2F5IHRvIGBwYXRoYCdzIExFQUYgb25lcyB0aGUgd3JpdGVyIG93bnMsIHNvXG4gKiB0aGUgd3JpdGUgdGhhdCBmb2xsb3dzIChgbmF0aXZlU2V0YCAvIGBuYXRpdmVEZWxldGVgIC8gYSB2ZXJiIGFybSkgZWRpdHNcbiAqIG5vdGhpbmcgaXQgZGlkIG5vdCBjcmVhdGUuXG4gKlxuICogYHJvb3RgIG11c3QgYWxyZWFkeSBiZSBvd25lZC4gV2Fsa2luZyBkb3duLCBldmVyeSBjb250YWluZXIgdGhlIHdyaXRlciBkaWRcbiAqIG5vdCBjcmVhdGUgKGBvd25lZGAgZG9lcyBub3QgaG9sZCBpdCkgaXMgcmVwbGFjZWQsIGluIGl0cyBwYXJlbnQsIGJ5IGl0c1xuICoge0BsaW5rIHNoYWxsb3dDb3B5fSwgd2hpY2ggdGhlIHdyaXRlciB0aGVuIG93bnMuIFRoZSB3YWxrIHN0b3BzIHdoZXJlXG4gKiBgbmF0aXZlU2V0YCB3b3VsZCBzdG9wIG9yIGNyZWF0ZTogYSBERU5JRUQgc2VnbWVudCAodGhlIHdyaXRlIGlzIHJlZnVzZWRcbiAqIHRoZXJlIGFueXdheSksIG9yIGEgbWlzc2luZyAvIHByaW1pdGl2ZSBpbnRlcm1lZGlhdGUgKGBuYXRpdmVTZXRgIG1ha2VzIGFcbiAqIGZyZXNoIGNvbnRhaW5lciBmcm9tIHRoYXQgcG9pbnQgb24pLiBUaGUgbGVhZiBpdHNlbGYgaXMgbmV2ZXIgY29waWVkIOKAlCB0aGVcbiAqIHdyaXRlIHJlcGxhY2VzIGl0LlxuICpcbiAqIENvc3Q6IG9uZSBzaGFsbG93IGNvcHkgcGVyIGNvbnRhaW5lciBvbiB0aGUgcGF0aCB0aGF0IHRoaXMgd3JpdGVyIGhhcyBub3RcbiAqIGFscmVhZHkgY29waWVkIOKAlCBPKGRlcHRoIMOXIHdpZHRoKSwgaW5kZXBlbmRlbnQgb2YgZXZlcnl0aGluZyB0aGUgd3JpdGVcbiAqIGRvZXMgbm90IHBhc3MgdGhyb3VnaC4gQSBwYXRoIG9mIG9uZSBzZWdtZW50IChhIHJvb3Qga2V5LCB0aGUgY29tbW9uIGNhc2UpXG4gKiBjb3BpZXMgbm90aGluZyBoZXJlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gb3duU3BpbmUocm9vdDogYW55LCBwYXRoOiBzdHJpbmcgfCAoc3RyaW5nIHwgbnVtYmVyKVtdLCBvd25lZDogV2Vha1NldDxvYmplY3Q+KTogdm9pZCB7XG4gIGNvbnN0IHNlZ3MgPSB0b1NlZ21lbnRzKHBhdGgpO1xuICBsZXQgY3VyciA9IHJvb3Q7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgc2Vncy5sZW5ndGggLSAxOyBpKyspIHtcbiAgICBjb25zdCBrID0gc2Vnc1tpXTtcbiAgICBpZiAoREVOSUVELmhhcyhTdHJpbmcoaykpKSByZXR1cm47XG4gICAgY29uc3QgbmV4dCA9IGN1cnJba107XG4gICAgaWYgKCFpc0NvbnRhaW5lcihuZXh0KSkgcmV0dXJuO1xuICAgIGlmIChvd25lZC5oYXMobmV4dCkpIHtcbiAgICAgIGN1cnIgPSBuZXh0O1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGNvbnN0IGNvcHkgPSBzaGFsbG93Q29weShuZXh0KTtcbiAgICBvd25lZC5hZGQoY29weSk7XG4gICAgY3VycltrXSA9IGNvcHk7XG4gICAgY3VyciA9IGNvcHk7XG4gIH1cbn1cblxuLyoqXG4gKiBUaGUgcm9vdCBvZiBhIG5ldyBnZW5lcmF0aW9uOiBhIHNoYWxsb3cgY29weSBvZiBgYmFzZWAgd2hlbiBpdCBpcyBhXG4gKiBjb250YWluZXIgKG93bmVkIGJ5IHRoZSB3cml0ZXIpLCBlbHNlIHRoZSBoaXN0b3JpY2FsIGRlZXAgY2xvbmUgb2YgYVxuICogbm9uLWNvbnRhaW5lciBiYXNlIChgdW5kZWZpbmVkYCwgYSBwcmltaXRpdmUpIHNvIHRoZSBjYWxsZXJzJyBiZWhhdmlvdXIgb25cbiAqIHN1Y2ggYSBiYXNlIGlzIHVuY2hhbmdlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG93bmVkUm9vdE9mKGJhc2U6IGFueSwgb3duZWQ/OiBXZWFrU2V0PG9iamVjdD4pOiBhbnkge1xuICBpZiAoIWlzQ29udGFpbmVyKGJhc2UpKSByZXR1cm4gc3RydWN0dXJlZENsb25lKGJhc2UpO1xuICBjb25zdCByb290ID0gc2hhbGxvd0NvcHkoYmFzZSk7XG4gIG93bmVkPy5hZGQocm9vdCk7XG4gIHJldHVybiByb290O1xufVxuXG4vKiogTWFyayBhIHZhbHVlIHRoZSB3cml0ZXIganVzdCBjcmVhdGVkIChhIGZyZXNoIGNsb25lLCBhIG1lcmdlIHJlc3VsdCkgYXMgb3duZWQuICovXG5leHBvcnQgZnVuY3Rpb24gb3duKHZhbHVlOiB1bmtub3duLCBvd25lZDogV2Vha1NldDxvYmplY3Q+IHwgdW5kZWZpbmVkKTogdm9pZCB7XG4gIGlmIChvd25lZCAhPT0gdW5kZWZpbmVkICYmIGlzQ29udGFpbmVyKHZhbHVlKSkgb3duZWQuYWRkKHZhbHVlKTtcbn1cblxuLyoqXG4gKiBNYXJrIEVWRVJZIGNvbnRhaW5lciBvZiBhIHRyZWUgdGhlIHdyaXRlciBqdXN0IGNyZWF0ZWQgd2hvbGUgKGFcbiAqIGBzdHJ1Y3R1cmVkQ2xvbmVgIHJlc3VsdCkgYXMgb3duZWQsIHNvIGEgbGF0ZXIgd3JpdGUgdGhyb3VnaCBhbnkgb2YgdGhlbVxuICogZWRpdHMgaXQgaW4gcGxhY2UgaW5zdGVhZCBvZiBjb3B5aW5nIGl0IGFnYWluLiBXYWxrcyBvd24gZW51bWVyYWJsZSBrZXlzIOKAlFxuICogdGhlIHNsb3RzIGEgcGF0aCBjYW4gYWRkcmVzczsgYSBgTWFwYCdzIG9yIGBTZXRgJ3MgZW50cmllcyBhcmUgbm90LiBPKHRoZVxuICogdHJlZSdzIGNvbnRhaW5lcnMpOyBhIGNvbnRhaW5lciBhbHJlYWR5IG93bmVkIGlzIG5vdCB3YWxrZWQgdHdpY2UgKGEgY3ljbGVcbiAqIGluc2lkZSB0aGUgY2xvbmUgZW5kcyB0aGVyZSkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhZG9wdCh0cmVlOiB1bmtub3duLCBvd25lZDogV2Vha1NldDxvYmplY3Q+KTogdm9pZCB7XG4gIGNvbnN0IHN0YWNrOiB1bmtub3duW10gPSBbdHJlZV07XG4gIHdoaWxlIChzdGFjay5sZW5ndGggPiAwKSB7XG4gICAgY29uc3QgdmFsdWUgPSBzdGFjay5wb3AoKTtcbiAgICBpZiAoIWlzQ29udGFpbmVyKHZhbHVlKSB8fCBvd25lZC5oYXModmFsdWUpKSBjb250aW51ZTtcbiAgICBvd25lZC5hZGQodmFsdWUpO1xuICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKHZhbHVlKSkgc3RhY2sucHVzaCgodmFsdWUgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pW2tleV0pO1xuICB9XG59XG5cbi8qKiBSZXR1cm5zIHRydWUgaWYgYG9iamAgaGFzIGFuIG93biBwcm9wZXJ0eSBhdCBldmVyeSBzZWdtZW50IG9mIGBwYXRoYC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBuYXRpdmVIYXMob2JqOiBhbnksIHBhdGg6IHN0cmluZyB8IChzdHJpbmcgfCBudW1iZXIpW10pOiBib29sZWFuIHtcbiAgY29uc3Qgc2VncyA9IHRvU2VnbWVudHMocGF0aCk7XG4gIGxldCBjdXJyID0gb2JqO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHNlZ3MubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoY3VyciA9PSBudWxsIHx8ICFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoY3Vyciwgc2Vnc1tpXSkpIHJldHVybiBmYWxzZTtcbiAgICBpZiAoaSA8IHNlZ3MubGVuZ3RoIC0gMSkgY3VyciA9IGN1cnJbc2Vnc1tpXV07XG4gIH1cbiAgcmV0dXJuIHRydWU7XG59XG5cbi8qKlxuICogRGVlcCBtZXJnZSB3aGVyZSBkZXN0aW5hdGlvbiB3aW5zIGZvciBhbnkgZGVmaW5lZCB2YWx1ZS5cbiAqIEZpbGxzIG1pc3Npbmcga2V5cyBmcm9tIGBzcmNgLCBidXQgbmV2ZXIgb3ZlcndyaXRlcyBkZWZpbmVkIGtleXMgaW4gYGRzdGAuXG4gKiBBcnJheXMgYXJlIG5vdCByZWN1cnNlZCDigJQgZHN0IGFycmF5IGFsd2F5cyB3aW5zIHdoZW4gcHJlc2VudC5cbiAqXG4gKiBSZXBsYWNlczogYG1lcmdlV2l0aChkc3QsIHNyYywgKG9ialZhbHVlKSA9PiBvYmpWYWx1ZSAhPT0gdW5kZWZpbmVkID8gb2JqVmFsdWUgOiB1bmRlZmluZWQpYFxuICovXG5leHBvcnQgZnVuY3Rpb24gbWVyZ2VDb250ZXh0V2lucyhkc3Q6IGFueSwgc3JjOiBhbnkpOiBhbnkge1xuICBpZiAoIXNyYyB8fCB0eXBlb2Ygc3JjICE9PSAnb2JqZWN0JyB8fCBBcnJheS5pc0FycmF5KHNyYykpIHtcbiAgICByZXR1cm4gZHN0ICE9PSB1bmRlZmluZWQgPyBkc3QgOiBzcmM7XG4gIH1cbiAgY29uc3Qgb3V0OiBhbnkgPSBkc3QgIT0gbnVsbCAmJiB0eXBlb2YgZHN0ID09PSAnb2JqZWN0JyA/IHsgLi4uZHN0IH0gOiB7fTtcbiAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMoc3JjKSkge1xuICAgIGlmIChERU5JRUQuaGFzKGtleSkpIGNvbnRpbnVlO1xuICAgIGNvbnN0IGRzdFZhbCA9IG91dFtrZXldO1xuICAgIGlmIChkc3RWYWwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gZHN0IHdpbnM7IHJlY3Vyc2Ugb25seSBpZiBib3RoIHNpZGVzIGFyZSBwbGFpbiBvYmplY3RzXG4gICAgICBpZiAoXG4gICAgICAgIGRzdFZhbCAhPT0gbnVsbCAmJlxuICAgICAgICB0eXBlb2YgZHN0VmFsID09PSAnb2JqZWN0JyAmJlxuICAgICAgICAhQXJyYXkuaXNBcnJheShkc3RWYWwpICYmXG4gICAgICAgIHNyY1trZXldICE9PSBudWxsICYmXG4gICAgICAgIHR5cGVvZiBzcmNba2V5XSA9PT0gJ29iamVjdCcgJiZcbiAgICAgICAgIUFycmF5LmlzQXJyYXkoc3JjW2tleV0pXG4gICAgICApIHtcbiAgICAgICAgb3V0W2tleV0gPSBtZXJnZUNvbnRleHRXaW5zKGRzdFZhbCwgc3JjW2tleV0pO1xuICAgICAgfVxuICAgICAgLy8gZWxzZSBrZWVwIGRzdFZhbCB1bmNoYW5nZWRcbiAgICB9IGVsc2Uge1xuICAgICAgb3V0W2tleV0gPSBzcmNba2V5XTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG91dDtcbn1cbiJdfQ==
293
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGF0aE9wcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvbWVtb3J5L3BhdGhPcHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FtQkc7QUFFSCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFL0MsTUFBTSxNQUFNLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxXQUFXLEVBQUUsYUFBYSxFQUFFLFdBQVcsQ0FBQyxDQUFDLENBQUM7QUFFbEUsK0VBQStFO0FBQy9FLE1BQU0sVUFBVSxlQUFlLENBQUMsT0FBd0I7SUFDdEQsT0FBTyxNQUFNLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO0FBQ3JDLENBQUM7QUFFRCxTQUFTLFVBQVUsQ0FBQyxJQUFrQztJQUNwRCxPQUFPLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN0RCxDQUFDO0FBRUQ7Ozs7Ozs7R0FPRztBQUNILE1BQU0sVUFBVSxTQUFTLENBQUMsR0FBUSxFQUFFLElBQWtDLEVBQUUsWUFBa0I7SUFDeEYsTUFBTSxJQUFJLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzlCLElBQUksSUFBSSxHQUFHLEdBQUcsQ0FBQztJQUNmLEtBQUssTUFBTSxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7UUFDdkIsSUFBSSxJQUFJLElBQUksSUFBSTtZQUFFLE9BQU8sWUFBWSxDQUFDO1FBQ3RDLElBQUksTUFBTSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7WUFBRSxPQUFPLFlBQVksQ0FBQztRQUNqRCxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsSUFBSSxD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QUcsQ0FBQyxLQUFLLElBQUk7Z0JBQ2pCLE9BQU8sR0FBRyxDQUFDLEdBQUcsQ0FBQyxLQUFLLFFBQVE7Z0JBQzVCLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFDeEIsQ0FBQztnQkFDRCxNQUFNLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN2RCxDQUFDO1lBQ0QsNkJBQTZCO1FBQy9CLENBQUM7YUFBTSxDQUFDO1lBQ04sTUFBTSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDN0IsQ0FBQztJQUNILENBQUM7SUFDRCxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIHBhdGhPcHMudHMg4oCUIE5hdGl2ZSBuZXN0ZWQtcGF0aCBoZWxwZXJzIChyZXBsYWNlcyBsb2Rhc2guZ2V0L3NldC9oYXMvbWVyZ2V3aXRoKVxuICpcbiAqIFRoZSBERU5JRUQgc2V0IGlzIHRoZSBzaGFyZWQgcnVsZSBmb3IgdGhyZWUgcHJvdG90eXBlLXBvbGx1dGlvbiBzZWxlY3RvclxuICogc2VnbWVudHMgKF9fcHJvdG9fXywgY29uc3RydWN0b3IsIHByb3RvdHlwZSkuIEVhY2ggb3BlcmF0aW9uJ3MgdHJhdmVyc2FsXG4gKiBjb250cmFjdCBpcyBleHBsaWNpdCBiZWxvdzsgbWVyZWx5IHVzaW5nIHRoaXMgbW9kdWxlIGlzIG5vdCBhIHNhbmRib3guXG4gKlxuICogU2VsZWN0b3Igb3BlcmF0aW9ucyByZWFkIG9ubHkgb3duIGZpZWxkcy4gV3JpdGVycyBwcmVmbGlnaHQgdGhlIHdob2xlIHBhdGhcbiAqIGJlZm9yZSBjcmVhdGluZyBvciBjb3B5aW5nIGFueSBjb250YWluZXIsIHRoZW4gcGxhY2UgdGhyb3VnaCBwdXRPd24uXG4gKiAgIC0gbmF0aXZlR2V0IOKAlCBERU5JRUQgY2hlY2sgKyBoYXNPd25Qcm9wZXJ0eSBhdCBldmVyeSBzdGVwLlxuICogICAtIG5hdGl2ZUhhcyDigJQgb3duLXByb3BlcnR5IGV4aXN0ZW5jZSBvbmx5LCBpbmNsdWRpbmcgb3duIGRlbmllZCBuYW1lc1xuICogICAgIGFuZCBvd24gdW5kZWZpbmVkIHZhbHVlczsgaXQgZG9lcyBub3QgdXNlIHRoZSBERU5JRUQgcnVsZS5cbiAqICAgLSBtZXJnZUNvbnRleHRXaW5zIOKAlCBvd24tZW51bWVyYWJsZSBzb3VyY2Uga2V5cywgREVOSUVEIGNoZWNrLCBvd24tb25seVxuICogICAgIGRlc3RpbmF0aW9uIHByZWNlZGVuY2UuIEluaGVyaXRlZCBmaWVsZHMgYXJlIG5ldmVyIGRlc3RpbmF0aW9uIGRhdGEuXG4gKlxuICogRGlhZ25vc3RpYyB3cml0ZXJzIHJldGFpbiB0aGVpciBkaXN0aW5jdCBjcmVhdGlvbi9tZXJnZSBsYXdzIGluIHV0aWxzLnRzLFxuICogdXNpbmcgdGhlIHNhbWUgaXNEZW5pZWRTZWdtZW50IHByZWRpY2F0ZSBhbmQgc2hhcmVkIG93bi1zbG90IHdyaXRlci5cbiAqXG4gKiBQYXRocyBtYXkgYmUgZG90LW5vdGF0aW9uIHN0cmluZ3Mgb3IgcHJlLXNwbGl0IChzdHJpbmd8bnVtYmVyKVtdIGFycmF5cy5cbiAqL1xuXG5pbXBvcnQgeyBwdXRPd24gfSBmcm9tICcuLi9jYXB0dXJlL293bkRhdGEuanMnO1xuXG5jb25zdCBERU5JRUQgPSBuZXcgU2V0KFsnX19wcm90b19fJywgJ2NvbnN0cnVjdG9yJywgJ3Byb3RvdHlwZSddKTtcblxuLyoqIElzIGBzZWdtZW50YCBvbmUgb2YgdGhlIHRocmVlIGRlbmllZCBwcm90b3R5cGUtcG9sbHV0aW9uIHNlbGVjdG9yIG5hbWVzPyAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzRGVuaWVkU2VnbWVudChzZWdtZW50OiBzdHJpbmcgfCBudW1iZXIpOiBib29sZWFuIHtcbiAgcmV0dXJuIERFTklFRC5oYXMoU3RyaW5nKHNlZ21lbnQpKTtcbn1cblxuZnVuY3Rpb24gdG9TZWdtZW50cyhwYXRoOiBzdHJpbmcgfCAoc3RyaW5nIHwgbnVtYmVyKVtdKTogKHN0cmluZyB8IG51bWJlcilbXSB7XG4gIHJldHVybiBBcnJheS5pc0FycmF5KHBhdGgpID8gcGF0aCA6IHBhdGguc3BsaXQoJy4nKTtcbn1cblxuLyoqXG4gKiBHZXQgdGhlIHZhbHVlIGF0IGBwYXRoYCBpbiBgb2JqYCwgcmV0dXJuaW5nIGBkZWZhdWx0VmFsdWVgIGlmIGFic2VudC5cbiAqXG4gKiBTZWN1cml0eTogZWFjaCBwYXRoIHNlZ21lbnQgaXMgY2hlY2tlZCBhZ2FpbnN0IHRoZSBERU5JRUQgbGlzdCBhbmQgcmVxdWlyZXNcbiAqIGFuIG93biBwcm9wZXJ0eSBhdCBldmVyeSBzdGVwLCBwcmV2ZW50aW5nIHByb3RvdHlwZS1jaGFpbiByZWFkcy5cbiAqIGUuZy4gbmF0aXZlR2V0KHt9LCAnX19wcm90b19fJykgYW5kIG5hdGl2ZUdldCh7fSwgJ2NvbnN0cnVjdG9yJykgYm90aCByZXR1cm5cbiAqIGBkZWZhdWx0VmFsdWVgIGluc3RlYWQgb2YgbGVha2luZyBPYmplY3QucHJvdG90eXBlIC8gdGhlIE9iamVjdCBjb25zdHJ1Y3Rvci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5hdGl2ZUdldChvYmo6IGFueSwgcGF0aDogc3RyaW5nIHwgKHN0cmluZyB8IG51bWJlcilbXSwgZGVmYXVsdFZhbHVlPzogYW55KTogYW55IHtcbiAgY29uc3Qgc2VncyA9IHRvU2VnbWVudHMocGF0aCk7XG4gIGxldCBjdXJyID0gb2JqO1xuICBmb3IgKGNvbnN0IHNlZyBvZiBzZWdzKSB7XG4gICAgaWYgKGN1cnIgPT0gbnVsbCkgcmV0dXJuIGRlZmF1bHRWYWx1ZTtcbiAgICBpZiAoREVOSUVELmhhcyhTdHJpbmcoc2VnKSkpIHJldHVybiBkZWZhdWx0VmFsdWU7XG4gICAgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoY3Vyciwgc2VnKSkgcmV0dXJuIGRlZmF1bHRWYWx1ZTtcbiAgICBjdXJyID0gY3VycltzZWddO1xuICB9XG4gIHJldHVybiBjdXJyID09PSB1bmRlZmluZWQgPyBkZWZhdWx0VmFsdWUgOiBjdXJyO1xufVxuXG4vKipcbiAqIFNldCBhbiBvd24gcGF0aCBpbiBhIHdyaXRlci1vd25lZCBjb250YWluZXIsIGNyZWF0aW5nIG1pc3NpbmcgaW50ZXJtZWRpYXRlcy5cbiAqIEEgZGVuaWVkIHNlbGVjdG9yIGlzIGEgbm8tb3AgQkVGT1JFIGFueSBwcmVmaXggaXMgY3JlYXRlZC4gSW5oZXJpdGVkIHZhbHVlc1xuICogYW5kIGFjY2Vzc29ycyBkbyBub3QgcGFydGljaXBhdGU7IGV4aXN0aW5nIG93biBhY2Nlc3NvcnMga2VlcCBub3JtYWwgYmVoYXZpb3IuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBuYXRpdmVTZXQob2JqOiBhbnksIHBhdGg6IHN0cmluZyB8IChzdHJpbmcgfCBudW1iZXIpW10sIHZhbHVlOiBhbnkpOiBhbnkge1xuICBjb25zdCBzZWdzID0gdG9TZWdtZW50cyhwYXRoKTtcbiAgaWYgKHNlZ3Muc29tZShpc0RlbmllZFNlZ21lbnQpKSByZXR1cm4gb2JqO1xuICBsZXQgY3VyciA9IG9iajtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBzZWdzLmxlbmd0aCAtIDE7IGkrKykge1xuICAgIGNvbnN0IGsgPSBzZWdzW2ldO1xuICAgIC8vIERvIG5vdCByZWFkIGFuIGluaGVyaXRlZCBhY2Nlc3Nvci4gRm9yIGFuIE9XTiBhY2Nlc3NvciwgcmV0YWluIHRoZVxuICAgIC8vIG9yaWdpbmFsIG51bGwvdHlwZS90cmF2ZXJzYWwgcmVhZCBzZXF1ZW5jZSAoaW5jbHVkaW5nIGdldHRlciBjYWxscykuXG4gICAgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoY3VyciwgaykgfHwgY3VycltrXSA9PSBudWxsIHx8IHR5cGVvZiBjdXJyW2tdICE9PSAnb2JqZWN0Jykge1xuICAgICAgcHV0T3duKGN1cnIsIGssIHR5cGVvZiBzZWdzW2kgKyAxXSA9PT0gJ251bWJlcicgPyBbXSA6IHt9KTtcbiAgICB9XG4gICAgY3VyciA9IGN1cnJba107XG4gIH1cbiAgY29uc3QgbGFzdCA9IHNlZ3Nbc2Vncy5sZW5ndGggLSAxXTtcbiAgcHV0T3duKGN1cnIsIGxhc3QsIHZhbHVlKTtcbiAgcmV0dXJuIG9iajtcbn1cblxuLyoqXG4gKiBSZW1vdmUgdGhlIG93biBwcm9wZXJ0eSBhdCBgcGF0aGAgaW4gYG9iamAgKHRoZSByZXBsYXkgcHJpbWl0aXZlIGZvciB0aGVcbiAqIGBkZWxldGVgIGNvbW1pdCB2ZXJiLCAjMTNjLUIpLiBOby1vcCB3aGVuIGFueSBpbnRlcm1lZGlhdGUgc2VnbWVudCBpc1xuICogbWlzc2luZyDigJQgZGVsZXRpbmcgYW4gYWJzZW50IGtleSBoYXMgbm90aGluZyB0byByZW1vdmUuXG4gKlxuICogU2VjdXJpdHk6IHNhbWUgREVOSUVEICsgaGFzT3duUHJvcGVydHkgZGlzY2lwbGluZSBhcyBuYXRpdmVHZXQg4oCUIGV2ZXJ5XG4gKiBzZWdtZW50IGlzIGNoZWNrZWQsIHNvIGBuYXRpdmVEZWxldGUob2JqLCAnX19wcm90b19fXHUwMDFmeCcpYCBhbmRcbiAqIHByb3RvdHlwZS1jaGFpbiB3YWxrcyBhcmUgaW5lcnQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBuYXRpdmVEZWxldGUob2JqOiBhbnksIHBhdGg6IHN0cmluZyB8IChzdHJpbmcgfCBudW1iZXIpW10pOiB2b2lkIHtcbiAgY29uc3Qgc2VncyA9IHRvU2VnbWVudHMocGF0aCk7XG4gIGxldCBjdXJyID0gb2JqO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHNlZ3MubGVuZ3RoIC0gMTsgaSsrKSB7XG4gICAgY29uc3Qgc2VnID0gc2Vnc1tpXTtcbiAgICBpZiAoREVOSUVELmhhcyhTdHJpbmcoc2VnKSkpIHJldHVybjtcbiAgICBpZiAoY3VyciA9PSBudWxsIHx8IHR5cGVvZiBjdXJyICE9PSAnb2JqZWN0JyB8fCAhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGN1cnIsIHNlZykpIHJldHVybjtcbiAgICBjdXJyID0gY3VycltzZWddO1xuICB9XG4gIGNvbnN0IGxhc3QgPSBzZWdzW3NlZ3MubGVuZ3RoIC0gMV07XG4gIGlmIChERU5JRUQuaGFzKFN0cmluZyhsYXN0KSkpIHJldHVybjtcbiAgaWYgKGN1cnIgIT0gbnVsbCAmJiB0eXBlb2YgY3VyciA9PT0gJ29iamVjdCcpIHtcbiAgICBkZWxldGUgY3VycltsYXN0XTtcbiAgfVxufVxuXG4vLyDilIDilIAgQ29weS1vbi13cml0ZSBwcmltaXRpdmVzIChkb2NzL2Rlc2lnbi8yMDI2LTEwLWNvcHktb24td3JpdGUtY29tbWl0Lm1kKSDilIDilIBcbi8vXG4vLyBUSEUgTEFXOiBhIGNvbW1pdHRlZCBnZW5lcmF0aW9uIGlzIG5ldmVyIGVkaXRlZC4gQSB3cml0ZXIgY29waWVzIHRoZSByb290XG4vLyBhbmQgZXZlcnkgY29udGFpbmVyIG9uIGVhY2ggcGF0aCBpdCB3cml0ZXMsIGVkaXRzIG9ubHkgY29udGFpbmVycyBpdFxuLy8gY3JlYXRlZCBkdXJpbmcgdGhlIGN1cnJlbnQgb3BlcmF0aW9uIChpdHMgYG93bmVkYCBzZXQpLCBhbmQgc2hhcmVzIGV2ZXJ5XG4vLyBvdGhlciBzdWJ0cmVlIHdpdGggdGhlIGdlbmVyYXRpb24gYmVmb3JlIGl0LiBUaGUgc2FtZSBsYXdcbi8vIGByZWFjdGl2ZS9zdHJ1Y3R1cmFsV3JpdGUudHMgwrcgc2V0SW5QYXRoYCBhcHBsaWVzIHRvIGEgc2luZ2xlIHZhbHVlLlxuXG4vKiogQSBjb250YWluZXIgYSB3cml0ZXIgbWF5IG93bjogYW55dGhpbmcgYHR5cGVvZiAnb2JqZWN0J2AgYW5kIG5vdCBudWxsLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzQ29udGFpbmVyKHZhbHVlOiB1bmtub3duKTogdmFsdWUgaXMgb2JqZWN0IHtcbiAgcmV0dXJuIHZhbHVlICE9PSBudWxsICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCc7XG59XG5cbi8qKlxuICogYHBhcmVudFtrZXldYCB3aGVuIGBwYXJlbnRgIGlzIGEgY29udGFpbmVyIHRoYXQgT1dOUyBga2V5YCDigJQgdGhlIHNsb3RcbiAqIHtAbGluayBuYXRpdmVHZXR9IHdvdWxkIHJlYWQsIHJlZnVzaW5nIHRoZSBzYW1lIHByb3RvdHlwZS1wb2xsdXRpb25cbiAqIHNlZ21lbnRzIOKAlCBlbHNlIGB1bmRlZmluZWRgLiBPbmUgc3RlcCBvZiBhIHBhdGggd2Fsay5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG93bkNoaWxkKHBhcmVudDogdW5rbm93biwga2V5OiBzdHJpbmcgfCBudW1iZXIpOiB1bmtub3duIHtcbiAgcmV0dXJuIGlzQ29udGFpbmVyKHBhcmVudCkgJiYgIURFTklFRC5oYXMoU3RyaW5nKGtleSkpICYmIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChwYXJlbnQsIGtleSlcbiAgICA/IChwYXJlbnQgYXMgUmVjb3JkPHN0cmluZyB8IG51bWJlciwgdW5rbm93bj4pW2tleV1cbiAgICA6IHVuZGVmaW5lZDtcbn1cblxuLyoqIFRydWUgZm9yIGFuIG93biBrZXkgb2YgYW4gYXJyYXkgdGhhdCBpcyBhbiBhcnJheSBJTkRFWCAoYCcwJ2AsIGAnMTInYCksIG5vdCBhIG5hbWUgKGBhcnIubm90ZWApLiAqL1xuZnVuY3Rpb24gaXNBcnJheUluZGV4S2V5KGtleTogc3RyaW5nKTogYm9vbGVhbiB7XG4gIGNvbnN0IG4gPSBOdW1iZXIoa2V5KTtcbiAgcmV0dXJuIE51bWJlci5pc0ludGVnZXIobikgJiYgbiA+PSAwICYmIG4gPCA0Mjk0OTY3Mjk1ICYmIFN0cmluZyhuKSA9PT0ga2V5O1xufVxuXG4vKipcbiAqIFRoZSBuYW1lZCAobm9uLWluZGV4KSBvd24ga2V5cyBvZiBhbiBhcnJheSwgaW4gb3JkZXIuIE93bi1rZXkgb3JkZXIgcHV0c1xuICogZXZlcnkgaW5kZXggZmlyc3QsIGFzY2VuZGluZywgYW5kIG5hbWVzIGFmdGVyIHRoZW0g4oCUIHNvIHRoZSBuYW1lcyBhcmUgdGhlXG4gKiB0YWlsIG9mIGBPYmplY3Qua2V5c2AsIGFuZCBhbiBhcnJheSB3aXRob3V0IGFueSBpcyB0b2xkIGJ5IGl0cyBsYXN0IGtleS5cbiAqL1xuZnVuY3Rpb24gbmFtZWRBcnJheUtleXMoYXJyYXk6IHVua25vd25bXSk6IHN0cmluZ1tdIHtcbiAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKGFycmF5KTtcbiAgbGV0IGZpcnN0ID0ga2V5cy5sZW5ndGg7XG4gIHdoaWxlIChmaXJzdCA+IDAgJiYgIWlzQXJyYXlJbmRleEtleShrZXlzW2ZpcnN0IC0gMV0pKSBmaXJzdC0tO1xuICByZXR1cm4ga2V5cy5zbGljZShmaXJzdCk7XG59XG5cbi8qKlxuICogQSBTSEFMTE9XIGNvcHkgb2Ygb25lIGNvbnRhaW5lciB0aGF0IGtlZXBzIGV2ZXJ5IHNsb3QgdGhlIHdob2xlLXN0YXRlXG4gKiBgc3RydWN0dXJlZENsb25lYCB0aGlzIHJlcGxhY2VkIGtlcHQg4oCUIHNvIGEgcGF0aCBjb3B5IGFuZCBhIGRlZXAgY2xvbmUgZ2l2ZVxuICogdGhlIHNhbWUgdmFsdWUgYXQgZXZlcnkgcGF0aDpcbiAqICAgLSBhIHBsYWluIG9iamVjdCAob3IgYSBudWxsLXByb3RvdHlwZSBvbmUpOiBpdHMgb3duIGVudW1lcmFibGUga2V5cywgaW5cbiAqICAgICBvcmRlciwgYnkgc3ByZWFkIOKAlCBhbiBvd24gYF9fcHJvdG9fX2Aga2V5IHN0YXlzIGEga2V5OyB0aGUgcmVzdWx0IGhhc1xuICogICAgIGBPYmplY3QucHJvdG90eXBlYCwgYXMgYSBjbG9uZSdzIGRvZXM7XG4gKiAgIC0gYW4gYXJyYXk6IGl0cyBpbmRpY2VzLCBob2xlcyBhbmQgbGVuZ3RoIChgc2xpY2VgKSBBTkQgYW55IG5hbWVkXG4gKiAgICAgcHJvcGVydHkgYSBuZXN0ZWQgd3JpdGUgaHVuZyBvZmYgaXQgKGBzbGljZWAgYWxvbmUgd291bGQgZHJvcCB0aG9zZSk7XG4gKiAgIC0gYW55dGhpbmcgZWxzZSDigJQgYSBgRGF0ZWAsIGBNYXBgLCBgU2V0YCwgdHlwZWQgYXJyYXksIGEgY2xhc3MgaW5zdGFuY2Ug4oCUXG4gKiAgICAgaXMgZGVlcC1jbG9uZWQsIHdoaWNoIGlzIHdoYXQgdGhlIHdob2xlLXN0YXRlIGNsb25lIGRpZCB0byBpdDsgYW5kIHRoZVxuICogICAgIG93biBlbnVtZXJhYmxlIHByb3BlcnRpZXMgdGhlIGNsb25lIGNhbm5vdCBjYXJyeSAoYW4gZXhwYW5kbyBhIG5lc3RlZFxuICogICAgIHdyaXRlIGh1bmcgb24gYSBgRGF0ZWApIGFyZSBjYXJyaWVkIG92ZXIgYnkgcmVmZXJlbmNlLCBzbyBhIGxhdGVyIHdyaXRlXG4gKiAgICAgdGhyb3VnaCBpdCBjaGFuZ2VzIGV4YWN0bHkgaXRzIG93biBwYXRoLiBSYXJlIG9uIGEgd3JpdGUgcGF0aC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNoYWxsb3dDb3B5PFQgZXh0ZW5kcyBvYmplY3Q+KGNvbnRhaW5lcjogVCk6IFQge1xuICBpZiAoQXJyYXkuaXNBcnJheShjb250YWluZXIpKSB7XG4gICAgY29uc3QgY29weSA9IGNvbnRhaW5lci5zbGljZSgpIGFzIHVua25vd24gYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgZm9yIChjb25zdCBrZXkgb2YgbmFtZWRBcnJheUtleXMoY29udGFpbmVyKSlcbiAgICAgIHB1dE93bihjb3B5LCBrZXksIChjb250YWluZXIgYXMgdW5rbm93biBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPilba2V5XSk7XG4gICAgcmV0dXJuIGNvcHkgYXMgdW5rbm93biBhcyBUO1xuICB9XG4gIGNvbnN0IHByb3RvID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKGNvbnRhaW5lcik7XG4gIGlmIChwcm90byA9PT0gT2JqZWN0LnByb3RvdHlwZSB8fCBwcm90byA9PT0gbnVsbCkgcmV0dXJuIHsgLi4uY29udGFpbmVyIH07XG4gIGNvbnN0IGNvcHkgPSBzdHJ1Y3R1cmVkQ2xvbmUoY29udGFpbmVyKSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMoY29udGFpbmVyKSkge1xuICAgIGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGNvcHksIGtleSkpXG4gICAgICBwdXRPd24oY29weSwga2V5LCAoY29udGFpbmVyIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KVtrZXldKTtcbiAgfVxuICByZXR1cm4gY29weSBhcyBUO1xufVxuXG4vKipcbiAqIE1ha2UgdGhlIGNvbnRhaW5lcnMgb24gdGhlIHdheSB0byBgcGF0aGAncyBMRUFGIG9uZXMgdGhlIHdyaXRlciBvd25zLCBzb1xuICogdGhlIHdyaXRlIHRoYXQgZm9sbG93cyAoYG5hdGl2ZVNldGAgLyBgbmF0aXZlRGVsZXRlYCAvIGEgdmVyYiBhcm0pIGVkaXRzXG4gKiBub3RoaW5nIGl0IGRpZCBub3QgY3JlYXRlLlxuICpcbiAqIGByb290YCBtdXN0IGFscmVhZHkgYmUgb3duZWQuIFdhbGtpbmcgZG93biwgZXZlcnkgY29udGFpbmVyIHRoZSB3cml0ZXIgZGlkXG4gKiBub3QgY3JlYXRlIChgb3duZWRgIGRvZXMgbm90IGhvbGQgaXQpIGlzIHJlcGxhY2VkLCBpbiBpdHMgcGFyZW50LCBieSBpdHNcbiAqIHtAbGluayBzaGFsbG93Q29weX0sIHdoaWNoIHRoZSB3cml0ZXIgdGhlbiBvd25zLiBBIGRlbmllZCBzZWdtZW50IGFueXdoZXJlXG4gKiByZWZ1c2VzIHRoZSBlbnRpcmUgd2FsayBiZWZvcmUgY29weWluZy4gT3RoZXJ3aXNlIHRoZSB3YWxrIHN0b3BzIGF0IGFcbiAqIG1pc3NpbmcgLyBpbmhlcml0ZWQgLyBwcmltaXRpdmUgaW50ZXJtZWRpYXRlIChgbmF0aXZlU2V0YCBtYWtlcyBhIGZyZXNoXG4gKiBvd24gY29udGFpbmVyIGZyb20gdGhhdCBwb2ludCBvbikuIFRoZSBsZWFmIGl0c2VsZiBpcyBuZXZlciBjb3BpZWQg4oCUIHRoZVxuICogd3JpdGUgcmVwbGFjZXMgaXQuXG4gKlxuICogQ29zdDogb25lIHNoYWxsb3cgY29weSBwZXIgY29udGFpbmVyIG9uIHRoZSBwYXRoIHRoYXQgdGhpcyB3cml0ZXIgaGFzIG5vdFxuICogYWxyZWFkeSBjb3BpZWQg4oCUIE8oZGVwdGggw5cgd2lkdGgpLCBpbmRlcGVuZGVudCBvZiBldmVyeXRoaW5nIHRoZSB3cml0ZVxuICogZG9lcyBub3QgcGFzcyB0aHJvdWdoLiBBIHBhdGggb2Ygb25lIHNlZ21lbnQgKGEgcm9vdCBrZXksIHRoZSBjb21tb24gY2FzZSlcbiAqIGNvcGllcyBub3RoaW5nIGhlcmUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBvd25TcGluZShyb290OiBhbnksIHBhdGg6IHN0cmluZyB8IChzdHJpbmcgfCBudW1iZXIpW10sIG93bmVkOiBXZWFrU2V0PG9iamVjdD4pOiB2b2lkIHtcbiAgY29uc3Qgc2VncyA9IHRvU2VnbWVudHMocGF0aCk7XG4gIGlmIChzZWdzLnNvbWUoaXNEZW5pZWRTZWdtZW50KSkgcmV0dXJuO1xuICBsZXQgY3VyciA9IHJvb3Q7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgc2Vncy5sZW5ndGggLSAxOyBpKyspIHtcbiAgICBjb25zdCBrID0gc2Vnc1tpXTtcbiAgICBjb25zdCBuZXh0ID0gb3duQ2hpbGQoY3Vyciwgayk7XG4gICAgaWYgKCFpc0NvbnRhaW5lcihuZXh0KSkgcmV0dXJuO1xuICAgIGlmIChvd25lZC5oYXMobmV4dCkpIHtcbiAgICAgIGN1cnIgPSBuZXh0O1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGNvbnN0IGNvcHkgPSBzaGFsbG93Q29weShuZXh0KTtcbiAgICBvd25lZC5hZGQoY29weSk7XG4gICAgcHV0T3duKGN1cnIsIGssIGNvcHkpO1xuICAgIGN1cnIgPSBjb3B5O1xuICB9XG59XG5cbi8qKlxuICogVGhlIHJvb3Qgb2YgYSBuZXcgZ2VuZXJhdGlvbjogYSBzaGFsbG93IGNvcHkgb2YgYGJhc2VgIHdoZW4gaXQgaXMgYVxuICogY29udGFpbmVyIChvd25lZCBieSB0aGUgd3JpdGVyKSwgZWxzZSB0aGUgaGlzdG9yaWNhbCBkZWVwIGNsb25lIG9mIGFcbiAqIG5vbi1jb250YWluZXIgYmFzZSAoYHVuZGVmaW5lZGAsIGEgcHJpbWl0aXZlKSBzbyB0aGUgY2FsbGVycycgYmVoYXZpb3VyIG9uXG4gKiBzdWNoIGEgYmFzZSBpcyB1bmNoYW5nZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBvd25lZFJvb3RPZihiYXNlOiBhbnksIG93bmVkPzogV2Vha1NldDxvYmplY3Q+KTogYW55IHtcbiAgaWYgKCFpc0NvbnRhaW5lcihiYXNlKSkgcmV0dXJuIHN0cnVjdHVyZWRDbG9uZShiYXNlKTtcbiAgY29uc3Qgcm9vdCA9IHNoYWxsb3dDb3B5KGJhc2UpO1xuICBvd25lZD8uYWRkKHJvb3QpO1xuICByZXR1cm4gcm9vdDtcbn1cblxuLyoqIE1hcmsgYSB2YWx1ZSB0aGUgd3JpdGVyIGp1c3QgY3JlYXRlZCAoYSBmcmVzaCBjbG9uZSwgYSBtZXJnZSByZXN1bHQpIGFzIG93bmVkLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG93bih2YWx1ZTogdW5rbm93biwgb3duZWQ6IFdlYWtTZXQ8b2JqZWN0PiB8IHVuZGVmaW5lZCk6IHZvaWQge1xuICBpZiAob3duZWQgIT09IHVuZGVmaW5lZCAmJiBpc0NvbnRhaW5lcih2YWx1ZSkpIG93bmVkLmFkZCh2YWx1ZSk7XG59XG5cbi8qKlxuICogTWFyayBFVkVSWSBjb250YWluZXIgb2YgYSB0cmVlIHRoZSB3cml0ZXIganVzdCBjcmVhdGVkIHdob2xlIChhXG4gKiBgc3RydWN0dXJlZENsb25lYCByZXN1bHQpIGFzIG93bmVkLCBzbyBhIGxhdGVyIHdyaXRlIHRocm91Z2ggYW55IG9mIHRoZW1cbiAqIGVkaXRzIGl0IGluIHBsYWNlIGluc3RlYWQgb2YgY29weWluZyBpdCBhZ2Fpbi4gV2Fsa3Mgb3duIGVudW1lcmFibGUga2V5cyDigJRcbiAqIHRoZSBzbG90cyBhIHBhdGggY2FuIGFkZHJlc3M7IGEgYE1hcGAncyBvciBgU2V0YCdzIGVudHJpZXMgYXJlIG5vdC4gTyh0aGVcbiAqIHRyZWUncyBjb250YWluZXJzKTsgYSBjb250YWluZXIgYWxyZWFkeSBvd25lZCBpcyBub3Qgd2Fsa2VkIHR3aWNlIChhIGN5Y2xlXG4gKiBpbnNpZGUgdGhlIGNsb25lIGVuZHMgdGhlcmUpLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYWRvcHQodHJlZTogdW5rbm93biwgb3duZWQ6IFdlYWtTZXQ8b2JqZWN0Pik6IHZvaWQge1xuICBjb25zdCBzdGFjazogdW5rbm93bltdID0gW3RyZWVdO1xuICB3aGlsZSAoc3RhY2subGVuZ3RoID4gMCkge1xuICAgIGNvbnN0IHZhbHVlID0gc3RhY2sucG9wKCk7XG4gICAgaWYgKCFpc0NvbnRhaW5lcih2YWx1ZSkgfHwgb3duZWQuaGFzKHZhbHVlKSkgY29udGludWU7XG4gICAgb3duZWQuYWRkKHZhbHVlKTtcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyh2YWx1ZSkpIHN0YWNrLnB1c2goKHZhbHVlIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KVtrZXldKTtcbiAgfVxufVxuXG4vKiogUmV0dXJucyB0cnVlIGlmIGBvYmpgIGhhcyBhbiBvd24gcHJvcGVydHkgYXQgZXZlcnkgc2VnbWVudCBvZiBgcGF0aGAuICovXG5leHBvcnQgZnVuY3Rpb24gbmF0aXZlSGFzKG9iajogYW55LCBwYXRoOiBzdHJpbmcgfCAoc3RyaW5nIHwgbnVtYmVyKVtdKTogYm9vbGVhbiB7XG4gIGNvbnN0IHNlZ3MgPSB0b1NlZ21lbnRzKHBhdGgpO1xuICBsZXQgY3VyciA9IG9iajtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBzZWdzLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKGN1cnIgPT0gbnVsbCB8fCAhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGN1cnIsIHNlZ3NbaV0pKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKGkgPCBzZWdzLmxlbmd0aCAtIDEpIGN1cnIgPSBjdXJyW3NlZ3NbaV1dO1xuICB9XG4gIHJldHVybiB0cnVlO1xufVxuXG4vKipcbiAqIERlZXAgbWVyZ2Ugd2hlcmUgZGVzdGluYXRpb24gd2lucyBmb3IgYW55IGRlZmluZWQgdmFsdWUuXG4gKiBGaWxscyBtaXNzaW5nIGtleXMgZnJvbSBgc3JjYCwgYnV0IG5ldmVyIG92ZXJ3cml0ZXMgZGVmaW5lZCBrZXlzIGluIGBkc3RgLlxuICogQXJyYXlzIGFyZSBub3QgcmVjdXJzZWQg4oCUIGRzdCBhcnJheSBhbHdheXMgd2lucyB3aGVuIHByZXNlbnQuXG4gKlxuICogUmVwbGFjZXM6IGBtZXJnZVdpdGgoZHN0LCBzcmMsIChvYmpWYWx1ZSkgPT4gb2JqVmFsdWUgIT09IHVuZGVmaW5lZCA/IG9ialZhbHVlIDogdW5kZWZpbmVkKWBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1lcmdlQ29udGV4dFdpbnMoZHN0OiBhbnksIHNyYzogYW55KTogYW55IHtcbiAgaWYgKCFzcmMgfHwgdHlwZW9mIHNyYyAhPT0gJ29iamVjdCcgfHwgQXJyYXkuaXNBcnJheShzcmMpKSB7XG4gICAgcmV0dXJuIGRzdCAhPT0gdW5kZWZpbmVkID8gZHN0IDogc3JjO1xuICB9XG4gIGNvbnN0IG91dDogYW55ID0gZHN0ICE9IG51bGwgJiYgdHlwZW9mIGRzdCA9PT0gJ29iamVjdCcgPyB7IC4uLmRzdCB9IDoge307XG4gIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKHNyYykpIHtcbiAgICBpZiAoREVOSUVELmhhcyhrZXkpKSBjb250aW51ZTtcbiAgICBjb25zdCBkc3RWYWwgPSBvd25DaGlsZChvdXQsIGtleSk7XG4gICAgaWYgKGRzdFZhbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyBkc3Qgd2luczsgcmVjdXJzZSBvbmx5IGlmIGJvdGggc2lkZXMgYXJlIHBsYWluIG9iamVjdHNcbiAgICAgIGlmIChcbiAgICAgICAgZHN0VmFsICE9PSBudWxsICYmXG4gICAgICAgIHR5cGVvZiBkc3RWYWwgPT09ICdvYmplY3QnICYmXG4gICAgICAgICFBcnJheS5pc0FycmF5KGRzdFZhbCkgJiZcbiAgICAgICAgc3JjW2tleV0gIT09IG51bGwgJiZcbiAgICAgICAgdHlwZW9mIHNyY1trZXldID09PSAnb2JqZWN0JyAmJlxuICAgICAgICAhQXJyYXkuaXNBcnJheShzcmNba2V5XSlcbiAgICAgICkge1xuICAgICAgICBwdXRPd24ob3V0LCBrZXksIG1lcmdlQ29udGV4dFdpbnMoZHN0VmFsLCBzcmNba2V5XSkpO1xuICAgICAgfVxuICAgICAgLy8gZWxzZSBrZWVwIGRzdFZhbCB1bmNoYW5nZWRcbiAgICB9IGVsc2Uge1xuICAgICAgcHV0T3duKG91dCwga2V5LCBzcmNba2V5XSk7XG4gICAgfVxuICB9XG4gIHJldHVybiBvdXQ7XG59XG4iXX0=
@@ -14,6 +14,7 @@
14
14
  * name one (C2: the engine decides where a stage writes, `runAddress.ts · runAddress`).
15
15
  * Zero external dependencies.
16
16
  */
17
+ import { setOwnValue } from '../capture/ownData.js';
17
18
  import { isDeniedSegment, nativeGet as _get } from './pathOps.js';
18
19
  export { deepEqual } from './equality.js';
19
20
  export { deepSmartMerge } from './merge.js';
@@ -60,15 +61,6 @@ export function isDeniedWritePath(address = [], path = [], field) {
60
61
  const prefix = addressOf(address);
61
62
  return prefix.some(isDeniedSegment) || path.some(isDeniedSegment) || isDeniedSegment(field);
62
63
  }
63
- /** Keep existing own-property behavior; a missing slot must not call an inherited setter. */
64
- function setOwnValue(object, key, value) {
65
- if (Object.prototype.hasOwnProperty.call(object, key)) {
66
- object[key] = value;
67
- }
68
- else {
69
- Object.defineProperty(object, key, { value, enumerable: true, writable: true, configurable: true });
70
- }
71
- }
72
64
  /**
73
65
  * The container at `address` + `path` inside `obj`, each missing one created
74
66
  * on the way: the one AT the address from `defaultValues` when given, every
@@ -156,4 +148,4 @@ export function getNestedValue(root, path, field) {
156
148
  }
157
149
  return undefined;
158
150
  }
159
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL21lbW9yeS91dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUUsZUFBZSxFQUFFLFNBQVMsSUFBSSxJQUFJLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFJbEUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMxQyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQzVDLE9BQU8sRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBRSxNQUFNLFlBQVksQ0FBQztBQUNoRSxPQUFPLEVBQUUsZUFBZSxFQUFFLG1CQUFtQixFQUFFLE9BQU8sRUFBRSxjQUFjLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFJaEg7Ozs7O0dBS0c7QUFDSCxNQUFNLFVBQVUsb0JBQW9CLENBQUMsVUFBNkIsRUFBRSxFQUFFLE9BQTRCLEVBQUU7SUFDbEcsT0FBTztRQUNMLE9BQU8sRUFBRSxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUztRQUM3RSxVQUFVLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQztLQUN0QixDQUFDO0FBQ0osQ0FBQztBQUVELG9IQUFvSDtBQUNwSCxTQUFTLFNBQVMsQ0FBQyxPQUEwQjtJQUMzQyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDO1FBQUUsT0FBTyxPQUFPLENBQUM7SUFDM0MsTUFBTSxJQUFJLFNBQVMsQ0FDakIsd0RBQXdELE9BQU8sS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsT0FBTyxPQUFPLEVBQUUsQ0FDckcsQ0FBQztB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QUFJLEtBQUssSUFBSSxJQUFJLE9BQU8sSUFBSSxLQUFLLFFBQVEsSUFBSSxNQUFNLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDbkcsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDckIsQ0FBQztJQUNELE9BQU8sU0FBUyxDQUFDO0FBQ25CLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIHV0aWxzLnRzIOKAlCBuZXN0ZWQtb2JqZWN0IGhlbHBlcnMgZm9yIHRoZSBoZWFwLCBhbmQgdGhlIG1lbW9yeSBsZWF2ZXMnIG9uZVxuICogcmUtZXhwb3J0IHN1cmZhY2UuXG4gKlxuICogVGhlIGhlbHBlcnMgaGVyZSAoYHNldE5lc3RlZFZhbHVlYCwgYHVwZGF0ZU5lc3RlZFZhbHVlYCwgYHVwZGF0ZVZhbHVlYCxcbiAqIGBnZXROZXN0ZWRWYWx1ZWApIHdhbGsgYSBuZXN0ZWQgb2JqZWN0IGJ5IHBhdGggd2l0aFxuICogcHJvdG90eXBlLXBvbGx1dGlvbiBwcm90ZWN0aW9uLiBFdmVyeXRoaW5nIGVsc2UgdGhpcyBmaWxlIHVzZWQgdG8gaG9sZCBoYXMgYW5cbiAqIG93bmVyIG9mIGl0cyBvd24gYW5kIGlzIHJlLWV4cG9ydGVkLCBzbyBubyBpbXBvcnRlciBtb3ZlZDogdGhlIHBhdGggY29kZWNcbiAqIChgcGF0aHMudHNgKSwgc3RydWN0dXJhbCBlcXVhbGl0eSAoYGVxdWFsaXR5LnRzYCkgYW5kIHRoZSB1bmlvbiBtZXJnZVxuICogKGBtZXJnZS50c2ApIGF0IEwwLCBhbmQgdGhlIHZlcmIgbGF3IChgdmVyYnMudHNgKSBhdCBMMSDigJQgYGFwcGx5U21hcnRNZXJnZWAsXG4gKiBgbmV4dEdlbmVyYXRpb25gLCBgYXBwbHlTbWFydE1lcmdlSW50b2AsIGBkcnlGb2xkYCwgYHN1cGVyc2VkZWRCeU5leHRTZXRgLlxuICogVGhlIGxvZydzIHNjcnViLCBgcmVkYWN0UGF0Y2hgLCBtb3ZlZCBvdXQgaW4gOS4zMy4wOyBpdCBpcyB0aGUgcmVjb3JkJ3Mgb3duLCBgc2NydWIudHNgIChDNCkuXG4gKiBUaGUgd3JpdGVycyB0YWtlIGFuIEFERFJFU1MsIGEgcGF0aCBwcmVmaXggdGhlaXIgY2FsbGVyIGNvbXB1dGVkLCBhbmQgbmV2ZXJcbiAqIG5hbWUgb25lIChDMjogdGhlIGVuZ2luZSBkZWNpZGVzIHdoZXJlIGEgc3RhZ2Ugd3JpdGVzLCBgcnVuQWRkcmVzcy50cyDCtyBydW5BZGRyZXNzYCkuXG4gKiBaZXJvIGV4dGVybmFsIGRlcGVuZGVuY2llcy5cbiAqL1xuXG5pbXBvcnQgeyBpc0RlbmllZFNlZ21lbnQsIG5hdGl2ZUdldCBhcyBfZ2V0IH0gZnJvbSAnLi9wYXRoT3BzLmpzJztcbmltcG9ydCB7IERFTElNIH0gZnJvbSAnLi9wYXRocy5qcyc7XG5pbXBvcnQgdHlwZSB7IE1lbW9yeVBhdGNoIH0gZnJvbSAnLi90eXBlcy5qcyc7XG5cbmV4cG9ydCB7IGRlZXBFcXVhbCB9IGZyb20gJy4vZXF1YWxpdHkuanMnO1xuZXhwb3J0IHsgZGVlcFNtYXJ0TWVyZ2UgfSBmcm9tICcuL21lcmdlLmpzJztcbmV4cG9ydCB7IERFTElNLCBub3JtYWxpc2VQYXRoLCBwYXRoU2VnbWVudHMgfSBmcm9tICcuL3BhdGhzLmpzJztcbmV4cG9ydCB7IGFwcGx5U21hcnRNZXJnZSwgYXBwbHlTbWFydE1lcmdlSW50bywgZHJ5Rm9sZCwgbmV4dEdlbmVyYXRpb24sIHN1cGVyc2VkZWRCeU5leHRTZXQgfSBmcm9tICcuL3ZlcmJzLmpzJztcblxudHlwZSBOZXN0ZWRPYmplY3QgPSB7IFtrZXk6IHN0cmluZ106IGFueSB9O1xuXG4vKipcbiAqIFRoZSB0d28gcGxhY2VzIGEgdmFsdWUgYXQgYHBhdGhgIGNhbiBzaXQ6IHVuZGVyIGBhZGRyZXNzYCAoYHJ1blBhdGhgLCBhYnNlbnRcbiAqIGZvciB0aGUgcm9vdCBhZGRyZXNzIGBbXWApIGFuZCBhdCB0aGUgcm9vdCAoYGdsb2JhbFBhdGhgKS4gYGFkZHJlc3NgIGlzIGFcbiAqIHBhdGggcHJlZml4IHRoZSBjYWxsZXIgY29tcHV0ZWQg4oCUIGZvciB0aGUgZW5naW5lLCBhIGZyYW1lJ3MgcnVuIG5hbWVzcGFjZVxuICogKGBydW5BZGRyZXNzLnRzIMK3IHJ1bkFkZHJlc3NgLCBDMiksIGhlbGQgYnkgaXRzIHJlY29yZCBmcmFtZSAoYFJlY29yZEZyYW1lIMK3IGFkZHJlc3NgLCBDMykuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRSdW5BbmRHbG9iYWxQYXRocyhhZGRyZXNzOiByZWFkb25seSBzdHJpbmdbXSA9IFtdLCBwYXRoOiAoc3RyaW5nIHwgbnVtYmVyKVtdID0gW10pIHtcbiAgcmV0dXJuIHtcbiAgICBydW5QYXRoOiBhZGRyZXNzT2YoYWRkcmVzcykubGVuZ3RoID4gMCA/IHBhdGhVbmRlcihhZGRyZXNzLCBwYXRoKSA6IHVuZGVmaW5lZCxcbiAgICBnbG9iYWxQYXRoOiBbLi4ucGF0aF0sXG4gIH07XG59XG5cbi8qKiBBbiBhZGRyZXNzIGlzIGFuIGFycmF5LiBBIHJ1biBpZCBzdGlsbCBwYXNzZWQgaW4gaXRzIHBsYWNlIChDMikgaXMgcmVmdXNlZCwgbmV2ZXIgc3ByZWFkIGludG8gaXRzIGNoYXJhY3RlcnMuICovXG5mdW5jdGlvbiBhZGRyZXNzT2YoYWRkcmVzczogcmVhZG9ubHkgc3RyaW5nW10pOiByZWFkb25seSBzdHJpbmdbXSB7XG4gIGlmIChBcnJheS5pc0FycmF5KGFkZHJlc3MpKSByZXR1cm4gYWRkcmVzcztcbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICBgZm9vdHByaW50anM6IGFuIGFkZHJlc3MgaXMgYW4gYXJyYXkgcGF0aCBwcmVmaXgsIGdvdCAke2FkZHJlc3MgPT09IG51bGwgPyAnbnVsbCcgOiB0eXBlb2YgYWRkcmVzc31gLFxuICApO1xufVxuXG4vKipcbiAqIGBhZGRyZXNzYCB0aGVuIGBwYXRoYCwgYXMgb25lIG5ldyBhcnJheS4gQW4gaW5kZXggbG9vcCwgYmVjYXVzZSB0aGUgZG91YmxlXG4gKiBzcHJlYWQgYFsuLi5hZGRyZXNzLCAuLi5wYXRoXWAgY29zdHMgdHdpY2UgYXMgbXVjaCBhbmQgYSBmcmFtZSBidWlsZHMgb25lIG9uXG4gKiBldmVyeSByZWFkIGl0IHNlcnZlcyBmcm9tIGxpdmUgc3RhdGUgKGEgZm9yayBjaGlsZCByZWFkaW5nIGEgcm9vdCBrZXkpLlxuICovXG5mdW5jdGlvbiBwYXRoVW5kZXIoYWRkcmVzczogcmVhZG9ubHkgc3RyaW5nW10sIHBhdGg6IHJlYWRvbmx5IChzdHJpbmcgfCBudW1iZXIpW10pOiAoc3RyaW5nIHwgbnVtYmVyKVtdIHtcbiAgY29uc3Qgb3V0ID0gbmV3IEFycmF5PHN0cmluZyB8IG51bWJlcj4oYWRkcmVzcy5sZW5ndGggKyBwYXRoLmxlbmd0aCk7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYWRkcmVzcy5sZW5ndGg7IGkrKykgb3V0W2ldID0gYWRkcmVzc1tpXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBwYXRoLmxlbmd0aDsgaSsrKSBvdXRbYWRkcmVzcy5sZW5ndGggKyBpXSA9IHBhdGhbaV07XG4gIHJldHVybiBvdXQ7XG59XG5cbi8qKlxuICogUmVmdXNlIHRoZSBXSE9MRSBzZWxlY3RvciBiZWZvcmUgY3JlYXRpbmcgYSBjb250YWluZXIgb3IgY29weWluZyBhIGdlbmVyYXRpb24uXG4gKiBUaGUgYWRkcmVzcydzIGFycmF5IGNvbnRyYWN0IGlzIGNoZWNrZWQgZXZlbiB3aGVuIGFub3RoZXIgc2VsZWN0b3IgaXMgZGVuaWVkLlxuICogUGF5bG9hZCBrZXlzIGFyZSBkYXRhLCBub3Qgc2VsZWN0b3JzLCBhbmQgYXJlIGRlbGliZXJhdGVseSBub3QgaW5zcGVjdGVkLlxuICogQGludGVybmFsIFNoYXJlZCBieSB0aGUgbmVzdGVkIHdyaXRlcnMgYW5kIFNoYXJlZE1lbW9yeSdzIHByZS1jb3B5IGJvdW5kYXJ5LlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNEZW5pZWRXcml0ZVBhdGgoXG4gIGFkZHJlc3M6IHJlYWRvbmx5IHN0cmluZ1tdID0gW10sXG4gIHBhdGg6IHJlYWRvbmx5IChzdHJpbmcgfCBudW1iZXIpW10gPSBbXSxcbiAgZmllbGQ6IHN0cmluZyB8IG51bWJlcixcbik6IGJvb2xlYW4ge1xuICBjb25zdCBwcmVmaXggPSBhZGRyZXNzT2YoYWRkcmVzcyk7XG4gIHJldHVybiBwcmVmaXguc29tZShpc0RlbmllZFNlZ21lbnQpIHx8IHBhdGguc29tZShpc0RlbmllZFNlZ21lbnQpIHx8IGlzRGVuaWVkU2VnbWVudChmaWVsZCk7XG59XG5cbi8qKiBLZWVwIGV4aXN0aW5nIG93bi1wcm9wZXJ0eSBiZWhhdmlvcjsgYSBtaXNzaW5nIHNsb3QgbXVzdCBub3QgY2FsbCBhbiBpbmhlcml0ZWQgc2V0dGVyLiAqL1xuZnVuY3Rpb24gc2V0T3duVmFsdWUob2JqZWN0OiBOZXN0ZWRPYmplY3QsIGtleTogc3RyaW5nIHwgbnVtYmVyLCB2YWx1ZTogdW5rbm93bik6IHZvaWQge1xuICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwga2V5KSkge1xuICAgIG9iamVjdFtrZXldID0gdmFsdWU7XG4gIH0gZWxzZSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iamVjdCwga2V5LCB7IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0pO1xuICB9XG59XG5cbi8qKlxuICogVGhlIGNvbnRhaW5lciBhdCBgYWRkcmVzc2AgKyBgcGF0aGAgaW5zaWRlIGBvYmpgLCBlYWNoIG1pc3Npbmcgb25lIGNyZWF0ZWRcbiAqIG9uIHRoZSB3YXk6IHRoZSBvbmUgQVQgdGhlIGFkZHJlc3MgZnJvbSBgZGVmYXVsdFZhbHVlc2Agd2hlbiBnaXZlbiwgZXZlcnlcbiAqIG90aGVyIG9uZSBlbXB0eS4gVGhlIG9uZSB3YWxrIGJvdGggbmVzdGVkIHdyaXRlcnMgc2hhcmUuXG4gKi9cbmZ1bmN0aW9uIGNvbnRhaW5lckF0KFxuICBvYmo6IE5lc3RlZE9iamVjdCxcbiAgYWRkcmVzczogcmVhZG9ubHkgc3RyaW5nW10gPSBbXSxcbiAgcGF0aDogcmVhZG9ubHkgKHN0cmluZyB8IG51bWJlcilbXSA9IFtdLFxuICBkZWZhdWx0VmFsdWVzPzogdW5rbm93bixcbik6IE5lc3RlZE9iamVjdCB7XG4gIGNvbnN0IHNlZ21lbnRzID0gcGF0aFVuZGVyKGFkZHJlc3NPZihhZGRyZXNzKSwgcGF0aCk7XG4gIGxldCBjdXJyZW50ID0gb2JqO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHNlZ21lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3Qga2V5ID0gc2VnbWVudHNbaV07XG4gICAgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoY3VycmVudCwga2V5KSkge1xuICAgICAgc2V0T3duVmFsdWUoY3VycmVudCwga2V5LCBpID09PSBhZGRyZXNzLmxlbmd0aCAtIDEgJiYgZGVmYXVsdFZhbHVlcyA/IGRlZmF1bHRWYWx1ZXMgOiB7fSk7XG4gICAgfVxuICAgIGN1cnJlbnQgPSBjdXJyZW50W2tleV07XG4gIH1cbiAgcmV0dXJuIGN1cnJlbnQ7XG59XG5cbi8qKlxuICogU2V0cyBhIHZhbHVlIGF0IGEgbmVzdGVkIHBhdGggdW5kZXIgYGFkZHJlc3NgLCBjcmVhdGluZyBpbnRlcm1lZGlhdGUgb2JqZWN0cyBhcyBuZWVkZWQuXG4gKiBBIGRlbmllZCBhZGRyZXNzL3BhdGgvZmllbGQgbGVhdmVzIGBvYmpgIHVuY2hhbmdlZCwgaW5jbHVkaW5nIGl0cyBwcm90b3R5cGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXROZXN0ZWRWYWx1ZTxUPihcbiAgb2JqOiBOZXN0ZWRPYmplY3QsXG4gIGFkZHJlc3M6IHJlYWRvbmx5IHN0cmluZ1tdLFxuICBwYXRoOiBzdHJpbmdbXSxcbiAgZmllbGQ6IHN0cmluZyxcbiAgdmFsdWU6IFQsXG4gIGRlZmF1bHRWYWx1ZXM/OiB1bmtub3duLFxuKTogTmVzdGVkT2JqZWN0IHtcbiAgaWYgKGlzRGVuaWVkV3JpdGVQYXRoKGFkZHJlc3MsIHBhdGgsIGZpZWxkKSkgcmV0dXJuIG9iajtcbiAgc2V0T3duVmFsdWUoY29udGFpbmVyQXQob2JqLCBhZGRyZXNzLCBwYXRoLCBkZWZhdWx0VmFsdWVzKSwgZmllbGQsIHZhbHVlKTtcbiAgcmV0dXJuIG9iajtcbn1cblxuLyoqXG4gKiBVcGRhdGVzIGEgdmFsdWUgaW4gdGhlIG9iamVjdCBhdCBhIG5lc3RlZCBwYXRoIHVuZGVyIGBhZGRyZXNzYC5cbiAqIEEgZGVuaWVkIGFkZHJlc3MvcGF0aC9maWVsZCBsZWF2ZXMgYG9iamAgdW5jaGFuZ2VkLCBpbmNsdWRpbmcgaXRzIHByb3RvdHlwZS5cbiAqIC0gQXJyYXlzOiBjb25jYXRlbmF0ZVxuICogLSBPYmplY3RzOiBzaGFsbG93IG1lcmdlIGF0IGVhY2ggbGV2ZWxcbiAqIC0gUHJpbWl0aXZlczogcmVwbGFjZVxuICovXG5leHBvcnQgZnVuY3Rpb24gdXBkYXRlTmVzdGVkVmFsdWU8VD4oXG4gIG9iajogYW55LFxuICBhZGRyZXNzOiByZWFkb25seSBzdHJpbmdbXSxcbiAgcGF0aDogKHN0cmluZyB8IG51bWJlcilbXSxcbiAgZmllbGQ6IHN0cmluZyB8IG51bWJlcixcbiAgdmFsdWU6IFQsXG4gIGRlZmF1bHRWYWx1ZXM/OiB1bmtub3duLFxuKTogYW55IHtcbiAgaWYgKGlzRGVuaWVkV3JpdGVQYXRoKGFkZHJlc3MsIHBhdGgsIGZpZWxkKSkgcmV0dXJuIG9iajtcbiAgdXBkYXRlVmFsdWUoY29udGFpbmVyQXQob2JqLCBhZGRyZXNzLCBwYXRoLCBkZWZhdWx0VmFsdWVzKSwgZmllbGQsIHZhbHVlKTtcbiAgcmV0dXJuIG9iajtcbn1cblxuLyoqXG4gKiBJbi1wbGFjZSB2YWx1ZSB1cGRhdGUgd2l0aCBtZXJnZSBzZW1hbnRpY3MuXG4gKiAtIEFycmF5cyAobm9uLWVtcHR5KTogY29uY2F0ZW5hdGUgb250byBleGlzdGluZ1xuICogLSBBcnJheXMgKGVtcHR5KTogICAgIGRpcmVjdCByZXBsYWNlIOKAlCB3cml0aW5nIGBbXWAgY2xlYXJzIHRoZSBmaWVsZFxuICogLSBPYmplY3RzIChub24tZW1wdHkpOiBzaGFsbG93IG1lcmdlIChzcHJlYWQpXG4gKiAtIE9iamVjdHMgKGVtcHR5KTogICAgZGlyZWN0IHJlcGxhY2Ug4oCUIHdyaXRpbmcgYHt9YCBjbGVhcnMgdGhlIGZpZWxkXG4gKiAtIFByaW1pdGl2ZXM6IGRpcmVjdCBhc3NpZ25tZW50XG4gKlxuICogTm90ZSBvbiBlbXB0eSBhcnJheXM6IGJvdGggYHZhbHVlICYmIEFycmF5LmlzQXJyYXkodmFsdWUpYCBhbmRcbiAqIGBBcnJheS5pc0FycmF5KHZhbHVlKWAgZXZhbHVhdGUgdGhlIHNhbWUgZm9yIGFycmF5cyDigJQgYFtdYCBpcyB0cnV0aHkgaW5cbiAqIEphdmFTY3JpcHQsIHNvIHRoZSBgJiZgIGd1YXJkIHdhcyBuZXZlciB0aGUgaXNzdWUuIFRoZSBhY3R1YWwgYnVnIHdhcyB0aGVcbiAqIGNvbmNhdCBwYXRoOiBgWy4uLmN1ciwgLi4uW11dYCBzaWxlbnRseSByZXR1cm5lZCBgY3VyYCB1bmNoYW5nZWQgd2hlbiBgdmFsdWVgXG4gKiB3YXMgYFtdYCwgbWFraW5nIGB1cGRhdGVWYWx1ZShvYmosICd0YWdzJywgW10pYCBhIG5vLW9wIGluc3RlYWQgb2YgYSBjbGVhci5cbiAqIFRoZSBmaXggaXMgdGhlIGV4cGxpY2l0IGB2YWx1ZS5sZW5ndGggPT09IDBgIGVhcmx5LXJldHVybiBicmFuY2guXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1cGRhdGVWYWx1ZShvYmplY3Q6IGFueSwga2V5OiBzdHJpbmcgfCBudW1iZXIsIHZhbHVlOiBhbnkpOiB2b2lkIHtcbiAgaWYgKGlzRGVuaWVkU2VnbWVudChrZXkpKSByZXR1cm47XG4gIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgIGlmICh2YWx1ZS5sZW5ndGggPT09IDApIHtcbiAgICAgIHNldE93blZhbHVlKG9iamVjdCwga2V5LCB2YWx1ZSk7IC8vIGNsZWFyOiBbXSByZXBsYWNlcyB3aGF0ZXZlciB3YXMgdGhlcmVcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgY3VyID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwga2V5KSA/IG9iamVjdFtrZXldIDogdW5kZWZpbmVkO1xuICAgICAgc2V0T3duVmFsdWUob2JqZWN0LCBrZXksIGN1ciA9PT0gdW5kZWZpbmVkID8gdmFsdWUgOiBbLi4uY3VyLCAuLi52YWx1ZV0pO1xuICAgIH1cbiAgfSBlbHNlIGlmICh2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIE9iamVjdC5rZXlzKHZhbHVlKS5sZW5ndGgpIHtcbiAgICBjb25zdCBjdXIgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBrZXkpID8gb2JqZWN0W2tleV0gOiB1bmRlZmluZWQ7XG4gICAgc2V0T3duVmFsdWUob2JqZWN0LCBrZXksIGN1ciA9PT0gdW5kZWZpbmVkID8gdmFsdWUgOiB7IC4uLmN1ciwgLi4udmFsdWUgfSk7XG4gIH0gZWxzZSB7XG4gICAgc2V0T3duVmFsdWUob2JqZWN0LCBrZXksIHZhbHVlKTtcbiAgfVxufVxuXG4vKipcbiAqIEdldHMgYSB2YWx1ZSBhdCBhIG5lc3RlZCBwYXRoIHdpdGggcHJvdG90eXBlLXBvbGx1dGlvbiBwcm90ZWN0aW9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0TmVzdGVkVmFsdWUocm9vdDogYW55LCBwYXRoOiAoc3RyaW5nIHwgbnVtYmVyKVtdLCBmaWVsZD86IHN0cmluZyB8IG51bWJlcik6IGFueSB7XG4gIGNvbnN0IG5vZGUgPSBwYXRoICYmIHBhdGgubGVuZ3RoID4gMCA/IF9nZXQocm9vdCwgcGF0aCkgOiByb290O1xuICBpZiAoZmllbGQgPT09IHVuZGVmaW5lZCB8fCBub2RlID09PSB1bmRlZmluZWQpIHJldHVybiBub2RlO1xuICBpZiAobm9kZSAhPT0gbnVsbCAmJiB0eXBlb2Ygbm9kZSA9PT0gJ29iamVjdCcgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG5vZGUsIGZpZWxkKSkge1xuICAgIHJldHVybiBub2RlW2ZpZWxkXTtcbiAgfVxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuIl19
151
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL21lbW9yeS91dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDcEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxTQUFTLElBQUksSUFBSSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBSWxFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDMUMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUM1QyxPQUFPLEVBQUUsS0FBSyxFQUFFLGFBQWEsRUFBRSxZQUFZLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDaEUsT0FBTyxFQUFFLGVBQWUsRUFBRSxtQkFBbUIsRUFBRSxPQUFPLEVBQUUsY0FBYyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sWUFBWSxDQUFDO0FBSWhIOzs7OztHQUtHO0FBQ0gsTUFBTSxVQUFVLG9CQUFvQixDQUFDLFVBQTZCLEVBQUUsRUFBRSxPQUE0QixFQUFFO0lBQ2xHLE9BQU87UUFDTCxPQUFPLEVBQUUsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVM7UUFDN0UsVUFBVSxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUM7S0FDdEIsQ0FBQztBQUNKLENBQUM7QUFFRCxvSEFBb0g7QUFDcEgsU0FBUyxTQUFTLENBQUMsT0FBMEI7SUFDM0MsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQztRQUFFLE9BQU8sT0FBTyxDQUFDO0lBQzNDLE1BQU0sSUFBSSxTQUFTLENBQ2pCLHdEQUF3RCxPQUFPLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFN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QUFjLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7UUFDeEYsV0FBVyxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsR0FBRyxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxFQUFFLEdBQUcsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUM3RSxDQUFDO1NBQU0sQ0FBQztRQUNOLFdBQVcsQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ2xDLENBQUM7QUFDSCxDQUFDO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLFVBQVUsY0FBYyxDQUFDLElBQVMsRUFBRSxJQUF5QixFQUFFLEtBQXVCO0lBQzFGLE1BQU0sSUFBSSxHQUFHLElBQUksSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0lBQy9ELElBQUksS0FBSyxLQUFLLFNBQVMsSUFBSSxJQUFJLEtBQUssU0FBUztRQUFFLE9BQU8sSUFBSSxDQUFDO0lBQzNELElBQUksSUFBSSxLQUFLLElBQUksSUFBSSxPQUFPLElBQUksS0FBSyxRQUFRLElBQUksTUFBTSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQ25HLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3JCLENBQUM7SUFDRCxPQUFPLFNBQVMsQ0FBQztBQUNuQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiB1dGlscy50cyDigJQgbmVzdGVkLW9iamVjdCBoZWxwZXJzIGZvciB0aGUgaGVhcCwgYW5kIHRoZSBtZW1vcnkgbGVhdmVzJyBvbmVcbiAqIHJlLWV4cG9ydCBzdXJmYWNlLlxuICpcbiAqIFRoZSBoZWxwZXJzIGhlcmUgKGBzZXROZXN0ZWRWYWx1ZWAsIGB1cGRhdGVOZXN0ZWRWYWx1ZWAsIGB1cGRhdGVWYWx1ZWAsXG4gKiBgZ2V0TmVzdGVkVmFsdWVgKSB3YWxrIGEgbmVzdGVkIG9iamVjdCBieSBwYXRoIHdpdGhcbiAqIHByb3RvdHlwZS1wb2xsdXRpb24gcHJvdGVjdGlvbi4gRXZlcnl0aGluZyBlbHNlIHRoaXMgZmlsZSB1c2VkIHRvIGhvbGQgaGFzIGFuXG4gKiBvd25lciBvZiBpdHMgb3duIGFuZCBpcyByZS1leHBvcnRlZCwgc28gbm8gaW1wb3J0ZXIgbW92ZWQ6IHRoZSBwYXRoIGNvZGVjXG4gKiAoYHBhdGhzLnRzYCksIHN0cnVjdHVyYWwgZXF1YWxpdHkgKGBlcXVhbGl0eS50c2ApIGFuZCB0aGUgdW5pb24gbWVyZ2VcbiAqIChgbWVyZ2UudHNgKSBhdCBMMCwgYW5kIHRoZSB2ZXJiIGxhdyAoYHZlcmJzLnRzYCkgYXQgTDEg4oCUIGBhcHBseVNtYXJ0TWVyZ2VgLFxuICogYG5leHRHZW5lcmF0aW9uYCwgYGFwcGx5U21hcnRNZXJnZUludG9gLCBgZHJ5Rm9sZGAsIGBzdXBlcnNlZGVkQnlOZXh0U2V0YC5cbiAqIFRoZSBsb2cncyBzY3J1YiwgYHJlZGFjdFBhdGNoYCwgbW92ZWQgb3V0IGluIDkuMzMuMDsgaXQgaXMgdGhlIHJlY29yZCdzIG93biwgYHNjcnViLnRzYCAoQzQpLlxuICogVGhlIHdyaXRlcnMgdGFrZSBhbiBBRERSRVNTLCBhIHBhdGggcHJlZml4IHRoZWlyIGNhbGxlciBjb21wdXRlZCwgYW5kIG5ldmVyXG4gKiBuYW1lIG9uZSAoQzI6IHRoZSBlbmdpbmUgZGVjaWRlcyB3aGVyZSBhIHN0YWdlIHdyaXRlcywgYHJ1bkFkZHJlc3MudHMgwrcgcnVuQWRkcmVzc2ApLlxuICogWmVybyBleHRlcm5hbCBkZXBlbmRlbmNpZXMuXG4gKi9cblxuaW1wb3J0IHsgc2V0T3duVmFsdWUgfSBmcm9tICcuLi9jYXB0dXJlL293bkRhdGEuanMnO1xuaW1wb3J0IHsgaXNEZW5pZWRTZWdtZW50LCBuYXRpdmVHZXQgYXMgX2dldCB9IGZyb20gJy4vcGF0aE9wcy5qcyc7XG5pbXBvcnQgeyBERUxJTSB9IGZyb20gJy4vcGF0aHMuanMnO1xuaW1wb3J0IHR5cGUgeyBNZW1vcnlQYXRjaCB9IGZyb20gJy4vdHlwZXMuanMnO1xuXG5leHBvcnQgeyBkZWVwRXF1YWwgfSBmcm9tICcuL2VxdWFsaXR5LmpzJztcbmV4cG9ydCB7IGRlZXBTbWFydE1lcmdlIH0gZnJvbSAnLi9tZXJnZS5qcyc7XG5leHBvcnQgeyBERUxJTSwgbm9ybWFsaXNlUGF0aCwgcGF0aFNlZ21lbnRzIH0gZnJvbSAnLi9wYXRocy5qcyc7XG5leHBvcnQgeyBhcHBseVNtYXJ0TWVyZ2UsIGFwcGx5U21hcnRNZXJnZUludG8sIGRyeUZvbGQsIG5leHRHZW5lcmF0aW9uLCBzdXBlcnNlZGVkQnlOZXh0U2V0IH0gZnJvbSAnLi92ZXJicy5qcyc7XG5cbnR5cGUgTmVzdGVkT2JqZWN0ID0geyBba2V5OiBzdHJpbmddOiBhbnkgfTtcblxuLyoqXG4gKiBUaGUgdHdvIHBsYWNlcyBhIHZhbHVlIGF0IGBwYXRoYCBjYW4gc2l0OiB1bmRlciBgYWRkcmVzc2AgKGBydW5QYXRoYCwgYWJzZW50XG4gKiBmb3IgdGhlIHJvb3QgYWRkcmVzcyBgW11gKSBhbmQgYXQgdGhlIHJvb3QgKGBnbG9iYWxQYXRoYCkuIGBhZGRyZXNzYCBpcyBhXG4gKiBwYXRoIHByZWZpeCB0aGUgY2FsbGVyIGNvbXB1dGVkIOKAlCBmb3IgdGhlIGVuZ2luZSwgYSBmcmFtZSdzIHJ1biBuYW1lc3BhY2VcbiAqIChgcnVuQWRkcmVzcy50cyDCtyBydW5BZGRyZXNzYCwgQzIpLCBoZWxkIGJ5IGl0cyByZWNvcmQgZnJhbWUgKGBSZWNvcmRGcmFtZSDCtyBhZGRyZXNzYCwgQzMpLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0UnVuQW5kR2xvYmFsUGF0aHMoYWRkcmVzczogcmVhZG9ubHkgc3RyaW5nW10gPSBbXSwgcGF0aDogKHN0cmluZyB8IG51bWJlcilbXSA9IFtdKSB7XG4gIHJldHVybiB7XG4gICAgcnVuUGF0aDogYWRkcmVzc09mKGFkZHJlc3MpLmxlbmd0aCA+IDAgPyBwYXRoVW5kZXIoYWRkcmVzcywgcGF0aCkgOiB1bmRlZmluZWQsXG4gICAgZ2xvYmFsUGF0aDogWy4uLnBhdGhdLFxuICB9O1xufVxuXG4vKiogQW4gYWRkcmVzcyBpcyBhbiBhcnJheS4gQSBydW4gaWQgc3RpbGwgcGFzc2VkIGluIGl0cyBwbGFjZSAoQzIpIGlzIHJlZnVzZWQsIG5ldmVyIHNwcmVhZCBpbnRvIGl0cyBjaGFyYWN0ZXJzLiAqL1xuZnVuY3Rpb24gYWRkcmVzc09mKGFkZHJlc3M6IHJlYWRvbmx5IHN0cmluZ1tdKTogcmVhZG9ubHkgc3RyaW5nW10ge1xuICBpZiAoQXJyYXkuaXNBcnJheShhZGRyZXNzKSkgcmV0dXJuIGFkZHJlc3M7XG4gIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgYGZvb3RwcmludGpzOiBhbiBhZGRyZXNzIGlzIGFuIGFycmF5IHBhdGggcHJlZml4LCBnb3QgJHthZGRyZXNzID09PSBudWxsID8gJ251bGwnIDogdHlwZW9mIGFkZHJlc3N9YCxcbiAgKTtcbn1cblxuLyoqXG4gKiBgYWRkcmVzc2AgdGhlbiBgcGF0aGAsIGFzIG9uZSBuZXcgYXJyYXkuIEFuIGluZGV4IGxvb3AsIGJlY2F1c2UgdGhlIGRvdWJsZVxuICogc3ByZWFkIGBbLi4uYWRkcmVzcywgLi4ucGF0aF1gIGNvc3RzIHR3aWNlIGFzIG11Y2ggYW5kIGEgZnJhbWUgYnVpbGRzIG9uZSBvblxuICogZXZlcnkgcmVhZCBpdCBzZXJ2ZXMgZnJvbSBsaXZlIHN0YXRlIChhIGZvcmsgY2hpbGQgcmVhZGluZyBhIHJvb3Qga2V5KS5cbiAqL1xuZnVuY3Rpb24gcGF0aFVuZGVyKGFkZHJlc3M6IHJlYWRvbmx5IHN0cmluZ1tdLCBwYXRoOiByZWFkb25seSAoc3RyaW5nIHwgbnVtYmVyKVtdKTogKHN0cmluZyB8IG51bWJlcilbXSB7XG4gIGNvbnN0IG91dCA9IG5ldyBBcnJheTxzdHJpbmcgfCBudW1iZXI+KGFkZHJlc3MubGVuZ3RoICsgcGF0aC5sZW5ndGgpO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGFkZHJlc3MubGVuZ3RoOyBpKyspIG91dFtpXSA9IGFkZHJlc3NbaV07XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgcGF0aC5sZW5ndGg7IGkrKykgb3V0W2FkZHJlc3MubGVuZ3RoICsgaV0gPSBwYXRoW2ldO1xuICByZXR1cm4gb3V0O1xufVxuXG4vKipcbiAqIFJlZnVzZSB0aGUgV0hPTEUgc2VsZWN0b3IgYmVmb3JlIGNyZWF0aW5nIGEgY29udGFpbmVyIG9yIGNvcHlpbmcgYSBnZW5lcmF0aW9uLlxuICogVGhlIGFkZHJlc3MncyBhcnJheSBjb250cmFjdCBpcyBjaGVja2VkIGV2ZW4gd2hlbiBhbm90aGVyIHNlbGVjdG9yIGlzIGRlbmllZC5cbiAqIFBheWxvYWQga2V5cyBhcmUgZGF0YSwgbm90IHNlbGVjdG9ycywgYW5kIGFyZSBkZWxpYmVyYXRlbHkgbm90IGluc3BlY3RlZC5cbiAqIEBpbnRlcm5hbCBTaGFyZWQgYnkgdGhlIG5lc3RlZCB3cml0ZXJzIGFuZCBTaGFyZWRNZW1vcnkncyBwcmUtY29weSBib3VuZGFyeS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzRGVuaWVkV3JpdGVQYXRoKFxuICBhZGRyZXNzOiByZWFkb25seSBzdHJpbmdbXSA9IFtdLFxuICBwYXRoOiByZWFkb25seSAoc3RyaW5nIHwgbnVtYmVyKVtdID0gW10sXG4gIGZpZWxkOiBzdHJpbmcgfCBudW1iZXIsXG4pOiBib29sZWFuIHtcbiAgY29uc3QgcHJlZml4ID0gYWRkcmVzc09mKGFkZHJlc3MpO1xuICByZXR1cm4gcHJlZml4LnNvbWUoaXNEZW5pZWRTZWdtZW50KSB8fCBwYXRoLnNvbWUoaXNEZW5pZWRTZWdtZW50KSB8fCBpc0RlbmllZFNlZ21lbnQoZmllbGQpO1xufVxuXG4vKipcbiAqIFRoZSBjb250YWluZXIgYXQgYGFkZHJlc3NgICsgYHBhdGhgIGluc2lkZSBgb2JqYCwgZWFjaCBtaXNzaW5nIG9uZSBjcmVhdGVkXG4gKiBvbiB0aGUgd2F5OiB0aGUgb25lIEFUIHRoZSBhZGRyZXNzIGZyb20gYGRlZmF1bHRWYWx1ZXNgIHdoZW4gZ2l2ZW4sIGV2ZXJ5XG4gKiBvdGhlciBvbmUgZW1wdHkuIFRoZSBvbmUgd2FsayBib3RoIG5lc3RlZCB3cml0ZXJzIHNoYXJlLlxuICovXG5mdW5jdGlvbiBjb250YWluZXJBdChcbiAgb2JqOiBOZXN0ZWRPYmplY3QsXG4gIGFkZHJlc3M6IHJlYWRvbmx5IHN0cmluZ1tdID0gW10sXG4gIHBhdGg6IHJlYWRvbmx5IChzdHJpbmcgfCBudW1iZXIpW10gPSBbXSxcbiAgZGVmYXVsdFZhbHVlcz86IHVua25vd24sXG4pOiBOZXN0ZWRPYmplY3Qge1xuICBjb25zdCBzZWdtZW50cyA9IHBhdGhVbmRlcihhZGRyZXNzT2YoYWRkcmVzcyksIHBhdGgpO1xuICBsZXQgY3VycmVudCA9IG9iajtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBzZWdtZW50cy5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IGtleSA9IHNlZ21lbnRzW2ldO1xuICAgIGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGN1cnJlbnQsIGtleSkpIHtcbiAgICAgIHNldE93blZhbHVlKGN1cnJlbnQsIGtleSwgaSA9PT0gYWRkcmVzcy5sZW5ndGggLSAxICYmIGRlZmF1bHRWYWx1ZXMgPyBkZWZhdWx0VmFsdWVzIDoge30pO1xuICAgIH1cbiAgICBjdXJyZW50ID0gY3VycmVudFtrZXldO1xuICB9XG4gIHJldHVybiBjdXJyZW50O1xufVxuXG4vKipcbiAqIFNldHMgYSB2YWx1ZSBhdCBhIG5lc3RlZCBwYXRoIHVuZGVyIGBhZGRyZXNzYCwgY3JlYXRpbmcgaW50ZXJtZWRpYXRlIG9iamVjdHMgYXMgbmVlZGVkLlxuICogQSBkZW5pZWQgYWRkcmVzcy9wYXRoL2ZpZWxkIGxlYXZlcyBgb2JqYCB1bmNoYW5nZWQsIGluY2x1ZGluZyBpdHMgcHJvdG90eXBlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0TmVzdGVkVmFsdWU8VD4oXG4gIG9iajogTmVzdGVkT2JqZWN0LFxuICBhZGRyZXNzOiByZWFkb25seSBzdHJpbmdbXSxcbiAgcGF0aDogc3RyaW5nW10sXG4gIGZpZWxkOiBzdHJpbmcsXG4gIHZhbHVlOiBULFxuICBkZWZhdWx0VmFsdWVzPzogdW5rbm93bixcbik6IE5lc3RlZE9iamVjdCB7XG4gIGlmIChpc0RlbmllZFdyaXRlUGF0aChhZGRyZXNzLCBwYXRoLCBmaWVsZCkpIHJldHVybiBvYmo7XG4gIHNldE93blZhbHVlKGNvbnRhaW5lckF0KG9iaiwgYWRkcmVzcywgcGF0aCwgZGVmYXVsdFZhbHVlcyksIGZpZWxkLCB2YWx1ZSk7XG4gIHJldHVybiBvYmo7XG59XG5cbi8qKlxuICogVXBkYXRlcyBhIHZhbHVlIGluIHRoZSBvYmplY3QgYXQgYSBuZXN0ZWQgcGF0aCB1bmRlciBgYWRkcmVzc2AuXG4gKiBBIGRlbmllZCBhZGRyZXNzL3BhdGgvZmllbGQgbGVhdmVzIGBvYmpgIHVuY2hhbmdlZCwgaW5jbHVkaW5nIGl0cyBwcm90b3R5cGUuXG4gKiAtIEFycmF5czogY29uY2F0ZW5hdGVcbiAqIC0gT2JqZWN0czogc2hhbGxvdyBtZXJnZSBhdCBlYWNoIGxldmVsXG4gKiAtIFByaW1pdGl2ZXM6IHJlcGxhY2VcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZU5lc3RlZFZhbHVlPFQ+KFxuICBvYmo6IGFueSxcbiAgYWRkcmVzczogcmVhZG9ubHkgc3RyaW5nW10sXG4gIHBhdGg6IChzdHJpbmcgfCBudW1iZXIpW10sXG4gIGZpZWxkOiBzdHJpbmcgfCBudW1iZXIsXG4gIHZhbHVlOiBULFxuICBkZWZhdWx0VmFsdWVzPzogdW5rbm93bixcbik6IGFueSB7XG4gIGlmIChpc0RlbmllZFdyaXRlUGF0aChhZGRyZXNzLCBwYXRoLCBmaWVsZCkpIHJldHVybiBvYmo7XG4gIHVwZGF0ZVZhbHVlKGNvbnRhaW5lckF0KG9iaiwgYWRkcmVzcywgcGF0aCwgZGVmYXVsdFZhbHVlcyksIGZpZWxkLCB2YWx1ZSk7XG4gIHJldHVybiBvYmo7XG59XG5cbi8qKlxuICogSW4tcGxhY2UgdmFsdWUgdXBkYXRlIHdpdGggbWVyZ2Ugc2VtYW50aWNzLlxuICogLSBBcnJheXMgKG5vbi1lbXB0eSk6IGNvbmNhdGVuYXRlIG9udG8gZXhpc3RpbmdcbiAqIC0gQXJyYXlzIChlbXB0eSk6ICAgICBkaXJlY3QgcmVwbGFjZSDigJQgd3JpdGluZyBgW11gIGNsZWFycyB0aGUgZmllbGRcbiAqIC0gT2JqZWN0cyAobm9uLWVtcHR5KTogc2hhbGxvdyBtZXJnZSAoc3ByZWFkKVxuICogLSBPYmplY3RzIChlbXB0eSk6ICAgIGRpcmVjdCByZXBsYWNlIOKAlCB3cml0aW5nIGB7fWAgY2xlYXJzIHRoZSBmaWVsZFxuICogLSBQcmltaXRpdmVzOiBkaXJlY3QgYXNzaWdubWVudFxuICpcbiAqIE5vdGUgb24gZW1wdHkgYXJyYXlzOiBib3RoIGB2YWx1ZSAmJiBBcnJheS5pc0FycmF5KHZhbHVlKWAgYW5kXG4gKiBgQXJyYXkuaXNBcnJheSh2YWx1ZSlgIGV2YWx1YXRlIHRoZSBzYW1lIGZvciBhcnJheXMg4oCUIGBbXWAgaXMgdHJ1dGh5IGluXG4gKiBKYXZhU2NyaXB0LCBzbyB0aGUgYCYmYCBndWFyZCB3YXMgbmV2ZXIgdGhlIGlzc3VlLiBUaGUgYWN0dWFsIGJ1ZyB3YXMgdGhlXG4gKiBjb25jYXQgcGF0aDogYFsuLi5jdXIsIC4uLltdXWAgc2lsZW50bHkgcmV0dXJuZWQgYGN1cmAgdW5jaGFuZ2VkIHdoZW4gYHZhbHVlYFxuICogd2FzIGBbXWAsIG1ha2luZyBgdXBkYXRlVmFsdWUob2JqLCAndGFncycsIFtdKWAgYSBuby1vcCBpbnN0ZWFkIG9mIGEgY2xlYXIuXG4gKiBUaGUgZml4IGlzIHRoZSBleHBsaWNpdCBgdmFsdWUubGVuZ3RoID09PSAwYCBlYXJseS1yZXR1cm4gYnJhbmNoLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdXBkYXRlVmFsdWUob2JqZWN0OiBhbnksIGtleTogc3RyaW5nIHwgbnVtYmVyLCB2YWx1ZTogYW55KTogdm9pZCB7XG4gIGlmIChpc0RlbmllZFNlZ21lbnQoa2V5KSkgcmV0dXJuO1xuICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICBpZiAodmFsdWUubGVuZ3RoID09PSAwKSB7XG4gICAgICBzZXRPd25WYWx1ZShvYmplY3QsIGtleSwgdmFsdWUpOyAvLyBjbGVhcjogW10gcmVwbGFjZXMgd2hhdGV2ZXIgd2FzIHRoZXJlXG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGN1ciA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIGtleSkgPyBvYmplY3Rba2V5XSA6IHVuZGVmaW5lZDtcbiAgICAgIHNldE93blZhbHVlKG9iamVjdCwga2V5LCBjdXIgPT09IHVuZGVmaW5lZCA/IHZhbHVlIDogWy4uLmN1ciwgLi4udmFsdWVdKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAodmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiBPYmplY3Qua2V5cyh2YWx1ZSkubGVuZ3RoKSB7XG4gICAgY29uc3QgY3VyID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwga2V5KSA/IG9iamVjdFtrZXldIDogdW5kZWZpbmVkO1xuICAgIHNldE93blZhbHVlKG9iamVjdCwga2V5LCBjdXIgPT09IHVuZGVmaW5lZCA/IHZhbHVlIDogeyAuLi5jdXIsIC4uLnZhbHVlIH0pO1xuICB9IGVsc2Uge1xuICAgIHNldE93blZhbHVlKG9iamVjdCwga2V5LCB2YWx1ZSk7XG4gIH1cbn1cblxuLyoqXG4gKiBHZXRzIGEgdmFsdWUgYXQgYSBuZXN0ZWQgcGF0aCB3aXRoIHByb3RvdHlwZS1wb2xsdXRpb24gcHJvdGVjdGlvbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldE5lc3RlZFZhbHVlKHJvb3Q6IGFueSwgcGF0aDogKHN0cmluZyB8IG51bWJlcilbXSwgZmllbGQ/OiBzdHJpbmcgfCBudW1iZXIpOiBhbnkge1xuICBjb25zdCBub2RlID0gcGF0aCAmJiBwYXRoLmxlbmd0aCA+IDAgPyBfZ2V0KHJvb3QsIHBhdGgpIDogcm9vdDtcbiAgaWYgKGZpZWxkID09PSB1bmRlZmluZWQgfHwgbm9kZSA9PT0gdW5kZWZpbmVkKSByZXR1cm4gbm9kZTtcbiAgaWYgKG5vZGUgIT09IG51bGwgJiYgdHlwZW9mIG5vZGUgPT09ICdvYmplY3QnICYmIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChub2RlLCBmaWVsZCkpIHtcbiAgICByZXR1cm4gbm9kZVtmaWVsZF07XG4gIH1cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cbiJdfQ==
@@ -42,6 +42,7 @@
42
42
  */
43
43
  Object.defineProperty(exports, "__esModule", { value: true });
44
44
  exports.serveRecord = exports.freezeRecord = exports.deepFreeze = void 0;
45
+ const ownData_js_1 = require("./ownData.js");
45
46
  const valueKinds_js_1 = require("./valueKinds.js");
46
47
  /**
47
48
  * Freezes `obj` and every object reachable through its own properties, and returns `obj`.
@@ -290,7 +291,7 @@ function copyOpenPaths(root) {
290
291
  const copy = copies.get(node);
291
292
  for (const name of Object.keys(node)) {
292
293
  const child = node[name];
293
- putOwn(copy, name, child !== null && typeof child === 'object' && (OPEN.has(child) || isUnsealable(child))
294
+ (0, ownData_js_1.putOwn)(copy, name, child !== null && typeof child === 'object' && (OPEN.has(child) || isUnsealable(child))
294
295
  ? copyOf(child, pending)
295
296
  : child);
296
297
  }
@@ -305,19 +306,6 @@ function copyOpenPaths(root) {
305
306
  Object.freeze(copy);
306
307
  return out;
307
308
  }
308
- /**
309
- * `target[name] = value`, as an OWN data property. A key the shell only inherits — an own `"__proto__"`
310
- * of the record (`JSON.parse` makes one) — would call the inherited setter and re-parent the copy; it is
311
- * defined as data instead, as `memory/merge.ts · mergeGuarded` keeps it.
312
- */
313
- function putOwn(target, name, value) {
314
- if (!Object.prototype.hasOwnProperty.call(target, name) && Reflect.has(target, name)) {
315
- Object.defineProperty(target, name, { value, enumerable: true, writable: true, configurable: true });
316
- }
317
- else {
318
- target[name] = value;
319
- }
320
- }
321
309
  /** A fresh copy of a value freezing cannot seal. One the clone refuses (hand-built) is served as it is. */
322
310
  function copyLeaf(value) {
323
311
  if ((0, valueKinds_js_1.kindOf)(value) === 'date')
@@ -329,4 +317,4 @@ function copyLeaf(value) {
329
317
  return value;
330
318
  }
331
319
  }
332
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnJlZXplLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9jYXB0dXJlL2ZyZWV6ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F3Q0c7OztBQUVILG1EQUFtRDtBQWNuRDs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFDSCxTQUFnQixVQUFVLENBQUksR0FBTSxFQUFFLFNBQW9CLFdBQVc7SUFDbkUsSUFBSSxHQUFHLEtBQUssSUFBSSxJQUFJLE9BQU8sR0FBRyxLQUFLLFFBQVE7UUFBRSxhQUFhLENBQUMsR0FBRyxFQUFFLE1BQU0sS0FBSyxTQUFTLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDN0YsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBSEQsZ0NBR0M7QUFFRDs7OztHQUlHO0FBQ0gsTUFBTSxJQUFJLEdBQUcsSUFBSSxPQUFPLEVBQW1CLENBQUM7QUFFNUM7Ozs7Ozs7Ozs7Ozs7R0FhRztBQUNILFNBQWdCLFlBQVksQ0FBbUIsTUFBUyxFQUFFLFNBQW9CLFdBQVc7SUFDdkYsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLElBQUksYUFBYSxDQUFDLE1BQU0sRUFBRSxNQUFNLEtBQUssU0FBUyxFQUFFLElBQUksQ0FBQztRQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ3BHLE9BQU8sTUFBTSxDQUFDO0FBQ2hCLENBQUM7QUFIRCxvQ0FHQztBQUVEOzs7OztHQUtHO0FBQ0gsU0FBZ0IsV0FBVyxDQUFJLE1BQVM7SUFDdEMsSUFBSSxNQUFNLEtBQUssSUFBSSxJQUFJLE9BQU8sTUFBTSxLQUFLLFFBQVE7UUFBRSxPQUFPLE1BQU0sQ0FBQztJQUNqRSxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ2hDLElBQUksTUFB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QUFDSCxDQUFDO0FBRUQsMkdBQTJHO0FBQzNHLFNBQVMsUUFBUSxDQUFDLEtBQWE7SUFDN0IsSUFBSSxJQUFBLHNCQUFNLEVBQUMsS0FBSyxDQUFDLEtBQUssTUFBTTtRQUFFLE9BQU8sSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDbEYsSUFBSSxDQUFDO1FBQ0gsT0FBTyxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQUFDLE1BQU0sQ0FBQztRQUNQLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIGZyZWV6ZS50cyDigJQgdGhlIE9ORSBkZWVwLWZyZWV6ZSB3YWxrIChtb3ZlZCBoZXJlIGZyb20gYHNjb3BlL3Byb3RlY3Rpb24vcmVhZG9ubHlJbnB1dC50c2AgaW4gRjMpLFxuICogYW5kIHRoZSBzZXJ2ZS10aW1lIGxhdyBmb3IgdGhlIGNvbW1pdCBsb2cgKDkuNDQuMikuXG4gKlxuICogV0hZIEhFUkUuIFNhdmVkIHRyZWVzIGZyZWV6ZSB0aHJvdWdoIHRoaXMgd2FsazogdGhlIGZvbGQgYmFzZSBzZXJ2ZWQgYXNcbiAqIGBpbml0aWFsU3RhdGVgIChgRXhlY3V0aW9uUnVudGltZSDCtyBnZXRGb2xkQmFzZWApLCB0aGVcbiAqIGRldi1tb2RlIHNuYXBzaG90IChgcnVubmVyL3NuYXBzaG90LnRzIMK3IHNlcnZlZFNuYXBzaG90YCksIGV2ZXJ5IHN0YXRlIGBzdGF0ZUF0YCBoYW5kcyBvdXRcbiAqIChgdGltZS10cmF2ZWwvc3RhdGVBdC50c2ApIGFuZCwgc2luY2UgRjMsIGV2ZXJ5IGNvbW1pdCBidW5kbGUgKGBFdmVudExvZyDCtyByZWNvcmRgKS4gYG1lbW9yeS9gIG11c3RcbiAqIG5vdCBpbXBvcnQgYHNjb3BlL2AgKHRoYXQgZWRnZSBjbG9zZWQgdGhlIG1lbW9yeSDih4Qgc2NvcGUg4oeEIHJlY29yZGVyIG1vZHVsZSBjeWNsZSBGMCByZW1vdmVkKSwgc28gdGhlXG4gKiB3YWxrIGxpdmVzIGluIHRoaXMgbGVhZiBmb2xkZXIsIHdoaWNoIGltcG9ydHMgbm90aGluZyBvdXRzaWRlIGl0c2VsZi4gQXJncyB1c2UgYW4gb3duZXJzaGlwIHNuYXBzaG90XG4gKiBpbnN0ZWFkIChgc2NvcGUvcHJvdGVjdGlvbi9yZWFkb25seUlucHV0LnRzIMK3IGNyZWF0ZUZyb3plbkFyZ3NgKTogbmV2ZXIgZnJlZXplIGJvcnJvd2VkIGNhbGxlciB2YWx1ZXMuXG4gKlxuICogRlJFRVpFIFdIQVQgQ0FOIEJFIEZST1pFTiwgQ09QWSBXSEFUIENBTidUICg5LjQ0LjIpLiBgT2JqZWN0LmZyZWV6ZWAgY2Fubm90IHNlYWwgYSBEYXRlJ3MgdGltZSwgYVxuICogTWFwJ3Mgb3IgU2V0J3MgZW50cmllcywgYSBidWZmZXIncyBieXRlcywgYSBSZWdFeHAgKGBjb21waWxlKClgIHJld3JpdGVzIGEgZnJvemVuIG9uZSkgb3IgYW4gRXJyb3JcbiAqIChWOCdzIG93biBgc3RhY2tgIGFjY2Vzc29yIHdyaXRlcyB0aHJvdWdoIGEgZnJvemVuIG9uZSkuIEEgZnJlc2ggdHJlZSBoYW5kZWQgdG8gb25lIGNhbGxlciAoYSBgc3RhdGVBdGBcbiAqIHN0YXRlLCB0aGUgZGV2LW1vZGUgc25hcHNob3QpIGlzIHRoYXQgY2FsbGVyJ3Mgb3duLCBzbyBmcmVlemluZyBpdCBpcyBhIGd1YXJkIGFuZCBub3RoaW5nIG1vcmUuIFRoZVxuICogQ09NTUlUIExPRyDigJQgZWFjaCBidW5kbGUsIGFuZCB0aGUgZm9sZCBiYXNlIOKAlCBpcyBzZXJ2ZWQgdG8gZXZlcnkgcmVhZGVyLCBzbyB7QGxpbmsgZnJlZXplUmVjb3JkfVxuICogcmVtZW1iZXJzIHRoYXQgYSByZWNvcmQgaG9sZHMgc3VjaCBhIHZhbHVlLCBpdHMgZmlyc3Qgc2VydmUgbWFwcyB0aGUgY29udGFpbmVycyBvbiB0aGUgd2F5IHRvIGVhY2hcbiAqIG9uZSAoaXRzIG9wZW4gUEFUSFMpLCBhbmQge0BsaW5rIHNlcnZlUmVjb3JkfSBoYW5kcyBhIHJlYWRlciBhIGNvcHkgb2YgdGhvc2UgcGF0aHMgb25seTogYSBmcmVzaCBjb3B5XG4gKiBvZiBlYWNoIHN1Y2ggdmFsdWUsIGZyZXNoIGZyb3plbiBjb250YWluZXJzIG9uIHRoZSB3YXkgdG8gaXQsIGFuZCBldmVyeSBvdGhlciBwYXJ0IHNoYXJlZCwgZnJvemVuLCBhc1xuICogaXQgaXMuIFVudGlsIDkuNDQuMiBgc25hcHNob3QuY29tbWl0TG9nW2ldLm92ZXJ3cml0ZS53aGVuLnNldFRpbWUoMClgIHJld3JvdGUgZXZlcnkgbGF0ZXIgc25hcHNob3QsXG4gKiBgc3RhdGVBdGAsIGBjb21taXRWYWx1ZUF0YCwgc2xpY2UgYW5kIGN1cnNvciBhbnN3ZXIuXG4gKlxuICogRXZlcnkgd2FsayBoZXJlIGlzIElURVJBVElWRSAoYW4gZXhwbGljaXQgc3RhY2spOiBhIHJlY29yZCdzIGRlcHRoIGlzIG5vdCBib3VuZGVkIGJ5IHRoZSBjYWxsIHN0YWNrLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBpbXBvcnQgeyBkZWVwRnJlZXplLCBmcmVlemVSZWNvcmQsIHNlcnZlUmVjb3JkIH0gZnJvbSAnLi9mcmVlemUuanMnO1xuICpcbiAqIGNvbnN0IGFyZ3MgPSBkZWVwRnJlZXplKHsgb3JkZXI6IHsgbGluZXM6IFt7IHNrdTogJ0EnIH1dIH0sIGJ5dGVzOiBuZXcgVWludDhBcnJheShbMV0pIH0pO1xuICogT2JqZWN0LmlzRnJvemVuKGFyZ3Mub3JkZXIubGluZXNbMF0pOyAvLyB0cnVlXG4gKiBPYmplY3QuaXNGcm96ZW4oYXJncy5ieXRlcyk7IC8vIGZhbHNlIOKAlCBhIHR5cGVkIGFycmF5IGNhbm5vdCBiZSBmcm96ZW47IGl0IGlzIHNraXBwZWRcbiAqXG4gKiBjb25zdCByZWNvcmQgPSBmcmVlemVSZWNvcmQoeyB3aGVuOiBuZXcgRGF0ZSgwKSwgdGFnczogWydhJ10gfSk7XG4gKiBjb25zdCBzZXJ2ZWQgPSBzZXJ2ZVJlY29yZChyZWNvcmQpO1xuICogc2VydmVkLndoZW4uc2V0VGltZSg1KTsgLy8gY2hhbmdlcyB0aGUgcmVhZGVyJ3MgY29weVxuICogc2VydmVSZWNvcmQocmVjb3JkKS53aGVuLmdldFRpbWUoKTsgLy8gMCDigJQgZXZlcnkgc2VydmUgaXMgdGhlIHJlY29yZCBhcyByZWNvcmRlZFxuICogc2VydmVkLnRhZ3MgPT09IHJlY29yZC50YWdzOyAvLyB0cnVlIOKAlCB0aGUgc2VhbGVkIHBhcnQgaXMgc2hhcmVkLCBub3QgY29waWVkXG4gKiBzZXJ2ZVJlY29yZChmcmVlemVSZWNvcmQoeyBuOiAxIH0pKTsgLy8gYSByZWNvcmQgZnJlZXppbmcgc2VhbGVkIHdob2xlOiBzZXJ2ZWQgYXMgaXRzZWxmXG4gKiBgYGBcbiAqL1xuXG5pbXBvcnQgeyBraW5kT2YsIFNFQUxBQkxFIH0gZnJvbSAnLi92YWx1ZUtpbmRzLmpzJztcblxuLyoqXG4gKiBIb3cge0BsaW5rIGRlZXBGcmVlemV9IHdhbGtzIGFuIEFSUkFZLlxuICpcbiAqIC0gYCdldmVyeS1rZXknYCAodGhlIGRlZmF1bHQpIOKAlCBldmVyeSBvd24gcHJvcGVydHksIGFzIGZvciBhbnkgb3RoZXIgb2JqZWN0OiB0aGUgaW5kZXggZWxlbWVudHNcbiAqICAgQU5EIGFueSBleHBhbmRvIChgYXJyLm5vdGUgPSB7IOKApiB9YCkuIFRoZSBkZXYtbW9kZSBzbmFwc2hvdCByZWxpZXMgb24gdGhpcyBjb250cmFjdC5cbiAqIC0gYCdpbmRpY2VzJ2Ag4oCUIHRoZSBpbmRleCBlbGVtZW50cyBvbmx5LCBzbyBubyBrZXkgc3RyaW5nIGlzIGFsbG9jYXRlZCBwZXIgZWxlbWVudDsgdGhpcyBpcyB3aGF0XG4gKiAgIGtlZXBzIGZyZWV6aW5nIGEgMTAsMDAwLWVsZW1lbnQgY29tbWl0IGluc2lkZSBpdHMgYnVkZ2V0IChgYmVuY2gvZWxlbWVudC13cml0ZXMudHNgKS4gQW4gb2JqZWN0XG4gKiAgIGh1bmcgb24gYW4gYXJyYXkgRVhQQU5ETyBpcyB0aGVuIGxlZnQgdW5mcm96ZW4sIGFuZCB1bnNlZW4gYnkge0BsaW5rIHNlcnZlUmVjb3JkfSDigJQgdGhlIGNvbW1pdFxuICogICBsb2cncyBuYW1lZCBob2xlIChgRXZlbnRMb2cgwrcgcmVjb3JkYDsgYW4gYXJyYXkgZXhwYW5kbyBpcyBvdXQgb2YgY29udHJhY3QgZm9yIHN0YXRlKS5cbiAqL1xuZXhwb3J0IHR5cGUgQXJyYXlXYWxrID0gJ2V2ZXJ5LWtleScgfCAnaW5kaWNlcyc7XG5cbi8qKlxuICogRnJlZXplcyBgb2JqYCBhbmQgZXZlcnkgb2JqZWN0IHJlYWNoYWJsZSB0aHJvdWdoIGl0cyBvd24gcHJvcGVydGllcywgYW5kIHJldHVybnMgYG9iamAuXG4gKlxuICogLSBBbiBvYmplY3QgdGhhdCBpcyBBTFJFQURZIGZyb3plbiBpcyBsZWZ0IGFzIGl0IGlzLCBhbmQgbm90IGRlc2NlbmRlZCDigJQgOS4zMi4wJ3MgY29udHJhY3QsIGtlcHQ6XG4gKiAgIGFyZ3MgbWF5IGhvbGQgYSBjYWxsZXIncyBmcm96ZW4gb2JqZWN0IHdpdGggbGl2ZSBwYXJ0cyBpbnNpZGUgKGEgY2xhc3MgaW5zdGFuY2UgYSBzdGFnZSBjYWxscyksXG4gKiAgIGFuZCBmcmVlemluZyBwYXN0IGl0IHdvdWxkIGJyZWFrIHRoZW0uIEl0IGlzIGFsc28gd2hhdCBlbmRzIGEgY3ljbGUuIFRoZSBjb21taXQgbG9nIG5ldmVyIG1lZXRzXG4gKiAgIG9uZTogaXRzIHBheWxvYWRzIGFyZSBmcmVzaCBgc3RydWN0dXJlZENsb25lYHMuXG4gKiAtIEFycmF5QnVmZmVyIHZpZXdzICh0eXBlZCBhcnJheXMsIGBEYXRhVmlld2ApIGFyZSBza2lwcGVkOiBgT2JqZWN0LmZyZWV6ZWAgdGhyb3dzIG9uIGEgbm9uLWVtcHR5XG4gKiAgIHR5cGVkIGFycmF5LCBzbyBhIGBVaW50OEFycmF5YCBpbiBzdGF0ZSwgYXJncyBvciB0aGUgZm9sZCBiYXNlIHVzZWQgdG8gZmFpbCB0aGUgcnVuIG9yIHRoZVxuICogICBzbmFwc2hvdCBoZXJlLlxuICogLSBXaGF0IGBPYmplY3QuZnJlZXplYCBjYW5ub3QgcmVhY2ggc3RheXMgbXV0YWJsZSDigJQgTWFwIGFuZCBTZXQgY29udGVudHMsIGEgRGF0ZSdzIHRpbWUsIHRoZVxuICogICBieXRlcyBiZWhpbmQgYSBidWZmZXIuIEEgZnJvemVuIFJlZ0V4cCdzIGBsYXN0SW5kZXhgIGlzIHJlYWQtb25seSwgc28gYSBgL2dgIG9yIGAveWAgcmVnZXhcbiAqICAgdGFrZW4gZnJvbSBhIGZyb3plbiB0cmVlIHRocm93cyB3aGVuIGBleGVjYCBvciBgcmVwbGFjZWAgYWR2YW5jZSBpdC4gVGhlIGNvbW1pdCBsb2cgZ29lcyB0aHJvdWdoXG4gKiAgIHtAbGluayBmcmVlemVSZWNvcmR9IGFuZCB7QGxpbmsgc2VydmVSZWNvcmR9IGluc3RlYWQuXG4gKiAtIEZ1bmN0aW9ucyBhcmUgbm90IGRlc2NlbmRlZCAodGhleSBhcmUgbm90IHZhbHVlcyB0aGUgZW5naW5lIHN0b3JlcykuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWVwRnJlZXplPFQ+KG9iajogVCwgYXJyYXlzOiBBcnJheVdhbGsgPSAnZXZlcnkta2V5Jyk6IFQge1xuICBpZiAob2JqICE9PSBudWxsICYmIHR5cGVvZiBvYmogPT09ICdvYmplY3QnKSB3YWxrQW5kRnJlZXplKG9iaiwgYXJyYXlzID09PSAnaW5kaWNlcycsIGZhbHNlKTtcbiAgcmV0dXJuIG9iajtcbn1cblxuLyoqXG4gKiBDb250YWluZXJzIG9mIGEgcmVjb3JkIHRoYXQgaG9sZCDigJQgb24gc29tZSBwYXRoIGJlbG93IHRoZW0g4oCUIGEgdmFsdWUgZnJlZXppbmcgY2Fubm90IHNlYWw6IGB0cnVlYCBvbmNlXG4gKiBtYXBwZWQgKHRoZSBjb250YWluZXIgaXMgb24gYW4gb3BlbiBwYXRoKSwgYGZhbHNlYCBmb3IgYSByZWNvcmQge0BsaW5rIGZyZWV6ZVJlY29yZH0gZm91bmQgb3BlbiB3aG9zZVxuICogcGF0aHMgbm8gc2VydmUgaGFzIG1hcHBlZCB5ZXQuIEEgY29udGFpbmVyIGFic2VudCBoZXJlIGlzIHNlYWxlZCB3aG9sZS5cbiAqL1xuY29uc3QgT1BFTiA9IG5ldyBXZWFrTWFwPG9iamVjdCwgYm9vbGVhbj4oKTtcblxuLyoqXG4gKiB7QGxpbmsgZGVlcEZyZWV6ZX0gZm9yIGEgcmVjb3JkIG1hbnkgcmVhZGVycyBhcmUgU0VSVkVEIChhIGNvbW1pdCBidW5kbGUsIHRoZSBmb2xkIGJhc2UpLCBhbmQgdHdvIG1vcmVcbiAqIHRoaW5ncyBvbiB0aGUgc2FtZSB3YWxrOlxuICpcbiAqICAgLSBpdCByZW1lbWJlcnMgVEhBVCB0aGUgcmVjb3JkIGhvbGRzIGEgdmFsdWUgZnJlZXppbmcgY2Fubm90IHNlYWwg4oCUIG9uZSBmbGFnOyB0aGUgcmVjb3JkJ3MgZmlyc3RcbiAqICAgICBzZXJ2ZSBtYXBzIFdIRVJFICh0aGUgY29udGFpbmVycyBvbiB0aGUgd2F5IHRvIGVhY2ggc3VjaCB2YWx1ZSwgaXRzIG9wZW4gcGF0aHMpLCBzbyB0aGUgcnVuIHBheXNcbiAqICAgICBub3RoaW5nIG1vcmUgYW5kIHtAbGluayBzZXJ2ZVJlY29yZH0gY29waWVzIHRob3NlIHBhdGhzIGFuZCBub3RoaW5nIGVsc2U7XG4gKiAgIC0gYSB0eXBlZCBhcnJheSBvciBgRGF0YVZpZXdgIHRoYXQgdmlld3MgYSBTTElDRSBvZiBhIGJpZ2dlciBidWZmZXIgKGEgTm9kZSBgQnVmZmVyYCB2aWV3cyBpdHNcbiAqICAgICBzaGFyZWQgcG9vbCkgaXMgcmVwbGFjZWQsIGluIHRoZSByZWNvcmQsIGJ5IGEgY29weSBvZiB0aGUgYnl0ZXMgaXQgdmlld3Mg4oCUIHRoZSByZWNvcmQga2VlcHMgdGhlXG4gKiAgICAgdmlldydzIGJ5dGVzLCBuZXZlciB0aGUgcmVzdCBvZiB0aGUgYnVmZmVyIChhIHJlc2l6YWJsZSBvciBzaGFyZWQgYnVmZmVyIGlzIGtlcHQgYXMgaXQgaXMpLlxuICpcbiAqIEEgcGFydCBmcm96ZW4gYmVmb3JlIGlzIG5vdCBmcm96ZW4gcGFzdCAoZGVlcEZyZWV6ZSdzIGNvbnRyYWN0KSBidXQgaXMgbG9va2VkIHRocm91Z2gsIHNvIGEgdmFsdWVcbiAqIGZyZWV6aW5nIGNhbm5vdCBzZWFsIGluc2lkZSBpdCBzdGlsbCBvcGVucyB0aGUgcmVjb3JkLiBSZXR1cm5zIGByZWNvcmRgLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZnJlZXplUmVjb3JkPFQgZXh0ZW5kcyBvYmplY3Q+KHJlY29yZDogVCwgYXJyYXlzOiBBcnJheVdhbGsgPSAnZXZlcnkta2V5Jyk6IFQge1xuICBpZiAoIU9QRU4uaGFzKHJlY29yZCkgJiYgd2Fsa0FuZEZyZWV6ZShyZWNvcmQsIGFycmF5cyA9PT0gJ2luZGljZXMnLCB0cnVlKSkgT1BFTi5zZXQocmVjb3JkLCBmYWxzZSk7XG4gIHJldHVybiByZWNvcmQ7XG59XG5cbi8qKlxuICogVGhlIHJlY29yZCBhcyBhIHJlYWRlciBtYXkgaG9sZCBpdCDigJQgVEhFIHNlcnZlLXRpbWUgbGF3OiBhIHJlY29yZCBmcmVlemluZyBzZWFsZWQgd2hvbGUgaXMgc2VydmVkIGFzXG4gKiBpdHNlbGYgKHNoYXJlZCwgbm8gY29zdCk7IGFueSBvdGhlciBhcyBhIGNvcHkgb2YgaXRzIG9wZW4gcGF0aHMgKHtAbGluayBmcmVlemVSZWNvcmR9KTogZnJlc2ggZnJvemVuXG4gKiBjb250YWluZXJzIGRvd24gdG8gZWFjaCB2YWx1ZSBmcmVlemluZyBjYW5ub3Qgc2VhbCwgYSBmcmVzaCBjb3B5IG9mIHRoYXQgdmFsdWUsIGFuZCBldmVyeSBvdGhlciBwYXJ0XG4gKiBzaGFyZWQsIGZyb3plbiwgYXMgaXQgaXMuIEEgY29weSBpcyBzZXJ2ZWQgdGhlIHNhbWUgd2F5IGFnYWluLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc2VydmVSZWNvcmQ8VD4ocmVjb3JkOiBUKTogVCB7XG4gIGlmIChyZWNvcmQgPT09IG51bGwgfHwgdHlwZW9mIHJlY29yZCAhPT0gJ29iamVjdCcpIHJldHVybiByZWNvcmQ7XG4gIGNvbnN0IG1hcHBlZCA9IE9QRU4uZ2V0KHJlY29yZCk7XG4gIGlmIChtYXBwZWQgPT09IHVuZGVmaW5lZCkgcmV0dXJuIHJlY29yZDtcbiAgaWYgKCFtYXBwZWQpIG1hcE9wZW5QYXRocyhyZWNvcmQpO1xuICByZXR1cm4gT1BFTi5nZXQocmVjb3JkKSA9PT0gdHJ1ZSA/IChjb3B5T3BlblBhdGhzKHJlY29yZCkgYXMgVCkgOiByZWNvcmQ7XG59XG5cbi8qKiBBIHZhbHVlIGZyZWV6aW5nIGNhbm5vdCBzZWFsIOKAlCBhIHZpZXcsIG9yIGEga2luZCBgU0VBTEFCTEVgIHNheXMgbm8gdG8gKGEgRGF0ZSwgYSBNYXAsIGFuIEVycm9yIOKApikuICovXG5mdW5jdGlvbiBpc1Vuc2VhbGFibGUodmFsdWU6IG9iamVjdCk6IGJvb2xlYW4ge1xuICByZXR1cm4gQXJyYXlCdWZmZXIuaXNWaWV3KHZhbHVlKSB8fCAhU0VBTEFCTEVba2luZE9mKHZhbHVlKV07XG59XG5cbi8qKlxuICogRnJlZXplIGByb290YCBhbmQgZXZlcnkgY29udGFpbmVyIHVuZGVyIGl0LCBpdGVyYXRpdmVseTsgYHJlY29yZGAgYWRkcyB0aGUgbG9vay10aHJvdWdoIG9mIHBhcnRzXG4gKiBmcm96ZW4gYmVmb3JlIGFuZCB0aGUgY29tcGFjdGlvbiBvZiB2aWV3cyBvdmVyIGEgc2xpY2UuIGB0cnVlYCB3aGVuIHNvbWV0aGluZyB1bmRlciBgcm9vdGAgKG9yIGByb290YFxuICogaXRzZWxmKSBjYW5ub3QgYmUgc2VhbGVkLlxuICovXG5mdW5jdGlvbiB3YWxrQW5kRnJlZXplKHJvb3Q6IG9iamVjdCwgaW5kaWNlczogYm9vbGVhbiwgcmVjb3JkOiBib29sZWFuKTogYm9vbGVhbiB7XG4gIGxldCBvcGVuID0gZmFsc2U7XG4gIGxldCBsb29rZWRUaHJvdWdoOiBTZXQ8b2JqZWN0PiB8IHVuZGVmaW5lZDtcbiAgY29uc3Qgc3RhY2s6IG9iamVjdFtdID0gW3Jvb3RdO1xuICB3aGlsZSAoc3RhY2subGVuZ3RoID4gMCkge1xuICAgIGNvbnN0IG5vZGUgPSBzdGFjay5wb3AoKSE7XG4gICAgaWYgKEFycmF5QnVmZmVyLmlzVmlldyhub2RlKSkge1xuICAgICAgb3BlbiA9IHRydWU7IC8vIGl0cyBieXRlcyDigJQgYW5kIGEgbm9uLWVtcHR5IG9uZSBjYW5ub3QgYmUgZnJvemVuIGF0IGFsbFxuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGNvbnN0IGZyb3plbkJlZm9yZSA9IE9iamVjdC5pc0Zyb3plbihub2RlKTtcbiAgICBpZiAoZnJvemVuQmVmb3JlKSB7XG4gICAgICBpZiAoIXJlY29yZCB8fCBPUEVOLmhhcyhub2RlKSkge1xuICAgICAgICBvcGVuIHx8PSByZWNvcmQ7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaWYgKChsb29rZWRUaHJvdWdoID8/PSBuZXcgU2V0KCkpLmhhcyhub2RlKSkgY29udGludWU7XG4gICAgICBsb29rZWRUaHJvdWdoLmFkZChub2RlKTsgLy8gYSBwYXJ0IGZyb3plbiBiZWZvcmU6IGxvb2tlZCB0aHJvdWdoLCBuZXZlciBmcm96ZW4gcGFzdFxuICAgIH1cbiAgICBpZiAocmVjb3JkICYmICFvcGVuICYmICFTRUFMQUJMRVtraW5kT2Yobm9kZSldKSBvcGVuID0gdHJ1ZTtcbiAgICAvLyBDaGlsZHJlbiBmaXJzdCwgd2hpbGUgYG5vZGVgIGlzIHN0aWxsIG9wZW4gdG8gdGhlIGNvbXBhY3Rpb24gYmVsb3c7IHRoZW4gdGhlIGZyZWV6ZS5cbiAgICBjb25zdCBjb21wYWN0aW5nID0gcmVjb3JkICYmICFmcm96ZW5CZWZvcmU7XG4gICAgaWYgKGluZGljZXMgJiYgQXJyYXkuaXNBcnJheShub2RlKSkge1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBub2RlLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGNoaWxkOiB1bmtub3duID0gbm9kZVtpXTtcbiAgICAgICAgaWYgKGNoaWxkID09PSBudWxsIHx8IHR5cGVvZiBjaGlsZCAhPT0gJ29iamVjdCcpIGNvbnRpbnVlO1xuICAgICAgICBzdGFjay5wdXNoKGNvbXBhY3RpbmcgJiYgQXJyYXlCdWZmZXIuaXNWaWV3KGNoaWxkKSA/IGNvbXBhY3Qobm9kZSwgaSwgY2hpbGQpIDogY2hpbGQpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBuYW1lcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKG5vZGUpO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBuYW1lcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBjaGlsZCA9IChub2RlIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KVtuYW1lc1tpXV07XG4gICAgICAgIGlmIChjaGlsZCA9PT0gbnVsbCB8fCB0eXBlb2YgY2hpbGQgIT09ICdvYmplY3QnKSBjb250aW51ZTtcbiAgICAgICAgc3RhY2sucHVzaChjb21wYWN0aW5nICYmIEFycmF5QnVmZmVyLmlzVmlldyhjaGlsZCkgPyBjb21wYWN0KG5vZGUsIG5hbWVzW2ldLCBjaGlsZCkgOiBjaGlsZCk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmICghZnJvemVuQmVmb3JlKSBPYmplY3QuZnJlZXplKG5vZGUpO1xuICB9XG4gIHJldHVybiBvcGVuO1xufVxuXG4vKipcbiAqIEEgdmlldyBvdmVyIGEgU0xJQ0Ugb2YgYSBiaWdnZXIgYnVmZmVyLCByZXBsYWNlZCBpbiBgY29udGFpbmVyYCBieSBhIGNvcHkgb2YgdGhlIGJ5dGVzIGl0IHZpZXdzXG4gKiAodGhlIHR5cGUgaXQgaXMg4oCUIGEgTm9kZSBgQnVmZmVyYCBjb21lcyBvdXQgYSBgVWludDhBcnJheWAsIGFzIGEgY2xvbmUgb2YgaXQgZG9lcykuIEFueXRoaW5nIGVsc2UgaXNcbiAqIHJldHVybmVkIGFzIGl0IGlzLiBBIHJlc2l6YWJsZSBvciBzaGFyZWQgYnVmZmVyIGlzIGtlcHQ6IGEgY29weSB3b3VsZCBjaGFuZ2Ugd2hhdCBpdCBpcy5cbiAqL1xuZnVuY3Rpb24gY29tcGFjdChjb250YWluZXI6IG9iamVjdCwga2V5OiBzdHJpbmcgfCBudW1iZXIsIGNoaWxkOiBBcnJheUJ1ZmZlclZpZXcpOiBvYmplY3Qge1xuICBjb25zdCBidWZmZXIgPSBjaGlsZC5idWZmZXIgYXMgQXJyYXlCdWZmZXIgJiB7IHJlc2l6YWJsZT86IGJvb2xlYW4gfTtcbiAgaWYgKGNoaWxkLmJ5dGVPZmZzZXQgPT09IDAgJiYgY2hpbGQuYnl0ZUxlbmd0aCA9PT0gYnVmZmVyLmJ5dGVMZW5ndGgpIHJldHVybiBjaGlsZDtcbiAgaWYgKGJ1ZmZlci5yZXNpemFibGUgPT09IHRydWUgfHwgIShidWZmZXIgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikpIHJldHVybiBjaGlsZDtcbiAgY29uc3QgYnl0ZXMgPSBidWZmZXIuc2xpY2UoY2hpbGQuYnl0ZU9mZnNldCwgY2hpbGQuYnl0ZU9mZnNldCArIGNoaWxkLmJ5dGVMZW5ndGgpO1xuICBjb25zdCB0YWcgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoY2hpbGQpLnNsaWNlKDgsIC0xKTtcbiAgY29uc3QgQ3RvciA9IChnbG9iYWxUaGlzIGFzIHVua25vd24gYXMgUmVjb3JkPHN0cmluZywgbmV3IChidWZmZXI6IEFycmF5QnVmZmVyKSA9PiBBcnJheUJ1ZmZlclZpZXc+KVt0YWddO1xuICBpZiAodHlwZW9mIEN0b3IgIT09ICdmdW5jdGlvbicpIHJldHVybiBjaGlsZDtcbiAgY29uc3QgY29weSA9IG5ldyBDdG9yKGJ5dGVzKTtcbiAgdHJ5IHtcbiAgICAoY29udGFpbmVyIGFzIFJlY29yZDxzdHJpbmcgfCBudW1iZXIsIHVua25vd24+KVtrZXldID0gY29weTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIGNoaWxkOyAvLyBhIHByb3BlcnR5IHRoZSByZWNvcmQgZG9lcyBub3QgbGV0IGJlIHJlcGxhY2VkIChhIGhhbmQtYnVpbHQgYnVuZGxlKVxuICB9XG4gIHJldHVybiBjb3B5O1xufVxuXG4vKipcbiAqIE1hcCB0aGUgb3BlbiBwYXRocyBvZiBgcm9vdGAg4oCUIG1hcmsgZXZlcnkgY29udGFpbmVyIHRoYXQgcmVhY2hlcyBhIHZhbHVlIGZyZWV6aW5nIGNhbm5vdCBzZWFsLCBzbyBhXG4gKiBzZXJ2ZSBjb3BpZXMgZXhhY3RseSB0aG9zZSAoREFHcyBhbmQgY3ljbGVzIGluY2x1ZGVkOiB0aGUgbWFya3MgcnVuIFVQIHRoZSByZXZlcnNlIGVkZ2VzIGZyb20gZWFjaFxuICogc3VjaCB2YWx1ZSkuIFJ1bnMgb25jZSBwZXIgb3BlbiByZWNvcmQsIGF0IGl0cyBmaXJzdCBzZXJ2ZS4gQSBub2RlJ3MgZmlyc3QgaG9sZGVyIGlzIGtlcHQgaW4gb25lIG1hcDtcbiAqIGFueSBvdGhlciBob2xkZXIgKGEgc2hhcmVkIHBhcnQsIGEgY3ljbGUpIGluIGEgc2Vjb25kLCBtYWRlIG9ubHkgd2hlbiB0aGVyZSBpcyBvbmUuXG4gKi9cbmZ1bmN0aW9uIG1hcE9wZW5QYXRocyhyb290OiBvYmplY3QpOiB2b2lkIHtcbiAgY29uc3QgaG9sZGVyID0gbmV3IE1hcDxvYmplY3QsIG9iamVjdD4oKTtcbiAgbGV0IG1vcmVIb2xkZXJzOiBNYXA8b2JqZWN0LCBvYmplY3RbXT4gfCB1bmRlZmluZWQ7XG4gIGNvbnN0IGxlYXZlczogb2JqZWN0W10gPSBbXTtcbiAgY29uc3Qgc3RhY2s6IG9iamVjdFtdID0gW3Jvb3RdO1xuICB3aGlsZSAoc3RhY2subGVuZ3RoID4gMCkge1xuICAgIGNvbnN0IG5vZGUgPSBzdGFjay5wb3AoKSE7XG4gICAgaWYgKGlzVW5zZWFsYWJsZShub2RlKSkge1xuICAgICAgbGVhdmVzLnB1c2gobm9kZSk7IC8vIGEgbGVhZjogaXRzIGNvbnRlbnRzIGFyZSBjb3BpZWQgd2l0aCBpdFxuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGNvbnN0IG5hbWVzID0gT2JqZWN0LmtleXMobm9kZSk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBuYW1lcy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgY2hpbGQgPSAobm9kZSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPilbbmFtZXNbaV1dO1xuICAgICAgaWYgKGNoaWxkID09PSBudWxsIHx8IHR5cGVvZiBjaGlsZCAhPT0gJ29iamVjdCcpIGNvbnRpbnVlO1xuICAgICAgaWYgKGNoaWxkICE9PSByb290ICYmICFob2xkZXIuaGFzKGNoaWxkKSkge1xuICAgICAgICBob2xkZXIuc2V0KGNoaWxkLCBub2RlKTtcbiAgICAgICAgc3RhY2sucHVzaChjaGlsZCk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgY29uc3QgbW9yZSA9IChtb3JlSG9sZGVycyA/Pz0gbmV3IE1hcCgpKS5nZXQoY2hpbGQpO1xuICAgICAgaWYgKG1vcmUgPT09IHVuZGVmaW5lZCkgbW9yZUhvbGRlcnMuc2V0KGNoaWxkLCBbbm9kZV0pO1xuICAgICAgZWxzZSBtb3JlLnB1c2gobm9kZSk7XG4gICAgfVxuICB9XG4gIC8vIE1hcmtlZCBpbiBUSElTIG1hcCwgbm90IGJ5IGFuIGVhcmxpZXIgb25lOiBhIHBhcnQgYW5vdGhlciByZWNvcmQgYWxyZWFkeSBtYXBwZWQgc3RpbGwgb3BlbnNcbiAgLy8gZXZlcnkgY29udGFpbmVyIG9mIHRoaXMgcmVjb3JkIG9uIHRoZSB3YXkgdG8gaXQuXG4gIGNvbnN0IG1hcmtlZCA9IG5ldyBTZXQ8b2JqZWN0PigpO1xuICBjb25zdCB1cDogb2JqZWN0W10gPSBbXTtcbiAgY29uc3QgaG9sZGVyc09mID0gKG5vZGU6IG9iamVjdCk6IHZvaWQgPT4ge1xuICAgIGNvbnN0IGZpcnN0ID0gaG9sZGVyLmdldChub2RlKTtcbiAgICBpZiAoZmlyc3QgIT09IHVuZGVmaW5lZCkgdXAucHVzaChmaXJzdCk7XG4gICAgY29uc3QgbW9yZSA9IG1vcmVIb2xkZXJzPy5nZXQobm9kZSk7XG4gICAgLy8gT25lIHB1c2ggcGVyIGhvbGRlcjogYSBzcHJlYWQgcGFzc2VzIGV2ZXJ5IGhvbGRlciBhcyBhIGNhbGwgYXJndW1lbnQsIGFuZCBvbmUgb2JqZWN0IGhlbGQgYnlcbiAgICAvLyAxMjAsMDAwIGNvbnRhaW5lcnMgb3ZlcmZsb3dlZCB0aGUgc3RhY2suXG4gICAgaWYgKG1vcmUgIT09IHVuZGVmaW5lZCkgZm9yIChsZXQgaSA9IDA7IGkgPCBtb3JlLmxlbmd0aDsgaSsrKSB1cC5wdXNoKG1vcmVbaV0pO1xuICB9O1xuICBmb3IgKGNvbnN0IGxlYWYgb2YgbGVhdmVzKSB7XG4gICAgaWYgKGxlYWYgPT09IHJvb3QpIG1hcmtlZC5hZGQocm9vdCk7XG4gICAgaG9sZGVyc09mKGxlYWYpO1xuICB9XG4gIHdoaWxlICh1cC5sZW5ndGggPiAwKSB7XG4gICAgY29uc3Qgbm9kZSA9IHVwLnBvcCgpITtcbiAgICBpZiAobWFya2VkLmhhcyhub2RlKSkgY29udGludWU7XG4gICAgbWFya2VkLmFkZChub2RlKTtcbiAgICBob2xkZXJzT2Yobm9kZSk7XG4gIH1cbiAgLy8gT25seSBub3csIHRoZSB3YWxrIGRvbmUsIGRvZXMgdGhlIHJlY29yZCdzIGZsYWcgZ2l2ZSB3YXkgdG8gaXRzIG1hcDogYSBtYXBwaW5nIHRoYXQgdGhyb3dzIGxlYXZlc1xuICAvLyB0aGUgcmVjb3JkIGZsYWdnZWQsIHNvIHRoZSBuZXh0IHNlcnZlIG1hcHMgYWdhaW4g4oCUIGl0IG5ldmVyIGhhbmRzIG91dCB0aGUgcmVjb3JkIGl0c2VsZi5cbiAgaWYgKCFtYXJrZWQuaGFzKHJvb3QpKSBPUEVOLmRlbGV0ZShyb290KTtcbiAgZm9yIChjb25zdCBub2RlIG9mIG1hcmtlZCkgT1BFTi5zZXQobm9kZSwgdHJ1ZSk7XG59XG5cbi8qKlxuICogVGhlIHNlcnZlZCBjb3B5IG9mIGFuIG9wZW4gcmVjb3JkOiBpdHMgb3BlbiBjb250YWluZXJzIGNvcGllZCAoZnJlc2gsIHRoZW4gZnJvemVuLCBhbmQgdGhlbXNlbHZlc1xuICogb3BlbiDigJQgYSBjb3B5IGlzIHNlcnZlZCBieSBjb3B5IGFnYWluKSwgZWFjaCB2YWx1ZSBmcmVlemluZyBjYW5ub3Qgc2VhbCBjb3BpZWQsIGV2ZXJ5IHNlYWxlZCBwYXJ0XG4gKiBzaGFyZWQuIEl0ZXJhdGl2ZTsgb25lIGNvcHkgcGVyIG9yaWdpbmFsLCBzbyBjb250YWluZXJzIHNoYXJlZCBvciBjeWNsaWMgc3RheSBzaGFyZWQgaW4gdGhlIGNvcHkuIFRoZVxuICogdmFsdWVzIGZyZWV6aW5nIGNhbm5vdCBzZWFsIGFyZSBjb3BpZWQgT05FIEJZIE9ORTogdHdvIG9mIHRoZW0gdGhhdCBzaGFyZSBhIHBhcnQgKGFuIGBBcnJheUJ1ZmZlcmBcbiAqIGFuZCBhIHZpZXcgb2YgaXQsIGFuIGVycm9yIHdob3NlIGBjYXVzZWAgaXMgYW5vdGhlciBrZXkncyBEYXRlKSBjb21lIG91dCBhcyBzZXBhcmF0ZSBjb3BpZXMg4oCUIGVxdWFsXG4gKiB2YWx1ZXMsIHRoZSBzaGFyaW5nIGJldHdlZW4gdGhlbSBub3Qga2VwdC5cbiAqL1xuZnVuY3Rpb24gY29weU9wZW5QYXRocyhyb290OiBvYmplY3QpOiBvYmplY3Qge1xuICBjb25zdCBjb3BpZXMgPSBuZXcgTWFwPG9iamVjdCwgb2JqZWN0PigpO1xuICBjb25zdCBzaGVsbHM6IG9iamVjdFtdID0gW107XG4gIGNvbnN0IGNvcHlPZiA9ICh2YWx1ZTogb2JqZWN0LCBwZW5kaW5nOiBvYmplY3RbXSk6IG9iamVjdCA9PiB7XG4gICAgY29uc3QgZG9uZSA9IGNvcGllcy5nZXQodmFsdWUpO1xuICAgIGlmIChkb25lICE9PSB1bmRlZmluZWQpIHJldHVybiBkb25lO1xuICAgIGxldCBjb3B5OiBvYmplY3Q7XG4gICAgaWYgKGlzVW5zZWFsYWJsZSh2YWx1ZSkpIHtcbiAgICAgIGNvcHkgPSBjb3B5TGVhZih2YWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvcHkgPSBBcnJheS5pc0FycmF5KHZhbHVlKSA/IG5ldyBBcnJheSh2YWx1ZS5sZW5ndGgpIDoge307XG4gICAgICBzaGVsbHMucHVzaChjb3B5KTtcbiAgICAgIHBlbmRpbmcucHVzaCh2YWx1ZSk7XG4gICAgfVxuICAgIGNvcGllcy5zZXQodmFsdWUsIGNvcHkpO1xuICAgIHJldHVybiBjb3B5O1xuICB9O1xuICBjb25zdCBwZW5kaW5nOiBvYmplY3RbXSA9IFtdO1xuICBjb25zdCBvdXQgPSBjb3B5T2Yocm9vdCwgcGVuZGluZyk7XG4gIHdoaWxlIChwZW5kaW5nLmxlbmd0aCA+IDApIHtcbiAgICBjb25zdCBub2RlID0gcGVuZGluZy5wb3AoKSE7XG4gICAgY29uc3QgY29weSA9IGNvcGllcy5nZXQobm9kZSkgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgZm9yIChjb25zdCBuYW1lIG9mIE9iamVjdC5rZXlzKG5vZGUpKSB7XG4gICAgICBjb25zdCBjaGlsZCA9IChub2RlIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KVtuYW1lXTtcbiAgICAgIHB1dE93bihcbiAgICAgICAgY29weSxcbiAgICAgICAgbmFtZSxcbiAgICAgICAgY2hpbGQgIT09IG51bGwgJiYgdHlwZW9mIGNoaWxkID09PSAnb2JqZWN0JyAmJiAoT1BFTi5oYXMoY2hpbGQpIHx8IGlzVW5zZWFsYWJsZShjaGlsZCkpXG4gICAgICAgICAgPyBjb3B5T2YoY2hpbGQsIHBlbmRpbmcpXG4gICAgICAgICAgOiBjaGlsZCxcbiAgICAgICk7XG4gICAgfVxuICB9XG4gIGZvciAoY29uc3Qgc2hlbGwgb2Ygc2hlbGxzKSB7XG4gICAgT2JqZWN0LmZyZWV6ZShzaGVsbCk7XG4gICAgT1BFTi5zZXQoc2hlbGwsIHRydWUpO1xuICB9XG4gIC8vIEEgbGVhZiBjb3B5IGlzIHRoZSByZWFkZXIncyBvd247IGZyb3plbiB3aGVyZSBmcmVlemluZyByZWFjaGVzLCBhcyB0aGUgcmVjb3JkJ3MgcGFydHMgYXJlLlxuICBmb3IgKGNvbnN0IGNvcHkgb2YgY29waWVzLnZhbHVlcygpKSBpZiAoIUFycmF5QnVmZmVyLmlzVmlldyhjb3B5KSkgT2JqZWN0LmZyZWV6ZShjb3B5KTtcbiAgcmV0dXJuIG91dDtcbn1cblxuLyoqXG4gKiBgdGFyZ2V0W25hbWVdID0gdmFsdWVgLCBhcyBhbiBPV04gZGF0YSBwcm9wZXJ0eS4gQSBrZXkgdGhlIHNoZWxsIG9ubHkgaW5oZXJpdHMg4oCUIGFuIG93biBgXCJfX3Byb3RvX19cImBcbiAqIG9mIHRoZSByZWNvcmQgKGBKU09OLnBhcnNlYCBtYWtlcyBvbmUpIOKAlCB3b3VsZCBjYWxsIHRoZSBpbmhlcml0ZWQgc2V0dGVyIGFuZCByZS1wYXJlbnQgdGhlIGNvcHk7IGl0IGlzXG4gKiBkZWZpbmVkIGFzIGRhdGEgaW5zdGVhZCwgYXMgYG1lbW9yeS9tZXJnZS50cyDCtyBtZXJnZUd1YXJkZWRgIGtlZXBzIGl0LlxuICovXG5mdW5jdGlvbiBwdXRPd24odGFyZ2V0OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiwgbmFtZTogc3RyaW5nLCB2YWx1ZTogdW5rbm93bik6IHZvaWQge1xuICBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0YXJnZXQsIG5hbWUpICYmIFJlZmxlY3QuaGFzKHRhcmdldCwgbmFtZSkpIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBuYW1lLCB7IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0pO1xuICB9IGVsc2Uge1xuICAgIHRhcmdldFtuYW1lXSA9IHZhbHVlO1xuICB9XG59XG5cbi8qKiBBIGZyZXNoIGNvcHkgb2YgYSB2YWx1ZSBmcmVlemluZyBjYW5ub3Qgc2VhbC4gT25lIHRoZSBjbG9uZSByZWZ1c2VzIChoYW5kLWJ1aWx0KSBpcyBzZXJ2ZWQgYXMgaXQgaXMuICovXG5mdW5jdGlvbiBjb3B5TGVhZih2YWx1ZTogb2JqZWN0KTogb2JqZWN0IHtcbiAgaWYgKGtpbmRPZih2YWx1ZSkgPT09ICdkYXRlJykgcmV0dXJuIG5ldyBEYXRlKERhdGUucHJvdG90eXBlLmdldFRpbWUuY2FsbCh2YWx1ZSkpO1xuICB0cnkge1xuICAgIHJldHVybiBzdHJ1Y3R1cmVkQ2xvbmUodmFsdWUpO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbn1cbiJdfQ==
320
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnJlZXplLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9jYXB0dXJlL2ZyZWV6ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F3Q0c7OztBQUVILDZDQUFzQztBQUN0QyxtREFBbUQ7QUFjbkQ7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBQ0gsU0FBZ0IsVUFBVSxDQUFJLEdBQU0sRUFBRSxTQUFvQixXQUFXO0lBQ25FLElBQUksR0FBRyxLQUFLLElBQUksSUFBSSxPQUFPLEdBQUcsS0FBSyxRQUFRO1FBQUUsYUFBYSxDQUFDLEdBQUcsRUFBRSxNQUFNLEtBQUssU0FBUyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQzdGLE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUhELGdDQUdDO0FBRUQ7Ozs7R0FJRztBQUNILE1BQU0sSUFBSSxHQUFHLElBQUksT0FBTyxFQUFtQixDQUFDO0FBRTVDOzs7Ozs7Ozs7Ozs7O0dBYUc7QUFDSCxTQUFnQixZQUFZLENBQW1CLE1BQVMsRUFBRSxTQUFvQixXQUFXO0lBQ3ZGLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxJQUFJLGFBQWEsQ0FBQyxNQUFNLEVBQUUsTUFBTSxLQUFLLFNBQVMsRUFBRSxJQUFJLENBQUM7UUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNwRyxPQUFPLE1BQU0sQ0FBQztBQUNoQixDQUFDO0FBSEQsb0NBR0M7QUFFRDs7Ozs7R0FLRztBQUNILFNBQWdCLFdBQVcsQ0FBSSxNQUFTO0lBQ3RDLElBQUksTUFBTSxLQUFLLElBQUksSUFBSSxPQUFPLE1BQU0sS0FBSyxRQUFRO1FBQUUsT0FBTyxNQUFNLENBQUM7SUFDakUsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztJ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S0FBSyxLQUFLLElBQUksSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDckYsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDO2dCQUN4QixDQUFDLENBQUMsS0FBSyxDQUNWLENBQUM7UUFDSixDQUFDO0lBQ0gsQ0FBQztJQUNELEtBQUssTUFBTSxLQUFLLElBQUksTUFBTSxFQUFFLENBQUM7UUFDM0IsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNyQixJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztJQUN4QixDQUFDO0lBQ0QsNkZBQTZGO0lBQzdGLEtBQUssTUFBTSxJQUFJLElBQUksTUFBTSxDQUFDLE1BQU0sRUFBRTtRQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQztZQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDdkYsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBRUQsMkdBQTJHO0FBQzNHLFNBQVMsUUFBUSxDQUFDLEtBQWE7SUFDN0IsSUFBSSxJQUFBLHNCQUFNLEVBQUMsS0FBSyxDQUFDLEtBQUssTUFBTTtRQUFFLE9BQU8sSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDbEYsSUFBSSxDQUFDO1FBQ0gsT0FBTyxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQUFDLE1BQU0sQ0FBQztRQUNQLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIGZyZWV6ZS50cyDigJQgdGhlIE9ORSBkZWVwLWZyZWV6ZSB3YWxrIChtb3ZlZCBoZXJlIGZyb20gYHNjb3BlL3Byb3RlY3Rpb24vcmVhZG9ubHlJbnB1dC50c2AgaW4gRjMpLFxuICogYW5kIHRoZSBzZXJ2ZS10aW1lIGxhdyBmb3IgdGhlIGNvbW1pdCBsb2cgKDkuNDQuMikuXG4gKlxuICogV0hZIEhFUkUuIFNhdmVkIHRyZWVzIGZyZWV6ZSB0aHJvdWdoIHRoaXMgd2FsazogdGhlIGZvbGQgYmFzZSBzZXJ2ZWQgYXNcbiAqIGBpbml0aWFsU3RhdGVgIChgRXhlY3V0aW9uUnVudGltZSDCtyBnZXRGb2xkQmFzZWApLCB0aGVcbiAqIGRldi1tb2RlIHNuYXBzaG90IChgcnVubmVyL3NuYXBzaG90LnRzIMK3IHNlcnZlZFNuYXBzaG90YCksIGV2ZXJ5IHN0YXRlIGBzdGF0ZUF0YCBoYW5kcyBvdXRcbiAqIChgdGltZS10cmF2ZWwvc3RhdGVBdC50c2ApIGFuZCwgc2luY2UgRjMsIGV2ZXJ5IGNvbW1pdCBidW5kbGUgKGBFdmVudExvZyDCtyByZWNvcmRgKS4gYG1lbW9yeS9gIG11c3RcbiAqIG5vdCBpbXBvcnQgYHNjb3BlL2AgKHRoYXQgZWRnZSBjbG9zZWQgdGhlIG1lbW9yeSDih4Qgc2NvcGUg4oeEIHJlY29yZGVyIG1vZHVsZSBjeWNsZSBGMCByZW1vdmVkKSwgc28gdGhlXG4gKiB3YWxrIGxpdmVzIGluIHRoaXMgbGVhZiBmb2xkZXIsIHdoaWNoIGltcG9ydHMgbm90aGluZyBvdXRzaWRlIGl0c2VsZi4gQXJncyB1c2UgYW4gb3duZXJzaGlwIHNuYXBzaG90XG4gKiBpbnN0ZWFkIChgc2NvcGUvcHJvdGVjdGlvbi9yZWFkb25seUlucHV0LnRzIMK3IGNyZWF0ZUZyb3plbkFyZ3NgKTogbmV2ZXIgZnJlZXplIGJvcnJvd2VkIGNhbGxlciB2YWx1ZXMuXG4gKlxuICogRlJFRVpFIFdIQVQgQ0FOIEJFIEZST1pFTiwgQ09QWSBXSEFUIENBTidUICg5LjQ0LjIpLiBgT2JqZWN0LmZyZWV6ZWAgY2Fubm90IHNlYWwgYSBEYXRlJ3MgdGltZSwgYVxuICogTWFwJ3Mgb3IgU2V0J3MgZW50cmllcywgYSBidWZmZXIncyBieXRlcywgYSBSZWdFeHAgKGBjb21waWxlKClgIHJld3JpdGVzIGEgZnJvemVuIG9uZSkgb3IgYW4gRXJyb3JcbiAqIChWOCdzIG93biBgc3RhY2tgIGFjY2Vzc29yIHdyaXRlcyB0aHJvdWdoIGEgZnJvemVuIG9uZSkuIEEgZnJlc2ggdHJlZSBoYW5kZWQgdG8gb25lIGNhbGxlciAoYSBgc3RhdGVBdGBcbiAqIHN0YXRlLCB0aGUgZGV2LW1vZGUgc25hcHNob3QpIGlzIHRoYXQgY2FsbGVyJ3Mgb3duLCBzbyBmcmVlemluZyBpdCBpcyBhIGd1YXJkIGFuZCBub3RoaW5nIG1vcmUuIFRoZVxuICogQ09NTUlUIExPRyDigJQgZWFjaCBidW5kbGUsIGFuZCB0aGUgZm9sZCBiYXNlIOKAlCBpcyBzZXJ2ZWQgdG8gZXZlcnkgcmVhZGVyLCBzbyB7QGxpbmsgZnJlZXplUmVjb3JkfVxuICogcmVtZW1iZXJzIHRoYXQgYSByZWNvcmQgaG9sZHMgc3VjaCBhIHZhbHVlLCBpdHMgZmlyc3Qgc2VydmUgbWFwcyB0aGUgY29udGFpbmVycyBvbiB0aGUgd2F5IHRvIGVhY2hcbiAqIG9uZSAoaXRzIG9wZW4gUEFUSFMpLCBhbmQge0BsaW5rIHNlcnZlUmVjb3JkfSBoYW5kcyBhIHJlYWRlciBhIGNvcHkgb2YgdGhvc2UgcGF0aHMgb25seTogYSBmcmVzaCBjb3B5XG4gKiBvZiBlYWNoIHN1Y2ggdmFsdWUsIGZyZXNoIGZyb3plbiBjb250YWluZXJzIG9uIHRoZSB3YXkgdG8gaXQsIGFuZCBldmVyeSBvdGhlciBwYXJ0IHNoYXJlZCwgZnJvemVuLCBhc1xuICogaXQgaXMuIFVudGlsIDkuNDQuMiBgc25hcHNob3QuY29tbWl0TG9nW2ldLm92ZXJ3cml0ZS53aGVuLnNldFRpbWUoMClgIHJld3JvdGUgZXZlcnkgbGF0ZXIgc25hcHNob3QsXG4gKiBgc3RhdGVBdGAsIGBjb21taXRWYWx1ZUF0YCwgc2xpY2UgYW5kIGN1cnNvciBhbnN3ZXIuXG4gKlxuICogRXZlcnkgd2FsayBoZXJlIGlzIElURVJBVElWRSAoYW4gZXhwbGljaXQgc3RhY2spOiBhIHJlY29yZCdzIGRlcHRoIGlzIG5vdCBib3VuZGVkIGJ5IHRoZSBjYWxsIHN0YWNrLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBpbXBvcnQgeyBkZWVwRnJlZXplLCBmcmVlemVSZWNvcmQsIHNlcnZlUmVjb3JkIH0gZnJvbSAnLi9mcmVlemUuanMnO1xuICpcbiAqIGNvbnN0IGFyZ3MgPSBkZWVwRnJlZXplKHsgb3JkZXI6IHsgbGluZXM6IFt7IHNrdTogJ0EnIH1dIH0sIGJ5dGVzOiBuZXcgVWludDhBcnJheShbMV0pIH0pO1xuICogT2JqZWN0LmlzRnJvemVuKGFyZ3Mub3JkZXIubGluZXNbMF0pOyAvLyB0cnVlXG4gKiBPYmplY3QuaXNGcm96ZW4oYXJncy5ieXRlcyk7IC8vIGZhbHNlIOKAlCBhIHR5cGVkIGFycmF5IGNhbm5vdCBiZSBmcm96ZW47IGl0IGlzIHNraXBwZWRcbiAqXG4gKiBjb25zdCByZWNvcmQgPSBmcmVlemVSZWNvcmQoeyB3aGVuOiBuZXcgRGF0ZSgwKSwgdGFnczogWydhJ10gfSk7XG4gKiBjb25zdCBzZXJ2ZWQgPSBzZXJ2ZVJlY29yZChyZWNvcmQpO1xuICogc2VydmVkLndoZW4uc2V0VGltZSg1KTsgLy8gY2hhbmdlcyB0aGUgcmVhZGVyJ3MgY29weVxuICogc2VydmVSZWNvcmQocmVjb3JkKS53aGVuLmdldFRpbWUoKTsgLy8gMCDigJQgZXZlcnkgc2VydmUgaXMgdGhlIHJlY29yZCBhcyByZWNvcmRlZFxuICogc2VydmVkLnRhZ3MgPT09IHJlY29yZC50YWdzOyAvLyB0cnVlIOKAlCB0aGUgc2VhbGVkIHBhcnQgaXMgc2hhcmVkLCBub3QgY29waWVkXG4gKiBzZXJ2ZVJlY29yZChmcmVlemVSZWNvcmQoeyBuOiAxIH0pKTsgLy8gYSByZWNvcmQgZnJlZXppbmcgc2VhbGVkIHdob2xlOiBzZXJ2ZWQgYXMgaXRzZWxmXG4gKiBgYGBcbiAqL1xuXG5pbXBvcnQgeyBwdXRPd24gfSBmcm9tICcuL293bkRhdGEuanMnO1xuaW1wb3J0IHsga2luZE9mLCBTRUFMQUJMRSB9IGZyb20gJy4vdmFsdWVLaW5kcy5qcyc7XG5cbi8qKlxuICogSG93IHtAbGluayBkZWVwRnJlZXplfSB3YWxrcyBhbiBBUlJBWS5cbiAqXG4gKiAtIGAnZXZlcnkta2V5J2AgKHRoZSBkZWZhdWx0KSDigJQgZXZlcnkgb3duIHByb3BlcnR5LCBhcyBmb3IgYW55IG90aGVyIG9iamVjdDogdGhlIGluZGV4IGVsZW1lbnRzXG4gKiAgIEFORCBhbnkgZXhwYW5kbyAoYGFyci5ub3RlID0geyDigKYgfWApLiBUaGUgZGV2LW1vZGUgc25hcHNob3QgcmVsaWVzIG9uIHRoaXMgY29udHJhY3QuXG4gKiAtIGAnaW5kaWNlcydgIOKAlCB0aGUgaW5kZXggZWxlbWVudHMgb25seSwgc28gbm8ga2V5IHN0cmluZyBpcyBhbGxvY2F0ZWQgcGVyIGVsZW1lbnQ7IHRoaXMgaXMgd2hhdFxuICogICBrZWVwcyBmcmVlemluZyBhIDEwLDAwMC1lbGVtZW50IGNvbW1pdCBpbnNpZGUgaXRzIGJ1ZGdldCAoYGJlbmNoL2VsZW1lbnQtd3JpdGVzLnRzYCkuIEFuIG9iamVjdFxuICogICBodW5nIG9uIGFuIGFycmF5IEVYUEFORE8gaXMgdGhlbiBsZWZ0IHVuZnJvemVuLCBhbmQgdW5zZWVuIGJ5IHtAbGluayBzZXJ2ZVJlY29yZH0g4oCUIHRoZSBjb21taXRcbiAqICAgbG9nJ3MgbmFtZWQgaG9sZSAoYEV2ZW50TG9nIMK3IHJlY29yZGA7IGFuIGFycmF5IGV4cGFuZG8gaXMgb3V0IG9mIGNvbnRyYWN0IGZvciBzdGF0ZSkuXG4gKi9cbmV4cG9ydCB0eXBlIEFycmF5V2FsayA9ICdldmVyeS1rZXknIHwgJ2luZGljZXMnO1xuXG4vKipcbiAqIEZyZWV6ZXMgYG9iamAgYW5kIGV2ZXJ5IG9iamVjdCByZWFjaGFibGUgdGhyb3VnaCBpdHMgb3duIHByb3BlcnRpZXMsIGFuZCByZXR1cm5zIGBvYmpgLlxuICpcbiAqIC0gQW4gb2JqZWN0IHRoYXQgaXMgQUxSRUFEWSBmcm96ZW4gaXMgbGVmdCBhcyBpdCBpcywgYW5kIG5vdCBkZXNjZW5kZWQg4oCUIDkuMzIuMCdzIGNvbnRyYWN0LCBrZXB0OlxuICogICBhcmdzIG1heSBob2xkIGEgY2FsbGVyJ3MgZnJvemVuIG9iamVjdCB3aXRoIGxpdmUgcGFydHMgaW5zaWRlIChhIGNsYXNzIGluc3RhbmNlIGEgc3RhZ2UgY2FsbHMpLFxuICogICBhbmQgZnJlZXppbmcgcGFzdCBpdCB3b3VsZCBicmVhayB0aGVtLiBJdCBpcyBhbHNvIHdoYXQgZW5kcyBhIGN5Y2xlLiBUaGUgY29tbWl0IGxvZyBuZXZlciBtZWV0c1xuICogICBvbmU6IGl0cyBwYXlsb2FkcyBhcmUgZnJlc2ggYHN0cnVjdHVyZWRDbG9uZWBzLlxuICogLSBBcnJheUJ1ZmZlciB2aWV3cyAodHlwZWQgYXJyYXlzLCBgRGF0YVZpZXdgKSBhcmUgc2tpcHBlZDogYE9iamVjdC5mcmVlemVgIHRocm93cyBvbiBhIG5vbi1lbXB0eVxuICogICB0eXBlZCBhcnJheSwgc28gYSBgVWludDhBcnJheWAgaW4gc3RhdGUsIGFyZ3Mgb3IgdGhlIGZvbGQgYmFzZSB1c2VkIHRvIGZhaWwgdGhlIHJ1biBvciB0aGVcbiAqICAgc25hcHNob3QgaGVyZS5cbiAqIC0gV2hhdCBgT2JqZWN0LmZyZWV6ZWAgY2Fubm90IHJlYWNoIHN0YXlzIG11dGFibGUg4oCUIE1hcCBhbmQgU2V0IGNvbnRlbnRzLCBhIERhdGUncyB0aW1lLCB0aGVcbiAqICAgYnl0ZXMgYmVoaW5kIGEgYnVmZmVyLiBBIGZyb3plbiBSZWdFeHAncyBgbGFzdEluZGV4YCBpcyByZWFkLW9ubHksIHNvIGEgYC9nYCBvciBgL3lgIHJlZ2V4XG4gKiAgIHRha2VuIGZyb20gYSBmcm96ZW4gdHJlZSB0aHJvd3Mgd2hlbiBgZXhlY2Agb3IgYHJlcGxhY2VgIGFkdmFuY2UgaXQuIFRoZSBjb21taXQgbG9nIGdvZXMgdGhyb3VnaFxuICogICB7QGxpbmsgZnJlZXplUmVjb3JkfSBhbmQge0BsaW5rIHNlcnZlUmVjb3JkfSBpbnN0ZWFkLlxuICogLSBGdW5jdGlvbnMgYXJlIG5vdCBkZXNjZW5kZWQgKHRoZXkgYXJlIG5vdCB2YWx1ZXMgdGhlIGVuZ2luZSBzdG9yZXMpLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVlcEZyZWV6ZTxUPihvYmo6IFQsIGFycmF5czogQXJyYXlXYWxrID0gJ2V2ZXJ5LWtleScpOiBUIHtcbiAgaWYgKG9iaiAhPT0gbnVsbCAmJiB0eXBlb2Ygb2JqID09PSAnb2JqZWN0Jykgd2Fsa0FuZEZyZWV6ZShvYmosIGFycmF5cyA9PT0gJ2luZGljZXMnLCBmYWxzZSk7XG4gIHJldHVybiBvYmo7XG59XG5cbi8qKlxuICogQ29udGFpbmVycyBvZiBhIHJlY29yZCB0aGF0IGhvbGQg4oCUIG9uIHNvbWUgcGF0aCBiZWxvdyB0aGVtIOKAlCBhIHZhbHVlIGZyZWV6aW5nIGNhbm5vdCBzZWFsOiBgdHJ1ZWAgb25jZVxuICogbWFwcGVkICh0aGUgY29udGFpbmVyIGlzIG9uIGFuIG9wZW4gcGF0aCksIGBmYWxzZWAgZm9yIGEgcmVjb3JkIHtAbGluayBmcmVlemVSZWNvcmR9IGZvdW5kIG9wZW4gd2hvc2VcbiAqIHBhdGhzIG5vIHNlcnZlIGhhcyBtYXBwZWQgeWV0LiBBIGNvbnRhaW5lciBhYnNlbnQgaGVyZSBpcyBzZWFsZWQgd2hvbGUuXG4gKi9cbmNvbnN0IE9QRU4gPSBuZXcgV2Vha01hcDxvYmplY3QsIGJvb2xlYW4+KCk7XG5cbi8qKlxuICoge0BsaW5rIGRlZXBGcmVlemV9IGZvciBhIHJlY29yZCBtYW55IHJlYWRlcnMgYXJlIFNFUlZFRCAoYSBjb21taXQgYnVuZGxlLCB0aGUgZm9sZCBiYXNlKSwgYW5kIHR3byBtb3JlXG4gKiB0aGluZ3Mgb24gdGhlIHNhbWUgd2FsazpcbiAqXG4gKiAgIC0gaXQgcmVtZW1iZXJzIFRIQVQgdGhlIHJlY29yZCBob2xkcyBhIHZhbHVlIGZyZWV6aW5nIGNhbm5vdCBzZWFsIOKAlCBvbmUgZmxhZzsgdGhlIHJlY29yZCdzIGZpcnN0XG4gKiAgICAgc2VydmUgbWFwcyBXSEVSRSAodGhlIGNvbnRhaW5lcnMgb24gdGhlIHdheSB0byBlYWNoIHN1Y2ggdmFsdWUsIGl0cyBvcGVuIHBhdGhzKSwgc28gdGhlIHJ1biBwYXlzXG4gKiAgICAgbm90aGluZyBtb3JlIGFuZCB7QGxpbmsgc2VydmVSZWNvcmR9IGNvcGllcyB0aG9zZSBwYXRocyBhbmQgbm90aGluZyBlbHNlO1xuICogICAtIGEgdHlwZWQgYXJyYXkgb3IgYERhdGFWaWV3YCB0aGF0IHZpZXdzIGEgU0xJQ0Ugb2YgYSBiaWdnZXIgYnVmZmVyIChhIE5vZGUgYEJ1ZmZlcmAgdmlld3MgaXRzXG4gKiAgICAgc2hhcmVkIHBvb2wpIGlzIHJlcGxhY2VkLCBpbiB0aGUgcmVjb3JkLCBieSBhIGNvcHkgb2YgdGhlIGJ5dGVzIGl0IHZpZXdzIOKAlCB0aGUgcmVjb3JkIGtlZXBzIHRoZVxuICogICAgIHZpZXcncyBieXRlcywgbmV2ZXIgdGhlIHJlc3Qgb2YgdGhlIGJ1ZmZlciAoYSByZXNpemFibGUgb3Igc2hhcmVkIGJ1ZmZlciBpcyBrZXB0IGFzIGl0IGlzKS5cbiAqXG4gKiBBIHBhcnQgZnJvemVuIGJlZm9yZSBpcyBub3QgZnJvemVuIHBhc3QgKGRlZXBGcmVlemUncyBjb250cmFjdCkgYnV0IGlzIGxvb2tlZCB0aHJvdWdoLCBzbyBhIHZhbHVlXG4gKiBmcmVlemluZyBjYW5ub3Qgc2VhbCBpbnNpZGUgaXQgc3RpbGwgb3BlbnMgdGhlIHJlY29yZC4gUmV0dXJucyBgcmVjb3JkYC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZyZWV6ZVJlY29yZDxUIGV4dGVuZHMgb2JqZWN0PihyZWNvcmQ6IFQsIGFycmF5czogQXJyYXlXYWxrID0gJ2V2ZXJ5LWtleScpOiBUIHtcbiAgaWYgKCFPUEVOLmhhcyhyZWNvcmQpICYmIHdhbGtBbmRGcmVlemUocmVjb3JkLCBhcnJheXMgPT09ICdpbmRpY2VzJywgdHJ1ZSkpIE9QRU4uc2V0KHJlY29yZCwgZmFsc2UpO1xuICByZXR1cm4gcmVjb3JkO1xufVxuXG4vKipcbiAqIFRoZSByZWNvcmQgYXMgYSByZWFkZXIgbWF5IGhvbGQgaXQg4oCUIFRIRSBzZXJ2ZS10aW1lIGxhdzogYSByZWNvcmQgZnJlZXppbmcgc2VhbGVkIHdob2xlIGlzIHNlcnZlZCBhc1xuICogaXRzZWxmIChzaGFyZWQsIG5vIGNvc3QpOyBhbnkgb3RoZXIgYXMgYSBjb3B5IG9mIGl0cyBvcGVuIHBhdGhzICh7QGxpbmsgZnJlZXplUmVjb3JkfSk6IGZyZXNoIGZyb3plblxuICogY29udGFpbmVycyBkb3duIHRvIGVhY2ggdmFsdWUgZnJlZXppbmcgY2Fubm90IHNlYWwsIGEgZnJlc2ggY29weSBvZiB0aGF0IHZhbHVlLCBhbmQgZXZlcnkgb3RoZXIgcGFydFxuICogc2hhcmVkLCBmcm96ZW4sIGFzIGl0IGlzLiBBIGNvcHkgaXMgc2VydmVkIHRoZSBzYW1lIHdheSBhZ2Fpbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNlcnZlUmVjb3JkPFQ+KHJlY29yZDogVCk6IFQge1xuICBpZiAocmVjb3JkID09PSBudWxsIHx8IHR5cGVvZiByZWNvcmQgIT09ICdvYmplY3QnKSByZXR1cm4gcmVjb3JkO1xuICBjb25zdCBtYXBwZWQgPSBPUEVOLmdldChyZWNvcmQpO1xuICBpZiAobWFwcGVkID09PSB1bmRlZmluZWQpIHJldHVybiByZWNvcmQ7XG4gIGlmICghbWFwcGVkKSBtYXBPcGVuUGF0aHMocmVjb3JkKTtcbiAgcmV0dXJuIE9QRU4uZ2V0KHJlY29yZCkgPT09IHRydWUgPyAoY29weU9wZW5QYXRocyhyZWNvcmQpIGFzIFQpIDogcmVjb3JkO1xufVxuXG4vKiogQSB2YWx1ZSBmcmVlemluZyBjYW5ub3Qgc2VhbCDigJQgYSB2aWV3LCBvciBhIGtpbmQgYFNFQUxBQkxFYCBzYXlzIG5vIHRvIChhIERhdGUsIGEgTWFwLCBhbiBFcnJvciDigKYpLiAqL1xuZnVuY3Rpb24gaXNVbnNlYWxhYmxlKHZhbHVlOiBvYmplY3QpOiBib29sZWFuIHtcbiAgcmV0dXJuIEFycmF5QnVmZmVyLmlzVmlldyh2YWx1ZSkgfHwgIVNFQUxBQkxFW2tpbmRPZih2YWx1ZSldO1xufVxuXG4vKipcbiAqIEZyZWV6ZSBgcm9vdGAgYW5kIGV2ZXJ5IGNvbnRhaW5lciB1bmRlciBpdCwgaXRlcmF0aXZlbHk7IGByZWNvcmRgIGFkZHMgdGhlIGxvb2stdGhyb3VnaCBvZiBwYXJ0c1xuICogZnJvemVuIGJlZm9yZSBhbmQgdGhlIGNvbXBhY3Rpb24gb2Ygdmlld3Mgb3ZlciBhIHNsaWNlLiBgdHJ1ZWAgd2hlbiBzb21ldGhpbmcgdW5kZXIgYHJvb3RgIChvciBgcm9vdGBcbiAqIGl0c2VsZikgY2Fubm90IGJlIHNlYWxlZC5cbiAqL1xuZnVuY3Rpb24gd2Fsa0FuZEZyZWV6ZShyb290OiBvYmplY3QsIGluZGljZXM6IGJvb2xlYW4sIHJlY29yZDogYm9vbGVhbik6IGJvb2xlYW4ge1xuICBsZXQgb3BlbiA9IGZhbHNlO1xuICBsZXQgbG9va2VkVGhyb3VnaDogU2V0PG9iamVjdD4gfCB1bmRlZmluZWQ7XG4gIGNvbnN0IHN0YWNrOiBvYmplY3RbXSA9IFtyb290XTtcbiAgd2hpbGUgKHN0YWNrLmxlbmd0aCA+IDApIHtcbiAgICBjb25zdCBub2RlID0gc3RhY2sucG9wKCkhO1xuICAgIGlmIChBcnJheUJ1ZmZlci5pc1ZpZXcobm9kZSkpIHtcbiAgICAgIG9wZW4gPSB0cnVlOyAvLyBpdHMgYnl0ZXMg4oCUIGFuZCBhIG5vbi1lbXB0eSBvbmUgY2Fubm90IGJlIGZyb3plbiBhdCBhbGxcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBjb25zdCBmcm96ZW5CZWZvcmUgPSBPYmplY3QuaXNGcm96ZW4obm9kZSk7XG4gICAgaWYgKGZyb3plbkJlZm9yZSkge1xuICAgICAgaWYgKCFyZWNvcmQgfHwgT1BFTi5oYXMobm9kZSkpIHtcbiAgICAgICAgb3BlbiB8fD0gcmVjb3JkO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmICgobG9va2VkVGhyb3VnaCA/Pz0gbmV3IFNldCgpKS5oYXMobm9kZSkpIGNvbnRpbnVlO1xuICAgICAgbG9va2VkVGhyb3VnaC5hZGQobm9kZSk7IC8vIGEgcGFydCBmcm96ZW4gYmVmb3JlOiBsb29rZWQgdGhyb3VnaCwgbmV2ZXIgZnJvemVuIHBhc3RcbiAgICB9XG4gICAgaWYgKHJlY29yZCAmJiAhb3BlbiAmJiAhU0VBTEFCTEVba2luZE9mKG5vZGUpXSkgb3BlbiA9IHRydWU7XG4gICAgLy8gQ2hpbGRyZW4gZmlyc3QsIHdoaWxlIGBub2RlYCBpcyBzdGlsbCBvcGVuIHRvIHRoZSBjb21wYWN0aW9uIGJlbG93OyB0aGVuIHRoZSBmcmVlemUuXG4gICAgY29uc3QgY29tcGFjdGluZyA9IHJlY29yZCAmJiAhZnJvemVuQmVmb3JlO1xuICAgIGlmIChpbmRpY2VzICYmIEFycmF5LmlzQXJyYXkobm9kZSkpIHtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbm9kZS5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBjaGlsZDogdW5rbm93biA9IG5vZGVbaV07XG4gICAgICAgIGlmIChjaGlsZCA9PT0gbnVsbCB8fCB0eXBlb2YgY2hpbGQgIT09ICdvYmplY3QnKSBjb250aW51ZTtcbiAgICAgICAgc3RhY2sucHVzaChjb21wYWN0aW5nICYmIEFycmF5QnVmZmVyLmlzVmlldyhjaGlsZCkgPyBjb21wYWN0KG5vZGUsIGksIGNoaWxkKSA6IGNoaWxkKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgbmFtZXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhub2RlKTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbmFtZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgY2hpbGQgPSAobm9kZSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPilbbmFtZXNbaV1dO1xuICAgICAgICBpZiAoY2hpbGQgPT09IG51bGwgfHwgdHlwZW9mIGNoaWxkICE9PSAnb2JqZWN0JykgY29udGludWU7XG4gICAgICAgIHN0YWNrLnB1c2goY29tcGFjdGluZyAmJiBBcnJheUJ1ZmZlci5pc1ZpZXcoY2hpbGQpID8gY29tcGFjdChub2RlLCBuYW1lc1tpXSwgY2hpbGQpIDogY2hpbGQpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoIWZyb3plbkJlZm9yZSkgT2JqZWN0LmZyZWV6ZShub2RlKTtcbiAgfVxuICByZXR1cm4gb3Blbjtcbn1cblxuLyoqXG4gKiBBIHZpZXcgb3ZlciBhIFNMSUNFIG9mIGEgYmlnZ2VyIGJ1ZmZlciwgcmVwbGFjZWQgaW4gYGNvbnRhaW5lcmAgYnkgYSBjb3B5IG9mIHRoZSBieXRlcyBpdCB2aWV3c1xuICogKHRoZSB0eXBlIGl0IGlzIOKAlCBhIE5vZGUgYEJ1ZmZlcmAgY29tZXMgb3V0IGEgYFVpbnQ4QXJyYXlgLCBhcyBhIGNsb25lIG9mIGl0IGRvZXMpLiBBbnl0aGluZyBlbHNlIGlzXG4gKiByZXR1cm5lZCBhcyBpdCBpcy4gQSByZXNpemFibGUgb3Igc2hhcmVkIGJ1ZmZlciBpcyBrZXB0OiBhIGNvcHkgd291bGQgY2hhbmdlIHdoYXQgaXQgaXMuXG4gKi9cbmZ1bmN0aW9uIGNvbXBhY3QoY29udGFpbmVyOiBvYmplY3QsIGtleTogc3RyaW5nIHwgbnVtYmVyLCBjaGlsZDogQXJyYXlCdWZmZXJWaWV3KTogb2JqZWN0IHtcbiAgY29uc3QgYnVmZmVyID0gY2hpbGQuYnVmZmVyIGFzIEFycmF5QnVmZmVyICYgeyByZXNpemFibGU/OiBib29sZWFuIH07XG4gIGlmIChjaGlsZC5ieXRlT2Zmc2V0ID09PSAwICYmIGNoaWxkLmJ5dGVMZW5ndGggPT09IGJ1ZmZlci5ieXRlTGVuZ3RoKSByZXR1cm4gY2hpbGQ7XG4gIGlmIChidWZmZXIucmVzaXphYmxlID09PSB0cnVlIHx8ICEoYnVmZmVyIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpKSByZXR1cm4gY2hpbGQ7XG4gIGNvbnN0IGJ5dGVzID0gYnVmZmVyLnNsaWNlKGNoaWxkLmJ5dGVPZmZzZXQsIGNoaWxkLmJ5dGVPZmZzZXQgKyBjaGlsZC5ieXRlTGVuZ3RoKTtcbiAgY29uc3QgdGFnID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGNoaWxkKS5zbGljZSg4LCAtMSk7XG4gIGNvbnN0IEN0b3IgPSAoZ2xvYmFsVGhpcyBhcyB1bmtub3duIGFzIFJlY29yZDxzdHJpbmcsIG5ldyAoYnVmZmVyOiBBcnJheUJ1ZmZlcikgPT4gQXJyYXlCdWZmZXJWaWV3PilbdGFnXTtcbiAgaWYgKHR5cGVvZiBDdG9yICE9PSAnZnVuY3Rpb24nKSByZXR1cm4gY2hpbGQ7XG4gIGNvbnN0IGNvcHkgPSBuZXcgQ3RvcihieXRlcyk7XG4gIHRyeSB7XG4gICAgKGNvbnRhaW5lciBhcyBSZWNvcmQ8c3RyaW5nIHwgbnVtYmVyLCB1bmtub3duPilba2V5XSA9IGNvcHk7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBjaGlsZDsgLy8gYSBwcm9wZXJ0eSB0aGUgcmVjb3JkIGRvZXMgbm90IGxldCBiZSByZXBsYWNlZCAoYSBoYW5kLWJ1aWx0IGJ1bmRsZSlcbiAgfVxuICByZXR1cm4gY29weTtcbn1cblxuLyoqXG4gKiBNYXAgdGhlIG9wZW4gcGF0aHMgb2YgYHJvb3RgIOKAlCBtYXJrIGV2ZXJ5IGNvbnRhaW5lciB0aGF0IHJlYWNoZXMgYSB2YWx1ZSBmcmVlemluZyBjYW5ub3Qgc2VhbCwgc28gYVxuICogc2VydmUgY29waWVzIGV4YWN0bHkgdGhvc2UgKERBR3MgYW5kIGN5Y2xlcyBpbmNsdWRlZDogdGhlIG1hcmtzIHJ1biBVUCB0aGUgcmV2ZXJzZSBlZGdlcyBmcm9tIGVhY2hcbiAqIHN1Y2ggdmFsdWUpLiBSdW5zIG9uY2UgcGVyIG9wZW4gcmVjb3JkLCBhdCBpdHMgZmlyc3Qgc2VydmUuIEEgbm9kZSdzIGZpcnN0IGhvbGRlciBpcyBrZXB0IGluIG9uZSBtYXA7XG4gKiBhbnkgb3RoZXIgaG9sZGVyIChhIHNoYXJlZCBwYXJ0LCBhIGN5Y2xlKSBpbiBhIHNlY29uZCwgbWFkZSBvbmx5IHdoZW4gdGhlcmUgaXMgb25lLlxuICovXG5mdW5jdGlvbiBtYXBPcGVuUGF0aHMocm9vdDogb2JqZWN0KTogdm9pZCB7XG4gIGNvbnN0IGhvbGRlciA9IG5ldyBNYXA8b2JqZWN0LCBvYmplY3Q+KCk7XG4gIGxldCBtb3JlSG9sZGVyczogTWFwPG9iamVjdCwgb2JqZWN0W10+IHwgdW5kZWZpbmVkO1xuICBjb25zdCBsZWF2ZXM6IG9iamVjdFtdID0gW107XG4gIGNvbnN0IHN0YWNrOiBvYmplY3RbXSA9IFtyb290XTtcbiAgd2hpbGUgKHN0YWNrLmxlbmd0aCA+IDApIHtcbiAgICBjb25zdCBub2RlID0gc3RhY2sucG9wKCkhO1xuICAgIGlmIChpc1Vuc2VhbGFibGUobm9kZSkpIHtcbiAgICAgIGxlYXZlcy5wdXNoKG5vZGUpOyAvLyBhIGxlYWY6IGl0cyBjb250ZW50cyBhcmUgY29waWVkIHdpdGggaXRcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBjb25zdCBuYW1lcyA9IE9iamVjdC5rZXlzKG5vZGUpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbmFtZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGNoaWxkID0gKG5vZGUgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pW25hbWVzW2ldXTtcbiAgICAgIGlmIChjaGlsZCA9PT0gbnVsbCB8fCB0eXBlb2YgY2hpbGQgIT09ICdvYmplY3QnKSBjb250aW51ZTtcbiAgICAgIGlmIChjaGlsZCAhPT0gcm9vdCAmJiAhaG9sZGVyLmhhcyhjaGlsZCkpIHtcbiAgICAgICAgaG9sZGVyLnNldChjaGlsZCwgbm9kZSk7XG4gICAgICAgIHN0YWNrLnB1c2goY2hpbGQpO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IG1vcmUgPSAobW9yZUhvbGRlcnMgPz89IG5ldyBNYXAoKSkuZ2V0KGNoaWxkKTtcbiAgICAgIGlmIChtb3JlID09PSB1bmRlZmluZWQpIG1vcmVIb2xkZXJzLnNldChjaGlsZCwgW25vZGVdKTtcbiAgICAgIGVsc2UgbW9yZS5wdXNoKG5vZGUpO1xuICAgIH1cbiAgfVxuICAvLyBNYXJrZWQgaW4gVEhJUyBtYXAsIG5vdCBieSBhbiBlYXJsaWVyIG9uZTogYSBwYXJ0IGFub3RoZXIgcmVjb3JkIGFscmVhZHkgbWFwcGVkIHN0aWxsIG9wZW5zXG4gIC8vIGV2ZXJ5IGNvbnRhaW5lciBvZiB0aGlzIHJlY29yZCBvbiB0aGUgd2F5IHRvIGl0LlxuICBjb25zdCBtYXJrZWQgPSBuZXcgU2V0PG9iamVjdD4oKTtcbiAgY29uc3QgdXA6IG9iamVjdFtdID0gW107XG4gIGNvbnN0IGhvbGRlcnNPZiA9IChub2RlOiBvYmplY3QpOiB2b2lkID0+IHtcbiAgICBjb25zdCBmaXJzdCA9IGhvbGRlci5nZXQobm9kZSk7XG4gICAgaWYgKGZpcnN0ICE9PSB1bmRlZmluZWQpIHVwLnB1c2goZmlyc3QpO1xuICAgIGNvbnN0IG1vcmUgPSBtb3JlSG9sZGVycz8uZ2V0KG5vZGUpO1xuICAgIC8vIE9uZSBwdXNoIHBlciBob2xkZXI6IGEgc3ByZWFkIHBhc3NlcyBldmVyeSBob2xkZXIgYXMgYSBjYWxsIGFyZ3VtZW50LCBhbmQgb25lIG9iamVjdCBoZWxkIGJ5XG4gICAgLy8gMTIwLDAwMCBjb250YWluZXJzIG92ZXJmbG93ZWQgdGhlIHN0YWNrLlxuICAgIGlmIChtb3JlICE9PSB1bmRlZmluZWQpIGZvciAobGV0IGkgPSAwOyBpIDwgbW9yZS5sZW5ndGg7IGkrKykgdXAucHVzaChtb3JlW2ldKTtcbiAgfTtcbiAgZm9yIChjb25zdCBsZWFmIG9mIGxlYXZlcykge1xuICAgIGlmIChsZWFmID09PSByb290KSBtYXJrZWQuYWRkKHJvb3QpO1xuICAgIGhvbGRlcnNPZihsZWFmKTtcbiAgfVxuICB3aGlsZSAodXAubGVuZ3RoID4gMCkge1xuICAgIGNvbnN0IG5vZGUgPSB1cC5wb3AoKSE7XG4gICAgaWYgKG1hcmtlZC5oYXMobm9kZSkpIGNvbnRpbnVlO1xuICAgIG1hcmtlZC5hZGQobm9kZSk7XG4gICAgaG9sZGVyc09mKG5vZGUpO1xuICB9XG4gIC8vIE9ubHkgbm93LCB0aGUgd2FsayBkb25lLCBkb2VzIHRoZSByZWNvcmQncyBmbGFnIGdpdmUgd2F5IHRvIGl0cyBtYXA6IGEgbWFwcGluZyB0aGF0IHRocm93cyBsZWF2ZXNcbiAgLy8gdGhlIHJlY29yZCBmbGFnZ2VkLCBzbyB0aGUgbmV4dCBzZXJ2ZSBtYXBzIGFnYWluIOKAlCBpdCBuZXZlciBoYW5kcyBvdXQgdGhlIHJlY29yZCBpdHNlbGYuXG4gIGlmICghbWFya2VkLmhhcyhyb290KSkgT1BFTi5kZWxldGUocm9vdCk7XG4gIGZvciAoY29uc3Qgbm9kZSBvZiBtYXJrZWQpIE9QRU4uc2V0KG5vZGUsIHRydWUpO1xufVxuXG4vKipcbiAqIFRoZSBzZXJ2ZWQgY29weSBvZiBhbiBvcGVuIHJlY29yZDogaXRzIG9wZW4gY29udGFpbmVycyBjb3BpZWQgKGZyZXNoLCB0aGVuIGZyb3plbiwgYW5kIHRoZW1zZWx2ZXNcbiAqIG9wZW4g4oCUIGEgY29weSBpcyBzZXJ2ZWQgYnkgY29weSBhZ2FpbiksIGVhY2ggdmFsdWUgZnJlZXppbmcgY2Fubm90IHNlYWwgY29waWVkLCBldmVyeSBzZWFsZWQgcGFydFxuICogc2hhcmVkLiBJdGVyYXRpdmU7IG9uZSBjb3B5IHBlciBvcmlnaW5hbCwgc28gY29udGFpbmVycyBzaGFyZWQgb3IgY3ljbGljIHN0YXkgc2hhcmVkIGluIHRoZSBjb3B5LiBUaGVcbiAqIHZhbHVlcyBmcmVlemluZyBjYW5ub3Qgc2VhbCBhcmUgY29waWVkIE9ORSBCWSBPTkU6IHR3byBvZiB0aGVtIHRoYXQgc2hhcmUgYSBwYXJ0IChhbiBgQXJyYXlCdWZmZXJgXG4gKiBhbmQgYSB2aWV3IG9mIGl0LCBhbiBlcnJvciB3aG9zZSBgY2F1c2VgIGlzIGFub3RoZXIga2V5J3MgRGF0ZSkgY29tZSBvdXQgYXMgc2VwYXJhdGUgY29waWVzIOKAlCBlcXVhbFxuICogdmFsdWVzLCB0aGUgc2hhcmluZyBiZXR3ZWVuIHRoZW0gbm90IGtlcHQuXG4gKi9cbmZ1bmN0aW9uIGNvcHlPcGVuUGF0aHMocm9vdDogb2JqZWN0KTogb2JqZWN0IHtcbiAgY29uc3QgY29waWVzID0gbmV3IE1hcDxvYmplY3QsIG9iamVjdD4oKTtcbiAgY29uc3Qgc2hlbGxzOiBvYmplY3RbXSA9IFtdO1xuICBjb25zdCBjb3B5T2YgPSAodmFsdWU6IG9iamVjdCwgcGVuZGluZzogb2JqZWN0W10pOiBvYmplY3QgPT4ge1xuICAgIGNvbnN0IGRvbmUgPSBjb3BpZXMuZ2V0KHZhbHVlKTtcbiAgICBpZiAoZG9uZSAhPT0gdW5kZWZpbmVkKSByZXR1cm4gZG9uZTtcbiAgICBsZXQgY29weTogb2JqZWN0O1xuICAgIGlmIChpc1Vuc2VhbGFibGUodmFsdWUpKSB7XG4gICAgICBjb3B5ID0gY29weUxlYWYodmFsdWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb3B5ID0gQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyBuZXcgQXJyYXkodmFsdWUubGVuZ3RoKSA6IHt9O1xuICAgICAgc2hlbGxzLnB1c2goY29weSk7XG4gICAgICBwZW5kaW5nLnB1c2godmFsdWUpO1xuICAgIH1cbiAgICBjb3BpZXMuc2V0KHZhbHVlLCBjb3B5KTtcbiAgICByZXR1cm4gY29weTtcbiAgfTtcbiAgY29uc3QgcGVuZGluZzogb2JqZWN0W10gPSBbXTtcbiAgY29uc3Qgb3V0ID0gY29weU9mKHJvb3QsIHBlbmRpbmcpO1xuICB3aGlsZSAocGVuZGluZy5sZW5ndGggPiAwKSB7XG4gICAgY29uc3Qgbm9kZSA9IHBlbmRpbmcucG9wKCkhO1xuICAgIGNvbnN0IGNvcHkgPSBjb3BpZXMuZ2V0KG5vZGUpIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgIGZvciAoY29uc3QgbmFtZSBvZiBPYmplY3Qua2V5cyhub2RlKSkge1xuICAgICAgY29uc3QgY2hpbGQgPSAobm9kZSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPilbbmFtZV07XG4gICAgICBwdXRPd24oXG4gICAgICAgIGNvcHksXG4gICAgICAgIG5hbWUsXG4gICAgICAgIGNoaWxkICE9PSBudWxsICYmIHR5cGVvZiBjaGlsZCA9PT0gJ29iamVjdCcgJiYgKE9QRU4uaGFzKGNoaWxkKSB8fCBpc1Vuc2VhbGFibGUoY2hpbGQpKVxuICAgICAgICAgID8gY29weU9mKGNoaWxkLCBwZW5kaW5nKVxuICAgICAgICAgIDogY2hpbGQsXG4gICAgICApO1xuICAgIH1cbiAgfVxuICBmb3IgKGNvbnN0IHNoZWxsIG9mIHNoZWxscykge1xuICAgIE9iamVjdC5mcmVlemUoc2hlbGwpO1xuICAgIE9QRU4uc2V0KHNoZWxsLCB0cnVlKTtcbiAgfVxuICAvLyBBIGxlYWYgY29weSBpcyB0aGUgcmVhZGVyJ3Mgb3duOyBmcm96ZW4gd2hlcmUgZnJlZXppbmcgcmVhY2hlcywgYXMgdGhlIHJlY29yZCdzIHBhcnRzIGFyZS5cbiAgZm9yIChjb25zdCBjb3B5IG9mIGNvcGllcy52YWx1ZXMoKSkgaWYgKCFBcnJheUJ1ZmZlci5pc1ZpZXcoY29weSkpIE9iamVjdC5mcmVlemUoY29weSk7XG4gIHJldHVybiBvdXQ7XG59XG5cbi8qKiBBIGZyZXNoIGNvcHkgb2YgYSB2YWx1ZSBmcmVlemluZyBjYW5ub3Qgc2VhbC4gT25lIHRoZSBjbG9uZSByZWZ1c2VzIChoYW5kLWJ1aWx0KSBpcyBzZXJ2ZWQgYXMgaXQgaXMuICovXG5mdW5jdGlvbiBjb3B5TGVhZih2YWx1ZTogb2JqZWN0KTogb2JqZWN0IHtcbiAgaWYgKGtpbmRPZih2YWx1ZSkgPT09ICdkYXRlJykgcmV0dXJuIG5ldyBEYXRlKERhdGUucHJvdG90eXBlLmdldFRpbWUuY2FsbCh2YWx1ZSkpO1xuICB0cnkge1xuICAgIHJldHVybiBzdHJ1Y3R1cmVkQ2xvbmUodmFsdWUpO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,41 @@
1
+ "use strict";
2
+ /**
3
+ * The private L0 owner of own-slot writes. Selector validation belongs to
4
+ * pathOps: payload names (including `__proto__`) are ordinary data here.
5
+ * Neither operation flattens an existing own accessor or changes its flags.
6
+ */
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.setOwnValue = exports.putOwn = void 0;
9
+ /**
10
+ * `target[name] = value`, preserving existing own-slot behavior while making
11
+ * a missing inherited name an OWN data property. Payload names such as
12
+ * `__proto__` are data, not setters or selector instructions. Shared by the
13
+ * record-serving and copy-on-write copies; this is not a public helper.
14
+ */
15
+ function putOwn(target, name, value) {
16
+ if (!Object.prototype.hasOwnProperty.call(target, name) && Reflect.has(target, name)) {
17
+ defineOwnData(target, name, value);
18
+ }
19
+ else {
20
+ target[name] = value;
21
+ }
22
+ }
23
+ exports.putOwn = putOwn;
24
+ /**
25
+ * Nested diagnostic writers require a missing slot to be CREATED, not merely
26
+ * assigned. Keep that contract separate from putOwn: an out-of-range typed
27
+ * array index is an assignment no-op, but cannot be defined as an own slot.
28
+ */
29
+ function setOwnValue(target, name, value) {
30
+ if (Object.prototype.hasOwnProperty.call(target, name)) {
31
+ putOwn(target, name, value);
32
+ }
33
+ else {
34
+ defineOwnData(target, name, value);
35
+ }
36
+ }
37
+ exports.setOwnValue = setOwnValue;
38
+ function defineOwnData(target, name, value) {
39
+ Object.defineProperty(target, name, { value, enumerable: true, writable: true, configurable: true });
40
+ }
41
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3duRGF0YS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvY2FwdHVyZS9vd25EYXRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7OztHQUlHOzs7QUFFSDs7Ozs7R0FLRztBQUNILFNBQWdCLE1BQU0sQ0FBQyxNQUErQixFQUFFLElBQXFCLEVBQUUsS0FBYztJQUMzRixJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDO1FBQ3JGLGFBQWEsQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ3JDLENBQUM7U0FBTSxDQUFDO1FBQ04sTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQztJQUN2QixDQUFDO0FBQ0gsQ0FBQztBQU5ELHdCQU1DO0FBRUQ7Ozs7R0FJRztBQUNILFNBQWdCLFdBQVcsQ0FBQyxNQUErQixFQUFFLElBQXFCLEVBQUUsS0FBYztJQUNoRyxJQUFJLE1BQU0sQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQztRQUN2RCxNQUFNLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztJQUM5QixDQUFDO1NBQU0sQ0FBQztRQUNOLGFBQWEsQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ3JDLENBQUM7QUFDSCxDQUFDO0FBTkQsa0NBTUM7QUFFRCxTQUFTLGFBQWEsQ0FBQyxNQUErQixFQUFFLElBQXFCLEVBQUUsS0FBYztJQUMzRixNQUFNLENBQUMsY0FBYyxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0FBQ3ZHLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFRoZSBwcml2YXRlIEwwIG93bmVyIG9mIG93bi1zbG90IHdyaXRlcy4gU2VsZWN0b3IgdmFsaWRhdGlvbiBiZWxvbmdzIHRvXG4gKiBwYXRoT3BzOiBwYXlsb2FkIG5hbWVzIChpbmNsdWRpbmcgYF9fcHJvdG9fX2ApIGFyZSBvcmRpbmFyeSBkYXRhIGhlcmUuXG4gKiBOZWl0aGVyIG9wZXJhdGlvbiBmbGF0dGVucyBhbiBleGlzdGluZyBvd24gYWNjZXNzb3Igb3IgY2hhbmdlcyBpdHMgZmxhZ3MuXG4gKi9cblxuLyoqXG4gKiBgdGFyZ2V0W25hbWVdID0gdmFsdWVgLCBwcmVzZXJ2aW5nIGV4aXN0aW5nIG93bi1zbG90IGJlaGF2aW9yIHdoaWxlIG1ha2luZ1xuICogYSBtaXNzaW5nIGluaGVyaXRlZCBuYW1lIGFuIE9XTiBkYXRhIHByb3BlcnR5LiBQYXlsb2FkIG5hbWVzIHN1Y2ggYXNcbiAqIGBfX3Byb3RvX19gIGFyZSBkYXRhLCBub3Qgc2V0dGVycyBvciBzZWxlY3RvciBpbnN0cnVjdGlvbnMuIFNoYXJlZCBieSB0aGVcbiAqIHJlY29yZC1zZXJ2aW5nIGFuZCBjb3B5LW9uLXdyaXRlIGNvcGllczsgdGhpcyBpcyBub3QgYSBwdWJsaWMgaGVscGVyLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcHV0T3duKHRhcmdldDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sIG5hbWU6IHN0cmluZyB8IG51bWJlciwgdmFsdWU6IHVua25vd24pOiB2b2lkIHtcbiAgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGFyZ2V0LCBuYW1lKSAmJiBSZWZsZWN0Lmhhcyh0YXJnZXQsIG5hbWUpKSB7XG4gICAgZGVmaW5lT3duRGF0YSh0YXJnZXQsIG5hbWUsIHZhbHVlKTtcbiAgfSBlbHNlIHtcbiAgICB0YXJnZXRbbmFtZV0gPSB2YWx1ZTtcbiAgfVxufVxuXG4vKipcbiAqIE5lc3RlZCBkaWFnbm9zdGljIHdyaXRlcnMgcmVxdWlyZSBhIG1pc3Npbmcgc2xvdCB0byBiZSBDUkVBVEVELCBub3QgbWVyZWx5XG4gKiBhc3NpZ25lZC4gS2VlcCB0aGF0IGNvbnRyYWN0IHNlcGFyYXRlIGZyb20gcHV0T3duOiBhbiBvdXQtb2YtcmFuZ2UgdHlwZWRcbiAqIGFycmF5IGluZGV4IGlzIGFuIGFzc2lnbm1lbnQgbm8tb3AsIGJ1dCBjYW5ub3QgYmUgZGVmaW5lZCBhcyBhbiBvd24gc2xvdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldE93blZhbHVlKHRhcmdldDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sIG5hbWU6IHN0cmluZyB8IG51bWJlciwgdmFsdWU6IHVua25vd24pOiB2b2lkIHtcbiAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0YXJnZXQsIG5hbWUpKSB7XG4gICAgcHV0T3duKHRhcmdldCwgbmFtZSwgdmFsdWUpO1xuICB9IGVsc2Uge1xuICAgIGRlZmluZU93bkRhdGEodGFyZ2V0LCBuYW1lLCB2YWx1ZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZGVmaW5lT3duRGF0YSh0YXJnZXQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LCBuYW1lOiBzdHJpbmcgfCBudW1iZXIsIHZhbHVlOiB1bmtub3duKTogdm9pZCB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIG5hbWUsIHsgdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSk7XG59XG4iXX0=