footprintjs 10.2.0 → 10.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (57) hide show
  1. package/dist/esm/index.d.ts +1 -0
  2. package/dist/esm/index.js +1 -1
  3. package/dist/esm/lib/attempt/category.d.ts +4 -2
  4. package/dist/esm/lib/attempt/category.js +18 -11
  5. package/dist/esm/lib/attempt/errorField.d.ts +2 -0
  6. package/dist/esm/lib/attempt/errorField.js +32 -0
  7. package/dist/esm/lib/capture/nativeCoverage.d.ts +56 -0
  8. package/dist/esm/lib/capture/nativeCoverage.js +102 -0
  9. package/dist/esm/lib/memory/StageContext.d.ts +5 -0
  10. package/dist/esm/lib/memory/StageContext.js +27 -6
  11. package/dist/esm/lib/memory/attention.d.ts +2 -0
  12. package/dist/esm/lib/memory/attention.js +12 -5
  13. package/dist/esm/lib/recorder/ControlDepRecorder.d.ts +12 -1
  14. package/dist/esm/lib/recorder/ControlDepRecorder.js +23 -1
  15. package/dist/esm/lib/recorder/snapshot.d.ts +1 -1
  16. package/dist/esm/lib/recorder/snapshot.js +7 -2
  17. package/dist/esm/lib/runner/ExecutionRuntime.d.ts +9 -0
  18. package/dist/esm/lib/runner/ExecutionRuntime.js +13 -1
  19. package/dist/esm/lib/runner/FlowChartExecutor.d.ts +2 -0
  20. package/dist/esm/lib/runner/FlowChartExecutor.js +31 -2
  21. package/dist/esm/lib/runner/attach.js +4 -2
  22. package/dist/esm/lib/runner/options.d.ts +3 -0
  23. package/dist/esm/lib/runner/options.js +5 -1
  24. package/dist/esm/lib/runner/snapshot.d.ts +3 -1
  25. package/dist/esm/lib/runner/snapshot.js +35 -4
  26. package/dist/esm/lib/scope/ScopeFacade.js +4 -2
  27. package/dist/esm/lib/scope/runtime.d.ts +2 -0
  28. package/dist/esm/lib/scope/runtime.js +9 -1
  29. package/dist/index.js +1 -1
  30. package/dist/lib/attempt/category.js +18 -11
  31. package/dist/lib/attempt/errorField.js +36 -0
  32. package/dist/lib/capture/nativeCoverage.js +107 -0
  33. package/dist/lib/memory/StageContext.js +27 -6
  34. package/dist/lib/memory/attention.js +12 -5
  35. package/dist/lib/recorder/ControlDepRecorder.js +23 -1
  36. package/dist/lib/recorder/snapshot.js +7 -2
  37. package/dist/lib/runner/ExecutionRuntime.js +13 -1
  38. package/dist/lib/runner/FlowChartExecutor.js +34 -5
  39. package/dist/lib/runner/attach.js +3 -1
  40. package/dist/lib/runner/options.js +5 -1
  41. package/dist/lib/runner/snapshot.js +35 -4
  42. package/dist/lib/scope/ScopeFacade.js +3 -1
  43. package/dist/lib/scope/runtime.js +12 -2
  44. package/dist/types/index.d.ts +1 -0
  45. package/dist/types/lib/attempt/category.d.ts +4 -2
  46. package/dist/types/lib/attempt/errorField.d.ts +2 -0
  47. package/dist/types/lib/capture/nativeCoverage.d.ts +56 -0
  48. package/dist/types/lib/memory/StageContext.d.ts +5 -0
  49. package/dist/types/lib/memory/attention.d.ts +2 -0
  50. package/dist/types/lib/recorder/ControlDepRecorder.d.ts +12 -1
  51. package/dist/types/lib/recorder/snapshot.d.ts +1 -1
  52. package/dist/types/lib/runner/ExecutionRuntime.d.ts +9 -0
  53. package/dist/types/lib/runner/FlowChartExecutor.d.ts +2 -0
  54. package/dist/types/lib/runner/options.d.ts +3 -0
  55. package/dist/types/lib/runner/snapshot.d.ts +3 -1
  56. package/dist/types/lib/scope/runtime.d.ts +2 -0
  57. package/package.json +1 -1
@@ -3,11 +3,13 @@ import type { Attention } from 'foottrace';
3
3
  import type { AttemptRecord, AttemptSummary } from '../attempt/types.js';
4
4
  /** One execution's ownership, pending summary, marks and omission accounting stay in this helper. */
