footprintjs 9.45.0 → 9.46.1

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 (64) hide show
  1. package/CLAUDE.md +10 -10
  2. package/dist/esm/lib/decide/evaluator.js +2 -2
  3. package/dist/esm/lib/decide/evidence.js +2 -2
  4. package/dist/esm/lib/engine/handlers/servedPause.js +2 -2
  5. package/dist/esm/lib/memory/RecordFrame.d.ts +232 -0
  6. package/dist/esm/lib/memory/RecordFrame.js +296 -0
  7. package/dist/esm/lib/memory/SharedMemory.d.ts +1 -1
  8. package/dist/esm/lib/memory/SharedMemory.js +2 -2
  9. package/dist/esm/lib/memory/StageContext.d.ts +71 -155
  10. package/dist/esm/lib/memory/StageContext.js +130 -285
  11. package/dist/esm/lib/memory/TransactionBuffer.d.ts +2 -2
  12. package/dist/esm/lib/memory/TransactionBuffer.js +3 -3
  13. package/dist/esm/lib/memory/borrowedMutation.d.ts +1 -1
  14. package/dist/esm/lib/memory/borrowedMutation.js +2 -2
  15. package/dist/esm/lib/memory/honesty.d.ts +4 -3
  16. package/dist/esm/lib/memory/honesty.js +5 -4
  17. package/dist/esm/lib/memory/index.d.ts +4 -2
  18. package/dist/esm/lib/memory/index.js +6 -4
  19. package/dist/esm/lib/memory/placeholders.d.ts +23 -28
  20. package/dist/esm/lib/memory/placeholders.js +24 -29
  21. package/dist/esm/lib/memory/recordCommit.d.ts +5 -3
  22. package/dist/esm/lib/memory/recordCommit.js +7 -5
  23. package/dist/esm/lib/memory/redaction.d.ts +78 -40
  24. package/dist/esm/lib/memory/redaction.js +130 -64
  25. package/dist/esm/lib/memory/runAddress.d.ts +20 -0
  26. package/dist/esm/lib/memory/runAddress.js +25 -0
  27. package/dist/esm/lib/memory/scrub.d.ts +51 -0
  28. package/dist/esm/lib/memory/scrub.js +72 -0
  29. package/dist/esm/lib/memory/utils.d.ts +3 -3
  30. package/dist/esm/lib/memory/utils.js +4 -4
  31. package/dist/esm/lib/reactive/structuralWrite.d.ts +1 -1
  32. package/dist/esm/lib/reactive/structuralWrite.js +2 -2
  33. package/dist/lib/decide/evaluator.js +3 -3
  34. package/dist/lib/decide/evidence.js +3 -3
  35. package/dist/lib/engine/handlers/servedPause.js +3 -3
  36. package/dist/lib/memory/RecordFrame.js +300 -0
  37. package/dist/lib/memory/SharedMemory.js +2 -2
  38. package/dist/lib/memory/StageContext.js +134 -289
  39. package/dist/lib/memory/TransactionBuffer.js +3 -3
  40. package/dist/lib/memory/borrowedMutation.js +2 -2
  41. package/dist/lib/memory/honesty.js +5 -4
  42. package/dist/lib/memory/index.js +6 -4
  43. package/dist/lib/memory/placeholders.js +25 -30
  44. package/dist/lib/memory/recordCommit.js +9 -7
  45. package/dist/lib/memory/redaction.js +144 -75
  46. package/dist/lib/memory/runAddress.js +29 -0
  47. package/dist/lib/memory/scrub.js +77 -0
  48. package/dist/lib/memory/utils.js +4 -4
  49. package/dist/lib/reactive/structuralWrite.js +2 -2
  50. package/dist/types/lib/memory/RecordFrame.d.ts +232 -0
  51. package/dist/types/lib/memory/SharedMemory.d.ts +1 -1
  52. package/dist/types/lib/memory/StageContext.d.ts +71 -155
  53. package/dist/types/lib/memory/TransactionBuffer.d.ts +2 -2
  54. package/dist/types/lib/memory/borrowedMutation.d.ts +1 -1
  55. package/dist/types/lib/memory/honesty.d.ts +4 -3
  56. package/dist/types/lib/memory/index.d.ts +4 -2
  57. package/dist/types/lib/memory/placeholders.d.ts +23 -28
  58. package/dist/types/lib/memory/recordCommit.d.ts +5 -3
  59. package/dist/types/lib/memory/redaction.d.ts +78 -40
  60. package/dist/types/lib/memory/runAddress.d.ts +20 -0
  61. package/dist/types/lib/memory/scrub.d.ts +51 -0
  62. package/dist/types/lib/memory/utils.d.ts +3 -3
  63. package/dist/types/lib/reactive/structuralWrite.d.ts +1 -1
  64. package/package.json +1 -1
@@ -29,9 +29,10 @@
29
29
  * field means `'truncated'`; they are registered so a reader explains them from the same place.
30
30
  *
31
31
  * NOT HERE: the two strings a redaction leaves where a value was. The engine writes those on every
32
- * redacted run; they live in their own leaf, `memory/placeholders.ts`, so that an app which only
33
- * runs charts does not carry these sentences in its bundle (`HONESTY_CODES` is a pure expression,
34
- * so a bundler drops it wherever nothing reads it).
32
+ * redacted run; the log's lives in its own leaf, `memory/placeholders.ts` (the scope channel's with
33
+ * the verdict, `memory/redaction.ts`), so that an app which only runs charts does not carry these
34
+ * sentences in its bundle (`HONESTY_CODES` is a pure expression, so a bundler drops it wherever
35
+ * nothing reads it).
35
36
  *
36
37
  * WHY L0. This file imports NOTHING, and `slice/` and `time-travel/` (L3) type their codes through
37
38
  * it, so it sits below them — the layer table is `scripts/layering.config.cjs`.
@@ -88,4 +89,4 @@ export const HONESTY_CODES = /* @__PURE__ */ Object.freeze({
88
89
  deleted: "The key's last write in the range asked about left it absent (a delete of the key or of a container around it, or a set of a container that no longer holds it), so the answer is undefined because the record says the key was gone at that point, not because nothing was recorded.",
89
90
  'from-initial-state': "No set or delete of the key, or of a container around it, is in the range asked about, so the answer rests on the value the key had before the run: folded from the initialState passed in when there was one, and otherwise only what the log's merges, appends and nested writes added to it (or nothing), which is partial for a key seeded before the run.",
90
91
  });
