@workflow/web-shared 5.0.0-beta.7 → 5.0.0-beta.9

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 (211) hide show
  1. package/dist/components/error-boundary.js +1 -1
  2. package/dist/components/event-list-view.d.ts +12 -0
  3. package/dist/components/event-list-view.d.ts.map +1 -1
  4. package/dist/components/event-list-view.js +26 -13
  5. package/dist/components/hook-actions.js +1 -1
  6. package/dist/components/index.d.ts +1 -0
  7. package/dist/components/index.d.ts.map +1 -1
  8. package/dist/components/index.js +2 -1
  9. package/dist/components/new-trace-viewer/components/copy-button.js +2 -2
  10. package/dist/components/new-trace-viewer/components/event-list.d.ts +3 -1
  11. package/dist/components/new-trace-viewer/components/event-list.d.ts.map +1 -1
  12. package/dist/components/new-trace-viewer/components/event-list.js +8 -7
  13. package/dist/components/new-trace-viewer/components/middle-truncate/copy-selection.js +1 -1
  14. package/dist/components/new-trace-viewer/components/middle-truncate/middle-truncate.js +1 -1
  15. package/dist/components/new-trace-viewer/components/middle-truncate/truncate.js +1 -1
  16. package/dist/components/new-trace-viewer/components/middle-truncate/use-middle-truncate.js +1 -1
  17. package/dist/components/new-trace-viewer/components/split-pane.js +1 -1
  18. package/dist/components/new-trace-viewer/components/timeline.d.ts +4 -1
  19. package/dist/components/new-trace-viewer/components/timeline.d.ts.map +1 -1
  20. package/dist/components/new-trace-viewer/components/timeline.js +6 -5
  21. package/dist/components/new-trace-viewer/context.js +1 -1
  22. package/dist/components/new-trace-viewer/detail-panel.d.ts.map +1 -1
  23. package/dist/components/new-trace-viewer/detail-panel.js +3 -2
  24. package/dist/components/new-trace-viewer/icons.js +1 -1
  25. package/dist/components/new-trace-viewer/search.d.ts +19 -0
  26. package/dist/components/new-trace-viewer/search.d.ts.map +1 -0
  27. package/dist/components/new-trace-viewer/search.js +134 -0
  28. package/dist/components/new-trace-viewer/trace-viewer.d.ts.map +1 -1
  29. package/dist/components/new-trace-viewer/trace-viewer.js +62 -35
  30. package/dist/components/new-trace-viewer/types.js +1 -1
  31. package/dist/components/new-trace-viewer/util/constants.js +1 -1
  32. package/dist/components/new-trace-viewer/utils.js +1 -1
  33. package/dist/components/run-trace-view.js +1 -1
  34. package/dist/components/sidebar/attribute-panel.d.ts.map +1 -1
  35. package/dist/components/sidebar/attribute-panel.js +99 -73
  36. package/dist/components/sidebar/conversation-view.js +1 -1
  37. package/dist/components/sidebar/copyable-data-block.d.ts +1 -0
  38. package/dist/components/sidebar/copyable-data-block.d.ts.map +1 -1
  39. package/dist/components/sidebar/copyable-data-block.js +16 -15
  40. package/dist/components/sidebar/detail-card.d.ts +5 -6
  41. package/dist/components/sidebar/detail-card.d.ts.map +1 -1
  42. package/dist/components/sidebar/detail-card.js +32 -16
  43. package/dist/components/sidebar/entity-detail-panel.d.ts.map +1 -1
  44. package/dist/components/sidebar/entity-detail-panel.js +6 -3
  45. package/dist/components/sidebar/events-list.d.ts.map +1 -1
  46. package/dist/components/sidebar/events-list.js +21 -15
  47. package/dist/components/sidebar/resolve-hook-modal.js +1 -1
  48. package/dist/components/sidebar/sidebar-data-context.js +1 -1
  49. package/dist/components/stream-viewer.js +1 -1
  50. package/dist/components/trace-viewer/components/map.js +1 -1
  51. package/dist/components/trace-viewer/components/markers.js +1 -1
  52. package/dist/components/trace-viewer/components/node.js +1 -1
  53. package/dist/components/trace-viewer/components/search-input.js +1 -1
  54. package/dist/components/trace-viewer/components/search.js +1 -1
  55. package/dist/components/trace-viewer/components/span-content.js +1 -1
  56. package/dist/components/trace-viewer/components/span-detail-panel.js +1 -1
  57. package/dist/components/trace-viewer/components/span-segments.js +1 -1
  58. package/dist/components/trace-viewer/components/span-strategies.js +1 -1
  59. package/dist/components/trace-viewer/components/ui.js +1 -1
  60. package/dist/components/trace-viewer/components/zoom-button.js +1 -1
  61. package/dist/components/trace-viewer/components/zoom-icons.js +1 -1
  62. package/dist/components/trace-viewer/context.js +1 -1
  63. package/dist/components/trace-viewer/index.js +1 -1
  64. package/dist/components/trace-viewer/trace-viewer.js +1 -1
  65. package/dist/components/trace-viewer/types.js +1 -1
  66. package/dist/components/trace-viewer/util/constants.js +1 -1
  67. package/dist/components/trace-viewer/util/scrollbar-width.js +1 -1
  68. package/dist/components/trace-viewer/util/timing.js +1 -1
  69. package/dist/components/trace-viewer/util/tree.js +1 -1
  70. package/dist/components/trace-viewer/util/use-immediate-style.js +1 -1
  71. package/dist/components/trace-viewer/util/use-streaming-spans.js +1 -1
  72. package/dist/components/trace-viewer/util/use-trackpad-zoom.js +1 -1
  73. package/dist/components/trace-viewer/worker.js +1 -1
  74. package/dist/components/trace-viewer-new.js +1 -1
  75. package/dist/components/ui/alert.js +1 -1
  76. package/dist/components/ui/button.d.ts +10 -0
  77. package/dist/components/ui/button.d.ts.map +1 -0
  78. package/dist/components/ui/button.js +46 -0
  79. package/dist/components/ui/card.js +1 -1
  80. package/dist/components/ui/data-inspector.d.ts +1 -0
  81. package/dist/components/ui/data-inspector.d.ts.map +1 -1
  82. package/dist/components/ui/data-inspector.js +4 -9
  83. package/dist/components/ui/decrypt-button.js +1 -1
  84. package/dist/components/ui/error-card.js +1 -1
  85. package/dist/components/ui/error-stack-block.d.ts.map +1 -1
  86. package/dist/components/ui/error-stack-block.js +4 -18
  87. package/dist/components/ui/icon-button.d.ts +13 -0
  88. package/dist/components/ui/icon-button.d.ts.map +1 -0
  89. package/dist/components/ui/icon-button.js +29 -0
  90. package/dist/components/ui/inspector-theme.js +1 -1
  91. package/dist/components/ui/load-more-button.js +1 -1
  92. package/dist/components/ui/menu-dropdown.js +1 -1
  93. package/dist/components/ui/skeleton.js +1 -1
  94. package/dist/components/ui/spinner.js +1 -1
  95. package/dist/components/ui/timestamp-tooltip.js +1 -1
  96. package/dist/components/workflow-trace-view.js +1 -1
  97. package/dist/components/workflow-traces/event-colors.js +1 -1
  98. package/dist/components/workflow-traces/trace-colors.js +1 -1
  99. package/dist/components/workflow-traces/trace-span-construction.js +1 -1
  100. package/dist/components/workflow-traces/trace-time-utils.js +1 -1
  101. package/dist/hooks/use-dark-mode.js +1 -1
  102. package/dist/hooks/use-reduced-motion.js +1 -1
  103. package/dist/index.js +1 -1
  104. package/dist/lib/event-analysis.js +1 -1
  105. package/dist/lib/event-materialization.js +1 -1
  106. package/dist/lib/hydration.js +1 -1
  107. package/dist/lib/stream-display.js +1 -1
  108. package/dist/lib/toast.js +1 -1
  109. package/dist/lib/trace-builder.js +1 -1
  110. package/dist/lib/utils.js +1 -1
  111. package/dist/styles.css +5 -0
  112. package/package.json +5 -5
  113. package/src/components/event-list-view.tsx +29 -13
  114. package/src/components/index.ts +1 -0
  115. package/src/components/new-trace-viewer/components/copy-button.tsx +1 -1
  116. package/src/components/new-trace-viewer/components/event-list.tsx +17 -6
  117. package/src/components/new-trace-viewer/components/timeline.tsx +11 -2
  118. package/src/components/new-trace-viewer/detail-panel.tsx +3 -6
  119. package/src/components/new-trace-viewer/search.ts +178 -0
  120. package/src/components/new-trace-viewer/trace-viewer.tsx +123 -89
  121. package/src/components/sidebar/attribute-panel.tsx +212 -235
  122. package/src/components/sidebar/copyable-data-block.tsx +49 -27
  123. package/src/components/sidebar/detail-card.tsx +119 -41
  124. package/src/components/sidebar/entity-detail-panel.tsx +28 -28
  125. package/src/components/sidebar/events-list.tsx +51 -79
  126. package/src/components/ui/button.tsx +68 -0
  127. package/src/components/ui/data-inspector.tsx +9 -18
  128. package/src/components/ui/error-stack-block.tsx +7 -26
  129. package/src/components/ui/icon-button.tsx +57 -0
  130. package/src/styles.css +5 -0
  131. package/dist/components/error-boundary.js.map +0 -1
  132. package/dist/components/event-list-view.js.map +0 -1
  133. package/dist/components/hook-actions.js.map +0 -1
  134. package/dist/components/index.js.map +0 -1
  135. package/dist/components/new-trace-viewer/components/copy-button.js.map +0 -1
  136. package/dist/components/new-trace-viewer/components/event-list.js.map +0 -1
  137. package/dist/components/new-trace-viewer/components/middle-truncate/copy-selection.js.map +0 -1
  138. package/dist/components/new-trace-viewer/components/middle-truncate/middle-truncate.js.map +0 -1
  139. package/dist/components/new-trace-viewer/components/middle-truncate/truncate.js.map +0 -1
  140. package/dist/components/new-trace-viewer/components/middle-truncate/use-middle-truncate.js.map +0 -1
  141. package/dist/components/new-trace-viewer/components/split-pane.js.map +0 -1
  142. package/dist/components/new-trace-viewer/components/timeline.js.map +0 -1
  143. package/dist/components/new-trace-viewer/context.js.map +0 -1
  144. package/dist/components/new-trace-viewer/detail-panel.js.map +0 -1
  145. package/dist/components/new-trace-viewer/icons.js.map +0 -1
  146. package/dist/components/new-trace-viewer/trace-viewer.js.map +0 -1
  147. package/dist/components/new-trace-viewer/types.js.map +0 -1
  148. package/dist/components/new-trace-viewer/util/constants.js.map +0 -1
  149. package/dist/components/new-trace-viewer/utils.js.map +0 -1
  150. package/dist/components/run-trace-view.js.map +0 -1
  151. package/dist/components/sidebar/attribute-panel.js.map +0 -1
  152. package/dist/components/sidebar/conversation-view.js.map +0 -1
  153. package/dist/components/sidebar/copyable-data-block.js.map +0 -1
  154. package/dist/components/sidebar/detail-card.js.map +0 -1
  155. package/dist/components/sidebar/entity-detail-panel.js.map +0 -1
  156. package/dist/components/sidebar/events-list.js.map +0 -1
  157. package/dist/components/sidebar/resolve-hook-modal.js.map +0 -1
  158. package/dist/components/sidebar/sidebar-data-context.js.map +0 -1
  159. package/dist/components/stream-viewer.js.map +0 -1
  160. package/dist/components/trace-viewer/components/map.js.map +0 -1
  161. package/dist/components/trace-viewer/components/markers.js.map +0 -1
  162. package/dist/components/trace-viewer/components/node.js.map +0 -1
  163. package/dist/components/trace-viewer/components/search-input.js.map +0 -1
  164. package/dist/components/trace-viewer/components/search.js.map +0 -1
  165. package/dist/components/trace-viewer/components/span-content.js.map +0 -1
  166. package/dist/components/trace-viewer/components/span-detail-panel.js.map +0 -1
  167. package/dist/components/trace-viewer/components/span-segments.js.map +0 -1
  168. package/dist/components/trace-viewer/components/span-strategies.js.map +0 -1
  169. package/dist/components/trace-viewer/components/ui.js.map +0 -1
  170. package/dist/components/trace-viewer/components/zoom-button.js.map +0 -1
  171. package/dist/components/trace-viewer/components/zoom-icons.js.map +0 -1
  172. package/dist/components/trace-viewer/context.js.map +0 -1
  173. package/dist/components/trace-viewer/index.js.map +0 -1
  174. package/dist/components/trace-viewer/trace-viewer.js.map +0 -1
  175. package/dist/components/trace-viewer/types.js.map +0 -1
  176. package/dist/components/trace-viewer/util/constants.js.map +0 -1
  177. package/dist/components/trace-viewer/util/scrollbar-width.js.map +0 -1
  178. package/dist/components/trace-viewer/util/timing.js.map +0 -1
  179. package/dist/components/trace-viewer/util/tree.js.map +0 -1
  180. package/dist/components/trace-viewer/util/use-immediate-style.js.map +0 -1
  181. package/dist/components/trace-viewer/util/use-streaming-spans.js.map +0 -1
  182. package/dist/components/trace-viewer/util/use-trackpad-zoom.js.map +0 -1
  183. package/dist/components/trace-viewer/worker.js.map +0 -1
  184. package/dist/components/trace-viewer-new.js.map +0 -1
  185. package/dist/components/ui/alert.js.map +0 -1
  186. package/dist/components/ui/card.js.map +0 -1
  187. package/dist/components/ui/data-inspector.js.map +0 -1
  188. package/dist/components/ui/decrypt-button.js.map +0 -1
  189. package/dist/components/ui/error-card.js.map +0 -1
  190. package/dist/components/ui/error-stack-block.js.map +0 -1
  191. package/dist/components/ui/inspector-theme.js.map +0 -1
  192. package/dist/components/ui/load-more-button.js.map +0 -1
  193. package/dist/components/ui/menu-dropdown.js.map +0 -1
  194. package/dist/components/ui/skeleton.js.map +0 -1
  195. package/dist/components/ui/spinner.js.map +0 -1
  196. package/dist/components/ui/timestamp-tooltip.js.map +0 -1
  197. package/dist/components/workflow-trace-view.js.map +0 -1
  198. package/dist/components/workflow-traces/event-colors.js.map +0 -1
  199. package/dist/components/workflow-traces/trace-colors.js.map +0 -1
  200. package/dist/components/workflow-traces/trace-span-construction.js.map +0 -1
  201. package/dist/components/workflow-traces/trace-time-utils.js.map +0 -1
  202. package/dist/hooks/use-dark-mode.js.map +0 -1
  203. package/dist/hooks/use-reduced-motion.js.map +0 -1
  204. package/dist/index.js.map +0 -1
  205. package/dist/lib/event-analysis.js.map +0 -1
  206. package/dist/lib/event-materialization.js.map +0 -1
  207. package/dist/lib/hydration.js.map +0 -1
  208. package/dist/lib/stream-display.js.map +0 -1
  209. package/dist/lib/toast.js.map +0 -1
  210. package/dist/lib/trace-builder.js.map +0 -1
  211. package/dist/lib/utils.js.map +0 -1
@@ -34,4 +34,4 @@ export class ErrorBoundary extends Component {
34
34
  return this.props.children;
35
35
  }
36
36
  }
37
- //# sourceMappingURL=error-boundary.js.map
37
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3ItYm91bmRhcnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29tcG9uZW50cy9lcnJvci1ib3VuZGFyeS50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWSxDQUFDOztBQUdiLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxPQUFPLENBQUM7QUFDbEMsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBaUI1QyxNQUFNLE9BQU8sYUFBYyxTQUFRLFNBR2xDO0lBQ0MsWUFBWSxLQUF5QjtRQUNuQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDYixJQUFJLENBQUMsS0FBSyxHQUFHLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUM7SUFDaEQsQ0FBQztJQUVELE1BQU0sQ0FBQyx3QkFBd0IsQ0FBQyxLQUFjO1FBQzVDLE9BQU8sRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDO0lBQ25DLENBQUM7SUFFRCxLQUFLO1FBQ0gsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7SUFDbEQsQ0FBQztJQUVELGlCQUFpQixDQUFDLEtBQWMsRUFBRSxTQUFrQjtRQUNsRCxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsUUFBUSxLQUFLLGFBQWEsRUFBRSxDQUFDO1lBQzNDLE9BQU8sQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQ2xDLENBQUM7UUFDRCxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUNsRCxDQUFDO0lBRUQsTUFBTTtRQUNKLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUN4QixJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBQ3hCLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUM7WUFDN0IsQ0FBQztZQUVELG1CQUFtQjtZQUNuQixNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssWUFBWSxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7WUFDeEUsTUFBTSxZQUFZLEdBQUcsR0FBRyxFQUFFLEtBQUs7Z0JBQzdCLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxPQUFPLE9BQU8sR0FBRyxDQUFDLEtBQUssRUFBRTtnQkFDbEMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLE9BQU8sSUFBSSxlQUFlLENBQUMsQ0FBQztZQUV0QyxPQUFPLENBQ0wsS0FBQyxTQUFTLElBQ1IsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxJQUFJLG1CQUFtQixFQUM5QyxPQUFPLEVBQUUsWUFBWSxHQUNyQixDQUNILENBQUM7UUFDSixDQUFDO1FBRUQsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQztJQUM3QixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIGNsaWVudCc7XG5cbmltcG9ydCB0eXBlIHsgUmVhY3ROb2RlIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgQ29tcG9uZW50IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgRXJyb3JDYXJkIH0gZnJvbSAnLi91aS9lcnJvci1jYXJkJztcblxuZXhwb3J0IGludGVyZmFjZSBFcnJvckJvdW5kYXJ5UHJvcHMge1xuICBjaGlsZHJlbjogUmVhY3ROb2RlO1xuICAvKiogT3B0aW9uYWwgZmFsbGJhY2sgVUkgdG8gcmVuZGVyIG9uIGVycm9yLiBXaGVuIG9taXR0ZWQsIGEgZGVmYXVsdCBFcnJvckNhcmQgaXMgc2hvd24uICovXG4gIGZhbGxiYWNrPzogUmVhY3ROb2RlO1xuICAvKiogT3B0aW9uYWwgdGl0bGUgZm9yIHRoZSBkZWZhdWx0IGVycm9yIGNhcmQgKHVzZWQgd2hlbiBubyBmYWxsYmFjayBpcyBwcm92aWRlZCkgKi9cbiAgdGl0bGU/OiBzdHJpbmc7XG4gIC8qKiBPcHRpb25hbCBjYWxsYmFjayB3aGVuIGFuIGVycm9yIGlzIGNhdWdodCAqL1xuICBvbkNhdGNoPzogKGVycm9yOiB1bmtub3duLCByZXRyeTogKCkgPT4gdm9pZCkgPT4gdm9pZDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBFcnJvckJvdW5kYXJ5U3RhdGUge1xuICBoYXNFcnJvcjogYm9vbGVhbjtcbiAgZXJyb3I6IHVua25vd247XG59XG5cbmV4cG9ydCBjbGFzcyBFcnJvckJvdW5kYXJ5IGV4dGVuZHMgQ29tcG9uZW50PFxuICBFcnJvckJvdW5kYXJ5UHJvcHMsXG4gIEVycm9yQm91bmRhcnlTdGF0ZVxuPiB7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBFcnJvckJvdW5kYXJ5UHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5zdGF0ZSA9IHsgaGFzRXJyb3I6IGZhbHNlLCBlcnJvcjogbnVsbCB9O1xuICB9XG5cbiAgc3RhdGljIGdldERlcml2ZWRTdGF0ZUZyb21FcnJvcihlcnJvcjogdW5rbm93bik6IEVycm9yQm91bmRhcnlTdGF0ZSB7XG4gICAgcmV0dXJuIHsgaGFzRXJyb3I6IHRydWUsIGVycm9yIH07XG4gIH1cblxuICByZXRyeSgpOiB2b2lkIHtcbiAgICB0aGlzLnNldFN0YXRlKHsgaGFzRXJyb3I6IGZhbHNlLCBlcnJvcjogbnVsbCB9KTtcbiAgfVxuXG4gIGNvbXBvbmVudERpZENhdGNoKGVycm9yOiB1bmtub3duLCBlcnJvckluZm86IHVua25vd24pOiB2b2lkIHtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdkZXZlbG9wbWVudCcpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IsIGVycm9ySW5mbyk7XG4gICAgfVxuICAgIHRoaXMucHJvcHMub25DYXRjaD8uKGVycm9yLCAoKSA9PiB0aGlzLnJldHJ5KCkpO1xuICB9XG5cbiAgcmVuZGVyKCk6IFJlYWN0Tm9kZSB7XG4gICAgaWYgKHRoaXMuc3RhdGUuaGFzRXJyb3IpIHtcbiAgICAgIGlmICh0aGlzLnByb3BzLmZhbGxiYWNrKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnByb3BzLmZhbGxiYWNrO1xuICAgICAgfVxuXG4gICAgICAvLyBEZWZhdWx0IGVycm9yIFVJXG4gICAgICBjb25zdCBlcnIgPSB0aGlzLnN0YXRlLmVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyB0aGlzLnN0YXRlLmVycm9yIDogbnVsbDtcbiAgICAgIGNvbnN0IGVycm9yRGV0YWlscyA9IGVycj8uc3RhY2tcbiAgICAgICAgPyBgJHtlcnIubWVzc2FnZX1cXG5cXG4ke2Vyci5zdGFja31gXG4gICAgICAgIDogKGVycj8ubWVzc2FnZSA/PyAnVW5rbm93biBlcnJvcicpO1xuXG4gICAgICByZXR1cm4gKFxuICAgICAgICA8RXJyb3JDYXJkXG4gICAgICAgICAgdGl0bGU9e3RoaXMucHJvcHMudGl0bGUgfHwgJ0FuIGVycm9yIG9jY3VycmVkJ31cbiAgICAgICAgICBkZXRhaWxzPXtlcnJvckRldGFpbHN9XG4gICAgICAgIC8+XG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnByb3BzLmNoaWxkcmVuO1xuICB9XG59XG4iXX0=
@@ -1,4 +1,16 @@
1
1
  import type { Event, WorkflowRun } from '@workflow/world';