5
5
  export declare class StageAttention {
6
+ private readonly onOmitted?;
6
7
  private marks?;
7
8
  private omitted;
8
9
  private retryPossible;
9
10
  private summary?;
10
11
  private terminal?;
12
+ constructor(onOmitted?: (() => void) | undefined);
11
13
  /** A new execution starts fresh; an attempt discard never calls this. No collection is reconstructed. */
12
14
  begin(): void;
13
15
  /** Called only after the frame retained this attempt. Raw error, target and decision payloads are never read. */
@@ -38,11 +38,15 @@ function attemptReference(record, owner) {
38
38
  }
39
39
  /** One execution's ownership, pending summary, marks and omission accounting stay in this helper. */
40
40
  export class StageAttention {
41
+ onOmitted;
41
42
  marks;
42
43
  omitted = false;
43
44
  retryPossible = false;
44
45
  summary;
45
46
  terminal;
47
+ constructor(onOmitted) {
48
+ this.onOmitted = onOmitted;
49
+ }
46
50
  /** A new execution starts fresh; an attempt discard never calls this. No collection is reconstructed. */
47
51
  begin() {
48
52
  this.marks = undefined;
@@ -131,34 +135,37 @@ export class StageAttention {
131
135
  }
132
136
  /** Keep only bounded exact references; one slot is reserved to disclose omissions. */
133
137
  append(attention) {
138
+ if (attention.kind === 'not-collected')
139
+ this.onOmitted?.();
134
140
  const key = attention.kind + ':' + attention.reason;
135
141
  const previous = this.marks?.get(key);
136
142
  const references = [...(previous?.evidence ?? [])];
137
143
  for (const reference of attention.evidence) {
138
144
  if (!validReference(reference)) {
139
- this.omitted = true;
145
+ this.missing();
140
146
  continue;
141
147
  }
142
148
  if (references.includes(reference))
143
149
  continue;
144
150
  if (references.length >= MAX_REFERENCES) {
145
- this.omitted = true;
151
+ this.missing();
146
152
  continue;
147
153
  }
148
154
  references.push(reference);
149
155
  }
150
156
  if (attention.kind !== 'not-collected' && references.length === 0) {
151
- this.omitted = true;
157
+ this.missing();
152
158
  return;
153
159
  }
154
160
  if (!previous && (this.marks?.size ?? 0) >= MAX_MARKS - 1) {
155
- this.omitted = true;
161
+ this.missing();
156
162
  return;
157
163
  }
158
164
  (this.marks ??= new Map()).set(key, { kind: attention.kind, reason: attention.reason, evidence: references });
159
165
  }
160
166
  missing() {
161
167
  this.omitted = true;
168
+ this.onOmitted?.();
162
169
  }
163
170
  /** Copy already collected bounded marks, never an attempt array, diagnostic bag or execution tree. */
164
171
  snapshot() {
@@ -168,4 +175,4 @@ export class StageAttention {
168
175
  return Object.freeze(result);
169
176
  }
170
177
  }
171
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXR0ZW50aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9tZW1vcnkvYXR0ZW50aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBSTNELE1BQU0sU0FBUyxHQUFHLEVBQUUsQ0FBQztBQUNyQixNQUFNLGNBQWMsR0FBRyxFQUFFLENBQUM7QUFDMUIsTUFBTSxvQkFBb0IsR0FBRyxHQUFHLENBQUM7QUFDakMsTUFBTSxlQUFlLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxXQUFXLEVBQUUsVUFBVSxFQUFFLGNBQWMsQ0FBQyxDQUFDLENBQUM7QUFDM0UsTUFBTSxpQkFBaUIsR0FBYyxNQUFNLENBQUMsTUFBTSxDQUFDO0lBQ2pELElBQUksRUFBRSxlQUFlO0lBQ3JCLE1BQU0sRUFBRSx3QkFBd0I7SUFDaEMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO0NBQzVCLENBQUMsQ0FBQztBQUVILFNBQVMsY0FBYyxDQUFDLFNBQWtCO0lBQ3hDLE9BQU8sQ0FDTCxPQUFPLFNBQVMsS0FBSyxRQUFRO1FBQzdCLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQztRQUNwQixTQUFTLENBQUMsTUFBTSxJQUFJLG9CQUFvQjtRQUN4Qyx1R0FBdUc7UUFDdkcsQ0FBQyw4QkFBOEIsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQ2hELENBQUM7QUFDSixDQUFDO0FBRUQsNEdBQTRHO0FBQzVHLFNBQVMsZ0JBQWdCLENBQUMsTUFBcUIsRUFBRSxLQUFhO0lBQzVELElBQ0UsT0FBTyxNQUFNLENBQUMsTUFBTSxLQUFLLFFBQVE7UUFDakMsQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUM7UUFDckMsTUFBTSxDQUFDLE9BQU8sR0FBRyxDQUFDO1FBQ2xCLE1BQU0sQ0FBQyxNQUFN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LFFBQVEsRUFBRSxVQUFVLEVBQUUsQ0FBQyxDQUFDO0lBQ2hILENBQUM7SUFFRCxPQUFPO1FBQ0wsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7SUFDdEIsQ0FBQztJQUVELHNHQUFzRztJQUN0RyxRQUFRO1FBQ04sTUFBTSxNQUFNLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQ2pFLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxHQUFHLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUNsRixDQUFDO1FBQ0YsSUFBSSxJQUFJLENBQUMsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsU0FBUyxDQUFDLElBQUksS0FBSyxlQUFlLENBQUM7WUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFDcEgsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQy9CLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8qKiBFbmdpbmUtb3duZWQgYXR0ZW50aW9uIGlzIGNvbGxlY3RlZCB3aXRoIHJldGFpbmVkIGZhY3RzOyBzbmFwc2hvdHMgb25seSBjb3B5IHRoaXMgYm91bmRlZCBwcm9qZWN0aW9uLiAqL1xuaW1wb3J0IHR5cGUgeyBBdHRlbnRpb24gfSBmcm9tICdmb290dHJhY2UnO1xuaW1wb3J0IHsgYnVpbGRBdHRlbXB0SWQsIHBhcnNlQXR0ZW1wdElkIH0gZnJvbSAnZm9vdHRyYWNlJztcblxuaW1wb3J0IHR5cGUgeyBBdHRlbXB0UmVjb3JkLCBBdHRlbXB0U3VtbWFyeSB9IGZyb20gJy4uL2F0dGVtcHQvdHlwZXMuanMnO1xuXG5jb25zdCBNQVhfTUFSS1MgPSAzMjtcbmNvbnN0IE1BWF9SRUZFUkVOQ0VTID0gMTY7XG5jb25zdCBNQVhfUkVGRVJFTkNFX0xFTkdUSCA9IDUxMjtcbmNvbnN0IFNUT1BQRURfUkVBU09OUyA9IG5ldyBTZXQoWydleGhhdXN0ZWQnLCAnZGVjbGluZWQnLCAnbm8tdGltZS1sZWZ0J10pO1xuY29uc3QgTUlTU0lOR19BVFRFTlRJT046IEF0dGVudGlvbiA9IE9iamVjdC5mcmVlemUoe1xuICBraW5kOiAnbm90LWNvbGxlY3RlZCcsXG4gIHJlYXNvbjogJ0VWSURFTkNFX05PVF9DT0xMRUNURUQnLFxuICBldmlkZW5jZTogT2JqZWN0LmZyZWV6ZShbXSksXG59KTtcblxuZnVuY3Rpb24gdmFsaWRSZWZlcmVuY2UocmVmZXJlbmNlOiB1bmtub3duKTogcmVmZXJlbmNlIGlzIHN0cmluZyB7XG4gIHJldHVybiAoXG4gICAgdHlwZW9mIHJlZmVyZW5jZSA9PT0gJ3N0cmluZycgJiZcbiAgICByZWZlcmVuY2UubGVuZ3RoID4gMCAmJlxuICAgIHJlZmVyZW5jZS5sZW5ndGggPD0gTUFYX1JFRkVSRU5DRV9MRU5HVEggJiZcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29udHJvbC1yZWdleCAtLSBNYXRjaCB0aGUgc2hhcmVkIEZvb3R0cmFjZSBldmlkZW5jZS1yZWZlcmVuY2UgYm91bmRhcnkuXG4gICAgIS9bXFx1MDAwMC1cXHUwMDFmXFx1MDA3Zi1cXHUwMDlmXS8udGVzdChyZWZlcmVuY2UpXG4gICk7XG59XG5cbi8qKiBSZXVzZSB0aGUgb25lIGF0dGVtcHQgZ3JhbW1hciwgaW5jbHVkaW5nIG5lc3RlZCBjYWxsIGFkZHJlc3NlczsgbmV2ZXIgc2hvcnRlbiBhbiB1bmFkZHJlc3NhYmxlIHByb29mLiAqL1xuZnVuY3Rpb24gYXR0ZW1wdFJlZmVyZW5jZShyZWNvcmQ6IEF0dGVtcHRSZWNvcmQsIG93bmVyOiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBpZiAoXG4gICAgdHlwZW9mIHJlY29yZC5zZXJpZXMgIT09ICdzdHJpbmcnIHx8XG4gICAgIU51bWJlci5pc1NhZmVJbnRlZ2VyKHJlY29yZC5hdHRlbXB0KSB8fFxuICAgIHJlY29yZC5hdHRlbXB0IDwgMSB8fFxuICAgIHJlY29yZC5zZXJpZXMubGVuZ3RoICsgU3RyaW5nKHJlY29yZC5hdHRlbXB0KS5sZW5ndGggKyAxID4gTUFYX1JFRkVSRU5DRV9MRU5HVEhcbiAgKVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIHRyeSB7XG4gICAgY29uc3QgY2FuZGlkYXRlID0gcmVjb3JkLnNlcmllcyArICdAJyArIHJlY29yZC5hdHRlbXB0O1xuICAgIGNvbnN0IHBhcnRzID0gcGFyc2VBdHRlbXB0SWQoY2FuZGlkYXRlKTtcbiAgICBpZiAoXG4gICAgICAhcGFydHMgfHxcbiAgICAgIHBhcnRzLnJ1bnRpbWVTdGFnZUlkICE9PSBvd25lciB8fFxuICAgICAgKHJlY29yZC5raW5kID09PSAnc3RhZ2UnID8gcGFydHMuY2FsbCAhPT0gdW5kZWZpbmVkIDogcGFydHMuY2FsbCA9PT0gdW5kZWZpbmVkKVxuICAgIClcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgY29uc3QgY2Fub25pY2FsID0gYnVpbGRBdHRlbXB0SWQocGFydHMucnVudGltZVN0YWdlSWQsIHBhcnRzLmF0dGVtcHQsIHBhcnRzLmNhbGwpO1xuICAgIHJldHVybiBjYW5vbmljYWwgPT09IGNhbmRpZGF0ZSAmJiB2YWxpZFJlZmVyZW5jZShjYW5vbmljYWwpID8gY2Fub25pY2FsIDogdW5kZWZpbmVkO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG59XG5cbnR5cGUgVGVybWluYWxQcm9vZiA9IFBpY2s8QXR0ZW1wdFJlY29yZCwgJ25leHQnIHwgJ3JlYXNvbicgfCAnZWZmZWN0Jz4gJiB7IHJlYWRvbmx5IGV2aWRlbmNlOiBzdHJpbmcgfTtcblxuLyoqIE9uZSBleGVjdXRpb24ncyBvd25lcnNoaXAsIHBlbmRpbmcgc3VtbWFyeSwgbWFya3MgYW5kIG9taXNzaW9uIGFjY291bnRpbmcgc3RheSBpbiB0aGlzIGhlbHBlci4gKi9cbmV4cG9ydCBjbGFzcyBTdGFnZUF0dGVudGlvbiB7XG4gIHByaXZhdGUgbWFya3M/OiBNYXA8c3RyaW5nLCBBdHRlbnRpb24+O1xuICBwcml2YXRlIG9taXR0ZWQgPSBmYWxzZTtcbiAgcHJpdmF0ZSByZXRyeVBvc3NpYmxlID0gZmFsc2U7XG4gIHByaXZhdGUgc3VtbWFyeT86IEF0dGVtcHRTdW1tYXJ5O1xuICBwcml2YXRlIHRlcm1pbmFsPzogVGVybWluYWxQcm9vZjtcblxuICAvKiogQSBuZXcgZXhlY3V0aW9uIHN0YXJ0cyBmcmVzaDsgYW4gYXR0ZW1wdCBkaXNjYXJkIG5ldmVyIGNhbGxzIHRoaXMuIE5vIGNvbGxlY3Rpb24gaXMgcmVjb25zdHJ1Y3RlZC4gKi9cbiAgYmVnaW4oKTogdm9pZCB7XG4gICAgdGhpcy5tYXJrcyA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLm9taXR0ZWQgPSBmYWxzZTtcbiAgICB0aGlzLnJldHJ5UG9zc2libGUgPSBmYWxzZTtcbiAgICB0aGlzLnN1bW1hcnkgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy50ZXJtaW5hbCA9IHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8qKiBDYWxsZWQgb25seSBhZnRlciB0aGUgZnJhbWUgcmV0YWluZWQgdGhpcyBhdHRlbXB0LiBSYXcgZXJyb3IsIHRhcmdldCBhbmQgZGVjaXNpb24gcGF5bG9hZHMgYXJlIG5ldmVyIHJlYWQuICovXG4gIHJlY29yZEF0dGVtcHQocmVjb3JkOiBBdHRlbXB0UmVjb3JkLCBvd25lcjogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgcmVmZXJlbmNlID0gYXR0ZW1wdFJlZmVyZW5jZShyZWNvcmQsIG93bmVyKTtcbiAgICBpZiAocmVjb3JkLmtpbmQgPT09ICdzdGFnZScgJiYgcmVjb3JkLnNlcmllcyA9PT0gb3duZXIpIHtcbiAgICAgIGlmIChyZWNvcmQucmV0cnlMb29wID09PSB1bmRlZmluZWQgJiYgKHJlY29yZC5vZiA/PyAxKSA+IDEpIHRoaXMucmV0cnlQb3NzaWJsZSA9IHRydWU7XG4gICAgICBpZiAocmVmZXJlbmNlICYmIHJlY29yZC5uZXh0ICE9PSAncmV0cnknKSB7XG4gICAgICAgIHRoaXMudGVybWluYWwgPSB7IG5leHQ6IHJlY29yZC5uZXh0LCByZWFzb246IHJlY29yZC5yZWFzb24sIGVmZmVjdDogcmVjb3JkLmVmZmVjdCwgZXZpZGVuY2U6IHJlZmVyZW5jZSB9O1xuICAgICAgfVxuICAgIH1cbiAgICAvLyBUaGUgcnVubmVyIGNhbGxzIHJlY29yZFN1bW1hcnkgYmVmb3JlIGl0cyBmaW5hbCBhdHRlbXB0LiBGaW5pc2ggdGhhdCBwZW5kaW5nIHByb2plY3Rpb24gbm93IHRvby5cbiAgICB0aGlzLnByb2plY3RTdW1tYXJ5KCk7XG4gICAgY29uc3QgYWRkID0gKGtpbmQ6IEF0dGVudGlvblsna2luZCddLCByZWFzb246IEF0dGVudGlvblsncmVhc29uJ10pID0+IHtcbiAgICAgIGlmIChyZWZlcmVuY2UpIHRoaXMuYXBwZW5kKHsga2luZCwgcmVhc29uLCBldmlkZW5jZTogW3JlZmVyZW5jZV0gfSk7XG4gICAgICBlbHNlIHRoaXMubWlzc2luZygpO1xuICAgIH07XG4gICAgaWYgKHJlY29yZC5lZmZlY3QgPT09ICd1bmtub3duJykgYWRkKCd1bmtub3duLWVmZmVjdCcsICdVTktOT1dOX0VGRkVDVF9SRUNPUkRFRCcpO1xuICAgIGlmIChyZWNvcmQub3V0Y29tZSA9PT0gJ3RpbWVvdXQnKSBhZGQoJ3RpbWVvdXQnLCAnVElNRU9VVF9SRUNPUkRFRCcpO1xuICAgIC8vIEFuIFNESydzIHN1Z2dlc3RlZCBuZXh0L3JlYXNvbiBpcyBub3QgaXRzIGFjdHVhbCBwb2xpY3k7IG9ubHkgYSBsYXRlciBvcmRpbmFsIHByb3ZlcyBpdHMgcmV0cnkuXG4gICAgY29uc3Qgb2JzZXJ2ZWQgPSByZWNvcmQua2luZCA9PT0gJ29ic2VydmVkJztcbiAgICBpZiAoKCFvYnNlcnZlZCAmJiByZWNvcmQubmV4dCA9PT0gJ3JldHJ5JykgfHwgcmVjb3JkLmF0dGVtcHQgPiAxKSBhZGQoJ3JldHJpZWQnLCAnUkVUUllfUkVDT1JERUQnKTtcbiAgICBpZiAoXG4gICAgICAhb2JzZXJ2ZWQgJiZcbiAgICAgIHJlY29yZC5uZXh0ID09PSAnc3RvcCcgJiZcbiAgICAgIFNUT1BQRURfUkVBU09OUy5oYXMocmVjb3JkLnJlYXNvbikgJiZcbiAgICAgIChyZWNvcmQub2YgPz8gMSkgPiAxICYmXG4gICAgICByZWNvcmQucmV0cnlMb29wID09PSB1bmRlZmluZWRcbiAgICApXG4gICAgICBhZGQoJ2dhdmUtdXAnLCAnUkVUUllfU1RPUF9SRUNPUkRFRCcpO1xuICB9XG5cbiAgcmVjb3JkU3VtbWFyeShzdW1tYXJ5OiBBdHRlbXB0U3VtbWFyeSk6IHZvaWQge1xuICAgIHRoaXMuc3VtbWFyeSA9IHN1bW1hcnk7XG4gICAgdGhpcy5wcm9qZWN0U3VtbWFyeSgpO1xuICB9XG5cbiAgLyoqIEEgc3VtbWFyeS1vbmx5IGN1dCB3YWl0IGhhcyBubyBwaGFudG9tIGZpbmFsIGF0dGVtcHQ7IHVzZSBpdHMgYWN0dWFsIHJldGFpbmVkIHN1bW1hcnkuICovXG4gIHByaXZhdGUgcHJvamVjdFN1bW1hcnkoKTogdm9pZCB7XG4gICAgY29uc3QgbGFzdCA9IHRoaXMuc3VtbWFyeT8ubGFzdDtcbiAgICBpZiAoIWxhc3QpIHJldHVybjtcbiAgICBjb25zdCB0ZXJtaW5hbCA9IHRoaXMudGVybWluYWw7XG4gICAgY29uc3QgbWF0Y2hpbmcgPSB0ZXJtaW5hbD8ubmV4dCA9PT0gbGFzdC5uZXh0ICYmIHRlcm1pbmFsLnJlYXNvbiA9PT0gbGFzdC5yZWFzb247XG4gICAgY29uc3QgYWRkID0gKGtpbmQ6IEF0dGVudGlvblsna2luZCddLCByZWFzb246IEF0dGVudGlvblsncmVhc29uJ10sIHByb29mPzogc3RyaW5nKSA9PiB7XG4gICAgICBjb25zdCByZWZlcmVuY2UgPSBwcm9vZiA/PyAnYXR0ZW1wdFN1bW1hcnknO1xuICAgICAgY29uc3Qga2V5ID0ga2luZCArICc6JyArIHJlYXNvbjtcbiAgICAgIGNvbnN0IG1hcmtzID0gdGhpcy5tYXJrcztcbiAgICAgIGNvbnN0IHByZXZpb3VzID0gbWFya3M/LmdldChrZXkpO1xuICAgICAgaWYgKHByb29mICYmIG1hcmtzICYmIHByZXZpb3VzPy5ldmlkZW5jZS5pbmNsdWRlcygnYXR0ZW1wdFN1bW1hcnknKSkge1xuICAgICAgICBtYXJrcy5zZXQoa2V5LCB7IC4uLnByZXZpb3VzLCBldmlkZW5jZTogcHJldmlvdXMuZXZpZGVuY2UuZmlsdGVyKChpdGVtKSA9PiBpdGVtICE9PSAnYXR0ZW1wdFN1bW1hcnknKSB9KTtcbiAgICAgIH1cbiAgICAgIHRoaXMuYXBwZW5kKHsga2luZCwgcmVhc29uLCBldmlkZW5jZTogW3JlZmVyZW5jZV0gfSk7XG4gICAgfTtcbiAgICBpZiAobGFzdC5lZmZlY3QgPT09ICd1bmtub3duJylcbiAgICAgIGFkZChcbiAgICAgICAgJ3Vua25vd24tZWZmZWN0JyxcbiAgICAgICAgJ1VOS05PV05fRUZGRUNUX1JFQ09SREVEJyxcbiAgICAgICAgbWF0Y2hpbmcgJiYgdGVybWluYWwuZWZmZWN0ID09PSAndW5rbm93bicgPyB0ZXJtaW5hbC5ldmlkZW5jZSA6IHVuZGVmaW5lZCxcbiAgICAgICk7XG4gICAgaWYgKHRoaXMucmV0cnlQb3NzaWJsZSAmJiBsYXN0Lm5leHQgPT09ICdzdG9wJyAmJiBTVE9QUEVEX1JFQVNPTlMuaGFzKGxhc3QucmVhc29uKSlcbiAgICAgIGFkZCgnZ2F2ZS11cCcsICdSRVRSWV9TVE9QX1JFQ09SREVEJywgbWF0Y2hpbmcgPyB0ZXJtaW5hbC5ldmlkZW5jZSA6IHVuZGVmaW5lZCk7XG4gIH1cblxuICAvKiogT25seSB0aGUgZXhwbGljaXQgcmV0YWluZWQgc3RhZ2UtZXJyb3IgcGF0aCBjYWxscyB0aGlzOyBhIGRpYWdub3N0aWMgdmFsdWUgbmV2ZXIgY2xhc3NpZmllcyBpdHNlbGYuICovXG4gIHN0YWdlRmFpbGVkKGVycm9yczogdW5rbm93bik6IHZvaWQge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBkZXNjcmlwdG9yID1cbiAgICAgICAgZXJyb3JzICYmIHR5cGVvZiBlcnJvcnMgPT09ICdvYmplY3QnXG4gICAgICAgICAgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGVycm9ycywgJ3N0YWdlRXhlY3V0aW9uRXJyb3InKVxuICAgICAgICAgIDogdW5kZWZpbmVkO1xuICAgICAgaWYgKGRlc2NyaXB0b3IgJiYgT2JqZWN0Lmhhc093bihkZXNjcmlwdG9yLCAndmFsdWUnKSkge1xuICAgICAgICB0aGlzLmFwcGVuZCh7IGtpbmQ6ICdlcnJvcicsIHJlYXNvbjogJ0VSUk9SX1JFQ09SREVEJywgZXZpZGVuY2U6IFsnZXJyb3JzOnN0YWdlRXhlY3V0aW9uRXJyb3InXSB9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH0gY2F0Y2gge1xuICAgICAgLyogQSBtYWxmb3JtZWQgZXZpZGVuY2UgYmFnIGlzIHVuYXZhaWxhYmxlLCBuZXZlciBhbm90aGVyIHN0YWdlIGZhaWx1cmUuICovXG4gICAgfVxuICAgIHRoaXMubWlzc2luZygpO1xuICB9XG5cbiAgYXR0ZW1wdERyb3BwZWQoKTogdm9pZCB7XG4gICAgdGhpcy5hcHBlbmQoeyBraW5kOiAnbm90LWNvbGxlY3RlZCcsIHJlYXNvbjogJ0VWSURFTkNFX05PVF9DT0xMRUNURUQnLCBldmlkZW5jZTogWydhdHRlbXB0c0Ryb3BwZWQnXSB9KTtcbiAgfVxuXG4gIC8qKiBLZWVwIG9ubHkgYm91bmRlZCBleGFjdCByZWZlcmVuY2VzOyBvbmUgc2xvdCBpcyByZXNlcnZlZCB0byBkaXNjbG9zZSBvbWlzc2lvbnMuICovXG4gIGFwcGVuZChhdHRlbnRpb246IEF0dGVudGlvbik6IHZvaWQge1xuICAgIGNvbnN0IGtleSA9IGF0dGVudGlvbi5raW5kICsgJzonICsgYXR0ZW50aW9uLnJlYXNvbjtcbiAgICBjb25zdCBwcmV2aW91cyA9IHRoaXMubWFya3M/LmdldChrZXkpO1xuICAgIGNvbnN0IHJlZmVyZW5jZXMgPSBbLi4uKHByZXZpb3VzPy5ldmlkZW5jZSA/PyBbXSldO1xuICAgIGZvciAoY29uc3QgcmVmZXJlbmNlIG9mIGF0dGVudGlvbi5ldmlkZW5jZSkge1xuICAgICAgaWYgKCF2YWxpZFJlZmVyZW5jZShyZWZlcmVuY2UpKSB7XG4gICAgICAgIHRoaXMub21pdHRlZCA9IHRydWU7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaWYgKHJlZmVyZW5jZXMuaW5jbHVkZXMocmVmZXJlbmNlKSkgY29udGludWU7XG4gICAgICBpZiAocmVmZXJlbmNlcy5sZW5ndGggPj0gTUFYX1JFRkVSRU5DRVMpIHtcbiAgICAgICAgdGhpcy5vbWl0dGVkID0gdHJ1ZTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICByZWZlcmVuY2VzLnB1c2gocmVmZXJlbmNlKTtcbiAgICB9XG4gICAgaWYgKGF0dGVudGlvbi5raW5kICE9PSAnbm90LWNvbGxlY3RlZCcgJiYgcmVmZXJlbmNlcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHRoaXMub21pdHRlZCA9IHRydWU7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICghcHJldmlvdXMgJiYgKHRoaXMubWFya3M/LnNpemUgPz8gMCkgPj0gTUFYX01BUktTIC0gMSkge1xuICAgICAgdGhpcy5vbWl0dGVkID0gdHJ1ZTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgKHRoaXMubWFya3MgPz89IG5ldyBNYXAoKSkuc2V0KGtleSwgeyBraW5kOiBhdHRlbnRpb24ua2luZCwgcmVhc29uOiBhdHRlbnRpb24ucmVhc29uLCBldmlkZW5jZTogcmVmZXJlbmNlcyB9KTtcbiAgfVxuXG4gIG1pc3NpbmcoKTogdm9pZCB7XG4gICAgdGhpcy5vbWl0dGVkID0gdHJ1ZTtcbiAgfVxuXG4gIC8qKiBDb3B5IGFscmVhZHkgY29sbGVjdGVkIGJvdW5kZWQgbWFya3MsIG5ldmVyIGFuIGF0dGVtcHQgYXJyYXksIGRpYWdub3N0aWMgYmFnIG9yIGV4ZWN1dGlvbiB0cmVlLiAqL1xuICBzbmFwc2hvdCgpOiByZWFkb25seSBBdHRlbnRpb25bXSB7XG4gICAgY29uc3QgcmVzdWx0ID0gWy4uLih0aGlzLm1hcmtzPy52YWx1ZXMoKSA/PyBbXSldLm1hcCgoYXR0ZW50aW9uKSA9PlxuICAgICAgT2JqZWN0LmZyZWV6ZSh7IC4uLmF0dGVudGlvbiwgZXZpZGVuY2U6IE9iamVjdC5mcmVlemUoWy4uLmF0dGVudGlvbi5ldmlkZW5jZV0pIH0pLFxuICAgICk7XG4gICAgaWYgKHRoaXMub21pdHRlZCAmJiAhcmVzdWx0LnNvbWUoKGF0dGVudGlvbikgPT4gYXR0ZW50aW9uLmtpbmQgPT09ICdub3QtY29sbGVjdGVkJykpIHJlc3VsdC5wdXNoKE1JU1NJTkdfQVRURU5USU9OKTtcbiAgICByZXR1cm4gT2JqZWN0LmZyZWV6ZShyZXN1bHQpO1xuICB9XG59XG4iXX0=
178
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXR0ZW50aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9tZW1vcnkvYXR0ZW50aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBSTNELE1BQU0sU0FBUyxHQUFHLEVBQUUsQ0FBQztBQUNyQixNQUFNLGNBQWMsR0FBRyxFQUFFLENBQUM7QUFDMUIsTUFBTSxvQkFBb0IsR0FBRyxHQUFHLENBQUM7QUFDakMsTUFBTSxlQUFlLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxXQUFXLEVBQUUsVUFBVSxFQUFFLGNBQWMsQ0FBQyxDQUFDLENBQUM7QUFDM0UsTUFBTSxpQkFBaUIsR0FBYyxNQUFNLENBQUMsTUFBTSxDQUFDO0lBQ2pELElBQUksRUFBRSxlQUFlO0lBQ3JCLE1BQU0sRUFBRSx3QkFBd0I7SUFDaEMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO0NBQzVCLENBQUMsQ0FBQztBQUVILFNBQVMsY0FBYyxDQUFDLFNBQWtCO0lBQ3hDLE9BQU8sQ0FDTCxPQUFPLFNBQVMsS0FBSyxRQUFRO1FBQzdCLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQztRQUNwQixTQUFTLENBQUMsTUFBTSxJQUFJLG9CQUFvQjtRQUN4Qyx1R0FBdUc7UUFDdkcsQ0FBQyw4QkFBOEIsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQ2hELENBQUM7QUFDSixDQUFDO0FBRUQsNEdBQTRHO0FBQzVHLFNBQVMsZ0JBQWdCLENBQUMsTUFBcUIsRUFBRSxLQUFhO0lBQzVELElBQ0UsT0FBTyxNQUFNLENBQUMsTUFBTSxLQUFLLFFBQVE7UUFDakMsQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUM7UUFDckMsTUFBTSxDQUFDLE9BQU8sR0FBRyxDQUFDO1FBQ2xCLE1BQU0sQ0FBQyxNQUFN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SSxHQUFHLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsRUFBRSxJQUFJLEVBQUUsU0FBUyxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsU0FBUyxDQUFDLE1BQU0sRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLENBQUMsQ0FBQztJQUNoSCxDQUFDO0lBRUQsT0FBTztRQUNMLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO1FBQ3BCLElBQUksQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDO0lBQ3JCLENBQUM7SUFFRCxzR0FBc0c7SUFDdEcsUUFBUTtRQUNOLE1BQU0sTUFBTSxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUNqRSxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsR0FBRyxTQUFTLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FDbEYsQ0FBQztRQUNGLElBQUksSUFBSSxDQUFDLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEtBQUssZUFBZSxDQUFDO1lBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQ3BILE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUMvQixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvKiogRW5naW5lLW93bmVkIGF0dGVudGlvbiBpcyBjb2xsZWN0ZWQgd2l0aCByZXRhaW5lZCBmYWN0czsgc25hcHNob3RzIG9ubHkgY29weSB0aGlzIGJvdW5kZWQgcHJvamVjdGlvbi4gKi9cbmltcG9ydCB0eXBlIHsgQXR0ZW50aW9uIH0gZnJvbSAnZm9vdHRyYWNlJztcbmltcG9ydCB7IGJ1aWxkQXR0ZW1wdElkLCBwYXJzZUF0dGVtcHRJZCB9IGZyb20gJ2Zvb3R0cmFjZSc7XG5cbmltcG9ydCB0eXBlIHsgQXR0ZW1wdFJlY29yZCwgQXR0ZW1wdFN1bW1hcnkgfSBmcm9tICcuLi9hdHRlbXB0L3R5cGVzLmpzJztcblxuY29uc3QgTUFYX01BUktTID0gMzI7XG5jb25zdCBNQVhfUkVGRVJFTkNFUyA9IDE2O1xuY29uc3QgTUFYX1JFRkVSRU5DRV9MRU5HVEggPSA1MTI7XG5jb25zdCBTVE9QUEVEX1JFQVNPTlMgPSBuZXcgU2V0KFsnZXhoYXVzdGVkJywgJ2RlY2xpbmVkJywgJ25vLXRpbWUtbGVmdCddKTtcbmNvbnN0IE1JU1NJTkdfQVRURU5USU9OOiBBdHRlbnRpb24gPSBPYmplY3QuZnJlZXplKHtcbiAga2luZDogJ25vdC1jb2xsZWN0ZWQnLFxuICByZWFzb246ICdFVklERU5DRV9OT1RfQ09MTEVDVEVEJyxcbiAgZXZpZGVuY2U6IE9iamVjdC5mcmVlemUoW10pLFxufSk7XG5cbmZ1bmN0aW9uIHZhbGlkUmVmZXJlbmNlKHJlZmVyZW5jZTogdW5rbm93bik6IHJlZmVyZW5jZSBpcyBzdHJpbmcge1xuICByZXR1cm4gKFxuICAgIHR5cGVvZiByZWZlcmVuY2UgPT09ICdzdHJpbmcnICYmXG4gICAgcmVmZXJlbmNlLmxlbmd0aCA+IDAgJiZcbiAgICByZWZlcmVuY2UubGVuZ3RoIDw9IE1BWF9SRUZFUkVOQ0VfTEVOR1RIICYmXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnRyb2wtcmVnZXggLS0gTWF0Y2ggdGhlIHNoYXJlZCBGb290dHJhY2UgZXZpZGVuY2UtcmVmZXJlbmNlIGJvdW5kYXJ5LlxuICAgICEvW1xcdTAwMDAtXFx1MDAxZlxcdTAwN2YtXFx1MDA5Zl0vLnRlc3QocmVmZXJlbmNlKVxuICApO1xufVxuXG4vKiogUmV1c2UgdGhlIG9uZSBhdHRlbXB0IGdyYW1tYXIsIGluY2x1ZGluZyBuZXN0ZWQgY2FsbCBhZGRyZXNzZXM7IG5ldmVyIHNob3J0ZW4gYW4gdW5hZGRyZXNzYWJsZSBwcm9vZi4gKi9cbmZ1bmN0aW9uIGF0dGVtcHRSZWZlcmVuY2UocmVjb3JkOiBBdHRlbXB0UmVjb3JkLCBvd25lcjogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgaWYgKFxuICAgIHR5cGVvZiByZWNvcmQuc2VyaWVzICE9PSAnc3RyaW5nJyB8fFxuICAgICFOdW1iZXIuaXNTYWZlSW50ZWdlcihyZWNvcmQuYXR0ZW1wdCkgfHxcbiAgICByZWNvcmQuYXR0ZW1wdCA8IDEgfHxcbiAgICByZWNvcmQuc2VyaWVzLmxlbmd0aCArIFN0cmluZyhyZWNvcmQuYXR0ZW1wdCkubGVuZ3RoICsgMSA+IE1BWF9SRUZFUkVOQ0VfTEVOR1RIXG4gIClcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB0cnkge1xuICAgIGNvbnN0IGNhbmRpZGF0ZSA9IHJlY29yZC5zZXJpZXMgKyAnQCcgKyByZWNvcmQuYXR0ZW1wdDtcbiAgICBjb25zdCBwYXJ0cyA9IHBhcnNlQXR0ZW1wdElkKGNhbmRpZGF0ZSk7XG4gICAgaWYgKFxuICAgICAgIXBhcnRzIHx8XG4gICAgICBwYXJ0cy5ydW50aW1lU3RhZ2VJZCAhPT0gb3duZXIgfHxcbiAgICAgIChyZWNvcmQua2luZCA9PT0gJ3N0YWdlJyA/IHBhcnRzLmNhbGwgIT09IHVuZGVmaW5lZCA6IHBhcnRzLmNhbGwgPT09IHVuZGVmaW5lZClcbiAgICApXG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIGNvbnN0IGNhbm9uaWNhbCA9IGJ1aWxkQXR0ZW1wdElkKHBhcnRzLnJ1bnRpbWVTdGFnZUlkLCBwYXJ0cy5hdHRlbXB0LCBwYXJ0cy5jYWxsKTtcbiAgICByZXR1cm4gY2Fub25pY2FsID09PSBjYW5kaWRhdGUgJiYgdmFsaWRSZWZlcmVuY2UoY2Fub25pY2FsKSA/IGNhbm9uaWNhbCA6IHVuZGVmaW5lZDtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxufVxuXG50eXBlIFRlcm1pbmFsUHJvb2YgPSBQaWNrPEF0dGVtcHRSZWNvcmQsICduZXh0JyB8ICdyZWFzb24nIHwgJ2VmZmVjdCc+ICYgeyByZWFkb25seSBldmlkZW5jZTogc3RyaW5nIH07XG5cbi8qKiBPbmUgZXhlY3V0aW9uJ3Mgb3duZXJzaGlwLCBwZW5kaW5nIHN1bW1hcnksIG1hcmtzIGFuZCBvbWlzc2lvbiBhY2NvdW50aW5nIHN0YXkgaW4gdGhpcyBoZWxwZXIuICovXG5leHBvcnQgY2xhc3MgU3RhZ2VBdHRlbnRpb24ge1xuICBwcml2YXRlIG1hcmtzPzogTWFwPHN0cmluZywgQXR0ZW50aW9uPjtcbiAgcHJpdmF0ZSBvbWl0dGVkID0gZmFsc2U7XG4gIHByaXZhdGUgcmV0cnlQb3NzaWJsZSA9IGZhbHNlO1xuICBwcml2YXRlIHN1bW1hcnk/OiBBdHRlbXB0U3VtbWFyeTtcbiAgcHJpdmF0ZSB0ZXJtaW5hbD86IFRlcm1pbmFsUHJvb2Y7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBvbk9taXR0ZWQ/OiAoKSA9PiB2b2lkKSB7fVxuXG4gIC8qKiBBIG5ldyBleGVjdXRpb24gc3RhcnRzIGZyZXNoOyBhbiBhdHRlbXB0IGRpc2NhcmQgbmV2ZXIgY2FsbHMgdGhpcy4gTm8gY29sbGVjdGlvbiBpcyByZWNvbnN0cnVjdGVkLiAqL1xuICBiZWdpbigpOiB2b2lkIHtcbiAgICB0aGlzLm1hcmtzID0gdW5kZWZpbmVkO1xuICAgIHRoaXMub21pdHRlZCA9IGZhbHNlO1xuICAgIHRoaXMucmV0cnlQb3NzaWJsZSA9IGZhbHNlO1xuICAgIHRoaXMuc3VtbWFyeSA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLnRlcm1pbmFsID0gdW5kZWZpbmVkO1xuICB9XG5cbiAgLyoqIENhbGxlZCBvbmx5IGFmdGVyIHRoZSBmcmFtZSByZXRhaW5lZCB0aGlzIGF0dGVtcHQuIFJhdyBlcnJvciwgdGFyZ2V0IGFuZCBkZWNpc2lvbiBwYXlsb2FkcyBhcmUgbmV2ZXIgcmVhZC4gKi9cbiAgcmVjb3JkQXR0ZW1wdChyZWNvcmQ6IEF0dGVtcHRSZWNvcmQsIG93bmVyOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCByZWZlcmVuY2UgPSBhdHRlbXB0UmVmZXJlbmNlKHJlY29yZCwgb3duZXIpO1xuICAgIGlmIChyZWNvcmQua2luZCA9PT0gJ3N0YWdlJyAmJiByZWNvcmQuc2VyaWVzID09PSBvd25lcikge1xuICAgICAgaWYgKHJlY29yZC5yZXRyeUxvb3AgPT09IHVuZGVmaW5lZCAmJiAocmVjb3JkLm9mID8/IDEpID4gMSkgdGhpcy5yZXRyeVBvc3NpYmxlID0gdHJ1ZTtcbiAgICAgIGlmIChyZWZlcmVuY2UgJiYgcmVjb3JkLm5leHQgIT09ICdyZXRyeScpIHtcbiAgICAgICAgdGhpcy50ZXJtaW5hbCA9IHsgbmV4dDogcmVjb3JkLm5leHQsIHJlYXNvbjogcmVjb3JkLnJlYXNvbiwgZWZmZWN0OiByZWNvcmQuZWZmZWN0LCBldmlkZW5jZTogcmVmZXJlbmNlIH07XG4gICAgICB9XG4gICAgfVxuICAgIC8vIFRoZSBydW5uZXIgY2FsbHMgcmVjb3JkU3VtbWFyeSBiZWZvcmUgaXRzIGZpbmFsIGF0dGVtcHQuIEZpbmlzaCB0aGF0IHBlbmRpbmcgcHJvamVjdGlvbiBub3cgdG9vLlxuICAgIHRoaXMucHJvamVjdFN1bW1hcnkoKTtcbiAgICBjb25zdCBhZGQgPSAoa2luZDogQXR0ZW50aW9uWydraW5kJ10sIHJlYXNvbjogQXR0ZW50aW9uWydyZWFzb24nXSkgPT4ge1xuICAgICAgaWYgKHJlZmVyZW5jZSkgdGhpcy5hcHBlbmQoeyBraW5kLCByZWFzb24sIGV2aWRlbmNlOiBbcmVmZXJlbmNlXSB9KTtcbiAgICAgIGVsc2UgdGhpcy5taXNzaW5nKCk7XG4gICAgfTtcbiAgICBpZiAocmVjb3JkLmVmZmVjdCA9PT0gJ3Vua25vd24nKSBhZGQoJ3Vua25vd24tZWZmZWN0JywgJ1VOS05PV05fRUZGRUNUX1JFQ09SREVEJyk7XG4gICAgaWYgKHJlY29yZC5vdXRjb21lID09PSAndGltZW91dCcpIGFkZCgndGltZW91dCcsICdUSU1FT1VUX1JFQ09SREVEJyk7XG4gICAgLy8gQW4gU0RLJ3Mgc3VnZ2VzdGVkIG5leHQvcmVhc29uIGlzIG5vdCBpdHMgYWN0dWFsIHBvbGljeTsgb25seSBhIGxhdGVyIG9yZGluYWwgcHJvdmVzIGl0cyByZXRyeS5cbiAgICBjb25zdCBvYnNlcnZlZCA9IHJlY29yZC5raW5kID09PSAnb2JzZXJ2ZWQnO1xuICAgIGlmICgoIW9ic2VydmVkICYmIHJlY29yZC5uZXh0ID09PSAncmV0cnknKSB8fCByZWNvcmQuYXR0ZW1wdCA+IDEpIGFkZCgncmV0cmllZCcsICdSRVRSWV9SRUNPUkRFRCcpO1xuICAgIGlmIChcbiAgICAgICFvYnNlcnZlZCAmJlxuICAgICAgcmVjb3JkLm5leHQgPT09ICdzdG9wJyAmJlxuICAgICAgU1RPUFBFRF9SRUFTT05TLmhhcyhyZWNvcmQucmVhc29uKSAmJlxuICAgICAgKHJlY29yZC5vZiA/PyAxKSA+IDEgJiZcbiAgICAgIHJlY29yZC5yZXRyeUxvb3AgPT09IHVuZGVmaW5lZFxuICAgIClcbiAgICAgIGFkZCgnZ2F2ZS11cCcsICdSRVRSWV9TVE9QX1JFQ09SREVEJyk7XG4gIH1cblxuICByZWNvcmRTdW1tYXJ5KHN1bW1hcnk6IEF0dGVtcHRTdW1tYXJ5KTogdm9pZCB7XG4gICAgdGhpcy5zdW1tYXJ5ID0gc3VtbWFyeTtcbiAgICB0aGlzLnByb2plY3RTdW1tYXJ5KCk7XG4gIH1cblxuICAvKiogQSBzdW1tYXJ5LW9ubHkgY3V0IHdhaXQgaGFzIG5vIHBoYW50b20gZmluYWwgYXR0ZW1wdDsgdXNlIGl0cyBhY3R1YWwgcmV0YWluZWQgc3VtbWFyeS4gKi9cbiAgcHJpdmF0ZSBwcm9qZWN0U3VtbWFyeSgpOiB2b2lkIHtcbiAgICBjb25zdCBsYXN0ID0gdGhpcy5zdW1tYXJ5Py5sYXN0O1xuICAgIGlmICghbGFzdCkgcmV0dXJuO1xuICAgIGNvbnN0IHRlcm1pbmFsID0gdGhpcy50ZXJtaW5hbDtcbiAgICBjb25zdCBtYXRjaGluZyA9IHRlcm1pbmFsPy5uZXh0ID09PSBsYXN0Lm5leHQgJiYgdGVybWluYWwucmVhc29uID09PSBsYXN0LnJlYXNvbjtcbiAgICBjb25zdCBhZGQgPSAoa2luZDogQXR0ZW50aW9uWydraW5kJ10sIHJlYXNvbjogQXR0ZW50aW9uWydyZWFzb24nXSwgcHJvb2Y/OiBzdHJpbmcpID0+IHtcbiAgICAgIGNvbnN0IHJlZmVyZW5jZSA9IHByb29mID8/ICdhdHRlbXB0U3VtbWFyeSc7XG4gICAgICBjb25zdCBrZXkgPSBraW5kICsgJzonICsgcmVhc29uO1xuICAgICAgY29uc3QgbWFya3MgPSB0aGlzLm1hcmtzO1xuICAgICAgY29uc3QgcHJldmlvdXMgPSBtYXJrcz8uZ2V0KGtleSk7XG4gICAgICBpZiAocHJvb2YgJiYgbWFya3MgJiYgcHJldmlvdXM/LmV2aWRlbmNlLmluY2x1ZGVzKCdhdHRlbXB0U3VtbWFyeScpKSB7XG4gICAgICAgIG1hcmtzLnNldChrZXksIHsgLi4ucHJldmlvdXMsIGV2aWRlbmNlOiBwcmV2aW91cy5ldmlkZW5jZS5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0gIT09ICdhdHRlbXB0U3VtbWFyeScpIH0pO1xuICAgICAgfVxuICAgICAgdGhpcy5hcHBlbmQoeyBraW5kLCByZWFzb24sIGV2aWRlbmNlOiBbcmVmZXJlbmNlXSB9KTtcbiAgICB9O1xuICAgIGlmIChsYXN0LmVmZmVjdCA9PT0gJ3Vua25vd24nKVxuICAgICAgYWRkKFxuICAgICAgICAndW5rbm93bi1lZmZlY3QnLFxuICAgICAgICAnVU5LTk9XTl9FRkZFQ1RfUkVDT1JERUQnLFxuICAgICAgICBtYXRjaGluZyAmJiB0ZXJtaW5hbC5lZmZlY3QgPT09ICd1bmtub3duJyA/IHRlcm1pbmFsLmV2aWRlbmNlIDogdW5kZWZpbmVkLFxuICAgICAgKTtcbiAgICBpZiAodGhpcy5yZXRyeVBvc3NpYmxlICYmIGxhc3QubmV4dCA9PT0gJ3N0b3AnICYmIFNUT1BQRURfUkVBU09OUy5oYXMobGFzdC5yZWFzb24pKVxuICAgICAgYWRkKCdnYXZlLXVwJywgJ1JFVFJZX1NUT1BfUkVDT1JERUQnLCBtYXRjaGluZyA/IHRlcm1pbmFsLmV2aWRlbmNlIDogdW5kZWZpbmVkKTtcbiAgfVxuXG4gIC8qKiBPbmx5IHRoZSBleHBsaWNpdCByZXRhaW5lZCBzdGFnZS1lcnJvciBwYXRoIGNhbGxzIHRoaXM7IGEgZGlhZ25vc3RpYyB2YWx1ZSBuZXZlciBjbGFzc2lmaWVzIGl0c2VsZi4gKi9cbiAgc3RhZ2VGYWlsZWQoZXJyb3JzOiB1bmtub3duKTogdm9pZCB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGRlc2NyaXB0b3IgPVxuICAgICAgICBlcnJvcnMgJiYgdHlwZW9mIGVycm9ycyA9PT0gJ29iamVjdCdcbiAgICAgICAgICA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZXJyb3JzLCAnc3RhZ2VFeGVjdXRpb25FcnJvcicpXG4gICAgICAgICAgOiB1bmRlZmluZWQ7XG4gICAgICBpZiAoZGVzY3JpcHRvciAmJiBPYmplY3QuaGFzT3duKGRlc2NyaXB0b3IsICd2YWx1ZScpKSB7XG4gICAgICAgIHRoaXMuYXBwZW5kKHsga2luZDogJ2Vycm9yJywgcmVhc29uOiAnRVJST1JfUkVDT1JERUQnLCBldmlkZW5jZTogWydlcnJvcnM6c3RhZ2VFeGVjdXRpb25FcnJvciddIH0pO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfSBjYXRjaCB7XG4gICAgICAvKiBBIG1hbGZvcm1lZCBldmlkZW5jZSBiYWcgaXMgdW5hdmFpbGFibGUsIG5ldmVyIGFub3RoZXIgc3RhZ2UgZmFpbHVyZS4gKi9cbiAgICB9XG4gICAgdGhpcy5taXNzaW5nKCk7XG4gIH1cblxuICBhdHRlbXB0RHJvcHBlZCgpOiB2b2lkIHtcbiAgICB0aGlzLmFwcGVuZCh7IGtpbmQ6ICdub3QtY29sbGVjdGVkJywgcmVhc29uOiAnRVZJREVOQ0VfTk9UX0NPTExFQ1RFRCcsIGV2aWRlbmNlOiBbJ2F0dGVtcHRzRHJvcHBlZCddIH0pO1xuICB9XG5cbiAgLyoqIEtlZXAgb25seSBib3VuZGVkIGV4YWN0IHJlZmVyZW5jZXM7IG9uZSBzbG90IGlzIHJlc2VydmVkIHRvIGRpc2Nsb3NlIG9taXNzaW9ucy4gKi9cbiAgYXBwZW5kKGF0dGVudGlvbjogQXR0ZW50aW9uKTogdm9pZCB7XG4gICAgaWYgKGF0dGVudGlvbi5raW5kID09PSAnbm90LWNvbGxlY3RlZCcpIHRoaXMub25PbWl0dGVkPy4oKTtcbiAgICBjb25zdCBrZXkgPSBhdHRlbnRpb24ua2luZCArICc6JyArIGF0dGVudGlvbi5yZWFzb247XG4gICAgY29uc3QgcHJldmlvdXMgPSB0aGlzLm1hcmtzPy5nZXQoa2V5KTtcbiAgICBjb25zdCByZWZlcmVuY2VzID0gWy4uLihwcmV2aW91cz8uZXZpZGVuY2UgPz8gW10pXTtcbiAgICBmb3IgKGNvbnN0IHJlZmVyZW5jZSBvZiBhdHRlbnRpb24uZXZpZGVuY2UpIHtcbiAgICAgIGlmICghdmFsaWRSZWZlcmVuY2UocmVmZXJlbmNlKSkge1xuICAgICAgICB0aGlzLm1pc3NpbmcoKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBpZiAocmVmZXJlbmNlcy5pbmNsdWRlcyhyZWZlcmVuY2UpKSBjb250aW51ZTtcbiAgICAgIGlmIChyZWZlcmVuY2VzLmxlbmd0aCA+PSBNQVhfUkVGRVJFTkNFUykge1xuICAgICAgICB0aGlzLm1pc3NpbmcoKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICByZWZlcmVuY2VzLnB1c2gocmVmZXJlbmNlKTtcbiAgICB9XG4gICAgaWYgKGF0dGVudGlvbi5raW5kICE9PSAnbm90LWNvbGxlY3RlZCcgJiYgcmVmZXJlbmNlcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHRoaXMubWlzc2luZygpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoIXByZXZpb3VzICYmICh0aGlzLm1hcmtzPy5zaXplID8/IDApID49IE1BWF9NQVJLUyAtIDEpIHtcbiAgICAgIHRoaXMubWlzc2luZygpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAodGhpcy5tYXJrcyA/Pz0gbmV3IE1hcCgpKS5zZXQoa2V5LCB7IGtpbmQ6IGF0dGVudGlvbi5raW5kLCByZWFzb246IGF0dGVudGlvbi5yZWFzb24sIGV2aWRlbmNlOiByZWZlcmVuY2VzIH0pO1xuICB9XG5cbiAgbWlzc2luZygpOiB2b2lkIHtcbiAgICB0aGlzLm9taXR0ZWQgPSB0cnVlO1xuICAgIHRoaXMub25PbWl0dGVkPy4oKTtcbiAgfVxuXG4gIC8qKiBDb3B5IGFscmVhZHkgY29sbGVjdGVkIGJvdW5kZWQgbWFya3MsIG5ldmVyIGFuIGF0dGVtcHQgYXJyYXksIGRpYWdub3N0aWMgYmFnIG9yIGV4ZWN1dGlvbiB0cmVlLiAqL1xuICBzbmFwc2hvdCgpOiByZWFkb25seSBBdHRlbnRpb25bXSB7XG4gICAgY29uc3QgcmVzdWx0ID0gWy4uLih0aGlzLm1hcmtzPy52YWx1ZXMoKSA/PyBbXSldLm1hcCgoYXR0ZW50aW9uKSA9PlxuICAgICAgT2JqZWN0LmZyZWV6ZSh7IC4uLmF0dGVudGlvbiwgZXZpZGVuY2U6IE9iamVjdC5mcmVlemUoWy4uLmF0dGVudGlvbi5ldmlkZW5jZV0pIH0pLFxuICAgICk7XG4gICAgaWYgKHRoaXMub21pdHRlZCAmJiAhcmVzdWx0LnNvbWUoKGF0dGVudGlvbikgPT4gYXR0ZW50aW9uLmtpbmQgPT09ICdub3QtY29sbGVjdGVkJykpIHJlc3VsdC5wdXNoKE1JU1NJTkdfQVRURU5USU9OKTtcbiAgICByZXR1cm4gT2JqZWN0LmZyZWV6ZShyZXN1bHQpO1xuICB9XG59XG4iXX0=
@@ -89,6 +89,8 @@ export interface ControlDecisionRecord {
89
89
  ruleLabel?: string;
90
90
  }
91
91
  export interface ControlDepRecorderOptions {
92
+ /** Opt in to a same-run collection acknowledgement in the snapshot bundle. */
93
+ captureCoverage?: boolean;
92
94
  /** Recorder id. Defaults to `control-deps-N` (auto-incremented). */
93
95
  id?: string;
94
96
  }
@@ -115,7 +117,11 @@ export declare class ControlDepRecorder implements FlowRecorder {
115
117
  private readonly consumedSlots;
116
118
  /** Convention 4 — runId of the run currently being recorded. */
117
119
  private lastRunId?;
120
+ private readonly captureCoverage;
121
+ private captureRunId?;
122
+ private captureIntact;
118
123
  constructor(options?: ControlDepRecorderOptions);
124
+ onRunStart(event: import('../engine/narrative/types.js').FlowRunEvent): void;
119
125
  onDecision(event: FlowDecisionEvent): void;
120
126
  onAttempt(event: FlowAttemptEvent): void;
121
127
  onSelected(event: FlowSelectedEvent): void;
@@ -146,13 +152,18 @@ export declare class ControlDepRecorder implements FlowRecorder {
146
152
  * Parentless roots cannot have a governing control edge.
147
153
  */
148
154
  toSnapshot(): {
149
- name: string;
150
155
  data: {
151
156
  decisions: ControlDecisionRecord[];
152
157
  controlDeps: {
153
158
  [k: string]: ControlDependency;
154
159
  };
155
160
  };
161
+ capture?: {
162
+ version: 1;
163
+ runId: string;
164
+ control: "captured" | "partial";
165
+ } | undefined;
166
+ name: string;
156
167
  };
157
168
  /** Reset all state (also happens automatically on runId change). */
158
169
  clear(): void;
@@ -91,9 +91,22 @@ export class ControlDepRecorder {
91
91
  consumedSlots = new Set();
92
92
  /** Convention 4 — runId of the run currently being recorded. */
93
93
  lastRunId;
94
+ captureCoverage;
95
+ captureRunId;
96
+ captureIntact = false;
94
97
  constructor(options = {}) {
98
+ this.captureCoverage = options.captureCoverage === true;
95
99
  this.id = options.id ?? `control-deps-${++_counter}`;
96
100
  }
101
+ onRunStart(event) {
102
+ if (this.captureCoverage) {
103
+ const runId = event.traversalContext?.runId;
104
+ if (runId)
105
+ this.resetIfNewRun(runId);
106
+ this.captureRunId = runId;
107
+ this.captureIntact = true;
108
+ }
109
+ }
97
110
  // ── FlowRecorder hooks ────────────────────────────────────────────────
98
111
  onDecision(event) {
99
112
  const ctx = event.traversalContext;
@@ -220,11 +233,20 @@ export class ControlDepRecorder {
220
233
  }
221
234
  return {
222
235
  name: 'control-dependencies',
236
+ ...(this.captureCoverage &&
237
+ this.captureRunId && {
238
+ capture: {
239
+ version: 1,
240
+ runId: this.captureRunId,
241
+ control: this.captureIntact ? 'captured' : 'partial',
242
+ },
243
+ }),
223
244
  data: { decisions: this.getDecisions(), controlDeps: Object.fromEntries(dependencies) },
224
245
  };
225
246
  }
226
247
  /** Reset all state (also happens automatically on runId change). */
227
248
  clear() {
249
+ this.captureIntact = false;
228
250
  this.parentOf.clear();
229
251
  this.decisions.clear();
230
252
  this.branchEntryToDecision.clear();
@@ -274,4 +296,4 @@ function matchedRuleLabel(evidence) {
274
296
  const rule = evidence.rules.find((r) => r.matched && r.branch === evidence.chosen) ?? evidence.rules.find((r) => r.matched);
275
297
  return rule?.label;
276
298
  }
277
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29udHJvbERlcFJlY29yZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9yZWNvcmRlci9Db250cm9sRGVwUmVjb3JkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBaUVHO0FBYUgsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBb0NyRCxJQUFJLFFBQVEsR0FBRyxDQUFDLENBQUM7QUFFakI7O0dBRUc7QUFDSCxNQUFNLFVBQVUsa0JBQWtCLENBQUMsVUFBcUMsRUFBRTtJQUN4RSxPQUFPLElBQUksa0JBQWtCLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDekMsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxNQUFNLE9BQU8sa0JBQWtCO0lBQ3BCLEVBQUUsQ0FBUztJQUVwQiwwRUFBMEU7SUFDekQsUUFBUSxHQUFHLElBQUksR0FBRyxFQUFrQixDQUFDO0lBQ3RELDJEQUEyRDtJQUMxQyxTQUFTLEdBQUcsSUFBSSxHQUFHLEVBQWlDLENBQUM7SUFDdEUsc0VBQXNFO0lBQ3JELHFCQUFxQixHQUFHLElBQUksR0FBRyxFQUFrQixDQUFDO0lBQ25FLGlFQUFpRTtJQUN6RCxPQUFPLEdBQXNCLEVBQUUsQ0FBQztJQUN4Qyx1RUFBdUU7SUFDdEQsYUFBYSxHQUFHLElBQUksR0FBRyxFQUFVLENBQUM7SUFDbkQsZ0VBQWdFO0lBQ3hELFNBQVMsQ0FBVTtJQUUzQixZQUFZLFVBQXFDLEVBQUU7UUFDakQsSUFBSSxDQUFDLEVBQUUsR0FBRyxPQUFPLENBQUMsRUFBRSxJQUFJLGdCQUFnQixFQUFFLFFBQVEsRUFBRSxDQUFDO0lBQ3ZELENBQUM7SUFFRCx5RUFBeUU7SUFFekUsVUFBVSxDQUFDLEtBQXdCO1FBQ2pDLE1BQU0sR0FBRyxHQUFHLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQztRQUNuQyxJQUFJLENBQUMsR0FBRztZQUFFLE9BQU87UUFDakIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFOUIsTUFBTSxTQUFTLEdBQUcsR0FBRyxDQUFDLGNBQWMsQ0FBQztRQUNyQyxNQUFNLFNBQVMsR0FBRyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDbkQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFO1lBQzVCLHFCQUFxQixFQUFFLFNBQVM7WUFDaEMsTUFBTSxFQUFFLEtBQUssQ0FBQyxNQUFNO1lBQ3BCLEdBQUcsQ0FBQyxLQUFLLENBQUMsUUFBUSxJQUFJLEVBQUUsUUFBUSxFQUFFLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNuRCxHQUFHLENBQUMsU0FBUyxLQUFLLFNBQVMsSUFBSSxFQUFFLFNBQVMsRUFBRSxDQUFDO1NBQzlDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2pELENBQUM7SUFFRCxTQUFTLENBQUMsS0FBdUI7UUFDL0IsTUFBTSxHQUFHLEdBQUcsS0FBSyxDQUFDLGdCQUFnQixDQUFDO1FBQ25DLE1BQU0sRUFBRSxNQUFNLEVBQUUsR0FBRyxLQUFLLENBQUM7UUFDekIsSUFBSSxDQUFDLEdBQUcsSUFBSSxNQUFNLENBQUMsSUFBSSxLQUFLLE1BQU0sSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUM7WUFBRSxPQUFPO1FBQ3ZFLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzlCLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUU7WUFDaEMsSUFBSSxFQUFFLGNBQWM7WUFDcEIscUJBQXFCLEVBQUUsTUFBTSxDQUFDLE1BQU07WUFDcEMsTUFBTSxFQUFFLE1BQU07WUFDZCxRQUFRLEVBQUUsTUFBTSxDQUFDLFFBQVE7WUFDekIsU0FBUyxFQUFFLE1BQU0sQ0FBQyxNQUFNO1NBQ3pCLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxVQUFVLENBQUMsS0FBd0I7UUFDakMsTUFBTSxHQUFHLEdBQUcsS0FBSyxDQUFDLGdCQUFnQixDQUFDO1FBQ25DLElBQUksQ0FBQyxHQUFHO1lBQUUsT0FBTztRQUNqQixJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM5QixJQUFJLEtBQUssQ0FBQyxRQUFRLENBQUMsTUFBTSxLQUFLLENBQUM7WUFBRSxPQUFPLENBQUMsc0NBQXNDO1FBRS9FLE1BQU0sU0FBUyxHQUFHLEdBQUcsQ0FBQyxjQUFjLENBQUM7UUFDckMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFO1lBQzVCLHFCQUFxQixFQUFFLFNBQVM7WUFDaEMsTUFBTSxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDO1lBQzNCLEdBQUcsQ0FBQyxLQUFLLENBQUMsUUFBUSxJQUFJLEVBQUUsUUFBUSxFQUFFLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztTQUNwRCxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsS0FBSyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO0lBQ3JFLENBQUM7SUFFRCxlQUFlLENBQUMsS0FBcUI7UUFDbkMsTUFBTSxHQUFHLEdBQUcsS0FBSyxDQUFDLGdCQUFnQixDQUFDO1FBQ25DLElBQUksQ0FBQyxHQUFHO1lBQUUsT0FBTztRQUNqQixJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUU5QixNQUFNLEVBQUUsY0FBYyxFQUFFLG9CQUFvQixFQUFFLEdBQUcsR0FBRyxDQUFDO1FBQ3JELElBQUksb0JBQW9CLEVBQUUsQ0FBQztZQUN6QixJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxjQUFjLEVBQUUsb0JBQW9CLENBQUMsQ0FBQztZQUN4RCxJQUFJLENBQUMsa0JBQWtCLENBQUMsY0FBYyxFQUFFLG9CQUFvQixFQUFFLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNyRixDQUFDO0lBQ0gsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsT0FBTyxDQUFDLEtBQXFCO1FBQzNCLE1BQU0sR0FBRyxHQUFHLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQztRQUNuQyxJQUFJLENBQUMsR0FBRztZQUFFLE9BQU87UUFDakIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDOUIsSUFBSSxHQUFHLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztZQUM3QixvRUFBb0U7WUFDcEUsb0VBQW9FO1lBQ3BFLHFFQUFxRTtZQUNyRSxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsY0FBYyxFQUFFLEdBQUcsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1lBQ2hFLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsY0FBYyxFQUFFLEdBQUcsQ0FBQyxvQkFBb0IsRUFBRSxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDN0YsQ0FBQztJQUNILENBQUM7SUFFRCx5RUFBeUU7SUFFekU7Ozs7O09BS0c7SUFDSCxNQUFNLENBQUMsY0FBc0I7UUFDM0IsTUFBTSxJQUFJLEdBQUcsSUFBSSxHQUFHLEVBQVUsQ0FBQztRQUMvQixJQUFJLEdBQUcsR0FBdUIsY0FBYyxDQUFDO1FBQzdDLE9BQU8sR0FBRyxLQUFLLFNBQVMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUMzQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ2QsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUN0RCxJQUFJLFNBQVMsS0FBSyxTQUFTLEVBQUUsQ0FBQztnQkFDNUIsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUM7Z0JBQzdDLE9BQU87b0JBQ0wsU0FBUztvQkFDVCxHQUFHLENBQUMsTUFBTSxFQUFFLFNBQVMsS0FBSyxTQUFTLElBQUksRUFBRSxLQUFLLEVBQUUsTUFBTSxDQUFDLFNBQVMsRUFBRSxDQUFDO2lCQUNwRSxDQUFDO1lBQ0osQ0FBQztZQUNELEdBQUcsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUMvQixDQUFDO1FBQ0QsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQztJQUVELHFGQUFxRjtJQUNyRixRQUFRO1FBQ04sT0FBTyxDQUFDLGNBQWMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUN6RCxDQUFDO0lBRUQsNEZBQTRGO0lBQzVGLGNBQWMsQ0FBQyxjQUFzQjtRQUNuQyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUNsRCxPQUFPLE1BQU0sRUFBRSxJQUFJLEtBQUssY0FBYyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztJQUM5RCxDQUFDO0lBRUQsMEdBQTBHO0lBQzFHLFlBQVk7UUFDVixPQUFPLENBQUMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7SUFDdEMsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxVQUFVO1FBQ1IsTUFBTSxZQUFZLEdBQWtDLEVBQUUsQ0FBQztRQUN2RCxLQUFLLE1BQU0sY0FBYyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQztZQUNsRCxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1lBQy9DLElBQUksVUFBVTtnQkFBRSxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUMsY0FBYyxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUM7UUFDbEUsQ0FBQztRQUNELE9BQU87WUFDTCxJQUFJLEVBQUUsc0JBQXNCO1lBQzVCLElBQUksRUFBRSxFQUFFLFNBQVMsRUFBRSxJQUFJLENBQUMsWUFBWSxFQUFFLEVBQUUsV0FBVyxFQUFFLE1BQU0sQ0FBQyxXQUFXLENBQUMsWUFBWSxDQUFDLEVBQUU7U0FDeEYsQ0FBQztJQUNKLENBQUM7SUFFRCxvRUFBb0U7SUFDcEUsS0FBSztRQUNILElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDdEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUN2QixJQUFJLENBQUMscUJBQXFCLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDbkMsSUFBSSxDQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7UUFDbEIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUM3QixDQUFDO0lBRUQseUVBQXlFO0lBRXpFLHlFQUF5RTtJQUNqRSxhQUFhLENBQUMsS0FBYTtRQUNqQyxJQUFJLEtBQUssS0FBSyxJQUFJLENBQUMsU0FBUztZQUFFLE9BQU87UUFDckMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ2IsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7SUFDekIsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0ssa0JBQWtCLENBQUMsY0FBc0IsRUFBRSxvQkFBNEIsRUFBRSxRQUFpQjtRQUNoRyxJQUFJLGNBQWMsS0FBSyxvQkFBb0I7WUFBRSxPQUFPLENBQUMsd0JBQXdCO1FBQzdFLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDO1lBQUUsT0FBTztRQUVuRCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUM3QyxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzFCLElBQUksQ0FBQyxDQUFDLFNBQVMsS0FBSyxvQkFBb0I7Z0JBQUUsU0FBUztZQUVuRCxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsQ0FBQztZQUN2QyxJQUFJLFFBQVE7Z0JBQUUsSUFBSSxDQUFDLHFCQUFxQixDQUFDLEdBQUcsQ0FBQyxjQUFjLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQzFFLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNkLElBQUksQ0FBQyxDQUFDLFNBQVMsSUFBSSxDQUFDO2dCQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUNoRCxPQUFPO1FBQ1QsQ0FBQztJQUNILENBQUM7Q0FDRjtBQUVEOzs7R0FHRztBQUNILFNBQVMsZ0JBQWdCLENBQUMsUUFBc0M7SUFDOUQsSUFBSSxDQUFDLFFBQVE7UUFBRSxPQUFPLFNBQVMsQ0FBQztJQUNoQyxNQUFNLElBQUksR0FDUixRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sSUFBSSxDQUFDLENBQUMsTUFBTSxLQUFLLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ2pILE9BQU8sSUFBSSxFQUFFLEtBQUssQ0FBQztBQUNyQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb250cm9sRGVwUmVjb3JkZXIg4oCUIGNvbnRyb2wtZGVwZW5kZW5jZSB0cmFja2luZyBmcm9tIGZsb3cgZXZlbnRzIChSRkMtMDAzIEQ1KS5cbiAqXG4gKiBUaGUgZ2FwIHRoaXMgZmlsbHM6XG4gKiAgIFRoZSBiYWNrdHJhY2tlcidzIGBjb250cm9sRGVwc2Agb3B0aW9uIChEMykgbmVlZHMgYSBgQ29udHJvbERlcExvb2t1cGA6XG4gKiAgIFwid2hpY2ggZGVjaWRlciBleGVjdXRpb24gYWxsb3dlZCB0aGlzIHN0YWdlIHRvIHJ1bj9cIiBUaGUgZW5naW5lIGtub3dzXG4gKiAgIHRoaXMgZHVyaW5nIHRyYXZlcnNhbCBidXQgdGhlIGNvbW1pdCBsb2cgZG9lc24ndCByZWNvcmQgaXQg4oCUIGNvbnRyb2xcbiAqICAgZmxvdyBpcyBhIEZsb3dSZWNvcmRlciBjb25jZXJuLiBUaGlzIHJlY29yZGVyIGlzIHRoZSBzdGFuZGFyZCBwcm9kdWNlcjpcbiAqICAgb25lIHN1YnNjcmlwdGlvbiwgb25lIGxvb2t1cCwgcGx1ZyBpdCBzdHJhaWdodCBpbnRvIGBjYXVzYWxDaGFpbmAuXG4gKlxuICogSG93IGl0IHdvcmtzIOKAlCB0d28gY29ycmVsYXRpb24gc3RydWN0dXJlcyBidWlsdCBkdXJpbmcgdHJhdmVyc2FsOlxuICpcbiAqICAgMS4gYHBhcmVudE9mYCDigJQgdGhlIHJ1bnRpbWUgYW5jZXN0b3IgY2hhaW4sIGZyb20gZXZlcnkgc3RhZ2UgZXZlbnQnc1xuICogICAgICBgdHJhdmVyc2FsQ29udGV4dC5wYXJlbnRSdW50aW1lU3RhZ2VJZGAgKFJGQy0wMDMgRDEpLiBDcm9zc2VzXG4gKiAgICAgIHN1YmZsb3cgYm91bmRhcmllczsgbG9vcCByZS1lbnRyaWVzIHN0YXkgdW5hbWJpZ3VvdXMgYmVjYXVzZVxuICogICAgICBydW50aW1lIGlkcyBkaWZmZXIgcGVyIGl0ZXJhdGlvbi5cbiAqXG4gKiAgIDIuIGBicmFuY2hFbnRyeVRvRGVjaXNpb25gIOKAlCBvbiBgb25EZWNpc2lvbmAvYG9uU2VsZWN0ZWRgIHRoZSBkZWNpc2lvblxuICogICAgICBpcyByZWNvcmRlZCBhcyBQRU5ESU5HOyB0aGUgbmV4dCBzdGFnZShzKSBleGVjdXRlZCB3aG9zZVxuICogICAgICBgcGFyZW50UnVudGltZVN0YWdlSWRgIElTIHRoZSBkZWNpZGVyJ3MgcnVudGltZVN0YWdlSWQgYXJlIGl0c1xuICogICAgICBicmFuY2ggZW50cmllcyAoMSBmb3IgYSBkZWNpZGVyLCBOID0gc2VsZWN0ZWQubGVuZ3RoIGZvciBhXG4gKiAgICAgIHNlbGVjdG9yKS4gQ29ycmVsYXRpb24gaXMgYnkgcGFyZW50LWlkICsgY291bnQsIE5PVCBieSBzdGFnZSBuYW1lIOKAlFxuICogICAgICBzdWJmbG93LW1vdW50IGV2ZW50cyBjYXJyeSBwYXRoLXByZWZpeGVkIGlubmVyLXJvb3QgbmFtZXMgdGhhdFxuICogICAgICBkb24ndCBtYXRjaCBgRmxvd0RlY2lzaW9uRXZlbnQuY2hvc2VuYCwgYW5kIHNlbGVjdG9ycyBlbWl0IGFcbiAqICAgICAgc3ludGhldGljIGZvcmsgZXZlbnQgc2hhcmluZyB0aGUgc2VsZWN0b3IncyBvd24gcnVudGltZVN0YWdlSWRcbiAqICAgICAgKGV4Y2x1ZGVkIHZpYSB0aGUgc2VsZi1pZCBndWFyZCkuIEEgYnJhbmNoIHRoYXQgVEhST1dTIGJlZm9yZVxuICogICAgICBjb21wbGV0aW5nIGNvbnN1bWVzIGl0cyBzbG90IHZpYSBgb25FcnJvcmAsIHNvIHRoZSBwb3N0LWZhbi1vdXRcbiAqICAgICAgY29udmVyZ2VuY2Ugc3RhZ2UgaXMgbmV2ZXIgbWlzYXR0cmlidXRlZCBhcyBhIGJyYW5jaCBlbnRyeS5cbiAqXG4gKiAgIDMuIGF0dGVtcHQgc3RvcHMgKDEwLjEpIOKAlCBgb25BdHRlbXB0YDogYSBzdGFnZSB3aG9zZSByZXRyeSBzZXJpZXMgU1RPUFBFRFxuICogICAgICAoaXQgZ2F2ZSB1cCwgb3IgYSBsYXRlciBhdHRlbXB0IHBhdXNlZCBvciB3YXMgYWJvcnRlZDsgdGhlIHNoYXJlZFxuICogICAgICBwcmVkaWNhdGUgYHJlY29yZGVyL2F0dGVtcHRTZXJpZXMudHMgwrcgaXNSZXRyeUV2aWRlbmNlYCkgbWFkZSBhIGRlY2lzaW9uIG9mIGl0c1xuICogICAgICBvd24g4oCUIHRoZSByZXRyeS1vci1zdG9wIGRlY2lzaW9uLCBpbiB0aGUgc2hhcGUgYGRlY2lkZSgpYCBwcm9kdWNlcy4gSXRcbiAqICAgICAgaXMgcmVjb3JkZWQgYmVzaWRlIHRoZSBkZWNpZGVycyBhcyBga2luZDogJ2F0dGVtcHQtc3RvcCdgXG4gKiAgICAgIChgZ2V0RGVjaXNpb25zKClgLCBgZ2V0QXR0ZW1wdFN0b3AoaWQpYCksIGBjaG9zZW46ICdzdG9wJ2AsIHRoZSBzdG9wXG4gKiAgICAgIHJlYXNvbiBhcyBpdHMgYHJ1bGVMYWJlbGAuIEl0IGlzIE5PVCBhIGJyYW5jaCBlbnRyeTogYSBjb250cm9sIGVkZ2UgaW5cbiAqICAgICAgYGNhdXNhbENoYWluYCBsaW5rcyBhIHN0YWdlIHRvIEFOT1RIRVIgZXhlY3V0aW9uIHRoYXQgZ292ZXJuZWQgaXQsIGFuZFxuICogICAgICB0aGUgc3RvcCBnb3Zlcm5zIHRoZSBzdGFnZSBpdHNlbGYg4oCUIHNvIGBsb29rdXBgIGlzIHVuY2hhbmdlZCwgYW5kIGFcbiAqICAgICAgcmVhZGVyIHdhbGtpbmcgYSBmYWlsZWQgc3RhZ2UgcmVhZHMgdGhlIHN0b3Agb2ZmIGl0cyBkZWNpc2lvbiByZWNvcmQuXG4gKlxuICogICBgbG9va3VwKHJ1bnRpbWVTdGFnZUlkKWAgdGhlbiB3YWxrcyB0aGUgYW5jZXN0b3IgY2hhaW4gZnJvbSB0aGUgc3RhZ2VcbiAqICAgdXB3YXJkOyB0aGUgZmlyc3QgYW5jZXN0b3IgKG9yIHRoZSBzdGFnZSBpdHNlbGYpIHJlZ2lzdGVyZWQgYXMgYVxuICogICBicmFuY2ggZW50cnkgeWllbGRzIGl0cyBnb3Zlcm5pbmcgZGVjaWRlciDigJQgdGhlIE5FQVJFU1QgZGVjaXNpb24uXG4gKiAgIE5lc3RlZCBkZWNpc2lvbnMgY29tcG9zZSBuYXR1cmFsbHk6IHRoZSBiYWNrdHJhY2tlciBleHBhbmRzIHRoZVxuICogICBkZWNpZGVyIG5vZGUgYW5kIGFza3MgYWdhaW4uXG4gKlxuICogQ29udmVudGlvbiA0OiBzdGF0ZSByZXNldHMgd2hlbiBgdHJhdmVyc2FsQ29udGV4dC5ydW5JZGAgY2hhbmdlcyDigJQgZWFjaFxuICogcnVuIChhbmQgZWFjaCByZXN1bWUsIHdoaWNoIG1pbnRzIGEgZnJlc2ggcnVuSWQpIHN0YXJ0cyBjbGVhbi4gQ29udHJvbFxuICogY2hhaW5zIHRoZXJlZm9yZSBkbyBOT1Qgc3Vydml2ZSBhIHBhdXNlL3Jlc3VtZSBib3VuZGFyeTogcG9zdC1yZXN1bWVcbiAqIHN0YWdlcyBjYW5ub3QgcmVzb2x2ZSBwcmUtcGF1c2UgZGVjaXNpb25zLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBpbXBvcnQgeyBjb250cm9sRGVwUmVjb3JkZXIgfSBmcm9tICdmb290cHJpbnRqcy90cmFjZSc7XG5pbXBvcnQgeyBjYXVzYWxDaGFpbiB9IGZyb20gJ2Zvb3R0cmFjZSc7XG4gKlxuICogY29uc3QgY3RybCA9IGNvbnRyb2xEZXBSZWNvcmRlcigpO1xuICogZXhlY3V0b3IuYXR0YWNoQ29tYmluZWRSZWNvcmRlcihjdHJsKTsgLy8gYXV0by1yb3V0ZXMgdG8gRmxvd1JlY29yZGVyIGNoYW5uZWxcbiAqXG4gKiBhd2FpdCBleGVjdXRvci5ydW4oeyBpbnB1dCB9KTtcbiAqXG4gKiBjb25zdCBkYWcgPSBjYXVzYWxDaGFpbihjb21taXRMb2csICdhcHByb3ZlIzInLCBrZXlzUmVhZCwge1xuICogICBjb250cm9sRGVwczogY3RybC5hc0xvb2t1cCgpLFxuICogfSk7XG4gKiBgYGBcbiAqL1xuXG5pbXBvcnQgdHlwZSB7IENvbnRyb2xEZXBlbmRlbmN5LCBDb250cm9sRGVwTG9va3VwIH0gZnJvbSAnZm9vdHRyYWNlJztcblxuaW1wb3J0IHR5cGUgeyBEZWNpc2lvbkV2aWRlbmNlLCBTZWxlY3Rpb25FdmlkZW5jZSB9IGZyb20gJy4uL2RlY2lkZS90eXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7XG4gIEZsb3dBdHRlbXB0RXZlbnQsXG4gIEZsb3dEZWNpc2lvbkV2ZW50LFxuICBGbG93RXJyb3JFdmVudCxcbiAgRmxvd1JlY29yZGVyLFxuICBGbG93U2VsZWN0ZWRFdmVudCxcbiAgRmxvd1N0YWdlRXZlbnQsXG59IGZyb20gJy4uL2VuZ2luZS9uYXJyYXRpdmUvdHlwZXMuanMnO1xuaW1wb3J0IHsgaXNSZXRyeUV2aWRlbmNlIH0gZnJvbSAnLi9hdHRlbXB0U2VyaWVzLmpzJztcblxuLyoqIE9uZSByZWNvcmRlZCBkZWNpc2lvbi9zZWxlY3Rpb24gZXZlbnQgKFJGQy0wMDMgRDUpLiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb250cm9sRGVjaXNpb25SZWNvcmQge1xuICAvKipcbiAgICogYCdhdHRlbXB0LXN0b3AnYCBmb3IgYSBzdGFnZSdzIG93biByZXRyeS1vci1zdG9wIGRlY2lzaW9uIHRoYXQgU1RPUFBFRCBpdHMgc2VyaWVzICgxMC4xKSDigJQgdGhlblxuICAgKiBgZGVjaWRlclJ1bnRpbWVTdGFnZUlkYCBpcyB0aGUgc3RhZ2UncyBleGVjdXRpb24sIGBjaG9zZW5gIGlzIGAnc3RvcCdgLCBgZXZpZGVuY2VgIHRoZSBhdHRlbXB0J3MgZGVjaXNpb24gYW5kXG4gICAqIGBydWxlTGFiZWxgIHRoZSBzdG9wIHJlYXNvbi4gQWJzZW50IGZvciBhIGRlY2lkZXIgLyBzZWxlY3Rvci5cbiAgICovXG4gIGtpbmQ/OiAnYXR0ZW1wdC1zdG9wJztcbiAgLyoqIHJ1bnRpbWVTdGFnZUlkIG9mIHRoZSBkZWNpZGVyL3NlbGVjdG9yIGV4ZWN1dGlvbiBzdGVwLiAqL1xuICBkZWNpZGVyUnVudGltZVN0YWdlSWQ6IHN0cmluZztcbiAgLyoqIENob3NlbiBicmFuY2ggZGlzcGxheSBuYW1lIChkZWNpZGVyKSBvciBzZWxlY3RlZCBuYW1lcyAoc2VsZWN0b3IpLiAqL1xuICBjaG9zZW46IHN0cmluZyB8IHJlYWRvbmx5IHN0cmluZ1tdO1xuICAvKiogU3RydWN0dXJlZCBldmlkZW5jZSBmcm9tIGRlY2lkZSgpL3NlbGVjdCgpLCB3aGVuIHRoZSBzdGFnZSB1c2VkIHRoZW0uICovXG4gIGV2aWRlbmNlPzogRGVjaXNpb25FdmlkZW5jZSB8IFNlbGVjdGlvbkV2aWRlbmNlO1xuICAvKipcbiAgICogVGhlIGRlY2lkZSgpIHJ1bGUgbGFiZWwgdGhhdCBwcm9kdWNlZCB0aGUgZGVjaXNpb24gKGUuZy4gJ0dvb2QgY3JlZGl0JykuXG4gICAqIERlY2lkZXJzIG9ubHkg4oCUIGEgc2VsZWN0b3IgcGlja3MgTiBicmFuY2hlcyBhbmQgbm8gc2luZ2xlIGxhYmVsXG4gICAqIGF0dHJpYnV0ZXMgdG8gYWxsIG9mIHRoZW0gKGluc3BlY3QgYGV2aWRlbmNlYCBpbnN0ZWFkKS5cbiAgICovXG4gIHJ1bGVMYWJlbD86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDb250cm9sRGVwUmVjb3JkZXJPcHRpb25zIHtcbiAgLyoqIFJlY29yZGVyIGlkLiBEZWZhdWx0cyB0byBgY29udHJvbC1kZXBzLU5gIChhdXRvLWluY3JlbWVudGVkKS4gKi9cbiAgaWQ/OiBzdHJpbmc7XG59XG5cbi8qKiBBIGRlY2lzaW9uIGF3YWl0aW5nIGJyYW5jaC1lbnRyeSBjb3JyZWxhdGlvbi4gKi9cbmludGVyZmFjZSBQZW5kaW5nRGVjaXNpb24ge1xuICBkZWNpZGVySWQ6IHN0cmluZztcbiAgLyoqIEhvdyBtYW55IGJyYW5jaCBlbnRyaWVzIGFyZSBzdGlsbCBleHBlY3RlZCAoZGVjaWRlcjogMSwgc2VsZWN0b3I6IE4pLiAqL1xuICByZW1haW5pbmc6IG51bWJlcjtcbn1cblxubGV0IF9jb3VudGVyID0gMDtcblxuLyoqXG4gKiBGYWN0b3J5IOKAlCBtYXRjaGVzIHRoZSBgdG9wb2xvZ3lSZWNvcmRlcigpYCAvIGBpbk91dFJlY29yZGVyKClgIHN0eWxlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY29udHJvbERlcFJlY29yZGVyKG9wdGlvbnM6IENvbnRyb2xEZXBSZWNvcmRlck9wdGlvbnMgPSB7fSk6IENvbnRyb2xEZXBSZWNvcmRlciB7XG4gIHJldHVybiBuZXcgQ29udHJvbERlcFJlY29yZGVyKG9wdGlvbnMpO1xufVxuXG4vKipcbiAqIFN0YXRlZnVsIGFjY3VtdWxhdG9yIHRoYXQgd2F0Y2hlcyBGbG93UmVjb3JkZXIgZXZlbnRzIGFuZCBhbnN3ZXJzXG4gKiBcIndoaWNoIGRlY2lzaW9uIGFsbG93ZWQgdGhpcyBzdGFnZSB0byBydW4/XCIgQXR0YWNoIHZpYVxuICogYGV4ZWN1dG9yLmF0dGFjaENvbWJpbmVkUmVjb3JkZXIocmVjb3JkZXIpYCAob3IgYGF0dGFjaEZsb3dSZWNvcmRlcmApLlxuICovXG5leHBvcnQgY2xhc3MgQ29udHJvbERlcFJlY29yZGVyIGltcGxlbWVudHMgRmxvd1JlY29yZGVyIHtcbiAgcmVhZG9ubHkgaWQ6IHN0cmluZztcblxuICAvKiogUnVudGltZSBhbmNlc3RvciBjaGFpbjogcnVudGltZVN0YWdlSWQg4oaSIHBhcmVudFJ1bnRpbWVTdGFnZUlkIChEMSkuICovXG4gIHByaXZhdGUgcmVhZG9ubHkgcGFyZW50T2YgPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nPigpO1xuICAvKiogUmVjb3JkZWQgZGVjaXNpb25zLCBrZXllZCBieSBkZWNpZGVyIHJ1bnRpbWVTdGFnZUlkLiAqL1xuICBwcml2YXRlIHJlYWRvbmx5IGRlY2lzaW9ucyA9IG5ldyBNYXA8c3RyaW5nLCBDb250cm9sRGVjaXNpb25SZWNvcmQ+KCk7XG4gIC8qKiBCcmFuY2gtZW50cnkgcnVudGltZVN0YWdlSWQg4oaSIGdvdmVybmluZyBkZWNpZGVyIHJ1bnRpbWVTdGFnZUlkLiAqL1xuICBwcml2YXRlIHJlYWRvbmx5IGJyYW5jaEVudHJ5VG9EZWNpc2lvbiA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KCk7XG4gIC8qKiBEZWNpc2lvbnMgd2hvc2UgYnJhbmNoIGVudHJpZXMgaGF2ZSBub3QgYWxsIGJlZW4gc2VlbiB5ZXQuICovXG4gIHByaXZhdGUgcGVuZGluZzogUGVuZGluZ0RlY2lzaW9uW10gPSBbXTtcbiAgLyoqIFN0YWdlIGlkcyB0aGF0IGFscmVhZHkgY29uc3VtZWQgYSBwZW5kaW5nIHNsb3QgKGVudHJ5IE9SIGVycm9yKS4gKi9cbiAgcHJpdmF0ZSByZWFkb25seSBjb25zdW1lZFNsb3RzID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gIC8qKiBDb252ZW50aW9uIDQg4oCUIHJ1bklkIG9mIHRoZSBydW4gY3VycmVudGx5IGJlaW5nIHJlY29yZGVkLiAqL1xuICBwcml2YXRlIGxhc3RSdW5JZD86IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihvcHRpb25zOiBDb250cm9sRGVwUmVjb3JkZXJPcHRpb25zID0ge30pIHtcbiAgICB0aGlzLmlkID0gb3B0aW9ucy5pZCA/PyBgY29udHJvbC1kZXBzLSR7KytfY291bnRlcn1gO1xuICB9XG5cbiAgLy8g4pSA4pSAIEZsb3dSZWNvcmRlciBob29rcyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuICBvbkRlY2lzaW9uKGV2ZW50OiBGbG93RGVjaXNpb25FdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IGN0eCA9IGV2ZW50LnRyYXZlcnNhbENvbnRleHQ7XG4gICAgaWYgKCFjdHgpIHJldHVybjtcbiAgICB0aGlzLnJlc2V0SWZOZXdSdW4oY3R4LnJ1bklkKTtcblxuICAgIGNvbnN0IGRlY2lkZXJJZCA9IGN0eC5ydW50aW1lU3RhZ2VJZDtcbiAgICBjb25zdCBydWxlTGFiZWwgPSBtYXRjaGVkUnVsZUxhYmVsKGV2ZW50LmV2aWRlbmNlKTtcbiAgICB0aGlzLmRlY2lzaW9ucy5zZXQoZGVjaWRlcklkLCB7XG4gICAgICBkZWNpZGVyUnVudGltZVN0YWdlSWQ6IGRlY2lkZXJJZCxcbiAgICAgIGNob3NlbjogZXZlbnQuY2hvc2VuLFxuICAgICAgLi4uKGV2ZW50LmV2aWRlbmNlICYmIHsgZXZpZGVuY2U6IGV2ZW50LmV2aWRlbmNlIH0pLFxuICAgICAgLi4uKHJ1bGVMYWJlbCAhPT0gdW5kZWZpbmVkICYmIHsgcnVsZUxhYmVsIH0pLFxuICAgIH0pO1xuICAgIHRoaXMucGVuZGluZy5wdXNoKHsgZGVjaWRlcklkLCByZW1haW5pbmc6IDEgfSk7XG4gIH1cblxuICBvbkF0dGVtcHQoZXZlbnQ6IEZsb3dBdHRlbXB0RXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCBjdHggPSBldmVudC50cmF2ZXJzYWxDb250ZXh0O1xuICAgIGNvbnN0IHsgcmVjb3JkIH0gPSBldmVudDtcbiAgICBpZiAoIWN0eCB8fCByZWNvcmQubmV4dCAhPT0gJ3N0b3AnIHx8ICFpc1JldHJ5RXZpZGVuY2UocmVjb3JkKSkgcmV0dXJuO1xuICAgIHRoaXMucmVzZXRJZk5ld1J1bihjdHgucnVuSWQpO1xuICAgIHRoaXMuZGVjaXNpb25zLnNldChyZWNvcmQuc2VyaWVzLCB7XG4gICAgICBraW5kOiAnYXR0ZW1wdC1zdG9wJyxcbiAgICAgIGRlY2lkZXJSdW50aW1lU3RhZ2VJZDogcmVjb3JkLnNlcmllcyxcbiAgICAgIGNob3NlbjogJ3N0b3AnLFxuICAgICAgZXZpZGVuY2U6IHJlY29yZC5kZWNpc2lvbixcbiAgICAgIHJ1bGVMYWJlbDogcmVjb3JkLnJlYXNvbixcbiAgICB9KTtcbiAgfVxuXG4gIG9uU2VsZWN0ZWQoZXZlbnQ6IEZsb3dTZWxlY3RlZEV2ZW50KTogdm9pZCB7XG4gICAgY29uc3QgY3R4ID0gZXZlbnQudHJhdmVyc2FsQ29udGV4dDtcbiAgICBpZiAoIWN0eCkgcmV0dXJuO1xuICAgIHRoaXMucmVzZXRJZk5ld1J1bihjdHgucnVuSWQpO1xuICAgIGlmIChldmVudC5zZWxlY3RlZC5sZW5ndGggPT09IDApIHJldHVybjsgLy8gbm90aGluZyBzZWxlY3RlZCDihpIgbm90aGluZyBnb3Zlcm5lZFxuXG4gICAgY29uc3QgZGVjaWRlcklkID0gY3R4LnJ1bnRpbWVTdGFnZUlkO1xuICAgIHRoaXMuZGVjaXNpb25zLnNldChkZWNpZGVySWQsIHtcbiAgICAgIGRlY2lkZXJSdW50aW1lU3RhZ2VJZDogZGVjaWRlcklkLFxuICAgICAgY2hvc2VuOiBbLi4uZXZlbnQuc2VsZWN0ZWRdLFxuICAgICAgLi4uKGV2ZW50LmV2aWRlbmNlICYmIHsgZXZpZGVuY2U6IGV2ZW50LmV2aWRlbmNlIH0pLFxuICAgIH0pO1xuICAgIHRoaXMucGVuZGluZy5wdXNoKHsgZGVjaWRlcklkLCByZW1haW5pbmc6IGV2ZW50LnNlbGVjdGVkLmxlbmd0aCB9KTtcbiAgfVxuXG4gIG9uU3RhZ2VFeGVjdXRlZChldmVudDogRmxvd1N0YWdlRXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCBjdHggPSBldmVudC50cmF2ZXJzYWxDb250ZXh0O1xuICAgIGlmICghY3R4KSByZXR1cm47XG4gICAgdGhpcy5yZXNldElmTmV3UnVuKGN0eC5ydW5JZCk7XG5cbiAgICBjb25zdCB7IHJ1bnRpbWVTdGFnZUlkLCBwYXJlbnRSdW50aW1lU3RhZ2VJZCB9ID0gY3R4O1xuICAgIGlmIChwYXJlbnRSdW50aW1lU3RhZ2VJZCkge1xuICAgICAgdGhpcy5wYXJlbnRPZi5zZXQocnVudGltZVN0YWdlSWQsIHBhcmVudFJ1bnRpbWVTdGFnZUlkKTtcbiAgICAgIHRoaXMuY29uc3VtZVBlbmRpbmdTbG90KHJ1bnRpbWVTdGFnZUlkLCBwYXJlbnRSdW50aW1lU3RhZ2VJZCwgLyogcmVnaXN0ZXIgKi8gdHJ1ZSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEEgYnJhbmNoIHRoYXQgdGhyb3dzIG5ldmVyIGZpcmVzIGBvblN0YWdlRXhlY3V0ZWRgIOKAlCB3aXRob3V0IHRoaXMgaG9va1xuICAgKiBpdHMgcGVuZGluZyBzbG90IHdvdWxkIGxlYWsgYW5kIHRoZSBwb3N0LWZhbi1vdXQgY29udmVyZ2VuY2Ugc3RhZ2VcbiAgICogKHdob3NlIGNvbnRleHQgYWxzbyBjaGFpbnMgdG8gdGhlIHNlbGVjdG9yKSB3b3VsZCBiZSBtaXNhdHRyaWJ1dGVkIGFzXG4gICAqIGEgYnJhbmNoIGVudHJ5IHVuZGVyIGJlc3QtZWZmb3J0IChgZmFpbEZhc3Q6IGZhbHNlYCkgZmFuLW91dHMuXG4gICAqL1xuICBvbkVycm9yKGV2ZW50OiBGbG93RXJyb3JFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IGN0eCA9IGV2ZW50LnRyYXZlcnNhbENvbnRleHQ7XG4gICAgaWYgKCFjdHgpIHJldHVybjtcbiAgICB0aGlzLnJlc2V0SWZOZXdSdW4oY3R4LnJ1bklkKTtcbiAgICBpZiAoY3R4LnBhcmVudFJ1bnRpbWVTdGFnZUlkKSB7XG4gICAgICAvLyBSZWNvcmQgdGhlIGNoYWluIEFORCBhdHRyaWJ1dGUgdGhlIGZhaWxlZCBzdGFnZSB0byBpdHMgZGVjaXNpb24g4oCUXG4gICAgICAvLyB0aGUgc3RhZ2UgUkFOIChhbmQgbWF5IGhhdmUgY29tbWl0dGVkIHBhcnRpYWwgd3JpdGVzKSBiZWNhdXNlIHRoZVxuICAgICAgLy8gZGVjaXNpb24gY2hvc2UgaXQ7IGZhaWxpbmcgYWZ0ZXJ3YXJkcyBkb2Vzbid0IHVuZG8gdGhlIGRlcGVuZGVuY3kuXG4gICAgICB0aGlzLnBhcmVudE9mLnNldChjdHgucnVudGltZVN0YWdlSWQsIGN0eC5wYXJlbnRSdW50aW1lU3RhZ2VJZCk7XG4gICAgICB0aGlzLmNvbnN1bWVQZW5kaW5nU2xvdChjdHgucnVudGltZVN0YWdlSWQsIGN0eC5wYXJlbnRSdW50aW1lU3RhZ2VJZCwgLyogcmVnaXN0ZXIgKi8gdHJ1ZSk7XG4gICAgfVxuICB9XG5cbiAgLy8g4pSA4pSAIFF1ZXJpZXMg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbiAgLyoqXG4gICAqIFJlc29sdmUgdGhlIE5FQVJFU1QgZ292ZXJuaW5nIGRlY2lzaW9uIGZvciBhbiBleGVjdXRpb24gc3RlcDogd2Fsa3MgdGhlXG4gICAqIHJ1bnRpbWUgYW5jZXN0b3IgY2hhaW4gKHRoZSBzdGVwIGl0c2VsZiBmaXJzdCkgdW50aWwgaXQgaGl0cyBhXG4gICAqIHJlZ2lzdGVyZWQgYnJhbmNoIGVudHJ5LiBgdW5kZWZpbmVkYCB3aGVuIHRoZSBzdGVwIGlzIG5vdCBkb3duc3RyZWFtIG9mXG4gICAqIGFueSByZWNvcmRlZCBkZWNpc2lvbi5cbiAgICovXG4gIGxvb2t1cChydW50aW1lU3RhZ2VJZDogc3RyaW5nKTogQ29udHJvbERlcGVuZGVuY3kgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IHNlZW4gPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgICBsZXQgY3VyOiBzdHJpbmcgfCB1bmRlZmluZWQgPSBydW50aW1lU3RhZ2VJZDtcbiAgICB3aGlsZSAoY3VyICE9PSB1bmRlZmluZWQgJiYgIXNlZW4uaGFzKGN1cikpIHtcbiAgICAgIHNlZW4uYWRkKGN1cik7XG4gICAgICBjb25zdCBkZWNpZGVySWQgPSB0aGlzLmJyYW5jaEVudHJ5VG9EZWNpc2lvbi5nZXQoY3VyKTtcbiAgICAgIGlmIChkZWNpZGVySWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb25zdCByZWNvcmQgPSB0aGlzLmRlY2lzaW9ucy5nZXQoZGVjaWRlcklkKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBkZWNpZGVySWQsXG4gICAgICAgICAgLi4uKHJlY29yZD8ucnVsZUxhYmVsICE9PSB1bmRlZmluZWQgJiYgeyBsYWJlbDogcmVjb3JkLnJ1bGVMYWJlbCB9KSxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIGN1ciA9IHRoaXMucGFyZW50T2YuZ2V0KGN1cik7XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICAvKiogVGhlIGxvb2t1cCBhcyBhIGJhcmUgZnVuY3Rpb24g4oCUIHBsdWcgaW50byBgY2F1c2FsQ2hhaW4oLi4uLCB7IGNvbnRyb2xEZXBzIH0pYC4gKi9cbiAgYXNMb29rdXAoKTogQ29udHJvbERlcExvb2t1cCB7XG4gICAgcmV0dXJuIChydW50aW1lU3RhZ2VJZCkgPT4gdGhpcy5sb29rdXAocnVudGltZVN0YWdlSWQpO1xuICB9XG5cbiAgLyoqIFRoZSBhdHRlbXB0LXN0b3AgZGVjaXNpb24gb2YgYSBzdGFnZSBleGVjdXRpb24gd2hvc2UgcmV0cnkgc2VyaWVzIHN0b3BwZWQsIGlmIGl0IGRpZC4gKi9cbiAgZ2V0QXR0ZW1wdFN0b3AocnVudGltZVN0YWdlSWQ6IHN0cmluZyk6IENvbnRyb2xEZWNpc2lvblJlY29yZCB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgcmVjb3JkID0gdGhpcy5kZWNpc2lvbnMuZ2V0KHJ1bnRpbWVTdGFnZUlkKTtcbiAgICByZXR1cm4gcmVjb3JkPy5raW5kID09PSAnYXR0ZW1wdC1zdG9wJyA/IHJlY29yZCA6IHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8qKiBBbGwgZGVjaXNpb25zIHJlY29yZGVkIGZvciB0aGUgY3VycmVudCBydW4sIGluIGV2ZW50IG9yZGVyIOKAlCBkZWNpZGVycywgc2VsZWN0b3JzIGFuZCBhdHRlbXB0IHN0b3BzLiAqL1xuICBnZXREZWNpc2lvbnMoKTogQ29udHJvbERlY2lzaW9uUmVjb3JkW10ge1xuICAgIHJldHVybiBbLi4udGhpcy5kZWNpc2lvbnMudmFsdWVzKCldO1xuICB9XG5cbiAgLyoqXG4gICAqIEN1cnJlbnQtcnVuIGNvbnRyb2wgZXZpZGVuY2UgZm9yIHRoZSBuYXRpdmUgc25hcHNob3QuIFByb2plY3Qgb25seSB0aGVcbiAgICogc3RhZ2UgaWRlbnRpdGllcyBjb2xsZWN0ZWQgZHVyaW5nIHRyYXZlcnNhbDsgbmV2ZXIgd2FsayB0aGUgZXhlY3V0aW9uIHRyZWUuXG4gICAqIFBhcmVudGxlc3Mgcm9vdHMgY2Fubm90IGhhdmUgYSBnb3Zlcm5pbmcgY29udHJvbCBlZGdlLlxuICAgKi9cbiAgdG9TbmFwc2hvdCgpIHtcbiAgICBjb25zdCBkZXBlbmRlbmNpZXM6IFtzdHJpbmcsIENvbnRyb2xEZXBlbmRlbmN5XVtdID0gW107XG4gICAgZm9yIChjb25zdCBydW50aW1lU3RhZ2VJZCBvZiB0aGlzLnBhcmVudE9mLmtleXMoKSkge1xuICAgICAgY29uc3QgZGVwZW5kZW5jeSA9IHRoaXMubG9va3VwKHJ1bnRpbWVTdGFnZUlkKTtcbiAgICAgIGlmIChkZXBlbmRlbmN5KSBkZXBlbmRlbmNpZXMucHVzaChbcnVudGltZVN0YWdlSWQsIGRlcGVuZGVuY3ldKTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIG5hbWU6ICdjb250cm9sLWRlcGVuZGVuY2llcycsXG4gICAgICBkYXRhOiB7IGRlY2lzaW9uczogdGhpcy5nZXREZWNpc2lvbnMoKSwgY29udHJvbERlcHM6IE9iamVjdC5mcm9tRW50cmllcyhkZXBlbmRlbmNpZXMpIH0sXG4gICAgfTtcbiAgfVxuXG4gIC8qKiBSZXNldCBhbGwgc3RhdGUgKGFsc28gaGFwcGVucyBhdXRvbWF0aWNhbGx5IG9uIHJ1bklkIGNoYW5nZSkuICovXG4gIGNsZWFyKCk6IHZvaWQge1xuICAgIHRoaXMucGFyZW50T2YuY2xlYXIoKTtcbiAgICB0aGlzLmRlY2lzaW9ucy5jbGVhcigpO1xuICAgIHRoaXMuYnJhbmNoRW50cnlUb0RlY2lzaW9uLmNsZWFyKCk7XG4gICAgdGhpcy5wZW5kaW5nID0gW107XG4gICAgdGhpcy5jb25zdW1lZFNsb3RzLmNsZWFyKCk7XG4gIH1cblxuICAvLyDilIDilIAgSW50ZXJuYWxzIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4gIC8qKiBDb252ZW50aW9uIDQ6IGEgbmV3IHJ1bklkIG1lYW5zIGEgbmV3IHJ1biDigJQgcmVzZXQgdHJhbnNpZW50IHN0YXRlLiAqL1xuICBwcml2YXRlIHJlc2V0SWZOZXdSdW4ocnVuSWQ6IHN0cmluZyk6IHZvaWQge1xuICAgIGlmIChydW5JZCA9PT0gdGhpcy5sYXN0UnVuSWQpIHJldHVybjtcbiAgICB0aGlzLmNsZWFyKCk7XG4gICAgdGhpcy5sYXN0UnVuSWQgPSBydW5JZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBJZiBgcGFyZW50UnVudGltZVN0YWdlSWRgIGlzIGEgZGVjaWRlciB3aXRoIGFuIHVubWF0Y2hlZCBwZW5kaW5nIHNsb3QsXG4gICAqIGNvbnN1bWUgb25lLiBgcmVnaXN0ZXJgIGNvbnRyb2xzIHdoZXRoZXIgdGhlIHN0YWdlIGlzIHJlY29yZGVkIGFzIGFcbiAgICogYnJhbmNoIGVudHJ5IChzdGFnZSBleGVjdXRlZC9lcnJvcmVkKSDigJQgYm90aCBwYXRocyBjb25zdW1lIHRoZSBzbG90IHNvXG4gICAqIGNvdW50cyBzdGF5IGV4YWN0IGV2ZW4gd2hlbiBhIHN0YWdlIHByb2R1Y2VzIGJvdGggZXZlbnRzLlxuICAgKi9cbiAgcHJpdmF0ZSBjb25zdW1lUGVuZGluZ1Nsb3QocnVudGltZVN0YWdlSWQ6IHN0cmluZywgcGFyZW50UnVudGltZVN0YWdlSWQ6IHN0cmluZywgcmVnaXN0ZXI6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBpZiAocnVudGltZVN0YWdlSWQgPT09IHBhcmVudFJ1bnRpbWVTdGFnZUlkKSByZXR1cm47IC8vIHN5bnRoZXRpYyBzZWxmLWV2ZW50c1xuICAgIGlmICh0aGlzLmNvbnN1bWVkU2xvdHMuaGFzKHJ1bnRpbWVTdGFnZUlkKSkgcmV0dXJuO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnBlbmRpbmcubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IHAgPSB0aGlzLnBlbmRpbmdbaV07XG4gICAgICBpZiAocC5kZWNpZGVySWQgIT09IHBhcmVudFJ1bnRpbWVTdGFnZUlkKSBjb250aW51ZTtcblxuICAgICAgdGhpcy5jb25zdW1lZFNsb3RzLmFkZChydW50aW1lU3RhZ2VJZCk7XG4gICAgICBpZiAocmVnaXN0ZXIpIHRoaXMuYnJhbmNoRW50cnlUb0RlY2lzaW9uLnNldChydW50aW1lU3RhZ2VJZCwgcC5kZWNpZGVySWQpO1xuICAgICAgcC5yZW1haW5pbmctLTtcbiAgICAgIGlmIChwLnJlbWFpbmluZyA8PSAwKSB0aGlzLnBlbmRpbmcuc3BsaWNlKGksIDEpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIFRoZSBkZWNpZGUoKSBydWxlIGxhYmVsIHRoYXQgcHJvZHVjZWQgdGhlIGRlY2lzaW9uOiB0aGUgbWF0Y2hlZCBydWxlXG4gKiBtYXBwaW5nIHRvIHRoZSBjaG9zZW4gYnJhbmNoIChmaXJzdCBtYXRjaGVkIHJ1bGUgYXMgZmFsbGJhY2spLlxuICovXG5mdW5jdGlvbiBtYXRjaGVkUnVsZUxhYmVsKGV2aWRlbmNlOiBEZWNpc2lvbkV2aWRlbmNlIHwgdW5kZWZpbmVkKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgaWYgKCFldmlkZW5jZSkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgY29uc3QgcnVsZSA9XG4gICAgZXZpZGVuY2UucnVsZXMuZmluZCgocikgPT4gci5tYXRjaGVkICYmIHIuYnJhbmNoID09PSBldmlkZW5jZS5jaG9zZW4pID8/IGV2aWRlbmNlLnJ1bGVzLmZpbmQoKHIpID0+IHIubWF0Y2hlZCk7XG4gIHJldHVybiBydWxlPy5sYWJlbDtcbn1cbiJdfQ==
299
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29udHJvbERlcFJlY29yZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9yZWNvcmRlci9Db250cm9sRGVwUmVjb3JkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBaUVHO0FBYUgsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBc0NyRCxJQUFJLFFBQVEsR0FBRyxDQUFDLENBQUM7QUFFakI7O0dBRUc7QUFDSCxNQUFNLFVBQVUsa0JBQWtCLENBQUMsVUFBcUMsRUFBRTtJQUN4RSxPQUFPLElBQUksa0JBQWtCLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDekMsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxNQUFNLE9BQU8sa0JBQWtCO0lBQ3BCLEVBQUUsQ0FBUztJQUVwQiwwRUFBMEU7SUFDekQsUUFBUSxHQUFHLElBQUksR0FBRyxFQUFrQixDQUFDO0lBQ3RELDJEQUEyRDtJQUMxQyxTQUFTLEdBQUcsSUFBSSxHQUFHLEVBQWlDLENBQUM7SUFDdEUsc0VBQXNFO0lBQ3JELHFCQUFxQixHQUFHLElBQUksR0FBRyxFQUFrQixDQUFDO0lBQ25FLGlFQUFpRTtJQUN6RCxPQUFPLEdBQXNCLEVBQUUsQ0FBQztJQUN4Qyx1RUFBdUU7SUFDdEQsYUFBYSxHQUFHLElBQUksR0FBRyxFQUFVLENBQUM7SUFDbkQsZ0VBQWdFO0lBQ3hELFNBQVMsQ0FBVTtJQUNWLGVBQWUsQ0FBVTtJQUNsQyxZQUFZLENBQVU7SUFDdEIsYUFBYSxHQUFHLEtBQUssQ0FBQztJQUU5QixZQUFZLFVBQXFDLEVBQUU7UUFDakQsSUFBSSxDQUFDLGVBQWUsR0FBRyxPQUFPLENBQUMsZUFBZSxLQUFLLElBQUksQ0FBQztRQUN4RCxJQUFJLENBQUMsRUFBRSxHQUFHLE9BQU8sQ0FBQyxFQUFFLElB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QUUsQ0FBQztZQUNkLElBQUksQ0FBQyxDQUFDLFNBQVMsSUFBSSxDQUFDO2dCQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUNoRCxPQUFPO1FBQ1QsQ0FBQztJQUNILENBQUM7Q0FDRjtBQUVEOzs7R0FHRztBQUNILFNBQVMsZ0JBQWdCLENBQUMsUUFBc0M7SUFDOUQsSUFBSSxDQUFDLFFBQVE7UUFBRSxPQUFPLFNBQVMsQ0FBQztJQUNoQyxNQUFNLElBQUksR0FDUixRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sSUFBSSxDQUFDLENBQUMsTUFBTSxLQUFLLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ2pILE9BQU8sSUFBSSxFQUFFLEtBQUssQ0FBQztBQUNyQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb250cm9sRGVwUmVjb3JkZXIg4oCUIGNvbnRyb2wtZGVwZW5kZW5jZSB0cmFja2luZyBmcm9tIGZsb3cgZXZlbnRzIChSRkMtMDAzIEQ1KS5cbiAqXG4gKiBUaGUgZ2FwIHRoaXMgZmlsbHM6XG4gKiAgIFRoZSBiYWNrdHJhY2tlcidzIGBjb250cm9sRGVwc2Agb3B0aW9uIChEMykgbmVlZHMgYSBgQ29udHJvbERlcExvb2t1cGA6XG4gKiAgIFwid2hpY2ggZGVjaWRlciBleGVjdXRpb24gYWxsb3dlZCB0aGlzIHN0YWdlIHRvIHJ1bj9cIiBUaGUgZW5naW5lIGtub3dzXG4gKiAgIHRoaXMgZHVyaW5nIHRyYXZlcnNhbCBidXQgdGhlIGNvbW1pdCBsb2cgZG9lc24ndCByZWNvcmQgaXQg4oCUIGNvbnRyb2xcbiAqICAgZmxvdyBpcyBhIEZsb3dSZWNvcmRlciBjb25jZXJuLiBUaGlzIHJlY29yZGVyIGlzIHRoZSBzdGFuZGFyZCBwcm9kdWNlcjpcbiAqICAgb25lIHN1YnNjcmlwdGlvbiwgb25lIGxvb2t1cCwgcGx1ZyBpdCBzdHJhaWdodCBpbnRvIGBjYXVzYWxDaGFpbmAuXG4gKlxuICogSG93IGl0IHdvcmtzIOKAlCB0d28gY29ycmVsYXRpb24gc3RydWN0dXJlcyBidWlsdCBkdXJpbmcgdHJhdmVyc2FsOlxuICpcbiAqICAgMS4gYHBhcmVudE9mYCDigJQgdGhlIHJ1bnRpbWUgYW5jZXN0b3IgY2hhaW4sIGZyb20gZXZlcnkgc3RhZ2UgZXZlbnQnc1xuICogICAgICBgdHJhdmVyc2FsQ29udGV4dC5wYXJlbnRSdW50aW1lU3RhZ2VJZGAgKFJGQy0wMDMgRDEpLiBDcm9zc2VzXG4gKiAgICAgIHN1YmZsb3cgYm91bmRhcmllczsgbG9vcCByZS1lbnRyaWVzIHN0YXkgdW5hbWJpZ3VvdXMgYmVjYXVzZVxuICogICAgICBydW50aW1lIGlkcyBkaWZmZXIgcGVyIGl0ZXJhdGlvbi5cbiAqXG4gKiAgIDIuIGBicmFuY2hFbnRyeVRvRGVjaXNpb25gIOKAlCBvbiBgb25EZWNpc2lvbmAvYG9uU2VsZWN0ZWRgIHRoZSBkZWNpc2lvblxuICogICAgICBpcyByZWNvcmRlZCBhcyBQRU5ESU5HOyB0aGUgbmV4dCBzdGFnZShzKSBleGVjdXRlZCB3aG9zZVxuICogICAgICBgcGFyZW50UnVudGltZVN0YWdlSWRgIElTIHRoZSBkZWNpZGVyJ3MgcnVudGltZVN0YWdlSWQgYXJlIGl0c1xuICogICAgICBicmFuY2ggZW50cmllcyAoMSBmb3IgYSBkZWNpZGVyLCBOID0gc2VsZWN0ZWQubGVuZ3RoIGZvciBhXG4gKiAgICAgIHNlbGVjdG9yKS4gQ29ycmVsYXRpb24gaXMgYnkgcGFyZW50LWlkICsgY291bnQsIE5PVCBieSBzdGFnZSBuYW1lIOKAlFxuICogICAgICBzdWJmbG93LW1vdW50IGV2ZW50cyBjYXJyeSBwYXRoLXByZWZpeGVkIGlubmVyLXJvb3QgbmFtZXMgdGhhdFxuICogICAgICBkb24ndCBtYXRjaCBgRmxvd0RlY2lzaW9uRXZlbnQuY2hvc2VuYCwgYW5kIHNlbGVjdG9ycyBlbWl0IGFcbiAqICAgICAgc3ludGhldGljIGZvcmsgZXZlbnQgc2hhcmluZyB0aGUgc2VsZWN0b3IncyBvd24gcnVudGltZVN0YWdlSWRcbiAqICAgICAgKGV4Y2x1ZGVkIHZpYSB0aGUgc2VsZi1pZCBndWFyZCkuIEEgYnJhbmNoIHRoYXQgVEhST1dTIGJlZm9yZVxuICogICAgICBjb21wbGV0aW5nIGNvbnN1bWVzIGl0cyBzbG90IHZpYSBgb25FcnJvcmAsIHNvIHRoZSBwb3N0LWZhbi1vdXRcbiAqICAgICAgY29udmVyZ2VuY2Ugc3RhZ2UgaXMgbmV2ZXIgbWlzYXR0cmlidXRlZCBhcyBhIGJyYW5jaCBlbnRyeS5cbiAqXG4gKiAgIDMuIGF0dGVtcHQgc3RvcHMgKDEwLjEpIOKAlCBgb25BdHRlbXB0YDogYSBzdGFnZSB3aG9zZSByZXRyeSBzZXJpZXMgU1RPUFBFRFxuICogICAgICAoaXQgZ2F2ZSB1cCwgb3IgYSBsYXRlciBhdHRlbXB0IHBhdXNlZCBvciB3YXMgYWJvcnRlZDsgdGhlIHNoYXJlZFxuICogICAgICBwcmVkaWNhdGUgYHJlY29yZGVyL2F0dGVtcHRTZXJpZXMudHMgwrcgaXNSZXRyeUV2aWRlbmNlYCkgbWFkZSBhIGRlY2lzaW9uIG9mIGl0c1xuICogICAgICBvd24g4oCUIHRoZSByZXRyeS1vci1zdG9wIGRlY2lzaW9uLCBpbiB0aGUgc2hhcGUgYGRlY2lkZSgpYCBwcm9kdWNlcy4gSXRcbiAqICAgICAgaXMgcmVjb3JkZWQgYmVzaWRlIHRoZSBkZWNpZGVycyBhcyBga2luZDogJ2F0dGVtcHQtc3RvcCdgXG4gKiAgICAgIChgZ2V0RGVjaXNpb25zKClgLCBgZ2V0QXR0ZW1wdFN0b3AoaWQpYCksIGBjaG9zZW46ICdzdG9wJ2AsIHRoZSBzdG9wXG4gKiAgICAgIHJlYXNvbiBhcyBpdHMgYHJ1bGVMYWJlbGAuIEl0IGlzIE5PVCBhIGJyYW5jaCBlbnRyeTogYSBjb250cm9sIGVkZ2UgaW5cbiAqICAgICAgYGNhdXNhbENoYWluYCBsaW5rcyBhIHN0YWdlIHRvIEFOT1RIRVIgZXhlY3V0aW9uIHRoYXQgZ292ZXJuZWQgaXQsIGFuZFxuICogICAgICB0aGUgc3RvcCBnb3Zlcm5zIHRoZSBzdGFnZSBpdHNlbGYg4oCUIHNvIGBsb29rdXBgIGlzIHVuY2hhbmdlZCwgYW5kIGFcbiAqICAgICAgcmVhZGVyIHdhbGtpbmcgYSBmYWlsZWQgc3RhZ2UgcmVhZHMgdGhlIHN0b3Agb2ZmIGl0cyBkZWNpc2lvbiByZWNvcmQuXG4gKlxuICogICBgbG9va3VwKHJ1bnRpbWVTdGFnZUlkKWAgdGhlbiB3YWxrcyB0aGUgYW5jZXN0b3IgY2hhaW4gZnJvbSB0aGUgc3RhZ2VcbiAqICAgdXB3YXJkOyB0aGUgZmlyc3QgYW5jZXN0b3IgKG9yIHRoZSBzdGFnZSBpdHNlbGYpIHJlZ2lzdGVyZWQgYXMgYVxuICogICBicmFuY2ggZW50cnkgeWllbGRzIGl0cyBnb3Zlcm5pbmcgZGVjaWRlciDigJQgdGhlIE5FQVJFU1QgZGVjaXNpb24uXG4gKiAgIE5lc3RlZCBkZWNpc2lvbnMgY29tcG9zZSBuYXR1cmFsbHk6IHRoZSBiYWNrdHJhY2tlciBleHBhbmRzIHRoZVxuICogICBkZWNpZGVyIG5vZGUgYW5kIGFza3MgYWdhaW4uXG4gKlxuICogQ29udmVudGlvbiA0OiBzdGF0ZSByZXNldHMgd2hlbiBgdHJhdmVyc2FsQ29udGV4dC5ydW5JZGAgY2hhbmdlcyDigJQgZWFjaFxuICogcnVuIChhbmQgZWFjaCByZXN1bWUsIHdoaWNoIG1pbnRzIGEgZnJlc2ggcnVuSWQpIHN0YXJ0cyBjbGVhbi4gQ29udHJvbFxuICogY2hhaW5zIHRoZXJlZm9yZSBkbyBOT1Qgc3Vydml2ZSBhIHBhdXNlL3Jlc3VtZSBib3VuZGFyeTogcG9zdC1yZXN1bWVcbiAqIHN0YWdlcyBjYW5ub3QgcmVzb2x2ZSBwcmUtcGF1c2UgZGVjaXNpb25zLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBpbXBvcnQgeyBjb250cm9sRGVwUmVjb3JkZXIgfSBmcm9tICdmb290cHJpbnRqcy90cmFjZSc7XG5pbXBvcnQgeyBjYXVzYWxDaGFpbiB9IGZyb20gJ2Zvb3R0cmFjZSc7XG4gKlxuICogY29uc3QgY3RybCA9IGNvbnRyb2xEZXBSZWNvcmRlcigpO1xuICogZXhlY3V0b3IuYXR0YWNoQ29tYmluZWRSZWNvcmRlcihjdHJsKTsgLy8gYXV0by1yb3V0ZXMgdG8gRmxvd1JlY29yZGVyIGNoYW5uZWxcbiAqXG4gKiBhd2FpdCBleGVjdXRvci5ydW4oeyBpbnB1dCB9KTtcbiAqXG4gKiBjb25zdCBkYWcgPSBjYXVzYWxDaGFpbihjb21taXRMb2csICdhcHByb3ZlIzInLCBrZXlzUmVhZCwge1xuICogICBjb250cm9sRGVwczogY3RybC5hc0xvb2t1cCgpLFxuICogfSk7XG4gKiBgYGBcbiAqL1xuXG5pbXBvcnQgdHlwZSB7IENvbnRyb2xEZXBlbmRlbmN5LCBDb250cm9sRGVwTG9va3VwIH0gZnJvbSAnZm9vdHRyYWNlJztcblxuaW1wb3J0IHR5cGUgeyBEZWNpc2lvbkV2aWRlbmNlLCBTZWxlY3Rpb25FdmlkZW5jZSB9IGZyb20gJy4uL2RlY2lkZS90eXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7XG4gIEZsb3dBdHRlbXB0RXZlbnQsXG4gIEZsb3dEZWNpc2lvbkV2ZW50LFxuICBGbG93RXJyb3JFdmVudCxcbiAgRmxvd1JlY29yZGVyLFxuICBGbG93U2VsZWN0ZWRFdmVudCxcbiAgRmxvd1N0YWdlRXZlbnQsXG59IGZyb20gJy4uL2VuZ2luZS9uYXJyYXRpdmUvdHlwZXMuanMnO1xuaW1wb3J0IHsgaXNSZXRyeUV2aWRlbmNlIH0gZnJvbSAnLi9hdHRlbXB0U2VyaWVzLmpzJztcblxuLyoqIE9uZSByZWNvcmRlZCBkZWNpc2lvbi9zZWxlY3Rpb24gZXZlbnQgKFJGQy0wMDMgRDUpLiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb250cm9sRGVjaXNpb25SZWNvcmQge1xuICAvKipcbiAgICogYCdhdHRlbXB0LXN0b3AnYCBmb3IgYSBzdGFnZSdzIG93biByZXRyeS1vci1zdG9wIGRlY2lzaW9uIHRoYXQgU1RPUFBFRCBpdHMgc2VyaWVzICgxMC4xKSDigJQgdGhlblxuICAgKiBgZGVjaWRlclJ1bnRpbWVTdGFnZUlkYCBpcyB0aGUgc3RhZ2UncyBleGVjdXRpb24sIGBjaG9zZW5gIGlzIGAnc3RvcCdgLCBgZXZpZGVuY2VgIHRoZSBhdHRlbXB0J3MgZGVjaXNpb24gYW5kXG4gICAqIGBydWxlTGFiZWxgIHRoZSBzdG9wIHJlYXNvbi4gQWJzZW50IGZvciBhIGRlY2lkZXIgLyBzZWxlY3Rvci5cbiAgICovXG4gIGtpbmQ/OiAnYXR0ZW1wdC1zdG9wJztcbiAgLyoqIHJ1bnRpbWVTdGFnZUlkIG9mIHRoZSBkZWNpZGVyL3NlbGVjdG9yIGV4ZWN1dGlvbiBzdGVwLiAqL1xuICBkZWNpZGVyUnVudGltZVN0YWdlSWQ6IHN0cmluZztcbiAgLyoqIENob3NlbiBicmFuY2ggZGlzcGxheSBuYW1lIChkZWNpZGVyKSBvciBzZWxlY3RlZCBuYW1lcyAoc2VsZWN0b3IpLiAqL1xuICBjaG9zZW46IHN0cmluZyB8IHJlYWRvbmx5IHN0cmluZ1tdO1xuICAvKiogU3RydWN0dXJlZCBldmlkZW5jZSBmcm9tIGRlY2lkZSgpL3NlbGVjdCgpLCB3aGVuIHRoZSBzdGFnZSB1c2VkIHRoZW0uICovXG4gIGV2aWRlbmNlPzogRGVjaXNpb25FdmlkZW5jZSB8IFNlbGVjdGlvbkV2aWRlbmNlO1xuICAvKipcbiAgICogVGhlIGRlY2lkZSgpIHJ1bGUgbGFiZWwgdGhhdCBwcm9kdWNlZCB0aGUgZGVjaXNpb24gKGUuZy4gJ0dvb2QgY3JlZGl0JykuXG4gICAqIERlY2lkZXJzIG9ubHkg4oCUIGEgc2VsZWN0b3IgcGlja3MgTiBicmFuY2hlcyBhbmQgbm8gc2luZ2xlIGxhYmVsXG4gICAqIGF0dHJpYnV0ZXMgdG8gYWxsIG9mIHRoZW0gKGluc3BlY3QgYGV2aWRlbmNlYCBpbnN0ZWFkKS5cbiAgICovXG4gIHJ1bGVMYWJlbD86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDb250cm9sRGVwUmVjb3JkZXJPcHRpb25zIHtcbiAgLyoqIE9wdCBpbiB0byBhIHNhbWUtcnVuIGNvbGxlY3Rpb24gYWNrbm93bGVkZ2VtZW50IGluIHRoZSBzbmFwc2hvdCBidW5kbGUuICovXG4gIGNhcHR1cmVDb3ZlcmFnZT86IGJvb2xlYW47XG4gIC8qKiBSZWNvcmRlciBpZC4gRGVmYXVsdHMgdG8gYGNvbnRyb2wtZGVwcy1OYCAoYXV0by1pbmNyZW1lbnRlZCkuICovXG4gIGlkPzogc3RyaW5nO1xufVxuXG4vKiogQSBkZWNpc2lvbiBhd2FpdGluZyBicmFuY2gtZW50cnkgY29ycmVsYXRpb24uICovXG5pbnRlcmZhY2UgUGVuZGluZ0RlY2lzaW9uIHtcbiAgZGVjaWRlcklkOiBzdHJpbmc7XG4gIC8qKiBIb3cgbWFueSBicmFuY2ggZW50cmllcyBhcmUgc3RpbGwgZXhwZWN0ZWQgKGRlY2lkZXI6IDEsIHNlbGVjdG9yOiBOKS4gKi9cbiAgcmVtYWluaW5nOiBudW1iZXI7XG59XG5cbmxldCBfY291bnRlciA9IDA7XG5cbi8qKlxuICogRmFjdG9yeSDigJQgbWF0Y2hlcyB0aGUgYHRvcG9sb2d5UmVjb3JkZXIoKWAgLyBgaW5PdXRSZWNvcmRlcigpYCBzdHlsZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbnRyb2xEZXBSZWNvcmRlcihvcHRpb25zOiBDb250cm9sRGVwUmVjb3JkZXJPcHRpb25zID0ge30pOiBDb250cm9sRGVwUmVjb3JkZXIge1xuICByZXR1cm4gbmV3IENvbnRyb2xEZXBSZWNvcmRlcihvcHRpb25zKTtcbn1cblxuLyoqXG4gKiBTdGF0ZWZ1bCBhY2N1bXVsYXRvciB0aGF0IHdhdGNoZXMgRmxvd1JlY29yZGVyIGV2ZW50cyBhbmQgYW5zd2Vyc1xuICogXCJ3aGljaCBkZWNpc2lvbiBhbGxvd2VkIHRoaXMgc3RhZ2UgdG8gcnVuP1wiIEF0dGFjaCB2aWFcbiAqIGBleGVjdXRvci5hdHRhY2hDb21iaW5lZFJlY29yZGVyKHJlY29yZGVyKWAgKG9yIGBhdHRhY2hGbG93UmVjb3JkZXJgKS5cbiAqL1xuZXhwb3J0IGNsYXNzIENvbnRyb2xEZXBSZWNvcmRlciBpbXBsZW1lbnRzIEZsb3dSZWNvcmRlciB7XG4gIHJlYWRvbmx5IGlkOiBzdHJpbmc7XG5cbiAgLyoqIFJ1bnRpbWUgYW5jZXN0b3IgY2hhaW46IHJ1bnRpbWVTdGFnZUlkIOKGkiBwYXJlbnRSdW50aW1lU3RhZ2VJZCAoRDEpLiAqL1xuICBwcml2YXRlIHJlYWRvbmx5IHBhcmVudE9mID0gbmV3IE1hcDxzdHJpbmcsIHN0cmluZz4oKTtcbiAgLyoqIFJlY29yZGVkIGRlY2lzaW9ucywga2V5ZWQgYnkgZGVjaWRlciBydW50aW1lU3RhZ2VJZC4gKi9cbiAgcHJpdmF0ZSByZWFkb25seSBkZWNpc2lvbnMgPSBuZXcgTWFwPHN0cmluZywgQ29udHJvbERlY2lzaW9uUmVjb3JkPigpO1xuICAvKiogQnJhbmNoLWVudHJ5IHJ1bnRpbWVTdGFnZUlkIOKGkiBnb3Zlcm5pbmcgZGVjaWRlciBydW50aW1lU3RhZ2VJZC4gKi9cbiAgcHJpdmF0ZSByZWFkb25seSBicmFuY2hFbnRyeVRvRGVjaXNpb24gPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nPigpO1xuICAvKiogRGVjaXNpb25zIHdob3NlIGJyYW5jaCBlbnRyaWVzIGhhdmUgbm90IGFsbCBiZWVuIHNlZW4geWV0LiAqL1xuICBwcml2YXRlIHBlbmRpbmc6IFBlbmRpbmdEZWNpc2lvbltdID0gW107XG4gIC8qKiBTdGFnZSBpZHMgdGhhdCBhbHJlYWR5IGNvbnN1bWVkIGEgcGVuZGluZyBzbG90IChlbnRyeSBPUiBlcnJvcikuICovXG4gIHByaXZhdGUgcmVhZG9ubHkgY29uc3VtZWRTbG90cyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICAvKiogQ29udmVudGlvbiA0IOKAlCBydW5JZCBvZiB0aGUgcnVuIGN1cnJlbnRseSBiZWluZyByZWNvcmRlZC4gKi9cbiAgcHJpdmF0ZSBsYXN0UnVuSWQ/OiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgY2FwdHVyZUNvdmVyYWdlOiBib29sZWFuO1xuICBwcml2YXRlIGNhcHR1cmVSdW5JZD86IHN0cmluZztcbiAgcHJpdmF0ZSBjYXB0dXJlSW50YWN0ID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3Iob3B0aW9uczogQ29udHJvbERlcFJlY29yZGVyT3B0aW9ucyA9IHt9KSB7XG4gICAgdGhpcy5jYXB0dXJlQ292ZXJhZ2UgPSBvcHRpb25zLmNhcHR1cmVDb3ZlcmFnZSA9PT0gdHJ1ZTtcbiAgICB0aGlzLmlkID0gb3B0aW9ucy5pZCA/PyBgY29udHJvbC1kZXBzLSR7KytfY291bnRlcn1gO1xuICB9XG5cbiAgb25SdW5TdGFydChldmVudDogaW1wb3J0KCcuLi9lbmdpbmUvbmFycmF0aXZlL3R5cGVzLmpzJykuRmxvd1J1bkV2ZW50KTogdm9pZCB7XG4gICAgaWYgKHRoaXMuY2FwdHVyZUNvdmVyYWdlKSB7XG4gICAgICBjb25zdCBydW5JZCA9IGV2ZW50LnRyYXZlcnNhbENvbnRleHQ/LnJ1bklkO1xuICAgICAgaWYgKHJ1bklkKSB0aGlzLnJlc2V0SWZOZXdSdW4ocnVuSWQpO1xuICAgICAgdGhpcy5jYXB0dXJlUnVuSWQgPSBydW5JZDtcbiAgICAgIHRoaXMuY2FwdHVyZUludGFjdCA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgLy8g4pSA4pSAIEZsb3dSZWNvcmRlciBob29rcyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuICBvbkRlY2lzaW9uKGV2ZW50OiBGbG93RGVjaXNpb25FdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IGN0eCA9IGV2ZW50LnRyYXZlcnNhbENvbnRleHQ7XG4gICAgaWYgKCFjdHgpIHJldHVybjtcbiAgICB0aGlzLnJlc2V0SWZOZXdSdW4oY3R4LnJ1bklkKTtcblxuICAgIGNvbnN0IGRlY2lkZXJJZCA9IGN0eC5ydW50aW1lU3RhZ2VJZDtcbiAgICBjb25zdCBydWxlTGFiZWwgPSBtYXRjaGVkUnVsZUxhYmVsKGV2ZW50LmV2aWRlbmNlKTtcbiAgICB0aGlzLmRlY2lzaW9ucy5zZXQoZGVjaWRlcklkLCB7XG4gICAgICBkZWNpZGVyUnVudGltZVN0YWdlSWQ6IGRlY2lkZXJJZCxcbiAgICAgIGNob3NlbjogZXZlbnQuY2hvc2VuLFxuICAgICAgLi4uKGV2ZW50LmV2aWRlbmNlICYmIHsgZXZpZGVuY2U6IGV2ZW50LmV2aWRlbmNlIH0pLFxuICAgICAgLi4uKHJ1bGVMYWJlbCAhPT0gdW5kZWZpbmVkICYmIHsgcnVsZUxhYmVsIH0pLFxuICAgIH0pO1xuICAgIHRoaXMucGVuZGluZy5wdXNoKHsgZGVjaWRlcklkLCByZW1haW5pbmc6IDEgfSk7XG4gIH1cblxuICBvbkF0dGVtcHQoZXZlbnQ6IEZsb3dBdHRlbXB0RXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCBjdHggPSBldmVudC50cmF2ZXJzYWxDb250ZXh0O1xuICAgIGNvbnN0IHsgcmVjb3JkIH0gPSBldmVudDtcbiAgICBpZiAoIWN0eCB8fCByZWNvcmQubmV4dCAhPT0gJ3N0b3AnIHx8ICFpc1JldHJ5RXZpZGVuY2UocmVjb3JkKSkgcmV0dXJuO1xuICAgIHRoaXMucmVzZXRJZk5ld1J1bihjdHgucnVuSWQpO1xuICAgIHRoaXMuZGVjaXNpb25zLnNldChyZWNvcmQuc2VyaWVzLCB7XG4gICAgICBraW5kOiAnYXR0ZW1wdC1zdG9wJyxcbiAgICAgIGRlY2lkZXJSdW50aW1lU3RhZ2VJZDogcmVjb3JkLnNlcmllcyxcbiAgICAgIGNob3NlbjogJ3N0b3AnLFxuICAgICAgZXZpZGVuY2U6IHJlY29yZC5kZWNpc2lvbixcbiAgICAgIHJ1bGVMYWJlbDogcmVjb3JkLnJlYXNvbixcbiAgICB9KTtcbiAgfVxuXG4gIG9uU2VsZWN0ZWQoZXZlbnQ6IEZsb3dTZWxlY3RlZEV2ZW50KTogdm9pZCB7XG4gICAgY29uc3QgY3R4ID0gZXZlbnQudHJhdmVyc2FsQ29udGV4dDtcbiAgICBpZiAoIWN0eCkgcmV0dXJuO1xuICAgIHRoaXMucmVzZXRJZk5ld1J1bihjdHgucnVuSWQpO1xuICAgIGlmIChldmVudC5zZWxlY3RlZC5sZW5ndGggPT09IDApIHJldHVybjsgLy8gbm90aGluZyBzZWxlY3RlZCDihpIgbm90aGluZyBnb3Zlcm5lZFxuXG4gICAgY29uc3QgZGVjaWRlcklkID0gY3R4LnJ1bnRpbWVTdGFnZUlkO1xuICAgIHRoaXMuZGVjaXNpb25zLnNldChkZWNpZGVySWQsIHtcbiAgICAgIGRlY2lkZXJSdW50aW1lU3RhZ2VJZDogZGVjaWRlcklkLFxuICAgICAgY2hvc2VuOiBbLi4uZXZlbnQuc2VsZWN0ZWRdLFxuICAgICAgLi4uKGV2ZW50LmV2aWRlbmNlICYmIHsgZXZpZGVuY2U6IGV2ZW50LmV2aWRlbmNlIH0pLFxuICAgIH0pO1xuICAgIHRoaXMucGVuZGluZy5wdXNoKHsgZGVjaWRlcklkLCByZW1haW5pbmc6IGV2ZW50LnNlbGVjdGVkLmxlbmd0aCB9KTtcbiAgfVxuXG4gIG9uU3RhZ2VFeGVjdXRlZChldmVudDogRmxvd1N0YWdlRXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCBjdHggPSBldmVudC50cmF2ZXJzYWxDb250ZXh0O1xuICAgIGlmICghY3R4KSByZXR1cm47XG4gICAgdGhpcy5yZXNldElmTmV3UnVuKGN0eC5ydW5JZCk7XG5cbiAgICBjb25zdCB7IHJ1bnRpbWVTdGFnZUlkLCBwYXJlbnRSdW50aW1lU3RhZ2VJZCB9ID0gY3R4O1xuICAgIGlmIChwYXJlbnRSdW50aW1lU3RhZ2VJZCkge1xuICAgICAgdGhpcy5wYXJlbnRPZi5zZXQocnVudGltZVN0YWdlSWQsIHBhcmVudFJ1bnRpbWVTdGFnZUlkKTtcbiAgICAgIHRoaXMuY29uc3VtZVBlbmRpbmdTbG90KHJ1bnRpbWVTdGFnZUlkLCBwYXJlbnRSdW50aW1lU3RhZ2VJZCwgLyogcmVnaXN0ZXIgKi8gdHJ1ZSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEEgYnJhbmNoIHRoYXQgdGhyb3dzIG5ldmVyIGZpcmVzIGBvblN0YWdlRXhlY3V0ZWRgIOKAlCB3aXRob3V0IHRoaXMgaG9va1xuICAgKiBpdHMgcGVuZGluZyBzbG90IHdvdWxkIGxlYWsgYW5kIHRoZSBwb3N0LWZhbi1vdXQgY29udmVyZ2VuY2Ugc3RhZ2VcbiAgICogKHdob3NlIGNvbnRleHQgYWxzbyBjaGFpbnMgdG8gdGhlIHNlbGVjdG9yKSB3b3VsZCBiZSBtaXNhdHRyaWJ1dGVkIGFzXG4gICAqIGEgYnJhbmNoIGVudHJ5IHVuZGVyIGJlc3QtZWZmb3J0IChgZmFpbEZhc3Q6IGZhbHNlYCkgZmFuLW91dHMuXG4gICAqL1xuICBvbkVycm9yKGV2ZW50OiBGbG93RXJyb3JFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IGN0eCA9IGV2ZW50LnRyYXZlcnNhbENvbnRleHQ7XG4gICAgaWYgKCFjdHgpIHJldHVybjtcbiAgICB0aGlzLnJlc2V0SWZOZXdSdW4oY3R4LnJ1bklkKTtcbiAgICBpZiAoY3R4LnBhcmVudFJ1bnRpbWVTdGFnZUlkKSB7XG4gICAgICAvLyBSZWNvcmQgdGhlIGNoYWluIEFORCBhdHRyaWJ1dGUgdGhlIGZhaWxlZCBzdGFnZSB0byBpdHMgZGVjaXNpb24g4oCUXG4gICAgICAvLyB0aGUgc3RhZ2UgUkFOIChhbmQgbWF5IGhhdmUgY29tbWl0dGVkIHBhcnRpYWwgd3JpdGVzKSBiZWNhdXNlIHRoZVxuICAgICAgLy8gZGVjaXNpb24gY2hvc2UgaXQ7IGZhaWxpbmcgYWZ0ZXJ3YXJkcyBkb2Vzbid0IHVuZG8gdGhlIGRlcGVuZGVuY3kuXG4gICAgICB0aGlzLnBhcmVudE9mLnNldChjdHgucnVudGltZVN0YWdlSWQsIGN0eC5wYXJlbnRSdW50aW1lU3RhZ2VJZCk7XG4gICAgICB0aGlzLmNvbnN1bWVQZW5kaW5nU2xvdChjdHgucnVudGltZVN0YWdlSWQsIGN0eC5wYXJlbnRSdW50aW1lU3RhZ2VJZCwgLyogcmVnaXN0ZXIgKi8gdHJ1ZSk7XG4gICAgfVxuICB9XG5cbiAgLy8g4pSA4pSAIFF1ZXJpZXMg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbiAgLyoqXG4gICAqIFJlc29sdmUgdGhlIE5FQVJFU1QgZ292ZXJuaW5nIGRlY2lzaW9uIGZvciBhbiBleGVjdXRpb24gc3RlcDogd2Fsa3MgdGhlXG4gICAqIHJ1bnRpbWUgYW5jZXN0b3IgY2hhaW4gKHRoZSBzdGVwIGl0c2VsZiBmaXJzdCkgdW50aWwgaXQgaGl0cyBhXG4gICAqIHJlZ2lzdGVyZWQgYnJhbmNoIGVudHJ5LiBgdW5kZWZpbmVkYCB3aGVuIHRoZSBzdGVwIGlzIG5vdCBkb3duc3RyZWFtIG9mXG4gICAqIGFueSByZWNvcmRlZCBkZWNpc2lvbi5cbiAgICovXG4gIGxvb2t1cChydW50aW1lU3RhZ2VJZDogc3RyaW5nKTogQ29udHJvbERlcGVuZGVuY3kgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IHNlZW4gPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgICBsZXQgY3VyOiBzdHJpbmcgfCB1bmRlZmluZWQgPSBydW50aW1lU3RhZ2VJZDtcbiAgICB3aGlsZSAoY3VyICE9PSB1bmRlZmluZWQgJiYgIXNlZW4uaGFzKGN1cikpIHtcbiAgICAgIHNlZW4uYWRkKGN1cik7XG4gICAgICBjb25zdCBkZWNpZGVySWQgPSB0aGlzLmJyYW5jaEVudHJ5VG9EZWNpc2lvbi5nZXQoY3VyKTtcbiAgICAgIGlmIChkZWNpZGVySWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb25zdCByZWNvcmQgPSB0aGlzLmRlY2lzaW9ucy5nZXQoZGVjaWRlcklkKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBkZWNpZGVySWQsXG4gICAgICAgICAgLi4uKHJlY29yZD8ucnVsZUxhYmVsICE9PSB1bmRlZmluZWQgJiYgeyBsYWJlbDogcmVjb3JkLnJ1bGVMYWJlbCB9KSxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIGN1ciA9IHRoaXMucGFyZW50T2YuZ2V0KGN1cik7XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICAvKiogVGhlIGxvb2t1cCBhcyBhIGJhcmUgZnVuY3Rpb24g4oCUIHBsdWcgaW50byBgY2F1c2FsQ2hhaW4oLi4uLCB7IGNvbnRyb2xEZXBzIH0pYC4gKi9cbiAgYXNMb29rdXAoKTogQ29udHJvbERlcExvb2t1cCB7XG4gICAgcmV0dXJuIChydW50aW1lU3RhZ2VJZCkgPT4gdGhpcy5sb29rdXAocnVudGltZVN0YWdlSWQpO1xuICB9XG5cbiAgLyoqIFRoZSBhdHRlbXB0LXN0b3AgZGVjaXNpb24gb2YgYSBzdGFnZSBleGVjdXRpb24gd2hvc2UgcmV0cnkgc2VyaWVzIHN0b3BwZWQsIGlmIGl0IGRpZC4gKi9cbiAgZ2V0QXR0ZW1wdFN0b3AocnVudGltZVN0YWdlSWQ6IHN0cmluZyk6IENvbnRyb2xEZWNpc2lvblJlY29yZCB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgcmVjb3JkID0gdGhpcy5kZWNpc2lvbnMuZ2V0KHJ1bnRpbWVTdGFnZUlkKTtcbiAgICByZXR1cm4gcmVjb3JkPy5raW5kID09PSAnYXR0ZW1wdC1zdG9wJyA/IHJlY29yZCA6IHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8qKiBBbGwgZGVjaXNpb25zIHJlY29yZGVkIGZvciB0aGUgY3VycmVudCBydW4sIGluIGV2ZW50IG9yZGVyIOKAlCBkZWNpZGVycywgc2VsZWN0b3JzIGFuZCBhdHRlbXB0IHN0b3BzLiAqL1xuICBnZXREZWNpc2lvbnMoKTogQ29udHJvbERlY2lzaW9uUmVjb3JkW10ge1xuICAgIHJldHVybiBbLi4udGhpcy5kZWNpc2lvbnMudmFsdWVzKCldO1xuICB9XG5cbiAgLyoqXG4gICAqIEN1cnJlbnQtcnVuIGNvbnRyb2wgZXZpZGVuY2UgZm9yIHRoZSBuYXRpdmUgc25hcHNob3QuIFByb2plY3Qgb25seSB0aGVcbiAgICogc3RhZ2UgaWRlbnRpdGllcyBjb2xsZWN0ZWQgZHVyaW5nIHRyYXZlcnNhbDsgbmV2ZXIgd2FsayB0aGUgZXhlY3V0aW9uIHRyZWUuXG4gICAqIFBhcmVudGxlc3Mgcm9vdHMgY2Fubm90IGhhdmUgYSBnb3Zlcm5pbmcgY29udHJvbCBlZGdlLlxuICAgKi9cbiAgdG9TbmFwc2hvdCgpIHtcbiAgICBjb25zdCBkZXBlbmRlbmNpZXM6IFtzdHJpbmcsIENvbnRyb2xEZXBlbmRlbmN5XVtdID0gW107XG4gICAgZm9yIChjb25zdCBydW50aW1lU3RhZ2VJZCBvZiB0aGlzLnBhcmVudE9mLmtleXMoKSkge1xuICAgICAgY29uc3QgZGVwZW5kZW5jeSA9IHRoaXMubG9va3VwKHJ1bnRpbWVTdGFnZUlkKTtcbiAgICAgIGlmIChkZXBlbmRlbmN5KSBkZXBlbmRlbmNpZXMucHVzaChbcnVudGltZVN0YWdlSWQsIGRlcGVuZGVuY3ldKTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIG5hbWU6ICdjb250cm9sLWRlcGVuZGVuY2llcycsXG4gICAgICAuLi4odGhpcy5jYXB0dXJlQ292ZXJhZ2UgJiZcbiAgICAgICAgdGhpcy5jYXB0dXJlUnVuSWQgJiYge1xuICAgICAgICAgIGNhcHR1cmU6IHtcbiAgICAgICAgICAgIHZlcnNpb246IDEgYXMgY29uc3QsXG4gICAgICAgICAgICBydW5JZDogdGhpcy5jYXB0dXJlUnVuSWQsXG4gICAgICAgICAgICBjb250cm9sOiB0aGlzLmNhcHR1cmVJbnRhY3QgPyAoJ2NhcHR1cmVkJyBhcyBjb25zdCkgOiAoJ3BhcnRpYWwnIGFzIGNvbnN0KSxcbiAgICAgICAgICB9LFxuICAgICAgICB9KSxcbiAgICAgIGRhdGE6IHsgZGVjaXNpb25zOiB0aGlzLmdldERlY2lzaW9ucygpLCBjb250cm9sRGVwczogT2JqZWN0LmZyb21FbnRyaWVzKGRlcGVuZGVuY2llcykgfSxcbiAgICB9O1xuICB9XG5cbiAgLyoqIFJlc2V0IGFsbCBzdGF0ZSAoYWxzbyBoYXBwZW5zIGF1dG9tYXRpY2FsbHkgb24gcnVuSWQgY2hhbmdlKS4gKi9cbiAgY2xlYXIoKTogdm9pZCB7XG4gICAgdGhpcy5jYXB0dXJlSW50YWN0ID0gZmFsc2U7XG4gICAgdGhpcy5wYXJlbnRPZi5jbGVhcigpO1xuICAgIHRoaXMuZGVjaXNpb25zLmNsZWFyKCk7XG4gICAgdGhpcy5icmFuY2hFbnRyeVRvRGVjaXNpb24uY2xlYXIoKTtcbiAgICB0aGlzLnBlbmRpbmcgPSBbXTtcbiAgICB0aGlzLmNvbnN1bWVkU2xvdHMuY2xlYXIoKTtcbiAgfVxuXG4gIC8vIOKUgOKUgCBJbnRlcm5hbHMg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbiAgLyoqIENvbnZlbnRpb24gNDogYSBuZXcgcnVuSWQgbWVhbnMgYSBuZXcgcnVuIOKAlCByZXNldCB0cmFuc2llbnQgc3RhdGUuICovXG4gIHByaXZhdGUgcmVzZXRJZk5ld1J1bihydW5JZDogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKHJ1bklkID09PSB0aGlzLmxhc3RSdW5JZCkgcmV0dXJuO1xuICAgIHRoaXMuY2xlYXIoKTtcbiAgICB0aGlzLmxhc3RSdW5JZCA9IHJ1bklkO1xuICB9XG5cbiAgLyoqXG4gICAqIElmIGBwYXJlbnRSdW50aW1lU3RhZ2VJZGAgaXMgYSBkZWNpZGVyIHdpdGggYW4gdW5tYXRjaGVkIHBlbmRpbmcgc2xvdCxcbiAgICogY29uc3VtZSBvbmUuIGByZWdpc3RlcmAgY29udHJvbHMgd2hldGhlciB0aGUgc3RhZ2UgaXMgcmVjb3JkZWQgYXMgYVxuICAgKiBicmFuY2ggZW50cnkgKHN0YWdlIGV4ZWN1dGVkL2Vycm9yZWQpIOKAlCBib3RoIHBhdGhzIGNvbnN1bWUgdGhlIHNsb3Qgc29cbiAgICogY291bnRzIHN0YXkgZXhhY3QgZXZlbiB3aGVuIGEgc3RhZ2UgcHJvZHVjZXMgYm90aCBldmVudHMuXG4gICAqL1xuICBwcml2YXRlIGNvbnN1bWVQZW5kaW5nU2xvdChydW50aW1lU3RhZ2VJZDogc3RyaW5nLCBwYXJlbnRSdW50aW1lU3RhZ2VJZDogc3RyaW5nLCByZWdpc3RlcjogYm9vbGVhbik6IHZvaWQge1xuICAgIGlmIChydW50aW1lU3RhZ2VJZCA9PT0gcGFyZW50UnVudGltZVN0YWdlSWQpIHJldHVybjsgLy8gc3ludGhldGljIHNlbGYtZXZlbnRzXG4gICAgaWYgKHRoaXMuY29uc3VtZWRTbG90cy5oYXMocnVudGltZVN0YWdlSWQpKSByZXR1cm47XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucGVuZGluZy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgcCA9IHRoaXMucGVuZGluZ1tpXTtcbiAgICAgIGlmIChwLmRlY2lkZXJJZCAhPT0gcGFyZW50UnVudGltZVN0YWdlSWQpIGNvbnRpbnVlO1xuXG4gICAgICB0aGlzLmNvbnN1bWVkU2xvdHMuYWRkKHJ1bnRpbWVTdGFnZUlkKTtcbiAgICAgIGlmIChyZWdpc3RlcikgdGhpcy5icmFuY2hFbnRyeVRvRGVjaXNpb24uc2V0KHJ1bnRpbWVTdGFnZUlkLCBwLmRlY2lkZXJJZCk7XG4gICAgICBwLnJlbWFpbmluZy0tO1xuICAgICAgaWYgKHAucmVtYWluaW5nIDw9IDApIHRoaXMucGVuZGluZy5zcGxpY2UoaSwgMSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogVGhlIGRlY2lkZSgpIHJ1bGUgbGFiZWwgdGhhdCBwcm9kdWNlZCB0aGUgZGVjaXNpb246IHRoZSBtYXRjaGVkIHJ1bGVcbiAqIG1hcHBpbmcgdG8gdGhlIGNob3NlbiBicmFuY2ggKGZpcnN0IG1hdGNoZWQgcnVsZSBhcyBmYWxsYmFjaykuXG4gKi9cbmZ1bmN0aW9uIG1hdGNoZWRSdWxlTGFiZWwoZXZpZGVuY2U6IERlY2lzaW9uRXZpZGVuY2UgfCB1bmRlZmluZWQpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBpZiAoIWV2aWRlbmNlKSByZXR1cm4gdW5kZWZpbmVkO1xuICBjb25zdCBydWxlID1cbiAgICBldmlkZW5jZS5ydWxlcy5maW5kKChyKSA9PiByLm1hdGNoZWQgJiYgci5icmFuY2ggPT09IGV2aWRlbmNlLmNob3NlbikgPz8gZXZpZGVuY2UucnVsZXMuZmluZCgocikgPT4gci5tYXRjaGVkKTtcbiAgcmV0dXJuIHJ1bGU/LmxhYmVsO1xufVxuIl19
@@ -16,4 +16,4 @@ import type { RecorderSnapshot } from '../runner/ExecutionRuntime.js';
16
16
  /** What `toSnapshot()` returns: a snapshot row without the `id` the attach site owns. */
17
17
  export type RecorderBundle = Omit<RecorderSnapshot, 'id'>;
18
18
  /** Rebuild `bundle` as the snapshot row for the recorder attached under `id`. */
19
- export declare function copyBundle(id: string, bundle: RecorderBundle): RecorderSnapshot;
19
+ export declare function copyBundle(id: string, bundle: RecorderBundle, includeCapture?: boolean): RecorderSnapshot;
@@ -12,8 +12,12 @@
12
12
  * one line here. The three `toSnapshot?()` signatures (`ScopeRecorder`, `FlowRecorder`,
13
13
  * `CombinedRecorder`, and `EmitRecorder`) all name `RecorderBundle`, so they follow.
14
14
  */
15
+ import { copyCaptureAcknowledgement } from '../capture/nativeCoverage.js';
15
16
  /** Rebuild `bundle` as the snapshot row for the recorder attached under `id`. */
16
- export function copyBundle(id, bundle) {
17
+ export function copyBundle(id, bundle, includeCapture = false) {
18
+ const capture = includeCapture
19
+ ? copyCaptureAcknowledgement(Object.getOwnPropertyDescriptor(bundle, 'capture')?.value)
20
+ : undefined;
17
21
  return {
18
22
  id,
19
23
  name: bundle.name,
@@ -21,6 +25,7 @@ export function copyBundle(id, bundle) {
21
25
  preferredOperation: bundle.preferredOperation,
22
26
  data: bundle.data,
23
27
  meta: bundle.meta,
28
+ ...(capture && { capture }),
24
29
  };
25
30
  }
26
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic25hcHNob3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL3JlY29yZGVyL3NuYXBzaG90LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7O0dBYUc7QUFPSCxpRkFBaUY7QUFDakYsTUFBTSxVQUFVLFVBQVUsQ0FBQyxFQUFVLEVBQUUsTUFBc0I7SUFDM0QsT0FBTztRQUNMLEVBQUU7UUFDRixJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUk7UUFDakIsV0FBVyxFQUFFLE1BQU0sQ0FBQyxXQUFXO1FBQy9CLGtCQUFrQixFQUFFLE1BQU0sQ0FBQyxrQkFBa0I7UUFDN0MsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJO1FBQ2pCLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSTtLQUNsQixDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogcmVjb3JkZXIvc25hcHNob3QudHMg4oCUIHRoZSBPTkUgY29waWVyIGZvciBhIHJlY29yZGVyJ3MgYHRvU25hcHNob3QoKWAgYnVuZGxlIChGNikuXG4gKlxuICogQSBidW5kbGUgaXMgbmV2ZXIgcGFzc2VkIHRocm91Z2ggYXMgcmV0dXJuZWQ6IGl0IGlzIHJlYnVpbHQgZmllbGQgYnkgZmllbGQsIHNvIGEgcmVjb3JkZXJcbiAqIGNhbm5vdCBzcG9vZiBpdHMgb3duIGBpZGAgKHRoZSBleGVjdXRvcidzLCBhbmQgY29uc3VtZXJzIGluZGV4IGJ5IGl0KSBhbmQgbm90aGluZyBpdCBhZGRzXG4gKiBiZXlvbmQgdGhlIGNvbnRyYWN0IGxlYWtzIGludG8gdGhlIHNuYXBzaG90LiBUaGUgY29zdCBpcyB0aGF0IGEgZmllbGQgdGhpcyBjb3BpZXIgZm9yZ2V0c1xuICogaXMgZHJvcHBlZCBpbiBzaWxlbmNlIOKAlCB3aGljaCBpcyB3aHkgdGhlcmUgaXMgZXhhY3RseSBvbmUgY29waWVyLCBhbmQgd2h5XG4gKiBgcnVubmVyL3NuYXBzaG90LnRzIMK3IGNvbGxlY3RSZWNvcmRlclNuYXBzaG90c2AgYW5kIGBDb21wb3NpdGVSZWNvcmRlciDCtyB0b1NuYXBzaG90YCBib3RoXG4gKiBjYWxsIGl0ICh0aGUgY29tcG9zaXRlIHVzZWQgdG8ga2VlcCBvbmx5IGBuYW1lYC9gZGF0YWAgYW5kIGxvc3QgYG1ldGFgL2BkZXNjcmlwdGlvbmApLlxuICpcbiAqIEEgbmV3IGJ1bmRsZSBmaWVsZCBpczogb25lIG1lbWJlciBvbiBgUmVjb3JkZXJTbmFwc2hvdGAgKHJ1bm5lci9FeGVjdXRpb25SdW50aW1lLnRzKSBhbmRcbiAqIG9uZSBsaW5lIGhlcmUuIFRoZSB0aHJlZSBgdG9TbmFwc2hvdD8oKWAgc2lnbmF0dXJlcyAoYFNjb3BlUmVjb3JkZXJgLCBgRmxvd1JlY29yZGVyYCxcbiAqIGBDb21iaW5lZFJlY29yZGVyYCwgYW5kIGBFbWl0UmVjb3JkZXJgKSBhbGwgbmFtZSBgUmVjb3JkZXJCdW5kbGVgLCBzbyB0aGV5IGZvbGxvdy5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IFJlY29yZGVyU25hcHNob3QgfSBmcm9tICcuLi9ydW5uZXIvRXhlY3V0aW9uUnVudGltZS5qcyc7XG5cbi8qKiBXaGF0IGB0b1NuYXBzaG90KClgIHJldHVybnM6IGEgc25hcHNob3Qgcm93IHdpdGhvdXQgdGhlIGBpZGAgdGhlIGF0dGFjaCBzaXRlIG93bnMuICovXG5leHBvcnQgdHlwZSBSZWNvcmRlckJ1bmRsZSA9IE9taXQ8UmVjb3JkZXJTbmFwc2hvdCwgJ2lkJz47XG5cbi8qKiBSZWJ1aWxkIGBidW5kbGVgIGFzIHRoZSBzbmFwc2hvdCByb3cgZm9yIHRoZSByZWNvcmRlciBhdHRhY2hlZCB1bmRlciBgaWRgLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvcHlCdW5kbGUoaWQ6IHN0cmluZywgYnVuZGxlOiBSZWNvcmRlckJ1bmRsZSk6IFJlY29yZGVyU25hcHNob3Qge1xuICByZXR1cm4ge1xuICAgIGlkLFxuICAgIG5hbWU6IGJ1bmRsZS5uYW1lLFxuICAgIGRlc2NyaXB0aW9uOiBidW5kbGUuZGVzY3JpcHRpb24sXG4gICAgcHJlZmVycmVkT3BlcmF0aW9uOiBidW5kbGUucHJlZmVycmVkT3BlcmF0aW9uLFxuICAgIGRhdGE6IGJ1bmRsZS5kYXRhLFxuICAgIG1ldGE6IGJ1bmRsZS5tZXRhLFxuICB9O1xufVxuIl19
31
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic25hcHNob3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL3JlY29yZGVyL3NuYXBzaG90LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7O0dBYUc7QUFFSCxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQU0xRSxpRkFBaUY7QUFDakYsTUFBTSxVQUFVLFVBQVUsQ0FBQyxFQUFVLEVBQUUsTUFBc0IsRUFBRSxjQUFjLEdBQUcsS0FBSztJQUNuRixNQUFNLE9BQU8sR0FBRyxjQUFjO1FBQzVCLENBQUMsQ0FBQywwQkFBMEIsQ0FBQyxNQUFNLENBQUMsd0JBQXdCLENBQUMsTUFBTSxFQUFFLFNBQVMsQ0FBQyxFQUFFLEtBQUssQ0FBQztRQUN2RixDQUFDLENBQUMsU0FBUyxDQUFDO0lBQ2QsT0FBTztRQUNMLEVBQUU7UUFDRixJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUk7UUFDakIsV0FBVyxFQUFFLE1BQU0sQ0FBQyxXQUFXO1FBQy9CLGtCQUFrQixFQUFFLE1BQU0sQ0FBQyxrQkFBa0I7UUFDN0MsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJO1FBQ2pCLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSTtRQUNqQixHQUFHLENBQUMsT0FBTyxJQUFJLEVBQUUsT0FBTyxFQUFFLENBQUM7S0FDNUIsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIHJlY29yZGVyL3NuYXBzaG90LnRzIOKAlCB0aGUgT05FIGNvcGllciBmb3IgYSByZWNvcmRlcidzIGB0b1NuYXBzaG90KClgIGJ1bmRsZSAoRjYpLlxuICpcbiAqIEEgYnVuZGxlIGlzIG5ldmVyIHBhc3NlZCB0aHJvdWdoIGFzIHJldHVybmVkOiBpdCBpcyByZWJ1aWx0IGZpZWxkIGJ5IGZpZWxkLCBzbyBhIHJlY29yZGVyXG4gKiBjYW5ub3Qgc3Bvb2YgaXRzIG93biBgaWRgICh0aGUgZXhlY3V0b3IncywgYW5kIGNvbnN1bWVycyBpbmRleCBieSBpdCkgYW5kIG5vdGhpbmcgaXQgYWRkc1xuICogYmV5b25kIHRoZSBjb250cmFjdCBsZWFrcyBpbnRvIHRoZSBzbmFwc2hvdC4gVGhlIGNvc3QgaXMgdGhhdCBhIGZpZWxkIHRoaXMgY29waWVyIGZvcmdldHNcbiAqIGlzIGRyb3BwZWQgaW4gc2lsZW5jZSDigJQgd2hpY2ggaXMgd2h5IHRoZXJlIGlzIGV4YWN0bHkgb25lIGNvcGllciwgYW5kIHdoeVxuICogYHJ1bm5lci9zbmFwc2hvdC50cyDCtyBjb2xsZWN0UmVjb3JkZXJTbmFwc2hvdHNgIGFuZCBgQ29tcG9zaXRlUmVjb3JkZXIgwrcgdG9TbmFwc2hvdGAgYm90aFxuICogY2FsbCBpdCAodGhlIGNvbXBvc2l0ZSB1c2VkIHRvIGtlZXAgb25seSBgbmFtZWAvYGRhdGFgIGFuZCBsb3N0IGBtZXRhYC9gZGVzY3JpcHRpb25gKS5cbiAqXG4gKiBBIG5ldyBidW5kbGUgZmllbGQgaXM6IG9uZSBtZW1iZXIgb24gYFJlY29yZGVyU25hcHNob3RgIChydW5uZXIvRXhlY3V0aW9uUnVudGltZS50cykgYW5kXG4gKiBvbmUgbGluZSBoZXJlLiBUaGUgdGhyZWUgYHRvU25hcHNob3Q/KClgIHNpZ25hdHVyZXMgKGBTY29wZVJlY29yZGVyYCwgYEZsb3dSZWNvcmRlcmAsXG4gKiBgQ29tYmluZWRSZWNvcmRlcmAsIGFuZCBgRW1pdFJlY29yZGVyYCkgYWxsIG5hbWUgYFJlY29yZGVyQnVuZGxlYCwgc28gdGhleSBmb2xsb3cuXG4gKi9cblxuaW1wb3J0IHsgY29weUNhcHR1cmVBY2tub3dsZWRnZW1lbnQgfSBmcm9tICcuLi9jYXB0dXJlL25hdGl2ZUNvdmVyYWdlLmpzJztcbmltcG9ydCB0eXBlIHsgUmVjb3JkZXJTbmFwc2hvdCB9IGZyb20gJy4uL3J1bm5lci9FeGVjdXRpb25SdW50aW1lLmpzJztcblxuLyoqIFdoYXQgYHRvU25hcHNob3QoKWAgcmV0dXJuczogYSBzbmFwc2hvdCByb3cgd2l0aG91dCB0aGUgYGlkYCB0aGUgYXR0YWNoIHNpdGUgb3ducy4gKi9cbmV4cG9ydCB0eXBlIFJlY29yZGVyQnVuZGxlID0gT21pdDxSZWNvcmRlclNuYXBzaG90LCAnaWQnPjtcblxuLyoqIFJlYnVpbGQgYGJ1bmRsZWAgYXMgdGhlIHNuYXBzaG90IHJvdyBmb3IgdGhlIHJlY29yZGVyIGF0dGFjaGVkIHVuZGVyIGBpZGAuICovXG5leHBvcnQgZnVuY3Rpb24gY29weUJ1bmRsZShpZDogc3RyaW5nLCBidW5kbGU6IFJlY29yZGVyQnVuZGxlLCBpbmNsdWRlQ2FwdHVyZSA9IGZhbHNlKTogUmVjb3JkZXJTbmFwc2hvdCB7XG4gIGNvbnN0IGNhcHR1cmUgPSBpbmNsdWRlQ2FwdHVyZVxuICAgID8gY29weUNhcHR1cmVBY2tub3dsZWRnZW1lbnQoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihidW5kbGUsICdjYXB0dXJlJyk/LnZhbHVlKVxuICAgIDogdW5kZWZpbmVkO1xuICByZXR1cm4ge1xuICAgIGlkLFxuICAgIG5hbWU6IGJ1bmRsZS5uYW1lLFxuICAgIGRlc2NyaXB0aW9uOiBidW5kbGUuZGVzY3JpcHRpb24sXG4gICAgcHJlZmVycmVkT3BlcmF0aW9uOiBidW5kbGUucHJlZmVycmVkT3BlcmF0aW9uLFxuICAgIGRhdGE6IGJ1bmRsZS5kYXRhLFxuICAgIG1ldGE6IGJ1bmRsZS5tZXRhLFxuICAgIC4uLihjYXB0dXJlICYmIHsgY2FwdHVyZSB9KSxcbiAgfTtcbn1cbiJdfQ==
@@ -13,6 +13,8 @@ import type { CommitBundle, CommitValuesMode, LogAddress, LogOutcome, Meta } fro
13
13
  import type { RecordSink, WriteProvenanceMode } from 'foottrace/write';
14
14
  import { EventLog, SharedMemory } from 'foottrace/write';
15
15
  import type { RunCorrelation } from '../attempt/types.js';
16
+ import type { NativeCaptureNote, RecorderCaptureAcknowledgement } from '../capture/nativeCoverage.js';
17
+ import { NativeCapture } from '../capture/nativeCoverage.js';
16
18
  import type { StageSnapshot } from '../memory/frameTypes.js';
17
19
  import type { RunPolicy } from '../memory/runPolicy.js';
18
20
  import { StageContext } from '../memory/StageContext.js';
@@ -43,6 +45,8 @@ export interface RecorderSnapshot {
43
45
  * keep the values JSON-safe, since this rides the snapshot out to disk.
44
46
  */
45
47
  meta?: Readonly<Record<string, unknown>>;
48
+ /** Optional current-run capture acknowledgement from the recorder contract. */
49
+ capture?: RecorderCaptureAcknowledgement;
46
50
  }
47
51
  export type RuntimeSnapshot = {
48
52
  /**
@@ -57,6 +61,8 @@ export type RuntimeSnapshot = {
57
61
  * snapshot carries a DIFFERENT runId than the paused run's snapshot.
58
62
  */
59
63
  readonly runId: string;
64
+ /** Opt-in native observation; root log and current leg only, never durable storage. */
65
+ readonly capture?: NativeCaptureNote;
60
66
  /**
61
67
  * The run's correlation (10.1) — `env.traceparent`, or `env.traceId` + `env.operationId`, resolved once per
62
68
  * leg; the same frozen object every event of the leg carries (`TraversalContext.correlation`, a scope event's
@@ -161,6 +167,9 @@ export interface RuntimeRecord {
161
167
  readonly meta?: Meta;
162
168
  }
163
169
  export declare class ExecutionRuntime {
170
+ /** Present only for the current opted-in root leg. Never inherited by a subflow runtime. */
171
+ capture?: NativeCapture;
172
+ beginCapture(runId: string): NativeCapture;
164
173
  globalStore: SharedMemory;
165
174
  /**
166
175
  * Parallel redacted mirror of `globalStore`. Populated by every commit that