@workflow/web-shared 5.0.0-beta.27 → 5.0.0-beta.29

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 (54) hide show
  1. package/dist/components/event-list-view.d.ts.map +1 -1
  2. package/dist/components/event-list-view.js +13 -1
  3. package/dist/components/new-trace-viewer/components/detail-panel.d.ts.map +1 -1
  4. package/dist/components/new-trace-viewer/components/detail-panel.js +2 -2
  5. package/dist/components/new-trace-viewer/components/event-list.d.ts +1 -1
  6. package/dist/components/new-trace-viewer/components/event-list.d.ts.map +1 -1
  7. package/dist/components/new-trace-viewer/components/event-list.js +4 -6
  8. package/dist/components/new-trace-viewer/components/minimap.d.ts +14 -0
  9. package/dist/components/new-trace-viewer/components/minimap.d.ts.map +1 -0
  10. package/dist/components/new-trace-viewer/components/minimap.js +337 -0
  11. package/dist/components/new-trace-viewer/components/split-pane.d.ts +0 -2
  12. package/dist/components/new-trace-viewer/components/split-pane.d.ts.map +1 -1
  13. package/dist/components/new-trace-viewer/components/split-pane.js +9 -75
  14. package/dist/components/new-trace-viewer/components/timeline.d.ts.map +1 -1
  15. package/dist/components/new-trace-viewer/components/timeline.js +5 -7
  16. package/dist/components/new-trace-viewer/components/trace-viewer-skeleton.d.ts.map +1 -1
  17. package/dist/components/new-trace-viewer/components/trace-viewer-skeleton.js +6 -2
  18. package/dist/components/new-trace-viewer/trace-viewer.d.ts.map +1 -1
  19. package/dist/components/new-trace-viewer/trace-viewer.js +48 -96
  20. package/dist/components/new-trace-viewer/utils.d.ts +21 -0
  21. package/dist/components/new-trace-viewer/utils.d.ts.map +1 -1
  22. package/dist/components/new-trace-viewer/utils.js +44 -3
  23. package/dist/components/sidebar/attribute-panel.d.ts +4 -1
  24. package/dist/components/sidebar/attribute-panel.d.ts.map +1 -1
  25. package/dist/components/sidebar/attribute-panel.js +32 -24
  26. package/dist/components/sidebar/attributes-block.d.ts +1 -0
  27. package/dist/components/sidebar/attributes-block.d.ts.map +1 -1
  28. package/dist/components/sidebar/attributes-block.js +6 -5
  29. package/dist/components/sidebar/entity-detail-panel.d.ts +5 -1
  30. package/dist/components/sidebar/entity-detail-panel.d.ts.map +1 -1
  31. package/dist/components/sidebar/entity-detail-panel.js +18 -3
  32. package/dist/components/sidebar/sidebar-data-context.d.ts +4 -0
  33. package/dist/components/sidebar/sidebar-data-context.d.ts.map +1 -1
  34. package/dist/components/sidebar/sidebar-data-context.js +1 -1
  35. package/dist/lib/utils.d.ts +8 -5
  36. package/dist/lib/utils.d.ts.map +1 -1
  37. package/dist/lib/utils.js +13 -16
  38. package/package.json +5 -5
  39. package/src/components/event-list-view.tsx +21 -0
  40. package/src/components/new-trace-viewer/components/detail-panel.tsx +1 -0
  41. package/src/components/new-trace-viewer/components/event-list.tsx +4 -6
  42. package/src/components/new-trace-viewer/components/minimap.tsx +559 -0
  43. package/src/components/new-trace-viewer/components/split-pane.tsx +39 -95
  44. package/src/components/new-trace-viewer/components/timeline.tsx +3 -5
  45. package/src/components/new-trace-viewer/components/trace-viewer-skeleton.tsx +17 -0
  46. package/src/components/new-trace-viewer/trace-viewer.tsx +79 -117
  47. package/src/components/new-trace-viewer/utils.test.ts +65 -0
  48. package/src/components/new-trace-viewer/utils.ts +76 -2
  49. package/src/components/sidebar/attribute-panel.tsx +77 -22
  50. package/src/components/sidebar/attributes-block.tsx +43 -10
  51. package/src/components/sidebar/entity-detail-panel.tsx +22 -0
  52. package/src/components/sidebar/sidebar-data-context.tsx +4 -0
  53. package/src/lib/utils.test.ts +33 -0
  54. package/src/lib/utils.ts +12 -16
@@ -27,7 +27,7 @@ export interface SelectedSpanInfo {
27
27
  * This component is rendered OUTSIDE the trace viewer context — it
28
28
  * receives all data via props rather than reading from context.
29
29
  */
30
- export declare function EntityDetailPanel({ run, onStreamClick, onRunClick, fetchSpanDetail, onWakeUpSleep, onLoadEventData, onResolveHook, encryptionKey, onDecrypt, isDecrypting, selectedSpan, showSeparateEventOccurrenceTimestamps, }: {
30
+ export declare function EntityDetailPanel({ run, onStreamClick, onRunClick, fetchSpanDetail, onWakeUpSleep, onLoadEventData, onResolveHook, encryptionKey, onDecrypt, isDecrypting, selectedSpan, showSeparateEventOccurrenceTimestamps, getModuleSourceUrl, }: {
31
31
  run: WorkflowRun;
32
32
  /** Callback when a stream reference is clicked */
33
33
  onStreamClick?: (streamId: string) => void;
@@ -52,5 +52,9 @@ export declare function EntityDetailPanel({ run, onStreamClick, onRunClick, fetc
52
52
  selectedSpan: SelectedSpanInfo | null;
53
53
  /** Show occurredAt separately instead of folding it into the Created timestamp. */
54
54
  showSeparateEventOccurrenceTimestamps?: boolean;
55
+ getModuleSourceUrl?: (info: {
56
+ moduleSpecifier: string;
57
+ deploymentId: string;
58
+ }) => string | undefined;
55
59
  }): React.JSX.Element | null;
56
60
  //# sourceMappingURL=entity-detail-panel.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"entity-detail-panel.d.ts","sourceRoot":"","sources":["../../../src/components/sidebar/entity-detail-panel.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAUhE,OAAO,EACL,KAAK,eAAe,EAErB,MAAM,4BAA4B,CAAC;AAOpC;;GAEG;AACH,MAAM,MAAM,iBAAiB,GAAG;IAC9B,QAAQ,EAAE,KAAK,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;IAC5C,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,kFAAkF;IAClF,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,oDAAoD;IACpD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,uDAAuD;IACvD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,gFAAgF;IAChF,SAAS,CAAC,EAAE,KAAK,EAAE,CAAC;CACrB;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,EAChC,GAAG,EACH,aAAa,EACb,UAAU,EACV,eAAe,EACf,aAAa,EACb,eAAe,EACf,aAAa,EACb,aAAa,EACb,SAAS,EACT,YAAoB,EACpB,YAAY,EACZ,qCAA6C,GAC9C,EAAE;IACD,GAAG,EAAE,WAAW,CAAC;IACjB,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,eAAe,EAAE,eAAe,CAAC;IACjC,gDAAgD;IAChD,aAAa,CAAC,EAAE,CACd,KAAK,EAAE,MAAM,EACb,aAAa,EAAE,MAAM,KAClB,OAAO,CAAC;QAAE,YAAY,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACvC,sEAAsE;IACtE,eAAe,CAAC,EAAE,CAChB,aAAa,EAAE,MAAM,EACrB,OAAO,EAAE,MAAM,KACZ,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC;IAC7B,iDAAiD;IACjD,aAAa,CAAC,EAAE,CACd,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,OAAO,EAChB,IAAI,CAAC,EAAE,IAAI,KACR,OAAO,CAAC,IAAI,CAAC,CAAC;IACnB,sFAAsF;IACtF,aAAa,CAAC,EAAE,UAAU,CAAC;IAC3B,4DAA4D;IAC5D,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;IACvB,4DAA4D;IAC5D,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,mEAAmE;IACnE,YAAY,EAAE,gBAAgB,GAAG,IAAI,CAAC;IACtC,mFAAmF;IACnF,qCAAqC,CAAC,EAAE,OAAO,CAAC;CACjD,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,GAAG,IAAI,CA2S3B"}
1
+ {"version":3,"file":"entity-detail-panel.d.ts","sourceRoot":"","sources":["../../../src/components/sidebar/entity-detail-panel.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAUhE,OAAO,EACL,KAAK,eAAe,EAErB,MAAM,4BAA4B,CAAC;AAOpC;;GAEG;AACH,MAAM,MAAM,iBAAiB,GAAG;IAC9B,QAAQ,EAAE,KAAK,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;IAC5C,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,kFAAkF;IAClF,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,oDAAoD;IACpD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,uDAAuD;IACvD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,gFAAgF;IAChF,SAAS,CAAC,EAAE,KAAK,EAAE,CAAC;CACrB;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,EAChC,GAAG,EACH,aAAa,EACb,UAAU,EACV,eAAe,EACf,aAAa,EACb,eAAe,EACf,aAAa,EACb,aAAa,EACb,SAAS,EACT,YAAoB,EACpB,YAAY,EACZ,qCAA6C,EAC7C,kBAAkB,GACnB,EAAE;IACD,GAAG,EAAE,WAAW,CAAC;IACjB,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,eAAe,EAAE,eAAe,CAAC;IACjC,gDAAgD;IAChD,aAAa,CAAC,EAAE,CACd,KAAK,EAAE,MAAM,EACb,aAAa,EAAE,MAAM,KAClB,OAAO,CAAC;QAAE,YAAY,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACvC,sEAAsE;IACtE,eAAe,CAAC,EAAE,CAChB,aAAa,EAAE,MAAM,EACrB,OAAO,EAAE,MAAM,KACZ,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC;IAC7B,iDAAiD;IACjD,aAAa,CAAC,EAAE,CACd,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,OAAO,EAChB,IAAI,CAAC,EAAE,IAAI,KACR,OAAO,CAAC,IAAI,CAAC,CAAC;IACnB,sFAAsF;IACtF,aAAa,CAAC,EAAE,UAAU,CAAC;IAC3B,4DAA4D;IAC5D,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;IACvB,4DAA4D;IAC5D,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,mEAAmE;IACnE,YAAY,EAAE,gBAAgB,GAAG,IAAI,CAAC;IACtC,mFAAmF;IACnF,qCAAqC,CAAC,EAAE,OAAO,CAAC;IAChD,kBAAkB,CAAC,EAAE,CAAC,IAAI,EAAE;QAC1B,eAAe,EAAE,MAAM,CAAC;QACxB,YAAY,EAAE,MAAM,CAAC;KACtB,KAAK,MAAM,GAAG,SAAS,CAAC;CAC1B,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,GAAG,IAAI,CA2T3B"}
@@ -1,5 +1,6 @@
1
1
  'use client';
2
2
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { parseStepName, parseWorkflowName } from '@workflow/utils/parse-name';
3
4
  import clsx from 'clsx';
4
5
  import { Send, Zap } from 'lucide-react';
5
6
  import { useCallback, useEffect, useMemo, useState } from 'react';
@@ -20,7 +21,7 @@ function isHook(data) {
20
21
  * This component is rendered OUTSIDE the trace viewer context — it
21
22
  * receives all data via props rather than reading from context.
22
23
  */
23
- export function EntityDetailPanel({ run, onStreamClick, onRunClick, fetchSpanDetail, onWakeUpSleep, onLoadEventData, onResolveHook, encryptionKey, onDecrypt, isDecrypting = false, selectedSpan, showSeparateEventOccurrenceTimestamps = false, }) {
24
+ export function EntityDetailPanel({ run, onStreamClick, onRunClick, fetchSpanDetail, onWakeUpSleep, onLoadEventData, onResolveHook, encryptionKey, onDecrypt, isDecrypting = false, selectedSpan, showSeparateEventOccurrenceTimestamps = false, getModuleSourceUrl, }) {
24
25
  const toast = useToast();
25
26
  const [stoppingSleep, setStoppingSleep] = useState(false);
26
27
  const [showResolveHookModal, setShowResolveHookModal] = useState(false);
@@ -180,6 +181,20 @@ export function EntityDetailPanel({ run, onStreamClick, onRunClick, fetchSpanDet
180
181
  }
181
182
  return undefined;
182
183
  }, [displayData, run.workflowName]);
184
+ const moduleSourceUrl = useMemo(() => {
185
+ if (!getModuleSourceUrl || !moduleSpecifier)
186
+ return undefined;
187
+ const parsed = parseStepName(moduleSpecifier) ?? parseWorkflowName(moduleSpecifier);
188
+ if (!parsed)
189
+ return undefined;
190
+ const dataDeploymentId = displayData.deploymentId;
191
+ return getModuleSourceUrl({
192
+ moduleSpecifier: parsed.moduleSpecifier,
193
+ deploymentId: typeof dataDeploymentId === 'string'
194
+ ? dataDeploymentId
195
+ : run.deploymentId,
196
+ });
197
+ }, [getModuleSourceUrl, moduleSpecifier, displayData, run.deploymentId]);
183
198
  if (!selectedSpan || !resource || !resourceId) {
184
199
  return null;
185
200
  }
@@ -198,6 +213,6 @@ export function EntityDetailPanel({ run, onStreamClick, onRunClick, fetchSpanDet
198
213
  : 'cursor-pointer'), style: {
199
214
  background: 'var(--ds-gray-1000)',
200
215
  color: 'var(--ds-background-100)',
201
- }, children: [_jsx(Send, { className: "h-4 w-4" }), "Resolve Hook"] }))] })] })), _jsx(AttributePanel, { data: displayData, moduleSpecifier: moduleSpecifier, expiredAt: run.expiredAt, isLoading: loading, error: error ?? undefined, onStreamClick: onStreamClick, onRunClick: onRunClick, onDecrypt: onDecrypt, isDecrypting: isDecrypting, resource: resource }), rawEvents && (_jsx(EventsList, { events: rawEvents, onLoadEventData: onLoadEventData, onStreamClick: onStreamClick, onRunClick: onRunClick, encryptionKey: encryptionKey, showSeparateEventOccurrenceTimestamps: showSeparateEventOccurrenceTimestamps }))] }) }), _jsx(ResolveHookModal, { isOpen: showResolveHookModal, onClose: () => setShowResolveHookModal(false), onSubmit: handleResolveHook, isSubmitting: resolvingHook })] }));
216
+ }, children: [_jsx(Send, { className: "h-4 w-4" }), "Resolve Hook"] }))] })] })), _jsx(AttributePanel, { data: displayData, moduleSpecifier: moduleSpecifier, moduleSourceUrl: moduleSourceUrl, expiredAt: run.expiredAt, isLoading: loading, error: error ?? undefined, onStreamClick: onStreamClick, onRunClick: onRunClick, onDecrypt: onDecrypt, isDecrypting: isDecrypting, resource: resource }), rawEvents && (_jsx(EventsList, { events: rawEvents, onLoadEventData: onLoadEventData, onStreamClick: onStreamClick, onRunClick: onRunClick, encryptionKey: encryptionKey, showSeparateEventOccurrenceTimestamps: showSeparateEventOccurrenceTimestamps }))] }) }), _jsx(ResolveHookModal, { isOpen: showResolveHookModal, onClose: () => setShowResolveHookModal(false), onSubmit: handleResolveHook, isSubmitting: resolvingHook })] }));
202
217
  }