2
+ export interface DurationInfo {
3
+ /** Time from created → started (ms) */
4
+ queued?: number;
5
+ /** Time from started → completed/failed/cancelled (ms) */
6
+ ran?: number;
7
+ }
8
+ /**
9
+ * Build a map from correlationId → duration info by diffing
10
+ * created ↔ started (queued) and started ↔ completed/failed/cancelled (ran).
11
+ * Also computes run-level durations under the key '__run__'.
12
+ */
13
+ export declare function buildDurationMap(events: Event[]): Map<string, DurationInfo>;
2
14
  interface EventsListProps {
3
15
  events: Event[] | null;
4
16
  run?: WorkflowRun | null;
@@ -1 +1 @@
1
- {"version":3,"file":"event-list-view.d.ts","sourceRoot":"","sources":["../../src/components/event-list-view.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AA0qB1D,UAAU,eAAe;IACvB,MAAM,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC;IACvB,GAAG,CAAC,EAAE,WAAW,GAAG,IAAI,CAAC;IACzB,eAAe,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC;IAC5D,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,gBAAgB,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IAC9C,6FAA6F;IAC7F,aAAa,CAAC,EAAE,UAAU,CAAC;IAC3B,oFAAoF;IACpF,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,gDAAgD;IAChD,SAAS,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC;IAC3B;iFAC6E;IAC7E,iBAAiB,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM,KAAK,IAAI,CAAC;IACpD,sDAAsD;IACtD,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;IACvB,6DAA6D;IAC7D,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,oEAAoE;IACpE,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AAoaD,wBAAgB,aAAa,CAAC,EAC5B,MAAM,EACN,GAAG,EACH,eAAe,EACf,aAAqB,EACrB,mBAA2B,EAC3B,gBAAgB,EAChB,aAAa,EACb,SAAiB,EACjB,SAAS,EAAE,aAAa,EACxB,iBAAiB,EACjB,SAAS,EACT,YAAoB,EACpB,gBAAgB,EAAE,oBAA4B,GAC/C,EAAE,eAAe,2CAqcjB"}
1
+ {"version":3,"file":"event-list-view.d.ts","sourceRoot":"","sources":["../../src/components/event-list-view.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AA6I1D,MAAM,WAAW,YAAY;IAC3B,uCAAuC;IACvC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,0DAA0D;IAC1D,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,CAwE3E;AAydD,UAAU,eAAe;IACvB,MAAM,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC;IACvB,GAAG,CAAC,EAAE,WAAW,GAAG,IAAI,CAAC;IACzB,eAAe,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC;IAC5D,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,gBAAgB,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IAC9C,6FAA6F;IAC7F,aAAa,CAAC,EAAE,UAAU,CAAC;IAC3B,oFAAoF;IACpF,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,gDAAgD;IAChD,SAAS,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC;IAC3B;iFAC6E;IAC7E,iBAAiB,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM,KAAK,IAAI,CAAC;IACpD,sDAAsD;IACtD,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;IACvB,6DAA6D;IAC7D,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,oEAAoE;IACpE,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AAoaD,wBAAgB,aAAa,CAAC,EAC5B,MAAM,EACN,GAAG,EACH,eAAe,EACf,aAAqB,EACrB,mBAA2B,EAC3B,gBAAgB,EAChB,aAAa,EACb,SAAiB,EACjB,SAAS,EAAE,aAAa,EACxB,iBAAiB,EACjB,SAAS,EACT,YAAoB,EACpB,gBAAgB,EAAE,oBAA4B,GAC/C,EAAE,eAAe,2CAqcjB"}
@@ -112,33 +112,46 @@ function buildNameMaps(events, run) {
112
112
  * created ↔ started (queued) and started ↔ completed/failed/cancelled (ran).
113
113
  * Also computes run-level durations under the key '__run__'.
114
114
  */
115
- function buildDurationMap(events) {
115
+ export function buildDurationMap(events) {
116
+ // Process events in chronological order so the result doesn't depend on
117
+ // the caller's sort direction. Retried steps emit multiple `step_started`
118
+ // events for the same correlationId; the queued duration must be measured
119
+ // against the first one, not the last.
120
+ const chronological = [...events].sort((a, b) => new Date(a.createdAt).getTime() - new Date(b.createdAt).getTime());
116
121
  const createdTimes = new Map();
122
+ const firstStartedTimes = new Map();
117
123
  const startedTimes = new Map();
118
124
  const durations = new Map();
119
- for (const event of events) {
125
+ for (const event of chronological) {
120
126
  const ts = new Date(event.createdAt).getTime();
121
127
  const key = event.correlationId ?? '__run__';
122
128
  const type = event.eventType;
123
129
  // Track created times (first event for each correlation)
124
130
  if (type === 'step_created' || type === 'run_created') {
125
- createdTimes.set(key, ts);
131
+ if (!createdTimes.has(key)) {
132
+ createdTimes.set(key, ts);
133
+ }
126
134
  }
127
135
  // Track started times & compute queued duration
128
136
  if (type === 'step_started' ||
129
137
  type === 'run_started' ||
130
138
  type === 'workflow_started') {
131
139
  startedTimes.set(key, ts);
132
- // If no explicit created event was seen, use the started time as created
133
- if (!createdTimes.has(key)) {
134
- createdTimes.set(key, ts);
135
- }
136
- const createdAt = createdTimes.get(key);
137
- const info = durations.get(key) ?? {};
138
- if (createdAt !== undefined) {
139
- info.queued = ts - createdAt;
140
+ // The queued duration is anchored on the first start event only
141
+ // subsequent step_started events come from retries.
142
+ if (!firstStartedTimes.has(key)) {
143
+ firstStartedTimes.set(key, ts);
144
+ // If no explicit created event was seen, use the started time as created
145
+ if (!createdTimes.has(key)) {
146
+ createdTimes.set(key, ts);
147
+ }
148
+ const createdAt = createdTimes.get(key);
149
+ const info = durations.get(key) ?? {};
150
+ if (createdAt !== undefined) {
151
+ info.queued = ts - createdAt;
152
+ }
153
+ durations.set(key, info);
140
154
  }
141
- durations.set(key, info);
142
155
  }
143
156
  // Compute ran duration on terminal events
144
157
  if (type === 'step_completed' ||
@@ -801,4 +814,4 @@ export function EventListView({ events, run, onLoadEventData, hasMoreEvents = fa
801
814
  backgroundColor: 'var(--ds-background-100)',
802
815
  }, children: [_jsxs("span", { children: [sortedEvents.length, " event", sortedEvents.length !== 1 ? 's' : '', " loaded"] }), hasMoreEvents && (_jsx("div", { className: "absolute inset-0 flex items-center justify-center pointer-events-none", children: _jsx("div", { className: "pointer-events-auto", children: _jsx(LoadMoreButton, { loading: isLoadingMoreEvents, onClick: () => void onLoadMoreEvents?.() }) }) }))] })] }) }));
803
816
  }
804
- //# sourceMappingURL=event-list-view.js.map
817
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZlbnQtbGlzdC12aWV3LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbXBvbmVudHMvZXZlbnQtbGlzdC12aWV3LnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZLENBQUM7O0FBRWIsT0FBTyxFQUFFLGFBQWEsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBRTlFLE9BQU8sRUFBRSxLQUFLLEVBQUUsWUFBWSxFQUFFLElBQUksRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUV6RCxPQUFPLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxNQUFNLE9BQU8sQ0FBQztBQUMxRSxPQUFPLEVBQUUsUUFBUSxFQUF1QixNQUFNLGdCQUFnQixDQUFDO0FBQy9ELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNwRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQzlDLE9BQU8sRUFBRSxhQUFhLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN6RSxPQUFPLEVBQ0wsZUFBZSxFQUNmLDBCQUEwQixHQUMzQixNQUFNLHdCQUF3QixDQUFDO0FBQ2hDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDbEQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUUxRDs7R0FFRztBQUNILE1BQU0saUJBQWlCLEdBQUcsSUFBSSxHQUFHLENBQUM7SUFDaEMsYUFBYTtJQUNiLGVBQWU7SUFDZixZQUFZO0lBQ1osaUJBQWlCO0NBQ2xC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QUssRUFBRTt3QkFDTCxXQUFXLEVBQUUsMEJBQTBCO3dCQUN2QyxLQUFLLEVBQUUsb0JBQW9CO3dCQUMzQixlQUFlLEVBQUUsMEJBQTBCO3FCQUM1QyxhQUVELDJCQUNHLFlBQVksQ0FBQyxNQUFNLFlBQ25CLFlBQVksQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsZUFDaEMsRUFDTixhQUFhLElBQUksQ0FDaEIsY0FBSyxTQUFTLEVBQUMsdUVBQXVFLFlBQ3BGLGNBQUssU0FBUyxFQUFDLHFCQUFxQixZQUNsQyxLQUFDLGNBQWMsSUFDYixPQUFPLEVBQUUsbUJBQW1CLEVBQzVCLE9BQU8sRUFBRSxHQUFHLEVBQUUsQ0FBQyxLQUFLLGdCQUFnQixFQUFFLEVBQUUsR0FDeEMsR0FDRSxHQUNGLENBQ1AsSUFDRyxJQUNGLEdBQ3VCLENBQ2hDLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgeyBwYXJzZVN0ZXBOYW1lLCBwYXJzZVdvcmtmbG93TmFtZSB9IGZyb20gJ0B3b3JrZmxvdy91dGlscy9wYXJzZS1uYW1lJztcbmltcG9ydCB0eXBlIHsgRXZlbnQsIFdvcmtmbG93UnVuIH0gZnJvbSAnQHdvcmtmbG93L3dvcmxkJztcbmltcG9ydCB7IENoZWNrLCBDaGV2cm9uUmlnaHQsIENvcHkgfSBmcm9tICdsdWNpZGUtcmVhY3QnO1xuaW1wb3J0IHR5cGUgeyBNb3VzZUV2ZW50IGFzIFJlYWN0TW91c2VFdmVudCwgUmVhY3ROb2RlIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgdXNlQ2FsbGJhY2ssIHVzZUVmZmVjdCwgdXNlTWVtbywgdXNlUmVmLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IFZpcnR1b3NvLCB0eXBlIFZpcnR1b3NvSGFuZGxlIH0gZnJvbSAncmVhY3QtdmlydHVvc28nO1xuaW1wb3J0IHsgaXNFbmNyeXB0ZWRNYXJrZXIgfSBmcm9tICcuLi9saWIvaHlkcmF0aW9uJztcbmltcG9ydCB7IERlY3J5cHRCdXR0b24gfSBmcm9tICcuL3VpL2RlY3J5cHQtYnV0dG9uJztcbmltcG9ydCB7IGZvcm1hdER1cmF0aW9uIH0gZnJvbSAnLi4vbGliL3V0aWxzJztcbmltcG9ydCB7IERhdGFJbnNwZWN0b3IsIERlY3J5cHRDbGlja0NvbnRleHQgfSBmcm9tICcuL3VpL2RhdGEtaW5zcGVjdG9yJztcbmltcG9ydCB7XG4gIEVycm9yU3RhY2tCbG9jayxcbiAgaXNTdHJ1Y3R1cmVkRXJyb3JXaXRoU3RhY2ssXG59IGZyb20gJy4vdWkvZXJyb3Itc3RhY2stYmxvY2snO1xuaW1wb3J0IHsgTG9hZE1vcmVCdXR0b24gfSBmcm9tICcuL3VpL2xvYWQtbW9yZS1idXR0b24nO1xuaW1wb3J0IHsgTWVudURyb3Bkb3duIH0gZnJvbSAnLi91aS9tZW51LWRyb3Bkb3duJztcbmltcG9ydCB7IFNrZWxldG9uIH0gZnJvbSAnLi91aS9za2VsZXRvbic7XG5pbXBvcnQgeyBUaW1lc3RhbXBUb29sdGlwIH0gZnJvbSAnLi91aS90aW1lc3RhbXAtdG9vbHRpcCc7XG5cbi8qKlxuICogRXZlbnQgdHlwZXMgd2hvc2UgZXZlbnREYXRhIGNvbnRhaW5zIGFuIGVycm9yIGZpZWxkIHdpdGggYSBTdHJ1Y3R1cmVkRXJyb3IuXG4gKi9cbmNvbnN0IEVSUk9SX0VWRU5UX1RZUEVTID0gbmV3IFNldChbXG4gICdzdGVwX2ZhaWxlZCcsXG4gICdzdGVwX3JldHJ5aW5nJyxcbiAgJ3J1bl9mYWlsZWQnLFxuICAnd29ya2Zsb3dfZmFpbGVkJyxcbl0pO1xuXG5jb25zdCBCVVRUT05fUkVTRVRfU1RZTEU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gIGFwcGVhcmFuY2U6ICdub25lJyxcbiAgV2Via2l0QXBwZWFyYW5jZTogJ25vbmUnLFxuICBib3JkZXI6ICdub25lJyxcbiAgYmFja2dyb3VuZDogJ3RyYW5zcGFyZW50Jyxcbn07XG5jb25zdCBET1RfUFVMU0VfQU5JTUFUSU9OID1cbiAgJ3dvcmtmbG93LWRvdC1wdWxzZSAxLjI1cyBjdWJpYy1iZXppZXIoMCwgMCwgMC4yLCAxKSBpbmZpbml0ZSc7XG5cbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuLy8gSGVscGVyc1xuLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbmZ1bmN0aW9uIGZvcm1hdEV2ZW50VGltZShkYXRlOiBEYXRlKTogc3RyaW5nIHtcbiAgcmV0dXJuIChcbiAgICBkYXRlLnRvTG9jYWxlVGltZVN0cmluZygnZW4tVVMnLCB7XG4gICAgICBob3VyOiAnMi1kaWdpdCcsXG4gICAgICBtaW51dGU6ICcyLWRpZ2l0JyxcbiAgICAgIHNlY29uZDogJzItZGlnaXQnLFxuICAgICAgaG91cjEyOiBmYWxzZSxcbiAgICB9KSArXG4gICAgJy4nICtcbiAgICBkYXRlLmdldE1pbGxpc2Vjb25kcygpLnRvU3RyaW5nKCkucGFkU3RhcnQoMywgJzAnKVxuICApO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRFdmVudFR5cGUoZXZlbnRUeXBlOiBFdmVudFsnZXZlbnRUeXBlJ10pOiBzdHJpbmcge1xuICByZXR1cm4gZXZlbnRUeXBlXG4gICAgLnNwbGl0KCdfJylcbiAgICAubWFwKCh3b3JkOiBzdHJpbmcpID0+IHdvcmQuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyB3b3JkLnNsaWNlKDEpKVxuICAgIC5qb2luKCcgJyk7XG59XG5cbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuLy8gRXZlbnQgdHlwZSDihpIgc3RhdHVzIGNvbG9yIChzbWFsbCBkb3Qgb25seSlcbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4vKiogUmV0dXJucyBhIENTUyBjb2xvciB1c2luZyBHZWlzdCBkZXNpZ24gdG9rZW5zIGZvciB0aGUgc3RhdHVzIGRvdC4gKi9cbmZ1bmN0aW9uIGdldFN0YXR1c0RvdENvbG9yKGV2ZW50VHlwZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgLy8gRmFpbGVkIOKGkiByZWRcbiAgaWYgKFxuICAgIGV2ZW50VHlwZSA9PT0gJ3N0ZXBfZmFpbGVkJyB8fFxuICAgIGV2ZW50VHlwZSA9PT0gJ3J1bl9mYWlsZWQnIHx8XG4gICAgZXZlbnRUeXBlID09PSAnd29ya2Zsb3dfZmFpbGVkJ1xuICApIHtcbiAgICByZXR1cm4gJ3ZhcigtLWRzLXJlZC03MDApJztcbiAgfVxuICAvLyBDYW5jZWxsZWQg4oaSIGFtYmVyXG4gIGlmIChldmVudFR5cGUgPT09ICdydW5fY2FuY2VsbGVkJykge1xuICAgIHJldHVybiAndmFyKC0tZHMtYW1iZXItNzAwKSc7XG4gIH1cbiAgLy8gUmV0cnlpbmcg4oaSIGFtYmVyXG4gIGlmIChldmVudFR5cGUgPT09ICdzdGVwX3JldHJ5aW5nJykge1xuICAgIHJldHVybiAndmFyKC0tZHMtYW1iZXItNzAwKSc7XG4gIH1cbiAgLy8gQ29tcGxldGVkL3N1Y2NlZWRlZCDihpIgZ3JlZW5cbiAgaWYgKFxuICAgIGV2ZW50VHlwZSA9PT0gJ3N0ZXBfY29tcGxldGVkJyB8fFxuICAgIGV2ZW50VHlwZSA9PT0gJ3J1bl9jb21wbGV0ZWQnIHx8XG4gICAgZXZlbnRUeXBlID09PSAnd29ya2Zsb3dfY29tcGxldGVkJyB8fFxuICAgIGV2ZW50VHlwZSA9PT0gJ2hvb2tfZGlzcG9zZWQnIHx8XG4gICAgZXZlbnRUeXBlID09PSAnd2FpdF9jb21wbGV0ZWQnXG4gICkge1xuICAgIHJldHVybiAndmFyKC0tZHMtZ3JlZW4tNzAwKSc7XG4gIH1cbiAgLy8gU3RhcnRlZC9ydW5uaW5nIOKGkiBibHVlXG4gIGlmIChcbiAgICBldmVudFR5cGUgPT09ICdzdGVwX3N0YXJ0ZWQnIHx8XG4gICAgZXZlbnRUeXBlID09PSAncnVuX3N0YXJ0ZWQnIHx8XG4gICAgZXZlbnRUeXBlID09PSAnd29ya2Zsb3dfc3RhcnRlZCcgfHxcbiAgICBldmVudFR5cGUgPT09ICdob29rX3JlY2VpdmVkJ1xuICApIHtcbiAgICByZXR1cm4gJ3ZhcigtLWRzLWJsdWUtNzAwKSc7XG4gIH1cbiAgLy8gQ3JlYXRlZC9wZW5kaW5nIOKGkiBncmF5XG4gIHJldHVybiAndmFyKC0tZHMtZ3JheS02MDApJztcbn1cblxuLyoqXG4gKiBCdWlsZCBhIG1hcCBmcm9tIGNvcnJlbGF0aW9uSWQgKHN0ZXBJZCkg4oaSIGRpc3BsYXkgbmFtZSB1c2luZyBzdGVwX2NyZWF0ZWRcbiAqIGV2ZW50cywgYW5kIHBhcnNlIHRoZSB3b3JrZmxvdyBuYW1lIGZyb20gdGhlIHJ1bi5cbiAqL1xuZnVuY3Rpb24gYnVpbGROYW1lTWFwcyhcbiAgZXZlbnRzOiBFdmVudFtdIHwgbnVsbCxcbiAgcnVuOiBXb3JrZmxvd1J1biB8IG51bGxcbik6IHtcbiAgY29ycmVsYXRpb25OYW1lTWFwOiBNYXA8c3RyaW5nLCBzdHJpbmc+O1xuICB3b3JrZmxvd05hbWU6IHN0cmluZyB8IG51bGw7XG59IHtcbiAgY29uc3QgY29ycmVsYXRpb25OYW1lTWFwID0gbmV3IE1hcDxzdHJpbmcsIHN0cmluZz4oKTtcblxuICAvLyBNYXAgc3RlcCBjb3JyZWxhdGlvbklkICg9IHN0ZXBJZCkg4oaSIHBhcnNlZCBzdGVwIG5hbWUgZnJvbSBzdGVwX2NyZWF0ZWQgZXZlbnRzXG4gIGlmIChldmVudHMpIHtcbiAgICBmb3IgKGNvbnN0IGV2ZW50IG9mIGV2ZW50cykge1xuICAgICAgaWYgKGV2ZW50LmV2ZW50VHlwZSA9PT0gJ3N0ZXBfY3JlYXRlZCcgJiYgZXZlbnQuY29ycmVsYXRpb25JZCkge1xuICAgICAgICBjb25zdCBzdGVwTmFtZSA9IGV2ZW50LmV2ZW50RGF0YT8uc3RlcE5hbWUgPz8gJyc7XG4gICAgICAgIGNvbnN0IHBhcnNlZCA9IHBhcnNlU3RlcE5hbWUoU3RyaW5nKHN0ZXBOYW1lKSk7XG4gICAgICAgIGNvcnJlbGF0aW9uTmFtZU1hcC5zZXQoXG4gICAgICAgICAgZXZlbnQuY29ycmVsYXRpb25JZCxcbiAgICAgICAgICBwYXJzZWQ/LnNob3J0TmFtZSA/PyBzdGVwTmFtZVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIFBhcnNlIHdvcmtmbG93IG5hbWUgZnJvbSBydW5cbiAgY29uc3Qgd29ya2Zsb3dOYW1lID0gcnVuPy53b3JrZmxvd05hbWVcbiAgICA/IChwYXJzZVdvcmtmbG93TmFtZShydW4ud29ya2Zsb3dOYW1lKT8uc2hvcnROYW1lID8/IHJ1bi53b3JrZmxvd05hbWUpXG4gICAgOiBudWxsO1xuXG4gIHJldHVybiB7IGNvcnJlbGF0aW9uTmFtZU1hcCwgd29ya2Zsb3dOYW1lIH07XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRHVyYXRpb25JbmZvIHtcbiAgLyoqIFRpbWUgZnJvbSBjcmVhdGVkIOKGkiBzdGFydGVkIChtcykgKi9cbiAgcXVldWVkPzogbnVtYmVyO1xuICAvKiogVGltZSBmcm9tIHN0YXJ0ZWQg4oaSIGNvbXBsZXRlZC9mYWlsZWQvY2FuY2VsbGVkIChtcykgKi9cbiAgcmFuPzogbnVtYmVyO1xufVxuXG4vKipcbiAqIEJ1aWxkIGEgbWFwIGZyb20gY29ycmVsYXRpb25JZCDihpIgZHVyYXRpb24gaW5mbyBieSBkaWZmaW5nXG4gKiBjcmVhdGVkIOKGlCBzdGFydGVkIChxdWV1ZWQpIGFuZCBzdGFydGVkIOKGlCBjb21wbGV0ZWQvZmFpbGVkL2NhbmNlbGxlZCAocmFuKS5cbiAqIEFsc28gY29tcHV0ZXMgcnVuLWxldmVsIGR1cmF0aW9ucyB1bmRlciB0aGUga2V5ICdfX3J1bl9fJy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkRHVyYXRpb25NYXAoZXZlbnRzOiBFdmVudFtdKTogTWFwPHN0cmluZywgRHVyYXRpb25JbmZvPiB7XG4gIC8vIFByb2Nlc3MgZXZlbnRzIGluIGNocm9ub2xvZ2ljYWwgb3JkZXIgc28gdGhlIHJlc3VsdCBkb2Vzbid0IGRlcGVuZCBvblxuICAvLyB0aGUgY2FsbGVyJ3Mgc29ydCBkaXJlY3Rpb24uIFJldHJpZWQgc3RlcHMgZW1pdCBtdWx0aXBsZSBgc3RlcF9zdGFydGVkYFxuICAvLyBldmVudHMgZm9yIHRoZSBzYW1lIGNvcnJlbGF0aW9uSWQ7IHRoZSBxdWV1ZWQgZHVyYXRpb24gbXVzdCBiZSBtZWFzdXJlZFxuICAvLyBhZ2FpbnN0IHRoZSBmaXJzdCBvbmUsIG5vdCB0aGUgbGFzdC5cbiAgY29uc3QgY2hyb25vbG9naWNhbCA9IFsuLi5ldmVudHNdLnNvcnQoXG4gICAgKGEsIGIpID0+IG5ldyBEYXRlKGEuY3JlYXRlZEF0KS5nZXRUaW1lKCkgLSBuZXcgRGF0ZShiLmNyZWF0ZWRBdCkuZ2V0VGltZSgpXG4gICk7XG5cbiAgY29uc3QgY3JlYXRlZFRpbWVzID0gbmV3IE1hcDxzdHJpbmcsIG51bWJlcj4oKTtcbiAgY29uc3QgZmlyc3RTdGFydGVkVGltZXMgPSBuZXcgTWFwPHN0cmluZywgbnVtYmVyPigpO1xuICBjb25zdCBzdGFydGVkVGltZXMgPSBuZXcgTWFwPHN0cmluZywgbnVtYmVyPigpO1xuICBjb25zdCBkdXJhdGlvbnMgPSBuZXcgTWFwPHN0cmluZywgRHVyYXRpb25JbmZvPigpO1xuXG4gIGZvciAoY29uc3QgZXZlbnQgb2YgY2hyb25vbG9naWNhbCkge1xuICAgIGNvbnN0IHRzID0gbmV3IERhdGUoZXZlbnQuY3JlYXRlZEF0KS5nZXRUaW1lKCk7XG4gICAgY29uc3Qga2V5ID0gZXZlbnQuY29ycmVsYXRpb25JZCA/PyAnX19ydW5fXyc7XG4gICAgY29uc3QgdHlwZTogc3RyaW5nID0gZXZlbnQuZXZlbnRUeXBlO1xuXG4gICAgLy8gVHJhY2sgY3JlYXRlZCB0aW1lcyAoZmlyc3QgZXZlbnQgZm9yIGVhY2ggY29ycmVsYXRpb24pXG4gICAgaWYgKHR5cGUgPT09ICdzdGVwX2NyZWF0ZWQnIHx8IHR5cGUgPT09ICdydW5fY3JlYXRlZCcpIHtcbiAgICAgIGlmICghY3JlYXRlZFRpbWVzLmhhcyhrZXkpKSB7XG4gICAgICAgIGNyZWF0ZWRUaW1lcy5zZXQoa2V5LCB0cyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gVHJhY2sgc3RhcnRlZCB0aW1lcyAmIGNvbXB1dGUgcXVldWVkIGR1cmF0aW9uXG4gICAgaWYgKFxuICAgICAgdHlwZSA9PT0gJ3N0ZXBfc3RhcnRlZCcgfHxcbiAgICAgIHR5cGUgPT09ICdydW5fc3RhcnRlZCcgfHxcbiAgICAgIHR5cGUgPT09ICd3b3JrZmxvd19zdGFydGVkJ1xuICAgICkge1xuICAgICAgc3RhcnRlZFRpbWVzLnNldChrZXksIHRzKTtcbiAgICAgIC8vIFRoZSBxdWV1ZWQgZHVyYXRpb24gaXMgYW5jaG9yZWQgb24gdGhlIGZpcnN0IHN0YXJ0IGV2ZW50IG9ubHkg4oCUXG4gICAgICAvLyBzdWJzZXF1ZW50IHN0ZXBfc3RhcnRlZCBldmVudHMgY29tZSBmcm9tIHJldHJpZXMuXG4gICAgICBpZiAoIWZpcnN0U3RhcnRlZFRpbWVzLmhhcyhrZXkpKSB7XG4gICAgICAgIGZpcnN0U3RhcnRlZFRpbWVzLnNldChrZXksIHRzKTtcbiAgICAgICAgLy8gSWYgbm8gZXhwbGljaXQgY3JlYXRlZCBldmVudCB3YXMgc2VlbiwgdXNlIHRoZSBzdGFydGVkIHRpbWUgYXMgY3JlYXRlZFxuICAgICAgICBpZiAoIWNyZWF0ZWRUaW1lcy5oYXMoa2V5KSkge1xuICAgICAgICAgIGNyZWF0ZWRUaW1lcy5zZXQoa2V5LCB0cyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY3JlYXRlZEF0ID0gY3JlYXRlZFRpbWVzLmdldChrZXkpO1xuICAgICAgICBjb25zdCBpbmZvID0gZHVyYXRpb25zLmdldChrZXkpID8/IHt9O1xuICAgICAgICBpZiAoY3JlYXRlZEF0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBpbmZvLnF1ZXVlZCA9IHRzIC0gY3JlYXRlZEF0O1xuICAgICAgICB9XG4gICAgICAgIGR1cmF0aW9ucy5zZXQoa2V5LCBpbmZvKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBDb21wdXRlIHJhbiBkdXJhdGlvbiBvbiB0ZXJtaW5hbCBldmVudHNcbiAgICBpZiAoXG4gICAgICB0eXBlID09PSAnc3RlcF9jb21wbGV0ZWQnIHx8XG4gICAgICB0eXBlID09PSAnc3RlcF9mYWlsZWQnIHx8XG4gICAgICB0eXBlID09PSAncnVuX2NvbXBsZXRlZCcgfHxcbiAgICAgIHR5cGUgPT09ICdydW5fZmFpbGVkJyB8fFxuICAgICAgdHlwZSA9PT0gJ3J1bl9jYW5jZWxsZWQnIHx8XG4gICAgICB0eXBlID09PSAnd29ya2Zsb3dfY29tcGxldGVkJyB8fFxuICAgICAgdHlwZSA9PT0gJ3dvcmtmbG93X2ZhaWxlZCcgfHxcbiAgICAgIHR5cGUgPT09ICd3YWl0X2NvbXBsZXRlZCcgfHxcbiAgICAgIHR5cGUgPT09ICdob29rX2Rpc3Bvc2VkJ1xuICAgICkge1xuICAgICAgY29uc3Qgc3RhcnRlZEF0ID0gc3RhcnRlZFRpbWVzLmdldChrZXkpO1xuICAgICAgY29uc3QgaW5mbyA9IGR1cmF0aW9ucy5nZXQoa2V5KSA/PyB7fTtcbiAgICAgIGlmIChzdGFydGVkQXQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpbmZvLnJhbiA9IHRzIC0gc3RhcnRlZEF0O1xuICAgICAgfVxuICAgICAgZHVyYXRpb25zLnNldChrZXksIGluZm8pO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBkdXJhdGlvbnM7XG59XG5cbi8qKiBDaGVjayBpZiBhIGxvYWRlZCBldmVudERhdGEgb2JqZWN0IGNvbnRhaW5zIGFueSBlbmNyeXB0ZWQgbWFya2VyIHZhbHVlcy4gKi9cbmZ1bmN0aW9uIGhhc0VuY3J5cHRlZFZhbHVlcyhkYXRhOiB1bmtub3duKTogYm9vbGVhbiB7XG4gIGlmICghZGF0YSB8fCB0eXBlb2YgZGF0YSAhPT0gJ29iamVjdCcpIHJldHVybiBmYWxzZTtcbiAgZm9yIChjb25zdCB2YWwgb2YgT2JqZWN0LnZhbHVlcyhkYXRhIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KSkge1xuICAgIGlmIChpc0VuY3J5cHRlZE1hcmtlcih2YWwpKSByZXR1cm4gdHJ1ZTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGlzUnVuTGV2ZWwoZXZlbnRUeXBlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgcmV0dXJuIChcbiAgICBldmVudFR5cGUgPT09ICdydW5fY3JlYXRlZCcgfHxcbiAgICBldmVudFR5cGUgPT09ICdydW5fc3RhcnRlZCcgfHxcbiAgICBldmVudFR5cGUgPT09ICdydW5fY29tcGxldGVkJyB8fFxuICAgIGV2ZW50VHlwZSA9PT0gJ3J1bl9mYWlsZWQnIHx8XG4gICAgZXZlbnRUeXBlID09PSAncnVuX2NhbmNlbGxlZCcgfHxcbiAgICBldmVudFR5cGUgPT09ICd3b3JrZmxvd19zdGFydGVkJyB8fFxuICAgIGV2ZW50VHlwZSA9PT0gJ3dvcmtmbG93X2NvbXBsZXRlZCcgfHxcbiAgICBldmVudFR5cGUgPT09ICd3b3JrZmxvd19mYWlsZWQnXG4gICk7XG59XG5cbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuLy8gVHJlZSBndXR0ZXIg4oCUIGZpeGVkLXdpZHRoLCBzaG93cyBicmFuY2ggbGluZXMgb25seSBmb3IgdGhlIHNlbGVjdGVkIGdyb3VwXG4vLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuLyoqIEZpeGVkIGd1dHRlciB3aWR0aDogMjBweCByb290IGFyZWEgKyAxNnB4IGZvciBvbmUgYnJhbmNoIGxhbmUgKi9cbmNvbnN0IEdVVFRFUl9XSURUSCA9IDM2O1xuLyoqIFggcG9zaXRpb24gb2YgdGhlIHNpbmdsZSBicmFuY2ggbGFuZSBsaW5lICovXG5jb25zdCBMQU5FX1ggPSAyMDtcbmNvbnN0IFJPT1RfTElORV9DT0xPUiA9ICd2YXIoLS1kcy1ncmF5LTUwMCknO1xuXG5mdW5jdGlvbiBUcmVlR3V0dGVyKHtcbiAgaXNGaXJzdCxcbiAgaXNMYXN0LFxuICBpc1J1bkxldmVsOiBpc1J1bixcbiAgc3RhdHVzRG90Q29sb3IsXG4gIHB1bHNlID0gZmFsc2UsXG4gIGhhc1NlbGVjdGlvbixcbiAgc2hvd0JyYW5jaCxcbiAgc2hvd0xhbmVMaW5lLFxuICBpc0xhbmVTdGFydCxcbiAgaXNMYW5lRW5kLFxuICBjb250aW51YXRpb25Pbmx5ID0gZmFsc2UsXG59OiB7XG4gIGlzRmlyc3Q6IGJvb2xlYW47XG4gIGlzTGFzdDogYm9vbGVhbjtcbiAgaXNSdW5MZXZlbDogYm9vbGVhbjtcbiAgc3RhdHVzRG90Q29sb3I/OiBzdHJpbmc7XG4gIHB1bHNlPzogYm9vbGVhbjtcbiAgLyoqIFdoZXRoZXIgYW55IGdyb3VwIGlzIGN1cnJlbnRseSBhY3RpdmUgKHNlbGVjdGVkIG9yIGhvdmVyZWQpICovXG4gIGhhc1NlbGVjdGlvbjogYm9vbGVhbjtcbiAgLyoqIFdoZXRoZXIgdG8gc2hvdyBhIGhvcml6b250YWwgYnJhbmNoIGxpbmUgZm9yIHRoaXMgcm93IChldmVudCBiZWxvbmdzIHRvIGFjdGl2ZSBncm91cCkgKi9cbiAgc2hvd0JyYW5jaDogYm9vbGVhbjtcbiAgLyoqIFdoZXRoZXIgdGhlIHZlcnRpY2FsIGxhbmUgbGluZSBwYXNzZXMgdGhyb3VnaCB0aGlzIHJvdyAqL1xuICBzaG93TGFuZUxpbmU6IGJvb2xlYW47XG4gIC8qKiBXaGV0aGVyIHRoZSB2ZXJ0aWNhbCBsYW5lIGxpbmUgc3RhcnRzIGF0IHRoaXMgcm93ICh0b3AgY2xpcHBlZCB0byA1MCUpICovXG4gIGlzTGFuZVN0YXJ0OiBib29sZWFuO1xuICAvKiogV2hldGhlciB0aGUgdmVydGljYWwgbGFuZSBsaW5lIGVuZHMgYXQgdGhpcyByb3cgKGJvdHRvbSBjbGlwcGVkIHRvIDUwJSkgKi9cbiAgaXNMYW5lRW5kOiBib29sZWFuO1xuICBjb250aW51YXRpb25Pbmx5PzogYm9vbGVhbjtcbn0pIHtcbiAgY29uc3QgZG90U2l6ZSA9IGlzUnVuID8gOCA6IDY7XG4gIGNvbnN0IGRvdExlZnQgPSBpc1J1biA/IDUgOiA2O1xuICBjb25zdCBkb3RPcGFjaXR5ID0gaGFzU2VsZWN0aW9uICYmICFzaG93QnJhbmNoICYmICFpc1J1biA/IDAuMyA6IDE7XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICBjbGFzc05hbWU9XCJyZWxhdGl2ZSBmbGV4LXNocmluay0wIHNlbGYtc3RyZXRjaFwiXG4gICAgICBzdHlsZT17e1xuICAgICAgICB3aWR0aDogR1VUVEVSX1dJRFRILFxuICAgICAgICBtaW5IZWlnaHQ6IGNvbnRpbnVhdGlvbk9ubHkgPyAwIDogdW5kZWZpbmVkLFxuICAgICAgfX1cbiAgICA+XG4gICAgICB7LyogUm9vdCB2ZXJ0aWNhbCBsaW5lIChsZWZ0bW9zdCwgYWx3YXlzIHZpc2libGUpICovfVxuICAgICAgPGRpdlxuICAgICAgICBzdHlsZT17e1xuICAgICAgICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgICAgICAgIGxlZnQ6IDgsXG4gICAgICAgICAgdG9wOiBjb250aW51YXRpb25Pbmx5ID8gMCA6IGlzRmlyc3QgPyAnNTAlJyA6IDAsXG4gICAgICAgICAgYm90dG9tOiBjb250aW51YXRpb25Pbmx5ID8gMCA6IGlzTGFzdCA/ICc1MCUnIDogMCxcbiAgICAgICAgICB3aWR0aDogMixcbiAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IFJPT1RfTElORV9DT0xPUixcbiAgICAgICAgICB6SW5kZXg6IDAsXG4gICAgICAgIH19XG4gICAgICAvPlxuXG4gICAgICB7IWNvbnRpbnVhdGlvbk9ubHkgJiYgKFxuICAgICAgICA8PlxuICAgICAgICAgIHsvKiBTdGF0dXMgZG90IG9uIHRoZSByb290IGxpbmUgZm9yIGV2ZXJ5IGV2ZW50ICovfVxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgICAgICAgICAgICBsZWZ0OiBkb3RMZWZ0LFxuICAgICAgICAgICAgICB0b3A6ICc1MCUnLFxuICAgICAgICAgICAgICB0cmFuc2Zvcm06ICd0cmFuc2xhdGVZKC01MCUpJyxcbiAgICAgICAgICAgICAgd2lkdGg6IGRvdFNpemUsXG4gICAgICAgICAgICAgIGhlaWdodDogZG90U2l6ZSxcbiAgICAgICAgICAgICAgekluZGV4OiAyLFxuICAgICAgICAgICAgfX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICB7LyogT3BhcXVlIGJhY2tkcm9wIGVuc3VyZXMgZ3V0dGVyIGxpbmVzIG5ldmVyIHZpc3VhbGx5IGN1dCB0aHJvdWdoIGRvdHMgKi99XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgICAgICAgICAgICAgaW5zZXQ6IDAsXG4gICAgICAgICAgICAgICAgYm9yZGVyUmFkaXVzOiAnNTAlJyxcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6ICd2YXIoLS1kcy1iYWNrZ3JvdW5kLTEwMCknLFxuICAgICAgICAgICAgICAgIHpJbmRleDogMCxcbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICB7cHVsc2UgJiYgKFxuICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgICAgICAgICAgICAgICAgaW5zZXQ6IDAsXG4gICAgICAgICAgICAgICAgICBib3JkZXJSYWRpdXM6ICc1MCUnLFxuICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiBzdGF0dXNEb3RDb2xvcixcbiAgICAgICAgICAgICAgICAgIG9wYWNpdHk6IDAuNzUgKiBkb3RPcGFjaXR5LFxuICAgICAgICAgICAgICAgICAgYW5pbWF0aW9uOiBET1RfUFVMU0VfQU5JTUFUSU9OLFxuICAgICAgICAgICAgICAgICAgekluZGV4OiAxLFxuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICApfVxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICAgIHBvc2l0aW9uOiAncmVsYXRpdmUnLFxuICAgICAgICAgICAgICAgIHdpZHRoOiAnMTAwJScsXG4gICAgICAgICAgICAgICAgaGVpZ2h0OiAnMTAwJScsXG4gICAgICAgICAgICAgICAgYm9yZGVyUmFkaXVzOiAnNTAlJyxcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IHN0YXR1c0RvdENvbG9yLFxuICAgICAgICAgICAgICAgIG9wYWNpdHk6IGRvdE9wYWNpdHksXG4gICAgICAgICAgICAgICAgdHJhbnNpdGlvbjogJ29wYWNpdHkgMTUwbXMnLFxuICAgICAgICAgICAgICAgIHpJbmRleDogMixcbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICB7LyogSG9yaXpvbnRhbCBicmFuY2ggZnJvbSByb290IHRvIGd1dHRlciBlZGdlIChzZWxlY3RlZCBncm91cCBldmVudHMgb25seSkgKi99XG4gICAgICAgICAge3Nob3dCcmFuY2ggJiYgKFxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgICAgICAgICAgICAgIGxlZnQ6IDksXG4gICAgICAgICAgICAgICAgdG9wOiAnNTAlJyxcbiAgICAgICAgICAgICAgICB3aWR0aDogR1VUVEVSX1dJRFRIIC0gOSxcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IDIsXG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiBST09UX0xJTkVfQ09MT1IsXG4gICAgICAgICAgICAgICAgekluZGV4OiAwLFxuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApfVxuICAgICAgICA8Lz5cbiAgICAgICl9XG5cbiAgICAgIHsvKiBWZXJ0aWNhbCBsYW5lIGxpbmUgY29ubmVjdGluZyB0aGUgc2VsZWN0ZWQgZ3JvdXAncyBldmVudHMgKi99XG4gICAgICB7c2hvd0xhbmVMaW5lICYmIChcbiAgICAgICAgPGRpdlxuICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICAgICAgICAgIGxlZnQ6IExBTkVfWCxcbiAgICAgICAgICAgIHRvcDogY29udGludWF0aW9uT25seSA/IDAgOiBpc0xhbmVTdGFydCA/ICc1MCUnIDogMCxcbiAgICAgICAgICAgIGJvdHRvbTogY29udGludWF0aW9uT25seSA/IDAgOiBpc0xhbmVFbmQgPyAnNTAlJyA6IDAsXG4gICAgICAgICAgICB3aWR0aDogMixcbiAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogUk9PVF9MSU5FX0NPTE9SLFxuICAgICAgICAgICAgekluZGV4OiAwLFxuICAgICAgICAgIH19XG4gICAgICAgIC8+XG4gICAgICApfVxuICAgIDwvZGl2PlxuICApO1xufVxuXG4vLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbi8vIENvcHlhYmxlIGNlbGwg4oCUIHNob3dzIGEgY29weSBidXR0b24gb24gaG92ZXJcbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG5mdW5jdGlvbiBDb3B5YWJsZUNlbGwoe1xuICB2YWx1ZSxcbiAgY2xhc3NOYW1lLFxuICBzdHlsZTogc3R5bGVQcm9wLFxufToge1xuICB2YWx1ZTogc3RyaW5nO1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gIHN0eWxlPzogUmVhY3QuQ1NTUHJvcGVydGllcztcbn0pOiBSZWFjdE5vZGUge1xuICBjb25zdCBbY29waWVkLCBzZXRDb3BpZWRdID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCByZXNldENvcGllZFRpbWVvdXRSZWYgPSB1c2VSZWY8bnVtYmVyIHwgbnVsbD4obnVsbCk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgaWYgKHJlc2V0Q29waWVkVGltZW91dFJlZi5jdXJyZW50ICE9PSBudWxsKSB7XG4gICAgICAgIHdpbmRvdy5jbGVhclRpbWVvdXQocmVzZXRDb3BpZWRUaW1lb3V0UmVmLmN1cnJlbnQpO1xuICAgICAgfVxuICAgIH07XG4gIH0sIFtdKTtcblxuICBjb25zdCBoYW5kbGVDb3B5ID0gdXNlQ2FsbGJhY2soXG4gICAgKGU6IFJlYWN0TW91c2VFdmVudCkgPT4ge1xuICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIG5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KHZhbHVlKS50aGVuKCgpID0+IHtcbiAgICAgICAgc2V0Q29waWVkKHRydWUpO1xuICAgICAgICBpZiAocmVzZXRDb3BpZWRUaW1lb3V0UmVmLmN1cnJlbnQgIT09IG51bGwpIHtcbiAgICAgICAgICB3aW5kb3cuY2xlYXJUaW1lb3V0KHJlc2V0Q29waWVkVGltZW91dFJlZi5jdXJyZW50KTtcbiAgICAgICAgfVxuICAgICAgICByZXNldENvcGllZFRpbWVvdXRSZWYuY3VycmVudCA9IHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICBzZXRDb3BpZWQoZmFsc2UpO1xuICAgICAgICAgIHJlc2V0Q29waWVkVGltZW91dFJlZi5jdXJyZW50ID0gbnVsbDtcbiAgICAgICAgfSwgMTUwMCk7XG4gICAgICB9KTtcbiAgICB9LFxuICAgIFt2YWx1ZV1cbiAgKTtcblxuICByZXR1cm4gKFxuICAgIDxkaXZcbiAgICAgIGNsYXNzTmFtZT17YGdyb3VwL2NvcHkgZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTEgbWluLXctMCBweC00ICR7Y2xhc3NOYW1lID8/ICcnfWB9XG4gICAgICBzdHlsZT17c3R5bGVQcm9wfVxuICAgID5cbiAgICAgIDxzcGFuIGNsYXNzTmFtZT1cIm92ZXJmbG93LWhpZGRlbiB0ZXh0LWVsbGlwc2lzIHdoaXRlc3BhY2Utbm93cmFwXCI+XG4gICAgICAgIHt2YWx1ZSB8fCAnLSd9XG4gICAgICA8L3NwYW4+XG4gICAgICB7dmFsdWUgPyAoXG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICBvbkNsaWNrPXtoYW5kbGVDb3B5fVxuICAgICAgICAgIGNsYXNzTmFtZT1cImZsZXgtc2hyaW5rLTAgb3BhY2l0eS0wIGdyb3VwLWhvdmVyL2NvcHk6b3BhY2l0eS0xMDAgdHJhbnNpdGlvbi1vcGFjaXR5IHAtMC41IHJvdW5kZWQgaG92ZXI6YmctW3ZhcigtLWRzLWdyYXktYWxwaGEtMjAwKV1cIlxuICAgICAgICAgIHN0eWxlPXtCVVRUT05fUkVTRVRfU1RZTEV9XG4gICAgICAgICAgYXJpYS1sYWJlbD17YENvcHkgJHt2YWx1ZX1gfVxuICAgICAgICA+XG4gICAgICAgICAge2NvcGllZCA/IChcbiAgICAgICAgICAgIDxDaGVja1xuICAgICAgICAgICAgICBjbGFzc05hbWU9XCJoLTMgdy0zXCJcbiAgICAgICAgICAgICAgc3R5bGU9e3sgY29sb3I6ICd2YXIoLS1kcy1ncmVlbi03MDApJyB9fVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApIDogKFxuICAgICAgICAgICAgPENvcHkgY2xhc3NOYW1lPVwiaC0zIHctM1wiIHN0eWxlPXt7IGNvbG9yOiAndmFyKC0tZHMtZ3JheS03MDApJyB9fSAvPlxuICAgICAgICAgICl9XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgKSA6IG51bGx9XG4gICAgPC9kaXY+XG4gICk7XG59XG5cbi8qKiBSZWN1cnNpdmVseSBwYXJzZSBzdHJpbmdpZmllZCBKU09OIHZhbHVlcyBzbyBlc2NhcGVkIHNsYXNoZXMgLyBxdW90ZXMgYXJlIGNsZWFuZWQgdXAgKi9cbmZ1bmN0aW9uIGRlZXBQYXJzZUpzb24odmFsdWU6IHVua25vd24pOiB1bmtub3duIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICBjb25zdCB0cmltbWVkID0gdmFsdWUudHJpbSgpO1xuICAgIGlmIChcbiAgICAgICh0cmltbWVkLnN0YXJ0c1dpdGgoJ3snKSAmJiB0cmltbWVkLmVuZHNXaXRoKCd9JykpIHx8XG4gICAgICAodHJpbW1lZC5zdGFydHNXaXRoKCdbJykgJiYgdHJpbW1lZC5lbmRzV2l0aCgnXScpKSB8fFxuICAgICAgKHRyaW1tZWQuc3RhcnRzV2l0aCgnXCInKSAmJiB0cmltbWVkLmVuZHNXaXRoKCdcIicpKVxuICAgICkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIGRlZXBQYXJzZUpzb24oSlNPTi5wYXJzZSh0cmltbWVkKSk7XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbiAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgcmV0dXJuIHZhbHVlLm1hcChkZWVwUGFyc2VKc29uKTtcbiAgfVxuICBpZiAodmFsdWUgIT09IG51bGwgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0Jykge1xuICAgIC8vIFByZXNlcnZlIG9iamVjdHMgd2l0aCBjdXN0b20gY29uc3RydWN0b3JzIChlLmcuLCBlbmNyeXB0ZWQgbWFya2VycyxcbiAgICAvLyBjbGFzcyBpbnN0YW5jZSByZWZzKSDigJQgZG9uJ3QgZGVzdHJ1Y3R1cmUgdGhlbSBpbnRvIHBsYWluIG9iamVjdHNcbiAgICBpZiAodmFsdWUuY29uc3RydWN0b3IgIT09IE9iamVjdCkge1xuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cbiAgICBjb25zdCByZXN1bHQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge307XG4gICAgZm9yIChjb25zdCBbaywgdl0gb2YgT2JqZWN0LmVudHJpZXModmFsdWUpKSB7XG4gICAgICByZXN1bHRba10gPSBkZWVwUGFyc2VKc29uKHYpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG4gIHJldHVybiB2YWx1ZTtcbn1cblxuLyoqXG4gKiBFeHRyYWN0cyBhIHN0cnVjdHVyZWQgZXJyb3Igd2l0aCBhIHN0YWNrIHRyYWNlIGZyb20gZXZlbnQgZGF0YSwgaWYgcHJlc2VudC5cbiAqIFJldHVybnMgdGhlIGVycm9yIG9iamVjdCB0byByZW5kZXIgd2l0aCBFcnJvclN0YWNrQmxvY2ssIG9yIG51bGwgaWYgbm90IGFwcGxpY2FibGUuXG4gKi9cbmZ1bmN0aW9uIGV4dHJhY3RTdHJ1Y3R1cmVkRXJyb3IoXG4gIGRhdGE6IHVua25vd24sXG4gIGV2ZW50VHlwZT86IHN0cmluZ1xuKTogKFJlY29yZDxzdHJpbmcsIHVua25vd24+ICYgeyBzdGFjazogc3RyaW5nIH0pIHwgbnVsbCB7XG4gIGlmICghZXZlbnRUeXBlIHx8ICFFUlJPUl9FVkVOVF9UWVBFUy5oYXMoZXZlbnRUeXBlKSkgcmV0dXJuIG51bGw7XG4gIGlmIChkYXRhID09IG51bGwgfHwgdHlwZW9mIGRhdGEgIT09ICdvYmplY3QnKSByZXR1cm4gbnVsbDtcbiAgY29uc3QgcmVjb3JkID0gZGF0YSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgLy8gQ2hlY2sgdGhlIG5lc3RlZCBgZXJyb3JgIGZpZWxkIGZpcnN0ICh0aGUgU3RydWN0dXJlZEVycm9yKVxuICBpZiAoaXNTdHJ1Y3R1cmVkRXJyb3JXaXRoU3RhY2socmVjb3JkLmVycm9yKSkgcmV0dXJuIHJlY29yZC5lcnJvcjtcbiAgLy8gU29tZSBlcnJvciBmb3JtYXRzIHB1dCB0aGUgc3RhY2sgYXQgdGhlIHRvcCBsZXZlbCBvZiBldmVudERhdGFcbiAgaWYgKGlzU3RydWN0dXJlZEVycm9yV2l0aFN0YWNrKHJlY29yZCkpIHJldHVybiByZWNvcmQ7XG4gIHJldHVybiBudWxsO1xufVxuXG5mdW5jdGlvbiBQYXlsb2FkQmxvY2soe1xuICBkYXRhLFxuICBldmVudFR5cGUsXG59OiB7XG4gIGRhdGE6IHVua25vd247XG4gIGV2ZW50VHlwZT86IHN0cmluZztcbn0pOiBSZWFjdE5vZGUge1xuICBjb25zdCBzdHJ1Y3R1cmVkRXJyb3IgPSB1c2VNZW1vKFxuICAgICgpID0+IGV4dHJhY3RTdHJ1Y3R1cmVkRXJyb3IoZGF0YSwgZXZlbnRUeXBlKSxcbiAgICBbZGF0YSwgZXZlbnRUeXBlXVxuICApO1xuXG4gIGNvbnN0IFtjb3BpZWQsIHNldENvcGllZF0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IHJlc2V0Q29waWVkVGltZW91dFJlZiA9IHVzZVJlZjxudW1iZXIgfCBudWxsPihudWxsKTtcbiAgY29uc3QgY2xlYW5lZCA9IHVzZU1lbW8oKCkgPT4gZGVlcFBhcnNlSnNvbihkYXRhKSwgW2RhdGFdKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBpZiAocmVzZXRDb3BpZWRUaW1lb3V0UmVmLmN1cnJlbnQgIT09IG51bGwpIHtcbiAgICAgICAgd2luZG93LmNsZWFyVGltZW91dChyZXNldENvcGllZFRpbWVvdXRSZWYuY3VycmVudCk7XG4gICAgICB9XG4gICAgfTtcbiAgfSwgW10pO1xuXG4gIGNvbnN0IGZvcm1hdHRlZCA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoY2xlYW5lZCwgbnVsbCwgMik7XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm4gU3RyaW5nKGNsZWFuZWQpO1xuICAgIH1cbiAgfSwgW2NsZWFuZWRdKTtcblxuICBjb25zdCBoYW5kbGVDb3B5ID0gdXNlQ2FsbGJhY2soXG4gICAgKGU6IFJlYWN0TW91c2VFdmVudCkgPT4ge1xuICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIG5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KGZvcm1hdHRlZCkudGhlbigoKSA9PiB7XG4gICAgICAgIHNldENvcGllZCh0cnVlKTtcbiAgICAgICAgaWYgKHJlc2V0Q29waWVkVGltZW91dFJlZi5jdXJyZW50ICE9PSBudWxsKSB7XG4gICAgICAgICAgd2luZG93LmNsZWFyVGltZW91dChyZXNldENvcGllZFRpbWVvdXRSZWYuY3VycmVudCk7XG4gICAgICAgIH1cbiAgICAgICAgcmVzZXRDb3BpZWRUaW1lb3V0UmVmLmN1cnJlbnQgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgc2V0Q29waWVkKGZhbHNlKTtcbiAgICAgICAgICByZXNldENvcGllZFRpbWVvdXRSZWYuY3VycmVudCA9IG51bGw7XG4gICAgICAgIH0sIDE1MDApO1xuICAgICAgfSk7XG4gICAgfSxcbiAgICBbZm9ybWF0dGVkXVxuICApO1xuXG4gIGlmIChzdHJ1Y3R1cmVkRXJyb3IpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJwLTJcIj5cbiAgICAgICAgPEVycm9yU3RhY2tCbG9jayB2YWx1ZT17c3RydWN0dXJlZEVycm9yfSAvPlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9XCJyZWxhdGl2ZSBncm91cC9wYXlsb2FkXCI+XG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzTmFtZT1cIm92ZXJmbG93LXgtYXV0byBwLTIgdGV4dC1bMTFweF1cIlxuICAgICAgICBzdHlsZT17eyBjb2xvcjogJ3ZhcigtLWRzLWdyYXktMTAwMCknIH19XG4gICAgICA+XG4gICAgICAgIDxEYXRhSW5zcGVjdG9yIGRhdGE9e2NsZWFuZWR9IGV4cGFuZExldmVsPXsyfSAvPlxuICAgICAgPC9kaXY+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICBvbkNsaWNrPXtoYW5kbGVDb3B5fVxuICAgICAgICBjbGFzc05hbWU9XCJhYnNvbHV0ZSBib3R0b20tMiByaWdodC0yIG9wYWNpdHktMCBncm91cC1ob3Zlci9wYXlsb2FkOm9wYWNpdHktMTAwIHRyYW5zaXRpb24tb3BhY2l0eSBmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMSBweC0yIHB5LTEgcm91bmRlZC1tZCB0ZXh0LXhzIGhvdmVyOmJnLVt2YXIoLS1kcy1ncmF5LWFscGhhLTIwMCldXCJcbiAgICAgICAgc3R5bGU9e3sgLi4uQlVUVE9OX1JFU0VUX1NUWUxFLCBjb2xvcjogJ3ZhcigtLWRzLWdyYXktNzAwKScgfX1cbiAgICAgICAgYXJpYS1sYWJlbD1cIkNvcHkgcGF5bG9hZFwiXG4gICAgICA+XG4gICAgICAgIHtjb3BpZWQgPyAoXG4gICAgICAgICAgPD5cbiAgICAgICAgICAgIDxDaGVja1xuICAgICAgICAgICAgICBjbGFzc05hbWU9XCJoLTMgdy0zXCJcbiAgICAgICAgICAgICAgc3R5bGU9e3sgY29sb3I6ICd2YXIoLS1kcy1ncmVlbi03MDApJyB9fVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDxzcGFuIHN0eWxlPXt7IGNvbG9yOiAndmFyKC0tZHMtZ3JlZW4tNzAwKScgfX0+Q29waWVkPC9zcGFuPlxuICAgICAgICAgIDwvPlxuICAgICAgICApIDogKFxuICAgICAgICAgIDw+XG4gICAgICAgICAgICA8Q29weSBjbGFzc05hbWU9XCJoLTMgdy0zXCIgLz5cbiAgICAgICAgICAgIDxzcGFuPkNvcHk8L3NwYW4+XG4gICAgICAgICAgPC8+XG4gICAgICAgICl9XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgKTtcbn1cblxuLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4vLyBTb3J0IG9wdGlvbnMgZm9yIHRoZSBldmVudHMgbGlzdFxuLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbmNvbnN0IFNPUlRfT1BUSU9OUyA9IFtcbiAgeyB2YWx1ZTogJ2Rlc2MnIGFzIGNvbnN0LCBsYWJlbDogJ05ld2VzdCcgfSxcbiAgeyB2YWx1ZTogJ2FzYycgYXMgY29uc3QsIGxhYmVsOiAnT2xkZXN0JyB9LFxuXTtcblxuZnVuY3Rpb24gUm93c1NrZWxldG9uKCkge1xuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleC0xIG92ZXJmbG93LWhpZGRlblwiPlxuICAgICAge0FycmF5LmZyb20oeyBsZW5ndGg6IDE2IH0sIChfLCBpKSA9PiAoXG4gICAgICAgIDxkaXYga2V5PXtpfSBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMFwiIHN0eWxlPXt7IGhlaWdodDogNDAgfX0+XG4gICAgICAgICAgey8qIEd1dHRlciBhcmVhICovfVxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzTmFtZT1cInJlbGF0aXZlIGZsZXgtc2hyaW5rLTAgc2VsZi1zdHJldGNoIGZsZXggaXRlbXMtY2VudGVyXCJcbiAgICAgICAgICAgIHN0eWxlPXt7IHdpZHRoOiBHVVRURVJfV0lEVEggfX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICB7LyogVmVydGljYWwgbGluZSBza2VsZXRvbiAqL31cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICAgICAgICAgICAgICBsZWZ0OiA4LFxuICAgICAgICAgICAgICAgIHRvcDogaSA9PT0gMCA/ICc1MCUnIDogMCxcbiAgICAgICAgICAgICAgICBib3R0b206IDAsXG4gICAgICAgICAgICAgICAgd2lkdGg6IDIsXG4gICAgICAgICAgICAgIH19XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxTa2VsZXRvbiBjbGFzc05hbWU9XCJ3LWZ1bGwgaC1mdWxsXCIgc3R5bGU9e3sgYm9yZGVyUmFkaXVzOiAxIH19IC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIHsvKiBEb3Qgc2tlbGV0b24gKi99XG4gICAgICAgICAgICA8U2tlbGV0b25cbiAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiZmxleC1zaHJpbmstMFwiXG4gICAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgd2lkdGg6IGkgJSA0ID09PSAwID8gOCA6IDYsXG4gICAgICAgICAgICAgICAgaGVpZ2h0OiBpICUgNCA9PT0gMCA/IDggOiA2LFxuICAgICAgICAgICAgICAgIGJvcmRlclJhZGl1czogJzUwJScsXG4gICAgICAgICAgICAgICAgbWFyZ2luTGVmdDogaSAlIDQgPT09IDAgPyA1IDogNixcbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgey8qIENoZXZyb24gcGxhY2Vob2xkZXIgKi99XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ3LTUgZmxleC1zaHJpbmstMCBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlclwiPlxuICAgICAgICAgICAgPFNrZWxldG9uIGNsYXNzTmFtZT1cInctNSBoLTVcIiBzdHlsZT17eyBib3JkZXJSYWRpdXM6IDQgfX0gLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICB7LyogVGltZSAqL31cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm1pbi13LTAgcHgtNFwiIHN0eWxlPXt7IGZsZXg6ICcyIDEgMCUnIH19PlxuICAgICAgICAgICAgPFNrZWxldG9uIGNsYXNzTmFtZT1cImgtM1wiIHN0eWxlPXt7IHdpZHRoOiAnNzAlJyB9fSAvPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIHsvKiBFdmVudCBUeXBlICovfVxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzTmFtZT1cIm1pbi13LTAgcHgtNCBmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMS41XCJcbiAgICAgICAgICAgIHN0eWxlPXt7IGZsZXg6ICcyIDEgMCUnIH19XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPFNrZWxldG9uXG4gICAgICAgICAgICAgIGNsYXNzTmFtZT1cImZsZXgtc2hyaW5rLTBcIlxuICAgICAgICAgICAgICBzdHlsZT17eyB3aWR0aDogNiwgaGVpZ2h0OiA2LCBib3JkZXJSYWRpdXM6ICc1MCUnIH19XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPFNrZWxldG9uIGNsYXNzTmFtZT1cImgtM1wiIHN0eWxlPXt7IHdpZHRoOiAnNjAlJyB9fSAvPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIHsvKiBOYW1lICovfVxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibWluLXctMCBweC00XCIgc3R5bGU9e3sgZmxleDogJzIgMSAwJScgfX0+XG4gICAgICAgICAgICA8U2tlbGV0b24gY2xhc3NOYW1lPVwiaC0zXCIgc3R5bGU9e3sgd2lkdGg6ICc1MCUnIH19IC8+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgey8qIENvcnJlbGF0aW9uIElEICovfVxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibWluLXctMCBweC00XCIgc3R5bGU9e3sgZmxleDogJzMgMSAwJScgfX0+XG4gICAgICAgICAgICA8U2tlbGV0b24gY2xhc3NOYW1lPVwiaC0zXCIgc3R5bGU9e3sgd2lkdGg6ICc3NSUnIH19IC8+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgey8qIEV2ZW50IElEICovfVxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibWluLXctMCBweC00XCIgc3R5bGU9e3sgZmxleDogJzMgMSAwJScgfX0+XG4gICAgICAgICAgICA8U2tlbGV0b24gY2xhc3NOYW1lPVwiaC0zXCIgc3R5bGU9e3sgd2lkdGg6ICc3NSUnIH19IC8+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgKSl9XG4gICAgPC9kaXY+XG4gICk7XG59XG5cbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuLy8gRXZlbnQgcm93XG4vLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuaW50ZXJmYWNlIEV2ZW50c0xpc3RQcm9wcyB7XG4gIGV2ZW50czogRXZlbnRbXSB8IG51bGw7XG4gIHJ1bj86IFdvcmtmbG93UnVuIHwgbnVsbDtcbiAgb25Mb2FkRXZlbnREYXRhPzogKGV2ZW50OiBFdmVudCkgPT4gUHJvbWlzZTx1bmtub3duIHwgbnVsbD47XG4gIGhhc01vcmVFdmVudHM/OiBib29sZWFuO1xuICBpc0xvYWRpbmdNb3JlRXZlbnRzPzogYm9vbGVhbjtcbiAgb25Mb2FkTW9yZUV2ZW50cz86ICgpID0+IFByb21pc2U8dm9pZD4gfCB2b2lkO1xuICAvKiogV2hlbiBwcm92aWRlZCwgc2lnbmFscyB0aGF0IGRlY3J5cHRpb24gaXMgYWN0aXZlICh0cmlnZ2VycyByZS1sb2FkIG9mIGV4cGFuZGVkIGV2ZW50cykgKi9cbiAgZW5jcnlwdGlvbktleT86IFVpbnQ4QXJyYXk7XG4gIC8qKiBXaGVuIHRydWUsIHNob3dzIGEgbG9hZGluZyBzdGF0ZSBpbnN0ZWFkIG9mIFwiTm8gZXZlbnRzIGZvdW5kXCIgZm9yIGVtcHR5IGxpc3RzICovXG4gIGlzTG9hZGluZz86IGJvb2xlYW47XG4gIC8qKiBTb3J0IG9yZGVyIGZvciBldmVudHMuIERlZmF1bHRzIHRvICdhc2MnLiAqL1xuICBzb3J0T3JkZXI/OiAnYXNjJyB8ICdkZXNjJztcbiAgLyoqIENhbGxlZCB3aGVuIHRoZSB1c2VyIGNoYW5nZXMgc29ydCBvcmRlci4gV2hlbiBwcm92aWRlZCwgdGhlIHNvcnQgZHJvcGRvd24gaXMgc2hvd25cbiAgICogIGFuZCB0aGUgcGFyZW50IGlzIGV4cGVjdGVkIHRvIHJlZmV0Y2ggZnJvbSB0aGUgQVBJIHdpdGggdGhlIG5ldyBvcmRlci4gKi9cbiAgb25Tb3J0T3JkZXJDaGFuZ2U/OiAob3JkZXI6ICdhc2MnIHwgJ2Rlc2MnKSA9PiB2b2lkO1xuICAvKiogQ2FsbGVkIHdoZW4gdGhlIHVzZXIgY2xpY2tzIHRoZSBEZWNyeXB0IGJ1dHRvbi4gKi9cbiAgb25EZWNyeXB0PzogKCkgPT4gdm9pZDtcbiAgLyoqIFdoZXRoZXIgdGhlIGVuY3J5cHRpb24ga2V5IGlzIGN1cnJlbnRseSBiZWluZyBmZXRjaGVkLiAqL1xuICBpc0RlY3J5cHRpbmc/OiBib29sZWFuO1xuICAvKiogUnVuLWxldmVsIGhpbnQ6IHRoZSBydW4gY29udGFpbnMgZW5jcnlwdGVkIGRhdGEgKGZyb20gcHJvYmUpLiAqL1xuICBoYXNFbmNyeXB0ZWREYXRhPzogYm9vbGVhbjtcbn1cblxuZnVuY3Rpb24gRXZlbnRSb3coe1xuICBldmVudCxcbiAgaW5kZXgsXG4gIGlzRmlyc3QsXG4gIGlzTGFzdCxcbiAgaXNFeHBhbmRlZCxcbiAgb25Ub2dnbGVFeHBhbmQsXG4gIGFjdGl2ZUdyb3VwS2V5LFxuICBzZWxlY3RlZEdyb3VwS2V5LFxuICBzZWxlY3RlZEdyb3VwUmFuZ2UsXG4gIGNvcnJlbGF0aW9uTmFtZU1hcCxcbiAgd29ya2Zsb3dOYW1lLFxuICBkdXJhdGlvbk1hcCxcbiAgb25TZWxlY3RHcm91cCxcbiAgb25Ib3Zlckdyb3VwLFxuICBvbkxvYWRFdmVudERhdGEsXG4gIGNhY2hlZEV2ZW50RGF0YSxcbiAgb25DYWNoZUV2ZW50RGF0YSxcbiAgZW5jcnlwdGlvbktleSxcbiAgb25FbmNyeXB0ZWREYXRhRGV0ZWN0ZWQsXG59OiB7XG4gIGV2ZW50OiBFdmVudDtcbiAgaW5kZXg6IG51bWJlcjtcbiAgaXNGaXJzdDogYm9vbGVhbjtcbiAgaXNMYXN0OiBib29sZWFuO1xuICBpc0V4cGFuZGVkOiBib29sZWFuO1xuICBvblRvZ2dsZUV4cGFuZDogKGV2ZW50SWQ6IHN0cmluZykgPT4gdm9pZDtcbiAgYWN0aXZlR3JvdXBLZXk/OiBzdHJpbmc7XG4gIHNlbGVjdGVkR3JvdXBLZXk/OiBzdHJpbmc7XG4gIHNlbGVjdGVkR3JvdXBSYW5nZTogeyBmaXJzdDogbnVtYmVyOyBsYXN0OiBudW1iZXIgfSB8IG51bGw7XG4gIGNvcnJlbGF0aW9uTmFtZU1hcDogTWFwPHN0cmluZywgc3RyaW5nPjtcbiAgd29ya2Zsb3dOYW1lOiBzdHJpbmcgfCBudWxsO1xuICBkdXJhdGlvbk1hcDogTWFwPHN0cmluZywgRHVyYXRpb25JbmZvPjtcbiAgb25TZWxlY3RHcm91cDogKGdyb3VwS2V5OiBzdHJpbmcgfCB1bmRlZmluZWQpID0+IHZvaWQ7XG4gIG9uSG92ZXJHcm91cDogKGdyb3VwS2V5OiBzdHJpbmcgfCB1bmRlZmluZWQpID0+IHZvaWQ7XG4gIG9uTG9hZEV2ZW50RGF0YT86IChldmVudDogRXZlbnQpID0+IFByb21pc2U8dW5rbm93biB8IG51bGw+O1xuICBjYWNoZWRFdmVudERhdGE6IHVua25vd24gfCBudWxsO1xuICBvbkNhY2hlRXZlbnREYXRhOiAoZXZlbnRJZDogc3RyaW5nLCBkYXRhOiB1bmtub3duKSA9PiB2b2lkO1xuICBlbmNyeXB0aW9uS2V5PzogVWludDhBcnJheTtcbiAgb25FbmNyeXB0ZWREYXRhRGV0ZWN0ZWQ/OiAoKSA9PiB2b2lkO1xufSkge1xuICBjb25zdCBbaXNMb2FkaW5nLCBzZXRJc0xvYWRpbmddID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBbbG9hZGVkRXZlbnREYXRhLCBzZXRMb2FkZWRFdmVudERhdGFdID0gdXNlU3RhdGU8dW5rbm93biB8IG51bGw+KFxuICAgIGNhY2hlZEV2ZW50RGF0YVxuICApO1xuICBjb25zdCBbbG9hZEVycm9yLCBzZXRMb2FkRXJyb3JdID0gdXNlU3RhdGU8c3RyaW5nIHwgbnVsbD4obnVsbCk7XG4gIGNvbnN0IFtoYXNBdHRlbXB0ZWRMb2FkLCBzZXRIYXNBdHRlbXB0ZWRMb2FkXSA9IHVzZVN0YXRlKFxuICAgIGNhY2hlZEV2ZW50RGF0YSAhPT0gbnVsbFxuICApO1xuXG4gIC8vIE5vdGlmeSBwYXJlbnQgaWYgY2FjaGVkIGRhdGEgaGFzIGVuY3J5cHRlZCBtYXJrZXJzIG9uIG1vdW50XG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKFxuICAgICAgY2FjaGVkRXZlbnREYXRhICE9PSBudWxsICYmXG4gICAgICAhZW5jcnlwdGlvbktleSAmJlxuICAgICAgaGFzRW5jcnlwdGVkVmFsdWVzKGNhY2hlZEV2ZW50RGF0YSlcbiAgICApIHtcbiAgICAgIG9uRW5jcnlwdGVkRGF0YURldGVjdGVkPy4oKTtcbiAgICB9XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWhvb2tzL2V4aGF1c3RpdmUtZGVwc1xuICB9LCBbXSk7XG5cbiAgY29uc3Qgcm93R3JvdXBLZXkgPSBpc1J1bkxldmVsKGV2ZW50LmV2ZW50VHlwZSlcbiAgICA/ICdfX3J1bl9fJ1xuICAgIDogKGV2ZW50LmNvcnJlbGF0aW9uSWQgPz8gdW5kZWZpbmVkKTtcblxuICBjb25zdCBzdGF0dXNEb3RDb2xvciA9IGdldFN0YXR1c0RvdENvbG9yKGV2ZW50LmV2ZW50VHlwZSk7XG4gIGNvbnN0IGNyZWF0ZWRBdCA9IG5ldyBEYXRlKGV2ZW50LmNyZWF0ZWRBdCk7XG4gIGNvbnN0IGhhc0V4aXN0aW5nRXZlbnREYXRhID0gJ2V2ZW50RGF0YScgaW4gZXZlbnQgJiYgZXZlbnQuZXZlbnREYXRhICE9IG51bGw7XG4gIGNvbnN0IGlzUnVuID0gaXNSdW5MZXZlbChldmVudC5ldmVudFR5cGUpO1xuICBjb25zdCBldmVudE5hbWUgPSBpc1J1blxuICAgID8gKHdvcmtmbG93TmFtZSA/PyAnLScpXG4gICAgOiBldmVudC5jb3JyZWxhdGlvbklkXG4gICAgICA/IChjb3JyZWxhdGlvbk5hbWVNYXAuZ2V0KGV2ZW50LmNvcnJlbGF0aW9uSWQpID8/ICctJylcbiAgICAgIDogJy0nO1xuXG4gIGNvbnN0IGR1cmF0aW9uS2V5ID0gZXZlbnQuY29ycmVsYXRpb25JZCA/PyAoaXNSdW4gPyAnX19ydW5fXycgOiAnJyk7XG4gIGNvbnN0IGR1cmF0aW9uSW5mbyA9IGR1cmF0aW9uS2V5ID8gZHVyYXRpb25NYXAuZ2V0KGR1cmF0aW9uS2V5KSA6IHVuZGVmaW5lZDtcblxuICBjb25zdCBoYXNBY3RpdmUgPSBhY3RpdmVHcm91cEtleSAhPT0gdW5kZWZpbmVkO1xuICBjb25zdCBpc1JlbGF0ZWQgPSByb3dHcm91cEtleSAhPT0gdW5kZWZpbmVkICYmIHJvd0dyb3VwS2V5ID09PSBhY3RpdmVHcm91cEtleTtcbiAgY29uc3QgaXNEaW1tZWQgPSBoYXNBY3RpdmUgJiYgIWlzUmVsYXRlZDtcbiAgY29uc3QgaXNQdWxzaW5nID0gaGFzQWN0aXZlICYmIGlzUmVsYXRlZDtcblxuICAvLyBHdXR0ZXIgc3RhdGUgZGVyaXZlZCBmcm9tIHNlbGVjdGVkR3JvdXBSYW5nZVxuICBjb25zdCBzaG93QnJhbmNoID0gaGFzQWN0aXZlICYmIGlzUmVsYXRlZCAmJiAhaXNSdW47XG4gIGNvbnN0IHNob3dMYW5lTGluZSA9XG4gICAgc2VsZWN0ZWRHcm91cFJhbmdlICE9PSBudWxsICYmXG4gICAgaW5kZXggPj0gc2VsZWN0ZWRHcm91cFJhbmdlLmZpcnN0ICYmXG4gICAgaW5kZXggPD0gc2VsZWN0ZWRHcm91cFJhbmdlLmxhc3Q7XG4gIGNvbnN0IGlzTGFuZVN0YXJ0ID1cbiAgICBzZWxlY3RlZEdyb3VwUmFuZ2UgIT09IG51bGwgJiYgaW5kZXggPT09IHNlbGVjdGVkR3JvdXBSYW5nZS5maXJzdDtcbiAgY29uc3QgaXNMYW5lRW5kID1cbiAgICBzZWxlY3RlZEdyb3VwUmFuZ2UgIT09IG51bGwgJiYgaW5kZXggPT09IHNlbGVjdGVkR3JvdXBSYW5nZS5sYXN0O1xuXG4gIGNvbnN0IGxvYWRFdmVudERldGFpbHMgPSB1c2VDYWxsYmFjayhhc3luYyAoKSA9PiB7XG4gICAgaWYgKGxvYWRlZEV2ZW50RGF0YSAhPT0gbnVsbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoY2FjaGVkRXZlbnREYXRhICE9PSBudWxsKSB7XG4gICAgICBzZXRMb2FkZWRFdmVudERhdGEoY2FjaGVkRXZlbnREYXRhKTtcbiAgICAgIHNldEhhc0F0dGVtcHRlZExvYWQodHJ1ZSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChpc0xvYWRpbmcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgc2V0SXNMb2FkaW5nKHRydWUpO1xuICAgIHNldExvYWRFcnJvcihudWxsKTtcbiAgICB0cnkge1xuICAgICAgaWYgKCFvbkxvYWRFdmVudERhdGEpIHtcbiAgICAgICAgc2V0TG9hZEVycm9yKCdFdmVudCBkZXRhaWxzIHVuYXZhaWxhYmxlJyk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCBvbkxvYWRFdmVudERhdGEoZXZlbnQpO1xuICAgICAgaWYgKGRhdGEgIT09IG51bGwgJiYgZGF0YSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHNldExvYWRlZEV2ZW50RGF0YShkYXRhKTtcbiAgICAgICAgb25DYWNoZUV2ZW50RGF0YShldmVudC5ldmVudElkLCBkYXRhKTtcbiAgICAgICAgaWYgKCFlbmNyeXB0aW9uS2V5ICYmIGhhc0VuY3J5cHRlZFZhbHVlcyhkYXRhKSkge1xuICAgICAgICAgIG9uRW5jcnlwdGVkRGF0YURldGVjdGVkPy4oKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgc2V0TG9hZEVycm9yKFxuICAgICAgICBlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyci5tZXNzYWdlIDogJ0ZhaWxlZCB0byBsb2FkIGV2ZW50IGRldGFpbHMnXG4gICAgICApO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBzZXRJc0xvYWRpbmcoZmFsc2UpO1xuICAgICAgc2V0SGFzQXR0ZW1wdGVkTG9hZCh0cnVlKTtcbiAgICB9XG4gIH0sIFtcbiAgICBldmVudCxcbiAgICBsb2FkZWRFdmVudERhdGEsXG4gICAgaXNMb2FkaW5nLFxuICAgIG9uTG9hZEV2ZW50RGF0YSxcbiAgICBvbkNhY2hlRXZlbnREYXRhLFxuICAgIGVuY3J5cHRpb25LZXksXG4gICAgb25FbmNyeXB0ZWREYXRhRGV0ZWN0ZWQsXG4gICAgY2FjaGVkRXZlbnREYXRhLFxuICBdKTtcblxuICAvLyBBdXRvLWxvYWQgZXZlbnQgZGF0YSB3aGVuIHJlbW91bnRpbmcgaW4gZXhwYW5kZWQgc3RhdGUgd2l0aG91dCBjYWNoZWQgZGF0YVxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghaXNFeHBhbmRlZCB8fCBpc0xvYWRpbmcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdm9pZCBsb2FkRXZlbnREZXRhaWxzKCk7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWhvb2tzL2V4aGF1c3RpdmUtZGVwc1xuICB9LCBbXSk7XG5cbiAgLy8gV2hlbiBlbmNyeXB0aW9uIGtleSBjaGFuZ2VzIGFuZCB0aGlzIGV2ZW50IHdhcyBwcmV2aW91c2x5IGxvYWRlZCxcbiAgLy8gcmUtbG9hZCB0byBnZXQgZGVjcnlwdGVkIGRhdGFcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoZW5jcnlwdGlvbktleSAmJiBoYXNBdHRlbXB0ZWRMb2FkICYmIG9uTG9hZEV2ZW50RGF0YSkge1xuICAgICAgc2V0TG9hZGVkRXZlbnREYXRhKG51bGwpO1xuICAgICAgc2V0SGFzQXR0ZW1wdGVkTG9hZChmYWxzZSk7XG4gICAgICBvbkxvYWRFdmVudERhdGEoZXZlbnQpXG4gICAgICAgIC50aGVuKChkYXRhKSA9PiB7XG4gICAgICAgICAgaWYgKGRhdGEgIT09IG51bGwgJiYgZGF0YSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBzZXRMb2FkZWRFdmVudERhdGEoZGF0YSk7XG4gICAgICAgICAgICBvbkNhY2hlRXZlbnREYXRhKGV2ZW50LmV2ZW50SWQsIGRhdGEpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBzZXRIYXNBdHRlbXB0ZWRMb2FkKHRydWUpO1xuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goKCkgPT4ge1xuICAgICAgICAgIHNldEhhc0F0dGVtcHRlZExvYWQodHJ1ZSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaG9va3MvZXhoYXVzdGl2ZS1kZXBzXG4gIH0sIFtlbmNyeXB0aW9uS2V5XSk7XG5cbiAgY29uc3QgaGFuZGxlUm93Q2xpY2sgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgb25TZWxlY3RHcm91cChyb3dHcm91cEtleSA9PT0gc2VsZWN0ZWRHcm91cEtleSA/IHVuZGVmaW5lZCA6IHJvd0dyb3VwS2V5KTtcbiAgICBvblRvZ2dsZUV4cGFuZChldmVudC5ldmVudElkKTtcbiAgICBpZiAoIWlzRXhwYW5kZWQpIHtcbiAgICAgIHZvaWQgbG9hZEV2ZW50RGV0YWlscygpO1xuICAgIH1cbiAgfSwgW1xuICAgIHNlbGVjdGVkR3JvdXBLZXksXG4gICAgcm93R3JvdXBLZXksXG4gICAgb25TZWxlY3RHcm91cCxcbiAgICBvblRvZ2dsZUV4cGFuZCxcbiAgICBldmVudC5ldmVudElkLFxuICAgIGlzRXhwYW5kZWQsXG4gICAgbG9hZEV2ZW50RGV0YWlscyxcbiAgXSk7XG5cbiAgY29uc3QgbWVyZ2VkRXZlbnREYXRhID1cbiAgICBsb2FkZWRFdmVudERhdGEgPz9cbiAgICAoaGFzRXhpc3RpbmdFdmVudERhdGFcbiAgICAgID8gKGV2ZW50IGFzIEV2ZW50ICYgeyBldmVudERhdGE6IHVua25vd24gfSkuZXZlbnREYXRhXG4gICAgICA6IG51bGwpO1xuXG4gIGNvbnN0IGRpc3BsYXlQYXlsb2FkID0gaXNMb2FkaW5nID8gbG9hZGVkRXZlbnREYXRhIDogbWVyZ2VkRXZlbnREYXRhO1xuXG4gIGNvbnN0IGNvbnRlbnRPcGFjaXR5ID0gaXNEaW1tZWQgPyAwLjMgOiAxO1xuXG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgZGF0YS1ldmVudC1pZD17ZXZlbnQuZXZlbnRJZH1cbiAgICAgIG9uTW91c2VFbnRlcj17KCkgPT4gb25Ib3Zlckdyb3VwKHJvd0dyb3VwS2V5KX1cbiAgICAgIG9uTW91c2VMZWF2ZT17KCkgPT4gb25Ib3Zlckdyb3VwKHVuZGVmaW5lZCl9XG4gICAgPlxuICAgICAgey8qIFJvdyAqL31cbiAgICAgIDxkaXZcbiAgICAgICAgcm9sZT1cImJ1dHRvblwiXG4gICAgICAgIHRhYkluZGV4PXswfVxuICAgICAgICBvbkNsaWNrPXtoYW5kbGVSb3dDbGlja31cbiAgICAgICAgb25LZXlEb3duPXsoZSkgPT4ge1xuICAgICAgICAgIGlmIChlLmtleSA9PT0gJ0VudGVyJyB8fCBlLmtleSA9PT0gJyAnKSBoYW5kbGVSb3dDbGljaygpO1xuICAgICAgICB9fVxuICAgICAgICBjbGFzc05hbWU9XCJ3LWZ1bGwgdGV4dC1sZWZ0IGZsZXggaXRlbXMtY2VudGVyIGdhcC0wIHRleHQtWzEzcHhdIGhvdmVyOmJnLVt2YXIoLS1kcy1ncmF5LWFscGhhLTEwMCldIHRyYW5zaXRpb24tY29sb3JzIGN1cnNvci1wb2ludGVyXCJcbiAgICAgICAgc3R5bGU9e3sgbWluSGVpZ2h0OiA0MCB9fVxuICAgICAgPlxuICAgICAgICA8VHJlZUd1dHRlclxuICAgICAgICAgIGlzRmlyc3Q9e2lzRmlyc3R9XG4gICAgICAgICAgaXNMYXN0PXtpc0xhc3QgJiYgIWlzRXhwYW5kZWR9XG4gICAgICAgICAgaXNSdW5MZXZlbD17aXNSdW59XG4gICAgICAgICAgc3RhdHVzRG90Q29sb3I9e3N0YXR1c0RvdENvbG9yfVxuICAgICAgICAgIHB1bHNlPXtpc1B1bHNpbmd9XG4gICAgICAgICAgaGFzU2VsZWN0aW9uPXtoYXNBY3RpdmV9XG4gICAgICAgICAgc2hvd0JyYW5jaD17c2hvd0JyYW5jaH1cbiAgICAgICAgICBzaG93TGFuZUxpbmU9e3Nob3dMYW5lTGluZX1cbiAgICAgICAgICBpc0xhbmVTdGFydD17aXNMYW5lU3RhcnR9XG4gICAgICAgICAgaXNMYW5lRW5kPXtpc0xhbmVFbmR9XG4gICAgICAgIC8+XG5cbiAgICAgICAgey8qIENvbnRlbnQgYXJlYSDigJQgZGltcyB3aGVuIHVucmVsYXRlZCAqL31cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGZsZXgtMSBtaW4tdy0wXCJcbiAgICAgICAgICBzdHlsZT17eyBvcGFjaXR5OiBjb250ZW50T3BhY2l0eSwgdHJhbnNpdGlvbjogJ29wYWNpdHkgMTUwbXMnIH19XG4gICAgICAgID5cbiAgICAgICAgICB7LyogRXhwYW5kIGNoZXZyb24gaW5kaWNhdG9yICovfVxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHctNSBoLTUgZmxleC1zaHJpbmstMCByb3VuZGVkXCJcbiAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgIGJvcmRlcjogJzFweCBzb2xpZCB2YXIoLS1kcy1ncmF5LTQwMCknLFxuICAgICAgICAgICAgfX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICA8Q2hldnJvblJpZ2h0XG4gICAgICAgICAgICAgIGNsYXNzTmFtZT1cImgtMyB3LTMgdHJhbnNpdGlvbi10cmFuc2Zvcm1cIlxuICAgICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICAgIGNvbG9yOiAndmFyKC0tZHMtZ3JheS05MDApJyxcbiAgICAgICAgICAgICAgICB0cmFuc2Zvcm06IGlzRXhwYW5kZWQgPyAncm90YXRlKDkwZGVnKScgOiAncm90YXRlKDBkZWcpJyxcbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICB7LyogVGltZSAqL31cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzc05hbWU9XCJ0YWJ1bGFyLW51bXMgbWluLXctMCBweC00XCJcbiAgICAgICAgICAgIHN0eWxlPXt7IGNvbG9yOiAndmFyKC0tZHMtZ3JheS05MDApJywgZmxleDogJzIgMSAwJScgfX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICA8VGltZXN0YW1wVG9vbHRpcCBkYXRlPXtjcmVhdGVkQXR9PlxuICAgICAgICAgICAgICA8c3Bhbj57Zm9ybWF0RXZlbnRUaW1lKGNyZWF0ZWRBdCl9PC9zcGFuPlxuICAgICAgICAgICAgPC9UaW1lc3RhbXBUb29sdGlwPlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgey8qIEV2ZW50IFR5cGUgKi99XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmb250LW1lZGl1bSBtaW4tdy0wIHB4LTRcIiBzdHlsZT17eyBmbGV4OiAnMiAxIDAlJyB9fT5cbiAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgIGNsYXNzTmFtZT1cImlubGluZS1mbGV4IGl0ZW1zLWNlbnRlciBnYXAtMS41XCJcbiAgICAgICAgICAgICAgc3R5bGU9e3sgY29sb3I6ICd2YXIoLS1kcy1ncmF5LTkwMCknIH19XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICAgIHBvc2l0aW9uOiAncmVsYXRpdmUnLFxuICAgICAgICAgICAgICAgICAgZGlzcGxheTogJ2lubGluZS1mbGV4JyxcbiAgICAgICAgICAgICAgICAgIHdpZHRoOiA2LFxuICAgICAgICAgICAgICAgICAgaGVpZ2h0OiA2LFxuICAgICAgICAgICAgICAgICAgZmxleFNocmluazogMCxcbiAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge2lzUHVsc2luZyAmJiAoXG4gICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgICAgICAgICAgICAgICAgICAgIGluc2V0OiAwLFxuICAgICAgICAgICAgICAgICAgICAgIGJvcmRlclJhZGl1czogJzUwJScsXG4gICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiBzdGF0dXNEb3RDb2xvcixcbiAgICAgICAgICAgICAgICAgICAgICBvcGFjaXR5OiAwLjc1LFxuICAgICAgICAgICAgICAgICAgICAgIGFuaW1hdGlvbjogRE9UX1BVTFNFX0FOSU1BVElPTixcbiAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICAgICAgcG9zaXRpb246ICdyZWxhdGl2ZScsXG4gICAgICAgICAgICAgICAgICAgIHdpZHRoOiA2LFxuICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IDYsXG4gICAgICAgICAgICAgICAgICAgIGJvcmRlclJhZGl1czogJzUwJScsXG4gICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogc3RhdHVzRG90Q29sb3IsXG4gICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAge2Zvcm1hdEV2ZW50VHlwZShldmVudC5ldmVudFR5cGUpfVxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgey8qIE5hbWUgKi99XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3NOYW1lPVwibWluLXctMCBweC00IG92ZXJmbG93LWhpZGRlbiB0ZXh0LWVsbGlwc2lzIHdoaXRlc3BhY2Utbm93cmFwXCJcbiAgICAgICAgICAgIHN0eWxlPXt7IGZsZXg6ICcyIDEgMCUnIH19XG4gICAgICAgICAgICB0aXRsZT17ZXZlbnROYW1lICE9PSAnLScgPyBldmVudE5hbWUgOiB1bmRlZmluZWR9XG4gICAgICAgICAgPlxuICAgICAgICAgICAge2V2ZW50TmFtZX1cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIHsvKiBDb3JyZWxhdGlvbiBJRCAqL31cbiAgICAgICAgICA8Q29weWFibGVDZWxsXG4gICAgICAgICAgICB2YWx1ZT17ZXZlbnQuY29ycmVsYXRpb25JZCB8fCAnJ31cbiAgICAgICAgICAgIGNsYXNzTmFtZT1cImZvbnQtbW9ub1wiXG4gICAgICAgICAgICBzdHlsZT17eyBmbGV4OiAnMyAxIDAlJyB9fVxuICAgICAgICAgIC8+XG5cbiAgICAgICAgICB7LyogRXZlbnQgSUQgKi99XG4gICAgICAgICAgPENvcHlhYmxlQ2VsbFxuICAgICAgICAgICAgdmFsdWU9e2V2ZW50LmV2ZW50SWR9XG4gICAgICAgICAgICBjbGFzc05hbWU9XCJmb250LW1vbm9cIlxuICAgICAgICAgICAgc3R5bGU9e3sgZmxleDogJzMgMSAwJScgfX1cbiAgICAgICAgICAvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICB7LyogRXhwYW5kZWQgZGV0YWlscyDigJQgdHJlZSBsaW5lcyBjb250aW51ZSB0aHJvdWdoIHRoaXMgYXJlYSAqL31cbiAgICAgIHtpc0V4cGFuZGVkICYmIChcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4XCI+XG4gICAgICAgICAgey8qIENvbnRpbnVhdGlvbiBndXR0ZXIg4oCUIGxhbmUgbGluZSBjb250aW51ZXMgaWYgbm90IGF0IGxhbmUgZW5kICovfVxuICAgICAgICAgIDxUcmVlR3V0dGVyXG4gICAgICAgICAgICBpc0ZpcnN0PXtmYWxzZX1cbiAgICAgICAgICAgIGlzTGFzdD17aXNMYXN0fVxuICAgICAgICAgICAgaXNSdW5MZXZlbD17aXNSdW59XG4gICAgICAgICAgICBoYXNTZWxlY3Rpb249e2hhc0FjdGl2ZX1cbiAgICAgICAgICAgIHNob3dCcmFuY2g9e2ZhbHNlfVxuICAgICAgICAgICAgc2hvd0xhbmVMaW5lPXtzaG93TGFuZUxpbmUgJiYgIWlzTGFuZUVuZH1cbiAgICAgICAgICAgIGlzTGFuZVN0YXJ0PXtmYWxzZX1cbiAgICAgICAgICAgIGlzTGFuZUVuZD17ZmFsc2V9XG4gICAgICAgICAgICBjb250aW51YXRpb25Pbmx5XG4gICAgICAgICAgLz5cbiAgICAgICAgICB7LyogU3BhY2VyIGZvciBjaGV2cm9uIGNvbHVtbiAqL31cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInctNSBmbGV4LXNocmluay0wXCIgLz5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzc05hbWU9XCJmbGV4LTEgbXktMS41IG1yLTMgbWwtMiBweS0yIHJvdW5kZWQtbWQgYm9yZGVyIG92ZXJmbG93LWhpZGRlblwiXG4gICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICBib3JkZXJDb2xvcjogJ3ZhcigtLWRzLWdyYXktYWxwaGEtMjAwKScsXG4gICAgICAgICAgICAgIG9wYWNpdHk6IGNvbnRlbnRPcGFjaXR5LFxuICAgICAgICAgICAgICB0cmFuc2l0aW9uOiAnb3BhY2l0eSAxNTBtcycsXG4gICAgICAgICAgICB9fVxuICAgICAgICAgID5cbiAgICAgICAgICAgIHsvKiBEdXJhdGlvbiBpbmZvICovfVxuICAgICAgICAgICAgeyhkdXJhdGlvbkluZm8/LnF1ZXVlZCAhPT0gdW5kZWZpbmVkIHx8XG4gICAgICAgICAgICAgIGR1cmF0aW9uSW5mbz8ucmFuICE9PSB1bmRlZmluZWQpICYmIChcbiAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInB4LTIgcGItMS41IHRleHQteHMgZmxleCBnYXAtM1wiXG4gICAgICAgICAgICAgICAgc3R5bGU9e3sgY29sb3I6ICd2YXIoLS1kcy1ncmF5LTkwMCknIH19XG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICB7ZHVyYXRpb25JbmZvLnF1ZXVlZCAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgICAgICAgICBkdXJhdGlvbkluZm8ucXVldWVkID4gMCAmJiAoXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIFF1ZXVlZCBmb3J7JyAnfVxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cImZvbnQtbW9ubyB0YWJ1bGFyLW51bXNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtmb3JtYXREdXJhdGlvbihkdXJhdGlvbkluZm8ucXVldWVkKX1cbiAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAge2R1cmF0aW9uSW5mby5yYW4gIT09IHVuZGVmaW5lZCAmJiAoXG4gICAgICAgICAgICAgICAgICA8c3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgUmFuIGZvcnsnICd9XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cImZvbnQtbW9ubyB0YWJ1bGFyLW51bXNcIj5cbiAgICAgICAgICAgICAgICAgICAgICB7Zm9ybWF0RHVyYXRpb24oZHVyYXRpb25JbmZvLnJhbil9XG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICl9XG5cbiAgICAgICAgICAgIHsvKiBQYXlsb2FkICovfVxuICAgICAgICAgICAge2Rpc3BsYXlQYXlsb2FkICE9IG51bGwgPyAoXG4gICAgICAgICAgICAgIDxQYXlsb2FkQmxvY2sgZGF0YT17ZGlzcGxheVBheWxvYWR9IGV2ZW50VHlwZT17ZXZlbnQuZXZlbnRUeXBlfSAvPlxuICAgICAgICAgICAgKSA6IGxvYWRFcnJvciA/IChcbiAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInJvdW5kZWQtbWQgYm9yZGVyIHAtMyB0ZXh0LXhzXCJcbiAgICAgICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICAgICAgYm9yZGVyQ29sb3I6ICd2YXIoLS1kcy1yZWQtNDAwKScsXG4gICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6ICd2YXIoLS1kcy1yZWQtMTAwKScsXG4gICAgICAgICAgICAgICAgICBjb2xvcjogJ3ZhcigtLWRzLXJlZC05MDApJyxcbiAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge2xvYWRFcnJvcn1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICApIDogaXNMb2FkaW5nIHx8XG4gICAgICAgICAgICAgIChsb2FkZWRFdmVudERhdGEgPT09IG51bGwgJiZcbiAgICAgICAgICAgICAgICAhaGFzQXR0ZW1wdGVkTG9hZCAmJlxuICAgICAgICAgICAgICAgIGV2ZW50LmNvcnJlbGF0aW9uSWQpID8gKFxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggZmxleC1jb2wgZ2FwLTIgcC0zXCI+XG4gICAgICAgICAgICAgICAgPFNrZWxldG9uIGNsYXNzTmFtZT1cImgtM1wiIHN0eWxlPXt7IHdpZHRoOiAnNzUlJyB9fSAvPlxuICAgICAgICAgICAgICAgIDxTa2VsZXRvbiBjbGFzc05hbWU9XCJoLTNcIiBzdHlsZT17eyB3aWR0aDogJzUwJScgfX0gLz5cbiAgICAgICAgICAgICAgICA8U2tlbGV0b24gY2xhc3NOYW1lPVwiaC0zXCIgc3R5bGU9e3sgd2lkdGg6ICc2MCUnIH19IC8+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInAtMiB0ZXh0LXhzXCJcbiAgICAgICAgICAgICAgICBzdHlsZT17eyBjb2xvcjogJ3ZhcigtLWRzLWdyYXktOTAwKScgfX1cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIE5vIGRhdGFcbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICApfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICl9XG4gICAgPC9kaXY+XG4gICk7XG59XG5cbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuLy8gTWFpbiBjb21wb25lbnRcbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG5leHBvcnQgZnVuY3Rpb24gRXZlbnRMaXN0Vmlldyh7XG4gIGV2ZW50cyxcbiAgcnVuLFxuICBvbkxvYWRFdmVudERhdGEsXG4gIGhhc01vcmVFdmVudHMgPSBmYWxzZSxcbiAgaXNMb2FkaW5nTW9yZUV2ZW50cyA9IGZhbHNlLFxuICBvbkxvYWRNb3JlRXZlbnRzLFxuICBlbmNyeXB0aW9uS2V5LFxuICBpc0xvYWRpbmcgPSBmYWxzZSxcbiAgc29ydE9yZGVyOiBzb3J0T3JkZXJQcm9wLFxuICBvblNvcnRPcmRlckNoYW5nZSxcbiAgb25EZWNyeXB0LFxuICBpc0RlY3J5cHRpbmcgPSBmYWxzZSxcbiAgaGFzRW5jcnlwdGVkRGF0YTogaGFzRW5jcnlwdGVkRGF0YVByb3AgPSBmYWxzZSxcbn06IEV2ZW50c0xpc3RQcm9wcykge1xuICBjb25zdCBbaW50ZXJuYWxTb3J0T3JkZXIsIHNldEludGVybmFsU29ydE9yZGVyXSA9IHVzZVN0YXRlPCdhc2MnIHwgJ2Rlc2MnPihcbiAgICAnYXNjJ1xuICApO1xuICBjb25zdCBlZmZlY3RpdmVTb3J0T3JkZXIgPSBzb3J0T3JkZXJQcm9wID8/IGludGVybmFsU29ydE9yZGVyO1xuICBjb25zdCBoYW5kbGVTb3J0T3JkZXJDaGFuZ2UgPSB1c2VDYWxsYmFjayhcbiAgICAob3JkZXI6ICdhc2MnIHwgJ2Rlc2MnKSA9PiB7XG4gICAgICBpZiAob25Tb3J0T3JkZXJDaGFuZ2UpIHtcbiAgICAgICAgb25Tb3J0T3JkZXJDaGFuZ2Uob3JkZXIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2V0SW50ZXJuYWxTb3J0T3JkZXIob3JkZXIpO1xuICAgICAgfVxuICAgIH0sXG4gICAgW29uU29ydE9yZGVyQ2hhbmdlXVxuICApO1xuXG4gIGNvbnN0IHNvcnRlZEV2ZW50cyA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGlmICghZXZlbnRzIHx8IGV2ZW50cy5sZW5ndGggPT09IDApIHJldHVybiBbXTtcbiAgICBjb25zdCBkaXIgPSBlZmZlY3RpdmVTb3J0T3JkZXIgPT09ICdkZXNjJyA/IC0xIDogMTtcbiAgICByZXR1cm4gWy4uLmV2ZW50c10uc29ydChcbiAgICAgIChhLCBiKSA9PlxuICAgICAgICBkaXIgKlxuICAgICAgICAobmV3IERhdGUoYS5jcmVhdGVkQXQpLmdldFRpbWUoKSAtIG5ldyBEYXRlKGIuY3JlYXRlZEF0KS5nZXRUaW1lKCkpXG4gICAgKTtcbiAgfSwgW2V2ZW50cywgZWZmZWN0aXZlU29ydE9yZGVyXSk7XG5cbiAgLy8gRGV0ZWN0IGVuY3J5cHRlZCBmaWVsZHMgYWNyb3NzIGFsbCBsb2FkZWQgZXZlbnRzIChpbmxpbmUgZXZlbnREYXRhKS5cbiAgY29uc3QgaGFzRW5jcnlwdGVkSW5saW5lRGF0YSA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGlmICghZXZlbnRzKSByZXR1cm4gZmFsc2U7XG4gICAgZm9yIChjb25zdCBldmVudCBvZiBldmVudHMpIHtcbiAgICAgIGNvbnN0IGVkID0gKGV2ZW50IGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KS5ldmVudERhdGE7XG4gICAgICBpZiAoaGFzRW5jcnlwdGVkVmFsdWVzKGVkKSkgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSwgW2V2ZW50c10pO1xuXG4gIC8vIFRyYWNrcyB3aGV0aGVyIGFueSBleHBhbmRlZCByb3cncyBsYXp5LWxvYWRlZCBkYXRhIGNvbnRhaW5lZCBlbmNyeXB0ZWQgbWFya2Vycy5cbiAgLy8gU2V0IHRvIHRydWUgYnkgRXZlbnRSb3cgdmlhIG9uRW5jcnlwdGVkRGF0YURldGVjdGVkOyBuZXZlciByZXNldCAoc3RpY2t5KS5cbiAgY29uc3QgW2ZvdW5kRW5jcnlwdGVkSW5MYXp5RGF0YSwgc2V0Rm91bmRFbmNyeXB0ZWRJbkxhenlEYXRhXSA9XG4gICAgdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBoYW5kbGVFbmNyeXB0ZWREYXRhRGV0ZWN0ZWQgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgc2V0Rm91bmRFbmNyeXB0ZWRJbkxhenlEYXRhKHRydWUpO1xuICB9LCBbXSk7XG5cbiAgY29uc3QgaGFzRW5jcnlwdGVkRGF0YSA9XG4gICAgaGFzRW5jcnlwdGVkRGF0YVByb3AgfHwgaGFzRW5jcnlwdGVkSW5saW5lRGF0YSB8fCBmb3VuZEVuY3J5cHRlZEluTGF6eURhdGE7XG5cbiAgY29uc3QgeyBjb3JyZWxhdGlvbk5hbWVNYXAsIHdvcmtmbG93TmFtZSB9ID0gdXNlTWVtbyhcbiAgICAoKSA9PiBidWlsZE5hbWVNYXBzKGV2ZW50cyA/PyBudWxsLCBydW4gPz8gbnVsbCksXG4gICAgW2V2ZW50cywgcnVuXVxuICApO1xuXG4gIGNvbnN0IGR1cmF0aW9uTWFwID0gdXNlTWVtbyhcbiAgICAoKSA9PiBidWlsZER1cmF0aW9uTWFwKHNvcnRlZEV2ZW50cyksXG4gICAgW3NvcnRlZEV2ZW50c11cbiAgKTtcblxuICBjb25zdCBbc2VsZWN0ZWRHcm91cEtleSwgc2V0U2VsZWN0ZWRHcm91cEtleV0gPSB1c2VTdGF0ZTxzdHJpbmcgfCB1bmRlZmluZWQ+KFxuICAgIHVuZGVmaW5lZFxuICApO1xuICBjb25zdCBbaG92ZXJlZEdyb3VwS2V5LCBzZXRIb3ZlcmVkR3JvdXBLZXldID0gdXNlU3RhdGU8c3RyaW5nIHwgdW5kZWZpbmVkPihcbiAgICB1bmRlZmluZWRcbiAgKTtcbiAgY29uc3Qgb25TZWxlY3RHcm91cCA9IHVzZUNhbGxiYWNrKChncm91cEtleTogc3RyaW5nIHwgdW5kZWZpbmVkKSA9PiB7XG4gICAgc2V0U2VsZWN0ZWRHcm91cEtleShncm91cEtleSk7XG4gIH0sIFtdKTtcbiAgY29uc3Qgb25Ib3Zlckdyb3VwID0gdXNlQ2FsbGJhY2soKGdyb3VwS2V5OiBzdHJpbmcgfCB1bmRlZmluZWQpID0+IHtcbiAgICBzZXRIb3ZlcmVkR3JvdXBLZXkoZ3JvdXBLZXkpO1xuICB9LCBbXSk7XG5cbiAgY29uc3QgYWN0aXZlR3JvdXBLZXkgPSBzZWxlY3RlZEdyb3VwS2V5ID8/IGhvdmVyZWRHcm91cEtleTtcblxuICAvLyBFeHBhbmRlZCBzdGF0ZSBsaWZ0ZWQgb3V0IG9mIEV2ZW50Um93IHNvIGl0IHN1cnZpdmVzIHZpcnR1YWxpemF0aW9uXG4gIGNvbnN0IFtleHBhbmRlZEV2ZW50SWRzLCBzZXRFeHBhbmRlZEV2ZW50SWRzXSA9IHVzZVN0YXRlPFNldDxzdHJpbmc+PihcbiAgICAoKSA9PiBuZXcgU2V0KClcbiAgKTtcbiAgY29uc3QgdG9nZ2xlRXZlbnRFeHBhbmRlZCA9IHVzZUNhbGxiYWNrKChldmVudElkOiBzdHJpbmcpID0+IHtcbiAgICBzZXRFeHBhbmRlZEV2ZW50SWRzKChwcmV2KSA9PiB7XG4gICAgICBjb25zdCBuZXh0ID0gbmV3IFNldChwcmV2KTtcbiAgICAgIGlmIChuZXh0LmhhcyhldmVudElkKSkge1xuICAgICAgICBuZXh0LmRlbGV0ZShldmVudElkKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG5leHQuYWRkKGV2ZW50SWQpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG5leHQ7XG4gICAgfSk7XG4gIH0sIFtdKTtcblxuICAvLyBFdmVudCBkYXRhIGNhY2hlIOKAlCByZWYgYXZvaWRzIHJlLXJlbmRlcnMgd2hlbiBjYWNoZSB1cGRhdGVzXG4gIGNvbnN0IGV2ZW50RGF0YUNhY2hlUmVmID0gdXNlUmVmPE1hcDxzdHJpbmcsIHVua25vd24+PihuZXcgTWFwKCkpO1xuICBjb25zdCBjYWNoZUV2ZW50RGF0YSA9IHVzZUNhbGxiYWNrKChldmVudElkOiBzdHJpbmcsIGRhdGE6IHVua25vd24pID0+IHtcbiAgICBldmVudERhdGFDYWNoZVJlZi5jdXJyZW50LnNldChldmVudElkLCBkYXRhKTtcbiAgfSwgW10pO1xuXG4gIC8vIExvb2t1cCBmcm9tIGV2ZW50SWQg4oaSIGdyb3VwS2V5IGZvciBlZmZpY2llbnQgY29sbGFwc2UgZmlsdGVyaW5nXG4gIGNvbnN0IGV2ZW50R3JvdXBLZXlNYXAgPSB1c2VNZW1vKCgpID0+IHtcbiAgICBjb25zdCBtYXAgPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nPigpO1xuICAgIGZvciAoY29uc3QgZXYgb2Ygc29ydGVkRXZlbnRzKSB7XG4gICAgICBjb25zdCBnayA9IGlzUnVuTGV2ZWwoZXYuZXZlbnRUeXBlKVxuICAgICAgICA/ICdfX3J1bl9fJ1xuICAgICAgICA6IChldi5jb3JyZWxhdGlvbklkID8/ICcnKTtcbiAgICAgIGlmIChnaykgbWFwLnNldChldi5ldmVudElkLCBnayk7XG4gICAgfVxuICAgIHJldHVybiBtYXA7XG4gIH0sIFtzb3J0ZWRFdmVudHNdKTtcblxuICAvLyBDb2xsYXBzZSBleHBhbmRlZCBldmVudHMgdGhhdCBkb24ndCBiZWxvbmcgdG8gdGhlIG5ld2x5IHNlbGVjdGVkIGdyb3VwXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKHNlbGVjdGVkR3JvdXBLZXkgPT09IHVuZGVmaW5lZCkgcmV0dXJuO1xuICAgIHNldEV4cGFuZGVkRXZlbnRJZHMoKHByZXYpID0+IHtcbiAgICAgIGlmIChwcmV2LnNpemUgPT09IDApIHJldHVybiBwcmV2O1xuICAgICAgbGV0IGNoYW5nZWQgPSBmYWxzZTtcbiAgICAgIGNvbnN0IG5leHQgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgICAgIGZvciAoY29uc3QgZXZlbnRJZCBvZiBwcmV2KSB7XG4gICAgICAgIGlmIChldmVudEdyb3VwS2V5TWFwLmdldChldmVudElkKSA9PT0gc2VsZWN0ZWRHcm91cEtleSkge1xuICAgICAgICAgIG5leHQuYWRkKGV2ZW50SWQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNoYW5nZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gY2hhbmdlZCA/IG5leHQgOiBwcmV2O1xuICAgIH0pO1xuICB9LCBbc2VsZWN0ZWRHcm91cEtleSwgZXZlbnRHcm91cEtleU1hcF0pO1xuXG4gIC8vIENvbXB1dGUgdGhlIHJvdy1pbmRleCByYW5nZSBmb3IgdGhlIGFjdGl2ZSBncm91cCdzIGNvbm5lY3RpbmcgbGFuZSBsaW5lLlxuICAvLyBPbmx5IGFwcGxpZXMgdG8gbm9uLXJ1biBncm91cHMgKHN0ZXAvaG9vay93YWl0IGNvcnJlbGF0aW9ucykuXG4gIGNvbnN0IHNlbGVjdGVkR3JvdXBSYW5nZSA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGlmICghYWN0aXZlR3JvdXBLZXkgfHwgYWN0aXZlR3JvdXBLZXkgPT09ICdfX3J1bl9fJykgcmV0dXJuIG51bGw7XG4gICAgbGV0IGZpcnN0ID0gLTE7XG4gICAgbGV0IGxhc3QgPSAtMTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNvcnRlZEV2ZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKHNvcnRlZEV2ZW50c1tpXS5jb3JyZWxhdGlvbklkID09PSBhY3RpdmVHcm91cEtleSkge1xuICAgICAgICBpZiAoZmlyc3QgPT09IC0xKSBmaXJzdCA9IGk7XG4gICAgICAgIGxhc3QgPSBpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmlyc3QgPj0gMCA/IHsgZmlyc3QsIGxhc3QgfSA6IG51bGw7XG4gIH0sIFthY3RpdmVHcm91cEtleSwgc29ydGVkRXZlbnRzXSk7XG5cbiAgY29uc3QgW3NlYXJjaFF1ZXJ5LCBzZXRTZWFyY2hRdWVyeV0gPSB1c2VTdGF0ZSgnJyk7XG4gIGNvbnN0IHZpcnR1b3NvUmVmID0gdXNlUmVmPFZpcnR1b3NvSGFuZGxlPihudWxsKTtcblxuICBjb25zdCBzZWFyY2hJbmRleCA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGNvbnN0IGVudHJpZXM6IHtcbiAgICAgIGZpZWxkczogc3RyaW5nW107XG4gICAgICBncm91cEtleT86IHN0cmluZztcbiAgICAgIGV2ZW50SWQ6IHN0cmluZztcbiAgICAgIGluZGV4OiBudW1iZXI7XG4gICAgfVtdID0gW107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzb3J0ZWRFdmVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGV2ID0gc29ydGVkRXZlbnRzW2ldO1xuICAgICAgY29uc3QgaXNSdW4gPSBpc1J1bkxldmVsKGV2LmV2ZW50VHlwZSk7XG4gICAgICBjb25zdCBuYW1lID0gaXNSdW5cbiAgICAgICAgPyAod29ya2Zsb3dOYW1lID8/ICcnKVxuICAgICAgICA6IGV2LmNvcnJlbGF0aW9uSWRcbiAgICAgICAgICA/IChjb3JyZWxhdGlvbk5hbWVNYXAuZ2V0KGV2LmNvcnJlbGF0aW9uSWQpID8/ICcnKVxuICAgICAgICAgIDogJyc7XG4gICAgICBlbnRyaWVzLnB1c2goe1xuICAgICAgICBmaWVsZHM6IFtcbiAgICAgICAgICBldi5ldmVudElkLFxuICAgICAgICAgIGV2LmNvcnJlbGF0aW9uSWQgPz8gJycsXG4gICAgICAgICAgZXYuZXZlbnRUeXBlLFxuICAgICAgICAgIGZvcm1hdEV2ZW50VHlwZShldi5ldmVudFR5cGUpLFxuICAgICAgICAgIG5hbWUsXG4gICAgICAgIF0ubWFwKChmKSA9PiBmLnRvTG93ZXJDYXNlKCkpLFxuICAgICAgICBncm91cEtleTogZXYuY29ycmVsYXRpb25JZCA/PyAoaXNSdW4gPyAnX19ydW5fXycgOiB1bmRlZmluZWQpLFxuICAgICAgICBldmVudElkOiBldi5ldmVudElkLFxuICAgICAgICBpbmRleDogaSxcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gZW50cmllcztcbiAgfSwgW3NvcnRlZEV2ZW50cywgY29ycmVsYXRpb25OYW1lTWFwLCB3b3JrZmxvd05hbWVdKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IHEgPSBzZWFyY2hRdWVyeS50cmltKCkudG9Mb3dlckNhc2UoKTtcbiAgICBpZiAoIXEpIHtcbiAgICAgIHNldFNlbGVjdGVkR3JvdXBLZXkodW5kZWZpbmVkKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgbGV0IGJlc3RNYXRjaDogKHR5cGVvZiBzZWFyY2hJbmRleClbbnVtYmVyXSB8IG51bGwgPSBudWxsO1xuICAgIGxldCBiZXN0U2NvcmUgPSAwO1xuICAgIGZvciAoY29uc3QgZW50cnkgb2Ygc2VhcmNoSW5kZXgpIHtcbiAgICAgIGZvciAoY29uc3QgZmllbGQgb2YgZW50cnkuZmllbGRzKSB7XG4gICAgICAgIGlmIChmaWVsZCAmJiBmaWVsZC5pbmNsdWRlcyhxKSkge1xuICAgICAgICAgIGNvbnN0IHNjb3JlID0gcS5sZW5ndGggLyBmaWVsZC5sZW5ndGg7XG4gICAgICAgICAgaWYgKHNjb3JlID4gYmVzdFNjb3JlKSB7XG4gICAgICAgICAgICBiZXN0U2NvcmUgPSBzY29yZTtcbiAgICAgICAgICAgIGJlc3RNYXRjaCA9IGVudHJ5O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoYmVzdE1hdGNoKSB7XG4gICAgICBzZXRTZWxlY3RlZEdyb3VwS2V5KGJlc3RNYXRjaC5ncm91cEtleSk7XG4gICAgICB2aXJ0dW9zb1JlZi5jdXJyZW50Py5zY3JvbGxUb0luZGV4KHtcbiAgICAgICAgaW5kZXg6IGJlc3RNYXRjaC5pbmRleCxcbiAgICAgICAgYWxpZ246ICdjZW50ZXInLFxuICAgICAgICBiZWhhdmlvcjogJ3Ntb290aCcsXG4gICAgICB9KTtcbiAgICB9XG4gIH0sIFtzZWFyY2hRdWVyeSwgc2VhcmNoSW5kZXhdKTtcblxuICAvLyBUcmFjayB3aGV0aGVyIHdlJ3ZlIGV2ZXIgaGFkIGV2ZW50cyB0byBkaXN0aW5ndWlzaCBpbml0aWFsIGxvYWQgZnJvbSByZWZldGNoXG4gIGNvbnN0IGhhc0hhZEV2ZW50c1JlZiA9IHVzZVJlZihmYWxzZSk7XG4gIGlmIChzb3J0ZWRFdmVudHMubGVuZ3RoID4gMCkge1xuICAgIGhhc0hhZEV2ZW50c1JlZi5jdXJyZW50ID0gdHJ1ZTtcbiAgfVxuICBjb25zdCBpc0luaXRpYWxMb2FkID0gaXNMb2FkaW5nICYmICFoYXNIYWRFdmVudHNSZWYuY3VycmVudDtcbiAgY29uc3QgaXNSZWZldGNoaW5nID1cbiAgICBpc0xvYWRpbmcgJiYgaGFzSGFkRXZlbnRzUmVmLmN1cnJlbnQgJiYgc29ydGVkRXZlbnRzLmxlbmd0aCA9PT0gMDtcblxuICBpZiAoaXNJbml0aWFsTG9hZCkge1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cImgtZnVsbCBmbGV4IGZsZXgtY29sIG92ZXJmbG93LWhpZGRlblwiPlxuICAgICAgICB7LyogU2tlbGV0b24gc2VhcmNoIGJhciAqL31cbiAgICAgICAgPGRpdiBzdHlsZT17eyBwYWRkaW5nOiA2IH19PlxuICAgICAgICAgIDxTa2VsZXRvbiBzdHlsZT17eyBoZWlnaHQ6IDQwLCBib3JkZXJSYWRpdXM6IDYgfX0gLz5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIHsvKiBTa2VsZXRvbiBoZWFkZXIgKi99XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMCBoLTEwIGJvcmRlci1iIGZsZXgtc2hyaW5rLTBcIlxuICAgICAgICAgIHN0eWxlPXt7IGJvcmRlckNvbG9yOiAndmFyKC0tZHMtZ3JheS1hbHBoYS0yMDApJyB9fVxuICAgICAgICA+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4LXNocmluay0wXCIgc3R5bGU9e3sgd2lkdGg6IEdVVFRFUl9XSURUSCB9fSAvPlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidy01IGZsZXgtc2hyaW5rLTBcIiAvPlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibWluLXctMCBweC00XCIgc3R5bGU9e3sgZmxleDogJzIgMSAwJScgfX0+XG4gICAgICAgICAgICA8U2tlbGV0b24gY2xhc3NOYW1lPVwiaC0zXCIgc3R5bGU9e3sgd2lkdGg6IDQwIH19IC8+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtaW4tdy0wIHB4LTRcIiBzdHlsZT17eyBmbGV4OiAnMiAxIDAlJyB9fT5cbiAgICAgICAgICAgIDxTa2VsZXRvbiBjbGFzc05hbWU9XCJoLTNcIiBzdHlsZT17eyB3aWR0aDogNzIgfX0gLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm1pbi13LTAgcHgtNFwiIHN0eWxlPXt7IGZsZXg6ICcyIDEgMCUnIH19PlxuICAgICAgICAgICAgPFNrZWxldG9uIGNsYXNzTmFtZT1cImgtM1wiIHN0eWxlPXt7IHdpZHRoOiA0NCB9fSAvPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibWluLXctMCBweC00XCIgc3R5bGU9e3sgZmxleDogJzMgMSAwJScgfX0+XG4gICAgICAgICAgICA8U2tlbGV0b24gY2xhc3NOYW1lPVwiaC0zXCIgc3R5bGU9e3sgd2lkdGg6IDkyIH19IC8+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtaW4tdy0wIHB4LTRcIiBzdHlsZT17eyBmbGV4OiAnMyAxIDAlJyB9fT5cbiAgICAgICAgICAgIDxTa2VsZXRvbiBjbGFzc05hbWU9XCJoLTNcIiBzdHlsZT17eyB3aWR0aDogNjAgfX0gLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxSb3dzU2tlbGV0b24gLz5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cblxuICBpZiAoIWlzTG9hZGluZyAmJiAoIWV2ZW50cyB8fCBldmVudHMubGVuZ3RoID09PSAwKSkge1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGgtZnVsbCB0ZXh0LXNtXCJcbiAgICAgICAgc3R5bGU9e3sgY29sb3I6ICd2YXIoLS1kcy1ncmF5LTcwMCknIH19XG4gICAgICA+XG4gICAgICAgIE5vIGV2ZW50cyBmb3VuZFxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPERlY3J5cHRDbGlja0NvbnRleHQuUHJvdmlkZXJcbiAgICAgIHZhbHVlPXtvbkRlY3J5cHQgPyB7IG9uRGVjcnlwdCwgaXNEZWNyeXB0aW5nIH0gOiB1bmRlZmluZWR9XG4gICAgPlxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJoLWZ1bGwgZmxleCBmbGV4LWNvbCBvdmVyZmxvdy1oaWRkZW5cIj5cbiAgICAgICAgPHN0eWxlPntgQGtleWZyYW1lcyB3b3JrZmxvdy1kb3QtcHVsc2V7MCV7dHJhbnNmb3JtOnNjYWxlKDEpO29wYWNpdHk6Ljd9NzAlLDEwMCV7dHJhbnNmb3JtOnNjYWxlKDIuMik7b3BhY2l0eTowfX1gfTwvc3R5bGU+XG4gICAgICAgIHsvKiBTZWFyY2ggYmFyICsgc29ydCAqL31cbiAgICAgICAgPGRpdlxuICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICBwYWRkaW5nOiA2LFxuICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiAndmFyKC0tZHMtYmFja2dyb3VuZC0xMDApJyxcbiAgICAgICAgICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICAgICAgICAgIGdhcDogNixcbiAgICAgICAgICB9fVxuICAgICAgICA+XG4gICAgICAgICAgPGxhYmVsXG4gICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgICAgICAgICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICAgICAgICAgICAgICBqdXN0aWZ5Q29udGVudDogJ2NlbnRlcicsXG4gICAgICAgICAgICAgIGJvcmRlclJhZGl1czogNixcbiAgICAgICAgICAgICAgYm94U2hhZG93OiAnMCAwIDAgMXB4IHZhcigtLWRzLWdyYXktYWxwaGEtNDAwKScsXG4gICAgICAgICAgICAgIGJhY2tncm91bmQ6ICd2YXIoLS1kcy1iYWNrZ3JvdW5kLTEwMCknLFxuICAgICAgICAgICAgICBoZWlnaHQ6IDQwLFxuICAgICAgICAgICAgICBmbGV4OiAxLFxuICAgICAgICAgICAgICBtaW5XaWR0aDogMCxcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICAgIHdpZHRoOiA0MCxcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IDQwLFxuICAgICAgICAgICAgICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICAgICAgICAgICAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICAgICAgICAgICAgICBqdXN0aWZ5Q29udGVudDogJ2NlbnRlcicsXG4gICAgICAgICAgICAgICAgY29sb3I6ICd2YXIoLS1kcy1ncmF5LTgwMCknLFxuICAgICAgICAgICAgICAgIGZsZXhTaHJpbms6IDAsXG4gICAgICAgICAgICAgIH19XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxzdmdcbiAgICAgICAgICAgICAgICB3aWR0aD17MTZ9XG4gICAgICAgICAgICAgICAgaGVpZ2h0PXsxNn1cbiAgICAgICAgICAgICAgICB2aWV3Qm94PVwiMCAwIDE2IDE2XCJcbiAgICAgICAgICAgICAgICBmaWxsPVwibm9uZVwiXG4gICAgICAgICAgICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICBmb2N1c2FibGU9XCJmYWxzZVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlXG4gICAgICAgICAgICAgICAgICBjeD1cIjdcIlxuICAgICAgICAgICAgICAgICAgY3k9XCI3XCJcbiAgICAgICAgICAgICAgICAgIHI9XCI0LjVcIlxuICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiY3VycmVudENvbG9yXCJcbiAgICAgICAgICAgICAgICAgIHN0cm9rZVdpZHRoPVwiMS41XCJcbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICAgICAgICBkPVwiTTExLjUgMTEuNUwxNCAxNFwiXG4gICAgICAgICAgICAgICAgICBzdHJva2U9XCJjdXJyZW50Q29sb3JcIlxuICAgICAgICAgICAgICAgICAgc3Ryb2tlV2lkdGg9XCIxLjVcIlxuICAgICAgICAgICAgICAgICAgc3Ryb2tlTGluZWNhcD1cInJvdW5kXCJcbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgIHR5cGU9XCJzZWFyY2hcIlxuICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlNlYXJjaCBieSBuYW1lLCBldmVudCB0eXBlLCBvciBJROKAplwiXG4gICAgICAgICAgICAgIHZhbHVlPXtzZWFyY2hRdWVyeX1cbiAgICAgICAgICAgICAgb25DaGFuZ2U9eyhlKSA9PiBzZXRTZWFyY2hRdWVyeShlLnRhcmdldC52YWx1ZSl9XG4gICAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgbWFyZ2luTGVmdDogLTE2LFxuICAgICAgICAgICAgICAgIHBhZGRpbmdJbmxpbmU6IDEyLFxuICAgICAgICAgICAgICAgIGZvbnRGYW1pbHk6ICdpbmhlcml0JyxcbiAgICAgICAgICAgICAgICBmb250U2l6ZTogMTQsXG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZDogJ3RyYW5zcGFyZW50JyxcbiAgICAgICAgICAgICAgICBib3JkZXI6ICdub25lJyxcbiAgICAgICAgICAgICAgICBvdXRsaW5lOiAnbm9uZScsXG4gICAgICAgICAgICAgICAgaGVpZ2h0OiA0MCxcbiAgICAgICAgICAgICAgICB3aWR0aDogJzEwMCUnLFxuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgIDxNZW51RHJvcGRvd25cbiAgICAgICAgICAgIG9wdGlvbnM9e1NPUlRfT1BUSU9OU31cbiAgICAgICAgICAgIHZhbHVlPXtlZmZlY3RpdmVTb3J0T3JkZXJ9XG4gICAgICAgICAgICBvbkNoYW5nZT17aGFuZGxlU29ydE9yZGVyQ2hhbmdlfVxuICAgICAgICAgIC8+XG4gICAgICAgICAgeyhoYXNFbmNyeXB0ZWREYXRhIHx8IGVuY3J5cHRpb25LZXkpICYmIG9uRGVjcnlwdCAmJiAoXG4gICAgICAgICAgICA8RGVjcnlwdEJ1dHRvblxuICAgICAgICAgICAgICBkZWNyeXB0ZWQ9eyEhZW5jcnlwdGlvbktleX1cbiAgICAgICAgICAgICAgbG9hZGluZz17aXNEZWNyeXB0aW5nfVxuICAgICAgICAgICAgICBvbkNsaWNrPXtvbkRlY3J5cHR9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICl9XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIHsvKiBIZWFkZXIgKi99XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMCB0ZXh0LVsxM3B4XSBmb250LW1lZGl1bSBoLTEwIGJvcmRlci1iIGZsZXgtc2hyaW5rLTBcIlxuICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICBib3JkZXJDb2xvcjogJ3ZhcigtLWRzLWdyYXktYWxwaGEtMjAwKScsXG4gICAgICAgICAgICBjb2xvcjogJ3ZhcigtLWRzLWdyYXktOTAwKScsXG4gICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6ICd2YXIoLS1kcy1iYWNrZ3JvdW5kLTEwMCknLFxuICAgICAgICAgIH19XG4gICAgICAgID5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXgtc2hyaW5rLTBcIiBzdHlsZT17eyB3aWR0aDogR1VUVEVSX1dJRFRIIH19IC8+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ3LTUgZmxleC1zaHJpbmstMFwiIC8+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtaW4tdy0wIHB4LTRcIiBzdHlsZT17eyBmbGV4OiAnMiAxIDAlJyB9fT5cbiAgICAgICAgICAgIFRpbWVcbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm1pbi13LTAgcHgtNFwiIHN0eWxlPXt7IGZsZXg6ICcyIDEgMCUnIH19PlxuICAgICAgICAgICAgRXZlbnQgVHlwZVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibWluLXctMCBweC00XCIgc3R5bGU9e3sgZmxleDogJzIgMSAwJScgfX0+XG4gICAgICAgICAgICBOYW1lXG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtaW4tdy0wIHB4LTRcIiBzdHlsZT17eyBmbGV4OiAnMyAxIDAlJyB9fT5cbiAgICAgICAgICAgIENvcnJlbGF0aW9uIElEXG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtaW4tdy0wIHB4LTRcIiBzdHlsZT17eyBmbGV4OiAnMyAxIDAlJyB9fT5cbiAgICAgICAgICAgIEV2ZW50IElEXG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIHsvKiBWaXJ0dWFsaXplZCBldmVudCByb3dzIG9yIHJlZmV0Y2hpbmcgc2tlbGV0b24gKi99XG4gICAgICAgIHtpc1JlZmV0Y2hpbmcgPyAoXG4gICAgICAgICAgPFJvd3NTa2VsZXRvbiAvPlxuICAgICAgICApIDogKFxuICAgICAgICAgIDxWaXJ0dW9zb1xuICAgICAgICAgICAgcmVmPXt2aXJ0dW9zb1JlZn1cbiAgICAgICAgICAgIHRvdGFsQ291bnQ9e3NvcnRlZEV2ZW50cy5sZW5ndGh9XG4gICAgICAgICAgICBvdmVyc2Nhbj17MjB9XG4gICAgICAgICAgICBkZWZhdWx0SXRlbUhlaWdodD17NDB9XG4gICAgICAgICAgICBlbmRSZWFjaGVkPXsoKSA9PiB7XG4gICAgICAgICAgICAgIGlmICghaGFzTW9yZUV2ZW50cyB8fCBpc0xvYWRpbmdNb3JlRXZlbnRzKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHZvaWQgb25Mb2FkTW9yZUV2ZW50cz8uKCk7XG4gICAgICAgICAgICB9fVxuICAgICAgICAgICAgaXRlbUNvbnRlbnQ9eyhpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IGV2ID0gc29ydGVkRXZlbnRzW2luZGV4XTtcbiAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICA8RXZlbnRSb3dcbiAgICAgICAgICAgICAgICAgIGV2ZW50PXtldn1cbiAgICAgICAgICAgICAgICAgIGluZGV4PXtpbmRleH1cbiAgICAgICAgICAgICAgICAgIGlzRmlyc3Q9e2luZGV4ID09PSAwfVxuICAgICAgICAgICAgICAgICAgaXNMYXN0PXtpbmRleCA9PT0gc29ydGVkRXZlbnRzLmxlbmd0aCAtIDF9XG4gICAgICAgICAgICAgICAgICBpc0V4cGFuZGVkPXtleHBhbmRlZEV2ZW50SWRzLmhhcyhldi5ldmVudElkKX1cbiAgICAgICAgICAgICAgICAgIG9uVG9nZ2xlRXhwYW5kPXt0b2dnbGVFdmVudEV4cGFuZGVkfVxuICAgICAgICAgICAgICAgICAgYWN0aXZlR3JvdXBLZXk9e2FjdGl2ZUdyb3VwS2V5fVxuICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRHcm91cEtleT17c2VsZWN0ZWRHcm91cEtleX1cbiAgICAgICAgICAgICAgICAgIHNlbGVjdGVkR3JvdXBSYW5nZT17c2VsZWN0ZWRHcm91cFJhbmdlfVxuICAgICAgICAgICAgICAgICAgY29ycmVsYXRpb25OYW1lTWFwPXtjb3JyZWxhdGlvbk5hbWVNYXB9XG4gICAgICAgICAgICAgICAgICB3b3JrZmxvd05hbWU9e3dvcmtmbG93TmFtZX1cbiAgICAgICAgICAgICAgICAgIGR1cmF0aW9uTWFwPXtkdXJhdGlvbk1hcH1cbiAgICAgICAgICAgICAgICAgIG9uU2VsZWN0R3JvdXA9e29uU2VsZWN0R3JvdXB9XG4gICAgICAgICAgICAgICAgICBvbkhvdmVyR3JvdXA9e29uSG92ZXJHcm91cH1cbiAgICAgICAgICAgICAgICAgIG9uTG9hZEV2ZW50RGF0YT17b25Mb2FkRXZlbnREYXRhfVxuICAgICAgICAgICAgICAgICAgY2FjaGVkRXZlbnREYXRhPXtcbiAgICAgICAgICAgICAgICAgICAgZXZlbnREYXRhQ2FjaGVSZWYuY3VycmVudC5nZXQoZXYuZXZlbnRJZCkgPz8gbnVsbFxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgb25DYWNoZUV2ZW50RGF0YT17Y2FjaGVFdmVudERhdGF9XG4gICAgICAgICAgICAgICAgICBlbmNyeXB0aW9uS2V5PXtlbmNyeXB0aW9uS2V5fVxuICAgICAgICAgICAgICAgICAgb25FbmNyeXB0ZWREYXRhRGV0ZWN0ZWQ9e2hhbmRsZUVuY3J5cHRlZERhdGFEZXRlY3RlZH1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIHN0eWxlPXt7IGZsZXg6IDEsIG1pbkhlaWdodDogMCB9fVxuICAgICAgICAgIC8+XG4gICAgICAgICl9XG5cbiAgICAgICAgey8qIEZpeGVkIGZvb3RlciDigJQgY291bnQgKyBsb2FkIG1vcmUgKi99XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzc05hbWU9XCJyZWxhdGl2ZSBmbGV4LXNocmluay0wIGZsZXggaXRlbXMtY2VudGVyIGgtMTAgYm9yZGVyLXQgcHgtNCB0ZXh0LXhzXCJcbiAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgYm9yZGVyQ29sb3I6ICd2YXIoLS1kcy1ncmF5LWFscGhhLTIwMCknLFxuICAgICAgICAgICAgY29sb3I6ICd2YXIoLS1kcy1ncmF5LTkwMCknLFxuICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiAndmFyKC0tZHMtYmFja2dyb3VuZC0xMDApJyxcbiAgICAgICAgICB9fVxuICAgICAgICA+XG4gICAgICAgICAgPHNwYW4+XG4gICAgICAgICAgICB7c29ydGVkRXZlbnRzLmxlbmd0aH0gZXZlbnRcbiAgICAgICAgICAgIHtzb3J0ZWRFdmVudHMubGVuZ3RoICE9PSAxID8gJ3MnIDogJyd9IGxvYWRlZFxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICB7aGFzTW9yZUV2ZW50cyAmJiAoXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImFic29sdXRlIGluc2V0LTAgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgcG9pbnRlci1ldmVudHMtbm9uZVwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInBvaW50ZXItZXZlbnRzLWF1dG9cIj5cbiAgICAgICAgICAgICAgICA8TG9hZE1vcmVCdXR0b25cbiAgICAgICAgICAgICAgICAgIGxvYWRpbmc9e2lzTG9hZGluZ01vcmVFdmVudHN9XG4gICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB2b2lkIG9uTG9hZE1vcmVFdmVudHM/LigpfVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L0RlY3J5cHRDbGlja0NvbnRleHQuUHJvdmlkZXI+XG4gICk7XG59XG4iXX0=
@@ -73,4 +73,4 @@ export function HookResolveModalWrapper({ hookActions, }) {
73
73
  }
74
74
  // Re-export the modal for direct use
75
75
  export { ResolveHookModal } from './sidebar/resolve-hook-modal';
76
- //# sourceMappingURL=hook-actions.js.map
76
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaG9vay1hY3Rpb25zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbXBvbmVudHMvaG9vay1hY3Rpb25zLnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZLENBQUM7O0FBR2IsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUNwQyxPQUFPLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxNQUFNLE9BQU8sQ0FBQztBQUM5QyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ3hDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBNkJoRSwrRUFBK0U7QUFDL0UsdUNBQXVDO0FBQ3ZDLCtFQUErRTtBQUUvRTs7O0dBR0c7QUFDSCxNQUFNLFVBQVUsY0FBYyxDQUFDLEVBQzdCLFNBQVMsRUFDVCxTQUFTLEdBQ2E7SUFDdEIsTUFBTSxLQUFLLEdBQUcsUUFBUSxFQUFFLENBQUM7SUFDekIsTUFBTSxDQUFDLFdBQVcsRUFBRSxjQUFjLENBQUMsR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDdEQsTUFBTSxDQUFDLFlBQVksRUFBRSxlQUFlLENBQUMsR0FBRyxRQUFRLENBQWMsSUFBSSxDQUFDLENBQUM7SUFFcEUsTUFBTSxnQkFBZ0IsR0FBRyxXQUFXLENBQUMsQ0FBQyxJQUFVLEVBQUUsRUFBRTtRQUNsRCxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDeEIsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBRVAsTUFBTSxpQkFBaUIsR0FBRyxXQUFXLENBQUMsR0FBRyxFQUFFO1FBQ3pDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN4QixDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFFUCxNQUFNLGFBQWEsR0FBRyxXQUFXLENBQy9CLEtBQUssRUFBRSxPQUFnQixFQUFFLEVBQUU7UUFDekIsSUFBSSxXQUFXLElBQUksQ0FBQyxZQUFZO1lBQUUsT0FBTztRQUV6QyxJQUFJLENBQUM7WUFDSCxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDckIsTUFBTSxTQUFTLENBQUMsWUFBWSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBQ3ZDLEtBQUssQ0FBQyxPQUFPLENBQUMsZUFBZSxFQUFFO2dCQUM3QixXQUFXLEVBQUUsa0RBQWtEO2FBQ2hFLENBQUMsQ0FBQztZQUNILGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUN0QixTQUFTLEVBQUUsU0FBUyxFQUFFLEVBQUUsQ0FBQztRQUMzQixDQUFDO1FBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztZQUNiLE9BQU8sQ0FBQyxLQUFLLENBQUMseUJBQXlCLEVBQUUsR0FBRyxDQUFDLENBQUM7WUFDOUMsS0FBSyxDQUFDLEtBQUssQ0FBQyx3QkFBd0IsRUFBRTtnQkFDcEMsV0FBVyxFQUNULEdBQUcsWUFBWSxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLDJCQUEyQjthQUNuRSxDQUFDLENBQUM7UUFDTCxDQUFDO2dCQUFTLENBQUM7WUFDVCxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDeEIsQ0FBQztJQUNILENBQUMsRUFDRCxDQUFDLFNBQVMsRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFFLFNBQVMsQ0FBQyxDQUNsRCxDQUFDO0lBRUYsT0FBTztRQUNMLFdBQVc7UUFDWCxZQUFZO1FBQ1osZ0JBQWdCO1FBQ2hCLGlCQUFpQjtRQUNqQixhQUFhO0tBQ2QsQ0FBQztBQUNKLENBQUM7QUF1QkQ7OztHQUdHO0FBQ0gsTUFBTSxVQUFVLHVCQUF1QixDQUFDLEVBQ3RDLElBQUksRUFDSixlQUFlLEdBQUcsS0FBSyxFQUN2QixjQUFjLEVBQ2QsZ0JBQWdCLEdBQ2E7SUFDN0IsTUFBTSxXQUFXLEdBQUcsQ0FBQyxDQUFtQixFQUFFLEVBQUU7UUFDMUMsSUFBSSxlQUFlO1lBQUUsQ0FBQyxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3pDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN2QixDQUFDLENBQUM7SUFFRixPQUFPLENBQ0wsTUFBQyxnQkFBZ0IsSUFBQyxPQUFPLEVBQUUsV0FBVyxhQUNwQyxLQUFDLElBQUksSUFBQyxTQUFTLEVBQUMsY0FBYyxHQUFHLG9CQUVoQixDQUNwQixDQUFDO0FBQ0osQ0FBQztBQVdEOzs7R0FHRztBQUNILE1BQU0sVUFBVSx1QkFBdUIsQ0FBQyxFQUN0QyxXQUFXLEdBQ1c7SUFDdEIsTUFBTSxFQUFFLFlBQVksRUFBRSxpQkFBaUIsRUFBRSxhQUFhLEVBQUUsV0FBVyxFQUFFLEdBQ25FLFdBQVcsQ0FBQztJQUVkLE9BQU8sQ0FDTCxLQUFDLGdCQUFnQixJQUNmLE1BQU0sRUFBRSxZQUFZLEtBQUssSUFBSSxFQUM3QixPQUFPLEVBQUUsaUJBQWlCLEVBQzFCLFFBQVEsRUFBRSxhQUFhLEVBQ3ZCLFlBQVksRUFBRSxXQUFXLEdBQ3pCLENBQ0gsQ0FBQztBQUNKLENBQUM7QUFFRCxxQ0FBcUM7QUFDckMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sOEJBQThCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIGNsaWVudCc7XG5cbmltcG9ydCB0eXBlIHsgSG9vaywgV29ya2Zsb3dSdW5TdGF0dXMgfSBmcm9tICdAd29ya2Zsb3cvd29ybGQnO1xuaW1wb3J0IHsgU2VuZCB9IGZyb20gJ2x1Y2lkZS1yZWFjdCc7XG5pbXBvcnQgeyB1c2VDYWxsYmFjaywgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyB1c2VUb2FzdCB9IGZyb20gJy4uL2xpYi90b2FzdCc7XG5pbXBvcnQgeyBSZXNvbHZlSG9va01vZGFsIH0gZnJvbSAnLi9zaWRlYmFyL3Jlc29sdmUtaG9vay1tb2RhbCc7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIFR5cGVzXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbmV4cG9ydCBpbnRlcmZhY2UgSG9va0FjdGlvbkNhbGxiYWNrcyB7XG4gIC8qKiBDYWxsZWQgYWZ0ZXIgYSBzdWNjZXNzZnVsIGFjdGlvbiAqL1xuICBvblN1Y2Nlc3M/OiAoKSA9PiB2b2lkO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFVzZUhvb2tBY3Rpb25zT3B0aW9ucyB7XG4gIG9uUmVzb2x2ZTogKGhvb2s6IEhvb2ssIHBheWxvYWQ6IHVua25vd24pID0+IFByb21pc2U8dm9pZD47XG4gIGNhbGxiYWNrcz86IEhvb2tBY3Rpb25DYWxsYmFja3M7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVXNlSG9va0FjdGlvbnNSZXR1cm4ge1xuICAvKiogV2hldGhlciB0aGUgaG9vayBpcyBjdXJyZW50bHkgYmVpbmcgcmVzb2x2ZWQgKi9cbiAgaXNSZXNvbHZpbmc6IGJvb2xlYW47XG4gIC8qKiBUaGUgaG9vayBjdXJyZW50bHkgc2VsZWN0ZWQgZm9yIHJlc29sdXRpb24gKG51bGwgaWYgbm9uZSkgKi9cbiAgc2VsZWN0ZWRIb29rOiBIb29rIHwgbnVsbDtcbiAgLyoqIE9wZW4gdGhlIHJlc29sdmUgbW9kYWwgZm9yIGEgc3BlY2lmaWMgaG9vayAqL1xuICBvcGVuUmVzb2x2ZU1vZGFsOiAoaG9vazogSG9vaykgPT4gdm9pZDtcbiAgLyoqIENsb3NlIHRoZSByZXNvbHZlIG1vZGFsICovXG4gIGNsb3NlUmVzb2x2ZU1vZGFsOiAoKSA9PiB2b2lkO1xuICAvKiogSGFuZGxlIHN1Ym1pdHRpbmcgdGhlIHJlc29sdmUgcGF5bG9hZCAqL1xuICBoYW5kbGVSZXNvbHZlOiAocGF5bG9hZDogdW5rbm93bikgPT4gUHJvbWlzZTx2b2lkPjtcbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gSG9vayBmb3IgbWFuYWdpbmcgaG9vayBhY3Rpb25zIHN0YXRlXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKlxuICogUmVhY3QgaG9vayBmb3IgbWFuYWdpbmcgaG9vayBhY3Rpb24gc3RhdGUuXG4gKiBVc2UgdGhpcyB0byBjb29yZGluYXRlIHRoZSByZXNvbHZlIG1vZGFsIGFjcm9zcyBjb21wb25lbnRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlSG9va0FjdGlvbnMoe1xuICBvblJlc29sdmUsXG4gIGNhbGxiYWNrcyxcbn06IFVzZUhvb2tBY3Rpb25zT3B0aW9ucyk6IFVzZUhvb2tBY3Rpb25zUmV0dXJuIHtcbiAgY29uc3QgdG9hc3QgPSB1c2VUb2FzdCgpO1xuICBjb25zdCBbaXNSZXNvbHZpbmcsIHNldElzUmVzb2x2aW5nXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgW3NlbGVjdGVkSG9vaywgc2V0U2VsZWN0ZWRIb29rXSA9IHVzZVN0YXRlPEhvb2sgfCBudWxsPihudWxsKTtcblxuICBjb25zdCBvcGVuUmVzb2x2ZU1vZGFsID0gdXNlQ2FsbGJhY2soKGhvb2s6IEhvb2spID0+IHtcbiAgICBzZXRTZWxlY3RlZEhvb2soaG9vayk7XG4gIH0sIFtdKTtcblxuICBjb25zdCBjbG9zZVJlc29sdmVNb2RhbCA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBzZXRTZWxlY3RlZEhvb2sobnVsbCk7XG4gIH0sIFtdKTtcblxuICBjb25zdCBoYW5kbGVSZXNvbHZlID0gdXNlQ2FsbGJhY2soXG4gICAgYXN5bmMgKHBheWxvYWQ6IHVua25vd24pID0+IHtcbiAgICAgIGlmIChpc1Jlc29sdmluZyB8fCAhc2VsZWN0ZWRIb29rKSByZXR1cm47XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHNldElzUmVzb2x2aW5nKHRydWUpO1xuICAgICAgICBhd2FpdCBvblJlc29sdmUoc2VsZWN0ZWRIb29rLCBwYXlsb2FkKTtcbiAgICAgICAgdG9hc3Quc3VjY2VzcygnSG9vayByZXNvbHZlZCcsIHtcbiAgICAgICAgICBkZXNjcmlwdGlvbjogJ1RoZSBwYXlsb2FkIGhhcyBiZWVuIHNlbnQgYW5kIHRoZSBob29rIHJlc29sdmVkLicsXG4gICAgICAgIH0pO1xuICAgICAgICBzZXRTZWxlY3RlZEhvb2sobnVsbCk7XG4gICAgICAgIGNhbGxiYWNrcz8ub25TdWNjZXNzPy4oKTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdGYWlsZWQgdG8gcmVzb2x2ZSBob29rOicsIGVycik7XG4gICAgICAgIHRvYXN0LmVycm9yKCdGYWlsZWQgdG8gcmVzb2x2ZSBob29rJywge1xuICAgICAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICAgICAgZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIubWVzc2FnZSA6ICdBbiB1bmtub3duIGVycm9yIG9jY3VycmVkJyxcbiAgICAgICAgfSk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBzZXRJc1Jlc29sdmluZyhmYWxzZSk7XG4gICAgICB9XG4gICAgfSxcbiAgICBbb25SZXNvbHZlLCBzZWxlY3RlZEhvb2ssIGlzUmVzb2x2aW5nLCBjYWxsYmFja3NdXG4gICk7XG5cbiAgcmV0dXJuIHtcbiAgICBpc1Jlc29sdmluZyxcbiAgICBzZWxlY3RlZEhvb2ssXG4gICAgb3BlblJlc29sdmVNb2RhbCxcbiAgICBjbG9zZVJlc29sdmVNb2RhbCxcbiAgICBoYW5kbGVSZXNvbHZlLFxuICB9O1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBEcm9wZG93biBNZW51IEl0ZW0gQ29tcG9uZW50XG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbmV4cG9ydCBpbnRlcmZhY2UgSG9va0FjdGlvbnNEcm9wZG93bkl0ZW1Qcm9wcyB7XG4gIC8qKiBUaGUgaG9vayB0byBhY3Qgb24gKi9cbiAgaG9vazogSG9vaztcbiAgLyoqIFRoZSBjdXJyZW50IHJ1biBzdGF0dXMgKHVzZWQgdG8gZGV0ZXJtaW5lIGlmIGFjdGlvbnMgYXJlIGF2YWlsYWJsZSkgKi9cbiAgcnVuU3RhdHVzPzogV29ya2Zsb3dSdW5TdGF0dXM7XG4gIC8qKiBTdG9wIGNsaWNrIGV2ZW50IHByb3BhZ2F0aW9uICh1c2VmdWwgaW4gdGFibGUgcm93cykgKi9cbiAgc3RvcFByb3BhZ2F0aW9uPzogYm9vbGVhbjtcbiAgLyoqIENhbGxlZCB3aGVuIHRoZSByZXNvbHZlIGFjdGlvbiBpcyB0cmlnZ2VyZWQgKi9cbiAgb25SZXNvbHZlQ2xpY2s6IChob29rOiBIb29rKSA9PiB2b2lkO1xuICAvKiogQ3VzdG9tIERyb3Bkb3duTWVudUl0ZW0gY29tcG9uZW50IChhbGxvd3MgdXNpbmcgdGhlIGNvbnN1bWVyJ3MgVUkgbGlicmFyeSkgKi9cbiAgRHJvcGRvd25NZW51SXRlbTogUmVhY3QuQ29tcG9uZW50VHlwZTx7XG4gICAgb25DbGljaz86IChlOiBSZWFjdC5Nb3VzZUV2ZW50KSA9PiB2b2lkO1xuICAgIGRpc2FibGVkPzogYm9vbGVhbjtcbiAgICBjaGlsZHJlbjogUmVhY3QuUmVhY3ROb2RlO1xuICB9Pjtcbn1cblxuLyoqXG4gKiBEcm9wZG93biBtZW51IGl0ZW0gZm9yIHJlc29sdmluZyBhIGhvb2suXG4gKiBUaGlzIGlzIGEgc2luZ2xlIG1lbnUgaXRlbSBjb21wb25lbnQgdGhhdCBjYW4gYmUgY29tcG9zZWQgaW50byBkcm9wZG93biBtZW51cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIFJlc29sdmVIb29rRHJvcGRvd25JdGVtKHtcbiAgaG9vayxcbiAgc3RvcFByb3BhZ2F0aW9uID0gZmFsc2UsXG4gIG9uUmVzb2x2ZUNsaWNrLFxuICBEcm9wZG93bk1lbnVJdGVtLFxufTogSG9va0FjdGlvbnNEcm9wZG93bkl0ZW1Qcm9wcyk6IFJlYWN0LkpTWC5FbGVtZW50IHtcbiAgY29uc3QgaGFuZGxlQ2xpY2sgPSAoZTogUmVhY3QuTW91c2VFdmVudCkgPT4ge1xuICAgIGlmIChzdG9wUHJvcGFnYXRpb24pIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgb25SZXNvbHZlQ2xpY2soaG9vayk7XG4gIH07XG5cbiAgcmV0dXJuIChcbiAgICA8RHJvcGRvd25NZW51SXRlbSBvbkNsaWNrPXtoYW5kbGVDbGlja30+XG4gICAgICA8U2VuZCBjbGFzc05hbWU9XCJoLTQgdy00IG1yLTJcIiAvPlxuICAgICAgUmVzb2x2ZSBIb29rXG4gICAgPC9Ecm9wZG93bk1lbnVJdGVtPlxuICApO1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBNb2RhbCB3cmFwcGVyIGZvciBjb252ZW5pZW5jZVxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5leHBvcnQgaW50ZXJmYWNlIEhvb2tSZXNvbHZlTW9kYWxQcm9wcyB7XG4gIC8qKiBUaGUgaG9vayBhY3Rpb25zIHN0YXRlIGZyb20gdXNlSG9va0FjdGlvbnMgKi9cbiAgaG9va0FjdGlvbnM6IFVzZUhvb2tBY3Rpb25zUmV0dXJuO1xufVxuXG4vKipcbiAqIENvbnZlbmllbmNlIHdyYXBwZXIgdGhhdCByZW5kZXJzIHRoZSBSZXNvbHZlSG9va01vZGFsIHVzaW5nIHVzZUhvb2tBY3Rpb25zIHN0YXRlLlxuICogUGxhY2UgdGhpcyBhdCB0aGUgdG9wIGxldmVsIG9mIHlvdXIgY29tcG9uZW50IChvdXRzaWRlIGFueSBpdGVyYXRpb24pLlxuICovXG5leHBvcnQgZnVuY3Rpb24gSG9va1Jlc29sdmVNb2RhbFdyYXBwZXIoe1xuICBob29rQWN0aW9ucyxcbn06IEhvb2tSZXNvbHZlTW9kYWxQcm9wcyk6IFJlYWN0LkpTWC5FbGVtZW50IHwgbnVsbCB7XG4gIGNvbnN0IHsgc2VsZWN0ZWRIb29rLCBjbG9zZVJlc29sdmVNb2RhbCwgaGFuZGxlUmVzb2x2ZSwgaXNSZXNvbHZpbmcgfSA9XG4gICAgaG9va0FjdGlvbnM7XG5cbiAgcmV0dXJuIChcbiAgICA8UmVzb2x2ZUhvb2tNb2RhbFxuICAgICAgaXNPcGVuPXtzZWxlY3RlZEhvb2sgIT09IG51bGx9XG4gICAgICBvbkNsb3NlPXtjbG9zZVJlc29sdmVNb2RhbH1cbiAgICAgIG9uU3VibWl0PXtoYW5kbGVSZXNvbHZlfVxuICAgICAgaXNTdWJtaXR0aW5nPXtpc1Jlc29sdmluZ31cbiAgICAvPlxuICApO1xufVxuXG4vLyBSZS1leHBvcnQgdGhlIG1vZGFsIGZvciBkaXJlY3QgdXNlXG5leHBvcnQgeyBSZXNvbHZlSG9va01vZGFsIH0gZnJvbSAnLi9zaWRlYmFyL3Jlc29sdmUtaG9vay1tb2RhbCc7XG4iXX0=
@@ -10,6 +10,7 @@ export { type StreamChunk, StreamViewer } from './stream-viewer';
10
10
  export type { Span, SpanEvent } from './trace-viewer/types';
11
11
  export { DataInspector, type DataInspectorProps, DecryptClickContext, type DecryptClickContextValue, } from './ui/data-inspector';
12
12
  export { DecryptButton } from './ui/decrypt-button';
13
+ export { IconButton } from './ui/icon-button';
13
14
  export { LoadMoreButton } from './ui/load-more-button';
14
15
  export { MenuDropdown, type MenuDropdownOption } from './ui/menu-dropdown';
15
16
  export { Spinner } from './ui/spinner';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/components/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,YAAY,EACV,mBAAmB,EACnB,4BAA4B,EAC5B,qBAAqB,EACrB,qBAAqB,EACrB,oBAAoB,GACrB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,uBAAuB,EACvB,uBAAuB,EACvB,gBAAgB,EAChB,cAAc,GACf,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAC/D,OAAO,EACL,mBAAmB,EACnB,KAAK,uBAAuB,GAC7B,MAAM,gCAAgC,CAAC;AACxC,YAAY,EACV,gBAAgB,EAChB,iBAAiB,GAClB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,KAAK,WAAW,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AACjE,YAAY,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,EACL,aAAa,EACb,KAAK,kBAAkB,EACvB,mBAAmB,EACnB,KAAK,wBAAwB,GAC9B,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,KAAK,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAC3E,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/components/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,YAAY,EACV,mBAAmB,EACnB,4BAA4B,EAC5B,qBAAqB,EACrB,qBAAqB,EACrB,oBAAoB,GACrB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,uBAAuB,EACvB,uBAAuB,EACvB,gBAAgB,EAChB,cAAc,GACf,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAC/D,OAAO,EACL,mBAAmB,EACnB,KAAK,uBAAuB,GAC7B,MAAM,gCAAgC,CAAC;AACxC,YAAY,EACV,gBAAgB,EAChB,iBAAiB,GAClB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,KAAK,WAAW,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AACjE,YAAY,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,EACL,aAAa,EACb,KAAK,kBAAkB,EACvB,mBAAmB,EACnB,KAAK,wBAAwB,GAC9B,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,KAAK,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAC3E,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC"}
@@ -7,9 +7,10 @@ export { SidebarDataProvider, } from './sidebar/sidebar-data-context';
7
7
  export { StreamViewer } from './stream-viewer';
8
8
  export { DataInspector, DecryptClickContext, } from './ui/data-inspector';
9
9
  export { DecryptButton } from './ui/decrypt-button';
10
+ export { IconButton } from './ui/icon-button';
10
11
  export { LoadMoreButton } from './ui/load-more-button';
11
12
  export { MenuDropdown } from './ui/menu-dropdown';
12
13
  export { Spinner } from './ui/spinner';
13
14
  export { WorkflowTraceViewer } from './workflow-trace-view';
14
15
  export { NewTraceViewer } from './trace-viewer-new';
15
- //# sourceMappingURL=index.js.map
16
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29tcG9uZW50cy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDakQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBUWxELE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsdUJBQXVCLEVBQ3ZCLGdCQUFnQixFQUNoQixjQUFjLEdBQ2YsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDaEQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDL0QsT0FBTyxFQUNMLG1CQUFtQixHQUVwQixNQUFNLGdDQUFnQyxDQUFDO0FBS3hDLE9BQU8sRUFBb0IsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFakUsT0FBTyxFQUNMLGFBQWEsRUFFYixtQkFBbUIsR0FFcEIsTUFBTSxxQkFBcUIsQ0FBQztBQUM3QixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDcEQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsWUFBWSxFQUEyQixNQUFNLG9CQUFvQixDQUFDO0FBQzNFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDdkMsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDNUQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG9CQUFvQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHsgRXJyb3JCb3VuZGFyeSB9IGZyb20gJy4vZXJyb3ItYm91bmRhcnknO1xuZXhwb3J0IHsgRXZlbnRMaXN0VmlldyB9IGZyb20gJy4vZXZlbnQtbGlzdC12aWV3JztcbmV4cG9ydCB0eXBlIHtcbiAgSG9va0FjdGlvbkNhbGxiYWNrcyxcbiAgSG9va0FjdGlvbnNEcm9wZG93bkl0ZW1Qcm9wcyxcbiAgSG9va1Jlc29sdmVNb2RhbFByb3BzLFxuICBVc2VIb29rQWN0aW9uc09wdGlvbnMsXG4gIFVzZUhvb2tBY3Rpb25zUmV0dXJuLFxufSBmcm9tICcuL2hvb2stYWN0aW9ucyc7XG5leHBvcnQge1xuICBIb29rUmVzb2x2ZU1vZGFsV3JhcHBlcixcbiAgUmVzb2x2ZUhvb2tEcm9wZG93bkl0ZW0sXG4gIFJlc29sdmVIb29rTW9kYWwsXG4gIHVzZUhvb2tBY3Rpb25zLFxufSBmcm9tICcuL2hvb2stYWN0aW9ucyc7XG5leHBvcnQgeyBSdW5UcmFjZVZpZXcgfSBmcm9tICcuL3J1bi10cmFjZS12aWV3JztcbmV4cG9ydCB7IENvbnZlcnNhdGlvblZpZXcgfSBmcm9tICcuL3NpZGViYXIvY29udmVyc2F0aW9uLXZpZXcnO1xuZXhwb3J0IHtcbiAgU2lkZWJhckRhdGFQcm92aWRlcixcbiAgdHlwZSBTaWRlYmFyRGF0YUNvbnRleHRWYWx1ZSxcbn0gZnJvbSAnLi9zaWRlYmFyL3NpZGViYXItZGF0YS1jb250ZXh0JztcbmV4cG9ydCB0eXBlIHtcbiAgU2VsZWN0ZWRTcGFuSW5mbyxcbiAgU3BhblNlbGVjdGlvbkluZm8sXG59IGZyb20gJy4vc2lkZWJhci9lbnRpdHktZGV0YWlsLXBhbmVsJztcbmV4cG9ydCB7IHR5cGUgU3RyZWFtQ2h1bmssIFN0cmVhbVZpZXdlciB9IGZyb20gJy4vc3RyZWFtLXZpZXdlcic7XG5leHBvcnQgdHlwZSB7IFNwYW4sIFNwYW5FdmVudCB9IGZyb20gJy4vdHJhY2Utdmlld2VyL3R5cGVzJztcbmV4cG9ydCB7XG4gIERhdGFJbnNwZWN0b3IsXG4gIHR5cGUgRGF0YUluc3BlY3RvclByb3BzLFxuICBEZWNyeXB0Q2xpY2tDb250ZXh0LFxuICB0eXBlIERlY3J5cHRDbGlja0NvbnRleHRWYWx1ZSxcbn0gZnJvbSAnLi91aS9kYXRhLWluc3BlY3Rvcic7XG5leHBvcnQgeyBEZWNyeXB0QnV0dG9uIH0gZnJvbSAnLi91aS9kZWNyeXB0LWJ1dHRvbic7XG5leHBvcnQgeyBJY29uQnV0dG9uIH0gZnJvbSAnLi91aS9pY29uLWJ1dHRvbic7XG5leHBvcnQgeyBMb2FkTW9yZUJ1dHRvbiB9IGZyb20gJy4vdWkvbG9hZC1tb3JlLWJ1dHRvbic7XG5leHBvcnQgeyBNZW51RHJvcGRvd24sIHR5cGUgTWVudURyb3Bkb3duT3B0aW9uIH0gZnJvbSAnLi91aS9tZW51LWRyb3Bkb3duJztcbmV4cG9ydCB7IFNwaW5uZXIgfSBmcm9tICcuL3VpL3NwaW5uZXInO1xuZXhwb3J0IHsgV29ya2Zsb3dUcmFjZVZpZXdlciB9IGZyb20gJy4vd29ya2Zsb3ctdHJhY2Utdmlldyc7XG5leHBvcnQgeyBOZXdUcmFjZVZpZXdlciB9IGZyb20gJy4vdHJhY2Utdmlld2VyLW5ldyc7XG4iXX0=
@@ -13,7 +13,7 @@ export function CopyButton({ copyText, ariaLabel, className, }) {
13
13
  }
14
14
  };
15
15
  }, []);
