footprintjs 10.0.1 → 10.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (368) hide show
  1. package/AGENTS.md +2 -1
  2. package/CLAUDE.md +61 -7
  3. package/README.md +136 -312
  4. package/dist/esm/index.d.ts +62 -2
  5. package/dist/esm/index.js +13 -6
  6. package/dist/esm/lib/attempt/anySignal.d.ts +19 -0
  7. package/dist/esm/lib/attempt/anySignal.js +39 -0
  8. package/dist/esm/lib/attempt/call.d.ts +88 -0
  9. package/dist/esm/lib/attempt/call.js +129 -0
  10. package/dist/esm/lib/attempt/category.d.ts +37 -0
  11. package/dist/esm/lib/attempt/category.js +131 -0
  12. package/dist/esm/lib/attempt/correlation.d.ts +95 -0
  13. package/dist/esm/lib/attempt/correlation.js +178 -0
  14. package/dist/esm/lib/attempt/deadline.d.ts +44 -0
  15. package/dist/esm/lib/attempt/deadline.js +101 -0
  16. package/dist/esm/lib/attempt/decision.d.ts +52 -0
  17. package/dist/esm/lib/attempt/decision.js +134 -0
  18. package/dist/esm/lib/attempt/effect.d.ts +76 -0
  19. package/dist/esm/lib/attempt/effect.js +160 -0
  20. package/dist/esm/lib/attempt/errors.d.ts +41 -0
  21. package/dist/esm/lib/attempt/errors.js +44 -0
  22. package/dist/esm/lib/attempt/index.d.ts +18 -0
  23. package/dist/esm/lib/attempt/index.js +15 -0
  24. package/dist/esm/lib/attempt/name.d.ts +21 -0
  25. package/dist/esm/lib/attempt/name.js +43 -0
  26. package/dist/esm/lib/attempt/observed.d.ts +66 -0
  27. package/dist/esm/lib/attempt/observed.js +171 -0
  28. package/dist/esm/lib/attempt/policy.d.ts +45 -0
  29. package/dist/esm/lib/attempt/policy.js +83 -0
  30. package/dist/esm/lib/attempt/record.d.ts +11 -0
  31. package/dist/esm/lib/attempt/record.js +24 -0
  32. package/dist/esm/lib/attempt/retryLoopContext.d.ts +18 -0
  33. package/dist/esm/lib/attempt/retryLoopContext.js +24 -0
  34. package/dist/esm/lib/attempt/retryLoopTypes.d.ts +18 -0
  35. package/dist/esm/lib/attempt/retryLoopTypes.js +2 -0
  36. package/dist/esm/lib/attempt/runner.d.ts +157 -0
  37. package/dist/esm/lib/attempt/runner.js +523 -0
  38. package/dist/esm/lib/attempt/standalone.d.ts +47 -0
  39. package/dist/esm/lib/attempt/standalone.js +126 -0
  40. package/dist/esm/lib/attempt/types.d.ts +453 -0
  41. package/dist/esm/lib/attempt/types.js +16 -0
  42. package/dist/esm/lib/budget/index.d.ts +9 -0
  43. package/dist/esm/lib/budget/index.js +9 -0
  44. package/dist/esm/lib/budget/timeBudget.d.ts +136 -0
  45. package/dist/esm/lib/budget/timeBudget.js +666 -0
  46. package/dist/esm/lib/builder/FlowChartBuilder.d.ts +88 -3
  47. package/dist/esm/lib/builder/FlowChartBuilder.js +199 -9
  48. package/dist/esm/lib/builder/retryLoop.d.ts +56 -0
  49. package/dist/esm/lib/builder/retryLoop.js +283 -0
  50. package/dist/esm/lib/builder/types.d.ts +35 -1
  51. package/dist/esm/lib/builder/types.js +1 -1
  52. package/dist/esm/lib/decide/decide.js +2 -2
  53. package/dist/esm/lib/decide/index.d.ts +1 -1
  54. package/dist/esm/lib/decide/index.js +2 -2
  55. package/dist/esm/lib/decide/types.d.ts +3 -0
  56. package/dist/esm/lib/decide/types.js +1 -8
  57. package/dist/esm/lib/engine/graph/StageNode.d.ts +11 -1
  58. package/dist/esm/lib/engine/graph/StageNode.js +1 -1
  59. package/dist/esm/lib/engine/graph/prefixNodeTree.js +5 -1
  60. package/dist/esm/lib/engine/handlers/ChildrenExecutor.js +36 -6
  61. package/dist/esm/lib/engine/handlers/DeciderHandler.js +9 -5
  62. package/dist/esm/lib/engine/handlers/ResumeEntry.js +3 -1
  63. package/dist/esm/lib/engine/handlers/SelectorHandler.js +6 -5
  64. package/dist/esm/lib/engine/handlers/StageRunner.d.ts +8 -1
  65. package/dist/esm/lib/engine/handlers/StageRunner.js +36 -9
  66. package/dist/esm/lib/engine/handlers/SubflowExecutor.js +24 -5
  67. package/dist/esm/lib/engine/handlers/commitStage.d.ts +7 -0
  68. package/dist/esm/lib/engine/handlers/commitStage.js +22 -4
  69. package/dist/esm/lib/engine/handlers/stageError.d.ts +9 -0
  70. package/dist/esm/lib/engine/handlers/stageError.js +23 -1
  71. package/dist/esm/lib/engine/index.d.ts +2 -2
  72. package/dist/esm/lib/engine/index.js +1 -1
  73. package/dist/esm/lib/engine/narrative/CombinedNarrativeRecorder.d.ts +27 -13
  74. package/dist/esm/lib/engine/narrative/CombinedNarrativeRecorder.js +68 -40
  75. package/dist/esm/lib/engine/narrative/FlowRecorderDispatcher.d.ts +4 -1
  76. package/dist/esm/lib/engine/narrative/FlowRecorderDispatcher.js +19 -2
  77. package/dist/esm/lib/engine/narrative/NarrativeFlowRecorder.d.ts +22 -3
  78. package/dist/esm/lib/engine/narrative/NarrativeFlowRecorder.js +61 -9
  79. package/dist/esm/lib/engine/narrative/NullControlFlowNarrativeGenerator.d.ts +1 -0
  80. package/dist/esm/lib/engine/narrative/NullControlFlowNarrativeGenerator.js +2 -1
  81. package/dist/esm/lib/engine/narrative/formatting/sentences.d.ts +23 -0
  82. package/dist/esm/lib/engine/narrative/formatting/sentences.js +127 -1
  83. package/dist/esm/lib/engine/narrative/index.d.ts +2 -2
  84. package/dist/esm/lib/engine/narrative/index.js +1 -1
  85. package/dist/esm/lib/engine/narrative/narrativeTypes.d.ts +27 -21
  86. package/dist/esm/lib/engine/narrative/narrativeTypes.js +1 -1
  87. package/dist/esm/lib/engine/narrative/recorders/ManifestFlowRecorder.d.ts +45 -2
  88. package/dist/esm/lib/engine/narrative/recorders/ManifestFlowRecorder.js +55 -2
  89. package/dist/esm/lib/engine/narrative/recorders/index.d.ts +1 -1
  90. package/dist/esm/lib/engine/narrative/recorders/index.js +1 -1
  91. package/dist/esm/lib/engine/narrative/types.d.ts +74 -5
  92. package/dist/esm/lib/engine/narrative/types.js +1 -1
  93. package/dist/esm/lib/engine/traversal/FlowchartTraverser.d.ts +59 -19
  94. package/dist/esm/lib/engine/traversal/FlowchartTraverser.js +194 -118
  95. package/dist/esm/lib/engine/traversalContext.d.ts +7 -2
  96. package/dist/esm/lib/engine/traversalContext.js +6 -3
  97. package/dist/esm/lib/engine/types.d.ts +52 -57
  98. package/dist/esm/lib/engine/types.js +1 -1
  99. package/dist/esm/lib/errors/terminalFailure.d.ts +29 -0
  100. package/dist/esm/lib/errors/terminalFailure.js +60 -0
  101. package/dist/esm/lib/{decide → filter}/evaluator.d.ts +7 -2
  102. package/dist/esm/lib/filter/evaluator.js +135 -0
  103. package/dist/esm/lib/ids/idempotencyKey.d.ts +14 -0
  104. package/dist/esm/lib/ids/idempotencyKey.js +24 -0
  105. package/dist/esm/lib/memory/StageContext.d.ts +123 -3
  106. package/dist/esm/lib/memory/StageContext.js +245 -4
  107. package/dist/esm/lib/memory/attention.d.ts +26 -0
  108. package/dist/esm/lib/memory/attention.js +171 -0
  109. package/dist/esm/lib/memory/borrowedMutation.d.ts +8 -0
  110. package/dist/esm/lib/memory/borrowedMutation.js +14 -1
  111. package/dist/esm/lib/memory/frameTypes.d.ts +38 -0
  112. package/dist/esm/lib/memory/frameTypes.js +3 -1
  113. package/dist/esm/lib/memory/redaction.d.ts +12 -0
  114. package/dist/esm/lib/memory/redaction.js +54 -5
  115. package/dist/esm/lib/pause/record.js +10 -1
  116. package/dist/esm/lib/pause/types.d.ts +19 -0
  117. package/dist/esm/lib/pause/types.js +17 -1
  118. package/dist/esm/lib/reactive/createTypedScope.js +3 -1
  119. package/dist/esm/lib/reactive/types.d.ts +36 -4
  120. package/dist/esm/lib/reactive/types.js +3 -1
  121. package/dist/esm/lib/recorder/AttemptRecorder.d.ts +141 -0
  122. package/dist/esm/lib/recorder/AttemptRecorder.js +412 -0
  123. package/dist/esm/lib/recorder/ControlDepRecorder.d.ts +36 -2
  124. package/dist/esm/lib/recorder/ControlDepRecorder.js +50 -2
  125. package/dist/esm/lib/recorder/EmitRecorder.d.ts +3 -0
  126. package/dist/esm/lib/recorder/EmitRecorder.js +1 -1
  127. package/dist/esm/lib/recorder/InOutRecorder.d.ts +37 -1
  128. package/dist/esm/lib/recorder/InOutRecorder.js +75 -6
  129. package/dist/esm/lib/recorder/QualityRecorder.d.ts +32 -5
  130. package/dist/esm/lib/recorder/QualityRecorder.js +87 -29
  131. package/dist/esm/lib/recorder/TopologyRecorder.d.ts +35 -5
  132. package/dist/esm/lib/recorder/TopologyRecorder.js +76 -2
  133. package/dist/esm/lib/recorder/attemptMetricRows.d.ts +11 -0
  134. package/dist/esm/lib/recorder/attemptMetricRows.js +202 -0
  135. package/dist/esm/lib/recorder/attemptMetrics.d.ts +7 -0
  136. package/dist/esm/lib/recorder/attemptMetrics.js +165 -0
  137. package/dist/esm/lib/recorder/attemptMetricsTypes.d.ts +114 -0
  138. package/dist/esm/lib/recorder/attemptMetricsTypes.js +2 -0
  139. package/dist/esm/lib/recorder/attemptOTel.d.ts +78 -0
  140. package/dist/esm/lib/recorder/attemptOTel.js +107 -0
  141. package/dist/esm/lib/recorder/attemptSeries.d.ts +81 -0
  142. package/dist/esm/lib/recorder/attemptSeries.js +103 -0
  143. package/dist/esm/lib/recorder/hooks.d.ts +9 -0
  144. package/dist/esm/lib/recorder/hooks.js +4 -1
  145. package/dist/esm/lib/runner/DeferredObserverTier.js +13 -1
  146. package/dist/esm/lib/runner/ExecutionRuntime.d.ts +54 -6
  147. package/dist/esm/lib/runner/ExecutionRuntime.js +57 -5
  148. package/dist/esm/lib/runner/FlowChartExecutor.d.ts +46 -2
  149. package/dist/esm/lib/runner/FlowChartExecutor.js +330 -101
  150. package/dist/esm/lib/runner/RunnableChart.d.ts +6 -0
  151. package/dist/esm/lib/runner/RunnableChart.js +5 -1
  152. package/dist/esm/lib/runner/attach.d.ts +2 -1
  153. package/dist/esm/lib/runner/attach.js +8 -2
  154. package/dist/esm/lib/runner/checkpoint.js +3 -1
  155. package/dist/esm/lib/runner/deadline.d.ts +42 -0
  156. package/dist/esm/lib/runner/deadline.js +90 -0
  157. package/dist/esm/lib/runner/index.d.ts +3 -1
  158. package/dist/esm/lib/runner/index.js +2 -1
  159. package/dist/esm/lib/runner/options.d.ts +17 -0
  160. package/dist/esm/lib/runner/options.js +3 -1
  161. package/dist/esm/lib/runner/recordSink.d.ts +128 -0
  162. package/dist/esm/lib/runner/recordSink.js +296 -0
  163. package/dist/esm/lib/runner/resume.d.ts +3 -0
  164. package/dist/esm/lib/runner/resume.js +22 -2
  165. package/dist/esm/lib/runner/snapshot.d.ts +2 -2
  166. package/dist/esm/lib/runner/snapshot.js +6 -2
  167. package/dist/esm/lib/scope/ScopeFacade.d.ts +118 -4
  168. package/dist/esm/lib/scope/ScopeFacade.js +304 -7
  169. package/dist/esm/lib/scope/recorders/DebugRecorder.d.ts +17 -3
  170. package/dist/esm/lib/scope/recorders/DebugRecorder.js +79 -13
  171. package/dist/esm/lib/scope/recorders/MetricRecorder.d.ts +10 -0
  172. package/dist/esm/lib/scope/recorders/MetricRecorder.js +15 -2
  173. package/dist/esm/lib/scope/runtime.d.ts +3 -0
  174. package/dist/esm/lib/scope/runtime.js +1 -1
  175. package/dist/esm/lib/scope/types.d.ts +6 -0
  176. package/dist/esm/lib/scope/types.js +1 -1
  177. package/dist/esm/lib/sinks/fileSink.d.ts +135 -0
  178. package/dist/esm/lib/sinks/fileSink.js +387 -0
  179. package/dist/esm/recorders.d.ts +8 -2
  180. package/dist/esm/recorders.js +7 -1
  181. package/dist/esm/sinks.d.ts +23 -0
  182. package/dist/esm/sinks.js +23 -0
  183. package/dist/esm/trace.d.ts +2 -2
  184. package/dist/esm/trace.js +1 -1
  185. package/dist/index.js +77 -60
  186. package/dist/lib/attempt/anySignal.js +43 -0
  187. package/dist/lib/attempt/call.js +134 -0
  188. package/dist/lib/attempt/category.js +136 -0
  189. package/dist/lib/attempt/correlation.js +186 -0
  190. package/dist/lib/attempt/deadline.js +112 -0
  191. package/dist/lib/attempt/decision.js +139 -0
  192. package/dist/lib/attempt/effect.js +174 -0
  193. package/dist/lib/attempt/errors.js +49 -0
  194. package/dist/lib/attempt/index.js +26 -0
  195. package/dist/lib/attempt/name.js +48 -0
  196. package/dist/lib/attempt/observed.js +177 -0
  197. package/dist/lib/attempt/policy.js +92 -0
  198. package/dist/lib/attempt/record.js +29 -0
  199. package/dist/lib/attempt/retryLoopContext.js +31 -0
  200. package/dist/lib/attempt/retryLoopTypes.js +3 -0
  201. package/dist/lib/attempt/runner.js +530 -0
  202. package/dist/lib/attempt/standalone.js +130 -0
  203. package/dist/lib/attempt/types.js +17 -0
  204. package/dist/lib/budget/index.js +17 -0
  205. package/dist/lib/budget/timeBudget.js +674 -0
  206. package/dist/lib/builder/FlowChartBuilder.js +199 -9
  207. package/dist/lib/builder/retryLoop.js +287 -0
  208. package/dist/lib/builder/types.js +1 -1
  209. package/dist/lib/decide/decide.js +2 -2
  210. package/dist/lib/decide/index.js +2 -2
  211. package/dist/lib/decide/types.js +1 -8
  212. package/dist/lib/engine/graph/StageNode.js +1 -1
  213. package/dist/lib/engine/graph/prefixNodeTree.js +5 -1
  214. package/dist/lib/engine/handlers/ChildrenExecutor.js +36 -6
  215. package/dist/lib/engine/handlers/DeciderHandler.js +7 -3
  216. package/dist/lib/engine/handlers/ResumeEntry.js +3 -1
  217. package/dist/lib/engine/handlers/SelectorHandler.js +4 -3
  218. package/dist/lib/engine/handlers/StageRunner.js +36 -9
  219. package/dist/lib/engine/handlers/SubflowExecutor.js +24 -5
  220. package/dist/lib/engine/handlers/commitStage.js +24 -5
  221. package/dist/lib/engine/handlers/stageError.js +26 -2
  222. package/dist/lib/engine/index.js +1 -1
  223. package/dist/lib/engine/narrative/CombinedNarrativeRecorder.js +67 -39
  224. package/dist/lib/engine/narrative/FlowRecorderDispatcher.js +19 -2
  225. package/dist/lib/engine/narrative/NarrativeFlowRecorder.js +60 -8
  226. package/dist/lib/engine/narrative/NullControlFlowNarrativeGenerator.js +2 -1
  227. package/dist/lib/engine/narrative/formatting/sentences.js +131 -2
  228. package/dist/lib/engine/narrative/index.js +1 -1
  229. package/dist/lib/engine/narrative/narrativeTypes.js +1 -1
  230. package/dist/lib/engine/narrative/recorders/ManifestFlowRecorder.js +55 -2
  231. package/dist/lib/engine/narrative/recorders/index.js +1 -1
  232. package/dist/lib/engine/narrative/types.js +1 -1
  233. package/dist/lib/engine/traversal/FlowchartTraverser.js +192 -116
  234. package/dist/lib/engine/traversalContext.js +6 -3
  235. package/dist/lib/engine/types.js +1 -1
  236. package/dist/lib/errors/terminalFailure.js +64 -0
  237. package/dist/lib/filter/evaluator.js +139 -0
  238. package/dist/lib/ids/idempotencyKey.js +28 -0
  239. package/dist/lib/memory/StageContext.js +246 -5
  240. package/dist/lib/memory/attention.js +175 -0
  241. package/dist/lib/memory/borrowedMutation.js +16 -2
  242. package/dist/lib/memory/frameTypes.js +3 -1
  243. package/dist/lib/memory/redaction.js +54 -5
  244. package/dist/lib/pause/record.js +10 -1
  245. package/dist/lib/pause/types.js +17 -1
  246. package/dist/lib/reactive/createTypedScope.js +3 -1
  247. package/dist/lib/reactive/types.js +3 -1
  248. package/dist/lib/recorder/AttemptRecorder.js +417 -0
  249. package/dist/lib/recorder/ControlDepRecorder.js +50 -2
  250. package/dist/lib/recorder/EmitRecorder.js +1 -1
  251. package/dist/lib/recorder/InOutRecorder.js +75 -6
  252. package/dist/lib/recorder/QualityRecorder.js +87 -29
  253. package/dist/lib/recorder/TopologyRecorder.js +76 -2
  254. package/dist/lib/recorder/attemptMetricRows.js +209 -0
  255. package/dist/lib/recorder/attemptMetrics.js +174 -0
  256. package/dist/lib/recorder/attemptMetricsTypes.js +3 -0
  257. package/dist/lib/recorder/attemptOTel.js +111 -0
  258. package/dist/lib/recorder/attemptSeries.js +113 -0
  259. package/dist/lib/recorder/hooks.js +4 -1
  260. package/dist/lib/runner/DeferredObserverTier.js +13 -1
  261. package/dist/lib/runner/ExecutionRuntime.js +57 -5
  262. package/dist/lib/runner/FlowChartExecutor.js +330 -101
  263. package/dist/lib/runner/RunnableChart.js +5 -1
  264. package/dist/lib/runner/attach.js +8 -2
  265. package/dist/lib/runner/checkpoint.js +3 -1
  266. package/dist/lib/runner/deadline.js +94 -0
  267. package/dist/lib/runner/index.js +4 -2
  268. package/dist/lib/runner/options.js +3 -1
  269. package/dist/lib/runner/recordSink.js +302 -0
  270. package/dist/lib/runner/resume.js +22 -2
  271. package/dist/lib/runner/snapshot.js +6 -2
  272. package/dist/lib/scope/ScopeFacade.js +303 -6
  273. package/dist/lib/scope/recorders/DebugRecorder.js +79 -13
  274. package/dist/lib/scope/recorders/MetricRecorder.js +15 -2
  275. package/dist/lib/scope/runtime.js +1 -1
  276. package/dist/lib/scope/types.js +1 -1
  277. package/dist/lib/sinks/fileSink.js +392 -0
  278. package/dist/recorders.js +10 -2
  279. package/dist/sinks.js +32 -0
  280. package/dist/trace.js +1 -1
  281. package/dist/types/index.d.ts +62 -2
  282. package/dist/types/lib/attempt/anySignal.d.ts +19 -0
  283. package/dist/types/lib/attempt/call.d.ts +88 -0
  284. package/dist/types/lib/attempt/category.d.ts +37 -0
  285. package/dist/types/lib/attempt/correlation.d.ts +95 -0
  286. package/dist/types/lib/attempt/deadline.d.ts +44 -0
  287. package/dist/types/lib/attempt/decision.d.ts +52 -0
  288. package/dist/types/lib/attempt/effect.d.ts +76 -0
  289. package/dist/types/lib/attempt/errors.d.ts +41 -0
  290. package/dist/types/lib/attempt/index.d.ts +18 -0
  291. package/dist/types/lib/attempt/name.d.ts +21 -0
  292. package/dist/types/lib/attempt/observed.d.ts +66 -0
  293. package/dist/types/lib/attempt/policy.d.ts +45 -0
  294. package/dist/types/lib/attempt/record.d.ts +11 -0
  295. package/dist/types/lib/attempt/retryLoopContext.d.ts +18 -0
  296. package/dist/types/lib/attempt/retryLoopTypes.d.ts +18 -0
  297. package/dist/types/lib/attempt/runner.d.ts +157 -0
  298. package/dist/types/lib/attempt/standalone.d.ts +47 -0
  299. package/dist/types/lib/attempt/types.d.ts +453 -0
  300. package/dist/types/lib/budget/index.d.ts +9 -0
  301. package/dist/types/lib/budget/timeBudget.d.ts +136 -0
  302. package/dist/types/lib/builder/FlowChartBuilder.d.ts +88 -3
  303. package/dist/types/lib/builder/retryLoop.d.ts +56 -0
  304. package/dist/types/lib/builder/types.d.ts +35 -1
  305. package/dist/types/lib/decide/index.d.ts +1 -1
  306. package/dist/types/lib/decide/types.d.ts +3 -0
  307. package/dist/types/lib/engine/graph/StageNode.d.ts +11 -1
  308. package/dist/types/lib/engine/handlers/StageRunner.d.ts +8 -1
  309. package/dist/types/lib/engine/handlers/commitStage.d.ts +7 -0
  310. package/dist/types/lib/engine/handlers/stageError.d.ts +9 -0
  311. package/dist/types/lib/engine/index.d.ts +2 -2
  312. package/dist/types/lib/engine/narrative/CombinedNarrativeRecorder.d.ts +27 -13
  313. package/dist/types/lib/engine/narrative/FlowRecorderDispatcher.d.ts +4 -1
  314. package/dist/types/lib/engine/narrative/NarrativeFlowRecorder.d.ts +22 -3
  315. package/dist/types/lib/engine/narrative/NullControlFlowNarrativeGenerator.d.ts +1 -0
  316. package/dist/types/lib/engine/narrative/formatting/sentences.d.ts +23 -0
  317. package/dist/types/lib/engine/narrative/index.d.ts +2 -2
  318. package/dist/types/lib/engine/narrative/narrativeTypes.d.ts +27 -21
  319. package/dist/types/lib/engine/narrative/recorders/ManifestFlowRecorder.d.ts +45 -2
  320. package/dist/types/lib/engine/narrative/recorders/index.d.ts +1 -1
  321. package/dist/types/lib/engine/narrative/types.d.ts +74 -5
  322. package/dist/types/lib/engine/traversal/FlowchartTraverser.d.ts +59 -19
  323. package/dist/types/lib/engine/traversalContext.d.ts +7 -2
  324. package/dist/types/lib/engine/types.d.ts +52 -57
  325. package/dist/types/lib/errors/terminalFailure.d.ts +29 -0
  326. package/dist/types/lib/{decide → filter}/evaluator.d.ts +7 -2
  327. package/dist/types/lib/ids/idempotencyKey.d.ts +14 -0
  328. package/dist/types/lib/memory/StageContext.d.ts +123 -3
  329. package/dist/types/lib/memory/attention.d.ts +26 -0
  330. package/dist/types/lib/memory/borrowedMutation.d.ts +8 -0
  331. package/dist/types/lib/memory/frameTypes.d.ts +38 -0
  332. package/dist/types/lib/memory/redaction.d.ts +12 -0
  333. package/dist/types/lib/pause/types.d.ts +19 -0
  334. package/dist/types/lib/reactive/types.d.ts +36 -4
  335. package/dist/types/lib/recorder/AttemptRecorder.d.ts +141 -0
  336. package/dist/types/lib/recorder/ControlDepRecorder.d.ts +36 -2
  337. package/dist/types/lib/recorder/EmitRecorder.d.ts +3 -0
  338. package/dist/types/lib/recorder/InOutRecorder.d.ts +37 -1
  339. package/dist/types/lib/recorder/QualityRecorder.d.ts +32 -5
  340. package/dist/types/lib/recorder/TopologyRecorder.d.ts +35 -5
  341. package/dist/types/lib/recorder/attemptMetricRows.d.ts +11 -0
  342. package/dist/types/lib/recorder/attemptMetrics.d.ts +7 -0
  343. package/dist/types/lib/recorder/attemptMetricsTypes.d.ts +114 -0
  344. package/dist/types/lib/recorder/attemptOTel.d.ts +78 -0
  345. package/dist/types/lib/recorder/attemptSeries.d.ts +81 -0
  346. package/dist/types/lib/recorder/hooks.d.ts +9 -0
  347. package/dist/types/lib/runner/ExecutionRuntime.d.ts +54 -6
  348. package/dist/types/lib/runner/FlowChartExecutor.d.ts +46 -2
  349. package/dist/types/lib/runner/RunnableChart.d.ts +6 -0
  350. package/dist/types/lib/runner/attach.d.ts +2 -1
  351. package/dist/types/lib/runner/deadline.d.ts +42 -0
  352. package/dist/types/lib/runner/index.d.ts +3 -1
  353. package/dist/types/lib/runner/options.d.ts +17 -0
  354. package/dist/types/lib/runner/recordSink.d.ts +128 -0
  355. package/dist/types/lib/runner/resume.d.ts +3 -0
  356. package/dist/types/lib/runner/snapshot.d.ts +2 -2
  357. package/dist/types/lib/scope/ScopeFacade.d.ts +118 -4
  358. package/dist/types/lib/scope/recorders/DebugRecorder.d.ts +17 -3
  359. package/dist/types/lib/scope/recorders/MetricRecorder.d.ts +10 -0
  360. package/dist/types/lib/scope/runtime.d.ts +3 -0
  361. package/dist/types/lib/scope/types.d.ts +6 -0
  362. package/dist/types/lib/sinks/fileSink.d.ts +135 -0
  363. package/dist/types/recorders.d.ts +8 -2
  364. package/dist/types/sinks.d.ts +23 -0
  365. package/dist/types/trace.d.ts +2 -2
  366. package/package.json +20 -6
  367. package/dist/esm/lib/decide/evaluator.js +0 -130
  368. package/dist/lib/decide/evaluator.js +0 -134
@@ -19,6 +19,7 @@
19
19
  * has always done.
20
20
  */
21
21
  import { type RuntimeStageId } from 'foottrace';
22
+ import type { RunCorrelation } from '../attempt/types.js';
22
23
  import type { ResumeLink, TraversalContext } from './narrative/types.js';
23
24
  /** Everything a stamp can carry; optional keys are written only when PRESENT on this object. */
24
25
  export interface TraversalStamp {
@@ -32,11 +33,13 @@ export interface TraversalStamp {
32
33
  readonly subflowId?: string;
33
34
  readonly subflowPath?: string;
34
35
  readonly resumedFrom?: ResumeLink;
36
+ /** The leg's correlation — the same frozen object on every stamp; written last, only when present. */
37
+ readonly correlation?: RunCorrelation;
35
38
  }
36
39
  /**
37
40
  * Build the stamp. `parentStageId` / `subflowId` / `subflowPath` are copied
38
41
  * when the key is present (even as `undefined`); `parentRuntimeStageId`,
39
- * `loopIteration` and `resumedFrom` only when they hold a value.
42
+ * `loopIteration`, `resumedFrom` and `correlation` only when they hold a value.
40
43
  */
41
44
  export declare function traversalContextFor(stamp: TraversalStamp): TraversalContext;
42
45
  /**
@@ -44,7 +47,7 @@ export declare function traversalContextFor(stamp: TraversalStamp): TraversalCon
44
47
  * depth 0) so the `runId` is reliably available on run events without forcing
45
48
  * recorders to handle `traversalContext === undefined`.
46
49
  */
47
- export declare function rootTraversalContext(runId: string): TraversalContext;
50
+ export declare function rootTraversalContext(runId: string, correlation?: RunCorrelation): TraversalContext;
48
51
  /**
49
52
  * The `onResume` stamp. Names the stand-in's own execution (`runtimeStageId`,
50
53
  * the id its commit carries), the REAL subflow it runs in — `subflowId` is the
@@ -62,4 +65,6 @@ export declare function resumeTraversalContext(resume: {
62
65
  /** `checkpoint.subflowPath`: the prefixed id of every subflow on the way down, outermost first. */
63
66
  readonly subflowPath: readonly string[];
64
67
  readonly resumedFrom?: ResumeLink;
68
+ /** The RESUMED leg's correlation (from `resume()`'s env) — never the paused leg's. */
69
+ readonly correlation?: RunCorrelation;
65
70
  }): TraversalContext;
@@ -22,7 +22,7 @@ import { buildRuntimeStageId, subflowSegmentsOf } from 'foottrace';
22
22
  /**
23
23
  * Build the stamp. `parentStageId` / `subflowId` / `subflowPath` are copied
24
24
  * when the key is present (even as `undefined`); `parentRuntimeStageId`,
25
- * `loopIteration` and `resumedFrom` only when they hold a value.
25
+ * `loopIteration`, `resumedFrom` and `correlation` only when they hold a value.
26
26
  */
27
27
  export function traversalContextFor(stamp) {
28
28
  return {
@@ -39,6 +39,7 @@ export function traversalContextFor(stamp) {
39
39
  // off the runtimeStageId, so every stamp (stage, root, resume) agrees.
40
40
  depth: subflowSegmentsOf(stamp.runtimeStageId).length,
41
41
  ...(stamp.resumedFrom && { resumedFrom: stamp.resumedFrom }),
42
+ ...(stamp.correlation && { correlation: stamp.correlation }),
42
43
  };
43
44
  }
44
45
  /** Own-key presence — `undefined` counts as present (a stage stamp always names these keys). */
@@ -52,12 +53,13 @@ const ROOT_STAGE_ID = '__root__';
52
53
  * depth 0) so the `runId` is reliably available on run events without forcing
53
54
  * recorders to handle `traversalContext === undefined`.
54
55
  */