91
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaG9uZXN0eS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvbWVtb3J5L2hvbmVzdHkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0E4Q0c7QUFFSDs7Ozs7Ozs7OztHQVVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sYUFBYSxHQUFHLGVBQWUsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDO0lBQ3pELDZFQUE2RTtJQUM3RSx3QkFBd0IsRUFDdEIsK0xBQStMO0lBQ2pNLGFBQWEsRUFDWCxpVUFBaVU7SUFDblUsZ0JBQWdCLEVBQ2QsNkxBQTZMO0lBQy9MLG9CQUFvQixFQUNsQiwwSUFBMEk7SUFDNUksYUFBYSxFQUNYLG1KQUFtSjtJQUNySixTQUFTLEVBQ1AsOEdBQThHO0lBQ2hILG1HQUFtRztJQUNuRyxXQUFXLEVBQ1QscUlBQXFJO0lBQ3ZJLGVBQWUsRUFDYix1WUFBdVk7SUFDelksY0FBYyxFQUNaLDBOQUEwTjtJQUM1Tiw4RUFBOEU7SUFDOUUsV0FBVyxFQUNULG9PQUFvTztJQUN0TyxLQUFLLEVBQ0gseVFBQXlRO0lBQzNRLCtGQUErRjtJQUMvRixhQUFhLEVBQ1gsNEtBQTRLO0lBQzlLLGtCQUFrQixFQUNoQix1T0FBdU87SUFDek8sYUFBYSxFQUNYLGdMQUFnTDtJQUNsTCw2RUFBNkU7SUFDN0UsYUFBYSxFQUNYLHVOQUF1TjtJQUN6TixVQUFVLEVBQ1IsNlVBQTZVO0lBQy9VLDZFQUE2RTtJQUM3RSxTQUFTLEVBQ1AsZ0xBQWdMO0lBQ2xMLDhFQUE4RTtJQUM5RSxvQkFBb0IsRUFDbEIsc01BQXNNO0lBQ3hNLCtGQUErRjtJQUMvRixRQUFRLEVBQ04sNFdBQTRXO0lBQzlXLHdGQUF3RjtJQUN4RixPQUFPLEVBQ0wsdVJBQXVSO0lBQ3pSLG9CQUFvQixFQUNsQixnV0FBZ1c7Q0FDbFUsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBob25lc3R5LnRzIOKAlCB0aGUgT05FIHZvY2FidWxhcnkgZm9yIHdoYXQgYSByZWFkZXIgY2Fubm90IHNlZS5cbiAqXG4gKiBXSFkgVEhJUyBGSUxFIEVYSVNUUy4gQSByZWNvcmRpbmcgY2Fubm90IGFsd2F5cyBhbnN3ZXIgd2hhdCBpdCBpcyBhc2tlZCwgYW5kIHRoZSBsaWJyYXJ5IHNheXNcbiAqIHNvIGluIHNldmVyYWwgcGxhY2VzLCBlYWNoIGluIGl0cyBvd24gd29yZHM6IGEgc2xpY2UgY2FycmllcyBgSG9uZXN0eU5vdGVgcyBhbmQsIHdoZW4gaXQgaGFzIG5vXG4gKiBhbnN3ZXIsIGEgYG1pc3NpbmdgIHJlYXNvbjsgYSBmZWQgZWRnZSBhbmQgYW4gZWxlbWVudCBiaXJ0aCBjYXJyeSBhIGBiYXNpc2A7IGEgZm9sZCBjYXJyaWVzIGFcbiAqIGBiYXNpc2AgYW5kIGl0cyBgcmVkYWN0ZWRgIHBhdGhzOyBhIHN0b3JlZCBsb2cgcmVwb3J0cyBgTG9nR2FwYHM7IGEgY2F1c2FsIG5vZGUgY2Fycmllc1xuICogYGluY29tcGxldGVTb3VyY2VzYCBhbmQgYHRydW5jYXRlZGAuIEEgcmVhZGVyIHRoYXQgd2FudHMgdG8gRVhQTEFJTiBhbnkgb2YgdGhlbSB0byBhIHBlcnNvbiAoYVxuICogd2h5LXBhbmVsLCBhbiBhZ2VudCB0b29sKSBrZXB0IGl0cyBvd24gdGFibGUgb2YgY29kZSDihpIgc2VudGVuY2UsIGFuZCB0YWJsZXMga2VwdCBhcGFydCBkcmlmdC5cbiAqIFRoaXMgZmlsZSBpcyB0aGF0IHRhYmxlLCBvbmNlLlxuICpcbiAqIFdIQVQgSVQgSE9MRFMuXG4gKiAgIC0gYEhPTkVTVFlfQ09ERVNgIOKAlCBhIGZyb3plbiwgY2xvc2VkIHJlZ2lzdHJ5OiBjb2RlIOKGkiB0aGUgT05FIHNlbnRlbmNlIHRoYXQgc2F5cyB3aGF0IHRoZSBjb2RlXG4gKiAgICAgbWVhbnMuIFRoZSBzaGFwZSBvZiBydXN0YydzIGAtLWV4cGxhaW5gIGFuZCBMU1AncyBgRGlhZ25vc3RpYy5jb2RlYDogdGhlIGNvZGUgaXMgdGhlIHN0YWJsZVxuICogICAgIGtleSBhIGNvbnN1bWVyIEJSQU5DSEVTIG9uOyB0aGUgc2VudGVuY2UgaXMgZm9yIHdob2V2ZXIgcmVhZHMgdGhlIHNjcmVlbi4gSXQgaXMgbm90IHRoZVxuICogICAgIHBlci1pbnN0YW5jZSBgZGV0YWlsYCBhIG5vdGUgY2FycmllcyAodGhhdCBuYW1lcyB0aGUga2V5LCB0aGUgYnVkZ2V0LCB0aGUgcm93cykuXG4gKiAgIC0gYEhvbmVzdHlDb2RlYCAvIGBSZWdpc3RlcmVkQ29kZWAg4oCUIHdoYXQgbWFrZXMgdGhlIHJlZ2lzdHJ5IHRoZSBvd25lciBhbmQgbm90IGEgc3VnZ2VzdGlvbjpcbiAqICAgICBlYWNoIHB1YmxpYyB1bmlvbiBvZiB0aGVzZSBjb2RlcyAoYEhvbmVzdHlOb3RlQ29kZWAsIGBNaXNzaW5nU2xpY2VSZWFzb25gLFxuICogICAgIGBNaXNzaW5nUHJvdmVuYW5jZVJlYXNvbmAsIGBGZWRCYXNpc2AsIGBBdHRyaWJ1dGlvbkJhc2lzYCwgYEZvbGRCYXNpc2AsIGFuZCBzaW5jZSA5LjMzLjAgYFZhbHVlQmFzaXNgIC9cbiAqICAgICBgV3JpdGVyQmFzaXNgIOKAlCB0aGUgYmFzaXMgdHdpbnMgb2YgYGNvbW1pdFZhbHVlQXRgIC8gYGZpbmRMYXN0V3JpdGVyYCkgZGVjbGFyZXMgaXRzIG1lbWJlcnNcbiAqICAgICB0aHJvdWdoIGBSZWdpc3RlcmVkQ29kZWAsIHNvIGEgbWVtYmVyIHRoZSByZWdpc3RyeSBkb2VzIG5vdCBob2xkIGZhaWxzIHRvIENPTVBJTEUuIEFuZFxuICogICAgIGB0ZXN0L2FyY2hpdGVjdHVyZS9ob25lc3R5LXZvY2FidWxhcnkudGVzdC50c2AgYXNrcyB0aGUgdHlwZSBjaGVja2VyIGZvciBldmVyeSBleHBvcnRlZCB0eXBlXG4gKiAgICAgYWxpYXMgb2YgYGZvb3RwcmludGpzL3RyYWNlYCB0aGF0IGlzIGEgdW5pb24gb2Ygc3RyaW5nIGxpdGVyYWxzOiBlYWNoIG9uZSBpcyBpbnNpZGUgdGhlXG4gKiAgICAgcmVnaXN0cnkgb3IgaXMgbmFtZWQsIHdpdGggaXRzIHJlYXNvbiwgYXMgbm90IGFuIGhvbmVzdHkgdm9jYWJ1bGFyeS5cbiAqXG4gKiBOTyBPQkpFQ1QgR0FJTlMgQSBGSUVMRCBmcm9tIGJlaW5nIHJlZ2lzdGVyZWQuIFRocmVlIHNpZ25hbHMgY2Fycnkgbm8gY29kZSBvZiB0aGVpciBvd24g4oCUIGFcbiAqIGBMb2dHYXBgIChgJ2xvZy1nYXAnYCksIGBDYXVzYWxOb2RlLmluY29tcGxldGVTb3VyY2VzYCAoYCdpbmNvbXBsZXRlLXNvdXJjZXMnYCkgYW5kXG4gKiBgRm9sZGVkU3RhdGUucmVkYWN0ZWRgIC8gYHJlZGFjdGVkUGF0aHNgIChgJ3JlZGFjdGVkJ2ApIOKAlCBhbmQgYSBgdHJ1bmNhdGVkOiB7IGJ5RGVwdGgsIGJ5Tm9kZXMgfWBcbiAqIGZpZWxkIG1lYW5zIGAndHJ1bmNhdGVkJ2A7IHRoZXkgYXJlIHJlZ2lzdGVyZWQgc28gYSByZWFkZXIgZXhwbGFpbnMgdGhlbSBmcm9tIHRoZSBzYW1lIHBsYWNlLlxuICpcbiAqIE5PVCBIRVJFOiB0aGUgdHdvIHN0cmluZ3MgYSByZWRhY3Rpb24gbGVhdmVzIHdoZXJlIGEgdmFsdWUgd2FzLiBUaGUgZW5naW5lIHdyaXRlcyB0aG9zZSBvbiBldmVyeVxuICogcmVkYWN0ZWQgcnVuOyB0aGV5IGxpdmUgaW4gdGhlaXIgb3duIGxlYWYsIGBtZW1vcnkvcGxhY2Vob2xkZXJzLnRzYCwgc28gdGhhdCBhbiBhcHAgd2hpY2ggb25seVxuICogcnVucyBjaGFydHMgZG9lcyBub3QgY2FycnkgdGhlc2Ugc2VudGVuY2VzIGluIGl0cyBidW5kbGUgKGBIT05FU1RZX0NPREVTYCBpcyBhIHB1cmUgZXhwcmVzc2lvbixcbiAqIHNvIGEgYnVuZGxlciBkcm9wcyBpdCB3aGVyZXZlciBub3RoaW5nIHJlYWRzIGl0KS5cbiAqXG4gKiBXSFkgTDAuIFRoaXMgZmlsZSBpbXBvcnRzIE5PVEhJTkcsIGFuZCBgc2xpY2UvYCBhbmQgYHRpbWUtdHJhdmVsL2AgKEwzKSB0eXBlIHRoZWlyIGNvZGVzIHRocm91Z2hcbiAqIGl0LCBzbyBpdCBzaXRzIGJlbG93IHRoZW0g4oCUIHRoZSBsYXllciB0YWJsZSBpcyBgc2NyaXB0cy9sYXllcmluZy5jb25maWcuY2pzYC5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogaW1wb3J0IHsgSE9ORVNUWV9DT0RFUyB9IGZyb20gJ2Zvb3RwcmludGpzL3RyYWNlJztcbiAqXG4gKiBmb3IgKGNvbnN0IHsgY29kZSB9IG9mIGZvcndhcmRTbGljZS5ub3RlcykgY29uc29sZS5sb2coY29kZSwgJ+KGkicsIEhPTkVTVFlfQ09ERVNbY29kZV0pO1xuICogLy8gcmVhZHMtbm90LXJlY29yZGVkIOKGkiBUaGlzIGxvZyBjYXJyaWVzIG5vIHJlY29yZGVkIHJlYWQgYXQgYWxsICh0aGUgcmVhZFRyYWNraW5nOiAnb2ZmJyBzaWduYXR1cmUpLCDigKZcbiAqIEhPTkVTVFlfQ09ERVNbZm9sZGVkU3RhdGUuYmFzaXNdOyAvLyAnbG9nLW9ubHknIOKGkiBObyBpbml0aWFsU3RhdGUgdHJhdmVsbGVkIHdpdGggdGhpcyBsb2cgKOKApiksIOKAplxuICogYGBgXG4gKi9cblxuLyoqXG4gKiBFdmVyeSBob25lc3R5IGNvZGUgdGhlIHRyYWNlIHJlYWRlcnMgKGBmb290cHJpbnRqcy90cmFjZWApIHNwZWFrLCB3aXRoIHRoZSBvbmUgc2VudGVuY2UgdGhhdCBzYXlzXG4gKiB3aGF0IGl0IG1lYW5zLlxuICpcbiAqIEZyb3plbiBhbmQgY2xvc2VkOiB0aGUga2V5cyBhcmUgZXhhY3RseSB0aGUgY29kZXMgYmVsb3csIGFuZCB7QGxpbmsgSG9uZXN0eUNvZGV9IGlzIGRlcml2ZWQgZnJvbVxuICogdGhlbS4gQSBuZXcgY29kZSBpcyBvbmUgbmV3IGxpbmUgaGVyZTogYSB1bmlvbiBkZWNsYXJlZCB0aHJvdWdoIHtAbGluayBSZWdpc3RlcmVkQ29kZX0gY2Fubm90IGhvbGRcbiAqIGEgY29kZSB0aGF0IGlzIG5vdCBvbiBpdCwgYW5kIGB0ZXN0L2FyY2hpdGVjdHVyZS9ob25lc3R5LXZvY2FidWxhcnkudGVzdC50c2AgZmFpbHMgb24gYW4gZXhwb3J0ZWRcbiAqIHR5cGUgYWxpYXMgb2YgYGZvb3RwcmludGpzL3RyYWNlYCB0aGF0IGlzIGEgdW5pb24gb2Ygc3RyaW5nIGxpdGVyYWxzIG5laXRoZXIgaW5zaWRlIHRoZSByZWdpc3RyeVxuICogbm9yIG5hbWVkIHRoZXJlIGFzIG5vdCBhbiBob25lc3R5IHZvY2FidWxhcnkuIFRoZSB2YWx1ZXMgYXJlIHR5cGVkIGBzdHJpbmdgLCBub3QgbGl0ZXJhbCB0eXBlcyxcbiAqIG9uIHB1cnBvc2U6IHRoZSBzZW50ZW5jZXMgYXJlIGZvciBhIHNjcmVlbiBhbmQgbWF5IGJlIHJld29yZGVkOyBhIGNvbnN1bWVyIGJyYW5jaGVzIG9uIHRoZSBLRVkuXG4gKi9cbmV4cG9ydCBjb25zdCBIT05FU1RZX0NPREVTID0gLyogQF9fUFVSRV9fICovIE9iamVjdC5mcmVlemUoe1xuICAvLyDilIDilIAgYSBzbGljZSdzIG5vdGVzIOKAlCBgSG9uZXN0eU5vdGUuY29kZWAgKHNsaWNlLykg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4gICdjb25zZXJ2YXRpdmUtZmVkLWVkZ2VzJzpcbiAgICBcIkF0IGxlYXN0IG9uZSAnZmVkJyBlZGdlIGlzIHN0YWdlLWxldmVsIChjb25zZXJ2YXRpdmUpOiBpdHMgd3JpdGUgY2FycmllcyBubyBwZXItd3JpdGUgcmVhZCBwcm92ZW5hbmNlLCBzbyB0aGUgZWRnZSBtYXkgbm90IGJlIHJlYWwg4oCUIHR1cm4gb24gd3JpdGVQcm92ZW5hbmNlOiAncmVhZHMtcHJlZml4JyBmb3IgZXhhY3QgZWRnZXMuXCIsXG4gICduZXN0ZWQtcm93cyc6XG4gICAgXCJBIHdyaXRlIHRoaXMgYW5zd2VyIHJlc3RzIG9uIHJlYWNoZWQgdGhlIGtleSBvbmx5IHRocm91Z2ggcGF0aHMgaW5zaWRlIGl0IChhIHN1YmZsb3cncyBpbnB1dCBzZWVkLCBhbiBvdXRwdXRNYXBwZXIgbWVyZ2UtYmFjaywgYSBmb3JrIGNoaWxkJ3MgbmFtZXNwYWNlKSwgc28gaXQgY2hhbmdlZCBwYXJ0IG9mIHRoZSBrZXkncyB2YWx1ZSwgbm90IHRoZSB3aG9sZTogZWFybGllciB3cml0ZXMgbWF5IGFjY291bnQgZm9yIHRoZSByZXN0LCBhbmQgYSByZWFkZXIgb2YgdGhlIGtleSBtYXkgbm90IGhhdmUgcmVhZCB0aGUgcGFydCB0aGF0IHdyaXRlIGNoYW5nZWQuXCIsXG4gICdwcmUtcnVuLW9yaWdpbic6XG4gICAgJ1RoZSB2YWx1ZSBiZWluZyBmb2xsb3dlZCB3YXMgYWJzZW50IG9yIGFscmVhZHkgdGhlcmUgYmVmb3JlIHRoZSBmaXJzdCB3cml0ZSB0aGlzIGxvZyBjYW4gc2VlIChpbml0aWFsIHN0YXRlLCBmcm96ZW4gcnVuIGlucHV0IG9yIGEgY2xvc3VyZSksIHNvIHdobyBwdXQgaXQgdGhlcmUgaXMgb3V0c2lkZSB0aGUgY29tbWl0IGxvZy4nLFxuICAncmVhZHMtbm90LXJlY29yZGVkJzpcbiAgICBcIlRoaXMgbG9nIGNhcnJpZXMgbm8gcmVjb3JkZWQgcmVhZCBhdCBhbGwgKHRoZSByZWFkVHJhY2tpbmc6ICdvZmYnIHNpZ25hdHVyZSksIHNvICdub3RoaW5nIHJlYWQgdGhpcyB2YWx1ZScgaXMgdW5rbm93YWJsZSBoZXJlLCBub3QgdHJ1ZS5cIixcbiAgJ3Vua25vd24ta2V5JzpcbiAgICBcIlRoaXMgbG9nIGhhcyBubyB3cml0ZSBhbmQgbm8gcmVjb3JkZWQgcmVhZCBvZiB0aGUga2V5LCB3aGljaCBpcyBtb3N0IGxpa2VseSBhIHR5cG8gb3IgdGhlIHdyb25nIHJ1bidzIGxvZyByYXRoZXIgdGhhbiBhIHZhcmlhYmxlIHdpdGggbm8gaGlzdG9yeS5cIixcbiAgdHJ1bmNhdGVkOlxuICAgICdBIGJ1ZGdldCAobWF4RGVwdGggb3IgbWF4Tm9kZXMpIGN1dCB0aGUgd2Fsaywgc28gbW9yZSBvZiB0aGUgYW5zd2VyIGV4aXN0cyBiZXlvbmQgdGhlIGhvcml6b24gaXQgc3RvcHBlZCBhdC4nLFxuICAvLyDilIDilIAgd2h5IGEgc2xpY2UgaGFzIG5vIGFuc3dlciDigJQgYG1pc3NpbmdgIChzbGljZS86IE1pc3NpbmdTbGljZVJlYXNvbiwgTWlzc2luZ1Byb3ZlbmFuY2VSZWFzb24pIOKUgFxuICAnZW1wdHktbG9nJzpcbiAgICAnVGhlIGNvbW1pdCBsb2cgaG9sZHMgbm8gY29tbWl0IGF0IGFsbCAobm90aGluZyBoYXMgZXhlY3V0ZWQsIG9yIHRoZSBsb2cgaGFuZGVkIGluIGlzIGVtcHR5KSwgc28gdGhlcmUgaXMgbm8gaGlzdG9yeSB0byBhbnN3ZXIgZnJvbS4nLFxuICAnbmV2ZXItd3JpdHRlbic6XG4gICAgJ05vIGNvbW1pdCBpbiB0aGUgcmFuZ2UgYXNrZWQgYWJvdXQgd3JvdGUgdGhlIGtleSDigJQgbm90IGl0cyB3aG9sZSB2YWx1ZSwgbm90IGEgcGF0aCBpbnNpZGUgaXQsIGFuZCBub3QgYSBjb250YWluZXIgYXJvdW5kIGl0IGluIGEgd2F5IHRoYXQgY2hhbmdlZCBpdCAoYSBmb3J3YXJkIHNsaWNlIG9yIGEgdGltZWxpbmUgYWxzbyBmb3VuZCBubyByZWNvcmRlZCByZWFkIG9uLCBpbnNpZGUgb3IgYXJvdW5kIGl0KSDigJQgc28gdGhlcmUgaXMgbm8gd3JpdGUgdG8gc3RhcnQgZnJvbTogYW55IHZhbHVlIGl0IGhhcyBjYW1lIGZyb20gdGhlIGluaXRpYWwgc3RhdGUsIHRoZSBmcm96ZW4gcnVuIGlucHV0IG9yIGEgY2xvc3VyZSwgbm9uZSBvZiB3aGljaCB0aGUgY29tbWl0IGxvZyBjYW4gc2VlLicsXG4gICdub3QtYW4tYXJyYXknOlxuICAgICdUaGUga2V5IHdhcyB3cml0dGVuLCBidXQgaXRzIHZhbHVlIGF0IHRoZSBwb2ludCBhc2tlZCBhYm91dCBpcyBub3QgYW4gYXJyYXkgKGEgc2NhbGFyIG9yIG9iamVjdCBrZXksIGEgZGVsZXRlZCBrZXksIG9yIGEgbWVyZ2UgdGhhdCBkZWdyYWRlZCBpdCksIHNvIGVsZW1lbnQgcHJvdmVuYW5jZSBkb2VzIG5vdCBhcHBseTogc2xpY2VGb3JLZXkgaXMgdGhlIHF1ZXJ5IGZvciBpdC4nLFxuICAvLyDilIDilIAgaG93IGEgZmVkIGVkZ2Ugd2FzIGF0dHJpYnV0ZWQg4oCUIGBGb3J3YXJkRWRnZS5iYXNpc2AgKHNsaWNlLzogRmVkQmFzaXMpIOKUgFxuICAncGVyLXdyaXRlJzpcbiAgICBcIlRoaXMgZmVkIGVkZ2UgaXMgZXhhY3Q6IHRoZSBkb3duc3RyZWFtIHdyaXRlIGNhcnJpZXMgcGVyLXdyaXRlIHJlYWQgcHJvdmVuYW5jZSAoVHJhY2VFbnRyeS5yZWFkS2V5cywgcmVjb3JkZWQgdW5kZXIgd3JpdGVQcm92ZW5hbmNlOiAncmVhZHMtcHJlZml4JykgYW5kIHRoYXQgbGlzdCBuYW1lcyB0aGUga2V5LCBzbyB0aGUgdmFsdWUgd2FzIHJlYWQgYmVmb3JlIHRoZSB3cml0ZSBpdCBmZWVkcy5cIixcbiAgc3RhZ2U6XG4gICAgJ1RoaXMgZmVkIGVkZ2UgaXMgY29uc2VydmF0aXZlOiB0aGUgZG93bnN0cmVhbSB3cml0ZSBjYXJyaWVzIG5vIHBlci13cml0ZSByZWFkIHByb3ZlbmFuY2UgKHRoZSB3cml0ZVByb3ZlbmFuY2UgZGlhbCB3YXMgb2ZmLCBvciB0aGUgbG9nIGlzIG1peGVkKSwgc28gYWxsIHRoYXQgaXMga25vd24gaXMgdGhhdCBpdHMgc3RhZ2UgcmVhZCB0aGlzIGtleSBhbmQgd3JvdGUgdGhhdCBwYXRoIGluIHNvbWUgb3JkZXIsIGFuZCB0aGUgZWRnZSBtYXkgbm90IGJlIHJlYWwuJyxcbiAgLy8g4pSA4pSAIGhvdyBhbiBlbGVtZW50J3MgYmlydGggd2FzIGF0dHJpYnV0ZWQg4oCUIGBFbGVtZW50QmlydGguYmFzaXNgIChzbGljZS86IEF0dHJpYnV0aW9uQmFzaXMpIOKUgFxuICAnYXBwZW5kLXZlcmInOlxuICAgIFwiVGhlIGVuZ2luZSByZWNvcmRlZCB0aGUgZWxlbWVudCBpbiBhbiBhcHBlbmQgcm93J3MgdGFpbCAoaG93IGNvbW1pdFZhbHVlczogJ2RlbHRhJyByZWNvcmRzIGFuIGFycmF5J3MgZ3Jvd3RoKSwgc28gdGhlIGNvbW1pdCB0aGF0IGFkZGVkIGl0IGlzIGtub3duIGV4YWN0bHksIG5vdCBpbmZlcnJlZC5cIixcbiAgJ3ByZWZpeC1pbmZlcmVuY2UnOlxuICAgICdBIHdob2xlLXZhbHVlIHdyaXRlIChhIHNldCBvciBhIG1lcmdlKSBrZXB0IHRoZSBwcmV2aW91cyBhcnJheSBhcyBpdHMgcHJlZml4LCBzbyB0aGUgbmV3IHRhaWwgaXMgYXR0cmlidXRlZCB0byB0aGF0IGNvbW1pdCBieSBpbmZlcmVuY2U6IGEgd3JpdGUgdGhhdCByZXBsYWNlZCB0aGUgYXJyYXkgd2l0aCBvbmUgdGhhdCBoYXBwZW5zIHRvIGJlZ2luIHRoZSBzYW1lIHdheSBsb29rcyBpZGVudGljYWwuJyxcbiAgJ3dob2xlLXZhbHVlJzpcbiAgICBcIlRoaXMgY29tbWl0IHBsYWNlZCB0aGUgYXJyYXkgd2hvbGVzYWxlICh0aGVyZSB3YXMgbm8gZWFybGllciBhcnJheSwgb3IgdGhlIG5ldyBvbmUgZG9lcyBub3QgYmVnaW4gd2l0aCBpdCksIHNvIGV2ZXJ5IGVsZW1lbnQncyBiaXJ0aCByZXNldHMgdG8gdGhpcyBjb21taXQ6IGV4YWN0LCBidXQgY29hcnNlLlwiLFxuICAvLyDilIDilIAgaG93IGEgZm9sZCB3YXMgZGVyaXZlZCDigJQgYEZvbGRlZFN0YXRlLmJhc2lzYCAodGltZS10cmF2ZWwvKSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbiAgJ2luaXRpYWwrbG9nJzpcbiAgICAnVGhlIGZvbGQgc3RhcnRlZCBmcm9tIHRoZSBmb2xkIGJhc2UgdGhhdCB0cmF2ZWxsZWQgd2l0aCB0aGUgbG9nIChpbml0aWFsU3RhdGUpIGFuZCByZXBsYXllZCB0aGUgY29tbWl0IGxvZyBvbnRvIGl0LCBzbyBub3RoaW5nIHNlZWRlZCBiZWZvcmUgdGhlIHJ1biBpcyBtaXNzaW5nOyByb3dzIGl0IGNvdWxkIG5vdCByZWFkIGFyZSBsaXN0ZWQgYXBhcnQsIGluIHNraXBwZWQuJyxcbiAgJ2xvZy1vbmx5JzpcbiAgICAnTm8gaW5pdGlhbFN0YXRlIHRyYXZlbGxlZCB3aXRoIHRoaXMgbG9nIChhIHNuYXBzaG90IHN0b3JlZCBiZWZvcmUgOS4xNywgYSByZWRhY3RlZCBzbmFwc2hvdCBvciBhIGhhbmQtYnVpbHQgbG9nKSwgc28gdGhlIGZvbGQgc3RhcnRlZCBmcm9tIGFuIGVtcHR5IG9iamVjdDogYSBrZXkgc2VlZGVkIGJlZm9yZSB0aGUgcnVuIGlzIHdob2xlIG9ubHkgb25jZSBhIGNvbW1pdCBzaW5jZSB3cm90ZSBpdHMgd2hvbGUgdmFsdWUsIGFuZCB1bnRpbCB0aGVuIGl0IGhvbGRzIGp1c3Qgd2hhdCBpdHMgbWVyZ2VzLCBhcHBlbmRzIGFuZCBuZXN0ZWQgd3JpdGVzIGFkZGVkLCBvciBub3RoaW5nLicsXG4gIC8vIOKUgOKUgCBhIHJvdyBvZiBhIHN0b3JlZCBsb2cgdGhhdCBpcyBub3QgYSBjb21taXQgYnVuZGxlIOKAlCBgTG9nR2FwYCDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbiAgJ2xvZy1nYXAnOlxuICAgICdBIHJvdyBvZiB0aGUgc3RvcmVkIGxvZyBjb3VsZCBub3QgYmUgcmVhZCBhcyBhIGNvbW1pdCBidW5kbGUsIHNvIGl0IGtlZXBzIGl0cyBpbmRleCBidXQgY29udHJpYnV0ZXMgbm8gc3RhdGUsIGFuZCBhbnkgZm9sZCB0aGF0IGNyb3NzZXMgaXQgaXMgbWlzc2luZyB3aGF0ZXZlciB0aGF0IHJvdyB3cm90ZS4nLFxuICAvLyDilIDilIAgdW50cmFja2VkIHJlYWRzIGEgc3RhZ2UgYWxzbyBjb25zdW1lZCDigJQgYENhdXNhbE5vZGUuaW5jb21wbGV0ZVNvdXJjZXNgIOKUgFxuICAnaW5jb21wbGV0ZS1zb3VyY2VzJzpcbiAgICAnVGhlIHN0YWdlIGFsc28gY29uc3VtZWQgcmVhZCBwYXRocyB0aGF0IGJ5cGFzcyByZWFkIHRyYWNraW5nIChhcmdzLCBlbnYgb3IgYW4gdW5zaGFkb3dlZCBzaWxlbnQgcmVhZCksIHNvIGEgc2xpY2UgdGhyb3VnaCBpdCBtYXkgYmUgaW5jb21wbGV0ZTogdGhvc2UgcmVhZHMgcHJvZHVjZSBubyByZWFkLXRvLXdyaXRlIGVkZ2UgdG8gZm9sbG93LicsXG4gIC8vIOKUgOKUgCB2YWx1ZXMgc2NydWJiZWQgYXQgd3JpdGUgdGltZSDigJQgYEZvbGRlZFN0YXRlLnJlZGFjdGVkYCAvIGByZWRhY3RlZFBhdGhzYCwgYSB2YWx1ZSBiYXNpcyDilIBcbiAgcmVkYWN0ZWQ6XG4gICAgXCJWYWx1ZXMgYXQgdGhlIHBhdGhzIGxpc3RlZCBpbiByZWRhY3RlZFBhdGhzIChhIGZvbGQncywgb3IgYSBjb21taXQncyBpbiB0aGUgcmFuZ2UgYSBrZXkncyB2YWx1ZSByZXN0cyBvbikgd2VyZSBzY3J1YmJlZCB3aGVuIHRoZXkgd2VyZSB3cml0dGVuIChieSBhIHJlZGFjdGlvbiBwb2xpY3ksIG9yIGEgd3JpdGUgbWFya2VkIHJlZGFjdGVkKSwgc28gd2hlcmUgdGhlIGFuc3dlciBob2xkcyB0aGUgbG9nJ3MgcGxhY2Vob2xkZXIgJ1JFREFDVEVEJywgb3IgbG9zdCBhIGtleSB1bmRlciBhIGNvbnRhaW5lciB0aGUgcGxhY2Vob2xkZXIgcmVwbGFjZWQsIGl0IHN0YW5kcyBpbiBmb3IgYSB2YWx1ZSB0aGUgbG9nIG5ldmVyIHJlY29yZGVkLlwiLFxuICAvLyDilIDilIAgaG93IG9uZSBrZXkncyB2YWx1ZSB3YXMgcmVhZCBvZmYgdGhlIGxvZyDigJQgYFZhbHVlQmFzaXNgIChjb21taXRWYWx1ZUF0V2l0aEJhc2lzKSDilIBcbiAgZGVsZXRlZDpcbiAgICBcIlRoZSBrZXkncyBsYXN0IHdyaXRlIGluIHRoZSByYW5nZSBhc2tlZCBhYm91dCBsZWZ0IGl0IGFic2VudCAoYSBkZWxldGUgb2YgdGhlIGtleSBvciBvZiBhIGNvbnRhaW5lciBhcm91bmQgaXQsIG9yIGEgc2V0IG9mIGEgY29udGFpbmVyIHRoYXQgbm8gbG9uZ2VyIGhvbGRzIGl0KSwgc28gdGhlIGFuc3dlciBpcyB1bmRlZmluZWQgYmVjYXVzZSB0aGUgcmVjb3JkIHNheXMgdGhlIGtleSB3YXMgZ29uZSBhdCB0aGF0IHBvaW50LCBub3QgYmVjYXVzZSBub3RoaW5nIHdhcyByZWNvcmRlZC5cIixcbiAgJ2Zyb20taW5pdGlhbC1zdGF0ZSc6XG4gICAgXCJObyBzZXQgb3IgZGVsZXRlIG9mIHRoZSBrZXksIG9yIG9mIGEgY29udGFpbmVyIGFyb3VuZCBpdCwgaXMgaW4gdGhlIHJhbmdlIGFza2VkIGFib3V0LCBzbyB0aGUgYW5zd2VyIHJlc3RzIG9uIHRoZSB2YWx1ZSB0aGUga2V5IGhhZCBiZWZvcmUgdGhlIHJ1bjogZm9sZGVkIGZyb20gdGhlIGluaXRpYWxTdGF0ZSBwYXNzZWQgaW4gd2hlbiB0aGVyZSB3YXMgb25lLCBhbmQgb3RoZXJ3aXNlIG9ubHkgd2hhdCB0aGUgbG9nJ3MgbWVyZ2VzLCBhcHBlbmRzIGFuZCBuZXN0ZWQgd3JpdGVzIGFkZGVkIHRvIGl0IChvciBub3RoaW5nKSwgd2hpY2ggaXMgcGFydGlhbCBmb3IgYSBrZXkgc2VlZGVkIGJlZm9yZSB0aGUgcnVuLlwiLFxufSBzYXRpc2ZpZXMgUmVjb3JkPHN0cmluZywgc3RyaW5nPik7XG5cbi8qKiBBbnkgY29kZSBpbiB7QGxpbmsgSE9ORVNUWV9DT0RFU30g4oCUIHRoZSBrZXkgYSByZWFkZXIgbG9va3MgYW4gZXhwbGFuYXRpb24gdXAgYnkuICovXG5leHBvcnQgdHlwZSBIb25lc3R5Q29kZSA9IGtleW9mIHR5cGVvZiBIT05FU1RZX0NPREVTO1xuXG4vKipcbiAqIEEgdW5pb24gb2YgaG9uZXN0eSBjb2RlcyBhIHR5cGUgREVDTEFSRVM6IGBUYCBtdXN0IGJlIGEgc3Vic2V0IG9mIHtAbGluayBIb25lc3R5Q29kZX0sIG9yIHRoZVxuICogZGVjbGFyYXRpb24gZmFpbHMgdG8gY29tcGlsZSAoVFMyMzQ0KS5cbiAqXG4gKiBgUmVnaXN0ZXJlZENvZGU8VD5gIGlzIGBUYCDigJQgYW4gaWRlbnRpdHkgYXQgdGhlIHR5cGUgbGV2ZWwg4oCUIHNvIHRoZSB1bmlvbiBrZWVwcyBleGFjdGx5IHRoZVxuICogbWVtYmVycyBpdCB3YXMgd3JpdHRlbiB3aXRoIGFuZCBkb2VzIE5PVCB3aWRlbiB0byBldmVyeSBjb2RlOlxuICogYHR5cGUgRm9sZEJhc2lzID0gUmVnaXN0ZXJlZENvZGU8J2luaXRpYWwrbG9nJyB8ICdsb2ctb25seSc+YC5cbiAqL1xuZXhwb3J0IHR5cGUgUmVnaXN0ZXJlZENvZGU8VCBleHRlbmRzIEhvbmVzdHlDb2RlPiA9IFQ7XG4iXX0=
92
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaG9uZXN0eS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvbWVtb3J5L2hvbmVzdHkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBK0NHO0FBRUg7Ozs7Ozs7Ozs7R0FVRztBQUNILE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBRyxlQUFlLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQztJQUN6RCw2RUFBNkU7SUFDN0Usd0JBQXdCLEVBQ3RCLCtMQUErTDtJQUNqTSxhQUFhLEVBQ1gsaVVBQWlVO0lBQ25VLGdCQUFnQixFQUNkLDZMQUE2TDtJQUMvTCxvQkFBb0IsRUFDbEIsMElBQTBJO0lBQzVJLGFBQWEsRUFDWCxtSkFBbUo7SUFDckosU0FBUyxFQUNQLDhHQUE4RztJQUNoSCxtR0FBbUc7SUFDbkcsV0FBVyxFQUNULHFJQUFxSTtJQUN2SSxlQUFlLEVBQ2IsdVlBQXVZO0lBQ3pZLGNBQWMsRUFDWiwwTkFBME47SUFDNU4sOEVBQThFO0lBQzlFLFdBQVcsRUFDVCxvT0FBb087SUFDdE8sS0FBSyxFQUNILHlRQUF5UTtJQUMzUSwrRkFBK0Y7SUFDL0YsYUFBYSxFQUNYLDRLQUE0SztJQUM5SyxrQkFBa0IsRUFDaEIsdU9BQXVPO0lBQ3pPLGFBQWEsRUFDWCxnTEFBZ0w7SUFDbEwsNkVBQTZFO0lBQzdFLGFBQWEsRUFDWCx1TkFBdU47SUFDek4sVUFBVSxFQUNSLDZVQUE2VTtJQUMvVSw2RUFBNkU7SUFDN0UsU0FBUyxFQUNQLGdMQUFnTDtJQUNsTCw4RUFBOEU7SUFDOUUsb0JBQW9CLEVBQ2xCLHNNQUFzTTtJQUN4TSwrRkFBK0Y7SUFDL0YsUUFBUSxFQUNOLDRXQUE0VztJQUM5Vyx3RkFBd0Y7SUFDeEYsT0FBTyxFQUNMLHVSQUF1UjtJQUN6UixvQkFBb0IsRUFDbEIsZ1dBQWdXO0NBQ2xVLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogaG9uZXN0eS50cyDigJQgdGhlIE9ORSB2b2NhYnVsYXJ5IGZvciB3aGF0IGEgcmVhZGVyIGNhbm5vdCBzZWUuXG4gKlxuICogV0hZIFRISVMgRklMRSBFWElTVFMuIEEgcmVjb3JkaW5nIGNhbm5vdCBhbHdheXMgYW5zd2VyIHdoYXQgaXQgaXMgYXNrZWQsIGFuZCB0aGUgbGlicmFyeSBzYXlzXG4gKiBzbyBpbiBzZXZlcmFsIHBsYWNlcywgZWFjaCBpbiBpdHMgb3duIHdvcmRzOiBhIHNsaWNlIGNhcnJpZXMgYEhvbmVzdHlOb3RlYHMgYW5kLCB3aGVuIGl0IGhhcyBub1xuICogYW5zd2VyLCBhIGBtaXNzaW5nYCByZWFzb247IGEgZmVkIGVkZ2UgYW5kIGFuIGVsZW1lbnQgYmlydGggY2FycnkgYSBgYmFzaXNgOyBhIGZvbGQgY2FycmllcyBhXG4gKiBgYmFzaXNgIGFuZCBpdHMgYHJlZGFjdGVkYCBwYXRoczsgYSBzdG9yZWQgbG9nIHJlcG9ydHMgYExvZ0dhcGBzOyBhIGNhdXNhbCBub2RlIGNhcnJpZXNcbiAqIGBpbmNvbXBsZXRlU291cmNlc2AgYW5kIGB0cnVuY2F0ZWRgLiBBIHJlYWRlciB0aGF0IHdhbnRzIHRvIEVYUExBSU4gYW55IG9mIHRoZW0gdG8gYSBwZXJzb24gKGFcbiAqIHdoeS1wYW5lbCwgYW4gYWdlbnQgdG9vbCkga2VwdCBpdHMgb3duIHRhYmxlIG9mIGNvZGUg4oaSIHNlbnRlbmNlLCBhbmQgdGFibGVzIGtlcHQgYXBhcnQgZHJpZnQuXG4gKiBUaGlzIGZpbGUgaXMgdGhhdCB0YWJsZSwgb25jZS5cbiAqXG4gKiBXSEFUIElUIEhPTERTLlxuICogICAtIGBIT05FU1RZX0NPREVTYCDigJQgYSBmcm96ZW4sIGNsb3NlZCByZWdpc3RyeTogY29kZSDihpIgdGhlIE9ORSBzZW50ZW5jZSB0aGF0IHNheXMgd2hhdCB0aGUgY29kZVxuICogICAgIG1lYW5zLiBUaGUgc2hhcGUgb2YgcnVzdGMncyBgLS1leHBsYWluYCBhbmQgTFNQJ3MgYERpYWdub3N0aWMuY29kZWA6IHRoZSBjb2RlIGlzIHRoZSBzdGFibGVcbiAqICAgICBrZXkgYSBjb25zdW1lciBCUkFOQ0hFUyBvbjsgdGhlIHNlbnRlbmNlIGlzIGZvciB3aG9ldmVyIHJlYWRzIHRoZSBzY3JlZW4uIEl0IGlzIG5vdCB0aGVcbiAqICAgICBwZXItaW5zdGFuY2UgYGRldGFpbGAgYSBub3RlIGNhcnJpZXMgKHRoYXQgbmFtZXMgdGhlIGtleSwgdGhlIGJ1ZGdldCwgdGhlIHJvd3MpLlxuICogICAtIGBIb25lc3R5Q29kZWAgLyBgUmVnaXN0ZXJlZENvZGVgIOKAlCB3aGF0IG1ha2VzIHRoZSByZWdpc3RyeSB0aGUgb3duZXIgYW5kIG5vdCBhIHN1Z2dlc3Rpb246XG4gKiAgICAgZWFjaCBwdWJsaWMgdW5pb24gb2YgdGhlc2UgY29kZXMgKGBIb25lc3R5Tm90ZUNvZGVgLCBgTWlzc2luZ1NsaWNlUmVhc29uYCxcbiAqICAgICBgTWlzc2luZ1Byb3ZlbmFuY2VSZWFzb25gLCBgRmVkQmFzaXNgLCBgQXR0cmlidXRpb25CYXNpc2AsIGBGb2xkQmFzaXNgLCBhbmQgc2luY2UgOS4zMy4wIGBWYWx1ZUJhc2lzYCAvXG4gKiAgICAgYFdyaXRlckJhc2lzYCDigJQgdGhlIGJhc2lzIHR3aW5zIG9mIGBjb21taXRWYWx1ZUF0YCAvIGBmaW5kTGFzdFdyaXRlcmApIGRlY2xhcmVzIGl0cyBtZW1iZXJzXG4gKiAgICAgdGhyb3VnaCBgUmVnaXN0ZXJlZENvZGVgLCBzbyBhIG1lbWJlciB0aGUgcmVnaXN0cnkgZG9lcyBub3QgaG9sZCBmYWlscyB0byBDT01QSUxFLiBBbmRcbiAqICAgICBgdGVzdC9hcmNoaXRlY3R1cmUvaG9uZXN0eS12b2NhYnVsYXJ5LnRlc3QudHNgIGFza3MgdGhlIHR5cGUgY2hlY2tlciBmb3IgZXZlcnkgZXhwb3J0ZWQgdHlwZVxuICogICAgIGFsaWFzIG9mIGBmb290cHJpbnRqcy90cmFjZWAgdGhhdCBpcyBhIHVuaW9uIG9mIHN0cmluZyBsaXRlcmFsczogZWFjaCBvbmUgaXMgaW5zaWRlIHRoZVxuICogICAgIHJlZ2lzdHJ5IG9yIGlzIG5hbWVkLCB3aXRoIGl0cyByZWFzb24sIGFzIG5vdCBhbiBob25lc3R5IHZvY2FidWxhcnkuXG4gKlxuICogTk8gT0JKRUNUIEdBSU5TIEEgRklFTEQgZnJvbSBiZWluZyByZWdpc3RlcmVkLiBUaHJlZSBzaWduYWxzIGNhcnJ5IG5vIGNvZGUgb2YgdGhlaXIgb3duIOKAlCBhXG4gKiBgTG9nR2FwYCAoYCdsb2ctZ2FwJ2ApLCBgQ2F1c2FsTm9kZS5pbmNvbXBsZXRlU291cmNlc2AgKGAnaW5jb21wbGV0ZS1zb3VyY2VzJ2ApIGFuZFxuICogYEZvbGRlZFN0YXRlLnJlZGFjdGVkYCAvIGByZWRhY3RlZFBhdGhzYCAoYCdyZWRhY3RlZCdgKSDigJQgYW5kIGEgYHRydW5jYXRlZDogeyBieURlcHRoLCBieU5vZGVzIH1gXG4gKiBmaWVsZCBtZWFucyBgJ3RydW5jYXRlZCdgOyB0aGV5IGFyZSByZWdpc3RlcmVkIHNvIGEgcmVhZGVyIGV4cGxhaW5zIHRoZW0gZnJvbSB0aGUgc2FtZSBwbGFjZS5cbiAqXG4gKiBOT1QgSEVSRTogdGhlIHR3byBzdHJpbmdzIGEgcmVkYWN0aW9uIGxlYXZlcyB3aGVyZSBhIHZhbHVlIHdhcy4gVGhlIGVuZ2luZSB3cml0ZXMgdGhvc2Ugb24gZXZlcnlcbiAqIHJlZGFjdGVkIHJ1bjsgdGhlIGxvZydzIGxpdmVzIGluIGl0cyBvd24gbGVhZiwgYG1lbW9yeS9wbGFjZWhvbGRlcnMudHNgICh0aGUgc2NvcGUgY2hhbm5lbCdzIHdpdGhcbiAqIHRoZSB2ZXJkaWN0LCBgbWVtb3J5L3JlZGFjdGlvbi50c2ApLCBzbyB0aGF0IGFuIGFwcCB3aGljaCBvbmx5IHJ1bnMgY2hhcnRzIGRvZXMgbm90IGNhcnJ5IHRoZXNlXG4gKiBzZW50ZW5jZXMgaW4gaXRzIGJ1bmRsZSAoYEhPTkVTVFlfQ09ERVNgIGlzIGEgcHVyZSBleHByZXNzaW9uLCBzbyBhIGJ1bmRsZXIgZHJvcHMgaXQgd2hlcmV2ZXJcbiAqIG5vdGhpbmcgcmVhZHMgaXQpLlxuICpcbiAqIFdIWSBMMC4gVGhpcyBmaWxlIGltcG9ydHMgTk9USElORywgYW5kIGBzbGljZS9gIGFuZCBgdGltZS10cmF2ZWwvYCAoTDMpIHR5cGUgdGhlaXIgY29kZXMgdGhyb3VnaFxuICogaXQsIHNvIGl0IHNpdHMgYmVsb3cgdGhlbSDigJQgdGhlIGxheWVyIHRhYmxlIGlzIGBzY3JpcHRzL2xheWVyaW5nLmNvbmZpZy5janNgLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBpbXBvcnQgeyBIT05FU1RZX0NPREVTIH0gZnJvbSAnZm9vdHByaW50anMvdHJhY2UnO1xuICpcbiAqIGZvciAoY29uc3QgeyBjb2RlIH0gb2YgZm9yd2FyZFNsaWNlLm5vdGVzKSBjb25zb2xlLmxvZyhjb2RlLCAn4oaSJywgSE9ORVNUWV9DT0RFU1tjb2RlXSk7XG4gKiAvLyByZWFkcy1ub3QtcmVjb3JkZWQg4oaSIFRoaXMgbG9nIGNhcnJpZXMgbm8gcmVjb3JkZWQgcmVhZCBhdCBhbGwgKHRoZSByZWFkVHJhY2tpbmc6ICdvZmYnIHNpZ25hdHVyZSksIOKAplxuICogSE9ORVNUWV9DT0RFU1tmb2xkZWRTdGF0ZS5iYXNpc107IC8vICdsb2ctb25seScg4oaSIE5vIGluaXRpYWxTdGF0ZSB0cmF2ZWxsZWQgd2l0aCB0aGlzIGxvZyAo4oCmKSwg4oCmXG4gKiBgYGBcbiAqL1xuXG4vKipcbiAqIEV2ZXJ5IGhvbmVzdHkgY29kZSB0aGUgdHJhY2UgcmVhZGVycyAoYGZvb3RwcmludGpzL3RyYWNlYCkgc3BlYWssIHdpdGggdGhlIG9uZSBzZW50ZW5jZSB0aGF0IHNheXNcbiAqIHdoYXQgaXQgbWVhbnMuXG4gKlxuICogRnJvemVuIGFuZCBjbG9zZWQ6IHRoZSBrZXlzIGFyZSBleGFjdGx5IHRoZSBjb2RlcyBiZWxvdywgYW5kIHtAbGluayBIb25lc3R5Q29kZX0gaXMgZGVyaXZlZCBmcm9tXG4gKiB0aGVtLiBBIG5ldyBjb2RlIGlzIG9uZSBuZXcgbGluZSBoZXJlOiBhIHVuaW9uIGRlY2xhcmVkIHRocm91Z2gge0BsaW5rIFJlZ2lzdGVyZWRDb2RlfSBjYW5ub3QgaG9sZFxuICogYSBjb2RlIHRoYXQgaXMgbm90IG9uIGl0LCBhbmQgYHRlc3QvYXJjaGl0ZWN0dXJlL2hvbmVzdHktdm9jYWJ1bGFyeS50ZXN0LnRzYCBmYWlscyBvbiBhbiBleHBvcnRlZFxuICogdHlwZSBhbGlhcyBvZiBgZm9vdHByaW50anMvdHJhY2VgIHRoYXQgaXMgYSB1bmlvbiBvZiBzdHJpbmcgbGl0ZXJhbHMgbmVpdGhlciBpbnNpZGUgdGhlIHJlZ2lzdHJ5XG4gKiBub3IgbmFtZWQgdGhlcmUgYXMgbm90IGFuIGhvbmVzdHkgdm9jYWJ1bGFyeS4gVGhlIHZhbHVlcyBhcmUgdHlwZWQgYHN0cmluZ2AsIG5vdCBsaXRlcmFsIHR5cGVzLFxuICogb24gcHVycG9zZTogdGhlIHNlbnRlbmNlcyBhcmUgZm9yIGEgc2NyZWVuIGFuZCBtYXkgYmUgcmV3b3JkZWQ7IGEgY29uc3VtZXIgYnJhbmNoZXMgb24gdGhlIEtFWS5cbiAqL1xuZXhwb3J0IGNvbnN0IEhPTkVTVFlfQ09ERVMgPSAvKiBAX19QVVJFX18gKi8gT2JqZWN0LmZyZWV6ZSh7XG4gIC8vIOKUgOKUgCBhIHNsaWNlJ3Mgbm90ZXMg4oCUIGBIb25lc3R5Tm90ZS5jb2RlYCAoc2xpY2UvKSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbiAgJ2NvbnNlcnZhdGl2ZS1mZWQtZWRnZXMnOlxuICAgIFwiQXQgbGVhc3Qgb25lICdmZWQnIGVkZ2UgaXMgc3RhZ2UtbGV2ZWwgKGNvbnNlcnZhdGl2ZSk6IGl0cyB3cml0ZSBjYXJyaWVzIG5vIHBlci13cml0ZSByZWFkIHByb3ZlbmFuY2UsIHNvIHRoZSBlZGdlIG1heSBub3QgYmUgcmVhbCDigJQgdHVybiBvbiB3cml0ZVByb3ZlbmFuY2U6ICdyZWFkcy1wcmVmaXgnIGZvciBleGFjdCBlZGdlcy5cIixcbiAgJ25lc3RlZC1yb3dzJzpcbiAgICBcIkEgd3JpdGUgdGhpcyBhbnN3ZXIgcmVzdHMgb24gcmVhY2hlZCB0aGUga2V5IG9ubHkgdGhyb3VnaCBwYXRocyBpbnNpZGUgaXQgKGEgc3ViZmxvdydzIGlucHV0IHNlZWQsIGFuIG91dHB1dE1hcHBlciBtZXJnZS1iYWNrLCBhIGZvcmsgY2hpbGQncyBuYW1lc3BhY2UpLCBzbyBpdCBjaGFuZ2VkIHBhcnQgb2YgdGhlIGtleSdzIHZhbHVlLCBub3QgdGhlIHdob2xlOiBlYXJsaWVyIHdyaXRlcyBtYXkgYWNjb3VudCBmb3IgdGhlIHJlc3QsIGFuZCBhIHJlYWRlciBvZiB0aGUga2V5IG1heSBub3QgaGF2ZSByZWFkIHRoZSBwYXJ0IHRoYXQgd3JpdGUgY2hhbmdlZC5cIixcbiAgJ3ByZS1ydW4tb3JpZ2luJzpcbiAgICAnVGhlIHZhbHVlIGJlaW5nIGZvbGxvd2VkIHdhcyBhYnNlbnQgb3IgYWxyZWFkeSB0aGVyZSBiZWZvcmUgdGhlIGZpcnN0IHdyaXRlIHRoaXMgbG9nIGNhbiBzZWUgKGluaXRpYWwgc3RhdGUsIGZyb3plbiBydW4gaW5wdXQgb3IgYSBjbG9zdXJlKSwgc28gd2hvIHB1dCBpdCB0aGVyZSBpcyBvdXRzaWRlIHRoZSBjb21taXQgbG9nLicsXG4gICdyZWFkcy1ub3QtcmVjb3JkZWQnOlxuICAgIFwiVGhpcyBsb2cgY2FycmllcyBubyByZWNvcmRlZCByZWFkIGF0IGFsbCAodGhlIHJlYWRUcmFja2luZzogJ29mZicgc2lnbmF0dXJlKSwgc28gJ25vdGhpbmcgcmVhZCB0aGlzIHZhbHVlJyBpcyB1bmtub3dhYmxlIGhlcmUsIG5vdCB0cnVlLlwiLFxuICAndW5rbm93bi1rZXknOlxuICAgIFwiVGhpcyBsb2cgaGFzIG5vIHdyaXRlIGFuZCBubyByZWNvcmRlZCByZWFkIG9mIHRoZSBrZXksIHdoaWNoIGlzIG1vc3QgbGlrZWx5IGEgdHlwbyBvciB0aGUgd3JvbmcgcnVuJ3MgbG9nIHJhdGhlciB0aGFuIGEgdmFyaWFibGUgd2l0aCBubyBoaXN0b3J5LlwiLFxuICB0cnVuY2F0ZWQ6XG4gICAgJ0EgYnVkZ2V0IChtYXhEZXB0aCBvciBtYXhOb2RlcykgY3V0IHRoZSB3YWxrLCBzbyBtb3JlIG9mIHRoZSBhbnN3ZXIgZXhpc3RzIGJleW9uZCB0aGUgaG9yaXpvbiBpdCBzdG9wcGVkIGF0LicsXG4gIC8vIOKUgOKUgCB3aHkgYSBzbGljZSBoYXMgbm8gYW5zd2VyIOKAlCBgbWlzc2luZ2AgKHNsaWNlLzogTWlzc2luZ1NsaWNlUmVhc29uLCBNaXNzaW5nUHJvdmVuYW5jZVJlYXNvbikg4pSAXG4gICdlbXB0eS1sb2cnOlxuICAgICdUaGUgY29tbWl0IGxvZyBob2xkcyBubyBjb21taXQgYXQgYWxsIChub3RoaW5nIGhhcyBleGVjdXRlZCwgb3IgdGhlIGxvZyBoYW5kZWQgaW4gaXMgZW1wdHkpLCBzbyB0aGVyZSBpcyBubyBoaXN0b3J5IHRvIGFuc3dlciBmcm9tLicsXG4gICduZXZlci13cml0dGVuJzpcbiAgICAnTm8gY29tbWl0IGluIHRoZSByYW5nZSBhc2tlZCBhYm91dCB3cm90ZSB0aGUga2V5IOKAlCBub3QgaXRzIHdob2xlIHZhbHVlLCBub3QgYSBwYXRoIGluc2lkZSBpdCwgYW5kIG5vdCBhIGNvbnRhaW5lciBhcm91bmQgaXQgaW4gYSB3YXkgdGhhdCBjaGFuZ2VkIGl0IChhIGZvcndhcmQgc2xpY2Ugb3IgYSB0aW1lbGluZSBhbHNvIGZvdW5kIG5vIHJlY29yZGVkIHJlYWQgb24sIGluc2lkZSBvciBhcm91bmQgaXQpIOKAlCBzbyB0aGVyZSBpcyBubyB3cml0ZSB0byBzdGFydCBmcm9tOiBhbnkgdmFsdWUgaXQgaGFzIGNhbWUgZnJvbSB0aGUgaW5pdGlhbCBzdGF0ZSwgdGhlIGZyb3plbiBydW4gaW5wdXQgb3IgYSBjbG9zdXJlLCBub25lIG9mIHdoaWNoIHRoZSBjb21taXQgbG9nIGNhbiBzZWUuJyxcbiAgJ25vdC1hbi1hcnJheSc6XG4gICAgJ1RoZSBrZXkgd2FzIHdyaXR0ZW4sIGJ1dCBpdHMgdmFsdWUgYXQgdGhlIHBvaW50IGFza2VkIGFib3V0IGlzIG5vdCBhbiBhcnJheSAoYSBzY2FsYXIgb3Igb2JqZWN0IGtleSwgYSBkZWxldGVkIGtleSwgb3IgYSBtZXJnZSB0aGF0IGRlZ3JhZGVkIGl0KSwgc28gZWxlbWVudCBwcm92ZW5hbmNlIGRvZXMgbm90IGFwcGx5OiBzbGljZUZvcktleSBpcyB0aGUgcXVlcnkgZm9yIGl0LicsXG4gIC8vIOKUgOKUgCBob3cgYSBmZWQgZWRnZSB3YXMgYXR0cmlidXRlZCDigJQgYEZvcndhcmRFZGdlLmJhc2lzYCAoc2xpY2UvOiBGZWRCYXNpcykg4pSAXG4gICdwZXItd3JpdGUnOlxuICAgIFwiVGhpcyBmZWQgZWRnZSBpcyBleGFjdDogdGhlIGRvd25zdHJlYW0gd3JpdGUgY2FycmllcyBwZXItd3JpdGUgcmVhZCBwcm92ZW5hbmNlIChUcmFjZUVudHJ5LnJlYWRLZXlzLCByZWNvcmRlZCB1bmRlciB3cml0ZVByb3ZlbmFuY2U6ICdyZWFkcy1wcmVmaXgnKSBhbmQgdGhhdCBsaXN0IG5hbWVzIHRoZSBrZXksIHNvIHRoZSB2YWx1ZSB3YXMgcmVhZCBiZWZvcmUgdGhlIHdyaXRlIGl0IGZlZWRzLlwiLFxuICBzdGFnZTpcbiAgICAnVGhpcyBmZWQgZWRnZSBpcyBjb25zZXJ2YXRpdmU6IHRoZSBkb3duc3RyZWFtIHdyaXRlIGNhcnJpZXMgbm8gcGVyLXdyaXRlIHJlYWQgcHJvdmVuYW5jZSAodGhlIHdyaXRlUHJvdmVuYW5jZSBkaWFsIHdhcyBvZmYsIG9yIHRoZSBsb2cgaXMgbWl4ZWQpLCBzbyBhbGwgdGhhdCBpcyBrbm93biBpcyB0aGF0IGl0cyBzdGFnZSByZWFkIHRoaXMga2V5IGFuZCB3cm90ZSB0aGF0IHBhdGggaW4gc29tZSBvcmRlciwgYW5kIHRoZSBlZGdlIG1heSBub3QgYmUgcmVhbC4nLFxuICAvLyDilIDilIAgaG93IGFuIGVsZW1lbnQncyBiaXJ0aCB3YXMgYXR0cmlidXRlZCDigJQgYEVsZW1lbnRCaXJ0aC5iYXNpc2AgKHNsaWNlLzogQXR0cmlidXRpb25CYXNpcykg4pSAXG4gICdhcHBlbmQtdmVyYic6XG4gICAgXCJUaGUgZW5naW5lIHJlY29yZGVkIHRoZSBlbGVtZW50IGluIGFuIGFwcGVuZCByb3cncyB0YWlsIChob3cgY29tbWl0VmFsdWVzOiAnZGVsdGEnIHJlY29yZHMgYW4gYXJyYXkncyBncm93dGgpLCBzbyB0aGUgY29tbWl0IHRoYXQgYWRkZWQgaXQgaXMga25vd24gZXhhY3RseSwgbm90IGluZmVycmVkLlwiLFxuICAncHJlZml4LWluZmVyZW5jZSc6XG4gICAgJ0Egd2hvbGUtdmFsdWUgd3JpdGUgKGEgc2V0IG9yIGEgbWVyZ2UpIGtlcHQgdGhlIHByZXZpb3VzIGFycmF5IGFzIGl0cyBwcmVmaXgsIHNvIHRoZSBuZXcgdGFpbCBpcyBhdHRyaWJ1dGVkIHRvIHRoYXQgY29tbWl0IGJ5IGluZmVyZW5jZTogYSB3cml0ZSB0aGF0IHJlcGxhY2VkIHRoZSBhcnJheSB3aXRoIG9uZSB0aGF0IGhhcHBlbnMgdG8gYmVnaW4gdGhlIHNhbWUgd2F5IGxvb2tzIGlkZW50aWNhbC4nLFxuICAnd2hvbGUtdmFsdWUnOlxuICAgIFwiVGhpcyBjb21taXQgcGxhY2VkIHRoZSBhcnJheSB3aG9sZXNhbGUgKHRoZXJlIHdhcyBubyBlYXJsaWVyIGFycmF5LCBvciB0aGUgbmV3IG9uZSBkb2VzIG5vdCBiZWdpbiB3aXRoIGl0KSwgc28gZXZlcnkgZWxlbWVudCdzIGJpcnRoIHJlc2V0cyB0byB0aGlzIGNvbW1pdDogZXhhY3QsIGJ1dCBjb2Fyc2UuXCIsXG4gIC8vIOKUgOKUgCBob3cgYSBmb2xkIHdhcyBkZXJpdmVkIOKAlCBgRm9sZGVkU3RhdGUuYmFzaXNgICh0aW1lLXRyYXZlbC8pIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuICAnaW5pdGlhbCtsb2cnOlxuICAgICdUaGUgZm9sZCBzdGFydGVkIGZyb20gdGhlIGZvbGQgYmFzZSB0aGF0IHRyYXZlbGxlZCB3aXRoIHRoZSBsb2cgKGluaXRpYWxTdGF0ZSkgYW5kIHJlcGxheWVkIHRoZSBjb21taXQgbG9nIG9udG8gaXQsIHNvIG5vdGhpbmcgc2VlZGVkIGJlZm9yZSB0aGUgcnVuIGlzIG1pc3Npbmc7IHJvd3MgaXQgY291bGQgbm90IHJlYWQgYXJlIGxpc3RlZCBhcGFydCwgaW4gc2tpcHBlZC4nLFxuICAnbG9nLW9ubHknOlxuICAgICdObyBpbml0aWFsU3RhdGUgdHJhdmVsbGVkIHdpdGggdGhpcyBsb2cgKGEgc25hcHNob3Qgc3RvcmVkIGJlZm9yZSA5LjE3LCBhIHJlZGFjdGVkIHNuYXBzaG90IG9yIGEgaGFuZC1idWlsdCBsb2cpLCBzbyB0aGUgZm9sZCBzdGFydGVkIGZyb20gYW4gZW1wdHkgb2JqZWN0OiBhIGtleSBzZWVkZWQgYmVmb3JlIHRoZSBydW4gaXMgd2hvbGUgb25seSBvbmNlIGEgY29tbWl0IHNpbmNlIHdyb3RlIGl0cyB3aG9sZSB2YWx1ZSwgYW5kIHVudGlsIHRoZW4gaXQgaG9sZHMganVzdCB3aGF0IGl0cyBtZXJnZXMsIGFwcGVuZHMgYW5kIG5lc3RlZCB3cml0ZXMgYWRkZWQsIG9yIG5vdGhpbmcuJyxcbiAgLy8g4pSA4pSAIGEgcm93IG9mIGEgc3RvcmVkIGxvZyB0aGF0IGlzIG5vdCBhIGNvbW1pdCBidW5kbGUg4oCUIGBMb2dHYXBgIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuICAnbG9nLWdhcCc6XG4gICAgJ0Egcm93IG9mIHRoZSBzdG9yZWQgbG9nIGNvdWxkIG5vdCBiZSByZWFkIGFzIGEgY29tbWl0IGJ1bmRsZSwgc28gaXQga2VlcHMgaXRzIGluZGV4IGJ1dCBjb250cmlidXRlcyBubyBzdGF0ZSwgYW5kIGFueSBmb2xkIHRoYXQgY3Jvc3NlcyBpdCBpcyBtaXNzaW5nIHdoYXRldmVyIHRoYXQgcm93IHdyb3RlLicsXG4gIC8vIOKUgOKUgCB1bnRyYWNrZWQgcmVhZHMgYSBzdGFnZSBhbHNvIGNvbnN1bWVkIOKAlCBgQ2F1c2FsTm9kZS5pbmNvbXBsZXRlU291cmNlc2Ag4pSAXG4gICdpbmNvbXBsZXRlLXNvdXJjZXMnOlxuICAgICdUaGUgc3RhZ2UgYWxzbyBjb25zdW1lZCByZWFkIHBhdGhzIHRoYXQgYnlwYXNzIHJlYWQgdHJhY2tpbmcgKGFyZ3MsIGVudiBvciBhbiB1bnNoYWRvd2VkIHNpbGVudCByZWFkKSwgc28gYSBzbGljZSB0aHJvdWdoIGl0IG1heSBiZSBpbmNvbXBsZXRlOiB0aG9zZSByZWFkcyBwcm9kdWNlIG5vIHJlYWQtdG8td3JpdGUgZWRnZSB0byBmb2xsb3cuJyxcbiAgLy8g4pSA4pSAIHZhbHVlcyBzY3J1YmJlZCBhdCB3cml0ZSB0aW1lIOKAlCBgRm9sZGVkU3RhdGUucmVkYWN0ZWRgIC8gYHJlZGFjdGVkUGF0aHNgLCBhIHZhbHVlIGJhc2lzIOKUgFxuICByZWRhY3RlZDpcbiAgICBcIlZhbHVlcyBhdCB0aGUgcGF0aHMgbGlzdGVkIGluIHJlZGFjdGVkUGF0aHMgKGEgZm9sZCdzLCBvciBhIGNvbW1pdCdzIGluIHRoZSByYW5nZSBhIGtleSdzIHZhbHVlIHJlc3RzIG9uKSB3ZXJlIHNjcnViYmVkIHdoZW4gdGhleSB3ZXJlIHdyaXR0ZW4gKGJ5IGEgcmVkYWN0aW9uIHBvbGljeSwgb3IgYSB3cml0ZSBtYXJrZWQgcmVkYWN0ZWQpLCBzbyB3aGVyZSB0aGUgYW5zd2VyIGhvbGRzIHRoZSBsb2cncyBwbGFjZWhvbGRlciAnUkVEQUNURUQnLCBvciBsb3N0IGEga2V5IHVuZGVyIGEgY29udGFpbmVyIHRoZSBwbGFjZWhvbGRlciByZXBsYWNlZCwgaXQgc3RhbmRzIGluIGZvciBhIHZhbHVlIHRoZSBsb2cgbmV2ZXIgcmVjb3JkZWQuXCIsXG4gIC8vIOKUgOKUgCBob3cgb25lIGtleSdzIHZhbHVlIHdhcyByZWFkIG9mZiB0aGUgbG9nIOKAlCBgVmFsdWVCYXNpc2AgKGNvbW1pdFZhbHVlQXRXaXRoQmFzaXMpIOKUgFxuICBkZWxldGVkOlxuICAgIFwiVGhlIGtleSdzIGxhc3Qgd3JpdGUgaW4gdGhlIHJhbmdlIGFza2VkIGFib3V0IGxlZnQgaXQgYWJzZW50IChhIGRlbGV0ZSBvZiB0aGUga2V5IG9yIG9mIGEgY29udGFpbmVyIGFyb3VuZCBpdCwgb3IgYSBzZXQgb2YgYSBjb250YWluZXIgdGhhdCBubyBsb25nZXIgaG9sZHMgaXQpLCBzbyB0aGUgYW5zd2VyIGlzIHVuZGVmaW5lZCBiZWNhdXNlIHRoZSByZWNvcmQgc2F5cyB0aGUga2V5IHdhcyBnb25lIGF0IHRoYXQgcG9pbnQsIG5vdCBiZWNhdXNlIG5vdGhpbmcgd2FzIHJlY29yZGVkLlwiLFxuICAnZnJvbS1pbml0aWFsLXN0YXRlJzpcbiAgICBcIk5vIHNldCBvciBkZWxldGUgb2YgdGhlIGtleSwgb3Igb2YgYSBjb250YWluZXIgYXJvdW5kIGl0LCBpcyBpbiB0aGUgcmFuZ2UgYXNrZWQgYWJvdXQsIHNvIHRoZSBhbnN3ZXIgcmVzdHMgb24gdGhlIHZhbHVlIHRoZSBrZXkgaGFkIGJlZm9yZSB0aGUgcnVuOiBmb2xkZWQgZnJvbSB0aGUgaW5pdGlhbFN0YXRlIHBhc3NlZCBpbiB3aGVuIHRoZXJlIHdhcyBvbmUsIGFuZCBvdGhlcndpc2Ugb25seSB3aGF0IHRoZSBsb2cncyBtZXJnZXMsIGFwcGVuZHMgYW5kIG5lc3RlZCB3cml0ZXMgYWRkZWQgdG8gaXQgKG9yIG5vdGhpbmcpLCB3aGljaCBpcyBwYXJ0aWFsIGZvciBhIGtleSBzZWVkZWQgYmVmb3JlIHRoZSBydW4uXCIsXG59IHNhdGlzZmllcyBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+KTtcblxuLyoqIEFueSBjb2RlIGluIHtAbGluayBIT05FU1RZX0NPREVTfSDigJQgdGhlIGtleSBhIHJlYWRlciBsb29rcyBhbiBleHBsYW5hdGlvbiB1cCBieS4gKi9cbmV4cG9ydCB0eXBlIEhvbmVzdHlDb2RlID0ga2V5b2YgdHlwZW9mIEhPTkVTVFlfQ09ERVM7XG5cbi8qKlxuICogQSB1bmlvbiBvZiBob25lc3R5IGNvZGVzIGEgdHlwZSBERUNMQVJFUzogYFRgIG11c3QgYmUgYSBzdWJzZXQgb2Yge0BsaW5rIEhvbmVzdHlDb2RlfSwgb3IgdGhlXG4gKiBkZWNsYXJhdGlvbiBmYWlscyB0byBjb21waWxlIChUUzIzNDQpLlxuICpcbiAqIGBSZWdpc3RlcmVkQ29kZTxUPmAgaXMgYFRgIOKAlCBhbiBpZGVudGl0eSBhdCB0aGUgdHlwZSBsZXZlbCDigJQgc28gdGhlIHVuaW9uIGtlZXBzIGV4YWN0bHkgdGhlXG4gKiBtZW1iZXJzIGl0IHdhcyB3cml0dGVuIHdpdGggYW5kIGRvZXMgTk9UIHdpZGVuIHRvIGV2ZXJ5IGNvZGU6XG4gKiBgdHlwZSBGb2xkQmFzaXMgPSBSZWdpc3RlcmVkQ29kZTwnaW5pdGlhbCtsb2cnIHwgJ2xvZy1vbmx5Jz5gLlxuICovXG5leHBvcnQgdHlwZSBSZWdpc3RlcmVkQ29kZTxUIGV4dGVuZHMgSG9uZXN0eUNvZGU+ID0gVDtcbiJdfQ==
@@ -10,12 +10,14 @@ export { SharedMemory } from './SharedMemory.js';
10
10
  export { StageContext } from './StageContext.js';
