@workflow/core 5.0.0-beta.4 → 5.0.0-beta.41

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 (322) hide show
  1. package/dist/attribute-changes.d.ts +7 -0
  2. package/dist/attribute-changes.d.ts.map +1 -0
  3. package/dist/attribute-changes.js +25 -0
  4. package/dist/capabilities.d.ts +33 -1
  5. package/dist/capabilities.d.ts.map +1 -1
  6. package/dist/capabilities.js +71 -4
  7. package/dist/capture-stack.d.ts +16 -0
  8. package/dist/capture-stack.d.ts.map +1 -0
  9. package/dist/capture-stack.js +21 -0
  10. package/dist/class-serialization.d.ts +32 -0
  11. package/dist/class-serialization.d.ts.map +1 -1
  12. package/dist/class-serialization.js +37 -1
  13. package/dist/classify-error.d.ts +26 -3
  14. package/dist/classify-error.d.ts.map +1 -1
  15. package/dist/classify-error.js +109 -6
  16. package/dist/context-errors.d.ts +27 -0
  17. package/dist/context-errors.d.ts.map +1 -0
  18. package/dist/context-errors.js +101 -0
  19. package/dist/context-violation-error.d.ts +97 -0
  20. package/dist/context-violation-error.d.ts.map +1 -0
  21. package/dist/context-violation-error.js +149 -0
  22. package/dist/create-hook.d.ts +62 -4
  23. package/dist/create-hook.d.ts.map +1 -1
  24. package/dist/create-hook.js +4 -3
  25. package/dist/define-hook.d.ts.map +1 -1
  26. package/dist/define-hook.js +20 -5
  27. package/dist/describe-error.d.ts +70 -0
  28. package/dist/describe-error.d.ts.map +1 -0
  29. package/dist/describe-error.js +189 -0
  30. package/dist/encryption.d.ts +37 -3
  31. package/dist/encryption.d.ts.map +1 -1
  32. package/dist/encryption.js +97 -31
  33. package/dist/events-consumer.d.ts +147 -1
  34. package/dist/events-consumer.d.ts.map +1 -1
  35. package/dist/events-consumer.js +444 -43
  36. package/dist/flushable-stream.d.ts +65 -10
  37. package/dist/flushable-stream.d.ts.map +1 -1
  38. package/dist/flushable-stream.js +131 -18
  39. package/dist/global.d.ts +37 -1
  40. package/dist/global.d.ts.map +1 -1
  41. package/dist/global.js +21 -3
  42. package/dist/index.d.ts +1 -0
  43. package/dist/index.d.ts.map +1 -1
  44. package/dist/index.js +2 -1
  45. package/dist/log-format.d.ts +25 -0
  46. package/dist/log-format.d.ts.map +1 -0
  47. package/dist/log-format.js +250 -0
  48. package/dist/logger.d.ts +29 -30
  49. package/dist/logger.d.ts.map +1 -1
  50. package/dist/logger.js +82 -32
  51. package/dist/private.d.ts +246 -8
  52. package/dist/private.d.ts.map +1 -1
  53. package/dist/private.js +345 -9
  54. package/dist/replay-payload-cache.d.ts +68 -0
  55. package/dist/replay-payload-cache.d.ts.map +1 -0
  56. package/dist/replay-payload-cache.js +160 -0
  57. package/dist/runtime/compute-instance.d.ts +12 -0
  58. package/dist/runtime/compute-instance.d.ts.map +1 -0
  59. package/dist/runtime/compute-instance.js +13 -0
  60. package/dist/runtime/constants.d.ts +251 -0
  61. package/dist/runtime/constants.d.ts.map +1 -1
  62. package/dist/runtime/constants.js +425 -16
  63. package/dist/runtime/count-step-started-events.d.ts +52 -0
  64. package/dist/runtime/count-step-started-events.d.ts.map +1 -0
  65. package/dist/runtime/count-step-started-events.js +72 -0
  66. package/dist/runtime/deployment-guard.d.ts +99 -0
  67. package/dist/runtime/deployment-guard.d.ts.map +1 -0
  68. package/dist/runtime/deployment-guard.js +154 -0
  69. package/dist/runtime/get-port-lazy.d.ts +25 -0
  70. package/dist/runtime/get-port-lazy.d.ts.map +1 -0
  71. package/dist/runtime/get-port-lazy.js +92 -0
  72. package/dist/runtime/get-world-lazy.d.ts +23 -0
  73. package/dist/runtime/get-world-lazy.d.ts.map +1 -0
  74. package/dist/runtime/get-world-lazy.js +46 -0
  75. package/dist/runtime/helpers.d.ts +327 -10
  76. package/dist/runtime/helpers.d.ts.map +1 -1
  77. package/dist/runtime/helpers.js +586 -40
  78. package/dist/runtime/quickjs-assets.generated.d.ts +14 -0
  79. package/dist/runtime/quickjs-assets.generated.d.ts.map +1 -0
  80. package/dist/runtime/quickjs-assets.generated.js +30 -0
  81. package/dist/runtime/quickjs-entrypoint.d.ts +124 -0
  82. package/dist/runtime/quickjs-entrypoint.d.ts.map +1 -0
  83. package/dist/runtime/quickjs-entrypoint.js +1437 -0
  84. package/dist/runtime/quickjs-runtime.d.ts +228 -0
  85. package/dist/runtime/quickjs-runtime.d.ts.map +1 -0
  86. package/dist/runtime/quickjs-runtime.js +2372 -0
  87. package/dist/runtime/quickjs-serde.d.ts +107 -0
  88. package/dist/runtime/quickjs-serde.d.ts.map +1 -0
  89. package/dist/runtime/quickjs-serde.js +2098 -0
  90. package/dist/runtime/replay-budget.d.ts +89 -0
  91. package/dist/runtime/replay-budget.d.ts.map +1 -0
  92. package/dist/runtime/replay-budget.js +139 -0
  93. package/dist/runtime/replay-recovery-reporter.d.ts +36 -0
  94. package/dist/runtime/replay-recovery-reporter.d.ts.map +1 -0
  95. package/dist/runtime/replay-recovery-reporter.js +64 -0
  96. package/dist/runtime/resume-hook.d.ts +27 -4
  97. package/dist/runtime/resume-hook.d.ts.map +1 -1
  98. package/dist/runtime/resume-hook.js +452 -76
  99. package/dist/runtime/run-id-time.d.ts +19 -0
  100. package/dist/runtime/run-id-time.d.ts.map +1 -0
  101. package/dist/runtime/run-id-time.js +42 -0
  102. package/dist/runtime/run.d.ts +8 -2
  103. package/dist/runtime/run.d.ts.map +1 -1
  104. package/dist/runtime/run.js +62 -15
  105. package/dist/runtime/runs.d.ts +54 -3
  106. package/dist/runtime/runs.d.ts.map +1 -1
  107. package/dist/runtime/runs.js +119 -13
  108. package/dist/runtime/start.d.ts +70 -1
  109. package/dist/runtime/start.d.ts.map +1 -1
  110. package/dist/runtime/start.js +313 -60
  111. package/dist/runtime/step-executor.d.ts +177 -0
  112. package/dist/runtime/step-executor.d.ts.map +1 -0
  113. package/dist/runtime/step-executor.js +946 -0
  114. package/dist/runtime/step-latency.d.ts +197 -0
  115. package/dist/runtime/step-latency.d.ts.map +1 -0
  116. package/dist/runtime/step-latency.js +207 -0
  117. package/dist/runtime/step-ownership.d.ts +72 -0
  118. package/dist/runtime/step-ownership.d.ts.map +1 -0
  119. package/dist/runtime/step-ownership.js +114 -0
  120. package/dist/runtime/step-single-flight.d.ts +12 -0
  121. package/dist/runtime/step-single-flight.d.ts.map +1 -0
  122. package/dist/runtime/step-single-flight.js +69 -0
  123. package/dist/runtime/suspension-handler.d.ts +109 -7
  124. package/dist/runtime/suspension-handler.d.ts.map +1 -1
  125. package/dist/runtime/suspension-handler.js +486 -140
  126. package/dist/runtime/vm-mode.d.ts +44 -0
  127. package/dist/runtime/vm-mode.d.ts.map +1 -0
  128. package/dist/runtime/vm-mode.js +62 -0
  129. package/dist/runtime/vm-serde-bundle.generated.d.ts +14 -0
  130. package/dist/runtime/vm-serde-bundle.generated.d.ts.map +1 -0
  131. package/dist/runtime/vm-serde-bundle.generated.js +16 -0
  132. package/dist/runtime/wait-continuation.d.ts +84 -0
  133. package/dist/runtime/wait-continuation.d.ts.map +1 -0
  134. package/dist/runtime/wait-continuation.js +105 -0
  135. package/dist/runtime/wait-until.d.ts +18 -0
  136. package/dist/runtime/wait-until.d.ts.map +1 -0
  137. package/dist/runtime/wait-until.js +42 -0
  138. package/dist/runtime/world-compatibility.d.ts +20 -0
  139. package/dist/runtime/world-compatibility.d.ts.map +1 -0
  140. package/dist/runtime/world-compatibility.js +32 -0
  141. package/dist/runtime/world-init.d.ts +50 -0
  142. package/dist/runtime/world-init.d.ts.map +1 -0
  143. package/dist/runtime/world-init.js +50 -0
  144. package/dist/runtime/world.d.ts +14 -2
  145. package/dist/runtime/world.d.ts.map +1 -1
  146. package/dist/runtime/world.js +101 -26
  147. package/dist/runtime.d.ts +17 -12
  148. package/dist/runtime.d.ts.map +1 -1
  149. package/dist/runtime.js +3135 -328
  150. package/dist/schemas.d.ts +1 -1
  151. package/dist/schemas.d.ts.map +1 -1
  152. package/dist/schemas.js +1 -1
  153. package/dist/sealed-box.d.ts +167 -0
  154. package/dist/sealed-box.d.ts.map +1 -0
  155. package/dist/sealed-box.js +571 -0
  156. package/dist/serialization/client.d.ts +17 -0
  157. package/dist/serialization/client.d.ts.map +1 -0
  158. package/dist/serialization/client.js +48 -0
  159. package/dist/serialization/codec-devalue-vm.d.ts +16 -0
  160. package/dist/serialization/codec-devalue-vm.d.ts.map +1 -0
  161. package/dist/serialization/codec-devalue-vm.js +148 -0
  162. package/dist/serialization/codec-devalue.d.ts +14 -0
  163. package/dist/serialization/codec-devalue.d.ts.map +1 -0
  164. package/dist/serialization/codec-devalue.js +105 -0
  165. package/dist/serialization/codec.d.ts +125 -0
  166. package/dist/serialization/codec.d.ts.map +1 -0
  167. package/dist/serialization/codec.js +17 -0
  168. package/dist/serialization/compression.d.ts +104 -0
  169. package/dist/serialization/compression.d.ts.map +1 -0
  170. package/dist/serialization/compression.js +260 -0
  171. package/dist/serialization/encryption.d.ts +134 -0
  172. package/dist/serialization/encryption.d.ts.map +1 -0
  173. package/dist/serialization/encryption.js +186 -0
  174. package/dist/serialization/errors.d.ts +34 -0
  175. package/dist/serialization/errors.d.ts.map +1 -0
  176. package/dist/serialization/errors.js +59 -0
  177. package/dist/serialization/format.d.ts +60 -0
  178. package/dist/serialization/format.d.ts.map +1 -0
  179. package/dist/serialization/format.js +97 -0
  180. package/dist/serialization/hardened.d.ts +155 -0
  181. package/dist/serialization/hardened.d.ts.map +1 -0
  182. package/dist/serialization/hardened.js +523 -0
  183. package/dist/serialization/index.d.ts +20 -0
  184. package/dist/serialization/index.d.ts.map +1 -0
  185. package/dist/serialization/index.js +22 -0
  186. package/dist/serialization/reducers/class-vm.d.ts +20 -0
  187. package/dist/serialization/reducers/class-vm.d.ts.map +1 -0
  188. package/dist/serialization/reducers/class-vm.js +77 -0
  189. package/dist/serialization/reducers/class.d.ts +11 -0
  190. package/dist/serialization/reducers/class.d.ts.map +1 -0
  191. package/dist/serialization/reducers/class.js +73 -0
  192. package/dist/serialization/reducers/common-vm.d.ts +15 -0
  193. package/dist/serialization/reducers/common-vm.d.ts.map +1 -0
  194. package/dist/serialization/reducers/common-vm.js +579 -0
  195. package/dist/serialization/reducers/common.d.ts +16 -0
  196. package/dist/serialization/reducers/common.d.ts.map +1 -0
  197. package/dist/serialization/reducers/common.js +478 -0
  198. package/dist/serialization/reducers/step-function-vm.d.ts +44 -0
  199. package/dist/serialization/reducers/step-function-vm.d.ts.map +1 -0
  200. package/dist/serialization/reducers/step-function-vm.js +97 -0
  201. package/dist/serialization/reducers/step-function.d.ts +35 -0
  202. package/dist/serialization/reducers/step-function.d.ts.map +1 -0
  203. package/dist/serialization/reducers/step-function.js +104 -0
  204. package/dist/serialization/step.d.ts +17 -0
  205. package/dist/serialization/step.d.ts.map +1 -0
  206. package/dist/serialization/step.js +48 -0
  207. package/dist/serialization/types.d.ts +273 -0
  208. package/dist/serialization/types.d.ts.map +1 -0
  209. package/dist/serialization/types.js +35 -0
  210. package/dist/serialization/workflow-vm.d.ts +29 -0
  211. package/dist/serialization/workflow-vm.d.ts.map +1 -0
  212. package/dist/serialization/workflow-vm.js +71 -0
  213. package/dist/serialization/workflow.d.ts +29 -0
  214. package/dist/serialization/workflow.d.ts.map +1 -0
  215. package/dist/serialization/workflow.js +54 -0
  216. package/dist/serialization-format.d.ts +60 -4
  217. package/dist/serialization-format.d.ts.map +1 -1
  218. package/dist/serialization-format.js +276 -56
  219. package/dist/serialization.d.ts +374 -221
  220. package/dist/serialization.d.ts.map +1 -1
  221. package/dist/serialization.js +2300 -783
  222. package/dist/set-attributes.d.ts +13 -0
  223. package/dist/set-attributes.d.ts.map +1 -0
  224. package/dist/set-attributes.js +60 -0
  225. package/dist/sleep.d.ts.map +1 -1
  226. package/dist/sleep.js +3 -2
  227. package/dist/source-map.d.ts +25 -0
  228. package/dist/source-map.d.ts.map +1 -1
  229. package/dist/source-map.js +148 -10
  230. package/dist/step/context-storage.d.ts +61 -2
  231. package/dist/step/context-storage.d.ts.map +1 -1
  232. package/dist/step/context-storage.js +7 -5
  233. package/dist/step/get-closure-vars.d.ts.map +1 -1
  234. package/dist/step/get-closure-vars.js +3 -2
  235. package/dist/step/get-step-metadata.d.ts.map +1 -1
  236. package/dist/step/get-step-metadata.js +3 -2
  237. package/dist/step/get-workflow-metadata.d.ts.map +1 -1
  238. package/dist/step/get-workflow-metadata.js +3 -2
  239. package/dist/step/writable-stream.d.ts.map +1 -1
  240. package/dist/step/writable-stream.js +71 -7
  241. package/dist/step.d.ts.map +1 -1
  242. package/dist/step.js +225 -29
  243. package/dist/symbols.d.ts +54 -0
  244. package/dist/symbols.d.ts.map +1 -1
  245. package/dist/symbols.js +55 -1
  246. package/dist/telemetry/semantic-conventions.d.ts +265 -2
  247. package/dist/telemetry/semantic-conventions.d.ts.map +1 -1
  248. package/dist/telemetry/semantic-conventions.js +190 -1
  249. package/dist/telemetry.d.ts +73 -0
  250. package/dist/telemetry.d.ts.map +1 -1
  251. package/dist/telemetry.js +153 -16
  252. package/dist/types.d.ts +6 -0
  253. package/dist/types.d.ts.map +1 -1
  254. package/dist/types.js +23 -1
  255. package/dist/util.d.ts +16 -6
  256. package/dist/util.d.ts.map +1 -1
  257. package/dist/util.js +25 -16
  258. package/dist/version.d.ts +1 -1
  259. package/dist/version.d.ts.map +1 -1
  260. package/dist/version.js +2 -2
  261. package/dist/vm/index.d.ts.map +1 -1
  262. package/dist/vm/index.js +85 -14
  263. package/dist/vm/script-cache.d.ts +28 -0
  264. package/dist/vm/script-cache.d.ts.map +1 -0
  265. package/dist/vm/script-cache.js +140 -0
  266. package/dist/workflow/abort-controller.d.ts +65 -0
  267. package/dist/workflow/abort-controller.d.ts.map +1 -0
  268. package/dist/workflow/abort-controller.js +312 -0
  269. package/dist/workflow/attribute-dispatcher.d.ts +6 -0
  270. package/dist/workflow/attribute-dispatcher.d.ts.map +1 -0
  271. package/dist/workflow/attribute-dispatcher.js +48 -0
  272. package/dist/workflow/create-hook.d.ts.map +1 -1
  273. package/dist/workflow/create-hook.js +25 -3
  274. package/dist/workflow/define-hook.d.ts +1 -1
  275. package/dist/workflow/define-hook.d.ts.map +1 -1
  276. package/dist/workflow/define-hook.js +8 -4
  277. package/dist/workflow/get-workflow-metadata.d.ts.map +1 -1
  278. package/dist/workflow/get-workflow-metadata.js +14 -3
  279. package/dist/workflow/hook.d.ts.map +1 -1
  280. package/dist/workflow/hook.js +302 -36
  281. package/dist/workflow/index.d.ts +1 -0
  282. package/dist/workflow/index.d.ts.map +1 -1
  283. package/dist/workflow/index.js +5 -3
  284. package/dist/workflow/set-attributes.d.ts +68 -0
  285. package/dist/workflow/set-attributes.d.ts.map +1 -0
  286. package/dist/workflow/set-attributes.js +60 -0
  287. package/dist/workflow/sleep.d.ts.map +1 -1
  288. package/dist/workflow/sleep.js +57 -8
  289. package/dist/workflow/world-init-stub.d.ts +15 -0
  290. package/dist/workflow/world-init-stub.d.ts.map +1 -0
  291. package/dist/workflow/world-init-stub.js +15 -0
  292. package/dist/workflow.d.ts +79 -3
  293. package/dist/workflow.d.ts.map +1 -1
  294. package/dist/workflow.js +831 -553
  295. package/docs/api-reference/create-hook.mdx +79 -0
  296. package/docs/api-reference/create-webhook.mdx +1 -0
  297. package/docs/api-reference/define-hook.mdx +26 -24
  298. package/docs/api-reference/fatal-error.mdx +29 -7
  299. package/docs/api-reference/fetch.mdx +8 -4
  300. package/docs/api-reference/index.mdx +3 -0
  301. package/docs/api-reference/set-attributes.mdx +61 -0
  302. package/docs/api-reference/sleep.mdx +1 -1
  303. package/docs/foundations/cancellation.mdx +459 -0
  304. package/docs/foundations/errors-and-retries.mdx +7 -3
  305. package/docs/foundations/hooks.mdx +29 -0
  306. package/docs/foundations/idempotency.mdx +243 -11
  307. package/docs/foundations/index.mdx +1 -23
  308. package/docs/foundations/meta.json +3 -1
  309. package/docs/foundations/serialization.mdx +77 -41
  310. package/docs/foundations/starting-workflows.mdx +79 -2
  311. package/docs/foundations/streaming.mdx +14 -23
  312. package/docs/foundations/versioning.mdx +263 -0
  313. package/docs/how-it-works/cancellation.mdx +287 -0
  314. package/docs/how-it-works/code-transform.mdx +21 -17
  315. package/docs/how-it-works/encryption.mdx +5 -5
  316. package/docs/how-it-works/event-sourcing.mdx +17 -9
  317. package/docs/how-it-works/framework-integrations.mdx +96 -337
  318. package/docs/how-it-works/meta.json +2 -1
  319. package/package.json +31 -13
  320. package/dist/runtime/step-handler.d.ts +0 -2
  321. package/dist/runtime/step-handler.d.ts.map +0 -1
  322. package/dist/runtime/step-handler.js +0 -678
@@ -57,12 +57,50 @@ export const WorkflowRunStatus = SemanticConvention('workflow.run.status');
57
57
  export const WorkflowStartedAt = SemanticConvention('workflow.started_at');
