@workflow/web-shared 5.0.0-beta.23 → 5.0.0-beta.25
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -10
- package/dist/components/event-list-view.d.ts +30 -0
- package/dist/components/event-list-view.d.ts.map +1 -1
- package/dist/components/event-list-view.js +27 -12
- package/dist/components/index.d.ts +4 -3
- package/dist/components/index.d.ts.map +1 -1
- package/dist/components/index.js +3 -3
- package/dist/components/new-trace-viewer/components/copy-button.js +2 -2
- package/dist/components/new-trace-viewer/components/event-list.js +2 -2
- package/dist/components/new-trace-viewer/components/middle-truncate/middle-truncate.js +2 -2
- package/dist/components/new-trace-viewer/components/span-markers.js +3 -3
- package/dist/components/new-trace-viewer/components/split-pane.js +2 -2
- package/dist/components/new-trace-viewer/components/timeline.js +2 -2
- package/dist/components/new-trace-viewer/trace-viewer.js +4 -4
- package/dist/components/run-trace-view.d.ts +5 -7
- package/dist/components/run-trace-view.d.ts.map +1 -1
- package/dist/components/run-trace-view.js +3 -3
- package/dist/components/sidebar/attribute-panel.d.ts.map +1 -1
- package/dist/components/sidebar/attribute-panel.js +3 -5
- package/dist/components/sidebar/detail-card.js +2 -2
- package/dist/components/sidebar/entity-detail-panel.d.ts +6 -10
- package/dist/components/sidebar/entity-detail-panel.d.ts.map +1 -1
- package/dist/components/sidebar/entity-detail-panel.js +8 -60
- package/dist/components/sidebar/events-list.d.ts +3 -1
- package/dist/components/sidebar/events-list.d.ts.map +1 -1
- package/dist/components/sidebar/events-list.js +31 -9
- package/dist/components/sidebar/sidebar-data-context.d.ts +5 -6
- package/dist/components/sidebar/sidebar-data-context.d.ts.map +1 -1
- package/dist/components/sidebar/sidebar-data-context.js +1 -1
- package/dist/components/sidebar/span-detail-merge.d.ts +15 -0
- package/dist/components/sidebar/span-detail-merge.d.ts.map +1 -1
- package/dist/components/sidebar/span-detail-merge.js +40 -1
- package/dist/components/sidebar/use-selected-span-detail.d.ts +16 -0
- package/dist/components/sidebar/use-selected-span-detail.d.ts.map +1 -0
- package/dist/components/sidebar/use-selected-span-detail.js +93 -0
- package/dist/components/ui/alert.js +2 -2
- package/dist/components/ui/button.js +2 -2
- package/dist/components/ui/card.js +2 -2
- package/dist/components/ui/context-card.js +2 -2
- package/dist/components/ui/error-card.js +2 -2
- package/dist/components/ui/icon-button.js +2 -2
- package/dist/components/ui/kbd.js +2 -2
- package/dist/components/ui/skeleton.js +2 -2
- package/dist/components/ui/tooltip.js +2 -2
- package/dist/components/workflow-trace-view.d.ts +6 -7
- package/dist/components/workflow-trace-view.d.ts.map +1 -1
- package/dist/components/workflow-trace-view.js +3 -6
- package/dist/components/workflow-traces/trace-span-construction.d.ts +4 -1
- package/dist/components/workflow-traces/trace-span-construction.d.ts.map +1 -1
- package/dist/components/workflow-traces/trace-span-construction.js +69 -29
- package/dist/lib/cn.d.ts +10 -0
- package/dist/lib/cn.d.ts.map +1 -0
- package/dist/lib/cn.js +83 -0
- package/dist/lib/event-materialization.d.ts.map +1 -1
- package/dist/lib/event-materialization.js +22 -15
- package/dist/lib/trace-builder.d.ts.map +1 -1
- package/dist/lib/trace-builder.js +3 -3
- package/dist/lib/utils.d.ts +0 -2
- package/dist/lib/utils.d.ts.map +1 -1
- package/dist/lib/utils.js +1 -6
- package/package.json +3 -3
- package/src/components/event-list-view.tsx +76 -13
- package/src/components/index.ts +10 -6
- package/src/components/new-trace-viewer/components/copy-button.tsx +1 -1
- package/src/components/new-trace-viewer/components/event-list.tsx +1 -1
- package/src/components/new-trace-viewer/components/middle-truncate/middle-truncate.tsx +1 -1
- package/src/components/new-trace-viewer/components/span-markers.tsx +2 -2
- package/src/components/new-trace-viewer/components/split-pane.tsx +1 -1
- package/src/components/new-trace-viewer/components/timeline.tsx +1 -1
- package/src/components/new-trace-viewer/trace-viewer.tsx +6 -6
- package/src/components/run-trace-view.tsx +10 -14
- package/src/components/sidebar/attribute-panel.tsx +2 -4
- package/src/components/sidebar/detail-card.tsx +1 -1
- package/src/components/sidebar/entity-detail-panel.tsx +23 -94
- package/src/components/sidebar/events-list.tsx +58 -8
- package/src/components/sidebar/sidebar-data-context.tsx +6 -7
- package/src/components/sidebar/span-detail-merge.ts +69 -0
- package/src/components/sidebar/use-selected-span-detail.ts +146 -0
- package/src/components/ui/alert.tsx +1 -1
- package/src/components/ui/button.tsx +1 -1
- package/src/components/ui/card.tsx +1 -1
- package/src/components/ui/context-card.tsx +1 -1
- package/src/components/ui/error-card.tsx +1 -1
- package/src/components/ui/icon-button.tsx +1 -1
- package/src/components/ui/kbd.tsx +1 -1
- package/src/components/ui/skeleton.tsx +1 -1
- package/src/components/ui/tooltip.tsx +1 -1
- package/src/components/workflow-trace-view.tsx +11 -21
- package/src/components/workflow-traces/trace-span-construction.test.ts +85 -0
- package/src/components/workflow-traces/trace-span-construction.ts +93 -29
- package/src/lib/cn.ts +93 -0
- package/src/lib/event-materialization.ts +22 -14
- package/src/lib/trace-builder.ts +2 -1
- package/src/lib/utils.ts +0 -6
|
@@ -2,21 +2,15 @@
|
|
|
2
2
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
3
|
import clsx from 'clsx';
|
|
4
4
|
import { Send, Zap } from 'lucide-react';
|
|
5
|
-
import { useCallback, useEffect, useMemo,
|
|
5
|
+
import { useCallback, useEffect, useMemo, useState } from 'react';
|
|
6
6
|
import { useToast } from '../../lib/toast';
|
|
7
7
|
import { DecryptClickContext } from '../ui/data-inspector';
|
|
8
8
|
import { AttributePanel } from './attribute-panel';
|
|
9
9
|
import { EventsList } from './events-list';
|
|
10
10
|
import { ResolveHookModal } from './resolve-hook-modal';
|
|
11
11
|
import { useSidebarDataOptional } from './sidebar-data-context';
|
|
12
|
-
import {
|
|
13
|
-
// Type
|
|
14
|
-
function isStep(data) {
|
|
15
|
-
return data !== null && typeof data === 'object' && 'stepId' in data;
|
|
16
|
-
}
|
|
17
|
-
function isWorkflowRun(data) {
|
|
18
|
-
return data !== null && typeof data === 'object' && 'runId' in data;
|
|
19
|
-
}
|
|
12
|
+
import { useSelectedSpanDetail, } from './use-selected-span-detail';
|
|
13
|
+
// Type guard for runtime validation of span attribute data
|
|
20
14
|
function isHook(data) {
|
|
21
15
|
return data !== null && typeof data === 'object' && 'hookId' in data;
|
|
22
16
|
}
|
|
@@ -26,7 +20,7 @@ function isHook(data) {
|
|
|
26
20
|
* This component is rendered OUTSIDE the trace viewer context — it
|
|
27
21
|
* receives all data via props rather than reading from context.
|
|
28
22
|
*/
|
|
29
|
-
export function EntityDetailPanel({ run, onStreamClick, onRunClick,
|
|
23
|
+
export function EntityDetailPanel({ run, onStreamClick, onRunClick, fetchSpanDetail, onWakeUpSleep, onLoadEventData, onResolveHook, encryptionKey, onDecrypt, isDecrypting = false, selectedSpan, showSeparateEventOccurrenceTimestamps = false, }) {
|
|
30
24
|
const toast = useToast();
|
|
31
25
|
const [stoppingSleep, setStoppingSleep] = useState(false);
|
|
32
26
|
const [showResolveHookModal, setShowResolveHookModal] = useState(false);
|
|
@@ -39,48 +33,8 @@ export function EntityDetailPanel({ run, onStreamClick, onRunClick, spanDetailDa
|
|
|
39
33
|
const data = selectedSpan?.data;
|
|
40
34
|
const rawEvents = selectedSpan?.rawEvents;
|
|
41
35
|
const rawEventsLength = rawEvents?.length ?? 0;
|
|
42
|
-
|
|
43
|
-
const
|
|
44
|
-
if (!selectedSpan) {
|
|
45
|
-
return { resource: undefined, resourceId: undefined, runId: undefined };
|
|
46
|
-
}
|
|
47
|
-
const res = selectedSpan.resource;
|
|
48
|
-
if (res === 'step' && isStep(data)) {
|
|
49
|
-
return { resource: 'step', resourceId: data.stepId, runId: data.runId };
|
|
50
|
-
}
|
|
51
|
-
if (res === 'run' && isWorkflowRun(data)) {
|
|
52
|
-
return { resource: 'run', resourceId: data.runId, runId: undefined };
|
|
53
|
-
}
|
|
54
|
-
if (res === 'hook' && isHook(data)) {
|
|
55
|
-
return { resource: 'hook', resourceId: data.hookId, runId: undefined };
|
|
56
|
-
}
|
|
57
|
-
if (res === 'sleep') {
|
|
58
|
-
const waitData = data;
|
|
59
|
-
return {
|
|
60
|
-
resource: 'sleep',
|
|
61
|
-
resourceId: selectedSpan.spanId,
|
|
62
|
-
runId: waitData?.runId,
|
|
63
|
-
};
|
|
64
|
-
}
|
|
65
|
-
return { resource: undefined, resourceId: undefined, runId: undefined };
|
|
66
|
-
}, [selectedSpan, data]);
|
|
67
|
-
// Notify parent when span selection changes.
|
|
68
|
-
// Use a ref for the callback so the effect only fires when the actual
|
|
69
|
-
// selection values change, not when the callback identity changes due to
|
|
70
|
-
// parent re-renders from polling.
|
|
71
|
-
const onSpanSelectRef = useRef(onSpanSelect);
|
|
72
|
-
onSpanSelectRef.current = onSpanSelect;
|
|
73
|
-
useEffect(() => {
|
|
74
|
-
if (resource &&
|
|
75
|
-
resourceId &&
|
|
76
|
-
['run', 'step', 'hook', 'sleep'].includes(resource)) {
|
|
77
|
-
onSpanSelectRef.current({
|
|
78
|
-
resource: resource,
|
|
79
|
-
resourceId,
|
|
80
|
-
runId,
|
|
81
|
-
});
|
|
82
|
-
}
|
|
83
|
-
}, [resource, resourceId, runId]);
|
|
36
|
+
const { status, resource, resourceId, displayData, detail: matchedSpanDetailData, error, } = useSelectedSpanDetail(selectedSpan, fetchSpanDetail);
|
|
37
|
+
const loading = status === 'loading';
|
|
84
38
|
// Check if this sleep is still pending and can be woken up
|
|
85
39
|
const canWakeUp = useMemo(() => {
|
|
86
40
|
void rawEventsLength;
|
|
@@ -118,11 +72,6 @@ export function EntityDetailPanel({ run, onStreamClick, onRunClick, spanDetailDa
|
|
|
118
72
|
run.status,
|
|
119
73
|
resolvedHookIds,
|
|
120
74
|
]);
|
|
121
|
-
const error = spanDetailError ?? undefined;
|
|
122
|
-
const loading = spanDetailLoading ?? false;
|
|
123
|
-
const matchedSpanDetailData = useMemo(() => spanDetailMatchesSelection(spanDetailData, resource, resourceId)
|
|
124
|
-
? spanDetailData
|
|
125
|
-
: null, [spanDetailData, resource, resourceId]);
|
|
126
75
|
// Get the hook token for resolving (prefer fetched data, then hooks array fallback)
|
|
127
76
|
const hookToken = useMemo(() => {
|
|
128
77
|
if (resource !== 'hook' || !resourceId)
|
|
@@ -216,7 +165,6 @@ export function EntityDetailPanel({ run, onStreamClick, onRunClick, spanDetailDa
|
|
|
216
165
|
setResolvingHook(false);
|
|
217
166
|
}
|
|
218
167
|
}, [onResolveHook, hookToken, resolvingHook, matchedSpanDetailData, data]);
|
|
219
|
-
const displayData = useMemo(() => mergeSpanDetail(data, matchedSpanDetailData), [data, matchedSpanDetailData]);
|
|
220
168
|
const moduleSpecifier = useMemo(() => {
|
|
221
169
|
const displayRecord = displayData;
|
|
222
170
|
const displayStepName = displayRecord.stepName;
|
|
@@ -250,6 +198,6 @@ export function EntityDetailPanel({ run, onStreamClick, onRunClick, spanDetailDa
|
|
|
250
198
|
: 'cursor-pointer'), style: {
|
|
251
199
|
background: 'var(--ds-gray-1000)',
|
|
252
200
|
color: 'var(--ds-background-100)',
|
|
253
|
-
}, 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 }))] }) }), _jsx(ResolveHookModal, { isOpen: showResolveHookModal, onClose: () => setShowResolveHookModal(false), onSubmit: handleResolveHook, isSubmitting: resolvingHook })] }));
|
|
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 })] }));
|
|
254
202
|
}
|
|
255
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50aXR5LWRldGFpbC1wYW5lbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21wb25lbnRzL3NpZGViYXIvZW50aXR5LWRldGFpbC1wYW5lbC50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWSxDQUFDOztBQUdiLE9BQU8sSUFBSSxNQUFNLE1BQU0sQ0FBQztBQUN4QixPQUFPLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUN6QyxPQUFPLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxNQUFNLE9BQU8sQ0FBQztBQUMxRSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDM0MsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDeEQsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDaEUsT0FBTyxFQUNMLGVBQWUsRUFDZiwwQkFBMEIsR0FDM0IsTUFBTSxxQkFBcUIsQ0FBQztBQUU3Qiw0REFBNEQ7QUFDNUQsU0FBUyxNQUFNLENBQUMsSUFBYTtJQUMzQixPQUFPLElBQUksS0FBSyxJQUFJLElBQUksT0FBTyxJQUFJLEtBQUssUUFBUSxJQUFJLFFBQVEsSUFBSSxJQUFJLENBQUM7QUFDdkUsQ0FBQztBQUVELFNBQVMsYUFBYSxDQUFDLElBQWE7SUFDbEMsT0FBTyxJQUFJLEtBQUssSUFBSSxJQUFJLE9BQU8sSUFBSSxLQUFLLFFBQVEsSUFBSSxPQUFPLElBQUksSUFBSSxDQUFDO0FBQ3RFLENBQUM7QUFFRCxTQUFTLE1B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Q0gsSUFDRyxHQUN1QixFQUcvQixLQUFDLGdCQUFnQixJQUNmLE1BQU0sRUFBRSxvQkFBb0IsRUFDNUIsT0FBTyxFQUFFLEdBQUcsRUFBRSxDQUFDLHVCQUF1QixDQUFDLEtBQUssQ0FBQyxFQUM3QyxRQUFRLEVBQUUsaUJBQWlCLEVBQzNCLFlBQVksRUFBRSxhQUFhLEdBQzNCLElBQ0UsQ0FDUCxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIid1c2UgY2xpZW50JztcblxuaW1wb3J0IHR5cGUgeyBFdmVudCwgSG9vaywgU3RlcCwgV29ya2Zsb3dSdW4gfSBmcm9tICdAd29ya2Zsb3cvd29ybGQnO1xuaW1wb3J0IGNsc3ggZnJvbSAnY2xzeCc7XG5pbXBvcnQgeyBTZW5kLCBaYXAgfSBmcm9tICdsdWNpZGUtcmVhY3QnO1xuaW1wb3J0IHsgdXNlQ2FsbGJhY2ssIHVzZUVmZmVjdCwgdXNlTWVtbywgdXNlUmVmLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHVzZVRvYXN0IH0gZnJvbSAnLi4vLi4vbGliL3RvYXN0JztcbmltcG9ydCB7IERlY3J5cHRDbGlja0NvbnRleHQgfSBmcm9tICcuLi91aS9kYXRhLWluc3BlY3Rvcic7XG5pbXBvcnQgeyBBdHRyaWJ1dGVQYW5lbCB9IGZyb20gJy4vYXR0cmlidXRlLXBhbmVsJztcbmltcG9ydCB7IEV2ZW50c0xpc3QgfSBmcm9tICcuL2V2ZW50cy1saXN0JztcbmltcG9ydCB7IFJlc29sdmVIb29rTW9kYWwgfSBmcm9tICcuL3Jlc29sdmUtaG9vay1tb2RhbCc7XG5pbXBvcnQgeyB1c2VTaWRlYmFyRGF0YU9wdGlvbmFsIH0gZnJvbSAnLi9zaWRlYmFyLWRhdGEtY29udGV4dCc7XG5pbXBvcnQge1xuICBtZXJnZVNwYW5EZXRhaWwsXG4gIHNwYW5EZXRhaWxNYXRjaGVzU2VsZWN0aW9uLFxufSBmcm9tICcuL3NwYW4tZGV0YWlsLW1lcmdlJztcblxuLy8gVHlwZSBndWFyZHMgZm9yIHJ1bnRpbWUgdmFsaWRhdGlvbiBvZiBzcGFuIGF0dHJpYnV0ZSBkYXRhXG5mdW5jdGlvbiBpc1N0ZXAoZGF0YTogdW5rbm93bik6IGRhdGEgaXMgU3RlcCB7XG4gIHJldHVybiBkYXRhICE9PSBudWxsICYmIHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyAmJiAnc3RlcElkJyBpbiBkYXRhO1xufVxuXG5mdW5jdGlvbiBpc1dvcmtmbG93UnVuKGRhdGE6IHVua25vd24pOiBkYXRhIGlzIFdvcmtmbG93UnVuIHtcbiAgcmV0dXJuIGRhdGEgIT09IG51bGwgJiYgdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnICYmICdydW5JZCcgaW4gZGF0YTtcbn1cblxuZnVuY3Rpb24gaXNIb29rKGRhdGE6IHVua25vd24pOiBkYXRhIGlzIEhvb2sge1xuICByZXR1cm4gZGF0YSAhPT0gbnVsbCAmJiB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgJiYgJ2hvb2tJZCcgaW4gZGF0YTtcbn1cblxuLyoqXG4gKiBJbmZvIGFib3V0IHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgc3BhblxuICovXG5leHBvcnQgdHlwZSBTcGFuU2VsZWN0aW9uSW5mbyA9IHtcbiAgcmVzb3VyY2U6ICdydW4nIHwgJ3N0ZXAnIHwgJ2hvb2snIHwgJ3NsZWVwJztcbiAgcmVzb3VyY2VJZDogc3RyaW5nO1xuICBydW5JZD86IHN0cmluZztcbn07XG5cbi8qKlxuICogSW5mbyBhYm91dCB0aGUgc2VsZWN0ZWQgc3BhbiBmcm9tIHRoZSB0cmFjZSB2aWV3ZXIuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2VsZWN0ZWRTcGFuSW5mbyB7XG4gIC8qKiBUaGUgcmF3IGRhdGEgZnJvbSB0aGUgc3BhbiBhdHRyaWJ1dGVzIChzdGVwL3J1bi9ob29rIG9iamVjdCBmcm9tIHRoZSB0cmFjZSkgKi9cbiAgZGF0YT86IHVua25vd247XG4gIC8qKiBUaGUgc3BhbiByZXNvdXJjZSB0eXBlIChmcm9tIHNwYW4gYXR0cmlidXRlcykgKi9cbiAgcmVzb3VyY2U/OiBzdHJpbmc7XG4gIC8qKiBUaGUgc3BhbiBJRCAoY29ycmVsYXRpb25JZCBmb3IgZmlsdGVyaW5nIGV2ZW50cykgKi9cbiAgc3BhbklkPzogc3RyaW5nO1xuICAvKiogUmF3IGNvcnJlbGF0ZWQgZXZlbnRzIGZyb20gdGhlIHN0b3JlIChOT1QgZnJvbSB0aGUgdHJhY2Ugd29ya2VyIHBpcGVsaW5lKSAqL1xuICByYXdFdmVudHM/OiBFdmVudFtdO1xufVxuXG4vKipcbiAqIFBhbmVsIGNvbXBvbmVudCBmb3Igd29ya2Zsb3cgdHJhY2VzIHRoYXQgZGlzcGxheXMgZW50aXR5IGRldGFpbHMuXG4gKlxuICogVGhpcyBjb21wb25lbnQgaXMgcmVuZGVyZWQgT1VUU0lERSB0aGUgdHJhY2Ugdmlld2VyIGNvbnRleHQg4oCUIGl0XG4gKiByZWNlaXZlcyBhbGwgZGF0YSB2aWEgcHJvcHMgcmF0aGVyIHRoYW4gcmVhZGluZyBmcm9tIGNvbnRleHQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBFbnRpdHlEZXRhaWxQYW5lbCh7XG4gIHJ1bixcbiAgb25TdHJlYW1DbGljayxcbiAgb25SdW5DbGljayxcbiAgc3BhbkRldGFpbERhdGEsXG4gIHNwYW5EZXRhaWxFcnJvcixcbiAgc3BhbkRldGFpbExvYWRpbmcsXG4gIG9uU3BhblNlbGVjdCxcbiAgb25XYWtlVXBTbGVlcCxcbiAgb25Mb2FkRXZlbnREYXRhLFxuICBvblJlc29sdmVIb29rLFxuICBlbmNyeXB0aW9uS2V5LFxuICBvbkRlY3J5cHQsXG4gIGlzRGVjcnlwdGluZyA9IGZhbHNlLFxuICBzZWxlY3RlZFNwYW4sXG59OiB7XG4gIHJ1bjogV29ya2Zsb3dSdW47XG4gIC8qKiBDYWxsYmFjayB3aGVuIGEgc3RyZWFtIHJlZmVyZW5jZSBpcyBjbGlja2VkICovXG4gIG9uU3RyZWFtQ2xpY2s/OiAoc3RyZWFtSWQ6IHN0cmluZykgPT4gdm9pZDtcbiAgLyoqIENhbGxiYWNrIHdoZW4gYSBydW4gcmVmZXJlbmNlIGlzIGNsaWNrZWQgKi9cbiAgb25SdW5DbGljaz86IChydW5JZDogc3RyaW5nKSA9PiB2b2lkO1xuICAvKiogUHJlLWZldGNoZWQgc3BhbiBkZXRhaWwgZGF0YSBmb3IgdGhlIHNlbGVjdGVkIHNwYW4uICovXG4gIHNwYW5EZXRhaWxEYXRhOiBXb3JrZmxvd1J1biB8IFN0ZXAgfCBIb29rIHwgRXZlbnQgfCBudWxsO1xuICAvKiogRXJyb3IgZnJvbSBleHRlcm5hbCBzcGFuIGRldGFpbCBmZXRjaC4gKi9cbiAgc3BhbkRldGFpbEVycm9yPzogRXJyb3IgfCBudWxsO1xuICAvKiogTG9hZGluZyBzdGF0ZSBmcm9tIGV4dGVybmFsIHNwYW4gZGV0YWlsIGZldGNoLiAqL1xuICBzcGFuRGV0YWlsTG9hZGluZz86IGJvb2xlYW47XG4gIC8qKiBDYWxsYmFjayB3aGVuIGEgc3BhbiBpcyBzZWxlY3RlZC4gVXNlIHRoaXMgdG8gZmV0Y2ggZGF0YSBleHRlcm5hbGx5IGFuZCBwYXNzIHZpYSBzcGFuRGV0YWlsRGF0YS4gKi9cbiAgb25TcGFuU2VsZWN0OiAoaW5mbzogU3BhblNlbGVjdGlvbkluZm8pID0+IHZvaWQ7XG4gIC8qKiBDYWxsYmFjayB0byB3YWtlIHVwIGEgcGVuZGluZyBzbGVlcCBjYWxsLiAqL1xuICBvbldha2VVcFNsZWVwPzogKFxuICAgIHJ1bklkOiBzdHJpbmcsXG4gICAgY29ycmVsYXRpb25JZDogc3RyaW5nXG4gICkgPT4gUHJvbWlzZTx7IHN0b3BwZWRDb3VudDogbnVtYmVyIH0+O1xuICAvKiogQ2FsbGJhY2sgdG8gbG9hZCBldmVudCBkYXRhIGZvciBhIHNwZWNpZmljIGV2ZW50IChsYXp5IGxvYWRpbmcpICovXG4gIG9uTG9hZEV2ZW50RGF0YT86IChcbiAgICBjb3JyZWxhdGlvbklkOiBzdHJpbmcsXG4gICAgZXZlbnRJZDogc3RyaW5nXG4gICkgPT4gUHJvbWlzZTx1bmtub3duIHwgbnVsbD47XG4gIC8qKiBDYWxsYmFjayB0byByZXNvbHZlIGEgaG9vayB3aXRoIGEgcGF5bG9hZC4gKi9cbiAgb25SZXNvbHZlSG9vaz86IChcbiAgICBob29rVG9rZW46IHN0cmluZyxcbiAgICBwYXlsb2FkOiB1bmtub3duLFxuICAgIGhvb2s/OiBIb29rXG4gICkgPT4gUHJvbWlzZTx2b2lkPjtcbiAgLyoqIEVuY3J5cHRpb24ga2V5IChhdmFpbGFibGUgYWZ0ZXIgRGVjcnlwdCBpcyBjbGlja2VkKSwgdXNlZCB0byByZS1sb2FkIGV2ZW50IGRhdGEgKi9cbiAgZW5jcnlwdGlvbktleT86IFVpbnQ4QXJyYXk7XG4gIC8qKiBDYWxsYmFjayB0byBpbml0aWF0ZSBkZWNyeXB0aW9uIG9mIGVuY3J5cHRlZCBydW4gZGF0YSAqL1xuICBvbkRlY3J5cHQ/OiAoKSA9PiB2b2lkO1xuICAvKiogV2hldGhlciB0aGUgZW5jcnlwdGlvbiBrZXkgaXMgY3VycmVudGx5IGJlaW5nIGZldGNoZWQgKi9cbiAgaXNEZWNyeXB0aW5nPzogYm9vbGVhbjtcbiAgLyoqIEluZm8gYWJvdXQgdGhlIGN1cnJlbnRseSBzZWxlY3RlZCBzcGFuIGZyb20gdGhlIHRyYWNlIHZpZXdlciAqL1xuICBzZWxlY3RlZFNwYW46IFNlbGVjdGVkU3BhbkluZm8gfCBudWxsO1xufSk6IFJlYWN0LkpTWC5FbGVtZW50IHwgbnVsbCB7XG4gIGNvbnN0IHRvYXN0ID0gdXNlVG9hc3QoKTtcbiAgY29uc3QgW3N0b3BwaW5nU2xlZXAsIHNldFN0b3BwaW5nU2xlZXBdID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBbc2hvd1Jlc29sdmVIb29rTW9kYWwsIHNldFNob3dSZXNvbHZlSG9va01vZGFsXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgW3Jlc29sdmluZ0hvb2ssIHNldFJlc29sdmluZ0hvb2tdID0gdXNlU3RhdGUoZmFsc2UpO1xuICAvLyBUcmFjayBob29rcyB0aGF0IHdlcmUgcmVzb2x2ZWQgaW4gdGhpcyBzZXNzaW9uIHNvIHRoZSBidXR0b24gaGlkZXNcbiAgLy8gaW1tZWRpYXRlbHkgd2l0aG91dCB3YWl0aW5nIGZvciB0aGUgbmV4dCBldmVudCBwb2xsLlxuICBjb25zdCBbcmVzb2x2ZWRIb29rSWRzLCBzZXRSZXNvbHZlZEhvb2tJZHNdID0gdXNlU3RhdGU8U2V0PHN0cmluZz4+KFxuICAgIG5ldyBTZXQoKVxuICApO1xuXG4gIGNvbnN0IHNpZGViYXIgPSB1c2VTaWRlYmFyRGF0YU9wdGlvbmFsKCk7XG4gIGNvbnN0IGhhc0VuY3J5cHRlZERhdGEgPSBCb29sZWFuKHNpZGViYXI/Lmhhc0VuY3J5cHRlZERhdGEgJiYgIWVuY3J5cHRpb25LZXkpO1xuXG4gIGNvbnN0IGRhdGEgPSBzZWxlY3RlZFNwYW4/LmRhdGE7XG4gIGNvbnN0IHJhd0V2ZW50cyA9IHNlbGVjdGVkU3Bhbj8ucmF3RXZlbnRzO1xuICBjb25zdCByYXdFdmVudHNMZW5ndGggPSByYXdFdmVudHM/Lmxlbmd0aCA/PyAwO1xuXG4gIC8vIERldGVybWluZSByZXNvdXJjZSB0eXBlLCBJRCwgYW5kIHJ1bklkIGZyb20gdGhlIHNlbGVjdGVkIHNwYW5cbiAgY29uc3QgeyByZXNvdXJjZSwgcmVzb3VyY2VJZCwgcnVuSWQgfSA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGlmICghc2VsZWN0ZWRTcGFuKSB7XG4gICAgICByZXR1cm4geyByZXNvdXJjZTogdW5kZWZpbmVkLCByZXNvdXJjZUlkOiB1bmRlZmluZWQsIHJ1bklkOiB1bmRlZmluZWQgfTtcbiAgICB9XG5cbiAgICBjb25zdCByZXMgPSBzZWxlY3RlZFNwYW4ucmVzb3VyY2U7XG4gICAgaWYgKHJlcyA9PT0gJ3N0ZXAnICYmIGlzU3RlcChkYXRhKSkge1xuICAgICAgcmV0dXJuIHsgcmVzb3VyY2U6ICdzdGVwJywgcmVzb3VyY2VJZDogZGF0YS5zdGVwSWQsIHJ1bklkOiBkYXRhLnJ1bklkIH07XG4gICAgfVxuICAgIGlmIChyZXMgPT09ICdydW4nICYmIGlzV29ya2Zsb3dSdW4oZGF0YSkpIHtcbiAgICAgIHJldHVybiB7IHJlc291cmNlOiAncnVuJywgcmVzb3VyY2VJZDogZGF0YS5ydW5JZCwgcnVuSWQ6IHVuZGVmaW5lZCB9O1xuICAgIH1cbiAgICBpZiAocmVzID09PSAnaG9vaycgJiYgaXNIb29rKGRhdGEpKSB7XG4gICAgICByZXR1cm4geyByZXNvdXJjZTogJ2hvb2snLCByZXNvdXJjZUlkOiBkYXRhLmhvb2tJZCwgcnVuSWQ6IHVuZGVmaW5lZCB9O1xuICAgIH1cbiAgICBpZiAocmVzID09PSAnc2xlZXAnKSB7XG4gICAgICBjb25zdCB3YWl0RGF0YSA9IGRhdGEgYXMgeyBydW5JZD86IHN0cmluZyB9IHwgdW5kZWZpbmVkO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcmVzb3VyY2U6ICdzbGVlcCcsXG4gICAgICAgIHJlc291cmNlSWQ6IHNlbGVjdGVkU3Bhbi5zcGFuSWQsXG4gICAgICAgIHJ1bklkOiB3YWl0RGF0YT8ucnVuSWQsXG4gICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4geyByZXNvdXJjZTogdW5kZWZpbmVkLCByZXNvdXJjZUlkOiB1bmRlZmluZWQsIHJ1bklkOiB1bmRlZmluZWQgfTtcbiAgfSwgW3NlbGVjdGVkU3BhbiwgZGF0YV0pO1xuXG4gIC8vIE5vdGlmeSBwYXJlbnQgd2hlbiBzcGFuIHNlbGVjdGlvbiBjaGFuZ2VzLlxuICAvLyBVc2UgYSByZWYgZm9yIHRoZSBjYWxsYmFjayBzbyB0aGUgZWZmZWN0IG9ubHkgZmlyZXMgd2hlbiB0aGUgYWN0dWFsXG4gIC8vIHNlbGVjdGlvbiB2YWx1ZXMgY2hhbmdlLCBub3Qgd2hlbiB0aGUgY2FsbGJhY2sgaWRlbnRpdHkgY2hhbmdlcyBkdWUgdG9cbiAgLy8gcGFyZW50IHJlLXJlbmRlcnMgZnJvbSBwb2xsaW5nLlxuICBjb25zdCBvblNwYW5TZWxlY3RSZWYgPSB1c2VSZWYob25TcGFuU2VsZWN0KTtcbiAgb25TcGFuU2VsZWN0UmVmLmN1cnJlbnQgPSBvblNwYW5TZWxlY3Q7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoXG4gICAgICByZXNvdXJjZSAmJlxuICAgICAgcmVzb3VyY2VJZCAmJlxuICAgICAgWydydW4nLCAnc3RlcCcsICdob29rJywgJ3NsZWVwJ10uaW5jbHVkZXMocmVzb3VyY2UpXG4gICAgKSB7XG4gICAgICBvblNwYW5TZWxlY3RSZWYuY3VycmVudCh7XG4gICAgICAgIHJlc291cmNlOiByZXNvdXJjZSBhcyAncnVuJyB8ICdzdGVwJyB8ICdob29rJyB8ICdzbGVlcCcsXG4gICAgICAgIHJlc291cmNlSWQsXG4gICAgICAgIHJ1bklkLFxuICAgICAgfSk7XG4gICAgfVxuICB9LCBbcmVzb3VyY2UsIHJlc291cmNlSWQsIHJ1bklkXSk7XG5cbiAgLy8gQ2hlY2sgaWYgdGhpcyBzbGVlcCBpcyBzdGlsbCBwZW5kaW5nIGFuZCBjYW4gYmUgd29rZW4gdXBcbiAgY29uc3QgY2FuV2FrZVVwID0gdXNlTWVtbygoKSA9PiB7XG4gICAgdm9pZCByYXdFdmVudHNMZW5ndGg7XG4gICAgaWYgKHJlc291cmNlICE9PSAnc2xlZXAnIHx8ICFyYXdFdmVudHMpIHJldHVybiBmYWxzZTtcbiAgICBjb25zdCB0ZXJtaW5hbFN0YXRlcyA9IFsnY29tcGxldGVkJywgJ2ZhaWxlZCcsICdjYW5jZWxsZWQnXTtcbiAgICBpZiAodGVybWluYWxTdGF0ZXMuaW5jbHVkZXMocnVuLnN0YXR1cykpIHJldHVybiBmYWxzZTtcbiAgICBjb25zdCBoYXNXYWl0Q3JlYXRlZCA9IHJhd0V2ZW50cy5zb21lKFxuICAgICAgKGUpID0+IGUuZXZlbnRUeXBlID09PSAnd2FpdF9jcmVhdGVkJ1xuICAgICk7XG4gICAgaWYgKCFoYXNXYWl0Q3JlYXRlZCkgcmV0dXJuIGZhbHNlO1xuICAgIGNvbnN0IGhhc1dhaXRDb21wbGV0ZWQgPSByYXdFdmVudHMuc29tZShcbiAgICAgIChlKSA9PiBlLmV2ZW50VHlwZSA9PT0gJ3dhaXRfY29tcGxldGVkJ1xuICAgICk7XG4gICAgcmV0dXJuICFoYXNXYWl0Q29tcGxldGVkO1xuICB9LCBbcmVzb3VyY2UsIHJhd0V2ZW50cywgcmF3RXZlbnRzTGVuZ3RoLCBydW4uc3RhdHVzXSk7XG5cbiAgLy8gQ2hlY2sgaWYgdGhpcyBob29rIGNhbiBiZSByZXNvbHZlZFxuICBjb25zdCBjYW5SZXNvbHZlSG9vayA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIHZvaWQgcmF3RXZlbnRzTGVuZ3RoO1xuICAgIGlmIChyZXNvdXJjZSAhPT0gJ2hvb2snIHx8ICFyYXdFdmVudHMgfHwgIXJlc291cmNlSWQpIHJldHVybiBmYWxzZTtcblxuICAgIC8vIENoZWNrIGlmIHdlIGFscmVhZHkgcmVzb2x2ZWQgdGhpcyBob29rIGluIHRoaXMgc2Vzc2lvblxuICAgIGlmIChyZXNvbHZlZEhvb2tJZHMuaGFzKHJlc291cmNlSWQpKSByZXR1cm4gZmFsc2U7XG5cbiAgICBjb25zdCB0ZXJtaW5hbFN0YXRlcyA9IFsnY29tcGxldGVkJywgJ2ZhaWxlZCcsICdjYW5jZWxsZWQnXTtcbiAgICBpZiAodGVybWluYWxTdGF0ZXMuaW5jbHVkZXMocnVuLnN0YXR1cykpIHJldHVybiBmYWxzZTtcbiAgICBjb25zdCBoYXNIb29rRGlzcG9zZWQgPSByYXdFdmVudHMuc29tZShcbiAgICAgIChlKSA9PiBlLmV2ZW50VHlwZSA9PT0gJ2hvb2tfZGlzcG9zZWQnXG4gICAgKTtcbiAgICBpZiAoaGFzSG9va0Rpc3Bvc2VkKSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0sIFtcbiAgICByZXNvdXJjZSxcbiAgICByZXNvdXJjZUlkLFxuICAgIHJhd0V2ZW50cyxcbiAgICByYXdFdmVudHNMZW5ndGgsXG4gICAgcnVuLnN0YXR1cyxcbiAgICByZXNvbHZlZEhvb2tJZHMsXG4gIF0pO1xuXG4gIGNvbnN0IGVycm9yID0gc3BhbkRldGFpbEVycm9yID8/IHVuZGVmaW5lZDtcbiAgY29uc3QgbG9hZGluZyA9IHNwYW5EZXRhaWxMb2FkaW5nID8/IGZhbHNlO1xuXG4gIGNvbnN0IG1hdGNoZWRTcGFuRGV0YWlsRGF0YSA9IHVzZU1lbW8oXG4gICAgKCkgPT5cbiAgICAgIHNwYW5EZXRhaWxNYXRjaGVzU2VsZWN0aW9uKHNwYW5EZXRhaWxEYXRhLCByZXNvdXJjZSwgcmVzb3VyY2VJZClcbiAgICAgICAgPyBzcGFuRGV0YWlsRGF0YVxuICAgICAgICA6IG51bGwsXG4gICAgW3NwYW5EZXRhaWxEYXRhLCByZXNvdXJjZSwgcmVzb3VyY2VJZF1cbiAgKTtcblxuICAvLyBHZXQgdGhlIGhvb2sgdG9rZW4gZm9yIHJlc29sdmluZyAocHJlZmVyIGZldGNoZWQgZGF0YSwgdGhlbiBob29rcyBhcnJheSBmYWxsYmFjaylcbiAgY29uc3QgaG9va1Rva2VuID0gdXNlTWVtbygoKSA9PiB7XG4gICAgaWYgKHJlc291cmNlICE9PSAnaG9vaycgfHwgIXJlc291cmNlSWQpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgLy8gMS4gVHJ5IHRoZSBleHRlcm5hbGx5LWZldGNoZWQgZGV0YWlsIGRhdGEgZmlyc3RcbiAgICBpZiAoaXNIb29rKG1hdGNoZWRTcGFuRGV0YWlsRGF0YSkgJiYgbWF0Y2hlZFNwYW5EZXRhaWxEYXRhLnRva2VuKSB7XG4gICAgICByZXR1cm4gbWF0Y2hlZFNwYW5EZXRhaWxEYXRhLnRva2VuO1xuICAgIH1cbiAgICAvLyAyLiBUcnkgdGhlIHNwYW4ncyBpbmxpbmUgZGF0YSAocmVjb25zdHJ1Y3RlZCBmcm9tIGhvb2tfY3JlYXRlZCBldmVudClcbiAgICBpZiAoaXNIb29rKGRhdGEpICYmIChkYXRhIGFzIEhvb2spLnRva2VuKSB7XG4gICAgICByZXR1cm4gKGRhdGEgYXMgSG9vaykudG9rZW47XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH0sIFtyZXNvdXJjZSwgcmVzb3VyY2VJZCwgbWF0Y2hlZFNwYW5EZXRhaWxEYXRhLCBkYXRhXSk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoZXJyb3IgJiYgc2VsZWN0ZWRTcGFuICYmIHJlc291cmNlKSB7XG4gICAgICB0b2FzdC5lcnJvcihgRmFpbGVkIHRvIGxvYWQgJHtyZXNvdXJjZX0gZGV0YWlsc2AsIHtcbiAgICAgICAgZGVzY3JpcHRpb246IGVycm9yLm1lc3NhZ2UsXG4gICAgICB9KTtcbiAgICB9XG4gIH0sIFtlcnJvciwgcmVzb3VyY2UsIHNlbGVjdGVkU3Bhbl0pO1xuXG4gIGNvbnN0IGhhbmRsZVdha2VVcCA9IGFzeW5jICgpID0+IHtcbiAgICBpZiAoc3RvcHBpbmdTbGVlcCB8fCAhcmVzb3VyY2VJZCkgcmV0dXJuO1xuICAgIGlmICghb25XYWtlVXBTbGVlcCkge1xuICAgICAgdG9hc3QuZXJyb3IoJ1VuYWJsZSB0byB3YWtlIHVwIHNsZWVwJywge1xuICAgICAgICBkZXNjcmlwdGlvbjogJ05vIHdha2UtdXAgaGFuZGxlciBwcm92aWRlZC4nLFxuICAgICAgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIHNldFN0b3BwaW5nU2xlZXAodHJ1ZSk7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBvbldha2VVcFNsZWVwKHJ1bi5ydW5JZCwgcmVzb3VyY2VJZCk7XG4gICAgICBpZiAocmVzdWx0LnN0b3BwZWRDb3VudCA+IDApIHtcbiAgICAgICAgdG9hc3Quc3VjY2VzcygnUnVuIHdva2VuIHVwJywge1xuICAgICAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICAgICAgJ1RoZSBzbGVlcCBjYWxsIGhhcyBiZWVuIGludGVycnVwdGVkIGFuZCB0aGUgcnVuIHdva2VuIHVwLicsXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdG9hc3QuaW5mbygnU2xlZXAgYWxyZWFkeSBjb21wbGV0ZWQnLCB7XG4gICAgICAgICAgZGVzY3JpcHRpb246ICdUaGlzIHNsZWVwIGNhbGwgaGFzIGFscmVhZHkgZmluaXNoZWQuJyxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdGYWlsZWQgdG8gd2FrZSB1cCBydW46JywgZXJyKTtcbiAgICAgIHRvYXN0LmVycm9yKCdGYWlsZWQgdG8gd2FrZSB1cCBydW4nLCB7XG4gICAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICAgIGVyciBpbnN0YW5jZW9mIEVycm9yID8gZXJyLm1lc3NhZ2UgOiAnQW4gdW5rbm93biBlcnJvciBvY2N1cnJlZCcsXG4gICAgICB9KTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgc2V0U3RvcHBpbmdTbGVlcChmYWxzZSk7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGhhbmRsZVJlc29sdmVIb29rID0gdXNlQ2FsbGJhY2soXG4gICAgYXN5bmMgKHBheWxvYWQ6IHVua25vd24pID0+IHtcbiAgICAgIGlmIChyZXNvbHZpbmdIb29rKSByZXR1cm47XG4gICAgICBpZiAoIW9uUmVzb2x2ZUhvb2spIHtcbiAgICAgICAgdG9hc3QuZXJyb3IoJ1VuYWJsZSB0byByZXNvbHZlIGhvb2snLCB7XG4gICAgICAgICAgZGVzY3JpcHRpb246ICdObyByZXNvbHZlIGhhbmRsZXIgcHJvdmlkZWQuJyxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmICghaG9va1Rva2VuKSB7XG4gICAgICAgIHRvYXN0LmVycm9yKCdVbmFibGUgdG8gcmVzb2x2ZSBob29rJywge1xuICAgICAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICAgICAgJ01pc3NpbmcgaG9vayB0b2tlbi4gVHJ5IHJlZnJlc2hpbmcgdGhlIHJ1biBkYXRhIGFuZCByZXRyeS4nLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB0cnkge1xuICAgICAgICBzZXRSZXNvbHZpbmdIb29rKHRydWUpO1xuICAgICAgICBjb25zdCBjYW5kaWRhdGUgPSBtYXRjaGVkU3BhbkRldGFpbERhdGEgPz8gZGF0YTtcbiAgICAgICAgY29uc3QgaG9vayA9IGlzSG9vayhjYW5kaWRhdGUpID8gY2FuZGlkYXRlIDogdW5kZWZpbmVkO1xuICAgICAgICBhd2FpdCBvblJlc29sdmVIb29rKGhvb2tUb2tlbiwgcGF5bG9hZCwgaG9vayk7XG4gICAgICAgIHRvYXN0LnN1Y2Nlc3MoJ0hvb2sgcmVzb2x2ZWQnLCB7XG4gICAgICAgICAgZGVzY3JpcHRpb246ICdUaGUgcGF5bG9hZCBoYXMgYmVlbiBzZW50IGFuZCB0aGUgaG9vayByZXNvbHZlZC4nLFxuICAgICAgICB9KTtcbiAgICAgICAgc2V0U2hvd1Jlc29sdmVIb29rTW9kYWwoZmFsc2UpO1xuICAgICAgICAvLyBNYXJrIHRoaXMgaG9vayBhcyByZXNvbHZlZCBsb2NhbGx5IHNvIHRoZSBidXR0b24gaGlkZXMgaW1tZWRpYXRlbHlcbiAgICAgICAgaWYgKHJlc291cmNlSWQpIHtcbiAgICAgICAgICBzZXRSZXNvbHZlZEhvb2tJZHMoKHByZXYpID0+IG5ldyBTZXQocHJldikuYWRkKHJlc291cmNlSWQpKTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZhaWxlZCB0byByZXNvbHZlIGhvb2s6JywgZXJyKTtcbiAgICAgICAgdG9hc3QuZXJyb3IoJ0ZhaWxlZCB0byByZXNvbHZlIGhvb2snLCB7XG4gICAgICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgICAgICBlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyci5tZXNzYWdlIDogJ0FuIHVua25vd24gZXJyb3Igb2NjdXJyZWQnLFxuICAgICAgICB9KTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHNldFJlc29sdmluZ0hvb2soZmFsc2UpO1xuICAgICAgfVxuICAgIH0sXG4gICAgW29uUmVzb2x2ZUhvb2ssIGhvb2tUb2tlbiwgcmVzb2x2aW5nSG9vaywgbWF0Y2hlZFNwYW5EZXRhaWxEYXRhLCBkYXRhXVxuICApO1xuXG4gIGNvbnN0IGRpc3BsYXlEYXRhID0gdXNlTWVtbyhcbiAgICAoKSA9PlxuICAgICAgbWVyZ2VTcGFuRGV0YWlsKGRhdGEsIG1hdGNoZWRTcGFuRGV0YWlsRGF0YSkgYXNcbiAgICAgICAgfCBXb3JrZmxvd1J1blxuICAgICAgICB8IFN0ZXBcbiAgICAgICAgfCBIb29rXG4gICAgICAgIHwgRXZlbnQsXG4gICAgW2RhdGEsIG1hdGNoZWRTcGFuRGV0YWlsRGF0YV1cbiAgKTtcblxuICBjb25zdCBtb2R1bGVTcGVjaWZpZXIgPSB1c2VNZW1vKCgpID0+IHtcbiAgICBjb25zdCBkaXNwbGF5UmVjb3JkID0gZGlzcGxheURhdGEgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgY29uc3QgZGlzcGxheVN0ZXBOYW1lID0gZGlzcGxheVJlY29yZC5zdGVwTmFtZTtcbiAgICBjb25zdCBkaXNwbGF5V29ya2Zsb3dOYW1lID0gZGlzcGxheVJlY29yZC53b3JrZmxvd05hbWU7XG4gICAgaWYgKHR5cGVvZiBkaXNwbGF5U3RlcE5hbWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm4gZGlzcGxheVN0ZXBOYW1lO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIGRpc3BsYXlXb3JrZmxvd05hbWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm4gZGlzcGxheVdvcmtmbG93TmFtZTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBydW4ud29ya2Zsb3dOYW1lID09PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuIHJ1bi53b3JrZmxvd05hbWU7XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH0sIFtkaXNwbGF5RGF0YSwgcnVuLndvcmtmbG93TmFtZV0pO1xuXG4gIGlmICghc2VsZWN0ZWRTcGFuIHx8ICFyZXNvdXJjZSB8fCAhcmVzb3VyY2VJZCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgY29uc3QgaGFzUGVuZGluZ0FjdGlvbnMgPVxuICAgIChyZXNvdXJjZSA9PT0gJ3NsZWVwJyAmJiBjYW5XYWtlVXApIHx8XG4gICAgKHJlc291cmNlID09PSAnaG9vaycgJiYgY2FuUmVzb2x2ZUhvb2spO1xuXG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGgtZnVsbCBmbGV4LWNvbFwiPlxuICAgICAgPERlY3J5cHRDbGlja0NvbnRleHQuUHJvdmlkZXJcbiAgICAgICAgdmFsdWU9e1xuICAgICAgICAgIG9uRGVjcnlwdCA/IHsgb25EZWNyeXB0LCBpc0RlY3J5cHRpbmcsIGhhc0VuY3J5cHRlZERhdGEgfSA6IHVuZGVmaW5lZFxuICAgICAgICB9XG4gICAgICA+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleC0xIG92ZXJmbG93LXktYXV0byBweC00IHBiLThcIj5cbiAgICAgICAgICB7aGFzUGVuZGluZ0FjdGlvbnMgJiYgKFxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBjbGFzc05hbWU9XCJtYi00IHJvdW5kZWQtbGcgYm9yZGVyIHAtMlwiXG4gICAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgYm9yZGVyQ29sb3I6ICd2YXIoLS1kcy1ncmF5LTMwMCknLFxuICAgICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogJ3ZhcigtLWRzLWdyYXktMTAwKScsXG4gICAgICAgICAgICAgIH19XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxwXG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwibWItMiBweC0xIHRleHQtWzEzcHhdIGZvbnQtbWVkaXVtIHVwcGVyY2FzZSB0cmFja2luZy13aWRlXCJcbiAgICAgICAgICAgICAgICBzdHlsZT17eyBjb2xvcjogJ3ZhcigtLWRzLWdyYXktNzAwKScgfX1cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIEFjdGlvbnNcbiAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggZmxleC1jb2wgZ2FwLTJcIj5cbiAgICAgICAgICAgICAgICB7LyogV2FrZSB1cCBidXR0b24gZm9yIHBlbmRpbmcgc2xlZXAgY2FsbHMgKi99XG4gICAgICAgICAgICAgICAge3Jlc291cmNlID09PSAnc2xlZXAnICYmIGNhbldha2VVcCAmJiAoXG4gICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXtoYW5kbGVXYWtlVXB9XG4gICAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXtzdG9wcGluZ1NsZWVwfVxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2Nsc3goXG4gICAgICAgICAgICAgICAgICAgICAgJ2ZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGdhcC0yIHJvdW5kZWQtbWQgcHgtMyBweS0yIHRleHQtc20gZm9udC1tZWRpdW0nLFxuICAgICAgICAgICAgICAgICAgICAgICdkaXNhYmxlZDpvcGFjaXR5LTUwIGRpc2FibGVkOmN1cnNvci1ub3QtYWxsb3dlZCB0cmFuc2l0aW9uLWNvbG9ycycsXG4gICAgICAgICAgICAgICAgICAgICAgc3RvcHBpbmdTbGVlcFxuICAgICAgICAgICAgICAgICAgICAgICAgPyAnb3BhY2l0eS01MCBjdXJzb3Itbm90LWFsbG93ZWQnXG4gICAgICAgICAgICAgICAgICAgICAgICA6ICdjdXJzb3ItcG9pbnRlcidcbiAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAndmFyKC0tZHMtYW1iZXItMjAwKScsXG4gICAgICAgICAgICAgICAgICAgICAgY29sb3I6ICd2YXIoLS1kcy1hbWJlci05MDApJyxcbiAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPFphcCBjbGFzc05hbWU9XCJoLTQgdy00XCIgLz5cbiAgICAgICAgICAgICAgICAgICAge3N0b3BwaW5nU2xlZXAgPyAnV2FraW5nIHVwLi4uJyA6ICdXYWtlIFVwIFNsZWVwJ31cbiAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICl9XG5cbiAgICAgICAgICAgICAgICB7LyogUmVzb2x2ZSBob29rIGJ1dHRvbiBmb3IgcGVuZGluZyBob29rcyAqL31cbiAgICAgICAgICAgICAgICB7cmVzb3VyY2UgPT09ICdob29rJyAmJiBjYW5SZXNvbHZlSG9vayAmJiAoXG4gICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBzZXRTaG93UmVzb2x2ZUhvb2tNb2RhbCh0cnVlKX1cbiAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9e3Jlc29sdmluZ0hvb2t9XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17Y2xzeChcbiAgICAgICAgICAgICAgICAgICAgICAnZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgZ2FwLTIgcm91bmRlZC1tZCBweC0zIHB5LTIgdGV4dC1zbSBmb250LW1lZGl1bScsXG4gICAgICAgICAgICAgICAgICAgICAgJ2Rpc2FibGVkOm9wYWNpdHktNTAgZGlzYWJsZWQ6Y3Vyc29yLW5vdC1hbGxvd2VkIHRyYW5zaXRpb24tY29sb3JzJyxcbiAgICAgICAgICAgICAgICAgICAgICByZXNvbHZpbmdIb29rXG4gICAgICAgICAgICAgICAgICAgICAgICA/ICdvcGFjaXR5LTUwIGN1cnNvci1ub3QtYWxsb3dlZCdcbiAgICAgICAgICAgICAgICAgICAgICAgIDogJ2N1cnNvci1wb2ludGVyJ1xuICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6ICd2YXIoLS1kcy1ncmF5LTEwMDApJyxcbiAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogJ3ZhcigtLWRzLWJhY2tncm91bmQtMTAwKScsXG4gICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxTZW5kIGNsYXNzTmFtZT1cImgtNCB3LTRcIiAvPlxuICAgICAgICAgICAgICAgICAgICBSZXNvbHZlIEhvb2tcbiAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgKX1cblxuICAgICAgICAgIDxBdHRyaWJ1dGVQYW5lbFxuICAgICAgICAgICAgZGF0YT17ZGlzcGxheURhdGF9XG4gICAgICAgICAgICBtb2R1bGVTcGVjaWZpZXI9e21vZHVsZVNwZWNpZmllcn1cbiAgICAgICAgICAgIGV4cGlyZWRBdD17cnVuLmV4cGlyZWRBdH1cbiAgICAgICAgICAgIGlzTG9hZGluZz17bG9hZGluZ31cbiAgICAgICAgICAgIGVycm9yPXtlcnJvciA/PyB1bmRlZmluZWR9XG4gICAgICAgICAgICBvblN0cmVhbUNsaWNrPXtvblN0cmVhbUNsaWNrfVxuICAgICAgICAgICAgb25SdW5DbGljaz17b25SdW5DbGlja31cbiAgICAgICAgICAgIG9uRGVjcnlwdD17b25EZWNyeXB0fVxuICAgICAgICAgICAgaXNEZWNyeXB0aW5nPXtpc0RlY3J5cHRpbmd9XG4gICAgICAgICAgICByZXNvdXJjZT17cmVzb3VyY2V9XG4gICAgICAgICAgLz5cblxuICAgICAgICAgIHtyYXdFdmVudHMgJiYgKFxuICAgICAgICAgICAgPEV2ZW50c0xpc3RcbiAgICAgICAgICAgICAgZXZlbnRzPXtyYXdFdmVudHN9XG4gICAgICAgICAgICAgIG9uTG9hZEV2ZW50RGF0YT17b25Mb2FkRXZlbnREYXRhfVxuICAgICAgICAgICAgICBvblN0cmVhbUNsaWNrPXtvblN0cmVhbUNsaWNrfVxuICAgICAgICAgICAgICBvblJ1bkNsaWNrPXtvblJ1bkNsaWNrfVxuICAgICAgICAgICAgICBlbmNyeXB0aW9uS2V5PXtlbmNyeXB0aW9uS2V5fVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApfVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvRGVjcnlwdENsaWNrQ29udGV4dC5Qcm92aWRlcj5cblxuICAgICAgey8qIFJlc29sdmUgSG9vayBNb2RhbCAqL31cbiAgICAgIDxSZXNvbHZlSG9va01vZGFsXG4gICAgICAgIGlzT3Blbj17c2hvd1Jlc29sdmVIb29rTW9kYWx9XG4gICAgICAgIG9uQ2xvc2U9eygpID0+IHNldFNob3dSZXNvbHZlSG9va01vZGFsKGZhbHNlKX1cbiAgICAgICAgb25TdWJtaXQ9e2hhbmRsZVJlc29sdmVIb29rfVxuICAgICAgICBpc1N1Ym1pdHRpbmc9e3Jlc29sdmluZ0hvb2t9XG4gICAgICAvPlxuICAgIDwvZGl2PlxuICApO1xufVxuIl19
|
|
203
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50aXR5LWRldGFpbC1wYW5lbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21wb25lbnRzL3NpZGViYXIvZW50aXR5LWRldGFpbC1wYW5lbC50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWSxDQUFDOztBQUdiLE9BQU8sSUFBSSxNQUFNLE1BQU0sQ0FBQztBQUN4QixPQUFPLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUN6QyxPQUFPLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sT0FBTyxDQUFDO0FBQ2xFLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzQyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUMzRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDbkQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN4RCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNoRSxPQUFPLEVBRUwscUJBQXFCLEdBQ3RCLE1BQU0sNEJBQTRCLENBQUM7QUFFcEMsMkRBQTJEO0FBQzNELFNBQVMsTUFBTSxDQUFDLElBQWE7SUFDM0IsT0FBTyxJQUFJLEtBQUssSUFBSSxJQUFJLE9BQU8sSUFBSSxLQUFLLFFBQVEsSUFBSSxRQUFRLElBQUksSUFBSSxDQUFDO0FBQ3ZFLENBQUM7QUF5QkQ7Ozs7O0dBS0c7QUFDSCxNQUFNLFVBQVUsaUJBQWlCLENBQUMsRUFDaEMsR0FBRyxFQUNILGFBQWEsRUFDYixVQUFVLEVBQ1YsZUFBZSxFQUNmLGFBQWEsRUFDYixlQUFlLEVBQ2YsYUFBYSxFQUNiLGFBQWEsRUFDYixTQUFTLEVBQ1QsWUFBWSxHQUFHLEtBQUssRUFDcEIsWUFBWSxFQUNaLHFDQUFxQyxHQUFHLEtBQUssR0FrQzlDO0lBQ0MsTUFBTSxLQUFLLEdBQUcsUUFBUSxFQUFFLENBQUM7SUFDekIsTUFBTSxDQUFDLGFBQWEsRUFBRSxnQkFBZ0IsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMxRCxNQUFNLENBQUMsb0JBQW9CLEVBQUUsdUJBQXVCLENBQUMsR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDeEUsTUFBTSxDQUFDLGFBQWEsRUFBRSxnQkFBZ0IsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMxRCxxRUFBcUU7SUFDckUsdURBQXVEO0lBQ3ZELE1BQU0sQ0FBQyxlQUFlLEVBQUUsa0JBQWtCLENBQUMsR0FBRyxRQUFRLENBQ3BELElBQUksR0FBRyxFQUFFLENBQ1YsQ0FBQztJQUVGLE1BQU0sT0FBTyxHQUFHLHNCQUFzQixFQUFFLENBQUM7SUFDekMsTUFBTSxnQkFBZ0IsR0FBRyxPQUFPLENBQUMsT0FBTyxFQUFFLGdCQUFnQixJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7SUFFOUUsTUFBTSxJQUFJLEdBQUcsWUFBWSxFQUFFLElBQUksQ0FBQztJQUNoQyxNQUFNLFNBQVMsR0FBRyxZQUFZLEVBQUUsU0FBUyxDQUFDO0lBQzFDLE1BQU0sZUFBZSxHQUFHLFNBQVMsRUFBRSxNQUFNLElBQUksQ0FBQyxDQUFDO0lBRS9DLE1BQU0sRUFDSixNQUFNLEVBQ04sUUFBUSxFQUNSLFVBQVUsRUFDVixXQUFXLEVBQ1gsTUFBTSxFQUFFLHFCQUFxQixFQUM3QixLQUFLLEdBQ04sR0FBRyxxQkFBcUIsQ0FBQyxZQUFZLEVBQUUsZUFBZSxDQUFDLENBQUM7SUFDekQsTUFBTSxPQUFPLEdBQUcsTUFBTSxLQUFLLFNBQVMsQ0FBQztJQUVyQywyREFBMkQ7SUFDM0QsTUFBTSxTQUFTLEdBQUcsT0FBTyxDQUFDLEdBQUcsRUFBRTtRQUM3QixLQUFLLGVBQWUsQ0FBQztRQUNyQixJQUFJLFFBQVEsS0FBSyxPQUFPLElBQUksQ0FBQyxTQUFTO1lBQUUsT0FBTyxLQUFLLENBQUM7UUFDckQsTUFBTSxjQUFjLEdBQUcsQ0FBQyxXQUFXLEVBQUUsUUFBUSxFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBQzVELElBQUksY0FBYyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDO1lBQUUsT0FBTyxLQUFLLENBQUM7UUFDdEQsTUFBTSxjQUFjLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FDbkMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFTLEtBQUssY0FBYyxDQUN0QyxDQUFDO1FBQ0YsSUFBSSxDQUFDLGNBQWM7WUFBRSxPQUFPLEtBQUssQ0FBQztRQUNsQyxNQUFNLGdCQUFnQixHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQ3JDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxLQUFLLGdCQUFnQixDQUN4QyxDQUFDO1FBQ0YsT0FBTyxDQUFDLGdCQUFnQixDQUFDO0lBQzNCLENBQUMsRUFBRSxDQUFDLFFBQVEsRUFBRSxTQUFTLEVBQUUsZUFBZSxFQUFFLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBRXZELHFDQUFxQztJQUNyQyxNQUFNLGNBQWMsR0FBRyxPQUFPLENBQUMsR0FBRyxFQUFFO1FBQ2xDLEtBQUssZUFBZSxDQUFDO1FBQ3JCLElBQUksUUFBUSxLQUFLLE1BQU0sSUFBSSxDQUFDLFNBQVMsSUFBSSxDQUFDLFVBQVU7WUFBRSxPQUFPLEtBQUssQ0FBQztRQUVuRSx5REFBeUQ7UUFDekQsSUFBSSxlQUFlLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQztZQUFFLE9BQU8sS0FBSyxDQUFDO1FBRWxELE1BQU0sY0FBYyxHQUFHLENBQUMsV0FBVyxFQUFFLFFBQVEsRUFBRSxXQUFXLENBQUMsQ0FBQztRQUM1RCxJQUFJLGNBQWMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQztZQUFFLE9BQU8sS0FBSyxDQUFDO1FBQ3RELE1BQU0sZUFBZSxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQ3BDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxLQUFLLGVBQWUsQ0FDdkMsQ0FBQztRQUNGLElBQUksZUFBZTtZQUFFLE9BQU8sS0FBSyxDQUFDO1FBQ2xDLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQyxFQUFFO1FBQ0QsUUFBUTtRQUNSLFVBQVU7UUFDVixTQUFTO1FBQ1QsZUFBZTtRQUNmLEdBQUcsQ0FBQyxNQUFNO1FBQ1YsZUFBZTtLQUNoQixDQUFDLENBQUM7SUFFSCxvRkFBb0Y7SUFDcEYsTUFBTSxTQUFTLEdBQUcsT0FBTyxDQUFDLEdBQUcsRUFBRTtRQUM3QixJQUFJLFFBQVEsS0FBSyxNQUFNLElBQUksQ0FBQyxVQUFVO1lBQUUsT0FBTyxTQUFTLENBQUM7UUFDekQsa0RBQWtEO1FBQ2xELElBQUksTUFBTSxDQUFDLHFCQUFxQixDQUFDLElBQUkscUJBQXFCLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDakUsT0FBTyxxQkFBcUIsQ0FBQyxLQUFLLENBQUM7UUFDckMsQ0FBQztRQUNELHdFQUF3RTtRQUN4RSxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSyxJQUFhLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDekMsT0FBUSxJQUFhLENBQUMsS0FBSyxDQUFDO1FBQzlCLENBQUM7UUFDRCxPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDLEVBQUUsQ0FBQyxRQUFRLEVBQUUsVUFBVSxFQUFFLHFCQUFxQixFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7SUFFeEQsU0FBUyxDQUFDLEdBQUcsRUFBRTtRQUNiLElBQUksS0FBSyxJQUFJLFlBQVksSUFBSSxRQUFRLEVBQUUsQ0FBQztZQUN0QyxLQUFLLENBQUMsS0FBSyxDQUFDLGtCQUFrQixRQUFRLFVBQVUsRUFBRTtnQkFDaEQsV0FBVyxFQUFFLEtBQUssQ0FBQyxPQUFPO2FBQzNCLENBQUMsQ0FBQztRQUNMLENBQUM7SUFDSCxDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFLFlBQVksQ0FBQyxDQUFDLENBQUM7SUFFcEMsTUFBTSxZQUFZLEdBQUcsS0FBSyxJQUFJLEVBQUU7UUFDOUIsSUFBSSxhQUFhLElBQUksQ0FBQyxVQUFVO1lBQUUsT0FBTztRQUN6QyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDbkIsS0FBSyxDQUFDLEtBQUssQ0FBQyx5QkFBeUIsRUFBRTtnQkFDckMsV0FBVyxFQUFFLDhCQUE4QjthQUM1QyxDQUFDLENBQUM7WUFDSCxPQUFPO1FBQ1QsQ0FBQztRQUVELElBQUksQ0FBQztZQUNILGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3ZCLE1BQU0sTUFBTSxHQUFHLE1BQU0sYUFBYSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsVUFBVSxDQUFDLENBQUM7WUFDMUQsSUFBSSxNQUFNLENBQUMsWUFBWSxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUM1QixLQUFLLENBQUMsT0FBTyxDQUFDLGNBQWMsRUFBRTtvQkFDNUIsV0FBVyxFQUNULDJEQUEyRDtpQkFDOUQsQ0FBQyxDQUFDO1lBQ0wsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLEtBQUssQ0FBQyxJQUFJLENBQUMseUJBQXlCLEVBQUU7b0JBQ3BDLFdBQVcsRUFBRSx1Q0FBdUM7aUJBQ3JELENBQUMsQ0FBQztZQUNMLENBQUM7UUFDSCxDQUFDO1FBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztZQUNiLE9BQU8sQ0FBQyxLQUFLLENBQUMsd0JBQXdCLEVBQUUsR0FBRyxDQUFDLENBQUM7WUFDN0MsS0FBSyxDQUFDLEtBQUssQ0FBQyx1QkFBdUIsRUFBRTtnQkFDbkMsV0FBVyxFQUNULEdBQUcsWUFBWSxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLDJCQUEyQjthQUNuRSxDQUFDLENBQUM7UUFDTCxDQUFDO2dCQUFTLENBQUM7WUFDVCxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMxQixDQUFDO0lBQ0gsQ0FBQyxDQUFDO0lBRUYsTUFBTSxpQkFBaUIsR0FBRyxXQUFXLENBQ25DLEtBQUssRUFBRSxPQUFnQixFQUFFLEVBQUU7UUFDekIsSUFBSSxhQUFhO1lBQUUsT0FBTztRQUMxQixJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDbkIsS0FBSyxDQUFDLEtBQUssQ0FBQyx3QkFBd0IsRUFBRTtnQkFDcEMsV0FBVyxFQUFFLDhCQUE4QjthQUM1QyxDQUFDLENBQUM7WUFDSCxPQUFPO1FBQ1QsQ0FBQztRQUNELElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNmLEtBQUssQ0FBQyxLQUFLLENBQUMsd0JBQXdCLEVBQUU7Z0JBQ3BDLFdBQVcsRUFDVCw0REFBNEQ7YUFDL0QsQ0FBQyxDQUFDO1lBQ0gsT0FBTztRQUNULENBQUM7UUFFRCxJQUFJLENBQUM7WUFDSCxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUN2QixNQUFNLFNBQVMsR0FBRyxxQkFBcUIsSUFBSSxJQUFJLENBQUM7WUFDaEQsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztZQUN2RCxNQUFNLGFBQWEsQ0FBQyxTQUFTLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQzlDLEtBQUssQ0FBQyxPQUFPLENBQUMsZUFBZSxFQUFFO2dCQUM3QixXQUFXLEVBQUUsa0RBQWtEO2FBQ2hFLENBQUMsQ0FBQztZQUNILHVCQUF1QixDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQy9CLHFFQUFxRTtZQUNyRSxJQUFJLFVBQVUsRUFBRSxDQUFDO2dCQUNmLGtCQUFrQixDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztZQUM5RCxDQUFDO1FBQ0gsQ0FBQztRQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7WUFDYixPQUFPLENBQUMsS0FBSyxDQUFDLHlCQUF5QixFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBQzlDLEtBQUssQ0FBQyxLQUFLLENBQUMsd0JBQXdCLEVBQUU7Z0JBQ3BDLFdBQVcsRUFDVCxHQUFHLFlBQVksS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQywyQkFBMkI7YUFDbkUsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztnQkFBUyxDQUFDO1lBQ1QsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDMUIsQ0FBQztJQUNILENBQUMsRUFDRCxDQUFDLGFBQWEsRUFBRSxTQUFTLEVBQUUsYUFBYSxFQUFFLHFCQUFxQixFQUFFLElBQUksQ0FBQyxDQUN2RSxDQUFDO0lBRUYsTUFBTSxlQUFlLEdBQUcsT0FBTyxDQUFDLEdBQUcsRUFBRTtRQUNuQyxNQUFNLGFBQWEsR0FBRyxXQUFzQyxDQUFDO1FBQzdELE1BQU0sZUFBZSxHQUFHLGFBQWEsQ0FBQyxRQUFRLENBQUM7UUFDL0MsTUFBTSxtQkFBbUIsR0FBRyxhQUFhLENBQUMsWUFBWSxDQUFDO1FBQ3ZELElBQUksT0FBTyxlQUFlLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDeEMsT0FBTyxlQUFlLENBQUM7UUFDekIsQ0FBQztRQUNELElBQUksT0FBTyxtQkFBbUIsS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUM1QyxPQUFPLG1CQUFtQixDQUFDO1FBQzdCLENBQUM7UUFDRCxJQUFJLE9BQU8sR0FBRyxDQUFDLFlBQVksS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUN6QyxPQUFPLEdBQUcsQ0FBQyxZQUFZLENBQUM7UUFDMUIsQ0FBQztRQUNELE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUMsRUFBRSxDQUFDLFdBQVcsRUFBRSxHQUFHLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQztJQUVwQyxJQUFJLENBQUMsWUFBWSxJQUFJLENBQUMsUUFBUSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDOUMsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsTUFBTSxpQkFBaUIsR0FDckIsQ0FBQyxRQUFRLEtBQUssT0FBTyxJQUFJLFNBQVMsQ0FBQztRQUNuQyxDQUFDLFFBQVEsS0FBSyxNQUFNLElBQUksY0FBYyxDQUFDLENBQUM7SUFFMUMsT0FBTyxDQUNMLGVBQUssU0FBUyxFQUFDLHNCQUFzQixhQUNuQyxLQUFDLG1CQUFtQixDQUFDLFFBQVEsSUFDM0IsS0FBSyxFQUNILFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLGdCQUFnQixFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVMsWUFHdkUsZUFBSyxTQUFTLEVBQUMsa0NBQWtDLGFBQzlDLGlCQUFpQixJQUFJLENBQ3BCLGVBQ0UsU0FBUyxFQUFDLDRCQUE0QixFQUN0QyxLQUFLLEVBQUU7Z0NBQ0wsV0FBVyxFQUFFLG9CQUFvQjtnQ0FDakMsZUFBZSxFQUFFLG9CQUFvQjs2QkFDdEMsYUFFRCxZQUNFLFNBQVMsRUFBQywyREFBMkQsRUFDckUsS0FBSyxFQUFFLEVBQUUsS0FBSyxFQUFFLG9CQUFvQixFQUFFLHdCQUdwQyxFQUNKLGVBQUssU0FBUyxFQUFDLHFCQUFxQixhQUVqQyxRQUFRLEtBQUssT0FBTyxJQUFJLFNBQVMsSUFBSSxDQUNwQyxrQkFDRSxJQUFJLEVBQUMsUUFBUSxFQUNiLE9BQU8sRUFBRSxZQUFZLEVBQ3JCLFFBQVEsRUFBRSxhQUFhLEVBQ3ZCLFNBQVMsRUFBRSxJQUFJLENBQ2IsaUZBQWlGLEVBQ2pGLG1FQUFtRSxFQUNuRSxhQUFhO2dEQUNYLENBQUMsQ0FBQywrQkFBK0I7Z0RBQ2pDLENBQUMsQ0FBQyxnQkFBZ0IsQ0FDckIsRUFDRCxLQUFLLEVBQUU7Z0RBQ0wsVUFBVSxFQUFFLHFCQUFxQjtnREFDakMsS0FBSyxFQUFFLHFCQUFxQjs2Q0FDN0IsYUFFRCxLQUFDLEdBQUcsSUFBQyxTQUFTLEVBQUMsU0FBUyxHQUFHLEVBQzFCLGFBQWEsQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxlQUFlLElBQzFDLENBQ1YsRUFHQSxRQUFRLEtBQUssTUFBTSxJQUFJLGNBQWMsSUFBSSxDQUN4QyxrQkFDRSxJQUFJLEVBQUMsUUFBUSxFQUNiLE9BQU8sRUFBRSxHQUFHLEVBQUUsQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsRUFDNUMsUUFBUSxFQUFFLGFBQWEsRUFDdkIsU0FBUyxFQUFFLElBQUksQ0FDYixpRkFBaUYsRUFDakYsbUVBQW1FLEVBQ25FLGFBQWE7Z0RBQ1gsQ0FBQyxDQUFDLCtCQUErQjtnREFDakMsQ0FBQyxDQUFDLGdCQUFnQixDQUNyQixFQUNELEtBQUssRUFBRTtnREFDTCxVQUFVLEVBQUUscUJBQXFCO2dEQUNqQyxLQUFLLEVBQUUsMEJBQTBCOzZDQUNsQyxhQUVELEtBQUMsSUFBSSxJQUFDLFNBQVMsRUFBQyxTQUFTLEdBQUcsb0JBRXJCLENBQ1YsSUFDRyxJQUNGLENBQ1AsRUFFRCxLQUFDLGNBQWMsSUFDYixJQUFJLEVBQUUsV0FBVyxFQUNqQixlQUFlLEVBQUUsZUFBZSxFQUNoQyxTQUFTLEVBQUUsR0FBRyxDQUFDLFNBQVMsRUFDeEIsU0FBUyxFQUFFLE9BQU8sRUFDbEIsS0FBSyxFQUFFLEtBQUssSUFBSSxTQUFTLEVBQ3pCLGFBQWEsRUFBRSxhQUFhLEVBQzVCLFVBQVUsRUFBRSxVQUFVLEVBQ3RCLFNBQVMsRUFBRSxTQUFTLEVBQ3BCLFlBQVksRUFBRSxZQUFZLEVBQzFCLFFBQVEsRUFBRSxRQUFRLEdBQ2xCLEVBRUQsU0FBUyxJQUFJLENBQ1osS0FBQyxVQUFVLElBQ1QsTUFBTSxFQUFFLFNBQVMsRUFDakIsZUFBZSxFQUFFLGVBQWUsRUFDaEMsYUFBYSxFQUFFLGFBQWEsRUFDNUIsVUFBVSxFQUFFLFVBQVUsRUFDdEIsYUFBYSxFQUFFLGFBQWEsRUFDNUIscUNBQXFDLEVBQ25DLHFDQUFxQyxHQUV2QyxDQUNILElBQ0csR0FDdUIsRUFHL0IsS0FBQyxnQkFBZ0IsSUFDZixNQUFNLEVBQUUsb0JBQW9CLEVBQzVCLE9BQU8sRUFBRSxHQUFHLEVBQUUsQ0FBQyx1QkFBdUIsQ0FBQyxLQUFLLENBQUMsRUFDN0MsUUFBUSxFQUFFLGlCQUFpQixFQUMzQixZQUFZLEVBQUUsYUFBYSxHQUMzQixJQUNFLENBQ1AsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIGNsaWVudCc7XG5cbmltcG9ydCB0eXBlIHsgRXZlbnQsIEhvb2ssIFdvcmtmbG93UnVuIH0gZnJvbSAnQHdvcmtmbG93L3dvcmxkJztcbmltcG9ydCBjbHN4IGZyb20gJ2Nsc3gnO1xuaW1wb3J0IHsgU2VuZCwgWmFwIH0gZnJvbSAnbHVjaWRlLXJlYWN0JztcbmltcG9ydCB7IHVzZUNhbGxiYWNrLCB1c2VFZmZlY3QsIHVzZU1lbW8sIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgdXNlVG9hc3QgfSBmcm9tICcuLi8uLi9saWIvdG9hc3QnO1xuaW1wb3J0IHsgRGVjcnlwdENsaWNrQ29udGV4dCB9IGZyb20gJy4uL3VpL2RhdGEtaW5zcGVjdG9yJztcbmltcG9ydCB7IEF0dHJpYnV0ZVBhbmVsIH0gZnJvbSAnLi9hdHRyaWJ1dGUtcGFuZWwnO1xuaW1wb3J0IHsgRXZlbnRzTGlzdCB9IGZyb20gJy4vZXZlbnRzLWxpc3QnO1xuaW1wb3J0IHsgUmVzb2x2ZUhvb2tNb2RhbCB9IGZyb20gJy4vcmVzb2x2ZS1ob29rLW1vZGFsJztcbmltcG9ydCB7IHVzZVNpZGViYXJEYXRhT3B0aW9uYWwgfSBmcm9tICcuL3NpZGViYXItZGF0YS1jb250ZXh0JztcbmltcG9ydCB7XG4gIHR5cGUgRmV0Y2hTcGFuRGV0YWlsLFxuICB1c2VTZWxlY3RlZFNwYW5EZXRhaWwsXG59IGZyb20gJy4vdXNlLXNlbGVjdGVkLXNwYW4tZGV0YWlsJztcblxuLy8gVHlwZSBndWFyZCBmb3IgcnVudGltZSB2YWxpZGF0aW9uIG9mIHNwYW4gYXR0cmlidXRlIGRhdGFcbmZ1bmN0aW9uIGlzSG9vayhkYXRhOiB1bmtub3duKTogZGF0YSBpcyBIb29rIHtcbiAgcmV0dXJuIGRhdGEgIT09IG51bGwgJiYgdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnICYmICdob29rSWQnIGluIGRhdGE7XG59XG5cbi8qKlxuICogSW5mbyBhYm91dCB0aGUgY3VycmVudGx5IHNlbGVjdGVkIHNwYW5cbiAqL1xuZXhwb3J0IHR5cGUgU3BhblNlbGVjdGlvbkluZm8gPSB7XG4gIHJlc291cmNlOiAncnVuJyB8ICdzdGVwJyB8ICdob29rJyB8ICdzbGVlcCc7XG4gIHJlc291cmNlSWQ6IHN0cmluZztcbiAgcnVuSWQ/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
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { type Event } from '@workflow/world';
|
|
2
|
-
export declare function EventsList({ events, isLoading, error, onLoadEventData, onStreamClick, onRunClick, encryptionKey, }: {
|
|
2
|
+
export declare function EventsList({ events, isLoading, error, onLoadEventData, onStreamClick, onRunClick, encryptionKey, showSeparateEventOccurrenceTimestamps, }: {
|
|
3
3
|
events: Event[];
|
|
4
4
|
isLoading?: boolean;
|
|
5
5
|
error?: Error | null;
|
|
@@ -8,5 +8,7 @@ export declare function EventsList({ events, isLoading, error, onLoadEventData,
|
|
|
8
8
|
onRunClick?: (runId: string) => void;
|
|
9
9
|
/** When provided, signals that decryption is active (triggers re-load of expanded events) */
|
|
10
10
|
encryptionKey?: Uint8Array;
|
|
11
|
+
/** Show occurredAt separately instead of folding it into the Created timestamp. */
|
|
12
|
+
showSeparateEventOccurrenceTimestamps?: boolean;
|
|
11
13
|
}): import("react/jsx-runtime").JSX.Element;
|
|
12
14
|
//# sourceMappingURL=events-list.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"events-list.d.ts","sourceRoot":"","sources":["../../../src/components/sidebar/events-list.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAyB,KAAK,KAAK,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"events-list.d.ts","sourceRoot":"","sources":["../../../src/components/sidebar/events-list.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAyB,KAAK,KAAK,EAAE,MAAM,iBAAiB,CAAC;AA+SpE,wBAAgB,UAAU,CAAC,EACzB,MAAM,EACN,SAAiB,EACjB,KAAK,EACL,eAAe,EACf,aAAa,EACb,UAAU,EACV,aAAa,EACb,qCAA6C,GAC9C,EAAE;IACD,MAAM,EAAE,KAAK,EAAE,CAAC;IAChB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,KAAK,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC;IACrB,eAAe,CAAC,EAAE,CAChB,aAAa,EAAE,MAAM,EACrB,OAAO,EAAE,MAAM,KACZ,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC;IAC7B,aAAa,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3C,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC,6FAA6F;IAC7F,aAAa,CAAC,EAAE,UAAU,CAAC;IAC3B,mFAAmF;IACnF,qCAAqC,CAAC,EAAE,OAAO,CAAC;CACjD,2CAqDA"}
|
|
@@ -7,6 +7,7 @@ import { RunClickContext, StreamClickContext } from '../ui/data-inspector';
|
|
|
7
7
|
import { ErrorCard } from '../ui/error-card';
|
|
8
8
|
import { ErrorStackBlock, isStructuredError } from '../ui/error-stack-block';
|
|
9
9
|
import { Skeleton } from '../ui/skeleton';
|
|
10
|
+
import { TimestampTooltip } from '../ui/timestamp-tooltip';
|
|
10
11
|
import { AttrSetEventBlock } from './attributes-block';
|
|
11
12
|
import { CopyableDataBlock, EncryptedDataBlock } from './copyable-data-block';
|
|
12
13
|
import { DetailCard } from './detail-card';
|
|
@@ -31,10 +32,26 @@ const DATA_EVENT_TYPES = new Set([
|
|
|
31
32
|
'wait_completed',
|
|
32
33
|
'attr_set',
|
|
33
34
|
]);
|
|
35
|
+
const parseDateValue = (value) => {
|
|
36
|
+
if (value == null)
|
|
37
|
+
return null;
|
|
38
|
+
const date = value instanceof Date ? value : new Date(String(value));
|
|
39
|
+
return Number.isNaN(date.getTime()) ? null : date;
|
|
40
|
+
};
|
|
41
|
+
const getEffectiveEventDate = (event) => parseDateValue(event.occurredAt) ?? new Date(event.createdAt);
|
|
42
|
+
const formatEventTimestamp = (date) => date.toLocaleString(undefined, {
|
|
43
|
+
month: 'short',
|
|
44
|
+
day: 'numeric',
|
|
45
|
+
hour: 'numeric',
|
|
46
|
+
minute: 'numeric',
|
|
47
|
+
second: 'numeric',
|
|
48
|
+
fractionalSecondDigits: 3,
|
|
49
|
+
timeZoneName: 'short',
|
|
50
|
+
});
|
|
34
51
|
/**
|
|
35
52
|
* A single event row that can lazy-load its eventData when expanded.
|
|
36
53
|
*/
|
|
37
|
-
function EventItem({ event, onLoadEventData, encryptionKey, }) {
|
|
54
|
+
function EventItem({ event, onLoadEventData, encryptionKey, showSeparateEventOccurrenceTimestamps = false, }) {
|
|
38
55
|
const [loadedData, setLoadedData] = useState(null);
|
|
39
56
|
const [isLoading, setIsLoading] = useState(false);
|
|
40
57
|
const [loadError, setLoadError] = useState(null);
|
|
@@ -81,18 +98,22 @@ function EventItem({ event, onLoadEventData, encryptionKey, }) {
|
|
|
81
98
|
void loadEventData({ force: true });
|
|
82
99
|
}, [encryptionKey, loadEventData]);
|
|
83
100
|
const createdAt = new Date(event.createdAt);
|
|
84
|
-
const
|
|
101
|
+
const occurredAt = parseDateValue(event.occurredAt);
|
|
102
|
+
const displayedCreatedAt = showSeparateEventOccurrenceTimestamps
|
|
103
|
+
? createdAt
|
|
104
|
+
: getEffectiveEventDate(event);
|
|
105
|
+
const displayedCreatedAtTime = displayedCreatedAt.toLocaleTimeString(undefined, {
|
|
85
106
|
hour: 'numeric',
|
|
86
107
|
minute: 'numeric',
|
|
87
108
|
second: 'numeric',
|
|
88
109
|
});
|
|
89
110
|
const displayPayload = isLoading ? loadedData : mergedDisplay;
|
|
90
|
-
return (_jsxs(DetailCard, { variant: "card", summaryClassName: "px-3 py-2", summary: _jsxs("div", { className: "flex w-full items-center justify-between gap-3", children: [_jsx("span", { className: "text-gray-1000 text-label-12 font-mono", children: event.eventType }), _jsx("span", { className: "shrink-0 text-label-13 text-gray-900", children:
|
|
111
|
+
return (_jsxs(DetailCard, { variant: "card", summaryClassName: "px-3 py-2", summary: _jsxs("div", { className: "flex w-full items-center justify-between gap-3", children: [_jsx("span", { className: "text-gray-1000 text-label-12 font-mono", children: event.eventType }), _jsx("span", { className: "shrink-0 text-label-13 text-gray-900", children: displayedCreatedAtTime })] }), onToggle: canHaveData
|
|
91
112
|
? (open) => {
|
|
92
113
|
if (open)
|
|
93
114
|
handleExpand();
|
|
94
115
|
}
|
|
95
|
-
: undefined, children: [_jsxs("div", { className: "flex flex-col bg-background-200 [&:has(+_*)]:border-b [&:has(+_*)]:border-gray-alpha-400", children: [_jsxs("div", { className: "flex items-center justify-between gap-2 py-2 px-3", children: [_jsx("span", { className: "text-label-12 text-gray-900", children: "Event ID" }), _jsx("span", { className: "max-w-[70%] truncate text-right text-label-12 font-mono", children: event.eventId })] }), event.correlationId && (_jsxs("div", { className: "flex items-center justify-between gap-2 py-2 px-3", children: [_jsx("span", { className: "text-label-12 text-gray-900", children: "Correlation ID" }), _jsx("span", { className: "max-w-[70%] truncate text-right text-label-12 font-mono", children: event.correlationId })] }))] }), isLoading && (_jsxs("div", { className: "p-3", children: [_jsx(Skeleton, { className: "h-4 w-[35%]" }), _jsx(Skeleton, { className: "mt-2 h-4 w-[90%]" }), _jsx(Skeleton, { className: "mt-2 h-4 w-[75%]" })] })), loadError && (_jsx(ErrorCard, { title: "Failed to load event data", details: loadError, className: "mt-2" })), displayPayload != null && (_jsx("div", { className: "[&>div]:border-none [&>div]:rounded-none", children: _jsx(EventDataBlock, { eventType: event.eventType, data: displayPayload }) }))] }));
|
|
116
|
+
: undefined, children: [_jsxs("div", { className: "flex flex-col bg-background-200 [&:has(+_*)]:border-b [&:has(+_*)]:border-gray-alpha-400", children: [showSeparateEventOccurrenceTimestamps && occurredAt && (_jsxs("div", { className: "flex items-center justify-between gap-2 py-2 px-3", children: [_jsx("span", { className: "text-label-12 text-gray-900", children: "Occurred" }), _jsx(TimestampTooltip, { date: occurredAt, children: _jsx("span", { className: "max-w-[70%] truncate text-right text-label-12 font-mono", children: formatEventTimestamp(occurredAt) }) })] })), _jsxs("div", { className: "flex items-center justify-between gap-2 py-2 px-3", children: [_jsx("span", { className: "text-label-12 text-gray-900", children: "Event ID" }), _jsx("span", { className: "max-w-[70%] truncate text-right text-label-12 font-mono", children: event.eventId })] }), event.correlationId && (_jsxs("div", { className: "flex items-center justify-between gap-2 py-2 px-3", children: [_jsx("span", { className: "text-label-12 text-gray-900", children: "Correlation ID" }), _jsx("span", { className: "max-w-[70%] truncate text-right text-label-12 font-mono", children: event.correlationId })] }))] }), isLoading && (_jsxs("div", { className: "p-3", children: [_jsx(Skeleton, { className: "h-4 w-[35%]" }), _jsx(Skeleton, { className: "mt-2 h-4 w-[90%]" }), _jsx(Skeleton, { className: "mt-2 h-4 w-[75%]" })] })), loadError && (_jsx(ErrorCard, { title: "Failed to load event data", details: loadError, className: "mt-2" })), displayPayload != null && (_jsx("div", { className: "[&>div]:border-none [&>div]:rounded-none", children: _jsx(EventDataBlock, { eventType: event.eventType, data: displayPayload }) }))] }));
|
|
96
117
|
}
|
|
97
118
|
/**
|
|
98
119
|
* Check if an eventData object has only expired marker values in ref/payload
|
|
@@ -152,13 +173,14 @@ function EventDataBlock({ eventType, data, }) {
|
|
|
152
173
|
// generic JSON viewer.
|
|
153
174
|
return _jsx(CopyableDataBlock, { data: data });
|
|
154
175
|
}
|
|
155
|
-
export function EventsList({ events, isLoading = false, error, onLoadEventData, onStreamClick, onRunClick, encryptionKey, }) {
|
|
156
|
-
// Sort by
|
|
157
|
-
const sortedEvents = useMemo(() => [...events].sort((a, b) =>
|
|
176
|
+
export function EventsList({ events, isLoading = false, error, onLoadEventData, onStreamClick, onRunClick, encryptionKey, showSeparateEventOccurrenceTimestamps = false, }) {
|
|
177
|
+
// Sort by the timestamp shown as Created by default.
|
|
178
|
+
const sortedEvents = useMemo(() => [...events].sort((a, b) => getEffectiveEventDate(a).getTime() -
|
|
179
|
+
getEffectiveEventDate(b).getTime()), [events]);
|
|
158
180
|
const hasEvents = sortedEvents.length > 0 && !error;
|
|
159
181
|
if (!hasEvents && !isLoading) {
|
|
160
182
|
return _jsx(DetailCard, { summary: "Events", disabled: true });
|
|
161
183
|
}
|
|
162
|
-
return (_jsx(RunClickContext.Provider, { value: onRunClick, children: _jsx(StreamClickContext.Provider, { value: onStreamClick, children: _jsx(DetailCard, { summary: "Events", contentClassName: "mb-0", defaultOpen: true, children: isLoading ? (_jsx("div", { className: "flex flex-col -mx-4", children: [0, 1, 2].map((i) => (_jsxs("div", { className: "flex items-center justify-between gap-3 bg-background-200 px-4 py-2", children: [_jsx(Skeleton, { className: "h-4 w-32 rounded" }), _jsx(Skeleton, { className: "h-3 w-16 rounded" })] }, i))) })) : (_jsx("div", { className: "flex flex-col -mx-4", children: sortedEvents.map((event) => (_jsx(EventItem, { event: event, onLoadEventData: onLoadEventData, encryptionKey: encryptionKey }, event.eventId))) })) }) }) }));
|
|
184
|
+
return (_jsx(RunClickContext.Provider, { value: onRunClick, children: _jsx(StreamClickContext.Provider, { value: onStreamClick, children: _jsx(DetailCard, { summary: "Events", contentClassName: "mb-0", defaultOpen: true, children: isLoading ? (_jsx("div", { className: "flex flex-col -mx-4", children: [0, 1, 2].map((i) => (_jsxs("div", { className: "flex items-center justify-between gap-3 bg-background-200 px-4 py-2", children: [_jsx(Skeleton, { className: "h-4 w-32 rounded" }), _jsx(Skeleton, { className: "h-3 w-16 rounded" })] }, i))) })) : (_jsx("div", { className: "flex flex-col -mx-4", children: sortedEvents.map((event) => (_jsx(EventItem, { event: event, onLoadEventData: onLoadEventData, encryptionKey: encryptionKey, showSeparateEventOccurrenceTimestamps: showSeparateEventOccurrenceTimestamps }, event.eventId))) })) }) }) }));
|
|
163
185
|
}
|
|
164
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZlbnRzLWxpc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29tcG9uZW50cy9zaWRlYmFyL2V2ZW50cy1saXN0LnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZLENBQUM7O0FBRWIsT0FBTyxFQUFFLHFCQUFxQixFQUFjLE1BQU0saUJBQWlCLENBQUM7QUFDcEUsT0FBTyxFQUFFLFdBQVcsRUFBRSxlQUFlLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsTUFBTSxPQUFPLENBQUM7QUFDaEYsT0FBTyxFQUFFLGtCQUFrQixFQUFFLGVBQWUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQzFFLE9BQU8sRUFBRSxlQUFlLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUMzRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDN0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzdFLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMxQyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUM5RSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTNDOztHQUVHO0FBQ0gsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLGFBQWEsRUFBRSxlQUFlLENBQUMsQ0FBQyxDQUFDO0FBRXBFOztHQUVHO0FBQ0gsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLEdBQUcsQ0FBQztJQUMvQixjQUFjO0lBQ2QsZ0JBQWdCO0lBQ2hCLGFBQWE7SUFDYixlQUFlO0lBQ2YsY0FBYztJQUNkLGVBQWU7SUFDZixhQUFhO0lBQ2IsZUFBZTtJQUNmLFlBQVk7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QUFDO0lBQ2xELENBQUM7SUFFRCxPQUFPLENBQ0wsS0FBQyxlQUFlLENBQUMsUUFBUSxJQUFDLEtBQUssRUFBRSxVQUFVLFlBQ3pDLEtBQUMsa0JBQWtCLENBQUMsUUFBUSxJQUFDLEtBQUssRUFBRSxhQUFhLFlBQy9DLEtBQUMsVUFBVSxJQUFDLE9BQU8sRUFBQyxRQUFRLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSxFQUFDLFdBQVcsa0JBQzdELFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FDWCxjQUFLLFNBQVMsRUFBQyxxQkFBcUIsWUFDakMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FDcEIsZUFFRSxTQUFTLEVBQUMscUVBQXFFLGFBRS9FLEtBQUMsUUFBUSxJQUFDLFNBQVMsRUFBQyxrQkFBa0IsR0FBRyxFQUN6QyxLQUFDLFFBQVEsSUFBQyxTQUFTLEVBQUMsa0JBQWtCLEdBQUcsS0FKcEMsQ0FBQyxDQUtGLENBQ1AsQ0FBQyxHQUNFLENBQ1AsQ0FBQyxDQUFDLENBQUMsQ0FDRixjQUFLLFNBQVMsRUFBQyxxQkFBcUIsWUFDakMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FDM0IsS0FBQyxTQUFTLElBRVIsS0FBSyxFQUFFLEtBQUssRUFDWixlQUFlLEVBQUUsZUFBZSxFQUNoQyxhQUFhLEVBQUUsYUFBYSxJQUh2QixLQUFLLENBQUMsT0FBTyxDQUlsQixDQUNILENBQUMsR0FDRSxDQUNQLEdBQ1UsR0FDZSxHQUNMLENBQzVCLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgeyBFVkVOVF9EQVRBX1JFRl9GSUVMRFMsIHR5cGUgRXZlbnQgfSBmcm9tICdAd29ya2Zsb3cvd29ybGQnO1xuaW1wb3J0IHsgdXNlQ2FsbGJhY2ssIHVzZUxheW91dEVmZmVjdCwgdXNlTWVtbywgdXNlUmVmLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGhhc0VuY3J5cHRlZEZpZWxkcywgaXNFeHBpcmVkTWFya2VyIH0gZnJvbSAnLi4vLi4vbGliL2h5ZHJhdGlvbic7XG5pbXBvcnQgeyBSdW5DbGlja0NvbnRleHQsIFN0cmVhbUNsaWNrQ29udGV4dCB9IGZyb20gJy4uL3VpL2RhdGEtaW5zcGVjdG9yJztcbmltcG9ydCB7IEVycm9yQ2FyZCB9IGZyb20gJy4uL3VpL2Vycm9yLWNhcmQnO1xuaW1wb3J0IHsgRXJyb3JTdGFja0Jsb2NrLCBpc1N0cnVjdHVyZWRFcnJvciB9IGZyb20gJy4uL3VpL2Vycm9yLXN0YWNrLWJsb2NrJztcbmltcG9ydCB7IFNrZWxldG9uIH0gZnJvbSAnLi4vdWkvc2tlbGV0b24nO1xuaW1wb3J0IHsgQXR0clNldEV2ZW50QmxvY2sgfSBmcm9tICcuL2F0dHJpYnV0ZXMtYmxvY2snO1xuaW1wb3J0IHsgQ29weWFibGVEYXRhQmxvY2ssIEVuY3J5cHRlZERhdGFCbG9jayB9IGZyb20gJy4vY29weWFibGUtZGF0YS1ibG9jayc7XG5pbXBvcnQgeyBEZXRhaWxDYXJkIH0gZnJvbSAnLi9kZXRhaWwtY2FyZCc7XG5cbi8qKlxuICogRXZlbnQgdHlwZXMgd2hvc2UgZXZlbnREYXRhIGNvbnRhaW5zIGFuIGVycm9yIGZpZWxkIHdpdGggYSBTdHJ1Y3R1cmVkRXJyb3IuXG4gKi9cbmNvbnN0IEVSUk9SX0VWRU5UX1RZUEVTID0gbmV3IFNldChbJ3N0ZXBfZmFpbGVkJywgJ3N0ZXBfcmV0cnlpbmcnXSk7XG5cbi8qKlxuICogRXZlbnQgdHlwZXMgdGhhdCBjYXJyeSB1c2VyLXNlcmlhbGl6ZWQgZGF0YSBpbiB0aGVpciBldmVudERhdGEgZmllbGQuXG4gKi9cbmNvbnN0IERBVEFfRVZFTlRfVFlQRVMgPSBuZXcgU2V0KFtcbiAgJ3N0ZXBfY3JlYXRlZCcsXG4gICdzdGVwX2NvbXBsZXRlZCcsXG4gICdzdGVwX2ZhaWxlZCcsXG4gICdzdGVwX3JldHJ5aW5nJyxcbiAgJ2hvb2tfY3JlYXRlZCcsXG4gICdob29rX3JlY2VpdmVkJyxcbiAgJ3J1bl9jcmVhdGVkJyxcbiAgJ3J1bl9jb21wbGV0ZWQnLFxuICAncnVuX2ZhaWxlZCcsXG4gICd3YWl0X2NyZWF0ZWQnLFxuICAnd2FpdF9jb21wbGV0ZWQnLFxuICAnYXR0cl9zZXQnLFxuXSk7XG5cbi8qKlxuICogQSBzaW5nbGUgZXZlbnQgcm93IHRoYXQgY2FuIGxhenktbG9hZCBpdHMgZXZlbnREYXRhIHdoZW4gZXhwYW5kZWQuXG4gKi9cbmZ1bmN0aW9uIEV2ZW50SXRlbSh7XG4gIGV2ZW50LFxuICBvbkxvYWRFdmVudERhdGEsXG4gIGVuY3J5cHRpb25LZXksXG59OiB7XG4gIGV2ZW50OiBFdmVudDtcbiAgb25Mb2FkRXZlbnREYXRhPzogKFxuICAgIGNvcnJlbGF0aW9uSWQ6IHN0cmluZyxcbiAgICBldmVudElkOiBzdHJpbmdcbiAgKSA9PiBQcm9taXNlPHVua25vd24gfCBudWxsPjtcbiAgLyoqIFdoZW4gdGhpcyBjaGFuZ2VzIChlLmcuLCBEZWNyeXB0IHdhcyBjbGlja2VkKSwgaW52YWxpZGF0ZSBjYWNoZWQgZGF0YSAqL1xuICBlbmNyeXB0aW9uS2V5PzogVWludDhBcnJheTtcbn0pIHtcbiAgY29uc3QgW2xvYWRlZERhdGEsIHNldExvYWRlZERhdGFdID0gdXNlU3RhdGU8dW5rbm93biB8IG51bGw+KG51bGwpO1xuICBjb25zdCBbaXNMb2FkaW5nLCBzZXRJc0xvYWRpbmddID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBbbG9hZEVycm9yLCBzZXRMb2FkRXJyb3JdID0gdXNlU3RhdGU8c3RyaW5nIHwgbnVsbD4obnVsbCk7XG4gIGNvbnN0IHdhc0V4cGFuZGVkUmVmID0gdXNlUmVmKGZhbHNlKTtcbiAgLyoqIE1pcnJvcnMgd2hldGhlciB3ZSBoYXZlIGEgZmV0Y2hlZCBwYXlsb2FkOyBhdm9pZHMgc3RhbGUgYGxvYWRlZERhdGFgIGluIGxvYWQgY2xvc3VyZS4gKi9cbiAgY29uc3QgbG9hZGVkRGF0YVJlZiA9IHVzZVJlZjx1bmtub3duIHwgbnVsbD4obnVsbCk7XG5cbiAgLy8gQ2hlY2sgaWYgdGhlIGV2ZW50IGFscmVhZHkgaGFzIGV2ZW50RGF0YSBmcm9tIHRoZSBzdG9yZVxuICBjb25zdCBleGlzdGluZ0RhdGEgPVxuICAgICdldmVudERhdGEnIGluIGV2ZW50ICYmIGV2ZW50LmV2ZW50RGF0YSAhPSBudWxsID8gZXZlbnQuZXZlbnREYXRhIDogbnVsbDtcbiAgY29uc3QgbWVyZ2VkRGlzcGxheSA9IGxvYWRlZERhdGEgPz8gZXhpc3RpbmdEYXRhO1xuICBjb25zdCBjYW5IYXZlRGF0YSA9IERBVEFfRVZFTlRfVFlQRVMuaGFzKGV2ZW50LmV2ZW50VHlwZSk7XG5cbiAgY29uc3QgbG9hZEV2ZW50RGF0YSA9IHVzZUNhbGxiYWNrKFxuICAgIGFzeW5jIChvcHRpb25zPzogeyBmb3JjZT86IGJvb2xlYW4gfSkgPT4ge1xuICAgICAgaWYgKCFvbkxvYWRFdmVudERhdGEgfHwgIWV2ZW50LmNvcnJlbGF0aW9uSWQgfHwgIWV2ZW50LmV2ZW50SWQpIHJldHVybjtcbiAgICAgIGlmICghb3B0aW9ucz8uZm9yY2UgJiYgbG9hZGVkRGF0YVJlZi5jdXJyZW50ICE9PSBudWxsKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdHJ5IHtcbiAgICAgICAgc2V0SXNMb2FkaW5nKHRydWUpO1xuICAgICAgICBzZXRMb2FkRXJyb3IobnVsbCk7XG4gICAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCBvbkxvYWRFdmVudERhdGEoZXZlbnQuY29ycmVsYXRpb25JZCwgZXZlbnQuZXZlbnRJZCk7XG4gICAgICAgIGxvYWRlZERhdGFSZWYuY3VycmVudCA9IGRhdGE7XG4gICAgICAgIHNldExvYWRlZERhdGEoZGF0YSk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgc2V0TG9hZEVycm9yKGVyciBpbnN0YW5jZW9mIEVycm9yID8gZXJyLm1lc3NhZ2UgOiBTdHJpbmcoZXJyKSk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBzZXRJc0xvYWRpbmcoZmFsc2UpO1xuICAgICAgfVxuICAgIH0sXG4gICAgW29uTG9hZEV2ZW50RGF0YSwgZXZlbnQuY29ycmVsYXRpb25JZCwgZXZlbnQuZXZlbnRJZF1cbiAgKTtcblxuICBjb25zdCBoYW5kbGVFeHBhbmQgPSB1c2VDYWxsYmFjayhhc3luYyAoKSA9PiB7XG4gICAgaWYgKGlzTG9hZGluZykgcmV0dXJuO1xuICAgIHdhc0V4cGFuZGVkUmVmLmN1cnJlbnQgPSB0cnVlO1xuICAgIGF3YWl0IGxvYWRFdmVudERhdGEoKTtcbiAgfSwgW2lzTG9hZGluZywgbG9hZEV2ZW50RGF0YV0pO1xuXG4gIC8vIFdoZW4gdGhlIGVuY3J5cHRpb24ga2V5IGNoYW5nZXMgYW5kIHRoaXMgZXZlbnQgd2FzIHByZXZpb3VzbHkgZXhwYW5kZWQsXG4gIC8vIHJlLWxvYWQgdGhlIGRhdGEgc28gaXQgZ2V0cyBkZWNyeXB0ZWRcbiAgdXNlTGF5b3V0RWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIWVuY3J5cHRpb25LZXkgfHwgIXdhc0V4cGFuZGVkUmVmLmN1cnJlbnQpIHJldHVybjtcbiAgICBsb2FkZWREYXRhUmVmLmN1cnJlbnQgPSBudWxsO1xuICAgIHNldExvYWRlZERhdGEobnVsbCk7XG4gICAgdm9pZCBsb2FkRXZlbnREYXRhKHsgZm9yY2U6IHRydWUgfSk7XG4gIH0sIFtlbmNyeXB0aW9uS2V5LCBsb2FkRXZlbnREYXRhXSk7XG5cbiAgY29uc3QgY3JlYXRlZEF0ID0gbmV3IERhdGUoZXZlbnQuY3JlYXRlZEF0KTtcbiAgY29uc3QgY3JlYXRlZEF0VGltZSA9IGNyZWF0ZWRBdC50b0xvY2FsZVRpbWVTdHJpbmcodW5kZWZpbmVkLCB7XG4gICAgaG91cjogJ251bWVyaWMnLFxuICAgIG1pbnV0ZTogJ251bWVyaWMnLFxuICAgIHNlY29uZDogJ251bWVyaWMnLFxuICB9KTtcblxuICBjb25zdCBkaXNwbGF5UGF5bG9hZCA9IGlzTG9hZGluZyA/IGxvYWRlZERhdGEgOiBtZXJnZWREaXNwbGF5O1xuXG4gIHJldHVybiAoXG4gICAgPERldGFpbENhcmRcbiAgICAgIHZhcmlhbnQ9XCJjYXJkXCJcbiAgICAgIHN1bW1hcnlDbGFzc05hbWU9XCJweC0zIHB5LTJcIlxuICAgICAgc3VtbWFyeT17XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCB3LWZ1bGwgaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiBnYXAtM1wiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInRleHQtZ3JheS0xMDAwIHRleHQtbGFiZWwtMTIgZm9udC1tb25vXCI+XG4gICAgICAgICAgICB7ZXZlbnQuZXZlbnRUeXBlfVxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJzaHJpbmstMCB0ZXh0LWxhYmVsLTEzIHRleHQtZ3JheS05MDBcIj5cbiAgICAgICAgICAgIHtjcmVhdGVkQXRUaW1lfVxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICB9XG4gICAgICBvblRvZ2dsZT17XG4gICAgICAgIGNhbkhhdmVEYXRhXG4gICAgICAgICAgPyAob3BlbikgPT4ge1xuICAgICAgICAgICAgICBpZiAob3BlbikgaGFuZGxlRXhwYW5kKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgOiB1bmRlZmluZWRcbiAgICAgIH1cbiAgICA+XG4gICAgICB7LyogRXZlbnQgYXR0cmlidXRlcyAqL31cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBmbGV4LWNvbCBiZy1iYWNrZ3JvdW5kLTIwMCBbJjpoYXMoK18qKV06Ym9yZGVyLWIgWyY6aGFzKCtfKildOmJvcmRlci1ncmF5LWFscGhhLTQwMFwiPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiBnYXAtMiBweS0yIHB4LTNcIj5cbiAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LWxhYmVsLTEyIHRleHQtZ3JheS05MDBcIj5FdmVudCBJRDwvc3Bhbj5cbiAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJtYXgtdy1bNzAlXSB0cnVuY2F0ZSB0ZXh0LXJpZ2h0IHRleHQtbGFiZWwtMTIgZm9udC1tb25vXCI+XG4gICAgICAgICAgICB7ZXZlbnQuZXZlbnRJZH1cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICB7ZXZlbnQuY29ycmVsYXRpb25JZCAmJiAoXG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gZ2FwLTIgcHktMiBweC0zXCI+XG4gICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LWxhYmVsLTEyIHRleHQtZ3JheS05MDBcIj5Db3JyZWxhdGlvbiBJRDwvc3Bhbj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cIm1heC13LVs3MCVdIHRydW5jYXRlIHRleHQtcmlnaHQgdGV4dC1sYWJlbC0xMiBmb250LW1vbm9cIj5cbiAgICAgICAgICAgICAge2V2ZW50LmNvcnJlbGF0aW9uSWR9XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICl9XG4gICAgICA8L2Rpdj5cblxuICAgICAgey8qIExvYWRpbmcgc3RhdGUgKi99XG4gICAgICB7aXNMb2FkaW5nICYmIChcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJwLTNcIj5cbiAgICAgICAgICA8U2tlbGV0b24gY2xhc3NOYW1lPVwiaC00IHctWzM1JV1cIiAvPlxuICAgICAgICAgIDxTa2VsZXRvbiBjbGFzc05hbWU9XCJtdC0yIGgtNCB3LVs5MCVdXCIgLz5cbiAgICAgICAgICA8U2tlbGV0b24gY2xhc3NOYW1lPVwibXQtMiBoLTQgdy1bNzUlXVwiIC8+XG4gICAgICAgIDwvZGl2PlxuICAgICAgKX1cblxuICAgICAgey8qIEVycm9yIHN0YXRlICovfVxuICAgICAge2xvYWRFcnJvciAmJiAoXG4gICAgICAgIDxFcnJvckNhcmRcbiAgICAgICAgICB0aXRsZT1cIkZhaWxlZCB0byBsb2FkIGV2ZW50IGRhdGFcIlxuICAgICAgICAgIGRldGFpbHM9e2xvYWRFcnJvcn1cbiAgICAgICAgICBjbGFzc05hbWU9XCJtdC0yXCJcbiAgICAgICAgLz5cbiAgICAgICl9XG5cbiAgICAgIHsvKiBFdmVudCBkYXRhICovfVxuICAgICAge2Rpc3BsYXlQYXlsb2FkICE9IG51bGwgJiYgKFxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIlsmPmRpdl06Ym9yZGVyLW5vbmUgWyY+ZGl2XTpyb3VuZGVkLW5vbmVcIj5cbiAgICAgICAgICA8RXZlbnREYXRhQmxvY2sgZXZlbnRUeXBlPXtldmVudC5ldmVudFR5cGV9IGRhdGE9e2Rpc3BsYXlQYXlsb2FkfSAvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICl9XG4gICAgPC9EZXRhaWxDYXJkPlxuICApO1xufVxuXG4vKipcbiAqIENoZWNrIGlmIGFuIGV2ZW50RGF0YSBvYmplY3QgaGFzIG9ubHkgZXhwaXJlZCBtYXJrZXIgdmFsdWVzIGluIHJlZi9wYXlsb2FkXG4gKiBmaWVsZHMgZm9yIHRoaXMgZXZlbnQgdHlwZSAoc2VlIHtAbGluayBFVkVOVF9EQVRBX1JFRl9GSUVMRFN9KS4gT3RoZXIga2V5c1xuICogKGUuZy4gYHJlc3VtZUF0YCwgYHN0ZXBOYW1lYCkgYXJlIGlnbm9yZWQuXG4gKi9cbmZ1bmN0aW9uIGhhc09ubHlFeHBpcmVkRmllbGRzKGRhdGE6IHVua25vd24sIGV2ZW50VHlwZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gIGlmIChkYXRhID09PSBudWxsIHx8IHR5cGVvZiBkYXRhICE9PSAnb2JqZWN0JyB8fCBBcnJheS5pc0FycmF5KGRhdGEpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGNvbnN0IHJlY29yZCA9IGRhdGEgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIGNvbnN0IHJlZktleXMgPSBFVkVOVF9EQVRBX1JFRl9GSUVMRFNbZXZlbnRUeXBlXSA/PyBbXTtcbiAgY29uc3QgcHJlc2VudEtleXMgPSByZWZLZXlzLmZpbHRlcigoaykgPT4gayBpbiByZWNvcmQpO1xuICByZXR1cm4gKFxuICAgIHByZXNlbnRLZXlzLmxlbmd0aCA+IDAgJiZcbiAgICBwcmVzZW50S2V5cy5ldmVyeSgoaykgPT4gaXNFeHBpcmVkTWFya2VyKHJlY29yZFtrXSkpXG4gICk7XG59XG5cbi8qKlxuICogUmVuZGVycyBldmVudCBkYXRhLCB1c2luZyBFcnJvclN0YWNrQmxvY2sgZm9yIGVycm9yIGV2ZW50cyB0aGF0IGNvbnRhaW4gYVxuICogc3RydWN0dXJlZCBlcnJvciwgYW5kIENvcHlhYmxlRGF0YUJsb2NrIG90aGVyd2lzZS5cbiAqL1xuZnVuY3Rpb24gRXZlbnREYXRhQmxvY2soe1xuICBldmVudFR5cGUsXG4gIGRhdGEsXG59OiB7XG4gIGV2ZW50VHlwZTogc3RyaW5nO1xuICBkYXRhOiB1bmtub3duO1xufSkge1xuICAvLyBFeHBpcmVkIGRhdGEg4oCUIHNob3cgYSBzaW1wbGUgbWVzc2FnZSBpbnN0ZWFkIG9mIHRoZSByYXcgc3R1Yi5cbiAgLy8gQ2hlY2sgYm90aCB0aGUgdG9wLWxldmVsIGV2ZW50RGF0YSBhbmQgbmVzdGVkIHN1Yi1maWVsZHMgKHJlc3VsdCwgaW5wdXQsIGV0Yy4pXG4gIC8vIHNpbmNlIHRoZSBzZXJ2ZXIgc3R1YnMgZWFjaCByZWYgZmllbGQgaW5kZXBlbmRlbnRseS5cbiAgaWYgKGlzRXhwaXJlZE1hcmtlcihkYXRhKSB8fCBoYXNPbmx5RXhwaXJlZEZpZWxkcyhkYXRhLCBldmVudFR5cGUpKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTEuNSByb3VuZGVkLW1kIGJvcmRlciBweC0zIHB5LTIgdGV4dC14c1wiXG4gICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgYm9yZGVyQ29sb3I6ICd2YXIoLS1kcy1ncmF5LTMwMCknLFxuICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogJ3ZhcigtLWRzLWdyYXktMTAwKScsXG4gICAgICAgICAgY29sb3I6ICd2YXIoLS1kcy1ncmF5LTcwMCknLFxuICAgICAgICB9fVxuICAgICAgPlxuICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJmb250LW1lZGl1bVwiPkRhdGEgZXhwaXJlZDwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cblxuICBpZiAoaGFzRW5jcnlwdGVkRmllbGRzKHsgZXZlbnRUeXBlLCBldmVudERhdGE6IGRhdGEgfSkpIHtcbiAgICByZXR1cm4gPEVuY3J5cHRlZERhdGFCbG9jayAvPjtcbiAgfVxuXG4gIC8vIEF0dHJpYnV0ZSBjaGFuZ2VzIOKAlCByZW5kZXIgdGhlIGNoYW5nZWQga2V5cyBhbmQgdGhlIHdyaXRlciBpbnN0ZWFkIG9mXG4gIC8vIHRoZSByYXcgSlNPTiBwYXlsb2FkLlxuICBpZiAoZXZlbnRUeXBlID09PSAnYXR0cl9zZXQnKSB7XG4gICAgcmV0dXJuIDxBdHRyU2V0RXZlbnRCbG9jayBkYXRhPXtkYXRhfSAvPjtcbiAgfVxuXG4gIC8vIEZvciBlcnJvciBldmVudHMgKHN0ZXBfZmFpbGVkLCBzdGVwX3JldHJ5aW5nKSwgdGhlIGV2ZW50RGF0YSBoYXMgdGhlIHNoYXBlXG4gIC8vIHsgZXJyb3I6IFN0cnVjdHVyZWRFcnJvciwgc3RhY2s/OiBzdHJpbmcsIC4uLiB9LiBDaGVjayBib3RoIHRoZSB0b3AtbGV2ZWxcbiAgLy8gdmFsdWUgYW5kIHRoZSBuZXN0ZWQgYGVycm9yYCBmaWVsZCBmb3IgYSBzdGFjayB0cmFjZS5cbiAgaWYgKFxuICAgIEVSUk9SX0VWRU5UX1RZUEVTLmhhcyhldmVudFR5cGUpICYmXG4gICAgZGF0YSAhPSBudWxsICYmXG4gICAgdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnXG4gICkge1xuICAgIGNvbnN0IHJlY29yZCA9IGRhdGEgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG5cbiAgICAvLyBDaGVjayB0aGUgbmVzdGVkIGBlcnJvcmAgZmllbGQgZmlyc3QgKHRoZSBTdHJ1Y3R1cmVkRXJyb3IpXG4gICAgaWYgKGlzU3RydWN0dXJlZEVycm9yKHJlY29yZC5lcnJvcikpIHtcbiAgICAgIHJldHVybiA8RXJyb3JTdGFja0Jsb2NrIHZhbHVlPXtyZWNvcmQuZXJyb3J9IC8+O1xuICAgIH1cblxuICAgIC8vIFNvbWUgZXJyb3IgZm9ybWF0cyBwdXQgdGhlIG1lc3NhZ2Uvc3RhY2sgYXQgdGhlIHRvcCBsZXZlbCBvZiBldmVudERhdGEuXG4gICAgaWYgKGlzU3RydWN0dXJlZEVycm9yKHJlY29yZCkpIHtcbiAgICAgIHJldHVybiA8RXJyb3JTdGFja0Jsb2NrIHZhbHVlPXtyZWNvcmR9IC8+O1xuICAgIH1cbiAgfVxuXG4gIC8vIEZvciBub24tZXJyb3IgZXZlbnRzIG9yIGVycm9ycyB3aXRob3V0IGEgc3RhY2ssIGZhbGwgYmFjayB0byB0aGVcbiAgLy8gZ2VuZXJpYyBKU09OIHZpZXdlci5cbiAgcmV0dXJuIDxDb3B5YWJsZURhdGFCbG9jayBkYXRhPXtkYXRhfSAvPjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIEV2ZW50c0xpc3Qoe1xuICBldmVudHMsXG4gIGlzTG9hZGluZyA9IGZhbHNlLFxuICBlcnJvcixcbiAgb25Mb2FkRXZlbnREYXRhLFxuICBvblN0cmVhbUNsaWNrLFxuICBvblJ1bkNsaWNrLFxuICBlbmNyeXB0aW9uS2V5LFxufToge1xuICBldmVudHM6IEV2ZW50W107XG4gIGlzTG9hZGluZz86IGJvb2xlYW47XG4gIGVycm9yPzogRXJyb3IgfCBudWxsO1xuICBvbkxvYWRFdmVudERhdGE/OiAoXG4gICAgY29ycmVsYXRpb25JZDogc3RyaW5nLFxuICAgIGV2ZW50SWQ6IHN0cmluZ1xuICApID0+IFByb21pc2U8dW5rbm93biB8IG51bGw+O1xuICBvblN0cmVhbUNsaWNrPzogKHN0cmVhbUlkOiBzdHJpbmcpID0+IHZvaWQ7XG4gIG9uUnVuQ2xpY2s/OiAocnVuSWQ6IHN0cmluZykgPT4gdm9pZDtcbiAgLyoqIFdoZW4gcHJvdmlkZWQsIHNpZ25hbHMgdGhhdCBkZWNyeXB0aW9uIGlzIGFjdGl2ZSAodHJpZ2dlcnMgcmUtbG9hZCBvZiBleHBhbmRlZCBldmVudHMpICovXG4gIGVuY3J5cHRpb25LZXk/OiBVaW50OEFycmF5O1xufSkge1xuICAvLyBTb3J0IGJ5IGNyZWF0ZWRBdFxuICBjb25zdCBzb3J0ZWRFdmVudHMgPSB1c2VNZW1vKFxuICAgICgpID0+XG4gICAgICBbLi4uZXZlbnRzXS5zb3J0KFxuICAgICAgICAoYSwgYikgPT5cbiAgICAgICAgICBuZXcgRGF0ZShhLmNyZWF0ZWRBdCkuZ2V0VGltZSgpIC0gbmV3IERhdGUoYi5jcmVhdGVkQXQpLmdldFRpbWUoKVxuICAgICAgKSxcbiAgICBbZXZlbnRzXVxuICApO1xuXG4gIGNvbnN0IGhhc0V2ZW50cyA9IHNvcnRlZEV2ZW50cy5sZW5ndGggPiAwICYmICFlcnJvcjtcblxuICBpZiAoIWhhc0V2ZW50cyAmJiAhaXNMb2FkaW5nKSB7XG4gICAgcmV0dXJuIDxEZXRhaWxDYXJkIHN1bW1hcnk9XCJFdmVudHNcIiBkaXNhYmxlZCAvPjtcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPFJ1bkNsaWNrQ29udGV4dC5Qcm92aWRlciB2YWx1ZT17b25SdW5DbGlja30+XG4gICAgICA8U3RyZWFtQ2xpY2tDb250ZXh0LlByb3ZpZGVyIHZhbHVlPXtvblN0cmVhbUNsaWNrfT5cbiAgICAgICAgPERldGFpbENhcmQgc3VtbWFyeT1cIkV2ZW50c1wiIGNvbnRlbnRDbGFzc05hbWU9XCJtYi0wXCIgZGVmYXVsdE9wZW4+XG4gICAgICAgICAge2lzTG9hZGluZyA/IChcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBmbGV4LWNvbCAtbXgtNFwiPlxuICAgICAgICAgICAgICB7WzAsIDEsIDJdLm1hcCgoaSkgPT4gKFxuICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgIGtleT17aX1cbiAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiBnYXAtMyBiZy1iYWNrZ3JvdW5kLTIwMCBweC00IHB5LTJcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxTa2VsZXRvbiBjbGFzc05hbWU9XCJoLTQgdy0zMiByb3VuZGVkXCIgLz5cbiAgICAgICAgICAgICAgICAgIDxTa2VsZXRvbiBjbGFzc05hbWU9XCJoLTMgdy0xNiByb3VuZGVkXCIgLz5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICApIDogKFxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGZsZXgtY29sIC1teC00XCI+XG4gICAgICAgICAgICAgIHtzb3J0ZWRFdmVudHMubWFwKChldmVudCkgPT4gKFxuICAgICAgICAgICAgICAgIDxFdmVudEl0ZW1cbiAgICAgICAgICAgICAgICAgIGtleT17ZXZlbnQuZXZlbnRJZH1cbiAgICAgICAgICAgICAgICAgIGV2ZW50PXtldmVudH1cbiAgICAgICAgICAgICAgICAgIG9uTG9hZEV2ZW50RGF0YT17b25Mb2FkRXZlbnREYXRhfVxuICAgICAgICAgICAgICAgICAgZW5jcnlwdGlvbktleT17ZW5jcnlwdGlvbktleX1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICl9XG4gICAgICAgIDwvRGV0YWlsQ2FyZD5cbiAgICAgIDwvU3RyZWFtQ2xpY2tDb250ZXh0LlByb3ZpZGVyPlxuICAgIDwvUnVuQ2xpY2tDb250ZXh0LlByb3ZpZGVyPlxuICApO1xufVxuIl19
|
|
186
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZlbnRzLWxpc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29tcG9uZW50cy9zaWRlYmFyL2V2ZW50cy1saXN0LnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZLENBQUM7O0FBRWIsT0FBTyxFQUFFLHFCQUFxQixFQUFjLE1BQU0saUJBQWlCLENBQUM7QUFDcEUsT0FBTyxFQUFFLFdBQVcsRUFBRSxlQUFlLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsTUFBTSxPQUFPLENBQUM7QUFDaEYsT0FBTyxFQUFFLGtCQUFrQixFQUFFLGVBQWUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQzFFLE9BQU8sRUFBRSxlQUFlLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUMzRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDN0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzdFLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMxQyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUM5RSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTNDOztHQUVHO0FBQ0gsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLGFBQWEsRUFBRSxlQUFlLENBQUMsQ0FBQyxDQUFDO0FBRXBFOztHQUVHO0FBQ0gsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLEdBQUcsQ0FBQztJQUMvQixjQUFjO0lBQ2QsZ0JBQWdCO0lBQ2hCLGFBQWE7SUFDYixlQUFlO0lBQ2YsY0FBYztJQUNkLGVBQWU7SUFDZixhQUFhO0lBQ2IsZUFBZTtJQUNmLFlBQVk7SUFDWixjQUFjO0lBQ2QsZ0JBQWdCO0lBQ2hCLFVBQVU7Q0FDWCxDQUFDLENBQUM7QUFFSCxNQUFNLGNBQWMsR0FBRyxDQUFDLEtBQWMsRUFBZSxFQUFFO0lBQ3JELElBQUksS0FBSyxJQUFJLElBQUk7UUFBRSxPQUFPLElBQUksQ0FBQztJQUUvQixNQUFNLElBQUksR0FBRyxLQUFLLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQ3JFLE9BQU8sTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7QUFDcEQsQ0FBQyxDQUFDO0FBRUYsTUFBTSxxQkFBcUIsR0FBRyxDQUM1QixLQUE4QyxFQUN4QyxFQUFFLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUM7QUFFekUsTUFBTSxvQkFBb0IsR0FBRyxDQUFDLElBQVUsRUFBVSxFQUFFLENBQ2xELElBQUksQ0FBQyxjQUFjLENBQUMsU0FBUyxFQUFFO0lBQzdCLEtBQUssRUFBRSxPQUFPO0lBQ2QsR0FBRyxFQUFFLFNBQVM7SUFDZCxJQUFJLEVBQUUsU0FBUztJQUNmLE1BQU0sRUFBRSxTQUFTO0lBQ2pCLE1BQU0sRUFBRSxTQUFTO0lBQ2pCLHNCQUFzQixFQUFFLENBQUM7SUFDekIsWUFBWSxFQUFFLE9BQU87Q0FDdEIsQ0FBQyxDQUFDO0FBRUw7O0dBRUc7QUFDSCxTQUFTLFNBQVMsQ0FBQyxFQUNqQixLQUFLLEVBQ0wsZUFBZSxFQUNmLGFBQWEsRUFDYixxQ0FBcUMsR0FBRyxLQUFLLEdBVzlDO0lBQ0MsTUFBTSxDQUFDLFVBQVUsRUFBRSxhQUFhLENBQUMsR0FBRyxRQUFRLENBQWlCLElBQUksQ0FBQyxDQUFDO0lBQ25FLE1BQU0sQ0FBQyxTQUFTLEVBQUUsWUFBWSxDQUFDLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2xELE1BQU0sQ0FBQyxTQUFTLEVBQUUsWUFBWSxDQUFDLEdBQUcsUUFBUSxDQUFnQixJQUFJLENBQUMsQ0FBQztJQUNoRSxNQUFNLGNBQWMsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDckMsNEZBQTRGO0lBQzVGLE1BQU0sYUFBYSxHQUFHLE1BQU0sQ0FBaUIsSUFBSSxDQUFDLENBQUM7SUFFbkQsMERBQTBEO0lBQzFELE1BQU0sWUFBWSxHQUNoQixXQUFXLElBQUksS0FBSyxJQUFJLEtBQUssQ0FBQyxTQUFTLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDM0UsTUFBTSxhQUFhLEdBQUcsVUFBVSxJQUFJLFlBQVksQ0FBQztJQUNqRCxNQUFNLFdBQVcsR0FBRyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBRTFELE1BQU0sYUFBYSxHQUFHLFdBQVcsQ0FDL0IsS0FBSyxFQUFFLE9BQTZCLEVBQUUsRUFBRTtRQUN0QyxJQUFJLENBQUMsZUFBZSxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPO1lBQUUsT0FBTztRQUN2RSxJQUFJLENBQUMsT0FBTyxFQUFFLEtBQUssSUFBSSxhQUFhLENBQUMsT0FBTyxLQUFLLElBQUksRUFBRSxDQUFDO1lBQ3RELE9BQU87UUFDVCxDQUFDO1FBRUQsSUFBSSxDQUFDO1lBQ0gsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ25CLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNuQixNQUFNLElBQUksR0FBRyxNQUFNLGVBQWUsQ0FBQyxLQUFLLENBQUMsYUFBYSxFQUFFLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUN2RSxhQUFhLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztZQUM3QixhQUFhLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDdEIsQ0FBQztRQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7WUFDYixZQUFZLENBQUMsR0FBRyxZQUFZLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDakUsQ0FBQztnQkFBUyxDQUFDO1lBQ1QsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3RCLENBQUM7SUFDSCxDQUFDLEVBQ0QsQ0FBQyxlQUFlLEVBQUUsS0FBSyxDQUFDLGFBQWEsRUFBRSxLQUFLLENBQUMsT0FBTyxDQUFDLENBQ3RELENBQUM7SUFFRixNQUFNLFlBQVksR0FBRyxXQUFXLENBQUMsS0FBSyxJQUFJLEVBQUU7UUFDMUMsSUFBSSxTQUFTO1lBQUUsT0FBTztRQUN0QixjQUFjLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztRQUM5QixNQUFNLGFBQWEsRUFBRSxDQUFDO0lBQ3hCLENBQUMsRUFBRSxDQUFDLFNBQVMsRUFBRSxhQUFhLENBQUMsQ0FBQyxDQUFDO0lBRS9CLDBFQUEwRTtJQUMxRSx3Q0FBd0M7SUFDeEMsZUFBZSxDQUFDLEdBQUcsRUFBRTtRQUNuQixJQUFJLENBQUMsYUFBYSxJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU87WUFBRSxPQUFPO1FBQ3RELGFBQWEsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO1FBQzdCLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNwQixLQUFLLGFBQWEsQ0FBQyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQ3RDLENBQUMsRUFBRSxDQUFDLGFBQWEsRUFBRSxhQUFhLENBQUMsQ0FBQyxDQUFDO0lBRW5DLE1BQU0sU0FBUyxHQUFHLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUM1QyxNQUFNLFVBQVUsR0FBRyxjQUFjLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ3BELE1BQU0sa0JBQWtCLEdBQUcscUNBQXFDO1FBQzlELENBQUMsQ0FBQyxTQUFTO1FBQ1gsQ0FBQyxDQUFDLHFCQUFxQixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2pDLE1BQU0sc0JBQXNCLEdBQUcsa0JBQWtCLENBQUMsa0JBQWtCLENBQ2xFLFNBQVMsRUFDVDtRQUNFLElBQUksRUFBRSxTQUFTO1FBQ2YsTUFBTSxFQUFFLFNBQVM7UUFDakIsTUFBTSxFQUFFLFNBQVM7S0FDbEIsQ0FDRixDQUFDO0lBRUYsTUFBTSxjQUFjLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQztJQUU5RCxPQUFPLENBQ0wsTUFBQyxVQUFVLElBQ1QsT0FBTyxFQUFDLE1BQU0sRUFDZCxnQkFBZ0IsRUFBQyxXQUFXLEVBQzVCLE9BQU8sRUFDTCxlQUFLLFNBQVMsRUFBQyxnREFBZ0QsYUFDN0QsZUFBTSxTQUFTLEVBQUMsd0NBQXdDLFlBQ3JELEtBQUssQ0FBQyxTQUFTLEdBQ1gsRUFDUCxlQUFNLFNBQVMsRUFBQyxzQ0FBc0MsWUFDbkQsc0JBQXNCLEdBQ2xCLElBQ0gsRUFFUixRQUFRLEVBQ04sV0FBVztZQUNULENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO2dCQUNQLElBQUksSUFBSTtvQkFBRSxZQUFZLEVBQUUsQ0FBQztZQUMzQixDQUFDO1lBQ0gsQ0FBQyxDQUFDLFNBQVMsYUFJZixlQUFLLFNBQVMsRUFBQywwRkFBMEYsYUFDdEcscUNBQXFDLElBQUksVUFBVSxJQUFJLENBQ3RELGVBQUssU0FBUyxFQUFDLG1EQUFtRCxhQUNoRSxlQUFNLFNBQVMsRUFBQyw2QkFBNkIseUJBQWdCLEVBQzdELEtBQUMsZ0JBQWdCLElBQUMsSUFBSSxFQUFFLFVBQVUsWUFDaEMsZUFBTSxTQUFTLEVBQUMseURBQXlELFlBQ3RFLG9CQUFvQixDQUFDLFVBQVUsQ0FBQyxHQUM1QixHQUNVLElBQ2YsQ0FDUCxFQUNELGVBQUssU0FBUyxFQUFDLG1EQUFtRCxhQUNoRSxlQUFNLFNBQVMsRUFBQyw2QkFBNkIseUJBQWdCLEVBQzdELGVBQU0sU0FBUyxFQUFDLHlEQUF5RCxZQUN0RSxLQUFLLENBQUMsT0FBTyxHQUNULElBQ0gsRUFDTCxLQUFLLENBQUMsYUFBYSxJQUFJLENBQ3RCLGVBQUssU0FBUyxFQUFDLG1EQUFtRCxhQUNoRSxlQUFNLFNBQVMsRUFBQyw2QkFBNkIsK0JBQXNCLEVBQ25FLGVBQU0sU0FBUyxFQUFDLHlEQUF5RCxZQUN0RSxLQUFLLENBQUMsYUFBYSxHQUNmLElBQ0gsQ0FDUCxJQUNHLEVBR0wsU0FBUyxJQUFJLENBQ1osZUFBSyxTQUFTLEVBQUMsS0FBSyxhQUNsQixLQUFDLFFBQVEsSUFBQyxTQUFTLEVBQUMsYUFBYSxHQUFHLEVBQ3BDLEtBQUMsUUFBUSxJQUFDLFNBQVMsRUFBQyxrQkFBa0IsR0FBRyxFQUN6QyxLQUFDLFFBQVEsSUFBQyxTQUFTLEVBQUMsa0JBQWtCLEdBQUcsSUFDckMsQ0FDUCxFQUdBLFNBQVMsSUFBSSxDQUNaLEtBQUMsU0FBUyxJQUNSLEtBQUssRUFBQywyQkFBMkIsRUFDakMsT0FBTyxFQUFFLFNBQVMsRUFDbEIsU0FBUyxFQUFDLE1BQU0sR0FDaEIsQ0FDSCxFQUdBLGNBQWMsSUFBSSxJQUFJLElBQUksQ0FDekIsY0FBSyxTQUFTLEVBQUMsMENBQTBDLFlBQ3ZELEtBQUMsY0FBYyxJQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsU0FBUyxFQUFFLElBQUksRUFBRSxjQUFjLEdBQUksR0FDaEUsQ0FDUCxJQUNVLENBQ2QsQ0FBQztBQUNKLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsU0FBUyxvQkFBb0IsQ0FBQyxJQUFhLEVBQUUsU0FBaUI7SUFDNUQsSUFBSSxJQUFJLEtBQUssSUFBSSxJQUFJLE9BQU8sSUFBSSxLQUFLLFFBQVEsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7UUFDckUsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBQ0QsTUFBTSxNQUFNLEdBQUcsSUFBK0IsQ0FBQztJQUMvQyxNQUFNLE9BQU8sR0FBRyxxQkFBcUIsQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDdkQsTUFBTSxXQUFXLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxDQUFDO0lBQ3ZELE9BQU8sQ0FDTCxXQUFXLENBQUMsTUFBTSxHQUFHLENBQUM7UUFDdEIsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQ3JELENBQUM7QUFDSixDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsU0FBUyxjQUFjLENBQUMsRUFDdEIsU0FBUyxFQUNULElBQUksR0FJTDtJQUNDLGdFQUFnRTtJQUNoRSxpRkFBaUY7SUFDakYsdURBQXVEO0lBQ3ZELElBQUksZUFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLG9CQUFvQixDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsRUFBRSxDQUFDO1FBQ25FLE9BQU8sQ0FDTCxjQUNFLFNBQVMsRUFBQywrREFBK0QsRUFDekUsS0FBSyxFQUFFO2dCQUNMLFdBQVcsRUFBRSxvQkFBb0I7Z0JBQ2pDLGVBQWUsRUFBRSxvQkFBb0I7Z0JBQ3JDLEtBQUssRUFBRSxvQkFBb0I7YUFDNUIsWUFFRCxlQUFNLFNBQVMsRUFBQyxhQUFhLDZCQUFvQixHQUM3QyxDQUNQLENBQUM7SUFDSixDQUFDO0lBRUQsSUFBSSxrQkFBa0IsQ0FBQyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDO1FBQ3ZELE9BQU8sS0FBQyxrQkFBa0IsS0FBRyxDQUFDO0lBQ2hDLENBQUM7SUFFRCx3RUFBd0U7SUFDeEUsd0JBQXdCO0lBQ3hCLElBQUksU0FBUyxLQUFLLFVBQVUsRUFBRSxDQUFDO1FBQzdCLE9BQU8sS0FBQyxpQkFBaUIsSUFBQyxJQUFJLEVBQUUsSUFBSSxHQUFJLENBQUM7SUFDM0MsQ0FBQztJQUVELDZFQUE2RTtJQUM3RSw0RUFBNEU7SUFDNUUsd0RBQXdEO0lBQ3hELElBQ0UsaUJBQWlCLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQztRQUNoQyxJQUFJLElBQUksSUFBSTtRQUNaLE9BQU8sSUFBSSxLQUFLLFFBQVEsRUFDeEIsQ0FBQztRQUNELE1BQU0sTUFBTSxHQUFHLElBQStCLENBQUM7UUFFL0MsNkRBQTZEO1FBQzdELElBQUksaUJBQWlCLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDcEMsT0FBTyxLQUFDLGVBQWUsSUFBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLEtBQUssR0FBSSxDQUFDO1FBQ2xELENBQUM7UUFFRCwwRUFBMEU7UUFDMUUsSUFBSSxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1lBQzlCLE9BQU8sS0FBQyxlQUFlLElBQUMsS0FBSyxFQUFFLE1BQU0sR0FBSSxDQUFDO1FBQzVDLENBQUM7SUFDSCxDQUFDO0lBRUQsbUVBQW1FO0lBQ25FLHVCQUF1QjtJQUN2QixPQUFPLEtBQUMsaUJBQWlCLElBQUMsSUFBSSxFQUFFLElBQUksR0FBSSxDQUFDO0FBQzNDLENBQUM7QUFFRCxNQUFNLFVBQVUsVUFBVSxDQUFDLEVBQ3pCLE1BQU0sRUFDTixTQUFTLEdBQUcsS0FBSyxFQUNqQixLQUFLLEVBQ0wsZUFBZSxFQUNmLGFBQWEsRUFDYixVQUFVLEVBQ1YsYUFBYSxFQUNiLHFDQUFxQyxHQUFHLEtBQUssR0FlOUM7SUFDQyxxREFBcUQ7SUFDckQsTUFBTSxZQUFZLEdBQUcsT0FBTyxDQUMxQixHQUFHLEVBQUUsQ0FDSCxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUNkLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQ1AscUJBQXFCLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFO1FBQ2xDLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUNyQyxFQUNILENBQUMsTUFBTSxDQUFDLENBQ1QsQ0FBQztJQUVGLE1BQU0sU0FBUyxHQUFHLFlBQVksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDO0lBRXBELElBQUksQ0FBQyxTQUFTLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUM3QixPQUFPLEtBQUMsVUFBVSxJQUFDLE9BQU8sRUFBQyxRQUFRLEVBQUMsUUFBUSxTQUFHLENBQUM7SUFDbEQsQ0FBQztJQUVELE9BQU8sQ0FDTCxLQUFDLGVBQWUsQ0FBQyxRQUFRLElBQUMsS0FBSyxFQUFFLFVBQVUsWUFDekMsS0FBQyxrQkFBa0IsQ0FBQyxRQUFRLElBQUMsS0FBSyxFQUFFLGFBQWEsWUFDL0MsS0FBQyxVQUFVLElBQUMsT0FBTyxFQUFDLFFBQVEsRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLEVBQUMsV0FBVyxrQkFDN0QsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUNYLGNBQUssU0FBUyxFQUFDLHFCQUFxQixZQUNqQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUNwQixlQUVFLFNBQVMsRUFBQyxxRUFBcUUsYUFFL0UsS0FBQyxRQUFRLElBQUMsU0FBUyxFQUFDLGtCQUFrQixHQUFHLEVBQ3pDLEtBQUMsUUFBUSxJQUFDLFNBQVMsRUFBQyxrQkFBa0IsR0FBRyxLQUpwQyxDQUFDLENBS0YsQ0FDUCxDQUFDLEdBQ0UsQ0FDUCxDQUFDLENBQUMsQ0FBQyxDQUNGLGNBQUssU0FBUyxFQUFDLHFCQUFxQixZQUNqQyxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUMzQixLQUFDLFNBQVMsSUFFUixLQUFLLEVBQUUsS0FBSyxFQUNaLGVBQWUsRUFBRSxlQUFlLEVBQ2hDLGFBQWEsRUFBRSxhQUFhLEVBQzVCLHFDQUFxQyxFQUNuQyxxQ0FBcUMsSUFMbEMsS0FBSyxDQUFDLE9BQU8sQ0FPbEIsQ0FDSCxDQUFDLEdBQ0UsQ0FDUCxHQUNVLEdBQ2UsR0FDTCxDQUM1QixDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIid1c2UgY2xpZW50JztcblxuaW1wb3J0IHsgRVZFTlRfREFUQV9SRUZfRklFTERTLCB0eXBlIEV2ZW50IH0gZnJvbSAnQHdvcmtmbG93L3dvcmxkJztcbmltcG9ydCB7IHVzZUNhbGxiYWNrLCB1c2VMYXlvdXRFZmZlY3QsIHVzZU1lbW8sIHVzZVJlZiwgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBoYXNFbmNyeXB0ZWRGaWVsZHMsIGlzRXhwaXJlZE1hcmtlciB9IGZyb20gJy4uLy4uL2xpYi9oeWRyYXRpb24nO1xuaW1wb3J0IHsgUnVuQ2xpY2tDb250ZXh0LCBTdHJlYW1DbGlja0NvbnRleHQgfSBmcm9tICcuLi91aS9kYXRhLWluc3BlY3Rvcic7XG5pbXBvcnQgeyBFcnJvckNhcmQgfSBmcm9tICcuLi91aS9lcnJvci1jYXJkJztcbmltcG9ydCB7IEVycm9yU3RhY2tCbG9jaywgaXNTdHJ1Y3R1cmVkRXJyb3IgfSBmcm9tICcuLi91aS9lcnJvci1zdGFjay1ibG9jayc7XG5pbXBvcnQgeyBTa2VsZXRvbiB9IGZyb20gJy4uL3VpL3NrZWxldG9uJztcbmltcG9ydCB7IFRpbWVzdGFtcFRvb2x0aXAgfSBmcm9tICcuLi91aS90aW1lc3RhbXAtdG9vbHRpcCc7XG5pbXBvcnQgeyBBdHRyU2V0RXZlbnRCbG9jayB9IGZyb20gJy4vYXR0cmlidXRlcy1ibG9jayc7XG5pbXBvcnQgeyBDb3B5YWJsZURhdGFCbG9jaywgRW5jcnlwdGVkRGF0YUJsb2NrIH0gZnJvbSAnLi9jb3B5YWJsZS1kYXRhLWJsb2NrJztcbmltcG9ydCB7IERldGFpbENhcmQgfSBmcm9tICcuL2RldGFpbC1jYXJkJztcblxuLyoqXG4gKiBFdmVudCB0eXBlcyB3aG9zZSBldmVudERhdGEgY29udGFpbnMgYW4gZXJyb3IgZmllbGQgd2l0aCBhIFN0cnVjdHVyZWRFcnJvci5cbiAqL1xuY29uc3QgRVJST1JfRVZFTlRfVFlQRVMgPSBuZXcgU2V0KFsnc3RlcF9mYWlsZWQnLCAnc3RlcF9yZXRyeWluZyddKTtcblxuLyoqXG4gKiBFdmVudCB0eXBlcyB0aGF0IGNhcnJ5IHVzZXItc2VyaWFsaXplZCBkYXRhIGluIHRoZWlyIGV2ZW50RGF0YSBmaWVsZC5cbiAqL1xuY29uc3QgREFUQV9FVkVOVF9UWVBFUyA9IG5ldyBTZXQoW1xuICAnc3RlcF9jcmVhdGVkJyxcbiAgJ3N0ZXBfY29tcGxldGVkJyxcbiAgJ3N0ZXBfZmFpbGVkJyxcbiAgJ3N0ZXBfcmV0cnlpbmcnLFxuICAnaG9va19jcmVhdGVkJyxcbiAgJ2hvb2tfcmVjZWl2ZWQnLFxuICAncnVuX2NyZWF0ZWQnLFxuICAncnVuX2NvbXBsZXRlZCcsXG4gICdydW5fZmFpbGVkJyxcbiAgJ3dhaXRfY3JlYXRlZCcsXG4gICd3YWl0X2NvbXBsZXRlZCcsXG4gICdhdHRyX3NldCcsXG5dKTtcblxuY29uc3QgcGFyc2VEYXRlVmFsdWUgPSAodmFsdWU6IHVua25vd24pOiBEYXRlIHwgbnVsbCA9PiB7XG4gIGlmICh2YWx1ZSA9PSBudWxsKSByZXR1cm4gbnVsbDtcblxuICBjb25zdCBkYXRlID0gdmFsdWUgaW5zdGFuY2VvZiBEYXRlID8gdmFsdWUgOiBuZXcgRGF0ZShTdHJpbmcodmFsdWUpKTtcbiAgcmV0dXJuIE51bWJlci5pc05hTihkYXRlLmdldFRpbWUoKSkgPyBudWxsIDogZGF0ZTtcbn07XG5cbmNvbnN0IGdldEVmZmVjdGl2ZUV2ZW50RGF0ZSA9IChcbiAgZXZlbnQ6IFBpY2s8RXZlbnQsICdjcmVhdGVkQXQnIHwgJ29jY3VycmVkQXQnPlxuKTogRGF0ZSA9PiBwYXJzZURhdGVWYWx1ZShldmVudC5vY2N1cnJlZEF0KSA/PyBuZXcgRGF0ZShldmVudC5jcmVhdGVkQXQpO1xuXG5jb25zdCBmb3JtYXRFdmVudFRpbWVzdGFtcCA9IChkYXRlOiBEYXRlKTogc3RyaW5nID0+XG4gIGRhdGUudG9Mb2NhbGVTdHJpbmcodW5kZWZpbmVkLCB7XG4gICAgbW9udGg6ICdzaG9ydCcsXG4gICAgZGF5OiAnbnVtZXJpYycsXG4gICAgaG91cjogJ251bWVyaWMnLFxuICAgIG1pbnV0ZTogJ251bWVyaWMnLFxuICAgIHNlY29uZDogJ251bWVyaWMnLFxuICAgIGZyYWN0aW9uYWxTZWNvbmREaWdpdHM6IDMsXG4gICAgdGltZVpvbmVOYW1lOiAnc2hvcnQnLFxuICB9KTtcblxuLyoqXG4gKiBBIHNpbmdsZSBldmVudCByb3cgdGhhdCBjYW4gbGF6eS1sb2FkIGl0cyBldmVudERhdGEgd2hlbiBleHBhbmRlZC5cbiAqL1xuZnVuY3Rpb24gRXZlbnRJdGVtKHtcbiAgZXZlbnQsXG4gIG9uTG9hZEV2ZW50RGF0YSxcbiAgZW5jcnlwdGlvbktleSxcbiAgc2hvd1NlcGFyYXRlRXZlbnRPY2N1cnJlbmNlVGltZXN0YW1wcyA9IGZhbHNlLFxufToge1xuICBldmVudDogRXZlbnQ7XG4gIG9uTG9hZEV2ZW50RGF0YT86IChcbiAgICBjb3JyZWxhdGlvbklkOiBzdHJpbmcsXG4gICAgZXZlbnRJZDogc3RyaW5nXG4gICkgPT4gUHJvbWlzZTx1bmtub3duIHwgbnVsbD47XG4gIC8qKiBXaGVuIHRoaXMgY2hhbmdlcyAoZS5nLiwgRGVjcnlwdCB3YXMgY2xpY2tlZCksIGludmFsaWRhdGUgY2FjaGVkIGRhdGEgKi9cbiAgZW5jcnlwdGlvbktleT86IFVpbnQ4QXJyYXk7XG4gIC8qKiBTaG93IG9jY3VycmVkQXQgc2VwYXJhdGVseSBpbnN0ZWFkIG9mIGZvbGRpbmcgaXQgaW50byB0aGUgQ3JlYXRlZCB0aW1lc3RhbXAuICovXG4gIHNob3dTZXBhcmF0ZUV2ZW50T2NjdXJyZW5jZVRpbWVzdGFtcHM/OiBib29sZWFuO1xufSkge1xuICBjb25zdCBbbG9hZGVkRGF0YSwgc2V0TG9hZGVkRGF0YV0gPSB1c2VTdGF0ZTx1bmtub3duIHwgbnVsbD4obnVsbCk7XG4gIGNvbnN0IFtpc0xvYWRpbmcsIHNldElzTG9hZGluZ10gPSB1c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IFtsb2FkRXJyb3IsIHNldExvYWRFcnJvcl0gPSB1c2VTdGF0ZTxzdHJpbmcgfCBudWxsPihudWxsKTtcbiAgY29uc3Qgd2FzRXhwYW5kZWRSZWYgPSB1c2VSZWYoZmFsc2UpO1xuICAvKiogTWlycm9ycyB3aGV0aGVyIHdlIGhhdmUgYSBmZXRjaGVkIHBheWxvYWQ7IGF2b2lkcyBzdGFsZSBgbG9hZGVkRGF0YWAgaW4gbG9hZCBjbG9zdXJlLiAqL1xuICBjb25zdCBsb2FkZWREYXRhUmVmID0gdXNlUmVmPHVua25vd24gfCBudWxsPihudWxsKTtcblxuICAvLyBDaGVjayBpZiB0aGUgZXZlbnQgYWxyZWFkeSBoYXMgZXZlbnREYXRhIGZyb20gdGhlIHN0b3JlXG4gIGNvbnN0IGV4aXN0aW5nRGF0YSA9XG4gICAgJ2V2ZW50RGF0YScgaW4gZXZlbnQgJiYgZXZlbnQuZXZlbnREYXRhICE9IG51bGwgPyBldmVudC5ldmVudERhdGEgOiBudWxsO1xuICBjb25zdCBtZXJnZWREaXNwbGF5ID0gbG9hZGVkRGF0YSA/PyBleGlzdGluZ0RhdGE7XG4gIGNvbnN0IGNhbkhhdmVEYXRhID0gREFUQV9FVkVOVF9UWVBFUy5oYXMoZXZlbnQuZXZlbnRUeXBlKTtcblxuICBjb25zdCBsb2FkRXZlbnREYXRhID0gdXNlQ2FsbGJhY2soXG4gICAgYXN5bmMgKG9wdGlvbnM/OiB7IGZvcmNlPzogYm9vbGVhbiB9KSA9PiB7XG4gICAgICBpZiAoIW9uTG9hZEV2ZW50RGF0YSB8fCAhZXZlbnQuY29ycmVsYXRpb25JZCB8fCAhZXZlbnQuZXZlbnRJZCkgcmV0dXJuO1xuICAgICAgaWYgKCFvcHRpb25zPy5mb3JjZSAmJiBsb2FkZWREYXRhUmVmLmN1cnJlbnQgIT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB0cnkge1xuICAgICAgICBzZXRJc0xvYWRpbmcodHJ1ZSk7XG4gICAgICAgIHNldExvYWRFcnJvcihudWxsKTtcbiAgICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IG9uTG9hZEV2ZW50RGF0YShldmVudC5jb3JyZWxhdGlvbklkLCBldmVudC5ldmVudElkKTtcbiAgICAgICAgbG9hZGVkRGF0YVJlZi5jdXJyZW50ID0gZGF0YTtcbiAgICAgICAgc2V0TG9hZGVkRGF0YShkYXRhKTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBzZXRMb2FkRXJyb3IoZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIubWVzc2FnZSA6IFN0cmluZyhlcnIpKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHNldElzTG9hZGluZyhmYWxzZSk7XG4gICAgICB9XG4gICAgfSxcbiAgICBbb25Mb2FkRXZlbnREYXRhLCBldmVudC5jb3JyZWxhdGlvbklkLCBldmVudC5ldmVudElkXVxuICApO1xuXG4gIGNvbnN0IGhhbmRsZUV4cGFuZCA9IHVzZUNhbGxiYWNrKGFzeW5jICgpID0+IHtcbiAgICBpZiAoaXNMb2FkaW5nKSByZXR1cm47XG4gICAgd2FzRXhwYW5kZWRSZWYuY3VycmVudCA9IHRydWU7XG4gICAgYXdhaXQgbG9hZEV2ZW50RGF0YSgpO1xuICB9LCBbaXNMb2FkaW5nLCBsb2FkRXZlbnREYXRhXSk7XG5cbiAgLy8gV2hlbiB0aGUgZW5jcnlwdGlvbiBrZXkgY2hhbmdlcyBhbmQgdGhpcyBldmVudCB3YXMgcHJldmlvdXNseSBleHBhbmRlZCxcbiAgLy8gcmUtbG9hZCB0aGUgZGF0YSBzbyBpdCBnZXRzIGRlY3J5cHRlZFxuICB1c2VMYXlvdXRFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghZW5jcnlwdGlvbktleSB8fCAhd2FzRXhwYW5kZWRSZWYuY3VycmVudCkgcmV0dXJuO1xuICAgIGxvYWRlZERhdGFSZWYuY3VycmVudCA9IG51bGw7XG4gICAgc2V0TG9hZGVkRGF0YShudWxsKTtcbiAgICB2b2lkIGxvYWRFdmVudERhdGEoeyBmb3JjZTogdHJ1ZSB9KTtcbiAgfSwgW2VuY3J5cHRpb25LZXksIGxvYWRFdmVudERhdGFdKTtcblxuICBjb25zdCBjcmVhdGVkQXQgPSBuZXcgRGF0ZShldmVudC5jcmVhdGVkQXQpO1xuICBjb25zdCBvY2N1cnJlZEF0ID0gcGFyc2VEYXRlVmFsdWUoZXZlbnQub2NjdXJyZWRBdCk7XG4gIGNvbnN0IGRpc3BsYXllZENyZWF0ZWRBdCA9IHNob3dTZXBhcmF0ZUV2ZW50T2NjdXJyZW5jZVRpbWVzdGFtcHNcbiAgICA/IGNyZWF0ZWRBdFxuICAgIDogZ2V0RWZmZWN0aXZlRXZlbnREYXRlKGV2ZW50KTtcbiAgY29uc3QgZGlzcGxheWVkQ3JlYXRlZEF0VGltZSA9IGRpc3BsYXllZENyZWF0ZWRBdC50b0xvY2FsZVRpbWVTdHJpbmcoXG4gICAgdW5kZWZpbmVkLFxuICAgIHtcbiAgICAgIGhvdXI6ICdudW1lcmljJyxcbiAgICAgIG1pbnV0ZTogJ251bWVyaWMnLFxuICAgICAgc2Vjb25kOiAnbnVtZXJpYycsXG4gICAgfVxuICApO1xuXG4gIGNvbnN0IGRpc3BsYXlQYXlsb2FkID0gaXNMb2FkaW5nID8gbG9hZGVkRGF0YSA6IG1lcmdlZERpc3BsYXk7XG5cbiAgcmV0dXJuIChcbiAgICA8RGV0YWlsQ2FyZFxuICAgICAgdmFyaWFudD1cImNhcmRcIlxuICAgICAgc3VtbWFyeUNsYXNzTmFtZT1cInB4LTMgcHktMlwiXG4gICAgICBzdW1tYXJ5PXtcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IHctZnVsbCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuIGdhcC0zXCI+XG4gICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwidGV4dC1ncmF5LTEwMDAgdGV4dC1sYWJlbC0xMiBmb250LW1vbm9cIj5cbiAgICAgICAgICAgIHtldmVudC5ldmVudFR5cGV9XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInNocmluay0wIHRleHQtbGFiZWwtMTMgdGV4dC1ncmF5LTkwMFwiPlxuICAgICAgICAgICAge2Rpc3BsYXllZENyZWF0ZWRBdFRpbWV9XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIH1cbiAgICAgIG9uVG9nZ2xlPXtcbiAgICAgICAgY2FuSGF2ZURhdGFcbiAgICAgICAgICA/IChvcGVuKSA9PiB7XG4gICAgICAgICAgICAgIGlmIChvcGVuKSBoYW5kbGVFeHBhbmQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICA6IHVuZGVmaW5lZFxuICAgICAgfVxuICAgID5cbiAgICAgIHsvKiBFdmVudCBhdHRyaWJ1dGVzICovfVxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGZsZXgtY29sIGJnLWJhY2tncm91bmQtMjAwIFsmOmhhcygrXyopXTpib3JkZXItYiBbJjpoYXMoK18qKV06Ym9yZGVyLWdyYXktYWxwaGEtNDAwXCI+XG4gICAgICAgIHtzaG93U2VwYXJhdGVFdmVudE9jY3VycmVuY2VUaW1lc3RhbXBzICYmIG9jY3VycmVkQXQgJiYgKFxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuIGdhcC0yIHB5LTIgcHgtM1wiPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwidGV4dC1sYWJlbC0xMiB0ZXh0LWdyYXktOTAwXCI+T2NjdXJyZWQ8L3NwYW4+XG4gICAgICAgICAgICA8VGltZXN0YW1wVG9vbHRpcCBkYXRlPXtvY2N1cnJlZEF0fT5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwibWF4LXctWzcwJV0gdHJ1bmNhdGUgdGV4dC1yaWdodCB0ZXh0LWxhYmVsLTEyIGZvbnQtbW9ub1wiPlxuICAgICAgICAgICAgICAgIHtmb3JtYXRFdmVudFRpbWVzdGFtcChvY2N1cnJlZEF0KX1cbiAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPC9UaW1lc3RhbXBUb29sdGlwPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICApfVxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiBnYXAtMiBweS0yIHB4LTNcIj5cbiAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LWxhYmVsLTEyIHRleHQtZ3JheS05MDBcIj5FdmVudCBJRDwvc3Bhbj5cbiAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJtYXgtdy1bNzAlXSB0cnVuY2F0ZSB0ZXh0LXJpZ2h0IHRleHQtbGFiZWwtMTIgZm9udC1tb25vXCI+XG4gICAgICAgICAgICB7ZXZlbnQuZXZlbnRJZH1cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICB7ZXZlbnQuY29ycmVsYXRpb25JZCAmJiAoXG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gZ2FwLTIgcHktMiBweC0zXCI+XG4gICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LWxhYmVsLTEyIHRleHQtZ3JheS05MDBcIj5Db3JyZWxhdGlvbiBJRDwvc3Bhbj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cIm1heC13LVs3MCVdIHRydW5jYXRlIHRleHQtcmlnaHQgdGV4dC1sYWJlbC0xMiBmb250LW1vbm9cIj5cbiAgICAgICAgICAgICAge2V2ZW50LmNvcnJlbGF0aW9uSWR9XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICl9XG4gICAgICA8L2Rpdj5cblxuICAgICAgey8qIExvYWRpbmcgc3RhdGUgKi99XG4gICAgICB7aXNMb2FkaW5nICYmIChcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJwLTNcIj5cbiAgICAgICAgICA8U2tlbGV0b24gY2xhc3NOYW1lPVwiaC00IHctWzM1JV1cIiAvPlxuICAgICAgICAgIDxTa2VsZXRvbiBjbGFzc05hbWU9XCJtdC0yIGgtNCB3LVs5MCVdXCIgLz5cbiAgICAgICAgICA8U2tlbGV0b24gY2xhc3NOYW1lPVwibXQtMiBoLTQgdy1bNzUlXVwiIC8+XG4gICAgICAgIDwvZGl2PlxuICAgICAgKX1cblxuICAgICAgey8qIEVycm9yIHN0YXRlICovfVxuICAgICAge2xvYWRFcnJvciAmJiAoXG4gICAgICAgIDxFcnJvckNhcmRcbiAgICAgICAgICB0aXRsZT1cIkZhaWxlZCB0byBsb2FkIGV2ZW50IGRhdGFcIlxuICAgICAgICAgIGRldGFpbHM9e2xvYWRFcnJvcn1cbiAgICAgICAgICBjbGFzc05hbWU9XCJtdC0yXCJcbiAgICAgICAgLz5cbiAgICAgICl9XG5cbiAgICAgIHsvKiBFdmVudCBkYXRhICovfVxuICAgICAge2Rpc3BsYXlQYXlsb2FkICE9IG51bGwgJiYgKFxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIlsmPmRpdl06Ym9yZGVyLW5vbmUgWyY+ZGl2XTpyb3VuZGVkLW5vbmVcIj5cbiAgICAgICAgICA8RXZlbnREYXRhQmxvY2sgZXZlbnRUeXBlPXtldmVudC5ldmVudFR5cGV9IGRhdGE9e2Rpc3BsYXlQYXlsb2FkfSAvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICl9XG4gICAgPC9EZXRhaWxDYXJkPlxuICApO1xufVxuXG4vKipcbiAqIENoZWNrIGlmIGFuIGV2ZW50RGF0YSBvYmplY3QgaGFzIG9ubHkgZXhwaXJlZCBtYXJrZXIgdmFsdWVzIGluIHJlZi9wYXlsb2FkXG4gKiBmaWVsZHMgZm9yIHRoaXMgZXZlbnQgdHlwZSAoc2VlIHtAbGluayBFVkVOVF9EQVRBX1JFRl9GSUVMRFN9KS4gT3RoZXIga2V5c1xuICogKGUuZy4gYHJlc3VtZUF0YCwgYHN0ZXBOYW1lYCkgYXJlIGlnbm9yZWQuXG4gKi9cbmZ1bmN0aW9uIGhhc09ubHlFeHBpcmVkRmllbGRzKGRhdGE6IHVua25vd24sIGV2ZW50VHlwZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gIGlmIChkYXRhID09PSBudWxsIHx8IHR5cGVvZiBkYXRhICE9PSAnb2JqZWN0JyB8fCBBcnJheS5pc0FycmF5KGRhdGEpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGNvbnN0IHJlY29yZCA9IGRhdGEgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIGNvbnN0IHJlZktleXMgPSBFVkVOVF9EQVRBX1JFRl9GSUVMRFNbZXZlbnRUeXBlXSA/PyBbXTtcbiAgY29uc3QgcHJlc2VudEtleXMgPSByZWZLZXlzLmZpbHRlcigoaykgPT4gayBpbiByZWNvcmQpO1xuICByZXR1cm4gKFxuICAgIHByZXNlbnRLZXlzLmxlbmd0aCA+IDAgJiZcbiAgICBwcmVzZW50S2V5cy5ldmVyeSgoaykgPT4gaXNFeHBpcmVkTWFya2VyKHJlY29yZFtrXSkpXG4gICk7XG59XG5cbi8qKlxuICogUmVuZGVycyBldmVudCBkYXRhLCB1c2luZyBFcnJvclN0YWNrQmxvY2sgZm9yIGVycm9yIGV2ZW50cyB0aGF0IGNvbnRhaW4gYVxuICogc3RydWN0dXJlZCBlcnJvciwgYW5kIENvcHlhYmxlRGF0YUJsb2NrIG90aGVyd2lzZS5cbiAqL1xuZnVuY3Rpb24gRXZlbnREYXRhQmxvY2soe1xuICBldmVudFR5cGUsXG4gIGRhdGEsXG59OiB7XG4gIGV2ZW50VHlwZTogc3RyaW5nO1xuICBkYXRhOiB1bmtub3duO1xufSkge1xuICAvLyBFeHBpcmVkIGRhdGEg4oCUIHNob3cgYSBzaW1wbGUgbWVzc2FnZSBpbnN0ZWFkIG9mIHRoZSByYXcgc3R1Yi5cbiAgLy8gQ2hlY2sgYm90aCB0aGUgdG9wLWxldmVsIGV2ZW50RGF0YSBhbmQgbmVzdGVkIHN1Yi1maWVsZHMgKHJlc3VsdCwgaW5wdXQsIGV0Yy4pXG4gIC8vIHNpbmNlIHRoZSBzZXJ2ZXIgc3R1YnMgZWFjaCByZWYgZmllbGQgaW5kZXBlbmRlbnRseS5cbiAgaWYgKGlzRXhwaXJlZE1hcmtlcihkYXRhKSB8fCBoYXNPbmx5RXhwaXJlZEZpZWxkcyhkYXRhLCBldmVudFR5cGUpKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTEuNSByb3VuZGVkLW1kIGJvcmRlciBweC0zIHB5LTIgdGV4dC14c1wiXG4gICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgYm9yZGVyQ29sb3I6ICd2YXIoLS1kcy1ncmF5LTMwMCknLFxuICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogJ3ZhcigtLWRzLWdyYXktMTAwKScsXG4gICAgICAgICAgY29sb3I6ICd2YXIoLS1kcy1ncmF5LTcwMCknLFxuICAgICAgICB9fVxuICAgICAgPlxuICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJmb250LW1lZGl1bVwiPkRhdGEgZXhwaXJlZDwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cblxuICBpZiAoaGFzRW5jcnlwdGVkRmllbGRzKHsgZXZlbnRUeXBlLCBldmVudERhdGE6IGRhdGEgfSkpIHtcbiAgICByZXR1cm4gPEVuY3J5cHRlZERhdGFCbG9jayAvPjtcbiAgfVxuXG4gIC8vIEF0dHJpYnV0ZSBjaGFuZ2VzIOKAlCByZW5kZXIgdGhlIGNoYW5nZWQga2V5cyBhbmQgdGhlIHdyaXRlciBpbnN0ZWFkIG9mXG4gIC8vIHRoZSByYXcgSlNPTiBwYXlsb2FkLlxuICBpZiAoZXZlbnRUeXBlID09PSAnYXR0cl9zZXQnKSB7XG4gICAgcmV0dXJuIDxBdHRyU2V0RXZlbnRCbG9jayBkYXRhPXtkYXRhfSAvPjtcbiAgfVxuXG4gIC8vIEZvciBlcnJvciBldmVudHMgKHN0ZXBfZmFpbGVkLCBzdGVwX3JldHJ5aW5nKSwgdGhlIGV2ZW50RGF0YSBoYXMgdGhlIHNoYXBlXG4gIC8vIHsgZXJyb3I6IFN0cnVjdHVyZWRFcnJvciwgc3RhY2s/OiBzdHJpbmcsIC4uLiB9LiBDaGVjayBib3RoIHRoZSB0b3AtbGV2ZWxcbiAgLy8gdmFsdWUgYW5kIHRoZSBuZXN0ZWQgYGVycm9yYCBmaWVsZCBmb3IgYSBzdGFjayB0cmFjZS5cbiAgaWYgKFxuICAgIEVSUk9SX0VWRU5UX1RZUEVTLmhhcyhldmVudFR5cGUpICYmXG4gICAgZGF0YSAhPSBudWxsICYmXG4gICAgdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnXG4gICkge1xuICAgIGNvbnN0IHJlY29yZCA9IGRhdGEgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG5cbiAgICAvLyBDaGVjayB0aGUgbmVzdGVkIGBlcnJvcmAgZmllbGQgZmlyc3QgKHRoZSBTdHJ1Y3R1cmVkRXJyb3IpXG4gICAgaWYgKGlzU3RydWN0dXJlZEVycm9yKHJlY29yZC5lcnJvcikpIHtcbiAgICAgIHJldHVybiA8RXJyb3JTdGFja0Jsb2NrIHZhbHVlPXtyZWNvcmQuZXJyb3J9IC8+O1xuICAgIH1cblxuICAgIC8vIFNvbWUgZXJyb3IgZm9ybWF0cyBwdXQgdGhlIG1lc3NhZ2Uvc3RhY2sgYXQgdGhlIHRvcCBsZXZlbCBvZiBldmVudERhdGEuXG4gICAgaWYgKGlzU3RydWN0dXJlZEVycm9yKHJlY29yZCkpIHtcbiAgICAgIHJldHVybiA8RXJyb3JTdGFja0Jsb2NrIHZhbHVlPXtyZWNvcmR9IC8+O1xuICAgIH1cbiAgfVxuXG4gIC8vIEZvciBub24tZXJyb3IgZXZlbnRzIG9yIGVycm9ycyB3aXRob3V0IGEgc3RhY2ssIGZhbGwgYmFjayB0byB0aGVcbiAgLy8gZ2VuZXJpYyBKU09OIHZpZXdlci5cbiAgcmV0dXJuIDxDb3B5YWJsZURhdGFCbG9jayBkYXRhPXtkYXRhfSAvPjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIEV2ZW50c0xpc3Qoe1xuICBldmVudHMsXG4gIGlzTG9hZGluZyA9IGZhbHNlLFxuICBlcnJvcixcbiAgb25Mb2FkRXZlbnREYXRhLFxuICBvblN0cmVhbUNsaWNrLFxuICBvblJ1bkNsaWNrLFxuICBlbmNyeXB0aW9uS2V5LFxuICBzaG93U2VwYXJhdGVFdmVudE9jY3VycmVuY2VUaW1lc3RhbXBzID0gZmFsc2UsXG59OiB7XG4gIGV2ZW50czogRXZlbnRbXTtcbiAgaXNMb2FkaW5nPzogYm9vbGVhbjtcbiAgZXJyb3I/OiBFcnJvciB8IG51bGw7XG4gIG9uTG9hZEV2ZW50RGF0YT86IChcbiAgICBjb3JyZWxhdGlvbklkOiBzdHJpbmcsXG4gICAgZXZlbnRJZDogc3RyaW5nXG4gICkgPT4gUHJvbWlzZTx1bmtub3duIHwgbnVsbD47XG4gIG9uU3RyZWFtQ2xpY2s/OiAoc3RyZWFtSWQ6IHN0cmluZykgPT4gdm9pZDtcbiAgb25SdW5DbGljaz86IChydW5JZDogc3RyaW5nKSA9PiB2b2lkO1xuICAvKiogV2hlbiBwcm92aWRlZCwgc2lnbmFscyB0aGF0IGRlY3J5cHRpb24gaXMgYWN0aXZlICh0cmlnZ2VycyByZS1sb2FkIG9mIGV4cGFuZGVkIGV2ZW50cykgKi9cbiAgZW5jcnlwdGlvbktleT86IFVpbnQ4QXJyYXk7XG4gIC8qKiBTaG93IG9jY3VycmVkQXQgc2VwYXJhdGVseSBpbnN0ZWFkIG9mIGZvbGRpbmcgaXQgaW50byB0aGUgQ3JlYXRlZCB0aW1lc3RhbXAuICovXG4gIHNob3dTZXBhcmF0ZUV2ZW50T2NjdXJyZW5jZVRpbWVzdGFtcHM/OiBib29sZWFuO1xufSkge1xuICAvLyBTb3J0IGJ5IHRoZSB0aW1lc3RhbXAgc2hvd24gYXMgQ3JlYXRlZCBieSBkZWZhdWx0LlxuICBjb25zdCBzb3J0ZWRFdmVudHMgPSB1c2VNZW1vKFxuICAgICgpID0+XG4gICAgICBbLi4uZXZlbnRzXS5zb3J0KFxuICAgICAgICAoYSwgYikgPT5cbiAgICAgICAgICBnZXRFZmZlY3RpdmVFdmVudERhdGUoYSkuZ2V0VGltZSgpIC1cbiAgICAgICAgICBnZXRFZmZlY3RpdmVFdmVudERhdGUoYikuZ2V0VGltZSgpXG4gICAgICApLFxuICAgIFtldmVudHNdXG4gICk7XG5cbiAgY29uc3QgaGFzRXZlbnRzID0gc29ydGVkRXZlbnRzLmxlbmd0aCA+IDAgJiYgIWVycm9yO1xuXG4gIGlmICghaGFzRXZlbnRzICYmICFpc0xvYWRpbmcpIHtcbiAgICByZXR1cm4gPERldGFpbENhcmQgc3VtbWFyeT1cIkV2ZW50c1wiIGRpc2FibGVkIC8+O1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8UnVuQ2xpY2tDb250ZXh0LlByb3ZpZGVyIHZhbHVlPXtvblJ1bkNsaWNrfT5cbiAgICAgIDxTdHJlYW1DbGlja0NvbnRleHQuUHJvdmlkZXIgdmFsdWU9e29uU3RyZWFtQ2xpY2t9PlxuICAgICAgICA8RGV0YWlsQ2FyZCBzdW1tYXJ5PVwiRXZlbnRzXCIgY29udGVudENsYXNzTmFtZT1cIm1iLTBcIiBkZWZhdWx0T3Blbj5cbiAgICAgICAgICB7aXNMb2FkaW5nID8gKFxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGZsZXgtY29sIC1teC00XCI+XG4gICAgICAgICAgICAgIHtbMCwgMSwgMl0ubWFwKChpKSA9PiAoXG4gICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAga2V5PXtpfVxuICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuIGdhcC0zIGJnLWJhY2tncm91bmQtMjAwIHB4LTQgcHktMlwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPFNrZWxldG9uIGNsYXNzTmFtZT1cImgtNCB3LTMyIHJvdW5kZWRcIiAvPlxuICAgICAgICAgICAgICAgICAgPFNrZWxldG9uIGNsYXNzTmFtZT1cImgtMyB3LTE2IHJvdW5kZWRcIiAvPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggZmxleC1jb2wgLW14LTRcIj5cbiAgICAgICAgICAgICAge3NvcnRlZEV2ZW50cy5tYXAoKGV2ZW50KSA9PiAoXG4gICAgICAgICAgICAgICAgPEV2ZW50SXRlbVxuICAgICAgICAgICAgICAgICAga2V5PXtldmVudC5ldmVudElkfVxuICAgICAgICAgICAgICAgICAgZXZlbnQ9e2V2ZW50fVxuICAgICAgICAgICAgICAgICAgb25Mb2FkRXZlbnREYXRhPXtvbkxvYWRFdmVudERhdGF9XG4gICAgICAgICAgICAgICAgICBlbmNyeXB0aW9uS2V5PXtlbmNyeXB0aW9uS2V5fVxuICAgICAgICAgICAgICAgICAgc2hvd1NlcGFyYXRlRXZlbnRPY2N1cnJlbmNlVGltZXN0YW1wcz17XG4gICAgICAgICAgICAgICAgICAgIHNob3dTZXBhcmF0ZUV2ZW50T2NjdXJyZW5jZVRpbWVzdGFtcHNcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICl9XG4gICAgICAgIDwvRGV0YWlsQ2FyZD5cbiAgICAgIDwvU3RyZWFtQ2xpY2tDb250ZXh0LlByb3ZpZGVyPlxuICAgIDwvUnVuQ2xpY2tDb250ZXh0LlByb3ZpZGVyPlxuICApO1xufVxuIl19
|
|
@@ -1,13 +1,10 @@
|
|
|
1
|
+
import type { Event, Hook, WorkflowRun } from '@workflow/world';
|
|
1
2
|
import { type ReactNode } from 'react';
|
|
2
|
-
import type {
|
|
3
|
-
import type { SpanSelectionInfo } from './entity-detail-panel';
|
|
3
|
+
import type { FetchSpanDetail } from './use-selected-span-detail';
|
|
4
4
|
export interface SidebarDataContextValue {
|
|
5
5
|
run: WorkflowRun;
|
|
6
6
|
events: Event[];
|
|
7
|
-
|
|
8
|
-
spanDetailError?: Error | null;
|
|
9
|
-
spanDetailLoading?: boolean;
|
|
10
|
-
onSpanSelect: (info: SpanSelectionInfo) => void;
|
|
7
|
+
fetchSpanDetail: FetchSpanDetail;
|
|
11
8
|
onStreamClick?: (streamId: string) => void;
|
|
12
9
|
onRunClick?: (runId: string) => void;
|
|
13
10
|
onWakeUpSleep?: (runId: string, correlationId: string) => Promise<{
|
|
@@ -19,6 +16,8 @@ export interface SidebarDataContextValue {
|
|
|
19
16
|
onDecrypt?: () => void;
|
|
20
17
|
isDecrypting?: boolean;
|
|
21
18
|
hasEncryptedData?: boolean;
|
|
19
|
+
/** Show occurredAt separately instead of folding it into the Created timestamp. */
|
|
20
|
+
showSeparateEventOccurrenceTimestamps?: boolean;
|
|
22
21
|
}
|
|
23
22
|
export declare function SidebarDataProvider({ value, children, }: {
|
|
24
23
|
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,
|
|
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"}
|
|
@@ -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,
|
|
19
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lkZWJhci1kYXRhLWNvbnRleHQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29tcG9uZW50cy9zaWRlYmFyL3NpZGViYXItZGF0YS1jb250ZXh0LnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZLENBQUM7O0FBR2IsT0FBTyxFQUFFLGFBQWEsRUFBa0IsVUFBVSxFQUFFLE1BQU0sT0FBTyxDQUFDO0FBOEJsRSxNQUFNLGtCQUFrQixHQUFHLGFBQWEsQ0FBaUMsSUFBSSxDQUFDLENBQUM7QUFDL0Usa0JBQWtCLENBQUMsV0FBVyxHQUFHLG9CQUFvQixDQUFDO0FBRXRELE1BQU0sVUFBVSxtQkFBbUIsQ0FBQyxFQUNsQyxLQUFLLEVBQ0wsUUFBUSxHQUlUO0lBQ0MsT0FBTyxDQUNMLEtBQUMsa0JBQWtCLENBQUMsUUFBUSxJQUFDLEtBQUssRUFBRSxLQUFLLFlBQ3RDLFFBQVEsR0FDbUIsQ0FDL0IsQ0FBQztBQUNKLENBQUM7QUFFRCxNQUFNLFVBQVUsY0FBYztJQUM1QixNQUFNLEdBQUcsR0FBRyxVQUFVLENBQUMsa0JBQWtCLENBQUMsQ0FBQztJQUMzQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDVCxNQUFNLElBQUksS0FBSyxDQUFDLDBEQUEwRCxDQUFDLENBQUM7SUFDOUUsQ0FBQztJQUNELE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUVELE1BQU0sVUFBVSxzQkFBc0I7SUFDcEMsT0FBTyxVQUFVLENBQUMsa0JBQWtCLENBQUMsQ0FBQztBQUN4QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgdHlwZSB7IEV2ZW50LCBIb29rLCBXb3JrZmxvd1J1biB9IGZyb20gJ0B3b3JrZmxvdy93b3JsZCc7XG5pbXBvcnQgeyBjcmVhdGVDb250ZXh0LCB0eXBlIFJlYWN0Tm9kZSwgdXNlQ29udGV4dCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB0eXBlIHsgRmV0Y2hTcGFuRGV0YWlsIH0gZnJvbSAnLi91c2Utc2VsZWN0ZWQtc3Bhbi1kZXRhaWwnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFNpZGViYXJEYXRhQ29udGV4dFZhbHVlIHtcbiAgcnVuOiBXb3JrZmxvd1J1bjtcbiAgZXZlbnRzOiBFdmVudFtdO1xuICBmZXRjaFNwYW5EZXRhaWw6IEZldGNoU3BhbkRldGFpbDtcbiAgb25TdHJlYW1DbGljaz86IChzdHJlYW1JZDogc3RyaW5nKSA9PiB2b2lkO1xuICBvblJ1bkNsaWNrPzogKHJ1bklkOiBzdHJpbmcpID0+IHZvaWQ7XG4gIG9uV2FrZVVwU2xlZXA/OiAoXG4gICAgcnVuSWQ6IHN0cmluZyxcbiAgICBjb3JyZWxhdGlvbklkOiBzdHJpbmdcbiAgKSA9PiBQcm9taXNlPHsgc3RvcHBlZENvdW50OiBudW1iZXIgfT47XG4gIG9uTG9hZEV2ZW50RGF0YT86IChcbiAgICBjb3JyZWxhdGlvbklkOiBzdHJpbmcsXG4gICAgZXZlbnRJZDogc3RyaW5nXG4gICkgPT4gUHJvbWlzZTx1bmtub3duIHwgbnVsbD47XG4gIG9uUmVzb2x2ZUhvb2s/OiAoXG4gICAgaG9va1Rva2VuOiBzdHJpbmcsXG4gICAgcGF5bG9hZDogdW5rbm93bixcbiAgICBob29rPzogSG9va1xuICApID0+IFByb21pc2U8dm9pZD47XG4gIGVuY3J5cHRpb25LZXk/OiBVaW50OEFycmF5O1xuICBvbkRlY3J5cHQ/OiAoKSA9PiB2b2lkO1xuICBpc0RlY3J5cHRpbmc/OiBib29sZWFuO1xuICBoYXNFbmNyeXB0ZWREYXRhPzogYm9vbGVhbjtcbiAgLyoqIFNob3cgb2NjdXJyZWRBdCBzZXBhcmF0ZWx5IGluc3RlYWQgb2YgZm9sZGluZyBpdCBpbnRvIHRoZSBDcmVhdGVkIHRpbWVzdGFtcC4gKi9cbiAgc2hvd1NlcGFyYXRlRXZlbnRPY2N1cnJlbmNlVGltZXN0YW1wcz86IGJvb2xlYW47XG59XG5cbmNvbnN0IFNpZGViYXJEYXRhQ29udGV4dCA9IGNyZWF0ZUNvbnRleHQ8U2lkZWJhckRhdGFDb250ZXh0VmFsdWUgfCBudWxsPihudWxsKTtcblNpZGViYXJEYXRhQ29udGV4dC5kaXNwbGF5TmFtZSA9ICdTaWRlYmFyRGF0YUNvbnRleHQnO1xuXG5leHBvcnQgZnVuY3Rpb24gU2lkZWJhckRhdGFQcm92aWRlcih7XG4gIHZhbHVlLFxuICBjaGlsZHJlbixcbn06IHtcbiAgdmFsdWU6IFNpZGViYXJEYXRhQ29udGV4dFZhbHVlO1xuICBjaGlsZHJlbjogUmVhY3ROb2RlO1xufSkge1xuICByZXR1cm4gKFxuICAgIDxTaWRlYmFyRGF0YUNvbnRleHQuUHJvdmlkZXIgdmFsdWU9e3ZhbHVlfT5cbiAgICAgIHtjaGlsZHJlbn1cbiAgICA8L1NpZGViYXJEYXRhQ29udGV4dC5Qcm92aWRlcj5cbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVzZVNpZGViYXJEYXRhKCk6IFNpZGViYXJEYXRhQ29udGV4dFZhbHVlIHtcbiAgY29uc3QgY3R4ID0gdXNlQ29udGV4dChTaWRlYmFyRGF0YUNvbnRleHQpO1xuICBpZiAoIWN0eCkge1xuICAgIHRocm93IG5ldyBFcnJvcigndXNlU2lkZWJhckRhdGEgbXVzdCBiZSB1c2VkIHdpdGhpbiBhIFNpZGViYXJEYXRhUHJvdmlkZXInKTtcbiAgfVxuICByZXR1cm4gY3R4O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdXNlU2lkZWJhckRhdGFPcHRpb25hbCgpOiBTaWRlYmFyRGF0YUNvbnRleHRWYWx1ZSB8IG51bGwge1xuICByZXR1cm4gdXNlQ29udGV4dChTaWRlYmFyRGF0YUNvbnRleHQpO1xufVxuIl19
|
|
@@ -1,3 +1,18 @@
|
|
|
1
|
+
export declare function resourceNeedsFetchedDetail(resource: string | undefined): boolean;
|
|
2
|
+
export type SpanDetailStatus = 'idle' | 'loading' | 'ready' | 'error';
|
|
3
|
+
export interface SpanDetailView {
|
|
4
|
+
status: SpanDetailStatus;
|
|
5
|
+
displayData: Record<string, unknown>;
|
|
6
|
+
detail: unknown;
|
|
7
|
+
error: Error | undefined;
|
|
8
|
+
}
|
|
9
|
+
export declare function deriveSpanDetailView(args: {
|
|
10
|
+
resource: string | undefined;
|
|
11
|
+
resourceId: string | undefined;
|
|
12
|
+
inlineData: unknown;
|
|
13
|
+
fetchedDetail: unknown;
|
|
14
|
+
fetchedError: Error | null;
|
|
15
|
+
}): SpanDetailView;
|
|
1
16
|
/**
|
|
2
17
|
* Returns true when the fetched `detail` belongs to the current selection.
|
|
3
18
|
* The fetch lags selection, so it can briefly hold a previously selected span
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"span-detail-merge.d.ts","sourceRoot":"","sources":["../../../src/components/sidebar/span-detail-merge.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"span-detail-merge.d.ts","sourceRoot":"","sources":["../../../src/components/sidebar/span-detail-merge.ts"],"names":[],"mappings":"AAOA,wBAAgB,0BAA0B,CACxC,QAAQ,EAAE,MAAM,GAAG,SAAS,GAC3B,OAAO,CAET;AAED,MAAM,MAAM,gBAAgB,GAAG,MAAM,GAAG,SAAS,GAAG,OAAO,GAAG,OAAO,CAAC;AAEtE,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,gBAAgB,CAAC;IACzB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACrC,MAAM,EAAE,OAAO,CAAC;IAChB,KAAK,EAAE,KAAK,GAAG,SAAS,CAAC;CAC1B;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE;IACzC,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,UAAU,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,UAAU,EAAE,OAAO,CAAC;IACpB,aAAa,EAAE,OAAO,CAAC;IACvB,YAAY,EAAE,KAAK,GAAG,IAAI,CAAC;CAC5B,GAAG,cAAc,CA4CjB;AAED;;;;;;GAMG;AACH,wBAAgB,0BAA0B,CACxC,MAAM,EAAE,OAAO,EACf,QAAQ,EAAE,MAAM,GAAG,SAAS,EAC5B,UAAU,EAAE,MAAM,GAAG,SAAS,GAC7B,OAAO,CAsBT;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,GAAG,OAAO,CAkB3E"}
|