11
11
  export { TransactionBuffer } from './TransactionBuffer.js';
12
12
  export type { RedactionVerdict } from './redaction.js';
13
- export { RedactionRule, redactPatch } from './redaction.js';
13
+ export { RedactionRule } from './redaction.js';
14
+ export { redactPatch } from './scrub.js';
14
15
  export type { RunDials, RunPolicy } from './runPolicy.js';
15
16
  export { DEFAULT_RUN_POLICY, runPolicy } from './runPolicy.js';
16
17
  export type { HonestyCode } from './honesty.js';
17
18
  export { HONESTY_CODES } from './honesty.js';
18
- export { LOG_PLACEHOLDER, SCOPE_PLACEHOLDER } from './placeholders.js';
19
+ export { LOG_PLACEHOLDER } from './placeholders.js';
20
+ export { SCOPE_PLACEHOLDER } from './redaction.js';
19
21
  export type { CommitBundle, CommitValuesMode, FlowControlType, FlowMessage, MemoryPatch, ReadSummaryMarker, ReadTrackingMode, RetentionPolicy, ScopeFactory, StageSnapshot, TraceEntry, UntrackedSource, WriteSummaryMarker, WriteTrackingMode, } from './types.js';
20
22
  export { READ_PREVIEW_LENGTH, SUMMARY_PREVIEW_LENGTH } from './types.js';