203
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50aXR5LWRldGFpbC1wYW5lbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21wb25lbnRzL3NpZGViYXIvZW50aXR5LWRldGFpbC1wYW5lbC50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWSxDQUFDOztBQUdiLE9BQU8sSUFBSSxNQUFNLE1BQU0sQ0FBQztBQUN4QixPQUFPLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUN6QyxPQUFPLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sT0FBTyxDQUFDO0FBQ2xFLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzQyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUMzRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDbkQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN4RCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNoRSxPQUFPLEVBRUwscUJBQXFCLEdBQ3RCLE1BQU0sNEJBQTRCLENBQUM7QUFFcEMsMkRBQTJEO0FBQzNELFNBQVMsTUFBTSxDQUFDLElBQWE7SUFDM0IsT0FBTyxJQUFJLEtBQUssSUFBSSxJQUFJLE9BQU8sSUFBSSxLQUFLLFFBQVEsSUFBSSxRQUFRLElBQUksSUFBSSxDQUFDO0FBQ3ZFLENBQUM7QUF5QkQ7Ozs7O0dBS0c7QUFDSCxNQUFNLFVBQVUsaUJBQWlCLENBQUMsRUFDaEMsR0FBRyxFQUNILGFBQWEsRUFDYixVQUFVLEVBQ1YsZUFBZSxFQUNmLGFBQWEsRUFDYixlQUFlLEVBQ2YsYUFBYSxFQUNiLGFBQWEsRUFDYixTQUFTLEVBQ1QsWUFBWSxH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QUMzQixZQUFZLEVBQUUsYUFBYSxHQUMzQixJQUNFLENBQ1AsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIGNsaWVudCc7XG5cbmltcG9ydCB0eXBlIHsgRXZlbnQsIEhvb2ssIFdvcmtmbG93UnVuIH0gZnJvbSAnQHdvcmtmbG93L3dvcmxkJztcbmltcG9ydCBjbHN4IGZyb20gJ2Nsc3gnO1xuaW1wb3J0IHsgU2VuZCwgWmFwIH0gZnJvbSAnbHVjaWRlLXJlYWN0JztcbmltcG9ydCB7IHVzZUNhbGxiYWNrLCB1c2VFZmZlY3QsIHVzZU1lbW8sIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgdXNlVG9hc3QgfSBmcm9tICcuLi8uLi9saWIvdG9hc3QnO1xuaW1wb3J0IHsgRGVjcnlwdENsaWNrQ29udGV4dCB9IGZyb20gJy4uL3VpL2RhdGEtaW5zcGVjdG9yJztcbmltcG9ydCB7IEF0dHJpYnV0ZVBhbmVsIH0gZnJvbSAnLi9hdHRyaWJ1dGUtcGFuZWwnO1xuaW1wb3J0IHsgRXZlbnRzTGlzdCB9IGZyb20gJy4vZXZlbnRzLWxpc3QnO1xuaW1wb3J0IHsgUmVzb2x2ZUhvb2tNb2RhbCB9IGZyb20gJy4vcmVzb2x2ZS1ob29rLW1vZGFsJztcbmltcG9ydCB7IHVzZVNpZGViYXJEYXRhT3B0aW9uYWwgfSBmcm9tICcuL3NpZGViYXItZGF0YS1jb250ZXh0JztcbmltcG9ydCB7XG4gIHR5cGUgRmV0Y2hTcGFuRGV0YWlsLFxuICB1c2VTZWxlY3RlZFNwYW5EZXRhaWwsXG59IGZyb20gJy4vdXNlLXNlbGVjdGVkLXNwYW4tZGV0YWlsJztcblxuLy8gVHlwZSBndWFyZCBmb3IgcnVudGltZSB2YWxpZGF0aW9uIG9mIHNwYW4gYXR0cmlidXRlIGRhdGFcbmZ1bmN0aW9uIGlzSG9vayhkYXRhOiB1bmtub3duKTogZGF0YSBpcyBIb29rIHtcbiAgcmV0dXJuIGRhdGEgIT09IG51bGwgJiYgdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnICYmICdob29rSWQnIGluIGRhdGE7XG59XG5cbi8qKlxuICogSW5mbyBhYm91dCB0aGUgY3VycmVudGx5IHNlbGVjdGVkIHNwYW5cbiAqL1xuZXhwb3J0IHR5cGUgU3BhblNlbGVjdGlvbkluZm8gPSB7XG4gIHJlc291cmNlOiAncnVuJyB8ICdzdGVwJyB8ICdob29rJyB8ICdzbGVlcCc7XG4gIHJlc291cmNlSWQ6IHN0cmluZztcbiAgcnVuSWQ/OiBzdHJpbmc7XG59O1xuXG4vKipcbiAqIEluZm8gYWJvdXQgdGhlIHNlbGVjdGVkIHNwYW4gZnJvbSB0aGUgdHJhY2Ugdmlld2VyLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNlbGVjdGVkU3BhbkluZm8ge1xuICAvKiogVGhlIHJhdyBkYXRhIGZyb20gdGhlIHNwYW4gYXR0cmlidXRlcyAoc3RlcC9ydW4vaG9vayBvYmplY3QgZnJvbSB0aGUgdHJhY2UpICovXG4gIGRhdGE/OiB1bmtub3duO1xuICAvKiogVGhlIHNwYW4gcmVzb3VyY2UgdHlwZSAoZnJvbSBzcGFuIGF0dHJpYnV0ZXMpICovXG4gIHJlc291cmNlPzogc3RyaW5nO1xuICAvKiogVGhlIHNwYW4gSUQgKGNvcnJlbGF0aW9uSWQgZm9yIGZpbHRlcmluZyBldmVudHMpICovXG4gIHNwYW5JZD86IHN0cmluZztcbiAgLyoqIFJhdyBjb3JyZWxhdGVkIGV2ZW50cyBmcm9tIHRoZSBzdG9yZSAoTk9UIGZyb20gdGhlIHRyYWNlIHdvcmtlciBwaXBlbGluZSkgKi9cbiAgcmF3RXZlbnRzPzogRXZlbnRbXTtcbn1cblxuLyoqXG4gKiBQYW5lbCBjb21wb25lbnQgZm9yIHdvcmtmbG93IHRyYWNlcyB0aGF0IGRpc3BsYXlzIGVudGl0eSBkZXRhaWxzLlxuICpcbiAqIFRoaXMgY29tcG9uZW50IGlzIHJlbmRlcmVkIE9VVFNJREUgdGhlIHRyYWNlIHZpZXdlciBjb250ZXh0IOKAlCBpdFxuICogcmVjZWl2ZXMgYWxsIGRhdGEgdmlhIHByb3BzIHJhdGhlciB0aGFuIHJlYWRpbmcgZnJvbSBjb250ZXh0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gRW50aXR5RGV0YWlsUGFuZWwoe1xuICBydW4sXG4gIG9uU3RyZWFtQ2xpY2ssXG4gIG9uUnVuQ2xpY2ssXG4gIGZldGNoU3BhbkRldGFpbCxcbiAgb25XYWtlVXBTbGVlcCxcbiAgb25Mb2FkRXZlbnREYXRhLFxuICBvblJlc29sdmVIb29rLFxuICBlbmNyeXB0aW9uS2V5LFxuICBvbkRlY3J5cHQsXG4gIGlzRGVjcnlwdGluZyA9IGZhbHNlLFxuICBzZWxlY3RlZFNwYW4sXG4gIHNob3dTZXBhcmF0ZUV2ZW50T2NjdXJyZW5jZVRpbWVzdGFtcHMgPSBmYWxzZSxcbn06IHtcbiAgcnVuOiBXb3JrZmxvd1J1bjtcbiAgLyoqIENhbGxiYWNrIHdoZW4gYSBzdHJlYW0gcmVmZXJlbmNlIGlzIGNsaWNrZWQgKi9cbiAgb25TdHJlYW1DbGljaz86IChzdHJlYW1JZDogc3RyaW5nKSA9PiB2b2lkO1xuICAvKiogQ2FsbGJhY2sgd2hlbiBhIHJ1biByZWZlcmVuY2UgaXMgY2xpY2tlZCAqL1xuICBvblJ1bkNsaWNrPzogKHJ1bklkOiBzdHJpbmcpID0+IHZvaWQ7XG4gIGZldGNoU3BhbkRldGFpbDogRmV0Y2hTcGFuRGV0YWlsO1xuICAvKiogQ2FsbGJhY2sgdG8gd2FrZSB1cCBhIHBlbmRpbmcgc2xlZXAgY2FsbC4gKi9cbiAgb25XYWtlVXBTbGVlcD86IChcbiAgICBydW5JZDogc3RyaW5nLFxuICAgIGNvcnJlbGF0aW9uSWQ6IHN0cmluZ1xuICApID0+IFByb21pc2U8eyBzdG9wcGVkQ291bnQ6IG51bWJlciB9PjtcbiAgLyoqIENhbGxiYWNrIHRvIGxvYWQgZXZlbnQgZGF0YSBmb3IgYSBzcGVjaWZpYyBldmVudCAobGF6eSBsb2FkaW5nKSAqL1xuICBvbkxvYWRFdmVudERhdGE/OiAoXG4gICAgY29ycmVsYXRpb25JZDogc3RyaW5nLFxuICAgIGV2ZW50SWQ6IHN0cmluZ1xuICApID0+IFByb21pc2U8dW5rbm93biB8IG51bGw+O1xuICAvKiogQ2FsbGJhY2sgdG8gcmVzb2x2ZSBhIGhvb2sgd2l0aCBhIHBheWxvYWQuICovXG4gIG9uUmVzb2x2ZUhvb2s/OiAoXG4gICAgaG9va1Rva2VuOiBzdHJpbmcsXG4gICAgcGF5bG9hZDogdW5rbm93bixcbiAgICBob29rPzogSG9va1xuICApID0+IFByb21pc2U8dm9pZD47XG4gIC8qKiBFbmNyeXB0aW9uIGtleSAoYXZhaWxhYmxlIGFmdGVyIERlY3J5cHQgaXMgY2xpY2tlZCksIHVzZWQgdG8gcmUtbG9hZCBldmVudCBkYXRhICovXG4gIGVuY3J5cHRpb25LZXk/OiBVaW50OEFycmF5O1xuICAvKiogQ2FsbGJhY2sgdG8gaW5pdGlhdGUgZGVjcnlwdGlvbiBvZiBlbmNyeXB0ZWQgcnVuIGRhdGEgKi9cbiAgb25EZWNyeXB0PzogKCkgPT4gdm9pZDtcbiAgLyoqIFdoZXRoZXIgdGhlIGVuY3J5cHRpb24ga2V5IGlzIGN1cnJlbnRseSBiZWluZyBmZXRjaGVkICovXG4gIGlzRGVjcnlwdGluZz86IGJvb2xlYW47XG4gIC8qKiBJbmZvIGFib3V0IHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgc3BhbiBmcm9tIHRoZSB0cmFjZSB2aWV3ZXIgKi9cbiAgc2VsZWN0ZWRTcGFuOiBTZWxlY3RlZFNwYW5JbmZvIHwgbnVsbDtcbiAgLyoqIFNob3cgb2NjdXJyZWRBdCBzZXBhcmF0ZWx5IGluc3RlYWQgb2YgZm9sZGluZyBpdCBpbnRvIHRoZSBDcmVhdGVkIHRpbWVzdGFtcC4gKi9cbiAgc2hvd1NlcGFyYXRlRXZlbnRPY2N1cnJlbmNlVGltZXN0YW1wcz86IGJvb2xlYW47XG59KTogUmVhY3QuSlNYLkVsZW1lbnQgfCBudWxsIHtcbiAgY29uc3QgdG9hc3QgPSB1c2VUb2FzdCgpO1xuICBjb25zdCBbc3RvcHBpbmdTbGVlcCwgc2V0U3RvcHBpbmdTbGVlcF0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IFtzaG93UmVzb2x2ZUhvb2tNb2RhbCwgc2V0U2hvd1Jlc29sdmVIb29rTW9kYWxdID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBbcmVzb2x2aW5nSG9vaywgc2V0UmVzb2x2aW5nSG9va10gPSB1c2VTdGF0ZShmYWxzZSk7XG4gIC8vIFRyYWNrIGhvb2tzIHRoYXQgd2VyZSByZXNvbHZlZCBpbiB0aGlzIHNlc3Npb24gc28gdGhlIGJ1dHRvbiBoaWRlc1xuICAvLyBpbW1lZGlhdGVseSB3aXRob3V0IHdhaXRpbmcgZm9yIHRoZSBuZXh0IGV2ZW50IHBvbGwuXG4gIGNvbnN0IFtyZXNvbHZlZEhvb2tJZHMsIHNldFJlc29sdmVkSG9va0lkc10gPSB1c2VTdGF0ZTxTZXQ8c3RyaW5nPj4oXG4gICAgbmV3IFNldCgpXG4gICk7XG5cbiAgY29uc3Qgc2lkZWJhciA9IHVzZVNpZGViYXJEYXRhT3B0aW9uYWwoKTtcbiAgY29uc3QgaGFzRW5jcnlwdGVkRGF0YSA9IEJvb2xlYW4oc2lkZWJhcj8uaGFzRW5jcnlwdGVkRGF0YSAmJiAhZW5jcnlwdGlvbktleSk7XG5cbiAgY29uc3QgZGF0YSA9IHNlbGVjdGVkU3Bhbj8uZGF0YTtcbiAgY29uc3QgcmF3RXZlbnRzID0gc2VsZWN0ZWRTcGFuPy5yYXdFdmVudHM7XG4gIGNvbnN0IHJhd0V2ZW50c0xlbmd0aCA9IHJhd0V2ZW50cz8ubGVuZ3RoID8/IDA7XG5cbiAgY29uc3Qge1xuICAgIHN0YXR1cyxcbiAgICByZXNvdXJjZSxcbiAgICByZXNvdXJjZUlkLFxuICAgIGRpc3BsYXlEYXRhLFxuICAgIGRldGFpbDogbWF0Y2hlZFNwYW5EZXRhaWxEYXRhLFxuICAgIGVycm9yLFxuICB9ID0gdXNlU2VsZWN0ZWRTcGFuRGV0YWlsKHNlbGVjdGVkU3BhbiwgZmV0Y2hTcGFuRGV0YWlsKTtcbiAgY29uc3QgbG9hZGluZyA9IHN0YXR1cyA9PT0gJ2xvYWRpbmcnO1xuXG4gIC8vIENoZWNrIGlmIHRoaXMgc2xlZXAgaXMgc3RpbGwgcGVuZGluZyBhbmQgY2FuIGJlIHdva2VuIHVwXG4gIGNvbnN0IGNhbldha2VVcCA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIHZvaWQgcmF3RXZlbnRzTGVuZ3RoO1xuICAgIGlmIChyZXNvdXJjZSAhPT0gJ3NsZWVwJyB8fCAhcmF3RXZlbnRzKSByZXR1cm4gZmFsc2U7XG4gICAgY29uc3QgdGVybWluYWxTdGF0ZXMgPSBbJ2NvbXBsZXRlZCcsICdmYWlsZWQnLCAnY2FuY2VsbGVkJ107XG4gICAgaWYgKHRlcm1pbmFsU3RhdGVzLmluY2x1ZGVzKHJ1bi5zdGF0dXMpKSByZXR1cm4gZmFsc2U7XG4gICAgY29uc3QgaGFzV2FpdENyZWF0ZWQgPSByYXdFdmVudHMuc29tZShcbiAgICAgIChlKSA9PiBlLmV2ZW50VHlwZSA9PT0gJ3dhaXRfY3JlYXRlZCdcbiAgICApO1xuICAgIGlmICghaGFzV2FpdENyZWF0ZWQpIHJldHVybiBmYWxzZTtcbiAgICBjb25zdCBoYXNXYWl0Q29tcGxldGVkID0gcmF3RXZlbnRzLnNvbWUoXG4gICAgICAoZSkgPT4gZS5ldmVudFR5cGUgPT09ICd3YWl0X2NvbXBsZXRlZCdcbiAgICApO1xuICAgIHJldHVybiAhaGFzV2FpdENvbXBsZXRlZDtcbiAgfSwgW3Jlc291cmNlLCByYXdFdmVudHMsIHJhd0V2ZW50c0xlbmd0aCwgcnVuLnN0YXR1c10pO1xuXG4gIC8vIENoZWNrIGlmIHRoaXMgaG9vayBjYW4gYmUgcmVzb2x2ZWRcbiAgY29uc3QgY2FuUmVzb2x2ZUhvb2sgPSB1c2VNZW1vKCgpID0+IHtcbiAgICB2b2lkIHJhd0V2ZW50c0xlbmd0aDtcbiAgICBpZiAocmVzb3VyY2UgIT09ICdob29rJyB8fCAhcmF3RXZlbnRzIHx8ICFyZXNvdXJjZUlkKSByZXR1cm4gZmFsc2U7XG5cbiAgICAvLyBDaGVjayBpZiB3ZSBhbHJlYWR5IHJlc29sdmVkIHRoaXMgaG9vayBpbiB0aGlzIHNlc3Npb25cbiAgICBpZiAocmVzb2x2ZWRIb29rSWRzLmhhcyhyZXNvdXJjZUlkKSkgcmV0dXJuIGZhbHNlO1xuXG4gICAgY29uc3QgdGVybWluYWxTdGF0ZXMgPSBbJ2NvbXBsZXRlZCcsICdmYWlsZWQnLCAnY2FuY2VsbGVkJ107XG4gICAgaWYgKHRlcm1pbmFsU3RhdGVzLmluY2x1ZGVzKHJ1bi5zdGF0dXMpKSByZXR1cm4gZmFsc2U7XG4gICAgY29uc3QgaGFzSG9va0Rpc3Bvc2VkID0gcmF3RXZlbnRzLnNvbWUoXG4gICAgICAoZSkgPT4gZS5ldmVudFR5cGUgPT09ICdob29rX2Rpc3Bvc2VkJ1xuICAgICk7XG4gICAgaWYgKGhhc0hvb2tEaXNwb3NlZCkgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiB0cnVlO1xuICB9LCBbXG4gICAgcmVzb3VyY2UsXG4gICAgcmVzb3VyY2VJZCxcbiAgICByYXdFdmVudHMsXG4gICAgcmF3RXZlbnRzTGVuZ3RoLFxuICAgIHJ1bi5zdGF0dXMsXG4gICAgcmVzb2x2ZWRIb29rSWRzLFxuICBdKTtcblxuICAvLyBHZXQgdGhlIGhvb2sgdG9rZW4gZm9yIHJlc29sdmluZyAocHJlZmVyIGZldGNoZWQgZGF0YSwgdGhlbiBob29rcyBhcnJheSBmYWxsYmFjaylcbiAgY29uc3QgaG9va1Rva2VuID0gdXNlTWVtbygoKSA9PiB7XG4gICAgaWYgKHJlc291cmNlICE9PSAnaG9vaycgfHwgIXJlc291cmNlSWQpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgLy8gMS4gVHJ5IHRoZSBleHRlcm5hbGx5LWZldGNoZWQgZGV0YWlsIGRhdGEgZmlyc3RcbiAgICBpZiAoaXNIb29rKG1hdGNoZWRTcGFuRGV0YWlsRGF0YSkgJiYgbWF0Y2hlZFNwYW5EZXRhaWxEYXRhLnRva2VuKSB7XG4gICAgICByZXR1cm4gbWF0Y2hlZFNwYW5EZXRhaWxEYXRhLnRva2VuO1xuICAgIH1cbiAgICAvLyAyLiBUcnkgdGhlIHNwYW4ncyBpbmxpbmUgZGF0YSAocmVjb25zdHJ1Y3RlZCBmcm9tIGhvb2tfY3JlYXRlZCBldmVudClcbiAgICBpZiAoaXNIb29rKGRhdGEpICYmIChkYXRhIGFzIEhvb2spLnRva2VuKSB7XG4gICAgICByZXR1cm4gKGRhdGEgYXMgSG9vaykudG9rZW47XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH0sIFtyZXNvdXJjZSwgcmVzb3VyY2VJZCwgbWF0Y2hlZFNwYW5EZXRhaWxEYXRhLCBkYXRhXSk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoZXJyb3IgJiYgc2VsZWN0ZWRTcGFuICYmIHJlc291cmNlKSB7XG4gICAgICB0b2FzdC5lcnJvcihgRmFpbGVkIHRvIGxvYWQgJHtyZXNvdXJjZX0gZGV0YWlsc2AsIHtcbiAgICAgICAgZGVzY3JpcHRpb246IGVycm9yLm1lc3NhZ2UsXG4gICAgICB9KTtcbiAgICB9XG4gIH0sIFtlcnJvciwgcmVzb3VyY2UsIHNlbGVjdGVkU3Bhbl0pO1xuXG4gIGNvbnN0IGhhbmRsZVdha2VVcCA9IGFzeW5jICgpID0+IHtcbiAgICBpZiAoc3RvcHBpbmdTbGVlcCB8fCAhcmVzb3VyY2VJZCkgcmV0dXJuO1xuICAgIGlmICghb25XYWtlVXBTbGVlcCkge1xuICAgICAgdG9hc3QuZXJyb3IoJ1VuYWJsZSB0byB3YWtlIHVwIHNsZWVwJywge1xuICAgICAgICBkZXNjcmlwdGlvbjogJ05vIHdha2UtdXAgaGFuZGxlciBwcm92aWRlZC4nLFxuICAgICAgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIHNldFN0b3BwaW5nU2xlZXAodHJ1ZSk7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBvbldha2VVcFNsZWVwKHJ1bi5ydW5JZCwgcmVzb3VyY2VJZCk7XG4gICAgICBpZiAocmVzdWx0LnN0b3BwZWRDb3VudCA+IDApIHtcbiAgICAgICAgdG9hc3Quc3VjY2VzcygnUnVuIHdva2VuIHVwJywge1xuICAgICAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICAgICAgJ1RoZSBzbGVlcCBjYWxsIGhhcyBiZWVuIGludGVycnVwdGVkIGFuZCB0aGUgcnVuIHdva2VuIHVwLicsXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdG9hc3QuaW5mbygnU2xlZXAgYWxyZWFkeSBjb21wbGV0ZWQnLCB7XG4gICAgICAgICAgZGVzY3JpcHRpb246ICdUaGlzIHNsZWVwIGNhbGwgaGFzIGFscmVhZHkgZmluaXNoZWQuJyxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdGYWlsZWQgdG8gd2FrZSB1cCBydW46JywgZXJyKTtcbiAgICAgIHRvYXN0LmVycm9yKCdGYWlsZWQgdG8gd2FrZSB1cCBydW4nLCB7XG4gICAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICAgIGVyciBpbnN0YW5jZW9mIEVycm9yID8gZXJyLm1lc3NhZ2UgOiAnQW4gdW5rbm93biBlcnJvciBvY2N1cnJlZCcsXG4gICAgICB9KTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgc2V0U3RvcHBpbmdTbGVlcChmYWxzZSk7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGhhbmRsZVJlc29sdmVIb29rID0gdXNlQ2FsbGJhY2soXG4gICAgYXN5bmMgKHBheWxvYWQ6IHVua25vd24pID0+IHtcbiAgICAgIGlmIChyZXNvbHZpbmdIb29rKSByZXR1cm47XG4gICAgICBpZiAoIW9uUmVzb2x2ZUhvb2spIHtcbiAgICAgICAgdG9hc3QuZXJyb3IoJ1VuYWJsZSB0byByZXNvbHZlIGhvb2snLCB7XG4gICAgICAgICAgZGVzY3JpcHRpb246ICdObyByZXNvbHZlIGhhbmRsZXIgcHJvdmlkZWQuJyxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmICghaG9va1Rva2VuKSB7XG4gICAgICAgIHRvYXN0LmVycm9yKCdVbmFibGUgdG8gcmVzb2x2ZSBob29rJywge1xuICAgICAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICAgICAgJ01pc3NpbmcgaG9vayB0b2tlbi4gVHJ5IHJlZnJlc2hpbmcgdGhlIHJ1biBkYXRhIGFuZCByZXRyeS4nLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB0cnkge1xuICAgICAgICBzZXRSZXNvbHZpbmdIb29rKHRydWUpO1xuICAgICAgICBjb25zdCBjYW5kaWRhdGUgPSBtYXRjaGVkU3BhbkRldGFpbERhdGEgPz8gZGF0YTtcbiAgICAgICAgY29uc3QgaG9vayA9IGlzSG9vayhjYW5kaWRhdGUpID8gY2FuZGlkYXRlIDogdW5kZWZpbmVkO1xuICAgICAgICBhd2FpdCBvblJlc29sdmVIb29rKGhvb2tUb2tlbiwgcGF5bG9hZCwgaG9vayk7XG4gICAgICAgIHRvYXN0LnN1Y2Nlc3MoJ0hvb2sgcmVzb2x2ZWQnLCB7XG4gICAgICAgICAgZGVzY3JpcHRpb246ICdUaGUgcGF5bG9hZCBoYXMgYmVlbiBzZW50IGFuZCB0aGUgaG9vayByZXNvbHZlZC4nLFxuICAgICAgICB9KTtcbiAgICAgICAgc2V0U2hvd1Jlc29sdmVIb29rTW9kYWwoZmFsc2UpO1xuICAgICAgICAvLyBNYXJrIHRoaXMgaG9vayBhcyByZXNvbHZlZCBsb2NhbGx5IHNvIHRoZSBidXR0b24gaGlkZXMgaW1tZWRpYXRlbHlcbiAgICAgICAgaWYgKHJlc291cmNlSWQpIHtcbiAgICAgICAgICBzZXRSZXNvbHZlZEhvb2tJZHMoKHByZXYpID0+IG5ldyBTZXQocHJldikuYWRkKHJlc291cmNlSWQpKTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZhaWxlZCB0byByZXNvbHZlIGhvb2s6JywgZXJyKTtcbiAgICAgICAgdG9hc3QuZXJyb3IoJ0ZhaWxlZCB0byByZXNvbHZlIGhvb2snLCB7XG4gICAgICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgICAgICBlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyci5tZXNzYWdlIDogJ0FuIHVua25vd24gZXJyb3Igb2NjdXJyZWQnLFxuICAgICAgICB9KTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHNldFJlc29sdmluZ0hvb2soZmFsc2UpO1xuICAgICAgfVxuICAgIH0sXG4gICAgW29uUmVzb2x2ZUhvb2ssIGhvb2tUb2tlbiwgcmVzb2x2aW5nSG9vaywgbWF0Y2hlZFNwYW5EZXRhaWxEYXRhLCBkYXRhXVxuICApO1xuXG4gIGNvbnN0IG1vZHVsZVNwZWNpZmllciA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGNvbnN0IGRpc3BsYXlSZWNvcmQgPSBkaXNwbGF5RGF0YSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICBjb25zdCBkaXNwbGF5U3RlcE5hbWUgPSBkaXNwbGF5UmVjb3JkLnN0ZXBOYW1lO1xuICAgIGNvbnN0IGRpc3BsYXlXb3JrZmxvd05hbWUgPSBkaXNwbGF5UmVjb3JkLndvcmtmbG93TmFtZTtcbiAgICBpZiAodHlwZW9mIGRpc3BsYXlTdGVwTmFtZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHJldHVybiBkaXNwbGF5U3RlcE5hbWU7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgZGlzcGxheVdvcmtmbG93TmFtZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHJldHVybiBkaXNwbGF5V29ya2Zsb3dOYW1lO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIHJ1bi53b3JrZmxvd05hbWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm4gcnVuLndvcmtmbG93TmFtZTtcbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfSwgW2Rpc3BsYXlEYXRhLCBydW4ud29ya2Zsb3dOYW1lXSk7XG5cbiAgaWYgKCFzZWxlY3RlZFNwYW4gfHwgIXJlc291cmNlIHx8ICFyZXNvdXJjZUlkKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zdCBoYXNQZW5kaW5nQWN0aW9ucyA9XG4gICAgKHJlc291cmNlID09PSAnc2xlZXAnICYmIGNhbldha2VVcCkgfHxcbiAgICAocmVzb3VyY2UgPT09ICdob29rJyAmJiBjYW5SZXNvbHZlSG9vayk7XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaC1mdWxsIGZsZXgtY29sXCI+XG4gICAgICA8RGVjcnlwdENsaWNrQ29udGV4dC5Qcm92aWRlclxuICAgICAgICB2YWx1ZT17XG4gICAgICAgICAgb25EZWNyeXB0ID8geyBvbkRlY3J5cHQsIGlzRGVjcnlwdGluZywgaGFzRW5jcnlwdGVkRGF0YSB9IDogdW5kZWZpbmVkXG4gICAgICAgIH1cbiAgICAgID5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4LTEgb3ZlcmZsb3cteS1hdXRvIHB4LTQgcGItOFwiPlxuICAgICAgICAgIHtoYXNQZW5kaW5nQWN0aW9ucyAmJiAoXG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGNsYXNzTmFtZT1cIm1iLTQgcm91bmRlZC1sZyBib3JkZXIgcC0yXCJcbiAgICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICBib3JkZXJDb2xvcjogJ3ZhcigtLWRzLWdyYXktMzAwKScsXG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiAndmFyKC0tZHMtZ3JheS0xMDApJyxcbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPHBcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJtYi0yIHB4LTEgdGV4dC1bMTNweF0gZm9udC1tZWRpdW0gdXBwZXJjYXNlIHRyYWNraW5nLXdpZGVcIlxuICAgICAgICAgICAgICAgIHN0eWxlPXt7IGNvbG9yOiAndmFyKC0tZHMtZ3JheS03MDApJyB9fVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgQWN0aW9uc1xuICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBmbGV4LWNvbCBnYXAtMlwiPlxuICAgICAgICAgICAgICAgIHsvKiBXYWtlIHVwIGJ1dHRvbiBmb3IgcGVuZGluZyBzbGVlcCBjYWxscyAqL31cbiAgICAgICAgICAgICAgICB7cmVzb3VyY2UgPT09ICdzbGVlcCcgJiYgY2FuV2FrZVVwICYmIChcbiAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9e2hhbmRsZVdha2VVcH1cbiAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9e3N0b3BwaW5nU2xlZXB9XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17Y2xzeChcbiAgICAgICAgICAgICAgICAgICAgICAnZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgZ2FwLTIgcm91bmRlZC1tZCBweC0zIHB5LTIgdGV4dC1zbSBmb250LW1lZGl1bScsXG4gICAgICAgICAgICAgICAgICAgICAgJ2Rpc2FibGVkOm9wYWNpdHktNTAgZGlzYWJsZWQ6Y3Vyc29yLW5vdC1hbGxvd2VkIHRyYW5zaXRpb24tY29sb3JzJyxcbiAgICAgICAgICAgICAgICAgICAgICBzdG9wcGluZ1NsZWVwXG4gICAgICAgICAgICAgICAgICAgICAgICA/ICdvcGFjaXR5LTUwIGN1cnNvci1ub3QtYWxsb3dlZCdcbiAgICAgICAgICAgICAgICAgICAgICAgIDogJ2N1cnNvci1wb2ludGVyJ1xuICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6ICd2YXIoLS1kcy1hbWJlci0yMDApJyxcbiAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogJ3ZhcigtLWRzLWFtYmVyLTkwMCknLFxuICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8WmFwIGNsYXNzTmFtZT1cImgtNCB3LTRcIiAvPlxuICAgICAgICAgICAgICAgICAgICB7c3RvcHBpbmdTbGVlcCA/ICdXYWtpbmcgdXAuLi4nIDogJ1dha2UgVXAgU2xlZXAnfVxuICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgKX1cblxuICAgICAgICAgICAgICAgIHsvKiBSZXNvbHZlIGhvb2sgYnV0dG9uIGZvciBwZW5kaW5nIGhvb2tzICovfVxuICAgICAgICAgICAgICAgIHtyZXNvdXJjZSA9PT0gJ2hvb2snICYmIGNhblJlc29sdmVIb29rICYmIChcbiAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHNldFNob3dSZXNvbHZlSG9va01vZGFsKHRydWUpfVxuICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZD17cmVzb2x2aW5nSG9va31cbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtjbHN4KFxuICAgICAgICAgICAgICAgICAgICAgICdmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBnYXAtMiByb3VuZGVkLW1kIHB4LTMgcHktMiB0ZXh0LXNtIGZvbnQtbWVkaXVtJyxcbiAgICAgICAgICAgICAgICAgICAgICAnZGlzYWJsZWQ6b3BhY2l0eS01MCBkaXNhYmxlZDpjdXJzb3Itbm90LWFsbG93ZWQgdHJhbnNpdGlvbi1jb2xvcnMnLFxuICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmluZ0hvb2tcbiAgICAgICAgICAgICAgICAgICAgICAgID8gJ29wYWNpdHktNTAgY3Vyc29yLW5vdC1hbGxvd2VkJ1xuICAgICAgICAgICAgICAgICAgICAgICAgOiAnY3Vyc29yLXBvaW50ZXInXG4gICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogJ3ZhcigtLWRzLWdyYXktMTAwMCknLFxuICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiAndmFyKC0tZHMtYmFja2dyb3VuZC0xMDApJyxcbiAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPFNlbmQgY2xhc3NOYW1lPVwiaC00IHctNFwiIC8+XG4gICAgICAgICAgICAgICAgICAgIFJlc29sdmUgSG9va1xuICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICApfVxuXG4gICAgICAgICAgPEF0dHJpYnV0ZVBhbmVsXG4gICAgICAgICAgICBkYXRhPXtkaXNwbGF5RGF0YX1cbiAgICAgICAgICAgIG1vZHVsZVNwZWNpZmllcj17bW9kdWxlU3BlY2lmaWVyfVxuICAgICAgICAgICAgZXhwaXJlZEF0PXtydW4uZXhwaXJlZEF0fVxuICAgICAgICAgICAgaXNMb2FkaW5nPXtsb2FkaW5nfVxuICAgICAgICAgICAgZXJyb3I9e2Vycm9yID8/IHVuZGVmaW5lZH1cbiAgICAgICAgICAgIG9uU3RyZWFtQ2xpY2s9e29uU3RyZWFtQ2xpY2t9XG4gICAgICAgICAgICBvblJ1bkNsaWNrPXtvblJ1bkNsaWNrfVxuICAgICAgICAgICAgb25EZWNyeXB0PXtvbkRlY3J5cHR9XG4gICAgICAgICAgICBpc0RlY3J5cHRpbmc9e2lzRGVjcnlwdGluZ31cbiAgICAgICAgICAgIHJlc291cmNlPXtyZXNvdXJjZX1cbiAgICAgICAgICAvPlxuXG4gICAgICAgICAge3Jhd0V2ZW50cyAmJiAoXG4gICAgICAgICAgICA8RXZlbnRzTGlzdFxuICAgICAgICAgICAgICBldmVudHM9e3Jhd0V2ZW50c31cbiAgICAgICAgICAgICAgb25Mb2FkRXZlbnREYXRhPXtvbkxvYWRFdmVudERhdGF9XG4gICAgICAgICAgICAgIG9uU3RyZWFtQ2xpY2s9e29uU3RyZWFtQ2xpY2t9XG4gICAgICAgICAgICAgIG9uUnVuQ2xpY2s9e29uUnVuQ2xpY2t9XG4gICAgICAgICAgICAgIGVuY3J5cHRpb25LZXk9e2VuY3J5cHRpb25LZXl9XG4gICAgICAgICAgICAgIHNob3dTZXBhcmF0ZUV2ZW50T2NjdXJyZW5jZVRpbWVzdGFtcHM9e1xuICAgICAgICAgICAgICAgIHNob3dTZXBhcmF0ZUV2ZW50T2NjdXJyZW5jZVRpbWVzdGFtcHNcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApfVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvRGVjcnlwdENsaWNrQ29udGV4dC5Qcm92aWRlcj5cblxuICAgICAgey8qIFJlc29sdmUgSG9vayBNb2RhbCAqL31cbiAgICAgIDxSZXNvbHZlSG9va01vZGFsXG4gICAgICAgIGlzT3Blbj17c2hvd1Jlc29sdmVIb29rTW9kYWx9XG4gICAgICAgIG9uQ2xvc2U9eygpID0+IHNldFNob3dSZXNvbHZlSG9va01vZGFsKGZhbHNlKX1cbiAgICAgICAgb25TdWJtaXQ9e2hhbmRsZVJlc29sdmVIb29rfVxuICAgICAgICBpc1N1Ym1pdHRpbmc9e3Jlc29sdmluZ0hvb2t9XG4gICAgICAvPlxuICAgIDwvZGl2PlxuICApO1xufVxuIl19
218
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50aXR5LWRldGFpbC1wYW5lbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21wb25lbnRzL3NpZGViYXIvZW50aXR5LWRldGFpbC1wYW5lbC50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWSxDQUFDOztBQUViLE9BQU8sRUFBRSxhQUFhLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUU5RSxPQUFPLElBQUksTUFBTSxNQUFNLENBQUM7QUFDeEIsT0FBTyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDekMsT0FBTyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLE9BQU8sQ0FBQztBQUNsRSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDM0MsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDeEQsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDaEUsT0FBTyxFQUVMLHFCQUFxQixHQUN0QixNQUFNLDRCQUE0QixDQUFDO0FBRXBDLDJEQUEyRDtBQUMzRCxTQUFTLE1BQU0sQ0FBQyxJQUFhO0lBQzNCLE9BQU8sSUFBSSxLQUFLLElBQUksSUFBSSxPQUFPLElBQUksS0FBSyxRQUFRLElBQUksUUFBUSxJQUFJLElBQUksQ0FBQztBQUN2RSxDQUFDO0FBeUJEOzs7OztHQUtHO0FBQ0gsTUFBTSxVQUFVLGlCQUFpQixDQUFDLEVBQ2hDLEdBQUcsRUFDSCxhQUFhLEVBQ2IsVUFBVSxFQUNWLGVBQWUsRUFDZixh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LENBQ1YsSUFDRyxJQUNGLENBQ1AsRUFFRCxLQUFDLGNBQWMsSUFDYixJQUFJLEVBQUUsV0FBVyxFQUNqQixlQUFlLEVBQUUsZUFBZSxFQUNoQyxlQUFlLEVBQUUsZUFBZSxFQUNoQyxTQUFTLEVBQUUsR0FBRyxDQUFDLFNBQVMsRUFDeEIsU0FBUyxFQUFFLE9BQU8sRUFDbEIsS0FBSyxFQUFFLEtBQUssSUFBSSxTQUFTLEVBQ3pCLGFBQWEsRUFBRSxhQUFhLEVBQzVCLFVBQVUsRUFBRSxVQUFVLEVBQ3RCLFNBQVMsRUFBRSxTQUFTLEVBQ3BCLFlBQVksRUFBRSxZQUFZLEVBQzFCLFFBQVEsRUFBRSxRQUFRLEdBQ2xCLEVBRUQsU0FBUyxJQUFJLENBQ1osS0FBQyxVQUFVLElBQ1QsTUFBTSxFQUFFLFNBQVMsRUFDakIsZUFBZSxFQUFFLGVBQWUsRUFDaEMsYUFBYSxFQUFFLGFBQWEsRUFDNUIsVUFBVSxFQUFFLFVBQVUsRUFDdEIsYUFBYSxFQUFFLGFBQWEsRUFDNUIscUNBQXFDLEVBQ25DLHFDQUFxQyxHQUV2QyxDQUNILElBQ0csR0FDdUIsRUFHL0IsS0FBQyxnQkFBZ0IsSUFDZixNQUFNLEVBQUUsb0JBQW9CLEVBQzVCLE9BQU8sRUFBRSxHQUFHLEVBQUUsQ0FBQyx1QkFBdUIsQ0FBQyxLQUFLLENBQUMsRUFDN0MsUUFBUSxFQUFFLGlCQUFpQixFQUMzQixZQUFZLEVBQUUsYUFBYSxHQUMzQixJQUNFLENBQ1AsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIGNsaWVudCc7XG5cbmltcG9ydCB7IHBhcnNlU3RlcE5hbWUsIHBhcnNlV29ya2Zsb3dOYW1lIH0gZnJvbSAnQHdvcmtmbG93L3V0aWxzL3BhcnNlLW5hbWUnO1xuaW1wb3J0IHR5cGUgeyBFdmVudCwgSG9vaywgV29ya2Zsb3dSdW4gfSBmcm9tICdAd29ya2Zsb3cvd29ybGQnO1xuaW1wb3J0IGNsc3ggZnJvbSAnY2xzeCc7XG5pbXBvcnQgeyBTZW5kLCBaYXAgfSBmcm9tICdsdWNpZGUtcmVhY3QnO1xuaW1wb3J0IHsgdXNlQ2FsbGJhY2ssIHVzZUVmZmVjdCwgdXNlTWVtbywgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyB1c2VUb2FzdCB9IGZyb20gJy4uLy4uL2xpYi90b2FzdCc7XG5pbXBvcnQgeyBEZWNyeXB0Q2xpY2tDb250ZXh0IH0gZnJvbSAnLi4vdWkvZGF0YS1pbnNwZWN0b3InO1xuaW1wb3J0IHsgQXR0cmlidXRlUGFuZWwgfSBmcm9tICcuL2F0dHJpYnV0ZS1wYW5lbCc7XG5pbXBvcnQgeyBFdmVudHNMaXN0IH0gZnJvbSAnLi9ldmVudHMtbGlzdCc7XG5pbXBvcnQgeyBSZXNvbHZlSG9va01vZGFsIH0gZnJvbSAnLi9yZXNvbHZlLWhvb2stbW9kYWwnO1xuaW1wb3J0IHsgdXNlU2lkZWJhckRhdGFPcHRpb25hbCB9IGZyb20gJy4vc2lkZWJhci1kYXRhLWNvbnRleHQnO1xuaW1wb3J0IHtcbiAgdHlwZSBGZXRjaFNwYW5EZXRhaWwsXG4gIHVzZVNlbGVjdGVkU3BhbkRldGFpbCxcbn0gZnJvbSAnLi91c2Utc2VsZWN0ZWQtc3Bhbi1kZXRhaWwnO1xuXG4vLyBUeXBlIGd1YXJkIGZvciBydW50aW1lIHZhbGlkYXRpb24gb2Ygc3BhbiBhdHRyaWJ1dGUgZGF0YVxuZnVuY3Rpb24gaXNIb29rKGRhdGE6IHVua25vd24pOiBkYXRhIGlzIEhvb2sge1xuICByZXR1cm4gZGF0YSAhPT0gbnVsbCAmJiB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgJiYgJ2hvb2tJZCcgaW4gZGF0YTtcbn1cblxuLyoqXG4gKiBJbmZvIGFib3V0IHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgc3BhblxuICovXG5leHBvcnQgdHlwZSBTcGFuU2VsZWN0aW9uSW5mbyA9IHtcbiAgcmVzb3VyY2U6ICdydW4nIHwgJ3N0ZXAnIHwgJ2hvb2snIHwgJ3NsZWVwJztcbiAgcmVzb3VyY2VJZDogc3RyaW5nO1xuICBydW5JZD86IHN0cmluZztcbn07XG5cbi8qKlxuICogSW5mbyBhYm91dCB0aGUgc2VsZWN0ZWQgc3BhbiBmcm9tIHRoZSB0cmFjZSB2aWV3ZXIuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2VsZWN0ZWRTcGFuSW5mbyB7XG4gIC8qKiBUaGUgcmF3IGRhdGEgZnJvbSB0aGUgc3BhbiBhdHRyaWJ1dGVzIChzdGVwL3J1bi9ob29rIG9iamVjdCBmcm9tIHRoZSB0cmFjZSkgKi9cbiAgZGF0YT86IHVua25vd247XG4gIC8qKiBUaGUgc3BhbiByZXNvdXJjZSB0eXBlIChmcm9tIHNwYW4gYXR0cmlidXRlcykgKi9cbiAgcmVzb3VyY2U/OiBzdHJpbmc7XG4gIC8qKiBUaGUgc3BhbiBJRCAoY29ycmVsYXRpb25JZCBmb3IgZmlsdGVyaW5nIGV2ZW50cykgKi9cbiAgc3BhbklkPzogc3RyaW5nO1xuICAvKiogUmF3IGNvcnJlbGF0ZWQgZXZlbnRzIGZyb20gdGhlIHN0b3JlIChOT1QgZnJvbSB0aGUgdHJhY2Ugd29ya2VyIHBpcGVsaW5lKSAqL1xuICByYXdFdmVudHM/OiBFdmVudFtdO1xufVxuXG4vKipcbiAqIFBhbmVsIGNvbXBvbmVudCBmb3Igd29ya2Zsb3cgdHJhY2VzIHRoYXQgZGlzcGxheXMgZW50aXR5IGRldGFpbHMuXG4gKlxuICogVGhpcyBjb21wb25lbnQgaXMgcmVuZGVyZWQgT1VUU0lERSB0aGUgdHJhY2Ugdmlld2VyIGNvbnRleHQg4oCUIGl0XG4gKiByZWNlaXZlcyBhbGwgZGF0YSB2aWEgcHJvcHMgcmF0aGVyIHRoYW4gcmVhZGluZyBmcm9tIGNvbnRleHQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBFbnRpdHlEZXRhaWxQYW5lbCh7XG4gIHJ1bixcbiAgb25TdHJlYW1DbGljayxcbiAgb25SdW5DbGljayxcbiAgZmV0Y2hTcGFuRGV0YWlsLFxuICBvbldha2VVcFNsZWVwLFxuICBvbkxvYWRFdmVudERhdGEsXG4gIG9uUmVzb2x2ZUhvb2ssXG4gIGVuY3J5cHRpb25LZXksXG4gIG9uRGVjcnlwdCxcbiAgaXNEZWNyeXB0aW5nID0gZmFsc2UsXG4gIHNlbGVjdGVkU3BhbixcbiAgc2hvd1NlcGFyYXRlRXZlbnRPY2N1cnJlbmNlVGltZXN0YW1wcyA9IGZhbHNlLFxuICBnZXRNb2R1bGVTb3VyY2VVcmwsXG59OiB7XG4gIHJ1bjogV29ya2Zsb3dSdW47XG4gIC8qKiBDYWxsYmFjayB3aGVuIGEgc3RyZWFtIHJlZmVyZW5jZSBpcyBjbGlja2VkICovXG4gIG9uU3RyZWFtQ2xpY2s/OiAoc3RyZWFtSWQ6IHN0cmluZykgPT4gdm9pZDtcbiAgLyoqIENhbGxiYWNrIHdoZW4gYSBydW4gcmVmZXJlbmNlIGlzIGNsaWNrZWQgKi9cbiAgb25SdW5DbGljaz86IChydW5JZDogc3RyaW5nKSA9PiB2b2lkO1xuICBmZXRjaFNwYW5EZXRhaWw6IEZldGNoU3BhbkRldGFpbDtcbiAgLyoqIENhbGxiYWNrIHRvIHdha2UgdXAgYSBwZW5kaW5nIHNsZWVwIGNhbGwuICovXG4gIG9uV2FrZVVwU2xlZXA/OiAoXG4gICAgcnVuSWQ6IHN0cmluZyxcbiAgICBjb3JyZWxhdGlvbklkOiBzdHJpbmdcbiAgKSA9PiBQcm9taXNlPHsgc3RvcHBlZENvdW50OiBudW1iZXIgfT47XG4gIC8qKiBDYWxsYmFjayB0byBsb2FkIGV2ZW50IGRhdGEgZm9yIGEgc3BlY2lmaWMgZXZlbnQgKGxhenkgbG9hZGluZykgKi9cbiAgb25Mb2FkRXZlbnREYXRhPzogKFxuICAgIGNvcnJlbGF0aW9uSWQ6IHN0cmluZyxcbiAgICBldmVudElkOiBzdHJpbmdcbiAgKSA9PiBQcm9taXNlPHVua25vd24gfCBudWxsPjtcbiAgLyoqIENhbGxiYWNrIHRvIHJlc29sdmUgYSBob29rIHdpdGggYSBwYXlsb2FkLiAqL1xuICBvblJlc29sdmVIb29rPzogKFxuICAgIGhvb2tUb2tlbjogc3RyaW5nLFxuICAgIHBheWxvYWQ6IHVua25vd24sXG4gICAgaG9vaz86IEhvb2tcbiAgKSA9PiBQcm9taXNlPHZvaWQ+O1xuICAvKiogRW5jcnlwdGlvbiBrZXkgKGF2YWlsYWJsZSBhZnRlciBEZWNyeXB0IGlzIGNsaWNrZWQpLCB1c2VkIHRvIHJlLWxvYWQgZXZlbnQgZGF0YSAqL1xuICBlbmNyeXB0aW9uS2V5PzogVWludDhBcnJheTtcbiAgLyoqIENhbGxiYWNrIHRvIGluaXRpYXRlIGRlY3J5cHRpb24gb2YgZW5jcnlwdGVkIHJ1biBkYXRhICovXG4gIG9uRGVjcnlwdD86ICgpID0+IHZvaWQ7XG4gIC8qKiBXaGV0aGVyIHRoZSBlbmNyeXB0aW9uIGtleSBpcyBjdXJyZW50bHkgYmVpbmcgZmV0Y2hlZCAqL1xuICBpc0RlY3J5cHRpbmc/OiBib29sZWFuO1xuICAvKiogSW5mbyBhYm91dCB0aGUgY3VycmVudGx5IHNlbGVjdGVkIHNwYW4gZnJvbSB0aGUgdHJhY2Ugdmlld2VyICovXG4gIHNlbGVjdGVkU3BhbjogU2VsZWN0ZWRTcGFuSW5mbyB8IG51bGw7XG4gIC8qKiBTaG93IG9jY3VycmVkQXQgc2VwYXJhdGVseSBpbnN0ZWFkIG9mIGZvbGRpbmcgaXQgaW50byB0aGUgQ3JlYXRlZCB0aW1lc3RhbXAuICovXG4gIHNob3dTZXBhcmF0ZUV2ZW50T2NjdXJyZW5jZVRpbWVzdGFtcHM/OiBib29sZWFuO1xuICBnZXRNb2R1bGVTb3VyY2VVcmw/OiAoaW5mbzoge1xuICAgIG1vZHVsZVNwZWNpZmllcjogc3RyaW5nO1xuICAgIGRlcGxveW1lbnRJZDogc3RyaW5nO1xuICB9KSA9PiBzdHJpbmcgfCB1bmRlZmluZWQ7XG59KTogUmVhY3QuSlNYLkVsZW1lbnQgfCBudWxsIHtcbiAgY29uc3QgdG9hc3QgPSB1c2VUb2FzdCgpO1xuICBjb25zdCBbc3RvcHBpbmdTbGVlcCwgc2V0U3RvcHBpbmdTbGVlcF0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IFtzaG93UmVzb2x2ZUhvb2tNb2RhbCwgc2V0U2hvd1Jlc29sdmVIb29rTW9kYWxdID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBbcmVzb2x2aW5nSG9vaywgc2V0UmVzb2x2aW5nSG9va10gPSB1c2VTdGF0ZShmYWxzZSk7XG4gIC8vIFRyYWNrIGhvb2tzIHRoYXQgd2VyZSByZXNvbHZlZCBpbiB0aGlzIHNlc3Npb24gc28gdGhlIGJ1dHRvbiBoaWRlc1xuICAvLyBpbW1lZGlhdGVseSB3aXRob3V0IHdhaXRpbmcgZm9yIHRoZSBuZXh0IGV2ZW50IHBvbGwuXG4gIGNvbnN0IFtyZXNvbHZlZEhvb2tJZHMsIHNldFJlc29sdmVkSG9va0lkc10gPSB1c2VTdGF0ZTxTZXQ8c3RyaW5nPj4oXG4gICAgbmV3IFNldCgpXG4gICk7XG5cbiAgY29uc3Qgc2lkZWJhciA9IHVzZVNpZGViYXJEYXRhT3B0aW9uYWwoKTtcbiAgY29uc3QgaGFzRW5jcnlwdGVkRGF0YSA9IEJvb2xlYW4oc2lkZWJhcj8uaGFzRW5jcnlwdGVkRGF0YSAmJiAhZW5jcnlwdGlvbktleSk7XG5cbiAgY29uc3QgZGF0YSA9IHNlbGVjdGVkU3Bhbj8uZGF0YTtcbiAgY29uc3QgcmF3RXZlbnRzID0gc2VsZWN0ZWRTcGFuPy5yYXdFdmVudHM7XG4gIGNvbnN0IHJhd0V2ZW50c0xlbmd0aCA9IHJhd0V2ZW50cz8ubGVuZ3RoID8/IDA7XG5cbiAgY29uc3Qge1xuICAgIHN0YXR1cyxcbiAgICByZXNvdXJjZSxcbiAgICByZXNvdXJjZUlkLFxuICAgIGRpc3BsYXlEYXRhLFxuICAgIGRldGFpbDogbWF0Y2hlZFNwYW5EZXRhaWxEYXRhLFxuICAgIGVycm9yLFxuICB9ID0gdXNlU2VsZWN0ZWRTcGFuRGV0YWlsKHNlbGVjdGVkU3BhbiwgZmV0Y2hTcGFuRGV0YWlsKTtcbiAgY29uc3QgbG9hZGluZyA9IHN0YXR1cyA9PT0gJ2xvYWRpbmcnO1xuXG4gIC8vIENoZWNrIGlmIHRoaXMgc2xlZXAgaXMgc3RpbGwgcGVuZGluZyBhbmQgY2FuIGJlIHdva2VuIHVwXG4gIGNvbnN0IGNhbldha2VVcCA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIHZvaWQgcmF3RXZlbnRzTGVuZ3RoO1xuICAgIGlmIChyZXNvdXJjZSAhPT0gJ3NsZWVwJyB8fCAhcmF3RXZlbnRzKSByZXR1cm4gZmFsc2U7XG4gICAgY29uc3QgdGVybWluYWxTdGF0ZXMgPSBbJ2NvbXBsZXRlZCcsICdmYWlsZWQnLCAnY2FuY2VsbGVkJ107XG4gICAgaWYgKHRlcm1pbmFsU3RhdGVzLmluY2x1ZGVzKHJ1bi5zdGF0dXMpKSByZXR1cm4gZmFsc2U7XG4gICAgY29uc3QgaGFzV2FpdENyZWF0ZWQgPSByYXdFdmVudHMuc29tZShcbiAgICAgIChlKSA9PiBlLmV2ZW50VHlwZSA9PT0gJ3dhaXRfY3JlYXRlZCdcbiAgICApO1xuICAgIGlmICghaGFzV2FpdENyZWF0ZWQpIHJldHVybiBmYWxzZTtcbiAgICBjb25zdCBoYXNXYWl0Q29tcGxldGVkID0gcmF3RXZlbnRzLnNvbWUoXG4gICAgICAoZSkgPT4gZS5ldmVudFR5cGUgPT09ICd3YWl0X2NvbXBsZXRlZCdcbiAgICApO1xuICAgIHJldHVybiAhaGFzV2FpdENvbXBsZXRlZDtcbiAgfSwgW3Jlc291cmNlLCByYXdFdmVudHMsIHJhd0V2ZW50c0xlbmd0aCwgcnVuLnN0YXR1c10pO1xuXG4gIC8vIENoZWNrIGlmIHRoaXMgaG9vayBjYW4gYmUgcmVzb2x2ZWRcbiAgY29uc3QgY2FuUmVzb2x2ZUhvb2sgPSB1c2VNZW1vKCgpID0+IHtcbiAgICB2b2lkIHJhd0V2ZW50c0xlbmd0aDtcbiAgICBpZiAocmVzb3VyY2UgIT09ICdob29rJyB8fCAhcmF3RXZlbnRzIHx8ICFyZXNvdXJjZUlkKSByZXR1cm4gZmFsc2U7XG5cbiAgICAvLyBDaGVjayBpZiB3ZSBhbHJlYWR5IHJlc29sdmVkIHRoaXMgaG9vayBpbiB0aGlzIHNlc3Npb25cbiAgICBpZiAocmVzb2x2ZWRIb29rSWRzLmhhcyhyZXNvdXJjZUlkKSkgcmV0dXJuIGZhbHNlO1xuXG4gICAgY29uc3QgdGVybWluYWxTdGF0ZXMgPSBbJ2NvbXBsZXRlZCcsICdmYWlsZWQnLCAnY2FuY2VsbGVkJ107XG4gICAgaWYgKHRlcm1pbmFsU3RhdGVzLmluY2x1ZGVzKHJ1bi5zdGF0dXMpKSByZXR1cm4gZmFsc2U7XG4gICAgY29uc3QgaGFzSG9va0Rpc3Bvc2VkID0gcmF3RXZlbnRzLnNvbWUoXG4gICAgICAoZSkgPT4gZS5ldmVudFR5cGUgPT09ICdob29rX2Rpc3Bvc2VkJ1xuICAgICk7XG4gICAgaWYgKGhhc0hvb2tEaXNwb3NlZCkgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiB0cnVlO1xuICB9LCBbXG4gICAgcmVzb3VyY2UsXG4gICAgcmVzb3VyY2VJZCxcbiAgICByYXdFdmVudHMsXG4gICAgcmF3RXZlbnRzTGVuZ3RoLFxuICAgIHJ1bi5zdGF0dXMsXG4gICAgcmVzb2x2ZWRIb29rSWRzLFxuICBdKTtcblxuICAvLyBHZXQgdGhlIGhvb2sgdG9rZW4gZm9yIHJlc29sdmluZyAocHJlZmVyIGZldGNoZWQgZGF0YSwgdGhlbiBob29rcyBhcnJheSBmYWxsYmFjaylcbiAgY29uc3QgaG9va1Rva2VuID0gdXNlTWVtbygoKSA9PiB7XG4gICAgaWYgKHJlc291cmNlICE9PSAnaG9vaycgfHwgIXJlc291cmNlSWQpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgLy8gMS4gVHJ5IHRoZSBleHRlcm5hbGx5LWZldGNoZWQgZGV0YWlsIGRhdGEgZmlyc3RcbiAgICBpZiAoaXNIb29rKG1hdGNoZWRTcGFuRGV0YWlsRGF0YSkgJiYgbWF0Y2hlZFNwYW5EZXRhaWxEYXRhLnRva2VuKSB7XG4gICAgICByZXR1cm4gbWF0Y2hlZFNwYW5EZXRhaWxEYXRhLnRva2VuO1xuICAgIH1cbiAgICAvLyAyLiBUcnkgdGhlIHNwYW4ncyBpbmxpbmUgZGF0YSAocmVjb25zdHJ1Y3RlZCBmcm9tIGhvb2tfY3JlYXRlZCBldmVudClcbiAgICBpZiAoaXNIb29rKGRhdGEpICYmIChkYXRhIGFzIEhvb2spLnRva2VuKSB7XG4gICAgICByZXR1cm4gKGRhdGEgYXMgSG9vaykudG9rZW47XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH0sIFtyZXNvdXJjZSwgcmVzb3VyY2VJZCwgbWF0Y2hlZFNwYW5EZXRhaWxEYXRhLCBkYXRhXSk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoZXJyb3IgJiYgc2VsZWN0ZWRTcGFuICYmIHJlc291cmNlKSB7XG4gICAgICB0b2FzdC5lcnJvcihgRmFpbGVkIHRvIGxvYWQgJHtyZXNvdXJjZX0gZGV0YWlsc2AsIHtcbiAgICAgICAgZGVzY3JpcHRpb246IGVycm9yLm1lc3NhZ2UsXG4gICAgICB9KTtcbiAgICB9XG4gIH0sIFtlcnJvciwgcmVzb3VyY2UsIHNlbGVjdGVkU3Bhbl0pO1xuXG4gIGNvbnN0IGhhbmRsZVdha2VVcCA9IGFzeW5jICgpID0+IHtcbiAgICBpZiAoc3RvcHBpbmdTbGVlcCB8fCAhcmVzb3VyY2VJZCkgcmV0dXJuO1xuICAgIGlmICghb25XYWtlVXBTbGVlcCkge1xuICAgICAgdG9hc3QuZXJyb3IoJ1VuYWJsZSB0byB3YWtlIHVwIHNsZWVwJywge1xuICAgICAgICBkZXNjcmlwdGlvbjogJ05vIHdha2UtdXAgaGFuZGxlciBwcm92aWRlZC4nLFxuICAgICAgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIHNldFN0b3BwaW5nU2xlZXAodHJ1ZSk7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBvbldha2VVcFNsZWVwKHJ1bi5ydW5JZCwgcmVzb3VyY2VJZCk7XG4gICAgICBpZiAocmVzdWx0LnN0b3BwZWRDb3VudCA+IDApIHtcbiAgICAgICAgdG9hc3Quc3VjY2VzcygnUnVuIHdva2VuIHVwJywge1xuICAgICAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICAgICAgJ1RoZSBzbGVlcCBjYWxsIGhhcyBiZWVuIGludGVycnVwdGVkIGFuZCB0aGUgcnVuIHdva2VuIHVwLicsXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdG9hc3QuaW5mbygnU2xlZXAgYWxyZWFkeSBjb21wbGV0ZWQnLCB7XG4gICAgICAgICAgZGVzY3JpcHRpb246ICdUaGlzIHNsZWVwIGNhbGwgaGFzIGFscmVhZHkgZmluaXNoZWQuJyxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdGYWlsZWQgdG8gd2FrZSB1cCBydW46JywgZXJyKTtcbiAgICAgIHRvYXN0LmVycm9yKCdGYWlsZWQgdG8gd2FrZSB1cCBydW4nLCB7XG4gICAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICAgIGVyciBpbnN0YW5jZW9mIEVycm9yID8gZXJyLm1lc3NhZ2UgOiAnQW4gdW5rbm93biBlcnJvciBvY2N1cnJlZCcsXG4gICAgICB9KTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgc2V0U3RvcHBpbmdTbGVlcChmYWxzZSk7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGhhbmRsZVJlc29sdmVIb29rID0gdXNlQ2FsbGJhY2soXG4gICAgYXN5bmMgKHBheWxvYWQ6IHVua25vd24pID0+IHtcbiAgICAgIGlmIChyZXNvbHZpbmdIb29rKSByZXR1cm47XG4gICAgICBpZiAoIW9uUmVzb2x2ZUhvb2spIHtcbiAgICAgICAgdG9hc3QuZXJyb3IoJ1VuYWJsZSB0byByZXNvbHZlIGhvb2snLCB7XG4gICAgICAgICAgZGVzY3JpcHRpb246ICdObyByZXNvbHZlIGhhbmRsZXIgcHJvdmlkZWQuJyxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmICghaG9va1Rva2VuKSB7XG4gICAgICAgIHRvYXN0LmVycm9yKCdVbmFibGUgdG8gcmVzb2x2ZSBob29rJywge1xuICAgICAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICAgICAgJ01pc3NpbmcgaG9vayB0b2tlbi4gVHJ5IHJlZnJlc2hpbmcgdGhlIHJ1biBkYXRhIGFuZCByZXRyeS4nLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB0cnkge1xuICAgICAgICBzZXRSZXNvbHZpbmdIb29rKHRydWUpO1xuICAgICAgICBjb25zdCBjYW5kaWRhdGUgPSBtYXRjaGVkU3BhbkRldGFpbERhdGEgPz8gZGF0YTtcbiAgICAgICAgY29uc3QgaG9vayA9IGlzSG9vayhjYW5kaWRhdGUpID8gY2FuZGlkYXRlIDogdW5kZWZpbmVkO1xuICAgICAgICBhd2FpdCBvblJlc29sdmVIb29rKGhvb2tUb2tlbiwgcGF5bG9hZCwgaG9vayk7XG4gICAgICAgIHRvYXN0LnN1Y2Nlc3MoJ0hvb2sgcmVzb2x2ZWQnLCB7XG4gICAgICAgICAgZGVzY3JpcHRpb246ICdUaGUgcGF5bG9hZCBoYXMgYmVlbiBzZW50IGFuZCB0aGUgaG9vayByZXNvbHZlZC4nLFxuICAgICAgICB9KTtcbiAgICAgICAgc2V0U2hvd1Jlc29sdmVIb29rTW9kYWwoZmFsc2UpO1xuICAgICAgICAvLyBNYXJrIHRoaXMgaG9vayBhcyByZXNvbHZlZCBsb2NhbGx5IHNvIHRoZSBidXR0b24gaGlkZXMgaW1tZWRpYXRlbHlcbiAgICAgICAgaWYgKHJlc291cmNlSWQpIHtcbiAgICAgICAgICBzZXRSZXNvbHZlZEhvb2tJZHMoKHByZXYpID0+IG5ldyBTZXQocHJldikuYWRkKHJlc291cmNlSWQpKTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZhaWxlZCB0byByZXNvbHZlIGhvb2s6JywgZXJyKTtcbiAgICAgICAgdG9hc3QuZXJyb3IoJ0ZhaWxlZCB0byByZXNvbHZlIGhvb2snLCB7XG4gICAgICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgICAgICBlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyci5tZXNzYWdlIDogJ0FuIHVua25vd24gZXJyb3Igb2NjdXJyZWQnLFxuICAgICAgICB9KTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHNldFJlc29sdmluZ0hvb2soZmFsc2UpO1xuICAgICAgfVxuICAgIH0sXG4gICAgW29uUmVzb2x2ZUhvb2ssIGhvb2tUb2tlbiwgcmVzb2x2aW5nSG9vaywgbWF0Y2hlZFNwYW5EZXRhaWxEYXRhLCBkYXRhXVxuICApO1xuXG4gIGNvbnN0IG1vZHVsZVNwZWNpZmllciA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGNvbnN0IGRpc3BsYXlSZWNvcmQgPSBkaXNwbGF5RGF0YSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICBjb25zdCBkaXNwbGF5U3RlcE5hbWUgPSBkaXNwbGF5UmVjb3JkLnN0ZXBOYW1lO1xuICAgIGNvbnN0IGRpc3BsYXlXb3JrZmxvd05hbWUgPSBkaXNwbGF5UmVjb3JkLndvcmtmbG93TmFtZTtcbiAgICBpZiAodHlwZW9mIGRpc3BsYXlTdGVwTmFtZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHJldHVybiBkaXNwbGF5U3RlcE5hbWU7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgZGlzcGxheVdvcmtmbG93TmFtZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHJldHVybiBkaXNwbGF5V29ya2Zsb3dOYW1lO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIHJ1bi53b3JrZmxvd05hbWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm4gcnVuLndvcmtmbG93TmFtZTtcbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfSwgW2Rpc3BsYXlEYXRhLCBydW4ud29ya2Zsb3dOYW1lXSk7XG5cbiAgY29uc3QgbW9kdWxlU291cmNlVXJsID0gdXNlTWVtbygoKSA9PiB7XG4gICAgaWYgKCFnZXRNb2R1bGVTb3VyY2VVcmwgfHwgIW1vZHVsZVNwZWNpZmllcikgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICBjb25zdCBwYXJzZWQgPVxuICAgICAgcGFyc2VTdGVwTmFtZShtb2R1bGVTcGVjaWZpZXIpID8/IHBhcnNlV29ya2Zsb3dOYW1lKG1vZHVsZVNwZWNpZmllcik7XG4gICAgaWYgKCFwYXJzZWQpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgY29uc3QgZGF0YURlcGxveW1lbnRJZCA9IGRpc3BsYXlEYXRhLmRlcGxveW1lbnRJZDtcbiAgICByZXR1cm4gZ2V0TW9kdWxlU291cmNlVXJsKHtcbiAgICAgIG1vZHVsZVNwZWNpZmllcjogcGFyc2VkLm1vZHVsZVNwZWNpZmllcixcbiAgICAgIGRlcGxveW1lbnRJZDpcbiAgICAgICAgdHlwZW9mIGRhdGFEZXBsb3ltZW50SWQgPT09ICdzdHJpbmcnXG4gICAgICAgICAgPyBkYXRhRGVwbG95bWVudElkXG4gICAgICAgICAgOiBydW4uZGVwbG95bWVudElkLFxuICAgIH0pO1xuICB9LCBbZ2V0TW9kdWxlU291cmNlVXJsLCBtb2R1bGVTcGVjaWZpZXIsIGRpc3BsYXlEYXRhLCBydW4uZGVwbG95bWVudElkXSk7XG5cbiAgaWYgKCFzZWxlY3RlZFNwYW4gfHwgIXJlc291cmNlIHx8ICFyZXNvdXJjZUlkKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zdCBoYXNQZW5kaW5nQWN0aW9ucyA9XG4gICAgKHJlc291cmNlID09PSAnc2xlZXAnICYmIGNhbldha2VVcCkgfHxcbiAgICAocmVzb3VyY2UgPT09ICdob29rJyAmJiBjYW5SZXNvbHZlSG9vayk7XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaC1mdWxsIGZsZXgtY29sXCI+XG4gICAgICA8RGVjcnlwdENsaWNrQ29udGV4dC5Qcm92aWRlclxuICAgICAgICB2YWx1ZT17XG4gICAgICAgICAgb25EZWNyeXB0ID8geyBvbkRlY3J5cHQsIGlzRGVjcnlwdGluZywgaGFzRW5jcnlwdGVkRGF0YSB9IDogdW5kZWZpbmVkXG4gICAgICAgIH1cbiAgICAgID5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4LTEgb3ZlcmZsb3cteS1hdXRvIHB4LTQgcGItOFwiPlxuICAgICAgICAgIHtoYXNQZW5kaW5nQWN0aW9ucyAmJiAoXG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGNsYXNzTmFtZT1cIm1iLTQgcm91bmRlZC1sZyBib3JkZXIgcC0yXCJcbiAgICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICBib3JkZXJDb2xvcjogJ3ZhcigtLWRzLWdyYXktMzAwKScsXG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiAndmFyKC0tZHMtZ3JheS0xMDApJyxcbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPHBcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJtYi0yIHB4LTEgdGV4dC1bMTNweF0gZm9udC1tZWRpdW0gdXBwZXJjYXNlIHRyYWNraW5nLXdpZGVcIlxuICAgICAgICAgICAgICAgIHN0eWxlPXt7IGNvbG9yOiAndmFyKC0tZHMtZ3JheS03MDApJyB9fVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgQWN0aW9uc1xuICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBmbGV4LWNvbCBnYXAtMlwiPlxuICAgICAgICAgICAgICAgIHsvKiBXYWtlIHVwIGJ1dHRvbiBmb3IgcGVuZGluZyBzbGVlcCBjYWxscyAqL31cbiAgICAgICAgICAgICAgICB7cmVzb3VyY2UgPT09ICdzbGVlcCcgJiYgY2FuV2FrZVVwICYmIChcbiAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9e2hhbmRsZVdha2VVcH1cbiAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9e3N0b3BwaW5nU2xlZXB9XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17Y2xzeChcbiAgICAgICAgICAgICAgICAgICAgICAnZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgZ2FwLTIgcm91bmRlZC1tZCBweC0zIHB5LTIgdGV4dC1zbSBmb250LW1lZGl1bScsXG4gICAgICAgICAgICAgICAgICAgICAgJ2Rpc2FibGVkOm9wYWNpdHktNTAgZGlzYWJsZWQ6Y3Vyc29yLW5vdC1hbGxvd2VkIHRyYW5zaXRpb24tY29sb3JzJyxcbiAgICAgICAgICAgICAgICAgICAgICBzdG9wcGluZ1NsZWVwXG4gICAgICAgICAgICAgICAgICAgICAgICA/ICdvcGFjaXR5LTUwIGN1cnNvci1ub3QtYWxsb3dlZCdcbiAgICAgICAgICAgICAgICAgICAgICAgIDogJ2N1cnNvci1wb2ludGVyJ1xuICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6ICd2YXIoLS1kcy1hbWJlci0yMDApJyxcbiAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogJ3ZhcigtLWRzLWFtYmVyLTkwMCknLFxuICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8WmFwIGNsYXNzTmFtZT1cImgtNCB3LTRcIiAvPlxuICAgICAgICAgICAgICAgICAgICB7c3RvcHBpbmdTbGVlcCA/ICdXYWtpbmcgdXAuLi4nIDogJ1dha2UgVXAgU2xlZXAnfVxuICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgKX1cblxuICAgICAgICAgICAgICAgIHsvKiBSZXNvbHZlIGhvb2sgYnV0dG9uIGZvciBwZW5kaW5nIGhvb2tzICovfVxuICAgICAgICAgICAgICAgIHtyZXNvdXJjZSA9PT0gJ2hvb2snICYmIGNhblJlc29sdmVIb29rICYmIChcbiAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHNldFNob3dSZXNvbHZlSG9va01vZGFsKHRydWUpfVxuICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZD17cmVzb2x2aW5nSG9va31cbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtjbHN4KFxuICAgICAgICAgICAgICAgICAgICAgICdmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBnYXAtMiByb3VuZGVkLW1kIHB4LTMgcHktMiB0ZXh0LXNtIGZvbnQtbWVkaXVtJyxcbiAgICAgICAgICAgICAgICAgICAgICAnZGlzYWJsZWQ6b3BhY2l0eS01MCBkaXNhYmxlZDpjdXJzb3Itbm90LWFsbG93ZWQgdHJhbnNpdGlvbi1jb2xvcnMnLFxuICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmluZ0hvb2tcbiAgICAgICAgICAgICAgICAgICAgICAgID8gJ29wYWNpdHktNTAgY3Vyc29yLW5vdC1hbGxvd2VkJ1xuICAgICAgICAgICAgICAgICAgICAgICAgOiAnY3Vyc29yLXBvaW50ZXInXG4gICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogJ3ZhcigtLWRzLWdyYXktMTAwMCknLFxuICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiAndmFyKC0tZHMtYmFja2dyb3VuZC0xMDApJyxcbiAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPFNlbmQgY2xhc3NOYW1lPVwiaC00IHctNFwiIC8+XG4gICAgICAgICAgICAgICAgICAgIFJlc29sdmUgSG9va1xuICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICApfVxuXG4gICAgICAgICAgPEF0dHJpYnV0ZVBhbmVsXG4gICAgICAgICAgICBkYXRhPXtkaXNwbGF5RGF0YX1cbiAgICAgICAgICAgIG1vZHVsZVNwZWNpZmllcj17bW9kdWxlU3BlY2lmaWVyfVxuICAgICAgICAgICAgbW9kdWxlU291cmNlVXJsPXttb2R1bGVTb3VyY2VVcmx9XG4gICAgICAgICAgICBleHBpcmVkQXQ9e3J1bi5leHBpcmVkQXR9XG4gICAgICAgICAgICBpc0xvYWRpbmc9e2xvYWRpbmd9XG4gICAgICAgICAgICBlcnJvcj17ZXJyb3IgPz8gdW5kZWZpbmVkfVxuICAgICAgICAgICAgb25TdHJlYW1DbGljaz17b25TdHJlYW1DbGlja31cbiAgICAgICAgICAgIG9uUnVuQ2xpY2s9e29uUnVuQ2xpY2t9XG4gICAgICAgICAgICBvbkRlY3J5cHQ9e29uRGVjcnlwdH1cbiAgICAgICAgICAgIGlzRGVjcnlwdGluZz17aXNEZWNyeXB0aW5nfVxuICAgICAgICAgICAgcmVzb3VyY2U9e3Jlc291cmNlfVxuICAgICAgICAgIC8+XG5cbiAgICAgICAgICB7cmF3RXZlbnRzICYmIChcbiAgICAgICAgICAgIDxFdmVudHNMaXN0XG4gICAgICAgICAgICAgIGV2ZW50cz17cmF3RXZlbnRzfVxuICAgICAgICAgICAgICBvbkxvYWRFdmVudERhdGE9e29uTG9hZEV2ZW50RGF0YX1cbiAgICAgICAgICAgICAgb25TdHJlYW1DbGljaz17b25TdHJlYW1DbGlja31cbiAgICAgICAgICAgICAgb25SdW5DbGljaz17b25SdW5DbGlja31cbiAgICAgICAgICAgICAgZW5jcnlwdGlvbktleT17ZW5jcnlwdGlvbktleX1cbiAgICAgICAgICAgICAgc2hvd1NlcGFyYXRlRXZlbnRPY2N1cnJlbmNlVGltZXN0YW1wcz17XG4gICAgICAgICAgICAgICAgc2hvd1NlcGFyYXRlRXZlbnRPY2N1cnJlbmNlVGltZXN0YW1wc1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICl9XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9EZWNyeXB0Q2xpY2tDb250ZXh0LlByb3ZpZGVyPlxuXG4gICAgICB7LyogUmVzb2x2ZSBIb29rIE1vZGFsICovfVxuICAgICAgPFJlc29sdmVIb29rTW9kYWxcbiAgICAgICAgaXNPcGVuPXtzaG93UmVzb2x2ZUhvb2tNb2RhbH1cbiAgICAgICAgb25DbG9zZT17KCkgPT4gc2V0U2hvd1Jlc29sdmVIb29rTW9kYWwoZmFsc2UpfVxuICAgICAgICBvblN1Ym1pdD17aGFuZGxlUmVzb2x2ZUhvb2t9XG4gICAgICAgIGlzU3VibWl0dGluZz17cmVzb2x2aW5nSG9va31cbiAgICAgIC8+XG4gICAgPC9kaXY+XG4gICk7XG59XG4iXX0=
@@ -18,6 +18,10 @@ export interface SidebarDataContextValue {
18
18
  hasEncryptedData?: boolean;
19
19
  /** Show occurredAt separately instead of folding it into the Created timestamp. */
20
20
  showSeparateEventOccurrenceTimestamps?: boolean;
21
+ getModuleSourceUrl?: (info: {
22
+ moduleSpecifier: string;
23
+ deploymentId: string;
24
+ }) => string | undefined;
21
25
  }
