@workflow/web-shared 5.0.0-beta.1 → 5.0.0-beta.10

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 (274) hide show
  1. package/README.md +1 -1
  2. package/dist/components/error-boundary.js +1 -1
  3. package/dist/components/event-list-view.d.ts +18 -1
  4. package/dist/components/event-list-view.d.ts.map +1 -1
  5. package/dist/components/event-list-view.js +219 -125
  6. package/dist/components/hook-actions.js +1 -1
  7. package/dist/components/index.d.ts +4 -1
  8. package/dist/components/index.d.ts.map +1 -1
  9. package/dist/components/index.js +5 -2
  10. package/dist/components/new-trace-viewer/components/copy-button.d.ts +9 -0
  11. package/dist/components/new-trace-viewer/components/copy-button.d.ts.map +1 -0
  12. package/dist/components/new-trace-viewer/components/copy-button.js +27 -0
  13. package/dist/components/new-trace-viewer/components/event-list.d.ts +10 -0
  14. package/dist/components/new-trace-viewer/components/event-list.d.ts.map +1 -0
  15. package/dist/components/new-trace-viewer/components/event-list.js +39 -0
  16. package/dist/components/new-trace-viewer/components/middle-truncate/copy-selection.d.ts +18 -0
  17. package/dist/components/new-trace-viewer/components/middle-truncate/copy-selection.d.ts.map +1 -0
  18. package/dist/components/new-trace-viewer/components/middle-truncate/copy-selection.js +54 -0
  19. package/dist/components/new-trace-viewer/components/middle-truncate/middle-truncate.d.ts +20 -0
  20. package/dist/components/new-trace-viewer/components/middle-truncate/middle-truncate.d.ts.map +1 -0
  21. package/dist/components/new-trace-viewer/components/middle-truncate/middle-truncate.js +81 -0
  22. package/dist/components/new-trace-viewer/components/middle-truncate/truncate.d.ts +25 -0
  23. package/dist/components/new-trace-viewer/components/middle-truncate/truncate.d.ts.map +1 -0
  24. package/dist/components/new-trace-viewer/components/middle-truncate/truncate.js +101 -0
  25. package/dist/components/new-trace-viewer/components/middle-truncate/use-middle-truncate.d.ts +20 -0
  26. package/dist/components/new-trace-viewer/components/middle-truncate/use-middle-truncate.d.ts.map +1 -0
  27. package/dist/components/new-trace-viewer/components/middle-truncate/use-middle-truncate.js +114 -0
  28. package/dist/components/new-trace-viewer/components/split-pane.d.ts +14 -0
  29. package/dist/components/new-trace-viewer/components/split-pane.d.ts.map +1 -0
  30. package/dist/components/new-trace-viewer/components/split-pane.js +99 -0
  31. package/dist/components/new-trace-viewer/components/timeline.d.ts +34 -0
  32. package/dist/components/new-trace-viewer/components/timeline.d.ts.map +1 -0
  33. package/dist/components/new-trace-viewer/components/timeline.js +223 -0
  34. package/dist/components/new-trace-viewer/context.d.ts +15 -0
  35. package/dist/components/new-trace-viewer/context.d.ts.map +1 -0
  36. package/dist/components/new-trace-viewer/context.js +47 -0
  37. package/dist/components/new-trace-viewer/detail-panel.d.ts +10 -0
  38. package/dist/components/new-trace-viewer/detail-panel.d.ts.map +1 -0
  39. package/dist/components/new-trace-viewer/detail-panel.js +13 -0
  40. package/dist/components/new-trace-viewer/icons.d.ts +6 -0
  41. package/dist/components/new-trace-viewer/icons.d.ts.map +1 -0
  42. package/dist/components/new-trace-viewer/icons.js +15 -0
  43. package/dist/components/new-trace-viewer/search.d.ts +19 -0
  44. package/dist/components/new-trace-viewer/search.d.ts.map +1 -0
  45. package/dist/components/new-trace-viewer/search.js +134 -0
  46. package/dist/components/new-trace-viewer/trace-viewer.d.ts +8 -0
  47. package/dist/components/new-trace-viewer/trace-viewer.d.ts.map +1 -0
  48. package/dist/components/new-trace-viewer/trace-viewer.js +387 -0
  49. package/dist/components/new-trace-viewer/types.d.ts +1 -0
  50. package/dist/components/new-trace-viewer/types.d.ts.map +1 -0
  51. package/dist/components/new-trace-viewer/types.js +2 -0
  52. package/dist/components/new-trace-viewer/util/constants.d.ts +1 -0
  53. package/dist/components/new-trace-viewer/util/constants.d.ts.map +1 -0
  54. package/dist/components/new-trace-viewer/util/constants.js +2 -0
  55. package/dist/components/new-trace-viewer/utils.d.ts +46 -0
  56. package/dist/components/new-trace-viewer/utils.d.ts.map +1 -0
  57. package/dist/components/new-trace-viewer/utils.js +330 -0
  58. package/dist/components/run-trace-view.d.ts +2 -1
  59. package/dist/components/run-trace-view.d.ts.map +1 -1
  60. package/dist/components/run-trace-view.js +3 -3
  61. package/dist/components/sidebar/attribute-panel.d.ts +7 -1
  62. package/dist/components/sidebar/attribute-panel.d.ts.map +1 -1
  63. package/dist/components/sidebar/attribute-panel.js +131 -70
  64. package/dist/components/sidebar/conversation-view.js +1 -1
  65. package/dist/components/sidebar/copyable-data-block.d.ts +1 -0
  66. package/dist/components/sidebar/copyable-data-block.d.ts.map +1 -1
  67. package/dist/components/sidebar/copyable-data-block.js +16 -15
  68. package/dist/components/sidebar/detail-card.d.ts +5 -6
  69. package/dist/components/sidebar/detail-card.d.ts.map +1 -1
  70. package/dist/components/sidebar/detail-card.js +32 -16
  71. package/dist/components/sidebar/entity-detail-panel.d.ts +3 -1
  72. package/dist/components/sidebar/entity-detail-panel.d.ts.map +1 -1
  73. package/dist/components/sidebar/entity-detail-panel.js +20 -37
  74. package/dist/components/sidebar/events-list.d.ts.map +1 -1
  75. package/dist/components/sidebar/events-list.js +21 -15
  76. package/dist/components/sidebar/resolve-hook-modal.js +1 -1
  77. package/dist/components/sidebar/sidebar-data-context.d.ts +29 -0
  78. package/dist/components/sidebar/sidebar-data-context.d.ts.map +1 -0
  79. package/dist/components/sidebar/sidebar-data-context.js +19 -0
  80. package/dist/components/stream-viewer.d.ts +1 -1
  81. package/dist/components/stream-viewer.d.ts.map +1 -1
  82. package/dist/components/stream-viewer.js +3 -27
  83. package/dist/components/trace-viewer/components/map.js +1 -1
  84. package/dist/components/trace-viewer/components/markers.js +1 -1
  85. package/dist/components/trace-viewer/components/node.js +1 -1
  86. package/dist/components/trace-viewer/components/search-input.js +1 -1
  87. package/dist/components/trace-viewer/components/search.js +1 -1
  88. package/dist/components/trace-viewer/components/span-content.js +1 -1
  89. package/dist/components/trace-viewer/components/span-detail-panel.js +1 -1
  90. package/dist/components/trace-viewer/components/span-segments.js +1 -1
  91. package/dist/components/trace-viewer/components/span-strategies.js +1 -1
  92. package/dist/components/trace-viewer/components/ui.js +1 -1
  93. package/dist/components/trace-viewer/components/zoom-button.js +1 -1
  94. package/dist/components/trace-viewer/components/zoom-icons.js +1 -1
  95. package/dist/components/trace-viewer/context.js +1 -1
  96. package/dist/components/trace-viewer/index.js +1 -1
  97. package/dist/components/trace-viewer/trace-viewer.js +1 -1
  98. package/dist/components/trace-viewer/types.js +1 -1
  99. package/dist/components/trace-viewer/util/constants.js +1 -1
  100. package/dist/components/trace-viewer/util/scrollbar-width.js +1 -1
  101. package/dist/components/trace-viewer/util/timing.d.ts +1 -1
  102. package/dist/components/trace-viewer/util/timing.d.ts.map +1 -1
  103. package/dist/components/trace-viewer/util/timing.js +6 -9
  104. package/dist/components/trace-viewer/util/tree.js +1 -1
  105. package/dist/components/trace-viewer/util/use-immediate-style.js +1 -1
  106. package/dist/components/trace-viewer/util/use-streaming-spans.js +1 -1
  107. package/dist/components/trace-viewer/util/use-trackpad-zoom.js +1 -1
  108. package/dist/components/trace-viewer/worker.js +1 -1
  109. package/dist/components/trace-viewer-new.d.ts +10 -0
  110. package/dist/components/trace-viewer-new.d.ts.map +1 -0
  111. package/dist/components/trace-viewer-new.js +23 -0
  112. package/dist/components/ui/alert.js +1 -1
  113. package/dist/components/ui/button.d.ts +10 -0
  114. package/dist/components/ui/button.d.ts.map +1 -0
  115. package/dist/components/ui/button.js +46 -0
  116. package/dist/components/ui/card.js +1 -1
  117. package/dist/components/ui/data-inspector.d.ts +39 -1
  118. package/dist/components/ui/data-inspector.d.ts.map +1 -1
  119. package/dist/components/ui/data-inspector.js +207 -22
  120. package/dist/components/ui/decrypt-button.js +1 -1
  121. package/dist/components/ui/error-card.js +1 -1
  122. package/dist/components/ui/error-stack-block.d.ts.map +1 -1
  123. package/dist/components/ui/error-stack-block.js +27 -19
  124. package/dist/components/ui/icon-button.d.ts +13 -0
  125. package/dist/components/ui/icon-button.d.ts.map +1 -0
  126. package/dist/components/ui/icon-button.js +29 -0
  127. package/dist/components/ui/inspector-theme.d.ts +9 -10
  128. package/dist/components/ui/inspector-theme.d.ts.map +1 -1
  129. package/dist/components/ui/inspector-theme.js +39 -72
  130. package/dist/components/ui/load-more-button.js +1 -1
  131. package/dist/components/ui/menu-dropdown.js +1 -1
  132. package/dist/components/ui/skeleton.js +1 -1
  133. package/dist/components/ui/spinner.js +1 -1
  134. package/dist/components/ui/timestamp-tooltip.js +1 -1
  135. package/dist/components/workflow-trace-view.d.ts +3 -1
  136. package/dist/components/workflow-trace-view.d.ts.map +1 -1
  137. package/dist/components/workflow-trace-view.js +10 -5
  138. package/dist/components/workflow-traces/event-colors.js +1 -1
  139. package/dist/components/workflow-traces/trace-colors.js +1 -1
  140. package/dist/components/workflow-traces/trace-span-construction.d.ts +2 -2
  141. package/dist/components/workflow-traces/trace-span-construction.d.ts.map +1 -1
  142. package/dist/components/workflow-traces/trace-span-construction.js +19 -6
  143. package/dist/components/workflow-traces/trace-time-utils.js +1 -1
  144. package/dist/hooks/use-dark-mode.js +1 -1
  145. package/dist/hooks/use-reduced-motion.d.ts +10 -0
  146. package/dist/hooks/use-reduced-motion.d.ts.map +1 -0
  147. package/dist/hooks/use-reduced-motion.js +29 -0
  148. package/dist/index.d.ts +3 -1
  149. package/dist/index.d.ts.map +1 -1
  150. package/dist/index.js +3 -2
  151. package/dist/lib/event-analysis.js +1 -1
  152. package/dist/lib/event-materialization.js +1 -1
  153. package/dist/lib/exact-event-search-id.d.ts +25 -0
  154. package/dist/lib/exact-event-search-id.d.ts.map +1 -0
  155. package/dist/lib/exact-event-search-id.js +39 -0
  156. package/dist/lib/hydration.d.ts +14 -1
  157. package/dist/lib/hydration.d.ts.map +1 -1
  158. package/dist/lib/hydration.js +157 -4
  159. package/dist/lib/stream-display.d.ts +18 -0
  160. package/dist/lib/stream-display.d.ts.map +1 -0
  161. package/dist/lib/stream-display.js +30 -0
  162. package/dist/lib/toast.js +1 -1
  163. package/dist/lib/trace-builder.d.ts.map +1 -1
  164. package/dist/lib/trace-builder.js +3 -2
  165. package/dist/lib/utils.d.ts +9 -9
  166. package/dist/lib/utils.d.ts.map +1 -1
  167. package/dist/lib/utils.js +27 -32
  168. package/dist/styles.css +475 -1
  169. package/package.json +6 -4
  170. package/src/components/event-list-view.tsx +421 -262
  171. package/src/components/index.ts +12 -1
  172. package/src/components/new-trace-viewer/components/copy-button.tsx +68 -0
  173. package/src/components/new-trace-viewer/components/event-list.tsx +127 -0
  174. package/src/components/new-trace-viewer/components/middle-truncate/copy-selection.ts +114 -0
  175. package/src/components/new-trace-viewer/components/middle-truncate/middle-truncate.tsx +157 -0
  176. package/src/components/new-trace-viewer/components/middle-truncate/truncate.ts +132 -0
  177. package/src/components/new-trace-viewer/components/middle-truncate/use-middle-truncate.ts +167 -0
  178. package/src/components/new-trace-viewer/components/split-pane.tsx +185 -0
  179. package/src/components/new-trace-viewer/components/timeline.tsx +552 -0
  180. package/src/components/new-trace-viewer/context.tsx +92 -0
  181. package/src/components/new-trace-viewer/detail-panel.tsx +55 -0
  182. package/src/components/new-trace-viewer/icons.tsx +79 -0
  183. package/src/components/new-trace-viewer/search.ts +178 -0
  184. package/src/components/new-trace-viewer/trace-viewer.tsx +694 -0
  185. package/src/components/new-trace-viewer/types.ts +0 -0
  186. package/src/components/new-trace-viewer/util/constants.ts +0 -0
  187. package/src/components/new-trace-viewer/utils.ts +482 -0
  188. package/src/components/run-trace-view.tsx +3 -0
  189. package/src/components/sidebar/attribute-panel.tsx +240 -196
  190. package/src/components/sidebar/copyable-data-block.tsx +49 -27
  191. package/src/components/sidebar/detail-card.tsx +119 -59
  192. package/src/components/sidebar/entity-detail-panel.tsx +92 -148
  193. package/src/components/sidebar/events-list.tsx +51 -76
  194. package/src/components/sidebar/sidebar-data-context.tsx +62 -0
  195. package/src/components/stream-viewer.tsx +18 -40
  196. package/src/components/trace-viewer/util/timing.ts +5 -9
  197. package/src/components/trace-viewer-new.tsx +49 -0
  198. package/src/components/ui/button.tsx +68 -0
  199. package/src/components/ui/data-inspector.tsx +427 -31
  200. package/src/components/ui/error-stack-block.tsx +39 -30
  201. package/src/components/ui/icon-button.tsx +57 -0
  202. package/src/components/ui/inspector-theme.ts +39 -81
  203. package/src/components/workflow-trace-view.tsx +12 -2
  204. package/src/components/workflow-traces/trace-span-construction.ts +24 -6
  205. package/src/hooks/use-reduced-motion.ts +34 -0
  206. package/src/index.ts +9 -0
  207. package/src/lib/exact-event-search-id.ts +67 -0
  208. package/src/lib/hydration.ts +169 -1
  209. package/src/lib/stream-display.ts +48 -0
  210. package/src/lib/trace-builder.ts +2 -1
  211. package/src/lib/utils.ts +27 -32
  212. package/src/styles.css +475 -1
  213. package/dist/components/error-boundary.js.map +0 -1
  214. package/dist/components/event-list-view.js.map +0 -1
  215. package/dist/components/hook-actions.js.map +0 -1
  216. package/dist/components/index.js.map +0 -1
  217. package/dist/components/run-trace-view.js.map +0 -1
  218. package/dist/components/sidebar/attribute-panel.js.map +0 -1
  219. package/dist/components/sidebar/conversation-view.js.map +0 -1
  220. package/dist/components/sidebar/copyable-data-block.js.map +0 -1
  221. package/dist/components/sidebar/detail-card.js.map +0 -1
  222. package/dist/components/sidebar/entity-detail-panel.js.map +0 -1
  223. package/dist/components/sidebar/events-list.js.map +0 -1
  224. package/dist/components/sidebar/resolve-hook-modal.js.map +0 -1
  225. package/dist/components/stream-viewer.js.map +0 -1
  226. package/dist/components/trace-viewer/components/map.js.map +0 -1
  227. package/dist/components/trace-viewer/components/markers.js.map +0 -1
  228. package/dist/components/trace-viewer/components/node.js.map +0 -1
  229. package/dist/components/trace-viewer/components/search-input.js.map +0 -1
  230. package/dist/components/trace-viewer/components/search.js.map +0 -1
  231. package/dist/components/trace-viewer/components/span-content.js.map +0 -1
  232. package/dist/components/trace-viewer/components/span-detail-panel.js.map +0 -1
  233. package/dist/components/trace-viewer/components/span-segments.js.map +0 -1
  234. package/dist/components/trace-viewer/components/span-strategies.js.map +0 -1
  235. package/dist/components/trace-viewer/components/ui.js.map +0 -1
  236. package/dist/components/trace-viewer/components/zoom-button.js.map +0 -1
  237. package/dist/components/trace-viewer/components/zoom-icons.js.map +0 -1
  238. package/dist/components/trace-viewer/context.js.map +0 -1
  239. package/dist/components/trace-viewer/index.js.map +0 -1
  240. package/dist/components/trace-viewer/trace-viewer.js.map +0 -1
  241. package/dist/components/trace-viewer/types.js.map +0 -1
  242. package/dist/components/trace-viewer/util/constants.js.map +0 -1
  243. package/dist/components/trace-viewer/util/scrollbar-width.js.map +0 -1
  244. package/dist/components/trace-viewer/util/timing.js.map +0 -1
  245. package/dist/components/trace-viewer/util/tree.js.map +0 -1
  246. package/dist/components/trace-viewer/util/use-immediate-style.js.map +0 -1
  247. package/dist/components/trace-viewer/util/use-streaming-spans.js.map +0 -1
  248. package/dist/components/trace-viewer/util/use-trackpad-zoom.js.map +0 -1
  249. package/dist/components/trace-viewer/worker.js.map +0 -1
  250. package/dist/components/ui/alert.js.map +0 -1
  251. package/dist/components/ui/card.js.map +0 -1
  252. package/dist/components/ui/data-inspector.js.map +0 -1
  253. package/dist/components/ui/decrypt-button.js.map +0 -1
  254. package/dist/components/ui/error-card.js.map +0 -1
  255. package/dist/components/ui/error-stack-block.js.map +0 -1
  256. package/dist/components/ui/inspector-theme.js.map +0 -1
  257. package/dist/components/ui/load-more-button.js.map +0 -1
  258. package/dist/components/ui/menu-dropdown.js.map +0 -1
  259. package/dist/components/ui/skeleton.js.map +0 -1
  260. package/dist/components/ui/spinner.js.map +0 -1
  261. package/dist/components/ui/timestamp-tooltip.js.map +0 -1
  262. package/dist/components/workflow-trace-view.js.map +0 -1
  263. package/dist/components/workflow-traces/event-colors.js.map +0 -1
  264. package/dist/components/workflow-traces/trace-colors.js.map +0 -1
  265. package/dist/components/workflow-traces/trace-span-construction.js.map +0 -1
  266. package/dist/components/workflow-traces/trace-time-utils.js.map +0 -1
  267. package/dist/hooks/use-dark-mode.js.map +0 -1
  268. package/dist/index.js.map +0 -1
  269. package/dist/lib/event-analysis.js.map +0 -1
  270. package/dist/lib/event-materialization.js.map +0 -1
  271. package/dist/lib/hydration.js.map +0 -1
  272. package/dist/lib/toast.js.map +0 -1
  273. package/dist/lib/trace-builder.js.map +0 -1
  274. package/dist/lib/utils.js.map +0 -1
@@ -1,17 +1,16 @@
1
1
  /**
2
2
  * Shared theme configuration for react-inspector's ObjectInspector.
3
3
  *
4
- * Color choices are inspired by Node.js `util.inspect()` ANSI stylizing:
5
- * - property names: unstyled (default foreground dark text on light, light text on dark)
6
- * - strings / symbols: green
7
- * - numbers / booleans / bigint: yellow
8
- * - null: bold (foreground)
9
- * - undefined: grey
10
- * - regexp: red
11
- * - functions (special): cyan
12
- * - date: magenta
4
+ * Colors follow Geist's Shiki JSON palette so the inspector reads the same
5
+ * as highlighted code blocks across the product:
6
+ * - property names / punctuation: --ds-gray-1000 (default foreground)
7
+ * - strings / numbers / booleans: --ds-green-900
8
+ * - null / undefined: --ds-gray-900 (muted)
9
+ * - regexp / function: --ds-purple-900
10
+ * - date: --ds-pink-900
13
11
  *
14
- * See: https://github.com/nodejs/node/blob/main/lib/internal/util/inspect.js
12
+ * Because the `--ds-*` tokens adapt to theme automatically, the light and
13
+ * dark objects are intentionally identical.
15
14
  */
