@workflow/core 5.0.0-beta.35 → 5.0.0-beta.37

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 (137) hide show
  1. package/dist/capabilities.d.ts +6 -0
  2. package/dist/capabilities.d.ts.map +1 -1
  3. package/dist/capabilities.js +13 -1
  4. package/dist/classify-error.d.ts.map +1 -1
  5. package/dist/classify-error.js +5 -2
  6. package/dist/create-hook.d.ts +41 -22
  7. package/dist/create-hook.d.ts.map +1 -1
  8. package/dist/create-hook.js +1 -1
  9. package/dist/describe-error.d.ts.map +1 -1
  10. package/dist/describe-error.js +12 -1
  11. package/dist/encryption.d.ts +15 -2
  12. package/dist/encryption.d.ts.map +1 -1
  13. package/dist/encryption.js +28 -7
  14. package/dist/flushable-stream.d.ts +55 -0
  15. package/dist/flushable-stream.d.ts.map +1 -1
  16. package/dist/flushable-stream.js +106 -4
  17. package/dist/global.d.ts +2 -0
  18. package/dist/global.d.ts.map +1 -1
  19. package/dist/global.js +1 -1
  20. package/dist/index.d.ts +1 -1
  21. package/dist/index.d.ts.map +1 -1
  22. package/dist/index.js +2 -2
  23. package/dist/log-format.js +3 -3
  24. package/dist/private.d.ts +82 -50
  25. package/dist/private.d.ts.map +1 -1
  26. package/dist/private.js +149 -22
  27. package/dist/replay-payload-cache.d.ts +57 -0
  28. package/dist/replay-payload-cache.d.ts.map +1 -0
  29. package/dist/replay-payload-cache.js +143 -0
  30. package/dist/runtime/constants.d.ts +11 -0
  31. package/dist/runtime/constants.d.ts.map +1 -1
  32. package/dist/runtime/constants.js +26 -1
  33. package/dist/runtime/count-step-started-events.d.ts +52 -0
  34. package/dist/runtime/count-step-started-events.d.ts.map +1 -0
  35. package/dist/runtime/count-step-started-events.js +72 -0
  36. package/dist/runtime/get-port-lazy.js +4 -4
  37. package/dist/runtime/helpers.d.ts +47 -16
  38. package/dist/runtime/helpers.d.ts.map +1 -1
  39. package/dist/runtime/helpers.js +97 -28
  40. package/dist/runtime/resume-hook.d.ts +6 -3
  41. package/dist/runtime/resume-hook.d.ts.map +1 -1
  42. package/dist/runtime/resume-hook.js +180 -58
  43. package/dist/runtime/run.d.ts.map +1 -1
  44. package/dist/runtime/run.js +3 -3
  45. package/dist/runtime/runs.d.ts.map +1 -1
  46. package/dist/runtime/runs.js +5 -3
  47. package/dist/runtime/start.d.ts.map +1 -1
  48. package/dist/runtime/start.js +65 -18
  49. package/dist/runtime/step-executor.d.ts +48 -8
  50. package/dist/runtime/step-executor.d.ts.map +1 -1
  51. package/dist/runtime/step-executor.js +90 -20
  52. package/dist/runtime/suspension-handler.js +3 -3
  53. package/dist/runtime/world.d.ts +2 -7
  54. package/dist/runtime/world.d.ts.map +1 -1
  55. package/dist/runtime/world.js +3 -10
  56. package/dist/runtime.d.ts +1 -1
  57. package/dist/runtime.d.ts.map +1 -1
  58. package/dist/runtime.js +398 -184
  59. package/dist/sealed-box.d.ts +167 -0
  60. package/dist/sealed-box.d.ts.map +1 -0
  61. package/dist/sealed-box.js +571 -0
  62. package/dist/serialization/client.d.ts +3 -3
  63. package/dist/serialization/client.d.ts.map +1 -1
  64. package/dist/serialization/client.js +1 -1
  65. package/dist/serialization/codec.d.ts +6 -4
  66. package/dist/serialization/codec.d.ts.map +1 -1
  67. package/dist/serialization/codec.js +1 -1
  68. package/dist/serialization/encryption.d.ts +118 -17
  69. package/dist/serialization/encryption.d.ts.map +1 -1
  70. package/dist/serialization/encryption.js +131 -15
  71. package/dist/serialization/step.d.ts +4 -4
  72. package/dist/serialization/step.d.ts.map +1 -1
  73. package/dist/serialization/step.js +2 -2
  74. package/dist/serialization/types.d.ts +20 -0
  75. package/dist/serialization/types.d.ts.map +1 -1
  76. package/dist/serialization/types.js +11 -1
  77. package/dist/serialization-format.d.ts +44 -4
  78. package/dist/serialization-format.d.ts.map +1 -1
  79. package/dist/serialization-format.js +66 -9
  80. package/dist/serialization.d.ts +61 -21
  81. package/dist/serialization.d.ts.map +1 -1
  82. package/dist/serialization.js +556 -200
  83. package/dist/set-attributes.d.ts +2 -7
  84. package/dist/set-attributes.d.ts.map +1 -1
  85. package/dist/set-attributes.js +1 -6
  86. package/dist/step/context-storage.d.ts +2 -2
  87. package/dist/step/context-storage.d.ts.map +1 -1
  88. package/dist/step/context-storage.js +2 -2
  89. package/dist/step/writable-stream.d.ts.map +1 -1
  90. package/dist/step/writable-stream.js +14 -3
  91. package/dist/step.d.ts.map +1 -1
  92. package/dist/step.js +87 -22
  93. package/dist/symbols.d.ts +26 -0
  94. package/dist/symbols.d.ts.map +1 -1
  95. package/dist/symbols.js +27 -1
  96. package/dist/telemetry/semantic-conventions.d.ts +4 -4
  97. package/dist/telemetry/semantic-conventions.js +2 -2
  98. package/dist/version.d.ts +1 -1
  99. package/dist/version.js +2 -2
  100. package/dist/vm/index.d.ts.map +1 -1
  101. package/dist/vm/index.js +76 -9
  102. package/dist/workflow/abort-controller.d.ts +1 -1
  103. package/dist/workflow/abort-controller.d.ts.map +1 -1
  104. package/dist/workflow/abort-controller.js +38 -3
  105. package/dist/workflow/hook.d.ts.map +1 -1
  106. package/dist/workflow/hook.js +85 -30
  107. package/dist/workflow/index.d.ts +1 -1
  108. package/dist/workflow/index.d.ts.map +1 -1
  109. package/dist/workflow/index.js +2 -2
  110. package/dist/workflow/set-attributes.d.ts +0 -9
  111. package/dist/workflow/set-attributes.d.ts.map +1 -1
  112. package/dist/workflow/set-attributes.js +1 -6
  113. package/dist/workflow/sleep.d.ts.map +1 -1
  114. package/dist/workflow/sleep.js +21 -9
  115. package/dist/workflow.d.ts +14 -11
  116. package/dist/workflow.d.ts.map +1 -1
  117. package/dist/workflow.js +37 -92
  118. package/docs/api-reference/create-hook.mdx +43 -2
  119. package/docs/api-reference/define-hook.mdx +26 -24
  120. package/docs/api-reference/fatal-error.mdx +29 -7
  121. package/docs/api-reference/fetch.mdx +3 -4
  122. package/docs/api-reference/set-attributes.mdx +0 -4
  123. package/docs/api-reference/sleep.mdx +1 -1
  124. package/docs/foundations/hooks.mdx +1 -1
  125. package/docs/foundations/idempotency.mdx +16 -9
  126. package/docs/how-it-works/cancellation.mdx +2 -2
  127. package/docs/how-it-works/code-transform.mdx +19 -15
  128. package/docs/how-it-works/encryption.mdx +3 -3
  129. package/docs/how-it-works/event-sourcing.mdx +6 -6
  130. package/docs/how-it-works/framework-integrations.mdx +96 -342
  131. package/package.json +6 -6
  132. package/dist/runtime/step-handler.d.ts +0 -2
  133. package/dist/runtime/step-handler.d.ts.map +0 -1
  134. package/dist/runtime/step-handler.js +0 -839
  135. package/dist/step-hydration-cache.d.ts +0 -148
  136. package/dist/step-hydration-cache.d.ts.map +0 -1
  137. package/dist/step-hydration-cache.js +0 -171
@@ -1,5 +1,5 @@
1
- import type { ExperimentalSetAttributesOptions, SetAttributesOptions } from './workflow/set-attributes.js';
2
- export type { ExperimentalSetAttributesOptions, SetAttributesOptions };
1
+ import type { SetAttributesOptions } from './workflow/set-attributes.js';
2
+ export type { SetAttributesOptions };
3
3
  /**
4
4
  * Host-side implementation for `setAttributes`. Workflow bodies resolve
5
5
  * to `./workflow/set-attributes.ts` via the `workflow` package-exports
@@ -10,9 +10,4 @@ export type { ExperimentalSetAttributesOptions, SetAttributesOptions };
10
10
  * a clear `FatalError`.
11
11
  */
12
12
  export declare function setAttributes(attrs: Record<string, string | undefined>, options?: SetAttributesOptions): Promise<void>;
13
- /**
14
- * @deprecated The feature is no longer experimental — use
15
- * {@link setAttributes} instead.
16
- */
17
- export declare const experimental_setAttributes: typeof setAttributes;
18
13
  //# sourceMappingURL=set-attributes.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"set-attributes.d.ts","sourceRoot":"","sources":["../src/set-attributes.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EACV,gCAAgC,EAChC,oBAAoB,EACrB,MAAM,8BAA8B,CAAC;AAEtC,YAAY,EAAE,gCAAgC,EAAE,oBAAoB,EAAE,CAAC;AAEvE;;;;;;;;GAQG;AACH,wBAAsB,aAAa,CACjC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,EACzC,OAAO,GAAE,oBAAyB,GACjC,OAAO,CAAC,IAAI,CAAC,CA2Cf;AAED;;;GAGG;AACH,eAAO,MAAM,0BAA0B,sBAAgB,CAAC"}
1
+ {"version":3,"file":"set-attributes.d.ts","sourceRoot":"","sources":["../src/set-attributes.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AAEzE,YAAY,EAAE,oBAAoB,EAAE,CAAC;AAErC;;;;;;;;GAQG;AACH,wBAAsB,aAAa,CACjC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,EACzC,OAAO,GAAE,oBAAyB,GACjC,OAAO,CAAC,IAAI,CAAC,CA2Cf"}
@@ -53,9 +53,4 @@ export async function setAttributes(attrs, options = {}) {
53
53
  },
54
54
  });
55
55
  }
56
- /**
57
- * @deprecated The feature is no longer experimental — use
58
- * {@link setAttributes} instead.
59
- */
60
- export const experimental_setAttributes = setAttributes;
61
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2V0LWF0dHJpYnV0ZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvc2V0LWF0dHJpYnV0ZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ25FLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFRM0Q7Ozs7Ozs7O0dBUUc7QUFDSCxNQUFNLENBQUMsS0FBSyxVQUFVLGFBQWEsQ0FDakMsS0FBeUMsRUFDekMsVUFBZ0MsRUFBRTtJQUVsQyxNQUFNLEtBQUssR0FBRyxjQUFjLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDeEMsTUFBTSxLQUFLLEdBQUcsS0FBSyxFQUFFLGdCQUFnQixFQUFFLGFBQWEsQ0FBQztJQUNyRCxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDWCxNQUFNLElBQUksVUFBVSxDQUNsQiwrRUFBK0U7WUFDN0UsbURBQW1ELENBQ3RELENBQUM7SUFDSixDQUFDO0lBRUQsTUFBTSxPQUFPLEdBQUcseUJBQXlCLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQzFELElBQUksT0FBTyxDQUFDLE1BQU0sS0FBSyxDQUFDO1FBQUUsT0FBTztJQUVqQyxvRUFBb0U7SUFDcEUsNkVBQTZFO0lBQzdFLDBFQUEwRTtJQUMxRSw2RUFBNkU7SUFDN0UsNkVBQTZFO0lBQzdFLDhFQUE4RTtJQUM5RSxJQUFJLEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUMxQixJQUFJLENBQUM7WUFDSCxNQUFNLEtBQUssQ0FBQyxlQUFlLENBQUM7UUFDOUIsQ0FBQztRQUFDLE1BQU0sQ0FBQztZQUNQLGtEQUFrRDtRQUNwRCxDQUFDO0lBQ0gsQ0FBQztJQUVELE1BQU0sS0FBSyxHQUFHLE1BQU0sWUFBWSxFQUFFLENBQUM7SUFDbkMsTUFBTSxLQUFLLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUU7UUFDL0IsU0FBUyxFQUFFLFVBQVU7UUFDckIsV0FBVyxFQUFFLG9CQUFvQjtRQUNqQyxTQUFTLEVBQUU7WUFDVCxPQUFPO1lBQ1AsTUFBTSxFQUFFO2dCQUNOLElBQUksRUFBRSxNQUFNO2dCQUNaLE1BQU0sRUFBRSxLQUFLLENBQUMsWUFBWSxDQUFDLE1BQU07Z0JBQ2pDLE9BQU8sRUFBRSxLQUFLLENBQUMsWUFBWSxDQUFDLE9BQU87YUFDcEM7WUFDRCxHQUFHLENBQUMsT0FBTyxDQUFDLHVCQUF1QixLQUFLLElBQUk7Z0JBQzFDLENBQUMsQ0FBQyxFQUFFLHVCQUF1QixFQUFFLElBQUksRUFBRTtnQkFDbkMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztTQUNSO0tBQ0YsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQUVEOzs7R0FHRztBQUNILE1BQU0sQ0FBQyxNQUFNLDBCQUEwQixHQUFHLGFBQWEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEZhdGFsRXJyb3IgfSBmcm9tICdAd29ya2Zsb3cvZXJyb3JzJztcbmltcG9ydCB7IFNQRUNfVkVSU0lPTl9DVVJSRU5UIH0gZnJvbSAnQHdvcmtmbG93L3dvcmxkJztcbmltcG9ydCB7IG5vcm1hbGl6ZUF0dHJpYnV0ZUNoYW5nZXMgfSBmcm9tICcuL2F0dHJpYnV0ZS1jaGFuZ2VzLmpzJztcbmltcG9ydCB7IGdldFdvcmxkTGF6eSB9IGZyb20gJy4vcnVudGltZS9nZXQtd29ybGQtbGF6eS5qcyc7XG5pbXBvcnQgeyBjb250ZXh0U3RvcmFnZSB9IGZyb20gJy4vc3RlcC9jb250ZXh0LXN0b3JhZ2UuanMnO1xuaW1wb3J0IHR5cGUge1xuICBFeHBlcmltZW50YWxTZXRBdHRyaWJ1dGVzT3B0aW9ucyxcbiAgU2V0QXR0cmlidXRlc09wdGlvbnMsXG59IGZyb20gJy4vd29ya2Zsb3cvc2V0LWF0dHJpYnV0ZXMuanMnO1xuXG5leHBvcnQgdHlwZSB7IEV4cGVyaW1lbnRhbFNldEF0dHJpYnV0ZXNPcHRpb25zLCBTZXRBdHRyaWJ1dGVzT3B0aW9ucyB9O1xuXG4vKipcbiAqIEhvc3Qtc2lkZSBpbXBsZW1lbnRhdGlvbiBmb3IgYHNldEF0dHJpYnV0ZXNgLiBXb3JrZmxvdyBib2RpZXMgcmVzb2x2ZVxuICogdG8gYC4vd29ya2Zsb3cvc2V0LWF0dHJpYnV0ZXMudHNgIHZpYSB0aGUgYHdvcmtmbG93YCBwYWNrYWdlLWV4cG9ydHNcbiAqIGNvbmRpdGlvbjsgc3RlcCBib2RpZXMgcmVzb2x2ZSBoZXJlIGFuZCBjYW4gcGVyZm9ybSB0aGUgd29ybGQgd3JpdGVcbiAqIGRpcmVjdGx5IGJlY2F1c2UgdGhleSBhbHJlYWR5IHJ1biBpbiBob3N0IGNvbnRleHQuXG4gKlxuICogUGxhaW4gYXBwbGljYXRpb24gY29kZSBzdGlsbCBoYXMgbm8gYWN0aXZlIHdvcmtmbG93IHJ1biwgc28gaXQgdGhyb3dzXG4gKiBhIGNsZWFyIGBGYXRhbEVycm9yYC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNldEF0dHJpYnV0ZXMoXG4gIGF0dHJzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCB1bmRlZmluZWQ+LFxuICBvcHRpb25zOiBTZXRBdHRyaWJ1dGVzT3B0aW9ucyA9IHt9XG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3Qgc3RvcmUgPSBjb250ZXh0U3RvcmFnZS5nZXRTdG9yZSgpO1xuICBjb25zdCBydW5JZCA9IHN0b3JlPy53b3JrZmxvd01ldGFkYXRhPy53b3JrZmxvd1J1bklkO1xuICBpZiAoIXJ1bklkKSB7XG4gICAgdGhyb3cgbmV3IEZhdGFsRXJyb3IoXG4gICAgICBcInNldEF0dHJpYnV0ZXMoKSBtdXN0IGJlIGNhbGxlZCBmcm9tIGEgJ3VzZSB3b3JrZmxvdycgb3IgJ3VzZSBzdGVwJyBmdW5jdGlvbi4gXCIgK1xuICAgICAgICAnQ2FsbGluZyBpdCBmcm9tIHBsYWluIGhvc3QgY29kZSBpcyBub3Qgc3VwcG9ydGVkLidcbiAgICApO1xuICB9XG5cbiAgY29uc3QgY2hhbmdlcyA9IG5vcm1hbGl6ZUF0dHJpYnV0ZUNoYW5nZXMoYXR0cnMsIG9wdGlvbnMpO1xuICBpZiAoY2hhbmdlcy5sZW5ndGggPT09IDApIHJldHVybjtcblxuICAvLyBUdXJibyBvcHRpbWlzdGljIHN0YXJ0IHJ1bnMgdGhlIHN0ZXAgYm9keSBiZWZvcmUgdGhlIGJhY2tncm91bmRlZFxuICAvLyBgcnVuX3N0YXJ0ZWRgIGlzIGR1cmFibGUuIE9yZGVyIHRoaXMgYGF0dHJfc2V0YCBhZnRlciB0aGUgcnVuIGV4aXN0cyBzbyBpdFxuICAvLyBuZXZlciByZWFjaGVzIHRoZSBXb3JsZCBiZWZvcmUgdGhlIHJ1biBkb2VzICh3aGljaCB3b3VsZCBiZSByZWplY3RlZCBhc1xuICAvLyBydW4tbm90LWZvdW5kKS4gQSBuby1vcCBvdXRzaWRlIHR1cmJvIChiYXJyaWVyIHVuZGVmaW5lZCkgYW5kIG9uIHRoZSBhd2FpdFxuICAvLyBwYXRoLiBUaGUgcmVqZWN0aW9uIGlzIHN3YWxsb3dlZCBmb3Igb3JkZXJpbmcgb25seTogaWYgYHJ1bl9zdGFydGVkYCB0cnVseVxuICAvLyBmYWlsZWQgdGhlIHJ1biBkb2VzIG5vdCBleGlzdCwgc28gdGhlIGNyZWF0ZSBiZWxvdyBzdXJmYWNlcyB0aGUgcmVhbCBlcnJvci5cbiAgaWYgKHN0b3JlLnJ1blJlYWR5QmFycmllcikge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBzdG9yZS5ydW5SZWFkeUJhcnJpZXI7XG4gICAgfSBjYXRjaCB7XG4gICAgICAvLyBpbnRlbnRpb25hbDogb3JkZXJpbmcgYmFycmllciBvbmx5IOKAlCBzZWUgYWJvdmUuXG4gICAgfVxuICB9XG5cbiAgY29uc3Qgd29ybGQgPSBhd2FpdCBnZXRXb3JsZExhenkoKTtcbiAgYXdhaXQgd29ybGQuZXZlbnRzLmNyZWF0ZShydW5JZCwge1xuICAgIGV2ZW50VHlwZTogJ2F0dHJfc2V0JyxcbiAgICBzcGVjVmVyc2lvbjogU1BFQ19WRVJTSU9OX0NVUlJFTlQsXG4gICAgZXZlbnREYXRhOiB7XG4gICAgICBjaGFuZ2VzLFxuICAgICAgd3JpdGVyOiB7XG4gICAgICAgIHR5cGU6ICdzdGVwJyxcbiAgICAgICAgc3RlcElkOiBzdG9yZS5zdGVwTWV0YWRhdGEuc3RlcElkLFxuICAgICAgICBhdHRlbXB0OiBzdG9yZS5zdGVwTWV0YWRhdGEuYXR0ZW1wdCxcbiAgICAgIH0sXG4gICAgICAuLi4ob3B0aW9ucy5hbGxvd1Jlc2VydmVkQXR0cmlidXRlcyA9PT0gdHJ1ZVxuICAgICAgICA/IHsgYWxsb3dSZXNlcnZlZEF0dHJpYnV0ZXM6IHRydWUgfVxuICAgICAgICA6IHt9KSxcbiAgICB9LFxuICB9KTtcbn1cblxuLyoqXG4gKiBAZGVwcmVjYXRlZCBUaGUgZmVhdHVyZSBpcyBubyBsb25nZXIgZXhwZXJpbWVudGFsIOKAlCB1c2VcbiAqIHtAbGluayBzZXRBdHRyaWJ1dGVzfSBpbnN0ZWFkLlxuICovXG5leHBvcnQgY29uc3QgZXhwZXJpbWVudGFsX3NldEF0dHJpYnV0ZXMgPSBzZXRBdHRyaWJ1dGVzO1xuIl19
56
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2V0LWF0dHJpYnV0ZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvc2V0LWF0dHJpYnV0ZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ25FLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFLM0Q7Ozs7Ozs7O0dBUUc7QUFDSCxNQUFNLENBQUMsS0FBSyxVQUFVLGFBQWEsQ0FDakMsS0FBeUMsRUFDekMsVUFBZ0MsRUFBRTtJQUVsQyxNQUFNLEtBQUssR0FBRyxjQUFjLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDeEMsTUFBTSxLQUFLLEdBQUcsS0FBSyxFQUFFLGdCQUFnQixFQUFFLGFBQWEsQ0FBQztJQUNyRCxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDWCxNQUFNLElBQUksVUFBVSxDQUNsQiwrRUFBK0U7WUFDN0UsbURBQW1ELENBQ3RELENBQUM7SUFDSixDQUFDO0lBRUQsTUFBTSxPQUFPLEdBQUcseUJBQXlCLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQzFELElBQUksT0FBTyxDQUFDLE1BQU0sS0FBSyxDQUFDO1FBQUUsT0FBTztJQUVqQyxvRUFBb0U7SUFDcEUsNkVBQTZFO0lBQzdFLDBFQUEwRTtJQUMxRSw2RUFBNkU7SUFDN0UsNkVBQTZFO0lBQzdFLDhFQUE4RTtJQUM5RSxJQUFJLEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUMxQixJQUFJLENBQUM7WUFDSCxNQUFNLEtBQUssQ0FBQyxlQUFlLENBQUM7UUFDOUIsQ0FBQztRQUFDLE1BQU0sQ0FBQztZQUNQLGtEQUFrRDtRQUNwRCxDQUFDO0lBQ0gsQ0FBQztJQUVELE1BQU0sS0FBSyxHQUFHLE1BQU0sWUFBWSxFQUFFLENBQUM7SUFDbkMsTUFBTSxLQUFLLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUU7UUFDL0IsU0FBUyxFQUFFLFVBQVU7UUFDckIsV0FBVyxFQUFFLG9CQUFvQjtRQUNqQyxTQUFTLEVBQUU7WUFDVCxPQUFPO1lBQ1AsTUFBTSxFQUFFO2dCQUNOLElBQUksRUFBRSxNQUFNO2dCQUNaLE1BQU0sRUFBRSxLQUFLLENBQUMsWUFBWSxDQUFDLE1BQU07Z0JBQ2pDLE9BQU8sRUFBRSxLQUFLLENBQUMsWUFBWSxDQUFDLE9BQU87YUFDcEM7WUFDRCxHQUFHLENBQUMsT0FBTyxDQUFDLHVCQUF1QixLQUFLLElBQUk7Z0JBQzFDLENBQUMsQ0FBQyxFQUFFLHVCQUF1QixFQUFFLElBQUksRUFBRTtnQkFDbkMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztTQUNSO0tBQ0YsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEZhdGFsRXJyb3IgfSBmcm9tICdAd29ya2Zsb3cvZXJyb3JzJztcbmltcG9ydCB7IFNQRUNfVkVSU0lPTl9DVVJSRU5UIH0gZnJvbSAnQHdvcmtmbG93L3dvcmxkJztcbmltcG9ydCB7IG5vcm1hbGl6ZUF0dHJpYnV0ZUNoYW5nZXMgfSBmcm9tICcuL2F0dHJpYnV0ZS1jaGFuZ2VzLmpzJztcbmltcG9ydCB7IGdldFdvcmxkTGF6eSB9IGZyb20gJy4vcnVudGltZS9nZXQtd29ybGQtbGF6eS5qcyc7XG5pbXBvcnQgeyBjb250ZXh0U3RvcmFnZSB9IGZyb20gJy4vc3RlcC9jb250ZXh0LXN0b3JhZ2UuanMnO1xuaW1wb3J0IHR5cGUgeyBTZXRBdHRyaWJ1dGVzT3B0aW9ucyB9IGZyb20gJy4vd29ya2Zsb3cvc2V0LWF0dHJpYnV0ZXMuanMnO1xuXG5leHBvcnQgdHlwZSB7IFNldEF0dHJpYnV0ZXNPcHRpb25zIH07XG5cbi8qKlxuICogSG9zdC1zaWRlIGltcGxlbWVudGF0aW9uIGZvciBgc2V0QXR0cmlidXRlc2AuIFdvcmtmbG93IGJvZGllcyByZXNvbHZlXG4gKiB0byBgLi93b3JrZmxvdy9zZXQtYXR0cmlidXRlcy50c2AgdmlhIHRoZSBgd29ya2Zsb3dgIHBhY2thZ2UtZXhwb3J0c1xuICogY29uZGl0aW9uOyBzdGVwIGJvZGllcyByZXNvbHZlIGhlcmUgYW5kIGNhbiBwZXJmb3JtIHRoZSB3b3JsZCB3cml0ZVxuICogZGlyZWN0bHkgYmVjYXVzZSB0aGV5IGFscmVhZHkgcnVuIGluIGhvc3QgY29udGV4dC5cbiAqXG4gKiBQbGFpbiBhcHBsaWNhdGlvbiBjb2RlIHN0aWxsIGhhcyBubyBhY3RpdmUgd29ya2Zsb3cgcnVuLCBzbyBpdCB0aHJvd3NcbiAqIGEgY2xlYXIgYEZhdGFsRXJyb3JgLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc2V0QXR0cmlidXRlcyhcbiAgYXR0cnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IHVuZGVmaW5lZD4sXG4gIG9wdGlvbnM6IFNldEF0dHJpYnV0ZXNPcHRpb25zID0ge31cbik6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBzdG9yZSA9IGNvbnRleHRTdG9yYWdlLmdldFN0b3JlKCk7XG4gIGNvbnN0IHJ1bklkID0gc3RvcmU/LndvcmtmbG93TWV0YWRhdGE/LndvcmtmbG93UnVuSWQ7XG4gIGlmICghcnVuSWQpIHtcbiAgICB0aHJvdyBuZXcgRmF0YWxFcnJvcihcbiAgICAgIFwic2V0QXR0cmlidXRlcygpIG11c3QgYmUgY2FsbGVkIGZyb20gYSAndXNlIHdvcmtmbG93JyBvciAndXNlIHN0ZXAnIGZ1bmN0aW9uLiBcIiArXG4gICAgICAgICdDYWxsaW5nIGl0IGZyb20gcGxhaW4gaG9zdCBjb2RlIGlzIG5vdCBzdXBwb3J0ZWQuJ1xuICAgICk7XG4gIH1cblxuICBjb25zdCBjaGFuZ2VzID0gbm9ybWFsaXplQXR0cmlidXRlQ2hhbmdlcyhhdHRycywgb3B0aW9ucyk7XG4gIGlmIChjaGFuZ2VzLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuXG4gIC8vIFR1cmJvIG9wdGltaXN0aWMgc3RhcnQgcnVucyB0aGUgc3RlcCBib2R5IGJlZm9yZSB0aGUgYmFja2dyb3VuZGVkXG4gIC8vIGBydW5fc3RhcnRlZGAgaXMgZHVyYWJsZS4gT3JkZXIgdGhpcyBgYXR0cl9zZXRgIGFmdGVyIHRoZSBydW4gZXhpc3RzIHNvIGl0XG4gIC8vIG5ldmVyIHJlYWNoZXMgdGhlIFdvcmxkIGJlZm9yZSB0aGUgcnVuIGRvZXMgKHdoaWNoIHdvdWxkIGJlIHJlamVjdGVkIGFzXG4gIC8vIHJ1bi1ub3QtZm91bmQpLiBBIG5vLW9wIG91dHNpZGUgdHVyYm8gKGJhcnJpZXIgdW5kZWZpbmVkKSBhbmQgb24gdGhlIGF3YWl0XG4gIC8vIHBhdGguIFRoZSByZWplY3Rpb24gaXMgc3dhbGxvd2VkIGZvciBvcmRlcmluZyBvbmx5OiBpZiBgcnVuX3N0YXJ0ZWRgIHRydWx5XG4gIC8vIGZhaWxlZCB0aGUgcnVuIGRvZXMgbm90IGV4aXN0LCBzbyB0aGUgY3JlYXRlIGJlbG93IHN1cmZhY2VzIHRoZSByZWFsIGVycm9yLlxuICBpZiAoc3RvcmUucnVuUmVhZHlCYXJyaWVyKSB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHN0b3JlLnJ1blJlYWR5QmFycmllcjtcbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vIGludGVudGlvbmFsOiBvcmRlcmluZyBiYXJyaWVyIG9ubHkg4oCUIHNlZSBhYm92ZS5cbiAgICB9XG4gIH1cblxuICBjb25zdCB3b3JsZCA9IGF3YWl0IGdldFdvcmxkTGF6eSgpO1xuICBhd2FpdCB3b3JsZC5ldmVudHMuY3JlYXRlKHJ1bklkLCB7XG4gICAgZXZlbnRUeXBlOiAnYXR0cl9zZXQnLFxuICAgIHNwZWNWZXJzaW9uOiBTUEVDX1ZFUlNJT05fQ1VSUkVOVCxcbiAgICBldmVudERhdGE6IHtcbiAgICAgIGNoYW5nZXMsXG4gICAgICB3cml0ZXI6IHtcbiAgICAgICAgdHlwZTogJ3N0ZXAnLFxuICAgICAgICBzdGVwSWQ6IHN0b3JlLnN0ZXBNZXRhZGF0YS5zdGVwSWQsXG4gICAgICAgIGF0dGVtcHQ6IHN0b3JlLnN0ZXBNZXRhZGF0YS5hdHRlbXB0LFxuICAgICAgfSxcbiAgICAgIC4uLihvcHRpb25zLmFsbG93UmVzZXJ2ZWRBdHRyaWJ1dGVzID09PSB0cnVlXG4gICAgICAgID8geyBhbGxvd1Jlc2VydmVkQXR0cmlidXRlczogdHJ1ZSB9XG4gICAgICAgIDoge30pLFxuICAgIH0sXG4gIH0pO1xufVxuIl19
@@ -1,5 +1,5 @@
1
1
  import { AsyncLocalStorage } from 'node:async_hooks';
