footprintjs 9.46.0 → 9.47.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (82) hide show
  1. package/AGENTS.md +4 -3
  2. package/CLAUDE.md +8 -8
  3. package/README.md +1 -1
  4. package/dist/advanced.js +95 -90
  5. package/dist/esm/advanced.d.ts +16 -10
  6. package/dist/esm/advanced.js +14 -9
  7. package/dist/esm/index.d.ts +4 -2
  8. package/dist/esm/index.js +5 -3
  9. package/dist/esm/lib/decide/evaluator.js +2 -2
  10. package/dist/esm/lib/decide/evidence.js +2 -2
  11. package/dist/esm/lib/engine/handlers/servedPause.js +2 -2
  12. package/dist/esm/lib/memory/EventLog.d.ts +1 -1
  13. package/dist/esm/lib/memory/EventLog.js +2 -2
  14. package/dist/esm/lib/memory/RecordFrame.d.ts +41 -6
  15. package/dist/esm/lib/memory/RecordFrame.js +36 -5
  16. package/dist/esm/lib/memory/SharedMemory.d.ts +1 -1
  17. package/dist/esm/lib/memory/SharedMemory.js +2 -2
  18. package/dist/esm/lib/memory/StageContext.d.ts +21 -14
  19. package/dist/esm/lib/memory/StageContext.js +36 -74
  20. package/dist/esm/lib/memory/borrowedMutation.d.ts +1 -1
  21. package/dist/esm/lib/memory/borrowedMutation.js +2 -2
  22. package/dist/esm/lib/memory/honesty.d.ts +4 -3
  23. package/dist/esm/lib/memory/honesty.js +5 -4
  24. package/dist/esm/lib/memory/index.d.ts +4 -2
  25. package/dist/esm/lib/memory/index.js +6 -4
  26. package/dist/esm/lib/memory/placeholders.d.ts +23 -28
  27. package/dist/esm/lib/memory/placeholders.js +24 -29
  28. package/dist/esm/lib/memory/recordCommit.d.ts +5 -3
  29. package/dist/esm/lib/memory/recordCommit.js +7 -5
  30. package/dist/esm/lib/memory/redaction.d.ts +78 -40
  31. package/dist/esm/lib/memory/redaction.js +130 -64
  32. package/dist/esm/lib/memory/runAddress.d.ts +20 -0
  33. package/dist/esm/lib/memory/runAddress.js +25 -0
  34. package/dist/esm/lib/memory/scrub.d.ts +53 -0
  35. package/dist/esm/lib/memory/scrub.js +74 -0
  36. package/dist/esm/lib/memory/utils.d.ts +3 -3
  37. package/dist/esm/lib/memory/utils.js +4 -4
  38. package/dist/esm/lib/memory/verbs.d.ts +1 -1
  39. package/dist/esm/lib/memory/verbs.js +2 -2
  40. package/dist/esm/trace.d.ts +2 -0
  41. package/dist/esm/trace.js +3 -2
  42. package/dist/esm/write.d.ts +47 -0
  43. package/dist/esm/write.js +46 -0
  44. package/dist/index.js +5 -3
  45. package/dist/lib/decide/evaluator.js +3 -3
  46. package/dist/lib/decide/evidence.js +3 -3
  47. package/dist/lib/engine/handlers/servedPause.js +3 -3
  48. package/dist/lib/memory/EventLog.js +2 -2
  49. package/dist/lib/memory/RecordFrame.js +36 -5
  50. package/dist/lib/memory/SharedMemory.js +2 -2
  51. package/dist/lib/memory/StageContext.js +42 -80
  52. package/dist/lib/memory/borrowedMutation.js +2 -2
  53. package/dist/lib/memory/honesty.js +5 -4
  54. package/dist/lib/memory/index.js +6 -4
  55. package/dist/lib/memory/placeholders.js +25 -30
  56. package/dist/lib/memory/recordCommit.js +9 -7
  57. package/dist/lib/memory/redaction.js +144 -75
  58. package/dist/lib/memory/runAddress.js +29 -0
  59. package/dist/lib/memory/scrub.js +79 -0
  60. package/dist/lib/memory/utils.js +4 -4
  61. package/dist/lib/memory/verbs.js +2 -2
  62. package/dist/trace.js +6 -4
  63. package/dist/types/advanced.d.ts +16 -10
  64. package/dist/types/index.d.ts +4 -2
  65. package/dist/types/lib/memory/EventLog.d.ts +1 -1
  66. package/dist/types/lib/memory/RecordFrame.d.ts +41 -6
  67. package/dist/types/lib/memory/SharedMemory.d.ts +1 -1
  68. package/dist/types/lib/memory/StageContext.d.ts +21 -14
  69. package/dist/types/lib/memory/borrowedMutation.d.ts +1 -1
  70. package/dist/types/lib/memory/honesty.d.ts +4 -3
  71. package/dist/types/lib/memory/index.d.ts +4 -2
  72. package/dist/types/lib/memory/placeholders.d.ts +23 -28
  73. package/dist/types/lib/memory/recordCommit.d.ts +5 -3
  74. package/dist/types/lib/memory/redaction.d.ts +78 -40
  75. package/dist/types/lib/memory/runAddress.d.ts +20 -0
  76. package/dist/types/lib/memory/scrub.d.ts +53 -0
  77. package/dist/types/lib/memory/utils.d.ts +3 -3
  78. package/dist/types/lib/memory/verbs.d.ts +1 -1
  79. package/dist/types/trace.d.ts +2 -0
  80. package/dist/types/write.d.ts +47 -0
  81. package/dist/write.js +52 -0
  82. package/package.json +15 -1
package/dist/esm/trace.js CHANGED
@@ -47,9 +47,10 @@ export { walkSubflowSpec } from './lib/engine/walkSubflowSpec.js';
47
47
  export { pathSegments } from './lib/memory/utils.js';
48
48
  // The refusal the commit-log readers raise for a row whose verb is not
49
49
  // set | merge | append | delete (`commitValueAt`, `arrayProvenance`, and
50
- // `applySmartMerge` on `/advanced`): a foreign or corrupted log fails loudly,
50
+ // `applySmartMerge` below): a foreign or corrupted log fails loudly,
51
51
  // naming the row, instead of being folded as a merge.
52
52
  export { UnknownVerbError } from './lib/memory/index.js';
53
+ export { applySmartMerge } from './lib/memory/verbs.js';
53
54
  export { buildCommitIndex, commitIndexOf, commitValueAt, commitValueAtWithBasis, findCommit, findCommits, findLastWriter, findLastWriterWithBasis,
54
55
  // One stage, one record (F8, 9.39.0): does a log record its continuations
55
56
  // (`CommitBundle.phase`), and — for a log written before it — the ONE legacy
@@ -72,4 +73,4 @@ export { InOutRecorder, inOutRecorder, ROOT_RUNTIME_STAGE_ID, ROOT_SUBFLOW_ID }
72
73
  export { ControlDepRecorder, controlDepRecorder } from './lib/recorder/ControlDepRecorder.js';
73
74
  export { QualityRecorder } from './lib/recorder/QualityRecorder.js';
74
75
  export { formatQualityTrace, qualityTrace } from './lib/recorder/qualityTrace.js';
75
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdHJhY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQThCRztBQUlILE9BQU8sRUFDTCxtQkFBbUIsRUFDbkIsc0JBQXNCLEVBQ3RCLG1CQUFtQixFQUNuQixZQUFZLEdBQ2IsTUFBTSw2QkFBNkIsQ0FBQztBQUVyQyw2RUFBNkU7QUFDN0UsNkVBQTZFO0FBQzdFLGdGQUFnRjtBQUNoRixnRkFBZ0Y7QUFDaEYsd0VBQXdFO0FBQ3hFLHdEQUF3RDtBQUN4RCw0Q0FBNEM7QUFDNUMsT0FBTyxFQUNMLHFCQUFxQixFQUNyQixrQkFBa0IsRUFDbEIsc0JBQXNCLEVBQ3RCLGVBQWUsRUFDZixrQkFBa0IsR0FDbkIsTUFBTSw0QkFBNEIsQ0FBQztBQUtwQyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFFbEUsNkVBQTZFO0FBQzdFLCtFQUErRTtBQUMvRSx5RUFBeUU7QUFDekUsOEVBQThFO0FBQzlFLG9FQUFvRTtBQUNwRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFckQsdUVBQXVFO0FBQ3ZFLHlFQUF5RTtBQUN6RSw4RUFBOEU7QUFDOUUsc0RBQXNEO0FBQ3RELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBYXpELE9BQU8sRUFDTCxnQkFBZ0IsRUFDaEIsYUFBYSxFQUNiLGFBQWEsRUFDYixzQkFBc0IsRUFDdEIsVUFBVSxFQUNWLFdBQVcsRUFDWCxjQUFjLEVBQ2QsdUJBQXVCO0FBQ3ZCLDBFQUEwRTtBQUMxRSw2RUFBNkU7QUFDN0UsOENBQThDO0FBQzlDLGlCQUFpQixFQUNqQixhQUFhLEdBQ2QsTUFBTSxnQ0FBZ0MsQ0FBQztBQTBDeEMsT0FBTyxFQUNMLFdBQVcsRUFDWCxtQkFBbUIsRUFDbkIsV0FBVyxFQUNYLGNBQWMsRUFDZCxTQUFTLEVBQ1QsT0FBTyxFQUNQLFFBQVEsRUFDUixVQUFVLEdBQ1gsTUFBTSw0QkFBNEIsQ0FBQztBQWVwQyxPQUFPLEVBQUUsV0FBVyxFQUFFLGdCQUFnQixFQUFFLGlCQUFpQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUEyQzdGLE9BQU8sRUFDTCxlQUFlLEVBQ2YsaUJBQWlCLEVBQ2pCLGtCQUFrQixFQUNsQixXQUFXLEVBQ1gsY0FBYyxFQUNkLGtCQUFrQixFQUNsQixrQkFBa0IsRUFDbEIseUJBQXlCLEVBQ3pCLGVBQWUsRUFDZixXQUFXLEVBQ1gsaUJBQWlCLEVBQ2pCLHFCQUFxQixFQUNyQixXQUFXLEVBQ1gsV0FBVyxHQUNaLE1BQU0sc0JBQXNCLENBQUM7QUFhOUIsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRXRELG1FQUFtRTtBQUNuRSxpRUFBaUU7QUFDakUsaUVBQWlFO0FBQ2pFLDRDQUE0QztBQUM1QyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUMxRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDMUQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBU2hFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBVXRFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBS3hGLE9BQU8sRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLHFCQUFxQixFQUFFLGVBQWUsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBT3ZILE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBSTlGLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUlwRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0NBQWdDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIGZvb3RwcmludGpzL3RyYWNlIOKAlCBFeGVjdXRpb24gdHJhY2luZywgZGVidWdnaW5nLCBhbmQgYmFja3RyYWNraW5nIHV0aWxpdGllcy5cbiAqXG4gKiBSdW50aW1lIHN0YWdlIElEcywgY29tbWl0IGxvZyBxdWVyaWVzLCBhbmQgcmVjb3JkZXIgYmFzZSBjbGFzc2VzLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBpbXBvcnQgeyBwYXJzZVJ1bnRpbWVTdGFnZUlkLCBmaW5kTGFzdFdyaXRlciwgS2V5ZWRTdG9yZSwgU2VxdWVuY2VTdG9yZSB9IGZyb20gJ2Zvb3RwcmludGpzL3RyYWNlJztcbiAqXG4gKiAvLyBQYXJzZSBhIHJ1bnRpbWVTdGFnZUlkXG4gKiBjb25zdCB7IHN0YWdlSWQsIGV4ZWN1dGlvbkluZGV4IH0gPSBwYXJzZVJ1bnRpbWVTdGFnZUlkKCdjYWxsLWxsbSM1Jyk7XG4gKlxuICogLy8gQmFja3RyYWNrOiB3aG8gd3JvdGUgJ3N5c3RlbVByb21wdCcgYmVmb3JlIGNvbW1pdCBhdCBpZHggOD9cbiAqIGNvbnN0IHdyaXRlciA9IGZpbmRMYXN0V3JpdGVyKGNvbW1pdExvZywgJ3N5c3RlbVByb21wdCcsIDgpO1xuICpcbiAqIC8vIHY1IHByaW1hcnkgQVBJOiBjb21wb3NlIGEgU3RvcmUgYXMgYSBmaWVsZCAob25lIHB1cnBvc2UgcGVyIHJlY29yZGVyKS5cbiAqIC8vIEtleWVkU3RvcmU8VD4g4oCUIDE6MSAob25lIGVudHJ5IHBlciBzdGVwKVxuICogY2xhc3MgTXlSZWNvcmRlciB7XG4gKiAgIHJlYWRvbmx5IGlkID0gJ215LXJlY29yZGVyJztcbiAqICAgcHJpdmF0ZSBzdG9yZSA9IG5ldyBLZXllZFN0b3JlPE15RW50cnk+KCk7XG4gKiAgIG9uV3JpdGUoZSkgeyB0aGlzLnN0b3JlLnNldChlLnJ1bnRpbWVTdGFnZUlkLCB7IC4uLiB9KTsgfVxuICogfVxuICpcbiAqIC8vIFNlcXVlbmNlU3RvcmU8VD4g4oCUIDE6TiAobXVsdGlwbGUgZW50cmllcyBwZXIgc3RlcCwgb3JkZXJpbmcgbWF0dGVycylcbiAqIGNsYXNzIEF1ZGl0UmVjb3JkZXIge1xuICogICByZWFkb25seSBpZCA9ICdhdWRpdCc7XG4gKiAgIHByaXZhdGUgc3RvcmUgPSBuZXcgU2VxdWVuY2VTdG9yZTxBdWRpdEVudHJ5PigpO1xuICogICBvblJlYWQoZSkgeyB0aGlzLnN0b3JlLnB1c2goeyBydW50aW1lU3RhZ2VJZDogZS5ydW50aW1lU3RhZ2VJZCwgLi4uIH0pOyB9XG4gKiB9XG4gKiBgYGBcbiAqL1xuXG4vLyBSdW50aW1lIHN0YWdlIElEIOKAlCB1bmlxdWUgZXhlY3V0aW9uIHN0ZXAgaWRlbnRpZmllcnNcbmV4cG9ydCB0eXBlIHsgQ29tbWl0SWR4LCBFeGVjdXRpb25Db3VudGVyLCBFeGVjdXRpb25JbmRleCwgUnVudGltZVN0YWdlSWQgfSBmcm9tICcuL2xpYi9pZHMvcnVudGltZVN0YWdlSWQuanMnO1xuZXhwb3J0IHtcbiAgYnVpbGRSdW50aW1lU3RhZ2VJZCxcbiAgY3JlYXRlRXhlY3V0aW9uQ291bnRlcixcbiAgcGFyc2VSdW50aW1lU3RhZ2VJZCxcbiAgc3BsaXRTdGFnZUlkLFxufSBmcm9tICcuL2xpYi9pZHMvcnVudGltZVN0YWdlSWQuanMnO1xuXG4vLyBHZW5lcmF0ZWQgYnJhbmNoIHNlZ21lbnRzIOKAlCB0aGUgc3ViZmxvdyBwYXRoIHNlZ21lbnRzIGBhZGRQYXJhbGxlbEZvckVhY2hgXG4vLyBtaW50cyBmb3IgaXRzIGJyYW5jaGVzIChgPHN0YWdlSWQ+fjxpbmRleD5gKS4gQSBicmFuY2ggaXMgYWRkcmVzc2VkIGJ5IHRoZVxuLy8gT1JESU5BUlkgZ3JhbW1hciBhYm92ZSwgc28gbm90aGluZyBoZXJlIGlzIG5lZWRlZCB0byBSRUFEIG9uZTsgdGhlc2UgZXhpc3Qgc29cbi8vIGEgY29uc3VtZXIgY2FuIFRFTEwgYSBnZW5lcmF0ZWQgYnJhbmNoIGZyb20gYSBoYW5kLWF1dGhvcmVkIHN1YmZsb3cgKHRvIGxhYmVsXG4vLyBpdCBcImJyYW5jaCAyIG9mIHJldmlldy1jaHVua3NcIiBpbnN0ZWFkIG9mIGEgc3ViZmxvdyBuYW1lKSwgYW5kIHNvIHRoZVxuLy8gcmVzZXJ2ZWQgbWFya2VyIGlzIGRpc2NvdmVyYWJsZSByYXRoZXIgdGhhbiBmb2xrbG9yZS5cbi8vIERlc2lnbjogZG9jcy9kZXNpZ24vZXhlY3V0aW9uLWNvbnRyb2wubWQuXG5leHBvcnQge1xuICBCUkFOQ0hfU0VHTUVOVF9NQVJLRVIsXG4gIGJ1aWxkQnJhbmNoU2VnbWVudCxcbiAgaGFzQnJhbmNoU2VnbWVudE1hcmtlcixcbiAgaXNCcmFuY2hTZWdtZW50LFxuICBwYXJzZUJyYW5jaFNlZ21lbnQsXG59IGZyb20gJy4vbGliL2lkcy9icmFuY2hTZWdtZW50LmpzJztcblxuLy8gd2Fsa1N1YmZsb3dTcGVjIOKAlCBmbGF0IG9yZGVyZWQgdHJhdmVyc2FsIG9mIGEgc3ViZmxvdydzIHN0cnVjdHVyZVxuLy8gKGNvbnN1bWUgdmlhIFN0cnVjdHVyZVJlY29yZGVyLm9uU3ViZmxvd01vdW50ZWQncyBzdWJmbG93U3BlYyBwYXlsb2FkKVxuZXhwb3J0IHR5cGUgeyBXYWxrZXJJdGVtLCBXYWxrZXJPcHRpb25zIH0gZnJvbSAnLi9saWIvZW5naW5lL3dhbGtTdWJmbG93U3BlYy5qcyc7XG5leHBvcnQgeyB3YWxrU3ViZmxvd1NwZWMgfSBmcm9tICcuL2xpYi9lbmdpbmUvd2Fsa1N1YmZsb3dTcGVjLmpzJztcblxuLy8gUGF0aCBzZWdtZW50cyDigJQgdGhlIHN1cHBvcnRlZCB3YXkgdG8gdGFrZSBhIGBUcmFjZUVudHJ5LnBhdGhgIGFwYXJ0LiBQYXRoc1xuLy8gYXJlIGpvaW5lZCB3aXRoIGFuIEFTQ0lJIFVuaXQtU2VwYXJhdG9yIChuZXZlciBhIGRvdDogYSBzdGF0ZSBrZXkgbWF5IGl0c2VsZlxuLy8gY29udGFpbiBhIGRvdCwgc28gYSBkb3Qgc2VwYXJhdG9yIHdvdWxkIG1ha2UgYFsnYS5iJ11gIGFuZCBgWydhJywnYiddYFxuLy8gaW5kaXN0aW5ndWlzaGFibGUpLCB3aGljaCBpcyBhbiBlbmNvZGluZywgbm90IGEgZGlzcGxheSBjaGFyYWN0ZXIuIFJlbmRlciBhXG4vLyBwYXRoIHRocm91Z2ggdGhpcyBpbnN0ZWFkIG9mIHNwbGl0dGluZyBvbiB0aGUgZGVsaW1pdGVyIHlvdXJzZWxmLlxuZXhwb3J0IHsgcGF0aFNlZ21lbnRzIH0gZnJvbSAnLi9saWIvbWVtb3J5L3V0aWxzLmpzJztcblxuLy8gVGhlIHJlZnVzYWwgdGhlIGNvbW1pdC1sb2cgcmVhZGVycyByYWlzZSBmb3IgYSByb3cgd2hvc2UgdmVyYiBpcyBub3Rcbi8vIHNldCB8IG1lcmdlIHwgYXBwZW5kIHwgZGVsZXRlIChgY29tbWl0VmFsdWVBdGAsIGBhcnJheVByb3ZlbmFuY2VgLCBhbmRcbi8vIGBhcHBseVNtYXJ0TWVyZ2VgIG9uIGAvYWR2YW5jZWRgKTogYSBmb3JlaWduIG9yIGNvcnJ1cHRlZCBsb2cgZmFpbHMgbG91ZGx5LFxuLy8gbmFtaW5nIHRoZSByb3csIGluc3RlYWQgb2YgYmVpbmcgZm9sZGVkIGFzIGEgbWVyZ2UuXG5leHBvcnQgeyBVbmtub3duVmVyYkVycm9yIH0gZnJvbSAnLi9saWIvbWVtb3J5L2luZGV4LmpzJztcblxuLy8gQ29tbWl0IGxvZyBxdWVyaWVzIOKAlCB0eXBlZCB1dGlsaXRpZXMgZm9yIGJhY2t0cmFja2luZy5cbi8vIGNvbW1pdFZhbHVlQXQgcmVjb25zdHJ1Y3RzIHRoZSBGVUxMIHZhbHVlIG9mIGEga2V5IGF0IGEgY29tbWl0IGluZGV4IOKAlFxuLy8gcmVxdWlyZWQgdW5kZXIgYGNvbW1pdFZhbHVlczogJ2RlbHRhJ2AgKCMxM2MtQiksIHdoZXJlIGFuIGBhcHBlbmRgXG4vLyBidW5kbGUncyBgb3ZlcndyaXRlW2tleV1gIGhvbGRzIG9ubHkgdGhlIHRhaWwuXG5leHBvcnQgdHlwZSB7XG4gIFZhbHVlQmFzaXMsXG4gIFZhbHVlQmFzaXNPcHRpb25zLFxuICBWYWx1ZVdpdGhCYXNpcyxcbiAgV3JpdGVyQmFzaXMsXG4gIFdyaXRlcldpdGhCYXNpcyxcbn0gZnJvbSAnLi9saWIvbWVtb3J5L2NvbW1pdExvZ1V0aWxzLmpzJztcbmV4cG9ydCB7XG4gIGJ1aWxkQ29tbWl0SW5kZXgsXG4gIGNvbW1pdEluZGV4T2YsXG4gIGNvbW1pdFZhbHVlQXQsXG4gIGNvbW1pdFZhbHVlQXRXaXRoQmFzaXMsXG4gIGZpbmRDb21taXQsXG4gIGZpbmRDb21taXRzLFxuICBmaW5kTGFzdFdyaXRlcixcbiAgZmluZExhc3RXcml0ZXJXaXRoQmFzaXMsXG4gIC8vIE9uZSBzdGFnZSwgb25lIHJlY29yZCAoRjgsIDkuMzkuMCk6IGRvZXMgYSBsb2cgcmVjb3JkIGl0cyBjb250aW51YXRpb25zXG4gIC8vIChgQ29tbWl0QnVuZGxlLnBoYXNlYCksIGFuZCDigJQgZm9yIGEgbG9nIHdyaXR0ZW4gYmVmb3JlIGl0IOKAlCB0aGUgT05FIGxlZ2FjeVxuICAvLyByZWFkZXIgdGhhdCBpbmZlcnMgdGhlbSB0aGUgd2F5IDkuMzguMCBkaWQuXG4gIGluZmVyTGVnYWN5UGhhc2VzLFxuICByZWNvcmRzUGhhc2VzLFxufSBmcm9tICcuL2xpYi9tZW1vcnkvY29tbWl0TG9nVXRpbHMuanMnO1xuZXhwb3J0IHR5cGUgeyBDb21taXRQaGFzZSB9IGZyb20gJy4vbGliL21lbW9yeS90eXBlcy5qcyc7XG5cbi8vIOKUgOKUgCB0aW1lLXRyYXZlbC8g4oCUIHRoZSBSRUFERVInUyBjdXJzb3Igb3ZlciBhIGZpbmlzaGVkIHRyYWNlIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuLy8gQSBUcmFjZSBpcyB3aGF0IHRoZSBydW4gcmVjb3JkZWQ7IHRpbWUgdHJhdmVsIGlzIGEgY3Vyc29yIG92ZXIgaXQgd2l0aCBhXG4vLyBGb2xkIGF0IGVhY2ggc3RvcC4gSXQgaXMgTk9UIHRoZSBlbmdpbmUncyB3YWxrIGFuZCBuZXZlciBiZWNvbWVzIGEgc2Vjb25kXG4vLyBsaXZlIGN1cnNvcjogZXZlcnl0aGluZyBiZWxvdyBpcyBhIHJlYWQtdGltZSBxdWVyeSBvdmVyIGFscmVhZHktY29sbGVjdGVkXG4vLyBkYXRhLlxuLy9cbi8vIGBzdGF0ZUF0KHNuYXBzaG90IHwgc3VidHJlZSwgY29tbWl0SWR4KWAgaXMgdGhlIGZvbGQg4oCUIHRoZSBydW4nc1xuLy8gYGluaXRpYWxTdGF0ZWAgcmVwbGF5ZWQgdGhyb3VnaCBgY29tbWl0TG9nWzAuLmNvbW1pdElkeF1gIHdpdGggdGhlIFNBTUUgdmVyYlxuLy8gc3dpdGNoIHRoZSBsaXZlIGNvbW1pdCB1c2VzLCByZXR1cm5lZCBkZXRhY2hlZCBhbmQgZnJvemVuLCBhbmQgaG9uZXN0IGFib3V0XG4vLyBob3cgaXQgd2FzIGRlcml2ZWQgKGBiYXNpc2ApIGFuZCB3aGVyZSB0aGUgbG9nIHdhcyBzY3J1YmJlZCAoYHJlZGFjdGVkYCkuXG4vL1xuLy8gYHRpbWVUcmF2ZWwoc25hcHNob3QpYCBpcyB0aGUgY3Vyc29yOiBzdG9wcywgcHJldi9uZXh0L2p1bXBUbywgbWFya3MgYmVzaWRlXG4vLyB0aGUgbG9nLCBhbmQgYGRyaWxsKG1vdW50KWAgaW50byBhIHN1YmZsb3cncyBvd24gbG9nIOKAlCB0aGUgc2FtZSBpbnRlcmZhY2UsXG4vLyBpdHMgb3duIGJhc2UuIEhvdyBzdG9wcyBhcmUgREVSSVZFRCBpcyB0aGUgc2VhbSAoYFRpbWVUcmF2ZWxTdHJhdGVneWApO1xuLy8gZm9vdHByaW50anMgc2hpcHMgYGNvbW1pdFN0b3BzYCAob25lIHN0b3AgcGVyIGV4ZWN1dGVkIHN0YWdlKSBiZWNhdXNlIHRoYXRcbi8vIGlzIHRoZSBvbmx5IHN0b3AgZ3JhbW1hciB0aGUgc3Vic3RyYXRlIGl0c2VsZiBrbm93cyDigJQgYW5kLCBzaW5jZSA5LjIxLjAsXG4vLyBgdGFnU3RvcHModGFncz8pYDogdGhlIHN0b3BzIGEgY2hhcnQgREVDTEFSRUQgYXQgYnVpbGQgdGltZSAoYC50YWcoKWApLFxuLy8gcmVhZCBiYWNrIG9mZiBgQ29tbWl0QnVuZGxlLnRhZ3NgLCBzbyBhIHN0b3JlZCByZWNvcmRpbmcgc2NydWJzIGJ5IGl0cyBvd25cbi8vIG1pbGVzdG9uZXMgd2l0aCBubyBpZCBjb252ZW50aW9ucyBpbiB0aGUgcmVhZGVyLlxuLy8gU2VlIHNyYy9saWIvdGltZS10cmF2ZWwvUkVBRE1FLm1kLlxuZXhwb3J0IHR5cGUge1xuICBBeGlzUmVmdXNhbCxcbiAgQXhpc1NwbGl0LFxuICBCb29rZW5kZWRBeGlzLFxuICBGb2xkQmFzaXMsXG4gIEZvbGRlZFN0YXRlLFxuICBGb2xkU291cmNlLFxuICBMb2dHYXAsXG4gIE1hcmssXG4gIE1vdmUsXG4gIE1vdmVSZWZ1c2FsLFxuICBTdG9wLFxuICBTdG9wRmlsdGVyLFxuICBTdG9wS2luZCxcbiAgVGltZVRyYXZlbCxcbiAgVGltZVRyYXZlbE9wdGlvbnMsXG4gIFRpbWVUcmF2ZWxTb3VyY2UsXG4gIFRpbWVUcmF2ZWxTdHJhdGVneSxcbn0gZnJvbSAnLi9saWIvdGltZS10cmF2ZWwvaW5kZXguanMnO1xuZXhwb3J0IHtcbiAgY29tbWl0U3RvcHMsXG4gIGNvbW1pdFN0b3BzU3RyYXRlZ3ksXG4gIGZpbHRlclN0b3BzLFxuICBpc0NvbW1pdEJ1bmRsZSxcbiAgc3BsaXRBeGlzLFxuICBzdGF0ZUF0LFxuICB0YWdTdG9wcyxcbiAgdGltZVRyYXZlbCxcbn0gZnJvbSAnLi9saWIvdGltZS10cmF2ZWwvaW5kZXguanMnO1xuXG4vLyBDYXVzYWwgY2hhaW4g4oCUIGJhY2t3YXJkIHByb2dyYW0gc2xpY2luZyBvbiBjb21taXQgbG9nIChEQUcpLlxuLy8gUkZDLTAwMyBEMzogYENhdXNhbEVkZ2VgICh0eXBlZC9rZXllZC93ZWlnaHRlZCBwYXJlbnQgbGlua3Mgb25cbi8vIGBDYXVzYWxOb2RlLnBhcmVudEVkZ2VzYCkgKyB0aGUgYGNvbnRyb2xEZXBzYCBvcHRpb24gKGBDb250cm9sRGVwTG9va3VwYClcbi8vIGFkZCBjb250cm9sLWRlcGVuZGVuY2UgZWRnZXMgdG8gdGhlIHNsaWNlLlxuZXhwb3J0IHR5cGUge1xuICBDYXVzYWxDaGFpbk9wdGlvbnMsXG4gIENhdXNhbEVkZ2UsXG4gIENhdXNhbE5vZGUsXG4gIENvbnRyb2xEZXBlbmRlbmN5LFxuICBDb250cm9sRGVwTG9va3VwLFxuICBFZGdlV2VpZ2hlcixcbiAgS2V5c1JlYWRMb29rdXAsXG59IGZyb20gJy4vbGliL21lbW9yeS9iYWNrdHJhY2suanMnO1xuZXhwb3J0IHsgY2F1c2FsQ2hhaW4sIGZsYXR0ZW5DYXVzYWxEQUcsIGZvcm1hdENhdXNhbENoYWluIH0gZnJvbSAnLi9saWIvbWVtb3J5L2JhY2t0cmFjay5qcyc7XG4vLyBSRkMtMDAzIEQyIOKAlCBob25lc3R5IG1hcmtlcnM6IHRoZSB1bnRyYWNrZWQgcmVhZCBwYXRocyBhIHN0YWdlIGNvbnN1bWVkXG4vLyAoYENvbW1pdEJ1bmRsZS51bnRyYWNrZWRTb3VyY2VzYCDihpIgYENhdXNhbE5vZGUuaW5jb21wbGV0ZVNvdXJjZXNgKS5cbmV4cG9ydCB0eXBlIHsgVW50cmFja2VkU291cmNlIH0gZnJvbSAnLi9saWIvbWVtb3J5L3R5cGVzLmpzJztcblxuLy8g4pSA4pSAIHNsaWNlLyDigJQgdmFyaWFibGUtZmlyc3Qgc2xpY2luZywgYm90aCBkaXJlY3Rpb25zICh0cmlhZ2UgcXVlcnkgbGF5ZXIpIOKUgOKUgFxuLy8gT25lIGNvbnRyYWN0IGZvciBldmVyeSB0cmlhZ2Ugc3VyZmFjZSAoVUkgcGFuZWwsIExMTSB0b29sLCBvZmZsaW5lXG4vLyBhdXRvcHN5IGFnZW50KTogdmFyaWFibGUgaW4g4oaSIHNsaWNlIG91dC5cbi8vXG4vLyBCQUNLV0FSRCDigJQgYHNsaWNlRm9yS2V5YCBhbmNob3JzIGF0IHRoZSBrZXkncyBsYXN0IHdyaXRlciB0aGVuIGRlbGVnYXRlc1xuLy8gdG8gY2F1c2FsQ2hhaW47IGBhcnJheVByb3ZlbmFuY2VgIC8gYGVsZW1lbnRQcm92ZW5hbmNlYCAoYXBwZW5kLWZvbGQpXG4vLyBhbnN3ZXIgZWxlbWVudC1sZXZlbCBxdWVzdGlvbnMgbGlrZSBcIndoaWNoIHN0YWdlIHByb2R1Y2VkIGhpc3RvcnlbN10/XCIg4oCUXG4vLyB0aGUgZml4IGZvciB0aGUgYWdlbnQgbWVnYS1rZXkgcHJvYmxlbSwgd2l0aCBob25lc3QgYXR0cmlidXRpb24gbGFiZWxzLlxuLy9cbi8vIEZPUldBUkQg4oCUIGBmb3J3YXJkU2xpY2VGb3JLZXlgIHdhbGtzIHRoZSBvdGhlciB3YXk6IGZyb20gYSB3cml0ZSwgdGhyb3VnaFxuLy8gdGhlIHZhbHVlJ3MgTElWRSBSQU5HRSAoaXQgbGl2ZXMgdW50aWwgdGhlIGtleSdzIG5leHQgd3JpdGUpLCB0byBldmVyeVxuLy8gc3RhZ2UgdGhhdCByZWFkIGl0IGFuZCBldmVyeSB3cml0ZSB0aG9zZSByZWFkcyBmZWQuIGBrZXlUaW1lbGluZWAgaXMgdGhlXG4vLyBmbGF0IGNocm9ub2xvZ2ljYWwgdmlldyBvZiB0aGUgc2FtZSBmYWN0cy4gRmVkIGVkZ2VzIGFyZSBFWEFDVCB1bmRlciB0aGVcbi8vIGB3cml0ZVByb3ZlbmFuY2U6ICdyZWFkcy1wcmVmaXgnYCBkaWFsIGFuZCBzdGFtcGVkIENPTlNFUlZBVElWRSB3aXRob3V0XG4vLyBpdCDigJQgbmV2ZXIgdGhlIG90aGVyIHdheSByb3VuZC4gU2VlIHNyYy9saWIvc2xpY2UvUkVBRE1FLm1kLlxuZXhwb3J0IHR5cGUge1xuICBBcnJheVByb3ZlbmFuY2UsXG4gIEF0dHJpYnV0aW9uQmFzaXMsXG4gIEVsZW1lbnRCaXJ0aCxcbiAgRmVkQmFzaXMsXG4gIEZvcndhcmRFZGdlLFxuICBGb3J3YXJkTm9kZSxcbiAgRm9yd2FyZFJlYWQsXG4gIEZvcndhcmRTbGljZSxcbiAgRm9yd2FyZFNsaWNlSlNPTixcbiAgSG9uZXN0eU5vdGUsXG4gIEhvbmVzdHlOb3RlQ29kZSxcbiAgS2V5TW9tZW50LFxuICBLZXlzUmVhZFNvdXJjZSxcbiAgS2V5VGltZWxpbmUsXG4gIE1pc3NpbmdQcm92ZW5hbmNlUmVhc29uLFxuICBNaXNzaW5nU2xpY2VSZWFzb24sXG4gIFJlYWRzQ292ZXJhZ2UsXG4gIFNsaWNlSlNPTixcbiAgU3RhdGVLZXksXG4gIFZhcmlhYmxlU2xpY2UsXG59IGZyb20gJy4vbGliL3NsaWNlL2luZGV4LmpzJztcbmV4cG9ydCB0eXBlIHsgRm9yd2FyZFNsaWNlRm9yS2V5T3B0aW9ucywgS2V5VGltZWxpbmVPcHRpb25zLCBTbGljZUZvcktleU9wdGlvbnMgfSBmcm9tICcuL2xpYi9zbGljZS9pbmRleC5qcyc7XG5leHBvcnQge1xuICBhcnJheVByb3ZlbmFuY2UsXG4gIGVsZW1lbnRQcm92ZW5hbmNlLFxuICBmb3JtYXRGb3J3YXJkU2xpY2UsXG4gIGZvcm1hdFNsaWNlLFxuICBmb3JtYXRUaW1lbGluZSxcbiAgZm9yd2FyZFNsaWNlRm9yS2V5LFxuICBmb3J3YXJkU2xpY2VUb0pTT04sXG4gIGtleXNSZWFkRnJvbUV4ZWN1dGlvblRyZWUsXG4gIGtleXNSZWFkRnJvbU1hcCxcbiAga2V5VGltZWxpbmUsXG4gIG5vcm1hbGlzZVN0YXRlS2V5LFxuICByZXNvbHZlS2V5c1JlYWRTb3VyY2UsXG4gIHNsaWNlRm9yS2V5LFxuICBzbGljZVRvSlNPTixcbn0gZnJvbSAnLi9saWIvc2xpY2UvaW5kZXguanMnO1xuXG4vLyDilIDilIAgaG9uZXN0eSDigJQgdGhlIE9ORSByZWdpc3RyeSBvZiB3aGF0IGEgcmVhZGVyIGNhbm5vdCBzZWUg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4vLyBUaGUgaG9uZXN0eSBzaWduYWxzIHRoaXMgZG9vcidzIHJlYWRlcnMgcHJvZHVjZSDigJQgYSBzbGljZSdzIGBIb25lc3R5Tm90ZS5jb2RlYCBhbmQgYG1pc3NpbmdgXG4vLyByZWFzb24sIGEgZmVkIGVkZ2UncyBhbmQgYW4gZWxlbWVudCBiaXJ0aCdzIGBiYXNpc2AsIGEgZm9sZCdzIGBiYXNpc2AgYW5kIGByZWRhY3RlZGAgcGF0aHMsIGFcbi8vIGBMb2dHYXBgLCBhIGNhdXNhbCBub2RlJ3MgYGluY29tcGxldGVTb3VyY2VzYCBhbmQgYHRydW5jYXRlZGAg4oCUIGVhY2ggaGFzIGEgY29kZSBoZXJlIGFuZCB0aGUgT05FXG4vLyBzZW50ZW5jZSB0aGF0IHNheXMgd2hhdCBpdCBtZWFucywgc28gYSBsZW5zIG9yIGFuIGFnZW50IHRvb2wgZXhwbGFpbnMgYW55IG9mIHRoZW0gZnJvbSBvbmUgcGxhY2Vcbi8vIGluc3RlYWQgb2Yga2VlcGluZyBpdHMgb3duIHRhYmxlLiBUaGUgdW5pb25zIG9mIHRob3NlIGNvZGVzIGV4cG9ydGVkIGFib3ZlIChgSG9uZXN0eU5vdGVDb2RlYCxcbi8vIGBNaXNzaW5nU2xpY2VSZWFzb25gLCBgTWlzc2luZ1Byb3ZlbmFuY2VSZWFzb25gLCBgRmVkQmFzaXNgLCBgQXR0cmlidXRpb25CYXNpc2AsIGBGb2xkQmFzaXNgKSBhcmVcbi8vIHN1YnNldHMgb2YgYEhvbmVzdHlDb2RlYCwgYW5kIHRlc3QvYXJjaGl0ZWN0dXJlL2hvbmVzdHktdm9jYWJ1bGFyeS50ZXN0LnRzIGZhaWxzIG9uIGEgdW5pb24gb2Zcbi8vIHN0cmluZyBsaXRlcmFscyB0aGlzIGRvb3IgZXhwb3J0cyB0aGF0IGlzIG5laXRoZXIgcmVnaXN0ZXJlZCBub3IgbmFtZWQgdGhlcmUgYXMgYSBkaWZmZXJlbnQga2luZFxuLy8gb2Ygd29yZC4gU2VlIHNyYy9saWIvbWVtb3J5L1JFQURNRS5tZC5cbmV4cG9ydCB0eXBlIHsgSG9uZXN0eUNvZGUgfSBmcm9tICcuL2xpYi9tZW1vcnkvaW5kZXguanMnO1xuZXhwb3J0IHsgSE9ORVNUWV9DT0RFUyB9IGZyb20gJy4vbGliL21lbW9yeS9pbmRleC5qcyc7XG5cbi8vIOKUgOKUgCB2NSBTdG9yZXMgKGNvbmNyZXRlLCBjb21wb3NhYmxlIOKAlCBwcmltYXJ5IHJlY29yZGVyIEFQSSkg4pSA4pSA4pSA4pSA4pSAXG4vLyBDb21wb3NlIHRoZXNlIHZpYSBgbmV3IFN0b3JlPFQ+KClgIGFzIGEgZmllbGQgb24geW91ciByZWNvcmRlclxuLy8gY2xhc3MuIE9uZSBwdXJwb3NlIHBlciByZWNvcmRlcjogc3RvcmVzIGFyZSBzdG9yYWdlOyByZWNvcmRlcnNcbi8vIGFyZSBldmVudC1ob29rIGludGVyZmFjZSBpbXBsZW1lbnRhdGlvbnMuXG5leHBvcnQgeyBCb3VuZGFyeVN0YXRlU3RvcmUgfSBmcm9tICcuL2xpYi9yZWNvcmRlci9Cb3VuZGFyeVN0YXRlU3RvcmUuanMnO1xuZXhwb3J0IHsgS2V5ZWRTdG9yZSB9IGZyb20gJy4vbGliL3JlY29yZGVyL0tleWVkU3RvcmUuanMnO1xuZXhwb3J0IHsgU2VxdWVuY2VTdG9yZSB9IGZyb20gJy4vbGliL3JlY29yZGVyL1NlcXVlbmNlU3RvcmUuanMnO1xuXG4vLyDilIDilIAgdjUuMSBDb21taXQgZ3JvdXBpbmcgcHJpbWl0aXZlIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuLy8gSW50ZXJ2YWwgaW5kZXggb3ZlciBjb21taXQgaW5kaWNlcy4gQnVpbHQgaW5jcmVtZW50YWxseSBkdXJpbmdcbi8vIHRyYXZlcnNhbDogb3BlbigpIG9uIGJvdW5kYXJ5IGVudHJ5LCBjbG9zZSgpIG9uIGV4aXQuIFF1ZXJ5IGF0IGFueVxuLy8gY29tbWl0IHBvc2l0aW9uIHdpdGggZW5jbG9zaW5nKCkvb3ZlcmxhcHBpbmcoKS4gR2VuZXJpYyBvdmVyIFRMYWJlbFxuLy8g4oCUIGZvb3RwcmludGpzIG93bnMgWkVSTyBrbm93bGVkZ2Ugb2Ygd2hhdCBjb25zdW1lcnMgdXNlIGFzIGxhYmVscy5cbi8vIFNlZSBkb2NzL2Rlc2lnbi9jb21taXQtcmFuZ2UtaW5kZXgubWQgZm9yIHRoZSBmdWxsIGNvbnRyYWN0LlxuZXhwb3J0IHR5cGUgeyBSYW5nZUVudHJ5LCBSYW5nZVRva2VuIH0gZnJvbSAnLi9saWIvcmVjb3JkZXIvQ29tbWl0UmFuZ2VJbmRleC5qcyc7XG5leHBvcnQgeyBDb21taXRSYW5nZUluZGV4IH0gZnJvbSAnLi9saWIvcmVjb3JkZXIvQ29tbWl0UmFuZ2VJbmRleC5qcyc7XG5cbi8vIFRvcG9sb2d5UmVjb3JkZXIg4oCUIGNvbXBvc2l0aW9uIGdyYXBoIGFjY3VtdWxhdG9yIChzdWJmbG93cyArIGNvbnRyb2wtZmxvdyBlZGdlcylcbmV4cG9ydCB0eXBlIHtcbiAgVG9wb2xvZ3ksXG4gIFRvcG9sb2d5RWRnZSxcbiAgVG9wb2xvZ3lJbmNvbWluZ0tpbmQsXG4gIFRvcG9sb2d5Tm9kZSxcbiAgVG9wb2xvZ3lSZWNvcmRlck9wdGlvbnMsXG59IGZyb20gJy4vbGliL3JlY29yZGVyL1RvcG9sb2d5UmVjb3JkZXIuanMnO1xuZXhwb3J0IHsgVG9wb2xvZ3lSZWNvcmRlciwgdG9wb2xvZ3lSZWNvcmRlciB9IGZyb20gJy4vbGliL3JlY29yZGVyL1RvcG9sb2d5UmVjb3JkZXIuanMnO1xuXG4vLyBJbk91dFJlY29yZGVyIOKAlCBjaGFydCBpbi9vdXQgc3RyZWFtIChlbnRyeS9leGl0IHBhaXJzIGF0IGV2ZXJ5IGNoYXJ0IGJvdW5kYXJ5LFxuLy8gaW5jbHVkaW5nIHRoZSB0b3AtbGV2ZWwgcnVuIGFuZCBldmVyeSBzdWJmbG93KVxuZXhwb3J0IHR5cGUgeyBJbk91dEVudHJ5LCBJbk91dFBoYXNlLCBJbk91dFJlY29yZGVyT3B0aW9ucyB9IGZyb20gJy4vbGliL3JlY29yZGVyL0luT3V0UmVjb3JkZXIuanMnO1xuZXhwb3J0IHsgSW5PdXRSZWNvcmRlciwgaW5PdXRSZWNvcmRlciwgUk9PVF9SVU5USU1FX1NUQUdFX0lELCBST09UX1NVQkZMT1dfSUQgfSBmcm9tICcuL2xpYi9yZWNvcmRlci9Jbk91dFJlY29yZGVyLmpzJztcblxuLy8gQ29udHJvbERlcFJlY29yZGVyIOKAlCBjb250cm9sLWRlcGVuZGVuY2UgdHJhY2tpbmcgKFJGQy0wMDMgRDUpOiByZWNvcmRzXG4vLyBvbkRlY2lzaW9uL29uU2VsZWN0ZWQgKyB0aGUgRDEgcnVudGltZSBhbmNlc3RvciBjaGFpbiwgYW5zd2VycyBcIndoaWNoXG4vLyBkZWNpc2lvbiBhbGxvd2VkIHRoaXMgc3RhZ2UgdG8gcnVuP1wiIOKAlCB0aGUgYnVpbHQtaW4gcHJvZHVjZXIgZm9yXG4vLyBjYXVzYWxDaGFpbidzIGBjb250cm9sRGVwc2Agb3B0aW9uLlxuZXhwb3J0IHR5cGUgeyBDb250cm9sRGVjaXNpb25SZWNvcmQsIENvbnRyb2xEZXBSZWNvcmRlck9wdGlvbnMgfSBmcm9tICcuL2xpYi9yZWNvcmRlci9Db250cm9sRGVwUmVjb3JkZXIuanMnO1xuZXhwb3J0IHsgQ29udHJvbERlcFJlY29yZGVyLCBjb250cm9sRGVwUmVjb3JkZXIgfSBmcm9tICcuL2xpYi9yZWNvcmRlci9Db250cm9sRGVwUmVjb3JkZXIuanMnO1xuXG4vLyBRdWFsaXR5UmVjb3JkZXIg4oCUIHBlci1zdGVwIHF1YWxpdHkgc2NvcmluZyB3aXRoIGJhY2t0cmFja2luZ1xuZXhwb3J0IHR5cGUgeyBRdWFsaXR5RW50cnksIFF1YWxpdHlSZWNvcmRlck9wdGlvbnMsIFF1YWxpdHlTY29yaW5nRm4gfSBmcm9tICcuL2xpYi9yZWNvcmRlci9RdWFsaXR5UmVjb3JkZXIuanMnO1xuZXhwb3J0IHsgUXVhbGl0eVJlY29yZGVyIH0gZnJvbSAnLi9saWIvcmVjb3JkZXIvUXVhbGl0eVJlY29yZGVyLmpzJztcblxuLy8gcXVhbGl0eVRyYWNlIOKAlCBRdWFsaXR5IFN0YWNrIFRyYWNlIChiYWNrdHJhY2sgZnJvbSBsb3ctc2NvcmluZyBzdGVwcylcbmV4cG9ydCB0eXBlIHsgUXVhbGl0eUZyYW1lLCBRdWFsaXR5U3RhY2tUcmFjZSB9IGZyb20gJy4vbGliL3JlY29yZGVyL3F1YWxpdHlUcmFjZS5qcyc7XG5leHBvcnQgeyBmb3JtYXRRdWFsaXR5VHJhY2UsIHF1YWxpdHlUcmFjZSB9IGZyb20gJy4vbGliL3JlY29yZGVyL3F1YWxpdHlUcmFjZS5qcyc7XG4iXX0=
76
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdHJhY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQThCRztBQUlILE9BQU8sRUFDTCxtQkFBbUIsRUFDbkIsc0JBQXNCLEVBQ3RCLG1CQUFtQixFQUNuQixZQUFZLEdBQ2IsTUFBTSw2QkFBNkIsQ0FBQztBQUVyQyw2RUFBNkU7QUFDN0UsNkVBQTZFO0FBQzdFLGdGQUFnRjtBQUNoRixnRkFBZ0Y7QUFDaEYsd0VBQXdFO0FBQ3hFLHdEQUF3RDtBQUN4RCw0Q0FBNEM7QUFDNUMsT0FBTyxFQUNMLHFCQUFxQixFQUNyQixrQkFBa0IsRUFDbEIsc0JBQXNCLEVBQ3RCLGVBQWUsRUFDZixrQkFBa0IsR0FDbkIsTUFBTSw0QkFBNEIsQ0FBQztBQUtwQyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFFbEUsNkVBQTZFO0FBQzdFLCtFQUErRTtBQUMvRSx5RUFBeUU7QUFDekUsOEVBQThFO0FBQzlFLG9FQUFvRTtBQUNwRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFckQsdUVBQXVFO0FBQ3ZFLHlFQUF5RTtBQUN6RSxxRUFBcUU7QUFDckUsc0RBQXNEO0FBQ3RELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBUXpELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQWF4RCxPQUFPLEVBQ0wsZ0JBQWdCLEVBQ2hCLGFBQWEsRUFDYixhQUFhLEVBQ2Isc0JBQXNCLEVBQ3RCLFVBQVUsRUFDVixXQUFXLEVBQ1gsY0FBYyxFQUNkLHVCQUF1QjtBQUN2QiwwRUFBMEU7QUFDMUUsNkVBQTZFO0FBQzdFLDhDQUE4QztBQUM5QyxpQkFBaUIsRUFDakIsYUFBYSxHQUNkLE1BQU0sZ0NBQWdDLENBQUM7QUEwQ3hDLE9BQU8sRUFDTCxXQUFXLEVBQ1gsbUJBQW1CLEVBQ25CLFdBQVcsRUFDWCxjQUFjLEVBQ2QsU0FBUyxFQUNULE9BQU8sRUFDUCxRQUFRLEVBQ1IsVUFBVSxHQUNYLE1BQU0sNEJBQTRCLENBQUM7QUFlcEMsT0FBTyxFQUFFLFdBQVcsRUFBRSxnQkFBZ0IsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBMkM3RixPQUFPLEVBQ0wsZUFBZSxFQUNmLGlCQUFpQixFQUNqQixrQkFBa0IsRUFDbEIsV0FBVyxFQUNYLGNBQWMsRUFDZCxrQkFBa0IsRUFDbEIsa0JBQWtCLEVBQ2xCLHlCQUF5QixFQUN6QixlQUFlLEVBQ2YsV0FBVyxFQUNYLGlCQUFpQixFQUNqQixxQkFBcUIsRUFDckIsV0FBVyxFQUNYLFdBQVcsR0FDWixNQUFNLHNCQUFzQixDQUFDO0FBYTlCLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUV0RCxtRUFBbUU7QUFDbkUsaUVBQWlFO0FBQ2pFLGlFQUFpRTtBQUNqRSw0Q0FBNEM7QUFDNUMsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDMUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQzFELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQVNoRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQVV0RSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUt4RixPQUFPLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxxQkFBcUIsRUFBRSxlQUFlLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQU92SCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUk5RixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFJcEUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLFlBQVksRUFBRSxNQUFNLGdDQUFnQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBmb290cHJpbnRqcy90cmFjZSDigJQgRXhlY3V0aW9uIHRyYWNpbmcsIGRlYnVnZ2luZywgYW5kIGJhY2t0cmFja2luZyB1dGlsaXRpZXMuXG4gKlxuICogUnVudGltZSBzdGFnZSBJRHMsIGNvbW1pdCBsb2cgcXVlcmllcywgYW5kIHJlY29yZGVyIGJhc2UgY2xhc3Nlcy5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogaW1wb3J0IHsgcGFyc2VSdW50aW1lU3RhZ2VJZCwgZmluZExhc3RXcml0ZXIsIEtleWVkU3RvcmUsIFNlcXVlbmNlU3RvcmUgfSBmcm9tICdmb290cHJpbnRqcy90cmFjZSc7XG4gKlxuICogLy8gUGFyc2UgYSBydW50aW1lU3RhZ2VJZFxuICogY29uc3QgeyBzdGFnZUlkLCBleGVjdXRpb25JbmRleCB9ID0gcGFyc2VSdW50aW1lU3RhZ2VJZCgnY2FsbC1sbG0jNScpO1xuICpcbiAqIC8vIEJhY2t0cmFjazogd2hvIHdyb3RlICdzeXN0ZW1Qcm9tcHQnIGJlZm9yZSBjb21taXQgYXQgaWR4IDg/XG4gKiBjb25zdCB3cml0ZXIgPSBmaW5kTGFzdFdyaXRlcihjb21taXRMb2csICdzeXN0ZW1Qcm9tcHQnLCA4KTtcbiAqXG4gKiAvLyB2NSBwcmltYXJ5IEFQSTogY29tcG9zZSBhIFN0b3JlIGFzIGEgZmllbGQgKG9uZSBwdXJwb3NlIHBlciByZWNvcmRlcikuXG4gKiAvLyBLZXllZFN0b3JlPFQ+IOKAlCAxOjEgKG9uZSBlbnRyeSBwZXIgc3RlcClcbiAqIGNsYXNzIE15UmVjb3JkZXIge1xuICogICByZWFkb25seSBpZCA9ICdteS1yZWNvcmRlcic7XG4gKiAgIHByaXZhdGUgc3RvcmUgPSBuZXcgS2V5ZWRTdG9yZTxNeUVudHJ5PigpO1xuICogICBvbldyaXRlKGUpIHsgdGhpcy5zdG9yZS5zZXQoZS5ydW50aW1lU3RhZ2VJZCwgeyAuLi4gfSk7IH1cbiAqIH1cbiAqXG4gKiAvLyBTZXF1ZW5jZVN0b3JlPFQ+IOKAlCAxOk4gKG11bHRpcGxlIGVudHJpZXMgcGVyIHN0ZXAsIG9yZGVyaW5nIG1hdHRlcnMpXG4gKiBjbGFzcyBBdWRpdFJlY29yZGVyIHtcbiAqICAgcmVhZG9ubHkgaWQgPSAnYXVkaXQnO1xuICogICBwcml2YXRlIHN0b3JlID0gbmV3IFNlcXVlbmNlU3RvcmU8QXVkaXRFbnRyeT4oKTtcbiAqICAgb25SZWFkKGUpIHsgdGhpcy5zdG9yZS5wdXNoKHsgcnVudGltZVN0YWdlSWQ6IGUucnVudGltZVN0YWdlSWQsIC4uLiB9KTsgfVxuICogfVxuICogYGBgXG4gKi9cblxuLy8gUnVudGltZSBzdGFnZSBJRCDigJQgdW5pcXVlIGV4ZWN1dGlvbiBzdGVwIGlkZW50aWZpZXJzXG5leHBvcnQgdHlwZSB7IENvbW1pdElkeCwgRXhlY3V0aW9uQ291bnRlciwgRXhlY3V0aW9uSW5kZXgsIFJ1bnRpbWVTdGFnZUlkIH0gZnJvbSAnLi9saWIvaWRzL3J1bnRpbWVTdGFnZUlkLmpzJztcbmV4cG9ydCB7XG4gIGJ1aWxkUnVudGltZVN0YWdlSWQsXG4gIGNyZWF0ZUV4ZWN1dGlvbkNvdW50ZXIsXG4gIHBhcnNlUnVudGltZVN0YWdlSWQsXG4gIHNwbGl0U3RhZ2VJZCxcbn0gZnJvbSAnLi9saWIvaWRzL3J1bnRpbWVTdGFnZUlkLmpzJztcblxuLy8gR2VuZXJhdGVkIGJyYW5jaCBzZWdtZW50cyDigJQgdGhlIHN1YmZsb3cgcGF0aCBzZWdtZW50cyBgYWRkUGFyYWxsZWxGb3JFYWNoYFxuLy8gbWludHMgZm9yIGl0cyBicmFuY2hlcyAoYDxzdGFnZUlkPn48aW5kZXg+YCkuIEEgYnJhbmNoIGlzIGFkZHJlc3NlZCBieSB0aGVcbi8vIE9SRElOQVJZIGdyYW1tYXIgYWJvdmUsIHNvIG5vdGhpbmcgaGVyZSBpcyBuZWVkZWQgdG8gUkVBRCBvbmU7IHRoZXNlIGV4aXN0IHNvXG4vLyBhIGNvbnN1bWVyIGNhbiBURUxMIGEgZ2VuZXJhdGVkIGJyYW5jaCBmcm9tIGEgaGFuZC1hdXRob3JlZCBzdWJmbG93ICh0byBsYWJlbFxuLy8gaXQgXCJicmFuY2ggMiBvZiByZXZpZXctY2h1bmtzXCIgaW5zdGVhZCBvZiBhIHN1YmZsb3cgbmFtZSksIGFuZCBzbyB0aGVcbi8vIHJlc2VydmVkIG1hcmtlciBpcyBkaXNjb3ZlcmFibGUgcmF0aGVyIHRoYW4gZm9sa2xvcmUuXG4vLyBEZXNpZ246IGRvY3MvZGVzaWduL2V4ZWN1dGlvbi1jb250cm9sLm1kLlxuZXhwb3J0IHtcbiAgQlJBTkNIX1NFR01FTlRfTUFSS0VSLFxuICBidWlsZEJyYW5jaFNlZ21lbnQsXG4gIGhhc0JyYW5jaFNlZ21lbnRNYXJrZXIsXG4gIGlzQnJhbmNoU2VnbWVudCxcbiAgcGFyc2VCcmFuY2hTZWdtZW50LFxufSBmcm9tICcuL2xpYi9pZHMvYnJhbmNoU2VnbWVudC5qcyc7XG5cbi8vIHdhbGtTdWJmbG93U3BlYyDigJQgZmxhdCBvcmRlcmVkIHRyYXZlcnNhbCBvZiBhIHN1YmZsb3cncyBzdHJ1Y3R1cmVcbi8vIChjb25zdW1lIHZpYSBTdHJ1Y3R1cmVSZWNvcmRlci5vblN1YmZsb3dNb3VudGVkJ3Mgc3ViZmxvd1NwZWMgcGF5bG9hZClcbmV4cG9ydCB0eXBlIHsgV2Fsa2VySXRlbSwgV2Fsa2VyT3B0aW9ucyB9IGZyb20gJy4vbGliL2VuZ2luZS93YWxrU3ViZmxvd1NwZWMuanMnO1xuZXhwb3J0IHsgd2Fsa1N1YmZsb3dTcGVjIH0gZnJvbSAnLi9saWIvZW5naW5lL3dhbGtTdWJmbG93U3BlYy5qcyc7XG5cbi8vIFBhdGggc2VnbWVudHMg4oCUIHRoZSBzdXBwb3J0ZWQgd2F5IHRvIHRha2UgYSBgVHJhY2VFbnRyeS5wYXRoYCBhcGFydC4gUGF0aHNcbi8vIGFyZSBqb2luZWQgd2l0aCBhbiBBU0NJSSBVbml0LVNlcGFyYXRvciAobmV2ZXIgYSBkb3Q6IGEgc3RhdGUga2V5IG1heSBpdHNlbGZcbi8vIGNvbnRhaW4gYSBkb3QsIHNvIGEgZG90IHNlcGFyYXRvciB3b3VsZCBtYWtlIGBbJ2EuYiddYCBhbmQgYFsnYScsJ2InXWBcbi8vIGluZGlzdGluZ3Vpc2hhYmxlKSwgd2hpY2ggaXMgYW4gZW5jb2RpbmcsIG5vdCBhIGRpc3BsYXkgY2hhcmFjdGVyLiBSZW5kZXIgYVxuLy8gcGF0aCB0aHJvdWdoIHRoaXMgaW5zdGVhZCBvZiBzcGxpdHRpbmcgb24gdGhlIGRlbGltaXRlciB5b3Vyc2VsZi5cbmV4cG9ydCB7IHBhdGhTZWdtZW50cyB9IGZyb20gJy4vbGliL21lbW9yeS91dGlscy5qcyc7XG5cbi8vIFRoZSByZWZ1c2FsIHRoZSBjb21taXQtbG9nIHJlYWRlcnMgcmFpc2UgZm9yIGEgcm93IHdob3NlIHZlcmIgaXMgbm90XG4vLyBzZXQgfCBtZXJnZSB8IGFwcGVuZCB8IGRlbGV0ZSAoYGNvbW1pdFZhbHVlQXRgLCBgYXJyYXlQcm92ZW5hbmNlYCwgYW5kXG4vLyBgYXBwbHlTbWFydE1lcmdlYCBiZWxvdyk6IGEgZm9yZWlnbiBvciBjb3JydXB0ZWQgbG9nIGZhaWxzIGxvdWRseSxcbi8vIG5hbWluZyB0aGUgcm93LCBpbnN0ZWFkIG9mIGJlaW5nIGZvbGRlZCBhcyBhIG1lcmdlLlxuZXhwb3J0IHsgVW5rbm93blZlcmJFcnJvciB9IGZyb20gJy4vbGliL21lbW9yeS9pbmRleC5qcyc7XG5cbi8vIFRoZSByZWNvcmQncyBvd24gc2hhcGVzIOKAlCBvbmUgYnVuZGxlIHBlciBleGVjdXRlZCBzdGFnZSAoYENvbW1pdEJ1bmRsZWApLCBpdHNcbi8vIHJvd3MgKGBUcmFjZUVudHJ5YCkgYW5kIGl0cyB2YWx1ZSBwYXRjaGVzIChgTWVtb3J5UGF0Y2hgKSDigJQgYW5kIHRoZSBvbmUgZm9sZFxuLy8gb2YgYSBidW5kbGUgb250byBhIHN0YXRlIHRoYXQgaGFuZHMgYmFjayBhIGZ1bGx5IGRldGFjaGVkIHJlc3VsdFxuLy8gKGBhcHBseVNtYXJ0TWVyZ2VgLCB0aGUgdmVyYiBsYXcncyBwdWJsaWMgZG9vcikuIEFsc28gb24gYC9hZHZhbmNlZGAgdW50aWwgMTAuMC4wO1xuLy8gYSByZWNvcmQgaXMgV1JJVFRFTiB0aHJvdWdoIGBmb290cHJpbnRqcy93cml0ZWAuIFNlZSBkb2NzL2d1aWRlcy9yZWNvcmQtY29udHJhY3QubWQuXG5leHBvcnQgdHlwZSB7IENvbW1pdEJ1bmRsZSwgTWVtb3J5UGF0Y2gsIFRyYWNlRW50cnkgfSBmcm9tICcuL2xpYi9tZW1vcnkvdHlwZXMuanMnO1xuZXhwb3J0IHsgYXBwbHlTbWFydE1lcmdlIH0gZnJvbSAnLi9saWIvbWVtb3J5L3ZlcmJzLmpzJztcblxuLy8gQ29tbWl0IGxvZyBxdWVyaWVzIOKAlCB0eXBlZCB1dGlsaXRpZXMgZm9yIGJhY2t0cmFja2luZy5cbi8vIGNvbW1pdFZhbHVlQXQgcmVjb25zdHJ1Y3RzIHRoZSBGVUxMIHZhbHVlIG9mIGEga2V5IGF0IGEgY29tbWl0IGluZGV4IOKAlFxuLy8gcmVxdWlyZWQgdW5kZXIgYGNvbW1pdFZhbHVlczogJ2RlbHRhJ2AgKCMxM2MtQiksIHdoZXJlIGFuIGBhcHBlbmRgXG4vLyBidW5kbGUncyBgb3ZlcndyaXRlW2tleV1gIGhvbGRzIG9ubHkgdGhlIHRhaWwuXG5leHBvcnQgdHlwZSB7XG4gIFZhbHVlQmFzaXMsXG4gIFZhbHVlQmFzaXNPcHRpb25zLFxuICBWYWx1ZVdpdGhCYXNpcyxcbiAgV3JpdGVyQmFzaXMsXG4gIFdyaXRlcldpdGhCYXNpcyxcbn0gZnJvbSAnLi9saWIvbWVtb3J5L2NvbW1pdExvZ1V0aWxzLmpzJztcbmV4cG9ydCB7XG4gIGJ1aWxkQ29tbWl0SW5kZXgsXG4gIGNvbW1pdEluZGV4T2YsXG4gIGNvbW1pdFZhbHVlQXQsXG4gIGNvbW1pdFZhbHVlQXRXaXRoQmFzaXMsXG4gIGZpbmRDb21taXQsXG4gIGZpbmRDb21taXRzLFxuICBmaW5kTGFzdFdyaXRlcixcbiAgZmluZExhc3RXcml0ZXJXaXRoQmFzaXMsXG4gIC8vIE9uZSBzdGFnZSwgb25lIHJlY29yZCAoRjgsIDkuMzkuMCk6IGRvZXMgYSBsb2cgcmVjb3JkIGl0cyBjb250aW51YXRpb25zXG4gIC8vIChgQ29tbWl0QnVuZGxlLnBoYXNlYCksIGFuZCDigJQgZm9yIGEgbG9nIHdyaXR0ZW4gYmVmb3JlIGl0IOKAlCB0aGUgT05FIGxlZ2FjeVxuICAvLyByZWFkZXIgdGhhdCBpbmZlcnMgdGhlbSB0aGUgd2F5IDkuMzguMCBkaWQuXG4gIGluZmVyTGVnYWN5UGhhc2VzLFxuICByZWNvcmRzUGhhc2VzLFxufSBmcm9tICcuL2xpYi9tZW1vcnkvY29tbWl0TG9nVXRpbHMuanMnO1xuZXhwb3J0IHR5cGUgeyBDb21taXRQaGFzZSB9IGZyb20gJy4vbGliL21lbW9yeS90eXBlcy5qcyc7XG5cbi8vIOKUgOKUgCB0aW1lLXRyYXZlbC8g4oCUIHRoZSBSRUFERVInUyBjdXJzb3Igb3ZlciBhIGZpbmlzaGVkIHRyYWNlIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuLy8gQSBUcmFjZSBpcyB3aGF0IHRoZSBydW4gcmVjb3JkZWQ7IHRpbWUgdHJhdmVsIGlzIGEgY3Vyc29yIG92ZXIgaXQgd2l0aCBhXG4vLyBGb2xkIGF0IGVhY2ggc3RvcC4gSXQgaXMgTk9UIHRoZSBlbmdpbmUncyB3YWxrIGFuZCBuZXZlciBiZWNvbWVzIGEgc2Vjb25kXG4vLyBsaXZlIGN1cnNvcjogZXZlcnl0aGluZyBiZWxvdyBpcyBhIHJlYWQtdGltZSBxdWVyeSBvdmVyIGFscmVhZHktY29sbGVjdGVkXG4vLyBkYXRhLlxuLy9cbi8vIGBzdGF0ZUF0KHNuYXBzaG90IHwgc3VidHJlZSwgY29tbWl0SWR4KWAgaXMgdGhlIGZvbGQg4oCUIHRoZSBydW4nc1xuLy8gYGluaXRpYWxTdGF0ZWAgcmVwbGF5ZWQgdGhyb3VnaCBgY29tbWl0TG9nWzAuLmNvbW1pdElkeF1gIHdpdGggdGhlIFNBTUUgdmVyYlxuLy8gc3dpdGNoIHRoZSBsaXZlIGNvbW1pdCB1c2VzLCByZXR1cm5lZCBkZXRhY2hlZCBhbmQgZnJvemVuLCBhbmQgaG9uZXN0IGFib3V0XG4vLyBob3cgaXQgd2FzIGRlcml2ZWQgKGBiYXNpc2ApIGFuZCB3aGVyZSB0aGUgbG9nIHdhcyBzY3J1YmJlZCAoYHJlZGFjdGVkYCkuXG4vL1xuLy8gYHRpbWVUcmF2ZWwoc25hcHNob3QpYCBpcyB0aGUgY3Vyc29yOiBzdG9wcywgcHJldi9uZXh0L2p1bXBUbywgbWFya3MgYmVzaWRlXG4vLyB0aGUgbG9nLCBhbmQgYGRyaWxsKG1vdW50KWAgaW50byBhIHN1YmZsb3cncyBvd24gbG9nIOKAlCB0aGUgc2FtZSBpbnRlcmZhY2UsXG4vLyBpdHMgb3duIGJhc2UuIEhvdyBzdG9wcyBhcmUgREVSSVZFRCBpcyB0aGUgc2VhbSAoYFRpbWVUcmF2ZWxTdHJhdGVneWApO1xuLy8gZm9vdHByaW50anMgc2hpcHMgYGNvbW1pdFN0b3BzYCAob25lIHN0b3AgcGVyIGV4ZWN1dGVkIHN0YWdlKSBiZWNhdXNlIHRoYXRcbi8vIGlzIHRoZSBvbmx5IHN0b3AgZ3JhbW1hciB0aGUgc3Vic3RyYXRlIGl0c2VsZiBrbm93cyDigJQgYW5kLCBzaW5jZSA5LjIxLjAsXG4vLyBgdGFnU3RvcHModGFncz8pYDogdGhlIHN0b3BzIGEgY2hhcnQgREVDTEFSRUQgYXQgYnVpbGQgdGltZSAoYC50YWcoKWApLFxuLy8gcmVhZCBiYWNrIG9mZiBgQ29tbWl0QnVuZGxlLnRhZ3NgLCBzbyBhIHN0b3JlZCByZWNvcmRpbmcgc2NydWJzIGJ5IGl0cyBvd25cbi8vIG1pbGVzdG9uZXMgd2l0aCBubyBpZCBjb252ZW50aW9ucyBpbiB0aGUgcmVhZGVyLlxuLy8gU2VlIHNyYy9saWIvdGltZS10cmF2ZWwvUkVBRE1FLm1kLlxuZXhwb3J0IHR5cGUge1xuICBBeGlzUmVmdXNhbCxcbiAgQXhpc1NwbGl0LFxuICBCb29rZW5kZWRBeGlzLFxuICBGb2xkQmFzaXMsXG4gIEZvbGRlZFN0YXRlLFxuICBGb2xkU291cmNlLFxuICBMb2dHYXAsXG4gIE1hcmssXG4gIE1vdmUsXG4gIE1vdmVSZWZ1c2FsLFxuICBTdG9wLFxuICBTdG9wRmlsdGVyLFxuICBTdG9wS2luZCxcbiAgVGltZVRyYXZlbCxcbiAgVGltZVRyYXZlbE9wdGlvbnMsXG4gIFRpbWVUcmF2ZWxTb3VyY2UsXG4gIFRpbWVUcmF2ZWxTdHJhdGVneSxcbn0gZnJvbSAnLi9saWIvdGltZS10cmF2ZWwvaW5kZXguanMnO1xuZXhwb3J0IHtcbiAgY29tbWl0U3RvcHMsXG4gIGNvbW1pdFN0b3BzU3RyYXRlZ3ksXG4gIGZpbHRlclN0b3BzLFxuICBpc0NvbW1pdEJ1bmRsZSxcbiAgc3BsaXRBeGlzLFxuICBzdGF0ZUF0LFxuICB0YWdTdG9wcyxcbiAgdGltZVRyYXZlbCxcbn0gZnJvbSAnLi9saWIvdGltZS10cmF2ZWwvaW5kZXguanMnO1xuXG4vLyBDYXVzYWwgY2hhaW4g4oCUIGJhY2t3YXJkIHByb2dyYW0gc2xpY2luZyBvbiBjb21taXQgbG9nIChEQUcpLlxuLy8gUkZDLTAwMyBEMzogYENhdXNhbEVkZ2VgICh0eXBlZC9rZXllZC93ZWlnaHRlZCBwYXJlbnQgbGlua3Mgb25cbi8vIGBDYXVzYWxOb2RlLnBhcmVudEVkZ2VzYCkgKyB0aGUgYGNvbnRyb2xEZXBzYCBvcHRpb24gKGBDb250cm9sRGVwTG9va3VwYClcbi8vIGFkZCBjb250cm9sLWRlcGVuZGVuY2UgZWRnZXMgdG8gdGhlIHNsaWNlLlxuZXhwb3J0IHR5cGUge1xuICBDYXVzYWxDaGFpbk9wdGlvbnMsXG4gIENhdXNhbEVkZ2UsXG4gIENhdXNhbE5vZGUsXG4gIENvbnRyb2xEZXBlbmRlbmN5LFxuICBDb250cm9sRGVwTG9va3VwLFxuICBFZGdlV2VpZ2hlcixcbiAgS2V5c1JlYWRMb29rdXAsXG59IGZyb20gJy4vbGliL21lbW9yeS9iYWNrdHJhY2suanMnO1xuZXhwb3J0IHsgY2F1c2FsQ2hhaW4sIGZsYXR0ZW5DYXVzYWxEQUcsIGZvcm1hdENhdXNhbENoYWluIH0gZnJvbSAnLi9saWIvbWVtb3J5L2JhY2t0cmFjay5qcyc7XG4vLyBSRkMtMDAzIEQyIOKAlCBob25lc3R5IG1hcmtlcnM6IHRoZSB1bnRyYWNrZWQgcmVhZCBwYXRocyBhIHN0YWdlIGNvbnN1bWVkXG4vLyAoYENvbW1pdEJ1bmRsZS51bnRyYWNrZWRTb3VyY2VzYCDihpIgYENhdXNhbE5vZGUuaW5jb21wbGV0ZVNvdXJjZXNgKS5cbmV4cG9ydCB0eXBlIHsgVW50cmFja2VkU291cmNlIH0gZnJvbSAnLi9saWIvbWVtb3J5L3R5cGVzLmpzJztcblxuLy8g4pSA4pSAIHNsaWNlLyDigJQgdmFyaWFibGUtZmlyc3Qgc2xpY2luZywgYm90aCBkaXJlY3Rpb25zICh0cmlhZ2UgcXVlcnkgbGF5ZXIpIOKUgOKUgFxuLy8gT25lIGNvbnRyYWN0IGZvciBldmVyeSB0cmlhZ2Ugc3VyZmFjZSAoVUkgcGFuZWwsIExMTSB0b29sLCBvZmZsaW5lXG4vLyBhdXRvcHN5IGFnZW50KTogdmFyaWFibGUgaW4g4oaSIHNsaWNlIG91dC5cbi8vXG4vLyBCQUNLV0FSRCDigJQgYHNsaWNlRm9yS2V5YCBhbmNob3JzIGF0IHRoZSBrZXkncyBsYXN0IHdyaXRlciB0aGVuIGRlbGVnYXRlc1xuLy8gdG8gY2F1c2FsQ2hhaW47IGBhcnJheVByb3ZlbmFuY2VgIC8gYGVsZW1lbnRQcm92ZW5hbmNlYCAoYXBwZW5kLWZvbGQpXG4vLyBhbnN3ZXIgZWxlbWVudC1sZXZlbCBxdWVzdGlvbnMgbGlrZSBcIndoaWNoIHN0YWdlIHByb2R1Y2VkIGhpc3RvcnlbN10/XCIg4oCUXG4vLyB0aGUgZml4IGZvciB0aGUgYWdlbnQgbWVnYS1rZXkgcHJvYmxlbSwgd2l0aCBob25lc3QgYXR0cmlidXRpb24gbGFiZWxzLlxuLy9cbi8vIEZPUldBUkQg4oCUIGBmb3J3YXJkU2xpY2VGb3JLZXlgIHdhbGtzIHRoZSBvdGhlciB3YXk6IGZyb20gYSB3cml0ZSwgdGhyb3VnaFxuLy8gdGhlIHZhbHVlJ3MgTElWRSBSQU5HRSAoaXQgbGl2ZXMgdW50aWwgdGhlIGtleSdzIG5leHQgd3JpdGUpLCB0byBldmVyeVxuLy8gc3RhZ2UgdGhhdCByZWFkIGl0IGFuZCBldmVyeSB3cml0ZSB0aG9zZSByZWFkcyBmZWQuIGBrZXlUaW1lbGluZWAgaXMgdGhlXG4vLyBmbGF0IGNocm9ub2xvZ2ljYWwgdmlldyBvZiB0aGUgc2FtZSBmYWN0cy4gRmVkIGVkZ2VzIGFyZSBFWEFDVCB1bmRlciB0aGVcbi8vIGB3cml0ZVByb3ZlbmFuY2U6ICdyZWFkcy1wcmVmaXgnYCBkaWFsIGFuZCBzdGFtcGVkIENPTlNFUlZBVElWRSB3aXRob3V0XG4vLyBpdCDigJQgbmV2ZXIgdGhlIG90aGVyIHdheSByb3VuZC4gU2VlIHNyYy9saWIvc2xpY2UvUkVBRE1FLm1kLlxuZXhwb3J0IHR5cGUge1xuICBBcnJheVByb3ZlbmFuY2UsXG4gIEF0dHJpYnV0aW9uQmFzaXMsXG4gIEVsZW1lbnRCaXJ0aCxcbiAgRmVkQmFzaXMsXG4gIEZvcndhcmRFZGdlLFxuICBGb3J3YXJkTm9kZSxcbiAgRm9yd2FyZFJlYWQsXG4gIEZvcndhcmRTbGljZSxcbiAgRm9yd2FyZFNsaWNlSlNPTixcbiAgSG9uZXN0eU5vdGUsXG4gIEhvbmVzdHlOb3RlQ29kZSxcbiAgS2V5TW9tZW50LFxuICBLZXlzUmVhZFNvdXJjZSxcbiAgS2V5VGltZWxpbmUsXG4gIE1pc3NpbmdQcm92ZW5hbmNlUmVhc29uLFxuICBNaXNzaW5nU2xpY2VSZWFzb24sXG4gIFJlYWRzQ292ZXJhZ2UsXG4gIFNsaWNlSlNPTixcbiAgU3RhdGVLZXksXG4gIFZhcmlhYmxlU2xpY2UsXG59IGZyb20gJy4vbGliL3NsaWNlL2luZGV4LmpzJztcbmV4cG9ydCB0eXBlIHsgRm9yd2FyZFNsaWNlRm9yS2V5T3B0aW9ucywgS2V5VGltZWxpbmVPcHRpb25zLCBTbGljZUZvcktleU9wdGlvbnMgfSBmcm9tICcuL2xpYi9zbGljZS9pbmRleC5qcyc7XG5leHBvcnQge1xuICBhcnJheVByb3ZlbmFuY2UsXG4gIGVsZW1lbnRQcm92ZW5hbmNlLFxuICBmb3JtYXRGb3J3YXJkU2xpY2UsXG4gIGZvcm1hdFNsaWNlLFxuICBmb3JtYXRUaW1lbGluZSxcbiAgZm9yd2FyZFNsaWNlRm9yS2V5LFxuICBmb3J3YXJkU2xpY2VUb0pTT04sXG4gIGtleXNSZWFkRnJvbUV4ZWN1dGlvblRyZWUsXG4gIGtleXNSZWFkRnJvbU1hcCxcbiAga2V5VGltZWxpbmUsXG4gIG5vcm1hbGlzZVN0YXRlS2V5LFxuICByZXNvbHZlS2V5c1JlYWRTb3VyY2UsXG4gIHNsaWNlRm9yS2V5LFxuICBzbGljZVRvSlNPTixcbn0gZnJvbSAnLi9saWIvc2xpY2UvaW5kZXguanMnO1xuXG4vLyDilIDilIAgaG9uZXN0eSDigJQgdGhlIE9ORSByZWdpc3RyeSBvZiB3aGF0IGEgcmVhZGVyIGNhbm5vdCBzZWUg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4vLyBUaGUgaG9uZXN0eSBzaWduYWxzIHRoaXMgZG9vcidzIHJlYWRlcnMgcHJvZHVjZSDigJQgYSBzbGljZSdzIGBIb25lc3R5Tm90ZS5jb2RlYCBhbmQgYG1pc3NpbmdgXG4vLyByZWFzb24sIGEgZmVkIGVkZ2UncyBhbmQgYW4gZWxlbWVudCBiaXJ0aCdzIGBiYXNpc2AsIGEgZm9sZCdzIGBiYXNpc2AgYW5kIGByZWRhY3RlZGAgcGF0aHMsIGFcbi8vIGBMb2dHYXBgLCBhIGNhdXNhbCBub2RlJ3MgYGluY29tcGxldGVTb3VyY2VzYCBhbmQgYHRydW5jYXRlZGAg4oCUIGVhY2ggaGFzIGEgY29kZSBoZXJlIGFuZCB0aGUgT05FXG4vLyBzZW50ZW5jZSB0aGF0IHNheXMgd2hhdCBpdCBtZWFucywgc28gYSBsZW5zIG9yIGFuIGFnZW50IHRvb2wgZXhwbGFpbnMgYW55IG9mIHRoZW0gZnJvbSBvbmUgcGxhY2Vcbi8vIGluc3RlYWQgb2Yga2VlcGluZyBpdHMgb3duIHRhYmxlLiBUaGUgdW5pb25zIG9mIHRob3NlIGNvZGVzIGV4cG9ydGVkIGFib3ZlIChgSG9uZXN0eU5vdGVDb2RlYCxcbi8vIGBNaXNzaW5nU2xpY2VSZWFzb25gLCBgTWlzc2luZ1Byb3ZlbmFuY2VSZWFzb25gLCBgRmVkQmFzaXNgLCBgQXR0cmlidXRpb25CYXNpc2AsIGBGb2xkQmFzaXNgKSBhcmVcbi8vIHN1YnNldHMgb2YgYEhvbmVzdHlDb2RlYCwgYW5kIHRlc3QvYXJjaGl0ZWN0dXJlL2hvbmVzdHktdm9jYWJ1bGFyeS50ZXN0LnRzIGZhaWxzIG9uIGEgdW5pb24gb2Zcbi8vIHN0cmluZyBsaXRlcmFscyB0aGlzIGRvb3IgZXhwb3J0cyB0aGF0IGlzIG5laXRoZXIgcmVnaXN0ZXJlZCBub3IgbmFtZWQgdGhlcmUgYXMgYSBkaWZmZXJlbnQga2luZFxuLy8gb2Ygd29yZC4gU2VlIHNyYy9saWIvbWVtb3J5L1JFQURNRS5tZC5cbmV4cG9ydCB0eXBlIHsgSG9uZXN0eUNvZGUgfSBmcm9tICcuL2xpYi9tZW1vcnkvaW5kZXguanMnO1xuZXhwb3J0IHsgSE9ORVNUWV9DT0RFUyB9IGZyb20gJy4vbGliL21lbW9yeS9pbmRleC5qcyc7XG5cbi8vIOKUgOKUgCB2NSBTdG9yZXMgKGNvbmNyZXRlLCBjb21wb3NhYmxlIOKAlCBwcmltYXJ5IHJlY29yZGVyIEFQSSkg4pSA4pSA4pSA4pSA4pSAXG4vLyBDb21wb3NlIHRoZXNlIHZpYSBgbmV3IFN0b3JlPFQ+KClgIGFzIGEgZmllbGQgb24geW91ciByZWNvcmRlclxuLy8gY2xhc3MuIE9uZSBwdXJwb3NlIHBlciByZWNvcmRlcjogc3RvcmVzIGFyZSBzdG9yYWdlOyByZWNvcmRlcnNcbi8vIGFyZSBldmVudC1ob29rIGludGVyZmFjZSBpbXBsZW1lbnRhdGlvbnMuXG5leHBvcnQgeyBCb3VuZGFyeVN0YXRlU3RvcmUgfSBmcm9tICcuL2xpYi9yZWNvcmRlci9Cb3VuZGFyeVN0YXRlU3RvcmUuanMnO1xuZXhwb3J0IHsgS2V5ZWRTdG9yZSB9IGZyb20gJy4vbGliL3JlY29yZGVyL0tleWVkU3RvcmUuanMnO1xuZXhwb3J0IHsgU2VxdWVuY2VTdG9yZSB9IGZyb20gJy4vbGliL3JlY29yZGVyL1NlcXVlbmNlU3RvcmUuanMnO1xuXG4vLyDilIDilIAgdjUuMSBDb21taXQgZ3JvdXBpbmcgcHJpbWl0aXZlIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuLy8gSW50ZXJ2YWwgaW5kZXggb3ZlciBjb21taXQgaW5kaWNlcy4gQnVpbHQgaW5jcmVtZW50YWxseSBkdXJpbmdcbi8vIHRyYXZlcnNhbDogb3BlbigpIG9uIGJvdW5kYXJ5IGVudHJ5LCBjbG9zZSgpIG9uIGV4aXQuIFF1ZXJ5IGF0IGFueVxuLy8gY29tbWl0IHBvc2l0aW9uIHdpdGggZW5jbG9zaW5nKCkvb3ZlcmxhcHBpbmcoKS4gR2VuZXJpYyBvdmVyIFRMYWJlbFxuLy8g4oCUIGZvb3RwcmludGpzIG93bnMgWkVSTyBrbm93bGVkZ2Ugb2Ygd2hhdCBjb25zdW1lcnMgdXNlIGFzIGxhYmVscy5cbi8vIFNlZSBkb2NzL2Rlc2lnbi9jb21taXQtcmFuZ2UtaW5kZXgubWQgZm9yIHRoZSBmdWxsIGNvbnRyYWN0LlxuZXhwb3J0IHR5cGUgeyBSYW5nZUVudHJ5LCBSYW5nZVRva2VuIH0gZnJvbSAnLi9saWIvcmVjb3JkZXIvQ29tbWl0UmFuZ2VJbmRleC5qcyc7XG5leHBvcnQgeyBDb21taXRSYW5nZUluZGV4IH0gZnJvbSAnLi9saWIvcmVjb3JkZXIvQ29tbWl0UmFuZ2VJbmRleC5qcyc7XG5cbi8vIFRvcG9sb2d5UmVjb3JkZXIg4oCUIGNvbXBvc2l0aW9uIGdyYXBoIGFjY3VtdWxhdG9yIChzdWJmbG93cyArIGNvbnRyb2wtZmxvdyBlZGdlcylcbmV4cG9ydCB0eXBlIHtcbiAgVG9wb2xvZ3ksXG4gIFRvcG9sb2d5RWRnZSxcbiAgVG9wb2xvZ3lJbmNvbWluZ0tpbmQsXG4gIFRvcG9sb2d5Tm9kZSxcbiAgVG9wb2xvZ3lSZWNvcmRlck9wdGlvbnMsXG59IGZyb20gJy4vbGliL3JlY29yZGVyL1RvcG9sb2d5UmVjb3JkZXIuanMnO1xuZXhwb3J0IHsgVG9wb2xvZ3lSZWNvcmRlciwgdG9wb2xvZ3lSZWNvcmRlciB9IGZyb20gJy4vbGliL3JlY29yZGVyL1RvcG9sb2d5UmVjb3JkZXIuanMnO1xuXG4vLyBJbk91dFJlY29yZGVyIOKAlCBjaGFydCBpbi9vdXQgc3RyZWFtIChlbnRyeS9leGl0IHBhaXJzIGF0IGV2ZXJ5IGNoYXJ0IGJvdW5kYXJ5LFxuLy8gaW5jbHVkaW5nIHRoZSB0b3AtbGV2ZWwgcnVuIGFuZCBldmVyeSBzdWJmbG93KVxuZXhwb3J0IHR5cGUgeyBJbk91dEVudHJ5LCBJbk91dFBoYXNlLCBJbk91dFJlY29yZGVyT3B0aW9ucyB9IGZyb20gJy4vbGliL3JlY29yZGVyL0luT3V0UmVjb3JkZXIuanMnO1xuZXhwb3J0IHsgSW5PdXRSZWNvcmRlciwgaW5PdXRSZWNvcmRlciwgUk9PVF9SVU5USU1FX1NUQUdFX0lELCBST09UX1NVQkZMT1dfSUQgfSBmcm9tICcuL2xpYi9yZWNvcmRlci9Jbk91dFJlY29yZGVyLmpzJztcblxuLy8gQ29udHJvbERlcFJlY29yZGVyIOKAlCBjb250cm9sLWRlcGVuZGVuY2UgdHJhY2tpbmcgKFJGQy0wMDMgRDUpOiByZWNvcmRzXG4vLyBvbkRlY2lzaW9uL29uU2VsZWN0ZWQgKyB0aGUgRDEgcnVudGltZSBhbmNlc3RvciBjaGFpbiwgYW5zd2VycyBcIndoaWNoXG4vLyBkZWNpc2lvbiBhbGxvd2VkIHRoaXMgc3RhZ2UgdG8gcnVuP1wiIOKAlCB0aGUgYnVpbHQtaW4gcHJvZHVjZXIgZm9yXG4vLyBjYXVzYWxDaGFpbidzIGBjb250cm9sRGVwc2Agb3B0aW9uLlxuZXhwb3J0IHR5cGUgeyBDb250cm9sRGVjaXNpb25SZWNvcmQsIENvbnRyb2xEZXBSZWNvcmRlck9wdGlvbnMgfSBmcm9tICcuL2xpYi9yZWNvcmRlci9Db250cm9sRGVwUmVjb3JkZXIuanMnO1xuZXhwb3J0IHsgQ29udHJvbERlcFJlY29yZGVyLCBjb250cm9sRGVwUmVjb3JkZXIgfSBmcm9tICcuL2xpYi9yZWNvcmRlci9Db250cm9sRGVwUmVjb3JkZXIuanMnO1xuXG4vLyBRdWFsaXR5UmVjb3JkZXIg4oCUIHBlci1zdGVwIHF1YWxpdHkgc2NvcmluZyB3aXRoIGJhY2t0cmFja2luZ1xuZXhwb3J0IHR5cGUgeyBRdWFsaXR5RW50cnksIFF1YWxpdHlSZWNvcmRlck9wdGlvbnMsIFF1YWxpdHlTY29yaW5nRm4gfSBmcm9tICcuL2xpYi9yZWNvcmRlci9RdWFsaXR5UmVjb3JkZXIuanMnO1xuZXhwb3J0IHsgUXVhbGl0eVJlY29yZGVyIH0gZnJvbSAnLi9saWIvcmVjb3JkZXIvUXVhbGl0eVJlY29yZGVyLmpzJztcblxuLy8gcXVhbGl0eVRyYWNlIOKAlCBRdWFsaXR5IFN0YWNrIFRyYWNlIChiYWNrdHJhY2sgZnJvbSBsb3ctc2NvcmluZyBzdGVwcylcbmV4cG9ydCB0eXBlIHsgUXVhbGl0eUZyYW1lLCBRdWFsaXR5U3RhY2tUcmFjZSB9IGZyb20gJy4vbGliL3JlY29yZGVyL3F1YWxpdHlUcmFjZS5qcyc7XG5leHBvcnQgeyBmb3JtYXRRdWFsaXR5VHJhY2UsIHF1YWxpdHlUcmFjZSB9IGZyb20gJy4vbGliL3JlY29yZGVyL3F1YWxpdHlUcmFjZS5qcyc7XG4iXX0=
@@ -0,0 +1,47 @@
1
+ /**
2
+ * footprintjs/write — the public way to write a record.
3
+ *
4
+ * A record is what a run wrote: a frozen base and an append-only log of bundles, one per step
5
+ * (docs/guides/record-contract.md). This door hands out the classes the engine itself writes one
6
+ * with — there is no wrapper, so a record written here and one a flowchart wrote come from the same
7
+ * code and the same bytes:
8
+ *
9
+ * - `SharedMemory` — the heap: live state, one generation per commit (copy-on-write);
10
+ * - `EventLog` — the log: the fold base and the bundles, frozen as they are recorded;
11
+ * - `RecordFrame` — one step's frame: what it read (`read`, `noteRead`), what it staged
12
+ * (`write`, with a redaction verdict's bytes as `WriteScrub`), and its
13
+ * commit onto the heap and the log (`commit`, named by a `CommitStamp`).
14
+ *
15
+ * The step's encoding is two dials (`RecordEncoding`): `commitValues` (`'full'` | `'delta'`) and
16
+ * `writeProvenance` (`'off'` | `'reads-prefix'`, `WriteProvenanceMode`).
17
+ *
18
+ * Every type this door names is the record's own: nothing here loads or names the engine
19
+ * (test/architecture/write-door.test.ts). Its names and the bytes they write are promised under the
20
+ * record fixtures' re-pin policy (test/fixtures/README.md): a refactor never moves a byte.
21
+ *
22
+ * @example
23
+ * ```typescript
24
+ * import { EventLog, RecordFrame, SharedMemory } from 'footprintjs/write';
25
+ * import { stateAt } from 'footprintjs/trace';
26
+ *
27
+ * const state = new SharedMemory(undefined, { count: 0 }); // the heap, seeded
28
+ * const log = new EventLog(state.getState()); // its fold base is the seed
29
+ *
30
+ * const frame = new RecordFrame(state, log); // one step, at the root
31
+ * frame.useEncoding({ commitValues: 'full', writeProvenance: 'reads-prefix' });
32
+ * const count = frame.read([], 'count') as number;
33
+ * frame.noteRead([], 'count'); // the bundle names the read
34
+ * frame.write(frame.at([], 'count'), count + 1, 'set');
35
+ * frame.commit(() => ({ stage: 'Increment', stageId: 'increment', runtimeStageId: 'increment#0' }));
36
+ *
37
+ * stateAt({ initialState: log.getInitialState(), commitLog: log.list() }, 0).state; // { count: 1 }
38
+ * ```
39
+ *
40
+ * @module write
41
+ */
42
+ export { EventLog } from './lib/memory/EventLog.js';
43
+ export { SharedMemory } from './lib/memory/SharedMemory.js';
44
+ export type { CommitStamp } from './lib/memory/recordCommit.js';
45
+ export type { RecordEncoding, WriteScrub, WriteVerb } from './lib/memory/RecordFrame.js';
46
+ export { RecordFrame } from './lib/memory/RecordFrame.js';
47
+ export type { WriteProvenanceMode } from './lib/memory/types.js';
@@ -0,0 +1,46 @@
1
+ /**
2
+ * footprintjs/write — the public way to write a record.
3
+ *
4
+ * A record is what a run wrote: a frozen base and an append-only log of bundles, one per step
5
+ * (docs/guides/record-contract.md). This door hands out the classes the engine itself writes one
6
+ * with — there is no wrapper, so a record written here and one a flowchart wrote come from the same
7
+ * code and the same bytes:
8
+ *
9
+ * - `SharedMemory` — the heap: live state, one generation per commit (copy-on-write);
10
+ * - `EventLog` — the log: the fold base and the bundles, frozen as they are recorded;
11
+ * - `RecordFrame` — one step's frame: what it read (`read`, `noteRead`), what it staged
12
+ * (`write`, with a redaction verdict's bytes as `WriteScrub`), and its
13
+ * commit onto the heap and the log (`commit`, named by a `CommitStamp`).
14
+ *
15
+ * The step's encoding is two dials (`RecordEncoding`): `commitValues` (`'full'` | `'delta'`) and
16
+ * `writeProvenance` (`'off'` | `'reads-prefix'`, `WriteProvenanceMode`).
17
+ *
18
+ * Every type this door names is the record's own: nothing here loads or names the engine
19
+ * (test/architecture/write-door.test.ts). Its names and the bytes they write are promised under the
20
+ * record fixtures' re-pin policy (test/fixtures/README.md): a refactor never moves a byte.
21
+ *
22
+ * @example
23
+ * ```typescript
24
+ * import { EventLog, RecordFrame, SharedMemory } from 'footprintjs/write';
25
+ * import { stateAt } from 'footprintjs/trace';
26
+ *
27
+ * const state = new SharedMemory(undefined, { count: 0 }); // the heap, seeded
28
+ * const log = new EventLog(state.getState()); // its fold base is the seed
29
+ *
30
+ * const frame = new RecordFrame(state, log); // one step, at the root
31
+ * frame.useEncoding({ commitValues: 'full', writeProvenance: 'reads-prefix' });
32
+ * const count = frame.read([], 'count') as number;
33
+ * frame.noteRead([], 'count'); // the bundle names the read
34
+ * frame.write(frame.at([], 'count'), count + 1, 'set');
35
+ * frame.commit(() => ({ stage: 'Increment', stageId: 'increment', runtimeStageId: 'increment#0' }));
36
+ *
37
+ * stateAt({ initialState: log.getInitialState(), commitLog: log.list() }, 0).state; // { count: 1 }
38
+ * ```
39
+ *
40
+ * @module write
41
+ */
42
+ // The heap and the log.
43
+ export { EventLog } from './lib/memory/EventLog.js';
44
+ export { SharedMemory } from './lib/memory/SharedMemory.js';
45
+ export { RecordFrame } from './lib/memory/RecordFrame.js';
46
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid3JpdGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvd3JpdGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F3Q0c7QUFFSCx3QkFBd0I7QUFDeEIsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUs1RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sNkJBQTZCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIGZvb3RwcmludGpzL3dyaXRlIOKAlCB0aGUgcHVibGljIHdheSB0byB3cml0ZSBhIHJlY29yZC5cbiAqXG4gKiBBIHJlY29yZCBpcyB3aGF0IGEgcnVuIHdyb3RlOiBhIGZyb3plbiBiYXNlIGFuZCBhbiBhcHBlbmQtb25seSBsb2cgb2YgYnVuZGxlcywgb25lIHBlciBzdGVwXG4gKiAoZG9jcy9ndWlkZXMvcmVjb3JkLWNvbnRyYWN0Lm1kKS4gVGhpcyBkb29yIGhhbmRzIG91dCB0aGUgY2xhc3NlcyB0aGUgZW5naW5lIGl0c2VsZiB3cml0ZXMgb25lXG4gKiB3aXRoIOKAlCB0aGVyZSBpcyBubyB3cmFwcGVyLCBzbyBhIHJlY29yZCB3cml0dGVuIGhlcmUgYW5kIG9uZSBhIGZsb3djaGFydCB3cm90ZSBjb21lIGZyb20gdGhlIHNhbWVcbiAqIGNvZGUgYW5kIHRoZSBzYW1lIGJ5dGVzOlxuICpcbiAqICAgLSBgU2hhcmVkTWVtb3J5YCDigJQgdGhlIGhlYXA6IGxpdmUgc3RhdGUsIG9uZSBnZW5lcmF0aW9uIHBlciBjb21taXQgKGNvcHktb24td3JpdGUpO1xuICogICAtIGBFdmVudExvZ2AgICAgIOKAlCB0aGUgbG9nOiB0aGUgZm9sZCBiYXNlIGFuZCB0aGUgYnVuZGxlcywgZnJvemVuIGFzIHRoZXkgYXJlIHJlY29yZGVkO1xuICogICAtIGBSZWNvcmRGcmFtZWAgIOKAlCBvbmUgc3RlcCdzIGZyYW1lOiB3aGF0IGl0IHJlYWQgKGByZWFkYCwgYG5vdGVSZWFkYCksIHdoYXQgaXQgc3RhZ2VkXG4gKiAgICAgICAgICAgICAgICAgICAgICAoYHdyaXRlYCwgd2l0aCBhIHJlZGFjdGlvbiB2ZXJkaWN0J3MgYnl0ZXMgYXMgYFdyaXRlU2NydWJgKSwgYW5kIGl0c1xuICogICAgICAgICAgICAgICAgICAgICAgY29tbWl0IG9udG8gdGhlIGhlYXAgYW5kIHRoZSBsb2cgKGBjb21taXRgLCBuYW1lZCBieSBhIGBDb21taXRTdGFtcGApLlxuICpcbiAqIFRoZSBzdGVwJ3MgZW5jb2RpbmcgaXMgdHdvIGRpYWxzIChgUmVjb3JkRW5jb2RpbmdgKTogYGNvbW1pdFZhbHVlc2AgKGAnZnVsbCdgIHwgYCdkZWx0YSdgKSBhbmRcbiAqIGB3cml0ZVByb3ZlbmFuY2VgIChgJ29mZidgIHwgYCdyZWFkcy1wcmVmaXgnYCwgYFdyaXRlUHJvdmVuYW5jZU1vZGVgKS5cbiAqXG4gKiBFdmVyeSB0eXBlIHRoaXMgZG9vciBuYW1lcyBpcyB0aGUgcmVjb3JkJ3Mgb3duOiBub3RoaW5nIGhlcmUgbG9hZHMgb3IgbmFtZXMgdGhlIGVuZ2luZVxuICogKHRlc3QvYXJjaGl0ZWN0dXJlL3dyaXRlLWRvb3IudGVzdC50cykuIEl0cyBuYW1lcyBhbmQgdGhlIGJ5dGVzIHRoZXkgd3JpdGUgYXJlIHByb21pc2VkIHVuZGVyIHRoZVxuICogcmVjb3JkIGZpeHR1cmVzJyByZS1waW4gcG9saWN5ICh0ZXN0L2ZpeHR1cmVzL1JFQURNRS5tZCk6IGEgcmVmYWN0b3IgbmV2ZXIgbW92ZXMgYSBieXRlLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBpbXBvcnQgeyBFdmVudExvZywgUmVjb3JkRnJhbWUsIFNoYXJlZE1lbW9yeSB9IGZyb20gJ2Zvb3RwcmludGpzL3dyaXRlJztcbiAqIGltcG9ydCB7IHN0YXRlQXQgfSBmcm9tICdmb290cHJpbnRqcy90cmFjZSc7XG4gKlxuICogY29uc3Qgc3RhdGUgPSBuZXcgU2hhcmVkTWVtb3J5KHVuZGVmaW5lZCwgeyBjb3VudDogMCB9KTsgLy8gdGhlIGhlYXAsIHNlZWRlZFxuICogY29uc3QgbG9nID0gbmV3IEV2ZW50TG9nKHN0YXRlLmdldFN0YXRlKCkpOyAgICAgICAgICAgICAgLy8gaXRzIGZvbGQgYmFzZSBpcyB0aGUgc2VlZFxuICpcbiAqIGNvbnN0IGZyYW1lID0gbmV3IFJlY29yZEZyYW1lKHN0YXRlLCBsb2cpOyAgICAgICAgICAgICAgIC8vIG9uZSBzdGVwLCBhdCB0aGUgcm9vdFxuICogZnJhbWUudXNlRW5jb2RpbmcoeyBjb21taXRWYWx1ZXM6ICdmdWxsJywgd3JpdGVQcm92ZW5hbmNlOiAncmVhZHMtcHJlZml4JyB9KTtcbiAqIGNvbnN0IGNvdW50ID0gZnJhbWUucmVhZChbXSwgJ2NvdW50JykgYXMgbnVtYmVyO1xuICogZnJhbWUubm90ZVJlYWQoW10sICdjb3VudCcpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhlIGJ1bmRsZSBuYW1lcyB0aGUgcmVhZFxuICogZnJhbWUud3JpdGUoZnJhbWUuYXQoW10sICdjb3VudCcpLCBjb3VudCArIDEsICdzZXQnKTtcbiAqIGZyYW1lLmNvbW1pdCgoKSA9PiAoeyBzdGFnZTogJ0luY3JlbWVudCcsIHN0YWdlSWQ6ICdpbmNyZW1lbnQnLCBydW50aW1lU3RhZ2VJZDogJ2luY3JlbWVudCMwJyB9KSk7XG4gKlxuICogc3RhdGVBdCh7IGluaXRpYWxTdGF0ZTogbG9nLmdldEluaXRpYWxTdGF0ZSgpLCBjb21taXRMb2c6IGxvZy5saXN0KCkgfSwgMCkuc3RhdGU7IC8vIHsgY291bnQ6IDEgfVxuICogYGBgXG4gKlxuICogQG1vZHVsZSB3cml0ZVxuICovXG5cbi8vIFRoZSBoZWFwIGFuZCB0aGUgbG9nLlxuZXhwb3J0IHsgRXZlbnRMb2cgfSBmcm9tICcuL2xpYi9tZW1vcnkvRXZlbnRMb2cuanMnO1xuZXhwb3J0IHsgU2hhcmVkTWVtb3J5IH0gZnJvbSAnLi9saWIvbWVtb3J5L1NoYXJlZE1lbW9yeS5qcyc7XG5cbi8vIE9uZSBzdGVwJ3MgZnJhbWUsIGFuZCB3aGF0IGl0IHRha2VzOiB0aGUgZGlhbHMsIHRoZSB2ZXJicywgYSB2ZXJkaWN0J3MgYnl0ZXMsIHRoZSBuYW1lcyBvbiBpdHMgYnVuZGxlLlxuZXhwb3J0IHR5cGUgeyBDb21taXRTdGFtcCB9IGZyb20gJy4vbGliL21lbW9yeS9yZWNvcmRDb21taXQuanMnO1xuZXhwb3J0IHR5cGUgeyBSZWNvcmRFbmNvZGluZywgV3JpdGVTY3J1YiwgV3JpdGVWZXJiIH0gZnJvbSAnLi9saWIvbWVtb3J5L1JlY29yZEZyYW1lLmpzJztcbmV4cG9ydCB7IFJlY29yZEZyYW1lIH0gZnJvbSAnLi9saWIvbWVtb3J5L1JlY29yZEZyYW1lLmpzJztcbmV4cG9ydCB0eXBlIHsgV3JpdGVQcm92ZW5hbmNlTW9kZSB9IGZyb20gJy4vbGliL21lbW9yeS90eXBlcy5qcyc7XG4iXX0=
package/dist/index.js CHANGED
@@ -5,11 +5,13 @@
5
5
  * The flowchart pattern for backend code.
6
6
  * Build → Run → Observe.
7
7
  *
8
- * **Three import paths:**
8
+ * **The common import paths:**
9
9
  * ```ts
10
10
  * import { flowChart, decide, narrative } from 'footprintjs'; // main — start here
11
11
  * import { metrics, debug, manifest } from 'footprintjs/recorders'; // recorder factories
12
- * import { SharedMemory, StageContext } from 'footprintjs/advanced'; // internals
12
+ * import { stateAt, causalChain } from 'footprintjs/trace'; // read a finished run
13
+ * import { RecordFrame, EventLog } from 'footprintjs/write'; // write a record yourself
14
+ * import { StageContext } from 'footprintjs/advanced'; // engine internals
13
15
  * ```
14
16
  *
15
17
  * @module
@@ -129,4 +131,4 @@ Object.defineProperty(exports, "isDevMode", { enumerable: true, get: function ()
129
131
  // same bytes JSON.stringify emits, for a deep `next` chain it cannot encode.
130
132
  var stringifySnapshot_js_1 = require("./lib/runner/stringifySnapshot.js");
131
133
  Object.defineProperty(exports, "stringifySnapshot", { enumerable: true, get: function () { return stringifySnapshot_js_1.stringifySnapshot; } });
132
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7Ozs7Ozs7OztHQWNHOzs7QUFTSCw0QkFBNEI7QUFDNUIsbURBQXdGO0FBQS9FLHFHQUFBLFNBQVMsT0FBQTtBQUFFLDRHQUFBLGdCQUFnQixPQUFBO0FBQUUsNkdBQUEsaUJBQWlCLE9BQUE7QUE2QnZELDRCQUE0QjtBQUM1QiwrQ0FBMkM7QUFBbEMseUdBQUEsU0FBUyxPQUFBO0FBb0JsQixtQ0FBbUM7QUFDbkMsa0RBQXVEO0FBQTlDLGtHQUFBLE1BQU0sT0FBQTtBQUFFLGtHQUFBLE1BQU0sT0FBQTtBQWtCdkIsb0JBQW9CO0FBQ3BCLGtEQUEwRDtBQUFqRCw2R0FBQSxpQkFBaUIsT0FBQTtBQUUxQixvQkFBb0I7QUFDcEIsa0RBQW1EO0FBQTFDLHNHQUFBLFVBQVUsT0FBQTtBQXFCbkIsK0JBQStCO0FBQy9CLGlEQUFzRDtBQUE3QywwR0FBQSxjQUFjLE9BQUE7QUFFdkIsK0JBQStCO0FBQy9CLGlEQUFxRDtBQUE1Qyx5R0FBQSxhQUFhLE9BQUE7QUFFdEIsb0NBQW9DO0FBQ3BDLG9EQUE0RDtBQUFuRCw2R0FBQSxpQkFBaUIsT0FBQTtBQW1DMUIscUVBQXFFO0FBQ3JFLG9EQUtpQztBQUovQixrSEFBQSxzQkFBc0IsT0FBQTtBQUN0QixrSEFBQSxzQkFBc0IsT0FBQTtBQUN0Qiw4R0FBQSxrQkFBa0IsT0FBQTtBQUNsQix1R0FBQSxXQUFXLE9BQUE7QUFvRGIsK0JBQStCO0FBQy9CLGtEQUE4RDtBQUFyRCxpSEFBQSxxQkFBcUIsT0FBQTtBQUs5QiwrQkFBK0I7QUFDL0IsbURBQTZEO0FBQXBELGlIQUFBLG9CQUFvQixPQUFBO0FBRTdCLCtCQUErQjtBQUMvQixtREFBc0U7QUFBN0QsMEhBQUEsNkJBQTZCLE9BQUE7QUFFdEMsK0JBQStCO0FBQy9CLG1EQUF1RTtBQUE5RCwySEFBQSw4QkFBOEIsT0FBQTtBQUV2QywrQkFBK0I7QUFDL0IsbURBQXlFO0FBQWhFLDZIQUFBLGdDQUFnQyxPQUFBO0FBRXpDLCtCQUErQjtBQUMvQixtREFBaUU7QUFBeEQscUhBQUEsd0JBQXdCLE9BQUE7QUFFakMsK0JBQStCO0FBQy9CLG1EQUFzRTtBQUE3RCwwSEFBQSw2QkFBNkIsT0FBQTtBQUV0QywrQkFBK0I7QUFDL0IsbURBQW9FO0FBQTNELHdIQUFBLDJCQUEyQixPQUFBO0FBRXBDLCtCQUErQjtBQUMvQixtREFBc0U7QUFBN0QsMEhBQUEsNkJBQTZCLE9BQUE7QUFtQnRDLHVDQUF1QztBQUN2QyxtREFBNkU7QUFBcEUsK0dBQUEsa0JBQWtCLE9BQUE7QUFBRSw2R0FBQSxnQkFBZ0IsT0FBQTtBQUU3QywrRUFBK0U7QUFDL0UsNEVBQTRFO0FBQzVFLCtFQUErRTtBQUUvRSw4QkFBOEI7QUFDOUIscURBQTREO0FBQW5ELDhHQUFBLGlCQUFpQixPQUFBO0FBMEIxQiw2QkFBNkI7QUFDN0Isa0RBQWlEO0FBQXhDLHNHQUFBLFNBQVMsT0FBQTtBQWlFbEIsc0NBQXNDO0FBQ3RDLG1EQUEyRTtBQUFsRSx5R0FBQSxZQUFZLE9BQUE7QUFBRSwwR0FBQSxhQUFhLE9BQUE7QUFBRSxrR0FBQSxLQUFLLE9BQUE7QUFFM0Msc0NBQXNDO0FBQ3RDLG1EQUFxRztBQUE1RixpSEFBQSxvQkFBb0IsT0FBQTtBQUFFLGtIQUFBLHFCQUFxQixPQUFBO0FBQUUsNEdBQUEsZUFBZSxPQUFBO0FBU3JFLGdDQUFnQztBQUNoQyxtREFBMEU7QUFBakUsNkdBQUEsZ0JBQWdCLE9BQUE7QUFBRSw0R0FBQSxlQUFlLE9BQUE7QUFFMUMsK0VBQStFO0FBQy9FLGlEQUFpRDtBQUNqRCwrRUFBK0U7QUFFL0U7Ozs7Ozs7Ozs7O0dBV0c7QUFDSCwrQ0FBNEU7QUFBbkUsNEdBQUEsY0FBYyxPQUFBO0FBQUUsMkdBQUEsYUFBYSxPQUFBO0FBQUUsdUdBQUEsU0FBUyxPQUFBO0FBRWpELGlGQUFpRjtBQUNqRiw0RUFBNEU7QUFDNUUsc0RBQXNEO0FBQ3RELDRFQUE0RTtBQUM1RSw2RUFBNkU7QUFDN0UsMEVBQXNFO0FBQTdELHlIQUFBLGlCQUFpQixPQUFBIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBGb290UHJpbnQg4oCUIFB1YmxpYyBBUEkgKHYzKVxuICpcbiAqIFRoZSBmbG93Y2hhcnQgcGF0dGVybiBmb3IgYmFja2VuZCBjb2RlLlxuICogQnVpbGQg4oaSIFJ1biDihpIgT2JzZXJ2ZS5cbiAqXG4gKiAqKlRocmVlIGltcG9ydCBwYXRoczoqKlxuICogYGBgdHNcbiAqIGltcG9ydCB7IGZsb3dDaGFydCwgZGVjaWRlLCBuYXJyYXRpdmUgfSBmcm9tICdmb290cHJpbnRqcyc7ICAgICAgICAgICAvLyBtYWluIOKAlCBzdGFydCBoZXJlXG4gKiBpbXBvcnQgeyBtZXRyaWNzLCBkZWJ1ZywgbWFuaWZlc3QgfSAgICAgZnJvbSAnZm9vdHByaW50anMvcmVjb3JkZXJzJzsgLy8gcmVjb3JkZXIgZmFjdG9yaWVzXG4gKiBpbXBvcnQgeyBTaGFyZWRNZW1vcnksIFN0YWdlQ29udGV4dCB9ICAgZnJvbSAnZm9vdHByaW50anMvYWR2YW5jZWQnOyAgLy8gaW50ZXJuYWxzXG4gKiBgYGBcbiAqXG4gKiBAbW9kdWxlXG4gKi9cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gUXVpY2sgU3RhcnQg4oCUIEV2ZXJ5dGhpbmcgeW91IG5lZWQgZm9yIDkwJSBvZiB1c2UgY2FzZXNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqIEBjYXRlZ29yeSBRdWljayBTdGFydCAqL1xuZXhwb3J0IHR5cGUgeyBGbG93Q2hhcnQsIFN0YWdlRnVuY3Rpb24gYXMgU3RhZ2VIYW5kbGVyLCBTdHJlYW1IYW5kbGVycyB9IGZyb20gJy4vbGliL2J1aWxkZXIvaW5kZXguanMnO1xuXG4vKiogQGNhdGVnb3J5IFF1aWNrIFN0YXJ0ICovXG5leHBvcnQgeyBmbG93Q2hhcnQsIEZsb3dDaGFydEJ1aWxkZXIsIGZsb3dDaGFydFNlbGVjdG9yIH0gZnJvbSAnLi9saWIvYnVpbGRlci9pbmRleC5qcyc7XG5cbi8qKlxuICogQGNhdGVnb3J5IFF1aWNrIFN0YXJ0XG4gKlxuICogQ29uZmlnIGZvciBgLmFkZFBhcmFsbGVsRm9yRWFjaCgpYCDigJQgb25lIGJyYW5jaCBwZXIgaXRlbSwgYnJhbmNoIGNvdW50XG4gKiBkZWNpZGVkIGF0IHJ1biB0aW1lIGZyb20gdGhlIHBheWxvYWQuIGBtYXhCcmFuY2hlc2AgYW5kIGBpbnRvYCBhcmUgcmVxdWlyZWRcbiAqIG9uIHB1cnBvc2UgKHNlZSBkb2NzL2Rlc2lnbi9leGVjdXRpb24tY29udHJvbC5tZCkuXG4gKi9cbmV4cG9ydCB0eXBlIHsgQnJhbmNoQ2hhcnQsIFBhcmFsbGVsRm9yRWFjaENvbmZpZywgUmV0cnlQb2xpY3kgfSBmcm9tICcuL2xpYi9idWlsZGVyL2luZGV4LmpzJztcblxuLyoqIEBjYXRlZ29yeSBRdWljayBTdGFydCDigJQgYnVpbGQtdGltZSBvYnNlcnZlciAodHdpbiBvZiBGbG93UmVjb3JkZXIpICovXG5leHBvcnQgdHlwZSB7XG4gIFN0cnVjdHVyZURlY2lkZXJDb21wbGV0ZUV2ZW50LFxuICBTdHJ1Y3R1cmVFZGdlQWRkZWRFdmVudCxcbiAgU3RydWN0dXJlRWRnZUtpbmQsXG4gIFN0cnVjdHVyZUxvb3BFZGdlQWRkZWRFdmVudCxcbiAgU3RydWN0dXJlUmVjb3JkZXIsXG4gIFN0cnVjdHVyZVN0YWdlQWRkZWRFdmVudCxcbiAgU3RydWN0dXJlU3RhZ2VUYWdnZWRFdmVudCxcbiAgU3RydWN0dXJlU3ViZmxvd01vdW50ZWRFdmVudCxcbn0gZnJvbSAnLi9saWIvYnVpbGRlci9pbmRleC5qcyc7XG5cbi8qKiBAY2F0ZWdvcnkgUXVpY2sgU3RhcnQgKi9cbmV4cG9ydCB0eXBlIHsgVHlwZWRTdGFnZUZ1bmN0aW9uIH0gZnJvbSAnLi9saWIvYnVpbGRlci90eXBlZEZsb3dDaGFydC5qcyc7XG5cbi8qKiBAY2F0ZWdvcnkgUXVpY2sgU3RhcnQgKi9cbmV4cG9ydCB0eXBlIHsgU2NvcGVNZXRob2RzLCBUeXBlZFNjb3BlIH0gZnJvbSAnLi9saWIvcmVhY3RpdmUvaW5kZXguanMnO1xuXG4vKiogQGNhdGVnb3J5IFF1aWNrIFN0YXJ0ICovXG5leHBvcnQgeyBuYXJyYXRpdmUgfSBmcm9tICcuL3JlY29yZGVycy5qcyc7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIERlY2lzaW9uIEJyYW5jaGluZyDigJQgZGVjaWRlKCkgLyBzZWxlY3QoKSB3aXRoIGV2aWRlbmNlIGNhcHR1cmVcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqIEBjYXRlZ29yeSBEZWNpc2lvbiBCcmFuY2hpbmcgKi9cbmV4cG9ydCB0eXBlIHtcbiAgRGVjaWRlUnVsZSxcbiAgRGVjaXNpb25FdmlkZW5jZSxcbiAgRGVjaXNpb25SZXN1bHQsXG4gIERlZmF1bHRCcmFuY2gsXG4gIEZpbHRlck9wcyxcbiAgUnVsZUV2aWRlbmNlLFxuICBTZWxlY3Rpb25FdmlkZW5jZSxcbiAgU2VsZWN0aW9uUmVzdWx0LFxuICBXaGVuQ2xhdXNlLFxuICBXaGVyZUZpbHRlcixcbn0gZnJvbSAnLi9saWIvZGVjaWRlL2luZGV4LmpzJztcblxuLyoqIEBjYXRlZ29yeSBEZWNpc2lvbiBCcmFuY2hpbmcgKi9cbmV4cG9ydCB7IGRlY2lkZSwgc2VsZWN0IH0gZnJvbSAnLi9saWIvZGVjaWRlL2luZGV4LmpzJztcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gUnVuIOKAlCBFeGVjdXRlIGNoYXJ0cyBhbmQgY29sbGVjdCByZXN1bHRzXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKiBAY2F0ZWdvcnkgUnVuICovXG5leHBvcnQgdHlwZSB7IFJ1blJlc3VsdCB9IGZyb20gJy4vbGliL3J1bm5lci9pbmRleC5qcyc7XG5cbi8qKiBAY2F0ZWdvcnkgUnVuICovXG5leHBvcnQgdHlwZSB7IEZsb3dDaGFydEV4ZWN1dG9yT3B0aW9ucyB9IGZyb20gJy4vbGliL3J1bm5lci9pbmRleC5qcyc7XG5cbi8qKlxuICogVGhlIGZvdXIgb2JzZXJ2YWJpbGl0eSBkaWFscyBgRmxvd0NoYXJ0RXhlY3V0b3JPcHRpb25zYCBpbmhlcml0cy5cbiAqIEBjYXRlZ29yeSBSdW5cbiAqL1xuZXhwb3J0IHR5cGUgeyBSdW5EaWFscyB9IGZyb20gJy4vbGliL21lbW9yeS9pbmRleC5qcyc7XG5cbi8qKiBAY2F0ZWdvcnkgUnVuICovXG5leHBvcnQgeyBGbG93Q2hhcnRFeGVjdXRvciB9IGZyb20gJy4vbGliL3J1bm5lci9pbmRleC5qcyc7XG5cbi8qKiBAY2F0ZWdvcnkgUnVuICovXG5leHBvcnQgeyBSdW5Db250ZXh0IH0gZnJvbSAnLi9saWIvcnVubmVyL2luZGV4LmpzJztcblxuLyoqIEBjYXRlZ29yeSBSdW4gKi9cbmV4cG9ydCB0eXBlIHsgQ2hhcnRPcGVuQVBJT3B0aW9ucywgTUNQVG9vbERlc2NyaXB0aW9uLCBSdW5uYWJsZUZsb3dDaGFydCB9IGZyb20gJy4vbGliL3J1bm5lci9SdW5uYWJsZUNoYXJ0LmpzJztcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gT2JzZXJ2ZSDigJQgRGF0YSAoc2NvcGUgcmVjb3JkZXJzLCBmaXJlIGR1cmluZyBzdGFnZSBleGVjdXRpb24pXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKiBAY2F0ZWdvcnkgT2JzZXJ2ZSDigJQgRGF0YSAqL1xuZXhwb3J0IHR5cGUge1xuICBDb21taXRFdmVudCxcbiAgRXJyb3JFdmVudCxcbiAgUmVhZEV2ZW50LFxuICBSZWRhY3Rpb25Qb2xpY3ksXG4gIFJlZGFjdGlvblJlcG9ydCxcbiAgU2NvcGVSZWNvcmRlcixcbiAgU3RhZ2VFdmVudCxcbiAgV3JpdGVFdmVudCxcbn0gZnJvbSAnLi9saWIvc2NvcGUvaW5kZXguanMnO1xuXG4vKiogQGNhdGVnb3J5IE9ic2VydmUg4oCUIERhdGEgKi9cbmV4cG9ydCB7IE1ldHJpY1JlY29yZGVyIH0gZnJvbSAnLi9saWIvc2NvcGUvaW5kZXguanMnO1xuXG4vKiogQGNhdGVnb3J5IE9ic2VydmUg4oCUIERhdGEgKi9cbmV4cG9ydCB7IERlYnVnUmVjb3JkZXIgfSBmcm9tICcuL2xpYi9zY29wZS9pbmRleC5qcyc7XG5cbi8qKiBAY2F0ZWdvcnkgT2JzZXJ2ZSDigJQgT3BlcmF0aW9uICovXG5leHBvcnQgeyBSZWNvcmRlck9wZXJhdGlvbiB9IGZyb20gJy4vbGliL3JlY29yZGVyL2luZGV4LmpzJztcblxuLyoqXG4gKiBAY2F0ZWdvcnkgT2JzZXJ2ZSDigJQgRGVsaXZlcnkgdGllciAoUkZDLTAwMSBkZWZlcnJlZCBvYnNlcnZlcnMpXG4gKlxuICogRXZlcnkgYGF0dGFjaCpSZWNvcmRlcmAgY2FsbCBhY2NlcHRzIGFuIG9wdGlvbnMgYmFnOlxuICogYGV4ZWN1dG9yLmF0dGFjaFNjb3BlUmVjb3JkZXIocmVjLCB7IGRlbGl2ZXJ5OiAnZGVmZXJyZWQnIH0pYCB0YWtlcyB0aGVcbiAqIHJlY29yZGVyIE9VVCBvZiB0aGUgZW5naW5lJ3MgaG90IHBhdGgg4oCUIGV2ZW50cyBhcmUgY2FwdHVyZWQgaW50byBvbmVcbiAqIGJvdW5kZWQsIHRvdGFsbHktb3JkZXJlZCBxdWV1ZSBhbmQgZGVsaXZlcmVkIGF0IHRoZSBuZXh0IG1pY3JvdGFza1xuICogY2hlY2twb2ludCAoXCJvbmUgYmVhdCBiZWhpbmRcIikuIE9taXQgYGRlbGl2ZXJ5YCBmb3IgdGhlIGhpc3RvcmljYWxcbiAqIHN5bmNocm9ub3VzIGNhbGwgKGJ5dGUtaWRlbnRpY2FsIHRvIHByZXZpb3VzIHJlbGVhc2VzKS4gQWNjb3VudGluZ1xuICogc3VyZmFjZXMgb24gYHNuYXBzaG90Lm9ic2VydmVyU3RhdHNgOyBgZXhlY3V0b3IuZHJhaW5PYnNlcnZlcnMoKWAgc2V0dGxlc1xuICogYXN5bmMgbGlzdGVuZXJzIGJlZm9yZSBzaHV0ZG93bi4gU2VlIGBkb2NzL2d1aWRlcy9vYnNlcnZlcnMtZGVmZXJyZWQubWRgLlxuICovXG5leHBvcnQgdHlwZSB7XG4gIEF0dGFjaFJlY29yZGVyT3B0aW9ucyxcbiAgT2JzZXJ2ZXJEZWxpdmVyeSxcbiAgT2JzZXJ2ZXJEcmFpblJlc3VsdCxcbiAgT2JzZXJ2ZXJTdGF0cyxcbn0gZnJvbSAnLi9saWIvcnVubmVyL2luZGV4LmpzJztcblxuLyoqXG4gKiBAY2F0ZWdvcnkgT2JzZXJ2ZSDigJQgRGVsaXZlcnkgdGllciAoUkZDLTAwMSBkZWZlcnJlZCBvYnNlcnZlcnMpXG4gKlxuICogYENhcHR1cmVQb2xpY3lgIOKAlCBob3cgYSBkZWZlcnJlZCBldmVudCdzIHBheWxvYWQgaXMgbWF0ZXJpYWxpemVkIGF0XG4gKiBjYXB0dXJlIHRpbWUgKGAnY2xvbmUnYCBieSBkZWZhdWx0IGZvciBhdHRhY2ggb3B0aW9ucyAvIGAnc3VtbWFyeSdgIC8gYCdyZWYnYCkuIGBPdmVyZmxvd1BvbGljeWBcbiAqIOKAlCB3aGF0IGEgc2F0dXJhdGVkIHF1ZXVlIGRvZXMgKGAnZHJvcC1vbGRlc3QnYCBkZWZhdWx0IC8gYCdzYW1wbGUnYCAvXG4gKiBgJ2Jsb2NrJ2ApLiBgRGlzcGF0Y2hlclN0YXRzYCAvIGBMaXN0ZW5lclN0YXRzYCDigJQgdGhlIGFjY291bnRpbmcgc2hhcGVzXG4gKiBlbWJlZGRlZCBpbiBgT2JzZXJ2ZXJTdGF0c2AuIFR5cGVzIG9ubHkg4oCUIHRoZSBvYnNlcnZlci1xdWV1ZSBtb2R1bGVcbiAqIGl0c2VsZiBpcyBpbnRlcm5hbDsgY29uc3VtZXJzIHVzZSB0aGUgYXR0YWNoIG9wdGlvbnMuXG4gKi9cbmV4cG9ydCB0eXBlIHsgQ2FwdHVyZVBvbGljeSwgRGlzcGF0Y2hlclN0YXRzLCBMaXN0ZW5lclN0YXRzLCBPdmVyZmxvd1BvbGljeSB9IGZyb20gJy4vbGliL29ic2VydmVyLXF1ZXVlL2luZGV4LmpzJztcblxuLyoqIEBjYXRlZ29yeSBPYnNlcnZlIOKAlCBDb21iaW5lZCAoYm90aCBkYXRhLWZsb3cgYW5kIGNvbnRyb2wtZmxvdykgKi9cbmV4cG9ydCB0eXBlIHsgQ29tYmluZWRSZWNvcmRlciB9IGZyb20gJy4vbGliL3JlY29yZGVyL2luZGV4LmpzJztcbi8qKiBAY2F0ZWdvcnkgT2JzZXJ2ZSDigJQgQ29tYmluZWQgKGJvdGggZGF0YS1mbG93IGFuZCBjb250cm9sLWZsb3cpICovXG5leHBvcnQge1xuICBoYXNFbWl0UmVjb3JkZXJNZXRob2RzLFxuICBoYXNGbG93UmVjb3JkZXJNZXRob2RzLFxuICBoYXNSZWNvcmRlck1ldGhvZHMsXG4gIGlzRmxvd0V2ZW50LFxufSBmcm9tICcuL2xpYi9yZWNvcmRlci9pbmRleC5qcyc7XG5cbi8qKlxuICogQGNhdGVnb3J5IE9ic2VydmUg4oCUIEVtaXQgKHVzZXItYXV0aG9yZWQgc3RydWN0dXJlZCBldmVudHMpXG4gKlxuICogVGhpcmQgb2JzZXJ2ZXIgY2hhbm5lbCAoYWxvbmdzaWRlIGBTY29wZVJlY29yZGVyYCBhbmQgYEZsb3dSZWNvcmRlcmApLiBDb25zdW1lclxuICogY29kZSBjYWxscyBgc2NvcGUuJGVtaXQobmFtZSwgcGF5bG9hZClgIGZyb20gaW5zaWRlIGEgc3RhZ2U7IGV2ZXJ5IGF0dGFjaGVkXG4gKiBgRW1pdFJlY29yZGVyLm9uRW1pdChldmVudClgIGZpcmVzIHN5bmNocm9ub3VzbHkgd2l0aCBzdGFnZS1jb250ZXh0XG4gKiBlbnJpY2htZW50LiBQYXNzLXRocm91Z2gg4oCUIG5vIGJ1ZmZlcmluZywgemVybyBhbGxvY2F0aW9uIHdoZW4gbm8gcmVjb3JkZXJcbiAqIGlzIGF0dGFjaGVkLlxuICovXG5leHBvcnQgdHlwZSB7IEVtaXRFdmVudCwgRW1pdFJlY29yZGVyIH0gZnJvbSAnLi9saWIvcmVjb3JkZXIvaW5kZXguanMnO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBPYnNlcnZlIOKAlCBGbG93IChGbG93UmVjb3JkZXIsIGZpcmVzIGFmdGVyIHN0YWdlIGV4ZWN1dGlvbilcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqIEBjYXRlZ29yeSBPYnNlcnZlIOKAlCBGbG93ICovXG5leHBvcnQgdHlwZSB7XG4gIEZsb3dCcmVha0V2ZW50LFxuICBGbG93RGVjaXNpb25FdmVudCxcbiAgRmxvd0Vycm9yRXZlbnQsXG4gIEZsb3dGb3JrRXZlbnQsXG4gIEZsb3dMb29wRXZlbnQsXG4gIEZsb3dOZXh0RXZlbnQsXG4gIEZsb3dSZWNvcmRlcixcbiAgRmxvd1J1bkV2ZW50LFxuICBGbG93UnVuRmFpbGVkRXZlbnQsXG4gIEZsb3dTZWxlY3RlZEV2ZW50LFxuICBGbG93U3RhZ2VFdmVudCxcbiAgRmxvd1N0YWdlUmV0cnlFdmVudCxcbiAgRmxvd1N1YmZsb3dFdmVudCxcbiAgRmxvd1N1YmZsb3dSZWdpc3RlcmVkRXZlbnQsXG4gIEZsb3dUaHJvdHRsZWRFdmVudCxcbiAgUmVzdW1lTGluayxcbiAgVHJhdmVyc2FsQ29udGV4dCxcbn0gZnJvbSAnLi9saWIvZW5naW5lL2luZGV4LmpzJztcblxuLyoqIEBjYXRlZ29yeSBPYnNlcnZlIOKAlCBGbG93ICovXG5leHBvcnQgdHlwZSB7IENvbWJpbmVkTmFycmF0aXZlRW50cnkgfSBmcm9tICcuL2xpYi9lbmdpbmUvaW5kZXguanMnO1xuXG4vKipcbiAqIEBjYXRlZ29yeSBPYnNlcnZlIOKAlCBGbG93XG4gKlxuICogYE5hcnJhdGl2ZUZvcm1hdHRlcmAg4oCUIHBsdWdnYWJsZSBmb3JtYXR0ZXIgdGhhdCBjb252ZXJ0cyBldmVudCBjb250ZXh0XG4gKiBvYmplY3RzIGludG8gdGhlIHRleHQgbGluZXMgb2YgdGhlIG5hcnJhdGl2ZS4gUHJlZmVyIHRoaXMgbmFtZSBpbiBuZXdcbiAqIGNvZGU7IGBOYXJyYXRpdmVSZW5kZXJlcmAgaXMgYSBkZXByZWNhdGVkIGFsaWFzIHRoYXQgd2lsbCBiZSByZW1vdmVkIGluXG4gKiB0aGUgbmV4dCBtYWpvciByZWxlYXNlLlxuICovXG5leHBvcnQgdHlwZSB7IE5hcnJhdGl2ZUZvcm1hdHRlciwgTmFycmF0aXZlUmVuZGVyZXIgfSBmcm9tICcuL2xpYi9lbmdpbmUvaW5kZXguanMnO1xuXG4vKiogQGNhdGVnb3J5IE9ic2VydmUg4oCUIEZsb3cgKi9cbmV4cG9ydCB7IE5hcnJhdGl2ZUZsb3dSZWNvcmRlciB9IGZyb20gJy4vbGliL2VuZ2luZS9pbmRleC5qcyc7XG5cbi8qKiBAY2F0ZWdvcnkgT2JzZXJ2ZSDigJQgRmxvdyAqL1xuZXhwb3J0IHR5cGUgeyBNYW5pZmVzdEVudHJ5IH0gZnJvbSAnLi9saWIvZW5naW5lL2luZGV4LmpzJztcblxuLyoqIEBjYXRlZ29yeSBPYnNlcnZlIOKAlCBGbG93ICovXG5leHBvcnQgeyBNYW5pZmVzdEZsb3dSZWNvcmRlciB9IGZyb20gJy4vbGliL2VuZ2luZS9pbmRleC5qcyc7XG5cbi8qKiBAY2F0ZWdvcnkgT2JzZXJ2ZSDigJQgRmxvdyAqL1xuZXhwb3J0IHsgQWRhcHRpdmVOYXJyYXRpdmVGbG93UmVjb3JkZXIgfSBmcm9tICcuL2xpYi9lbmdpbmUvaW5kZXguanMnO1xuXG4vKiogQGNhdGVnb3J5IE9ic2VydmUg4oCUIEZsb3cgKi9cbmV4cG9ydCB7IE1pbGVzdG9uZU5hcnJhdGl2ZUZsb3dSZWNvcmRlciB9IGZyb20gJy4vbGliL2VuZ2luZS9pbmRleC5qcyc7XG5cbi8qKiBAY2F0ZWdvcnkgT2JzZXJ2ZSDigJQgRmxvdyAqL1xuZXhwb3J0IHsgUHJvZ3Jlc3NpdmVOYXJyYXRpdmVGbG93UmVjb3JkZXIgfSBmcm9tICcuL2xpYi9lbmdpbmUvaW5kZXguanMnO1xuXG4vKiogQGNhdGVnb3J5IE9ic2VydmUg4oCUIEZsb3cgKi9cbmV4cG9ydCB7IFJMRU5hcnJhdGl2ZUZsb3dSZWNvcmRlciB9IGZyb20gJy4vbGliL2VuZ2luZS9pbmRleC5qcyc7XG5cbi8qKiBAY2F0ZWdvcnkgT2JzZXJ2ZSDigJQgRmxvdyAqL1xuZXhwb3J0IHsgU2VwYXJhdGVOYXJyYXRpdmVGbG93UmVjb3JkZXIgfSBmcm9tICcuL2xpYi9lbmdpbmUvaW5kZXguanMnO1xuXG4vKiogQGNhdGVnb3J5IE9ic2VydmUg4oCUIEZsb3cgKi9cbmV4cG9ydCB7IFNpbGVudE5hcnJhdGl2ZUZsb3dSZWNvcmRlciB9IGZyb20gJy4vbGliL2VuZ2luZS9pbmRleC5qcyc7XG5cbi8qKiBAY2F0ZWdvcnkgT2JzZXJ2ZSDigJQgRmxvdyAqL1xuZXhwb3J0IHsgV2luZG93ZWROYXJyYXRpdmVGbG93UmVjb3JkZXIgfSBmcm9tICcuL2xpYi9lbmdpbmUvaW5kZXguanMnO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBTZWxmLURlc2NyaWJpbmcg4oCUIC5jb250cmFjdCgpLCB0b09wZW5BUEkoKSwgdG9NQ1BUb29sKClcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqIEBjYXRlZ29yeSBTZWxmLURlc2NyaWJpbmcgKi9cbmV4cG9ydCB0eXBlIHsgSnNvblNjaGVtYSB9IGZyb20gJy4vbGliL2NvbnRyYWN0L2luZGV4LmpzJztcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gU25hcHNob3QgJiBDb21wb3NpdGlvbiDigJQgU3ViZmxvdyBuYXZpZ2F0aW9uIGFuZCBDb21wb3NhYmxlUnVubmVyXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKiBAY2F0ZWdvcnkgU25hcHNob3QgJiBDb21wb3NpdGlvbiAqL1xuZXhwb3J0IHR5cGUgeyBDb21wb3NhYmxlUnVubmVyIH0gZnJvbSAnLi9saWIvcnVubmVyL2luZGV4LmpzJztcblxuLyoqIEBjYXRlZ29yeSBTbmFwc2hvdCAmIENvbXBvc2l0aW9uICovXG5leHBvcnQgdHlwZSB7IFJlY29yZGVyU25hcHNob3QsIFJ1bnRpbWVTbmFwc2hvdCwgU3VidHJlZVNuYXBzaG90IH0gZnJvbSAnLi9saWIvcnVubmVyL2luZGV4LmpzJztcblxuLyoqIEBjYXRlZ29yeSBTbmFwc2hvdCAmIENvbXBvc2l0aW9uICovXG5leHBvcnQgeyBnZXRTdWJ0cmVlU25hcHNob3QsIGxpc3RTdWJmbG93UGF0aHMgfSBmcm9tICcuL2xpYi9ydW5uZXIvaW5kZXguanMnO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBTY29wZVJlY29yZGVyIENvbXBvc2l0aW9uIOKAlCBCdW5kbGUgbXVsdGlwbGUgcmVjb3JkZXJzIGludG8gZG9tYWluIHByZXNldHNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqIEBjYXRlZ29yeSBTY29wZVJlY29yZGVyICovXG5leHBvcnQgeyBDb21wb3NpdGVSZWNvcmRlciB9IGZyb20gJy4vbGliL3JlY29yZGVyL2luZGV4LmpzJztcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gUGF1c2UvUmVzdW1lIOKAlCBTZXJpYWxpemFibGUgY2hlY2twb2ludHMgZm9yIGxvbmctcnVubmluZyBvciBodW1hbi1pbi10aGUtbG9vcCBmbG93c1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKiogQGNhdGVnb3J5IFBhdXNlL1Jlc3VtZSAqL1xuLyoqIEBjYXRlZ29yeSBQYXVzZS9SZXN1bWUgKi9cbmV4cG9ydCB0eXBlIHtcbiAgRmxvd2NoYXJ0Q2hlY2twb2ludCxcbiAgUGF1c2FibGVIYW5kbGVyLFxuICBQYXVzZWRFeGVjdXRpb24sXG4gIFBlbmRpbmdQYXVzZSxcbiAgUmVkYWN0aW9uTWFya3MsXG59IGZyb20gJy4vbGliL3BhdXNlL2luZGV4LmpzJztcblxuLyoqXG4gKiBAY2F0ZWdvcnkgUGF1c2UvUmVzdW1lXG4gKlxuICogYGludGVycnVwdChzY29wZSwgeyByZWFzb24sIGV4cGVjdHM/IH0pYCDigJQgc3RvcCBtaWQtc3RhZ2UgdG8gYXNrIGEgcXVlc3Rpb24sXG4gKiBhbmQgZ2V0IHRoZSBhbnN3ZXIgYmFjayBhdCB0aGUgc2FtZSBjYWxsIHNpdGUgd2hlbiB0aGUgcnVuIHJlc3VtZXMuIFJlc3VtZVxuICogcmUtZW50ZXJzIHRoZSBzdGFnZSBmcm9tIGl0cyBUT1AgKHN0YWdlcyBhcmUgYXRvbWljKSwgc28ga2VlcCB0aGUgaGFsZlxuICogYmVmb3JlIHRoZSBjYWxsIGlkZW1wb3RlbnQuXG4gKi9cbmV4cG9ydCB0eXBlIHsgSW50ZXJydXB0UGF5bG9hZCB9IGZyb20gJy4vbGliL3BhdXNlL2luZGV4LmpzJztcblxuLyoqIEBjYXRlZ29yeSBQYXVzZS9SZXN1bWUgKi9cbmV4cG9ydCB7IGludGVycnVwdCB9IGZyb20gJy4vbGliL3BhdXNlL2luZGV4LmpzJztcblxuLyoqIEBjYXRlZ29yeSBTY29wZVJlY29yZGVyICovXG5leHBvcnQgdHlwZSB7IENvbXBvc2l0ZVNuYXBzaG90IH0gZnJvbSAnLi9saWIvcmVjb3JkZXIvaW5kZXguanMnO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBDb25maWd1cmF0aW9uIOKAlCBUeXBlcyBwYXNzZWQgdG8gRmxvd0NoYXJ0RXhlY3V0b3IgYW5kIHJ1bigpXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKiBAY2F0ZWdvcnkgQ29uZmlndXJhdGlvbiAqL1xuZXhwb3J0IHR5cGUgeyBFeGVjdXRpb25FbnYsIEV4ZWN1dG9yUmVzdWx0LCBQYXVzZWRSZXN1bHQsIFJ1bk9wdGlvbnMgfSBmcm9tICcuL2xpYi9lbmdpbmUvaW5kZXguanMnO1xuXG4vKiogQGNhdGVnb3J5IENvbmZpZ3VyYXRpb24gKi9cbmV4cG9ydCB0eXBlIHsgU2NvcGVGYWN0b3J5IH0gZnJvbSAnLi9saWIvZW5naW5lL2luZGV4LmpzJztcblxuLyoqXG4gKiBAY2F0ZWdvcnkgQ29uZmlndXJhdGlvblxuICpcbiAqIFJlYWQtdHJhY2tpbmcgcG9saWN5IGZvciBgU3RhZ2VTbmFwc2hvdC5zdGFnZVJlYWRzYCAoIzE0KTpcbiAqIGAnZnVsbCdgIChkZWZhdWx0IOKAlCBwZXItcmVhZCB2YWx1ZSBjbG9uZSwgaGlzdG9yaWNhbCBiZWhhdmlvcikgL1xuICogYCdzdW1tYXJ5J2AgKGNoZWFwIGBSZWFkU3VtbWFyeU1hcmtlcmAgcGVyIHJlYWQpIC8gYCdvZmYnYCAobm8gdHJhY2tpbmcsXG4gKiB6ZXJvIHBlci1yZWFkIGNsb25lKS4gUGFzcyBhcyBgbmV3IEZsb3dDaGFydEV4ZWN1dG9yKGNoYXJ0LCB7IHJlYWRUcmFja2luZyB9KWBcbiAqIG9yIGNhbGwgYGV4ZWN1dG9yLnNldFJlYWRUcmFja2luZyhtb2RlKWAgYmVmb3JlIGBydW4oKWAuXG4gKi9cbmV4cG9ydCB0eXBlIHsgUmVhZFN1bW1hcnlNYXJrZXIsIFJlYWRUcmFja2luZ01vZGUgfSBmcm9tICcuL2xpYi9tZW1vcnkvaW5kZXguanMnO1xuXG4vKipcbiAqIEBjYXRlZ29yeSBDb25maWd1cmF0aW9uXG4gKlxuICogV3JpdGUtdHJhY2tpbmcgcG9saWN5IGZvciBgU3RhZ2VTbmFwc2hvdC5zdGFnZVdyaXRlc2AgKCMxM2MtQSkg4oCUIHRoZVxuICogc2libGluZyBvZiBgUmVhZFRyYWNraW5nTW9kZWA7IGJvdGggYWxpYXMgdGhlIHNoYXJlZCBgUmV0ZW50aW9uUG9saWN5YFxuICogZmFtaWx5IGZyb20gYGxpYi9jYXB0dXJlYC4gYCdmdWxsJ2AgKGRlZmF1bHQg4oCUIHBlci13cml0ZSB2YWx1ZSBjbG9uZSxcbiAqIGhpc3RvcmljYWwgYmVoYXZpb3IpIC8gYCdzdW1tYXJ5J2AgKGNoZWFwIGBXcml0ZVN1bW1hcnlNYXJrZXJgIHBlciB3cml0ZSlcbiAqIC8gYCdvZmYnYCAobm8gdHJhY2tpbmc7IGBzdGFnZVdyaXRlc2AgYWJzZW50IGFuZCB0aGUgYG9uQ29tbWl0YCBtdXRhdGlvbnNcbiAqIHBheWxvYWQgaXMgZW1wdHkg4oCUIHdyaXRlcyB0aGVtc2VsdmVzIHN0aWxsIGNvbW1pdCwgYW5kIHRoZSBjb21taXQgbG9nIGlzXG4gKiB1bmFmZmVjdGVkKS4gUGFzcyBhcyBgbmV3IEZsb3dDaGFydEV4ZWN1dG9yKGNoYXJ0LCB7IHdyaXRlVHJhY2tpbmcgfSlgIG9yXG4gKiBjYWxsIGBleGVjdXRvci5zZXRXcml0ZVRyYWNraW5nKG1vZGUpYCBiZWZvcmUgYHJ1bigpYC5cbiAqL1xuZXhwb3J0IHR5cGUgeyBSZXRlbnRpb25Qb2xpY3ksIFdyaXRlU3VtbWFyeU1hcmtlciwgV3JpdGVUcmFja2luZ01vZGUgfSBmcm9tICcuL2xpYi9tZW1vcnkvaW5kZXguanMnO1xuXG4vKipcbiAqIEBjYXRlZ29yeSBDb25maWd1cmF0aW9uXG4gKlxuICogQ29tbWl0LXZhbHVlcyBlbmNvZGluZyBmb3IgdGhlIENPTU1JVCBMT0cgKCMxM2MtQikg4oCUIHRoZSB0aGlyZCBkaWFsIG9mXG4gKiB0aGUgZmFtaWx5LCBhbmQgdGhlIG9ubHkgTE9TU0xFU1Mgb25lIChpdCBjaGFuZ2VzIHRoZSBsb2cncyBlbmNvZGluZyxcbiAqIG5ldmVyIGl0cyBpbmZvcm1hdGlvbikuIGAnZnVsbCdgIChkZWZhdWx0IOKAlCBldmVyeSBzdXJ2aXZpbmcgYHNldGAgc3RvcmVzXG4gKiB0aGUgZnVsbCBmaW5hbCB2YWx1ZSwgYnl0ZS1pZGVudGljYWwgdG8gaGlzdG9yeSkgLyBgJ2RlbHRhJ2AgKGFycmF5XG4gKiBuZXQtY2hhbmdlcyB0aGF0IGFyZSBcImJhc2UgcGx1cyBhIHRhaWxcIiBjb21taXQgYXMgYW4gYGFwcGVuZGAgdmVyYlxuICogc3RvcmluZyBvbmx5IHRoZSB0YWlsOyBgZGVsZXRlVmFsdWUoKWAgY29tbWl0cyBhcyBhIHJlYWwgYGRlbGV0ZWAgdmVyYjtcbiAqIG9uZSB0cmFjZSBlbnRyeSBwZXIgc3Vydml2aW5nIHBhdGgpLiBSZXBsYXkgcmVjb25zdHJ1Y3RzIGV2ZXJ5IHN0ZXAnc1xuICogZnVsbCBzdGF0ZSBleGFjdGx5LiBDb25zdW1lcnMgcmVhZGluZyBgYnVuZGxlLm92ZXJ3cml0ZVtrZXldYCBhcyB0aGUgZnVsbFxuICogdmFsdWUgbXVzdCB1c2UgYGNvbW1pdFZhbHVlQXRgIGZyb20gYGZvb3RwcmludGpzL3RyYWNlYC4gUGFzcyBhc1xuICogYG5ldyBGbG93Q2hhcnRFeGVjdXRvcihjaGFydCwgeyBjb21taXRWYWx1ZXMgfSlgIG9yIGNhbGxcbiAqIGBleGVjdXRvci5zZXRDb21taXRWYWx1ZXMobW9kZSlgIGJlZm9yZSBgcnVuKClgOyB0aGUgYWN0aXZlIG1vZGUgaXMgdGhlXG4gKiBzbmFwc2hvdCBkaXNjcmltaW5hbnQgYGdldFNuYXBzaG90KCkuY29tbWl0VmFsdWVzYC5cbiAqL1xuZXhwb3J0IHR5cGUgeyBDb21taXRWYWx1ZXNNb2RlIH0gZnJvbSAnLi9saWIvbWVtb3J5L2luZGV4LmpzJztcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gQ29udHJhY3QgJiBWYWxpZGF0aW9uXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKiBAY2F0ZWdvcnkgQ29udHJhY3QgJiBWYWxpZGF0aW9uICovXG5leHBvcnQgdHlwZSB7IFNjaGVtYUtpbmQsIFZhbGlkYXRpb25Jc3N1ZSwgVmFsaWRhdGlvblJlc3VsdCB9IGZyb20gJy4vbGliL3NjaGVtYS9pbmRleC5qcyc7XG5cbi8qKiBAY2F0ZWdvcnkgQ29udHJhY3QgJiBWYWxpZGF0aW9uICovXG5leHBvcnQgeyBkZXRlY3RTY2hlbWEsIGlzVmFsaWRhdGFibGUsIGlzWm9kIH0gZnJvbSAnLi9saWIvc2NoZW1hL2luZGV4LmpzJztcblxuLyoqIEBjYXRlZ29yeSBDb250cmFjdCAmIFZhbGlkYXRpb24gKi9cbmV4cG9ydCB7IElucHV0VmFsaWRhdGlvbkVycm9yLCB2YWxpZGF0ZUFnYWluc3RTY2hlbWEsIHZhbGlkYXRlT3JUaHJvdyB9IGZyb20gJy4vbGliL3NjaGVtYS9pbmRleC5qcyc7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIEVycm9yIFV0aWxpdGllc1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKiogQGNhdGVnb3J5IEVycm9yIFV0aWxpdGllcyAqL1xuZXhwb3J0IHR5cGUgeyBTdHJ1Y3R1cmVkRXJyb3JJbmZvIH0gZnJvbSAnLi9saWIvZW5naW5lL2luZGV4LmpzJztcblxuLyoqIEBjYXRlZ29yeSBFcnJvciBVdGlsaXRpZXMgKi9cbmV4cG9ydCB7IGV4dHJhY3RFcnJvckluZm8sIGZvcm1hdEVycm9ySW5mbyB9IGZyb20gJy4vbGliL2VuZ2luZS9pbmRleC5qcyc7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIERldiBUb29scyDigJQgTW9kZSBmbGFncyBhbmQgWm9kIHNjb3BlIHV0aWxpdGllc1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKipcbiAqIEBjYXRlZ29yeSBEZXYgVG9vbHNcbiAqXG4gKiBHbG9iYWwgZGV2LW1vZGUgZmxhZy4gQ2FsbCBgZW5hYmxlRGV2TW9kZSgpYCBhdCBhcHBsaWNhdGlvbiBzdGFydHVwIHRvXG4gKiB0dXJuIG9uIGRldmVsb3Blci1vbmx5IGRpYWdub3N0aWNzIGFjcm9zcyB0aGUgbGlicmFyeSDigJQgY2lyY3VsYXItcmVmZXJlbmNlXG4gKiBkZXRlY3Rpb24gaW4gc2NvcGUgd3JpdGVzLCB3YXJuaW5ncyB3aGVuIGEgcmVjb3JkZXIgaGFzIG5vIG9ic2VydmVyXG4gKiBtZXRob2RzLCBzdXNwaWNpb3VzLXByZWRpY2F0ZSB3YXJuaW5ncyBpbiBkZWNpZGUvc2VsZWN0LCBzdHJ1Y3R1cmFsXG4gKiBjaGVja3MgaW4gYGdldFN1YnRyZWVTbmFwc2hvdGAsIGFuZCBhbnkgZnV0dXJlIGRldi1vbmx5IGRpYWdub3N0aWMuXG4gKlxuICogUHJvZHVjdGlvbiBsZWF2ZXMgaXQgT0ZGIGJ5IGRlZmF1bHQgKHplcm8gb3ZlcmhlYWQpLiBTZWUgdGhlIEpTRG9jIG9uXG4gKiBgZW5hYmxlRGV2TW9kZWAgZm9yIHRoZSBmdWxsIGxpc3QgYW5kIHVzYWdlIGV4YW1wbGUuXG4gKi9cbmV4cG9ydCB7IGRpc2FibGVEZXZNb2RlLCBlbmFibGVEZXZNb2RlLCBpc0Rldk1vZGUgfSBmcm9tICcuL2xpYi9kZXZNb2RlLmpzJztcblxuLy8gYGRlZmluZVNjb3BlRnJvbVpvZGAgYW5kIHRoZSBvdGhlciB6b2QtYmFzZWQgc2NvcGUgaGVscGVycyBtb3ZlZCB0byB0aGUgb3B0LWluXG4vLyBgZm9vdHByaW50anMvem9kYCBlbnRyeSDigJQga2VlcGluZyB6b2Qgb3V0IG9mIHRoZSBjb3JlIGxvYWQgcGF0aCAoaXQgaXMgYW5cbi8vIG9wdGlvbmFsIHBlZXIpLiBJbXBvcnQgdGhlbSBmcm9tICdmb290cHJpbnRqcy96b2QnLlxuLy8gQSBydW4ncyByZWNvcmQgYXMgSlNPTiB3aXRob3V0IHRoZSBlbmdpbmUncyByZWN1cnNpb24gbGltaXQgKDkuMjYuMCk6IHRoZVxuLy8gc2FtZSBieXRlcyBKU09OLnN0cmluZ2lmeSBlbWl0cywgZm9yIGEgZGVlcCBgbmV4dGAgY2hhaW4gaXQgY2Fubm90IGVuY29kZS5cbmV4cG9ydCB7IHN0cmluZ2lmeVNuYXBzaG90IH0gZnJvbSAnLi9saWIvcnVubmVyL3N0cmluZ2lmeVNuYXBzaG90LmpzJztcbiJdfQ==
134
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7Ozs7Ozs7Ozs7O0dBZ0JHOzs7QUFTSCw0QkFBNEI7QUFDNUIsbURBQXdGO0FBQS9FLHFHQUFBLFNBQVMsT0FBQTtBQUFFLDRHQUFBLGdCQUFnQixPQUFBO0FBQUUsNkdBQUEsaUJBQWlCLE9BQUE7QUE2QnZELDRCQUE0QjtBQUM1QiwrQ0FBMkM7QUFBbEMseUdBQUEsU0FBUyxPQUFBO0FBb0JsQixtQ0FBbUM7QUFDbkMsa0RBQXVEO0FBQTlDLGtHQUFBLE1BQU0sT0FBQTtBQUFFLGtHQUFBLE1BQU0sT0FBQTtBQWtCdkIsb0JBQW9CO0FBQ3BCLGtEQUEwRDtBQUFqRCw2R0FBQSxpQkFBaUIsT0FBQTtBQUUxQixvQkFBb0I7QUFDcEIsa0RBQW1EO0FBQTFDLHNHQUFBLFVBQVUsT0FBQTtBQXFCbkIsK0JBQStCO0FBQy9CLGlEQUFzRDtBQUE3QywwR0FBQSxjQUFjLE9BQUE7QUFFdkIsK0JBQStCO0FBQy9CLGlEQUFxRDtBQUE1Qyx5R0FBQSxhQUFhLE9BQUE7QUFFdEIsb0NBQW9DO0FBQ3BDLG9EQUE0RDtBQUFuRCw2R0FBQSxpQkFBaUIsT0FBQTtBQW1DMUIscUVBQXFFO0FBQ3JFLG9EQUtpQztBQUovQixrSEFBQSxzQkFBc0IsT0FBQTtBQUN0QixrSEFBQSxzQkFBc0IsT0FBQTtBQUN0Qiw4R0FBQSxrQkFBa0IsT0FBQTtBQUNsQix1R0FBQSxXQUFXLE9BQUE7QUFvRGIsK0JBQStCO0FBQy9CLGtEQUE4RDtBQUFyRCxpSEFBQSxxQkFBcUIsT0FBQTtBQUs5QiwrQkFBK0I7QUFDL0IsbURBQTZEO0FBQXBELGlIQUFBLG9CQUFvQixPQUFBO0FBRTdCLCtCQUErQjtBQUMvQixtREFBc0U7QUFBN0QsMEhBQUEsNkJBQTZCLE9BQUE7QUFFdEMsK0JBQStCO0FBQy9CLG1EQUF1RTtBQUE5RCwySEFBQSw4QkFBOEIsT0FBQTtBQUV2QywrQkFBK0I7QUFDL0IsbURBQXlFO0FBQWhFLDZIQUFBLGdDQUFnQyxPQUFBO0FBRXpDLCtCQUErQjtBQUMvQixtREFBaUU7QUFBeEQscUhBQUEsd0JBQXdCLE9BQUE7QUFFakMsK0JBQStCO0FBQy9CLG1EQUFzRTtBQUE3RCwwSEFBQSw2QkFBNkIsT0FBQTtBQUV0QywrQkFBK0I7QUFDL0IsbURBQW9FO0FBQTNELHdIQUFBLDJCQUEyQixPQUFBO0FBRXBDLCtCQUErQjtBQUMvQixtREFBc0U7QUFBN0QsMEhBQUEsNkJBQTZCLE9BQUE7QUFtQnRDLHVDQUF1QztBQUN2QyxtREFBNkU7QUFBcEUsK0dBQUEsa0JBQWtCLE9BQUE7QUFBRSw2R0FBQSxnQkFBZ0IsT0FBQTtBQUU3QywrRUFBK0U7QUFDL0UsNEVBQTRFO0FBQzVFLCtFQUErRTtBQUUvRSw4QkFBOEI7QUFDOUIscURBQTREO0FBQW5ELDhHQUFBLGlCQUFpQixPQUFBO0FBMEIxQiw2QkFBNkI7QUFDN0Isa0RBQWlEO0FBQXhDLHNHQUFBLFNBQVMsT0FBQTtBQWlFbEIsc0NBQXNDO0FBQ3RDLG1EQUEyRTtBQUFsRSx5R0FBQSxZQUFZLE9BQUE7QUFBRSwwR0FBQSxhQUFhLE9BQUE7QUFBRSxrR0FBQSxLQUFLLE9BQUE7QUFFM0Msc0NBQXNDO0FBQ3RDLG1EQUFxRztBQUE1RixpSEFBQSxvQkFBb0IsT0FBQTtBQUFFLGtIQUFBLHFCQUFxQixPQUFBO0FBQUUsNEdBQUEsZUFBZSxPQUFBO0FBU3JFLGdDQUFnQztBQUNoQyxtREFBMEU7QUFBakUsNkdBQUEsZ0JBQWdCLE9BQUE7QUFBRSw0R0FBQSxlQUFlLE9BQUE7QUFFMUMsK0VBQStFO0FBQy9FLGlEQUFpRDtBQUNqRCwrRUFBK0U7QUFFL0U7Ozs7Ozs7Ozs7O0dBV0c7QUFDSCwrQ0FBNEU7QUFBbkUsNEdBQUEsY0FBYyxPQUFBO0FBQUUsMkdBQUEsYUFBYSxPQUFBO0FBQUUsdUdBQUEsU0FBUyxPQUFBO0FBRWpELGlGQUFpRjtBQUNqRiw0RUFBNEU7QUFDNUUsc0RBQXNEO0FBQ3RELDRFQUE0RTtBQUM1RSw2RUFBNkU7QUFDN0UsMEVBQXNFO0FBQTdELHlIQUFBLGlCQUFpQixPQUFBIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBGb290UHJpbnQg4oCUIFB1YmxpYyBBUEkgKHYzKVxuICpcbiAqIFRoZSBmbG93Y2hhcnQgcGF0dGVybiBmb3IgYmFja2VuZCBjb2RlLlxuICogQnVpbGQg4oaSIFJ1biDihpIgT2JzZXJ2ZS5cbiAqXG4gKiAqKlRoZSBjb21tb24gaW1wb3J0IHBhdGhzOioqXG4gKiBgYGB0c1xuICogaW1wb3J0IHsgZmxvd0NoYXJ0LCBkZWNpZGUsIG5hcnJhdGl2ZSB9IGZyb20gJ2Zvb3RwcmludGpzJzsgICAgICAgICAgIC8vIG1haW4g4oCUIHN0YXJ0IGhlcmVcbiAqIGltcG9ydCB7IG1ldHJpY3MsIGRlYnVnLCBtYW5pZmVzdCB9ICAgICBmcm9tICdmb290cHJpbnRqcy9yZWNvcmRlcnMnOyAvLyByZWNvcmRlciBmYWN0b3JpZXNcbiAqIGltcG9ydCB7IHN0YXRlQXQsIGNhdXNhbENoYWluIH0gICAgICAgICBmcm9tICdmb290cHJpbnRqcy90cmFjZSc7ICAgICAvLyByZWFkIGEgZmluaXNoZWQgcnVuXG4gKiBpbXBvcnQgeyBSZWNvcmRGcmFtZSwgRXZlbnRMb2cgfSAgICAgICAgZnJvbSAnZm9vdHByaW50anMvd3JpdGUnOyAgICAgLy8gd3JpdGUgYSByZWNvcmQgeW91cnNlbGZcbiAqIGltcG9ydCB7IFN0YWdlQ29udGV4dCB9ICAgICAgICAgICAgICAgICBmcm9tICdmb290cHJpbnRqcy9hZHZhbmNlZCc7ICAvLyBlbmdpbmUgaW50ZXJuYWxzXG4gKiBgYGBcbiAqXG4gKiBAbW9kdWxlXG4gKi9cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gUXVpY2sgU3RhcnQg4oCUIEV2ZXJ5dGhpbmcgeW91IG5lZWQgZm9yIDkwJSBvZiB1c2UgY2FzZXNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqIEBjYXRlZ29yeSBRdWljayBTdGFydCAqL1xuZXhwb3J0IHR5cGUgeyBGbG93Q2hhcnQsIFN0YWdlRnVuY3Rpb24gYXMgU3RhZ2VIYW5kbGVyLCBTdHJlYW1IYW5kbGVycyB9IGZyb20gJy4vbGliL2J1aWxkZXIvaW5kZXguanMnO1xuXG4vKiogQGNhdGVnb3J5IFF1aWNrIFN0YXJ0ICovXG5leHBvcnQgeyBmbG93Q2hhcnQsIEZsb3dDaGFydEJ1aWxkZXIsIGZsb3dDaGFydFNlbGVjdG9yIH0gZnJvbSAnLi9saWIvYnVpbGRlci9pbmRleC5qcyc7XG5cbi8qKlxuICogQGNhdGVnb3J5IFF1aWNrIFN0YXJ0XG4gKlxuICogQ29uZmlnIGZvciBgLmFkZFBhcmFsbGVsRm9yRWFjaCgpYCDigJQgb25lIGJyYW5jaCBwZXIgaXRlbSwgYnJhbmNoIGNvdW50XG4gKiBkZWNpZGVkIGF0IHJ1biB0aW1lIGZyb20gdGhlIHBheWxvYWQuIGBtYXhCcmFuY2hlc2AgYW5kIGBpbnRvYCBhcmUgcmVxdWlyZWRcbiAqIG9uIHB1cnBvc2UgKHNlZSBkb2NzL2Rlc2lnbi9leGVjdXRpb24tY29udHJvbC5tZCkuXG4gKi9cbmV4cG9ydCB0eXBlIHsgQnJhbmNoQ2hhcnQsIFBhcmFsbGVsRm9yRWFjaENvbmZpZywgUmV0cnlQb2xpY3kgfSBmcm9tICcuL2xpYi9idWlsZGVyL2luZGV4LmpzJztcblxuLyoqIEBjYXRlZ29yeSBRdWljayBTdGFydCDigJQgYnVpbGQtdGltZSBvYnNlcnZlciAodHdpbiBvZiBGbG93UmVjb3JkZXIpICovXG5leHBvcnQgdHlwZSB7XG4gIFN0cnVjdHVyZURlY2lkZXJDb21wbGV0ZUV2ZW50LFxuICBTdHJ1Y3R1cmVFZGdlQWRkZWRFdmVudCxcbiAgU3RydWN0dXJlRWRnZUtpbmQsXG4gIFN0cnVjdHVyZUxvb3BFZGdlQWRkZWRFdmVudCxcbiAgU3RydWN0dXJlUmVjb3JkZXIsXG4gIFN0cnVjdHVyZVN0YWdlQWRkZWRFdmVudCxcbiAgU3RydWN0dXJlU3RhZ2VUYWdnZWRFdmVudCxcbiAgU3RydWN0dXJlU3ViZmxvd01vdW50ZWRFdmVudCxcbn0gZnJvbSAnLi9saWIvYnVpbGRlci9pbmRleC5qcyc7XG5cbi8qKiBAY2F0ZWdvcnkgUXVpY2sgU3RhcnQgKi9cbmV4cG9ydCB0eXBlIHsgVHlwZWRTdGFnZUZ1bmN0aW9uIH0gZnJvbSAnLi9saWIvYnVpbGRlci90eXBlZEZsb3dDaGFydC5qcyc7XG5cbi8qKiBAY2F0ZWdvcnkgUXVpY2sgU3RhcnQgKi9cbmV4cG9ydCB0eXBlIHsgU2NvcGVNZXRob2RzLCBUeXBlZFNjb3BlIH0gZnJvbSAnLi9saWIvcmVhY3RpdmUvaW5kZXguanMnO1xuXG4vKiogQGNhdGVnb3J5IFF1aWNrIFN0YXJ0ICovXG5leHBvcnQgeyBuYXJyYXRpdmUgfSBmcm9tICcuL3JlY29yZGVycy5qcyc7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIERlY2lzaW9uIEJyYW5jaGluZyDigJQgZGVjaWRlKCkgLyBzZWxlY3QoKSB3aXRoIGV2aWRlbmNlIGNhcHR1cmVcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqIEBjYXRlZ29yeSBEZWNpc2lvbiBCcmFuY2hpbmcgKi9cbmV4cG9ydCB0eXBlIHtcbiAgRGVjaWRlUnVsZSxcbiAgRGVjaXNpb25FdmlkZW5jZSxcbiAgRGVjaXNpb25SZXN1bHQsXG4gIERlZmF1bHRCcmFuY2gsXG4gIEZpbHRlck9wcyxcbiAgUnVsZUV2aWRlbmNlLFxuICBTZWxlY3Rpb25FdmlkZW5jZSxcbiAgU2VsZWN0aW9uUmVzdWx0LFxuICBXaGVuQ2xhdXNlLFxuICBXaGVyZUZpbHRlcixcbn0gZnJvbSAnLi9saWIvZGVjaWRlL2luZGV4LmpzJztcblxuLyoqIEBjYXRlZ29yeSBEZWNpc2lvbiBCcmFuY2hpbmcgKi9cbmV4cG9ydCB7IGRlY2lkZSwgc2VsZWN0IH0gZnJvbSAnLi9saWIvZGVjaWRlL2luZGV4LmpzJztcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gUnVuIOKAlCBFeGVjdXRlIGNoYXJ0cyBhbmQgY29sbGVjdCByZXN1bHRzXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKiBAY2F0ZWdvcnkgUnVuICovXG5leHBvcnQgdHlwZSB7IFJ1blJlc3VsdCB9IGZyb20gJy4vbGliL3J1bm5lci9pbmRleC5qcyc7XG5cbi8qKiBAY2F0ZWdvcnkgUnVuICovXG5leHBvcnQgdHlwZSB7IEZsb3dDaGFydEV4ZWN1dG9yT3B0aW9ucyB9IGZyb20gJy4vbGliL3J1bm5lci9pbmRleC5qcyc7XG5cbi8qKlxuICogVGhlIGZvdXIgb2JzZXJ2YWJpbGl0eSBkaWFscyBgRmxvd0NoYXJ0RXhlY3V0b3JPcHRpb25zYCBpbmhlcml0cy5cbiAqIEBjYXRlZ29yeSBSdW5cbiAqL1xuZXhwb3J0IHR5cGUgeyBSdW5EaWFscyB9IGZyb20gJy4vbGliL21lbW9yeS9pbmRleC5qcyc7XG5cbi8qKiBAY2F0ZWdvcnkgUnVuICovXG5leHBvcnQgeyBGbG93Q2hhcnRFeGVjdXRvciB9IGZyb20gJy4vbGliL3J1bm5lci9pbmRleC5qcyc7XG5cbi8qKiBAY2F0ZWdvcnkgUnVuICovXG5leHBvcnQgeyBSdW5Db250ZXh0IH0gZnJvbSAnLi9saWIvcnVubmVyL2luZGV4LmpzJztcblxuLyoqIEBjYXRlZ29yeSBSdW4gKi9cbmV4cG9ydCB0eXBlIHsgQ2hhcnRPcGVuQVBJT3B0aW9ucywgTUNQVG9vbERlc2NyaXB0aW9uLCBSdW5uYWJsZUZsb3dDaGFydCB9IGZyb20gJy4vbGliL3J1bm5lci9SdW5uYWJsZUNoYXJ0LmpzJztcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gT2JzZXJ2ZSDigJQgRGF0YSAoc2NvcGUgcmVjb3JkZXJzLCBmaXJlIGR1cmluZyBzdGFnZSBleGVjdXRpb24pXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKiBAY2F0ZWdvcnkgT2JzZXJ2ZSDigJQgRGF0YSAqL1xuZXhwb3J0IHR5cGUge1xuICBDb21taXRFdmVudCxcbiAgRXJyb3JFdmVudCxcbiAgUmVhZEV2ZW50LFxuICBSZWRhY3Rpb25Qb2xpY3ksXG4gIFJlZGFjdGlvblJlcG9ydCxcbiAgU2NvcGVSZWNvcmRlcixcbiAgU3RhZ2VFdmVudCxcbiAgV3JpdGVFdmVudCxcbn0gZnJvbSAnLi9saWIvc2NvcGUvaW5kZXguanMnO1xuXG4vKiogQGNhdGVnb3J5IE9ic2VydmUg4oCUIERhdGEgKi9cbmV4cG9ydCB7IE1ldHJpY1JlY29yZGVyIH0gZnJvbSAnLi9saWIvc2NvcGUvaW5kZXguanMnO1xuXG4vKiogQGNhdGVnb3J5IE9ic2VydmUg4oCUIERhdGEgKi9cbmV4cG9ydCB7IERlYnVnUmVjb3JkZXIgfSBmcm9tICcuL2xpYi9zY29wZS9pbmRleC5qcyc7XG5cbi8qKiBAY2F0ZWdvcnkgT2JzZXJ2ZSDigJQgT3BlcmF0aW9uICovXG5leHBvcnQgeyBSZWNvcmRlck9wZXJhdGlvbiB9IGZyb20gJy4vbGliL3JlY29yZGVyL2luZGV4LmpzJztcblxuLyoqXG4gKiBAY2F0ZWdvcnkgT2JzZXJ2ZSDigJQgRGVsaXZlcnkgdGllciAoUkZDLTAwMSBkZWZlcnJlZCBvYnNlcnZlcnMpXG4gKlxuICogRXZlcnkgYGF0dGFjaCpSZWNvcmRlcmAgY2FsbCBhY2NlcHRzIGFuIG9wdGlvbnMgYmFnOlxuICogYGV4ZWN1dG9yLmF0dGFjaFNjb3BlUmVjb3JkZXIocmVjLCB7IGRlbGl2ZXJ5OiAnZGVmZXJyZWQnIH0pYCB0YWtlcyB0aGVcbiAqIHJlY29yZGVyIE9VVCBvZiB0aGUgZW5naW5lJ3MgaG90IHBhdGgg4oCUIGV2ZW50cyBhcmUgY2FwdHVyZWQgaW50byBvbmVcbiAqIGJvdW5kZWQsIHRvdGFsbHktb3JkZXJlZCBxdWV1ZSBhbmQgZGVsaXZlcmVkIGF0IHRoZSBuZXh0IG1pY3JvdGFza1xuICogY2hlY2twb2ludCAoXCJvbmUgYmVhdCBiZWhpbmRcIikuIE9taXQgYGRlbGl2ZXJ5YCBmb3IgdGhlIGhpc3RvcmljYWxcbiAqIHN5bmNocm9ub3VzIGNhbGwgKGJ5dGUtaWRlbnRpY2FsIHRvIHByZXZpb3VzIHJlbGVhc2VzKS4gQWNjb3VudGluZ1xuICogc3VyZmFjZXMgb24gYHNuYXBzaG90Lm9ic2VydmVyU3RhdHNgOyBgZXhlY3V0b3IuZHJhaW5PYnNlcnZlcnMoKWAgc2V0dGxlc1xuICogYXN5bmMgbGlzdGVuZXJzIGJlZm9yZSBzaHV0ZG93bi4gU2VlIGBkb2NzL2d1aWRlcy9vYnNlcnZlcnMtZGVmZXJyZWQubWRgLlxuICovXG5leHBvcnQgdHlwZSB7XG4gIEF0dGFjaFJlY29yZGVyT3B0aW9ucyxcbiAgT2JzZXJ2ZXJEZWxpdmVyeSxcbiAgT2JzZXJ2ZXJEcmFpblJlc3VsdCxcbiAgT2JzZXJ2ZXJTdGF0cyxcbn0gZnJvbSAnLi9saWIvcnVubmVyL2luZGV4LmpzJztcblxuLyoqXG4gKiBAY2F0ZWdvcnkgT2JzZXJ2ZSDigJQgRGVsaXZlcnkgdGllciAoUkZDLTAwMSBkZWZlcnJlZCBvYnNlcnZlcnMpXG4gKlxuICogYENhcHR1cmVQb2xpY3lgIOKAlCBob3cgYSBkZWZlcnJlZCBldmVudCdzIHBheWxvYWQgaXMgbWF0ZXJpYWxpemVkIGF0XG4gKiBjYXB0dXJlIHRpbWUgKGAnY2xvbmUnYCBieSBkZWZhdWx0IGZvciBhdHRhY2ggb3B0aW9ucyAvIGAnc3VtbWFyeSdgIC8gYCdyZWYnYCkuIGBPdmVyZmxvd1BvbGljeWBcbiAqIOKAlCB3aGF0IGEgc2F0dXJhdGVkIHF1ZXVlIGRvZXMgKGAnZHJvcC1vbGRlc3QnYCBkZWZhdWx0IC8gYCdzYW1wbGUnYCAvXG4gKiBgJ2Jsb2NrJ2ApLiBgRGlzcGF0Y2hlclN0YXRzYCAvIGBMaXN0ZW5lclN0YXRzYCDigJQgdGhlIGFjY291bnRpbmcgc2hhcGVzXG4gKiBlbWJlZGRlZCBpbiBgT2JzZXJ2ZXJTdGF0c2AuIFR5cGVzIG9ubHkg4oCUIHRoZSBvYnNlcnZlci1xdWV1ZSBtb2R1bGVcbiAqIGl0c2VsZiBpcyBpbnRlcm5hbDsgY29uc3VtZXJzIHVzZSB0aGUgYXR0YWNoIG9wdGlvbnMuXG4gKi9cbmV4cG9ydCB0eXBlIHsgQ2FwdHVyZVBvbGljeSwgRGlzcGF0Y2hlclN0YXRzLCBMaXN0ZW5lclN0YXRzLCBPdmVyZmxvd1BvbGljeSB9IGZyb20gJy4vbGliL29ic2VydmVyLXF1ZXVlL2luZGV4LmpzJztcblxuLyoqIEBjYXRlZ29yeSBPYnNlcnZlIOKAlCBDb21iaW5lZCAoYm90aCBkYXRhLWZsb3cgYW5kIGNvbnRyb2wtZmxvdykgKi9cbmV4cG9ydCB0eXBlIHsgQ29tYmluZWRSZWNvcmRlciB9IGZyb20gJy4vbGliL3JlY29yZGVyL2luZGV4LmpzJztcbi8qKiBAY2F0ZWdvcnkgT2JzZXJ2ZSDigJQgQ29tYmluZWQgKGJvdGggZGF0YS1mbG93IGFuZCBjb250cm9sLWZsb3cpICovXG5leHBvcnQge1xuICBoYXNFbWl0UmVjb3JkZXJNZXRob2RzLFxuICBoYXNGbG93UmVjb3JkZXJNZXRob2RzLFxuICBoYXNSZWNvcmRlck1ldGhvZHMsXG4gIGlzRmxvd0V2ZW50LFxufSBmcm9tICcuL2xpYi9yZWNvcmRlci9pbmRleC5qcyc7XG5cbi8qKlxuICogQGNhdGVnb3J5IE9ic2VydmUg4oCUIEVtaXQgKHVzZXItYXV0aG9yZWQgc3RydWN0dXJlZCBldmVudHMpXG4gKlxuICogVGhpcmQgb2JzZXJ2ZXIgY2hhbm5lbCAoYWxvbmdzaWRlIGBTY29wZVJlY29yZGVyYCBhbmQgYEZsb3dSZWNvcmRlcmApLiBDb25zdW1lclxuICogY29kZSBjYWxscyBgc2NvcGUuJGVtaXQobmFtZSwgcGF5bG9hZClgIGZyb20gaW5zaWRlIGEgc3RhZ2U7IGV2ZXJ5IGF0dGFjaGVkXG4gKiBgRW1pdFJlY29yZGVyLm9uRW1pdChldmVudClgIGZpcmVzIHN5bmNocm9ub3VzbHkgd2l0aCBzdGFnZS1jb250ZXh0XG4gKiBlbnJpY2htZW50LiBQYXNzLXRocm91Z2gg4oCUIG5vIGJ1ZmZlcmluZywgemVybyBhbGxvY2F0aW9uIHdoZW4gbm8gcmVjb3JkZXJcbiAqIGlzIGF0dGFjaGVkLlxuICovXG5leHBvcnQgdHlwZSB7IEVtaXRFdmVudCwgRW1pdFJlY29yZGVyIH0gZnJvbSAnLi9saWIvcmVjb3JkZXIvaW5kZXguanMnO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBPYnNlcnZlIOKAlCBGbG93IChGbG93UmVjb3JkZXIsIGZpcmVzIGFmdGVyIHN0YWdlIGV4ZWN1dGlvbilcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqIEBjYXRlZ29yeSBPYnNlcnZlIOKAlCBGbG93ICovXG5leHBvcnQgdHlwZSB7XG4gIEZsb3dCcmVha0V2ZW50LFxuICBGbG93RGVjaXNpb25FdmVudCxcbiAgRmxvd0Vycm9yRXZlbnQsXG4gIEZsb3dGb3JrRXZlbnQsXG4gIEZsb3dMb29wRXZlbnQsXG4gIEZsb3dOZXh0RXZlbnQsXG4gIEZsb3dSZWNvcmRlcixcbiAgRmxvd1J1bkV2ZW50LFxuICBGbG93UnVuRmFpbGVkRXZlbnQsXG4gIEZsb3dTZWxlY3RlZEV2ZW50LFxuICBGbG93U3RhZ2VFdmVudCxcbiAgRmxvd1N0YWdlUmV0cnlFdmVudCxcbiAgRmxvd1N1YmZsb3dFdmVudCxcbiAgRmxvd1N1YmZsb3dSZWdpc3RlcmVkRXZlbnQsXG4gIEZsb3dUaHJvdHRsZWRFdmVudCxcbiAgUmVzdW1lTGluayxcbiAgVHJhdmVyc2FsQ29udGV4dCxcbn0gZnJvbSAnLi9saWIvZW5naW5lL2luZGV4LmpzJztcblxuLyoqIEBjYXRlZ29yeSBPYnNlcnZlIOKAlCBGbG93ICovXG5leHBvcnQgdHlwZSB7IENvbWJpbmVkTmFycmF0aXZlRW50cnkgfSBmcm9tICcuL2xpYi9lbmdpbmUvaW5kZXguanMnO1xuXG4vKipcbiAqIEBjYXRlZ29yeSBPYnNlcnZlIOKAlCBGbG93XG4gKlxuICogYE5hcnJhdGl2ZUZvcm1hdHRlcmAg4oCUIHBsdWdnYWJsZSBmb3JtYXR0ZXIgdGhhdCBjb252ZXJ0cyBldmVudCBjb250ZXh0XG4gKiBvYmplY3RzIGludG8gdGhlIHRleHQgbGluZXMgb2YgdGhlIG5hcnJhdGl2ZS4gUHJlZmVyIHRoaXMgbmFtZSBpbiBuZXdcbiAqIGNvZGU7IGBOYXJyYXRpdmVSZW5kZXJlcmAgaXMgYSBkZXByZWNhdGVkIGFsaWFzIHRoYXQgd2lsbCBiZSByZW1vdmVkIGluXG4gKiB0aGUgbmV4dCBtYWpvciByZWxlYXNlLlxuICovXG5leHBvcnQgdHlwZSB7IE5hcnJhdGl2ZUZvcm1hdHRlciwgTmFycmF0aXZlUmVuZGVyZXIgfSBmcm9tICcuL2xpYi9lbmdpbmUvaW5kZXguanMnO1xuXG4vKiogQGNhdGVnb3J5IE9ic2VydmUg4oCUIEZsb3cgKi9cbmV4cG9ydCB7IE5hcnJhdGl2ZUZsb3dSZWNvcmRlciB9IGZyb20gJy4vbGliL2VuZ2luZS9pbmRleC5qcyc7XG5cbi8qKiBAY2F0ZWdvcnkgT2JzZXJ2ZSDigJQgRmxvdyAqL1xuZXhwb3J0IHR5cGUgeyBNYW5pZmVzdEVudHJ5IH0gZnJvbSAnLi9saWIvZW5naW5lL2luZGV4LmpzJztcblxuLyoqIEBjYXRlZ29yeSBPYnNlcnZlIOKAlCBGbG93ICovXG5leHBvcnQgeyBNYW5pZmVzdEZsb3dSZWNvcmRlciB9IGZyb20gJy4vbGliL2VuZ2luZS9pbmRleC5qcyc7XG5cbi8qKiBAY2F0ZWdvcnkgT2JzZXJ2ZSDigJQgRmxvdyAqL1xuZXhwb3J0IHsgQWRhcHRpdmVOYXJyYXRpdmVGbG93UmVjb3JkZXIgfSBmcm9tICcuL2xpYi9lbmdpbmUvaW5kZXguanMnO1xuXG4vKiogQGNhdGVnb3J5IE9ic2VydmUg4oCUIEZsb3cgKi9cbmV4cG9ydCB7IE1pbGVzdG9uZU5hcnJhdGl2ZUZsb3dSZWNvcmRlciB9IGZyb20gJy4vbGliL2VuZ2luZS9pbmRleC5qcyc7XG5cbi8qKiBAY2F0ZWdvcnkgT2JzZXJ2ZSDigJQgRmxvdyAqL1xuZXhwb3J0IHsgUHJvZ3Jlc3NpdmVOYXJyYXRpdmVGbG93UmVjb3JkZXIgfSBmcm9tICcuL2xpYi9lbmdpbmUvaW5kZXguanMnO1xuXG4vKiogQGNhdGVnb3J5IE9ic2VydmUg4oCUIEZsb3cgKi9cbmV4cG9ydCB7IFJMRU5hcnJhdGl2ZUZsb3dSZWNvcmRlciB9IGZyb20gJy4vbGliL2VuZ2luZS9pbmRleC5qcyc7XG5cbi8qKiBAY2F0ZWdvcnkgT2JzZXJ2ZSDigJQgRmxvdyAqL1xuZXhwb3J0IHsgU2VwYXJhdGVOYXJyYXRpdmVGbG93UmVjb3JkZXIgfSBmcm9tICcuL2xpYi9lbmdpbmUvaW5kZXguanMnO1xuXG4vKiogQGNhdGVnb3J5IE9ic2VydmUg4oCUIEZsb3cgKi9cbmV4cG9ydCB7IFNpbGVudE5hcnJhdGl2ZUZsb3dSZWNvcmRlciB9IGZyb20gJy4vbGliL2VuZ2luZS9pbmRleC5qcyc7XG5cbi8qKiBAY2F0ZWdvcnkgT2JzZXJ2ZSDigJQgRmxvdyAqL1xuZXhwb3J0IHsgV2luZG93ZWROYXJyYXRpdmVGbG93UmVjb3JkZXIgfSBmcm9tICcuL2xpYi9lbmdpbmUvaW5kZXguanMnO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBTZWxmLURlc2NyaWJpbmcg4oCUIC5jb250cmFjdCgpLCB0b09wZW5BUEkoKSwgdG9NQ1BUb29sKClcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqIEBjYXRlZ29yeSBTZWxmLURlc2NyaWJpbmcgKi9cbmV4cG9ydCB0eXBlIHsgSnNvblNjaGVtYSB9IGZyb20gJy4vbGliL2NvbnRyYWN0L2luZGV4LmpzJztcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gU25hcHNob3QgJiBDb21wb3NpdGlvbiDigJQgU3ViZmxvdyBuYXZpZ2F0aW9uIGFuZCBDb21wb3NhYmxlUnVubmVyXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKiBAY2F0ZWdvcnkgU25hcHNob3QgJiBDb21wb3NpdGlvbiAqL1xuZXhwb3J0IHR5cGUgeyBDb21wb3NhYmxlUnVubmVyIH0gZnJvbSAnLi9saWIvcnVubmVyL2luZGV4LmpzJztcblxuLyoqIEBjYXRlZ29yeSBTbmFwc2hvdCAmIENvbXBvc2l0aW9uICovXG5leHBvcnQgdHlwZSB7IFJlY29yZGVyU25hcHNob3QsIFJ1bnRpbWVTbmFwc2hvdCwgU3VidHJlZVNuYXBzaG90IH0gZnJvbSAnLi9saWIvcnVubmVyL2luZGV4LmpzJztcblxuLyoqIEBjYXRlZ29yeSBTbmFwc2hvdCAmIENvbXBvc2l0aW9uICovXG5leHBvcnQgeyBnZXRTdWJ0cmVlU25hcHNob3QsIGxpc3RTdWJmbG93UGF0aHMgfSBmcm9tICcuL2xpYi9ydW5uZXIvaW5kZXguanMnO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBTY29wZVJlY29yZGVyIENvbXBvc2l0aW9uIOKAlCBCdW5kbGUgbXVsdGlwbGUgcmVjb3JkZXJzIGludG8gZG9tYWluIHByZXNldHNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqIEBjYXRlZ29yeSBTY29wZVJlY29yZGVyICovXG5leHBvcnQgeyBDb21wb3NpdGVSZWNvcmRlciB9IGZyb20gJy4vbGliL3JlY29yZGVyL2luZGV4LmpzJztcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gUGF1c2UvUmVzdW1lIOKAlCBTZXJpYWxpemFibGUgY2hlY2twb2ludHMgZm9yIGxvbmctcnVubmluZyBvciBodW1hbi1pbi10aGUtbG9vcCBmbG93c1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKiogQGNhdGVnb3J5IFBhdXNlL1Jlc3VtZSAqL1xuLyoqIEBjYXRlZ29yeSBQYXVzZS9SZXN1bWUgKi9cbmV4cG9ydCB0eXBlIHtcbiAgRmxvd2NoYXJ0Q2hlY2twb2ludCxcbiAgUGF1c2FibGVIYW5kbGVyLFxuICBQYXVzZWRFeGVjdXRpb24sXG4gIFBlbmRpbmdQYXVzZSxcbiAgUmVkYWN0aW9uTWFya3MsXG59IGZyb20gJy4vbGliL3BhdXNlL2luZGV4LmpzJztcblxuLyoqXG4gKiBAY2F0ZWdvcnkgUGF1c2UvUmVzdW1lXG4gKlxuICogYGludGVycnVwdChzY29wZSwgeyByZWFzb24sIGV4cGVjdHM/IH0pYCDigJQgc3RvcCBtaWQtc3RhZ2UgdG8gYXNrIGEgcXVlc3Rpb24sXG4gKiBhbmQgZ2V0IHRoZSBhbnN3ZXIgYmFjayBhdCB0aGUgc2FtZSBjYWxsIHNpdGUgd2hlbiB0aGUgcnVuIHJlc3VtZXMuIFJlc3VtZVxuICogcmUtZW50ZXJzIHRoZSBzdGFnZSBmcm9tIGl0cyBUT1AgKHN0YWdlcyBhcmUgYXRvbWljKSwgc28ga2VlcCB0aGUgaGFsZlxuICogYmVmb3JlIHRoZSBjYWxsIGlkZW1wb3RlbnQuXG4gKi9cbmV4cG9ydCB0eXBlIHsgSW50ZXJydXB0UGF5bG9hZCB9IGZyb20gJy4vbGliL3BhdXNlL2luZGV4LmpzJztcblxuLyoqIEBjYXRlZ29yeSBQYXVzZS9SZXN1bWUgKi9cbmV4cG9ydCB7IGludGVycnVwdCB9IGZyb20gJy4vbGliL3BhdXNlL2luZGV4LmpzJztcblxuLyoqIEBjYXRlZ29yeSBTY29wZVJlY29yZGVyICovXG5leHBvcnQgdHlwZSB7IENvbXBvc2l0ZVNuYXBzaG90IH0gZnJvbSAnLi9saWIvcmVjb3JkZXIvaW5kZXguanMnO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBDb25maWd1cmF0aW9uIOKAlCBUeXBlcyBwYXNzZWQgdG8gRmxvd0NoYXJ0RXhlY3V0b3IgYW5kIHJ1bigpXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKiBAY2F0ZWdvcnkgQ29uZmlndXJhdGlvbiAqL1xuZXhwb3J0IHR5cGUgeyBFeGVjdXRpb25FbnYsIEV4ZWN1dG9yUmVzdWx0LCBQYXVzZWRSZXN1bHQsIFJ1bk9wdGlvbnMgfSBmcm9tICcuL2xpYi9lbmdpbmUvaW5kZXguanMnO1xuXG4vKiogQGNhdGVnb3J5IENvbmZpZ3VyYXRpb24gKi9cbmV4cG9ydCB0eXBlIHsgU2NvcGVGYWN0b3J5IH0gZnJvbSAnLi9saWIvZW5naW5lL2luZGV4LmpzJztcblxuLyoqXG4gKiBAY2F0ZWdvcnkgQ29uZmlndXJhdGlvblxuICpcbiAqIFJlYWQtdHJhY2tpbmcgcG9saWN5IGZvciBgU3RhZ2VTbmFwc2hvdC5zdGFnZVJlYWRzYCAoIzE0KTpcbiAqIGAnZnVsbCdgIChkZWZhdWx0IOKAlCBwZXItcmVhZCB2YWx1ZSBjbG9uZSwgaGlzdG9yaWNhbCBiZWhhdmlvcikgL1xuICogYCdzdW1tYXJ5J2AgKGNoZWFwIGBSZWFkU3VtbWFyeU1hcmtlcmAgcGVyIHJlYWQpIC8gYCdvZmYnYCAobm8gdHJhY2tpbmcsXG4gKiB6ZXJvIHBlci1yZWFkIGNsb25lKS4gUGFzcyBhcyBgbmV3IEZsb3dDaGFydEV4ZWN1dG9yKGNoYXJ0LCB7IHJlYWRUcmFja2luZyB9KWBcbiAqIG9yIGNhbGwgYGV4ZWN1dG9yLnNldFJlYWRUcmFja2luZyhtb2RlKWAgYmVmb3JlIGBydW4oKWAuXG4gKi9cbmV4cG9ydCB0eXBlIHsgUmVhZFN1bW1hcnlNYXJrZXIsIFJlYWRUcmFja2luZ01vZGUgfSBmcm9tICcuL2xpYi9tZW1vcnkvaW5kZXguanMnO1xuXG4vKipcbiAqIEBjYXRlZ29yeSBDb25maWd1cmF0aW9uXG4gKlxuICogV3JpdGUtdHJhY2tpbmcgcG9saWN5IGZvciBgU3RhZ2VTbmFwc2hvdC5zdGFnZVdyaXRlc2AgKCMxM2MtQSkg4oCUIHRoZVxuICogc2libGluZyBvZiBgUmVhZFRyYWNraW5nTW9kZWA7IGJvdGggYWxpYXMgdGhlIHNoYXJlZCBgUmV0ZW50aW9uUG9saWN5YFxuICogZmFtaWx5IGZyb20gYGxpYi9jYXB0dXJlYC4gYCdmdWxsJ2AgKGRlZmF1bHQg4oCUIHBlci13cml0ZSB2YWx1ZSBjbG9uZSxcbiAqIGhpc3RvcmljYWwgYmVoYXZpb3IpIC8gYCdzdW1tYXJ5J2AgKGNoZWFwIGBXcml0ZVN1bW1hcnlNYXJrZXJgIHBlciB3cml0ZSlcbiAqIC8gYCdvZmYnYCAobm8gdHJhY2tpbmc7IGBzdGFnZVdyaXRlc2AgYWJzZW50IGFuZCB0aGUgYG9uQ29tbWl0YCBtdXRhdGlvbnNcbiAqIHBheWxvYWQgaXMgZW1wdHkg4oCUIHdyaXRlcyB0aGVtc2VsdmVzIHN0aWxsIGNvbW1pdCwgYW5kIHRoZSBjb21taXQgbG9nIGlzXG4gKiB1bmFmZmVjdGVkKS4gUGFzcyBhcyBgbmV3IEZsb3dDaGFydEV4ZWN1dG9yKGNoYXJ0LCB7IHdyaXRlVHJhY2tpbmcgfSlgIG9yXG4gKiBjYWxsIGBleGVjdXRvci5zZXRXcml0ZVRyYWNraW5nKG1vZGUpYCBiZWZvcmUgYHJ1bigpYC5cbiAqL1xuZXhwb3J0IHR5cGUgeyBSZXRlbnRpb25Qb2xpY3ksIFdyaXRlU3VtbWFyeU1hcmtlciwgV3JpdGVUcmFja2luZ01vZGUgfSBmcm9tICcuL2xpYi9tZW1vcnkvaW5kZXguanMnO1xuXG4vKipcbiAqIEBjYXRlZ29yeSBDb25maWd1cmF0aW9uXG4gKlxuICogQ29tbWl0LXZhbHVlcyBlbmNvZGluZyBmb3IgdGhlIENPTU1JVCBMT0cgKCMxM2MtQikg4oCUIHRoZSB0aGlyZCBkaWFsIG9mXG4gKiB0aGUgZmFtaWx5LCBhbmQgdGhlIG9ubHkgTE9TU0xFU1Mgb25lIChpdCBjaGFuZ2VzIHRoZSBsb2cncyBlbmNvZGluZyxcbiAqIG5ldmVyIGl0cyBpbmZvcm1hdGlvbikuIGAnZnVsbCdgIChkZWZhdWx0IOKAlCBldmVyeSBzdXJ2aXZpbmcgYHNldGAgc3RvcmVzXG4gKiB0aGUgZnVsbCBmaW5hbCB2YWx1ZSwgYnl0ZS1pZGVudGljYWwgdG8gaGlzdG9yeSkgLyBgJ2RlbHRhJ2AgKGFycmF5XG4gKiBuZXQtY2hhbmdlcyB0aGF0IGFyZSBcImJhc2UgcGx1cyBhIHRhaWxcIiBjb21taXQgYXMgYW4gYGFwcGVuZGAgdmVyYlxuICogc3RvcmluZyBvbmx5IHRoZSB0YWlsOyBgZGVsZXRlVmFsdWUoKWAgY29tbWl0cyBhcyBhIHJlYWwgYGRlbGV0ZWAgdmVyYjtcbiAqIG9uZSB0cmFjZSBlbnRyeSBwZXIgc3Vydml2aW5nIHBhdGgpLiBSZXBsYXkgcmVjb25zdHJ1Y3RzIGV2ZXJ5IHN0ZXAnc1xuICogZnVsbCBzdGF0ZSBleGFjdGx5LiBDb25zdW1lcnMgcmVhZGluZyBgYnVuZGxlLm92ZXJ3cml0ZVtrZXldYCBhcyB0aGUgZnVsbFxuICogdmFsdWUgbXVzdCB1c2UgYGNvbW1pdFZhbHVlQXRgIGZyb20gYGZvb3RwcmludGpzL3RyYWNlYC4gUGFzcyBhc1xuICogYG5ldyBGbG93Q2hhcnRFeGVjdXRvcihjaGFydCwgeyBjb21taXRWYWx1ZXMgfSlgIG9yIGNhbGxcbiAqIGBleGVjdXRvci5zZXRDb21taXRWYWx1ZXMobW9kZSlgIGJlZm9yZSBgcnVuKClgOyB0aGUgYWN0aXZlIG1vZGUgaXMgdGhlXG4gKiBzbmFwc2hvdCBkaXNjcmltaW5hbnQgYGdldFNuYXBzaG90KCkuY29tbWl0VmFsdWVzYC5cbiAqL1xuZXhwb3J0IHR5cGUgeyBDb21taXRWYWx1ZXNNb2RlIH0gZnJvbSAnLi9saWIvbWVtb3J5L2luZGV4LmpzJztcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gQ29udHJhY3QgJiBWYWxpZGF0aW9uXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKiBAY2F0ZWdvcnkgQ29udHJhY3QgJiBWYWxpZGF0aW9uICovXG5leHBvcnQgdHlwZSB7IFNjaGVtYUtpbmQsIFZhbGlkYXRpb25Jc3N1ZSwgVmFsaWRhdGlvblJlc3VsdCB9IGZyb20gJy4vbGliL3NjaGVtYS9pbmRleC5qcyc7XG5cbi8qKiBAY2F0ZWdvcnkgQ29udHJhY3QgJiBWYWxpZGF0aW9uICovXG5leHBvcnQgeyBkZXRlY3RTY2hlbWEsIGlzVmFsaWRhdGFibGUsIGlzWm9kIH0gZnJvbSAnLi9saWIvc2NoZW1hL2luZGV4LmpzJztcblxuLyoqIEBjYXRlZ29yeSBDb250cmFjdCAmIFZhbGlkYXRpb24gKi9cbmV4cG9ydCB7IElucHV0VmFsaWRhdGlvbkVycm9yLCB2YWxpZGF0ZUFnYWluc3RTY2hlbWEsIHZhbGlkYXRlT3JUaHJvdyB9IGZyb20gJy4vbGliL3NjaGVtYS9pbmRleC5qcyc7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIEVycm9yIFV0aWxpdGllc1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKiogQGNhdGVnb3J5IEVycm9yIFV0aWxpdGllcyAqL1xuZXhwb3J0IHR5cGUgeyBTdHJ1Y3R1cmVkRXJyb3JJbmZvIH0gZnJvbSAnLi9saWIvZW5naW5lL2luZGV4LmpzJztcblxuLyoqIEBjYXRlZ29yeSBFcnJvciBVdGlsaXRpZXMgKi9cbmV4cG9ydCB7IGV4dHJhY3RFcnJvckluZm8sIGZvcm1hdEVycm9ySW5mbyB9IGZyb20gJy4vbGliL2VuZ2luZS9pbmRleC5qcyc7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIERldiBUb29scyDigJQgTW9kZSBmbGFncyBhbmQgWm9kIHNjb3BlIHV0aWxpdGllc1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKipcbiAqIEBjYXRlZ29yeSBEZXYgVG9vbHNcbiAqXG4gKiBHbG9iYWwgZGV2LW1vZGUgZmxhZy4gQ2FsbCBgZW5hYmxlRGV2TW9kZSgpYCBhdCBhcHBsaWNhdGlvbiBzdGFydHVwIHRvXG4gKiB0dXJuIG9uIGRldmVsb3Blci1vbmx5IGRpYWdub3N0aWNzIGFjcm9zcyB0aGUgbGlicmFyeSDigJQgY2lyY3VsYXItcmVmZXJlbmNlXG4gKiBkZXRlY3Rpb24gaW4gc2NvcGUgd3JpdGVzLCB3YXJuaW5ncyB3aGVuIGEgcmVjb3JkZXIgaGFzIG5vIG9ic2VydmVyXG4gKiBtZXRob2RzLCBzdXNwaWNpb3VzLXByZWRpY2F0ZSB3YXJuaW5ncyBpbiBkZWNpZGUvc2VsZWN0LCBzdHJ1Y3R1cmFsXG4gKiBjaGVja3MgaW4gYGdldFN1YnRyZWVTbmFwc2hvdGAsIGFuZCBhbnkgZnV0dXJlIGRldi1vbmx5IGRpYWdub3N0aWMuXG4gKlxuICogUHJvZHVjdGlvbiBsZWF2ZXMgaXQgT0ZGIGJ5IGRlZmF1bHQgKHplcm8gb3ZlcmhlYWQpLiBTZWUgdGhlIEpTRG9jIG9uXG4gKiBgZW5hYmxlRGV2TW9kZWAgZm9yIHRoZSBmdWxsIGxpc3QgYW5kIHVzYWdlIGV4YW1wbGUuXG4gKi9cbmV4cG9ydCB7IGRpc2FibGVEZXZNb2RlLCBlbmFibGVEZXZNb2RlLCBpc0Rldk1vZGUgfSBmcm9tICcuL2xpYi9kZXZNb2RlLmpzJztcblxuLy8gYGRlZmluZVNjb3BlRnJvbVpvZGAgYW5kIHRoZSBvdGhlciB6b2QtYmFzZWQgc2NvcGUgaGVscGVycyBtb3ZlZCB0byB0aGUgb3B0LWluXG4vLyBgZm9vdHByaW50anMvem9kYCBlbnRyeSDigJQga2VlcGluZyB6b2Qgb3V0IG9mIHRoZSBjb3JlIGxvYWQgcGF0aCAoaXQgaXMgYW5cbi8vIG9wdGlvbmFsIHBlZXIpLiBJbXBvcnQgdGhlbSBmcm9tICdmb290cHJpbnRqcy96b2QnLlxuLy8gQSBydW4ncyByZWNvcmQgYXMgSlNPTiB3aXRob3V0IHRoZSBlbmdpbmUncyByZWN1cnNpb24gbGltaXQgKDkuMjYuMCk6IHRoZVxuLy8gc2FtZSBieXRlcyBKU09OLnN0cmluZ2lmeSBlbWl0cywgZm9yIGEgZGVlcCBgbmV4dGAgY2hhaW4gaXQgY2Fubm90IGVuY29kZS5cbmV4cG9ydCB7IHN0cmluZ2lmeVNuYXBzaG90IH0gZnJvbSAnLi9saWIvcnVubmVyL3N0cmluZ2lmeVNuYXBzaG90LmpzJztcbiJdfQ==
@@ -12,7 +12,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
12
12
  exports.evaluateFilter = void 0;
13
13
  const summarize_js_1 = require("../capture/summarize.js");
14
14
  const devMode_js_1 = require("../devMode.js");
15
- const placeholders_js_1 = require("../memory/placeholders.js");
15
+ const redaction_js_1 = require("../memory/redaction.js");
16
16
  const OPERATOR_HANDLERS = {
17
17
  eq: (a, t) => a === t,
18
18
  ne: (a, t) => a !== t,
@@ -94,7 +94,7 @@ function evaluateFilter(getValueFn, isRedactedFn, filter) {
94
94
  continue;
95
95
  const actual = getValueFn(key);
96
96
  const redacted = isRedactedFn(key);
97
- const displayValue = redacted ? placeholders_js_1.SCOPE_PLACEHOLDER : (0, summarize_js_1.summarizeValue)(actual, MAX_VALUE_LEN);
97
+ const displayValue = redacted ? redaction_js_1.SCOPE_PLACEHOLDER : (0, summarize_js_1.summarizeValue)(actual, MAX_VALUE_LEN);
98
98
  // Evaluate each operator in the FilterOps for this key
99
99
  for (const [op, threshold] of Object.entries(ops)) {
100
100
  const handler = OPERATOR_HANDLERS[op];
@@ -131,4 +131,4 @@ function evaluateFilter(getValueFn, isRedactedFn, filter) {
131
131
  return { matched: allMatched, conditions };
132
132
  }
133
133
  exports.evaluateFilter = evaluateFilter;
134
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZhbHVhdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9kZWNpZGUvZXZhbHVhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7Ozs7R0FRRzs7O0FBRUgsMERBQXlEO0FBQ3pELDhDQUEwQztBQUMxQywrREFBOEQ7QUFPOUQsTUFBTSxpQkFBaUIsR0FBK0I7SUFDcEQsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUM7SUFDckIsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUM7SUFDckIsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUUsQ0FBWSxHQUFJLENBQVk7SUFDM0MsR0FBRyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUUsQ0FBWSxJQUFLLENBQVk7SUFDN0MsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUUsQ0FBWSxHQUFJLENBQVk7SUFDM0MsR0FBRyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUUsQ0FBWSxJQUFLLENBQVk7SUFDN0MsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO1FBQ1gsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO1lBQUUsT0FBTyxLQUFLLENBQUM7UUFDcEMsSUFBSSxDQUFDLENBQUMsTUFBTSxHQUFHLGlCQUFpQixFQUFFLENBQUM7WUFDakMsTUFBTSxJQUFJLEtBQUssQ0FBQywwQ0FBMEMsaUJBQWlCLEVBQUUsQ0FBQyxDQUFDO1FBQ2pGLENBQUM7UUFDRCxPQUFPLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdkIsQ0FBQztJQUNELEtBQUssRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtRQUNkLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztZQUFFLE9BQU8sSUFBSSxDQUFDLENBQUMsc0NBQXNDO1FBQzFFLElBQUksQ0FBQyxDQUFDLE1BQU0sR0FBRyxpQkFBaUIsRUFBRSxDQUFDO1lBQ2pDLE1BQU0sSUFBSSxLQUFLLENBQUMsMENBQTBDLGlCQUFpQixFQUFFLENBQUMsQ0FBQztRQUNqRixDQUFDO1FBQ0QsT0FBTyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDeEIsQ0FBQztDQUNGLENBQUM7QUFFRiwrRUFBK0U7QUFFL0UsTUFBTSxXQUFXLEdBQUcsSUFBSSxHQUFHLENBQUM7SUFDMUIsV0FBVztJQUNYLGFBQWE7SUFDYixXQUFXO0lBQ1gsVUFBVTtJQUNWLFNBQVM7SUFDVCxnQkFBZ0I7SUFDaEIsZUFBZTtJQUNmLHNCQUFzQjtJQUN0QixrQkFBa0I7SUFDbEIsa0JBQWtCO0lBQ2xCLGtCQUFrQjtJQUNsQixrQkFBa0I7Q0FDbkIsQ0FBQyxDQUFDO0FBRUgsK0VBQStFO0FBRS9FLE1BQU0saUJBQWlCLEdBQUcsSUFBSSxDQUFDO0FBQy9CLE1BQU0sYUFBYSxHQUFHLEVBQUUsQ0FBQztBQUV6QiwrRUFBK0U7QUFFL0U7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXdCRztBQUNILFNBQWdCLGNBQWMsQ0FDNUIsVUFBb0MsRUFDcEMsWUFBc0MsRUFDdEMsTUFBc0I7SUFFdEIsTUFBTSxVQUFVLEdBQXNCLEVBQUUsQ0FBQztJQUN6QyxJQUFJLFVBQVUsR0FBRyxJQUFJLENBQUM7SUFFdEIsS0FBSyxNQUFNLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztRQUNoRCx1RkFBdUY7UUFDdkYsSUFBSSxXQUFXLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDekIsVUFBVSxHQUFHLEtBQUssQ0FBQztZQUNuQixTQUFTO1FBQ1gsQ0FBQztRQUNELElBQUksQ0FBQyxHQUFHLElBQUksT0FBTyxHQUFHLEtBQUssUUFBUTtZQUFFLFNBQVM7UUFFOUMsTUFBTSxNQUFNLEdBQUcsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQy9CLE1BQU0sUUFBUSxHQUFHLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNuQyxNQUFNLFlBQVksR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLG1DQUFpQixDQUFDLENBQUMsQ0FBQyxJQUFBLDZCQUFjLEVBQUMsTUFBTSxFQUFFLGFBQWEsQ0FBQyxDQUFDO1FBRTFGLHVEQUF1RDtRQUN2RCxLQUFLLE1BQU0sQ0FBQyxFQUFFLEVBQUUsU0FBUyxDQUFDLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUE4QixDQUFDLEVBQUUsQ0FBQztZQUM3RSxNQUFNLE9BQU8sR0FBRyxpQkFBaUIsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUN0QyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7Z0JBQ2IsK0VBQStFO2dCQUMvRSxJQUFJLElBQUEsc0JBQVMsR0FBRSxFQUFFLENBQUM7b0JBQ2hCLHNDQUFzQztvQkFDdEMsT0FBTyxDQUFDLElBQUksQ0FDViwyREFBMkQsRUFBRSxhQUFhLEdBQUcsTUFBTTt3QkFDakYsNkNBQTZDLE1BQU0sQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FDNUYsQ0FBQztnQkFDSixDQUFDO2dCQUNELFVBQVUsQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLFNBQVMsRUFBRSxhQUFhLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQztnQkFDOUYsVUFBVSxHQUFHLEtBQUssQ0FBQztnQkFDbkIsU0FBUztZQUNYLENBQUM7WUFFRCxNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsTUFBTSxFQUFFLFNBQVMsQ0FBQyxDQUFDO1lBQzFDLFVBQVUsQ0FBQyxJQUFJLENBQUM7Z0JBQ2QsR0FBRztnQkFDSCxFQUFFO2dCQUNGLFNBQVM7Z0JBQ1QsYUFBYSxFQUFFLFlBQVk7Z0JBQzNCLE1BQU07Z0JBQ04sUUFBUTthQUNULENBQUMsQ0FBQztZQUVILElBQUksQ0FBQyxNQUFNO2dCQUFFLFVBQVUsR0FBRyxLQUFLLENBQUM7UUFDbEMsQ0FBQztJQUNILENBQUM7SUFFRCw2RUFBNkU7SUFDN0Usd0VBQXdFO0lBQ3hFLHlFQUF5RTtJQUN6RSxnREFBZ0Q7SUFDaEQsSUFBSSxVQUFVLENBQUMsTUFBTSxLQUFLLENBQUM7UUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsQ0FBQztJQUVuRSxPQUFPLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsQ0FBQztBQUM3QyxDQUFDO0FBMURELHdDQTBEQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogZGVjaWRlL2V2YWx1YXRvciAtLSBQcmlzbWEtc3R5bGUgZmlsdGVyIGV2YWx1YXRvciBmb3IgZGVjaXNpb24gcnVsZXMuXG4gKlxuICogUHVyZSBmdW5jdGlvbi4gVGFrZXMgYSBXaGVyZUZpbHRlciwgYSB2YWx1ZSBnZXR0ZXIsIGFuZCBhIHJlZGFjdGlvbiBjaGVja2VyLlxuICogRXZhbHVhdGVzIGVhY2ggY29uZGl0aW9uLCByZWNvcmRzIHRoZSByZXN1bHQsIHJldHVybnMgbWF0Y2hlZC9jb25kaXRpb25zLlxuICpcbiAqIEFsbCBrZXlzIGluIHRoZSBmaWx0ZXIgYXJlIEFORGVkIChhbGwgbXVzdCBtYXRjaCBmb3IgdGhlIHJ1bGUgdG8gbWF0Y2gpLlxuICogRGVjb3VwbGVkIGZyb20gU2NvcGVGYWNhZGUg4oCUIHJlY2VpdmVzIGNhbGxiYWNrcywgbm90IHNjb3BlLlxuICovXG5cbmltcG9ydCB7IHN1bW1hcml6ZVZhbHVlIH0gZnJvbSAnLi4vY2FwdHVyZS9zdW1tYXJpemUuanMnO1xuaW1wb3J0IHsgaXNEZXZNb2RlIH0gZnJvbSAnLi4vZGV2TW9kZS5qcyc7XG5pbXBvcnQgeyBTQ09QRV9QTEFDRUhPTERFUiB9IGZyb20gJy4uL21lbW9yeS9wbGFjZWhvbGRlcnMuanMnO1xuaW1wb3J0IHR5cGUgeyBGaWx0ZXJDb25kaXRpb24sIFdoZXJlRmlsdGVyIH0gZnJvbSAnLi90eXBlcy5qcyc7XG5cbi8vIC0tIE9wZXJhdG9yIGRpc3BhdGNoIHRhYmxlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxudHlwZSBPcGVyYXRvckZuID0gKGFjdHVhbDogdW5rbm93biwgdGhyZXNob2xkOiB1bmtub3duKSA9PiBib29sZWFuO1xuXG5jb25zdCBPUEVSQVRPUl9IQU5ETEVSUzogUmVjb3JkPHN0cmluZywgT3BlcmF0b3JGbj4gPSB7XG4gIGVxOiAoYSwgdCkgPT4gYSA9PT0gdCxcbiAgbmU6IChhLCB0KSA9PiBhICE9PSB0LFxuICBndDogKGEsIHQpID0+IChhIGFzIG51bWJlcikgPiAodCBhcyBudW1iZXIpLFxuICBndGU6IChhLCB0KSA9PiAoYSBhcyBudW1iZXIpID49ICh0IGFzIG51bWJlciksXG4gIGx0OiAoYSwgdCkgPT4gKGEgYXMgbnVtYmVyKSA8ICh0IGFzIG51bWJlciksXG4gIGx0ZTogKGEsIHQpID0+IChhIGFzIG51bWJlcikgPD0gKHQgYXMgbnVtYmVyKSxcbiAgaW46IChhLCB0KSA9PiB7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHQpKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKHQubGVuZ3RoID4gTUFYX0lOX0FSUkFZX1NJWkUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgaW4vbm90SW4gYXJyYXkgZXhjZWVkcyBtYXhpbXVtIHNpemUgb2YgJHtNQVhfSU5fQVJSQVlfU0laRX1gKTtcbiAgICB9XG4gICAgcmV0dXJuIHQuaW5jbHVkZXMoYSk7XG4gIH0sXG4gIG5vdEluOiAoYSwgdCkgPT4ge1xuICAgIGlmICghQXJyYXkuaXNBcnJheSh0KSkgcmV0dXJuIHRydWU7IC8vIG5vdCBpbiBhIG5vbi1hcnJheSA9IHZhY3VvdXNseSB0cnVlXG4gICAgaWYgKHQubGVuZ3RoID4gTUFYX0lOX0FSUkFZX1NJWkUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgaW4vbm90SW4gYXJyYXkgZXhjZWVkcyBtYXhpbXVtIHNpemUgb2YgJHtNQVhfSU5fQVJSQVlfU0laRX1gKTtcbiAgICB9XG4gICAgcmV0dXJuICF0LmluY2x1ZGVzKGEpO1xuICB9LFxufTtcblxuLy8gLS0gU2VjdXJpdHk6IHByb3RvdHlwZSBwb2xsdXRpb24gZGVueWxpc3QgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5jb25zdCBERU5JRURfS0VZUyA9IG5ldyBTZXQoW1xuICAnX19wcm90b19fJyxcbiAgJ2NvbnN0cnVjdG9yJyxcbiAgJ3Byb3RvdHlwZScsXG4gICd0b1N0cmluZycsXG4gICd2YWx1ZU9mJyxcbiAgJ2hhc093blByb3BlcnR5JyxcbiAgJ2lzUHJvdG90eXBlT2YnLFxuICAncHJvcGVydHlJc0VudW1lcmFibGUnLFxuICAnX19kZWZpbmVHZXR0ZXJfXycsXG4gICdfX2RlZmluZVNldHRlcl9fJyxcbiAgJ19fbG9va3VwR2V0dGVyX18nLFxuICAnX19sb29rdXBTZXR0ZXJfXycsXG5dKTtcblxuLy8gLS0gQ29uc3RhbnRzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5jb25zdCBNQVhfSU5fQVJSQVlfU0laRSA9IDEwMDA7XG5jb25zdCBNQVhfVkFMVUVfTEVOID0gODA7XG5cbi8vIC0tIEV2YWx1YXRvciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLyoqXG4gKiBFdmFsdWF0ZXMgYSBQcmlzbWEtc3R5bGUgZmlsdGVyIGFnYWluc3Qgc2NvcGUgdmFsdWVzLlxuICpcbiAqICMjIEVtcHR5IGZpbHRlciDihpIgTk8gbWF0Y2ggKGFudGktdmFjdW91cy10cnV0aCDigJQgaW52ZXJ0cyBQcmlzbWEvU1FMKVxuICpcbiAqIEEgZmlsdGVyIHdpdGggbm8gZXZhbHVhYmxlIGNvbmRpdGlvbnMgKGB7fWAsIG9yIG9ubHkgZGVuaWVkL25vbi1vYmplY3RcbiAqIGtleXMpIHJldHVybnMgYG1hdGNoZWQ6IGZhbHNlYC4gVGhpcyBkZWxpYmVyYXRlbHkgSU5WRVJUUyB0aGUgUHJpc21hL1NRTFxuICogaW50dWl0aW9uIHdoZXJlIGB3aGVyZToge31gIG1hdGNoZXMgZXZlcnl0aGluZzogaW4gYSBkZWNpc2lvbiBydWxlLCBhIHJ1bGVcbiAqIHRoYXQgYXNzZXJ0cyBub3RoaW5nIHNob3VsZCBuZXZlciB3aW4gYSBicmFuY2gg4oCUIFwiYWxsIHplcm8gY29uZGl0aW9uc1xuICogcGFzc2VkXCIgaXMgdmFjdW91cyB0cnV0aCwgYW5kIHNpbGVudGx5IHJvdXRpbmcgb24gaXQgd291bGQgZmFicmljYXRlXG4gKiBkZWNpc2lvbiBldmlkZW5jZS4gV2FudCBhIGNhdGNoLWFsbD8gVXNlIHRoZSBleHBsaWNpdCBgZGVmYXVsdEJyYW5jaGBcbiAqIGFyZ3VtZW50IG9mIGBkZWNpZGUoKWAgaW5zdGVhZCBvZiBhbiBlbXB0eSBgd2hlbmAuXG4gKlxuICogIyMgVW5rbm93biBvcGVyYXRvcnMg4oaSIGNvbmRpdGlvbiBmYWlscyAoKyBkZXYtbW9kZSB3YXJuaW5nKVxuICpcbiAqIEFuIG9wZXJhdG9yIG91dHNpZGUgdGhlIHN1cHBvcnRlZCBzZXQgKGBlcSwgbmUsIGd0LCBndGUsIGx0LCBsdGUsIGluLFxuICogbm90SW5gKSByZWNvcmRzIGEgZmFpbGVkIGNvbmRpdGlvbiDigJQgdGhlIHJ1bGUgY2FuIG5ldmVyIHNwdXJpb3VzbHkgbWF0Y2hcbiAqIHRocm91Z2ggYSB0eXBvIChgZ3RlYCBtaXNzcGVsbGVkIGBnbGVgKS4gV2l0aCBkZXYgbW9kZSBlbmFibGVkXG4gKiAoYGVuYWJsZURldk1vZGUoKWApLCBhIGNvbnNvbGUgd2FybmluZyBuYW1lcyB0aGUgdW5rbm93biBvcGVyYXRvciBhbmQga2V5LlxuICpcbiAqIEBwYXJhbSBnZXRWYWx1ZUZuIC0gUmVhZHMgYSB2YWx1ZSBmcm9tIHNjb3BlIGJ5IGtleSAocmF3LCBmb3IgY29tcGFyaXNvbilcbiAqIEBwYXJhbSBpc1JlZGFjdGVkRm4gLSBDaGVja3MgaWYgYSBrZXkgaXMgcmVkYWN0ZWQgKGZvciBldmlkZW5jZSBkaXNwbGF5KVxuICogQHBhcmFtIGZpbHRlciAtIFRoZSBXaGVyZUZpbHRlciB0byBldmFsdWF0ZVxuICogQHJldHVybnMgeyBtYXRjaGVkLCBjb25kaXRpb25zIH0g4oCUIG1hdGNoZWQgPSBhbGwgY29uZGl0aW9ucyBwYXNzZWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGV2YWx1YXRlRmlsdGVyPFQgZXh0ZW5kcyBvYmplY3Q+KFxuICBnZXRWYWx1ZUZuOiAoa2V5OiBzdHJpbmcpID0+IHVua25vd24sXG4gIGlzUmVkYWN0ZWRGbjogKGtleTogc3RyaW5nKSA9PiBib29sZWFuLFxuICBmaWx0ZXI6IFdoZXJlRmlsdGVyPFQ+LFxuKTogeyBtYXRjaGVkOiBib29sZWFuOyBjb25kaXRpb25zOiBGaWx0ZXJDb25kaXRpb25bXSB9IHtcbiAgY29uc3QgY29uZGl0aW9uczogRmlsdGVyQ29uZGl0aW9uW10gPSBbXTtcbiAgbGV0IGFsbE1hdGNoZWQgPSB0cnVlO1xuXG4gIGZvciAoY29uc3QgW2tleSwgb3BzXSBvZiBPYmplY3QuZW50cmllcyhmaWx0ZXIpKSB7XG4gICAgLy8gU2VjdXJpdHk6IGRlbmllZCBrZXlzIGNhdXNlIHJ1bGUgdG8gZmFpbCAoY29uc2lzdGVudCB3aXRoIHVua25vd24gb3BlcmF0b3IgYmVoYXZpb3IpXG4gICAgaWYgKERFTklFRF9LRVlTLmhhcyhrZXkpKSB7XG4gICAgICBhbGxNYXRjaGVkID0gZmFsc2U7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgaWYgKCFvcHMgfHwgdHlwZW9mIG9wcyAhPT0gJ29iamVjdCcpIGNvbnRpbnVlO1xuXG4gICAgY29uc3QgYWN0dWFsID0gZ2V0VmFsdWVGbihrZXkpO1xuICAgIGNvbnN0IHJlZGFjdGVkID0gaXNSZWRhY3RlZEZuKGtleSk7XG4gICAgY29uc3QgZGlzcGxheVZhbHVlID0gcmVkYWN0ZWQgPyBTQ09QRV9QTEFDRUhPTERFUiA6IHN1bW1hcml6ZVZhbHVlKGFjdHVhbCwgTUFYX1ZBTFVFX0xFTik7XG5cbiAgICAvLyBFdmFsdWF0ZSBlYWNoIG9wZXJhdG9yIGluIHRoZSBGaWx0ZXJPcHMgZm9yIHRoaXMga2V5XG4gICAgZm9yIChjb25zdCBbb3AsIHRocmVzaG9sZF0gb2YgT2JqZWN0LmVudHJpZXMob3BzIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KSkge1xuICAgICAgY29uc3QgaGFuZGxlciA9IE9QRVJBVE9SX0hBTkRMRVJTW29wXTtcbiAgICAgIGlmICghaGFuZGxlcikge1xuICAgICAgICAvLyBVbmtub3duIG9wZXJhdG9yOiB0cmVhdCBhcyBmYWlsZWQgY29uZGl0aW9uIHNvIHJ1bGUgZG9lc24ndCBzcHVyaW91c2x5IG1hdGNoXG4gICAgICAgIGlmIChpc0Rldk1vZGUoKSkge1xuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgICAgYFtmb290cHJpbnRdIGRlY2lkZSgpL3NlbGVjdCgpIGZpbHRlcjogdW5rbm93biBvcGVyYXRvciBcIiR7b3B9XCIgb24ga2V5IFwiJHtrZXl9XCIg4oCUIGAgK1xuICAgICAgICAgICAgICBgY29uZGl0aW9uIG5ldmVyIG1hdGNoZXMgKHZhbGlkIG9wZXJhdG9yczogJHtPYmplY3Qua2V5cyhPUEVSQVRPUl9IQU5ETEVSUykuam9pbignLCAnKX0pYCxcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGNvbmRpdGlvbnMucHVzaCh7IGtleSwgb3AsIHRocmVzaG9sZCwgYWN0dWFsU3VtbWFyeTogZGlzcGxheVZhbHVlLCByZXN1bHQ6IGZhbHNlLCByZWRhY3RlZCB9KTtcbiAgICAgICAgYWxsTWF0Y2hlZCA9IGZhbHNlO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgcmVzdWx0ID0gaGFuZGxlcihhY3R1YWwsIHRocmVzaG9sZCk7XG4gICAgICBjb25kaXRpb25zLnB1c2goe1xuICAgICAgICBrZXksXG4gICAgICAgIG9wLFxuICAgICAgICB0aHJlc2hvbGQsXG4gICAgICAgIGFjdHVhbFN1bW1hcnk6IGRpc3BsYXlWYWx1ZSxcbiAgICAgICAgcmVzdWx0LFxuICAgICAgICByZWRhY3RlZCxcbiAgICAgIH0pO1xuXG4gICAgICBpZiAoIXJlc3VsdCkgYWxsTWF0Y2hlZCA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIC8vIEVtcHR5IGZpbHRlciAobm8gZXZhbHVhYmxlIGNvbmRpdGlvbnMpIHNob3VsZCBOT1QgbWF0Y2gg4oCUIHByZXZlbnRzIHZhY3VvdXNcbiAgLy8gdHJ1dGguIE5PVEU6IHRoaXMgZGVsaWJlcmF0ZWx5IGludmVydHMgUHJpc21hL1NRTCBgd2hlcmU6IHt9YCAoXCJtYXRjaFxuICAvLyBldmVyeXRoaW5nXCIpIOKAlCBzZWUgdGhlIGZ1bmN0aW9uIEpTRG9jLiBDYXRjaC1hbGxzIGJlbG9uZyBpbiBkZWNpZGUoKSdzXG4gIC8vIGV4cGxpY2l0IGRlZmF1bHRCcmFuY2gsIG5vdCBpbiBhbiBlbXB0eSBydWxlLlxuICBpZiAoY29uZGl0aW9ucy5sZW5ndGggPT09IDApIHJldHVybiB7IG1hdGNoZWQ6IGZhbHNlLCBjb25kaXRpb25zIH07XG5cbiAgcmV0dXJuIHsgbWF0Y2hlZDogYWxsTWF0Y2hlZCwgY29uZGl0aW9ucyB9O1xufVxuIl19
134
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZhbHVhdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9kZWNpZGUvZXZhbHVhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7Ozs7R0FRRzs7O0FBRUgsMERBQXlEO0FBQ3pELDhDQUEwQztBQUMxQyx5REFBMkQ7QUFPM0QsTUFBTSxpQkFBaUIsR0FBK0I7SUFDcEQsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUM7SUFDckIsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUM7SUFDckIsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUUsQ0FBWSxHQUFJLENBQVk7SUFDM0MsR0FBRyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUUsQ0FBWSxJQUFLLENBQVk7SUFDN0MsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUUsQ0FBWSxHQUFJLENBQVk7SUFDM0MsR0FBRyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUUsQ0FBWSxJQUFLLENBQVk7SUFDN0MsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO1FBQ1gsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO1lBQUUsT0FBTyxLQUFLLENBQUM7UUFDcEMsSUFBSSxDQUFDLENBQUMsTUFBTSxHQUFHLGlCQUFpQixFQUFFLENBQUM7WUFDakMsTUFBTSxJQUFJLEtBQUssQ0FBQywwQ0FBMEMsaUJBQWlCLEVBQUUsQ0FBQyxDQUFDO1FBQ2pGLENBQUM7UUFDRCxPQUFPLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdkIsQ0FBQztJQUNELEtBQUssRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtRQUNkLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztZQUFFLE9BQU8sSUFBSSxDQUFDLENBQUMsc0NBQXNDO1FBQzFFLElBQUksQ0FBQyxDQUFDLE1BQU0sR0FBRyxpQkFBaUIsRUFBRSxDQUFDO1lBQ2pDLE1BQU0sSUFBSSxLQUFLLENBQUMsMENBQTBDLGlCQUFpQixFQUFFLENBQUMsQ0FBQztRQUNqRixDQUFDO1FBQ0QsT0FBTyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDeEIsQ0FBQztDQUNGLENBQUM7QUFFRiwrRUFBK0U7QUFFL0UsTUFBTSxXQUFXLEdBQUcsSUFBSSxHQUFHLENBQUM7SUFDMUIsV0FBVztJQUNYLGFBQWE7SUFDYixXQUFXO0lBQ1gsVUFBVTtJQUNWLFNBQVM7SUFDVCxnQkFBZ0I7SUFDaEIsZUFBZTtJQUNmLHNCQUFzQjtJQUN0QixrQkFBa0I7SUFDbEIsa0JBQWtCO0lBQ2xCLGtCQUFrQjtJQUNsQixrQkFBa0I7Q0FDbkIsQ0FBQyxDQUFDO0FBRUgsK0VBQStFO0FBRS9FLE1BQU0saUJBQWlCLEdBQUcsSUFBSSxDQUFDO0FBQy9CLE1BQU0sYUFBYSxHQUFHLEVBQUUsQ0FBQztBQUV6QiwrRUFBK0U7QUFFL0U7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXdCRztBQUNILFNBQWdCLGNBQWMsQ0FDNUIsVUFBb0MsRUFDcEMsWUFBc0MsRUFDdEMsTUFBc0I7SUFFdEIsTUFBTSxVQUFVLEdBQXNCLEVBQUUsQ0FBQztJQUN6QyxJQUFJLFVBQVUsR0FBRyxJQUFJLENBQUM7SUFFdEIsS0FBSyxNQUFNLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztRQUNoRCx1RkFBdUY7UUFDdkYsSUFBSSxXQUFXLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDekIsVUFBVSxHQUFHLEtBQUssQ0FBQztZQUNuQixTQUFTO1FBQ1gsQ0FBQztRQUNELElBQUksQ0FBQyxHQUFHLElBQUksT0FBTyxHQUFHLEtBQUssUUFBUTtZQUFFLFNBQVM7UUFFOUMsTUFBTSxNQUFNLEdBQUcsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQy9CLE1BQU0sUUFBUSxHQUFHLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNuQyxNQUFNLFlBQVksR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLGdDQUFpQixDQUFDLENBQUMsQ0FBQyxJQUFBLDZCQUFjLEVBQUMsTUFBTSxFQUFFLGFBQWEsQ0FBQyxDQUFDO1FBRTFGLHVEQUF1RDtRQUN2RCxLQUFLLE1BQU0sQ0FBQyxFQUFFLEVBQUUsU0FBUyxDQUFDLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUE4QixDQUFDLEVBQUUsQ0FBQztZQUM3RSxNQUFNLE9BQU8sR0FBRyxpQkFBaUIsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUN0QyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7Z0JBQ2IsK0VBQStFO2dCQUMvRSxJQUFJLElBQUEsc0JBQVMsR0FBRSxFQUFFLENBQUM7b0JBQ2hCLHNDQUFzQztvQkFDdEMsT0FBTyxDQUFDLElBQUksQ0FDViwyREFBMkQsRUFBRSxhQUFhLEdBQUcsTUFBTTt3QkFDakYsNkNBQTZDLE1BQU0sQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FDNUYsQ0FBQztnQkFDSixDQUFDO2dCQUNELFVBQVUsQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLFNBQVMsRUFBRSxhQUFhLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQztnQkFDOUYsVUFBVSxHQUFHLEtBQUssQ0FBQztnQkFDbkIsU0FBUztZQUNYLENBQUM7WUFFRCxNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsTUFBTSxFQUFFLFNBQVMsQ0FBQyxDQUFDO1lBQzFDLFVBQVUsQ0FBQyxJQUFJLENBQUM7Z0JBQ2QsR0FBRztnQkFDSCxFQUFFO2dCQUNGLFNBQVM7Z0JBQ1QsYUFBYSxFQUFFLFlBQVk7Z0JBQzNCLE1BQU07Z0JBQ04sUUFBUTthQUNULENBQUMsQ0FBQztZQUVILElBQUksQ0FBQyxNQUFNO2dCQUFFLFVBQVUsR0FBRyxLQUFLLENBQUM7UUFDbEMsQ0FBQztJQUNILENBQUM7SUFFRCw2RUFBNkU7SUFDN0Usd0VBQXdFO0lBQ3hFLHlFQUF5RTtJQUN6RSxnREFBZ0Q7SUFDaEQsSUFBSSxVQUFVLENBQUMsTUFBTSxLQUFLLENBQUM7UUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsQ0FBQztJQUVuRSxPQUFPLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsQ0FBQztBQUM3QyxDQUFDO0FBMURELHdDQTBEQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogZGVjaWRlL2V2YWx1YXRvciAtLSBQcmlzbWEtc3R5bGUgZmlsdGVyIGV2YWx1YXRvciBmb3IgZGVjaXNpb24gcnVsZXMuXG4gKlxuICogUHVyZSBmdW5jdGlvbi4gVGFrZXMgYSBXaGVyZUZpbHRlciwgYSB2YWx1ZSBnZXR0ZXIsIGFuZCBhIHJlZGFjdGlvbiBjaGVja2VyLlxuICogRXZhbHVhdGVzIGVhY2ggY29uZGl0aW9uLCByZWNvcmRzIHRoZSByZXN1bHQsIHJldHVybnMgbWF0Y2hlZC9jb25kaXRpb25zLlxuICpcbiAqIEFsbCBrZXlzIGluIHRoZSBmaWx0ZXIgYXJlIEFORGVkIChhbGwgbXVzdCBtYXRjaCBmb3IgdGhlIHJ1bGUgdG8gbWF0Y2gpLlxuICogRGVjb3VwbGVkIGZyb20gU2NvcGVGYWNhZGUg4oCUIHJlY2VpdmVzIGNhbGxiYWNrcywgbm90IHNjb3BlLlxuICovXG5cbmltcG9ydCB7IHN1bW1hcml6ZVZhbHVlIH0gZnJvbSAnLi4vY2FwdHVyZS9zdW1tYXJpemUuanMnO1xuaW1wb3J0IHsgaXNEZXZNb2RlIH0gZnJvbSAnLi4vZGV2TW9kZS5qcyc7XG5pbXBvcnQgeyBTQ09QRV9QTEFDRUhPTERFUiB9IGZyb20gJy4uL21lbW9yeS9yZWRhY3Rpb24uanMnO1xuaW1wb3J0IHR5cGUgeyBGaWx0ZXJDb25kaXRpb24sIFdoZXJlRmlsdGVyIH0gZnJvbSAnLi90eXBlcy5qcyc7XG5cbi8vIC0tIE9wZXJhdG9yIGRpc3BhdGNoIHRhYmxlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxudHlwZSBPcGVyYXRvckZuID0gKGFjdHVhbDogdW5rbm93biwgdGhyZXNob2xkOiB1bmtub3duKSA9PiBib29sZWFuO1xuXG5jb25zdCBPUEVSQVRPUl9IQU5ETEVSUzogUmVjb3JkPHN0cmluZywgT3BlcmF0b3JGbj4gPSB7XG4gIGVxOiAoYSwgdCkgPT4gYSA9PT0gdCxcbiAgbmU6IChhLCB0KSA9PiBhICE9PSB0LFxuICBndDogKGEsIHQpID0+IChhIGFzIG51bWJlcikgPiAodCBhcyBudW1iZXIpLFxuICBndGU6IChhLCB0KSA9PiAoYSBhcyBudW1iZXIpID49ICh0IGFzIG51bWJlciksXG4gIGx0OiAoYSwgdCkgPT4gKGEgYXMgbnVtYmVyKSA8ICh0IGFzIG51bWJlciksXG4gIGx0ZTogKGEsIHQpID0+IChhIGFzIG51bWJlcikgPD0gKHQgYXMgbnVtYmVyKSxcbiAgaW46IChhLCB0KSA9PiB7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHQpKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKHQubGVuZ3RoID4gTUFYX0lOX0FSUkFZX1NJWkUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgaW4vbm90SW4gYXJyYXkgZXhjZWVkcyBtYXhpbXVtIHNpemUgb2YgJHtNQVhfSU5fQVJSQVlfU0laRX1gKTtcbiAgICB9XG4gICAgcmV0dXJuIHQuaW5jbHVkZXMoYSk7XG4gIH0sXG4gIG5vdEluOiAoYSwgdCkgPT4ge1xuICAgIGlmICghQXJyYXkuaXNBcnJheSh0KSkgcmV0dXJuIHRydWU7IC8vIG5vdCBpbiBhIG5vbi1hcnJheSA9IHZhY3VvdXNseSB0cnVlXG4gICAgaWYgKHQubGVuZ3RoID4gTUFYX0lOX0FSUkFZX1NJWkUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgaW4vbm90SW4gYXJyYXkgZXhjZWVkcyBtYXhpbXVtIHNpemUgb2YgJHtNQVhfSU5fQVJSQVlfU0laRX1gKTtcbiAgICB9XG4gICAgcmV0dXJuICF0LmluY2x1ZGVzKGEpO1xuICB9LFxufTtcblxuLy8gLS0gU2VjdXJpdHk6IHByb3RvdHlwZSBwb2xsdXRpb24gZGVueWxpc3QgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5jb25zdCBERU5JRURfS0VZUyA9IG5ldyBTZXQoW1xuICAnX19wcm90b19fJyxcbiAgJ2NvbnN0cnVjdG9yJyxcbiAgJ3Byb3RvdHlwZScsXG4gICd0b1N0cmluZycsXG4gICd2YWx1ZU9mJyxcbiAgJ2hhc093blByb3BlcnR5JyxcbiAgJ2lzUHJvdG90eXBlT2YnLFxuICAncHJvcGVydHlJc0VudW1lcmFibGUnLFxuICAnX19kZWZpbmVHZXR0ZXJfXycsXG4gICdfX2RlZmluZVNldHRlcl9fJyxcbiAgJ19fbG9va3VwR2V0dGVyX18nLFxuICAnX19sb29rdXBTZXR0ZXJfXycsXG5dKTtcblxuLy8gLS0gQ29uc3RhbnRzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5jb25zdCBNQVhfSU5fQVJSQVlfU0laRSA9IDEwMDA7XG5jb25zdCBNQVhfVkFMVUVfTEVOID0gODA7XG5cbi8vIC0tIEV2YWx1YXRvciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLyoqXG4gKiBFdmFsdWF0ZXMgYSBQcmlzbWEtc3R5bGUgZmlsdGVyIGFnYWluc3Qgc2NvcGUgdmFsdWVzLlxuICpcbiAqICMjIEVtcHR5IGZpbHRlciDihpIgTk8gbWF0Y2ggKGFudGktdmFjdW91cy10cnV0aCDigJQgaW52ZXJ0cyBQcmlzbWEvU1FMKVxuICpcbiAqIEEgZmlsdGVyIHdpdGggbm8gZXZhbHVhYmxlIGNvbmRpdGlvbnMgKGB7fWAsIG9yIG9ubHkgZGVuaWVkL25vbi1vYmplY3RcbiAqIGtleXMpIHJldHVybnMgYG1hdGNoZWQ6IGZhbHNlYC4gVGhpcyBkZWxpYmVyYXRlbHkgSU5WRVJUUyB0aGUgUHJpc21hL1NRTFxuICogaW50dWl0aW9uIHdoZXJlIGB3aGVyZToge31gIG1hdGNoZXMgZXZlcnl0aGluZzogaW4gYSBkZWNpc2lvbiBydWxlLCBhIHJ1bGVcbiAqIHRoYXQgYXNzZXJ0cyBub3RoaW5nIHNob3VsZCBuZXZlciB3aW4gYSBicmFuY2gg4oCUIFwiYWxsIHplcm8gY29uZGl0aW9uc1xuICogcGFzc2VkXCIgaXMgdmFjdW91cyB0cnV0aCwgYW5kIHNpbGVudGx5IHJvdXRpbmcgb24gaXQgd291bGQgZmFicmljYXRlXG4gKiBkZWNpc2lvbiBldmlkZW5jZS4gV2FudCBhIGNhdGNoLWFsbD8gVXNlIHRoZSBleHBsaWNpdCBgZGVmYXVsdEJyYW5jaGBcbiAqIGFyZ3VtZW50IG9mIGBkZWNpZGUoKWAgaW5zdGVhZCBvZiBhbiBlbXB0eSBgd2hlbmAuXG4gKlxuICogIyMgVW5rbm93biBvcGVyYXRvcnMg4oaSIGNvbmRpdGlvbiBmYWlscyAoKyBkZXYtbW9kZSB3YXJuaW5nKVxuICpcbiAqIEFuIG9wZXJhdG9yIG91dHNpZGUgdGhlIHN1cHBvcnRlZCBzZXQgKGBlcSwgbmUsIGd0LCBndGUsIGx0LCBsdGUsIGluLFxuICogbm90SW5gKSByZWNvcmRzIGEgZmFpbGVkIGNvbmRpdGlvbiDigJQgdGhlIHJ1bGUgY2FuIG5ldmVyIHNwdXJpb3VzbHkgbWF0Y2hcbiAqIHRocm91Z2ggYSB0eXBvIChgZ3RlYCBtaXNzcGVsbGVkIGBnbGVgKS4gV2l0aCBkZXYgbW9kZSBlbmFibGVkXG4gKiAoYGVuYWJsZURldk1vZGUoKWApLCBhIGNvbnNvbGUgd2FybmluZyBuYW1lcyB0aGUgdW5rbm93biBvcGVyYXRvciBhbmQga2V5LlxuICpcbiAqIEBwYXJhbSBnZXRWYWx1ZUZuIC0gUmVhZHMgYSB2YWx1ZSBmcm9tIHNjb3BlIGJ5IGtleSAocmF3LCBmb3IgY29tcGFyaXNvbilcbiAqIEBwYXJhbSBpc1JlZGFjdGVkRm4gLSBDaGVja3MgaWYgYSBrZXkgaXMgcmVkYWN0ZWQgKGZvciBldmlkZW5jZSBkaXNwbGF5KVxuICogQHBhcmFtIGZpbHRlciAtIFRoZSBXaGVyZUZpbHRlciB0byBldmFsdWF0ZVxuICogQHJldHVybnMgeyBtYXRjaGVkLCBjb25kaXRpb25zIH0g4oCUIG1hdGNoZWQgPSBhbGwgY29uZGl0aW9ucyBwYXNzZWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGV2YWx1YXRlRmlsdGVyPFQgZXh0ZW5kcyBvYmplY3Q+KFxuICBnZXRWYWx1ZUZuOiAoa2V5OiBzdHJpbmcpID0+IHVua25vd24sXG4gIGlzUmVkYWN0ZWRGbjogKGtleTogc3RyaW5nKSA9PiBib29sZWFuLFxuICBmaWx0ZXI6IFdoZXJlRmlsdGVyPFQ+LFxuKTogeyBtYXRjaGVkOiBib29sZWFuOyBjb25kaXRpb25zOiBGaWx0ZXJDb25kaXRpb25bXSB9IHtcbiAgY29uc3QgY29uZGl0aW9uczogRmlsdGVyQ29uZGl0aW9uW10gPSBbXTtcbiAgbGV0IGFsbE1hdGNoZWQgPSB0cnVlO1xuXG4gIGZvciAoY29uc3QgW2tleSwgb3BzXSBvZiBPYmplY3QuZW50cmllcyhmaWx0ZXIpKSB7XG4gICAgLy8gU2VjdXJpdHk6IGRlbmllZCBrZXlzIGNhdXNlIHJ1bGUgdG8gZmFpbCAoY29uc2lzdGVudCB3aXRoIHVua25vd24gb3BlcmF0b3IgYmVoYXZpb3IpXG4gICAgaWYgKERFTklFRF9LRVlTLmhhcyhrZXkpKSB7XG4gICAgICBhbGxNYXRjaGVkID0gZmFsc2U7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgaWYgKCFvcHMgfHwgdHlwZW9mIG9wcyAhPT0gJ29iamVjdCcpIGNvbnRpbnVlO1xuXG4gICAgY29uc3QgYWN0dWFsID0gZ2V0VmFsdWVGbihrZXkpO1xuICAgIGNvbnN0IHJlZGFjdGVkID0gaXNSZWRhY3RlZEZuKGtleSk7XG4gICAgY29uc3QgZGlzcGxheVZhbHVlID0gcmVkYWN0ZWQgPyBTQ09QRV9QTEFDRUhPTERFUiA6IHN1bW1hcml6ZVZhbHVlKGFjdHVhbCwgTUFYX1ZBTFVFX0xFTik7XG5cbiAgICAvLyBFdmFsdWF0ZSBlYWNoIG9wZXJhdG9yIGluIHRoZSBGaWx0ZXJPcHMgZm9yIHRoaXMga2V5XG4gICAgZm9yIChjb25zdCBbb3AsIHRocmVzaG9sZF0gb2YgT2JqZWN0LmVudHJpZXMob3BzIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KSkge1xuICAgICAgY29uc3QgaGFuZGxlciA9IE9QRVJBVE9SX0hBTkRMRVJTW29wXTtcbiAgICAgIGlmICghaGFuZGxlcikge1xuICAgICAgICAvLyBVbmtub3duIG9wZXJhdG9yOiB0cmVhdCBhcyBmYWlsZWQgY29uZGl0aW9uIHNvIHJ1bGUgZG9lc24ndCBzcHVyaW91c2x5IG1hdGNoXG4gICAgICAgIGlmIChpc0Rldk1vZGUoKSkge1xuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgICAgYFtmb290cHJpbnRdIGRlY2lkZSgpL3NlbGVjdCgpIGZpbHRlcjogdW5rbm93biBvcGVyYXRvciBcIiR7b3B9XCIgb24ga2V5IFwiJHtrZXl9XCIg4oCUIGAgK1xuICAgICAgICAgICAgICBgY29uZGl0aW9uIG5ldmVyIG1hdGNoZXMgKHZhbGlkIG9wZXJhdG9yczogJHtPYmplY3Qua2V5cyhPUEVSQVRPUl9IQU5ETEVSUykuam9pbignLCAnKX0pYCxcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGNvbmRpdGlvbnMucHVzaCh7IGtleSwgb3AsIHRocmVzaG9sZCwgYWN0dWFsU3VtbWFyeTogZGlzcGxheVZhbHVlLCByZXN1bHQ6IGZhbHNlLCByZWRhY3RlZCB9KTtcbiAgICAgICAgYWxsTWF0Y2hlZCA9IGZhbHNlO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgcmVzdWx0ID0gaGFuZGxlcihhY3R1YWwsIHRocmVzaG9sZCk7XG4gICAgICBjb25kaXRpb25zLnB1c2goe1xuICAgICAgICBrZXksXG4gICAgICAgIG9wLFxuICAgICAgICB0aHJlc2hvbGQsXG4gICAgICAgIGFjdHVhbFN1bW1hcnk6IGRpc3BsYXlWYWx1ZSxcbiAgICAgICAgcmVzdWx0LFxuICAgICAgICByZWRhY3RlZCxcbiAgICAgIH0pO1xuXG4gICAgICBpZiAoIXJlc3VsdCkgYWxsTWF0Y2hlZCA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIC8vIEVtcHR5IGZpbHRlciAobm8gZXZhbHVhYmxlIGNvbmRpdGlvbnMpIHNob3VsZCBOT1QgbWF0Y2gg4oCUIHByZXZlbnRzIHZhY3VvdXNcbiAgLy8gdHJ1dGguIE5PVEU6IHRoaXMgZGVsaWJlcmF0ZWx5IGludmVydHMgUHJpc21hL1NRTCBgd2hlcmU6IHt9YCAoXCJtYXRjaFxuICAvLyBldmVyeXRoaW5nXCIpIOKAlCBzZWUgdGhlIGZ1bmN0aW9uIEpTRG9jLiBDYXRjaC1hbGxzIGJlbG9uZyBpbiBkZWNpZGUoKSdzXG4gIC8vIGV4cGxpY2l0IGRlZmF1bHRCcmFuY2gsIG5vdCBpbiBhbiBlbXB0eSBydWxlLlxuICBpZiAoY29uZGl0aW9ucy5sZW5ndGggPT09IDApIHJldHVybiB7IG1hdGNoZWQ6IGZhbHNlLCBjb25kaXRpb25zIH07XG5cbiAgcmV0dXJuIHsgbWF0Y2hlZDogYWxsTWF0Y2hlZCwgY29uZGl0aW9ucyB9O1xufVxuIl19
@@ -10,7 +10,7 @@
10
10
  Object.defineProperty(exports, "__esModule", { value: true });
11
11
  exports.EvidenceCollector = void 0;
12
12
  const summarize_js_1 = require("../capture/summarize.js");
13
- const placeholders_js_1 = require("../memory/placeholders.js");
13
+ const redaction_js_1 = require("../memory/redaction.js");
14
14
  const MAX_VALUE_LEN = 80;
15
15
  let evidenceCounter = 0;
16
16
  /**
@@ -28,7 +28,7 @@ class EvidenceCollector {
28
28
  return;
29
29
  this.inputs.push({
30
30
  key: event.key,
31
- valueSummary: event.redacted ? placeholders_js_1.SCOPE_PLACEHOLDER : (0, summarize_js_1.summarizeValue)(event.value, MAX_VALUE_LEN),
31
+ valueSummary: event.redacted ? redaction_js_1.SCOPE_PLACEHOLDER : (0, summarize_js_1.summarizeValue)(event.value, MAX_VALUE_LEN),
32
32
  redacted: event.redacted === true,
33
33
  });
34
34
  }
@@ -38,4 +38,4 @@ class EvidenceCollector {
38
38
  }
39
39
  }
40
40
  exports.EvidenceCollector = EvidenceCollector;
41
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZpZGVuY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL2RlY2lkZS9ldmlkZW5jZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7Ozs7R0FPRzs7O0FBRUgsMERBQXlEO0FBQ3pELCtEQUE4RDtBQUk5RCxNQUFNLGFBQWEsR0FBRyxFQUFFLENBQUM7QUFFekIsSUFBSSxlQUFlLEdBQUcsQ0FBQyxDQUFDO0FBRXhCOzs7R0FHRztBQUNILE1BQWEsaUJBQWlCO0lBQ25CLEVBQUUsQ0FBUztJQUNaLE1BQU0sR0FBZ0IsRUFBRSxDQUFDO0lBRWpDO1FBQ0UsSUFBSSxDQUFDLEVBQUUsR0FBRyxZQUFZLEVBQUUsZUFBZSxFQUFFLENBQUM7SUFDNUMsQ0FBQztJQUVELE1BQU0sQ0FBQyxLQUFnQjtRQUNyQixJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUc7WUFBRSxPQUFPO1FBQ3ZCLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDO1lBQ2YsR0FBRyxFQUFFLEtBQUssQ0FBQyxHQUFHO1lBQ2QsWUFBWSxFQUFFLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLG1DQUFpQixDQUFDLENBQUMsQ0FBQyxJQUFBLDZCQUFjLEVBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxhQUFhLENBQUM7WUFDN0YsUUFBUSxFQUFFLEtBQUssQ0FBQyxRQUFRLEtBQUssSUFBSTtTQUNsQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQscUNBQXFDO0lBQ3JDLFNBQVM7UUFDUCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUM7SUFDckIsQ0FBQztDQUNGO0FBckJELDhDQXFCQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogZGVjaWRlL2V2aWRlbmNlIC0tIExpZ2h0d2VpZ2h0IHRlbXAgcmVjb3JkZXIgZm9yIGF1dG8tY2FwdHVyaW5nIHJlYWRzXG4gKiBkdXJpbmcgYSB3aGVuKCkgZnVuY3Rpb24gY2FsbC5cbiAqXG4gKiBBdHRhY2hlZCB0byBzY29wZSBiZWZvcmUgY2FsbGluZyB3aGVuKHNjb3BlKSwgZGV0YWNoZWQgYWZ0ZXIuXG4gKiBDYXB0dXJlcyBSZWFkRXZlbnQga2V5ICsgc3VtbWFyaXplZCB2YWx1ZSArIHJlZGFjdGlvbiBmbGFnLlxuICogVXNlcyBzdW1tYXJpemVWYWx1ZSgpIGF0IGNhcHR1cmUgdGltZSAobm8gcmF3IG9iamVjdCByZWZlcmVuY2VzIGhlbGQpLlxuICovXG5cbmltcG9ydCB7IHN1bW1hcml6ZVZhbHVlIH0gZnJvbSAnLi4vY2FwdHVyZS9zdW1tYXJpemUuanMnO1xuaW1wb3J0IHsgU0NPUEVfUExBQ0VIT0xERVIgfSBmcm9tICcuLi9tZW1vcnkvcGxhY2Vob2xkZXJzLmpzJztcbmltcG9ydCB0eXBlIHsgUmVhZEV2ZW50LCBTY29wZVJlY29yZGVyIH0gZnJvbSAnLi4vc2NvcGUvdHlwZXMuanMnO1xuaW1wb3J0IHR5cGUgeyBSZWFkSW5wdXQgfSBmcm9tICcuL3R5cGVzLmpzJztcblxuY29uc3QgTUFYX1ZBTFVFX0xFTiA9IDgwO1xuXG5sZXQgZXZpZGVuY2VDb3VudGVyID0gMDtcblxuLyoqXG4gKiBNaW5pbWFsIFNjb3BlUmVjb3JkZXIgdGhhdCBjYXB0dXJlcyByZWFkcyBmb3IgZGVjaXNpb24gZXZpZGVuY2UuXG4gKiBBdHRhY2ggYmVmb3JlIHdoZW4oKSwgZGV0YWNoIGFmdGVyLiBDb2xsZWN0IHZpYSBnZXRJbnB1dHMoKS5cbiAqL1xuZXhwb3J0IGNsYXNzIEV2aWRlbmNlQ29sbGVjdG9yIGltcGxlbWVudHMgU2NvcGVSZWNvcmRlciB7XG4gIHJlYWRvbmx5IGlkOiBzdHJpbmc7XG4gIHByaXZhdGUgaW5wdXRzOiBSZWFkSW5wdXRbXSA9IFtdO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuaWQgPSBgZXZpZGVuY2UtJHsrK2V2aWRlbmNlQ291bnRlcn1gO1xuICB9XG5cbiAgb25SZWFkKGV2ZW50OiBSZWFkRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAoIWV2ZW50LmtleSkgcmV0dXJuO1xuICAgIHRoaXMuaW5wdXRzLnB1c2goe1xuICAgICAga2V5OiBldmVudC5rZXksXG4gICAgICB2YWx1ZVN1bW1hcnk6IGV2ZW50LnJlZGFjdGVkID8gU0NPUEVfUExBQ0VIT0xERVIgOiBzdW1tYXJpemVWYWx1ZShldmVudC52YWx1ZSwgTUFYX1ZBTFVFX0xFTiksXG4gICAgICByZWRhY3RlZDogZXZlbnQucmVkYWN0ZWQgPT09IHRydWUsXG4gICAgfSk7XG4gIH1cblxuICAvKiogUmV0dXJucyBjb2xsZWN0ZWQgcmVhZCBpbnB1dHMuICovXG4gIGdldElucHV0cygpOiBSZWFkSW5wdXRbXSB7XG4gICAgcmV0dXJuIHRoaXMuaW5wdXRzO1xuICB9XG59XG4iXX0=
41
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZpZGVuY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL2RlY2lkZS9ldmlkZW5jZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7Ozs7R0FPRzs7O0FBRUgsMERBQXlEO0FBQ3pELHlEQUEyRDtBQUkzRCxNQUFNLGFBQWEsR0FBRyxFQUFFLENBQUM7QUFFekIsSUFBSSxlQUFlLEdBQUcsQ0FBQyxDQUFDO0FBRXhCOzs7R0FHRztBQUNILE1BQWEsaUJBQWlCO0lBQ25CLEVBQUUsQ0FBUztJQUNaLE1BQU0sR0FBZ0IsRUFBRSxDQUFDO0lBRWpDO1FBQ0UsSUFBSSxDQUFDLEVBQUUsR0FBRyxZQUFZLEVBQUUsZUFBZSxFQUFFLENBQUM7SUFDNUMsQ0FBQztJQUVELE1BQU0sQ0FBQyxLQUFnQjtRQUNyQixJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUc7WUFBRSxPQUFPO1FBQ3ZCLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDO1lBQ2YsR0FBRyxFQUFFLEtBQUssQ0FBQyxHQUFHO1lBQ2QsWUFBWSxFQUFFLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLGdDQUFpQixDQUFDLENBQUMsQ0FBQyxJQUFBLDZCQUFjLEVBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxhQUFhLENBQUM7WUFDN0YsUUFBUSxFQUFFLEtBQUssQ0FBQyxRQUFRLEtBQUssSUFBSTtTQUNsQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQscUNBQXFDO0lBQ3JDLFNBQVM7UUFDUCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUM7SUFDckIsQ0FBQztDQUNGO0FBckJELDhDQXFCQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogZGVjaWRlL2V2aWRlbmNlIC0tIExpZ2h0d2VpZ2h0IHRlbXAgcmVjb3JkZXIgZm9yIGF1dG8tY2FwdHVyaW5nIHJlYWRzXG4gKiBkdXJpbmcgYSB3aGVuKCkgZnVuY3Rpb24gY2FsbC5cbiAqXG4gKiBBdHRhY2hlZCB0byBzY29wZSBiZWZvcmUgY2FsbGluZyB3aGVuKHNjb3BlKSwgZGV0YWNoZWQgYWZ0ZXIuXG4gKiBDYXB0dXJlcyBSZWFkRXZlbnQga2V5ICsgc3VtbWFyaXplZCB2YWx1ZSArIHJlZGFjdGlvbiBmbGFnLlxuICogVXNlcyBzdW1tYXJpemVWYWx1ZSgpIGF0IGNhcHR1cmUgdGltZSAobm8gcmF3IG9iamVjdCByZWZlcmVuY2VzIGhlbGQpLlxuICovXG5cbmltcG9ydCB7IHN1bW1hcml6ZVZhbHVlIH0gZnJvbSAnLi4vY2FwdHVyZS9zdW1tYXJpemUuanMnO1xuaW1wb3J0IHsgU0NPUEVfUExBQ0VIT0xERVIgfSBmcm9tICcuLi9tZW1vcnkvcmVkYWN0aW9uLmpzJztcbmltcG9ydCB0eXBlIHsgUmVhZEV2ZW50LCBTY29wZVJlY29yZGVyIH0gZnJvbSAnLi4vc2NvcGUvdHlwZXMuanMnO1xuaW1wb3J0IHR5cGUgeyBSZWFkSW5wdXQgfSBmcm9tICcuL3R5cGVzLmpzJztcblxuY29uc3QgTUFYX1ZBTFVFX0xFTiA9IDgwO1xuXG5sZXQgZXZpZGVuY2VDb3VudGVyID0gMDtcblxuLyoqXG4gKiBNaW5pbWFsIFNjb3BlUmVjb3JkZXIgdGhhdCBjYXB0dXJlcyByZWFkcyBmb3IgZGVjaXNpb24gZXZpZGVuY2UuXG4gKiBBdHRhY2ggYmVmb3JlIHdoZW4oKSwgZGV0YWNoIGFmdGVyLiBDb2xsZWN0IHZpYSBnZXRJbnB1dHMoKS5cbiAqL1xuZXhwb3J0IGNsYXNzIEV2aWRlbmNlQ29sbGVjdG9yIGltcGxlbWVudHMgU2NvcGVSZWNvcmRlciB7XG4gIHJlYWRvbmx5IGlkOiBzdHJpbmc7XG4gIHByaXZhdGUgaW5wdXRzOiBSZWFkSW5wdXRbXSA9IFtdO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuaWQgPSBgZXZpZGVuY2UtJHsrK2V2aWRlbmNlQ291bnRlcn1gO1xuICB9XG5cbiAgb25SZWFkKGV2ZW50OiBSZWFkRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAoIWV2ZW50LmtleSkgcmV0dXJuO1xuICAgIHRoaXMuaW5wdXRzLnB1c2goe1xuICAgICAga2V5OiBldmVudC5rZXksXG4gICAgICB2YWx1ZVN1bW1hcnk6IGV2ZW50LnJlZGFjdGVkID8gU0NPUEVfUExBQ0VIT0xERVIgOiBzdW1tYXJpemVWYWx1ZShldmVudC52YWx1ZSwgTUFYX1ZBTFVFX0xFTiksXG4gICAgICByZWRhY3RlZDogZXZlbnQucmVkYWN0ZWQgPT09IHRydWUsXG4gICAgfSk7XG4gIH1cblxuICAvKiogUmV0dXJucyBjb2xsZWN0ZWQgcmVhZCBpbnB1dHMuICovXG4gIGdldElucHV0cygpOiBSZWFkSW5wdXRbXSB7XG4gICAgcmV0dXJuIHRoaXMuaW5wdXRzO1xuICB9XG59XG4iXX0=
@@ -14,7 +14,7 @@
14
14
  */
15
15
  Object.defineProperty(exports, "__esModule", { value: true });
16
16
  exports.servedPause = void 0;
17
- const placeholders_js_1 = require("../../memory/placeholders.js");
17
+ const redaction_js_1 = require("../../memory/redaction.js");
18
18
  function servedPause(context, pauseData) {
19
19
  const rule = context.getRedactionRule();
20
20
  if (!rule)
@@ -23,8 +23,8 @@ function servedPause(context, pauseData) {
23
23
  return rule.retainBoundary(pauseData);
24
24
  }
25
25
  catch {
26
- return placeholders_js_1.SCOPE_PLACEHOLDER;
26
+ return redaction_js_1.SCOPE_PLACEHOLDER;
27
27
  }
28
28
  }
29
29
  exports.servedPause = servedPause;
30
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmVkUGF1c2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL2VuZ2luZS9oYW5kbGVycy9zZXJ2ZWRQYXVzZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7Ozs7Ozs7OztHQVlHOzs7QUFFSCxrRUFBaUU7QUFHakUsU0FBZ0IsV0FBVyxDQUFDLE9BQXFCLEVBQUUsU0FBa0I7SUFDbkUsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLGdCQUFnQixFQUFFLENBQUM7SUFDeEMsSUFBSSxDQUFDLElBQUk7UUFBRSxPQUFPLFNBQVMsQ0FBQztJQUM1QixJQUFJLENBQUM7UUFDSCxPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDeEMsQ0FBQztJQUFDLE1BQU0sQ0FBQztRQUNQLE9BQU8sbUNBQWlCLENBQUM7SUFDM0IsQ0FBQztBQUNILENBQUM7QUFSRCxrQ0FRQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogc2VydmVkUGF1c2Ug4oCUIHRoZSBPTkUgcGxhY2UgYSBwYXVzZSBwYXlsb2FkJ3MgU0VSVkVEIGZvcm0gaXMgZGVjaWRlZC5cbiAqXG4gKiBBIHBhdXNlIHBheWxvYWQgKGEgcGF1c2FibGUgc3RhZ2UncyByZXR1cm4sIGFuIGBpbnRlcnJ1cHQoKWAgcGF5bG9hZCkgaXMgYVxuICogcmVjb3JkIGhhbmRlZCBvdXQgd2hvbGUsIHNvIGV2ZXJ5IG9ic2VydmVyIGlzIHNlcnZlZCBpdCB1bmRlciB0aGUgcnVuJ3NcbiAqIHJlZGFjdGlvbiBydWxlIChgUmVkYWN0aW9uUnVsZS5yZXRhaW5Cb3VuZGFyeWA6IGl0cyBrZXlzIGF0IGV2ZXJ5IGRlcHRoKSDigJRcbiAqIHRoZSBzY29wZSBhbmQgZmxvdyBgb25QYXVzZWAgZXZlbnRzLCBpbmxpbmUgYW5kIGRlZmVycmVkLCBhbmQgd2l0aCB0aGVtIHRoZVxuICogbmFycmF0aXZlIGFuZCBldmVyeSByZWNvcmRlciByb3cuIFRoZSBDSEVDS1BPSU5UIGtlZXBzIHRoZSByZWFsIHBheWxvYWQ6XG4gKiByZXN1bWUgaGFuZHMgaXQgYmFjayB0byB0aGUgY2FsbGVyLCB3aG8gYXNrZWQgdGhlIHF1ZXN0aW9uLlxuICpcbiAqIFRvdGFsOiBhIHBheWxvYWQgd2hvc2Ugc2NydWIgZmFpbHMgKGFuIHVuY2xvbmVhYmxlIHZhbHVlIHVuZGVyIGEgc2VsZWN0ZWRcbiAqIGZpZWxkKSBpcyBzZXJ2ZWQgYXMgdGhlIHBsYWNlaG9sZGVyIOKAlCBuZXZlciByYXcsIGFuZCBuZXZlciBhIGZhaWxlZCBwYXVzZS5cbiAqL1xuXG5pbXBvcnQgeyBTQ09QRV9QTEFDRUhPTERFUiB9IGZyb20gJy4uLy4uL21lbW9yeS9wbGFjZWhvbGRlcnMuanMnO1xuaW1wb3J0IHR5cGUgeyBTdGFnZUNvbnRleHQgfSBmcm9tICcuLi8uLi9tZW1vcnkvU3RhZ2VDb250ZXh0LmpzJztcblxuZXhwb3J0IGZ1bmN0aW9uIHNlcnZlZFBhdXNlKGNvbnRleHQ6IFN0YWdlQ29udGV4dCwgcGF1c2VEYXRhOiB1bmtub3duKTogdW5rbm93biB7XG4gIGNvbnN0IHJ1bGUgPSBjb250ZXh0LmdldFJlZGFjdGlvblJ1bGUoKTtcbiAgaWYgKCFydWxlKSByZXR1cm4gcGF1c2VEYXRhO1xuICB0cnkge1xuICAgIHJldHVybiBydWxlLnJldGFpbkJvdW5kYXJ5KHBhdXNlRGF0YSk7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBTQ09QRV9QTEFDRUhPTERFUjtcbiAgfVxufVxuIl19
30
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmVkUGF1c2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL2VuZ2luZS9oYW5kbGVycy9zZXJ2ZWRQYXVzZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7Ozs7Ozs7OztHQVlHOzs7QUFFSCw0REFBOEQ7QUFHOUQsU0FBZ0IsV0FBVyxDQUFDLE9BQXFCLEVBQUUsU0FBa0I7SUFDbkUsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLGdCQUFnQixFQUFFLENBQUM7SUFDeEMsSUFBSSxDQUFDLElBQUk7UUFBRSxPQUFPLFNBQVMsQ0FBQztJQUM1QixJQUFJLENBQUM7UUFDSCxPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDeEMsQ0FBQztJQUFDLE1BQU0sQ0FBQztRQUNQLE9BQU8sZ0NBQWlCLENBQUM7SUFDM0IsQ0FBQztBQUNILENBQUM7QUFSRCxrQ0FRQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogc2VydmVkUGF1c2Ug4oCUIHRoZSBPTkUgcGxhY2UgYSBwYXVzZSBwYXlsb2FkJ3MgU0VSVkVEIGZvcm0gaXMgZGVjaWRlZC5cbiAqXG4gKiBBIHBhdXNlIHBheWxvYWQgKGEgcGF1c2FibGUgc3RhZ2UncyByZXR1cm4sIGFuIGBpbnRlcnJ1cHQoKWAgcGF5bG9hZCkgaXMgYVxuICogcmVjb3JkIGhhbmRlZCBvdXQgd2hvbGUsIHNvIGV2ZXJ5IG9ic2VydmVyIGlzIHNlcnZlZCBpdCB1bmRlciB0aGUgcnVuJ3NcbiAqIHJlZGFjdGlvbiBydWxlIChgUmVkYWN0aW9uUnVsZS5yZXRhaW5Cb3VuZGFyeWA6IGl0cyBrZXlzIGF0IGV2ZXJ5IGRlcHRoKSDigJRcbiAqIHRoZSBzY29wZSBhbmQgZmxvdyBgb25QYXVzZWAgZXZlbnRzLCBpbmxpbmUgYW5kIGRlZmVycmVkLCBhbmQgd2l0aCB0aGVtIHRoZVxuICogbmFycmF0aXZlIGFuZCBldmVyeSByZWNvcmRlciByb3cuIFRoZSBDSEVDS1BPSU5UIGtlZXBzIHRoZSByZWFsIHBheWxvYWQ6XG4gKiByZXN1bWUgaGFuZHMgaXQgYmFjayB0byB0aGUgY2FsbGVyLCB3aG8gYXNrZWQgdGhlIHF1ZXN0aW9uLlxuICpcbiAqIFRvdGFsOiBhIHBheWxvYWQgd2hvc2Ugc2NydWIgZmFpbHMgKGFuIHVuY2xvbmVhYmxlIHZhbHVlIHVuZGVyIGEgc2VsZWN0ZWRcbiAqIGZpZWxkKSBpcyBzZXJ2ZWQgYXMgdGhlIHBsYWNlaG9sZGVyIOKAlCBuZXZlciByYXcsIGFuZCBuZXZlciBhIGZhaWxlZCBwYXVzZS5cbiAqL1xuXG5pbXBvcnQgeyBTQ09QRV9QTEFDRUhPTERFUiB9IGZyb20gJy4uLy4uL21lbW9yeS9yZWRhY3Rpb24uanMnO1xuaW1wb3J0IHR5cGUgeyBTdGFnZUNvbnRleHQgfSBmcm9tICcuLi8uLi9tZW1vcnkvU3RhZ2VDb250ZXh0LmpzJztcblxuZXhwb3J0IGZ1bmN0aW9uIHNlcnZlZFBhdXNlKGNvbnRleHQ6IFN0YWdlQ29udGV4dCwgcGF1c2VEYXRhOiB1bmtub3duKTogdW5rbm93biB7XG4gIGNvbnN0IHJ1bGUgPSBjb250ZXh0LmdldFJlZGFjdGlvblJ1bGUoKTtcbiAgaWYgKCFydWxlKSByZXR1cm4gcGF1c2VEYXRhO1xuICB0cnkge1xuICAgIHJldHVybiBydWxlLnJldGFpbkJvdW5kYXJ5KHBhdXNlRGF0YSk7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBTQ09QRV9QTEFDRUhPTERFUjtcbiAgfVxufVxuIl19
@@ -92,7 +92,7 @@ class EventLog {
92
92
  /**
93
93
  * Persists a commit bundle for a finished stage, and FREEZES it (see the module doc): the bundle
94
94
  * is stamped with its position, then deep-frozen, then appended. The engine hands it a bundle
95
- * built for the log alone; a caller of this class (`footprintjs/advanced`) hands over a bundle it
95
+ * built for the log alone; a caller of this class (`footprintjs/write`) hands over a bundle it
96
96
  * will no longer edit — its own object is the one frozen.
97
97
  */
98
98
  record(bundle) {
@@ -149,4 +149,4 @@ class EventLog {
149
149
  }
150
150
  }
151
151
  exports.EventLog = EventLog;
152
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRXZlbnRMb2cuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL21lbW9yeS9FdmVudExvZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBMEJHOzs7QUFFSCxvREFBaUU7QUFHakUseUNBQWlEO0FBRWpELE1BQWEsUUFBUTtJQUNuQiw2REFBNkQ7SUFDckQsSUFBSSxDQUFNO0lBQ2xCLHNDQUFzQztJQUM5QixLQUFLLEdBQW1CLEVBQUUsQ0FBQztJQUMzQixhQUFhLENBQWM7SUFDM0Isb0JBQW9CLEdBQUcsS0FBSyxDQUFDO0lBRXJDLFlBQVksYUFBa0I7UUFDNUIsdUVBQXVFO1FBQ3ZFLHNFQUFzRTtRQUN0RSxzRUFBc0U7UUFDdEUsK0NBQStDO1FBQy9DLElBQUksQ0FBQyxJQUFJLEdBQUcsYUFBYSxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDaEYsQ0FBQztJQUVEOzs7Ozs7Ozs7Ozs7T0FZRztJQUNILGVBQWU7UUFDYixPQUFPLGVBQWUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDcEMsQ0FBQztJQUVEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztPQW9CRztJQUNILFdBQVcsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNO1FBQ3JDLE1BQU0sR0FBRyxHQUFHLGVBQWUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDdkMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE9BQU8sRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQ2pDLE1BQU0sRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDcEQsSUFBQSw4QkFBbUIsRUFBQyxHQUFHLEVBQUUsT0FBc0IsRUFBRSxTQUF3QixFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ3BGLENBQUM7UUFDRCxPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILE1BQU0sQ0FBQyxNQUFvQjtRQUN6QixNQUFNLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDO1FBQy9CLElBQUEsd0JBQVksRUFBQyxNQUFNLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFDaEMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDMUIsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxJQUFJO1FBQ0YsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyx1QkFBVyxDQUFDLENBQUM7SUFDckMsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILFFBQVE7UUFDTixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDNUIsQ0FBQztJQUVELGtDQUFrQztJQUNsQyxJQUFJLE1BQU07UUFDUixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDO0lBQzNCLENBQUM7SUFFRCx3RUFBd0U7SUFDeEUsSUFBSSxPQUFPO1FBQ1QsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDO0lBQzVCLENBQUM7SUFFRCx3RkFBd0Y7SUFDeEYsV0FBVyxDQUFDLFFBQWdCLEVBQUUsU0FBNEI7UUFDeEQsSUFBSSxJQUFJLENBQUMsb0JBQW9CO1lBQUUsT0FBTztRQUN0QyxJQUFJLENBQUMsYUFBYSxLQUFLLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQy9GLENBQUM7SUFFRCwrRkFBK0Y7SUFDL0YsZUFBZSxDQUFDLEtBQWE7UUFDM0IsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhO1lBQUUsT0FBTyxTQUFTLENBQUM7UUFDMUMsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsS0FBSyxFQUFFLEdBQUcsSUFBSSxDQUFDLGFBQWEsRUFBRSxtQkFBbUIsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3JHLENBQUM7SUFFRCw4Q0FBOEM7SUFDOUMsS0FBSztRQUNILElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDO1FBQ2hCLHdFQUF3RTtRQUN4RSxzRUFBc0U7UUFDdEUsdUVBQXVFO1FBQ3ZFLElBQUksQ0FBQyxhQUFhLEdBQUcsU0FBUyxDQUFDO1FBQy9CLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxJQUFJLENBQUM7SUFDbkMsQ0FBQztDQUNGO0FBOUhELDRCQThIQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogRXZlbnRMb2cg4oCUIFRpbWUtdHJhdmVsIHNuYXBzaG90IHN0b3JhZ2UgZm9yIGZsb3djaGFydCBleGVjdXRpb25cbiAqXG4gKiBMaWtlIGdpdCBoaXN0b3J5OiBzdG9yZXMgY29tbWl0IGJ1bmRsZXMgKGRpZmZzKSwgbm90IGZ1bGwgc25hcHNob3RzLlxuICpcbiAqIFRIRSBSRUNPUkQgSVMgSU1NVVRBQkxFIEZST00gYHJlY29yZGAgKEYzLCBydWxpbmcgUjMpLiBFdmVyeSBidW5kbGUgaXMgZGVlcC1mcm96ZW4gYXMgaXQgaXNcbiAqIHJlY29yZGVkIOKAlCB0aGUgYnVuZGxlLCBgb3ZlcndyaXRlYCBhbmQgYHVwZGF0ZXNgIGF0IGV2ZXJ5IGRlcHRoLCB0aGUgdHJhY2UgYW5kIGVhY2ggcm93LCB0aGVcbiAqIHJvdydzIGByZWFkS2V5c2AsIGByZWRhY3RlZFBhdGhzYCwgYHRhZ3NgLCBgdW50cmFja2VkU291cmNlc2Ag4oCUIHNvIGEgaG9sZGVyIG9mIGEgc25hcHNob3QgY2FuIG5vXG4gKiBsb25nZXIgcmV3cml0ZSB0aGUgaGlzdG9yeSBldmVyeSBsYXRlciBhbnN3ZXIgaXMgZm9sZGVkIGZyb206IGFuIGFzc2lnbm1lbnQgaW50byBhIGJ1bmRsZSB0aHJvd3NcbiAqIGEgYFR5cGVFcnJvcmAgaW4gc3RyaWN0IGNvZGUuIFNhZmUgYmVjYXVzZSBub3RoaW5nIG91dHNpZGUgdGhlIGxvZyBob2xkcyBhIGJ1bmRsZSdzIGNvbnRhaW5lcnM6XG4gKiB0aGUgbG9nJ3MgcGF5bG9hZCBpcyB0aGUgY29tbWl0J3Mgb3duIGNvcHkgKGByZWNvcmRDb21taXRgIGhhbmRzIGl0IHRoZSBvdXRwdXQgb2ZcbiAqIGBzY3J1YlBhdGNoYCksIGFuZCBsaXZlIHN0YXRlLCB0aGUgcmVkYWN0ZWQgbWlycm9yIGFuZCB3cml0ZSByZXRlbnRpb24gZWFjaCB0YWtlIHRoZWlyIG93biBjb3B5XG4gKiAoYHZlcmJzLnRzIMK3IGZvbGRSb3dzYCBkZXRhY2hlcywgYFN0YWdlQ29udGV4dCDCtyByZXRhaW5lZEZvcm1gIGNsb25lcykg4oCUIHBpbm5lZCBieVxuICogdGVzdC9saWIvbWVtb3J5L3Byb3BlcnR5L3JlY29yZC1yZWFjaGFiaWxpdHkucHJvcGVydHkudGVzdC50cy5cbiAqXG4gKiBXaGF0IGBPYmplY3QuZnJlZXplYCBjYW5ub3Qgc2VhbCDigJQgYSBEYXRlJ3MgdGltZSwgYSBNYXAncyBvciBTZXQncyBlbnRyaWVzLCBhIGJ1ZmZlcidzIGJ5dGVzLCBhXG4gKiBSZWdFeHAsIGFuIEVycm9yJ3Mgc3RhY2sg4oCUIGlzIG5ldmVyIGhhbmRlZCBvdXQgdG8gYSByZWFkZXIgKDkuNDQuMik6IGByZWNvcmRgIHJlbWVtYmVycyB0aGF0IGFcbiAqIGJ1bmRsZSBob2xkcyBzdWNoIGEgdmFsdWUgKGBjYXB0dXJlL2ZyZWV6ZS50cyDCtyBmcmVlemVSZWNvcmRgKSwgYW5kIGBsaXN0KClgIOKAlCBsaWtlIHRoZSBwdWJsaWNcbiAqIHNuYXBzaG90LCBgcnVubmVyL3NuYXBzaG90LnRzIMK3IHNlcnZlZFNuYXBzaG90YCDigJQgc2VydmVzIHRoYXQgYnVuZGxlIGFzIGEgY29weSBvZiBpdHMgb3BlbiBwYXRoc1xuICogKGBzZXJ2ZVJlY29yZGAsIG1hcHBlZCBhdCBpdHMgZmlyc3Qgc2VydmUpOiBmcmVzaCBmcm96ZW4gY29udGFpbmVycyBkb3duIHRvIGVhY2ggc3VjaCB2YWx1ZSwgYVxuICogZnJlc2ggY29weSBvZiBpdCwgZXZlcnkgb3RoZXIgcGFydCB0aGUgbG9nJ3Mgb3duLiBBIHJlYWRlciBlZGl0cyBvbmx5IGl0cyBvd24gY29weTsgZXZlcnkgbGF0ZXJcbiAqIHNlcnZlIHJlYWRzIHRoZSByZWNvcmQgYXMgcmVjb3JkZWQuIGByZWNvcmRlZCgpYCBpcyB0aGUgZW5naW5lJ3Mgb3duLCB1bnNlcnZlZCByZWFkLiBOYW1lZCBob2xlczogYW4gb2JqZWN0IGh1bmcgb24gYW4gYXJyYXkgRVhQQU5ETyAoYXJyYXlzIGFyZSB3YWxrZWRcbiAqIGJ5IGluZGV4IOKAlCB0aGUgYCdpbmRpY2VzJ2Agd2Fsaywgd2hpY2gga2VlcHMgdGhlIGZyZWV6ZSBpbnNpZGUgaXRzIGJ1ZGdldDsgYW4gZXhwYW5kbyBpcyBvdXQgb2ZcbiAqIGNvbnRyYWN0IGZvciBzdGF0ZSkgYW5kIGEgYFNoYXJlZEFycmF5QnVmZmVyYCAoZXZlcnkgY29weSBzaGFyZXMgaXRzIG1lbW9yeSkuIEEgZnJvemVuIFJlZ0V4cCdzXG4gKiBgbGFzdEluZGV4YCBpcyByZWFkLW9ubHksIHNvIGEgYC9nYCBvciBgL3lgIHJlZ2V4IHJlYWQgZnJvbSBhIGJ1bmRsZSB0aHJvd3Mgd2hlbiBgZXhlY2Agb3JcbiAqIGByZXBsYWNlYCBhZHZhbmNlIGl0LlxuICovXG5cbmltcG9ydCB7IGZyZWV6ZVJlY29yZCwgc2VydmVSZWNvcmQgfSBmcm9tICcuLi9jYXB0dXJlL2ZyZWV6ZS5qcyc7XG5pbXBvcnQgdHlwZSB7IEVtaXRTb3VyY2VQb3NpdGlvbiwgTG9nQWRkcmVzcyB9IGZyb20gJy4vZXZlbnRQb3NpdGlvbi5qcyc7XG5pbXBvcnQgdHlwZSB7IENvbW1pdEJ1bmRsZSwgTWVtb3J5UGF0Y2ggfSBmcm9tICcuL3R5cGVzLmpzJztcbmltcG9ydCB7IGFwcGx5U21hcnRNZXJnZUludG8gfSBmcm9tICcuL3V0aWxzLmpzJztcblxuZXhwb3J0IGNsYXNzIEV2ZW50TG9nIHtcbiAgLyoqIEJhc2Ugc25hcHNob3QgQkVGT1JFIHRoZSBmaXJzdCBzdGFnZSBtdXRhdGVzIGFueXRoaW5nLiAqL1xuICBwcml2YXRlIGJhc2U6IGFueTtcbiAgLyoqIE9yZGVyZWQgbGlzdCBvZiBjb21taXQgYnVuZGxlcy4gKi9cbiAgcHJpdmF0ZSBzdGVwczogQ29tbWl0QnVuZGxlW10gPSBbXTtcbiAgcHJpdmF0ZSBzb3VyY2VBZGRyZXNzPzogTG9nQWRkcmVzcztcbiAgcHJpdmF0ZSBzb3VyY2VBZGRyZXNzUmV0aXJlZCA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKGluaXRpYWxNZW1vcnk6IGFueSkge1xuICAgIC8vIE5vcm1hbGlzZWQgdG8gYW4gb2JqZWN0OiB0aGUgYmFzZSBpcyBhIFNUQVRFLCBhbmQgZXZlcnkgZm9sZCBvdmVyIGl0XG4gICAgLy8gKGBtYXRlcmlhbGlzZWAsIGBzdGF0ZUF0YCkgYXBwbGllcyBwYXRoIHdyaXRlcyB0byBpdC4gYHVuZGVmaW5lZGAg4oCUXG4gICAgLy8gd2hhdCBhIHJ1biB3aXRoIG5vIGBpbml0aWFsQ29udGV4dGAgdXNlZCB0byBzdG9yZSBoZXJlIOKAlCBtYWRlIGV2ZXJ5XG4gICAgLy8gb25lIG9mIHRob3NlIGZvbGRzIHRocm93IG9uIHRoZSBmaXJzdCBgc2V0YC5cbiAgICB0aGlzLmJhc2UgPSBpbml0aWFsTWVtb3J5ID09PSB1bmRlZmluZWQgPyB7fSA6IHN0cnVjdHVyZWRDbG9uZShpbml0aWFsTWVtb3J5KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgZm9sZCBCQVNFIOKAlCB0aGUgc3RhdGUgYXMgaXQgc3Rvb2QgYmVmb3JlIHRoZSBmaXJzdCBjb21taXQuXG4gICAqXG4gICAqIFRoaXMgaXMgdGhlIG90aGVyIGhhbGYgb2YgdGhlIGNvbW1pdCBsb2c6IGJ1bmRsZXMgYXJlIERJRkZTLCBzbyBhIGxvZ1xuICAgKiBhbG9uZSBjYW5ub3QgcmVjb25zdHJ1Y3Qgc3RhdGUgdGhhdCB3YXMgc2VlZGVkIGJlZm9yZSB0aGUgcnVuIChhblxuICAgKiBleGVjdXRvciBgaW5pdGlhbENvbnRleHRgLCBgZGVmYXVsdFZhbHVlc0ZvckNvbnRleHRgLCBhIHJlc3VtZSdzXG4gICAqIGBjaGVja3BvaW50LnNoYXJlZFN0YXRlYCwgYSBzdWJmbG93J3MgYGlucHV0TWFwcGVyYCBzZWVkKS4gVHJhdmVsbGluZ1xuICAgKiB3aXRoIHRoZSBsb2cg4oCUIGBSdW50aW1lU25hcHNob3QuaW5pdGlhbFN0YXRlYCDigJQgaXMgd2hhdCBsZXRzIGFuIE9GRkxJTkVcbiAgICogY29uc3VtZXIgZm9sZDsgd2l0aG91dCBpdCB0aGUgaG9uZXN0IGFuc3dlciBpcyBhIHBhcnRpYWwgb25lXG4gICAqIChgc3RhdGVBdGAncyBgYmFzaXM6ICdsb2ctb25seSdgKS5cbiAgICpcbiAgICogUmV0dXJucyBhIGZyZXNoIGRldGFjaGVkIGNsb25lIG9uIGV2ZXJ5IGNhbGwg4oCUIHRoZSBjYWxsZXIgb3ducyBpdC5cbiAgICovXG4gIGdldEluaXRpYWxTdGF0ZSgpOiBhbnkge1xuICAgIHJldHVybiBzdHJ1Y3R1cmVkQ2xvbmUodGhpcy5iYXNlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWNvbnN0cnVjdHMgdGhlIGZ1bGwgc3RhdGUgYXQgYW55IGdpdmVuIHN0ZXAuXG4gICAqIFJlcGxheXMgY29tbWl0cyBmcm9tIHRoZSBiZWdpbm5pbmcg4oCUIE8obikgYnV0IGxvdyBtZW1vcnkgZm9vdHByaW50LlxuICAgKlxuICAgKiBJTkRFWCBDT05WRU5USU9OIOKAlCBgc3RlcElkeGAgaXMgRVhDTFVTSVZFOiBgbWF0ZXJpYWxpc2UoMylgIGZvbGRzIGNvbW1pdHNcbiAgICogMCwgMSBhbmQgMi4gYHN0YXRlQXQoc291cmNlLCBjb21taXRJZHgpYCAoZm9vdHByaW50anMvdHJhY2UpIGZvbGRzIHRoZVxuICAgKiBzYW1lIGxvZyBidXQgaXRzIGBjb21taXRJZHhgIGlzIElOQ0xVU0lWRSwgYmVjYXVzZSBhIHJlYWRlcidzIGN1cnNvciBhc2tzXG4gICAqIFwidGhlIHN0YXRlIEFUIHRoaXMgc3RvcFwiLCB3aGljaCBtdXN0IGluY2x1ZGUgdGhhdCBzdG9wJ3Mgb3duIGNvbW1pdC4gVHdvXG4gICAqIGZvbGRzIG92ZXIgb25lIGxvZyB3aXRoIG9wcG9zaXRlIGNvbnZlbnRpb25zOiBjaGVjayB3aGljaCBvbmUgeW91IGhvbGQuXG4gICAqXG4gICAqIE9uZSBjbG9uZSBvZiB0aGUgYmFzZSBwZXIgY2FsbCwgdGhlbiBldmVyeSBidW5kbGUgcmVwbGF5ZWQgSU5UTyB0aGF0XG4gICAqIHByaXZhdGUgY29weSAoYGFwcGx5U21hcnRNZXJnZUludG9gIOKAlCB0aGUgbGl2ZSBjb21taXQncyBjb3B5LW9uLXdyaXRlIGxhd1xuICAgKiBiZWxvdyB0aGUgcm9vdCwgOS4yOS4wLCBzbyB0aGUgZm9sZCBhbmQgdGhlIGxpdmUgc3RhdGUgYWdyZWUgYXQgZXZlcnlcbiAgICogcGF0aCkuIFRoZSByZXN1bHQgaXMgdGhlIGNhbGxlcidzOiBpdCBzaGFyZXMgbm90aGluZyB3aXRoIHRoZSBiYXNlIG9yXG4gICAqIHRoZSBsb2cuXG4gICAqXG4gICAqIEBkZXByZWNhdGVkIFNpbmNlIDkuMzMuMCDigJQgdXNlIGBzdGF0ZUF0YCBmcm9tIGBmb290cHJpbnRqcy90cmFjZWAsIHdoaWNoIGZvbGRzIHRoZSBzYW1lIGxvZ1xuICAgKiBmcm9tIHRoZSBzYW1lIGJhc2UgKGBSdW50aW1lU25hcHNob3QuaW5pdGlhbFN0YXRlYCkgYW5kIHNheXMgaG93IGl0IHdhcyBkZXJpdmVkIChgYmFzaXNgKS5cbiAgICogTm90aGluZyBpbiB0aGUgbGlicmFyeSBjYWxscyB0aGlzOyBpdCBzdGF5cyBmb3Igb25lIG1pbm9yIGFuZCBpcyB0aGVuIHJlbW92ZWQuIE1pbmQgdGhlXG4gICAqIGluZGV4OiBgbWF0ZXJpYWxpc2UobilgIGZvbGRzIGNvbW1pdHMgYDAuLm4tMWAsIGBzdGF0ZUF0KHNvdXJjZSwgbiAtIDEpYCB0aGUgc2FtZSBjb21taXRzLlxuICAgKi9cbiAgbWF0ZXJpYWxpc2Uoc3RlcElkeCA9IHRoaXMuc3RlcHMubGVuZ3RoKTogYW55IHtcbiAgICBjb25zdCBvdXQgPSBzdHJ1Y3R1cmVkQ2xvbmUodGhpcy5iYXNlKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHN0ZXBJZHg7IGkrKykge1xuICAgICAgY29uc3QgeyBvdmVyd3JpdGUsIHVwZGF0ZXMsIHRyYWNlIH0gPSB0aGlzLnN0ZXBzW2ldO1xuICAgICAgYXBwbHlTbWFydE1lcmdlSW50byhvdXQsIHVwZGF0ZXMgYXMgTWVtb3J5UGF0Y2gsIG92ZXJ3cml0ZSBhcyBNZW1vcnlQYXRjaCwgdHJhY2UpO1xuICAgIH1cbiAgICByZXR1cm4gb3V0O1xuICB9XG5cbiAgLyoqXG4gICAqIFBlcnNpc3RzIGEgY29tbWl0IGJ1bmRsZSBmb3IgYSBmaW5pc2hlZCBzdGFnZSwgYW5kIEZSRUVaRVMgaXQgKHNlZSB0aGUgbW9kdWxlIGRvYyk6IHRoZSBidW5kbGVcbiAgICogaXMgc3RhbXBlZCB3aXRoIGl0cyBwb3NpdGlvbiwgdGhlbiBkZWVwLWZyb3plbiwgdGhlbiBhcHBlbmRlZC4gVGhlIGVuZ2luZSBoYW5kcyBpdCBhIGJ1bmRsZVxuICAgKiBidWlsdCBmb3IgdGhlIGxvZyBhbG9uZTsgYSBjYWxsZXIgb2YgdGhpcyBjbGFzcyAoYGZvb3RwcmludGpzL2FkdmFuY2VkYCkgaGFuZHMgb3ZlciBhIGJ1bmRsZSBpdFxuICAgKiB3aWxsIG5vIGxvbmdlciBlZGl0IOKAlCBpdHMgb3duIG9iamVjdCBpcyB0aGUgb25lIGZyb3plbi5cbiAgICovXG4gIHJlY29yZChidW5kbGU6IENvbW1pdEJ1bmRsZSk6IHZvaWQge1xuICAgIGJ1bmRsZS5pZHggPSB0aGlzLnN0ZXBzLmxlbmd0aDtcbiAgICBmcmVlemVSZWNvcmQoYnVuZGxlLCAnaW5kaWNlcycpO1xuICAgIHRoaXMuc3RlcHMucHVzaChidW5kbGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEV2ZXJ5IHJlY29yZGVkIGNvbW1pdCBidW5kbGUsIEFTIFNFUlZFRCAoOS40NC4yKTogYSBuZXcgYXJyYXkgZWFjaCBjYWxsOyBhIGJ1bmRsZSBmcmVlemluZyBzZWFsZWRcbiAgICogd2hvbGUgaXMgdGhlIGxvZydzIG93biAoZnJvemVuKSBvYmplY3QsIG9uZSBob2xkaW5nIGEgRGF0ZSwgTWFwLCBidWZmZXIg4oCmIGlzIGEgY29weSBvZiBpdHMgb3BlblxuICAgKiBwYXRocyAoYGNhcHR1cmUvZnJlZXplLnRzIMK3IHNlcnZlUmVjb3JkYCkg4oCUIHRoZSByZWFkZXIncyBvd24sIHNvIG5vIGVkaXQgcmVhY2hlcyB0aGUgbG9nLlxuICAgKi9cbiAgbGlzdCgpOiBDb21taXRCdW5kbGVbXSB7XG4gICAgcmV0dXJuIHRoaXMuc3RlcHMubWFwKHNlcnZlUmVjb3JkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAaW50ZXJuYWwgVGhlIGJ1bmRsZXMgYXMgdGhlIGxvZyBob2xkcyB0aGVtIOKAlCBlYWNoIGZyb3plbiwgTk9UIHNlcnZlZCDigJQgaW4gYSBuZXcgYXJyYXksIHNvIGEgaG9sZGVyJ3NcbiAgICogYHNwbGljZWAgcmVhY2hlcyBvbmx5IGl0cyBvd24uIEZvciB0aGUgZW5naW5lJ3Mgb3duIHNuYXBzaG90IChgRXhlY3V0aW9uUnVudGltZSDCtyBnZXRTbmFwc2hvdGAsIHdoaWNoXG4gICAqIGEgc3ViZmxvdyBtb3VudCB0YWtlcyBvbmNlIHBlciBtb3VudCksIHNvIHRoZSBydW4gc2VydmVzIG5vdGhpbmc7IGEgcmVhZGVyIGlzIHNlcnZlZCBieSBgbGlzdCgpYCBhbmRcbiAgICogYGdldFNuYXBzaG90KCkuY29tbWl0TG9nYC4gQSBrbm93biBvcGVuIGRvb3IgKENIQU5HRUxPRyA5LjQ0LjIpOiBhIGhvbGRlciBvZiB0aGVzZSBidW5kbGVzIGNhbiBzdGlsbFxuICAgKiBlZGl0IGEgRGF0ZSwgTWFwIG9yIGJ1ZmZlciBpbnNpZGUgdGhlbS5cbiAgICovXG4gIHJlY29yZGVkKCk6IENvbW1pdEJ1bmRsZVtdIHtcbiAgICByZXR1cm4gdGhpcy5zdGVwcy5zbGljZSgpO1xuICB9XG5cbiAgLyoqIE51bWJlciBvZiByZWNvcmRlZCBjb21taXRzLiAqL1xuICBnZXQgbGVuZ3RoKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuc3RlcHMubGVuZ3RoO1xuICB9XG5cbiAgLyoqIEltbXV0YWJsZSBpZGVudGl0eSBvZiB0aGlzIGxvZywgYWJzZW50IHVudGlsIHRoZSBlbmdpbmUgYmluZHMgaXQuICovXG4gIGdldCBhZGRyZXNzKCk6IExvZ0FkZHJlc3MgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLnNvdXJjZUFkZHJlc3M7XG4gIH1cblxuICAvKiogQGludGVybmFsIEJpbmQgb25jZTsgcmVzdW1pbmcgdGhlIHNhbWUgbG9nIG11c3Qgbm90IHJlbmFtZSBpdHMgZWFybGllciBwb3NpdGlvbnMuICovXG4gIGJpbmRBZGRyZXNzKGxvZ1J1bklkOiBzdHJpbmcsIGRyaWxsUGF0aDogcmVhZG9ubHkgc3RyaW5nW10pOiB2b2lkIHtcbiAgICBpZiAodGhpcy5zb3VyY2VBZGRyZXNzUmV0aXJlZCkgcmV0dXJuO1xuICAgIHRoaXMuc291cmNlQWRkcmVzcyA/Pz0gT2JqZWN0LmZyZWV6ZSh7IGxvZ1J1bklkLCBkcmlsbFBhdGg6IE9iamVjdC5mcmVlemUoWy4uLmRyaWxsUGF0aF0pIH0pO1xuICB9XG5cbiAgLyoqIE8oMSkgc291cmNlLXRpbWUgY2FwdHVyZS4gTm8gY291bnRlciwgb2JzZXJ2ZXIgYm9va2tlZXBpbmcsIG9yIGZ1dHVyZSBjb21taXQgcHJlZGljdGlvbi4gKi9cbiAgY2FwdHVyZVBvc2l0aW9uKHJ1bklkOiBzdHJpbmcpOiBFbWl0U291cmNlUG9zaXRpb24gfCB1bmRlZmluZWQge1xuICAgIGlmICghdGhpcy5zb3VyY2VBZGRyZXNzKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIHJldHVybiBPYmplY3QuZnJlZXplKHsgcnVuSWQsIC4uLnRoaXMuc291cmNlQWRkcmVzcywgY29tbWl0dGVkVGhyb3VnaElkeDogdGhpcy5zdGVwcy5sZW5ndGggLSAxIH0pO1xuICB9XG5cbiAgLyoqIFdpcGVzIGhpc3RvcnkgKHVzZWZ1bCBmb3IgdGVzdCByZXNldHMpLiAqL1xuICBjbGVhcigpOiB2b2lkIHtcbiAgICB0aGlzLnN0ZXBzID0gW107XG4gICAgLy8gQSByZXNldCBwcmVmaXggY2Fubm90IHJldXNlIG9sZCBjb29yZGluYXRlcywgZXZlbiBpZiBhbm90aGVyIHN0YWdlIG9mXG4gICAgLy8gdGhlIFNBTUUgbGVnIGJpbmRzIGl0IGFnYWluLiBLZWVwIGNsZWFyJ3MgZGF0YSBiZWhhdmlvciwgYnV0IHJldGlyZVxuICAgIC8vIGFkZHJlc3NpbmcgZm9yIHRoaXMgbG9nOyBrbm93biBjb29yZGluYXRlcyByZXF1aXJlIGEgZnJlc2ggRXZlbnRMb2cuXG4gICAgdGhpcy5zb3VyY2VBZGRyZXNzID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuc291cmNlQWRkcmVzc1JldGlyZWQgPSB0cnVlO1xuICB9XG59XG4iXX0=
152
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRXZlbnRMb2cuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL21lbW9yeS9FdmVudExvZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBMEJHOzs7QUFFSCxvREFBaUU7QUFHakUseUNBQWlEO0FBRWpELE1BQWEsUUFBUTtJQUNuQiw2REFBNkQ7SUFDckQsSUFBSSxDQUFNO0lBQ2xCLHNDQUFzQztJQUM5QixLQUFLLEdBQW1CLEVBQUUsQ0FBQztJQUMzQixhQUFhLENBQWM7SUFDM0Isb0JBQW9CLEdBQUcsS0FBSyxDQUFDO0lBRXJDLFlBQVksYUFBa0I7UUFDNUIsdUVBQXVFO1FBQ3ZFLHNFQUFzRTtRQUN0RSxzRUFBc0U7UUFDdEUsK0NBQStDO1FBQy9DLElBQUksQ0FBQyxJQUFJLEdBQUcsYUFBYSxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDaEYsQ0FBQztJQUVEOzs7Ozs7Ozs7Ozs7T0FZRztJQUNILGVBQWU7UUFDYixPQUFPLGVBQWUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDcEMsQ0FBQztJQUVEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztPQW9CRztJQUNILFdBQVcsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNO1FBQ3JDLE1BQU0sR0FBRyxHQUFHLGVBQWUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDdkMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE9BQU8sRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQ2pDLE1BQU0sRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDcEQsSUFBQSw4QkFBbUIsRUFBQyxHQUFHLEVBQUUsT0FBc0IsRUFBRSxTQUF3QixFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ3BGLENBQUM7UUFDRCxPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILE1BQU0sQ0FBQyxNQUFvQjtRQUN6QixNQUFNLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDO1FBQy9CLElBQUEsd0JBQVksRUFBQyxNQUFNLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFDaEMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDMUIsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxJQUFJO1FBQ0YsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyx1QkFBVyxDQUFDLENBQUM7SUFDckMsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILFFBQVE7UUFDTixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDNUIsQ0FBQztJQUVELGtDQUFrQztJQUNsQyxJQUFJLE1BQU07UUFDUixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDO0lBQzNCLENBQUM7SUFFRCx3RUFBd0U7SUFDeEUsSUFBSSxPQUFPO1FBQ1QsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDO0lBQzVCLENBQUM7SUFFRCx3RkFBd0Y7SUFDeEYsV0FBVyxDQUFDLFFBQWdCLEVBQUUsU0FBNEI7UUFDeEQsSUFBSSxJQUFJLENBQUMsb0JBQW9CO1lBQUUsT0FBTztRQUN0QyxJQUFJLENBQUMsYUFBYSxLQUFLLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQy9GLENBQUM7SUFFRCwrRkFBK0Y7SUFDL0YsZUFBZSxDQUFDLEtBQWE7UUFDM0IsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhO1lBQUUsT0FBTyxTQUFTLENBQUM7UUFDMUMsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsS0FBSyxFQUFFLEdBQUcsSUFBSSxDQUFDLGFBQWEsRUFBRSxtQkFBbUIsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3JHLENBQUM7SUFFRCw4Q0FBOEM7SUFDOUMsS0FBSztRQUNILElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDO1FBQ2hCLHdFQUF3RTtRQUN4RSxzRUFBc0U7UUFDdEUsdUVBQXVFO1FBQ3ZFLElBQUksQ0FBQyxhQUFhLEdBQUcsU0FBUyxDQUFDO1FBQy9CLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxJQUFJLENBQUM7SUFDbkMsQ0FBQztDQUNGO0FBOUhELDRCQThIQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogRXZlbnRMb2cg4oCUIFRpbWUtdHJhdmVsIHNuYXBzaG90IHN0b3JhZ2UgZm9yIGZsb3djaGFydCBleGVjdXRpb25cbiAqXG4gKiBMaWtlIGdpdCBoaXN0b3J5OiBzdG9yZXMgY29tbWl0IGJ1bmRsZXMgKGRpZmZzKSwgbm90IGZ1bGwgc25hcHNob3RzLlxuICpcbiAqIFRIRSBSRUNPUkQgSVMgSU1NVVRBQkxFIEZST00gYHJlY29yZGAgKEYzLCBydWxpbmcgUjMpLiBFdmVyeSBidW5kbGUgaXMgZGVlcC1mcm96ZW4gYXMgaXQgaXNcbiAqIHJlY29yZGVkIOKAlCB0aGUgYnVuZGxlLCBgb3ZlcndyaXRlYCBhbmQgYHVwZGF0ZXNgIGF0IGV2ZXJ5IGRlcHRoLCB0aGUgdHJhY2UgYW5kIGVhY2ggcm93LCB0aGVcbiAqIHJvdydzIGByZWFkS2V5c2AsIGByZWRhY3RlZFBhdGhzYCwgYHRhZ3NgLCBgdW50cmFja2VkU291cmNlc2Ag4oCUIHNvIGEgaG9sZGVyIG9mIGEgc25hcHNob3QgY2FuIG5vXG4gKiBsb25nZXIgcmV3cml0ZSB0aGUgaGlzdG9yeSBldmVyeSBsYXRlciBhbnN3ZXIgaXMgZm9sZGVkIGZyb206IGFuIGFzc2lnbm1lbnQgaW50byBhIGJ1bmRsZSB0aHJvd3NcbiAqIGEgYFR5cGVFcnJvcmAgaW4gc3RyaWN0IGNvZGUuIFNhZmUgYmVjYXVzZSBub3RoaW5nIG91dHNpZGUgdGhlIGxvZyBob2xkcyBhIGJ1bmRsZSdzIGNvbnRhaW5lcnM6XG4gKiB0aGUgbG9nJ3MgcGF5bG9hZCBpcyB0aGUgY29tbWl0J3Mgb3duIGNvcHkgKGByZWNvcmRDb21taXRgIGhhbmRzIGl0IHRoZSBvdXRwdXQgb2ZcbiAqIGBzY3J1YlBhdGNoYCksIGFuZCBsaXZlIHN0YXRlLCB0aGUgcmVkYWN0ZWQgbWlycm9yIGFuZCB3cml0ZSByZXRlbnRpb24gZWFjaCB0YWtlIHRoZWlyIG93biBjb3B5XG4gKiAoYHZlcmJzLnRzIMK3IGZvbGRSb3dzYCBkZXRhY2hlcywgYFN0YWdlQ29udGV4dCDCtyByZXRhaW5lZEZvcm1gIGNsb25lcykg4oCUIHBpbm5lZCBieVxuICogdGVzdC9saWIvbWVtb3J5L3Byb3BlcnR5L3JlY29yZC1yZWFjaGFiaWxpdHkucHJvcGVydHkudGVzdC50cy5cbiAqXG4gKiBXaGF0IGBPYmplY3QuZnJlZXplYCBjYW5ub3Qgc2VhbCDigJQgYSBEYXRlJ3MgdGltZSwgYSBNYXAncyBvciBTZXQncyBlbnRyaWVzLCBhIGJ1ZmZlcidzIGJ5dGVzLCBhXG4gKiBSZWdFeHAsIGFuIEVycm9yJ3Mgc3RhY2sg4oCUIGlzIG5ldmVyIGhhbmRlZCBvdXQgdG8gYSByZWFkZXIgKDkuNDQuMik6IGByZWNvcmRgIHJlbWVtYmVycyB0aGF0IGFcbiAqIGJ1bmRsZSBob2xkcyBzdWNoIGEgdmFsdWUgKGBjYXB0dXJlL2ZyZWV6ZS50cyDCtyBmcmVlemVSZWNvcmRgKSwgYW5kIGBsaXN0KClgIOKAlCBsaWtlIHRoZSBwdWJsaWNcbiAqIHNuYXBzaG90LCBgcnVubmVyL3NuYXBzaG90LnRzIMK3IHNlcnZlZFNuYXBzaG90YCDigJQgc2VydmVzIHRoYXQgYnVuZGxlIGFzIGEgY29weSBvZiBpdHMgb3BlbiBwYXRoc1xuICogKGBzZXJ2ZVJlY29yZGAsIG1hcHBlZCBhdCBpdHMgZmlyc3Qgc2VydmUpOiBmcmVzaCBmcm96ZW4gY29udGFpbmVycyBkb3duIHRvIGVhY2ggc3VjaCB2YWx1ZSwgYVxuICogZnJlc2ggY29weSBvZiBpdCwgZXZlcnkgb3RoZXIgcGFydCB0aGUgbG9nJ3Mgb3duLiBBIHJlYWRlciBlZGl0cyBvbmx5IGl0cyBvd24gY29weTsgZXZlcnkgbGF0ZXJcbiAqIHNlcnZlIHJlYWRzIHRoZSByZWNvcmQgYXMgcmVjb3JkZWQuIGByZWNvcmRlZCgpYCBpcyB0aGUgZW5naW5lJ3Mgb3duLCB1bnNlcnZlZCByZWFkLiBOYW1lZCBob2xlczogYW4gb2JqZWN0IGh1bmcgb24gYW4gYXJyYXkgRVhQQU5ETyAoYXJyYXlzIGFyZSB3YWxrZWRcbiAqIGJ5IGluZGV4IOKAlCB0aGUgYCdpbmRpY2VzJ2Agd2Fsaywgd2hpY2gga2VlcHMgdGhlIGZyZWV6ZSBpbnNpZGUgaXRzIGJ1ZGdldDsgYW4gZXhwYW5kbyBpcyBvdXQgb2ZcbiAqIGNvbnRyYWN0IGZvciBzdGF0ZSkgYW5kIGEgYFNoYXJlZEFycmF5QnVmZmVyYCAoZXZlcnkgY29weSBzaGFyZXMgaXRzIG1lbW9yeSkuIEEgZnJvemVuIFJlZ0V4cCdzXG4gKiBgbGFzdEluZGV4YCBpcyByZWFkLW9ubHksIHNvIGEgYC9nYCBvciBgL3lgIHJlZ2V4IHJlYWQgZnJvbSBhIGJ1bmRsZSB0aHJvd3Mgd2hlbiBgZXhlY2Agb3JcbiAqIGByZXBsYWNlYCBhZHZhbmNlIGl0LlxuICovXG5cbmltcG9ydCB7IGZyZWV6ZVJlY29yZCwgc2VydmVSZWNvcmQgfSBmcm9tICcuLi9jYXB0dXJlL2ZyZWV6ZS5qcyc7XG5pbXBvcnQgdHlwZSB7IEVtaXRTb3VyY2VQb3NpdGlvbiwgTG9nQWRkcmVzcyB9IGZyb20gJy4vZXZlbnRQb3NpdGlvbi5qcyc7XG5pbXBvcnQgdHlwZSB7IENvbW1pdEJ1bmRsZSwgTWVtb3J5UGF0Y2ggfSBmcm9tICcuL3R5cGVzLmpzJztcbmltcG9ydCB7IGFwcGx5U21hcnRNZXJnZUludG8gfSBmcm9tICcuL3V0aWxzLmpzJztcblxuZXhwb3J0IGNsYXNzIEV2ZW50TG9nIHtcbiAgLyoqIEJhc2Ugc25hcHNob3QgQkVGT1JFIHRoZSBmaXJzdCBzdGFnZSBtdXRhdGVzIGFueXRoaW5nLiAqL1xuICBwcml2YXRlIGJhc2U6IGFueTtcbiAgLyoqIE9yZGVyZWQgbGlzdCBvZiBjb21taXQgYnVuZGxlcy4gKi9cbiAgcHJpdmF0ZSBzdGVwczogQ29tbWl0QnVuZGxlW10gPSBbXTtcbiAgcHJpdmF0ZSBzb3VyY2VBZGRyZXNzPzogTG9nQWRkcmVzcztcbiAgcHJpdmF0ZSBzb3VyY2VBZGRyZXNzUmV0aXJlZCA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKGluaXRpYWxNZW1vcnk6IGFueSkge1xuICAgIC8vIE5vcm1hbGlzZWQgdG8gYW4gb2JqZWN0OiB0aGUgYmFzZSBpcyBhIFNUQVRFLCBhbmQgZXZlcnkgZm9sZCBvdmVyIGl0XG4gICAgLy8gKGBtYXRlcmlhbGlzZWAsIGBzdGF0ZUF0YCkgYXBwbGllcyBwYXRoIHdyaXRlcyB0byBpdC4gYHVuZGVmaW5lZGAg4oCUXG4gICAgLy8gd2hhdCBhIHJ1biB3aXRoIG5vIGBpbml0aWFsQ29udGV4dGAgdXNlZCB0byBzdG9yZSBoZXJlIOKAlCBtYWRlIGV2ZXJ5XG4gICAgLy8gb25lIG9mIHRob3NlIGZvbGRzIHRocm93IG9uIHRoZSBmaXJzdCBgc2V0YC5cbiAgICB0aGlzLmJhc2UgPSBpbml0aWFsTWVtb3J5ID09PSB1bmRlZmluZWQgPyB7fSA6IHN0cnVjdHVyZWRDbG9uZShpbml0aWFsTWVtb3J5KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgZm9sZCBCQVNFIOKAlCB0aGUgc3RhdGUgYXMgaXQgc3Rvb2QgYmVmb3JlIHRoZSBmaXJzdCBjb21taXQuXG4gICAqXG4gICAqIFRoaXMgaXMgdGhlIG90aGVyIGhhbGYgb2YgdGhlIGNvbW1pdCBsb2c6IGJ1bmRsZXMgYXJlIERJRkZTLCBzbyBhIGxvZ1xuICAgKiBhbG9uZSBjYW5ub3QgcmVjb25zdHJ1Y3Qgc3RhdGUgdGhhdCB3YXMgc2VlZGVkIGJlZm9yZSB0aGUgcnVuIChhblxuICAgKiBleGVjdXRvciBgaW5pdGlhbENvbnRleHRgLCBgZGVmYXVsdFZhbHVlc0ZvckNvbnRleHRgLCBhIHJlc3VtZSdzXG4gICAqIGBjaGVja3BvaW50LnNoYXJlZFN0YXRlYCwgYSBzdWJmbG93J3MgYGlucHV0TWFwcGVyYCBzZWVkKS4gVHJhdmVsbGluZ1xuICAgKiB3aXRoIHRoZSBsb2cg4oCUIGBSdW50aW1lU25hcHNob3QuaW5pdGlhbFN0YXRlYCDigJQgaXMgd2hhdCBsZXRzIGFuIE9GRkxJTkVcbiAgICogY29uc3VtZXIgZm9sZDsgd2l0aG91dCBpdCB0aGUgaG9uZXN0IGFuc3dlciBpcyBhIHBhcnRpYWwgb25lXG4gICAqIChgc3RhdGVBdGAncyBgYmFzaXM6ICdsb2ctb25seSdgKS5cbiAgICpcbiAgICogUmV0dXJucyBhIGZyZXNoIGRldGFjaGVkIGNsb25lIG9uIGV2ZXJ5IGNhbGwg4oCUIHRoZSBjYWxsZXIgb3ducyBpdC5cbiAgICovXG4gIGdldEluaXRpYWxTdGF0ZSgpOiBhbnkge1xuICAgIHJldHVybiBzdHJ1Y3R1cmVkQ2xvbmUodGhpcy5iYXNlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWNvbnN0cnVjdHMgdGhlIGZ1bGwgc3RhdGUgYXQgYW55IGdpdmVuIHN0ZXAuXG4gICAqIFJlcGxheXMgY29tbWl0cyBmcm9tIHRoZSBiZWdpbm5pbmcg4oCUIE8obikgYnV0IGxvdyBtZW1vcnkgZm9vdHByaW50LlxuICAgKlxuICAgKiBJTkRFWCBDT05WRU5USU9OIOKAlCBgc3RlcElkeGAgaXMgRVhDTFVTSVZFOiBgbWF0ZXJpYWxpc2UoMylgIGZvbGRzIGNvbW1pdHNcbiAgICogMCwgMSBhbmQgMi4gYHN0YXRlQXQoc291cmNlLCBjb21taXRJZHgpYCAoZm9vdHByaW50anMvdHJhY2UpIGZvbGRzIHRoZVxuICAgKiBzYW1lIGxvZyBidXQgaXRzIGBjb21taXRJZHhgIGlzIElOQ0xVU0lWRSwgYmVjYXVzZSBhIHJlYWRlcidzIGN1cnNvciBhc2tzXG4gICAqIFwidGhlIHN0YXRlIEFUIHRoaXMgc3RvcFwiLCB3aGljaCBtdXN0IGluY2x1ZGUgdGhhdCBzdG9wJ3Mgb3duIGNvbW1pdC4gVHdvXG4gICAqIGZvbGRzIG92ZXIgb25lIGxvZyB3aXRoIG9wcG9zaXRlIGNvbnZlbnRpb25zOiBjaGVjayB3aGljaCBvbmUgeW91IGhvbGQuXG4gICAqXG4gICAqIE9uZSBjbG9uZSBvZiB0aGUgYmFzZSBwZXIgY2FsbCwgdGhlbiBldmVyeSBidW5kbGUgcmVwbGF5ZWQgSU5UTyB0aGF0XG4gICAqIHByaXZhdGUgY29weSAoYGFwcGx5U21hcnRNZXJnZUludG9gIOKAlCB0aGUgbGl2ZSBjb21taXQncyBjb3B5LW9uLXdyaXRlIGxhd1xuICAgKiBiZWxvdyB0aGUgcm9vdCwgOS4yOS4wLCBzbyB0aGUgZm9sZCBhbmQgdGhlIGxpdmUgc3RhdGUgYWdyZWUgYXQgZXZlcnlcbiAgICogcGF0aCkuIFRoZSByZXN1bHQgaXMgdGhlIGNhbGxlcidzOiBpdCBzaGFyZXMgbm90aGluZyB3aXRoIHRoZSBiYXNlIG9yXG4gICAqIHRoZSBsb2cuXG4gICAqXG4gICAqIEBkZXByZWNhdGVkIFNpbmNlIDkuMzMuMCDigJQgdXNlIGBzdGF0ZUF0YCBmcm9tIGBmb290cHJpbnRqcy90cmFjZWAsIHdoaWNoIGZvbGRzIHRoZSBzYW1lIGxvZ1xuICAgKiBmcm9tIHRoZSBzYW1lIGJhc2UgKGBSdW50aW1lU25hcHNob3QuaW5pdGlhbFN0YXRlYCkgYW5kIHNheXMgaG93IGl0IHdhcyBkZXJpdmVkIChgYmFzaXNgKS5cbiAgICogTm90aGluZyBpbiB0aGUgbGlicmFyeSBjYWxscyB0aGlzOyBpdCBzdGF5cyBmb3Igb25lIG1pbm9yIGFuZCBpcyB0aGVuIHJlbW92ZWQuIE1pbmQgdGhlXG4gICAqIGluZGV4OiBgbWF0ZXJpYWxpc2UobilgIGZvbGRzIGNvbW1pdHMgYDAuLm4tMWAsIGBzdGF0ZUF0KHNvdXJjZSwgbiAtIDEpYCB0aGUgc2FtZSBjb21taXRzLlxuICAgKi9cbiAgbWF0ZXJpYWxpc2Uoc3RlcElkeCA9IHRoaXMuc3RlcHMubGVuZ3RoKTogYW55IHtcbiAgICBjb25zdCBvdXQgPSBzdHJ1Y3R1cmVkQ2xvbmUodGhpcy5iYXNlKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHN0ZXBJZHg7IGkrKykge1xuICAgICAgY29uc3QgeyBvdmVyd3JpdGUsIHVwZGF0ZXMsIHRyYWNlIH0gPSB0aGlzLnN0ZXBzW2ldO1xuICAgICAgYXBwbHlTbWFydE1lcmdlSW50byhvdXQsIHVwZGF0ZXMgYXMgTWVtb3J5UGF0Y2gsIG92ZXJ3cml0ZSBhcyBNZW1vcnlQYXRjaCwgdHJhY2UpO1xuICAgIH1cbiAgICByZXR1cm4gb3V0O1xuICB9XG5cbiAgLyoqXG4gICAqIFBlcnNpc3RzIGEgY29tbWl0IGJ1bmRsZSBmb3IgYSBmaW5pc2hlZCBzdGFnZSwgYW5kIEZSRUVaRVMgaXQgKHNlZSB0aGUgbW9kdWxlIGRvYyk6IHRoZSBidW5kbGVcbiAgICogaXMgc3RhbXBlZCB3aXRoIGl0cyBwb3NpdGlvbiwgdGhlbiBkZWVwLWZyb3plbiwgdGhlbiBhcHBlbmRlZC4gVGhlIGVuZ2luZSBoYW5kcyBpdCBhIGJ1bmRsZVxuICAgKiBidWlsdCBmb3IgdGhlIGxvZyBhbG9uZTsgYSBjYWxsZXIgb2YgdGhpcyBjbGFzcyAoYGZvb3RwcmludGpzL3dyaXRlYCkgaGFuZHMgb3ZlciBhIGJ1bmRsZSBpdFxuICAgKiB3aWxsIG5vIGxvbmdlciBlZGl0IOKAlCBpdHMgb3duIG9iamVjdCBpcyB0aGUgb25lIGZyb3plbi5cbiAgICovXG4gIHJlY29yZChidW5kbGU6IENvbW1pdEJ1bmRsZSk6IHZvaWQge1xuICAgIGJ1bmRsZS5pZHggPSB0aGlzLnN0ZXBzLmxlbmd0aDtcbiAgICBmcmVlemVSZWNvcmQoYnVuZGxlLCAnaW5kaWNlcycpO1xuICAgIHRoaXMuc3RlcHMucHVzaChidW5kbGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEV2ZXJ5IHJlY29yZGVkIGNvbW1pdCBidW5kbGUsIEFTIFNFUlZFRCAoOS40NC4yKTogYSBuZXcgYXJyYXkgZWFjaCBjYWxsOyBhIGJ1bmRsZSBmcmVlemluZyBzZWFsZWRcbiAgICogd2hvbGUgaXMgdGhlIGxvZydzIG93biAoZnJvemVuKSBvYmplY3QsIG9uZSBob2xkaW5nIGEgRGF0ZSwgTWFwLCBidWZmZXIg4oCmIGlzIGEgY29weSBvZiBpdHMgb3BlblxuICAgKiBwYXRocyAoYGNhcHR1cmUvZnJlZXplLnRzIMK3IHNlcnZlUmVjb3JkYCkg4oCUIHRoZSByZWFkZXIncyBvd24sIHNvIG5vIGVkaXQgcmVhY2hlcyB0aGUgbG9nLlxuICAgKi9cbiAgbGlzdCgpOiBDb21taXRCdW5kbGVbXSB7XG4gICAgcmV0dXJuIHRoaXMuc3RlcHMubWFwKHNlcnZlUmVjb3JkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAaW50ZXJuYWwgVGhlIGJ1bmRsZXMgYXMgdGhlIGxvZyBob2xkcyB0aGVtIOKAlCBlYWNoIGZyb3plbiwgTk9UIHNlcnZlZCDigJQgaW4gYSBuZXcgYXJyYXksIHNvIGEgaG9sZGVyJ3NcbiAgICogYHNwbGljZWAgcmVhY2hlcyBvbmx5IGl0cyBvd24uIEZvciB0aGUgZW5naW5lJ3Mgb3duIHNuYXBzaG90IChgRXhlY3V0aW9uUnVudGltZSDCtyBnZXRTbmFwc2hvdGAsIHdoaWNoXG4gICAqIGEgc3ViZmxvdyBtb3VudCB0YWtlcyBvbmNlIHBlciBtb3VudCksIHNvIHRoZSBydW4gc2VydmVzIG5vdGhpbmc7IGEgcmVhZGVyIGlzIHNlcnZlZCBieSBgbGlzdCgpYCBhbmRcbiAgICogYGdldFNuYXBzaG90KCkuY29tbWl0TG9nYC4gQSBrbm93biBvcGVuIGRvb3IgKENIQU5HRUxPRyA5LjQ0LjIpOiBhIGhvbGRlciBvZiB0aGVzZSBidW5kbGVzIGNhbiBzdGlsbFxuICAgKiBlZGl0IGEgRGF0ZSwgTWFwIG9yIGJ1ZmZlciBpbnNpZGUgdGhlbS5cbiAgICovXG4gIHJlY29yZGVkKCk6IENvbW1pdEJ1bmRsZVtdIHtcbiAgICByZXR1cm4gdGhpcy5zdGVwcy5zbGljZSgpO1xuICB9XG5cbiAgLyoqIE51bWJlciBvZiByZWNvcmRlZCBjb21taXRzLiAqL1xuICBnZXQgbGVuZ3RoKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuc3RlcHMubGVuZ3RoO1xuICB9XG5cbiAgLyoqIEltbXV0YWJsZSBpZGVudGl0eSBvZiB0aGlzIGxvZywgYWJzZW50IHVudGlsIHRoZSBlbmdpbmUgYmluZHMgaXQuICovXG4gIGdldCBhZGRyZXNzKCk6IExvZ0FkZHJlc3MgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLnNvdXJjZUFkZHJlc3M7XG4gIH1cblxuICAvKiogQGludGVybmFsIEJpbmQgb25jZTsgcmVzdW1pbmcgdGhlIHNhbWUgbG9nIG11c3Qgbm90IHJlbmFtZSBpdHMgZWFybGllciBwb3NpdGlvbnMuICovXG4gIGJpbmRBZGRyZXNzKGxvZ1J1bklkOiBzdHJpbmcsIGRyaWxsUGF0aDogcmVhZG9ubHkgc3RyaW5nW10pOiB2b2lkIHtcbiAgICBpZiAodGhpcy5zb3VyY2VBZGRyZXNzUmV0aXJlZCkgcmV0dXJuO1xuICAgIHRoaXMuc291cmNlQWRkcmVzcyA/Pz0gT2JqZWN0LmZyZWV6ZSh7IGxvZ1J1bklkLCBkcmlsbFBhdGg6IE9iamVjdC5mcmVlemUoWy4uLmRyaWxsUGF0aF0pIH0pO1xuICB9XG5cbiAgLyoqIE8oMSkgc291cmNlLXRpbWUgY2FwdHVyZS4gTm8gY291bnRlciwgb2JzZXJ2ZXIgYm9va2tlZXBpbmcsIG9yIGZ1dHVyZSBjb21taXQgcHJlZGljdGlvbi4gKi9cbiAgY2FwdHVyZVBvc2l0aW9uKHJ1bklkOiBzdHJpbmcpOiBFbWl0U291cmNlUG9zaXRpb24gfCB1bmRlZmluZWQge1xuICAgIGlmICghdGhpcy5zb3VyY2VBZGRyZXNzKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIHJldHVybiBPYmplY3QuZnJlZXplKHsgcnVuSWQsIC4uLnRoaXMuc291cmNlQWRkcmVzcywgY29tbWl0dGVkVGhyb3VnaElkeDogdGhpcy5zdGVwcy5sZW5ndGggLSAxIH0pO1xuICB9XG5cbiAgLyoqIFdpcGVzIGhpc3RvcnkgKHVzZWZ1bCBmb3IgdGVzdCByZXNldHMpLiAqL1xuICBjbGVhcigpOiB2b2lkIHtcbiAgICB0aGlzLnN0ZXBzID0gW107XG4gICAgLy8gQSByZXNldCBwcmVmaXggY2Fubm90IHJldXNlIG9sZCBjb29yZGluYXRlcywgZXZlbiBpZiBhbm90aGVyIHN0YWdlIG9mXG4gICAgLy8gdGhlIFNBTUUgbGVnIGJpbmRzIGl0IGFnYWluLiBLZWVwIGNsZWFyJ3MgZGF0YSBiZWhhdmlvciwgYnV0IHJldGlyZVxuICAgIC8vIGFkZHJlc3NpbmcgZm9yIHRoaXMgbG9nOyBrbm93biBjb29yZGluYXRlcyByZXF1aXJlIGEgZnJlc2ggRXZlbnRMb2cuXG4gICAgdGhpcy5zb3VyY2VBZGRyZXNzID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuc291cmNlQWRkcmVzc1JldGlyZWQgPSB0cnVlO1xuICB9XG59XG4iXX0=