16
15
  export interface InspectorThemeExtended {
17
16
  /** Color for Date values (Node: 'magenta') */
@@ -1 +1 @@
1
- {"version":3,"file":"inspector-theme.d.ts","sourceRoot":"","sources":["../../../src/components/ui/inspector-theme.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAOH,MAAM,WAAW,sBAAsB;IACrC,8CAA8C;IAC9C,uBAAuB,EAAE,MAAM,CAAC;CACjC;AAED,eAAO,MAAM,2BAA2B,EAAE,sBAEzC,CAAC;AAEF,eAAO,MAAM,0BAA0B,EAAE,sBAExC,CAAC;AA2BF,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2C/B,CAAC;AAMF,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2C9B,CAAC"}
1
+ {"version":3,"file":"inspector-theme.d.ts","sourceRoot":"","sources":["../../../src/components/ui/inspector-theme.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAOH,MAAM,WAAW,sBAAsB;IACrC,8CAA8C;IAC9C,uBAAuB,EAAE,MAAM,CAAC;CACjC;AAED,eAAO,MAAM,2BAA2B,EAAE,sBAEzC,CAAC;AAEF,eAAO,MAAM,0BAA0B,EAAE,sBAExC,CAAC;AAwEF,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAAa,CAAC;AAM9C,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAAa,CAAC"}
@@ -1,23 +1,22 @@
1
1
  /**
2
2
  * Shared theme configuration for react-inspector's ObjectInspector.
3
3
  *
4
- * Color choices are inspired by Node.js `util.inspect()` ANSI stylizing:
5
- * - property names: unstyled (default foreground dark text on light, light text on dark)
6
- * - strings / symbols: green
7
- * - numbers / booleans / bigint: yellow
8
- * - null: bold (foreground)
9
- * - undefined: grey
10
- * - regexp: red
11
- * - functions (special): cyan
12
- * - date: magenta
4
+ * Colors follow Geist's Shiki JSON palette so the inspector reads the same
5
+ * as highlighted code blocks across the product:
6
+ * - property names / punctuation: --ds-gray-1000 (default foreground)
7
+ * - strings / numbers / booleans: --ds-green-900
8
+ * - null / undefined: --ds-gray-900 (muted)
9
+ * - regexp / function: --ds-purple-900
10
+ * - date: --ds-pink-900
13
11
  *
14
- * See: https://github.com/nodejs/node/blob/main/lib/internal/util/inspect.js
12
+ * Because the `--ds-*` tokens adapt to theme automatically, the light and
13
+ * dark objects are intentionally identical.
15
14
  */
16
15
  export const inspectorThemeExtendedLight = {
17
- OBJECT_VALUE_DATE_COLOR: '#a21caf', // fuchsia-700
16
+ OBJECT_VALUE_DATE_COLOR: 'var(--ds-pink-900)',
18
17
  };
19
18
  export const inspectorThemeExtendedDark = {
20
- OBJECT_VALUE_DATE_COLOR: '#e879f9', // fuchsia-400
19
+ OBJECT_VALUE_DATE_COLOR: 'var(--ds-pink-900)',
21
20
  };
22
21
  // ---------------------------------------------------------------------------
23
22
  // Shared structural values (same in both themes)
@@ -41,75 +40,43 @@ const shared = {
41
40
  // ---------------------------------------------------------------------------
42
41
  // Light theme
43
42
  // ---------------------------------------------------------------------------
44
- export const inspectorThemeLight = {
43
+ const geistTheme = {
45
44
  ...shared,
46
45
  // Base text
47
46
  BASE_COLOR: 'var(--ds-gray-1000)',
48
- // Property names — unstyled, same as base foreground (Node: no style)
49
- OBJECT_NAME_COLOR: 'var(--ds-gray-900)',
50
- // Strings & symbols — green (Node: 'green')
51
- OBJECT_VALUE_STRING_COLOR: '#16a34a', // green-600
52
- OBJECT_VALUE_SYMBOL_COLOR: '#16a34a',
53
- // Numbers & booleans — yellow/amber (Node: 'yellow')
54
- OBJECT_VALUE_NUMBER_COLOR: '#b45309', // amber-700 (readable on white)
55
- OBJECT_VALUE_BOOLEAN_COLOR: '#b45309',
56
- // null — bold foreground (Node: 'bold')
47
+ // Property names — default foreground (matches JSON key color in Geist Shiki)
48
+ OBJECT_NAME_COLOR: 'var(--ds-gray-1000)',
49
+ // Strings & symbols — green
50
+ OBJECT_VALUE_STRING_COLOR: 'var(--ds-green-900)',
51
+ OBJECT_VALUE_SYMBOL_COLOR: 'var(--ds-green-900)',
52
+ // Numbers & booleans — green (Geist JSON tokens)
53
+ OBJECT_VALUE_NUMBER_COLOR: 'var(--ds-green-900)',
54
+ OBJECT_VALUE_BOOLEAN_COLOR: 'var(--ds-green-900)',
55
+ // null — muted foreground
57
56
  OBJECT_VALUE_NULL_COLOR: 'var(--ds-gray-900)',
58
- // undefined — grey (Node: 'grey')
59
- OBJECT_VALUE_UNDEFINED_COLOR: 'var(--ds-gray-500)',
60
- // RegExp — red (Node regexp base uses green/red/yellow palette)
61
- OBJECT_VALUE_REGEXP_COLOR: '#dc2626', // red-600
62
- // Functions — cyan (Node: 'special' → 'cyan')
63
- OBJECT_VALUE_FUNCTION_PREFIX_COLOR: '#0891b2', // cyan-600
64
- // HTML (less relevant for data inspection, but reasonable defaults)
65
- HTML_TAG_COLOR: 'var(--ds-gray-500)',
66
- HTML_TAGNAME_COLOR: '#0891b2',
67
- HTML_ATTRIBUTE_NAME_COLOR: '#b45309',
68
- HTML_ATTRIBUTE_VALUE_COLOR: '#16a34a',
69
- HTML_COMMENT_COLOR: 'var(--ds-gray-400)',
70
- HTML_DOCTYPE_COLOR: 'var(--ds-gray-400)',
57
+ // undefined — muted foreground
58
+ OBJECT_VALUE_UNDEFINED_COLOR: 'var(--ds-gray-900)',
59
+ // RegExp — purple
60
+ OBJECT_VALUE_REGEXP_COLOR: 'var(--ds-purple-900)',
61
+ // Functions — purple
62
+ OBJECT_VALUE_FUNCTION_PREFIX_COLOR: 'var(--ds-purple-900)',
63
+ // HTML (rarely used here, kept consistent with the palette)
64
+ HTML_TAG_COLOR: 'var(--ds-gray-900)',
65
+ HTML_TAGNAME_COLOR: 'var(--ds-blue-900)',
66
+ HTML_ATTRIBUTE_NAME_COLOR: 'var(--ds-amber-900)',
67
+ HTML_ATTRIBUTE_VALUE_COLOR: 'var(--ds-green-900)',
68
+ HTML_COMMENT_COLOR: 'var(--ds-gray-700)',
69
+ HTML_DOCTYPE_COLOR: 'var(--ds-gray-700)',
71
70
  // Structural
72
- ARROW_COLOR: 'var(--ds-gray-500)',
71
+ ARROW_COLOR: 'var(--ds-gray-700)',
73
72
  TABLE_BORDER_COLOR: 'var(--ds-gray-300)',
74
73
  TABLE_TH_BACKGROUND_COLOR: 'var(--ds-gray-100)',
75
74
  TABLE_TH_HOVER_COLOR: 'var(--ds-gray-200)',
76
- TABLE_SORT_ICON_COLOR: 'var(--ds-gray-500)',
75
+ TABLE_SORT_ICON_COLOR: 'var(--ds-gray-700)',
77
76
  };
77
+ export const inspectorThemeLight = geistTheme;
78
78
  // ---------------------------------------------------------------------------
79
79
  // Dark theme
80
80
  // ---------------------------------------------------------------------------
81
- export const inspectorThemeDark = {
82
- ...shared,
83
- // Base text
84
- BASE_COLOR: 'var(--ds-gray-1000)',
85
- // Property names — white/light foreground (Node: unstyled = white in dark terminal)
86
- OBJECT_NAME_COLOR: 'var(--ds-gray-900)',
87
- // Strings & symbols — green (Node: 'green')
88
- OBJECT_VALUE_STRING_COLOR: '#4ade80', // green-400
89
- OBJECT_VALUE_SYMBOL_COLOR: '#4ade80',
90
- // Numbers & booleans — yellow (Node: 'yellow')
91
- OBJECT_VALUE_NUMBER_COLOR: '#facc15', // yellow-400
92
- OBJECT_VALUE_BOOLEAN_COLOR: '#facc15',
93
- // null — bold foreground / white (Node: 'bold')
94
- OBJECT_VALUE_NULL_COLOR: 'var(--ds-gray-1000)',
95
- // undefined — grey (Node: 'grey')
96
- OBJECT_VALUE_UNDEFINED_COLOR: 'var(--ds-gray-500)',
97
- // RegExp — red (Node regexp palette)
98
- OBJECT_VALUE_REGEXP_COLOR: '#f87171', // red-400
99
- // Functions — cyan (Node: 'special' → 'cyan')
100
- OBJECT_VALUE_FUNCTION_PREFIX_COLOR: '#22d3ee', // cyan-400
101
- // HTML
102
- HTML_TAG_COLOR: 'var(--ds-gray-500)',
103
- HTML_TAGNAME_COLOR: '#22d3ee',
104
- HTML_ATTRIBUTE_NAME_COLOR: '#facc15',
105
- HTML_ATTRIBUTE_VALUE_COLOR: '#4ade80',
106
- HTML_COMMENT_COLOR: 'var(--ds-gray-500)',
107
- HTML_DOCTYPE_COLOR: 'var(--ds-gray-500)',
108
- // Structural
109
- ARROW_COLOR: 'var(--ds-gray-500)',
110
- TABLE_BORDER_COLOR: 'var(--ds-gray-300)',
111
- TABLE_TH_BACKGROUND_COLOR: 'var(--ds-gray-100)',
112
- TABLE_TH_HOVER_COLOR: 'var(--ds-gray-200)',
113
- TABLE_SORT_ICON_COLOR: 'var(--ds-gray-500)',
114
- };
115
- //# sourceMappingURL=inspector-theme.js.map
81
+ export const inspectorThemeDark = geistTheme;
82
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5zcGVjdG9yLXRoZW1lLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvdWkvaW5zcGVjdG9yLXRoZW1lLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7O0dBYUc7QUFZSCxNQUFNLENBQUMsTUFBTSwyQkFBMkIsR0FBMkI7SUFDakUsdUJBQXVCLEVBQUUsb0JBQW9CO0NBQzlDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSwwQkFBMEIsR0FBMkI7SUFDaEUsdUJBQXVCLEVBQUUsb0JBQW9CO0NBQzlDLENBQUM7QUFFRiw4RUFBOEU7QUFDOUUsaURBQWlEO0FBQ2pELDhFQUE4RTtBQUU5RSxNQUFNLE1BQU0sR0FBRztJQUNiLGNBQWMsRUFBRSxNQUFNO0lBQ3RCLGdCQUFnQixFQUFFLEdBQUc7SUFDckIscUJBQXFCLEVBQUUsYUFBYTtJQUNwQyxtQ0FBbUMsRUFBRSxFQUFFO0lBQ3ZDLG9DQUFvQyxFQUFFLENBQUM7SUFDdkMsMkJBQTJCLEVBQUUsV0FBb0I7SUFDakQsa0JBQWtCLEVBQUUsQ0FBQztJQUNyQixlQUFlLEVBQUUsRUFBRTtJQUNuQixvQkFBb0IsRUFBRSxrQkFBa0I7SUFDeEMsa0JBQWtCLEVBQUUsTUFBTTtJQUMxQixvQkFBb0IsRUFBRSxHQUFHO0lBQ3pCLHFCQUFxQixFQUFFLEVBQUU7SUFDekIsMkJBQTJCLEVBQUUsTUFBTTtJQUNuQywwQkFBMEIsRUFBRSxHQUFHO0NBQ2hDLENBQUM7QUFFRiw4RUFBOEU7QUFDOUUsY0FBYztBQUNkLDhFQUE4RTtBQUU5RSxNQUFNLFVBQVUsR0FBRztJQUNqQixHQUFHLE1BQU07SUFFVCxZQUFZO0lBQ1osVUFBVSxFQUFFLHFCQUFxQjtJQUVqQyw4RUFBOEU7SUFDOUUsaUJBQWlCLEVBQUUscUJBQXFCO0lBRXhDLDRCQUE0QjtJQUM1Qix5QkFBeUIsRUFBRSxxQkFBcUI7SUFDaEQseUJBQXlCLEVBQUUscUJBQXFCO0lBRWhELGlEQUFpRDtJQUNqRCx5QkFBeUIsRUFBRSxxQkFBcUI7SUFDaEQsMEJBQTBCLEVBQUUscUJBQXFCO0lBRWpELDBCQUEwQjtJQUMxQix1QkFBdUIsRUFBRSxvQkFBb0I7SUFFN0MsK0JBQStCO0lBQy9CLDRCQUE0QixFQUFFLG9CQUFvQjtJQUVsRCxrQkFBa0I7SUFDbEIseUJBQXlCLEVBQUUsc0JBQXNCO0lBRWpELHFCQUFxQjtJQUNyQixrQ0FBa0MsRUFBRSxzQkFBc0I7SUFFMUQsNERBQTREO0lBQzVELGNBQWMsRUFBRSxvQkFBb0I7SUFDcEMsa0JBQWtCLEVBQUUsb0JBQW9CO0lBQ3hDLHlCQUF5QixFQUFFLHFCQUFxQjtJQUNoRCwwQkFBMEIsRUFBRSxxQkFBcUI7SUFDakQsa0JBQWtCLEVBQUUsb0JBQW9CO0lBQ3hDLGtCQUFrQixFQUFFLG9CQUFvQjtJQUV4QyxhQUFhO0lBQ2IsV0FBVyxFQUFFLG9CQUFvQjtJQUNqQyxrQkFBa0IsRUFBRSxvQkFBb0I7SUFDeEMseUJBQXlCLEVBQUUsb0JBQW9CO0lBQy9DLG9CQUFvQixFQUFFLG9CQUFvQjtJQUMxQyxxQkFBcUIsRUFBRSxvQkFBb0I7Q0FDNUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLG1CQUFtQixHQUFHLFVBQVUsQ0FBQztBQUU5Qyw4RUFBOEU7QUFDOUUsYUFBYTtBQUNiLDhFQUE4RTtBQUU5RSxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyxVQUFVLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFNoYXJlZCB0aGVtZSBjb25maWd1cmF0aW9uIGZvciByZWFjdC1pbnNwZWN0b3IncyBPYmplY3RJbnNwZWN0b3IuXG4gKlxuICogQ29sb3JzIGZvbGxvdyBHZWlzdCdzIFNoaWtpIEpTT04gcGFsZXR0ZSBzbyB0aGUgaW5zcGVjdG9yIHJlYWRzIHRoZSBzYW1lXG4gKiBhcyBoaWdobGlnaHRlZCBjb2RlIGJsb2NrcyBhY3Jvc3MgdGhlIHByb2R1Y3Q6XG4gKiAgIC0gcHJvcGVydHkgbmFtZXMgLyBwdW5jdHVhdGlvbjogLS1kcy1ncmF5LTEwMDAgKGRlZmF1bHQgZm9yZWdyb3VuZClcbiAqICAgLSBzdHJpbmdzIC8gbnVtYmVycyAvIGJvb2xlYW5zOiAtLWRzLWdyZWVuLTkwMFxuICogICAtIG51bGwgLyB1bmRlZmluZWQ6IC0tZHMtZ3JheS05MDAgKG11dGVkKVxuICogICAtIHJlZ2V4cCAvIGZ1bmN0aW9uOiAtLWRzLXB1cnBsZS05MDBcbiAqICAgLSBkYXRlOiAtLWRzLXBpbmstOTAwXG4gKlxuICogQmVjYXVzZSB0aGUgYC0tZHMtKmAgdG9rZW5zIGFkYXB0IHRvIHRoZW1lIGF1dG9tYXRpY2FsbHksIHRoZSBsaWdodCBhbmRcbiAqIGRhcmsgb2JqZWN0cyBhcmUgaW50ZW50aW9uYWxseSBpZGVudGljYWwuXG4gKi9cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBFeHRlbmRlZCBjb2xvciB0b2tlbnMgbm90IHN1cHBvcnRlZCBieSByZWFjdC1pbnNwZWN0b3IncyBidWlsdC1pbiB0aGVtZVxuLy8gc3lzdGVtLCBhcHBsaWVkIHZpYSBvdXIgY3VzdG9tIG5vZGVSZW5kZXJlciBpbiBkYXRhLWluc3BlY3Rvci50c3guXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuZXhwb3J0IGludGVyZmFjZSBJbnNwZWN0b3JUaGVtZUV4dGVuZGVkIHtcbiAgLyoqIENvbG9yIGZvciBEYXRlIHZhbHVlcyAoTm9kZTogJ21hZ2VudGEnKSAqL1xuICBPQkpFQ1RfVkFMVUVfREFURV9DT0xPUjogc3RyaW5nO1xufVxuXG5leHBvcnQgY29uc3QgaW5zcGVjdG9yVGhlbWVFeHRlbmRlZExpZ2h0OiBJbnNwZWN0b3JUaGVtZUV4dGVuZGVkID0ge1xuICBPQkpFQ1RfVkFMVUVfREFURV9DT0xPUjogJ3ZhcigtLWRzLXBpbmstOTAwKScsXG59O1xuXG5leHBvcnQgY29uc3QgaW5zcGVjdG9yVGhlbWVFeHRlbmRlZERhcms6IEluc3BlY3RvclRoZW1lRXh0ZW5kZWQgPSB7XG4gIE9CSkVDVF9WQUxVRV9EQVRFX0NPTE9SOiAndmFyKC0tZHMtcGluay05MDApJyxcbn07XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gU2hhcmVkIHN0cnVjdHVyYWwgdmFsdWVzIChzYW1lIGluIGJvdGggdGhlbWVzKVxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmNvbnN0IHNoYXJlZCA9IHtcbiAgQkFTRV9GT05UX1NJWkU6ICcxMXB4JyxcbiAgQkFTRV9MSU5FX0hFSUdIVDogMS40LFxuICBCQVNFX0JBQ0tHUk9VTkRfQ09MT1I6ICd0cmFuc3BhcmVudCcsXG4gIE9CSkVDVF9QUkVWSUVXX0FSUkFZX01BWF9QUk9QRVJUSUVTOiAxMCxcbiAgT0JKRUNUX1BSRVZJRVdfT0JKRUNUX01BWF9QUk9QRVJUSUVTOiA1LFxuICBIVE1MX1RBR05BTUVfVEVYVF9UUkFOU0ZPUk06ICdsb3dlcmNhc2UnIGFzIGNvbnN0LFxuICBBUlJPV19NQVJHSU5fUklHSFQ6IDMsXG4gIEFSUk9XX0ZPTlRfU0laRTogMTIsXG4gIFRSRUVOT0RFX0ZPTlRfRkFNSUxZOiAndmFyKC0tZm9udC1tb25vKScsXG4gIFRSRUVOT0RFX0ZPTlRfU0laRTogJzExcHgnLFxuICBUUkVFTk9ERV9MSU5FX0hFSUdIVDogMS40LFxuICBUUkVFTk9ERV9QQURESU5HX0xFRlQ6IDEyLFxuICBUQUJMRV9EQVRBX0JBQ0tHUk9VTkRfSU1BR0U6ICdub25lJyxcbiAgVEFCTEVfREFUQV9CQUNLR1JPVU5EX1NJWkU6ICcwJyxcbn07XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gTGlnaHQgdGhlbWVcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5jb25zdCBnZWlzdFRoZW1lID0ge1xuICAuLi5zaGFyZWQsXG5cbiAgLy8gQmFzZSB0ZXh0XG4gIEJBU0VfQ09MT1I6ICd2YXIoLS1kcy1ncmF5LTEwMDApJyxcblxuICAvLyBQcm9wZXJ0eSBuYW1lcyDigJQgZGVmYXVsdCBmb3JlZ3JvdW5kIChtYXRjaGVzIEpTT04ga2V5IGNvbG9yIGluIEdlaXN0IFNoaWtpKVxuICBPQkpFQ1RfTkFNRV9DT0xPUjogJ3ZhcigtLWRzLWdyYXktMTAwMCknLFxuXG4gIC8vIFN0cmluZ3MgJiBzeW1ib2xzIOKAlCBncmVlblxuICBPQkpFQ1RfVkFMVUVfU1RSSU5HX0NPTE9SOiAndmFyKC0tZHMtZ3JlZW4tOTAwKScsXG4gIE9CSkVDVF9WQUxVRV9TWU1CT0xfQ09MT1I6ICd2YXIoLS1kcy1ncmVlbi05MDApJyxcblxuICAvLyBOdW1iZXJzICYgYm9vbGVhbnMg4oCUIGdyZWVuIChHZWlzdCBKU09OIHRva2VucylcbiAgT0JKRUNUX1ZBTFVFX05VTUJFUl9DT0xPUjogJ3ZhcigtLWRzLWdyZWVuLTkwMCknLFxuICBPQkpFQ1RfVkFMVUVfQk9PTEVBTl9DT0xPUjogJ3ZhcigtLWRzLWdyZWVuLTkwMCknLFxuXG4gIC8vIG51bGwg4oCUIG11dGVkIGZvcmVncm91bmRcbiAgT0JKRUNUX1ZBTFVFX05VTExfQ09MT1I6ICd2YXIoLS1kcy1ncmF5LTkwMCknLFxuXG4gIC8vIHVuZGVmaW5lZCDigJQgbXV0ZWQgZm9yZWdyb3VuZFxuICBPQkpFQ1RfVkFMVUVfVU5ERUZJTkVEX0NPTE9SOiAndmFyKC0tZHMtZ3JheS05MDApJyxcblxuICAvLyBSZWdFeHAg4oCUIHB1cnBsZVxuICBPQkpFQ1RfVkFMVUVfUkVHRVhQX0NPTE9SOiAndmFyKC0tZHMtcHVycGxlLTkwMCknLFxuXG4gIC8vIEZ1bmN0aW9ucyDigJQgcHVycGxlXG4gIE9CSkVDVF9WQUxVRV9GVU5DVElPTl9QUkVGSVhfQ09MT1I6ICd2YXIoLS1kcy1wdXJwbGUtOTAwKScsXG5cbiAgLy8gSFRNTCAocmFyZWx5IHVzZWQgaGVyZSwga2VwdCBjb25zaXN0ZW50IHdpdGggdGhlIHBhbGV0dGUpXG4gIEhUTUxfVEFHX0NPTE9SOiAndmFyKC0tZHMtZ3JheS05MDApJyxcbiAgSFRNTF9UQUdOQU1FX0NPTE9SOiAndmFyKC0tZHMtYmx1ZS05MDApJyxcbiAgSFRNTF9BVFRSSUJVVEVfTkFNRV9DT0xPUjogJ3ZhcigtLWRzLWFtYmVyLTkwMCknLFxuICBIVE1MX0FUVFJJQlVURV9WQUxVRV9DT0xPUjogJ3ZhcigtLWRzLWdyZWVuLTkwMCknLFxuICBIVE1MX0NPTU1FTlRfQ09MT1I6ICd2YXIoLS1kcy1ncmF5LTcwMCknLFxuICBIVE1MX0RPQ1RZUEVfQ09MT1I6ICd2YXIoLS1kcy1ncmF5LTcwMCknLFxuXG4gIC8vIFN0cnVjdHVyYWxcbiAgQVJST1dfQ09MT1I6ICd2YXIoLS1kcy1ncmF5LTcwMCknLFxuICBUQUJMRV9CT1JERVJfQ09MT1I6ICd2YXIoLS1kcy1ncmF5LTMwMCknLFxuICBUQUJMRV9USF9CQUNLR1JPVU5EX0NPTE9SOiAndmFyKC0tZHMtZ3JheS0xMDApJyxcbiAgVEFCTEVfVEhfSE9WRVJfQ09MT1I6ICd2YXIoLS1kcy1ncmF5LTIwMCknLFxuICBUQUJMRV9TT1JUX0lDT05fQ09MT1I6ICd2YXIoLS1kcy1ncmF5LTcwMCknLFxufTtcblxuZXhwb3J0IGNvbnN0IGluc3BlY3RvclRoZW1lTGlnaHQgPSBnZWlzdFRoZW1lO1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIERhcmsgdGhlbWVcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5leHBvcnQgY29uc3QgaW5zcGVjdG9yVGhlbWVEYXJrID0gZ2Vpc3RUaGVtZTtcbiJdfQ==
@@ -9,4 +9,4 @@ const STYLES = `.wf-load-more{appearance:none;-webkit-appearance:none;border:non
9
9
  export function LoadMoreButton({ loading = false, onClick, label = 'Load more', loadingLabel = 'Loading...', }) {
10
10
  return (_jsxs(_Fragment, { children: [_jsx("style", { dangerouslySetInnerHTML: { __html: STYLES } }), _jsxs("button", { type: "button", onClick: onClick, disabled: loading, className: "wf-load-more", children: [loading && _jsx(Spinner, { size: 14 }), loading ? loadingLabel : label] })] }));
11
11
  }
12
- //# sourceMappingURL=load-more-button.js.map
12
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9hZC1tb3JlLWJ1dHRvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21wb25lbnRzL3VpL2xvYWQtbW9yZS1idXR0b24udHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVksQ0FBQzs7QUFFYixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBRXBDLE1BQU0sTUFBTSxHQUFHLHFqQkFBcWpCLENBQUM7QUFTcmtCOzs7R0FHRztBQUNILE1BQU0sVUFBVSxjQUFjLENBQUMsRUFDN0IsT0FBTyxHQUFHLEtBQUssRUFDZixPQUFPLEVBQ1AsS0FBSyxHQUFHLFdBQVcsRUFDbkIsWUFBWSxHQUFHLFlBQVksR0FDUDtJQUNwQixPQUFPLENBQ0wsOEJBQ0UsZ0JBQU8sdUJBQXVCLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEdBQUksRUFDdEQsa0JBQ0UsSUFBSSxFQUFDLFFBQVEsRUFDYixPQUFPLEVBQUUsT0FBTyxFQUNoQixRQUFRLEVBQUUsT0FBTyxFQUNqQixTQUFTLEVBQUMsY0FBYyxhQUV2QixPQUFPLElBQUksS0FBQyxPQUFPLElBQUMsSUFBSSxFQUFFLEVBQUUsR0FBSSxFQUNoQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUN4QixJQUNSLENBQ0osQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIGNsaWVudCc7XG5cbmltcG9ydCB7IFNwaW5uZXIgfSBmcm9tICcuL3NwaW5uZXInO1xuXG5jb25zdCBTVFlMRVMgPSBgLndmLWxvYWQtbW9yZXthcHBlYXJhbmNlOm5vbmU7LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7Ym9yZGVyOm5vbmU7ZGlzcGxheTppbmxpbmUtZmxleDthbGlnbi1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OmNlbnRlcjtoZWlnaHQ6MzJweDtwYWRkaW5nOjAgMTJweDtib3JkZXItcmFkaXVzOjZweDtmb250LXNpemU6MTNweDtmb250LXdlaWdodDo1MDA7bGluZS1oZWlnaHQ6MjBweDtjb2xvcjp2YXIoLS1kcy1ncmF5LTEwMDApO2JhY2tncm91bmQ6dmFyKC0tZHMtYmFja2dyb3VuZC0xMDApO2JveC1zaGFkb3c6MCAwIDAgMXB4IHZhcigtLWRzLWdyYXktNDAwKTtjdXJzb3I6cG9pbnRlcjt3aGl0ZS1zcGFjZTpub3dyYXA7Z2FwOjZweDt0cmFuc2l0aW9uOmJhY2tncm91bmQgMTUwbXN9LndmLWxvYWQtbW9yZTpob3ZlcntiYWNrZ3JvdW5kOnZhcigtLWRzLWdyYXktYWxwaGEtMjAwKX0ud2YtbG9hZC1tb3JlOmRpc2FibGVke29wYWNpdHk6LjY7Y3Vyc29yOmRlZmF1bHR9LndmLWxvYWQtbW9yZTpkaXNhYmxlZDpob3ZlcntiYWNrZ3JvdW5kOnZhcigtLWRzLWJhY2tncm91bmQtMTAwKX1gO1xuXG5pbnRlcmZhY2UgTG9hZE1vcmVCdXR0b25Qcm9wcyB7XG4gIGxvYWRpbmc/OiBib29sZWFuO1xuICBvbkNsaWNrPzogKCkgPT4gdm9pZDtcbiAgbGFiZWw/OiBzdHJpbmc7XG4gIGxvYWRpbmdMYWJlbD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBBIFwiTG9hZCBtb3JlXCIgYnV0dG9uIG1hdGNoaW5nIEdlaXN0J3MgQnV0dG9uIHR5cGU9XCJzZWNvbmRhcnlcIiBzaXplPVwic21hbGxcIlxuICogd2l0aCBhIHNwaW5uZXIgcHJlZml4IHdoZW4gbG9hZGluZy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIExvYWRNb3JlQnV0dG9uKHtcbiAgbG9hZGluZyA9IGZhbHNlLFxuICBvbkNsaWNrLFxuICBsYWJlbCA9ICdMb2FkIG1vcmUnLFxuICBsb2FkaW5nTGFiZWwgPSAnTG9hZGluZy4uLicsXG59OiBMb2FkTW9yZUJ1dHRvblByb3BzKSB7XG4gIHJldHVybiAoXG4gICAgPD5cbiAgICAgIDxzdHlsZSBkYW5nZXJvdXNseVNldElubmVySFRNTD17eyBfX2h0bWw6IFNUWUxFUyB9fSAvPlxuICAgICAgPGJ1dHRvblxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgb25DbGljaz17b25DbGlja31cbiAgICAgICAgZGlzYWJsZWQ9e2xvYWRpbmd9XG4gICAgICAgIGNsYXNzTmFtZT1cIndmLWxvYWQtbW9yZVwiXG4gICAgICA+XG4gICAgICAgIHtsb2FkaW5nICYmIDxTcGlubmVyIHNpemU9ezE0fSAvPn1cbiAgICAgICAge2xvYWRpbmcgPyBsb2FkaW5nTGFiZWwgOiBsYWJlbH1cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvPlxuICApO1xufVxuIl19
@@ -43,4 +43,4 @@ export function MenuDropdown({ options, value, onChange, }) {
43
43
  setOpen(false);
44
44
  }, children: option.label }, option.value))) }))] }));
45
45
  }
46
- //# sourceMappingURL=menu-dropdown.js.map
46
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVudS1kcm9wZG93bi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21wb25lbnRzL3VpL21lbnUtZHJvcGRvd24udHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVksQ0FBQzs7QUFFYixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsTUFBTSxPQUFPLENBQUM7QUFFcEQsTUFBTSxNQUFNLEdBQUcscXZCQUFxdkIsQ0FBQztBQWFyd0I7OztHQUdHO0FBQ0gsTUFBTSxVQUFVLFlBQVksQ0FBNEIsRUFDdEQsT0FBTyxFQUNQLEtBQUssRUFDTCxRQUFRLEdBQ2E7SUFDckIsTUFBTSxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDeEMsTUFBTSxHQUFHLEdBQUcsTUFBTSxDQUFpQixJQUFJLENBQUMsQ0FBQztJQUN6QyxNQUFNLEtBQUssR0FDVCxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxLQUFLLEtBQUssQ0FBQyxFQUFFLEtBQUssSUFBSSxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxJQUFJLEVBQUUsQ0FBQztJQUUzRSxTQUFTLENBQUMsR0FBRyxFQUFFO1FBQ2IsSUFBSSxDQUFDLElBQUk7WUFBRSxPQUFPO1FBQ2xCLFNBQVMsa0JBQWtCLENBQUMsQ0FBYTtZQUN2QyxJQUFJLEdBQUcsQ0FBQyxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsTUFBYyxDQUFDLEVBQUUsQ0FBQztnQkFDM0QsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ2pCLENBQUM7UUFDSCxDQUFDO1FBQ0QsUUFBUSxDQUFDLGdCQUFnQixDQUFDLFdBQVcsRUFBRSxrQkFBa0IsQ0FBQyxDQUFDO1FBQzNELE9BQU8sR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDLG1CQUFtQixDQUFDLFdBQVcsRUFBRSxrQkFBa0IsQ0FBQyxDQUFDO0lBQzdFLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFFWCxPQUFPLENBQ0wsZUFBSyxHQUFHLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLENBQUMsRUFBRSxhQUMzRCxnQkFBTyx1QkFBdUIsRUFBRSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsR0FBSSxFQUV0RCxrQkFDRSxJQUFJLEVBQUMsUUFBUSxFQUNiLFNBQVMsRUFBQyxhQUFhLEVBQ3ZCLE9BQU8sRUFBRSxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFFN0IseUJBQU8sS0FBSyxHQUFRLEVBQ3BCLGNBQ0UsS0FBSyxFQUFFLEVBQUUsRUFDVCxNQUFNLEVBQUUsRUFBRSxFQUNWLE9BQU8sRUFBQyxXQUFXLEVBQ25CLElBQUksRUFBQyxNQUFNLEVBQ1gsS0FBSyxFQUFFOzRCQUNMLFVBQVUsRUFBRSxFQUFFOzRCQUNkLFdBQVcsRUFBRSxDQUFDLENBQUM7NEJBQ2YsS0FBSyxFQUFFLG9CQUFvQjt5QkFDNUIsWUFFRCxlQUNFLENBQUMsRUFBQyxxQkFBcUIsRUFDdkIsTUFBTSxFQUFDLGNBQWMsRUFDckIsV0FBVyxFQUFDLEtBQUssRUFDakIsYUFBYSxFQUFDLE9BQU8sRUFDckIsY0FBYyxFQUFDLE9BQU8sR0FDdEIsR0FDRSxJQUNDLEVBRVIsSUFBSSxJQUFJLENBQ1AsY0FDRSxLQUFLLEVBQUU7b0JBQ0wsUUFBUSxFQUFFLFVBQVU7b0JBQ3BCLEtBQUssRUFBRSxDQUFDO29CQUNSLEdBQUcsRUFBRSxNQUFNO29CQUNYLFNBQVMsRUFBRSxDQUFDO29CQUNaLFFBQVEsRUFBRSxHQUFHO29CQUNiLE9BQU8sRUFBRSxDQUFDO29CQUNWLFlBQVksRUFBRSxFQUFFO29CQUNoQixVQUFVLEVBQUUsMEJBQTBCO29CQUN0QyxTQUFTLEVBQUUsZ0RBQWdEO29CQUMzRCxNQUFNLEVBQUUsSUFBSTtpQkFDYixFQUNELElBQUksRUFBQyxNQUFNLFlBRVYsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FDdkIsaUJBRUUsSUFBSSxFQUFDLFFBQVEsRUFDYixJQUFJLEVBQUMsVUFBVSxFQUNmLFNBQVMsRUFBQyxjQUFjLEVBQ3hCLEtBQUssRUFBRTt3QkFDTCxVQUFVLEVBQUUsTUFBTSxDQUFDLEtBQUssS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRztxQkFDL0MsRUFDRCxPQUFPLEVBQUUsR0FBRyxFQUFFO3dCQUNaLFFBQVEsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7d0JBQ3ZCLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztvQkFDakIsQ0FBQyxZQUVBLE1BQU0sQ0FBQyxLQUFLLElBWlIsTUFBTSxDQUFDLEtBQUssQ0FhVixDQUNWLENBQUMsR0FDRSxDQUNQLElBQ0csQ0FDUCxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIid1c2UgY2xpZW50JztcblxuaW1wb3J0IHsgdXNlRWZmZWN0LCB1c2VSZWYsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnO1xuXG5jb25zdCBTVFlMRVMgPSBgLndmLW1lbnUtYnRue2FwcGVhcmFuY2U6bm9uZTstd2Via2l0LWFwcGVhcmFuY2U6bm9uZTtib3JkZXI6bm9uZTtkaXNwbGF5OmlubGluZS1mbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2hlaWdodDo0MHB4O3BhZGRpbmc6MCAxMnB4O2JvcmRlci1yYWRpdXM6NnB4O2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMDtsaW5lLWhlaWdodDoyMHB4O2NvbG9yOnZhcigtLWRzLWdyYXktMTAwMCk7YmFja2dyb3VuZDp2YXIoLS1kcy1iYWNrZ3JvdW5kLTEwMCk7Ym94LXNoYWRvdzowIDAgMCAxcHggdmFyKC0tZHMtZ3JheS00MDApO2N1cnNvcjpwb2ludGVyO3doaXRlLXNwYWNlOm5vd3JhcDt0cmFuc2l0aW9uOmJhY2tncm91bmQgMTUwbXN9LndmLW1lbnUtYnRuOmhvdmVye2JhY2tncm91bmQ6dmFyKC0tZHMtZ3JheS1hbHBoYS0yMDApfS53Zi1tZW51LWl0ZW17YXBwZWFyYW5jZTpub25lOy13ZWJraXQtYXBwZWFyYW5jZTpub25lO2JvcmRlcjpub25lO2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7d2lkdGg6MTAwJTtoZWlnaHQ6NDBweDtwYWRkaW5nOjAgOHB4O2JvcmRlci1yYWRpdXM6NnB4O2ZvbnQtc2l6ZToxNHB4O2NvbG9yOnZhcigtLWRzLWdyYXktMTAwMCk7YmFja2dyb3VuZDp0cmFuc3BhcmVudDtjdXJzb3I6cG9pbnRlcjt0cmFuc2l0aW9uOmJhY2tncm91bmQgMTUwbXN9LndmLW1lbnUtaXRlbTpob3ZlcntiYWNrZ3JvdW5kOnZhcigtLWRzLWdyYXktYWxwaGEtMTAwKX1gO1xuXG5leHBvcnQgaW50ZXJmYWNlIE1lbnVEcm9wZG93bk9wdGlvbjxUIGV4dGVuZHMgc3RyaW5nID0gc3RyaW5nPiB7XG4gIHZhbHVlOiBUO1xuICBsYWJlbDogc3RyaW5nO1xufVxuXG5pbnRlcmZhY2UgTWVudURyb3Bkb3duUHJvcHM8VCBleHRlbmRzIHN0cmluZyA9IHN0cmluZz4ge1xuICBvcHRpb25zOiBNZW51RHJvcGRvd25PcHRpb248VD5bXTtcbiAgdmFsdWU6IFQ7XG4gIG9uQ2hhbmdlOiAodmFsdWU6IFQpID0+IHZvaWQ7XG59XG5cbi8qKlxuICogQSBkcm9wZG93biBtZW51IHRoYXQgbWF0Y2hlcyBHZWlzdCdzIE1lbnVCdXR0b24gKHNlY29uZGFyeSkgKyBNZW51IHN0eWxpbmcuXG4gKiBVc2VzIENTUyBjbGFzc2VzIHdpdGggcHJvcGVyIDpob3ZlciBzcGVjaWZpY2l0eSAobm8gaW5saW5lIGJhY2tncm91bmQpLlxuICovXG5leHBvcnQgZnVuY3Rpb24gTWVudURyb3Bkb3duPFQgZXh0ZW5kcyBzdHJpbmcgPSBzdHJpbmc+KHtcbiAgb3B0aW9ucyxcbiAgdmFsdWUsXG4gIG9uQ2hhbmdlLFxufTogTWVudURyb3Bkb3duUHJvcHM8VD4pIHtcbiAgY29uc3QgW29wZW4sIHNldE9wZW5dID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCByZWYgPSB1c2VSZWY8SFRNTERpdkVsZW1lbnQ+KG51bGwpO1xuICBjb25zdCBsYWJlbCA9XG4gICAgb3B0aW9ucy5maW5kKChvKSA9PiBvLnZhbHVlID09PSB2YWx1ZSk/LmxhYmVsID8/IG9wdGlvbnNbMF0/LmxhYmVsID8/ICcnO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFvcGVuKSByZXR1cm47XG4gICAgZnVuY3Rpb24gaGFuZGxlQ2xpY2tPdXRzaWRlKGU6IE1vdXNlRXZlbnQpIHtcbiAgICAgIGlmIChyZWYuY3VycmVudCAmJiAhcmVmLmN1cnJlbnQuY29udGFpbnMoZS50YXJnZXQgYXMgTm9kZSkpIHtcbiAgICAgICAgc2V0T3BlbihmYWxzZSk7XG4gICAgICB9XG4gICAgfVxuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIGhhbmRsZUNsaWNrT3V0c2lkZSk7XG4gICAgcmV0dXJuICgpID0+IGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIGhhbmRsZUNsaWNrT3V0c2lkZSk7XG4gIH0sIFtvcGVuXSk7XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IHJlZj17cmVmfSBzdHlsZT17eyBwb3NpdGlvbjogJ3JlbGF0aXZlJywgZmxleFNocmluazogMCB9fT5cbiAgICAgIDxzdHlsZSBkYW5nZXJvdXNseVNldElubmVySFRNTD17eyBfX2h0bWw6IFNUWUxFUyB9fSAvPlxuXG4gICAgICA8YnV0dG9uXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICBjbGFzc05hbWU9XCJ3Zi1tZW51LWJ0blwiXG4gICAgICAgIG9uQ2xpY2s9eygpID0+IHNldE9wZW4oIW9wZW4pfVxuICAgICAgPlxuICAgICAgICA8c3Bhbj57bGFiZWx9PC9zcGFuPlxuICAgICAgICA8c3ZnXG4gICAgICAgICAgd2lkdGg9ezE2fVxuICAgICAgICAgIGhlaWdodD17MTZ9XG4gICAgICAgICAgdmlld0JveD1cIjAgMCAxNiAxNlwiXG4gICAgICAgICAgZmlsbD1cIm5vbmVcIlxuICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICBtYXJnaW5MZWZ0OiAxNixcbiAgICAgICAgICAgIG1hcmdpblJpZ2h0OiAtNCxcbiAgICAgICAgICAgIGNvbG9yOiAndmFyKC0tZHMtZ3JheS05MDApJyxcbiAgICAgICAgICB9fVxuICAgICAgICA+XG4gICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgIGQ9XCJNNC41IDZMOCA5LjVMMTEuNSA2XCJcbiAgICAgICAgICAgIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiXG4gICAgICAgICAgICBzdHJva2VXaWR0aD1cIjEuNVwiXG4gICAgICAgICAgICBzdHJva2VMaW5lY2FwPVwicm91bmRcIlxuICAgICAgICAgICAgc3Ryb2tlTGluZWpvaW49XCJyb3VuZFwiXG4gICAgICAgICAgLz5cbiAgICAgICAgPC9zdmc+XG4gICAgICA8L2J1dHRvbj5cblxuICAgICAge29wZW4gJiYgKFxuICAgICAgICA8ZGl2XG4gICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgICAgICAgICAgcmlnaHQ6IDAsXG4gICAgICAgICAgICB0b3A6ICcxMDAlJyxcbiAgICAgICAgICAgIG1hcmdpblRvcDogNCxcbiAgICAgICAgICAgIG1pbldpZHRoOiAxNDAsXG4gICAgICAgICAgICBwYWRkaW5nOiA0LFxuICAgICAgICAgICAgYm9yZGVyUmFkaXVzOiAxMixcbiAgICAgICAgICAgIGJhY2tncm91bmQ6ICd2YXIoLS1kcy1iYWNrZ3JvdW5kLTEwMCknLFxuICAgICAgICAgICAgYm94U2hhZG93OiAndmFyKC0tZHMtc2hhZG93LW1lbnUsIHZhcigtLWRzLXNoYWRvdy1tZWRpdW0pKScsXG4gICAgICAgICAgICB6SW5kZXg6IDIwMDEsXG4gICAgICAgICAgfX1cbiAgICAgICAgICByb2xlPVwibWVudVwiXG4gICAgICAgID5cbiAgICAgICAgICB7b3B0aW9ucy5tYXAoKG9wdGlvbikgPT4gKFxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICBrZXk9e29wdGlvbi52YWx1ZX1cbiAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgIHJvbGU9XCJtZW51aXRlbVwiXG4gICAgICAgICAgICAgIGNsYXNzTmFtZT1cIndmLW1lbnUtaXRlbVwiXG4gICAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgZm9udFdlaWdodDogb3B0aW9uLnZhbHVlID09PSB2YWx1ZSA/IDUwMCA6IDQwMCxcbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xuICAgICAgICAgICAgICAgIG9uQ2hhbmdlKG9wdGlvbi52YWx1ZSk7XG4gICAgICAgICAgICAgICAgc2V0T3BlbihmYWxzZSk7XG4gICAgICAgICAgICAgIH19XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIHtvcHRpb24ubGFiZWx9XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICApKX1cbiAgICAgICAgPC9kaXY+XG4gICAgICApfVxuICAgIDwvZGl2PlxuICApO1xufVxuIl19
@@ -4,4 +4,4 @@ function Skeleton({ className, style, ...props }) {
4
4
  return (_jsx("div", { ...props, className: cn('rounded-md', className), style: { backgroundColor: 'var(--ds-gray-200)', ...style } }));
5
5
  }
6
6
  export { Skeleton };
7
- //# sourceMappingURL=skeleton.js.map
7
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2tlbGV0b24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29tcG9uZW50cy91aS9za2VsZXRvbi50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUVyQyxTQUFTLFFBQVEsQ0FBQyxFQUNoQixTQUFTLEVBQ1QsS0FBSyxFQUNMLEdBQUcsS0FBSyxFQUM2QjtJQUNyQyxPQUFPLENBQ0wsaUJBQ00sS0FBSyxFQUNULFNBQVMsRUFBRSxFQUFFLENBQUMsWUFBWSxFQUFFLFNBQVMsQ0FBQyxFQUN0QyxLQUFLLEVBQUUsRUFBRSxlQUFlLEVBQUUsb0JBQW9CLEVBQUUsR0FBRyxLQUFLLEVBQUUsR0FDMUQsQ0FDSCxDQUFDO0FBQ0osQ0FBQztBQUVELE9BQU8sRUFBRSxRQUFRLEVBQUUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNuIH0gZnJvbSAnLi4vLi4vbGliL3V0aWxzJztcblxuZnVuY3Rpb24gU2tlbGV0b24oe1xuICBjbGFzc05hbWUsXG4gIHN0eWxlLFxuICAuLi5wcm9wc1xufTogUmVhY3QuSFRNTEF0dHJpYnV0ZXM8SFRNTERpdkVsZW1lbnQ+KSB7XG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgey4uLnByb3BzfVxuICAgICAgY2xhc3NOYW1lPXtjbigncm91bmRlZC1tZCcsIGNsYXNzTmFtZSl9XG4gICAgICBzdHlsZT17eyBiYWNrZ3JvdW5kQ29sb3I6ICd2YXIoLS1kcy1ncmF5LTIwMCknLCAuLi5zdHlsZSB9fVxuICAgIC8+XG4gICk7XG59XG5cbmV4cG9ydCB7IFNrZWxldG9uIH07XG4iXX0=
@@ -54,4 +54,4 @@ export function Spinner({ size = 14, color, }) {
54
54
  animationDelay: `${delay}ms`,
55
55
  } }, delay)))] }));
56
56
  }
57
- //# sourceMappingURL=spinner.js.map
57
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3Bpbm5lci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21wb25lbnRzL3VpL3NwaW5uZXIudHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxNQUFNLFNBQVMsR0FBRyw0REFBNEQsQ0FBQztBQUUvRTs7O0dBR0c7QUFDSCxNQUFNLFVBQVUsT0FBTyxDQUFDLEVBQ3RCLElBQUksR0FBRyxFQUFFLEVBQ1QsS0FBSyxHQUlOO0lBQ0MsTUFBTSxNQUFNLEdBQ1YsSUFBSSxJQUFJLEVBQUU7UUFDUixDQUFDLENBQUM7WUFDRSxLQUFLLEVBQUUsQ0FBQztZQUNSLEtBQUssRUFBRSxFQUFFO1lBQ1QsTUFBTSxFQUFFLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO1lBQ3JELFFBQVEsRUFBRSxJQUFJO1lBQ2QsS0FBSyxFQUFFLENBQUM7WUFDUixLQUFLLEVBQUUsR0FBRztTQUNYO1FBQ0gsQ0FBQyxDQUFDLElBQUksSUFBSSxFQUFFO1lBQ1YsQ0FBQyxDQUFDO2dCQUNFLEtBQUssRUFBRSxFQUFFO2dCQUNULEtBQUssRUFBRSxFQUFFO2dCQUNULE1BQU0sRUFBRSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztnQkFDakUsUUFBUSxFQUFFLElBQUk7Z0JBQ2QsS0FBSyxFQUFFLENBQUM7Z0JBQ1IsS0FBSyxFQUFFLEdBQUc7YUFDWDtZQUNILENBQUMsQ0FBQztnQkFDRSxLQUFLLEVBQUUsRUFBRTtnQkFDVCxLQUFLLEVBQUUsRUFBRTtnQkFDVCxNQUFNLEVBQUU7b0JBQ04sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHO29CQUM1RCxDQUFDLEdBQUcsRUFBRSxDQUFDO2lCQUNSO2dCQUNELFFBQVEsRUFBRSxJQUFJO2dCQUNkLEtBQUssRUFBRSxJQUFJLEdBQUcsSUFBSTtnQkFDbEIsS0FBSyxFQUFFLElBQUksR0FBRyxJQUFJO2FBQ25CLENBQUM7SUFFVixPQUFPLENBQ0wsZ0JBQ0UsS0FBSyxFQUFFO1lBQ0wsT0FBTyxFQUFFLGFBQWE7WUFDdEIsUUFBUSxFQUFFLFVBQVU7WUFDcEIsS0FBSyxFQUFFLElBQUk7WUFDWCxNQUFNLEVBQUUsSUFBSTtTQUNiLGFBRUQsZ0JBQU8sdUJBQXVCLEVBQUUsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLEdBQUksRUFDeEQsTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUMvQixlQUVFLEtBQUssRUFBRTtvQkFDTCxRQUFRLEVBQUUsVUFBVTtvQkFDcEIsSUFBSSxFQUFFLEtBQUs7b0JBQ1gsR0FBRyxFQUFFLEtBQUs7b0JBQ1YsS0FBSyxFQUFFLE1BQU0sQ0FBQyxLQUFLO29CQUNuQixNQUFNLEVBQUUsTUFBTSxDQUFDLEtBQUs7b0JBQ3BCLFVBQVUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEdBQUcsQ0FBQztvQkFDN0IsU0FBUyxFQUFFLENBQUMsTUFBTSxDQUFDLEtBQUssR0FBRyxDQUFDO29CQUM1QixZQUFZLEVBQUUsQ0FBQztvQkFDZixlQUFlLEVBQUUsS0FBSyxJQUFJLG9CQUFvQjtvQkFDOUMsU0FBUyxFQUFFLFVBQVUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxLQUFLLGtCQUFrQixJQUFJLEdBQUcsSUFBSSxLQUFLO29CQUN2RSxTQUFTLEVBQUUsbUJBQW1CLE1BQU0sQ0FBQyxRQUFRLG9CQUFvQjtvQkFDakUsY0FBYyxFQUFFLEdBQUcsS0FBSyxJQUFJO2lCQUM3QixJQWRJLEtBQUssQ0FlVixDQUNILENBQUMsSUFDRyxDQUNSLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiY29uc3QgS0VZRlJBTUVTID0gYEBrZXlmcmFtZXMgd2Ytc3Bpbm5lci1mYWRlezAle29wYWNpdHk6MX0xMDAle29wYWNpdHk6LjE1fX1gO1xuXG4vKipcbiAqIFNwaW5uZXIgbWF0Y2hpbmcgR2Vpc3QncyBtdWx0aS1saW5lIGZhZGUgc3Bpbm5lci5cbiAqIEF0IHNpemUg4omkMTI6IDggbGluZXMsIOKJpDE2OiAxMCBsaW5lcywgZWxzZTogMTIgbGluZXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBTcGlubmVyKHtcbiAgc2l6ZSA9IDE0LFxuICBjb2xvcixcbn06IHtcbiAgc2l6ZT86IG51bWJlcjtcbiAgY29sb3I/OiBzdHJpbmc7XG59KSB7XG4gIGNvbnN0IGNvbmZpZyA9XG4gICAgc2l6ZSA8PSAxMlxuICAgICAgPyB7XG4gICAgICAgICAgY291bnQ6IDgsXG4gICAgICAgICAgYW5nbGU6IDQ1LFxuICAgICAgICAgIGRlbGF5czogWy04NzUsIC03NTAsIC02MjUsIC01MDAsIC0zNzUsIC0yNTAsIC0xMjUsIDBdLFxuICAgICAgICAgIGR1cmF0aW9uOiAxMDAwLFxuICAgICAgICAgIGxpbmVXOiAzLFxuICAgICAgICAgIGxpbmVIOiAxLjUsXG4gICAgICAgIH1cbiAgICAgIDogc2l6ZSA8PSAxNlxuICAgICAgICA/IHtcbiAgICAgICAgICAgIGNvdW50OiAxMCxcbiAgICAgICAgICAgIGFuZ2xlOiAzNixcbiAgICAgICAgICAgIGRlbGF5czogWy05MDAsIC04MDAsIC03MDAsIC02MDAsIC01MDAsIC00MDAsIC0zMDAsIC0yMDAsIC0xMDAsIDBdLFxuICAgICAgICAgICAgZHVyYXRpb246IDEwMDAsXG4gICAgICAgICAgICBsaW5lVzogNCxcbiAgICAgICAgICAgIGxpbmVIOiAxLjUsXG4gICAgICAgICAgfVxuICAgICAgICA6IHtcbiAgICAgICAgICAgIGNvdW50OiAxMixcbiAgICAgICAgICAgIGFuZ2xlOiAzMCxcbiAgICAgICAgICAgIGRlbGF5czogW1xuICAgICAgICAgICAgICAtMTEwMCwgLTEwMDAsIC05MDAsIC04MDAsIC03MDAsIC02MDAsIC01MDAsIC00MDAsIC0zMDAsIC0yMDAsXG4gICAgICAgICAgICAgIC0xMDAsIDAsXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgZHVyYXRpb246IDEyMDAsXG4gICAgICAgICAgICBsaW5lVzogc2l6ZSAqIDAuMjQsXG4gICAgICAgICAgICBsaW5lSDogc2l6ZSAqIDAuMDgsXG4gICAgICAgICAgfTtcblxuICByZXR1cm4gKFxuICAgIDxzcGFuXG4gICAgICBzdHlsZT17e1xuICAgICAgICBkaXNwbGF5OiAnaW5saW5lLWZsZXgnLFxuICAgICAgICBwb3NpdGlvbjogJ3JlbGF0aXZlJyxcbiAgICAgICAgd2lkdGg6IHNpemUsXG4gICAgICAgIGhlaWdodDogc2l6ZSxcbiAgICAgIH19XG4gICAgPlxuICAgICAgPHN0eWxlIGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MPXt7IF9faHRtbDogS0VZRlJBTUVTIH19IC8+XG4gICAgICB7Y29uZmlnLmRlbGF5cy5tYXAoKGRlbGF5LCBpKSA9PiAoXG4gICAgICAgIDxzcGFuXG4gICAgICAgICAga2V5PXtkZWxheX1cbiAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgICAgICAgICBsZWZ0OiAnNTAlJyxcbiAgICAgICAgICAgIHRvcDogJzUwJScsXG4gICAgICAgICAgICB3aWR0aDogY29uZmlnLmxpbmVXLFxuICAgICAgICAgICAgaGVpZ2h0OiBjb25maWcubGluZUgsXG4gICAgICAgICAgICBtYXJnaW5MZWZ0OiAtY29uZmlnLmxpbmVXIC8gMixcbiAgICAgICAgICAgIG1hcmdpblRvcDogLWNvbmZpZy5saW5lSCAvIDIsXG4gICAgICAgICAgICBib3JkZXJSYWRpdXM6IDEsXG4gICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IGNvbG9yID8/ICd2YXIoLS1kcy1ncmF5LTcwMCknLFxuICAgICAgICAgICAgdHJhbnNmb3JtOiBgcm90YXRlKCR7aSAqIGNvbmZpZy5hbmdsZX1kZWcpIHRyYW5zbGF0ZSgke3NpemUgKiAwLjM2fXB4KWAsXG4gICAgICAgICAgICBhbmltYXRpb246IGB3Zi1zcGlubmVyLWZhZGUgJHtjb25maWcuZHVyYXRpb259bXMgbGluZWFyIGluZmluaXRlYCxcbiAgICAgICAgICAgIGFuaW1hdGlvbkRlbGF5OiBgJHtkZWxheX1tc2AsXG4gICAgICAgICAgfX1cbiAgICAgICAgLz5cbiAgICAgICkpfVxuICAgIDwvc3Bhbj5cbiAgKTtcbn1cbiJdfQ==
@@ -197,4 +197,4 @@ export function TimestampTooltip({ date, children, }) {
197
197
  // biome-ignore lint/a11y/noStaticElementInteractions: tooltip trigger
198
198
  _jsxs("span", { ref: triggerRef, onMouseEnter: handleOpen, onMouseLeave: scheduleClose, style: { display: 'inline-flex' }, children: [children, open && triggerRect && (_jsx(TooltipPortal, { triggerRect: triggerRect, onMouseEnter: cancelClose, onMouseLeave: scheduleClose, date: ts }))] }));
199
199
  }
200
- //# sourceMappingURL=timestamp-tooltip.js.map
200
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZXN0YW1wLXRvb2x0aXAuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29tcG9uZW50cy91aS90aW1lc3RhbXAtdG9vbHRpcC50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWSxDQUFDOztBQUdiLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxNQUFNLE9BQU8sQ0FBQztBQUNwRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBV3pDLE1BQU0sVUFBVSxHQUFlO0lBQzdCLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsV0FBVyxFQUFFO0lBQ2pDLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsVUFBVSxFQUFFO0lBQ2pDLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsUUFBUSxFQUFFO0lBQzdCLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFO0lBQzdCLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFO0lBQzdCLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFO0NBQzdCLENBQUM7QUFFRixTQUFTLG9CQUFvQixDQUFDLElBQVk7SUFDeEMsSUFBSSxTQUFTLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMvQixNQUFNLE1BQU0sR0FBYSxFQUFFLENBQUM7SUFFNUIsS0FBSyxNQUFNLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxJQUFJLFVBQVUsRUFBRSxDQUFDO1FBQ3RDLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxHQUFHLEVBQUUsQ0FBQyxDQUFDO1FBQ3pDLElBQUksS0FBSyxHQUFHLENBQUMsSUFBSSxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsRUFB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XG5cbmltcG9ydCB0eXBlIHsgUmVhY3ROb2RlIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgdXNlRWZmZWN0LCB1c2VSZWYsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgY3JlYXRlUG9ydGFsIH0gZnJvbSAncmVhY3QtZG9tJztcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBUaW1lIGZvcm1hdHRpbmcgaGVscGVyc1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmludGVyZmFjZSBUaW1lVW5pdCB7XG4gIHVuaXQ6IHN0cmluZztcbiAgbXM6IG51bWJlcjtcbn1cblxuY29uc3QgVElNRV9VTklUUzogVGltZVVuaXRbXSA9IFtcbiAgeyB1bml0OiAneWVhcicsIG1zOiAzMTUzNjAwMDAwMCB9LFxuICB7IHVuaXQ6ICdtb250aCcsIG1zOiAyNjI4MDAwMDAwIH0sXG4gIHsgdW5pdDogJ2RheScsIG1zOiA4NjQwMDAwMCB9LFxuICB7IHVuaXQ6ICdob3VyJywgbXM6IDM2MDAwMDAgfSxcbiAgeyB1bml0OiAnbWludXRlJywgbXM6IDYwMDAwIH0sXG4gIHsgdW5pdDogJ3NlY29uZCcsIG1zOiAxMDAwIH0sXG5dO1xuXG5mdW5jdGlvbiBmb3JtYXRUaW1lRGlmZmVyZW5jZShkaWZmOiBudW1iZXIpOiBzdHJpbmcge1xuICBsZXQgcmVtYWluaW5nID0gTWF0aC5hYnMoZGlmZik7XG4gIGNvbnN0IHJlc3VsdDogc3RyaW5nW10gPSBbXTtcblxuICBmb3IgKGNvbnN0IHsgdW5pdCwgbXMgfSBvZiBUSU1FX1VOSVRTKSB7XG4gICAgY29uc3QgdmFsdWUgPSBNYXRoLmZsb29yKHJlbWFpbmluZyAvIG1zKTtcbiAgICBpZiAodmFsdWUgPiAwIHx8IHJlc3VsdC5sZW5ndGggPiAwKSB7XG4gICAgICByZXN1bHQucHVzaChgJHt2YWx1ZX0gJHt1bml0fSR7dmFsdWUgIT09IDEgPyAncycgOiAnJ31gKTtcbiAgICAgIHJlbWFpbmluZyAlPSBtcztcbiAgICB9XG4gICAgaWYgKHJlc3VsdC5sZW5ndGggPT09IDMpIGJyZWFrO1xuICB9XG5cbiAgcmV0dXJuIHJlc3VsdC5qb2luKCcsICcpO1xufVxuXG5mdW5jdGlvbiB1c2VUaW1lQWdvKGRhdGU6IG51bWJlcik6IHN0cmluZyB7XG4gIGNvbnN0IFt0aW1lQWdvLCBzZXRUaW1lQWdvXSA9IHVzZVN0YXRlPHN0cmluZz4oJycpO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgdXBkYXRlID0gKCk6IHZvaWQgPT4ge1xuICAgICAgY29uc3QgZGlmZiA9IERhdGUubm93KCkgLSBkYXRlO1xuICAgICAgY29uc3QgZm9ybWF0dGVkID0gZm9ybWF0VGltZURpZmZlcmVuY2UoZGlmZik7XG4gICAgICBzZXRUaW1lQWdvKGZvcm1hdHRlZCA/IGAke2Zvcm1hdHRlZH0gYWdvYCA6ICdKdXN0IG5vdycpO1xuICAgIH07XG4gICAgdXBkYXRlKCk7XG4gICAgY29uc3QgdGltZXIgPSBzZXRJbnRlcnZhbCh1cGRhdGUsIDEwMDApO1xuICAgIHJldHVybiAoKSA9PiBjbGVhckludGVydmFsKHRpbWVyKTtcbiAgfSwgW2RhdGVdKTtcblxuICByZXR1cm4gdGltZUFnbztcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBUaW1lem9uZSByb3dcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5mdW5jdGlvbiBab25lRGF0ZVRpbWVSb3coe1xuICBkYXRlLFxuICB6b25lLFxufToge1xuICB6b25lOiBzdHJpbmc7XG4gIGRhdGU6IG51bWJlcjtcbn0pOiBSZWFjdE5vZGUge1xuICBjb25zdCBkYXRlT2JqID0gbmV3IERhdGUoZGF0ZSk7XG5cbiAgY29uc3QgZm9ybWF0dGVkWm9uZSA9XG4gICAgbmV3IEludGwuRGF0ZVRpbWVGb3JtYXQoJ2VuLVVTJywge1xuICAgICAgdGltZVpvbmU6IHpvbmUsXG4gICAgICB0aW1lWm9uZU5hbWU6ICdzaG9ydCcsXG4gICAgfSlcbiAgICAgIC5mb3JtYXRUb1BhcnRzKGRhdGVPYmopXG4gICAgICAuZmluZCgocGFydCkgPT4gcGFydC50eXBlID09PSAndGltZVpvbmVOYW1lJyk/LnZhbHVlIHx8IHpvbmU7XG5cbiAgY29uc3QgZm9ybWF0dGVkRGF0ZSA9IGRhdGVPYmoudG9Mb2NhbGVTdHJpbmcoJ2VuLVVTJywge1xuICAgIHRpbWVab25lOiB6b25lLFxuICAgIHllYXI6ICdudW1lcmljJyxcbiAgICBtb250aDogJ2xvbmcnLFxuICAgIGRheTogJ251bWVyaWMnLFxuICB9KTtcblxuICBjb25zdCBmb3JtYXR0ZWRUaW1lID0gZGF0ZU9iai50b0xvY2FsZVRpbWVTdHJpbmcoJ2VuLVVTJywge1xuICAgIHRpbWVab25lOiB6b25lLFxuICAgIGhvdXI6ICcyLWRpZ2l0JyxcbiAgICBtaW51dGU6ICcyLWRpZ2l0JyxcbiAgICBzZWNvbmQ6ICcyLWRpZ2l0JyxcbiAgfSk7XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICBzdHlsZT17e1xuICAgICAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICAgICAgICBqdXN0aWZ5Q29udGVudDogJ3NwYWNlLWJldHdlZW4nLFxuICAgICAgICBnYXA6IDEyLFxuICAgICAgfX1cbiAgICA+XG4gICAgICA8ZGl2IHN0eWxlPXt7IGRpc3BsYXk6ICdmbGV4JywgYWxpZ25JdGVtczogJ2NlbnRlcicsIGdhcDogNiB9fT5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICBkaXNwbGF5OiAnaW5saW5lLWZsZXgnLFxuICAgICAgICAgICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gICAgICAgICAgICBqdXN0aWZ5Q29udGVudDogJ2NlbnRlcicsXG4gICAgICAgICAgICBoZWlnaHQ6IDE2LFxuICAgICAgICAgICAgcGFkZGluZzogJzAgNnB4JyxcbiAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogJ3ZhcigtLWRzLWdyYXktMjAwKScsXG4gICAgICAgICAgICBib3JkZXJSYWRpdXM6IDMsXG4gICAgICAgICAgICBmb250U2l6ZTogMTEsXG4gICAgICAgICAgICBmb250RmFtaWx5OiAndmFyKC0tZm9udC1tb25vLCBtb25vc3BhY2UpJyxcbiAgICAgICAgICAgIGZvbnRXZWlnaHQ6IDUwMCxcbiAgICAgICAgICAgIGNvbG9yOiAndmFyKC0tZHMtZ3JheS05MDApJyxcbiAgICAgICAgICAgIHdoaXRlU3BhY2U6ICdub3dyYXAnLFxuICAgICAgICAgIH19XG4gICAgICAgID5cbiAgICAgICAgICB7Zm9ybWF0dGVkWm9uZX1cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgIGZvbnRTaXplOiAxMyxcbiAgICAgICAgICAgIGNvbG9yOiAndmFyKC0tZHMtZ3JheS0xMDAwKScsXG4gICAgICAgICAgICB3aGl0ZVNwYWNlOiAnbm93cmFwJyxcbiAgICAgICAgICB9fVxuICAgICAgICA+XG4gICAgICAgICAge2Zvcm1hdHRlZERhdGV9XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgICAgPHNwYW5cbiAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICBmb250U2l6ZTogMTEsXG4gICAgICAgICAgZm9udEZhbWlseTogJ3ZhcigtLWZvbnQtbW9ubywgbW9ub3NwYWNlKScsXG4gICAgICAgICAgZm9udFZhcmlhbnROdW1lcmljOiAndGFidWxhci1udW1zJyxcbiAgICAgICAgICBjb2xvcjogJ3ZhcigtLWRzLWdyYXktOTAwKScsXG4gICAgICAgICAgd2hpdGVTcGFjZTogJ25vd3JhcCcsXG4gICAgICAgIH19XG4gICAgICA+XG4gICAgICAgIHtmb3JtYXR0ZWRUaW1lfVxuICAgICAgPC9zcGFuPlxuICAgIDwvZGl2PlxuICApO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFRvb2x0aXAgY2FyZCBjb250ZW50XG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuZnVuY3Rpb24gVGltZXN0YW1wVG9vbHRpcENvbnRlbnQoeyBkYXRlIH06IHsgZGF0ZTogbnVtYmVyIH0pOiBSZWFjdE5vZGUge1xuICBjb25zdCBsb2NhbFRpbWV6b25lID0gSW50bC5EYXRlVGltZUZvcm1hdCgpLnJlc29sdmVkT3B0aW9ucygpLnRpbWVab25lO1xuICBjb25zdCB0aW1lQWdvID0gdXNlVGltZUFnbyhkYXRlKTtcblxuICByZXR1cm4gKFxuICAgIDxkaXZcbiAgICAgIHN0eWxlPXt7XG4gICAgICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICAgICAgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsXG4gICAgICAgIGdhcDogMTIsXG4gICAgICAgIG1pbldpZHRoOiAzMDAsXG4gICAgICAgIHBhZGRpbmc6ICcxMnB4IDE0cHgnLFxuICAgICAgfX1cbiAgICA+XG4gICAgICA8c3BhblxuICAgICAgICBzdHlsZT17e1xuICAgICAgICAgIGZvbnRTaXplOiAxMyxcbiAgICAgICAgICBmb250VmFyaWFudE51bWVyaWM6ICd0YWJ1bGFyLW51bXMnLFxuICAgICAgICAgIGNvbG9yOiAndmFyKC0tZHMtZ3JheS05MDApJyxcbiAgICAgICAgfX1cbiAgICAgID5cbiAgICAgICAge3RpbWVBZ299XG4gICAgICA8L3NwYW4+XG4gICAgICA8ZGl2IHN0eWxlPXt7IGRpc3BsYXk6ICdmbGV4JywgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIGdhcDogOCB9fT5cbiAgICAgICAgPFpvbmVEYXRlVGltZVJvdyBkYXRlPXtkYXRlfSB6b25lPVwiVVRDXCIgLz5cbiAgICAgICAgPFpvbmVEYXRlVGltZVJvdyBkYXRlPXtkYXRlfSB6b25lPXtsb2NhbFRpbWV6b25lfSAvPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICk7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gSG92ZXIgdG9vbHRpcCB3cmFwcGVyXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuY29uc3QgVE9PTFRJUF9XSURUSCA9IDMzMDtcbmNvbnN0IFZJRVdQT1JUX1BBRCA9IDg7XG5cbmZ1bmN0aW9uIFRvb2x0aXBQb3J0YWwoe1xuICB0cmlnZ2VyUmVjdCxcbiAgb25Nb3VzZUVudGVyLFxuICBvbk1vdXNlTGVhdmUsXG4gIGRhdGUsXG59OiB7XG4gIHRyaWdnZXJSZWN0OiBET01SZWN0O1xuICBvbk1vdXNlRW50ZXI6ICgpID0+IHZvaWQ7XG4gIG9uTW91c2VMZWF2ZTogKCkgPT4gdm9pZDtcbiAgZGF0ZTogbnVtYmVyO1xufSk6IFJlYWN0Tm9kZSB7XG4gIGNvbnN0IHRvb2x0aXBSZWYgPSB1c2VSZWY8SFRNTERpdkVsZW1lbnQ+KG51bGwpO1xuICBjb25zdCBbc3R5bGUsIHNldFN0eWxlXSA9IHVzZVN0YXRlPFJlYWN0LkNTU1Byb3BlcnRpZXM+KHtcbiAgICBwb3NpdGlvbjogJ2ZpeGVkJyxcbiAgICB6SW5kZXg6IDk5OTksXG4gICAgdmlzaWJpbGl0eTogJ2hpZGRlbicsXG4gIH0pO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgcGxhY2VtZW50ID0gdHJpZ2dlclJlY3QudG9wID4gMjQwID8gJ2Fib3ZlJyA6ICdiZWxvdyc7XG4gICAgY29uc3QgY2VudGVyWCA9IHRyaWdnZXJSZWN0LmxlZnQgKyB0cmlnZ2VyUmVjdC53aWR0aCAvIDI7XG5cbiAgICBjb25zdCBlbCA9IHRvb2x0aXBSZWYuY3VycmVudDtcbiAgICBjb25zdCB3ID0gZWwgPyBlbC5vZmZzZXRXaWR0aCA6IFRPT0xUSVBfV0lEVEg7XG4gICAgY29uc3QgaCA9IGVsID8gZWwub2Zmc2V0SGVpZ2h0IDogMTAwO1xuXG4gICAgbGV0IGxlZnQgPSBjZW50ZXJYIC0gdyAvIDI7XG4gICAgbGVmdCA9IE1hdGgubWF4KFxuICAgICAgVklFV1BPUlRfUEFELFxuICAgICAgTWF0aC5taW4obGVmdCwgd2luZG93LmlubmVyV2lkdGggLSB3IC0gVklFV1BPUlRfUEFEKVxuICAgICk7XG5cbiAgICBsZXQgdG9wOiBudW1iZXI7XG4gICAgaWYgKHBsYWNlbWVudCA9PT0gJ2Fib3ZlJykge1xuICAgICAgdG9wID0gdHJpZ2dlclJlY3QudG9wIC0gaCAtIDY7XG4gICAgICBpZiAodG9wIDwgVklFV1BPUlRfUEFEKSB7XG4gICAgICAgIHRvcCA9IHRyaWdnZXJSZWN0LmJvdHRvbSArIDY7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRvcCA9IHRyaWdnZXJSZWN0LmJvdHRvbSArIDY7XG4gICAgICBpZiAodG9wICsgaCA+IHdpbmRvdy5pbm5lckhlaWdodCAtIFZJRVdQT1JUX1BBRCkge1xuICAgICAgICB0b3AgPSB0cmlnZ2VyUmVjdC50b3AgLSBoIC0gNjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBzZXRTdHlsZSh7XG4gICAgICBwb3NpdGlvbjogJ2ZpeGVkJyxcbiAgICAgIGxlZnQsXG4gICAgICB0b3AsXG4gICAgICB6SW5kZXg6IDk5OTksXG4gICAgICBib3JkZXJSYWRpdXM6IDEwLFxuICAgICAgYm9yZGVyOiAnMXB4IHNvbGlkIHZhcigtLWRzLWdyYXktYWxwaGEtMjAwKScsXG4gICAgICBiYWNrZ3JvdW5kQ29sb3I6ICd2YXIoLS1kcy1iYWNrZ3JvdW5kLTEwMCknLFxuICAgICAgYm94U2hhZG93OiAnMCA0cHggMTJweCByZ2JhKDAsMCwwLDAuMDgpLCAwIDFweCAzcHggcmdiYSgwLDAsMCwwLjA2KScsXG4gICAgICB2aXNpYmlsaXR5OiAndmlzaWJsZScsXG4gICAgfSk7XG4gIH0sIFt0cmlnZ2VyUmVjdF0pO1xuXG4gIHJldHVybiBjcmVhdGVQb3J0YWwoXG4gICAgLy8gYmlvbWUtaWdub3JlIGxpbnQvYTExeS9ub1N0YXRpY0VsZW1lbnRJbnRlcmFjdGlvbnM6IHRvb2x0aXAgaG92ZXIgem9uZVxuICAgIDxkaXZcbiAgICAgIHJlZj17dG9vbHRpcFJlZn1cbiAgICAgIG9uTW91c2VFbnRlcj17b25Nb3VzZUVudGVyfVxuICAgICAgb25Nb3VzZUxlYXZlPXtvbk1vdXNlTGVhdmV9XG4gICAgICBzdHlsZT17c3R5bGV9XG4gICAgPlxuICAgICAgPFRpbWVzdGFtcFRvb2x0aXBDb250ZW50IGRhdGU9e2RhdGV9IC8+XG4gICAgPC9kaXY+LFxuICAgIGRvY3VtZW50LmJvZHlcbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIFRpbWVzdGFtcFRvb2x0aXAoe1xuICBkYXRlLFxuICBjaGlsZHJlbixcbn06IHtcbiAgZGF0ZTogbnVtYmVyIHwgRGF0ZSB8IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQ7XG4gIGNoaWxkcmVuOiBSZWFjdE5vZGU7XG59KTogUmVhY3ROb2RlIHtcbiAgY29uc3QgW29wZW4sIHNldE9wZW5dID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBbdHJpZ2dlclJlY3QsIHNldFRyaWdnZXJSZWN0XSA9IHVzZVN0YXRlPERPTVJlY3QgfCBudWxsPihudWxsKTtcbiAgY29uc3QgdHJpZ2dlclJlZiA9IHVzZVJlZjxIVE1MU3BhbkVsZW1lbnQ+KG51bGwpO1xuICBjb25zdCBjbG9zZVRpbWVyID0gdXNlUmVmPFJldHVyblR5cGU8dHlwZW9mIHNldFRpbWVvdXQ+IHwgbnVsbD4obnVsbCk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgaWYgKGNsb3NlVGltZXIuY3VycmVudCkgY2xlYXJUaW1lb3V0KGNsb3NlVGltZXIuY3VycmVudCk7XG4gICAgfTtcbiAgfSwgW10pO1xuXG4gIGNvbnN0IHRzID1cbiAgICBkYXRlID09IG51bGxcbiAgICAgID8gbnVsbFxuICAgICAgOiB0eXBlb2YgZGF0ZSA9PT0gJ251bWJlcidcbiAgICAgICAgPyBkYXRlXG4gICAgICAgIDogbmV3IERhdGUoZGF0ZSkuZ2V0VGltZSgpO1xuXG4gIGlmICh0cyA9PSBudWxsIHx8IE51bWJlci5pc05hTih0cykpIHJldHVybiA8PntjaGlsZHJlbn08Lz47XG5cbiAgY29uc3QgY2FuY2VsQ2xvc2UgPSAoKSA9PiB7XG4gICAgaWYgKGNsb3NlVGltZXIuY3VycmVudCkge1xuICAgICAgY2xlYXJUaW1lb3V0KGNsb3NlVGltZXIuY3VycmVudCk7XG4gICAgICBjbG9zZVRpbWVyLmN1cnJlbnQgPSBudWxsO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBzY2hlZHVsZUNsb3NlID0gKCkgPT4ge1xuICAgIGNhbmNlbENsb3NlKCk7XG4gICAgY2xvc2VUaW1lci5jdXJyZW50ID0gc2V0VGltZW91dCgoKSA9PiBzZXRPcGVuKGZhbHNlKSwgMTIwKTtcbiAgfTtcblxuICBjb25zdCBoYW5kbGVPcGVuID0gKCkgPT4ge1xuICAgIGNhbmNlbENsb3NlKCk7XG4gICAgaWYgKHRyaWdnZXJSZWYuY3VycmVudCkge1xuICAgICAgc2V0VHJpZ2dlclJlY3QodHJpZ2dlclJlZi5jdXJyZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpKTtcbiAgICB9XG4gICAgc2V0T3Blbih0cnVlKTtcbiAgfTtcblxuICByZXR1cm4gKFxuICAgIC8vIGJpb21lLWlnbm9yZSBsaW50L2ExMXkvbm9TdGF0aWNFbGVtZW50SW50ZXJhY3Rpb25zOiB0b29sdGlwIHRyaWdnZXJcbiAgICA8c3BhblxuICAgICAgcmVmPXt0cmlnZ2VyUmVmfVxuICAgICAgb25Nb3VzZUVudGVyPXtoYW5kbGVPcGVufVxuICAgICAgb25Nb3VzZUxlYXZlPXtzY2hlZHVsZUNsb3NlfVxuICAgICAgc3R5bGU9e3sgZGlzcGxheTogJ2lubGluZS1mbGV4JyB9fVxuICAgID5cbiAgICAgIHtjaGlsZHJlbn1cbiAgICAgIHtvcGVuICYmIHRyaWdnZXJSZWN0ICYmIChcbiAgICAgICAgPFRvb2x0aXBQb3J0YWxcbiAgICAgICAgICB0cmlnZ2VyUmVjdD17dHJpZ2dlclJlY3R9XG4gICAgICAgICAgb25Nb3VzZUVudGVyPXtjYW5jZWxDbG9zZX1cbiAgICAgICAgICBvbk1vdXNlTGVhdmU9e3NjaGVkdWxlQ2xvc2V9XG4gICAgICAgICAgZGF0ZT17dHN9XG4gICAgICAgIC8+XG4gICAgICApfVxuICAgIDwvc3Bhbj5cbiAgKTtcbn1cbiJdfQ==
@@ -2,7 +2,7 @@ import type { Event, Hook, Step, WorkflowRun } from '@workflow/world';
2
2
  import { type SpanSelectionInfo } from './sidebar/entity-detail-panel';
3
3
  /** Re-export SpanSelectionInfo for consumers */
4
4
  export type { SpanSelectionInfo };
5
- export declare const WorkflowTraceViewer: ({ run, events, isLoading, error, spanDetailData, spanDetailLoading, spanDetailError, onWakeUpSleep, onResolveHook, onCancelRun, onStreamClick, onSpanSelect, onLoadEventData, onLoadMoreSpans, hasMoreSpans, isLoadingMoreSpans, encryptionKey, onDecrypt, isDecrypting, }: {
5
+ export declare const WorkflowTraceViewer: ({ run, events, isLoading, error, spanDetailData, spanDetailLoading, spanDetailError, onWakeUpSleep, onResolveHook, onCancelRun, onStreamClick, onRunClick, onSpanSelect, onLoadEventData, onLoadMoreSpans, hasMoreSpans, isLoadingMoreSpans, encryptionKey, onDecrypt, isDecrypting, }: {
6
6
  run: WorkflowRun;
7
7
  events: Event[];
8
8
  isLoading?: boolean;
@@ -18,6 +18,8 @@ export declare const WorkflowTraceViewer: ({ run, events, isLoading, error, span
18
18
  onCancelRun?: (runId: string) => Promise<void>;
19
19
  /** Callback when a stream reference is clicked in the detail panel */
20
20
  onStreamClick?: (streamId: string) => void;
21
+ /** Callback when a run reference is clicked in the detail panel */
22
+ onRunClick?: (runId: string) => void;
21
23
  /** Callback when a span is selected. */
22
24
  onSpanSelect?: (info: SpanSelectionInfo) => void;
23
25
  /** Callback to load event data for a specific event (lazy loading in sidebar) */
@@ -1 +1 @@
1
- {"version":3,"file":"workflow-trace-view.d.ts","sourceRoot":"","sources":["../../src/components/workflow-trace-view.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAiBtE,OAAO,EAGL,KAAK,iBAAiB,EACvB,MAAM,+BAA+B,CAAC;AA4jBvC,gDAAgD;AAChD,YAAY,EAAE,iBAAiB,EAAE,CAAC;AAgKlC,eAAO,MAAM,mBAAmB,GAAI,4QAoBjC;IACD,GAAG,EAAE,WAAW,CAAC;IACjB,MAAM,EAAE,KAAK,EAAE,CAAC;IAChB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,KAAK,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC;IACrB,cAAc,CAAC,EAAE,WAAW,GAAG,IAAI,GAAG,IAAI,GAAG,KAAK,GAAG,IAAI,CAAC;IAC1D,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,eAAe,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC;IAC/B,aAAa,CAAC,EAAE,CACd,KAAK,EAAE,MAAM,EACb,aAAa,EAAE,MAAM,KAClB,OAAO,CAAC;QAAE,YAAY,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACvC,aAAa,CAAC,EAAE,CACd,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,OAAO,EAChB,IAAI,CAAC,EAAE,IAAI,KACR,OAAO,CAAC,IAAI,CAAC,CAAC;IACnB,yCAAyC;IACzC,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/C,sEAAsE;IACtE,aAAa,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3C,wCAAwC;IACxC,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,iBAAiB,KAAK,IAAI,CAAC;IACjD,iFAAiF;IACjF,eAAe,CAAC,EAAE,CAChB,aAAa,EAAE,MAAM,EACrB,OAAO,EAAE,MAAM,KACZ,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC;IAC7B,gEAAgE;IAChE,eAAe,CAAC,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7C,sDAAsD;IACtD,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,mEAAmE;IACnE,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,sFAAsF;IACtF,aAAa,CAAC,EAAE,UAAU,CAAC;IAC3B,4DAA4D;IAC5D,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;IACvB,4DAA4D;IAC5D,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB,4CAuVA,CAAC"}
1
+ {"version":3,"file":"workflow-trace-view.d.ts","sourceRoot":"","sources":["../../src/components/workflow-trace-view.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAkBtE,OAAO,EAGL,KAAK,iBAAiB,EACvB,MAAM,+BAA+B,CAAC;AA2jBvC,gDAAgD;AAChD,YAAY,EAAE,iBAAiB,EAAE,CAAC;AAgKlC,eAAO,MAAM,mBAAmB,GAAI,wRAqBjC;IACD,GAAG,EAAE,WAAW,CAAC;IACjB,MAAM,EAAE,KAAK,EAAE,CAAC;IAChB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,KAAK,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC;IACrB,cAAc,CAAC,EAAE,WAAW,GAAG,IAAI,GAAG,IAAI,GAAG,KAAK,GAAG,IAAI,CAAC;IAC1D,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,eAAe,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC;IAC/B,aAAa,CAAC,EAAE,CACd,KAAK,EAAE,MAAM,EACb,aAAa,EAAE,MAAM,KAClB,OAAO,CAAC;QAAE,YAAY,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACvC,aAAa,CAAC,EAAE,CACd,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,OAAO,EAChB,IAAI,CAAC,EAAE,IAAI,KACR,OAAO,CAAC,IAAI,CAAC,CAAC;IACnB,yCAAyC;IACzC,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/C,sEAAsE;IACtE,aAAa,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3C,mEAAmE;IACnE,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC,wCAAwC;IACxC,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,iBAAiB,KAAK,IAAI,CAAC;IACjD,iFAAiF;IACjF,eAAe,CAAC,EAAE,CAChB,aAAa,EAAE,MAAM,EACrB,OAAO,EAAE,MAAM,KACZ,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC;IAC7B,gEAAgE;IAChE,eAAe,CAAC,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7C,sDAAsD;IACtD,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,mEAAmE;IACnE,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,sFAAsF;IACtF,aAAa,CAAC,EAAE,UAAU,CAAC;IAC3B,4DAA4D;IAC5D,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;IACvB,4DAA4D;IAC5D,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB,4CA8VA,CAAC"}
@@ -5,6 +5,7 @@ import { ChevronDown, ChevronUp, Clock, Copy, Info, Send, Type, X, XCircle, } fr
5
5
  import { useCallback, useEffect, useMemo, useRef, useState } from 'react';
6
6
  import { createPortal } from 'react-dom';
7
7
  import { useToast } from '../lib/toast';
8
+ import { buildTrace } from '../lib/trace-builder';
8
9
  import { ErrorBoundary } from './error-boundary';
9
10
  import { EntityDetailPanel, } from './sidebar/entity-detail-panel';
10
11
  import { ResolveHookModal } from './sidebar/resolve-hook-modal';
@@ -12,7 +13,6 @@ import { TraceViewerContextProvider, TraceViewerTimeline, useTraceViewer, } from
12
13
  import { Skeleton } from './ui/skeleton';
13
14
  import { Spinner } from './ui/spinner';
14
15
  import { getCustomSpanClassName, getCustomSpanEventClassName, } from './workflow-traces/trace-colors';
15
- import { buildTrace } from '../lib/trace-builder';
16
16
  /**
17
17
  * While a run is live, continuously grow root.duration and rescale so the
18
18
  * trace always fits within the viewport. Individual span widths are grown
@@ -502,7 +502,7 @@ function TraceViewerFooter({ hasMore, isLive, isInitialLoading, }) {
502
502
  // ---------------------------------------------------------------------------
503
503
  // Main component
504
504
  // ---------------------------------------------------------------------------
505
- export const WorkflowTraceViewer = ({ run, events, isLoading, error, spanDetailData, spanDetailLoading, spanDetailError, onWakeUpSleep, onResolveHook, onCancelRun, onStreamClick, onSpanSelect, onLoadEventData, onLoadMoreSpans, hasMoreSpans = false, isLoadingMoreSpans = false, encryptionKey, onDecrypt, isDecrypting = false, }) => {
505
+ export const WorkflowTraceViewer = ({ run, events, isLoading, error, spanDetailData, spanDetailLoading, spanDetailError, onWakeUpSleep, onResolveHook, onCancelRun, onStreamClick, onRunClick, onSpanSelect, onLoadEventData, onLoadMoreSpans, hasMoreSpans = false, isLoadingMoreSpans = false, encryptionKey, onDecrypt, isDecrypting = false, }) => {
506
506
  const toast = useToast();
507
507
  const [selectedSpan, setSelectedSpan] = useState(null);
508
508
  const [panelWidth, setPanelWidth] = useState(DEFAULT_PANEL_WIDTH);
@@ -566,6 +566,11 @@ export const WorkflowTraceViewer = ({ run, events, isLoading, error, spanDetailD
566
566
  };
567
567
  });
568
568
  }, [events, selectedSpan?.spanId]);
569
+ // Reset selected span when navigating to a different run
570
+ useEffect(() => {
571
+ setSelectedSpan(null);
572
+ setDeselectTrigger((n) => n + 1);
573
+ }, [run?.runId]);
569
574
  const handleClose = useCallback(() => {
570
575
  setSelectedSpan(null);
571
576
  setDeselectTrigger((n) => n + 1);
@@ -615,7 +620,7 @@ export const WorkflowTraceViewer = ({ run, events, isLoading, error, spanDetailD
615
620
  if (!trace) {
616
621
  return (_jsxs("div", { className: "relative w-full h-full", children: [_jsx("div", { className: "border-b border-gray-alpha-400 w-full" }), _jsx(Skeleton, { className: "w-full ml-2 mt-1 mb-1 h-[56px]" }), _jsxs("div", { className: "p-2 relative w-full", children: [_jsx(Skeleton, { className: "w-full mt-6 h-[20px]" }), _jsx(Skeleton, { className: "w-[10%] mt-2 ml-6 h-[20px]" }), _jsx(Skeleton, { className: "w-[10%] mt-2 ml-12 h-[20px]" }), _jsx(Skeleton, { className: "w-[20%] mt-2 ml-16 h-[20px]" })] })] }));
617
622
  }
618
- return (_jsxs("div", { className: "relative w-full h-full flex", children: [_jsx("div", { className: "flex-1 min-w-0 relative", children: _jsxs(TraceViewerContextProvider, { customSpanClassNameFunc: getCustomSpanClassName, customSpanEventClassNameFunc: getCustomSpanEventClassName, children: [_jsx(SelectionBridge, { onSelectionChange: handleSelectionChange }), _jsx(DeselectBridge, { triggerDeselect: deselectTrigger }), _jsx(SelectBridge, { selectRequest: selectRequest }), _jsx(TraceViewerWithContextMenu, { trace: trace, run: run, isLive: isLive, onWakeUpSleep: onWakeUpSleep, onCancelRun: onCancelRun, onResolveHook: onResolveHook, onLoadMoreSpans: onLoadMoreSpans, hasMoreSpans: hasMoreSpans, isLoadingMoreSpans: isLoadingMoreSpans, children: _jsx(TraceViewerTimeline, { eagerRender: true, height: "100%", isLive: isLive, trace: trace, knownDurationMs: traceWithMeta?.knownDurationMs, hasMoreData: hasMoreSpans || Boolean(isLoading), footer: _jsx(TraceViewerFooter, { hasMore: hasMoreSpans, isLive: isLive, isInitialLoading: Boolean(isLoading) }) }) })] }) }), selectedSpan && (_jsxs("div", { className: "relative border-l flex-shrink-0 flex flex-col", style: {
623
+ return (_jsxs("div", { className: "relative w-full h-full flex flex-row", children: [_jsx("div", { className: "flex-1 min-w-0 relative", children: _jsxs(TraceViewerContextProvider, { customSpanClassNameFunc: getCustomSpanClassName, customSpanEventClassNameFunc: getCustomSpanEventClassName, children: [_jsx(SelectionBridge, { onSelectionChange: handleSelectionChange }), _jsx(DeselectBridge, { triggerDeselect: deselectTrigger }), _jsx(SelectBridge, { selectRequest: selectRequest }), _jsx(TraceViewerWithContextMenu, { trace: trace, run: run, isLive: isLive, onWakeUpSleep: onWakeUpSleep, onCancelRun: onCancelRun, onResolveHook: onResolveHook, onLoadMoreSpans: onLoadMoreSpans, hasMoreSpans: hasMoreSpans, isLoadingMoreSpans: isLoadingMoreSpans, children: _jsx(TraceViewerTimeline, { eagerRender: true, height: "100%", isLive: isLive, trace: trace, knownDurationMs: traceWithMeta?.knownDurationMs, hasMoreData: hasMoreSpans || Boolean(isLoading), footer: _jsx(TraceViewerFooter, { hasMore: hasMoreSpans, isLive: isLive, isInitialLoading: Boolean(isLoading) }) }) })] }) }), selectedSpan && (_jsxs("div", { className: "relative border-l flex-shrink-0 flex flex-col", style: {
619
624
  width: panelWidth,
620
625
  borderColor: 'var(--ds-gray-200)',
621
626
  backgroundColor: 'var(--ds-background-100)',
@@ -685,6 +690,6 @@ export const WorkflowTraceViewer = ({ run, events, isLoading, error, spanDetailD
685
690
  e.currentTarget.style.background = 'var(--ds-gray-alpha-100)';
686
691
  }, onMouseLeave: (e) => {
687
692
  e.currentTarget.style.background = 'transparent';
688
- }, children: _jsx(X, { size: 16 }) }) })] }), _jsx("div", { className: "flex-1 overflow-y-auto", children: _jsx(ErrorBoundary, { title: "Failed to load entity details", children: _jsx(EntityDetailPanel, { run: run, onStreamClick: onStreamClick, spanDetailData: spanDetailData ?? null, spanDetailError: spanDetailError, spanDetailLoading: spanDetailLoading, onSpanSelect: handleSpanSelect, onWakeUpSleep: onWakeUpSleep, onLoadEventData: onLoadEventData, onResolveHook: onResolveHook, encryptionKey: encryptionKey, onDecrypt: onDecrypt, isDecrypting: isDecrypting, selectedSpan: selectedSpan }) }) })] }))] }));
693
+ }, children: _jsx(X, { size: 16 }) }) })] }), _jsx("div", { className: "flex-1 overflow-y-auto", children: _jsx(ErrorBoundary, { title: "Failed to load entity details", children: _jsx(EntityDetailPanel, { run: run, onStreamClick: onStreamClick, onRunClick: onRunClick, spanDetailData: spanDetailData ?? null, spanDetailError: spanDetailError, spanDetailLoading: spanDetailLoading, onSpanSelect: handleSpanSelect, onWakeUpSleep: onWakeUpSleep, onLoadEventData: onLoadEventData, onResolveHook: onResolveHook, encryptionKey: encryptionKey, onDecrypt: onDecrypt, isDecrypting: isDecrypting, selectedSpan: selectedSpan }) }) })] }))] }));
689
694
  };
690
- //# sourceMappingURL=workflow-trace-view.js.map
695
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya2Zsb3ctdHJhY2Utdmlldy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb21wb25lbnRzL3dvcmtmbG93LXRyYWNlLXZpZXcudHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVksQ0FBQzs7QUFFYixPQUFPLEVBQUUsYUFBYSxFQUFFLGlCQUFpQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFFOUUsT0FBTyxFQUNMLFdBQVcsRUFDWCxTQUFTLEVBQ1QsS0FBSyxFQUNMLElBQUksRUFDSixJQUFJLEVBQ0osSUFBSSxFQUNKLElBQUksRUFDSixDQUFDLEVBQ0QsT0FBTyxHQUNSLE1BQU0sY0FBYyxDQUFDO0FBRXRCLE9BQU8sRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLE1BQU0sT0FBTyxDQUFDO0FBQzFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDekMsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUN4QyxPQUFPLEVBQUUsVUFBVSxFQUFzQixNQUFNLHNCQUFzQixDQUFDO0FBQ3RFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNqRCxPQUFPLEVBQ0wsaUJBQWlCLEdBR2xCLE1BQU0sK0JBQStCLENBQUM7QUFDdkMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDaEUsT0FBTyxFQUNMLDBCQUEwQixFQUMxQixtQkFBbUIsRUFDbkIsY0FBYyxHQUNmLE1BQU0sZ0JBQWdCLENBQUM7QUFFeEIsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ3ZDLE9BQU8sRUFDTCxzQkFBc0IsRUFDdEIsMkJBQTJCLEdBQzVCLE1BQU0sZ0NBQWdDLENBQUM7QUFFeEM7Ozs7R0FJRztB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VUFBVSxFQUFFLGtCQUFrQjtxQ0FDL0IsRUFDRCxZQUFZLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRTt3Q0FDbEIsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsVUFBVSxHQUFHLDBCQUEwQixDQUFDO29DQUNoRSxDQUFDLEVBQ0QsWUFBWSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUU7d0NBQ2xCLENBQUMsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLFVBQVUsR0FBRyxhQUFhLENBQUM7b0NBQ25ELENBQUMsWUFFRCxLQUFDLENBQUMsSUFBQyxJQUFJLEVBQUUsRUFBRSxHQUFJLEdBQ1IsR0FDTCxJQUNGLEVBRU4sY0FBSyxTQUFTLEVBQUMsd0JBQXdCLFlBQ3JDLEtBQUMsYUFBYSxJQUFDLEtBQUssRUFBQywrQkFBK0IsWUFDbEQsS0FBQyxpQkFBaUIsSUFDaEIsR0FBRyxFQUFFLEdBQUcsRUFDUixhQUFhLEVBQUUsYUFBYSxFQUM1QixVQUFVLEVBQUUsVUFBVSxFQUN0QixjQUFjLEVBQUUsY0FBYyxJQUFJLElBQUksRUFDdEMsZUFBZSxFQUFFLGVBQWUsRUFDaEMsaUJBQWlCLEVBQUUsaUJBQWlCLEVBQ3BDLFlBQVksRUFBRSxnQkFBZ0IsRUFDOUIsYUFBYSxFQUFFLGFBQWEsRUFDNUIsZUFBZSxFQUFFLGVBQWUsRUFDaEMsYUFBYSxFQUFFLGFBQWEsRUFDNUIsYUFBYSxFQUFFLGFBQWEsRUFDNUIsU0FBUyxFQUFFLFNBQVMsRUFDcEIsWUFBWSxFQUFFLFlBQVksRUFDMUIsWUFBWSxFQUFFLFlBQVksR0FDMUIsR0FDWSxHQUNaLElBQ0YsQ0FDUCxJQUNHLENBQ1AsQ0FBQztBQUNKLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIid1c2UgY2xpZW50JztcblxuaW1wb3J0IHsgcGFyc2VTdGVwTmFtZSwgcGFyc2VXb3JrZmxvd05hbWUgfSBmcm9tICdAd29ya2Zsb3cvdXRpbHMvcGFyc2UtbmFtZSc7XG5pbXBvcnQgdHlwZSB7IEV2ZW50LCBIb29rLCBTdGVwLCBXb3JrZmxvd1J1biB9IGZyb20gJ0B3b3JrZmxvdy93b3JsZCc7XG5pbXBvcnQge1xuICBDaGV2cm9uRG93bixcbiAgQ2hldnJvblVwLFxuICBDbG9jayxcbiAgQ29weSxcbiAgSW5mbyxcbiAgU2VuZCxcbiAgVHlwZSxcbiAgWCxcbiAgWENpcmNsZSxcbn0gZnJvbSAnbHVjaWRlLXJlYWN0JztcbmltcG9ydCB0eXBlIHsgTW91c2VFdmVudCBhcyBSZWFjdE1vdXNlRXZlbnQsIFJlYWN0Tm9kZSB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHVzZUNhbGxiYWNrLCB1c2VFZmZlY3QsIHVzZU1lbW8sIHVzZVJlZiwgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBjcmVhdGVQb3J0YWwgfSBmcm9tICdyZWFjdC1kb20nO1xuaW1wb3J0IHsgdXNlVG9hc3QgfSBmcm9tICcuLi9saWIvdG9hc3QnO1xuaW1wb3J0IHsgYnVpbGRUcmFjZSwgdHlwZSBUcmFjZVdpdGhNZXRhIH0gZnJvbSAnLi4vbGliL3RyYWNlLWJ1aWxkZXInO1xuaW1wb3J0IHsgRXJyb3JCb3VuZGFyeSB9IGZyb20gJy4vZXJyb3ItYm91bmRhcnknO1xuaW1wb3J0IHtcbiAgRW50aXR5RGV0YWlsUGFuZWwsXG4gIHR5cGUgU2VsZWN0ZWRTcGFuSW5mbyxcbiAgdHlwZSBTcGFuU2VsZWN0aW9uSW5mbyxcbn0gZnJvbSAnLi9zaWRlYmFyL2VudGl0eS1kZXRhaWwtcGFuZWwnO1xuaW1wb3J0IHsgUmVzb2x2ZUhvb2tNb2RhbCB9IGZyb20gJy4vc2lkZWJhci9yZXNvbHZlLWhvb2stbW9kYWwnO1xuaW1wb3J0IHtcbiAgVHJhY2VWaWV3ZXJDb250ZXh0UHJvdmlkZXIsXG4gIFRyYWNlVmlld2VyVGltZWxpbmUsXG4gIHVzZVRyYWNlVmlld2VyLFxufSBmcm9tICcuL3RyYWNlLXZpZXdlcic7XG5pbXBvcnQgdHlwZSB7IFNwYW4gfSBmcm9tICcuL3RyYWNlLXZpZXdlci90eXBlcyc7XG5pbXBvcnQgeyBTa2VsZXRvbiB9IGZyb20gJy4vdWkvc2tlbGV0b24nO1xuaW1wb3J0IHsgU3Bpbm5lciB9IGZyb20gJy4vdWkvc3Bpbm5lcic7XG5pbXBvcnQge1xuICBnZXRDdXN0b21TcGFuQ2xhc3NOYW1lLFxuICBnZXRDdXN0b21TcGFuRXZlbnRDbGFzc05hbWUsXG59IGZyb20gJy4vd29ya2Zsb3ctdHJhY2VzL3RyYWNlLWNvbG9ycyc7XG5cbi8qKlxuICogV2hpbGUgYSBydW4gaXMgbGl2ZSwgY29udGludW91c2x5IGdyb3cgcm9vdC5kdXJhdGlvbiBhbmQgcmVzY2FsZSBzbyB0aGVcbiAqIHRyYWNlIGFsd2F5cyBmaXRzIHdpdGhpbiB0aGUgdmlld3BvcnQuIEluZGl2aWR1YWwgc3BhbiB3aWR0aHMgYXJlIGdyb3duXG4gKiBieSBlYWNoIFNwYW5Db21wb25lbnQncyBvd24gdXNlRWZmZWN0IChzZWUgbm9kZS50c3gpLlxuICovXG5mdW5jdGlvbiB1c2VMaXZlVGljayhpc0xpdmU6IGJvb2xlYW4pOiB2b2lkIHtcbiAgY29uc3QgeyBzdGF0ZSwgZGlzcGF0Y2ggfSA9IHVzZVRyYWNlVmlld2VyKCk7XG4gIGNvbnN0IHN0YXRlUmVmID0gdXNlUmVmKHN0YXRlKTtcbiAgc3RhdGVSZWYuY3VycmVudCA9IHN0YXRlO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFpc0xpdmUpIHJldHVybjtcblxuICAgIC8vIEdyb3cgcm9vdC5kdXJhdGlvbiBvbiBldmVyeSBmcmFtZSBzbyBzcGFuIHJBRnMgc2VlIHRoZSBsYXRlc3QgdGltZVxuICAgIGxldCByYWZJZCA9IDA7XG4gICAgY29uc3QgdGljayA9ICgpOiB2b2lkID0+IHtcbiAgICAgIGNvbnN0IHsgcm9vdCB9ID0gc3RhdGVSZWYuY3VycmVudDtcbiAgICAgIGlmIChyb290LnN0YXJ0VGltZSkge1xuICAgICAgICBjb25zdCBub3dNcyA9IERhdGUubm93KCk7XG4gICAgICAgIGlmIChub3dNcyA+IHJvb3QuZW5kVGltZSkge1xuICAgICAgICAgIHJvb3QuZW5kVGltZSA9IG5vd01zO1xuICAgICAgICAgIHJvb3QuZHVyYXRpb24gPSByb290LmVuZFRpbWUgLSByb290LnN0YXJ0VGltZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmFmSWQgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGljayk7XG4gICAgfTtcbiAgICByYWZJZCA9IHJlcXVlc3RBbmltYXRpb25GcmFtZSh0aWNrKTtcblxuICAgIC8vIFJlLXNjYWxlIHNtb290aGx5IHNvIHRoZSB0cmFjZSBmaXRzIHRoZSB2aWV3cG9ydCBhcyBpdCBncm93cy5cbiAgICAvLyBXZSBkaXNwYXRjaCBkZXRlY3RCYXNlU2NhbGUgb25seSB3aGVuIHRoZSBjb21wdXRlZCBiYXNlU2NhbGUgaGFzXG4gICAgLy8gY2hhbmdlZCBlbm91Z2ggdG8gbWF0dGVyIHZpc3VhbGx5ICg+MC4xJSBzaGlmdCksIGF2b2lkaW5nXG4gICAgLy8gdW5uZWNlc3NhcnkgUmVhY3QgcmUtcmVuZGVycyB3aGlsZSBrZWVwaW5nIHRoaW5ncyBzbW9vdGguXG4gICAgbGV0IHNjYWxlUmFmSWQgPSAwO1xuICAgIGxldCBsYXN0QmFzZVNjYWxlID0gMDtcbiAgICBjb25zdCBzY2FsZVRpY2sgPSAoKTogdm9pZCA9PiB7XG4gICAgICBjb25zdCBzID0gc3RhdGVSZWYuY3VycmVudDtcbiAgICAgIGlmIChzLnJvb3QuZHVyYXRpb24gPiAwKSB7XG4gICAgICAgIGNvbnN0IG5ld0Jhc2VTY2FsZSA9IChzLndpZHRoIC0gcy5zY3JvbGxiYXJXaWR0aCkgLyBzLnJvb3QuZHVyYXRpb247XG4gICAgICAgIGNvbnN0IGRlbHRhID0gTWF0aC5hYnMobmV3QmFzZVNjYWxlIC0gbGFzdEJhc2VTY2FsZSk7XG4gICAgICAgIGlmIChkZWx0YSA+IGxhc3RCYXNlU2NhbGUgKiAwLjAwMSB8fCBsYXN0QmFzZVNjYWxlID09PSAwKSB7XG4gICAgICAgICAgbGFzdEJhc2VTY2FsZSA9IG5ld0Jhc2VTY2FsZTtcbiAgICAgICAgICBkaXNwYXRjaCh7IHR5cGU6ICdkZXRlY3RCYXNlU2NhbGUnIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBzY2FsZVJhZklkID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHNjYWxlVGljayk7XG4gICAgfTtcbiAgICBzY2FsZVJhZklkID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHNjYWxlVGljayk7XG5cbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgY2FuY2VsQW5pbWF0aW9uRnJhbWUocmFmSWQpO1xuICAgICAgY2FuY2VsQW5pbWF0aW9uRnJhbWUoc2NhbGVSYWZJZCk7XG4gICAgfTtcbiAgfSwgW2lzTGl2ZSwgZGlzcGF0Y2hdKTtcbn1cblxuY29uc3QgREVGQVVMVF9QQU5FTF9XSURUSCA9IDQ1MDtcbmNvbnN0IE1JTl9QQU5FTF9XSURUSCA9IDI0MDtcblxuLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4vLyBSaWdodC1jbGljayBjb250ZXh0IG1lbnUgZm9yIHNwYW5zXG4vLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxudHlwZSBSZXNvdXJjZVR5cGUgPSAnc2xlZXAnIHwgJ3N0ZXAnIHwgJ2hvb2snIHwgJ3J1bicgfCAndW5rbm93bic7XG5cbmludGVyZmFjZSBDb250ZXh0TWVudVN0YXRlIHtcbiAgeDogbnVtYmVyO1xuICB5OiBudW1iZXI7XG4gIHNwYW5JZDogc3RyaW5nO1xuICBzcGFuTmFtZTogc3RyaW5nO1xuICByZXNvdXJjZVR5cGU6IFJlc291cmNlVHlwZTtcbiAgLyoqIFdoZXRoZXIgdGhlIHNwYW4gcmVwcmVzZW50cyBhbiBhY3RpdmUvcGVuZGluZyByZXNvdXJjZSAobm90IHlldCBjb21wbGV0ZWQpICovXG4gIGlzQWN0aXZlOiBib29sZWFuO1xufVxuXG5pbnRlcmZhY2UgQ29udGV4dE1lbnVJdGVtIHtcbiAgbGFiZWw6IHN0cmluZztcbiAgaWNvbj86IFJlYWN0Tm9kZTtcbiAgYWN0aW9uOiAoKSA9PiB2b2lkO1xuICBkZXN0cnVjdGl2ZT86IGJvb2xlYW47XG4gIGRpc2FibGVkPzogYm9vbGVhbjtcbn1cblxuZnVuY3Rpb24gU3BhbkNvbnRleHRNZW51KHtcbiAgbWVudSxcbiAgaXRlbXMsXG4gIG9uQ2xvc2UsXG59OiB7XG4gIG1lbnU6IENvbnRleHRNZW51U3RhdGU7XG4gIGl0ZW1zOiBDb250ZXh0TWVudUl0ZW1bXTtcbiAgb25DbG9zZTogKCkgPT4gdm9pZDtcbn0pOiBSZWFjdE5vZGUge1xuICBjb25zdCBtZW51UmVmID0gdXNlUmVmPEhUTUxEaXZFbGVtZW50PihudWxsKTtcblxuICAvLyBDbG9zZSBvbiBvdXRzaWRlIGNsaWNrXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgaGFuZGxlQ2xpY2sgPSAoZTogTW91c2VFdmVudCk6IHZvaWQgPT4ge1xuICAgICAgaWYgKG1lbnVSZWYuY3VycmVudCAmJiAhbWVudVJlZi5jdXJyZW50LmNvbnRhaW5zKGUudGFyZ2V0IGFzIE5vZGUpKSB7XG4gICAgICAgIG9uQ2xvc2UoKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGhhbmRsZUtleURvd24gPSAoZTogS2V5Ym9hcmRFdmVudCk6IHZvaWQgPT4ge1xuICAgICAgaWYgKGUua2V5ID09PSAnRXNjYXBlJykge1xuICAgICAgICBvbkNsb3NlKCk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBoYW5kbGVTY3JvbGwgPSAoKTogdm9pZCA9PiB7XG4gICAgICBvbkNsb3NlKCk7XG4gICAgfTtcbiAgICAvLyBVc2UgYSB0aW1lb3V0IHNvIHdlIGRvbid0IGNsb3NlIGltbWVkaWF0ZWx5IGZyb20gdGhlIHNhbWUgZXZlbnRcbiAgICBjb25zdCB0aW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgaGFuZGxlQ2xpY2spO1xuICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCBoYW5kbGVLZXlEb3duKTtcbiAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdzY3JvbGwnLCBoYW5kbGVTY3JvbGwsIHRydWUpO1xuICAgIH0sIDApO1xuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgaGFuZGxlQ2xpY2spO1xuICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCBoYW5kbGVLZXlEb3duKTtcbiAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdzY3JvbGwnLCBoYW5kbGVTY3JvbGwsIHRydWUpO1xuICAgIH07XG4gIH0sIFtvbkNsb3NlXSk7XG5cbiAgLy8gQWRqdXN0IHBvc2l0aW9uIGlmIG1lbnUgd291bGQgb3ZlcmZsb3cgdmlld3BvcnRcbiAgY29uc3QgW2FkanVzdGVkUG9zLCBzZXRBZGp1c3RlZFBvc10gPSB1c2VTdGF0ZSh7IHg6IG1lbnUueCwgeTogbWVudS55IH0pO1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IGVsID0gbWVudVJlZi5jdXJyZW50O1xuICAgIGlmICghZWwpIHJldHVybjtcbiAgICBjb25zdCByZWN0ID0gZWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgbGV0IHsgeCwgeSB9ID0gbWVudTtcbiAgICBpZiAocmVjdC5yaWdodCA+IHdpbmRvdy5pbm5lcldpZHRoKSB7XG4gICAgICB4ID0gd2luZG93LmlubmVyV2lkdGggLSByZWN0LndpZHRoIC0gODtcbiAgICB9XG4gICAgaWYgKHJlY3QuYm90dG9tID4gd2luZG93LmlubmVySGVpZ2h0KSB7XG4gICAgICB5ID0gd2luZG93LmlubmVySGVpZ2h0IC0gcmVjdC5oZWlnaHQgLSA4O1xuICAgIH1cbiAgICBpZiAoeCAhPT0gbWVudS54IHx8IHkgIT09IG1lbnUueSkge1xuICAgICAgc2V0QWRqdXN0ZWRQb3MoeyB4LCB5IH0pO1xuICAgIH1cbiAgfSwgW21lbnVdKTtcblxuICBpZiAoaXRlbXMubGVuZ3RoID09PSAwKSByZXR1cm4gbnVsbDtcblxuICByZXR1cm4gY3JlYXRlUG9ydGFsKFxuICAgIDxkaXZcbiAgICAgIHJlZj17bWVudVJlZn1cbiAgICAgIHN0eWxlPXt7XG4gICAgICAgIHBvc2l0aW9uOiAnZml4ZWQnLFxuICAgICAgICBsZWZ0OiBhZGp1c3RlZFBvcy54LFxuICAgICAgICB0b3A6IGFkanVzdGVkUG9zLnksXG4gICAgICAgIHpJbmRleDogOTk5OTksXG4gICAgICAgIGJveFNoYWRvdzogJ3ZhcigtLWRzLXNoYWRvdy1tZW51KScsXG4gICAgICAgIGJvcmRlclJhZGl1czogMTIsXG4gICAgICAgIGJhY2tncm91bmQ6ICd2YXIoLS1kcy1iYWNrZ3JvdW5kLTEwMCknLFxuICAgICAgICBwYWRkaW5nOiAndmFyKC0tZ2Vpc3Qtc3BhY2UtZ2FwLXF1YXJ0ZXIsIDRweCknLFxuICAgICAgICBmb250U2l6ZTogMTQsXG4gICAgICAgIG1pbldpZHRoOiAxODAsXG4gICAgICAgIG92ZXJmbG93WDogJ2hpZGRlbicsXG4gICAgICAgIG92ZXJmbG93WTogJ2F1dG8nLFxuICAgICAgfX1cbiAgICA+XG4gICAgICA8ZGl2XG4gICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgZGlzcGxheTogJ2Jsb2NrJyxcbiAgICAgICAgICBjb2xvcjogJ3ZhcigtLWRzLWdyYXktOTAwKScsXG4gICAgICAgICAgZm9udFNpemU6ICcwLjc1cmVtJyxcbiAgICAgICAgICBwYWRkaW5nOiAndmFyKC0tZ2Vpc3QtZ2FwLXF1YXJ0ZXIsIDRweCkgdmFyKC0tZ2Vpc3Qtc3BhY2UtMngsIDhweCknLFxuICAgICAgICAgIGZvbnRXZWlnaHQ6IDUwMCxcbiAgICAgICAgICBvdmVyZmxvdzogJ2hpZGRlbicsXG4gICAgICAgICAgdGV4dE92ZXJmbG93OiAnZWxsaXBzaXMnLFxuICAgICAgICAgIHdoaXRlU3BhY2U6ICdub3dyYXAnLFxuICAgICAgICAgIG1heFdpZHRoOiAyNDAsXG4gICAgICAgICAgYm9yZGVyQm90dG9tOiAnMXB4IHNvbGlkIHZhcigtLWRzLWdyYXktYWxwaGEtNDAwKScsXG4gICAgICAgICAgbWFyZ2luQm90dG9tOiA0LFxuICAgICAgICB9fVxuICAgICAgPlxuICAgICAgICB7bWVudS5zcGFuTmFtZX1cbiAgICAgIDwvZGl2PlxuICAgICAge2l0ZW1zLm1hcCgoaXRlbSkgPT4gKFxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAga2V5PXtpdGVtLmxhYmVsfVxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICBvdXRsaW5lOiAnbm9uZScsXG4gICAgICAgICAgICBjdXJzb3I6IGl0ZW0uZGlzYWJsZWQgPyAnbm90LWFsbG93ZWQnIDogJ3BvaW50ZXInLFxuICAgICAgICAgICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgICAgICAgICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gICAgICAgICAgICBnYXA6IDgsXG4gICAgICAgICAgICBwYWRkaW5nOiAnMCB2YXIoLS1nZWlzdC1zcGFjZS0yeCwgOHB4KScsXG4gICAgICAgICAgICBoZWlnaHQ6IDQwLFxuICAgICAgICAgICAgdGV4dERlY29yYXRpb246ICdub25lJyxcbiAgICAgICAgICAgIGJvcmRlclJhZGl1czogNixcbiAgICAgICAgICAgIGNvbG9yOiBpdGVtLmRlc3RydWN0aXZlXG4gICAgICAgICAgICAgID8gJ3ZhcigtLWRzLXJlZC05MDApJ1xuICAgICAgICAgICAgICA6ICd2YXIoLS1kcy1ncmF5LTEwMDApJyxcbiAgICAgICAgICAgIHdpZHRoOiAnMTAwJScsXG4gICAgICAgICAgICBiYWNrZ3JvdW5kOiAndHJhbnNwYXJlbnQnLFxuICAgICAgICAgICAgYm9yZGVyOiAnbm9uZScsXG4gICAgICAgICAgICBmb250U2l6ZTogMTQsXG4gICAgICAgICAgICB0ZXh0QWxpZ246ICdsZWZ0JyxcbiAgICAgICAgICAgIG9wYWNpdHk6IGl0ZW0uZGlzYWJsZWQgPyAwLjQgOiAxLFxuICAgICAgICAgICAgdHJhbnNpdGlvbjogJ2JhY2tncm91bmQgMC4xNXMnLFxuICAgICAgICAgIH19XG4gICAgICAgICAgZGlzYWJsZWQ9e2l0ZW0uZGlzYWJsZWR9XG4gICAgICAgICAgb25Nb3VzZUVudGVyPXsoZSkgPT4ge1xuICAgICAgICAgICAgKGUuY3VycmVudFRhcmdldCBhcyBIVE1MQnV0dG9uRWxlbWVudCkuc3R5bGUuYmFja2dyb3VuZCA9XG4gICAgICAgICAgICAgICd2YXIoLS1kcy1ncmF5LWFscGhhLTEwMCknO1xuICAgICAgICAgIH19XG4gICAgICAgICAgb25Nb3VzZUxlYXZlPXsoZSkgPT4ge1xuICAgICAgICAgICAgKGUuY3VycmVudFRhcmdldCBhcyBIVE1MQnV0dG9uRWxlbWVudCkuc3R5bGUuYmFja2dyb3VuZCA9XG4gICAgICAgICAgICAgICd0cmFuc3BhcmVudCc7XG4gICAgICAgICAgfX1cbiAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgICBpdGVtLmFjdGlvbigpO1xuICAgICAgICAgICAgb25DbG9zZSgpO1xuICAgICAgICAgIH19XG4gICAgICAgID5cbiAgICAgICAgICB7aXRlbS5pY29uID8/IG51bGx9XG4gICAgICAgICAge2l0ZW0ubGFiZWx9XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgKSl9XG4gICAgPC9kaXY+LFxuICAgIGRvY3VtZW50LmJvZHlcbiAgKTtcbn1cblxuLyoqIElubmVyIHdyYXBwZXIgdGhhdCBoYXMgYWNjZXNzIHRvIHRoZSBUcmFjZVZpZXdlciBjb250ZXh0ICovXG5mdW5jdGlvbiBUcmFjZVZpZXdlcldpdGhDb250ZXh0TWVudSh7XG4gIHRyYWNlLFxuICBydW4sXG4gIGlzTGl2ZSxcbiAgb25XYWtlVXBTbGVlcCxcbiAgb25DYW5jZWxSdW4sXG4gIG9uUmVzb2x2ZUhvb2ssXG4gIG9uTG9hZE1vcmVTcGFucyxcbiAgaGFzTW9yZVNwYW5zID0gZmFsc2UsXG4gIGlzTG9hZGluZ01vcmVTcGFucyA9IGZhbHNlLFxuICBjaGlsZHJlbixcbn06IHtcbiAgdHJhY2U6IHsgc3BhbnM6IFNwYW5bXSB9O1xuICBydW46IFdvcmtmbG93UnVuO1xuICBpc0xpdmU6IGJvb2xlYW47XG4gIG9uV2FrZVVwU2xlZXA/OiAoXG4gICAgcnVuSWQ6IHN0cmluZyxcbiAgICBjb3JyZWxhdGlvbklkOiBzdHJpbmdcbiAgKSA9PiBQcm9taXNlPHsgc3RvcHBlZENvdW50OiBudW1iZXIgfT47XG4gIG9uQ2FuY2VsUnVuPzogKHJ1bklkOiBzdHJpbmcpID0+IFByb21pc2U8dm9pZD47XG4gIG9uUmVzb2x2ZUhvb2s/OiAoXG4gICAgaG9va1Rva2VuOiBzdHJpbmcsXG4gICAgcGF5bG9hZDogdW5rbm93bixcbiAgICBob29rPzogSG9va1xuICApID0+IFByb21pc2U8dm9pZD47XG4gIG9uTG9hZE1vcmVTcGFucz86ICgpID0+IHZvaWQgfCBQcm9taXNlPHZvaWQ+O1xuICBoYXNNb3JlU3BhbnM/OiBib29sZWFuO1xuICBpc0xvYWRpbmdNb3JlU3BhbnM/OiBib29sZWFuO1xuICBjaGlsZHJlbjogUmVhY3ROb2RlO1xufSk6IFJlYWN0Tm9kZSB7XG4gIGNvbnN0IHRvYXN0ID0gdXNlVG9hc3QoKTtcbiAgY29uc3QgeyBzdGF0ZSwgZGlzcGF0Y2ggfSA9IHVzZVRyYWNlVmlld2VyKCk7XG5cbiAgLy8gRHJpdmUgYWN0aXZlIHNwYW4gd2lkdGhzIGF0IDYwZnBzIHdpdGhvdXQgUmVhY3QgcmUtcmVuZGVyc1xuICB1c2VMaXZlVGljayhpc0xpdmUpO1xuICBjb25zdCBbY29udGV4dE1lbnUsIHNldENvbnRleHRNZW51XSA9IHVzZVN0YXRlPENvbnRleHRNZW51U3RhdGUgfCBudWxsPihudWxsKTtcbiAgY29uc3QgW3Jlc29sdmVIb29rVGFyZ2V0LCBzZXRSZXNvbHZlSG9va1RhcmdldF0gPSB1c2VTdGF0ZTx7XG4gICAgaG9va0lkOiBzdHJpbmc7XG4gICAgdG9rZW46IHN0cmluZztcbiAgfSB8IG51bGw+KG51bGwpO1xuICBjb25zdCBbcmVzb2x2aW5nSG9vaywgc2V0UmVzb2x2aW5nSG9va10gPSB1c2VTdGF0ZShmYWxzZSk7XG4gIC8vIFRyYWNrIGhvb2tzIHJlc29sdmVkIGluIHRoaXMgc2Vzc2lvbiBzbyB0aGUgY29udGV4dCBtZW51IGl0ZW0gaGlkZXMgaW1tZWRpYXRlbHlcbiAgY29uc3QgW3Jlc29sdmVkSG9va0lkcywgc2V0UmVzb2x2ZWRIb29rSWRzXSA9IHVzZVN0YXRlPFNldDxzdHJpbmc+PihcbiAgICBuZXcgU2V0KClcbiAgKTtcblxuICAvLyBCdWlsZCBhIGxvb2t1cCBtYXA6IHNwYW5JZCAtPiBzcGFuXG4gIGNvbnN0IHNwYW5Mb29rdXAgPSB1c2VNZW1vKCgpID0+IHtcbiAgICBjb25zdCBtYXAgPSBuZXcgTWFwPHN0cmluZywgU3Bhbj4oKTtcbiAgICBmb3IgKGNvbnN0IHNwYW4gb2YgdHJhY2Uuc3BhbnMpIHtcbiAgICAgIG1hcC5zZXQoc3Bhbi5zcGFuSWQsIHNwYW4pO1xuICAgIH1cbiAgICByZXR1cm4gbWFwO1xuICB9LCBbdHJhY2Uuc3BhbnNdKTtcblxuICBjb25zdCBoYW5kbGVSZXNvbHZlSG9vayA9IHVzZUNhbGxiYWNrKFxuICAgIGFzeW5jIChwYXlsb2FkOiB1bmtub3duKSA9PiB7XG4gICAgICBpZiAocmVzb2x2aW5nSG9vayB8fCAhcmVzb2x2ZUhvb2tUYXJnZXQgfHwgIW9uUmVzb2x2ZUhvb2spIHJldHVybjtcbiAgICAgIGlmICghcmVzb2x2ZUhvb2tUYXJnZXQudG9rZW4pIHtcbiAgICAgICAgdG9hc3QuZXJyb3IoJ1VuYWJsZSB0byByZXNvbHZlIGhvb2snLCB7XG4gICAgICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgICAgICAnTWlzc2luZyBob29rIHRva2VuLiBUcnkgcmVmcmVzaGluZyB0aGUgcnVuIGRhdGEgYW5kIHJldHJ5LicsXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0cnkge1xuICAgICAgICBzZXRSZXNvbHZpbmdIb29rKHRydWUpO1xuICAgICAgICBhd2FpdCBvblJlc29sdmVIb29rKHJlc29sdmVIb29rVGFyZ2V0LnRva2VuLCBwYXlsb2FkKTtcbiAgICAgICAgdG9hc3Quc3VjY2VzcygnSG9vayByZXNvbHZlZCcsIHtcbiAgICAgICAgICBkZXNjcmlwdGlvbjogJ1RoZSBwYXlsb2FkIGhhcyBiZWVuIHNlbnQgYW5kIHRoZSBob29rIHJlc29sdmVkLicsXG4gICAgICAgIH0pO1xuICAgICAgICAvLyBNYXJrIHRoaXMgaG9vayBhcyByZXNvbHZlZCBsb2NhbGx5IHNvIHRoZSBtZW51IGl0ZW0gaGlkZXMgaW1tZWRpYXRlbHlcbiAgICAgICAgc2V0UmVzb2x2ZWRIb29rSWRzKChwcmV2KSA9PlxuICAgICAgICAgIG5ldyBTZXQocHJldikuYWRkKHJlc29sdmVIb29rVGFyZ2V0Lmhvb2tJZClcbiAgICAgICAgKTtcbiAgICAgICAgc2V0UmVzb2x2ZUhvb2tUYXJnZXQobnVsbCk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignRmFpbGVkIHRvIHJlc29sdmUgaG9vazonLCBlcnIpO1xuICAgICAgICB0b2FzdC5lcnJvcignRmFpbGVkIHRvIHJlc29sdmUgaG9vaycsIHtcbiAgICAgICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgICAgIGVyciBpbnN0YW5jZW9mIEVycm9yID8gZXJyLm1lc3NhZ2UgOiAnQW4gdW5rbm93biBlcnJvciBvY2N1cnJlZCcsXG4gICAgICAgIH0pO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgc2V0UmVzb2x2aW5nSG9vayhmYWxzZSk7XG4gICAgICB9XG4gICAgfSxcbiAgICBbb25SZXNvbHZlSG9vaywgcmVzb2x2ZUhvb2tUYXJnZXQsIHJlc29sdmluZ0hvb2tdXG4gICk7XG5cbiAgY29uc3QgaGFuZGxlQ29udGV4dE1lbnUgPSB1c2VDYWxsYmFjayhcbiAgICAoZTogUmVhY3RNb3VzZUV2ZW50IHwgTW91c2VFdmVudCk6IHZvaWQgPT4ge1xuICAgICAgY29uc3QgdGFyZ2V0ID0gZS50YXJnZXQgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICBjb25zdCAkYnV0dG9uID0gdGFyZ2V0LmNsb3Nlc3Q8SFRNTEJ1dHRvbkVsZW1lbnQ+KCdbZGF0YS1zcGFuLWlkXScpO1xuICAgICAgaWYgKCEkYnV0dG9uKSByZXR1cm47XG5cbiAgICAgIGNvbnN0IHNwYW5JZCA9ICRidXR0b24uZGF0YXNldC5zcGFuSWQ7XG4gICAgICBpZiAoIXNwYW5JZCkgcmV0dXJuO1xuXG4gICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgICBjb25zdCBzcGFuID0gc3Bhbkxvb2t1cC5nZXQoc3BhbklkKTtcbiAgICAgIGlmICghc3BhbikgcmV0dXJuO1xuXG4gICAgICBjb25zdCByZXNvdXJjZVR5cGUgPVxuICAgICAgICAoc3Bhbi5hdHRyaWJ1dGVzLnJlc291cmNlIGFzIFJlc291cmNlVHlwZSkgPz8gJ3Vua25vd24nO1xuICAgICAgY29uc3Qgc3BhbkRhdGEgPSBzcGFuLmF0dHJpYnV0ZXMuZGF0YSBhc1xuICAgICAgICB8IFJlY29yZDxzdHJpbmcsIHVua25vd24+XG4gICAgICAgIHwgdW5kZWZpbmVkO1xuICAgICAgY29uc3QgaXNBY3RpdmUgPSAhc3BhbkRhdGE/LmNvbXBsZXRlZEF0ICYmICFzcGFuRGF0YT8uZGlzcG9zZWRBdDtcblxuICAgICAgc2V0Q29udGV4dE1lbnUoe1xuICAgICAgICB4OiBlLmNsaWVudFgsXG4gICAgICAgIHk6IGUuY2xpZW50WSxcbiAgICAgICAgc3BhbklkLFxuICAgICAgICBzcGFuTmFtZTogc3Bhbi5uYW1lLFxuICAgICAgICByZXNvdXJjZVR5cGUsXG4gICAgICAgIGlzQWN0aXZlLFxuICAgICAgfSk7XG4gICAgfSxcbiAgICBbc3Bhbkxvb2t1cF1cbiAgKTtcblxuICBjb25zdCBjb250YWluZXJSZWYgPSB1c2VSZWY8SFRNTERpdkVsZW1lbnQ+KG51bGwpO1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0ICRjb250YWluZXIgPSBjb250YWluZXJSZWYuY3VycmVudDtcbiAgICBpZiAoISRjb250YWluZXIpIHJldHVybjtcblxuICAgIGNvbnN0IG9uQ29udGV4dE1lbnUgPSAoZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkID0+IHtcbiAgICAgIGhhbmRsZUNvbnRleHRNZW51KGV2ZW50KTtcbiAgICB9O1xuICAgICRjb250YWluZXIuYWRkRXZlbnRMaXN0ZW5lcignY29udGV4dG1lbnUnLCBvbkNvbnRleHRNZW51KTtcblxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAkY29udGFpbmVyLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NvbnRleHRtZW51Jywgb25Db250ZXh0TWVudSk7XG4gICAgfTtcbiAgfSwgW2hhbmRsZUNvbnRleHRNZW51XSk7XG5cbiAgY29uc3QgbG9hZGluZ01vcmVSZWYgPSB1c2VSZWYoZmFsc2UpO1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IHRpbWVsaW5lID0gc3RhdGUudGltZWxpbmVSZWYuY3VycmVudDtcbiAgICBpZiAoIXRpbWVsaW5lIHx8ICFvbkxvYWRNb3JlU3BhbnMgfHwgIWhhc01vcmVTcGFucykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHRocmVzaG9sZFB4ID0gMjAwO1xuICAgIGNvbnN0IG1heWJlTG9hZE1vcmUgPSAoKSA9PiB7XG4gICAgICBpZiAobG9hZGluZ01vcmVSZWYuY3VycmVudCB8fCBpc0xvYWRpbmdNb3JlU3BhbnMgfHwgIWhhc01vcmVTcGFucykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCByZW1haW5pbmcgPVxuICAgICAgICB0aW1lbGluZS5zY3JvbGxIZWlnaHQgLSB0aW1lbGluZS5zY3JvbGxUb3AgLSB0aW1lbGluZS5jbGllbnRIZWlnaHQ7XG4gICAgICBpZiAocmVtYWluaW5nID4gdGhyZXNob2xkUHgpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBsb2FkaW5nTW9yZVJlZi5jdXJyZW50ID0gdHJ1ZTtcbiAgICAgIFByb21pc2UucmVzb2x2ZShvbkxvYWRNb3JlU3BhbnMoKSkuZmluYWxseSgoKSA9PiB7XG4gICAgICAgIGxvYWRpbmdNb3JlUmVmLmN1cnJlbnQgPSBmYWxzZTtcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICB0aW1lbGluZS5hZGRFdmVudExpc3RlbmVyKCdzY3JvbGwnLCBtYXliZUxvYWRNb3JlKTtcbiAgICBtYXliZUxvYWRNb3JlKCk7XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIHRpbWVsaW5lLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIG1heWJlTG9hZE1vcmUpO1xuICAgIH07XG4gIH0sIFtzdGF0ZS50aW1lbGluZVJlZiwgb25Mb2FkTW9yZVNwYW5zLCBoYXNNb3JlU3BhbnMsIGlzTG9hZGluZ01vcmVTcGFuc10pO1xuXG4gIGNvbnN0IGNsb3NlTWVudSA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBzZXRDb250ZXh0TWVudShudWxsKTtcbiAgfSwgW10pO1xuXG4gIGNvbnN0IGdldE1lbnVJdGVtcyA9IHVzZUNhbGxiYWNrKFxuICAgIChtZW51OiBDb250ZXh0TWVudVN0YXRlKTogQ29udGV4dE1lbnVJdGVtW10gPT4ge1xuICAgICAgY29uc3QgaXRlbXM6IENvbnRleHRNZW51SXRlbVtdID0gW107XG5cbiAgICAgIC8vIFNsZWVwLXNwZWNpZmljOiBXYWtlIFVwIChvbmx5IG9uIGFjdGl2ZSBydW5zKVxuICAgICAgY29uc3QgaXNSdW5BY3RpdmUgPSAhcnVuLmNvbXBsZXRlZEF0O1xuICAgICAgaWYgKFxuICAgICAgICBtZW51LnJlc291cmNlVHlwZSA9PT0gJ3NsZWVwJyAmJlxuICAgICAgICBtZW51LmlzQWN0aXZlICYmXG4gICAgICAgIGlzUnVuQWN0aXZlICYmXG4gICAgICAgIG9uV2FrZVVwU2xlZXBcbiAgICAgICkge1xuICAgICAgICBpdGVtcy5wdXNoKHtcbiAgICAgICAgICBsYWJlbDogJ1dha2UgVXAgU2xlZXAnLFxuICAgICAgICAgIGljb246IDxDbG9jayBjbGFzc05hbWU9XCJoLTMuNSB3LTMuNVwiIC8+LFxuICAgICAgICAgIGFjdGlvbjogKCkgPT4ge1xuICAgICAgICAgICAgb25XYWtlVXBTbGVlcChydW4ucnVuSWQsIG1lbnUuc3BhbklkKVxuICAgICAgICAgICAgICAudGhlbigocmVzdWx0KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5zdG9wcGVkQ291bnQgPiAwKSB7XG4gICAgICAgICAgICAgICAgICB0b2FzdC5zdWNjZXNzKCdTbGVlcCB3b2tlbiB1cCcsIHtcbiAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb246IGBXb2tlIHVwICR7U3RyaW5nKHJlc3VsdC5zdG9wcGVkQ291bnQpfSBzbGVlcCR7cmVzdWx0LnN0b3BwZWRDb3VudCA+IDEgPyAncycgOiAnJ31gLFxuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIHRvYXN0LmluZm8oJ05vIGFjdGl2ZSBzbGVlcHMgZm91bmQnLCB7XG4gICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnVGhlIHNsZWVwIG1heSBoYXZlIGFscmVhZHkgY29tcGxldGVkLicsXG4gICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIC5jYXRjaCgoZXJyOiB1bmtub3duKSA9PiB7XG4gICAgICAgICAgICAgICAgdG9hc3QuZXJyb3IoJ0ZhaWxlZCB0byB3YWtlIHVwIHNsZWVwJywge1xuICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgICAgICAgICAgICAgIGVyciBpbnN0YW5jZW9mIEVycm9yXG4gICAgICAgICAgICAgICAgICAgICAgPyBlcnIubWVzc2FnZVxuICAgICAgICAgICAgICAgICAgICAgIDogJ0FuIHVua25vd24gZXJyb3Igb2NjdXJyZWQnLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgLy8gSG9vay1zcGVjaWZpYzogUmVzb2x2ZSBIb29rIChvbmx5IG9uIGFjdGl2ZSwgdW5yZXNvbHZlZCBob29rcylcbiAgICAgIGlmIChtZW51LnJlc291cmNlVHlwZSA9PT0gJ2hvb2snICYmIGlzUnVuQWN0aXZlICYmIG9uUmVzb2x2ZUhvb2spIHtcbiAgICAgICAgY29uc3Qgc3BhbiA9IHNwYW5Mb29rdXAuZ2V0KG1lbnUuc3BhbklkKTtcbiAgICAgICAgY29uc3QgaG9va0RhdGEgPSBzcGFuPy5hdHRyaWJ1dGVzPy5kYXRhIGFzXG4gICAgICAgICAgfCB7IHRva2VuPzogc3RyaW5nOyBkaXNwb3NlZEF0PzogdW5rbm93biB9XG4gICAgICAgICAgfCB1bmRlZmluZWQ7XG4gICAgICAgIC8vIENoZWNrIGRhdGEtbGV2ZWwgZGlzcG9zZWRBdCwgc3BhbiBldmVudHMsIEFORCBsb2NhbCByZXNvbHZlZCBzdGF0ZVxuICAgICAgICBjb25zdCBpc0Rpc3Bvc2VkID1cbiAgICAgICAgICBCb29sZWFuKGhvb2tEYXRhPy5kaXNwb3NlZEF0KSB8fFxuICAgICAgICAgIEJvb2xlYW4oc3Bhbj8uZXZlbnRzPy5zb21lKChlKSA9PiBlLm5hbWUgPT09ICdob29rX2Rpc3Bvc2VkJykpIHx8XG4gICAgICAgICAgcmVzb2x2ZWRIb29rSWRzLmhhcyhtZW51LnNwYW5JZCk7XG4gICAgICAgIGlmIChob29rRGF0YT8udG9rZW4gJiYgIWlzRGlzcG9zZWQpIHtcbiAgICAgICAgICBpdGVtcy5wdXNoKHtcbiAgICAgICAgICAgIGxhYmVsOiAnUmVzb2x2ZSBIb29rJyxcbiAgICAgICAgICAgIGljb246IDxTZW5kIGNsYXNzTmFtZT1cImgtMy41IHctMy41XCIgLz4sXG4gICAgICAgICAgICBhY3Rpb246ICgpID0+IHtcbiAgICAgICAgICAgICAgc2V0UmVzb2x2ZUhvb2tUYXJnZXQoe1xuICAgICAgICAgICAgICAgIGhvb2tJZDogbWVudS5zcGFuSWQsXG4gICAgICAgICAgICAgICAgdG9rZW46IGhvb2tEYXRhLnRva2VuISxcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIFJ1bi1zcGVjaWZpYzogQ2FuY2VsIChvbmx5IG9uIGFjdGl2ZSBydW5zKVxuICAgICAgaWYgKG1lbnUucmVzb3VyY2VUeXBlID09PSAncnVuJyAmJiBpc1J1bkFjdGl2ZSAmJiBvbkNhbmNlbFJ1bikge1xuICAgICAgICBpdGVtcy5wdXNoKHtcbiAgICAgICAgICBsYWJlbDogJ0NhbmNlbCBSdW4nLFxuICAgICAgICAgIGljb246IDxYQ2lyY2xlIGNsYXNzTmFtZT1cImgtMy41IHctMy41XCIgLz4sXG4gICAgICAgICAgZGVzdHJ1Y3RpdmU6IHRydWUsXG4gICAgICAgICAgYWN0aW9uOiAoKSA9PiB7XG4gICAgICAgICAgICBvbkNhbmNlbFJ1bihydW4ucnVuSWQpLmNhdGNoKChlcnI6IHVua25vd24pID0+IHtcbiAgICAgICAgICAgICAgdG9hc3QuZXJyb3IoJ0ZhaWxlZCB0byBjYW5jZWwgcnVuJywge1xuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICAgICAgICAgICAgZXJyIGluc3RhbmNlb2YgRXJyb3JcbiAgICAgICAgICAgICAgICAgICAgPyBlcnIubWVzc2FnZVxuICAgICAgICAgICAgICAgICAgICA6ICdBbiB1bmtub3duIGVycm9yIG9jY3VycmVkJyxcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgLy8gQ29tbW9uIGFjdGlvbnNcbiAgICAgIGl0ZW1zLnB1c2goe1xuICAgICAgICBsYWJlbDogJ1ZpZXcgRGV0YWlscycsXG4gICAgICAgIGljb246IDxJbmZvIGNsYXNzTmFtZT1cImgtMy41IHctMy41XCIgLz4sXG4gICAgICAgIGFjdGlvbjogKCkgPT4ge1xuICAgICAgICAgIGRpc3BhdGNoKHsgdHlwZTogJ3NlbGVjdCcsIGlkOiBtZW51LnNwYW5JZCB9KTtcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuXG4gICAgICBpdGVtcy5wdXNoKHtcbiAgICAgICAgbGFiZWw6ICdDb3B5IE5hbWUnLFxuICAgICAgICBpY29uOiA8VHlwZSBjbGFzc05hbWU9XCJoLTMuNSB3LTMuNVwiIC8+LFxuICAgICAgICBhY3Rpb246ICgpID0+IHtcbiAgICAgICAgICBuYXZpZ2F0b3IuY2xpcGJvYXJkXG4gICAgICAgICAgICAud3JpdGVUZXh0KG1lbnUuc3Bhbk5hbWUpXG4gICAgICAgICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgIHRvYXN0LnN1Y2Nlc3MoJ05hbWUgY29waWVkIHRvIGNsaXBib2FyZCcpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5jYXRjaCgoKSA9PiB7XG4gICAgICAgICAgICAgIHRvYXN0LmVycm9yKCdGYWlsZWQgdG8gY29weSBuYW1lJyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuXG4gICAgICBpdGVtcy5wdXNoKHtcbiAgICAgICAgbGFiZWw6ICdDb3B5IElEJyxcbiAgICAgICAgaWNvbjogPENvcHkgY2xhc3NOYW1lPVwiaC0zLjUgdy0zLjVcIiAvPixcbiAgICAgICAgYWN0aW9uOiAoKSA9PiB7XG4gICAgICAgICAgbmF2aWdhdG9yLmNsaXBib2FyZFxuICAgICAgICAgICAgLndyaXRlVGV4dChtZW51LnNwYW5JZClcbiAgICAgICAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgdG9hc3Quc3VjY2VzcygnSUQgY29waWVkIHRvIGNsaXBib2FyZCcpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5jYXRjaCgoKSA9PiB7XG4gICAgICAgICAgICAgIHRvYXN0LmVycm9yKCdGYWlsZWQgdG8gY29weSBJRCcpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIGl0ZW1zO1xuICAgIH0sXG4gICAgW1xuICAgICAgZGlzcGF0Y2gsXG4gICAgICBvbldha2VVcFNsZWVwLFxuICAgICAgb25DYW5jZWxSdW4sXG4gICAgICBvblJlc29sdmVIb29rLFxuICAgICAgc3Bhbkxvb2t1cCxcbiAgICAgIHJlc29sdmVkSG9va0lkcyxcbiAgICAgIHJ1bi5ydW5JZCxcbiAgICAgIHJ1bi5jb21wbGV0ZWRBdCxcbiAgICBdXG4gICk7XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT1cInJlbGF0aXZlIHctZnVsbCBoLWZ1bGxcIiByZWY9e2NvbnRhaW5lclJlZn0+XG4gICAgICB7Y2hpbGRyZW59XG4gICAgICB7Y29udGV4dE1lbnUgPyAoXG4gICAgICAgIDxTcGFuQ29udGV4dE1lbnVcbiAgICAgICAgICBtZW51PXtjb250ZXh0TWVudX1cbiAgICAgICAgICBpdGVtcz17Z2V0TWVudUl0ZW1zKGNvbnRleHRNZW51KX1cbiAgICAgICAgICBvbkNsb3NlPXtjbG9zZU1lbnV9XG4gICAgICAgIC8+XG4gICAgICApIDogbnVsbH1cbiAgICAgIDxSZXNvbHZlSG9va01vZGFsXG4gICAgICAgIGlzT3Blbj17cmVzb2x2ZUhvb2tUYXJnZXQgIT09IG51bGx9XG4gICAgICAgIG9uQ2xvc2U9eygpID0+IHNldFJlc29sdmVIb29rVGFyZ2V0KG51bGwpfVxuICAgICAgICBvblN1Ym1pdD17aGFuZGxlUmVzb2x2ZUhvb2t9XG4gICAgICAgIGlzU3VibWl0dGluZz17cmVzb2x2aW5nSG9va31cbiAgICAgIC8+XG4gICAgPC9kaXY+XG4gICk7XG59XG5cbi8qKiBSZS1leHBvcnQgU3BhblNlbGVjdGlvbkluZm8gZm9yIGNvbnN1bWVycyAqL1xuZXhwb3J0IHR5cGUgeyBTcGFuU2VsZWN0aW9uSW5mbyB9O1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIEJyaWRnZTogcmVhZHMgc2VsZWN0ZWQgc3BhbiBmcm9tIHRyYWNlIHZpZXdlciBjb250ZXh0IGFuZCBub3RpZmllcyBwYXJlbnRcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vKipcbiAqIEJyaWRnZSBjb21wb25lbnQgdGhhdCBsaXZlcyBJTlNJREUgdGhlIFRyYWNlVmlld2VyQ29udGV4dFByb3ZpZGVyIGFuZFxuICogcmVhZHMgdGhlIHNlbGVjdGVkIHNwYW4gaW5mbywgcGFzc2luZyBpdCB1cCB0byB0aGUgcGFyZW50IHZpYSBjYWxsYmFjay5cbiAqIFRoaXMgYWxsb3dzIHRoZSBwYXJlbnQgdG8gcmVuZGVyIHRoZSBkZXRhaWwgcGFuZWwgT1VUU0lERSB0aGUgY29udGV4dC5cbiAqL1xuZnVuY3Rpb24gU2VsZWN0aW9uQnJpZGdlKHtcbiAgb25TZWxlY3Rpb25DaGFuZ2UsXG59OiB7XG4gIG9uU2VsZWN0aW9uQ2hhbmdlOiAoaW5mbzogU2VsZWN0ZWRTcGFuSW5mbyB8IG51bGwpID0+IHZvaWQ7XG59KSB7XG4gIGNvbnN0IHsgc3RhdGUgfSA9IHVzZVRyYWNlVmlld2VyKCk7XG4gIGNvbnN0IHsgc2VsZWN0ZWQgfSA9IHN0YXRlO1xuICBjb25zdCBvblNlbGVjdGlvbkNoYW5nZVJlZiA9IHVzZVJlZihvblNlbGVjdGlvbkNoYW5nZSk7XG4gIG9uU2VsZWN0aW9uQ2hhbmdlUmVmLmN1cnJlbnQgPSBvblNlbGVjdGlvbkNoYW5nZTtcbiAgY29uc3QgcHJldlNwYW5JZFJlZiA9IHVzZVJlZjxzdHJpbmcgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBjdXJyZW50U3BhbklkID0gc2VsZWN0ZWQ/LnNwYW4uc3BhbklkO1xuICAgIGlmIChjdXJyZW50U3BhbklkID09PSBwcmV2U3BhbklkUmVmLmN1cnJlbnQpIHJldHVybjtcbiAgICBwcmV2U3BhbklkUmVmLmN1cnJlbnQgPSBjdXJyZW50U3BhbklkO1xuXG4gICAgaWYgKHNlbGVjdGVkKSB7XG4gICAgICBvblNlbGVjdGlvbkNoYW5nZVJlZi5jdXJyZW50KHtcbiAgICAgICAgZGF0YTogc2VsZWN0ZWQuc3Bhbi5hdHRyaWJ1dGVzPy5kYXRhLFxuICAgICAgICByZXNvdXJjZTogc2VsZWN0ZWQuc3Bhbi5hdHRyaWJ1dGVzPy5yZXNvdXJjZSBhcyBzdHJpbmcgfCB1bmRlZmluZWQsXG4gICAgICAgIHNwYW5JZDogc2VsZWN0ZWQuc3Bhbi5zcGFuSWQsXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgb25TZWxlY3Rpb25DaGFuZ2VSZWYuY3VycmVudChudWxsKTtcbiAgICB9XG4gIH0sIFtzZWxlY3RlZF0pO1xuXG4gIHJldHVybiBudWxsO1xufVxuXG4vKipcbiAqIEJyaWRnZSBjb21wb25lbnQgdG8gZGVzZWxlY3QgZnJvbSBvdXRzaWRlIHRoZSBjb250ZXh0LlxuICovXG5mdW5jdGlvbiBEZXNlbGVjdEJyaWRnZSh7IHRyaWdnZXJEZXNlbGVjdCB9OiB7IHRyaWdnZXJEZXNlbGVjdDogbnVtYmVyIH0pIHtcbiAgY29uc3QgeyBkaXNwYXRjaCB9ID0gdXNlVHJhY2VWaWV3ZXIoKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICh0cmlnZ2VyRGVzZWxlY3QgPiAwKSB7XG4gICAgICBkaXNwYXRjaCh7IHR5cGU6ICdkZXNlbGVjdCcgfSk7XG4gICAgfVxuICB9LCBbdHJpZ2dlckRlc2VsZWN0LCBkaXNwYXRjaF0pO1xuXG4gIHJldHVybiBudWxsO1xufVxuXG4vKipcbiAqIEJyaWRnZSBjb21wb25lbnQgdG8gc2VsZWN0IGEgc3BhbiBmcm9tIG91dHNpZGUgdGhlIGNvbnRleHQuXG4gKi9cbmZ1bmN0aW9uIFNlbGVjdEJyaWRnZSh7XG4gIHNlbGVjdFJlcXVlc3QsXG59OiB7XG4gIHNlbGVjdFJlcXVlc3Q6IHsgaWQ6IHN0cmluZzsgdG9rZW46IG51bWJlciB9IHwgbnVsbDtcbn0pIHtcbiAgY29uc3QgeyBkaXNwYXRjaCB9ID0gdXNlVHJhY2VWaWV3ZXIoKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChzZWxlY3RSZXF1ZXN0Py5pZCkge1xuICAgICAgZGlzcGF0Y2goeyB0eXBlOiAnc2VsZWN0JywgaWQ6IHNlbGVjdFJlcXVlc3QuaWQgfSk7XG4gICAgfVxuICB9LCBbZGlzcGF0Y2gsIHNlbGVjdFJlcXVlc3RdKTtcblxuICByZXR1cm4gbnVsbDtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBQYW5lbCBjaHJvbWUgKGhlYWRlciB3aXRoIG5hbWUvZHVyYXRpb24sIGNsb3NlIGJ1dHRvbilcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5mdW5jdGlvbiBQYW5lbFJlc2l6ZUhhbmRsZSh7XG4gIG9uUmVzaXplLFxufToge1xuICBvblJlc2l6ZTogKGRlbHRhWDogbnVtYmVyKSA9PiB2b2lkO1xufSkge1xuICBjb25zdCBoYW5kbGVQb2ludGVyRG93biA9IHVzZUNhbGxiYWNrKFxuICAgIChlOiBSZWFjdC5Qb2ludGVyRXZlbnQpID0+IHtcbiAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGxldCBsYXN0WCA9IGUuY2xpZW50WDtcbiAgICAgIGNvbnN0IG9uUG9pbnRlck1vdmUgPSAobW92ZUV2ZW50OiBQb2ludGVyRXZlbnQpID0+IHtcbiAgICAgICAgY29uc3QgZGVsdGFYID0gbGFzdFggLSBtb3ZlRXZlbnQuY2xpZW50WDtcbiAgICAgICAgbGFzdFggPSBtb3ZlRXZlbnQuY2xpZW50WDtcbiAgICAgICAgb25SZXNpemUoZGVsdGFYKTtcbiAgICAgIH07XG4gICAgICBjb25zdCBvblBvaW50ZXJVcCA9ICgpID0+IHtcbiAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigncG9pbnRlcm1vdmUnLCBvblBvaW50ZXJNb3ZlKTtcbiAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigncG9pbnRlcnVwJywgb25Qb2ludGVyVXApO1xuICAgICAgfTtcbiAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3BvaW50ZXJtb3ZlJywgb25Qb2ludGVyTW92ZSk7XG4gICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdwb2ludGVydXAnLCBvblBvaW50ZXJVcCk7XG4gICAgfSxcbiAgICBbb25SZXNpemVdXG4gICk7XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICBjbGFzc05hbWU9XCJhYnNvbHV0ZSBsZWZ0LTAgdG9wLTAgYm90dG9tLTAgdy0xIGN1cnNvci1jb2wtcmVzaXplIGhvdmVyOmJnLWJsdWUtNDAwLzUwIHotMTBcIlxuICAgICAgb25Qb2ludGVyRG93bj17aGFuZGxlUG9pbnRlckRvd259XG4gICAgLz5cbiAgKTtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBUcmFjZSB2aWV3ZXIgZm9vdGVyIOKAlCBsb2FkaW5nIC8gd2FpdGluZyBpbmRpY2F0b3Jcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5mdW5jdGlvbiBUcmFjZVZpZXdlckZvb3Rlcih7XG4gIGhhc01vcmUsXG4gIGlzTGl2ZSxcbiAgaXNJbml0aWFsTG9hZGluZyxcbn06IHtcbiAgaGFzTW9yZTogYm9vbGVhbjtcbiAgaXNMaXZlOiBib29sZWFuO1xuICBpc0luaXRpYWxMb2FkaW5nOiBib29sZWFuO1xufSk6IFJlYWN0Tm9kZSB7XG4gIGNvbnN0IHN0eWxlID0geyBjb2xvcjogJ3ZhcigtLWRzLWdyYXktOTAwKScgfTtcbiAgaWYgKGhhc01vcmUgfHwgaXNJbml0aWFsTG9hZGluZykge1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGdhcC0yIHB5LTMgdGV4dC14c1wiXG4gICAgICAgIHN0eWxlPXtzdHlsZX1cbiAgICAgID5cbiAgICAgICAgPFNwaW5uZXIgc2l6ZT17MTR9IC8+XG4gICAgICAgIExvYWRpbmcgbW9yZSBldmVudHPigKZcbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbiAgaWYgKGlzTGl2ZSkge1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHB5LTMgdGV4dC14c1wiXG4gICAgICAgIHN0eWxlPXtzdHlsZX1cbiAgICAgID5cbiAgICAgICAgV2FpdGluZyBmb3IgbW9yZSBldmVudHPigKZcbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBweS0zIHRleHQteHNcIlxuICAgICAgc3R5bGU9e3N0eWxlfVxuICAgID5cbiAgICAgIEVuZCBvZiBydW5cbiAgICA8L2Rpdj5cbiAgKTtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBNYWluIGNvbXBvbmVudFxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmV4cG9ydCBjb25zdCBXb3JrZmxvd1RyYWNlVmlld2VyID0gKHtcbiAgcnVuLFxuICBldmVudHMsXG4gIGlzTG9hZGluZyxcbiAgZXJyb3IsXG4gIHNwYW5EZXRhaWxEYXRhLFxuICBzcGFuRGV0YWlsTG9hZGluZyxcbiAgc3BhbkRldGFpbEVycm9yLFxuICBvbldha2VVcFNsZWVwLFxuICBvblJlc29sdmVIb29rLFxuICBvbkNhbmNlbFJ1bixcbiAgb25TdHJlYW1DbGljayxcbiAgb25SdW5DbGljayxcbiAgb25TcGFuU2VsZWN0LFxuICBvbkxvYWRFdmVudERhdGEsXG4gIG9uTG9hZE1vcmVTcGFucyxcbiAgaGFzTW9yZVNwYW5zID0gZmFsc2UsXG4gIGlzTG9hZGluZ01vcmVTcGFucyA9IGZhbHNlLFxuICBlbmNyeXB0aW9uS2V5LFxuICBvbkRlY3J5cHQsXG4gIGlzRGVjcnlwdGluZyA9IGZhbHNlLFxufToge1xuICBydW46IFdvcmtmbG93UnVuO1xuICBldmVudHM6IEV2ZW50W107XG4gIGlzTG9hZGluZz86IGJvb2xlYW47XG4gIGVycm9yPzogRXJyb3IgfCBudWxsO1xuICBzcGFuRGV0YWlsRGF0YT86IFdvcmtmbG93UnVuIHwgU3RlcCB8IEhvb2sgfCBFdmVudCB8IG51bGw7XG4gIHNwYW5EZXRhaWxMb2FkaW5nPzogYm9vbGVhbjtcbiAgc3BhbkRldGFpbEVycm9yPzogRXJyb3IgfCBudWxsO1xuICBvbldha2VVcFNsZWVwPzogKFxuICAgIHJ1bklkOiBzdHJpbmcsXG4gICAgY29ycmVsYXRpb25JZDogc3RyaW5nXG4gICkgPT4gUHJvbWlzZTx7IHN0b3BwZWRDb3VudDogbnVtYmVyIH0+O1xuICBvblJlc29sdmVIb29rPzogKFxuICAgIGhvb2tUb2tlbjogc3RyaW5nLFxuICAgIHBheWxvYWQ6IHVua25vd24sXG4gICAgaG9vaz86IEhvb2tcbiAgKSA9PiBQcm9taXNlPHZvaWQ+O1xuICAvKiogQ2FsbGJhY2sgdG8gY2FuY2VsIHRoZSBjdXJyZW50IHJ1biAqL1xuICBvbkNhbmNlbFJ1bj86IChydW5JZDogc3RyaW5nKSA9PiBQcm9taXNlPHZvaWQ+O1xuICAvKiogQ2FsbGJhY2sgd2hlbiBhIHN0cmVhbSByZWZlcmVuY2UgaXMgY2xpY2tlZCBpbiB0aGUgZGV0YWlsIHBhbmVsICovXG4gIG9uU3RyZWFtQ2xpY2s/OiAoc3RyZWFtSWQ6IHN0cmluZykgPT4gdm9pZDtcbiAgLyoqIENhbGxiYWNrIHdoZW4gYSBydW4gcmVmZXJlbmNlIGlzIGNsaWNrZWQgaW4gdGhlIGRldGFpbCBwYW5lbCAqL1xuICBvblJ1bkNsaWNrPzogKHJ1bklkOiBzdHJpbmcpID0+IHZvaWQ7XG4gIC8qKiBDYWxsYmFjayB3aGVuIGEgc3BhbiBpcyBzZWxlY3RlZC4gKi9cbiAgb25TcGFuU2VsZWN0PzogKGluZm86IFNwYW5TZWxlY3Rpb25JbmZvKSA9PiB2b2lkO1xuICAvKiogQ2FsbGJhY2sgdG8gbG9hZCBldmVudCBkYXRhIGZvciBhIHNwZWNpZmljIGV2ZW50IChsYXp5IGxvYWRpbmcgaW4gc2lkZWJhcikgKi9cbiAgb25Mb2FkRXZlbnREYXRhPzogKFxuICAgIGNvcnJlbGF0aW9uSWQ6IHN0cmluZyxcbiAgICBldmVudElkOiBzdHJpbmdcbiAgKSA9PiBQcm9taXNlPHVua25vd24gfCBudWxsPjtcbiAgLyoqIExvYWQgbmV4dCB0cmFjZSBwYWdlIHdoZW4gdmVydGljYWwgc2Nyb2xsIHJlYWNoZXMgYm90dG9tLiAqL1xuICBvbkxvYWRNb3JlU3BhbnM/OiAoKSA9PiB2b2lkIHwgUHJvbWlzZTx2b2lkPjtcbiAgLyoqIFdoZXRoZXIgdHJhY2UgcGFnaW5hdGlvbiBoYXMgbW9yZSBkYXRhIHRvIGxvYWQuICovXG4gIGhhc01vcmVTcGFucz86IGJvb2xlYW47XG4gIC8qKiBXaGV0aGVyIHRyYWNlIHBhZ2luYXRpb24gaXMgY3VycmVudGx5IGZldGNoaW5nIGFub3RoZXIgcGFnZS4gKi9cbiAgaXNMb2FkaW5nTW9yZVNwYW5zPzogYm9vbGVhbjtcbiAgLyoqIEVuY3J5cHRpb24ga2V5IChhdmFpbGFibGUgYWZ0ZXIgRGVjcnlwdCksIHRocmVhZGVkIHRvIGV2ZW50IGxpc3QgZm9yIHJlLWxvYWRpbmcgKi9cbiAgZW5jcnlwdGlvbktleT86IFVpbnQ4QXJyYXk7XG4gIC8qKiBDYWxsYmFjayB0byBpbml0aWF0ZSBkZWNyeXB0aW9uIG9mIGVuY3J5cHRlZCBydW4gZGF0YSAqL1xuICBvbkRlY3J5cHQ/OiAoKSA9PiB2b2lkO1xuICAvKiogV2hldGhlciB0aGUgZW5jcnlwdGlvbiBrZXkgaXMgY3VycmVudGx5IGJlaW5nIGZldGNoZWQgKi9cbiAgaXNEZWNyeXB0aW5nPzogYm9vbGVhbjtcbn0pID0+IHtcbiAgY29uc3QgdG9hc3QgPSB1c2VUb2FzdCgpO1xuICBjb25zdCBbc2VsZWN0ZWRTcGFuLCBzZXRTZWxlY3RlZFNwYW5dID0gdXNlU3RhdGU8U2VsZWN0ZWRTcGFuSW5mbyB8IG51bGw+KFxuICAgIG51bGxcbiAgKTtcbiAgY29uc3QgW3BhbmVsV2lkdGgsIHNldFBhbmVsV2lkdGhdID0gdXNlU3RhdGUoREVGQVVMVF9QQU5FTF9XSURUSCk7XG4gIGNvbnN0IFtkZXNlbGVjdFRyaWdnZXIsIHNldERlc2VsZWN0VHJpZ2dlcl0gPSB1c2VTdGF0ZSgwKTtcbiAgY29uc3QgW3NlbGVjdFJlcXVlc3QsIHNldFNlbGVjdFJlcXVlc3RdID0gdXNlU3RhdGU8e1xuICAgIGlkOiBzdHJpbmc7XG4gICAgdG9rZW46IG51bWJlcjtcbiAgfSB8IG51bGw+KG51bGwpO1xuXG4gIGNvbnN0IGlzTGl2ZSA9IEJvb2xlYW4ocnVuICYmICFydW4uY29tcGxldGVkQXQpO1xuXG4gIC8vIEJ1aWxkIHRyYWNlIG9ubHkgd2hlbiBhY3R1YWwgZGF0YSBjaGFuZ2VzIOKAlCBubyB0aW1lci1kcml2ZW4gcmVidWlsZHMuXG4gIC8vIEFjdGl2ZSBzcGFuIHdpZHRocyBhcmUgYW5pbWF0ZWQgaW1wZXJhdGl2ZWx5IGJ5IHVzZUxpdmVUaWNrIGF0IDYwZnBzLlxuICBjb25zdCB0cmFjZVdpdGhNZXRhOiBUcmFjZVdpdGhNZXRhIHwgdW5kZWZpbmVkID0gdXNlTWVtbygoKSA9PiB7XG4gICAgaWYgKCFydW4/LnJ1bklkKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICByZXR1cm4gYnVpbGRUcmFjZShydW4sIGV2ZW50cywgbmV3IERhdGUoKSk7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWhvb2tzL2V4aGF1c3RpdmUtZGVwcyAtLSBgbmV3IERhdGUoKWAgaXMgaW50ZW50aW9uYWxseSBub3QgYSBkZXA7IHVzZUxpdmVUaWNrIGhhbmRsZXMgbGl2ZSBncm93dGhcbiAgfSwgW3J1biwgZXZlbnRzXSk7XG4gIGNvbnN0IHRyYWNlID0gdHJhY2VXaXRoTWV0YTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChlcnJvciAmJiAhaXNMb2FkaW5nKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcbiAgICAgIHRvYXN0LmVycm9yKCdFcnJvciBsb2FkaW5nIHdvcmtmbG93IHRyYWNlIGRhdGEnLCB7XG4gICAgICAgIGRlc2NyaXB0aW9uOiBlcnJvci5tZXNzYWdlLFxuICAgICAgfSk7XG4gICAgfVxuICB9LCBbZXJyb3IsIGlzTG9hZGluZ10pO1xuXG4gIGNvbnN0IGhhbmRsZVNwYW5TZWxlY3QgPSB1c2VDYWxsYmFjayhcbiAgICAoaW5mbzogU3BhblNlbGVjdGlvbkluZm8pID0+IHtcbiAgICAgIG9uU3BhblNlbGVjdD8uKGluZm8pO1xuICAgIH0sXG4gICAgW29uU3BhblNlbGVjdF1cbiAgKTtcblxuICBjb25zdCBoYW5kbGVTZWxlY3Rpb25DaGFuZ2UgPSB1c2VDYWxsYmFjayhcbiAgICAoaW5mbzogU2VsZWN0ZWRTcGFuSW5mbyB8IG51bGwpID0+IHtcbiAgICAgIGlmIChpbmZvKSB7XG4gICAgICAgIC8vIEZpbHRlciByYXcgZXZlbnRzIGJ5IHRoZSBzZWxlY3RlZCBzcGFuJ3MgY29ycmVsYXRpb25JZCAoc3RlcElkL2hvb2tJZClcbiAgICAgICAgLy8gVGhpcyBieXBhc3NlcyB0aGUgdHJhY2Ugd29ya2VyIHBpcGVsaW5lIGVudGlyZWx5LlxuICAgICAgICBjb25zdCBjb3JyZWxhdGlvbklkID0gaW5mby5zcGFuSWQ7XG4gICAgICAgIGNvbnN0IHJhd0V2ZW50cyA9IGNvcnJlbGF0aW9uSWRcbiAgICAgICAgICA/IGV2ZW50cy5maWx0ZXIoKGUpID0+IGUuY29ycmVsYXRpb25JZCA9PT0gY29ycmVsYXRpb25JZClcbiAgICAgICAgICA6IFtdO1xuICAgICAgICBzZXRTZWxlY3RlZFNwYW4oeyAuLi5pbmZvLCByYXdFdmVudHMgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzZXRTZWxlY3RlZFNwYW4obnVsbCk7XG4gICAgICB9XG4gICAgfSxcbiAgICBbZXZlbnRzXVxuICApO1xuXG4gIC8vIEtlZXAgc2VsZWN0ZWQgc3BhbiByYXcgZXZlbnRzIGxpdmUgYXMgcG9sbGluZyB1cGRhdGVzIGFycml2ZS5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBjb3JyZWxhdGlvbklkID0gc2VsZWN0ZWRTcGFuPy5zcGFuSWQ7XG4gICAgaWYgKCFjb3JyZWxhdGlvbklkKSByZXR1cm47XG5cbiAgICBjb25zdCBuZXh0UmF3RXZlbnRzID0gZXZlbnRzLmZpbHRlcihcbiAgICAgIChlKSA9PiBlLmNvcnJlbGF0aW9uSWQgPT09IGNvcnJlbGF0aW9uSWRcbiAgICApO1xuICAgIHNldFNlbGVjdGVkU3BhbigocHJldikgPT4ge1xuICAgICAgaWYgKCFwcmV2IHx8IHByZXYuc3BhbklkICE9PSBjb3JyZWxhdGlvbklkKSB7XG4gICAgICAgIHJldHVybiBwcmV2O1xuICAgICAgfVxuXG4gICAgICBjb25zdCBwcmV2UmF3RXZlbnRzID0gcHJldi5yYXdFdmVudHMgPz8gW107XG4gICAgICBjb25zdCBpc1NhbWUgPVxuICAgICAgICBwcmV2UmF3RXZlbnRzLmxlbmd0aCA9PT0gbmV4dFJhd0V2ZW50cy5sZW5ndGggJiZcbiAgICAgICAgcHJldlJhd0V2ZW50cy5ldmVyeShcbiAgICAgICAgICAoZXZlbnQsIGluZGV4KSA9PiBldmVudC5ldmVudElkID09PSBuZXh0UmF3RXZlbnRzW2luZGV4XT8uZXZlbnRJZFxuICAgICAgICApO1xuICAgICAgaWYgKGlzU2FtZSkge1xuICAgICAgICByZXR1cm4gcHJldjtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4ucHJldixcbiAgICAgICAgcmF3RXZlbnRzOiBuZXh0UmF3RXZlbnRzLFxuICAgICAgfTtcbiAgICB9KTtcbiAgfSwgW2V2ZW50cywgc2VsZWN0ZWRTcGFuPy5zcGFuSWRdKTtcblxuICAvLyBSZXNldCBzZWxlY3RlZCBzcGFuIHdoZW4gbmF2aWdhdGluZyB0byBhIGRpZmZlcmVudCBydW5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBzZXRTZWxlY3RlZFNwYW4obnVsbCk7XG4gICAgc2V0RGVzZWxlY3RUcmlnZ2VyKChuKSA9PiBuICsgMSk7XG4gIH0sIFtydW4/LnJ1bklkXSk7XG5cbiAgY29uc3QgaGFuZGxlQ2xvc2UgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgc2V0U2VsZWN0ZWRTcGFuKG51bGwpO1xuICAgIHNldERlc2VsZWN0VHJpZ2dlcigobikgPT4gbiArIDEpO1xuICB9LCBbXSk7XG5cbiAgY29uc3QgaGFuZGxlUmVzaXplID0gdXNlQ2FsbGJhY2soKGRlbHRhWDogbnVtYmVyKSA9PiB7XG4gICAgc2V0UGFuZWxXaWR0aCgodykgPT4gTWF0aC5tYXgoTUlOX1BBTkVMX1dJRFRILCB3ICsgZGVsdGFYKSk7XG4gIH0sIFtdKTtcbiAgY29uc3Qgc2VsZWN0ZWRTcGFuSW5kZXggPSB1c2VNZW1vKCgpID0+IHtcbiAgICBpZiAoIXNlbGVjdGVkU3Bhbj8uc3BhbklkIHx8ICF0cmFjZSkgcmV0dXJuIC0xO1xuICAgIHJldHVybiB0cmFjZS5zcGFucy5maW5kSW5kZXgoKHNwYW4pID0+IHNwYW4uc3BhbklkID09PSBzZWxlY3RlZFNwYW4uc3BhbklkKTtcbiAgfSwgW3NlbGVjdGVkU3Bhbj8uc3BhbklkLCB0cmFjZV0pO1xuICBjb25zdCBjYW5TZWxlY3RQcmV2U3BhbiA9IHNlbGVjdGVkU3BhbkluZGV4ID4gMDtcbiAgY29uc3QgY2FuU2VsZWN0TmV4dFNwYW4gPVxuICAgIHNlbGVjdGVkU3BhbkluZGV4ID49IDAgJiZcbiAgICB0cmFjZSAhPSBudWxsICYmXG4gICAgc2VsZWN0ZWRTcGFuSW5kZXggPCB0cmFjZS5zcGFucy5sZW5ndGggLSAxO1xuICBjb25zdCBoYW5kbGVTZWxlY3RQcmV2U3BhbiA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBpZiAoIXRyYWNlIHx8IHNlbGVjdGVkU3BhbkluZGV4IDw9IDApIHJldHVybjtcbiAgICBjb25zdCB0YXJnZXRJZCA9IHRyYWNlLnNwYW5zW3NlbGVjdGVkU3BhbkluZGV4IC0gMV0/LnNwYW5JZDtcbiAgICBpZiAoIXRhcmdldElkKSByZXR1cm47XG4gICAgc2V0U2VsZWN0UmVxdWVzdCh7IGlkOiB0YXJnZXRJZCwgdG9rZW46IERhdGUubm93KCkgfSk7XG4gIH0sIFtzZWxlY3RlZFNwYW5JbmRleCwgdHJhY2VdKTtcbiAgY29uc3QgaGFuZGxlU2VsZWN0TmV4dFNwYW4gPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgaWYgKCF0cmFjZSB8fCBzZWxlY3RlZFNwYW5JbmRleCA8IDApIHJldHVybjtcbiAgICBjb25zdCB0YXJnZXRJZCA9IHRyYWNlLnNwYW5zW3NlbGVjdGVkU3BhbkluZGV4ICsgMV0/LnNwYW5JZDtcbiAgICBpZiAoIXRhcmdldElkKSByZXR1cm47XG4gICAgc2V0U2VsZWN0UmVxdWVzdCh7IGlkOiB0YXJnZXRJZCwgdG9rZW46IERhdGUubm93KCkgfSk7XG4gIH0sIFtzZWxlY3RlZFNwYW5JbmRleCwgdHJhY2VdKTtcblxuICAvLyBHZXQgdGhlIHNlbGVjdGVkIHNwYW4gbmFtZSBmb3IgdGhlIHBhbmVsIGhlYWRlclxuICBjb25zdCBzZWxlY3RlZFNwYW5OYW1lID0gdXNlTWVtbygoKSA9PiB7XG4gICAgaWYgKCFzZWxlY3RlZFNwYW4/LmRhdGEpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgY29uc3QgZGF0YSA9IHNlbGVjdGVkU3Bhbi5kYXRhIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgIGNvbnN0IHN0ZXBOYW1lID0gZGF0YS5zdGVwTmFtZSBhcyBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgY29uc3Qgd29ya2Zsb3dOYW1lID0gZGF0YS53b3JrZmxvd05hbWUgYXMgc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIHJldHVybiAoXG4gICAgICAoc3RlcE5hbWUgPyBwYXJzZVN0ZXBOYW1lKHN0ZXBOYW1lKT8uc2hvcnROYW1lIDogdW5kZWZpbmVkKSA/P1xuICAgICAgKHdvcmtmbG93TmFtZSA/IHBhcnNlV29ya2Zsb3dOYW1lKHdvcmtmbG93TmFtZSk/LnNob3J0TmFtZSA6IHVuZGVmaW5lZCkgPz9cbiAgICAgIHN0ZXBOYW1lID8/XG4gICAgICB3b3JrZmxvd05hbWUgPz9cbiAgICAgIChkYXRhLmhvb2tJZCBhcyBzdHJpbmcpID8/XG4gICAgICAnRGV0YWlscydcbiAgICApO1xuICB9LCBbc2VsZWN0ZWRTcGFuPy5kYXRhXSk7XG5cbiAgaWYgKCF0cmFjZSkge1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cInJlbGF0aXZlIHctZnVsbCBoLWZ1bGxcIj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJib3JkZXItYiBib3JkZXItZ3JheS1hbHBoYS00MDAgdy1mdWxsXCIgLz5cbiAgICAgICAgPFNrZWxldG9uIGNsYXNzTmFtZT1cInctZnVsbCBtbC0yIG10LTEgbWItMSBoLVs1NnB4XVwiIC8+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwicC0yIHJlbGF0aXZlIHctZnVsbFwiPlxuICAgICAgICAgIDxTa2VsZXRvbiBjbGFzc05hbWU9XCJ3LWZ1bGwgbXQtNiBoLVsyMHB4XVwiIC8+XG4gICAgICAgICAgPFNrZWxldG9uIGNsYXNzTmFtZT1cInctWzEwJV0gbXQtMiBtbC02IGgtWzIwcHhdXCIgLz5cbiAgICAgICAgICA8U2tlbGV0b24gY2xhc3NOYW1lPVwidy1bMTAlXSBtdC0yIG1sLTEyIGgtWzIwcHhdXCIgLz5cbiAgICAgICAgICA8U2tlbGV0b24gY2xhc3NOYW1lPVwidy1bMjAlXSBtdC0yIG1sLTE2IGgtWzIwcHhdXCIgLz5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT1cInJlbGF0aXZlIHctZnVsbCBoLWZ1bGwgZmxleCBmbGV4LXJvd1wiPlxuICAgICAgey8qIFRpbWVsaW5lICh0YWtlcyByZW1haW5pbmcgc3BhY2UpICovfVxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4LTEgbWluLXctMCByZWxhdGl2ZVwiPlxuICAgICAgICA8VHJhY2VWaWV3ZXJDb250ZXh0UHJvdmlkZXJcbiAgICAgICAgICBjdXN0b21TcGFuQ2xhc3NOYW1lRnVuYz17Z2V0Q3VzdG9tU3BhbkNsYXNzTmFtZX1cbiAgICAgICAgICBjdXN0b21TcGFuRXZlbnRDbGFzc05hbWVGdW5jPXtnZXRDdXN0b21TcGFuRXZlbnRDbGFzc05hbWV9XG4gICAgICAgID5cbiAgICAgICAgICA8U2VsZWN0aW9uQnJpZGdlIG9uU2VsZWN0aW9uQ2hhbmdlPXtoYW5kbGVTZWxlY3Rpb25DaGFuZ2V9IC8+XG4gICAgICAgICAgPERlc2VsZWN0QnJpZGdlIHRyaWdnZXJEZXNlbGVjdD17ZGVzZWxlY3RUcmlnZ2VyfSAvPlxuICAgICAgICAgIDxTZWxlY3RCcmlkZ2Ugc2VsZWN0UmVxdWVzdD17c2VsZWN0UmVxdWVzdH0gLz5cbiAgICAgICAgICA8VHJhY2VWaWV3ZXJXaXRoQ29udGV4dE1lbnVcbiAgICAgICAgICAgIHRyYWNlPXt0cmFjZX1cbiAgICAgICAgICAgIHJ1bj17cnVufVxuICAgICAgICAgICAgaXNMaXZlPXtpc0xpdmV9XG4gICAgICAgICAgICBvbldha2VVcFNsZWVwPXtvbldha2VVcFNsZWVwfVxuICAgICAgICAgICAgb25DYW5jZWxSdW49e29uQ2FuY2VsUnVufVxuICAgICAgICAgICAgb25SZXNvbHZlSG9vaz17b25SZXNvbHZlSG9va31cbiAgICAgICAgICAgIG9uTG9hZE1vcmVTcGFucz17b25Mb2FkTW9yZVNwYW5zfVxuICAgICAgICAgICAgaGFzTW9yZVNwYW5zPXtoYXNNb3JlU3BhbnN9XG4gICAgICAgICAgICBpc0xvYWRpbmdNb3JlU3BhbnM9e2lzTG9hZGluZ01vcmVTcGFuc31cbiAgICAgICAgICA+XG4gICAgICAgICAgICA8VHJhY2VWaWV3ZXJUaW1lbGluZVxuICAgICAgICAgICAgICBlYWdlclJlbmRlclxuICAgICAgICAgICAgICBoZWlnaHQ9XCIxMDAlXCJcbiAgICAgICAgICAgICAgaXNMaXZlPXtpc0xpdmV9XG4gICAgICAgICAgICAgIHRyYWNlPXt0cmFjZX1cbiAgICAgICAgICAgICAga25vd25EdXJhdGlvbk1zPXt0cmFjZVdpdGhNZXRhPy5rbm93bkR1cmF0aW9uTXN9XG4gICAgICAgICAgICAgIGhhc01vcmVEYXRhPXtoYXNNb3JlU3BhbnMgfHwgQm9vbGVhbihpc0xvYWRpbmcpfVxuICAgICAgICAgICAgICBmb290ZXI9e1xuICAgICAgICAgICAgICAgIDxUcmFjZVZpZXdlckZvb3RlclxuICAgICAgICAgICAgICAgICAgaGFzTW9yZT17aGFzTW9yZVNwYW5zfVxuICAgICAgICAgICAgICAgICAgaXNMaXZlPXtpc0xpdmV9XG4gICAgICAgICAgICAgICAgICBpc0luaXRpYWxMb2FkaW5nPXtCb29sZWFuKGlzTG9hZGluZyl9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L1RyYWNlVmlld2VyV2l0aENvbnRleHRNZW51PlxuICAgICAgICA8L1RyYWNlVmlld2VyQ29udGV4dFByb3ZpZGVyPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIHsvKiBEZXRhaWwgcGFuZWwgKHJlbmRlcmVkIG91dHNpZGUgdGhlIGNvbnRleHQsIGFzIGEgc2libGluZykgKi99XG4gICAgICB7c2VsZWN0ZWRTcGFuICYmIChcbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzTmFtZT1cInJlbGF0aXZlIGJvcmRlci1sIGZsZXgtc2hyaW5rLTAgZmxleCBmbGV4LWNvbFwiXG4gICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgIHdpZHRoOiBwYW5lbFdpZHRoLFxuICAgICAgICAgICAgYm9yZGVyQ29sb3I6ICd2YXIoLS1kcy1ncmF5LTIwMCknLFxuICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiAndmFyKC0tZHMtYmFja2dyb3VuZC0xMDApJyxcbiAgICAgICAgICB9fVxuICAgICAgICA+XG4gICAgICAgICAgPFBhbmVsUmVzaXplSGFuZGxlIG9uUmVzaXplPXtoYW5kbGVSZXNpemV9IC8+XG4gICAgICAgICAgey8qIFBhbmVsIGhlYWRlciAqL31cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gcHgtMyBweS0yIGJvcmRlci15IGZsZXgtc2hyaW5rLTBcIlxuICAgICAgICAgICAgc3R5bGU9e3sgYm9yZGVyQ29sb3I6ICd2YXIoLS1kcy1ncmF5LTIwMCknIH19XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtaW4tdy0wIGZsZXgtMVwiPlxuICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwidGV4dC1zbSBmb250LW1lZGl1bSB0cnVuY2F0ZVwiXG4gICAgICAgICAgICAgICAgc3R5bGU9e3sgY29sb3I6ICd2YXIoLS1kcy1ncmF5LTEwMDApJyB9fVxuICAgICAgICAgICAgICAgIHRpdGxlPXtzZWxlY3RlZFNwYW5OYW1lfVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge3NlbGVjdGVkU3Bhbk5hbWV9XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyXCI+XG4gICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPVwiUHJldmlvdXMgc3BhblwiXG4gICAgICAgICAgICAgICAgb25DbGljaz17aGFuZGxlU2VsZWN0UHJldlNwYW59XG4gICAgICAgICAgICAgICAgZGlzYWJsZWQ9eyFjYW5TZWxlY3RQcmV2U3Bhbn1cbiAgICAgICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICAgICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgICAgICAgICAgICAgICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gICAgICAgICAgICAgICAgICBqdXN0aWZ5Q29udGVudDogJ2NlbnRlcicsXG4gICAgICAgICAgICAgICAgICBtYXJnaW5MZWZ0OiA2LFxuICAgICAgICAgICAgICAgICAgd2lkdGg6IDI0LFxuICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAyNCxcbiAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IDAsXG4gICAgICAgICAgICAgICAgICBib3JkZXJSYWRpdXM6IDYsXG4gICAgICAgICAgICAgICAgICBib3JkZXI6ICdub25lJyxcbiAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6ICd0cmFuc3BhcmVudCcsXG4gICAgICAgICAgICAgICAgICBjb2xvcjogJ3ZhcigtLWRzLWdyYXktNzAwKScsXG4gICAgICAgICAgICAgICAgICBjdXJzb3I6IGNhblNlbGVjdFByZXZTcGFuID8gJ3BvaW50ZXInIDogJ25vdC1hbGxvd2VkJyxcbiAgICAgICAgICAgICAgICAgIG9wYWNpdHk6IGNhblNlbGVjdFByZXZTcGFuID8gMSA6IDAuNDUsXG4gICAgICAgICAgICAgICAgICBmbGV4U2hyaW5rOiAwLFxuICAgICAgICAgICAgICAgICAgdHJhbnNpdGlvbjogJ2JhY2tncm91bmQgMC4xNXMnLFxuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgb25Nb3VzZUVudGVyPXsoZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgaWYgKCFjYW5TZWxlY3RQcmV2U3BhbikgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgZS5jdXJyZW50VGFyZ2V0LnN0eWxlLmJhY2tncm91bmQgPSAndmFyKC0tZHMtZ3JheS1hbHBoYS0xMDApJztcbiAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgIG9uTW91c2VMZWF2ZT17KGUpID0+IHtcbiAgICAgICAgICAgICAgICAgIGUuY3VycmVudFRhcmdldC5zdHlsZS5iYWNrZ3JvdW5kID0gJ3RyYW5zcGFyZW50JztcbiAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPENoZXZyb25VcCBzaXplPXsxNn0gLz5cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPVwiTmV4dCBzcGFuXCJcbiAgICAgICAgICAgICAgICBvbkNsaWNrPXtoYW5kbGVTZWxlY3ROZXh0U3Bhbn1cbiAgICAgICAgICAgICAgICBkaXNhYmxlZD17IWNhblNlbGVjdE5leHRTcGFufVxuICAgICAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgICAgICAgICAgICAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICAgICAgICAgICAgICAgIGp1c3RpZnlDb250ZW50OiAnY2VudGVyJyxcbiAgICAgICAgICAgICAgICAgIG1hcmdpbkxlZnQ6IDIsXG4gICAgICAgICAgICAgICAgICB3aWR0aDogMjQsXG4gICAgICAgICAgICAgICAgICBoZWlnaHQ6IDI0LFxuICAgICAgICAgICAgICAgICAgcGFkZGluZzogMCxcbiAgICAgICAgICAgICAgICAgIGJvcmRlclJhZGl1czogNixcbiAgICAgICAgICAgICAgICAgIGJvcmRlcjogJ25vbmUnLFxuICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogJ3RyYW5zcGFyZW50JyxcbiAgICAgICAgICAgICAgICAgIGNvbG9yOiAndmFyKC0tZHMtZ3JheS03MDApJyxcbiAgICAgICAgICAgICAgICAgIGN1cnNvcjogY2FuU2VsZWN0TmV4dFNwYW4gPyAncG9pbnRlcicgOiAnbm90LWFsbG93ZWQnLFxuICAgICAgICAgICAgICAgICAgb3BhY2l0eTogY2FuU2VsZWN0TmV4dFNwYW4gPyAxIDogMC40NSxcbiAgICAgICAgICAgICAgICAgIGZsZXhTaHJpbms6IDAsXG4gICAgICAgICAgICAgICAgICB0cmFuc2l0aW9uOiAnYmFja2dyb3VuZCAwLjE1cycsXG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICBvbk1vdXNlRW50ZXI9eyhlKSA9PiB7XG4gICAgICAgICAgICAgICAgICBpZiAoIWNhblNlbGVjdE5leHRTcGFuKSByZXR1cm47XG4gICAgICAgICAgICAgICAgICBlLmN1cnJlbnRUYXJnZXQuc3R5bGUuYmFja2dyb3VuZCA9ICd2YXIoLS1kcy1ncmF5LWFscGhhLTEwMCknO1xuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgb25Nb3VzZUxlYXZlPXsoZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgZS5jdXJyZW50VGFyZ2V0LnN0eWxlLmJhY2tncm91bmQgPSAndHJhbnNwYXJlbnQnO1xuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8Q2hldnJvbkRvd24gc2l6ZT17MTZ9IC8+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyXCJcbiAgICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICBib3JkZXJMZWZ0OiAnMXB4IHNvbGlkIHZhcigtLWRzLWdyYXktMzAwKScsXG4gICAgICAgICAgICAgICAgbWFyZ2luTGVmdDogNixcbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJDbG9zZSBwYW5lbFwiXG4gICAgICAgICAgICAgICAgb25DbGljaz17aGFuZGxlQ2xvc2V9XG4gICAgICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICAgICAgICAgICAgICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICAgICAgICAgICAgICAgICAganVzdGlmeUNvbnRlbnQ6ICdjZW50ZXInLFxuICAgICAgICAgICAgICAgICAgbWFyZ2luTGVmdDogNixcbiAgICAgICAgICAgICAgICAgIHdpZHRoOiAyNCxcbiAgICAgICAgICAgICAgICAgIGhlaWdodDogMjQsXG4gICAgICAgICAgICAgICAgICBwYWRkaW5nOiAwLFxuICAgICAgICAgICAgICAgICAgYm9yZGVyUmFkaXVzOiA2LFxuICAgICAgICAgICAgICAgICAgYm9yZGVyOiAnbm9uZScsXG4gICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAndHJhbnNwYXJlbnQnLFxuICAgICAgICAgICAgICAgICAgY29sb3I6ICd2YXIoLS1kcy1ncmF5LTcwMCknLFxuICAgICAgICAgICAgICAgICAgY3Vyc29yOiAncG9pbnRlcicsXG4gICAgICAgICAgICAgICAgICBmbGV4U2hyaW5rOiAwLFxuICAgICAgICAgICAgICAgICAgdHJhbnNpdGlvbjogJ2JhY2tncm91bmQgMC4xNXMnLFxuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgb25Nb3VzZUVudGVyPXsoZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgZS5jdXJyZW50VGFyZ2V0LnN0eWxlLmJhY2tncm91bmQgPSAndmFyKC0tZHMtZ3JheS1hbHBoYS0xMDApJztcbiAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgIG9uTW91c2VMZWF2ZT17KGUpID0+IHtcbiAgICAgICAgICAgICAgICAgIGUuY3VycmVudFRhcmdldC5zdHlsZS5iYWNrZ3JvdW5kID0gJ3RyYW5zcGFyZW50JztcbiAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPFggc2l6ZT17MTZ9IC8+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgey8qIFBhbmVsIGJvZHkgKi99XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4LTEgb3ZlcmZsb3cteS1hdXRvXCI+XG4gICAgICAgICAgICA8RXJyb3JCb3VuZGFyeSB0aXRsZT1cIkZhaWxlZCB0byBsb2FkIGVudGl0eSBkZXRhaWxzXCI+XG4gICAgICAgICAgICAgIDxFbnRpdHlEZXRhaWxQYW5lbFxuICAgICAgICAgICAgICAgIHJ1bj17cnVufVxuICAgICAgICAgICAgICAgIG9uU3RyZWFtQ2xpY2s9e29uU3RyZWFtQ2xpY2t9XG4gICAgICAgICAgICAgICAgb25SdW5DbGljaz17b25SdW5DbGlja31cbiAgICAgICAgICAgICAgICBzcGFuRGV0YWlsRGF0YT17c3BhbkRldGFpbERhdGEgPz8gbnVsbH1cbiAgICAgICAgICAgICAgICBzcGFuRGV0YWlsRXJyb3I9e3NwYW5EZXRhaWxFcnJvcn1cbiAgICAgICAgICAgICAgICBzcGFuRGV0YWlsTG9hZGluZz17c3BhbkRldGFpbExvYWRpbmd9XG4gICAgICAgICAgICAgICAgb25TcGFuU2VsZWN0PXtoYW5kbGVTcGFuU2VsZWN0fVxuICAgICAgICAgICAgICAgIG9uV2FrZVVwU2xlZXA9e29uV2FrZVVwU2xlZXB9XG4gICAgICAgICAgICAgICAgb25Mb2FkRXZlbnREYXRhPXtvbkxvYWRFdmVudERhdGF9XG4gICAgICAgICAgICAgICAgb25SZXNvbHZlSG9vaz17b25SZXNvbHZlSG9va31cbiAgICAgICAgICAgICAgICBlbmNyeXB0aW9uS2V5PXtlbmNyeXB0aW9uS2V5fVxuICAgICAgICAgICAgICAgIG9uRGVjcnlwdD17b25EZWNyeXB0fVxuICAgICAgICAgICAgICAgIGlzRGVjcnlwdGluZz17aXNEZWNyeXB0aW5nfVxuICAgICAgICAgICAgICAgIHNlbGVjdGVkU3Bhbj17c2VsZWN0ZWRTcGFufVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgPC9FcnJvckJvdW5kYXJ5PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICl9XG4gICAgPC9kaXY+XG4gICk7XG59O1xuIl19