16
- return (_jsx("button", { type: "button", "aria-label": ariaLabel, className: cn('cursor-pointer text-gray-800 hover:text-gray-1000 bg-transparent border-none p-1 m-0', className), onClick: (e) => {
16
+ return (_jsx("button", { type: "button", "aria-label": ariaLabel, className: cn('cursor-pointer text-gray-800 hover:text-gray-1000 bg-transparent border-0 p-1 m-0', className), onClick: (e) => {
17
17
  e.stopPropagation();
18
18
  if (timeoutRef.current) {
19
19
  clearTimeout(timeoutRef.current);
@@ -24,4 +24,4 @@ export function CopyButton({ copyText, ariaLabel, className, }) {
24
24
  });
25
25
  }, children: _jsxs("div", { className: "relative w-3 h-3", children: [_jsx("div", { className: cn('absolute inset-0 flex items-center justify-center transition-all duration-150 ease-out', copied ? 'scale-100 opacity-100' : 'scale-0 opacity-0'), children: _jsx(Check, { className: "w-3 h-3" }) }), _jsx("div", { className: cn('absolute inset-0 flex items-center justify-center transition-all duration-150 ease-out', copied ? 'scale-0 opacity-0' : 'scale-100 opacity-100'), children: _jsx(Copy, { className: "w-3 h-3" }) })] }) }));
26
26
  }
27
- //# sourceMappingURL=copy-button.js.map
27
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29weS1idXR0b24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50cy9uZXctdHJhY2Utdmlld2VyL2NvbXBvbmVudHMvY29weS1idXR0b24udHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVksQ0FBQzs7QUFFYixPQUFPLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUMzQyxPQUFPLEVBQVksU0FBUyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsTUFBTSxPQUFPLENBQUM7QUFDOUQsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBUXhDLE1BQU0sVUFBVSxVQUFVLENBQUMsRUFDekIsUUFBUSxFQUNSLFNBQVMsRUFDVCxTQUFTLEdBQ087SUFDaEIsTUFBTSxDQUFDLE1BQU0sRUFBRSxTQUFTLENBQUMsR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDNUMsTUFBTSxVQUFVLEdBQUcsTUFBTSxDQUF1QyxJQUFJLENBQUMsQ0FBQztJQUV0RSxTQUFTLENBQUMsR0FBRyxFQUFFO1FBQ2IsT0FBTyxHQUFHLEVBQUU7WUFDVixJQUFJLFVBQVUsQ0FBQyxPQUFPLEVBQUUsQ0FBQztnQkFDdkIsWUFBWSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUNuQyxDQUFDO1FBQ0gsQ0FBQyxDQUFDO0lBQ0osQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBRVAsT0FBTyxDQUNMLGlCQUNFLElBQUksRUFBQyxRQUFRLGdCQUNELFNBQVMsRUFDckIsU0FBUyxFQUFFLEVBQUUsQ0FDWCxtRkFBbUYsRUFDbkYsU0FBUyxDQUNWLEVBQ0QsT0FBTyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUU7WUFDYixDQUFDLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDcEIsSUFBSSxVQUFVLENBQUMsT0FBTyxFQUFFLENBQUM7Z0JBQ3ZCLFlBQVksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDbkMsQ0FBQztZQUNELEtBQUssU0FBUyxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRTtnQkFDckQsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUNoQixVQUFVLENBQUMsT0FBTyxHQUFHLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDaEUsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLFlBRUQsZUFBSyxTQUFTLEVBQUMsa0JBQWtCLGFBQy9CLGNBQ0UsU0FBUyxFQUFFLEVBQUUsQ0FDWCx3RkFBd0YsRUFDeEYsTUFBTSxDQUFDLENBQUMsQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDLENBQUMsbUJBQW1CLENBQ3ZELFlBRUQsS0FBQyxLQUFLLElBQUMsU0FBUyxFQUFDLFNBQVMsR0FBRyxHQUN6QixFQUNOLGNBQ0UsU0FBUyxFQUFFLEVBQUUsQ0FDWCx3RkFBd0YsRUFDeEYsTUFBTSxDQUFDLENBQUMsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsdUJBQXVCLENBQ3ZELFlBRUQsS0FBQyxJQUFJLElBQUMsU0FBUyxFQUFDLFNBQVMsR0FBRyxHQUN4QixJQUNGLEdBQ0MsQ0FDVixDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIid1c2UgY2xpZW50JztcblxuaW1wb3J0IHsgQ2hlY2ssIENvcHkgfSBmcm9tICdsdWNpZGUtcmVhY3QnO1xuaW1wb3J0IHsgdHlwZSBKU1gsIHVzZUVmZmVjdCwgdXNlUmVmLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGNuIH0gZnJvbSAnLi4vLi4vLi4vbGliL3V0aWxzJztcblxuaW50ZXJmYWNlIENvcHlCdXR0b25Qcm9wcyB7XG4gIGNvcHlUZXh0OiBzdHJpbmc7XG4gIGFyaWFMYWJlbDogc3RyaW5nO1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBDb3B5QnV0dG9uKHtcbiAgY29weVRleHQsXG4gIGFyaWFMYWJlbCxcbiAgY2xhc3NOYW1lLFxufTogQ29weUJ1dHRvblByb3BzKTogSlNYLkVsZW1lbnQge1xuICBjb25zdCBbY29waWVkLCBzZXRDb3BpZWRdID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCB0aW1lb3V0UmVmID0gdXNlUmVmPFJldHVyblR5cGU8dHlwZW9mIHNldFRpbWVvdXQ+IHwgbnVsbD4obnVsbCk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgaWYgKHRpbWVvdXRSZWYuY3VycmVudCkge1xuICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dFJlZi5jdXJyZW50KTtcbiAgICAgIH1cbiAgICB9O1xuICB9LCBbXSk7XG5cbiAgcmV0dXJuIChcbiAgICA8YnV0dG9uXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgIGFyaWEtbGFiZWw9e2FyaWFMYWJlbH1cbiAgICAgIGNsYXNzTmFtZT17Y24oXG4gICAgICAgICdjdXJzb3ItcG9pbnRlciB0ZXh0LWdyYXktODAwIGhvdmVyOnRleHQtZ3JheS0xMDAwIGJnLXRyYW5zcGFyZW50IGJvcmRlci0wIHAtMSBtLTAnLFxuICAgICAgICBjbGFzc05hbWVcbiAgICAgICl9XG4gICAgICBvbkNsaWNrPXsoZSkgPT4ge1xuICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICBpZiAodGltZW91dFJlZi5jdXJyZW50KSB7XG4gICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXRSZWYuY3VycmVudCk7XG4gICAgICAgIH1cbiAgICAgICAgdm9pZCBuYXZpZ2F0b3IuY2xpcGJvYXJkLndyaXRlVGV4dChjb3B5VGV4dCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgc2V0Q29waWVkKHRydWUpO1xuICAgICAgICAgIHRpbWVvdXRSZWYuY3VycmVudCA9IHNldFRpbWVvdXQoKCkgPT4gc2V0Q29waWVkKGZhbHNlKSwgMTAwMCk7XG4gICAgICAgIH0pO1xuICAgICAgfX1cbiAgICA+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cInJlbGF0aXZlIHctMyBoLTNcIj5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzTmFtZT17Y24oXG4gICAgICAgICAgICAnYWJzb2x1dGUgaW5zZXQtMCBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciB0cmFuc2l0aW9uLWFsbCBkdXJhdGlvbi0xNTAgZWFzZS1vdXQnLFxuICAgICAgICAgICAgY29waWVkID8gJ3NjYWxlLTEwMCBvcGFjaXR5LTEwMCcgOiAnc2NhbGUtMCBvcGFjaXR5LTAnXG4gICAgICAgICAgKX1cbiAgICAgICAgPlxuICAgICAgICAgIDxDaGVjayBjbGFzc05hbWU9XCJ3LTMgaC0zXCIgLz5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzc05hbWU9e2NuKFxuICAgICAgICAgICAgJ2Fic29sdXRlIGluc2V0LTAgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgdHJhbnNpdGlvbi1hbGwgZHVyYXRpb24tMTUwIGVhc2Utb3V0JyxcbiAgICAgICAgICAgIGNvcGllZCA/ICdzY2FsZS0wIG9wYWNpdHktMCcgOiAnc2NhbGUtMTAwIG9wYWNpdHktMTAwJ1xuICAgICAgICAgICl9XG4gICAgICAgID5cbiAgICAgICAgICA8Q29weSBjbGFzc05hbWU9XCJ3LTMgaC0zXCIgLz5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2J1dHRvbj5cbiAgKTtcbn1cbiJdfQ==
@@ -1,7 +1,9 @@
1
1
  import type { Span } from '../../trace-viewer/types';
2
- declare const EventList: ({ spans, activeSpanId, onSelectSpan, }: {
2
+ import { type SpanSearchResult } from '../search';
3
+ declare const EventList: ({ spans, activeSpanId, searchResult, onSelectSpan, }: {
3
4
  spans: Span[];
4
5
  activeSpanId: string | null;
6
+ searchResult: SpanSearchResult;
5
7
  onSelectSpan: (spanId: string) => void;
6
8
  }) => import("react/jsx-runtime").JSX.Element;
7
9
  export default EventList;
@@ -1 +1 @@
1
- {"version":3,"file":"event-list.d.ts","sourceRoot":"","sources":["../../../../src/components/new-trace-viewer/components/event-list.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,0BAA0B,CAAC;AAwFrD,QAAA,MAAM,SAAS,GAAI,wCAIhB;IACD,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,YAAY,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;CACxC,4CAeA,CAAC;AAEF,eAAe,SAAS,CAAC"}
1
+ {"version":3,"file":"event-list.d.ts","sourceRoot":"","sources":["../../../../src/components/new-trace-viewer/components/event-list.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,0BAA0B,CAAC;AAQrD,OAAO,EAAwB,KAAK,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAoFxE,QAAA,MAAM,SAAS,GAAI,sDAKhB;IACD,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,YAAY,EAAE,gBAAgB,CAAC;IAC/B,YAAY,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;CACxC,4CAoBA,CAAC;AAEF,eAAe,SAAS,CAAC"}
@@ -2,7 +2,8 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { Circle } from 'lucide-react';
3
3
  import { cn } from '../../../lib/utils';
4
4
  import { formatDuration } from '../../trace-viewer/util/timing';
5
- import { WorkflowIcon, WebhookIcon, SleepIcon, StepForwardIcon, } from '../icons';
5
+ import { SleepIcon, StepForwardIcon, WebhookIcon, WorkflowIcon, } from '../icons';
6
+ import { isSpanDimmedBySearch } from '../search';
6
7
  import { getSpanDurationMs } from '../utils';
7
8
  import { MiddleTruncate } from './middle-truncate/middle-truncate';
8
9
  const eventStyles = {
@@ -23,16 +24,16 @@ function getEventStyle(resource, isErrored) {
23
24
  className: cn(isErrored ? 'text-red-900' : style.className),
24
25
  };
25
26
  }
26
- const EventRow = ({ span, isSelected, onSelectSpan, }) => {
27
+ const EventRow = ({ span, isSelected, isDimmed, onSelectSpan, }) => {
27
28
  const durationMs = getSpanDurationMs(span);
28
29
  const isErrored = span.attributes.data.status === 'failed';
29
30
  const { icon: Icon, className: tagClassName } = getEventStyle(span.resource, isErrored);
30
- return (_jsx("li", { className: cn('relative overflow-clip group after:absolute after:inset-x-0 after:bottom-0 after:h-px after:bg-gray-alpha-400', ROW_HEIGHT_CLASS), role: "treeitem", "aria-selected": isSelected, "aria-expanded": isSelected, "aria-level": 1, onClick: () => onSelectSpan(span.spanId), children: _jsx("div", { className: "h-full hover:bg-gray-100 group-aria-selected:bg-gray-100 group-aria-selected:hover:bg-gray-200", children: _jsxs("div", { className: "flex h-full min-w-0 items-center px-2", children: [_jsxs("div", { className: "flex min-w-0 flex-1 items-center gap-2", children: [_jsx("span", { className: cn('shrink-0', tagClassName), children: _jsx(Icon, { className: "w-4 h-4" }) }), _jsx("span", { className: "min-w-0 text-label-14", children: _jsx(MiddleTruncate, { value: span.name }) })] }), _jsx("div", { className: "ml-2 shrink-0", children: _jsx("span", { className: "text-label-14 text-gray-900 tabular-nums", children: formatDuration(durationMs) }) })] }) }) }));
31
+ return (_jsx("li", { className: cn('relative overflow-clip group transition-opacity', ROW_HEIGHT_CLASS, isDimmed && 'opacity-35'), role: "treeitem", "aria-selected": isSelected, "aria-expanded": isSelected, "aria-level": 1, onClick: () => onSelectSpan(span.spanId), children: _jsx("div", { className: "h-full hover:bg-gray-100 group-aria-selected:bg-gray-100 group-aria-selected:hover:bg-gray-200", children: _jsxs("div", { className: "flex h-full min-w-0 items-center pl-4 pr-2", children: [_jsxs("div", { className: "flex min-w-0 flex-1 items-center gap-2", children: [_jsx("span", { className: cn('shrink-0', tagClassName), children: _jsx(Icon, { className: "w-4 h-4" }) }), _jsx("span", { className: "min-w-0 text-label-14", children: _jsx(MiddleTruncate, { value: span.name }) })] }), _jsx("div", { className: "ml-2 shrink-0", children: _jsx("span", { className: "text-label-14 text-gray-900 tabular-nums", children: formatDuration(durationMs) }) })] }) }) }));
31
32
  };
32
- const EventList = ({ spans, activeSpanId, onSelectSpan, }) => {
33
- return (_jsx("ul", { id: "event-list", role: "tree", className: "block min-h-0 overflow-visible", children: spans.map((span) => {
34
- return (_jsx(EventRow, { span: span, isSelected: span.spanId === activeSpanId, onSelectSpan: onSelectSpan }, span.spanId));
33
+ const EventList = ({ spans, activeSpanId, searchResult, onSelectSpan, }) => {
34
+ return (_jsx("ul", { id: "event-list", role: "tree", className: "block min-h-0 overflow-visible divide-y divide-gray-alpha-400 border-b border-gray-alpha-400", children: spans.map((span) => {
35
+ return (_jsx(EventRow, { span: span, isSelected: span.spanId === activeSpanId, isDimmed: isSpanDimmedBySearch(span.spanId, searchResult), onSelectSpan: onSelectSpan }, span.spanId));
35
36
  }) }));
36
37
  };
37
38
  export default EventList;
38
- //# sourceMappingURL=event-list.js.map
39
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZlbnQtbGlzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL25ldy10cmFjZS12aWV3ZXIvY29tcG9uZW50cy9ldmVudC1saXN0LnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUN0QyxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFFeEMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ2hFLE9BQU8sRUFDTCxTQUFTLEVBQ1QsZUFBZSxFQUNmLFdBQVcsRUFDWCxZQUFZLEdBQ2IsTUFBTSxVQUFVLENBQUM7QUFDbEIsT0FBTyxFQUFFLG9CQUFvQixFQUF5QixNQUFNLFdBQVcsQ0FBQztBQUN4RSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDN0MsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBT25FLE1BQU0sV0FBVyxHQUErQjtJQUM5QyxHQUFHLEVBQUUsRUFBRSxJQUFJLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxlQUFlLEVBQUU7SUFDdkQsSUFBSSxFQUFFLEVBQUUsSUFBSSxFQUFFLGVBQWUsRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUU7SUFDNUQsSUFBSSxFQUFFLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsZUFBZSxFQUFFO0lBQ3ZELEtBQUssRUFBRSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLGVBQWUsRUFBRTtDQUN2RCxDQUFDO0FBRUYsTUFBTSxZQUFZLEdBQWU7SUFDL0IsSUFBSSxFQUFFLE1BQU07SUFDWixTQUFTLEVBQUUsZUFBZTtDQUMzQixDQUFDO0FBRUYsTUFBTSxnQkFBZ0IsR0FBRyxNQUFNLENBQUM7QUFFaEMsU0FBUyxhQUFhLENBQUMsUUFBZ0IsRUFBRSxTQUFrQjtJQUN6RCxNQUFNLEtBQUssR0FBRyxXQUFXLENBQUMsUUFBUSxDQUFDLElBQUksWUFBWSxDQUFDO0lBQ3BELE9BQU87UUFDTCxJQUFJLEVBQUUsS0FBSyxDQUFDLElBQUk7UUFDaEIsU0FBUyxFQUFFLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQztLQUM1RCxDQUFDO0FBQ0osQ0FBQztBQUVELE1BQU0sUUFBUSxHQUFHLENBQUMsRUFDaEIsSUFBSSxFQUNKLFVBQVUsRUFDVixRQUFRLEVBQ1IsWUFBWSxHQU1iLEVBQUUsRUFBRTtJQUNILE1BQU0sVUFBVSxHQUFHLGlCQUFpQixDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzNDLE1BQU0sU0FBUyxHQUNaLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBZ0MsQ0FBQyxNQUFNLEtBQUssUUFBUSxDQUFDO0lBQ3hFLE1BQU0sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsR0FBRyxhQUFhLENBQzNELElBQUksQ0FBQyxRQUFRLEVBQ2IsU0FBUyxDQUNWLENBQUM7SUFFRixPQUFPLENBQ0wsYUFDRSxTQUFTLEVBQUUsRUFBRSxDQUNYLGlEQUFpRCxFQUNqRCxnQkFBZ0IsRUFDaEIsUUFBUSxJQUFJLFlBQVksQ0FDekIsRUFDRCxJQUFJLEVBQUMsVUFBVSxtQkFDQSxVQUFVLG1CQUNWLFVBQVUsZ0JBQ2IsQ0FBQyxFQUNiLE9BQU8sRUFBRSxHQUFHLEVBQUUsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUV4QyxjQUFLLFNBQVMsRUFBQyxnR0FBZ0csWUFDN0csZUFBSyxTQUFTLEVBQUMsNENBQTRDLGFBQ3pELGVBQUssU0FBUyxFQUFDLHdDQUF3QyxhQUNyRCxlQUFNLFNBQVMsRUFBRSxFQUFFLENBQUMsVUFBVSxFQUFFLFlBQVksQ0FBQyxZQUMzQyxLQUFDLElBQUksSUFBQyxTQUFTLEVBQUMsU0FBUyxHQUFHLEdBQ3ZCLEVBQ1AsZUFBTSxTQUFTLEVBQUMsdUJBQXVCLFlBQ3JDLEtBQUMsY0FBYyxJQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsSUFBSSxHQUFJLEdBQy9CLElBQ0gsRUFDTixjQUFLLFNBQVMsRUFBQyxlQUFlLFlBQzVCLGVBQU0sU0FBUyxFQUFDLDBDQUEwQyxZQUN2RCxjQUFjLENBQUMsVUFBVSxDQUFDLEdBQ3RCLEdBQ0gsSUFDRixHQUNGLEdBQ0gsQ0FDTixDQUFDO0FBQ0osQ0FBQyxDQUFDO0FBRUYsTUFBTSxTQUFTLEdBQUcsQ0FBQyxFQUNqQixLQUFLLEVBQ0wsWUFBWSxFQUNaLFlBQVksRUFDWixZQUFZLEdBTWIsRUFBRSxFQUFFO0lBQ0gsT0FBTyxDQUNMLGFBQ0UsRUFBRSxFQUFDLFlBQVksRUFDZixJQUFJLEVBQUMsTUFBTSxFQUNYLFNBQVMsRUFBQyw4RkFBOEYsWUFFdkcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO1lBQ2xCLE9BQU8sQ0FDTCxLQUFDLFFBQVEsSUFFUCxJQUFJLEVBQUUsSUFBSSxFQUNWLFVBQVUsRUFBRSxJQUFJLENBQUMsTUFBTSxLQUFLLFlBQVksRUFDeEMsUUFBUSxFQUFFLG9CQUFvQixDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsWUFBWSxDQUFDLEVBQ3pELFlBQVksRUFBRSxZQUFZLElBSnJCLElBQUksQ0FBQyxNQUFNLENBS2hCLENBQ0gsQ0FBQztRQUNKLENBQUMsQ0FBQyxHQUNDLENBQ04sQ0FBQztBQUNKLENBQUMsQ0FBQztBQUVGLGVBQWUsU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2lyY2xlIH0gZnJvbSAnbHVjaWRlLXJlYWN0JztcbmltcG9ydCB7IGNuIH0gZnJvbSAnLi4vLi4vLi4vbGliL3V0aWxzJztcbmltcG9ydCB0eXBlIHsgU3BhbiB9IGZyb20gJy4uLy4uL3RyYWNlLXZpZXdlci90eXBlcyc7XG5pbXBvcnQgeyBmb3JtYXREdXJhdGlvbiB9IGZyb20gJy4uLy4uL3RyYWNlLXZpZXdlci91dGlsL3RpbWluZyc7XG5pbXBvcnQge1xuICBTbGVlcEljb24sXG4gIFN0ZXBGb3J3YXJkSWNvbixcbiAgV2ViaG9va0ljb24sXG4gIFdvcmtmbG93SWNvbixcbn0gZnJvbSAnLi4vaWNvbnMnO1xuaW1wb3J0IHsgaXNTcGFuRGltbWVkQnlTZWFyY2gsIHR5cGUgU3BhblNlYXJjaFJlc3VsdCB9IGZyb20gJy4uL3NlYXJjaCc7XG5pbXBvcnQgeyBnZXRTcGFuRHVyYXRpb25NcyB9IGZyb20gJy4uL3V0aWxzJztcbmltcG9ydCB7IE1pZGRsZVRydW5jYXRlIH0gZnJvbSAnLi9taWRkbGUtdHJ1bmNhdGUvbWlkZGxlLXRydW5jYXRlJztcblxuaW50ZXJmYWNlIEV2ZW50U3R5bGUge1xuICBpY29uOiBSZWFjdC5Db21wb25lbnRUeXBlPHsgY2xhc3NOYW1lPzogc3RyaW5nIH0+O1xuICBjbGFzc05hbWU6IHN0cmluZztcbn1cblxuY29uc3QgZXZlbnRTdHlsZXM6IFJlY29yZDxzdHJpbmcsIEV2ZW50U3R5bGU+ID0ge1xuICBydW46IHsgaWNvbjogV29ya2Zsb3dJY29uLCBjbGFzc05hbWU6ICd0ZXh0LWJsdWUtOTAwJyB9LFxuICBzdGVwOiB7IGljb246IFN0ZXBGb3J3YXJkSWNvbiwgY2xhc3NOYW1lOiAndGV4dC1ncmVlbi05MDAnIH0sXG4gIGhvb2s6IHsgaWNvbjogV2ViaG9va0ljb24sIGNsYXNzTmFtZTogJ3RleHQtZ3JheS05MDAnIH0sXG4gIHNsZWVwOiB7IGljb246IFNsZWVwSWNvbiwgY2xhc3NOYW1lOiAndGV4dC1ncmF5LTkwMCcgfSxcbn07XG5cbmNvbnN0IGRlZmF1bHRTdHlsZTogRXZlbnRTdHlsZSA9IHtcbiAgaWNvbjogQ2lyY2xlLFxuICBjbGFzc05hbWU6ICd0ZXh0LWdyYXktOTAwJyxcbn07XG5cbmNvbnN0IFJPV19IRUlHSFRfQ0xBU1MgPSAnaC0xMCc7XG5cbmZ1bmN0aW9uIGdldEV2ZW50U3R5bGUocmVzb3VyY2U6IHN0cmluZywgaXNFcnJvcmVkOiBib29sZWFuKTogRXZlbnRTdHlsZSB7XG4gIGNvbnN0IHN0eWxlID0gZXZlbnRTdHlsZXNbcmVzb3VyY2VdID8/IGRlZmF1bHRTdHlsZTtcbiAgcmV0dXJuIHtcbiAgICBpY29uOiBzdHlsZS5pY29uLFxuICAgIGNsYXNzTmFtZTogY24oaXNFcnJvcmVkID8gJ3RleHQtcmVkLTkwMCcgOiBzdHlsZS5jbGFzc05hbWUpLFxuICB9O1xufVxuXG5jb25zdCBFdmVudFJvdyA9ICh7XG4gIHNwYW4sXG4gIGlzU2VsZWN0ZWQsXG4gIGlzRGltbWVkLFxuICBvblNlbGVjdFNwYW4sXG59OiB7XG4gIHNwYW46IFNwYW47XG4gIGlzU2VsZWN0ZWQ6IGJvb2xlYW47XG4gIGlzRGltbWVkPzogYm9vbGVhbjtcbiAgb25TZWxlY3RTcGFuOiAoc3BhbklkOiBzdHJpbmcpID0+IHZvaWQ7XG59KSA9PiB7XG4gIGNvbnN0IGR1cmF0aW9uTXMgPSBnZXRTcGFuRHVyYXRpb25NcyhzcGFuKTtcbiAgY29uc3QgaXNFcnJvcmVkID1cbiAgICAoc3Bhbi5hdHRyaWJ1dGVzLmRhdGEgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pLnN0YXR1cyA9PT0gJ2ZhaWxlZCc7XG4gIGNvbnN0IHsgaWNvbjogSWNvbiwgY2xhc3NOYW1lOiB0YWdDbGFzc05hbWUgfSA9IGdldEV2ZW50U3R5bGUoXG4gICAgc3Bhbi5yZXNvdXJjZSxcbiAgICBpc0Vycm9yZWRcbiAgKTtcblxuICByZXR1cm4gKFxuICAgIDxsaVxuICAgICAgY2xhc3NOYW1lPXtjbihcbiAgICAgICAgJ3JlbGF0aXZlIG92ZXJmbG93LWNsaXAgZ3JvdXAgdHJhbnNpdGlvbi1vcGFjaXR5JyxcbiAgICAgICAgUk9XX0hFSUdIVF9DTEFTUyxcbiAgICAgICAgaXNEaW1tZWQgJiYgJ29wYWNpdHktMzUnXG4gICAgICApfVxuICAgICAgcm9sZT1cInRyZWVpdGVtXCJcbiAgICAgIGFyaWEtc2VsZWN0ZWQ9e2lzU2VsZWN0ZWR9XG4gICAgICBhcmlhLWV4cGFuZGVkPXtpc1NlbGVjdGVkfVxuICAgICAgYXJpYS1sZXZlbD17MX1cbiAgICAgIG9uQ2xpY2s9eygpID0+IG9uU2VsZWN0U3BhbihzcGFuLnNwYW5JZCl9XG4gICAgPlxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJoLWZ1bGwgaG92ZXI6YmctZ3JheS0xMDAgZ3JvdXAtYXJpYS1zZWxlY3RlZDpiZy1ncmF5LTEwMCBncm91cC1hcmlhLXNlbGVjdGVkOmhvdmVyOmJnLWdyYXktMjAwXCI+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBoLWZ1bGwgbWluLXctMCBpdGVtcy1jZW50ZXIgcGwtNCBwci0yXCI+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IG1pbi13LTAgZmxleC0xIGl0ZW1zLWNlbnRlciBnYXAtMlwiPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXtjbignc2hyaW5rLTAnLCB0YWdDbGFzc05hbWUpfT5cbiAgICAgICAgICAgICAgPEljb24gY2xhc3NOYW1lPVwidy00IGgtNFwiIC8+XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJtaW4tdy0wIHRleHQtbGFiZWwtMTRcIj5cbiAgICAgICAgICAgICAgPE1pZGRsZVRydW5jYXRlIHZhbHVlPXtzcGFuLm5hbWV9IC8+XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtbC0yIHNocmluay0wXCI+XG4gICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LWxhYmVsLTE0IHRleHQtZ3JheS05MDAgdGFidWxhci1udW1zXCI+XG4gICAgICAgICAgICAgIHtmb3JtYXREdXJhdGlvbihkdXJhdGlvbk1zKX1cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2xpPlxuICApO1xufTtcblxuY29uc3QgRXZlbnRMaXN0ID0gKHtcbiAgc3BhbnMsXG4gIGFjdGl2ZVNwYW5JZCxcbiAgc2VhcmNoUmVzdWx0LFxuICBvblNlbGVjdFNwYW4sXG59OiB7XG4gIHNwYW5zOiBTcGFuW107XG4gIGFjdGl2ZVNwYW5JZDogc3RyaW5nIHwgbnVsbDtcbiAgc2VhcmNoUmVzdWx0OiBTcGFuU2VhcmNoUmVzdWx0O1xuICBvblNlbGVjdFNwYW46IChzcGFuSWQ6IHN0cmluZykgPT4gdm9pZDtcbn0pID0+IHtcbiAgcmV0dXJuIChcbiAgICA8dWxcbiAgICAgIGlkPVwiZXZlbnQtbGlzdFwiXG4gICAgICByb2xlPVwidHJlZVwiXG4gICAgICBjbGFzc05hbWU9XCJibG9jayBtaW4taC0wIG92ZXJmbG93LXZpc2libGUgZGl2aWRlLXkgZGl2aWRlLWdyYXktYWxwaGEtNDAwIGJvcmRlci1iIGJvcmRlci1ncmF5LWFscGhhLTQwMFwiXG4gICAgPlxuICAgICAge3NwYW5zLm1hcCgoc3BhbikgPT4ge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIDxFdmVudFJvd1xuICAgICAgICAgICAga2V5PXtzcGFuLnNwYW5JZH1cbiAgICAgICAgICAgIHNwYW49e3NwYW59XG4gICAgICAgICAgICBpc1NlbGVjdGVkPXtzcGFuLnNwYW5JZCA9PT0gYWN0aXZlU3BhbklkfVxuICAgICAgICAgICAgaXNEaW1tZWQ9e2lzU3BhbkRpbW1lZEJ5U2VhcmNoKHNwYW4uc3BhbklkLCBzZWFyY2hSZXN1bHQpfVxuICAgICAgICAgICAgb25TZWxlY3RTcGFuPXtvblNlbGVjdFNwYW59XG4gICAgICAgICAgLz5cbiAgICAgICAgKTtcbiAgICAgIH0pfVxuICAgIDwvdWw+XG4gICk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBFdmVudExpc3Q7XG4iXX0=
@@ -51,4 +51,4 @@ function getMiddleTruncateCopyTextFromSelectionText({ prefixText, selectionText,
51
51
  return mappedText === null ? null : leading + mappedText + trailing;
52
52
  }
53
53
  export { getMiddleTruncateCopyText, getMiddleTruncateCopyTextFromSelectionText, };
54
- //# sourceMappingURL=copy-selection.js.map
54
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29weS1zZWxlY3Rpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50cy9uZXctdHJhY2Utdmlld2VyL2NvbXBvbmVudHMvbWlkZGxlLXRydW5jYXRlL2NvcHktc2VsZWN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBaUJuRCxTQUFTLHlCQUF5QixDQUFDLEVBQ2pDLFVBQVUsRUFDVixZQUFZLEVBQ1osY0FBYyxFQUNkLFVBQVUsRUFDVixLQUFLLEdBQzRCO0lBQ2pDLE1BQU0sV0FBVyxHQUFHLFVBQVUsR0FBRyxRQUFRLEdBQUcsVUFBVSxDQUFDO0lBRXZELElBQ0UsY0FBYyxHQUFHLENBQUM7UUFDbEIsWUFBWSxHQUFHLFdBQVcsQ0FBQyxNQUFNO1FBQ2pDLGNBQWMsSUFBSSxZQUFZLEVBQzlCLENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxJQUFJLGNBQWMsS0FBSyxDQUFDLElBQUksWUFBWSxLQUFLLFdBQVcsQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUNoRSxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRCxNQUFNLGFBQWEsR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDO0lBQ3hDLE1BQU0sV0FBVyxHQUFHLGFBQWEsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDO0lBRXBELElBQUksY0FBYyxHQUFHLGFBQWEsSUFBSSxZQUFZLEdBQUcsV0FBVyxFQUFFLENBQUM7UUFDakUsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsTUFBTSxpQkFBaUIsR0FBRyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDN0MsTUFBTSwyQkFBMkIsR0FBRyxXQUFXLENBQzdDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLGNBQWMsQ0FBQyxDQUNyQyxDQUFDLE1BQU0sQ0FBQztJQUNULE1BQU0sMkJBQTJCLEdBQUcsV0FBVyxDQUM3QyxXQUFXLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFBRSxZQUFZLENBQUMsQ0FDN0MsQ0FBQyxNQUFNLENBQUM7SUFDVCxNQUFNLFdBQVcsR0FBRyxpQkFBaUIsQ0FBQyxNQUFNLEdBQUcsV0FBVyxDQUFDLFVBQVUsQ0FBQyxDQUFDLE1BQU0sQ0FBQztJQUU5RSxPQUFPLGlCQUFpQjtTQUNyQixLQUFLLENBQ0osMkJBQTJCLEVBQzNCLFdBQVcsR0FBRywyQkFBMkIsQ0FDMUM7U0FDQSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDZCxDQUFDO0FBRUQsU0FBUywwQ0FBMEMsQ0FBQyxFQUNsRCxVQUFVLEVBQ1YsYUFBYSxFQUNiLFVBQVUsRUFDVixLQUFLLEdBQzZDO0lBQ2xELE1BQU0sV0FBVyxHQUFHLFVBQVUsR0FBRyxRQUFRLEdBQUcsVUFBVSxDQUFDO0lBQ3ZELE1BQU0sb0JBQW9CLEdBQUcsYUFBYSxDQUFDLElBQUksRUFBRSxDQUFDO0lBRWxELElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1FBQzFCLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELE1BQU0sT0FBTyxHQUFHLGFBQWEsQ0FBQyxLQUFLLENBQ2pDLENBQUMsRUFDRCxhQUFhLENBQUMsTUFBTSxHQUFHLGFBQWEsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxNQUFNLENBQ3hELENBQUM7SUFDRixNQUFNLFFBQVEsR0FBRyxhQUFhLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUVyRSxJQUFJLG9CQUFvQixLQUFLLFdBQVcsRUFBRSxDQUFDO1FBQ3pDLE9BQU8sT0FBTyxHQUFHLEtBQUssR0FBRyxRQUFRLENBQUM7SUFDcEMsQ0FBQztJQUVELElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztRQUM3QyxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxNQUFNLGNBQWMsR0FBRyxXQUFXLENBQUMsT0FBTyxDQUFDLG9CQUFvQixDQUFDLENBQUM7SUFDakUsSUFBSSxjQUFjLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUMxQixPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxNQUFNLFlBQVksR0FBRyxjQUFjLEdBQUcsb0JBQW9CLENBQUMsTUFBTSxDQUFDO0lBQ2xFLE1BQU0sVUFBVSxHQUFHLHlCQUF5QixDQUFDO1FBQzNDLFVBQVU7UUFDVixZQUFZO1FBQ1osY0FBYztRQUNkLFVBQVU7UUFDVixLQUFLO0tBQ04sQ0FBQyxDQUFDO0lBRUgsT0FBTyxVQUFVLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLE9BQU8sR0FBRyxVQUFVLEdBQUcsUUFBUSxDQUFDO0FBQ3RFLENBQUM7QUFFRCxPQUFPLEVBQ0wseUJBQXlCLEVBQ3pCLDBDQUEwQyxHQUMzQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRUxMSVBTSVMsIHRvR3JhcGhlbWVzIH0gZnJvbSAnLi90cnVuY2F0ZSc7XG5cbmludGVyZmFjZSBHZXRNaWRkbGVUcnVuY2F0ZUNvcHlUZXh0T3B0aW9ucyB7XG4gIHByZWZpeFRleHQ6IHN0cmluZztcbiAgc2VsZWN0aW9uRW5kOiBudW1iZXI7XG4gIHNlbGVjdGlvblN0YXJ0OiBudW1iZXI7XG4gIHN1ZmZpeFRleHQ6IHN0cmluZztcbiAgdmFsdWU6IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIEdldE1pZGRsZVRydW5jYXRlQ29weVRleHRGcm9tU2VsZWN0aW9uVGV4dE9wdGlvbnMge1xuICBwcmVmaXhUZXh0OiBzdHJpbmc7XG4gIHNlbGVjdGlvblRleHQ6IHN0cmluZztcbiAgc3VmZml4VGV4dDogc3RyaW5nO1xuICB2YWx1ZTogc3RyaW5nO1xufVxuXG5mdW5jdGlvbiBnZXRNaWRkbGVUcnVuY2F0ZUNvcHlUZXh0KHtcbiAgcHJlZml4VGV4dCxcbiAgc2VsZWN0aW9uRW5kLFxuICBzZWxlY3Rpb25TdGFydCxcbiAgc3VmZml4VGV4dCxcbiAgdmFsdWUsXG59OiBHZXRNaWRkbGVUcnVuY2F0ZUNvcHlUZXh0T3B0aW9ucyk6IHN0cmluZyB8IG51bGwge1xuICBjb25zdCB2aXNpYmxlVGV4dCA9IHByZWZpeFRleHQgKyBFTExJUFNJUyArIHN1ZmZpeFRleHQ7XG5cbiAgaWYgKFxuICAgIHNlbGVjdGlvblN0YXJ0IDwgMCB8fFxuICAgIHNlbGVjdGlvbkVuZCA+IHZpc2libGVUZXh0Lmxlbmd0aCB8fFxuICAgIHNlbGVjdGlvblN0YXJ0ID49IHNlbGVjdGlvbkVuZFxuICApIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGlmIChzZWxlY3Rpb25TdGFydCA9PT0gMCAmJiBzZWxlY3Rpb25FbmQgPT09IHZpc2libGVUZXh0Lmxlbmd0aCkge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIGNvbnN0IGVsbGlwc2lzU3RhcnQgPSBwcmVmaXhUZXh0Lmxlbmd0aDtcbiAgY29uc3QgZWxsaXBzaXNFbmQgPSBlbGxpcHNpc1N0YXJ0ICsgRUxMSVBTSVMubGVuZ3RoO1xuXG4gIGlmIChzZWxlY3Rpb25TdGFydCA+IGVsbGlwc2lzU3RhcnQgfHwgc2VsZWN0aW9uRW5kIDwgZWxsaXBzaXNFbmQpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNvbnN0IG9yaWdpbmFsR3JhcGhlbWVzID0gdG9HcmFwaGVtZXModmFsdWUpO1xuICBjb25zdCBzZWxlY3RlZFByZWZpeEdyYXBoZW1lQ291bnQgPSB0b0dyYXBoZW1lcyhcbiAgICB2aXNpYmxlVGV4dC5zbGljZSgwLCBzZWxlY3Rpb25TdGFydClcbiAgKS5sZW5ndGg7XG4gIGNvbnN0IHNlbGVjdGVkU3VmZml4R3JhcGhlbWVDb3VudCA9IHRvR3JhcGhlbWVzKFxuICAgIHZpc2libGVUZXh0LnNsaWNlKGVsbGlwc2lzRW5kLCBzZWxlY3Rpb25FbmQpXG4gICkubGVuZ3RoO1xuICBjb25zdCBzdWZmaXhTdGFydCA9IG9yaWdpbmFsR3JhcGhlbWVzLmxlbmd0aCAtIHRvR3JhcGhlbWVzKHN1ZmZpeFRleHQpLmxlbmd0aDtcblxuICByZXR1cm4gb3JpZ2luYWxHcmFwaGVtZXNcbiAgICAuc2xpY2UoXG4gICAgICBzZWxlY3RlZFByZWZpeEdyYXBoZW1lQ291bnQsXG4gICAgICBzdWZmaXhTdGFydCArIHNlbGVjdGVkU3VmZml4R3JhcGhlbWVDb3VudFxuICAgIClcbiAgICAuam9pbignJyk7XG59XG5cbmZ1bmN0aW9uIGdldE1pZGRsZVRydW5jYXRlQ29weVRleHRGcm9tU2VsZWN0aW9uVGV4dCh7XG4gIHByZWZpeFRleHQsXG4gIHNlbGVjdGlvblRleHQsXG4gIHN1ZmZpeFRleHQsXG4gIHZhbHVlLFxufTogR2V0TWlkZGxlVHJ1bmNhdGVDb3B5VGV4dEZyb21TZWxlY3Rpb25UZXh0T3B0aW9ucyk6IHN0cmluZyB8IG51bGwge1xuICBjb25zdCB2aXNpYmxlVGV4dCA9IHByZWZpeFRleHQgKyBFTExJUFNJUyArIHN1ZmZpeFRleHQ7XG4gIGNvbnN0IHRyaW1tZWRTZWxlY3Rpb25UZXh0ID0gc2VsZWN0aW9uVGV4dC50cmltKCk7XG5cbiAgaWYgKCF0cmltbWVkU2VsZWN0aW9uVGV4dCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgY29uc3QgbGVhZGluZyA9IHNlbGVjdGlvblRleHQuc2xpY2UoXG4gICAgMCxcbiAgICBzZWxlY3Rpb25UZXh0Lmxlbmd0aCAtIHNlbGVjdGlvblRleHQudHJpbVN0YXJ0KCkubGVuZ3RoXG4gICk7XG4gIGNvbnN0IHRyYWlsaW5nID0gc2VsZWN0aW9uVGV4dC5zbGljZShzZWxlY3Rpb25UZXh0LnRyaW1FbmQoKS5sZW5ndGgpO1xuXG4gIGlmICh0cmltbWVkU2VsZWN0aW9uVGV4dCA9PT0gdmlzaWJsZVRleHQpIHtcbiAgICByZXR1cm4gbGVhZGluZyArIHZhbHVlICsgdHJhaWxpbmc7XG4gIH1cblxuICBpZiAoIXRyaW1tZWRTZWxlY3Rpb25UZXh0LmluY2x1ZGVzKEVMTElQU0lTKSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgY29uc3Qgc2VsZWN0aW9uU3RhcnQgPSB2aXNpYmxlVGV4dC5pbmRleE9mKHRyaW1tZWRTZWxlY3Rpb25UZXh0KTtcbiAgaWYgKHNlbGVjdGlvblN0YXJ0ID09PSAtMSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgY29uc3Qgc2VsZWN0aW9uRW5kID0gc2VsZWN0aW9uU3RhcnQgKyB0cmltbWVkU2VsZWN0aW9uVGV4dC5sZW5ndGg7XG4gIGNvbnN0IG1hcHBlZFRleHQgPSBnZXRNaWRkbGVUcnVuY2F0ZUNvcHlUZXh0KHtcbiAgICBwcmVmaXhUZXh0LFxuICAgIHNlbGVjdGlvbkVuZCxcbiAgICBzZWxlY3Rpb25TdGFydCxcbiAgICBzdWZmaXhUZXh0LFxuICAgIHZhbHVlLFxuICB9KTtcblxuICByZXR1cm4gbWFwcGVkVGV4dCA9PT0gbnVsbCA/IG51bGwgOiBsZWFkaW5nICsgbWFwcGVkVGV4dCArIHRyYWlsaW5nO1xufVxuXG5leHBvcnQge1xuICBnZXRNaWRkbGVUcnVuY2F0ZUNvcHlUZXh0LFxuICBnZXRNaWRkbGVUcnVuY2F0ZUNvcHlUZXh0RnJvbVNlbGVjdGlvblRleHQsXG59O1xuZXhwb3J0IHR5cGUge1xuICBHZXRNaWRkbGVUcnVuY2F0ZUNvcHlUZXh0RnJvbVNlbGVjdGlvblRleHRPcHRpb25zLFxuICBHZXRNaWRkbGVUcnVuY2F0ZUNvcHlUZXh0T3B0aW9ucyxcbn07XG4iXX0=