58
58
  /** Number of events processed during workflow execution */
59
59
  export const WorkflowEventsCount = SemanticConvention('workflow.events.count');
60
+ /** Whether workflow execution starts with replay or resumes a retained VM */
61
+ export const WorkflowExecutionMode = SemanticConvention('workflow.execution.mode');
62
+ /**
63
+ * Events the replay walked past that no consumer claimed, still held when the
64
+ * replay stopped.
65
+ *
66
+ * A non-zero count on a suspension is ordinary: an out-of-band delivery that
67
+ * landed ahead of the code that reads it waits for the replay that gets there.
68
+ * From inside one replay that is indistinguishable from an event no replay will
69
+ * ever claim, because the two differ only in what the next replay does. So the
70
+ * count goes on the span instead of failing the run, and the case worth acting
71
+ * on is a query across a run's spans: the same
72
+ * {@link WorkflowParkedEventId} held on suspension after suspension.
73
+ */
74
+ export const WorkflowParkedEventsCount = SemanticConvention('workflow.events.parked.count');
75
+ /** Oldest event still held unclaimed when the replay stopped. */
76
+ export const WorkflowParkedEventId = SemanticConvention('workflow.events.parked.event_id');
77
+ /** Type of the oldest event still held unclaimed when the replay stopped. */
78
+ export const WorkflowParkedEventType = SemanticConvention('workflow.events.parked.event_type');
60
79
  /** Number of arguments passed to the workflow */
61
80
  export const WorkflowArgumentsCount = SemanticConvention('workflow.arguments.count');
62
81
  /** Type of the workflow result */
63
82
  export const WorkflowResultType = SemanticConvention('workflow.result.type');
64
83
  /** Whether trace context was propagated to this workflow execution */
65
84
  export const WorkflowTracePropagated = SemanticConvention('workflow.trace.propagated');
85
+ // QuickJS VM engine attributes
86
+ /** The VM engine executing the workflow function for this invocation */
87
+ export const WorkflowVm = SemanticConvention('workflow.vm');
88
+ /** Outcome of a QuickJS VM workflow invocation */
89
+ export const QuickJSOutcome = SemanticConvention('workflow.vm.outcome');
90
+ /** Whether preloaded events from `events.create('run_started')` were used */
91
+ export const QuickJSEventsPreloaded = SemanticConvention('workflow.vm.events.preloaded');
92
+ /** Total number of events fetched from the world for this invocation */
93
+ export const QuickJSEventsFetchedCount = SemanticConvention('workflow.vm.events.fetched_count');
94
+ /** Number of pages required to fetch all events */
95
+ export const QuickJSEventsFetchedPages = SemanticConvention('workflow.vm.events.fetched_pages');
96
+ /** Number of pending VM operations captured at suspension */
97
+ export const QuickJSPendingOpsCount = SemanticConvention('workflow.vm.pending_ops_count');
98
+ /** Number of steps executed inline (live-VM continuation) this invocation */
99
+ export const QuickJSInlineSteps = SemanticConvention('quickjs.inline_steps');
100
+ /** Active trace-correlation mode for this invocation (linked or continuous) */
101
+ export const WorkflowTraceMode = SemanticConvention('workflow.trace.mode');
102
+ /** Whether this workflow invocation is using the turbo first-delivery path */
103
+ export const WorkflowTurbo = SemanticConvention('workflow.turbo');
66
104
  /** Name of the error that caused workflow failure */
67
105
  export const WorkflowErrorName = SemanticConvention('workflow.error.name');
68
106
  /** Error message when workflow fails */
@@ -75,6 +113,36 @@ export const WorkflowStepsCreated = SemanticConvention('workflow.steps.created')
75
113
  export const WorkflowHooksCreated = SemanticConvention('workflow.hooks.created');
76
114
  /** Number of waits created during workflow execution */
77
115
  export const WorkflowWaitsCreated = SemanticConvention('workflow.waits.created');
116
+ /**
117
+ * Number of inline-owned steps this invocation re-executed because it is a
118
+ * redelivery of their owning queue message (crash recovery for inline
119
+ * steps — see the inline step ownership changelog, workflow#2780).
120
+ */
121
+ export const WorkflowOwnedRecoverySteps = SemanticConvention('workflow.inline_ownership.owned_recovery_steps');
122
+ /**
123
+ * Number of pending steps for which this replay suppressed the immediate
124
+ * requeue (another invocation inline-owns them under a live lease) and
125
+ * ensured a delayed backstop wake instead.
126
+ */
127
+ export const WorkflowBackstopWakesArmed = SemanticConvention('workflow.inline_ownership.backstop_wakes_armed');
128
+ // Route attributes
129
+ /** The workflow runtime route being handled */
130
+ export const WorkflowRouteType = SemanticConvention('workflow.route.type');
131
+ /** Whether this route invocation reused an already-created request handler */
132
+ export const WorkflowRouteHandlerCached = SemanticConvention('workflow.route.handler_cached');
133
+ /** Number of times this in-memory route handler has been invoked */
134
+ export const WorkflowRouteInvocationCount = SemanticConvention('workflow.route.invocation_count');
135
+ /** Time since this route entrypoint was constructed, in milliseconds */
136
+ export const WorkflowRouteEntrypointAgeMs = SemanticConvention('workflow.route.entrypoint_age_ms');
137
+ /** Time spent evaluating the generated route module body before creating the entrypoint */
138
+ export const WorkflowRouteModuleBodyInitMs = SemanticConvention('workflow.route.module_body_init_ms');
139
+ /**
140
+ * Compute instance handling this route — the synthesized `COMPUTE_INSTANCE_ID`.
141
+ * Uses OTEL `faas.instance` (execution-environment id, reused across
142
+ * invocations to the same function):
143
+ * https://opentelemetry.io/docs/specs/semconv/attributes-registry/faas/
144
+ */
145
+ export const FaasInstance = SemanticConvention('faas.instance');
78
146
  // Step attributes
79
147
  /** Name of the step function being executed */
80
148
  export const StepName = SemanticConvention('step.name');
@@ -88,6 +156,45 @@ export const StepStatus = SemanticConvention('step.status');
88
156
  export const StepMaxRetries = SemanticConvention('step.max_retries');
89
157
  /** Whether trace context was propagated to this step execution */
90
158
  export const StepTracePropagated = SemanticConvention('step.trace.propagated');
159
+ /**
160
+ * Client-measured time-to-first-step latency in milliseconds: run creation →
161
+ * this step's body beginning to execute, minus pre-step hook-creation time.
162
+ * Only present on the run's first step execution when it qualified for
163
+ * measurement (see runtime/step-latency.ts).
164
+ */
165
+ export const StepTtfsMs = SemanticConvention('step.ttfs_ms');
166
+ /**
167
+ * Client-measured step-to-step overhead in milliseconds: the previous step's
168
+ * terminal event → this step's body beginning to execute. Only present when
169
+ * the two steps ran back-to-back.
170
+ */
171
+ export const StepStsoMs = SemanticConvention('step.stso_ms');
172
+ /**
173
+ * Client-measured run_started-to-first-step latency in milliseconds: the
174
+ * `run_started` response landing (or, under turbo, the local run synthesis
175
+ * instant) → this step's start POST being issued. A sub-window of ttfs that
176
+ * isolates replay overhead from the run-creation queue hop. Only present on
177
+ * the run's first step execution when it qualified for measurement (see
178
+ * runtime/step-latency.ts).
179
+ */
180
+ export const StepRsfsMs = SemanticConvention('step.rsfs_ms');
181
+ /**
182
+ * Client-measured synchronous workflow-function replay duration in
183
+ * milliseconds, excluding awaited network I/O, of only the FINAL replay pass
184
+ * within the rsfs window — the pass that reached and scheduled the first
185
+ * step. Not accumulated across earlier pre-first-step passes (e.g. a
186
+ * workflow-body `setAttributes()` detour replays more than once, and a
187
+ * redelivery omits earlier invocations' work entirely), so this must not be
188
+ * read as "the replay portion of rsfs" — step.rsfs_ms covers the whole
189
+ * window. Only present alongside step.rsfs_ms and only for the run's first
190
+ * step (see runtime/step-latency.ts).
191
+ */
192
+ export const StepFinalSchedulingReplayMs = SemanticConvention('step.final_scheduling_replay_ms');
193
+ /**
194
+ * Runtime startup-latency optimizations active for the ttfs/stso measurement
195
+ * (e.g. 'turbo', 'lazyStepStart', 'optimisticStart').
196
+ */
197
+ export const StepLatencyOptimizations = SemanticConvention('step.latency_optimizations');
91
198
  /** Whether the step was skipped during execution */
92
199
  export const StepSkipped = SemanticConvention('step.skipped');
93
200
  /** Reason why the step was skipped */
@@ -123,6 +230,12 @@ export const QueueOverheadMs = SemanticConvention('workflow.queue.overhead_ms');
123
230
  // Deployment attributes
124
231
  /** Unique identifier for the deployment environment */
125
232
  export const DeploymentId = SemanticConvention('deployment.id');
233
+ /** The deployment a run is pinned to, set only on a misrouted delivery. */
234
+ export const WorkflowRunPinnedDeploymentId = SemanticConvention('workflow.deployment.pinned_id');
235
+ /** Re-route attempts for this misrouted delivery, including this one. */
236
+ export const WorkflowDeploymentMismatchRetryCount = SemanticConvention('workflow.deployment_mismatch.retry_count');
237
+ /** Whether the misrouted delivery was re-routed instead of failing the run. */
238
+ export const WorkflowDeploymentMismatchRecovered = SemanticConvention('workflow.deployment_mismatch.recovered');
126
239
  // Hook attributes
127
240
  /** Token identifying a specific hook */
128
241
  export const HookToken = SemanticConvention('workflow.hook.token');
@@ -130,6 +243,52 @@ export const HookToken = SemanticConvention('workflow.hook.token');
130
243
  export const HookId = SemanticConvention('workflow.hook.id');
131
244
  /** Whether a hook was found by its token */
132
245
  export const HookFound = SemanticConvention('workflow.hook.found');
246
+ /**
247
+ * Producer-side signal (on the `hook.resume` span) that the direct
248
+ * `hook_received` write failed transiently but the queue dispatch succeeded, so
249
+ * the resume is recovered via the consumer's re-ensure. Corresponds to
250
+ * `ResumedHook.resilientResume === true`.
251
+ */
252
+ export const HookResilientResume = SemanticConvention('workflow.hook.resilient_resume');
253
+ /**
254
+ * Consumer-side signal (on the workflow execution span) that this replay
255
+ * materialized the `hook_received` event from the queue message's `hookInput`
256
+ * because the producer's direct write had not landed — the completion of the
257
+ * recovery path {@link HookResilientResume} began.
258
+ *
259
+ * Legacy / non-atomic re-ensure signal only. Atomic lazy resumes
260
+ * (resumeId + digest) go through the hoisted preload write instead, whose
261
+ * response cannot tell whether the producer or the consumer won the
262
+ * `(runId, resumeId)` claim — so this attribute is deliberately NOT emitted
263
+ * for them (emitting `true` unconditionally would count every producer-won
264
+ * resume as a recovery). The producer-begin ({@link HookResilientResume}) /
265
+ * consumer-materialized pairing is therefore no longer complete for atomic
266
+ * lazy resumptions; use {@link HookResumeSetupSource} to observe that path.
267
+ */
268
+ export const HookResilientResumeMaterialized = SemanticConvention('workflow.hook.resilient_resume_materialized');
269
+ /**
270
+ * Consumer-side signal (on the workflow execution span) of how a lazy hook
271
+ * resume initialized its replay state:
272
+ *
273
+ * - `hook_received_stream` — the hoisted `hook_received` write returned a
274
+ * usable replay preload (run + complete event log), so the invocation
275
+ * skipped both the `run_started` write and the initial `events.list`.
276
+ * - `hook_received_fallback` — the hoisted write succeeded but returned no
277
+ * usable preload (a CBOR response from an older server, a World that
278
+ * ignored the opt-in, a bounded `hasMore` page, or a preload that failed
279
+ * validation); the invocation fell back to the `run_started` setup without
280
+ * re-posting the hook.
281
+ *
282
+ * Absent on legacy hook deliveries (no resumeId/digest) and on every other
283
+ * delivery kind, which take the `run_started` setup unconditionally.
284
+ *
285
+ * This is a latency/setup-path signal: it says which requests initialized
286
+ * the invocation, NOT that this consumer created the `hook_received` event
287
+ * (the hoisted write may equally have converged on the producer's — claim
288
+ * ownership is not observable client-side; cf.
289
+ * {@link HookResilientResumeMaterialized}).
290
+ */
291
+ export const HookResumeSetupSource = SemanticConvention('workflow.resume_setup_source');
133
292
  // Webhook attributes
134
293
  /** Number of webhook handlers triggered */
135
294
  export const WebhookHandlersTriggered = SemanticConvention('webhook.handlers.triggered');