55
- export function rootTraversalContext(runId) {
56
+ export function rootTraversalContext(runId, correlation) {
56
57
  return traversalContextFor({
57
58
  runId,
58
59
  stageId: ROOT_STAGE_ID,
59
60
  runtimeStageId: buildRuntimeStageId(ROOT_STAGE_ID, 0),
60
61
  stageName: ROOT_STAGE_ID,
62
+ ...(correlation && { correlation }),
61
63
  });
62
64
  }
63
65
  /**
@@ -78,6 +80,7 @@ export function resumeTraversalContext(resume) {
78
80
  stageName: resume.stageName,
79
81
  ...(innermost !== undefined && { subflowId: innermost }),
80
82
  ...(resume.resumedFrom && { resumedFrom: resume.resumedFrom }),
83
+ ...(resume.correlation && { correlation: resume.correlation }),
81
84
  });
82
85
  }
83
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhdmVyc2FsQ29udGV4dC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvZW5naW5lL3RyYXZlcnNhbENvbnRleHQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FtQkc7QUFFSCxPQUFPLEVBQXVCLG1CQUFtQixFQUFFLGlCQUFpQixFQUFFLE1BQU0sV0FBVyxDQUFDO0FBa0J4Rjs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLG1CQUFtQixDQUFDLEtBQXFCO0lBQ3ZELE9BQU87UUFDTCxLQUFLLEVBQUUsS0FBSyxDQUFDLEtBQUs7UUFDbEIsT0FBTyxFQUFFLEtBQUssQ0FBQyxPQUFPO1FBQ3RCLGNBQWMsRUFBRSxLQUFLLENBQUMsY0FBYztRQUNwQyxTQUFTLEVBQUUsS0FBSyxDQUFDLFNBQVM7UUFDMUIsR0FBRyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsZUFBZSxDQUFDLElBQUksRUFBRSxhQUFhLEVBQUUsS0FBSyxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQzFFLEdBQUcsQ0FBQyxLQUFLLENBQUMsb0JBQW9CLElBQUksRUFBRSxvQkFBb0IsRUFBRSxLQUFLLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztRQUN2RixHQUFHLENBQUMsS0FBSyxDQUFDLGFBQWEsS0FBSyxTQUFTLElBQUksRUFBRSxhQUFhLEVBQUUsS0FBSyxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ2hGLEdBQUcsQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLFdBQVcsQ0FBQyxJQUFJLEVBQUUsU0FBUyxFQUFFLEtBQUssQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUM5RCxHQUFHLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxhQUFhLENBQUMsSUFBSSxFQUFFLFdBQVcsRUFBRSxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDcEUseUVBQXlFO1FBQ3pFLHVFQUF1RTtRQUN2RSxLQUFLLEVBQUUsaUJBQWlCLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxDQUFDLE1BQU07UUFDckQsR0FBRyxDQUFDLEtBQUssQ0FBQyxXQUFXLElBQUksRUFBRSxXQUFXLEVBQUUsS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFDO0tBQzdELENBQUM7QUFDSixDQUFDO0FBRUQsZ0dBQWdHO0FBQ2hHLFNBQVMsR0FBRyxDQUFDLEtBQXFCLEVBQUUsR0FBa0Q7SUFDcEYsT0FBTyxNQUFNLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQzFELENBQUM7QUFFRCxvR0FBb0c7QUFDcEcsTUFBTSxhQUFhLEdBQUcsVUFBVSxDQUFDO0FBRWpDOzs7O0dBSUc7QUFDSCxNQUFNLFVBQVUsb0JBQW9CLENBQUMsS0FBYTtJQUNoRCxPQUFPLG1CQUFtQixDQUFDO1FBQ3pCLEtBQUs7UUFDTCxPQUFPLEVBQUUsYUFBYTtRQUN0QixjQUFjLEVBQUUsbUJBQW1CLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQztRQUNyRCxTQUFTLEVBQUUsYUFBYTtLQUN6QixDQUFDLENBQUM7QUFDTCxDQUFDO0FBRUQ7Ozs7Ozs7O0dBUUc7QUFDSCxNQUFNLFVBQVUsc0JBQXNCLENBQUMsTUFRdEM7SUFDQyxNQUFNLFNBQVMsR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ3BFLE9BQU8sbUJBQW1CLENBQUM7UUFDekIsS0FBSyxFQUFFLE1BQU0sQ0FBQyxLQUFLO1FBQ25CLE9BQU8sRUFBRSxNQUFNLENBQUMsT0FBTztRQUN2QixjQUFjLEVBQUUsTUFBTSxDQUFDLGNBQWM7UUFDckMsU0FBUyxFQUFFLE1BQU0sQ0FBQyxTQUFTO1FBQzNCLEdBQUcsQ0FBQyxTQUFTLEtBQUssU0FBUyxJQUFJLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxDQUFDO1FBQ3hELEdBQUcsQ0FBQyxNQUFNLENBQUMsV0FBVyxJQUFJLEVBQUUsV0FBVyxFQUFFLE1BQU0sQ0FBQyxXQUFXLEVBQUUsQ0FBQztLQUMvRCxDQUFDLENBQUM7QUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiB0cmF2ZXJzYWxDb250ZXh0IOKAlCB0aGUgT05FIGNvbnN0cnVjdG9yIG9mIGBUcmF2ZXJzYWxDb250ZXh0YCAoRjcsIDkuMzcuMCkuXG4gKlxuICogYFRyYXZlcnNhbENvbnRleHRgIGlzIHRoZSBjb3JyZWxhdGlvbiBzdGFtcCBldmVyeSBGbG93UmVjb3JkZXIgZXZlbnQgY2Fycmllc1xuICogKFwidGhlIGVudGlyZSBldmVudC1jb3JyZWxhdGlvbiBtb2RlbCByZXN0cyBvblwiIHNjb3BlIGFuZCBmbG93IGV2ZW50cyBzaGFyaW5nXG4gKiBpdCkuIFVudGlsIDkuMzYuMCB0aHJlZSBzaXRlcyBidWlsdCBpdCBieSBoYW5kIOKAlCB0aGUgdHJhdmVyc2VyIHBlciBzdGFnZSwgdGhlXG4gKiB0cmF2ZXJzZXIncyBzeW50aGV0aWMgcnVuLWJvdW5kYXJ5IHJvb3QsIGFuZCB0aGUgZXhlY3V0b3IncyBgb25SZXN1bWVgIOKAlCBhbmRcbiAqIHRoZSB0aGlyZCBmb3JlY2FzdCB3aGF0IGl0IGNvdWxkIG5vdCBrbm93IChkZXB0aCAwLCBubyBzdWJmbG93KS4gTm93IGFsbFxuICogdGhyZWUgY2FsbCBgdHJhdmVyc2FsQ29udGV4dEZvcmAsIHRocm91Z2ggdGhlIHR3byBuYW1lZCBzaGFwZXMgYmVsb3cuXG4gKlxuICogYGRlcHRoYCBoYXMgT05FIG1lYW5pbmcgb24gZXZlcnkgc3RhbXA6IHRoZSBzdWJmbG93IG5lc3Rpbmcgb2YgdGhlIHN0YWdlJ3NcbiAqIGFkZHJlc3MsIHJlYWQgb2ZmIGl0cyBydW50aW1lU3RhZ2VJZCAoOS4zNy4wIOKAlCBzdGFnZSBldmVudHMgdXNlZCB0byBzdGFtcFxuICogdGhlIHBhcmVudC1jaGFpbiBsZW5ndGggb2YgdGhlIHN0YWdlJ3MgY29udGV4dCkuXG4gKlxuICogS2V5IE9SREVSIGFuZCBrZXkgUFJFU0VOQ0UgYXJlIHBhcnQgb2YgdGhlIGJ5dGVzIChhIHJlY29yZGVyIHRoYXQgc2VyaWFsaXplc1xuICogdGhlIHN0YW1wIHNlZXMgdGhlbSksIHNvIGB0cmF2ZXJzYWxDb250ZXh0Rm9yYCB3cml0ZXMgYSBrZXkgb25seSB3aGVuIHRoZVxuICogY2FsbGVyIHBhc3NlZCBpdCDigJQgYHBhcmVudFN0YWdlSWRgLCBgc3ViZmxvd0lkYCBhbmQgYHN1YmZsb3dQYXRoYCBhcmUgd3JpdHRlblxuICogZXZlbiB3aGVuIGB1bmRlZmluZWRgIGlmIHRoZSBjYWxsZXIgbmFtZXMgdGhlbSwgd2hpY2ggaXMgd2hhdCBhIHN0YWdlIHN0YW1wXG4gKiBoYXMgYWx3YXlzIGRvbmUuXG4gKi9cblxuaW1wb3J0IHsgdHlwZSBSdW50aW1lU3RhZ2VJZCwgYnVpbGRSdW50aW1lU3RhZ2VJZCwgc3ViZmxvd1NlZ21lbnRzT2YgfSBmcm9tICdmb290dHJhY2UnO1xuXG5pbXBvcnQgdHlwZSB7IFJlc3VtZUxpbmssIFRyYXZlcnNhbENvbnRleHQgfSBmcm9tICcuL25hcnJhdGl2ZS90eXBlcy5qcyc7XG5cbi8qKiBFdmVyeXRoaW5nIGEgc3RhbXAgY2FuIGNhcnJ5OyBvcHRpb25hbCBrZXlzIGFyZSB3cml0dGVuIG9ubHkgd2hlbiBQUkVTRU5UIG9uIHRoaXMgb2JqZWN0LiAqL1xuZXhwb3J0IGludGVyZmFjZSBUcmF2ZXJzYWxTdGFtcCB7XG4gIHJlYWRvbmx5IHJ1bklkOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHN0YWdlSWQ6IHN0cmluZztcbiAgcmVhZG9ubHkgcnVudGltZVN0YWdlSWQ6IHN0cmluZztcbiAgcmVhZG9ubHkgc3RhZ2VOYW1lOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHBhcmVudFN0YWdlSWQ/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHBhcmVudFJ1bnRpbWVTdGFnZUlkPzogc3RyaW5nO1xuICByZWFkb25seSBsb29wSXRlcmF0aW9uPzogbnVtYmVyO1xuICByZWFkb25seSBzdWJmbG93SWQ/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHN1YmZsb3dQYXRoPzogc3RyaW5nO1xuICByZWFkb25seSByZXN1bWVkRnJvbT86IFJlc3VtZUxpbms7XG59XG5cbi8qKlxuICogQnVpbGQgdGhlIHN0YW1wLiBgcGFyZW50U3RhZ2VJZGAgLyBgc3ViZmxvd0lkYCAvIGBzdWJmbG93UGF0aGAgYXJlIGNvcGllZFxuICogd2hlbiB0aGUga2V5IGlzIHByZXNlbnQgKGV2ZW4gYXMgYHVuZGVmaW5lZGApOyBgcGFyZW50UnVudGltZVN0YWdlSWRgLFxuICogYGxvb3BJdGVyYXRpb25gIGFuZCBgcmVzdW1lZEZyb21gIG9ubHkgd2hlbiB0aGV5IGhvbGQgYSB2YWx1ZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRyYXZlcnNhbENvbnRleHRGb3Ioc3RhbXA6IFRyYXZlcnNhbFN0YW1wKTogVHJhdmVyc2FsQ29udGV4dCB7XG4gIHJldHVybiB7XG4gICAgcnVuSWQ6IHN0YW1wLnJ1bklkLFxuICAgIHN0YWdlSWQ6IHN0YW1wLnN0YWdlSWQsXG4gICAgcnVudGltZVN0YWdlSWQ6IHN0YW1wLnJ1bnRpbWVTdGFnZUlkLFxuICAgIHN0YWdlTmFtZTogc3RhbXAuc3RhZ2VOYW1lLFxuICAgIC4uLihoYXMoc3RhbXAsICdwYXJlbnRTdGFnZUlkJykgJiYgeyBwYXJlbnRTdGFnZUlkOiBzdGFtcC5wYXJlbnRTdGFnZUlkIH0pLFxuICAgIC4uLihzdGFtcC5wYXJlbnRSdW50aW1lU3RhZ2VJZCAmJiB7IHBhcmVudFJ1bnRpbWVTdGFnZUlkOiBzdGFtcC5wYXJlbnRSdW50aW1lU3RhZ2VJZCB9KSxcbiAgICAuLi4oc3RhbXAubG9vcEl0ZXJhdGlvbiAhPT0gdW5kZWZpbmVkICYmIHsgbG9vcEl0ZXJhdGlvbjogc3RhbXAubG9vcEl0ZXJhdGlvbiB9KSxcbiAgICAuLi4oaGFzKHN0YW1wLCAnc3ViZmxvd0lkJykgJiYgeyBzdWJmbG93SWQ6IHN0YW1wLnN1YmZsb3dJZCB9KSxcbiAgICAuLi4oaGFzKHN0YW1wLCAnc3ViZmxvd1BhdGgnKSAmJiB7IHN1YmZsb3dQYXRoOiBzdGFtcC5zdWJmbG93UGF0aCB9KSxcbiAgICAvLyBPTkUgbWVhbmluZyAoRjcpOiBob3cgbWFueSBzdWJmbG93cyBkZWVwIHRoZSBzdGFnZSdzIEFERFJFU1MgaXMg4oCUIHJlYWRcbiAgICAvLyBvZmYgdGhlIHJ1bnRpbWVTdGFnZUlkLCBzbyBldmVyeSBzdGFtcCAoc3RhZ2UsIHJvb3QsIHJlc3VtZSkgYWdyZWVzLlxuICAgIGRlcHRoOiBzdWJmbG93U2VnbWVudHNPZihzdGFtcC5ydW50aW1lU3RhZ2VJZCkubGVuZ3RoLFxuICAgIC4uLihzdGFtcC5yZXN1bWVkRnJvbSAmJiB7IHJlc3VtZWRGcm9tOiBzdGFtcC5yZXN1bWVkRnJvbSB9KSxcbiAgfTtcbn1cblxuLyoqIE93bi1rZXkgcHJlc2VuY2Ug4oCUIGB1bmRlZmluZWRgIGNvdW50cyBhcyBwcmVzZW50IChhIHN0YWdlIHN0YW1wIGFsd2F5cyBuYW1lcyB0aGVzZSBrZXlzKS4gKi9cbmZ1bmN0aW9uIGhhcyhzdGFtcDogVHJhdmVyc2FsU3RhbXAsIGtleTogJ3BhcmVudFN0YWdlSWQnIHwgJ3N1YmZsb3dJZCcgfCAnc3ViZmxvd1BhdGgnKTogYm9vbGVhbiB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc3RhbXAsIGtleSk7XG59XG5cbi8qKiBUaGUgc3ludGhldGljIHN0YWdlIGlkIG9mIHRoZSBydW4tYm91bmRhcnkgc3RhbXAgKGBvblJ1blN0YXJ0YCAvIGBvblJ1bkVuZGAgLyBgb25SdW5GYWlsZWRgKS4gKi9cbmNvbnN0IFJPT1RfU1RBR0VfSUQgPSAnX19yb290X18nO1xuXG4vKipcbiAqIFRoZSBydW4tYm91bmRhcnkgc3RhbXA6IHJvb3Qtc3RhZ2UgZGVmYXVsdHMgKGAnX19yb290X18nYCwgYCdfX3Jvb3RfXyMwJ2AsXG4gKiBkZXB0aCAwKSBzbyB0aGUgYHJ1bklkYCBpcyByZWxpYWJseSBhdmFpbGFibGUgb24gcnVuIGV2ZW50cyB3aXRob3V0IGZvcmNpbmdcbiAqIHJlY29yZGVycyB0byBoYW5kbGUgYHRyYXZlcnNhbENvbnRleHQgPT09IHVuZGVmaW5lZGAuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByb290VHJhdmVyc2FsQ29udGV4dChydW5JZDogc3RyaW5nKTogVHJhdmVyc2FsQ29udGV4dCB7XG4gIHJldHVybiB0cmF2ZXJzYWxDb250ZXh0Rm9yKHtcbiAgICBydW5JZCxcbiAgICBzdGFnZUlkOiBST09UX1NUQUdFX0lELFxuICAgIHJ1bnRpbWVTdGFnZUlkOiBidWlsZFJ1bnRpbWVTdGFnZUlkKFJPT1RfU1RBR0VfSUQsIDApLFxuICAgIHN0YWdlTmFtZTogUk9PVF9TVEFHRV9JRCxcbiAgfSk7XG59XG5cbi8qKlxuICogVGhlIGBvblJlc3VtZWAgc3RhbXAuIE5hbWVzIHRoZSBzdGFuZC1pbidzIG93biBleGVjdXRpb24gKGBydW50aW1lU3RhZ2VJZGAsXG4gKiB0aGUgaWQgaXRzIGNvbW1pdCBjYXJyaWVzKSwgdGhlIFJFQUwgc3ViZmxvdyBpdCBydW5zIGluIOKAlCBgc3ViZmxvd0lkYCBpcyB0aGVcbiAqIHBhdXNlZCBzdGFnZSdzIGlubmVybW9zdCBzdWJmbG93IChgY2hlY2twb2ludC5zdWJmbG93UGF0aGAncyBsYXN0IGVudHJ5LCB0aGVcbiAqIHByZWZpeGVkIGlkIGV2ZXJ5IGluLXN1YmZsb3cgc3RhbXAgY2FycmllcyksIGFic2VudCBhdCB0aGUgdG9wIGxldmVsIOKAlCBhbmRcbiAqIHRoZSBzYW1lIGBkZXB0aGAgaXRzIG93biBzdGFnZSBldmVudHMgY2FycnkgKGJvdGggcmVhZCB0aGUgYWRkcmVzcykuXG4gKiBgcmVzdW1lZEZyb21gIExJTktTIHRvIHRoZSBwYXVzZWQgZXhlY3V0aW9uIChPVGVsIHNwYW4tbGluayBzdHlsZSwgcmVhZCBvZmZcbiAqIGBjaGVja3BvaW50LnBhdXNlZEV4ZWN1dGlvbmApIGluc3RlYWQgb2YgZm9yZWNhc3RpbmcgYSBwYXJlbnQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXN1bWVUcmF2ZXJzYWxDb250ZXh0KHJlc3VtZToge1xuICByZWFkb25seSBydW5JZDogc3RyaW5nO1xuICByZWFkb25seSBzdGFnZUlkOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHN0YWdlTmFtZTogc3RyaW5nO1xuICByZWFkb25seSBydW50aW1lU3RhZ2VJZDogUnVudGltZVN0YWdlSWQ7XG4gIC8qKiBgY2hlY2twb2ludC5zdWJmbG93UGF0aGA6IHRoZSBwcmVmaXhlZCBpZCBvZiBldmVyeSBzdWJmbG93IG9uIHRoZSB3YXkgZG93biwgb3V0ZXJtb3N0IGZpcnN0LiAqL1xuICByZWFkb25seSBzdWJmbG93UGF0aDogcmVhZG9ubHkgc3RyaW5nW107XG4gIHJlYWRvbmx5IHJlc3VtZWRGcm9tPzogUmVzdW1lTGluaztcbn0pOiBUcmF2ZXJzYWxDb250ZXh0IHtcbiAgY29uc3QgaW5uZXJtb3N0ID0gcmVzdW1lLnN1YmZsb3dQYXRoW3Jlc3VtZS5zdWJmbG93UGF0aC5sZW5ndGggLSAxXTtcbiAgcmV0dXJuIHRyYXZlcnNhbENvbnRleHRGb3Ioe1xuICAgIHJ1bklkOiByZXN1bWUucnVuSWQsXG4gICAgc3RhZ2VJZDogcmVzdW1lLnN0YWdlSWQsXG4gICAgcnVudGltZVN0YWdlSWQ6IHJlc3VtZS5ydW50aW1lU3RhZ2VJZCxcbiAgICBzdGFnZU5hbWU6IHJlc3VtZS5zdGFnZU5hbWUsXG4gICAgLi4uKGlubmVybW9zdCAhPT0gdW5kZWZpbmVkICYmIHsgc3ViZmxvd0lkOiBpbm5lcm1vc3QgfSksXG4gICAgLi4uKHJlc3VtZS5yZXN1bWVkRnJvbSAmJiB7IHJlc3VtZWRGcm9tOiByZXN1bWUucmVzdW1lZEZyb20gfSksXG4gIH0pO1xufVxuIl19
86
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhdmVyc2FsQ29udGV4dC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvZW5naW5lL3RyYXZlcnNhbENvbnRleHQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FtQkc7QUFFSCxPQUFPLEVBQXVCLG1CQUFtQixFQUFFLGlCQUFpQixFQUFFLE1BQU0sV0FBVyxDQUFDO0FBcUJ4Rjs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLG1CQUFtQixDQUFDLEtBQXFCO0lBQ3ZELE9BQU87UUFDTCxLQUFLLEVBQUUsS0FBSyxDQUFDLEtBQUs7UUFDbEIsT0FBTyxFQUFFLEtBQUssQ0FBQyxPQUFPO1FBQ3RCLGNBQWMsRUFBRSxLQUFLLENBQUMsY0FBYztRQUNwQyxTQUFTLEVBQUUsS0FBSyxDQUFDLFNBQVM7UUFDMUIsR0FBRyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsZUFBZSxDQUFDLElBQUksRUFBRSxhQUFhLEVBQUUsS0FBSyxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQzFFLEdBQUcsQ0FBQyxLQUFLLENBQUMsb0JBQW9CLElBQUksRUFBRSxvQkFBb0IsRUFBRSxLQUFLLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztRQUN2RixHQUFHLENBQUMsS0FBSyxDQUFDLGFBQWEsS0FBSyxTQUFTLElBQUksRUFBRSxhQUFhLEVBQUUsS0FBSyxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ2hGLEdBQUcsQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLFdBQVcsQ0FBQyxJQUFJLEVBQUUsU0FBUyxFQUFFLEtBQUssQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUM5RCxHQUFHLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxhQUFhLENBQUMsSUFBSSxFQUFFLFdBQVcsRUFBRSxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDcEUseUVBQXlFO1FBQ3pFLHVFQUF1RTtRQUN2RSxLQUFLLEVBQUUsaUJBQWlCLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxDQUFDLE1BQU07UUFDckQsR0FBRyxDQUFDLEtBQUssQ0FBQyxXQUFXLElBQUksRUFBRSxXQUFXLEVBQUUsS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQzVELEdBQUcsQ0FBQyxLQUFLLENBQUMsV0FBVyxJQUFJLEVBQUUsV0FBVyxFQUFFLEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQztLQUM3RCxDQUFDO0FBQ0osQ0FBQztBQUVELGdHQUFnRztBQUNoRyxTQUFTLEdBQUcsQ0FBQyxLQUFxQixFQUFFLEdBQWtEO0lBQ3BGLE9BQU8sTUFBTSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQztBQUMxRCxDQUFDO0FBRUQsb0dBQW9HO0FBQ3BHLE1BQU0sYUFBYSxHQUFHLFVBQVUsQ0FBQztBQUVqQzs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLG9CQUFvQixDQUFDLEtBQWEsRUFBRSxXQUE0QjtJQUM5RSxPQUFPLG1CQUFtQixDQUFDO1FBQ3pCLEtBQUs7UUFDTCxPQUFPLEVBQUUsYUFBYTtRQUN0QixjQUFjLEVBQUUsbUJBQW1CLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQztRQUNyRCxTQUFTLEVBQUUsYUFBYTtRQUN4QixHQUFHLENBQUMsV0FBVyxJQUFJLEVBQUUsV0FBVyxFQUFFLENBQUM7S0FDcEMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQUVEOzs7Ozs7OztHQVFHO0FBQ0gsTUFBTSxVQUFVLHNCQUFzQixDQUFDLE1BVXRDO0lBQ0MsTUFBTSxTQUFTLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNwRSxPQUFPLG1CQUFtQixDQUFDO1FBQ3pCLEtBQUssRUFBRSxNQUFNLENBQUMsS0FBSztRQUNuQixPQUFPLEVBQUUsTUFBTSxDQUFDLE9BQU87UUFDdkIsY0FBYyxFQUFFLE1BQU0sQ0FBQyxjQUFjO1FBQ3JDLFNBQVMsRUFBRSxNQUFNLENBQUMsU0FBUztRQUMzQixHQUFHLENBQUMsU0FBUyxLQUFLLFNBQVMsSUFBSSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsQ0FBQztRQUN4RCxHQUFHLENBQUMsTUFBTSxDQUFDLFdBQVcsSUFBSSxFQUFFLFdBQVcsRUFBRSxNQUFNLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDOUQsR0FBRyxDQUFDLE1BQU0sQ0FBQyxXQUFXLElBQUksRUFBRSxXQUFXLEVBQUUsTUFBTSxDQUFDLFdBQVcsRUFBRSxDQUFDO0tBQy9ELENBQUMsQ0FBQztBQUNMLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIHRyYXZlcnNhbENvbnRleHQg4oCUIHRoZSBPTkUgY29uc3RydWN0b3Igb2YgYFRyYXZlcnNhbENvbnRleHRgIChGNywgOS4zNy4wKS5cbiAqXG4gKiBgVHJhdmVyc2FsQ29udGV4dGAgaXMgdGhlIGNvcnJlbGF0aW9uIHN0YW1wIGV2ZXJ5IEZsb3dSZWNvcmRlciBldmVudCBjYXJyaWVzXG4gKiAoXCJ0aGUgZW50aXJlIGV2ZW50LWNvcnJlbGF0aW9uIG1vZGVsIHJlc3RzIG9uXCIgc2NvcGUgYW5kIGZsb3cgZXZlbnRzIHNoYXJpbmdcbiAqIGl0KS4gVW50aWwgOS4zNi4wIHRocmVlIHNpdGVzIGJ1aWx0IGl0IGJ5IGhhbmQg4oCUIHRoZSB0cmF2ZXJzZXIgcGVyIHN0YWdlLCB0aGVcbiAqIHRyYXZlcnNlcidzIHN5bnRoZXRpYyBydW4tYm91bmRhcnkgcm9vdCwgYW5kIHRoZSBleGVjdXRvcidzIGBvblJlc3VtZWAg4oCUIGFuZFxuICogdGhlIHRoaXJkIGZvcmVjYXN0IHdoYXQgaXQgY291bGQgbm90IGtub3cgKGRlcHRoIDAsIG5vIHN1YmZsb3cpLiBOb3cgYWxsXG4gKiB0aHJlZSBjYWxsIGB0cmF2ZXJzYWxDb250ZXh0Rm9yYCwgdGhyb3VnaCB0aGUgdHdvIG5hbWVkIHNoYXBlcyBiZWxvdy5cbiAqXG4gKiBgZGVwdGhgIGhhcyBPTkUgbWVhbmluZyBvbiBldmVyeSBzdGFtcDogdGhlIHN1YmZsb3cgbmVzdGluZyBvZiB0aGUgc3RhZ2Unc1xuICogYWRkcmVzcywgcmVhZCBvZmYgaXRzIHJ1bnRpbWVTdGFnZUlkICg5LjM3LjAg4oCUIHN0YWdlIGV2ZW50cyB1c2VkIHRvIHN0YW1wXG4gKiB0aGUgcGFyZW50LWNoYWluIGxlbmd0aCBvZiB0aGUgc3RhZ2UncyBjb250ZXh0KS5cbiAqXG4gKiBLZXkgT1JERVIgYW5kIGtleSBQUkVTRU5DRSBhcmUgcGFydCBvZiB0aGUgYnl0ZXMgKGEgcmVjb3JkZXIgdGhhdCBzZXJpYWxpemVzXG4gKiB0aGUgc3RhbXAgc2VlcyB0aGVtKSwgc28gYHRyYXZlcnNhbENvbnRleHRGb3JgIHdyaXRlcyBhIGtleSBvbmx5IHdoZW4gdGhlXG4gKiBjYWxsZXIgcGFzc2VkIGl0IOKAlCBgcGFyZW50U3RhZ2VJZGAsIGBzdWJmbG93SWRgIGFuZCBgc3ViZmxvd1BhdGhgIGFyZSB3cml0dGVuXG4gKiBldmVuIHdoZW4gYHVuZGVmaW5lZGAgaWYgdGhlIGNhbGxlciBuYW1lcyB0aGVtLCB3aGljaCBpcyB3aGF0IGEgc3RhZ2Ugc3RhbXBcbiAqIGhhcyBhbHdheXMgZG9uZS5cbiAqL1xuXG5pbXBvcnQgeyB0eXBlIFJ1bnRpbWVTdGFnZUlkLCBidWlsZFJ1bnRpbWVTdGFnZUlkLCBzdWJmbG93U2VnbWVudHNPZiB9IGZyb20gJ2Zvb3R0cmFjZSc7XG5cbmltcG9ydCB0eXBlIHsgUnVuQ29ycmVsYXRpb24gfSBmcm9tICcuLi9hdHRlbXB0L3R5cGVzLmpzJztcbmltcG9ydCB0eXBlIHsgUmVzdW1lTGluaywgVHJhdmVyc2FsQ29udGV4dCB9IGZyb20gJy4vbmFycmF0aXZlL3R5cGVzLmpzJztcblxuLyoqIEV2ZXJ5dGhpbmcgYSBzdGFtcCBjYW4gY2Fycnk7IG9wdGlvbmFsIGtleXMgYXJlIHdyaXR0ZW4gb25seSB3aGVuIFBSRVNFTlQgb24gdGhpcyBvYmplY3QuICovXG5leHBvcnQgaW50ZXJmYWNlIFRyYXZlcnNhbFN0YW1wIHtcbiAgcmVhZG9ubHkgcnVuSWQ6IHN0cmluZztcbiAgcmVhZG9ubHkgc3RhZ2VJZDogc3RyaW5nO1xuICByZWFkb25seSBydW50aW1lU3RhZ2VJZDogc3RyaW5nO1xuICByZWFkb25seSBzdGFnZU5hbWU6IHN0cmluZztcbiAgcmVhZG9ubHkgcGFyZW50U3RhZ2VJZD86IHN0cmluZztcbiAgcmVhZG9ubHkgcGFyZW50UnVudGltZVN0YWdlSWQ/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IGxvb3BJdGVyYXRpb24/OiBudW1iZXI7XG4gIHJlYWRvbmx5IHN1YmZsb3dJZD86IHN0cmluZztcbiAgcmVhZG9ubHkgc3ViZmxvd1BhdGg/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHJlc3VtZWRGcm9tPzogUmVzdW1lTGluaztcbiAgLyoqIFRoZSBsZWcncyBjb3JyZWxhdGlvbiDigJQgdGhlIHNhbWUgZnJvemVuIG9iamVjdCBvbiBldmVyeSBzdGFtcDsgd3JpdHRlbiBsYXN0LCBvbmx5IHdoZW4gcHJlc2VudC4gKi9cbiAgcmVhZG9ubHkgY29ycmVsYXRpb24/OiBSdW5Db3JyZWxhdGlvbjtcbn1cblxuLyoqXG4gKiBCdWlsZCB0aGUgc3RhbXAuIGBwYXJlbnRTdGFnZUlkYCAvIGBzdWJmbG93SWRgIC8gYHN1YmZsb3dQYXRoYCBhcmUgY29waWVkXG4gKiB3aGVuIHRoZSBrZXkgaXMgcHJlc2VudCAoZXZlbiBhcyBgdW5kZWZpbmVkYCk7IGBwYXJlbnRSdW50aW1lU3RhZ2VJZGAsXG4gKiBgbG9vcEl0ZXJhdGlvbmAsIGByZXN1bWVkRnJvbWAgYW5kIGBjb3JyZWxhdGlvbmAgb25seSB3aGVuIHRoZXkgaG9sZCBhIHZhbHVlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdHJhdmVyc2FsQ29udGV4dEZvcihzdGFtcDogVHJhdmVyc2FsU3RhbXApOiBUcmF2ZXJzYWxDb250ZXh0IHtcbiAgcmV0dXJuIHtcbiAgICBydW5JZDogc3RhbXAucnVuSWQsXG4gICAgc3RhZ2VJZDogc3RhbXAuc3RhZ2VJZCxcbiAgICBydW50aW1lU3RhZ2VJZDogc3RhbXAucnVudGltZVN0YWdlSWQsXG4gICAgc3RhZ2VOYW1lOiBzdGFtcC5zdGFnZU5hbWUsXG4gICAgLi4uKGhhcyhzdGFtcCwgJ3BhcmVudFN0YWdlSWQnKSAmJiB7IHBhcmVudFN0YWdlSWQ6IHN0YW1wLnBhcmVudFN0YWdlSWQgfSksXG4gICAgLi4uKHN0YW1wLnBhcmVudFJ1bnRpbWVTdGFnZUlkICYmIHsgcGFyZW50UnVudGltZVN0YWdlSWQ6IHN0YW1wLnBhcmVudFJ1bnRpbWVTdGFnZUlkIH0pLFxuICAgIC4uLihzdGFtcC5sb29wSXRlcmF0aW9uICE9PSB1bmRlZmluZWQgJiYgeyBsb29wSXRlcmF0aW9uOiBzdGFtcC5sb29wSXRlcmF0aW9uIH0pLFxuICAgIC4uLihoYXMoc3RhbXAsICdzdWJmbG93SWQnKSAmJiB7IHN1YmZsb3dJZDogc3RhbXAuc3ViZmxvd0lkIH0pLFxuICAgIC4uLihoYXMoc3RhbXAsICdzdWJmbG93UGF0aCcpICYmIHsgc3ViZmxvd1BhdGg6IHN0YW1wLnN1YmZsb3dQYXRoIH0pLFxuICAgIC8vIE9ORSBtZWFuaW5nIChGNyk6IGhvdyBtYW55IHN1YmZsb3dzIGRlZXAgdGhlIHN0YWdlJ3MgQUREUkVTUyBpcyDigJQgcmVhZFxuICAgIC8vIG9mZiB0aGUgcnVudGltZVN0YWdlSWQsIHNvIGV2ZXJ5IHN0YW1wIChzdGFnZSwgcm9vdCwgcmVzdW1lKSBhZ3JlZXMuXG4gICAgZGVwdGg6IHN1YmZsb3dTZWdtZW50c09mKHN0YW1wLnJ1bnRpbWVTdGFnZUlkKS5sZW5ndGgsXG4gICAgLi4uKHN0YW1wLnJlc3VtZWRGcm9tICYmIHsgcmVzdW1lZEZyb206IHN0YW1wLnJlc3VtZWRGcm9tIH0pLFxuICAgIC4uLihzdGFtcC5jb3JyZWxhdGlvbiAmJiB7IGNvcnJlbGF0aW9uOiBzdGFtcC5jb3JyZWxhdGlvbiB9KSxcbiAgfTtcbn1cblxuLyoqIE93bi1rZXkgcHJlc2VuY2Ug4oCUIGB1bmRlZmluZWRgIGNvdW50cyBhcyBwcmVzZW50IChhIHN0YWdlIHN0YW1wIGFsd2F5cyBuYW1lcyB0aGVzZSBrZXlzKS4gKi9cbmZ1bmN0aW9uIGhhcyhzdGFtcDogVHJhdmVyc2FsU3RhbXAsIGtleTogJ3BhcmVudFN0YWdlSWQnIHwgJ3N1YmZsb3dJZCcgfCAnc3ViZmxvd1BhdGgnKTogYm9vbGVhbiB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc3RhbXAsIGtleSk7XG59XG5cbi8qKiBUaGUgc3ludGhldGljIHN0YWdlIGlkIG9mIHRoZSBydW4tYm91bmRhcnkgc3RhbXAgKGBvblJ1blN0YXJ0YCAvIGBvblJ1bkVuZGAgLyBgb25SdW5GYWlsZWRgKS4gKi9cbmNvbnN0IFJPT1RfU1RBR0VfSUQgPSAnX19yb290X18nO1xuXG4vKipcbiAqIFRoZSBydW4tYm91bmRhcnkgc3RhbXA6IHJvb3Qtc3RhZ2UgZGVmYXVsdHMgKGAnX19yb290X18nYCwgYCdfX3Jvb3RfXyMwJ2AsXG4gKiBkZXB0aCAwKSBzbyB0aGUgYHJ1bklkYCBpcyByZWxpYWJseSBhdmFpbGFibGUgb24gcnVuIGV2ZW50cyB3aXRob3V0IGZvcmNpbmdcbiAqIHJlY29yZGVycyB0byBoYW5kbGUgYHRyYXZlcnNhbENvbnRleHQgPT09IHVuZGVmaW5lZGAuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByb290VHJhdmVyc2FsQ29udGV4dChydW5JZDogc3RyaW5nLCBjb3JyZWxhdGlvbj86IFJ1bkNvcnJlbGF0aW9uKTogVHJhdmVyc2FsQ29udGV4dCB7XG4gIHJldHVybiB0cmF2ZXJzYWxDb250ZXh0Rm9yKHtcbiAgICBydW5JZCxcbiAgICBzdGFnZUlkOiBST09UX1NUQUdFX0lELFxuICAgIHJ1bnRpbWVTdGFnZUlkOiBidWlsZFJ1bnRpbWVTdGFnZUlkKFJPT1RfU1RBR0VfSUQsIDApLFxuICAgIHN0YWdlTmFtZTogUk9PVF9TVEFHRV9JRCxcbiAgICAuLi4oY29ycmVsYXRpb24gJiYgeyBjb3JyZWxhdGlvbiB9KSxcbiAgfSk7XG59XG5cbi8qKlxuICogVGhlIGBvblJlc3VtZWAgc3RhbXAuIE5hbWVzIHRoZSBzdGFuZC1pbidzIG93biBleGVjdXRpb24gKGBydW50aW1lU3RhZ2VJZGAsXG4gKiB0aGUgaWQgaXRzIGNvbW1pdCBjYXJyaWVzKSwgdGhlIFJFQUwgc3ViZmxvdyBpdCBydW5zIGluIOKAlCBgc3ViZmxvd0lkYCBpcyB0aGVcbiAqIHBhdXNlZCBzdGFnZSdzIGlubmVybW9zdCBzdWJmbG93IChgY2hlY2twb2ludC5zdWJmbG93UGF0aGAncyBsYXN0IGVudHJ5LCB0aGVcbiAqIHByZWZpeGVkIGlkIGV2ZXJ5IGluLXN1YmZsb3cgc3RhbXAgY2FycmllcyksIGFic2VudCBhdCB0aGUgdG9wIGxldmVsIOKAlCBhbmRcbiAqIHRoZSBzYW1lIGBkZXB0aGAgaXRzIG93biBzdGFnZSBldmVudHMgY2FycnkgKGJvdGggcmVhZCB0aGUgYWRkcmVzcykuXG4gKiBgcmVzdW1lZEZyb21gIExJTktTIHRvIHRoZSBwYXVzZWQgZXhlY3V0aW9uIChPVGVsIHNwYW4tbGluayBzdHlsZSwgcmVhZCBvZmZcbiAqIGBjaGVja3BvaW50LnBhdXNlZEV4ZWN1dGlvbmApIGluc3RlYWQgb2YgZm9yZWNhc3RpbmcgYSBwYXJlbnQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXN1bWVUcmF2ZXJzYWxDb250ZXh0KHJlc3VtZToge1xuICByZWFkb25seSBydW5JZDogc3RyaW5nO1xuICByZWFkb25seSBzdGFnZUlkOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHN0YWdlTmFtZTogc3RyaW5nO1xuICByZWFkb25seSBydW50aW1lU3RhZ2VJZDogUnVudGltZVN0YWdlSWQ7XG4gIC8qKiBgY2hlY2twb2ludC5zdWJmbG93UGF0aGA6IHRoZSBwcmVmaXhlZCBpZCBvZiBldmVyeSBzdWJmbG93IG9uIHRoZSB3YXkgZG93biwgb3V0ZXJtb3N0IGZpcnN0LiAqL1xuICByZWFkb25seSBzdWJmbG93UGF0aDogcmVhZG9ubHkgc3RyaW5nW107XG4gIHJlYWRvbmx5IHJlc3VtZWRGcm9tPzogUmVzdW1lTGluaztcbiAgLyoqIFRoZSBSRVNVTUVEIGxlZydzIGNvcnJlbGF0aW9uIChmcm9tIGByZXN1bWUoKWAncyBlbnYpIOKAlCBuZXZlciB0aGUgcGF1c2VkIGxlZydzLiAqL1xuICByZWFkb25seSBjb3JyZWxhdGlvbj86IFJ1bkNvcnJlbGF0aW9uO1xufSk6IFRyYXZlcnNhbENvbnRleHQge1xuICBjb25zdCBpbm5lcm1vc3QgPSByZXN1bWUuc3ViZmxvd1BhdGhbcmVzdW1lLnN1YmZsb3dQYXRoLmxlbmd0aCAtIDFdO1xuICByZXR1cm4gdHJhdmVyc2FsQ29udGV4dEZvcih7XG4gICAgcnVuSWQ6IHJlc3VtZS5ydW5JZCxcbiAgICBzdGFnZUlkOiByZXN1bWUuc3RhZ2VJZCxcbiAgICBydW50aW1lU3RhZ2VJZDogcmVzdW1lLnJ1bnRpbWVTdGFnZUlkLFxuICAgIHN0YWdlTmFtZTogcmVzdW1lLnN0YWdlTmFtZSxcbiAgICAuLi4oaW5uZXJtb3N0ICE9PSB1bmRlZmluZWQgJiYgeyBzdWJmbG93SWQ6IGlubmVybW9zdCB9KSxcbiAgICAuLi4ocmVzdW1lLnJlc3VtZWRGcm9tICYmIHsgcmVzdW1lZEZyb206IHJlc3VtZS5yZXN1bWVkRnJvbSB9KSxcbiAgICAuLi4ocmVzdW1lLmNvcnJlbGF0aW9uICYmIHsgY29ycmVsYXRpb246IHJlc3VtZS5jb3JyZWxhdGlvbiB9KSxcbiAgfSk7XG59XG4iXX0=
@@ -4,7 +4,7 @@
4
4
  * Centralizes type definitions to avoid circular dependencies.
5
5
  * Every handler receives HandlerDeps (the DI bag) instead of importing the traverser.
6
6
  */
7
- import type { LogAddress } from 'foottrace';
7
+ import type { LogAddress, LogOutcome, Meta } from 'foottrace';
8
8
  import type { SharedMemory } from 'foottrace/write';
9
9
  import type { FlowControlType, FlowMessage } from '../memory/frameTypes.js';
10
10
  import type { StageContext } from '../memory/StageContext.js';
@@ -104,57 +104,7 @@ export interface ParallelForEachConfig<TItem = any, TScope = any> {
104
104
  */
105
105
  failFast?: boolean;
106
106
  }
107
- /**
108
- * Declarative per-stage retry policy.
109
- *
110
- * WHY this exists: a retry hand-rolled inside a stage function is invisible to
111
- * the trace. The stage shows one execution, the commit log shows one bundle,
112
- * and the two failed calls that preceded the successful one left no mark
113
- * anywhere — an unexplained behaviour in a library whose whole thesis is that
114
- * nothing invisible happens. Declared here instead, every attempt is part of
115
- * the record: each failed attempt fires `FlowRecorder.onStageRetry` with the
116
- * attempt number, the wait, and the structured error.
117
- *
118
- * A POLICY, not a stage kind — `retry` sits on a normal stage the way
119
- * `isPausable` / `isStreaming` do. The serialized node `type` is unchanged and
120
- * every existing consumer keeps rendering the stage exactly as before.
121
- *
122
- * @example
123
- * ```ts
124
- * flowChart<State>('Fetch user', fetchFn, 'fetch-user')
125
- * .retry({ attempts: 3, backoffMs: (n) => 100 * 2 ** (n - 1) })
126
- * ```
127
- */
128
- export interface RetryPolicy {
129
- /**
130
- * How many times the stage function may run in total, INCLUDING the first
131
- * run. Must be an integer >= 1; `1` means "no retry" (a declared no-op,
132
- * accepted so a policy can be switched off without deleting it).
133
- */
134
- attempts: number;
135
- /**
136
- * How long to wait before the NEXT attempt. Either a fixed number of
137
- * milliseconds, or a function of the attempt that just FAILED (1-based)
138
- * returning milliseconds — `(n) => 100 * 2 ** (n - 1)` is exponential
139
- * backoff. Omitted (or a non-finite / negative result) means no wait.
140
- *
141
- * The wait is a plain awaited timer that is CANCELLED by the run's
142
- * `AbortSignal`. It is not a pause: a chart cannot be checkpointed in the
143
- * middle of a backoff.
144
- */
145
- backoffMs?: number | ((attempt: number) => number);
146
- /**
147
- * Is THIS error worth another attempt? Defaults to retrying every error.
148
- * Returning `false` ends the stage immediately on the normal error path —
149
- * exactly as if no policy had been declared, and with no retry event (the
150
- * policy chose not to act; there is nothing to report that the error event
151
- * does not already say).
152
- *
153
- * A throw from this predicate is treated as `false` — a broken predicate
154
- * must not turn a failing stage into an infinite retry loop.
155
- */
156
- retryOn?: (error: unknown) => boolean;
157
- }
107
+ export type { RetryPolicy, StageTouches } from '../attempt/types.js';
158
108
  /**
159
109
  * Controls how array values from outputMapper are merged into parent scope.
160
110
  */
@@ -438,6 +388,14 @@ export interface IExecutionRuntime {
438
388
  };
439
389
  setRootObject(path: string[], key: string, value: unknown): void;
440
390
  getPipelines(): string[];
391
+ /**
392
+ * Where a mount's own log writes as it lands (10.1, P6) — the run's sink at this log's address plus the mount's
393
+ * `runtimeStageId`. `undefined` when this runtime's log writes to no sink. `SubflowExecutor` hands it to the
394
+ * nested runtime it constructs.
395
+ */
396
+ recordFor?(mountRuntimeStageId: string, meta?: Meta): unknown;
397
+ /** Tell the sink this runtime's log ended (10.1, P6) — a mount's at its exit. No-op without a sink. */
398
+ closeRecord?(outcome: LogOutcome, meta?: Meta): void;
441
399
  }
