@workflow/web-shared 5.0.0-beta.23 → 5.0.0-beta.25

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 (94) hide show
  1. package/README.md +2 -10
  2. package/dist/components/event-list-view.d.ts +30 -0
  3. package/dist/components/event-list-view.d.ts.map +1 -1
  4. package/dist/components/event-list-view.js +27 -12
  5. package/dist/components/index.d.ts +4 -3
  6. package/dist/components/index.d.ts.map +1 -1
  7. package/dist/components/index.js +3 -3
  8. package/dist/components/new-trace-viewer/components/copy-button.js +2 -2
  9. package/dist/components/new-trace-viewer/components/event-list.js +2 -2
  10. package/dist/components/new-trace-viewer/components/middle-truncate/middle-truncate.js +2 -2
  11. package/dist/components/new-trace-viewer/components/span-markers.js +3 -3
  12. package/dist/components/new-trace-viewer/components/split-pane.js +2 -2
  13. package/dist/components/new-trace-viewer/components/timeline.js +2 -2
  14. package/dist/components/new-trace-viewer/trace-viewer.js +4 -4
  15. package/dist/components/run-trace-view.d.ts +5 -7
  16. package/dist/components/run-trace-view.d.ts.map +1 -1
  17. package/dist/components/run-trace-view.js +3 -3
  18. package/dist/components/sidebar/attribute-panel.d.ts.map +1 -1
  19. package/dist/components/sidebar/attribute-panel.js +3 -5
  20. package/dist/components/sidebar/detail-card.js +2 -2
  21. package/dist/components/sidebar/entity-detail-panel.d.ts +6 -10
  22. package/dist/components/sidebar/entity-detail-panel.d.ts.map +1 -1
  23. package/dist/components/sidebar/entity-detail-panel.js +8 -60
  24. package/dist/components/sidebar/events-list.d.ts +3 -1
  25. package/dist/components/sidebar/events-list.d.ts.map +1 -1
  26. package/dist/components/sidebar/events-list.js +31 -9
  27. package/dist/components/sidebar/sidebar-data-context.d.ts +5 -6
  28. package/dist/components/sidebar/sidebar-data-context.d.ts.map +1 -1
  29. package/dist/components/sidebar/sidebar-data-context.js +1 -1
  30. package/dist/components/sidebar/span-detail-merge.d.ts +15 -0
  31. package/dist/components/sidebar/span-detail-merge.d.ts.map +1 -1
  32. package/dist/components/sidebar/span-detail-merge.js +40 -1
  33. package/dist/components/sidebar/use-selected-span-detail.d.ts +16 -0
  34. package/dist/components/sidebar/use-selected-span-detail.d.ts.map +1 -0
  35. package/dist/components/sidebar/use-selected-span-detail.js +93 -0
  36. package/dist/components/ui/alert.js +2 -2
  37. package/dist/components/ui/button.js +2 -2
  38. package/dist/components/ui/card.js +2 -2
  39. package/dist/components/ui/context-card.js +2 -2
  40. package/dist/components/ui/error-card.js +2 -2
  41. package/dist/components/ui/icon-button.js +2 -2
  42. package/dist/components/ui/kbd.js +2 -2
  43. package/dist/components/ui/skeleton.js +2 -2
  44. package/dist/components/ui/tooltip.js +2 -2
  45. package/dist/components/workflow-trace-view.d.ts +6 -7
  46. package/dist/components/workflow-trace-view.d.ts.map +1 -1
  47. package/dist/components/workflow-trace-view.js +3 -6
  48. package/dist/components/workflow-traces/trace-span-construction.d.ts +4 -1
  49. package/dist/components/workflow-traces/trace-span-construction.d.ts.map +1 -1
  50. package/dist/components/workflow-traces/trace-span-construction.js +69 -29
  51. package/dist/lib/cn.d.ts +10 -0
  52. package/dist/lib/cn.d.ts.map +1 -0
  53. package/dist/lib/cn.js +83 -0
  54. package/dist/lib/event-materialization.d.ts.map +1 -1
  55. package/dist/lib/event-materialization.js +22 -15
  56. package/dist/lib/trace-builder.d.ts.map +1 -1
  57. package/dist/lib/trace-builder.js +3 -3
  58. package/dist/lib/utils.d.ts +0 -2
  59. package/dist/lib/utils.d.ts.map +1 -1
  60. package/dist/lib/utils.js +1 -6
  61. package/package.json +3 -3
  62. package/src/components/event-list-view.tsx +76 -13
  63. package/src/components/index.ts +10 -6
  64. package/src/components/new-trace-viewer/components/copy-button.tsx +1 -1
  65. package/src/components/new-trace-viewer/components/event-list.tsx +1 -1
  66. package/src/components/new-trace-viewer/components/middle-truncate/middle-truncate.tsx +1 -1
  67. package/src/components/new-trace-viewer/components/span-markers.tsx +2 -2
  68. package/src/components/new-trace-viewer/components/split-pane.tsx +1 -1
  69. package/src/components/new-trace-viewer/components/timeline.tsx +1 -1
  70. package/src/components/new-trace-viewer/trace-viewer.tsx +6 -6
  71. package/src/components/run-trace-view.tsx +10 -14
  72. package/src/components/sidebar/attribute-panel.tsx +2 -4
  73. package/src/components/sidebar/detail-card.tsx +1 -1
  74. package/src/components/sidebar/entity-detail-panel.tsx +23 -94
  75. package/src/components/sidebar/events-list.tsx +58 -8
  76. package/src/components/sidebar/sidebar-data-context.tsx +6 -7
  77. package/src/components/sidebar/span-detail-merge.ts +69 -0
  78. package/src/components/sidebar/use-selected-span-detail.ts +146 -0
  79. package/src/components/ui/alert.tsx +1 -1
  80. package/src/components/ui/button.tsx +1 -1
  81. package/src/components/ui/card.tsx +1 -1
  82. package/src/components/ui/context-card.tsx +1 -1
  83. package/src/components/ui/error-card.tsx +1 -1
  84. package/src/components/ui/icon-button.tsx +1 -1
  85. package/src/components/ui/kbd.tsx +1 -1
  86. package/src/components/ui/skeleton.tsx +1 -1
  87. package/src/components/ui/tooltip.tsx +1 -1
  88. package/src/components/workflow-trace-view.tsx +11 -21
  89. package/src/components/workflow-traces/trace-span-construction.test.ts +85 -0
  90. package/src/components/workflow-traces/trace-span-construction.ts +93 -29
  91. package/src/lib/cn.ts +93 -0
  92. package/src/lib/event-materialization.ts +22 -14
  93. package/src/lib/trace-builder.ts +2 -1
  94. package/src/lib/utils.ts +0 -6
@@ -15,10 +15,10 @@ import { Kbd } from '../ui/kbd';
15
15
  import { Spinner } from '../ui/spinner';
16
16
  import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, } from '../ui/tooltip';
17
17
  import EventList from './components/event-list';
18
- import { TraceShortcutHelper } from './components/trace-shortcut-helper';
19
- import { ROW_HEIGHT_PX, scrollRowIntoView } from './components/use-row-window';
20
18
  import { SplitPane } from './components/split-pane';
21
19
  import { TIMELINE_PADDING_PX, Timeline, TimelineHeader, } from './components/timeline';
20
+ import { TraceShortcutHelper } from './components/trace-shortcut-helper';
21
+ import { ROW_HEIGHT_PX, scrollRowIntoView } from './components/use-row-window';
22
22
  import { ActiveSpanProvider, useActiveSpan } from './context';
23
23
  import { searchSpans } from './search';
24
24
  import { computeRootBounds, computeTimeMarkers } from './utils';
@@ -457,6 +457,6 @@ function NewTraceViewerContent({ trace, onLoadMore, hasMore, isLoadingMore, }) {
457
457
  e.stopPropagation();
458
458
  setSearchQuery('');
459
459
  }
460
- }, placeholder: "Search spans...", "aria-label": "Search spans", className: "flex-1 min-w-0 bg-transparent text-sm text-gray-1000 placeholder:text-gray-800 outline-none" }), searchQuery && (_jsx("button", { type: "button", "aria-label": "Clear search", onClick: () => setSearchQuery(''), className: "-mr-2 hidden h-full max-w-full shrink-0 cursor-pointer items-center rounded-r-md border-0 bg-transparent px-2.5 font-inherit text-base text-gray-900 no-underline transition-colors duration-150 ease-in hover:text-gray-1000 focus-visible:-outline-offset-1 focus-visible:outline focus-visible:outline-2 focus-visible:outline-[var(--ds-focus-color)] min-[961px]:flex", children: _jsx(Kbd, { variant: "outline", size: "search", children: "Esc" }) }))] }), endHeader: _jsx(TimelineHeader, { markers: timeMarkers, hoverInfo: hoverInfo }), children: [_jsxs("div", { className: "block overflow-visible", children: [_jsx(EventList, { spans: trace.spans, activeSpanId: activeSpanId, searchResult: searchResult, onSelectSpan: handleSelectSpan }), _jsx("div", { ref: loadMoreSentinelRef, className: "flex justify-center", children: isLoadingMore ? (_jsxs("div", { className: "flex items-center justify-center gap-2 py-3 text-sm text-gray-800", children: [_jsx(Spinner, { size: 14 }), _jsx("span", { children: "Loading spans\u2026" })] })) : null })] }), _jsx("div", { ref: timelineRef, className: "block min-h-0 overflow-visible relative", onDoubleClick: resetZoom, onMouseMove: handleTimelineMouseMove, onMouseLeave: handleTimelineMouseLeave, children: _jsx(Timeline, { spans: trace.spans, viewStart: viewport.start, viewEnd: viewport.end, markers: timeMarkers, selectedId: activeSpanId, searchResult: searchResult, onSelect: handleSelectSpan, onRevealTime: handleRevealTime, hoverFraction: hoverFraction, altHeld: altHeld }) })] }), _jsxs("div", { className: "absolute right-3 bottom-3 z-[5] flex items-center border border-gray-alpha-400 rounded-md bg-background-100 shadow-sm overflow-hidden divide-x divide-gray-alpha-400", children: [_jsx(IconButton, { variant: "muted", size: "small", onClick: zoomOut, "aria-label": "Zoom out", children: _jsx(ZoomOut, { className: "w-4 h-4" }) }), _jsx(IconButton, { variant: "muted", size: "small", onClick: resetZoom, "aria-label": "Reset zoom", children: _jsx(RotateCcw, { className: "w-3.5 h-3.5" }) }), _jsx(IconButton, { variant: "muted", size: "small", onClick: zoomIn, "aria-label": "Zoom in", children: _jsx(ZoomIn, { className: "w-4 h-4" }) })] })] }), activeSpan ? (_jsxs("aside", { className: "flex flex-col h-full max-h-full bg-background-100 border-l border-gray-alpha-400 overflow-auto", children: [_jsxs("div", { className: "flex items-center justify-between gap-2 shrink-0 px-4 pt-3 pb-3", children: [_jsx("span", { className: "text-label-14 font-medium text-gray-1000 truncate block", children: selectedSpanName }), _jsxs("div", { className: "flex items-center gap-0.5 shrink-0", children: [_jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsx(IconButton, { "aria-label": "Navigate up", "aria-keyshortcuts": "K", onClick: handleSelectPrevSpan, disabled: !prevSpanId, children: _jsx(ChevronUp, { className: "w-4 h-4" }) }) }), prevSpanId ? (_jsxs(TooltipContent, { children: ["Navigate up", _jsx(Kbd, { children: "K" })] })) : null] }), _jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsx(IconButton, { "aria-label": "Navigate down", "aria-keyshortcuts": "J", onClick: handleSelectNextSpan, disabled: !nextSpanId, children: _jsx(ChevronDown, { className: "w-4 h-4" }) }) }), nextSpanId ? (_jsxs(TooltipContent, { children: ["Navigate down", _jsx(Kbd, { children: "J" })] })) : null] }), _jsx("div", { "aria-hidden": true, className: "w-px h-4 bg-gray-alpha-400 mx-1" }), _jsx(IconButton, { "aria-label": "Close span details", "aria-keyshortcuts": "Escape", onClick: handleClearActiveSpan, children: _jsx(X, { className: "w-4 h-4" }) })] })] }), _jsx("div", { className: "flex-1 overflow-y-auto", children: _jsx(ErrorBoundary, { children: _jsx(EntityDetailPanel, { run: sidebar.run, onStreamClick: sidebar.onStreamClick, onRunClick: sidebar.onRunClick, spanDetailData: sidebar.spanDetailData, spanDetailError: sidebar.spanDetailError, spanDetailLoading: sidebar.spanDetailLoading, onSpanSelect: sidebar.onSpanSelect, onWakeUpSleep: sidebar.onWakeUpSleep, onLoadEventData: sidebar.onLoadEventData, onResolveHook: sidebar.onResolveHook, encryptionKey: sidebar.encryptionKey, onDecrypt: sidebar.onDecrypt, isDecrypting: sidebar.isDecrypting, selectedSpan: selectedSpan }) }) })] })) : null, _jsx(TraceShortcutHelper, { hasMultipleSpans: trace.spans.length > 1, reducedMotion: reducedMotion })] }));
460
+ }, placeholder: "Search spans...", "aria-label": "Search spans", className: "flex-1 min-w-0 bg-transparent text-sm text-gray-1000 placeholder:text-gray-800 outline-none" }), searchQuery && (_jsx("button", { type: "button", "aria-label": "Clear search", onClick: () => setSearchQuery(''), className: "-mr-2 hidden h-full max-w-full shrink-0 cursor-pointer items-center rounded-r-md border-0 bg-transparent px-2.5 font-inherit text-base text-gray-900 no-underline transition-colors duration-150 ease-in hover:text-gray-1000 focus-visible:-outline-offset-1 focus-visible:outline focus-visible:outline-2 focus-visible:outline-[var(--ds-focus-color)] min-[961px]:flex", children: _jsx(Kbd, { variant: "outline", size: "search", children: "Esc" }) }))] }), endHeader: _jsx(TimelineHeader, { markers: timeMarkers, hoverInfo: hoverInfo }), children: [_jsxs("div", { className: "block overflow-visible", children: [_jsx(EventList, { spans: trace.spans, activeSpanId: activeSpanId, searchResult: searchResult, onSelectSpan: handleSelectSpan }), _jsx("div", { ref: loadMoreSentinelRef, className: "flex justify-center", children: isLoadingMore ? (_jsxs("div", { className: "flex items-center justify-center gap-2 py-3 text-sm text-gray-800", children: [_jsx(Spinner, { size: 14 }), _jsx("span", { children: "Loading spans\u2026" })] })) : null })] }), _jsx("div", { ref: timelineRef, className: "block min-h-0 overflow-visible relative", onDoubleClick: resetZoom, onMouseMove: handleTimelineMouseMove, onMouseLeave: handleTimelineMouseLeave, children: _jsx(Timeline, { spans: trace.spans, viewStart: viewport.start, viewEnd: viewport.end, markers: timeMarkers, selectedId: activeSpanId, searchResult: searchResult, onSelect: handleSelectSpan, onRevealTime: handleRevealTime, hoverFraction: hoverFraction, altHeld: altHeld }) })] }), _jsxs("div", { className: "absolute right-3 bottom-3 z-[5] flex items-center border border-gray-alpha-400 rounded-md bg-background-100 shadow-sm overflow-hidden divide-x divide-gray-alpha-400", children: [_jsx(IconButton, { variant: "muted", size: "small", onClick: zoomOut, "aria-label": "Zoom out", children: _jsx(ZoomOut, { className: "w-4 h-4" }) }), _jsx(IconButton, { variant: "muted", size: "small", onClick: resetZoom, "aria-label": "Reset zoom", children: _jsx(RotateCcw, { className: "w-3.5 h-3.5" }) }), _jsx(IconButton, { variant: "muted", size: "small", onClick: zoomIn, "aria-label": "Zoom in", children: _jsx(ZoomIn, { className: "w-4 h-4" }) })] })] }), activeSpan ? (_jsxs("aside", { className: "flex flex-col h-full max-h-full bg-background-100 border-l border-gray-alpha-400 overflow-auto", children: [_jsxs("div", { className: "flex items-center justify-between gap-2 shrink-0 px-4 pt-3 pb-3", children: [_jsx("span", { className: "text-label-14 font-medium text-gray-1000 truncate block", children: selectedSpanName }), _jsxs("div", { className: "flex items-center gap-0.5 shrink-0", children: [_jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsx(IconButton, { "aria-label": "Navigate up", "aria-keyshortcuts": "K", onClick: handleSelectPrevSpan, disabled: !prevSpanId, children: _jsx(ChevronUp, { className: "w-4 h-4" }) }) }), prevSpanId ? (_jsxs(TooltipContent, { children: ["Navigate up", _jsx(Kbd, { children: "K" })] })) : null] }), _jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsx(IconButton, { "aria-label": "Navigate down", "aria-keyshortcuts": "J", onClick: handleSelectNextSpan, disabled: !nextSpanId, children: _jsx(ChevronDown, { className: "w-4 h-4" }) }) }), nextSpanId ? (_jsxs(TooltipContent, { children: ["Navigate down", _jsx(Kbd, { children: "J" })] })) : null] }), _jsx("div", { "aria-hidden": true, className: "w-px h-4 bg-gray-alpha-400 mx-1" }), _jsx(IconButton, { "aria-label": "Close span details", "aria-keyshortcuts": "Escape", onClick: handleClearActiveSpan, children: _jsx(X, { className: "w-4 h-4" }) })] })] }), _jsx("div", { className: "flex-1 overflow-y-auto", children: _jsx(ErrorBoundary, { children: _jsx(EntityDetailPanel, { run: sidebar.run, onStreamClick: sidebar.onStreamClick, onRunClick: sidebar.onRunClick, fetchSpanDetail: sidebar.fetchSpanDetail, onWakeUpSleep: sidebar.onWakeUpSleep, onLoadEventData: sidebar.onLoadEventData, onResolveHook: sidebar.onResolveHook, encryptionKey: sidebar.encryptionKey, onDecrypt: sidebar.onDecrypt, isDecrypting: sidebar.isDecrypting, selectedSpan: selectedSpan, showSeparateEventOccurrenceTimestamps: sidebar.showSeparateEventOccurrenceTimestamps }) }) })] })) : null, _jsx(TraceShortcutHelper, { hasMultipleSpans: trace.spans.length > 1, reducedMotion: reducedMotion })] }));
461
461
  }