@@ -142,6 +301,8 @@ export const WorkflowSuspensionWaitCount = SemanticConvention('workflow.suspensi
142
301
  // See: https://opentelemetry.io/docs/specs/semconv/http/http-spans/
143
302
  /** HTTP request method (standard OTEL: http.request.method) */
144
303
  export const HttpRequestMethod = SemanticConvention('http.request.method');
304
+ /** Route pattern for the request (standard OTEL: http.route) */
305
+ export const HttpRoute = SemanticConvention('http.route');
145
306
  /** Full URL of the request (standard OTEL: url.full) */
146
307
  export const UrlFull = SemanticConvention('url.full');
147
308
  /** Server hostname (standard OTEL: server.address) */
@@ -165,6 +326,34 @@ export const QueueDeserializeTimeMs = SemanticConvention('workflow.queue.deseria
165
326
  export const QueueExecutionTimeMs = SemanticConvention('workflow.queue.execution_time_ms');
166
327
  /** Time spent serializing the response in milliseconds */
167
328
  export const QueueSerializeTimeMs = SemanticConvention('workflow.queue.serialize_time_ms');
329
+ // Payload compression attributes (zstd preferred, gzip fallback; specVersion >= 5)
330
+ //
331
+ // Sizes are measured at the compression boundary: before encryption on the
332
+ // write path and after decryption on the read path. They therefore reflect
333
+ // compression's effect, not the at-rest size (which also includes the
334
+ // ~28-byte `encr` envelope and, on some backends, base64 expansion).
335
+ /** Whether this serialize/deserialize was a write or read. */
336
+ export const SerializationOperation = SemanticConvention('workflow.serialization.operation');
337
+ /** Whether a compression codec was applied (write) / present (read). */
338
+ export const SerializationCompressed = SemanticConvention('workflow.serialization.compressed');
339
+ /** Which compression codec applied / was present (`zstd`, `gzip`, or `none`). */
340
+ export const SerializationCodec = SemanticConvention('workflow.serialization.codec');
341
+ /** Logical (uncompressed, devalue-prefixed) payload size in bytes. */
342
+ export const SerializationUncompressedBytes = SemanticConvention('workflow.serialization.uncompressed_bytes');
343
+ /** Stored (post-compression, pre-encryption) payload size in bytes. */
344
+ export const SerializationStoredBytes = SemanticConvention('workflow.serialization.stored_bytes');
345
+ /** Fraction of bytes saved by compression (0..1); set only when compressed. */
346
+ export const SerializationCompressionRatio = SemanticConvention('workflow.serialization.compression_ratio');
347
+ /**
348
+ * Number of workflow (guest) code executions serialization could not avoid
349
+ * (getters, proxies, custom serializers); set only when non-zero.
350
+ */
351
+ export const SerializationGuestCodeExecutions = SemanticConvention('workflow.serialization.guest_code_executions');
352
+ /**
353
+ * Deduplicated `kind (detail)` descriptions of the guest-code executions;
354
+ * set only when non-zero.
355
+ */
356
+ export const SerializationGuestCodeDetails = SemanticConvention('workflow.serialization.guest_code_details');
168
357
  // RPC/Peer Service attributes - For service maps and dependency tracking
169
358
  // See: https://opentelemetry.io/docs/specs/semconv/rpc/rpc-spans/
170
359
  /** The remote service name for Datadog service maps (Datadog-specific: peer.service) */
@@ -181,4 +370,4 @@ export const RpcMethod = SemanticConvention('rpc.method');
181
370
  export const ErrorRetryable = SemanticConvention('error.retryable');
182
371
  /** Error category (workflow-specific: fatal, retryable, transient) */
183
372
  export const ErrorCategory = SemanticConvention('error.category');
184
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VtYW50aWMtY29udmVudGlvbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdGVsZW1ldHJ5L3NlbWFudGljLWNvbnZlbnRpb25zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBcUNHO0FBSUg7Ozs7R0FJRztBQUNILFNBQVMsa0JBQWtCLENBQUksR0FBRyxLQUFlO0lBQy9DLE9BQU8sQ0FBQyxLQUFRLEVBQUUsRUFBRSxDQUNsQixNQUFNLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBVSxDQUFDLENBQUMsQ0FBQztBQUNwRSxDQUFDO0FBRUQsc0JBQXNCO0FBRXRCLDhDQUE4QztBQUM5QyxNQUFNLENBQUMsTUFBTSxZQUFZLEdBQUcsa0JBQWtCLENBQVMsZUFBZSxDQUFDLENBQUM7QUFFeEUsb0RBQW9EO0FBQ3BELE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUFHLGtCQUFrQixDQUVqRCxvQkFBb0IsQ0FBQyxDQUFDO0FBRXhCLDZEQUE2RDtBQUM3RCxNQUFNLENBQUMsTUFBTSxhQUFhLEdBQUcsa0JBQWtCLENBQVMsaUJBQWlCLENBQUMsQ0FBQztBQUUzRSx5Q0FBeUM7QUFDekMsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUcsa0JBQWtCLENBRWpELHFCQUFxQixDQUFDLENBQUM7QUFFekIscUVBQXFFO0FBQ3JFLE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUFHLGtCQUFrQixDQUNqRCxxQkFBcUIsQ0FDdEIsQ0FBQztBQUVGLDJEQUEyRDtBQUMzRCxNQUFNLENBQUMsTUFBTSxtQkFBbUIsR0FBRyxrQkFBa0IsQ0FDbkQsdUJBQXVCLENBQ3hCLENBQUM7QUFFRixpREFBaUQ7QUFDakQsTUFBTSxDQUFDLE1BQU0sc0JBQXNCLEdBQUcsa0JBQWtC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a0IsQ0FDdEQsb0NBQW9DLENBQ3JDLENBQUM7QUFFRiw2REFBNkQ7QUFDN0QsTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQUcsa0JBQWtCLENBQ3BELGtDQUFrQyxDQUNuQyxDQUFDO0FBRUYsMERBQTBEO0FBQzFELE1BQU0sQ0FBQyxNQUFNLG9CQUFvQixHQUFHLGtCQUFrQixDQUNwRCxrQ0FBa0MsQ0FDbkMsQ0FBQztBQUVGLHlFQUF5RTtBQUN6RSxrRUFBa0U7QUFFbEUsd0ZBQXdGO0FBQ3hGLE1BQU0sQ0FBQyxNQUFNLFdBQVcsR0FBRyxrQkFBa0IsQ0FBUyxjQUFjLENBQUMsQ0FBQztBQUV0RSx3REFBd0Q7QUFDeEQsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUFHLGtCQUFrQixDQUFTLFlBQVksQ0FBQyxDQUFDO0FBRWxFLG9EQUFvRDtBQUNwRCxNQUFNLENBQUMsTUFBTSxVQUFVLEdBQUcsa0JBQWtCLENBQVMsYUFBYSxDQUFDLENBQUM7QUFFcEUsa0RBQWtEO0FBQ2xELE1BQU0sQ0FBQyxNQUFNLFNBQVMsR0FBRyxrQkFBa0IsQ0FBUyxZQUFZLENBQUMsQ0FBQztBQUVsRSxxREFBcUQ7QUFDckQsZ0ZBQWdGO0FBRWhGLHlEQUF5RDtBQUN6RCxNQUFNLENBQUMsTUFBTSxjQUFjLEdBQUcsa0JBQWtCLENBQVUsaUJBQWlCLENBQUMsQ0FBQztBQUU3RSxzRUFBc0U7QUFDdEUsTUFBTSxDQUFDLE1BQU0sYUFBYSxHQUFHLGtCQUFrQixDQUU3QyxnQkFBZ0IsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBPcGVuVGVsZW1ldHJ5IHNlbWFudGljIGNvbnZlbnRpb25zIGZvciBWZXJjZWwgV29ya2Zsb3cgdGVsZW1ldHJ5LlxuICpcbiAqIFRoaXMgbW9kdWxlIHByb3ZpZGVzIHN0YW5kYXJkaXplZCB0ZWxlbWV0cnkgYXR0cmlidXRlcyBmb2xsb3dpbmcgT3BlblRlbGVtZXRyeSBzZW1hbnRpYyBjb252ZW50aW9uc1xuICogZm9yIGluc3RydW1lbnRpbmcgd29ya2Zsb3cgZXhlY3V0aW9uLCBzdGVwIHByb2Nlc3NpbmcsIGFuZCByZWxhdGVkIG9wZXJhdGlvbnMuIEVhY2ggZXhwb3J0ZWQgZnVuY3Rpb25cbiAqIGNyZWF0ZXMgYSBwcm9wZXJseSBmb3JtYXR0ZWQgYXR0cmlidXRlIG9iamVjdCB0aGF0IGNhbiBiZSB1c2VkIHdpdGggT3BlblRlbGVtZXRyeSBzcGFucy5cbiAqXG4gKiBUaGUgc2VtYW50aWMgY29udmVudGlvbnMgYXJlIG9yZ2FuaXplZCBpbnRvIHNldmVyYWwgY2F0ZWdvcmllczpcbiAqIC0gKipXb3JrZmxvdyBhdHRyaWJ1dGVzKio6IFRyYWNrIHdvcmtmbG93IGxpZmVjeWNsZSwgc3RhdHVzLCBhbmQgbWV0YWRhdGFcbiAqIC0gKipTdGVwIGF0dHJpYnV0ZXMqKjogTW9uaXRvciBpbmRpdmlkdWFsIHN0ZXAgZXhlY3V0aW9uLCByZXRyaWVzLCBhbmQgcmVzdWx0c1xuICogLSAqKlF1ZXVlIGF0dHJpYnV0ZXMqKjogSW5zdHJ1bWVudCBtZXNzYWdlIHF1ZXVlIG9wZXJhdGlvbnNcbiAqIC0gKipEZXBsb3ltZW50IGF0dHJpYnV0ZXMqKjogQ2FwdHVyZSBkZXBsb3ltZW50IGVudmlyb25tZW50IGluZm9ybWF0aW9uXG4gKlxuICogQWxsIGF0dHJpYnV0ZSBmdW5jdGlvbnMgYXJlIHR5cGUtc2FmZSBhbmQgbGV2ZXJhZ2UgZXhpc3RpbmcgYmFja2VuZCB0eXBlcyB0byBlbnN1cmVcbiAqIGNvbnNpc3RlbmN5IGJldHdlZW4gdGVsZW1ldHJ5IGRhdGEgYW5kIGFjdHVhbCBzeXN0ZW0gc3RhdGUuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGltcG9ydCAqIGFzIEF0dHJpYnV0ZSBmcm9tICcuL3RlbGVtZXRyeS9zZW1hbnRpYy1jb252ZW50aW9ucy5qcyc7XG4gKlxuICogLy8gU2V0IHdvcmtmbG93IGF0dHJpYnV0ZXMgb24gYSBzcGFuXG4gKiBzcGFuLnNldEF0dHJpYnV0ZXMoe1xuICogICAuLi5BdHRyaWJ1dGUuV29ya2Zsb3dOYW1lKCdteS13b3JrZmxvdycpLFxuICogICAuLi5BdHRyaWJ1dGUuV29ya2Zsb3dPcGVyYXRpb24oJ3N0YXJ0JyksXG4gKiAgIC4uLkF0dHJpYnV0ZS5Xb3JrZmxvd1J1blN0YXR1cygncnVubmluZycpLFxuICogfSk7XG4gKlxuICogLy8gU2V0IHN0ZXAgYXR0cmlidXRlc1xuICogc3Bhbi5zZXRBdHRyaWJ1dGVzKHtcbiAqICAgLi4uQXR0cmlidXRlLlN0ZXBOYW1lKCdwcm9jZXNzLWRhdGEnKSxcbiAqICAgLi4uQXR0cmlidXRlLlN0ZXBTdGF0dXMoJ2NvbXBsZXRlZCcpLFxuICogICAuLi5BdHRyaWJ1dGUuU3RlcEF0dGVtcHQoMSksXG4gKiB9KTtcbiAqIGBgYFxuICpcbiAqIEBzZWUge0BsaW5rIGh0dHBzOi8vb3BlbnRlbGVtZXRyeS5pby9kb2NzL3NwZWNzL3NlbWNvbnYvfSBPcGVuVGVsZW1ldHJ5IFNlbWFudGljIENvbnZlbnRpb25zXG4gKiBAcGFja2FnZURvY3VtZW50YXRpb25cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IE1lc3NhZ2VJZCwgU3RlcCwgV29ya2Zsb3dSdW4gfSBmcm9tICdAd29ya2Zsb3cvd29ybGQnO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBzZW1hbnRpYyBjb252ZW50aW9uIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhbiBhdHRyaWJ1dGUgb2JqZWN0LlxuICogQHBhcmFtIG5hbWUgLSBUaGUgYXR0cmlidXRlIG5hbWUgZm9sbG93aW5nIE9wZW5UZWxlbWV0cnkgc2VtYW50aWMgY29udmVudGlvbnNcbiAqIEByZXR1cm5zIEEgZnVuY3Rpb24gdGhhdCB0YWtlcyBhIHZhbHVlIGFuZCByZXR1cm5zIGFuIGF0dHJpYnV0ZSBvYmplY3RcbiAqL1xuZnVuY3Rpb24gU2VtYW50aWNDb252ZW50aW9uPFQ+KC4uLm5hbWVzOiBzdHJpbmdbXSkge1xuICByZXR1cm4gKHZhbHVlOiBUKSA9PlxuICAgIE9iamVjdC5mcm9tRW50cmllcyhuYW1lcy5tYXAoKG5hbWUpID0+IFtuYW1lLCB2YWx1ZV0gYXMgY29uc3QpKTtcbn1cblxuLy8gV29ya2Zsb3cgYXR0cmlidXRlc1xuXG4vKiogVGhlIG5hbWUgb2YgdGhlIHdvcmtmbG93IGJlaW5nIGV4ZWN1dGVkICovXG5leHBvcnQgY29uc3QgV29ya2Zsb3dOYW1lID0gU2VtYW50aWNDb252ZW50aW9uPHN0cmluZz4oJ3dvcmtmbG93Lm5hbWUnKTtcblxuLyoqIFRoZSBvcGVyYXRpb24gYmVpbmcgcGVyZm9ybWVkIG9uIHRoZSB3b3JrZmxvdyAqL1xuZXhwb3J0IGNvbnN0IFdvcmtmbG93T3BlcmF0aW9uID0gU2VtYW50aWNDb252ZW50aW9uPFxuICAnc3RhcnQnIHwgJ2V4ZWN1dGUnIHwgJ3J1bidcbj4oJ3dvcmtmbG93Lm9wZXJhdGlvbicpO1xuXG4vKiogVW5pcXVlIGlkZW50aWZpZXIgZm9yIGEgc3BlY2lmaWMgd29ya2Zsb3cgcnVuIGluc3RhbmNlICovXG5leHBvcnQgY29uc3QgV29ya2Zsb3dSdW5JZCA9IFNlbWFudGljQ29udmVudGlvbjxzdHJpbmc+KCd3b3JrZmxvdy5ydW4uaWQnKTtcblxuLyoqIEN1cnJlbnQgc3RhdHVzIG9mIHRoZSB3b3JrZmxvdyBydW4gKi9cbmV4cG9ydCBjb25zdCBXb3JrZmxvd1J1blN0YXR1cyA9IFNlbWFudGljQ29udmVudGlvbjxcbiAgV29ya2Zsb3dSdW5bJ3N0YXR1cyddIHwgJ3dvcmtmbG93X3N1c3BlbmRlZCdcbj4oJ3dvcmtmbG93LnJ1bi5zdGF0dXMnKTtcblxuLyoqIFRpbWVzdGFtcCB3aGVuIHRoZSB3b3JrZmxvdyBleGVjdXRpb24gc3RhcnRlZCAoVW5peCB0aW1lc3RhbXApICovXG5leHBvcnQgY29uc3QgV29ya2Zsb3dTdGFydGVkQXQgPSBTZW1hbnRpY0NvbnZlbnRpb248bnVtYmVyPihcbiAgJ3dvcmtmbG93LnN0YXJ0ZWRfYXQnXG4pO1xuXG4vKiogTnVtYmVyIG9mIGV2ZW50cyBwcm9jZXNzZWQgZHVyaW5nIHdvcmtmbG93IGV4ZWN1dGlvbiAqL1xuZXhwb3J0IGNvbnN0IFdvcmtmbG93RXZlbnRzQ291bnQgPSBTZW1hbnRpY0NvbnZlbnRpb248bnVtYmVyPihcbiAgJ3dvcmtmbG93LmV2ZW50cy5jb3VudCdcbik7XG5cbi8qKiBOdW1iZXIgb2YgYXJndW1lbnRzIHBhc3NlZCB0byB0aGUgd29ya2Zsb3cgKi9cbmV4cG9ydCBjb25zdCBXb3JrZmxvd0FyZ3VtZW50c0NvdW50ID0gU2VtYW50aWNDb252ZW50aW9uPG51bWJlcj4oXG4gICd3b3JrZmxvdy5hcmd1bWVudHMuY291bnQnXG4pO1xuXG4vKiogVHlwZSBvZiB0aGUgd29ya2Zsb3cgcmVzdWx0ICovXG5leHBvcnQgY29uc3QgV29ya2Zsb3dSZXN1bHRUeXBlID0gU2VtYW50aWNDb252ZW50aW9uPHN0cmluZz4oXG4gICd3b3JrZmxvdy5yZXN1bHQudHlwZSdcbik7XG5cbi8qKiBXaGV0aGVyIHRyYWNlIGNvbnRleHQgd2FzIHByb3BhZ2F0ZWQgdG8gdGhpcyB3b3JrZmxvdyBleGVjdXRpb24gKi9cbmV4cG9ydCBjb25zdCBXb3JrZmxvd1RyYWNlUHJvcGFnYXRlZCA9IFNlbWFudGljQ29udmVudGlvbjxib29sZWFuPihcbiAgJ3dvcmtmbG93LnRyYWNlLnByb3BhZ2F0ZWQnXG4pO1xuXG4vKiogTmFtZSBvZiB0aGUgZXJyb3IgdGhhdCBjYXVzZWQgd29ya2Zsb3cgZmFpbHVyZSAqL1xuZXhwb3J0IGNvbnN0IFdvcmtmbG93RXJyb3JOYW1lID0gU2VtYW50aWNDb252ZW50aW9uPHN0cmluZz4oXG4gICd3b3JrZmxvdy5lcnJvci5uYW1lJ1xuKTtcblxuLyoqIEVycm9yIG1lc3NhZ2Ugd2hlbiB3b3JrZmxvdyBmYWlscyAqL1xuZXhwb3J0IGNvbnN0IFdvcmtmbG93RXJyb3JNZXNzYWdlID0gU2VtYW50aWNDb252ZW50aW9uPHN0cmluZz4oXG4gICd3b3JrZmxvdy5lcnJvci5tZXNzYWdlJ1xuKTtcblxuLyoqIEVycm9yIGNsYXNzaWZpY2F0aW9uIGNvZGUgKFVTRVJfRVJST1IsIFJVTlRJTUVfRVJST1IsIGV0Yy4pICovXG5leHBvcnQgY29uc3QgV29ya2Zsb3dFcnJvckNvZGUgPSBTZW1hbnRpY0NvbnZlbnRpb248c3RyaW5nPihcbiAgJ3dvcmtmbG93LmVycm9yLmNvZGUnXG4pO1xuXG4vKiogTnVtYmVyIG9mIHN0ZXBzIGNyZWF0ZWQgZHVyaW5nIHdvcmtmbG93IGV4ZWN1dGlvbiAqL1xuZXhwb3J0IGNvbnN0IFdvcmtmbG93U3RlcHNDcmVhdGVkID0gU2VtYW50aWNDb252ZW50aW9uPG51bWJlcj4oXG4gICd3b3JrZmxvdy5zdGVwcy5jcmVhdGVkJ1xuKTtcblxuLyoqIE51bWJlciBvZiBob29rcyBjcmVhdGVkIGR1cmluZyB3b3JrZmxvdyBleGVjdXRpb24gKi9cbmV4cG9ydCBjb25zdCBXb3JrZmxvd0hvb2tzQ3JlYXRlZCA9IFNlbWFudGljQ29udmVudGlvbjxudW1iZXI+KFxuICAnd29ya2Zsb3cuaG9va3MuY3JlYXRlZCdcbik7XG5cbi8qKiBOdW1iZXIgb2Ygd2FpdHMgY3JlYXRlZCBkdXJpbmcgd29ya2Zsb3cgZXhlY3V0aW9uICovXG5leHBvcnQgY29uc3QgV29ya2Zsb3dXYWl0c0NyZWF0ZWQgPSBTZW1hbnRpY0NvbnZlbnRpb248bnVtYmVyPihcbiAgJ3dvcmtmbG93LndhaXRzLmNyZWF0ZWQnXG4pO1xuXG4vLyBTdGVwIGF0dHJpYnV0ZXNcblxuLyoqIE5hbWUgb2YgdGhlIHN0ZXAgZnVuY3Rpb24gYmVpbmcgZXhlY3V0ZWQgKi9cbmV4cG9ydCBjb25zdCBTdGVwTmFtZSA9IFNlbWFudGljQ29udmVudGlvbjxzdHJpbmc+KCdzdGVwLm5hbWUnKTtcblxuLyoqIFVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGUgc3RlcCBpbnN0YW5jZSAqL1xuZXhwb3J0IGNvbnN0IFN0ZXBJZCA9IFNlbWFudGljQ29udmVudGlvbjxzdHJpbmc+KCdzdGVwLmlkJyk7XG5cbi8qKiBDdXJyZW50IGF0dGVtcHQgbnVtYmVyIGZvciBzdGVwIGV4ZWN1dGlvbiAoc3RhcnRzIGF0IDEpICovXG5leHBvcnQgY29uc3QgU3RlcEF0dGVtcHQgPSBTZW1hbnRpY0NvbnZlbnRpb248bnVtYmVyPignc3RlcC5hdHRlbXB0Jyk7XG5cbi8qKiBDdXJyZW50IHN0YXR1cyBvZiB0aGUgc3RlcCAqL1xuZXhwb3J0IGNvbnN0IFN0ZXBTdGF0dXMgPSBTZW1hbnRpY0NvbnZlbnRpb248U3RlcFsnc3RhdHVzJ10+KCdzdGVwLnN0YXR1cycpO1xuXG4vKiogTWF4aW11bSBudW1iZXIgb2YgcmV0cmllcyBhbGxvd2VkIGZvciB0aGlzIHN0ZXAgKi9cbmV4cG9ydCBjb25zdCBTdGVwTWF4UmV0cmllcyA9IFNlbWFudGljQ29udmVudGlvbjxudW1iZXI+KCdzdGVwLm1heF9yZXRyaWVzJyk7XG5cbi8qKiBXaGV0aGVyIHRyYWNlIGNvbnRleHQgd2FzIHByb3BhZ2F0ZWQgdG8gdGhpcyBzdGVwIGV4ZWN1dGlvbiAqL1xuZXhwb3J0IGNvbnN0IFN0ZXBUcmFjZVByb3BhZ2F0ZWQgPSBTZW1hbnRpY0NvbnZlbnRpb248Ym9vbGVhbj4oXG4gICdzdGVwLnRyYWNlLnByb3BhZ2F0ZWQnXG4pO1xuXG4vKiogV2hldGhlciB0aGUgc3RlcCB3YXMgc2tpcHBlZCBkdXJpbmcgZXhlY3V0aW9uICovXG5leHBvcnQgY29uc3QgU3RlcFNraXBwZWQgPSBTZW1hbnRpY0NvbnZlbnRpb248Ym9vbGVhbj4oJ3N0ZXAuc2tpcHBlZCcpO1xuXG4vKiogUmVhc29uIHdoeSB0aGUgc3RlcCB3YXMgc2tpcHBlZCAqL1xuZXhwb3J0IGNvbnN0IFN0ZXBTa2lwUmVhc29uID1cbiAgU2VtYW50aWNDb252ZW50aW9uPFN0ZXBbJ3N0YXR1cyddPignc3RlcC5za2lwX3JlYXNvbicpO1xuXG4vKiogTnVtYmVyIG9mIGFyZ3VtZW50cyBwYXNzZWQgdG8gdGhlIHN0ZXAgZnVuY3Rpb24gKi9cbmV4cG9ydCBjb25zdCBTdGVwQXJndW1lbnRzQ291bnQgPSBTZW1hbnRpY0NvbnZlbnRpb248bnVtYmVyPihcbiAgJ3N0ZXAuYXJndW1lbnRzLmNvdW50J1xuKTtcblxuLyoqIFR5cGUgb2YgdGhlIHN0ZXAgcmVzdWx0ICovXG5leHBvcnQgY29uc3QgU3RlcFJlc3VsdFR5cGUgPSBTZW1hbnRpY0NvbnZlbnRpb248c3RyaW5nPignc3RlcC5yZXN1bHQudHlwZScpO1xuXG4vKiogTmFtZSBvZiB0aGUgZXJyb3IgdGhhdCBjYXVzZWQgc3RlcCBmYWlsdXJlICovXG5leHBvcnQgY29uc3QgU3RlcEVycm9yTmFtZSA9IFNlbWFudGljQ29udmVudGlvbjxzdHJpbmc+KCdzdGVwLmVycm9yLm5hbWUnKTtcblxuLyoqIEVycm9yIG1lc3NhZ2Ugd2hlbiBzdGVwIGZhaWxzICovXG5leHBvcnQgY29uc3QgU3RlcEVycm9yTWVzc2FnZSA9XG4gIFNlbWFudGljQ29udmVudGlvbjxzdHJpbmc+KCdzdGVwLmVycm9yLm1lc3NhZ2UnKTtcblxuLyoqIFdoZXRoZXIgdGhlIHN0ZXAgZmFpbGVkIHdpdGggYSBmYXRhbCBlcnJvciAobm8gcmV0cmllcykgKi9cbmV4cG9ydCBjb25zdCBTdGVwRmF0YWxFcnJvciA9IFNlbWFudGljQ29udmVudGlvbjxib29sZWFuPignc3RlcC5mYXRhbF9lcnJvcicpO1xuXG4vKiogV2hldGhlciBhbGwgcmV0cnkgYXR0ZW1wdHMgaGF2ZSBiZWVuIGV4aGF1c3RlZCAqL1xuZXhwb3J0IGNvbnN0IFN0ZXBSZXRyeUV4aGF1c3RlZCA9IFNlbWFudGljQ29udmVudGlvbjxib29sZWFuPihcbiAgJ3N0ZXAucmV0cnkuZXhoYXVzdGVkJ1xuKTtcblxuLyoqIE51bWJlciBvZiBzZWNvbmRzIHRvIHdhaXQgYmVmb3JlIG5leHQgcmV0cnkgYXR0ZW1wdCAqL1xuZXhwb3J0IGNvbnN0IFN0ZXBSZXRyeVRpbWVvdXRTZWNvbmRzID0gU2VtYW50aWNDb252ZW50aW9uPG51bWJlcj4oXG4gICdzdGVwLnJldHJ5LnRpbWVvdXRfc2Vjb25kcydcbik7XG5cbi8qKiBXaGV0aGVyIHRoZSBzdGVwIHdpbGwgYmUgcmV0cmllZCBhZnRlciB0aGlzIGZhaWx1cmUgKi9cbmV4cG9ydCBjb25zdCBTdGVwUmV0cnlXaWxsUmV0cnkgPSBTZW1hbnRpY0NvbnZlbnRpb248Ym9vbGVhbj4oXG4gICdzdGVwLnJldHJ5LndpbGxfcmV0cnknXG4pO1xuXG4vLyBRdWV1ZS9NZXNzYWdpbmcgYXR0cmlidXRlcyAtIFN0YW5kYXJkIE9URUwgbWVzc2FnaW5nIGNvbnZlbnRpb25zXG4vLyBTZWU6IGh0dHBzOi8vb3BlbnRlbGVtZXRyeS5pby9kb2NzL3NwZWNzL3NlbWNvbnYvbWVzc2FnaW5nL21lc3NhZ2luZy1zcGFucy9cblxuLyoqIE1lc3NhZ2luZyBzeXN0ZW0gaWRlbnRpZmllciAoc3RhbmRhcmQgT1RFTDogbWVzc2FnaW5nLnN5c3RlbSkgKi9cbmV4cG9ydCBjb25zdCBNZXNzYWdpbmdTeXN0ZW0gPSBTZW1hbnRpY0NvbnZlbnRpb248c3RyaW5nPignbWVzc2FnaW5nLnN5c3RlbScpO1xuXG4vKiogRGVzdGluYXRpb24gbmFtZS9xdWV1ZSBuYW1lIChzdGFuZGFyZCBPVEVMOiBtZXNzYWdpbmcuZGVzdGluYXRpb24ubmFtZSkgKi9cbmV4cG9ydCBjb25zdCBNZXNzYWdpbmdEZXN0aW5hdGlvbk5hbWUgPSBTZW1hbnRpY0NvbnZlbnRpb248c3RyaW5nPihcbiAgJ21lc3NhZ2luZy5kZXN0aW5hdGlvbi5uYW1lJ1xuKTtcblxuLyoqIFRoZSBtZXNzYWdlIGlkIGJlaW5nIGhhbmRsZWQgKHN0YW5kYXJkIE9URUw6IG1lc3NhZ2luZy5tZXNzYWdlLmlkKSAqL1xuZXhwb3J0IGNvbnN0IE1lc3NhZ2luZ01lc3NhZ2VJZCA9IFNlbWFudGljQ29udmVudGlvbjxNZXNzYWdlSWQ+KFxuICAnbWVzc2FnaW5nLm1lc3NhZ2UuaWQnXG4pO1xuXG4vKiogT3BlcmF0aW9uIHR5cGUgKHN0YW5kYXJkIE9URUw6IG1lc3NhZ2luZy5vcGVyYXRpb24udHlwZSkgKi9cbmV4cG9ydCBjb25zdCBNZXNzYWdpbmdPcGVyYXRpb25UeXBlID0gU2VtYW50aWNDb252ZW50aW9uPFxuICAncHVibGlzaCcgfCAncmVjZWl2ZScgfCAncHJvY2Vzcydcbj4oJ21lc3NhZ2luZy5vcGVyYXRpb24udHlwZScpO1xuXG4vKiogVGltZSB0YWtlbiB0byBlbnF1ZXVlIHRoZSBtZXNzYWdlIGluIG1pbGxpc2Vjb25kcyAod29ya2Zsb3ctc3BlY2lmaWMpICovXG5leHBvcnQgY29uc3QgUXVldWVPdmVyaGVhZE1zID0gU2VtYW50aWNDb252ZW50aW9uPG51bWJlcj4oXG4gICd3b3JrZmxvdy5xdWV1ZS5vdmVyaGVhZF9tcydcbik7XG5cbi8vIERlcGxveW1lbnQgYXR0cmlidXRlc1xuXG4vKiogVW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoZSBkZXBsb3ltZW50IGVudmlyb25tZW50ICovXG5leHBvcnQgY29uc3QgRGVwbG95bWVudElkID0gU2VtYW50aWNDb252ZW50aW9uPHN0cmluZz4oJ2RlcGxveW1lbnQuaWQnKTtcblxuLy8gSG9vayBhdHRyaWJ1dGVzXG5cbi8qKiBUb2tlbiBpZGVudGlmeWluZyBhIHNwZWNpZmljIGhvb2sgKi9cbmV4cG9ydCBjb25zdCBIb29rVG9rZW4gPSBTZW1hbnRpY0NvbnZlbnRpb248c3RyaW5nPignd29ya2Zsb3cuaG9vay50b2tlbicpO1xuXG4vKiogVW5pcXVlIGlkZW50aWZpZXIgZm9yIGEgaG9vayBpbnN0YW5jZSAqL1xuZXhwb3J0IGNvbnN0IEhvb2tJZCA9IFNlbWFudGljQ29udmVudGlvbjxzdHJpbmc+KCd3b3JrZmxvdy5ob29rLmlkJyk7XG5cbi8qKiBXaGV0aGVyIGEgaG9vayB3YXMgZm91bmQgYnkgaXRzIHRva2VuICovXG5leHBvcnQgY29uc3QgSG9va0ZvdW5kID0gU2VtYW50aWNDb252ZW50aW9uPGJvb2xlYW4+KCd3b3JrZmxvdy5ob29rLmZvdW5kJyk7XG5cbi8vIFdlYmhvb2sgYXR0cmlidXRlc1xuXG4vKiogTnVtYmVyIG9mIHdlYmhvb2sgaGFuZGxlcnMgdHJpZ2dlcmVkICovXG5leHBvcnQgY29uc3QgV2ViaG9va0hhbmRsZXJzVHJpZ2dlcmVkID0gU2VtYW50aWNDb252ZW50aW9uPG51bWJlcj4oXG4gICd3ZWJob29rLmhhbmRsZXJzLnRyaWdnZXJlZCdcbik7XG5cbi8vIFN1c3BlbnNpb24gYXR0cmlidXRlc1xuXG5leHBvcnQgY29uc3QgV29ya2Zsb3dTdXNwZW5zaW9uU3RhdGUgPSBTZW1hbnRpY0NvbnZlbnRpb248J3N1c3BlbmRlZCc+KFxuICAnd29ya2Zsb3cuc3VzcGVuc2lvbi5zdGF0ZSdcbik7XG5leHBvcnQgY29uc3QgV29ya2Zsb3dTdXNwZW5zaW9uSG9va0NvdW50ID0gU2VtYW50aWNDb252ZW50aW9uPG51bWJlcj4oXG4gICd3b3JrZmxvdy5zdXNwZW5zaW9uLmhvb2tfY291bnQnXG4pO1xuZXhwb3J0IGNvbnN0IFdvcmtmbG93U3VzcGVuc2lvblN0ZXBDb3VudCA9IFNlbWFudGljQ29udmVudGlvbjxudW1iZXI+KFxuICAnd29ya2Zsb3cuc3VzcGVuc2lvbi5zdGVwX2NvdW50J1xuKTtcbmV4cG9ydCBjb25zdCBXb3JrZmxvd1N1c3BlbnNpb25XYWl0Q291bnQgPSBTZW1hbnRpY0NvbnZlbnRpb248bnVtYmVyPihcbiAgJ3dvcmtmbG93LnN1c3BlbnNpb24ud2FpdF9jb3VudCdcbik7XG5cbi8vIFdvcmxkL1N0b3JhZ2UgYXR0cmlidXRlcyAtIFN0YW5kYXJkIE9URUwgSFRUUCBjb252ZW50aW9uc1xuLy8gU2VlOiBodHRwczovL29wZW50ZWxlbWV0cnkuaW8vZG9jcy9zcGVjcy9zZW1jb252L2h0dHAvaHR0cC1zcGFucy9cblxuLyoqIEhUVFAgcmVxdWVzdCBtZXRob2QgKHN0YW5kYXJkIE9URUw6IGh0dHAucmVxdWVzdC5tZXRob2QpICovXG5leHBvcnQgY29uc3QgSHR0cFJlcXVlc3RNZXRob2QgPSBTZW1hbnRpY0NvbnZlbnRpb248c3RyaW5nPihcbiAgJ2h0dHAucmVxdWVzdC5tZXRob2QnXG4pO1xuXG4vKiogRnVsbCBVUkwgb2YgdGhlIHJlcXVlc3QgKHN0YW5kYXJkIE9URUw6IHVybC5mdWxsKSAqL1xuZXhwb3J0IGNvbnN0IFVybEZ1bGwgPSBTZW1hbnRpY0NvbnZlbnRpb248c3RyaW5nPigndXJsLmZ1bGwnKTtcblxuLyoqIFNlcnZlciBob3N0bmFtZSAoc3RhbmRhcmQgT1RFTDogc2VydmVyLmFkZHJlc3MpICovXG5leHBvcnQgY29uc3QgU2VydmVyQWRkcmVzcyA9IFNlbWFudGljQ29udmVudGlvbjxzdHJpbmc+KCdzZXJ2ZXIuYWRkcmVzcycpO1xuXG4vKiogU2VydmVyIHBvcnQgKHN0YW5kYXJkIE9URUw6IHNlcnZlci5wb3J0KSAqL1xuZXhwb3J0IGNvbnN0IFNlcnZlclBvcnQgPSBTZW1hbnRpY0NvbnZlbnRpb248bnVtYmVyPignc2VydmVyLnBvcnQnKTtcblxuLyoqIEhUVFAgcmVzcG9uc2Ugc3RhdHVzIGNvZGUgKHN0YW5kYXJkIE9URUw6IGh0dHAucmVzcG9uc2Uuc3RhdHVzX2NvZGUpICovXG5leHBvcnQgY29uc3QgSHR0cFJlc3BvbnNlU3RhdHVzQ29kZSA9IFNlbWFudGljQ29udmVudGlvbjxudW1iZXI+KFxuICAnaHR0cC5yZXNwb25zZS5zdGF0dXNfY29kZSdcbik7XG5cbi8qKiBFcnJvciB0eXBlIHdoZW4gcmVxdWVzdCBmYWlscyAoc3RhbmRhcmQgT1RFTDogZXJyb3IudHlwZSkgKi9cbmV4cG9ydCBjb25zdCBFcnJvclR5cGUgPSBTZW1hbnRpY0NvbnZlbnRpb248c3RyaW5nPignZXJyb3IudHlwZScpO1xuXG4vLyBXb3JsZC1zcGVjaWZpYyBjdXN0b20gYXR0cmlidXRlcyAoZm9yIHdvcmtmbG93LXNwZWNpZmljIGNvbnRleHQpXG5cbi8qKiBGb3JtYXQgdXNlZCBmb3IgcGFyc2luZyByZXNwb25zZSBib2R5IChjYm9yIG9yIGpzb24pICovXG5leHBvcnQgY29uc3QgV29ybGRQYXJzZUZvcm1hdCA9IFNlbWFudGljQ29udmVudGlvbjwnY2JvcicgfCAnanNvbic+KFxuICAnd29ya2Zsb3cud29ybGQucGFyc2UuZm9ybWF0J1xuKTtcblxuLy8gRXZlbnQgbG9hZGluZyBhdHRyaWJ1dGVzXG5cbi8qKiBOdW1iZXIgb2YgcGFnaW5hdGlvbiBwYWdlcyBsb2FkZWQgd2hlbiBmZXRjaGluZyB3b3JrZmxvdyBldmVudHMgKi9cbmV4cG9ydCBjb25zdCBXb3JrZmxvd0V2ZW50c1BhZ2VzTG9hZGVkID0gU2VtYW50aWNDb252ZW50aW9uPG51bWJlcj4oXG4gICd3b3JrZmxvdy5ldmVudHMucGFnZXNfbG9hZGVkJ1xuKTtcblxuLy8gUXVldWUgdGltaW5nIGJyZWFrZG93biBhdHRyaWJ1dGVzICh3b3JrZmxvdy1zcGVjaWZpYylcblxuLyoqIFRpbWUgc3BlbnQgZGVzZXJpYWxpemluZyB0aGUgcXVldWUgbWVzc2FnZSBpbiBtaWxsaXNlY29uZHMgKi9cbmV4cG9ydCBjb25zdCBRdWV1ZURlc2VyaWFsaXplVGltZU1zID0gU2VtYW50aWNDb252ZW50aW9uPG51bWJlcj4oXG4gICd3b3JrZmxvdy5xdWV1ZS5kZXNlcmlhbGl6ZV90aW1lX21zJ1xuKTtcblxuLyoqIFRpbWUgc3BlbnQgZXhlY3V0aW5nIHRoZSBoYW5kbGVyIGxvZ2ljIGluIG1pbGxpc2Vjb25kcyAqL1xuZXhwb3J0IGNvbnN0IFF1ZXVlRXhlY3V0aW9uVGltZU1zID0gU2VtYW50aWNDb252ZW50aW9uPG51bWJlcj4oXG4gICd3b3JrZmxvdy5xdWV1ZS5leGVjdXRpb25fdGltZV9tcydcbik7XG5cbi8qKiBUaW1lIHNwZW50IHNlcmlhbGl6aW5nIHRoZSByZXNwb25zZSBpbiBtaWxsaXNlY29uZHMgKi9cbmV4cG9ydCBjb25zdCBRdWV1ZVNlcmlhbGl6ZVRpbWVNcyA9IFNlbWFudGljQ29udmVudGlvbjxudW1iZXI+KFxuICAnd29ya2Zsb3cucXVldWUuc2VyaWFsaXplX3RpbWVfbXMnXG4pO1xuXG4vLyBSUEMvUGVlciBTZXJ2aWNlIGF0dHJpYnV0ZXMgLSBGb3Igc2VydmljZSBtYXBzIGFuZCBkZXBlbmRlbmN5IHRyYWNraW5nXG4vLyBTZWU6IGh0dHBzOi8vb3BlbnRlbGVtZXRyeS5pby9kb2NzL3NwZWNzL3NlbWNvbnYvcnBjL3JwYy1zcGFucy9cblxuLyoqIFRoZSByZW1vdGUgc2VydmljZSBuYW1lIGZvciBEYXRhZG9nIHNlcnZpY2UgbWFwcyAoRGF0YWRvZy1zcGVjaWZpYzogcGVlci5zZXJ2aWNlKSAqL1xuZXhwb3J0IGNvbnN0IFBlZXJTZXJ2aWNlID0gU2VtYW50aWNDb252ZW50aW9uPHN0cmluZz4oJ3BlZXIuc2VydmljZScpO1xuXG4vKiogUlBDIHN5c3RlbSBpZGVudGlmaWVyIChzdGFuZGFyZCBPVEVMOiBycGMuc3lzdGVtKSAqL1xuZXhwb3J0IGNvbnN0IFJwY1N5c3RlbSA9IFNlbWFudGljQ29udmVudGlvbjxzdHJpbmc+KCdycGMuc3lzdGVtJyk7XG5cbi8qKiBSUEMgc2VydmljZSBuYW1lIChzdGFuZGFyZCBPVEVMOiBycGMuc2VydmljZSkgKi9cbmV4cG9ydCBjb25zdCBScGNTZXJ2aWNlID0gU2VtYW50aWNDb252ZW50aW9uPHN0cmluZz4oJ3JwYy5zZXJ2aWNlJyk7XG5cbi8qKiBSUEMgbWV0aG9kIG5hbWUgKHN0YW5kYXJkIE9URUw6IHJwYy5tZXRob2QpICovXG5leHBvcnQgY29uc3QgUnBjTWV0aG9kID0gU2VtYW50aWNDb252ZW50aW9uPHN0cmluZz4oJ3JwYy5tZXRob2QnKTtcblxuLy8gRXJyb3IgYXR0cmlidXRlcyAtIFN0YW5kYXJkIE9URUwgZXJyb3IgY29udmVudGlvbnNcbi8vIFNlZTogaHR0cHM6Ly9vcGVudGVsZW1ldHJ5LmlvL2RvY3Mvc3BlY3Mvc2VtY29udi9leGNlcHRpb25zL2V4Y2VwdGlvbnMtc3BhbnMvXG5cbi8qKiBXaGV0aGVyIHRoZSBlcnJvciBpcyByZXRyeWFibGUgKHdvcmtmbG93LXNwZWNpZmljKSAqL1xuZXhwb3J0IGNvbnN0IEVycm9yUmV0cnlhYmxlID0gU2VtYW50aWNDb252ZW50aW9uPGJvb2xlYW4+KCdlcnJvci5yZXRyeWFibGUnKTtcblxuLyoqIEVycm9yIGNhdGVnb3J5ICh3b3JrZmxvdy1zcGVjaWZpYzogZmF0YWwsIHJldHJ5YWJsZSwgdHJhbnNpZW50KSAqL1xuZXhwb3J0IGNvbnN0IEVycm9yQ2F0ZWdvcnkgPSBTZW1hbnRpY0NvbnZlbnRpb248XG4gICdmYXRhbCcgfCAncmV0cnlhYmxlJyB8ICd0cmFuc2llbnQnXG4+KCdlcnJvci5jYXRlZ29yeScpO1xuIl19
373
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VtYW50aWMtY29udmVudGlvbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdGVsZW1ldHJ5L3NlbWFudGljLWNvbnZlbnRpb25zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBcUNHO0FBSUg7Ozs7R0FJRztBQUNILFNBQVMsa0JBQWtCLENBQUksR0FBRyxLQUFlO0lBQy9DLE9BQU8sQ0FBQyxLQUFRLEVBQUUsRUFBRSxDQUNsQixNQUFNLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBVSxDQUFDLENBQUMsQ0FBQztBQUNwRSxDQUFDO0FBRUQsc0JBQXNCO0FBRXRCLDhDQUE4QztBQUM5QyxNQUFNLENBQUMsTUFBTSxZQUFZLEdBQUcsa0JBQWtCLENBQVMsZUFBZSxDQUFDLENBQUM7QUFFeEUsb0RBQW9EO0FBQ3BELE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUFHLGtCQUFrQixDQUVqRCxvQkFBb0IsQ0FBQyxDQUFDO0FBRXhCLDZEQUE2RDtBQUM3RCxNQUFNLENBQUMsTUFBTSxhQUFhLEdBQUcsa0JBQWtCLENBQVMsaUJBQWlCLENBQUMsQ0FBQztBQUUzRSx5Q0FBeUM7QUFDekMsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUcsa0JBQWtCLENBRWpELHFCQUFxQixDQUFDLENBQUM7QUFFekIscUVBQXFFO0FBQ3JFLE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUFHLGtCQUFrQixDQUNqRCxxQkFBcUIsQ0FDdEIsQ0FBQztBQUVGLDJEQUEyRDtBQUMzRCxNQUFNLENBQUMsTUFBTSxtQkFBbUIsR0FBRyxrQkFBa0IsQ0FDbkQsdUJBQXVCLENBQ3hCLENBQUM7QUFFRiw2RUFBNkU7QUFDN0UsTUFBTSxDQUFDLE1BQU0scUJBQXFCLEdBQUcsa0JBQWtC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QyxNQUFNLFVBQVUsR0FBRyxrQkFBa0IsQ0FBUyxhQUFhLENBQUMsQ0FBQztBQUVwRSxrREFBa0Q7QUFDbEQsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUFHLGtCQUFrQixDQUFTLFlBQVksQ0FBQyxDQUFDO0FBRWxFLHFEQUFxRDtBQUNyRCxnRkFBZ0Y7QUFFaEYseURBQXlEO0FBQ3pELE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FBRyxrQkFBa0IsQ0FBVSxpQkFBaUIsQ0FBQyxDQUFDO0FBRTdFLHNFQUFzRTtBQUN0RSxNQUFNLENBQUMsTUFBTSxhQUFhLEdBQUcsa0JBQWtCLENBRTdDLGdCQUFnQixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIE9wZW5UZWxlbWV0cnkgc2VtYW50aWMgY29udmVudGlvbnMgZm9yIFZlcmNlbCBXb3JrZmxvdyB0ZWxlbWV0cnkuXG4gKlxuICogVGhpcyBtb2R1bGUgcHJvdmlkZXMgc3RhbmRhcmRpemVkIHRlbGVtZXRyeSBhdHRyaWJ1dGVzIGZvbGxvd2luZyBPcGVuVGVsZW1ldHJ5IHNlbWFudGljIGNvbnZlbnRpb25zXG4gKiBmb3IgaW5zdHJ1bWVudGluZyB3b3JrZmxvdyBleGVjdXRpb24sIHN0ZXAgcHJvY2Vzc2luZywgYW5kIHJlbGF0ZWQgb3BlcmF0aW9ucy4gRWFjaCBleHBvcnRlZCBmdW5jdGlvblxuICogY3JlYXRlcyBhIHByb3Blcmx5IGZvcm1hdHRlZCBhdHRyaWJ1dGUgb2JqZWN0IHRoYXQgY2FuIGJlIHVzZWQgd2l0aCBPcGVuVGVsZW1ldHJ5IHNwYW5zLlxuICpcbiAqIFRoZSBzZW1hbnRpYyBjb252ZW50aW9ucyBhcmUgb3JnYW5pemVkIGludG8gc2V2ZXJhbCBjYXRlZ29yaWVzOlxuICogLSAqKldvcmtmbG93IGF0dHJpYnV0ZXMqKjogVHJhY2sgd29ya2Zsb3cgbGlmZWN5Y2xlLCBzdGF0dXMsIGFuZCBtZXRhZGF0YVxuICogLSAqKlN0ZXAgYXR0cmlidXRlcyoqOiBNb25pdG9yIGluZGl2aWR1YWwgc3RlcCBleGVjdXRpb24sIHJldHJpZXMsIGFuZCByZXN1bHRzXG4gKiAtICoqUXVldWUgYXR0cmlidXRlcyoqOiBJbnN0cnVtZW50IG1lc3NhZ2UgcXVldWUgb3BlcmF0aW9uc1xuICogLSAqKkRlcGxveW1lbnQgYXR0cmlidXRlcyoqOiBDYXB0dXJlIGRlcGxveW1lbnQgZW52aXJvbm1lbnQgaW5mb3JtYXRpb25cbiAqXG4gKiBBbGwgYXR0cmlidXRlIGZ1bmN0aW9ucyBhcmUgdHlwZS1zYWZlIGFuZCBsZXZlcmFnZSBleGlzdGluZyBiYWNrZW5kIHR5cGVzIHRvIGVuc3VyZVxuICogY29uc2lzdGVuY3kgYmV0d2VlbiB0ZWxlbWV0cnkgZGF0YSBhbmQgYWN0dWFsIHN5c3RlbSBzdGF0ZS5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogaW1wb3J0ICogYXMgQXR0cmlidXRlIGZyb20gJy4vdGVsZW1ldHJ5L3NlbWFudGljLWNvbnZlbnRpb25zLmpzJztcbiAqXG4gKiAvLyBTZXQgd29ya2Zsb3cgYXR0cmlidXRlcyBvbiBhIHNwYW5cbiAqIHNwYW4uc2V0QXR0cmlidXRlcyh7XG4gKiAgIC4uLkF0dHJpYnV0ZS5Xb3JrZmxvd05hbWUoJ215LXdvcmtmbG93JyksXG4gKiAgIC4uLkF0dHJpYnV0ZS5Xb3JrZmxvd09wZXJhdGlvbignc3RhcnQnKSxcbiAqICAgLi4uQXR0cmlidXRlLldvcmtmbG93UnVuU3RhdHVzKCdydW5uaW5nJyksXG4gKiB9KTtcbiAqXG4gKiAvLyBTZXQgc3RlcCBhdHRyaWJ1dGVzXG4gKiBzcGFuLnNldEF0dHJpYnV0ZXMoe1xuICogICAuLi5BdHRyaWJ1dGUuU3RlcE5hbWUoJ3Byb2Nlc3MtZGF0YScpLFxuICogICAuLi5BdHRyaWJ1dGUuU3RlcFN0YXR1cygnY29tcGxldGVkJyksXG4gKiAgIC4uLkF0dHJpYnV0ZS5TdGVwQXR0ZW1wdCgxKSxcbiAqIH0pO1xuICogYGBgXG4gKlxuICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9vcGVudGVsZW1ldHJ5LmlvL2RvY3Mvc3BlY3Mvc2VtY29udi99IE9wZW5UZWxlbWV0cnkgU2VtYW50aWMgQ29udmVudGlvbnNcbiAqIEBwYWNrYWdlRG9jdW1lbnRhdGlvblxuICovXG5cbmltcG9ydCB0eXBlIHsgTWVzc2FnZUlkLCBTdGVwLCBXb3JrZmxvd1J1biB9IGZyb20gJ0B3b3JrZmxvdy93b3JsZCc7XG5cbi8qKlxuICogQ3JlYXRlcyBhIHNlbWFudGljIGNvbnZlbnRpb24gZnVuY3Rpb24gdGhhdCByZXR1cm5zIGFuIGF0dHJpYnV0ZSBvYmplY3QuXG4gKiBAcGFyYW0gbmFtZSAtIFRoZSBhdHRyaWJ1dGUgbmFtZSBmb2xsb3dpbmcgT3BlblRlbGVtZXRyeSBzZW1hbnRpYyBjb252ZW50aW9uc1xuICogQHJldHVybnMgQSBmdW5jdGlvbiB0aGF0IHRha2VzIGEgdmFsdWUgYW5kIHJldHVybnMgYW4gYXR0cmlidXRlIG9iamVjdFxuICovXG5mdW5jdGlvbiBTZW1hbnRpY0NvbnZlbnRpb248VD4oLi4ubmFtZXM6IHN0cmluZ1tdKSB7XG4gIHJldHVybiAodmFsdWU6IFQpID0+XG4gICAgT2JqZWN0LmZyb21FbnRyaWVzKG5hbWVzLm1hcCgobmFtZSkgPT4gW25hbWUsIHZhbHVlXSBhcyBjb25zdCkpO1xufVxuXG4vLyBXb3JrZmxvdyBhdHRyaWJ1dGVzXG5cbi8qKiBUaGUgbmFtZSBvZiB0aGUgd29ya2Zsb3cgYmVpbmcgZXhlY3V0ZWQgKi9cbmV4cG9ydCBjb25zdCBXb3JrZmxvd05hbWUgPSBTZW1hbnRpY0NvbnZlbnRpb248c3RyaW5nPignd29ya2Zsb3cubmFtZScpO1xuXG4vKiogVGhlIG9wZXJhdGlvbiBiZWluZyBwZXJmb3JtZWQgb24gdGhlIHdvcmtmbG93ICovXG5leHBvcnQgY29uc3QgV29ya2Zsb3dPcGVyYXRpb24gPSBTZW1hbnRpY0NvbnZlbnRpb248XG4gICdzdGFydCcgfCAnZXhlY3V0ZScgfCAnZXhlY3V0ZV92MicgfCAncnVuJ1xuPignd29ya2Zsb3cub3BlcmF0aW9uJyk7XG5cbi8qKiBVbmlxdWUgaWRlbnRpZmllciBmb3IgYSBzcGVjaWZpYyB3b3JrZmxvdyBydW4gaW5zdGFuY2UgKi9cbmV4cG9ydCBjb25zdCBXb3JrZmxvd1J1bklkID0gU2VtYW50aWNDb252ZW50aW9uPHN0cmluZz4oJ3dvcmtmbG93LnJ1bi5pZCcpO1xuXG4vKiogQ3VycmVudCBzdGF0dXMgb2YgdGhlIHdvcmtmbG93IHJ1biAqL1xuZXhwb3J0IGNvbnN0IFdvcmtmbG93UnVuU3RhdHVzID0gU2VtYW50aWNDb252ZW50aW9uPFxuICBXb3JrZmxvd1J1blsnc3RhdHVzJ10gfCAnd29ya2Zsb3dfc3VzcGVuZGVkJ1xuPignd29ya2Zsb3cucnVuLnN0YXR1cycpO1xuXG4vKiogVGltZXN0YW1wIHdoZW4gdGhlIHdvcmtmbG93IGV4ZWN1dGlvbiBzdGFydGVkIChVbml4IHRpbWVzdGFtcCkgKi9cbmV4cG9ydCBjb25zdCBXb3JrZmxvd1N0YXJ0ZWRBdCA9IFNlbWFudGljQ29udmVudGlvbjxudW1iZXI+KFxuICAnd29ya2Zsb3cuc3RhcnRlZF9hdCdcbik7XG5cbi8qKiBOdW1iZXIgb2YgZXZlbnRzIHByb2Nlc3NlZCBkdXJpbmcgd29ya2Zsb3cgZXhlY3V0aW9uICovXG5leHBvcnQgY29uc3QgV29ya2Zsb3dFdmVudHNDb3VudCA9IFNlbWFudGljQ29udmVudGlvbjxudW1iZXI+KFxuICAnd29ya2Zsb3cuZXZlbnRzLmNvdW50J1xuKTtcblxuLyoqIFdoZXRoZXIgd29ya2Zsb3cgZXhlY3V0aW9uIHN0YXJ0cyB3aXRoIHJlcGxheSBvciByZXN1bWVzIGEgcmV0YWluZWQgVk0gKi9cbmV4cG9ydCBjb25zdCBXb3JrZmxvd0V4ZWN1dGlvbk1vZGUgPSBTZW1hbnRpY0NvbnZlbnRpb248J3JlcGxheScgfCAncmV0YWluZWQnPihcbiAgJ3dvcmtmbG93LmV4ZWN1dGlvbi5tb2RlJ1xuKTtcblxuLyoqXG4gKiBFdmVudHMgdGhlIHJlcGxheSB3YWxrZWQgcGFzdCB0aGF0IG5vIGNvbnN1bWVyIGNsYWltZWQsIHN0aWxsIGhlbGQgd2hlbiB0aGVcbiAqIHJlcGxheSBzdG9wcGVkLlxuICpcbiAqIEEgbm9uLXplcm8gY291bnQgb24gYSBzdXNwZW5zaW9uIGlzIG9yZGluYXJ5OiBhbiBvdXQtb2YtYmFuZCBkZWxpdmVyeSB0aGF0XG4gKiBsYW5kZWQgYWhlYWQgb2YgdGhlIGNvZGUgdGhhdCByZWFkcyBpdCB3YWl0cyBmb3IgdGhlIHJlcGxheSB0aGF0IGdldHMgdGhlcmUuXG4gKiBGcm9tIGluc2lkZSBvbmUgcmVwbGF5IHRoYXQgaXMgaW5kaXN0aW5ndWlzaGFibGUgZnJvbSBhbiBldmVudCBubyByZXBsYXkgd2lsbFxuICogZXZlciBjbGFpbSwgYmVjYXVzZSB0aGUgdHdvIGRpZmZlciBvbmx5IGluIHdoYXQgdGhlIG5leHQgcmVwbGF5IGRvZXMuIFNvIHRoZVxuICogY291bnQgZ29lcyBvbiB0aGUgc3BhbiBpbnN0ZWFkIG9mIGZhaWxpbmcgdGhlIHJ1biwgYW5kIHRoZSBjYXNlIHdvcnRoIGFjdGluZ1xuICogb24gaXMgYSBxdWVyeSBhY3Jvc3MgYSBydW4ncyBzcGFuczogdGhlIHNhbWVcbiAqIHtAbGluayBXb3JrZmxvd1BhcmtlZEV2ZW50SWR9IGhlbGQgb24gc3VzcGVuc2lvbiBhZnRlciBzdXNwZW5zaW9uLlxuICovXG5leHBvcnQgY29uc3QgV29ya2Zsb3dQYXJrZWRFdmVudHNDb3VudCA9IFNlbWFudGljQ29udmVudGlvbjxudW1iZXI+KFxuICAnd29ya2Zsb3cuZXZlbnRzLnBhcmtlZC5jb3VudCdcbik7XG5cbi8qKiBPbGRlc3QgZXZlbnQgc3RpbGwgaGVsZCB1bmNsYWltZWQgd2hlbiB0aGUgcmVwbGF5IHN0b3BwZWQuICovXG5leHBvcnQgY29uc3QgV29ya2Zsb3dQYXJrZWRFdmVudElkID0gU2VtYW50aWNDb252ZW50aW9uPHN0cmluZz4oXG4gICd3b3JrZmxvdy5ldmVudHMucGFya2VkLmV2ZW50X2lkJ1xuKTtcblxuLyoqIFR5cGUgb2YgdGhlIG9sZGVzdCBldmVudCBzdGlsbCBoZWxkIHVuY2xhaW1lZCB3aGVuIHRoZSByZXBsYXkgc3RvcHBlZC4gKi9cbmV4cG9ydCBjb25zdCBXb3JrZmxvd1BhcmtlZEV2ZW50VHlwZSA9IFNlbWFudGljQ29udmVudGlvbjxzdHJpbmc+KFxuICAnd29ya2Zsb3cuZXZlbnRzLnBhcmtlZC5ldmVudF90eXBlJ1xuKTtcblxuLyoqIE51bWJlciBvZiBhcmd1bWVudHMgcGFzc2VkIHRvIHRoZSB3b3JrZmxvdyAqL1xuZXhwb3J0IGNvbnN0IFdvcmtmbG93QXJndW1lbnRzQ291bnQgPSBTZW1hbnRpY0NvbnZlbnRpb248bnVtYmVyPihcbiAgJ3dvcmtmbG93LmFyZ3VtZW50cy5jb3VudCdcbik7XG5cbi8qKiBUeXBlIG9mIHRoZSB3b3JrZmxvdyByZXN1bHQgKi9cbmV4cG9ydCBjb25zdCBXb3JrZmxvd1Jlc3VsdFR5cGUgPSBTZW1hbnRpY0NvbnZlbnRpb248c3RyaW5nPihcbiAgJ3dvcmtmbG93LnJlc3VsdC50eXBlJ1xuKTtcblxuLyoqIFdoZXRoZXIgdHJhY2UgY29udGV4dCB3YXMgcHJvcGFnYXRlZCB0byB0aGlzIHdvcmtmbG93IGV4ZWN1dGlvbiAqL1xuZXhwb3J0IGNvbnN0IFdvcmtmbG93VHJhY2VQcm9wYWdhdGVkID0gU2VtYW50aWNDb252ZW50aW9uPGJvb2xlYW4+KFxuICAnd29ya2Zsb3cudHJhY2UucHJvcGFnYXRlZCdcbik7XG5cbi8vIFF1aWNrSlMgVk0gZW5naW5lIGF0dHJpYnV0ZXNcblxuLyoqIFRoZSBWTSBlbmdpbmUgZXhlY3V0aW5nIHRoZSB3b3JrZmxvdyBmdW5jdGlvbiBmb3IgdGhpcyBpbnZvY2F0aW9uICovXG5leHBvcnQgY29uc3QgV29ya2Zsb3dWbSA9IFNlbWFudGljQ29udmVudGlvbjwnbm9kZScgfCAncXVpY2tqcyc+KCd3b3JrZmxvdy52bScpO1xuXG4vKiogT3V0Y29tZSBvZiBhIFF1aWNrSlMgVk0gd29ya2Zsb3cgaW52b2NhdGlvbiAqL1xuZXhwb3J0IGNvbnN0IFF1aWNrSlNPdXRjb21lID0gU2VtYW50aWNDb252ZW50aW9uPFxuICAnY29tcGxldGVkJyB8ICdzdXNwZW5kZWQnIHwgJ2ZhaWxlZCdcbj4oJ3dvcmtmbG93LnZtLm91dGNvbWUnKTtcblxuLyoqIFdoZXRoZXIgcHJlbG9hZGVkIGV2ZW50cyBmcm9tIGBldmVudHMuY3JlYXRlKCdydW5fc3RhcnRlZCcpYCB3ZXJlIHVzZWQgKi9cbmV4cG9ydCBjb25zdCBRdWlja0pTRXZlbnRzUHJlbG9hZGVkID0gU2VtYW50aWNDb252ZW50aW9uPGJvb2xlYW4+KFxuICAnd29ya2Zsb3cudm0uZXZlbnRzLnByZWxvYWRlZCdcbik7XG5cbi8qKiBUb3RhbCBudW1iZXIgb2YgZXZlbnRzIGZldGNoZWQgZnJvbSB0aGUgd29ybGQgZm9yIHRoaXMgaW52b2NhdGlvbiAqL1xuZXhwb3J0IGNvbnN0IFF1aWNrSlNFdmVudHNGZXRjaGVkQ291bnQgPSBTZW1hbnRpY0NvbnZlbnRpb248bnVtYmVyPihcbiAgJ3dvcmtmbG93LnZtLmV2ZW50cy5mZXRjaGVkX2NvdW50J1xuKTtcblxuLyoqIE51bWJlciBvZiBwYWdlcyByZXF1aXJlZCB0byBmZXRjaCBhbGwgZXZlbnRzICovXG5leHBvcnQgY29uc3QgUXVpY2tKU0V2ZW50c0ZldGNoZWRQYWdlcyA9IFNlbWFudGljQ29udmVudGlvbjxudW1iZXI+KFxuICAnd29ya2Zsb3cudm0uZXZlbnRzLmZldGNoZWRfcGFnZXMnXG4pO1xuXG4vKiogTnVtYmVyIG9mIHBlbmRpbmcgVk0gb3BlcmF0aW9ucyBjYXB0dXJlZCBhdCBzdXNwZW5zaW9uICovXG5leHBvcnQgY29uc3QgUXVpY2tKU1BlbmRpbmdPcHNDb3VudCA9IFNlbWFudGljQ29udmVudGlvbjxudW1iZXI+KFxuICAnd29ya2Zsb3cudm0ucGVuZGluZ19vcHNfY291bnQnXG4pO1xuXG4vKiogTnVtYmVyIG9mIHN0ZXBzIGV4ZWN1dGVkIGlubGluZSAobGl2ZS1WTSBjb250aW51YXRpb24pIHRoaXMgaW52b2NhdGlvbiAqL1xuZXhwb3J0IGNvbnN0IFF1aWNrSlNJbmxpbmVTdGVwcyA9IFNlbWFudGljQ29udmVudGlvbjxudW1iZXI+KFxuICAncXVpY2tqcy5pbmxpbmVfc3RlcHMnXG4pO1xuXG4vKiogQWN0aXZlIHRyYWNlLWNvcnJlbGF0aW9uIG1vZGUgZm9yIHRoaXMgaW52b2NhdGlvbiAobGlua2VkIG9yIGNvbnRpbnVvdXMpICovXG5leHBvcnQgY29uc3QgV29ya2Zsb3dUcmFjZU1vZGUgPSBTZW1hbnRpY0NvbnZlbnRpb248J2xpbmtlZCcgfCAnY29udGludW91cyc+KFxuICAnd29ya2Zsb3cudHJhY2UubW9kZSdcbik7XG5cbi8qKiBXaGV0aGVyIHRoaXMgd29ya2Zsb3cgaW52b2NhdGlvbiBpcyB1c2luZyB0aGUgdHVyYm8gZmlyc3QtZGVsaXZlcnkgcGF0aCAqL1xuZXhwb3J0IGNvbnN0IFdvcmtmbG93VHVyYm8gPSBTZW1hbnRpY0NvbnZlbnRpb248Ym9vbGVhbj4oJ3dvcmtmbG93LnR1cmJvJyk7XG5cbi8qKiBOYW1lIG9mIHRoZSBlcnJvciB0aGF0IGNhdXNlZCB3b3JrZmxvdyBmYWlsdXJlICovXG5leHBvcnQgY29uc3QgV29ya2Zsb3dFcnJvck5hbWUgPSBTZW1hbnRpY0NvbnZlbnRpb248c3RyaW5nPihcbiAgJ3dvcmtmbG93LmVycm9yLm5hbWUnXG4pO1xuXG4vKiogRXJyb3IgbWVzc2FnZSB3aGVuIHdvcmtmbG93IGZhaWxzICovXG5leHBvcnQgY29uc3QgV29ya2Zsb3dFcnJvck1lc3NhZ2UgPSBTZW1hbnRpY0NvbnZlbnRpb248c3RyaW5nPihcbiAgJ3dvcmtmbG93LmVycm9yLm1lc3NhZ2UnXG4pO1xuXG4vKiogRXJyb3IgY2xhc3NpZmljYXRpb24gY29kZSAoVVNFUl9FUlJPUiwgUlVOVElNRV9FUlJPUiwgZXRjLikgKi9cbmV4cG9ydCBjb25zdCBXb3JrZmxvd0Vycm9yQ29kZSA9IFNlbWFudGljQ29udmVudGlvbjxzdHJpbmc+KFxuICAnd29ya2Zsb3cuZXJyb3IuY29kZSdcbik7XG5cbi8qKiBOdW1iZXIgb2Ygc3RlcHMgY3JlYXRlZCBkdXJpbmcgd29ya2Zsb3cgZXhlY3V0aW9uICovXG5leHBvcnQgY29uc3QgV29ya2Zsb3dTdGVwc0NyZWF0ZWQgPSBTZW1hbnRpY0NvbnZlbnRpb248bnVtYmVyPihcbiAgJ3dvcmtmbG93LnN0ZXBzLmNyZWF0ZWQnXG4pO1xuXG4vKiogTnVtYmVyIG9mIGhvb2tzIGNyZWF0ZWQgZHVyaW5nIHdvcmtmbG93IGV4ZWN1dGlvbiAqL1xuZXhwb3J0IGNvbnN0IFdvcmtmbG93SG9va3NDcmVhdGVkID0gU2VtYW50aWNDb252ZW50aW9uPG51bWJlcj4oXG4gICd3b3JrZmxvdy5ob29rcy5jcmVhdGVkJ1xuKTtcblxuLyoqIE51bWJlciBvZiB3YWl0cyBjcmVhdGVkIGR1cmluZyB3b3JrZmxvdyBleGVjdXRpb24gKi9cbmV4cG9ydCBjb25zdCBXb3JrZmxvd1dhaXRzQ3JlYXRlZCA9IFNlbWFudGljQ29udmVudGlvbjxudW1iZXI+KFxuICAnd29ya2Zsb3cud2FpdHMuY3JlYXRlZCdcbik7XG5cbi8qKlxuICogTnVtYmVyIG9mIGlubGluZS1vd25lZCBzdGVwcyB0aGlzIGludm9jYXRpb24gcmUtZXhlY3V0ZWQgYmVjYXVzZSBpdCBpcyBhXG4gKiByZWRlbGl2ZXJ5IG9mIHRoZWlyIG93bmluZyBxdWV1ZSBtZXNzYWdlIChjcmFzaCByZWNvdmVyeSBmb3IgaW5saW5lXG4gKiBzdGVwcyDigJQgc2VlIHRoZSBpbmxpbmUgc3RlcCBvd25lcnNoaXAgY2hhbmdlbG9nLCB3b3JrZmxvdyMyNzgwKS5cbiAqL1xuZXhwb3J0IGNvbnN0IFdvcmtmbG93T3duZWRSZWNvdmVyeVN0ZXBzID0gU2VtYW50aWNDb252ZW50aW9uPG51bWJlcj4oXG4gICd3b3JrZmxvdy5pbmxpbmVfb3duZXJzaGlwLm93bmVkX3JlY292ZXJ5X3N0ZXBzJ1xuKTtcblxuLyoqXG4gKiBOdW1iZXIgb2YgcGVuZGluZyBzdGVwcyBmb3Igd2hpY2ggdGhpcyByZXBsYXkgc3VwcHJlc3NlZCB0aGUgaW1tZWRpYXRlXG4gKiByZXF1ZXVlIChhbm90aGVyIGludm9jYXRpb24gaW5saW5lLW93bnMgdGhlbSB1bmRlciBhIGxpdmUgbGVhc2UpIGFuZFxuICogZW5zdXJlZCBhIGRlbGF5ZWQgYmFja3N0b3Agd2FrZSBpbnN0ZWFkLlxuICovXG5leHBvcnQgY29uc3QgV29ya2Zsb3dCYWNrc3RvcFdha2VzQXJtZWQgPSBTZW1hbnRpY0NvbnZlbnRpb248bnVtYmVyPihcbiAgJ3dvcmtmbG93LmlubGluZV9vd25lcnNoaXAuYmFja3N0b3Bfd2FrZXNfYXJtZWQnXG4pO1xuXG4vLyBSb3V0ZSBhdHRyaWJ1dGVzXG5cbi8qKiBUaGUgd29ya2Zsb3cgcnVudGltZSByb3V0ZSBiZWluZyBoYW5kbGVkICovXG5leHBvcnQgY29uc3QgV29ya2Zsb3dSb3V0ZVR5cGUgPSBTZW1hbnRpY0NvbnZlbnRpb248J2Zsb3cnPihcbiAgJ3dvcmtmbG93LnJvdXRlLnR5cGUnXG4pO1xuXG4vKiogV2hldGhlciB0aGlzIHJvdXRlIGludm9jYXRpb24gcmV1c2VkIGFuIGFscmVhZHktY3JlYXRlZCByZXF1ZXN0IGhhbmRsZXIgKi9cbmV4cG9ydCBjb25zdCBXb3JrZmxvd1JvdXRlSGFuZGxlckNhY2hlZCA9IFNlbWFudGljQ29udmVudGlvbjxib29sZWFuPihcbiAgJ3dvcmtmbG93LnJvdXRlLmhhbmRsZXJfY2FjaGVkJ1xuKTtcblxuLyoqIE51bWJlciBvZiB0aW1lcyB0aGlzIGluLW1lbW9yeSByb3V0ZSBoYW5kbGVyIGhhcyBiZWVuIGludm9rZWQgKi9cbmV4cG9ydCBjb25zdCBXb3JrZmxvd1JvdXRlSW52b2NhdGlvbkNvdW50ID0gU2VtYW50aWNDb252ZW50aW9uPG51bWJlcj4oXG4gICd3b3JrZmxvdy5yb3V0ZS5pbnZvY2F0aW9uX2NvdW50J1xuKTtcblxuLyoqIFRpbWUgc2luY2UgdGhpcyByb3V0ZSBlbnRyeXBvaW50IHdhcyBjb25zdHJ1Y3RlZCwgaW4gbWlsbGlzZWNvbmRzICovXG5leHBvcnQgY29uc3QgV29ya2Zsb3dSb3V0ZUVudHJ5cG9pbnRBZ2VNcyA9IFNlbWFudGljQ29udmVudGlvbjxudW1iZXI+KFxuICAnd29ya2Zsb3cucm91dGUuZW50cnlwb2ludF9hZ2VfbXMnXG4pO1xuXG4vKiogVGltZSBzcGVudCBldmFsdWF0aW5nIHRoZSBnZW5lcmF0ZWQgcm91dGUgbW9kdWxlIGJvZHkgYmVmb3JlIGNyZWF0aW5nIHRoZSBlbnRyeXBvaW50ICovXG5leHBvcnQgY29uc3QgV29ya2Zsb3dSb3V0ZU1vZHVsZUJvZHlJbml0TXMgPSBTZW1hbnRpY0NvbnZlbnRpb248bnVtYmVyPihcbiAgJ3dvcmtmbG93LnJvdXRlLm1vZHVsZV9ib2R5X2luaXRfbXMnXG4pO1xuXG4vKipcbiAqIENvbXB1dGUgaW5zdGFuY2UgaGFuZGxpbmcgdGhpcyByb3V0ZSDigJQgdGhlIHN5bnRoZXNpemVkIGBDT01QVVRFX0lOU1RBTkNFX0lEYC5cbiAqIFVzZXMgT1RFTCBgZmFhcy5pbnN0YW5jZWAgKGV4ZWN1dGlvbi1lbnZpcm9ubWVudCBpZCwgcmV1c2VkIGFjcm9zc1xuICogaW52b2NhdGlvbnMgdG8gdGhlIHNhbWUgZnVuY3Rpb24pOlxuICogaHR0cHM6Ly9vcGVudGVsZW1ldHJ5LmlvL2RvY3Mvc3BlY3Mvc2VtY29udi9hdHRyaWJ1dGVzLXJlZ2lzdHJ5L2ZhYXMvXG4gKi9cbmV4cG9ydCBjb25zdCBGYWFzSW5zdGFuY2UgPSBTZW1hbnRpY0NvbnZlbnRpb248c3RyaW5nPignZmFhcy5pbnN0YW5jZScpO1xuXG4vLyBTdGVwIGF0dHJpYnV0ZXNcblxuLyoqIE5hbWUgb2YgdGhlIHN0ZXAgZnVuY3Rpb24gYmVpbmcgZXhlY3V0ZWQgKi9cbmV4cG9ydCBjb25zdCBTdGVwTmFtZSA9IFNlbWFudGljQ29udmVudGlvbjxzdHJpbmc+KCdzdGVwLm5hbWUnKTtcblxuLyoqIFVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGUgc3RlcCBpbnN0YW5jZSAqL1xuZXhwb3J0IGNvbnN0IFN0ZXBJZCA9IFNlbWFudGljQ29udmVudGlvbjxzdHJpbmc+KCdzdGVwLmlkJyk7XG5cbi8qKiBDdXJyZW50IGF0dGVtcHQgbnVtYmVyIGZvciBzdGVwIGV4ZWN1dGlvbiAoc3RhcnRzIGF0IDEpICovXG5leHBvcnQgY29uc3QgU3RlcEF0dGVtcHQgPSBTZW1hbnRpY0NvbnZlbnRpb248bnVtYmVyPignc3RlcC5hdHRlbXB0Jyk7XG5cbi8qKiBDdXJyZW50IHN0YXR1cyBvZiB0aGUgc3RlcCAqL1xuZXhwb3J0IGNvbnN0IFN0ZXBTdGF0dXMgPSBTZW1hbnRpY0NvbnZlbnRpb248U3RlcFsnc3RhdHVzJ10+KCdzdGVwLnN0YXR1cycpO1xuXG4vKiogTWF4aW11bSBudW1iZXIgb2YgcmV0cmllcyBhbGxvd2VkIGZvciB0aGlzIHN0ZXAgKi9cbmV4cG9ydCBjb25zdCBTdGVwTWF4UmV0cmllcyA9IFNlbWFudGljQ29udmVudGlvbjxudW1iZXI+KCdzdGVwLm1heF9yZXRyaWVzJyk7XG5cbi8qKiBXaGV0aGVyIHRyYWNlIGNvbnRleHQgd2FzIHByb3BhZ2F0ZWQgdG8gdGhpcyBzdGVwIGV4ZWN1dGlvbiAqL1xuZXhwb3J0IGNvbnN0IFN0ZXBUcmFjZVByb3BhZ2F0ZWQgPSBTZW1hbnRpY0NvbnZlbnRpb248Ym9vbGVhbj4oXG4gICdzdGVwLnRyYWNlLnByb3BhZ2F0ZWQnXG4pO1xuXG4vKipcbiAqIENsaWVudC1tZWFzdXJlZCB0aW1lLXRvLWZpcnN0LXN0ZXAgbGF0ZW5jeSBpbiBtaWxsaXNlY29uZHM6IHJ1biBjcmVhdGlvbiDihpJcbiAqIHRoaXMgc3RlcCdzIGJvZHkgYmVnaW5uaW5nIHRvIGV4ZWN1dGUsIG1pbnVzIHByZS1zdGVwIGhvb2stY3JlYXRpb24gdGltZS5cbiAqIE9ubHkgcHJlc2VudCBvbiB0aGUgcnVuJ3MgZmlyc3Qgc3RlcCBleGVjdXRpb24gd2hlbiBpdCBxdWFsaWZpZWQgZm9yXG4gKiBtZWFzdXJlbWVudCAoc2VlIHJ1bnRpbWUvc3RlcC1sYXRlbmN5LnRzKS5cbiAqL1xuZXhwb3J0IGNvbnN0IFN0ZXBUdGZzTXMgPSBTZW1hbnRpY0NvbnZlbnRpb248bnVtYmVyPignc3RlcC50dGZzX21zJyk7XG5cbi8qKlxuICogQ2xpZW50LW1lYXN1cmVkIHN0ZXAtdG8tc3RlcCBvdmVyaGVhZCBpbiBtaWxsaXNlY29uZHM6IHRoZSBwcmV2aW91cyBzdGVwJ3NcbiAqIHRlcm1pbmFsIGV2ZW50IOKGkiB0aGlzIHN0ZXAncyBib2R5IGJlZ2lubmluZyB0byBleGVjdXRlLiBPbmx5IHByZXNlbnQgd2hlblxuICogdGhlIHR3byBzdGVwcyByYW4gYmFjay10by1iYWNrLlxuICovXG5leHBvcnQgY29uc3QgU3RlcFN0c29NcyA9IFNlbWFudGljQ29udmVudGlvbjxudW1iZXI+KCdzdGVwLnN0c29fbXMnKTtcblxuLyoqXG4gKiBDbGllbnQtbWVhc3VyZWQgcnVuX3N0YXJ0ZWQtdG8tZmlyc3Qtc3RlcCBsYXRlbmN5IGluIG1pbGxpc2Vjb25kczogdGhlXG4gKiBgcnVuX3N0YXJ0ZWRgIHJlc3BvbnNlIGxhbmRpbmcgKG9yLCB1bmRlciB0dXJibywgdGhlIGxvY2FsIHJ1biBzeW50aGVzaXNcbiAqIGluc3RhbnQpIOKGkiB0aGlzIHN0ZXAncyBzdGFydCBQT1NUIGJlaW5nIGlzc3VlZC4gQSBzdWItd2luZG93IG9mIHR0ZnMgdGhhdFxuICogaXNvbGF0ZXMgcmVwbGF5IG92ZXJoZWFkIGZyb20gdGhlIHJ1bi1jcmVhdGlvbiBxdWV1ZSBob3AuIE9ubHkgcHJlc2VudCBvblxuICogdGhlIHJ1bidzIGZpcnN0IHN0ZXAgZXhlY3V0aW9uIHdoZW4gaXQgcXVhbGlmaWVkIGZvciBtZWFzdXJlbWVudCAoc2VlXG4gKiBydW50aW1lL3N0ZXAtbGF0ZW5jeS50cykuXG4gKi9cbmV4cG9ydCBjb25zdCBTdGVwUnNmc01zID0gU2VtYW50aWNDb252ZW50aW9uPG51bWJlcj4oJ3N0ZXAucnNmc19tcycpO1xuXG4vKipcbiAqIENsaWVudC1tZWFzdXJlZCBzeW5jaHJvbm91cyB3b3JrZmxvdy1mdW5jdGlvbiByZXBsYXkgZHVyYXRpb24gaW5cbiAqIG1pbGxpc2Vjb25kcywgZXhjbHVkaW5nIGF3YWl0ZWQgbmV0d29yayBJL08sIG9mIG9ubHkgdGhlIEZJTkFMIHJlcGxheSBwYXNzXG4gKiB3aXRoaW4gdGhlIHJzZnMgd2luZG93IOKAlCB0aGUgcGFzcyB0aGF0IHJlYWNoZWQgYW5kIHNjaGVkdWxlZCB0aGUgZmlyc3RcbiAqIHN0ZXAuIE5vdCBhY2N1bXVsYXRlZCBhY3Jvc3MgZWFybGllciBwcmUtZmlyc3Qtc3RlcCBwYXNzZXMgKGUuZy4gYVxuICogd29ya2Zsb3ctYm9keSBgc2V0QXR0cmlidXRlcygpYCBkZXRvdXIgcmVwbGF5cyBtb3JlIHRoYW4gb25jZSwgYW5kIGFcbiAqIHJlZGVsaXZlcnkgb21pdHMgZWFybGllciBpbnZvY2F0aW9ucycgd29yayBlbnRpcmVseSksIHNvIHRoaXMgbXVzdCBub3QgYmVcbiAqIHJlYWQgYXMgXCJ0aGUgcmVwbGF5IHBvcnRpb24gb2YgcnNmc1wiIOKAlCBzdGVwLnJzZnNfbXMgY292ZXJzIHRoZSB3aG9sZVxuICogd2luZG93LiBPbmx5IHByZXNlbnQgYWxvbmdzaWRlIHN0ZXAucnNmc19tcyBhbmQgb25seSBmb3IgdGhlIHJ1bidzIGZpcnN0XG4gKiBzdGVwIChzZWUgcnVudGltZS9zdGVwLWxhdGVuY3kudHMpLlxuICovXG5leHBvcnQgY29uc3QgU3RlcEZpbmFsU2NoZWR1bGluZ1JlcGxheU1zID0gU2VtYW50aWNDb252ZW50aW9uPG51bWJlcj4oXG4gICdzdGVwLmZpbmFsX3NjaGVkdWxpbmdfcmVwbGF5X21zJ1xuKTtcblxuLyoqXG4gKiBSdW50aW1lIHN0YXJ0dXAtbGF0ZW5jeSBvcHRpbWl6YXRpb25zIGFjdGl2ZSBmb3IgdGhlIHR0ZnMvc3RzbyBtZWFzdXJlbWVudFxuICogKGUuZy4gJ3R1cmJvJywgJ2xhenlTdGVwU3RhcnQnLCAnb3B0aW1pc3RpY1N0YXJ0JykuXG4gKi9cbmV4cG9ydCBjb25zdCBTdGVwTGF0ZW5jeU9wdGltaXphdGlvbnMgPSBTZW1hbnRpY0NvbnZlbnRpb248c3RyaW5nW10+KFxuICAnc3RlcC5sYXRlbmN5X29wdGltaXphdGlvbnMnXG4pO1xuXG4vKiogV2hldGhlciB0aGUgc3RlcCB3YXMgc2tpcHBlZCBkdXJpbmcgZXhlY3V0aW9uICovXG5leHBvcnQgY29uc3QgU3RlcFNraXBwZWQgPSBTZW1hbnRpY0NvbnZlbnRpb248Ym9vbGVhbj4oJ3N0ZXAuc2tpcHBlZCcpO1xuXG4vKiogUmVhc29uIHdoeSB0aGUgc3RlcCB3YXMgc2tpcHBlZCAqL1xuZXhwb3J0IGNvbnN0IFN0ZXBTa2lwUmVhc29uID1cbiAgU2VtYW50aWNDb252ZW50aW9uPFN0ZXBbJ3N0YXR1cyddPignc3RlcC5za2lwX3JlYXNvbicpO1xuXG4vKiogTnVtYmVyIG9mIGFyZ3VtZW50cyBwYXNzZWQgdG8gdGhlIHN0ZXAgZnVuY3Rpb24gKi9cbmV4cG9ydCBjb25zdCBTdGVwQXJndW1lbnRzQ291bnQgPSBTZW1hbnRpY0NvbnZlbnRpb248bnVtYmVyPihcbiAgJ3N0ZXAuYXJndW1lbnRzLmNvdW50J1xuKTtcblxuLyoqIFR5cGUgb2YgdGhlIHN0ZXAgcmVzdWx0ICovXG5leHBvcnQgY29uc3QgU3RlcFJlc3VsdFR5cGUgPSBTZW1hbnRpY0NvbnZlbnRpb248c3RyaW5nPignc3RlcC5yZXN1bHQudHlwZScpO1xuXG4vKiogTmFtZSBvZiB0aGUgZXJyb3IgdGhhdCBjYXVzZWQgc3RlcCBmYWlsdXJlICovXG5leHBvcnQgY29uc3QgU3RlcEVycm9yTmFtZSA9IFNlbWFudGljQ29udmVudGlvbjxzdHJpbmc+KCdzdGVwLmVycm9yLm5hbWUnKTtcblxuLyoqIEVycm9yIG1lc3NhZ2Ugd2hlbiBzdGVwIGZhaWxzICovXG5leHBvcnQgY29uc3QgU3RlcEVycm9yTWVzc2FnZSA9XG4gIFNlbWFudGljQ29udmVudGlvbjxzdHJpbmc+KCdzdGVwLmVycm9yLm1lc3NhZ2UnKTtcblxuLyoqIFdoZXRoZXIgdGhlIHN0ZXAgZmFpbGVkIHdpdGggYSBmYXRhbCBlcnJvciAobm8gcmV0cmllcykgKi9cbmV4cG9ydCBjb25zdCBTdGVwRmF0YWxFcnJvciA9IFNlbWFudGljQ29udmVudGlvbjxib29sZWFuPignc3RlcC5mYXRhbF9lcnJvcicpO1xuXG4vKiogV2hldGhlciBhbGwgcmV0cnkgYXR0ZW1wdHMgaGF2ZSBiZWVuIGV4aGF1c3RlZCAqL1xuZXhwb3J0IGNvbnN0IFN0ZXBSZXRyeUV4aGF1c3RlZCA9IFNlbWFudGljQ29udmVudGlvbjxib29sZWFuPihcbiAgJ3N0ZXAucmV0cnkuZXhoYXVzdGVkJ1xuKTtcblxuLyoqIE51bWJlciBvZiBzZWNvbmRzIHRvIHdhaXQgYmVmb3JlIG5leHQgcmV0cnkgYXR0ZW1wdCAqL1xuZXhwb3J0IGNvbnN0IFN0ZXBSZXRyeVRpbWVvdXRTZWNvbmRzID0gU2VtYW50aWNDb252ZW50aW9uPG51bWJlcj4oXG4gICdzdGVwLnJldHJ5LnRpbWVvdXRfc2Vjb25kcydcbik7XG5cbi8qKiBXaGV0aGVyIHRoZSBzdGVwIHdpbGwgYmUgcmV0cmllZCBhZnRlciB0aGlzIGZhaWx1cmUgKi9cbmV4cG9ydCBjb25zdCBTdGVwUmV0cnlXaWxsUmV0cnkgPSBTZW1hbnRpY0NvbnZlbnRpb248Ym9vbGVhbj4oXG4gICdzdGVwLnJldHJ5LndpbGxfcmV0cnknXG4pO1xuXG4vLyBRdWV1ZS9NZXNzYWdpbmcgYXR0cmlidXRlcyAtIFN0YW5kYXJkIE9URUwgbWVzc2FnaW5nIGNvbnZlbnRpb25zXG4vLyBTZWU6IGh0dHBzOi8vb3BlbnRlbGVtZXRyeS5pby9kb2NzL3NwZWNzL3NlbWNvbnYvbWVzc2FnaW5nL21lc3NhZ2luZy1zcGFucy9cblxuLyoqIE1lc3NhZ2luZyBzeXN0ZW0gaWRlbnRpZmllciAoc3RhbmRhcmQgT1RFTDogbWVzc2FnaW5nLnN5c3RlbSkgKi9cbmV4cG9ydCBjb25zdCBNZXNzYWdpbmdTeXN0ZW0gPSBTZW1hbnRpY0NvbnZlbnRpb248c3RyaW5nPignbWVzc2FnaW5nLnN5c3RlbScpO1xuXG4vKiogRGVzdGluYXRpb24gbmFtZS9xdWV1ZSBuYW1lIChzdGFuZGFyZCBPVEVMOiBtZXNzYWdpbmcuZGVzdGluYXRpb24ubmFtZSkgKi9cbmV4cG9ydCBjb25zdCBNZXNzYWdpbmdEZXN0aW5hdGlvbk5hbWUgPSBTZW1hbnRpY0NvbnZlbnRpb248c3RyaW5nPihcbiAgJ21lc3NhZ2luZy5kZXN0aW5hdGlvbi5uYW1lJ1xuKTtcblxuLyoqIFRoZSBtZXNzYWdlIGlkIGJlaW5nIGhhbmRsZWQgKHN0YW5kYXJkIE9URUw6IG1lc3NhZ2luZy5tZXNzYWdlLmlkKSAqL1xuZXhwb3J0IGNvbnN0IE1lc3NhZ2luZ01lc3NhZ2VJZCA9IFNlbWFudGljQ29udmVudGlvbjxNZXNzYWdlSWQ+KFxuICAnbWVzc2FnaW5nLm1lc3NhZ2UuaWQnXG4pO1xuXG4vKiogT3BlcmF0aW9uIHR5cGUgKHN0YW5kYXJkIE9URUw6IG1lc3NhZ2luZy5vcGVyYXRpb24udHlwZSkgKi9cbmV4cG9ydCBjb25zdCBNZXNzYWdpbmdPcGVyYXRpb25UeXBlID0gU2VtYW50aWNDb252ZW50aW9uPFxuICAncHVibGlzaCcgfCAncmVjZWl2ZScgfCAncHJvY2Vzcydcbj4oJ21lc3NhZ2luZy5vcGVyYXRpb24udHlwZScpO1xuXG4vKiogVGltZSB0YWtlbiB0byBlbnF1ZXVlIHRoZSBtZXNzYWdlIGluIG1pbGxpc2Vjb25kcyAod29ya2Zsb3ctc3BlY2lmaWMpICovXG5leHBvcnQgY29uc3QgUXVldWVPdmVyaGVhZE1zID0gU2VtYW50aWNDb252ZW50aW9uPG51bWJlcj4oXG4gICd3b3JrZmxvdy5xdWV1ZS5vdmVyaGVhZF9tcydcbik7XG5cbi8vIERlcGxveW1lbnQgYXR0cmlidXRlc1xuXG4vKiogVW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoZSBkZXBsb3ltZW50IGVudmlyb25tZW50ICovXG5leHBvcnQgY29uc3QgRGVwbG95bWVudElkID0gU2VtYW50aWNDb252ZW50aW9uPHN0cmluZz4oJ2RlcGxveW1lbnQuaWQnKTtcblxuLyoqIFRoZSBkZXBsb3ltZW50IGEgcnVuIGlzIHBpbm5lZCB0bywgc2V0IG9ubHkgb24gYSBtaXNyb3V0ZWQgZGVsaXZlcnkuICovXG5leHBvcnQgY29uc3QgV29ya2Zsb3dSdW5QaW5uZWREZXBsb3ltZW50SWQgPSBTZW1hbnRpY0NvbnZlbnRpb248c3RyaW5nPihcbiAgJ3dvcmtmbG93LmRlcGxveW1lbnQucGlubmVkX2lkJ1xuKTtcblxuLyoqIFJlLXJvdXRlIGF0dGVtcHRzIGZvciB0aGlzIG1pc3JvdXRlZCBkZWxpdmVyeSwgaW5jbHVkaW5nIHRoaXMgb25lLiAqL1xuZXhwb3J0IGNvbnN0IFdvcmtmbG93RGVwbG95bWVudE1pc21hdGNoUmV0cnlDb3VudCA9IFNlbWFudGljQ29udmVudGlvbjxudW1iZXI+KFxuICAnd29ya2Zsb3cuZGVwbG95bWVudF9taXNtYXRjaC5yZXRyeV9jb3VudCdcbik7XG5cbi8qKiBXaGV0aGVyIHRoZSBtaXNyb3V0ZWQgZGVsaXZlcnkgd2FzIHJlLXJvdXRlZCBpbnN0ZWFkIG9mIGZhaWxpbmcgdGhlIHJ1bi4gKi9cbmV4cG9ydCBjb25zdCBXb3JrZmxvd0RlcGxveW1lbnRNaXNtYXRjaFJlY292ZXJlZCA9IFNlbWFudGljQ29udmVudGlvbjxib29sZWFuPihcbiAgJ3dvcmtmbG93LmRlcGxveW1lbnRfbWlzbWF0Y2gucmVjb3ZlcmVkJ1xuKTtcblxuLy8gSG9vayBhdHRyaWJ1dGVzXG5cbi8qKiBUb2tlbiBpZGVudGlmeWluZyBhIHNwZWNpZmljIGhvb2sgKi9cbmV4cG9ydCBjb25zdCBIb29rVG9rZW4gPSBTZW1hbnRpY0NvbnZlbnRpb248c3RyaW5nPignd29ya2Zsb3cuaG9vay50b2tlbicpO1xuXG4vKiogVW5pcXVlIGlkZW50aWZpZXIgZm9yIGEgaG9vayBpbnN0YW5jZSAqL1xuZXhwb3J0IGNvbnN0IEhvb2tJZCA9IFNlbWFudGljQ29udmVudGlvbjxzdHJpbmc+KCd3b3JrZmxvdy5ob29rLmlkJyk7XG5cbi8qKiBXaGV0aGVyIGEgaG9vayB3YXMgZm91bmQgYnkgaXRzIHRva2VuICovXG5leHBvcnQgY29uc3QgSG9va0ZvdW5kID0gU2VtYW50aWNDb252ZW50aW9uPGJvb2xlYW4+KCd3b3JrZmxvdy5ob29rLmZvdW5kJyk7XG5cbi8qKlxuICogUHJvZHVjZXItc2lkZSBzaWduYWwgKG9uIHRoZSBgaG9vay5yZXN1bWVgIHNwYW4pIHRoYXQgdGhlIGRpcmVjdFxuICogYGhvb2tfcmVjZWl2ZWRgIHdyaXRlIGZhaWxlZCB0cmFuc2llbnRseSBidXQgdGhlIHF1ZXVlIGRpc3BhdGNoIHN1Y2NlZWRlZCwgc29cbiAqIHRoZSByZXN1bWUgaXMgcmVjb3ZlcmVkIHZpYSB0aGUgY29uc3VtZXIncyByZS1lbnN1cmUuIENvcnJlc3BvbmRzIHRvXG4gKiBgUmVzdW1lZEhvb2sucmVzaWxpZW50UmVzdW1lID09PSB0cnVlYC5cbiAqL1xuZXhwb3J0IGNvbnN0IEhvb2tSZXNpbGllbnRSZXN1bWUgPSBTZW1hbnRpY0NvbnZlbnRpb248Ym9vbGVhbj4oXG4gICd3b3JrZmxvdy5ob29rLnJlc2lsaWVudF9yZXN1bWUnXG4pO1xuXG4vKipcbiAqIENvbnN1bWVyLXNpZGUgc2lnbmFsIChvbiB0aGUgd29ya2Zsb3cgZXhlY3V0aW9uIHNwYW4pIHRoYXQgdGhpcyByZXBsYXlcbiAqIG1hdGVyaWFsaXplZCB0aGUgYGhvb2tfcmVjZWl2ZWRgIGV2ZW50IGZyb20gdGhlIHF1ZXVlIG1lc3NhZ2UncyBgaG9va0lucHV0YFxuICogYmVjYXVzZSB0aGUgcHJvZHVjZXIncyBkaXJlY3Qgd3JpdGUgaGFkIG5vdCBsYW5kZWQg4oCUIHRoZSBjb21wbGV0aW9uIG9mIHRoZVxuICogcmVjb3ZlcnkgcGF0aCB7QGxpbmsgSG9va1Jlc2lsaWVudFJlc3VtZX0gYmVnYW4uXG4gKlxuICogTGVnYWN5IC8gbm9uLWF0b21pYyByZS1lbnN1cmUgc2lnbmFsIG9ubHkuIEF0b21pYyBsYXp5IHJlc3VtZXNcbiAqIChyZXN1bWVJZCArIGRpZ2VzdCkgZ28gdGhyb3VnaCB0aGUgaG9pc3RlZCBwcmVsb2FkIHdyaXRlIGluc3RlYWQsIHdob3NlXG4gKiByZXNwb25zZSBjYW5ub3QgdGVsbCB3aGV0aGVyIHRoZSBwcm9kdWNlciBvciB0aGUgY29uc3VtZXIgd29uIHRoZVxuICogYChydW5JZCwgcmVzdW1lSWQpYCBjbGFpbSDigJQgc28gdGhpcyBhdHRyaWJ1dGUgaXMgZGVsaWJlcmF0ZWx5IE5PVCBlbWl0dGVkXG4gKiBmb3IgdGhlbSAoZW1pdHRpbmcgYHRydWVgIHVuY29uZGl0aW9uYWxseSB3b3VsZCBjb3VudCBldmVyeSBwcm9kdWNlci13b25cbiAqIHJlc3VtZSBhcyBhIHJlY292ZXJ5KS4gVGhlIHByb2R1Y2VyLWJlZ2luICh7QGxpbmsgSG9va1Jlc2lsaWVudFJlc3VtZX0pIC9cbiAqIGNvbnN1bWVyLW1hdGVyaWFsaXplZCBwYWlyaW5nIGlzIHRoZXJlZm9yZSBubyBsb25nZXIgY29tcGxldGUgZm9yIGF0b21pY1xuICogbGF6eSByZXN1bXB0aW9uczsgdXNlIHtAbGluayBIb29rUmVzdW1lU2V0dXBTb3VyY2V9IHRvIG9ic2VydmUgdGhhdCBwYXRoLlxuICovXG5leHBvcnQgY29uc3QgSG9va1Jlc2lsaWVudFJlc3VtZU1hdGVyaWFsaXplZCA9IFNlbWFudGljQ29udmVudGlvbjxib29sZWFuPihcbiAgJ3dvcmtmbG93Lmhvb2sucmVzaWxpZW50X3Jlc3VtZV9tYXRlcmlhbGl6ZWQnXG4pO1xuXG4vKipcbiAqIENvbnN1bWVyLXNpZGUgc2lnbmFsIChvbiB0aGUgd29ya2Zsb3cgZXhlY3V0aW9uIHNwYW4pIG9mIGhvdyBhIGxhenkgaG9va1xuICogcmVzdW1lIGluaXRpYWxpemVkIGl0cyByZXBsYXkgc3RhdGU6XG4gKlxuICogLSBgaG9va19yZWNlaXZlZF9zdHJlYW1gIOKAlCB0aGUgaG9pc3RlZCBgaG9va19yZWNlaXZlZGAgd3JpdGUgcmV0dXJuZWQgYVxuICogICB1c2FibGUgcmVwbGF5IHByZWxvYWQgKHJ1biArIGNvbXBsZXRlIGV2ZW50IGxvZyksIHNvIHRoZSBpbnZvY2F0aW9uXG4gKiAgIHNraXBwZWQgYm90aCB0aGUgYHJ1bl9zdGFydGVkYCB3cml0ZSBhbmQgdGhlIGluaXRpYWwgYGV2ZW50cy5saXN0YC5cbiAqIC0gYGhvb2tfcmVjZWl2ZWRfZmFsbGJhY2tgIOKAlCB0aGUgaG9pc3RlZCB3cml0ZSBzdWNjZWVkZWQgYnV0IHJldHVybmVkIG5vXG4gKiAgIHVzYWJsZSBwcmVsb2FkIChhIENCT1IgcmVzcG9uc2UgZnJvbSBhbiBvbGRlciBzZXJ2ZXIsIGEgV29ybGQgdGhhdFxuICogICBpZ25vcmVkIHRoZSBvcHQtaW4sIGEgYm91bmRlZCBgaGFzTW9yZWAgcGFnZSwgb3IgYSBwcmVsb2FkIHRoYXQgZmFpbGVkXG4gKiAgIHZhbGlkYXRpb24pOyB0aGUgaW52b2NhdGlvbiBmZWxsIGJhY2sgdG8gdGhlIGBydW5fc3RhcnRlZGAgc2V0dXAgd2l0aG91dFxuICogICByZS1wb3N0aW5nIHRoZSBob29rLlxuICpcbiAqIEFic2VudCBvbiBsZWdhY3kgaG9vayBkZWxpdmVyaWVzIChubyByZXN1bWVJZC9kaWdlc3QpIGFuZCBvbiBldmVyeSBvdGhlclxuICogZGVsaXZlcnkga2luZCwgd2hpY2ggdGFrZSB0aGUgYHJ1bl9zdGFydGVkYCBzZXR1cCB1bmNvbmRpdGlvbmFsbHkuXG4gKlxuICogVGhpcyBpcyBhIGxhdGVuY3kvc2V0dXAtcGF0aCBzaWduYWw6IGl0IHNheXMgd2hpY2ggcmVxdWVzdHMgaW5pdGlhbGl6ZWRcbiAqIHRoZSBpbnZvY2F0aW9uLCBOT1QgdGhhdCB0aGlzIGNvbnN1bWVyIGNyZWF0ZWQgdGhlIGBob29rX3JlY2VpdmVkYCBldmVudFxuICogKHRoZSBob2lzdGVkIHdyaXRlIG1heSBlcXVhbGx5IGhhdmUgY29udmVyZ2VkIG9uIHRoZSBwcm9kdWNlcidzIOKAlCBjbGFpbVxuICogb3duZXJzaGlwIGlzIG5vdCBvYnNlcnZhYmxlIGNsaWVudC1zaWRlOyBjZi5cbiAqIHtAbGluayBIb29rUmVzaWxpZW50UmVzdW1lTWF0ZXJpYWxpemVkfSkuXG4gKi9cbmV4cG9ydCBjb25zdCBIb29rUmVzdW1lU2V0dXBTb3VyY2UgPSBTZW1hbnRpY0NvbnZlbnRpb248c3RyaW5nPihcbiAgJ3dvcmtmbG93LnJlc3VtZV9zZXR1cF9zb3VyY2UnXG4pO1xuXG4vLyBXZWJob29rIGF0dHJpYnV0ZXNcblxuLyoqIE51bWJlciBvZiB3ZWJob29rIGhhbmRsZXJzIHRyaWdnZXJlZCAqL1xuZXhwb3J0IGNvbnN0IFdlYmhvb2tIYW5kbGVyc1RyaWdnZXJlZCA9IFNlbWFudGljQ29udmVudGlvbjxudW1iZXI+KFxuICAnd2ViaG9vay5oYW5kbGVycy50cmlnZ2VyZWQnXG4pO1xuXG4vLyBTdXNwZW5zaW9uIGF0dHJpYnV0ZXNcblxuZXhwb3J0IGNvbnN0IFdvcmtmbG93U3VzcGVuc2lvblN0YXRlID0gU2VtYW50aWNDb252ZW50aW9uPCdzdXNwZW5kZWQnPihcbiAgJ3dvcmtmbG93LnN1c3BlbnNpb24uc3RhdGUnXG4pO1xuZXhwb3J0IGNvbnN0IFdvcmtmbG93U3VzcGVuc2lvbkhvb2tDb3VudCA9IFNlbWFudGljQ29udmVudGlvbjxudW1iZXI+KFxuICAnd29ya2Zsb3cuc3VzcGVuc2lvbi5ob29rX2NvdW50J1xuKTtcbmV4cG9ydCBjb25zdCBXb3JrZmxvd1N1c3BlbnNpb25TdGVwQ291bnQgPSBTZW1hbnRpY0NvbnZlbnRpb248bnVtYmVyPihcbiAgJ3dvcmtmbG93LnN1c3BlbnNpb24uc3RlcF9jb3VudCdcbik7XG5leHBvcnQgY29uc3QgV29ya2Zsb3dTdXNwZW5zaW9uV2FpdENvdW50ID0gU2VtYW50aWNDb252ZW50aW9uPG51bWJlcj4oXG4gICd3b3JrZmxvdy5zdXNwZW5zaW9uLndhaXRfY291bnQnXG4pO1xuXG4vLyBXb3JsZC9TdG9yYWdlIGF0dHJpYnV0ZXMgLSBTdGFuZGFyZCBPVEVMIEhUVFAgY29udmVudGlvbnNcbi8vIFNlZTogaHR0cHM6Ly9vcGVudGVsZW1ldHJ5LmlvL2RvY3Mvc3BlY3Mvc2VtY29udi9odHRwL2h0dHAtc3BhbnMvXG5cbi8qKiBIVFRQIHJlcXVlc3QgbWV0aG9kIChzdGFuZGFyZCBPVEVMOiBodHRwLnJlcXVlc3QubWV0aG9kKSAqL1xuZXhwb3J0IGNvbnN0IEh0dHBSZXF1ZXN0TWV0aG9kID0gU2VtYW50aWNDb252ZW50aW9uPHN0cmluZz4oXG4gICdodHRwLnJlcXVlc3QubWV0aG9kJ1xuKTtcblxuLyoqIFJvdXRlIHBhdHRlcm4gZm9yIHRoZSByZXF1ZXN0IChzdGFuZGFyZCBPVEVMOiBodHRwLnJvdXRlKSAqL1xuZXhwb3J0IGNvbnN0IEh0dHBSb3V0ZSA9IFNlbWFudGljQ29udmVudGlvbjxzdHJpbmc+KCdodHRwLnJvdXRlJyk7XG5cbi8qKiBGdWxsIFVSTCBvZiB0aGUgcmVxdWVzdCAoc3RhbmRhcmQgT1RFTDogdXJsLmZ1bGwpICovXG5leHBvcnQgY29uc3QgVXJsRnVsbCA9IFNlbWFudGljQ29udmVudGlvbjxzdHJpbmc+KCd1cmwuZnVsbCcpO1xuXG4vKiogU2VydmVyIGhvc3RuYW1lIChzdGFuZGFyZCBPVEVMOiBzZXJ2ZXIuYWRkcmVzcykgKi9cbmV4cG9ydCBjb25zdCBTZXJ2ZXJBZGRyZXNzID0gU2VtYW50aWNDb252ZW50aW9uPHN0cmluZz4oJ3NlcnZlci5hZGRyZXNzJyk7XG5cbi8qKiBTZXJ2ZXIgcG9ydCAoc3RhbmRhcmQgT1RFTDogc2VydmVyLnBvcnQpICovXG5leHBvcnQgY29uc3QgU2VydmVyUG9ydCA9IFNlbWFudGljQ29udmVudGlvbjxudW1iZXI+KCdzZXJ2ZXIucG9ydCcpO1xuXG4vKiogSFRUUCByZXNwb25zZSBzdGF0dXMgY29kZSAoc3RhbmRhcmQgT1RFTDogaHR0cC5yZXNwb25zZS5zdGF0dXNfY29kZSkgKi9cbmV4cG9ydCBjb25zdCBIdHRwUmVzcG9uc2VTdGF0dXNDb2RlID0gU2VtYW50aWNDb252ZW50aW9uPG51bWJlcj4oXG4gICdodHRwLnJlc3BvbnNlLnN0YXR1c19jb2RlJ1xuKTtcblxuLyoqIEVycm9yIHR5cGUgd2hlbiByZXF1ZXN0IGZhaWxzIChzdGFuZGFyZCBPVEVMOiBlcnJvci50eXBlKSAqL1xuZXhwb3J0IGNvbnN0IEVycm9yVHlwZSA9IFNlbWFudGljQ29udmVudGlvbjxzdHJpbmc+KCdlcnJvci50eXBlJyk7XG5cbi8vIFdvcmxkLXNwZWNpZmljIGN1c3RvbSBhdHRyaWJ1dGVzIChmb3Igd29ya2Zsb3ctc3BlY2lmaWMgY29udGV4dClcblxuLyoqIEZvcm1hdCB1c2VkIGZvciBwYXJzaW5nIHJlc3BvbnNlIGJvZHkgKGNib3Igb3IganNvbikgKi9cbmV4cG9ydCBjb25zdCBXb3JsZFBhcnNlRm9ybWF0ID0gU2VtYW50aWNDb252ZW50aW9uPCdjYm9yJyB8ICdqc29uJz4oXG4gICd3b3JrZmxvdy53b3JsZC5wYXJzZS5mb3JtYXQnXG4pO1xuXG4vLyBFdmVudCBsb2FkaW5nIGF0dHJpYnV0ZXNcblxuLyoqIE51bWJlciBvZiBwYWdpbmF0aW9uIHBhZ2VzIGxvYWRlZCB3aGVuIGZldGNoaW5nIHdvcmtmbG93IGV2ZW50cyAqL1xuZXhwb3J0IGNvbnN0IFdvcmtmbG93RXZlbnRzUGFnZXNMb2FkZWQgPSBTZW1hbnRpY0NvbnZlbnRpb248bnVtYmVyPihcbiAgJ3dvcmtmbG93LmV2ZW50cy5wYWdlc19sb2FkZWQnXG4pO1xuXG4vLyBRdWV1ZSB0aW1pbmcgYnJlYWtkb3duIGF0dHJpYnV0ZXMgKHdvcmtmbG93LXNwZWNpZmljKVxuXG4vKiogVGltZSBzcGVudCBkZXNlcmlhbGl6aW5nIHRoZSBxdWV1ZSBtZXNzYWdlIGluIG1pbGxpc2Vjb25kcyAqL1xuZXhwb3J0IGNvbnN0IFF1ZXVlRGVzZXJpYWxpemVUaW1lTXMgPSBTZW1hbnRpY0NvbnZlbnRpb248bnVtYmVyPihcbiAgJ3dvcmtmbG93LnF1ZXVlLmRlc2VyaWFsaXplX3RpbWVfbXMnXG4pO1xuXG4vKiogVGltZSBzcGVudCBleGVjdXRpbmcgdGhlIGhhbmRsZXIgbG9naWMgaW4gbWlsbGlzZWNvbmRzICovXG5leHBvcnQgY29uc3QgUXVldWVFeGVjdXRpb25UaW1lTXMgPSBTZW1hbnRpY0NvbnZlbnRpb248bnVtYmVyPihcbiAgJ3dvcmtmbG93LnF1ZXVlLmV4ZWN1dGlvbl90aW1lX21zJ1xuKTtcblxuLyoqIFRpbWUgc3BlbnQgc2VyaWFsaXppbmcgdGhlIHJlc3BvbnNlIGluIG1pbGxpc2Vjb25kcyAqL1xuZXhwb3J0IGNvbnN0IFF1ZXVlU2VyaWFsaXplVGltZU1zID0gU2VtYW50aWNDb252ZW50aW9uPG51bWJlcj4oXG4gICd3b3JrZmxvdy5xdWV1ZS5zZXJpYWxpemVfdGltZV9tcydcbik7XG5cbi8vIFBheWxvYWQgY29tcHJlc3Npb24gYXR0cmlidXRlcyAoenN0ZCBwcmVmZXJyZWQsIGd6aXAgZmFsbGJhY2s7IHNwZWNWZXJzaW9uID49IDUpXG4vL1xuLy8gU2l6ZXMgYXJlIG1lYXN1cmVkIGF0IHRoZSBjb21wcmVzc2lvbiBib3VuZGFyeTogYmVmb3JlIGVuY3J5cHRpb24gb24gdGhlXG4vLyB3cml0ZSBwYXRoIGFuZCBhZnRlciBkZWNyeXB0aW9uIG9uIHRoZSByZWFkIHBhdGguIFRoZXkgdGhlcmVmb3JlIHJlZmxlY3Rcbi8vIGNvbXByZXNzaW9uJ3MgZWZmZWN0LCBub3QgdGhlIGF0LXJlc3Qgc2l6ZSAod2hpY2ggYWxzbyBpbmNsdWRlcyB0aGVcbi8vIH4yOC1ieXRlIGBlbmNyYCBlbnZlbG9wZSBhbmQsIG9uIHNvbWUgYmFja2VuZHMsIGJhc2U2NCBleHBhbnNpb24pLlxuXG4vKiogV2hldGhlciB0aGlzIHNlcmlhbGl6ZS9kZXNlcmlhbGl6ZSB3YXMgYSB3cml0ZSBvciByZWFkLiAqL1xuZXhwb3J0IGNvbnN0IFNlcmlhbGl6YXRpb25PcGVyYXRpb24gPSBTZW1hbnRpY0NvbnZlbnRpb248XG4gICdzZXJpYWxpemUnIHwgJ2Rlc2VyaWFsaXplJ1xuPignd29ya2Zsb3cuc2VyaWFsaXphdGlvbi5vcGVyYXRpb24nKTtcblxuLyoqIFdoZXRoZXIgYSBjb21wcmVzc2lvbiBjb2RlYyB3YXMgYXBwbGllZCAod3JpdGUpIC8gcHJlc2VudCAocmVhZCkuICovXG5leHBvcnQgY29uc3QgU2VyaWFsaXphdGlvbkNvbXByZXNzZWQgPSBTZW1hbnRpY0NvbnZlbnRpb248Ym9vbGVhbj4oXG4gICd3b3JrZmxvdy5zZXJpYWxpemF0aW9uLmNvbXByZXNzZWQnXG4pO1xuXG4vKiogV2hpY2ggY29tcHJlc3Npb24gY29kZWMgYXBwbGllZCAvIHdhcyBwcmVzZW50IChgenN0ZGAsIGBnemlwYCwgb3IgYG5vbmVgKS4gKi9cbmV4cG9ydCBjb25zdCBTZXJpYWxpemF0aW9uQ29kZWMgPSBTZW1hbnRpY0NvbnZlbnRpb248J3pzdGQnIHwgJ2d6aXAnIHwgJ25vbmUnPihcbiAgJ3dvcmtmbG93LnNlcmlhbGl6YXRpb24uY29kZWMnXG4pO1xuXG4vKiogTG9naWNhbCAodW5jb21wcmVzc2VkLCBkZXZhbHVlLXByZWZpeGVkKSBwYXlsb2FkIHNpemUgaW4gYnl0ZXMuICovXG5leHBvcnQgY29uc3QgU2VyaWFsaXphdGlvblVuY29tcHJlc3NlZEJ5dGVzID0gU2VtYW50aWNDb252ZW50aW9uPG51bWJlcj4oXG4gICd3b3JrZmxvdy5zZXJpYWxpemF0aW9uLnVuY29tcHJlc3NlZF9ieXRlcydcbik7XG5cbi8qKiBTdG9yZWQgKHBvc3QtY29tcHJlc3Npb24sIHByZS1lbmNyeXB0aW9uKSBwYXlsb2FkIHNpemUgaW4gYnl0ZXMuICovXG5leHBvcnQgY29uc3QgU2VyaWFsaXphdGlvblN0b3JlZEJ5dGVzID0gU2VtYW50aWNDb252ZW50aW9uPG51bWJlcj4oXG4gICd3b3JrZmxvdy5zZXJpYWxpemF0aW9uLnN0b3JlZF9ieXRlcydcbik7XG5cbi8qKiBGcmFjdGlvbiBvZiBieXRlcyBzYXZlZCBieSBjb21wcmVzc2lvbiAoMC4uMSk7IHNldCBvbmx5IHdoZW4gY29tcHJlc3NlZC4gKi9cbmV4cG9ydCBjb25zdCBTZXJpYWxpemF0aW9uQ29tcHJlc3Npb25SYXRpbyA9IFNlbWFudGljQ29udmVudGlvbjxudW1iZXI+KFxuICAnd29ya2Zsb3cuc2VyaWFsaXphdGlvbi5jb21wcmVzc2lvbl9yYXRpbydcbik7XG5cbi8qKlxuICogTnVtYmVyIG9mIHdvcmtmbG93IChndWVzdCkgY29kZSBleGVjdXRpb25zIHNlcmlhbGl6YXRpb24gY291bGQgbm90IGF2b2lkXG4gKiAoZ2V0dGVycywgcHJveGllcywgY3VzdG9tIHNlcmlhbGl6ZXJzKTsgc2V0IG9ubHkgd2hlbiBub24temVyby5cbiAqL1xuZXhwb3J0IGNvbnN0IFNlcmlhbGl6YXRpb25HdWVzdENvZGVFeGVjdXRpb25zID0gU2VtYW50aWNDb252ZW50aW9uPG51bWJlcj4oXG4gICd3b3JrZmxvdy5zZXJpYWxpemF0aW9uLmd1ZXN0X2NvZGVfZXhlY3V0aW9ucydcbik7XG5cbi8qKlxuICogRGVkdXBsaWNhdGVkIGBraW5kIChkZXRhaWwpYCBkZXNjcmlwdGlvbnMgb2YgdGhlIGd1ZXN0LWNvZGUgZXhlY3V0aW9ucztcbiAqIHNldCBvbmx5IHdoZW4gbm9uLXplcm8uXG4gKi9cbmV4cG9ydCBjb25zdCBTZXJpYWxpemF0aW9uR3Vlc3RDb2RlRGV0YWlscyA9IFNlbWFudGljQ29udmVudGlvbjxzdHJpbmdbXT4oXG4gICd3b3JrZmxvdy5zZXJpYWxpemF0aW9uLmd1ZXN0X2NvZGVfZGV0YWlscydcbik7XG5cbi8vIFJQQy9QZWVyIFNlcnZpY2UgYXR0cmlidXRlcyAtIEZvciBzZXJ2aWNlIG1hcHMgYW5kIGRlcGVuZGVuY3kgdHJhY2tpbmdcbi8vIFNlZTogaHR0cHM6Ly9vcGVudGVsZW1ldHJ5LmlvL2RvY3Mvc3BlY3Mvc2VtY29udi9ycGMvcnBjLXNwYW5zL1xuXG4vKiogVGhlIHJlbW90ZSBzZXJ2aWNlIG5hbWUgZm9yIERhdGFkb2cgc2VydmljZSBtYXBzIChEYXRhZG9nLXNwZWNpZmljOiBwZWVyLnNlcnZpY2UpICovXG5leHBvcnQgY29uc3QgUGVlclNlcnZpY2UgPSBTZW1hbnRpY0NvbnZlbnRpb248c3RyaW5nPigncGVlci5zZXJ2aWNlJyk7XG5cbi8qKiBSUEMgc3lzdGVtIGlkZW50aWZpZXIgKHN0YW5kYXJkIE9URUw6IHJwYy5zeXN0ZW0pICovXG5leHBvcnQgY29uc3QgUnBjU3lzdGVtID0gU2VtYW50aWNDb252ZW50aW9uPHN0cmluZz4oJ3JwYy5zeXN0ZW0nKTtcblxuLyoqIFJQQyBzZXJ2aWNlIG5hbWUgKHN0YW5kYXJkIE9URUw6IHJwYy5zZXJ2aWNlKSAqL1xuZXhwb3J0IGNvbnN0IFJwY1NlcnZpY2UgPSBTZW1hbnRpY0NvbnZlbnRpb248c3RyaW5nPigncnBjLnNlcnZpY2UnKTtcblxuLyoqIFJQQyBtZXRob2QgbmFtZSAoc3RhbmRhcmQgT1RFTDogcnBjLm1ldGhvZCkgKi9cbmV4cG9ydCBjb25zdCBScGNNZXRob2QgPSBTZW1hbnRpY0NvbnZlbnRpb248c3RyaW5nPigncnBjLm1ldGhvZCcpO1xuXG4vLyBFcnJvciBhdHRyaWJ1dGVzIC0gU3RhbmRhcmQgT1RFTCBlcnJvciBjb252ZW50aW9uc1xuLy8gU2VlOiBodHRwczovL29wZW50ZWxlbWV0cnkuaW8vZG9jcy9zcGVjcy9zZW1jb252L2V4Y2VwdGlvbnMvZXhjZXB0aW9ucy1zcGFucy9cblxuLyoqIFdoZXRoZXIgdGhlIGVycm9yIGlzIHJldHJ5YWJsZSAod29ya2Zsb3ctc3BlY2lmaWMpICovXG5leHBvcnQgY29uc3QgRXJyb3JSZXRyeWFibGUgPSBTZW1hbnRpY0NvbnZlbnRpb248Ym9vbGVhbj4oJ2Vycm9yLnJldHJ5YWJsZScpO1xuXG4vKiogRXJyb3IgY2F0ZWdvcnkgKHdvcmtmbG93LXNwZWNpZmljOiBmYXRhbCwgcmV0cnlhYmxlLCB0cmFuc2llbnQpICovXG5leHBvcnQgY29uc3QgRXJyb3JDYXRlZ29yeSA9IFNlbWFudGljQ29udmVudGlvbjxcbiAgJ2ZhdGFsJyB8ICdyZXRyeWFibGUnIHwgJ3RyYW5zaWVudCdcbj4oJ2Vycm9yLmNhdGVnb3J5Jyk7XG4iXX0=
@@ -1,5 +1,59 @@
1
1
  import type * as api from '@opentelemetry/api';
2
2
  import type { Span, SpanKind, SpanOptions } from '@opentelemetry/api';
3
+ import { WorkflowSuspension } from './global.js';
4
+ /**
5
+ * Controls how workflow/step queue-handler spans relate to the run-origin
6
+ * trace context carried in queue messages:
7
+ *
8
+ * - `'linked'` (default): each invocation starts a NEW root trace; the
9
+ * run-origin context (and the incoming delivery context) are attached as
10
+ * span links. This keeps traces bounded per invocation instead of
11
+ * stitching a long-lived run into one giant trace.
12
+ * - `'continuous'`: the restored run-origin context becomes the parent of
13
+ * the invocation span (legacy behavior), producing a single trace that
14
+ * spans the entire run.
15
+ */
16
+ export type WorkflowTraceMode = 'linked' | 'continuous';
17
+ /**
18
+ * Resolves the active trace mode from the `WORKFLOW_TRACE_MODE` env var.
19
+ * Defaults to `'linked'`; any value other than `'continuous'` selects it.
20
+ * Unrecognized non-empty values (e.g. typos like `continous`) emit a
21
+ * one-time warning so silent fallback to `linked` is at least visible.
22
+ */
23
+ export declare function getWorkflowTraceMode(): WorkflowTraceMode;
24
+ /**
25
+ * Returns whether a serialized trace carrier is usable, i.e. present and
26
+ * non-empty. `serializeTraceCarrier()` returns `{}` when no OTEL SDK is
27
+ * registered or no span is active, and `start()` always attaches the
28
+ * carrier to the first queue message — so an empty carrier must be treated
29
+ * the same as an absent one wherever the trace-mode logic branches.
30
+ */
31
+ export declare function isUsableTraceCarrier(carrier: Record<string, string> | undefined): carrier is Record<string, string>;
32
+ /**
33
+ * Returns the trace carrier to attach to messages the current invocation
34
+ * enqueues. In `linked` mode the ORIGINAL run-origin carrier is forwarded
35
+ * unchanged (when usable) so every future invocation links back to the same
36
+ * origin; otherwise — `continuous` mode, or no usable incoming carrier —
37
+ * the current (active) context is serialized, so the trace keeps chaining
38
+ * (continuous) or the first instrumented invocation becomes the de-facto
39
+ * origin (linked).
40
+ */
41
+ export declare function getNextTraceCarrier(traceMode: WorkflowTraceMode, incomingCarrier: Record<string, string> | undefined): Promise<Record<string, string>>;
42
+ /**
43
+ * Builds the span links for a queue-delivered invocation span
44
+ * (`workflow.execute` / `step.execute`):
45
+ *
46
+ * - In `linked` mode the invocation span is a CHILD of the local delivery
47
+ * (flow-route) context, so the only link is to the run-origin context
48
+ * from the message's trace carrier — connecting this bounded per-invocation
49
+ * trace back to where the run was started. The run-origin context is a
50
+ * link, never a parent, and re-enqueues forward the original carrier
51
+ * unchanged, so the whole run is never stitched into one giant trace.
52
+ * The link is skipped when the carrier is absent, empty, or invalid.
53
+ * - In `continuous` mode the run-origin context is restored as the parent
54
+ * instead, and the link points at the incoming delivery context.
55
+ */
56
+ export declare function buildInvocationSpanLinks(traceMode: WorkflowTraceMode, incomingCarrier: Record<string, string> | undefined): Promise<api.Link[] | undefined>;
3
57
  /**
4
58
  * Serializes the current trace context into a format that can be passed through queues
5
59
  * @returns A record of strings representing the trace context
@@ -19,6 +73,18 @@ export declare function deserializeTraceCarrier(traceCarrier: Record<string, str
19
73
  */
20
74
  export declare function withTraceContext<T>(traceCarrier: Record<string, string> | undefined, fn: () => Promise<T>): Promise<T>;
21
75
  export declare function trace<T>(spanName: string, ...args: [fn: (span?: Span) => Promise<T>] | [opts: SpanOptions, fn: (span?: Span) => Promise<T>]): Promise<T>;
76
+ /**
77
+ * Emit a span whose start is back-dated to `startEpochMs` and whose end is now,
78
+ * so its duration reflects an interval only measurable at its end (e.g.
79
+ * time-to-first-chunk, known when the first chunk arrives). Unlike `trace()`,
80
+ * this records an already-elapsed span in one shot rather than wrapping a
81
+ * callback. No-op when OpenTelemetry is not available.
82
+ */
83
+ export declare function recordElapsedSpan(spanName: string, startEpochMs: number, opts?: SpanOptions): Promise<void>;
84
+ /**
85
+ * Applies the workflow suspension algebraic effect to an active span.
86
+ */
87
+ export declare function applyWorkflowSuspensionToSpan(error: WorkflowSuspension, span: api.Span): void;
22
88
  export declare function getSpanContextForTraceCarrier(carrier: Record<string, string>): Promise<api.SpanContext | undefined>;
23
89
  export declare function getActiveSpan(): Promise<api.Span | undefined>;
24
90
  /**
@@ -31,6 +97,13 @@ export declare function instrumentObject<T extends object>(prefix: string, o: T)
31
97
  export declare function getSpanKind(field: keyof typeof SpanKind): Promise<api.SpanKind | undefined>;
32
98
  export declare function withOtel<T>(fn: (otel: typeof api) => T): Promise<Awaited<T> | undefined>;
33
99
  export declare function linkToCurrentContext(): Promise<[api.Link] | undefined>;
100
+ /**
101
+ * Builds a span link pointing at the span context embedded in a serialized
102
+ * trace carrier (e.g. the run-origin context flowing through queue
103
+ * messages). Returns `undefined` when OTEL is unavailable, the carrier is
104
+ * absent, or it does not contain a valid span context.
105
+ */
106
+ export declare function linkToTraceCarrier(carrier: Record<string, string> | undefined): Promise<api.Link | undefined>;
34
107
  /**
35
108
  * Workflow context to propagate via baggage
36
109
  */
@@ -1 +1 @@
1
- {"version":3,"file":"telemetry.d.ts","sourceRoot":"","sources":["../src/telemetry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,GAAG,MAAM,oBAAoB,CAAC;AAC/C,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAUtE;;;GAGG;AACH,wBAAsB,qBAAqB,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAO7E;AAED;;;;GAIG;AACH,wBAAsB,uBAAuB,CAC3C,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,oCAMrC;AAED;;;;;GAKG;AACH,wBAAsB,gBAAgB,CAAC,CAAC,EACtC,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,EAChD,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GACnB,OAAO,CAAC,CAAC,CAAC,CAcZ;AAiBD,wBAAsB,KAAK,CAAC,CAAC,EAC3B,QAAQ,EAAE,MAAM,EAChB,GAAG,IAAI,EACH,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC,GACjC,CAAC,IAAI,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC,GACvD,OAAO,CAAC,CAAC,CAAC,CA4BZ;AAwBD,wBAAsB,6BAA6B,CACjD,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,wCAQhC;AAED,wBAAsB,aAAa,kCAElC;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,SAAS,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,CAa1E;AAED,wBAAsB,WAAW,CAAC,KAAK,EAAE,MAAM,OAAO,QAAQ,qCAE7D;AAED,wBAAsB,QAAQ,CAAC,CAAC,EAC9B,EAAE,EAAE,CAAC,IAAI,EAAE,OAAO,GAAG,KAAK,CAAC,GAC1B,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAIjC;AAED,wBAAgB,oBAAoB,IAAI,OAAO,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,CAMtE;AAMD;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED;;;;;GAKG;AACH,wBAAsB,mBAAmB,CAAC,CAAC,EACzC,OAAO,EAAE,sBAAsB,EAC/B,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GACnB,OAAO,CAAC,CAAC,CAAC,CAiBZ;AAED;;;GAGG;AACH,wBAAsB,kBAAkB,IAAI,OAAO,CACjD,sBAAsB,GAAG,SAAS,CACnC,CAgBA"}
1
+ {"version":3,"file":"telemetry.d.ts","sourceRoot":"","sources":["../src/telemetry.ts"],"names":[],"mappings":"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"}