21
23
  export { UnknownVerbError } from './verbs.js';
@@ -11,14 +11,16 @@ export { EventLog } from './EventLog.js';
11
11
  export { SharedMemory } from './SharedMemory.js';
12
12
  export { StageContext } from './StageContext.js';
13
13
  export { TransactionBuffer } from './TransactionBuffer.js';
14
- export { RedactionRule, redactPatch } from './redaction.js';
14
+ export { RedactionRule } from './redaction.js';
15
+ export { redactPatch } from './scrub.js';
15
16
  export { DEFAULT_RUN_POLICY, runPolicy } from './runPolicy.js';
16
17
  export { HONESTY_CODES } from './honesty.js';
17
- // The two strings a redaction leaves where a value was (F4a; `REDACTED` is now `SCOPE_PLACEHOLDER`)
18
- export { LOG_PLACEHOLDER, SCOPE_PLACEHOLDER } from './placeholders.js';
18
+ // The two strings a redaction leaves where a value was, one per owner (F4a; split in C4): the record's, the verdict's
19
+ export { LOG_PLACEHOLDER } from './placeholders.js';
20
+ export { SCOPE_PLACEHOLDER } from './redaction.js';
19
21
  export { READ_PREVIEW_LENGTH, SUMMARY_PREVIEW_LENGTH } from './types.js';
20
22
  // The verb law's refusal: a commit row whose verb is not set | merge | append | delete
21
23
  export { UnknownVerbError } from './verbs.js';
22
24
  // Utilities
23
25
  export { applySmartMerge, deepSmartMerge, DELIM, getNestedValue, getRunAndGlobalPaths, normalisePath, pathSegments, setNestedValue, updateNestedValue, updateValue, } from './utils.js';