22
26
  export declare function SidebarDataProvider({ value, children, }: {
23
27
  value: SidebarDataContextValue;
@@ -1 +1 @@
1
- {"version":3,"file":"sidebar-data-context.d.ts","sourceRoot":"","sources":["../../../src/components/sidebar/sidebar-data-context.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAChE,OAAO,EAAiB,KAAK,SAAS,EAAc,MAAM,OAAO,CAAC;AAClE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAElE,MAAM,WAAW,uBAAuB;IACtC,GAAG,EAAE,WAAW,CAAC;IACjB,MAAM,EAAE,KAAK,EAAE,CAAC;IAChB,eAAe,EAAE,eAAe,CAAC;IACjC,aAAa,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3C,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC,aAAa,CAAC,EAAE,CACd,KAAK,EAAE,MAAM,EACb,aAAa,EAAE,MAAM,KAClB,OAAO,CAAC;QAAE,YAAY,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACvC,eAAe,CAAC,EAAE,CAChB,aAAa,EAAE,MAAM,EACrB,OAAO,EAAE,MAAM,KACZ,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC;IAC7B,aAAa,CAAC,EAAE,CACd,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,OAAO,EAChB,IAAI,CAAC,EAAE,IAAI,KACR,OAAO,CAAC,IAAI,CAAC,CAAC;IACnB,aAAa,CAAC,EAAE,UAAU,CAAC;IAC3B,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;IACvB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,mFAAmF;IACnF,qCAAqC,CAAC,EAAE,OAAO,CAAC;CACjD;AAKD,wBAAgB,mBAAmB,CAAC,EAClC,KAAK,EACL,QAAQ,GACT,EAAE;IACD,KAAK,EAAE,uBAAuB,CAAC;IAC/B,QAAQ,EAAE,SAAS,CAAC;CACrB,2CAMA;AAED,wBAAgB,cAAc,IAAI,uBAAuB,CAMxD;AAED,wBAAgB,sBAAsB,IAAI,uBAAuB,GAAG,IAAI,CAEvE"}
1
+ {"version":3,"file":"sidebar-data-context.d.ts","sourceRoot":"","sources":["../../../src/components/sidebar/sidebar-data-context.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAChE,OAAO,EAAiB,KAAK,SAAS,EAAc,MAAM,OAAO,CAAC;AAClE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAElE,MAAM,WAAW,uBAAuB;IACtC,GAAG,EAAE,WAAW,CAAC;IACjB,MAAM,EAAE,KAAK,EAAE,CAAC;IAChB,eAAe,EAAE,eAAe,CAAC;IACjC,aAAa,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3C,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC,aAAa,CAAC,EAAE,CACd,KAAK,EAAE,MAAM,EACb,aAAa,EAAE,MAAM,KAClB,OAAO,CAAC;QAAE,YAAY,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACvC,eAAe,CAAC,EAAE,CAChB,aAAa,EAAE,MAAM,EACrB,OAAO,EAAE,MAAM,KACZ,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC;IAC7B,aAAa,CAAC,EAAE,CACd,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,OAAO,EAChB,IAAI,CAAC,EAAE,IAAI,KACR,OAAO,CAAC,IAAI,CAAC,CAAC;IACnB,aAAa,CAAC,EAAE,UAAU,CAAC;IAC3B,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;IACvB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,mFAAmF;IACnF,qCAAqC,CAAC,EAAE,OAAO,CAAC;IAChD,kBAAkB,CAAC,EAAE,CAAC,IAAI,EAAE;QAC1B,eAAe,EAAE,MAAM,CAAC;QACxB,YAAY,EAAE,MAAM,CAAC;KACtB,KAAK,MAAM,GAAG,SAAS,CAAC;CAC1B;AAKD,wBAAgB,mBAAmB,CAAC,EAClC,KAAK,EACL,QAAQ,GACT,EAAE;IACD,KAAK,EAAE,uBAAuB,CAAC;IAC/B,QAAQ,EAAE,SAAS,CAAC;CACrB,2CAMA;AAED,wBAAgB,cAAc,IAAI,uBAAuB,CAMxD;AAED,wBAAgB,sBAAsB,IAAI,uBAAuB,GAAG,IAAI,CAEvE"}
@@ -16,4 +16,4 @@ export function useSidebarData() {
16
16
  export function useSidebarDataOptional() {
17
17
  return useContext(SidebarDataContext);
18
18
  }
19
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lkZWJhci1kYXRhLWNvbnRleHQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29tcG9uZW50cy9zaWRlYmFyL3NpZGViYXItZGF0YS1jb250ZXh0LnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZLENBQUM7O0FBR2IsT0FBTyxFQUFFLGFBQWEsRUFBa0IsVUFBVSxFQUFFLE1BQU0sT0FBTyxDQUFDO0FBOEJsRSxNQUFNLGtCQUFrQixHQUFHLGFBQWEsQ0FBaUMsSUFBSSxDQUFDLENBQUM7QUFDL0Usa0JBQWtCLENBQUMsV0FBVyxHQUFHLG9CQUFvQixDQUFDO0FBRXRELE1BQU0sVUFBVSxtQkFBbUIsQ0FBQyxFQUNsQyxLQUFLLEVBQ0wsUUFBUSxHQUlUO0lBQ0MsT0FBTyxDQUNMLEtBQUMsa0JBQWtCLENBQUMsUUFBUSxJQUFDLEtBQUssRUFBRSxLQUFLLFlBQ3RDLFFBQVEsR0FDbUIsQ0FDL0IsQ0FBQztBQUNKLENBQUM7QUFFRCxNQUFNLFVBQVUsY0FBYztJQUM1QixNQUFNLEdBQUcsR0FBRyxVQUFVLENBQUMsa0JBQWtCLENBQUMsQ0FBQztJQUMzQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDVCxNQUFNLElBQUksS0FBSyxDQUFDLDBEQUEwRCxDQUFDLENBQUM7SUFDOUUsQ0FBQztJQUNELE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUVELE1BQU0sVUFBVSxzQkFBc0I7SUFDcEMsT0FBTyxVQUFVLENBQUMsa0JBQWtCLENBQUMsQ0FBQztBQUN4QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgdHlwZSB7IEV2ZW50LCBIb29rLCBXb3JrZmxvd1J1biB9IGZyb20gJ0B3b3JrZmxvdy93b3JsZCc7XG5pbXBvcnQgeyBjcmVhdGVDb250ZXh0LCB0eXBlIFJlYWN0Tm9kZSwgdXNlQ29udGV4dCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB0eXBlIHsgRmV0Y2hTcGFuRGV0YWlsIH0gZnJvbSAnLi91c2Utc2VsZWN0ZWQtc3Bhbi1kZXRhaWwnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFNpZGViYXJEYXRhQ29udGV4dFZhbHVlIHtcbiAgcnVuOiBXb3JrZmxvd1J1bjtcbiAgZXZlbnRzOiBFdmVudFtdO1xuICBmZXRjaFNwYW5EZXRhaWw6IEZldGNoU3BhbkRldGFpbDtcbiAgb25TdHJlYW1DbGljaz86IChzdHJlYW1JZDogc3RyaW5nKSA9PiB2b2lkO1xuICBvblJ1bkNsaWNrPzogKHJ1bklkOiBzdHJpbmcpID0+IHZvaWQ7XG4gIG9uV2FrZVVwU2xlZXA/OiAoXG4gICAgcnVuSWQ6IHN0cmluZyxcbiAgICBjb3JyZWxhdGlvbklkOiBzdHJpbmdcbiAgKSA9PiBQcm9taXNlPHsgc3RvcHBlZENvdW50OiBudW1iZXIgfT47XG4gIG9uTG9hZEV2ZW50RGF0YT86IChcbiAgICBjb3JyZWxhdGlvbklkOiBzdHJpbmcsXG4gICAgZXZlbnRJZDogc3RyaW5nXG4gICkgPT4gUHJvbWlzZTx1bmtub3duIHwgbnVsbD47XG4gIG9uUmVzb2x2ZUhvb2s/OiAoXG4gICAgaG9va1Rva2VuOiBzdHJpbmcsXG4gICAgcGF5bG9hZDogdW5rbm93bixcbiAgICBob29rPzogSG9va1xuICApID0+IFByb21pc2U8dm9pZD47XG4gIGVuY3J5cHRpb25LZXk/OiBVaW50OEFycmF5O1xuICBvbkRlY3J5cHQ/OiAoKSA9PiB2b2lkO1xuICBpc0RlY3J5cHRpbmc/OiBib29sZWFuO1xuICBoYXNFbmNyeXB0ZWREYXRhPzogYm9vbGVhbjtcbiAgLyoqIFNob3cgb2NjdXJyZWRBdCBzZXBhcmF0ZWx5IGluc3RlYWQgb2YgZm9sZGluZyBpdCBpbnRvIHRoZSBDcmVhdGVkIHRpbWVzdGFtcC4gKi9cbiAgc2hvd1NlcGFyYXRlRXZlbnRPY2N1cnJlbmNlVGltZXN0YW1wcz86IGJvb2xlYW47XG59XG5cbmNvbnN0IFNpZGViYXJEYXRhQ29udGV4dCA9IGNyZWF0ZUNvbnRleHQ8U2lkZWJhckRhdGFDb250ZXh0VmFsdWUgfCBudWxsPihudWxsKTtcblNpZGViYXJEYXRhQ29udGV4dC5kaXNwbGF5TmFtZSA9ICdTaWRlYmFyRGF0YUNvbnRleHQnO1xuXG5leHBvcnQgZnVuY3Rpb24gU2lkZWJhckRhdGFQcm92aWRlcih7XG4gIHZhbHVlLFxuICBjaGlsZHJlbixcbn06IHtcbiAgdmFsdWU6IFNpZGViYXJEYXRhQ29udGV4dFZhbHVlO1xuICBjaGlsZHJlbjogUmVhY3ROb2RlO1xufSkge1xuICByZXR1cm4gKFxuICAgIDxTaWRlYmFyRGF0YUNvbnRleHQuUHJvdmlkZXIgdmFsdWU9e3ZhbHVlfT5cbiAgICAgIHtjaGlsZHJlbn1cbiAgICA8L1NpZGViYXJEYXRhQ29udGV4dC5Qcm92aWRlcj5cbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVzZVNpZGViYXJEYXRhKCk6IFNpZGViYXJEYXRhQ29udGV4dFZhbHVlIHtcbiAgY29uc3QgY3R4ID0gdXNlQ29udGV4dChTaWRlYmFyRGF0YUNvbnRleHQpO1xuICBpZiAoIWN0eCkge1xuICAgIHRocm93IG5ldyBFcnJvcigndXNlU2lkZWJhckRhdGEgbXVzdCBiZSB1c2VkIHdpdGhpbiBhIFNpZGViYXJEYXRhUHJvdmlkZXInKTtcbiAgfVxuICByZXR1cm4gY3R4O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdXNlU2lkZWJhckRhdGFPcHRpb25hbCgpOiBTaWRlYmFyRGF0YUNvbnRleHRWYWx1ZSB8IG51bGwge1xuICByZXR1cm4gdXNlQ29udGV4dChTaWRlYmFyRGF0YUNvbnRleHQpO1xufVxuIl19
19
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lkZWJhci1kYXRhLWNvbnRleHQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29tcG9uZW50cy9zaWRlYmFyL3NpZGViYXItZGF0YS1jb250ZXh0LnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZLENBQUM7O0FBR2IsT0FBTyxFQUFFLGFBQWEsRUFBa0IsVUFBVSxFQUFFLE1BQU0sT0FBTyxDQUFDO0FBa0NsRSxNQUFNLGtCQUFrQixHQUFHLGFBQWEsQ0FBaUMsSUFBSSxDQUFDLENBQUM7QUFDL0Usa0JBQWtCLENBQUMsV0FBVyxHQUFHLG9CQUFvQixDQUFDO0FBRXRELE1BQU0sVUFBVSxtQkFBbUIsQ0FBQyxFQUNsQyxLQUFLLEVBQ0wsUUFBUSxHQUlUO0lBQ0MsT0FBTyxDQUNMLEtBQUMsa0JBQWtCLENBQUMsUUFBUSxJQUFDLEtBQUssRUFBRSxLQUFLLFlBQ3RDLFFBQVEsR0FDbUIsQ0FDL0IsQ0FBQztBQUNKLENBQUM7QUFFRCxNQUFNLFVBQVUsY0FBYztJQUM1QixNQUFNLEdBQUcsR0FBRyxVQUFVLENBQUMsa0JBQWtCLENBQUMsQ0FBQztJQUMzQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDVCxNQUFNLElBQUksS0FBSyxDQUFDLDBEQUEwRCxDQUFDLENBQUM7SUFDOUUsQ0FBQztJQUNELE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUVELE1BQU0sVUFBVSxzQkFBc0I7SUFDcEMsT0FBTyxVQUFVLENBQUMsa0JBQWtCLENBQUMsQ0FBQztBQUN4QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgdHlwZSB7IEV2ZW50LCBIb29rLCBXb3JrZmxvd1J1biB9IGZyb20gJ0B3b3JrZmxvdy93b3JsZCc7XG5pbXBvcnQgeyBjcmVhdGVDb250ZXh0LCB0eXBlIFJlYWN0Tm9kZSwgdXNlQ29udGV4dCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB0eXBlIHsgRmV0Y2hTcGFuRGV0YWlsIH0gZnJvbSAnLi91c2Utc2VsZWN0ZWQtc3Bhbi1kZXRhaWwnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFNpZGViYXJEYXRhQ29udGV4dFZhbHVlIHtcbiAgcnVuOiBXb3JrZmxvd1J1bjtcbiAgZXZlbnRzOiBFdmVudFtdO1xuICBmZXRjaFNwYW5EZXRhaWw6IEZldGNoU3BhbkRldGFpbDtcbiAgb25TdHJlYW1DbGljaz86IChzdHJlYW1JZDogc3RyaW5nKSA9PiB2b2lkO1xuICBvblJ1bkNsaWNrPzogKHJ1bklkOiBzdHJpbmcpID0+IHZvaWQ7XG4gIG9uV2FrZVVwU2xlZXA/OiAoXG4gICAgcnVuSWQ6IHN0cmluZyxcbiAgICBjb3JyZWxhdGlvbklkOiBzdHJpbmdcbiAgKSA9PiBQcm9taXNlPHsgc3RvcHBlZENvdW50OiBudW1iZXIgfT47XG4gIG9uTG9hZEV2ZW50RGF0YT86IChcbiAgICBjb3JyZWxhdGlvbklkOiBzdHJpbmcsXG4gICAgZXZlbnRJZDogc3RyaW5nXG4gICkgPT4gUHJvbWlzZTx1bmtub3duIHwgbnVsbD47XG4gIG9uUmVzb2x2ZUhvb2s/OiAoXG4gICAgaG9va1Rva2VuOiBzdHJpbmcsXG4gICAgcGF5bG9hZDogdW5rbm93bixcbiAgICBob29rPzogSG9va1xuICApID0+IFByb21pc2U8dm9pZD47XG4gIGVuY3J5cHRpb25LZXk/OiBVaW50OEFycmF5O1xuICBvbkRlY3J5cHQ/OiAoKSA9PiB2b2lkO1xuICBpc0RlY3J5cHRpbmc/OiBib29sZWFuO1xuICBoYXNFbmNyeXB0ZWREYXRhPzogYm9vbGVhbjtcbiAgLyoqIFNob3cgb2NjdXJyZWRBdCBzZXBhcmF0ZWx5IGluc3RlYWQgb2YgZm9sZGluZyBpdCBpbnRvIHRoZSBDcmVhdGVkIHRpbWVzdGFtcC4gKi9cbiAgc2hvd1NlcGFyYXRlRXZlbnRPY2N1cnJlbmNlVGltZXN0YW1wcz86IGJvb2xlYW47XG4gIGdldE1vZHVsZVNvdXJjZVVybD86IChpbmZvOiB7XG4gICAgbW9kdWxlU3BlY2lmaWVyOiBzdHJpbmc7XG4gICAgZGVwbG95bWVudElkOiBzdHJpbmc7XG4gIH0pID0+IHN0cmluZyB8IHVuZGVmaW5lZDtcbn1cblxuY29uc3QgU2lkZWJhckRhdGFDb250ZXh0ID0gY3JlYXRlQ29udGV4dDxTaWRlYmFyRGF0YUNvbnRleHRWYWx1ZSB8IG51bGw+KG51bGwpO1xuU2lkZWJhckRhdGFDb250ZXh0LmRpc3BsYXlOYW1lID0gJ1NpZGViYXJEYXRhQ29udGV4dCc7XG5cbmV4cG9ydCBmdW5jdGlvbiBTaWRlYmFyRGF0YVByb3ZpZGVyKHtcbiAgdmFsdWUsXG4gIGNoaWxkcmVuLFxufToge1xuICB2YWx1ZTogU2lkZWJhckRhdGFDb250ZXh0VmFsdWU7XG4gIGNoaWxkcmVuOiBSZWFjdE5vZGU7XG59KSB7XG4gIHJldHVybiAoXG4gICAgPFNpZGViYXJEYXRhQ29udGV4dC5Qcm92aWRlciB2YWx1ZT17dmFsdWV9PlxuICAgICAge2NoaWxkcmVufVxuICAgIDwvU2lkZWJhckRhdGFDb250ZXh0LlByb3ZpZGVyPlxuICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdXNlU2lkZWJhckRhdGEoKTogU2lkZWJhckRhdGFDb250ZXh0VmFsdWUge1xuICBjb25zdCBjdHggPSB1c2VDb250ZXh0KFNpZGViYXJEYXRhQ29udGV4dCk7XG4gIGlmICghY3R4KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCd1c2VTaWRlYmFyRGF0YSBtdXN0IGJlIHVzZWQgd2l0aGluIGEgU2lkZWJhckRhdGFQcm92aWRlcicpO1xuICB9XG4gIHJldHVybiBjdHg7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1c2VTaWRlYmFyRGF0YU9wdGlvbmFsKCk6IFNpZGViYXJEYXRhQ29udGV4dFZhbHVlIHwgbnVsbCB7XG4gIHJldHVybiB1c2VDb250ZXh0KFNpZGViYXJEYXRhQ29udGV4dCk7XG59XG4iXX0=
@@ -22,14 +22,17 @@ export declare function formatDuration(ms: number, compact?: boolean): string;
22
22
  /**
23
23
  * Formats a duration in milliseconds without snapping to whole seconds.
24
24
  *
25
- * Unlike {@link formatDuration}, this never rounds a sub-minute value up to
26
- * the next whole second (e.g. 1626ms renders as "1.63s", not "2s").
25
+ * Unlike {@link formatDuration}, this keeps sub-second detail, so 1626ms
26
+ * renders as "1.63s" rather than "2s". `fractionDigits` sets both the number of
27
+ * decimals on the seconds component (trailing zeros trimmed, so 2000ms is "2s"
28
+ * and 1500ms is "1.5s") and the rounding granularity — the default of 2 rounds
29
+ * to 10ms; the timeline ruler passes fewer digits to match its tick step.
27
30
  *
28
31
  * - < 1s: shows whole milliseconds (e.g. "626ms")
29
- * - 1s – 1m: shows seconds with two decimals (e.g. "1.63s", "45.20s")
30
- * - >= 1m: decomposes into d/h/m with two-decimal seconds (e.g. "1m 13.45s")
32
+ * - 1s – 1m: shows seconds with trimmed decimals (e.g. "1.63s", "1.5s", "45s")
33
+ * - >= 1m: decomposes into d/h/m with trimmed-decimal seconds (e.g. "1m 13.45s")
31
34
  */
32
- export declare function formatDurationPrecise(ms: number): string;
35
+ export declare function formatDurationPrecise(ms: number, fractionDigits?: number): string;
33
36
  /**
34
37
  * Returns a formatted pagination display string
35
38
  * @param currentPage - The current page number
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/lib/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAOvC;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,cAAc,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,UAAQ,GAAG,MAAM,CAgDlE;AAUD;;;;;;;;;GASG;AACH,wBAAgB,qBAAqB,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAqCxD;AAED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAClC,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,OAAO,GACf,MAAM,CAKR;AAMD;;GAEG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAExD;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,OAAO,GAAG,YAAY,EAAE,GAAG,IAAI,CAmB7E;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,YAAY,EAAE,CAAC;CAC9B;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,UAAU,EAAE,CAc/D"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/lib/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAOvC;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,cAAc,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,UAAQ,GAAG,MAAM,CAgDlE;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,qBAAqB,CAAC,EAAE,EAAE,MAAM,EAAE,cAAc,SAAI,GAAG,MAAM,CAsC5E;AAED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAClC,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,OAAO,GACf,MAAM,CAKR;AAMD;;GAEG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAExD;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,OAAO,GAAG,YAAY,EAAE,GAAG,IAAI,CAmB7E;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,YAAY,EAAE,CAAC;CAC9B;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,UAAU,EAAE,CAc/D"}
package/dist/lib/utils.js CHANGED
@@ -61,24 +61,20 @@ export function formatDuration(ms, compact = false) {
61
61
  parts.push(`${seconds}s`);
62
62
  return parts.join(' ');
63
63
  }
64
- // Locale-aware formatter that always renders exactly two fraction digits.
65
- // Used for the seconds component of precise durations so values are never
66
- // snapped to a whole second (and thousands separators stay correct).
67
- const preciseSecondsFormatter = new Intl.NumberFormat(undefined, {
68
- minimumFractionDigits: 2,
69
- maximumFractionDigits: 2,
70
- });
71
64
  /**
72
65
  * Formats a duration in milliseconds without snapping to whole seconds.
73
66
  *
74
- * Unlike {@link formatDuration}, this never rounds a sub-minute value up to
75
- * the next whole second (e.g. 1626ms renders as "1.63s", not "2s").
67
+ * Unlike {@link formatDuration}, this keeps sub-second detail, so 1626ms
68
+ * renders as "1.63s" rather than "2s". `fractionDigits` sets both the number of
69
+ * decimals on the seconds component (trailing zeros trimmed, so 2000ms is "2s"
70
+ * and 1500ms is "1.5s") and the rounding granularity — the default of 2 rounds
71
+ * to 10ms; the timeline ruler passes fewer digits to match its tick step.
76
72
  *
77
73
  * - < 1s: shows whole milliseconds (e.g. "626ms")
78
- * - 1s – 1m: shows seconds with two decimals (e.g. "1.63s", "45.20s")
79
- * - >= 1m: decomposes into d/h/m with two-decimal seconds (e.g. "1m 13.45s")
74
+ * - 1s – 1m: shows seconds with trimmed decimals (e.g. "1.63s", "1.5s", "45s")
75
+ * - >= 1m: decomposes into d/h/m with trimmed-decimal seconds (e.g. "1m 13.45s")
80
76
  */
81
- export function formatDurationPrecise(ms) {
77
+ export function formatDurationPrecise(ms, fractionDigits = 2) {
82
78
  if (ms === 0) {
83
79
  return '0s';
84
80
  }
@@ -88,9 +84,10 @@ export function formatDurationPrecise(ms) {
88
84
  return `${roundedMs}ms`;
89
85
  }
90
86
  }
91
- const normalizedMs = Math.round(ms / 10) * 10;
87
+ const granularityMs = MS_IN_SECOND / 10 ** fractionDigits;
88
+ const normalizedMs = Math.round(ms / granularityMs) * granularityMs;
92
89
  if (normalizedMs < MS_IN_MINUTE) {
93
- return `${preciseSecondsFormatter.format(normalizedMs / MS_IN_SECOND)}s`;
90
+ return `${Number((normalizedMs / MS_IN_SECOND).toFixed(fractionDigits))}s`;
94
91
  }
95
92
  const days = Math.floor(normalizedMs / MS_IN_DAY);
96
93
  const hours = Math.floor((normalizedMs % MS_IN_DAY) / MS_IN_HOUR);
@@ -106,7 +103,7 @@ export function formatDurationPrecise(ms) {
106
103
  if (minutes > 0) {
107
104
  parts.push(`${minutes}m`);
108
105
  }
109
- parts.push(`${preciseSecondsFormatter.format(seconds)}s`);
106
+ parts.push(`${Number(seconds.toFixed(fractionDigits))}s`);
110
107
  return parts.join(' ');
111
108
  }
112
109
  /**
@@ -167,4 +164,4 @@ export function identifyStreamSteps(steps) {
167
164
  };
168
165
  });
169
166
  }
170
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbGliL3V0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUdBLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQztBQUMxQixNQUFNLFlBQVksR0FBRyxFQUFFLEdBQUcsWUFBWSxDQUFDO0FBQ3ZDLE1BQU0sVUFBVSxHQUFHLEVBQUUsR0FBRyxZQUFZLENBQUM7QUFDckMsTUFBTSxTQUFTLEdBQUcsRUFBRSxHQUFHLFVBQVUsQ0FBQztBQUVsQzs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FpQkc7QUFDSCxNQUFNLFVBQVUsY0FBYyxDQUFDLEVBQVUsRUFBRSxPQUFPLEdBQUcsS0FBSztJQUN4RCxJQUFJLEVBQUUsS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUNiLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELElBQUksRUFBRSxHQUFHLFlBQVksRUFBRSxDQUFDO1FBQ3RCLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDakMsT0FBTyxTQUFTLEdBQUcsWUFBWSxDQUFDLENBQUMsQ0FBQyxHQUFHLFNBQVMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDNUQsQ0FBQztJQUVELE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxHQUFHLFlBQVksQ0FBQyxHQUFHLFlBQVksQ0FBQztJQUUvRCxJQUFJLFNBQVMsR0FBRyxZQUFZLEVBQUUsQ0FBQztRQUM3QixPQUFPLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLEdBQUcsWUFBWSxDQUFDLEdBQUcsQ0FBQztJQUNwRCxDQUFDO0lBRUQsd0VBQXdFO0lBQ3hFLElBQUksT0FBTyxFQUFFLENBQUM7UUFDWixJQUFJLFNBQVMsR0FBRyxVQUFVLEVBQUUsQ0FBQztZQUMzQixNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsR0FBRyxZ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LENBQUM7U0FDL0MsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7UUFDWixNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxTQUFTLENBQUM7UUFDbEUsTUFBTSxZQUFZLEdBQUcsbUJBQW1CLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUUzRCxPQUFPO1lBQ0wsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNO1lBQ25CLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUTtZQUN2QixXQUFXLEVBQUUsWUFBWTtZQUN6QixZQUFZO1NBQ2IsQ0FBQztJQUNKLENBQUMsQ0FBQyxDQUFDO0FBQ1AsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgU3RlcCB9IGZyb20gJ0B3b3JrZmxvdy93b3JsZCc7XG5pbXBvcnQgdHlwZSB7IE1vZGVsTWVzc2FnZSB9IGZyb20gJ2FpJztcblxuY29uc3QgTVNfSU5fU0VDT05EID0gMTAwMDtcbmNvbnN0IE1TX0lOX01JTlVURSA9IDYwICogTVNfSU5fU0VDT05EO1xuY29uc3QgTVNfSU5fSE9VUiA9IDYwICogTVNfSU5fTUlOVVRFO1xuY29uc3QgTVNfSU5fREFZID0gMjQgKiBNU19JTl9IT1VSO1xuXG4vKipcbiAqIEZvcm1hdHMgYSBkdXJhdGlvbiBpbiBtaWxsaXNlY29uZHMgdG8gYSBodW1hbi1yZWFkYWJsZSBzdHJpbmcuXG4gKlxuICogQHBhcmFtIG1zIC0gRHVyYXRpb24gaW4gbWlsbGlzZWNvbmRzXG4gKiBAcGFyYW0gY29tcGFjdCAtIElmIHRydWUsIHJldHVybnMgYSBjb21wYWN0IGZvcm1hdCAoZS5nLiwgXCIzODBtc1wiLCBcIjJtIDMwc1wiKS5cbiAqICAgICAgICAgICAgICAgICAgSWYgZmFsc2UgKGRlZmF1bHQpLCByZXR1cm5zIG11bHRpLXBhcnQgZm9ybWF0IChlLmcuLCBcIjFtIDEzc1wiLCBcIjJkIDVoIDNtIDEyc1wiKS5cbiAqXG4gKiBDb21wYWN0IGZvcm1hdCAodGltZWxpbmUgbWFya2Vycyk6XG4gKiAtIDwgMXM6IHNob3dzIG1pbGxpc2Vjb25kcyAoZS5nLiwgXCIzODBtc1wiKVxuICogLSA8IDFtOiBzaG93cyBzZWNvbmRzIChlLmcuLCBcIjQ1c1wiKVxuICogLSA8IDFoOiBzaG93cyBtaW51dGVzIGFuZCBzZWNvbmRzIChlLmcuLCBcIjJtIDMwc1wiKVxuICogLSA+PSAxaDogc2hvd3MgaG91cnMgYW5kIG1pbnV0ZXMgKGUuZy4sIFwiMmggMzBtXCIpXG4gKlxuICogRnVsbCBmb3JtYXQ6XG4gKiAtIDwgMXM6IHNob3dzIG1pbGxpc2Vjb25kcyAoZS5nLiwgXCIzODBtc1wiKVxuICogLSA8IDFtOiBzaG93cyBzZWNvbmRzIChlLmcuLCBcIjQ1c1wiKVxuICogLSA+PSAxbTogc2hvd3MgZGVjb21wb3NlZCBmb3JtYXQgd2l0aCB3aG9sZSBzZWNvbmRzIChlLmcuLCBcIjFtIDEzc1wiLCBcIjJtIDEzc1wiKVxuICovXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0RHVyYXRpb24obXM6IG51bWJlciwgY29tcGFjdCA9IGZhbHNlKTogc3RyaW5nIHtcbiAgaWYgKG1zID09PSAwKSB7XG4gICAgcmV0dXJuICcwcyc7XG4gIH1cblxuICBpZiAobXMgPCBNU19JTl9TRUNPTkQpIHtcbiAgICBjb25zdCByb3VuZGVkTXMgPSBNYXRoLnJvdW5kKG1zKTtcbiAgICByZXR1cm4gcm91bmRlZE1zIDwgTVNfSU5fU0VDT05EID8gYCR7cm91bmRlZE1zfW1zYCA6ICcxcyc7XG4gIH1cblxuICBjb25zdCByb3VuZGVkTXMgPSBNYXRoLnJvdW5kKG1zIC8gTVNfSU5fU0VDT05EKSAqIE1TX0lOX1NFQ09ORDtcblxuICBpZiAocm91bmRlZE1zIDwgTVNfSU5fTUlOVVRFKSB7XG4gICAgcmV0dXJuIGAke01hdGguZmxvb3Iocm91bmRlZE1zIC8gTVNfSU5fU0VDT05EKX1zYDtcbiAgfVxuXG4gIC8vIENvbXBhY3QgZm9ybWF0OiBtdWx0aS11bml0IHdpdGhvdXQgZGVjaW1hbHMgKGUuZy4gXCI4bSAyMHNcIiwgXCIyaCAzMG1cIilcbiAgaWYgKGNvbXBhY3QpIHtcbiAgICBpZiAocm91bmRlZE1zIDwgTVNfSU5fSE9VUikge1xuICAgICAgY29uc3QgbSA9IE1hdGguZmxvb3Iocm91bmRlZE1zIC8gTVNfSU5fTUlOVVRFKTtcbiAgICAgIGNvbnN0IHMgPSBNYXRoLmZsb29yKChyb3VuZGVkTXMgJSBNU19JTl9NSU5VVEUpIC8gTVNfSU5fU0VDT05EKTtcbiAgICAgIHJldHVybiBzID4gMCA/IGAke219bSAke3N9c2AgOiBgJHttfW1gO1xuICAgIH1cbiAgICBjb25zdCBoID0gTWF0aC5mbG9vcihyb3VuZGVkTXMgLyBNU19JTl9IT1VSKTtcbiAgICBjb25zdCBtID0gTWF0aC5mbG9vcigocm91bmRlZE1zICUgTVNfSU5fSE9VUikgLyBNU19JTl9NSU5VVEUpO1xuICAgIHJldHVybiBtID4gMCA/IGAke2h9aCAke219bWAgOiBgJHtofWhgO1xuICB9XG5cbiAgLy8gRnVsbCBmb3JtYXQ6IGRlY29tcG9zZSBpbnRvIGxhcmdlciB1bml0cyArIHdob2xlIHNlY29uZHMuXG4gIGNvbnN0IGRheXMgPSBNYXRoLmZsb29yKHJvdW5kZWRNcyAvIE1TX0lOX0RBWSk7XG4gIGNvbnN0IGhvdXJzID0gTWF0aC5mbG9vcigocm91bmRlZE1zICUgTVNfSU5fREFZKSAvIE1TX0lOX0hPVVIpO1xuICBjb25zdCBtaW51dGVzID0gTWF0aC5mbG9vcigocm91bmRlZE1zICUgTVNfSU5fSE9VUikgLyBNU19JTl9NSU5VVEUpO1xuICBjb25zdCBzZWNvbmRzID0gTWF0aC5mbG9vcigocm91bmRlZE1zICUgTVNfSU5fTUlOVVRFKSAvIE1TX0lOX1NFQ09ORCk7XG5cbiAgY29uc3QgcGFydHM6IHN0cmluZ1tdID0gW107XG5cbiAgaWYgKGRheXMgPiAwKSB7XG4gICAgcGFydHMucHVzaChgJHtkYXlzfWRgKTtcbiAgfVxuICBpZiAoaG91cnMgPiAwKSB7XG4gICAgcGFydHMucHVzaChgJHtob3Vyc31oYCk7XG4gIH1cbiAgaWYgKG1pbnV0ZXMgPiAwKSB7XG4gICAgcGFydHMucHVzaChgJHttaW51dGVzfW1gKTtcbiAgfVxuICBwYXJ0cy5wdXNoKGAke3NlY29uZHN9c2ApO1xuXG4gIHJldHVybiBwYXJ0cy5qb2luKCcgJyk7XG59XG5cbi8vIExvY2FsZS1hd2FyZSBmb3JtYXR0ZXIgdGhhdCBhbHdheXMgcmVuZGVycyBleGFjdGx5IHR3byBmcmFjdGlvbiBkaWdpdHMuXG4vLyBVc2VkIGZvciB0aGUgc2Vjb25kcyBjb21wb25lbnQgb2YgcHJlY2lzZSBkdXJhdGlvbnMgc28gdmFsdWVzIGFyZSBuZXZlclxuLy8gc25hcHBlZCB0byBhIHdob2xlIHNlY29uZCAoYW5kIHRob3VzYW5kcyBzZXBhcmF0b3JzIHN0YXkgY29ycmVjdCkuXG5jb25zdCBwcmVjaXNlU2Vjb25kc0Zvcm1hdHRlciA9IG5ldyBJbnRsLk51bWJlckZvcm1hdCh1bmRlZmluZWQsIHtcbiAgbWluaW11bUZyYWN0aW9uRGlnaXRzOiAyLFxuICBtYXhpbXVtRnJhY3Rpb25EaWdpdHM6IDIsXG59KTtcblxuLyoqXG4gKiBGb3JtYXRzIGEgZHVyYXRpb24gaW4gbWlsbGlzZWNvbmRzIHdpdGhvdXQgc25hcHBpbmcgdG8gd2hvbGUgc2Vjb25kcy5cbiAqXG4gKiBVbmxpa2Uge0BsaW5rIGZvcm1hdER1cmF0aW9ufSwgdGhpcyBuZXZlciByb3VuZHMgYSBzdWItbWludXRlIHZhbHVlIHVwIHRvXG4gKiB0aGUgbmV4dCB3aG9sZSBzZWNvbmQgKGUuZy4gMTYyNm1zIHJlbmRlcnMgYXMgXCIxLjYzc1wiLCBub3QgXCIyc1wiKS5cbiAqXG4gKiAtIDwgMXM6IHNob3dzIHdob2xlIG1pbGxpc2Vjb25kcyAoZS5nLiBcIjYyNm1zXCIpXG4gKiAtIDFzIOKAkyAxbTogc2hvd3Mgc2Vjb25kcyB3aXRoIHR3byBkZWNpbWFscyAoZS5nLiBcIjEuNjNzXCIsIFwiNDUuMjBzXCIpXG4gKiAtID49IDFtOiBkZWNvbXBvc2VzIGludG8gZC9oL20gd2l0aCB0d28tZGVjaW1hbCBzZWNvbmRzIChlLmcuIFwiMW0gMTMuNDVzXCIpXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXREdXJhdGlvblByZWNpc2UobXM6IG51bWJlcik6IHN0cmluZyB7XG4gIGlmIChtcyA9PT0gMCkge1xuICAgIHJldHVybiAnMHMnO1xuICB9XG5cbiAgaWYgKG1zIDwgTVNfSU5fU0VDT05EKSB7XG4gICAgY29uc3Qgcm91bmRlZE1zID0gTWF0aC5yb3VuZChtcyk7XG4gICAgaWYgKHJvdW5kZWRNcyA8IE1TX0lOX1NFQ09ORCkge1xuICAgICAgcmV0dXJuIGAke3JvdW5kZWRNc31tc2A7XG4gICAgfVxuICB9XG5cbiAgY29uc3Qgbm9ybWFsaXplZE1zID0gTWF0aC5yb3VuZChtcyAvIDEwKSAqIDEwO1xuXG4gIGlmIChub3JtYWxpemVkTXMgPCBNU19JTl9NSU5VVEUpIHtcbiAgICByZXR1cm4gYCR7cHJlY2lzZVNlY29uZHNGb3JtYXR0ZXIuZm9ybWF0KG5vcm1hbGl6ZWRNcyAvIE1TX0lOX1NFQ09ORCl9c2A7XG4gIH1cblxuICBjb25zdCBkYXlzID0gTWF0aC5mbG9vcihub3JtYWxpemVkTXMgLyBNU19JTl9EQVkpO1xuICBjb25zdCBob3VycyA9IE1hdGguZmxvb3IoKG5vcm1hbGl6ZWRNcyAlIE1TX0lOX0RBWSkgLyBNU19JTl9IT1VSKTtcbiAgY29uc3QgbWludXRlcyA9IE1hdGguZmxvb3IoKG5vcm1hbGl6ZWRNcyAlIE1TX0lOX0hPVVIpIC8gTVNfSU5fTUlOVVRFKTtcbiAgY29uc3Qgc2Vjb25kcyA9IChub3JtYWxpemVkTXMgJSBNU19JTl9NSU5VVEUpIC8gTVNfSU5fU0VDT05EO1xuXG4gIGNvbnN0IHBhcnRzOiBzdHJpbmdbXSA9IFtdO1xuXG4gIGlmIChkYXlzID4gMCkge1xuICAgIHBhcnRzLnB1c2goYCR7ZGF5c31kYCk7XG4gIH1cbiAgaWYgKGhvdXJzID4gMCkge1xuICAgIHBhcnRzLnB1c2goYCR7aG91cnN9aGApO1xuICB9XG4gIGlmIChtaW51dGVzID4gMCkge1xuICAgIHBhcnRzLnB1c2goYCR7bWludXRlc31tYCk7XG4gIH1cbiAgcGFydHMucHVzaChgJHtwcmVjaXNlU2Vjb25kc0Zvcm1hdHRlci5mb3JtYXQoc2Vjb25kcyl9c2ApO1xuXG4gIHJldHVybiBwYXJ0cy5qb2luKCcgJyk7XG59XG5cbi8qKlxuICogUmV0dXJucyBhIGZvcm1hdHRlZCBwYWdpbmF0aW9uIGRpc3BsYXkgc3RyaW5nXG4gKiBAcGFyYW0gY3VycmVudFBhZ2UgLSBUaGUgY3VycmVudCBwYWdlIG51bWJlclxuICogQHBhcmFtIHRvdGFsUGFnZXMgLSBUaGUgdG90YWwgbnVtYmVyIG9mIHBhZ2VzIHZpc2l0ZWQgc28gZmFyXG4gKiBAcGFyYW0gaGFzTW9yZSAtIFdoZXRoZXIgdGhlcmUgYXJlIG1vcmUgcGFnZXMgYXZhaWxhYmxlXG4gKiBAcmV0dXJucyBGb3JtYXR0ZWQgc3RyaW5nIGxpa2UgXCJQYWdlIDEgb2YgMytcIiBvciBcIlBhZ2UgMiBvZiAyXCJcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFBhZ2luYXRpb25EaXNwbGF5KFxuICBjdXJyZW50UGFnZTogbnVtYmVyLFxuICB0b3RhbFBhZ2VzOiBudW1iZXIsXG4gIGhhc01vcmU6IGJvb2xlYW5cbik6IHN0cmluZyB7XG4gIGlmIChoYXNNb3JlKSB7XG4gICAgcmV0dXJuIGBQYWdlICR7Y3VycmVudFBhZ2V9IG9mICR7dG90YWxQYWdlc30rYDtcbiAgfVxuICByZXR1cm4gYFBhZ2UgJHtjdXJyZW50UGFnZX0gb2YgJHt0b3RhbFBhZ2VzfWA7XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIER1cmFibGUgQWdlbnQgVXRpbGl0aWVzXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKlxuICogQ2hlY2sgaWYgYSBzdGVwIGlzIGEgZG9TdHJlYW1TdGVwIChMTE0gY2FsbCB3aXRoIGNvbnZlcnNhdGlvbiBpbnB1dClcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzRG9TdHJlYW1TdGVwKHN0ZXBOYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgcmV0dXJuIHN0ZXBOYW1lLmVuZHNXaXRoKCcvL2RvU3RyZWFtU3RlcCcpO1xufVxuXG4vKipcbiAqIEV4dHJhY3QgdGhlIGNvbnZlcnNhdGlvbiBmcm9tIGEgaHlkcmF0ZWQgZG9TdHJlYW1TdGVwIGlucHV0LlxuICogZG9TdHJlYW1TdGVwIHNpZ25hdHVyZTogKGNvbnZlcnNhdGlvblByb21wdCwgbW9kZWwsIHdyaXRhYmxlLCB0b29scywgb3B0aW9ucylcbiAqIFNvIGlucHV0WzBdIGlzIHRoZSBjb252ZXJzYXRpb24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBleHRyYWN0Q29udmVyc2F0aW9uKHN0ZXBJbnB1dDogdW5rbm93bik6IE1vZGVsTWVzc2FnZVtdIHwgbnVsbCB7XG4gIGlmICghQXJyYXkuaXNBcnJheShzdGVwSW5wdXQpIHx8IHN0ZXBJbnB1dC5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNvbnN0IGZpcnN0QXJnID0gc3RlcElucHV0WzBdO1xuXG4gIGlmICghQXJyYXkuaXNBcnJheShmaXJzdEFyZykpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8vIFZhbGlkYXRlIGl0IGxvb2tzIGxpa2UgTW9kZWxNZXNzYWdlW11cbiAgaWYgKFxuICAgICFmaXJzdEFyZy5ldmVyeSgobXNnKSA9PiBtc2cgJiYgdHlwZW9mIG1zZyA9PT0gJ29iamVjdCcgJiYgJ3JvbGUnIGluIG1zZylcbiAgKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICByZXR1cm4gZmlyc3RBcmcgYXMgTW9kZWxNZXNzYWdlW107XG59XG5cbi8qKlxuICogQSBkb1N0cmVhbVN0ZXAgd2l0aCBpdHMgY29udmVyc2F0aW9uIGlucHV0IGV4dHJhY3RlZFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFN0cmVhbVN0ZXAge1xuICBzdGVwSWQ6IHN0cmluZztcbiAgc3RlcE5hbWU6IHN0cmluZztcbiAgZGlzcGxheU5hbWU6IHN0cmluZztcbiAgY29udmVyc2F0aW9uOiBNb2RlbE1lc3NhZ2VbXTtcbn1cblxuLyoqXG4gKiBJZGVudGlmaWVzIGFsbCBzdHJlYW0gc3RlcHMgKGRvU3RyZWFtU3RlcCkgaW4gYSBydW4gYW5kIGV4dHJhY3RzIHRoZWlyIGNvbnZlcnNhdGlvbnMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpZGVudGlmeVN0cmVhbVN0ZXBzKHN0ZXBzOiBTdGVwW10pOiBTdHJlYW1TdGVwW10ge1xuICByZXR1cm4gc3RlcHNcbiAgICAuZmlsdGVyKChzdGVwKSA9PiBpc0RvU3RyZWFtU3RlcChzdGVwLnN0ZXBOYW1lKSlcbiAgICAubWFwKChzdGVwKSA9PiB7XG4gICAgICBjb25zdCBmdW5jdGlvbk5hbWUgPSBzdGVwLnN0ZXBOYW1lLnNwbGl0KCcvLycpLnBvcCgpID8/ICd1bmtub3duJztcbiAgICAgIGNvbnN0IGNvbnZlcnNhdGlvbiA9IGV4dHJhY3RDb252ZXJzYXRpb24oc3RlcC5pbnB1dCkgPz8gW107XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHN0ZXBJZDogc3RlcC5zdGVwSWQsXG4gICAgICAgIHN0ZXBOYW1lOiBzdGVwLnN0ZXBOYW1lLFxuICAgICAgICBkaXNwbGF5TmFtZTogZnVuY3Rpb25OYW1lLFxuICAgICAgICBjb252ZXJzYXRpb24sXG4gICAgICB9O1xuICAgIH0pO1xufVxuIl19
167
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbGliL3V0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUdBLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQztBQUMxQixNQUFNLFlBQVksR0FBRyxFQUFFLEdBQUcsWUFBWSxDQUFDO0FBQ3ZDLE1BQU0sVUFBVSxHQUFHLEVBQUUsR0FBRyxZQUFZLENBQUM7QUFDckMsTUFBTSxTQUFTLEdBQUcsRUFBRSxHQUFHLFVBQVUsQ0FBQztBQUVsQzs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FpQkc7QUFDSCxNQUFNLFVBQVUsY0FBYyxDQUFDLEVBQVUsRUFBRSxPQUFPLEdBQUcsS0FBSztJQUN4RCxJQUFJLEVBQUUsS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUNiLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELElBQUksRUFBRSxHQUFHLFlBQVksRUFBRSxDQUFDO1FBQ3RCLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDakMsT0FBTyxTQUFTLEdBQUcsWUFBWSxDQUFDLENBQUMsQ0FBQyxHQUFHLFNBQVMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDNUQsQ0FBQztJQUVELE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxHQUFHLFlBQVksQ0FBQyxHQUFHLFlBQVksQ0FBQztJQUUvRCxJQUFJLFNBQVMsR0FBRyxZQUFZLEVBQUUsQ0FBQztRQUM3QixPQUFPLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLEdBQUcsWUFBWSxDQUFDLEdBQUcsQ0FBQztJQUNwRCxDQUFDO0lBRUQsd0VBQXdFO0lBQ3hFLElBQUksT0FBTyxFQUFFLENBQUM7UUFDWixJQUFJLFNBQVMsR0FBRyxVQUFVLEVBQUUsQ0FBQztZQUMzQixNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsR0FBRyxZ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QUFNLFlBQVksR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxTQUFTLENBQUM7UUFDbEUsTUFBTSxZQUFZLEdBQUcsbUJBQW1CLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUUzRCxPQUFPO1lBQ0wsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNO1lBQ25CLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUTtZQUN2QixXQUFXLEVBQUUsWUFBWTtZQUN6QixZQUFZO1NBQ2IsQ0FBQztJQUNKLENBQUMsQ0FBQyxDQUFDO0FBQ1AsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgU3RlcCB9IGZyb20gJ0B3b3JrZmxvdy93b3JsZCc7XG5pbXBvcnQgdHlwZSB7IE1vZGVsTWVzc2FnZSB9IGZyb20gJ2FpJztcblxuY29uc3QgTVNfSU5fU0VDT05EID0gMTAwMDtcbmNvbnN0IE1TX0lOX01JTlVURSA9IDYwICogTVNfSU5fU0VDT05EO1xuY29uc3QgTVNfSU5fSE9VUiA9IDYwICogTVNfSU5fTUlOVVRFO1xuY29uc3QgTVNfSU5fREFZID0gMjQgKiBNU19JTl9IT1VSO1xuXG4vKipcbiAqIEZvcm1hdHMgYSBkdXJhdGlvbiBpbiBtaWxsaXNlY29uZHMgdG8gYSBodW1hbi1yZWFkYWJsZSBzdHJpbmcuXG4gKlxuICogQHBhcmFtIG1zIC0gRHVyYXRpb24gaW4gbWlsbGlzZWNvbmRzXG4gKiBAcGFyYW0gY29tcGFjdCAtIElmIHRydWUsIHJldHVybnMgYSBjb21wYWN0IGZvcm1hdCAoZS5nLiwgXCIzODBtc1wiLCBcIjJtIDMwc1wiKS5cbiAqICAgICAgICAgICAgICAgICAgSWYgZmFsc2UgKGRlZmF1bHQpLCByZXR1cm5zIG11bHRpLXBhcnQgZm9ybWF0IChlLmcuLCBcIjFtIDEzc1wiLCBcIjJkIDVoIDNtIDEyc1wiKS5cbiAqXG4gKiBDb21wYWN0IGZvcm1hdCAodGltZWxpbmUgbWFya2Vycyk6XG4gKiAtIDwgMXM6IHNob3dzIG1pbGxpc2Vjb25kcyAoZS5nLiwgXCIzODBtc1wiKVxuICogLSA8IDFtOiBzaG93cyBzZWNvbmRzIChlLmcuLCBcIjQ1c1wiKVxuICogLSA8IDFoOiBzaG93cyBtaW51dGVzIGFuZCBzZWNvbmRzIChlLmcuLCBcIjJtIDMwc1wiKVxuICogLSA+PSAxaDogc2hvd3MgaG91cnMgYW5kIG1pbnV0ZXMgKGUuZy4sIFwiMmggMzBtXCIpXG4gKlxuICogRnVsbCBmb3JtYXQ6XG4gKiAtIDwgMXM6IHNob3dzIG1pbGxpc2Vjb25kcyAoZS5nLiwgXCIzODBtc1wiKVxuICogLSA8IDFtOiBzaG93cyBzZWNvbmRzIChlLmcuLCBcIjQ1c1wiKVxuICogLSA+PSAxbTogc2hvd3MgZGVjb21wb3NlZCBmb3JtYXQgd2l0aCB3aG9sZSBzZWNvbmRzIChlLmcuLCBcIjFtIDEzc1wiLCBcIjJtIDEzc1wiKVxuICovXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0RHVyYXRpb24obXM6IG51bWJlciwgY29tcGFjdCA9IGZhbHNlKTogc3RyaW5nIHtcbiAgaWYgKG1zID09PSAwKSB7XG4gICAgcmV0dXJuICcwcyc7XG4gIH1cblxuICBpZiAobXMgPCBNU19JTl9TRUNPTkQpIHtcbiAgICBjb25zdCByb3VuZGVkTXMgPSBNYXRoLnJvdW5kKG1zKTtcbiAgICByZXR1cm4gcm91bmRlZE1zIDwgTVNfSU5fU0VDT05EID8gYCR7cm91bmRlZE1zfW1zYCA6ICcxcyc7XG4gIH1cblxuICBjb25zdCByb3VuZGVkTXMgPSBNYXRoLnJvdW5kKG1zIC8gTVNfSU5fU0VDT05EKSAqIE1TX0lOX1NFQ09ORDtcblxuICBpZiAocm91bmRlZE1zIDwgTVNfSU5fTUlOVVRFKSB7XG4gICAgcmV0dXJuIGAke01hdGguZmxvb3Iocm91bmRlZE1zIC8gTVNfSU5fU0VDT05EKX1zYDtcbiAgfVxuXG4gIC8vIENvbXBhY3QgZm9ybWF0OiBtdWx0aS11bml0IHdpdGhvdXQgZGVjaW1hbHMgKGUuZy4gXCI4bSAyMHNcIiwgXCIyaCAzMG1cIilcbiAgaWYgKGNvbXBhY3QpIHtcbiAgICBpZiAocm91bmRlZE1zIDwgTVNfSU5fSE9VUikge1xuICAgICAgY29uc3QgbSA9IE1hdGguZmxvb3Iocm91bmRlZE1zIC8gTVNfSU5fTUlOVVRFKTtcbiAgICAgIGNvbnN0IHMgPSBNYXRoLmZsb29yKChyb3VuZGVkTXMgJSBNU19JTl9NSU5VVEUpIC8gTVNfSU5fU0VDT05EKTtcbiAgICAgIHJldHVybiBzID4gMCA/IGAke219bSAke3N9c2AgOiBgJHttfW1gO1xuICAgIH1cbiAgICBjb25zdCBoID0gTWF0aC5mbG9vcihyb3VuZGVkTXMgLyBNU19JTl9IT1VSKTtcbiAgICBjb25zdCBtID0gTWF0aC5mbG9vcigocm91bmRlZE1zICUgTVNfSU5fSE9VUikgLyBNU19JTl9NSU5VVEUpO1xuICAgIHJldHVybiBtID4gMCA/IGAke2h9aCAke219bWAgOiBgJHtofWhgO1xuICB9XG5cbiAgLy8gRnVsbCBmb3JtYXQ6IGRlY29tcG9zZSBpbnRvIGxhcmdlciB1bml0cyArIHdob2xlIHNlY29uZHMuXG4gIGNvbnN0IGRheXMgPSBNYXRoLmZsb29yKHJvdW5kZWRNcyAvIE1TX0lOX0RBWSk7XG4gIGNvbnN0IGhvdXJzID0gTWF0aC5mbG9vcigocm91bmRlZE1zICUgTVNfSU5fREFZKSAvIE1TX0lOX0hPVVIpO1xuICBjb25zdCBtaW51dGVzID0gTWF0aC5mbG9vcigocm91bmRlZE1zICUgTVNfSU5fSE9VUikgLyBNU19JTl9NSU5VVEUpO1xuICBjb25zdCBzZWNvbmRzID0gTWF0aC5mbG9vcigocm91bmRlZE1zICUgTVNfSU5fTUlOVVRFKSAvIE1TX0lOX1NFQ09ORCk7XG5cbiAgY29uc3QgcGFydHM6IHN0cmluZ1tdID0gW107XG5cbiAgaWYgKGRheXMgPiAwKSB7XG4gICAgcGFydHMucHVzaChgJHtkYXlzfWRgKTtcbiAgfVxuICBpZiAoaG91cnMgPiAwKSB7XG4gICAgcGFydHMucHVzaChgJHtob3Vyc31oYCk7XG4gIH1cbiAgaWYgKG1pbnV0ZXMgPiAwKSB7XG4gICAgcGFydHMucHVzaChgJHttaW51dGVzfW1gKTtcbiAgfVxuICBwYXJ0cy5wdXNoKGAke3NlY29uZHN9c2ApO1xuXG4gIHJldHVybiBwYXJ0cy5qb2luKCcgJyk7XG59XG5cbi8qKlxuICogRm9ybWF0cyBhIGR1cmF0aW9uIGluIG1pbGxpc2Vjb25kcyB3aXRob3V0IHNuYXBwaW5nIHRvIHdob2xlIHNlY29uZHMuXG4gKlxuICogVW5saWtlIHtAbGluayBmb3JtYXREdXJhdGlvbn0sIHRoaXMga2VlcHMgc3ViLXNlY29uZCBkZXRhaWwsIHNvIDE2MjZtc1xuICogcmVuZGVycyBhcyBcIjEuNjNzXCIgcmF0aGVyIHRoYW4gXCIyc1wiLiBgZnJhY3Rpb25EaWdpdHNgIHNldHMgYm90aCB0aGUgbnVtYmVyIG9mXG4gKiBkZWNpbWFscyBvbiB0aGUgc2Vjb25kcyBjb21wb25lbnQgKHRyYWlsaW5nIHplcm9zIHRyaW1tZWQsIHNvIDIwMDBtcyBpcyBcIjJzXCJcbiAqIGFuZCAxNTAwbXMgaXMgXCIxLjVzXCIpIGFuZCB0aGUgcm91bmRpbmcgZ3JhbnVsYXJpdHkg4oCUIHRoZSBkZWZhdWx0IG9mIDIgcm91bmRzXG4gKiB0byAxMG1zOyB0aGUgdGltZWxpbmUgcnVsZXIgcGFzc2VzIGZld2VyIGRpZ2l0cyB0byBtYXRjaCBpdHMgdGljayBzdGVwLlxuICpcbiAqIC0gPCAxczogc2hvd3Mgd2hvbGUgbWlsbGlzZWNvbmRzIChlLmcuIFwiNjI2bXNcIilcbiAqIC0gMXMg4oCTIDFtOiBzaG93cyBzZWNvbmRzIHdpdGggdHJpbW1lZCBkZWNpbWFscyAoZS5nLiBcIjEuNjNzXCIsIFwiMS41c1wiLCBcIjQ1c1wiKVxuICogLSA+PSAxbTogZGVjb21wb3NlcyBpbnRvIGQvaC9tIHdpdGggdHJpbW1lZC1kZWNpbWFsIHNlY29uZHMgKGUuZy4gXCIxbSAxMy40NXNcIilcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdER1cmF0aW9uUHJlY2lzZShtczogbnVtYmVyLCBmcmFjdGlvbkRpZ2l0cyA9IDIpOiBzdHJpbmcge1xuICBpZiAobXMgPT09IDApIHtcbiAgICByZXR1cm4gJzBzJztcbiAgfVxuXG4gIGlmIChtcyA8IE1TX0lOX1NFQ09ORCkge1xuICAgIGNvbnN0IHJvdW5kZWRNcyA9IE1hdGgucm91bmQobXMpO1xuICAgIGlmIChyb3VuZGVkTXMgPCBNU19JTl9TRUNPTkQpIHtcbiAgICAgIHJldHVybiBgJHtyb3VuZGVkTXN9bXNgO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGdyYW51bGFyaXR5TXMgPSBNU19JTl9TRUNPTkQgLyAxMCAqKiBmcmFjdGlvbkRpZ2l0cztcbiAgY29uc3Qgbm9ybWFsaXplZE1zID0gTWF0aC5yb3VuZChtcyAvIGdyYW51bGFyaXR5TXMpICogZ3JhbnVsYXJpdHlNcztcblxuICBpZiAobm9ybWFsaXplZE1zIDwgTVNfSU5fTUlOVVRFKSB7XG4gICAgcmV0dXJuIGAke051bWJlcigobm9ybWFsaXplZE1zIC8gTVNfSU5fU0VDT05EKS50b0ZpeGVkKGZyYWN0aW9uRGlnaXRzKSl9c2A7XG4gIH1cblxuICBjb25zdCBkYXlzID0gTWF0aC5mbG9vcihub3JtYWxpemVkTXMgLyBNU19JTl9EQVkpO1xuICBjb25zdCBob3VycyA9IE1hdGguZmxvb3IoKG5vcm1hbGl6ZWRNcyAlIE1TX0lOX0RBWSkgLyBNU19JTl9IT1VSKTtcbiAgY29uc3QgbWludXRlcyA9IE1hdGguZmxvb3IoKG5vcm1hbGl6ZWRNcyAlIE1TX0lOX0hPVVIpIC8gTVNfSU5fTUlOVVRFKTtcbiAgY29uc3Qgc2Vjb25kcyA9IChub3JtYWxpemVkTXMgJSBNU19JTl9NSU5VVEUpIC8gTVNfSU5fU0VDT05EO1xuXG4gIGNvbnN0IHBhcnRzOiBzdHJpbmdbXSA9IFtdO1xuXG4gIGlmIChkYXlzID4gMCkge1xuICAgIHBhcnRzLnB1c2goYCR7ZGF5c31kYCk7XG4gIH1cbiAgaWYgKGhvdXJzID4gMCkge1xuICAgIHBhcnRzLnB1c2goYCR7aG91cnN9aGApO1xuICB9XG4gIGlmIChtaW51dGVzID4gMCkge1xuICAgIHBhcnRzLnB1c2goYCR7bWludXRlc31tYCk7XG4gIH1cbiAgcGFydHMucHVzaChgJHtOdW1iZXIoc2Vjb25kcy50b0ZpeGVkKGZyYWN0aW9uRGlnaXRzKSl9c2ApO1xuXG4gIHJldHVybiBwYXJ0cy5qb2luKCcgJyk7XG59XG5cbi8qKlxuICogUmV0dXJucyBhIGZvcm1hdHRlZCBwYWdpbmF0aW9uIGRpc3BsYXkgc3RyaW5nXG4gKiBAcGFyYW0gY3VycmVudFBhZ2UgLSBUaGUgY3VycmVudCBwYWdlIG51bWJlclxuICogQHBhcmFtIHRvdGFsUGFnZXMgLSBUaGUgdG90YWwgbnVtYmVyIG9mIHBhZ2VzIHZpc2l0ZWQgc28gZmFyXG4gKiBAcGFyYW0gaGFzTW9yZSAtIFdoZXRoZXIgdGhlcmUgYXJlIG1vcmUgcGFnZXMgYXZhaWxhYmxlXG4gKiBAcmV0dXJucyBGb3JtYXR0ZWQgc3RyaW5nIGxpa2UgXCJQYWdlIDEgb2YgMytcIiBvciBcIlBhZ2UgMiBvZiAyXCJcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFBhZ2luYXRpb25EaXNwbGF5KFxuICBjdXJyZW50UGFnZTogbnVtYmVyLFxuICB0b3RhbFBhZ2VzOiBudW1iZXIsXG4gIGhhc01vcmU6IGJvb2xlYW5cbik6IHN0cmluZyB7XG4gIGlmIChoYXNNb3JlKSB7XG4gICAgcmV0dXJuIGBQYWdlICR7Y3VycmVudFBhZ2V9IG9mICR7dG90YWxQYWdlc30rYDtcbiAgfVxuICByZXR1cm4gYFBhZ2UgJHtjdXJyZW50UGFnZX0gb2YgJHt0b3RhbFBhZ2VzfWA7XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIER1cmFibGUgQWdlbnQgVXRpbGl0aWVzXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKlxuICogQ2hlY2sgaWYgYSBzdGVwIGlzIGEgZG9TdHJlYW1TdGVwIChMTE0gY2FsbCB3aXRoIGNvbnZlcnNhdGlvbiBpbnB1dClcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzRG9TdHJlYW1TdGVwKHN0ZXBOYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgcmV0dXJuIHN0ZXBOYW1lLmVuZHNXaXRoKCcvL2RvU3RyZWFtU3RlcCcpO1xufVxuXG4vKipcbiAqIEV4dHJhY3QgdGhlIGNvbnZlcnNhdGlvbiBmcm9tIGEgaHlkcmF0ZWQgZG9TdHJlYW1TdGVwIGlucHV0LlxuICogZG9TdHJlYW1TdGVwIHNpZ25hdHVyZTogKGNvbnZlcnNhdGlvblByb21wdCwgbW9kZWwsIHdyaXRhYmxlLCB0b29scywgb3B0aW9ucylcbiAqIFNvIGlucHV0WzBdIGlzIHRoZSBjb252ZXJzYXRpb24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBleHRyYWN0Q29udmVyc2F0aW9uKHN0ZXBJbnB1dDogdW5rbm93bik6IE1vZGVsTWVzc2FnZVtdIHwgbnVsbCB7XG4gIGlmICghQXJyYXkuaXNBcnJheShzdGVwSW5wdXQpIHx8IHN0ZXBJbnB1dC5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNvbnN0IGZpcnN0QXJnID0gc3RlcElucHV0WzBdO1xuXG4gIGlmICghQXJyYXkuaXNBcnJheShmaXJzdEFyZykpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8vIFZhbGlkYXRlIGl0IGxvb2tzIGxpa2UgTW9kZWxNZXNzYWdlW11cbiAgaWYgKFxuICAgICFmaXJzdEFyZy5ldmVyeSgobXNnKSA9PiBtc2cgJiYgdHlwZW9mIG1zZyA9PT0gJ29iamVjdCcgJiYgJ3JvbGUnIGluIG1zZylcbiAgKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICByZXR1cm4gZmlyc3RBcmcgYXMgTW9kZWxNZXNzYWdlW107XG59XG5cbi8qKlxuICogQSBkb1N0cmVhbVN0ZXAgd2l0aCBpdHMgY29udmVyc2F0aW9uIGlucHV0IGV4dHJhY3RlZFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFN0cmVhbVN0ZXAge1xuICBzdGVwSWQ6IHN0cmluZztcbiAgc3RlcE5hbWU6IHN0cmluZztcbiAgZGlzcGxheU5hbWU6IHN0cmluZztcbiAgY29udmVyc2F0aW9uOiBNb2RlbE1lc3NhZ2VbXTtcbn1cblxuLyoqXG4gKiBJZGVudGlmaWVzIGFsbCBzdHJlYW0gc3RlcHMgKGRvU3RyZWFtU3RlcCkgaW4gYSBydW4gYW5kIGV4dHJhY3RzIHRoZWlyIGNvbnZlcnNhdGlvbnMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpZGVudGlmeVN0cmVhbVN0ZXBzKHN0ZXBzOiBTdGVwW10pOiBTdHJlYW1TdGVwW10ge1xuICByZXR1cm4gc3RlcHNcbiAgICAuZmlsdGVyKChzdGVwKSA9PiBpc0RvU3RyZWFtU3RlcChzdGVwLnN0ZXBOYW1lKSlcbiAgICAubWFwKChzdGVwKSA9PiB7XG4gICAgICBjb25zdCBmdW5jdGlvbk5hbWUgPSBzdGVwLnN0ZXBOYW1lLnNwbGl0KCcvLycpLnBvcCgpID8/ICd1bmtub3duJztcbiAgICAgIGNvbnN0IGNvbnZlcnNhdGlvbiA9IGV4dHJhY3RDb252ZXJzYXRpb24oc3RlcC5pbnB1dCkgPz8gW107XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHN0ZXBJZDogc3RlcC5zdGVwSWQsXG4gICAgICAgIHN0ZXBOYW1lOiBzdGVwLnN0ZXBOYW1lLFxuICAgICAgICBkaXNwbGF5TmFtZTogZnVuY3Rpb25OYW1lLFxuICAgICAgICBjb252ZXJzYXRpb24sXG4gICAgICB9O1xuICAgIH0pO1xufVxuIl19
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@workflow/web-shared",
3
3
  "description": "Shared components for Workflow Observability UI",
4
- "version": "5.0.0-beta.27",
4
+ "version": "5.0.0-beta.29",
5
5
  "private": false,
6
6
  "files": [
7
7
  "dist",
@@ -55,9 +55,9 @@
55
55
  "streamdown": "2.3.0",
56
56
  "tailwind-merge": "3.5.0",
57
57
  "tailwindcss": "4",
58
- "@workflow/core": "5.0.0-beta.27",
59
- "@workflow/utils": "5.0.0-beta.5",
60
- "@workflow/world": "5.0.0-beta.15"
58
+ "@workflow/core": "5.0.0-beta.29",
59
+ "@workflow/utils": "5.0.0-beta.6",
60
+ "@workflow/world": "5.0.0-beta.17"
61
61
  },
62
62
  "devDependencies": {
63
63
  "@biomejs/biome": "^2.4.4",
@@ -67,7 +67,7 @@
67
67
  "ai": "6.0.116",
68
68
  "typescript": "^6.0.3",
69
69
  "vitest": "^4.0.18",
70
- "@workflow/errors": "5.0.0-beta.9",
70
+ "@workflow/errors": "5.0.0-beta.10",
71
71
  "@workflow/tsconfig": "5.0.0-beta.0"
72
72
  },
73
73
  "scripts": {
@@ -628,6 +628,27 @@ function PayloadBlock({
628
628
  return <AttrSetEventBlock data={cleaned} />;
629
629
  }
630
630
 
631
+ // Cancellation reason — render the free-text reason as a readable line
632
+ // instead of a raw JSON payload (the only field run_cancelled carries).
633
+ if (eventType === 'run_cancelled') {
634
+ const cancelReason =
635
+ cleaned != null &&
636
+ typeof cleaned === 'object' &&
637
+ typeof (cleaned as Record<string, unknown>).cancelReason === 'string'
638
+ ? ((cleaned as Record<string, unknown>).cancelReason as string)
639
+ : null;
640
+ if (cancelReason) {
641
+ return (
642
+ <div className="p-2 text-xs" style={{ color: 'var(--ds-gray-1000)' }}>
643
+ <span style={{ color: 'var(--ds-gray-900)' }}>Reason: </span>
644
+ <span className="whitespace-pre-wrap break-words">
645
+ {cancelReason}
646
+ </span>
647
+ </div>
648
+ );
649
+ }
650
+ }
651
+
631
652
  return (
632
653
  <div className="relative group/payload">
633
654
  <div
@@ -264,6 +264,7 @@ export function TraceDetailPanel({
264
264
  showSeparateEventOccurrenceTimestamps={
265
265
  sidebar.showSeparateEventOccurrenceTimestamps
266
266
  }
267
+ getModuleSourceUrl={sidebar.getModuleSourceUrl}
267
268
  />
268
269
  </ErrorBoundary>
269
270
  </div>
@@ -1,7 +1,6 @@
1
1
  import { Circle } from 'lucide-react';
2
2
  import { useRef } from 'react';
3
3
  import { cn } from '../../../lib/cn';
4
- import type { Span } from '../types';
5
4
  import { formatDurationPrecise } from '../../trace-viewer/util/timing';
6
5
  import {
7
6
  SleepIcon,
@@ -10,7 +9,8 @@ import {
10
9
  WorkflowIcon,
11
10
  } from '../icons';
12
11
  import { isSpanDimmedBySearch, type SpanSearchResult } from '../search';
13
- import { getSpanDurationMs } from '../utils';
12
+ import type { Span } from '../types';
13
+ import { getSpanDurationMs, isSpanErrored } from '../utils';
14
14
  import { MiddleTruncate } from './middle-truncate/middle-truncate';
15
15
  import { ROW_HEIGHT_PX, useRowWindow } from './use-row-window';
16
16
 
@@ -53,9 +53,7 @@ const EventRow = ({
53
53
  onSelectSpan: (spanId: string) => void;
54
54
  }) => {
55
55
  const durationMs = getSpanDurationMs(span);
56
- const workflowStatus = (span.attributes.data as Record<string, unknown>)
57
- ?.status as string | undefined;
58
- const isErrored = span.status.code === 2 || workflowStatus === 'failed';
56
+ const isErrored = isSpanErrored(span);
59
57
  const { icon: Icon, className: tagClassName } = getEventStyle(
60
58
  span.resource,
61
59
  isErrored
@@ -114,7 +112,7 @@ const EventList = ({
114
112
  ref={listRef}
115
113
  id="event-list"
116
114
  role="tree"
117
- className="block min-h-0 overflow-visible divide-y divide-gray-alpha-400 border-b border-gray-alpha-400"
115
+ className="block min-h-0 overflow-visible divide-y divide-gray-400 border-b border-gray-400"
118
116
  style={{
119
117
  paddingTop: start * ROW_HEIGHT_PX,
120
118
  paddingBottom: (spans.length - end) * ROW_HEIGHT_PX,