442
400
  /**
443
401
  * ExecutionEnv — infrastructure values that propagate through nested executors.
@@ -452,12 +410,39 @@ export interface IExecutionRuntime {
452
410
  * parent and child flowcharts.
453
411
  */
454
412
  export interface ExecutionEnv {
455
- /** AbortSignal for cooperative cancellation across nested executors. */
413
+ /**
414
+ * AbortSignal for cooperative cancellation across nested executors. Honoured by the engine (10.1): it ends the
415
+ * run like `RunOptions.signal`. Under a run that has a signal or a deadline AND an env, a stage reads the run's
416
+ * ONE effective signal here — `RunOptions.signal`, this one and the deadline's timer, composed.
417
+ */
456
418
  readonly signal?: AbortSignal;
457
- /** Timeout budget in milliseconds. */
419
+ /** Timeout budget in milliseconds. Readable only — the run's deadline is {@link deadline}. */
458
420
  readonly timeoutMs?: number;
459
- /** Trace identifier for distributed tracing / observability. */
421
+ /**
422
+ * Trace identifier for distributed tracing / observability. With `operationId` (or alone) it becomes the run's
423
+ * `RunCorrelation`; it wins over the trace id of `traceparent`. 1–256 printable ASCII characters with no space
424
+ * (since 10.1 anything else rejects the run with a `TypeError` naming the field — the id rides every event);
425
+ * an empty string is no id.
426
+ */
460
427
  readonly traceId?: string;
428
+ /**
429
+ * The caller's unit of work (W3C's parent-id) — part of the run's `RunCorrelation`; wins over the header's
430
+ * parent-id. Needs a trace: `traceId` or `traceparent` (refused alone). Same character rule as `traceId`.
431
+ */
432
+ readonly operationId?: string;
433
+ /**
434
+ * A W3C `traceparent` header, usually straight from an inbound request. Parsed STRICTLY once per run — a
435
+ * malformed one refuses the run with a `TraceparentError` naming the reason (never the header). Stages read
436
+ * back (`$getEnv()`) exactly `RunCorrelation.traceparent` — the canonical header of the effective ids — or no
437
+ * key when the run's correlation carries none. Correlation only: never identity or authorisation.
438
+ */
439
+ readonly traceparent?: string;
440
+ /**
441
+ * The run's deadline, epoch milliseconds (10.1) — the earliest of `RunOptions.deadline`, `now + RunOptions.timeoutMs`
442
+ * and a deadline given here. The run's signal aborts when it passes; every attempt is capped by the time left.
443
+ * Inherited by subflows. Read it through `scope.$attempt().timeLeftMs()`.
444
+ */
445
+ readonly deadline?: number;
461
446
  }
462
447
  /**
463
448
  * HandlerDeps — Dependency injection bag passed to all handler modules.
@@ -496,10 +481,20 @@ export interface HandlerDeps<TOut = any, TScope = any> {
496
481
  }
497
482
  /** Options for FlowChartExecutor.run(). */
498
483
  export interface RunOptions {
499
- /** AbortSignal for cooperative cancellation. */
484
+ /** AbortSignal for cooperative cancellation. Composed with `env.signal` and the deadline (10.1). */
500
485
  signal?: AbortSignal;
501
- /** Timeout in milliseconds. Creates an internal AbortController. */
486
+ /**
487
+ * Timeout in milliseconds: the run's deadline is `now + timeoutMs`. The run aborts when it passes (rejecting with
488
+ * `Execution timed out after <timeoutMs>ms`), stages read it as `env.deadline`, and every stage records its
489
+ * attempt (`StageSnapshot.attempts`). Honoured beside a `signal` since 10.1 (it used to be ignored there).
490
+ */
502
491
  timeoutMs?: number;
492
+ /**
493
+ * The run's deadline, epoch milliseconds (10.1) — `Date.now() + 120_000`. Same effect as `timeoutMs`; when both
494
+ * are given, the earlier wins. A deadline already past stops the run before its first stage. A resumed leg has
495
+ * its own: pass it again to `resume()`.
496
+ */
497
+ deadline?: number;
503
498
  /**
504
499
  * Runtime input data for the pipeline.
505
500
  * Becomes the readOnlyContext accessible via `scope.getArgs()`.
@@ -27,4 +27,4 @@ export var ArrayMergeMode;
27
27
  /** Overwrite parent array with subflow output. Use for Dynamic loops. */
28
28
  ArrayMergeMode["Replace"] = "replace";
29
29
  })(ArrayMergeMode || (ArrayMergeMode = {}));