24
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL21lbW9yeS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwwQkFBMEI7QUFDMUI7Ozs7O0dBS0c7QUFFSCxVQUFVO0FBQ1YsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDL0QsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDakQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBSTNELE9BQU8sRUFBRSxhQUFhLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFJNUQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBSS9ELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFFN0Msb0dBQW9HO0FBQ3BHLE9BQU8sRUFBRSxlQUFlLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQW1CdkUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLHNCQUFzQixFQUFFLE1BQU0sWUFBWSxDQUFDO0FBRXpFLHVGQUF1RjtBQUN2RixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFFOUMsWUFBWTtBQUNaLE9BQU8sRUFDTCxlQUFlLEVBQ2YsY0FBYyxFQUNkLEtBQUssRUFDTCxjQUFjLEVBQ2Qsb0JBQW9CLEVBQ3BCLGFBQWEsRUFDYixZQUFZLEVBQ1osY0FBYyxFQUNkLGlCQUFpQixFQUNqQixXQUFXLEdBQ1osTUFBTSxZQUFZLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBpc3RhbmJ1bCBpZ25vcmUgZmlsZSAqL1xuLyoqXG4gKiBtZW1vcnkvIOKAlCBGb3VuZGF0aW9uIGxpYnJhcnkgKHplcm8gZXh0ZXJuYWwgZGVwcylcbiAqXG4gKiBUcmFuc2FjdGlvbmFsIHN0YXRlIG1hbmFnZW1lbnQgd2l0aCBuYW1lc3BhY2UgaXNvbGF0aW9uLFxuICogYXRvbWljIGNvbW1pdHMsIGFuZCBldmVudC1zb3VyY2VkIHRpbWUtdHJhdmVsLlxuICovXG5cbi8vIENsYXNzZXNcbmV4cG9ydCB7IERpYWdub3N0aWNDb2xsZWN0b3IgfSBmcm9tICcuL0RpYWdub3N0aWNDb2xsZWN0b3IuanMnO1xuZXhwb3J0IHsgRXZlbnRMb2cgfSBmcm9tICcuL0V2ZW50TG9nLmpzJztcbmV4cG9ydCB7IFNoYXJlZE1lbW9yeSB9IGZyb20gJy4vU2hhcmVkTWVtb3J5LmpzJztcbmV4cG9ydCB7IFN0YWdlQ29udGV4dCB9IGZyb20gJy4vU3RhZ2VDb250ZXh0LmpzJztcbmV4cG9ydCB7IFRyYW5zYWN0aW9uQnVmZmVyIH0gZnJvbSAnLi9UcmFuc2FjdGlvbkJ1ZmZlci5qcyc7XG5cbi8vIFJlZGFjdGlvbiDigJQgdGhlIE9ORSBvd25lciBvZiB0aGUgdmVyZGljdCAoOS4xOS4wKVxuZXhwb3J0IHR5cGUgeyBSZWRhY3Rpb25WZXJkaWN0IH0gZnJvbSAnLi9yZWRhY3Rpb24uanMnO1xuZXhwb3J0IHsgUmVkYWN0aW9uUnVsZSwgcmVkYWN0UGF0Y2ggfSBmcm9tICcuL3JlZGFjdGlvbi5qcyc7XG5cbi8vIFRoZSBydW4ncyBwb2xpY3kg4oCUIHRoZSBmb3VyIGRpYWxzLCB0aGUgcnVsZSwgdGhlIG1pcnJvciBmbGFnIGFzIE9ORSBvYmplY3QgKEY1KVxuZXhwb3J0IHR5cGUgeyBSdW5EaWFscywgUnVuUG9saWN5IH0gZnJvbSAnLi9ydW5Qb2xpY3kuanMnO1xuZXhwb3J0IHsgREVGQVVMVF9SVU5fUE9MSUNZLCBydW5Qb2xpY3kgfSBmcm9tICcuL3J1blBvbGljeS5qcyc7XG5cbi8vIEhvbmVzdHkg4oCUIHRoZSBPTkUgdm9jYWJ1bGFyeSBmb3Igd2hhdCBhIHJlYWRlciBjYW5ub3Qgc2VlIChGNGEpOiBjb2RlIOKGkiB0aGUgb25lIHNlbnRlbmNlXG5leHBvcnQgdHlwZSB7IEhvbmVzdHlDb2RlIH0gZnJvbSAnLi9ob25lc3R5LmpzJztcbmV4cG9ydCB7IEhPTkVTVFlfQ09ERVMgfSBmcm9tICcuL2hvbmVzdHkuanMnO1xuXG4vLyBUaGUgdHdvIHN0cmluZ3MgYSByZWRhY3Rpb24gbGVhdmVzIHdoZXJlIGEgdmFsdWUgd2FzIChGNGE7IGBSRURBQ1RFRGAgaXMgbm93IGBTQ09QRV9QTEFDRUhPTERFUmApXG5leHBvcnQgeyBMT0dfUExBQ0VIT0xERVIsIFNDT1BFX1BMQUNFSE9MREVSIH0gZnJvbSAnLi9wbGFjZWhvbGRlcnMuanMnO1xuXG4vLyBUeXBlc1xuZXhwb3J0IHR5cGUge1xuICBDb21taXRCdW5kbGUsXG4gIENvbW1pdFZhbHVlc01vZGUsXG4gIEZsb3dDb250cm9sVHlwZSxcbiAgRmxvd01lc3NhZ2UsXG4gIE1lbW9yeVBhdGNoLFxuICBSZWFkU3VtbWFyeU1hcmtlcixcbiAgUmVhZFRyYWNraW5nTW9kZSxcbiAgUmV0ZW50aW9uUG9saWN5LFxuICBTY29wZUZhY3RvcnksXG4gIFN0YWdlU25hcHNob3QsXG4gIFRyYWNlRW50cnksXG4gIFVudHJhY2tlZFNvdXJjZSxcbiAgV3JpdGVTdW1tYXJ5TWFya2VyLFxuICBXcml0ZVRyYWNraW5nTW9kZSxcbn0gZnJvbSAnLi90eXBlcy5qcyc7XG5leHBvcnQgeyBSRUFEX1BSRVZJRVdfTEVOR1RILCBTVU1NQVJZX1BSRVZJRVdfTEVOR1RIIH0gZnJvbSAnLi90eXBlcy5qcyc7XG5cbi8vIFRoZSB2ZXJiIGxhdydzIHJlZnVzYWw6IGEgY29tbWl0IHJvdyB3aG9zZSB2ZXJiIGlzIG5vdCBzZXQgfCBtZXJnZSB8IGFwcGVuZCB8IGRlbGV0ZVxuZXhwb3J0IHsgVW5rbm93blZlcmJFcnJvciB9IGZyb20gJy4vdmVyYnMuanMnO1xuXG4vLyBVdGlsaXRpZXNcbmV4cG9ydCB7XG4gIGFwcGx5U21hcnRNZXJnZSxcbiAgZGVlcFNtYXJ0TWVyZ2UsXG4gIERFTElNLFxuICBnZXROZXN0ZWRWYWx1ZSxcbiAgZ2V0UnVuQW5kR2xvYmFsUGF0aHMsXG4gIG5vcm1hbGlzZVBhdGgsXG4gIHBhdGhTZWdtZW50cyxcbiAgc2V0TmVzdGVkVmFsdWUsXG4gIHVwZGF0ZU5lc3RlZFZhbHVlLFxuICB1cGRhdGVWYWx1ZSxcbn0gZnJvbSAnLi91dGlscy5qcyc7XG4iXX0=
26
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL21lbW9yeS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwwQkFBMEI7QUFDMUI7Ozs7O0dBS0c7QUFFSCxVQUFVO0FBQ1YsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDL0QsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDakQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBSTNELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMvQyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBSXpDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUkvRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBRTdDLHNIQUFzSDtBQUN0SCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDcEQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFtQm5ELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxzQkFBc0IsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUV6RSx1RkFBdUY7QUFDdkYsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sWUFBWSxDQUFDO0FBRTlDLFlBQVk7QUFDWixPQUFPLEVBQ0wsZUFBZSxFQUNmLGNBQWMsRUFDZCxLQUFLLEVBQ0wsY0FBYyxFQUNkLG9CQUFvQixFQUNwQixhQUFhLEVBQ2IsWUFBWSxFQUNaLGNBQWMsRUFDZCxpQkFBaUIsRUFDakIsV0FBVyxHQUNaLE1BQU0sWUFBWSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyogaXN0YW5idWwgaWdub3JlIGZpbGUgKi9cbi8qKlxuICogbWVtb3J5LyDigJQgRm91bmRhdGlvbiBsaWJyYXJ5ICh6ZXJvIGV4dGVybmFsIGRlcHMpXG4gKlxuICogVHJhbnNhY3Rpb25hbCBzdGF0ZSBtYW5hZ2VtZW50IHdpdGggbmFtZXNwYWNlIGlzb2xhdGlvbixcbiAqIGF0b21pYyBjb21taXRzLCBhbmQgZXZlbnQtc291cmNlZCB0aW1lLXRyYXZlbC5cbiAqL1xuXG4vLyBDbGFzc2VzXG5leHBvcnQgeyBEaWFnbm9zdGljQ29sbGVjdG9yIH0gZnJvbSAnLi9EaWFnbm9zdGljQ29sbGVjdG9yLmpzJztcbmV4cG9ydCB7IEV2ZW50TG9nIH0gZnJvbSAnLi9FdmVudExvZy5qcyc7XG5leHBvcnQgeyBTaGFyZWRNZW1vcnkgfSBmcm9tICcuL1NoYXJlZE1lbW9yeS5qcyc7XG5leHBvcnQgeyBTdGFnZUNvbnRleHQgfSBmcm9tICcuL1N0YWdlQ29udGV4dC5qcyc7XG5leHBvcnQgeyBUcmFuc2FjdGlvbkJ1ZmZlciB9IGZyb20gJy4vVHJhbnNhY3Rpb25CdWZmZXIuanMnO1xuXG4vLyBSZWRhY3Rpb24g4oCUIHRoZSBPTkUgb3duZXIgb2YgdGhlIHZlcmRpY3QgKDkuMTkuMCk7IHRoZSBsb2cncyBzY3J1YiBpcyB0aGUgcmVjb3JkJ3MgKHNjcnViLnRzLCBDNClcbmV4cG9ydCB0eXBlIHsgUmVkYWN0aW9uVmVyZGljdCB9IGZyb20gJy4vcmVkYWN0aW9uLmpzJztcbmV4cG9ydCB7IFJlZGFjdGlvblJ1bGUgfSBmcm9tICcuL3JlZGFjdGlvbi5qcyc7XG5leHBvcnQgeyByZWRhY3RQYXRjaCB9IGZyb20gJy4vc2NydWIuanMnO1xuXG4vLyBUaGUgcnVuJ3MgcG9saWN5IOKAlCB0aGUgZm91ciBkaWFscywgdGhlIHJ1bGUsIHRoZSBtaXJyb3IgZmxhZyBhcyBPTkUgb2JqZWN0IChGNSlcbmV4cG9ydCB0eXBlIHsgUnVuRGlhbHMsIFJ1blBvbGljeSB9IGZyb20gJy4vcnVuUG9saWN5LmpzJztcbmV4cG9ydCB7IERFRkFVTFRfUlVOX1BPTElDWSwgcnVuUG9saWN5IH0gZnJvbSAnLi9ydW5Qb2xpY3kuanMnO1xuXG4vLyBIb25lc3R5IOKAlCB0aGUgT05FIHZvY2FidWxhcnkgZm9yIHdoYXQgYSByZWFkZXIgY2Fubm90IHNlZSAoRjRhKTogY29kZSDihpIgdGhlIG9uZSBzZW50ZW5jZVxuZXhwb3J0IHR5cGUgeyBIb25lc3R5Q29kZSB9IGZyb20gJy4vaG9uZXN0eS5qcyc7XG5leHBvcnQgeyBIT05FU1RZX0NPREVTIH0gZnJvbSAnLi9ob25lc3R5LmpzJztcblxuLy8gVGhlIHR3byBzdHJpbmdzIGEgcmVkYWN0aW9uIGxlYXZlcyB3aGVyZSBhIHZhbHVlIHdhcywgb25lIHBlciBvd25lciAoRjRhOyBzcGxpdCBpbiBDNCk6IHRoZSByZWNvcmQncywgdGhlIHZlcmRpY3Qnc1xuZXhwb3J0IHsgTE9HX1BMQUNFSE9MREVSIH0gZnJvbSAnLi9wbGFjZWhvbGRlcnMuanMnO1xuZXhwb3J0IHsgU0NPUEVfUExBQ0VIT0xERVIgfSBmcm9tICcuL3JlZGFjdGlvbi5qcyc7XG5cbi8vIFR5cGVzXG5leHBvcnQgdHlwZSB7XG4gIENvbW1pdEJ1bmRsZSxcbiAgQ29tbWl0VmFsdWVzTW9kZSxcbiAgRmxvd0NvbnRyb2xUeXBlLFxuICBGbG93TWVzc2FnZSxcbiAgTWVtb3J5UGF0Y2gsXG4gIFJlYWRTdW1tYXJ5TWFya2VyLFxuICBSZWFkVHJhY2tpbmdNb2RlLFxuICBSZXRlbnRpb25Qb2xpY3ksXG4gIFNjb3BlRmFjdG9yeSxcbiAgU3RhZ2VTbmFwc2hvdCxcbiAgVHJhY2VFbnRyeSxcbiAgVW50cmFja2VkU291cmNlLFxuICBXcml0ZVN1bW1hcnlNYXJrZXIsXG4gIFdyaXRlVHJhY2tpbmdNb2RlLFxufSBmcm9tICcuL3R5cGVzLmpzJztcbmV4cG9ydCB7IFJFQURfUFJFVklFV19MRU5HVEgsIFNVTU1BUllfUFJFVklFV19MRU5HVEggfSBmcm9tICcuL3R5cGVzLmpzJztcblxuLy8gVGhlIHZlcmIgbGF3J3MgcmVmdXNhbDogYSBjb21taXQgcm93IHdob3NlIHZlcmIgaXMgbm90IHNldCB8IG1lcmdlIHwgYXBwZW5kIHwgZGVsZXRlXG5leHBvcnQgeyBVbmtub3duVmVyYkVycm9yIH0gZnJvbSAnLi92ZXJicy5qcyc7XG5cbi8vIFV0aWxpdGllc1xuZXhwb3J0IHtcbiAgYXBwbHlTbWFydE1lcmdlLFxuICBkZWVwU21hcnRNZXJnZSxcbiAgREVMSU0sXG4gIGdldE5lc3RlZFZhbHVlLFxuICBnZXRSdW5BbmRHbG9iYWxQYXRocyxcbiAgbm9ybWFsaXNlUGF0aCxcbiAgcGF0aFNlZ21lbnRzLFxuICBzZXROZXN0ZWRWYWx1ZSxcbiAgdXBkYXRlTmVzdGVkVmFsdWUsXG4gIHVwZGF0ZVZhbHVlLFxufSBmcm9tICcuL3V0aWxzLmpzJztcbiJdfQ==
@@ -1,44 +1,39 @@
1
1
  /**
2
- * placeholders.ts — the two strings a redaction leaves where a value was.
2
+ * placeholders.ts — the string a redaction leaves where a value was, in the RECORD.
3
3
  *
4
- * WHY THIS FILE EXISTS. Before F4a six files each spelled one of these strings as a literal, and a
5
- * spelling kept in six places is a placeholder a reader can no longer match on. Every `src/` file
6
- * that writes one now imports it from here, and `test/architecture/placeholders.test.ts` pins that
7
- * no other `src/` file spells either.
4
+ * WHY THIS FILE EXISTS. Before F4a six files each spelled a placeholder as a literal, and a spelling
5
+ * kept in six places is a placeholder a reader can no longer match on. Every `src/` file that writes
6
+ * the log's placeholder imports it from here, and `test/architecture/placeholders.test.ts` pins that
7
+ * no other `src/` file spells it.
8
8
  *
9
- * WHY TWO, AND WHY NOT UNIFIED. Both are historical and stored recordings hold the log one, so
10
- * neither string may change. Which one a reader sees depends on WHERE it reads: the commit log and
11
- * everything served from it say {@link LOG_PLACEHOLDER}; the scope channel says
12
- * {@link SCOPE_PLACEHOLDER} — except `onSubflowExit.outputState`, which carries the log's string
13
- * whenever a policy keeps a mirror (see {@link SCOPE_PLACEHOLDER}).
9
+ * ONE STRING HERE, ITS TWIN ON THE VERDICT'S SIDE (C4, review N2). A redaction leaves one of two
10
+ * strings, and both are historical, so neither may change (stored recordings hold this one). Which
11
+ * one a reader sees depends on WHERE it reads, and each has the owner its reader has:
12
+ * - {@link LOG_PLACEHOLDER} (`'REDACTED'`, here) is a RECORD byte: the commit log and everything
13
+ * served from it — written into the log by the record's scrub (`memory/scrub.ts`, L2), and
14
+ * passed by the two places that serve a mirror (`runner/ExecutionRuntime.ts`, the mirror's
15
+ * seed; `engine/handlers/SubflowExecutor.ts`, a subflow's served state). The readers
16
+ * (`slice/`, `time-travel/`) only name it in their docs: they meet it as data in the log;
17
+ * - `SCOPE_PLACEHOLDER` (`'[REDACTED]'`) is the ENGINE's: the scope channel's retained reads and
18
+ * writes, recorder events, the narrative. It lives beside the verdict that writes it
19
+ * (`memory/redaction.ts`, L4). Until C4 both sat in this file ("two placeholders, one leaf");
20
+ * the record took the engine's string with it.
14
21
  *
15
22
  * WHY A LEAF OF ITS OWN (and not beside `honesty.ts · HONESTY_CODES`). Different readers, different
16
- * reasons to change: these two strings are read by the engine's WRITE path on every redacted run,
17
- * the honesty registry by a reader that explains a recording — and the registry's sentences have no
18
- * business in the bundle of an app that only runs charts. This file imports NOTHING, so it is L0:
19
- * `memory/redaction.ts` (L2) writes both — the log one in `scrubPatch` (and the public `redactPatch`), the scope one in `RedactionRule`
20
- * (`redactPatch` lived in `memory/utils.ts`, L1, until 9.33.0) — the layer table is `scripts/layering.config.cjs`.
23
+ * reasons to change: this string is written on the engine's WRITE path on every redacted run, the
24
+ * honesty registry is read by a reader that explains a recording — and the registry's sentences have
25
+ * no business in the bundle of an app that only runs charts. This file imports NOTHING, so it is L0
26
+ * (the layer table is `scripts/layering.config.cjs`).
21
27
  */
22
28
  /**
23
29
  * What the COMMIT LOG and the redacted MIRROR carry where a value was scrubbed.
24
30
  *
25
- * `memory/redaction.ts · scrubPatch` writes it into the patch the log records (both encodings), and the
31
+ * `memory/scrub.ts · scrubPatch` writes it into the patch the log records (both encodings), and the
26
32
  * mirror's seed is scrubbed with the same string (`runner/ExecutionRuntime.ts`), so a fold of the log
27
33
  * reproduces it (`stateAt` → `FoldedState.redactedPaths`) and a slice or an element birth, which
28
34
  * re-serve the log's bytes, show it too. A subflow's SERVED state is the subflow's own nested mirror
29
35
  * (9.20.0): `subflowResults[*].treeContext.globalContext` under `getSnapshot({ redact: true })`, and
30
36
  * `onSubflowExit.outputState` whenever a policy keeps that mirror — so those carry this string as
31
- * well, not {@link SCOPE_PLACEHOLDER}.
37
+ * well, not the scope channel's `SCOPE_PLACEHOLDER` (`memory/redaction.ts`).
32
38
  */
33
39
  export declare const LOG_PLACEHOLDER = "REDACTED";
34
- /**
35
- * What the SCOPE CHANNEL carries where a value was scrubbed: a scope recorder's read, write and
36
- * commit events, the `stageReads` / `stageWrites` retention, the narrative, a decision's evidence, an
37
- * emit payload matched by `emitPatterns`, and a subflow's narrated seed (`onSubflowEntry`).
38
- *
39
- * NOT every recorder event: `onSubflowExit.outputState` serves the subflow's redacted mirror when a
40
- * policy keeps one, and so carries {@link LOG_PLACEHOLDER} (without a mirror — per-call marks alone —
41
- * it is the subflow's heap retained under the rule, with this string). The string did not change
42
- * when it moved here — it was `REDACTED`, in `memory/redaction.ts`, until then.
43
- */
44
- export declare const SCOPE_PLACEHOLDER = "[REDACTED]";
@@ -1,45 +1,40 @@
1
1
  /**
2
- * placeholders.ts — the two strings a redaction leaves where a value was.
2
+ * placeholders.ts — the string a redaction leaves where a value was, in the RECORD.
3
3
  *
4
- * WHY THIS FILE EXISTS. Before F4a six files each spelled one of these strings as a literal, and a
5
- * spelling kept in six places is a placeholder a reader can no longer match on. Every `src/` file
6
- * that writes one now imports it from here, and `test/architecture/placeholders.test.ts` pins that
7
- * no other `src/` file spells either.
4
+ * WHY THIS FILE EXISTS. Before F4a six files each spelled a placeholder as a literal, and a spelling
5
+ * kept in six places is a placeholder a reader can no longer match on. Every `src/` file that writes
6
+ * the log's placeholder imports it from here, and `test/architecture/placeholders.test.ts` pins that
7
+ * no other `src/` file spells it.
8
8
  *
9
- * WHY TWO, AND WHY NOT UNIFIED. Both are historical and stored recordings hold the log one, so
10
- * neither string may change. Which one a reader sees depends on WHERE it reads: the commit log and
11
- * everything served from it say {@link LOG_PLACEHOLDER}; the scope channel says
12
- * {@link SCOPE_PLACEHOLDER} — except `onSubflowExit.outputState`, which carries the log's string
13
- * whenever a policy keeps a mirror (see {@link SCOPE_PLACEHOLDER}).
9
+ * ONE STRING HERE, ITS TWIN ON THE VERDICT'S SIDE (C4, review N2). A redaction leaves one of two
10
+ * strings, and both are historical, so neither may change (stored recordings hold this one). Which
11
+ * one a reader sees depends on WHERE it reads, and each has the owner its reader has:
12
+ * - {@link LOG_PLACEHOLDER} (`'REDACTED'`, here) is a RECORD byte: the commit log and everything
13
+ * served from it — written into the log by the record's scrub (`memory/scrub.ts`, L2), and
14
+ * passed by the two places that serve a mirror (`runner/ExecutionRuntime.ts`, the mirror's
15
+ * seed; `engine/handlers/SubflowExecutor.ts`, a subflow's served state). The readers
16
+ * (`slice/`, `time-travel/`) only name it in their docs: they meet it as data in the log;
17
+ * - `SCOPE_PLACEHOLDER` (`'[REDACTED]'`) is the ENGINE's: the scope channel's retained reads and
18
+ * writes, recorder events, the narrative. It lives beside the verdict that writes it
19
+ * (`memory/redaction.ts`, L4). Until C4 both sat in this file ("two placeholders, one leaf");
20
+ * the record took the engine's string with it.
14
21
  *
15
22
  * WHY A LEAF OF ITS OWN (and not beside `honesty.ts · HONESTY_CODES`). Different readers, different
16
- * reasons to change: these two strings are read by the engine's WRITE path on every redacted run,
17
- * the honesty registry by a reader that explains a recording — and the registry's sentences have no
18
- * business in the bundle of an app that only runs charts. This file imports NOTHING, so it is L0:
19
- * `memory/redaction.ts` (L2) writes both — the log one in `scrubPatch` (and the public `redactPatch`), the scope one in `RedactionRule`
20
- * (`redactPatch` lived in `memory/utils.ts`, L1, until 9.33.0) — the layer table is `scripts/layering.config.cjs`.
23
+ * reasons to change: this string is written on the engine's WRITE path on every redacted run, the
24
+ * honesty registry is read by a reader that explains a recording — and the registry's sentences have
25
+ * no business in the bundle of an app that only runs charts. This file imports NOTHING, so it is L0
26
+ * (the layer table is `scripts/layering.config.cjs`).
21
27
  */
22
28
  /**
23
29
  * What the COMMIT LOG and the redacted MIRROR carry where a value was scrubbed.
24
30
  *
25
- * `memory/redaction.ts · scrubPatch` writes it into the patch the log records (both encodings), and the
31
+ * `memory/scrub.ts · scrubPatch` writes it into the patch the log records (both encodings), and the
26
32
  * mirror's seed is scrubbed with the same string (`runner/ExecutionRuntime.ts`), so a fold of the log
27
33
  * reproduces it (`stateAt` → `FoldedState.redactedPaths`) and a slice or an element birth, which
28
34
  * re-serve the log's bytes, show it too. A subflow's SERVED state is the subflow's own nested mirror
29
35
  * (9.20.0): `subflowResults[*].treeContext.globalContext` under `getSnapshot({ redact: true })`, and
30
36
  * `onSubflowExit.outputState` whenever a policy keeps that mirror — so those carry this string as
31
- * well, not {@link SCOPE_PLACEHOLDER}.
37
+ * well, not the scope channel's `SCOPE_PLACEHOLDER` (`memory/redaction.ts`).
32
38
  */
33
39
  export const LOG_PLACEHOLDER = 'REDACTED';