2
- import type { CryptoKey } from '../encryption.js';
2
+ import type { PayloadKey } from '../serialization/encryption.js';
3
3
  import type { FlushableStreamState } from '../flushable-stream.js';
4
4
  import type { WorkflowMetadata } from '../workflow/get-workflow-metadata.js';
5
5
  import type { StepMetadata } from './get-step-metadata.js';
@@ -55,7 +55,7 @@ export type StepContext = {
55
55
  */
56
56
  preCompletionOps: Promise<void>[];
57
57
  closureVars?: Record<string, any>;
58
- encryptionKey?: CryptoKey;
58
+ encryptionKey?: PayloadKey;
59
59
  writables?: Map<string, CachedWritable>;
60
60
  /**
61
61
  * Turbo mode only: a promise that resolves once the backgrounded
@@ -1 +1 @@
1
- {"version":3,"file":"context-storage.d.ts","sourceRoot":"","sources":["../../src/step/context-storage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AACnE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sCAAsC,CAAC;AAC7E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAE3D;;;;;;;GAOG;AACH,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,cAAc,CAAC,GAAG,CAAC,CAAC;IAC9B,KAAK,EAAE,oBAAoB,CAAC;CAC7B;AAED,MAAM,MAAM,WAAW,GAAG;IACxB,YAAY,EAAE,YAAY,CAAC;IAC3B,gBAAgB,EAAE,gBAAgB,CAAC;IACnC,iFAAiF;IACjF,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,GAAG,EAAE,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;IACrB;;;;;;;;;;;;;;;;;;;;;;;;;OAyBG;IACH,gBAAgB,EAAE,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;IAClC,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAClC,aAAa,CAAC,EAAE,SAAS,CAAC;IAC1B,SAAS,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IACxC;;;;;;;;OAQG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;CACpC,CAAC;AAoBF,eAAO,MAAM,cAAc,EAAE,iBAAiB,CAAC,WAAW,CAKjB,CAAC"}
1
+ {"version":3,"file":"context-storage.d.ts","sourceRoot":"","sources":["../../src/step/context-storage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AACjE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AACnE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sCAAsC,CAAC;AAC7E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAE3D;;;;;;;GAOG;AACH,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,cAAc,CAAC,GAAG,CAAC,CAAC;IAC9B,KAAK,EAAE,oBAAoB,CAAC;CAC7B;AAED,MAAM,MAAM,WAAW,GAAG;IACxB,YAAY,EAAE,YAAY,CAAC;IAC3B,gBAAgB,EAAE,gBAAgB,CAAC;IACnC,iFAAiF;IACjF,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,GAAG,EAAE,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;IACrB;;;;;;;;;;;;;;;;;;;;;;;;;OAyBG;IACH,gBAAgB,EAAE,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;IAClC,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAClC,aAAa,CAAC,EAAE,UAAU,CAAC;IAC3B,SAAS,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IACxC;;;;;;;;OAQG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;CACpC,CAAC;AAoBF,eAAO,MAAM,cAAc,EAAE,iBAAiB,CAAC,WAAW,CAKjB,CAAC"}
@@ -4,7 +4,7 @@ import { AsyncLocalStorage } from 'node:async_hooks';
4
4
  *
5
5
  * Uses `Symbol.for()` on globalThis to guarantee a single instance even when
6
6
  * bundlers (e.g. Vercel's production bundler) create multiple copies of this
7
- * module. Without this, `contextStorage.run()` in the step handler and
7
+ * module. Without this, `contextStorage.run()` in the step executor and
8
8
  * `contextStorage.getStore()` in user code (via getWorkflowMetadata /
9
9
  * getStepMetadata) can reference different AsyncLocalStorage instances,
10
10
  * causing the store to appear empty.
@@ -19,4 +19,4 @@ const CONTEXT_STORAGE_SYMBOL = Symbol.for('WORKFLOW_STEP_CONTEXT_STORAGE');
19
19
  export const contextStorage = globalThis[CONTEXT_STORAGE_SYMBOL] ??
20
20
  (globalThis[CONTEXT_STORAGE_SYMBOL] =
21
21
  new AsyncLocalStorage());
22
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGV4dC1zdG9yYWdlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3N0ZXAvY29udGV4dC1zdG9yYWdlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBeUVyRDs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFDSCxNQUFNLHNCQUFzQixHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsK0JBQStCLENBQUMsQ0FBQztBQUUzRSxNQUFNLENBQUMsTUFBTSxjQUFjLEdBQ3ZCLFVBQWtCLENBQUMsc0JBQXNCLENBRTdCO0lBQ2QsQ0FBRSxVQUFrQixDQUFDLHNCQUFzQixDQUFDO1FBQzFDLElBQUksaUJBQWlCLEVBQWUsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQXN5bmNMb2NhbFN0b3JhZ2UgfSBmcm9tICdub2RlOmFzeW5jX2hvb2tzJztcbmltcG9ydCB0eXBlIHsgQ3J5cHRvS2V5IH0gZnJvbSAnLi4vZW5jcnlwdGlvbi5qcyc7XG5pbXBvcnQgdHlwZSB7IEZsdXNoYWJsZVN0cmVhbVN0YXRlIH0gZnJvbSAnLi4vZmx1c2hhYmxlLXN0cmVhbS5qcyc7XG5pbXBvcnQgdHlwZSB7IFdvcmtmbG93TWV0YWRhdGEgfSBmcm9tICcuLi93b3JrZmxvdy9nZXQtd29ya2Zsb3ctbWV0YWRhdGEuanMnO1xuaW1wb3J0IHR5cGUgeyBTdGVwTWV0YWRhdGEgfSBmcm9tICcuL2dldC1zdGVwLW1ldGFkYXRhLmpzJztcblxuLyoqXG4gKiBQZXItc3RlcCBjYWNoZSBlbnRyeSBmb3IgYSBgKHJ1bklkLCBuYW1lc3BhY2UpYCB3cml0YWJsZSBzdHJlYW0uXG4gKlxuICogSG9sZHMgdGhlIHVzZXItZmFjaW5nIGBXcml0YWJsZVN0cmVhbWAgYW5kIHRoZSBzaGFyZWQgYEZsdXNoYWJsZVN0cmVhbVN0YXRlYFxuICogZHJpdmluZyB0aGUgYmFja2dyb3VuZCBwaXBlIHRvIHRoZSB3b3JrZmxvdyBzZXJ2ZXIuIFJlLXVzZWQgc28gcmVwZWF0IGNhbGxzXG4gKiB0byBgZ2V0V3JpdGFibGUoKWAgd2l0aGluIHRoZSBzYW1lIHN0ZXAgcmV0dXJuIHRoZSBzYW1lIGhhbmRsZSBpbnN0ZWFkIG9mXG4gKiBzcGF3bmluZyByYWNpbmcgcGlwZXMg4oCUIHNlZSBodHRwczovL2dpdGh1Yi5jb20vdmVyY2VsL3dvcmtmbG93L2lzc3Vlcy8yMDU4LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENhY2hlZFdyaXRhYmxlIHtcbiAgd3JpdGFibGU6IFdyaXRhYmxlU3RyZWFtPGFueT47XG4gIHN0YXRlOiBGbHVzaGFibGVTdHJlYW1TdGF0ZTtcbn1cblxuZXhwb3J0IHR5cGUgU3RlcENvbnRleHQgPSB7XG4gIHN0ZXBNZXRhZGF0YTogU3RlcE1ldGFkYXRhO1xuICB3b3JrZmxvd01ldGFkYXRhOiBXb3JrZmxvd01ldGFkYXRhO1xuICAvKiogRGVwbG95bWVudCB0aGF0IG93bnMgdGhlIGN1cnJlbnQgd29ya2Zsb3cgcnVuLCB1c2VkIGZvciBmb3J3YXJkZWQgc3RyZWFtcy4gKi9cbiAgd29ya2Zsb3dEZXBsb3ltZW50SWQ/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBSb290IHJ1biBpZCBvZiB0aGUgY3VycmVudCBydW4ncyBsaW5lYWdlIChgJHJvb3RSdW5JZGApLCBzbyBhIG5lc3RlZFxuICAgKiBgc3RhcnQoKWAgaW5oZXJpdHMgaXQgd2l0aG91dCByZWxvYWRpbmcgdGhlIHBhcmVudC4gU2V0IGJ5IHRoZSBydW50aW1lIGZyb21cbiAgICogdGhlIHJ1biBpdCBhbHJlYWR5IGhhcyBsb2FkZWQuXG4gICAqL1xuICByb290UnVuSWQ/OiBzdHJpbmc7XG4gIG9wczogUHJvbWlzZTx2b2lkPltdO1xuICAvKipcbiAgICogT3BlcmF0aW9ucyB0aGF0IE1VU1QgYmUgZHVyYWJseSBjb21taXR0ZWQgYmVmb3JlIHRoZSBzdGVwJ3NcbiAgICogYHN0ZXBfY29tcGxldGVkYC9gc3RlcF9mYWlsZWRgIGV2ZW50IGlzIHdyaXR0ZW4sIGJlY2F1c2UgdGhlIHdvcmtmbG93XG4gICAqIGNvbnRpbnVhdGlvbiB0cmlnZ2VyZWQgYnkgdGhhdCBldmVudCBkZXBlbmRzIG9uIHRoZW0uXG4gICAqXG4gICAqIFRoZSBjYW5vbmljYWwgY2FzZSBpcyBhIHN0ZXAtaW5pdGlhdGVkIGBBYm9ydENvbnRyb2xsZXIuYWJvcnQoKWA6IHRoZVxuICAgKiBkdXJhYmxlIGBob29rX3JlY2VpdmVkYCBldmVudCByZWNvcmRzIHRoZSBjYW5jZWxsYXRpb24gaW4gdGhlIHdvcmtmbG93J3NcbiAgICogZXZlbnQgbG9nLiBJZiBpdCBpcyBmbHVzaGVkIGluIHRoZSBiYWNrZ3JvdW5kIChsaWtlIGBvcHNgKSwgdGhlIHdvcmtmbG93XG4gICAqIGNvbnRpbnVhdGlvbiBlbnF1ZXVlZCBieSBgc3RlcF9jb21wbGV0ZWRgIGNhbiBydW4g4oCUIGFuZCBhZHZhbmNlIHBhc3QgdGhlXG4gICAqIGFib3J0LCBkaXNwYXRjaGluZyBhIGxhdGVyIHN0ZXAgd2l0aCBhIHN0YWxlLCBub24tYWJvcnRlZCBgc2lnbmFsYCDigJQgYmVmb3JlXG4gICAqIHRoZSBgaG9va19yZWNlaXZlZGAgZXZlbnQgZXhpc3RzLiBBd2FpdGluZyB0aGVzZSBpbmxpbmUgYmVmb3JlIGNvbXBsZXRpb25cbiAgICogZ3VhcmFudGVlcyB0aGUgYWJvcnQgaXMgb3JkZXJlZCBhaGVhZCBvZiBhbnkgY29udGludWF0aW9uIHRoYXQgb2JzZXJ2ZXMgdGhlXG4gICAqIHN0ZXAncyByZXN1bHQuIFVubGlrZSB0aGVzZSwgYG9wc2AgaG9sZHMgYmVzdC1lZmZvcnQgcmVhbC10aW1lIHN0cmVhbVxuICAgKiB3cml0ZXMgdGhhdCBzaG91bGQgZmlyZSBBU0FQIGFuZCBhcmUgaW50ZW50aW9uYWxseSBsZWZ0IGluIHRoZSBiYWNrZ3JvdW5kLlxuICAgKlxuICAgKiBDb250cmFjdDogcHJvZHVjZXJzIE1VU1QgTk9UIHB1c2ggYSBwcm9taXNlIHRoYXQgY2FuIHJlamVjdCDigJQgdGhlc2UgYXJlXG4gICAqIGF3YWl0ZWQgb25seSB0byBlbmZvcmNlIG9yZGVyaW5nLCBuZXZlciB0byBzdXJmYWNlIGFuIG91dGNvbWUuIEEgcmVqZWN0aW9uXG4gICAqIGhlcmUgd291bGQgcHJvcGFnYXRlIGFzIGFuIGluZnJhIGVycm9yIChxdWV1ZSByZS1kZWxpdmVyeSksIG5vdCB0aGVcbiAgICogdXNlci1jb2RlIGZhaWx1cmUgcGF0aCwgc28gZWFjaCBwcm9kdWNlciBzd2FsbG93cyBpdHMgb3duIGVycm9ycyAoc2VlXG4gICAqIGByZXZpdmVBYm9ydENvbnRyb2xsZXJgIGluIHNlcmlhbGl6YXRpb24udHMpLiBUaGUgYXdhaXQgc2l0ZXMgYWxzb1xuICAgKiBkZWZlbnNpdmVseSBgLmNhdGNoKClgIHNvIG9yZGVyaW5nIGlzIGFsbCB0aGlzIGJ1Y2tldCBjYW4gZXZlciBlbmZvcmNlLlxuICAgKlxuICAgKiBSZXF1aXJlZCAobm90IG9wdGlvbmFsKSBzbyBhIG5ldyBzdGVwLWNvbnRleHQgY29uc3RydWN0aW9uIHNpdGUgdGhhdFxuICAgKiBmb3JnZXRzIHRvIHdpcmUgaXQgZmFpbHMgYXQgY29tcGlsZSB0aW1lLCByYXRoZXIgdGhhbiBzaWxlbnRseSByZWdyZXNzaW5nXG4gICAqIHRoZSBvcmRlcmluZyBndWFyYW50ZWUgYmFjayB0byBiYWNrZ3JvdW5kLWZsdXNoIGJlaGF2aW9yLlxuICAgKi9cbiAgcHJlQ29tcGxldGlvbk9wczogUHJvbWlzZTx2b2lkPltdO1xuICBjbG9zdXJlVmFycz86IFJlY29yZDxzdHJpbmcsIGFueT47XG4gIGVuY3J5cHRpb25LZXk/OiBDcnlwdG9LZXk7XG4gIHdyaXRhYmxlcz86IE1hcDxzdHJpbmcsIENhY2hlZFdyaXRhYmxlPjtcbiAgLyoqXG4gICAqIFR1cmJvIG1vZGUgb25seTogYSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgb25jZSB0aGUgYmFja2dyb3VuZGVkXG4gICAqIGBydW5fc3RhcnRlZGAgaGFzIGxhbmRlZCAodGhlIHJ1biBleGlzdHMpLiBTZXQgd2hlbiB0aGUgc3RlcCBib2R5IHJ1bnNcbiAgICogb3B0aW1pc3RpY2FsbHkg4oCUIGJlZm9yZSBgcnVuX3N0YXJ0ZWRgL2BzdGVwX3N0YXJ0ZWRgIGFyZSBjb25maXJtZWQg4oCUIHNvIGFcbiAgICogZGlyZWN0IHN0ZXAtYm9keSB3b3JsZCB3cml0ZSAoZS5nLiBgc2V0QXR0cmlidXRlc2AsIHdoaWNoXG4gICAqIHJlc29sdmVzIHRvIGEgaG9zdC1zaWRlIGBhdHRyX3NldGAgY3JlYXRlKSBjYW4gZ2F0ZSBvbiBpdCBhbmQgbmV2ZXIgcmFjZVxuICAgKiBhaGVhZCBvZiB0aGUgcnVuJ3MgY3JlYXRpb24uIGB1bmRlZmluZWRgIG91dHNpZGUgdHVyYm8gYW5kIG9uIHRoZSBhd2FpdFxuICAgKiBwYXRoLCB3aGVyZSBgcnVuX3N0YXJ0ZWRgIHdhcyBhbHJlYWR5IGR1cmFibGUgYmVmb3JlIHRoZSBib2R5IHJhbi5cbiAgICovXG4gIHJ1blJlYWR5QmFycmllcj86IFByb21pc2U8dW5rbm93bj47XG59O1xuXG4vKipcbiAqIFByb2Nlc3Mtd2lkZSBzaW5nbGV0b24gQXN5bmNMb2NhbFN0b3JhZ2UgZm9yIHN0ZXAgZXhlY3V0aW9uIGNvbnRleHQuXG4gKlxuICogVXNlcyBgU3ltYm9sLmZvcigpYCBvbiBnbG9iYWxUaGlzIHRvIGd1YXJhbnRlZSBhIHNpbmdsZSBpbnN0YW5jZSBldmVuIHdoZW5cbiAqIGJ1bmRsZXJzIChlLmcuIFZlcmNlbCdzIHByb2R1Y3Rpb24gYnVuZGxlcikgY3JlYXRlIG11bHRpcGxlIGNvcGllcyBvZiB0aGlzXG4gKiBtb2R1bGUuIFdpdGhvdXQgdGhpcywgYGNvbnRleHRTdG9yYWdlLnJ1bigpYCBpbiB0aGUgc3RlcCBoYW5kbGVyIGFuZFxuICogYGNvbnRleHRTdG9yYWdlLmdldFN0b3JlKClgIGluIHVzZXIgY29kZSAodmlhIGdldFdvcmtmbG93TWV0YWRhdGEgL1xuICogZ2V0U3RlcE1ldGFkYXRhKSBjYW4gcmVmZXJlbmNlIGRpZmZlcmVudCBBc3luY0xvY2FsU3RvcmFnZSBpbnN0YW5jZXMsXG4gKiBjYXVzaW5nIHRoZSBzdG9yZSB0byBhcHBlYXIgZW1wdHkuXG4gKlxuICogTm90ZSB0aGF0IHdlIHdlcmUgdW5hYmxlIHRvIHJlcHJvZHVjZSB0aGlzIGlzc3VlLiBUaGlzIGlzIGEgZml4IGZvciB0aGUgb25seSBzeW50aGV0aWMgd2F5XG4gKiB3YXkgaW4gd2hpY2ggd2UgY291bGQgZ2V0IHRoZSBidWlsZGVyIHRvIGJyZWFrIHdpdGggdGhlIHJlcG9ydGVkIGVycm9yIG1lc3NhZ2UsIGFuZFxuICogc2VydmVzIGFzIGRlZmVuc2UtaW4tZGVwdGgsIHNpbmNlIHRoZSBjaGFuZ2UgaXMgb3RoZXJ3aXNlIHNhZmUuXG4gKlxuICogU2VlOiBodHRwczovL2dpdGh1Yi5jb20vdmVyY2VsL3dvcmtmbG93L2lzc3Vlcy8xNTc3XG4gKi9cbmNvbnN0IENPTlRFWFRfU1RPUkFHRV9TWU1CT0wgPSBTeW1ib2wuZm9yKCdXT1JLRkxPV19TVEVQX0NPTlRFWFRfU1RPUkFHRScpO1xuXG5leHBvcnQgY29uc3QgY29udGV4dFN0b3JhZ2U6IEFzeW5jTG9jYWxTdG9yYWdlPFN0ZXBDb250ZXh0PiA9XG4gICgoZ2xvYmFsVGhpcyBhcyBhbnkpW0NPTlRFWFRfU1RPUkFHRV9TWU1CT0xdIGFzXG4gICAgfCBBc3luY0xvY2FsU3RvcmFnZTxTdGVwQ29udGV4dD5cbiAgICB8IHVuZGVmaW5lZCkgPz9cbiAgKChnbG9iYWxUaGlzIGFzIGFueSlbQ09OVEVYVF9TVE9SQUdFX1NZTUJPTF0gPVxuICAgIG5ldyBBc3luY0xvY2FsU3RvcmFnZTxTdGVwQ29udGV4dD4oKSk7XG4iXX0=
22
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGV4dC1zdG9yYWdlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3N0ZXAvY29udGV4dC1zdG9yYWdlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBeUVyRDs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFDSCxNQUFNLHNCQUFzQixHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsK0JBQStCLENBQUMsQ0FBQztBQUUzRSxNQUFNLENBQUMsTUFBTSxjQUFjLEdBQ3ZCLFVBQWtCLENBQUMsc0JBQXNCLENBRTdCO0lBQ2QsQ0FBRSxVQUFrQixDQUFDLHNCQUFzQixDQUFDO1FBQzFDLElBQUksaUJBQWlCLEVBQWUsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQXN5bmNMb2NhbFN0b3JhZ2UgfSBmcm9tICdub2RlOmFzeW5jX2hvb2tzJztcbmltcG9ydCB0eXBlIHsgUGF5bG9hZEtleSB9IGZyb20gJy4uL3NlcmlhbGl6YXRpb24vZW5jcnlwdGlvbi5qcyc7XG5pbXBvcnQgdHlwZSB7IEZsdXNoYWJsZVN0cmVhbVN0YXRlIH0gZnJvbSAnLi4vZmx1c2hhYmxlLXN0cmVhbS5qcyc7XG5pbXBvcnQgdHlwZSB7IFdvcmtmbG93TWV0YWRhdGEgfSBmcm9tICcuLi93b3JrZmxvdy9nZXQtd29ya2Zsb3ctbWV0YWRhdGEuanMnO1xuaW1wb3J0IHR5cGUgeyBTdGVwTWV0YWRhdGEgfSBmcm9tICcuL2dldC1zdGVwLW1ldGFkYXRhLmpzJztcblxuLyoqXG4gKiBQZXItc3RlcCBjYWNoZSBlbnRyeSBmb3IgYSBgKHJ1bklkLCBuYW1lc3BhY2UpYCB3cml0YWJsZSBzdHJlYW0uXG4gKlxuICogSG9sZHMgdGhlIHVzZXItZmFjaW5nIGBXcml0YWJsZVN0cmVhbWAgYW5kIHRoZSBzaGFyZWQgYEZsdXNoYWJsZVN0cmVhbVN0YXRlYFxuICogZHJpdmluZyB0aGUgYmFja2dyb3VuZCBwaXBlIHRvIHRoZSB3b3JrZmxvdyBzZXJ2ZXIuIFJlLXVzZWQgc28gcmVwZWF0IGNhbGxzXG4gKiB0byBgZ2V0V3JpdGFibGUoKWAgd2l0aGluIHRoZSBzYW1lIHN0ZXAgcmV0dXJuIHRoZSBzYW1lIGhhbmRsZSBpbnN0ZWFkIG9mXG4gKiBzcGF3bmluZyByYWNpbmcgcGlwZXMg4oCUIHNlZSBodHRwczovL2dpdGh1Yi5jb20vdmVyY2VsL3dvcmtmbG93L2lzc3Vlcy8yMDU4LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENhY2hlZFdyaXRhYmxlIHtcbiAgd3JpdGFibGU6IFdyaXRhYmxlU3RyZWFtPGFueT47XG4gIHN0YXRlOiBGbHVzaGFibGVTdHJlYW1TdGF0ZTtcbn1cblxuZXhwb3J0IHR5cGUgU3RlcENvbnRleHQgPSB7XG4gIHN0ZXBNZXRhZGF0YTogU3RlcE1ldGFkYXRhO1xuICB3b3JrZmxvd01ldGFkYXRhOiBXb3JrZmxvd01ldGFkYXRhO1xuICAvKiogRGVwbG95bWVudCB0aGF0IG93bnMgdGhlIGN1cnJlbnQgd29ya2Zsb3cgcnVuLCB1c2VkIGZvciBmb3J3YXJkZWQgc3RyZWFtcy4gKi9cbiAgd29ya2Zsb3dEZXBsb3ltZW50SWQ/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBSb290IHJ1biBpZCBvZiB0aGUgY3VycmVudCBydW4ncyBsaW5lYWdlIChgJHJvb3RSdW5JZGApLCBzbyBhIG5lc3RlZFxuICAgKiBgc3RhcnQoKWAgaW5oZXJpdHMgaXQgd2l0aG91dCByZWxvYWRpbmcgdGhlIHBhcmVudC4gU2V0IGJ5IHRoZSBydW50aW1lIGZyb21cbiAgICogdGhlIHJ1biBpdCBhbHJlYWR5IGhhcyBsb2FkZWQuXG4gICAqL1xuICByb290UnVuSWQ/OiBzdHJpbmc7XG4gIG9wczogUHJvbWlzZTx2b2lkPltdO1xuICAvKipcbiAgICogT3BlcmF0aW9ucyB0aGF0IE1VU1QgYmUgZHVyYWJseSBjb21taXR0ZWQgYmVmb3JlIHRoZSBzdGVwJ3NcbiAgICogYHN0ZXBfY29tcGxldGVkYC9gc3RlcF9mYWlsZWRgIGV2ZW50IGlzIHdyaXR0ZW4sIGJlY2F1c2UgdGhlIHdvcmtmbG93XG4gICAqIGNvbnRpbnVhdGlvbiB0cmlnZ2VyZWQgYnkgdGhhdCBldmVudCBkZXBlbmRzIG9uIHRoZW0uXG4gICAqXG4gICAqIFRoZSBjYW5vbmljYWwgY2FzZSBpcyBhIHN0ZXAtaW5pdGlhdGVkIGBBYm9ydENvbnRyb2xsZXIuYWJvcnQoKWA6IHRoZVxuICAgKiBkdXJhYmxlIGBob29rX3JlY2VpdmVkYCBldmVudCByZWNvcmRzIHRoZSBjYW5jZWxsYXRpb24gaW4gdGhlIHdvcmtmbG93J3NcbiAgICogZXZlbnQgbG9nLiBJZiBpdCBpcyBmbHVzaGVkIGluIHRoZSBiYWNrZ3JvdW5kIChsaWtlIGBvcHNgKSwgdGhlIHdvcmtmbG93XG4gICAqIGNvbnRpbnVhdGlvbiBlbnF1ZXVlZCBieSBgc3RlcF9jb21wbGV0ZWRgIGNhbiBydW4g4oCUIGFuZCBhZHZhbmNlIHBhc3QgdGhlXG4gICAqIGFib3J0LCBkaXNwYXRjaGluZyBhIGxhdGVyIHN0ZXAgd2l0aCBhIHN0YWxlLCBub24tYWJvcnRlZCBgc2lnbmFsYCDigJQgYmVmb3JlXG4gICAqIHRoZSBgaG9va19yZWNlaXZlZGAgZXZlbnQgZXhpc3RzLiBBd2FpdGluZyB0aGVzZSBpbmxpbmUgYmVmb3JlIGNvbXBsZXRpb25cbiAgICogZ3VhcmFudGVlcyB0aGUgYWJvcnQgaXMgb3JkZXJlZCBhaGVhZCBvZiBhbnkgY29udGludWF0aW9uIHRoYXQgb2JzZXJ2ZXMgdGhlXG4gICAqIHN0ZXAncyByZXN1bHQuIFVubGlrZSB0aGVzZSwgYG9wc2AgaG9sZHMgYmVzdC1lZmZvcnQgcmVhbC10aW1lIHN0cmVhbVxuICAgKiB3cml0ZXMgdGhhdCBzaG91bGQgZmlyZSBBU0FQIGFuZCBhcmUgaW50ZW50aW9uYWxseSBsZWZ0IGluIHRoZSBiYWNrZ3JvdW5kLlxuICAgKlxuICAgKiBDb250cmFjdDogcHJvZHVjZXJzIE1VU1QgTk9UIHB1c2ggYSBwcm9taXNlIHRoYXQgY2FuIHJlamVjdCDigJQgdGhlc2UgYXJlXG4gICAqIGF3YWl0ZWQgb25seSB0byBlbmZvcmNlIG9yZGVyaW5nLCBuZXZlciB0byBzdXJmYWNlIGFuIG91dGNvbWUuIEEgcmVqZWN0aW9uXG4gICAqIGhlcmUgd291bGQgcHJvcGFnYXRlIGFzIGFuIGluZnJhIGVycm9yIChxdWV1ZSByZS1kZWxpdmVyeSksIG5vdCB0aGVcbiAgICogdXNlci1jb2RlIGZhaWx1cmUgcGF0aCwgc28gZWFjaCBwcm9kdWNlciBzd2FsbG93cyBpdHMgb3duIGVycm9ycyAoc2VlXG4gICAqIGByZXZpdmVBYm9ydENvbnRyb2xsZXJgIGluIHNlcmlhbGl6YXRpb24udHMpLiBUaGUgYXdhaXQgc2l0ZXMgYWxzb1xuICAgKiBkZWZlbnNpdmVseSBgLmNhdGNoKClgIHNvIG9yZGVyaW5nIGlzIGFsbCB0aGlzIGJ1Y2tldCBjYW4gZXZlciBlbmZvcmNlLlxuICAgKlxuICAgKiBSZXF1aXJlZCAobm90IG9wdGlvbmFsKSBzbyBhIG5ldyBzdGVwLWNvbnRleHQgY29uc3RydWN0aW9uIHNpdGUgdGhhdFxuICAgKiBmb3JnZXRzIHRvIHdpcmUgaXQgZmFpbHMgYXQgY29tcGlsZSB0aW1lLCByYXRoZXIgdGhhbiBzaWxlbnRseSByZWdyZXNzaW5nXG4gICAqIHRoZSBvcmRlcmluZyBndWFyYW50ZWUgYmFjayB0byBiYWNrZ3JvdW5kLWZsdXNoIGJlaGF2aW9yLlxuICAgKi9cbiAgcHJlQ29tcGxldGlvbk9wczogUHJvbWlzZTx2b2lkPltdO1xuICBjbG9zdXJlVmFycz86IFJlY29yZDxzdHJpbmcsIGFueT47XG4gIGVuY3J5cHRpb25LZXk/OiBQYXlsb2FkS2V5O1xuICB3cml0YWJsZXM/OiBNYXA8c3RyaW5nLCBDYWNoZWRXcml0YWJsZT47XG4gIC8qKlxuICAgKiBUdXJibyBtb2RlIG9ubHk6IGEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIG9uY2UgdGhlIGJhY2tncm91bmRlZFxuICAgKiBgcnVuX3N0YXJ0ZWRgIGhhcyBsYW5kZWQgKHRoZSBydW4gZXhpc3RzKS4gU2V0IHdoZW4gdGhlIHN0ZXAgYm9keSBydW5zXG4gICAqIG9wdGltaXN0aWNhbGx5IOKAlCBiZWZvcmUgYHJ1bl9zdGFydGVkYC9gc3RlcF9zdGFydGVkYCBhcmUgY29uZmlybWVkIOKAlCBzbyBhXG4gICAqIGRpcmVjdCBzdGVwLWJvZHkgd29ybGQgd3JpdGUgKGUuZy4gYHNldEF0dHJpYnV0ZXNgLCB3aGljaFxuICAgKiByZXNvbHZlcyB0byBhIGhvc3Qtc2lkZSBgYXR0cl9zZXRgIGNyZWF0ZSkgY2FuIGdhdGUgb24gaXQgYW5kIG5ldmVyIHJhY2VcbiAgICogYWhlYWQgb2YgdGhlIHJ1bidzIGNyZWF0aW9uLiBgdW5kZWZpbmVkYCBvdXRzaWRlIHR1cmJvIGFuZCBvbiB0aGUgYXdhaXRcbiAgICogcGF0aCwgd2hlcmUgYHJ1bl9zdGFydGVkYCB3YXMgYWxyZWFkeSBkdXJhYmxlIGJlZm9yZSB0aGUgYm9keSByYW4uXG4gICAqL1xuICBydW5SZWFkeUJhcnJpZXI/OiBQcm9taXNlPHVua25vd24+O1xufTtcblxuLyoqXG4gKiBQcm9jZXNzLXdpZGUgc2luZ2xldG9uIEFzeW5jTG9jYWxTdG9yYWdlIGZvciBzdGVwIGV4ZWN1dGlvbiBjb250ZXh0LlxuICpcbiAqIFVzZXMgYFN5bWJvbC5mb3IoKWAgb24gZ2xvYmFsVGhpcyB0byBndWFyYW50ZWUgYSBzaW5nbGUgaW5zdGFuY2UgZXZlbiB3aGVuXG4gKiBidW5kbGVycyAoZS5nLiBWZXJjZWwncyBwcm9kdWN0aW9uIGJ1bmRsZXIpIGNyZWF0ZSBtdWx0aXBsZSBjb3BpZXMgb2YgdGhpc1xuICogbW9kdWxlLiBXaXRob3V0IHRoaXMsIGBjb250ZXh0U3RvcmFnZS5ydW4oKWAgaW4gdGhlIHN0ZXAgZXhlY3V0b3IgYW5kXG4gKiBgY29udGV4dFN0b3JhZ2UuZ2V0U3RvcmUoKWAgaW4gdXNlciBjb2RlICh2aWEgZ2V0V29ya2Zsb3dNZXRhZGF0YSAvXG4gKiBnZXRTdGVwTWV0YWRhdGEpIGNhbiByZWZlcmVuY2UgZGlmZmVyZW50IEFzeW5jTG9jYWxTdG9yYWdlIGluc3RhbmNlcyxcbiAqIGNhdXNpbmcgdGhlIHN0b3JlIHRvIGFwcGVhciBlbXB0eS5cbiAqXG4gKiBOb3RlIHRoYXQgd2Ugd2VyZSB1bmFibGUgdG8gcmVwcm9kdWNlIHRoaXMgaXNzdWUuIFRoaXMgaXMgYSBmaXggZm9yIHRoZSBvbmx5IHN5bnRoZXRpYyB3YXlcbiAqIHdheSBpbiB3aGljaCB3ZSBjb3VsZCBnZXQgdGhlIGJ1aWxkZXIgdG8gYnJlYWsgd2l0aCB0aGUgcmVwb3J0ZWQgZXJyb3IgbWVzc2FnZSwgYW5kXG4gKiBzZXJ2ZXMgYXMgZGVmZW5zZS1pbi1kZXB0aCwgc2luY2UgdGhlIGNoYW5nZSBpcyBvdGhlcndpc2Ugc2FmZS5cbiAqXG4gKiBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS92ZXJjZWwvd29ya2Zsb3cvaXNzdWVzLzE1NzdcbiAqL1xuY29uc3QgQ09OVEVYVF9TVE9SQUdFX1NZTUJPTCA9IFN5bWJvbC5mb3IoJ1dPUktGTE9XX1NURVBfQ09OVEVYVF9TVE9SQUdFJyk7XG5cbmV4cG9ydCBjb25zdCBjb250ZXh0U3RvcmFnZTogQXN5bmNMb2NhbFN0b3JhZ2U8U3RlcENvbnRleHQ+ID1cbiAgKChnbG9iYWxUaGlzIGFzIGFueSlbQ09OVEVYVF9TVE9SQUdFX1NZTUJPTF0gYXNcbiAgICB8IEFzeW5jTG9jYWxTdG9yYWdlPFN0ZXBDb250ZXh0PlxuICAgIHwgdW5kZWZpbmVkKSA/P1xuICAoKGdsb2JhbFRoaXMgYXMgYW55KVtDT05URVhUX1NUT1JBR0VfU1lNQk9MXSA9XG4gICAgbmV3IEFzeW5jTG9jYWxTdG9yYWdlPFN0ZXBDb250ZXh0PigpKTtcbiJdfQ==
@@ -1 +1 @@
1
- {"version":3,"file":"writable-stream.d.ts","sourceRoot":"","sources":["../../src/step/writable-stream.ts"],"names":[],"mappings":"AAmBA;;GAEG;AACH,MAAM,WAAW,6BAA6B;IAC5C;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;;;GASG;AACH,wBAAgB,WAAW,CAAC,CAAC,GAAG,GAAG,EACjC,OAAO,GAAE,6BAAkC,GAC1C,cAAc,CAAC,CAAC,CAAC,CAuGnB"}
1
+ {"version":3,"file":"writable-stream.d.ts","sourceRoot":"","sources":["../../src/step/writable-stream.ts"],"names":[],"mappings":"AAsBA;;GAEG;AACH,MAAM,WAAW,6BAA6B;IAC5C;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;;;GASG;AACH,wBAAgB,WAAW,CAAC,CAAC,GAAG,GAAG,EACjC,OAAO,GAAE,6BAAkC,GAC1C,cAAc,CAAC,CAAC,CAAC,CAiHnB"}
@@ -1,7 +1,8 @@
1
1
  import { throwNotInWorkflowOrStepContext } from '../context-errors.js';
2
2
  import { createFlushableState, flushablePipe, pollWritableLock, } from '../flushable-stream.js';
3
- import { getExternalReducers, getSerializeStream, WorkflowServerWritableStream, } from '../serialization.js';
4
- import { STREAM_NAME_SYMBOL, STREAM_SERVER_DEPLOYMENT_ID_SYMBOL, STREAM_SERVER_RUN_ID_SYMBOL, } from '../symbols.js';
3
+ import { bytesToBase64 } from '../sealed-box.js';
4
+ import { getExternalReducers, getSerializeStream, isRunPayloadKeys, WorkflowServerWritableStream, } from '../serialization.js';
5
+ import { STREAM_NAME_SYMBOL, STREAM_SERVER_DEPLOYMENT_ID_SYMBOL, STREAM_SERVER_PUBLIC_KEY_SYMBOL, STREAM_SERVER_RUN_ID_SYMBOL, } from '../symbols.js';
5
6
  import { getWorkflowRunStreamId } from '../util.js';
6
7
  import { contextStorage } from './context-storage.js';
7
8
  /**
@@ -85,7 +86,17 @@ export function getWritable(options = {}) {
85
86
  writable: false,
86
87
  });
87
88
  }
89
+ // Publish this run's X25519 public key on the handle so that a run this
90
+ // writable is forwarded to can seal frames without looking anything up.
91
+ // The key is already resolved on the step context, so this costs nothing
92
+ // here and saves the receiver a round trip.
93
+ if (isRunPayloadKeys(ctx.encryptionKey)) {
94
+ Object.defineProperty(serialize.writable, STREAM_SERVER_PUBLIC_KEY_SYMBOL, {
95
+ value: bytesToBase64(ctx.encryptionKey.keyPair.publicKey),
96
+ writable: false,
97
+ });
98
+ }
88
99
  cache.set(name, { writable: serialize.writable, state });
89
100
  return serialize.writable;
90
101
  }
91
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid3JpdGFibGUtc3RyZWFtLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3N0ZXAvd3JpdGFibGUtc3RyZWFtLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSwrQkFBK0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3ZFLE9BQU8sRUFDTCxvQkFBb0IsRUFDcEIsYUFBYSxFQUNiLGdCQUFnQixHQUNqQixNQUFNLHdCQUF3QixDQUFDO0FBQ2hDLE9BQU8sRUFDTCxtQkFBbUIsRUFDbkIsa0JBQWtCLEVBQ2xCLDRCQUE0QixHQUM3QixNQUFNLHFCQUFxQixDQUFDO0FBQzdCLE9BQU8sRUFDTCxrQkFBa0IsRUFDbEIsa0NBQWtDLEVBQ2xDLDJCQUEyQixHQUM1QixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDcEQsT0FBTyxFQUF1QixjQUFjLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQWEzRTs7Ozs7Ozs7O0dBU0c7QUFDSCxNQUFNLFVBQVUsV0FBVyxDQUN6QixVQUF5QyxFQUFFO0lBRTNDLE1BQU0sR0FBRyxHQUFHLGNBQWMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUN0QyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDVCwrQkFBK0IsQ0FDN0IsZUFBZSxFQUNmLG1FQUFtRSxFQUNuRSxXQUFXLENBQ1osQ0FBQztJQUNKLENBQUM7SUFFRCxNQUFNLEVBQUUsU0FBUyxFQUFFLEdBQUcsT0FBTyxDQUFDO0lBQzlCLE1BQU0sS0FBSyxHQUFHLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxhQUFhLENBQUM7SUFDakQsTUFBTSxJQUFJLEdBQUcsc0JBQXNCLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBRXRELHFFQUFxRTtJQUNyRSxFQUFFO0lBQ0YsbUVBQW1FO0lBQ25FLG1FQUFtRTtJQUNuRSxnRUFBZ0U7SUFDaEUsc0VBQXNFO0lBQ3RFLGdFQUFnRTtJQUNoRSx3RUFBd0U7SUFDeEUsRUFBRTtJQUNGLGlFQUFpRTtJQUNqRSxtRUFBbUU7SUFDbkUsaUNBQWlDO0lBQ2pDLGtEQUFrRDtJQUNsRCxNQUFNLEtBQUssR0FBRyxDQUFDLEdBQUcsQ0FBQyxTQUFTLEtBQUssSUFBSSxHQUFHLEVBQTBCLENBQUMsQ0FBQztJQUNwRSxNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQy9CLElBQUksTUFBTSxFQUFFLENBQUM7UUFDWCxPQUFPLE1BQU0sQ0FBQyxRQUE2QixDQUFDO0lBQzlDLENBQUM7SUFFRCxxRkFBcUY7SUFDckYscUVBQXFFO0lBQ3JFLHVFQUF1RTtJQUN2RSwrQkFBK0I7SUFDL0IsTUFBTSxTQUFTLEdBQUcsa0JBQWtCO0lBQ2xDLDJFQUEyRTtJQUMzRSw0RUFBNEU7SUFDNUUscUVBQXFFO0lBQ3JFLHVEQUF1RDtJQUN2RCxtQkFBbUIsQ0FDakIsVUFBVSxFQUNWLEdBQUcsQ0FBQyxHQUFHLEVBQ1AsS0FBSyxFQUNMLEdBQUcsQ0FBQyxhQUFhLEVBQ2pCLElBQUksRUFDSixHQUFHLENBQUMsZUFBZSxDQUNwQixFQUNELEdBQUcsQ0FBQyxhQUFhLENBQ2xCLENBQUM7SUFFRix3RUFBd0U7SUFDeEUsb0VBQW9FO0lBQ3BFLHdFQUF3RTtJQUN4RSwyQ0FBMkM7SUFDM0MsMkVBQTJFO0lBQzNFLDRFQUE0RTtJQUM1RSw2RUFBNkU7SUFDN0UsTUFBTSxjQUFjLEdBQUcsSUFBSSw0QkFBNEIsQ0FDckQsS0FBSyxFQUNMLElBQUksRUFDSixHQUFHLENBQUMsZUFBZSxDQUNwQixDQUFDO0lBQ0YsTUFBTSxLQUFLLEdBQUcsb0JBQW9CLEVBQUUsQ0FBQztJQUNyQyxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7SUFFNUIsYUFBYSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsY0FBYyxFQUFFLEtBQUssQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUU7UUFDbEUsc0NBQXNDO0lBQ3hDLENBQUMsQ0FBQyxDQUFDO0lBRUgsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUU1QyxxRUFBcUU7SUFDckUsZ0VBQWdFO0lBQ2hFLGtFQUFrRTtJQUNsRSxpRUFBaUU7SUFDakUsNkRBQTZEO0lBQzdELDhEQUE4RDtJQUM5RCxrREFBa0Q7SUFDbEQsTUFBTSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLGtCQUFrQixFQUFFO1FBQzVELEtBQUssRUFBRSxJQUFJO1FBQ1gsUUFBUSxFQUFFLEtBQUs7S0FDaEIsQ0FBQyxDQUFDO0lBQ0gsTUFBTSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLDJCQUEyQixFQUFFO1FBQ3JFLEtBQUssRUFBRSxLQUFLO1FBQ1osUUFBUSxFQUFFLEtBQUs7S0FDaEIsQ0FBQyxDQUFDO0lBQ0gsSUFBSSxHQUFHLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztRQUM3QixNQUFNLENBQUMsY0FBYyxDQUNuQixTQUFTLENBQUMsUUFBUSxFQUNsQixrQ0FBa0MsRUFDbEM7WUFDRSxLQUFLLEVBQUUsR0FBRyxDQUFDLG9CQUFvQjtZQUMvQixRQUFRLEVBQUUsS0FBSztTQUNoQixDQUNGLENBQUM7SUFDSixDQUFDO0lBRUQsS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsRUFBRSxRQUFRLEVBQUUsU0FBUyxDQUFDLFFBQVEsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBRXpELE9BQU8sU0FBUyxDQUFDLFFBQTZCLENBQUM7QUFDakQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHRocm93Tm90SW5Xb3JrZmxvd09yU3RlcENvbnRleHQgfSBmcm9tICcuLi9jb250ZXh0LWVycm9ycy5qcyc7XG5pbXBvcnQge1xuICBjcmVhdGVGbHVzaGFibGVTdGF0ZSxcbiAgZmx1c2hhYmxlUGlwZSxcbiAgcG9sbFdyaXRhYmxlTG9jayxcbn0gZnJvbSAnLi4vZmx1c2hhYmxlLXN0cmVhbS5qcyc7XG5pbXBvcnQge1xuICBnZXRFeHRlcm5hbFJlZHVjZXJzLFxuICBnZXRTZXJpYWxpemVTdHJlYW0sXG4gIFdvcmtmbG93U2VydmVyV3JpdGFibGVTdHJlYW0sXG59IGZyb20gJy4uL3NlcmlhbGl6YXRpb24uanMnO1xuaW1wb3J0IHtcbiAgU1RSRUFNX05BTUVfU1lNQk9MLFxuICBTVFJFQU1fU0VSVkVSX0RFUExPWU1FTlRfSURfU1lNQk9MLFxuICBTVFJFQU1fU0VSVkVSX1JVTl9JRF9TWU1CT0wsXG59IGZyb20gJy4uL3N5bWJvbHMuanMnO1xuaW1wb3J0IHsgZ2V0V29ya2Zsb3dSdW5TdHJlYW1JZCB9IGZyb20gJy4uL3V0aWwuanMnO1xuaW1wb3J0IHsgdHlwZSBDYWNoZWRXcml0YWJsZSwgY29udGV4dFN0b3JhZ2UgfSBmcm9tICcuL2NvbnRleHQtc3RvcmFnZS5qcyc7XG5cbi8qKlxuICogVGhlIG9wdGlvbnMgZm9yIHtAbGluayBnZXRXcml0YWJsZX0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgV29ya2Zsb3dXcml0YWJsZVN0cmVhbU9wdGlvbnMge1xuICAvKipcbiAgICogQW4gb3B0aW9uYWwgbmFtZXNwYWNlIHRvIGRpc3Rpbmd1aXNoIGJldHdlZW4gbXVsdGlwbGUgc3RyZWFtcyBhc3NvY2lhdGVkXG4gICAqIHdpdGggdGhlIHNhbWUgd29ya2Zsb3cgcnVuLlxuICAgKi9cbiAgbmFtZXNwYWNlPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFJldHJpZXZlcyBhIHdyaXRhYmxlIHN0cmVhbSB0aGF0IGlzIGFzc29jaWF0ZWQgd2l0aCB0aGUgY3VycmVudCB3b3JrZmxvdy5cbiAqXG4gKiBUaGUgd3JpdGFibGUgc3RyZWFtIGlzIGludGVuZGVkIHRvIGJlIHVzZWQgd2l0aGluIHN0ZXAgZnVuY3Rpb25zIHRvIHdyaXRlXG4gKiBkYXRhIHRoYXQgY2FuIGJlIHJlYWQgb3V0c2lkZSB0aGUgd29ya2Zsb3cgYnkgdXNpbmcgdGhlIHJlYWRhYmxlIG1ldGhvZCBvZiBnZXRSdW4uXG4gKlxuICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25hbCBjb25maWd1cmF0aW9uIGZvciB0aGUgd3JpdGFibGUgc3RyZWFtXG4gKiBAcmV0dXJucyBUaGUgd3JpdGFibGUgc3RyZWFtIGFzc29jaWF0ZWQgd2l0aCB0aGUgY3VycmVudCB3b3JrZmxvdyBydW5cbiAqIEB0aHJvd3MgRXJyb3IgaWYgY2FsbGVkIG91dHNpZGUgYSB3b3JrZmxvdyBvciBzdGVwIGZ1bmN0aW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRXcml0YWJsZTxXID0gYW55PihcbiAgb3B0aW9uczogV29ya2Zsb3dXcml0YWJsZVN0cmVhbU9wdGlvbnMgPSB7fVxuKTogV3JpdGFibGVTdHJlYW08Vz4ge1xuICBjb25zdCBjdHggPSBjb250ZXh0U3RvcmFnZS5nZXRTdG9yZSgpO1xuICBpZiAoIWN0eCkge1xuICAgIHRocm93Tm90SW5Xb3JrZmxvd09yU3RlcENvbnRleHQoXG4gICAgICAnZ2V0V3JpdGFibGUoKScsXG4gICAgICAnaHR0cHM6Ly93b3JrZmxvdy1zZGsuZGV2L2RvY3MvYXBpLXJlZmVyZW5jZS93b3JrZmxvdy9nZXQtd3JpdGFibGUnLFxuICAgICAgZ2V0V3JpdGFibGVcbiAgICApO1xuICB9XG5cbiAgY29uc3QgeyBuYW1lc3BhY2UgfSA9IG9wdGlvbnM7XG4gIGNvbnN0IHJ1bklkID0gY3R4LndvcmtmbG93TWV0YWRhdGEud29ya2Zsb3dSdW5JZDtcbiAgY29uc3QgbmFtZSA9IGdldFdvcmtmbG93UnVuU3RyZWFtSWQocnVuSWQsIG5hbWVzcGFjZSk7XG5cbiAgLy8gQ2FjaGUgdGhlIHdyaXRhYmxlIHBlciAocnVuSWQsIG5hbWVzcGFjZSkgd2l0aGluIHRoZSBzdGVwIGNvbnRleHQuXG4gIC8vXG4gIC8vIFRoZSBwcmV2aW91cyBiZWhhdmlvciDigJQgY29uc3RydWN0aW5nIGEgZnJlc2ggVHJhbnNmb3JtU3RyZWFtIGFuZFxuICAvLyBiYWNrZ3JvdW5kIHBpcGUgb24gZXZlcnkgY2FsbCDigJQgcHJvZHVjZWQgbm9uLWRldGVybWluaXN0aWMgY2h1bmtcbiAgLy8gb3JkZXJpbmcgd2hlbiBjYWxsZXJzIGFjcXVpcmVkIGEgbmV3IHdyaXRlciBwZXIgd3JpdGUgKGUuZy4gYVxuICAvLyBwZXItY2h1bmsgbG9vcCkuIEVhY2ggcGlwZSBmbHVzaGVkIHRvIHRoZSBzYW1lIChydW5JZCwgbmFtZSkgc2VydmVyXG4gIC8vIHN0cmVhbSBpbmRlcGVuZGVudGx5LCBhbmQgb24gVmVyY2VsIHRoZSA1MC0xMDBtcyBIVFRQIGxhdGVuY3lcbiAgLy8gdHVybmVkIHRoZSByYWNlIHdpbmRvdyBmcm9tIG1pY3Jvc2Vjb25kcyBpbnRvIHNvbWV0aGluZyBwcm9kLXZpc2libGUuXG4gIC8vXG4gIC8vIFNoYXJpbmcgYSBzaW5nbGUgVHJhbnNmb3JtU3RyZWFtICsgcGlwZSBhY3Jvc3MgY2FsbHMgbWFrZXMgdGhlXG4gIC8vIHVuc2FmZSBwYXR0ZXJuIGNvcnJlY3Q6IHdyaXRlcyBnbyB0aHJvdWdoIG9uZSBzZXJpYWwgc2luayBpbiB0aGVcbiAgLy8gb3JkZXIgdGhlIHVzZXIgd3JvdGUgdGhlbS4gU2VlXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS92ZXJjZWwvd29ya2Zsb3cvaXNzdWVzLzIwNTguXG4gIGNvbnN0IGNhY2hlID0gKGN0eC53cml0YWJsZXMgPz89IG5ldyBNYXA8c3RyaW5nLCBDYWNoZWRXcml0YWJsZT4oKSk7XG4gIGNvbnN0IGNhY2hlZCA9IGNhY2hlLmdldChuYW1lKTtcbiAgaWYgKGNhY2hlZCkge1xuICAgIHJldHVybiBjYWNoZWQud3JpdGFibGUgYXMgV3JpdGFibGVTdHJlYW08Vz47XG4gIH1cblxuICAvLyBDcmVhdGUgYSB0cmFuc2Zvcm0gc3RyZWFtIHRoYXQgc2VyaWFsaXplcyBjaHVua3MgYW5kIHBpcGVzIHRvIHRoZSB3b3JrZmxvdyBzZXJ2ZXIuXG4gIC8vIFRoZSB0YXJnZXQgcnVuIGlzIHRoZSB3b3JrZmxvdyBydW4gdGhhdCBvd25zIHRoaXMgc3RlcCwgd2hpY2ggKHBlclxuICAvLyB2ZXJzaW9uIHNrZXcgcHJvdGVjdGlvbikgaXMgb24gdGhpcyBzYW1lIFNESyB2ZXJzaW9uLCBzbyBieXRlLXN0cmVhbVxuICAvLyBmcmFtaW5nIGlzIGFsd2F5cyBzYWZlIGhlcmUuXG4gIGNvbnN0IHNlcmlhbGl6ZSA9IGdldFNlcmlhbGl6ZVN0cmVhbShcbiAgICAvLyBJbiB0dXJibyBvcHRpbWlzdGljIHN0YXJ0IHRoZSBib2R5IHJ1bnMgYmVmb3JlIGBydW5fc3RhcnRlZGAgaXMgZHVyYWJsZS5cbiAgICAvLyBUaHJlYWQgdGhlIHJ1bi1yZWFkeSBiYXJyaWVyIHNvIHRoYXQgYSBuZXN0ZWQgUmVhZGFibGVTdHJlYW0gd3JpdHRlbiBpbnRvXG4gICAgLy8gdGhpcyB3cml0YWJsZSBpcyBwaXBlZCB0byBpdHMgb3duIHNlcnZlciBzdHJlYW0gb25seSBhZnRlciB0aGUgcnVuXG4gICAgLy8gZXhpc3RzLiBVbmRlZmluZWQgb3V0c2lkZSB0dXJibyAvIG9uIHRoZSBhd2FpdCBwYXRoLlxuICAgIGdldEV4dGVybmFsUmVkdWNlcnMoXG4gICAgICBnbG9iYWxUaGlzLFxuICAgICAgY3R4Lm9wcyxcbiAgICAgIHJ1bklkLFxuICAgICAgY3R4LmVuY3J5cHRpb25LZXksXG4gICAgICB0cnVlLFxuICAgICAgY3R4LnJ1blJlYWR5QmFycmllclxuICAgICksXG4gICAgY3R4LmVuY3J5cHRpb25LZXlcbiAgKTtcblxuICAvLyBVc2UgZmx1c2hhYmxlIHBpcGUgc28gdGhlIG9wcyBwcm9taXNlIHJlc29sdmVzIHdoZW4gdGhlIHVzZXIgcmVsZWFzZXNcbiAgLy8gdGhlaXIgd3JpdGVyIGxvY2ssIG5vdCBvbmx5IHdoZW4gdGhlIHN0cmVhbSBpcyBleHBsaWNpdGx5IGNsb3NlZC5cbiAgLy8gV2l0aG91dCB0aGlzLCBWZXJjZWwgZnVuY3Rpb25zIGhhbmcgdW50aWwgdGhlIHJ1bnRpbWUgdGltZW91dCBiZWNhdXNlXG4gIC8vIC5waXBlVG8oKSBvbmx5IHJlc29sdmVzIG9uIHN0cmVhbSBjbG9zZS5cbiAgLy8gSW4gdHVyYm8gb3B0aW1pc3RpYyBzdGFydCB0aGUgYm9keSBydW5zIGJlZm9yZSBgcnVuX3N0YXJ0ZWRgIGlzIGR1cmFibGU7XG4gIC8vIHBhc3MgdGhlIHJ1bi1yZWFkeSBiYXJyaWVyIHNvIHRoZSBmaXJzdCBzZXJ2ZXIgd3JpdGUgb3JkZXJzIGFmdGVyIHRoZSBydW5cbiAgLy8gZXhpc3RzLiBVbmRlZmluZWQgb3V0c2lkZSB0dXJibyAvIG9uIHRoZSBhd2FpdCBwYXRoIChydW4gYWxyZWFkeSBkdXJhYmxlKS5cbiAgY29uc3Qgc2VydmVyV3JpdGFibGUgPSBuZXcgV29ya2Zsb3dTZXJ2ZXJXcml0YWJsZVN0cmVhbShcbiAgICBydW5JZCxcbiAgICBuYW1lLFxuICAgIGN0eC5ydW5SZWFkeUJhcnJpZXJcbiAgKTtcbiAgY29uc3Qgc3RhdGUgPSBjcmVhdGVGbHVzaGFibGVTdGF0ZSgpO1xuICBjdHgub3BzLnB1c2goc3RhdGUucHJvbWlzZSk7XG5cbiAgZmx1c2hhYmxlUGlwZShzZXJpYWxpemUucmVhZGFibGUsIHNlcnZlcldyaXRhYmxlLCBzdGF0ZSkuY2F0Y2goKCkgPT4ge1xuICAgIC8vIEVycm9ycyBhcmUgaGFuZGxlZCB2aWEgc3RhdGUucmVqZWN0XG4gIH0pO1xuXG4gIHBvbGxXcml0YWJsZUxvY2soc2VyaWFsaXplLndyaXRhYmxlLCBzdGF0ZSk7XG5cbiAgLy8gVGFnIHRoZSB3cml0YWJsZSB3aXRoIGl0cyB1bmRlcmx5aW5nIGAocnVuSWQsIG5hbWUpYCBzbyBkb3duc3RyZWFtXG4gIC8vIHJlZHVjZXJzIGNhbiByZWNvZ25pemUgdGhhdCBpdCdzIGFscmVhZHkgYmFja2VkIGJ5IGEgd29ya2Zsb3dcbiAgLy8gc2VydmVyIHN0cmVhbS4gQ2FsbGluZyBgc3RhcnQoY2hpbGQsIFthcmdzLCB0aGVXcml0YWJsZV0pYCBmcm9tXG4gIC8vIHRoZSBzYW1lIHN0ZXAgdXNlcyB0aGVzZSB0YWdzIHRvIGVtaXQgYHsgbmFtZSwgcnVuSWQgfWAgaW4gdGhlXG4gIC8vIGRlaHlkcmF0ZWQgZGVzY3JpcHRvciwgc28gdGhlIGNoaWxkJ3MgcmV2aXZlciBjYW4gb3BlbiB0aGVcbiAgLy8gd3JpdGFibGUgYWdhaW5zdCB0aGUgb3JpZ2luYWwgYChydW5JZCwgbmFtZSlgIGRpcmVjdGx5IOKAlCBub1xuICAvLyBpbi1wcm9jZXNzIGJyaWRnZSB0aWVkIHRvIHRoaXMgc3RlcCdzIGxpZmV0aW1lLlxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoc2VyaWFsaXplLndyaXRhYmxlLCBTVFJFQU1fTkFNRV9TWU1CT0wsIHtcbiAgICB2YWx1ZTogbmFtZSxcbiAgICB3cml0YWJsZTogZmFsc2UsXG4gIH0pO1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoc2VyaWFsaXplLndyaXRhYmxlLCBTVFJFQU1fU0VSVkVSX1JVTl9JRF9TWU1CT0wsIHtcbiAgICB2YWx1ZTogcnVuSWQsXG4gICAgd3JpdGFibGU6IGZhbHNlLFxuICB9KTtcbiAgaWYgKGN0eC53b3JrZmxvd0RlcGxveW1lbnRJZCkge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShcbiAgICAgIHNlcmlhbGl6ZS53cml0YWJsZSxcbiAgICAgIFNUUkVBTV9TRVJWRVJfREVQTE9ZTUVOVF9JRF9TWU1CT0wsXG4gICAgICB7XG4gICAgICAgIHZhbHVlOiBjdHgud29ya2Zsb3dEZXBsb3ltZW50SWQsXG4gICAgICAgIHdyaXRhYmxlOiBmYWxzZSxcbiAgICAgIH1cbiAgICApO1xuICB9XG5cbiAgY2FjaGUuc2V0KG5hbWUsIHsgd3JpdGFibGU6IHNlcmlhbGl6ZS53cml0YWJsZSwgc3RhdGUgfSk7XG5cbiAgcmV0dXJuIHNlcmlhbGl6ZS53cml0YWJsZSBhcyBXcml0YWJsZVN0cmVhbTxXPjtcbn1cbiJdfQ==
102
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid3JpdGFibGUtc3RyZWFtLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3N0ZXAvd3JpdGFibGUtc3RyZWFtLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSwrQkFBK0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3ZFLE9BQU8sRUFDTCxvQkFBb0IsRUFDcEIsYUFBYSxFQUNiLGdCQUFnQixHQUNqQixNQUFNLHdCQUF3QixDQUFDO0FBQ2hDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNqRCxPQUFPLEVBQ0wsbUJBQW1CLEVBQ25CLGtCQUFrQixFQUNsQixnQkFBZ0IsRUFDaEIsNEJBQTRCLEdBQzdCLE1BQU0scUJBQXFCLENBQUM7QUFDN0IsT0FBTyxFQUNMLGtCQUFrQixFQUNsQixrQ0FBa0MsRUFDbEMsK0JBQStCLEVBQy9CLDJCQUEyQixHQUM1QixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDcEQsT0FBTyxFQUF1QixjQUFjLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQWEzRTs7Ozs7Ozs7O0dBU0c7QUFDSCxNQUFNLFVBQVUsV0FBVyxDQUN6QixVQUF5QyxFQUFFO0lBRTNDLE1BQU0sR0FBRyxHQUFHLGNBQWMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUN0QyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDVCwrQkFBK0IsQ0FDN0IsZUFBZSxFQUNmLG1FQUFtRSxFQUNuRSxXQUFXLENBQ1osQ0FBQztJQUNKLENBQUM7SUFFRCxNQUFNLEVBQUUsU0FBUyxFQUFFLEdBQUcsT0FBTyxDQUFDO0lBQzlCLE1BQU0sS0FBSyxHQUFHLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxhQUFhLENBQUM7SUFDakQsTUFBTSxJQUFJLEdBQUcsc0JBQXNCLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBRXRELHFFQUFx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RSxLQUFLO1NBQ2hCLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxFQUFFLFFBQVEsRUFBRSxTQUFTLENBQUMsUUFBUSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7SUFFekQsT0FBTyxTQUFTLENBQUMsUUFBNkIsQ0FBQztBQUNqRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdGhyb3dOb3RJbldvcmtmbG93T3JTdGVwQ29udGV4dCB9IGZyb20gJy4uL2NvbnRleHQtZXJyb3JzLmpzJztcbmltcG9ydCB7XG4gIGNyZWF0ZUZsdXNoYWJsZVN0YXRlLFxuICBmbHVzaGFibGVQaXBlLFxuICBwb2xsV3JpdGFibGVMb2NrLFxufSBmcm9tICcuLi9mbHVzaGFibGUtc3RyZWFtLmpzJztcbmltcG9ydCB7IGJ5dGVzVG9CYXNlNjQgfSBmcm9tICcuLi9zZWFsZWQtYm94LmpzJztcbmltcG9ydCB7XG4gIGdldEV4dGVybmFsUmVkdWNlcnMsXG4gIGdldFNlcmlhbGl6ZVN0cmVhbSxcbiAgaXNSdW5QYXlsb2FkS2V5cyxcbiAgV29ya2Zsb3dTZXJ2ZXJXcml0YWJsZVN0cmVhbSxcbn0gZnJvbSAnLi4vc2VyaWFsaXphdGlvbi5qcyc7XG5pbXBvcnQge1xuICBTVFJFQU1fTkFNRV9TWU1CT0wsXG4gIFNUUkVBTV9TRVJWRVJfREVQTE9ZTUVOVF9JRF9TWU1CT0wsXG4gIFNUUkVBTV9TRVJWRVJfUFVCTElDX0tFWV9TWU1CT0wsXG4gIFNUUkVBTV9TRVJWRVJfUlVOX0lEX1NZTUJPTCxcbn0gZnJvbSAnLi4vc3ltYm9scy5qcyc7XG5pbXBvcnQgeyBnZXRXb3JrZmxvd1J1blN0cmVhbUlkIH0gZnJvbSAnLi4vdXRpbC5qcyc7XG5pbXBvcnQgeyB0eXBlIENhY2hlZFdyaXRhYmxlLCBjb250ZXh0U3RvcmFnZSB9IGZyb20gJy4vY29udGV4dC1zdG9yYWdlLmpzJztcblxuLyoqXG4gKiBUaGUgb3B0aW9ucyBmb3Ige0BsaW5rIGdldFdyaXRhYmxlfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBXb3JrZmxvd1dyaXRhYmxlU3RyZWFtT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBBbiBvcHRpb25hbCBuYW1lc3BhY2UgdG8gZGlzdGluZ3Vpc2ggYmV0d2VlbiBtdWx0aXBsZSBzdHJlYW1zIGFzc29jaWF0ZWRcbiAgICogd2l0aCB0aGUgc2FtZSB3b3JrZmxvdyBydW4uXG4gICAqL1xuICBuYW1lc3BhY2U/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogUmV0cmlldmVzIGEgd3JpdGFibGUgc3RyZWFtIHRoYXQgaXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBjdXJyZW50IHdvcmtmbG93LlxuICpcbiAqIFRoZSB3cml0YWJsZSBzdHJlYW0gaXMgaW50ZW5kZWQgdG8gYmUgdXNlZCB3aXRoaW4gc3RlcCBmdW5jdGlvbnMgdG8gd3JpdGVcbiAqIGRhdGEgdGhhdCBjYW4gYmUgcmVhZCBvdXRzaWRlIHRoZSB3b3JrZmxvdyBieSB1c2luZyB0aGUgcmVhZGFibGUgbWV0aG9kIG9mIGdldFJ1bi5cbiAqXG4gKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbmFsIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSB3cml0YWJsZSBzdHJlYW1cbiAqIEByZXR1cm5zIFRoZSB3cml0YWJsZSBzdHJlYW0gYXNzb2NpYXRlZCB3aXRoIHRoZSBjdXJyZW50IHdvcmtmbG93IHJ1blxuICogQHRocm93cyBFcnJvciBpZiBjYWxsZWQgb3V0c2lkZSBhIHdvcmtmbG93IG9yIHN0ZXAgZnVuY3Rpb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFdyaXRhYmxlPFcgPSBhbnk+KFxuICBvcHRpb25zOiBXb3JrZmxvd1dyaXRhYmxlU3RyZWFtT3B0aW9ucyA9IHt9XG4pOiBXcml0YWJsZVN0cmVhbTxXPiB7XG4gIGNvbnN0IGN0eCA9IGNvbnRleHRTdG9yYWdlLmdldFN0b3JlKCk7XG4gIGlmICghY3R4KSB7XG4gICAgdGhyb3dOb3RJbldvcmtmbG93T3JTdGVwQ29udGV4dChcbiAgICAgICdnZXRXcml0YWJsZSgpJyxcbiAgICAgICdodHRwczovL3dvcmtmbG93LXNkay5kZXYvZG9jcy9hcGktcmVmZXJlbmNlL3dvcmtmbG93L2dldC13cml0YWJsZScsXG4gICAgICBnZXRXcml0YWJsZVxuICAgICk7XG4gIH1cblxuICBjb25zdCB7IG5hbWVzcGFjZSB9ID0gb3B0aW9ucztcbiAgY29uc3QgcnVuSWQgPSBjdHgud29ya2Zsb3dNZXRhZGF0YS53b3JrZmxvd1J1bklkO1xuICBjb25zdCBuYW1lID0gZ2V0V29ya2Zsb3dSdW5TdHJlYW1JZChydW5JZCwgbmFtZXNwYWNlKTtcblxuICAvLyBDYWNoZSB0aGUgd3JpdGFibGUgcGVyIChydW5JZCwgbmFtZXNwYWNlKSB3aXRoaW4gdGhlIHN0ZXAgY29udGV4dC5cbiAgLy9cbiAgLy8gVGhlIHByZXZpb3VzIGJlaGF2aW9yIOKAlCBjb25zdHJ1Y3RpbmcgYSBmcmVzaCBUcmFuc2Zvcm1TdHJlYW0gYW5kXG4gIC8vIGJhY2tncm91bmQgcGlwZSBvbiBldmVyeSBjYWxsIOKAlCBwcm9kdWNlZCBub24tZGV0ZXJtaW5pc3RpYyBjaHVua1xuICAvLyBvcmRlcmluZyB3aGVuIGNhbGxlcnMgYWNxdWlyZWQgYSBuZXcgd3JpdGVyIHBlciB3cml0ZSAoZS5nLiBhXG4gIC8vIHBlci1jaHVuayBsb29wKS4gRWFjaCBwaXBlIGZsdXNoZWQgdG8gdGhlIHNhbWUgKHJ1bklkLCBuYW1lKSBzZXJ2ZXJcbiAgLy8gc3RyZWFtIGluZGVwZW5kZW50bHksIGFuZCBvbiBWZXJjZWwgdGhlIDUwLTEwMG1zIEhUVFAgbGF0ZW5jeVxuICAvLyB0dXJuZWQgdGhlIHJhY2Ugd2luZG93IGZyb20gbWljcm9zZWNvbmRzIGludG8gc29tZXRoaW5nIHByb2QtdmlzaWJsZS5cbiAgLy9cbiAgLy8gU2hhcmluZyBhIHNpbmdsZSBUcmFuc2Zvcm1TdHJlYW0gKyBwaXBlIGFjcm9zcyBjYWxscyBtYWtlcyB0aGVcbiAgLy8gdW5zYWZlIHBhdHRlcm4gY29ycmVjdDogd3JpdGVzIGdvIHRocm91Z2ggb25lIHNlcmlhbCBzaW5rIGluIHRoZVxuICAvLyBvcmRlciB0aGUgdXNlciB3cm90ZSB0aGVtLiBTZWVcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3ZlcmNlbC93b3JrZmxvdy9pc3N1ZXMvMjA1OC5cbiAgY29uc3QgY2FjaGUgPSAoY3R4LndyaXRhYmxlcyA/Pz0gbmV3IE1hcDxzdHJpbmcsIENhY2hlZFdyaXRhYmxlPigpKTtcbiAgY29uc3QgY2FjaGVkID0gY2FjaGUuZ2V0KG5hbWUpO1xuICBpZiAoY2FjaGVkKSB7XG4gICAgcmV0dXJuIGNhY2hlZC53cml0YWJsZSBhcyBXcml0YWJsZVN0cmVhbTxXPjtcbiAgfVxuXG4gIC8vIENyZWF0ZSBhIHRyYW5zZm9ybSBzdHJlYW0gdGhhdCBzZXJpYWxpemVzIGNodW5rcyBhbmQgcGlwZXMgdG8gdGhlIHdvcmtmbG93IHNlcnZlci5cbiAgLy8gVGhlIHRhcmdldCBydW4gaXMgdGhlIHdvcmtmbG93IHJ1biB0aGF0IG93bnMgdGhpcyBzdGVwLCB3aGljaCAocGVyXG4gIC8vIHZlcnNpb24gc2tldyBwcm90ZWN0aW9uKSBpcyBvbiB0aGlzIHNhbWUgU0RLIHZlcnNpb24sIHNvIGJ5dGUtc3RyZWFtXG4gIC8vIGZyYW1pbmcgaXMgYWx3YXlzIHNhZmUgaGVyZS5cbiAgY29uc3Qgc2VyaWFsaXplID0gZ2V0U2VyaWFsaXplU3RyZWFtKFxuICAgIC8vIEluIHR1cmJvIG9wdGltaXN0aWMgc3RhcnQgdGhlIGJvZHkgcnVucyBiZWZvcmUgYHJ1bl9zdGFydGVkYCBpcyBkdXJhYmxlLlxuICAgIC8vIFRocmVhZCB0aGUgcnVuLXJlYWR5IGJhcnJpZXIgc28gdGhhdCBhIG5lc3RlZCBSZWFkYWJsZVN0cmVhbSB3cml0dGVuIGludG9cbiAgICAvLyB0aGlzIHdyaXRhYmxlIGlzIHBpcGVkIHRvIGl0cyBvd24gc2VydmVyIHN0cmVhbSBvbmx5IGFmdGVyIHRoZSBydW5cbiAgICAvLyBleGlzdHMuIFVuZGVmaW5lZCBvdXRzaWRlIHR1cmJvIC8gb24gdGhlIGF3YWl0IHBhdGguXG4gICAgZ2V0RXh0ZXJuYWxSZWR1Y2VycyhcbiAgICAgIGdsb2JhbFRoaXMsXG4gICAgICBjdHgub3BzLFxuICAgICAgcnVuSWQsXG4gICAgICBjdHguZW5jcnlwdGlvbktleSxcbiAgICAgIHRydWUsXG4gICAgICBjdHgucnVuUmVhZHlCYXJyaWVyXG4gICAgKSxcbiAgICBjdHguZW5jcnlwdGlvbktleVxuICApO1xuXG4gIC8vIFVzZSBmbHVzaGFibGUgcGlwZSBzbyB0aGUgb3BzIHByb21pc2UgcmVzb2x2ZXMgd2hlbiB0aGUgdXNlciByZWxlYXNlc1xuICAvLyB0aGVpciB3cml0ZXIgbG9jaywgbm90IG9ubHkgd2hlbiB0aGUgc3RyZWFtIGlzIGV4cGxpY2l0bHkgY2xvc2VkLlxuICAvLyBXaXRob3V0IHRoaXMsIFZlcmNlbCBmdW5jdGlvbnMgaGFuZyB1bnRpbCB0aGUgcnVudGltZSB0aW1lb3V0IGJlY2F1c2VcbiAgLy8gLnBpcGVUbygpIG9ubHkgcmVzb2x2ZXMgb24gc3RyZWFtIGNsb3NlLlxuICAvLyBJbiB0dXJibyBvcHRpbWlzdGljIHN0YXJ0IHRoZSBib2R5IHJ1bnMgYmVmb3JlIGBydW5fc3RhcnRlZGAgaXMgZHVyYWJsZTtcbiAgLy8gcGFzcyB0aGUgcnVuLXJlYWR5IGJhcnJpZXIgc28gdGhlIGZpcnN0IHNlcnZlciB3cml0ZSBvcmRlcnMgYWZ0ZXIgdGhlIHJ1blxuICAvLyBleGlzdHMuIFVuZGVmaW5lZCBvdXRzaWRlIHR1cmJvIC8gb24gdGhlIGF3YWl0IHBhdGggKHJ1biBhbHJlYWR5IGR1cmFibGUpLlxuICBjb25zdCBzZXJ2ZXJXcml0YWJsZSA9IG5ldyBXb3JrZmxvd1NlcnZlcldyaXRhYmxlU3RyZWFtKFxuICAgIHJ1bklkLFxuICAgIG5hbWUsXG4gICAgY3R4LnJ1blJlYWR5QmFycmllclxuICApO1xuICBjb25zdCBzdGF0ZSA9IGNyZWF0ZUZsdXNoYWJsZVN0YXRlKCk7XG4gIGN0eC5vcHMucHVzaChzdGF0ZS5wcm9taXNlKTtcblxuICBmbHVzaGFibGVQaXBlKHNlcmlhbGl6ZS5yZWFkYWJsZSwgc2VydmVyV3JpdGFibGUsIHN0YXRlKS5jYXRjaCgoKSA9PiB7XG4gICAgLy8gRXJyb3JzIGFyZSBoYW5kbGVkIHZpYSBzdGF0ZS5yZWplY3RcbiAgfSk7XG5cbiAgcG9sbFdyaXRhYmxlTG9jayhzZXJpYWxpemUud3JpdGFibGUsIHN0YXRlKTtcblxuICAvLyBUYWcgdGhlIHdyaXRhYmxlIHdpdGggaXRzIHVuZGVybHlpbmcgYChydW5JZCwgbmFtZSlgIHNvIGRvd25zdHJlYW1cbiAgLy8gcmVkdWNlcnMgY2FuIHJlY29nbml6ZSB0aGF0IGl0J3MgYWxyZWFkeSBiYWNrZWQgYnkgYSB3b3JrZmxvd1xuICAvLyBzZXJ2ZXIgc3RyZWFtLiBDYWxsaW5nIGBzdGFydChjaGlsZCwgW2FyZ3MsIHRoZVdyaXRhYmxlXSlgIGZyb21cbiAgLy8gdGhlIHNhbWUgc3RlcCB1c2VzIHRoZXNlIHRhZ3MgdG8gZW1pdCBgeyBuYW1lLCBydW5JZCB9YCBpbiB0aGVcbiAgLy8gZGVoeWRyYXRlZCBkZXNjcmlwdG9yLCBzbyB0aGUgY2hpbGQncyByZXZpdmVyIGNhbiBvcGVuIHRoZVxuICAvLyB3cml0YWJsZSBhZ2FpbnN0IHRoZSBvcmlnaW5hbCBgKHJ1bklkLCBuYW1lKWAgZGlyZWN0bHkg4oCUIG5vXG4gIC8vIGluLXByb2Nlc3MgYnJpZGdlIHRpZWQgdG8gdGhpcyBzdGVwJ3MgbGlmZXRpbWUuXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShzZXJpYWxpemUud3JpdGFibGUsIFNUUkVBTV9OQU1FX1NZTUJPTCwge1xuICAgIHZhbHVlOiBuYW1lLFxuICAgIHdyaXRhYmxlOiBmYWxzZSxcbiAgfSk7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShzZXJpYWxpemUud3JpdGFibGUsIFNUUkVBTV9TRVJWRVJfUlVOX0lEX1NZTUJPTCwge1xuICAgIHZhbHVlOiBydW5JZCxcbiAgICB3cml0YWJsZTogZmFsc2UsXG4gIH0pO1xuICBpZiAoY3R4LndvcmtmbG93RGVwbG95bWVudElkKSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFxuICAgICAgc2VyaWFsaXplLndyaXRhYmxlLFxuICAgICAgU1RSRUFNX1NFUlZFUl9ERVBMT1lNRU5UX0lEX1NZTUJPTCxcbiAgICAgIHtcbiAgICAgICAgdmFsdWU6IGN0eC53b3JrZmxvd0RlcGxveW1lbnRJZCxcbiAgICAgICAgd3JpdGFibGU6IGZhbHNlLFxuICAgICAgfVxuICAgICk7XG4gIH1cbiAgLy8gUHVibGlzaCB0aGlzIHJ1bidzIFgyNTUxOSBwdWJsaWMga2V5IG9uIHRoZSBoYW5kbGUgc28gdGhhdCBhIHJ1biB0aGlzXG4gIC8vIHdyaXRhYmxlIGlzIGZvcndhcmRlZCB0byBjYW4gc2VhbCBmcmFtZXMgd2l0aG91dCBsb29raW5nIGFueXRoaW5nIHVwLlxuICAvLyBUaGUga2V5IGlzIGFscmVhZHkgcmVzb2x2ZWQgb24gdGhlIHN0ZXAgY29udGV4dCwgc28gdGhpcyBjb3N0cyBub3RoaW5nXG4gIC8vIGhlcmUgYW5kIHNhdmVzIHRoZSByZWNlaXZlciBhIHJvdW5kIHRyaXAuXG4gIGlmIChpc1J1blBheWxvYWRLZXlzKGN0eC5lbmNyeXB0aW9uS2V5KSkge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShzZXJpYWxpemUud3JpdGFibGUsIFNUUkVBTV9TRVJWRVJfUFVCTElDX0tFWV9TWU1CT0wsIHtcbiAgICAgIHZhbHVlOiBieXRlc1RvQmFzZTY0KGN0eC5lbmNyeXB0aW9uS2V5LmtleVBhaXIucHVibGljS2V5KSxcbiAgICAgIHdyaXRhYmxlOiBmYWxzZSxcbiAgICB9KTtcbiAgfVxuXG4gIGNhY2hlLnNldChuYW1lLCB7IHdyaXRhYmxlOiBzZXJpYWxpemUud3JpdGFibGUsIHN0YXRlIH0pO1xuXG4gIHJldHVybiBzZXJpYWxpemUud3JpdGFibGUgYXMgV3JpdGFibGVTdHJlYW08Vz47XG59XG4iXX0=
@@ -1 +1 @@
1
- {"version":3,"file":"step.d.ts","sourceRoot":"","sources":["../src/step.ts"],"names":[],"mappings":"AAKA,OAAO,EAEL,KAAK,2BAA2B,EACjC,MAAM,cAAc,CAAC;AACtB,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAIjD,wBAAgB,aAAa,CAAC,GAAG,EAAE,2BAA2B,IACpC,IAAI,SAAS,YAAY,EAAE,EAAE,MAAM,EACzD,UAAU,MAAM,EAChB,gBAAgB,MAAM,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,YAI1C,OAAO,WACJ,IAAI,KACZ,OAAO,CAAC,MAAM,CAAC,CAqVrB"}
1
+ {"version":3,"file":"step.d.ts","sourceRoot":"","sources":["../src/step.ts"],"names":[],"mappings":"AAKA,OAAO,EAIL,KAAK,2BAA2B,EACjC,MAAM,cAAc,CAAC;AACtB,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAGjD,wBAAgB,aAAa,CAAC,GAAG,EAAE,2BAA2B,IACpC,IAAI,SAAS,YAAY,EAAE,EAAE,MAAM,EACzD,UAAU,MAAM,EAChB,gBAAgB,MAAM,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,YAI1C,OAAO,WACJ,IAAI,KACZ,OAAO,CAAC,MAAM,CAAC,CAwarB"}
package/dist/step.js CHANGED
@@ -3,9 +3,8 @@ import { withResolvers } from '@workflow/utils';
3
3
  import { EventConsumerResult } from './events-consumer.js';
4
4
  import { WorkflowSuspension } from './global.js';
5
5
  import { stepLogger } from './logger.js';
6
- import { scheduleWhenIdle, } from './private.js';
6
+ import { awaitEarlierDeliveries, registerDeliveryBarrier, scheduleWhenIdle, } from './private.js';
7
7
  import { hydrateStepError, hydrateStepReturnValue } from './serialization.js';
8
- import { getOrHydrateStepReturnValue } from './step-hydration-cache.js';
9
8
  export function createUseStep(ctx) {
10
9
  return function useStep(stepName, closureVarsFn) {
11
10
  // Use a regular function (not arrow) so we can capture `this` when invoked as a method
@@ -127,10 +126,22 @@ export function createUseStep(ctx) {
127
126
  // deterministic ordering of all promise resolutions/rejections.
128
127
  // Hydrate the serialized thrown value from the event log so the
129
128
  // original type identity and custom properties are preserved.
129
+ //
130
+ // The rejection is as branch-deciding as a success: it decides
131
+ // whether a `try`/`catch` continuation runs, and therefore which
132
+ // ULIDs the follow-up `useStep` calls draw. So it is ordered by
133
+ // event-log position exactly like `step_completed` below — see there
134
+ // for why the deferral is captured here, at event-consumption time,
135
+ // and awaited off the serial queue.
136
+ const eventIndex = ctx.eventsConsumer.eventIndex;
137
+ const barrier = registerDeliveryBarrier(ctx, eventIndex, 'step');
138
+ let rejection;
139
+ const earlierDelivered = awaitEarlierDeliveries(ctx, eventIndex, 'step');
140
+ ctx.pendingDeliveries++;
130
141
  ctx.promiseQueue = ctx.promiseQueue.then(async () => {
131
142
  try {
132
- const hydrated = await hydrateStepError(event.eventData.error, ctx.runId, ctx.encryptionKey, ctx.globalThis);
133
- reject(hydrated);
143
+ const prepared = await ctx.replayPayloadCache.prepareEventPayload(event.eventId, 'error', event.eventData.error);
144
+ rejection = await hydrateStepError(event.eventData.error, ctx.runId, ctx.encryptionKey, ctx.globalThis, {}, prepared);
134
145
  }
135
146
  catch (hydrateErr) {
136
147
  // If hydration fails for any reason, fall back to a generic
@@ -142,10 +153,17 @@ export function createUseStep(ctx) {
142
153
  ? hydrateErr.message
143
154
  : String(hydrateErr),
144
155
  });
145
- reject(new FatalError(`Failed to hydrate step error: ${hydrateErr instanceof Error
156
+ rejection = new FatalError(`Failed to hydrate step error: ${hydrateErr instanceof Error
146
157
  ? hydrateErr.message
147
- : String(hydrateErr)}`));
158
+ : String(hydrateErr)}`);
159
+ }
160
+ finally {
161
+ ctx.pendingDeliveries--;
148
162
  }
163
+ void earlierDelivered.then(() => {
164
+ barrier.markDelivered();
165
+ reject(rejection);
166
+ });
149
167
  });
150
168
  return EventConsumerResult.Finished;
151
169
  }
@@ -159,32 +177,79 @@ export function createUseStep(ctx) {
159
177
  // Each step's hydration + resolve waits for all prior hydrations
160
178
  // to complete before executing, preserving deterministic ordering.
161
179
  //
162
- // Memoization: on every replay this consumer re-runs and would
163
- // otherwise re-decrypt + re-parse the same serialized result O(N²)
164
- // across an invocation for a sequential N-step workflow. The
165
- // per-run `stepHydrationCache` short-circuits that work on
166
- // subsequent replays. Crucially, the cache lookup happens INSIDE
167
- // this same promiseQueue slot (and still resolves via `resolve`),
168
- // so a cache hit occupies the exact same position in the ordered
169
- // delivery chain a re-hydrate would have preserving the
170
- // determinism that pendingDeliveries, the delivery barriers, and
171
- // Promise.race/all replay depend on. Only primitive results are
172
- // memoized; non-primitives re-hydrate fresh each replay so a shared
173
- // reference can never carry a mutation between replays.
180
+ // Prepared serialized bytes are shared across replay VMs, but final
181
+ // objects are always revived here inside this ordered queue slot.
182
+ // Only immutable primitive final values bypass revival entirely.
183
+ //
184
+ // Hydration cost is what makes this delivery's timing unstable
185
+ // across replays of one invocation: the first replay pays the full
186
+ // decrypt/decompress/revive, later replays memo-hit a primitive
187
+ // result in `ReplayPayloadCache` and finish in a hop or two. A
188
+ // workflow awaiting this result on one branch and a `sleep()` or
189
+ // hook payload on another would therefore allocate its follow-up
190
+ // step ULIDs in a different order on a warm replay than the
191
+ // invocation that WROTE those `step_created` events did — a
192
+ // permanent `ReplayDivergenceError`. So the result is ordered by
193
+ // event-log position through the delivery-barrier registry (see
194
+ // `ctx.pendingDeliveryBarriers`):
195
+ // - Register a 'step' barrier at this event's index so a
196
+ // LATER-in-log wait/hook delivery is handed over only after it.
197
+ // - Hydrate inside this serial queue slot (keeping async
198
+ // deserialization in event-log order) but only CAPTURE the
199
+ // outcome; then defer behind every EARLIER-in-log wait and hook
200
+ // delivery before resolving, and mark this step delivered.
201
+ //
202
+ // The deferral is captured HERE, while consuming the event, and not
203
+ // inside the queue slot. Two reasons, both load-bearing:
204
+ // - Determinism: the set of earlier deliveries is then a function of
205
+ // log position alone. Captured later it would depend on how much
206
+ // hydration the earlier deliveries had already finished — the very
207
+ // coupling this barrier exists to remove.
208
+ // - Coverage: an earlier delivery whose own hydration slot runs
209
+ // first on this serial queue has usually already resolved (and so
210
+ // deregistered its barrier) by the time a later slot starts. Read
211
+ // at slot start, its barrier would be invisible and this step
212
+ // would not defer at all. Every event in one drain window is
213
+ // consumed before any slot runs, so capturing at consumption time
214
+ // sees all of them.
215
+ //
216
+ // The deferral runs OFF the serial queue: it may wait on an earlier
217
+ // wait/hook delivery whose own resolution is driven by this queue,
218
+ // and blocking a queue slot on that would deadlock the queue (the
219
+ // same constraint sleep.ts and hook.ts document). `pendingDeliveries`
220
+ // is likewise released inside the slot, before the detached defer, so
221
+ // `scheduleWhenIdle` can still reach idle and retire the barriers
222
+ // this deferral may be waiting on.
174
223
  const completedEventId = event.eventId;
175
224
  const serializedResult = event.eventData.result;
225
+ const eventIndex = ctx.eventsConsumer.eventIndex;
226
+ const barrier = registerDeliveryBarrier(ctx, eventIndex, 'step');
227
+ let outcome;
228
+ const earlierDelivered = awaitEarlierDeliveries(ctx, eventIndex, 'step');
176
229
  ctx.pendingDeliveries++;
177
230
  ctx.promiseQueue = ctx.promiseQueue.then(async () => {
178
231
  try {
179
- const hydratedResult = await getOrHydrateStepReturnValue(ctx.stepHydrationCache, completedEventId, () => hydrateStepReturnValue(serializedResult, ctx.runId, ctx.encryptionKey, ctx.globalThis));
180
- resolve(hydratedResult);
232
+ const hydratedResult = await ctx.replayPayloadCache.getStepResult(completedEventId, async () => {
233
+ const prepared = await ctx.replayPayloadCache.prepareEventPayload(completedEventId, 'result', serializedResult);
234
+ return await hydrateStepReturnValue(serializedResult, ctx.runId, ctx.encryptionKey, ctx.globalThis, {}, prepared);
235
+ });
236
+ outcome = { ok: true, value: hydratedResult };
181
237
  }
182
238
  catch (error) {
183
- reject(error);
239
+ outcome = { ok: false, error };
184
240
  }
185
241
  finally {
186
242
  ctx.pendingDeliveries--;
187
243
  }
244
+ void earlierDelivered.then(() => {
245
+ barrier.markDelivered();
246
+ if (outcome.ok) {
247
+ resolve(outcome.value);
248
+ }
249
+ else {
250
+ reject(outcome.error);
251
+ }
252
+ });
188
253
  });
189
254
  return EventConsumerResult.Finished;
190
255
  }
@@ -282,4 +347,4 @@ export function createUseStep(ctx) {
282
347
  return stepFunction;
283
348
  };
284
349
  }
285
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RlcC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9zdGVwLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNyRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDaEQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDM0QsT0FBTyxFQUFnQyxrQkFBa0IsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUMvRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3pDLE9BQU8sRUFDTCxnQkFBZ0IsR0FFakIsTUFBTSxjQUFjLENBQUM7QUFFdEIsT0FBTyxFQUFFLGdCQUFnQixFQUFFLHNCQUFzQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDOUUsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFFeEUsTUFBTSxVQUFVLGFBQWEsQ0FBQyxHQUFnQztJQUM1RCxPQUFPLFNBQVMsT0FBTyxDQUNyQixRQUFnQixFQUNoQixhQUFrRDtRQUVsRCx1RkFBdUY7UUFDdkYsTUFBTSxZQUFZLEdBQUcsVUFFbkIsR0FBRyxJQUFVO1lBRWIsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLEdBQUcsYUFBYSxFQUFVLENBQUM7WUFFN0QsTUFBTSxhQUFhLEdBQUcsUUFBUSxHQUFHLENBQUMsWUFBWSxFQUFFLEVBQUUsQ0FBQztZQUVuRCxNQUFNLFNBQVMsR0FBNEI7Z0JBQ3pDLElBQUksRUFBRSxNQUFNO2dCQUNaLGFBQWE7Z0JBQ2IsUUFBUTtnQkFDUixJQUFJO2FBQ0wsQ0FBQztZQUVGLHVFQUF1RTtZQUN2RSw4REFBOEQ7WUFDOUQsSUFBSSxJQUFJLEtBQUssU0FBUyxJQUFJLElBQUksS0FBSyxJQUFJLElBQUksSUFBSSxLQUFLLFVBQVUsRUFB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O1lBQ0QsUUFBUSxFQUFFLEtBQUs7WUFDZixVQUFVLEVBQUUsS0FBSztZQUNqQixZQUFZLEVBQUUsS0FBSztTQUNwQixDQUFDLENBQUM7UUFFSCxPQUFPLFlBQVksQ0FBQztJQUN0QixDQUFDLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRmF0YWxFcnJvciwgUmVwbGF5RGl2ZXJnZW5jZUVycm9yIH0gZnJvbSAnQHdvcmtmbG93L2Vycm9ycyc7XG5pbXBvcnQgeyB3aXRoUmVzb2x2ZXJzIH0gZnJvbSAnQHdvcmtmbG93L3V0aWxzJztcbmltcG9ydCB7IEV2ZW50Q29uc3VtZXJSZXN1bHQgfSBmcm9tICcuL2V2ZW50cy1jb25zdW1lci5qcyc7XG5pbXBvcnQgeyB0eXBlIFN0ZXBJbnZvY2F0aW9uUXVldWVJdGVtLCBXb3JrZmxvd1N1c3BlbnNpb24gfSBmcm9tICcuL2dsb2JhbC5qcyc7XG5pbXBvcnQgeyBzdGVwTG9nZ2VyIH0gZnJvbSAnLi9sb2dnZXIuanMnO1xuaW1wb3J0IHtcbiAgc2NoZWR1bGVXaGVuSWRsZSxcbiAgdHlwZSBXb3JrZmxvd09yY2hlc3RyYXRvckNvbnRleHQsXG59IGZyb20gJy4vcHJpdmF0ZS5qcyc7XG5pbXBvcnQgdHlwZSB7IFNlcmlhbGl6YWJsZSB9IGZyb20gJy4vc2NoZW1hcy5qcyc7XG5pbXBvcnQgeyBoeWRyYXRlU3RlcEVycm9yLCBoeWRyYXRlU3RlcFJldHVyblZhbHVlIH0gZnJvbSAnLi9zZXJpYWxpemF0aW9uLmpzJztcbmltcG9ydCB7IGdldE9ySHlkcmF0ZVN0ZXBSZXR1cm5WYWx1ZSB9IGZyb20gJy4vc3RlcC1oeWRyYXRpb24tY2FjaGUuanMnO1xuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlVXNlU3RlcChjdHg6IFdvcmtmbG93T3JjaGVzdHJhdG9yQ29udGV4dCkge1xuICByZXR1cm4gZnVuY3Rpb24gdXNlU3RlcDxBcmdzIGV4dGVuZHMgU2VyaWFsaXphYmxlW10sIFJlc3VsdD4oXG4gICAgc3RlcE5hbWU6IHN0cmluZyxcbiAgICBjbG9zdXJlVmFyc0ZuPzogKCkgPT4gUmVjb3JkPHN0cmluZywgU2VyaWFsaXphYmxlPlxuICApIHtcbiAgICAvLyBVc2UgYSByZWd1bGFyIGZ1bmN0aW9uIChub3QgYXJyb3cpIHNvIHdlIGNhbiBjYXB0dXJlIGB0aGlzYCB3aGVuIGludm9rZWQgYXMgYSBtZXRob2RcbiAgICBjb25zdCBzdGVwRnVuY3Rpb24gPSBmdW5jdGlvbiAoXG4gICAgICB0aGlzOiB1bmtub3duLFxuICAgICAgLi4uYXJnczogQXJnc1xuICAgICk6IFByb21pc2U8UmVzdWx0PiB7XG4gICAgICBjb25zdCB7IHByb21pc2UsIHJlc29sdmUsIHJlamVjdCB9ID0gd2l0aFJlc29sdmVyczxSZXN1bHQ+KCk7XG5cbiAgICAgIGNvbnN0IGNvcnJlbGF0aW9uSWQgPSBgc3RlcF8ke2N0eC5nZW5lcmF0ZVVsaWQoKX1gO1xuXG4gICAgICBjb25zdCBxdWV1ZUl0ZW06IFN0ZXBJbnZvY2F0aW9uUXVldWVJdGVtID0ge1xuICAgICAgICB0eXBlOiAnc3RlcCcsXG4gICAgICAgIGNvcnJlbGF0aW9uSWQsXG4gICAgICAgIHN0ZXBOYW1lLFxuICAgICAgICBhcmdzLFxuICAgICAgfTtcblxuICAgICAgLy8gQ2FwdHVyZSBgdGhpc2AgdmFsdWUgZm9yIG1ldGhvZCBpbnZvY2F0aW9ucyAoZS5nLiwgTXlDbGFzcy5tZXRob2QoKSlcbiAgICAgIC8vIE9ubHkgaW5jbHVkZSBpZiBgdGhpc2AgaXMgZGVmaW5lZCBhbmQgbm90IHRoZSBnbG9iYWwgb2JqZWN0XG4gICAgICBpZiAodGhpcyAhPT0gdW5kZWZpbmVkICYmIHRoaXMgIT09IG51bGwgJiYgdGhpcyAhPT0gZ2xvYmFsVGhpcykge1xuICAgICAgICBxdWV1ZUl0ZW0udGhpc1ZhbCA9IHRoaXMgYXMgU2VyaWFsaXphYmxlO1xuICAgICAgfVxuXG4gICAgICAvLyBJbnZva2UgdGhlIGNsb3N1cmUgdmFyaWFibGVzIGZ1bmN0aW9uIHRvIGdldCB0aGUgY2xvc3VyZSBzY29wZVxuICAgICAgY29uc3QgY2xvc3VyZVZhcnMgPSBjbG9zdXJlVmFyc0ZuPy4oKTtcbiAgICAgIGlmIChjbG9zdXJlVmFycykge1xuICAgICAgICBxdWV1ZUl0ZW0uY2xvc3VyZVZhcnMgPSBjbG9zdXJlVmFycztcbiAgICAgIH1cblxuICAgICAgY3R4Lmludm9jYXRpb25zUXVldWUuc2V0KGNvcnJlbGF0aW9uSWQsIHF1ZXVlSXRlbSk7XG5cbiAgICAgIHN0ZXBMb2dnZXIuZGVidWcoJ1N0ZXAgY29uc3VtZXIgc2V0dXAnLCB7XG4gICAgICAgIGNvcnJlbGF0aW9uSWQsXG4gICAgICAgIHN0ZXBOYW1lLFxuICAgICAgICBhcmdzLFxuICAgICAgfSk7XG4gICAgICBjdHguZXZlbnRzQ29uc3VtZXIuc3Vic2NyaWJlKChldmVudCkgPT4ge1xuICAgICAgICBpZiAoIWV2ZW50KSB7XG4gICAgICAgICAgLy8gV2UndmUgcmVhY2hlZCB0aGUgZW5kIG9mIHRoZSBldmVudHMsIHNvIHRoaXMgc3RlcCBoYXMgZWl0aGVyIG5vdCBiZWVuIHJ1biBvciBpcyBjdXJyZW50bHkgcnVubmluZy5cbiAgICAgICAgICAvLyBDcnVjaWFsbHksIGlmIHdlIGdvdCBoZXJlLCB0aGVuIHRoaXMgc3RlcCBQcm9taXNlIGRvZXNcbiAgICAgICAgICAvLyBub3QgcmVzb2x2ZSBzbyB0aGF0IHRoZSB1c2VyIHdvcmtmbG93IGNvZGUgZG9lcyBub3QgcHJvY2VlZCBhbnkgZnVydGhlci5cbiAgICAgICAgICAvLyBOb3RpZnkgdGhlIHdvcmtmbG93IGhhbmRsZXIgdGhhdCB0aGlzIHN0ZXAgaGFzIG5vdCBiZWVuIHJ1biAvIGhhcyBub3QgY29tcGxldGVkIHlldC5cbiAgICAgICAgICBzY2hlZHVsZVdoZW5JZGxlKGN0eCwgKCkgPT4ge1xuICAgICAgICAgICAgY3R4Lm9uV29ya2Zsb3dFcnJvcihcbiAgICAgICAgICAgICAgbmV3IFdvcmtmbG93U3VzcGVuc2lvbihjdHguaW52b2NhdGlvbnNRdWV1ZSwgY3R4Lmdsb2JhbFRoaXMpXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybiBFdmVudENvbnN1bWVyUmVzdWx0Lk5vdENvbnN1bWVkO1xuICAgICAgICB9XG5cbiAgICAgICAgc3RlcExvZ2dlci5kZWJ1ZygnU3RlcCBjb25zdW1lciBldmVudCBwcm9jZXNzaW5nJywge1xuICAgICAgICAgIGNvcnJlbGF0aW9uSWQsXG4gICAgICAgICAgc3RlcE5hbWUsXG4gICAgICAgICAgYXJnczogYXJncy5qb2luKCcsICcpLFxuICAgICAgICAgIGluY29taW5nQ29ycmVsYXRpb25JZDogZXZlbnQuY29ycmVsYXRpb25JZCxcbiAgICAgICAgICBpc01hdGNoOiBjb3JyZWxhdGlvbklkID09PSBldmVudC5jb3JyZWxhdGlvbklkLFxuICAgICAgICAgIGV2ZW50VHlwZTogZXZlbnQuZXZlbnRUeXBlLFxuICAgICAgICB9KTtcblxuICAgICAgICBpZiAoZXZlbnQuY29ycmVsYXRpb25JZCAhPT0gY29ycmVsYXRpb25JZCkge1xuICAgICAgICAgIC8vIFdlJ3JlIG5vdCBpbnRlcmVzdGVkIGluIHRoaXMgZXZlbnQgLSB0aGUgY29ycmVsYXRpb25JZCBiZWxvbmdzIHRvIGEgZGlmZmVyZW50IGVudGl0eVxuICAgICAgICAgIHJldHVybiBFdmVudENvbnN1bWVyUmVzdWx0Lk5vdENvbnN1bWVkO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZXZlbnRTdGVwTmFtZSA9XG4gICAgICAgICAgJ2V2ZW50RGF0YScgaW4gZXZlbnQgJiZcbiAgICAgICAgICBldmVudC5ldmVudERhdGEgJiZcbiAgICAgICAgICAnc3RlcE5hbWUnIGluIGV2ZW50LmV2ZW50RGF0YVxuICAgICAgICAgICAgPyBldmVudC5ldmVudERhdGEuc3RlcE5hbWVcbiAgICAgICAgICAgIDogdW5kZWZpbmVkO1xuXG4gICAgICAgIGlmICh0eXBlb2YgZXZlbnRTdGVwTmFtZSA9PT0gJ3N0cmluZycgJiYgZXZlbnRTdGVwTmFtZSAhPT0gc3RlcE5hbWUpIHtcbiAgICAgICAgICBjdHgucHJvbWlzZVF1ZXVlID0gY3R4LnByb21pc2VRdWV1ZS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIGN0eC5vbldvcmtmbG93RXJyb3IoXG4gICAgICAgICAgICAgIG5ldyBSZXBsYXlEaXZlcmdlbmNlRXJyb3IoXG4gICAgICAgICAgICAgICAgYFJlcGxheSBkaXZlcmdlbmNlOiBzdGVwIGV2ZW50ICR7ZXZlbnQuZXZlbnRUeXBlfSBmb3IgJHtjb3JyZWxhdGlvbklkfSBiZWxvbmdzIHRvIFwiJHtldmVudFN0ZXBOYW1lfVwiLCBidXQgdGhlIGN1cnJlbnQgc3RlcCBjb25zdW1lciBpcyBcIiR7c3RlcE5hbWV9XCJgLFxuICAgICAgICAgICAgICAgIHsgZXZlbnRJZDogZXZlbnQuZXZlbnRJZCB9XG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuIEV2ZW50Q29uc3VtZXJSZXN1bHQuRmluaXNoZWQ7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZXZlbnQuZXZlbnRUeXBlID09PSAnc3RlcF9jcmVhdGVkJykge1xuICAgICAgICAgIC8vIFN0ZXAgaGFzIGJlZW4gY3JlYXRlZCAocmVnaXN0ZXJlZCBmb3IgZXhlY3V0aW9uKSAtIG1hcmsgYXMgaGF2aW5nIGV2ZW50XG4gICAgICAgICAgLy8gYnV0IGtlZXAgaW4gcXVldWUgc28gc3VzcGVuc2lvbiBoYW5kbGVyIGtub3dzIHRvIHF1ZXVlIGV4ZWN1dGlvbiB3aXRob3V0XG4gICAgICAgICAgLy8gY3JlYXRpbmcgYSBkdXBsaWNhdGUgc3RlcF9jcmVhdGVkIGV2ZW50XG4gICAgICAgICAgY29uc3QgcXVldWVJdGVtID0gY3R4Lmludm9jYXRpb25zUXVldWUuZ2V0KGNvcnJlbGF0aW9uSWQpO1xuICAgICAgICAgIGlmICghcXVldWVJdGVtIHx8IHF1ZXVlSXRlbS50eXBlICE9PSAnc3RlcCcpIHtcbiAgICAgICAgICAgIC8vIFRoaXMgaW5kaWNhdGVzIGV2ZW50IGxvZyBjb3JydXB0aW9uIC0gc3RlcF9jcmVhdGVkIHJlY2VpdmVkXG4gICAgICAgICAgICAvLyBidXQgdGhlIHN0ZXAgd2FzIG5ldmVyIGludm9rZWQgaW4gdGhlIHdvcmtmbG93IGR1cmluZyByZXBsYXkuXG4gICAgICAgICAgICBjdHgucHJvbWlzZVF1ZXVlID0gY3R4LnByb21pc2VRdWV1ZS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgcmVqZWN0KFxuICAgICAgICAgICAgICAgIG5ldyBSZXBsYXlEaXZlcmdlbmNlRXJyb3IoXG4gICAgICAgICAgICAgICAgICBgUmVwbGF5IGRpdmVyZ2VuY2U6IHN0ZXAgJHtjb3JyZWxhdGlvbklkfSAoJHtzdGVwTmFtZX0pIGNyZWF0ZWQgYnV0IG5vdCBmb3VuZCBpbiBpbnZvY2F0aW9uIHF1ZXVlYCxcbiAgICAgICAgICAgICAgICAgIHsgZXZlbnRJZDogZXZlbnQuZXZlbnRJZCB9XG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gRXZlbnRDb25zdW1lclJlc3VsdC5GaW5pc2hlZDtcbiAgICAgICAgICB9XG4gICAgICAgICAgcXVldWVJdGVtLmhhc0NyZWF0ZWRFdmVudCA9IHRydWU7XG4gICAgICAgICAgLy8gQ29udGludWUgd2FpdGluZyBmb3Igc3RlcF9zdGFydGVkL3N0ZXBfY29tcGxldGVkL3N0ZXBfZmFpbGVkIGV2ZW50c1xuICAgICAgICAgIHJldHVybiBFdmVudENvbnN1bWVyUmVzdWx0LkNvbnN1bWVkO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGV2ZW50LmV2ZW50VHlwZSA9PT0gJ3N0ZXBfc3RhcnRlZCcpIHtcbiAgICAgICAgICAvLyBTdGVwIHdhcyBzdGFydGVkIGJ1dCBpcyBub3QgdGVybWluYWwg4oCUIGl0IHN0YXlzIGluIHRoZVxuICAgICAgICAgIC8vIGludm9jYXRpb25RdWV1ZSBzbyB0aGUgc3VzcGVuc2lvbiBoYW5kbGVyIGNhbiBkZWNpZGUgaG93IHRvXG4gICAgICAgICAgLy8gZGlzcGF0Y2ggaXQuIFJlY29yZCB0aGUgaW5saW5lLW93bmVyc2hpcCBzdGF0ZSBmcm9tIHRoZSBldmVudDpcbiAgICAgICAgICAvLyB0aGUgTEFURVNUIHN0YXJ0IHdpbnMsIHNvIGEgc3RhbXBlZCBzdGFydCAoaW5saW5lIGV4ZWN1dGlvbiBvclxuICAgICAgICAgIC8vIG93bmVyIHJlY292ZXJ5KSBzZXRzIHRoZSBvd25lciBhbmQgYW4gdW5zdGFtcGVkIG9uZSAoYSByZXRyeVxuICAgICAgICAgIC8vIGF0dGVtcHQgZHJpdmVuIGJ5IGEgcXVldWVkIHN0ZXAgbWVzc2FnZSwgb3IgYW4gb2xkZXIgcnVudGltZSlcbiAgICAgICAgICAvLyBjbGVhcnMgaXQuIFRoZSBkaXNwYXRjaCBsb29wIHVzZXMgdGhpcyB0byBzdXBwcmVzcyB0aGUgaW1tZWRpYXRlXG4gICAgICAgICAgLy8gcmVxdWV1ZSBvZiBhIHN0ZXAgd2hvc2Ugb3duaW5nIGludm9jYXRpb24gbWF5IHN0aWxsIGJlIHJ1bm5pbmdcbiAgICAgICAgICAvLyBpdHMgYm9keSAodmVyY2VsL3dvcmtmbG93IzI3ODApLlxuICAgICAgICAgIGNvbnN0IHF1ZXVlSXRlbSA9IGN0eC5pbnZvY2F0aW9uc1F1ZXVlLmdldChjb3JyZWxhdGlvbklkKTtcbiAgICAgICAgICBpZiAocXVldWVJdGVtICYmIHF1ZXVlSXRlbS50eXBlID09PSAnc3RlcCcpIHtcbiAgICAgICAgICAgIGNvbnN0IG93bmVyTWVzc2FnZUlkID1cbiAgICAgICAgICAgICAgJ2V2ZW50RGF0YScgaW4gZXZlbnQgJiZcbiAgICAgICAgICAgICAgZXZlbnQuZXZlbnREYXRhICYmXG4gICAgICAgICAgICAgICdvd25lck1lc3NhZ2VJZCcgaW4gZXZlbnQuZXZlbnREYXRhICYmXG4gICAgICAgICAgICAgIHR5cGVvZiBldmVudC5ldmVudERhdGEub3duZXJNZXNzYWdlSWQgPT09ICdzdHJpbmcnXG4gICAgICAgICAgICAgICAgPyBldmVudC5ldmVudERhdGEub3duZXJNZXNzYWdlSWRcbiAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIHF1ZXVlSXRlbS5vd25lck1lc3NhZ2VJZCA9IG93bmVyTWVzc2FnZUlkO1xuICAgICAgICAgICAgcXVldWVJdGVtLmxhc3RTdGFydGVkQXQgPSArZXZlbnQuY3JlYXRlZEF0O1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gRXZlbnRDb25zdW1lclJlc3VsdC5Db25zdW1lZDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChldmVudC5ldmVudFR5cGUgPT09ICdzdGVwX3JldHJ5aW5nJykge1xuICAgICAgICAgIC8vIFN0ZXAgaXMgYmVpbmcgcmV0cmllZCDigJQgY29uc3VtZSB0aGUgZXZlbnQgYW5kIHdhaXQgZm9yIHRoZSBuZXh0XG4gICAgICAgICAgLy8gc3RlcF9zdGFydGVkLiBGcm9tIGhlcmUgb24gdGhlIHN0ZXAgaXMgcXVldWUtb3duZWQgKHRoZSBkZWxheWVkXG4gICAgICAgICAgLy8gcmV0cnkgaGFuZG9mZiBtZXNzYWdlLCBvciB0aGUgcmVwbGF5IHJlcXVldWUpLCBzbyBpbmxpbmVcbiAgICAgICAgICAvLyBvd25lcnNoaXAgaXMgcGVybWFuZW50bHkgbGFwc2VkIGZvciB0aGlzIGNvcnJlbGF0aW9uIElELlxuICAgICAgICAgIGNvbnN0IHF1ZXVlSXRlbSA9IGN0eC5pbnZvY2F0aW9uc1F1ZXVlLmdldChjb3JyZWxhdGlvbklkKTtcbiAgICAgICAgICBpZiAocXVldWVJdGVtICYmIHF1ZXVlSXRlbS50eXBlID09PSAnc3RlcCcpIHtcbiAgICAgICAgICAgIHF1ZXVlSXRlbS5zYXdSZXRyeWluZyA9IHRydWU7XG4gICAgICAgICAgICBxdWV1ZUl0ZW0ub3duZXJNZXNzYWdlSWQgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBFdmVudENvbnN1bWVyUmVzdWx0LkNvbnN1bWVkO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGV2ZW50LmV2ZW50VHlwZSA9PT0gJ3N0ZXBfZmFpbGVkJykge1xuICAgICAgICAgIC8vIFRlcm1pbmFsIHN0YXRlIC0gd2UgY2FuIHJlbW92ZSB0aGUgaW52b2NhdGlvblF1ZXVlIGl0ZW1cbiAgICAgICAgICBjdHguaW52b2NhdGlvbnNRdWV1ZS5kZWxldGUoZXZlbnQuY29ycmVsYXRpb25JZCk7XG4gICAgICAgICAgLy8gU3RlcCBmYWlsZWQgLSBjaGFpbiB0aHJvdWdoIHByb21pc2VRdWV1ZSB0byBlbnN1cmVcbiAgICAgICAgICAvLyBkZXRlcm1pbmlzdGljIG9yZGVyaW5nIG9mIGFsbCBwcm9taXNlIHJlc29sdXRpb25zL3JlamVjdGlvbnMuXG4gICAgICAgICAgLy8gSHlkcmF0ZSB0aGUgc2VyaWFsaXplZCB0aHJvd24gdmFsdWUgZnJvbSB0aGUgZXZlbnQgbG9nIHNvIHRoZVxuICAgICAgICAgIC8vIG9yaWdpbmFsIHR5cGUgaWRlbnRpdHkgYW5kIGN1c3RvbSBwcm9wZXJ0aWVzIGFyZSBwcmVzZXJ2ZWQuXG4gICAgICAgICAgY3R4LnByb21pc2VRdWV1ZSA9IGN0eC5wcm9taXNlUXVldWUudGhlbihhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBjb25zdCBoeWRyYXRlZCA9IGF3YWl0IGh5ZHJhdGVTdGVwRXJyb3IoXG4gICAgICAgICAgICAgICAgZXZlbnQuZXZlbnREYXRhLmVycm9yLFxuICAgICAgICAgICAgICAgIGN0eC5ydW5JZCxcbiAgICAgICAgICAgICAgICBjdHguZW5jcnlwdGlvbktleSxcbiAgICAgICAgICAgICAgICBjdHguZ2xvYmFsVGhpc1xuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICByZWplY3QoaHlkcmF0ZWQpO1xuICAgICAgICAgICAgfSBjYXRjaCAoaHlkcmF0ZUVycikge1xuICAgICAgICAgICAgICAvLyBJZiBoeWRyYXRpb24gZmFpbHMgZm9yIGFueSByZWFzb24sIGZhbGwgYmFjayB0byBhIGdlbmVyaWNcbiAgICAgICAgICAgICAgLy8gRmF0YWxFcnJvciBzbyB0aGUgd29ya2Zsb3cgZG9lc24ndCBoYW5nLiBUaGlzIHNob3VsZCBiZVxuICAgICAgICAgICAgICAvLyBleHRyZW1lbHkgcmFyZSBpbiBwcmFjdGljZSAoY29ycnVwdGVkIGV2ZW50IGRhdGEpLlxuICAgICAgICAgICAgICBzdGVwTG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gaHlkcmF0ZSBzdGVwX2ZhaWxlZCBlcnJvcicsIHtcbiAgICAgICAgICAgICAgICBjb3JyZWxhdGlvbklkOiBldmVudC5jb3JyZWxhdGlvbklkLFxuICAgICAgICAgICAgICAgIGVycm9yOlxuICAgICAgICAgICAgICAgICAgaHlkcmF0ZUVyciBpbnN0YW5jZW9mIEVycm9yXG4gICAgICAgICAgICAgICAgICAgID8gaHlkcmF0ZUVyci5tZXNzYWdlXG4gICAgICAgICAgICAgICAgICAgIDogU3RyaW5nKGh5ZHJhdGVFcnIpLFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgcmVqZWN0KFxuICAgICAgICAgICAgICAgIG5ldyBGYXRhbEVycm9yKFxuICAgICAgICAgICAgICAgICAgYEZhaWxlZCB0byBoeWRyYXRlIHN0ZXAgZXJyb3I6ICR7XG4gICAgICAgICAgICAgICAgICAgIGh5ZHJhdGVFcnIgaW5zdGFuY2VvZiBFcnJvclxuICAgICAgICAgICAgICAgICAgICAgID8gaHlkcmF0ZUVyci5tZXNzYWdlXG4gICAgICAgICAgICAgICAgICAgICAgOiBTdHJpbmcoaHlkcmF0ZUVycilcbiAgICAgICAgICAgICAgICAgIH1gXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybiBFdmVudENvbnN1bWVyUmVzdWx0LkZpbmlzaGVkO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGV2ZW50LmV2ZW50VHlwZSA9PT0gJ3N0ZXBfY29tcGxldGVkJykge1xuICAgICAgICAgIC8vIFRlcm1pbmFsIHN0YXRlIC0gd2UgY2FuIHJlbW92ZSB0aGUgaW52b2NhdGlvblF1ZXVlIGl0ZW1cbiAgICAgICAgICBjdHguaW52b2NhdGlvbnNRdWV1ZS5kZWxldGUoZXZlbnQuY29ycmVsYXRpb25JZCk7XG5cbiAgICAgICAgICAvLyBTdGVwIGhhcyBjb21wbGV0ZWQsIHNvIHJlc29sdmUgdGhlIFByb21pc2Ugd2l0aCB0aGUgY2FjaGVkIHJlc3VsdC5cbiAgICAgICAgICAvLyBUaGUgaHlkcmF0aW9uIGlzIGFzeW5jIChlLmcuLCBkZWNyeXB0aW9uKSwgc28gd2UgY2hhaW4gaXQgdGhyb3VnaFxuICAgICAgICAgIC8vIGN0eC5wcm9taXNlUXVldWUgdG8gZW5zdXJlIHRoYXQgZXZlbiBpZiBkZXNlcmlhbGl6YXRpb25cbiAgICAgICAgICAvLyB0YWtlcyB2YXJpYWJsZSB0aW1lLCBwcm9taXNlcyByZXNvbHZlIGluIGV2ZW50IGxvZyBvcmRlci5cbiAgICAgICAgICAvLyBFYWNoIHN0ZXAncyBoeWRyYXRpb24gKyByZXNvbHZlIHdhaXRzIGZvciBhbGwgcHJpb3IgaHlkcmF0aW9uc1xuICAgICAgICAgIC8vIHRvIGNvbXBsZXRlIGJlZm9yZSBleGVjdXRpbmcsIHByZXNlcnZpbmcgZGV0ZXJtaW5pc3RpYyBvcmRlcmluZy5cbiAgICAgICAgICAvL1xuICAgICAgICAgIC8vIE1lbW9pemF0aW9uOiBvbiBldmVyeSByZXBsYXkgdGhpcyBjb25zdW1lciByZS1ydW5zIGFuZCB3b3VsZFxuICAgICAgICAgIC8vIG90aGVyd2lzZSByZS1kZWNyeXB0ICsgcmUtcGFyc2UgdGhlIHNhbWUgc2VyaWFsaXplZCByZXN1bHQg4oCUIE8oTsKyKVxuICAgICAgICAgIC8vIGFjcm9zcyBhbiBpbnZvY2F0aW9uIGZvciBhIHNlcXVlbnRpYWwgTi1zdGVwIHdvcmtmbG93LiBUaGVcbiAgICAgICAgICAvLyBwZXItcnVuIGBzdGVwSHlkcmF0aW9uQ2FjaGVgIHNob3J0LWNpcmN1aXRzIHRoYXQgd29yayBvblxuICAgICAgICAgIC8vIHN1YnNlcXVlbnQgcmVwbGF5cy4gQ3J1Y2lhbGx5LCB0aGUgY2FjaGUgbG9va3VwIGhhcHBlbnMgSU5TSURFXG4gICAgICAgICAgLy8gdGhpcyBzYW1lIHByb21pc2VRdWV1ZSBzbG90IChhbmQgc3RpbGwgcmVzb2x2ZXMgdmlhIGByZXNvbHZlYCksXG4gICAgICAgICAgLy8gc28gYSBjYWNoZSBoaXQgb2NjdXBpZXMgdGhlIGV4YWN0IHNhbWUgcG9zaXRpb24gaW4gdGhlIG9yZGVyZWRcbiAgICAgICAgICAvLyBkZWxpdmVyeSBjaGFpbiBhIHJlLWh5ZHJhdGUgd291bGQgaGF2ZSDigJQgcHJlc2VydmluZyB0aGVcbiAgICAgICAgICAvLyBkZXRlcm1pbmlzbSB0aGF0IHBlbmRpbmdEZWxpdmVyaWVzLCB0aGUgZGVsaXZlcnkgYmFycmllcnMsIGFuZFxuICAgICAgICAgIC8vIFByb21pc2UucmFjZS9hbGwgcmVwbGF5IGRlcGVuZCBvbi4gT25seSBwcmltaXRpdmUgcmVzdWx0cyBhcmVcbiAgICAgICAgICAvLyBtZW1vaXplZDsgbm9uLXByaW1pdGl2ZXMgcmUtaHlkcmF0ZSBmcmVzaCBlYWNoIHJlcGxheSBzbyBhIHNoYXJlZFxuICAgICAgICAgIC8vIHJlZmVyZW5jZSBjYW4gbmV2ZXIgY2FycnkgYSBtdXRhdGlvbiBiZXR3ZWVuIHJlcGxheXMuXG4gICAgICAgICAgY29uc3QgY29tcGxldGVkRXZlbnRJZCA9IGV2ZW50LmV2ZW50SWQ7XG4gICAgICAgICAgY29uc3Qgc2VyaWFsaXplZFJlc3VsdCA9IGV2ZW50LmV2ZW50RGF0YS5yZXN1bHQ7XG4gICAgICAgICAgY3R4LnBlbmRpbmdEZWxpdmVyaWVzKys7XG4gICAgICAgICAgY3R4LnByb21pc2VRdWV1ZSA9IGN0eC5wcm9taXNlUXVldWUudGhlbihhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBjb25zdCBoeWRyYXRlZFJlc3VsdCA9IGF3YWl0IGdldE9ySHlkcmF0ZVN0ZXBSZXR1cm5WYWx1ZShcbiAgICAgICAgICAgICAgICBjdHguc3RlcEh5ZHJhdGlvbkNhY2hlLFxuICAgICAgICAgICAgICAgIGNvbXBsZXRlZEV2ZW50SWQsXG4gICAgICAgICAgICAgICAgKCkgPT5cbiAgICAgICAgICAgICAgICAgIGh5ZHJhdGVTdGVwUmV0dXJuVmFsdWUoXG4gICAgICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWRSZXN1bHQsXG4gICAgICAgICAgICAgICAgICAgIGN0eC5ydW5JZCxcbiAgICAgICAgICAgICAgICAgICAgY3R4LmVuY3J5cHRpb25LZXksXG4gICAgICAgICAgICAgICAgICAgIGN0eC5nbG9iYWxUaGlzXG4gICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIHJlc29sdmUoaHlkcmF0ZWRSZXN1bHQgYXMgUmVzdWx0KTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgICBjdHgucGVuZGluZ0RlbGl2ZXJpZXMtLTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm4gRXZlbnRDb25zdW1lclJlc3VsdC5GaW5pc2hlZDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFRoaXMgcmVwbGF5IGluc3RhbGxlZCBhIGRpZmZlcmVudCBjb25zdW1lciB0aGFuIHRoZSBzdG9yZWQgZXZlbnQgbmVlZHMuXG4gICAgICAgIGN0eC5wcm9taXNlUXVldWUgPSBjdHgucHJvbWlzZVF1ZXVlLnRoZW4oKCkgPT4ge1xuICAgICAgICAgIGN0eC5vbldvcmtmbG93RXJyb3IoXG4gICAgICAgICAgICBuZXcgUmVwbGF5RGl2ZXJnZW5jZUVycm9yKFxuICAgICAgICAgICAgICBgUmVwbGF5IGRpdmVyZ2VuY2U6IFVuZXhwZWN0ZWQgZXZlbnQgdHlwZSBmb3Igc3RlcCAke2NvcnJlbGF0aW9uSWR9IChuYW1lOiAke3N0ZXBOYW1lfSkgXCIke2V2ZW50LmV2ZW50VHlwZX1cImAsXG4gICAgICAgICAgICAgIHsgZXZlbnRJZDogZXZlbnQuZXZlbnRJZCB9XG4gICAgICAgICAgICApXG4gICAgICAgICAgKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBFdmVudENvbnN1bWVyUmVzdWx0LkZpbmlzaGVkO1xuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiBwcm9taXNlO1xuICAgIH07XG5cbiAgICAvLyBFbnN1cmUgdGhlIFwibmFtZVwiIHByb3BlcnR5IG1hdGNoZXMgdGhlIG9yaWdpbmFsIHN0ZXAgZnVuY3Rpb24gbmFtZVxuICAgIC8vIEV4dHJhY3QgZnVuY3Rpb24gbmFtZSBmcm9tIHN0ZXBOYW1lIChmb3JtYXQ6IFwic3RlcC8vZmlsZXBhdGgvL2Z1bmN0aW9uTmFtZVwiKVxuICAgIGNvbnN0IGZ1bmN0aW9uTmFtZSA9IHN0ZXBOYW1lLnNwbGl0KCcvLycpLnBvcCgpO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShzdGVwRnVuY3Rpb24sICduYW1lJywge1xuICAgICAgdmFsdWU6IGZ1bmN0aW9uTmFtZSxcbiAgICB9KTtcblxuICAgIC8vIEFkZCB0aGUgc3RlcCBmdW5jdGlvbiBpZGVudGlmaWVyIHRvIHRoZSBzdGVwIGZ1bmN0aW9uIGZvciBzZXJpYWxpemF0aW9uXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHN0ZXBGdW5jdGlvbiwgJ3N0ZXBJZCcsIHtcbiAgICAgIHZhbHVlOiBzdGVwTmFtZSxcbiAgICAgIHdyaXRhYmxlOiBmYWxzZSxcbiAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgY29uZmlndXJhYmxlOiBmYWxzZSxcbiAgICB9KTtcblxuICAgIC8vIFN0b3JlIHRoZSBjbG9zdXJlIHZhcmlhYmxlcyBmdW5jdGlvbiBmb3Igc2VyaWFsaXphdGlvblxuICAgIGlmIChjbG9zdXJlVmFyc0ZuKSB7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoc3RlcEZ1bmN0aW9uLCAnX19jbG9zdXJlVmFyc0ZuJywge1xuICAgICAgICB2YWx1ZTogY2xvc3VyZVZhcnNGbixcbiAgICAgICAgd3JpdGFibGU6IGZhbHNlLFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiBmYWxzZSxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIE92ZXJyaWRlIGAuYmluZGAgc28gdGhlIGJvdW5kIGZ1bmN0aW9uIHByZXNlcnZlcyB0aGUgc3RlcCBwcm94eVxuICAgIC8vIG1ldGFkYXRhIHRoYXQgYGdldFN0ZXBGdW5jdGlvblJlZHVjZXJgIHJlbGllcyBvbiBmb3Igc2VyaWFsaXphdGlvbi5cbiAgICAvLyBXaXRob3V0IHRoaXMgb3ZlcnJpZGUsIGBGdW5jdGlvbi5wcm90b3R5cGUuYmluZGAgd291bGQgcmV0dXJuIGEgbmV3XG4gICAgLy8gZnVuY3Rpb24gdGhhdCBkb2Vzbid0IGluaGVyaXQgYHN0ZXBJZGAsIGBfX2Nsb3N1cmVWYXJzRm5gLCBvciBhbnlcbiAgICAvLyBvdGhlciBvd24gcHJvcGVydGllcyBvZiB0aGUgb3JpZ2luYWwgcHJveHkg4oCUIHNvIHRoZSBTdGVwRnVuY3Rpb25cbiAgICAvLyByZWR1Y2VyIHdvdWxkIHJlZnVzZSB0byBzZXJpYWxpemUgaXQgKGl0J2QgbG9vayBsaWtlIGEgcGxhaW5cbiAgICAvLyBmdW5jdGlvbiksIGFuZCBhIGB1c2VTdGVwKC4uLikuYmluZCh0aGlzKWAgcHJveHkgdGhhdCBmbG93ZWRcbiAgICAvLyB0aHJvdWdoIHdvcmtmbG93IHNlcmlhbGl6YXRpb24gd291bGQgc2lsZW50bHkgYnJlYWsuXG4gICAgLy9cbiAgICAvLyBUaGUgb3ZlcnJpZGUgc3Rhc2hlcyB0aHJlZSBwaWVjZXMgb2Ygc3RhdGUgb24gdGhlIGJvdW5kIGZ1bmN0aW9uIHNvXG4gICAgLy8gdGhlIHJvdW5kIHRyaXAgaXMgZmFpdGhmdWw6XG4gICAgLy8gICAtIGBzdGVwSWRgICAgICAgICAgICAgIOKAlCBhbHJlYWR5IHNldCBvbiB0aGUgb3JpZ2luYWwgcHJveHkuXG4gICAgLy8gICAtIGBfX2Nsb3N1cmVWYXJzRm5gICAgIOKAlCBvbmx5IHdoZW4gdGhlIG9yaWdpbmFsIHByb3h5IGhhZCBvbmUuXG4gICAgLy8gICAtIGBfX2JvdW5kVGhpc2AgICAgICAgIOKAlCB0aGUgcmVjZWl2ZXIgcGFzc2VkIHRvIGAuYmluZCh0aGlzQXJnLCDigKYpYC5cbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICBBbHdheXMgc2V0IChldmVuIHdoZW4gYHRoaXNBcmdgIGlzXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgYG51bGxgL2B1bmRlZmluZWRgKSBzbyB0aGUgcmVkdWNlciBjYW5cbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXN0aW5ndWlzaCBcIndhcyBib3VuZFwiIGZyb20gXCJ3YXNuJ3RcIi5cbiAgICAvLyAgIC0gYF9fYm91bmRBcmdzYCAgICAgICAg4oCUIG9ubHkgd2hlbiB0aGUgdXNlciBzdXBwbGllZCBwcmVmaWxsZWRcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmd1bWVudHMgKGAuYmluZCh0aGlzQXJnLCB4LCB5KWApLiBUaGVcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTV0MgcGx1Z2luIG9ubHkgZXZlciBlbWl0cyBgLmJpbmQodGhpcylgXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9kYXksIHNvIHRoaXMgaXMgcmFyZSBpbiBwcmFjdGljZTsgd2VcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGlsbCBjYXB0dXJlIGl0IHNvIHRoZSBwYXJ0aWFsIGFyZ3NcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdXJ2aXZlIHNlcmlhbGl6YXRpb24gcmF0aGVyIHRoYW5cbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaWxlbnRseSBkaXNhcHBlYXJpbmcgb24gdGhlIHN0ZXAgc2lkZS5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoc3RlcEZ1bmN0aW9uLCAnYmluZCcsIHtcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiAoXG4gICAgICAgIHRoaXM6IHR5cGVvZiBzdGVwRnVuY3Rpb24sXG4gICAgICAgIHRoaXNBcmc6IHVua25vd24sXG4gICAgICAgIC4uLnBhcnRpYWxBcmdzOiB1bmtub3duW11cbiAgICAgICkge1xuICAgICAgICBjb25zdCBib3VuZCA9IEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kLmNhbGwoXG4gICAgICAgICAgdGhpcyxcbiAgICAgICAgICB0aGlzQXJnLFxuICAgICAgICAgIC4uLnBhcnRpYWxBcmdzXG4gICAgICAgICk7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShib3VuZCwgJ3N0ZXBJZCcsIHtcbiAgICAgICAgICB2YWx1ZTogc3RlcE5hbWUsXG4gICAgICAgICAgd3JpdGFibGU6IGZhbHNlLFxuICAgICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UsXG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoY2xvc3VyZVZhcnNGbikge1xuICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShib3VuZCwgJ19fY2xvc3VyZVZhcnNGbicsIHtcbiAgICAgICAgICAgIHZhbHVlOiBjbG9zdXJlVmFyc0ZuLFxuICAgICAgICAgICAgd3JpdGFibGU6IGZhbHNlLFxuICAgICAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgICAgICBjb25maWd1cmFibGU6IGZhbHNlLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShib3VuZCwgJ19fYm91bmRUaGlzJywge1xuICAgICAgICAgIHZhbHVlOiB0aGlzQXJnLFxuICAgICAgICAgIHdyaXRhYmxlOiBmYWxzZSxcbiAgICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgICBjb25maWd1cmFibGU6IGZhbHNlLFxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKHBhcnRpYWxBcmdzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoYm91bmQsICdfX2JvdW5kQXJncycsIHtcbiAgICAgICAgICAgIHZhbHVlOiBwYXJ0aWFsQXJncyxcbiAgICAgICAgICAgIHdyaXRhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICAgICAgY29uZmlndXJhYmxlOiBmYWxzZSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYm91bmQ7XG4gICAgICB9LFxuICAgICAgd3JpdGFibGU6IGZhbHNlLFxuICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICBjb25maWd1cmFibGU6IGZhbHNlLFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHN0ZXBGdW5jdGlvbjtcbiAgfTtcbn1cbiJdfQ==
350
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RlcC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9zdGVwLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNyRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDaEQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDM0QsT0FBTyxFQUFnQyxrQkFBa0IsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUMvRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3pDLE9BQU8sRUFDTCxzQkFBc0IsRUFDdEIsdUJBQXVCLEVBQ3ZCLGdCQUFnQixHQUVqQixNQUFNLGNBQWMsQ0FBQztBQUV0QixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUU5RSxNQUFNLFVBQVUsYUFBYSxDQUFDLEdBQWdDO0lBQzVELE9BQU8sU0FBUyxPQUFPLENBQ3JCLFFBQWdCLEVBQ2hCLGFBQWtEO1FBRWxELHVGQUF1RjtRQUN2RixNQUFNLFlBQVksR0FBRyxVQUVuQixHQUFHLElBQVU7WUFFYixNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsR0FBRyxhQUFhLEVBQVUsQ0FBQztZQUU3RCxNQUFNLGFBQWEsR0FBRyxRQUFRLEdBQUcsQ0FBQyxZQUFZLEVBQUUsRUFBRSxDQUFDO1lBRW5ELE1BQU0sU0FBUyxHQUE0QjtnQkFDekMsSUFBSSxFQUFFLE1BQU07Z0JBQ1osYUFBYTtnQkFDYixRQUFRO2dCQUNSLElBQUk7YUFDTCxDQUFDO1lBRUYsdUVBQXVFO1lBQ3ZFLDhEQUE4RDtZQUM5RCxJQUFJLElBQUksS0FBSyxTQUFTLElBQUksSUFBSSxLQUFLLElBQUksSUFBSSxJQUFJLEtBQUssVUFBVSxFQUFFLENBQUM7Z0JBQy9ELFNBQVMs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T0FBTyxZQUFZLENBQUM7SUFDdEIsQ0FBQyxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEZhdGFsRXJyb3IsIFJlcGxheURpdmVyZ2VuY2VFcnJvciB9IGZyb20gJ0B3b3JrZmxvdy9lcnJvcnMnO1xuaW1wb3J0IHsgd2l0aFJlc29sdmVycyB9IGZyb20gJ0B3b3JrZmxvdy91dGlscyc7XG5pbXBvcnQgeyBFdmVudENvbnN1bWVyUmVzdWx0IH0gZnJvbSAnLi9ldmVudHMtY29uc3VtZXIuanMnO1xuaW1wb3J0IHsgdHlwZSBTdGVwSW52b2NhdGlvblF1ZXVlSXRlbSwgV29ya2Zsb3dTdXNwZW5zaW9uIH0gZnJvbSAnLi9nbG9iYWwuanMnO1xuaW1wb3J0IHsgc3RlcExvZ2dlciB9IGZyb20gJy4vbG9nZ2VyLmpzJztcbmltcG9ydCB7XG4gIGF3YWl0RWFybGllckRlbGl2ZXJpZXMsXG4gIHJlZ2lzdGVyRGVsaXZlcnlCYXJyaWVyLFxuICBzY2hlZHVsZVdoZW5JZGxlLFxuICB0eXBlIFdvcmtmbG93T3JjaGVzdHJhdG9yQ29udGV4dCxcbn0gZnJvbSAnLi9wcml2YXRlLmpzJztcbmltcG9ydCB0eXBlIHsgU2VyaWFsaXphYmxlIH0gZnJvbSAnLi9zY2hlbWFzLmpzJztcbmltcG9ydCB7IGh5ZHJhdGVTdGVwRXJyb3IsIGh5ZHJhdGVTdGVwUmV0dXJuVmFsdWUgfSBmcm9tICcuL3NlcmlhbGl6YXRpb24uanMnO1xuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlVXNlU3RlcChjdHg6IFdvcmtmbG93T3JjaGVzdHJhdG9yQ29udGV4dCkge1xuICByZXR1cm4gZnVuY3Rpb24gdXNlU3RlcDxBcmdzIGV4dGVuZHMgU2VyaWFsaXphYmxlW10sIFJlc3VsdD4oXG4gICAgc3RlcE5hbWU6IHN0cmluZyxcbiAgICBjbG9zdXJlVmFyc0ZuPzogKCkgPT4gUmVjb3JkPHN0cmluZywgU2VyaWFsaXphYmxlPlxuICApIHtcbiAgICAvLyBVc2UgYSByZWd1bGFyIGZ1bmN0aW9uIChub3QgYXJyb3cpIHNvIHdlIGNhbiBjYXB0dXJlIGB0aGlzYCB3aGVuIGludm9rZWQgYXMgYSBtZXRob2RcbiAgICBjb25zdCBzdGVwRnVuY3Rpb24gPSBmdW5jdGlvbiAoXG4gICAgICB0aGlzOiB1bmtub3duLFxuICAgICAgLi4uYXJnczogQXJnc1xuICAgICk6IFByb21pc2U8UmVzdWx0PiB7XG4gICAgICBjb25zdCB7IHByb21pc2UsIHJlc29sdmUsIHJlamVjdCB9ID0gd2l0aFJlc29sdmVyczxSZXN1bHQ+KCk7XG5cbiAgICAgIGNvbnN0IGNvcnJlbGF0aW9uSWQgPSBgc3RlcF8ke2N0eC5nZW5lcmF0ZVVsaWQoKX1gO1xuXG4gICAgICBjb25zdCBxdWV1ZUl0ZW06IFN0ZXBJbnZvY2F0aW9uUXVldWVJdGVtID0ge1xuICAgICAgICB0eXBlOiAnc3RlcCcsXG4gICAgICAgIGNvcnJlbGF0aW9uSWQsXG4gICAgICAgIHN0ZXBOYW1lLFxuICAgICAgICBhcmdzLFxuICAgICAgfTtcblxuICAgICAgLy8gQ2FwdHVyZSBgdGhpc2AgdmFsdWUgZm9yIG1ldGhvZCBpbnZvY2F0aW9ucyAoZS5nLiwgTXlDbGFzcy5tZXRob2QoKSlcbiAgICAgIC8vIE9ubHkgaW5jbHVkZSBpZiBgdGhpc2AgaXMgZGVmaW5lZCBhbmQgbm90IHRoZSBnbG9iYWwgb2JqZWN0XG4gICAgICBpZiAodGhpcyAhPT0gdW5kZWZpbmVkICYmIHRoaXMgIT09IG51bGwgJiYgdGhpcyAhPT0gZ2xvYmFsVGhpcykge1xuICAgICAgICBxdWV1ZUl0ZW0udGhpc1ZhbCA9IHRoaXMgYXMgU2VyaWFsaXphYmxlO1xuICAgICAgfVxuXG4gICAgICAvLyBJbnZva2UgdGhlIGNsb3N1cmUgdmFyaWFibGVzIGZ1bmN0aW9uIHRvIGdldCB0aGUgY2xvc3VyZSBzY29wZVxuICAgICAgY29uc3QgY2xvc3VyZVZhcnMgPSBjbG9zdXJlVmFyc0ZuPy4oKTtcbiAgICAgIGlmIChjbG9zdXJlVmFycykge1xuICAgICAgICBxdWV1ZUl0ZW0uY2xvc3VyZVZhcnMgPSBjbG9zdXJlVmFycztcbiAgICAgIH1cblxuICAgICAgY3R4Lmludm9jYXRpb25zUXVldWUuc2V0KGNvcnJlbGF0aW9uSWQsIHF1ZXVlSXRlbSk7XG5cbiAgICAgIHN0ZXBMb2dnZXIuZGVidWcoJ1N0ZXAgY29uc3VtZXIgc2V0dXAnLCB7XG4gICAgICAgIGNvcnJlbGF0aW9uSWQsXG4gICAgICAgIHN0ZXBOYW1lLFxuICAgICAgICBhcmdzLFxuICAgICAgfSk7XG4gICAgICBjdHguZXZlbnRzQ29uc3VtZXIuc3Vic2NyaWJlKChldmVudCkgPT4ge1xuICAgICAgICBpZiAoIWV2ZW50KSB7XG4gICAgICAgICAgLy8gV2UndmUgcmVhY2hlZCB0aGUgZW5kIG9mIHRoZSBldmVudHMsIHNvIHRoaXMgc3RlcCBoYXMgZWl0aGVyIG5vdCBiZWVuIHJ1biBvciBpcyBjdXJyZW50bHkgcnVubmluZy5cbiAgICAgICAgICAvLyBDcnVjaWFsbHksIGlmIHdlIGdvdCBoZXJlLCB0aGVuIHRoaXMgc3RlcCBQcm9taXNlIGRvZXNcbiAgICAgICAgICAvLyBub3QgcmVzb2x2ZSBzbyB0aGF0IHRoZSB1c2VyIHdvcmtmbG93IGNvZGUgZG9lcyBub3QgcHJvY2VlZCBhbnkgZnVydGhlci5cbiAgICAgICAgICAvLyBOb3RpZnkgdGhlIHdvcmtmbG93IGhhbmRsZXIgdGhhdCB0aGlzIHN0ZXAgaGFzIG5vdCBiZWVuIHJ1biAvIGhhcyBub3QgY29tcGxldGVkIHlldC5cbiAgICAgICAgICBzY2hlZHVsZVdoZW5JZGxlKGN0eCwgKCkgPT4ge1xuICAgICAgICAgICAgY3R4Lm9uV29ya2Zsb3dFcnJvcihcbiAgICAgICAgICAgICAgbmV3IFdvcmtmbG93U3VzcGVuc2lvbihjdHguaW52b2NhdGlvbnNRdWV1ZSwgY3R4Lmdsb2JhbFRoaXMpXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybiBFdmVudENvbnN1bWVyUmVzdWx0Lk5vdENvbnN1bWVkO1xuICAgICAgICB9XG5cbiAgICAgICAgc3RlcExvZ2dlci5kZWJ1ZygnU3RlcCBjb25zdW1lciBldmVudCBwcm9jZXNzaW5nJywge1xuICAgICAgICAgIGNvcnJlbGF0aW9uSWQsXG4gICAgICAgICAgc3RlcE5hbWUsXG4gICAgICAgICAgYXJnczogYXJncy5qb2luKCcsICcpLFxuICAgICAgICAgIGluY29taW5nQ29ycmVsYXRpb25JZDogZXZlbnQuY29ycmVsYXRpb25JZCxcbiAgICAgICAgICBpc01hdGNoOiBjb3JyZWxhdGlvbklkID09PSBldmVudC5jb3JyZWxhdGlvbklkLFxuICAgICAgICAgIGV2ZW50VHlwZTogZXZlbnQuZXZlbnRUeXBlLFxuICAgICAgICB9KTtcblxuICAgICAgICBpZiAoZXZlbnQuY29ycmVsYXRpb25JZCAhPT0gY29ycmVsYXRpb25JZCkge1xuICAgICAgICAgIC8vIFdlJ3JlIG5vdCBpbnRlcmVzdGVkIGluIHRoaXMgZXZlbnQgLSB0aGUgY29ycmVsYXRpb25JZCBiZWxvbmdzIHRvIGEgZGlmZmVyZW50IGVudGl0eVxuICAgICAgICAgIHJldHVybiBFdmVudENvbnN1bWVyUmVzdWx0Lk5vdENvbnN1bWVkO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZXZlbnRTdGVwTmFtZSA9XG4gICAgICAgICAgJ2V2ZW50RGF0YScgaW4gZXZlbnQgJiZcbiAgICAgICAgICBldmVudC5ldmVudERhdGEgJiZcbiAgICAgICAgICAnc3RlcE5hbWUnIGluIGV2ZW50LmV2ZW50RGF0YVxuICAgICAgICAgICAgPyBldmVudC5ldmVudERhdGEuc3RlcE5hbWVcbiAgICAgICAgICAgIDogdW5kZWZpbmVkO1xuXG4gICAgICAgIGlmICh0eXBlb2YgZXZlbnRTdGVwTmFtZSA9PT0gJ3N0cmluZycgJiYgZXZlbnRTdGVwTmFtZSAhPT0gc3RlcE5hbWUpIHtcbiAgICAgICAgICBjdHgucHJvbWlzZVF1ZXVlID0gY3R4LnByb21pc2VRdWV1ZS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIGN0eC5vbldvcmtmbG93RXJyb3IoXG4gICAgICAgICAgICAgIG5ldyBSZXBsYXlEaXZlcmdlbmNlRXJyb3IoXG4gICAgICAgICAgICAgICAgYFJlcGxheSBkaXZlcmdlbmNlOiBzdGVwIGV2ZW50ICR7ZXZlbnQuZXZlbnRUeXBlfSBmb3IgJHtjb3JyZWxhdGlvbklkfSBiZWxvbmdzIHRvIFwiJHtldmVudFN0ZXBOYW1lfVwiLCBidXQgdGhlIGN1cnJlbnQgc3RlcCBjb25zdW1lciBpcyBcIiR7c3RlcE5hbWV9XCJgLFxuICAgICAgICAgICAgICAgIHsgZXZlbnRJZDogZXZlbnQuZXZlbnRJZCB9XG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuIEV2ZW50Q29uc3VtZXJSZXN1bHQuRmluaXNoZWQ7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZXZlbnQuZXZlbnRUeXBlID09PSAnc3RlcF9jcmVhdGVkJykge1xuICAgICAgICAgIC8vIFN0ZXAgaGFzIGJlZW4gY3JlYXRlZCAocmVnaXN0ZXJlZCBmb3IgZXhlY3V0aW9uKSAtIG1hcmsgYXMgaGF2aW5nIGV2ZW50XG4gICAgICAgICAgLy8gYnV0IGtlZXAgaW4gcXVldWUgc28gc3VzcGVuc2lvbiBoYW5kbGVyIGtub3dzIHRvIHF1ZXVlIGV4ZWN1dGlvbiB3aXRob3V0XG4gICAgICAgICAgLy8gY3JlYXRpbmcgYSBkdXBsaWNhdGUgc3RlcF9jcmVhdGVkIGV2ZW50XG4gICAgICAgICAgY29uc3QgcXVldWVJdGVtID0gY3R4Lmludm9jYXRpb25zUXVldWUuZ2V0KGNvcnJlbGF0aW9uSWQpO1xuICAgICAgICAgIGlmICghcXVldWVJdGVtIHx8IHF1ZXVlSXRlbS50eXBlICE9PSAnc3RlcCcpIHtcbiAgICAgICAgICAgIC8vIFRoaXMgaW5kaWNhdGVzIGV2ZW50IGxvZyBjb3JydXB0aW9uIC0gc3RlcF9jcmVhdGVkIHJlY2VpdmVkXG4gICAgICAgICAgICAvLyBidXQgdGhlIHN0ZXAgd2FzIG5ldmVyIGludm9rZWQgaW4gdGhlIHdvcmtmbG93IGR1cmluZyByZXBsYXkuXG4gICAgICAgICAgICBjdHgucHJvbWlzZVF1ZXVlID0gY3R4LnByb21pc2VRdWV1ZS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgcmVqZWN0KFxuICAgICAgICAgICAgICAgIG5ldyBSZXBsYXlEaXZlcmdlbmNlRXJyb3IoXG4gICAgICAgICAgICAgICAgICBgUmVwbGF5IGRpdmVyZ2VuY2U6IHN0ZXAgJHtjb3JyZWxhdGlvbklkfSAoJHtzdGVwTmFtZX0pIGNyZWF0ZWQgYnV0IG5vdCBmb3VuZCBpbiBpbnZvY2F0aW9uIHF1ZXVlYCxcbiAgICAgICAgICAgICAgICAgIHsgZXZlbnRJZDogZXZlbnQuZXZlbnRJZCB9XG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gRXZlbnRDb25zdW1lclJlc3VsdC5GaW5pc2hlZDtcbiAgICAgICAgICB9XG4gICAgICAgICAgcXVldWVJdGVtLmhhc0NyZWF0ZWRFdmVudCA9IHRydWU7XG4gICAgICAgICAgLy8gQ29udGludWUgd2FpdGluZyBmb3Igc3RlcF9zdGFydGVkL3N0ZXBfY29tcGxldGVkL3N0ZXBfZmFpbGVkIGV2ZW50c1xuICAgICAgICAgIHJldHVybiBFdmVudENvbnN1bWVyUmVzdWx0LkNvbnN1bWVkO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGV2ZW50LmV2ZW50VHlwZSA9PT0gJ3N0ZXBfc3RhcnRlZCcpIHtcbiAgICAgICAgICAvLyBTdGVwIHdhcyBzdGFydGVkIGJ1dCBpcyBub3QgdGVybWluYWwg4oCUIGl0IHN0YXlzIGluIHRoZVxuICAgICAgICAgIC8vIGludm9jYXRpb25RdWV1ZSBzbyB0aGUgc3VzcGVuc2lvbiBoYW5kbGVyIGNhbiBkZWNpZGUgaG93IHRvXG4gICAgICAgICAgLy8gZGlzcGF0Y2ggaXQuIFJlY29yZCB0aGUgaW5saW5lLW93bmVyc2hpcCBzdGF0ZSBmcm9tIHRoZSBldmVudDpcbiAgICAgICAgICAvLyB0aGUgTEFURVNUIHN0YXJ0IHdpbnMsIHNvIGEgc3RhbXBlZCBzdGFydCAoaW5saW5lIGV4ZWN1dGlvbiBvclxuICAgICAgICAgIC8vIG93bmVyIHJlY292ZXJ5KSBzZXRzIHRoZSBvd25lciBhbmQgYW4gdW5zdGFtcGVkIG9uZSAoYSByZXRyeVxuICAgICAgICAgIC8vIGF0dGVtcHQgZHJpdmVuIGJ5IGEgcXVldWVkIHN0ZXAgbWVzc2FnZSwgb3IgYW4gb2xkZXIgcnVudGltZSlcbiAgICAgICAgICAvLyBjbGVhcnMgaXQuIFRoZSBkaXNwYXRjaCBsb29wIHVzZXMgdGhpcyB0byBzdXBwcmVzcyB0aGUgaW1tZWRpYXRlXG4gICAgICAgICAgLy8gcmVxdWV1ZSBvZiBhIHN0ZXAgd2hvc2Ugb3duaW5nIGludm9jYXRpb24gbWF5IHN0aWxsIGJlIHJ1bm5pbmdcbiAgICAgICAgICAvLyBpdHMgYm9keSAodmVyY2VsL3dvcmtmbG93IzI3ODApLlxuICAgICAgICAgIGNvbnN0IHF1ZXVlSXRlbSA9IGN0eC5pbnZvY2F0aW9uc1F1ZXVlLmdldChjb3JyZWxhdGlvbklkKTtcbiAgICAgICAgICBpZiAocXVldWVJdGVtICYmIHF1ZXVlSXRlbS50eXBlID09PSAnc3RlcCcpIHtcbiAgICAgICAgICAgIGNvbnN0IG93bmVyTWVzc2FnZUlkID1cbiAgICAgICAgICAgICAgJ2V2ZW50RGF0YScgaW4gZXZlbnQgJiZcbiAgICAgICAgICAgICAgZXZlbnQuZXZlbnREYXRhICYmXG4gICAgICAgICAgICAgICdvd25lck1lc3NhZ2VJZCcgaW4gZXZlbnQuZXZlbnREYXRhICYmXG4gICAgICAgICAgICAgIHR5cGVvZiBldmVudC5ldmVudERhdGEub3duZXJNZXNzYWdlSWQgPT09ICdzdHJpbmcnXG4gICAgICAgICAgICAgICAgPyBldmVudC5ldmVudERhdGEub3duZXJNZXNzYWdlSWRcbiAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIHF1ZXVlSXRlbS5vd25lck1lc3NhZ2VJZCA9IG93bmVyTWVzc2FnZUlkO1xuICAgICAgICAgICAgcXVldWVJdGVtLmxhc3RTdGFydGVkQXQgPSArZXZlbnQuY3JlYXRlZEF0O1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gRXZlbnRDb25zdW1lclJlc3VsdC5Db25zdW1lZDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChldmVudC5ldmVudFR5cGUgPT09ICdzdGVwX3JldHJ5aW5nJykge1xuICAgICAgICAgIC8vIFN0ZXAgaXMgYmVpbmcgcmV0cmllZCDigJQgY29uc3VtZSB0aGUgZXZlbnQgYW5kIHdhaXQgZm9yIHRoZSBuZXh0XG4gICAgICAgICAgLy8gc3RlcF9zdGFydGVkLiBGcm9tIGhlcmUgb24gdGhlIHN0ZXAgaXMgcXVldWUtb3duZWQgKHRoZSBkZWxheWVkXG4gICAgICAgICAgLy8gcmV0cnkgaGFuZG9mZiBtZXNzYWdlLCBvciB0aGUgcmVwbGF5IHJlcXVldWUpLCBzbyBpbmxpbmVcbiAgICAgICAgICAvLyBvd25lcnNoaXAgaXMgcGVybWFuZW50bHkgbGFwc2VkIGZvciB0aGlzIGNvcnJlbGF0aW9uIElELlxuICAgICAgICAgIGNvbnN0IHF1ZXVlSXRlbSA9IGN0eC5pbnZvY2F0aW9uc1F1ZXVlLmdldChjb3JyZWxhdGlvbklkKTtcbiAgICAgICAgICBpZiAocXVldWVJdGVtICYmIHF1ZXVlSXRlbS50eXBlID09PSAnc3RlcCcpIHtcbiAgICAgICAgICAgIHF1ZXVlSXRlbS5zYXdSZXRyeWluZyA9IHRydWU7XG4gICAgICAgICAgICBxdWV1ZUl0ZW0ub3duZXJNZXNzYWdlSWQgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBFdmVudENvbnN1bWVyUmVzdWx0LkNvbnN1bWVkO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGV2ZW50LmV2ZW50VHlwZSA9PT0gJ3N0ZXBfZmFpbGVkJykge1xuICAgICAgICAgIC8vIFRlcm1pbmFsIHN0YXRlIC0gd2UgY2FuIHJlbW92ZSB0aGUgaW52b2NhdGlvblF1ZXVlIGl0ZW1cbiAgICAgICAgICBjdHguaW52b2NhdGlvbnNRdWV1ZS5kZWxldGUoZXZlbnQuY29ycmVsYXRpb25JZCk7XG4gICAgICAgICAgLy8gU3RlcCBmYWlsZWQgLSBjaGFpbiB0aHJvdWdoIHByb21pc2VRdWV1ZSB0byBlbnN1cmVcbiAgICAgICAgICAvLyBkZXRlcm1pbmlzdGljIG9yZGVyaW5nIG9mIGFsbCBwcm9taXNlIHJlc29sdXRpb25zL3JlamVjdGlvbnMuXG4gICAgICAgICAgLy8gSHlkcmF0ZSB0aGUgc2VyaWFsaXplZCB0aHJvd24gdmFsdWUgZnJvbSB0aGUgZXZlbnQgbG9nIHNvIHRoZVxuICAgICAgICAgIC8vIG9yaWdpbmFsIHR5cGUgaWRlbnRpdHkgYW5kIGN1c3RvbSBwcm9wZXJ0aWVzIGFyZSBwcmVzZXJ2ZWQuXG4gICAgICAgICAgLy9cbiAgICAgICAgICAvLyBUaGUgcmVqZWN0aW9uIGlzIGFzIGJyYW5jaC1kZWNpZGluZyBhcyBhIHN1Y2Nlc3M6IGl0IGRlY2lkZXNcbiAgICAgICAgICAvLyB3aGV0aGVyIGEgYHRyeWAvYGNhdGNoYCBjb250aW51YXRpb24gcnVucywgYW5kIHRoZXJlZm9yZSB3aGljaFxuICAgICAgICAgIC8vIFVMSURzIHRoZSBmb2xsb3ctdXAgYHVzZVN0ZXBgIGNhbGxzIGRyYXcuIFNvIGl0IGlzIG9yZGVyZWQgYnlcbiAgICAgICAgICAvLyBldmVudC1sb2cgcG9zaXRpb24gZXhhY3RseSBsaWtlIGBzdGVwX2NvbXBsZXRlZGAgYmVsb3cg4oCUIHNlZSB0aGVyZVxuICAgICAgICAgIC8vIGZvciB3aHkgdGhlIGRlZmVycmFsIGlzIGNhcHR1cmVkIGhlcmUsIGF0IGV2ZW50LWNvbnN1bXB0aW9uIHRpbWUsXG4gICAgICAgICAgLy8gYW5kIGF3YWl0ZWQgb2ZmIHRoZSBzZXJpYWwgcXVldWUuXG4gICAgICAgICAgY29uc3QgZXZlbnRJbmRleCA9IGN0eC5ldmVudHNDb25zdW1lci5ldmVudEluZGV4O1xuICAgICAgICAgIGNvbnN0IGJhcnJpZXIgPSByZWdpc3RlckRlbGl2ZXJ5QmFycmllcihjdHgsIGV2ZW50SW5kZXgsICdzdGVwJyk7XG4gICAgICAgICAgbGV0IHJlamVjdGlvbjogdW5rbm93bjtcbiAgICAgICAgICBjb25zdCBlYXJsaWVyRGVsaXZlcmVkID0gYXdhaXRFYXJsaWVyRGVsaXZlcmllcyhcbiAgICAgICAgICAgIGN0eCxcbiAgICAgICAgICAgIGV2ZW50SW5kZXgsXG4gICAgICAgICAgICAnc3RlcCdcbiAgICAgICAgICApO1xuICAgICAgICAgIGN0eC5wZW5kaW5nRGVsaXZlcmllcysrO1xuICAgICAgICAgIGN0eC5wcm9taXNlUXVldWUgPSBjdHgucHJvbWlzZVF1ZXVlLnRoZW4oYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgY29uc3QgcHJlcGFyZWQgPSBhd2FpdCBjdHgucmVwbGF5UGF5bG9hZENhY2hlLnByZXBhcmVFdmVudFBheWxvYWQoXG4gICAgICAgICAgICAgICAgZXZlbnQuZXZlbnRJZCxcbiAgICAgICAgICAgICAgICAnZXJyb3InLFxuICAgICAgICAgICAgICAgIGV2ZW50LmV2ZW50RGF0YS5lcnJvclxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICByZWplY3Rpb24gPSBhd2FpdCBoeWRyYXRlU3RlcEVycm9yKFxuICAgICAgICAgICAgICAgIGV2ZW50LmV2ZW50RGF0YS5lcnJvcixcbiAgICAgICAgICAgICAgICBjdHgucnVuSWQsXG4gICAgICAgICAgICAgICAgY3R4LmVuY3J5cHRpb25LZXksXG4gICAgICAgICAgICAgICAgY3R4Lmdsb2JhbFRoaXMsXG4gICAgICAgICAgICAgICAge30sXG4gICAgICAgICAgICAgICAgcHJlcGFyZWRcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGh5ZHJhdGVFcnIpIHtcbiAgICAgICAgICAgICAgLy8gSWYgaHlkcmF0aW9uIGZhaWxzIGZvciBhbnkgcmVhc29uLCBmYWxsIGJhY2sgdG8gYSBnZW5lcmljXG4gICAgICAgICAgICAgIC8vIEZhdGFsRXJyb3Igc28gdGhlIHdvcmtmbG93IGRvZXNuJ3QgaGFuZy4gVGhpcyBzaG91bGQgYmVcbiAgICAgICAgICAgICAgLy8gZXh0cmVtZWx5IHJhcmUgaW4gcHJhY3RpY2UgKGNvcnJ1cHRlZCBldmVudCBkYXRhKS5cbiAgICAgICAgICAgICAgc3RlcExvZ2dlci5lcnJvcignRmFpbGVkIHRvIGh5ZHJhdGUgc3RlcF9mYWlsZWQgZXJyb3InLCB7XG4gICAgICAgICAgICAgICAgY29ycmVsYXRpb25JZDogZXZlbnQuY29ycmVsYXRpb25JZCxcbiAgICAgICAgICAgICAgICBlcnJvcjpcbiAgICAgICAgICAgICAgICAgIGh5ZHJhdGVFcnIgaW5zdGFuY2VvZiBFcnJvclxuICAgICAgICAgICAgICAgICAgICA/IGh5ZHJhdGVFcnIubWVzc2FnZVxuICAgICAgICAgICAgICAgICAgICA6IFN0cmluZyhoeWRyYXRlRXJyKSxcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIHJlamVjdGlvbiA9IG5ldyBGYXRhbEVycm9yKFxuICAgICAgICAgICAgICAgIGBGYWlsZWQgdG8gaHlkcmF0ZSBzdGVwIGVycm9yOiAke1xuICAgICAgICAgICAgICAgICAgaHlkcmF0ZUVyciBpbnN0YW5jZW9mIEVycm9yXG4gICAgICAgICAgICAgICAgICAgID8gaHlkcmF0ZUVyci5tZXNzYWdlXG4gICAgICAgICAgICAgICAgICAgIDogU3RyaW5nKGh5ZHJhdGVFcnIpXG4gICAgICAgICAgICAgICAgfWBcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICAgIGN0eC5wZW5kaW5nRGVsaXZlcmllcy0tO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdm9pZCBlYXJsaWVyRGVsaXZlcmVkLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICBiYXJyaWVyLm1hcmtEZWxpdmVyZWQoKTtcbiAgICAgICAgICAgICAgcmVqZWN0KHJlamVjdGlvbik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm4gRXZlbnRDb25zdW1lclJlc3VsdC5GaW5pc2hlZDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChldmVudC5ldmVudFR5cGUgPT09ICdzdGVwX2NvbXBsZXRlZCcpIHtcbiAgICAgICAgICAvLyBUZXJtaW5hbCBzdGF0ZSAtIHdlIGNhbiByZW1vdmUgdGhlIGludm9jYXRpb25RdWV1ZSBpdGVtXG4gICAgICAgICAgY3R4Lmludm9jYXRpb25zUXVldWUuZGVsZXRlKGV2ZW50LmNvcnJlbGF0aW9uSWQpO1xuXG4gICAgICAgICAgLy8gU3RlcCBoYXMgY29tcGxldGVkLCBzbyByZXNvbHZlIHRoZSBQcm9taXNlIHdpdGggdGhlIGNhY2hlZCByZXN1bHQuXG4gICAgICAgICAgLy8gVGhlIGh5ZHJhdGlvbiBpcyBhc3luYyAoZS5nLiwgZGVjcnlwdGlvbiksIHNvIHdlIGNoYWluIGl0IHRocm91Z2hcbiAgICAgICAgICAvLyBjdHgucHJvbWlzZVF1ZXVlIHRvIGVuc3VyZSB0aGF0IGV2ZW4gaWYgZGVzZXJpYWxpemF0aW9uXG4gICAgICAgICAgLy8gdGFrZXMgdmFyaWFibGUgdGltZSwgcHJvbWlzZXMgcmVzb2x2ZSBpbiBldmVudCBsb2cgb3JkZXIuXG4gICAgICAgICAgLy8gRWFjaCBzdGVwJ3MgaHlkcmF0aW9uICsgcmVzb2x2ZSB3YWl0cyBmb3IgYWxsIHByaW9yIGh5ZHJhdGlvbnNcbiAgICAgICAgICAvLyB0byBjb21wbGV0ZSBiZWZvcmUgZXhlY3V0aW5nLCBwcmVzZXJ2aW5nIGRldGVybWluaXN0aWMgb3JkZXJpbmcuXG4gICAgICAgICAgLy9cbiAgICAgICAgICAvLyBQcmVwYXJlZCBzZXJpYWxpemVkIGJ5dGVzIGFyZSBzaGFyZWQgYWNyb3NzIHJlcGxheSBWTXMsIGJ1dCBmaW5hbFxuICAgICAgICAgIC8vIG9iamVjdHMgYXJlIGFsd2F5cyByZXZpdmVkIGhlcmUgaW5zaWRlIHRoaXMgb3JkZXJlZCBxdWV1ZSBzbG90LlxuICAgICAgICAgIC8vIE9ubHkgaW1tdXRhYmxlIHByaW1pdGl2ZSBmaW5hbCB2YWx1ZXMgYnlwYXNzIHJldml2YWwgZW50aXJlbHkuXG4gICAgICAgICAgLy9cbiAgICAgICAgICAvLyBIeWRyYXRpb24gY29zdCBpcyB3aGF0IG1ha2VzIHRoaXMgZGVsaXZlcnkncyB0aW1pbmcgdW5zdGFibGVcbiAgICAgICAgICAvLyBhY3Jvc3MgcmVwbGF5cyBvZiBvbmUgaW52b2NhdGlvbjogdGhlIGZpcnN0IHJlcGxheSBwYXlzIHRoZSBmdWxsXG4gICAgICAgICAgLy8gZGVjcnlwdC9kZWNvbXByZXNzL3Jldml2ZSwgbGF0ZXIgcmVwbGF5cyBtZW1vLWhpdCBhIHByaW1pdGl2ZVxuICAgICAgICAgIC8vIHJlc3VsdCBpbiBgUmVwbGF5UGF5bG9hZENhY2hlYCBhbmQgZmluaXNoIGluIGEgaG9wIG9yIHR3by4gQVxuICAgICAgICAgIC8vIHdvcmtmbG93IGF3YWl0aW5nIHRoaXMgcmVzdWx0IG9uIG9uZSBicmFuY2ggYW5kIGEgYHNsZWVwKClgIG9yXG4gICAgICAgICAgLy8gaG9vayBwYXlsb2FkIG9uIGFub3RoZXIgd291bGQgdGhlcmVmb3JlIGFsbG9jYXRlIGl0cyBmb2xsb3ctdXBcbiAgICAgICAgICAvLyBzdGVwIFVMSURzIGluIGEgZGlmZmVyZW50IG9yZGVyIG9uIGEgd2FybSByZXBsYXkgdGhhbiB0aGVcbiAgICAgICAgICAvLyBpbnZvY2F0aW9uIHRoYXQgV1JPVEUgdGhvc2UgYHN0ZXBfY3JlYXRlZGAgZXZlbnRzIGRpZCDigJQgYVxuICAgICAgICAgIC8vIHBlcm1hbmVudCBgUmVwbGF5RGl2ZXJnZW5jZUVycm9yYC4gU28gdGhlIHJlc3VsdCBpcyBvcmRlcmVkIGJ5XG4gICAgICAgICAgLy8gZXZlbnQtbG9nIHBvc2l0aW9uIHRocm91Z2ggdGhlIGRlbGl2ZXJ5LWJhcnJpZXIgcmVnaXN0cnkgKHNlZVxuICAgICAgICAgIC8vIGBjdHgucGVuZGluZ0RlbGl2ZXJ5QmFycmllcnNgKTpcbiAgICAgICAgICAvLyAgLSBSZWdpc3RlciBhICdzdGVwJyBiYXJyaWVyIGF0IHRoaXMgZXZlbnQncyBpbmRleCBzbyBhXG4gICAgICAgICAgLy8gICAgTEFURVItaW4tbG9nIHdhaXQvaG9vayBkZWxpdmVyeSBpcyBoYW5kZWQgb3ZlciBvbmx5IGFmdGVyIGl0LlxuICAgICAgICAgIC8vICAtIEh5ZHJhdGUgaW5zaWRlIHRoaXMgc2VyaWFsIHF1ZXVlIHNsb3QgKGtlZXBpbmcgYXN5bmNcbiAgICAgICAgICAvLyAgICBkZXNlcmlhbGl6YXRpb24gaW4gZXZlbnQtbG9nIG9yZGVyKSBidXQgb25seSBDQVBUVVJFIHRoZVxuICAgICAgICAgIC8vICAgIG91dGNvbWU7IHRoZW4gZGVmZXIgYmVoaW5kIGV2ZXJ5IEVBUkxJRVItaW4tbG9nIHdhaXQgYW5kIGhvb2tcbiAgICAgICAgICAvLyAgICBkZWxpdmVyeSBiZWZvcmUgcmVzb2x2aW5nLCBhbmQgbWFyayB0aGlzIHN0ZXAgZGVsaXZlcmVkLlxuICAgICAgICAgIC8vXG4gICAgICAgICAgLy8gVGhlIGRlZmVycmFsIGlzIGNhcHR1cmVkIEhFUkUsIHdoaWxlIGNvbnN1bWluZyB0aGUgZXZlbnQsIGFuZCBub3RcbiAgICAgICAgICAvLyBpbnNpZGUgdGhlIHF1ZXVlIHNsb3QuIFR3byByZWFzb25zLCBib3RoIGxvYWQtYmVhcmluZzpcbiAgICAgICAgICAvLyAgLSBEZXRlcm1pbmlzbTogdGhlIHNldCBvZiBlYXJsaWVyIGRlbGl2ZXJpZXMgaXMgdGhlbiBhIGZ1bmN0aW9uIG9mXG4gICAgICAgICAgLy8gICAgbG9nIHBvc2l0aW9uIGFsb25lLiBDYXB0dXJlZCBsYXRlciBpdCB3b3VsZCBkZXBlbmQgb24gaG93IG11Y2hcbiAgICAgICAgICAvLyAgICBoeWRyYXRpb24gdGhlIGVhcmxpZXIgZGVsaXZlcmllcyBoYWQgYWxyZWFkeSBmaW5pc2hlZCDigJQgdGhlIHZlcnlcbiAgICAgICAgICAvLyAgICBjb3VwbGluZyB0aGlzIGJhcnJpZXIgZXhpc3RzIHRvIHJlbW92ZS5cbiAgICAgICAgICAvLyAgLSBDb3ZlcmFnZTogYW4gZWFybGllciBkZWxpdmVyeSB3aG9zZSBvd24gaHlkcmF0aW9uIHNsb3QgcnVuc1xuICAgICAgICAgIC8vICAgIGZpcnN0IG9uIHRoaXMgc2VyaWFsIHF1ZXVlIGhhcyB1c3VhbGx5IGFscmVhZHkgcmVzb2x2ZWQgKGFuZCBzb1xuICAgICAgICAgIC8vICAgIGRlcmVnaXN0ZXJlZCBpdHMgYmFycmllcikgYnkgdGhlIHRpbWUgYSBsYXRlciBzbG90IHN0YXJ0cy4gUmVhZFxuICAgICAgICAgIC8vICAgIGF0IHNsb3Qgc3RhcnQsIGl0cyBiYXJyaWVyIHdvdWxkIGJlIGludmlzaWJsZSBhbmQgdGhpcyBzdGVwXG4gICAgICAgICAgLy8gICAgd291bGQgbm90IGRlZmVyIGF0IGFsbC4gRXZlcnkgZXZlbnQgaW4gb25lIGRyYWluIHdpbmRvdyBpc1xuICAgICAgICAgIC8vICAgIGNvbnN1bWVkIGJlZm9yZSBhbnkgc2xvdCBydW5zLCBzbyBjYXB0dXJpbmcgYXQgY29uc3VtcHRpb24gdGltZVxuICAgICAgICAgIC8vICAgIHNlZXMgYWxsIG9mIHRoZW0uXG4gICAgICAgICAgLy9cbiAgICAgICAgICAvLyBUaGUgZGVmZXJyYWwgcnVucyBPRkYgdGhlIHNlcmlhbCBxdWV1ZTogaXQgbWF5IHdhaXQgb24gYW4gZWFybGllclxuICAgICAgICAgIC8vIHdhaXQvaG9vayBkZWxpdmVyeSB3aG9zZSBvd24gcmVzb2x1dGlvbiBpcyBkcml2ZW4gYnkgdGhpcyBxdWV1ZSxcbiAgICAgICAgICAvLyBhbmQgYmxvY2tpbmcgYSBxdWV1ZSBzbG90IG9uIHRoYXQgd291bGQgZGVhZGxvY2sgdGhlIHF1ZXVlICh0aGVcbiAgICAgICAgICAvLyBzYW1lIGNvbnN0cmFpbnQgc2xlZXAudHMgYW5kIGhvb2sudHMgZG9jdW1lbnQpLiBgcGVuZGluZ0RlbGl2ZXJpZXNgXG4gICAgICAgICAgLy8gaXMgbGlrZXdpc2UgcmVsZWFzZWQgaW5zaWRlIHRoZSBzbG90LCBiZWZvcmUgdGhlIGRldGFjaGVkIGRlZmVyLCBzb1xuICAgICAgICAgIC8vIGBzY2hlZHVsZVdoZW5JZGxlYCBjYW4gc3RpbGwgcmVhY2ggaWRsZSBhbmQgcmV0aXJlIHRoZSBiYXJyaWVyc1xuICAgICAgICAgIC8vIHRoaXMgZGVmZXJyYWwgbWF5IGJlIHdhaXRpbmcgb24uXG4gICAgICAgICAgY29uc3QgY29tcGxldGVkRXZlbnRJZCA9IGV2ZW50LmV2ZW50SWQ7XG4gICAgICAgICAgY29uc3Qgc2VyaWFsaXplZFJlc3VsdCA9IGV2ZW50LmV2ZW50RGF0YS5yZXN1bHQ7XG4gICAgICAgICAgY29uc3QgZXZlbnRJbmRleCA9IGN0eC5ldmVudHNDb25zdW1lci5ldmVudEluZGV4O1xuICAgICAgICAgIGNvbnN0IGJhcnJpZXIgPSByZWdpc3RlckRlbGl2ZXJ5QmFycmllcihjdHgsIGV2ZW50SW5kZXgsICdzdGVwJyk7XG4gICAgICAgICAgbGV0IG91dGNvbWU6XG4gICAgICAgICAgICB8IHsgb2s6IHRydWU7IHZhbHVlOiBSZXN1bHQgfVxuICAgICAgICAgICAgfCB7IG9rOiBmYWxzZTsgZXJyb3I6IHVua25vd24gfTtcbiAgICAgICAgICBjb25zdCBlYXJsaWVyRGVsaXZlcmVkID0gYXdhaXRFYXJsaWVyRGVsaXZlcmllcyhcbiAgICAgICAgICAgIGN0eCxcbiAgICAgICAgICAgIGV2ZW50SW5kZXgsXG4gICAgICAgICAgICAnc3RlcCdcbiAgICAgICAgICApO1xuICAgICAgICAgIGN0eC5wZW5kaW5nRGVsaXZlcmllcysrO1xuICAgICAgICAgIGN0eC5wcm9taXNlUXVldWUgPSBjdHgucHJvbWlzZVF1ZXVlLnRoZW4oYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgY29uc3QgaHlkcmF0ZWRSZXN1bHQgPSBhd2FpdCBjdHgucmVwbGF5UGF5bG9hZENhY2hlLmdldFN0ZXBSZXN1bHQoXG4gICAgICAgICAgICAgICAgY29tcGxldGVkRXZlbnRJZCxcbiAgICAgICAgICAgICAgICBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICBjb25zdCBwcmVwYXJlZCA9XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IGN0eC5yZXBsYXlQYXlsb2FkQ2FjaGUucHJlcGFyZUV2ZW50UGF5bG9hZChcbiAgICAgICAgICAgICAgICAgICAgICBjb21wbGV0ZWRFdmVudElkLFxuICAgICAgICAgICAgICAgICAgICAgICdyZXN1bHQnLFxuICAgICAgICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWRSZXN1bHRcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBhd2FpdCBoeWRyYXRlU3RlcFJldHVyblZhbHVlKFxuICAgICAgICAgICAgICAgICAgICBzZXJpYWxpemVkUmVzdWx0LFxuICAgICAgICAgICAgICAgICAgICBjdHgucnVuSWQsXG4gICAgICAgICAgICAgICAgICAgIGN0eC5lbmNyeXB0aW9uS2V5LFxuICAgICAgICAgICAgICAgICAgICBjdHguZ2xvYmFsVGhpcyxcbiAgICAgICAgICAgICAgICAgICAge30sXG4gICAgICAgICAgICAgICAgICAgIHByZXBhcmVkXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgb3V0Y29tZSA9IHsgb2s6IHRydWUsIHZhbHVlOiBoeWRyYXRlZFJlc3VsdCBhcyBSZXN1bHQgfTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgIG91dGNvbWUgPSB7IG9rOiBmYWxzZSwgZXJyb3IgfTtcbiAgICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICAgIGN0eC5wZW5kaW5nRGVsaXZlcmllcy0tO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdm9pZCBlYXJsaWVyRGVsaXZlcmVkLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICBiYXJyaWVyLm1hcmtEZWxpdmVyZWQoKTtcbiAgICAgICAgICAgICAgaWYgKG91dGNvbWUub2spIHtcbiAgICAgICAgICAgICAgICByZXNvbHZlKG91dGNvbWUudmFsdWUpO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJlamVjdChvdXRjb21lLmVycm9yKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuIEV2ZW50Q29uc3VtZXJSZXN1bHQuRmluaXNoZWQ7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBUaGlzIHJlcGxheSBpbnN0YWxsZWQgYSBkaWZmZXJlbnQgY29uc3VtZXIgdGhhbiB0aGUgc3RvcmVkIGV2ZW50IG5lZWRzLlxuICAgICAgICBjdHgucHJvbWlzZVF1ZXVlID0gY3R4LnByb21pc2VRdWV1ZS50aGVuKCgpID0+IHtcbiAgICAgICAgICBjdHgub25Xb3JrZmxvd0Vycm9yKFxuICAgICAgICAgICAgbmV3IFJlcGxheURpdmVyZ2VuY2VFcnJvcihcbiAgICAgICAgICAgICAgYFJlcGxheSBkaXZlcmdlbmNlOiBVbmV4cGVjdGVkIGV2ZW50IHR5cGUgZm9yIHN0ZXAgJHtjb3JyZWxhdGlvbklkfSAobmFtZTogJHtzdGVwTmFtZX0pIFwiJHtldmVudC5ldmVudFR5cGV9XCJgLFxuICAgICAgICAgICAgICB7IGV2ZW50SWQ6IGV2ZW50LmV2ZW50SWQgfVxuICAgICAgICAgICAgKVxuICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gRXZlbnRDb25zdW1lclJlc3VsdC5GaW5pc2hlZDtcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gcHJvbWlzZTtcbiAgICB9O1xuXG4gICAgLy8gRW5zdXJlIHRoZSBcIm5hbWVcIiBwcm9wZXJ0eSBtYXRjaGVzIHRoZSBvcmlnaW5hbCBzdGVwIGZ1bmN0aW9uIG5hbWVcbiAgICAvLyBFeHRyYWN0IGZ1bmN0aW9uIG5hbWUgZnJvbSBzdGVwTmFtZSAoZm9ybWF0OiBcInN0ZXAvL2ZpbGVwYXRoLy9mdW5jdGlvbk5hbWVcIilcbiAgICBjb25zdCBmdW5jdGlvbk5hbWUgPSBzdGVwTmFtZS5zcGxpdCgnLy8nKS5wb3AoKTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoc3RlcEZ1bmN0aW9uLCAnbmFtZScsIHtcbiAgICAgIHZhbHVlOiBmdW5jdGlvbk5hbWUsXG4gICAgfSk7XG5cbiAgICAvLyBBZGQgdGhlIHN0ZXAgZnVuY3Rpb24gaWRlbnRpZmllciB0byB0aGUgc3RlcCBmdW5jdGlvbiBmb3Igc2VyaWFsaXphdGlvblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShzdGVwRnVuY3Rpb24sICdzdGVwSWQnLCB7XG4gICAgICB2YWx1ZTogc3RlcE5hbWUsXG4gICAgICB3cml0YWJsZTogZmFsc2UsXG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UsXG4gICAgfSk7XG5cbiAgICAvLyBTdG9yZSB0aGUgY2xvc3VyZSB2YXJpYWJsZXMgZnVuY3Rpb24gZm9yIHNlcmlhbGl6YXRpb25cbiAgICBpZiAoY2xvc3VyZVZhcnNGbikge1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHN0ZXBGdW5jdGlvbiwgJ19fY2xvc3VyZVZhcnNGbicsIHtcbiAgICAgICAgdmFsdWU6IGNsb3N1cmVWYXJzRm4sXG4gICAgICAgIHdyaXRhYmxlOiBmYWxzZSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBPdmVycmlkZSBgLmJpbmRgIHNvIHRoZSBib3VuZCBmdW5jdGlvbiBwcmVzZXJ2ZXMgdGhlIHN0ZXAgcHJveHlcbiAgICAvLyBtZXRhZGF0YSB0aGF0IGBnZXRTdGVwRnVuY3Rpb25SZWR1Y2VyYCByZWxpZXMgb24gZm9yIHNlcmlhbGl6YXRpb24uXG4gICAgLy8gV2l0aG91dCB0aGlzIG92ZXJyaWRlLCBgRnVuY3Rpb24ucHJvdG90eXBlLmJpbmRgIHdvdWxkIHJldHVybiBhIG5ld1xuICAgIC8vIGZ1bmN0aW9uIHRoYXQgZG9lc24ndCBpbmhlcml0IGBzdGVwSWRgLCBgX19jbG9zdXJlVmFyc0ZuYCwgb3IgYW55XG4gICAgLy8gb3RoZXIgb3duIHByb3BlcnRpZXMgb2YgdGhlIG9yaWdpbmFsIHByb3h5IOKAlCBzbyB0aGUgU3RlcEZ1bmN0aW9uXG4gICAgLy8gcmVkdWNlciB3b3VsZCByZWZ1c2UgdG8gc2VyaWFsaXplIGl0IChpdCdkIGxvb2sgbGlrZSBhIHBsYWluXG4gICAgLy8gZnVuY3Rpb24pLCBhbmQgYSBgdXNlU3RlcCguLi4pLmJpbmQodGhpcylgIHByb3h5IHRoYXQgZmxvd2VkXG4gICAgLy8gdGhyb3VnaCB3b3JrZmxvdyBzZXJpYWxpemF0aW9uIHdvdWxkIHNpbGVudGx5IGJyZWFrLlxuICAgIC8vXG4gICAgLy8gVGhlIG92ZXJyaWRlIHN0YXNoZXMgdGhyZWUgcGllY2VzIG9mIHN0YXRlIG9uIHRoZSBib3VuZCBmdW5jdGlvbiBzb1xuICAgIC8vIHRoZSByb3VuZCB0cmlwIGlzIGZhaXRoZnVsOlxuICAgIC8vICAgLSBgc3RlcElkYCAgICAgICAgICAgICDigJQgYWxyZWFkeSBzZXQgb24gdGhlIG9yaWdpbmFsIHByb3h5LlxuICAgIC8vICAgLSBgX19jbG9zdXJlVmFyc0ZuYCAgICDigJQgb25seSB3aGVuIHRoZSBvcmlnaW5hbCBwcm94eSBoYWQgb25lLlxuICAgIC8vICAgLSBgX19ib3VuZFRoaXNgICAgICAgICDigJQgdGhlIHJlY2VpdmVyIHBhc3NlZCB0byBgLmJpbmQodGhpc0FyZywg4oCmKWAuXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgQWx3YXlzIHNldCAoZXZlbiB3aGVuIGB0aGlzQXJnYCBpc1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBudWxsYC9gdW5kZWZpbmVkYCkgc28gdGhlIHJlZHVjZXIgY2FuXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzdGluZ3Vpc2ggXCJ3YXMgYm91bmRcIiBmcm9tIFwid2Fzbid0XCIuXG4gICAgLy8gICAtIGBfX2JvdW5kQXJnc2AgICAgICAgIOKAlCBvbmx5IHdoZW4gdGhlIHVzZXIgc3VwcGxpZWQgcHJlZmlsbGVkXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJndW1lbnRzIChgLmJpbmQodGhpc0FyZywgeCwgeSlgKS4gVGhlXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgU1dDIHBsdWdpbiBvbmx5IGV2ZXIgZW1pdHMgYC5iaW5kKHRoaXMpYFxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvZGF5LCBzbyB0aGlzIGlzIHJhcmUgaW4gcHJhY3RpY2U7IHdlXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RpbGwgY2FwdHVyZSBpdCBzbyB0aGUgcGFydGlhbCBhcmdzXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Vydml2ZSBzZXJpYWxpemF0aW9uIHJhdGhlciB0aGFuXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2lsZW50bHkgZGlzYXBwZWFyaW5nIG9uIHRoZSBzdGVwIHNpZGUuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHN0ZXBGdW5jdGlvbiwgJ2JpbmQnLCB7XG4gICAgICB2YWx1ZTogZnVuY3Rpb24gKFxuICAgICAgICB0aGlzOiB0eXBlb2Ygc3RlcEZ1bmN0aW9uLFxuICAgICAgICB0aGlzQXJnOiB1bmtub3duLFxuICAgICAgICAuLi5wYXJ0aWFsQXJnczogdW5rbm93bltdXG4gICAgICApIHtcbiAgICAgICAgY29uc3QgYm91bmQgPSBGdW5jdGlvbi5wcm90b3R5cGUuYmluZC5jYWxsKFxuICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgdGhpc0FyZyxcbiAgICAgICAgICAuLi5wYXJ0aWFsQXJnc1xuICAgICAgICApO1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoYm91bmQsICdzdGVwSWQnLCB7XG4gICAgICAgICAgdmFsdWU6IHN0ZXBOYW1lLFxuICAgICAgICAgIHdyaXRhYmxlOiBmYWxzZSxcbiAgICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgICBjb25maWd1cmFibGU6IGZhbHNlLFxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKGNsb3N1cmVWYXJzRm4pIHtcbiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoYm91bmQsICdfX2Nsb3N1cmVWYXJzRm4nLCB7XG4gICAgICAgICAgICB2YWx1ZTogY2xvc3VyZVZhcnNGbixcbiAgICAgICAgICAgIHdyaXRhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICAgICAgY29uZmlndXJhYmxlOiBmYWxzZSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoYm91bmQsICdfX2JvdW5kVGhpcycsIHtcbiAgICAgICAgICB2YWx1ZTogdGhpc0FyZyxcbiAgICAgICAgICB3cml0YWJsZTogZmFsc2UsXG4gICAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgICAgY29uZmlndXJhYmxlOiBmYWxzZSxcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChwYXJ0aWFsQXJncy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGJvdW5kLCAnX19ib3VuZEFyZ3MnLCB7XG4gICAgICAgICAgICB2YWx1ZTogcGFydGlhbEFyZ3MsXG4gICAgICAgICAgICB3cml0YWJsZTogZmFsc2UsXG4gICAgICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGJvdW5kO1xuICAgICAgfSxcbiAgICAgIHdyaXRhYmxlOiBmYWxzZSxcbiAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgY29uZmlndXJhYmxlOiBmYWxzZSxcbiAgICB9KTtcblxuICAgIHJldHVybiBzdGVwRnVuY3Rpb247XG4gIH07XG59XG4iXX0=
package/dist/symbols.d.ts CHANGED
@@ -30,6 +30,32 @@ export declare const STREAM_SERVER_RUN_ID_SYMBOL: unique symbol;
30
30
  * it to resolve the owning run's encryption key without loading the run first.
31
31
  */
32
32
  export declare const STREAM_SERVER_DEPLOYMENT_ID_SYMBOL: unique symbol;
33
+ /**
34
+ * Stamped alongside `STREAM_SERVER_RUN_ID_SYMBOL` with the owning run's
35
+ * X25519 public key (base64), when the run has one.
36
+ *
37
+ * This is what lets a forwarded writable be written to across a deployment
38
+ * boundary at zero cost. The owning run derives its own public key locally
39
+ * when it creates the stream, so the key travels inside the serialized
40
+ * descriptor; a child on another deployment can then seal frames immediately.
41
+ * Without it the child would have to either fetch the owning run or fetch its
42
+ * symmetric key from the API — the round trip this whole mechanism exists to
43
+ * avoid.
44
+ */
45
+ export declare const STREAM_SERVER_PUBLIC_KEY_SYMBOL: unique symbol;
46
+ /**
47
+ * Stamped on a `WorkflowServerWritableStream` instance to expose its
48
+ * durability barrier: `() => Promise<void>` that resolves once every accepted
49
+ * chunk has durably reached the server (nothing buffered, nothing in flight)
50
+ * and rejects if any dispatch failed.
51
+ *
52
+ * The sink acks `write()` on buffer entry (group-commit batching), so
53
+ * durability tracking lives here instead: `flushablePipe` feature-detects
54
+ * this and awaits it before resolving its lock-release completion, keeping
55
+ * the invariant that a step cannot complete while stream data is still
56
+ * client-side. Sinks without it are fully durable per `write()` already.
57
+ */
58
+ export declare const STREAM_DRAIN_SYMBOL: unique symbol;
33
59
  export declare const BODY_INIT_SYMBOL: unique symbol;
34
60
  export declare const WEBHOOK_RESPONSE_WRITABLE: unique symbol;
35
61
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"symbols.d.ts","sourceRoot":"","sources":["../src/symbols.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,iBAAiB,eAAkC,CAAC;AACjE,eAAO,MAAM,uBAAuB,eAAwC,CAAC;AAC7E,eAAO,MAAM,oBAAoB,eAAqC,CAAC;AACvE,eAAO,MAAM,cAAc,eAA+B,CAAC;AAC3D,eAAO,MAAM,gBAAgB,eAAiC,CAAC;AAC/D,eAAO,MAAM,sBAAsB,eAAuC,CAAC;AAC3E,eAAO,MAAM,WAAW,eAAqC,CAAC;AAC9D,eAAO,MAAM,kBAAkB,eAAqC,CAAC;AACrE,eAAO,MAAM,kBAAkB,eAAqC,CAAC;AACrE,eAAO,MAAM,qBAAqB,eAAwC,CAAC;AAC3E;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,2BAA2B,eAEvC,CAAC;AACF;;;;GAIG;AACH,eAAO,MAAM,kCAAkC,eAE9C,CAAC;AACF,eAAO,MAAM,gBAAgB,eAA0B,CAAC;AACxD,eAAO,MAAM,yBAAyB,eAErC,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,uBAAuB,eAAwC,CAAC;AAE7E,eAAO,MAAM,iBAAiB,eAA2C,CAAC;AAC1E,eAAO,MAAM,gBAAgB,eAA0C,CAAC;AACxE,eAAO,MAAM,uBAAuB,eAEnC,CAAC;AACF,eAAO,MAAM,mBAAmB,eAA6C,CAAC"}
1
+ {"version":3,"file":"symbols.d.ts","sourceRoot":"","sources":["../src/symbols.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,iBAAiB,eAAkC,CAAC;AACjE,eAAO,MAAM,uBAAuB,eAAwC,CAAC;AAC7E,eAAO,MAAM,oBAAoB,eAAqC,CAAC;AACvE,eAAO,MAAM,cAAc,eAA+B,CAAC;AAC3D,eAAO,MAAM,gBAAgB,eAAiC,CAAC;AAC/D,eAAO,MAAM,sBAAsB,eAAuC,CAAC;AAC3E,eAAO,MAAM,WAAW,eAAqC,CAAC;AAC9D,eAAO,MAAM,kBAAkB,eAAqC,CAAC;AACrE,eAAO,MAAM,kBAAkB,eAAqC,CAAC;AACrE,eAAO,MAAM,qBAAqB,eAAwC,CAAC;AAC3E;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,2BAA2B,eAEvC,CAAC;AACF;;;;GAIG;AACH,eAAO,MAAM,kCAAkC,eAE9C,CAAC;AACF;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,+BAA+B,eAE3C,CAAC;AACF;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,mBAAmB,eAAsC,CAAC;AAEvE,eAAO,MAAM,gBAAgB,eAA0B,CAAC;AACxD,eAAO,MAAM,yBAAyB,eAErC,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,uBAAuB,eAAwC,CAAC;AAE7E,eAAO,MAAM,iBAAiB,eAA2C,CAAC;AAC1E,eAAO,MAAM,gBAAgB,eAA0C,CAAC;AACxE,eAAO,MAAM,uBAAuB,eAEnC,CAAC;AACF,eAAO,MAAM,mBAAmB,eAA6C,CAAC"}