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.
@@ -39,6 +39,7 @@
39
39
  * serveRecord(freezeRecord({ n: 1 })); // a record freezing sealed whole: served as itself
40
40
  * ```
41
41
  */
42
+ import { putOwn } from './ownData.js';
42
43
  import { kindOf, SEALABLE } from './valueKinds.js';
43
44
  /**
44
45
  * Freezes `obj` and every object reachable through its own properties, and returns `obj`.
@@ -299,19 +300,6 @@ function copyOpenPaths(root) {
299
300
  Object.freeze(copy);
300
301
  return out;
301
302
  }
302
- /**
303
- * `target[name] = value`, as an OWN data property. A key the shell only inherits — an own `"__proto__"`
304
- * of the record (`JSON.parse` makes one) — would call the inherited setter and re-parent the copy; it is
305
- * defined as data instead, as `memory/merge.ts · mergeGuarded` keeps it.
306
- */
307
- function putOwn(target, name, value) {
308
- if (!Object.prototype.hasOwnProperty.call(target, name) && Reflect.has(target, name)) {
309
- Object.defineProperty(target, name, { value, enumerable: true, writable: true, configurable: true });
310
- }
311
- else {
312
- target[name] = value;
313
- }
314
- }
315
303
  /** A fresh copy of a value freezing cannot seal. One the clone refuses (hand-built) is served as it is. */
316
304
  function copyLeaf(value) {
317
305
  if (kindOf(value) === 'date')
@@ -323,4 +311,4 @@ function copyLeaf(value) {
323
311
  return value;
324
312
  }
325
313
  }
326
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnJlZXplLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9jYXB0dXJlL2ZyZWV6ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXdDRztBQUVILE9BQU8sRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFjbkQ7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBQ0gsTUFBTSxVQUFVLFVBQVUsQ0FBSSxHQUFNLEVBQUUsU0FBb0IsV0FBVztJQUNuRSxJQUFJLEdBQUcsS0FBSyxJQUFJLElBQUksT0FBTyxHQUFHLEtBQUssUUFBUTtRQUFFLGFBQWEsQ0FBQyxHQUFHLEVBQUUsTUFBTSxLQUFLLFNBQVMsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUM3RixPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsTUFBTSxJQUFJLEdBQUcsSUFBSSxPQUFPLEVBQW1CLENBQUM7QUFFNUM7Ozs7Ozs7Ozs7Ozs7R0FhRztBQUNILE1BQU0sVUFBVSxZQUFZLENBQW1CLE1BQVMsRUFBRSxTQUFvQixXQUFXO0lBQ3ZGLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxJQUFJLGFBQWEsQ0FBQyxNQUFNLEVBQUUsTUFBTSxLQUFLLFNBQVMsRUFBRSxJQUFJLENBQUM7UUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNwRyxPQUFPLE1BQU0sQ0FBQztBQUNoQixDQUFDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxNQUFNLFVBQVUsV0FBVyxDQUFJLE1BQVM7SUFDdEMsSUFBSSxNQUFNLEtBQUssSUFBSSxJQUFJLE9BQU8sTUFBTSxLQUFLLFFBQVE7UUFBRSxPQUFPLE1BQU0sQ0FBQztJQUNqRSxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFD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Q0FBQztBQUNILENBQUM7QUFFRCwyR0FBMkc7QUFDM0csU0FBUyxRQUFRLENBQUMsS0FBYTtJQUM3QixJQUFJLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxNQUFNO1FBQUUsT0FBTyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUNsRixJQUFJLENBQUM7UUFDSCxPQUFPLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBQUMsTUFBTSxDQUFDO1FBQ1AsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogZnJlZXplLnRzIOKAlCB0aGUgT05FIGRlZXAtZnJlZXplIHdhbGsgKG1vdmVkIGhlcmUgZnJvbSBgc2NvcGUvcHJvdGVjdGlvbi9yZWFkb25seUlucHV0LnRzYCBpbiBGMyksXG4gKiBhbmQgdGhlIHNlcnZlLXRpbWUgbGF3IGZvciB0aGUgY29tbWl0IGxvZyAoOS40NC4yKS5cbiAqXG4gKiBXSFkgSEVSRS4gU2F2ZWQgdHJlZXMgZnJlZXplIHRocm91Z2ggdGhpcyB3YWxrOiB0aGUgZm9sZCBiYXNlIHNlcnZlZCBhc1xuICogYGluaXRpYWxTdGF0ZWAgKGBFeGVjdXRpb25SdW50aW1lIMK3IGdldEZvbGRCYXNlYCksIHRoZVxuICogZGV2LW1vZGUgc25hcHNob3QgKGBydW5uZXIvc25hcHNob3QudHMgwrcgc2VydmVkU25hcHNob3RgKSwgZXZlcnkgc3RhdGUgYHN0YXRlQXRgIGhhbmRzIG91dFxuICogKGB0aW1lLXRyYXZlbC9zdGF0ZUF0LnRzYCkgYW5kLCBzaW5jZSBGMywgZXZlcnkgY29tbWl0IGJ1bmRsZSAoYEV2ZW50TG9nIMK3IHJlY29yZGApLiBgbWVtb3J5L2AgbXVzdFxuICogbm90IGltcG9ydCBgc2NvcGUvYCAodGhhdCBlZGdlIGNsb3NlZCB0aGUgbWVtb3J5IOKHhCBzY29wZSDih4QgcmVjb3JkZXIgbW9kdWxlIGN5Y2xlIEYwIHJlbW92ZWQpLCBzbyB0aGVcbiAqIHdhbGsgbGl2ZXMgaW4gdGhpcyBsZWFmIGZvbGRlciwgd2hpY2ggaW1wb3J0cyBub3RoaW5nIG91dHNpZGUgaXRzZWxmLiBBcmdzIHVzZSBhbiBvd25lcnNoaXAgc25hcHNob3RcbiAqIGluc3RlYWQgKGBzY29wZS9wcm90ZWN0aW9uL3JlYWRvbmx5SW5wdXQudHMgwrcgY3JlYXRlRnJvemVuQXJnc2ApOiBuZXZlciBmcmVlemUgYm9ycm93ZWQgY2FsbGVyIHZhbHVlcy5cbiAqXG4gKiBGUkVFWkUgV0hBVCBDQU4gQkUgRlJPWkVOLCBDT1BZIFdIQVQgQ0FOJ1QgKDkuNDQuMikuIGBPYmplY3QuZnJlZXplYCBjYW5ub3Qgc2VhbCBhIERhdGUncyB0aW1lLCBhXG4gKiBNYXAncyBvciBTZXQncyBlbnRyaWVzLCBhIGJ1ZmZlcidzIGJ5dGVzLCBhIFJlZ0V4cCAoYGNvbXBpbGUoKWAgcmV3cml0ZXMgYSBmcm96ZW4gb25lKSBvciBhbiBFcnJvclxuICogKFY4J3Mgb3duIGBzdGFja2AgYWNjZXNzb3Igd3JpdGVzIHRocm91Z2ggYSBmcm96ZW4gb25lKS4gQSBmcmVzaCB0cmVlIGhhbmRlZCB0byBvbmUgY2FsbGVyIChhIGBzdGF0ZUF0YFxuICogc3RhdGUsIHRoZSBkZXYtbW9kZSBzbmFwc2hvdCkgaXMgdGhhdCBjYWxsZXIncyBvd24sIHNvIGZyZWV6aW5nIGl0IGlzIGEgZ3VhcmQgYW5kIG5vdGhpbmcgbW9yZS4gVGhlXG4gKiBDT01NSVQgTE9HIOKAlCBlYWNoIGJ1bmRsZSwgYW5kIHRoZSBmb2xkIGJhc2Ug4oCUIGlzIHNlcnZlZCB0byBldmVyeSByZWFkZXIsIHNvIHtAbGluayBmcmVlemVSZWNvcmR9XG4gKiByZW1lbWJlcnMgdGhhdCBhIHJlY29yZCBob2xkcyBzdWNoIGEgdmFsdWUsIGl0cyBmaXJzdCBzZXJ2ZSBtYXBzIHRoZSBjb250YWluZXJzIG9uIHRoZSB3YXkgdG8gZWFjaFxuICogb25lIChpdHMgb3BlbiBQQVRIUyksIGFuZCB7QGxpbmsgc2VydmVSZWNvcmR9IGhhbmRzIGEgcmVhZGVyIGEgY29weSBvZiB0aG9zZSBwYXRocyBvbmx5OiBhIGZyZXNoIGNvcHlcbiAqIG9mIGVhY2ggc3VjaCB2YWx1ZSwgZnJlc2ggZnJvemVuIGNvbnRhaW5lcnMgb24gdGhlIHdheSB0byBpdCwgYW5kIGV2ZXJ5IG90aGVyIHBhcnQgc2hhcmVkLCBmcm96ZW4sIGFzXG4gKiBpdCBpcy4gVW50aWwgOS40NC4yIGBzbmFwc2hvdC5jb21taXRMb2dbaV0ub3ZlcndyaXRlLndoZW4uc2V0VGltZSgwKWAgcmV3cm90ZSBldmVyeSBsYXRlciBzbmFwc2hvdCxcbiAqIGBzdGF0ZUF0YCwgYGNvbW1pdFZhbHVlQXRgLCBzbGljZSBhbmQgY3Vyc29yIGFuc3dlci5cbiAqXG4gKiBFdmVyeSB3YWxrIGhlcmUgaXMgSVRFUkFUSVZFIChhbiBleHBsaWNpdCBzdGFjayk6IGEgcmVjb3JkJ3MgZGVwdGggaXMgbm90IGJvdW5kZWQgYnkgdGhlIGNhbGwgc3RhY2suXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGltcG9ydCB7IGRlZXBGcmVlemUsIGZyZWV6ZVJlY29yZCwgc2VydmVSZWNvcmQgfSBmcm9tICcuL2ZyZWV6ZS5qcyc7XG4gKlxuICogY29uc3QgYXJncyA9IGRlZXBGcmVlemUoeyBvcmRlcjogeyBsaW5lczogW3sgc2t1OiAnQScgfV0gfSwgYnl0ZXM6IG5ldyBVaW50OEFycmF5KFsxXSkgfSk7XG4gKiBPYmplY3QuaXNGcm96ZW4oYXJncy5vcmRlci5saW5lc1swXSk7IC8vIHRydWVcbiAqIE9iamVjdC5pc0Zyb3plbihhcmdzLmJ5dGVzKTsgLy8gZmFsc2Ug4oCUIGEgdHlwZWQgYXJyYXkgY2Fubm90IGJlIGZyb3plbjsgaXQgaXMgc2tpcHBlZFxuICpcbiAqIGNvbnN0IHJlY29yZCA9IGZyZWV6ZVJlY29yZCh7IHdoZW46IG5ldyBEYXRlKDApLCB0YWdzOiBbJ2EnXSB9KTtcbiAqIGNvbnN0IHNlcnZlZCA9IHNlcnZlUmVjb3JkKHJlY29yZCk7XG4gKiBzZXJ2ZWQud2hlbi5zZXRUaW1lKDUpOyAvLyBjaGFuZ2VzIHRoZSByZWFkZXIncyBjb3B5XG4gKiBzZXJ2ZVJlY29yZChyZWNvcmQpLndoZW4uZ2V0VGltZSgpOyAvLyAwIOKAlCBldmVyeSBzZXJ2ZSBpcyB0aGUgcmVjb3JkIGFzIHJlY29yZGVkXG4gKiBzZXJ2ZWQudGFncyA9PT0gcmVjb3JkLnRhZ3M7IC8vIHRydWUg4oCUIHRoZSBzZWFsZWQgcGFydCBpcyBzaGFyZWQsIG5vdCBjb3BpZWRcbiAqIHNlcnZlUmVjb3JkKGZyZWV6ZVJlY29yZCh7IG46IDEgfSkpOyAvLyBhIHJlY29yZCBmcmVlemluZyBzZWFsZWQgd2hvbGU6IHNlcnZlZCBhcyBpdHNlbGZcbiAqIGBgYFxuICovXG5cbmltcG9ydCB7IGtpbmRPZiwgU0VBTEFCTEUgfSBmcm9tICcuL3ZhbHVlS2luZHMuanMnO1xuXG4vKipcbiAqIEhvdyB7QGxpbmsgZGVlcEZyZWV6ZX0gd2Fsa3MgYW4gQVJSQVkuXG4gKlxuICogLSBgJ2V2ZXJ5LWtleSdgICh0aGUgZGVmYXVsdCkg4oCUIGV2ZXJ5IG93biBwcm9wZXJ0eSwgYXMgZm9yIGFueSBvdGhlciBvYmplY3Q6IHRoZSBpbmRleCBlbGVtZW50c1xuICogICBBTkQgYW55IGV4cGFuZG8gKGBhcnIubm90ZSA9IHsg4oCmIH1gKS4gVGhlIGRldi1tb2RlIHNuYXBzaG90IHJlbGllcyBvbiB0aGlzIGNvbnRyYWN0LlxuICogLSBgJ2luZGljZXMnYCDigJQgdGhlIGluZGV4IGVsZW1lbnRzIG9ubHksIHNvIG5vIGtleSBzdHJpbmcgaXMgYWxsb2NhdGVkIHBlciBlbGVtZW50OyB0aGlzIGlzIHdoYXRcbiAqICAga2VlcHMgZnJlZXppbmcgYSAxMCwwMDAtZWxlbWVudCBjb21taXQgaW5zaWRlIGl0cyBidWRnZXQgKGBiZW5jaC9lbGVtZW50LXdyaXRlcy50c2ApLiBBbiBvYmplY3RcbiAqICAgaHVuZyBvbiBhbiBhcnJheSBFWFBBTkRPIGlzIHRoZW4gbGVmdCB1bmZyb3plbiwgYW5kIHVuc2VlbiBieSB7QGxpbmsgc2VydmVSZWNvcmR9IOKAlCB0aGUgY29tbWl0XG4gKiAgIGxvZydzIG5hbWVkIGhvbGUgKGBFdmVudExvZyDCtyByZWNvcmRgOyBhbiBhcnJheSBleHBhbmRvIGlzIG91dCBvZiBjb250cmFjdCBmb3Igc3RhdGUpLlxuICovXG5leHBvcnQgdHlwZSBBcnJheVdhbGsgPSAnZXZlcnkta2V5JyB8ICdpbmRpY2VzJztcblxuLyoqXG4gKiBGcmVlemVzIGBvYmpgIGFuZCBldmVyeSBvYmplY3QgcmVhY2hhYmxlIHRocm91Z2ggaXRzIG93biBwcm9wZXJ0aWVzLCBhbmQgcmV0dXJucyBgb2JqYC5cbiAqXG4gKiAtIEFuIG9iamVjdCB0aGF0IGlzIEFMUkVBRFkgZnJvemVuIGlzIGxlZnQgYXMgaXQgaXMsIGFuZCBub3QgZGVzY2VuZGVkIOKAlCA5LjMyLjAncyBjb250cmFjdCwga2VwdDpcbiAqICAgYXJncyBtYXkgaG9sZCBhIGNhbGxlcidzIGZyb3plbiBvYmplY3Qgd2l0aCBsaXZlIHBhcnRzIGluc2lkZSAoYSBjbGFzcyBpbnN0YW5jZSBhIHN0YWdlIGNhbGxzKSxcbiAqICAgYW5kIGZyZWV6aW5nIHBhc3QgaXQgd291bGQgYnJlYWsgdGhlbS4gSXQgaXMgYWxzbyB3aGF0IGVuZHMgYSBjeWNsZS4gVGhlIGNvbW1pdCBsb2cgbmV2ZXIgbWVldHNcbiAqICAgb25lOiBpdHMgcGF5bG9hZHMgYXJlIGZyZXNoIGBzdHJ1Y3R1cmVkQ2xvbmVgcy5cbiAqIC0gQXJyYXlCdWZmZXIgdmlld3MgKHR5cGVkIGFycmF5cywgYERhdGFWaWV3YCkgYXJlIHNraXBwZWQ6IGBPYmplY3QuZnJlZXplYCB0aHJvd3Mgb24gYSBub24tZW1wdHlcbiAqICAgdHlwZWQgYXJyYXksIHNvIGEgYFVpbnQ4QXJyYXlgIGluIHN0YXRlLCBhcmdzIG9yIHRoZSBmb2xkIGJhc2UgdXNlZCB0byBmYWlsIHRoZSBydW4gb3IgdGhlXG4gKiAgIHNuYXBzaG90IGhlcmUuXG4gKiAtIFdoYXQgYE9iamVjdC5mcmVlemVgIGNhbm5vdCByZWFjaCBzdGF5cyBtdXRhYmxlIOKAlCBNYXAgYW5kIFNldCBjb250ZW50cywgYSBEYXRlJ3MgdGltZSwgdGhlXG4gKiAgIGJ5dGVzIGJlaGluZCBhIGJ1ZmZlci4gQSBmcm96ZW4gUmVnRXhwJ3MgYGxhc3RJbmRleGAgaXMgcmVhZC1vbmx5LCBzbyBhIGAvZ2Agb3IgYC95YCByZWdleFxuICogICB0YWtlbiBmcm9tIGEgZnJvemVuIHRyZWUgdGhyb3dzIHdoZW4gYGV4ZWNgIG9yIGByZXBsYWNlYCBhZHZhbmNlIGl0LiBUaGUgY29tbWl0IGxvZyBnb2VzIHRocm91Z2hcbiAqICAge0BsaW5rIGZyZWV6ZVJlY29yZH0gYW5kIHtAbGluayBzZXJ2ZVJlY29yZH0gaW5zdGVhZC5cbiAqIC0gRnVuY3Rpb25zIGFyZSBub3QgZGVzY2VuZGVkICh0aGV5IGFyZSBub3QgdmFsdWVzIHRoZSBlbmdpbmUgc3RvcmVzKS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlZXBGcmVlemU8VD4ob2JqOiBULCBhcnJheXM6IEFycmF5V2FsayA9ICdldmVyeS1rZXknKTogVCB7XG4gIGlmIChvYmogIT09IG51bGwgJiYgdHlwZW9mIG9iaiA9PT0gJ29iamVjdCcpIHdhbGtBbmRGcmVlemUob2JqLCBhcnJheXMgPT09ICdpbmRpY2VzJywgZmFsc2UpO1xuICByZXR1cm4gb2JqO1xufVxuXG4vKipcbiAqIENvbnRhaW5lcnMgb2YgYSByZWNvcmQgdGhhdCBob2xkIOKAlCBvbiBzb21lIHBhdGggYmVsb3cgdGhlbSDigJQgYSB2YWx1ZSBmcmVlemluZyBjYW5ub3Qgc2VhbDogYHRydWVgIG9uY2VcbiAqIG1hcHBlZCAodGhlIGNvbnRhaW5lciBpcyBvbiBhbiBvcGVuIHBhdGgpLCBgZmFsc2VgIGZvciBhIHJlY29yZCB7QGxpbmsgZnJlZXplUmVjb3JkfSBmb3VuZCBvcGVuIHdob3NlXG4gKiBwYXRocyBubyBzZXJ2ZSBoYXMgbWFwcGVkIHlldC4gQSBjb250YWluZXIgYWJzZW50IGhlcmUgaXMgc2VhbGVkIHdob2xlLlxuICovXG5jb25zdCBPUEVOID0gbmV3IFdlYWtNYXA8b2JqZWN0LCBib29sZWFuPigpO1xuXG4vKipcbiAqIHtAbGluayBkZWVwRnJlZXplfSBmb3IgYSByZWNvcmQgbWFueSByZWFkZXJzIGFyZSBTRVJWRUQgKGEgY29tbWl0IGJ1bmRsZSwgdGhlIGZvbGQgYmFzZSksIGFuZCB0d28gbW9yZVxuICogdGhpbmdzIG9uIHRoZSBzYW1lIHdhbGs6XG4gKlxuICogICAtIGl0IHJlbWVtYmVycyBUSEFUIHRoZSByZWNvcmQgaG9sZHMgYSB2YWx1ZSBmcmVlemluZyBjYW5ub3Qgc2VhbCDigJQgb25lIGZsYWc7IHRoZSByZWNvcmQncyBmaXJzdFxuICogICAgIHNlcnZlIG1hcHMgV0hFUkUgKHRoZSBjb250YWluZXJzIG9uIHRoZSB3YXkgdG8gZWFjaCBzdWNoIHZhbHVlLCBpdHMgb3BlbiBwYXRocyksIHNvIHRoZSBydW4gcGF5c1xuICogICAgIG5vdGhpbmcgbW9yZSBhbmQge0BsaW5rIHNlcnZlUmVjb3JkfSBjb3BpZXMgdGhvc2UgcGF0aHMgYW5kIG5vdGhpbmcgZWxzZTtcbiAqICAgLSBhIHR5cGVkIGFycmF5IG9yIGBEYXRhVmlld2AgdGhhdCB2aWV3cyBhIFNMSUNFIG9mIGEgYmlnZ2VyIGJ1ZmZlciAoYSBOb2RlIGBCdWZmZXJgIHZpZXdzIGl0c1xuICogICAgIHNoYXJlZCBwb29sKSBpcyByZXBsYWNlZCwgaW4gdGhlIHJlY29yZCwgYnkgYSBjb3B5IG9mIHRoZSBieXRlcyBpdCB2aWV3cyDigJQgdGhlIHJlY29yZCBrZWVwcyB0aGVcbiAqICAgICB2aWV3J3MgYnl0ZXMsIG5ldmVyIHRoZSByZXN0IG9mIHRoZSBidWZmZXIgKGEgcmVzaXphYmxlIG9yIHNoYXJlZCBidWZmZXIgaXMga2VwdCBhcyBpdCBpcykuXG4gKlxuICogQSBwYXJ0IGZyb3plbiBiZWZvcmUgaXMgbm90IGZyb3plbiBwYXN0IChkZWVwRnJlZXplJ3MgY29udHJhY3QpIGJ1dCBpcyBsb29rZWQgdGhyb3VnaCwgc28gYSB2YWx1ZVxuICogZnJlZXppbmcgY2Fubm90IHNlYWwgaW5zaWRlIGl0IHN0aWxsIG9wZW5zIHRoZSByZWNvcmQuIFJldHVybnMgYHJlY29yZGAuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmcmVlemVSZWNvcmQ8VCBleHRlbmRzIG9iamVjdD4ocmVjb3JkOiBULCBhcnJheXM6IEFycmF5V2FsayA9ICdldmVyeS1rZXknKTogVCB7XG4gIGlmICghT1BFTi5oYXMocmVjb3JkKSAmJiB3YWxrQW5kRnJlZXplKHJlY29yZCwgYXJyYXlzID09PSAnaW5kaWNlcycsIHRydWUpKSBPUEVOLnNldChyZWNvcmQsIGZhbHNlKTtcbiAgcmV0dXJuIHJlY29yZDtcbn1cblxuLyoqXG4gKiBUaGUgcmVjb3JkIGFzIGEgcmVhZGVyIG1heSBob2xkIGl0IOKAlCBUSEUgc2VydmUtdGltZSBsYXc6IGEgcmVjb3JkIGZyZWV6aW5nIHNlYWxlZCB3aG9sZSBpcyBzZXJ2ZWQgYXNcbiAqIGl0c2VsZiAoc2hhcmVkLCBubyBjb3N0KTsgYW55IG90aGVyIGFzIGEgY29weSBvZiBpdHMgb3BlbiBwYXRocyAoe0BsaW5rIGZyZWV6ZVJlY29yZH0pOiBmcmVzaCBmcm96ZW5cbiAqIGNvbnRhaW5lcnMgZG93biB0byBlYWNoIHZhbHVlIGZyZWV6aW5nIGNhbm5vdCBzZWFsLCBhIGZyZXNoIGNvcHkgb2YgdGhhdCB2YWx1ZSwgYW5kIGV2ZXJ5IG90aGVyIHBhcnRcbiAqIHNoYXJlZCwgZnJvemVuLCBhcyBpdCBpcy4gQSBjb3B5IGlzIHNlcnZlZCB0aGUgc2FtZSB3YXkgYWdhaW4uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXJ2ZVJlY29yZDxUPihyZWNvcmQ6IFQpOiBUIHtcbiAgaWYgKHJlY29yZCA9PT0gbnVsbCB8fCB0eXBlb2YgcmVjb3JkICE9PSAnb2JqZWN0JykgcmV0dXJuIHJlY29yZDtcbiAgY29uc3QgbWFwcGVkID0gT1BFTi5nZXQocmVjb3JkKTtcbiAgaWYgKG1hcHBlZCA9PT0gdW5kZWZpbmVkKSByZXR1cm4gcmVjb3JkO1xuICBpZiAoIW1hcHBlZCkgbWFwT3BlblBhdGhzKHJlY29yZCk7XG4gIHJldHVybiBPUEVOLmdldChyZWNvcmQpID09PSB0cnVlID8gKGNvcHlPcGVuUGF0aHMocmVjb3JkKSBhcyBUKSA6IHJlY29yZDtcbn1cblxuLyoqIEEgdmFsdWUgZnJlZXppbmcgY2Fubm90IHNlYWwg4oCUIGEgdmlldywgb3IgYSBraW5kIGBTRUFMQUJMRWAgc2F5cyBubyB0byAoYSBEYXRlLCBhIE1hcCwgYW4gRXJyb3Ig4oCmKS4gKi9cbmZ1bmN0aW9uIGlzVW5zZWFsYWJsZSh2YWx1ZTogb2JqZWN0KTogYm9vbGVhbiB7XG4gIHJldHVybiBBcnJheUJ1ZmZlci5pc1ZpZXcodmFsdWUpIHx8ICFTRUFMQUJMRVtraW5kT2YodmFsdWUpXTtcbn1cblxuLyoqXG4gKiBGcmVlemUgYHJvb3RgIGFuZCBldmVyeSBjb250YWluZXIgdW5kZXIgaXQsIGl0ZXJhdGl2ZWx5OyBgcmVjb3JkYCBhZGRzIHRoZSBsb29rLXRocm91Z2ggb2YgcGFydHNcbiAqIGZyb3plbiBiZWZvcmUgYW5kIHRoZSBjb21wYWN0aW9uIG9mIHZpZXdzIG92ZXIgYSBzbGljZS4gYHRydWVgIHdoZW4gc29tZXRoaW5nIHVuZGVyIGByb290YCAob3IgYHJvb3RgXG4gKiBpdHNlbGYpIGNhbm5vdCBiZSBzZWFsZWQuXG4gKi9cbmZ1bmN0aW9uIHdhbGtBbmRGcmVlemUocm9vdDogb2JqZWN0LCBpbmRpY2VzOiBib29sZWFuLCByZWNvcmQ6IGJvb2xlYW4pOiBib29sZWFuIHtcbiAgbGV0IG9wZW4gPSBmYWxzZTtcbiAgbGV0IGxvb2tlZFRocm91Z2g6IFNldDxvYmplY3Q+IHwgdW5kZWZpbmVkO1xuICBjb25zdCBzdGFjazogb2JqZWN0W10gPSBbcm9vdF07XG4gIHdoaWxlIChzdGFjay5sZW5ndGggPiAwKSB7XG4gICAgY29uc3Qgbm9kZSA9IHN0YWNrLnBvcCgpITtcbiAgICBpZiAoQXJyYXlCdWZmZXIuaXNWaWV3KG5vZGUpKSB7XG4gICAgICBvcGVuID0gdHJ1ZTsgLy8gaXRzIGJ5dGVzIOKAlCBhbmQgYSBub24tZW1wdHkgb25lIGNhbm5vdCBiZSBmcm96ZW4gYXQgYWxsXG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgY29uc3QgZnJvemVuQmVmb3JlID0gT2JqZWN0LmlzRnJvemVuKG5vZGUpO1xuICAgIGlmIChmcm96ZW5CZWZvcmUpIHtcbiAgICAgIGlmICghcmVjb3JkIHx8IE9QRU4uaGFzKG5vZGUpKSB7XG4gICAgICAgIG9wZW4gfHw9IHJlY29yZDtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBpZiAoKGxvb2tlZFRocm91Z2ggPz89IG5ldyBTZXQoKSkuaGFzKG5vZGUpKSBjb250aW51ZTtcbiAgICAgIGxvb2tlZFRocm91Z2guYWRkKG5vZGUpOyAvLyBhIHBhcnQgZnJvemVuIGJlZm9yZTogbG9va2VkIHRocm91Z2gsIG5ldmVyIGZyb3plbiBwYXN0XG4gICAgfVxuICAgIGlmIChyZWNvcmQgJiYgIW9wZW4gJiYgIVNFQUxBQkxFW2tpbmRPZihub2RlKV0pIG9wZW4gPSB0cnVlO1xuICAgIC8vIENoaWxkcmVuIGZpcnN0LCB3aGlsZSBgbm9kZWAgaXMgc3RpbGwgb3BlbiB0byB0aGUgY29tcGFjdGlvbiBiZWxvdzsgdGhlbiB0aGUgZnJlZXplLlxuICAgIGNvbnN0IGNvbXBhY3RpbmcgPSByZWNvcmQgJiYgIWZyb3plbkJlZm9yZTtcbiAgICBpZiAoaW5kaWNlcyAmJiBBcnJheS5pc0FycmF5KG5vZGUpKSB7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5vZGUubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgY2hpbGQ6IHVua25vd24gPSBub2RlW2ldO1xuICAgICAgICBpZiAoY2hpbGQgPT09IG51bGwgfHwgdHlwZW9mIGNoaWxkICE9PSAnb2JqZWN0JykgY29udGludWU7XG4gICAgICAgIHN0YWNrLnB1c2goY29tcGFjdGluZyAmJiBBcnJheUJ1ZmZlci5pc1ZpZXcoY2hpbGQpID8gY29tcGFjdChub2RlLCBpLCBjaGlsZCkgOiBjaGlsZCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IG5hbWVzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMobm9kZSk7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5hbWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGNoaWxkID0gKG5vZGUgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pW25hbWVzW2ldXTtcbiAgICAgICAgaWYgKGNoaWxkID09PSBudWxsIHx8IHR5cGVvZiBjaGlsZCAhPT0gJ29iamVjdCcpIGNvbnRpbnVlO1xuICAgICAgICBzdGFjay5wdXNoKGNvbXBhY3RpbmcgJiYgQXJyYXlCdWZmZXIuaXNWaWV3KGNoaWxkKSA/IGNvbXBhY3Qobm9kZSwgbmFtZXNbaV0sIGNoaWxkKSA6IGNoaWxkKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKCFmcm96ZW5CZWZvcmUpIE9iamVjdC5mcmVlemUobm9kZSk7XG4gIH1cbiAgcmV0dXJuIG9wZW47XG59XG5cbi8qKlxuICogQSB2aWV3IG92ZXIgYSBTTElDRSBvZiBhIGJpZ2dlciBidWZmZXIsIHJlcGxhY2VkIGluIGBjb250YWluZXJgIGJ5IGEgY29weSBvZiB0aGUgYnl0ZXMgaXQgdmlld3NcbiAqICh0aGUgdHlwZSBpdCBpcyDigJQgYSBOb2RlIGBCdWZmZXJgIGNvbWVzIG91dCBhIGBVaW50OEFycmF5YCwgYXMgYSBjbG9uZSBvZiBpdCBkb2VzKS4gQW55dGhpbmcgZWxzZSBpc1xuICogcmV0dXJuZWQgYXMgaXQgaXMuIEEgcmVzaXphYmxlIG9yIHNoYXJlZCBidWZmZXIgaXMga2VwdDogYSBjb3B5IHdvdWxkIGNoYW5nZSB3aGF0IGl0IGlzLlxuICovXG5mdW5jdGlvbiBjb21wYWN0KGNvbnRhaW5lcjogb2JqZWN0LCBrZXk6IHN0cmluZyB8IG51bWJlciwgY2hpbGQ6IEFycmF5QnVmZmVyVmlldyk6IG9iamVjdCB7XG4gIGNvbnN0IGJ1ZmZlciA9IGNoaWxkLmJ1ZmZlciBhcyBBcnJheUJ1ZmZlciAmIHsgcmVzaXphYmxlPzogYm9vbGVhbiB9O1xuICBpZiAoY2hpbGQuYnl0ZU9mZnNldCA9PT0gMCAmJiBjaGlsZC5ieXRlTGVuZ3RoID09PSBidWZmZXIuYnl0ZUxlbmd0aCkgcmV0dXJuIGNoaWxkO1xuICBpZiAoYnVmZmVyLnJlc2l6YWJsZSA9PT0gdHJ1ZSB8fCAhKGJ1ZmZlciBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKSkgcmV0dXJuIGNoaWxkO1xuICBjb25zdCBieXRlcyA9IGJ1ZmZlci5zbGljZShjaGlsZC5ieXRlT2Zmc2V0LCBjaGlsZC5ieXRlT2Zmc2V0ICsgY2hpbGQuYnl0ZUxlbmd0aCk7XG4gIGNvbnN0IHRhZyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChjaGlsZCkuc2xpY2UoOCwgLTEpO1xuICBjb25zdCBDdG9yID0gKGdsb2JhbFRoaXMgYXMgdW5rbm93biBhcyBSZWNvcmQ8c3RyaW5nLCBuZXcgKGJ1ZmZlcjogQXJyYXlCdWZmZXIpID0+IEFycmF5QnVmZmVyVmlldz4pW3RhZ107XG4gIGlmICh0eXBlb2YgQ3RvciAhPT0gJ2Z1bmN0aW9uJykgcmV0dXJuIGNoaWxkO1xuICBjb25zdCBjb3B5ID0gbmV3IEN0b3IoYnl0ZXMpO1xuICB0cnkge1xuICAgIChjb250YWluZXIgYXMgUmVjb3JkPHN0cmluZyB8IG51bWJlciwgdW5rbm93bj4pW2tleV0gPSBjb3B5O1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gY2hpbGQ7IC8vIGEgcHJvcGVydHkgdGhlIHJlY29yZCBkb2VzIG5vdCBsZXQgYmUgcmVwbGFjZWQgKGEgaGFuZC1idWlsdCBidW5kbGUpXG4gIH1cbiAgcmV0dXJuIGNvcHk7XG59XG5cbi8qKlxuICogTWFwIHRoZSBvcGVuIHBhdGhzIG9mIGByb290YCDigJQgbWFyayBldmVyeSBjb250YWluZXIgdGhhdCByZWFjaGVzIGEgdmFsdWUgZnJlZXppbmcgY2Fubm90IHNlYWwsIHNvIGFcbiAqIHNlcnZlIGNvcGllcyBleGFjdGx5IHRob3NlIChEQUdzIGFuZCBjeWNsZXMgaW5jbHVkZWQ6IHRoZSBtYXJrcyBydW4gVVAgdGhlIHJldmVyc2UgZWRnZXMgZnJvbSBlYWNoXG4gKiBzdWNoIHZhbHVlKS4gUnVucyBvbmNlIHBlciBvcGVuIHJlY29yZCwgYXQgaXRzIGZpcnN0IHNlcnZlLiBBIG5vZGUncyBmaXJzdCBob2xkZXIgaXMga2VwdCBpbiBvbmUgbWFwO1xuICogYW55IG90aGVyIGhvbGRlciAoYSBzaGFyZWQgcGFydCwgYSBjeWNsZSkgaW4gYSBzZWNvbmQsIG1hZGUgb25seSB3aGVuIHRoZXJlIGlzIG9uZS5cbiAqL1xuZnVuY3Rpb24gbWFwT3BlblBhdGhzKHJvb3Q6IG9iamVjdCk6IHZvaWQge1xuICBjb25zdCBob2xkZXIgPSBuZXcgTWFwPG9iamVjdCwgb2JqZWN0PigpO1xuICBsZXQgbW9yZUhvbGRlcnM6IE1hcDxvYmplY3QsIG9iamVjdFtdPiB8IHVuZGVmaW5lZDtcbiAgY29uc3QgbGVhdmVzOiBvYmplY3RbXSA9IFtdO1xuICBjb25zdCBzdGFjazogb2JqZWN0W10gPSBbcm9vdF07XG4gIHdoaWxlIChzdGFjay5sZW5ndGggPiAwKSB7XG4gICAgY29uc3Qgbm9kZSA9IHN0YWNrLnBvcCgpITtcbiAgICBpZiAoaXNVbnNlYWxhYmxlKG5vZGUpKSB7XG4gICAgICBsZWF2ZXMucHVzaChub2RlKTsgLy8gYSBsZWFmOiBpdHMgY29udGVudHMgYXJlIGNvcGllZCB3aXRoIGl0XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgY29uc3QgbmFtZXMgPSBPYmplY3Qua2V5cyhub2RlKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5hbWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBjaGlsZCA9IChub2RlIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KVtuYW1lc1tpXV07XG4gICAgICBpZiAoY2hpbGQgPT09IG51bGwgfHwgdHlwZW9mIGNoaWxkICE9PSAnb2JqZWN0JykgY29udGludWU7XG4gICAgICBpZiAoY2hpbGQgIT09IHJvb3QgJiYgIWhvbGRlci5oYXMoY2hpbGQpKSB7XG4gICAgICAgIGhvbGRlci5zZXQoY2hpbGQsIG5vZGUpO1xuICAgICAgICBzdGFjay5wdXNoKGNoaWxkKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBjb25zdCBtb3JlID0gKG1vcmVIb2xkZXJzID8/PSBuZXcgTWFwKCkpLmdldChjaGlsZCk7XG4gICAgICBpZiAobW9yZSA9PT0gdW5kZWZpbmVkKSBtb3JlSG9sZGVycy5zZXQoY2hpbGQsIFtub2RlXSk7XG4gICAgICBlbHNlIG1vcmUucHVzaChub2RlKTtcbiAgICB9XG4gIH1cbiAgLy8gTWFya2VkIGluIFRISVMgbWFwLCBub3QgYnkgYW4gZWFybGllciBvbmU6IGEgcGFydCBhbm90aGVyIHJlY29yZCBhbHJlYWR5IG1hcHBlZCBzdGlsbCBvcGVuc1xuICAvLyBldmVyeSBjb250YWluZXIgb2YgdGhpcyByZWNvcmQgb24gdGhlIHdheSB0byBpdC5cbiAgY29uc3QgbWFya2VkID0gbmV3IFNldDxvYmplY3Q+KCk7XG4gIGNvbnN0IHVwOiBvYmplY3RbXSA9IFtdO1xuICBjb25zdCBob2xkZXJzT2YgPSAobm9kZTogb2JqZWN0KTogdm9pZCA9PiB7XG4gICAgY29uc3QgZmlyc3QgPSBob2xkZXIuZ2V0KG5vZGUpO1xuICAgIGlmIChmaXJzdCAhPT0gdW5kZWZpbmVkKSB1cC5wdXNoKGZpcnN0KTtcbiAgICBjb25zdCBtb3JlID0gbW9yZUhvbGRlcnM/LmdldChub2RlKTtcbiAgICAvLyBPbmUgcHVzaCBwZXIgaG9sZGVyOiBhIHNwcmVhZCBwYXNzZXMgZXZlcnkgaG9sZGVyIGFzIGEgY2FsbCBhcmd1bWVudCwgYW5kIG9uZSBvYmplY3QgaGVsZCBieVxuICAgIC8vIDEyMCwwMDAgY29udGFpbmVycyBvdmVyZmxvd2VkIHRoZSBzdGFjay5cbiAgICBpZiAobW9yZSAhPT0gdW5kZWZpbmVkKSBmb3IgKGxldCBpID0gMDsgaSA8IG1vcmUubGVuZ3RoOyBpKyspIHVwLnB1c2gobW9yZVtpXSk7XG4gIH07XG4gIGZvciAoY29uc3QgbGVhZiBvZiBsZWF2ZXMpIHtcbiAgICBpZiAobGVhZiA9PT0gcm9vdCkgbWFya2VkLmFkZChyb290KTtcbiAgICBob2xkZXJzT2YobGVhZik7XG4gIH1cbiAgd2hpbGUgKHVwLmxlbmd0aCA+IDApIHtcbiAgICBjb25zdCBub2RlID0gdXAucG9wKCkhO1xuICAgIGlmIChtYXJrZWQuaGFzKG5vZGUpKSBjb250aW51ZTtcbiAgICBtYXJrZWQuYWRkKG5vZGUpO1xuICAgIGhvbGRlcnNPZihub2RlKTtcbiAgfVxuICAvLyBPbmx5IG5vdywgdGhlIHdhbGsgZG9uZSwgZG9lcyB0aGUgcmVjb3JkJ3MgZmxhZyBnaXZlIHdheSB0byBpdHMgbWFwOiBhIG1hcHBpbmcgdGhhdCB0aHJvd3MgbGVhdmVzXG4gIC8vIHRoZSByZWNvcmQgZmxhZ2dlZCwgc28gdGhlIG5leHQgc2VydmUgbWFwcyBhZ2FpbiDigJQgaXQgbmV2ZXIgaGFuZHMgb3V0IHRoZSByZWNvcmQgaXRzZWxmLlxuICBpZiAoIW1hcmtlZC5oYXMocm9vdCkpIE9QRU4uZGVsZXRlKHJvb3QpO1xuICBmb3IgKGNvbnN0IG5vZGUgb2YgbWFya2VkKSBPUEVOLnNldChub2RlLCB0cnVlKTtcbn1cblxuLyoqXG4gKiBUaGUgc2VydmVkIGNvcHkgb2YgYW4gb3BlbiByZWNvcmQ6IGl0cyBvcGVuIGNvbnRhaW5lcnMgY29waWVkIChmcmVzaCwgdGhlbiBmcm96ZW4sIGFuZCB0aGVtc2VsdmVzXG4gKiBvcGVuIOKAlCBhIGNvcHkgaXMgc2VydmVkIGJ5IGNvcHkgYWdhaW4pLCBlYWNoIHZhbHVlIGZyZWV6aW5nIGNhbm5vdCBzZWFsIGNvcGllZCwgZXZlcnkgc2VhbGVkIHBhcnRcbiAqIHNoYXJlZC4gSXRlcmF0aXZlOyBvbmUgY29weSBwZXIgb3JpZ2luYWwsIHNvIGNvbnRhaW5lcnMgc2hhcmVkIG9yIGN5Y2xpYyBzdGF5IHNoYXJlZCBpbiB0aGUgY29weS4gVGhlXG4gKiB2YWx1ZXMgZnJlZXppbmcgY2Fubm90IHNlYWwgYXJlIGNvcGllZCBPTkUgQlkgT05FOiB0d28gb2YgdGhlbSB0aGF0IHNoYXJlIGEgcGFydCAoYW4gYEFycmF5QnVmZmVyYFxuICogYW5kIGEgdmlldyBvZiBpdCwgYW4gZXJyb3Igd2hvc2UgYGNhdXNlYCBpcyBhbm90aGVyIGtleSdzIERhdGUpIGNvbWUgb3V0IGFzIHNlcGFyYXRlIGNvcGllcyDigJQgZXF1YWxcbiAqIHZhbHVlcywgdGhlIHNoYXJpbmcgYmV0d2VlbiB0aGVtIG5vdCBrZXB0LlxuICovXG5mdW5jdGlvbiBjb3B5T3BlblBhdGhzKHJvb3Q6IG9iamVjdCk6IG9iamVjdCB7XG4gIGNvbnN0IGNvcGllcyA9IG5ldyBNYXA8b2JqZWN0LCBvYmplY3Q+KCk7XG4gIGNvbnN0IHNoZWxsczogb2JqZWN0W10gPSBbXTtcbiAgY29uc3QgY29weU9mID0gKHZhbHVlOiBvYmplY3QsIHBlbmRpbmc6IG9iamVjdFtdKTogb2JqZWN0ID0+IHtcbiAgICBjb25zdCBkb25lID0gY29waWVzLmdldCh2YWx1ZSk7XG4gICAgaWYgKGRvbmUgIT09IHVuZGVmaW5lZCkgcmV0dXJuIGRvbmU7XG4gICAgbGV0IGNvcHk6IG9iamVjdDtcbiAgICBpZiAoaXNVbnNlYWxhYmxlKHZhbHVlKSkge1xuICAgICAgY29weSA9IGNvcHlMZWFmKHZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29weSA9IEFycmF5LmlzQXJyYXkodmFsdWUpID8gbmV3IEFycmF5KHZhbHVlLmxlbmd0aCkgOiB7fTtcbiAgICAgIHNoZWxscy5wdXNoKGNvcHkpO1xuICAgICAgcGVuZGluZy5wdXNoKHZhbHVlKTtcbiAgICB9XG4gICAgY29waWVzLnNldCh2YWx1ZSwgY29weSk7XG4gICAgcmV0dXJuIGNvcHk7XG4gIH07XG4gIGNvbnN0IHBlbmRpbmc6IG9iamVjdFtdID0gW107XG4gIGNvbnN0IG91dCA9IGNvcHlPZihyb290LCBwZW5kaW5nKTtcbiAgd2hpbGUgKHBlbmRpbmcubGVuZ3RoID4gMCkge1xuICAgIGNvbnN0IG5vZGUgPSBwZW5kaW5nLnBvcCgpITtcbiAgICBjb25zdCBjb3B5ID0gY29waWVzLmdldChub2RlKSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICBmb3IgKGNvbnN0IG5hbWUgb2YgT2JqZWN0LmtleXMobm9kZSkpIHtcbiAgICAgIGNvbnN0IGNoaWxkID0gKG5vZGUgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pW25hbWVdO1xuICAgICAgcHV0T3duKFxuICAgICAgICBjb3B5LFxuICAgICAgICBuYW1lLFxuICAgICAgICBjaGlsZCAhPT0gbnVsbCAmJiB0eXBlb2YgY2hpbGQgPT09ICdvYmplY3QnICYmIChPUEVOLmhhcyhjaGlsZCkgfHwgaXNVbnNlYWxhYmxlKGNoaWxkKSlcbiAgICAgICAgICA/IGNvcHlPZihjaGlsZCwgcGVuZGluZylcbiAgICAgICAgICA6IGNoaWxkLFxuICAgICAgKTtcbiAgICB9XG4gIH1cbiAgZm9yIChjb25zdCBzaGVsbCBvZiBzaGVsbHMpIHtcbiAgICBPYmplY3QuZnJlZXplKHNoZWxsKTtcbiAgICBPUEVOLnNldChzaGVsbCwgdHJ1ZSk7XG4gIH1cbiAgLy8gQSBsZWFmIGNvcHkgaXMgdGhlIHJlYWRlcidzIG93bjsgZnJvemVuIHdoZXJlIGZyZWV6aW5nIHJlYWNoZXMsIGFzIHRoZSByZWNvcmQncyBwYXJ0cyBhcmUuXG4gIGZvciAoY29uc3QgY29weSBvZiBjb3BpZXMudmFsdWVzKCkpIGlmICghQXJyYXlCdWZmZXIuaXNWaWV3KGNvcHkpKSBPYmplY3QuZnJlZXplKGNvcHkpO1xuICByZXR1cm4gb3V0O1xufVxuXG4vKipcbiAqIGB0YXJnZXRbbmFtZV0gPSB2YWx1ZWAsIGFzIGFuIE9XTiBkYXRhIHByb3BlcnR5LiBBIGtleSB0aGUgc2hlbGwgb25seSBpbmhlcml0cyDigJQgYW4gb3duIGBcIl9fcHJvdG9fX1wiYFxuICogb2YgdGhlIHJlY29yZCAoYEpTT04ucGFyc2VgIG1ha2VzIG9uZSkg4oCUIHdvdWxkIGNhbGwgdGhlIGluaGVyaXRlZCBzZXR0ZXIgYW5kIHJlLXBhcmVudCB0aGUgY29weTsgaXQgaXNcbiAqIGRlZmluZWQgYXMgZGF0YSBpbnN0ZWFkLCBhcyBgbWVtb3J5L21lcmdlLnRzIMK3IG1lcmdlR3VhcmRlZGAga2VlcHMgaXQuXG4gKi9cbmZ1bmN0aW9uIHB1dE93bih0YXJnZXQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LCBuYW1lOiBzdHJpbmcsIHZhbHVlOiB1bmtub3duKTogdm9pZCB7XG4gIGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRhcmdldCwgbmFtZSkgJiYgUmVmbGVjdC5oYXModGFyZ2V0LCBuYW1lKSkge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIG5hbWUsIHsgdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSk7XG4gIH0gZWxzZSB7XG4gICAgdGFyZ2V0W25hbWVdID0gdmFsdWU7XG4gIH1cbn1cblxuLyoqIEEgZnJlc2ggY29weSBvZiBhIHZhbHVlIGZyZWV6aW5nIGNhbm5vdCBzZWFsLiBPbmUgdGhlIGNsb25lIHJlZnVzZXMgKGhhbmQtYnVpbHQpIGlzIHNlcnZlZCBhcyBpdCBpcy4gKi9cbmZ1bmN0aW9uIGNvcHlMZWFmKHZhbHVlOiBvYmplY3QpOiBvYmplY3Qge1xuICBpZiAoa2luZE9mKHZhbHVlKSA9PT0gJ2RhdGUnKSByZXR1cm4gbmV3IERhdGUoRGF0ZS5wcm90b3R5cGUuZ2V0VGltZS5jYWxsKHZhbHVlKSk7XG4gIHRyeSB7XG4gICAgcmV0dXJuIHN0cnVjdHVyZWRDbG9uZSh2YWx1ZSk7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxufVxuIl19
314
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnJlZXplLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9jYXB0dXJlL2ZyZWV6ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXdDRztBQUVILE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDdEMsT0FBTyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQWNuRDs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFDSCxNQUFNLFVBQVUsVUFBVSxDQUFJLEdBQU0sRUFBRSxTQUFvQixXQUFXO0lBQ25FLElBQUksR0FBRyxLQUFLLElBQUksSUFBSSxPQUFPLEdBQUcsS0FBSyxRQUFRO1FBQUUsYUFBYSxDQUFDLEdBQUcsRUFBRSxNQUFNLEtBQUssU0FBUyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQzdGLE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxNQUFNLElBQUksR0FBRyxJQUFJLE9BQU8sRUFBbUIsQ0FBQztBQUU1Qzs7Ozs7Ozs7Ozs7OztHQWFHO0FBQ0gsTUFBTSxVQUFVLFlBQVksQ0FBbUIsTUFBUyxFQUFFLFNBQW9CLFdBQVc7SUFDdkYsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLElBQUksYUFBYSxDQUFDLE1BQU0sRUFBRSxNQUFNLEtBQUssU0FBUyxFQUFFLElBQUksQ0FBQztRQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ3BHLE9BQU8sTUFBTSxDQUFDO0FBQ2hCLENBQUM7QUFFRDs7Ozs7R0FLRztBQUNILE1BQU0sVUFBVSxXQUFXLENBQUksTUFBUztJQUN0QyxJQUFJLE1BQU0sS0FBSyxJQUFJLElBQUksT0FBTyxNQUFNLEtBQUssUUFBUTtRQUFFLE9BQU8sTUFBTSxDQUFD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IChtb3ZlZCBoZXJlIGZyb20gYHNjb3BlL3Byb3RlY3Rpb24vcmVhZG9ubHlJbnB1dC50c2AgaW4gRjMpLFxuICogYW5kIHRoZSBzZXJ2ZS10aW1lIGxhdyBmb3IgdGhlIGNvbW1pdCBsb2cgKDkuNDQuMikuXG4gKlxuICogV0hZIEhFUkUuIFNhdmVkIHRyZWVzIGZyZWV6ZSB0aHJvdWdoIHRoaXMgd2FsazogdGhlIGZvbGQgYmFzZSBzZXJ2ZWQgYXNcbiAqIGBpbml0aWFsU3RhdGVgIChgRXhlY3V0aW9uUnVudGltZSDCtyBnZXRGb2xkQmFzZWApLCB0aGVcbiAqIGRldi1tb2RlIHNuYXBzaG90IChgcnVubmVyL3NuYXBzaG90LnRzIMK3IHNlcnZlZFNuYXBzaG90YCksIGV2ZXJ5IHN0YXRlIGBzdGF0ZUF0YCBoYW5kcyBvdXRcbiAqIChgdGltZS10cmF2ZWwvc3RhdGVBdC50c2ApIGFuZCwgc2luY2UgRjMsIGV2ZXJ5IGNvbW1pdCBidW5kbGUgKGBFdmVudExvZyDCtyByZWNvcmRgKS4gYG1lbW9yeS9gIG11c3RcbiAqIG5vdCBpbXBvcnQgYHNjb3BlL2AgKHRoYXQgZWRnZSBjbG9zZWQgdGhlIG1lbW9yeSDih4Qgc2NvcGUg4oeEIHJlY29yZGVyIG1vZHVsZSBjeWNsZSBGMCByZW1vdmVkKSwgc28gdGhlXG4gKiB3YWxrIGxpdmVzIGluIHRoaXMgbGVhZiBmb2xkZXIsIHdoaWNoIGltcG9ydHMgbm90aGluZyBvdXRzaWRlIGl0c2VsZi4gQXJncyB1c2UgYW4gb3duZXJzaGlwIHNuYXBzaG90XG4gKiBpbnN0ZWFkIChgc2NvcGUvcHJvdGVjdGlvbi9yZWFkb25seUlucHV0LnRzIMK3IGNyZWF0ZUZyb3plbkFyZ3NgKTogbmV2ZXIgZnJlZXplIGJvcnJvd2VkIGNhbGxlciB2YWx1ZXMuXG4gKlxuICogRlJFRVpFIFdIQVQgQ0FOIEJFIEZST1pFTiwgQ09QWSBXSEFUIENBTidUICg5LjQ0LjIpLiBgT2JqZWN0LmZyZWV6ZWAgY2Fubm90IHNlYWwgYSBEYXRlJ3MgdGltZSwgYVxuICogTWFwJ3Mgb3IgU2V0J3MgZW50cmllcywgYSBidWZmZXIncyBieXRlcywgYSBSZWdFeHAgKGBjb21waWxlKClgIHJld3JpdGVzIGEgZnJvemVuIG9uZSkgb3IgYW4gRXJyb3JcbiAqIChWOCdzIG93biBgc3RhY2tgIGFjY2Vzc29yIHdyaXRlcyB0aHJvdWdoIGEgZnJvemVuIG9uZSkuIEEgZnJlc2ggdHJlZSBoYW5kZWQgdG8gb25lIGNhbGxlciAoYSBgc3RhdGVBdGBcbiAqIHN0YXRlLCB0aGUgZGV2LW1vZGUgc25hcHNob3QpIGlzIHRoYXQgY2FsbGVyJ3Mgb3duLCBzbyBmcmVlemluZyBpdCBpcyBhIGd1YXJkIGFuZCBub3RoaW5nIG1vcmUuIFRoZVxuICogQ09NTUlUIExPRyDigJQgZWFjaCBidW5kbGUsIGFuZCB0aGUgZm9sZCBiYXNlIOKAlCBpcyBzZXJ2ZWQgdG8gZXZlcnkgcmVhZGVyLCBzbyB7QGxpbmsgZnJlZXplUmVjb3JkfVxuICogcmVtZW1iZXJzIHRoYXQgYSByZWNvcmQgaG9sZHMgc3VjaCBhIHZhbHVlLCBpdHMgZmlyc3Qgc2VydmUgbWFwcyB0aGUgY29udGFpbmVycyBvbiB0aGUgd2F5IHRvIGVhY2hcbiAqIG9uZSAoaXRzIG9wZW4gUEFUSFMpLCBhbmQge0BsaW5rIHNlcnZlUmVjb3JkfSBoYW5kcyBhIHJlYWRlciBhIGNvcHkgb2YgdGhvc2UgcGF0aHMgb25seTogYSBmcmVzaCBjb3B5XG4gKiBvZiBlYWNoIHN1Y2ggdmFsdWUsIGZyZXNoIGZyb3plbiBjb250YWluZXJzIG9uIHRoZSB3YXkgdG8gaXQsIGFuZCBldmVyeSBvdGhlciBwYXJ0IHNoYXJlZCwgZnJvemVuLCBhc1xuICogaXQgaXMuIFVudGlsIDkuNDQuMiBgc25hcHNob3QuY29tbWl0TG9nW2ldLm92ZXJ3cml0ZS53aGVuLnNldFRpbWUoMClgIHJld3JvdGUgZXZlcnkgbGF0ZXIgc25hcHNob3QsXG4gKiBgc3RhdGVBdGAsIGBjb21taXRWYWx1ZUF0YCwgc2xpY2UgYW5kIGN1cnNvciBhbnN3ZXIuXG4gKlxuICogRXZlcnkgd2FsayBoZXJlIGlzIElURVJBVElWRSAoYW4gZXhwbGljaXQgc3RhY2spOiBhIHJlY29yZCdzIGRlcHRoIGlzIG5vdCBib3VuZGVkIGJ5IHRoZSBjYWxsIHN0YWNrLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBpbXBvcnQgeyBkZWVwRnJlZXplLCBmcmVlemVSZWNvcmQsIHNlcnZlUmVjb3JkIH0gZnJvbSAnLi9mcmVlemUuanMnO1xuICpcbiAqIGNvbnN0IGFyZ3MgPSBkZWVwRnJlZXplKHsgb3JkZXI6IHsgbGluZXM6IFt7IHNrdTogJ0EnIH1dIH0sIGJ5dGVzOiBuZXcgVWludDhBcnJheShbMV0pIH0pO1xuICogT2JqZWN0LmlzRnJvemVuKGFyZ3Mub3JkZXIubGluZXNbMF0pOyAvLyB0cnVlXG4gKiBPYmplY3QuaXNGcm96ZW4oYXJncy5ieXRlcyk7IC8vIGZhbHNlIOKAlCBhIHR5cGVkIGFycmF5IGNhbm5vdCBiZSBmcm96ZW47IGl0IGlzIHNraXBwZWRcbiAqXG4gKiBjb25zdCByZWNvcmQgPSBmcmVlemVSZWNvcmQoeyB3aGVuOiBuZXcgRGF0ZSgwKSwgdGFnczogWydhJ10gfSk7XG4gKiBjb25zdCBzZXJ2ZWQgPSBzZXJ2ZVJlY29yZChyZWNvcmQpO1xuICogc2VydmVkLndoZW4uc2V0VGltZSg1KTsgLy8gY2hhbmdlcyB0aGUgcmVhZGVyJ3MgY29weVxuICogc2VydmVSZWNvcmQocmVjb3JkKS53aGVuLmdldFRpbWUoKTsgLy8gMCDigJQgZXZlcnkgc2VydmUgaXMgdGhlIHJlY29yZCBhcyByZWNvcmRlZFxuICogc2VydmVkLnRhZ3MgPT09IHJlY29yZC50YWdzOyAvLyB0cnVlIOKAlCB0aGUgc2VhbGVkIHBhcnQgaXMgc2hhcmVkLCBub3QgY29waWVkXG4gKiBzZXJ2ZVJlY29yZChmcmVlemVSZWNvcmQoeyBuOiAxIH0pKTsgLy8gYSByZWNvcmQgZnJlZXppbmcgc2VhbGVkIHdob2xlOiBzZXJ2ZWQgYXMgaXRzZWxmXG4gKiBgYGBcbiAqL1xuXG5pbXBvcnQgeyBwdXRPd24gfSBmcm9tICcuL293bkRhdGEuanMnO1xuaW1wb3J0IHsga2luZE9mLCBTRUFMQUJMRSB9IGZyb20gJy4vdmFsdWVLaW5kcy5qcyc7XG5cbi8qKlxuICogSG93IHtAbGluayBkZWVwRnJlZXplfSB3YWxrcyBhbiBBUlJBWS5cbiAqXG4gKiAtIGAnZXZlcnkta2V5J2AgKHRoZSBkZWZhdWx0KSDigJQgZXZlcnkgb3duIHByb3BlcnR5LCBhcyBmb3IgYW55IG90aGVyIG9iamVjdDogdGhlIGluZGV4IGVsZW1lbnRzXG4gKiAgIEFORCBhbnkgZXhwYW5kbyAoYGFyci5ub3RlID0geyDigKYgfWApLiBUaGUgZGV2LW1vZGUgc25hcHNob3QgcmVsaWVzIG9uIHRoaXMgY29udHJhY3QuXG4gKiAtIGAnaW5kaWNlcydgIOKAlCB0aGUgaW5kZXggZWxlbWVudHMgb25seSwgc28gbm8ga2V5IHN0cmluZyBpcyBhbGxvY2F0ZWQgcGVyIGVsZW1lbnQ7IHRoaXMgaXMgd2hhdFxuICogICBrZWVwcyBmcmVlemluZyBhIDEwLDAwMC1lbGVtZW50IGNvbW1pdCBpbnNpZGUgaXRzIGJ1ZGdldCAoYGJlbmNoL2VsZW1lbnQtd3JpdGVzLnRzYCkuIEFuIG9iamVjdFxuICogICBodW5nIG9uIGFuIGFycmF5IEVYUEFORE8gaXMgdGhlbiBsZWZ0IHVuZnJvemVuLCBhbmQgdW5zZWVuIGJ5IHtAbGluayBzZXJ2ZVJlY29yZH0g4oCUIHRoZSBjb21taXRcbiAqICAgbG9nJ3MgbmFtZWQgaG9sZSAoYEV2ZW50TG9nIMK3IHJlY29yZGA7IGFuIGFycmF5IGV4cGFuZG8gaXMgb3V0IG9mIGNvbnRyYWN0IGZvciBzdGF0ZSkuXG4gKi9cbmV4cG9ydCB0eXBlIEFycmF5V2FsayA9ICdldmVyeS1rZXknIHwgJ2luZGljZXMnO1xuXG4vKipcbiAqIEZyZWV6ZXMgYG9iamAgYW5kIGV2ZXJ5IG9iamVjdCByZWFjaGFibGUgdGhyb3VnaCBpdHMgb3duIHByb3BlcnRpZXMsIGFuZCByZXR1cm5zIGBvYmpgLlxuICpcbiAqIC0gQW4gb2JqZWN0IHRoYXQgaXMgQUxSRUFEWSBmcm96ZW4gaXMgbGVmdCBhcyBpdCBpcywgYW5kIG5vdCBkZXNjZW5kZWQg4oCUIDkuMzIuMCdzIGNvbnRyYWN0LCBrZXB0OlxuICogICBhcmdzIG1heSBob2xkIGEgY2FsbGVyJ3MgZnJvemVuIG9iamVjdCB3aXRoIGxpdmUgcGFydHMgaW5zaWRlIChhIGNsYXNzIGluc3RhbmNlIGEgc3RhZ2UgY2FsbHMpLFxuICogICBhbmQgZnJlZXppbmcgcGFzdCBpdCB3b3VsZCBicmVhayB0aGVtLiBJdCBpcyBhbHNvIHdoYXQgZW5kcyBhIGN5Y2xlLiBUaGUgY29tbWl0IGxvZyBuZXZlciBtZWV0c1xuICogICBvbmU6IGl0cyBwYXlsb2FkcyBhcmUgZnJlc2ggYHN0cnVjdHVyZWRDbG9uZWBzLlxuICogLSBBcnJheUJ1ZmZlciB2aWV3cyAodHlwZWQgYXJyYXlzLCBgRGF0YVZpZXdgKSBhcmUgc2tpcHBlZDogYE9iamVjdC5mcmVlemVgIHRocm93cyBvbiBhIG5vbi1lbXB0eVxuICogICB0eXBlZCBhcnJheSwgc28gYSBgVWludDhBcnJheWAgaW4gc3RhdGUsIGFyZ3Mgb3IgdGhlIGZvbGQgYmFzZSB1c2VkIHRvIGZhaWwgdGhlIHJ1biBvciB0aGVcbiAqICAgc25hcHNob3QgaGVyZS5cbiAqIC0gV2hhdCBgT2JqZWN0LmZyZWV6ZWAgY2Fubm90IHJlYWNoIHN0YXlzIG11dGFibGUg4oCUIE1hcCBhbmQgU2V0IGNvbnRlbnRzLCBhIERhdGUncyB0aW1lLCB0aGVcbiAqICAgYnl0ZXMgYmVoaW5kIGEgYnVmZmVyLiBBIGZyb3plbiBSZWdFeHAncyBgbGFzdEluZGV4YCBpcyByZWFkLW9ubHksIHNvIGEgYC9nYCBvciBgL3lgIHJlZ2V4XG4gKiAgIHRha2VuIGZyb20gYSBmcm96ZW4gdHJlZSB0aHJvd3Mgd2hlbiBgZXhlY2Agb3IgYHJlcGxhY2VgIGFkdmFuY2UgaXQuIFRoZSBjb21taXQgbG9nIGdvZXMgdGhyb3VnaFxuICogICB7QGxpbmsgZnJlZXplUmVjb3JkfSBhbmQge0BsaW5rIHNlcnZlUmVjb3JkfSBpbnN0ZWFkLlxuICogLSBGdW5jdGlvbnMgYXJlIG5vdCBkZXNjZW5kZWQgKHRoZXkgYXJlIG5vdCB2YWx1ZXMgdGhlIGVuZ2luZSBzdG9yZXMpLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVlcEZyZWV6ZTxUPihvYmo6IFQsIGFycmF5czogQXJyYXlXYWxrID0gJ2V2ZXJ5LWtleScpOiBUIHtcbiAgaWYgKG9iaiAhPT0gbnVsbCAmJiB0eXBlb2Ygb2JqID09PSAnb2JqZWN0Jykgd2Fsa0FuZEZyZWV6ZShvYmosIGFycmF5cyA9PT0gJ2luZGljZXMnLCBmYWxzZSk7XG4gIHJldHVybiBvYmo7XG59XG5cbi8qKlxuICogQ29udGFpbmVycyBvZiBhIHJlY29yZCB0aGF0IGhvbGQg4oCUIG9uIHNvbWUgcGF0aCBiZWxvdyB0aGVtIOKAlCBhIHZhbHVlIGZyZWV6aW5nIGNhbm5vdCBzZWFsOiBgdHJ1ZWAgb25jZVxuICogbWFwcGVkICh0aGUgY29udGFpbmVyIGlzIG9uIGFuIG9wZW4gcGF0aCksIGBmYWxzZWAgZm9yIGEgcmVjb3JkIHtAbGluayBmcmVlemVSZWNvcmR9IGZvdW5kIG9wZW4gd2hvc2VcbiAqIHBhdGhzIG5vIHNlcnZlIGhhcyBtYXBwZWQgeWV0LiBBIGNvbnRhaW5lciBhYnNlbnQgaGVyZSBpcyBzZWFsZWQgd2hvbGUuXG4gKi9cbmNvbnN0IE9QRU4gPSBuZXcgV2Vha01hcDxvYmplY3QsIGJvb2xlYW4+KCk7XG5cbi8qKlxuICoge0BsaW5rIGRlZXBGcmVlemV9IGZvciBhIHJlY29yZCBtYW55IHJlYWRlcnMgYXJlIFNFUlZFRCAoYSBjb21taXQgYnVuZGxlLCB0aGUgZm9sZCBiYXNlKSwgYW5kIHR3byBtb3JlXG4gKiB0aGluZ3Mgb24gdGhlIHNhbWUgd2FsazpcbiAqXG4gKiAgIC0gaXQgcmVtZW1iZXJzIFRIQVQgdGhlIHJlY29yZCBob2xkcyBhIHZhbHVlIGZyZWV6aW5nIGNhbm5vdCBzZWFsIOKAlCBvbmUgZmxhZzsgdGhlIHJlY29yZCdzIGZpcnN0XG4gKiAgICAgc2VydmUgbWFwcyBXSEVSRSAodGhlIGNvbnRhaW5lcnMgb24gdGhlIHdheSB0byBlYWNoIHN1Y2ggdmFsdWUsIGl0cyBvcGVuIHBhdGhzKSwgc28gdGhlIHJ1biBwYXlzXG4gKiAgICAgbm90aGluZyBtb3JlIGFuZCB7QGxpbmsgc2VydmVSZWNvcmR9IGNvcGllcyB0aG9zZSBwYXRocyBhbmQgbm90aGluZyBlbHNlO1xuICogICAtIGEgdHlwZWQgYXJyYXkgb3IgYERhdGFWaWV3YCB0aGF0IHZpZXdzIGEgU0xJQ0Ugb2YgYSBiaWdnZXIgYnVmZmVyIChhIE5vZGUgYEJ1ZmZlcmAgdmlld3MgaXRzXG4gKiAgICAgc2hhcmVkIHBvb2wpIGlzIHJlcGxhY2VkLCBpbiB0aGUgcmVjb3JkLCBieSBhIGNvcHkgb2YgdGhlIGJ5dGVzIGl0IHZpZXdzIOKAlCB0aGUgcmVjb3JkIGtlZXBzIHRoZVxuICogICAgIHZpZXcncyBieXRlcywgbmV2ZXIgdGhlIHJlc3Qgb2YgdGhlIGJ1ZmZlciAoYSByZXNpemFibGUgb3Igc2hhcmVkIGJ1ZmZlciBpcyBrZXB0IGFzIGl0IGlzKS5cbiAqXG4gKiBBIHBhcnQgZnJvemVuIGJlZm9yZSBpcyBub3QgZnJvemVuIHBhc3QgKGRlZXBGcmVlemUncyBjb250cmFjdCkgYnV0IGlzIGxvb2tlZCB0aHJvdWdoLCBzbyBhIHZhbHVlXG4gKiBmcmVlemluZyBjYW5ub3Qgc2VhbCBpbnNpZGUgaXQgc3RpbGwgb3BlbnMgdGhlIHJlY29yZC4gUmV0dXJucyBgcmVjb3JkYC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZyZWV6ZVJlY29yZDxUIGV4dGVuZHMgb2JqZWN0PihyZWNvcmQ6IFQsIGFycmF5czogQXJyYXlXYWxrID0gJ2V2ZXJ5LWtleScpOiBUIHtcbiAgaWYgKCFPUEVOLmhhcyhyZWNvcmQpICYmIHdhbGtBbmRGcmVlemUocmVjb3JkLCBhcnJheXMgPT09ICdpbmRpY2VzJywgdHJ1ZSkpIE9QRU4uc2V0KHJlY29yZCwgZmFsc2UpO1xuICByZXR1cm4gcmVjb3JkO1xufVxuXG4vKipcbiAqIFRoZSByZWNvcmQgYXMgYSByZWFkZXIgbWF5IGhvbGQgaXQg4oCUIFRIRSBzZXJ2ZS10aW1lIGxhdzogYSByZWNvcmQgZnJlZXppbmcgc2VhbGVkIHdob2xlIGlzIHNlcnZlZCBhc1xuICogaXRzZWxmIChzaGFyZWQsIG5vIGNvc3QpOyBhbnkgb3RoZXIgYXMgYSBjb3B5IG9mIGl0cyBvcGVuIHBhdGhzICh7QGxpbmsgZnJlZXplUmVjb3JkfSk6IGZyZXNoIGZyb3plblxuICogY29udGFpbmVycyBkb3duIHRvIGVhY2ggdmFsdWUgZnJlZXppbmcgY2Fubm90IHNlYWwsIGEgZnJlc2ggY29weSBvZiB0aGF0IHZhbHVlLCBhbmQgZXZlcnkgb3RoZXIgcGFydFxuICogc2hhcmVkLCBmcm96ZW4sIGFzIGl0IGlzLiBBIGNvcHkgaXMgc2VydmVkIHRoZSBzYW1lIHdheSBhZ2Fpbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNlcnZlUmVjb3JkPFQ+KHJlY29yZDogVCk6IFQge1xuICBpZiAocmVjb3JkID09PSBudWxsIHx8IHR5cGVvZiByZWNvcmQgIT09ICdvYmplY3QnKSByZXR1cm4gcmVjb3JkO1xuICBjb25zdCBtYXBwZWQgPSBPUEVOLmdldChyZWNvcmQpO1xuICBpZiAobWFwcGVkID09PSB1bmRlZmluZWQpIHJldHVybiByZWNvcmQ7XG4gIGlmICghbWFwcGVkKSBtYXBPcGVuUGF0aHMocmVjb3JkKTtcbiAgcmV0dXJuIE9QRU4uZ2V0KHJlY29yZCkgPT09IHRydWUgPyAoY29weU9wZW5QYXRocyhyZWNvcmQpIGFzIFQpIDogcmVjb3JkO1xufVxuXG4vKiogQSB2YWx1ZSBmcmVlemluZyBjYW5ub3Qgc2VhbCDigJQgYSB2aWV3LCBvciBhIGtpbmQgYFNFQUxBQkxFYCBzYXlzIG5vIHRvIChhIERhdGUsIGEgTWFwLCBhbiBFcnJvciDigKYpLiAqL1xuZnVuY3Rpb24gaXNVbnNlYWxhYmxlKHZhbHVlOiBvYmplY3QpOiBib29sZWFuIHtcbiAgcmV0dXJuIEFycmF5QnVmZmVyLmlzVmlldyh2YWx1ZSkgfHwgIVNFQUxBQkxFW2tpbmRPZih2YWx1ZSldO1xufVxuXG4vKipcbiAqIEZyZWV6ZSBgcm9vdGAgYW5kIGV2ZXJ5IGNvbnRhaW5lciB1bmRlciBpdCwgaXRlcmF0aXZlbHk7IGByZWNvcmRgIGFkZHMgdGhlIGxvb2stdGhyb3VnaCBvZiBwYXJ0c1xuICogZnJvemVuIGJlZm9yZSBhbmQgdGhlIGNvbXBhY3Rpb24gb2Ygdmlld3Mgb3ZlciBhIHNsaWNlLiBgdHJ1ZWAgd2hlbiBzb21ldGhpbmcgdW5kZXIgYHJvb3RgIChvciBgcm9vdGBcbiAqIGl0c2VsZikgY2Fubm90IGJlIHNlYWxlZC5cbiAqL1xuZnVuY3Rpb24gd2Fsa0FuZEZyZWV6ZShyb290OiBvYmplY3QsIGluZGljZXM6IGJvb2xlYW4sIHJlY29yZDogYm9vbGVhbik6IGJvb2xlYW4ge1xuICBsZXQgb3BlbiA9IGZhbHNlO1xuICBsZXQgbG9va2VkVGhyb3VnaDogU2V0PG9iamVjdD4gfCB1bmRlZmluZWQ7XG4gIGNvbnN0IHN0YWNrOiBvYmplY3RbXSA9IFtyb290XTtcbiAgd2hpbGUgKHN0YWNrLmxlbmd0aCA+IDApIHtcbiAgICBjb25zdCBub2RlID0gc3RhY2sucG9wKCkhO1xuICAgIGlmIChBcnJheUJ1ZmZlci5pc1ZpZXcobm9kZSkpIHtcbiAgICAgIG9wZW4gPSB0cnVlOyAvLyBpdHMgYnl0ZXMg4oCUIGFuZCBhIG5vbi1lbXB0eSBvbmUgY2Fubm90IGJlIGZyb3plbiBhdCBhbGxcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBjb25zdCBmcm96ZW5CZWZvcmUgPSBPYmplY3QuaXNGcm96ZW4obm9kZSk7XG4gICAgaWYgKGZyb3plbkJlZm9yZSkge1xuICAgICAgaWYgKCFyZWNvcmQgfHwgT1BFTi5oYXMobm9kZSkpIHtcbiAgICAgICAgb3BlbiB8fD0gcmVjb3JkO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmICgobG9va2VkVGhyb3VnaCA/Pz0gbmV3IFNldCgpKS5oYXMobm9kZSkpIGNvbnRpbnVlO1xuICAgICAgbG9va2VkVGhyb3VnaC5hZGQobm9kZSk7IC8vIGEgcGFydCBmcm96ZW4gYmVmb3JlOiBsb29rZWQgdGhyb3VnaCwgbmV2ZXIgZnJvemVuIHBhc3RcbiAgICB9XG4gICAgaWYgKHJlY29yZCAmJiAhb3BlbiAmJiAhU0VBTEFCTEVba2luZE9mKG5vZGUpXSkgb3BlbiA9IHRydWU7XG4gICAgLy8gQ2hpbGRyZW4gZmlyc3QsIHdoaWxlIGBub2RlYCBpcyBzdGlsbCBvcGVuIHRvIHRoZSBjb21wYWN0aW9uIGJlbG93OyB0aGVuIHRoZSBmcmVlemUuXG4gICAgY29uc3QgY29tcGFjdGluZyA9IHJlY29yZCAmJiAhZnJvemVuQmVmb3JlO1xuICAgIGlmIChpbmRpY2VzICYmIEFycmF5LmlzQXJyYXkobm9kZSkpIHtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbm9kZS5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBjaGlsZDogdW5rbm93biA9IG5vZGVbaV07XG4gICAgICAgIGlmIChjaGlsZCA9PT0gbnVsbCB8fCB0eXBlb2YgY2hpbGQgIT09ICdvYmplY3QnKSBjb250aW51ZTtcbiAgICAgICAgc3RhY2sucHVzaChjb21wYWN0aW5nICYmIEFycmF5QnVmZmVyLmlzVmlldyhjaGlsZCkgPyBjb21wYWN0KG5vZGUsIGksIGNoaWxkKSA6IGNoaWxkKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgbmFtZXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhub2RlKTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbmFtZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgY2hpbGQgPSAobm9kZSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPilbbmFtZXNbaV1dO1xuICAgICAgICBpZiAoY2hpbGQgPT09IG51bGwgfHwgdHlwZW9mIGNoaWxkICE9PSAnb2JqZWN0JykgY29udGludWU7XG4gICAgICAgIHN0YWNrLnB1c2goY29tcGFjdGluZyAmJiBBcnJheUJ1ZmZlci5pc1ZpZXcoY2hpbGQpID8gY29tcGFjdChub2RlLCBuYW1lc1tpXSwgY2hpbGQpIDogY2hpbGQpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoIWZyb3plbkJlZm9yZSkgT2JqZWN0LmZyZWV6ZShub2RlKTtcbiAgfVxuICByZXR1cm4gb3Blbjtcbn1cblxuLyoqXG4gKiBBIHZpZXcgb3ZlciBhIFNMSUNFIG9mIGEgYmlnZ2VyIGJ1ZmZlciwgcmVwbGFjZWQgaW4gYGNvbnRhaW5lcmAgYnkgYSBjb3B5IG9mIHRoZSBieXRlcyBpdCB2aWV3c1xuICogKHRoZSB0eXBlIGl0IGlzIOKAlCBhIE5vZGUgYEJ1ZmZlcmAgY29tZXMgb3V0IGEgYFVpbnQ4QXJyYXlgLCBhcyBhIGNsb25lIG9mIGl0IGRvZXMpLiBBbnl0aGluZyBlbHNlIGlzXG4gKiByZXR1cm5lZCBhcyBpdCBpcy4gQSByZXNpemFibGUgb3Igc2hhcmVkIGJ1ZmZlciBpcyBrZXB0OiBhIGNvcHkgd291bGQgY2hhbmdlIHdoYXQgaXQgaXMuXG4gKi9cbmZ1bmN0aW9uIGNvbXBhY3QoY29udGFpbmVyOiBvYmplY3QsIGtleTogc3RyaW5nIHwgbnVtYmVyLCBjaGlsZDogQXJyYXlCdWZmZXJWaWV3KTogb2JqZWN0IHtcbiAgY29uc3QgYnVmZmVyID0gY2hpbGQuYnVmZmVyIGFzIEFycmF5QnVmZmVyICYgeyByZXNpemFibGU/OiBib29sZWFuIH07XG4gIGlmIChjaGlsZC5ieXRlT2Zmc2V0ID09PSAwICYmIGNoaWxkLmJ5dGVMZW5ndGggPT09IGJ1ZmZlci5ieXRlTGVuZ3RoKSByZXR1cm4gY2hpbGQ7XG4gIGlmIChidWZmZXIucmVzaXphYmxlID09PSB0cnVlIHx8ICEoYnVmZmVyIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpKSByZXR1cm4gY2hpbGQ7XG4gIGNvbnN0IGJ5dGVzID0gYnVmZmVyLnNsaWNlKGNoaWxkLmJ5dGVPZmZzZXQsIGNoaWxkLmJ5dGVPZmZzZXQgKyBjaGlsZC5ieXRlTGVuZ3RoKTtcbiAgY29uc3QgdGFnID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGNoaWxkKS5zbGljZSg4LCAtMSk7XG4gIGNvbnN0IEN0b3IgPSAoZ2xvYmFsVGhpcyBhcyB1bmtub3duIGFzIFJlY29yZDxzdHJpbmcsIG5ldyAoYnVmZmVyOiBBcnJheUJ1ZmZlcikgPT4gQXJyYXlCdWZmZXJWaWV3PilbdGFnXTtcbiAgaWYgKHR5cGVvZiBDdG9yICE9PSAnZnVuY3Rpb24nKSByZXR1cm4gY2hpbGQ7XG4gIGNvbnN0IGNvcHkgPSBuZXcgQ3RvcihieXRlcyk7XG4gIHRyeSB7XG4gICAgKGNvbnRhaW5lciBhcyBSZWNvcmQ8c3RyaW5nIHwgbnVtYmVyLCB1bmtub3duPilba2V5XSA9IGNvcHk7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBjaGlsZDsgLy8gYSBwcm9wZXJ0eSB0aGUgcmVjb3JkIGRvZXMgbm90IGxldCBiZSByZXBsYWNlZCAoYSBoYW5kLWJ1aWx0IGJ1bmRsZSlcbiAgfVxuICByZXR1cm4gY29weTtcbn1cblxuLyoqXG4gKiBNYXAgdGhlIG9wZW4gcGF0aHMgb2YgYHJvb3RgIOKAlCBtYXJrIGV2ZXJ5IGNvbnRhaW5lciB0aGF0IHJlYWNoZXMgYSB2YWx1ZSBmcmVlemluZyBjYW5ub3Qgc2VhbCwgc28gYVxuICogc2VydmUgY29waWVzIGV4YWN0bHkgdGhvc2UgKERBR3MgYW5kIGN5Y2xlcyBpbmNsdWRlZDogdGhlIG1hcmtzIHJ1biBVUCB0aGUgcmV2ZXJzZSBlZGdlcyBmcm9tIGVhY2hcbiAqIHN1Y2ggdmFsdWUpLiBSdW5zIG9uY2UgcGVyIG9wZW4gcmVjb3JkLCBhdCBpdHMgZmlyc3Qgc2VydmUuIEEgbm9kZSdzIGZpcnN0IGhvbGRlciBpcyBrZXB0IGluIG9uZSBtYXA7XG4gKiBhbnkgb3RoZXIgaG9sZGVyIChhIHNoYXJlZCBwYXJ0LCBhIGN5Y2xlKSBpbiBhIHNlY29uZCwgbWFkZSBvbmx5IHdoZW4gdGhlcmUgaXMgb25lLlxuICovXG5mdW5jdGlvbiBtYXBPcGVuUGF0aHMocm9vdDogb2JqZWN0KTogdm9pZCB7XG4gIGNvbnN0IGhvbGRlciA9IG5ldyBNYXA8b2JqZWN0LCBvYmplY3Q+KCk7XG4gIGxldCBtb3JlSG9sZGVyczogTWFwPG9iamVjdCwgb2JqZWN0W10+IHwgdW5kZWZpbmVkO1xuICBjb25zdCBsZWF2ZXM6IG9iamVjdFtdID0gW107XG4gIGNvbnN0IHN0YWNrOiBvYmplY3RbXSA9IFtyb290XTtcbiAgd2hpbGUgKHN0YWNrLmxlbmd0aCA+IDApIHtcbiAgICBjb25zdCBub2RlID0gc3RhY2sucG9wKCkhO1xuICAgIGlmIChpc1Vuc2VhbGFibGUobm9kZSkpIHtcbiAgICAgIGxlYXZlcy5wdXNoKG5vZGUpOyAvLyBhIGxlYWY6IGl0cyBjb250ZW50cyBhcmUgY29waWVkIHdpdGggaXRcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBjb25zdCBuYW1lcyA9IE9iamVjdC5rZXlzKG5vZGUpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbmFtZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGNoaWxkID0gKG5vZGUgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pW25hbWVzW2ldXTtcbiAgICAgIGlmIChjaGlsZCA9PT0gbnVsbCB8fCB0eXBlb2YgY2hpbGQgIT09ICdvYmplY3QnKSBjb250aW51ZTtcbiAgICAgIGlmIChjaGlsZCAhPT0gcm9vdCAmJiAhaG9sZGVyLmhhcyhjaGlsZCkpIHtcbiAgICAgICAgaG9sZGVyLnNldChjaGlsZCwgbm9kZSk7XG4gICAgICAgIHN0YWNrLnB1c2goY2hpbGQpO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IG1vcmUgPSAobW9yZUhvbGRlcnMgPz89IG5ldyBNYXAoKSkuZ2V0KGNoaWxkKTtcbiAgICAgIGlmIChtb3JlID09PSB1bmRlZmluZWQpIG1vcmVIb2xkZXJzLnNldChjaGlsZCwgW25vZGVdKTtcbiAgICAgIGVsc2UgbW9yZS5wdXNoKG5vZGUpO1xuICAgIH1cbiAgfVxuICAvLyBNYXJrZWQgaW4gVEhJUyBtYXAsIG5vdCBieSBhbiBlYXJsaWVyIG9uZTogYSBwYXJ0IGFub3RoZXIgcmVjb3JkIGFscmVhZHkgbWFwcGVkIHN0aWxsIG9wZW5zXG4gIC8vIGV2ZXJ5IGNvbnRhaW5lciBvZiB0aGlzIHJlY29yZCBvbiB0aGUgd2F5IHRvIGl0LlxuICBjb25zdCBtYXJrZWQgPSBuZXcgU2V0PG9iamVjdD4oKTtcbiAgY29uc3QgdXA6IG9iamVjdFtdID0gW107XG4gIGNvbnN0IGhvbGRlcnNPZiA9IChub2RlOiBvYmplY3QpOiB2b2lkID0+IHtcbiAgICBjb25zdCBmaXJzdCA9IGhvbGRlci5nZXQobm9kZSk7XG4gICAgaWYgKGZpcnN0ICE9PSB1bmRlZmluZWQpIHVwLnB1c2goZmlyc3QpO1xuICAgIGNvbnN0IG1vcmUgPSBtb3JlSG9sZGVycz8uZ2V0KG5vZGUpO1xuICAgIC8vIE9uZSBwdXNoIHBlciBob2xkZXI6IGEgc3ByZWFkIHBhc3NlcyBldmVyeSBob2xkZXIgYXMgYSBjYWxsIGFyZ3VtZW50LCBhbmQgb25lIG9iamVjdCBoZWxkIGJ5XG4gICAgLy8gMTIwLDAwMCBjb250YWluZXJzIG92ZXJmbG93ZWQgdGhlIHN0YWNrLlxuICAgIGlmIChtb3JlICE9PSB1bmRlZmluZWQpIGZvciAobGV0IGkgPSAwOyBpIDwgbW9yZS5sZW5ndGg7IGkrKykgdXAucHVzaChtb3JlW2ldKTtcbiAgfTtcbiAgZm9yIChjb25zdCBsZWFmIG9mIGxlYXZlcykge1xuICAgIGlmIChsZWFmID09PSByb290KSBtYXJrZWQuYWRkKHJvb3QpO1xuICAgIGhvbGRlcnNPZihsZWFmKTtcbiAgfVxuICB3aGlsZSAodXAubGVuZ3RoID4gMCkge1xuICAgIGNvbnN0IG5vZGUgPSB1cC5wb3AoKSE7XG4gICAgaWYgKG1hcmtlZC5oYXMobm9kZSkpIGNvbnRpbnVlO1xuICAgIG1hcmtlZC5hZGQobm9kZSk7XG4gICAgaG9sZGVyc09mKG5vZGUpO1xuICB9XG4gIC8vIE9ubHkgbm93LCB0aGUgd2FsayBkb25lLCBkb2VzIHRoZSByZWNvcmQncyBmbGFnIGdpdmUgd2F5IHRvIGl0cyBtYXA6IGEgbWFwcGluZyB0aGF0IHRocm93cyBsZWF2ZXNcbiAgLy8gdGhlIHJlY29yZCBmbGFnZ2VkLCBzbyB0aGUgbmV4dCBzZXJ2ZSBtYXBzIGFnYWluIOKAlCBpdCBuZXZlciBoYW5kcyBvdXQgdGhlIHJlY29yZCBpdHNlbGYuXG4gIGlmICghbWFya2VkLmhhcyhyb290KSkgT1BFTi5kZWxldGUocm9vdCk7XG4gIGZvciAoY29uc3Qgbm9kZSBvZiBtYXJrZWQpIE9QRU4uc2V0KG5vZGUsIHRydWUpO1xufVxuXG4vKipcbiAqIFRoZSBzZXJ2ZWQgY29weSBvZiBhbiBvcGVuIHJlY29yZDogaXRzIG9wZW4gY29udGFpbmVycyBjb3BpZWQgKGZyZXNoLCB0aGVuIGZyb3plbiwgYW5kIHRoZW1zZWx2ZXNcbiAqIG9wZW4g4oCUIGEgY29weSBpcyBzZXJ2ZWQgYnkgY29weSBhZ2FpbiksIGVhY2ggdmFsdWUgZnJlZXppbmcgY2Fubm90IHNlYWwgY29waWVkLCBldmVyeSBzZWFsZWQgcGFydFxuICogc2hhcmVkLiBJdGVyYXRpdmU7IG9uZSBjb3B5IHBlciBvcmlnaW5hbCwgc28gY29udGFpbmVycyBzaGFyZWQgb3IgY3ljbGljIHN0YXkgc2hhcmVkIGluIHRoZSBjb3B5LiBUaGVcbiAqIHZhbHVlcyBmcmVlemluZyBjYW5ub3Qgc2VhbCBhcmUgY29waWVkIE9ORSBCWSBPTkU6IHR3byBvZiB0aGVtIHRoYXQgc2hhcmUgYSBwYXJ0IChhbiBgQXJyYXlCdWZmZXJgXG4gKiBhbmQgYSB2aWV3IG9mIGl0LCBhbiBlcnJvciB3aG9zZSBgY2F1c2VgIGlzIGFub3RoZXIga2V5J3MgRGF0ZSkgY29tZSBvdXQgYXMgc2VwYXJhdGUgY29waWVzIOKAlCBlcXVhbFxuICogdmFsdWVzLCB0aGUgc2hhcmluZyBiZXR3ZWVuIHRoZW0gbm90IGtlcHQuXG4gKi9cbmZ1bmN0aW9uIGNvcHlPcGVuUGF0aHMocm9vdDogb2JqZWN0KTogb2JqZWN0IHtcbiAgY29uc3QgY29waWVzID0gbmV3IE1hcDxvYmplY3QsIG9iamVjdD4oKTtcbiAgY29uc3Qgc2hlbGxzOiBvYmplY3RbXSA9IFtdO1xuICBjb25zdCBjb3B5T2YgPSAodmFsdWU6IG9iamVjdCwgcGVuZGluZzogb2JqZWN0W10pOiBvYmplY3QgPT4ge1xuICAgIGNvbnN0IGRvbmUgPSBjb3BpZXMuZ2V0KHZhbHVlKTtcbiAgICBpZiAoZG9uZSAhPT0gdW5kZWZpbmVkKSByZXR1cm4gZG9uZTtcbiAgICBsZXQgY29weTogb2JqZWN0O1xuICAgIGlmIChpc1Vuc2VhbGFibGUodmFsdWUpKSB7XG4gICAgICBjb3B5ID0gY29weUxlYWYodmFsdWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb3B5ID0gQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyBuZXcgQXJyYXkodmFsdWUubGVuZ3RoKSA6IHt9O1xuICAgICAgc2hlbGxzLnB1c2goY29weSk7XG4gICAgICBwZW5kaW5nLnB1c2godmFsdWUpO1xuICAgIH1cbiAgICBjb3BpZXMuc2V0KHZhbHVlLCBjb3B5KTtcbiAgICByZXR1cm4gY29weTtcbiAgfTtcbiAgY29uc3QgcGVuZGluZzogb2JqZWN0W10gPSBbXTtcbiAgY29uc3Qgb3V0ID0gY29weU9mKHJvb3QsIHBlbmRpbmcpO1xuICB3aGlsZSAocGVuZGluZy5sZW5ndGggPiAwKSB7XG4gICAgY29uc3Qgbm9kZSA9IHBlbmRpbmcucG9wKCkhO1xuICAgIGNvbnN0IGNvcHkgPSBjb3BpZXMuZ2V0KG5vZGUpIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgIGZvciAoY29uc3QgbmFtZSBvZiBPYmplY3Qua2V5cyhub2RlKSkge1xuICAgICAgY29uc3QgY2hpbGQgPSAobm9kZSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPilbbmFtZV07XG4gICAgICBwdXRPd24oXG4gICAgICAgIGNvcHksXG4gICAgICAgIG5hbWUsXG4gICAgICAgIGNoaWxkICE9PSBudWxsICYmIHR5cGVvZiBjaGlsZCA9PT0gJ29iamVjdCcgJiYgKE9QRU4uaGFzKGNoaWxkKSB8fCBpc1Vuc2VhbGFibGUoY2hpbGQpKVxuICAgICAgICAgID8gY29weU9mKGNoaWxkLCBwZW5kaW5nKVxuICAgICAgICAgIDogY2hpbGQsXG4gICAgICApO1xuICAgIH1cbiAgfVxuICBmb3IgKGNvbnN0IHNoZWxsIG9mIHNoZWxscykge1xuICAgIE9iamVjdC5mcmVlemUoc2hlbGwpO1xuICAgIE9QRU4uc2V0KHNoZWxsLCB0cnVlKTtcbiAgfVxuICAvLyBBIGxlYWYgY29weSBpcyB0aGUgcmVhZGVyJ3Mgb3duOyBmcm96ZW4gd2hlcmUgZnJlZXppbmcgcmVhY2hlcywgYXMgdGhlIHJlY29yZCdzIHBhcnRzIGFyZS5cbiAgZm9yIChjb25zdCBjb3B5IG9mIGNvcGllcy52YWx1ZXMoKSkgaWYgKCFBcnJheUJ1ZmZlci5pc1ZpZXcoY29weSkpIE9iamVjdC5mcmVlemUoY29weSk7XG4gIHJldHVybiBvdXQ7XG59XG5cbi8qKiBBIGZyZXNoIGNvcHkgb2YgYSB2YWx1ZSBmcmVlemluZyBjYW5ub3Qgc2VhbC4gT25lIHRoZSBjbG9uZSByZWZ1c2VzIChoYW5kLWJ1aWx0KSBpcyBzZXJ2ZWQgYXMgaXQgaXMuICovXG5mdW5jdGlvbiBjb3B5TGVhZih2YWx1ZTogb2JqZWN0KTogb2JqZWN0IHtcbiAgaWYgKGtpbmRPZih2YWx1ZSkgPT09ICdkYXRlJykgcmV0dXJuIG5ldyBEYXRlKERhdGUucHJvdG90eXBlLmdldFRpbWUuY2FsbCh2YWx1ZSkpO1xuICB0cnkge1xuICAgIHJldHVybiBzdHJ1Y3R1cmVkQ2xvbmUodmFsdWUpO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,18 @@
1
+ /**
2
+ * The private L0 owner of own-slot writes. Selector validation belongs to
3
+ * pathOps: payload names (including `__proto__`) are ordinary data here.
4
+ * Neither operation flattens an existing own accessor or changes its flags.
5
+ */
6
+ /**
7
+ * `target[name] = value`, preserving existing own-slot behavior while making
8
+ * a missing inherited name an OWN data property. Payload names such as
9
+ * `__proto__` are data, not setters or selector instructions. Shared by the
10
+ * record-serving and copy-on-write copies; this is not a public helper.
11
+ */
12
+ export declare function putOwn(target: Record<string, unknown>, name: string | number, value: unknown): void;
13
+ /**
14
+ * Nested diagnostic writers require a missing slot to be CREATED, not merely
15
+ * assigned. Keep that contract separate from putOwn: an out-of-range typed
16
+ * array index is an assignment no-op, but cannot be defined as an own slot.
17
+ */
18
+ export declare function setOwnValue(target: Record<string, unknown>, name: string | number, value: unknown): void;
@@ -0,0 +1,36 @@
1
+ /**
2
+ * The private L0 owner of own-slot writes. Selector validation belongs to
3
+ * pathOps: payload names (including `__proto__`) are ordinary data here.
4
+ * Neither operation flattens an existing own accessor or changes its flags.
5
+ */
6
+ /**
7
+ * `target[name] = value`, preserving existing own-slot behavior while making
8
+ * a missing inherited name an OWN data property. Payload names such as
9
+ * `__proto__` are data, not setters or selector instructions. Shared by the
10
+ * record-serving and copy-on-write copies; this is not a public helper.
11
+ */
12
+ export function putOwn(target, name, value) {
13
+ if (!Object.prototype.hasOwnProperty.call(target, name) && Reflect.has(target, name)) {
14
+ defineOwnData(target, name, value);
15
+ }
16
+ else {
17
+ target[name] = value;
18
+ }
19
+ }
20
+ /**
21
+ * Nested diagnostic writers require a missing slot to be CREATED, not merely
22
+ * assigned. Keep that contract separate from putOwn: an out-of-range typed
23
+ * array index is an assignment no-op, but cannot be defined as an own slot.
24
+ */
25
+ export function setOwnValue(target, name, value) {
26
+ if (Object.prototype.hasOwnProperty.call(target, name)) {
27
+ putOwn(target, name, value);
28
+ }
29
+ else {
30
+ defineOwnData(target, name, value);
31
+ }
32
+ }
33
+ function defineOwnData(target, name, value) {
34
+ Object.defineProperty(target, name, { value, enumerable: true, writable: true, configurable: true });
35
+ }
36
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3duRGF0YS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvY2FwdHVyZS9vd25EYXRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7O0dBSUc7QUFFSDs7Ozs7R0FLRztBQUNILE1BQU0sVUFBVSxNQUFNLENBQUMsTUFBK0IsRUFBRSxJQUFxQixFQUFFLEtBQWM7SUFDM0YsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQztRQUNyRixhQUFhLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNyQyxDQUFDO1NBQU0sQ0FBQztRQUNOLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUM7SUFDdkIsQ0FBQztBQUNILENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLFdBQVcsQ0FBQyxNQUErQixFQUFFLElBQXFCLEVBQUUsS0FBYztJQUNoRyxJQUFJLE1BQU0sQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQztRQUN2RCxNQUFNLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztJQUM5QixDQUFDO1NBQU0sQ0FBQztRQUNOLGFBQWEsQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ3JDLENBQUM7QUFDSCxDQUFDO0FBRUQsU0FBUyxhQUFhLENBQUMsTUFBK0IsRUFBRSxJQUFxQixFQUFFLEtBQWM7SUFDM0YsTUFBTSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxZQUFZLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztBQUN2RyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBUaGUgcHJpdmF0ZSBMMCBvd25lciBvZiBvd24tc2xvdCB3cml0ZXMuIFNlbGVjdG9yIHZhbGlkYXRpb24gYmVsb25ncyB0b1xuICogcGF0aE9wczogcGF5bG9hZCBuYW1lcyAoaW5jbHVkaW5nIGBfX3Byb3RvX19gKSBhcmUgb3JkaW5hcnkgZGF0YSBoZXJlLlxuICogTmVpdGhlciBvcGVyYXRpb24gZmxhdHRlbnMgYW4gZXhpc3Rpbmcgb3duIGFjY2Vzc29yIG9yIGNoYW5nZXMgaXRzIGZsYWdzLlxuICovXG5cbi8qKlxuICogYHRhcmdldFtuYW1lXSA9IHZhbHVlYCwgcHJlc2VydmluZyBleGlzdGluZyBvd24tc2xvdCBiZWhhdmlvciB3aGlsZSBtYWtpbmdcbiAqIGEgbWlzc2luZyBpbmhlcml0ZWQgbmFtZSBhbiBPV04gZGF0YSBwcm9wZXJ0eS4gUGF5bG9hZCBuYW1lcyBzdWNoIGFzXG4gKiBgX19wcm90b19fYCBhcmUgZGF0YSwgbm90IHNldHRlcnMgb3Igc2VsZWN0b3IgaW5zdHJ1Y3Rpb25zLiBTaGFyZWQgYnkgdGhlXG4gKiByZWNvcmQtc2VydmluZyBhbmQgY29weS1vbi13cml0ZSBjb3BpZXM7IHRoaXMgaXMgbm90IGEgcHVibGljIGhlbHBlci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHB1dE93bih0YXJnZXQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LCBuYW1lOiBzdHJpbmcgfCBudW1iZXIsIHZhbHVlOiB1bmtub3duKTogdm9pZCB7XG4gIGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRhcmdldCwgbmFtZSkgJiYgUmVmbGVjdC5oYXModGFyZ2V0LCBuYW1lKSkge1xuICAgIGRlZmluZU93bkRhdGEodGFyZ2V0LCBuYW1lLCB2YWx1ZSk7XG4gIH0gZWxzZSB7XG4gICAgdGFyZ2V0W25hbWVdID0gdmFsdWU7XG4gIH1cbn1cblxuLyoqXG4gKiBOZXN0ZWQgZGlhZ25vc3RpYyB3cml0ZXJzIHJlcXVpcmUgYSBtaXNzaW5nIHNsb3QgdG8gYmUgQ1JFQVRFRCwgbm90IG1lcmVseVxuICogYXNzaWduZWQuIEtlZXAgdGhhdCBjb250cmFjdCBzZXBhcmF0ZSBmcm9tIHB1dE93bjogYW4gb3V0LW9mLXJhbmdlIHR5cGVkXG4gKiBhcnJheSBpbmRleCBpcyBhbiBhc3NpZ25tZW50IG5vLW9wLCBidXQgY2Fubm90IGJlIGRlZmluZWQgYXMgYW4gb3duIHNsb3QuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRPd25WYWx1ZSh0YXJnZXQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LCBuYW1lOiBzdHJpbmcgfCBudW1iZXIsIHZhbHVlOiB1bmtub3duKTogdm9pZCB7XG4gIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGFyZ2V0LCBuYW1lKSkge1xuICAgIHB1dE93bih0YXJnZXQsIG5hbWUsIHZhbHVlKTtcbiAgfSBlbHNlIHtcbiAgICBkZWZpbmVPd25EYXRhKHRhcmdldCwgbmFtZSwgdmFsdWUpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGRlZmluZU93bkRhdGEodGFyZ2V0OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiwgbmFtZTogc3RyaW5nIHwgbnVtYmVyLCB2YWx1ZTogdW5rbm93bik6IHZvaWQge1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBuYW1lLCB7IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0pO1xufVxuIl19