34
- /**
35
- * What the SCOPE CHANNEL carries where a value was scrubbed: a scope recorder's read, write and
36
- * commit events, the `stageReads` / `stageWrites` retention, the narrative, a decision's evidence, an
37
- * emit payload matched by `emitPatterns`, and a subflow's narrated seed (`onSubflowEntry`).
38
- *
39
- * NOT every recorder event: `onSubflowExit.outputState` serves the subflow's redacted mirror when a
40
- * policy keeps one, and so carries {@link LOG_PLACEHOLDER} (without a mirror — per-call marks alone —
41
- * it is the subflow's heap retained under the rule, with this string). The string did not change
42
- * when it moved here — it was `REDACTED`, in `memory/redaction.ts`, until then.
43
- */
44
- export const SCOPE_PLACEHOLDER = '[REDACTED]';
45
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGxhY2Vob2xkZXJzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9tZW1vcnkvcGxhY2Vob2xkZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW9CRztBQUVIOzs7Ozs7Ozs7O0dBVUc7QUFDSCxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsVUFBVSxDQUFDO0FBRTFDOzs7Ozs7Ozs7R0FTRztBQUNILE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUFHLFlBQVksQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogcGxhY2Vob2xkZXJzLnRzIOKAlCB0aGUgdHdvIHN0cmluZ3MgYSByZWRhY3Rpb24gbGVhdmVzIHdoZXJlIGEgdmFsdWUgd2FzLlxuICpcbiAqIFdIWSBUSElTIEZJTEUgRVhJU1RTLiBCZWZvcmUgRjRhIHNpeCBmaWxlcyBlYWNoIHNwZWxsZWQgb25lIG9mIHRoZXNlIHN0cmluZ3MgYXMgYSBsaXRlcmFsLCBhbmQgYVxuICogc3BlbGxpbmcga2VwdCBpbiBzaXggcGxhY2VzIGlzIGEgcGxhY2Vob2xkZXIgYSByZWFkZXIgY2FuIG5vIGxvbmdlciBtYXRjaCBvbi4gRXZlcnkgYHNyYy9gIGZpbGVcbiAqIHRoYXQgd3JpdGVzIG9uZSBub3cgaW1wb3J0cyBpdCBmcm9tIGhlcmUsIGFuZCBgdGVzdC9hcmNoaXRlY3R1cmUvcGxhY2Vob2xkZXJzLnRlc3QudHNgIHBpbnMgdGhhdFxuICogbm8gb3RoZXIgYHNyYy9gIGZpbGUgc3BlbGxzIGVpdGhlci5cbiAqXG4gKiBXSFkgVFdPLCBBTkQgV0hZIE5PVCBVTklGSUVELiBCb3RoIGFyZSBoaXN0b3JpY2FsIGFuZCBzdG9yZWQgcmVjb3JkaW5ncyBob2xkIHRoZSBsb2cgb25lLCBzb1xuICogbmVpdGhlciBzdHJpbmcgbWF5IGNoYW5nZS4gV2hpY2ggb25lIGEgcmVhZGVyIHNlZXMgZGVwZW5kcyBvbiBXSEVSRSBpdCByZWFkczogdGhlIGNvbW1pdCBsb2cgYW5kXG4gKiBldmVyeXRoaW5nIHNlcnZlZCBmcm9tIGl0IHNheSB7QGxpbmsgTE9HX1BMQUNFSE9MREVSfTsgdGhlIHNjb3BlIGNoYW5uZWwgc2F5c1xuICoge0BsaW5rIFNDT1BFX1BMQUNFSE9MREVSfSDigJQgZXhjZXB0IGBvblN1YmZsb3dFeGl0Lm91dHB1dFN0YXRlYCwgd2hpY2ggY2FycmllcyB0aGUgbG9nJ3Mgc3RyaW5nXG4gKiB3aGVuZXZlciBhIHBvbGljeSBrZWVwcyBhIG1pcnJvciAoc2VlIHtAbGluayBTQ09QRV9QTEFDRUhPTERFUn0pLlxuICpcbiAqIFdIWSBBIExFQUYgT0YgSVRTIE9XTiAoYW5kIG5vdCBiZXNpZGUgYGhvbmVzdHkudHMgwrcgSE9ORVNUWV9DT0RFU2ApLiBEaWZmZXJlbnQgcmVhZGVycywgZGlmZmVyZW50XG4gKiByZWFzb25zIHRvIGNoYW5nZTogdGhlc2UgdHdvIHN0cmluZ3MgYXJlIHJlYWQgYnkgdGhlIGVuZ2luZSdzIFdSSVRFIHBhdGggb24gZXZlcnkgcmVkYWN0ZWQgcnVuLFxuICogdGhlIGhvbmVzdHkgcmVnaXN0cnkgYnkgYSByZWFkZXIgdGhhdCBleHBsYWlucyBhIHJlY29yZGluZyDigJQgYW5kIHRoZSByZWdpc3RyeSdzIHNlbnRlbmNlcyBoYXZlIG5vXG4gKiBidXNpbmVzcyBpbiB0aGUgYnVuZGxlIG9mIGFuIGFwcCB0aGF0IG9ubHkgcnVucyBjaGFydHMuIFRoaXMgZmlsZSBpbXBvcnRzIE5PVEhJTkcsIHNvIGl0IGlzIEwwOlxuICogYG1lbW9yeS9yZWRhY3Rpb24udHNgIChMMikgd3JpdGVzIGJvdGgg4oCUIHRoZSBsb2cgb25lIGluIGBzY3J1YlBhdGNoYCAoYW5kIHRoZSBwdWJsaWMgYHJlZGFjdFBhdGNoYCksIHRoZSBzY29wZSBvbmUgaW4gYFJlZGFjdGlvblJ1bGVgXG4gKiAoYHJlZGFjdFBhdGNoYCBsaXZlZCBpbiBgbWVtb3J5L3V0aWxzLnRzYCwgTDEsIHVudGlsIDkuMzMuMCkg4oCUIHRoZSBsYXllciB0YWJsZSBpcyBgc2NyaXB0cy9sYXllcmluZy5jb25maWcuY2pzYC5cbiAqL1xuXG4vKipcbiAqIFdoYXQgdGhlIENPTU1JVCBMT0cgYW5kIHRoZSByZWRhY3RlZCBNSVJST1IgY2Fycnkgd2hlcmUgYSB2YWx1ZSB3YXMgc2NydWJiZWQuXG4gKlxuICogYG1lbW9yeS9yZWRhY3Rpb24udHMgwrcgc2NydWJQYXRjaGAgd3JpdGVzIGl0IGludG8gdGhlIHBhdGNoIHRoZSBsb2cgcmVjb3JkcyAoYm90aCBlbmNvZGluZ3MpLCBhbmQgdGhlXG4gKiBtaXJyb3IncyBzZWVkIGlzIHNjcnViYmVkIHdpdGggdGhlIHNhbWUgc3RyaW5nIChgcnVubmVyL0V4ZWN1dGlvblJ1bnRpbWUudHNgKSwgc28gYSBmb2xkIG9mIHRoZSBsb2dcbiAqIHJlcHJvZHVjZXMgaXQgKGBzdGF0ZUF0YCDihpIgYEZvbGRlZFN0YXRlLnJlZGFjdGVkUGF0aHNgKSBhbmQgYSBzbGljZSBvciBhbiBlbGVtZW50IGJpcnRoLCB3aGljaFxuICogcmUtc2VydmUgdGhlIGxvZydzIGJ5dGVzLCBzaG93IGl0IHRvby4gQSBzdWJmbG93J3MgU0VSVkVEIHN0YXRlIGlzIHRoZSBzdWJmbG93J3Mgb3duIG5lc3RlZCBtaXJyb3JcbiAqICg5LjIwLjApOiBgc3ViZmxvd1Jlc3VsdHNbKl0udHJlZUNvbnRleHQuZ2xvYmFsQ29udGV4dGAgdW5kZXIgYGdldFNuYXBzaG90KHsgcmVkYWN0OiB0cnVlIH0pYCwgYW5kXG4gKiBgb25TdWJmbG93RXhpdC5vdXRwdXRTdGF0ZWAgd2hlbmV2ZXIgYSBwb2xpY3kga2VlcHMgdGhhdCBtaXJyb3Ig4oCUIHNvIHRob3NlIGNhcnJ5IHRoaXMgc3RyaW5nIGFzXG4gKiB3ZWxsLCBub3Qge0BsaW5rIFNDT1BFX1BMQUNFSE9MREVSfS5cbiAqL1xuZXhwb3J0IGNvbnN0IExPR19QTEFDRUhPTERFUiA9ICdSRURBQ1RFRCc7XG5cbi8qKlxuICogV2hhdCB0aGUgU0NPUEUgQ0hBTk5FTCBjYXJyaWVzIHdoZXJlIGEgdmFsdWUgd2FzIHNjcnViYmVkOiBhIHNjb3BlIHJlY29yZGVyJ3MgcmVhZCwgd3JpdGUgYW5kXG4gKiBjb21taXQgZXZlbnRzLCB0aGUgYHN0YWdlUmVhZHNgIC8gYHN0YWdlV3JpdGVzYCByZXRlbnRpb24sIHRoZSBuYXJyYXRpdmUsIGEgZGVjaXNpb24ncyBldmlkZW5jZSwgYW5cbiAqIGVtaXQgcGF5bG9hZCBtYXRjaGVkIGJ5IGBlbWl0UGF0dGVybnNgLCBhbmQgYSBzdWJmbG93J3MgbmFycmF0ZWQgc2VlZCAoYG9uU3ViZmxvd0VudHJ5YCkuXG4gKlxuICogTk9UIGV2ZXJ5IHJlY29yZGVyIGV2ZW50OiBgb25TdWJmbG93RXhpdC5vdXRwdXRTdGF0ZWAgc2VydmVzIHRoZSBzdWJmbG93J3MgcmVkYWN0ZWQgbWlycm9yIHdoZW4gYVxuICogcG9saWN5IGtlZXBzIG9uZSwgYW5kIHNvIGNhcnJpZXMge0BsaW5rIExPR19QTEFDRUhPTERFUn0gKHdpdGhvdXQgYSBtaXJyb3Ig4oCUIHBlci1jYWxsIG1hcmtzIGFsb25lIOKAlFxuICogaXQgaXMgdGhlIHN1YmZsb3cncyBoZWFwIHJldGFpbmVkIHVuZGVyIHRoZSBydWxlLCB3aXRoIHRoaXMgc3RyaW5nKS4gVGhlIHN0cmluZyBkaWQgbm90IGNoYW5nZVxuICogd2hlbiBpdCBtb3ZlZCBoZXJlIOKAlCBpdCB3YXMgYFJFREFDVEVEYCwgaW4gYG1lbW9yeS9yZWRhY3Rpb24udHNgLCB1bnRpbCB0aGVuLlxuICovXG5leHBvcnQgY29uc3QgU0NPUEVfUExBQ0VIT0xERVIgPSAnW1JFREFDVEVEXSc7XG4iXX0=
40
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGxhY2Vob2xkZXJzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9tZW1vcnkvcGxhY2Vob2xkZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTBCRztBQUVIOzs7Ozs7Ozs7O0dBVUc7QUFDSCxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsVUFBVSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBwbGFjZWhvbGRlcnMudHMg4oCUIHRoZSBzdHJpbmcgYSByZWRhY3Rpb24gbGVhdmVzIHdoZXJlIGEgdmFsdWUgd2FzLCBpbiB0aGUgUkVDT1JELlxuICpcbiAqIFdIWSBUSElTIEZJTEUgRVhJU1RTLiBCZWZvcmUgRjRhIHNpeCBmaWxlcyBlYWNoIHNwZWxsZWQgYSBwbGFjZWhvbGRlciBhcyBhIGxpdGVyYWwsIGFuZCBhIHNwZWxsaW5nXG4gKiBrZXB0IGluIHNpeCBwbGFjZXMgaXMgYSBwbGFjZWhvbGRlciBhIHJlYWRlciBjYW4gbm8gbG9uZ2VyIG1hdGNoIG9uLiBFdmVyeSBgc3JjL2AgZmlsZSB0aGF0IHdyaXRlc1xuICogdGhlIGxvZydzIHBsYWNlaG9sZGVyIGltcG9ydHMgaXQgZnJvbSBoZXJlLCBhbmQgYHRlc3QvYXJjaGl0ZWN0dXJlL3BsYWNlaG9sZGVycy50ZXN0LnRzYCBwaW5zIHRoYXRcbiAqIG5vIG90aGVyIGBzcmMvYCBmaWxlIHNwZWxscyBpdC5cbiAqXG4gKiBPTkUgU1RSSU5HIEhFUkUsIElUUyBUV0lOIE9OIFRIRSBWRVJESUNUJ1MgU0lERSAoQzQsIHJldmlldyBOMikuIEEgcmVkYWN0aW9uIGxlYXZlcyBvbmUgb2YgdHdvXG4gKiBzdHJpbmdzLCBhbmQgYm90aCBhcmUgaGlzdG9yaWNhbCwgc28gbmVpdGhlciBtYXkgY2hhbmdlIChzdG9yZWQgcmVjb3JkaW5ncyBob2xkIHRoaXMgb25lKS4gV2hpY2hcbiAqIG9uZSBhIHJlYWRlciBzZWVzIGRlcGVuZHMgb24gV0hFUkUgaXQgcmVhZHMsIGFuZCBlYWNoIGhhcyB0aGUgb3duZXIgaXRzIHJlYWRlciBoYXM6XG4gKiAgIC0ge0BsaW5rIExPR19QTEFDRUhPTERFUn0gKGAnUkVEQUNURUQnYCwgaGVyZSkgaXMgYSBSRUNPUkQgYnl0ZTogdGhlIGNvbW1pdCBsb2cgYW5kIGV2ZXJ5dGhpbmdcbiAqICAgICBzZXJ2ZWQgZnJvbSBpdCDigJQgd3JpdHRlbiBpbnRvIHRoZSBsb2cgYnkgdGhlIHJlY29yZCdzIHNjcnViIChgbWVtb3J5L3NjcnViLnRzYCwgTDIpLCBhbmRcbiAqICAgICBwYXNzZWQgYnkgdGhlIHR3byBwbGFjZXMgdGhhdCBzZXJ2ZSBhIG1pcnJvciAoYHJ1bm5lci9FeGVjdXRpb25SdW50aW1lLnRzYCwgdGhlIG1pcnJvcidzXG4gKiAgICAgc2VlZDsgYGVuZ2luZS9oYW5kbGVycy9TdWJmbG93RXhlY3V0b3IudHNgLCBhIHN1YmZsb3cncyBzZXJ2ZWQgc3RhdGUpLiBUaGUgcmVhZGVyc1xuICogICAgIChgc2xpY2UvYCwgYHRpbWUtdHJhdmVsL2ApIG9ubHkgbmFtZSBpdCBpbiB0aGVpciBkb2NzOiB0aGV5IG1lZXQgaXQgYXMgZGF0YSBpbiB0aGUgbG9nO1xuICogICAtIGBTQ09QRV9QTEFDRUhPTERFUmAgKGAnW1JFREFDVEVEXSdgKSBpcyB0aGUgRU5HSU5FJ3M6IHRoZSBzY29wZSBjaGFubmVsJ3MgcmV0YWluZWQgcmVhZHMgYW5kXG4gKiAgICAgd3JpdGVzLCByZWNvcmRlciBldmVudHMsIHRoZSBuYXJyYXRpdmUuIEl0IGxpdmVzIGJlc2lkZSB0aGUgdmVyZGljdCB0aGF0IHdyaXRlcyBpdFxuICogICAgIChgbWVtb3J5L3JlZGFjdGlvbi50c2AsIEw0KS4gVW50aWwgQzQgYm90aCBzYXQgaW4gdGhpcyBmaWxlIChcInR3byBwbGFjZWhvbGRlcnMsIG9uZSBsZWFmXCIpO1xuICogICAgIHRoZSByZWNvcmQgdG9vayB0aGUgZW5naW5lJ3Mgc3RyaW5nIHdpdGggaXQuXG4gKlxuICogV0hZIEEgTEVBRiBPRiBJVFMgT1dOIChhbmQgbm90IGJlc2lkZSBgaG9uZXN0eS50cyDCtyBIT05FU1RZX0NPREVTYCkuIERpZmZlcmVudCByZWFkZXJzLCBkaWZmZXJlbnRcbiAqIHJlYXNvbnMgdG8gY2hhbmdlOiB0aGlzIHN0cmluZyBpcyB3cml0dGVuIG9uIHRoZSBlbmdpbmUncyBXUklURSBwYXRoIG9uIGV2ZXJ5IHJlZGFjdGVkIHJ1biwgdGhlXG4gKiBob25lc3R5IHJlZ2lzdHJ5IGlzIHJlYWQgYnkgYSByZWFkZXIgdGhhdCBleHBsYWlucyBhIHJlY29yZGluZyDigJQgYW5kIHRoZSByZWdpc3RyeSdzIHNlbnRlbmNlcyBoYXZlXG4gKiBubyBidXNpbmVzcyBpbiB0aGUgYnVuZGxlIG9mIGFuIGFwcCB0aGF0IG9ubHkgcnVucyBjaGFydHMuIFRoaXMgZmlsZSBpbXBvcnRzIE5PVEhJTkcsIHNvIGl0IGlzIEwwXG4gKiAodGhlIGxheWVyIHRhYmxlIGlzIGBzY3JpcHRzL2xheWVyaW5nLmNvbmZpZy5janNgKS5cbiAqL1xuXG4vKipcbiAqIFdoYXQgdGhlIENPTU1JVCBMT0cgYW5kIHRoZSByZWRhY3RlZCBNSVJST1IgY2Fycnkgd2hlcmUgYSB2YWx1ZSB3YXMgc2NydWJiZWQuXG4gKlxuICogYG1lbW9yeS9zY3J1Yi50cyDCtyBzY3J1YlBhdGNoYCB3cml0ZXMgaXQgaW50byB0aGUgcGF0Y2ggdGhlIGxvZyByZWNvcmRzIChib3RoIGVuY29kaW5ncyksIGFuZCB0aGVcbiAqIG1pcnJvcidzIHNlZWQgaXMgc2NydWJiZWQgd2l0aCB0aGUgc2FtZSBzdHJpbmcgKGBydW5uZXIvRXhlY3V0aW9uUnVudGltZS50c2ApLCBzbyBhIGZvbGQgb2YgdGhlIGxvZ1xuICogcmVwcm9kdWNlcyBpdCAoYHN0YXRlQXRgIOKGkiBgRm9sZGVkU3RhdGUucmVkYWN0ZWRQYXRoc2ApIGFuZCBhIHNsaWNlIG9yIGFuIGVsZW1lbnQgYmlydGgsIHdoaWNoXG4gKiByZS1zZXJ2ZSB0aGUgbG9nJ3MgYnl0ZXMsIHNob3cgaXQgdG9vLiBBIHN1YmZsb3cncyBTRVJWRUQgc3RhdGUgaXMgdGhlIHN1YmZsb3cncyBvd24gbmVzdGVkIG1pcnJvclxuICogKDkuMjAuMCk6IGBzdWJmbG93UmVzdWx0c1sqXS50cmVlQ29udGV4dC5nbG9iYWxDb250ZXh0YCB1bmRlciBgZ2V0U25hcHNob3QoeyByZWRhY3Q6IHRydWUgfSlgLCBhbmRcbiAqIGBvblN1YmZsb3dFeGl0Lm91dHB1dFN0YXRlYCB3aGVuZXZlciBhIHBvbGljeSBrZWVwcyB0aGF0IG1pcnJvciDigJQgc28gdGhvc2UgY2FycnkgdGhpcyBzdHJpbmcgYXNcbiAqIHdlbGwsIG5vdCB0aGUgc2NvcGUgY2hhbm5lbCdzIGBTQ09QRV9QTEFDRUhPTERFUmAgKGBtZW1vcnkvcmVkYWN0aW9uLnRzYCkuXG4gKi9cbmV4cG9ydCBjb25zdCBMT0dfUExBQ0VIT0xERVIgPSAnUkVEQUNURUQnO1xuIl19
@@ -6,9 +6,11 @@
6
6
  * 1. No payload (the stage staged no write) → an EMPTY bundle goes to the log, and nothing else
7
7
  * moves: live state and the mirror keep their generation. Every executed stage is a cursor stop.
8
8
  * 2. A payload → its names are read first, so a stamp that cannot be read fails the commit before