462
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhY2Utdmlld2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvbmV3LXRyYWNlLXZpZXdlci90cmFjZS12aWV3ZXIudHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVksQ0FBQzs7QUFFYixPQUFPLEVBQUUsYUFBYSxFQUFFLGlCQUFpQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDOUUsT0FBTyxFQUNMLFdBQVcsRUFDWCxTQUFTLEVBQ1QsU0FBUyxFQUNULE1BQU0sRUFDTixDQUFDLEVBQ0QsTUFBTSxFQUNOLE9BQU8sR0FDUixNQUFNLGNBQWMsQ0FBQztBQUN0QixPQUFPLEVBRUwsV0FBVyxFQUNYLGdCQUFnQixFQUNoQixTQUFTLEVBQ1QsT0FBTyxFQUNQLE1BQU0sRUFDTixRQUFRLEdBQ1QsTUFBTSxPQUFPLENBQUM7QUFDZixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUMxRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNsRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDbEQsT0FBTyxFQUNMLGlCQUFpQixHQUVsQixNQUFNLGdDQUFnQyxDQUFDO0FBQ3hDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNqRSxPQUFPLEVBQUUsY0FBYyxFQUFFLGNBQWMsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzdFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ2hDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDeEMsT0FBTyxFQUNMLE9BQU8sRUFDUCxjQUFjLEVBQ2QsZUFBZSxF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QUFHLEVBQ2hCLGFBQWEsRUFBRSxPQUFPLENBQUMsYUFBYSxFQUNwQyxVQUFVLEVBQUUsT0FBTyxDQUFDLFVBQVUsRUFDOUIsY0FBYyxFQUFFLE9BQU8sQ0FBQyxjQUFjLEVBQ3RDLGVBQWUsRUFBRSxPQUFPLENBQUMsZUFBZSxFQUN4QyxpQkFBaUIsRUFBRSxPQUFPLENBQUMsaUJBQWlCLEVBQzVDLFlBQVksRUFBRSxPQUFPLENBQUMsWUFBWSxFQUNsQyxhQUFhLEVBQUUsT0FBTyxDQUFDLGFBQWEsRUFDcEMsZUFBZSxFQUFFLE9BQU8sQ0FBQyxlQUFlLEVBQ3hDLGFBQWEsRUFBRSxPQUFPLENBQUMsYUFBYSxFQUNwQyxhQUFhLEVBQUUsT0FBTyxDQUFDLGFBQWEsRUFDcEMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxTQUFTLEVBQzVCLFlBQVksRUFBRSxPQUFPLENBQUMsWUFBWSxFQUNsQyxZQUFZLEVBQUUsWUFBWSxHQUMxQixHQUNZLEdBQ1osSUFDQSxDQUNULENBQUMsQ0FBQyxDQUFDLElBQUksRUFFUixLQUFDLG1CQUFtQixJQUNsQixnQkFBZ0IsRUFBRSxLQUFLLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQ3hDLGFBQWEsRUFBRSxhQUFhLEdBQzVCLElBQ0UsQ0FDUCxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIid1c2UgY2xpZW50JztcblxuaW1wb3J0IHsgcGFyc2VTdGVwTmFtZSwgcGFyc2VXb3JrZmxvd05hbWUgfSBmcm9tICdAd29ya2Zsb3cvdXRpbHMvcGFyc2UtbmFtZSc7XG5pbXBvcnQge1xuICBDaGV2cm9uRG93bixcbiAgQ2hldnJvblVwLFxuICBSb3RhdGVDY3csXG4gIFNlYXJjaCxcbiAgWCxcbiAgWm9vbUluLFxuICBab29tT3V0LFxufSBmcm9tICdsdWNpZGUtcmVhY3QnO1xuaW1wb3J0IHtcbiAgdHlwZSBSZWFjdE5vZGUsXG4gIHVzZUNhbGxiYWNrLFxuICB1c2VEZWZlcnJlZFZhbHVlLFxuICB1c2VFZmZlY3QsXG4gIHVzZU1lbW8sXG4gIHVzZVJlZixcbiAgdXNlU3RhdGUsXG59IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHVzZUxvYWRNb3JlT25TY3JvbGwgfSBmcm9tICcuLi8uLi9ob29rcy91c2UtbG9hZC1tb3JlLW9uLXNjcm9sbCc7XG5pbXBvcnQgeyB1c2VSZWR1Y2VkTW90aW9uIH0gZnJvbSAnLi4vLi4vaG9va3MvdXNlLXJlZHVjZWQtbW90aW9uJztcbmltcG9ydCB7IGZpbHRlclNwYW5SYXdFdmVudHMgfSBmcm9tICcuLi8uLi9saWIvdHJhY2UtYnVpbGRlcic7XG5pbXBvcnQgeyBFcnJvckJvdW5kYXJ5IH0gZnJvbSAnLi4vZXJyb3ItYm91bmRhcnknO1xuaW1wb3J0IHtcbiAgRW50aXR5RGV0YWlsUGFuZWwsXG4gIHR5cGUgU2VsZWN0ZWRTcGFuSW5mbyxcbn0gZnJvbSAnLi4vc2lkZWJhci9lbnRpdHktZGV0YWlsLXBhbmVsJztcbmltcG9ydCB7IHVzZVNpZGViYXJEYXRhIH0gZnJvbSAnLi4vc2lkZWJhci9zaWRlYmFyLWRhdGEtY29udGV4dCc7XG5pbXBvcnQgeyBmb3JtYXREdXJhdGlvbiwgZ2V0SGlnaFJlc0luTXMgfSBmcm9tICcuLi90cmFjZS12aWV3ZXIvdXRpbC90aW1pbmcnO1xuaW1wb3J0IHsgSWNvbkJ1dHRvbiB9IGZyb20gJy4uL3VpL2ljb24tYnV0dG9uJztcbmltcG9ydCB7IEtiZCB9IGZyb20gJy4uL3VpL2tiZCc7XG5pbXBvcnQgeyBTcGlubmVyIH0gZnJvbSAnLi4vdWkvc3Bpbm5lcic7XG5pbXBvcnQge1xuICBUb29sdGlwLFxuICBUb29sdGlwQ29udGVudCxcbiAgVG9vbHRpcFByb3ZpZGVyLFxuICBUb29sdGlwVHJpZ2dlcixcbn0gZnJvbSAnLi4vdWkvdG9vbHRpcCc7XG5pbXBvcnQgRXZlbnRMaXN0IGZyb20gJy4vY29tcG9uZW50cy9ldmVudC1saXN0JztcbmltcG9ydCB7IFRyYWNlU2hvcnRjdXRIZWxwZXIgfSBmcm9tICcuL2NvbXBvbmVudHMvdHJhY2Utc2hvcnRjdXQtaGVscGVyJztcbmltcG9ydCB7IFJPV19IRUlHSFRfUFgsIHNjcm9sbFJvd0ludG9WaWV3IH0gZnJvbSAnLi9jb21wb25lbnRzL3VzZS1yb3ctd2luZG93JztcbmltcG9ydCB7IFNwbGl0UGFuZSB9IGZyb20gJy4vY29tcG9uZW50cy9zcGxpdC1wYW5lJztcbmltcG9ydCB7XG4gIFRJTUVMSU5FX1BBRERJTkdfUFgsXG4gIFRpbWVsaW5lLFxuICBUaW1lbGluZUhlYWRlcixcbn0gZnJvbSAnLi9jb21wb25lbnRzL3RpbWVsaW5lJztcbmltcG9ydCB7IEFjdGl2ZVNwYW5Qcm92aWRlciwgdXNlQWN0aXZlU3BhbiB9IGZyb20gJy4vY29udGV4dCc7XG5pbXBvcnQgeyBzZWFyY2hTcGFucyB9IGZyb20gJy4vc2VhcmNoJztcbmltcG9ydCB0eXBlIHsgVHJhY2VXaXRoTWV0YSB9IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHsgY29tcHV0ZVJvb3RCb3VuZHMsIGNvbXB1dGVUaW1lTWFya2VycyB9IGZyb20gJy4vdXRpbHMnO1xuXG5pbnRlcmZhY2UgTmV3VHJhY2VWaWV3ZXJQcm9wcyB7XG4gIHRyYWNlOiBUcmFjZVdpdGhNZXRhO1xuICBvbkxvYWRNb3JlPzogKCkgPT4gdm9pZCB8IFByb21pc2U8dm9pZD47XG4gIGhhc01vcmU/OiBib29sZWFuO1xuICBpc0xvYWRpbmdNb3JlPzogYm9vbGVhbjtcbn1cblxuY29uc3QgTUlOX1ZJRVdQT1JUX01TID0gMC4wMDE7XG5cbmNvbnN0IFpPT01fREVCT1VOQ0VfTVMgPSAxNTA7XG5cbmludGVyZmFjZSBWaWV3cG9ydCB7XG4gIHN0YXJ0OiBudW1iZXI7XG4gIGVuZDogbnVtYmVyO1xufVxuXG5mdW5jdGlvbiB1c2VBbmltYXRlZFZpZXdwb3J0KGluaXRpYWw6IFZpZXdwb3J0KSB7XG4gIGNvbnN0IFt2aWV3cG9ydCwgc2V0Vmlld3BvcnRTdGF0ZV0gPSB1c2VTdGF0ZTxWaWV3cG9ydD4oaW5pdGlhbCk7XG4gIGNvbnN0IGFuaW1SZWYgPSB1c2VSZWY8e1xuICAgIHJhZjogbnVtYmVyO1xuICAgIGZyb206IFZpZXdwb3J0O1xuICAgIHRvOiBWaWV3cG9ydDtcbiAgICBzdGFydDogbnVtYmVyO1xuICB9IHwgbnVsbD4obnVsbCk7XG4gIGNvbnN0IGN1cnJlbnRSZWYgPSB1c2VSZWYoaW5pdGlhbCk7XG4gIGN1cnJlbnRSZWYuY3VycmVudCA9IHZpZXdwb3J0O1xuICBjb25zdCByZWR1Y2VkTW90aW9uID0gdXNlUmVkdWNlZE1vdGlvbigpO1xuXG4gIGNvbnN0IGNhbmNlbCA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBpZiAoYW5pbVJlZi5jdXJyZW50KSB7XG4gICAgICBjYW5jZWxBbmltYXRpb25GcmFtZShhbmltUmVmLmN1cnJlbnQucmFmKTtcbiAgICAgIGFuaW1SZWYuY3VycmVudCA9IG51bGw7XG4gICAgfVxuICB9LCBbXSk7XG5cbiAgY29uc3QgYW5pbWF0ZVRvID0gdXNlQ2FsbGJhY2soXG4gICAgKHRhcmdldDogVmlld3BvcnQpID0+IHtcbiAgICAgIGNhbmNlbCgpO1xuXG4gICAgICBpZiAocmVkdWNlZE1vdGlvbikge1xuICAgICAgICBjdXJyZW50UmVmLmN1cnJlbnQgPSB0YXJnZXQ7XG4gICAgICAgIHNldFZpZXdwb3J0U3RhdGUodGFyZ2V0KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBmcm9tID0gY3VycmVudFJlZi5jdXJyZW50O1xuICAgICAgY29uc3QgYW5pbSA9IHsgcmFmOiAwLCBmcm9tLCB0bzogdGFyZ2V0LCBzdGFydDogcGVyZm9ybWFuY2Uubm93KCkgfTtcblxuICAgICAgY29uc3QgdGljayA9ICgpID0+IHtcbiAgICAgICAgY29uc3QgdCA9IE1hdGgubWluKChwZXJmb3JtYW5jZS5ub3coKSAtIGFuaW0uc3RhcnQpIC8gMTUwLCAxKTtcbiAgICAgICAgY29uc3QgZSA9IDEgLSAoMSAtIHQpICogKDEgLSB0KTtcbiAgICAgICAgc2V0Vmlld3BvcnRTdGF0ZSh7XG4gICAgICAgICAgc3RhcnQ6IGFuaW0uZnJvbS5zdGFydCArIChhbmltLnRvLnN0YXJ0IC0gYW5pbS5mcm9tLnN0YXJ0KSAqIGUsXG4gICAgICAgICAgZW5kOiBhbmltLmZyb20uZW5kICsgKGFuaW0udG8uZW5kIC0gYW5pbS5mcm9tLmVuZCkgKiBlLFxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKHQgPCAxKSBhbmltLnJhZiA9IHJlcXVlc3RBbmltYXRpb25GcmFtZSh0aWNrKTtcbiAgICAgICAgZWxzZSBhbmltUmVmLmN1cnJlbnQgPSBudWxsO1xuICAgICAgfTtcblxuICAgICAgYW5pbVJlZi5jdXJyZW50ID0gYW5pbTtcbiAgICAgIGFuaW0ucmFmID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRpY2spO1xuICAgIH0sXG4gICAgW2NhbmNlbCwgcmVkdWNlZE1vdGlvbl1cbiAgKTtcblxuICBjb25zdCBzZXRWaWV3cG9ydCA9IHVzZUNhbGxiYWNrKFxuICAgICh1cGRhdGU6IFZpZXdwb3J0IHwgKChwcmV2OiBWaWV3cG9ydCkgPT4gVmlld3BvcnQpKSA9PiB7XG4gICAgICBjYW5jZWwoKTtcbiAgICAgIGlmICh0eXBlb2YgdXBkYXRlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHNldFZpZXdwb3J0U3RhdGUoKHByZXYpID0+IHtcbiAgICAgICAgICBjb25zdCBuZXh0ID0gdXBkYXRlKHByZXYpO1xuICAgICAgICAgIGN1cnJlbnRSZWYuY3VycmVudCA9IG5leHQ7XG4gICAgICAgICAgcmV0dXJuIG5leHQ7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY3VycmVudFJlZi5jdXJyZW50ID0gdXBkYXRlO1xuICAgICAgICBzZXRWaWV3cG9ydFN0YXRlKHVwZGF0ZSk7XG4gICAgICB9XG4gICAgfSxcbiAgICBbY2FuY2VsXVxuICApO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiBjYW5jZWwsIFtjYW5jZWxdKTtcblxuICByZXR1cm4geyB2aWV3cG9ydCwgc2V0Vmlld3BvcnQsIGFuaW1hdGVUbyB9O1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIEhvb2s6IGJyaWRnZSBBY3RpdmVTcGFuQ29udGV4dCArIFNpZGViYXJEYXRhQ29udGV4dCDihpIgU2VsZWN0ZWRTcGFuSW5mb1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmZ1bmN0aW9uIHVzZVNlbGVjdGVkU3BhbkluZm8oKTogU2VsZWN0ZWRTcGFuSW5mbyB8IG51bGwge1xuICBjb25zdCB7IGFjdGl2ZVNwYW4gfSA9IHVzZUFjdGl2ZVNwYW4oKTtcbiAgY29uc3Qgc2lkZWJhciA9IHVzZVNpZGViYXJEYXRhKCk7XG5cbiAgcmV0dXJuIHVzZU1lbW8oKCkgPT4ge1xuICAgIGlmICghYWN0aXZlU3BhbikgcmV0dXJuIG51bGw7XG5cbiAgICBjb25zdCByZXNvdXJjZSA9IGFjdGl2ZVNwYW4uYXR0cmlidXRlcz8ucmVzb3VyY2UgYXMgc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIGNvbnN0IHJhd0V2ZW50cyA9IGZpbHRlclNwYW5SYXdFdmVudHMoXG4gICAgICBzaWRlYmFyLmV2ZW50cyxcbiAgICAgIHJlc291cmNlLFxuICAgICAgYWN0aXZlU3Bhbi5zcGFuSWRcbiAgICApO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGRhdGE6IGFjdGl2ZVNwYW4uYXR0cmlidXRlcz8uZGF0YSxcbiAgICAgIHJlc291cmNlLFxuICAgICAgc3BhbklkOiBhY3RpdmVTcGFuLnNwYW5JZCxcbiAgICAgIHJhd0V2ZW50cyxcbiAgICB9O1xuICB9LCBbYWN0aXZlU3Bhbiwgc2lkZWJhcl0pO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFJvb3QgY29tcG9uZW50XG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuZXhwb3J0IGZ1bmN0aW9uIE5ld1RyYWNlVmlld2VyKHtcbiAgdHJhY2UsXG4gIG9uTG9hZE1vcmUsXG4gIGhhc01vcmUsXG4gIGlzTG9hZGluZ01vcmUsXG59OiBOZXdUcmFjZVZpZXdlclByb3BzKTogUmVhY3ROb2RlIHtcbiAgcmV0dXJuIChcbiAgICA8VG9vbHRpcFByb3ZpZGVyIGRlbGF5RHVyYXRpb249ezMwMH0+XG4gICAgICA8QWN0aXZlU3BhblByb3ZpZGVyIHNwYW5zPXt0cmFjZS5zcGFuc30+XG4gICAgICAgIDxOZXdUcmFjZVZpZXdlckNvbnRlbnRcbiAgICAgICAgICB0cmFjZT17dHJhY2V9XG4gICAgICAgICAgb25Mb2FkTW9yZT17b25Mb2FkTW9yZX1cbiAgICAgICAgICBoYXNNb3JlPXtoYXNNb3JlfVxuICAgICAgICAgIGlzTG9hZGluZ01vcmU9e2lzTG9hZGluZ01vcmV9XG4gICAgICAgIC8+XG4gICAgICA8L0FjdGl2ZVNwYW5Qcm92aWRlcj5cbiAgICA8L1Rvb2x0aXBQcm92aWRlcj5cbiAgKTtcbn1cblxuZnVuY3Rpb24gTmV3VHJhY2VWaWV3ZXJDb250ZW50KHtcbiAgdHJhY2UsXG4gIG9uTG9hZE1vcmUsXG4gIGhhc01vcmUsXG4gIGlzTG9hZGluZ01vcmUsXG59OiBOZXdUcmFjZVZpZXdlclByb3BzKTogUmVhY3ROb2RlIHtcbiAgY29uc3QgeyBhY3RpdmVTcGFuLCBhY3RpdmVTcGFuSWQsIHNldEFjdGl2ZVNwYW4sIGNsZWFyQWN0aXZlU3BhbiB9ID1cbiAgICB1c2VBY3RpdmVTcGFuKCk7XG5cbiAgY29uc3Qgc2lkZWJhciA9IHVzZVNpZGViYXJEYXRhKCk7XG4gIGNvbnN0IHNlbGVjdGVkU3BhbiA9IHVzZVNlbGVjdGVkU3BhbkluZm8oKTtcbiAgY29uc3QgcmVkdWNlZE1vdGlvbiA9IHVzZVJlZHVjZWRNb3Rpb24oKTtcblxuICBjb25zdCBbc2VhcmNoUXVlcnksIHNldFNlYXJjaFF1ZXJ5XSA9IHVzZVN0YXRlKCcnKTtcbiAgY29uc3QgZGVmZXJyZWRTZWFyY2hRdWVyeSA9IHVzZURlZmVycmVkVmFsdWUoc2VhcmNoUXVlcnkpO1xuXG4gIGNvbnN0IHNlYXJjaFJlc3VsdCA9IHVzZU1lbW8oXG4gICAgKCkgPT4gc2VhcmNoU3BhbnModHJhY2Uuc3BhbnMsIGRlZmVycmVkU2VhcmNoUXVlcnkpLFxuICAgIFt0cmFjZS5zcGFucywgZGVmZXJyZWRTZWFyY2hRdWVyeV1cbiAgKTtcblxuICBjb25zdCByb290ID0gdXNlTWVtbygoKSA9PiBjb21wdXRlUm9vdEJvdW5kcyh0cmFjZS5zcGFucyksIFt0cmFjZS5zcGFuc10pO1xuXG4gIGNvbnN0IHNjcm9sbENvbnRhaW5lclJlZiA9IHVzZVJlZjxIVE1MRGl2RWxlbWVudD4obnVsbCk7XG4gIGNvbnN0IGxvYWRNb3JlID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIHZvaWQgb25Mb2FkTW9yZT8uKCk7XG4gIH0sIFtvbkxvYWRNb3JlXSk7XG4gIGNvbnN0IGxvYWRNb3JlU2VudGluZWxSZWYgPSB1c2VMb2FkTW9yZU9uU2Nyb2xsKGxvYWRNb3JlLCB7XG4gICAgaGFzTW9yZTogQm9vbGVhbihvbkxvYWRNb3JlICYmIGhhc01vcmUpLFxuICAgIGlzTG9hZGluZ01vcmU6IEJvb2xlYW4oaXNMb2FkaW5nTW9yZSksXG4gICAgcm9vdFJlZjogc2Nyb2xsQ29udGFpbmVyUmVmLFxuICB9KTtcblxuICBjb25zdCB7IHZpZXdwb3J0LCBzZXRWaWV3cG9ydCwgYW5pbWF0ZVRvIH0gPSB1c2VBbmltYXRlZFZpZXdwb3J0KHtcbiAgICBzdGFydDogcm9vdC5zdGFydFRpbWUsXG4gICAgZW5kOiByb290LnN0YXJ0VGltZSArIHJvb3QuZHVyYXRpb24sXG4gIH0pO1xuXG4gIGNvbnN0IHByZXZSb290UmVmID0gdXNlUmVmPFZpZXdwb3J0Pih7XG4gICAgc3RhcnQ6IHJvb3Quc3RhcnRUaW1lLFxuICAgIGVuZDogcm9vdC5zdGFydFRpbWUgKyByb290LmR1cmF0aW9uLFxuICB9KTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IHByZXZSb290ID0gcHJldlJvb3RSZWYuY3VycmVudDtcbiAgICBjb25zdCBuZXdTdGFydCA9IHJvb3Quc3RhcnRUaW1lO1xuICAgIGNvbnN0IG5ld0VuZCA9IHJvb3Quc3RhcnRUaW1lICsgcm9vdC5kdXJhdGlvbjtcblxuICAgIHNldFZpZXdwb3J0KChwcmV2KSA9PiB7XG4gICAgICBjb25zdCB3YXNBdEZ1bGxFeHRlbnQgPVxuICAgICAgICBNYXRoLmFicyhwcmV2LnN0YXJ0IC0gcHJldlJvb3Quc3RhcnQpIDwgMC4wMSAmJlxuICAgICAgICBNYXRoLmFicyhwcmV2LmVuZCAtIHByZXZSb290LmVuZCkgPCAwLjAxO1xuXG4gICAgICBpZiAod2FzQXRGdWxsRXh0ZW50KSB7XG4gICAgICAgIHJldHVybiB7IHN0YXJ0OiBuZXdTdGFydCwgZW5kOiBuZXdFbmQgfTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBwcmV2O1xuICAgIH0pO1xuXG4gICAgcHJldlJvb3RSZWYuY3VycmVudCA9IHsgc3RhcnQ6IG5ld1N0YXJ0LCBlbmQ6IG5ld0VuZCB9O1xuICB9LCBbcm9vdC5zdGFydFRpbWUsIHJvb3QuZHVyYXRpb24sIHNldFZpZXdwb3J0XSk7XG5cbiAgY29uc3Qgdmlld0R1cmF0aW9uID0gdmlld3BvcnQuZW5kIC0gdmlld3BvcnQuc3RhcnQ7XG5cbiAgLy8gS2VlcCBhIHJlZiB0byB0aGUgbGl2ZSB2aWV3cG9ydCBzbyB0aGUgcmV2ZWFsIGNhbGxiYWNrIGNhbiByZWFkIHRoZSBjdXJyZW50XG4gIC8vIHpvb20gd2l0aG91dCBiZWluZyByZWNyZWF0ZWQgb24gZXZlcnkgcGFuICh3aGljaCB3b3VsZCBidXN0IFRpbWVsaW5lQmFyJ3NcbiAgLy8gbWVtbyBhbmQgcmUtcmVuZGVyIGV2ZXJ5IHJvdyBlYWNoIGFuaW1hdGlvbiBmcmFtZSkuXG4gIGNvbnN0IHZpZXdwb3J0UmVmID0gdXNlUmVmKHZpZXdwb3J0KTtcbiAgdmlld3BvcnRSZWYuY3VycmVudCA9IHZpZXdwb3J0O1xuXG4gIGNvbnN0IHRpbWVNYXJrZXJzID0gdXNlTWVtbyhcbiAgICAoKSA9PiBjb21wdXRlVGltZU1hcmtlcnModmlld0R1cmF0aW9uLCB2aWV3cG9ydC5zdGFydCAtIHJvb3Quc3RhcnRUaW1lKSxcbiAgICBbdmlld0R1cmF0aW9uLCB2aWV3cG9ydC5zdGFydCwgcm9vdC5zdGFydFRpbWVdXG4gICk7XG5cbiAgY29uc3QgcmVzZXRab29tID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGFuaW1hdGVUbyh7IHN0YXJ0OiByb290LnN0YXJ0VGltZSwgZW5kOiByb290LnN0YXJ0VGltZSArIHJvb3QuZHVyYXRpb24gfSk7XG4gIH0sIFthbmltYXRlVG8sIHJvb3Quc3RhcnRUaW1lLCByb290LmR1cmF0aW9uXSk7XG5cbiAgLy8gUGFuIChrZWVwaW5nIHRoZSBjdXJyZW50IHpvb20pIHNvIGB0aW1lTXNgIGlzIGNlbnRlcmVkIGluIHZpZXcg4oCUIHVzZWQgYnkgdGhlXG4gIC8vIG9mZi1zY3JlZW4gbWFya2VyIGluZGljYXRvcnMgdG8gc2Nyb2xsIHRoZWlyIG1hcmtlciBpbnRvIHZpZXcuXG4gIGNvbnN0IGhhbmRsZVJldmVhbFRpbWUgPSB1c2VDYWxsYmFjayhcbiAgICAodGltZU1zOiBudW1iZXIpID0+IHtcbiAgICAgIGNvbnN0IHJvb3RTID0gcm9vdC5zdGFydFRpbWU7XG4gICAgICBjb25zdCByb290RSA9IHJvb3Quc3RhcnRUaW1lICsgcm9vdC5kdXJhdGlvbjtcbiAgICAgIGNvbnN0IHsgc3RhcnQsIGVuZCB9ID0gdmlld3BvcnRSZWYuY3VycmVudDtcbiAgICAgIGNvbnN0IGR1cmF0aW9uID0gZW5kIC0gc3RhcnQ7XG4gICAgICBsZXQgbmV3U3RhcnQgPSB0aW1lTXMgLSBkdXJhdGlvbiAvIDI7XG4gICAgICBsZXQgbmV3RW5kID0gdGltZU1zICsgZHVyYXRpb24gLyAyO1xuICAgICAgaWYgKG5ld1N0YXJ0IDwgcm9vdFMpIHtcbiAgICAgICAgbmV3U3RhcnQgPSByb290UztcbiAgICAgICAgbmV3RW5kID0gcm9vdFMgKyBkdXJhdGlvbjtcbiAgICAgIH1cbiAgICAgIGlmIChuZXdFbmQgPiByb290RSkge1xuICAgICAgICBuZXdFbmQgPSByb290RTtcbiAgICAgICAgbmV3U3RhcnQgPSBNYXRoLm1heChyb290Uywgcm9vdEUgLSBkdXJhdGlvbik7XG4gICAgICB9XG4gICAgICBhbmltYXRlVG8oeyBzdGFydDogbmV3U3RhcnQsIGVuZDogbmV3RW5kIH0pO1xuICAgIH0sXG4gICAgW2FuaW1hdGVUbywgcm9vdC5zdGFydFRpbWUsIHJvb3QuZHVyYXRpb25dXG4gICk7XG5cbiAgY29uc3QgWk9PTV9GQUNUT1IgPSAwLjU7XG5cbiAgY29uc3Qgem9vbUJ5ID0gdXNlQ2FsbGJhY2soXG4gICAgKGZhY3RvcjogbnVtYmVyKSA9PiB7XG4gICAgICBjb25zdCByb290UyA9IHJvb3Quc3RhcnRUaW1lO1xuICAgICAgY29uc3Qgcm9vdEUgPSByb290LnN0YXJ0VGltZSArIHJvb3QuZHVyYXRpb247XG4gICAgICBjb25zdCByb290RCA9IHJvb3QuZHVyYXRpb247XG5cbiAgICAgIHNldFZpZXdwb3J0KChwcmV2KSA9PiB7XG4gICAgICAgIGNvbnN0IHByZXZEdXJhdGlvbiA9IHByZXYuZW5kIC0gcHJldi5zdGFydDtcbiAgICAgICAgY29uc3QgY2VudGVyID0gKHByZXYuc3RhcnQgKyBwcmV2LmVuZCkgLyAyO1xuICAgICAgICBjb25zdCBuZXdEdXJhdGlvbiA9IE1hdGgubWF4KFxuICAgICAgICAgIE1JTl9WSUVXUE9SVF9NUyxcbiAgICAgICAgICBNYXRoLm1pbihyb290RCwgcHJldkR1cmF0aW9uICogZmFjdG9yKVxuICAgICAgICApO1xuICAgICAgICBsZXQgbmV3U3RhcnQgPSBjZW50ZXIgLSBuZXdEdXJhdGlvbiAvIDI7XG4gICAgICAgIGxldCBuZXdFbmQgPSBjZW50ZXIgKyBuZXdEdXJhdGlvbiAvIDI7XG5cbiAgICAgICAgaWYgKG5ld1N0YXJ0IDwgcm9vdFMpIHtcbiAgICAgICAgICBuZXdTdGFydCA9IHJvb3RTO1xuICAgICAgICAgIG5ld0VuZCA9IHJvb3RTICsgbmV3RHVyYXRpb247XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5ld0VuZCA+IHJvb3RFKSB7XG4gICAgICAgICAgbmV3RW5kID0gcm9vdEU7XG4gICAgICAgICAgbmV3U3RhcnQgPSBNYXRoLm1heChyb290Uywgcm9vdEUgLSBuZXdEdXJhdGlvbik7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4geyBzdGFydDogbmV3U3RhcnQsIGVuZDogbmV3RW5kIH07XG4gICAgICB9KTtcbiAgICB9LFxuICAgIFtzZXRWaWV3cG9ydCwgcm9vdC5zdGFydFRpbWUsIHJvb3QuZHVyYXRpb25dXG4gICk7XG5cbiAgY29uc3Qgem9vbUluID0gdXNlQ2FsbGJhY2soKCkgPT4gem9vbUJ5KFpPT01fRkFDVE9SKSwgW3pvb21CeV0pO1xuICBjb25zdCB6b29tT3V0ID0gdXNlQ2FsbGJhY2soKCkgPT4gem9vbUJ5KDEgLyBaT09NX0ZBQ1RPUiksIFt6b29tQnldKTtcblxuICBjb25zdCBmb2N1c1ZpZXdwb3J0T25TcGFuID0gdXNlQ2FsbGJhY2soXG4gICAgKHNwYW5JZDogc3RyaW5nKSA9PiB7XG4gICAgICBjb25zdCBzcGFuID0gdHJhY2Uuc3BhbnMuZmluZCgocykgPT4gcy5zcGFuSWQgPT09IHNwYW5JZCk7XG4gICAgICBpZiAoIXNwYW4pIHJldHVybjtcblxuICAgICAgY29uc3Qgc3BhblN0YXJ0ID0gZ2V0SGlnaFJlc0luTXMoc3Bhbi5zdGFydFRpbWUpO1xuICAgICAgY29uc3Qgc3BhbkVuZCA9IGdldEhpZ2hSZXNJbk1zKHNwYW4uZW5kVGltZSk7XG4gICAgICBjb25zdCBzcGFuRHVyYXRpb24gPSBzcGFuRW5kIC0gc3BhblN0YXJ0O1xuXG4gICAgICBjb25zdCByb290UyA9IHJvb3Quc3RhcnRUaW1lO1xuICAgICAgY29uc3Qgcm9vdEUgPSByb290LnN0YXJ0VGltZSArIHJvb3QuZHVyYXRpb247XG4gICAgICBjb25zdCByb290RCA9IHJvb3QuZHVyYXRpb247XG5cbiAgICAgIGlmIChzcGFuRHVyYXRpb24gPiByb290RCAqIDAuOCkge1xuICAgICAgICBhbmltYXRlVG8oeyBzdGFydDogcm9vdFMsIGVuZDogcm9vdEUgfSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgcGFkZGluZyA9IE1hdGgubWF4KHNwYW5EdXJhdGlvbiAqIDAuMiwgTUlOX1ZJRVdQT1JUX01TIC8gMik7XG4gICAgICBsZXQgbmV3U3RhcnQgPSBzcGFuU3RhcnQgLSBwYWRkaW5nO1xuICAgICAgbGV0IG5ld0VuZCA9IHNwYW5FbmQgKyBwYWRkaW5nO1xuXG4gICAgICBpZiAobmV3RW5kIC0gbmV3U3RhcnQgPCBNSU5fVklFV1BPUlRfTVMpIHtcbiAgICAgICAgY29uc3QgY2VudGVyID0gKHNwYW5TdGFydCArIHNwYW5FbmQpIC8gMjtcbiAgICAgICAgbmV3U3RhcnQgPSBjZW50ZXIgLSBNSU5fVklFV1BPUlRfTVMgLyAyO1xuICAgICAgICBuZXdFbmQgPSBjZW50ZXIgKyBNSU5fVklFV1BPUlRfTVMgLyAyO1xuICAgICAgfVxuXG4gICAgICBpZiAobmV3U3RhcnQgPCByb290Uykge1xuICAgICAgICBjb25zdCBkdXJhdGlvbiA9IG5ld0VuZCAtIG5ld1N0YXJ0O1xuICAgICAgICBuZXdTdGFydCA9IHJvb3RTO1xuICAgICAgICBuZXdFbmQgPSBNYXRoLm1pbihyb290RSwgcm9vdFMgKyBkdXJhdGlvbik7XG4gICAgICB9XG4gICAgICBpZiAobmV3RW5kID4gcm9vdEUpIHtcbiAgICAgICAgY29uc3QgZHVyYXRpb24gPSBuZXdFbmQgLSBuZXdTdGFydDtcbiAgICAgICAgbmV3RW5kID0gcm9vdEU7XG4gICAgICAgIG5ld1N0YXJ0ID0gTWF0aC5tYXgocm9vdFMsIHJvb3RFIC0gZHVyYXRpb24pO1xuICAgICAgfVxuXG4gICAgICBhbmltYXRlVG8oeyBzdGFydDogbmV3U3RhcnQsIGVuZDogbmV3RW5kIH0pO1xuICAgIH0sXG4gICAgW2FuaW1hdGVUbywgdHJhY2Uuc3BhbnMsIHJvb3Quc3RhcnRUaW1lLCByb290LmR1cmF0aW9uXVxuICApO1xuXG4gIC8vIEJyaW5nIGEgcm93IGludG8gdmlldyB3aGVuIGtleWJvYXJkL2J1dHRvbiBuYXZpZ2F0aW9uIGxhbmRzIG9uIGEgc3BhbiB0aGF0XG4gIC8vIHNpdHMgb3V0c2lkZSB0aGUgc2hhcmVkIHNjcm9sbCBjb250YWluZXIncyB2aXNpYmxlIGFyZWEuIFRoZSBsaXN0IGlzXG4gIC8vIHdpbmRvd2VkLCBzbyBhbiBvZmYtc2NyZWVuIHJvdyBoYXMgbm8gRE9NIG5vZGUgdG8gYHNjcm9sbEludG9WaWV3YCDigJRcbiAgLy8gYHNjcm9sbFJvd0ludG9WaWV3YCBjb21wdXRlcyB0aGUgdGFyZ2V0IG9mZnNldCBmcm9tIHRoZSBzcGFuJ3MgaW5kZXguXG4gIGNvbnN0IHNjcm9sbFNwYW5JbnRvVmlldyA9IHVzZUNhbGxiYWNrKFxuICAgIChzcGFuSWQ6IHN0cmluZykgPT4ge1xuICAgICAgY29uc3QgaW5kZXggPSB0cmFjZS5zcGFucy5maW5kSW5kZXgoKHMpID0+IHMuc3BhbklkID09PSBzcGFuSWQpO1xuICAgICAgaWYgKGluZGV4ID09PSAtMSkgcmV0dXJuO1xuXG4gICAgICBjb25zdCBsaXN0ID1cbiAgICAgICAgc2Nyb2xsQ29udGFpbmVyUmVmLmN1cnJlbnQ/LnF1ZXJ5U2VsZWN0b3I8SFRNTEVsZW1lbnQ+KCcjZXZlbnQtbGlzdCcpID8/XG4gICAgICAgIG51bGw7XG4gICAgICBzY3JvbGxSb3dJbnRvVmlldyhsaXN0LCBpbmRleCwgUk9XX0hFSUdIVF9QWCwge1xuICAgICAgICBiZWhhdmlvcjogcmVkdWNlZE1vdGlvbiA/ICdhdXRvJyA6ICdzbW9vdGgnLFxuICAgICAgfSk7XG4gICAgfSxcbiAgICBbdHJhY2Uuc3BhbnMsIHJlZHVjZWRNb3Rpb25dXG4gICk7XG5cbiAgY29uc3Qgem9vbVRpbWVyUmVmID0gdXNlUmVmPFJldHVyblR5cGU8dHlwZW9mIHNldFRpbWVvdXQ+IHwgbnVsbD4obnVsbCk7XG4gIGNvbnN0IGNhbmNlbFBlbmRpbmdab29tID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGlmICh6b29tVGltZXJSZWYuY3VycmVudCAhPT0gbnVsbCkge1xuICAgICAgY2xlYXJUaW1lb3V0KHpvb21UaW1lclJlZi5jdXJyZW50KTtcbiAgICAgIHpvb21UaW1lclJlZi5jdXJyZW50ID0gbnVsbDtcbiAgICB9XG4gIH0sIFtdKTtcbiAgdXNlRWZmZWN0KCgpID0+IGNhbmNlbFBlbmRpbmdab29tLCBbY2FuY2VsUGVuZGluZ1pvb21dKTtcblxuICBjb25zdCBoYW5kbGVDbGVhckFjdGl2ZVNwYW4gPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgY2FuY2VsUGVuZGluZ1pvb20oKTtcbiAgICBjbGVhckFjdGl2ZVNwYW4oKTtcbiAgfSwgW2NhbmNlbFBlbmRpbmdab29tLCBjbGVhckFjdGl2ZVNwYW5dKTtcblxuICBjb25zdCBoYW5kbGVTZWxlY3RTcGFuID0gdXNlQ2FsbGJhY2soXG4gICAgKHNwYW5JZDogc3RyaW5nKSA9PiB7XG4gICAgICBjYW5jZWxQZW5kaW5nWm9vbSgpO1xuICAgICAgaWYgKHNwYW5JZCA9PT0gYWN0aXZlU3BhbklkKSB7XG4gICAgICAgIGNsZWFyQWN0aXZlU3BhbigpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBzZXRBY3RpdmVTcGFuKHNwYW5JZCk7XG4gICAgICBmb2N1c1ZpZXdwb3J0T25TcGFuKHNwYW5JZCk7XG4gICAgfSxcbiAgICBbXG4gICAgICBjYW5jZWxQZW5kaW5nWm9vbSxcbiAgICAgIGFjdGl2ZVNwYW5JZCxcbiAgICAgIGNsZWFyQWN0aXZlU3BhbixcbiAgICAgIHNldEFjdGl2ZVNwYW4sXG4gICAgICBmb2N1c1ZpZXdwb3J0T25TcGFuLFxuICAgIF1cbiAgKTtcblxuICBjb25zdCBuYXZpZ2F0ZVRvU3BhbiA9IHVzZUNhbGxiYWNrKFxuICAgIChzcGFuSWQ6IHN0cmluZykgPT4ge1xuICAgICAgc2V0QWN0aXZlU3BhbihzcGFuSWQpO1xuICAgICAgc2Nyb2xsU3BhbkludG9WaWV3KHNwYW5JZCk7XG4gICAgICBjYW5jZWxQZW5kaW5nWm9vbSgpO1xuICAgICAgem9vbVRpbWVyUmVmLmN1cnJlbnQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgem9vbVRpbWVyUmVmLmN1cnJlbnQgPSBudWxsO1xuICAgICAgICBmb2N1c1ZpZXdwb3J0T25TcGFuKHNwYW5JZCk7XG4gICAgICB9LCBaT09NX0RFQk9VTkNFX01TKTtcbiAgICB9LFxuICAgIFtzZXRBY3RpdmVTcGFuLCBzY3JvbGxTcGFuSW50b1ZpZXcsIGNhbmNlbFBlbmRpbmdab29tLCBmb2N1c1ZpZXdwb3J0T25TcGFuXVxuICApO1xuXG4gIGNvbnN0IFthbHRIZWxkLCBzZXRBbHRIZWxkXSA9IHVzZVN0YXRlKGZhbHNlKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IGhhbmRsZVNpZGViYXJOYXZLZXkgPSAoZTogS2V5Ym9hcmRFdmVudCk6IHZvaWQgPT4ge1xuICAgICAgY29uc3QgdGFyZ2V0ID0gZS50YXJnZXQgYXMgSFRNTEVsZW1lbnQgfCBudWxsO1xuICAgICAgaWYgKFxuICAgICAgICB0YXJnZXQgaW5zdGFuY2VvZiBIVE1MSW5wdXRFbGVtZW50IHx8XG4gICAgICAgIHRhcmdldCBpbnN0YW5jZW9mIEhUTUxUZXh0QXJlYUVsZW1lbnQgfHxcbiAgICAgICAgdGFyZ2V0Py5pc0NvbnRlbnRFZGl0YWJsZVxuICAgICAgKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHRhcmdldElkID1cbiAgICAgICAgZS5rZXkgPT09ICdrJyA/IHByZXZTcGFuSWRSZWYuY3VycmVudCA6IG5leHRTcGFuSWRSZWYuY3VycmVudDtcbiAgICAgIGlmICh0YXJnZXRJZCkge1xuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIG5hdmlnYXRlVG9TcGFuUmVmLmN1cnJlbnQodGFyZ2V0SWQpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCBvbktleURvd24gPSAoZTogS2V5Ym9hcmRFdmVudCk6IHZvaWQgPT4ge1xuICAgICAgaWYgKGUua2V5ID09PSAnRXNjYXBlJykge1xuICAgICAgICBoYW5kbGVDbGVhckFjdGl2ZVNwYW4oKTtcbiAgICAgIH0gZWxzZSBpZiAoZS5rZXkgPT09ICdBbHQnKSB7XG4gICAgICAgIHNldEFsdEhlbGQodHJ1ZSk7XG4gICAgICB9IGVsc2UgaWYgKGUua2V5ID09PSAnaicgfHwgZS5rZXkgPT09ICdrJykge1xuICAgICAgICBoYW5kbGVTaWRlYmFyTmF2S2V5KGUpO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3Qgb25LZXlVcCA9IChlOiBLZXlib2FyZEV2ZW50KTogdm9pZCA9PiB7XG4gICAgICBpZiAoZS5rZXkgPT09ICdBbHQnKSBzZXRBbHRIZWxkKGZhbHNlKTtcbiAgICB9O1xuICAgIGNvbnN0IG9uQmx1ciA9ICgpOiB2b2lkID0+IHNldEFsdEhlbGQoZmFsc2UpO1xuXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCBvbktleURvd24pO1xuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdrZXl1cCcsIG9uS2V5VXApO1xuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdibHVyJywgb25CbHVyKTtcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCBvbktleURvd24pO1xuICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2tleXVwJywgb25LZXlVcCk7XG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignYmx1cicsIG9uQmx1cik7XG4gICAgfTtcbiAgfSwgW2hhbmRsZUNsZWFyQWN0aXZlU3Bhbl0pO1xuXG4gIGNvbnN0IHRpbWVsaW5lUmVmID0gdXNlUmVmPEhUTUxEaXZFbGVtZW50PihudWxsKTtcbiAgY29uc3QgW2hvdmVyRnJhY3Rpb24sIHNldEhvdmVyRnJhY3Rpb25dID0gdXNlU3RhdGU8bnVtYmVyIHwgbnVsbD4obnVsbCk7XG5cbiAgY29uc3QgaG92ZXJJbmZvID0gdXNlTWVtbygoKSA9PiB7XG4gICAgaWYgKGhvdmVyRnJhY3Rpb24gPT0gbnVsbCkgcmV0dXJuIG51bGw7XG4gICAgY29uc3QgYWJzVGltZSA9IHZpZXdwb3J0LnN0YXJ0ICsgaG92ZXJGcmFjdGlvbiAqIHZpZXdEdXJhdGlvbjtcbiAgICBjb25zdCBvZmZzZXQgPSBhYnNUaW1lIC0gcm9vdC5zdGFydFRpbWU7XG4gICAgcmV0dXJuIHsgZnJhY3Rpb246IGhvdmVyRnJhY3Rpb24sIGxhYmVsOiBmb3JtYXREdXJhdGlvbihvZmZzZXQsIHRydWUpIH07XG4gIH0sIFtob3ZlckZyYWN0aW9uLCB2aWV3cG9ydC5zdGFydCwgdmlld0R1cmF0aW9uLCByb290LnN0YXJ0VGltZV0pO1xuXG4gIGNvbnN0IGhhbmRsZVRpbWVsaW5lTW91c2VNb3ZlID0gdXNlQ2FsbGJhY2soXG4gICAgKGU6IFJlYWN0Lk1vdXNlRXZlbnQ8SFRNTERpdkVsZW1lbnQ+KSA9PiB7XG4gICAgICBjb25zdCBlbCA9IHRpbWVsaW5lUmVmLmN1cnJlbnQ7XG4gICAgICBpZiAoIWVsKSByZXR1cm47XG4gICAgICBjb25zdCByZWN0ID0gZWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICBjb25zdCBjb250ZW50V2lkdGggPSByZWN0LndpZHRoIC0gVElNRUxJTkVfUEFERElOR19QWCAqIDI7XG4gICAgICBpZiAoY29udGVudFdpZHRoIDw9IDApIHJldHVybjtcbiAgICAgIGNvbnN0IGZyYWN0aW9uID0gTWF0aC5tYXgoXG4gICAgICAgIDAsXG4gICAgICAgIE1hdGgubWluKFxuICAgICAgICAgIDEsXG4gICAgICAgICAgKGUuY2xpZW50WCAtIHJlY3QubGVmdCAtIFRJTUVMSU5FX1BBRERJTkdfUFgpIC8gY29udGVudFdpZHRoXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgICBzZXRIb3ZlckZyYWN0aW9uKGZyYWN0aW9uKTtcbiAgICB9LFxuICAgIFtdXG4gICk7XG5cbiAgY29uc3QgaGFuZGxlVGltZWxpbmVNb3VzZUxlYXZlID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIHNldEhvdmVyRnJhY3Rpb24obnVsbCk7XG4gIH0sIFtdKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IGVsID0gdGltZWxpbmVSZWYuY3VycmVudDtcbiAgICBpZiAoIWVsKSByZXR1cm47XG5cbiAgICBjb25zdCByb290UyA9IHJvb3Quc3RhcnRUaW1lO1xuICAgIGNvbnN0IHJvb3RFID0gcm9vdC5zdGFydFRpbWUgKyByb290LmR1cmF0aW9uO1xuICAgIGNvbnN0IHJvb3REID0gcm9vdC5kdXJhdGlvbjtcbiAgICBpZiAocm9vdEQgPD0gMCkgcmV0dXJuO1xuXG4gICAgY29uc3Qgb25XaGVlbCA9IChlOiBXaGVlbEV2ZW50KTogdm9pZCA9PiB7XG4gICAgICBjb25zdCBpc1pvb21HZXN0dXJlID0gZS5jdHJsS2V5IHx8IGUubWV0YUtleTtcbiAgICAgIGNvbnN0IGhhc0RlbHRhWCA9IE1hdGguYWJzKGUuZGVsdGFYKSA+IE1hdGguYWJzKGUuZGVsdGFZKTtcblxuICAgICAgaWYgKCFpc1pvb21HZXN0dXJlICYmICFoYXNEZWx0YVgpIHJldHVybjtcbiAgICAgIGUucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgY29uc3QgcmVjdCA9IGVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgY29uc3QgY29udGVudFdpZHRoID0gcmVjdC53aWR0aCAtIFRJTUVMSU5FX1BBRERJTkdfUFggKiAyO1xuICAgICAgaWYgKGNvbnRlbnRXaWR0aCA8PSAwKSByZXR1cm47XG5cbiAgICAgIGlmIChpc1pvb21HZXN0dXJlKSB7XG4gICAgICAgIGxldCBkeSA9IGUuZGVsdGFZO1xuICAgICAgICBpZiAoZS5kZWx0YU1vZGUgPT09IDEpIGR5ICo9IDE2O1xuXG4gICAgICAgIGNvbnN0IGN1cnNvckZyYWN0aW9uID0gTWF0aC5tYXgoXG4gICAgICAgICAgMCxcbiAgICAgICAgICBNYXRoLm1pbihcbiAgICAgICAgICAgIDEsXG4gICAgICAgICAgICAoZS5jbGllbnRYIC0gcmVjdC5sZWZ0IC0gVElNRUxJTkVfUEFERElOR19QWCkgLyBjb250ZW50V2lkdGhcbiAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IGlzTW91c2VXaGVlbCA9IGUuZGVsdGFNb2RlID09PSAxIHx8IE1hdGguYWJzKGUuZGVsdGFZKSA+PSA1MDtcbiAgICAgICAgY29uc3Qgc2NhbGVGYWN0b3IgPSAyICoqIChkeSAvIChpc01vdXNlV2hlZWwgPyAyMDAgOiA2MCkpO1xuXG4gICAgICAgIHNldFZpZXdwb3J0KChwcmV2KSA9PiB7XG4gICAgICAgICAgY29uc3QgcHJldkR1cmF0aW9uID0gcHJldi5lbmQgLSBwcmV2LnN0YXJ0O1xuICAgICAgICAgIGNvbnN0IGN1cnNvclRpbWUgPSBwcmV2LnN0YXJ0ICsgY3Vyc29yRnJhY3Rpb24gKiBwcmV2RHVyYXRpb247XG4gICAgICAgICAgY29uc3QgbmV3RHVyYXRpb24gPSBNYXRoLm1heChcbiAgICAgICAgICAgIE1JTl9WSUVXUE9SVF9NUyxcbiAgICAgICAgICAgIE1hdGgubWluKHJvb3RELCBwcmV2RHVyYXRpb24gKiBzY2FsZUZhY3RvcilcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgbGV0IG5ld1N0YXJ0ID0gY3Vyc29yVGltZSAtIGN1cnNvckZyYWN0aW9uICogbmV3RHVyYXRpb247XG4gICAgICAgICAgbGV0IG5ld0VuZCA9IG5ld1N0YXJ0ICsgbmV3RHVyYXRpb247XG5cbiAgICAgICAgICBpZiAobmV3U3RhcnQgPCByb290Uykge1xuICAgICAgICAgICAgbmV3U3RhcnQgPSByb290UztcbiAgICAgICAgICAgIG5ld0VuZCA9IHJvb3RTICsgbmV3RHVyYXRpb247XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChuZXdFbmQgPiByb290RSkge1xuICAgICAgICAgICAgbmV3RW5kID0gcm9vdEU7XG4gICAgICAgICAgICBuZXdTdGFydCA9IE1hdGgubWF4KHJvb3RTLCByb290RSAtIG5ld0R1cmF0aW9uKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4geyBzdGFydDogbmV3U3RhcnQsIGVuZDogbmV3RW5kIH07XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbGV0IGR4ID0gZS5kZWx0YVg7XG4gICAgICAgIGlmIChlLmRlbHRhTW9kZSA9PT0gMSkgZHggKj0gMTY7XG5cbiAgICAgICAgc2V0Vmlld3BvcnQoKHByZXYpID0+IHtcbiAgICAgICAgICBjb25zdCBwcmV2RHVyYXRpb24gPSBwcmV2LmVuZCAtIHByZXYuc3RhcnQ7XG4gICAgICAgICAgY29uc3QgcGFuQW1vdW50ID0gKGR4IC8gY29udGVudFdpZHRoKSAqIHByZXZEdXJhdGlvbjtcblxuICAgICAgICAgIGxldCBuZXdTdGFydCA9IHByZXYuc3RhcnQgKyBwYW5BbW91bnQ7XG4gICAgICAgICAgbGV0IG5ld0VuZCA9IHByZXYuZW5kICsgcGFuQW1vdW50O1xuXG4gICAgICAgICAgaWYgKG5ld1N0YXJ0IDwgcm9vdFMpIHtcbiAgICAgICAgICAgIG5ld1N0YXJ0ID0gcm9vdFM7XG4gICAgICAgICAgICBuZXdFbmQgPSByb290UyArIHByZXZEdXJhdGlvbjtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKG5ld0VuZCA+IHJvb3RFKSB7XG4gICAgICAgICAgICBuZXdFbmQgPSByb290RTtcbiAgICAgICAgICAgIG5ld1N0YXJ0ID0gTWF0aC5tYXgocm9vdFMsIHJvb3RFIC0gcHJldkR1cmF0aW9uKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4geyBzdGFydDogbmV3U3RhcnQsIGVuZDogbmV3RW5kIH07XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBlbC5hZGRFdmVudExpc3RlbmVyKCd3aGVlbCcsIG9uV2hlZWwsIHsgcGFzc2l2ZTogZmFsc2UgfSk7XG4gICAgcmV0dXJuICgpID0+IGVsLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3doZWVsJywgb25XaGVlbCk7XG4gIH0sIFtyb290LnN0YXJ0VGltZSwgcm9vdC5kdXJhdGlvbiwgc2V0Vmlld3BvcnRdKTtcblxuICAvLyBEZXJpdmUgdGhlIHNlbGVjdGVkIHNwYW4gbmFtZSBhbmQgbWV0YWRhdGEgZm9yIHRoZSBwYW5lbCBoZWFkZXJcbiAgY29uc3Qgc2VsZWN0ZWRTcGFuTmFtZSA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGlmICghc2VsZWN0ZWRTcGFuPy5kYXRhKSByZXR1cm4gJ0RldGFpbHMnO1xuICAgIGNvbnN0IGRhdGEgPSBzZWxlY3RlZFNwYW4uZGF0YSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICBpZiAoc2VsZWN0ZWRTcGFuLnJlc291cmNlID09PSAnaG9vaycpIHtcbiAgICAgIHJldHVybiAoZGF0YS50b2tlbiBhcyBzdHJpbmcgfCB1bmRlZmluZWQpID8/IChkYXRhLmhvb2tJZCBhcyBzdHJpbmcpO1xuICAgIH1cblxuICAgIGNvbnN0IHN0ZXBOYW1lID0gZGF0YS5zdGVwTmFtZSBhcyBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgY29uc3Qgd29ya2Zsb3dOYW1lID0gZGF0YS53b3JrZmxvd05hbWUgYXMgc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIHJldHVybiAoXG4gICAgICAoc3RlcE5hbWUgPyBwYXJzZVN0ZXBOYW1lKHN0ZXBOYW1lKT8uc2hvcnROYW1lIDogdW5kZWZpbmVkKSA/P1xuICAgICAgKHdvcmtmbG93TmFtZSA/IHBhcnNlV29ya2Zsb3dOYW1lKHdvcmtmbG93TmFtZSk/LnNob3J0TmFtZSA6IHVuZGVmaW5lZCkgPz9cbiAgICAgIHN0ZXBOYW1lID8/XG4gICAgICB3b3JrZmxvd05hbWUgPz9cbiAgICAgIChkYXRhLmhvb2tJZCBhcyBzdHJpbmcpID8/XG4gICAgICAnRGV0YWlscydcbiAgICApO1xuICB9LCBbc2VsZWN0ZWRTcGFuPy5kYXRhLCBzZWxlY3RlZFNwYW4/LnJlc291cmNlXSk7XG5cbiAgY29uc3QgeyBwcmV2U3BhbklkLCBuZXh0U3BhbklkIH0gPSB1c2VNZW1vKCgpID0+IHtcbiAgICBpZiAoIWFjdGl2ZVNwYW5JZCkgcmV0dXJuIHsgcHJldlNwYW5JZDogbnVsbCwgbmV4dFNwYW5JZDogbnVsbCB9O1xuICAgIGNvbnN0IGkgPSB0cmFjZS5zcGFucy5maW5kSW5kZXgoKHMpID0+IHMuc3BhbklkID09PSBhY3RpdmVTcGFuSWQpO1xuICAgIGlmIChpID09PSAtMSkgcmV0dXJuIHsgcHJldlNwYW5JZDogbnVsbCwgbmV4dFNwYW5JZDogbnVsbCB9O1xuICAgIHJldHVybiB7XG4gICAgICBwcmV2U3BhbklkOiB0cmFjZS5zcGFuc1tpIC0gMV0/LnNwYW5JZCA/PyBudWxsLFxuICAgICAgbmV4dFNwYW5JZDogdHJhY2Uuc3BhbnNbaSArIDFdPy5zcGFuSWQgPz8gbnVsbCxcbiAgICB9O1xuICB9LCBbYWN0aXZlU3BhbklkLCB0cmFjZS5zcGFuc10pO1xuXG4gIGNvbnN0IGhhbmRsZVNlbGVjdFByZXZTcGFuID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGlmIChwcmV2U3BhbklkKSBuYXZpZ2F0ZVRvU3BhbihwcmV2U3BhbklkKTtcbiAgfSwgW3ByZXZTcGFuSWQsIG5hdmlnYXRlVG9TcGFuXSk7XG5cbiAgY29uc3QgaGFuZGxlU2VsZWN0TmV4dFNwYW4gPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgaWYgKG5leHRTcGFuSWQpIG5hdmlnYXRlVG9TcGFuKG5leHRTcGFuSWQpO1xuICB9LCBbbmV4dFNwYW5JZCwgbmF2aWdhdGVUb1NwYW5dKTtcblxuICBjb25zdCBwcmV2U3BhbklkUmVmID0gdXNlUmVmKHByZXZTcGFuSWQpO1xuICBjb25zdCBuZXh0U3BhbklkUmVmID0gdXNlUmVmKG5leHRTcGFuSWQpO1xuICBjb25zdCBuYXZpZ2F0ZVRvU3BhblJlZiA9IHVzZVJlZihuYXZpZ2F0ZVRvU3Bhbik7XG4gIHByZXZTcGFuSWRSZWYuY3VycmVudCA9IHByZXZTcGFuSWQ7XG4gIG5leHRTcGFuSWRSZWYuY3VycmVudCA9IG5leHRTcGFuSWQ7XG4gIG5hdmlnYXRlVG9TcGFuUmVmLmN1cnJlbnQgPSBuYXZpZ2F0ZVRvU3BhbjtcblxuICByZXR1cm4gKFxuICAgIDxkaXZcbiAgICAgIGRhdGEtcGFuZT1cInBhbmUtcm9vdFwiXG4gICAgICBkYXRhLWhhcy1kZXRhaWw9e2FjdGl2ZVNwYW4gPyAnJyA6IHVuZGVmaW5lZH1cbiAgICAgIGNsYXNzTmFtZT1cInJlbGF0aXZlIGdyaWQgdy1mdWxsIGgtZnVsbCBtYXgtaC1mdWxsIGdyaWQtY29scy1bbWlubWF4KDEwMHB4LDFmcildIGRhdGEtW2hhcy1kZXRhaWxdOmdyaWQtY29scy1bbWlubWF4KDEwMHB4LDFmcilfY2xhbXAoMjgwcHgsMzYwcHgsMTAwJSldXCJcbiAgICA+XG4gICAgICA8ZGl2XG4gICAgICAgIGlkPVwidHJhY2UtcGFyZW50XCJcbiAgICAgICAgY2xhc3NOYW1lPVwiZ3JpZCBncmlkLXJvd3MtWzFmcl0gaC1mdWxsIG1pbi1oLTAgb3ZlcmZsb3ctaGlkZGVuIHJlbGF0aXZlIGJnLWJhY2tncm91bmQtMTAwXCJcbiAgICAgID5cbiAgICAgICAgPFNwbGl0UGFuZVxuICAgICAgICAgIHNjcm9sbENvbnRhaW5lclJlZj17c2Nyb2xsQ29udGFpbmVyUmVmfVxuICAgICAgICAgIHN0YXJ0SGVhZGVyPXtcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiYmctYmFja2dyb3VuZC0xMDAgYm9yZGVyLWIgYm9yZGVyLWdyYXktYWxwaGEtNDAwIGgtMTAgbWluLWgtMTAgZmxleCBpdGVtcy1jZW50ZXIgcGwtNCBwci0yIGdhcC0xLjVcIj5cbiAgICAgICAgICAgICAgPFNlYXJjaCBjbGFzc05hbWU9XCJ3LTMuNSBoLTMuNSBzaHJpbmstMCB0ZXh0LWdyYXktODAwXCIgLz5cbiAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgaWQ9XCJ0cmFjZS12aWV3ZXItc2VhcmNoXCJcbiAgICAgICAgICAgICAgICBuYW1lPVwidHJhY2Utdmlld2VyLXNlYXJjaFwiXG4gICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAgIHZhbHVlPXtzZWFyY2hRdWVyeX1cbiAgICAgICAgICAgICAgICBvbkNoYW5nZT17KGUpID0+IHNldFNlYXJjaFF1ZXJ5KGUudGFyZ2V0LnZhbHVlKX1cbiAgICAgICAgICAgICAgICBvbktleURvd249eyhlKSA9PiB7XG4gICAgICAgICAgICAgICAgICBpZiAoZS5rZXkgPT09ICdFc2NhcGUnICYmIHNlYXJjaFF1ZXJ5KSB7XG4gICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgICAgICAgICAgc2V0U2VhcmNoUXVlcnkoJycpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJTZWFyY2ggc3BhbnMuLi5cIlxuICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJTZWFyY2ggc3BhbnNcIlxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImZsZXgtMSBtaW4tdy0wIGJnLXRyYW5zcGFyZW50IHRleHQtc20gdGV4dC1ncmF5LTEwMDAgcGxhY2Vob2xkZXI6dGV4dC1ncmF5LTgwMCBvdXRsaW5lLW5vbmVcIlxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICB7c2VhcmNoUXVlcnkgJiYgKFxuICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgYXJpYS1sYWJlbD1cIkNsZWFyIHNlYXJjaFwiXG4gICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBzZXRTZWFyY2hRdWVyeSgnJyl9XG4gICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCItbXItMiBoaWRkZW4gaC1mdWxsIG1heC13LWZ1bGwgc2hyaW5rLTAgY3Vyc29yLXBvaW50ZXIgaXRlbXMtY2VudGVyIHJvdW5kZWQtci1tZCBib3JkZXItMCBiZy10cmFuc3BhcmVudCBweC0yLjUgZm9udC1pbmhlcml0IHRleHQtYmFzZSB0ZXh0LWdyYXktOTAwIG5vLXVuZGVybGluZSB0cmFuc2l0aW9uLWNvbG9ycyBkdXJhdGlvbi0xNTAgZWFzZS1pbiBob3Zlcjp0ZXh0LWdyYXktMTAwMCBmb2N1cy12aXNpYmxlOi1vdXRsaW5lLW9mZnNldC0xIGZvY3VzLXZpc2libGU6b3V0bGluZSBmb2N1cy12aXNpYmxlOm91dGxpbmUtMiBmb2N1cy12aXNpYmxlOm91dGxpbmUtW3ZhcigtLWRzLWZvY3VzLWNvbG9yKV0gbWluLVs5NjFweF06ZmxleFwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPEtiZCB2YXJpYW50PVwib3V0bGluZVwiIHNpemU9XCJzZWFyY2hcIj5cbiAgICAgICAgICAgICAgICAgICAgRXNjXG4gICAgICAgICAgICAgICAgICA8L0tiZD5cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIH1cbiAgICAgICAgICBlbmRIZWFkZXI9e1xuICAgICAgICAgICAgPFRpbWVsaW5lSGVhZGVyIG1hcmtlcnM9e3RpbWVNYXJrZXJzfSBob3ZlckluZm89e2hvdmVySW5mb30gLz5cbiAgICAgICAgICB9XG4gICAgICAgID5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImJsb2NrIG92ZXJmbG93LXZpc2libGVcIj5cbiAgICAgICAgICAgIDxFdmVudExpc3RcbiAgICAgICAgICAgICAgc3BhbnM9e3RyYWNlLnNwYW5zfVxuICAgICAgICAgICAgICBhY3RpdmVTcGFuSWQ9e2FjdGl2ZVNwYW5JZH1cbiAgICAgICAgICAgICAgc2VhcmNoUmVzdWx0PXtzZWFyY2hSZXN1bHR9XG4gICAgICAgICAgICAgIG9uU2VsZWN0U3Bhbj17aGFuZGxlU2VsZWN0U3Bhbn1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8ZGl2IHJlZj17bG9hZE1vcmVTZW50aW5lbFJlZn0gY2xhc3NOYW1lPVwiZmxleCBqdXN0aWZ5LWNlbnRlclwiPlxuICAgICAgICAgICAgICB7aXNMb2FkaW5nTW9yZSA/IChcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGdhcC0yIHB5LTMgdGV4dC1zbSB0ZXh0LWdyYXktODAwXCI+XG4gICAgICAgICAgICAgICAgICA8U3Bpbm5lciBzaXplPXsxNH0gLz5cbiAgICAgICAgICAgICAgICAgIDxzcGFuPkxvYWRpbmcgc3BhbnPigKY8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgey8qIGJpb21lLWlnbm9yZSBsaW50L2ExMXkvbm9TdGF0aWNFbGVtZW50SW50ZXJhY3Rpb25zOiB0aW1lbGluZSBob3ZlciBhbmQgd2hlZWwgZ2VzdHVyZXMgYXJlIHBvaW50ZXItb25seSBhbm5vdGF0aW9ucyAqL31cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICByZWY9e3RpbWVsaW5lUmVmfVxuICAgICAgICAgICAgY2xhc3NOYW1lPVwiYmxvY2sgbWluLWgtMCBvdmVyZmxvdy12aXNpYmxlIHJlbGF0aXZlXCJcbiAgICAgICAgICAgIG9uRG91YmxlQ2xpY2s9e3Jlc2V0Wm9vbX1cbiAgICAgICAgICAgIG9uTW91c2VNb3ZlPXtoYW5kbGVUaW1lbGluZU1vdXNlTW92ZX1cbiAgICAgICAgICAgIG9uTW91c2VMZWF2ZT17aGFuZGxlVGltZWxpbmVNb3VzZUxlYXZlfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxUaW1lbGluZVxuICAgICAgICAgICAgICBzcGFucz17dHJhY2Uuc3BhbnN9XG4gICAgICAgICAgICAgIHZpZXdTdGFydD17dmlld3BvcnQuc3RhcnR9XG4gICAgICAgICAgICAgIHZpZXdFbmQ9e3ZpZXdwb3J0LmVuZH1cbiAgICAgICAgICAgICAgbWFya2Vycz17dGltZU1hcmtlcnN9XG4gICAgICAgICAgICAgIHNlbGVjdGVkSWQ9e2FjdGl2ZVNwYW5JZH1cbiAgICAgICAgICAgICAgc2VhcmNoUmVzdWx0PXtzZWFyY2hSZXN1bHR9XG4gICAgICAgICAgICAgIG9uU2VsZWN0PXtoYW5kbGVTZWxlY3RTcGFufVxuICAgICAgICAgICAgICBvblJldmVhbFRpbWU9e2hhbmRsZVJldmVhbFRpbWV9XG4gICAgICAgICAgICAgIGhvdmVyRnJhY3Rpb249e2hvdmVyRnJhY3Rpb259XG4gICAgICAgICAgICAgIGFsdEhlbGQ9e2FsdEhlbGR9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L1NwbGl0UGFuZT5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJhYnNvbHV0ZSByaWdodC0zIGJvdHRvbS0zIHotWzVdIGZsZXggaXRlbXMtY2VudGVyIGJvcmRlciBib3JkZXItZ3JheS1hbHBoYS00MDAgcm91bmRlZC1tZCBiZy1iYWNrZ3JvdW5kLTEwMCBzaGFkb3ctc20gb3ZlcmZsb3ctaGlkZGVuIGRpdmlkZS14IGRpdmlkZS1ncmF5LWFscGhhLTQwMFwiPlxuICAgICAgICAgIDxJY29uQnV0dG9uXG4gICAgICAgICAgICB2YXJpYW50PVwibXV0ZWRcIlxuICAgICAgICAgICAgc2l6ZT1cInNtYWxsXCJcbiAgICAgICAgICAgIG9uQ2xpY2s9e3pvb21PdXR9XG4gICAgICAgICAgICBhcmlhLWxhYmVsPVwiWm9vbSBvdXRcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxab29tT3V0IGNsYXNzTmFtZT1cInctNCBoLTRcIiAvPlxuICAgICAgICAgIDwvSWNvbkJ1dHRvbj5cbiAgICAgICAgICA8SWNvbkJ1dHRvblxuICAgICAgICAgICAgdmFyaWFudD1cIm11dGVkXCJcbiAgICAgICAgICAgIHNpemU9XCJzbWFsbFwiXG4gICAgICAgICAgICBvbkNsaWNrPXtyZXNldFpvb219XG4gICAgICAgICAgICBhcmlhLWxhYmVsPVwiUmVzZXQgem9vbVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPFJvdGF0ZUNjdyBjbGFzc05hbWU9XCJ3LTMuNSBoLTMuNVwiIC8+XG4gICAgICAgICAgPC9JY29uQnV0dG9uPlxuICAgICAgICAgIDxJY29uQnV0dG9uXG4gICAgICAgICAgICB2YXJpYW50PVwibXV0ZWRcIlxuICAgICAgICAgICAgc2l6ZT1cInNtYWxsXCJcbiAgICAgICAgICAgIG9uQ2xpY2s9e3pvb21Jbn1cbiAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJab29tIGluXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8Wm9vbUluIGNsYXNzTmFtZT1cInctNCBoLTRcIiAvPlxuICAgICAgICAgIDwvSWNvbkJ1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cblxuICAgICAgey8qIERldGFpbCBwYW5lbCAqL31cbiAgICAgIHthY3RpdmVTcGFuID8gKFxuICAgICAgICA8YXNpZGUgY2xhc3NOYW1lPVwiZmxleCBmbGV4LWNvbCBoLWZ1bGwgbWF4LWgtZnVsbCBiZy1iYWNrZ3JvdW5kLTEwMCBib3JkZXItbCBib3JkZXItZ3JheS1hbHBoYS00MDAgb3ZlcmZsb3ctYXV0b1wiPlxuICAgICAgICAgIHsvKiBQYW5lbCBoZWFkZXIgKi99XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gZ2FwLTIgc2hyaW5rLTAgcHgtNCBwdC0zIHBiLTNcIj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInRleHQtbGFiZWwtMTQgZm9udC1tZWRpdW0gdGV4dC1ncmF5LTEwMDAgdHJ1bmNhdGUgYmxvY2tcIj5cbiAgICAgICAgICAgICAge3NlbGVjdGVkU3Bhbk5hbWV9XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0wLjUgc2hyaW5rLTBcIj5cbiAgICAgICAgICAgICAgPFRvb2x0aXA+XG4gICAgICAgICAgICAgICAgPFRvb2x0aXBUcmlnZ2VyIGFzQ2hpbGQ+XG4gICAgICAgICAgICAgICAgICA8SWNvbkJ1dHRvblxuICAgICAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPVwiTmF2aWdhdGUgdXBcIlxuICAgICAgICAgICAgICAgICAgICBhcmlhLWtleXNob3J0Y3V0cz1cIktcIlxuICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXtoYW5kbGVTZWxlY3RQcmV2U3Bhbn1cbiAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9eyFwcmV2U3BhbklkfVxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8Q2hldnJvblVwIGNsYXNzTmFtZT1cInctNCBoLTRcIiAvPlxuICAgICAgICAgICAgICAgICAgPC9JY29uQnV0dG9uPlxuICAgICAgICAgICAgICAgIDwvVG9vbHRpcFRyaWdnZXI+XG4gICAgICAgICAgICAgICAge3ByZXZTcGFuSWQgPyAoXG4gICAgICAgICAgICAgICAgICA8VG9vbHRpcENvbnRlbnQ+XG4gICAgICAgICAgICAgICAgICAgIE5hdmlnYXRlIHVwXG4gICAgICAgICAgICAgICAgICAgIDxLYmQ+SzwvS2JkPlxuICAgICAgICAgICAgICAgICAgPC9Ub29sdGlwQ29udGVudD5cbiAgICAgICAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICAgICAgPC9Ub29sdGlwPlxuICAgICAgICAgICAgICA8VG9vbHRpcD5cbiAgICAgICAgICAgICAgICA8VG9vbHRpcFRyaWdnZXIgYXNDaGlsZD5cbiAgICAgICAgICAgICAgICAgIDxJY29uQnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJOYXZpZ2F0ZSBkb3duXCJcbiAgICAgICAgICAgICAgICAgICAgYXJpYS1rZXlzaG9ydGN1dHM9XCJKXCJcbiAgICAgICAgICAgICAgICAgICAgb25DbGljaz17aGFuZGxlU2VsZWN0TmV4dFNwYW59XG4gICAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXshbmV4dFNwYW5JZH1cbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPENoZXZyb25Eb3duIGNsYXNzTmFtZT1cInctNCBoLTRcIiAvPlxuICAgICAgICAgICAgICAgICAgPC9JY29uQnV0dG9uPlxuICAgICAgICAgICAgICAgIDwvVG9vbHRpcFRyaWdnZXI+XG4gICAgICAgICAgICAgICAge25leHRTcGFuSWQgPyAoXG4gICAgICAgICAgICAgICAgICA8VG9vbHRpcENvbnRlbnQ+XG4gICAgICAgICAgICAgICAgICAgIE5hdmlnYXRlIGRvd25cbiAgICAgICAgICAgICAgICAgICAgPEtiZD5KPC9LYmQ+XG4gICAgICAgICAgICAgICAgICA8L1Rvb2x0aXBDb250ZW50PlxuICAgICAgICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICAgICAgICA8L1Rvb2x0aXA+XG4gICAgICAgICAgICAgIDxkaXYgYXJpYS1oaWRkZW4gY2xhc3NOYW1lPVwidy1weCBoLTQgYmctZ3JheS1hbHBoYS00MDAgbXgtMVwiIC8+XG4gICAgICAgICAgICAgIDxJY29uQnV0dG9uXG4gICAgICAgICAgICAgICAgYXJpYS1sYWJlbD1cIkNsb3NlIHNwYW4gZGV0YWlsc1wiXG4gICAgICAgICAgICAgICAgYXJpYS1rZXlzaG9ydGN1dHM9XCJFc2NhcGVcIlxuICAgICAgICAgICAgICAgIG9uQ2xpY2s9e2hhbmRsZUNsZWFyQWN0aXZlU3Bhbn1cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxYIGNsYXNzTmFtZT1cInctNCBoLTRcIiAvPlxuICAgICAgICAgICAgICA8L0ljb25CdXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICB7LyogUGFuZWwgYm9keSAqL31cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXgtMSBvdmVyZmxvdy15LWF1dG9cIj5cbiAgICAgICAgICAgIDxFcnJvckJvdW5kYXJ5PlxuICAgICAgICAgICAgICA8RW50aXR5RGV0YWlsUGFuZWxcbiAgICAgICAgICAgICAgICBydW49e3NpZGViYXIucnVufVxuICAgICAgICAgICAgICAgIG9uU3RyZWFtQ2xpY2s9e3NpZGViYXIub25TdHJlYW1DbGlja31cbiAgICAgICAgICAgICAgICBvblJ1bkNsaWNrPXtzaWRlYmFyLm9uUnVuQ2xpY2t9XG4gICAgICAgICAgICAgICAgc3BhbkRldGFpbERhdGE9e3NpZGViYXIuc3BhbkRldGFpbERhdGF9XG4gICAgICAgICAgICAgICAgc3BhbkRldGFpbEVycm9yPXtzaWRlYmFyLnNwYW5EZXRhaWxFcnJvcn1cbiAgICAgICAgICAgICAgICBzcGFuRGV0YWlsTG9hZGluZz17c2lkZWJhci5zcGFuRGV0YWlsTG9hZGluZ31cbiAgICAgICAgICAgICAgICBvblNwYW5TZWxlY3Q9e3NpZGViYXIub25TcGFuU2VsZWN0fVxuICAgICAgICAgICAgICAgIG9uV2FrZVVwU2xlZXA9e3NpZGViYXIub25XYWtlVXBTbGVlcH1cbiAgICAgICAgICAgICAgICBvbkxvYWRFdmVudERhdGE9e3NpZGViYXIub25Mb2FkRXZlbnREYXRhfVxuICAgICAgICAgICAgICAgIG9uUmVzb2x2ZUhvb2s9e3NpZGViYXIub25SZXNvbHZlSG9va31cbiAgICAgICAgICAgICAgICBlbmNyeXB0aW9uS2V5PXtzaWRlYmFyLmVuY3J5cHRpb25LZXl9XG4gICAgICAgICAgICAgICAgb25EZWNyeXB0PXtzaWRlYmFyLm9uRGVjcnlwdH1cbiAgICAgICAgICAgICAgICBpc0RlY3J5cHRpbmc9e3NpZGViYXIuaXNEZWNyeXB0aW5nfVxuICAgICAgICAgICAgICAgIHNlbGVjdGVkU3Bhbj17c2VsZWN0ZWRTcGFufVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgPC9FcnJvckJvdW5kYXJ5PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2FzaWRlPlxuICAgICAgKSA6IG51bGx9XG5cbiAgICAgIDxUcmFjZVNob3J0Y3V0SGVscGVyXG4gICAgICAgIGhhc011bHRpcGxlU3BhbnM9e3RyYWNlLnNwYW5zLmxlbmd0aCA+IDF9XG4gICAgICAgIHJlZHVjZWRNb3Rpb249e3JlZHVjZWRNb3Rpb259XG4gICAgICAvPlxuICAgIDwvZGl2PlxuICApO1xufVxuIl19
462
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhY2Utdmlld2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvbmV3LXRyYWNlLXZpZXdlci90cmFjZS12aWV3ZXIudHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVksQ0FBQzs7QUFFYixPQUFPLEVBQUUsYUFBYSxFQUFFLGlCQUFpQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDOUUsT0FBTyxFQUNMLFdBQVcsRUFDWCxTQUFTLEVBQ1QsU0FBUyxFQUNULE1BQU0sRUFDTixDQUFDLEVBQ0QsTUFBTSxFQUNOLE9BQU8sR0FDUixNQUFNLGNBQWMsQ0FBQztBQUN0QixPQUFPLEVBRUwsV0FBVyxFQUNYLGdCQUFnQixFQUNoQixTQUFTLEVBQ1QsT0FBTyxFQUNQLE1BQU0sRUFDTixRQUFRLEdBQ1QsTUFBTSxPQUFPLENBQUM7QUFDZixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUMxRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNsRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDbEQsT0FBTyxFQUNMLGlCQUFpQixHQUVsQixNQUFNLGdDQUFnQyxDQUFDO0FBQ3hDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNqRSxPQUFPLEVBQUUsY0FBYyxFQUFFLGNBQWMsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzdFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ2hDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDeEMsT0FBTyxFQUNMLE9BQU8sRUFDUCxjQUFjLEVBQ2QsZUFBZSxF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QUFHLEVBQ2hCLGFBQWEsRUFBRSxPQUFPLENBQUMsYUFBYSxFQUNwQyxVQUFVLEVBQUUsT0FBTyxDQUFDLFVBQVUsRUFDOUIsZUFBZSxFQUFFLE9BQU8sQ0FBQyxlQUFlLEVBQ3hDLGFBQWEsRUFBRSxPQUFPLENBQUMsYUFBYSxFQUNwQyxlQUFlLEVBQUUsT0FBTyxDQUFDLGVBQWUsRUFDeEMsYUFBYSxFQUFFLE9BQU8sQ0FBQyxhQUFhLEVBQ3BDLGFBQWEsRUFBRSxPQUFPLENBQUMsYUFBYSxFQUNwQyxTQUFTLEVBQUUsT0FBTyxDQUFDLFNBQVMsRUFDNUIsWUFBWSxFQUFFLE9BQU8sQ0FBQyxZQUFZLEVBQ2xDLFlBQVksRUFBRSxZQUFZLEVBQzFCLHFDQUFxQyxFQUNuQyxPQUFPLENBQUMscUNBQXFDLEdBRS9DLEdBQ1ksR0FDWixJQUNBLENBQ1QsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUVSLEtBQUMsbUJBQW1CLElBQ2xCLGdCQUFnQixFQUFFLEtBQUssQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsRUFDeEMsYUFBYSxFQUFFLGFBQWEsR0FDNUIsSUFDRSxDQUNQLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgeyBwYXJzZVN0ZXBOYW1lLCBwYXJzZVdvcmtmbG93TmFtZSB9IGZyb20gJ0B3b3JrZmxvdy91dGlscy9wYXJzZS1uYW1lJztcbmltcG9ydCB7XG4gIENoZXZyb25Eb3duLFxuICBDaGV2cm9uVXAsXG4gIFJvdGF0ZUNjdyxcbiAgU2VhcmNoLFxuICBYLFxuICBab29tSW4sXG4gIFpvb21PdXQsXG59IGZyb20gJ2x1Y2lkZS1yZWFjdCc7XG5pbXBvcnQge1xuICB0eXBlIFJlYWN0Tm9kZSxcbiAgdXNlQ2FsbGJhY2ssXG4gIHVzZURlZmVycmVkVmFsdWUsXG4gIHVzZUVmZmVjdCxcbiAgdXNlTWVtbyxcbiAgdXNlUmVmLFxuICB1c2VTdGF0ZSxcbn0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgdXNlTG9hZE1vcmVPblNjcm9sbCB9IGZyb20gJy4uLy4uL2hvb2tzL3VzZS1sb2FkLW1vcmUtb24tc2Nyb2xsJztcbmltcG9ydCB7IHVzZVJlZHVjZWRNb3Rpb24gfSBmcm9tICcuLi8uLi9ob29rcy91c2UtcmVkdWNlZC1tb3Rpb24nO1xuaW1wb3J0IHsgZmlsdGVyU3BhblJhd0V2ZW50cyB9IGZyb20gJy4uLy4uL2xpYi90cmFjZS1idWlsZGVyJztcbmltcG9ydCB7IEVycm9yQm91bmRhcnkgfSBmcm9tICcuLi9lcnJvci1ib3VuZGFyeSc7XG5pbXBvcnQge1xuICBFbnRpdHlEZXRhaWxQYW5lbCxcbiAgdHlwZSBTZWxlY3RlZFNwYW5JbmZvLFxufSBmcm9tICcuLi9zaWRlYmFyL2VudGl0eS1kZXRhaWwtcGFuZWwnO1xuaW1wb3J0IHsgdXNlU2lkZWJhckRhdGEgfSBmcm9tICcuLi9zaWRlYmFyL3NpZGViYXItZGF0YS1jb250ZXh0JztcbmltcG9ydCB7IGZvcm1hdER1cmF0aW9uLCBnZXRIaWdoUmVzSW5NcyB9IGZyb20gJy4uL3RyYWNlLXZpZXdlci91dGlsL3RpbWluZyc7XG5pbXBvcnQgeyBJY29uQnV0dG9uIH0gZnJvbSAnLi4vdWkvaWNvbi1idXR0b24nO1xuaW1wb3J0IHsgS2JkIH0gZnJvbSAnLi4vdWkva2JkJztcbmltcG9ydCB7IFNwaW5uZXIgfSBmcm9tICcuLi91aS9zcGlubmVyJztcbmltcG9ydCB7XG4gIFRvb2x0aXAsXG4gIFRvb2x0aXBDb250ZW50LFxuICBUb29sdGlwUHJvdmlkZXIsXG4gIFRvb2x0aXBUcmlnZ2VyLFxufSBmcm9tICcuLi91aS90b29sdGlwJztcbmltcG9ydCBFdmVudExpc3QgZnJvbSAnLi9jb21wb25lbnRzL2V2ZW50LWxpc3QnO1xuaW1wb3J0IHsgU3BsaXRQYW5lIH0gZnJvbSAnLi9jb21wb25lbnRzL3NwbGl0LXBhbmUnO1xuaW1wb3J0IHtcbiAgVElNRUxJTkVfUEFERElOR19QWCxcbiAgVGltZWxpbmUsXG4gIFRpbWVsaW5lSGVhZGVyLFxufSBmcm9tICcuL2NvbXBvbmVudHMvdGltZWxpbmUnO1xuaW1wb3J0IHsgVHJhY2VTaG9ydGN1dEhlbHBlciB9IGZyb20gJy4vY29tcG9uZW50cy90cmFjZS1zaG9ydGN1dC1oZWxwZXInO1xuaW1wb3J0IHsgUk9XX0hFSUdIVF9QWCwgc2Nyb2xsUm93SW50b1ZpZXcgfSBmcm9tICcuL2NvbXBvbmVudHMvdXNlLXJvdy13aW5kb3cnO1xuaW1wb3J0IHsgQWN0aXZlU3BhblByb3ZpZGVyLCB1c2VBY3RpdmVTcGFuIH0gZnJvbSAnLi9jb250ZXh0JztcbmltcG9ydCB7IHNlYXJjaFNwYW5zIH0gZnJvbSAnLi9zZWFyY2gnO1xuaW1wb3J0IHR5cGUgeyBUcmFjZVdpdGhNZXRhIH0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQgeyBjb21wdXRlUm9vdEJvdW5kcywgY29tcHV0ZVRpbWVNYXJrZXJzIH0gZnJvbSAnLi91dGlscyc7XG5cbmludGVyZmFjZSBOZXdUcmFjZVZpZXdlclByb3BzIHtcbiAgdHJhY2U6IFRyYWNlV2l0aE1ldGE7XG4gIG9uTG9hZE1vcmU/OiAoKSA9PiB2b2lkIHwgUHJvbWlzZTx2b2lkPjtcbiAgaGFzTW9yZT86IGJvb2xlYW47XG4gIGlzTG9hZGluZ01vcmU/OiBib29sZWFuO1xufVxuXG5jb25zdCBNSU5fVklFV1BPUlRfTVMgPSAwLjAwMTtcblxuY29uc3QgWk9PTV9ERUJPVU5DRV9NUyA9IDE1MDtcblxuaW50ZXJmYWNlIFZpZXdwb3J0IHtcbiAgc3RhcnQ6IG51bWJlcjtcbiAgZW5kOiBudW1iZXI7XG59XG5cbmZ1bmN0aW9uIHVzZUFuaW1hdGVkVmlld3BvcnQoaW5pdGlhbDogVmlld3BvcnQpIHtcbiAgY29uc3QgW3ZpZXdwb3J0LCBzZXRWaWV3cG9ydFN0YXRlXSA9IHVzZVN0YXRlPFZpZXdwb3J0Pihpbml0aWFsKTtcbiAgY29uc3QgYW5pbVJlZiA9IHVzZVJlZjx7XG4gICAgcmFmOiBudW1iZXI7XG4gICAgZnJvbTogVmlld3BvcnQ7XG4gICAgdG86IFZpZXdwb3J0O1xuICAgIHN0YXJ0OiBudW1iZXI7XG4gIH0gfCBudWxsPihudWxsKTtcbiAgY29uc3QgY3VycmVudFJlZiA9IHVzZVJlZihpbml0aWFsKTtcbiAgY3VycmVudFJlZi5jdXJyZW50ID0gdmlld3BvcnQ7XG4gIGNvbnN0IHJlZHVjZWRNb3Rpb24gPSB1c2VSZWR1Y2VkTW90aW9uKCk7XG5cbiAgY29uc3QgY2FuY2VsID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGlmIChhbmltUmVmLmN1cnJlbnQpIHtcbiAgICAgIGNhbmNlbEFuaW1hdGlvbkZyYW1lKGFuaW1SZWYuY3VycmVudC5yYWYpO1xuICAgICAgYW5pbVJlZi5jdXJyZW50ID0gbnVsbDtcbiAgICB9XG4gIH0sIFtdKTtcblxuICBjb25zdCBhbmltYXRlVG8gPSB1c2VDYWxsYmFjayhcbiAgICAodGFyZ2V0OiBWaWV3cG9ydCkgPT4ge1xuICAgICAgY2FuY2VsKCk7XG5cbiAgICAgIGlmIChyZWR1Y2VkTW90aW9uKSB7XG4gICAgICAgIGN1cnJlbnRSZWYuY3VycmVudCA9IHRhcmdldDtcbiAgICAgICAgc2V0Vmlld3BvcnRTdGF0ZSh0YXJnZXQpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGZyb20gPSBjdXJyZW50UmVmLmN1cnJlbnQ7XG4gICAgICBjb25zdCBhbmltID0geyByYWY6IDAsIGZyb20sIHRvOiB0YXJnZXQsIHN0YXJ0OiBwZXJmb3JtYW5jZS5ub3coKSB9O1xuXG4gICAgICBjb25zdCB0aWNrID0gKCkgPT4ge1xuICAgICAgICBjb25zdCB0ID0gTWF0aC5taW4oKHBlcmZvcm1hbmNlLm5vdygpIC0gYW5pbS5zdGFydCkgLyAxNTAsIDEpO1xuICAgICAgICBjb25zdCBlID0gMSAtICgxIC0gdCkgKiAoMSAtIHQpO1xuICAgICAgICBzZXRWaWV3cG9ydFN0YXRlKHtcbiAgICAgICAgICBzdGFydDogYW5pbS5mcm9tLnN0YXJ0ICsgKGFuaW0udG8uc3RhcnQgLSBhbmltLmZyb20uc3RhcnQpICogZSxcbiAgICAgICAgICBlbmQ6IGFuaW0uZnJvbS5lbmQgKyAoYW5pbS50by5lbmQgLSBhbmltLmZyb20uZW5kKSAqIGUsXG4gICAgICAgIH0pO1xuICAgICAgICBpZiAodCA8IDEpIGFuaW0ucmFmID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRpY2spO1xuICAgICAgICBlbHNlIGFuaW1SZWYuY3VycmVudCA9IG51bGw7XG4gICAgICB9O1xuXG4gICAgICBhbmltUmVmLmN1cnJlbnQgPSBhbmltO1xuICAgICAgYW5pbS5yYWYgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGljayk7XG4gICAgfSxcbiAgICBbY2FuY2VsLCByZWR1Y2VkTW90aW9uXVxuICApO1xuXG4gIGNvbnN0IHNldFZpZXdwb3J0ID0gdXNlQ2FsbGJhY2soXG4gICAgKHVwZGF0ZTogVmlld3BvcnQgfCAoKHByZXY6IFZpZXdwb3J0KSA9PiBWaWV3cG9ydCkpID0+IHtcbiAgICAgIGNhbmNlbCgpO1xuICAgICAgaWYgKHR5cGVvZiB1cGRhdGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgc2V0Vmlld3BvcnRTdGF0ZSgocHJldikgPT4ge1xuICAgICAgICAgIGNvbnN0IG5leHQgPSB1cGRhdGUocHJldik7XG4gICAgICAgICAgY3VycmVudFJlZi5jdXJyZW50ID0gbmV4dDtcbiAgICAgICAgICByZXR1cm4gbmV4dDtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjdXJyZW50UmVmLmN1cnJlbnQgPSB1cGRhdGU7XG4gICAgICAgIHNldFZpZXdwb3J0U3RhdGUodXBkYXRlKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIFtjYW5jZWxdXG4gICk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IGNhbmNlbCwgW2NhbmNlbF0pO1xuXG4gIHJldHVybiB7IHZpZXdwb3J0LCBzZXRWaWV3cG9ydCwgYW5pbWF0ZVRvIH07XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gSG9vazogYnJpZGdlIEFjdGl2ZVNwYW5Db250ZXh0ICsgU2lkZWJhckRhdGFDb250ZXh0IOKGkiBTZWxlY3RlZFNwYW5JbmZvXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuZnVuY3Rpb24gdXNlU2VsZWN0ZWRTcGFuSW5mbygpOiBTZWxlY3RlZFNwYW5JbmZvIHwgbnVsbCB7XG4gIGNvbnN0IHsgYWN0aXZlU3BhbiB9ID0gdXNlQWN0aXZlU3BhbigpO1xuICBjb25zdCBzaWRlYmFyID0gdXNlU2lkZWJhckRhdGEoKTtcblxuICByZXR1cm4gdXNlTWVtbygoKSA9PiB7XG4gICAgaWYgKCFhY3RpdmVTcGFuKSByZXR1cm4gbnVsbDtcblxuICAgIGNvbnN0IHJlc291cmNlID0gYWN0aXZlU3Bhbi5hdHRyaWJ1dGVzPy5yZXNvdXJjZSBhcyBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgY29uc3QgcmF3RXZlbnRzID0gZmlsdGVyU3BhblJhd0V2ZW50cyhcbiAgICAgIHNpZGViYXIuZXZlbnRzLFxuICAgICAgcmVzb3VyY2UsXG4gICAgICBhY3RpdmVTcGFuLnNwYW5JZFxuICAgICk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgZGF0YTogYWN0aXZlU3Bhbi5hdHRyaWJ1dGVzPy5kYXRhLFxuICAgICAgcmVzb3VyY2UsXG4gICAgICBzcGFuSWQ6IGFjdGl2ZVNwYW4uc3BhbklkLFxuICAgICAgcmF3RXZlbnRzLFxuICAgIH07XG4gIH0sIFthY3RpdmVTcGFuLCBzaWRlYmFyXSk7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gUm9vdCBjb21wb25lbnRcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5leHBvcnQgZnVuY3Rpb24gTmV3VHJhY2VWaWV3ZXIoe1xuICB0cmFjZSxcbiAgb25Mb2FkTW9yZSxcbiAgaGFzTW9yZSxcbiAgaXNMb2FkaW5nTW9yZSxcbn06IE5ld1RyYWNlVmlld2VyUHJvcHMpOiBSZWFjdE5vZGUge1xuICByZXR1cm4gKFxuICAgIDxUb29sdGlwUHJvdmlkZXIgZGVsYXlEdXJhdGlvbj17MzAwfT5cbiAgICAgIDxBY3RpdmVTcGFuUHJvdmlkZXIgc3BhbnM9e3RyYWNlLnNwYW5zfT5cbiAgICAgICAgPE5ld1RyYWNlVmlld2VyQ29udGVudFxuICAgICAgICAgIHRyYWNlPXt0cmFjZX1cbiAgICAgICAgICBvbkxvYWRNb3JlPXtvbkxvYWRNb3JlfVxuICAgICAgICAgIGhhc01vcmU9e2hhc01vcmV9XG4gICAgICAgICAgaXNMb2FkaW5nTW9yZT17aXNMb2FkaW5nTW9yZX1cbiAgICAgICAgLz5cbiAgICAgIDwvQWN0aXZlU3BhblByb3ZpZGVyPlxuICAgIDwvVG9vbHRpcFByb3ZpZGVyPlxuICApO1xufVxuXG5mdW5jdGlvbiBOZXdUcmFjZVZpZXdlckNvbnRlbnQoe1xuICB0cmFjZSxcbiAgb25Mb2FkTW9yZSxcbiAgaGFzTW9yZSxcbiAgaXNMb2FkaW5nTW9yZSxcbn06IE5ld1RyYWNlVmlld2VyUHJvcHMpOiBSZWFjdE5vZGUge1xuICBjb25zdCB7IGFjdGl2ZVNwYW4sIGFjdGl2ZVNwYW5JZCwgc2V0QWN0aXZlU3BhbiwgY2xlYXJBY3RpdmVTcGFuIH0gPVxuICAgIHVzZUFjdGl2ZVNwYW4oKTtcblxuICBjb25zdCBzaWRlYmFyID0gdXNlU2lkZWJhckRhdGEoKTtcbiAgY29uc3Qgc2VsZWN0ZWRTcGFuID0gdXNlU2VsZWN0ZWRTcGFuSW5mbygpO1xuICBjb25zdCByZWR1Y2VkTW90aW9uID0gdXNlUmVkdWNlZE1vdGlvbigpO1xuXG4gIGNvbnN0IFtzZWFyY2hRdWVyeSwgc2V0U2VhcmNoUXVlcnldID0gdXNlU3RhdGUoJycpO1xuICBjb25zdCBkZWZlcnJlZFNlYXJjaFF1ZXJ5ID0gdXNlRGVmZXJyZWRWYWx1ZShzZWFyY2hRdWVyeSk7XG5cbiAgY29uc3Qgc2VhcmNoUmVzdWx0ID0gdXNlTWVtbyhcbiAgICAoKSA9PiBzZWFyY2hTcGFucyh0cmFjZS5zcGFucywgZGVmZXJyZWRTZWFyY2hRdWVyeSksXG4gICAgW3RyYWNlLnNwYW5zLCBkZWZlcnJlZFNlYXJjaFF1ZXJ5XVxuICApO1xuXG4gIGNvbnN0IHJvb3QgPSB1c2VNZW1vKCgpID0+IGNvbXB1dGVSb290Qm91bmRzKHRyYWNlLnNwYW5zKSwgW3RyYWNlLnNwYW5zXSk7XG5cbiAgY29uc3Qgc2Nyb2xsQ29udGFpbmVyUmVmID0gdXNlUmVmPEhUTUxEaXZFbGVtZW50PihudWxsKTtcbiAgY29uc3QgbG9hZE1vcmUgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgdm9pZCBvbkxvYWRNb3JlPy4oKTtcbiAgfSwgW29uTG9hZE1vcmVdKTtcbiAgY29uc3QgbG9hZE1vcmVTZW50aW5lbFJlZiA9IHVzZUxvYWRNb3JlT25TY3JvbGwobG9hZE1vcmUsIHtcbiAgICBoYXNNb3JlOiBCb29sZWFuKG9uTG9hZE1vcmUgJiYgaGFzTW9yZSksXG4gICAgaXNMb2FkaW5nTW9yZTogQm9vbGVhbihpc0xvYWRpbmdNb3JlKSxcbiAgICByb290UmVmOiBzY3JvbGxDb250YWluZXJSZWYsXG4gIH0pO1xuXG4gIGNvbnN0IHsgdmlld3BvcnQsIHNldFZpZXdwb3J0LCBhbmltYXRlVG8gfSA9IHVzZUFuaW1hdGVkVmlld3BvcnQoe1xuICAgIHN0YXJ0OiByb290LnN0YXJ0VGltZSxcbiAgICBlbmQ6IHJvb3Quc3RhcnRUaW1lICsgcm9vdC5kdXJhdGlvbixcbiAgfSk7XG5cbiAgY29uc3QgcHJldlJvb3RSZWYgPSB1c2VSZWY8Vmlld3BvcnQ+KHtcbiAgICBzdGFydDogcm9vdC5zdGFydFRpbWUsXG4gICAgZW5kOiByb290LnN0YXJ0VGltZSArIHJvb3QuZHVyYXRpb24sXG4gIH0pO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgcHJldlJvb3QgPSBwcmV2Um9vdFJlZi5jdXJyZW50O1xuICAgIGNvbnN0IG5ld1N0YXJ0ID0gcm9vdC5zdGFydFRpbWU7XG4gICAgY29uc3QgbmV3RW5kID0gcm9vdC5zdGFydFRpbWUgKyByb290LmR1cmF0aW9uO1xuXG4gICAgc2V0Vmlld3BvcnQoKHByZXYpID0+IHtcbiAgICAgIGNvbnN0IHdhc0F0RnVsbEV4dGVudCA9XG4gICAgICAgIE1hdGguYWJzKHByZXYuc3RhcnQgLSBwcmV2Um9vdC5zdGFydCkgPCAwLjAxICYmXG4gICAgICAgIE1hdGguYWJzKHByZXYuZW5kIC0gcHJldlJvb3QuZW5kKSA8IDAuMDE7XG5cbiAgICAgIGlmICh3YXNBdEZ1bGxFeHRlbnQpIHtcbiAgICAgICAgcmV0dXJuIHsgc3RhcnQ6IG5ld1N0YXJ0LCBlbmQ6IG5ld0VuZCB9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHByZXY7XG4gICAgfSk7XG5cbiAgICBwcmV2Um9vdFJlZi5jdXJyZW50ID0geyBzdGFydDogbmV3U3RhcnQsIGVuZDogbmV3RW5kIH07XG4gIH0sIFtyb290LnN0YXJ0VGltZSwgcm9vdC5kdXJhdGlvbiwgc2V0Vmlld3BvcnRdKTtcblxuICBjb25zdCB2aWV3RHVyYXRpb24gPSB2aWV3cG9ydC5lbmQgLSB2aWV3cG9ydC5zdGFydDtcblxuICAvLyBLZWVwIGEgcmVmIHRvIHRoZSBsaXZlIHZpZXdwb3J0IHNvIHRoZSByZXZlYWwgY2FsbGJhY2sgY2FuIHJlYWQgdGhlIGN1cnJlbnRcbiAgLy8gem9vbSB3aXRob3V0IGJlaW5nIHJlY3JlYXRlZCBvbiBldmVyeSBwYW4gKHdoaWNoIHdvdWxkIGJ1c3QgVGltZWxpbmVCYXInc1xuICAvLyBtZW1vIGFuZCByZS1yZW5kZXIgZXZlcnkgcm93IGVhY2ggYW5pbWF0aW9uIGZyYW1lKS5cbiAgY29uc3Qgdmlld3BvcnRSZWYgPSB1c2VSZWYodmlld3BvcnQpO1xuICB2aWV3cG9ydFJlZi5jdXJyZW50ID0gdmlld3BvcnQ7XG5cbiAgY29uc3QgdGltZU1hcmtlcnMgPSB1c2VNZW1vKFxuICAgICgpID0+IGNvbXB1dGVUaW1lTWFya2Vycyh2aWV3RHVyYXRpb24sIHZpZXdwb3J0LnN0YXJ0IC0gcm9vdC5zdGFydFRpbWUpLFxuICAgIFt2aWV3RHVyYXRpb24sIHZpZXdwb3J0LnN0YXJ0LCByb290LnN0YXJ0VGltZV1cbiAgKTtcblxuICBjb25zdCByZXNldFpvb20gPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgYW5pbWF0ZVRvKHsgc3RhcnQ6IHJvb3Quc3RhcnRUaW1lLCBlbmQ6IHJvb3Quc3RhcnRUaW1lICsgcm9vdC5kdXJhdGlvbiB9KTtcbiAgfSwgW2FuaW1hdGVUbywgcm9vdC5zdGFydFRpbWUsIHJvb3QuZHVyYXRpb25dKTtcblxuICAvLyBQYW4gKGtlZXBpbmcgdGhlIGN1cnJlbnQgem9vbSkgc28gYHRpbWVNc2AgaXMgY2VudGVyZWQgaW4gdmlldyDigJQgdXNlZCBieSB0aGVcbiAgLy8gb2ZmLXNjcmVlbiBtYXJrZXIgaW5kaWNhdG9ycyB0byBzY3JvbGwgdGhlaXIgbWFya2VyIGludG8gdmlldy5cbiAgY29uc3QgaGFuZGxlUmV2ZWFsVGltZSA9IHVzZUNhbGxiYWNrKFxuICAgICh0aW1lTXM6IG51bWJlcikgPT4ge1xuICAgICAgY29uc3Qgcm9vdFMgPSByb290LnN0YXJ0VGltZTtcbiAgICAgIGNvbnN0IHJvb3RFID0gcm9vdC5zdGFydFRpbWUgKyByb290LmR1cmF0aW9uO1xuICAgICAgY29uc3QgeyBzdGFydCwgZW5kIH0gPSB2aWV3cG9ydFJlZi5jdXJyZW50O1xuICAgICAgY29uc3QgZHVyYXRpb24gPSBlbmQgLSBzdGFydDtcbiAgICAgIGxldCBuZXdTdGFydCA9IHRpbWVNcyAtIGR1cmF0aW9uIC8gMjtcbiAgICAgIGxldCBuZXdFbmQgPSB0aW1lTXMgKyBkdXJhdGlvbiAvIDI7XG4gICAgICBpZiAobmV3U3RhcnQgPCByb290Uykge1xuICAgICAgICBuZXdTdGFydCA9IHJvb3RTO1xuICAgICAgICBuZXdFbmQgPSByb290UyArIGR1cmF0aW9uO1xuICAgICAgfVxuICAgICAgaWYgKG5ld0VuZCA+IHJvb3RFKSB7XG4gICAgICAgIG5ld0VuZCA9IHJvb3RFO1xuICAgICAgICBuZXdTdGFydCA9IE1hdGgubWF4KHJvb3RTLCByb290RSAtIGR1cmF0aW9uKTtcbiAgICAgIH1cbiAgICAgIGFuaW1hdGVUbyh7IHN0YXJ0OiBuZXdTdGFydCwgZW5kOiBuZXdFbmQgfSk7XG4gICAgfSxcbiAgICBbYW5pbWF0ZVRvLCByb290LnN0YXJ0VGltZSwgcm9vdC5kdXJhdGlvbl1cbiAgKTtcblxuICBjb25zdCBaT09NX0ZBQ1RPUiA9IDAuNTtcblxuICBjb25zdCB6b29tQnkgPSB1c2VDYWxsYmFjayhcbiAgICAoZmFjdG9yOiBudW1iZXIpID0+IHtcbiAgICAgIGNvbnN0IHJvb3RTID0gcm9vdC5zdGFydFRpbWU7XG4gICAgICBjb25zdCByb290RSA9IHJvb3Quc3RhcnRUaW1lICsgcm9vdC5kdXJhdGlvbjtcbiAgICAgIGNvbnN0IHJvb3REID0gcm9vdC5kdXJhdGlvbjtcblxuICAgICAgc2V0Vmlld3BvcnQoKHByZXYpID0+IHtcbiAgICAgICAgY29uc3QgcHJldkR1cmF0aW9uID0gcHJldi5lbmQgLSBwcmV2LnN0YXJ0O1xuICAgICAgICBjb25zdCBjZW50ZXIgPSAocHJldi5zdGFydCArIHByZXYuZW5kKSAvIDI7XG4gICAgICAgIGNvbnN0IG5ld0R1cmF0aW9uID0gTWF0aC5tYXgoXG4gICAgICAgICAgTUlOX1ZJRVdQT1JUX01TLFxuICAgICAgICAgIE1hdGgubWluKHJvb3RELCBwcmV2RHVyYXRpb24gKiBmYWN0b3IpXG4gICAgICAgICk7XG4gICAgICAgIGxldCBuZXdTdGFydCA9IGNlbnRlciAtIG5ld0R1cmF0aW9uIC8gMjtcbiAgICAgICAgbGV0IG5ld0VuZCA9IGNlbnRlciArIG5ld0R1cmF0aW9uIC8gMjtcblxuICAgICAgICBpZiAobmV3U3RhcnQgPCByb290Uykge1xuICAgICAgICAgIG5ld1N0YXJ0ID0gcm9vdFM7XG4gICAgICAgICAgbmV3RW5kID0gcm9vdFMgKyBuZXdEdXJhdGlvbjtcbiAgICAgICAgfVxuICAgICAgICBpZiAobmV3RW5kID4gcm9vdEUpIHtcbiAgICAgICAgICBuZXdFbmQgPSByb290RTtcbiAgICAgICAgICBuZXdTdGFydCA9IE1hdGgubWF4KHJvb3RTLCByb290RSAtIG5ld0R1cmF0aW9uKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7IHN0YXJ0OiBuZXdTdGFydCwgZW5kOiBuZXdFbmQgfTtcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgW3NldFZpZXdwb3J0LCByb290LnN0YXJ0VGltZSwgcm9vdC5kdXJhdGlvbl1cbiAgKTtcblxuICBjb25zdCB6b29tSW4gPSB1c2VDYWxsYmFjaygoKSA9PiB6b29tQnkoWk9PTV9GQUNUT1IpLCBbem9vbUJ5XSk7XG4gIGNvbnN0IHpvb21PdXQgPSB1c2VDYWxsYmFjaygoKSA9PiB6b29tQnkoMSAvIFpPT01fRkFDVE9SKSwgW3pvb21CeV0pO1xuXG4gIGNvbnN0IGZvY3VzVmlld3BvcnRPblNwYW4gPSB1c2VDYWxsYmFjayhcbiAgICAoc3BhbklkOiBzdHJpbmcpID0+IHtcbiAgICAgIGNvbnN0IHNwYW4gPSB0cmFjZS5zcGFucy5maW5kKChzKSA9PiBzLnNwYW5JZCA9PT0gc3BhbklkKTtcbiAgICAgIGlmICghc3BhbikgcmV0dXJuO1xuXG4gICAgICBjb25zdCBzcGFuU3RhcnQgPSBnZXRIaWdoUmVzSW5NcyhzcGFuLnN0YXJ0VGltZSk7XG4gICAgICBjb25zdCBzcGFuRW5kID0gZ2V0SGlnaFJlc0luTXMoc3Bhbi5lbmRUaW1lKTtcbiAgICAgIGNvbnN0IHNwYW5EdXJhdGlvbiA9IHNwYW5FbmQgLSBzcGFuU3RhcnQ7XG5cbiAgICAgIGNvbnN0IHJvb3RTID0gcm9vdC5zdGFydFRpbWU7XG4gICAgICBjb25zdCByb290RSA9IHJvb3Quc3RhcnRUaW1lICsgcm9vdC5kdXJhdGlvbjtcbiAgICAgIGNvbnN0IHJvb3REID0gcm9vdC5kdXJhdGlvbjtcblxuICAgICAgaWYgKHNwYW5EdXJhdGlvbiA+IHJvb3REICogMC44KSB7XG4gICAgICAgIGFuaW1hdGVUbyh7IHN0YXJ0OiByb290UywgZW5kOiByb290RSB9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBwYWRkaW5nID0gTWF0aC5tYXgoc3BhbkR1cmF0aW9uICogMC4yLCBNSU5fVklFV1BPUlRfTVMgLyAyKTtcbiAgICAgIGxldCBuZXdTdGFydCA9IHNwYW5TdGFydCAtIHBhZGRpbmc7XG4gICAgICBsZXQgbmV3RW5kID0gc3BhbkVuZCArIHBhZGRpbmc7XG5cbiAgICAgIGlmIChuZXdFbmQgLSBuZXdTdGFydCA8IE1JTl9WSUVXUE9SVF9NUykge1xuICAgICAgICBjb25zdCBjZW50ZXIgPSAoc3BhblN0YXJ0ICsgc3BhbkVuZCkgLyAyO1xuICAgICAgICBuZXdTdGFydCA9IGNlbnRlciAtIE1JTl9WSUVXUE9SVF9NUyAvIDI7XG4gICAgICAgIG5ld0VuZCA9IGNlbnRlciArIE1JTl9WSUVXUE9SVF9NUyAvIDI7XG4gICAgICB9XG5cbiAgICAgIGlmIChuZXdTdGFydCA8IHJvb3RTKSB7XG4gICAgICAgIGNvbnN0IGR1cmF0aW9uID0gbmV3RW5kIC0gbmV3U3RhcnQ7XG4gICAgICAgIG5ld1N0YXJ0ID0gcm9vdFM7XG4gICAgICAgIG5ld0VuZCA9IE1hdGgubWluKHJvb3RFLCByb290UyArIGR1cmF0aW9uKTtcbiAgICAgIH1cbiAgICAgIGlmIChuZXdFbmQgPiByb290RSkge1xuICAgICAgICBjb25zdCBkdXJhdGlvbiA9IG5ld0VuZCAtIG5ld1N0YXJ0O1xuICAgICAgICBuZXdFbmQgPSByb290RTtcbiAgICAgICAgbmV3U3RhcnQgPSBNYXRoLm1heChyb290Uywgcm9vdEUgLSBkdXJhdGlvbik7XG4gICAgICB9XG5cbiAgICAgIGFuaW1hdGVUbyh7IHN0YXJ0OiBuZXdTdGFydCwgZW5kOiBuZXdFbmQgfSk7XG4gICAgfSxcbiAgICBbYW5pbWF0ZVRvLCB0cmFjZS5zcGFucywgcm9vdC5zdGFydFRpbWUsIHJvb3QuZHVyYXRpb25dXG4gICk7XG5cbiAgLy8gQnJpbmcgYSByb3cgaW50byB2aWV3IHdoZW4ga2V5Ym9hcmQvYnV0dG9uIG5hdmlnYXRpb24gbGFuZHMgb24gYSBzcGFuIHRoYXRcbiAgLy8gc2l0cyBvdXRzaWRlIHRoZSBzaGFyZWQgc2Nyb2xsIGNvbnRhaW5lcidzIHZpc2libGUgYXJlYS4gVGhlIGxpc3QgaXNcbiAgLy8gd2luZG93ZWQsIHNvIGFuIG9mZi1zY3JlZW4gcm93IGhhcyBubyBET00gbm9kZSB0byBgc2Nyb2xsSW50b1ZpZXdgIOKAlFxuICAvLyBgc2Nyb2xsUm93SW50b1ZpZXdgIGNvbXB1dGVzIHRoZSB0YXJnZXQgb2Zmc2V0IGZyb20gdGhlIHNwYW4ncyBpbmRleC5cbiAgY29uc3Qgc2Nyb2xsU3BhbkludG9WaWV3ID0gdXNlQ2FsbGJhY2soXG4gICAgKHNwYW5JZDogc3RyaW5nKSA9PiB7XG4gICAgICBjb25zdCBpbmRleCA9IHRyYWNlLnNwYW5zLmZpbmRJbmRleCgocykgPT4gcy5zcGFuSWQgPT09IHNwYW5JZCk7XG4gICAgICBpZiAoaW5kZXggPT09IC0xKSByZXR1cm47XG5cbiAgICAgIGNvbnN0IGxpc3QgPVxuICAgICAgICBzY3JvbGxDb250YWluZXJSZWYuY3VycmVudD8ucXVlcnlTZWxlY3RvcjxIVE1MRWxlbWVudD4oJyNldmVudC1saXN0JykgPz9cbiAgICAgICAgbnVsbDtcbiAgICAgIHNjcm9sbFJvd0ludG9WaWV3KGxpc3QsIGluZGV4LCBST1dfSEVJR0hUX1BYLCB7XG4gICAgICAgIGJlaGF2aW9yOiByZWR1Y2VkTW90aW9uID8gJ2F1dG8nIDogJ3Ntb290aCcsXG4gICAgICB9KTtcbiAgICB9LFxuICAgIFt0cmFjZS5zcGFucywgcmVkdWNlZE1vdGlvbl1cbiAgKTtcblxuICBjb25zdCB6b29tVGltZXJSZWYgPSB1c2VSZWY8UmV0dXJuVHlwZTx0eXBlb2Ygc2V0VGltZW91dD4gfCBudWxsPihudWxsKTtcbiAgY29uc3QgY2FuY2VsUGVuZGluZ1pvb20gPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgaWYgKHpvb21UaW1lclJlZi5jdXJyZW50ICE9PSBudWxsKSB7XG4gICAgICBjbGVhclRpbWVvdXQoem9vbVRpbWVyUmVmLmN1cnJlbnQpO1xuICAgICAgem9vbVRpbWVyUmVmLmN1cnJlbnQgPSBudWxsO1xuICAgIH1cbiAgfSwgW10pO1xuICB1c2VFZmZlY3QoKCkgPT4gY2FuY2VsUGVuZGluZ1pvb20sIFtjYW5jZWxQZW5kaW5nWm9vbV0pO1xuXG4gIGNvbnN0IGhhbmRsZUNsZWFyQWN0aXZlU3BhbiA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBjYW5jZWxQZW5kaW5nWm9vbSgpO1xuICAgIGNsZWFyQWN0aXZlU3BhbigpO1xuICB9LCBbY2FuY2VsUGVuZGluZ1pvb20sIGNsZWFyQWN0aXZlU3Bhbl0pO1xuXG4gIGNvbnN0IGhhbmRsZVNlbGVjdFNwYW4gPSB1c2VDYWxsYmFjayhcbiAgICAoc3BhbklkOiBzdHJpbmcpID0+IHtcbiAgICAgIGNhbmNlbFBlbmRpbmdab29tKCk7XG4gICAgICBpZiAoc3BhbklkID09PSBhY3RpdmVTcGFuSWQpIHtcbiAgICAgICAgY2xlYXJBY3RpdmVTcGFuKCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHNldEFjdGl2ZVNwYW4oc3BhbklkKTtcbiAgICAgIGZvY3VzVmlld3BvcnRPblNwYW4oc3BhbklkKTtcbiAgICB9LFxuICAgIFtcbiAgICAgIGNhbmNlbFBlbmRpbmdab29tLFxuICAgICAgYWN0aXZlU3BhbklkLFxuICAgICAgY2xlYXJBY3RpdmVTcGFuLFxuICAgICAgc2V0QWN0aXZlU3BhbixcbiAgICAgIGZvY3VzVmlld3BvcnRPblNwYW4sXG4gICAgXVxuICApO1xuXG4gIGNvbnN0IG5hdmlnYXRlVG9TcGFuID0gdXNlQ2FsbGJhY2soXG4gICAgKHNwYW5JZDogc3RyaW5nKSA9PiB7XG4gICAgICBzZXRBY3RpdmVTcGFuKHNwYW5JZCk7XG4gICAgICBzY3JvbGxTcGFuSW50b1ZpZXcoc3BhbklkKTtcbiAgICAgIGNhbmNlbFBlbmRpbmdab29tKCk7XG4gICAgICB6b29tVGltZXJSZWYuY3VycmVudCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB6b29tVGltZXJSZWYuY3VycmVudCA9IG51bGw7XG4gICAgICAgIGZvY3VzVmlld3BvcnRPblNwYW4oc3BhbklkKTtcbiAgICAgIH0sIFpPT01fREVCT1VOQ0VfTVMpO1xuICAgIH0sXG4gICAgW3NldEFjdGl2ZVNwYW4sIHNjcm9sbFNwYW5JbnRvVmlldywgY2FuY2VsUGVuZGluZ1pvb20sIGZvY3VzVmlld3BvcnRPblNwYW5dXG4gICk7XG5cbiAgY29uc3QgW2FsdEhlbGQsIHNldEFsdEhlbGRdID0gdXNlU3RhdGUoZmFsc2UpO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgaGFuZGxlU2lkZWJhck5hdktleSA9IChlOiBLZXlib2FyZEV2ZW50KTogdm9pZCA9PiB7XG4gICAgICBjb25zdCB0YXJnZXQgPSBlLnRhcmdldCBhcyBIVE1MRWxlbWVudCB8IG51bGw7XG4gICAgICBpZiAoXG4gICAgICAgIHRhcmdldCBpbnN0YW5jZW9mIEhUTUxJbnB1dEVsZW1lbnQgfHxcbiAgICAgICAgdGFyZ2V0IGluc3RhbmNlb2YgSFRNTFRleHRBcmVhRWxlbWVudCB8fFxuICAgICAgICB0YXJnZXQ/LmlzQ29udGVudEVkaXRhYmxlXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgdGFyZ2V0SWQgPVxuICAgICAgICBlLmtleSA9PT0gJ2snID8gcHJldlNwYW5JZFJlZi5jdXJyZW50IDogbmV4dFNwYW5JZFJlZi5jdXJyZW50O1xuICAgICAgaWYgKHRhcmdldElkKSB7XG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgbmF2aWdhdGVUb1NwYW5SZWYuY3VycmVudCh0YXJnZXRJZCk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGNvbnN0IG9uS2V5RG93biA9IChlOiBLZXlib2FyZEV2ZW50KTogdm9pZCA9PiB7XG4gICAgICBpZiAoZS5rZXkgPT09ICdFc2NhcGUnKSB7XG4gICAgICAgIGhhbmRsZUNsZWFyQWN0aXZlU3BhbigpO1xuICAgICAgfSBlbHNlIGlmIChlLmtleSA9PT0gJ0FsdCcpIHtcbiAgICAgICAgc2V0QWx0SGVsZCh0cnVlKTtcbiAgICAgIH0gZWxzZSBpZiAoZS5rZXkgPT09ICdqJyB8fCBlLmtleSA9PT0gJ2snKSB7XG4gICAgICAgIGhhbmRsZVNpZGViYXJOYXZLZXkoZSk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBvbktleVVwID0gKGU6IEtleWJvYXJkRXZlbnQpOiB2b2lkID0+IHtcbiAgICAgIGlmIChlLmtleSA9PT0gJ0FsdCcpIHNldEFsdEhlbGQoZmFsc2UpO1xuICAgIH07XG4gICAgY29uc3Qgb25CbHVyID0gKCk6IHZvaWQgPT4gc2V0QWx0SGVsZChmYWxzZSk7XG5cbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIG9uS2V5RG93bik7XG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2tleXVwJywgb25LZXlVcCk7XG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2JsdXInLCBvbkJsdXIpO1xuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIG9uS2V5RG93bik7XG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigna2V5dXAnLCBvbktleVVwKTtcbiAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdibHVyJywgb25CbHVyKTtcbiAgICB9O1xuICB9LCBbaGFuZGxlQ2xlYXJBY3RpdmVTcGFuXSk7XG5cbiAgY29uc3QgdGltZWxpbmVSZWYgPSB1c2VSZWY8SFRNTERpdkVsZW1lbnQ+KG51bGwpO1xuICBjb25zdCBbaG92ZXJGcmFjdGlvbiwgc2V0SG92ZXJGcmFjdGlvbl0gPSB1c2VTdGF0ZTxudW1iZXIgfCBudWxsPihudWxsKTtcblxuICBjb25zdCBob3ZlckluZm8gPSB1c2VNZW1vKCgpID0+IHtcbiAgICBpZiAoaG92ZXJGcmFjdGlvbiA9PSBudWxsKSByZXR1cm4gbnVsbDtcbiAgICBjb25zdCBhYnNUaW1lID0gdmlld3BvcnQuc3RhcnQgKyBob3ZlckZyYWN0aW9uICogdmlld0R1cmF0aW9uO1xuICAgIGNvbnN0IG9mZnNldCA9IGFic1RpbWUgLSByb290LnN0YXJ0VGltZTtcbiAgICByZXR1cm4geyBmcmFjdGlvbjogaG92ZXJGcmFjdGlvbiwgbGFiZWw6IGZvcm1hdER1cmF0aW9uKG9mZnNldCwgdHJ1ZSkgfTtcbiAgfSwgW2hvdmVyRnJhY3Rpb24sIHZpZXdwb3J0LnN0YXJ0LCB2aWV3RHVyYXRpb24sIHJvb3Quc3RhcnRUaW1lXSk7XG5cbiAgY29uc3QgaGFuZGxlVGltZWxpbmVNb3VzZU1vdmUgPSB1c2VDYWxsYmFjayhcbiAgICAoZTogUmVhY3QuTW91c2VFdmVudDxIVE1MRGl2RWxlbWVudD4pID0+IHtcbiAgICAgIGNvbnN0IGVsID0gdGltZWxpbmVSZWYuY3VycmVudDtcbiAgICAgIGlmICghZWwpIHJldHVybjtcbiAgICAgIGNvbnN0IHJlY3QgPSBlbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgIGNvbnN0IGNvbnRlbnRXaWR0aCA9IHJlY3Qud2lkdGggLSBUSU1FTElORV9QQURESU5HX1BYICogMjtcbiAgICAgIGlmIChjb250ZW50V2lkdGggPD0gMCkgcmV0dXJuO1xuICAgICAgY29uc3QgZnJhY3Rpb24gPSBNYXRoLm1heChcbiAgICAgICAgMCxcbiAgICAgICAgTWF0aC5taW4oXG4gICAgICAgICAgMSxcbiAgICAgICAgICAoZS5jbGllbnRYIC0gcmVjdC5sZWZ0IC0gVElNRUxJTkVfUEFERElOR19QWCkgLyBjb250ZW50V2lkdGhcbiAgICAgICAgKVxuICAgICAgKTtcbiAgICAgIHNldEhvdmVyRnJhY3Rpb24oZnJhY3Rpb24pO1xuICAgIH0sXG4gICAgW11cbiAgKTtcblxuICBjb25zdCBoYW5kbGVUaW1lbGluZU1vdXNlTGVhdmUgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgc2V0SG92ZXJGcmFjdGlvbihudWxsKTtcbiAgfSwgW10pO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgZWwgPSB0aW1lbGluZVJlZi5jdXJyZW50O1xuICAgIGlmICghZWwpIHJldHVybjtcblxuICAgIGNvbnN0IHJvb3RTID0gcm9vdC5zdGFydFRpbWU7XG4gICAgY29uc3Qgcm9vdEUgPSByb290LnN0YXJ0VGltZSArIHJvb3QuZHVyYXRpb247XG4gICAgY29uc3Qgcm9vdEQgPSByb290LmR1cmF0aW9uO1xuICAgIGlmIChyb290RCA8PSAwKSByZXR1cm47XG5cbiAgICBjb25zdCBvbldoZWVsID0gKGU6IFdoZWVsRXZlbnQpOiB2b2lkID0+IHtcbiAgICAgIGNvbnN0IGlzWm9vbUdlc3R1cmUgPSBlLmN0cmxLZXkgfHwgZS5tZXRhS2V5O1xuICAgICAgY29uc3QgaGFzRGVsdGFYID0gTWF0aC5hYnMoZS5kZWx0YVgpID4gTWF0aC5hYnMoZS5kZWx0YVkpO1xuXG4gICAgICBpZiAoIWlzWm9vbUdlc3R1cmUgJiYgIWhhc0RlbHRhWCkgcmV0dXJuO1xuICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICBjb25zdCByZWN0ID0gZWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICBjb25zdCBjb250ZW50V2lkdGggPSByZWN0LndpZHRoIC0gVElNRUxJTkVfUEFERElOR19QWCAqIDI7XG4gICAgICBpZiAoY29udGVudFdpZHRoIDw9IDApIHJldHVybjtcblxuICAgICAgaWYgKGlzWm9vbUdlc3R1cmUpIHtcbiAgICAgICAgbGV0IGR5ID0gZS5kZWx0YVk7XG4gICAgICAgIGlmIChlLmRlbHRhTW9kZSA9PT0gMSkgZHkgKj0gMTY7XG5cbiAgICAgICAgY29uc3QgY3Vyc29yRnJhY3Rpb24gPSBNYXRoLm1heChcbiAgICAgICAgICAwLFxuICAgICAgICAgIE1hdGgubWluKFxuICAgICAgICAgICAgMSxcbiAgICAgICAgICAgIChlLmNsaWVudFggLSByZWN0LmxlZnQgLSBUSU1FTElORV9QQURESU5HX1BYKSAvIGNvbnRlbnRXaWR0aFxuICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgaXNNb3VzZVdoZWVsID0gZS5kZWx0YU1vZGUgPT09IDEgfHwgTWF0aC5hYnMoZS5kZWx0YVkpID49IDUwO1xuICAgICAgICBjb25zdCBzY2FsZUZhY3RvciA9IDIgKiogKGR5IC8gKGlzTW91c2VXaGVlbCA/IDIwMCA6IDYwKSk7XG5cbiAgICAgICAgc2V0Vmlld3BvcnQoKHByZXYpID0+IHtcbiAgICAgICAgICBjb25zdCBwcmV2RHVyYXRpb24gPSBwcmV2LmVuZCAtIHByZXYuc3RhcnQ7XG4gICAgICAgICAgY29uc3QgY3Vyc29yVGltZSA9IHByZXYuc3RhcnQgKyBjdXJzb3JGcmFjdGlvbiAqIHByZXZEdXJhdGlvbjtcbiAgICAgICAgICBjb25zdCBuZXdEdXJhdGlvbiA9IE1hdGgubWF4KFxuICAgICAgICAgICAgTUlOX1ZJRVdQT1JUX01TLFxuICAgICAgICAgICAgTWF0aC5taW4ocm9vdEQsIHByZXZEdXJhdGlvbiAqIHNjYWxlRmFjdG9yKVxuICAgICAgICAgICk7XG5cbiAgICAgICAgICBsZXQgbmV3U3RhcnQgPSBjdXJzb3JUaW1lIC0gY3Vyc29yRnJhY3Rpb24gKiBuZXdEdXJhdGlvbjtcbiAgICAgICAgICBsZXQgbmV3RW5kID0gbmV3U3RhcnQgKyBuZXdEdXJhdGlvbjtcblxuICAgICAgICAgIGlmIChuZXdTdGFydCA8IHJvb3RTKSB7XG4gICAgICAgICAgICBuZXdTdGFydCA9IHJvb3RTO1xuICAgICAgICAgICAgbmV3RW5kID0gcm9vdFMgKyBuZXdEdXJhdGlvbjtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKG5ld0VuZCA+IHJvb3RFKSB7XG4gICAgICAgICAgICBuZXdFbmQgPSByb290RTtcbiAgICAgICAgICAgIG5ld1N0YXJ0ID0gTWF0aC5tYXgocm9vdFMsIHJvb3RFIC0gbmV3RHVyYXRpb24pO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiB7IHN0YXJ0OiBuZXdTdGFydCwgZW5kOiBuZXdFbmQgfTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsZXQgZHggPSBlLmRlbHRhWDtcbiAgICAgICAgaWYgKGUuZGVsdGFNb2RlID09PSAxKSBkeCAqPSAxNjtcblxuICAgICAgICBzZXRWaWV3cG9ydCgocHJldikgPT4ge1xuICAgICAgICAgIGNvbnN0IHByZXZEdXJhdGlvbiA9IHByZXYuZW5kIC0gcHJldi5zdGFydDtcbiAgICAgICAgICBjb25zdCBwYW5BbW91bnQgPSAoZHggLyBjb250ZW50V2lkdGgpICogcHJldkR1cmF0aW9uO1xuXG4gICAgICAgICAgbGV0IG5ld1N0YXJ0ID0gcHJldi5zdGFydCArIHBhbkFtb3VudDtcbiAgICAgICAgICBsZXQgbmV3RW5kID0gcHJldi5lbmQgKyBwYW5BbW91bnQ7XG5cbiAgICAgICAgICBpZiAobmV3U3RhcnQgPCByb290Uykge1xuICAgICAgICAgICAgbmV3U3RhcnQgPSByb290UztcbiAgICAgICAgICAgIG5ld0VuZCA9IHJvb3RTICsgcHJldkR1cmF0aW9uO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAobmV3RW5kID4gcm9vdEUpIHtcbiAgICAgICAgICAgIG5ld0VuZCA9IHJvb3RFO1xuICAgICAgICAgICAgbmV3U3RhcnQgPSBNYXRoLm1heChyb290Uywgcm9vdEUgLSBwcmV2RHVyYXRpb24pO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiB7IHN0YXJ0OiBuZXdTdGFydCwgZW5kOiBuZXdFbmQgfTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGVsLmFkZEV2ZW50TGlzdGVuZXIoJ3doZWVsJywgb25XaGVlbCwgeyBwYXNzaXZlOiBmYWxzZSB9KTtcbiAgICByZXR1cm4gKCkgPT4gZWwucmVtb3ZlRXZlbnRMaXN0ZW5lcignd2hlZWwnLCBvbldoZWVsKTtcbiAgfSwgW3Jvb3Quc3RhcnRUaW1lLCByb290LmR1cmF0aW9uLCBzZXRWaWV3cG9ydF0pO1xuXG4gIC8vIERlcml2ZSB0aGUgc2VsZWN0ZWQgc3BhbiBuYW1lIGFuZCBtZXRhZGF0YSBmb3IgdGhlIHBhbmVsIGhlYWRlclxuICBjb25zdCBzZWxlY3RlZFNwYW5OYW1lID0gdXNlTWVtbygoKSA9PiB7XG4gICAgaWYgKCFzZWxlY3RlZFNwYW4/LmRhdGEpIHJldHVybiAnRGV0YWlscyc7XG4gICAgY29uc3QgZGF0YSA9IHNlbGVjdGVkU3Bhbi5kYXRhIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgIGlmIChzZWxlY3RlZFNwYW4ucmVzb3VyY2UgPT09ICdob29rJykge1xuICAgICAgcmV0dXJuIChkYXRhLnRva2VuIGFzIHN0cmluZyB8IHVuZGVmaW5lZCkgPz8gKGRhdGEuaG9va0lkIGFzIHN0cmluZyk7XG4gICAgfVxuXG4gICAgY29uc3Qgc3RlcE5hbWUgPSBkYXRhLnN0ZXBOYW1lIGFzIHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBjb25zdCB3b3JrZmxvd05hbWUgPSBkYXRhLndvcmtmbG93TmFtZSBhcyBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIChcbiAgICAgIChzdGVwTmFtZSA/IHBhcnNlU3RlcE5hbWUoc3RlcE5hbWUpPy5zaG9ydE5hbWUgOiB1bmRlZmluZWQpID8/XG4gICAgICAod29ya2Zsb3dOYW1lID8gcGFyc2VXb3JrZmxvd05hbWUod29ya2Zsb3dOYW1lKT8uc2hvcnROYW1lIDogdW5kZWZpbmVkKSA/P1xuICAgICAgc3RlcE5hbWUgPz9cbiAgICAgIHdvcmtmbG93TmFtZSA/P1xuICAgICAgKGRhdGEuaG9va0lkIGFzIHN0cmluZykgPz9cbiAgICAgICdEZXRhaWxzJ1xuICAgICk7XG4gIH0sIFtzZWxlY3RlZFNwYW4/LmRhdGEsIHNlbGVjdGVkU3Bhbj8ucmVzb3VyY2VdKTtcblxuICBjb25zdCB7IHByZXZTcGFuSWQsIG5leHRTcGFuSWQgfSA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGlmICghYWN0aXZlU3BhbklkKSByZXR1cm4geyBwcmV2U3BhbklkOiBudWxsLCBuZXh0U3BhbklkOiBudWxsIH07XG4gICAgY29uc3QgaSA9IHRyYWNlLnNwYW5zLmZpbmRJbmRleCgocykgPT4gcy5zcGFuSWQgPT09IGFjdGl2ZVNwYW5JZCk7XG4gICAgaWYgKGkgPT09IC0xKSByZXR1cm4geyBwcmV2U3BhbklkOiBudWxsLCBuZXh0U3BhbklkOiBudWxsIH07XG4gICAgcmV0dXJuIHtcbiAgICAgIHByZXZTcGFuSWQ6IHRyYWNlLnNwYW5zW2kgLSAxXT8uc3BhbklkID8/IG51bGwsXG4gICAgICBuZXh0U3BhbklkOiB0cmFjZS5zcGFuc1tpICsgMV0/LnNwYW5JZCA/PyBudWxsLFxuICAgIH07XG4gIH0sIFthY3RpdmVTcGFuSWQsIHRyYWNlLnNwYW5zXSk7XG5cbiAgY29uc3QgaGFuZGxlU2VsZWN0UHJldlNwYW4gPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgaWYgKHByZXZTcGFuSWQpIG5hdmlnYXRlVG9TcGFuKHByZXZTcGFuSWQpO1xuICB9LCBbcHJldlNwYW5JZCwgbmF2aWdhdGVUb1NwYW5dKTtcblxuICBjb25zdCBoYW5kbGVTZWxlY3ROZXh0U3BhbiA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBpZiAobmV4dFNwYW5JZCkgbmF2aWdhdGVUb1NwYW4obmV4dFNwYW5JZCk7XG4gIH0sIFtuZXh0U3BhbklkLCBuYXZpZ2F0ZVRvU3Bhbl0pO1xuXG4gIGNvbnN0IHByZXZTcGFuSWRSZWYgPSB1c2VSZWYocHJldlNwYW5JZCk7XG4gIGNvbnN0IG5leHRTcGFuSWRSZWYgPSB1c2VSZWYobmV4dFNwYW5JZCk7XG4gIGNvbnN0IG5hdmlnYXRlVG9TcGFuUmVmID0gdXNlUmVmKG5hdmlnYXRlVG9TcGFuKTtcbiAgcHJldlNwYW5JZFJlZi5jdXJyZW50ID0gcHJldlNwYW5JZDtcbiAgbmV4dFNwYW5JZFJlZi5jdXJyZW50ID0gbmV4dFNwYW5JZDtcbiAgbmF2aWdhdGVUb1NwYW5SZWYuY3VycmVudCA9IG5hdmlnYXRlVG9TcGFuO1xuXG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgZGF0YS1wYW5lPVwicGFuZS1yb290XCJcbiAgICAgIGRhdGEtaGFzLWRldGFpbD17YWN0aXZlU3BhbiA/ICcnIDogdW5kZWZpbmVkfVxuICAgICAgY2xhc3NOYW1lPVwicmVsYXRpdmUgZ3JpZCB3LWZ1bGwgaC1mdWxsIG1heC1oLWZ1bGwgZ3JpZC1jb2xzLVttaW5tYXgoMTAwcHgsMWZyKV0gZGF0YS1baGFzLWRldGFpbF06Z3JpZC1jb2xzLVttaW5tYXgoMTAwcHgsMWZyKV9jbGFtcCgyODBweCwzNjBweCwxMDAlKV1cIlxuICAgID5cbiAgICAgIDxkaXZcbiAgICAgICAgaWQ9XCJ0cmFjZS1wYXJlbnRcIlxuICAgICAgICBjbGFzc05hbWU9XCJncmlkIGdyaWQtcm93cy1bMWZyXSBoLWZ1bGwgbWluLWgtMCBvdmVyZmxvdy1oaWRkZW4gcmVsYXRpdmUgYmctYmFja2dyb3VuZC0xMDBcIlxuICAgICAgPlxuICAgICAgICA8U3BsaXRQYW5lXG4gICAgICAgICAgc2Nyb2xsQ29udGFpbmVyUmVmPXtzY3JvbGxDb250YWluZXJSZWZ9XG4gICAgICAgICAgc3RhcnRIZWFkZXI9e1xuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJiZy1iYWNrZ3JvdW5kLTEwMCBib3JkZXItYiBib3JkZXItZ3JheS1hbHBoYS00MDAgaC0xMCBtaW4taC0xMCBmbGV4IGl0ZW1zLWNlbnRlciBwbC00IHByLTIgZ2FwLTEuNVwiPlxuICAgICAgICAgICAgICA8U2VhcmNoIGNsYXNzTmFtZT1cInctMy41IGgtMy41IHNocmluay0wIHRleHQtZ3JheS04MDBcIiAvPlxuICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICBpZD1cInRyYWNlLXZpZXdlci1zZWFyY2hcIlxuICAgICAgICAgICAgICAgIG5hbWU9XCJ0cmFjZS12aWV3ZXItc2VhcmNoXCJcbiAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgICAgdmFsdWU9e3NlYXJjaFF1ZXJ5fVxuICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsoZSkgPT4gc2V0U2VhcmNoUXVlcnkoZS50YXJnZXQudmFsdWUpfVxuICAgICAgICAgICAgICAgIG9uS2V5RG93bj17KGUpID0+IHtcbiAgICAgICAgICAgICAgICAgIGlmIChlLmtleSA9PT0gJ0VzY2FwZScgJiYgc2VhcmNoUXVlcnkpIHtcbiAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgICAgICAgICBzZXRTZWFyY2hRdWVyeSgnJyk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlNlYXJjaCBzcGFucy4uLlwiXG4gICAgICAgICAgICAgICAgYXJpYS1sYWJlbD1cIlNlYXJjaCBzcGFuc1wiXG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiZmxleC0xIG1pbi13LTAgYmctdHJhbnNwYXJlbnQgdGV4dC1zbSB0ZXh0LWdyYXktMTAwMCBwbGFjZWhvbGRlcjp0ZXh0LWdyYXktODAwIG91dGxpbmUtbm9uZVwiXG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIHtzZWFyY2hRdWVyeSAmJiAoXG4gICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPVwiQ2xlYXIgc2VhcmNoXCJcbiAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHNldFNlYXJjaFF1ZXJ5KCcnKX1cbiAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cIi1tci0yIGhpZGRlbiBoLWZ1bGwgbWF4LXctZnVsbCBzaHJpbmstMCBjdXJzb3ItcG9pbnRlciBpdGVtcy1jZW50ZXIgcm91bmRlZC1yLW1kIGJvcmRlci0wIGJnLXRyYW5zcGFyZW50IHB4LTIuNSBmb250LWluaGVyaXQgdGV4dC1iYXNlIHRleHQtZ3JheS05MDAgbm8tdW5kZXJsaW5lIHRyYW5zaXRpb24tY29sb3JzIGR1cmF0aW9uLTE1MCBlYXNlLWluIGhvdmVyOnRleHQtZ3JheS0xMDAwIGZvY3VzLXZpc2libGU6LW91dGxpbmUtb2Zmc2V0LTEgZm9jdXMtdmlzaWJsZTpvdXRsaW5lIGZvY3VzLXZpc2libGU6b3V0bGluZS0yIGZvY3VzLXZpc2libGU6b3V0bGluZS1bdmFyKC0tZHMtZm9jdXMtY29sb3IpXSBtaW4tWzk2MXB4XTpmbGV4XCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8S2JkIHZhcmlhbnQ9XCJvdXRsaW5lXCIgc2l6ZT1cInNlYXJjaFwiPlxuICAgICAgICAgICAgICAgICAgICBFc2NcbiAgICAgICAgICAgICAgICAgIDwvS2JkPlxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgfVxuICAgICAgICAgIGVuZEhlYWRlcj17XG4gICAgICAgICAgICA8VGltZWxpbmVIZWFkZXIgbWFya2Vycz17dGltZU1hcmtlcnN9IGhvdmVySW5mbz17aG92ZXJJbmZvfSAvPlxuICAgICAgICAgIH1cbiAgICAgICAgPlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiYmxvY2sgb3ZlcmZsb3ctdmlzaWJsZVwiPlxuICAgICAgICAgICAgPEV2ZW50TGlzdFxuICAgICAgICAgICAgICBzcGFucz17dHJhY2Uuc3BhbnN9XG4gICAgICAgICAgICAgIGFjdGl2ZVNwYW5JZD17YWN0aXZlU3BhbklkfVxuICAgICAgICAgICAgICBzZWFyY2hSZXN1bHQ9e3NlYXJjaFJlc3VsdH1cbiAgICAgICAgICAgICAgb25TZWxlY3RTcGFuPXtoYW5kbGVTZWxlY3RTcGFufVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDxkaXYgcmVmPXtsb2FkTW9yZVNlbnRpbmVsUmVmfSBjbGFzc05hbWU9XCJmbGV4IGp1c3RpZnktY2VudGVyXCI+XG4gICAgICAgICAgICAgIHtpc0xvYWRpbmdNb3JlID8gKFxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgZ2FwLTIgcHktMyB0ZXh0LXNtIHRleHQtZ3JheS04MDBcIj5cbiAgICAgICAgICAgICAgICAgIDxTcGlubmVyIHNpemU9ezE0fSAvPlxuICAgICAgICAgICAgICAgICAgPHNwYW4+TG9hZGluZyBzcGFuc+KApjwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICB7LyogYmlvbWUtaWdub3JlIGxpbnQvYTExeS9ub1N0YXRpY0VsZW1lbnRJbnRlcmFjdGlvbnM6IHRpbWVsaW5lIGhvdmVyIGFuZCB3aGVlbCBnZXN0dXJlcyBhcmUgcG9pbnRlci1vbmx5IGFubm90YXRpb25zICovfVxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIHJlZj17dGltZWxpbmVSZWZ9XG4gICAgICAgICAgICBjbGFzc05hbWU9XCJibG9jayBtaW4taC0wIG92ZXJmbG93LXZpc2libGUgcmVsYXRpdmVcIlxuICAgICAgICAgICAgb25Eb3VibGVDbGljaz17cmVzZXRab29tfVxuICAgICAgICAgICAgb25Nb3VzZU1vdmU9e2hhbmRsZVRpbWVsaW5lTW91c2VNb3ZlfVxuICAgICAgICAgICAgb25Nb3VzZUxlYXZlPXtoYW5kbGVUaW1lbGluZU1vdXNlTGVhdmV9XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPFRpbWVsaW5lXG4gICAgICAgICAgICAgIHNwYW5zPXt0cmFjZS5zcGFuc31cbiAgICAgICAgICAgICAgdmlld1N0YXJ0PXt2aWV3cG9ydC5zdGFydH1cbiAgICAgICAgICAgICAgdmlld0VuZD17dmlld3BvcnQuZW5kfVxuICAgICAgICAgICAgICBtYXJrZXJzPXt0aW1lTWFya2Vyc31cbiAgICAgICAgICAgICAgc2VsZWN0ZWRJZD17YWN0aXZlU3BhbklkfVxuICAgICAgICAgICAgICBzZWFyY2hSZXN1bHQ9e3NlYXJjaFJlc3VsdH1cbiAgICAgICAgICAgICAgb25TZWxlY3Q9e2hhbmRsZVNlbGVjdFNwYW59XG4gICAgICAgICAgICAgIG9uUmV2ZWFsVGltZT17aGFuZGxlUmV2ZWFsVGltZX1cbiAgICAgICAgICAgICAgaG92ZXJGcmFjdGlvbj17aG92ZXJGcmFjdGlvbn1cbiAgICAgICAgICAgICAgYWx0SGVsZD17YWx0SGVsZH1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvU3BsaXRQYW5lPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImFic29sdXRlIHJpZ2h0LTMgYm90dG9tLTMgei1bNV0gZmxleCBpdGVtcy1jZW50ZXIgYm9yZGVyIGJvcmRlci1ncmF5LWFscGhhLTQwMCByb3VuZGVkLW1kIGJnLWJhY2tncm91bmQtMTAwIHNoYWRvdy1zbSBvdmVyZmxvdy1oaWRkZW4gZGl2aWRlLXggZGl2aWRlLWdyYXktYWxwaGEtNDAwXCI+XG4gICAgICAgICAgPEljb25CdXR0b25cbiAgICAgICAgICAgIHZhcmlhbnQ9XCJtdXRlZFwiXG4gICAgICAgICAgICBzaXplPVwic21hbGxcIlxuICAgICAgICAgICAgb25DbGljaz17em9vbU91dH1cbiAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJab29tIG91dFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPFpvb21PdXQgY2xhc3NOYW1lPVwidy00IGgtNFwiIC8+XG4gICAgICAgICAgPC9JY29uQnV0dG9uPlxuICAgICAgICAgIDxJY29uQnV0dG9uXG4gICAgICAgICAgICB2YXJpYW50PVwibXV0ZWRcIlxuICAgICAgICAgICAgc2l6ZT1cInNtYWxsXCJcbiAgICAgICAgICAgIG9uQ2xpY2s9e3Jlc2V0Wm9vbX1cbiAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJSZXNldCB6b29tXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8Um90YXRlQ2N3IGNsYXNzTmFtZT1cInctMy41IGgtMy41XCIgLz5cbiAgICAgICAgICA8L0ljb25CdXR0b24+XG4gICAgICAgICAgPEljb25CdXR0b25cbiAgICAgICAgICAgIHZhcmlhbnQ9XCJtdXRlZFwiXG4gICAgICAgICAgICBzaXplPVwic21hbGxcIlxuICAgICAgICAgICAgb25DbGljaz17em9vbUlufVxuICAgICAgICAgICAgYXJpYS1sYWJlbD1cIlpvb20gaW5cIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxab29tSW4gY2xhc3NOYW1lPVwidy00IGgtNFwiIC8+XG4gICAgICAgICAgPC9JY29uQnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICB7LyogRGV0YWlsIHBhbmVsICovfVxuICAgICAge2FjdGl2ZVNwYW4gPyAoXG4gICAgICAgIDxhc2lkZSBjbGFzc05hbWU9XCJmbGV4IGZsZXgtY29sIGgtZnVsbCBtYXgtaC1mdWxsIGJnLWJhY2tncm91bmQtMTAwIGJvcmRlci1sIGJvcmRlci1ncmF5LWFscGhhLTQwMCBvdmVyZmxvdy1hdXRvXCI+XG4gICAgICAgICAgey8qIFBhbmVsIGhlYWRlciAqL31cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiBnYXAtMiBzaHJpbmstMCBweC00IHB0LTMgcGItM1wiPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwidGV4dC1sYWJlbC0xNCBmb250LW1lZGl1bSB0ZXh0LWdyYXktMTAwMCB0cnVuY2F0ZSBibG9ja1wiPlxuICAgICAgICAgICAgICB7c2VsZWN0ZWRTcGFuTmFtZX1cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTAuNSBzaHJpbmstMFwiPlxuICAgICAgICAgICAgICA8VG9vbHRpcD5cbiAgICAgICAgICAgICAgICA8VG9vbHRpcFRyaWdnZXIgYXNDaGlsZD5cbiAgICAgICAgICAgICAgICAgIDxJY29uQnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJOYXZpZ2F0ZSB1cFwiXG4gICAgICAgICAgICAgICAgICAgIGFyaWEta2V5c2hvcnRjdXRzPVwiS1wiXG4gICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9e2hhbmRsZVNlbGVjdFByZXZTcGFufVxuICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZD17IXByZXZTcGFuSWR9XG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxDaGV2cm9uVXAgY2xhc3NOYW1lPVwidy00IGgtNFwiIC8+XG4gICAgICAgICAgICAgICAgICA8L0ljb25CdXR0b24+XG4gICAgICAgICAgICAgICAgPC9Ub29sdGlwVHJpZ2dlcj5cbiAgICAgICAgICAgICAgICB7cHJldlNwYW5JZCA/IChcbiAgICAgICAgICAgICAgICAgIDxUb29sdGlwQ29udGVudD5cbiAgICAgICAgICAgICAgICAgICAgTmF2aWdhdGUgdXBcbiAgICAgICAgICAgICAgICAgICAgPEtiZD5LPC9LYmQ+XG4gICAgICAgICAgICAgICAgICA8L1Rvb2x0aXBDb250ZW50PlxuICAgICAgICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICAgICAgICA8L1Rvb2x0aXA+XG4gICAgICAgICAgICAgIDxUb29sdGlwPlxuICAgICAgICAgICAgICAgIDxUb29sdGlwVHJpZ2dlciBhc0NoaWxkPlxuICAgICAgICAgICAgICAgICAgPEljb25CdXR0b25cbiAgICAgICAgICAgICAgICAgICAgYXJpYS1sYWJlbD1cIk5hdmlnYXRlIGRvd25cIlxuICAgICAgICAgICAgICAgICAgICBhcmlhLWtleXNob3J0Y3V0cz1cIkpcIlxuICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXtoYW5kbGVTZWxlY3ROZXh0U3Bhbn1cbiAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9eyFuZXh0U3BhbklkfVxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8Q2hldnJvbkRvd24gY2xhc3NOYW1lPVwidy00IGgtNFwiIC8+XG4gICAgICAgICAgICAgICAgICA8L0ljb25CdXR0b24+XG4gICAgICAgICAgICAgICAgPC9Ub29sdGlwVHJpZ2dlcj5cbiAgICAgICAgICAgICAgICB7bmV4dFNwYW5JZCA/IChcbiAgICAgICAgICAgICAgICAgIDxUb29sdGlwQ29udGVudD5cbiAgICAgICAgICAgICAgICAgICAgTmF2aWdhdGUgZG93blxuICAgICAgICAgICAgICAgICAgICA8S2JkPko8L0tiZD5cbiAgICAgICAgICAgICAgICAgIDwvVG9vbHRpcENvbnRlbnQ+XG4gICAgICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgICAgIDwvVG9vbHRpcD5cbiAgICAgICAgICAgICAgPGRpdiBhcmlhLWhpZGRlbiBjbGFzc05hbWU9XCJ3LXB4IGgtNCBiZy1ncmF5LWFscGhhLTQwMCBteC0xXCIgLz5cbiAgICAgICAgICAgICAgPEljb25CdXR0b25cbiAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPVwiQ2xvc2Ugc3BhbiBkZXRhaWxzXCJcbiAgICAgICAgICAgICAgICBhcmlhLWtleXNob3J0Y3V0cz1cIkVzY2FwZVwiXG4gICAgICAgICAgICAgICAgb25DbGljaz17aGFuZGxlQ2xlYXJBY3RpdmVTcGFufVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPFggY2xhc3NOYW1lPVwidy00IGgtNFwiIC8+XG4gICAgICAgICAgICAgIDwvSWNvbkJ1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIHsvKiBQYW5lbCBib2R5ICovfVxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleC0xIG92ZXJmbG93LXktYXV0b1wiPlxuICAgICAgICAgICAgPEVycm9yQm91bmRhcnk+XG4gICAgICAgICAgICAgIDxFbnRpdHlEZXRhaWxQYW5lbFxuICAgICAgICAgICAgICAgIHJ1bj17c2lkZWJhci5ydW59XG4gICAgICAgICAgICAgICAgb25TdHJlYW1DbGljaz17c2lkZWJhci5vblN0cmVhbUNsaWNrfVxuICAgICAgICAgICAgICAgIG9uUnVuQ2xpY2s9e3NpZGViYXIub25SdW5DbGlja31cbiAgICAgICAgICAgICAgICBmZXRjaFNwYW5EZXRhaWw9e3NpZGViYXIuZmV0Y2hTcGFuRGV0YWlsfVxuICAgICAgICAgICAgICAgIG9uV2FrZVVwU2xlZXA9e3NpZGViYXIub25XYWtlVXBTbGVlcH1cbiAgICAgICAgICAgICAgICBvbkxvYWRFdmVudERhdGE9e3NpZGViYXIub25Mb2FkRXZlbnREYXRhfVxuICAgICAgICAgICAgICAgIG9uUmVzb2x2ZUhvb2s9e3NpZGViYXIub25SZXNvbHZlSG9va31cbiAgICAgICAgICAgICAgICBlbmNyeXB0aW9uS2V5PXtzaWRlYmFyLmVuY3J5cHRpb25LZXl9XG4gICAgICAgICAgICAgICAgb25EZWNyeXB0PXtzaWRlYmFyLm9uRGVjcnlwdH1cbiAgICAgICAgICAgICAgICBpc0RlY3J5cHRpbmc9e3NpZGViYXIuaXNEZWNyeXB0aW5nfVxuICAgICAgICAgICAgICAgIHNlbGVjdGVkU3Bhbj17c2VsZWN0ZWRTcGFufVxuICAgICAgICAgICAgICAgIHNob3dTZXBhcmF0ZUV2ZW50T2NjdXJyZW5jZVRpbWVzdGFtcHM9e1xuICAgICAgICAgICAgICAgICAgc2lkZWJhci5zaG93U2VwYXJhdGVFdmVudE9jY3VycmVuY2VUaW1lc3RhbXBzXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgPC9FcnJvckJvdW5kYXJ5PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2FzaWRlPlxuICAgICAgKSA6IG51bGx9XG5cbiAgICAgIDxUcmFjZVNob3J0Y3V0SGVscGVyXG4gICAgICAgIGhhc011bHRpcGxlU3BhbnM9e3RyYWNlLnNwYW5zLmxlbmd0aCA+IDF9XG4gICAgICAgIHJlZHVjZWRNb3Rpb249e3JlZHVjZWRNb3Rpb259XG4gICAgICAvPlxuICAgIDwvZGl2PlxuICApO1xufVxuIl19
@@ -1,13 +1,11 @@
1
- import type { Event, Hook, Step, WorkflowRun } from '@workflow/world';
2
- import type { SpanSelectionInfo } from './sidebar/entity-detail-panel';
1
+ import type { Event, Hook, WorkflowRun } from '@workflow/world';
2
+ import type { FetchSpanDetail } from './sidebar/use-selected-span-detail';
3
3
  interface RunTraceViewProps {
4
4
  run: WorkflowRun;
5
5
  events: Event[];
6
6
  isLoading?: boolean;
7
7
  error?: Error | null;
8
- spanDetailData?: WorkflowRun | Step | Hook | Event | null;
9
- spanDetailLoading?: boolean;
10
- spanDetailError?: Error | null;
8
+ fetchSpanDetail: FetchSpanDetail;
11
9
  onWakeUpSleep?: (runId: string, correlationId: string) => Promise<{
12
10
  stoppedCount: number;
13
11
  }>;
@@ -15,11 +13,11 @@ interface RunTraceViewProps {
15
13
  onCancelRun?: (runId: string) => Promise<void>;
16
14
  onStreamClick?: (streamId: string) => void;
17
15
  onRunClick?: (runId: string) => void;
18
- onSpanSelect?: (info: SpanSelectionInfo) => void;
19
16
  onLoadMoreSpans?: () => void | Promise<void>;
20
17
  hasMoreSpans?: boolean;
21
18
  isLoadingMoreSpans?: boolean;
19
+ showSeparateEventOccurrenceTimestamps?: boolean;
22
20
  }
23
- export declare function RunTraceView({ run, events, isLoading, error, spanDetailData, spanDetailLoading, spanDetailError, onWakeUpSleep, onResolveHook, onCancelRun, onStreamClick, onRunClick, onSpanSelect, onLoadMoreSpans, hasMoreSpans, isLoadingMoreSpans, }: RunTraceViewProps): import("react/jsx-runtime").JSX.Element;
21
+ export declare function RunTraceView({ run, events, isLoading, error, fetchSpanDetail, onWakeUpSleep, onResolveHook, onCancelRun, onStreamClick, onRunClick, onLoadMoreSpans, hasMoreSpans, isLoadingMoreSpans, showSeparateEventOccurrenceTimestamps, }: RunTraceViewProps): import("react/jsx-runtime").JSX.Element;
24
22
  export {};
25
23
  //# sourceMappingURL=run-trace-view.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"run-trace-view.d.ts","sourceRoot":"","sources":["../../src/components/run-trace-view.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAEtE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAGvE,UAAU,iBAAiB;IACzB,GAAG,EAAE,WAAW,CAAC;IACjB,MAAM,EAAE,KAAK,EAAE,CAAC;IAChB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,KAAK,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC;IACrB,cAAc,CAAC,EAAE,WAAW,GAAG,IAAI,GAAG,IAAI,GAAG,KAAK,GAAG,IAAI,CAAC;IAC1D,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,eAAe,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC;IAC/B,aAAa,CAAC,EAAE,CACd,KAAK,EAAE,MAAM,EACb,aAAa,EAAE,MAAM,KAClB,OAAO,CAAC;QAAE,YAAY,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACvC,aAAa,CAAC,EAAE,CACd,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,OAAO,EAChB,IAAI,CAAC,EAAE,IAAI,KACR,OAAO,CAAC,IAAI,CAAC,CAAC;IACnB,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/C,aAAa,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3C,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,iBAAiB,KAAK,IAAI,CAAC;IACjD,eAAe,CAAC,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7C,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAC9B;AAED,wBAAgB,YAAY,CAAC,EAC3B,GAAG,EACH,MAAM,EACN,SAAS,EACT,KAAK,EACL,cAAc,EACd,iBAAiB,EACjB,eAAe,EACf,aAAa,EACb,aAAa,EACb,WAAW,EACX,aAAa,EACb,UAAU,EACV,YAAY,EACZ,eAAe,EACf,YAAY,EACZ,kBAAkB,GACnB,EAAE,iBAAiB,2CAiCnB"}
1
+ {"version":3,"file":"run-trace-view.d.ts","sourceRoot":"","sources":["../../src/components/run-trace-view.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAEhE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oCAAoC,CAAC;AAG1E,UAAU,iBAAiB;IACzB,GAAG,EAAE,WAAW,CAAC;IACjB,MAAM,EAAE,KAAK,EAAE,CAAC;IAChB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,KAAK,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC;IACrB,eAAe,EAAE,eAAe,CAAC;IACjC,aAAa,CAAC,EAAE,CACd,KAAK,EAAE,MAAM,EACb,aAAa,EAAE,MAAM,KAClB,OAAO,CAAC;QAAE,YAAY,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACvC,aAAa,CAAC,EAAE,CACd,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,OAAO,EAChB,IAAI,CAAC,EAAE,IAAI,KACR,OAAO,CAAC,IAAI,CAAC,CAAC;IACnB,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/C,aAAa,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3C,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC,eAAe,CAAC,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7C,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,qCAAqC,CAAC,EAAE,OAAO,CAAC;CACjD;AAED,wBAAgB,YAAY,CAAC,EAC3B,GAAG,EACH,MAAM,EACN,SAAS,EACT,KAAK,EACL,eAAe,EACf,aAAa,EACb,aAAa,EACb,WAAW,EACX,aAAa,EACb,UAAU,EACV,eAAe,EACf,YAAY,EACZ,kBAAkB,EAClB,qCAAqC,GACtC,EAAE,iBAAiB,2CAiCnB"}
@@ -2,10 +2,10 @@
2
2
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
3
  import { AlertCircle } from 'lucide-react';
4
4
  import { WorkflowTraceViewer } from './workflow-trace-view';
5
- export function RunTraceView({ run, events, isLoading, error, spanDetailData, spanDetailLoading, spanDetailError, onWakeUpSleep, onResolveHook, onCancelRun, onStreamClick, onRunClick, onSpanSelect, onLoadMoreSpans, hasMoreSpans, isLoadingMoreSpans, }) {
5
+ export function RunTraceView({ run, events, isLoading, error, fetchSpanDetail, onWakeUpSleep, onResolveHook, onCancelRun, onStreamClick, onRunClick, onLoadMoreSpans, hasMoreSpans, isLoadingMoreSpans, showSeparateEventOccurrenceTimestamps, }) {
6
6
  if (error && !run) {
7
7
  return (_jsxs("div", { className: "m-4", children: [_jsx(AlertCircle, { className: "h-4 w-4" }), _jsx("p", { children: "Error loading workflow run" }), _jsx("p", { children: error.message })] }));
8
8
  }
9
- return (_jsx("div", { className: "w-full h-full relative", children: _jsx(WorkflowTraceViewer, { error: error, events: events, run: run, isLoading: isLoading, spanDetailData: spanDetailData, spanDetailLoading: spanDetailLoading, spanDetailError: spanDetailError, onWakeUpSleep: onWakeUpSleep, onResolveHook: onResolveHook, onCancelRun: onCancelRun, onStreamClick: onStreamClick, onRunClick: onRunClick, onSpanSelect: onSpanSelect, onLoadMoreSpans: onLoadMoreSpans, hasMoreSpans: hasMoreSpans, isLoadingMoreSpans: isLoadingMoreSpans }) }));
9
+ return (_jsx("div", { className: "w-full h-full relative", children: _jsx(WorkflowTraceViewer, { error: error, events: events, run: run, isLoading: isLoading, fetchSpanDetail: fetchSpanDetail, onWakeUpSleep: onWakeUpSleep, onResolveHook: onResolveHook, onCancelRun: onCancelRun, onStreamClick: onStreamClick, onRunClick: onRunClick, onLoadMoreSpans: onLoadMoreSpans, hasMoreSpans: hasMoreSpans, isLoadingMoreSpans: isLoadingMoreSpans, showSeparateEventOccurrenceTimestamps: showSeparateEventOccurrenceTimestamps }) }));
10
10
  }
11
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVuLXRyYWNlLXZpZXcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29tcG9uZW50cy9ydW4tdHJhY2Utdmlldy50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWSxDQUFDOztBQUdiLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFFM0MsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUE0QjVELE1BQU0sVUFBVSxZQUFZLENBQUMsRUFDM0IsR0FBRyxFQUNILE1BQU0sRUFDTixTQUFTLEVBQ1QsS0FBSyxFQUNMLGNBQWMsRUFDZCxpQkFBaUIsRUFDakIsZUFBZSxFQUNmLGFBQWEsRUFDYixhQUFhLEVBQ2IsV0FBVyxFQUNYLGFBQWEsRUFDYixVQUFVLEVBQ1YsWUFBWSxFQUNaLGVBQWUsRUFDZixZQUFZLEVBQ1osa0JBQWtCLEdBQ0E7SUFDbEIsSUFBSSxLQUFLLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUNsQixPQUFPLENBQ0wsZUFBSyxTQUFTLEVBQUMsS0FBSyxhQUNsQixLQUFDLFdBQVcsSUFBQyxTQUFTLEVBQUMsU0FBUyxHQUFHLEVBQ25DLHFEQUFpQyxFQUNqQyxzQkFBSSxLQUFLLENBQUMsT0FBTyxHQUFLLElBQ2xCLENBQ1AsQ0FBQztJQUNKLENBQUM7SUFFRCxPQUFPLENBQ0wsY0FBSyxTQUFTLEVBQUMsd0JBQXdCLFlBQ3JDLEtBQUMsbUJBQW1CLElBQ2xCLEtBQUssRUFBRSxLQUFLLEVBQ1osTUFBTSxFQUFFLE1BQU0sRUFDZCxHQUFHLEVBQUUsR0FBRyxFQUNSLFNBQVMsRUFBRSxTQUFTLEVBQ3BCLGNBQWMsRUFBRSxjQUFjLEVBQzlCLGlCQUFpQixFQUFFLGlCQUFpQixFQUNwQyxlQUFlLEVBQUUsZUFBZSxFQUNoQyxhQUFhLEVBQUUsYUFBYSxFQUM1QixhQUFhLEVBQUUsYUFBYSxFQUM1QixXQUFXLEVBQUUsV0FBVyxFQUN4QixhQUFhLEVBQUUsYUFBYSxFQUM1QixVQUFVLEVBQUUsVUFBVSxFQUN0QixZQUFZLEVBQUUsWUFBWSxFQUMxQixlQUFlLEVBQUUsZUFBZSxFQUNoQyxZQUFZLEVBQUUsWUFBWSxFQUMxQixrQkFBa0IsRUFBRSxrQkFBa0IsR0FDdEMsR0FDRSxDQUNQLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgdHlwZSB7IEV2ZW50LCBIb29rLCBTdGVwLCBXb3JrZmxvd1J1biB9IGZyb20gJ0B3b3JrZmxvdy93b3JsZCc7XG5pbXBvcnQgeyBBbGVydENpcmNsZSB9IGZyb20gJ2x1Y2lkZS1yZWFjdCc7XG5pbXBvcnQgdHlwZSB7IFNwYW5TZWxlY3Rpb25JbmZvIH0gZnJvbSAnLi9zaWRlYmFyL2VudGl0eS1kZXRhaWwtcGFuZWwnO1xuaW1wb3J0IHsgV29ya2Zsb3dUcmFjZVZpZXdlciB9IGZyb20gJy4vd29ya2Zsb3ctdHJhY2Utdmlldyc7XG5cbmludGVyZmFjZSBSdW5UcmFjZVZpZXdQcm9wcyB7XG4gIHJ1bjogV29ya2Zsb3dSdW47XG4gIGV2ZW50czogRXZlbnRbXTtcbiAgaXNMb2FkaW5nPzogYm9vbGVhbjtcbiAgZXJyb3I/OiBFcnJvciB8IG51bGw7XG4gIHNwYW5EZXRhaWxEYXRhPzogV29ya2Zsb3dSdW4gfCBTdGVwIHwgSG9vayB8IEV2ZW50IHwgbnVsbDtcbiAgc3BhbkRldGFpbExvYWRpbmc/OiBib29sZWFuO1xuICBzcGFuRGV0YWlsRXJyb3I/OiBFcnJvciB8IG51bGw7XG4gIG9uV2FrZVVwU2xlZXA/OiAoXG4gICAgcnVuSWQ6IHN0cmluZyxcbiAgICBjb3JyZWxhdGlvbklkOiBzdHJpbmdcbiAgKSA9PiBQcm9taXNlPHsgc3RvcHBlZENvdW50OiBudW1iZXIgfT47XG4gIG9uUmVzb2x2ZUhvb2s/OiAoXG4gICAgaG9va1Rva2VuOiBzdHJpbmcsXG4gICAgcGF5bG9hZDogdW5rbm93bixcbiAgICBob29rPzogSG9va1xuICApID0+IFByb21pc2U8dm9pZD47XG4gIG9uQ2FuY2VsUnVuPzogKHJ1bklkOiBzdHJpbmcpID0+IFByb21pc2U8dm9pZD47XG4gIG9uU3RyZWFtQ2xpY2s/OiAoc3RyZWFtSWQ6IHN0cmluZykgPT4gdm9pZDtcbiAgb25SdW5DbGljaz86IChydW5JZDogc3RyaW5nKSA9PiB2b2lkO1xuICBvblNwYW5TZWxlY3Q/OiAoaW5mbzogU3BhblNlbGVjdGlvbkluZm8pID0+IHZvaWQ7XG4gIG9uTG9hZE1vcmVTcGFucz86ICgpID0+IHZvaWQgfCBQcm9taXNlPHZvaWQ+O1xuICBoYXNNb3JlU3BhbnM/OiBib29sZWFuO1xuICBpc0xvYWRpbmdNb3JlU3BhbnM/OiBib29sZWFuO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gUnVuVHJhY2VWaWV3KHtcbiAgcnVuLFxuICBldmVudHMsXG4gIGlzTG9hZGluZyxcbiAgZXJyb3IsXG4gIHNwYW5EZXRhaWxEYXRhLFxuICBzcGFuRGV0YWlsTG9hZGluZyxcbiAgc3BhbkRldGFpbEVycm9yLFxuICBvbldha2VVcFNsZWVwLFxuICBvblJlc29sdmVIb29rLFxuICBvbkNhbmNlbFJ1bixcbiAgb25TdHJlYW1DbGljayxcbiAgb25SdW5DbGljayxcbiAgb25TcGFuU2VsZWN0LFxuICBvbkxvYWRNb3JlU3BhbnMsXG4gIGhhc01vcmVTcGFucyxcbiAgaXNMb2FkaW5nTW9yZVNwYW5zLFxufTogUnVuVHJhY2VWaWV3UHJvcHMpIHtcbiAgaWYgKGVycm9yICYmICFydW4pIHtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJtLTRcIj5cbiAgICAgICAgPEFsZXJ0Q2lyY2xlIGNsYXNzTmFtZT1cImgtNCB3LTRcIiAvPlxuICAgICAgICA8cD5FcnJvciBsb2FkaW5nIHdvcmtmbG93IHJ1bjwvcD5cbiAgICAgICAgPHA+e2Vycm9yLm1lc3NhZ2V9PC9wPlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9XCJ3LWZ1bGwgaC1mdWxsIHJlbGF0aXZlXCI+XG4gICAgICA8V29ya2Zsb3dUcmFjZVZpZXdlclxuICAgICAgICBlcnJvcj17ZXJyb3J9XG4gICAgICAgIGV2ZW50cz17ZXZlbnRzfVxuICAgICAgICBydW49e3J1bn1cbiAgICAgICAgaXNMb2FkaW5nPXtpc0xvYWRpbmd9XG4gICAgICAgIHNwYW5EZXRhaWxEYXRhPXtzcGFuRGV0YWlsRGF0YX1cbiAgICAgICAgc3BhbkRldGFpbExvYWRpbmc9e3NwYW5EZXRhaWxMb2FkaW5nfVxuICAgICAgICBzcGFuRGV0YWlsRXJyb3I9e3NwYW5EZXRhaWxFcnJvcn1cbiAgICAgICAgb25XYWtlVXBTbGVlcD17b25XYWtlVXBTbGVlcH1cbiAgICAgICAgb25SZXNvbHZlSG9vaz17b25SZXNvbHZlSG9va31cbiAgICAgICAgb25DYW5jZWxSdW49e29uQ2FuY2VsUnVufVxuICAgICAgICBvblN0cmVhbUNsaWNrPXtvblN0cmVhbUNsaWNrfVxuICAgICAgICBvblJ1bkNsaWNrPXtvblJ1bkNsaWNrfVxuICAgICAgICBvblNwYW5TZWxlY3Q9e29uU3BhblNlbGVjdH1cbiAgICAgICAgb25Mb2FkTW9yZVNwYW5zPXtvbkxvYWRNb3JlU3BhbnN9XG4gICAgICAgIGhhc01vcmVTcGFucz17aGFzTW9yZVNwYW5zfVxuICAgICAgICBpc0xvYWRpbmdNb3JlU3BhbnM9e2lzTG9hZGluZ01vcmVTcGFuc31cbiAgICAgIC8+XG4gICAgPC9kaXY+XG4gICk7XG59XG4iXX0=
11
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVuLXRyYWNlLXZpZXcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29tcG9uZW50cy9ydW4tdHJhY2Utdmlldy50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWSxDQUFDOztBQUdiLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFFM0MsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUEwQjVELE1BQU0sVUFBVSxZQUFZLENBQUMsRUFDM0IsR0FBRyxFQUNILE1BQU0sRUFDTixTQUFTLEVBQ1QsS0FBSyxFQUNMLGVBQWUsRUFDZixhQUFhLEVBQ2IsYUFBYSxFQUNiLFdBQVcsRUFDWCxhQUFhLEVBQ2IsVUFBVSxFQUNWLGVBQWUsRUFDZixZQUFZLEVBQ1osa0JBQWtCLEVBQ2xCLHFDQUFxQyxHQUNuQjtJQUNsQixJQUFJLEtBQUssSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ2xCLE9BQU8sQ0FDTCxlQUFLLFNBQVMsRUFBQyxLQUFLLGFBQ2xCLEtBQUMsV0FBVyxJQUFDLFNBQVMsRUFBQyxTQUFTLEdBQUcsRUFDbkMscURBQWlDLEVBQ2pDLHNCQUFJLEtBQUssQ0FBQyxPQUFPLEdBQUssSUFDbEIsQ0FDUCxDQUFDO0lBQ0osQ0FBQztJQUVELE9BQU8sQ0FDTCxjQUFLLFNBQVMsRUFBQyx3QkFBd0IsWUFDckMsS0FBQyxtQkFBbUIsSUFDbEIsS0FBSyxFQUFFLEtBQUssRUFDWixNQUFNLEVBQUUsTUFBTSxFQUNkLEdBQUcsRUFBRSxHQUFHLEVBQ1IsU0FBUyxFQUFFLFNBQVMsRUFDcEIsZUFBZSxFQUFFLGVBQWUsRUFDaEMsYUFBYSxFQUFFLGFBQWEsRUFDNUIsYUFBYSxFQUFFLGFBQWEsRUFDNUIsV0FBVyxFQUFFLFdBQVcsRUFDeEIsYUFBYSxFQUFFLGFBQWEsRUFDNUIsVUFBVSxFQUFFLFVBQVUsRUFDdEIsZUFBZSxFQUFFLGVBQWUsRUFDaEMsWUFBWSxFQUFFLFlBQVksRUFDMUIsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQ3RDLHFDQUFxQyxFQUNuQyxxQ0FBcUMsR0FFdkMsR0FDRSxDQUNQLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgdHlwZSB7IEV2ZW50LCBIb29rLCBXb3JrZmxvd1J1biB9IGZyb20gJ0B3b3JrZmxvdy93b3JsZCc7XG5pbXBvcnQgeyBBbGVydENpcmNsZSB9IGZyb20gJ2x1Y2lkZS1yZWFjdCc7XG5pbXBvcnQgdHlwZSB7IEZldGNoU3BhbkRldGFpbCB9IGZyb20gJy4vc2lkZWJhci91c2Utc2VsZWN0ZWQtc3Bhbi1kZXRhaWwnO1xuaW1wb3J0IHsgV29ya2Zsb3dUcmFjZVZpZXdlciB9IGZyb20gJy4vd29ya2Zsb3ctdHJhY2Utdmlldyc7XG5cbmludGVyZmFjZSBSdW5UcmFjZVZpZXdQcm9wcyB7XG4gIHJ1bjogV29ya2Zsb3dSdW47XG4gIGV2ZW50czogRXZlbnRbXTtcbiAgaXNMb2FkaW5nPzogYm9vbGVhbjtcbiAgZXJyb3I/OiBFcnJvciB8IG51bGw7XG4gIGZldGNoU3BhbkRldGFpbDogRmV0Y2hTcGFuRGV0YWlsO1xuICBvbldha2VVcFNsZWVwPzogKFxuICAgIHJ1bklkOiBzdHJpbmcsXG4gICAgY29ycmVsYXRpb25JZDogc3RyaW5nXG4gICkgPT4gUHJvbWlzZTx7IHN0b3BwZWRDb3VudDogbnVtYmVyIH0+O1xuICBvblJlc29sdmVIb29rPzogKFxuICAgIGhvb2tUb2tlbjogc3RyaW5nLFxuICAgIHBheWxvYWQ6IHVua25vd24sXG4gICAgaG9vaz86IEhvb2tcbiAgKSA9PiBQcm9taXNlPHZvaWQ+O1xuICBvbkNhbmNlbFJ1bj86IChydW5JZDogc3RyaW5nKSA9PiBQcm9taXNlPHZvaWQ+O1xuICBvblN0cmVhbUNsaWNrPzogKHN0cmVhbUlkOiBzdHJpbmcpID0+IHZvaWQ7XG4gIG9uUnVuQ2xpY2s/OiAocnVuSWQ6IHN0cmluZykgPT4gdm9pZDtcbiAgb25Mb2FkTW9yZVNwYW5zPzogKCkgPT4gdm9pZCB8IFByb21pc2U8dm9pZD47XG4gIGhhc01vcmVTcGFucz86IGJvb2xlYW47XG4gIGlzTG9hZGluZ01vcmVTcGFucz86IGJvb2xlYW47XG4gIHNob3dTZXBhcmF0ZUV2ZW50T2NjdXJyZW5jZVRpbWVzdGFtcHM/OiBib29sZWFuO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gUnVuVHJhY2VWaWV3KHtcbiAgcnVuLFxuICBldmVudHMsXG4gIGlzTG9hZGluZyxcbiAgZXJyb3IsXG4gIGZldGNoU3BhbkRldGFpbCxcbiAgb25XYWtlVXBTbGVlcCxcbiAgb25SZXNvbHZlSG9vayxcbiAgb25DYW5jZWxSdW4sXG4gIG9uU3RyZWFtQ2xpY2ssXG4gIG9uUnVuQ2xpY2ssXG4gIG9uTG9hZE1vcmVTcGFucyxcbiAgaGFzTW9yZVNwYW5zLFxuICBpc0xvYWRpbmdNb3JlU3BhbnMsXG4gIHNob3dTZXBhcmF0ZUV2ZW50T2NjdXJyZW5jZVRpbWVzdGFtcHMsXG59OiBSdW5UcmFjZVZpZXdQcm9wcykge1xuICBpZiAoZXJyb3IgJiYgIXJ1bikge1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cIm0tNFwiPlxuICAgICAgICA8QWxlcnRDaXJjbGUgY2xhc3NOYW1lPVwiaC00IHctNFwiIC8+XG4gICAgICAgIDxwPkVycm9yIGxvYWRpbmcgd29ya2Zsb3cgcnVuPC9wPlxuICAgICAgICA8cD57ZXJyb3IubWVzc2FnZX08L3A+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT1cInctZnVsbCBoLWZ1bGwgcmVsYXRpdmVcIj5cbiAgICAgIDxXb3JrZmxvd1RyYWNlVmlld2VyXG4gICAgICAgIGVycm9yPXtlcnJvcn1cbiAgICAgICAgZXZlbnRzPXtldmVudHN9XG4gICAgICAgIHJ1bj17cnVufVxuICAgICAgICBpc0xvYWRpbmc9e2lzTG9hZGluZ31cbiAgICAgICAgZmV0Y2hTcGFuRGV0YWlsPXtmZXRjaFNwYW5EZXRhaWx9XG4gICAgICAgIG9uV2FrZVVwU2xlZXA9e29uV2FrZVVwU2xlZXB9XG4gICAgICAgIG9uUmVzb2x2ZUhvb2s9e29uUmVzb2x2ZUhvb2t9XG4gICAgICAgIG9uQ2FuY2VsUnVuPXtvbkNhbmNlbFJ1bn1cbiAgICAgICAgb25TdHJlYW1DbGljaz17b25TdHJlYW1DbGlja31cbiAgICAgICAgb25SdW5DbGljaz17b25SdW5DbGlja31cbiAgICAgICAgb25Mb2FkTW9yZVNwYW5zPXtvbkxvYWRNb3JlU3BhbnN9XG4gICAgICAgIGhhc01vcmVTcGFucz17aGFzTW9yZVNwYW5zfVxuICAgICAgICBpc0xvYWRpbmdNb3JlU3BhbnM9e2lzTG9hZGluZ01vcmVTcGFuc31cbiAgICAgICAgc2hvd1NlcGFyYXRlRXZlbnRPY2N1cnJlbmNlVGltZXN0YW1wcz17XG4gICAgICAgICAgc2hvd1NlcGFyYXRlRXZlbnRPY2N1cnJlbmNlVGltZXN0YW1wc1xuICAgICAgICB9XG4gICAgICAvPlxuICAgIDwvZGl2PlxuICApO1xufVxuIl19
@@ -1 +1 @@
1
- {"version":3,"file":"attribute-panel.d.ts","sourceRoot":"","sources":["../../../src/components/sidebar/attribute-panel.tsx"],"names":[],"mappings":"AA4VA,eAAO,MAAM,oBAAoB,GAAI,OAAO,OAAO,KAAG,MAOrD,CAAC;AAoBF,UAAU,cAAc;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAuPD,eAAO,MAAM,cAAc,GAAI,mDAM5B;IACD,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,OAAO,CAAC;IACf,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,cAAc,CAAC;CAC1B,mDAyEA,CAAC;AAEF,eAAO,MAAM,cAAc,GAAI,uHAW5B;IACD,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC9B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,KAAK,CAAC,EAAE,KAAK,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,kDAAkD;IAClD,aAAa,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3C,+CAA+C;IAC/C,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC,yEAAyE;IACzE,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;IACvB,kDAAkD;IAClD,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,oFAAoF;IACpF,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,4CAuLA,CAAC"}
1
+ {"version":3,"file":"attribute-panel.d.ts","sourceRoot":"","sources":["../../../src/components/sidebar/attribute-panel.tsx"],"names":[],"mappings":"AA4VA,eAAO,MAAM,oBAAoB,GAAI,OAAO,OAAO,KAAG,MAOrD,CAAC;AAoBF,UAAU,cAAc;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAuPD,eAAO,MAAM,cAAc,GAAI,mDAM5B;IACD,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,OAAO,CAAC;IACf,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,cAAc,CAAC;CAC1B,mDAyEA,CAAC;AAEF,eAAO,MAAM,cAAc,GAAI,uHAW5B;IACD,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC9B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,KAAK,CAAC,EAAE,KAAK,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,kDAAkD;IAClD,aAAa,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3C,+CAA+C;IAC/C,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC,yEAAyE;IACzE,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;IACvB,kDAAkD;IAClD,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,oFAAoF;IACpF,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,4CAqLA,CAAC"}