30
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL2VuZ2luZS90eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7R0FLRztBQWlCSCxPQUFPLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQWU5RSxvQ0FBb0M7QUFDcEMsd0RBQXdEO0FBQ3hELE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBWTtJQUNwQyxJQUFJLEVBQUUsQ0FBQyxPQUFhLEVBQUUsR0FBRyxJQUFXLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLEdBQUcsSUFBSSxDQUFDO0lBQ3ZFLEdBQUcsRUFBRSxDQUFDLE9BQWEsRUFBRSxHQUFHLElBQVcsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsR0FBRyxJQUFJLENBQUM7SUFDckUsS0FBSyxFQUFFLENBQUMsT0FBYSxFQUFFLEdBQUcsSUFBVyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxHQUFHLElBQUksQ0FBQztJQUN6RSxLQUFLLEVBQUUsQ0FBQyxPQUFhLEVBQUUsR0FBRyxJQUFXLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLEdBQUcsSUFBSSxDQUFDO0lBQ3pFLElBQUksRUFBRSxDQUFDLE9BQWEsRUFBRSxHQUFHLElBQVcsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsR0FBRyxJQUFJLENBQUM7Q0FDeEUsQ0FBQztBQXVLRiw4RUFBOEU7QUFDOUUsVUFBVTtBQUNWLDhFQUE4RTtBQUU5RTs7R0FFRztBQUNILE1BQU0sQ0FBTixJQUFZLGNBS1g7QUFMRCxXQUFZLGNBQWM7SUFDeEIsd0ZBQXdGO0lBQ3hGLG1DQUFpQixDQUFBO0lBQ2pCLHlFQUF5RTtJQUN6RSxxQ0FBbUIsQ0FBQTtBQUNyQixDQUFDLEVBTFcsY0FBYyxLQUFkLGNBQWMsUUFLekIiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIHR5cGVzLnRzIOKAlCBBbGwgdHlwZSBkZWZpbml0aW9ucyBmb3IgdGhlIGVuZ2luZSBsaWJyYXJ5LlxuICpcbiAqIENlbnRyYWxpemVzIHR5cGUgZGVmaW5pdGlvbnMgdG8gYXZvaWQgY2lyY3VsYXIgZGVwZW5kZW5jaWVzLlxuICogRXZlcnkgaGFuZGxlciByZWNlaXZlcyBIYW5kbGVyRGVwcyAodGhlIERJIGJhZykgaW5zdGVhZCBvZiBpbXBvcnRpbmcgdGhlIHRyYXZlcnNlci5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IExvZ0FkZHJlc3MgfSBmcm9tICdmb290dHJhY2UnO1xuaW1wb3J0IHR5cGUgeyBTaGFyZWRNZW1vcnkgfSBmcm9tICdmb290dHJhY2Uvd3JpdGUnO1xuXG5pbXBvcnQgdHlwZSB7IEZsb3dDb250cm9sVHlwZSwgRmxvd01lc3NhZ2UgfSBmcm9tICcuLi9tZW1vcnkvZnJhbWVUeXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7IFN0YWdlQ29udGV4dCB9IGZyb20gJy4uL21lbW9yeS9TdGFnZUNvbnRleHQuanMnO1xuaW1wb3J0IHR5cGUgeyBTY29wZVByb3RlY3Rpb25Nb2RlIH0gZnJvbSAnLi4vc2NvcGUvcHJvdGVjdGlvbi90eXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7IERlY2lkZXIsIFNlbGVjdG9yLCBTdGFnZU5vZGUgfSBmcm9tICcuL2dyYXBoL1N0YWdlTm9kZS5qcyc7XG5pbXBvcnQgdHlwZSB7IFF1ZXVlZFBhdXNlLCBSZXN1bWVFbnRyeSB9IGZyb20gJy4vaGFuZGxlcnMvUmVzdW1lRW50cnkuanMnO1xuaW1wb3J0IHR5cGUgeyBJQ29udHJvbEZsb3dOYXJyYXRpdmUgfSBmcm9tICcuL25hcnJhdGl2ZS90eXBlcy5qcyc7XG5cbi8vIFJlLWV4cG9ydCBTdGFnZU5vZGUgdHlwZXMgZm9yIGNvbnZlbmllbmNlXG5leHBvcnQgdHlwZSB7IERlY2lkZXIsIFNlbGVjdG9yLCBTdGFnZU5vZGUgfSBmcm9tICcuL2dyYXBoL1N0YWdlTm9kZS5qcyc7XG5cbi8vIFJlLWV4cG9ydCBwYXVzZSB0eXBlcyBmcm9tIHBhdXNlLyBsaWJyYXJ5XG5leHBvcnQgdHlwZSB7IEZsb3djaGFydENoZWNrcG9pbnQsIFBhdXNhYmxlSGFuZGxlciwgUGF1c2VSZXN1bHQgfSBmcm9tICcuLi9wYXVzZS9pbmRleC5qcyc7XG5leHBvcnQgeyBpc1BhdXNlUmVzdWx0LCBpc1BhdXNlU2lnbmFsLCBQYXVzZVNpZ25hbCB9IGZyb20gJy4uL3BhdXNlL2luZGV4LmpzJztcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBMb2dnZXJcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vKiogTWluaW1hbCBsb2dnaW5nIGNvbnRyYWN0LiBNaXJyb3JzIENvbnNvbGUgQVBJIHN1YnNldC4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSUxvZ2dlciB7XG4gIGluZm8obWVzc2FnZT86IGFueSwgLi4ub3B0aW9uYWxQYXJhbXM6IGFueVtdKTogdm9pZDtcbiAgbG9nKG1lc3NhZ2U/OiBhbnksIC4uLm9wdGlvbmFsUGFyYW1zOiBhbnlbXSk6IHZvaWQ7XG4gIGRlYnVnKG1lc3NhZ2U/OiBhbnksIC4uLm9wdGlvbmFsUGFyYW1zOiBhbnlbXSk6IHZvaWQ7XG4gIGVycm9yKG1lc3NhZ2U/OiBhbnksIC4uLm9wdGlvbmFsUGFyYW1zOiBhbnlbXSk6IHZvaWQ7XG4gIHdhcm4obWVzc2FnZT86IGFueSwgLi4ub3B0aW9uYWxQYXJhbXM6IGFueVtdKTogdm9pZDtcbn1cblxuLyoqIERlZmF1bHQgY29uc29sZS1iYXNlZCBsb2dnZXIuICovXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAtLSB0cml2aWFsIGNvbnNvbGUgZGVsZWdhdGlvbiAqL1xuZXhwb3J0IGNvbnN0IGRlZmF1bHRMb2dnZXI6IElMb2dnZXIgPSB7XG4gIGluZm86IChtZXNzYWdlPzogYW55LCAuLi5hcmdzOiBhbnlbXSkgPT4gY29uc29sZS5pbmZvKG1lc3NhZ2UsIC4uLmFyZ3MpLFxuICBsb2c6IChtZXNzYWdlPzogYW55LCAuLi5hcmdzOiBhbnlbXSkgPT4gY29uc29sZS5sb2cobWVzc2FnZSwgLi4uYXJncyksXG4gIGRlYnVnOiAobWVzc2FnZT86IGFueSwgLi4uYXJnczogYW55W10pID0+IGNvbnNvbGUuZGVidWcobWVzc2FnZSwgLi4uYXJncyksXG4gIGVycm9yOiAobWVzc2FnZT86IGFueSwgLi4uYXJnczogYW55W10pID0+IGNvbnNvbGUuZXJyb3IobWVzc2FnZSwgLi4uYXJncyksXG4gIHdhcm46IChtZXNzYWdlPzogYW55LCAuLi5hcmdzOiBhbnlbXSkgPT4gY29uc29sZS53YXJuKG1lc3NhZ2UsIC4uLmFyZ3MpLFxufTtcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBTdGFnZSBGdW5jdGlvblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8qKiBDYWxsYmFjayB0aGF0IHJlY2VpdmVzIHRva2VucyBkdXJpbmcgc3RyZWFtaW5nLiAqL1xuZXhwb3J0IHR5cGUgU3RyZWFtQ2FsbGJhY2sgPSAodG9rZW46IHN0cmluZykgPT4gdm9pZDtcblxuLyoqXG4gKiBUaGUgZnVuY3Rpb24gc2lnbmF0dXJlIGZvciBzdGFnZSBoYW5kbGVycy5cbiAqIC0gVE91dDogcmV0dXJuIHR5cGUgcHJvZHVjZWQgYnkgdGhlIHN0YWdlXG4gKiAtIFRTY29wZTogdGhlIHNjb3BlIG9iamVjdCBwYXNzZWQgdG8gdGhlIHN0YWdlXG4gKiAtIE9wdGlvbmFsIDNyZCBwYXJhbWV0ZXIgYHN0cmVhbUNhbGxiYWNrYCBpbmplY3RlZCBmb3Igc3RyZWFtaW5nIHN0YWdlcy5cbiAqL1xuZXhwb3J0IHR5cGUgU3RhZ2VGdW5jdGlvbjxUT3V0ID0gYW55LCBUU2NvcGUgPSBhbnk+ID0gKFxuICBzY29wZTogVFNjb3BlLFxuICBicmVha1BpcGVsaW5lOiAoKSA9PiB2b2lkLFxuICBzdHJlYW1DYWxsYmFjaz86IFN0cmVhbUNhbGxiYWNrLFxuKSA9PiBQcm9taXNlPFRPdXQgfCB2b2lkPiB8IFRPdXQgfCB2b2lkO1xuXG4vKipcbiAqIFN0YWdlIGZ1bmN0aW9uIGZvciBwYXVzYWJsZSBzdGFnZXMg4oCUIHJldHVybiB2YWx1ZSBpcyB0aGUgcGF1c2UgZGF0YSAoYW55IHR5cGUpLlxuICogUmV0dXJuIG5vbi12b2lkIHRvIHBhdXNlLCByZXR1cm4gdm9pZCB0byBjb250aW51ZSBub3JtYWxseS5cbiAqL1xuZXhwb3J0IHR5cGUgUGF1c2FibGVTdGFnZUZ1bmN0aW9uPFRTY29wZSA9IGFueT4gPSAoXG4gIHNjb3BlOiBUU2NvcGUsXG4gIGJyZWFrUGlwZWxpbmU6ICgpID0+IHZvaWQsXG4pID0+IFByb21pc2U8dW5rbm93bj4gfCB1bmtub3duO1xuXG4vKiogRmFjdG9yeSB0aGF0IGNyZWF0ZXMgYSBzY29wZSBpbnN0YW5jZSBmb3IgZWFjaCBzdGFnZS4gKi9cbmV4cG9ydCB0eXBlIFNjb3BlRmFjdG9yeTxUU2NvcGUgPSBhbnk+ID0gKFxuICBjb250ZXh0OiBTdGFnZUNvbnRleHQsXG4gIHN0YWdlTmFtZTogc3RyaW5nLFxuICByZWFkT25seUNvbnRleHQ/OiB1bmtub3duLFxuICBleGVjdXRpb25FbnY/OiBFeGVjdXRpb25FbnYsXG4pID0+IFRTY29wZTtcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBTdHJlYW1pbmdcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5leHBvcnQgdHlwZSBTdHJlYW1Ub2tlbkhhbmRsZXIgPSAoc3RyZWFtSWQ6IHN0cmluZywgdG9rZW46IHN0cmluZykgPT4gdm9pZDtcbmV4cG9ydCB0eXBlIFN0cmVhbUxpZmVjeWNsZUhhbmRsZXIgPSAoc3RyZWFtSWQ6IHN0cmluZywgZnVsbFRleHQ/OiBzdHJpbmcpID0+IHZvaWQ7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3RyZWFtSGFuZGxlcnMge1xuICBvblRva2VuPzogU3RyZWFtVG9rZW5IYW5kbGVyO1xuICBvblN0YXJ0PzogU3RyZWFtTGlmZWN5Y2xlSGFuZGxlcjtcbiAgb25FbmQ/OiBTdHJlYW1MaWZlY3ljbGVIYW5kbGVyO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFBhcmFsbGVsLWZvci1lYWNoIChkeW5hbWljIGZhbi1vdXQpXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLyoqXG4gKiBBIGJ1aWx0IGNoYXJ0LCBhcyBgYWRkUGFyYWxsZWxGb3JFYWNoYCdzIGBicmFuY2hgIGZhY3RvcnkgcmV0dXJucyBpdC5cbiAqXG4gKiBTdHJ1Y3R1cmFsbHkgdGhlIHN1YnNldCBvZiBgRmxvd0NoYXJ0YCB0aGUgZW5naW5lIG5lZWRzIHRvIG1vdW50IGEgYnJhbmNoIOKAlFxuICogZGVjbGFyZWQgaGVyZSByYXRoZXIgdGhhbiBpbXBvcnRlZCBzbyBgZW5naW5lL2Aga2VlcHMgaXRzIG9uZS13YXkgZGVwZW5kZW5jeVxuICogb24gYGJ1aWxkZXIvYC4gQW55IGBmbG93Q2hhcnQoLi4uKS5idWlsZCgpYCByZXN1bHQgc2F0aXNmaWVzIGl0LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEJyYW5jaENoYXJ0PFRPdXQgPSBhbnksIFRTY29wZSA9IGFueT4ge1xuICByb290OiBTdGFnZU5vZGU8VE91dCwgVFNjb3BlPjtcbiAgc3RhZ2VNYXA6IE1hcDxzdHJpbmcsIFN0YWdlRnVuY3Rpb248VE91dCwgVFNjb3BlPj47XG4gIHN1YmZsb3dzPzogUmVjb3JkPHN0cmluZywgeyByb290OiBTdGFnZU5vZGU8VE91dCwgVFNjb3BlPiB9PjtcbiAgYnVpbGRUaW1lU3RydWN0dXJlPzogdW5rbm93bjtcbn1cblxuLyoqXG4gKiBSdW50aW1lIGZhbi1vdXQgY29uZmlnIOKAlCBvbmUgYnJhbmNoIHBlciBpdGVtLCBicmFuY2ggQ09VTlQgZGVjaWRlZCBhdFxuICogcnVudGltZSBmcm9tIHRoZSBwYXlsb2FkLiBEZXNpZ246IGRvY3MvZGVzaWduL2V4ZWN1dGlvbi1jb250cm9sLm1kIChEMikuXG4gKlxuICogRWFjaCBicmFuY2ggcnVucyBhcyBhIGdlbmVyYXRlZCBTVUJGTE9XIChpc29sYXRlZCBydW50aW1lLCBvd24gY29tbWl0IGxvZyxcbiAqIGFkZHJlc3NhYmxlIGF0IGA8c3RhZ2VJZD5+PGluZGV4PmAgaW4gZXZlcnkgdHJhY2UgcXVlcnkpLCB3aGljaCBpcyB3aGF0XG4gKiBtYWtlcyBicmFuY2hlcyB1bmFibGUgdG8gY29ycnVwdCBlYWNoIG90aGVyJ3MgaW4tZmxpZ2h0IHN0YXRlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBhcmFsbGVsRm9yRWFjaENvbmZpZzxUSXRlbSA9IGFueSwgVFNjb3BlID0gYW55PiB7XG4gIC8qKlxuICAgKiBQaWNrcyB0aGUgaXRlbXMgdG8gZmFuIG91dCBvdmVyLCBmcm9tIHRoZSBsaXZlIHNjb3BlLiBSZWFkcyBoZXJlIGFyZVxuICAgKiB0cmFja2VkIGxpa2UgYW55IG90aGVyIHN0YWdlIHJlYWQsIHNvIHRoZSBmYW4tb3V0J3Mgb3duIGlucHV0cyBzaG93IHVwIGluXG4gICAqIHRoZSB0cmFjZSBhbmQgaW4gYSBiYWNrd2FyZCBzbGljZS5cbiAgICovXG4gIGl0ZW1zOiAoc2NvcGU6IFRTY29wZSkgPT4gcmVhZG9ubHkgVEl0ZW1bXTtcbiAgLyoqXG4gICAqIEJ1aWxkcyB0aGUgY2hhcnQgZm9yIE9ORSBpdGVtLiBDYWxsZWQgb25jZSBwZXIgZXhlY3V0ZWQgYnJhbmNoLCB3aXRoIHRoZVxuICAgKiBpdGVtIGFuZCBpdHMgaW5kZXgg4oCUIGNsb3NlIG92ZXIgdGhlbSwgb3IgcmVhZCB0aGUgYGl0ZW1gIC8gYGluZGV4YCB2YWx1ZXNcbiAgICogc2VlZGVkIGludG8gdGhlIGJyYW5jaCdzIG93biBzY29wZS5cbiAgICovXG4gIGJyYW5jaDogKGl0ZW06IFRJdGVtLCBpbmRleDogbnVtYmVyKSA9PiBCcmFuY2hDaGFydDtcbiAgLyoqXG4gICAqIEhhcmQgY2VpbGluZyBvbiBicmFuY2hlcyBwZXIgZXhlY3V0aW9uLiBSRVFVSVJFRDogYW4gdW5ib3VuZGVkIGZhbi1vdXRcbiAgICogZHJpdmVuIGJ5IG1vZGVsIG91dHB1dCBpcyBhIHJlc291cmNlIGF0dGFjaywgc28gdGhlcmUgaXMgbm8gZGVmYXVsdCB0b1xuICAgKiBmb3JnZXQuIEV4dHJhIGl0ZW1zIGRvIG5vdCBydW4g4oCUIHRoZSB0cnVuY2F0aW9uIGlzIHJlY29yZGVkLCBuZXZlciBzaWxlbnQuXG4gICAqL1xuICBtYXhCcmFuY2hlczogbnVtYmVyO1xuICAvKipcbiAgICogU3RhdGUga2V5IHRoZSBvcmRlcmVkIHJlc3VsdHMgYXJyYXkgaXMgd3JpdHRlbiB0byBvbiB0aGUgcGFyZW50IHNjb3BlLlxuICAgKiBSRVFVSVJFRCDigJQgYSBrZXkgZGVyaXZlZCBmcm9tIHRoZSBzdGFnZSBpZCBjb3VsZCBzaWxlbnRseSBvdmVyd3JpdGUgc3RhdGVcbiAgICogdGhlIGNoYXJ0IGFscmVhZHkgb3ducy5cbiAgICovXG4gIGludG86IHN0cmluZztcbiAgLyoqXG4gICAqIEZhbi1vdXQgZXJyb3IgcG9saWN5IOKAlCB0aGUgU0FNRSBwb2xpY3kgdGhlIGV4aXN0aW5nIHBhcmFsbGVsIGZhbi1vdXQgdXNlcy5cbiAgICogYHRydWVgID0gYFByb21pc2UuYWxsYCAodGhlIGZpcnN0IGZhaWxpbmcgYnJhbmNoIHJlamVjdHMgdGhlIHN0YWdlKTtcbiAgICogb21pdHRlZC9mYWxzZSA9IGJlc3QtZWZmb3J0IGBQcm9taXNlLmFsbFNldHRsZWRgIChldmVyeSBicmFuY2ggcnVuczsgYVxuICAgKiBmYWlsZWQgYnJhbmNoJ3Mgc2xvdCBpbiB0aGUgcmVzdWx0cyBhcnJheSBpcyBgdW5kZWZpbmVkYCkuXG4gICAqL1xuICBmYWlsRmFzdD86IGJvb2xlYW47XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gUmV0cnkgKHBlci1zdGFnZSBkZWNsYXJhdGl2ZSBwb2xpY3kpXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLyoqXG4gKiBEZWNsYXJhdGl2ZSBwZXItc3RhZ2UgcmV0cnkgcG9saWN5LlxuICpcbiAqIFdIWSB0aGlzIGV4aXN0czogYSByZXRyeSBoYW5kLXJvbGxlZCBpbnNpZGUgYSBzdGFnZSBmdW5jdGlvbiBpcyBpbnZpc2libGUgdG9cbiAqIHRoZSB0cmFjZS4gVGhlIHN0YWdlIHNob3dzIG9uZSBleGVjdXRpb24sIHRoZSBjb21taXQgbG9nIHNob3dzIG9uZSBidW5kbGUsXG4gKiBhbmQgdGhlIHR3byBmYWlsZWQgY2FsbHMgdGhhdCBwcmVjZWRlZCB0aGUgc3VjY2Vzc2Z1bCBvbmUgbGVmdCBubyBtYXJrXG4gKiBhbnl3aGVyZSDigJQgYW4gdW5leHBsYWluZWQgYmVoYXZpb3VyIGluIGEgbGlicmFyeSB3aG9zZSB3aG9sZSB0aGVzaXMgaXMgdGhhdFxuICogbm90aGluZyBpbnZpc2libGUgaGFwcGVucy4gRGVjbGFyZWQgaGVyZSBpbnN0ZWFkLCBldmVyeSBhdHRlbXB0IGlzIHBhcnQgb2ZcbiAqIHRoZSByZWNvcmQ6IGVhY2ggZmFpbGVkIGF0dGVtcHQgZmlyZXMgYEZsb3dSZWNvcmRlci5vblN0YWdlUmV0cnlgIHdpdGggdGhlXG4gKiBhdHRlbXB0IG51bWJlciwgdGhlIHdhaXQsIGFuZCB0aGUgc3RydWN0dXJlZCBlcnJvci5cbiAqXG4gKiBBIFBPTElDWSwgbm90IGEgc3RhZ2Uga2luZCDigJQgYHJldHJ5YCBzaXRzIG9uIGEgbm9ybWFsIHN0YWdlIHRoZSB3YXlcbiAqIGBpc1BhdXNhYmxlYCAvIGBpc1N0cmVhbWluZ2AgZG8uIFRoZSBzZXJpYWxpemVkIG5vZGUgYHR5cGVgIGlzIHVuY2hhbmdlZCBhbmRcbiAqIGV2ZXJ5IGV4aXN0aW5nIGNvbnN1bWVyIGtlZXBzIHJlbmRlcmluZyB0aGUgc3RhZ2UgZXhhY3RseSBhcyBiZWZvcmUuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzXG4gKiBmbG93Q2hhcnQ8U3RhdGU+KCdGZXRjaCB1c2VyJywgZmV0Y2hGbiwgJ2ZldGNoLXVzZXInKVxuICogICAucmV0cnkoeyBhdHRlbXB0czogMywgYmFja29mZk1zOiAobikgPT4gMTAwICogMiAqKiAobiAtIDEpIH0pXG4gKiBgYGBcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZXRyeVBvbGljeSB7XG4gIC8qKlxuICAgKiBIb3cgbWFueSB0aW1lcyB0aGUgc3RhZ2UgZnVuY3Rpb24gbWF5IHJ1biBpbiB0b3RhbCwgSU5DTFVESU5HIHRoZSBmaXJzdFxuICAgKiBydW4uIE11c3QgYmUgYW4gaW50ZWdlciA+PSAxOyBgMWAgbWVhbnMgXCJubyByZXRyeVwiIChhIGRlY2xhcmVkIG5vLW9wLFxuICAgKiBhY2NlcHRlZCBzbyBhIHBvbGljeSBjYW4gYmUgc3dpdGNoZWQgb2ZmIHdpdGhvdXQgZGVsZXRpbmcgaXQpLlxuICAgKi9cbiAgYXR0ZW1wdHM6IG51bWJlcjtcbiAgLyoqXG4gICAqIEhvdyBsb25nIHRvIHdhaXQgYmVmb3JlIHRoZSBORVhUIGF0dGVtcHQuIEVpdGhlciBhIGZpeGVkIG51bWJlciBvZlxuICAgKiBtaWxsaXNlY29uZHMsIG9yIGEgZnVuY3Rpb24gb2YgdGhlIGF0dGVtcHQgdGhhdCBqdXN0IEZBSUxFRCAoMS1iYXNlZClcbiAgICogcmV0dXJuaW5nIG1pbGxpc2Vjb25kcyDigJQgYChuKSA9PiAxMDAgKiAyICoqIChuIC0gMSlgIGlzIGV4cG9uZW50aWFsXG4gICAqIGJhY2tvZmYuIE9taXR0ZWQgKG9yIGEgbm9uLWZpbml0ZSAvIG5lZ2F0aXZlIHJlc3VsdCkgbWVhbnMgbm8gd2FpdC5cbiAgICpcbiAgICogVGhlIHdhaXQgaXMgYSBwbGFpbiBhd2FpdGVkIHRpbWVyIHRoYXQgaXMgQ0FOQ0VMTEVEIGJ5IHRoZSBydW4nc1xuICAgKiBgQWJvcnRTaWduYWxgLiBJdCBpcyBub3QgYSBwYXVzZTogYSBjaGFydCBjYW5ub3QgYmUgY2hlY2twb2ludGVkIGluIHRoZVxuICAgKiBtaWRkbGUgb2YgYSBiYWNrb2ZmLlxuICAgKi9cbiAgYmFja29mZk1zPzogbnVtYmVyIHwgKChhdHRlbXB0OiBudW1iZXIpID0+IG51bWJlcik7XG4gIC8qKlxuICAgKiBJcyBUSElTIGVycm9yIHdvcnRoIGFub3RoZXIgYXR0ZW1wdD8gRGVmYXVsdHMgdG8gcmV0cnlpbmcgZXZlcnkgZXJyb3IuXG4gICAqIFJldHVybmluZyBgZmFsc2VgIGVuZHMgdGhlIHN0YWdlIGltbWVkaWF0ZWx5IG9uIHRoZSBub3JtYWwgZXJyb3IgcGF0aCDigJRcbiAgICogZXhhY3RseSBhcyBpZiBubyBwb2xpY3kgaGFkIGJlZW4gZGVjbGFyZWQsIGFuZCB3aXRoIG5vIHJldHJ5IGV2ZW50ICh0aGVcbiAgICogcG9saWN5IGNob3NlIG5vdCB0byBhY3Q7IHRoZXJlIGlzIG5vdGhpbmcgdG8gcmVwb3J0IHRoYXQgdGhlIGVycm9yIGV2ZW50XG4gICAqIGRvZXMgbm90IGFscmVhZHkgc2F5KS5cbiAgICpcbiAgICogQSB0aHJvdyBmcm9tIHRoaXMgcHJlZGljYXRlIGlzIHRyZWF0ZWQgYXMgYGZhbHNlYCDigJQgYSBicm9rZW4gcHJlZGljYXRlXG4gICAqIG11c3Qgbm90IHR1cm4gYSBmYWlsaW5nIHN0YWdlIGludG8gYW4gaW5maW5pdGUgcmV0cnkgbG9vcC5cbiAgICovXG4gIHJldHJ5T24/OiAoZXJyb3I6IHVua25vd24pID0+IGJvb2xlYW47XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gU3ViZmxvd1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8qKlxuICogQ29udHJvbHMgaG93IGFycmF5IHZhbHVlcyBmcm9tIG91dHB1dE1hcHBlciBhcmUgbWVyZ2VkIGludG8gcGFyZW50IHNjb3BlLlxuICovXG5leHBvcnQgZW51bSBBcnJheU1lcmdlTW9kZSB7XG4gIC8qKiBBcHBlbmQgc3ViZmxvdyBvdXRwdXQgdG8gZXhpc3RpbmcgcGFyZW50IGFycmF5OiBbLi4uZXhpc3RpbmcsIC4uLnZhbHVlXS4gRGVmYXVsdC4gKi9cbiAgQ29uY2F0ID0gJ2NvbmNhdCcsXG4gIC8qKiBPdmVyd3JpdGUgcGFyZW50IGFycmF5IHdpdGggc3ViZmxvdyBvdXRwdXQuIFVzZSBmb3IgRHluYW1pYyBsb29wcy4gKi9cbiAgUmVwbGFjZSA9ICdyZXBsYWNlJyxcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTdWJmbG93TW91bnRPcHRpb25zPFRQYXJlbnRTY29wZSA9IGFueSwgVFN1YmZsb3dJbnB1dCA9IGFueSwgVFN1YmZsb3dPdXRwdXQgPSBhbnk+IHtcbiAgaW5wdXRNYXBwZXI/OiAocGFyZW50U2NvcGU6IFRQYXJlbnRTY29wZSkgPT4gVFN1YmZsb3dJbnB1dDtcbiAgLyoqXG4gICAqIE1hcHMgc3ViZmxvdyBvdXRwdXQgYmFjayBpbnRvIHBhcmVudCBzY29wZS5cbiAgICpcbiAgICogKipBcnJheSBtZXJnZSBiZWhhdmlvcioqIGlzIGNvbnRyb2xsZWQgYnkgYGFycmF5TWVyZ2VgOlxuICAgKiAtIGAnY29uY2F0J2AgKGRlZmF1bHQpOiBgWy4uLmV4aXN0aW5nLCAuLi52YWx1ZV1gIOKAlCByZXR1cm4gb25seSAqKmRlbHRhKiogaXRlbXNcbiAgICogLSBgJ3JlcGxhY2UnYDogb3ZlcndyaXRlcyB0aGUgcGFyZW50IHZhbHVlIOKAlCByZXR1cm4gdGhlIGZ1bGwgYXJyYXlcbiAgICpcbiAgICogU2NhbGFyIHZhbHVlcyBhcmUgYWx3YXlzIHJlcGxhY2VkIHJlZ2FyZGxlc3Mgb2YgYGFycmF5TWVyZ2VgLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIC8vIERlbHRhIG1vZGUgKGRlZmF1bHQpIOKAlCByZXR1cm4gb25seSBuZXcgaXRlbXMsIGNvbmNhdCBhcHBlbmRzXG4gICAqIG91dHB1dE1hcHBlcjogKHNmKSA9PiAoeyBtZXNzYWdlczogc2YubmV3TWVzc2FnZXMgfSlcbiAgICpcbiAgICogLy8gUmVwbGFjZSBtb2RlIOKAlCByZXR1cm4gZnVsbCBhcnJheSwgcGFyZW50IHZhbHVlIGlzIG92ZXJ3cml0dGVuXG4gICAqIC8vIFVzZWZ1bCBpbiBEeW5hbWljIGxvb3BzIHdoZXJlIHRoZSBzdWJmbG93IHJlY29tcHV0ZXMgdGhlIGZ1bGwgdmFsdWUgZWFjaCBpdGVyYXRpb25cbiAgICogb3V0cHV0TWFwcGVyOiAoc2YpID0+ICh7IHRvb2xEZXNjcmlwdGlvbnM6IHNmLnRvb2xEZXNjcmlwdGlvbnMgfSksXG4gICAqIGFycmF5TWVyZ2U6IEFycmF5TWVyZ2VNb2RlLlJlcGxhY2UsXG4gICAqXG4gICAqIC8vIFNjYWxhcnMgYXJlIGZpbmUgaW4gYm90aCBtb2RlcyDigJQgYWx3YXlzIHJlcGxhY2VkXG4gICAqIG91dHB1dE1hcHBlcjogKHNmKSA9PiAoeyBzdGF0dXM6IHNmLnJlc3VsdCwgY291bnQ6IHNmLnRvdGFsIH0pXG4gICAqIGBgYFxuICAgKi9cbiAgb3V0cHV0TWFwcGVyPzogKHN1YmZsb3dPdXRwdXQ6IFRTdWJmbG93T3V0cHV0LCBwYXJlbnRTY29wZTogVFBhcmVudFNjb3BlKSA9PiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgLyoqXG4gICAqIENvbnRyb2xzIGhvdyBhcnJheSB2YWx1ZXMgZnJvbSBvdXRwdXRNYXBwZXIgYXJlIG1lcmdlZCBpbnRvIHBhcmVudCBzY29wZS5cbiAgICogQXBwbGllcyBvbmx5IHRvIHRvcC1sZXZlbCBhcnJheSBrZXlzLiBOZXN0ZWQgYXJyYXlzIGluc2lkZSBvYmplY3RzXG4gICAqIGFsd2F5cyB1c2UgYXBwZW5kIChhcHBlbmRUb0FycmF5KSByZWdhcmRsZXNzIG9mIHRoaXMgc2V0dGluZy5cbiAgICpcbiAgICogQGRlZmF1bHQgQXJyYXlNZXJnZU1vZGUuQ29uY2F0XG4gICAqL1xuICBhcnJheU1lcmdlPzogQXJyYXlNZXJnZU1vZGU7XG5cbiAgLyoqXG4gICAqIFNUUlVDVFVSRS1PTkxZOiB0aGUgZG93bnN0cmVhbSBzdGFnZSBpZCB0aGlzIGJyYW5jaCdzIGNvbnZlcmdlbmNlIGVkZ2VcbiAgICogcG9pbnRzIHRvLCBvdmVycmlkaW5nIHRoZSBkZWZhdWx0IFwiY29udmVyZ2UgYXQgdGhlIG5leHQgbGluZWFyIHN0YWdlLlwiXG4gICAqXG4gICAqIFdoZW4gYSBmb3JrL3NlbGVjdG9yL2RlY2lkZXIgYnJhbmNoIGNhcnJpZXMgYGNvbnZlcmdlQXRgLCBpdHMgdmlzdWFsaXplZFxuICAgKiBgbmV4dGAgZWRnZSBpcyBmaXJlZCB0byB0aGUgbmFtZWQgc3RhZ2UgaW5zdGVhZCBvZiB0byB0aGUgc2hhcmVkXG4gICAqIGNvbnZlcmdlbmNlIG5vZGUgaXRzIHNpYmxpbmdzIHVzZS4gVGhpcyBleHByZXNzZXMgYW4gdW5lcXVhbC1kZXB0aCBtZXJnZVxuICAgKiDigJQgZS5nLiBhIGB0b29sc2Agc2xvdCB0aGF0IGJ5cGFzc2VzIHRoZSBgbWVzc2FnZUFQSWAgYXNzZW1ibHkgbm9kZSBhbmRcbiAgICogcGFpcnMgd2l0aCBpdHMgb3V0cHV0IGF0IGBjYWxsLWxsbWAgKHNvIGBjYWxsLWxsbWAgcmVhZHMgYXMgYSAyLXBhcmVudFxuICAgKiBtZXJnZSksIGZhaXRoZnVsIHRvIHRoZSBBbnRocm9waWMgd2lyZSBwcm90b2NvbCAoc3lzdGVtK21lc3NhZ2VzID0gdGhlXG4gICAqIG1lc3NhZ2UgcGF5bG9hZDsgdG9vbHMgPSBhIHNlcGFyYXRlIHRvcC1sZXZlbCBmaWVsZCkuXG4gICAqXG4gICAqICoqVGhpcyBhZmZlY3RzIHRoZSBTVFJVQ1RVUkUvdG9wb2xvZ3kgZ3JhcGggb25seSoqIOKAlCB0aGUgcnVudGltZSBpc1xuICAgKiB1bmNoYW5nZWQgKHRoZSBicmFuY2gncyBvdXRwdXRzIHJpZGUgc2hhcmVkIHNjb3BlOyB0aGUgbmFtZWQgdGFyZ2V0IHJlYWRzXG4gICAqIHRoZW0gd2hlbiBpdCBydW5zKS4gSXQgZG9lcyBOT1QgaW50cm9kdWNlIGEgam9pbiBiYXJyaWVyLiBUaGUgdGFyZ2V0IGlzIGFcbiAgICogRk9SV0FSRCBzdGFnZSAoYWRkZWQgbGF0ZXIgaW4gdGhlIGNoYWluKSwgc28gaXQgaXMgbm90IHZhbGlkYXRlZCBhdFxuICAgKiBicmFuY2gtZGVjbGFyYXRpb24gdGltZS5cbiAgICovXG4gIGNvbnZlcmdlQXQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFdoZW4gYHRydWVgLCBhbiBpbm5lciBgc2NvcGUuJGJyZWFrKHJlYXNvbilgIGNhbGwgaW5zaWRlIHRoaXMgc3ViZmxvd1xuICAgKiBwcm9wYWdhdGVzIHVwIHRvIHRoZSBwYXJlbnQg4oCUIGkuZS4sIHRoZSBwYXJlbnQncyBgYnJlYWtGbGFnYCBpcyBzZXRcbiAgICogYWZ0ZXIgdGhlIHN1YmZsb3cgZXhpdHMsIHRlcm1pbmF0aW5nIHRoZSBwYXJlbnQncyBvdXRlciBsb29wIHRvby5cbiAgICpcbiAgICogKipEZWZhdWx0OiBgZmFsc2VgKiogKGN1cnJlbnQgYmVoYXZpb3VyIOKAlCBpbm5lciBicmVhayBzdG9wcyBvbmx5IHRoZVxuICAgKiBzdWJmbG93OyBwYXJlbnQgY29udGludWVzKS5cbiAgICpcbiAgICogIyMgV2hlbiB0byB1c2VcbiAgICpcbiAgICogU2V0IGBwcm9wYWdhdGVCcmVhazogdHJ1ZWAgb24gc3ViZmxvdyBtb3VudHMgdGhhdCByZXByZXNlbnRcbiAgICogKip0ZXJtaW5hbCoqIGJyYW5jaGVzIOKAlCBcImlmIHRoaXMgc3ViZmxvdyBmaXJlcywgdGhlIG91dGVyIGxvb3AgaXNcbiAgICogZG9uZVwiLiBFeGFtcGxlczpcbiAgICpcbiAgICogLSBBIGh1bWFuLXJldmlldyBydW5uZXIgdGhhdCB0YWtlcyBvdmVyIGZyb20gYW4gYWdlbnQncyB0b29sLWNhbGxpbmdcbiAgICogICBsb29wIGFuZCBwcm9kdWNlcyB0aGUgZmluYWwgcmVzcG9uc2UuXG4gICAqIC0gQSBzYWZldHktZ2F0ZSBzdWJmbG93IHRoYXQgaGFsdHMgdGhlIG91dGVyIHdvcmtmbG93IHdoZW4gYSBwb2xpY3lcbiAgICogICB2aW9sYXRpb24gaXMgZGV0ZWN0ZWQuXG4gICAqIC0gQW4gZXJyb3ItcmVjb3Zlcnkgc3ViZmxvdyB0aGF0IHJlc3RvcmVzIHN0YXRlIGFuZCB0aGVuIHRlcm1pbmF0ZXMuXG4gICAqXG4gICAqICMjIFNlbWFudGljc1xuICAgKlxuICAgKiAxLiBJbnNpZGUgdGhlIHN1YmZsb3csIGEgc3RhZ2UgY2FsbHMgYHNjb3BlLiRicmVhayhyZWFzb24pYC5cbiAgICogMi4gVGhlIHN1YmZsb3cncyBvd24gZXhlY3V0aW9uIHN0b3BzIChub3JtYWwgYCRicmVha2AgYmVoYXZpb3VyKS5cbiAgICogMy4gYFN1YmZsb3dFeGVjdXRvcmAgaW5zcGVjdHMgdGhlIHN1YmZsb3cncyBleGl0IHN0YXRlLiBJZlxuICAgKiAgICBgcHJvcGFnYXRlQnJlYWsgPT09IHRydWVgIEFORCB0aGUgaW5uZXIgYnJlYWsgZmlyZWQsIGl0IGZvcndhcmRzXG4gICAqICAgIHRoZSBicmVhayAoYW5kIGl0cyByZWFzb24pIHRvIHRoZSBwYXJlbnQncyBgYnJlYWtGbGFnYC5cbiAgICogNC4gVGhlIHBhcmVudCB0cmF2ZXJzZXIgc2VlcyBgc2hvdWxkQnJlYWtgIG9uIGl0cyBuZXh0IHN0ZXAgYW5kIGV4aXRzLlxuICAgKiA1LiBBIGBGbG93UmVjb3JkZXIub25CcmVha2AgZXZlbnQgZmlyZXMgYXQgdGhlIHBhcmVudC1tb3VudCBsZXZlbCB3aXRoXG4gICAqICAgIGBwcm9wYWdhdGVkRnJvbVN1YmZsb3dgID0gdGhlIHN1YmZsb3cncyBpZCBhbmQgdGhlIGlubmVyIHJlYXNvbi5cbiAgICpcbiAgICogIyMgUGFyYWxsZWwvZmFuLW91dFxuICAgKlxuICAgKiBGb2xsb3dzIHRoZSBleGlzdGluZyBsaWJyYXJ5IHJ1bGUgaW4gYENoaWxkcmVuRXhlY3V0b3JgOiB0aGUgcGFyZW50XG4gICAqIGJyZWFrcyBvbmx5IHdoZW4gKipldmVyeSoqIGNoaWxkIG9mIGEgZm9yayBicm9rZS4gQSBzaW5nbGVcbiAgICogYHByb3BhZ2F0ZUJyZWFrOiB0cnVlYCBzdWJmbG93IGNvbnRyaWJ1dGluZyBpdHMgYnJlYWsgdG8gdGhlIGNvdW50XG4gICAqIGRvZXMgbm90IG9uIGl0cyBvd24gdGVybWluYXRlIHRoZSBwYXJlbnQgZmFuLW91dC5cbiAgICpcbiAgICogIyMgb3V0cHV0TWFwcGVyIHN0aWxsIHJ1bnNcbiAgICpcbiAgICogVGhlIHN1YmZsb3cncyBgb3V0cHV0TWFwcGVyYCAoaWYgc3VwcGxpZWQpIEFMV0FZUyBydW5zIGJlZm9yZSB0aGVcbiAgICogYnJlYWsgcHJvcGFnYXRlcywgc28gdGhlIHN1YmZsb3cncyBwYXJ0aWFsIHN0YXRlIGlzIHN0aWxsIHdyaXR0ZW4gdG9cbiAgICogdGhlIHBhcmVudCBzY29wZS4gVGhpcyBpcyBpbnRlbnRpb25hbCDigJQgdGhlIHR5cGljYWwgdXNlIGNhc2UgaXMgYW5cbiAgICogXCJlc2NhbGF0aW9uXCIgc3ViZmxvdyB3aG9zZSBvdXRwdXQgSVMgdGhlIGZpbmFsIGFuc3dlciB0aGF0IG5lZWRzIHRvXG4gICAqIGxhbmQgaW4gdGhlIHBhcmVudCBzY29wZSBiZWZvcmUgdGhlIG91dGVyIGxvb3AgdGVybWluYXRlcy4gSWYgeW91XG4gICAqIHdhbnQgdG8gc3VwcHJlc3Mgb3V0cHV0IG1hcHBpbmcgb24gYnJlYWssIGNoZWNrIHRoZSBicmVhayBzdGF0ZVxuICAgKiBpbnNpZGUgeW91ciBgb3V0cHV0TWFwcGVyYCBhbmQgcmV0dXJuIGB7fWAgZWFybHkuXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBwcm9wYWdhdGVCcmVhaz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIERlY2xhcmVkIHRhZ3MgKDkuMjEuMSkgZm9yIHRoZSBNT1VOVCBpdHNlbGYg4oCUIHRoZSBOQU1FUyB0aGUgYXV0aG9yIHB1dHNcbiAgICogb24gdGhpcyBtb3VudCBhdCBidWlsZCB0aW1lLCBsYW5kZWQgYnkgdGhlIHNhbWUgYGFwcGx5VGFnc2AgZXZlcnkgb3RoZXJcbiAgICogYG9wdGlvbnMudGFnc2Agc2l0ZSB1c2VzLCB3aXRoIHRoZSBzYW1lIHJlZnVzYWxzIChlbXB0eSwgbm9uLXN0cmluZywgdGhlXG4gICAqIHJlc2VydmVkIGB+YCBtYXJrZXIsIGEgZHVwbGljYXRlLCBhIHNlY29uZCBkZWNsYXJhdGlvbikuXG4gICAqXG4gICAqIEEgbW91bnQgaXMgYSBzdGFnZSB0aGF0IGNvbW1pdHM6IGl0cyBmaXJzdCBidW5kbGUgaW4gdGhlIFBBUkVOVCBsb2cgaXMgYVxuICAgKiBzdG9wIGluIGBjb21taXRTdG9wc2AsIHNvIGB0YWdTdG9wc2Aga2VlcHMgaXQgbGlrZSBhbnkgdGFnZ2VkIHN0YWdlIGFuZFxuICAgKiBjYXJyaWVzIHRoZXNlIG5hbWVzIGFzIGBTdG9wLm1ldGFgLiBTdGFtcGVkIG9uIHRoYXQgZmlyc3QgYnVuZGxlIG9ubHlcbiAgICogKHRoZSBtb3VudCdzIGV4aXQgYnVuZGxlIGNhcnJpZXMgbm9uZSDigJQgdGhlIG9uY2UtcGVyLWV4ZWN1dGlvbiBsYXcpLlxuICAgKiBUaGUgc3ViZmxvdydzIE9XTiBsb2cgaXMgdW50b3VjaGVkOiBpdHMgaW5uZXIgc3RhZ2VzIGRlY2xhcmUgdGhlaXIgb3duXG4gICAqIHRhZ3MsIGFuZCBgZHJpbGwobW91bnQpYCByZWFkcyB0aG9zZSBvZmYgdGhlIGlubmVyIGxvZy5cbiAgICpcbiAgICogVGhpcyBpcyB0aGUgT05MWSB0YWcgc2l0ZSBmb3IgYSBmb3JrLWNoaWxkIG1vdW50IChgYWRkU3ViRmxvd0NoYXJ0YCkgb3JcbiAgICogYSBicmFuY2ggbW91bnQgKGBhZGRTdWJGbG93Q2hhcnRCcmFuY2hgKSDigJQgYWZ0ZXIgdGhvc2UgdGhlIGN1cnNvciBzdGlsbFxuICAgKiBwb2ludHMgYXQgdGhlIHBhcmVudCwgc28gYC50YWcoKWAgcmVmdXNlcyByYXRoZXIgdGhhbiBtaXMtYXR0cmlidXRlLiBBXG4gICAqIGxpbmVhciBtb3VudCAoYGFkZFN1YkZsb3dDaGFydE5leHRgKSBtb3ZlcyB0aGUgY3Vyc29yLCBzbyBgLnRhZygpYCB3b3Jrc1xuICAgKiB0aGVyZSB0b287IGRlY2xhcmUgaW4gb25lIHBsYWNlLCBub3QgYm90aC5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiAuYWRkU2VsZWN0b3JGdW5jdGlvbignU2xvdHMnLCBwaWNrU2xvdHMsICdzbG90cycpXG4gICAqICAgLmFkZFN1YkZsb3dDaGFydEJyYW5jaCgnbWVtb3J5JywgbWVtb3J5Q2hhcnQsICdNZW1vcnknLCB7IHRhZ3M6IFsnc2xvdDptZW1vcnknXSB9KVxuICAgKiAgIC5hZGRTdWJGbG93Q2hhcnRCcmFuY2goJ3Rvb2xzJywgdG9vbHNDaGFydCwgJ1Rvb2xzJywgeyB0YWdzOiBbJ3Nsb3Q6dG9vbHMnXSB9KVxuICAgKiAuZW5kKClcbiAgICogYGBgXG4gICAqL1xuICB0YWdzPzogcmVhZG9ubHkgc3RyaW5nW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3ViZmxvd1Jlc3VsdCB7XG4gIHN1YmZsb3dJZDogc3RyaW5nO1xuICBzdWJmbG93TmFtZTogc3RyaW5nO1xuICB0cmVlQ29udGV4dDoge1xuICAgIC8qKlxuICAgICAqIFRoZSBzdWJmbG93J3MgZmluYWwgc3RhdGUuIFRoZSB0cmF2ZXJzZXIncyByZWNvcmQgaG9sZHMgdGhlIExJVkUgaGVhcFxuICAgICAqIOKAlCB3aGF0IGEgcGxhaW4gYGdldFNuYXBzaG90KClgIGFuZCB0aGUgY2hlY2twb2ludCBzZWUuIFVuZGVyXG4gICAgICogYGdldFNuYXBzaG90KHsgcmVkYWN0OiB0cnVlIH0pYCB0aGUgZXhlY3V0b3Igc2VydmVzIHRoZSBzdWJmbG93J3Mgb3duXG4gICAgICogcmVkYWN0ZWQgbWlycm9yIGhlcmUgaW5zdGVhZCAoOS4yMC4wOyBgaGFuZGxlcnMvc2VydmVkU3ViZmxvd1Jlc3VsdHNgKSxcbiAgICAgKiB3aGljaCBpcyBleGFjdGx5IHdoYXQgYHN0YXRlQXRgIGZvbGRzIGBoaXN0b3J5YCB0by5cbiAgICAgKi9cbiAgICBnbG9iYWxDb250ZXh0OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICBzdGFnZUNvbnRleHRzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICBoaXN0b3J5OiB1bmtub3duW107XG4gICAgLyoqIElkZW50aXR5IG9mIHRoZSBsb2NhbCBoaXN0b3J5LCBub3QgaXRzIHBhcmVudCdzIGxvZy4gKi9cbiAgICByZWFkb25seSBsb2dBZGRyZXNzPzogTG9nQWRkcmVzcztcbiAgICAvKipcbiAgICAgKiBUaGUgc3ViZmxvdydzIE9XTiBmb2xkIGJhc2Ug4oCUIHRoZSBzdGF0ZSBpdHMgaXNvbGF0ZWQgcnVudGltZSBzdGFydGVkXG4gICAgICogZnJvbSwgYmVmb3JlIGl0cyBmaXJzdCBjb21taXQuIFRoZSBzaWJsaW5nIG9mXG4gICAgICogYFJ1bnRpbWVTbmFwc2hvdC5pbml0aWFsU3RhdGVgLCBjYXJyaWVkIGhlcmUgc28gYSBzdWJmbG93J3MgYGhpc3RvcnlgXG4gICAgICogY2FuIGJlIGZvbGRlZCBvZmZsaW5lIGV4YWN0bHkgbGlrZSB0aGUgcnVuJ3MgbG9nIChgc3RhdGVBdGAsXG4gICAgICogYHRpbWVUcmF2ZWwoLi4uKS5kcmlsbChtb3VudClgKS4gRnJvemVuIGFuZCBkZXRhY2hlZC5cbiAgICAgKlxuICAgICAqIE5vcm1hbGx5IGB7fWA6IGEgc3ViZmxvdydzIGBpbnB1dE1hcHBlcmAgc2VlZCBpcyBpdHNlbGYgdGhlIGZpcnN0XG4gICAgICogQ09NTUlUIGluIGBoaXN0b3J5YCAodGhlIHJvb3QgY29udGV4dCBjb21taXRzIGl0KSwgbm90IGEgcHJlLXJ1biBiYXNlLlxuICAgICAqL1xuICAgIGluaXRpYWxTdGF0ZT86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICB9O1xuICBwYXJlbnRTdGFnZUlkOiBzdHJpbmc7XG4gIHBpcGVsaW5lU3RydWN0dXJlPzogdW5rbm93bjtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBTdWJmbG93IFRyYXZlcnNlciBGYWN0b3J5XG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLyoqXG4gKiBTdWJmbG93VHJhdmVyc2VyRmFjdG9yeSDigJQgQ3JlYXRlcyBhIEZsb3djaGFydFRyYXZlcnNlciBmb3Igc3ViZmxvdyBleGVjdXRpb24uXG4gKlxuICogSW5qZWN0ZWQgaW50byBTdWJmbG93RXhlY3V0b3IgdG8gYnJlYWsgdGhlIGNpcmN1bGFyIGRlcGVuZGVuY3k6XG4gKiBGbG93Y2hhcnRUcmF2ZXJzZXIg4oaSIFN1YmZsb3dFeGVjdXRvciDihpIgRmxvd2NoYXJ0VHJhdmVyc2VyLlxuICpcbiAqIFRoZSBmYWN0b3J5IGNhcHR1cmVzIHBhcmVudCB0cmF2ZXJzZXIgY29uZmlnIChzdGFnZU1hcCwgc2NvcGVGYWN0b3J5LCBuYXJyYXRpdmUsIGV0Yy4pXG4gKiBpbiBhIGNsb3N1cmUuIFN1YmZsb3dFeGVjdXRvciBjYWxscyBpdCB3aXRoIHN1YmZsb3ctc3BlY2lmaWMgb3ZlcnJpZGVzIChyb290LCBydW50aW1lLCBpbnB1dCkuXG4gKiBUaGUgcmV0dXJuZWQgdHJhdmVyc2VyIHVzZXMgdGhlIFNBTUUgNy1waGFzZSBhbGdvcml0aG0gYXMgdGhlIHRvcC1sZXZlbCB0cmF2ZXJzZXIsXG4gKiBzbyBkZWNpZGVycywgc2VsZWN0b3JzLCBsb29wcywgbGF6eSBzdWJmbG93cywgYW5kIGFib3J0IHNpZ25hbHMgYWxsIHdvcmsgaW5zaWRlIHN1YmZsb3dzLlxuICovXG5leHBvcnQgdHlwZSBTdWJmbG93VHJhdmVyc2VyRmFjdG9yeTxUT3V0ID0gYW55LCBUU2NvcGUgPSBhbnk+ID0gKG9wdGlvbnM6IHtcbiAgLyoqIFJvb3Qgbm9kZSBvZiB0aGUgc3ViZmxvdyAod2l0aCBpc1N1YmZsb3dSb290IHN0cmlwcGVkKSDigJQgdGhlIGdyYXBoIGV2ZXJ5IGlkIGluc2lkZSB0aGUgc3ViZmxvdyByZXNvbHZlcyBhZ2FpbnN0LiAqL1xuICByb290OiBTdGFnZU5vZGU8VE91dCwgVFNjb3BlPjtcbiAgLyoqXG4gICAqIFdoZXJlIHRoZSBzdWJmbG93J3MgdHJhdmVyc2FsIHN0YXJ0cyB3aGVuIG5vdCBhdCBgcm9vdGAg4oCUIGEgcmVzdW1lJ3NcbiAgICogb25lLXNob3QgcmUtZW50cnkgKGBSZXN1bWVIb3AuZW50cnlgKTogdGhlIG5leHQgbW91bnQgb24gdGhlIHBhdXNlIHBhdGgsXG4gICAqIG9yIHRoZSBwYXVzZWQgc3RhZ2UncyBzdGFuZC1pbiwgZWFjaCB3aXRoIGl0cyBkaXNwYXRjaGVyJ3MgY29udGludWF0aW9uXG4gICAqIGF0dGFjaGVkLiBWaXNpdGVkIG9uY2UsIGZpcnN0OyBuZXZlciByZXNvbHZhYmxlIGJ5IGlkLlxuICAgKi9cbiAgZW50cnk/OiBTdGFnZU5vZGU8VE91dCwgVFNjb3BlPjtcbiAgLyoqXG4gICAqIFBhcmFsbGVsIHNpYmxpbmdzJyBwYXVzZXMgd2FpdGluZyBpbiB0aGlzIHN1YmZsb3cgKGBSZXN1bWVIb3AucGVuZGluZ1BhdXNlc2AsXG4gICAqIDkuMjguMCkg4oCUIHJhaXNlZCBpbiBvcmRlciBvbmNlIGBlbnRyeWAncyBjaGFpbiBlbmRzLlxuICAgKi9cbiAgcGVuZGluZ1BhdXNlcz86IHJlYWRvbmx5IFF1ZXVlZFBhdXNlW107XG4gIC8qKiBJc29sYXRlZCBleGVjdXRpb24gcnVudGltZSBmb3IgdGhlIHN1YmZsb3cuICovXG4gIGV4ZWN1dGlvblJ1bnRpbWU6IElFeGVjdXRpb25SdW50aW1lO1xuICAvKiogTWFwcGVkIGlucHV0IGZyb20gcGFyZW50IHNjb3BlIChiZWNvbWVzIHJlYWRPbmx5Q29udGV4dCBmb3Igc3RhZ2VzKS4gKi9cbiAgcmVhZE9ubHlDb250ZXh0PzogdW5rbm93bjtcbiAgLyoqIFN1YmZsb3cgaWRlbnRpZmllciDigJQgdXNlZCBhcyBicmFuY2hQYXRoIGZvciBuYXJyYXRpdmUgY29udGV4dC4gKi9cbiAgc3ViZmxvd0lkPzogc3RyaW5nO1xuICAvKipcbiAgICogUkZDLTAwMyBEMTogcnVudGltZVN0YWdlSWQgb2YgdGhlIHN1YmZsb3cgTU9VTlQgc3RhZ2UgaW4gdGhlIHBhcmVudFxuICAgKiB0cmF2ZXJzZXIuIEJlY29tZXMgdGhlIGBwYXJlbnRSdW50aW1lU3RhZ2VJZGAgZmFsbGJhY2sgZm9yIHRoZSBzdWJmbG93J3NcbiAgICogcm9vdCBzdGFnZSBzbyBydW50aW1lIGFuY2VzdG9yIGNoYWlucyBjcm9zcyBzdWJmbG93IGJvdW5kYXJpZXMuXG4gICAqL1xuICBwYXJlbnRNb3VudFJ1bnRpbWVTdGFnZUlkPzogc3RyaW5nO1xufSkgPT4gU3ViZmxvd1RyYXZlcnNlckhhbmRsZTxUT3V0LCBUU2NvcGU+O1xuXG4vKipcbiAqIEhhbmRsZSByZXR1cm5lZCBieSBTdWJmbG93VHJhdmVyc2VyRmFjdG9yeS5cbiAqIFByb3ZpZGVzIGV4ZWN1dGUoKSArIGFjY2VzcyB0byBuZXN0ZWQgc3ViZmxvdyByZXN1bHRzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFN1YmZsb3dUcmF2ZXJzZXJIYW5kbGU8VE91dCA9IGFueSwgVFNjb3BlID0gYW55PiB7XG4gIC8qKiBFeGVjdXRlIHRoZSBzdWJmbG93J3MgZ3JhcGggdXNpbmcgdGhlIGZ1bGwgNy1waGFzZSB0cmF2ZXJzYWwgYWxnb3JpdGhtLiAqL1xuICBleGVjdXRlKCk6IFByb21pc2U8VHJhdmVyc2FsUmVzdWx0PjtcbiAgLyoqIENvbGxlY3QgbmVzdGVkIHN1YmZsb3cgcmVzdWx0cyAoZnJvbSBzdWJmbG93cyBtb3VudGVkIGluc2lkZSB0aGlzIHN1YmZsb3cpLiAqL1xuICBnZXRTdWJmbG93UmVzdWx0cygpOiBNYXA8c3RyaW5nLCBTdWJmbG93UmVzdWx0PjtcbiAgLyoqXG4gICAqIEZpbmFsIGJyZWFrIHN0YXRlIG9mIHRoZSBzdWJmbG93IGFmdGVyIGBleGVjdXRlKClgIHJldHVybnMuXG4gICAqXG4gICAqICAgLSBgc2hvdWxkQnJlYWs6IHRydWVgICDihpIgYSBzdGFnZSBpbnNpZGUgdGhlIHN1YmZsb3cgY2FsbGVkXG4gICAqICAgICBgc2NvcGUuJGJyZWFrKHJlYXNvbilgLCBzdG9wcGluZyB0aGUgc3ViZmxvdydzIG93biB0cmF2ZXJzYWwuXG4gICAqICAgLSBgcmVhc29uYCAgICAgICAgICAgICDihpIgdGhlIG9wdGlvbmFsIHN0cmluZyBwYXNzZWQgdG8gYCRicmVha2AuXG4gICAqXG4gICAqIFVzZWQgYnkgYFN1YmZsb3dFeGVjdXRvcmAgdG8gaW1wbGVtZW50IGBTdWJmbG93TW91bnRPcHRpb25zLnByb3BhZ2F0ZUJyZWFrYDpcbiAgICogaWYgdGhlIG1vdW50IG9wdHMgaW4gQU5EIHRoZSBzdWJmbG93IGJyb2tlLCB0aGUgcGFyZW50J3MgYnJlYWsgZmxhZyBpc1xuICAgKiBmb3J3YXJkZWQuXG4gICAqL1xuICBnZXRCcmVha1N0YXRlKCk6IHsgc2hvdWxkQnJlYWs6IGJvb2xlYW47IHJlYXNvbj86IHN0cmluZyB9O1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIEV4ZWN1dGlvbiBSdW50aW1lIEludGVyZmFjZVxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8qKlxuICogSUV4ZWN1dGlvblJ1bnRpbWUg4oCUIEludGVyZmFjZSBmb3IgdGhlIHJ1bnRpbWUgZW52aXJvbm1lbnQuXG4gKlxuICogRGVmaW5lcyB0aGUgY29udHJhY3QgdGhhdCBlbmdpbmUgaGFuZGxlcnMgbmVlZCBmcm9tIHRoZSBydW5uZXIgbGF5ZXIsXG4gKiBhdm9pZGluZyBjaXJjdWxhciBpbXBvcnRzIGJldHdlZW4gZW5naW5lLyBhbmQgcnVubmVyLy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJRXhlY3V0aW9uUnVudGltZSB7XG4gIGdsb2JhbFN0b3JlOiB7IGdldFN0YXRlKCk6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IH07XG4gIC8qKlxuICAgKiBUaGUgcmVkYWN0ZWQgbWlycm9yIG9mIGBnbG9iYWxTdG9yZWAg4oCUIHByZXNlbnQgd2hlbiB0aGUgcnVuJ3MgcG9saWN5XG4gICAqIGtlZXBzIG9uZSAoYFJ1blBvbGljeS5taXJyb3JgOiBhIHJ1biB3aXRoIGEgcmVkYWN0aW9uIHBvbGljeSksIGVsc2UgYWJzZW50LlxuICAgKiBgU3ViZmxvd0V4ZWN1dG9yYCByZWFkcyBpdCB0byBzZXJ2ZSBhIHN1YmZsb3cncyBzdGF0ZSAoOS4yMC4wKS5cbiAgICovXG4gIHJlZGFjdGVkU3RvcmU/OiBTaGFyZWRNZW1vcnk7XG4gIHJvb3RTdGFnZUNvbnRleHQ6IFN0YWdlQ29udGV4dDtcbiAgZXhlY3V0aW9uSGlzdG9yeTogeyBsaXN0KCk6IHVua25vd25bXSB9O1xuICAvKipcbiAgICogQSBmcmVzaCByb290IGZyYW1lIG9uIHRoaXMgcnVudGltZSDigJQgaXRzIHN0b3JlLCBpdHMgbG9nLCB0aGUgcnVuJ3MgcG9saWN5XG4gICAqIGFuZCBtaXJyb3IgKGBFeGVjdXRpb25SdW50aW1lLm5ld1Jvb3RgKS4gYFN1YmZsb3dFeGVjdXRvcmAgc3dhcHMgYVxuICAgKiBzdWJmbG93J3Mgc2VlZCBmcmFtZSBmb3IgdGhlIGZyYW1lIGl0cyBmaXJzdCBzdGFnZSBydW5zIG9uIHdpdGggaXQuXG4gICAqL1xuICBuZXdSb290KG5hbWU6IHN0cmluZywgaWQ6IHN0cmluZyk6IFN0YWdlQ29udGV4dDtcbiAgZ2V0U25hcHNob3Qob3B0aW9ucz86IHsgcmVkYWN0PzogYm9vbGVhbiB9KToge1xuICAgIHNoYXJlZFN0YXRlOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICBleGVjdXRpb25UcmVlOiB1bmtub3duO1xuICAgIC8qKiBUaGUgY29tbWl0IGxvZydzIGZvbGQgYmFzZSDigJQgc2VlIGBSdW50aW1lU25hcHNob3QuaW5pdGlhbFN0YXRlYC4gKi9cbiAgICBpbml0aWFsU3RhdGU/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICBjb21taXRMb2c6IHVua25vd25bXTtcbiAgICByZWFkb25seSBsb2dBZGRyZXNzPzogTG9nQWRkcmVzcztcbiAgICAvKiogRHVhbC1rZXllZCBieSBzdWJmbG93IHBhdGggKGxhc3QgaXRlcmF0aW9uKSBBTkQgcGVyLWV4ZWN1dGlvbiBtb3VudCBydW50aW1lU3RhZ2VJZFxuICAgICAqICAoZWFjaCBpdGVyYXRpb24pIOKAlCBzZWUgUnVudGltZVNuYXBzaG90LnN1YmZsb3dSZXN1bHRzIC8gc3ViZmxvdy1jb21taXQtdmlzaWJpbGl0eS4gKi9cbiAgICBzdWJmbG93UmVzdWx0cz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgIHJlY29yZGVycz86IEFycmF5PHsgaWQ6IHN0cmluZzsgbmFtZTogc3RyaW5nOyBkYXRhOiB1bmtub3duIH0+O1xuICB9O1xuICBzZXRSb290T2JqZWN0KHBhdGg6IHN0cmluZ1tdLCBrZXk6IHN0cmluZywgdmFsdWU6IHVua25vd24pOiB2b2lkO1xuICBnZXRQaXBlbGluZXMoKTogc3RyaW5nW107XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gRXhlY3V0aW9uIEVudmlyb25tZW50IOKAlCByZWFkLW9ubHksIHByb3BhZ2F0ZXMgdGhyb3VnaCBuZXN0ZWQgZXhlY3V0b3JzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLyoqXG4gKiBFeGVjdXRpb25FbnYg4oCUIGluZnJhc3RydWN0dXJlIHZhbHVlcyB0aGF0IHByb3BhZ2F0ZSB0aHJvdWdoIG5lc3RlZCBleGVjdXRvcnMuXG4gKlxuICogTGlrZSBgcHJvY2Vzcy5lbnZgIGZvciBmbG93Y2hhcnRzOiByZWFkLW9ubHksIGluaGVyaXRlZCBieSBjaGlsZCBleGVjdXRvcnMsXG4gKiBpbmZyYXN0cnVjdHVyZS1vbmx5IChub3QgYnVzaW5lc3MgbG9naWMpLlxuICpcbiAqIExpdG11cyB0ZXN0OiBDcmVhdGVkIGV4dGVybmFsIHRvIHRoZSBmbG93Y2hhcnQgKyBwYXNzZWQgaW4gZm9yIGV4ZWN1dGlvbiA9IGVudi5cbiAqIEJ1c2luZXNzIGNvbmZpZyBmb3IgYSBzcGVjaWZpYyBmbG93Y2hhcnQgPSBhcmdzIChnZXRBcmdzKCkpLlxuICpcbiAqIEludGVudGlvbmFsbHkgYSBjbG9zZWQgdHlwZSDigJQgbm90IGV4dGVuc2libGUgdG8gcHJldmVudCBjb3VwbGluZyBiZXR3ZWVuXG4gKiBwYXJlbnQgYW5kIGNoaWxkIGZsb3djaGFydHMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRXhlY3V0aW9uRW52IHtcbiAgLyoqIEFib3J0U2lnbmFsIGZvciBjb29wZXJhdGl2ZSBjYW5jZWxsYXRpb24gYWNyb3NzIG5lc3RlZCBleGVjdXRvcnMuICovXG4gIHJlYWRvbmx5IHNpZ25hbD86IEFib3J0U2lnbmFsO1xuICAvKiogVGltZW91dCBidWRnZXQgaW4gbWlsbGlzZWNvbmRzLiAqL1xuICByZWFkb25seSB0aW1lb3V0TXM/OiBudW1iZXI7XG4gIC8qKiBUcmFjZSBpZGVudGlmaWVyIGZvciBkaXN0cmlidXRlZCB0cmFjaW5nIC8gb2JzZXJ2YWJpbGl0eS4gKi9cbiAgcmVhZG9ubHkgdHJhY2VJZD86IHN0cmluZztcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBIYW5kbGVyIERlcGVuZGVuY2llcyAoREkgYmFnKSDigJQgd2FzIFBpcGVsaW5lQ29udGV4dFxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8qKlxuICogSGFuZGxlckRlcHMg4oCUIERlcGVuZGVuY3kgaW5qZWN0aW9uIGJhZyBwYXNzZWQgdG8gYWxsIGhhbmRsZXIgbW9kdWxlcy5cbiAqXG4gKiBQcm92aWRlcyBzaGFyZWQgc3RhdGUgKHN0YWdlTWFwLCBydW50aW1lLCBzY29wZUZhY3RvcnksIGV0Yy4pIHdpdGhvdXRcbiAqIGhhbmRsZXJzIG5lZWRpbmcgdG8gaW1wb3J0IHRoZSB0cmF2ZXJzZXIgZGlyZWN0bHkuIEF2b2lkcyBjaXJjdWxhciBkZXBzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEhhbmRsZXJEZXBzPFRPdXQgPSBhbnksIFRTY29wZSA9IGFueT4ge1xuICBzdGFnZU1hcDogTWFwPHN0cmluZywgU3RhZ2VGdW5jdGlvbjxUT3V0LCBUU2NvcGU+PjtcbiAgcm9vdDogU3RhZ2VOb2RlPFRPdXQsIFRTY29wZT47XG4gIGV4ZWN1dGlvblJ1bnRpbWU6IElFeGVjdXRpb25SdW50aW1lO1xuICBzY29wZUZhY3Rvcnk6IFNjb3BlRmFjdG9yeTxUU2NvcGU+O1xuICBzdWJmbG93cz86IFJlY29yZDxzdHJpbmcsIHsgcm9vdDogU3RhZ2VOb2RlPFRPdXQsIFRTY29wZT4gfT47XG4gIHRocm90dGxpbmdFcnJvckNoZWNrZXI/OiAoZXJyb3I6IHVua25vd24pID0+IGJvb2xlYW47XG4gIHN0cmVhbUhhbmRsZXJzPzogU3RyZWFtSGFuZGxlcnM7XG4gIHNjb3BlUHJvdGVjdGlvbk1vZGU6IFNjb3BlUHJvdGVjdGlvbk1vZGU7XG4gIHJlYWRPbmx5Q29udGV4dD86IHVua25vd247XG4gIC8qKiBFeGVjdXRpb24gZW52aXJvbm1lbnQg4oCUIHByb3BhZ2F0ZXMgdG8gc3ViZmxvd3MgYXV0b21hdGljYWxseS4gKi9cbiAgZXhlY3V0aW9uRW52PzogRXhlY3V0aW9uRW52O1xuICBuYXJyYXRpdmVHZW5lcmF0b3I6IElDb250cm9sRmxvd05hcnJhdGl2ZTtcbiAgbG9nZ2VyOiBJTG9nZ2VyO1xuICBzaWduYWw/OiBBYm9ydFNpZ25hbDtcbiAgLyoqXG4gICAqIFRoZSByZXN1bWUncyBvbmUtc2hvdCByZS1lbnRyeSAoTTIpIOKAlCBzaGFyZWQgYnkgcmVmZXJlbmNlIHdpdGggZXZlcnlcbiAgICogbmVzdGVkIHRyYXZlcnNlciwgbGlrZSB0aGUgZXhlY3V0aW9uIGNvdW50ZXIuIGBTdWJmbG93RXhlY3V0b3JgIGFza3MgaXRcbiAgICogYXQgZWFjaCBzdWJmbG93IGVudHJ5OiB0aGUgRklSU1QgZW50cnkgaW50byBhIHN1YmZsb3cgb24gdGhlIHBhdXNlIHBhdGhcbiAgICogdGFrZXMgdGhhdCBzdWJmbG93J3MgY2FwdHVyZWQgc3RhdGUgKHNlZWRpbmcgdGhlIG5lc3RlZCBydW50aW1lIGluIHBsYWNlXG4gICAqIG9mIHRoZSBpbnB1dE1hcHBlcidzIHZhbHVlcyDigJQgdGhlIG1hcHBlciBzdGlsbCBydW5zIGZvciB0aGUgcmVhZC1vbmx5XG4gICAqIGFyZ3MpLCBpdHMgZW50cnkgcG9pbnQgYW5kIGFueSBzaWJsaW5nIHBhdXNlcyB3YWl0aW5nIHRoZXJlOyBldmVyeSBsYXRlclxuICAgKiBlbnRyeSBpcyBhbiBvcmRpbmFyeSBvbmUuIFNlZSBgUmVzdW1lRW50cnlgLiBVbmRlZmluZWQgb24gbm9ybWFsIGBydW4oKWBcbiAgICogcGF0aHMuXG4gICAqL1xuICByZXN1bWU/OiBSZXN1bWVFbnRyeTxUT3V0LCBUU2NvcGU+O1xufVxuXG4vKiogT3B0aW9ucyBmb3IgRmxvd0NoYXJ0RXhlY3V0b3IucnVuKCkuICovXG5leHBvcnQgaW50ZXJmYWNlIFJ1bk9wdGlvbnMge1xuICAvKiogQWJvcnRTaWduYWwgZm9yIGNvb3BlcmF0aXZlIGNhbmNlbGxhdGlvbi4gKi9cbiAgc2lnbmFsPzogQWJvcnRTaWduYWw7XG4gIC8qKiBUaW1lb3V0IGluIG1pbGxpc2Vjb25kcy4gQ3JlYXRlcyBhbiBpbnRlcm5hbCBBYm9ydENvbnRyb2xsZXIuICovXG4gIHRpbWVvdXRNcz86IG51bWJlcjtcbiAgLyoqXG4gICAqIFJ1bnRpbWUgaW5wdXQgZGF0YSBmb3IgdGhlIHBpcGVsaW5lLlxuICAgKiBCZWNvbWVzIHRoZSByZWFkT25seUNvbnRleHQgYWNjZXNzaWJsZSB2aWEgYHNjb3BlLmdldEFyZ3MoKWAuXG4gICAqIFN0YWdlcyBjYW5ub3Qgb3ZlcndyaXRlIHRoZXNlIGtleXMgd2l0aCBgc2V0VmFsdWUoKWAuXG4gICAqL1xuICBpbnB1dD86IHVua25vd247XG4gIC8qKlxuICAgKiBFeGVjdXRpb24gZW52aXJvbm1lbnQg4oCUIHJlYWQtb25seSBpbmZyYXN0cnVjdHVyZSB2YWx1ZXMgdGhhdCBwcm9wYWdhdGVcbiAgICogdGhyb3VnaCBuZXN0ZWQgZXhlY3V0b3JzIChsaWtlIGBwcm9jZXNzLmVudmAgZm9yIGZsb3djaGFydHMpLlxuICAgKiBBY2Nlc3NpYmxlIHZpYSBgc2NvcGUuZ2V0RW52KClgLiBJbmhlcml0ZWQgYnkgc3ViZmxvd3MgYXV0b21hdGljYWxseS5cbiAgICovXG4gIGVudj86IEV4ZWN1dGlvbkVudjtcbiAgLyoqXG4gICAqIE92ZXJyaWRlIHRoZSBtYXhpbXVtIG5lc3RlZCBgZXhlY3V0ZU5vZGVgIGRlcHRoIGZvciB0aGlzIHJ1bi5cbiAgICogRGVmYXVsdHMgdG8gYEZsb3djaGFydFRyYXZlcnNlci5NQVhfRVhFQ1VURV9ERVBUSGAgKDUwMCkuXG4gICAqXG4gICAqIERlcHRoIGNvdW50cyBUUkVFIG5lc3Rpbmcgb25seSDigJQgZm9yayBjaGlsZHJlbiwgZGVjaWRlci9zZWxlY3RvciBicmFuY2hcbiAgICogZGlzcGF0Y2gsIHJlY3Vyc2l2ZSBjb21wb3NpdGlvbi4gTGluZWFyIGNoYWlucyBhbmQgbG9vcCBpdGVyYXRpb25zIHJ1blxuICAgKiBvbiBhIGZsYXQgdHJhbXBvbGluZSBhbmQgbmV2ZXIgY29uc3VtZSBkZXB0aCwgc28gdGhpcyByYXJlbHkgbmVlZHNcbiAgICogcmFpc2luZy4gTXVzdCBiZSA+PSAxLlxuICAgKi9cbiAgbWF4RGVwdGg/OiBudW1iZXI7XG4gIC8qKlxuICAgKiBPdmVycmlkZSB0aGUgbWF4aW11bSBsb29wIGl0ZXJhdGlvbnMgcGVyIG5vZGUgZm9yIHRoaXMgcnVuICh0aGVcbiAgICogYENvbnRpbnVhdGlvblJlc29sdmVyYCBpbmZpbml0ZS1sb29wIGd1YXJkKS4gRGVmYXVsdHMgdG8gMTAwMC5cbiAgICogVGhpcyBpcyB0aGUgYmluZGluZyBjb25zdHJhaW50IGZvciBsb29wLWhlYXZ5IHBpcGVsaW5lcyDigJQgcmFpc2UgaXQgZm9yXG4gICAqIGxlZ2l0aW1hdGVseSBsb25nIGxvb3BzIChgbG9vcFRvYCBjaGFpbnMgcnVuIHdpdGggYSBmbGF0IHN0YWNrLCBzbyBoaWdoXG4gICAqIHZhbHVlcyBhcmUgc2FmZTsgbWVtb3J5IGZvciBzdGF0ZS9uYXJyYXRpdmUgc3RpbGwgZ3Jvd3MgcGVyIGl0ZXJhdGlvbikuXG4gICAqIEFsc28gYm91bmRzIHRoZSBydW4tdG90YWwgY2hhaW4gb2YgZnVuY3Rpb24tYmVhcmluZyBkeW5hbWljIGBuZXh0YFxuICAgKiBjb250aW51YXRpb25zIChmcmVzaCBub2RlcyByZXR1cm5lZCBmcm9tIHN0YWdlcykg4oCUIGEgcnVuYXdheSBkeW5hbWljXG4gICAqIGNoYWluIGVycm9ycyBpbnN0ZWFkIG9mIHJ1bm5pbmcgZm9yZXZlci5cbiAgICogUHJvcGFnYXRlcyB0byBzdWJmbG93cy4gTXVzdCBiZSA+PSAxLlxuICAgKi9cbiAgbWF4SXRlcmF0aW9ucz86IG51bWJlcjtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBGbG93IENvbnRyb2wgTmFycmF0aXZlIOKAlCBjYW5vbmljYWwgZGVmaW5pdGlvbnMgbGl2ZSBpbiBtZW1vcnkvdHlwZXMudHNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5leHBvcnQgdHlwZSB7IEZsb3dDb250cm9sVHlwZSwgRmxvd01lc3NhZ2UgfTtcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBSdW50aW1lIFN0cnVjdHVyZSBNZXRhZGF0YSAodXNlZCBieSBSdW50aW1lU3RydWN0dXJlTWFuYWdlcilcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5leHBvcnQgaW50ZXJmYWNlIFJ1bnRpbWVTdHJ1Y3R1cmVNZXRhZGF0YSB7XG4gIHR5cGU6ICdzdGFnZScgfCAnZGVjaWRlcicgfCAnc2VsZWN0b3InIHwgJ2ZvcmsnIHwgJ3N0cmVhbWluZycgfCAnc3ViZmxvdycgfCAnbG9vcCc7XG4gIHN1YmZsb3dJZD86IHN0cmluZztcbiAgaXNTdWJmbG93Um9vdD86IGJvb2xlYW47XG4gIHN1YmZsb3dOYW1lPzogc3RyaW5nO1xuICAvKiogVHJ1ZSBmb3IgYW4gYGFkZFBhcmFsbGVsRm9yRWFjaGAgZmFuLW91dCAodHlwZSBzdGF5cyBgJ2ZvcmsnYCkuICovXG4gIGlzRHluYW1pY1BhcmFsbGVsPzogYm9vbGVhbjtcbiAgaXNQYXJhbGxlbENoaWxkPzogYm9vbGVhbjtcbiAgcGFyYWxsZWxHcm91cElkPzogc3RyaW5nO1xuICBsb29wVGFyZ2V0Pzogc3RyaW5nO1xuICBpc0R5bmFtaWM/OiBib29sZWFuO1xuICBpc0xvb3BSZWZlcmVuY2U/OiBib29sZWFuO1xuICBzdHJlYW1JZD86IHN0cmluZztcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBOb2RlIFJlc3VsdFxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmV4cG9ydCB0eXBlIE5vZGVSZXN1bHRUeXBlID0ge1xuICBpZDogc3RyaW5nO1xuICByZXN1bHQ6IHVua25vd247XG4gIGlzRXJyb3I/OiBib29sZWFuO1xufTtcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBFeGVjdXRpb24gUmVzcG9uc2Vcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5leHBvcnQgdHlwZSBCcmFuY2hSZXN1bHQgPSB7XG4gIHJlc3VsdDogc3RyaW5nIHwgRXJyb3I7XG4gIGlzRXJyb3I6IGJvb2xlYW47XG59O1xuXG5leHBvcnQgdHlwZSBCcmFuY2hSZXN1bHRzID0geyBbYnJhbmNoSWQ6IHN0cmluZ106IEJyYW5jaFJlc3VsdCB9O1xuZXhwb3J0IHR5cGUgVHJhdmVyc2FsUmVzdWx0ID0gQnJhbmNoUmVzdWx0cyB8IHN0cmluZyB8IEVycm9yO1xuXG4vKiogUmV0dXJuZWQgYnkgcnVuKCkvcmVzdW1lKCkgd2hlbiBleGVjdXRpb24gcGF1c2VzLiAqL1xuZXhwb3J0IHR5cGUgUGF1c2VkUmVzdWx0ID0ge1xuICByZWFkb25seSBwYXVzZWQ6IHRydWU7XG4gIHJlYWRvbmx5IGNoZWNrcG9pbnQ6IGltcG9ydCgnLi4vcGF1c2UvdHlwZXMuanMnKS5GbG93Y2hhcnRDaGVja3BvaW50O1xufTtcblxuLyoqIEZ1bGwgcmV0dXJuIHR5cGUgb2YgRmxvd0NoYXJ0RXhlY3V0b3IucnVuKCkgYW5kIHJlc3VtZSgpLiAqL1xuZXhwb3J0IHR5cGUgRXhlY3V0b3JSZXN1bHQgPSBUcmF2ZXJzYWxSZXN1bHQgfCBQYXVzZWRSZXN1bHQ7XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gU2VyaWFsaXplZCBQaXBlbGluZSBTdHJ1Y3R1cmUgKGZvciB2aXN1YWxpemF0aW9uKVxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmV4cG9ydCBpbnRlcmZhY2UgU2VyaWFsaXplZFBpcGVsaW5lTm9kZSB7XG4gIG5hbWU6IHN0cmluZztcbiAgaWQ6IHN0cmluZztcbiAgdHlwZT86XG4gICAgfCAnc3RhZ2UnXG4gICAgfCAnZGVjaWRlcidcbiAgICB8ICdzZWxlY3RvcidcbiAgICB8ICdmb3JrJ1xuICAgIHwgJ3N0cmVhbWluZydcbiAgICB8ICdzdWJmbG93J1xuICAgIHwgJ2xvb3AnXG4gICAgfCAndXNlcidcbiAgICB8ICd0b29sJ1xuICAgIHwgJ2Z1bmN0aW9uJ1xuICAgIHwgJ3NlcXVlbmNlJztcbiAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIGNoaWxkcmVuPzogU2VyaWFsaXplZFBpcGVsaW5lTm9kZVtdO1xuICBuZXh0PzogU2VyaWFsaXplZFBpcGVsaW5lTm9kZTtcbiAgYnJhbmNoZXM/OiBSZWNvcmQ8c3RyaW5nLCBTZXJpYWxpemVkUGlwZWxpbmVOb2RlPjtcbiAgaGFzRGVjaWRlcj86IGJvb2xlYW47XG4gIGhhc1NlbGVjdG9yPzogYm9vbGVhbjtcbiAgaGFzU3VidHJlZT86IGJvb2xlYW47XG4gIGlzU3RyZWFtaW5nPzogYm9vbGVhbjtcbiAgc3RyZWFtSWQ/OiBzdHJpbmc7XG4gIGlzU3ViZmxvd1Jvb3Q/OiBib29sZWFuO1xuICBzdWJmbG93SWQ/OiBzdHJpbmc7XG4gIHN1YmZsb3dOYW1lPzogc3RyaW5nO1xuICBsb29wVGFyZ2V0Pzogc3RyaW5nO1xuICBpc0xvb3BSZWZlcmVuY2U/OiBib29sZWFuO1xuICBpc1BhcmFsbGVsQ2hpbGQ/OiBib29sZWFuO1xuICBwYXJhbGxlbEdyb3VwSWQ/OiBzdHJpbmc7XG4gIGlzRHluYW1pYz86IGJvb2xlYW47XG4gIC8qKiBXaGVuIHRydWUsIHRoaXMgc3RhZ2UgY2FuIHBhdXNlIGV4ZWN1dGlvbiAoUGF1c2FibGVIYW5kbGVyIHBhdHRlcm4pLiAqL1xuICBpc1BhdXNhYmxlPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIFRydWUgZm9yIGFuIGBhZGRQYXJhbGxlbEZvckVhY2hgIGZhbi1vdXQg4oCUIGJyYW5jaCBDT1VOVCBkZWNpZGVkIGF0IHJ1bnRpbWVcbiAgICogZnJvbSB0aGUgcGF5bG9hZC4gQSBmbGFnLCBub3QgYSB0eXBlOiBgdHlwZWAgc3RheXMgYCdmb3JrJ2Agc28gZXZlcnlcbiAgICogZXhpc3RpbmcgY29uc3VtZXIgcmVuZGVycyBpdCBjb3JyZWN0bHkgKGl0IElTIGEgZmFuLW91dCksIGFuZCBhIGNvbnN1bWVyXG4gICAqIHRoYXQgd2FudHMgdG8gc2F5IFwib25lIGJyYW5jaCBwZXIgaXRlbVwiIGNhbiByZWFkIHRoaXMuXG4gICAqL1xuICBpc0R5bmFtaWNQYXJhbGxlbD86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBUb3RhbCBhdHRlbXB0cyB0aGlzIHN0YWdlJ3MgZnVuY3Rpb24gbWF5IHJ1biwgZnJvbSBpdHMgZGVjbGFyZWRcbiAgICoge0BsaW5rIFJldHJ5UG9saWN5fS4gUHJlc2VudCBvbmx5IHdoZW4gYSBwb2xpY3kgd2FzIGRlY2xhcmVkLiBUaGUgQ09VTlRcbiAgICogb25seSDigJQgYGJhY2tvZmZNc2AgYW5kIGByZXRyeU9uYCBjYW4gYmUgZnVuY3Rpb25zLCB3aGljaCBhIEpTT04tc2FmZSBzcGVjXG4gICAqIGNhbm5vdCBjYXJyeS5cbiAgICovXG4gIHJldHJ5QXR0ZW1wdHM/OiBudW1iZXI7XG4gIC8qKlxuICAgKiBEZWNsYXJlZCB0YWdzICg5LjIxLjApIOKAlCB0aGUgbmFtZXMgdGhlIGF1dGhvciBwdXQgb24gdGhpcyBzdGFnZSBhdCBidWlsZFxuICAgKiB0aW1lLCBjb3BpZWQgYXMtaXMuIEZyZWUgc3RyaW5nczsgZm9vdHByaW50anMgYXNzaWducyB0aGVtIG5vIG1lYW5pbmcuXG4gICAqIEFic2VudCB3aGVuIHRoZSBzdGFnZSBkZWNsYXJlcyBub25lLlxuICAgKi9cbiAgdGFncz86IHJlYWRvbmx5IHN0cmluZ1tdO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIEZsb3dDaGFydCBpcyBkZWZpbmVkIGluIGAuLi9idWlsZGVyL3R5cGVzLnRzYC4gVGhlIGVuZ2luZSBsYXllciBjb25zdW1lcyBpdFxuLy8gdmlhIGltcG9ydCBmcm9tIHRoZXJlLiBBIGR1cGxpY2F0ZSBtaW5pbWFsIGRlZmluaXRpb24gcHJldmlvdXNseSBsaXZlZCBoZXJlXG4vLyBhbmQgY2F1c2VkIFRTIGNvbmZ1c2lvbiBhdCBjb21wb3NpdGlvbiBib3VuZGFyaWVzIChDb21wb3NhYmxlUnVubmVyIHZzXG4vLyBhZGRTdWJGbG93Q2hhcnQgcGFyYW1ldGVyKS4gU2luZ2xlIHNvdXJjZSBvZiB0cnV0aCBub3cgbGl2ZXMgaW4gYnVpbGRlci8uXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLyoqIEFsaWFzIGZvciBTZXJpYWxpemVkUGlwZWxpbmVOb2RlIHVzZWQgYXMgZnVsbCBzdHJ1Y3R1cmUgKi9cbmV4cG9ydCB0eXBlIFNlcmlhbGl6ZWRQaXBlbGluZVN0cnVjdHVyZSA9IFNlcmlhbGl6ZWRQaXBlbGluZU5vZGUgJiB7XG4gIGJyYW5jaElkcz86IHN0cmluZ1tdO1xuICBzdWJmbG93U3RydWN0dXJlPzogU2VyaWFsaXplZFBpcGVsaW5lU3RydWN0dXJlO1xuICBpdGVyYXRpb25Db3VudD86IG51bWJlcjtcbn07XG4iXX0=
30
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL2VuZ2luZS90eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7R0FLRztBQWlCSCxPQUFPLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQWU5RSxvQ0FBb0M7QUFDcEMsd0RBQXdEO0FBQ3hELE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBWTtJQUNwQyxJQUFJLEVBQUUsQ0FBQyxPQUFhLEVBQUUsR0FBRyxJQUFXLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLEdBQUcsSUFBSSxDQUFDO0lBQ3ZFLEdBQUcsRUFBRSxDQUFDLE9BQWEsRUFBRSxHQUFHLElBQVcsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsR0FBRyxJQUFJLENBQUM7SUFDckUsS0FBSyxFQUFFLENBQUMsT0FBYSxFQUFFLEdBQUcsSUFBVyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxHQUFHLElBQUksQ0FBQztJQUN6RSxLQUFLLEVBQUUsQ0FBQyxPQUFhLEVBQUUsR0FBRyxJQUFXLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLEdBQUcsSUFBSSxDQUFDO0lBQ3pFLElBQUksRUFBRSxDQUFDLE9BQWEsRUFBRSxHQUFHLElBQVcsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsR0FBRyxJQUFJLENBQUM7Q0FDeEUsQ0FBQztBQXVIRiw4RUFBOEU7QUFDOUUsVUFBVTtBQUNWLDhFQUE4RTtBQUU5RTs7R0FFRztBQUNILE1BQU0sQ0FBTixJQUFZLGNBS1g7QUFMRCxXQUFZLGNBQWM7SUFDeEIsd0ZBQXdGO0lBQ3hGLG1DQUFpQixDQUFBO0lBQ2pCLHlFQUF5RTtJQUN6RSxxQ0FBbUIsQ0FBQTtBQUNyQixDQUFDLEVBTFcsY0FBYyxLQUFkLGNBQWMsUUFLekIiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIHR5cGVzLnRzIOKAlCBBbGwgdHlwZSBkZWZpbml0aW9ucyBmb3IgdGhlIGVuZ2luZSBsaWJyYXJ5LlxuICpcbiAqIENlbnRyYWxpemVzIHR5cGUgZGVmaW5pdGlvbnMgdG8gYXZvaWQgY2lyY3VsYXIgZGVwZW5kZW5jaWVzLlxuICogRXZlcnkgaGFuZGxlciByZWNlaXZlcyBIYW5kbGVyRGVwcyAodGhlIERJIGJhZykgaW5zdGVhZCBvZiBpbXBvcnRpbmcgdGhlIHRyYXZlcnNlci5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IExvZ0FkZHJlc3MsIExvZ091dGNvbWUsIE1ldGEgfSBmcm9tICdmb290dHJhY2UnO1xuaW1wb3J0IHR5cGUgeyBTaGFyZWRNZW1vcnkgfSBmcm9tICdmb290dHJhY2Uvd3JpdGUnO1xuXG5pbXBvcnQgdHlwZSB7IEZsb3dDb250cm9sVHlwZSwgRmxvd01lc3NhZ2UgfSBmcm9tICcuLi9tZW1vcnkvZnJhbWVUeXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7IFN0YWdlQ29udGV4dCB9IGZyb20gJy4uL21lbW9yeS9TdGFnZUNvbnRleHQuanMnO1xuaW1wb3J0IHR5cGUgeyBTY29wZVByb3RlY3Rpb25Nb2RlIH0gZnJvbSAnLi4vc2NvcGUvcHJvdGVjdGlvbi90eXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7IERlY2lkZXIsIFNlbGVjdG9yLCBTdGFnZU5vZGUgfSBmcm9tICcuL2dyYXBoL1N0YWdlTm9kZS5qcyc7XG5pbXBvcnQgdHlwZSB7IFF1ZXVlZFBhdXNlLCBSZXN1bWVFbnRyeSB9IGZyb20gJy4vaGFuZGxlcnMvUmVzdW1lRW50cnkuanMnO1xuaW1wb3J0IHR5cGUgeyBJQ29udHJvbEZsb3dOYXJyYXRpdmUgfSBmcm9tICcuL25hcnJhdGl2ZS90eXBlcy5qcyc7XG5cbi8vIFJlLWV4cG9ydCBTdGFnZU5vZGUgdHlwZXMgZm9yIGNvbnZlbmllbmNlXG5leHBvcnQgdHlwZSB7IERlY2lkZXIsIFNlbGVjdG9yLCBTdGFnZU5vZGUgfSBmcm9tICcuL2dyYXBoL1N0YWdlTm9kZS5qcyc7XG5cbi8vIFJlLWV4cG9ydCBwYXVzZSB0eXBlcyBmcm9tIHBhdXNlLyBsaWJyYXJ5XG5leHBvcnQgdHlwZSB7IEZsb3djaGFydENoZWNrcG9pbnQsIFBhdXNhYmxlSGFuZGxlciwgUGF1c2VSZXN1bHQgfSBmcm9tICcuLi9wYXVzZS9pbmRleC5qcyc7XG5leHBvcnQgeyBpc1BhdXNlUmVzdWx0LCBpc1BhdXNlU2lnbmFsLCBQYXVzZVNpZ25hbCB9IGZyb20gJy4uL3BhdXNlL2luZGV4LmpzJztcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBMb2dnZXJcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vKiogTWluaW1hbCBsb2dnaW5nIGNvbnRyYWN0LiBNaXJyb3JzIENvbnNvbGUgQVBJIHN1YnNldC4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSUxvZ2dlciB7XG4gIGluZm8obWVzc2FnZT86IGFueSwgLi4ub3B0aW9uYWxQYXJhbXM6IGFueVtdKTogdm9pZDtcbiAgbG9nKG1lc3NhZ2U/OiBhbnksIC4uLm9wdGlvbmFsUGFyYW1zOiBhbnlbXSk6IHZvaWQ7XG4gIGRlYnVnKG1lc3NhZ2U/OiBhbnksIC4uLm9wdGlvbmFsUGFyYW1zOiBhbnlbXSk6IHZvaWQ7XG4gIGVycm9yKG1lc3NhZ2U/OiBhbnksIC4uLm9wdGlvbmFsUGFyYW1zOiBhbnlbXSk6IHZvaWQ7XG4gIHdhcm4obWVzc2FnZT86IGFueSwgLi4ub3B0aW9uYWxQYXJhbXM6IGFueVtdKTogdm9pZDtcbn1cblxuLyoqIERlZmF1bHQgY29uc29sZS1iYXNlZCBsb2dnZXIuICovXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAtLSB0cml2aWFsIGNvbnNvbGUgZGVsZWdhdGlvbiAqL1xuZXhwb3J0IGNvbnN0IGRlZmF1bHRMb2dnZXI6IElMb2dnZXIgPSB7XG4gIGluZm86IChtZXNzYWdlPzogYW55LCAuLi5hcmdzOiBhbnlbXSkgPT4gY29uc29sZS5pbmZvKG1lc3NhZ2UsIC4uLmFyZ3MpLFxuICBsb2c6IChtZXNzYWdlPzogYW55LCAuLi5hcmdzOiBhbnlbXSkgPT4gY29uc29sZS5sb2cobWVzc2FnZSwgLi4uYXJncyksXG4gIGRlYnVnOiAobWVzc2FnZT86IGFueSwgLi4uYXJnczogYW55W10pID0+IGNvbnNvbGUuZGVidWcobWVzc2FnZSwgLi4uYXJncyksXG4gIGVycm9yOiAobWVzc2FnZT86IGFueSwgLi4uYXJnczogYW55W10pID0+IGNvbnNvbGUuZXJyb3IobWVzc2FnZSwgLi4uYXJncyksXG4gIHdhcm46IChtZXNzYWdlPzogYW55LCAuLi5hcmdzOiBhbnlbXSkgPT4gY29uc29sZS53YXJuKG1lc3NhZ2UsIC4uLmFyZ3MpLFxufTtcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBTdGFnZSBGdW5jdGlvblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8qKiBDYWxsYmFjayB0aGF0IHJlY2VpdmVzIHRva2VucyBkdXJpbmcgc3RyZWFtaW5nLiAqL1xuZXhwb3J0IHR5cGUgU3RyZWFtQ2FsbGJhY2sgPSAodG9rZW46IHN0cmluZykgPT4gdm9pZDtcblxuLyoqXG4gKiBUaGUgZnVuY3Rpb24gc2lnbmF0dXJlIGZvciBzdGFnZSBoYW5kbGVycy5cbiAqIC0gVE91dDogcmV0dXJuIHR5cGUgcHJvZHVjZWQgYnkgdGhlIHN0YWdlXG4gKiAtIFRTY29wZTogdGhlIHNjb3BlIG9iamVjdCBwYXNzZWQgdG8gdGhlIHN0YWdlXG4gKiAtIE9wdGlvbmFsIDNyZCBwYXJhbWV0ZXIgYHN0cmVhbUNhbGxiYWNrYCBpbmplY3RlZCBmb3Igc3RyZWFtaW5nIHN0YWdlcy5cbiAqL1xuZXhwb3J0IHR5cGUgU3RhZ2VGdW5jdGlvbjxUT3V0ID0gYW55LCBUU2NvcGUgPSBhbnk+ID0gKFxuICBzY29wZTogVFNjb3BlLFxuICBicmVha1BpcGVsaW5lOiAoKSA9PiB2b2lkLFxuICBzdHJlYW1DYWxsYmFjaz86IFN0cmVhbUNhbGxiYWNrLFxuKSA9PiBQcm9taXNlPFRPdXQgfCB2b2lkPiB8IFRPdXQgfCB2b2lkO1xuXG4vKipcbiAqIFN0YWdlIGZ1bmN0aW9uIGZvciBwYXVzYWJsZSBzdGFnZXMg4oCUIHJldHVybiB2YWx1ZSBpcyB0aGUgcGF1c2UgZGF0YSAoYW55IHR5cGUpLlxuICogUmV0dXJuIG5vbi12b2lkIHRvIHBhdXNlLCByZXR1cm4gdm9pZCB0byBjb250aW51ZSBub3JtYWxseS5cbiAqL1xuZXhwb3J0IHR5cGUgUGF1c2FibGVTdGFnZUZ1bmN0aW9uPFRTY29wZSA9IGFueT4gPSAoXG4gIHNjb3BlOiBUU2NvcGUsXG4gIGJyZWFrUGlwZWxpbmU6ICgpID0+IHZvaWQsXG4pID0+IFByb21pc2U8dW5rbm93bj4gfCB1bmtub3duO1xuXG4vKiogRmFjdG9yeSB0aGF0IGNyZWF0ZXMgYSBzY29wZSBpbnN0YW5jZSBmb3IgZWFjaCBzdGFnZS4gKi9cbmV4cG9ydCB0eXBlIFNjb3BlRmFjdG9yeTxUU2NvcGUgPSBhbnk+ID0gKFxuICBjb250ZXh0OiBTdGFnZUNvbnRleHQsXG4gIHN0YWdlTmFtZTogc3RyaW5nLFxuICByZWFkT25seUNvbnRleHQ/OiB1bmtub3duLFxuICBleGVjdXRpb25FbnY/OiBFeGVjdXRpb25FbnYsXG4pID0+IFRTY29wZTtcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBTdHJlYW1pbmdcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5leHBvcnQgdHlwZSBTdHJlYW1Ub2tlbkhhbmRsZXIgPSAoc3RyZWFtSWQ6IHN0cmluZywgdG9rZW46IHN0cmluZykgPT4gdm9pZDtcbmV4cG9ydCB0eXBlIFN0cmVhbUxpZmVjeWNsZUhhbmRsZXIgPSAoc3RyZWFtSWQ6IHN0cmluZywgZnVsbFRleHQ/OiBzdHJpbmcpID0+IHZvaWQ7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3RyZWFtSGFuZGxlcnMge1xuICBvblRva2VuPzogU3RyZWFtVG9rZW5IYW5kbGVyO1xuICBvblN0YXJ0PzogU3RyZWFtTGlmZWN5Y2xlSGFuZGxlcjtcbiAgb25FbmQ/OiBTdHJlYW1MaWZlY3ljbGVIYW5kbGVyO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFBhcmFsbGVsLWZvci1lYWNoIChkeW5hbWljIGZhbi1vdXQpXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLyoqXG4gKiBBIGJ1aWx0IGNoYXJ0LCBhcyBgYWRkUGFyYWxsZWxGb3JFYWNoYCdzIGBicmFuY2hgIGZhY3RvcnkgcmV0dXJucyBpdC5cbiAqXG4gKiBTdHJ1Y3R1cmFsbHkgdGhlIHN1YnNldCBvZiBgRmxvd0NoYXJ0YCB0aGUgZW5naW5lIG5lZWRzIHRvIG1vdW50IGEgYnJhbmNoIOKAlFxuICogZGVjbGFyZWQgaGVyZSByYXRoZXIgdGhhbiBpbXBvcnRlZCBzbyBgZW5naW5lL2Aga2VlcHMgaXRzIG9uZS13YXkgZGVwZW5kZW5jeVxuICogb24gYGJ1aWxkZXIvYC4gQW55IGBmbG93Q2hhcnQoLi4uKS5idWlsZCgpYCByZXN1bHQgc2F0aXNmaWVzIGl0LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEJyYW5jaENoYXJ0PFRPdXQgPSBhbnksIFRTY29wZSA9IGFueT4ge1xuICByb290OiBTdGFnZU5vZGU8VE91dCwgVFNjb3BlPjtcbiAgc3RhZ2VNYXA6IE1hcDxzdHJpbmcsIFN0YWdlRnVuY3Rpb248VE91dCwgVFNjb3BlPj47XG4gIHN1YmZsb3dzPzogUmVjb3JkPHN0cmluZywgeyByb290OiBTdGFnZU5vZGU8VE91dCwgVFNjb3BlPiB9PjtcbiAgYnVpbGRUaW1lU3RydWN0dXJlPzogdW5rbm93bjtcbn1cblxuLyoqXG4gKiBSdW50aW1lIGZhbi1vdXQgY29uZmlnIOKAlCBvbmUgYnJhbmNoIHBlciBpdGVtLCBicmFuY2ggQ09VTlQgZGVjaWRlZCBhdFxuICogcnVudGltZSBmcm9tIHRoZSBwYXlsb2FkLiBEZXNpZ246IGRvY3MvZGVzaWduL2V4ZWN1dGlvbi1jb250cm9sLm1kIChEMikuXG4gKlxuICogRWFjaCBicmFuY2ggcnVucyBhcyBhIGdlbmVyYXRlZCBTVUJGTE9XIChpc29sYXRlZCBydW50aW1lLCBvd24gY29tbWl0IGxvZyxcbiAqIGFkZHJlc3NhYmxlIGF0IGA8c3RhZ2VJZD5+PGluZGV4PmAgaW4gZXZlcnkgdHJhY2UgcXVlcnkpLCB3aGljaCBpcyB3aGF0XG4gKiBtYWtlcyBicmFuY2hlcyB1bmFibGUgdG8gY29ycnVwdCBlYWNoIG90aGVyJ3MgaW4tZmxpZ2h0IHN0YXRlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBhcmFsbGVsRm9yRWFjaENvbmZpZzxUSXRlbSA9IGFueSwgVFNjb3BlID0gYW55PiB7XG4gIC8qKlxuICAgKiBQaWNrcyB0aGUgaXRlbXMgdG8gZmFuIG91dCBvdmVyLCBmcm9tIHRoZSBsaXZlIHNjb3BlLiBSZWFkcyBoZXJlIGFyZVxuICAgKiB0cmFja2VkIGxpa2UgYW55IG90aGVyIHN0YWdlIHJlYWQsIHNvIHRoZSBmYW4tb3V0J3Mgb3duIGlucHV0cyBzaG93IHVwIGluXG4gICAqIHRoZSB0cmFjZSBhbmQgaW4gYSBiYWNrd2FyZCBzbGljZS5cbiAgICovXG4gIGl0ZW1zOiAoc2NvcGU6IFRTY29wZSkgPT4gcmVhZG9ubHkgVEl0ZW1bXTtcbiAgLyoqXG4gICAqIEJ1aWxkcyB0aGUgY2hhcnQgZm9yIE9ORSBpdGVtLiBDYWxsZWQgb25jZSBwZXIgZXhlY3V0ZWQgYnJhbmNoLCB3aXRoIHRoZVxuICAgKiBpdGVtIGFuZCBpdHMgaW5kZXgg4oCUIGNsb3NlIG92ZXIgdGhlbSwgb3IgcmVhZCB0aGUgYGl0ZW1gIC8gYGluZGV4YCB2YWx1ZXNcbiAgICogc2VlZGVkIGludG8gdGhlIGJyYW5jaCdzIG93biBzY29wZS5cbiAgICovXG4gIGJyYW5jaDogKGl0ZW06IFRJdGVtLCBpbmRleDogbnVtYmVyKSA9PiBCcmFuY2hDaGFydDtcbiAgLyoqXG4gICAqIEhhcmQgY2VpbGluZyBvbiBicmFuY2hlcyBwZXIgZXhlY3V0aW9uLiBSRVFVSVJFRDogYW4gdW5ib3VuZGVkIGZhbi1vdXRcbiAgICogZHJpdmVuIGJ5IG1vZGVsIG91dHB1dCBpcyBhIHJlc291cmNlIGF0dGFjaywgc28gdGhlcmUgaXMgbm8gZGVmYXVsdCB0b1xuICAgKiBmb3JnZXQuIEV4dHJhIGl0ZW1zIGRvIG5vdCBydW4g4oCUIHRoZSB0cnVuY2F0aW9uIGlzIHJlY29yZGVkLCBuZXZlciBzaWxlbnQuXG4gICAqL1xuICBtYXhCcmFuY2hlczogbnVtYmVyO1xuICAvKipcbiAgICogU3RhdGUga2V5IHRoZSBvcmRlcmVkIHJlc3VsdHMgYXJyYXkgaXMgd3JpdHRlbiB0byBvbiB0aGUgcGFyZW50IHNjb3BlLlxuICAgKiBSRVFVSVJFRCDigJQgYSBrZXkgZGVyaXZlZCBmcm9tIHRoZSBzdGFnZSBpZCBjb3VsZCBzaWxlbnRseSBvdmVyd3JpdGUgc3RhdGVcbiAgICogdGhlIGNoYXJ0IGFscmVhZHkgb3ducy5cbiAgICovXG4gIGludG86IHN0cmluZztcbiAgLyoqXG4gICAqIEZhbi1vdXQgZXJyb3IgcG9saWN5IOKAlCB0aGUgU0FNRSBwb2xpY3kgdGhlIGV4aXN0aW5nIHBhcmFsbGVsIGZhbi1vdXQgdXNlcy5cbiAgICogYHRydWVgID0gYFByb21pc2UuYWxsYCAodGhlIGZpcnN0IGZhaWxpbmcgYnJhbmNoIHJlamVjdHMgdGhlIHN0YWdlKTtcbiAgICogb21pdHRlZC9mYWxzZSA9IGJlc3QtZWZmb3J0IGBQcm9taXNlLmFsbFNldHRsZWRgIChldmVyeSBicmFuY2ggcnVuczsgYVxuICAgKiBmYWlsZWQgYnJhbmNoJ3Mgc2xvdCBpbiB0aGUgcmVzdWx0cyBhcnJheSBpcyBgdW5kZWZpbmVkYCkuXG4gICAqL1xuICBmYWlsRmFzdD86IGJvb2xlYW47XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gUmV0cnkgKHBlci1zdGFnZSBkZWNsYXJhdGl2ZSBwb2xpY3kpXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLy8gVGhlIHBvbGljeSB0aGUgYXR0ZW1wdCBydW5uZXIgcnVuczogZGVjbGFyZWQgb25jZSwgaW4gdGhlIGF0dGVtcHQgbGVhZiAoYGF0dGVtcHQvdHlwZXMudHNgLCAxMC4xKSwgYW5kIG5hbWVkXG4vLyBoZXJlIHNvIGV2ZXJ5IGVuZ2luZSBhbmQgYnVpbGRlciBzaXRlIGtlZXBzIGl0cyBpbXBvcnQuXG5leHBvcnQgdHlwZSB7IFJldHJ5UG9saWN5LCBTdGFnZVRvdWNoZXMgfSBmcm9tICcuLi9hdHRlbXB0L3R5cGVzLmpzJztcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBTdWJmbG93XG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLyoqXG4gKiBDb250cm9scyBob3cgYXJyYXkgdmFsdWVzIGZyb20gb3V0cHV0TWFwcGVyIGFyZSBtZXJnZWQgaW50byBwYXJlbnQgc2NvcGUuXG4gKi9cbmV4cG9ydCBlbnVtIEFycmF5TWVyZ2VNb2RlIHtcbiAgLyoqIEFwcGVuZCBzdWJmbG93IG91dHB1dCB0byBleGlzdGluZyBwYXJlbnQgYXJyYXk6IFsuLi5leGlzdGluZywgLi4udmFsdWVdLiBEZWZhdWx0LiAqL1xuICBDb25jYXQgPSAnY29uY2F0JyxcbiAgLyoqIE92ZXJ3cml0ZSBwYXJlbnQgYXJyYXkgd2l0aCBzdWJmbG93IG91dHB1dC4gVXNlIGZvciBEeW5hbWljIGxvb3BzLiAqL1xuICBSZXBsYWNlID0gJ3JlcGxhY2UnLFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFN1YmZsb3dNb3VudE9wdGlvbnM8VFBhcmVudFNjb3BlID0gYW55LCBUU3ViZmxvd0lucHV0ID0gYW55LCBUU3ViZmxvd091dHB1dCA9IGFueT4ge1xuICBpbnB1dE1hcHBlcj86IChwYXJlbnRTY29wZTogVFBhcmVudFNjb3BlKSA9PiBUU3ViZmxvd0lucHV0O1xuICAvKipcbiAgICogTWFwcyBzdWJmbG93IG91dHB1dCBiYWNrIGludG8gcGFyZW50IHNjb3BlLlxuICAgKlxuICAgKiAqKkFycmF5IG1lcmdlIGJlaGF2aW9yKiogaXMgY29udHJvbGxlZCBieSBgYXJyYXlNZXJnZWA6XG4gICAqIC0gYCdjb25jYXQnYCAoZGVmYXVsdCk6IGBbLi4uZXhpc3RpbmcsIC4uLnZhbHVlXWAg4oCUIHJldHVybiBvbmx5ICoqZGVsdGEqKiBpdGVtc1xuICAgKiAtIGAncmVwbGFjZSdgOiBvdmVyd3JpdGVzIHRoZSBwYXJlbnQgdmFsdWUg4oCUIHJldHVybiB0aGUgZnVsbCBhcnJheVxuICAgKlxuICAgKiBTY2FsYXIgdmFsdWVzIGFyZSBhbHdheXMgcmVwbGFjZWQgcmVnYXJkbGVzcyBvZiBgYXJyYXlNZXJnZWAuXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogLy8gRGVsdGEgbW9kZSAoZGVmYXVsdCkg4oCUIHJldHVybiBvbmx5IG5ldyBpdGVtcywgY29uY2F0IGFwcGVuZHNcbiAgICogb3V0cHV0TWFwcGVyOiAoc2YpID0+ICh7IG1lc3NhZ2VzOiBzZi5uZXdNZXNzYWdlcyB9KVxuICAgKlxuICAgKiAvLyBSZXBsYWNlIG1vZGUg4oCUIHJldHVybiBmdWxsIGFycmF5LCBwYXJlbnQgdmFsdWUgaXMgb3ZlcndyaXR0ZW5cbiAgICogLy8gVXNlZnVsIGluIER5bmFtaWMgbG9vcHMgd2hlcmUgdGhlIHN1YmZsb3cgcmVjb21wdXRlcyB0aGUgZnVsbCB2YWx1ZSBlYWNoIGl0ZXJhdGlvblxuICAgKiBvdXRwdXRNYXBwZXI6IChzZikgPT4gKHsgdG9vbERlc2NyaXB0aW9uczogc2YudG9vbERlc2NyaXB0aW9ucyB9KSxcbiAgICogYXJyYXlNZXJnZTogQXJyYXlNZXJnZU1vZGUuUmVwbGFjZSxcbiAgICpcbiAgICogLy8gU2NhbGFycyBhcmUgZmluZSBpbiBib3RoIG1vZGVzIOKAlCBhbHdheXMgcmVwbGFjZWRcbiAgICogb3V0cHV0TWFwcGVyOiAoc2YpID0+ICh7IHN0YXR1czogc2YucmVzdWx0LCBjb3VudDogc2YudG90YWwgfSlcbiAgICogYGBgXG4gICAqL1xuICBvdXRwdXRNYXBwZXI/OiAoc3ViZmxvd091dHB1dDogVFN1YmZsb3dPdXRwdXQsIHBhcmVudFNjb3BlOiBUUGFyZW50U2NvcGUpID0+IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAvKipcbiAgICogQ29udHJvbHMgaG93IGFycmF5IHZhbHVlcyBmcm9tIG91dHB1dE1hcHBlciBhcmUgbWVyZ2VkIGludG8gcGFyZW50IHNjb3BlLlxuICAgKiBBcHBsaWVzIG9ubHkgdG8gdG9wLWxldmVsIGFycmF5IGtleXMuIE5lc3RlZCBhcnJheXMgaW5zaWRlIG9iamVjdHNcbiAgICogYWx3YXlzIHVzZSBhcHBlbmQgKGFwcGVuZFRvQXJyYXkpIHJlZ2FyZGxlc3Mgb2YgdGhpcyBzZXR0aW5nLlxuICAgKlxuICAgKiBAZGVmYXVsdCBBcnJheU1lcmdlTW9kZS5Db25jYXRcbiAgICovXG4gIGFycmF5TWVyZ2U/OiBBcnJheU1lcmdlTW9kZTtcblxuICAvKipcbiAgICogU1RSVUNUVVJFLU9OTFk6IHRoZSBkb3duc3RyZWFtIHN0YWdlIGlkIHRoaXMgYnJhbmNoJ3MgY29udmVyZ2VuY2UgZWRnZVxuICAgKiBwb2ludHMgdG8sIG92ZXJyaWRpbmcgdGhlIGRlZmF1bHQgXCJjb252ZXJnZSBhdCB0aGUgbmV4dCBsaW5lYXIgc3RhZ2UuXCJcbiAgICpcbiAgICogV2hlbiBhIGZvcmsvc2VsZWN0b3IvZGVjaWRlciBicmFuY2ggY2FycmllcyBgY29udmVyZ2VBdGAsIGl0cyB2aXN1YWxpemVkXG4gICAqIGBuZXh0YCBlZGdlIGlzIGZpcmVkIHRvIHRoZSBuYW1lZCBzdGFnZSBpbnN0ZWFkIG9mIHRvIHRoZSBzaGFyZWRcbiAgICogY29udmVyZ2VuY2Ugbm9kZSBpdHMgc2libGluZ3MgdXNlLiBUaGlzIGV4cHJlc3NlcyBhbiB1bmVxdWFsLWRlcHRoIG1lcmdlXG4gICAqIOKAlCBlLmcuIGEgYHRvb2xzYCBzbG90IHRoYXQgYnlwYXNzZXMgdGhlIGBtZXNzYWdlQVBJYCBhc3NlbWJseSBub2RlIGFuZFxuICAgKiBwYWlycyB3aXRoIGl0cyBvdXRwdXQgYXQgYGNhbGwtbGxtYCAoc28gYGNhbGwtbGxtYCByZWFkcyBhcyBhIDItcGFyZW50XG4gICAqIG1lcmdlKSwgZmFpdGhmdWwgdG8gdGhlIEFudGhyb3BpYyB3aXJlIHByb3RvY29sIChzeXN0ZW0rbWVzc2FnZXMgPSB0aGVcbiAgICogbWVzc2FnZSBwYXlsb2FkOyB0b29scyA9IGEgc2VwYXJhdGUgdG9wLWxldmVsIGZpZWxkKS5cbiAgICpcbiAgICogKipUaGlzIGFmZmVjdHMgdGhlIFNUUlVDVFVSRS90b3BvbG9neSBncmFwaCBvbmx5Kiog4oCUIHRoZSBydW50aW1lIGlzXG4gICAqIHVuY2hhbmdlZCAodGhlIGJyYW5jaCdzIG91dHB1dHMgcmlkZSBzaGFyZWQgc2NvcGU7IHRoZSBuYW1lZCB0YXJnZXQgcmVhZHNcbiAgICogdGhlbSB3aGVuIGl0IHJ1bnMpLiBJdCBkb2VzIE5PVCBpbnRyb2R1Y2UgYSBqb2luIGJhcnJpZXIuIFRoZSB0YXJnZXQgaXMgYVxuICAgKiBGT1JXQVJEIHN0YWdlIChhZGRlZCBsYXRlciBpbiB0aGUgY2hhaW4pLCBzbyBpdCBpcyBub3QgdmFsaWRhdGVkIGF0XG4gICAqIGJyYW5jaC1kZWNsYXJhdGlvbiB0aW1lLlxuICAgKi9cbiAgY29udmVyZ2VBdD86IHN0cmluZztcblxuICAvKipcbiAgICogV2hlbiBgdHJ1ZWAsIGFuIGlubmVyIGBzY29wZS4kYnJlYWsocmVhc29uKWAgY2FsbCBpbnNpZGUgdGhpcyBzdWJmbG93XG4gICAqIHByb3BhZ2F0ZXMgdXAgdG8gdGhlIHBhcmVudCDigJQgaS5lLiwgdGhlIHBhcmVudCdzIGBicmVha0ZsYWdgIGlzIHNldFxuICAgKiBhZnRlciB0aGUgc3ViZmxvdyBleGl0cywgdGVybWluYXRpbmcgdGhlIHBhcmVudCdzIG91dGVyIGxvb3AgdG9vLlxuICAgKlxuICAgKiAqKkRlZmF1bHQ6IGBmYWxzZWAqKiAoY3VycmVudCBiZWhhdmlvdXIg4oCUIGlubmVyIGJyZWFrIHN0b3BzIG9ubHkgdGhlXG4gICAqIHN1YmZsb3c7IHBhcmVudCBjb250aW51ZXMpLlxuICAgKlxuICAgKiAjIyBXaGVuIHRvIHVzZVxuICAgKlxuICAgKiBTZXQgYHByb3BhZ2F0ZUJyZWFrOiB0cnVlYCBvbiBzdWJmbG93IG1vdW50cyB0aGF0IHJlcHJlc2VudFxuICAgKiAqKnRlcm1pbmFsKiogYnJhbmNoZXMg4oCUIFwiaWYgdGhpcyBzdWJmbG93IGZpcmVzLCB0aGUgb3V0ZXIgbG9vcCBpc1xuICAgKiBkb25lXCIuIEV4YW1wbGVzOlxuICAgKlxuICAgKiAtIEEgaHVtYW4tcmV2aWV3IHJ1bm5lciB0aGF0IHRha2VzIG92ZXIgZnJvbSBhbiBhZ2VudCdzIHRvb2wtY2FsbGluZ1xuICAgKiAgIGxvb3AgYW5kIHByb2R1Y2VzIHRoZSBmaW5hbCByZXNwb25zZS5cbiAgICogLSBBIHNhZmV0eS1nYXRlIHN1YmZsb3cgdGhhdCBoYWx0cyB0aGUgb3V0ZXIgd29ya2Zsb3cgd2hlbiBhIHBvbGljeVxuICAgKiAgIHZpb2xhdGlvbiBpcyBkZXRlY3RlZC5cbiAgICogLSBBbiBlcnJvci1yZWNvdmVyeSBzdWJmbG93IHRoYXQgcmVzdG9yZXMgc3RhdGUgYW5kIHRoZW4gdGVybWluYXRlcy5cbiAgICpcbiAgICogIyMgU2VtYW50aWNzXG4gICAqXG4gICAqIDEuIEluc2lkZSB0aGUgc3ViZmxvdywgYSBzdGFnZSBjYWxscyBgc2NvcGUuJGJyZWFrKHJlYXNvbilgLlxuICAgKiAyLiBUaGUgc3ViZmxvdydzIG93biBleGVjdXRpb24gc3RvcHMgKG5vcm1hbCBgJGJyZWFrYCBiZWhhdmlvdXIpLlxuICAgKiAzLiBgU3ViZmxvd0V4ZWN1dG9yYCBpbnNwZWN0cyB0aGUgc3ViZmxvdydzIGV4aXQgc3RhdGUuIElmXG4gICAqICAgIGBwcm9wYWdhdGVCcmVhayA9PT0gdHJ1ZWAgQU5EIHRoZSBpbm5lciBicmVhayBmaXJlZCwgaXQgZm9yd2FyZHNcbiAgICogICAgdGhlIGJyZWFrIChhbmQgaXRzIHJlYXNvbikgdG8gdGhlIHBhcmVudCdzIGBicmVha0ZsYWdgLlxuICAgKiA0LiBUaGUgcGFyZW50IHRyYXZlcnNlciBzZWVzIGBzaG91bGRCcmVha2Agb24gaXRzIG5leHQgc3RlcCBhbmQgZXhpdHMuXG4gICAqIDUuIEEgYEZsb3dSZWNvcmRlci5vbkJyZWFrYCBldmVudCBmaXJlcyBhdCB0aGUgcGFyZW50LW1vdW50IGxldmVsIHdpdGhcbiAgICogICAgYHByb3BhZ2F0ZWRGcm9tU3ViZmxvd2AgPSB0aGUgc3ViZmxvdydzIGlkIGFuZCB0aGUgaW5uZXIgcmVhc29uLlxuICAgKlxuICAgKiAjIyBQYXJhbGxlbC9mYW4tb3V0XG4gICAqXG4gICAqIEZvbGxvd3MgdGhlIGV4aXN0aW5nIGxpYnJhcnkgcnVsZSBpbiBgQ2hpbGRyZW5FeGVjdXRvcmA6IHRoZSBwYXJlbnRcbiAgICogYnJlYWtzIG9ubHkgd2hlbiAqKmV2ZXJ5KiogY2hpbGQgb2YgYSBmb3JrIGJyb2tlLiBBIHNpbmdsZVxuICAgKiBgcHJvcGFnYXRlQnJlYWs6IHRydWVgIHN1YmZsb3cgY29udHJpYnV0aW5nIGl0cyBicmVhayB0byB0aGUgY291bnRcbiAgICogZG9lcyBub3Qgb24gaXRzIG93biB0ZXJtaW5hdGUgdGhlIHBhcmVudCBmYW4tb3V0LlxuICAgKlxuICAgKiAjIyBvdXRwdXRNYXBwZXIgc3RpbGwgcnVuc1xuICAgKlxuICAgKiBUaGUgc3ViZmxvdydzIGBvdXRwdXRNYXBwZXJgIChpZiBzdXBwbGllZCkgQUxXQVlTIHJ1bnMgYmVmb3JlIHRoZVxuICAgKiBicmVhayBwcm9wYWdhdGVzLCBzbyB0aGUgc3ViZmxvdydzIHBhcnRpYWwgc3RhdGUgaXMgc3RpbGwgd3JpdHRlbiB0b1xuICAgKiB0aGUgcGFyZW50IHNjb3BlLiBUaGlzIGlzIGludGVudGlvbmFsIOKAlCB0aGUgdHlwaWNhbCB1c2UgY2FzZSBpcyBhblxuICAgKiBcImVzY2FsYXRpb25cIiBzdWJmbG93IHdob3NlIG91dHB1dCBJUyB0aGUgZmluYWwgYW5zd2VyIHRoYXQgbmVlZHMgdG9cbiAgICogbGFuZCBpbiB0aGUgcGFyZW50IHNjb3BlIGJlZm9yZSB0aGUgb3V0ZXIgbG9vcCB0ZXJtaW5hdGVzLiBJZiB5b3VcbiAgICogd2FudCB0byBzdXBwcmVzcyBvdXRwdXQgbWFwcGluZyBvbiBicmVhaywgY2hlY2sgdGhlIGJyZWFrIHN0YXRlXG4gICAqIGluc2lkZSB5b3VyIGBvdXRwdXRNYXBwZXJgIGFuZCByZXR1cm4gYHt9YCBlYXJseS5cbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHByb3BhZ2F0ZUJyZWFrPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogRGVjbGFyZWQgdGFncyAoOS4yMS4xKSBmb3IgdGhlIE1PVU5UIGl0c2VsZiDigJQgdGhlIE5BTUVTIHRoZSBhdXRob3IgcHV0c1xuICAgKiBvbiB0aGlzIG1vdW50IGF0IGJ1aWxkIHRpbWUsIGxhbmRlZCBieSB0aGUgc2FtZSBgYXBwbHlUYWdzYCBldmVyeSBvdGhlclxuICAgKiBgb3B0aW9ucy50YWdzYCBzaXRlIHVzZXMsIHdpdGggdGhlIHNhbWUgcmVmdXNhbHMgKGVtcHR5LCBub24tc3RyaW5nLCB0aGVcbiAgICogcmVzZXJ2ZWQgYH5gIG1hcmtlciwgYSBkdXBsaWNhdGUsIGEgc2Vjb25kIGRlY2xhcmF0aW9uKS5cbiAgICpcbiAgICogQSBtb3VudCBpcyBhIHN0YWdlIHRoYXQgY29tbWl0czogaXRzIGZpcnN0IGJ1bmRsZSBpbiB0aGUgUEFSRU5UIGxvZyBpcyBhXG4gICAqIHN0b3AgaW4gYGNvbW1pdFN0b3BzYCwgc28gYHRhZ1N0b3BzYCBrZWVwcyBpdCBsaWtlIGFueSB0YWdnZWQgc3RhZ2UgYW5kXG4gICAqIGNhcnJpZXMgdGhlc2UgbmFtZXMgYXMgYFN0b3AubWV0YWAuIFN0YW1wZWQgb24gdGhhdCBmaXJzdCBidW5kbGUgb25seVxuICAgKiAodGhlIG1vdW50J3MgZXhpdCBidW5kbGUgY2FycmllcyBub25lIOKAlCB0aGUgb25jZS1wZXItZXhlY3V0aW9uIGxhdykuXG4gICAqIFRoZSBzdWJmbG93J3MgT1dOIGxvZyBpcyB1bnRvdWNoZWQ6IGl0cyBpbm5lciBzdGFnZXMgZGVjbGFyZSB0aGVpciBvd25cbiAgICogdGFncywgYW5kIGBkcmlsbChtb3VudClgIHJlYWRzIHRob3NlIG9mZiB0aGUgaW5uZXIgbG9nLlxuICAgKlxuICAgKiBUaGlzIGlzIHRoZSBPTkxZIHRhZyBzaXRlIGZvciBhIGZvcmstY2hpbGQgbW91bnQgKGBhZGRTdWJGbG93Q2hhcnRgKSBvclxuICAgKiBhIGJyYW5jaCBtb3VudCAoYGFkZFN1YkZsb3dDaGFydEJyYW5jaGApIOKAlCBhZnRlciB0aG9zZSB0aGUgY3Vyc29yIHN0aWxsXG4gICAqIHBvaW50cyBhdCB0aGUgcGFyZW50LCBzbyBgLnRhZygpYCByZWZ1c2VzIHJhdGhlciB0aGFuIG1pcy1hdHRyaWJ1dGUuIEFcbiAgICogbGluZWFyIG1vdW50IChgYWRkU3ViRmxvd0NoYXJ0TmV4dGApIG1vdmVzIHRoZSBjdXJzb3IsIHNvIGAudGFnKClgIHdvcmtzXG4gICAqIHRoZXJlIHRvbzsgZGVjbGFyZSBpbiBvbmUgcGxhY2UsIG5vdCBib3RoLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIC5hZGRTZWxlY3RvckZ1bmN0aW9uKCdTbG90cycsIHBpY2tTbG90cywgJ3Nsb3RzJylcbiAgICogICAuYWRkU3ViRmxvd0NoYXJ0QnJhbmNoKCdtZW1vcnknLCBtZW1vcnlDaGFydCwgJ01lbW9yeScsIHsgdGFnczogWydzbG90Om1lbW9yeSddIH0pXG4gICAqICAgLmFkZFN1YkZsb3dDaGFydEJyYW5jaCgndG9vbHMnLCB0b29sc0NoYXJ0LCAnVG9vbHMnLCB7IHRhZ3M6IFsnc2xvdDp0b29scyddIH0pXG4gICAqIC5lbmQoKVxuICAgKiBgYGBcbiAgICovXG4gIHRhZ3M/OiByZWFkb25seSBzdHJpbmdbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTdWJmbG93UmVzdWx0IHtcbiAgc3ViZmxvd0lkOiBzdHJpbmc7XG4gIHN1YmZsb3dOYW1lOiBzdHJpbmc7XG4gIHRyZWVDb250ZXh0OiB7XG4gICAgLyoqXG4gICAgICogVGhlIHN1YmZsb3cncyBmaW5hbCBzdGF0ZS4gVGhlIHRyYXZlcnNlcidzIHJlY29yZCBob2xkcyB0aGUgTElWRSBoZWFwXG4gICAgICog4oCUIHdoYXQgYSBwbGFpbiBgZ2V0U25hcHNob3QoKWAgYW5kIHRoZSBjaGVja3BvaW50IHNlZS4gVW5kZXJcbiAgICAgKiBgZ2V0U25hcHNob3QoeyByZWRhY3Q6IHRydWUgfSlgIHRoZSBleGVjdXRvciBzZXJ2ZXMgdGhlIHN1YmZsb3cncyBvd25cbiAgICAgKiByZWRhY3RlZCBtaXJyb3IgaGVyZSBpbnN0ZWFkICg5LjIwLjA7IGBoYW5kbGVycy9zZXJ2ZWRTdWJmbG93UmVzdWx0c2ApLFxuICAgICAqIHdoaWNoIGlzIGV4YWN0bHkgd2hhdCBgc3RhdGVBdGAgZm9sZHMgYGhpc3RvcnlgIHRvLlxuICAgICAqL1xuICAgIGdsb2JhbENvbnRleHQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgIHN0YWdlQ29udGV4dHM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgIGhpc3Rvcnk6IHVua25vd25bXTtcbiAgICAvKiogSWRlbnRpdHkgb2YgdGhlIGxvY2FsIGhpc3RvcnksIG5vdCBpdHMgcGFyZW50J3MgbG9nLiAqL1xuICAgIHJlYWRvbmx5IGxvZ0FkZHJlc3M/OiBMb2dBZGRyZXNzO1xuICAgIC8qKlxuICAgICAqIFRoZSBzdWJmbG93J3MgT1dOIGZvbGQgYmFzZSDigJQgdGhlIHN0YXRlIGl0cyBpc29sYXRlZCBydW50aW1lIHN0YXJ0ZWRcbiAgICAgKiBmcm9tLCBiZWZvcmUgaXRzIGZpcnN0IGNvbW1pdC4gVGhlIHNpYmxpbmcgb2ZcbiAgICAgKiBgUnVudGltZVNuYXBzaG90LmluaXRpYWxTdGF0ZWAsIGNhcnJpZWQgaGVyZSBzbyBhIHN1YmZsb3cncyBgaGlzdG9yeWBcbiAgICAgKiBjYW4gYmUgZm9sZGVkIG9mZmxpbmUgZXhhY3RseSBsaWtlIHRoZSBydW4ncyBsb2cgKGBzdGF0ZUF0YCxcbiAgICAgKiBgdGltZVRyYXZlbCguLi4pLmRyaWxsKG1vdW50KWApLiBGcm96ZW4gYW5kIGRldGFjaGVkLlxuICAgICAqXG4gICAgICogTm9ybWFsbHkgYHt9YDogYSBzdWJmbG93J3MgYGlucHV0TWFwcGVyYCBzZWVkIGlzIGl0c2VsZiB0aGUgZmlyc3RcbiAgICAgKiBDT01NSVQgaW4gYGhpc3RvcnlgICh0aGUgcm9vdCBjb250ZXh0IGNvbW1pdHMgaXQpLCBub3QgYSBwcmUtcnVuIGJhc2UuXG4gICAgICovXG4gICAgaW5pdGlhbFN0YXRlPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIH07XG4gIHBhcmVudFN0YWdlSWQ6IHN0cmluZztcbiAgcGlwZWxpbmVTdHJ1Y3R1cmU/OiB1bmtub3duO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFN1YmZsb3cgVHJhdmVyc2VyIEZhY3Rvcnlcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vKipcbiAqIFN1YmZsb3dUcmF2ZXJzZXJGYWN0b3J5IOKAlCBDcmVhdGVzIGEgRmxvd2NoYXJ0VHJhdmVyc2VyIGZvciBzdWJmbG93IGV4ZWN1dGlvbi5cbiAqXG4gKiBJbmplY3RlZCBpbnRvIFN1YmZsb3dFeGVjdXRvciB0byBicmVhayB0aGUgY2lyY3VsYXIgZGVwZW5kZW5jeTpcbiAqIEZsb3djaGFydFRyYXZlcnNlciDihpIgU3ViZmxvd0V4ZWN1dG9yIOKGkiBGbG93Y2hhcnRUcmF2ZXJzZXIuXG4gKlxuICogVGhlIGZhY3RvcnkgY2FwdHVyZXMgcGFyZW50IHRyYXZlcnNlciBjb25maWcgKHN0YWdlTWFwLCBzY29wZUZhY3RvcnksIG5hcnJhdGl2ZSwgZXRjLilcbiAqIGluIGEgY2xvc3VyZS4gU3ViZmxvd0V4ZWN1dG9yIGNhbGxzIGl0IHdpdGggc3ViZmxvdy1zcGVjaWZpYyBvdmVycmlkZXMgKHJvb3QsIHJ1bnRpbWUsIGlucHV0KS5cbiAqIFRoZSByZXR1cm5lZCB0cmF2ZXJzZXIgdXNlcyB0aGUgU0FNRSA3LXBoYXNlIGFsZ29yaXRobSBhcyB0aGUgdG9wLWxldmVsIHRyYXZlcnNlcixcbiAqIHNvIGRlY2lkZXJzLCBzZWxlY3RvcnMsIGxvb3BzLCBsYXp5IHN1YmZsb3dzLCBhbmQgYWJvcnQgc2lnbmFscyBhbGwgd29yayBpbnNpZGUgc3ViZmxvd3MuXG4gKi9cbmV4cG9ydCB0eXBlIFN1YmZsb3dUcmF2ZXJzZXJGYWN0b3J5PFRPdXQgPSBhbnksIFRTY29wZSA9IGFueT4gPSAob3B0aW9uczoge1xuICAvKiogUm9vdCBub2RlIG9mIHRoZSBzdWJmbG93ICh3aXRoIGlzU3ViZmxvd1Jvb3Qgc3RyaXBwZWQpIOKAlCB0aGUgZ3JhcGggZXZlcnkgaWQgaW5zaWRlIHRoZSBzdWJmbG93IHJlc29sdmVzIGFnYWluc3QuICovXG4gIHJvb3Q6IFN0YWdlTm9kZTxUT3V0LCBUU2NvcGU+O1xuICAvKipcbiAgICogV2hlcmUgdGhlIHN1YmZsb3cncyB0cmF2ZXJzYWwgc3RhcnRzIHdoZW4gbm90IGF0IGByb290YCDigJQgYSByZXN1bWUnc1xuICAgKiBvbmUtc2hvdCByZS1lbnRyeSAoYFJlc3VtZUhvcC5lbnRyeWApOiB0aGUgbmV4dCBtb3VudCBvbiB0aGUgcGF1c2UgcGF0aCxcbiAgICogb3IgdGhlIHBhdXNlZCBzdGFnZSdzIHN0YW5kLWluLCBlYWNoIHdpdGggaXRzIGRpc3BhdGNoZXIncyBjb250aW51YXRpb25cbiAgICogYXR0YWNoZWQuIFZpc2l0ZWQgb25jZSwgZmlyc3Q7IG5ldmVyIHJlc29sdmFibGUgYnkgaWQuXG4gICAqL1xuICBlbnRyeT86IFN0YWdlTm9kZTxUT3V0LCBUU2NvcGU+O1xuICAvKipcbiAgICogUGFyYWxsZWwgc2libGluZ3MnIHBhdXNlcyB3YWl0aW5nIGluIHRoaXMgc3ViZmxvdyAoYFJlc3VtZUhvcC5wZW5kaW5nUGF1c2VzYCxcbiAgICogOS4yOC4wKSDigJQgcmFpc2VkIGluIG9yZGVyIG9uY2UgYGVudHJ5YCdzIGNoYWluIGVuZHMuXG4gICAqL1xuICBwZW5kaW5nUGF1c2VzPzogcmVhZG9ubHkgUXVldWVkUGF1c2VbXTtcbiAgLyoqIElzb2xhdGVkIGV4ZWN1dGlvbiBydW50aW1lIGZvciB0aGUgc3ViZmxvdy4gKi9cbiAgZXhlY3V0aW9uUnVudGltZTogSUV4ZWN1dGlvblJ1bnRpbWU7XG4gIC8qKiBNYXBwZWQgaW5wdXQgZnJvbSBwYXJlbnQgc2NvcGUgKGJlY29tZXMgcmVhZE9ubHlDb250ZXh0IGZvciBzdGFnZXMpLiAqL1xuICByZWFkT25seUNvbnRleHQ/OiB1bmtub3duO1xuICAvKiogU3ViZmxvdyBpZGVudGlmaWVyIOKAlCB1c2VkIGFzIGJyYW5jaFBhdGggZm9yIG5hcnJhdGl2ZSBjb250ZXh0LiAqL1xuICBzdWJmbG93SWQ/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBSRkMtMDAzIEQxOiBydW50aW1lU3RhZ2VJZCBvZiB0aGUgc3ViZmxvdyBNT1VOVCBzdGFnZSBpbiB0aGUgcGFyZW50XG4gICAqIHRyYXZlcnNlci4gQmVjb21lcyB0aGUgYHBhcmVudFJ1bnRpbWVTdGFnZUlkYCBmYWxsYmFjayBmb3IgdGhlIHN1YmZsb3cnc1xuICAgKiByb290IHN0YWdlIHNvIHJ1bnRpbWUgYW5jZXN0b3IgY2hhaW5zIGNyb3NzIHN1YmZsb3cgYm91bmRhcmllcy5cbiAgICovXG4gIHBhcmVudE1vdW50UnVudGltZVN0YWdlSWQ/OiBzdHJpbmc7XG59KSA9PiBTdWJmbG93VHJhdmVyc2VySGFuZGxlPFRPdXQsIFRTY29wZT47XG5cbi8qKlxuICogSGFuZGxlIHJldHVybmVkIGJ5IFN1YmZsb3dUcmF2ZXJzZXJGYWN0b3J5LlxuICogUHJvdmlkZXMgZXhlY3V0ZSgpICsgYWNjZXNzIHRvIG5lc3RlZCBzdWJmbG93IHJlc3VsdHMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3ViZmxvd1RyYXZlcnNlckhhbmRsZTxUT3V0ID0gYW55LCBUU2NvcGUgPSBhbnk+IHtcbiAgLyoqIEV4ZWN1dGUgdGhlIHN1YmZsb3cncyBncmFwaCB1c2luZyB0aGUgZnVsbCA3LXBoYXNlIHRyYXZlcnNhbCBhbGdvcml0aG0uICovXG4gIGV4ZWN1dGUoKTogUHJvbWlzZTxUcmF2ZXJzYWxSZXN1bHQ+O1xuICAvKiogQ29sbGVjdCBuZXN0ZWQgc3ViZmxvdyByZXN1bHRzIChmcm9tIHN1YmZsb3dzIG1vdW50ZWQgaW5zaWRlIHRoaXMgc3ViZmxvdykuICovXG4gIGdldFN1YmZsb3dSZXN1bHRzKCk6IE1hcDxzdHJpbmcsIFN1YmZsb3dSZXN1bHQ+O1xuICAvKipcbiAgICogRmluYWwgYnJlYWsgc3RhdGUgb2YgdGhlIHN1YmZsb3cgYWZ0ZXIgYGV4ZWN1dGUoKWAgcmV0dXJucy5cbiAgICpcbiAgICogICAtIGBzaG91bGRCcmVhazogdHJ1ZWAgIOKGkiBhIHN0YWdlIGluc2lkZSB0aGUgc3ViZmxvdyBjYWxsZWRcbiAgICogICAgIGBzY29wZS4kYnJlYWsocmVhc29uKWAsIHN0b3BwaW5nIHRoZSBzdWJmbG93J3Mgb3duIHRyYXZlcnNhbC5cbiAgICogICAtIGByZWFzb25gICAgICAgICAgICAgIOKGkiB0aGUgb3B0aW9uYWwgc3RyaW5nIHBhc3NlZCB0byBgJGJyZWFrYC5cbiAgICpcbiAgICogVXNlZCBieSBgU3ViZmxvd0V4ZWN1dG9yYCB0byBpbXBsZW1lbnQgYFN1YmZsb3dNb3VudE9wdGlvbnMucHJvcGFnYXRlQnJlYWtgOlxuICAgKiBpZiB0aGUgbW91bnQgb3B0cyBpbiBBTkQgdGhlIHN1YmZsb3cgYnJva2UsIHRoZSBwYXJlbnQncyBicmVhayBmbGFnIGlzXG4gICAqIGZvcndhcmRlZC5cbiAgICovXG4gIGdldEJyZWFrU3RhdGUoKTogeyBzaG91bGRCcmVhazogYm9vbGVhbjsgcmVhc29uPzogc3RyaW5nIH07XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gRXhlY3V0aW9uIFJ1bnRpbWUgSW50ZXJmYWNlXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLyoqXG4gKiBJRXhlY3V0aW9uUnVudGltZSDigJQgSW50ZXJmYWNlIGZvciB0aGUgcnVudGltZSBlbnZpcm9ubWVudC5cbiAqXG4gKiBEZWZpbmVzIHRoZSBjb250cmFjdCB0aGF0IGVuZ2luZSBoYW5kbGVycyBuZWVkIGZyb20gdGhlIHJ1bm5lciBsYXllcixcbiAqIGF2b2lkaW5nIGNpcmN1bGFyIGltcG9ydHMgYmV0d2VlbiBlbmdpbmUvIGFuZCBydW5uZXIvLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIElFeGVjdXRpb25SdW50aW1lIHtcbiAgZ2xvYmFsU3RvcmU6IHsgZ2V0U3RhdGUoKTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfTtcbiAgLyoqXG4gICAqIFRoZSByZWRhY3RlZCBtaXJyb3Igb2YgYGdsb2JhbFN0b3JlYCDigJQgcHJlc2VudCB3aGVuIHRoZSBydW4ncyBwb2xpY3lcbiAgICoga2VlcHMgb25lIChgUnVuUG9saWN5Lm1pcnJvcmA6IGEgcnVuIHdpdGggYSByZWRhY3Rpb24gcG9saWN5KSwgZWxzZSBhYnNlbnQuXG4gICAqIGBTdWJmbG93RXhlY3V0b3JgIHJlYWRzIGl0IHRvIHNlcnZlIGEgc3ViZmxvdydzIHN0YXRlICg5LjIwLjApLlxuICAgKi9cbiAgcmVkYWN0ZWRTdG9yZT86IFNoYXJlZE1lbW9yeTtcbiAgcm9vdFN0YWdlQ29udGV4dDogU3RhZ2VDb250ZXh0O1xuICBleGVjdXRpb25IaXN0b3J5OiB7IGxpc3QoKTogdW5rbm93bltdIH07XG4gIC8qKlxuICAgKiBBIGZyZXNoIHJvb3QgZnJhbWUgb24gdGhpcyBydW50aW1lIOKAlCBpdHMgc3RvcmUsIGl0cyBsb2csIHRoZSBydW4ncyBwb2xpY3lcbiAgICogYW5kIG1pcnJvciAoYEV4ZWN1dGlvblJ1bnRpbWUubmV3Um9vdGApLiBgU3ViZmxvd0V4ZWN1dG9yYCBzd2FwcyBhXG4gICAqIHN1YmZsb3cncyBzZWVkIGZyYW1lIGZvciB0aGUgZnJhbWUgaXRzIGZpcnN0IHN0YWdlIHJ1bnMgb24gd2l0aCBpdC5cbiAgICovXG4gIG5ld1Jvb3QobmFtZTogc3RyaW5nLCBpZDogc3RyaW5nKTogU3RhZ2VDb250ZXh0O1xuICBnZXRTbmFwc2hvdChvcHRpb25zPzogeyByZWRhY3Q/OiBib29sZWFuIH0pOiB7XG4gICAgc2hhcmVkU3RhdGU6IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgIGV4ZWN1dGlvblRyZWU6IHVua25vd247XG4gICAgLyoqIFRoZSBjb21taXQgbG9nJ3MgZm9sZCBiYXNlIOKAlCBzZWUgYFJ1bnRpbWVTbmFwc2hvdC5pbml0aWFsU3RhdGVgLiAqL1xuICAgIGluaXRpYWxTdGF0ZT86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgIGNvbW1pdExvZzogdW5rbm93bltdO1xuICAgIHJlYWRvbmx5IGxvZ0FkZHJlc3M/OiBMb2dBZGRyZXNzO1xuICAgIC8qKiBEdWFsLWtleWVkIGJ5IHN1YmZsb3cgcGF0aCAobGFzdCBpdGVyYXRpb24pIEFORCBwZXItZXhlY3V0aW9uIG1vdW50IHJ1bnRpbWVTdGFnZUlkXG4gICAgICogIChlYWNoIGl0ZXJhdGlvbikg4oCUIHNlZSBSdW50aW1lU25hcHNob3Quc3ViZmxvd1Jlc3VsdHMgLyBzdWJmbG93LWNvbW1pdC12aXNpYmlsaXR5LiAqL1xuICAgIHN1YmZsb3dSZXN1bHRzPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgcmVjb3JkZXJzPzogQXJyYXk8eyBpZDogc3RyaW5nOyBuYW1lOiBzdHJpbmc7IGRhdGE6IHVua25vd24gfT47XG4gIH07XG4gIHNldFJvb3RPYmplY3QocGF0aDogc3RyaW5nW10sIGtleTogc3RyaW5nLCB2YWx1ZTogdW5rbm93bik6IHZvaWQ7XG4gIGdldFBpcGVsaW5lcygpOiBzdHJpbmdbXTtcbiAgLyoqXG4gICAqIFdoZXJlIGEgbW91bnQncyBvd24gbG9nIHdyaXRlcyBhcyBpdCBsYW5kcyAoMTAuMSwgUDYpIOKAlCB0aGUgcnVuJ3Mgc2luayBhdCB0aGlzIGxvZydzIGFkZHJlc3MgcGx1cyB0aGUgbW91bnQnc1xuICAgKiBgcnVudGltZVN0YWdlSWRgLiBgdW5kZWZpbmVkYCB3aGVuIHRoaXMgcnVudGltZSdzIGxvZyB3cml0ZXMgdG8gbm8gc2luay4gYFN1YmZsb3dFeGVjdXRvcmAgaGFuZHMgaXQgdG8gdGhlXG4gICAqIG5lc3RlZCBydW50aW1lIGl0IGNvbnN0cnVjdHMuXG4gICAqL1xuICByZWNvcmRGb3I/KG1vdW50UnVudGltZVN0YWdlSWQ6IHN0cmluZywgbWV0YT86IE1ldGEpOiB1bmtub3duO1xuICAvKiogVGVsbCB0aGUgc2luayB0aGlzIHJ1bnRpbWUncyBsb2cgZW5kZWQgKDEwLjEsIFA2KSDigJQgYSBtb3VudCdzIGF0IGl0cyBleGl0LiBOby1vcCB3aXRob3V0IGEgc2luay4gKi9cbiAgY2xvc2VSZWNvcmQ/KG91dGNvbWU6IExvZ091dGNvbWUsIG1ldGE/OiBNZXRhKTogdm9pZDtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBFeGVjdXRpb24gRW52aXJvbm1lbnQg4oCUIHJlYWQtb25seSwgcHJvcGFnYXRlcyB0aHJvdWdoIG5lc3RlZCBleGVjdXRvcnNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vKipcbiAqIEV4ZWN1dGlvbkVudiDigJQgaW5mcmFzdHJ1Y3R1cmUgdmFsdWVzIHRoYXQgcHJvcGFnYXRlIHRocm91Z2ggbmVzdGVkIGV4ZWN1dG9ycy5cbiAqXG4gKiBMaWtlIGBwcm9jZXNzLmVudmAgZm9yIGZsb3djaGFydHM6IHJlYWQtb25seSwgaW5oZXJpdGVkIGJ5IGNoaWxkIGV4ZWN1dG9ycyxcbiAqIGluZnJhc3RydWN0dXJlLW9ubHkgKG5vdCBidXNpbmVzcyBsb2dpYykuXG4gKlxuICogTGl0bXVzIHRlc3Q6IENyZWF0ZWQgZXh0ZXJuYWwgdG8gdGhlIGZsb3djaGFydCArIHBhc3NlZCBpbiBmb3IgZXhlY3V0aW9uID0gZW52LlxuICogQnVzaW5lc3MgY29uZmlnIGZvciBhIHNwZWNpZmljIGZsb3djaGFydCA9IGFyZ3MgKGdldEFyZ3MoKSkuXG4gKlxuICogSW50ZW50aW9uYWxseSBhIGNsb3NlZCB0eXBlIOKAlCBub3QgZXh0ZW5zaWJsZSB0byBwcmV2ZW50IGNvdXBsaW5nIGJldHdlZW5cbiAqIHBhcmVudCBhbmQgY2hpbGQgZmxvd2NoYXJ0cy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFeGVjdXRpb25FbnYge1xuICAvKipcbiAgICogQWJvcnRTaWduYWwgZm9yIGNvb3BlcmF0aXZlIGNhbmNlbGxhdGlvbiBhY3Jvc3MgbmVzdGVkIGV4ZWN1dG9ycy4gSG9ub3VyZWQgYnkgdGhlIGVuZ2luZSAoMTAuMSk6IGl0IGVuZHMgdGhlXG4gICAqIHJ1biBsaWtlIGBSdW5PcHRpb25zLnNpZ25hbGAuIFVuZGVyIGEgcnVuIHRoYXQgaGFzIGEgc2lnbmFsIG9yIGEgZGVhZGxpbmUgQU5EIGFuIGVudiwgYSBzdGFnZSByZWFkcyB0aGUgcnVuJ3NcbiAgICogT05FIGVmZmVjdGl2ZSBzaWduYWwgaGVyZSDigJQgYFJ1bk9wdGlvbnMuc2lnbmFsYCwgdGhpcyBvbmUgYW5kIHRoZSBkZWFkbGluZSdzIHRpbWVyLCBjb21wb3NlZC5cbiAgICovXG4gIHJlYWRvbmx5IHNpZ25hbD86IEFib3J0U2lnbmFsO1xuICAvKiogVGltZW91dCBidWRnZXQgaW4gbWlsbGlzZWNvbmRzLiBSZWFkYWJsZSBvbmx5IOKAlCB0aGUgcnVuJ3MgZGVhZGxpbmUgaXMge0BsaW5rIGRlYWRsaW5lfS4gKi9cbiAgcmVhZG9ubHkgdGltZW91dE1zPzogbnVtYmVyO1xuICAvKipcbiAgICogVHJhY2UgaWRlbnRpZmllciBmb3IgZGlzdHJpYnV0ZWQgdHJhY2luZyAvIG9ic2VydmFiaWxpdHkuIFdpdGggYG9wZXJhdGlvbklkYCAob3IgYWxvbmUpIGl0IGJlY29tZXMgdGhlIHJ1bidzXG4gICAqIGBSdW5Db3JyZWxhdGlvbmA7IGl0IHdpbnMgb3ZlciB0aGUgdHJhY2UgaWQgb2YgYHRyYWNlcGFyZW50YC4gMeKAkzI1NiBwcmludGFibGUgQVNDSUkgY2hhcmFjdGVycyB3aXRoIG5vIHNwYWNlXG4gICAqIChzaW5jZSAxMC4xIGFueXRoaW5nIGVsc2UgcmVqZWN0cyB0aGUgcnVuIHdpdGggYSBgVHlwZUVycm9yYCBuYW1pbmcgdGhlIGZpZWxkIOKAlCB0aGUgaWQgcmlkZXMgZXZlcnkgZXZlbnQpO1xuICAgKiBhbiBlbXB0eSBzdHJpbmcgaXMgbm8gaWQuXG4gICAqL1xuICByZWFkb25seSB0cmFjZUlkPzogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIGNhbGxlcidzIHVuaXQgb2Ygd29yayAoVzNDJ3MgcGFyZW50LWlkKSDigJQgcGFydCBvZiB0aGUgcnVuJ3MgYFJ1bkNvcnJlbGF0aW9uYDsgd2lucyBvdmVyIHRoZSBoZWFkZXInc1xuICAgKiBwYXJlbnQtaWQuIE5lZWRzIGEgdHJhY2U6IGB0cmFjZUlkYCBvciBgdHJhY2VwYXJlbnRgIChyZWZ1c2VkIGFsb25lKS4gU2FtZSBjaGFyYWN0ZXIgcnVsZSBhcyBgdHJhY2VJZGAuXG4gICAqL1xuICByZWFkb25seSBvcGVyYXRpb25JZD86IHN0cmluZztcbiAgLyoqXG4gICAqIEEgVzNDIGB0cmFjZXBhcmVudGAgaGVhZGVyLCB1c3VhbGx5IHN0cmFpZ2h0IGZyb20gYW4gaW5ib3VuZCByZXF1ZXN0LiBQYXJzZWQgU1RSSUNUTFkgb25jZSBwZXIgcnVuIOKAlCBhXG4gICAqIG1hbGZvcm1lZCBvbmUgcmVmdXNlcyB0aGUgcnVuIHdpdGggYSBgVHJhY2VwYXJlbnRFcnJvcmAgbmFtaW5nIHRoZSByZWFzb24gKG5ldmVyIHRoZSBoZWFkZXIpLiBTdGFnZXMgcmVhZFxuICAgKiBiYWNrIChgJGdldEVudigpYCkgZXhhY3RseSBgUnVuQ29ycmVsYXRpb24udHJhY2VwYXJlbnRgIOKAlCB0aGUgY2Fub25pY2FsIGhlYWRlciBvZiB0aGUgZWZmZWN0aXZlIGlkcyDigJQgb3Igbm9cbiAgICoga2V5IHdoZW4gdGhlIHJ1bidzIGNvcnJlbGF0aW9uIGNhcnJpZXMgbm9uZS4gQ29ycmVsYXRpb24gb25seTogbmV2ZXIgaWRlbnRpdHkgb3IgYXV0aG9yaXNhdGlvbi5cbiAgICovXG4gIHJlYWRvbmx5IHRyYWNlcGFyZW50Pzogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIHJ1bidzIGRlYWRsaW5lLCBlcG9jaCBtaWxsaXNlY29uZHMgKDEwLjEpIOKAlCB0aGUgZWFybGllc3Qgb2YgYFJ1bk9wdGlvbnMuZGVhZGxpbmVgLCBgbm93ICsgUnVuT3B0aW9ucy50aW1lb3V0TXNgXG4gICAqIGFuZCBhIGRlYWRsaW5lIGdpdmVuIGhlcmUuIFRoZSBydW4ncyBzaWduYWwgYWJvcnRzIHdoZW4gaXQgcGFzc2VzOyBldmVyeSBhdHRlbXB0IGlzIGNhcHBlZCBieSB0aGUgdGltZSBsZWZ0LlxuICAgKiBJbmhlcml0ZWQgYnkgc3ViZmxvd3MuIFJlYWQgaXQgdGhyb3VnaCBgc2NvcGUuJGF0dGVtcHQoKS50aW1lTGVmdE1zKClgLlxuICAgKi9cbiAgcmVhZG9ubHkgZGVhZGxpbmU/OiBudW1iZXI7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gSGFuZGxlciBEZXBlbmRlbmNpZXMgKERJIGJhZykg4oCUIHdhcyBQaXBlbGluZUNvbnRleHRcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vKipcbiAqIEhhbmRsZXJEZXBzIOKAlCBEZXBlbmRlbmN5IGluamVjdGlvbiBiYWcgcGFzc2VkIHRvIGFsbCBoYW5kbGVyIG1vZHVsZXMuXG4gKlxuICogUHJvdmlkZXMgc2hhcmVkIHN0YXRlIChzdGFnZU1hcCwgcnVudGltZSwgc2NvcGVGYWN0b3J5LCBldGMuKSB3aXRob3V0XG4gKiBoYW5kbGVycyBuZWVkaW5nIHRvIGltcG9ydCB0aGUgdHJhdmVyc2VyIGRpcmVjdGx5LiBBdm9pZHMgY2lyY3VsYXIgZGVwcy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBIYW5kbGVyRGVwczxUT3V0ID0gYW55LCBUU2NvcGUgPSBhbnk+IHtcbiAgc3RhZ2VNYXA6IE1hcDxzdHJpbmcsIFN0YWdlRnVuY3Rpb248VE91dCwgVFNjb3BlPj47XG4gIHJvb3Q6IFN0YWdlTm9kZTxUT3V0LCBUU2NvcGU+O1xuICBleGVjdXRpb25SdW50aW1lOiBJRXhlY3V0aW9uUnVudGltZTtcbiAgc2NvcGVGYWN0b3J5OiBTY29wZUZhY3Rvcnk8VFNjb3BlPjtcbiAgc3ViZmxvd3M/OiBSZWNvcmQ8c3RyaW5nLCB7IHJvb3Q6IFN0YWdlTm9kZTxUT3V0LCBUU2NvcGU+IH0+O1xuICB0aHJvdHRsaW5nRXJyb3JDaGVja2VyPzogKGVycm9yOiB1bmtub3duKSA9PiBib29sZWFuO1xuICBzdHJlYW1IYW5kbGVycz86IFN0cmVhbUhhbmRsZXJzO1xuICBzY29wZVByb3RlY3Rpb25Nb2RlOiBTY29wZVByb3RlY3Rpb25Nb2RlO1xuICByZWFkT25seUNvbnRleHQ/OiB1bmtub3duO1xuICAvKiogRXhlY3V0aW9uIGVudmlyb25tZW50IOKAlCBwcm9wYWdhdGVzIHRvIHN1YmZsb3dzIGF1dG9tYXRpY2FsbHkuICovXG4gIGV4ZWN1dGlvbkVudj86IEV4ZWN1dGlvbkVudjtcbiAgbmFycmF0aXZlR2VuZXJhdG9yOiBJQ29udHJvbEZsb3dOYXJyYXRpdmU7XG4gIGxvZ2dlcjogSUxvZ2dlcjtcbiAgc2lnbmFsPzogQWJvcnRTaWduYWw7XG4gIC8qKlxuICAgKiBUaGUgcmVzdW1lJ3Mgb25lLXNob3QgcmUtZW50cnkgKE0yKSDigJQgc2hhcmVkIGJ5IHJlZmVyZW5jZSB3aXRoIGV2ZXJ5XG4gICAqIG5lc3RlZCB0cmF2ZXJzZXIsIGxpa2UgdGhlIGV4ZWN1dGlvbiBjb3VudGVyLiBgU3ViZmxvd0V4ZWN1dG9yYCBhc2tzIGl0XG4gICAqIGF0IGVhY2ggc3ViZmxvdyBlbnRyeTogdGhlIEZJUlNUIGVudHJ5IGludG8gYSBzdWJmbG93IG9uIHRoZSBwYXVzZSBwYXRoXG4gICAqIHRha2VzIHRoYXQgc3ViZmxvdydzIGNhcHR1cmVkIHN0YXRlIChzZWVkaW5nIHRoZSBuZXN0ZWQgcnVudGltZSBpbiBwbGFjZVxuICAgKiBvZiB0aGUgaW5wdXRNYXBwZXIncyB2YWx1ZXMg4oCUIHRoZSBtYXBwZXIgc3RpbGwgcnVucyBmb3IgdGhlIHJlYWQtb25seVxuICAgKiBhcmdzKSwgaXRzIGVudHJ5IHBvaW50IGFuZCBhbnkgc2libGluZyBwYXVzZXMgd2FpdGluZyB0aGVyZTsgZXZlcnkgbGF0ZXJcbiAgICogZW50cnkgaXMgYW4gb3JkaW5hcnkgb25lLiBTZWUgYFJlc3VtZUVudHJ5YC4gVW5kZWZpbmVkIG9uIG5vcm1hbCBgcnVuKClgXG4gICAqIHBhdGhzLlxuICAgKi9cbiAgcmVzdW1lPzogUmVzdW1lRW50cnk8VE91dCwgVFNjb3BlPjtcbn1cblxuLyoqIE9wdGlvbnMgZm9yIEZsb3dDaGFydEV4ZWN1dG9yLnJ1bigpLiAqL1xuZXhwb3J0IGludGVyZmFjZSBSdW5PcHRpb25zIHtcbiAgLyoqIEFib3J0U2lnbmFsIGZvciBjb29wZXJhdGl2ZSBjYW5jZWxsYXRpb24uIENvbXBvc2VkIHdpdGggYGVudi5zaWduYWxgIGFuZCB0aGUgZGVhZGxpbmUgKDEwLjEpLiAqL1xuICBzaWduYWw/OiBBYm9ydFNpZ25hbDtcbiAgLyoqXG4gICAqIFRpbWVvdXQgaW4gbWlsbGlzZWNvbmRzOiB0aGUgcnVuJ3MgZGVhZGxpbmUgaXMgYG5vdyArIHRpbWVvdXRNc2AuIFRoZSBydW4gYWJvcnRzIHdoZW4gaXQgcGFzc2VzIChyZWplY3Rpbmcgd2l0aFxuICAgKiBgRXhlY3V0aW9uIHRpbWVkIG91dCBhZnRlciA8dGltZW91dE1zPm1zYCksIHN0YWdlcyByZWFkIGl0IGFzIGBlbnYuZGVhZGxpbmVgLCBhbmQgZXZlcnkgc3RhZ2UgcmVjb3JkcyBpdHNcbiAgICogYXR0ZW1wdCAoYFN0YWdlU25hcHNob3QuYXR0ZW1wdHNgKS4gSG9ub3VyZWQgYmVzaWRlIGEgYHNpZ25hbGAgc2luY2UgMTAuMSAoaXQgdXNlZCB0byBiZSBpZ25vcmVkIHRoZXJlKS5cbiAgICovXG4gIHRpbWVvdXRNcz86IG51bWJlcjtcbiAgLyoqXG4gICAqIFRoZSBydW4ncyBkZWFkbGluZSwgZXBvY2ggbWlsbGlzZWNvbmRzICgxMC4xKSDigJQgYERhdGUubm93KCkgKyAxMjBfMDAwYC4gU2FtZSBlZmZlY3QgYXMgYHRpbWVvdXRNc2A7IHdoZW4gYm90aFxuICAgKiBhcmUgZ2l2ZW4sIHRoZSBlYXJsaWVyIHdpbnMuIEEgZGVhZGxpbmUgYWxyZWFkeSBwYXN0IHN0b3BzIHRoZSBydW4gYmVmb3JlIGl0cyBmaXJzdCBzdGFnZS4gQSByZXN1bWVkIGxlZyBoYXNcbiAgICogaXRzIG93bjogcGFzcyBpdCBhZ2FpbiB0byBgcmVzdW1lKClgLlxuICAgKi9cbiAgZGVhZGxpbmU/OiBudW1iZXI7XG4gIC8qKlxuICAgKiBSdW50aW1lIGlucHV0IGRhdGEgZm9yIHRoZSBwaXBlbGluZS5cbiAgICogQmVjb21lcyB0aGUgcmVhZE9ubHlDb250ZXh0IGFjY2Vzc2libGUgdmlhIGBzY29wZS5nZXRBcmdzKClgLlxuICAgKiBTdGFnZXMgY2Fubm90IG92ZXJ3cml0ZSB0aGVzZSBrZXlzIHdpdGggYHNldFZhbHVlKClgLlxuICAgKi9cbiAgaW5wdXQ/OiB1bmtub3duO1xuICAvKipcbiAgICogRXhlY3V0aW9uIGVudmlyb25tZW50IOKAlCByZWFkLW9ubHkgaW5mcmFzdHJ1Y3R1cmUgdmFsdWVzIHRoYXQgcHJvcGFnYXRlXG4gICAqIHRocm91Z2ggbmVzdGVkIGV4ZWN1dG9ycyAobGlrZSBgcHJvY2Vzcy5lbnZgIGZvciBmbG93Y2hhcnRzKS5cbiAgICogQWNjZXNzaWJsZSB2aWEgYHNjb3BlLmdldEVudigpYC4gSW5oZXJpdGVkIGJ5IHN1YmZsb3dzIGF1dG9tYXRpY2FsbHkuXG4gICAqL1xuICBlbnY/OiBFeGVjdXRpb25FbnY7XG4gIC8qKlxuICAgKiBPdmVycmlkZSB0aGUgbWF4aW11bSBuZXN0ZWQgYGV4ZWN1dGVOb2RlYCBkZXB0aCBmb3IgdGhpcyBydW4uXG4gICAqIERlZmF1bHRzIHRvIGBGbG93Y2hhcnRUcmF2ZXJzZXIuTUFYX0VYRUNVVEVfREVQVEhgICg1MDApLlxuICAgKlxuICAgKiBEZXB0aCBjb3VudHMgVFJFRSBuZXN0aW5nIG9ubHkg4oCUIGZvcmsgY2hpbGRyZW4sIGRlY2lkZXIvc2VsZWN0b3IgYnJhbmNoXG4gICAqIGRpc3BhdGNoLCByZWN1cnNpdmUgY29tcG9zaXRpb24uIExpbmVhciBjaGFpbnMgYW5kIGxvb3AgaXRlcmF0aW9ucyBydW5cbiAgICogb24gYSBmbGF0IHRyYW1wb2xpbmUgYW5kIG5ldmVyIGNvbnN1bWUgZGVwdGgsIHNvIHRoaXMgcmFyZWx5IG5lZWRzXG4gICAqIHJhaXNpbmcuIE11c3QgYmUgPj0gMS5cbiAgICovXG4gIG1heERlcHRoPzogbnVtYmVyO1xuICAvKipcbiAgICogT3ZlcnJpZGUgdGhlIG1heGltdW0gbG9vcCBpdGVyYXRpb25zIHBlciBub2RlIGZvciB0aGlzIHJ1biAodGhlXG4gICAqIGBDb250aW51YXRpb25SZXNvbHZlcmAgaW5maW5pdGUtbG9vcCBndWFyZCkuIERlZmF1bHRzIHRvIDEwMDAuXG4gICAqIFRoaXMgaXMgdGhlIGJpbmRpbmcgY29uc3RyYWludCBmb3IgbG9vcC1oZWF2eSBwaXBlbGluZXMg4oCUIHJhaXNlIGl0IGZvclxuICAgKiBsZWdpdGltYXRlbHkgbG9uZyBsb29wcyAoYGxvb3BUb2AgY2hhaW5zIHJ1biB3aXRoIGEgZmxhdCBzdGFjaywgc28gaGlnaFxuICAgKiB2YWx1ZXMgYXJlIHNhZmU7IG1lbW9yeSBmb3Igc3RhdGUvbmFycmF0aXZlIHN0aWxsIGdyb3dzIHBlciBpdGVyYXRpb24pLlxuICAgKiBBbHNvIGJvdW5kcyB0aGUgcnVuLXRvdGFsIGNoYWluIG9mIGZ1bmN0aW9uLWJlYXJpbmcgZHluYW1pYyBgbmV4dGBcbiAgICogY29udGludWF0aW9ucyAoZnJlc2ggbm9kZXMgcmV0dXJuZWQgZnJvbSBzdGFnZXMpIOKAlCBhIHJ1bmF3YXkgZHluYW1pY1xuICAgKiBjaGFpbiBlcnJvcnMgaW5zdGVhZCBvZiBydW5uaW5nIGZvcmV2ZXIuXG4gICAqIFByb3BhZ2F0ZXMgdG8gc3ViZmxvd3MuIE11c3QgYmUgPj0gMS5cbiAgICovXG4gIG1heEl0ZXJhdGlvbnM/OiBudW1iZXI7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gRmxvdyBDb250cm9sIE5hcnJhdGl2ZSDigJQgY2Fub25pY2FsIGRlZmluaXRpb25zIGxpdmUgaW4gbWVtb3J5L3R5cGVzLnRzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuZXhwb3J0IHR5cGUgeyBGbG93Q29udHJvbFR5cGUsIEZsb3dNZXNzYWdlIH07XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gUnVudGltZSBTdHJ1Y3R1cmUgTWV0YWRhdGEgKHVzZWQgYnkgUnVudGltZVN0cnVjdHVyZU1hbmFnZXIpXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuZXhwb3J0IGludGVyZmFjZSBSdW50aW1lU3RydWN0dXJlTWV0YWRhdGEge1xuICB0eXBlOiAnc3RhZ2UnIHwgJ2RlY2lkZXInIHwgJ3NlbGVjdG9yJyB8ICdmb3JrJyB8ICdzdHJlYW1pbmcnIHwgJ3N1YmZsb3cnIHwgJ2xvb3AnO1xuICBzdWJmbG93SWQ/OiBzdHJpbmc7XG4gIGlzU3ViZmxvd1Jvb3Q/OiBib29sZWFuO1xuICBzdWJmbG93TmFtZT86IHN0cmluZztcbiAgLyoqIFRydWUgZm9yIGFuIGBhZGRQYXJhbGxlbEZvckVhY2hgIGZhbi1vdXQgKHR5cGUgc3RheXMgYCdmb3JrJ2ApLiAqL1xuICBpc0R5bmFtaWNQYXJhbGxlbD86IGJvb2xlYW47XG4gIGlzUGFyYWxsZWxDaGlsZD86IGJvb2xlYW47XG4gIHBhcmFsbGVsR3JvdXBJZD86IHN0cmluZztcbiAgbG9vcFRhcmdldD86IHN0cmluZztcbiAgaXNEeW5hbWljPzogYm9vbGVhbjtcbiAgaXNMb29wUmVmZXJlbmNlPzogYm9vbGVhbjtcbiAgc3RyZWFtSWQ/OiBzdHJpbmc7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gTm9kZSBSZXN1bHRcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5leHBvcnQgdHlwZSBOb2RlUmVzdWx0VHlwZSA9IHtcbiAgaWQ6IHN0cmluZztcbiAgcmVzdWx0OiB1bmtub3duO1xuICBpc0Vycm9yPzogYm9vbGVhbjtcbn07XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gRXhlY3V0aW9uIFJlc3BvbnNlXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuZXhwb3J0IHR5cGUgQnJhbmNoUmVzdWx0ID0ge1xuICByZXN1bHQ6IHN0cmluZyB8IEVycm9yO1xuICBpc0Vycm9yOiBib29sZWFuO1xufTtcblxuZXhwb3J0IHR5cGUgQnJhbmNoUmVzdWx0cyA9IHsgW2JyYW5jaElkOiBzdHJpbmddOiBCcmFuY2hSZXN1bHQgfTtcbmV4cG9ydCB0eXBlIFRyYXZlcnNhbFJlc3VsdCA9IEJyYW5jaFJlc3VsdHMgfCBzdHJpbmcgfCBFcnJvcjtcblxuLyoqIFJldHVybmVkIGJ5IHJ1bigpL3Jlc3VtZSgpIHdoZW4gZXhlY3V0aW9uIHBhdXNlcy4gKi9cbmV4cG9ydCB0eXBlIFBhdXNlZFJlc3VsdCA9IHtcbiAgcmVhZG9ubHkgcGF1c2VkOiB0cnVlO1xuICByZWFkb25seSBjaGVja3BvaW50OiBpbXBvcnQoJy4uL3BhdXNlL3R5cGVzLmpzJykuRmxvd2NoYXJ0Q2hlY2twb2ludDtcbn07XG5cbi8qKiBGdWxsIHJldHVybiB0eXBlIG9mIEZsb3dDaGFydEV4ZWN1dG9yLnJ1bigpIGFuZCByZXN1bWUoKS4gKi9cbmV4cG9ydCB0eXBlIEV4ZWN1dG9yUmVzdWx0ID0gVHJhdmVyc2FsUmVzdWx0IHwgUGF1c2VkUmVzdWx0O1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFNlcmlhbGl6ZWQgUGlwZWxpbmUgU3RydWN0dXJlIChmb3IgdmlzdWFsaXphdGlvbilcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5leHBvcnQgaW50ZXJmYWNlIFNlcmlhbGl6ZWRQaXBlbGluZU5vZGUge1xuICBuYW1lOiBzdHJpbmc7XG4gIGlkOiBzdHJpbmc7XG4gIHR5cGU/OlxuICAgIHwgJ3N0YWdlJ1xuICAgIHwgJ2RlY2lkZXInXG4gICAgfCAnc2VsZWN0b3InXG4gICAgfCAnZm9yaydcbiAgICB8ICdzdHJlYW1pbmcnXG4gICAgfCAnc3ViZmxvdydcbiAgICB8ICdsb29wJ1xuICAgIHwgJ3VzZXInXG4gICAgfCAndG9vbCdcbiAgICB8ICdmdW5jdGlvbidcbiAgICB8ICdzZXF1ZW5jZSc7XG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICBjaGlsZHJlbj86IFNlcmlhbGl6ZWRQaXBlbGluZU5vZGVbXTtcbiAgbmV4dD86IFNlcmlhbGl6ZWRQaXBlbGluZU5vZGU7XG4gIGJyYW5jaGVzPzogUmVjb3JkPHN0cmluZywgU2VyaWFsaXplZFBpcGVsaW5lTm9kZT47XG4gIGhhc0RlY2lkZXI/OiBib29sZWFuO1xuICBoYXNTZWxlY3Rvcj86IGJvb2xlYW47XG4gIGhhc1N1YnRyZWU/OiBib29sZWFuO1xuICBpc1N0cmVhbWluZz86IGJvb2xlYW47XG4gIHN0cmVhbUlkPzogc3RyaW5nO1xuICBpc1N1YmZsb3dSb290PzogYm9vbGVhbjtcbiAgc3ViZmxvd0lkPzogc3RyaW5nO1xuICBzdWJmbG93TmFtZT86IHN0cmluZztcbiAgbG9vcFRhcmdldD86IHN0cmluZztcbiAgaXNMb29wUmVmZXJlbmNlPzogYm9vbGVhbjtcbiAgaXNQYXJhbGxlbENoaWxkPzogYm9vbGVhbjtcbiAgcGFyYWxsZWxHcm91cElkPzogc3RyaW5nO1xuICBpc0R5bmFtaWM/OiBib29sZWFuO1xuICAvKiogV2hlbiB0cnVlLCB0aGlzIHN0YWdlIGNhbiBwYXVzZSBleGVjdXRpb24gKFBhdXNhYmxlSGFuZGxlciBwYXR0ZXJuKS4gKi9cbiAgaXNQYXVzYWJsZT86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBUcnVlIGZvciBhbiBgYWRkUGFyYWxsZWxGb3JFYWNoYCBmYW4tb3V0IOKAlCBicmFuY2ggQ09VTlQgZGVjaWRlZCBhdCBydW50aW1lXG4gICAqIGZyb20gdGhlIHBheWxvYWQuIEEgZmxhZywgbm90IGEgdHlwZTogYHR5cGVgIHN0YXlzIGAnZm9yaydgIHNvIGV2ZXJ5XG4gICAqIGV4aXN0aW5nIGNvbnN1bWVyIHJlbmRlcnMgaXQgY29ycmVjdGx5IChpdCBJUyBhIGZhbi1vdXQpLCBhbmQgYSBjb25zdW1lclxuICAgKiB0aGF0IHdhbnRzIHRvIHNheSBcIm9uZSBicmFuY2ggcGVyIGl0ZW1cIiBjYW4gcmVhZCB0aGlzLlxuICAgKi9cbiAgaXNEeW5hbWljUGFyYWxsZWw/OiBib29sZWFuO1xuICAvKipcbiAgICogVG90YWwgYXR0ZW1wdHMgdGhpcyBzdGFnZSdzIGZ1bmN0aW9uIG1heSBydW4sIGZyb20gaXRzIGRlY2xhcmVkXG4gICAqIHtAbGluayBSZXRyeVBvbGljeX0uIFByZXNlbnQgb25seSB3aGVuIGEgcG9saWN5IHdhcyBkZWNsYXJlZC4gVGhlIENPVU5UXG4gICAqIG9ubHkg4oCUIGBiYWNrb2ZmTXNgIGFuZCBgcmV0cnlPbmAgY2FuIGJlIGZ1bmN0aW9ucywgd2hpY2ggYSBKU09OLXNhZmUgc3BlY1xuICAgKiBjYW5ub3QgY2FycnkuXG4gICAqL1xuICByZXRyeUF0dGVtcHRzPzogbnVtYmVyO1xuICAvKipcbiAgICogRGVjbGFyZWQgdGFncyAoOS4yMS4wKSDigJQgdGhlIG5hbWVzIHRoZSBhdXRob3IgcHV0IG9uIHRoaXMgc3RhZ2UgYXQgYnVpbGRcbiAgICogdGltZSwgY29waWVkIGFzLWlzLiBGcmVlIHN0cmluZ3M7IGZvb3RwcmludGpzIGFzc2lnbnMgdGhlbSBubyBtZWFuaW5nLlxuICAgKiBBYnNlbnQgd2hlbiB0aGUgc3RhZ2UgZGVjbGFyZXMgbm9uZS5cbiAgICovXG4gIHRhZ3M/OiByZWFkb25seSBzdHJpbmdbXTtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBGbG93Q2hhcnQgaXMgZGVmaW5lZCBpbiBgLi4vYnVpbGRlci90eXBlcy50c2AuIFRoZSBlbmdpbmUgbGF5ZXIgY29uc3VtZXMgaXRcbi8vIHZpYSBpbXBvcnQgZnJvbSB0aGVyZS4gQSBkdXBsaWNhdGUgbWluaW1hbCBkZWZpbml0aW9uIHByZXZpb3VzbHkgbGl2ZWQgaGVyZVxuLy8gYW5kIGNhdXNlZCBUUyBjb25mdXNpb24gYXQgY29tcG9zaXRpb24gYm91bmRhcmllcyAoQ29tcG9zYWJsZVJ1bm5lciB2c1xuLy8gYWRkU3ViRmxvd0NoYXJ0IHBhcmFtZXRlcikuIFNpbmdsZSBzb3VyY2Ugb2YgdHJ1dGggbm93IGxpdmVzIGluIGJ1aWxkZXIvLlxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8qKiBBbGlhcyBmb3IgU2VyaWFsaXplZFBpcGVsaW5lTm9kZSB1c2VkIGFzIGZ1bGwgc3RydWN0dXJlICovXG5leHBvcnQgdHlwZSBTZXJpYWxpemVkUGlwZWxpbmVTdHJ1Y3R1cmUgPSBTZXJpYWxpemVkUGlwZWxpbmVOb2RlICYge1xuICBicmFuY2hJZHM/OiBzdHJpbmdbXTtcbiAgc3ViZmxvd1N0cnVjdHVyZT86IFNlcmlhbGl6ZWRQaXBlbGluZVN0cnVjdHVyZTtcbiAgaXRlcmF0aW9uQ291bnQ/OiBudW1iZXI7XG59O1xuIl19
@@ -0,0 +1,29 @@
1
+ import type { AttemptCategory } from '../attempt/types.js';
2
+ /** Safe context for the failure that escaped a native run; never the exception itself. */
3
+ export interface TerminalFailureContext {
4
+ readonly category: AttemptCategory;
5
+ /** Absent when no native stage owns this failure (for example input admission or run retention). */
6
+ readonly stage?: {
7
+ readonly runId: string;
8
+ readonly runtimeStageId: string;
9
+ };
10
+ }
11
+ /**
12
+ * @internal One execution chain's failure ownership, not an error history.
13
+ * Sequential frames share it; forks and subflows do not. Only an explicitly
14
+ * selected escaping rejection may transfer ownership to its parent chain.
15
+ * Raw identity lives in a private slot and is released when the leg settles.
16
+ */
17
+ export declare class NativeFailureState {
18
+ #private;
19
+ get result(): TerminalFailureContext | undefined;
20
+ capture(error: unknown, category: AttemptCategory, stage: NonNullable<TerminalFailureContext['stage']>): void;
21
+ /** A runner already classified this exact native failure before it was served. */
22
+ owns(error: unknown): boolean;
23
+ adopt(child: NativeFailureState, error: unknown): void;
24
+ /** Publish at the run event boundary; keep ownership until executor settlement. */
25
+ announce(error: unknown): TerminalFailureContext;
26
+ finish(error: unknown): void;
27
+ /** Success or pause has no terminal failure. Also closes contained branch ownership. */
28
+ complete(): void;
29
+ }
@@ -0,0 +1,60 @@
1
+ const UNKNOWN = Object.freeze({ category: 'unknown' });
2
+ /**
3
+ * @internal One execution chain's failure ownership, not an error history.
4
+ * Sequential frames share it; forks and subflows do not. Only an explicitly
5
+ * selected escaping rejection may transfer ownership to its parent chain.
6
+ * Raw identity lives in a private slot and is released when the leg settles.
7
+ */
8
+ export class NativeFailureState {
9
+ #pending;
10
+ #result;
11
+ #sealed = false;
12
+ get result() {
13
+ return this.#result;
14
+ }
15
+ capture(error, category, stage) {
16
+ if (this.#sealed)
17
+ return;
18
+ this.#pending = {
19
+ error,
20
+ context: Object.freeze({
21
+ category,
22
+ stage: Object.freeze({ runId: stage.runId, runtimeStageId: stage.runtimeStageId }),
23
+ }),
24
+ };
25
+ }
26
+ /** A runner already classified this exact native failure before it was served. */
27
+ owns(error) {
28
+ return this.#pending !== undefined && Object.is(this.#pending.error, error);
29
+ }
30
+ adopt(child, error) {
31
+ if (!this.#sealed)
32
+ this.#pending = child.owns(error) ? child.#pending : undefined;
33
+ child.complete();
34
+ }
35
+ /** Publish at the run event boundary; keep ownership until executor settlement. */
36
+ announce(error) {
37
+ if (this.#sealed)
38
+ return this.#result ?? UNKNOWN;
39
+ const pending = this.#pending;
40
+ const context = pending && Object.is(pending.error, error) ? pending.context : UNKNOWN;
41
+ this.#result = context;
42
+ return context;
43
+ }
44
+ finish(error) {
45
+ if (this.#sealed)
46
+ return;
47
+ this.announce(error);
48
+ this.#pending = undefined;
49
+ this.#sealed = true;
50
+ }
51
+ /** Success or pause has no terminal failure. Also closes contained branch ownership. */
52
+ complete() {
53
+ if (this.#sealed)
54
+ return;
55
+ this.#pending = undefined;
56
+ this.#result = undefined;
57
+ this.#sealed = true;
58
+ }
59
+ }
60
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVybWluYWxGYWlsdXJlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9lcnJvcnMvdGVybWluYWxGYWlsdXJlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQVlBLE1BQU0sT0FBTyxHQUEyQixNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUM7QUFFL0U7Ozs7O0dBS0c7QUFDSCxNQUFNLE9BQU8sa0JBQWtCO0lBQzdCLFFBQVEsQ0FBdUQ7SUFDL0QsT0FBTyxDQUEwQjtJQUNqQyxPQUFPLEdBQUcsS0FBSyxDQUFDO0lBRWhCLElBQUksTUFBTTtRQUNSLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUN0QixDQUFDO0lBRUQsT0FBTyxDQUFDLEtBQWMsRUFBRSxRQUF5QixFQUFFLEtBQW1EO1FBQ3BHLElBQUksSUFBSSxDQUFDLE9BQU87WUFBRSxPQUFPO1FBQ3pCLElBQUksQ0FBQyxRQUFRLEdBQUc7WUFDZCxLQUFLO1lBQ0wsT0FBTyxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUM7Z0JBQ3JCLFFBQVE7Z0JBQ1IsS0FBSyxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLEtBQUssRUFBRSxjQUFjLEVBQUUsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO2FBQ25GLENBQUM7U0FDSCxDQUFDO0lBQ0osQ0FBQztJQUVELGtGQUFrRjtJQUNsRixJQUFJLENBQUMsS0FBYztRQUNqQixPQUFPLElBQUksQ0FBQyxRQUFRLEtBQUssU0FBUyxJQUFJLE1BQU0sQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDOUUsQ0FBQztJQUVELEtBQUssQ0FBQyxLQUF5QixFQUFFLEtBQWM7UUFDN0MsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPO1lBQUUsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7UUFDbEYsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ25CLENBQUM7SUFFRCxtRkFBbUY7SUFDbkYsUUFBUSxDQUFDLEtBQWM7UUFDckIsSUFBSSxJQUFJLENBQUMsT0FBTztZQUFFLE9BQU8sSUFBSSxDQUFDLE9BQU8sSUFBSSxPQUFPLENBQUM7UUFDakQsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztRQUM5QixNQUFNLE9BQU8sR0FBRyxPQUFPLElBQUksTUFBTSxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUM7UUFDdkYsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7UUFDdkIsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQztJQUVELE1BQU0sQ0FBQyxLQUFjO1FBQ25CLElBQUksSUFBSSxDQUFDLE9BQU87WUFBRSxPQUFPO1FBQ3pCLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDckIsSUFBSSxDQUFDLFFBQVEsR0FBRyxTQUFTLENBQUM7UUFDMUIsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7SUFDdEIsQ0FBQztJQUVELHdGQUF3RjtJQUN4RixRQUFRO1FBQ04sSUFBSSxJQUFJLENBQUMsT0FBTztZQUFFLE9BQU87UUFDekIsSUFBSSxDQUFDLFFBQVEsR0FBRyxTQUFTLENBQUM7UUFDMUIsSUFBSSxDQUFDLE9BQU8sR0FBRyxTQUFTLENBQUM7UUFDekIsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7SUFDdEIsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBBdHRlbXB0Q2F0ZWdvcnkgfSBmcm9tICcuLi9hdHRlbXB0L3R5cGVzLmpzJztcblxuLyoqIFNhZmUgY29udGV4dCBmb3IgdGhlIGZhaWx1cmUgdGhhdCBlc2NhcGVkIGEgbmF0aXZlIHJ1bjsgbmV2ZXIgdGhlIGV4Y2VwdGlvbiBpdHNlbGYuICovXG5leHBvcnQgaW50ZXJmYWNlIFRlcm1pbmFsRmFpbHVyZUNvbnRleHQge1xuICByZWFkb25seSBjYXRlZ29yeTogQXR0ZW1wdENhdGVnb3J5O1xuICAvKiogQWJzZW50IHdoZW4gbm8gbmF0aXZlIHN0YWdlIG93bnMgdGhpcyBmYWlsdXJlIChmb3IgZXhhbXBsZSBpbnB1dCBhZG1pc3Npb24gb3IgcnVuIHJldGVudGlvbikuICovXG4gIHJlYWRvbmx5IHN0YWdlPzoge1xuICAgIHJlYWRvbmx5IHJ1bklkOiBzdHJpbmc7XG4gICAgcmVhZG9ubHkgcnVudGltZVN0YWdlSWQ6IHN0cmluZztcbiAgfTtcbn1cblxuY29uc3QgVU5LTk9XTjogVGVybWluYWxGYWlsdXJlQ29udGV4dCA9IE9iamVjdC5mcmVlemUoeyBjYXRlZ29yeTogJ3Vua25vd24nIH0pO1xuXG4vKipcbiAqIEBpbnRlcm5hbCBPbmUgZXhlY3V0aW9uIGNoYWluJ3MgZmFpbHVyZSBvd25lcnNoaXAsIG5vdCBhbiBlcnJvciBoaXN0b3J5LlxuICogU2VxdWVudGlhbCBmcmFtZXMgc2hhcmUgaXQ7IGZvcmtzIGFuZCBzdWJmbG93cyBkbyBub3QuIE9ubHkgYW4gZXhwbGljaXRseVxuICogc2VsZWN0ZWQgZXNjYXBpbmcgcmVqZWN0aW9uIG1heSB0cmFuc2ZlciBvd25lcnNoaXAgdG8gaXRzIHBhcmVudCBjaGFpbi5cbiAqIFJhdyBpZGVudGl0eSBsaXZlcyBpbiBhIHByaXZhdGUgc2xvdCBhbmQgaXMgcmVsZWFzZWQgd2hlbiB0aGUgbGVnIHNldHRsZXMuXG4gKi9cbmV4cG9ydCBjbGFzcyBOYXRpdmVGYWlsdXJlU3RhdGUge1xuICAjcGVuZGluZz86IHsgZXJyb3I6IHVua25vd247IGNvbnRleHQ6IFRlcm1pbmFsRmFpbHVyZUNvbnRleHQgfTtcbiAgI3Jlc3VsdD86IFRlcm1pbmFsRmFpbHVyZUNvbnRleHQ7XG4gICNzZWFsZWQgPSBmYWxzZTtcblxuICBnZXQgcmVzdWx0KCk6IFRlcm1pbmFsRmFpbHVyZUNvbnRleHQgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLiNyZXN1bHQ7XG4gIH1cblxuICBjYXB0dXJlKGVycm9yOiB1bmtub3duLCBjYXRlZ29yeTogQXR0ZW1wdENhdGVnb3J5LCBzdGFnZTogTm9uTnVsbGFibGU8VGVybWluYWxGYWlsdXJlQ29udGV4dFsnc3RhZ2UnXT4pOiB2b2lkIHtcbiAgICBpZiAodGhpcy4jc2VhbGVkKSByZXR1cm47XG4gICAgdGhpcy4jcGVuZGluZyA9IHtcbiAgICAgIGVycm9yLFxuICAgICAgY29udGV4dDogT2JqZWN0LmZyZWV6ZSh7XG4gICAgICAgIGNhdGVnb3J5LFxuICAgICAgICBzdGFnZTogT2JqZWN0LmZyZWV6ZSh7IHJ1bklkOiBzdGFnZS5ydW5JZCwgcnVudGltZVN0YWdlSWQ6IHN0YWdlLnJ1bnRpbWVTdGFnZUlkIH0pLFxuICAgICAgfSksXG4gICAgfTtcbiAgfVxuXG4gIC8qKiBBIHJ1bm5lciBhbHJlYWR5IGNsYXNzaWZpZWQgdGhpcyBleGFjdCBuYXRpdmUgZmFpbHVyZSBiZWZvcmUgaXQgd2FzIHNlcnZlZC4gKi9cbiAgb3ducyhlcnJvcjogdW5rbm93bik6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLiNwZW5kaW5nICE9PSB1bmRlZmluZWQgJiYgT2JqZWN0LmlzKHRoaXMuI3BlbmRpbmcuZXJyb3IsIGVycm9yKTtcbiAgfVxuXG4gIGFkb3B0KGNoaWxkOiBOYXRpdmVGYWlsdXJlU3RhdGUsIGVycm9yOiB1bmtub3duKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLiNzZWFsZWQpIHRoaXMuI3BlbmRpbmcgPSBjaGlsZC5vd25zKGVycm9yKSA/IGNoaWxkLiNwZW5kaW5nIDogdW5kZWZpbmVkO1xuICAgIGNoaWxkLmNvbXBsZXRlKCk7XG4gIH1cblxuICAvKiogUHVibGlzaCBhdCB0aGUgcnVuIGV2ZW50IGJvdW5kYXJ5OyBrZWVwIG93bmVyc2hpcCB1bnRpbCBleGVjdXRvciBzZXR0bGVtZW50LiAqL1xuICBhbm5vdW5jZShlcnJvcjogdW5rbm93bik6IFRlcm1pbmFsRmFpbHVyZUNvbnRleHQge1xuICAgIGlmICh0aGlzLiNzZWFsZWQpIHJldHVybiB0aGlzLiNyZXN1bHQgPz8gVU5LTk9XTjtcbiAgICBjb25zdCBwZW5kaW5nID0gdGhpcy4jcGVuZGluZztcbiAgICBjb25zdCBjb250ZXh0ID0gcGVuZGluZyAmJiBPYmplY3QuaXMocGVuZGluZy5lcnJvciwgZXJyb3IpID8gcGVuZGluZy5jb250ZXh0IDogVU5LTk9XTjtcbiAgICB0aGlzLiNyZXN1bHQgPSBjb250ZXh0O1xuICAgIHJldHVybiBjb250ZXh0O1xuICB9XG5cbiAgZmluaXNoKGVycm9yOiB1bmtub3duKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuI3NlYWxlZCkgcmV0dXJuO1xuICAgIHRoaXMuYW5ub3VuY2UoZXJyb3IpO1xuICAgIHRoaXMuI3BlbmRpbmcgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy4jc2VhbGVkID0gdHJ1ZTtcbiAgfVxuXG4gIC8qKiBTdWNjZXNzIG9yIHBhdXNlIGhhcyBubyB0ZXJtaW5hbCBmYWlsdXJlLiBBbHNvIGNsb3NlcyBjb250YWluZWQgYnJhbmNoIG93bmVyc2hpcC4gKi9cbiAgY29tcGxldGUoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuI3NlYWxlZCkgcmV0dXJuO1xuICAgIHRoaXMuI3BlbmRpbmcgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy4jcmVzdWx0ID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuI3NlYWxlZCA9IHRydWU7XG4gIH1cbn1cbiJdfQ==
@@ -1,13 +1,18 @@
1
1
  /**
2
- * decide/evaluator -- Prisma-style filter evaluator for decision rules.
2
+ * filter/evaluator -- Prisma-style filter evaluator for decision rules.
3
3
  *
4
4
  * Pure function. Takes a WhereFilter, a value getter, and a redaction checker.
5
5
  * Evaluates each condition, records the result, returns matched/conditions.
6
6
  *
7
7
  * All keys in the filter are ANDed (all must match for the rule to match).
8
8
  * Decoupled from ScopeFacade — receives callbacks, not scope.
9
+ *
10
+ * A LEAF module of its own (P2, 10.1): `decide()` (decide/) and the attempt rule table (attempt/decision.ts) share
11
+ * this one law, and neither may reach the other's dependencies through it. In decide/ it made `attempt/` reach
12
+ * `scope/` (decide.ts imports the scope runtime), so a `scope → attempt` edge — `scope.$call` — closed a module
13
+ * cycle.
9
14
  */
10
- import type { FilterCondition, WhereFilter } from './types.js';
15
+ import type { FilterCondition, WhereFilter } from '../decide/types.js';
11
16
  /**
12
17
  * Evaluates a Prisma-style filter against scope values.
13
18
  *