9
- * anything moves; then its raw rows build live state's next generation, `scrubPatch` puts the
10
- * placeholder at each redacted path that holds a value (in a spine copy, never in the raw
11
- * patch), and the mirror and the log take the scrubbed rows — never the raw ones.
9
+ * anything moves; then its raw rows build live state's next generation, `scrubPatch`
10
+ * (`scrub.ts`, the record's own) puts the placeholder at each redacted path that holds a value
11
+ * (in a spine copy, never in the raw patch), and the mirror and the log take the scrubbed rows —
12
+ * never the raw ones. The redacted paths are data by now: the engine decided them per write
13
+ * (`RecordFrame · write`); nothing here imports the engine's verdict (C4).
12
14
  * 3. The bundle's KEY ORDER is the record's bytes: `overwrite`, `updates`, `redactedPaths`, `trace`,
13
15
  * `stage`, `stageId`, `runtimeStageId`, then `untrackedSources`, `tags` and `phase`, each only
14
16
  * when it has something to say (absent, never empty). `EventLog · record` appends `idx`. The
@@ -6,9 +6,11 @@
6
6
  * 1. No payload (the stage staged no write) → an EMPTY bundle goes to the log, and nothing else
7
7
  * moves: live state and the mirror keep their generation. Every executed stage is a cursor stop.
8
8
  * 2. A payload → its names are read first, so a stamp that cannot be read fails the commit before
9
- * anything moves; then its raw rows build live state's next generation, `scrubPatch` puts the
10
- * placeholder at each redacted path that holds a value (in a spine copy, never in the raw
11
- * patch), and the mirror and the log take the scrubbed rows — never the raw ones.
9
+ * anything moves; then its raw rows build live state's next generation, `scrubPatch`
10
+ * (`scrub.ts`, the record's own) puts the placeholder at each redacted path that holds a value
11
+ * (in a spine copy, never in the raw patch), and the mirror and the log take the scrubbed rows —
12
+ * never the raw ones. The redacted paths are data by now: the engine decided them per write
13
+ * (`RecordFrame · write`); nothing here imports the engine's verdict (C4).
12
14
  * 3. The bundle's KEY ORDER is the record's bytes: `overwrite`, `updates`, `redactedPaths`, `trace`,
13
15
  * `stage`, `stageId`, `runtimeStageId`, then `untrackedSources`, `tags` and `phase`, each only
14
16
  * when it has something to say (absent, never empty). `EventLog · record` appends `idx`. The
@@ -18,7 +20,7 @@
18
20
  * is a continuation — and keeps what is not the record: retention, diagnostics, the dev-mode
19
21
  * warnings and the commit observer.
20
22
  */
21
- import { scrubPatch } from './redaction.js';
23
+ import { scrubPatch } from './scrub.js';
22
24
  /** Record one commit (the module law). `payload` absent = the empty commit. */
23
25
  export function recordCommit(payload, stamp, into) {
24
26
  if (payload === undefined) {
@@ -56,4 +58,4 @@ function namesOf({ stage, stageId, runtimeStageId, untrackedSources, tags, phase
56
58
  phase: phase || undefined,
57
59
  };
58
60
  }
59
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVjb3JkQ29tbWl0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9tZW1vcnkvcmVjb3JkQ29tbWl0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBbUJHO0FBR0gsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBMkI1QywrRUFBK0U7QUFDL0UsTUFBTSxVQUFVLFlBQVksQ0FBQyxPQUFrQyxFQUFFLEtBQWtCLEVBQUUsSUFBbUI7SUFDdEcsSUFBSSxPQUFPLEtBQUssU0FBUyxFQUFFLENBQUM7UUFDMUIsSUFBSSxDQUFDLEdBQUcsRUFBRSxNQUFNLENBQUMsUUFBUSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzNELE9BQU87SUFDVCxDQUFDO0lBQ0QsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzdCLE1BQU0sRUFBRSxhQUFhLEVBQUUsS0FBSyxFQUFFLEdBQUcsT0FBTyxDQUFDO0lBQ3pDLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNqRSxNQUFNLFNBQVMsR0FBRyxVQUFVLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxhQUFhLENBQUMsQ0FBQztJQUMvRCxNQUFNLE9BQU8sR0FBRyxVQUFVLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxhQUFhLENBQUMsQ0FBQztJQUMzRCxJQUFJLENBQUMsTUFBTSxFQUFFLFVBQVUsQ0FBQyxTQUFTLEVBQUUsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ25ELElBQUksQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDLFFBQVEsQ0FBQyxTQUFTLEVBQUUsT0FBTyxFQUFFLENBQUMsR0FBRyxhQUFhLENBQUMsRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztBQUNuRixDQUFDO0FBRUQsdUhBQXVIO0FBQ3ZILFNBQVMsUUFBUSxDQUNmLFNBQXNCLEVBQ3RCLE9BQW9CLEVBQ3BCLGFBQXVCLEVBQ3ZCLEtBQW1CLEVBQ25CLEtBQVk7SUFFWixNQUFNLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxjQUFjLEVBQUUsZ0JBQWdCLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxHQUFHLEtBQUssQ0FBQztJQUNoRixNQUFNLE1BQU0sR0FBaUIsRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLGFBQWEsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxjQUFjLEVBQUUsQ0FBQztJQUMxRyxJQUFJLGdCQUFnQjtRQUFFLE1BQU0sQ0FBQyxnQkFBZ0IsR0FBRyxnQkFBZ0IsQ0FBQztJQUNqRSxJQUFJLElBQUk7UUFBRSxNQUFNLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztJQUM3QixJQUFJLEtBQUs7UUFBRSxNQUFNLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztJQUNoQyxPQUFPLE1BQU0sQ0FBQztBQUNoQixDQUFDO0FBRUQsZ0hBQWdIO0FBQ2hILFNBQVMsT0FBTyxDQUFDLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxjQUFjLEVBQUUsZ0JBQWdCLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBZTtJQUM3RixPQUFPO1FBQ0wsS0FBSztRQUNMLE9BQU87UUFDUCxjQUFjO1FBQ2QsZ0JBQWdCLEVBQUUsQ0FBQyxnQkFBZ0IsSUFBSSxnQkFBZ0IsQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxnQkFBZ0IsQ0FBQztRQUN0RyxJQUFJLEVBQUUsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSTtRQUNuRCxLQUFLLEVBQUUsS0FBSyxJQUFJLFNBQVM7S0FDMUIsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIHJlY29yZENvbW1pdCDigJQgb25lIHN0YWdlJ3MgY29tbWl0IG9udG8gdGhlIHJlY29yZCAoQzEsIEwzKS4gVGhlIG9uZSBvd25lciBvZiBhIGJ1bmRsZSdzIGJ5dGVzIGFuZFxuICogb2Ygd2hlcmUgYSBjb21taXQgbGFuZHM6IGxpdmUgc3RhdGUsIHRoZSByZWRhY3RlZCBtaXJyb3IsIHRoZSBsb2cuXG4gKlxuICogVEhFIExBVzpcbiAqICAgMS4gTm8gcGF5bG9hZCAodGhlIHN0YWdlIHN0YWdlZCBubyB3cml0ZSkg4oaSIGFuIEVNUFRZIGJ1bmRsZSBnb2VzIHRvIHRoZSBsb2csIGFuZCBub3RoaW5nIGVsc2VcbiAqICAgICAgbW92ZXM6IGxpdmUgc3RhdGUgYW5kIHRoZSBtaXJyb3Iga2VlcCB0aGVpciBnZW5lcmF0aW9uLiBFdmVyeSBleGVjdXRlZCBzdGFnZSBpcyBhIGN1cnNvciBzdG9wLlxuICogICAyLiBBIHBheWxvYWQg4oaSIGl0cyBuYW1lcyBhcmUgcmVhZCBmaXJzdCwgc28gYSBzdGFtcCB0aGF0IGNhbm5vdCBiZSByZWFkIGZhaWxzIHRoZSBjb21taXQgYmVmb3JlXG4gKiAgICAgIGFueXRoaW5nIG1vdmVzOyB0aGVuIGl0cyByYXcgcm93cyBidWlsZCBsaXZlIHN0YXRlJ3MgbmV4dCBnZW5lcmF0aW9uLCBgc2NydWJQYXRjaGAgcHV0cyB0aGVcbiAqICAgICAgcGxhY2Vob2xkZXIgYXQgZWFjaCByZWRhY3RlZCBwYXRoIHRoYXQgaG9sZHMgYSB2YWx1ZSAoaW4gYSBzcGluZSBjb3B5LCBuZXZlciBpbiB0aGUgcmF3XG4gKiAgICAgIHBhdGNoKSwgYW5kIHRoZSBtaXJyb3IgYW5kIHRoZSBsb2cgdGFrZSB0aGUgc2NydWJiZWQgcm93cyDigJQgbmV2ZXIgdGhlIHJhdyBvbmVzLlxuICogICAzLiBUaGUgYnVuZGxlJ3MgS0VZIE9SREVSIGlzIHRoZSByZWNvcmQncyBieXRlczogYG92ZXJ3cml0ZWAsIGB1cGRhdGVzYCwgYHJlZGFjdGVkUGF0aHNgLCBgdHJhY2VgLFxuICogICAgICBgc3RhZ2VgLCBgc3RhZ2VJZGAsIGBydW50aW1lU3RhZ2VJZGAsIHRoZW4gYHVudHJhY2tlZFNvdXJjZXNgLCBgdGFnc2AgYW5kIGBwaGFzZWAsIGVhY2ggb25seVxuICogICAgICB3aGVuIGl0IGhhcyBzb21ldGhpbmcgdG8gc2F5IChhYnNlbnQsIG5ldmVyIGVtcHR5KS4gYEV2ZW50TG9nIMK3IHJlY29yZGAgYXBwZW5kcyBgaWR4YC4gVGhlXG4gKiAgICAgIG5hbWVzIGFyZSBuYW1lczogbm8gcmVkYWN0aW9uIHJlYWRzIHRoZW0sIGFuZCBubyBlbmNvZGluZyAoYGNvbW1pdFZhbHVlc2ApIGNoYW5nZXMgdGhlbS5cbiAqXG4gKiBUaGUgZnJhbWUgKGBTdGFnZUNvbnRleHRgKSBkZWNpZGVzIFdIQVQgaXMgY29tbWl0dGVkIOKAlCB0aGUgcGF5bG9hZCwgdGhlIG5hbWVzLCB3aGV0aGVyIHRoZSBidW5kbGVcbiAqIGlzIGEgY29udGludWF0aW9uIOKAlCBhbmQga2VlcHMgd2hhdCBpcyBub3QgdGhlIHJlY29yZDogcmV0ZW50aW9uLCBkaWFnbm9zdGljcywgdGhlIGRldi1tb2RlXG4gKiB3YXJuaW5ncyBhbmQgdGhlIGNvbW1pdCBvYnNlcnZlci5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IEV2ZW50TG9nIH0gZnJvbSAnLi9FdmVudExvZy5qcyc7XG5pbXBvcnQgeyBzY3J1YlBhdGNoIH0gZnJvbSAnLi9yZWRhY3Rpb24uanMnO1xuaW1wb3J0IHR5cGUgeyBTaGFyZWRNZW1vcnkgfSBmcm9tICcuL1NoYXJlZE1lbW9yeS5qcyc7XG5pbXBvcnQgdHlwZSB7IFRyYW5zYWN0aW9uQnVmZmVyIH0gZnJvbSAnLi9UcmFuc2FjdGlvbkJ1ZmZlci5qcyc7XG5pbXBvcnQgdHlwZSB7IENvbW1pdEJ1bmRsZSwgQ29tbWl0UGhhc2UsIE1lbW9yeVBhdGNoLCBUcmFjZUVudHJ5LCBVbnRyYWNrZWRTb3VyY2UgfSBmcm9tICcuL3R5cGVzLmpzJztcblxuLyoqIE9uZSBzdGFnZSdzIG5ldCBjaGFuZ2UsIGFzIGBUcmFuc2FjdGlvbkJ1ZmZlciDCtyBjb21taXRgIGhhbmRzIGl0IG92ZXIuICovXG5leHBvcnQgdHlwZSBDb21taXRQYXlsb2FkID0gUmV0dXJuVHlwZTxUcmFuc2FjdGlvbkJ1ZmZlclsnY29tbWl0J10+O1xuXG4vKiogV2hhdCBuYW1lcyBhIGNvbW1pdCBvbiB0aGUgcmVjb3JkLCBiZXNpZGUgaXRzIHBheWxvYWQgKGxhdyAzKS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29tbWl0U3RhbXAge1xuICBzdGFnZTogc3RyaW5nO1xuICBzdGFnZUlkOiBzdHJpbmc7XG4gIHJ1bnRpbWVTdGFnZUlkOiBzdHJpbmc7XG4gIHVudHJhY2tlZFNvdXJjZXM/OiBSZWFkb25seVNldDxVbnRyYWNrZWRTb3VyY2U+O1xuICB0YWdzPzogcmVhZG9ubHkgc3RyaW5nW107XG4gIHBoYXNlPzogQ29tbWl0UGhhc2U7XG59XG5cbi8qKiBXaGVyZSBhIGNvbW1pdCBsYW5kczogbGl2ZSBzdGF0ZSBhbHdheXM7IHRoZSBtaXJyb3IgYW5kIHRoZSBsb2cgd2hlbiB0aGUgcnVuIGtlZXBzIHRoZW0uICovXG5leHBvcnQgaW50ZXJmYWNlIENvbW1pdFRhcmdldHMge1xuICBzdGF0ZTogU2hhcmVkTWVtb3J5O1xuICBtaXJyb3I/OiBTaGFyZWRNZW1vcnk7XG4gIGxvZz86IEV2ZW50TG9nO1xufVxuXG50eXBlIE5hbWVzID0gUGljazxDb21taXRCdW5kbGUsICdzdGFnZScgfCAnc3RhZ2VJZCcgfCAncnVudGltZVN0YWdlSWQnIHwgJ3VudHJhY2tlZFNvdXJjZXMnIHwgJ3RhZ3MnIHwgJ3BoYXNlJz47XG5cbi8qKiBSZWNvcmQgb25lIGNvbW1pdCAodGhlIG1vZHVsZSBsYXcpLiBgcGF5bG9hZGAgYWJzZW50ID0gdGhlIGVtcHR5IGNvbW1pdC4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZWNvcmRDb21taXQocGF5bG9hZDogQ29tbWl0UGF5bG9hZCB8IHVuZGVmaW5lZCwgc3RhbXA6IENvbW1pdFN0YW1wLCBpbnRvOiBDb21taXRUYXJnZXRzKTogdm9pZCB7XG4gIGlmIChwYXlsb2FkID09PSB1bmRlZmluZWQpIHtcbiAgICBpbnRvLmxvZz8ucmVjb3JkKGJ1bmRsZU9mKHt9LCB7fSwgW10sIFtdLCBuYW1lc09mKHN0YW1wKSkpO1xuICAgIHJldHVybjtcbiAgfVxuICBjb25zdCBuYW1lcyA9IG5hbWVzT2Yoc3RhbXApO1xuICBjb25zdCB7IHJlZGFjdGVkUGF0aHMsIHRyYWNlIH0gPSBwYXlsb2FkO1xuICBpbnRvLnN0YXRlLmFwcGx5UGF0Y2gocGF5bG9hZC5vdmVyd3JpdGUsIHBheWxvYWQudXBkYXRlcywgdHJhY2UpO1xuICBjb25zdCBvdmVyd3JpdGUgPSBzY3J1YlBhdGNoKHBheWxvYWQub3ZlcndyaXRlLCByZWRhY3RlZFBhdGhzKTtcbiAgY29uc3QgdXBkYXRlcyA9IHNjcnViUGF0Y2gocGF5bG9hZC51cGRhdGVzLCByZWRhY3RlZFBhdGhzKTtcbiAgaW50by5taXJyb3I/LmFwcGx5UGF0Y2gob3ZlcndyaXRlLCB1cGRhdGVzLCB0cmFjZSk7XG4gIGludG8ubG9nPy5yZWNvcmQoYnVuZGxlT2Yob3ZlcndyaXRlLCB1cGRhdGVzLCBbLi4ucmVkYWN0ZWRQYXRoc10sIHRyYWNlLCBuYW1lcykpO1xufVxuXG4vKiogVEhFIGJ1bmRsZSAobGF3IDMpOiB0aGUgcGF5bG9hZCdzIGZvdXIga2V5cywgdGhlIHRocmVlIG5hbWVzLCB0aGVuIGVhY2ggb3B0aW9uYWwgbmFtZSB0aGF0IGhhcyBzb21ldGhpbmcgdG8gc2F5LiAqL1xuZnVuY3Rpb24gYnVuZGxlT2YoXG4gIG92ZXJ3cml0ZTogTWVtb3J5UGF0Y2gsXG4gIHVwZGF0ZXM6IE1lbW9yeVBhdGNoLFxuICByZWRhY3RlZFBhdGhzOiBzdHJpbmdbXSxcbiAgdHJhY2U6IFRyYWNlRW50cnlbXSxcbiAgbmFtZXM6IE5hbWVzLFxuKTogQ29tbWl0QnVuZGxlIHtcbiAgY29uc3QgeyBzdGFnZSwgc3RhZ2VJZCwgcnVudGltZVN0YWdlSWQsIHVudHJhY2tlZFNvdXJjZXMsIHRhZ3MsIHBoYXNlIH0gPSBuYW1lcztcbiAgY29uc3QgYnVuZGxlOiBDb21taXRCdW5kbGUgPSB7IG92ZXJ3cml0ZSwgdXBkYXRlcywgcmVkYWN0ZWRQYXRocywgdHJhY2UsIHN0YWdlLCBzdGFnZUlkLCBydW50aW1lU3RhZ2VJZCB9O1xuICBpZiAodW50cmFja2VkU291cmNlcykgYnVuZGxlLnVudHJhY2tlZFNvdXJjZXMgPSB1bnRyYWNrZWRTb3VyY2VzO1xuICBpZiAodGFncykgYnVuZGxlLnRhZ3MgPSB0YWdzO1xuICBpZiAocGhhc2UpIGJ1bmRsZS5waGFzZSA9IHBoYXNlO1xuICByZXR1cm4gYnVuZGxlO1xufVxuXG4vKiogVGhlIG5hbWVzLCByZWFkIG9uY2Ug4oCUIGJlZm9yZSBhbnl0aGluZyBtb3ZlcyAobGF3IDIpLiBBbiBvcHRpb25hbCBvbmUgd2l0aCBub3RoaW5nIHRvIHNheSBpcyBgdW5kZWZpbmVkYC4gKi9cbmZ1bmN0aW9uIG5hbWVzT2YoeyBzdGFnZSwgc3RhZ2VJZCwgcnVudGltZVN0YWdlSWQsIHVudHJhY2tlZFNvdXJjZXMsIHRhZ3MsIHBoYXNlIH06IENvbW1pdFN0YW1wKTogTmFtZXMge1xuICByZXR1cm4ge1xuICAgIHN0YWdlLFxuICAgIHN0YWdlSWQsXG4gICAgcnVudGltZVN0YWdlSWQsXG4gICAgdW50cmFja2VkU291cmNlczogIXVudHJhY2tlZFNvdXJjZXMgfHwgdW50cmFja2VkU291cmNlcy5zaXplID09PSAwID8gdW5kZWZpbmVkIDogWy4uLnVudHJhY2tlZFNvdXJjZXNdLFxuICAgIHRhZ3M6ICF0YWdzIHx8IHRhZ3MubGVuZ3RoID09PSAwID8gdW5kZWZpbmVkIDogdGFncyxcbiAgICBwaGFzZTogcGhhc2UgfHwgdW5kZWZpbmVkLFxuICB9O1xufVxuIl19
61
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVjb3JkQ29tbWl0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9tZW1vcnkvcmVjb3JkQ29tbWl0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FxQkc7QUFHSCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBMkJ4QywrRUFBK0U7QUFDL0UsTUFBTSxVQUFVLFlBQVksQ0FBQyxPQUFrQyxFQUFFLEtBQWtCLEVBQUUsSUFBbUI7SUFDdEcsSUFBSSxPQUFPLEtBQUssU0FBUyxFQUFFLENBQUM7UUFDMUIsSUFBSSxDQUFDLEdBQUcsRUFBRSxNQUFNLENBQUMsUUFBUSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzNELE9BQU87SUFDVCxDQUFDO0lBQ0QsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzdCLE1BQU0sRUFBRSxhQUFhLEVBQUUsS0FBSyxFQUFFLEdBQUcsT0FBTyxDQUFDO0lBQ3pDLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNqRSxNQUFNLFNBQVMsR0FBRyxVQUFVLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxhQUFhLENBQUMsQ0FBQztJQUMvRCxNQUFNLE9BQU8sR0FBRyxVQUFVLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxhQUFhLENBQUMsQ0FBQztJQUMzRCxJQUFJLENBQUMsTUFBTSxFQUFFLFVBQVUsQ0FBQyxTQUFTLEVBQUUsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ25ELElBQUksQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDLFFBQVEsQ0FBQyxTQUFTLEVBQUUsT0FBTyxFQUFFLENBQUMsR0FBRyxhQUFhLENBQUMsRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztBQUNuRixDQUFDO0FBRUQsdUhBQXVIO0FBQ3ZILFNBQVMsUUFBUSxDQUNmLFNBQXNCLEVBQ3RCLE9BQW9CLEVBQ3BCLGFBQXVCLEVBQ3ZCLEtBQW1CLEVBQ25CLEtBQVk7SUFFWixNQUFNLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxjQUFjLEVBQUUsZ0JBQWdCLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxHQUFHLEtBQUssQ0FBQztJQUNoRixNQUFNLE1BQU0sR0FBaUIsRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLGFBQWEsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxjQUFjLEVBQUUsQ0FBQztJQUMxRyxJQUFJLGdCQUFnQjtRQUFFLE1BQU0sQ0FBQyxnQkFBZ0IsR0FBRyxnQkFBZ0IsQ0FBQztJQUNqRSxJQUFJLElBQUk7UUFBRSxNQUFNLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztJQUM3QixJQUFJLEtBQUs7UUFBRSxNQUFNLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztJQUNoQyxPQUFPLE1BQU0sQ0FBQztBQUNoQixDQUFDO0FBRUQsZ0hBQWdIO0FBQ2hILFNBQVMsT0FBTyxDQUFDLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxjQUFjLEVBQUUsZ0JBQWdCLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBZTtJQUM3RixPQUFPO1FBQ0wsS0FBSztRQUNMLE9BQU87UUFDUCxjQUFjO1FBQ2QsZ0JBQWdCLEVBQUUsQ0FBQyxnQkFBZ0IsSUFBSSxnQkFBZ0IsQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxnQkFBZ0IsQ0FBQztRQUN0RyxJQUFJLEVBQUUsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSTtRQUNuRCxLQUFLLEVBQUUsS0FBSyxJQUFJLFNBQVM7S0FDMUIsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIHJlY29yZENvbW1pdCDigJQgb25lIHN0YWdlJ3MgY29tbWl0IG9udG8gdGhlIHJlY29yZCAoQzEsIEwzKS4gVGhlIG9uZSBvd25lciBvZiBhIGJ1bmRsZSdzIGJ5dGVzIGFuZFxuICogb2Ygd2hlcmUgYSBjb21taXQgbGFuZHM6IGxpdmUgc3RhdGUsIHRoZSByZWRhY3RlZCBtaXJyb3IsIHRoZSBsb2cuXG4gKlxuICogVEhFIExBVzpcbiAqICAgMS4gTm8gcGF5bG9hZCAodGhlIHN0YWdlIHN0YWdlZCBubyB3cml0ZSkg4oaSIGFuIEVNUFRZIGJ1bmRsZSBnb2VzIHRvIHRoZSBsb2csIGFuZCBub3RoaW5nIGVsc2VcbiAqICAgICAgbW92ZXM6IGxpdmUgc3RhdGUgYW5kIHRoZSBtaXJyb3Iga2VlcCB0aGVpciBnZW5lcmF0aW9uLiBFdmVyeSBleGVjdXRlZCBzdGFnZSBpcyBhIGN1cnNvciBzdG9wLlxuICogICAyLiBBIHBheWxvYWQg4oaSIGl0cyBuYW1lcyBhcmUgcmVhZCBmaXJzdCwgc28gYSBzdGFtcCB0aGF0IGNhbm5vdCBiZSByZWFkIGZhaWxzIHRoZSBjb21taXQgYmVmb3JlXG4gKiAgICAgIGFueXRoaW5nIG1vdmVzOyB0aGVuIGl0cyByYXcgcm93cyBidWlsZCBsaXZlIHN0YXRlJ3MgbmV4dCBnZW5lcmF0aW9uLCBgc2NydWJQYXRjaGBcbiAqICAgICAgKGBzY3J1Yi50c2AsIHRoZSByZWNvcmQncyBvd24pIHB1dHMgdGhlIHBsYWNlaG9sZGVyIGF0IGVhY2ggcmVkYWN0ZWQgcGF0aCB0aGF0IGhvbGRzIGEgdmFsdWVcbiAqICAgICAgKGluIGEgc3BpbmUgY29weSwgbmV2ZXIgaW4gdGhlIHJhdyBwYXRjaCksIGFuZCB0aGUgbWlycm9yIGFuZCB0aGUgbG9nIHRha2UgdGhlIHNjcnViYmVkIHJvd3Mg4oCUXG4gKiAgICAgIG5ldmVyIHRoZSByYXcgb25lcy4gVGhlIHJlZGFjdGVkIHBhdGhzIGFyZSBkYXRhIGJ5IG5vdzogdGhlIGVuZ2luZSBkZWNpZGVkIHRoZW0gcGVyIHdyaXRlXG4gKiAgICAgIChgUmVjb3JkRnJhbWUgwrcgd3JpdGVgKTsgbm90aGluZyBoZXJlIGltcG9ydHMgdGhlIGVuZ2luZSdzIHZlcmRpY3QgKEM0KS5cbiAqICAgMy4gVGhlIGJ1bmRsZSdzIEtFWSBPUkRFUiBpcyB0aGUgcmVjb3JkJ3MgYnl0ZXM6IGBvdmVyd3JpdGVgLCBgdXBkYXRlc2AsIGByZWRhY3RlZFBhdGhzYCwgYHRyYWNlYCxcbiAqICAgICAgYHN0YWdlYCwgYHN0YWdlSWRgLCBgcnVudGltZVN0YWdlSWRgLCB0aGVuIGB1bnRyYWNrZWRTb3VyY2VzYCwgYHRhZ3NgIGFuZCBgcGhhc2VgLCBlYWNoIG9ubHlcbiAqICAgICAgd2hlbiBpdCBoYXMgc29tZXRoaW5nIHRvIHNheSAoYWJzZW50LCBuZXZlciBlbXB0eSkuIGBFdmVudExvZyDCtyByZWNvcmRgIGFwcGVuZHMgYGlkeGAuIFRoZVxuICogICAgICBuYW1lcyBhcmUgbmFtZXM6IG5vIHJlZGFjdGlvbiByZWFkcyB0aGVtLCBhbmQgbm8gZW5jb2RpbmcgKGBjb21taXRWYWx1ZXNgKSBjaGFuZ2VzIHRoZW0uXG4gKlxuICogVGhlIGZyYW1lIChgU3RhZ2VDb250ZXh0YCkgZGVjaWRlcyBXSEFUIGlzIGNvbW1pdHRlZCDigJQgdGhlIHBheWxvYWQsIHRoZSBuYW1lcywgd2hldGhlciB0aGUgYnVuZGxlXG4gKiBpcyBhIGNvbnRpbnVhdGlvbiDigJQgYW5kIGtlZXBzIHdoYXQgaXMgbm90IHRoZSByZWNvcmQ6IHJldGVudGlvbiwgZGlhZ25vc3RpY3MsIHRoZSBkZXYtbW9kZVxuICogd2FybmluZ3MgYW5kIHRoZSBjb21taXQgb2JzZXJ2ZXIuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBFdmVudExvZyB9IGZyb20gJy4vRXZlbnRMb2cuanMnO1xuaW1wb3J0IHsgc2NydWJQYXRjaCB9IGZyb20gJy4vc2NydWIuanMnO1xuaW1wb3J0IHR5cGUgeyBTaGFyZWRNZW1vcnkgfSBmcm9tICcuL1NoYXJlZE1lbW9yeS5qcyc7XG5pbXBvcnQgdHlwZSB7IFRyYW5zYWN0aW9uQnVmZmVyIH0gZnJvbSAnLi9UcmFuc2FjdGlvbkJ1ZmZlci5qcyc7XG5pbXBvcnQgdHlwZSB7IENvbW1pdEJ1bmRsZSwgQ29tbWl0UGhhc2UsIE1lbW9yeVBhdGNoLCBUcmFjZUVudHJ5LCBVbnRyYWNrZWRTb3VyY2UgfSBmcm9tICcuL3R5cGVzLmpzJztcblxuLyoqIE9uZSBzdGFnZSdzIG5ldCBjaGFuZ2UsIGFzIGBUcmFuc2FjdGlvbkJ1ZmZlciDCtyBjb21taXRgIGhhbmRzIGl0IG92ZXIuICovXG5leHBvcnQgdHlwZSBDb21taXRQYXlsb2FkID0gUmV0dXJuVHlwZTxUcmFuc2FjdGlvbkJ1ZmZlclsnY29tbWl0J10+O1xuXG4vKiogV2hhdCBuYW1lcyBhIGNvbW1pdCBvbiB0aGUgcmVjb3JkLCBiZXNpZGUgaXRzIHBheWxvYWQgKGxhdyAzKS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29tbWl0U3RhbXAge1xuICBzdGFnZTogc3RyaW5nO1xuICBzdGFnZUlkOiBzdHJpbmc7XG4gIHJ1bnRpbWVTdGFnZUlkOiBzdHJpbmc7XG4gIHVudHJhY2tlZFNvdXJjZXM/OiBSZWFkb25seVNldDxVbnRyYWNrZWRTb3VyY2U+O1xuICB0YWdzPzogcmVhZG9ubHkgc3RyaW5nW107XG4gIHBoYXNlPzogQ29tbWl0UGhhc2U7XG59XG5cbi8qKiBXaGVyZSBhIGNvbW1pdCBsYW5kczogbGl2ZSBzdGF0ZSBhbHdheXM7IHRoZSBtaXJyb3IgYW5kIHRoZSBsb2cgd2hlbiB0aGUgcnVuIGtlZXBzIHRoZW0uICovXG5leHBvcnQgaW50ZXJmYWNlIENvbW1pdFRhcmdldHMge1xuICBzdGF0ZTogU2hhcmVkTWVtb3J5O1xuICBtaXJyb3I/OiBTaGFyZWRNZW1vcnk7XG4gIGxvZz86IEV2ZW50TG9nO1xufVxuXG50eXBlIE5hbWVzID0gUGljazxDb21taXRCdW5kbGUsICdzdGFnZScgfCAnc3RhZ2VJZCcgfCAncnVudGltZVN0YWdlSWQnIHwgJ3VudHJhY2tlZFNvdXJjZXMnIHwgJ3RhZ3MnIHwgJ3BoYXNlJz47XG5cbi8qKiBSZWNvcmQgb25lIGNvbW1pdCAodGhlIG1vZHVsZSBsYXcpLiBgcGF5bG9hZGAgYWJzZW50ID0gdGhlIGVtcHR5IGNvbW1pdC4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZWNvcmRDb21taXQocGF5bG9hZDogQ29tbWl0UGF5bG9hZCB8IHVuZGVmaW5lZCwgc3RhbXA6IENvbW1pdFN0YW1wLCBpbnRvOiBDb21taXRUYXJnZXRzKTogdm9pZCB7XG4gIGlmIChwYXlsb2FkID09PSB1bmRlZmluZWQpIHtcbiAgICBpbnRvLmxvZz8ucmVjb3JkKGJ1bmRsZU9mKHt9LCB7fSwgW10sIFtdLCBuYW1lc09mKHN0YW1wKSkpO1xuICAgIHJldHVybjtcbiAgfVxuICBjb25zdCBuYW1lcyA9IG5hbWVzT2Yoc3RhbXApO1xuICBjb25zdCB7IHJlZGFjdGVkUGF0aHMsIHRyYWNlIH0gPSBwYXlsb2FkO1xuICBpbnRvLnN0YXRlLmFwcGx5UGF0Y2gocGF5bG9hZC5vdmVyd3JpdGUsIHBheWxvYWQudXBkYXRlcywgdHJhY2UpO1xuICBjb25zdCBvdmVyd3JpdGUgPSBzY3J1YlBhdGNoKHBheWxvYWQub3ZlcndyaXRlLCByZWRhY3RlZFBhdGhzKTtcbiAgY29uc3QgdXBkYXRlcyA9IHNjcnViUGF0Y2gocGF5bG9hZC51cGRhdGVzLCByZWRhY3RlZFBhdGhzKTtcbiAgaW50by5taXJyb3I/LmFwcGx5UGF0Y2gob3ZlcndyaXRlLCB1cGRhdGVzLCB0cmFjZSk7XG4gIGludG8ubG9nPy5yZWNvcmQoYnVuZGxlT2Yob3ZlcndyaXRlLCB1cGRhdGVzLCBbLi4ucmVkYWN0ZWRQYXRoc10sIHRyYWNlLCBuYW1lcykpO1xufVxuXG4vKiogVEhFIGJ1bmRsZSAobGF3IDMpOiB0aGUgcGF5bG9hZCdzIGZvdXIga2V5cywgdGhlIHRocmVlIG5hbWVzLCB0aGVuIGVhY2ggb3B0aW9uYWwgbmFtZSB0aGF0IGhhcyBzb21ldGhpbmcgdG8gc2F5LiAqL1xuZnVuY3Rpb24gYnVuZGxlT2YoXG4gIG92ZXJ3cml0ZTogTWVtb3J5UGF0Y2gsXG4gIHVwZGF0ZXM6IE1lbW9yeVBhdGNoLFxuICByZWRhY3RlZFBhdGhzOiBzdHJpbmdbXSxcbiAgdHJhY2U6IFRyYWNlRW50cnlbXSxcbiAgbmFtZXM6IE5hbWVzLFxuKTogQ29tbWl0QnVuZGxlIHtcbiAgY29uc3QgeyBzdGFnZSwgc3RhZ2VJZCwgcnVudGltZVN0YWdlSWQsIHVudHJhY2tlZFNvdXJjZXMsIHRhZ3MsIHBoYXNlIH0gPSBuYW1lcztcbiAgY29uc3QgYnVuZGxlOiBDb21taXRCdW5kbGUgPSB7IG92ZXJ3cml0ZSwgdXBkYXRlcywgcmVkYWN0ZWRQYXRocywgdHJhY2UsIHN0YWdlLCBzdGFnZUlkLCBydW50aW1lU3RhZ2VJZCB9O1xuICBpZiAodW50cmFja2VkU291cmNlcykgYnVuZGxlLnVudHJhY2tlZFNvdXJjZXMgPSB1bnRyYWNrZWRTb3VyY2VzO1xuICBpZiAodGFncykgYnVuZGxlLnRhZ3MgPSB0YWdzO1xuICBpZiAocGhhc2UpIGJ1bmRsZS5waGFzZSA9IHBoYXNlO1xuICByZXR1cm4gYnVuZGxlO1xufVxuXG4vKiogVGhlIG5hbWVzLCByZWFkIG9uY2Ug4oCUIGJlZm9yZSBhbnl0aGluZyBtb3ZlcyAobGF3IDIpLiBBbiBvcHRpb25hbCBvbmUgd2l0aCBub3RoaW5nIHRvIHNheSBpcyBgdW5kZWZpbmVkYC4gKi9cbmZ1bmN0aW9uIG5hbWVzT2YoeyBzdGFnZSwgc3RhZ2VJZCwgcnVudGltZVN0YWdlSWQsIHVudHJhY2tlZFNvdXJjZXMsIHRhZ3MsIHBoYXNlIH06IENvbW1pdFN0YW1wKTogTmFtZXMge1xuICByZXR1cm4ge1xuICAgIHN0YWdlLFxuICAgIHN0YWdlSWQsXG4gICAgcnVudGltZVN0YWdlSWQsXG4gICAgdW50cmFja2VkU291cmNlczogIXVudHJhY2tlZFNvdXJjZXMgfHwgdW50cmFja2VkU291cmNlcy5zaXplID09PSAwID8gdW5kZWZpbmVkIDogWy4uLnVudHJhY2tlZFNvdXJjZXNdLFxuICAgIHRhZ3M6ICF0YWdzIHx8IHRhZ3MubGVuZ3RoID09PSAwID8gdW5kZWZpbmVkIDogdGFncyxcbiAgICBwaGFzZTogcGhhc2UgfHwgdW5kZWZpbmVkLFxuICB9O1xufVxuIl19
@@ -40,16 +40,41 @@
40
40
  * the facade held the verdict alone, and every path that wrote or read past
41
41
  * the facade — five of them — retained plaintext under a policy.
42
42
  *
43
- * TWO PLACEHOLDERS, BOTH HISTORICAL: the commit log and the mirror carry
44
- * `'REDACTED'` (`scrubPatch` / `redactPatch`, below — the strings unchanged since 4.x); every scope-tier view —
45
- * scope recorder events, `stageReads`/`stageWrites`, narrative — carries
46
- * `'[REDACTED]'`. Neither string changed in 9.19.0. The strings themselves are
47
- * owned by `memory/placeholders.ts` (`LOG_PLACEHOLDER` / `SCOPE_PLACEHOLDER`)
48
- * and spelled nowhere else in `src/` — this rule asks for the scope one by name.
43
+ * ONE VERDICT OWNER, ONE ENCODING OWNER (C4). This file DECIDES — the rule,
44
+ * and for a staged write {@link decideWrite} (the verdict),
45
+ * {@link inheritByIdentity} and {@link markStagedWrite} (the marks) — and is
46
+ * the engine's (L4, beside the run policy that carries the rule). The BYTES of a
47
+ * verdict are the record's: the frame hands its scrub (`whole`, or the
48
+ * `fields` inside the value — {@link scrubOf}) to `RecordFrame · write`, and
49
+ * the record's own scrub (`memory/scrub.ts`, L2) writes the log's placeholder
50
+ * at commit. Before C4 the scrub lived here too, so the record imported the
51
+ * engine's policy module to write a string.
52
+ *
53
+ * TWO PLACEHOLDERS, BOTH HISTORICAL, ONE PER OWNER: the commit log and the
54
+ * mirror carry `'REDACTED'` (`LOG_PLACEHOLDER`, `memory/placeholders.ts` — a
55
+ * record byte, written by `memory/scrub.ts`); every scope-tier view — scope
56
+ * recorder events, `stageReads`/`stageWrites`, narrative — carries
57
+ * `'[REDACTED]'` ({@link SCOPE_PLACEHOLDER}, below — the verdict's own).
58
+ * Neither string changed in 9.19.0 or since; each is spelled once in `src/`.
49
59
  */
50
60
  import type { StructuredErrorInfo } from '../errors/errorInfo.js';
51
61
  import type { RedactionMarks } from '../pause/types.js';
52
- import type { MemoryPatch } from './types.js';
62
+ import type { WriteScrub, WriteVerb } from './RecordFrame.js';
63
+ /**
64
+ * What the SCOPE CHANNEL carries where a value was scrubbed: a scope recorder's read, write and
65
+ * commit events, the `stageReads` / `stageWrites` retention, the narrative, a decision's evidence, an
66
+ * emit payload matched by `emitPatterns`, a pause payload's served form and a subflow's narrated seed
67
+ * (`onSubflowEntry`) — every value this verdict serves, unless its caller passes the log's string.
68
+ *
69
+ * Its twin is the RECORD's `LOG_PLACEHOLDER` (`'REDACTED'`, `memory/placeholders.ts`): the commit log,
70
+ * the redacted mirror and everything served from them. So NOT every recorder event carries this one:
71
+ * `onSubflowExit.outputState` serves the subflow's redacted mirror when a policy keeps one, and so
72
+ * carries the log's string (without a mirror — per-call marks alone — it is the subflow's heap
73
+ * retained under the rule, with this one). Both strings are historical and neither changed when it
74
+ * moved: this one was the constant `REDACTED` in this file until F4a, then `placeholders.ts ·
75
+ * SCOPE_PLACEHOLDER`, and since C4 it lives here again, beside the verdict that writes it.
76
+ */
77
+ export declare const SCOPE_PLACEHOLDER = "[REDACTED]";
53
78
  /**
54
79
  * Declarative key/path redaction for recorded state and boundary records.
55
80
  *
@@ -127,6 +152,14 @@ export type RedactionVerdict = {
127
152
  readonly paths: readonly string[];
128
153
  };
129
154
  export declare const CLEAR: RedactionVerdict;
155
+ /**
156
+ * The user-level NAME of `key` under `path` — the key itself at the top level, else the segments
157
+ * joined by a dot (`['profile'] + 'auth'` → `'profile.auth'`): what a verdict decides on, a mark
158
+ * holds, and the frame keys a stage's retained reads and writes by (`StageContext`). A name, not an
159
+ * address — a key may contain a dot — so it never goes into a trace path. No allocation for the
160
+ * common top-level key. (The record spells the same name for `readKeys`, `RecordFrame · noteRead`.)
161
+ */
162
+ export declare function userKeyOf(path: readonly string[], key: string): string;
130
163
  export declare class RedactionRule {
131
164
  private policy;
132
165
  private diagnosticRule;
@@ -298,7 +331,7 @@ export declare class RedactionRule {
298
331
  * (declared or themselves inherited). Run-wide, by name, like a mark.
299
332
  */
300
333
  inheritFields(target: string, paths: readonly string[]): void;
301
- /** The verdict of a key a mapper read — `runs` (the run namespaces) is selected when any namespaced key is. */
334
+ /** The verdict of a key a mapper read — `runs` (the run namespaces, `RUN_NAMESPACE`) is selected when any namespaced key is. */
302
335
  verdictOfRead(key: string, value: unknown): RedactionVerdict;
303
336
  /**
304
337
  * The retained / served form of a value at a path: the placeholder, a
@@ -381,6 +414,43 @@ export declare class RedactionRule {
381
414
  static scrubFields(value: unknown, paths: readonly string[], placeholder?: string): Record<string, unknown> | undefined;
382
415
  report(): RedactionReport;
383
416
  }
417
+ /**
418
+ * Step 1 — THE VERDICT for one staged write: an explicit per-call flag (`setValue(key, value, true)`)
419
+ * makes the value secret whole under its user-level key; else the `active` rule decides from the
420
+ * user-level path; with none (no rule, or an inert one — the caller passes `undefined`), clear, with no
421
+ * verdict call and no path allocation (the no-policy fast path). Marks nothing.
422
+ *
423
+ * ```ts
424
+ * decideWrite(new RedactionRule({ fields: { card: ['number'] } }), [], 'card', false); // { kind: 'fields', key: 'card', paths: ['number'] }
425
+ * decideWrite(undefined, ['profile'], 'auth', true); // { kind: 'whole', key: 'profile.auth' }
426
+ * ```
427
+ */
428
+ export declare function decideWrite(active: RedactionRule | undefined, path: readonly string[], key: string, explicit: boolean | undefined): RedactionVerdict;
429
+ /**
430
+ * Step 2 — IDENTITY: an OBJECT the stage read under a selected name (`selected` — the frame's selected
431
+ * reads, filled by its tracked reads), written under another name (`s.person = s.profile`), keeps that
432
+ * read's rule, matched by identity: a whole read marks the new key, a `fields` read hands it the fields
433
+ * (re-based under the written path), and the verdict is asked again. A new object, a primitive, or a
434
+ * write already whole is selected by its own name only — `verdict` comes back as it is. Decided BEFORE
435
+ * the write, because the verdict needs it: an inheritance stays even if the write then fails to stage.
436
+ */
437
+ export declare function inheritByIdentity(active: RedactionRule | undefined, verdict: RedactionVerdict, selected: WeakMap<object, RedactionVerdict> | undefined, path: readonly string[], key: string, value: unknown): RedactionVerdict;
438
+ /**
439
+ * Step 3's input — a verdict's BYTES for the record (`RecordFrame · write`): nothing when clear, the
440
+ * whole value, or the fields inside it. No allocation on the default path (clear) or for a whole verdict.
441
+ */
442
+ export declare function scrubOf(verdict: RedactionVerdict): WriteScrub | undefined;
443
+ /**
444
+ * Step 4 — the MARKS a staged write leaves; call it only once the write staged, so a write that fails to
445
+ * stage marks nothing. A delete clears its key's mark (and any fields a mapper handed it) on `active`,
446
+ * the rule that was active as the write BEGAN — none when it was inert, even if user code marked the key
447
+ * during the write. A whole verdict marks its key — the key that DECIDED it (`verdict.key`: an ancestor
448
+ * for a nested write under a whole-selected key) — for the rest of the run on `rule`, the run's rule as
449
+ * it stands NOW (user code during the write may have installed one; an explicit mark is what makes an
450
+ * inert rule active). A mark is a run-wide NAME: it stays when the stage's commit fails or a retry
451
+ * discards the attempt — the safe side; only a staged delete removes one.
452
+ */
453
+ export declare function markStagedWrite(active: RedactionRule | undefined, rule: RedactionRule | undefined, verdict: RedactionVerdict, path: readonly string[], key: string, verb: WriteVerb): void;
384
454
  /**
385
455
  * Path visits one walk may make — reachable only under a PATH-dependent
386
456
  * pattern over a value whose paths outnumber its objects (a linked history, a
@@ -518,35 +588,3 @@ export declare class MapperTaint {
518
588
  /** Does a value the mapper BUILT embed, by reference, a selected record it read or was handed? */
519
589
  private embedsSelected;
520
590
  }
521
- /**
522
- * The commit log's scrub: `patch` with {@link LOG_PLACEHOLDER} at every path in `redactedPaths` that
523
- * holds a defined value — the copy `recordCommit` records and feeds the redacted mirror.
524
- *
525
- * CLONE-FREE (9.33.0). The patch is the transaction buffer's commit-time payload, already the record's
526
- * own copy (`TransactionBuffer · commit` clones each surviving path once; the buffer is dropped at
527
- * commit), so the scrub copies only what it must not edit in place:
528
- * - no path to scrub (no policy, no per-call mark — the common case) → `patch` ITSELF, no copy at all;
529
- * - otherwise → a new root and a shallow copy of each container on a scrubbed path (`pathOps ·
530
- * ownSpine`), every other subtree shared with `patch`. `patch` is never edited.
531
- * The engine called the public {@link redactPatch} (a whole `structuredClone`) twice per commit before
532
- * 9.33.0. The bytes are the same: a scrubbed path holds the placeholder, every other path the value the
533
- * buffer cloned (pinned by the 9.18.1 / 9.19.1 redaction byte tests).
534
- *
535
- * Paths are scrubbed in the set's order, against the tree as scrubbed so far: a path under one already
536
- * scrubbed finds a string, not a container, and is left alone (as before).
537
- *
538
- * INTERNAL — the result shares structure with `patch`. A caller outside the commit path wants
539
- * {@link redactPatch}.
540
- *
541
- * @param redactedPaths DELIM-joined paths (`TransactionBuffer`'s `redactedPaths`; a bundle's
542
- * `redactedPaths` array works too).
543
- */
544
- export declare function scrubPatch(patch: MemoryPatch, redactedPaths: Iterable<string>): MemoryPatch;
545
- /**
546
- * Redacts sensitive values in a patch for logging/debugging — the PUBLIC scrub (`footprintjs/advanced`),
547
- * its contract unchanged since 4.x: a fresh deep copy of `patch` (`structuredClone`) with
548
- * {@link LOG_PLACEHOLDER} at every listed path that holds a defined value. Shares nothing with `patch`
549
- * and never edits it. (Moved here from `memory/utils.ts` in 9.33.0; the engine's own commit path uses the
550
- * clone-free {@link scrubPatch}.)
551
- */
552
- export declare function redactPatch(patch: MemoryPatch, redactedSet: Set<string>): MemoryPatch;