footprintjs 9.48.2 → 10.0.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 (326) hide show
  1. package/AGENTS.md +12 -10
  2. package/CLAUDE.md +21 -23
  3. package/README.md +1 -1
  4. package/dist/advanced.js +71 -128
  5. package/dist/esm/advanced.d.ts +24 -58
  6. package/dist/esm/advanced.js +13 -51
  7. package/dist/esm/index.d.ts +5 -8
  8. package/dist/esm/index.js +3 -3
  9. package/dist/esm/lib/builder/FlowChartBuilder.d.ts +1 -1
  10. package/dist/esm/lib/builder/FlowChartBuilder.js +3 -3
  11. package/dist/esm/lib/builder/structure/StructureRecorder.d.ts +1 -1
  12. package/dist/esm/lib/builder/structure/StructureRecorder.js +1 -1
  13. package/dist/esm/lib/capture/index.d.ts +0 -1
  14. package/dist/esm/lib/capture/index.js +1 -2
  15. package/dist/esm/lib/engine/graph/prefixNodeTree.js +2 -2
  16. package/dist/esm/lib/engine/handlers/ResumeEntry.d.ts +3 -3
  17. package/dist/esm/lib/engine/handlers/ResumeEntry.js +4 -4
  18. package/dist/esm/lib/engine/handlers/SubflowExecutor.d.ts +1 -2
  19. package/dist/esm/lib/engine/handlers/SubflowExecutor.js +4 -8
  20. package/dist/esm/lib/engine/index.d.ts +1 -1
  21. package/dist/esm/lib/engine/index.js +1 -1
  22. package/dist/esm/lib/engine/narrative/CombinedNarrativeRecorder.d.ts +4 -4
  23. package/dist/esm/lib/engine/narrative/CombinedNarrativeRecorder.js +1 -1
  24. package/dist/esm/lib/engine/narrative/index.d.ts +1 -1
  25. package/dist/esm/lib/engine/narrative/index.js +1 -1
  26. package/dist/esm/lib/engine/narrative/narrativeTypes.d.ts +1 -11
  27. package/dist/esm/lib/engine/narrative/narrativeTypes.js +1 -1
  28. package/dist/esm/lib/engine/traversal/FlowchartTraverser.d.ts +2 -10
  29. package/dist/esm/lib/engine/traversal/FlowchartTraverser.js +4 -6
  30. package/dist/esm/lib/engine/traversalContext.d.ts +1 -1
  31. package/dist/esm/lib/engine/traversalContext.js +2 -2
  32. package/dist/esm/lib/engine/types.d.ts +2 -10
  33. package/dist/esm/lib/engine/types.js +1 -1
  34. package/dist/esm/lib/engine/walkSubflowSpec.js +2 -2
  35. package/dist/esm/lib/ids/reservedIds.js +2 -2
  36. package/dist/esm/lib/memory/DiagnosticCollector.js +2 -2
  37. package/dist/esm/lib/memory/StageContext.d.ts +2 -4
  38. package/dist/esm/lib/memory/StageContext.js +2 -2
  39. package/dist/esm/lib/memory/borrowedMutation.js +2 -2
  40. package/dist/esm/lib/memory/index.d.ts +6 -21
  41. package/dist/esm/lib/memory/index.js +4 -22
  42. package/dist/esm/lib/memory/redaction.d.ts +1 -1
  43. package/dist/esm/lib/memory/redaction.js +2 -2
  44. package/dist/esm/lib/memory/runPolicy.d.ts +3 -2
  45. package/dist/esm/lib/memory/runPolicy.js +1 -1
  46. package/dist/esm/lib/reactive/createTypedScope.js +2 -2
  47. package/dist/esm/lib/reactive/writeTraps.js +2 -2
  48. package/dist/esm/lib/recorder/ControlDepRecorder.d.ts +3 -2
  49. package/dist/esm/lib/recorder/ControlDepRecorder.js +3 -2
  50. package/dist/esm/lib/recorder/EmitRecorder.d.ts +1 -1
  51. package/dist/esm/lib/recorder/EmitRecorder.js +1 -1
  52. package/dist/esm/lib/recorder/InOutRecorder.js +2 -2
  53. package/dist/esm/lib/recorder/qualityTrace.d.ts +1 -1
  54. package/dist/esm/lib/recorder/qualityTrace.js +2 -2
  55. package/dist/esm/lib/runner/DeferredObserverTier.js +2 -2
  56. package/dist/esm/lib/runner/ExecutionRuntime.d.ts +4 -5
  57. package/dist/esm/lib/runner/ExecutionRuntime.js +2 -5
  58. package/dist/esm/lib/runner/FlowChartExecutor.d.ts +1 -1
  59. package/dist/esm/lib/runner/FlowChartExecutor.js +1 -1
  60. package/dist/esm/lib/runner/getSubtreeSnapshot.d.ts +1 -1
  61. package/dist/esm/lib/runner/getSubtreeSnapshot.js +4 -4
  62. package/dist/esm/lib/runner/resume.js +2 -2
  63. package/dist/esm/lib/runner/snapshot.js +3 -2
  64. package/dist/esm/lib/scope/ScopeFacade.js +2 -2
  65. package/dist/esm/lib/scope/state/zod/scopeFactory.js +2 -2
  66. package/dist/esm/recorders.d.ts +2 -3
  67. package/dist/esm/recorders.js +1 -1
  68. package/dist/esm/trace.d.ts +11 -57
  69. package/dist/esm/trace.js +10 -68
  70. package/dist/index.js +3 -3
  71. package/dist/lib/builder/FlowChartBuilder.js +5 -5
  72. package/dist/lib/builder/structure/StructureRecorder.js +1 -1
  73. package/dist/lib/capture/index.js +2 -4
  74. package/dist/lib/engine/graph/prefixNodeTree.js +5 -5
  75. package/dist/lib/engine/handlers/ResumeEntry.js +4 -4
  76. package/dist/lib/engine/handlers/SubflowExecutor.js +5 -9
  77. package/dist/lib/engine/index.js +1 -1
  78. package/dist/lib/engine/narrative/CombinedNarrativeRecorder.js +1 -1
  79. package/dist/lib/engine/narrative/index.js +1 -1
  80. package/dist/lib/engine/narrative/narrativeTypes.js +1 -1
  81. package/dist/lib/engine/traversal/FlowchartTraverser.js +8 -10
  82. package/dist/lib/engine/traversalContext.js +4 -4
  83. package/dist/lib/engine/types.js +1 -1
  84. package/dist/lib/engine/walkSubflowSpec.js +3 -3
  85. package/dist/lib/ids/reservedIds.js +5 -5
  86. package/dist/lib/memory/DiagnosticCollector.js +3 -3
  87. package/dist/lib/memory/StageContext.js +3 -3
  88. package/dist/lib/memory/borrowedMutation.js +3 -3
  89. package/dist/lib/memory/index.js +7 -42
  90. package/dist/lib/memory/redaction.js +3 -3
  91. package/dist/lib/memory/runPolicy.js +1 -1
  92. package/dist/lib/reactive/createTypedScope.js +3 -3
  93. package/dist/lib/reactive/writeTraps.js +4 -4
  94. package/dist/lib/recorder/ControlDepRecorder.js +3 -2
  95. package/dist/lib/recorder/EmitRecorder.js +1 -1
  96. package/dist/lib/recorder/InOutRecorder.js +3 -3
  97. package/dist/lib/recorder/qualityTrace.js +4 -4
  98. package/dist/lib/runner/DeferredObserverTier.js +3 -3
  99. package/dist/lib/runner/ExecutionRuntime.js +6 -9
  100. package/dist/lib/runner/FlowChartExecutor.js +1 -1
  101. package/dist/lib/runner/getSubtreeSnapshot.js +6 -6
  102. package/dist/lib/runner/resume.js +3 -3
  103. package/dist/lib/runner/snapshot.js +6 -5
  104. package/dist/lib/scope/ScopeFacade.js +3 -3
  105. package/dist/lib/scope/state/zod/scopeFactory.js +4 -4
  106. package/dist/recorders.js +1 -1
  107. package/dist/trace.js +18 -120
  108. package/dist/types/advanced.d.ts +24 -58
  109. package/dist/types/index.d.ts +5 -8
  110. package/dist/types/lib/builder/FlowChartBuilder.d.ts +1 -1
  111. package/dist/types/lib/builder/structure/StructureRecorder.d.ts +1 -1
  112. package/dist/types/lib/capture/index.d.ts +0 -1
  113. package/dist/types/lib/engine/handlers/ResumeEntry.d.ts +3 -3
  114. package/dist/types/lib/engine/handlers/SubflowExecutor.d.ts +1 -2
  115. package/dist/types/lib/engine/index.d.ts +1 -1
  116. package/dist/types/lib/engine/narrative/CombinedNarrativeRecorder.d.ts +4 -4
  117. package/dist/types/lib/engine/narrative/index.d.ts +1 -1
  118. package/dist/types/lib/engine/narrative/narrativeTypes.d.ts +1 -11
  119. package/dist/types/lib/engine/traversal/FlowchartTraverser.d.ts +2 -10
  120. package/dist/types/lib/engine/traversalContext.d.ts +1 -1
  121. package/dist/types/lib/engine/types.d.ts +2 -10
  122. package/dist/types/lib/memory/StageContext.d.ts +2 -4
  123. package/dist/types/lib/memory/index.d.ts +6 -21
  124. package/dist/types/lib/memory/redaction.d.ts +1 -1
  125. package/dist/types/lib/memory/runPolicy.d.ts +3 -2
  126. package/dist/types/lib/recorder/ControlDepRecorder.d.ts +3 -2
  127. package/dist/types/lib/recorder/EmitRecorder.d.ts +1 -1
  128. package/dist/types/lib/recorder/qualityTrace.d.ts +1 -1
  129. package/dist/types/lib/runner/ExecutionRuntime.d.ts +4 -5
  130. package/dist/types/lib/runner/FlowChartExecutor.d.ts +1 -1
  131. package/dist/types/lib/runner/getSubtreeSnapshot.d.ts +1 -1
  132. package/dist/types/recorders.d.ts +2 -3
  133. package/dist/types/trace.d.ts +11 -57
  134. package/package.json +6 -15
  135. package/dist/esm/lib/capture/freeze.d.ts +0 -91
  136. package/dist/esm/lib/capture/freeze.js +0 -314
  137. package/dist/esm/lib/capture/ownData.d.ts +0 -7
  138. package/dist/esm/lib/capture/ownData.js +0 -15
  139. package/dist/esm/lib/capture/valueKinds.d.ts +0 -57
  140. package/dist/esm/lib/capture/valueKinds.js +0 -142
  141. package/dist/esm/lib/ids/runtimeStageId.d.ts +0 -173
  142. package/dist/esm/lib/ids/runtimeStageId.js +0 -194
  143. package/dist/esm/lib/memory/EventLog.d.ts +0 -105
  144. package/dist/esm/lib/memory/EventLog.js +0 -148
  145. package/dist/esm/lib/memory/RecordFrame.d.ts +0 -232
  146. package/dist/esm/lib/memory/RecordFrame.js +0 -296
  147. package/dist/esm/lib/memory/SharedMemory.d.ts +0 -46
  148. package/dist/esm/lib/memory/SharedMemory.js +0 -88
  149. package/dist/esm/lib/memory/TransactionBuffer.d.ts +0 -521
  150. package/dist/esm/lib/memory/TransactionBuffer.js +0 -946
  151. package/dist/esm/lib/memory/admission.d.ts +0 -81
  152. package/dist/esm/lib/memory/admission.js +0 -153
  153. package/dist/esm/lib/memory/backtrack.d.ts +0 -286
  154. package/dist/esm/lib/memory/backtrack.js +0 -457
  155. package/dist/esm/lib/memory/commitLogUtils.d.ts +0 -217
  156. package/dist/esm/lib/memory/commitLogUtils.js +0 -384
  157. package/dist/esm/lib/memory/deltaEncoding.d.ts +0 -66
  158. package/dist/esm/lib/memory/deltaEncoding.js +0 -122
  159. package/dist/esm/lib/memory/equality.d.ts +0 -93
  160. package/dist/esm/lib/memory/equality.js +0 -262
  161. package/dist/esm/lib/memory/eventPosition.d.ts +0 -18
  162. package/dist/esm/lib/memory/eventPosition.js +0 -2
  163. package/dist/esm/lib/memory/honesty.d.ts +0 -93
  164. package/dist/esm/lib/memory/honesty.js +0 -92
  165. package/dist/esm/lib/memory/keyPaths.d.ts +0 -125
  166. package/dist/esm/lib/memory/keyPaths.js +0 -227
  167. package/dist/esm/lib/memory/logModel.d.ts +0 -76
  168. package/dist/esm/lib/memory/logModel.js +0 -364
  169. package/dist/esm/lib/memory/merge.d.ts +0 -26
  170. package/dist/esm/lib/memory/merge.js +0 -60
  171. package/dist/esm/lib/memory/pathOps.d.ts +0 -115
  172. package/dist/esm/lib/memory/pathOps.js +0 -290
  173. package/dist/esm/lib/memory/paths.d.ts +0 -52
  174. package/dist/esm/lib/memory/paths.js +0 -57
  175. package/dist/esm/lib/memory/placeholders.d.ts +0 -39
  176. package/dist/esm/lib/memory/placeholders.js +0 -40
  177. package/dist/esm/lib/memory/recordCommit.d.ts +0 -45
  178. package/dist/esm/lib/memory/recordCommit.js +0 -61
  179. package/dist/esm/lib/memory/scrub.d.ts +0 -53
  180. package/dist/esm/lib/memory/scrub.js +0 -74
  181. package/dist/esm/lib/memory/types.d.ts +0 -209
  182. package/dist/esm/lib/memory/types.js +0 -10
  183. package/dist/esm/lib/memory/utils.d.ts +0 -73
  184. package/dist/esm/lib/memory/utils.js +0 -159
  185. package/dist/esm/lib/memory/verbs.d.ts +0 -333
  186. package/dist/esm/lib/memory/verbs.js +0 -427
  187. package/dist/esm/lib/recorder/CommitRangeIndex.d.ts +0 -147
  188. package/dist/esm/lib/recorder/CommitRangeIndex.js +0 -207
  189. package/dist/esm/lib/scope/detectCircular.d.ts +0 -13
  190. package/dist/esm/lib/scope/detectCircular.js +0 -14
  191. package/dist/esm/lib/scope/recorders/summarizeValue.d.ts +0 -5
  192. package/dist/esm/lib/scope/recorders/summarizeValue.js +0 -6
  193. package/dist/esm/lib/slice/elementProvenance.d.ts +0 -81
  194. package/dist/esm/lib/slice/elementProvenance.js +0 -190
  195. package/dist/esm/lib/slice/forwardSliceForKey.d.ts +0 -88
  196. package/dist/esm/lib/slice/forwardSliceForKey.js +0 -243
  197. package/dist/esm/lib/slice/index.d.ts +0 -25
  198. package/dist/esm/lib/slice/index.js +0 -25
  199. package/dist/esm/lib/slice/keyIndex.d.ts +0 -137
  200. package/dist/esm/lib/slice/keyIndex.js +0 -293
  201. package/dist/esm/lib/slice/keyTimeline.d.ts +0 -49
  202. package/dist/esm/lib/slice/keyTimeline.js +0 -113
  203. package/dist/esm/lib/slice/keysReadSources.d.ts +0 -51
  204. package/dist/esm/lib/slice/keysReadSources.js +0 -95
  205. package/dist/esm/lib/slice/serialize.d.ts +0 -78
  206. package/dist/esm/lib/slice/serialize.js +0 -278
  207. package/dist/esm/lib/slice/sliceForKey.d.ts +0 -47
  208. package/dist/esm/lib/slice/sliceForKey.js +0 -88
  209. package/dist/esm/lib/slice/types.d.ts +0 -567
  210. package/dist/esm/lib/slice/types.js +0 -25
  211. package/dist/esm/lib/time-travel/axis.d.ts +0 -119
  212. package/dist/esm/lib/time-travel/axis.js +0 -179
  213. package/dist/esm/lib/time-travel/bundles.d.ts +0 -77
  214. package/dist/esm/lib/time-travel/bundles.js +0 -136
  215. package/dist/esm/lib/time-travel/chain.d.ts +0 -93
  216. package/dist/esm/lib/time-travel/chain.js +0 -188
  217. package/dist/esm/lib/time-travel/commitStops.d.ts +0 -55
  218. package/dist/esm/lib/time-travel/commitStops.js +0 -202
  219. package/dist/esm/lib/time-travel/index.d.ts +0 -22
  220. package/dist/esm/lib/time-travel/index.js +0 -21
  221. package/dist/esm/lib/time-travel/stateAt.d.ts +0 -102
  222. package/dist/esm/lib/time-travel/stateAt.js +0 -153
  223. package/dist/esm/lib/time-travel/tagStops.d.ts +0 -72
  224. package/dist/esm/lib/time-travel/tagStops.js +0 -102
  225. package/dist/esm/lib/time-travel/timeTravel.d.ts +0 -70
  226. package/dist/esm/lib/time-travel/timeTravel.js +0 -360
  227. package/dist/esm/lib/time-travel/types.d.ts +0 -470
  228. package/dist/esm/lib/time-travel/types.js +0 -23
  229. package/dist/esm/write.d.ts +0 -47
  230. package/dist/esm/write.js +0 -46
  231. package/dist/lib/capture/freeze.js +0 -320
  232. package/dist/lib/capture/ownData.js +0 -19
  233. package/dist/lib/capture/valueKinds.js +0 -146
  234. package/dist/lib/ids/runtimeStageId.js +0 -210
  235. package/dist/lib/memory/EventLog.js +0 -152
  236. package/dist/lib/memory/RecordFrame.js +0 -300
  237. package/dist/lib/memory/SharedMemory.js +0 -92
  238. package/dist/lib/memory/TransactionBuffer.js +0 -950
  239. package/dist/lib/memory/admission.js +0 -159
  240. package/dist/lib/memory/backtrack.js +0 -463
  241. package/dist/lib/memory/commitLogUtils.js +0 -399
  242. package/dist/lib/memory/deltaEncoding.js +0 -128
  243. package/dist/lib/memory/equality.js +0 -266
  244. package/dist/lib/memory/eventPosition.js +0 -3
  245. package/dist/lib/memory/honesty.js +0 -95
  246. package/dist/lib/memory/keyPaths.js +0 -243
  247. package/dist/lib/memory/logModel.js +0 -372
  248. package/dist/lib/memory/merge.js +0 -64
  249. package/dist/lib/memory/pathOps.js +0 -306
  250. package/dist/lib/memory/paths.js +0 -62
  251. package/dist/lib/memory/placeholders.js +0 -43
  252. package/dist/lib/memory/recordCommit.js +0 -65
  253. package/dist/lib/memory/scrub.js +0 -79
  254. package/dist/lib/memory/types.js +0 -11
  255. package/dist/lib/memory/utils.js +0 -178
  256. package/dist/lib/memory/verbs.js +0 -444
  257. package/dist/lib/recorder/CommitRangeIndex.js +0 -211
  258. package/dist/lib/scope/detectCircular.js +0 -21
  259. package/dist/lib/scope/recorders/summarizeValue.js +0 -10
  260. package/dist/lib/slice/elementProvenance.js +0 -195
  261. package/dist/lib/slice/forwardSliceForKey.js +0 -247
  262. package/dist/lib/slice/index.js +0 -42
  263. package/dist/lib/slice/keyIndex.js +0 -313
  264. package/dist/lib/slice/keyTimeline.js +0 -117
  265. package/dist/lib/slice/keysReadSources.js +0 -101
  266. package/dist/lib/slice/serialize.js +0 -286
  267. package/dist/lib/slice/sliceForKey.js +0 -93
  268. package/dist/lib/slice/types.js +0 -26
  269. package/dist/lib/time-travel/axis.js +0 -184
  270. package/dist/lib/time-travel/bundles.js +0 -144
  271. package/dist/lib/time-travel/chain.js +0 -193
  272. package/dist/lib/time-travel/commitStops.js +0 -206
  273. package/dist/lib/time-travel/index.js +0 -32
  274. package/dist/lib/time-travel/stateAt.js +0 -160
  275. package/dist/lib/time-travel/tagStops.js +0 -106
  276. package/dist/lib/time-travel/timeTravel.js +0 -364
  277. package/dist/lib/time-travel/types.js +0 -24
  278. package/dist/types/lib/capture/freeze.d.ts +0 -91
  279. package/dist/types/lib/capture/ownData.d.ts +0 -7
  280. package/dist/types/lib/capture/valueKinds.d.ts +0 -57
  281. package/dist/types/lib/ids/runtimeStageId.d.ts +0 -173
  282. package/dist/types/lib/memory/EventLog.d.ts +0 -105
  283. package/dist/types/lib/memory/RecordFrame.d.ts +0 -232
  284. package/dist/types/lib/memory/SharedMemory.d.ts +0 -46
  285. package/dist/types/lib/memory/TransactionBuffer.d.ts +0 -521
  286. package/dist/types/lib/memory/admission.d.ts +0 -81
  287. package/dist/types/lib/memory/backtrack.d.ts +0 -286
  288. package/dist/types/lib/memory/commitLogUtils.d.ts +0 -217
  289. package/dist/types/lib/memory/deltaEncoding.d.ts +0 -66
  290. package/dist/types/lib/memory/equality.d.ts +0 -93
  291. package/dist/types/lib/memory/eventPosition.d.ts +0 -18
  292. package/dist/types/lib/memory/honesty.d.ts +0 -93
  293. package/dist/types/lib/memory/keyPaths.d.ts +0 -125
  294. package/dist/types/lib/memory/logModel.d.ts +0 -76
  295. package/dist/types/lib/memory/merge.d.ts +0 -26
  296. package/dist/types/lib/memory/pathOps.d.ts +0 -115
  297. package/dist/types/lib/memory/paths.d.ts +0 -52
  298. package/dist/types/lib/memory/placeholders.d.ts +0 -39
  299. package/dist/types/lib/memory/recordCommit.d.ts +0 -45
  300. package/dist/types/lib/memory/scrub.d.ts +0 -53
  301. package/dist/types/lib/memory/types.d.ts +0 -209
  302. package/dist/types/lib/memory/utils.d.ts +0 -73
  303. package/dist/types/lib/memory/verbs.d.ts +0 -333
  304. package/dist/types/lib/recorder/CommitRangeIndex.d.ts +0 -147
  305. package/dist/types/lib/scope/detectCircular.d.ts +0 -13
  306. package/dist/types/lib/scope/recorders/summarizeValue.d.ts +0 -5
  307. package/dist/types/lib/slice/elementProvenance.d.ts +0 -81
  308. package/dist/types/lib/slice/forwardSliceForKey.d.ts +0 -88
  309. package/dist/types/lib/slice/index.d.ts +0 -25
  310. package/dist/types/lib/slice/keyIndex.d.ts +0 -137
  311. package/dist/types/lib/slice/keyTimeline.d.ts +0 -49
  312. package/dist/types/lib/slice/keysReadSources.d.ts +0 -51
  313. package/dist/types/lib/slice/serialize.d.ts +0 -78
  314. package/dist/types/lib/slice/sliceForKey.d.ts +0 -47
  315. package/dist/types/lib/slice/types.d.ts +0 -567
  316. package/dist/types/lib/time-travel/axis.d.ts +0 -119
  317. package/dist/types/lib/time-travel/bundles.d.ts +0 -77
  318. package/dist/types/lib/time-travel/chain.d.ts +0 -93
  319. package/dist/types/lib/time-travel/commitStops.d.ts +0 -55
  320. package/dist/types/lib/time-travel/index.d.ts +0 -22
  321. package/dist/types/lib/time-travel/stateAt.d.ts +0 -102
  322. package/dist/types/lib/time-travel/tagStops.d.ts +0 -72
  323. package/dist/types/lib/time-travel/timeTravel.d.ts +0 -70
  324. package/dist/types/lib/time-travel/types.d.ts +0 -470
  325. package/dist/types/write.d.ts +0 -47
  326. package/dist/write.js +0 -52
@@ -66,7 +66,7 @@
66
66
  */
67
67
  Object.defineProperty(exports, "__esModule", { value: true });
68
68
  exports.InOutRecorder = exports.inOutRecorder = exports.ROOT_RUNTIME_STAGE_ID = exports.ROOT_SUBFLOW_ID = void 0;
69
- const runtimeStageId_js_1 = require("../ids/runtimeStageId.js");
69
+ const foottrace_1 = require("foottrace");
70
70
  const SequenceStore_js_1 = require("./SequenceStore.js");
71
71
  /** Synthetic id for the top-level run's boundary pair. */
72
72
  exports.ROOT_SUBFLOW_ID = '__root__';
@@ -209,7 +209,7 @@ function buildSubflowEntry(event, phase) {
209
209
  if (!subflowId)
210
210
  return undefined;
211
211
  const runtimeStageId = event.traversalContext?.runtimeStageId ?? '';
212
- const segments = (0, runtimeStageId_js_1.pathSegments)(subflowId);
212
+ const segments = (0, foottrace_1.idPathSegments)(subflowId);
213
213
  const subflowPath = [exports.ROOT_SUBFLOW_ID, ...segments];
214
214
  const depth = subflowPath.length - 1;
215
215
  const localSubflowId = segments[segments.length - 1] ?? subflowId;
@@ -227,4 +227,4 @@ function buildSubflowEntry(event, phase) {
227
227
  isRoot: false,
228
228
  };
229
229
  }
230
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSW5PdXRSZWNvcmRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvcmVjb3JkZXIvSW5PdXRSZWNvcmRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FnRUc7OztBQUdILGdFQUF3RDtBQUN4RCx5REFBbUQ7QUFNbkQsMERBQTBEO0FBQzdDLFFBQUEsZUFBZSxHQUFHLFVBQVUsQ0FBQztBQUUxQyxvRUFBb0U7QUFDdkQsUUFBQSxxQkFBcUIsR0FBRyxZQUFZLENBQUM7QUFtRGxELElBQUksUUFBUSxHQUFHLENBQUMsQ0FBQztBQUVqQjs7R0FFRztBQUNILFNBQWdCLGFBQWEsQ0FBQyxVQUFnQyxFQUFFO0lBQzlELE9BQU8sSUFBSSxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDcEMsQ0FBQztBQUZELHNDQUVDO0FBRUQ7Ozs7Ozs7R0FPRztBQUNILE1BQWEsYUFBYTtJQUNmLEVBQUUsQ0FBUztJQUNwQix5RUFBeUU7SUFDeEQsS0FBSyxHQUFHLElBQUksZ0NBQWEsRUFBYyxDQUFDO0lBRXpELFlBQVksVUFBZ0MsRUFBRTtRQUM1QyxJQUFJLENBQUMsRUFBRSxHQUFHLE9BQU8sQ0FBQyxFQUFFLElBQUksU0FBUyxFQUFFLFFBQVEsRUFBRSxDQUFDO0lBQ2hELENBQUM7SUFFRCx5RUFBeUU7SUFFekUsVUFBVSxDQUFDLEtBQW1CO1FBQzVCLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7SUFDMUQsQ0FBQztJQUVELFFBQVEsQ0FBQyxLQUFtQjtRQUMxQixJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxD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UUFDUixLQUFLO1FBQ0wsT0FBTztRQUNQLE1BQU0sRUFBRSxJQUFJO0tBQ2IsQ0FBQztBQUNKLENBQUM7QUFFRDs7Ozs7Ozs7Ozs7O0dBWUc7QUFDSCxTQUFTLGlCQUFpQixDQUFDLEtBQXVCLEVBQUUsS0FBaUI7SUFDbkUsTUFBTSxTQUFTLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQztJQUNsQyxJQUFJLENBQUMsU0FBUztRQUFFLE9BQU8sU0FBUyxDQUFDO0lBRWpDLE1BQU0sY0FBYyxHQUFHLEtBQUssQ0FBQyxnQkFBZ0IsRUFBRSxjQUFjLElBQUksRUFBRSxDQUFDO0lBQ3BFLE1BQU0sUUFBUSxHQUFHLElBQUEsZ0NBQVksRUFBQyxTQUFTLENBQUMsQ0FBQztJQUN6QyxNQUFNLFdBQVcsR0FBc0IsQ0FBQyx1QkFBZSxFQUFFLEdBQUcsUUFBUSxDQUFDLENBQUM7SUFDdEUsTUFBTSxLQUFLLEdBQUcsV0FBVyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7SUFDckMsTUFBTSxjQUFjLEdBQUcsUUFBUSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLElBQUksU0FBUyxDQUFDO0lBQ2xFLE1BQU0sT0FBTyxHQUFHLEtBQUssS0FBSyxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUM7SUFFMUUsT0FBTztRQUNMLGNBQWM7UUFDZCxTQUFTO1FBQ1QsY0FBYztRQUNkLFdBQVcsRUFBRSxLQUFLLENBQUMsSUFBSTtRQUN2QixXQUFXLEVBQUUsS0FBSyxDQUFDLFdBQVc7UUFDOUIsV0FBVztRQUNYLEtBQUs7UUFDTCxLQUFLO1FBQ0wsT0FBTztRQUNQLE1BQU0sRUFBRSxLQUFLO0tBQ2QsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEluT3V0UmVjb3JkZXIg4oCUIGNhcHR1cmVzIGV2ZXJ5IGNoYXJ0J3MgaW5wdXQvb3V0cHV0IGFzIGVudHJ5L2V4aXQgcGFpcnMuXG4gKlxuICogVGhlIGdhcCB0aGlzIGZpbGxzOlxuICogICBFdmVyeSBjaGFydCBpbiBmb290cHJpbnRqcyBoYXMgdHdvIG5hdHVyYWwgZGF0YSBib3VuZGFyaWVzOlxuICogICAgIC0gdGhlICoqaW5wdXQqKiB0aGF0IGZsb3dlZCBpbiAodG9wLWxldmVsOiBgcnVuKHtpbnB1dH0pYDtcbiAqICAgICAgIHN1YmZsb3c6IGBpbnB1dE1hcHBlcmAgcmVzdWx0KVxuICogICAgIC0gdGhlICoqb3V0cHV0KiogdGhhdCBmbG93ZWQgb3V0ICh0b3AtbGV2ZWw6IGNoYXJ0IHJldHVybiB2YWx1ZTtcbiAqICAgICAgIHN1YmZsb3c6IHNoYXJlZCBzdGF0ZSBhdCBleGl0IC8gYG91dHB1dE1hcHBlcmAgcmVzdWx0KVxuICpcbiAqICAgVG9nZXRoZXIgd2l0aCBgVG9wb2xvZ3lSZWNvcmRlcmAgKGNvbXBvc2l0aW9uIHNoYXBlKSB0aGlzIGlzIHRoZVxuICogICB1bml2ZXJzYWwgXCJzdGVwXCIgcHJpbWl0aXZlIHRoYXQgZG93bnN0cmVhbSBsYXllcnMgcHJvamVjdCDigJQgYSBMZW5zXG4gKiAgIFN0ZXBHcmFwaCwgYSBUcmFjZSB2aWV3LCBjdXN0b20gZGFzaGJvYXJkcy4gQWxsIGJpbmQgYnkgYHJ1bnRpbWVTdGFnZUlkYC5cbiAqXG4gKiAgIFRoZSByb290IGNoYXJ0IGlzIHRyZWF0ZWQgaWRlbnRpY2FsbHkgdG8gYW55IHN1YmZsb3c6IGFuIGBlbnRyeWBcbiAqICAgYm91bmRhcnkgb24gYG9uUnVuU3RhcnRgIGFuZCBhbiBgZXhpdGAgYm91bmRhcnkgb24gYG9uUnVuRW5kYCwgd2l0aFxuICogICBgc3ViZmxvd0lkOiAnX19yb290X18nYC4gU28gY29uc3VtZXJzIGJ1aWxkaW5nIFwiZXZlcnkgc3RlcCBoYXMgYW5cbiAqICAgaW4vb3V0IGFycm93XCIgdmlld3MgY2FuIGNsb3NlIHRoZSBjaGFpbiBhdCB0aGUgdG9wIGxldmVsIOKAlCBub1xuICogICBzcGVjaWFsLWNhc2UgcmVuZGVyaW5nIHJlcXVpcmVkLlxuICpcbiAqIFR3byBib3VuZGFyeSBwaGFzZXMgcGVyIGNoYXJ0IGV4ZWN1dGlvbjpcbiAqICAgMS4gYHBoYXNlOiAnZW50cnknYCDigJQgcGF5bG9hZCA9IHRoZSBpbnB1dCBjcm9zc2luZyB0aGUgYm91bmRhcnkgSU5cbiAqICAgMi4gYHBoYXNlOiAnZXhpdCdgICDigJQgcGF5bG9hZCA9IHRoZSBvdXRwdXQgY3Jvc3NpbmcgdGhlIGJvdW5kYXJ5IE9VVFxuICpcbiAqICAgTG9vcHMgcmUtZW50ZXJpbmcgdGhlIHNhbWUgc3ViZmxvdyBnZXQgZGlzdGluY3QgYHJ1bnRpbWVTdGFnZUlkYHNcbiAqICAgYXV0b21hdGljYWxseSAocGFyZW50IHN0YWdlJ3MgZXhlY3V0aW9uSW5kZXggaW5jcmVtZW50cyBwZXIgaXRlcmF0aW9uKS5cbiAqXG4gKiBQYXVzZSBzZW1hbnRpY3M6XG4gKiAgIFdoZW4gYSBzdGFnZSBwYXVzZXMgaW5zaWRlIGEgc3ViZmxvdywgdGhlIGVuZ2luZSByZS10aHJvd3MgdGhlIHBhdXNlXG4gKiAgIHNpZ25hbCB3aXRob3V0IGZpcmluZyBgb25TdWJmbG93RXhpdGAgKG9yIGBvblJ1bkVuZGApLiBUaGUgc3ViZmxvd1xuICogICBoYXMgYW4gYGVudHJ5YCB3aXRoIG5vIG1hdGNoaW5nIGBleGl0YCB1bnRpbCB0aGUgcnVuIHJlc3VtZXMgYW5kXG4gKiAgIGV4aXRzIGNsZWFubHkuIENvbnN1bWVycyBzaG91bGQgaGFuZGxlIGVudHJ5LXdpdGhvdXQtZXhpdCBncmFjZWZ1bGx5XG4gKiAgIChpdCBtZWFucyBcImluIHByb2dyZXNzXCIgb3IgXCJwYXVzZWRcIikuIFRoZSBgZ2V0Qm91bmRhcnkoKWAgaGVscGVyXG4gKiAgIHJldHVybnMgYHsgZW50cnksIGV4aXQ6IHVuZGVmaW5lZCB9YCBpbiB0aGF0IGNhc2UuXG4gKlxuICogUmVkYWN0aW9uOlxuICogICBQYXlsb2FkIHJlZGFjdGlvbiBpcyB0aGUgZW5naW5lJ3MgcmVzcG9uc2liaWxpdHkgKGBSZWRhY3Rpb25Qb2xpY3lgKS5cbiAqICAgQnkgdGhlIHRpbWUgcGF5bG9hZHMgcmVhY2ggdGhpcyByZWNvcmRlciB2aWEgYEZsb3dTdWJmbG93RXZlbnRgIG9yXG4gKiAgIGBGbG93UnVuRXZlbnRgLCBuYW1lZCB2YWx1ZXMgaGF2ZSBwYXNzZWQgdGhlIHJ1bidzIHJ1bGUuIFJvb3QgcnVuXG4gKiAgIHBheWxvYWRzIGFyZSB3YWxrZWQgYXQgZXZlcnkgZGVwdGggKGEgbmVzdGVkIGtleSBieSBpdHMgb3duIG5hbWUgb3JcbiAqICAgZG90dGVkIHBhdGgpIHBsdXMgZXhwbGljaXQgbmVzdGVkIGZpZWxkczsgc2NhbGFycyBwYXNzIHRocm91Z2gsIGFuZCBmb3JrXG4gKiAgIGNoaWxkLUlEIGVudmVsb3BlcyBuZWVkIGV4cGxpY2l0IHJlc3VsdCBwYXRocy4gVGhpcyBpcyBub3QgY29udGVudCBzY2FubmluZy4gVGhlIHJlY29yZGVyXG4gKiAgIGRvZXMgbm90IChhbmQgc2hvdWxkIG5vdCkgcmUtcmVkYWN0IG9yIHJlY29uc3RydWN0IHRoZSBydW4uXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGltcG9ydCB7IGluT3V0UmVjb3JkZXIgfSBmcm9tICdmb290cHJpbnRqcy90cmFjZSc7XG4gKlxuICogY29uc3QgaW5PdXQgPSBpbk91dFJlY29yZGVyKCk7XG4gKiBleGVjdXRvci5hdHRhY2hDb21iaW5lZFJlY29yZGVyKGluT3V0KTtcbiAqIGF3YWl0IGV4ZWN1dG9yLnJ1bih7IGlucHV0IH0pO1xuICpcbiAqIGluT3V0LmdldFN0ZXBzKCk7ICAgICAgICAgICAgICAgICAgICAvLyBlbnRyeSBib3VuZGFyaWVzIOKAlCB0aW1lbGluZSBwcm9qZWN0aW9uXG4gKiBpbk91dC5nZXRCb3VuZGFyeShydW50aW1lU3RhZ2VJZCk7ICAgLy8geyBlbnRyeSwgZXhpdCB9IHBhaXIgZm9yIG9uZSBleGVjdXRpb25cbiAqIGluT3V0LmdldEJvdW5kYXJpZXMoKTsgICAgICAgICAgICAgICAvLyBmbGF0IGxpc3QgKGVudHJ5K2V4aXQgaW50ZXJsZWF2ZWQpXG4gKiBpbk91dC5nZXRSb290Qm91bmRhcnkoKTsgICAgICAgICAgICAgLy8geyBlbnRyeSwgZXhpdCB9IGZvciB0aGUgdG9wLWxldmVsIHJ1blxuICogYGBgXG4gKlxuICogQGV4YW1wbGUgRmlsdGVyaW5nIGJ5IHN1YmZsb3cgcGF0aFxuICogYGBgdHlwZXNjcmlwdFxuICogY29uc3QgYWdlbnRTdGVwcyA9IGluT3V0XG4gKiAgIC5nZXRTdGVwcygpXG4gKiAgIC5maWx0ZXIoKGIpID0+IGIuc3ViZmxvd1BhdGhbMV0gPT09ICdzZi1hZ2VudCcpOyAgLy8gcGF0aFswXSBpcyB0aGUgcm9vdFxuICogYGBgXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBGbG93UmVjb3JkZXIsIEZsb3dSdW5FdmVudCwgRmxvd1N1YmZsb3dFdmVudCB9IGZyb20gJy4uL2VuZ2luZS9uYXJyYXRpdmUvdHlwZXMuanMnO1xuaW1wb3J0IHsgcGF0aFNlZ21lbnRzIH0gZnJvbSAnLi4vaWRzL3J1bnRpbWVTdGFnZUlkLmpzJztcbmltcG9ydCB7IFNlcXVlbmNlU3RvcmUgfSBmcm9tICcuL1NlcXVlbmNlU3RvcmUuanMnO1xuXG4vLyDilIDilIAgVHlwZXMg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbmV4cG9ydCB0eXBlIEluT3V0UGhhc2UgPSAnZW50cnknIHwgJ2V4aXQnO1xuXG4vKiogU3ludGhldGljIGlkIGZvciB0aGUgdG9wLWxldmVsIHJ1bidzIGJvdW5kYXJ5IHBhaXIuICovXG5leHBvcnQgY29uc3QgUk9PVF9TVUJGTE9XX0lEID0gJ19fcm9vdF9fJztcblxuLyoqIFN5bnRoZXRpYyBydW50aW1lU3RhZ2VJZCBmb3IgdGhlIHRvcC1sZXZlbCBydW4gYm91bmRhcnkgcGFpci4gKi9cbmV4cG9ydCBjb25zdCBST09UX1JVTlRJTUVfU1RBR0VfSUQgPSAnX19yb290X18jMCc7XG5cbi8qKlxuICogT25lIGhhbGYgb2YgYSBjaGFydCBleGVjdXRpb24gYm91bmRhcnkuIEVudHJ5L2V4aXQgcGFpcnMgc2hhcmUgYHJ1bnRpbWVTdGFnZUlkYC5cbiAqXG4gKiBOYW1pbmcgZm9sbG93cyB0aGUgZW5naW5lOiBgc3ViZmxvd0lkYCBpcyB0aGUgcGF0aC1wcmVmaXhlZCBpZGVudGlmaWVyIHRoZVxuICogZW5naW5lIGVtaXRzIChlLmcuIGAnc2Ytb3V0ZXIvc2YtaW5uZXInYCBmb3IgbmVzdGVkIHN1YmZsb3dzKS4gRm9yIHRoZVxuICogdG9wLWxldmVsIHJ1biwgaXQncyB0aGUgc3ludGhldGljIGAnX19yb290X18nYC4gYHN1YmZsb3dQYXRoYCBpcyB0aGVcbiAqIGRlY29tcG9zaXRpb24gaW50byBzZWdtZW50cyDigJQgcHJvdmlkZWQgYXMgYSBjb252ZW5pZW5jZSBiZWNhdXNlIGNvbnN1bWVyc1xuICogb2Z0ZW4gcXVlcnkgLyBncm91cCBieSB0aGUgcGF0aCB0cmVlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEluT3V0RW50cnkge1xuICAvKiogcnVudGltZVN0YWdlSWQg4oCUIHNhbWUgdmFsdWUgZm9yIHRoZSBlbnRyeS9leGl0IHBhaXIgb2Ygb25lIGV4ZWN1dGlvbi5cbiAgICogIFRvcC1sZXZlbCBydW4gdXNlcyB0aGUgc3ludGhldGljIGBST09UX1JVTlRJTUVfU1RBR0VfSURgLiAqL1xuICByZWFkb25seSBydW50aW1lU3RhZ2VJZDogc3RyaW5nO1xuICAvKiogUGF0aC1wcmVmaXhlZCBzdWJmbG93IGlkZW50aWZpZXIgKG1hdGNoZXMgdGhlIGVuZ2luZSdzIGBGbG93U3ViZmxvd0V2ZW50LnN1YmZsb3dJZGApLlxuICAgKiAgVG9wLWxldmVsIOKGkiBgJ19fcm9vdF9fJ2AuIFN1YmZsb3cg4oaSIGAnc2Ytb3V0ZXInYCBvciBgJ3NmLW91dGVyL3NmLWlubmVyJ2AuICovXG4gIHJlYWRvbmx5IHN1YmZsb3dJZDogc3RyaW5nO1xuICAvKiogTGFzdCBzZWdtZW50IG9mIGBzdWJmbG93SWRgIOKAlCBjb252ZW5pZW5jZSBmb3IgY29uc3VtZXJzIHRoYXQgZ3JvdXAgYnkgbGVhZiBuYW1lLlxuICAgKiAgVG9wLWxldmVsIOKGkiBgJ19fcm9vdF9fJ2AuICovXG4gIHJlYWRvbmx5IGxvY2FsU3ViZmxvd0lkOiBzdHJpbmc7XG4gIC8qKiBIdW1hbi1yZWFkYWJsZSBkaXNwbGF5IG5hbWUgKGZyb20gdGhlIGJ1aWxkZXI7IGAnUnVuJ2AgZm9yIHRoZSB0b3AtbGV2ZWwgcnVuKS4gKi9cbiAgcmVhZG9ubHkgc3ViZmxvd05hbWU6IHN0cmluZztcbiAgLyoqIEJ1aWxkLXRpbWUgZGVzY3JpcHRpb24gZnJvbSB0aGUgc3ViZmxvdydzIHJvb3Qgc3RhZ2UuXG4gICAqICBDYXJyaWVzIHRheG9ub215IG1hcmtlcnMgKGUuZy4gYCdBZ2VudDogUmVBY3QgbG9vcCdgKS4gVW5kZWZpbmVkIGZvciByb290LiAqL1xuICByZWFkb25seSBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgLyoqIERlY29tcG9zaXRpb24gb2YgYHN1YmZsb3dJZGAgaW50byBzZWdtZW50cy4gVG9wLWxldmVsIOKGkiBgWydfX3Jvb3RfXyddYC5cbiAgICogIFN1YmZsb3dzIGxpdmUgVU5ERVIgdGhlIHJvb3Q6IGEgdG9wLWxldmVsIHN1YmZsb3cgaGFzIHBhdGggYFsnX19yb290X18nLCAnc2YteCddYC4gKi9cbiAgcmVhZG9ubHkgc3ViZmxvd1BhdGg6IHJlYWRvbmx5IHN0cmluZ1tdO1xuICAvKiogRGVwdGggaW4gdGhlIHN1YmZsb3cgdHJlZS4gUm9vdCDihpIgMC4gRmlyc3QtbGV2ZWwgc3ViZmxvdyDihpIgMS4gKi9cbiAgcmVhZG9ubHkgZGVwdGg6IG51bWJlcjtcbiAgLyoqIFdoaWNoIHNpZGUgb2YgdGhlIGJvdW5kYXJ5IHRoaXMgZW50cnkgcmVwcmVzZW50cy4gKi9cbiAgcmVhZG9ubHkgcGhhc2U6IEluT3V0UGhhc2U7XG4gIC8qKiBEYXRhIGNyb3NzaW5nIHRoZSBib3VuZGFyeS5cbiAgICogIC0gYHBoYXNlOiAnZW50cnknYCDihpIgYGlucHV0TWFwcGVyYCByZXN1bHQgKHN1YmZsb3cpIG9yIGBydW4oe2lucHV0fSlgIChyb290KVxuICAgKiAgLSBgcGhhc2U6ICdleGl0J2AgIOKGkiBzdWJmbG93IHNoYXJlZCBzdGF0ZSBhdCBleGl0IChzdWJmbG93KSBvciBjaGFydCByZXR1cm4gdmFsdWUgKHJvb3QpXG4gICAqXG4gICAqICBVbmRlZmluZWQgd2hlbiBubyBtYXBwZXIgLyBubyBpbnB1dCB3YXMgcHJvdmlkZWQuICovXG4gIHJlYWRvbmx5IHBheWxvYWQ/OiB1bmtub3duO1xuICAvKiogVHJ1ZSB3aGVuIHRoaXMgZW50cnkgY2FtZSBmcm9tIHRoZSB0b3AtbGV2ZWwgcnVuIChgb25SdW5TdGFydGAgLyBgb25SdW5FbmRgKVxuICAgKiAgcmF0aGVyIHRoYW4gZnJvbSBhIHN1YmZsb3cgKGBvblN1YmZsb3dFbnRyeWAgLyBgb25TdWJmbG93RXhpdGApLlxuICAgKiAgTGVucyB1c2VzIHRoaXMgdG8gcmVuZGVyIHRoZSByb290IHBhaXIgYXMgYHVzZXIg4oaSIHJ1biDihpIgdXNlcmAgaW5zdGVhZCBvZlxuICAgKiAgdGhlIHJlZ3VsYXIgc3ViZmxvdyBzaGFwZS4gKi9cbiAgcmVhZG9ubHkgaXNSb290OiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEluT3V0UmVjb3JkZXJPcHRpb25zIHtcbiAgLyoqIFNjb3BlUmVjb3JkZXIgaWQuIERlZmF1bHRzIHRvIGBpbm91dC1OYCAoYXV0by1pbmNyZW1lbnRlZCkuICovXG4gIGlkPzogc3RyaW5nO1xufVxuXG5sZXQgX2NvdW50ZXIgPSAwO1xuXG4vKipcbiAqIEZhY3Rvcnkg4oCUIG1hdGNoZXMgdGhlIGB0b3BvbG9neVJlY29yZGVyKClgIC8gYG5hcnJhdGl2ZSgpYCBzdHlsZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGluT3V0UmVjb3JkZXIob3B0aW9uczogSW5PdXRSZWNvcmRlck9wdGlvbnMgPSB7fSk6IEluT3V0UmVjb3JkZXIge1xuICByZXR1cm4gbmV3IEluT3V0UmVjb3JkZXIob3B0aW9ucyk7XG59XG5cbi8qKlxuICogU3RhdGVmdWwgYWNjdW11bGF0b3IgdGhhdCB3YXRjaGVzIGBGbG93UmVjb3JkZXJgIGNoYXJ0LWJvdW5kYXJ5IGV2ZW50c1xuICogKHJ1biBzdGFydC9lbmQgKyBzdWJmbG93IGVudHJ5L2V4aXQpIGFuZCBwdXNoZXMgYEluT3V0RW50cnlgIHJlY29yZHMgdG9cbiAqIGl0cyBjb21wb3NlZCBgU2VxdWVuY2VTdG9yZWAgKENvbnZlbnRpb24gMSDigJQgb25lIHB1cnBvc2UgcGVyIHJlY29yZGVyKS5cbiAqXG4gKiBBdHRhY2ggdmlhIGBleGVjdXRvci5hdHRhY2hDb21iaW5lZFJlY29yZGVyKHJlY29yZGVyKWAg4oCUIGZvb3RwcmludGpzXG4gKiBkZXRlY3RzIHRoZSBgRmxvd1JlY29yZGVyYCBtZXRob2Qgc2hhcGUgYW5kIHJvdXRlcyBldmVudHMuXG4gKi9cbmV4cG9ydCBjbGFzcyBJbk91dFJlY29yZGVyIGltcGxlbWVudHMgRmxvd1JlY29yZGVyIHtcbiAgcmVhZG9ubHkgaWQ6IHN0cmluZztcbiAgLyoqIDE6TiBvcmRlcmVkIHN0b3JhZ2Ugd2l0aCBwZXItc3RlcCBpbmRleCAoQ29udmVudGlvbiAxIOKAlCBjb21wb3NlZCkuICovXG4gIHByaXZhdGUgcmVhZG9ubHkgc3RvcmUgPSBuZXcgU2VxdWVuY2VTdG9yZTxJbk91dEVudHJ5PigpO1xuXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnM6IEluT3V0UmVjb3JkZXJPcHRpb25zID0ge30pIHtcbiAgICB0aGlzLmlkID0gb3B0aW9ucy5pZCA/PyBgaW5vdXQtJHsrK19jb3VudGVyfWA7XG4gIH1cblxuICAvLyDilIDilIAgRmxvd1JlY29yZGVyIGhvb2tzIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4gIG9uUnVuU3RhcnQoZXZlbnQ6IEZsb3dSdW5FdmVudCk6IHZvaWQge1xuICAgIHRoaXMuc3RvcmUucHVzaChidWlsZFJvb3RFbnRyeSgnZW50cnknLCBldmVudC5wYXlsb2FkKSk7XG4gIH1cblxuICBvblJ1bkVuZChldmVudDogRmxvd1J1bkV2ZW50KTogdm9pZCB7XG4gICAgdGhpcy5zdG9yZS5wdXNoKGJ1aWxkUm9vdEVudHJ5KCdleGl0JywgZXZlbnQucGF5bG9hZCkpO1xuICB9XG5cbiAgb25TdWJmbG93RW50cnkoZXZlbnQ6IEZsb3dTdWJmbG93RXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCBlbnRyeSA9IGJ1aWxkU3ViZmxvd0VudHJ5KGV2ZW50LCAnZW50cnknKTtcbiAgICBpZiAoZW50cnkpIHRoaXMuc3RvcmUucHVzaChlbnRyeSk7XG4gIH1cblxuICBvblN1YmZsb3dFeGl0KGV2ZW50OiBGbG93U3ViZmxvd0V2ZW50KTogdm9pZCB7XG4gICAgY29uc3QgZW50cnkgPSBidWlsZFN1YmZsb3dFbnRyeShldmVudCwgJ2V4aXQnKTtcbiAgICBpZiAoZW50cnkpIHRoaXMuc3RvcmUucHVzaChlbnRyeSk7XG4gIH1cblxuICAvLyDilIDilIAgUXVlcnkgQVBJIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4gIC8qKiBBbGwgZW50cmllcyBpbiBleGVjdXRpb24gb3JkZXIgKGVudHJ5K2V4aXQgaW50ZXJsZWF2ZWQpLiAqL1xuICBnZXRCb3VuZGFyaWVzKCk6IEluT3V0RW50cnlbXSB7XG4gICAgcmV0dXJuIHRoaXMuc3RvcmUuZ2V0QWxsKCk7XG4gIH1cblxuICAvKiogRW50cnkvZXhpdCBwYWlyIGZvciBvbmUgY2hhcnQgZXhlY3V0aW9uLlxuICAgKiAgUmV0dXJucyBgeyBlbnRyeSwgZXhpdCB9YCDigJQgYGV4aXRgIGlzIGB1bmRlZmluZWRgIGZvciBpbi1wcm9ncmVzcyAvIHBhdXNlZFxuICAgKiAgY2hhcnRzIG9yIGlmIGBydW50aW1lU3RhZ2VJZGAgaXMgdW5rbm93bi4gKi9cbiAgZ2V0Qm91bmRhcnkocnVudGltZVN0YWdlSWQ6IHN0cmluZyk6IHsgZW50cnk/OiBJbk91dEVudHJ5OyBleGl0PzogSW5PdXRFbnRyeSB9IHtcbiAgICBjb25zdCBlbnRyaWVzID0gdGhpcy5zdG9yZS5nZXRCeUtleShydW50aW1lU3RhZ2VJZCk7XG4gICAgcmV0dXJuIHtcbiAgICAgIGVudHJ5OiBlbnRyaWVzLmZpbmQoKGUpID0+IGUucGhhc2UgPT09ICdlbnRyeScpLFxuICAgICAgZXhpdDogZW50cmllcy5maW5kKChlKSA9PiBlLnBoYXNlID09PSAnZXhpdCcpLFxuICAgIH07XG4gIH1cblxuICAvKiogSnVzdCB0aGUgYGVudHJ5YC1waGFzZSBib3VuZGFyaWVzIOKAlCB0aGUgXCJzdGVwIGxpc3RcIiBwcm9qZWN0aW9uIGluXG4gICAqICBleGVjdXRpb24gb3JkZXIuIFRoaXMgaXMgdGhlIG5hdHVyYWwgdGltZWxpbmUgb2YgY2hhcnQgZXhlY3V0aW9uc1xuICAgKiAgZm9yIHNsaWRlciAvIHNjcnViYmluZyBVSXMuIFRoZSB0b3AtbGV2ZWwgcnVuJ3MgZW50cnkgaXMgdGhlIGZpcnN0XG4gICAqICBzdGVwIChkZXB0aCAwKS4gKi9cbiAgZ2V0U3RlcHMoKTogSW5PdXRFbnRyeVtdIHtcbiAgICBjb25zdCBzdGVwczogSW5PdXRFbnRyeVtdID0gW107XG4gICAgZm9yIChjb25zdCBiIG9mIHRoaXMuc3RvcmUuZ2V0QWxsKCkpIHtcbiAgICAgIGlmIChiLnBoYXNlID09PSAnZW50cnknKSBzdGVwcy5wdXNoKGIpO1xuICAgIH1cbiAgICByZXR1cm4gc3RlcHM7XG4gIH1cblxuICAvKiogTygxKSBsb29rdXA6IGFsbCBib3VuZGFyeSBlbnRyaWVzIChib3RoIHBoYXNlcykgZm9yIG9uZSBydW50aW1lU3RhZ2VJZC4gKi9cbiAgZ2V0RW50cmllc0ZvclN0ZXAocnVudGltZVN0YWdlSWQ6IHN0cmluZyk6IEluT3V0RW50cnlbXSB7XG4gICAgcmV0dXJuIHRoaXMuc3RvcmUuZ2V0QnlLZXkocnVudGltZVN0YWdlSWQpO1xuICB9XG5cbiAgLyoqIFByZS1idWlsdCBwZXItc3RlcCByYW5nZSBpbmRleCDigJQgTygxKSBsb29rdXBzIGZvciB0aW1lLXRyYXZlbCBzY3J1YmJpbmcuICovXG4gIGdldEVudHJ5UmFuZ2VzKCk6IFJlYWRvbmx5TWFwPHN0cmluZywgeyByZWFkb25seSBmaXJzdElkeDogbnVtYmVyOyByZWFkb25seSBlbmRJZHg6IG51bWJlciB9PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RvcmUuZ2V0RW50cnlSYW5nZXMoKTtcbiAgfVxuXG4gIC8qKiBQcm9ncmVzc2l2ZSByZXZlYWw6IGJvdW5kYXJpZXMgd2hvc2UgcnVudGltZVN0YWdlSWQgaXMgaW4gdGhlIHZpc2libGUgc2V0LiAqL1xuICBnZXRFbnRyaWVzVXBUbyh2aXNpYmxlSWRzOiBSZWFkb25seVNldDxzdHJpbmc+KTogSW5PdXRFbnRyeVtdIHtcbiAgICByZXR1cm4gdGhpcy5zdG9yZS5nZXRFbnRyaWVzVXBUbyh2aXNpYmxlSWRzKTtcbiAgfVxuXG4gIC8qKiBDbGVhciBhbGwgc3RvcmVkIGJvdW5kYXJpZXMg4oCUIGNhbGxlZCBieSB0aGUgZXhlY3V0b3IgYmVmb3JlIGVhY2ggcnVuKCkuICovXG4gIGNsZWFyKCk6IHZvaWQge1xuICAgIHRoaXMuc3RvcmUuY2xlYXIoKTtcbiAgfVxuXG4gIC8qKiBUaGUgcm9vdCBydW4ncyBlbnRyeS9leGl0IHBhaXIsIGlmIHRoZSBydW4gaGFzIHN0YXJ0ZWQuXG4gICAqICBDb252ZW5pZW5jZSBmb3IgY29uc3VtZXJzIHRoYXQgd2FudCB0byBicmFja2V0IHRoZSB0aW1lbGluZSBieSB0aGVcbiAgICogIG91dGVybW9zdCBpbi9vdXQuICovXG4gIGdldFJvb3RCb3VuZGFyeSgpOiB7IGVudHJ5PzogSW5PdXRFbnRyeTsgZXhpdD86IEluT3V0RW50cnkgfSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0Qm91bmRhcnkoUk9PVF9SVU5USU1FX1NUQUdFX0lEKTtcbiAgfVxuXG4gIC8qKiBTbmFwc2hvdCBidW5kbGUgZm9yIGluY2x1c2lvbiBpbiBgZXhlY3V0b3IuZ2V0U25hcHNob3QoKWAuICovXG4gIHRvU25hcHNob3QoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG5hbWU6ICdJbk91dCcsXG4gICAgICBkZXNjcmlwdGlvbjogJ0NoYXJ0IGluL291dCBzdHJlYW0g4oCUIGVudHJ5L2V4aXQgcGFpcnMgYXQgZXZlcnkgY2hhcnQgYm91bmRhcnkgKHJvb3QgKyBzdWJmbG93cyknLFxuICAgICAgcHJlZmVycmVkT3BlcmF0aW9uOiAndHJhbnNsYXRlJyBhcyBjb25zdCxcbiAgICAgIGRhdGE6IHRoaXMuZ2V0Qm91bmRhcmllcygpLFxuICAgIH07XG4gIH1cbn1cblxuLy8g4pSA4pSAIEludGVybmFsIGhlbHBlcnMg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbi8qKlxuICogQnVpbGQgdGhlIHN5bnRoZXRpYyByb290IGVudHJ5L2V4aXQuIERlcHRoIGlzIGAwYCBhbmQgdGhlIHBhdGggaXNcbiAqIGBbUk9PVF9TVUJGTE9XX0lEXWAgc28gY29uc3VtZXJzIGdyb3VwaW5nIGJ5IHBhdGggc2VlIHRoZSByb290IGFzIGFcbiAqIHJlZ3VsYXIgdG9wLWxldmVsIGNvbnRhaW5lci5cbiAqL1xuZnVuY3Rpb24gYnVpbGRSb290RW50cnkocGhhc2U6IEluT3V0UGhhc2UsIHBheWxvYWQ6IHVua25vd24pOiBJbk91dEVudHJ5IHtcbiAgcmV0dXJuIHtcbiAgICBydW50aW1lU3RhZ2VJZDogUk9PVF9SVU5USU1FX1NUQUdFX0lELFxuICAgIHN1YmZsb3dJZDogUk9PVF9TVUJGTE9XX0lELFxuICAgIGxvY2FsU3ViZmxvd0lkOiBST09UX1NVQkZMT1dfSUQsXG4gICAgc3ViZmxvd05hbWU6ICdSdW4nLFxuICAgIHN1YmZsb3dQYXRoOiBbUk9PVF9TVUJGTE9XX0lEXSxcbiAgICBkZXB0aDogMCxcbiAgICBwaGFzZSxcbiAgICBwYXlsb2FkLFxuICAgIGlzUm9vdDogdHJ1ZSxcbiAgfTtcbn1cblxuLyoqXG4gKiBCdWlsZCBhIHN1YmZsb3cgYEluT3V0RW50cnlgIGZyb20gYSBgRmxvd1N1YmZsb3dFdmVudGAuXG4gKlxuICogUmV0dXJucyBgdW5kZWZpbmVkYCB3aGVuIHRoZSBldmVudCBsYWNrcyBhIGBzdWJmbG93SWRgIChhbm9ueW1vdXMgL1xuICogbWFsZm9ybWVkIHN1YmZsb3cgZXZlbnRzIOKAlCBzYW1lIGRlZmVuc2l2ZSBwb2xpY3kgYXMgYFRvcG9sb2d5UmVjb3JkZXJgKS5cbiAqXG4gKiBQYXRoIGRlcml2YXRpb246IHRoZSBlbmdpbmUgZW1pdHMgYHN1YmZsb3dJZGAgYWxyZWFkeSBwcmVmaXhlZCB3aXRoIHRoZVxuICogZnVsbCBwYXRoIG9mIHBhcmVudCBzdWJmbG93cyAoZS5nLiBgJ3NmLW91dGVyL3NmLWlubmVyJ2ApLiBXZSBkZWNvbXBvc2VcbiAqIHRoYXQgaW50byBzZWdtZW50cyB0byBwb3B1bGF0ZSBgc3ViZmxvd1BhdGhgIGFuZCBjb21wdXRlIGBkZXB0aGAuXG4gKlxuICogU3ViZmxvd3MgbmVzdCBVTkRFUiB0aGUgc3ludGhldGljIHJvb3QgaW4gYHN1YmZsb3dQYXRoYCBzbyB0aGUgdHJlZSBpc1xuICogY29tcGxldGU6IGEgdG9wLWxldmVsIHN1YmZsb3cgaGFzIHBhdGggYFsnX19yb290X18nLCAnc2YteCddYCBhbmQgZGVwdGggMS5cbiAqL1xuZnVuY3Rpb24gYnVpbGRTdWJmbG93RW50cnkoZXZlbnQ6IEZsb3dTdWJmbG93RXZlbnQsIHBoYXNlOiBJbk91dFBoYXNlKTogSW5PdXRFbnRyeSB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IHN1YmZsb3dJZCA9IGV2ZW50LnN1YmZsb3dJZDtcbiAgaWYgKCFzdWJmbG93SWQpIHJldHVybiB1bmRlZmluZWQ7XG5cbiAgY29uc3QgcnVudGltZVN0YWdlSWQgPSBldmVudC50cmF2ZXJzYWxDb250ZXh0Py5ydW50aW1lU3RhZ2VJZCA/PyAnJztcbiAgY29uc3Qgc2VnbWVudHMgPSBwYXRoU2VnbWVudHMoc3ViZmxvd0lkKTtcbiAgY29uc3Qgc3ViZmxvd1BhdGg6IHJlYWRvbmx5IHN0cmluZ1tdID0gW1JPT1RfU1VCRkxPV19JRCwgLi4uc2VnbWVudHNdO1xuICBjb25zdCBkZXB0aCA9IHN1YmZsb3dQYXRoLmxlbmd0aCAtIDE7XG4gIGNvbnN0IGxvY2FsU3ViZmxvd0lkID0gc2VnbWVudHNbc2VnbWVudHMubGVuZ3RoIC0gMV0gPz8gc3ViZmxvd0lkO1xuICBjb25zdCBwYXlsb2FkID0gcGhhc2UgPT09ICdlbnRyeScgPyBldmVudC5tYXBwZWRJbnB1dCA6IGV2ZW50Lm91dHB1dFN0YXRlO1xuXG4gIHJldHVybiB7XG4gICAgcnVudGltZVN0YWdlSWQsXG4gICAgc3ViZmxvd0lkLFxuICAgIGxvY2FsU3ViZmxvd0lkLFxuICAgIHN1YmZsb3dOYW1lOiBldmVudC5uYW1lLFxuICAgIGRlc2NyaXB0aW9uOiBldmVudC5kZXNjcmlwdGlvbixcbiAgICBzdWJmbG93UGF0aCxcbiAgICBkZXB0aCxcbiAgICBwaGFzZSxcbiAgICBwYXlsb2FkLFxuICAgIGlzUm9vdDogZmFsc2UsXG4gIH07XG59XG4iXX0=
230
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSW5PdXRSZWNvcmRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvcmVjb3JkZXIvSW5PdXRSZWNvcmRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FnRUc7OztBQUVILHlDQUEyRDtBQUczRCx5REFBbUQ7QUFNbkQsMERBQTBEO0FBQzdDLFFBQUEsZUFBZSxHQUFHLFVBQVUsQ0FBQztBQUUxQyxvRUFBb0U7QUFDdkQsUUFBQSxxQkFBcUIsR0FBRyxZQUFZLENBQUM7QUFtRGxELElBQUksUUFBUSxHQUFHLENBQUMsQ0FBQztBQUVqQjs7R0FFRztBQUNILFNBQWdCLGFBQWEsQ0FBQyxVQUFnQyxFQUFFO0lBQzlELE9BQU8sSUFBSSxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDcEMsQ0FBQztBQUZELHNDQUVDO0FBRUQ7Ozs7Ozs7R0FPRztBQUNILE1BQWEsYUFBYTtJQUNmLEVBQUUsQ0FBUztJQUNwQix5RUFBeUU7SUFDeEQsS0FBSyxHQUFHLElBQUksZ0NBQWEsRUFBYyxDQUFDO0lBRXpELFlBQVksVUFBZ0MsRUFBRTtRQUM1QyxJQUFJLENBQUMsRUFBRSxHQUFHLE9BQU8sQ0FBQyxFQUFFLElBQUksU0FBUyxFQUFFLFFBQVEsRUFBRSxDQUFDO0lBQ2hELENBQUM7SUFFRCx5RUFBeUU7SUFFekUsVUFBVSxDQUFDLEtBQW1CO1FBQzVCLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7SUFDMUQsQ0FBQztJQUVELFFBQVEsQ0FBQyxLQUFtQjtRQUMxQixJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxD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UUFDUixLQUFLO1FBQ0wsT0FBTztRQUNQLE1BQU0sRUFBRSxJQUFJO0tBQ2IsQ0FBQztBQUNKLENBQUM7QUFFRDs7Ozs7Ozs7Ozs7O0dBWUc7QUFDSCxTQUFTLGlCQUFpQixDQUFDLEtBQXVCLEVBQUUsS0FBaUI7SUFDbkUsTUFBTSxTQUFTLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQztJQUNsQyxJQUFJLENBQUMsU0FBUztRQUFFLE9BQU8sU0FBUyxDQUFDO0lBRWpDLE1BQU0sY0FBYyxHQUFHLEtBQUssQ0FBQyxnQkFBZ0IsRUFBRSxjQUFjLElBQUksRUFBRSxDQUFDO0lBQ3BFLE1BQU0sUUFBUSxHQUFHLElBQUEsMEJBQVksRUFBQyxTQUFTLENBQUMsQ0FBQztJQUN6QyxNQUFNLFdBQVcsR0FBc0IsQ0FBQyx1QkFBZSxFQUFFLEdBQUcsUUFBUSxDQUFDLENBQUM7SUFDdEUsTUFBTSxLQUFLLEdBQUcsV0FBVyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7SUFDckMsTUFBTSxjQUFjLEdBQUcsUUFBUSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLElBQUksU0FBUyxDQUFDO0lBQ2xFLE1BQU0sT0FBTyxHQUFHLEtBQUssS0FBSyxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUM7SUFFMUUsT0FBTztRQUNMLGNBQWM7UUFDZCxTQUFTO1FBQ1QsY0FBYztRQUNkLFdBQVcsRUFBRSxLQUFLLENBQUMsSUFBSTtRQUN2QixXQUFXLEVBQUUsS0FBSyxDQUFDLFdBQVc7UUFDOUIsV0FBVztRQUNYLEtBQUs7UUFDTCxLQUFLO1FBQ0wsT0FBTztRQUNQLE1BQU0sRUFBRSxLQUFLO0tBQ2QsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEluT3V0UmVjb3JkZXIg4oCUIGNhcHR1cmVzIGV2ZXJ5IGNoYXJ0J3MgaW5wdXQvb3V0cHV0IGFzIGVudHJ5L2V4aXQgcGFpcnMuXG4gKlxuICogVGhlIGdhcCB0aGlzIGZpbGxzOlxuICogICBFdmVyeSBjaGFydCBpbiBmb290cHJpbnRqcyBoYXMgdHdvIG5hdHVyYWwgZGF0YSBib3VuZGFyaWVzOlxuICogICAgIC0gdGhlICoqaW5wdXQqKiB0aGF0IGZsb3dlZCBpbiAodG9wLWxldmVsOiBgcnVuKHtpbnB1dH0pYDtcbiAqICAgICAgIHN1YmZsb3c6IGBpbnB1dE1hcHBlcmAgcmVzdWx0KVxuICogICAgIC0gdGhlICoqb3V0cHV0KiogdGhhdCBmbG93ZWQgb3V0ICh0b3AtbGV2ZWw6IGNoYXJ0IHJldHVybiB2YWx1ZTtcbiAqICAgICAgIHN1YmZsb3c6IHNoYXJlZCBzdGF0ZSBhdCBleGl0IC8gYG91dHB1dE1hcHBlcmAgcmVzdWx0KVxuICpcbiAqICAgVG9nZXRoZXIgd2l0aCBgVG9wb2xvZ3lSZWNvcmRlcmAgKGNvbXBvc2l0aW9uIHNoYXBlKSB0aGlzIGlzIHRoZVxuICogICB1bml2ZXJzYWwgXCJzdGVwXCIgcHJpbWl0aXZlIHRoYXQgZG93bnN0cmVhbSBsYXllcnMgcHJvamVjdCDigJQgYSBMZW5zXG4gKiAgIFN0ZXBHcmFwaCwgYSBUcmFjZSB2aWV3LCBjdXN0b20gZGFzaGJvYXJkcy4gQWxsIGJpbmQgYnkgYHJ1bnRpbWVTdGFnZUlkYC5cbiAqXG4gKiAgIFRoZSByb290IGNoYXJ0IGlzIHRyZWF0ZWQgaWRlbnRpY2FsbHkgdG8gYW55IHN1YmZsb3c6IGFuIGBlbnRyeWBcbiAqICAgYm91bmRhcnkgb24gYG9uUnVuU3RhcnRgIGFuZCBhbiBgZXhpdGAgYm91bmRhcnkgb24gYG9uUnVuRW5kYCwgd2l0aFxuICogICBgc3ViZmxvd0lkOiAnX19yb290X18nYC4gU28gY29uc3VtZXJzIGJ1aWxkaW5nIFwiZXZlcnkgc3RlcCBoYXMgYW5cbiAqICAgaW4vb3V0IGFycm93XCIgdmlld3MgY2FuIGNsb3NlIHRoZSBjaGFpbiBhdCB0aGUgdG9wIGxldmVsIOKAlCBub1xuICogICBzcGVjaWFsLWNhc2UgcmVuZGVyaW5nIHJlcXVpcmVkLlxuICpcbiAqIFR3byBib3VuZGFyeSBwaGFzZXMgcGVyIGNoYXJ0IGV4ZWN1dGlvbjpcbiAqICAgMS4gYHBoYXNlOiAnZW50cnknYCDigJQgcGF5bG9hZCA9IHRoZSBpbnB1dCBjcm9zc2luZyB0aGUgYm91bmRhcnkgSU5cbiAqICAgMi4gYHBoYXNlOiAnZXhpdCdgICDigJQgcGF5bG9hZCA9IHRoZSBvdXRwdXQgY3Jvc3NpbmcgdGhlIGJvdW5kYXJ5IE9VVFxuICpcbiAqICAgTG9vcHMgcmUtZW50ZXJpbmcgdGhlIHNhbWUgc3ViZmxvdyBnZXQgZGlzdGluY3QgYHJ1bnRpbWVTdGFnZUlkYHNcbiAqICAgYXV0b21hdGljYWxseSAocGFyZW50IHN0YWdlJ3MgZXhlY3V0aW9uSW5kZXggaW5jcmVtZW50cyBwZXIgaXRlcmF0aW9uKS5cbiAqXG4gKiBQYXVzZSBzZW1hbnRpY3M6XG4gKiAgIFdoZW4gYSBzdGFnZSBwYXVzZXMgaW5zaWRlIGEgc3ViZmxvdywgdGhlIGVuZ2luZSByZS10aHJvd3MgdGhlIHBhdXNlXG4gKiAgIHNpZ25hbCB3aXRob3V0IGZpcmluZyBgb25TdWJmbG93RXhpdGAgKG9yIGBvblJ1bkVuZGApLiBUaGUgc3ViZmxvd1xuICogICBoYXMgYW4gYGVudHJ5YCB3aXRoIG5vIG1hdGNoaW5nIGBleGl0YCB1bnRpbCB0aGUgcnVuIHJlc3VtZXMgYW5kXG4gKiAgIGV4aXRzIGNsZWFubHkuIENvbnN1bWVycyBzaG91bGQgaGFuZGxlIGVudHJ5LXdpdGhvdXQtZXhpdCBncmFjZWZ1bGx5XG4gKiAgIChpdCBtZWFucyBcImluIHByb2dyZXNzXCIgb3IgXCJwYXVzZWRcIikuIFRoZSBgZ2V0Qm91bmRhcnkoKWAgaGVscGVyXG4gKiAgIHJldHVybnMgYHsgZW50cnksIGV4aXQ6IHVuZGVmaW5lZCB9YCBpbiB0aGF0IGNhc2UuXG4gKlxuICogUmVkYWN0aW9uOlxuICogICBQYXlsb2FkIHJlZGFjdGlvbiBpcyB0aGUgZW5naW5lJ3MgcmVzcG9uc2liaWxpdHkgKGBSZWRhY3Rpb25Qb2xpY3lgKS5cbiAqICAgQnkgdGhlIHRpbWUgcGF5bG9hZHMgcmVhY2ggdGhpcyByZWNvcmRlciB2aWEgYEZsb3dTdWJmbG93RXZlbnRgIG9yXG4gKiAgIGBGbG93UnVuRXZlbnRgLCBuYW1lZCB2YWx1ZXMgaGF2ZSBwYXNzZWQgdGhlIHJ1bidzIHJ1bGUuIFJvb3QgcnVuXG4gKiAgIHBheWxvYWRzIGFyZSB3YWxrZWQgYXQgZXZlcnkgZGVwdGggKGEgbmVzdGVkIGtleSBieSBpdHMgb3duIG5hbWUgb3JcbiAqICAgZG90dGVkIHBhdGgpIHBsdXMgZXhwbGljaXQgbmVzdGVkIGZpZWxkczsgc2NhbGFycyBwYXNzIHRocm91Z2gsIGFuZCBmb3JrXG4gKiAgIGNoaWxkLUlEIGVudmVsb3BlcyBuZWVkIGV4cGxpY2l0IHJlc3VsdCBwYXRocy4gVGhpcyBpcyBub3QgY29udGVudCBzY2FubmluZy4gVGhlIHJlY29yZGVyXG4gKiAgIGRvZXMgbm90IChhbmQgc2hvdWxkIG5vdCkgcmUtcmVkYWN0IG9yIHJlY29uc3RydWN0IHRoZSBydW4uXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGltcG9ydCB7IGluT3V0UmVjb3JkZXIgfSBmcm9tICdmb290cHJpbnRqcy90cmFjZSc7XG4gKlxuICogY29uc3QgaW5PdXQgPSBpbk91dFJlY29yZGVyKCk7XG4gKiBleGVjdXRvci5hdHRhY2hDb21iaW5lZFJlY29yZGVyKGluT3V0KTtcbiAqIGF3YWl0IGV4ZWN1dG9yLnJ1bih7IGlucHV0IH0pO1xuICpcbiAqIGluT3V0LmdldFN0ZXBzKCk7ICAgICAgICAgICAgICAgICAgICAvLyBlbnRyeSBib3VuZGFyaWVzIOKAlCB0aW1lbGluZSBwcm9qZWN0aW9uXG4gKiBpbk91dC5nZXRCb3VuZGFyeShydW50aW1lU3RhZ2VJZCk7ICAgLy8geyBlbnRyeSwgZXhpdCB9IHBhaXIgZm9yIG9uZSBleGVjdXRpb25cbiAqIGluT3V0LmdldEJvdW5kYXJpZXMoKTsgICAgICAgICAgICAgICAvLyBmbGF0IGxpc3QgKGVudHJ5K2V4aXQgaW50ZXJsZWF2ZWQpXG4gKiBpbk91dC5nZXRSb290Qm91bmRhcnkoKTsgICAgICAgICAgICAgLy8geyBlbnRyeSwgZXhpdCB9IGZvciB0aGUgdG9wLWxldmVsIHJ1blxuICogYGBgXG4gKlxuICogQGV4YW1wbGUgRmlsdGVyaW5nIGJ5IHN1YmZsb3cgcGF0aFxuICogYGBgdHlwZXNjcmlwdFxuICogY29uc3QgYWdlbnRTdGVwcyA9IGluT3V0XG4gKiAgIC5nZXRTdGVwcygpXG4gKiAgIC5maWx0ZXIoKGIpID0+IGIuc3ViZmxvd1BhdGhbMV0gPT09ICdzZi1hZ2VudCcpOyAgLy8gcGF0aFswXSBpcyB0aGUgcm9vdFxuICogYGBgXG4gKi9cblxuaW1wb3J0IHsgaWRQYXRoU2VnbWVudHMgYXMgcGF0aFNlZ21lbnRzIH0gZnJvbSAnZm9vdHRyYWNlJztcblxuaW1wb3J0IHR5cGUgeyBGbG93UmVjb3JkZXIsIEZsb3dSdW5FdmVudCwgRmxvd1N1YmZsb3dFdmVudCB9IGZyb20gJy4uL2VuZ2luZS9uYXJyYXRpdmUvdHlwZXMuanMnO1xuaW1wb3J0IHsgU2VxdWVuY2VTdG9yZSB9IGZyb20gJy4vU2VxdWVuY2VTdG9yZS5qcyc7XG5cbi8vIOKUgOKUgCBUeXBlcyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuZXhwb3J0IHR5cGUgSW5PdXRQaGFzZSA9ICdlbnRyeScgfCAnZXhpdCc7XG5cbi8qKiBTeW50aGV0aWMgaWQgZm9yIHRoZSB0b3AtbGV2ZWwgcnVuJ3MgYm91bmRhcnkgcGFpci4gKi9cbmV4cG9ydCBjb25zdCBST09UX1NVQkZMT1dfSUQgPSAnX19yb290X18nO1xuXG4vKiogU3ludGhldGljIHJ1bnRpbWVTdGFnZUlkIGZvciB0aGUgdG9wLWxldmVsIHJ1biBib3VuZGFyeSBwYWlyLiAqL1xuZXhwb3J0IGNvbnN0IFJPT1RfUlVOVElNRV9TVEFHRV9JRCA9ICdfX3Jvb3RfXyMwJztcblxuLyoqXG4gKiBPbmUgaGFsZiBvZiBhIGNoYXJ0IGV4ZWN1dGlvbiBib3VuZGFyeS4gRW50cnkvZXhpdCBwYWlycyBzaGFyZSBgcnVudGltZVN0YWdlSWRgLlxuICpcbiAqIE5hbWluZyBmb2xsb3dzIHRoZSBlbmdpbmU6IGBzdWJmbG93SWRgIGlzIHRoZSBwYXRoLXByZWZpeGVkIGlkZW50aWZpZXIgdGhlXG4gKiBlbmdpbmUgZW1pdHMgKGUuZy4gYCdzZi1vdXRlci9zZi1pbm5lcidgIGZvciBuZXN0ZWQgc3ViZmxvd3MpLiBGb3IgdGhlXG4gKiB0b3AtbGV2ZWwgcnVuLCBpdCdzIHRoZSBzeW50aGV0aWMgYCdfX3Jvb3RfXydgLiBgc3ViZmxvd1BhdGhgIGlzIHRoZVxuICogZGVjb21wb3NpdGlvbiBpbnRvIHNlZ21lbnRzIOKAlCBwcm92aWRlZCBhcyBhIGNvbnZlbmllbmNlIGJlY2F1c2UgY29uc3VtZXJzXG4gKiBvZnRlbiBxdWVyeSAvIGdyb3VwIGJ5IHRoZSBwYXRoIHRyZWUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSW5PdXRFbnRyeSB7XG4gIC8qKiBydW50aW1lU3RhZ2VJZCDigJQgc2FtZSB2YWx1ZSBmb3IgdGhlIGVudHJ5L2V4aXQgcGFpciBvZiBvbmUgZXhlY3V0aW9uLlxuICAgKiAgVG9wLWxldmVsIHJ1biB1c2VzIHRoZSBzeW50aGV0aWMgYFJPT1RfUlVOVElNRV9TVEFHRV9JRGAuICovXG4gIHJlYWRvbmx5IHJ1bnRpbWVTdGFnZUlkOiBzdHJpbmc7XG4gIC8qKiBQYXRoLXByZWZpeGVkIHN1YmZsb3cgaWRlbnRpZmllciAobWF0Y2hlcyB0aGUgZW5naW5lJ3MgYEZsb3dTdWJmbG93RXZlbnQuc3ViZmxvd0lkYCkuXG4gICAqICBUb3AtbGV2ZWwg4oaSIGAnX19yb290X18nYC4gU3ViZmxvdyDihpIgYCdzZi1vdXRlcidgIG9yIGAnc2Ytb3V0ZXIvc2YtaW5uZXInYC4gKi9cbiAgcmVhZG9ubHkgc3ViZmxvd0lkOiBzdHJpbmc7XG4gIC8qKiBMYXN0IHNlZ21lbnQgb2YgYHN1YmZsb3dJZGAg4oCUIGNvbnZlbmllbmNlIGZvciBjb25zdW1lcnMgdGhhdCBncm91cCBieSBsZWFmIG5hbWUuXG4gICAqICBUb3AtbGV2ZWwg4oaSIGAnX19yb290X18nYC4gKi9cbiAgcmVhZG9ubHkgbG9jYWxTdWJmbG93SWQ6IHN0cmluZztcbiAgLyoqIEh1bWFuLXJlYWRhYmxlIGRpc3BsYXkgbmFtZSAoZnJvbSB0aGUgYnVpbGRlcjsgYCdSdW4nYCBmb3IgdGhlIHRvcC1sZXZlbCBydW4pLiAqL1xuICByZWFkb25seSBzdWJmbG93TmFtZTogc3RyaW5nO1xuICAvKiogQnVpbGQtdGltZSBkZXNjcmlwdGlvbiBmcm9tIHRoZSBzdWJmbG93J3Mgcm9vdCBzdGFnZS5cbiAgICogIENhcnJpZXMgdGF4b25vbXkgbWFya2VycyAoZS5nLiBgJ0FnZW50OiBSZUFjdCBsb29wJ2ApLiBVbmRlZmluZWQgZm9yIHJvb3QuICovXG4gIHJlYWRvbmx5IGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICAvKiogRGVjb21wb3NpdGlvbiBvZiBgc3ViZmxvd0lkYCBpbnRvIHNlZ21lbnRzLiBUb3AtbGV2ZWwg4oaSIGBbJ19fcm9vdF9fJ11gLlxuICAgKiAgU3ViZmxvd3MgbGl2ZSBVTkRFUiB0aGUgcm9vdDogYSB0b3AtbGV2ZWwgc3ViZmxvdyBoYXMgcGF0aCBgWydfX3Jvb3RfXycsICdzZi14J11gLiAqL1xuICByZWFkb25seSBzdWJmbG93UGF0aDogcmVhZG9ubHkgc3RyaW5nW107XG4gIC8qKiBEZXB0aCBpbiB0aGUgc3ViZmxvdyB0cmVlLiBSb290IOKGkiAwLiBGaXJzdC1sZXZlbCBzdWJmbG93IOKGkiAxLiAqL1xuICByZWFkb25seSBkZXB0aDogbnVtYmVyO1xuICAvKiogV2hpY2ggc2lkZSBvZiB0aGUgYm91bmRhcnkgdGhpcyBlbnRyeSByZXByZXNlbnRzLiAqL1xuICByZWFkb25seSBwaGFzZTogSW5PdXRQaGFzZTtcbiAgLyoqIERhdGEgY3Jvc3NpbmcgdGhlIGJvdW5kYXJ5LlxuICAgKiAgLSBgcGhhc2U6ICdlbnRyeSdgIOKGkiBgaW5wdXRNYXBwZXJgIHJlc3VsdCAoc3ViZmxvdykgb3IgYHJ1bih7aW5wdXR9KWAgKHJvb3QpXG4gICAqICAtIGBwaGFzZTogJ2V4aXQnYCAg4oaSIHN1YmZsb3cgc2hhcmVkIHN0YXRlIGF0IGV4aXQgKHN1YmZsb3cpIG9yIGNoYXJ0IHJldHVybiB2YWx1ZSAocm9vdClcbiAgICpcbiAgICogIFVuZGVmaW5lZCB3aGVuIG5vIG1hcHBlciAvIG5vIGlucHV0IHdhcyBwcm92aWRlZC4gKi9cbiAgcmVhZG9ubHkgcGF5bG9hZD86IHVua25vd247XG4gIC8qKiBUcnVlIHdoZW4gdGhpcyBlbnRyeSBjYW1lIGZyb20gdGhlIHRvcC1sZXZlbCBydW4gKGBvblJ1blN0YXJ0YCAvIGBvblJ1bkVuZGApXG4gICAqICByYXRoZXIgdGhhbiBmcm9tIGEgc3ViZmxvdyAoYG9uU3ViZmxvd0VudHJ5YCAvIGBvblN1YmZsb3dFeGl0YCkuXG4gICAqICBMZW5zIHVzZXMgdGhpcyB0byByZW5kZXIgdGhlIHJvb3QgcGFpciBhcyBgdXNlciDihpIgcnVuIOKGkiB1c2VyYCBpbnN0ZWFkIG9mXG4gICAqICB0aGUgcmVndWxhciBzdWJmbG93IHNoYXBlLiAqL1xuICByZWFkb25seSBpc1Jvb3Q6IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSW5PdXRSZWNvcmRlck9wdGlvbnMge1xuICAvKiogU2NvcGVSZWNvcmRlciBpZC4gRGVmYXVsdHMgdG8gYGlub3V0LU5gIChhdXRvLWluY3JlbWVudGVkKS4gKi9cbiAgaWQ/OiBzdHJpbmc7XG59XG5cbmxldCBfY291bnRlciA9IDA7XG5cbi8qKlxuICogRmFjdG9yeSDigJQgbWF0Y2hlcyB0aGUgYHRvcG9sb2d5UmVjb3JkZXIoKWAgLyBgbmFycmF0aXZlKClgIHN0eWxlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaW5PdXRSZWNvcmRlcihvcHRpb25zOiBJbk91dFJlY29yZGVyT3B0aW9ucyA9IHt9KTogSW5PdXRSZWNvcmRlciB7XG4gIHJldHVybiBuZXcgSW5PdXRSZWNvcmRlcihvcHRpb25zKTtcbn1cblxuLyoqXG4gKiBTdGF0ZWZ1bCBhY2N1bXVsYXRvciB0aGF0IHdhdGNoZXMgYEZsb3dSZWNvcmRlcmAgY2hhcnQtYm91bmRhcnkgZXZlbnRzXG4gKiAocnVuIHN0YXJ0L2VuZCArIHN1YmZsb3cgZW50cnkvZXhpdCkgYW5kIHB1c2hlcyBgSW5PdXRFbnRyeWAgcmVjb3JkcyB0b1xuICogaXRzIGNvbXBvc2VkIGBTZXF1ZW5jZVN0b3JlYCAoQ29udmVudGlvbiAxIOKAlCBvbmUgcHVycG9zZSBwZXIgcmVjb3JkZXIpLlxuICpcbiAqIEF0dGFjaCB2aWEgYGV4ZWN1dG9yLmF0dGFjaENvbWJpbmVkUmVjb3JkZXIocmVjb3JkZXIpYCDigJQgZm9vdHByaW50anNcbiAqIGRldGVjdHMgdGhlIGBGbG93UmVjb3JkZXJgIG1ldGhvZCBzaGFwZSBhbmQgcm91dGVzIGV2ZW50cy5cbiAqL1xuZXhwb3J0IGNsYXNzIEluT3V0UmVjb3JkZXIgaW1wbGVtZW50cyBGbG93UmVjb3JkZXIge1xuICByZWFkb25seSBpZDogc3RyaW5nO1xuICAvKiogMTpOIG9yZGVyZWQgc3RvcmFnZSB3aXRoIHBlci1zdGVwIGluZGV4IChDb252ZW50aW9uIDEg4oCUIGNvbXBvc2VkKS4gKi9cbiAgcHJpdmF0ZSByZWFkb25seSBzdG9yZSA9IG5ldyBTZXF1ZW5jZVN0b3JlPEluT3V0RW50cnk+KCk7XG5cbiAgY29uc3RydWN0b3Iob3B0aW9uczogSW5PdXRSZWNvcmRlck9wdGlvbnMgPSB7fSkge1xuICAgIHRoaXMuaWQgPSBvcHRpb25zLmlkID8/IGBpbm91dC0keysrX2NvdW50ZXJ9YDtcbiAgfVxuXG4gIC8vIOKUgOKUgCBGbG93UmVjb3JkZXIgaG9va3Mg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbiAgb25SdW5TdGFydChldmVudDogRmxvd1J1bkV2ZW50KTogdm9pZCB7XG4gICAgdGhpcy5zdG9yZS5wdXNoKGJ1aWxkUm9vdEVudHJ5KCdlbnRyeScsIGV2ZW50LnBheWxvYWQpKTtcbiAgfVxuXG4gIG9uUnVuRW5kKGV2ZW50OiBGbG93UnVuRXZlbnQpOiB2b2lkIHtcbiAgICB0aGlzLnN0b3JlLnB1c2goYnVpbGRSb290RW50cnkoJ2V4aXQnLCBldmVudC5wYXlsb2FkKSk7XG4gIH1cblxuICBvblN1YmZsb3dFbnRyeShldmVudDogRmxvd1N1YmZsb3dFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IGVudHJ5ID0gYnVpbGRTdWJmbG93RW50cnkoZXZlbnQsICdlbnRyeScpO1xuICAgIGlmIChlbnRyeSkgdGhpcy5zdG9yZS5wdXNoKGVudHJ5KTtcbiAgfVxuXG4gIG9uU3ViZmxvd0V4aXQoZXZlbnQ6IEZsb3dTdWJmbG93RXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCBlbnRyeSA9IGJ1aWxkU3ViZmxvd0VudHJ5KGV2ZW50LCAnZXhpdCcpO1xuICAgIGlmIChlbnRyeSkgdGhpcy5zdG9yZS5wdXNoKGVudHJ5KTtcbiAgfVxuXG4gIC8vIOKUgOKUgCBRdWVyeSBBUEkg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbiAgLyoqIEFsbCBlbnRyaWVzIGluIGV4ZWN1dGlvbiBvcmRlciAoZW50cnkrZXhpdCBpbnRlcmxlYXZlZCkuICovXG4gIGdldEJvdW5kYXJpZXMoKTogSW5PdXRFbnRyeVtdIHtcbiAgICByZXR1cm4gdGhpcy5zdG9yZS5nZXRBbGwoKTtcbiAgfVxuXG4gIC8qKiBFbnRyeS9leGl0IHBhaXIgZm9yIG9uZSBjaGFydCBleGVjdXRpb24uXG4gICAqICBSZXR1cm5zIGB7IGVudHJ5LCBleGl0IH1gIOKAlCBgZXhpdGAgaXMgYHVuZGVmaW5lZGAgZm9yIGluLXByb2dyZXNzIC8gcGF1c2VkXG4gICAqICBjaGFydHMgb3IgaWYgYHJ1bnRpbWVTdGFnZUlkYCBpcyB1bmtub3duLiAqL1xuICBnZXRCb3VuZGFyeShydW50aW1lU3RhZ2VJZDogc3RyaW5nKTogeyBlbnRyeT86IEluT3V0RW50cnk7IGV4aXQ/OiBJbk91dEVudHJ5IH0ge1xuICAgIGNvbnN0IGVudHJpZXMgPSB0aGlzLnN0b3JlLmdldEJ5S2V5KHJ1bnRpbWVTdGFnZUlkKTtcbiAgICByZXR1cm4ge1xuICAgICAgZW50cnk6IGVudHJpZXMuZmluZCgoZSkgPT4gZS5waGFzZSA9PT0gJ2VudHJ5JyksXG4gICAgICBleGl0OiBlbnRyaWVzLmZpbmQoKGUpID0+IGUucGhhc2UgPT09ICdleGl0JyksXG4gICAgfTtcbiAgfVxuXG4gIC8qKiBKdXN0IHRoZSBgZW50cnlgLXBoYXNlIGJvdW5kYXJpZXMg4oCUIHRoZSBcInN0ZXAgbGlzdFwiIHByb2plY3Rpb24gaW5cbiAgICogIGV4ZWN1dGlvbiBvcmRlci4gVGhpcyBpcyB0aGUgbmF0dXJhbCB0aW1lbGluZSBvZiBjaGFydCBleGVjdXRpb25zXG4gICAqICBmb3Igc2xpZGVyIC8gc2NydWJiaW5nIFVJcy4gVGhlIHRvcC1sZXZlbCBydW4ncyBlbnRyeSBpcyB0aGUgZmlyc3RcbiAgICogIHN0ZXAgKGRlcHRoIDApLiAqL1xuICBnZXRTdGVwcygpOiBJbk91dEVudHJ5W10ge1xuICAgIGNvbnN0IHN0ZXBzOiBJbk91dEVudHJ5W10gPSBbXTtcbiAgICBmb3IgKGNvbnN0IGIgb2YgdGhpcy5zdG9yZS5nZXRBbGwoKSkge1xuICAgICAgaWYgKGIucGhhc2UgPT09ICdlbnRyeScpIHN0ZXBzLnB1c2goYik7XG4gICAgfVxuICAgIHJldHVybiBzdGVwcztcbiAgfVxuXG4gIC8qKiBPKDEpIGxvb2t1cDogYWxsIGJvdW5kYXJ5IGVudHJpZXMgKGJvdGggcGhhc2VzKSBmb3Igb25lIHJ1bnRpbWVTdGFnZUlkLiAqL1xuICBnZXRFbnRyaWVzRm9yU3RlcChydW50aW1lU3RhZ2VJZDogc3RyaW5nKTogSW5PdXRFbnRyeVtdIHtcbiAgICByZXR1cm4gdGhpcy5zdG9yZS5nZXRCeUtleShydW50aW1lU3RhZ2VJZCk7XG4gIH1cblxuICAvKiogUHJlLWJ1aWx0IHBlci1zdGVwIHJhbmdlIGluZGV4IOKAlCBPKDEpIGxvb2t1cHMgZm9yIHRpbWUtdHJhdmVsIHNjcnViYmluZy4gKi9cbiAgZ2V0RW50cnlSYW5nZXMoKTogUmVhZG9ubHlNYXA8c3RyaW5nLCB7IHJlYWRvbmx5IGZpcnN0SWR4OiBudW1iZXI7IHJlYWRvbmx5IGVuZElkeDogbnVtYmVyIH0+IHtcbiAgICByZXR1cm4gdGhpcy5zdG9yZS5nZXRFbnRyeVJhbmdlcygpO1xuICB9XG5cbiAgLyoqIFByb2dyZXNzaXZlIHJldmVhbDogYm91bmRhcmllcyB3aG9zZSBydW50aW1lU3RhZ2VJZCBpcyBpbiB0aGUgdmlzaWJsZSBzZXQuICovXG4gIGdldEVudHJpZXNVcFRvKHZpc2libGVJZHM6IFJlYWRvbmx5U2V0PHN0cmluZz4pOiBJbk91dEVudHJ5W10ge1xuICAgIHJldHVybiB0aGlzLnN0b3JlLmdldEVudHJpZXNVcFRvKHZpc2libGVJZHMpO1xuICB9XG5cbiAgLyoqIENsZWFyIGFsbCBzdG9yZWQgYm91bmRhcmllcyDigJQgY2FsbGVkIGJ5IHRoZSBleGVjdXRvciBiZWZvcmUgZWFjaCBydW4oKS4gKi9cbiAgY2xlYXIoKTogdm9pZCB7XG4gICAgdGhpcy5zdG9yZS5jbGVhcigpO1xuICB9XG5cbiAgLyoqIFRoZSByb290IHJ1bidzIGVudHJ5L2V4aXQgcGFpciwgaWYgdGhlIHJ1biBoYXMgc3RhcnRlZC5cbiAgICogIENvbnZlbmllbmNlIGZvciBjb25zdW1lcnMgdGhhdCB3YW50IHRvIGJyYWNrZXQgdGhlIHRpbWVsaW5lIGJ5IHRoZVxuICAgKiAgb3V0ZXJtb3N0IGluL291dC4gKi9cbiAgZ2V0Um9vdEJvdW5kYXJ5KCk6IHsgZW50cnk/OiBJbk91dEVudHJ5OyBleGl0PzogSW5PdXRFbnRyeSB9IHtcbiAgICByZXR1cm4gdGhpcy5nZXRCb3VuZGFyeShST09UX1JVTlRJTUVfU1RBR0VfSUQpO1xuICB9XG5cbiAgLyoqIFNuYXBzaG90IGJ1bmRsZSBmb3IgaW5jbHVzaW9uIGluIGBleGVjdXRvci5nZXRTbmFwc2hvdCgpYC4gKi9cbiAgdG9TbmFwc2hvdCgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbmFtZTogJ0luT3V0JyxcbiAgICAgIGRlc2NyaXB0aW9uOiAnQ2hhcnQgaW4vb3V0IHN0cmVhbSDigJQgZW50cnkvZXhpdCBwYWlycyBhdCBldmVyeSBjaGFydCBib3VuZGFyeSAocm9vdCArIHN1YmZsb3dzKScsXG4gICAgICBwcmVmZXJyZWRPcGVyYXRpb246ICd0cmFuc2xhdGUnIGFzIGNvbnN0LFxuICAgICAgZGF0YTogdGhpcy5nZXRCb3VuZGFyaWVzKCksXG4gICAgfTtcbiAgfVxufVxuXG4vLyDilIDilIAgSW50ZXJuYWwgaGVscGVycyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuLyoqXG4gKiBCdWlsZCB0aGUgc3ludGhldGljIHJvb3QgZW50cnkvZXhpdC4gRGVwdGggaXMgYDBgIGFuZCB0aGUgcGF0aCBpc1xuICogYFtST09UX1NVQkZMT1dfSURdYCBzbyBjb25zdW1lcnMgZ3JvdXBpbmcgYnkgcGF0aCBzZWUgdGhlIHJvb3QgYXMgYVxuICogcmVndWxhciB0b3AtbGV2ZWwgY29udGFpbmVyLlxuICovXG5mdW5jdGlvbiBidWlsZFJvb3RFbnRyeShwaGFzZTogSW5PdXRQaGFzZSwgcGF5bG9hZDogdW5rbm93bik6IEluT3V0RW50cnkge1xuICByZXR1cm4ge1xuICAgIHJ1bnRpbWVTdGFnZUlkOiBST09UX1JVTlRJTUVfU1RBR0VfSUQsXG4gICAgc3ViZmxvd0lkOiBST09UX1NVQkZMT1dfSUQsXG4gICAgbG9jYWxTdWJmbG93SWQ6IFJPT1RfU1VCRkxPV19JRCxcbiAgICBzdWJmbG93TmFtZTogJ1J1bicsXG4gICAgc3ViZmxvd1BhdGg6IFtST09UX1NVQkZMT1dfSURdLFxuICAgIGRlcHRoOiAwLFxuICAgIHBoYXNlLFxuICAgIHBheWxvYWQsXG4gICAgaXNSb290OiB0cnVlLFxuICB9O1xufVxuXG4vKipcbiAqIEJ1aWxkIGEgc3ViZmxvdyBgSW5PdXRFbnRyeWAgZnJvbSBhIGBGbG93U3ViZmxvd0V2ZW50YC5cbiAqXG4gKiBSZXR1cm5zIGB1bmRlZmluZWRgIHdoZW4gdGhlIGV2ZW50IGxhY2tzIGEgYHN1YmZsb3dJZGAgKGFub255bW91cyAvXG4gKiBtYWxmb3JtZWQgc3ViZmxvdyBldmVudHMg4oCUIHNhbWUgZGVmZW5zaXZlIHBvbGljeSBhcyBgVG9wb2xvZ3lSZWNvcmRlcmApLlxuICpcbiAqIFBhdGggZGVyaXZhdGlvbjogdGhlIGVuZ2luZSBlbWl0cyBgc3ViZmxvd0lkYCBhbHJlYWR5IHByZWZpeGVkIHdpdGggdGhlXG4gKiBmdWxsIHBhdGggb2YgcGFyZW50IHN1YmZsb3dzIChlLmcuIGAnc2Ytb3V0ZXIvc2YtaW5uZXInYCkuIFdlIGRlY29tcG9zZVxuICogdGhhdCBpbnRvIHNlZ21lbnRzIHRvIHBvcHVsYXRlIGBzdWJmbG93UGF0aGAgYW5kIGNvbXB1dGUgYGRlcHRoYC5cbiAqXG4gKiBTdWJmbG93cyBuZXN0IFVOREVSIHRoZSBzeW50aGV0aWMgcm9vdCBpbiBgc3ViZmxvd1BhdGhgIHNvIHRoZSB0cmVlIGlzXG4gKiBjb21wbGV0ZTogYSB0b3AtbGV2ZWwgc3ViZmxvdyBoYXMgcGF0aCBgWydfX3Jvb3RfXycsICdzZi14J11gIGFuZCBkZXB0aCAxLlxuICovXG5mdW5jdGlvbiBidWlsZFN1YmZsb3dFbnRyeShldmVudDogRmxvd1N1YmZsb3dFdmVudCwgcGhhc2U6IEluT3V0UGhhc2UpOiBJbk91dEVudHJ5IHwgdW5kZWZpbmVkIHtcbiAgY29uc3Qgc3ViZmxvd0lkID0gZXZlbnQuc3ViZmxvd0lkO1xuICBpZiAoIXN1YmZsb3dJZCkgcmV0dXJuIHVuZGVmaW5lZDtcblxuICBjb25zdCBydW50aW1lU3RhZ2VJZCA9IGV2ZW50LnRyYXZlcnNhbENvbnRleHQ/LnJ1bnRpbWVTdGFnZUlkID8/ICcnO1xuICBjb25zdCBzZWdtZW50cyA9IHBhdGhTZWdtZW50cyhzdWJmbG93SWQpO1xuICBjb25zdCBzdWJmbG93UGF0aDogcmVhZG9ubHkgc3RyaW5nW10gPSBbUk9PVF9TVUJGTE9XX0lELCAuLi5zZWdtZW50c107XG4gIGNvbnN0IGRlcHRoID0gc3ViZmxvd1BhdGgubGVuZ3RoIC0gMTtcbiAgY29uc3QgbG9jYWxTdWJmbG93SWQgPSBzZWdtZW50c1tzZWdtZW50cy5sZW5ndGggLSAxXSA/PyBzdWJmbG93SWQ7XG4gIGNvbnN0IHBheWxvYWQgPSBwaGFzZSA9PT0gJ2VudHJ5JyA/IGV2ZW50Lm1hcHBlZElucHV0IDogZXZlbnQub3V0cHV0U3RhdGU7XG5cbiAgcmV0dXJuIHtcbiAgICBydW50aW1lU3RhZ2VJZCxcbiAgICBzdWJmbG93SWQsXG4gICAgbG9jYWxTdWJmbG93SWQsXG4gICAgc3ViZmxvd05hbWU6IGV2ZW50Lm5hbWUsXG4gICAgZGVzY3JpcHRpb246IGV2ZW50LmRlc2NyaXB0aW9uLFxuICAgIHN1YmZsb3dQYXRoLFxuICAgIGRlcHRoLFxuICAgIHBoYXNlLFxuICAgIHBheWxvYWQsXG4gICAgaXNSb290OiBmYWxzZSxcbiAgfTtcbn1cbiJdfQ==
@@ -16,7 +16,7 @@
16
16
  */
17
17
  Object.defineProperty(exports, "__esModule", { value: true });
18
18
  exports.formatQualityTrace = exports.qualityTrace = void 0;
19
- const backtrack_js_1 = require("../memory/backtrack.js");
19
+ const foottrace_1 = require("foottrace");
20
20
  /**
21
21
  * Build a quality stack trace by decorating a causal chain with scores.
22
22
  *
@@ -31,12 +31,12 @@ function qualityTrace(commitLog, qualityRecorder, startId, maxDepth = 20) {
31
31
  return { startId, startScore: -1, frames: [] };
32
32
  }
33
33
  // Use causalChain to build the DAG, providing keysRead from the QualityRecorder
34
- const root = (0, backtrack_js_1.causalChain)(commitLog, startId, (id) => qualityRecorder.getByKey(id)?.keysRead ?? [], { maxDepth });
34
+ const root = (0, foottrace_1.causalChain)(commitLog, startId, (id) => qualityRecorder.getByKey(id)?.keysRead ?? [], { maxDepth });
35
35
  if (!root) {
36
36
  return { startId, startScore: startEntry.score, frames: [] };
37
37
  }
38
38
  // Flatten DAG to BFS-ordered frames, decorate with quality scores
39
- const nodes = (0, backtrack_js_1.flattenCausalDAG)(root);
39
+ const nodes = (0, foottrace_1.flattenCausalDAG)(root);
40
40
  const frames = nodes.map((node) => {
41
41
  const entry = qualityRecorder.getByKey(node.runtimeStageId);
42
42
  return {
@@ -93,4 +93,4 @@ function formatQualityTrace(trace) {
93
93
  return lines.join('\n');
94
94
  }
95
95
  exports.formatQualityTrace = formatQualityTrace;
96
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVhbGl0eVRyYWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9yZWNvcmRlci9xdWFsaXR5VHJhY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7Ozs7Ozs7OztHQWNHOzs7QUFFSCx5REFBdUU7QUErQnZFOzs7Ozs7O0dBT0c7QUFDSCxTQUFnQixZQUFZLENBQzFCLFNBQXlCLEVBQ3pCLGVBQThCLEVBQzlCLE9BQWUsRUFDZixRQUFRLEdBQUcsRUFBRTtJQUViLE1BQU0sVUFBVSxHQUFHLGVBQWUsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDckQsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ2hCLE9BQU8sRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsQ0FBQztJQUNqRCxDQUFDO0lBRUQsZ0ZBQWdGO0lBQ2hGLE1BQU0sSUFBSSxHQUFHLElBQUEsMEJBQVcsRUFBQyxTQUFTLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxFQUFFLFFBQVEsSUFBSSxFQUFFLEVBQUUsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDO0lBRWpILElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNWLE9BQU8sRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLFVBQVUsQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxDQUFDO0lBQy9ELENBQUM7SUFFRCxrRUFBa0U7SUFDbEUsTUFBTSxLQUFLLEdBQUcsSUFBQSwrQkFBZ0IsRUFBQyxJQUFJLENBQUMsQ0FBQztJQUNyQyxNQUFNLE1BQU0sR0FBbUIsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO1FBQ2hELE1BQU0sS0FBSyxHQUFHLGVBQWUsQ0FBQyxRQUFRLENBQUMsSUFB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QUksS0FBSyxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ3BCLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDZixLQUFLLENBQUMsSUFBSSxDQUNSLGtDQUFrQyxLQUFLLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxjQUFjLEdBQUc7WUFDdkUsSUFBSSxLQUFLLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUk7WUFDbEcsSUFBSSxLQUFLLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FDekMsQ0FBQztJQUNKLENBQUM7SUFFRCxPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDMUIsQ0FBQztBQXhCRCxnREF3QkMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIHF1YWxpdHlUcmFjZSgpIOKAlCBRdWFsaXR5IFN0YWNrIFRyYWNlIGJ1aWx0IG9uIGNhdXNhbENoYWluKCkuXG4gKlxuICogVGhpbiBsYXllciBvdmVyIGBtZW1vcnkvYmFja3RyYWNrLmNhdXNhbENoYWluKClgIHRoYXQgZGVjb3JhdGVzXG4gKiBlYWNoIGNhdXNhbCBub2RlIHdpdGggcXVhbGl0eSBzY29yZXMgZnJvbSBhIFF1YWxpdHlSZWNvcmRlci5cbiAqXG4gKiBgYGBcbiAqIFF1YWxpdHkgVHJhY2UgKHNjb3JlOiAwLjMgYXQgY2FsbC1sbG0jNSk6XG4gKiAgIGF0IGNhbGwtbGxtIzUgICAgIHNjb3JlPTAuMyAg4oaQIHF1YWxpdHkgZHJvcHBlZCBoZXJlXG4gKiAgIGF0IHN5c3RlbS1wcm9tcHQjMSBzY29yZT0wLjggIOKGkCBzeXN0ZW1Qcm9tcHQgd2FzIGdvb2RcbiAqICAgYXQgc2VlZCMwICAgICAgICAgIHNjb3JlPTEuMCAg4oaQIGlucHV0IHdhcyBjbGVhblxuICpcbiAqIFJvb3QgY2F1c2U6IHF1YWxpdHkgZHJvcHBlZCBhdCBjYWxsLWxsbSM1ICgwLjgg4oaSIDAuMywgzpQwLjUpXG4gKiBgYGBcbiAqL1xuXG5pbXBvcnQgeyBjYXVzYWxDaGFpbiwgZmxhdHRlbkNhdXNhbERBRyB9IGZyb20gJy4uL21lbW9yeS9iYWNrdHJhY2suanMnO1xuaW1wb3J0IHR5cGUgeyBDb21taXRCdW5kbGUgfSBmcm9tICcuLi9tZW1vcnkvdHlwZXMuanMnO1xuaW1wb3J0IHR5cGUgeyBRdWFsaXR5RW50cnkgfSBmcm9tICcuL1F1YWxpdHlSZWNvcmRlci5qcyc7XG5cbi8qKiBNaW5pbWFsIHBlci1zdGVwIHF1YWxpdHkgbG9va3VwIOKAlCBzYXRpc2ZpZWQgYnkgYFF1YWxpdHlSZWNvcmRlcmAgKHN0cnVjdHVyYWwsIGRlY291cGxlZCkuICovXG5leHBvcnQgaW50ZXJmYWNlIFF1YWxpdHlMb29rdXAge1xuICBnZXRCeUtleShydW50aW1lU3RhZ2VJZDogc3RyaW5nKTogUXVhbGl0eUVudHJ5IHwgdW5kZWZpbmVkO1xufVxuXG4vKiogQSBzaW5nbGUgZnJhbWUgaW4gdGhlIHF1YWxpdHkgc3RhY2sgdHJhY2UuICovXG5leHBvcnQgaW50ZXJmYWNlIFF1YWxpdHlGcmFtZSB7XG4gIHJ1bnRpbWVTdGFnZUlkOiBzdHJpbmc7XG4gIHN0YWdlTmFtZTogc3RyaW5nO1xuICBzY29yZTogbnVtYmVyO1xuICBmYWN0b3JzOiBzdHJpbmdbXTtcbiAgbGlua2VkQnk6IHN0cmluZztcbiAgZGVwdGg6IG51bWJlcjtcbn1cblxuLyoqIFRoZSBmdWxsIHF1YWxpdHkgc3RhY2sgdHJhY2UuICovXG5leHBvcnQgaW50ZXJmYWNlIFF1YWxpdHlTdGFja1RyYWNlIHtcbiAgc3RhcnRJZDogc3RyaW5nO1xuICBzdGFydFNjb3JlOiBudW1iZXI7XG4gIGZyYW1lczogUXVhbGl0eUZyYW1lW107XG4gIHJvb3RDYXVzZT86IHtcbiAgICBmcmFtZTogUXVhbGl0eUZyYW1lO1xuICAgIHByZXZpb3VzRnJhbWU6IFF1YWxpdHlGcmFtZTtcbiAgICBkcm9wOiBudW1iZXI7XG4gIH07XG59XG5cbi8qKlxuICogQnVpbGQgYSBxdWFsaXR5IHN0YWNrIHRyYWNlIGJ5IGRlY29yYXRpbmcgYSBjYXVzYWwgY2hhaW4gd2l0aCBzY29yZXMuXG4gKlxuICogQHBhcmFtIGNvbW1pdExvZyAgICAgICAgRnJvbSBleGVjdXRvci5nZXRTbmFwc2hvdCgpLmNvbW1pdExvZ1xuICogQHBhcmFtIHF1YWxpdHlSZWNvcmRlciAgUXVhbGl0eVJlY29yZGVyIGF0dGFjaGVkIGR1cmluZyBleGVjdXRpb25cbiAqIEBwYXJhbSBzdGFydElkICAgICAgICAgIHJ1bnRpbWVTdGFnZUlkIHRvIHN0YXJ0IGZyb21cbiAqIEBwYXJhbSBtYXhEZXB0aCAgICAgICAgIE1heGltdW0gYmFja3RyYWNraW5nIGRlcHRoIChkZWZhdWx0OiAyMClcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHF1YWxpdHlUcmFjZShcbiAgY29tbWl0TG9nOiBDb21taXRCdW5kbGVbXSxcbiAgcXVhbGl0eVJlY29yZGVyOiBRdWFsaXR5TG9va3VwLFxuICBzdGFydElkOiBzdHJpbmcsXG4gIG1heERlcHRoID0gMjAsXG4pOiBRdWFsaXR5U3RhY2tUcmFjZSB7XG4gIGNvbnN0IHN0YXJ0RW50cnkgPSBxdWFsaXR5UmVjb3JkZXIuZ2V0QnlLZXkoc3RhcnRJZCk7XG4gIGlmICghc3RhcnRFbnRyeSkge1xuICAgIHJldHVybiB7IHN0YXJ0SWQsIHN0YXJ0U2NvcmU6IC0xLCBmcmFtZXM6IFtdIH07XG4gIH1cblxuICAvLyBVc2UgY2F1c2FsQ2hhaW4gdG8gYnVpbGQgdGhlIERBRywgcHJvdmlkaW5nIGtleXNSZWFkIGZyb20gdGhlIFF1YWxpdHlSZWNvcmRlclxuICBjb25zdCByb290ID0gY2F1c2FsQ2hhaW4oY29tbWl0TG9nLCBzdGFydElkLCAoaWQpID0+IHF1YWxpdHlSZWNvcmRlci5nZXRCeUtleShpZCk/LmtleXNSZWFkID8/IFtdLCB7IG1heERlcHRoIH0pO1xuXG4gIGlmICghcm9vdCkge1xuICAgIHJldHVybiB7IHN0YXJ0SWQsIHN0YXJ0U2NvcmU6IHN0YXJ0RW50cnkuc2NvcmUsIGZyYW1lczogW10gfTtcbiAgfVxuXG4gIC8vIEZsYXR0ZW4gREFHIHRvIEJGUy1vcmRlcmVkIGZyYW1lcywgZGVjb3JhdGUgd2l0aCBxdWFsaXR5IHNjb3Jlc1xuICBjb25zdCBub2RlcyA9IGZsYXR0ZW5DYXVzYWxEQUcocm9vdCk7XG4gIGNvbnN0IGZyYW1lczogUXVhbGl0eUZyYW1lW10gPSBub2Rlcy5tYXAoKG5vZGUpID0+IHtcbiAgICBjb25zdCBlbnRyeSA9IHF1YWxpdHlSZWNvcmRlci5nZXRCeUtleShub2RlLnJ1bnRpbWVTdGFnZUlkKTtcbiAgICByZXR1cm4ge1xuICAgICAgcnVudGltZVN0YWdlSWQ6IG5vZGUucnVudGltZVN0YWdlSWQsXG4gICAgICBzdGFnZU5hbWU6IG5vZGUuc3RhZ2VOYW1lLFxuICAgICAgc2NvcmU6IGVudHJ5Py5zY29yZSA/PyAtMSxcbiAgICAgIGZhY3RvcnM6IGVudHJ5Py5mYWN0b3JzID8/IFtdLFxuICAgICAgbGlua2VkQnk6IG5vZGUubGlua2VkQnksXG4gICAgICBkZXB0aDogbm9kZS5kZXB0aCxcbiAgICB9O1xuICB9KTtcblxuICAvLyBGaW5kIHJvb3QgY2F1c2U6IGJpZ2dlc3QgcXVhbGl0eSBkcm9wIGJldHdlZW4gYWRqYWNlbnQgZnJhbWVzIChCRlMgb3JkZXIpXG4gIGxldCByb290Q2F1c2U6IFF1YWxpdHlTdGFja1RyYWNlWydyb290Q2F1c2UnXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBmcmFtZXMubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBmcmFtZSA9IGZyYW1lc1tpXTtcbiAgICAvLyBMb29rIGF0IGVhY2ggcGFyZW50IChmcmFtZXMgYXQgZGVwdGggKyAxKVxuICAgIGZvciAoY29uc3QgcGFyZW50RnJhbWUgb2YgZnJhbWVzLmZpbHRlcigoZikgPT4gZi5kZXB0aCA9PT0gZnJhbWUuZGVwdGggKyAxKSkge1xuICAgICAgaWYgKHBhcmVudEZyYW1lLnNjb3JlIDwgMCkgY29udGludWU7XG4gICAgICBjb25zdCBkcm9wID0gcGFyZW50RnJhbWUuc2NvcmUgLSBmcmFtZS5zY29yZTtcbiAgICAgIGlmIChkcm9wID4gMCAmJiAoIXJvb3RDYXVzZSB8fCBkcm9wID4gcm9vdENhdXNlLmRyb3ApKSB7XG4gICAgICAgIHJvb3RDYXVzZSA9IHsgZnJhbWUsIHByZXZpb3VzRnJhbWU6IHBhcmVudEZyYW1lLCBkcm9wIH07XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBzdGFydElkLFxuICAgIHN0YXJ0U2NvcmU6IHN0YXJ0RW50cnkuc2NvcmUsXG4gICAgZnJhbWVzLFxuICAgIHJvb3RDYXVzZSxcbiAgfTtcbn1cblxuLyoqXG4gKiBGb3JtYXQgYSBRdWFsaXR5U3RhY2tUcmFjZSBhcyBodW1hbi1yZWFkYWJsZSB0ZXh0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0UXVhbGl0eVRyYWNlKHRyYWNlOiBRdWFsaXR5U3RhY2tUcmFjZSk6IHN0cmluZyB7XG4gIGlmICh0cmFjZS5mcmFtZXMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIGBRdWFsaXR5IFRyYWNlOiBubyBkYXRhIGZvciAke3RyYWNlLnN0YXJ0SWR9YDtcbiAgfVxuXG4gIGNvbnN0IGxpbmVzOiBzdHJpbmdbXSA9IFtgUXVhbGl0eSBUcmFjZSAoc2NvcmU6ICR7dHJhY2Uuc3RhcnRTY29yZS50b0ZpeGVkKDIpfSBhdCAke3RyYWNlLnN0YXJ0SWR9KTpgXTtcblxuICBmb3IgKGNvbnN0IGZyYW1lIG9mIHRyYWNlLmZyYW1lcykge1xuICAgIGNvbnN0IHNjb3JlU3RyID0gZnJhbWUuc2NvcmUgPj0gMCA/IGZyYW1lLnNjb3JlLnRvRml4ZWQoMikgOiAnPyc7XG4gICAgY29uc3QgbGluayA9IGZyYW1lLmxpbmtlZEJ5ID8gYCAodmlhICR7ZnJhbWUubGlua2VkQnl9KWAgOiAnJztcbiAgICBjb25zdCBmYWN0b3JzID0gZnJhbWUuZmFjdG9ycy5sZW5ndGggPiAwID8gYCDigJQgJHtmcmFtZS5mYWN0b3JzLmpvaW4oJywgJyl9YCA6ICcnO1xuICAgIGxpbmVzLnB1c2goYCAgYXQgJHtmcmFtZS5ydW50aW1lU3RhZ2VJZC5wYWRFbmQoMzApfSBzY29yZT0ke3Njb3JlU3RyfSR7bGlua30ke2ZhY3RvcnN9YCk7XG4gIH1cblxuICBpZiAodHJhY2Uucm9vdENhdXNlKSB7XG4gICAgbGluZXMucHVzaCgnJyk7XG4gICAgbGluZXMucHVzaChcbiAgICAgIGBSb290IGNhdXNlOiBxdWFsaXR5IGRyb3BwZWQgYXQgJHt0cmFjZS5yb290Q2F1c2UuZnJhbWUucnVudGltZVN0YWdlSWR9IGAgK1xuICAgICAgICBgKCR7dHJhY2Uucm9vdENhdXNlLnByZXZpb3VzRnJhbWUuc2NvcmUudG9GaXhlZCgyKX0g4oaSICR7dHJhY2Uucm9vdENhdXNlLmZyYW1lLnNjb3JlLnRvRml4ZWQoMil9LCBgICtcbiAgICAgICAgYM6UJHt0cmFjZS5yb290Q2F1c2UuZHJvcC50b0ZpeGVkKDIpfSlgLFxuICAgICk7XG4gIH1cblxuICByZXR1cm4gbGluZXMuam9pbignXFxuJyk7XG59XG4iXX0=
96
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVhbGl0eVRyYWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9yZWNvcmRlci9xdWFsaXR5VHJhY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7Ozs7Ozs7OztHQWNHOzs7QUFHSCx5Q0FBMEQ7QUErQjFEOzs7Ozs7O0dBT0c7QUFDSCxTQUFnQixZQUFZLENBQzFCLFNBQXlCLEVBQ3pCLGVBQThCLEVBQzlCLE9BQWUsRUFDZixRQUFRLEdBQUcsRUFBRTtJQUViLE1BQU0sVUFBVSxHQUFHLGVBQWUsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDckQsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ2hCLE9BQU8sRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsQ0FBQztJQUNqRCxDQUFDO0lBRUQsZ0ZBQWdGO0lBQ2hGLE1BQU0sSUFBSSxHQUFHLElBQUEsdUJBQVcsRUFBQyxTQUFTLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxFQUFFLFFBQVEsSUFBSSxFQUFFLEVBQUUsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDO0lBRWpILElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNWLE9BQU8sRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLFVBQVUsQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxDQUFDO0lBQy9ELENBQUM7SUFFRCxrRUFBa0U7SUFDbEUsTUFBTSxLQUFLLEdBQUcsSUFBQSw0QkFBZ0IsRUFBQyxJQUFJLENBQUMsQ0FBQztJQUNyQyxNQUFNLE1BQU0sR0FBbUIsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO1FBQ2hELE1BQU0sS0FBSyxHQUFHLGVBQWUsQ0FBQyxRQUFRLENBQUMsSUFB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QUksS0FBSyxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ3BCLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDZixLQUFLLENBQUMsSUFBSSxDQUNSLGtDQUFrQyxLQUFLLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxjQUFjLEdBQUc7WUFDdkUsSUFBSSxLQUFLLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUk7WUFDbEcsSUFBSSxLQUFLLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FDekMsQ0FBQztJQUNKLENBQUM7SUFFRCxPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDMUIsQ0FBQztBQXhCRCxnREF3QkMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIHF1YWxpdHlUcmFjZSgpIOKAlCBRdWFsaXR5IFN0YWNrIFRyYWNlIGJ1aWx0IG9uIGNhdXNhbENoYWluKCkuXG4gKlxuICogVGhpbiBsYXllciBvdmVyIGBtZW1vcnkvYmFja3RyYWNrLmNhdXNhbENoYWluKClgIHRoYXQgZGVjb3JhdGVzXG4gKiBlYWNoIGNhdXNhbCBub2RlIHdpdGggcXVhbGl0eSBzY29yZXMgZnJvbSBhIFF1YWxpdHlSZWNvcmRlci5cbiAqXG4gKiBgYGBcbiAqIFF1YWxpdHkgVHJhY2UgKHNjb3JlOiAwLjMgYXQgY2FsbC1sbG0jNSk6XG4gKiAgIGF0IGNhbGwtbGxtIzUgICAgIHNjb3JlPTAuMyAg4oaQIHF1YWxpdHkgZHJvcHBlZCBoZXJlXG4gKiAgIGF0IHN5c3RlbS1wcm9tcHQjMSBzY29yZT0wLjggIOKGkCBzeXN0ZW1Qcm9tcHQgd2FzIGdvb2RcbiAqICAgYXQgc2VlZCMwICAgICAgICAgIHNjb3JlPTEuMCAg4oaQIGlucHV0IHdhcyBjbGVhblxuICpcbiAqIFJvb3QgY2F1c2U6IHF1YWxpdHkgZHJvcHBlZCBhdCBjYWxsLWxsbSM1ICgwLjgg4oaSIDAuMywgzpQwLjUpXG4gKiBgYGBcbiAqL1xuXG5pbXBvcnQgdHlwZSB7IENvbW1pdEJ1bmRsZSB9IGZyb20gJ2Zvb3R0cmFjZSc7XG5pbXBvcnQgeyBjYXVzYWxDaGFpbiwgZmxhdHRlbkNhdXNhbERBRyB9IGZyb20gJ2Zvb3R0cmFjZSc7XG5cbmltcG9ydCB0eXBlIHsgUXVhbGl0eUVudHJ5IH0gZnJvbSAnLi9RdWFsaXR5UmVjb3JkZXIuanMnO1xuXG4vKiogTWluaW1hbCBwZXItc3RlcCBxdWFsaXR5IGxvb2t1cCDigJQgc2F0aXNmaWVkIGJ5IGBRdWFsaXR5UmVjb3JkZXJgIChzdHJ1Y3R1cmFsLCBkZWNvdXBsZWQpLiAqL1xuZXhwb3J0IGludGVyZmFjZSBRdWFsaXR5TG9va3VwIHtcbiAgZ2V0QnlLZXkocnVudGltZVN0YWdlSWQ6IHN0cmluZyk6IFF1YWxpdHlFbnRyeSB8IHVuZGVmaW5lZDtcbn1cblxuLyoqIEEgc2luZ2xlIGZyYW1lIGluIHRoZSBxdWFsaXR5IHN0YWNrIHRyYWNlLiAqL1xuZXhwb3J0IGludGVyZmFjZSBRdWFsaXR5RnJhbWUge1xuICBydW50aW1lU3RhZ2VJZDogc3RyaW5nO1xuICBzdGFnZU5hbWU6IHN0cmluZztcbiAgc2NvcmU6IG51bWJlcjtcbiAgZmFjdG9yczogc3RyaW5nW107XG4gIGxpbmtlZEJ5OiBzdHJpbmc7XG4gIGRlcHRoOiBudW1iZXI7XG59XG5cbi8qKiBUaGUgZnVsbCBxdWFsaXR5IHN0YWNrIHRyYWNlLiAqL1xuZXhwb3J0IGludGVyZmFjZSBRdWFsaXR5U3RhY2tUcmFjZSB7XG4gIHN0YXJ0SWQ6IHN0cmluZztcbiAgc3RhcnRTY29yZTogbnVtYmVyO1xuICBmcmFtZXM6IFF1YWxpdHlGcmFtZVtdO1xuICByb290Q2F1c2U/OiB7XG4gICAgZnJhbWU6IFF1YWxpdHlGcmFtZTtcbiAgICBwcmV2aW91c0ZyYW1lOiBRdWFsaXR5RnJhbWU7XG4gICAgZHJvcDogbnVtYmVyO1xuICB9O1xufVxuXG4vKipcbiAqIEJ1aWxkIGEgcXVhbGl0eSBzdGFjayB0cmFjZSBieSBkZWNvcmF0aW5nIGEgY2F1c2FsIGNoYWluIHdpdGggc2NvcmVzLlxuICpcbiAqIEBwYXJhbSBjb21taXRMb2cgICAgICAgIEZyb20gZXhlY3V0b3IuZ2V0U25hcHNob3QoKS5jb21taXRMb2dcbiAqIEBwYXJhbSBxdWFsaXR5UmVjb3JkZXIgIFF1YWxpdHlSZWNvcmRlciBhdHRhY2hlZCBkdXJpbmcgZXhlY3V0aW9uXG4gKiBAcGFyYW0gc3RhcnRJZCAgICAgICAgICBydW50aW1lU3RhZ2VJZCB0byBzdGFydCBmcm9tXG4gKiBAcGFyYW0gbWF4RGVwdGggICAgICAgICBNYXhpbXVtIGJhY2t0cmFja2luZyBkZXB0aCAoZGVmYXVsdDogMjApXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBxdWFsaXR5VHJhY2UoXG4gIGNvbW1pdExvZzogQ29tbWl0QnVuZGxlW10sXG4gIHF1YWxpdHlSZWNvcmRlcjogUXVhbGl0eUxvb2t1cCxcbiAgc3RhcnRJZDogc3RyaW5nLFxuICBtYXhEZXB0aCA9IDIwLFxuKTogUXVhbGl0eVN0YWNrVHJhY2Uge1xuICBjb25zdCBzdGFydEVudHJ5ID0gcXVhbGl0eVJlY29yZGVyLmdldEJ5S2V5KHN0YXJ0SWQpO1xuICBpZiAoIXN0YXJ0RW50cnkpIHtcbiAgICByZXR1cm4geyBzdGFydElkLCBzdGFydFNjb3JlOiAtMSwgZnJhbWVzOiBbXSB9O1xuICB9XG5cbiAgLy8gVXNlIGNhdXNhbENoYWluIHRvIGJ1aWxkIHRoZSBEQUcsIHByb3ZpZGluZyBrZXlzUmVhZCBmcm9tIHRoZSBRdWFsaXR5UmVjb3JkZXJcbiAgY29uc3Qgcm9vdCA9IGNhdXNhbENoYWluKGNvbW1pdExvZywgc3RhcnRJZCwgKGlkKSA9PiBxdWFsaXR5UmVjb3JkZXIuZ2V0QnlLZXkoaWQpPy5rZXlzUmVhZCA/PyBbXSwgeyBtYXhEZXB0aCB9KTtcblxuICBpZiAoIXJvb3QpIHtcbiAgICByZXR1cm4geyBzdGFydElkLCBzdGFydFNjb3JlOiBzdGFydEVudHJ5LnNjb3JlLCBmcmFtZXM6IFtdIH07XG4gIH1cblxuICAvLyBGbGF0dGVuIERBRyB0byBCRlMtb3JkZXJlZCBmcmFtZXMsIGRlY29yYXRlIHdpdGggcXVhbGl0eSBzY29yZXNcbiAgY29uc3Qgbm9kZXMgPSBmbGF0dGVuQ2F1c2FsREFHKHJvb3QpO1xuICBjb25zdCBmcmFtZXM6IFF1YWxpdHlGcmFtZVtdID0gbm9kZXMubWFwKChub2RlKSA9PiB7XG4gICAgY29uc3QgZW50cnkgPSBxdWFsaXR5UmVjb3JkZXIuZ2V0QnlLZXkobm9kZS5ydW50aW1lU3RhZ2VJZCk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHJ1bnRpbWVTdGFnZUlkOiBub2RlLnJ1bnRpbWVTdGFnZUlkLFxuICAgICAgc3RhZ2VOYW1lOiBub2RlLnN0YWdlTmFtZSxcbiAgICAgIHNjb3JlOiBlbnRyeT8uc2NvcmUgPz8gLTEsXG4gICAgICBmYWN0b3JzOiBlbnRyeT8uZmFjdG9ycyA/PyBbXSxcbiAgICAgIGxpbmtlZEJ5OiBub2RlLmxpbmtlZEJ5LFxuICAgICAgZGVwdGg6IG5vZGUuZGVwdGgsXG4gICAgfTtcbiAgfSk7XG5cbiAgLy8gRmluZCByb290IGNhdXNlOiBiaWdnZXN0IHF1YWxpdHkgZHJvcCBiZXR3ZWVuIGFkamFjZW50IGZyYW1lcyAoQkZTIG9yZGVyKVxuICBsZXQgcm9vdENhdXNlOiBRdWFsaXR5U3RhY2tUcmFjZVsncm9vdENhdXNlJ107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgZnJhbWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3QgZnJhbWUgPSBmcmFtZXNbaV07XG4gICAgLy8gTG9vayBhdCBlYWNoIHBhcmVudCAoZnJhbWVzIGF0IGRlcHRoICsgMSlcbiAgICBmb3IgKGNvbnN0IHBhcmVudEZyYW1lIG9mIGZyYW1lcy5maWx0ZXIoKGYpID0+IGYuZGVwdGggPT09IGZyYW1lLmRlcHRoICsgMSkpIHtcbiAgICAgIGlmIChwYXJlbnRGcmFtZS5zY29yZSA8IDApIGNvbnRpbnVlO1xuICAgICAgY29uc3QgZHJvcCA9IHBhcmVudEZyYW1lLnNjb3JlIC0gZnJhbWUuc2NvcmU7XG4gICAgICBpZiAoZHJvcCA+IDAgJiYgKCFyb290Q2F1c2UgfHwgZHJvcCA+IHJvb3RDYXVzZS5kcm9wKSkge1xuICAgICAgICByb290Q2F1c2UgPSB7IGZyYW1lLCBwcmV2aW91c0ZyYW1lOiBwYXJlbnRGcmFtZSwgZHJvcCB9O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgc3RhcnRJZCxcbiAgICBzdGFydFNjb3JlOiBzdGFydEVudHJ5LnNjb3JlLFxuICAgIGZyYW1lcyxcbiAgICByb290Q2F1c2UsXG4gIH07XG59XG5cbi8qKlxuICogRm9ybWF0IGEgUXVhbGl0eVN0YWNrVHJhY2UgYXMgaHVtYW4tcmVhZGFibGUgdGV4dC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdFF1YWxpdHlUcmFjZSh0cmFjZTogUXVhbGl0eVN0YWNrVHJhY2UpOiBzdHJpbmcge1xuICBpZiAodHJhY2UuZnJhbWVzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBgUXVhbGl0eSBUcmFjZTogbm8gZGF0YSBmb3IgJHt0cmFjZS5zdGFydElkfWA7XG4gIH1cblxuICBjb25zdCBsaW5lczogc3RyaW5nW10gPSBbYFF1YWxpdHkgVHJhY2UgKHNjb3JlOiAke3RyYWNlLnN0YXJ0U2NvcmUudG9GaXhlZCgyKX0gYXQgJHt0cmFjZS5zdGFydElkfSk6YF07XG5cbiAgZm9yIChjb25zdCBmcmFtZSBvZiB0cmFjZS5mcmFtZXMpIHtcbiAgICBjb25zdCBzY29yZVN0ciA9IGZyYW1lLnNjb3JlID49IDAgPyBmcmFtZS5zY29yZS50b0ZpeGVkKDIpIDogJz8nO1xuICAgIGNvbnN0IGxpbmsgPSBmcmFtZS5saW5rZWRCeSA/IGAgKHZpYSAke2ZyYW1lLmxpbmtlZEJ5fSlgIDogJyc7XG4gICAgY29uc3QgZmFjdG9ycyA9IGZyYW1lLmZhY3RvcnMubGVuZ3RoID4gMCA/IGAg4oCUICR7ZnJhbWUuZmFjdG9ycy5qb2luKCcsICcpfWAgOiAnJztcbiAgICBsaW5lcy5wdXNoKGAgIGF0ICR7ZnJhbWUucnVudGltZVN0YWdlSWQucGFkRW5kKDMwKX0gc2NvcmU9JHtzY29yZVN0cn0ke2xpbmt9JHtmYWN0b3JzfWApO1xuICB9XG5cbiAgaWYgKHRyYWNlLnJvb3RDYXVzZSkge1xuICAgIGxpbmVzLnB1c2goJycpO1xuICAgIGxpbmVzLnB1c2goXG4gICAgICBgUm9vdCBjYXVzZTogcXVhbGl0eSBkcm9wcGVkIGF0ICR7dHJhY2Uucm9vdENhdXNlLmZyYW1lLnJ1bnRpbWVTdGFnZUlkfSBgICtcbiAgICAgICAgYCgke3RyYWNlLnJvb3RDYXVzZS5wcmV2aW91c0ZyYW1lLnNjb3JlLnRvRml4ZWQoMil9IOKGkiAke3RyYWNlLnJvb3RDYXVzZS5mcmFtZS5zY29yZS50b0ZpeGVkKDIpfSwgYCArXG4gICAgICAgIGDOlCR7dHJhY2Uucm9vdENhdXNlLmRyb3AudG9GaXhlZCgyKX0pYCxcbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIGxpbmVzLmpvaW4oJ1xcbicpO1xufVxuIl19
@@ -43,9 +43,9 @@
43
43
  */
44
44
  Object.defineProperty(exports, "__esModule", { value: true });
45
45
  exports.DeferredObserverTier = exports.DEFERRED_FLOW_TAP_ID = exports.DEFERRED_SCOPE_TAP_ID = void 0;
46
+ const foottrace_1 = require("foottrace");
46
47
  const invokeHook_js_1 = require("../capture/invokeHook.js");
47
48
  const devMode_js_1 = require("../devMode.js");
48
- const runtimeStageId_js_1 = require("../ids/runtimeStageId.js");
49
49
  const index_js_1 = require("../observer-queue/index.js");
50
50
  const hooks_js_1 = require("../recorder/hooks.js");
51
51
  /** Well-known ids of the synthetic capture taps (internal, documented for debugging). */
@@ -309,7 +309,7 @@ class DeferredObserverTier {
309
309
  deliverListenerError(error, envelope) {
310
310
  const errorEvent = (0, hooks_js_1.recorderFailureEvent)({
311
311
  stageName: '',
312
- stageId: (0, runtimeStageId_js_1.stageIdOf)(envelope.runtimeStageId),
312
+ stageId: (0, foottrace_1.stageIdOf)(envelope.runtimeStageId),
313
313
  runtimeStageId: envelope.runtimeStageId,
314
314
  pipelineId: envelope.runId,
315
315
  }, error, envelope.method);
@@ -363,4 +363,4 @@ class DeferredObserverTier {
363
363
  }
364
364
  }
365
365
  exports.DeferredObserverTier = DeferredObserverTier;
366
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRGVmZXJyZWRPYnNlcnZlclRpZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3J1bm5lci9EZWZlcnJlZE9ic2VydmVyVGllci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBeUNHOzs7QUFFSCw0REFBOEQ7QUFDOUQsOENBQTBDO0FBRTFDLGdFQUFxRDtBQUNyRCx5REFRb0M7QUFDcEMsbURBQXFGO0FBNkRyRix5RkFBeUY7QUFDNUUsUUFBQSxxQkFBcUIsR0FBRyx3QkFBd0IsQ0FBQztBQUNqRCxRQUFBLG9CQUFvQixHQUFHLHVCQUF1QixDQUFDO0FBRTVELDZFQUE2RTtBQUM3RSxNQUFNLG1CQUFtQixHQUE4QixDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQztBQUN6RSwrQ0FBK0M7QUFDL0MsTUFBTSxrQkFBa0IsR0FBOEIsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQWlCL0QsTUFBYSxvQkFBb0I7SUFDZCxVQUFVLENBQXFCO0lBQy9CLGFBQWEsR0FBRyxJQUFJLEdBQUcsRUFBZ0MsQ0FBQztJQUN4RCxhQUFhLENBQTBCO0lBQ3hELDJFQUEyRTtJQUMxRCxjQUFjLEdBQUcsSUFBSSxHQUFHLEVBQVUsQ0FBQztJQUM1QyxnQkFBZ0IsR0FBRyxDQUFDLENBQUM7SUFFN0IsWUFBWSxPQUErQjtRQUN6QyxJQUFJLENBQUMsYUFBYSxHQUFHO1lBQ25CLG9FQUFvRTtZQUNwRSxrRUFBa0U7WUFDbEUscUVBQXFFO1lBQ3JFLGdFQUFnRTtZQUNoRSxzRUFBc0U7WUFDdEUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLElBQUksT0FBTztZQUNwQyxRQUFRLEVBQUUsT0FBTyxFQUFFLFFBQVE7WUFDM0IsUUFBUSxFQUFFLE9BQU8sRUFBRSxRQUFRO1lBQzNCLFdBQVcsRUFBRSxPQUFPLEVBQUUsV0FBVztZQUNqQyxhQUFhLEVBQUUsT0FB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QyxPQUFPLENBQUMsQ0FBQztRQUNqQyxzQ0FBc0M7UUFDdEMsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUN4QixDQUFDO0NBQ0Y7QUExVUQsb0RBMFVDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBydW5uZXIvRGVmZXJyZWRPYnNlcnZlclRpZXIudHMg4oCUIFJGQy0wMDEgQmxvY2tzIDbigJM5OiB0aGUgZW5naW5lIHdpcmluZyBvZlxuICogdGhlIGRlZmVycmVkLW9ic2VydmVyIHBpcGVsaW5lLlxuICpcbiAqIFBhdHRlcm46ICBUaGluIGFkYXB0ZXIgYmV0d2VlbiB0aGUgZXhlY3V0b3IncyB0aHJlZSBvYnNlcnZlciBjaGFubmVscyBhbmRcbiAqICAgICAgICAgICB0aGUgUFVSRSBgb2JzZXJ2ZXItcXVldWVgIG1vZHVsZS4gVGhlIHB1cmUgbW9kdWxlIHN0YXlzXG4gKiAgICAgICAgICAgZW5naW5lLWZyZWUgKGl0IGltcG9ydHMgbm90aGluZyBmcm9tIHRoZSBlbmdpbmUg4oCUIHRoZSBlbmdpbmVcbiAqICAgICAgICAgICBpbXBvcnRzIElUKTsgdGhpcyB0aWVyIG93bnMgZXZlcnkgZW5naW5lLWZsYXZvcmVkIGNvbmNlcm46XG4gKiAgICAgICAgICAgICAtIHRoZSBgaXNEZXZNb2RlKClgLWdhdGVkLCBkZWR1cGxpY2F0ZWQgYENhcHR1cmVIb29rcy53YXJuYFxuICogICAgICAgICAgICAgICBiaW5kaW5nICh0aGUgZGV2LXdhcm4gc2VhbSwgUkZDLTAwMSDCp1wiUmVzb2x1dGlvblwiKTtcbiAqICAgICAgICAgICAgIC0gcm91dGluZyBgRGVmZXJyZWREaXNwYXRjaGVyLm9uRXJyb3JgIGludG8gdGhlIGV4aXN0aW5nXG4gKiAgICAgICAgICAgICAgIHJlY29yZGVyIGVycm9yIGNoYW5uZWwgKGBvbkVycm9yYCBvbiBzaWJsaW5nIG9ic2VydmVycyk7XG4gKiAgICAgICAgICAgICAtIHRoZSBjYXB0dXJlIFRBUFMg4oCUIHN5bnRoZXRpYyByZWNvcmRlcnMgcGxhY2VkIG9uIHRoZVxuICogICAgICAgICAgICAgICBleGlzdGluZyBpbmxpbmUgZGlzcGF0Y2ggbGlzdHMgc28gdGhlIHRocmVlIGRpc3BhdGNoIHNpdGVzXG4gKiAgICAgICAgICAgICAgIChgU2NvcGVGYWNhZGUuX2ludm9rZUhvb2tgLCBgU2NvcGVGYWNhZGUuZW1pdEV2ZW50YCxcbiAqICAgICAgICAgICAgICAgYEZsb3dSZWNvcmRlckRpc3BhdGNoZXJgKSBuZWVkIE5PIHBlci1zaXRlIHRpZXIgbG9naWM6IGFcbiAqICAgICAgICAgICAgICAgdGFwJ3MgaG9vayBib2R5IElTIGBkaXNwYXRjaGVyLmNhcHR1cmUoLi4uKWAsIGFuZCBiZWNhdXNlXG4gKiAgICAgICAgICAgICAgIHRoZSB0YXAgc2l0cyBpbiB0aGUgc2FtZSBsb29wIGFzIGlubGluZSByZWNvcmRlcnMgaXQgc2Vlc1xuICogICAgICAgICAgICAgICBleGFjdGx5IHRoZSBwb3N0LXJlZGFjdGlvbiBldmVudCBvYmplY3QgaW5saW5lIG9ic2VydmVyc1xuICogICAgICAgICAgICAgICBzZWUg4oCUIGNhcHR1cmUgY2FuIG5ldmVyIG9ic2VydmUgYSBwcmUtcmVkYWN0aW9uIHZhbHVlO1xuICogICAgICAgICAgICAgLSB0aGUgdGVybWluYWwgZmx1c2ggKEJsb2NrIDgpIHdpdGggaG9uZXN0IHN0cmFuZGluZ1xuICogICAgICAgICAgICAgICBhY2NvdW50aW5nLCBhbmQgdGhlIEJsb2NrIDkgc3RhdHMgc3VyZmFjZS5cbiAqXG4gKiBSb2xlOiAgICAgT25lIGluc3RhbmNlIHBlciBgRmxvd0NoYXJ0RXhlY3V0b3JgLCBjcmVhdGVkIExBWklMWSBvbiB0aGVcbiAqICAgICAgICAgICBmaXJzdCBgZGVsaXZlcnk6ICdkZWZlcnJlZCdgIGF0dGFjaCAoemVybyBhbGxvY2F0aW9uIHdoZW4gbm9ib2R5XG4gKiAgICAgICAgICAgb3B0cyBpbiDigJQgbWlycm9ycyB0aGUgZW1pdCBmYXN0LXBhdGggcHJlY2VkZW50KS4gSG9sZHMgdGhlIE9ORVxuICogICAgICAgICAgIGBEZWZlcnJlZERpc3BhdGNoZXJgIChvbmUgbWVyZ2VkIHF1ZXVlLCB0b3RhbCBvcmRlciBhY3Jvc3NcbiAqICAgICAgICAgICBjaGFubmVscykgcGx1cyB0aGUgcmVnaXN0cnkgb2YgZGVmZXJyZWQgcmVjb3JkZXJzLlxuICpcbiAqIERlbGl2ZXJ5OiBhIGRlZmVycmVkIHJlY29yZGVyJ3MgaG9va3MgYXJlIGludm9rZWQgdGhyb3VnaCB0aGUgU0FNRVxuICogYGludm9rZVJlY29yZGVySG9va2AgaGVscGVyIHRoZSBpbmxpbmUgdGllciB1c2VzIChSRkMtMDAxIMKnOSBtaXRpZ2F0aW9uKSDigJRcbiAqIG9uZSBiZWF0IGJlaGluZCwgd2l0aCBgZW52ZWxvcGUucGF5bG9hZGAgbWF0ZXJpYWxpemVkIHBlciB0aGUgY2FwdHVyZVxuICogcG9saWN5IChgJ2Nsb25lJ2AgZGVmYXVsdCBhdCB0aGlzIGF0dGFjaCB0aWVyIOKAlCBmdWxsIHN0cnVjdHVyYWwgY29weSxcbiAqIGV2ZW50LXNoYXBlIGNvbXBhdGlibGUgd2l0aCBpbmxpbmU7IGV4cGxpY2l0IGAnc3VtbWFyeSdgIOKAlCBib3VuZGVkLFxuICogcmVmZXJlbmNlLWZyZWU7IGAncmVmJ2Ag4oCUIHRoZSBsaXZlIGV2ZW50IG9iamVjdCwgZGV2LXdhcm5lZCkuIFRoZSBzdGFuZGFsb25lXG4gKiBxdWV1ZSByZXRhaW5zIGl0cyBgJ3N1bW1hcnknYCBkZWZhdWx0IChgb2JzZXJ2ZXItcXVldWUvbWVyZ2VkUXVldWUudHMgwrcgTWVyZ2VkUXVldWVgKS5cbiAqXG4gKiBDaGFubmVsIGZpbHRlcjogYSByZWdpc3RyYXRpb24gcmVtZW1iZXJzIHdoaWNoIGNoYW5uZWxzIHdvdWxkIGhhdmVcbiAqIHJlYWNoZWQgdGhlIHJlY29yZGVyIGlubGluZSAoc2NvcGUtbGlzdCByZWNvcmRlcnMgc2VlIGBzY29wZWAgKyBgZW1pdGBcbiAqIGVudmVsb3BlczsgZmxvdy1saXN0IHJlY29yZGVycyBzZWUgYGZsb3dgIGVudmVsb3BlcykgYW5kIHNraXBzIHRoZSByZXN0IOKAlFxuICogc2FtZSByZWFjaCBhcyB0aGUgaW5saW5lIHRpZXIsIG9uZSBiZWF0IGJlaGluZC5cbiAqL1xuXG5pbXBvcnQgeyBpbnZva2VSZWNvcmRlckhvb2sgfSBmcm9tICcuLi9jYXB0dXJlL2ludm9rZUhvb2suanMnO1xuaW1wb3J0IHsgaXNEZXZNb2RlIH0gZnJvbSAnLi4vZGV2TW9kZS5qcyc7XG5pbXBvcnQgdHlwZSB7IEZsb3dSZWNvcmRlciB9IGZyb20gJy4uL2VuZ2luZS9uYXJyYXRpdmUvdHlwZXMuanMnO1xuaW1wb3J0IHsgc3RhZ2VJZE9mIH0gZnJvbSAnLi4vaWRzL3J1bnRpbWVTdGFnZUlkLmpzJztcbmltcG9ydCB7XG4gIHR5cGUgQ2FwdHVyZUNoYW5uZWwsXG4gIHR5cGUgQ2FwdHVyZUVudmVsb3BlLFxuICB0eXBlIENhcHR1cmVQb2xpY3ksXG4gIHR5cGUgRGlzcGF0Y2hlclN0YXRzLFxuICB0eXBlIERyYWluUmVzdWx0LFxuICB0eXBlIE92ZXJmbG93UG9saWN5LFxuICBEZWZlcnJlZERpc3BhdGNoZXIsXG59IGZyb20gJy4uL29ic2VydmVyLXF1ZXVlL2luZGV4LmpzJztcbmltcG9ydCB7IGRlc2NyaWJlVGhyb3duLCBob29rc09uLCByZWNvcmRlckZhaWx1cmVFdmVudCB9IGZyb20gJy4uL3JlY29yZGVyL2hvb2tzLmpzJztcbmltcG9ydCB0eXBlIHsgU2NvcGVSZWNvcmRlciB9IGZyb20gJy4uL3Njb3BlL3R5cGVzLmpzJztcblxuLyoqIERlbGl2ZXJ5IHRpZXIgZm9yIGFuIGF0dGFjaGVkIG9ic2VydmVyIChSRkMtMDAxKS4gKi9cbmV4cG9ydCB0eXBlIE9ic2VydmVyRGVsaXZlcnkgPSAnaW5saW5lJyB8ICdkZWZlcnJlZCc7XG5cbi8qKlxuICogT3B0aW9ucyBiYWcgYWNjZXB0ZWQgYnkgZXZlcnkgYGF0dGFjaCpSZWNvcmRlcmAgY2FsbC5cbiAqXG4gKiBgZGVsaXZlcnk6ICdkZWZlcnJlZCdgIG9wdHMgdGhlIHJlY29yZGVyIGludG8gdGhlIGJvdW5kZWQgY2FwdHVyZSBxdWV1ZVxuICogKFwib25lIGJlYXQgYmVoaW5kXCIpOyBhYnNlbnQgLyBgJ2lubGluZSdgIGtlZXBzIHRoZSBoaXN0b3JpY2FsIHN5bmNocm9ub3VzXG4gKiBjYWxsIOKAlCBieXRlLWlkZW50aWNhbCB0byB0aGUgcHJlLVJGQyBwYXRoLlxuICpcbiAqIFRoZSByZW1haW5pbmcgZmllbGRzIGNvbmZpZ3VyZSB0aGUgZXhlY3V0b3IncyBPTkUgc2hhcmVkIGRpc3BhdGNoZXIgYW5kXG4gKiBhcmUgYXBwbGllZCB3aGVuIHRoZSBGSVJTVCBkZWZlcnJlZCBhdHRhY2ggY3JlYXRlcyBpdDsgbGF0ZXIgYXR0YWNoZXNcbiAqIHBhc3NpbmcgZGlmZmVyZW50IHZhbHVlcyBnZXQgYSBkZXYtbW9kZSB3YXJuaW5nIGFuZCBrZWVwIHRoZSBvcmlnaW5hbFxuICogY29uZmlndXJhdGlvbiAob25lIHF1ZXVlIHBlciBleGVjdXRvciDigJQgcGVyLXJlY29yZGVyIHF1ZXVlcyB3b3VsZCBicmVha1xuICogdGhlIHRvdGFsIGNyb3NzLWNoYW5uZWwgb3JkZXIpLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEF0dGFjaFJlY29yZGVyT3B0aW9ucyB7XG4gIC8qKiBgJ2RlZmVycmVkJ2AgPSBjYXB0dXJlIOKGkiBxdWV1ZSDihpIgbmV4dC1jaGVja3BvaW50IGRlbGl2ZXJ5LiBEZWZhdWx0IGAnaW5saW5lJ2AuICovXG4gIHJlYWRvbmx5IGRlbGl2ZXJ5PzogT2JzZXJ2ZXJEZWxpdmVyeTtcbiAgLyoqXG4gICAqIFBheWxvYWQgbWF0ZXJpYWxpemF0aW9uIGF0IGNhcHR1cmUgdGltZS4gRGVmYXVsdCBgJ2Nsb25lJ2Ag4oCUIHlvdXJcbiAgICogcmVjb3JkZXIncyBob29rcyByZWNlaXZlIHRoZSBTQU1FIGV2ZW50IHNoYXBlIGFzIGlubGluZSBkZWxpdmVyeVxuICAgKiAoYHN0cnVjdHVyZWRDbG9uZWBkOyBgZS5rZXlgL2BlLnZhbHVlYC9gZS5ydW50aW1lU3RhZ2VJZGAgYWxsIHdvcmtcbiAgICogdW5jaGFuZ2VkKSwgc28gYHsgZGVsaXZlcnk6ICdkZWZlcnJlZCcgfWAgaXMgYSBkcm9wLWluIHBvcnQuXG4gICAqIGAnc3VtbWFyeSdgIOKAlCBhIGJvdW5kZWQgdHlwZS9zaXplL3ByZXZpZXcgZGlnZXN0IChgUGF5bG9hZFN1bW1hcnlgKVxuICAgKiBpbnN0ZWFkIG9mIHRoZSBldmVudCBzaGFwZTogY2hlYXBlciBjYXB0dXJlIGZvciB0ZWxlbWV0cnktb25seVxuICAgKiBjb25zdW1lcnMgdGhhdCBkb24ndCByZWFkIGRvbWFpbiBmaWVsZHMuIGAncmVmJ2Ag4oCUIHBhc3MtdGhyb3VnaCBieVxuICAgKiByZWZlcmVuY2U7IHRoZSBjYWxsZXIgYXNzZXJ0cyBpbW11dGFiaWxpdHkgKGRldi1tb2RlIHdhcm5zKS5cbiAgICovXG4gIHJlYWRvbmx5IGNhcHR1cmU/OiBDYXB0dXJlUG9saWN5O1xuICAvKiogUXVldWUgYm91bmQg4oCUIGRlZmF1bHQgMTAgMDAwLiAqL1xuICByZWFkb25seSBtYXhRdWV1ZT86IG51bWJlcjtcbiAgLyoqIE92ZXJmbG93IHBvbGljeSBhdCBgbWF4UXVldWVgIOKAlCBkZWZhdWx0IGAnZHJvcC1vbGRlc3QnYC4gKi9cbiAgcmVhZG9ubHkgb3ZlcmZsb3c/OiBPdmVyZmxvd1BvbGljeTtcbiAgLyoqIGAnc2FtcGxlJ2Agb3ZlcmZsb3cgb25seSDigJQgYWRtaXQgMSBpbiB0aGlzIG1hbnkgc2F0dXJhdGVkIGFycml2YWxzLiAqL1xuICByZWFkb25seSBzYW1wbGVFdmVyeT86IG51bWJlcjtcbiAgLyoqIFBlci1jaGVja3BvaW50IGZsdXNoIGJ1ZGdldCwgbXMgKEExKSDigJQgZGVmYXVsdCAyOyBgSW5maW5pdHlgID0gZnVsbCBkcmFpbi4gKi9cbiAgcmVhZG9ubHkgZmx1c2hCdWRnZXRNcz86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBUaGUgQmxvY2sgOSBvYnNlcnZhYmlsaXR5IHN1cmZhY2Ug4oCUIGBzbmFwc2hvdC5vYnNlcnZlclN0YXRzYC4gVGhlIEE0XG4gKiBkaXNwYXRjaGVyIHN0YXRzIHBsdXMgdGhlIHRlcm1pbmFsLWZsdXNoIHN0cmFuZGluZyBjb3VudCBmcm9tIEJsb2NrIDguXG4gKiBQcmVzZW50IG9uIGBSdW50aW1lU25hcHNob3RgIG9ubHkgd2hlbiBhIGRlZmVycmVkIG9ic2VydmVyIHdhcyBhdHRhY2hlZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBPYnNlcnZlclN0YXRzIGV4dGVuZHMgRGlzcGF0Y2hlclN0YXRzIHtcbiAgLyoqXG4gICAqIEVudmVsb3BlcyBzdGlsbCBxdWV1ZWQgd2hlbiBhIHRlcm1pbmFsIGZsdXNoIGhpdCBpdHMgcnVuYXdheS1jYXNjYWRlXG4gICAqIHJvdW5kIGNhcCAoQmxvY2sgOCkuIGAwYCBpbiBhbnkgc2FuZSBydW4g4oCUIGEgbm9uLXplcm8gdmFsdWUgbWVhbnMgYVxuICAgKiBsaXN0ZW5lciBrZXB0IGVucXVldWVpbmcgd29yayBhdCBlbmQtb2YtcnVuIGFuZCBkZWxpdmVyeSB3YXMgY3V0IG9mZlxuICAgKiAoYWxzbyBkZXYtd2FybmVkIGF0IHRoZSBtb21lbnQgaXQgaGFwcGVuZWQpLiBOZXZlciBzaWxlbnQuXG4gICAqL1xuICByZWFkb25seSB0ZXJtaW5hbFN0cmFuZGVkOiBudW1iZXI7XG59XG5cbi8qKiBSZXN1bHQgc2hhcGUgb2YgYGV4ZWN1dG9yLmRyYWluT2JzZXJ2ZXJzKClgIOKAlCBzZWUgYERyYWluUmVzdWx0YC4gKi9cbmV4cG9ydCB0eXBlIE9ic2VydmVyRHJhaW5SZXN1bHQgPSBEcmFpblJlc3VsdDtcblxuLyoqIFdlbGwta25vd24gaWRzIG9mIHRoZSBzeW50aGV0aWMgY2FwdHVyZSB0YXBzIChpbnRlcm5hbCwgZG9jdW1lbnRlZCBmb3IgZGVidWdnaW5nKS4gKi9cbmV4cG9ydCBjb25zdCBERUZFUlJFRF9TQ09QRV9UQVBfSUQgPSAnX19kZWZlcnJlZC1zY29wZS10YXBfXyc7XG5leHBvcnQgY29uc3QgREVGRVJSRURfRkxPV19UQVBfSUQgPSAnX19kZWZlcnJlZC1mbG93LXRhcF9fJztcblxuLyoqIENoYW5uZWwgcmVhY2ggb2YgdGhlIHNjb3BlLXJlY29yZGVyIGxpc3QgKHNjb3BlIGV2ZW50cyArIGVtaXQgZXZlbnRzKS4gKi9cbmNvbnN0IFNDT1BFX0xJU1RfQ0hBTk5FTFM6IHJlYWRvbmx5IENhcHR1cmVDaGFubmVsW10gPSBbJ3Njb3BlJywgJ2VtaXQnXTtcbi8qKiBDaGFubmVsIHJlYWNoIG9mIHRoZSBmbG93LXJlY29yZGVyIGxpc3QuICovXG5jb25zdCBGTE9XX0xJU1RfQ0hBTk5FTFM6IHJlYWRvbmx5IENhcHR1cmVDaGFubmVsW10gPSBbJ2Zsb3cnXTtcblxuLyoqIERpc3BhdGNoZXItbGV2ZWwgb3B0aW9ucyBzbmFwc2hvdCwga2VwdCBmb3IgY29uZmxpY3QgZGV0ZWN0aW9uLiAqL1xuaW50ZXJmYWNlIEFwcGxpZWREaXNwYXRjaGVyQ29uZmlnIHtcbiAgcmVhZG9ubHkgY2FwdHVyZT86IENhcHR1cmVQb2xpY3k7XG4gIHJlYWRvbmx5IG1heFF1ZXVlPzogbnVtYmVyO1xuICByZWFkb25seSBvdmVyZmxvdz86IE92ZXJmbG93UG9saWN5O1xuICByZWFkb25seSBzYW1wbGVFdmVyeT86IG51bWJlcjtcbiAgcmVhZG9ubHkgZmx1c2hCdWRnZXRNcz86IG51bWJlcjtcbn1cblxuaW50ZXJmYWNlIERlZmVycmVkUmVnaXN0cmF0aW9uIHtcbiAgcmVhZG9ubHkgcmVjb3JkZXI6IFNjb3BlUmVjb3JkZXIgfCBGbG93UmVjb3JkZXI7XG4gIC8qKiBXaGljaCBlbnZlbG9wZSBjaGFubmVscyByZWFjaCB0aGlzIHJlY29yZGVyIChpbmxpbmUtdGllciBwYXJpdHkpLiAqL1xuICByZWFkb25seSBjaGFubmVsczogU2V0PENhcHR1cmVDaGFubmVsPjtcbn1cblxuZXhwb3J0IGNsYXNzIERlZmVycmVkT2JzZXJ2ZXJUaWVyIHtcbiAgcHJpdmF0ZSByZWFkb25seSBkaXNwYXRjaGVyOiBEZWZlcnJlZERpc3BhdGNoZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgcmVnaXN0cmF0aW9ucyA9IG5ldyBNYXA8c3RyaW5nLCBEZWZlcnJlZFJlZ2lzdHJhdGlvbj4oKTtcbiAgcHJpdmF0ZSByZWFkb25seSBhcHBsaWVkQ29uZmlnOiBBcHBsaWVkRGlzcGF0Y2hlckNvbmZpZztcbiAgLyoqIERlZHVwIG1lbW9yeSBmb3IgdGhlIGRldi13YXJuIHNlYW0gKG9uZSB3YXJuaW5nIHBlciB1bmlxdWUgbWVzc2FnZSkuICovXG4gIHByaXZhdGUgcmVhZG9ubHkgd2FybmVkTWVzc2FnZXMgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgcHJpdmF0ZSB0ZXJtaW5hbFN0cmFuZGVkID0gMDtcblxuICBjb25zdHJ1Y3RvcihvcHRpb25zPzogQXR0YWNoUmVjb3JkZXJPcHRpb25zKSB7XG4gICAgdGhpcy5hcHBsaWVkQ29uZmlnID0ge1xuICAgICAgLy8gQXR0YWNoLXN1cmZhY2UgZGVmYXVsdCBpcyAnY2xvbmUnIChyZXZpZXcgQ1JJVElDQUwtMik6IGEgcmVjb3JkZXJcbiAgICAgIC8vIHBvcnRlZCB3aXRoIGB7IGRlbGl2ZXJ5OiAnZGVmZXJyZWQnIH1gIGtlZXBzIHJlY2VpdmluZyB0aGUgU0FNRVxuICAgICAgLy8gZXZlbnQgc2hhcGUgYXMgaW5saW5lIChlLmtleS9lLnZhbHVlL2UucnVudGltZVN0YWdlSWQgYWxsIGludGFjdCkuXG4gICAgICAvLyBUaGUgbW9kdWxlLWludGVybmFsIGVudmVsb3BlIGRlZmF1bHQgc3RheXMgJ3N1bW1hcnknIGZvciByYXctXG4gICAgICAvLyBlbnZlbG9wZSBjb25zdW1lcnM7ICdzdW1tYXJ5JyBoZXJlIGlzIGFuIGV4cGxpY2l0IHRlbGVtZXRyeSBjaG9pY2UuXG4gICAgICBjYXB0dXJlOiBvcHRpb25zPy5jYXB0dXJlID8/ICdjbG9uZScsXG4gICAgICBtYXhRdWV1ZTogb3B0aW9ucz8ubWF4UXVldWUsXG4gICAgICBvdmVyZmxvdzogb3B0aW9ucz8ub3ZlcmZsb3csXG4gICAgICBzYW1wbGVFdmVyeTogb3B0aW9ucz8uc2FtcGxlRXZlcnksXG4gICAgICBmbHVzaEJ1ZGdldE1zOiBvcHRpb25zPy5mbHVzaEJ1ZGdldE1zLFxuICAgIH07XG4gICAgdGhpcy5kaXNwYXRjaGVyID0gbmV3IERlZmVycmVkRGlzcGF0Y2hlcih7XG4gICAgICBtYXhRdWV1ZTogb3B0aW9ucz8ubWF4UXVldWUsXG4gICAgICBvdmVyZmxvdzogb3B0aW9ucz8ub3ZlcmZsb3csXG4gICAgICBzYW1wbGVFdmVyeTogb3B0aW9ucz8uc2FtcGxlRXZlcnksXG4gICAgICBjYXB0dXJlUG9saWN5OiBvcHRpb25zPy5jYXB0dXJlID8/ICdjbG9uZScsXG4gICAgICBmbHVzaEJ1ZGdldE1zOiBvcHRpb25zPy5mbHVzaEJ1ZGdldE1zLFxuICAgICAgLy8gVGhlIGRldi13YXJuIHNlYW0gKFJGQy0wMDEgwqdcIlJlc29sdXRpb246IHRoZSBkZXYtd2FybiBzZWFtXCIpOiB0aGVcbiAgICAgIC8vIHB1cmUgbW9kdWxlIGludm9rZXMgYHdhcm5gIG9uIGV2ZXJ5ICdyZWYnIGNhcHR1cmUgYW5kIGV2ZXJ5ICdjbG9uZSdcbiAgICAgIC8vIGRlZ3JhZGF0aW9uOyB0aGUgdGllciBiaW5kcyBpdCB0byB0aGUgY2VudHJhbCBpc0Rldk1vZGUoKSBmbGFnIGFuZFxuICAgICAgLy8gZGVkdXBlcyBieSBtZXNzYWdlIHNvIGEgaG90IGxvb3AgY2Fubm90IHNwYW0gdGhlIGNvbnNvbGUuXG4gICAgICBob29rczogeyB3YXJuOiAobWVzc2FnZSkgPT4gdGhpcy5kZXZXYXJuRGVkdXBlZChtZXNzYWdlKSB9LFxuICAgICAgLy8gTGlzdGVuZXIgZmFpbHVyZXMgKHN5bmMgdGhyb3dzIEFORCBhc3luYyByZWplY3Rpb25zKSByb3V0ZSBpbnRvIHRoZVxuICAgICAgLy8gZXhpc3RpbmcgcmVjb3JkZXIgZXJyb3IgY2hhbm5lbCDigJQgc2VlIHJvdXRlTGlzdGVuZXJFcnJvci5cbiAgICAgIG9uRXJyb3I6IChlcnJvciwgY3R4KSA9PiB0aGlzLnJvdXRlTGlzdGVuZXJFcnJvcihlcnJvciwgY3R4Lmxpc3RlbmVySWQsIGN0eC5lbnZlbG9wZSwgY3R4LnBoYXNlKSxcbiAgICB9KTtcbiAgfVxuXG4gIC8vIOKUgOKUgCBSZWdpc3RyeSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuICAvKipcbiAgICogUmVnaXN0ZXIgYSByZWNvcmRlciBmb3IgZGVmZXJyZWQgZGVsaXZlcnkgb24gdGhlIHNjb3BlLWxpc3QgY2hhbm5lbHNcbiAgICogKGBzY29wZWAgKyBgZW1pdGApIGFuZC9vciB0aGUgZmxvdyBjaGFubmVsLiBJZGVtcG90ZW50IGJ5IGlkIOKAlCBzYW1lIGlkXG4gICAqIHJlcGxhY2VzIHRoZSByZWNvcmRlciBvYmplY3Q7IGNoYW5uZWwgbGlzdHMgTUVSR0UgYWNyb3NzIGNhbGxzIChzYW1lIGFzXG4gICAqIHRoZSBpbmxpbmUgdGllciwgd2hlcmUgYGF0dGFjaFNjb3BlUmVjb3JkZXIoeClgICsgYGF0dGFjaEZsb3dSZWNvcmRlcih4KWBcbiAgICogbGFuZHMgYHhgIG9uIGJvdGggbGlzdHMpLiBMYXRlciBhdHRhY2hlcyBwYXNzaW5nIGRpc3BhdGNoZXItbGV2ZWxcbiAgICogb3B0aW9ucyB0aGF0IGRpZmZlciBmcm9tIHRoZSBmaXJzdCBhdHRhY2gncyBjb25maWd1cmF0aW9uIGtlZXAgdGhlXG4gICAqIG9yaWdpbmFsIGNvbmZpZyBhbmQgZGV2LXdhcm4uXG4gICAqL1xuICByZWdpc3RlcihcbiAgICByZWNvcmRlcjogU2NvcGVSZWNvcmRlciB8IEZsb3dSZWNvcmRlcixcbiAgICBsaXN0czogeyBzY29wZT86IGJvb2xlYW47IGZsb3c/OiBib29sZWFuIH0sXG4gICAgb3B0aW9ucz86IEF0dGFjaFJlY29yZGVyT3B0aW9ucyxcbiAgKTogdm9pZCB7XG4gICAgdGhpcy53YXJuT25Db25maWdDb25mbGljdChyZWNvcmRlci5pZCwgb3B0aW9ucyk7XG4gICAgY29uc3QgY2hhbm5lbHMgPSB0aGlzLnJlZ2lzdHJhdGlvbnMuZ2V0KHJlY29yZGVyLmlkKT8uY2hhbm5lbHMgPz8gbmV3IFNldDxDYXB0dXJlQ2hhbm5lbD4oKTtcbiAgICBpZiAobGlzdHMuc2NvcGUpIGZvciAoY29uc3QgYyBvZiBTQ09QRV9MSVNUX0NIQU5ORUxTKSBjaGFubmVscy5hZGQoYyk7XG4gICAgaWYgKGxpc3RzLmZsb3cpIGZvciAoY29uc3QgYyBvZiBGTE9XX0xJU1RfQ0hBTk5FTFMpIGNoYW5uZWxzLmFkZChjKTtcbiAgICB0aGlzLnJlZ2lzdHJhdGlvbnMuc2V0KHJlY29yZGVyLmlkLCB7IHJlY29yZGVyLCBjaGFubmVscyB9KTtcbiAgICB0aGlzLmRpc3BhdGNoZXIuYWRkTGlzdGVuZXIocmVjb3JkZXIuaWQsIChlbnZlbG9wZSkgPT4ge1xuICAgICAgY29uc3QgcmVnaXN0cmF0aW9uID0gdGhpcy5yZWdpc3RyYXRpb25zLmdldChyZWNvcmRlci5pZCk7XG4gICAgICBpZiAoIXJlZ2lzdHJhdGlvbiB8fCAhcmVnaXN0cmF0aW9uLmNoYW5uZWxzLmhhcyhlbnZlbG9wZS5jaGFubmVsKSkgcmV0dXJuO1xuICAgICAgLy8gU0FNRSBpbnZva2UgaGVscGVyIGFzIHRoZSBpbmxpbmUgdGllciAoUkZDLTAwMSDCpzkgbWl0aWdhdGlvbikg4oCUIGFcbiAgICAgIC8vIHJldHVybmVkIFByb21pc2UgbGFuZHMgaW4gdGhlIGRpc3BhdGNoZXIncyBpbmZsaWdodCBzZXQuXG4gICAgICByZXR1cm4gaW52b2tlUmVjb3JkZXJIb29rKHJlY29yZGVyLCBlbnZlbG9wZS5tZXRob2QsIGVudmVsb3BlLnBheWxvYWQpIGFzIHZvaWQgfCBQcm9taXNlPHZvaWQ+O1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZSB0aGUgZ2l2ZW4gY2hhbm5lbCBsaXN0cyBmcm9tIGEgcmVnaXN0cmF0aW9uIChtaXJyb3JzIHRoZSBpbmxpbmVcbiAgICogdGllciwgd2hlcmUgYGRldGFjaFNjb3BlUmVjb3JkZXJgIC8gYGRldGFjaEZsb3dSZWNvcmRlcmAgZWFjaCBjbGVhciBvbmVcbiAgICogbGlzdCkuIFdoZW4gbm8gY2hhbm5lbHMgcmVtYWluLCB0aGUgbGlzdGVuZXIgaXMgZnVsbHkgcmVtb3ZlZC5cbiAgICovXG4gIHJlbW92ZUZyb21MaXN0cyhpZDogc3RyaW5nLCBsaXN0czogeyBzY29wZT86IGJvb2xlYW47IGZsb3c/OiBib29sZWFuIH0pOiB2b2lkIHtcbiAgICBjb25zdCByZWdpc3RyYXRpb24gPSB0aGlzLnJlZ2lzdHJhdGlvbnMuZ2V0KGlkKTtcbiAgICBpZiAoIXJlZ2lzdHJhdGlvbikgcmV0dXJuO1xuICAgIGlmIChsaXN0cy5zY29wZSkgZm9yIChjb25zdCBjIG9mIFNDT1BFX0xJU1RfQ0hBTk5FTFMpIHJlZ2lzdHJhdGlvbi5jaGFubmVscy5kZWxldGUoYyk7XG4gICAgaWYgKGxpc3RzLmZsb3cpIGZvciAoY29uc3QgYyBvZiBGTE9XX0xJU1RfQ0hBTk5FTFMpIHJlZ2lzdHJhdGlvbi5jaGFubmVscy5kZWxldGUoYyk7XG4gICAgaWYgKHJlZ2lzdHJhdGlvbi5jaGFubmVscy5zaXplID09PSAwKSB7XG4gICAgICB0aGlzLnJlZ2lzdHJhdGlvbnMuZGVsZXRlKGlkKTtcbiAgICAgIHRoaXMuZGlzcGF0Y2hlci5yZW1vdmVMaXN0ZW5lcihpZCk7XG4gICAgfVxuICB9XG5cbiAgLyoqIFRydWUgd2hlbiBgaWRgIGlzIHJlZ2lzdGVyZWQgZm9yIGRlZmVycmVkIGRlbGl2ZXJ5IChhbnkgY2hhbm5lbCkuICovXG4gIGhhcyhpZDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMucmVnaXN0cmF0aW9ucy5oYXMoaWQpO1xuICB9XG5cbiAgLyoqIERlZmVycmVkIHJlY29yZGVycyB3aG9zZSByZWFjaCBpbmNsdWRlcyB0aGUgc2NvcGUgbGlzdCAoc2NvcGUrZW1pdCkuICovXG4gIHNjb3BlTGlzdFJlY29yZGVycygpOiBTY29wZVJlY29yZGVyW10ge1xuICAgIHJldHVybiB0aGlzLmJ5Q2hhbm5lbCgnc2NvcGUnKSBhcyBTY29wZVJlY29yZGVyW107XG4gIH1cblxuICAvKiogRGVmZXJyZWQgcmVjb3JkZXJzIHdob3NlIHJlYWNoIGluY2x1ZGVzIHRoZSBmbG93IGNoYW5uZWwuICovXG4gIGZsb3dMaXN0UmVjb3JkZXJzKCk6IEZsb3dSZWNvcmRlcltdIHtcbiAgICByZXR1cm4gdGhpcy5ieUNoYW5uZWwoJ2Zsb3cnKSBhcyBGbG93UmVjb3JkZXJbXTtcbiAgfVxuXG4gIC8qKiBSZXNldCBkZWZlcnJlZCByZWNvcmRlcnMgYmVmb3JlIGEgZnJlc2ggcnVuIChzYW1lIGNvbnRyYWN0IGFzIGlubGluZSkuICovXG4gIGNsZWFyUmVjb3JkZXJzKCk6IHZvaWQge1xuICAgIGZvciAoY29uc3QgeyByZWNvcmRlciB9IG9mIHRoaXMucmVnaXN0cmF0aW9ucy52YWx1ZXMoKSkge1xuICAgICAgKHJlY29yZGVyIGFzIHsgY2xlYXI/OiAoKSA9PiB2b2lkIH0pLmNsZWFyPy4oKTtcbiAgICB9XG4gIH1cblxuICAvLyDilIDilIAgQ2FwdHVyZSB0YXBzIChCbG9jayA3KSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuICAvKipcbiAgICogQnVpbGQgdGhlIHN5bnRoZXRpYyBzY29wZS1jaGFubmVsIHRhcCDigJQgYSBgU2NvcGVSZWNvcmRlcmAgcGxhY2VkIG9uIHRoZVxuICAgKiBub3JtYWwgc2NvcGUtcmVjb3JkZXIgbGlzdCB3aG9zZSBob29rcyBjYXB0dXJlIGludG8gdGhlIHF1ZXVlLiBCdWlsdFxuICAgKiBmcmVzaCBwZXIgdHJhdmVyc2VyIHNvIGl0IHJlZmxlY3RzIHRoZSBjdXJyZW50IHJlZ2lzdHJhdGlvbnMuIE9ubHlcbiAgICogbWV0aG9kcyBzb21lIGRlZmVycmVkIHJlY29yZGVyIGFjdHVhbGx5IGltcGxlbWVudHMgYXJlIHByZXNlbnQgKG5vXG4gICAqIHdhc3RlZCBjYXB0dXJlcykuIFJldHVybnMgYHVuZGVmaW5lZGAgd2hlbiBub3RoaW5nIGlzIHJlZ2lzdGVyZWQgZm9yXG4gICAqIHRoZSBzY29wZSBsaXN0LlxuICAgKlxuICAgKiBSZWRhY3Rpb24gb3JkZXJpbmc6IHRoZSB0YXAgaXMgaW52b2tlZCBmcm9tIHRoZSBTQU1FIGxvb3BzIGFzIGlubGluZVxuICAgKiByZWNvcmRlcnMgKGBfaW52b2tlSG9va2AgLyBgZW1pdEV2ZW50YCksIHdoaWNoIHJlY2VpdmUgZXZlbnRzIEFGVEVSIHRoZVxuICAgKiByZWRhY3Rpb24gZGVjaXNpb24g4oCUIHNvIGEgY2FwdHVyZWQgcGF5bG9hZCBjYW4gbmV2ZXIgY29udGFpbiBhXG4gICAqIHByZS1yZWRhY3Rpb24gdmFsdWUgdGhlIGlubGluZSB0aWVyIHdvdWxkIG5vdCBoYXZlIHNlZW4uXG4gICAqL1xuICBidWlsZFNjb3BlVGFwKCk6IFNjb3BlUmVjb3JkZXIgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IHJlY29yZGVycyA9IHRoaXMuc2NvcGVMaXN0UmVjb3JkZXJzKCk7XG4gICAgaWYgKHJlY29yZGVycy5sZW5ndGggPT09IDApIHJldHVybiB1bmRlZmluZWQ7XG4gICAgY29uc3QgdGFwOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHsgaWQ6IERFRkVSUkVEX1NDT1BFX1RBUF9JRCB9O1xuICAgIC8vIERlcml2ZWQgZnJvbSB0aGUgaG9vayByZWdpc3RyeTogZXZlcnkgaG9vayBvZiB0aGUgc2NvcGUgY2hhbm5lbCBhbmQgb2YgdGhlIGVtaXQgY2hhbm5lbFxuICAgIC8vICh3aGljaCByaWRlcyB0aGUgc2NvcGUgbGlzdCkg4oCUIGEgaG9vayB0aGUgcmVnaXN0cnkgZ2FpbnMgaXMgdGFwcGVkIHdpdGggbm8gZWRpdCBoZXJlLlxuICAgIGZvciAoY29uc3QgY2hhbm5lbCBvZiBbJ3Njb3BlJywgJ2VtaXQnXSBhcyBjb25zdCkge1xuICAgICAgZm9yIChjb25zdCBtZXRob2Qgb2YgaG9va3NPbihjaGFubmVsKSkge1xuICAgICAgICBpZiAoIXRoaXMuYW55SW1wbGVtZW50cyhyZWNvcmRlcnMsIG1ldGhvZCkpIGNvbnRpbnVlO1xuICAgICAgICB0YXBbbWV0aG9kXSA9IChldmVudDogdW5rbm93bikgPT4gdGhpcy5jYXB0dXJlU2NvcGVFdmVudChjaGFubmVsLCBtZXRob2QsIGV2ZW50KTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRhcCBhcyB1bmtub3duIGFzIFNjb3BlUmVjb3JkZXI7XG4gIH1cblxuICAvKipcbiAgICogQnVpbGQgdGhlIHN5bnRoZXRpYyBmbG93LWNoYW5uZWwgdGFwIOKAlCBhIGBGbG93UmVjb3JkZXJgIGFwcGVuZGVkIHRvIHRoZVxuICAgKiBmbG93LXJlY29yZGVycyBsaXN0IGhhbmRlZCB0byB0aGUgdHJhdmVyc2VyLiBTYW1lIGNvbnRyYWN0IGFzXG4gICAqIHtAbGluayBidWlsZFNjb3BlVGFwfS5cbiAgICovXG4gIGJ1aWxkRmxvd1RhcCgpOiBGbG93UmVjb3JkZXIgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IHJlY29yZGVycyA9IHRoaXMuZmxvd0xpc3RSZWNvcmRlcnMoKTtcbiAgICBpZiAocmVjb3JkZXJzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICBjb25zdCB0YXA6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0geyBpZDogREVGRVJSRURfRkxPV19UQVBfSUQgfTtcbiAgICBmb3IgKGNvbnN0IG1ldGhvZCBvZiBob29rc09uKCdmbG93JykpIHtcbiAgICAgIGlmICghdGhpcy5hbnlJbXBsZW1lbnRzKHJlY29yZGVycywgbWV0aG9kKSkgY29udGludWU7XG4gICAgICB0YXBbbWV0aG9kXSA9IChldmVudDogdW5rbm93bikgPT4gdGhpcy5jYXB0dXJlRmxvd0V2ZW50KG1ldGhvZCwgZXZlbnQpO1xuICAgIH1cbiAgICByZXR1cm4gdGFwIGFzIHVua25vd24gYXMgRmxvd1JlY29yZGVyO1xuICB9XG5cbiAgLyoqXG4gICAqIERpcmVjdCBjYXB0dXJlIGZvciBleGVjdXRvci1zeW50aGVzaXplZCBldmVudHMgdGhhdCBieXBhc3MgdGhlIGRpc3BhdGNoXG4gICAqIHNpdGVzIChlLmcuIHRoZSBzeW50aGV0aWMgYG9uUmVzdW1lYCB0aGUgZXhlY3V0b3IgZmlyZXMgb24gcmVzdW1lKS5cbiAgICovXG4gIGNhcHR1cmUoY2hhbm5lbDogQ2FwdHVyZUNoYW5uZWwsIG1ldGhvZDogc3RyaW5nLCBydW50aW1lU3RhZ2VJZDogc3RyaW5nLCBydW5JZDogc3RyaW5nLCBwYXlsb2FkOiB1bmtub3duKTogdm9pZCB7XG4gICAgdGhpcy5kaXNwYXRjaGVyLmNhcHR1cmUoeyBjaGFubmVsLCBtZXRob2QsIHJ1bnRpbWVTdGFnZUlkLCBydW5JZCwgcGF5bG9hZCB9KTtcbiAgfVxuXG4gIC8vIOKUgOKUgCBUZXJtaW5hbCBmbHVzaCArIGRyYWluIChCbG9jayA4KSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuICAvKipcbiAgICogU3luY2hyb25vdXNseSBkZWxpdmVyIGV2ZXJ5dGhpbmcgc3RpbGwgcXVldWVkIOKAlCBjYWxsZWQgYnkgdGhlIGV4ZWN1dG9yXG4gICAqIGF0IHRoZSBPVVRFUk1PU1QgcnVuIGJvdW5kYXJ5IChyZXNvbHZlLCByZWplY3QsIHBhdXNlKSwgQkVGT1JFIGBydW4oKWBcbiAgICogcmV0dXJucyAvIHJldGhyb3dzIC8gdGhlIGNoZWNrcG9pbnQgYmVjb21lcyBhdmFpbGFibGUuIEluc3BlY3RzXG4gICAqIGBmbHVzaFN5bmNgJ3MgYHJlbWFpbmluZ2AgKHJldmlld2VyIE4xKTogYGZsdXNoU3luY2AgYWxyZWFkeSBsb29wc1xuICAgKiBzbmFwc2hvdCByb3VuZHMgdXAgdG8gaXRzIHJ1bmF3YXktY2FzY2FkZSBjYXAsIHNvIGEgbm9uLXplcm8gcmVtYWluZGVyXG4gICAqIG1lYW5zIGEgcGF0aG9sb2dpY2FsIHNlbGYtZW5xdWV1ZWluZyBsaXN0ZW5lciDigJQgY291bnRlZCBpblxuICAgKiBgb2JzZXJ2ZXJTdGF0cy50ZXJtaW5hbFN0cmFuZGVkYCBhbmQgZGV2LXdhcm5lZCwgbmV2ZXIgc2lsZW50LlxuICAgKi9cbiAgdGVybWluYWxGbHVzaCgpOiB2b2lkIHtcbiAgICBjb25zdCB7IHJlbWFpbmluZyB9ID0gdGhpcy5kaXNwYXRjaGVyLmZsdXNoTm93KCk7XG4gICAgaWYgKHJlbWFpbmluZyA+IDApIHtcbiAgICAgIHRoaXMudGVybWluYWxTdHJhbmRlZCArPSByZW1haW5pbmc7XG4gICAgICBpZiAoaXNEZXZNb2RlKCkpIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgIGBbZm9vdHByaW50anNdIGRlZmVycmVkIG9ic2VydmVyczogdGVybWluYWwgZmx1c2ggaGl0IHRoZSBydW5hd2F5LWNhc2NhZGUgY2FwIHdpdGggJHtyZW1haW5pbmd9IGAgK1xuICAgICAgICAgICAgJ2V2ZW50KHMpIHN0aWxsIHF1ZXVlZCDigJQgYSBsaXN0ZW5lciBrZXB0IGVucXVldWVpbmcgZHVyaW5nIHRoZSBmbHVzaC4gVGhlIHN0cmFuZGVkIGNvdW50IGlzICcgK1xuICAgICAgICAgICAgJ3N1cmZhY2VkIG9uIHNuYXBzaG90Lm9ic2VydmVyU3RhdHMudGVybWluYWxTdHJhbmRlZC4nLFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBGbHVzaCB0aGUgYmFja2xvZywgdGhlbiBzZXR0bGUgYXN5bmMgbGlzdGVuZXIgY29udGludWF0aW9ucyB1bmRlciBhXG4gICAqIGRlYWRsaW5lIOKAlCB0aGUgc2VydmVybGVzcyAvIGdyYWNlZnVsLXNodXRkb3duIHBhdHRlcm4gKFJGQy0wMDEgwqcxMSkuXG4gICAqL1xuICBkcmFpbihvcHRzPzogeyB0aW1lb3V0TXM/OiBudW1iZXIgfSk6IFByb21pc2U8T2JzZXJ2ZXJEcmFpblJlc3VsdD4ge1xuICAgIHJldHVybiB0aGlzLmRpc3BhdGNoZXIuZHJhaW4ob3B0cyk7XG4gIH1cblxuICAvLyDilIDilIAgU3RhdHMgKEJsb2NrIDkpIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4gIC8qKiBUaGUgYHNuYXBzaG90Lm9ic2VydmVyU3RhdHNgIHBheWxvYWQg4oCUIEE0IHN0YXRzICsgQmxvY2sgOCBzdHJhbmRpbmcuICovXG4gIGdldFN0YXRzKCk6IE9ic2VydmVyU3RhdHMge1xuICAgIHJldHVybiB7IC4uLnRoaXMuZGlzcGF0Y2hlci5nZXRTdGF0cygpLCB0ZXJtaW5hbFN0cmFuZGVkOiB0aGlzLnRlcm1pbmFsU3RyYW5kZWQgfTtcbiAgfVxuXG4gIC8vIOKUgOKUgCBJbnRlcm5hbHMg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbiAgcHJpdmF0ZSBieUNoYW5uZWwoY2hhbm5lbDogQ2FwdHVyZUNoYW5uZWwpOiBBcnJheTxTY29wZVJlY29yZGVyIHwgRmxvd1JlY29yZGVyPiB7XG4gICAgY29uc3Qgb3V0OiBBcnJheTxTY29wZVJlY29yZGVyIHwgRmxvd1JlY29yZGVyPiA9IFtdO1xuICAgIGZvciAoY29uc3QgeyByZWNvcmRlciwgY2hhbm5lbHMgfSBvZiB0aGlzLnJlZ2lzdHJhdGlvbnMudmFsdWVzKCkpIHtcbiAgICAgIGlmIChjaGFubmVscy5oYXMoY2hhbm5lbCkpIG91dC5wdXNoKHJlY29yZGVyKTtcbiAgICB9XG4gICAgcmV0dXJuIG91dDtcbiAgfVxuXG4gIC8qKiBOb3JtYWwgcHJvcGVydHkgbG9va3VwIOKAlCBpbnZvY2F0aW9uIHBhcml0eSB3aXRoIHRoZSBpbmxpbmUgdGllci4gKi9cbiAgcHJpdmF0ZSBhbnlJbXBsZW1lbnRzKHJlY29yZGVyczogQXJyYXk8U2NvcGVSZWNvcmRlciB8IEZsb3dSZWNvcmRlcj4sIG1ldGhvZDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHJlY29yZGVycy5zb21lKChyKSA9PiB0eXBlb2YgKHIgYXMgdW5rbm93biBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPilbbWV0aG9kXSA9PT0gJ2Z1bmN0aW9uJyk7XG4gIH1cblxuICAvKiogU2NvcGUvZW1pdCBldmVudHMgY2FycnkgdGhlaXIgb3duIGlkcyAoYHJ1bnRpbWVTdGFnZUlkYCArIGBwaXBlbGluZUlkYCkuICovXG4gIHByaXZhdGUgY2FwdHVyZVNjb3BlRXZlbnQoY2hhbm5lbDogQ2FwdHVyZUNoYW5uZWwsIG1ldGhvZDogc3RyaW5nLCBldmVudDogdW5rbm93bik6IHZvaWQge1xuICAgIGNvbnN0IGUgPSBldmVudCBhcyB7IHJ1bnRpbWVTdGFnZUlkPzogc3RyaW5nOyBwaXBlbGluZUlkPzogc3RyaW5nIH0gfCB1bmRlZmluZWQ7XG4gICAgdGhpcy5kaXNwYXRjaGVyLmNhcHR1cmUoe1xuICAgICAgY2hhbm5lbCxcbiAgICAgIG1ldGhvZCxcbiAgICAgIHJ1bnRpbWVTdGFnZUlkOiBlPy5ydW50aW1lU3RhZ2VJZCA/PyAnJyxcbiAgICAgIHJ1bklkOiBlPy5waXBlbGluZUlkID8/ICcnLFxuICAgICAgcGF5bG9hZDogZXZlbnQsXG4gICAgfSk7XG4gIH1cblxuICAvKiogRmxvdyBldmVudHMgY2FycnkgaWRzIG9uIGB0cmF2ZXJzYWxDb250ZXh0YCAoYWJzZW50IG9uIGEgZmV3IGV2ZW50cykuICovXG4gIHByaXZhdGUgY2FwdHVyZUZsb3dFdmVudChtZXRob2Q6IHN0cmluZywgZXZlbnQ6IHVua25vd24pOiB2b2lkIHtcbiAgICBjb25zdCBjdHggPSAoZXZlbnQgYXMgeyB0cmF2ZXJzYWxDb250ZXh0PzogeyBydW50aW1lU3RhZ2VJZD86IHN0cmluZzsgcnVuSWQ/OiBzdHJpbmcgfSB9IHwgdW5kZWZpbmVkKVxuICAgICAgPy50cmF2ZXJzYWxDb250ZXh0O1xuICAgIHRoaXMuZGlzcGF0Y2hlci5jYXB0dXJlKHtcbiAgICAgIGNoYW5uZWw6ICdmbG93JyxcbiAgICAgIG1ldGhvZCxcbiAgICAgIHJ1bnRpbWVTdGFnZUlkOiBjdHg/LnJ1bnRpbWVTdGFnZUlkID8/ICcnLFxuICAgICAgcnVuSWQ6IGN0eD8ucnVuSWQgPz8gJycsXG4gICAgICBwYXlsb2FkOiBldmVudCxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSb3V0ZSBhIGRlZmVycmVkIGxpc3RlbmVyIGZhaWx1cmUgaW50byB0aGUgZXhpc3RpbmcgcmVjb3JkZXIgZXJyb3JcbiAgICogY2hhbm5lbDogZXZlcnkgcmVnaXN0ZXJlZCBzY29wZSBvYnNlcnZlciDigJQgdGhlIGZhaWxpbmcgb25lIGluY2x1ZGVkLCBpblxuICAgKiByZWdpc3RyYXRpb24gb3JkZXIg4oCUIHJlY2VpdmVzIHRoZSBzY29wZS1zaGFwZWQgYG9uRXJyb3JgIGV2ZW50IHRoZSBpbmxpbmVcbiAgICogdGllciBidWlsZHMgKGByZWNvcmRlckZhaWx1cmVFdmVudGApLCBhbmQgYSB0aHJvdyBmcm9tIGBvbkVycm9yYCBpdHNlbGZcbiAgICogaXMgbm90IHJvdXRlZCBhZ2FpbjogdGhlIGNvbnRyYWN0IHRoZSBpbmxpbmUgdGllciBob25vcnMgd2hlbiBhIHJlY29yZGVyXG4gICAqIHRocm93cyBtaWQtZGlzcGF0Y2ggKDkuMzkuMCDigJQgYmVmb3JlLCB0aGUgZmFpbGluZyBsaXN0ZW5lciB3YXMgc2tpcHBlZCxcbiAgICogc28gYSBDb21wb3NpdGVSZWNvcmRlcidzIG90aGVyIGNoaWxkcmVuIG5ldmVyIGhlYXJkIGEgc2libGluZydzIHRocm93KS5cbiAgICogVGhlIGVycm9yIHNpbmsgbXVzdCBuZXZlciBiZWNvbWUgYW4gZXJyb3Igc291cmNlOiBzaW5rIHRocm93cyBhcmVcbiAgICogc3dhbGxvd2VkIChpc29sYXRpb24gaXMgYWJzb2x1dGUpLlxuICAgKi9cbiAgcHJpdmF0ZSByb3V0ZUxpc3RlbmVyRXJyb3IoXG4gICAgZXJyb3I6IHVua25vd24sXG4gICAgbGlzdGVuZXJJZDogc3RyaW5nLFxuICAgIGVudmVsb3BlOiBDYXB0dXJlRW52ZWxvcGUsXG4gICAgcGhhc2U6ICdzeW5jJyB8ICdhc3luYycsXG4gICk6IHZvaWQge1xuICAgIC8vIElubGluZSBwYXJpdHkgKDkuMzkuMCk6IHRoZSBpbmxpbmUgdGllciBoYW5kcyBhIHJlY29yZGVyJ3MgdGhyb3cgdG8gRVZFUlkgcmVjb3JkZXIgb24gdGhlXG4gICAgLy8gc2NvcGUgbGlzdCDigJQgdGhlIHRocm93ZXIgaW5jbHVkZWQsIHNvIGEgQ29tcG9zaXRlUmVjb3JkZXIncyBvdGhlciBjaGlsZHJlbiBoZWFyIGl0IOKAlCBhbmRcbiAgICAvLyBkcm9wcyBhIHRocm93IGZyb20gYG9uRXJyb3JgIGl0c2VsZi4gU2FtZSBoZXJlLCB3aXRoIHRoZSBzYW1lIGV2ZW50IChgcmVjb3JkZXJGYWlsdXJlRXZlbnRgKS5cbiAgICBpZiAoZW52ZWxvcGUubWV0aG9kICE9PSAnb25FcnJvcicpIHRoaXMuZGVsaXZlckxpc3RlbmVyRXJyb3IoZXJyb3IsIGVudmVsb3BlKTtcbiAgICBpZiAoaXNEZXZNb2RlKCkpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgIGBbZm9vdHByaW50anNdIGRlZmVycmVkIG9ic2VydmVyICcke2xpc3RlbmVySWR9JyBmYWlsZWQgKCR7cGhhc2V9KSBoYW5kbGluZyBgICtcbiAgICAgICAgICBgJHtlbnZlbG9wZS5jaGFubmVsfS4ke2VudmVsb3BlLm1ldGhvZH0gKHNlcSAke2VudmVsb3BlLnNlcX0pOiAke2Rlc2NyaWJlVGhyb3duKGVycm9yKX1gLFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvKiogSGFuZCBvbmUgbGlzdGVuZXIgZmFpbHVyZSB0byBldmVyeSBzY29wZSBvYnNlcnZlciBhcyBhbiBgb25FcnJvcmAg4oCUIHNlZSB7QGxpbmsgcm91dGVMaXN0ZW5lckVycm9yfS4gKi9cbiAgcHJpdmF0ZSBkZWxpdmVyTGlzdGVuZXJFcnJvcihlcnJvcjogdW5rbm93biwgZW52ZWxvcGU6IENhcHR1cmVFbnZlbG9wZSk6IHZvaWQge1xuICAgIGNvbnN0IGVycm9yRXZlbnQgPSByZWNvcmRlckZhaWx1cmVFdmVudChcbiAgICAgIHtcbiAgICAgICAgc3RhZ2VOYW1lOiAnJyxcbiAgICAgICAgc3RhZ2VJZDogc3RhZ2VJZE9mKGVudmVsb3BlLnJ1bnRpbWVTdGFnZUlkKSxcbiAgICAgICAgcnVudGltZVN0YWdlSWQ6IGVudmVsb3BlLnJ1bnRpbWVTdGFnZUlkLFxuICAgICAgICBwaXBlbGluZUlkOiBlbnZlbG9wZS5ydW5JZCxcbiAgICAgIH0sXG4gICAgICBlcnJvcixcbiAgICAgIGVudmVsb3BlLm1ldGhvZCxcbiAgICApO1xuICAgIGZvciAoY29uc3QgWywgeyByZWNvcmRlciwgY2hhbm5lbHMgfV0gb2YgdGhpcy5yZWdpc3RyYXRpb25zKSB7XG4gICAgICAvLyBJbmxpbmUtdGllciBwYXJpdHkgKHJldmlldyBDUklUSUNBTC0xKTogdGhlIHN5bnRoZXNpemVkIGV2ZW50IGlzXG4gICAgICAvLyBzY29wZS10eXBlZCwgc28gaXQgcmVhY2hlcyBPTkxZIHJlY29yZGVycyByZWdpc3RlcmVkIG9uIHRoZSBzY29wZVxuICAgICAgLy8gbGlzdHMg4oCUIGEgZmxvdy1vbmx5IHJlY29yZGVyIG5ldmVyIHJlY2VpdmVzIHNjb3BlLWNoYW5uZWwgZXJyb3JzXG4gICAgICAvLyBpbmxpbmUgYW5kIG11c3Qgbm90IGhlcmUgZWl0aGVyLlxuICAgICAgaWYgKCFjaGFubmVscy5oYXMoJ3Njb3BlJykpIGNvbnRpbnVlO1xuICAgICAgdHJ5IHtcbiAgICAgICAgaW52b2tlUmVjb3JkZXJIb29rKHJlY29yZGVyLCAnb25FcnJvcicsIGVycm9yRXZlbnQpO1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIC8vIFN3YWxsb3cg4oCUIHNhbWUgcnVsZSBhcyBEZWZlcnJlZERpc3BhdGNoZXIuc2FmZU9uRXJyb3IuXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqIERpc3BhdGNoZXItbGV2ZWwgb3B0aW9ucyBhcmUgZmlyc3QtYXR0YWNoLXdpbnM7IGRpZmZlcmluZyBsYXRlciB2YWx1ZXMgZGV2LXdhcm4uICovXG4gIHByaXZhdGUgd2Fybk9uQ29uZmlnQ29uZmxpY3QocmVjb3JkZXJJZDogc3RyaW5nLCBvcHRpb25zPzogQXR0YWNoUmVjb3JkZXJPcHRpb25zKTogdm9pZCB7XG4gICAgaWYgKCFvcHRpb25zKSByZXR1cm47XG4gICAgY29uc3QgY29uZmxpY3RzOiBzdHJpbmdbXSA9IFtdO1xuICAgIGNvbnN0IHJlcXVlc3RlZDogQXBwbGllZERpc3BhdGNoZXJDb25maWcgPSB7XG4gICAgICBjYXB0dXJlOiBvcHRpb25zLmNhcHR1cmUsXG4gICAgICBtYXhRdWV1ZTogb3B0aW9ucy5tYXhRdWV1ZSxcbiAgICAgIG92ZXJmbG93OiBvcHRpb25zLm92ZXJmbG93LFxuICAgICAgc2FtcGxlRXZlcnk6IG9wdGlvbnMuc2FtcGxlRXZlcnksXG4gICAgICBmbHVzaEJ1ZGdldE1zOiBvcHRpb25zLmZsdXNoQnVkZ2V0TXMsXG4gICAgfTtcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhyZXF1ZXN0ZWQpIGFzIEFycmF5PGtleW9mIEFwcGxpZWREaXNwYXRjaGVyQ29uZmlnPikge1xuICAgICAgaWYgKHJlcXVlc3RlZFtrZXldICE9PSB1bmRlZmluZWQgJiYgcmVxdWVzdGVkW2tleV0gIT09IHRoaXMuYXBwbGllZENvbmZpZ1trZXldKSB7XG4gICAgICAgIGNvbmZsaWN0cy5wdXNoKFN0cmluZyhrZXkpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGNvbmZsaWN0cy5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLmRldldhcm5EZWR1cGVkKFxuICAgICAgICBgW2Zvb3RwcmludGpzXSBhdHRhY2ggJyR7cmVjb3JkZXJJZH0nOiB0aGUgZXhlY3V0b3IncyBkZWZlcnJlZC1vYnNlcnZlciBxdWV1ZSB3YXMgYWxyZWFkeSBgICtcbiAgICAgICAgICBgY29uZmlndXJlZCBieSB0aGUgZmlyc3QgZGVmZXJyZWQgYXR0YWNoIOKAlCBpZ25vcmluZyBkaWZmZXJpbmcgb3B0aW9uKHMpOiAke2NvbmZsaWN0cy5qb2luKCcsICcpfS4gYCArXG4gICAgICAgICAgJ09uZSBleGVjdXRvciBoYXMgT05FIG1lcmdlZCBxdWV1ZTsgY29uZmlndXJlIGl0IG9uIHRoZSBmaXJzdCBkZWZlcnJlZCBhdHRhY2guJyxcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgLyoqIGBpc0Rldk1vZGUoKWAtZ2F0ZWQsIGRlZHVwbGljYXRlZCB3YXJuZXIg4oCUIHRoZSBib3VuZCB3YXJuIHNlYW0uICovXG4gIHByaXZhdGUgZGV2V2FybkRlZHVwZWQobWVzc2FnZTogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKCFpc0Rldk1vZGUoKSkgcmV0dXJuO1xuICAgIGlmICh0aGlzLndhcm5lZE1lc3NhZ2VzLmhhcyhtZXNzYWdlKSkgcmV0dXJuO1xuICAgIHRoaXMud2FybmVkTWVzc2FnZXMuYWRkKG1lc3NhZ2UpO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgY29uc29sZS53YXJuKG1lc3NhZ2UpO1xuICB9XG59XG4iXX0=
366
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRGVmZXJyZWRPYnNlcnZlclRpZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3J1bm5lci9EZWZlcnJlZE9ic2VydmVyVGllci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBeUNHOzs7QUFFSCx5Q0FBc0M7QUFFdEMsNERBQThEO0FBQzlELDhDQUEwQztBQUUxQyx5REFRb0M7QUFDcEMsbURBQXFGO0FBNkRyRix5RkFBeUY7QUFDNUUsUUFBQSxxQkFBcUIsR0FBRyx3QkFBd0IsQ0FBQztBQUNqRCxRQUFBLG9CQUFvQixHQUFHLHVCQUF1QixDQUFDO0FBRTVELDZFQUE2RTtBQUM3RSxNQUFNLG1CQUFtQixHQUE4QixDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQztBQUN6RSwrQ0FBK0M7QUFDL0MsTUFBTSxrQkFBa0IsR0FBOEIsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQWlCL0QsTUFBYSxvQkFBb0I7SUFDZCxVQUFVLENBQXFCO0lBQy9CLGFBQWEsR0FBRyxJQUFJLEdBQUcsRUFBZ0MsQ0FBQztJQUN4RCxhQUFhLENBQTBCO0lBQ3hELDJFQUEyRTtJQUMxRCxjQUFjLEdBQUcsSUFBSSxHQUFHLEVBQVUsQ0FBQztJQUM1QyxnQkFBZ0IsR0FBRyxDQUFDLENBQUM7SUFFN0IsWUFBWSxPQUErQjtRQUN6QyxJQUFJLENBQUMsYUFBYSxHQUFHO1lBQ25CLG9FQUFvRTtZQUNwRSxrRUFBa0U7WUFDbEUscUVBQXFFO1lBQ3JFLGdFQUFnRTtZQUNoRSxzRUFBc0U7WUFDdEUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLElBQUksT0FBTztZQUNwQyxRQUFRLEVBQUUsT0FBTyxFQUFFLFFBQVE7WUFDM0IsUUFBUSxFQUFFLE9BQU8sRUFBRSxRQUFRO1lBQzNCLFdBQVcsRUFBRSxPQUFPLEVBQUUsV0FBVztZQUNqQyxhQUFhLEVBQUUsT0FB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QyxPQUFPLENBQUMsQ0FBQztRQUNqQyxzQ0FBc0M7UUFDdEMsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUN4QixDQUFDO0NBQ0Y7QUExVUQsb0RBMFVDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBydW5uZXIvRGVmZXJyZWRPYnNlcnZlclRpZXIudHMg4oCUIFJGQy0wMDEgQmxvY2tzIDbigJM5OiB0aGUgZW5naW5lIHdpcmluZyBvZlxuICogdGhlIGRlZmVycmVkLW9ic2VydmVyIHBpcGVsaW5lLlxuICpcbiAqIFBhdHRlcm46ICBUaGluIGFkYXB0ZXIgYmV0d2VlbiB0aGUgZXhlY3V0b3IncyB0aHJlZSBvYnNlcnZlciBjaGFubmVscyBhbmRcbiAqICAgICAgICAgICB0aGUgUFVSRSBgb2JzZXJ2ZXItcXVldWVgIG1vZHVsZS4gVGhlIHB1cmUgbW9kdWxlIHN0YXlzXG4gKiAgICAgICAgICAgZW5naW5lLWZyZWUgKGl0IGltcG9ydHMgbm90aGluZyBmcm9tIHRoZSBlbmdpbmUg4oCUIHRoZSBlbmdpbmVcbiAqICAgICAgICAgICBpbXBvcnRzIElUKTsgdGhpcyB0aWVyIG93bnMgZXZlcnkgZW5naW5lLWZsYXZvcmVkIGNvbmNlcm46XG4gKiAgICAgICAgICAgICAtIHRoZSBgaXNEZXZNb2RlKClgLWdhdGVkLCBkZWR1cGxpY2F0ZWQgYENhcHR1cmVIb29rcy53YXJuYFxuICogICAgICAgICAgICAgICBiaW5kaW5nICh0aGUgZGV2LXdhcm4gc2VhbSwgUkZDLTAwMSDCp1wiUmVzb2x1dGlvblwiKTtcbiAqICAgICAgICAgICAgIC0gcm91dGluZyBgRGVmZXJyZWREaXNwYXRjaGVyLm9uRXJyb3JgIGludG8gdGhlIGV4aXN0aW5nXG4gKiAgICAgICAgICAgICAgIHJlY29yZGVyIGVycm9yIGNoYW5uZWwgKGBvbkVycm9yYCBvbiBzaWJsaW5nIG9ic2VydmVycyk7XG4gKiAgICAgICAgICAgICAtIHRoZSBjYXB0dXJlIFRBUFMg4oCUIHN5bnRoZXRpYyByZWNvcmRlcnMgcGxhY2VkIG9uIHRoZVxuICogICAgICAgICAgICAgICBleGlzdGluZyBpbmxpbmUgZGlzcGF0Y2ggbGlzdHMgc28gdGhlIHRocmVlIGRpc3BhdGNoIHNpdGVzXG4gKiAgICAgICAgICAgICAgIChgU2NvcGVGYWNhZGUuX2ludm9rZUhvb2tgLCBgU2NvcGVGYWNhZGUuZW1pdEV2ZW50YCxcbiAqICAgICAgICAgICAgICAgYEZsb3dSZWNvcmRlckRpc3BhdGNoZXJgKSBuZWVkIE5PIHBlci1zaXRlIHRpZXIgbG9naWM6IGFcbiAqICAgICAgICAgICAgICAgdGFwJ3MgaG9vayBib2R5IElTIGBkaXNwYXRjaGVyLmNhcHR1cmUoLi4uKWAsIGFuZCBiZWNhdXNlXG4gKiAgICAgICAgICAgICAgIHRoZSB0YXAgc2l0cyBpbiB0aGUgc2FtZSBsb29wIGFzIGlubGluZSByZWNvcmRlcnMgaXQgc2Vlc1xuICogICAgICAgICAgICAgICBleGFjdGx5IHRoZSBwb3N0LXJlZGFjdGlvbiBldmVudCBvYmplY3QgaW5saW5lIG9ic2VydmVyc1xuICogICAgICAgICAgICAgICBzZWUg4oCUIGNhcHR1cmUgY2FuIG5ldmVyIG9ic2VydmUgYSBwcmUtcmVkYWN0aW9uIHZhbHVlO1xuICogICAgICAgICAgICAgLSB0aGUgdGVybWluYWwgZmx1c2ggKEJsb2NrIDgpIHdpdGggaG9uZXN0IHN0cmFuZGluZ1xuICogICAgICAgICAgICAgICBhY2NvdW50aW5nLCBhbmQgdGhlIEJsb2NrIDkgc3RhdHMgc3VyZmFjZS5cbiAqXG4gKiBSb2xlOiAgICAgT25lIGluc3RhbmNlIHBlciBgRmxvd0NoYXJ0RXhlY3V0b3JgLCBjcmVhdGVkIExBWklMWSBvbiB0aGVcbiAqICAgICAgICAgICBmaXJzdCBgZGVsaXZlcnk6ICdkZWZlcnJlZCdgIGF0dGFjaCAoemVybyBhbGxvY2F0aW9uIHdoZW4gbm9ib2R5XG4gKiAgICAgICAgICAgb3B0cyBpbiDigJQgbWlycm9ycyB0aGUgZW1pdCBmYXN0LXBhdGggcHJlY2VkZW50KS4gSG9sZHMgdGhlIE9ORVxuICogICAgICAgICAgIGBEZWZlcnJlZERpc3BhdGNoZXJgIChvbmUgbWVyZ2VkIHF1ZXVlLCB0b3RhbCBvcmRlciBhY3Jvc3NcbiAqICAgICAgICAgICBjaGFubmVscykgcGx1cyB0aGUgcmVnaXN0cnkgb2YgZGVmZXJyZWQgcmVjb3JkZXJzLlxuICpcbiAqIERlbGl2ZXJ5OiBhIGRlZmVycmVkIHJlY29yZGVyJ3MgaG9va3MgYXJlIGludm9rZWQgdGhyb3VnaCB0aGUgU0FNRVxuICogYGludm9rZVJlY29yZGVySG9va2AgaGVscGVyIHRoZSBpbmxpbmUgdGllciB1c2VzIChSRkMtMDAxIMKnOSBtaXRpZ2F0aW9uKSDigJRcbiAqIG9uZSBiZWF0IGJlaGluZCwgd2l0aCBgZW52ZWxvcGUucGF5bG9hZGAgbWF0ZXJpYWxpemVkIHBlciB0aGUgY2FwdHVyZVxuICogcG9saWN5IChgJ2Nsb25lJ2AgZGVmYXVsdCBhdCB0aGlzIGF0dGFjaCB0aWVyIOKAlCBmdWxsIHN0cnVjdHVyYWwgY29weSxcbiAqIGV2ZW50LXNoYXBlIGNvbXBhdGlibGUgd2l0aCBpbmxpbmU7IGV4cGxpY2l0IGAnc3VtbWFyeSdgIOKAlCBib3VuZGVkLFxuICogcmVmZXJlbmNlLWZyZWU7IGAncmVmJ2Ag4oCUIHRoZSBsaXZlIGV2ZW50IG9iamVjdCwgZGV2LXdhcm5lZCkuIFRoZSBzdGFuZGFsb25lXG4gKiBxdWV1ZSByZXRhaW5zIGl0cyBgJ3N1bW1hcnknYCBkZWZhdWx0IChgb2JzZXJ2ZXItcXVldWUvbWVyZ2VkUXVldWUudHMgwrcgTWVyZ2VkUXVldWVgKS5cbiAqXG4gKiBDaGFubmVsIGZpbHRlcjogYSByZWdpc3RyYXRpb24gcmVtZW1iZXJzIHdoaWNoIGNoYW5uZWxzIHdvdWxkIGhhdmVcbiAqIHJlYWNoZWQgdGhlIHJlY29yZGVyIGlubGluZSAoc2NvcGUtbGlzdCByZWNvcmRlcnMgc2VlIGBzY29wZWAgKyBgZW1pdGBcbiAqIGVudmVsb3BlczsgZmxvdy1saXN0IHJlY29yZGVycyBzZWUgYGZsb3dgIGVudmVsb3BlcykgYW5kIHNraXBzIHRoZSByZXN0IOKAlFxuICogc2FtZSByZWFjaCBhcyB0aGUgaW5saW5lIHRpZXIsIG9uZSBiZWF0IGJlaGluZC5cbiAqL1xuXG5pbXBvcnQgeyBzdGFnZUlkT2YgfSBmcm9tICdmb290dHJhY2UnO1xuXG5pbXBvcnQgeyBpbnZva2VSZWNvcmRlckhvb2sgfSBmcm9tICcuLi9jYXB0dXJlL2ludm9rZUhvb2suanMnO1xuaW1wb3J0IHsgaXNEZXZNb2RlIH0gZnJvbSAnLi4vZGV2TW9kZS5qcyc7XG5pbXBvcnQgdHlwZSB7IEZsb3dSZWNvcmRlciB9IGZyb20gJy4uL2VuZ2luZS9uYXJyYXRpdmUvdHlwZXMuanMnO1xuaW1wb3J0IHtcbiAgdHlwZSBDYXB0dXJlQ2hhbm5lbCxcbiAgdHlwZSBDYXB0dXJlRW52ZWxvcGUsXG4gIHR5cGUgQ2FwdHVyZVBvbGljeSxcbiAgdHlwZSBEaXNwYXRjaGVyU3RhdHMsXG4gIHR5cGUgRHJhaW5SZXN1bHQsXG4gIHR5cGUgT3ZlcmZsb3dQb2xpY3ksXG4gIERlZmVycmVkRGlzcGF0Y2hlcixcbn0gZnJvbSAnLi4vb2JzZXJ2ZXItcXVldWUvaW5kZXguanMnO1xuaW1wb3J0IHsgZGVzY3JpYmVUaHJvd24sIGhvb2tzT24sIHJlY29yZGVyRmFpbHVyZUV2ZW50IH0gZnJvbSAnLi4vcmVjb3JkZXIvaG9va3MuanMnO1xuaW1wb3J0IHR5cGUgeyBTY29wZVJlY29yZGVyIH0gZnJvbSAnLi4vc2NvcGUvdHlwZXMuanMnO1xuXG4vKiogRGVsaXZlcnkgdGllciBmb3IgYW4gYXR0YWNoZWQgb2JzZXJ2ZXIgKFJGQy0wMDEpLiAqL1xuZXhwb3J0IHR5cGUgT2JzZXJ2ZXJEZWxpdmVyeSA9ICdpbmxpbmUnIHwgJ2RlZmVycmVkJztcblxuLyoqXG4gKiBPcHRpb25zIGJhZyBhY2NlcHRlZCBieSBldmVyeSBgYXR0YWNoKlJlY29yZGVyYCBjYWxsLlxuICpcbiAqIGBkZWxpdmVyeTogJ2RlZmVycmVkJ2Agb3B0cyB0aGUgcmVjb3JkZXIgaW50byB0aGUgYm91bmRlZCBjYXB0dXJlIHF1ZXVlXG4gKiAoXCJvbmUgYmVhdCBiZWhpbmRcIik7IGFic2VudCAvIGAnaW5saW5lJ2Aga2VlcHMgdGhlIGhpc3RvcmljYWwgc3luY2hyb25vdXNcbiAqIGNhbGwg4oCUIGJ5dGUtaWRlbnRpY2FsIHRvIHRoZSBwcmUtUkZDIHBhdGguXG4gKlxuICogVGhlIHJlbWFpbmluZyBmaWVsZHMgY29uZmlndXJlIHRoZSBleGVjdXRvcidzIE9ORSBzaGFyZWQgZGlzcGF0Y2hlciBhbmRcbiAqIGFyZSBhcHBsaWVkIHdoZW4gdGhlIEZJUlNUIGRlZmVycmVkIGF0dGFjaCBjcmVhdGVzIGl0OyBsYXRlciBhdHRhY2hlc1xuICogcGFzc2luZyBkaWZmZXJlbnQgdmFsdWVzIGdldCBhIGRldi1tb2RlIHdhcm5pbmcgYW5kIGtlZXAgdGhlIG9yaWdpbmFsXG4gKiBjb25maWd1cmF0aW9uIChvbmUgcXVldWUgcGVyIGV4ZWN1dG9yIOKAlCBwZXItcmVjb3JkZXIgcXVldWVzIHdvdWxkIGJyZWFrXG4gKiB0aGUgdG90YWwgY3Jvc3MtY2hhbm5lbCBvcmRlcikuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXR0YWNoUmVjb3JkZXJPcHRpb25zIHtcbiAgLyoqIGAnZGVmZXJyZWQnYCA9IGNhcHR1cmUg4oaSIHF1ZXVlIOKGkiBuZXh0LWNoZWNrcG9pbnQgZGVsaXZlcnkuIERlZmF1bHQgYCdpbmxpbmUnYC4gKi9cbiAgcmVhZG9ubHkgZGVsaXZlcnk/OiBPYnNlcnZlckRlbGl2ZXJ5O1xuICAvKipcbiAgICogUGF5bG9hZCBtYXRlcmlhbGl6YXRpb24gYXQgY2FwdHVyZSB0aW1lLiBEZWZhdWx0IGAnY2xvbmUnYCDigJQgeW91clxuICAgKiByZWNvcmRlcidzIGhvb2tzIHJlY2VpdmUgdGhlIFNBTUUgZXZlbnQgc2hhcGUgYXMgaW5saW5lIGRlbGl2ZXJ5XG4gICAqIChgc3RydWN0dXJlZENsb25lYGQ7IGBlLmtleWAvYGUudmFsdWVgL2BlLnJ1bnRpbWVTdGFnZUlkYCBhbGwgd29ya1xuICAgKiB1bmNoYW5nZWQpLCBzbyBgeyBkZWxpdmVyeTogJ2RlZmVycmVkJyB9YCBpcyBhIGRyb3AtaW4gcG9ydC5cbiAgICogYCdzdW1tYXJ5J2Ag4oCUIGEgYm91bmRlZCB0eXBlL3NpemUvcHJldmlldyBkaWdlc3QgKGBQYXlsb2FkU3VtbWFyeWApXG4gICAqIGluc3RlYWQgb2YgdGhlIGV2ZW50IHNoYXBlOiBjaGVhcGVyIGNhcHR1cmUgZm9yIHRlbGVtZXRyeS1vbmx5XG4gICAqIGNvbnN1bWVycyB0aGF0IGRvbid0IHJlYWQgZG9tYWluIGZpZWxkcy4gYCdyZWYnYCDigJQgcGFzcy10aHJvdWdoIGJ5XG4gICAqIHJlZmVyZW5jZTsgdGhlIGNhbGxlciBhc3NlcnRzIGltbXV0YWJpbGl0eSAoZGV2LW1vZGUgd2FybnMpLlxuICAgKi9cbiAgcmVhZG9ubHkgY2FwdHVyZT86IENhcHR1cmVQb2xpY3k7XG4gIC8qKiBRdWV1ZSBib3VuZCDigJQgZGVmYXVsdCAxMCAwMDAuICovXG4gIHJlYWRvbmx5IG1heFF1ZXVlPzogbnVtYmVyO1xuICAvKiogT3ZlcmZsb3cgcG9saWN5IGF0IGBtYXhRdWV1ZWAg4oCUIGRlZmF1bHQgYCdkcm9wLW9sZGVzdCdgLiAqL1xuICByZWFkb25seSBvdmVyZmxvdz86IE92ZXJmbG93UG9saWN5O1xuICAvKiogYCdzYW1wbGUnYCBvdmVyZmxvdyBvbmx5IOKAlCBhZG1pdCAxIGluIHRoaXMgbWFueSBzYXR1cmF0ZWQgYXJyaXZhbHMuICovXG4gIHJlYWRvbmx5IHNhbXBsZUV2ZXJ5PzogbnVtYmVyO1xuICAvKiogUGVyLWNoZWNrcG9pbnQgZmx1c2ggYnVkZ2V0LCBtcyAoQTEpIOKAlCBkZWZhdWx0IDI7IGBJbmZpbml0eWAgPSBmdWxsIGRyYWluLiAqL1xuICByZWFkb25seSBmbHVzaEJ1ZGdldE1zPzogbnVtYmVyO1xufVxuXG4vKipcbiAqIFRoZSBCbG9jayA5IG9ic2VydmFiaWxpdHkgc3VyZmFjZSDigJQgYHNuYXBzaG90Lm9ic2VydmVyU3RhdHNgLiBUaGUgQTRcbiAqIGRpc3BhdGNoZXIgc3RhdHMgcGx1cyB0aGUgdGVybWluYWwtZmx1c2ggc3RyYW5kaW5nIGNvdW50IGZyb20gQmxvY2sgOC5cbiAqIFByZXNlbnQgb24gYFJ1bnRpbWVTbmFwc2hvdGAgb25seSB3aGVuIGEgZGVmZXJyZWQgb2JzZXJ2ZXIgd2FzIGF0dGFjaGVkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE9ic2VydmVyU3RhdHMgZXh0ZW5kcyBEaXNwYXRjaGVyU3RhdHMge1xuICAvKipcbiAgICogRW52ZWxvcGVzIHN0aWxsIHF1ZXVlZCB3aGVuIGEgdGVybWluYWwgZmx1c2ggaGl0IGl0cyBydW5hd2F5LWNhc2NhZGVcbiAgICogcm91bmQgY2FwIChCbG9jayA4KS4gYDBgIGluIGFueSBzYW5lIHJ1biDigJQgYSBub24temVybyB2YWx1ZSBtZWFucyBhXG4gICAqIGxpc3RlbmVyIGtlcHQgZW5xdWV1ZWluZyB3b3JrIGF0IGVuZC1vZi1ydW4gYW5kIGRlbGl2ZXJ5IHdhcyBjdXQgb2ZmXG4gICAqIChhbHNvIGRldi13YXJuZWQgYXQgdGhlIG1vbWVudCBpdCBoYXBwZW5lZCkuIE5ldmVyIHNpbGVudC5cbiAgICovXG4gIHJlYWRvbmx5IHRlcm1pbmFsU3RyYW5kZWQ6IG51bWJlcjtcbn1cblxuLyoqIFJlc3VsdCBzaGFwZSBvZiBgZXhlY3V0b3IuZHJhaW5PYnNlcnZlcnMoKWAg4oCUIHNlZSBgRHJhaW5SZXN1bHRgLiAqL1xuZXhwb3J0IHR5cGUgT2JzZXJ2ZXJEcmFpblJlc3VsdCA9IERyYWluUmVzdWx0O1xuXG4vKiogV2VsbC1rbm93biBpZHMgb2YgdGhlIHN5bnRoZXRpYyBjYXB0dXJlIHRhcHMgKGludGVybmFsLCBkb2N1bWVudGVkIGZvciBkZWJ1Z2dpbmcpLiAqL1xuZXhwb3J0IGNvbnN0IERFRkVSUkVEX1NDT1BFX1RBUF9JRCA9ICdfX2RlZmVycmVkLXNjb3BlLXRhcF9fJztcbmV4cG9ydCBjb25zdCBERUZFUlJFRF9GTE9XX1RBUF9JRCA9ICdfX2RlZmVycmVkLWZsb3ctdGFwX18nO1xuXG4vKiogQ2hhbm5lbCByZWFjaCBvZiB0aGUgc2NvcGUtcmVjb3JkZXIgbGlzdCAoc2NvcGUgZXZlbnRzICsgZW1pdCBldmVudHMpLiAqL1xuY29uc3QgU0NPUEVfTElTVF9DSEFOTkVMUzogcmVhZG9ubHkgQ2FwdHVyZUNoYW5uZWxbXSA9IFsnc2NvcGUnLCAnZW1pdCddO1xuLyoqIENoYW5uZWwgcmVhY2ggb2YgdGhlIGZsb3ctcmVjb3JkZXIgbGlzdC4gKi9cbmNvbnN0IEZMT1dfTElTVF9DSEFOTkVMUzogcmVhZG9ubHkgQ2FwdHVyZUNoYW5uZWxbXSA9IFsnZmxvdyddO1xuXG4vKiogRGlzcGF0Y2hlci1sZXZlbCBvcHRpb25zIHNuYXBzaG90LCBrZXB0IGZvciBjb25mbGljdCBkZXRlY3Rpb24uICovXG5pbnRlcmZhY2UgQXBwbGllZERpc3BhdGNoZXJDb25maWcge1xuICByZWFkb25seSBjYXB0dXJlPzogQ2FwdHVyZVBvbGljeTtcbiAgcmVhZG9ubHkgbWF4UXVldWU/OiBudW1iZXI7XG4gIHJlYWRvbmx5IG92ZXJmbG93PzogT3ZlcmZsb3dQb2xpY3k7XG4gIHJlYWRvbmx5IHNhbXBsZUV2ZXJ5PzogbnVtYmVyO1xuICByZWFkb25seSBmbHVzaEJ1ZGdldE1zPzogbnVtYmVyO1xufVxuXG5pbnRlcmZhY2UgRGVmZXJyZWRSZWdpc3RyYXRpb24ge1xuICByZWFkb25seSByZWNvcmRlcjogU2NvcGVSZWNvcmRlciB8IEZsb3dSZWNvcmRlcjtcbiAgLyoqIFdoaWNoIGVudmVsb3BlIGNoYW5uZWxzIHJlYWNoIHRoaXMgcmVjb3JkZXIgKGlubGluZS10aWVyIHBhcml0eSkuICovXG4gIHJlYWRvbmx5IGNoYW5uZWxzOiBTZXQ8Q2FwdHVyZUNoYW5uZWw+O1xufVxuXG5leHBvcnQgY2xhc3MgRGVmZXJyZWRPYnNlcnZlclRpZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IGRpc3BhdGNoZXI6IERlZmVycmVkRGlzcGF0Y2hlcjtcbiAgcHJpdmF0ZSByZWFkb25seSByZWdpc3RyYXRpb25zID0gbmV3IE1hcDxzdHJpbmcsIERlZmVycmVkUmVnaXN0cmF0aW9uPigpO1xuICBwcml2YXRlIHJlYWRvbmx5IGFwcGxpZWRDb25maWc6IEFwcGxpZWREaXNwYXRjaGVyQ29uZmlnO1xuICAvKiogRGVkdXAgbWVtb3J5IGZvciB0aGUgZGV2LXdhcm4gc2VhbSAob25lIHdhcm5pbmcgcGVyIHVuaXF1ZSBtZXNzYWdlKS4gKi9cbiAgcHJpdmF0ZSByZWFkb25seSB3YXJuZWRNZXNzYWdlcyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICBwcml2YXRlIHRlcm1pbmFsU3RyYW5kZWQgPSAwO1xuXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnM/OiBBdHRhY2hSZWNvcmRlck9wdGlvbnMpIHtcbiAgICB0aGlzLmFwcGxpZWRDb25maWcgPSB7XG4gICAgICAvLyBBdHRhY2gtc3VyZmFjZSBkZWZhdWx0IGlzICdjbG9uZScgKHJldmlldyBDUklUSUNBTC0yKTogYSByZWNvcmRlclxuICAgICAgLy8gcG9ydGVkIHdpdGggYHsgZGVsaXZlcnk6ICdkZWZlcnJlZCcgfWAga2VlcHMgcmVjZWl2aW5nIHRoZSBTQU1FXG4gICAgICAvLyBldmVudCBzaGFwZSBhcyBpbmxpbmUgKGUua2V5L2UudmFsdWUvZS5ydW50aW1lU3RhZ2VJZCBhbGwgaW50YWN0KS5cbiAgICAgIC8vIFRoZSBtb2R1bGUtaW50ZXJuYWwgZW52ZWxvcGUgZGVmYXVsdCBzdGF5cyAnc3VtbWFyeScgZm9yIHJhdy1cbiAgICAgIC8vIGVudmVsb3BlIGNvbnN1bWVyczsgJ3N1bW1hcnknIGhlcmUgaXMgYW4gZXhwbGljaXQgdGVsZW1ldHJ5IGNob2ljZS5cbiAgICAgIGNhcHR1cmU6IG9wdGlvbnM/LmNhcHR1cmUgPz8gJ2Nsb25lJyxcbiAgICAgIG1heFF1ZXVlOiBvcHRpb25zPy5tYXhRdWV1ZSxcbiAgICAgIG92ZXJmbG93OiBvcHRpb25zPy5vdmVyZmxvdyxcbiAgICAgIHNhbXBsZUV2ZXJ5OiBvcHRpb25zPy5zYW1wbGVFdmVyeSxcbiAgICAgIGZsdXNoQnVkZ2V0TXM6IG9wdGlvbnM/LmZsdXNoQnVkZ2V0TXMsXG4gICAgfTtcbiAgICB0aGlzLmRpc3BhdGNoZXIgPSBuZXcgRGVmZXJyZWREaXNwYXRjaGVyKHtcbiAgICAgIG1heFF1ZXVlOiBvcHRpb25zPy5tYXhRdWV1ZSxcbiAgICAgIG92ZXJmbG93OiBvcHRpb25zPy5vdmVyZmxvdyxcbiAgICAgIHNhbXBsZUV2ZXJ5OiBvcHRpb25zPy5zYW1wbGVFdmVyeSxcbiAgICAgIGNhcHR1cmVQb2xpY3k6IG9wdGlvbnM/LmNhcHR1cmUgPz8gJ2Nsb25lJyxcbiAgICAgIGZsdXNoQnVkZ2V0TXM6IG9wdGlvbnM/LmZsdXNoQnVkZ2V0TXMsXG4gICAgICAvLyBUaGUgZGV2LXdhcm4gc2VhbSAoUkZDLTAwMSDCp1wiUmVzb2x1dGlvbjogdGhlIGRldi13YXJuIHNlYW1cIik6IHRoZVxuICAgICAgLy8gcHVyZSBtb2R1bGUgaW52b2tlcyBgd2FybmAgb24gZXZlcnkgJ3JlZicgY2FwdHVyZSBhbmQgZXZlcnkgJ2Nsb25lJ1xuICAgICAgLy8gZGVncmFkYXRpb247IHRoZSB0aWVyIGJpbmRzIGl0IHRvIHRoZSBjZW50cmFsIGlzRGV2TW9kZSgpIGZsYWcgYW5kXG4gICAgICAvLyBkZWR1cGVzIGJ5IG1lc3NhZ2Ugc28gYSBob3QgbG9vcCBjYW5ub3Qgc3BhbSB0aGUgY29uc29sZS5cbiAgICAgIGhvb2tzOiB7IHdhcm46IChtZXNzYWdlKSA9PiB0aGlzLmRldldhcm5EZWR1cGVkKG1lc3NhZ2UpIH0sXG4gICAgICAvLyBMaXN0ZW5lciBmYWlsdXJlcyAoc3luYyB0aHJvd3MgQU5EIGFzeW5jIHJlamVjdGlvbnMpIHJvdXRlIGludG8gdGhlXG4gICAgICAvLyBleGlzdGluZyByZWNvcmRlciBlcnJvciBjaGFubmVsIOKAlCBzZWUgcm91dGVMaXN0ZW5lckVycm9yLlxuICAgICAgb25FcnJvcjogKGVycm9yLCBjdHgpID0+IHRoaXMucm91dGVMaXN0ZW5lckVycm9yKGVycm9yLCBjdHgubGlzdGVuZXJJZCwgY3R4LmVudmVsb3BlLCBjdHgucGhhc2UpLFxuICAgIH0pO1xuICB9XG5cbiAgLy8g4pSA4pSAIFJlZ2lzdHJ5IOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4gIC8qKlxuICAgKiBSZWdpc3RlciBhIHJlY29yZGVyIGZvciBkZWZlcnJlZCBkZWxpdmVyeSBvbiB0aGUgc2NvcGUtbGlzdCBjaGFubmVsc1xuICAgKiAoYHNjb3BlYCArIGBlbWl0YCkgYW5kL29yIHRoZSBmbG93IGNoYW5uZWwuIElkZW1wb3RlbnQgYnkgaWQg4oCUIHNhbWUgaWRcbiAgICogcmVwbGFjZXMgdGhlIHJlY29yZGVyIG9iamVjdDsgY2hhbm5lbCBsaXN0cyBNRVJHRSBhY3Jvc3MgY2FsbHMgKHNhbWUgYXNcbiAgICogdGhlIGlubGluZSB0aWVyLCB3aGVyZSBgYXR0YWNoU2NvcGVSZWNvcmRlcih4KWAgKyBgYXR0YWNoRmxvd1JlY29yZGVyKHgpYFxuICAgKiBsYW5kcyBgeGAgb24gYm90aCBsaXN0cykuIExhdGVyIGF0dGFjaGVzIHBhc3NpbmcgZGlzcGF0Y2hlci1sZXZlbFxuICAgKiBvcHRpb25zIHRoYXQgZGlmZmVyIGZyb20gdGhlIGZpcnN0IGF0dGFjaCdzIGNvbmZpZ3VyYXRpb24ga2VlcCB0aGVcbiAgICogb3JpZ2luYWwgY29uZmlnIGFuZCBkZXYtd2Fybi5cbiAgICovXG4gIHJlZ2lzdGVyKFxuICAgIHJlY29yZGVyOiBTY29wZVJlY29yZGVyIHwgRmxvd1JlY29yZGVyLFxuICAgIGxpc3RzOiB7IHNjb3BlPzogYm9vbGVhbjsgZmxvdz86IGJvb2xlYW4gfSxcbiAgICBvcHRpb25zPzogQXR0YWNoUmVjb3JkZXJPcHRpb25zLFxuICApOiB2b2lkIHtcbiAgICB0aGlzLndhcm5PbkNvbmZpZ0NvbmZsaWN0KHJlY29yZGVyLmlkLCBvcHRpb25zKTtcbiAgICBjb25zdCBjaGFubmVscyA9IHRoaXMucmVnaXN0cmF0aW9ucy5nZXQocmVjb3JkZXIuaWQpPy5jaGFubmVscyA/PyBuZXcgU2V0PENhcHR1cmVDaGFubmVsPigpO1xuICAgIGlmIChsaXN0cy5zY29wZSkgZm9yIChjb25zdCBjIG9mIFNDT1BFX0xJU1RfQ0hBTk5FTFMpIGNoYW5uZWxzLmFkZChjKTtcbiAgICBpZiAobGlzdHMuZmxvdykgZm9yIChjb25zdCBjIG9mIEZMT1dfTElTVF9DSEFOTkVMUykgY2hhbm5lbHMuYWRkKGMpO1xuICAgIHRoaXMucmVnaXN0cmF0aW9ucy5zZXQocmVjb3JkZXIuaWQsIHsgcmVjb3JkZXIsIGNoYW5uZWxzIH0pO1xuICAgIHRoaXMuZGlzcGF0Y2hlci5hZGRMaXN0ZW5lcihyZWNvcmRlci5pZCwgKGVudmVsb3BlKSA9PiB7XG4gICAgICBjb25zdCByZWdpc3RyYXRpb24gPSB0aGlzLnJlZ2lzdHJhdGlvbnMuZ2V0KHJlY29yZGVyLmlkKTtcbiAgICAgIGlmICghcmVnaXN0cmF0aW9uIHx8ICFyZWdpc3RyYXRpb24uY2hhbm5lbHMuaGFzKGVudmVsb3BlLmNoYW5uZWwpKSByZXR1cm47XG4gICAgICAvLyBTQU1FIGludm9rZSBoZWxwZXIgYXMgdGhlIGlubGluZSB0aWVyIChSRkMtMDAxIMKnOSBtaXRpZ2F0aW9uKSDigJQgYVxuICAgICAgLy8gcmV0dXJuZWQgUHJvbWlzZSBsYW5kcyBpbiB0aGUgZGlzcGF0Y2hlcidzIGluZmxpZ2h0IHNldC5cbiAgICAgIHJldHVybiBpbnZva2VSZWNvcmRlckhvb2socmVjb3JkZXIsIGVudmVsb3BlLm1ldGhvZCwgZW52ZWxvcGUucGF5bG9hZCkgYXMgdm9pZCB8IFByb21pc2U8dm9pZD47XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlIHRoZSBnaXZlbiBjaGFubmVsIGxpc3RzIGZyb20gYSByZWdpc3RyYXRpb24gKG1pcnJvcnMgdGhlIGlubGluZVxuICAgKiB0aWVyLCB3aGVyZSBgZGV0YWNoU2NvcGVSZWNvcmRlcmAgLyBgZGV0YWNoRmxvd1JlY29yZGVyYCBlYWNoIGNsZWFyIG9uZVxuICAgKiBsaXN0KS4gV2hlbiBubyBjaGFubmVscyByZW1haW4sIHRoZSBsaXN0ZW5lciBpcyBmdWxseSByZW1vdmVkLlxuICAgKi9cbiAgcmVtb3ZlRnJvbUxpc3RzKGlkOiBzdHJpbmcsIGxpc3RzOiB7IHNjb3BlPzogYm9vbGVhbjsgZmxvdz86IGJvb2xlYW4gfSk6IHZvaWQge1xuICAgIGNvbnN0IHJlZ2lzdHJhdGlvbiA9IHRoaXMucmVnaXN0cmF0aW9ucy5nZXQoaWQpO1xuICAgIGlmICghcmVnaXN0cmF0aW9uKSByZXR1cm47XG4gICAgaWYgKGxpc3RzLnNjb3BlKSBmb3IgKGNvbnN0IGMgb2YgU0NPUEVfTElTVF9DSEFOTkVMUykgcmVnaXN0cmF0aW9uLmNoYW5uZWxzLmRlbGV0ZShjKTtcbiAgICBpZiAobGlzdHMuZmxvdykgZm9yIChjb25zdCBjIG9mIEZMT1dfTElTVF9DSEFOTkVMUykgcmVnaXN0cmF0aW9uLmNoYW5uZWxzLmRlbGV0ZShjKTtcbiAgICBpZiAocmVnaXN0cmF0aW9uLmNoYW5uZWxzLnNpemUgPT09IDApIHtcbiAgICAgIHRoaXMucmVnaXN0cmF0aW9ucy5kZWxldGUoaWQpO1xuICAgICAgdGhpcy5kaXNwYXRjaGVyLnJlbW92ZUxpc3RlbmVyKGlkKTtcbiAgICB9XG4gIH1cblxuICAvKiogVHJ1ZSB3aGVuIGBpZGAgaXMgcmVnaXN0ZXJlZCBmb3IgZGVmZXJyZWQgZGVsaXZlcnkgKGFueSBjaGFubmVsKS4gKi9cbiAgaGFzKGlkOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5yZWdpc3RyYXRpb25zLmhhcyhpZCk7XG4gIH1cblxuICAvKiogRGVmZXJyZWQgcmVjb3JkZXJzIHdob3NlIHJlYWNoIGluY2x1ZGVzIHRoZSBzY29wZSBsaXN0IChzY29wZStlbWl0KS4gKi9cbiAgc2NvcGVMaXN0UmVjb3JkZXJzKCk6IFNjb3BlUmVjb3JkZXJbXSB7XG4gICAgcmV0dXJuIHRoaXMuYnlDaGFubmVsKCdzY29wZScpIGFzIFNjb3BlUmVjb3JkZXJbXTtcbiAgfVxuXG4gIC8qKiBEZWZlcnJlZCByZWNvcmRlcnMgd2hvc2UgcmVhY2ggaW5jbHVkZXMgdGhlIGZsb3cgY2hhbm5lbC4gKi9cbiAgZmxvd0xpc3RSZWNvcmRlcnMoKTogRmxvd1JlY29yZGVyW10ge1xuICAgIHJldHVybiB0aGlzLmJ5Q2hhbm5lbCgnZmxvdycpIGFzIEZsb3dSZWNvcmRlcltdO1xuICB9XG5cbiAgLyoqIFJlc2V0IGRlZmVycmVkIHJlY29yZGVycyBiZWZvcmUgYSBmcmVzaCBydW4gKHNhbWUgY29udHJhY3QgYXMgaW5saW5lKS4gKi9cbiAgY2xlYXJSZWNvcmRlcnMoKTogdm9pZCB7XG4gICAgZm9yIChjb25zdCB7IHJlY29yZGVyIH0gb2YgdGhpcy5yZWdpc3RyYXRpb25zLnZhbHVlcygpKSB7XG4gICAgICAocmVjb3JkZXIgYXMgeyBjbGVhcj86ICgpID0+IHZvaWQgfSkuY2xlYXI/LigpO1xuICAgIH1cbiAgfVxuXG4gIC8vIOKUgOKUgCBDYXB0dXJlIHRhcHMgKEJsb2NrIDcpIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4gIC8qKlxuICAgKiBCdWlsZCB0aGUgc3ludGhldGljIHNjb3BlLWNoYW5uZWwgdGFwIOKAlCBhIGBTY29wZVJlY29yZGVyYCBwbGFjZWQgb24gdGhlXG4gICAqIG5vcm1hbCBzY29wZS1yZWNvcmRlciBsaXN0IHdob3NlIGhvb2tzIGNhcHR1cmUgaW50byB0aGUgcXVldWUuIEJ1aWx0XG4gICAqIGZyZXNoIHBlciB0cmF2ZXJzZXIgc28gaXQgcmVmbGVjdHMgdGhlIGN1cnJlbnQgcmVnaXN0cmF0aW9ucy4gT25seVxuICAgKiBtZXRob2RzIHNvbWUgZGVmZXJyZWQgcmVjb3JkZXIgYWN0dWFsbHkgaW1wbGVtZW50cyBhcmUgcHJlc2VudCAobm9cbiAgICogd2FzdGVkIGNhcHR1cmVzKS4gUmV0dXJucyBgdW5kZWZpbmVkYCB3aGVuIG5vdGhpbmcgaXMgcmVnaXN0ZXJlZCBmb3JcbiAgICogdGhlIHNjb3BlIGxpc3QuXG4gICAqXG4gICAqIFJlZGFjdGlvbiBvcmRlcmluZzogdGhlIHRhcCBpcyBpbnZva2VkIGZyb20gdGhlIFNBTUUgbG9vcHMgYXMgaW5saW5lXG4gICAqIHJlY29yZGVycyAoYF9pbnZva2VIb29rYCAvIGBlbWl0RXZlbnRgKSwgd2hpY2ggcmVjZWl2ZSBldmVudHMgQUZURVIgdGhlXG4gICAqIHJlZGFjdGlvbiBkZWNpc2lvbiDigJQgc28gYSBjYXB0dXJlZCBwYXlsb2FkIGNhbiBuZXZlciBjb250YWluIGFcbiAgICogcHJlLXJlZGFjdGlvbiB2YWx1ZSB0aGUgaW5saW5lIHRpZXIgd291bGQgbm90IGhhdmUgc2Vlbi5cbiAgICovXG4gIGJ1aWxkU2NvcGVUYXAoKTogU2NvcGVSZWNvcmRlciB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgcmVjb3JkZXJzID0gdGhpcy5zY29wZUxpc3RSZWNvcmRlcnMoKTtcbiAgICBpZiAocmVjb3JkZXJzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICBjb25zdCB0YXA6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0geyBpZDogREVGRVJSRURfU0NPUEVfVEFQX0lEIH07XG4gICAgLy8gRGVyaXZlZCBmcm9tIHRoZSBob29rIHJlZ2lzdHJ5OiBldmVyeSBob29rIG9mIHRoZSBzY29wZSBjaGFubmVsIGFuZCBvZiB0aGUgZW1pdCBjaGFubmVsXG4gICAgLy8gKHdoaWNoIHJpZGVzIHRoZSBzY29wZSBsaXN0KSDigJQgYSBob29rIHRoZSByZWdpc3RyeSBnYWlucyBpcyB0YXBwZWQgd2l0aCBubyBlZGl0IGhlcmUuXG4gICAgZm9yIChjb25zdCBjaGFubmVsIG9mIFsnc2NvcGUnLCAnZW1pdCddIGFzIGNvbnN0KSB7XG4gICAgICBmb3IgKGNvbnN0IG1ldGhvZCBvZiBob29rc09uKGNoYW5uZWwpKSB7XG4gICAgICAgIGlmICghdGhpcy5hbnlJbXBsZW1lbnRzKHJlY29yZGVycywgbWV0aG9kKSkgY29udGludWU7XG4gICAgICAgIHRhcFttZXRob2RdID0gKGV2ZW50OiB1bmtub3duKSA9PiB0aGlzLmNhcHR1cmVTY29wZUV2ZW50KGNoYW5uZWwsIG1ldGhvZCwgZXZlbnQpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGFwIGFzIHVua25vd24gYXMgU2NvcGVSZWNvcmRlcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBCdWlsZCB0aGUgc3ludGhldGljIGZsb3ctY2hhbm5lbCB0YXAg4oCUIGEgYEZsb3dSZWNvcmRlcmAgYXBwZW5kZWQgdG8gdGhlXG4gICAqIGZsb3ctcmVjb3JkZXJzIGxpc3QgaGFuZGVkIHRvIHRoZSB0cmF2ZXJzZXIuIFNhbWUgY29udHJhY3QgYXNcbiAgICoge0BsaW5rIGJ1aWxkU2NvcGVUYXB9LlxuICAgKi9cbiAgYnVpbGRGbG93VGFwKCk6IEZsb3dSZWNvcmRlciB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgcmVjb3JkZXJzID0gdGhpcy5mbG93TGlzdFJlY29yZGVycygpO1xuICAgIGlmIChyZWNvcmRlcnMubGVuZ3RoID09PSAwKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIGNvbnN0IHRhcDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7IGlkOiBERUZFUlJFRF9GTE9XX1RBUF9JRCB9O1xuICAgIGZvciAoY29uc3QgbWV0aG9kIG9mIGhvb2tzT24oJ2Zsb3cnKSkge1xuICAgICAgaWYgKCF0aGlzLmFueUltcGxlbWVudHMocmVjb3JkZXJzLCBtZXRob2QpKSBjb250aW51ZTtcbiAgICAgIHRhcFttZXRob2RdID0gKGV2ZW50OiB1bmtub3duKSA9PiB0aGlzLmNhcHR1cmVGbG93RXZlbnQobWV0aG9kLCBldmVudCk7XG4gICAgfVxuICAgIHJldHVybiB0YXAgYXMgdW5rbm93biBhcyBGbG93UmVjb3JkZXI7XG4gIH1cblxuICAvKipcbiAgICogRGlyZWN0IGNhcHR1cmUgZm9yIGV4ZWN1dG9yLXN5bnRoZXNpemVkIGV2ZW50cyB0aGF0IGJ5cGFzcyB0aGUgZGlzcGF0Y2hcbiAgICogc2l0ZXMgKGUuZy4gdGhlIHN5bnRoZXRpYyBgb25SZXN1bWVgIHRoZSBleGVjdXRvciBmaXJlcyBvbiByZXN1bWUpLlxuICAgKi9cbiAgY2FwdHVyZShjaGFubmVsOiBDYXB0dXJlQ2hhbm5lbCwgbWV0aG9kOiBzdHJpbmcsIHJ1bnRpbWVTdGFnZUlkOiBzdHJpbmcsIHJ1bklkOiBzdHJpbmcsIHBheWxvYWQ6IHVua25vd24pOiB2b2lkIHtcbiAgICB0aGlzLmRpc3BhdGNoZXIuY2FwdHVyZSh7IGNoYW5uZWwsIG1ldGhvZCwgcnVudGltZVN0YWdlSWQsIHJ1bklkLCBwYXlsb2FkIH0pO1xuICB9XG5cbiAgLy8g4pSA4pSAIFRlcm1pbmFsIGZsdXNoICsgZHJhaW4gKEJsb2NrIDgpIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4gIC8qKlxuICAgKiBTeW5jaHJvbm91c2x5IGRlbGl2ZXIgZXZlcnl0aGluZyBzdGlsbCBxdWV1ZWQg4oCUIGNhbGxlZCBieSB0aGUgZXhlY3V0b3JcbiAgICogYXQgdGhlIE9VVEVSTU9TVCBydW4gYm91bmRhcnkgKHJlc29sdmUsIHJlamVjdCwgcGF1c2UpLCBCRUZPUkUgYHJ1bigpYFxuICAgKiByZXR1cm5zIC8gcmV0aHJvd3MgLyB0aGUgY2hlY2twb2ludCBiZWNvbWVzIGF2YWlsYWJsZS4gSW5zcGVjdHNcbiAgICogYGZsdXNoU3luY2AncyBgcmVtYWluaW5nYCAocmV2aWV3ZXIgTjEpOiBgZmx1c2hTeW5jYCBhbHJlYWR5IGxvb3BzXG4gICAqIHNuYXBzaG90IHJvdW5kcyB1cCB0byBpdHMgcnVuYXdheS1jYXNjYWRlIGNhcCwgc28gYSBub24temVybyByZW1haW5kZXJcbiAgICogbWVhbnMgYSBwYXRob2xvZ2ljYWwgc2VsZi1lbnF1ZXVlaW5nIGxpc3RlbmVyIOKAlCBjb3VudGVkIGluXG4gICAqIGBvYnNlcnZlclN0YXRzLnRlcm1pbmFsU3RyYW5kZWRgIGFuZCBkZXYtd2FybmVkLCBuZXZlciBzaWxlbnQuXG4gICAqL1xuICB0ZXJtaW5hbEZsdXNoKCk6IHZvaWQge1xuICAgIGNvbnN0IHsgcmVtYWluaW5nIH0gPSB0aGlzLmRpc3BhdGNoZXIuZmx1c2hOb3coKTtcbiAgICBpZiAocmVtYWluaW5nID4gMCkge1xuICAgICAgdGhpcy50ZXJtaW5hbFN0cmFuZGVkICs9IHJlbWFpbmluZztcbiAgICAgIGlmIChpc0Rldk1vZGUoKSkge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgYFtmb290cHJpbnRqc10gZGVmZXJyZWQgb2JzZXJ2ZXJzOiB0ZXJtaW5hbCBmbHVzaCBoaXQgdGhlIHJ1bmF3YXktY2FzY2FkZSBjYXAgd2l0aCAke3JlbWFpbmluZ30gYCArXG4gICAgICAgICAgICAnZXZlbnQocykgc3RpbGwgcXVldWVkIOKAlCBhIGxpc3RlbmVyIGtlcHQgZW5xdWV1ZWluZyBkdXJpbmcgdGhlIGZsdXNoLiBUaGUgc3RyYW5kZWQgY291bnQgaXMgJyArXG4gICAgICAgICAgICAnc3VyZmFjZWQgb24gc25hcHNob3Qub2JzZXJ2ZXJTdGF0cy50ZXJtaW5hbFN0cmFuZGVkLicsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEZsdXNoIHRoZSBiYWNrbG9nLCB0aGVuIHNldHRsZSBhc3luYyBsaXN0ZW5lciBjb250aW51YXRpb25zIHVuZGVyIGFcbiAgICogZGVhZGxpbmUg4oCUIHRoZSBzZXJ2ZXJsZXNzIC8gZ3JhY2VmdWwtc2h1dGRvd24gcGF0dGVybiAoUkZDLTAwMSDCpzExKS5cbiAgICovXG4gIGRyYWluKG9wdHM/OiB7IHRpbWVvdXRNcz86IG51bWJlciB9KTogUHJvbWlzZTxPYnNlcnZlckRyYWluUmVzdWx0PiB7XG4gICAgcmV0dXJuIHRoaXMuZGlzcGF0Y2hlci5kcmFpbihvcHRzKTtcbiAgfVxuXG4gIC8vIOKUgOKUgCBTdGF0cyAoQmxvY2sgOSkg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbiAgLyoqIFRoZSBgc25hcHNob3Qub2JzZXJ2ZXJTdGF0c2AgcGF5bG9hZCDigJQgQTQgc3RhdHMgKyBCbG9jayA4IHN0cmFuZGluZy4gKi9cbiAgZ2V0U3RhdHMoKTogT2JzZXJ2ZXJTdGF0cyB7XG4gICAgcmV0dXJuIHsgLi4udGhpcy5kaXNwYXRjaGVyLmdldFN0YXRzKCksIHRlcm1pbmFsU3RyYW5kZWQ6IHRoaXMudGVybWluYWxTdHJhbmRlZCB9O1xuICB9XG5cbiAgLy8g4pSA4pSAIEludGVybmFscyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuICBwcml2YXRlIGJ5Q2hhbm5lbChjaGFubmVsOiBDYXB0dXJlQ2hhbm5lbCk6IEFycmF5PFNjb3BlUmVjb3JkZXIgfCBGbG93UmVjb3JkZXI+IHtcbiAgICBjb25zdCBvdXQ6IEFycmF5PFNjb3BlUmVjb3JkZXIgfCBGbG93UmVjb3JkZXI+ID0gW107XG4gICAgZm9yIChjb25zdCB7IHJlY29yZGVyLCBjaGFubmVscyB9IG9mIHRoaXMucmVnaXN0cmF0aW9ucy52YWx1ZXMoKSkge1xuICAgICAgaWYgKGNoYW5uZWxzLmhhcyhjaGFubmVsKSkgb3V0LnB1c2gocmVjb3JkZXIpO1xuICAgIH1cbiAgICByZXR1cm4gb3V0O1xuICB9XG5cbiAgLyoqIE5vcm1hbCBwcm9wZXJ0eSBsb29rdXAg4oCUIGludm9jYXRpb24gcGFyaXR5IHdpdGggdGhlIGlubGluZSB0aWVyLiAqL1xuICBwcml2YXRlIGFueUltcGxlbWVudHMocmVjb3JkZXJzOiBBcnJheTxTY29wZVJlY29yZGVyIHwgRmxvd1JlY29yZGVyPiwgbWV0aG9kOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gcmVjb3JkZXJzLnNvbWUoKHIpID0+IHR5cGVvZiAociBhcyB1bmtub3duIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KVttZXRob2RdID09PSAnZnVuY3Rpb24nKTtcbiAgfVxuXG4gIC8qKiBTY29wZS9lbWl0IGV2ZW50cyBjYXJyeSB0aGVpciBvd24gaWRzIChgcnVudGltZVN0YWdlSWRgICsgYHBpcGVsaW5lSWRgKS4gKi9cbiAgcHJpdmF0ZSBjYXB0dXJlU2NvcGVFdmVudChjaGFubmVsOiBDYXB0dXJlQ2hhbm5lbCwgbWV0aG9kOiBzdHJpbmcsIGV2ZW50OiB1bmtub3duKTogdm9pZCB7XG4gICAgY29uc3QgZSA9IGV2ZW50IGFzIHsgcnVudGltZVN0YWdlSWQ/OiBzdHJpbmc7IHBpcGVsaW5lSWQ/OiBzdHJpbmcgfSB8IHVuZGVmaW5lZDtcbiAgICB0aGlzLmRpc3BhdGNoZXIuY2FwdHVyZSh7XG4gICAgICBjaGFubmVsLFxuICAgICAgbWV0aG9kLFxuICAgICAgcnVudGltZVN0YWdlSWQ6IGU/LnJ1bnRpbWVTdGFnZUlkID8/ICcnLFxuICAgICAgcnVuSWQ6IGU/LnBpcGVsaW5lSWQgPz8gJycsXG4gICAgICBwYXlsb2FkOiBldmVudCxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKiBGbG93IGV2ZW50cyBjYXJyeSBpZHMgb24gYHRyYXZlcnNhbENvbnRleHRgIChhYnNlbnQgb24gYSBmZXcgZXZlbnRzKS4gKi9cbiAgcHJpdmF0ZSBjYXB0dXJlRmxvd0V2ZW50KG1ldGhvZDogc3RyaW5nLCBldmVudDogdW5rbm93bik6IHZvaWQge1xuICAgIGNvbnN0IGN0eCA9IChldmVudCBhcyB7IHRyYXZlcnNhbENvbnRleHQ/OiB7IHJ1bnRpbWVTdGFnZUlkPzogc3RyaW5nOyBydW5JZD86IHN0cmluZyB9IH0gfCB1bmRlZmluZWQpXG4gICAgICA/LnRyYXZlcnNhbENvbnRleHQ7XG4gICAgdGhpcy5kaXNwYXRjaGVyLmNhcHR1cmUoe1xuICAgICAgY2hhbm5lbDogJ2Zsb3cnLFxuICAgICAgbWV0aG9kLFxuICAgICAgcnVudGltZVN0YWdlSWQ6IGN0eD8ucnVudGltZVN0YWdlSWQgPz8gJycsXG4gICAgICBydW5JZDogY3R4Py5ydW5JZCA/PyAnJyxcbiAgICAgIHBheWxvYWQ6IGV2ZW50LFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJvdXRlIGEgZGVmZXJyZWQgbGlzdGVuZXIgZmFpbHVyZSBpbnRvIHRoZSBleGlzdGluZyByZWNvcmRlciBlcnJvclxuICAgKiBjaGFubmVsOiBldmVyeSByZWdpc3RlcmVkIHNjb3BlIG9ic2VydmVyIOKAlCB0aGUgZmFpbGluZyBvbmUgaW5jbHVkZWQsIGluXG4gICAqIHJlZ2lzdHJhdGlvbiBvcmRlciDigJQgcmVjZWl2ZXMgdGhlIHNjb3BlLXNoYXBlZCBgb25FcnJvcmAgZXZlbnQgdGhlIGlubGluZVxuICAgKiB0aWVyIGJ1aWxkcyAoYHJlY29yZGVyRmFpbHVyZUV2ZW50YCksIGFuZCBhIHRocm93IGZyb20gYG9uRXJyb3JgIGl0c2VsZlxuICAgKiBpcyBub3Qgcm91dGVkIGFnYWluOiB0aGUgY29udHJhY3QgdGhlIGlubGluZSB0aWVyIGhvbm9ycyB3aGVuIGEgcmVjb3JkZXJcbiAgICogdGhyb3dzIG1pZC1kaXNwYXRjaCAoOS4zOS4wIOKAlCBiZWZvcmUsIHRoZSBmYWlsaW5nIGxpc3RlbmVyIHdhcyBza2lwcGVkLFxuICAgKiBzbyBhIENvbXBvc2l0ZVJlY29yZGVyJ3Mgb3RoZXIgY2hpbGRyZW4gbmV2ZXIgaGVhcmQgYSBzaWJsaW5nJ3MgdGhyb3cpLlxuICAgKiBUaGUgZXJyb3Igc2luayBtdXN0IG5ldmVyIGJlY29tZSBhbiBlcnJvciBzb3VyY2U6IHNpbmsgdGhyb3dzIGFyZVxuICAgKiBzd2FsbG93ZWQgKGlzb2xhdGlvbiBpcyBhYnNvbHV0ZSkuXG4gICAqL1xuICBwcml2YXRlIHJvdXRlTGlzdGVuZXJFcnJvcihcbiAgICBlcnJvcjogdW5rbm93bixcbiAgICBsaXN0ZW5lcklkOiBzdHJpbmcsXG4gICAgZW52ZWxvcGU6IENhcHR1cmVFbnZlbG9wZSxcbiAgICBwaGFzZTogJ3N5bmMnIHwgJ2FzeW5jJyxcbiAgKTogdm9pZCB7XG4gICAgLy8gSW5saW5lIHBhcml0eSAoOS4zOS4wKTogdGhlIGlubGluZSB0aWVyIGhhbmRzIGEgcmVjb3JkZXIncyB0aHJvdyB0byBFVkVSWSByZWNvcmRlciBvbiB0aGVcbiAgICAvLyBzY29wZSBsaXN0IOKAlCB0aGUgdGhyb3dlciBpbmNsdWRlZCwgc28gYSBDb21wb3NpdGVSZWNvcmRlcidzIG90aGVyIGNoaWxkcmVuIGhlYXIgaXQg4oCUIGFuZFxuICAgIC8vIGRyb3BzIGEgdGhyb3cgZnJvbSBgb25FcnJvcmAgaXRzZWxmLiBTYW1lIGhlcmUsIHdpdGggdGhlIHNhbWUgZXZlbnQgKGByZWNvcmRlckZhaWx1cmVFdmVudGApLlxuICAgIGlmIChlbnZlbG9wZS5tZXRob2QgIT09ICdvbkVycm9yJykgdGhpcy5kZWxpdmVyTGlzdGVuZXJFcnJvcihlcnJvciwgZW52ZWxvcGUpO1xuICAgIGlmIChpc0Rldk1vZGUoKSkge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgYFtmb290cHJpbnRqc10gZGVmZXJyZWQgb2JzZXJ2ZXIgJyR7bGlzdGVuZXJJZH0nIGZhaWxlZCAoJHtwaGFzZX0pIGhhbmRsaW5nIGAgK1xuICAgICAgICAgIGAke2VudmVsb3BlLmNoYW5uZWx9LiR7ZW52ZWxvcGUubWV0aG9kfSAoc2VxICR7ZW52ZWxvcGUuc2VxfSk6ICR7ZGVzY3JpYmVUaHJvd24oZXJyb3IpfWAsXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBIYW5kIG9uZSBsaXN0ZW5lciBmYWlsdXJlIHRvIGV2ZXJ5IHNjb3BlIG9ic2VydmVyIGFzIGFuIGBvbkVycm9yYCDigJQgc2VlIHtAbGluayByb3V0ZUxpc3RlbmVyRXJyb3J9LiAqL1xuICBwcml2YXRlIGRlbGl2ZXJMaXN0ZW5lckVycm9yKGVycm9yOiB1bmtub3duLCBlbnZlbG9wZTogQ2FwdHVyZUVudmVsb3BlKTogdm9pZCB7XG4gICAgY29uc3QgZXJyb3JFdmVudCA9IHJlY29yZGVyRmFpbHVyZUV2ZW50KFxuICAgICAge1xuICAgICAgICBzdGFnZU5hbWU6ICcnLFxuICAgICAgICBzdGFnZUlkOiBzdGFnZUlkT2YoZW52ZWxvcGUucnVudGltZVN0YWdlSWQpLFxuICAgICAgICBydW50aW1lU3RhZ2VJZDogZW52ZWxvcGUucnVudGltZVN0YWdlSWQsXG4gICAgICAgIHBpcGVsaW5lSWQ6IGVudmVsb3BlLnJ1bklkLFxuICAgICAgfSxcbiAgICAgIGVycm9yLFxuICAgICAgZW52ZWxvcGUubWV0aG9kLFxuICAgICk7XG4gICAgZm9yIChjb25zdCBbLCB7IHJlY29yZGVyLCBjaGFubmVscyB9XSBvZiB0aGlzLnJlZ2lzdHJhdGlvbnMpIHtcbiAgICAgIC8vIElubGluZS10aWVyIHBhcml0eSAocmV2aWV3IENSSVRJQ0FMLTEpOiB0aGUgc3ludGhlc2l6ZWQgZXZlbnQgaXNcbiAgICAgIC8vIHNjb3BlLXR5cGVkLCBzbyBpdCByZWFjaGVzIE9OTFkgcmVjb3JkZXJzIHJlZ2lzdGVyZWQgb24gdGhlIHNjb3BlXG4gICAgICAvLyBsaXN0cyDigJQgYSBmbG93LW9ubHkgcmVjb3JkZXIgbmV2ZXIgcmVjZWl2ZXMgc2NvcGUtY2hhbm5lbCBlcnJvcnNcbiAgICAgIC8vIGlubGluZSBhbmQgbXVzdCBub3QgaGVyZSBlaXRoZXIuXG4gICAgICBpZiAoIWNoYW5uZWxzLmhhcygnc2NvcGUnKSkgY29udGludWU7XG4gICAgICB0cnkge1xuICAgICAgICBpbnZva2VSZWNvcmRlckhvb2socmVjb3JkZXIsICdvbkVycm9yJywgZXJyb3JFdmVudCk7XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgLy8gU3dhbGxvdyDigJQgc2FtZSBydWxlIGFzIERlZmVycmVkRGlzcGF0Y2hlci5zYWZlT25FcnJvci5cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKiogRGlzcGF0Y2hlci1sZXZlbCBvcHRpb25zIGFyZSBmaXJzdC1hdHRhY2gtd2luczsgZGlmZmVyaW5nIGxhdGVyIHZhbHVlcyBkZXYtd2Fybi4gKi9cbiAgcHJpdmF0ZSB3YXJuT25Db25maWdDb25mbGljdChyZWNvcmRlcklkOiBzdHJpbmcsIG9wdGlvbnM/OiBBdHRhY2hSZWNvcmRlck9wdGlvbnMpOiB2b2lkIHtcbiAgICBpZiAoIW9wdGlvbnMpIHJldHVybjtcbiAgICBjb25zdCBjb25mbGljdHM6IHN0cmluZ1tdID0gW107XG4gICAgY29uc3QgcmVxdWVzdGVkOiBBcHBsaWVkRGlzcGF0Y2hlckNvbmZpZyA9IHtcbiAgICAgIGNhcHR1cmU6IG9wdGlvbnMuY2FwdHVyZSxcbiAgICAgIG1heFF1ZXVlOiBvcHRpb25zLm1heFF1ZXVlLFxuICAgICAgb3ZlcmZsb3c6IG9wdGlvbnMub3ZlcmZsb3csXG4gICAgICBzYW1wbGVFdmVyeTogb3B0aW9ucy5zYW1wbGVFdmVyeSxcbiAgICAgIGZsdXNoQnVkZ2V0TXM6IG9wdGlvbnMuZmx1c2hCdWRnZXRNcyxcbiAgICB9O1xuICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKHJlcXVlc3RlZCkgYXMgQXJyYXk8a2V5b2YgQXBwbGllZERpc3BhdGNoZXJDb25maWc+KSB7XG4gICAgICBpZiAocmVxdWVzdGVkW2tleV0gIT09IHVuZGVmaW5lZCAmJiByZXF1ZXN0ZWRba2V5XSAhPT0gdGhpcy5hcHBsaWVkQ29uZmlnW2tleV0pIHtcbiAgICAgICAgY29uZmxpY3RzLnB1c2goU3RyaW5nKGtleSkpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoY29uZmxpY3RzLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMuZGV2V2FybkRlZHVwZWQoXG4gICAgICAgIGBbZm9vdHByaW50anNdIGF0dGFjaCAnJHtyZWNvcmRlcklkfSc6IHRoZSBleGVjdXRvcidzIGRlZmVycmVkLW9ic2VydmVyIHF1ZXVlIHdhcyBhbHJlYWR5IGAgK1xuICAgICAgICAgIGBjb25maWd1cmVkIGJ5IHRoZSBmaXJzdCBkZWZlcnJlZCBhdHRhY2gg4oCUIGlnbm9yaW5nIGRpZmZlcmluZyBvcHRpb24ocyk6ICR7Y29uZmxpY3RzLmpvaW4oJywgJyl9LiBgICtcbiAgICAgICAgICAnT25lIGV4ZWN1dG9yIGhhcyBPTkUgbWVyZ2VkIHF1ZXVlOyBjb25maWd1cmUgaXQgb24gdGhlIGZpcnN0IGRlZmVycmVkIGF0dGFjaC4nLFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvKiogYGlzRGV2TW9kZSgpYC1nYXRlZCwgZGVkdXBsaWNhdGVkIHdhcm5lciDigJQgdGhlIGJvdW5kIHdhcm4gc2VhbS4gKi9cbiAgcHJpdmF0ZSBkZXZXYXJuRGVkdXBlZChtZXNzYWdlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAoIWlzRGV2TW9kZSgpKSByZXR1cm47XG4gICAgaWYgKHRoaXMud2FybmVkTWVzc2FnZXMuaGFzKG1lc3NhZ2UpKSByZXR1cm47XG4gICAgdGhpcy53YXJuZWRNZXNzYWdlcy5hZGQobWVzc2FnZSk7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICBjb25zb2xlLndhcm4obWVzc2FnZSk7XG4gIH1cbn1cbiJdfQ==
@@ -12,11 +12,8 @@
12
12
  */
13
13
  Object.defineProperty(exports, "__esModule", { value: true });
14
14
  exports.ExecutionRuntime = void 0;
15
- const freeze_js_1 = require("../capture/freeze.js");
16
- const EventLog_js_1 = require("../memory/EventLog.js");
17
- const placeholders_js_1 = require("../memory/placeholders.js");
15
+ const write_1 = require("foottrace/write");
18
16
  const runPolicy_js_1 = require("../memory/runPolicy.js");
19
- const SharedMemory_js_1 = require("../memory/SharedMemory.js");
20
17
  const StageContext_js_1 = require("../memory/StageContext.js");
21
18
  class ExecutionRuntime {
22
19
  globalStore;
@@ -51,14 +48,14 @@ class ExecutionRuntime {
51
48
  constructor(rootName, rootId, defaultValues, initialState, policy = runPolicy_js_1.DEFAULT_RUN_POLICY) {
52
49
  this._initialState = initialState;
53
50
  this._defaultValues = defaultValues;
54
- this.globalStore = new SharedMemory_js_1.SharedMemory(defaultValues, initialState);
51
+ this.globalStore = new write_1.SharedMemory(defaultValues, initialState);
55
52
  // The event log's fold base must be the SAME state the store starts from
56
53
  // — `initialContext` merged with `defaultValuesForContext`, which is what
57
54
  // `SharedMemory` computed above. Seeding the log from `initialState` alone
58
55
  // left `defaultValues` out of every replay, so a fold could not reproduce
59
56
  // the state a stage actually saw. `getState()` is the live context; the
60
57
  // EventLog constructor clones it, so the base stays detached.
61
- this.executionHistory = new EventLog_js_1.EventLog(this.globalStore.getState());
58
+ this.executionHistory = new write_1.EventLog(this.globalStore.getState());
62
59
  this.policy = policy;
63
60
  this.rootStageContext = this.newRoot(rootName, rootId);
64
61
  }
@@ -99,7 +96,7 @@ class ExecutionRuntime {
99
96
  return;
100
97
  if (!this.redactedStore) {
101
98
  const rule = this.policy.redaction;
102
- this.redactedStore = new SharedMemory_js_1.SharedMemory(rule ? rule.retainState(this._defaultValues, placeholders_js_1.LOG_PLACEHOLDER) : this._defaultValues, rule ? rule.retainState(this._initialState, placeholders_js_1.LOG_PLACEHOLDER) : this._initialState);
99
+ this.redactedStore = new write_1.SharedMemory(rule ? rule.retainState(this._defaultValues, write_1.LOG_PLACEHOLDER) : this._defaultValues, rule ? rule.retainState(this._initialState, write_1.LOG_PLACEHOLDER) : this._initialState);
103
100
  }
104
101
  root.useRedactedMirror(this.redactedStore);
105
102
  }
@@ -121,7 +118,7 @@ class ExecutionRuntime {
121
118
  getFoldBase() {
122
119
  if (!this._foldBase) {
123
120
  const base = this.executionHistory.getInitialState();
124
- this._foldBase = (0, freeze_js_1.freezeRecord)(base && typeof base === 'object' ? base : {});
121
+ this._foldBase = (0, write_1.freezeRecord)(base && typeof base === 'object' ? base : {});
125
122
  }
126
123
  return this._foldBase;
127
124
  }
@@ -192,4 +189,4 @@ class ExecutionRuntime {
192
189
  }
193
190
  }
194
191
  exports.ExecutionRuntime = ExecutionRuntime;
195
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRXhlY3V0aW9uUnVudGltZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvcnVubmVyL0V4ZWN1dGlvblJ1bnRpbWUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7Ozs7O0dBVUc7OztBQUVILG9EQUFvRDtBQUNwRCx1REFBaUQ7QUFHakQsK0RBQTREO0FBRTVELHlEQUE0RDtBQUM1RCwrREFBeUQ7QUFDekQsK0RBQXlEO0FBbUh6RCxNQUFhLGdCQUFnQjtJQUNwQixXQUFXLENBQWU7SUFDakM7Ozs7Ozs7O09BUUc7SUFDSSxhQUFhLENBQWdCO0lBQzdCLGdCQUFnQixDQUFlO0lBQy9CLGdCQUFnQixDQUFXO0lBQ2xDLG9GQUFvRjtJQUM1RSxhQUFhLENBQWdCO0lBQzdCLGFBQWEsQ0FBVTtJQUN2QixjQUFjLENBQVU7SUFDaEM7bUZBQytFO0lBQ3ZFLE1BQU0sQ0FBWTtJQUUxQiw0RUFBNEU7SUFDcEUsU0FBUyxDQUEyQjtJQUU1Qzs7Ozs7O09BTUc7SUFDSCxZQUNFLFFBQWdCLEVBQ2hCLE1BQWMsRUFDZCxhQUF1QixFQUN2QixZQUFzQixFQUN0QixTQUFvQixpQ0FBa0I7UUFFdEMsSUFBSSxDQUFDLGFBQWEsR0FBRyxZQUFZLENBQUM7UUFDbEMsSUFBSSxDQUFDLGNBQWMsR0FBRyxhQUFhLENBQUM7UUFDcEMsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLDhCQUFZLENBQUMsYUFBYSxFQUFFLFlBQVksQ0FBQyxDQUFDO1FBQ2pFLHlFQUF5RTtRQUN6RSwwRUFBMEU7UUFDMUUsMkVBQTJFO1FBQzNFLDBFQUEwRTtRQUMxRSx3RUFBd0U7UUFDeEUsOERBQThEO1FBQzlELElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLHNCQUFRLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1FBQ2xFLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO1FBQ3JCLElBQUksQ0FB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LCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEV4ZWN1dGlvblJ1bnRpbWUg4oCUIFRoZSBydW50aW1lIGVudmlyb25tZW50IGZvciBvbmUgZmxvd2NoYXJ0IGV4ZWN1dGlvbi5cbiAqXG4gKiBXaXJlcyB1cCB0aGUgdGhyZWUgbWVtb3J5IHByaW1pdGl2ZXMgaW50byBhIHNpbmdsZSBjb250YWluZXI6XG4gKiAgIC0gU2hhcmVkTWVtb3J5ICh0aGUgaGVhcCDigJQgc2hhcmVkIHN0YXRlIGFjcm9zcyBhbGwgc3RhZ2VzKVxuICogICAtIFN0YWdlQ29udGV4dCAgKHRoZSBjYWxsIHN0YWNrIOKAlCBwZXItc3RhZ2UgZXhlY3V0aW9uIHRyZWUpXG4gKiAgIC0gRXZlbnRMb2cgICAgICAodGhlIHRyYW5zYWN0aW9uIGxvZyDigJQgY29tbWl0IGhpc3RvcnkgZm9yIHJlcGxheSlcbiAqXG4gKiBUaGUgZW5naW5lIChGbG93Y2hhcnRUcmF2ZXJzZXIpIHJlY2VpdmVzIHRoaXMgYXMgaXRzIHJ1bnRpbWUgcGFyYW1ldGVyLlxuICogQWZ0ZXIgZXhlY3V0aW9uLCBjb25zdW1lcnMgcXVlcnkgaXQgZm9yIHRoZSBmdWxsIGV4ZWN1dGlvbiBzdGF0ZS5cbiAqL1xuXG5pbXBvcnQgeyBmcmVlemVSZWNvcmQgfSBmcm9tICcuLi9jYXB0dXJlL2ZyZWV6ZS5qcyc7XG5pbXBvcnQgeyBFdmVudExvZyB9IGZyb20gJy4uL21lbW9yeS9FdmVudExvZy5qcyc7XG5pbXBvcnQgdHlwZSB7IExvZ0FkZHJlc3MgfSBmcm9tICcuLi9tZW1vcnkvZXZlbnRQb3NpdGlvbi5qcyc7XG5pbXBvcnQgdHlwZSB7IFN0YWdlU25hcHNob3QgfSBmcm9tICcuLi9tZW1vcnkvZnJhbWVUeXBlcy5qcyc7XG5pbXBvcnQgeyBMT0dfUExBQ0VIT0xERVIgfSBmcm9tICcuLi9tZW1vcnkvcGxhY2Vob2xkZXJzLmpzJztcbmltcG9ydCB0eXBlIHsgUnVuUG9saWN5IH0gZnJvbSAnLi4vbWVtb3J5L3J1blBvbGljeS5qcyc7XG5pbXBvcnQgeyBERUZBVUxUX1JVTl9QT0xJQ1kgfSBmcm9tICcuLi9tZW1vcnkvcnVuUG9saWN5LmpzJztcbmltcG9ydCB7IFNoYXJlZE1lbW9yeSB9IGZyb20gJy4uL21lbW9yeS9TaGFyZWRNZW1vcnkuanMnO1xuaW1wb3J0IHsgU3RhZ2VDb250ZXh0IH0gZnJvbSAnLi4vbWVtb3J5L1N0YWdlQ29udGV4dC5qcyc7XG5pbXBvcnQgdHlwZSB7IENvbW1pdEJ1bmRsZSwgQ29tbWl0VmFsdWVzTW9kZSwgV3JpdGVQcm92ZW5hbmNlTW9kZSB9IGZyb20gJy4uL21lbW9yeS90eXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7IE9ic2VydmVyU3RhdHMgfSBmcm9tICcuL0RlZmVycmVkT2JzZXJ2ZXJUaWVyLmpzJztcblxuLyoqIFNuYXBzaG90IG9mIGEgc2luZ2xlIHJlY29yZGVyJ3MgY29sbGVjdGVkIGRhdGEuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlY29yZGVyU25hcHNob3Qge1xuICBpZDogc3RyaW5nO1xuICBuYW1lOiBzdHJpbmc7XG4gIC8qKiBTY29wZVJlY29yZGVyIHR5cGUgYW5kIHBhdHRlcm4gZGVzY3JpcHRpb24gKGUuZy4sIFwiVHJhbnNsYXRvciAoS2V5ZWRTdG9yZSkg4oCUIHBlci1zdGVwIHRva2VuIHVzYWdlXCIpLiAqL1xuICBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgLyoqIFByZWZlcnJlZCByZWFkLXRpbWUgb3BlcmF0aW9uIOKAlCBoaW50cyB0aGUgVUkgYWJvdXQgd2hpY2ggdmlldyB0byBzaG93IHByb21pbmVudGx5LiAqL1xuICBwcmVmZXJyZWRPcGVyYXRpb24/OiAndHJhbnNsYXRlJyB8ICdhY2N1bXVsYXRlJyB8ICdhZ2dyZWdhdGUnO1xuICBkYXRhOiB1bmtub3duO1xuICAvKipcbiAgICogU21hbGwgbWFjaGluZS1yZWFkYWJsZSBmYWN0cyBhYm91dCB0aGUgQlVORExFIOKAlCBob3cgaXQgd2FzIHByb2R1Y2VkLFxuICAgKiB3aGljaCBwcm9qZWN0aW9uIG9mIHRoZSByZWNvcmRlcidzIGRhdGEgaXQgaXMsIHdoYXQgaXQgZGVsaWJlcmF0ZWx5XG4gICAqIGxlZnQgb3V0LiBXaGF0ZXZlciB0aGUgcmVjb3JkZXIncyBgdG9TbmFwc2hvdCgpYCBwdXQgaGVyZSwgY29waWVkXG4gICAqIHRocm91Z2ggdW5jaGFuZ2VkLlxuICAgKlxuICAgKiBUaGUgc3BsaXQgd2l0aCBgZGVzY3JpcHRpb25gOiBgZGVzY3JpcHRpb25gIGlzIHRoZSBzZW50ZW5jZSBhIGh1bWFuXG4gICAqIHJlYWRzOyBgbWV0YWAgaXMgd2hhdCBhbiBvZmZsaW5lIGNvbnN1bWVyIEJSQU5DSEVTIG9uLiBBIHJlY29yZGVyIHdpdGhcbiAgICogYSBcImZ1bGxcIiBhbmQgYSBcImxlYW5cIiBidW5kbGUgc2hhcGUgdGhhdCBzYXlzIHNvIG9ubHkgaW4gaXRzXG4gICAqIGRlc2NyaXB0aW9uIGZvcmNlcyBldmVyeSByZWFkZXIgdG8gc3RyaW5nLW1hdGNoIHByb3NlIOKAlCBhbmQgYSByZWFkZXJcbiAgICogdGhhdCBkb2Vzbid0IHJlbmRlcnMgYW4gZW1wdHkgcGFuZWwgaW5zdGVhZCBvZiBzYXlpbmcgXCJ0aGlzIHJlY29yZGluZ1xuICAgKiBjYXJyaWVzIHN0cnVjdHVyZSBvbmx5XCIuXG4gICAqXG4gICAqIE5vdCBpbnRlcnByZXRlZCBieSB0aGUgZW5naW5lLCBzbyBrZXlzIGFyZSB0aGUgcmVjb3JkZXIncyB0byBjaG9vc2U7XG4gICAqIGtlZXAgdGhlIHZhbHVlcyBKU09OLXNhZmUsIHNpbmNlIHRoaXMgcmlkZXMgdGhlIHNuYXBzaG90IG91dCB0byBkaXNrLlxuICAgKi9cbiAgbWV0YT86IFJlYWRvbmx5PFJlY29yZDxzdHJpbmcsIHVua25vd24+Pjtcbn1cblxuZXhwb3J0IHR5cGUgUnVudGltZVNuYXBzaG90ID0ge1xuICAvKipcbiAgICogVGhlIHJ1biB0aGlzIHNuYXBzaG90IGJlbG9uZ3MgdG8g4oCUIHRoZSBzYW1lIGBydW5JZGAgc3RhbXBlZCBvbiBldmVyeVxuICAgKiBgVHJhdmVyc2FsQ29udGV4dGAgKGFuZCB0aHVzIGV2ZXJ5IHJlY29yZGVyIGV2ZW50KSBvZiB0aGUgcnVuLCBzbyBhXG4gICAqIHNuYXBzaG90IGNhbiBiZSBqb2luZWQgYWdhaW5zdCBhbiBldmVudCBzdHJlYW0gb3IgYW4gZXh0ZXJuYWxcbiAgICogY29ycmVsYXRpb24gdGFibGUuIFJlYWQtb25seSBieSBjb250cmFjdDogZ2VuZXJhdGVkIGJ5IHRoZSBleGVjdXRvclxuICAgKiAoYHJ1bm5lci9ydW5JZC50c2ApLCBuZXZlciBkZXJpdmVkIGZyb20gc25hcHNob3QgY29udGVudHMuXG4gICAqXG4gICAqIExpZmVjeWNsZSAobWF0Y2hlcyB0aGUgZXZlbnQgbW9kZWwpOiBmcmVzaCBwZXIgYHJ1bigpYCBBTkQgcGVyXG4gICAqIGByZXN1bWUoKWAg4oCUIHJlc3VtZSBpcyBsb2dpY2FsbHkgYSBkaXN0aW5jdCBydW4sIHNvIGEgcG9zdC1yZXN1bWVcbiAgICogc25hcHNob3QgY2FycmllcyBhIERJRkZFUkVOVCBydW5JZCB0aGFuIHRoZSBwYXVzZWQgcnVuJ3Mgc25hcHNob3QuXG4gICAqL1xuICByZWFkb25seSBydW5JZDogc3RyaW5nO1xuICBzaGFyZWRTdGF0ZTogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIGV4ZWN1dGlvblRyZWU6IFN0YWdlU25hcHNob3Q7XG4gIC8qKlxuICAgKiBUaGUgY29tbWl0IGxvZydzIGZvbGQgQkFTRSDigJQgdGhlIHJ1bidzIHN0YXRlIGJlZm9yZSBpdHMgZmlyc3QgY29tbWl0XG4gICAqIChgaW5pdGlhbENvbnRleHRgIG1lcmdlZCB3aXRoIGBkZWZhdWx0VmFsdWVzRm9yQ29udGV4dGA7IG9uIGEgcmVzdW1lLCB0aGVcbiAgICogY2hlY2twb2ludCdzIHN0YXRlKS4gRGVlcGx5IGZyb3plbiBhbmQgZnVsbHkgZGV0YWNoZWQgZnJvbSB0aGUgZW5naW5lLlxuICAgKlxuICAgKiBDb21taXQgYnVuZGxlcyBhcmUgRElGRlMsIHNvIHRoZSBsb2cgYWxvbmUgY2Fubm90IHJlYnVpbGQgYSB2YWx1ZSB0aGF0XG4gICAqIHdhcyBzZWVkZWQgYmVmb3JlIHRoZSBydW4gYW5kIG9ubHkgZXZlciBtZXJnZWQgYWZ0ZXJ3YXJkcy4gU2hpcHBpbmcgdGhlXG4gICAqIGJhc2UgV0lUSCB0aGUgbG9nIGlzIHdoYXQgbWFrZXMgYW4gb2ZmbGluZSBmb2xkIOKAlCBgc3RhdGVBdChzbmFwc2hvdCwgaSlgXG4gICAqIGZyb20gYGZvb3RwcmludGpzL3RyYWNlYCDigJQgcmVwcm9kdWNlIHRoZSBzdGF0ZSBhIHN0YWdlIGFjdHVhbGx5IHNhdy5cbiAgICpcbiAgICogT1BUSU9OQUwgQlkgVFlQRSwgYW5kIGFic2VudCBpbiBleGFjdGx5IHR3byBjYXNlcy4gQSBwbGFpbiBgZ2V0U25hcHNob3QoKWBcbiAgICogYWx3YXlzIGNhcnJpZXMgaXQsIHNvIGEgbGl2ZSBmb2xkIHJlcG9ydHMgYGJhc2lzOiAnaW5pdGlhbCtsb2cnYC4gVW5kZXJcbiAgICogYGdldFNuYXBzaG90KHsgcmVkYWN0OiB0cnVlIH0pYCBpdCBpcyBPTUlUVEVEIOKAlCB0aGUgYmFzZSBpcyB0aGUgcmF3IHByZS1ydW5cbiAgICogc2VlZCBhbmQgdGhlIHJlZGFjdGlvbiBwb2xpY3kgaXMgbm90IHBsdW1iZWQgaW50byB0aGUgZm9sZCDigJQgc28gYSBmb2xkIG9mXG4gICAqIGEgcmVkYWN0ZWQgc25hcHNob3QgZGVncmFkZXMgaG9uZXN0bHkgdG8gYGJhc2lzOiAnbG9nLW9ubHknYC4gQW5kIGl0IGlzXG4gICAqIGRlY2xhcmVkIG9wdGlvbmFsIHNvIHRoYXQgY29kZSB3cml0dGVuIGFnYWluc3QgOS4xNi54IOKAlCBhIHRlc3QgZml4dHVyZSBvclxuICAgKiBhIFVJIG1vY2sgdGhhdCBDT05TVFJVQ1RTIGEgYFJ1bnRpbWVTbmFwc2hvdGAgbGl0ZXJhbCDigJQgc3RpbGwgY29tcGlsZXMuXG4gICAqIGBzdGF0ZUF0YCBoYW5kbGVzIGFic2VuY2UgYnkgc2F5aW5nIHNvLCBuZXZlciBieSBmb2xkaW5nIGEgbGllLlxuICAgKi9cbiAgcmVhZG9ubHkgaW5pdGlhbFN0YXRlPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIC8qKlxuICAgKiBUaGUgcnVuJ3MgY29tbWl0IGJ1bmRsZXMsIG9uZSBwZXIgZXhlY3V0ZWQgc3RhZ2UsIGluIGV4ZWN1dGlvbiBvcmRlciDigJRcbiAgICogYSBERVRBQ0hFRCwgZnJvemVuIGNvcHkgb2YgdGhlIGVuZ2luZSdzIGxpdmUgbG9nIChhIHNuYXBzaG90IGlzIGEgZm9sZFxuICAgKiByZXN1bHQ6IGl0IG11c3Qgbm90IGtlZXAgY2hhbmdpbmcgdW5kZXIgdGhlIGNvbnN1bWVyIHRoYXQgaG9sZHMgaXQpLlxuICAgKiBUaGUgYnVuZGxlcyBpbnNpZGUgYXJlIHRoZSBlbmdpbmUncyBvd24gb2JqZWN0cywgaW1tdXRhYmxlIGFmdGVyIHJlY29yZC5cbiAgICovXG4gIGNvbW1pdExvZzogQ29tbWl0QnVuZGxlW107XG4gIC8qKiBJZGVudGl0eSBvZiB0aGlzIGxvZywgc3RhYmxlIGFjcm9zcyBzYW1lLWV4ZWN1dG9yIHJlc3VtZS4gQWJzZW50IGJlZm9yZSBiaW5kaW5nIG9yIGluIG9sZGVyIHNvdXJjZXMuICovXG4gIHJlYWRvbmx5IGxvZ0FkZHJlc3M/OiBMb2dBZGRyZXNzO1xuICAvKipcbiAgICogRW5jb2RpbmcgZGlzY3JpbWluYW50IGZvciBgY29tbWl0TG9nYCAoIzEzYy1CKTogYCdmdWxsJ2Ag4oCUIGV2ZXJ5IGBzZXRgXG4gICAqIGJ1bmRsZSBzdG9yZXMgdGhlIGZ1bGwgZmluYWwgdmFsdWUgKGhpc3RvcmljYWwpOyBgJ2RlbHRhJ2Ag4oCUIGJ1bmRsZXMgbWF5XG4gICAqIGNhcnJ5IGBhcHBlbmRgL2BkZWxldGVgIHRyYWNlIHZlcmJzIHdpdGggdmVyYi1xdWFsaWZpZWQgYG92ZXJ3cml0ZWBcbiAgICogcGF5bG9hZHMgKHRhaWxzKS4gT2ZmbGluZSB0b29saW5nIGtleXMgb24gdGhpcyBmaWVsZDsgYSBidW5kbGUgc3RyZWFtXG4gICAqIHdpdGhvdXQgY29udGV4dCByZW1haW5zIHNlbGYtZGVzY3JpYmluZyB2aWEgdGhlIHZlcmJzIHRoZW1zZWx2ZXMuXG4gICAqL1xuICBjb21taXRWYWx1ZXM6IENvbW1pdFZhbHVlc01vZGU7XG4gIC8qKiBQZXItd3JpdGUgcmVhZC1wcm92ZW5hbmNlIGRpYWwgKCNQMSkgdGhlIHJ1biBleGVjdXRlZCB1bmRlciDigJQgdGhlXG4gICAqICBvZmZsaW5lLXRvb2xpbmcgZGlzY3JpbWluYW50IGZvciBgVHJhY2VFbnRyeS5yZWFkS2V5c2AgYXZhaWxhYmlsaXR5LiAqL1xuICB3cml0ZVByb3ZlbmFuY2U6IFdyaXRlUHJvdmVuYW5jZU1vZGU7XG4gIC8qKlxuICAgKiBQZXItc3ViZmxvdyBleGVjdXRpb24gcmVzdWx0cywgRFVBTC1LRVlFRCAoZGVzaWduOiBkb2NzL2Rlc2lnbi9zdWJmbG93LWNvbW1pdC12aXNpYmlsaXR5Lm1kKTpcbiAgICogICAtIGJ5IHN1YmZsb3cgUEFUSCAoYHN1YmZsb3dJZGAsIGUuZy4gYCdzZi1wYXknYCkg4oaSIHRoZSBMQVNUIGl0ZXJhdGlvbiAoYmFjay1jb21wYXQpOyB0aGlzXG4gICAqICAgICBpcyB3aGF0IGBnZXRTdWJ0cmVlU25hcHNob3QocGF0aClgIGFuZCBgbGlzdFN1YmZsb3dQYXRocygpYCByZXNvbHZlLlxuICAgKiAgIC0gYnkgcGVyLWV4ZWN1dGlvbiBtb3VudCBgcnVudGltZVN0YWdlSWRgIChlLmcuIGAnc2YtcGF5IzUnYCkg4oaSIFRIQVQgaXRlcmF0aW9uJ3MgcmVzdWx0LCBzb1xuICAgKiAgICAgYSBMT09QSU5HIHN1YmZsb3cgcmV0YWlucyBFVkVSWSBpdGVyYXRpb24gKG5vdCBqdXN0IHRoZSBsYXN0KS4gTG9vayB1cCBhIHNwZWNpZmljXG4gICAqICAgICBpdGVyYXRpb24gYXMgYHN1YmZsb3dSZXN1bHRzW25vZGUucnVudGltZVN0YWdlSWRdID8/IHN1YmZsb3dSZXN1bHRzW25vZGUuc3ViZmxvd0lkXWAuXG4gICAqIEJvdGgga2V5cyBwb2ludCBhdCB0aGUgc2FtZSBvYmplY3QgZm9yIGEgc2luZ2xlIG1vdW50OyBpdGVyYXRlIHdpdGggY2FyZSAoY291bnQgdmlhIHRoZVxuICAgKiBwYXRoIGtleXMg4oCUIHRob3NlIHdpdGhvdXQgYCcjJ2ApLiBUaGUgcGF1c2UgY2hlY2twb2ludCBjYXJyaWVzIG9ubHkgdGhlIHBhdGgga2V5cywgbGVhbi5cbiAgICpcbiAgICogVW5kZXIgYGdldFNuYXBzaG90KHsgcmVkYWN0OiB0cnVlIH0pYCBlYWNoIGVudHJ5J3MgYHRyZWVDb250ZXh0Lmdsb2JhbENvbnRleHRgIGlzIHRoYXRcbiAgICogc3ViZmxvdydzIE9XTiByZWRhY3RlZCBtaXJyb3IgKDkuMjAuMCkg4oCUIHRoZSBmb2xkIG9mIGl0cyBzY3J1YmJlZCBgaGlzdG9yeWAg4oCUIHNlcnZlZCBhc1xuICAgKiBvbmUgc3Vic3RpdHV0ZWQgb2JqZWN0IHBlciBtb3VudCAoYm90aCBrZXlzIHN0aWxsIGFncmVlKSDigJQgdGhlIHdyYXBwZXIgaXMgZnJlc2ggcGVyXG4gICAqIGBnZXRTbmFwc2hvdGAgY2FsbCwgdGhlIGBnbG9iYWxDb250ZXh0YCBpbnNpZGUgaXQgaXMgdGhlIHN0YWJsZSBtaXJyb3I7IHBsYWluLCBpdCBpcyB0aGUgc3ViZmxvdydzXG4gICAqIGxpdmUgaGVhcC4gV2l0aG91dCBhIHBvbGljeSB0aGVyZSBpcyBubyBtaXJyb3IgYW5kIHRoZSB0d28gdmlld3MgYXJlIHRoZSBzYW1lIG9iamVjdHMuXG4gICAqL1xuICBzdWJmbG93UmVzdWx0cz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAvKiogU25hcHNob3QgZGF0YSBmcm9tIHJlY29yZGVycyB0aGF0IGltcGxlbWVudCB0b1NuYXBzaG90KCkuICovXG4gIHJlY29yZGVycz86IFJlY29yZGVyU25hcHNob3RbXTtcbiAgLyoqXG4gICAqIERlZmVycmVkLW9ic2VydmVyIGFjY291bnRpbmcgKFJGQy0wMDEgQmxvY2sgOSkg4oCUIHF1ZXVlIGRlcHRoLCBkcm9wcyxcbiAgICogZmx1c2gvYnVkZ2V0IGNvdW50ZXJzLCBwZXItbGlzdGVuZXIgdGltZSBhdHRyaWJ1dGlvbiwgYW5kIHRoZVxuICAgKiB0ZXJtaW5hbC1mbHVzaCBzdHJhbmRpbmcgY291bnQuIEFCU0VOVCB1bmxlc3MgYSByZWNvcmRlciB3YXMgYXR0YWNoZWRcbiAgICogd2l0aCBgeyBkZWxpdmVyeTogJ2RlZmVycmVkJyB9YCBvbiB0aGlzIGV4ZWN1dG9yICh6ZXJvLWNvc3QgZGlzY2lwbGluZSkuXG4gICAqL1xuICBvYnNlcnZlclN0YXRzPzogT2JzZXJ2ZXJTdGF0cztcbn07XG5cbmV4cG9ydCBjbGFzcyBFeGVjdXRpb25SdW50aW1lIHtcbiAgcHVibGljIGdsb2JhbFN0b3JlOiBTaGFyZWRNZW1vcnk7XG4gIC8qKlxuICAgKiBQYXJhbGxlbCByZWRhY3RlZCBtaXJyb3Igb2YgYGdsb2JhbFN0b3JlYC4gUG9wdWxhdGVkIGJ5IGV2ZXJ5IGNvbW1pdCB0aGF0XG4gICAqIHN0YWdlZCBhIHdyaXRlIChgbWVtb3J5L3JlY29yZENvbW1pdC50cyDCtyByZWNvcmRDb21taXRgKSwgd2l0aCB0aGUgYWxyZWFkeS1jb21wdXRlZCByZWRhY3RlZCBwYXRjaGVzLlxuICAgKiBPbmx5IGV4aXN0cyB3aGVuIHRoZSBydW4ncyBwb2xpY3kga2VlcHMgYSBtaXJyb3IgKGBSdW5Qb2xpY3kubWlycm9yYCDigJRcbiAgICogYEZsb3dDaGFydEV4ZWN1dG9yYCBzZXRzIGl0IHdoZW4gYSBgUmVkYWN0aW9uUG9saWN5YCBpcyBjb25maWd1cmVkKS5cbiAgICogT3RoZXJ3aXNlIHVuZGVmaW5lZCBhbmQgemVybyBjb3N0LlxuICAgKlxuICAgKiBSZWFkIHZpYSBgZ2V0U25hcHNob3QoeyByZWRhY3Q6IHRydWUgfSlgLlxuICAgKi9cbiAgcHVibGljIHJlZGFjdGVkU3RvcmU/OiBTaGFyZWRNZW1vcnk7XG4gIHB1YmxpYyByb290U3RhZ2VDb250ZXh0OiBTdGFnZUNvbnRleHQ7XG4gIHB1YmxpYyBleGVjdXRpb25IaXN0b3J5OiBFdmVudExvZztcbiAgLyoqIE9yaWdpbmFsIHJvb3QgZm9yIGdldFNuYXBzaG90KCkg4oCUIHNldCBiZWZvcmUgcmVzdW1lIGNoYW5nZXMgcm9vdFN0YWdlQ29udGV4dC4gKi9cbiAgcHJpdmF0ZSBfc25hcHNob3RSb290PzogU3RhZ2VDb250ZXh0O1xuICBwcml2YXRlIF9pbml0aWFsU3RhdGU6IHVua25vd247XG4gIHByaXZhdGUgX2RlZmF1bHRWYWx1ZXM6IHVua25vd247XG4gIC8qKiBUaGUgcnVuJ3MgcG9saWN5IChgbWVtb3J5L3J1blBvbGljeS50c2ApIOKAlCBpbnN0YWxsZWQgb24gdGhlIHJvb3QgZnJhbWU7XG4gICAqICBpdHMgYGNvbW1pdFZhbHVlc2AgYW5kIGB3cml0ZVByb3ZlbmFuY2VgIGFyZSB0aGUgc25hcHNob3QgZGlzY3JpbWluYW50cy4gKi9cbiAgcHJpdmF0ZSBwb2xpY3k6IFJ1blBvbGljeTtcblxuICAvKiogTWVtb2l6ZWQgZnJvemVuIGZvbGQgYmFzZSDigJQgc2VlIHtAbGluayBSdW50aW1lU25hcHNob3QuaW5pdGlhbFN0YXRlfS4gKi9cbiAgcHJpdmF0ZSBfZm9sZEJhc2U/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcblxuICAvKipcbiAgICogQHBhcmFtIHBvbGljeSBUaGUgcnVuJ3MgcG9saWN5IChgcnVuUG9saWN5LnRzYCwgRjUpIOKAlCB0aGUgZm91ciBkaWFscywgdGhlXG4gICAqICAgcmVkYWN0aW9uIHJ1bGUsIHRoZSBtaXJyb3IgZmxhZy4gSW5zdGFsbGVkIG9uIHRoZSByb290IGZyYW1lIGhlcmUsIHNvXG4gICAqICAgdGhlIEZJUlNUIGNvbW1pdCAoYSBzdWJmbG93J3Mgc2VlZCwgYGhpc3RvcnlbMF1gKSBhbHJlYWR5IHJ1bnMgdW5kZXIgaXQ7XG4gICAqICAgZXZlcnkgZnJhbWUgYWZ0ZXIgaW5oZXJpdHMgdGhlIHNhbWUgcmVmZXJlbmNlLiBEZWZhdWx0OiBldmVyeSBkaWFsIGF0XG4gICAqICAgaXRzIGRlZmF1bHQsIG5vIHJ1bGUsIG5vIG1pcnJvci5cbiAgICovXG4gIGNvbnN0cnVjdG9yKFxuICAgIHJvb3ROYW1lOiBzdHJpbmcsXG4gICAgcm9vdElkOiBzdHJpbmcsXG4gICAgZGVmYXVsdFZhbHVlcz86IHVua25vd24sXG4gICAgaW5pdGlhbFN0YXRlPzogdW5rbm93bixcbiAgICBwb2xpY3k6IFJ1blBvbGljeSA9IERFRkFVTFRfUlVOX1BPTElDWSxcbiAgKSB7XG4gICAgdGhpcy5faW5pdGlhbFN0YXRlID0gaW5pdGlhbFN0YXRlO1xuICAgIHRoaXMuX2RlZmF1bHRWYWx1ZXMgPSBkZWZhdWx0VmFsdWVzO1xuICAgIHRoaXMuZ2xvYmFsU3RvcmUgPSBuZXcgU2hhcmVkTWVtb3J5KGRlZmF1bHRWYWx1ZXMsIGluaXRpYWxTdGF0ZSk7XG4gICAgLy8gVGhlIGV2ZW50IGxvZydzIGZvbGQgYmFzZSBtdXN0IGJlIHRoZSBTQU1FIHN0YXRlIHRoZSBzdG9yZSBzdGFydHMgZnJvbVxuICAgIC8vIOKAlCBgaW5pdGlhbENvbnRleHRgIG1lcmdlZCB3aXRoIGBkZWZhdWx0VmFsdWVzRm9yQ29udGV4dGAsIHdoaWNoIGlzIHdoYXRcbiAgICAvLyBgU2hhcmVkTWVtb3J5YCBjb21wdXRlZCBhYm92ZS4gU2VlZGluZyB0aGUgbG9nIGZyb20gYGluaXRpYWxTdGF0ZWAgYWxvbmVcbiAgICAvLyBsZWZ0IGBkZWZhdWx0VmFsdWVzYCBvdXQgb2YgZXZlcnkgcmVwbGF5LCBzbyBhIGZvbGQgY291bGQgbm90IHJlcHJvZHVjZVxuICAgIC8vIHRoZSBzdGF0ZSBhIHN0YWdlIGFjdHVhbGx5IHNhdy4gYGdldFN0YXRlKClgIGlzIHRoZSBsaXZlIGNvbnRleHQ7IHRoZVxuICAgIC8vIEV2ZW50TG9nIGNvbnN0cnVjdG9yIGNsb25lcyBpdCwgc28gdGhlIGJhc2Ugc3RheXMgZGV0YWNoZWQuXG4gICAgdGhpcy5leGVjdXRpb25IaXN0b3J5ID0gbmV3IEV2ZW50TG9nKHRoaXMuZ2xvYmFsU3RvcmUuZ2V0U3RhdGUoKSk7XG4gICAgdGhpcy5wb2xpY3kgPSBwb2xpY3k7XG4gICAgdGhpcy5yb290U3RhZ2VDb250ZXh0ID0gdGhpcy5uZXdSb290KHJvb3ROYW1lLCByb290SWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEEgZnJlc2ggcm9vdCBmcmFtZSBmb3IgdGhpcyBydW50aW1lIOKAlCBgZ2xvYmFsU3RvcmVgLCBgZXhlY3V0aW9uSGlzdG9yeWAsXG4gICAqIHRoZSBydW4ncyBwb2xpY3kgYW5kICh3aGVuIGtlcHQpIHRoZSBtaXJyb3IuIEFsc28gaG93IGBTdWJmbG93RXhlY3V0b3JgXG4gICAqIHJlcGxhY2VzIGEgc3ViZmxvdydzIHNlZWQgZnJhbWUgd2l0aCB0aGUgZnJhbWUgaXRzIGZpcnN0IHN0YWdlIHJ1bnMgb24uXG4gICAqL1xuICBuZXdSb290KG5hbWU6IHN0cmluZywgaWQ6IHN0cmluZyk6IFN0YWdlQ29udGV4dCB7XG4gICAgY29uc3Qgcm9vdCA9IG5ldyBTdGFnZUNvbnRleHQoJycsIG5hbWUsIGlkLCB0aGlzLmdsb2JhbFN0b3JlLCAnJywgdGhpcy5leGVjdXRpb25IaXN0b3J5KTtcbiAgICB0aGlzLmluc3RhbGxQb2xpY3kocm9vdCk7XG4gICAgcmV0dXJuIHJvb3Q7XG4gIH1cblxuICAvKipcbiAgICogSW5zdGFsbCB0aGUgcnVuJ3MgcG9saWN5IG9uIHRoZSBDVVJSRU5UIHJvb3QgZnJhbWUg4oCUIGEgc2FtZS1leGVjdXRvclxuICAgKiByZXN1bWUsIHdob3NlIGNvbnRpbnVhdGlvbiByb290IChgbGVhZi5jcmVhdGVOZXh0YCkgaXMgYWR2YW5jZWQgYmVmb3JlXG4gICAqIHRoZSBleGVjdXRvciBidWlsZHMgdGhpcyBsZWcncyBwb2xpY3kgKGEgZnJlc2ggcnVsZSBwZXIgbGVnKS4gRXZlcnlcbiAgICogZGVzY2VuZGFudCB0YWtlcyB0aGUgcmVmZXJlbmNlIGZyb20gdGhlcmUuXG4gICAqL1xuICB1c2VQb2xpY3kocG9saWN5OiBSdW5Qb2xpY3kpOiB2b2lkIHtcbiAgICB0aGlzLnBvbGljeSA9IHBvbGljeTtcbiAgICB0aGlzLmluc3RhbGxQb2xpY3kodGhpcy5yb290U3RhZ2VDb250ZXh0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgcG9saWN5IG9uIGByb290YCwgYW5kIHRoZSBtaXJyb3Igc3RvcmUgd2hlbiB0aGUgcG9saWN5IGtlZXBzIG9uZS5cbiAgICogVGhlIG1pcnJvciBpcyBhIFNFUlZFRCBzdXJmYWNlLCBzbyBpdHMgc2VlZCBtdXN0IGFscmVhZHkgYmUgdGhlIHBvbGljeSdzXG4gICAqIHZpZXcgb2YgdGhlIHN0YXJ0aW5nIHN0YXRlOiBhIHBvbGljeSBrZXkgdGhhdCBhcnJpdmVzIGJ5IGBpbml0aWFsQ29udGV4dGBcbiAgICogLyBgZGVmYXVsdFZhbHVlc0ZvckNvbnRleHRgIChvciwgb24gYSBjcm9zcy1leGVjdXRvciByZXN1bWUsIGJ5IHRoZVxuICAgKiBjaGVja3BvaW50J3MgYHNoYXJlZFN0YXRlYCkgYW5kIGlzIG5ldmVyIHJlLXdyaXR0ZW4gd291bGQgb3RoZXJ3aXNlIHNpdFxuICAgKiBpbiBgZ2V0U25hcHNob3QoeyByZWRhY3Q6IHRydWUgfSlgIGluIHBsYWludGV4dCDigJQgc28gdGhlIHNlZWQgaXMgc2NydWJiZWRcbiAgICogd2l0aCB0aGUgTE9HJ3MgcGxhY2Vob2xkZXIsIHRoZSBzYW1lIHN0cmluZyB0aGUgcmVkYWN0ZWQgcGF0Y2hlcyBjYXJyeS5cbiAgICogQ3JlYXRlZCBvbmNlIHBlciBydW50aW1lIChhIHN1YmZsb3cncyBydW50aW1lIGtlZXBzIGl0cyBvd247IGl0cyBzZWVkIGlzXG4gICAqIGVtcHR5IOKAlCB0aGUgaW5wdXQgYXJyaXZlcyBhcyBhIGNvbW1pdCkuXG4gICAqL1xuICBwcml2YXRlIGluc3RhbGxQb2xpY3kocm9vdDogU3RhZ2VDb250ZXh0KTogdm9pZCB7XG4gICAgcm9vdC51c2VQb2xpY3kodGhpcy5wb2xpY3kpO1xuICAgIGlmICghdGhpcy5wb2xpY3kubWlycm9yKSByZXR1cm47XG4gICAgaWYgKCF0aGlzLnJlZGFjdGVkU3RvcmUpIHtcbiAgICAgIGNvbnN0IHJ1bGUgPSB0aGlzLnBvbGljeS5yZWRhY3Rpb247XG4gICAgICB0aGlzLnJlZGFjdGVkU3RvcmUgPSBuZXcgU2hhcmVkTWVtb3J5KFxuICAgICAgICBydWxlID8gcnVsZS5yZXRhaW5TdGF0ZSh0aGlzLl9kZWZhdWx0VmFsdWVzLCBMT0dfUExBQ0VIT0xERVIpIDogdGhpcy5fZGVmYXVsdFZhbHVlcyxcbiAgICAgICAgcnVsZSA/IHJ1bGUucmV0YWluU3RhdGUodGhpcy5faW5pdGlhbFN0YXRlLCBMT0dfUExBQ0VIT0xERVIpIDogdGhpcy5faW5pdGlhbFN0YXRlLFxuICAgICAgKTtcbiAgICB9XG4gICAgcm9vdC51c2VSZWRhY3RlZE1pcnJvcih0aGlzLnJlZGFjdGVkU3RvcmUpO1xuICB9XG5cbiAgLyoqIFByZXNlcnZlIHRoZSBjdXJyZW50IHJvb3RTdGFnZUNvbnRleHQgZm9yIHNuYXBzaG90cyBiZWZvcmUgY2hhbmdpbmcgaXQgZm9yIHJlc3VtZS4gKi9cbiAgcHJlc2VydmVTbmFwc2hvdFJvb3QoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLl9zbmFwc2hvdFJvb3QpIHtcbiAgICAgIHRoaXMuX3NuYXBzaG90Um9vdCA9IHRoaXMucm9vdFN0YWdlQ29udGV4dDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVGhlIGZyb3plbiwgZGV0YWNoZWQgZm9sZCBiYXNlIHNlcnZlZCBhcyB7QGxpbmsgUnVudGltZVNuYXBzaG90LmluaXRpYWxTdGF0ZX0uXG4gICAqIENvbXB1dGVkIG9uY2UgKHRoZSBiYXNlIG5ldmVyIGNoYW5nZXMgYWZ0ZXIgY29uc3RydWN0aW9uKSBhbmQgc2hhcmVkIOKAlFxuICAgKiBzYWZlIGJlY2F1c2UgaXQgaXMgZGVlcGx5IGZyb3plbiwgc28gbm8gaG9sZGVyIGNhbiBtdXRhdGUgaXQgb3IgcmVhY2ggdGhlXG4gICAqIGVuZ2luZSB0aHJvdWdoIGl0OyBhIGJhc2UgaG9sZGluZyBhIERhdGUsIE1hcCwgYnVmZmVyIOKApiAod2hhdCBmcmVlemluZ1xuICAgKiBjYW5ub3Qgc2VhbCkgaXMgc2VydmVkIGJ5IHRoZSBwdWJsaWMgc25hcHNob3QgYXMgYSBjb3B5IG9mIGl0cyBvcGVuIHBhdGhzXG4gICAqIChgcnVubmVyL3NuYXBzaG90LnRzIMK3IHNlcnZlZFNuYXBzaG90YCwgYGNhcHR1cmUvZnJlZXplLnRzIMK3IHNlcnZlUmVjb3JkYCxcbiAgICogOS40NC4yKS5cbiAgICovXG4gIHByaXZhdGUgZ2V0Rm9sZEJhc2UoKTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4ge1xuICAgIGlmICghdGhpcy5fZm9sZEJhc2UpIHtcbiAgICAgIGNvbnN0IGJhc2UgPSB0aGlzLmV4ZWN1dGlvbkhpc3RvcnkuZ2V0SW5pdGlhbFN0YXRlKCk7XG4gICAgICB0aGlzLl9mb2xkQmFzZSA9IGZyZWV6ZVJlY29yZChiYXNlICYmIHR5cGVvZiBiYXNlID09PSAnb2JqZWN0JyA/IGJhc2UgOiB7fSkgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9mb2xkQmFzZTtcbiAgfVxuXG4gIGdldFBpcGVsaW5lcygpOiBzdHJpbmdbXSB7XG4gICAgY29uc3Qgc3RhdGUgPSB0aGlzLmdsb2JhbFN0b3JlLmdldFN0YXRlKCk7XG4gICAgcmV0dXJuIHN0YXRlLnBpcGVsaW5lcyA/IE9iamVjdC5rZXlzKHN0YXRlLnBpcGVsaW5lcyBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikgOiBbXTtcbiAgfVxuXG4gIHNldFJvb3RPYmplY3QocGF0aDogc3RyaW5nW10sIGtleTogc3RyaW5nLCB2YWx1ZTogdW5rbm93bikge1xuICAgIHRoaXMucm9vdFN0YWdlQ29udGV4dC5zZXRPYmplY3QocGF0aCwga2V5LCB2YWx1ZSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIHRoZSBydW50aW1lIHNuYXBzaG90LlxuICAgKlxuICAgKiBAcGFyYW0gb3B0aW9ucy5yZWRhY3QgIFdoZW4gYHRydWVgLCByZXR1cm5zIGBzaGFyZWRTdGF0ZWAgZnJvbSB0aGVcbiAgICogICBwYXJhbGxlbCByZWRhY3RlZCBtaXJyb3IgKGlmIG9uZSB3YXMgZW5hYmxlZCkuIFRoaXMgaXMgdGhlIHNhZmUgdmlld1xuICAgKiAgIGZvciBzaGFyaW5nIHRyYWNlcyBleHRlcm5hbGx5IOKAlCBwYXN0ZSBpbnRvIGEgdmlld2VyLCBzaGlwIHRvIHN1cHBvcnQsXG4gICAqICAgZXRjLiBXaGVuIHRoZSBtaXJyb3Igd2FzIG5ldmVyIGVuYWJsZWQsIGZhbGxzIGJhY2sgdG8gcmF3IGBnbG9iYWxTdG9yZWBcbiAgICogICBhbmQgYSBkZXYtbW9kZSB3YXJuaW5nIGlzIGVtaXR0ZWQgKHNpbGVudCBpbiBwcm9kdWN0aW9uKS5cbiAgICpcbiAgICogICBEZWZhdWx0IGBmYWxzZWAgcHJlc2VydmVzIHRoZSBydW50aW1lIHZpZXcg4oCUIG5lY2Vzc2FyeSBmb3IgcGF1c2UgL1xuICAgKiAgIHJlc3VtZSAocmVzdW1wdGlvbiBtdXN0IHJlcGxheSBhZ2FpbnN0IHRoZSByZWFsIHZhbHVlcywgbm90XG4gICAqICAgJ1tSRURBQ1RFRF0nKS5cbiAgICpcbiAgICogT3RoZXIgZmllbGRzIChgZXhlY3V0aW9uVHJlZWAsIGBjb21taXRMb2dgKSBhcmUgdGhlIHNhbWUgZWl0aGVyIHdheSDigJRcbiAgICogdGhlIGNvbW1pdCBsb2cgaXMgYWxyZWFkeSByZWRhY3RlZCBhdCB3cml0ZS10aW1lLCBhbmQgdGhlIGV4ZWN1dGlvblxuICAgKiB0cmVlIG9ubHkgY2FycmllcyBzdHJ1Y3R1cmFsIG1ldGFkYXRhLlxuICAgKlxuICAgKiBgaW5pdGlhbFN0YXRlYCAodGhlIGZvbGQgYmFzZSkgaXMgT01JVFRFRCB1bmRlciBgcmVkYWN0OiB0cnVlYC4gSXQgaXMgdGhlXG4gICAqIHJ1bidzIHJhdyBwcmUtcnVuIHNlZWQg4oCUIGBpbml0aWFsQ29udGV4dGAgbWVyZ2VkIHdpdGhcbiAgICogYGRlZmF1bHRWYWx1ZXNGb3JDb250ZXh0YCDigJQgYW5kIGl0IG5ldmVyIHBhc3NlZCB0aHJvdWdoIGEgcmVkYWN0aW9uXG4gICAqIHBvbGljeTogdGhlIHBvbGljeSBzY3J1YnMgV1JJVEVTIGF0IHRoZSBzY29wZSBmYWNhZGUsIGFuZCB0aGUgYmFzZSB3YXNcbiAgICogbmV2ZXIgd3JpdHRlbiBieSBhIHN0YWdlLiBTZXJ2aW5nIGl0IG9uIHRoZSByZWRhY3RlZCBzdXJmYWNlIHdvdWxkIGhhbmRcbiAgICogYmFjayB0aGUgb3JpZ2luYWwgdmFsdWUgb2YgYSBzZWVkZWQgc2VjcmV0IHRoYXQgYSBsYXRlciBjb21taXQgaGFkXG4gICAqIHNjcnViYmVkLiBBIGNvbnN1bWVyIGZvbGRpbmcgd2l0aG91dCBpdCBnZXRzIGBiYXNpczogJ2xvZy1vbmx5J2AgZnJvbVxuICAgKiBgc3RhdGVBdGAsIHdoaWNoIGlzIHRoZSBob25lc3Qgc2lnbmFsIHRoYXQgdGhlIGJhc2UgZGlkIG5vdCB0cmF2ZWwgd2l0aFxuICAgKiB0aGlzIGxvZyDigJQgYSBwYXJ0aWFsIGFuc3dlciB0aGF0IHNheXMgaXQgaXMgcGFydGlhbCwgbmV2ZXIgYSBzaWxlbnQgb25lLlxuICAgKlxuICAgKiBSZXR1cm5zIGBPbWl0PFJ1bnRpbWVTbmFwc2hvdCwgJ3J1bklkJz5gOiB0aGUgcnVudGltZSBpcyB0aGUgbWVtb3J5XG4gICAqIGNvbnRhaW5lciBhbmQgZG9lc24ndCBrbm93IHdoaWNoIHJ1biBpdCBzZXJ2ZXMg4oCUIGBydW5JZGAgaXMgcGVyLXJ1blxuICAgKiBleGVjdXRvciBzdGF0ZSwgc3RhbXBlZCBieSBgRmxvd2NoYXJ0VHJhdmVyc2VyLmdldFNuYXBzaG90KClgICh3aGljaFxuICAgKiBvd25zIHRoZSBydW4ncyBpZCBhbmQgYWxyZWFkeSBzdGFtcHMgaXQgb24gZXZlcnkgZXZlbnQpLiBTdWJmbG93cydcbiAgICogbmVzdGVkIHJ1bnRpbWVzIGRlbGliZXJhdGVseSBoYXZlIE5PIHJ1bklkIG9mIHRoZWlyIG93biAoYSBzdWJmbG93IGlzXG4gICAqIHBhcnQgb2YgdGhlIHBhcmVudCdzIGxvZ2ljYWwgcnVuKS5cbiAgICovXG4gIGdldFNuYXBzaG90KG9wdGlvbnM/OiB7IHJlZGFjdD86IGJvb2xlYW4gfSk6IE9taXQ8UnVudGltZVNuYXBzaG90LCAncnVuSWQnPiB7XG4gICAgY29uc3Qgc25hcHNob3RSb290ID0gdGhpcy5fc25hcHNob3RSb290ID8/IHRoaXMucm9vdFN0YWdlQ29udGV4dDtcbiAgICBjb25zdCB1c2VSZWRhY3RlZCA9IG9wdGlvbnM/LnJlZGFjdCA9PT0gdHJ1ZSAmJiB0aGlzLnJlZGFjdGVkU3RvcmUgIT09IHVuZGVmaW5lZDtcbiAgICByZXR1cm4ge1xuICAgICAgc2hhcmVkU3RhdGU6IHVzZVJlZGFjdGVkID8gdGhpcy5yZWRhY3RlZFN0b3JlIS5nZXRTdGF0ZSgpIDogdGhpcy5nbG9iYWxTdG9yZS5nZXRTdGF0ZSgpLFxuICAgICAgZXhlY3V0aW9uVHJlZTogc25hcHNob3RSb290LmdldFNuYXBzaG90KCksXG4gICAgICAvLyBSRURBQ1RJT046IHRoZSBmb2xkIGJhc2UgaXMgdGhlIHJhdyBwcmUtcnVuIHNlZWQgYW5kIG5vIHBvbGljeSBldmVyXG4gICAgICAvLyB0b3VjaGVkIGl0IChwb2xpY2llcyBzY3J1YiB3cml0ZXM7IG5vdGhpbmcgd3JvdGUgdGhlIGJhc2UpLiBPbWl0IGl0XG4gICAgICAvLyByYXRoZXIgdGhhbiBsZWFrIGl0IOKAlCBgc3RhdGVBdGAgZGVncmFkZXMgdG8gYGJhc2lzOiAnbG9nLW9ubHknYC5cbiAgICAgIC4uLih1c2VSZWRhY3RlZCA/IHt9IDogeyBpbml0aWFsU3RhdGU6IHRoaXMuZ2V0Rm9sZEJhc2UoKSB9KSxcbiAgICAgIC8vIERFVEFDSEVEOiB0aGUgZW5naW5lIGtlZXBzIGl0cyBsaXZlIEV2ZW50TG9nOyB0aGUgc25hcHNob3QgZ2V0cyBhXG4gICAgICAvLyBmcm96ZW4gYXJyYXkgb2YgaXRzIG93biAoYHJlY29yZGVkKClgIGJ1aWxkcyBhIG5ldyBvbmUpLiBTZXJ2aW5nIHRoZVxuICAgICAgLy8gaW50ZXJuYWwgYXJyYXkgYWxpYXNlZCBpdCwgc28gYSBzbmFwc2hvdCB0YWtlbiBtaWQtcnVuIGtlcHQgZ3Jvd2luZ1xuICAgICAgLy8gdW5kZXIgaXRzIGhvbGRlciBhbmQgYSBjb25zdW1lciBjb3VsZCBzcGxpY2UgdGhlIGVuZ2luZSdzIG93biBoaXN0b3J5LlxuICAgICAgLy8gVGhlIGJ1bmRsZXMgaW4gaXQgYXJlIHRoZSBsb2cncyBvd24sIGZyb3plbiBhdCBgRXZlbnRMb2cgwrcgcmVjb3JkYFxuICAgICAgLy8gKEYzKS4gVGhlIHB1YmxpYyBzbmFwc2hvdCBzZXJ2ZXMgdGhlbSAoYHJ1bm5lci9zbmFwc2hvdC50cyDCt1xuICAgICAgLy8gc2VydmVkU25hcHNob3RgLCA5LjQ0LjIpOyB0aGlzIG9uZSBpcyBhbHNvIHRoZSBlbmdpbmUncyBvd24g4oCUIGFcbiAgICAgIC8vIHN1YmZsb3cgbW91bnQgdGFrZXMgaXQgb25jZSBwZXIgbW91bnQg4oCUIHNvIHRoZSBydW4gcGF0aCBzZXJ2ZXMgbm90aGluZy5cbiAgICAgIGNvbW1pdExvZzogT2JqZWN0LmZyZWV6ZSh0aGlzLmV4ZWN1dGlvbkhpc3RvcnkucmVjb3JkZWQoKSkgYXMgQ29tbWl0QnVuZGxlW10sXG4gICAgICAuLi4odGhpcy5leGVjdXRpb25IaXN0b3J5LmFkZHJlc3MgPT09IHVuZGVmaW5lZCA/IHt9IDogeyBsb2dBZGRyZXNzOiB0aGlzLmV4ZWN1dGlvbkhpc3RvcnkuYWRkcmVzcyB9KSxcbiAgICAgIGNvbW1pdFZhbHVlczogdGhpcy5wb2xpY3kuY29tbWl0VmFsdWVzLFxuICAgICAgd3JpdGVQcm92ZW5hbmNlOiB0aGlzLnBvbGljeS53cml0ZVByb3ZlbmFuY2UsXG4gICAgfTtcbiAgfVxufVxuIl19
192
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRXhlY3V0aW9uUnVudGltZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvcnVubmVyL0V4ZWN1dGlvblJ1bnRpbWUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7Ozs7O0dBVUc7OztBQUlILDJDQUF3RjtBQUl4Rix5REFBNEQ7QUFDNUQsK0RBQXlEO0FBa0h6RCxNQUFhLGdCQUFnQjtJQUNwQixXQUFXLENBQWU7SUFDakM7Ozs7Ozs7O09BUUc7SUFDSSxhQUFhLENBQWdCO0lBQzdCLGdCQUFnQixDQUFlO0lBQy9CLGdCQUFnQixDQUFXO0lBQ2xDLG9GQUFvRjtJQUM1RSxhQUFhLENBQWdCO0lBQzdCLGFBQWEsQ0FBVTtJQUN2QixjQUFjLENBQVU7SUFDaEM7bUZBQytFO0lBQ3ZFLE1BQU0sQ0FBWTtJQUUxQiw0RUFBNEU7SUFDcEUsU0FBUyxDQUEyQjtJQUU1Qzs7Ozs7O09BTUc7SUFDSCxZQUNFLFFBQWdCLEVBQ2hCLE1BQWMsRUFDZCxhQUF1QixFQUN2QixZQUFzQixFQUN0QixTQUFvQixpQ0FBa0I7UUFFdEMsSUFBSSxDQUFDLGFBQWEsR0FBRyxZQUFZLENBQUM7UUFDbEMsSUFBSSxDQUFDLGNBQWMsR0FBRyxhQUFhLENBQUM7UUFDcEMsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLG9CQUFZLENBQUMsYUFBYSxFQUFFLFlBQVksQ0FBQyxDQUFDO1FBQ2pFLHlFQUF5RTtRQUN6RSwwRUFBMEU7UUFDMUUsMkVBQTJFO1FBQzNFLDBFQUEwRTtRQUMxRSx3RUFBd0U7UUFDeEUsOERBQThEO1FBQzlELElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLGdCQUFRLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1FBQ2xFLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEs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bnRpbWUg4oCUIFRoZSBydW50aW1lIGVudmlyb25tZW50IGZvciBvbmUgZmxvd2NoYXJ0IGV4ZWN1dGlvbi5cbiAqXG4gKiBXaXJlcyB1cCB0aGUgdGhyZWUgbWVtb3J5IHByaW1pdGl2ZXMgaW50byBhIHNpbmdsZSBjb250YWluZXI6XG4gKiAgIC0gU2hhcmVkTWVtb3J5ICh0aGUgaGVhcCDigJQgc2hhcmVkIHN0YXRlIGFjcm9zcyBhbGwgc3RhZ2VzKVxuICogICAtIFN0YWdlQ29udGV4dCAgKHRoZSBjYWxsIHN0YWNrIOKAlCBwZXItc3RhZ2UgZXhlY3V0aW9uIHRyZWUpXG4gKiAgIC0gRXZlbnRMb2cgICAgICAodGhlIHRyYW5zYWN0aW9uIGxvZyDigJQgY29tbWl0IGhpc3RvcnkgZm9yIHJlcGxheSlcbiAqXG4gKiBUaGUgZW5naW5lIChGbG93Y2hhcnRUcmF2ZXJzZXIpIHJlY2VpdmVzIHRoaXMgYXMgaXRzIHJ1bnRpbWUgcGFyYW1ldGVyLlxuICogQWZ0ZXIgZXhlY3V0aW9uLCBjb25zdW1lcnMgcXVlcnkgaXQgZm9yIHRoZSBmdWxsIGV4ZWN1dGlvbiBzdGF0ZS5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IENvbW1pdEJ1bmRsZSwgQ29tbWl0VmFsdWVzTW9kZSwgTG9nQWRkcmVzcyB9IGZyb20gJ2Zvb3R0cmFjZSc7XG5pbXBvcnQgdHlwZSB7IFdyaXRlUHJvdmVuYW5jZU1vZGUgfSBmcm9tICdmb290dHJhY2Uvd3JpdGUnO1xuaW1wb3J0IHsgRXZlbnRMb2csIGZyZWV6ZVJlY29yZCwgTE9HX1BMQUNFSE9MREVSLCBTaGFyZWRNZW1vcnkgfSBmcm9tICdmb290dHJhY2Uvd3JpdGUnO1xuXG5pbXBvcnQgdHlwZSB7IFN0YWdlU25hcHNob3QgfSBmcm9tICcuLi9tZW1vcnkvZnJhbWVUeXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7IFJ1blBvbGljeSB9IGZyb20gJy4uL21lbW9yeS9ydW5Qb2xpY3kuanMnO1xuaW1wb3J0IHsgREVGQVVMVF9SVU5fUE9MSUNZIH0gZnJvbSAnLi4vbWVtb3J5L3J1blBvbGljeS5qcyc7XG5pbXBvcnQgeyBTdGFnZUNvbnRleHQgfSBmcm9tICcuLi9tZW1vcnkvU3RhZ2VDb250ZXh0LmpzJztcbmltcG9ydCB0eXBlIHsgT2JzZXJ2ZXJTdGF0cyB9IGZyb20gJy4vRGVmZXJyZWRPYnNlcnZlclRpZXIuanMnO1xuXG4vKiogU25hcHNob3Qgb2YgYSBzaW5nbGUgcmVjb3JkZXIncyBjb2xsZWN0ZWQgZGF0YS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVjb3JkZXJTbmFwc2hvdCB7XG4gIGlkOiBzdHJpbmc7XG4gIG5hbWU6IHN0cmluZztcbiAgLyoqIFNjb3BlUmVjb3JkZXIgdHlwZSBhbmQgcGF0dGVybiBkZXNjcmlwdGlvbiAoZS5nLiwgXCJUcmFuc2xhdG9yIChLZXllZFN0b3JlKSDigJQgcGVyLXN0ZXAgdG9rZW4gdXNhZ2VcIikuICovXG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICAvKiogUHJlZmVycmVkIHJlYWQtdGltZSBvcGVyYXRpb24g4oCUIGhpbnRzIHRoZSBVSSBhYm91dCB3aGljaCB2aWV3IHRvIHNob3cgcHJvbWluZW50bHkuICovXG4gIHByZWZlcnJlZE9wZXJhdGlvbj86ICd0cmFuc2xhdGUnIHwgJ2FjY3VtdWxhdGUnIHwgJ2FnZ3JlZ2F0ZSc7XG4gIGRhdGE6IHVua25vd247XG4gIC8qKlxuICAgKiBTbWFsbCBtYWNoaW5lLXJlYWRhYmxlIGZhY3RzIGFib3V0IHRoZSBCVU5ETEUg4oCUIGhvdyBpdCB3YXMgcHJvZHVjZWQsXG4gICAqIHdoaWNoIHByb2plY3Rpb24gb2YgdGhlIHJlY29yZGVyJ3MgZGF0YSBpdCBpcywgd2hhdCBpdCBkZWxpYmVyYXRlbHlcbiAgICogbGVmdCBvdXQuIFdoYXRldmVyIHRoZSByZWNvcmRlcidzIGB0b1NuYXBzaG90KClgIHB1dCBoZXJlLCBjb3BpZWRcbiAgICogdGhyb3VnaCB1bmNoYW5nZWQuXG4gICAqXG4gICAqIFRoZSBzcGxpdCB3aXRoIGBkZXNjcmlwdGlvbmA6IGBkZXNjcmlwdGlvbmAgaXMgdGhlIHNlbnRlbmNlIGEgaHVtYW5cbiAgICogcmVhZHM7IGBtZXRhYCBpcyB3aGF0IGFuIG9mZmxpbmUgY29uc3VtZXIgQlJBTkNIRVMgb24uIEEgcmVjb3JkZXIgd2l0aFxuICAgKiBhIFwiZnVsbFwiIGFuZCBhIFwibGVhblwiIGJ1bmRsZSBzaGFwZSB0aGF0IHNheXMgc28gb25seSBpbiBpdHNcbiAgICogZGVzY3JpcHRpb24gZm9yY2VzIGV2ZXJ5IHJlYWRlciB0byBzdHJpbmctbWF0Y2ggcHJvc2Ug4oCUIGFuZCBhIHJlYWRlclxuICAgKiB0aGF0IGRvZXNuJ3QgcmVuZGVycyBhbiBlbXB0eSBwYW5lbCBpbnN0ZWFkIG9mIHNheWluZyBcInRoaXMgcmVjb3JkaW5nXG4gICAqIGNhcnJpZXMgc3RydWN0dXJlIG9ubHlcIi5cbiAgICpcbiAgICogTm90IGludGVycHJldGVkIGJ5IHRoZSBlbmdpbmUsIHNvIGtleXMgYXJlIHRoZSByZWNvcmRlcidzIHRvIGNob29zZTtcbiAgICoga2VlcCB0aGUgdmFsdWVzIEpTT04tc2FmZSwgc2luY2UgdGhpcyByaWRlcyB0aGUgc25hcHNob3Qgb3V0IHRvIGRpc2suXG4gICAqL1xuICBtZXRhPzogUmVhZG9ubHk8UmVjb3JkPHN0cmluZywgdW5rbm93bj4+O1xufVxuXG5leHBvcnQgdHlwZSBSdW50aW1lU25hcHNob3QgPSB7XG4gIC8qKlxuICAgKiBUaGUgcnVuIHRoaXMgc25hcHNob3QgYmVsb25ncyB0byDigJQgdGhlIHNhbWUgYHJ1bklkYCBzdGFtcGVkIG9uIGV2ZXJ5XG4gICAqIGBUcmF2ZXJzYWxDb250ZXh0YCAoYW5kIHRodXMgZXZlcnkgcmVjb3JkZXIgZXZlbnQpIG9mIHRoZSBydW4sIHNvIGFcbiAgICogc25hcHNob3QgY2FuIGJlIGpvaW5lZCBhZ2FpbnN0IGFuIGV2ZW50IHN0cmVhbSBvciBhbiBleHRlcm5hbFxuICAgKiBjb3JyZWxhdGlvbiB0YWJsZS4gUmVhZC1vbmx5IGJ5IGNvbnRyYWN0OiBnZW5lcmF0ZWQgYnkgdGhlIGV4ZWN1dG9yXG4gICAqIChgcnVubmVyL3J1bklkLnRzYCksIG5ldmVyIGRlcml2ZWQgZnJvbSBzbmFwc2hvdCBjb250ZW50cy5cbiAgICpcbiAgICogTGlmZWN5Y2xlIChtYXRjaGVzIHRoZSBldmVudCBtb2RlbCk6IGZyZXNoIHBlciBgcnVuKClgIEFORCBwZXJcbiAgICogYHJlc3VtZSgpYCDigJQgcmVzdW1lIGlzIGxvZ2ljYWxseSBhIGRpc3RpbmN0IHJ1biwgc28gYSBwb3N0LXJlc3VtZVxuICAgKiBzbmFwc2hvdCBjYXJyaWVzIGEgRElGRkVSRU5UIHJ1bklkIHRoYW4gdGhlIHBhdXNlZCBydW4ncyBzbmFwc2hvdC5cbiAgICovXG4gIHJlYWRvbmx5IHJ1bklkOiBzdHJpbmc7XG4gIHNoYXJlZFN0YXRlOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgZXhlY3V0aW9uVHJlZTogU3RhZ2VTbmFwc2hvdDtcbiAgLyoqXG4gICAqIFRoZSBjb21taXQgbG9nJ3MgZm9sZCBCQVNFIOKAlCB0aGUgcnVuJ3Mgc3RhdGUgYmVmb3JlIGl0cyBmaXJzdCBjb21taXRcbiAgICogKGBpbml0aWFsQ29udGV4dGAgbWVyZ2VkIHdpdGggYGRlZmF1bHRWYWx1ZXNGb3JDb250ZXh0YDsgb24gYSByZXN1bWUsIHRoZVxuICAgKiBjaGVja3BvaW50J3Mgc3RhdGUpLiBEZWVwbHkgZnJvemVuIGFuZCBmdWxseSBkZXRhY2hlZCBmcm9tIHRoZSBlbmdpbmUuXG4gICAqXG4gICAqIENvbW1pdCBidW5kbGVzIGFyZSBESUZGUywgc28gdGhlIGxvZyBhbG9uZSBjYW5ub3QgcmVidWlsZCBhIHZhbHVlIHRoYXRcbiAgICogd2FzIHNlZWRlZCBiZWZvcmUgdGhlIHJ1biBhbmQgb25seSBldmVyIG1lcmdlZCBhZnRlcndhcmRzLiBTaGlwcGluZyB0aGVcbiAgICogYmFzZSBXSVRIIHRoZSBsb2cgaXMgd2hhdCBtYWtlcyBhbiBvZmZsaW5lIGZvbGQg4oCUIGBzdGF0ZUF0KHNuYXBzaG90LCBpKWBcbiAgICogZnJvbSBgZm9vdHRyYWNlYCDigJQgcmVwcm9kdWNlIHRoZSBzdGF0ZSBhIHN0YWdlIGFjdHVhbGx5IHNhdy5cbiAgICpcbiAgICogT1BUSU9OQUwgQlkgVFlQRSwgYW5kIGFic2VudCBpbiBleGFjdGx5IHR3byBjYXNlcy4gQSBwbGFpbiBgZ2V0U25hcHNob3QoKWBcbiAgICogYWx3YXlzIGNhcnJpZXMgaXQsIHNvIGEgbGl2ZSBmb2xkIHJlcG9ydHMgYGJhc2lzOiAnaW5pdGlhbCtsb2cnYC4gVW5kZXJcbiAgICogYGdldFNuYXBzaG90KHsgcmVkYWN0OiB0cnVlIH0pYCBpdCBpcyBPTUlUVEVEIOKAlCB0aGUgYmFzZSBpcyB0aGUgcmF3IHByZS1ydW5cbiAgICogc2VlZCBhbmQgdGhlIHJlZGFjdGlvbiBwb2xpY3kgaXMgbm90IHBsdW1iZWQgaW50byB0aGUgZm9sZCDigJQgc28gYSBmb2xkIG9mXG4gICAqIGEgcmVkYWN0ZWQgc25hcHNob3QgZGVncmFkZXMgaG9uZXN0bHkgdG8gYGJhc2lzOiAnbG9nLW9ubHknYC4gQW5kIGl0IGlzXG4gICAqIGRlY2xhcmVkIG9wdGlvbmFsIHNvIHRoYXQgY29kZSB3cml0dGVuIGFnYWluc3QgOS4xNi54IOKAlCBhIHRlc3QgZml4dHVyZSBvclxuICAgKiBhIFVJIG1vY2sgdGhhdCBDT05TVFJVQ1RTIGEgYFJ1bnRpbWVTbmFwc2hvdGAgbGl0ZXJhbCDigJQgc3RpbGwgY29tcGlsZXMuXG4gICAqIGBzdGF0ZUF0YCBoYW5kbGVzIGFic2VuY2UgYnkgc2F5aW5nIHNvLCBuZXZlciBieSBmb2xkaW5nIGEgbGllLlxuICAgKi9cbiAgcmVhZG9ubHkgaW5pdGlhbFN0YXRlPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIC8qKlxuICAgKiBUaGUgcnVuJ3MgY29tbWl0IGJ1bmRsZXMsIG9uZSBwZXIgZXhlY3V0ZWQgc3RhZ2UsIGluIGV4ZWN1dGlvbiBvcmRlciDigJRcbiAgICogYSBERVRBQ0hFRCwgZnJvemVuIGNvcHkgb2YgdGhlIGVuZ2luZSdzIGxpdmUgbG9nIChhIHNuYXBzaG90IGlzIGEgZm9sZFxuICAgKiByZXN1bHQ6IGl0IG11c3Qgbm90IGtlZXAgY2hhbmdpbmcgdW5kZXIgdGhlIGNvbnN1bWVyIHRoYXQgaG9sZHMgaXQpLlxuICAgKiBUaGUgYnVuZGxlcyBpbnNpZGUgYXJlIHRoZSBlbmdpbmUncyBvd24gb2JqZWN0cywgaW1tdXRhYmxlIGFmdGVyIHJlY29yZC5cbiAgICovXG4gIGNvbW1pdExvZzogQ29tbWl0QnVuZGxlW107XG4gIC8qKiBJZGVudGl0eSBvZiB0aGlzIGxvZywgc3RhYmxlIGFjcm9zcyBzYW1lLWV4ZWN1dG9yIHJlc3VtZS4gQWJzZW50IGJlZm9yZSBiaW5kaW5nIG9yIGluIG9sZGVyIHNvdXJjZXMuICovXG4gIHJlYWRvbmx5IGxvZ0FkZHJlc3M/OiBMb2dBZGRyZXNzO1xuICAvKipcbiAgICogRW5jb2RpbmcgZGlzY3JpbWluYW50IGZvciBgY29tbWl0TG9nYCAoIzEzYy1CKTogYCdmdWxsJ2Ag4oCUIGV2ZXJ5IGBzZXRgXG4gICAqIGJ1bmRsZSBzdG9yZXMgdGhlIGZ1bGwgZmluYWwgdmFsdWUgKGhpc3RvcmljYWwpOyBgJ2RlbHRhJ2Ag4oCUIGJ1bmRsZXMgbWF5XG4gICAqIGNhcnJ5IGBhcHBlbmRgL2BkZWxldGVgIHRyYWNlIHZlcmJzIHdpdGggdmVyYi1xdWFsaWZpZWQgYG92ZXJ3cml0ZWBcbiAgICogcGF5bG9hZHMgKHRhaWxzKS4gT2ZmbGluZSB0b29saW5nIGtleXMgb24gdGhpcyBmaWVsZDsgYSBidW5kbGUgc3RyZWFtXG4gICAqIHdpdGhvdXQgY29udGV4dCByZW1haW5zIHNlbGYtZGVzY3JpYmluZyB2aWEgdGhlIHZlcmJzIHRoZW1zZWx2ZXMuXG4gICAqL1xuICBjb21taXRWYWx1ZXM6IENvbW1pdFZhbHVlc01vZGU7XG4gIC8qKiBQZXItd3JpdGUgcmVhZC1wcm92ZW5hbmNlIGRpYWwgKCNQMSkgdGhlIHJ1biBleGVjdXRlZCB1bmRlciDigJQgdGhlXG4gICAqICBvZmZsaW5lLXRvb2xpbmcgZGlzY3JpbWluYW50IGZvciBgVHJhY2VFbnRyeS5yZWFkS2V5c2AgYXZhaWxhYmlsaXR5LiAqL1xuICB3cml0ZVByb3ZlbmFuY2U6IFdyaXRlUHJvdmVuYW5jZU1vZGU7XG4gIC8qKlxuICAgKiBQZXItc3ViZmxvdyBleGVjdXRpb24gcmVzdWx0cywgRFVBTC1LRVlFRCAoZGVzaWduOiBkb2NzL2Rlc2lnbi9zdWJmbG93LWNvbW1pdC12aXNpYmlsaXR5Lm1kKTpcbiAgICogICAtIGJ5IHN1YmZsb3cgUEFUSCAoYHN1YmZsb3dJZGAsIGUuZy4gYCdzZi1wYXknYCkg4oaSIHRoZSBMQVNUIGl0ZXJhdGlvbiAoYmFjay1jb21wYXQpOyB0aGlzXG4gICAqICAgICBpcyB3aGF0IGBnZXRTdWJ0cmVlU25hcHNob3QocGF0aClgIGFuZCBgbGlzdFN1YmZsb3dQYXRocygpYCByZXNvbHZlLlxuICAgKiAgIC0gYnkgcGVyLWV4ZWN1dGlvbiBtb3VudCBgcnVudGltZVN0YWdlSWRgIChlLmcuIGAnc2YtcGF5IzUnYCkg4oaSIFRIQVQgaXRlcmF0aW9uJ3MgcmVzdWx0LCBzb1xuICAgKiAgICAgYSBMT09QSU5HIHN1YmZsb3cgcmV0YWlucyBFVkVSWSBpdGVyYXRpb24gKG5vdCBqdXN0IHRoZSBsYXN0KS4gTG9vayB1cCBhIHNwZWNpZmljXG4gICAqICAgICBpdGVyYXRpb24gYXMgYHN1YmZsb3dSZXN1bHRzW25vZGUucnVudGltZVN0YWdlSWRdID8/IHN1YmZsb3dSZXN1bHRzW25vZGUuc3ViZmxvd0lkXWAuXG4gICAqIEJvdGgga2V5cyBwb2ludCBhdCB0aGUgc2FtZSBvYmplY3QgZm9yIGEgc2luZ2xlIG1vdW50OyBpdGVyYXRlIHdpdGggY2FyZSAoY291bnQgdmlhIHRoZVxuICAgKiBwYXRoIGtleXMg4oCUIHRob3NlIHdpdGhvdXQgYCcjJ2ApLiBUaGUgcGF1c2UgY2hlY2twb2ludCBjYXJyaWVzIG9ubHkgdGhlIHBhdGgga2V5cywgbGVhbi5cbiAgICpcbiAgICogVW5kZXIgYGdldFNuYXBzaG90KHsgcmVkYWN0OiB0cnVlIH0pYCBlYWNoIGVudHJ5J3MgYHRyZWVDb250ZXh0Lmdsb2JhbENvbnRleHRgIGlzIHRoYXRcbiAgICogc3ViZmxvdydzIE9XTiByZWRhY3RlZCBtaXJyb3IgKDkuMjAuMCkg4oCUIHRoZSBmb2xkIG9mIGl0cyBzY3J1YmJlZCBgaGlzdG9yeWAg4oCUIHNlcnZlZCBhc1xuICAgKiBvbmUgc3Vic3RpdHV0ZWQgb2JqZWN0IHBlciBtb3VudCAoYm90aCBrZXlzIHN0aWxsIGFncmVlKSDigJQgdGhlIHdyYXBwZXIgaXMgZnJlc2ggcGVyXG4gICAqIGBnZXRTbmFwc2hvdGAgY2FsbCwgdGhlIGBnbG9iYWxDb250ZXh0YCBpbnNpZGUgaXQgaXMgdGhlIHN0YWJsZSBtaXJyb3I7IHBsYWluLCBpdCBpcyB0aGUgc3ViZmxvdydzXG4gICAqIGxpdmUgaGVhcC4gV2l0aG91dCBhIHBvbGljeSB0aGVyZSBpcyBubyBtaXJyb3IgYW5kIHRoZSB0d28gdmlld3MgYXJlIHRoZSBzYW1lIG9iamVjdHMuXG4gICAqL1xuICBzdWJmbG93UmVzdWx0cz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAvKiogU25hcHNob3QgZGF0YSBmcm9tIHJlY29yZGVycyB0aGF0IGltcGxlbWVudCB0b1NuYXBzaG90KCkuICovXG4gIHJlY29yZGVycz86IFJlY29yZGVyU25hcHNob3RbXTtcbiAgLyoqXG4gICAqIERlZmVycmVkLW9ic2VydmVyIGFjY291bnRpbmcgKFJGQy0wMDEgQmxvY2sgOSkg4oCUIHF1ZXVlIGRlcHRoLCBkcm9wcyxcbiAgICogZmx1c2gvYnVkZ2V0IGNvdW50ZXJzLCBwZXItbGlzdGVuZXIgdGltZSBhdHRyaWJ1dGlvbiwgYW5kIHRoZVxuICAgKiB0ZXJtaW5hbC1mbHVzaCBzdHJhbmRpbmcgY291bnQuIEFCU0VOVCB1bmxlc3MgYSByZWNvcmRlciB3YXMgYXR0YWNoZWRcbiAgICogd2l0aCBgeyBkZWxpdmVyeTogJ2RlZmVycmVkJyB9YCBvbiB0aGlzIGV4ZWN1dG9yICh6ZXJvLWNvc3QgZGlzY2lwbGluZSkuXG4gICAqL1xuICBvYnNlcnZlclN0YXRzPzogT2JzZXJ2ZXJTdGF0cztcbn07XG5cbmV4cG9ydCBjbGFzcyBFeGVjdXRpb25SdW50aW1lIHtcbiAgcHVibGljIGdsb2JhbFN0b3JlOiBTaGFyZWRNZW1vcnk7XG4gIC8qKlxuICAgKiBQYXJhbGxlbCByZWRhY3RlZCBtaXJyb3Igb2YgYGdsb2JhbFN0b3JlYC4gUG9wdWxhdGVkIGJ5IGV2ZXJ5IGNvbW1pdCB0aGF0XG4gICAqIHN0YWdlZCBhIHdyaXRlIChgbWVtb3J5L3JlY29yZENvbW1pdC50cyDCtyByZWNvcmRDb21taXRgKSwgd2l0aCB0aGUgYWxyZWFkeS1jb21wdXRlZCByZWRhY3RlZCBwYXRjaGVzLlxuICAgKiBPbmx5IGV4aXN0cyB3aGVuIHRoZSBydW4ncyBwb2xpY3kga2VlcHMgYSBtaXJyb3IgKGBSdW5Qb2xpY3kubWlycm9yYCDigJRcbiAgICogYEZsb3dDaGFydEV4ZWN1dG9yYCBzZXRzIGl0IHdoZW4gYSBgUmVkYWN0aW9uUG9saWN5YCBpcyBjb25maWd1cmVkKS5cbiAgICogT3RoZXJ3aXNlIHVuZGVmaW5lZCBhbmQgemVybyBjb3N0LlxuICAgKlxuICAgKiBSZWFkIHZpYSBgZ2V0U25hcHNob3QoeyByZWRhY3Q6IHRydWUgfSlgLlxuICAgKi9cbiAgcHVibGljIHJlZGFjdGVkU3RvcmU/OiBTaGFyZWRNZW1vcnk7XG4gIHB1YmxpYyByb290U3RhZ2VDb250ZXh0OiBTdGFnZUNvbnRleHQ7XG4gIHB1YmxpYyBleGVjdXRpb25IaXN0b3J5OiBFdmVudExvZztcbiAgLyoqIE9yaWdpbmFsIHJvb3QgZm9yIGdldFNuYXBzaG90KCkg4oCUIHNldCBiZWZvcmUgcmVzdW1lIGNoYW5nZXMgcm9vdFN0YWdlQ29udGV4dC4gKi9cbiAgcHJpdmF0ZSBfc25hcHNob3RSb290PzogU3RhZ2VDb250ZXh0O1xuICBwcml2YXRlIF9pbml0aWFsU3RhdGU6IHVua25vd247XG4gIHByaXZhdGUgX2RlZmF1bHRWYWx1ZXM6IHVua25vd247XG4gIC8qKiBUaGUgcnVuJ3MgcG9saWN5IChgbWVtb3J5L3J1blBvbGljeS50c2ApIOKAlCBpbnN0YWxsZWQgb24gdGhlIHJvb3QgZnJhbWU7XG4gICAqICBpdHMgYGNvbW1pdFZhbHVlc2AgYW5kIGB3cml0ZVByb3ZlbmFuY2VgIGFyZSB0aGUgc25hcHNob3QgZGlzY3JpbWluYW50cy4gKi9cbiAgcHJpdmF0ZSBwb2xpY3k6IFJ1blBvbGljeTtcblxuICAvKiogTWVtb2l6ZWQgZnJvemVuIGZvbGQgYmFzZSDigJQgc2VlIHtAbGluayBSdW50aW1lU25hcHNob3QuaW5pdGlhbFN0YXRlfS4gKi9cbiAgcHJpdmF0ZSBfZm9sZEJhc2U/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcblxuICAvKipcbiAgICogQHBhcmFtIHBvbGljeSBUaGUgcnVuJ3MgcG9saWN5IChgcnVuUG9saWN5LnRzYCwgRjUpIOKAlCB0aGUgZm91ciBkaWFscywgdGhlXG4gICAqICAgcmVkYWN0aW9uIHJ1bGUsIHRoZSBtaXJyb3IgZmxhZy4gSW5zdGFsbGVkIG9uIHRoZSByb290IGZyYW1lIGhlcmUsIHNvXG4gICAqICAgdGhlIEZJUlNUIGNvbW1pdCAoYSBzdWJmbG93J3Mgc2VlZCwgYGhpc3RvcnlbMF1gKSBhbHJlYWR5IHJ1bnMgdW5kZXIgaXQ7XG4gICAqICAgZXZlcnkgZnJhbWUgYWZ0ZXIgaW5oZXJpdHMgdGhlIHNhbWUgcmVmZXJlbmNlLiBEZWZhdWx0OiBldmVyeSBkaWFsIGF0XG4gICAqICAgaXRzIGRlZmF1bHQsIG5vIHJ1bGUsIG5vIG1pcnJvci5cbiAgICovXG4gIGNvbnN0cnVjdG9yKFxuICAgIHJvb3ROYW1lOiBzdHJpbmcsXG4gICAgcm9vdElkOiBzdHJpbmcsXG4gICAgZGVmYXVsdFZhbHVlcz86IHVua25vd24sXG4gICAgaW5pdGlhbFN0YXRlPzogdW5rbm93bixcbiAgICBwb2xpY3k6IFJ1blBvbGljeSA9IERFRkFVTFRfUlVOX1BPTElDWSxcbiAgKSB7XG4gICAgdGhpcy5faW5pdGlhbFN0YXRlID0gaW5pdGlhbFN0YXRlO1xuICAgIHRoaXMuX2RlZmF1bHRWYWx1ZXMgPSBkZWZhdWx0VmFsdWVzO1xuICAgIHRoaXMuZ2xvYmFsU3RvcmUgPSBuZXcgU2hhcmVkTWVtb3J5KGRlZmF1bHRWYWx1ZXMsIGluaXRpYWxTdGF0ZSk7XG4gICAgLy8gVGhlIGV2ZW50IGxvZydzIGZvbGQgYmFzZSBtdXN0IGJlIHRoZSBTQU1FIHN0YXRlIHRoZSBzdG9yZSBzdGFydHMgZnJvbVxuICAgIC8vIOKAlCBgaW5pdGlhbENvbnRleHRgIG1lcmdlZCB3aXRoIGBkZWZhdWx0VmFsdWVzRm9yQ29udGV4dGAsIHdoaWNoIGlzIHdoYXRcbiAgICAvLyBgU2hhcmVkTWVtb3J5YCBjb21wdXRlZCBhYm92ZS4gU2VlZGluZyB0aGUgbG9nIGZyb20gYGluaXRpYWxTdGF0ZWAgYWxvbmVcbiAgICAvLyBsZWZ0IGBkZWZhdWx0VmFsdWVzYCBvdXQgb2YgZXZlcnkgcmVwbGF5LCBzbyBhIGZvbGQgY291bGQgbm90IHJlcHJvZHVjZVxuICAgIC8vIHRoZSBzdGF0ZSBhIHN0YWdlIGFjdHVhbGx5IHNhdy4gYGdldFN0YXRlKClgIGlzIHRoZSBsaXZlIGNvbnRleHQ7IHRoZVxuICAgIC8vIEV2ZW50TG9nIGNvbnN0cnVjdG9yIGNsb25lcyBpdCwgc28gdGhlIGJhc2Ugc3RheXMgZGV0YWNoZWQuXG4gICAgdGhpcy5leGVjdXRpb25IaXN0b3J5ID0gbmV3IEV2ZW50TG9nKHRoaXMuZ2xvYmFsU3RvcmUuZ2V0U3RhdGUoKSk7XG4gICAgdGhpcy5wb2xpY3kgPSBwb2xpY3k7XG4gICAgdGhpcy5yb290U3RhZ2VDb250ZXh0ID0gdGhpcy5uZXdSb290KHJvb3ROYW1lLCByb290SWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEEgZnJlc2ggcm9vdCBmcmFtZSBmb3IgdGhpcyBydW50aW1lIOKAlCBgZ2xvYmFsU3RvcmVgLCBgZXhlY3V0aW9uSGlzdG9yeWAsXG4gICAqIHRoZSBydW4ncyBwb2xpY3kgYW5kICh3aGVuIGtlcHQpIHRoZSBtaXJyb3IuIEFsc28gaG93IGBTdWJmbG93RXhlY3V0b3JgXG4gICAqIHJlcGxhY2VzIGEgc3ViZmxvdydzIHNlZWQgZnJhbWUgd2l0aCB0aGUgZnJhbWUgaXRzIGZpcnN0IHN0YWdlIHJ1bnMgb24uXG4gICAqL1xuICBuZXdSb290KG5hbWU6IHN0cmluZywgaWQ6IHN0cmluZyk6IFN0YWdlQ29udGV4dCB7XG4gICAgY29uc3Qgcm9vdCA9IG5ldyBTdGFnZUNvbnRleHQoJycsIG5hbWUsIGlkLCB0aGlzLmdsb2JhbFN0b3JlLCAnJywgdGhpcy5leGVjdXRpb25IaXN0b3J5KTtcbiAgICB0aGlzLmluc3RhbGxQb2xpY3kocm9vdCk7XG4gICAgcmV0dXJuIHJvb3Q7XG4gIH1cblxuICAvKipcbiAgICogSW5zdGFsbCB0aGUgcnVuJ3MgcG9saWN5IG9uIHRoZSBDVVJSRU5UIHJvb3QgZnJhbWUg4oCUIGEgc2FtZS1leGVjdXRvclxuICAgKiByZXN1bWUsIHdob3NlIGNvbnRpbnVhdGlvbiByb290IChgbGVhZi5jcmVhdGVOZXh0YCkgaXMgYWR2YW5jZWQgYmVmb3JlXG4gICAqIHRoZSBleGVjdXRvciBidWlsZHMgdGhpcyBsZWcncyBwb2xpY3kgKGEgZnJlc2ggcnVsZSBwZXIgbGVnKS4gRXZlcnlcbiAgICogZGVzY2VuZGFudCB0YWtlcyB0aGUgcmVmZXJlbmNlIGZyb20gdGhlcmUuXG4gICAqL1xuICB1c2VQb2xpY3kocG9saWN5OiBSdW5Qb2xpY3kpOiB2b2lkIHtcbiAgICB0aGlzLnBvbGljeSA9IHBvbGljeTtcbiAgICB0aGlzLmluc3RhbGxQb2xpY3kodGhpcy5yb290U3RhZ2VDb250ZXh0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgcG9saWN5IG9uIGByb290YCwgYW5kIHRoZSBtaXJyb3Igc3RvcmUgd2hlbiB0aGUgcG9saWN5IGtlZXBzIG9uZS5cbiAgICogVGhlIG1pcnJvciBpcyBhIFNFUlZFRCBzdXJmYWNlLCBzbyBpdHMgc2VlZCBtdXN0IGFscmVhZHkgYmUgdGhlIHBvbGljeSdzXG4gICAqIHZpZXcgb2YgdGhlIHN0YXJ0aW5nIHN0YXRlOiBhIHBvbGljeSBrZXkgdGhhdCBhcnJpdmVzIGJ5IGBpbml0aWFsQ29udGV4dGBcbiAgICogLyBgZGVmYXVsdFZhbHVlc0ZvckNvbnRleHRgIChvciwgb24gYSBjcm9zcy1leGVjdXRvciByZXN1bWUsIGJ5IHRoZVxuICAgKiBjaGVja3BvaW50J3MgYHNoYXJlZFN0YXRlYCkgYW5kIGlzIG5ldmVyIHJlLXdyaXR0ZW4gd291bGQgb3RoZXJ3aXNlIHNpdFxuICAgKiBpbiBgZ2V0U25hcHNob3QoeyByZWRhY3Q6IHRydWUgfSlgIGluIHBsYWludGV4dCDigJQgc28gdGhlIHNlZWQgaXMgc2NydWJiZWRcbiAgICogd2l0aCB0aGUgTE9HJ3MgcGxhY2Vob2xkZXIsIHRoZSBzYW1lIHN0cmluZyB0aGUgcmVkYWN0ZWQgcGF0Y2hlcyBjYXJyeS5cbiAgICogQ3JlYXRlZCBvbmNlIHBlciBydW50aW1lIChhIHN1YmZsb3cncyBydW50aW1lIGtlZXBzIGl0cyBvd247IGl0cyBzZWVkIGlzXG4gICAqIGVtcHR5IOKAlCB0aGUgaW5wdXQgYXJyaXZlcyBhcyBhIGNvbW1pdCkuXG4gICAqL1xuICBwcml2YXRlIGluc3RhbGxQb2xpY3kocm9vdDogU3RhZ2VDb250ZXh0KTogdm9pZCB7XG4gICAgcm9vdC51c2VQb2xpY3kodGhpcy5wb2xpY3kpO1xuICAgIGlmICghdGhpcy5wb2xpY3kubWlycm9yKSByZXR1cm47XG4gICAgaWYgKCF0aGlzLnJlZGFjdGVkU3RvcmUpIHtcbiAgICAgIGNvbnN0IHJ1bGUgPSB0aGlzLnBvbGljeS5yZWRhY3Rpb247XG4gICAgICB0aGlzLnJlZGFjdGVkU3RvcmUgPSBuZXcgU2hhcmVkTWVtb3J5KFxuICAgICAgICBydWxlID8gcnVsZS5yZXRhaW5TdGF0ZSh0aGlzLl9kZWZhdWx0VmFsdWVzLCBMT0dfUExBQ0VIT0xERVIpIDogdGhpcy5fZGVmYXVsdFZhbHVlcyxcbiAgICAgICAgcnVsZSA/IHJ1bGUucmV0YWluU3RhdGUodGhpcy5faW5pdGlhbFN0YXRlLCBMT0dfUExBQ0VIT0xERVIpIDogdGhpcy5faW5pdGlhbFN0YXRlLFxuICAgICAgKTtcbiAgICB9XG4gICAgcm9vdC51c2VSZWRhY3RlZE1pcnJvcih0aGlzLnJlZGFjdGVkU3RvcmUpO1xuICB9XG5cbiAgLyoqIFByZXNlcnZlIHRoZSBjdXJyZW50IHJvb3RTdGFnZUNvbnRleHQgZm9yIHNuYXBzaG90cyBiZWZvcmUgY2hhbmdpbmcgaXQgZm9yIHJlc3VtZS4gKi9cbiAgcHJlc2VydmVTbmFwc2hvdFJvb3QoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLl9zbmFwc2hvdFJvb3QpIHtcbiAgICAgIHRoaXMuX3NuYXBzaG90Um9vdCA9IHRoaXMucm9vdFN0YWdlQ29udGV4dDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVGhlIGZyb3plbiwgZGV0YWNoZWQgZm9sZCBiYXNlIHNlcnZlZCBhcyB7QGxpbmsgUnVudGltZVNuYXBzaG90LmluaXRpYWxTdGF0ZX0uXG4gICAqIENvbXB1dGVkIG9uY2UgKHRoZSBiYXNlIG5ldmVyIGNoYW5nZXMgYWZ0ZXIgY29uc3RydWN0aW9uKSBhbmQgc2hhcmVkIOKAlFxuICAgKiBzYWZlIGJlY2F1c2UgaXQgaXMgZGVlcGx5IGZyb3plbiwgc28gbm8gaG9sZGVyIGNhbiBtdXRhdGUgaXQgb3IgcmVhY2ggdGhlXG4gICAqIGVuZ2luZSB0aHJvdWdoIGl0OyBhIGJhc2UgaG9sZGluZyBhIERhdGUsIE1hcCwgYnVmZmVyIOKApiAod2hhdCBmcmVlemluZ1xuICAgKiBjYW5ub3Qgc2VhbCkgaXMgc2VydmVkIGJ5IHRoZSBwdWJsaWMgc25hcHNob3QgYXMgYSBjb3B5IG9mIGl0cyBvcGVuIHBhdGhzXG4gICAqIChgcnVubmVyL3NuYXBzaG90LnRzIMK3IHNlcnZlZFNuYXBzaG90YCwgYGNhcHR1cmUvZnJlZXplLnRzIMK3IHNlcnZlUmVjb3JkYCxcbiAgICogOS40NC4yKS5cbiAgICovXG4gIHByaXZhdGUgZ2V0Rm9sZEJhc2UoKTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4ge1xuICAgIGlmICghdGhpcy5fZm9sZEJhc2UpIHtcbiAgICAgIGNvbnN0IGJhc2UgPSB0aGlzLmV4ZWN1dGlvbkhpc3RvcnkuZ2V0SW5pdGlhbFN0YXRlKCk7XG4gICAgICB0aGlzLl9mb2xkQmFzZSA9IGZyZWV6ZVJlY29yZChiYXNlICYmIHR5cGVvZiBiYXNlID09PSAnb2JqZWN0JyA/IGJhc2UgOiB7fSkgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9mb2xkQmFzZTtcbiAgfVxuXG4gIGdldFBpcGVsaW5lcygpOiBzdHJpbmdbXSB7XG4gICAgY29uc3Qgc3RhdGUgPSB0aGlzLmdsb2JhbFN0b3JlLmdldFN0YXRlKCk7XG4gICAgcmV0dXJuIHN0YXRlLnBpcGVsaW5lcyA/IE9iamVjdC5rZXlzKHN0YXRlLnBpcGVsaW5lcyBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikgOiBbXTtcbiAgfVxuXG4gIHNldFJvb3RPYmplY3QocGF0aDogc3RyaW5nW10sIGtleTogc3RyaW5nLCB2YWx1ZTogdW5rbm93bikge1xuICAgIHRoaXMucm9vdFN0YWdlQ29udGV4dC5zZXRPYmplY3QocGF0aCwga2V5LCB2YWx1ZSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIHRoZSBydW50aW1lIHNuYXBzaG90LlxuICAgKlxuICAgKiBAcGFyYW0gb3B0aW9ucy5yZWRhY3QgIFdoZW4gYHRydWVgLCByZXR1cm5zIGBzaGFyZWRTdGF0ZWAgZnJvbSB0aGVcbiAgICogICBwYXJhbGxlbCByZWRhY3RlZCBtaXJyb3IgKGlmIG9uZSB3YXMgZW5hYmxlZCkuIFRoaXMgaXMgdGhlIHNhZmUgdmlld1xuICAgKiAgIGZvciBzaGFyaW5nIHRyYWNlcyBleHRlcm5hbGx5IOKAlCBwYXN0ZSBpbnRvIGEgdmlld2VyLCBzaGlwIHRvIHN1cHBvcnQsXG4gICAqICAgZXRjLiBXaGVuIHRoZSBtaXJyb3Igd2FzIG5ldmVyIGVuYWJsZWQsIGZhbGxzIGJhY2sgdG8gcmF3IGBnbG9iYWxTdG9yZWBcbiAgICogICBhbmQgYSBkZXYtbW9kZSB3YXJuaW5nIGlzIGVtaXR0ZWQgKHNpbGVudCBpbiBwcm9kdWN0aW9uKS5cbiAgICpcbiAgICogICBEZWZhdWx0IGBmYWxzZWAgcHJlc2VydmVzIHRoZSBydW50aW1lIHZpZXcg4oCUIG5lY2Vzc2FyeSBmb3IgcGF1c2UgL1xuICAgKiAgIHJlc3VtZSAocmVzdW1wdGlvbiBtdXN0IHJlcGxheSBhZ2FpbnN0IHRoZSByZWFsIHZhbHVlcywgbm90XG4gICAqICAgJ1tSRURBQ1RFRF0nKS5cbiAgICpcbiAgICogT3RoZXIgZmllbGRzIChgZXhlY3V0aW9uVHJlZWAsIGBjb21taXRMb2dgKSBhcmUgdGhlIHNhbWUgZWl0aGVyIHdheSDigJRcbiAgICogdGhlIGNvbW1pdCBsb2cgaXMgYWxyZWFkeSByZWRhY3RlZCBhdCB3cml0ZS10aW1lLCBhbmQgdGhlIGV4ZWN1dGlvblxuICAgKiB0cmVlIG9ubHkgY2FycmllcyBzdHJ1Y3R1cmFsIG1ldGFkYXRhLlxuICAgKlxuICAgKiBgaW5pdGlhbFN0YXRlYCAodGhlIGZvbGQgYmFzZSkgaXMgT01JVFRFRCB1bmRlciBgcmVkYWN0OiB0cnVlYC4gSXQgaXMgdGhlXG4gICAqIHJ1bidzIHJhdyBwcmUtcnVuIHNlZWQg4oCUIGBpbml0aWFsQ29udGV4dGAgbWVyZ2VkIHdpdGhcbiAgICogYGRlZmF1bHRWYWx1ZXNGb3JDb250ZXh0YCDigJQgYW5kIGl0IG5ldmVyIHBhc3NlZCB0aHJvdWdoIGEgcmVkYWN0aW9uXG4gICAqIHBvbGljeTogdGhlIHBvbGljeSBzY3J1YnMgV1JJVEVTIGF0IHRoZSBzY29wZSBmYWNhZGUsIGFuZCB0aGUgYmFzZSB3YXNcbiAgICogbmV2ZXIgd3JpdHRlbiBieSBhIHN0YWdlLiBTZXJ2aW5nIGl0IG9uIHRoZSByZWRhY3RlZCBzdXJmYWNlIHdvdWxkIGhhbmRcbiAgICogYmFjayB0aGUgb3JpZ2luYWwgdmFsdWUgb2YgYSBzZWVkZWQgc2VjcmV0IHRoYXQgYSBsYXRlciBjb21taXQgaGFkXG4gICAqIHNjcnViYmVkLiBBIGNvbnN1bWVyIGZvbGRpbmcgd2l0aG91dCBpdCBnZXRzIGBiYXNpczogJ2xvZy1vbmx5J2AgZnJvbVxuICAgKiBgc3RhdGVBdGAsIHdoaWNoIGlzIHRoZSBob25lc3Qgc2lnbmFsIHRoYXQgdGhlIGJhc2UgZGlkIG5vdCB0cmF2ZWwgd2l0aFxuICAgKiB0aGlzIGxvZyDigJQgYSBwYXJ0aWFsIGFuc3dlciB0aGF0IHNheXMgaXQgaXMgcGFydGlhbCwgbmV2ZXIgYSBzaWxlbnQgb25lLlxuICAgKlxuICAgKiBSZXR1cm5zIGBPbWl0PFJ1bnRpbWVTbmFwc2hvdCwgJ3J1bklkJz5gOiB0aGUgcnVudGltZSBpcyB0aGUgbWVtb3J5XG4gICAqIGNvbnRhaW5lciBhbmQgZG9lc24ndCBrbm93IHdoaWNoIHJ1biBpdCBzZXJ2ZXMg4oCUIGBydW5JZGAgaXMgcGVyLXJ1blxuICAgKiBleGVjdXRvciBzdGF0ZSwgc3RhbXBlZCBieSBgRmxvd2NoYXJ0VHJhdmVyc2VyLmdldFNuYXBzaG90KClgICh3aGljaFxuICAgKiBvd25zIHRoZSBydW4ncyBpZCBhbmQgYWxyZWFkeSBzdGFtcHMgaXQgb24gZXZlcnkgZXZlbnQpLiBTdWJmbG93cydcbiAgICogbmVzdGVkIHJ1bnRpbWVzIGRlbGliZXJhdGVseSBoYXZlIE5PIHJ1bklkIG9mIHRoZWlyIG93biAoYSBzdWJmbG93IGlzXG4gICAqIHBhcnQgb2YgdGhlIHBhcmVudCdzIGxvZ2ljYWwgcnVuKS5cbiAgICovXG4gIGdldFNuYXBzaG90KG9wdGlvbnM/OiB7IHJlZGFjdD86IGJvb2xlYW4gfSk6IE9taXQ8UnVudGltZVNuYXBzaG90LCAncnVuSWQnPiB7XG4gICAgY29uc3Qgc25hcHNob3RSb290ID0gdGhpcy5fc25hcHNob3RSb290ID8/IHRoaXMucm9vdFN0YWdlQ29udGV4dDtcbiAgICBjb25zdCB1c2VSZWRhY3RlZCA9IG9wdGlvbnM/LnJlZGFjdCA9PT0gdHJ1ZSAmJiB0aGlzLnJlZGFjdGVkU3RvcmUgIT09IHVuZGVmaW5lZDtcbiAgICByZXR1cm4ge1xuICAgICAgc2hhcmVkU3RhdGU6IHVzZVJlZGFjdGVkID8gdGhpcy5yZWRhY3RlZFN0b3JlIS5nZXRTdGF0ZSgpIDogdGhpcy5nbG9iYWxTdG9yZS5nZXRTdGF0ZSgpLFxuICAgICAgZXhlY3V0aW9uVHJlZTogc25hcHNob3RSb290LmdldFNuYXBzaG90KCksXG4gICAgICAvLyBSRURBQ1RJT046IHRoZSBmb2xkIGJhc2UgaXMgdGhlIHJhdyBwcmUtcnVuIHNlZWQgYW5kIG5vIHBvbGljeSBldmVyXG4gICAgICAvLyB0b3VjaGVkIGl0IChwb2xpY2llcyBzY3J1YiB3cml0ZXM7IG5vdGhpbmcgd3JvdGUgdGhlIGJhc2UpLiBPbWl0IGl0XG4gICAgICAvLyByYXRoZXIgdGhhbiBsZWFrIGl0IOKAlCBgc3RhdGVBdGAgZGVncmFkZXMgdG8gYGJhc2lzOiAnbG9nLW9ubHknYC5cbiAgICAgIC4uLih1c2VSZWRhY3RlZCA/IHt9IDogeyBpbml0aWFsU3RhdGU6IHRoaXMuZ2V0Rm9sZEJhc2UoKSB9KSxcbiAgICAgIC8vIERFVEFDSEVEOiB0aGUgZW5naW5lIGtlZXBzIGl0cyBsaXZlIEV2ZW50TG9nOyB0aGUgc25hcHNob3QgZ2V0cyBhXG4gICAgICAvLyBmcm96ZW4gYXJyYXkgb2YgaXRzIG93biAoYHJlY29yZGVkKClgIGJ1aWxkcyBhIG5ldyBvbmUpLiBTZXJ2aW5nIHRoZVxuICAgICAgLy8gaW50ZXJuYWwgYXJyYXkgYWxpYXNlZCBpdCwgc28gYSBzbmFwc2hvdCB0YWtlbiBtaWQtcnVuIGtlcHQgZ3Jvd2luZ1xuICAgICAgLy8gdW5kZXIgaXRzIGhvbGRlciBhbmQgYSBjb25zdW1lciBjb3VsZCBzcGxpY2UgdGhlIGVuZ2luZSdzIG93biBoaXN0b3J5LlxuICAgICAgLy8gVGhlIGJ1bmRsZXMgaW4gaXQgYXJlIHRoZSBsb2cncyBvd24sIGZyb3plbiBhdCBgRXZlbnRMb2cgwrcgcmVjb3JkYFxuICAgICAgLy8gKEYzKS4gVGhlIHB1YmxpYyBzbmFwc2hvdCBzZXJ2ZXMgdGhlbSAoYHJ1bm5lci9zbmFwc2hvdC50cyDCt1xuICAgICAgLy8gc2VydmVkU25hcHNob3RgLCA5LjQ0LjIpOyB0aGlzIG9uZSBpcyBhbHNvIHRoZSBlbmdpbmUncyBvd24g4oCUIGFcbiAgICAgIC8vIHN1YmZsb3cgbW91bnQgdGFrZXMgaXQgb25jZSBwZXIgbW91bnQg4oCUIHNvIHRoZSBydW4gcGF0aCBzZXJ2ZXMgbm90aGluZy5cbiAgICAgIGNvbW1pdExvZzogT2JqZWN0LmZyZWV6ZSh0aGlzLmV4ZWN1dGlvbkhpc3RvcnkucmVjb3JkZWQoKSkgYXMgQ29tbWl0QnVuZGxlW10sXG4gICAgICAuLi4odGhpcy5leGVjdXRpb25IaXN0b3J5LmFkZHJlc3MgPT09IHVuZGVmaW5lZCA/IHt9IDogeyBsb2dBZGRyZXNzOiB0aGlzLmV4ZWN1dGlvbkhpc3RvcnkuYWRkcmVzcyB9KSxcbiAgICAgIGNvbW1pdFZhbHVlczogdGhpcy5wb2xpY3kuY29tbWl0VmFsdWVzLFxuICAgICAgd3JpdGVQcm92ZW5hbmNlOiB0aGlzLnBvbGljeS53cml0ZVByb3ZlbmFuY2UsXG4gICAgfTtcbiAgfVxufVxuIl19