@firestitch/report 18.10.1 → 18.11.0
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/app/reports/components/component-text/component-text.component.d.ts +1 -0
- package/app/reports/components/component-text/value-embed.plugin.d.ts +25 -1
- package/app/reports/components/report-canvas/report-canvas.component.d.ts +12 -1
- package/app/reports/components/report-component/report-component.component.d.ts +1 -0
- package/app/reports/data/report.data.d.ts +9 -13
- package/app/reports/dialogs/component-settings/component-settings.component.d.ts +13 -1
- package/app/reports/export/report-export-collector.service.d.ts +13 -6
- package/app/reports/export/report-filter-lines.d.ts +3 -2
- package/app/reports/filter-text.d.ts +8 -0
- package/app/reports/format.d.ts +1 -0
- package/app/reports/interfaces/report-chat-viewer-state.interface.d.ts +0 -2
- package/app/reports/interfaces/report-export-lines-input.interface.d.ts +1 -0
- package/app/reports/interfaces/report-export-snapshot.interface.d.ts +2 -3
- package/app/reports/interfaces/report-saved-filter-changes.interface.d.ts +4 -0
- package/app/reports/interfaces/report-saved-filter.interface.d.ts +6 -0
- package/app/reports/interfaces/{report-view-config.interface.d.ts → report-state-snapshot.interface.d.ts} +1 -2
- package/app/reports/interfaces/report-viewer-feature.type.d.ts +1 -1
- package/app/reports/report-chat-viewer-state.d.ts +3 -3
- package/app/reports/report-filter-items.d.ts +9 -0
- package/app/reports/report-saved-filters.d.ts +3 -0
- package/app/reports/report-state.d.ts +15 -0
- package/app/reports/services/report-filter-state.service.d.ts +9 -25
- package/app/reports/text.d.ts +16 -0
- package/app/reports/tile-data-state.d.ts +5 -5
- package/app/reports/views/report/fs-ai-report.component.d.ts +10 -5
- package/esm2022/app/reports/canvas-landing-page.mjs +3 -3
- package/esm2022/app/reports/components/component-list/component-list.component.mjs +3 -3
- package/esm2022/app/reports/components/component-text/component-text.component.mjs +34 -22
- package/esm2022/app/reports/components/component-text/value-embed.plugin.mjs +254 -42
- package/esm2022/app/reports/components/report-canvas/report-canvas.component.mjs +124 -23
- package/esm2022/app/reports/components/report-component/report-component.component.mjs +45 -31
- package/esm2022/app/reports/data/report.data.mjs +33 -45
- package/esm2022/app/reports/dialogs/component-settings/component-settings.component.mjs +57 -14
- package/esm2022/app/reports/export/report-export-collector.service.mjs +93 -49
- package/esm2022/app/reports/export/report-filter-lines.mjs +28 -21
- package/esm2022/app/reports/export/report-pdf.service.mjs +31 -21
- package/esm2022/app/reports/export/report-pptx.service.mjs +21 -11
- package/esm2022/app/reports/filter-settings-rules.mjs +2 -2
- package/esm2022/app/reports/filter-text.mjs +154 -0
- package/esm2022/app/reports/format.mjs +3 -2
- package/esm2022/app/reports/interfaces/canvas-landing-input.interface.mjs +1 -1
- package/esm2022/app/reports/interfaces/report-chat-viewer-state.interface.mjs +1 -1
- package/esm2022/app/reports/interfaces/report-export-lines-input.interface.mjs +1 -1
- package/esm2022/app/reports/interfaces/report-export-snapshot.interface.mjs +1 -1
- package/esm2022/app/reports/interfaces/report-saved-filter-changes.interface.mjs +2 -0
- package/esm2022/app/reports/interfaces/report-saved-filter.interface.mjs +2 -0
- package/esm2022/app/reports/interfaces/report-state-snapshot.interface.mjs +2 -0
- package/esm2022/app/reports/interfaces/report-temporary-state.interface.mjs +1 -1
- package/esm2022/app/reports/interfaces/report-tile-state.interface.mjs +1 -1
- package/esm2022/app/reports/interfaces/report-viewer-feature.type.mjs +1 -1
- package/esm2022/app/reports/interfaces/report.interface.mjs +1 -1
- package/esm2022/app/reports/mark-click.mjs +2 -2
- package/esm2022/app/reports/report-chat-viewer-state.mjs +3 -3
- package/esm2022/app/reports/report-date-presets.mjs +2 -2
- package/esm2022/app/reports/report-filter-items.mjs +24 -2
- package/esm2022/app/reports/report-saved-filters.mjs +92 -0
- package/esm2022/app/reports/report-state.mjs +169 -0
- package/esm2022/app/reports/report-viewer-features.mjs +2 -4
- package/esm2022/app/reports/services/report-filter-state.service.mjs +83 -310
- package/esm2022/app/reports/text.mjs +59 -13
- package/esm2022/app/reports/tile-data-state.mjs +4 -4
- package/esm2022/app/reports/tile-loads.mjs +5 -6
- package/esm2022/app/reports/views/report/fs-ai-report.component.mjs +172 -98
- package/esm2022/app/reports/views/report/report.component.mjs +23 -22
- package/esm2022/public_api.mjs +4 -8
- package/fesm2022/{firestitch-report-echarts-DHEH_K_q.mjs → firestitch-report-echarts-DKXlgu1D.mjs} +2 -2
- package/fesm2022/{firestitch-report-echarts-DHEH_K_q.mjs.map → firestitch-report-echarts-DKXlgu1D.mjs.map} +1 -1
- package/fesm2022/{firestitch-report-firestitch-report-ZcHTnNKq.mjs → firestitch-report-firestitch-report-Bnv62suw.mjs} +2523 -2814
- package/fesm2022/firestitch-report-firestitch-report-Bnv62suw.mjs.map +1 -0
- package/fesm2022/firestitch-report.mjs +1 -1
- package/package.json +1 -1
- package/public_api.d.ts +3 -7
- package/app/reports/components/report-view-picker/report-view-picker.component.d.ts +0 -21
- package/app/reports/dialogs/report-view/report-view-dialog.component.d.ts +0 -13
- package/app/reports/interfaces/report-view-create.interface.d.ts +0 -7
- package/app/reports/interfaces/report-view-deleted.interface.d.ts +0 -4
- package/app/reports/interfaces/report-view-dialog-data.interface.d.ts +0 -7
- package/app/reports/interfaces/report-view-dropped.interface.d.ts +0 -5
- package/app/reports/interfaces/report-view-menu-item.interface.d.ts +0 -10
- package/app/reports/interfaces/report-view-summary.interface.d.ts +0 -11
- package/app/reports/interfaces/report-view.interface.d.ts +0 -7
- package/app/reports/interfaces/report-views.interface.d.ts +0 -7
- package/app/reports/report-view-config.d.ts +0 -34
- package/app/reports/report-view-menu.d.ts +0 -15
- package/app/reports/services/report-view.service.d.ts +0 -39
- package/esm2022/app/reports/components/report-view-picker/report-view-picker.component.mjs +0 -115
- package/esm2022/app/reports/dialogs/report-view/report-view-dialog.component.mjs +0 -52
- package/esm2022/app/reports/interfaces/report-view-config.interface.mjs +0 -2
- package/esm2022/app/reports/interfaces/report-view-create.interface.mjs +0 -2
- package/esm2022/app/reports/interfaces/report-view-deleted.interface.mjs +0 -2
- package/esm2022/app/reports/interfaces/report-view-dialog-data.interface.mjs +0 -2
- package/esm2022/app/reports/interfaces/report-view-dropped.interface.mjs +0 -2
- package/esm2022/app/reports/interfaces/report-view-menu-item.interface.mjs +0 -2
- package/esm2022/app/reports/interfaces/report-view-summary.interface.mjs +0 -2
- package/esm2022/app/reports/interfaces/report-view.interface.mjs +0 -2
- package/esm2022/app/reports/interfaces/report-views.interface.mjs +0 -2
- package/esm2022/app/reports/report-view-config.mjs +0 -587
- package/esm2022/app/reports/report-view-menu.mjs +0 -119
- package/esm2022/app/reports/services/report-view.service.mjs +0 -218
- package/fesm2022/firestitch-report-firestitch-report-ZcHTnNKq.mjs.map +0 -1
|
@@ -5,9 +5,9 @@ import { formatDayRange, formatPlainNumber } from '../format';
|
|
|
5
5
|
import { GRANULARITY_OPTIONS, } from '../interfaces/report.interface';
|
|
6
6
|
import { dateBoundLabel, dateBoundString, relativeLabel } from '../report-filter-items';
|
|
7
7
|
import { isTile } from '../report-tile';
|
|
8
|
-
import { finiteNumber } from '../report-
|
|
8
|
+
import { finiteNumber } from '../report-state';
|
|
9
9
|
// The words a file uses for what the screen held: each filter's value, the
|
|
10
|
-
// group-by grain, a drilled tile
|
|
10
|
+
// group-by grain, a drilled tile and the match. The PDF and
|
|
11
11
|
// PowerPoint covers print these lines, and the zip sends them (filterLines,
|
|
12
12
|
// with filterSummary as their text for an older server), so every export
|
|
13
13
|
// words one filter one way. Pure, so the node harness checks every wording.
|
|
@@ -47,6 +47,28 @@ export function filterLineText(group, value, context, form) {
|
|
|
47
47
|
const name = pageOnly ? `${label} (page "${context.pageName}" only)` : label;
|
|
48
48
|
return `${excludes(value) ? 'Exclude ' : ''}${name}: ${text}`;
|
|
49
49
|
}
|
|
50
|
+
// The words of one filter's value as its chip reads them after the label
|
|
51
|
+
// ('West, East', '0 to 10', '0 or more', '50 or less'), or null when the
|
|
52
|
+
// value holds nothing. Values left out read as their names: filterLineText
|
|
53
|
+
// puts 'Exclude' before the label, and a {{filter.<id>}} token reads them as
|
|
54
|
+
// 'All except West'. The one source of these words, so the chip, a file's
|
|
55
|
+
// cover and a token never word a value two ways.
|
|
56
|
+
export function filterChipValueText(value, context) {
|
|
57
|
+
return value ? valueText('', value, context, 'chip') : null;
|
|
58
|
+
}
|
|
59
|
+
// Whether a value is worded as values left out: the same order valueText
|
|
60
|
+
// reads a value in, so a value with days or kept picks is never one.
|
|
61
|
+
export function excludes(value) {
|
|
62
|
+
return !!value && !value.start && !value.end && !value.values?.length && !!value.excludeValues?.length;
|
|
63
|
+
}
|
|
64
|
+
// The picks a value names, kept or left out, in pick order: what a select's
|
|
65
|
+
// names are read for. None for a date range.
|
|
66
|
+
export function valuePicks(value) {
|
|
67
|
+
if (!value || value.start || value.end) {
|
|
68
|
+
return [];
|
|
69
|
+
}
|
|
70
|
+
return value.values?.length ? value.values : value.excludeValues ?? [];
|
|
71
|
+
}
|
|
50
72
|
// The match as text while it is 'any', else null; the chip also words 'all'.
|
|
51
73
|
export function matchLineText(match, form) {
|
|
52
74
|
if (match !== 'any') {
|
|
@@ -59,16 +81,6 @@ export function matchLineText(match, form) {
|
|
|
59
81
|
export function drillLineText(component, path, formatContext) {
|
|
60
82
|
return crumbedTitle(component.title, drillCrumbLabels(path, formatContext));
|
|
61
83
|
}
|
|
62
|
-
// The cover's line for the open saved view: 'View: "Q3 North" (shared)',
|
|
63
|
-
// with ', changed since it was opened' while the screen differs from it.
|
|
64
|
-
// Null when no view is open.
|
|
65
|
-
export function viewLineText(view, changed) {
|
|
66
|
-
if (!view) {
|
|
67
|
-
return null;
|
|
68
|
-
}
|
|
69
|
-
const line = `View: "${(view.name ?? '').trim()}" (${view.shared ? 'shared' : 'personal'})`;
|
|
70
|
-
return changed ? `${line}, changed since it was opened` : line;
|
|
71
|
-
}
|
|
72
84
|
// The filter lines of an export, in order: one per filter group with a
|
|
73
85
|
// value (the report's group order), the group-by line, then one per drilled
|
|
74
86
|
// chart (page order). A This Page export (input.pageId) lists only the
|
|
@@ -128,11 +140,6 @@ function dateText(value, context, form) {
|
|
|
128
140
|
}
|
|
129
141
|
return `${dateBoundLabel(value.start, context.locale) ?? '…'} – ${dateBoundLabel(value.end, context.locale) ?? '…'}`;
|
|
130
142
|
}
|
|
131
|
-
// Whether a value is worded as values left out: the same order valueText
|
|
132
|
-
// reads a value in, so a value with days or kept picks is never one.
|
|
133
|
-
function excludes(value) {
|
|
134
|
-
return !value.start && !value.end && !value.values?.length && !!value.excludeValues?.length;
|
|
135
|
-
}
|
|
136
143
|
// The values a select leaves out. A line says what happens to the rows with
|
|
137
144
|
// no value: they stay, unless the group's blank label is one of the values
|
|
138
145
|
// left out. While the blank label is unknown (undefined) the line says
|
|
@@ -175,7 +182,7 @@ function groupLine(group, input) {
|
|
|
175
182
|
if (!value) {
|
|
176
183
|
return of(null);
|
|
177
184
|
}
|
|
178
|
-
const picks =
|
|
185
|
+
const picks = valuePicks(value);
|
|
179
186
|
const names$ = picks.length
|
|
180
187
|
? input.names(group, picks).pipe(catchError(() => of(null)))
|
|
181
188
|
: of(null);
|
|
@@ -210,10 +217,10 @@ function drillLines(input) {
|
|
|
210
217
|
return (report.pages ?? [])
|
|
211
218
|
.filter((page) => !pageId || page.id === pageId)
|
|
212
219
|
.flatMap((page) => page.components ?? [])
|
|
213
|
-
.filter((component) => component.type === 'chart' && !!snapshot.
|
|
220
|
+
.filter((component) => component.type === 'chart' && !!snapshot.state.tiles?.[component.id]?.drill?.length)
|
|
214
221
|
.map((component) => ({
|
|
215
222
|
kind: 'drill',
|
|
216
|
-
text: drillLineText(component, snapshot.
|
|
223
|
+
text: drillLineText({ title: input.titles?.[component.id] ?? component.title }, snapshot.state.tiles[component.id].drill, snapshot.formatContext),
|
|
217
224
|
componentId: component.id,
|
|
218
225
|
}));
|
|
219
226
|
}
|
|
@@ -232,4 +239,4 @@ function pageName(report, pageId) {
|
|
|
232
239
|
}
|
|
233
240
|
return report.pages[index].name || `Page ${index + 1}`;
|
|
234
241
|
}
|
|
235
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwb3J0LWZpbHRlci1saW5lcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvcmVwb3J0cy9leHBvcnQvcmVwb3J0LWZpbHRlci1saW5lcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWMsUUFBUSxFQUFFLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNoRCxPQUFPLEVBQUUsVUFBVSxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRWpELE9BQU8sRUFBRSxZQUFZLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNqRSxPQUFPLEVBQUUsY0FBYyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sV0FBVyxDQUFDO0FBUTlELE9BQU8sRUFFTCxtQkFBbUIsR0FLcEIsTUFBTSxnQ0FBZ0MsQ0FBQztBQUN4QyxPQUFPLEVBQUUsY0FBYyxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN4RixPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBR3JELDJFQUEyRTtBQUMzRSwyRUFBMkU7QUFDM0UsNEVBQTRFO0FBQzVFLHlFQUF5RTtBQUN6RSw0RUFBNEU7QUFHNUUsMEVBQTBFO0FBQzFFLHNFQUFzRTtBQUN0RSxvQkFBb0I7QUFDcEIsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUFHLG1CQUFtQixDQUFDO0FBQ2xELE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FBRyxzQ0FBc0MsQ0FBQztBQUVyRSwyRUFBMkU7QUFDM0UseUJBQXlCO0FBQ3pCLE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FBRyxvQkFBb0IsQ0FBQztBQUVuRCxvQ0FBb0M7QUFDcEMsTUFBTSxlQUFlLEdBQUcsUUFBUSxDQUFDO0FBRWpDLG1FQUFtRTtBQUNuRSxNQUFNLGNBQWMsR0FBRyxVQUFVLENBQUM7QUFHbEMsNEVBQTRFO0FBQzVFLHlFQUF5RTtBQUN6RSx5RUFBeUU7QUFDekUsK0JBQStCO0FBQy9CLDZFQUE2RTtBQUM3RSwyRUFBMkU7QUFDM0UsMkVBQTJFO0FBQzNFLDBCQUEwQjtBQUMxQix3RUFBd0U7QUFDeEUseUNBQXlDO0FBQ3pDLHdFQUF3RTtBQUN4RSwwREFBMEQ7QUFDMUQsMEVBQTBFO0FBQzFFLGtCQUFrQjtBQUNsQixNQUFNLFVBQVUsY0FBYyxDQUM1QixLQUFpRCxFQUNqRCxLQUEwQyxFQUMxQyxPQUFnQyxFQUNoQyxJQUEwQjtJQUUxQixNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsS0FBSyxJQUFJLGVBQWUsQ0FBQztJQUM3QyxNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0lBRW5FLElBQUksSUFBSSxLQUFLLElBQUksRUFBRSxDQUFDO1FBQ2xCLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELE1BQU0sUUFBUSxHQUFHLElBQUksS0FBSyxNQUFNLElBQUksS0FBSyxDQUFDLEtBQUssS0FBSyxNQUFNLElBQUksT0FBTyxDQUFDLFFBQVEsQ0FBQztJQUMvRSxNQUFNLElBQUksR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxXQUFXLE9BQU8sQ0FBQyxRQUFRLFNBQVMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO0lBRTdFLE9BQU8sR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLElBQUksS0FBSyxJQUFJLEVBQUUsQ0FBQztBQUNoRSxDQUFDO0FBRUQsNkVBQTZFO0FBQzdFLE1BQU0sVUFBVSxhQUFhLENBQUMsS0FBMkMsRUFBRSxJQUEwQjtJQUNuRyxJQUFJLEtBQUssS0FBSyxLQUFLLEVBQUUsQ0FBQztRQUNwQixPQUFPLElBQUksS0FBSyxNQUFNLElBQUksS0FBSyxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDcEUsQ0FBQztJQUVELE9BQU8sSUFBSSxLQUFLLE1BQU0sQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUM7QUFDM0QsQ0FBQztBQUVELDBFQUEwRTtBQUMxRSxxREFBcUQ7QUFDckQsTUFBTSxVQUFVLGFBQWEsQ0FDM0IsU0FBeUMsRUFDekMsSUFBZ0MsRUFDaEMsYUFBa0Q7SUFFbEQsT0FBTyxZQUFZLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUUsYUFBYSxDQUFDLENBQUMsQ0FBQztBQUM5RSxDQUFDO0FBRUQseUVBQXlFO0FBQ3pFLHlFQUF5RTtBQUN6RSw2QkFBNkI7QUFDN0IsTUFBTSxVQUFVLFlBQVksQ0FDMUIsSUFBbUUsRUFDbkUsT0FBZ0I7SUFFaEIsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ1YsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsTUFBTSxJQUFJLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsQ0FBQztJQUU1RixPQUFPLE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLCtCQUErQixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7QUFDakUsQ0FBQztBQUVELHVFQUF1RTtBQUN2RSw0RUFBNEU7QUFDNUUsdUVBQXVFO0FBQ3ZFLHNFQUFzRTtBQUN0RSw0RUFBNEU7QUFDNUUsdUVBQXVFO0FBQ3ZFLFVBQVU7QUFDVixNQUFNLFVBQVUsV0FBVyxDQUFDLEtBQTZCO0lBQ3ZELE1BQU0sT0FBTyxHQUFHLFlBQVksQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxNQUFNLENBQUM7U0FDckQsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDM0MsTUFBTSxJQUFJLEdBQUcsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLEVBQUUsR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDcEQsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUE0QixFQUFFLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxDQUFDO0lBRTdELE9BQU8sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztTQUNqRCxJQUFJLENBQ0gsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQztRQUNiLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBNEIsRUFBRSxDQUFDLElBQUksS0FBSyxJQUFJLENBQUM7UUFDbEUsR0FBRyxJQUFJO0tBQ1IsQ0FBQyxDQUNILENBQUM7QUFDTixDQUFDO0FBRUQseUVBQXlFO0FBQ3pFLDBFQUEwRTtBQUMxRSxxQkFBcUI7QUFDckIsTUFBTSxVQUFVLFlBQVksQ0FBQyxNQUFjLEVBQUUsTUFBcUI7SUFDaEUsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLFlBQVksSUFBSSxFQUFFLENBQUM7SUFFekMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ1osT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQUVELE1BQU0sSUFBSSxHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLFNBQVMsQ0FBQyxFQUFFLEtBQUssTUFBTSxDQUFDLENBQUM7SUFDL0UsTUFBTSxPQUFPLEdBQUcsQ0FBQyxJQUFJLEVBQUUsVUFBVSxJQUFJLEVBQUUsQ0FBQztTQUNyQyxNQUFNLENBQUMsQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztTQUN4QyxHQUFHLENBQUMsQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUVwQyxPQUFPLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssS0FBSyxNQUFNLElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxNQUFNLENBQUM7V0FDOUUsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbkYsQ0FBQztBQUVELGtFQUFrRTtBQUNsRSxTQUFTLFNBQVMsQ0FDaEIsS0FBYSxFQUNiLEtBQXVCLEVBQ3ZCLE9BQWdDLEVBQ2hDLElBQTBCO0lBRTFCLElBQUksS0FBSyxDQUFDLEtBQUssSUFBSSxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDN0IsT0FBTyxRQUFRLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQztJQUN4QyxDQUFDO0lBRUQsSUFBSSxLQUFLLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxDQUFDO1FBQ3pCLE9BQU8sU0FBUyxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3JELENBQUM7SUFFRCxJQUFJLEtBQUssQ0FBQyxhQUFhLEVBQUUsTUFBTSxFQUFFLENBQUM7UUFDaEMsT0FBTyxXQUFXLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxhQUFhLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ2hFLENBQUM7SUFFRCxNQUFNLE9BQU8sR0FBRyxPQUFPLEtBQUssQ0FBQyxLQUFLLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFFMUUsT0FBTyxTQUFTLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDOUUsQ0FBQztBQUVELDBFQUEwRTtBQUMxRSxzQ0FBc0M7QUFDdEMsU0FBUyxRQUFRLENBQUMsS0FBdUIsRUFBRSxPQUFnQyxFQUFFLElBQTBCO0lBQ3JHLElBQUksT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ25CLE1BQU0sSUFBSSxHQUFHLGFBQWEsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDM0MsTUFBTSxJQUFJLEdBQUcsSUFBSSxLQUFLLE1BQU07WUFDMUIsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxFQUFFLGVBQWUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsT0FBTyxDQUFDLE1BQU0sQ0FBQztZQUMxRixDQUFDLENBQUMsRUFBRSxDQUFDO1FBRVAsT0FBTyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxLQUFLLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDM0MsQ0FBQztJQUVELE9BQU8sR0FBRyxjQUFjLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksR0FBRyxNQUFNLGNBQWMsQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQztBQUN2SCxDQUFDO0FBRUQseUVBQXlFO0FBQ3pFLHFFQUFxRTtBQUNyRSxTQUFTLFFBQVEsQ0FBQyxLQUF1QjtJQUN2QyxPQUFPLENBQUMsS0FBSyxDQUFDLEtBQUssSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLE1BQU0sSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLGFBQWEsRUFBRSxNQUFNLENBQUM7QUFDOUYsQ0FBQztBQUVELDRFQUE0RTtBQUM1RSwyRUFBMkU7QUFDM0UsdUVBQXVFO0FBQ3ZFLDBFQUEwRTtBQUMxRSxTQUFTO0FBQ1QsU0FBUyxXQUFXLENBQ2xCLEtBQWEsRUFDYixNQUFpQixFQUNqQixPQUFnQyxFQUNoQyxJQUEwQjtJQUUxQixNQUFNLElBQUksR0FBRyxTQUFTLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNuRCxNQUFNLFVBQVUsR0FBRyxPQUFPLENBQUMsVUFBVSxDQUFDO0lBRXRDLElBQUksSUFBSSxLQUFLLE1BQU0sSUFBSSxVQUFVLEtBQUssU0FBUyxFQUFFLENBQUM7UUFDaEQsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsTUFBTSxLQUFLLEdBQUcsVUFBVSxLQUFLLElBQUksSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssVUFBVSxDQUFDLENBQUM7SUFFMUYsT0FBTyxHQUFHLElBQUksa0JBQWtCLEtBQUssSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLENBQUM7QUFDbEYsQ0FBQztBQUVELHNFQUFzRTtBQUN0RSxTQUFTLFNBQVMsQ0FBQyxLQUF1QixFQUFFLE9BQWdDLEVBQUUsSUFBMEI7SUFDdEcsTUFBTSxHQUFHLEdBQUcsWUFBWSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNwQyxNQUFNLEdBQUcsR0FBRyxZQUFZLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3BDLE1BQU0sS0FBSyxHQUFHLENBQUMsR0FBVyxFQUFFLEVBQUUsQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLEVBQUUsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBRXRFLElBQUksR0FBRyxLQUFLLFNBQVMsSUFBSSxHQUFHLEtBQUssU0FBUyxFQUFFLENBQUM7UUFDM0MsT0FBTyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsT0FBTyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxLQUFLLE1BQU0sQ0FBQyxDQUFDLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0lBQ3RGLENBQUM7SUFFRCxJQUFJLEdBQUcsS0FBSyxTQUFTLEVBQUUsQ0FBQztRQUN0QixPQUFPLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUM7SUFDakMsQ0FBQztJQUVELE9BQU8sR0FBRyxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0FBQzVELENBQUM7QUFFRCw0RUFBNEU7QUFDNUUsU0FBUyxTQUFTLENBQUMsTUFBaUIsRUFBRSxPQUFnQztJQUNwRSxNQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDO0lBRTVCLE9BQU8sTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQ3ZFLENBQUM7QUFFRCx3RUFBd0U7QUFDeEUsMkVBQTJFO0FBQzNFLHdFQUF3RTtBQUN4RSx5REFBeUQ7QUFDekQsU0FBUyxTQUFTLENBQUMsS0FBd0IsRUFBRSxLQUE2QjtJQUN4RSxNQUFNLFFBQVEsR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDO0lBQ2hDLE1BQU0sS0FBSyxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBRXhDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNYLE9BQU8sRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2xCLENBQUM7SUFFRCxNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsS0FBSyxJQUFJLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLGFBQWEsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUNoSCxNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsTUFBTTtRQUN6QixDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUM1RCxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBRWIsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUNoQixHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQTJCLEVBQUU7UUFDckMsTUFBTSxJQUFJLEdBQUcsY0FBYyxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUU7WUFDeEMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxhQUFhLENBQUMsTUFBTTtZQUNyQyxLQUFLO1lBQ0wsTUFBTSxFQUFFLFFBQVEsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLElBQUk7WUFDMUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxNQUFNLENBQUM7WUFDOUMsVUFBVSxFQUFFLEtBQUssQ0FBQyxVQUFVO1NBQzdCLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFFWCxPQUFPLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsS0FBSyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDbEUsQ0FBQyxDQUFDLENBQ0gsQ0FBQztBQUNKLENBQUM7QUFFRCwwRUFBMEU7QUFDMUUsNEJBQTRCO0FBQzVCLFNBQVMsV0FBVyxDQUFDLEtBQTZCO0lBQ2hELE1BQU0sU0FBUyxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDO0lBRTNDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUNmLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELE1BQU0sTUFBTSxHQUFHLG1CQUFtQixDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssS0FBSyxTQUFTLENBQUMsQ0FBQztJQUM1RSxNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsS0FBSyxJQUFJLGNBQWMsQ0FBQztJQUVwRSxPQUFPLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsR0FBRyxLQUFLLEtBQUssTUFBTSxFQUFFLElBQUksSUFBSSxTQUFTLEVBQUUsRUFBRSxDQUFDO0FBQzdFLENBQUM7QUFFRCw2RUFBNkU7QUFDN0UsU0FBUyxVQUFVLENBQUMsS0FBNkI7SUFDL0MsTUFBTSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLEdBQUcsS0FBSyxDQUFDO0lBRTNDLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1FBQ3pDLE9BQU8sRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVELE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQztTQUN4QixNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxFQUFFLEtBQUssTUFBTSxDQUFDO1NBQy9DLE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFVBQVUsSUFBSSxFQUFFLENBQUM7U0FDeEMsTUFBTSxDQUFDLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxTQUFTLENBQUMsSUFBSSxLQUFLLE9BQU8sSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQztTQUN6RyxHQUFHLENBQUMsQ0FBQyxTQUFTLEVBQW9CLEVBQUUsQ0FBQyxDQUFDO1FBQ3JDLElBQUksRUFBRSxPQUFPO1FBQ2IsSUFBSSxFQUFFLGFBQWEsQ0FBQyxTQUFTLEVBQUUsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxRQUFRLENBQUMsYUFBYSxDQUFDO1FBQy9GLFdBQVcsRUFBRSxTQUFTLENBQUMsRUFBRTtLQUMxQixDQUFDLENBQUMsQ0FBQztBQUNSLENBQUM7QUFFRCwyRUFBMkU7QUFDM0UseUNBQXlDO0FBQ3pDLFNBQVMsY0FBYyxDQUFDLEtBQXdCO0lBQzlDLE9BQU8sS0FBSyxDQUFDLFlBQVk7V0FDcEIsQ0FBQyxLQUFLLENBQUMsT0FBTyxJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0FBQ3BHLENBQUM7QUFFRCw0RUFBNEU7QUFDNUUsZUFBZTtBQUNmLFNBQVMsUUFBUSxDQUFDLE1BQWMsRUFBRSxNQUFpQztJQUNqRSxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBRXpGLElBQUksS0FBSyxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQ2QsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsT0FBTyxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksSUFBSSxRQUFRLEtBQUssR0FBRyxDQUFDLEVBQUUsQ0FBQztBQUN6RCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgT2JzZXJ2YWJsZSwgZm9ya0pvaW4sIG9mIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBjYXRjaEVycm9yLCBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IGNydW1iZWRUaXRsZSwgZHJpbGxDcnVtYkxhYmVscyB9IGZyb20gJy4uL2RyaWxsLWNydW1icyc7XG5pbXBvcnQgeyBmb3JtYXREYXlSYW5nZSwgZm9ybWF0UGxhaW5OdW1iZXIgfSBmcm9tICcuLi9mb3JtYXQnO1xuaW1wb3J0IHsgUmVwb3J0RHJpbGxTdGVwIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9yZXBvcnQtZHJpbGwtc3RlcC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgUmVwb3J0RXhwb3J0TGluZSB9IGZyb20gJy4uL2ludGVyZmFjZXMvcmVwb3J0LWV4cG9ydC1saW5lLmludGVyZmFjZSc7XG5pbXBvcnQgeyBSZXBvcnRFeHBvcnRMaW5lc0lucHV0IH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9yZXBvcnQtZXhwb3J0LWxpbmVzLWlucHV0LmludGVyZmFjZSc7XG5pbXBvcnQgeyBSZXBvcnRGaWx0ZXJMaW5lQ29udGV4dCB9IGZyb20gJy4uL2ludGVyZmFjZXMvcmVwb3J0LWZpbHRlci1saW5lLWNvbnRleHQuaW50ZXJmYWNlJztcbmltcG9ydCB7IFJlcG9ydEZpbHRlckxpbmVGb3JtIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9yZXBvcnQtZmlsdGVyLWxpbmUtZm9ybS50eXBlJztcbmltcG9ydCB7IFJlcG9ydEZpbHRlck1hdGNoIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9yZXBvcnQtZmlsdGVyLW1hdGNoLnR5cGUnO1xuaW1wb3J0IHsgUmVwb3J0Vmlld1N1bW1hcnkgfSBmcm9tICcuLi9pbnRlcmZhY2VzL3JlcG9ydC12aWV3LXN1bW1hcnkuaW50ZXJmYWNlJztcbmltcG9ydCB7XG4gIEZpbHRlckdyb3VwVmFsdWUsXG4gIEdSQU5VTEFSSVRZX09QVElPTlMsXG4gIFJlcG9ydCxcbiAgUmVwb3J0Q29tcG9uZW50LFxuICBSZXBvcnRGaWx0ZXJHcm91cCxcbiAgUmVwb3J0Rm9ybWF0Q29udGV4dCxcbn0gZnJvbSAnLi4vaW50ZXJmYWNlcy9yZXBvcnQuaW50ZXJmYWNlJztcbmltcG9ydCB7IGRhdGVCb3VuZExhYmVsLCBkYXRlQm91bmRTdHJpbmcsIHJlbGF0aXZlTGFiZWwgfSBmcm9tICcuLi9yZXBvcnQtZmlsdGVyLWl0ZW1zJztcbmltcG9ydCB7IGlzVGlsZSB9IGZyb20gJy4uL3JlcG9ydC10aWxlJztcbmltcG9ydCB7IGZpbml0ZU51bWJlciB9IGZyb20gJy4uL3JlcG9ydC12aWV3LWNvbmZpZyc7XG5cblxuLy8gVGhlIHdvcmRzIGEgZmlsZSB1c2VzIGZvciB3aGF0IHRoZSBzY3JlZW4gaGVsZDogZWFjaCBmaWx0ZXIncyB2YWx1ZSwgdGhlXG4vLyBncm91cC1ieSBncmFpbiwgYSBkcmlsbGVkIHRpbGUsIHRoZSBtYXRjaCBhbmQgdGhlIG9wZW4gdmlldy4gVGhlIFBERiBhbmRcbi8vIFBvd2VyUG9pbnQgY292ZXJzIHByaW50IHRoZXNlIGxpbmVzLCBhbmQgdGhlIHppcCBzZW5kcyB0aGVtIChmaWx0ZXJMaW5lcyxcbi8vIHdpdGggZmlsdGVyU3VtbWFyeSBhcyB0aGVpciB0ZXh0IGZvciBhbiBvbGRlciBzZXJ2ZXIpLCBzbyBldmVyeSBleHBvcnRcbi8vIHdvcmRzIG9uZSBmaWx0ZXIgb25lIHdheS4gUHVyZSwgc28gdGhlIG5vZGUgaGFybmVzcyBjaGVja3MgZXZlcnkgd29yZGluZy5cblxuXG4vLyBUaGUgbWF0Y2ggd2hpbGUgdGhlIHJlcG9ydCBiYXIncyBmaWx0ZXJzIGNvbWJpbmUgd2l0aCAnYW55JzogdGhlIGNoaXAnc1xuLy8gd29yZHMsIGFuZCB0aGUgY292ZXIncyBsaW5lLiBUaGUgemlwJ3Mgbm90ZXMgY2FycnkgdGhlIHNlcnZlcidzIG93blxuLy8gc2VudGVuY2UgaW5zdGVhZC5cbmV4cG9ydCBjb25zdCBNQVRDSF9BTllfQ0hJUCA9ICdNYXRjaDogYW55IGZpbHRlcic7XG5leHBvcnQgY29uc3QgTUFUQ0hfQU5ZX0xJTkUgPSAnRmlsdGVycyBpbiB0aGUgcmVwb3J0IGJhcjogbWF0Y2ggYW55JztcblxuLy8gVGhlIHJlcG9ydCBiYXIncyBNYXRjaCBjaGlwIHdoaWxlIHRoZSBmaWx0ZXJzIGNvbWJpbmUgd2l0aCAnYWxsJy4gQSBmaWxlXG4vLyBwcmludHMgbm8gbGluZSBmb3IgaXQuXG5leHBvcnQgY29uc3QgTUFUQ0hfQUxMX0NISVAgPSAnTWF0Y2g6IGFsbCBmaWx0ZXJzJztcblxuLy8gQSBncm91cCdzIGxhYmVsIHdoZW4gaXQgaGFzIG5vbmUuXG5jb25zdCBVTkxBQkVMRURfR1JPVVAgPSAnRmlsdGVyJztcblxuLy8gVGhlIGxhYmVsIG9mIHRoZSBncm91cC1ieSBsaW5lIHdoZW4gdGhlIHJlcG9ydCBuYW1lcyBubyBjb250cm9sLlxuY29uc3QgR1JPVVBfQllfTEFCRUwgPSAnR3JvdXAgQnknO1xuXG5cbi8vIE9uZSBmaWx0ZXIgZ3JvdXAncyB2YWx1ZSBhcyB0ZXh0ICgnUmVnaW9uOiBXZXN0LCBFYXN0JyksIG9yIG51bGwgd2hlbiB0aGVcbi8vIHZhbHVlIGhvbGRzIG5vdGhpbmcuIFZhbHVlcyBsZWZ0IG91dCBzYXkgc28gYmVmb3JlIHRoZSBsYWJlbDogJ0V4Y2x1ZGVcbi8vIFJlZ2lvbjogV2VzdCwgRWFzdCcuICdjaGlwJyBpcyB0aGUgc2hvcnQgZm9ybTsgJ2xpbmUnIGFkZHMgd2hhdCBhIGZpbGVcbi8vIHJlYWRlciBjYW5ub3Qgc2VlIG9uIHNjcmVlbjpcbi8vIC0gZXhjbHVkZTogJ0V4Y2x1ZGUgUmVnaW9uOiBXZXN0LCBFYXN0IChyb3dzIHdpdGggbm8gUmVnaW9uIGFyZSBrZXB0KScsIG9yXG4vLyAgICcuLi4gYXJlIGxlZnQgb3V0JyB3aGVuIHRoZSBibGFuayBsYWJlbCAoY29udGV4dC5ibGFua0xhYmVsKSBpcyBvbmUgb2Zcbi8vICAgdGhlIHZhbHVlcyBsZWZ0IG91dC4gV2l0aG91dCBhIGtub3duIGJsYW5rIGxhYmVsIHRoZSBsaW5lIHNheXMgbm90aGluZ1xuLy8gICBhYm91dCB0aGUgYmxhbmsgcm93cztcbi8vIC0gcmFuZ2U6ICdBbW91bnQ6IDEwIHRvIDUwIChib3RoIGluY2x1ZGVkKSc7IGFuIG9wZW4gZW5kIHJlYWRzICcxMCBvclxuLy8gICBtb3JlJyBvciAnNTAgb3IgbGVzcycgaW4gYm90aCBmb3Jtcztcbi8vIC0gYSBsaXZlIHByZXNldDogJ1JlcG9ydCBQZXJpb2Q6IExhc3QgMzAgZGF5cyAoU2VwIDMg4oCTIE9jdCAyLCAyMDI2KSc7XG4vLyAtIGEgcGFnZSBncm91cDogJ0NvaG9ydCAocGFnZSBcIlJldGVudGlvblwiIG9ubHkpOiAyMDI1Jy5cbi8vIE51bWJlcnMgYW5kIGRhdGVzIGFyZSB3cml0dGVuIGluIHRoZSByZXBvcnQncyBsb2NhbGUsIGFuZCAwIGlzIGEgbnVtYmVyXG4vLyBsaWtlIGFueSBvdGhlci5cbmV4cG9ydCBmdW5jdGlvbiBmaWx0ZXJMaW5lVGV4dChcbiAgZ3JvdXA6IFBpY2s8UmVwb3J0RmlsdGVyR3JvdXAsICdsYWJlbCcgfCAnbGV2ZWwnPixcbiAgdmFsdWU6IEZpbHRlckdyb3VwVmFsdWUgfCBudWxsIHwgdW5kZWZpbmVkLFxuICBjb250ZXh0OiBSZXBvcnRGaWx0ZXJMaW5lQ29udGV4dCxcbiAgZm9ybTogUmVwb3J0RmlsdGVyTGluZUZvcm0sXG4pOiBzdHJpbmcgfCBudWxsIHtcbiAgY29uc3QgbGFiZWwgPSBncm91cC5sYWJlbCB8fCBVTkxBQkVMRURfR1JPVVA7XG4gIGNvbnN0IHRleHQgPSB2YWx1ZSA/IHZhbHVlVGV4dChsYWJlbCwgdmFsdWUsIGNvbnRleHQsIGZvcm0pIDogbnVsbDtcblxuICBpZiAodGV4dCA9PT0gbnVsbCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgY29uc3QgcGFnZU9ubHkgPSBmb3JtID09PSAnbGluZScgJiYgZ3JvdXAubGV2ZWwgPT09ICdwYWdlJyAmJiBjb250ZXh0LnBhZ2VOYW1lO1xuICBjb25zdCBuYW1lID0gcGFnZU9ubHkgPyBgJHtsYWJlbH0gKHBhZ2UgXCIke2NvbnRleHQucGFnZU5hbWV9XCIgb25seSlgIDogbGFiZWw7XG5cbiAgcmV0dXJuIGAke2V4Y2x1ZGVzKHZhbHVlKSA/ICdFeGNsdWRlICcgOiAnJ30ke25hbWV9OiAke3RleHR9YDtcbn1cblxuLy8gVGhlIG1hdGNoIGFzIHRleHQgd2hpbGUgaXQgaXMgJ2FueScsIGVsc2UgbnVsbDsgdGhlIGNoaXAgYWxzbyB3b3JkcyAnYWxsJy5cbmV4cG9ydCBmdW5jdGlvbiBtYXRjaExpbmVUZXh0KG1hdGNoOiBSZXBvcnRGaWx0ZXJNYXRjaCB8IG51bGwgfCB1bmRlZmluZWQsIGZvcm06IFJlcG9ydEZpbHRlckxpbmVGb3JtKTogc3RyaW5nIHwgbnVsbCB7XG4gIGlmIChtYXRjaCAhPT0gJ2FueScpIHtcbiAgICByZXR1cm4gZm9ybSA9PT0gJ2NoaXAnICYmIG1hdGNoID09PSAnYWxsJyA/IE1BVENIX0FMTF9DSElQIDogbnVsbDtcbiAgfVxuXG4gIHJldHVybiBmb3JtID09PSAnY2hpcCcgPyBNQVRDSF9BTllfQ0hJUCA6IE1BVENIX0FOWV9MSU5FO1xufVxuXG4vLyBBIGRyaWxsZWQgdGlsZSdzIGxpbmU6IGl0cyB0aXRsZSBhbmQgdGhlIGJyZWFkY3J1bWIgb2YgaXRzIHBhdGgsIGluIHRoZVxuLy8gcmVwb3J0J3MgbG9jYWxlICgnUmV2ZW51ZSBieSBQZXJpb2Qg4oC6IDIwMjYg4oC6IFEzJykuXG5leHBvcnQgZnVuY3Rpb24gZHJpbGxMaW5lVGV4dChcbiAgY29tcG9uZW50OiBQaWNrPFJlcG9ydENvbXBvbmVudCwgJ3RpdGxlJz4sXG4gIHBhdGg6IHJlYWRvbmx5IFJlcG9ydERyaWxsU3RlcFtdLFxuICBmb3JtYXRDb250ZXh0OiBQaWNrPFJlcG9ydEZvcm1hdENvbnRleHQsICdsb2NhbGUnPixcbik6IHN0cmluZyB7XG4gIHJldHVybiBjcnVtYmVkVGl0bGUoY29tcG9uZW50LnRpdGxlLCBkcmlsbENydW1iTGFiZWxzKHBhdGgsIGZvcm1hdENvbnRleHQpKTtcbn1cblxuLy8gVGhlIGNvdmVyJ3MgbGluZSBmb3IgdGhlIG9wZW4gc2F2ZWQgdmlldzogJ1ZpZXc6IFwiUTMgTm9ydGhcIiAoc2hhcmVkKScsXG4vLyB3aXRoICcsIGNoYW5nZWQgc2luY2UgaXQgd2FzIG9wZW5lZCcgd2hpbGUgdGhlIHNjcmVlbiBkaWZmZXJzIGZyb20gaXQuXG4vLyBOdWxsIHdoZW4gbm8gdmlldyBpcyBvcGVuLlxuZXhwb3J0IGZ1bmN0aW9uIHZpZXdMaW5lVGV4dChcbiAgdmlldzogUGljazxSZXBvcnRWaWV3U3VtbWFyeSwgJ25hbWUnIHwgJ3NoYXJlZCc+IHwgbnVsbCB8IHVuZGVmaW5lZCxcbiAgY2hhbmdlZDogYm9vbGVhbixcbik6IHN0cmluZyB8IG51bGwge1xuICBpZiAoIXZpZXcpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNvbnN0IGxpbmUgPSBgVmlldzogXCIkeyh2aWV3Lm5hbWUgPz8gJycpLnRyaW0oKX1cIiAoJHt2aWV3LnNoYXJlZCA/ICdzaGFyZWQnIDogJ3BlcnNvbmFsJ30pYDtcblxuICByZXR1cm4gY2hhbmdlZCA/IGAke2xpbmV9LCBjaGFuZ2VkIHNpbmNlIGl0IHdhcyBvcGVuZWRgIDogbGluZTtcbn1cblxuLy8gVGhlIGZpbHRlciBsaW5lcyBvZiBhbiBleHBvcnQsIGluIG9yZGVyOiBvbmUgcGVyIGZpbHRlciBncm91cCB3aXRoIGFcbi8vIHZhbHVlICh0aGUgcmVwb3J0J3MgZ3JvdXAgb3JkZXIpLCB0aGUgZ3JvdXAtYnkgbGluZSwgdGhlbiBvbmUgcGVyIGRyaWxsZWRcbi8vIGNoYXJ0IChwYWdlIG9yZGVyKS4gQSBUaGlzIFBhZ2UgZXhwb3J0IChpbnB1dC5wYWdlSWQpIGxpc3RzIG9ubHkgdGhlXG4vLyBncm91cHMgdGhhdCByZWFjaCBhIHRpbGUgb2YgdGhhdCBwYWdlLCBhbmQgb25seSB0aGF0IHBhZ2UncyBkcmlsbGVkXG4vLyBjaGFydHMuIEEgc2VsZWN0J3MgbmFtZXMgYXJlIGEgcmVxdWVzdCwgc28gdGhlIGxpbmVzIGFycml2ZSB0b2dldGhlciBvbmNlXG4vLyBldmVyeSBuYW1lIGlzIGtub3duOyBhIGZhaWxlZCBuYW1lIHJlYWQgd3JpdGVzIHRoZSBwaWNrcyBhcyB0aGV5IGFyZVxuLy8gc3RvcmVkLlxuZXhwb3J0IGZ1bmN0aW9uIGV4cG9ydExpbmVzKGlucHV0OiBSZXBvcnRFeHBvcnRMaW5lc0lucHV0KTogT2JzZXJ2YWJsZTxSZXBvcnRFeHBvcnRMaW5lW10+IHtcbiAgY29uc3QgZ3JvdXBzJCA9IGV4cG9ydEdyb3VwcyhpbnB1dC5yZXBvcnQsIGlucHV0LnBhZ2VJZClcbiAgICAubWFwKChncm91cCkgPT4gZ3JvdXBMaW5lKGdyb3VwLCBpbnB1dCkpO1xuICBjb25zdCByZXN0ID0gW2dyb3VwQnlMaW5lKGlucHV0KSwgLi4uZHJpbGxMaW5lcyhpbnB1dCldXG4gICAgLmZpbHRlcigobGluZSk6IGxpbmUgaXMgUmVwb3J0RXhwb3J0TGluZSA9PiBsaW5lICE9PSBudWxsKTtcblxuICByZXR1cm4gKGdyb3VwcyQubGVuZ3RoID8gZm9ya0pvaW4oZ3JvdXBzJCkgOiBvZihbXSkpXG4gICAgLnBpcGUoXG4gICAgICBtYXAoKGxpbmVzKSA9PiBbXG4gICAgICAgIC4uLmxpbmVzLmZpbHRlcigobGluZSk6IGxpbmUgaXMgUmVwb3J0RXhwb3J0TGluZSA9PiBsaW5lICE9PSBudWxsKSxcbiAgICAgICAgLi4ucmVzdCxcbiAgICAgIF0pLFxuICAgICk7XG59XG5cbi8vIFRoZSBncm91cHMgYW4gZXhwb3J0J3MgbGluZXMgbWF5IG5hbWU6IGV2ZXJ5IGdyb3VwLCBvciBmb3IgYSBUaGlzIFBhZ2Vcbi8vIGV4cG9ydCB0aGUgZ3JvdXBzIHdpdGggYSBtZW1iZXIgdGlsZSBvbiB0aGF0IHBhZ2UuIEEgcGFnZSBncm91cCByZWFjaGVzXG4vLyBvbmx5IGl0cyBvd24gcGFnZS5cbmV4cG9ydCBmdW5jdGlvbiBleHBvcnRHcm91cHMocmVwb3J0OiBSZXBvcnQsIHBhZ2VJZDogbnVtYmVyIHwgbnVsbCk6IFJlcG9ydEZpbHRlckdyb3VwW10ge1xuICBjb25zdCBncm91cHMgPSByZXBvcnQuZmlsdGVyR3JvdXBzID8/IFtdO1xuXG4gIGlmICghcGFnZUlkKSB7XG4gICAgcmV0dXJuIGdyb3VwcztcbiAgfVxuXG4gIGNvbnN0IHBhZ2UgPSAocmVwb3J0LnBhZ2VzID8/IFtdKS5maW5kKChjYW5kaWRhdGUpID0+IGNhbmRpZGF0ZS5pZCA9PT0gcGFnZUlkKTtcbiAgY29uc3QgdGlsZUlkcyA9IChwYWdlPy5jb21wb25lbnRzID8/IFtdKVxuICAgIC5maWx0ZXIoKGNvbXBvbmVudCkgPT4gaXNUaWxlKGNvbXBvbmVudCkpXG4gICAgLm1hcCgoY29tcG9uZW50KSA9PiBjb21wb25lbnQuaWQpO1xuXG4gIHJldHVybiBncm91cHMuZmlsdGVyKChncm91cCkgPT4gKGdyb3VwLmxldmVsICE9PSAncGFnZScgfHwgZ3JvdXAucGFnZUlkID09PSBwYWdlSWQpXG4gICAgJiYgZ3JvdXBNZW1iZXJJZHMoZ3JvdXApLnNvbWUoKGNvbXBvbmVudElkKSA9PiB0aWxlSWRzLmluY2x1ZGVzKGNvbXBvbmVudElkKSkpO1xufVxuXG4vLyBUaGUgdGV4dCBhZnRlciB0aGUgbGFiZWwsIG9yIG51bGwgd2hlbiB0aGUgdmFsdWUgaG9sZHMgbm90aGluZy5cbmZ1bmN0aW9uIHZhbHVlVGV4dChcbiAgbGFiZWw6IHN0cmluZyxcbiAgdmFsdWU6IEZpbHRlckdyb3VwVmFsdWUsXG4gIGNvbnRleHQ6IFJlcG9ydEZpbHRlckxpbmVDb250ZXh0LFxuICBmb3JtOiBSZXBvcnRGaWx0ZXJMaW5lRm9ybSxcbik6IHN0cmluZyB8IG51bGwge1xuICBpZiAodmFsdWUuc3RhcnQgfHwgdmFsdWUuZW5kKSB7XG4gICAgcmV0dXJuIGRhdGVUZXh0KHZhbHVlLCBjb250ZXh0LCBmb3JtKTtcbiAgfVxuXG4gIGlmICh2YWx1ZS52YWx1ZXM/Lmxlbmd0aCkge1xuICAgIHJldHVybiBwaWNrTmFtZXModmFsdWUudmFsdWVzLCBjb250ZXh0KS5qb2luKCcsICcpO1xuICB9XG5cbiAgaWYgKHZhbHVlLmV4Y2x1ZGVWYWx1ZXM/Lmxlbmd0aCkge1xuICAgIHJldHVybiBleGNsdWRlVGV4dChsYWJlbCwgdmFsdWUuZXhjbHVkZVZhbHVlcywgY29udGV4dCwgZm9ybSk7XG4gIH1cblxuICBjb25zdCBrZXl3b3JkID0gdHlwZW9mIHZhbHVlLnZhbHVlID09PSAnc3RyaW5nJyA/IHZhbHVlLnZhbHVlLnRyaW0oKSA6ICcnO1xuXG4gIHJldHVybiByYW5nZVRleHQodmFsdWUsIGNvbnRleHQsIGZvcm0pID8/IChrZXl3b3JkID8gYFwiJHtrZXl3b3JkfVwiYCA6IG51bGwpO1xufVxuXG4vLyBBIGRhdGUgcmFuZ2U6IGEgbGl2ZSBwcmVzZXQgYnkgaXRzIG5hbWUgKHdpdGggaXRzIGRheXMgaW4gYSBsaW5lKSwgZWxzZVxuLy8gaXRzIHR3byBkYXlzICgn4oCmJyBmb3IgYW4gb3BlbiBlbmQpLlxuZnVuY3Rpb24gZGF0ZVRleHQodmFsdWU6IEZpbHRlckdyb3VwVmFsdWUsIGNvbnRleHQ6IFJlcG9ydEZpbHRlckxpbmVDb250ZXh0LCBmb3JtOiBSZXBvcnRGaWx0ZXJMaW5lRm9ybSk6IHN0cmluZyB7XG4gIGlmIChjb250ZXh0LnByZXNldCkge1xuICAgIGNvbnN0IG5hbWUgPSByZWxhdGl2ZUxhYmVsKGNvbnRleHQucHJlc2V0KTtcbiAgICBjb25zdCBkYXlzID0gZm9ybSA9PT0gJ2xpbmUnXG4gICAgICA/IGZvcm1hdERheVJhbmdlKGRhdGVCb3VuZFN0cmluZyh2YWx1ZS5zdGFydCksIGRhdGVCb3VuZFN0cmluZyh2YWx1ZS5lbmQpLCBjb250ZXh0LmxvY2FsZSlcbiAgICAgIDogJyc7XG5cbiAgICByZXR1cm4gZGF5cyA/IGAke25hbWV9ICgke2RheXN9KWAgOiBuYW1lO1xuICB9XG5cbiAgcmV0dXJuIGAke2RhdGVCb3VuZExhYmVsKHZhbHVlLnN0YXJ0LCBjb250ZXh0LmxvY2FsZSkgPz8gJ+KApid9IOKAkyAke2RhdGVCb3VuZExhYmVsKHZhbHVlLmVuZCwgY29udGV4dC5sb2NhbGUpID8/ICfigKYnfWA7XG59XG5cbi8vIFdoZXRoZXIgYSB2YWx1ZSBpcyB3b3JkZWQgYXMgdmFsdWVzIGxlZnQgb3V0OiB0aGUgc2FtZSBvcmRlciB2YWx1ZVRleHRcbi8vIHJlYWRzIGEgdmFsdWUgaW4sIHNvIGEgdmFsdWUgd2l0aCBkYXlzIG9yIGtlcHQgcGlja3MgaXMgbmV2ZXIgb25lLlxuZnVuY3Rpb24gZXhjbHVkZXModmFsdWU6IEZpbHRlckdyb3VwVmFsdWUpOiBib29sZWFuIHtcbiAgcmV0dXJuICF2YWx1ZS5zdGFydCAmJiAhdmFsdWUuZW5kICYmICF2YWx1ZS52YWx1ZXM/Lmxlbmd0aCAmJiAhIXZhbHVlLmV4Y2x1ZGVWYWx1ZXM/Lmxlbmd0aDtcbn1cblxuLy8gVGhlIHZhbHVlcyBhIHNlbGVjdCBsZWF2ZXMgb3V0LiBBIGxpbmUgc2F5cyB3aGF0IGhhcHBlbnMgdG8gdGhlIHJvd3Mgd2l0aFxuLy8gbm8gdmFsdWU6IHRoZXkgc3RheSwgdW5sZXNzIHRoZSBncm91cCdzIGJsYW5rIGxhYmVsIGlzIG9uZSBvZiB0aGUgdmFsdWVzXG4vLyBsZWZ0IG91dC4gV2hpbGUgdGhlIGJsYW5rIGxhYmVsIGlzIHVua25vd24gKHVuZGVmaW5lZCkgdGhlIGxpbmUgc2F5c1xuLy8gbm90aGluZyBhYm91dCB0aGVtOiBhIGJsYW5rIGxhYmVsIGFtb25nIHRoZSBwaWNrcyB3b3VsZCBtYWtlICdhcmUga2VwdCdcbi8vIGZhbHNlLlxuZnVuY3Rpb24gZXhjbHVkZVRleHQoXG4gIGxhYmVsOiBzdHJpbmcsXG4gIHZhbHVlczogdW5rbm93bltdLFxuICBjb250ZXh0OiBSZXBvcnRGaWx0ZXJMaW5lQ29udGV4dCxcbiAgZm9ybTogUmVwb3J0RmlsdGVyTGluZUZvcm0sXG4pOiBzdHJpbmcge1xuICBjb25zdCB0ZXh0ID0gcGlja05hbWVzKHZhbHVlcywgY29udGV4dCkuam9pbignLCAnKTtcbiAgY29uc3QgYmxhbmtMYWJlbCA9IGNvbnRleHQuYmxhbmtMYWJlbDtcblxuICBpZiAoZm9ybSA9PT0gJ2NoaXAnIHx8IGJsYW5rTGFiZWwgPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiB0ZXh0O1xuICB9XG5cbiAgY29uc3QgYmxhbmsgPSBibGFua0xhYmVsICE9PSBudWxsICYmIHZhbHVlcy5zb21lKCh2YWx1ZSkgPT4gU3RyaW5nKHZhbHVlKSA9PT0gYmxhbmtMYWJlbCk7XG5cbiAgcmV0dXJuIGAke3RleHR9IChyb3dzIHdpdGggbm8gJHtsYWJlbH0gJHtibGFuayA/ICdhcmUgbGVmdCBvdXQnIDogJ2FyZSBrZXB0J30pYDtcbn1cblxuLy8gQSBudW1iZXIgcmFuZ2UncyBlbmRzIGluIHRoZSByZXBvcnQncyBsb2NhbGUsIG9yIG51bGwgd2l0aCBuZWl0aGVyLlxuZnVuY3Rpb24gcmFuZ2VUZXh0KHZhbHVlOiBGaWx0ZXJHcm91cFZhbHVlLCBjb250ZXh0OiBSZXBvcnRGaWx0ZXJMaW5lQ29udGV4dCwgZm9ybTogUmVwb3J0RmlsdGVyTGluZUZvcm0pOiBzdHJpbmcgfCBudWxsIHtcbiAgY29uc3QgbWluID0gZmluaXRlTnVtYmVyKHZhbHVlLm1pbik7XG4gIGNvbnN0IG1heCA9IGZpbml0ZU51bWJlcih2YWx1ZS5tYXgpO1xuICBjb25zdCB3cml0ZSA9IChlbmQ6IG51bWJlcikgPT4gZm9ybWF0UGxhaW5OdW1iZXIoZW5kLCBjb250ZXh0LmxvY2FsZSk7XG5cbiAgaWYgKG1pbiAhPT0gdW5kZWZpbmVkICYmIG1heCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIGAke3dyaXRlKG1pbil9IHRvICR7d3JpdGUobWF4KX0ke2Zvcm0gPT09ICdsaW5lJyA/ICcgKGJvdGggaW5jbHVkZWQpJyA6ICcnfWA7XG4gIH1cblxuICBpZiAobWluICE9PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gYCR7d3JpdGUobWluKX0gb3IgbW9yZWA7XG4gIH1cblxuICByZXR1cm4gbWF4ICE9PSB1bmRlZmluZWQgPyBgJHt3cml0ZShtYXgpfSBvciBsZXNzYCA6IG51bGw7XG59XG5cbi8vIFRoZSBwaWNrcycgbmFtZXM6IHRoZSBvbmVzIHRoZSBjYWxsZXIgcmVzb2x2ZWQsIGVsc2UgZWFjaCBwaWNrIGFzIHN0b3JlZC5cbmZ1bmN0aW9uIHBpY2tOYW1lcyh2YWx1ZXM6IHVua25vd25bXSwgY29udGV4dDogUmVwb3J0RmlsdGVyTGluZUNvbnRleHQpOiBzdHJpbmdbXSB7XG4gIGNvbnN0IG5hbWVzID0gY29udGV4dC5uYW1lcztcblxuICByZXR1cm4gdmFsdWVzLm1hcCgodmFsdWUsIGluZGV4KSA9PiBuYW1lcz8uW2luZGV4XSA/PyBTdHJpbmcodmFsdWUpKTtcbn1cblxuLy8gT25lIGdyb3VwJ3MgbGluZSwgb25jZSBpdHMgcGlja3MgYXJlIG5hbWVkLiBBbiBleGNsdWRlIGxpbmUgc2F5cyB3aGF0XG4vLyBoYXBwZW5zIHRvIHRoZSBibGFuayByb3dzIGZyb20gdGhlIGdyb3VwJ3MgYmxhbmsgbGFiZWwsIHdoaWNoIHRoZSBzZXJ2ZXJcbi8vIHNlbmRzIG9uIGEgc2VsZWN0IGdyb3VwIChudWxsOiBibGFuayByb3dzIGhhdmUgbm9uZSkuIEFuIG9sZGVyIHNlcnZlclxuLy8gc2VuZHMgbm9uZSwgYW5kIHRoZSBsaW5lIHRoZW4gc2F5cyBub3RoaW5nIGFib3V0IHRoZW0uXG5mdW5jdGlvbiBncm91cExpbmUoZ3JvdXA6IFJlcG9ydEZpbHRlckdyb3VwLCBpbnB1dDogUmVwb3J0RXhwb3J0TGluZXNJbnB1dCk6IE9ic2VydmFibGU8UmVwb3J0RXhwb3J0TGluZSB8IG51bGw+IHtcbiAgY29uc3Qgc25hcHNob3QgPSBpbnB1dC5zbmFwc2hvdDtcbiAgY29uc3QgdmFsdWUgPSBzbmFwc2hvdC52YWx1ZXNbZ3JvdXAuaWRdO1xuXG4gIGlmICghdmFsdWUpIHtcbiAgICByZXR1cm4gb2YobnVsbCk7XG4gIH1cblxuICBjb25zdCBwaWNrcyA9IHZhbHVlLnN0YXJ0IHx8IHZhbHVlLmVuZCA/IFtdIDogKHZhbHVlLnZhbHVlcz8ubGVuZ3RoID8gdmFsdWUudmFsdWVzIDogdmFsdWUuZXhjbHVkZVZhbHVlcyA/PyBbXSk7XG4gIGNvbnN0IG5hbWVzJCA9IHBpY2tzLmxlbmd0aFxuICAgID8gaW5wdXQubmFtZXMoZ3JvdXAsIHBpY2tzKS5waXBlKGNhdGNoRXJyb3IoKCkgPT4gb2YobnVsbCkpKVxuICAgIDogb2YobnVsbCk7XG5cbiAgcmV0dXJuIG5hbWVzJC5waXBlKFxuICAgIG1hcCgobmFtZXMpOiBSZXBvcnRFeHBvcnRMaW5lIHwgbnVsbCA9PiB7XG4gICAgICBjb25zdCB0ZXh0ID0gZmlsdGVyTGluZVRleHQoZ3JvdXAsIHZhbHVlLCB7XG4gICAgICAgIGxvY2FsZTogc25hcHNob3QuZm9ybWF0Q29udGV4dC5sb2NhbGUsXG4gICAgICAgIG5hbWVzLFxuICAgICAgICBwcmVzZXQ6IHNuYXBzaG90LnByZXNldHNbZ3JvdXAuaWRdID8/IG51bGwsXG4gICAgICAgIHBhZ2VOYW1lOiBwYWdlTmFtZShpbnB1dC5yZXBvcnQsIGdyb3VwLnBhZ2VJZCksXG4gICAgICAgIGJsYW5rTGFiZWw6IGdyb3VwLmJsYW5rTGFiZWwsXG4gICAgICB9LCAnbGluZScpO1xuXG4gICAgICByZXR1cm4gdGV4dCA/IHsga2luZDogJ2dyb3VwJywgdGV4dCwgZ3JvdXBJZDogZ3JvdXAuaWQgfSA6IG51bGw7XG4gICAgfSksXG4gICk7XG59XG5cbi8vIFRoZSBncm91cC1ieSBncmFpbiB1bmRlciB0aGUgcmVwb3J0J3Mgb3duIG5hbWUgZm9yIHRoZSBjb250cm9sLCBvciBudWxsXG4vLyB3aGlsZSBubyBncmFpbiBpcyBwaWNrZWQuXG5mdW5jdGlvbiBncm91cEJ5TGluZShpbnB1dDogUmVwb3J0RXhwb3J0TGluZXNJbnB1dCk6IFJlcG9ydEV4cG9ydExpbmUgfCBudWxsIHtcbiAgY29uc3QgZnJlcXVlbmN5ID0gaW5wdXQuc25hcHNob3QuZnJlcXVlbmN5O1xuXG4gIGlmICghZnJlcXVlbmN5KSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zdCBvcHRpb24gPSBHUkFOVUxBUklUWV9PUFRJT05TLmZpbmQoKGl0ZW0pID0+IGl0ZW0udmFsdWUgPT09IGZyZXF1ZW5jeSk7XG4gIGNvbnN0IGxhYmVsID0gaW5wdXQucmVwb3J0LmNvbmZpZz8uZ3JvdXBCeT8ubGFiZWwgfHwgR1JPVVBfQllfTEFCRUw7XG5cbiAgcmV0dXJuIHsga2luZDogJ2dyb3VwQnknLCB0ZXh0OiBgJHtsYWJlbH06ICR7b3B0aW9uPy5uYW1lID8/IGZyZXF1ZW5jeX1gIH07XG59XG5cbi8vIE9uZSBsaW5lIHBlciBkcmlsbGVkIGNoYXJ0IG9mIHRoZSBleHBvcnQncyBwYWdlcywgd2hpbGUgdGhlIHNlcnZlciBkcmlsbHMuXG5mdW5jdGlvbiBkcmlsbExpbmVzKGlucHV0OiBSZXBvcnRFeHBvcnRMaW5lc0lucHV0KTogUmVwb3J0RXhwb3J0TGluZVtdIHtcbiAgY29uc3QgeyByZXBvcnQsIHNuYXBzaG90LCBwYWdlSWQgfSA9IGlucHV0O1xuXG4gIGlmICghc25hcHNob3QuZmVhdHVyZXMuaW5jbHVkZXMoJ2RyaWxsJykpIHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICByZXR1cm4gKHJlcG9ydC5wYWdlcyA/PyBbXSlcbiAgICAuZmlsdGVyKChwYWdlKSA9PiAhcGFnZUlkIHx8IHBhZ2UuaWQgPT09IHBhZ2VJZClcbiAgICAuZmxhdE1hcCgocGFnZSkgPT4gcGFnZS5jb21wb25lbnRzID8/IFtdKVxuICAgIC5maWx0ZXIoKGNvbXBvbmVudCkgPT4gY29tcG9uZW50LnR5cGUgPT09ICdjaGFydCcgJiYgISFzbmFwc2hvdC52aWV3LnRpbGVzPy5bY29tcG9uZW50LmlkXT8uZHJpbGw/Lmxlbmd0aClcbiAgICAubWFwKChjb21wb25lbnQpOiBSZXBvcnRFeHBvcnRMaW5lID0+ICh7XG4gICAgICBraW5kOiAnZHJpbGwnLFxuICAgICAgdGV4dDogZHJpbGxMaW5lVGV4dChjb21wb25lbnQsIHNuYXBzaG90LnZpZXcudGlsZXNbY29tcG9uZW50LmlkXS5kcmlsbCwgc25hcHNob3QuZm9ybWF0Q29udGV4dCksXG4gICAgICBjb21wb25lbnRJZDogY29tcG9uZW50LmlkLFxuICAgIH0pKTtcbn1cblxuLy8gVGhlIHRpbGVzIGEgZ3JvdXAncyBtZW1iZXJzIHNpdCBvbjogdGhlIHNlcnZlcidzIGxpc3QsIGVsc2UgdGhlIHRpbGVzIG9mXG4vLyBpdHMgZW5hYmxlZCBtZW1iZXJzIChhbiBvbGRlciBzZXJ2ZXIpLlxuZnVuY3Rpb24gZ3JvdXBNZW1iZXJJZHMoZ3JvdXA6IFJlcG9ydEZpbHRlckdyb3VwKTogbnVtYmVyW10ge1xuICByZXR1cm4gZ3JvdXAuY29tcG9uZW50SWRzXG4gICAgPz8gKGdyb3VwLmZpbHRlcnMgPz8gW10pLmZpbHRlcigobWVtYmVyKSA9PiBtZW1iZXIuZW5hYmxlZCkubWFwKChtZW1iZXIpID0+IG1lbWJlci5jb21wb25lbnRJZCk7XG59XG5cbi8vIEEgcGFnZSdzIG5hbWUgYXMgdGhlIGV4cG9ydCBuYW1lcyBpdCAoJ1BhZ2UgMicgd2hlbiBpdCBoYXMgbm9uZSksIG9yIG51bGxcbi8vIGZvciBubyBwYWdlLlxuZnVuY3Rpb24gcGFnZU5hbWUocmVwb3J0OiBSZXBvcnQsIHBhZ2VJZDogbnVtYmVyIHwgbnVsbCB8IHVuZGVmaW5lZCk6IHN0cmluZyB8IG51bGwge1xuICBjb25zdCBpbmRleCA9IHBhZ2VJZCA/IChyZXBvcnQucGFnZXMgPz8gW10pLmZpbmRJbmRleCgocGFnZSkgPT4gcGFnZS5pZCA9PT0gcGFnZUlkKSA6IC0xO1xuXG4gIGlmIChpbmRleCA8IDApIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHJldHVybiByZXBvcnQucGFnZXNbaW5kZXhdLm5hbWUgfHwgYFBhZ2UgJHtpbmRleCArIDF9YDtcbn1cbiJdfQ==
|
|
242
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwb3J0LWZpbHRlci1saW5lcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvcmVwb3J0cy9leHBvcnQvcmVwb3J0LWZpbHRlci1saW5lcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWMsUUFBUSxFQUFFLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNoRCxPQUFPLEVBQUUsVUFBVSxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRWpELE9BQU8sRUFBRSxZQUFZLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNqRSxPQUFPLEVBQUUsY0FBYyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sV0FBVyxDQUFDO0FBTzlELE9BQU8sRUFFTCxtQkFBbUIsR0FLcEIsTUFBTSxnQ0FBZ0MsQ0FBQztBQUN4QyxPQUFPLEVBQUUsY0FBYyxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN4RixPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRy9DLDJFQUEyRTtBQUMzRSw0REFBNEQ7QUFDNUQsNEVBQTRFO0FBQzVFLHlFQUF5RTtBQUN6RSw0RUFBNEU7QUFHNUUsMEVBQTBFO0FBQzFFLHNFQUFzRTtBQUN0RSxvQkFBb0I7QUFDcEIsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUFHLG1CQUFtQixDQUFDO0FBQ2xELE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FBRyxzQ0FBc0MsQ0FBQztBQUVyRSwyRUFBMkU7QUFDM0UseUJBQXlCO0FBQ3pCLE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FBRyxvQkFBb0IsQ0FBQztBQUVuRCxvQ0FBb0M7QUFDcEMsTUFBTSxlQUFlLEdBQUcsUUFBUSxDQUFDO0FBRWpDLG1FQUFtRTtBQUNuRSxNQUFNLGNBQWMsR0FB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LFNBQVMsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFFekYsSUFBSSxLQUFLLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDZCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxPQUFPLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxJQUFJLFFBQVEsS0FBSyxHQUFHLENBQUMsRUFBRSxDQUFDO0FBQ3pELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBPYnNlcnZhYmxlLCBmb3JrSm9pbiwgb2YgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGNhdGNoRXJyb3IsIG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgY3J1bWJlZFRpdGxlLCBkcmlsbENydW1iTGFiZWxzIH0gZnJvbSAnLi4vZHJpbGwtY3J1bWJzJztcbmltcG9ydCB7IGZvcm1hdERheVJhbmdlLCBmb3JtYXRQbGFpbk51bWJlciB9IGZyb20gJy4uL2Zvcm1hdCc7XG5pbXBvcnQgeyBSZXBvcnREcmlsbFN0ZXAgfSBmcm9tICcuLi9pbnRlcmZhY2VzL3JlcG9ydC1kcmlsbC1zdGVwLmludGVyZmFjZSc7XG5pbXBvcnQgeyBSZXBvcnRFeHBvcnRMaW5lIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9yZXBvcnQtZXhwb3J0LWxpbmUuaW50ZXJmYWNlJztcbmltcG9ydCB7IFJlcG9ydEV4cG9ydExpbmVzSW5wdXQgfSBmcm9tICcuLi9pbnRlcmZhY2VzL3JlcG9ydC1leHBvcnQtbGluZXMtaW5wdXQuaW50ZXJmYWNlJztcbmltcG9ydCB7IFJlcG9ydEZpbHRlckxpbmVDb250ZXh0IH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9yZXBvcnQtZmlsdGVyLWxpbmUtY29udGV4dC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgUmVwb3J0RmlsdGVyTGluZUZvcm0gfSBmcm9tICcuLi9pbnRlcmZhY2VzL3JlcG9ydC1maWx0ZXItbGluZS1mb3JtLnR5cGUnO1xuaW1wb3J0IHsgUmVwb3J0RmlsdGVyTWF0Y2ggfSBmcm9tICcuLi9pbnRlcmZhY2VzL3JlcG9ydC1maWx0ZXItbWF0Y2gudHlwZSc7XG5pbXBvcnQge1xuICBGaWx0ZXJHcm91cFZhbHVlLFxuICBHUkFOVUxBUklUWV9PUFRJT05TLFxuICBSZXBvcnQsXG4gIFJlcG9ydENvbXBvbmVudCxcbiAgUmVwb3J0RmlsdGVyR3JvdXAsXG4gIFJlcG9ydEZvcm1hdENvbnRleHQsXG59IGZyb20gJy4uL2ludGVyZmFjZXMvcmVwb3J0LmludGVyZmFjZSc7XG5pbXBvcnQgeyBkYXRlQm91bmRMYWJlbCwgZGF0ZUJvdW5kU3RyaW5nLCByZWxhdGl2ZUxhYmVsIH0gZnJvbSAnLi4vcmVwb3J0LWZpbHRlci1pdGVtcyc7XG5pbXBvcnQgeyBpc1RpbGUgfSBmcm9tICcuLi9yZXBvcnQtdGlsZSc7XG5pbXBvcnQgeyBmaW5pdGVOdW1iZXIgfSBmcm9tICcuLi9yZXBvcnQtc3RhdGUnO1xuXG5cbi8vIFRoZSB3b3JkcyBhIGZpbGUgdXNlcyBmb3Igd2hhdCB0aGUgc2NyZWVuIGhlbGQ6IGVhY2ggZmlsdGVyJ3MgdmFsdWUsIHRoZVxuLy8gZ3JvdXAtYnkgZ3JhaW4sIGEgZHJpbGxlZCB0aWxlIGFuZCB0aGUgbWF0Y2guIFRoZSBQREYgYW5kXG4vLyBQb3dlclBvaW50IGNvdmVycyBwcmludCB0aGVzZSBsaW5lcywgYW5kIHRoZSB6aXAgc2VuZHMgdGhlbSAoZmlsdGVyTGluZXMsXG4vLyB3aXRoIGZpbHRlclN1bW1hcnkgYXMgdGhlaXIgdGV4dCBmb3IgYW4gb2xkZXIgc2VydmVyKSwgc28gZXZlcnkgZXhwb3J0XG4vLyB3b3JkcyBvbmUgZmlsdGVyIG9uZSB3YXkuIFB1cmUsIHNvIHRoZSBub2RlIGhhcm5lc3MgY2hlY2tzIGV2ZXJ5IHdvcmRpbmcuXG5cblxuLy8gVGhlIG1hdGNoIHdoaWxlIHRoZSByZXBvcnQgYmFyJ3MgZmlsdGVycyBjb21iaW5lIHdpdGggJ2FueSc6IHRoZSBjaGlwJ3Ncbi8vIHdvcmRzLCBhbmQgdGhlIGNvdmVyJ3MgbGluZS4gVGhlIHppcCdzIG5vdGVzIGNhcnJ5IHRoZSBzZXJ2ZXIncyBvd25cbi8vIHNlbnRlbmNlIGluc3RlYWQuXG5leHBvcnQgY29uc3QgTUFUQ0hfQU5ZX0NISVAgPSAnTWF0Y2g6IGFueSBmaWx0ZXInO1xuZXhwb3J0IGNvbnN0IE1BVENIX0FOWV9MSU5FID0gJ0ZpbHRlcnMgaW4gdGhlIHJlcG9ydCBiYXI6IG1hdGNoIGFueSc7XG5cbi8vIFRoZSByZXBvcnQgYmFyJ3MgTWF0Y2ggY2hpcCB3aGlsZSB0aGUgZmlsdGVycyBjb21iaW5lIHdpdGggJ2FsbCcuIEEgZmlsZVxuLy8gcHJpbnRzIG5vIGxpbmUgZm9yIGl0LlxuZXhwb3J0IGNvbnN0IE1BVENIX0FMTF9DSElQID0gJ01hdGNoOiBhbGwgZmlsdGVycyc7XG5cbi8vIEEgZ3JvdXAncyBsYWJlbCB3aGVuIGl0IGhhcyBub25lLlxuY29uc3QgVU5MQUJFTEVEX0dST1VQID0gJ0ZpbHRlcic7XG5cbi8vIFRoZSBsYWJlbCBvZiB0aGUgZ3JvdXAtYnkgbGluZSB3aGVuIHRoZSByZXBvcnQgbmFtZXMgbm8gY29udHJvbC5cbmNvbnN0IEdST1VQX0JZX0xBQkVMID0gJ0dyb3VwIEJ5JztcblxuXG4vLyBPbmUgZmlsdGVyIGdyb3VwJ3MgdmFsdWUgYXMgdGV4dCAoJ1JlZ2lvbjogV2VzdCwgRWFzdCcpLCBvciBudWxsIHdoZW4gdGhlXG4vLyB2YWx1ZSBob2xkcyBub3RoaW5nLiBWYWx1ZXMgbGVmdCBvdXQgc2F5IHNvIGJlZm9yZSB0aGUgbGFiZWw6ICdFeGNsdWRlXG4vLyBSZWdpb246IFdlc3QsIEVhc3QnLiAnY2hpcCcgaXMgdGhlIHNob3J0IGZvcm07ICdsaW5lJyBhZGRzIHdoYXQgYSBmaWxlXG4vLyByZWFkZXIgY2Fubm90IHNlZSBvbiBzY3JlZW46XG4vLyAtIGV4Y2x1ZGU6ICdFeGNsdWRlIFJlZ2lvbjogV2VzdCwgRWFzdCAocm93cyB3aXRoIG5vIFJlZ2lvbiBhcmUga2VwdCknLCBvclxuLy8gICAnLi4uIGFyZSBsZWZ0IG91dCcgd2hlbiB0aGUgYmxhbmsgbGFiZWwgKGNvbnRleHQuYmxhbmtMYWJlbCkgaXMgb25lIG9mXG4vLyAgIHRoZSB2YWx1ZXMgbGVmdCBvdXQuIFdpdGhvdXQgYSBrbm93biBibGFuayBsYWJlbCB0aGUgbGluZSBzYXlzIG5vdGhpbmdcbi8vICAgYWJvdXQgdGhlIGJsYW5rIHJvd3M7XG4vLyAtIHJhbmdlOiAnQW1vdW50OiAxMCB0byA1MCAoYm90aCBpbmNsdWRlZCknOyBhbiBvcGVuIGVuZCByZWFkcyAnMTAgb3Jcbi8vICAgbW9yZScgb3IgJzUwIG9yIGxlc3MnIGluIGJvdGggZm9ybXM7XG4vLyAtIGEgbGl2ZSBwcmVzZXQ6ICdSZXBvcnQgUGVyaW9kOiBMYXN0IDMwIGRheXMgKFNlcCAzIOKAkyBPY3QgMiwgMjAyNiknO1xuLy8gLSBhIHBhZ2UgZ3JvdXA6ICdDb2hvcnQgKHBhZ2UgXCJSZXRlbnRpb25cIiBvbmx5KTogMjAyNScuXG4vLyBOdW1iZXJzIGFuZCBkYXRlcyBhcmUgd3JpdHRlbiBpbiB0aGUgcmVwb3J0J3MgbG9jYWxlLCBhbmQgMCBpcyBhIG51bWJlclxuLy8gbGlrZSBhbnkgb3RoZXIuXG5leHBvcnQgZnVuY3Rpb24gZmlsdGVyTGluZVRleHQoXG4gIGdyb3VwOiBQaWNrPFJlcG9ydEZpbHRlckdyb3VwLCAnbGFiZWwnIHwgJ2xldmVsJz4sXG4gIHZhbHVlOiBGaWx0ZXJHcm91cFZhbHVlIHwgbnVsbCB8IHVuZGVmaW5lZCxcbiAgY29udGV4dDogUmVwb3J0RmlsdGVyTGluZUNvbnRleHQsXG4gIGZvcm06IFJlcG9ydEZpbHRlckxpbmVGb3JtLFxuKTogc3RyaW5nIHwgbnVsbCB7XG4gIGNvbnN0IGxhYmVsID0gZ3JvdXAubGFiZWwgfHwgVU5MQUJFTEVEX0dST1VQO1xuICBjb25zdCB0ZXh0ID0gdmFsdWUgPyB2YWx1ZVRleHQobGFiZWwsIHZhbHVlLCBjb250ZXh0LCBmb3JtKSA6IG51bGw7XG5cbiAgaWYgKHRleHQgPT09IG51bGwpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNvbnN0IHBhZ2VPbmx5ID0gZm9ybSA9PT0gJ2xpbmUnICYmIGdyb3VwLmxldmVsID09PSAncGFnZScgJiYgY29udGV4dC5wYWdlTmFtZTtcbiAgY29uc3QgbmFtZSA9IHBhZ2VPbmx5ID8gYCR7bGFiZWx9IChwYWdlIFwiJHtjb250ZXh0LnBhZ2VOYW1lfVwiIG9ubHkpYCA6IGxhYmVsO1xuXG4gIHJldHVybiBgJHtleGNsdWRlcyh2YWx1ZSkgPyAnRXhjbHVkZSAnIDogJyd9JHtuYW1lfTogJHt0ZXh0fWA7XG59XG5cbi8vIFRoZSB3b3JkcyBvZiBvbmUgZmlsdGVyJ3MgdmFsdWUgYXMgaXRzIGNoaXAgcmVhZHMgdGhlbSBhZnRlciB0aGUgbGFiZWxcbi8vICgnV2VzdCwgRWFzdCcsICcwIHRvIDEwJywgJzAgb3IgbW9yZScsICc1MCBvciBsZXNzJyksIG9yIG51bGwgd2hlbiB0aGVcbi8vIHZhbHVlIGhvbGRzIG5vdGhpbmcuIFZhbHVlcyBsZWZ0IG91dCByZWFkIGFzIHRoZWlyIG5hbWVzOiBmaWx0ZXJMaW5lVGV4dFxuLy8gcHV0cyAnRXhjbHVkZScgYmVmb3JlIHRoZSBsYWJlbCwgYW5kIGEge3tmaWx0ZXIuPGlkPn19IHRva2VuIHJlYWRzIHRoZW0gYXNcbi8vICdBbGwgZXhjZXB0IFdlc3QnLiBUaGUgb25lIHNvdXJjZSBvZiB0aGVzZSB3b3Jkcywgc28gdGhlIGNoaXAsIGEgZmlsZSdzXG4vLyBjb3ZlciBhbmQgYSB0b2tlbiBuZXZlciB3b3JkIGEgdmFsdWUgdHdvIHdheXMuXG5leHBvcnQgZnVuY3Rpb24gZmlsdGVyQ2hpcFZhbHVlVGV4dChcbiAgdmFsdWU6IEZpbHRlckdyb3VwVmFsdWUgfCBudWxsIHwgdW5kZWZpbmVkLFxuICBjb250ZXh0OiBSZXBvcnRGaWx0ZXJMaW5lQ29udGV4dCxcbik6IHN0cmluZyB8IG51bGwge1xuICByZXR1cm4gdmFsdWUgPyB2YWx1ZVRleHQoJycsIHZhbHVlLCBjb250ZXh0LCAnY2hpcCcpIDogbnVsbDtcbn1cblxuLy8gV2hldGhlciBhIHZhbHVlIGlzIHdvcmRlZCBhcyB2YWx1ZXMgbGVmdCBvdXQ6IHRoZSBzYW1lIG9yZGVyIHZhbHVlVGV4dFxuLy8gcmVhZHMgYSB2YWx1ZSBpbiwgc28gYSB2YWx1ZSB3aXRoIGRheXMgb3Iga2VwdCBwaWNrcyBpcyBuZXZlciBvbmUuXG5leHBvcnQgZnVuY3Rpb24gZXhjbHVkZXModmFsdWU6IEZpbHRlckdyb3VwVmFsdWUgfCBudWxsIHwgdW5kZWZpbmVkKTogYm9vbGVhbiB7XG4gIHJldHVybiAhIXZhbHVlICYmICF2YWx1ZS5zdGFydCAmJiAhdmFsdWUuZW5kICYmICF2YWx1ZS52YWx1ZXM/Lmxlbmd0aCAmJiAhIXZhbHVlLmV4Y2x1ZGVWYWx1ZXM/Lmxlbmd0aDtcbn1cblxuLy8gVGhlIHBpY2tzIGEgdmFsdWUgbmFtZXMsIGtlcHQgb3IgbGVmdCBvdXQsIGluIHBpY2sgb3JkZXI6IHdoYXQgYSBzZWxlY3Qnc1xuLy8gbmFtZXMgYXJlIHJlYWQgZm9yLiBOb25lIGZvciBhIGRhdGUgcmFuZ2UuXG5leHBvcnQgZnVuY3Rpb24gdmFsdWVQaWNrcyh2YWx1ZTogRmlsdGVyR3JvdXBWYWx1ZSB8IG51bGwgfCB1bmRlZmluZWQpOiB1bmtub3duW10ge1xuICBpZiAoIXZhbHVlIHx8IHZhbHVlLnN0YXJ0IHx8IHZhbHVlLmVuZCkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIHJldHVybiB2YWx1ZS52YWx1ZXM/Lmxlbmd0aCA/IHZhbHVlLnZhbHVlcyA6IHZhbHVlLmV4Y2x1ZGVWYWx1ZXMgPz8gW107XG59XG5cbi8vIFRoZSBtYXRjaCBhcyB0ZXh0IHdoaWxlIGl0IGlzICdhbnknLCBlbHNlIG51bGw7IHRoZSBjaGlwIGFsc28gd29yZHMgJ2FsbCcuXG5leHBvcnQgZnVuY3Rpb24gbWF0Y2hMaW5lVGV4dChtYXRjaDogUmVwb3J0RmlsdGVyTWF0Y2ggfCBudWxsIHwgdW5kZWZpbmVkLCBmb3JtOiBSZXBvcnRGaWx0ZXJMaW5lRm9ybSk6IHN0cmluZyB8IG51bGwge1xuICBpZiAobWF0Y2ggIT09ICdhbnknKSB7XG4gICAgcmV0dXJuIGZvcm0gPT09ICdjaGlwJyAmJiBtYXRjaCA9PT0gJ2FsbCcgPyBNQVRDSF9BTExfQ0hJUCA6IG51bGw7XG4gIH1cblxuICByZXR1cm4gZm9ybSA9PT0gJ2NoaXAnID8gTUFUQ0hfQU5ZX0NISVAgOiBNQVRDSF9BTllfTElORTtcbn1cblxuLy8gQSBkcmlsbGVkIHRpbGUncyBsaW5lOiBpdHMgdGl0bGUgYW5kIHRoZSBicmVhZGNydW1iIG9mIGl0cyBwYXRoLCBpbiB0aGVcbi8vIHJlcG9ydCdzIGxvY2FsZSAoJ1JldmVudWUgYnkgUGVyaW9kIOKAuiAyMDI2IOKAuiBRMycpLlxuZXhwb3J0IGZ1bmN0aW9uIGRyaWxsTGluZVRleHQoXG4gIGNvbXBvbmVudDogUGljazxSZXBvcnRDb21wb25lbnQsICd0aXRsZSc+LFxuICBwYXRoOiByZWFkb25seSBSZXBvcnREcmlsbFN0ZXBbXSxcbiAgZm9ybWF0Q29udGV4dDogUGljazxSZXBvcnRGb3JtYXRDb250ZXh0LCAnbG9jYWxlJz4sXG4pOiBzdHJpbmcge1xuICByZXR1cm4gY3J1bWJlZFRpdGxlKGNvbXBvbmVudC50aXRsZSwgZHJpbGxDcnVtYkxhYmVscyhwYXRoLCBmb3JtYXRDb250ZXh0KSk7XG59XG5cbi8vIFRoZSBmaWx0ZXIgbGluZXMgb2YgYW4gZXhwb3J0LCBpbiBvcmRlcjogb25lIHBlciBmaWx0ZXIgZ3JvdXAgd2l0aCBhXG4vLyB2YWx1ZSAodGhlIHJlcG9ydCdzIGdyb3VwIG9yZGVyKSwgdGhlIGdyb3VwLWJ5IGxpbmUsIHRoZW4gb25lIHBlciBkcmlsbGVkXG4vLyBjaGFydCAocGFnZSBvcmRlcikuIEEgVGhpcyBQYWdlIGV4cG9ydCAoaW5wdXQucGFnZUlkKSBsaXN0cyBvbmx5IHRoZVxuLy8gZ3JvdXBzIHRoYXQgcmVhY2ggYSB0aWxlIG9mIHRoYXQgcGFnZSwgYW5kIG9ubHkgdGhhdCBwYWdlJ3MgZHJpbGxlZFxuLy8gY2hhcnRzLiBBIHNlbGVjdCdzIG5hbWVzIGFyZSBhIHJlcXVlc3QsIHNvIHRoZSBsaW5lcyBhcnJpdmUgdG9nZXRoZXIgb25jZVxuLy8gZXZlcnkgbmFtZSBpcyBrbm93bjsgYSBmYWlsZWQgbmFtZSByZWFkIHdyaXRlcyB0aGUgcGlja3MgYXMgdGhleSBhcmVcbi8vIHN0b3JlZC5cbmV4cG9ydCBmdW5jdGlvbiBleHBvcnRMaW5lcyhpbnB1dDogUmVwb3J0RXhwb3J0TGluZXNJbnB1dCk6IE9ic2VydmFibGU8UmVwb3J0RXhwb3J0TGluZVtdPiB7XG4gIGNvbnN0IGdyb3VwcyQgPSBleHBvcnRHcm91cHMoaW5wdXQucmVwb3J0LCBpbnB1dC5wYWdlSWQpXG4gICAgLm1hcCgoZ3JvdXApID0+IGdyb3VwTGluZShncm91cCwgaW5wdXQpKTtcbiAgY29uc3QgcmVzdCA9IFtncm91cEJ5TGluZShpbnB1dCksIC4uLmRyaWxsTGluZXMoaW5wdXQpXVxuICAgIC5maWx0ZXIoKGxpbmUpOiBsaW5lIGlzIFJlcG9ydEV4cG9ydExpbmUgPT4gbGluZSAhPT0gbnVsbCk7XG5cbiAgcmV0dXJuIChncm91cHMkLmxlbmd0aCA/IGZvcmtKb2luKGdyb3VwcyQpIDogb2YoW10pKVxuICAgIC5waXBlKFxuICAgICAgbWFwKChsaW5lcykgPT4gW1xuICAgICAgICAuLi5saW5lcy5maWx0ZXIoKGxpbmUpOiBsaW5lIGlzIFJlcG9ydEV4cG9ydExpbmUgPT4gbGluZSAhPT0gbnVsbCksXG4gICAgICAgIC4uLnJlc3QsXG4gICAgICBdKSxcbiAgICApO1xufVxuXG4vLyBUaGUgZ3JvdXBzIGFuIGV4cG9ydCdzIGxpbmVzIG1heSBuYW1lOiBldmVyeSBncm91cCwgb3IgZm9yIGEgVGhpcyBQYWdlXG4vLyBleHBvcnQgdGhlIGdyb3VwcyB3aXRoIGEgbWVtYmVyIHRpbGUgb24gdGhhdCBwYWdlLiBBIHBhZ2UgZ3JvdXAgcmVhY2hlc1xuLy8gb25seSBpdHMgb3duIHBhZ2UuXG5leHBvcnQgZnVuY3Rpb24gZXhwb3J0R3JvdXBzKHJlcG9ydDogUmVwb3J0LCBwYWdlSWQ6IG51bWJlciB8IG51bGwpOiBSZXBvcnRGaWx0ZXJHcm91cFtdIHtcbiAgY29uc3QgZ3JvdXBzID0gcmVwb3J0LmZpbHRlckdyb3VwcyA/PyBbXTtcblxuICBpZiAoIXBhZ2VJZCkge1xuICAgIHJldHVybiBncm91cHM7XG4gIH1cblxuICBjb25zdCBwYWdlID0gKHJlcG9ydC5wYWdlcyA/PyBbXSkuZmluZCgoY2FuZGlkYXRlKSA9PiBjYW5kaWRhdGUuaWQgPT09IHBhZ2VJZCk7XG4gIGNvbnN0IHRpbGVJZHMgPSAocGFnZT8uY29tcG9uZW50cyA/PyBbXSlcbiAgICAuZmlsdGVyKChjb21wb25lbnQpID0+IGlzVGlsZShjb21wb25lbnQpKVxuICAgIC5tYXAoKGNvbXBvbmVudCkgPT4gY29tcG9uZW50LmlkKTtcblxuICByZXR1cm4gZ3JvdXBzLmZpbHRlcigoZ3JvdXApID0+IChncm91cC5sZXZlbCAhPT0gJ3BhZ2UnIHx8IGdyb3VwLnBhZ2VJZCA9PT0gcGFnZUlkKVxuICAgICYmIGdyb3VwTWVtYmVySWRzKGdyb3VwKS5zb21lKChjb21wb25lbnRJZCkgPT4gdGlsZUlkcy5pbmNsdWRlcyhjb21wb25lbnRJZCkpKTtcbn1cblxuLy8gVGhlIHRleHQgYWZ0ZXIgdGhlIGxhYmVsLCBvciBudWxsIHdoZW4gdGhlIHZhbHVlIGhvbGRzIG5vdGhpbmcuXG5mdW5jdGlvbiB2YWx1ZVRleHQoXG4gIGxhYmVsOiBzdHJpbmcsXG4gIHZhbHVlOiBGaWx0ZXJHcm91cFZhbHVlLFxuICBjb250ZXh0OiBSZXBvcnRGaWx0ZXJMaW5lQ29udGV4dCxcbiAgZm9ybTogUmVwb3J0RmlsdGVyTGluZUZvcm0sXG4pOiBzdHJpbmcgfCBudWxsIHtcbiAgaWYgKHZhbHVlLnN0YXJ0IHx8IHZhbHVlLmVuZCkge1xuICAgIHJldHVybiBkYXRlVGV4dCh2YWx1ZSwgY29udGV4dCwgZm9ybSk7XG4gIH1cblxuICBpZiAodmFsdWUudmFsdWVzPy5sZW5ndGgpIHtcbiAgICByZXR1cm4gcGlja05hbWVzKHZhbHVlLnZhbHVlcywgY29udGV4dCkuam9pbignLCAnKTtcbiAgfVxuXG4gIGlmICh2YWx1ZS5leGNsdWRlVmFsdWVzPy5sZW5ndGgpIHtcbiAgICByZXR1cm4gZXhjbHVkZVRleHQobGFiZWwsIHZhbHVlLmV4Y2x1ZGVWYWx1ZXMsIGNvbnRleHQsIGZvcm0pO1xuICB9XG5cbiAgY29uc3Qga2V5d29yZCA9IHR5cGVvZiB2YWx1ZS52YWx1ZSA9PT0gJ3N0cmluZycgPyB2YWx1ZS52YWx1ZS50cmltKCkgOiAnJztcblxuICByZXR1cm4gcmFuZ2VUZXh0KHZhbHVlLCBjb250ZXh0LCBmb3JtKSA/PyAoa2V5d29yZCA/IGBcIiR7a2V5d29yZH1cImAgOiBudWxsKTtcbn1cblxuLy8gQSBkYXRlIHJhbmdlOiBhIGxpdmUgcHJlc2V0IGJ5IGl0cyBuYW1lICh3aXRoIGl0cyBkYXlzIGluIGEgbGluZSksIGVsc2Vcbi8vIGl0cyB0d28gZGF5cyAoJ+KApicgZm9yIGFuIG9wZW4gZW5kKS5cbmZ1bmN0aW9uIGRhdGVUZXh0KHZhbHVlOiBGaWx0ZXJHcm91cFZhbHVlLCBjb250ZXh0OiBSZXBvcnRGaWx0ZXJMaW5lQ29udGV4dCwgZm9ybTogUmVwb3J0RmlsdGVyTGluZUZvcm0pOiBzdHJpbmcge1xuICBpZiAoY29udGV4dC5wcmVzZXQpIHtcbiAgICBjb25zdCBuYW1lID0gcmVsYXRpdmVMYWJlbChjb250ZXh0LnByZXNldCk7XG4gICAgY29uc3QgZGF5cyA9IGZvcm0gPT09ICdsaW5lJ1xuICAgICAgPyBmb3JtYXREYXlSYW5nZShkYXRlQm91bmRTdHJpbmcodmFsdWUuc3RhcnQpLCBkYXRlQm91bmRTdHJpbmcodmFsdWUuZW5kKSwgY29udGV4dC5sb2NhbGUpXG4gICAgICA6ICcnO1xuXG4gICAgcmV0dXJuIGRheXMgPyBgJHtuYW1lfSAoJHtkYXlzfSlgIDogbmFtZTtcbiAgfVxuXG4gIHJldHVybiBgJHtkYXRlQm91bmRMYWJlbCh2YWx1ZS5zdGFydCwgY29udGV4dC5sb2NhbGUpID8/ICfigKYnfSDigJMgJHtkYXRlQm91bmRMYWJlbCh2YWx1ZS5lbmQsIGNvbnRleHQubG9jYWxlKSA/PyAn4oCmJ31gO1xufVxuXG4vLyBUaGUgdmFsdWVzIGEgc2VsZWN0IGxlYXZlcyBvdXQuIEEgbGluZSBzYXlzIHdoYXQgaGFwcGVucyB0byB0aGUgcm93cyB3aXRoXG4vLyBubyB2YWx1ZTogdGhleSBzdGF5LCB1bmxlc3MgdGhlIGdyb3VwJ3MgYmxhbmsgbGFiZWwgaXMgb25lIG9mIHRoZSB2YWx1ZXNcbi8vIGxlZnQgb3V0LiBXaGlsZSB0aGUgYmxhbmsgbGFiZWwgaXMgdW5rbm93biAodW5kZWZpbmVkKSB0aGUgbGluZSBzYXlzXG4vLyBub3RoaW5nIGFib3V0IHRoZW06IGEgYmxhbmsgbGFiZWwgYW1vbmcgdGhlIHBpY2tzIHdvdWxkIG1ha2UgJ2FyZSBrZXB0J1xuLy8gZmFsc2UuXG5mdW5jdGlvbiBleGNsdWRlVGV4dChcbiAgbGFiZWw6IHN0cmluZyxcbiAgdmFsdWVzOiB1bmtub3duW10sXG4gIGNvbnRleHQ6IFJlcG9ydEZpbHRlckxpbmVDb250ZXh0LFxuICBmb3JtOiBSZXBvcnRGaWx0ZXJMaW5lRm9ybSxcbik6IHN0cmluZyB7XG4gIGNvbnN0IHRleHQgPSBwaWNrTmFtZXModmFsdWVzLCBjb250ZXh0KS5qb2luKCcsICcpO1xuICBjb25zdCBibGFua0xhYmVsID0gY29udGV4dC5ibGFua0xhYmVsO1xuXG4gIGlmIChmb3JtID09PSAnY2hpcCcgfHwgYmxhbmtMYWJlbCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIHRleHQ7XG4gIH1cblxuICBjb25zdCBibGFuayA9IGJsYW5rTGFiZWwgIT09IG51bGwgJiYgdmFsdWVzLnNvbWUoKHZhbHVlKSA9PiBTdHJpbmcodmFsdWUpID09PSBibGFua0xhYmVsKTtcblxuICByZXR1cm4gYCR7dGV4dH0gKHJvd3Mgd2l0aCBubyAke2xhYmVsfSAke2JsYW5rID8gJ2FyZSBsZWZ0IG91dCcgOiAnYXJlIGtlcHQnfSlgO1xufVxuXG4vLyBBIG51bWJlciByYW5nZSdzIGVuZHMgaW4gdGhlIHJlcG9ydCdzIGxvY2FsZSwgb3IgbnVsbCB3aXRoIG5laXRoZXIuXG5mdW5jdGlvbiByYW5nZVRleHQodmFsdWU6IEZpbHRlckdyb3VwVmFsdWUsIGNvbnRleHQ6IFJlcG9ydEZpbHRlckxpbmVDb250ZXh0LCBmb3JtOiBSZXBvcnRGaWx0ZXJMaW5lRm9ybSk6IHN0cmluZyB8IG51bGwge1xuICBjb25zdCBtaW4gPSBmaW5pdGVOdW1iZXIodmFsdWUubWluKTtcbiAgY29uc3QgbWF4ID0gZmluaXRlTnVtYmVyKHZhbHVlLm1heCk7XG4gIGNvbnN0IHdyaXRlID0gKGVuZDogbnVtYmVyKSA9PiBmb3JtYXRQbGFpbk51bWJlcihlbmQsIGNvbnRleHQubG9jYWxlKTtcblxuICBpZiAobWluICE9PSB1bmRlZmluZWQgJiYgbWF4ICE9PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gYCR7d3JpdGUobWluKX0gdG8gJHt3cml0ZShtYXgpfSR7Zm9ybSA9PT0gJ2xpbmUnID8gJyAoYm90aCBpbmNsdWRlZCknIDogJyd9YDtcbiAgfVxuXG4gIGlmIChtaW4gIT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBgJHt3cml0ZShtaW4pfSBvciBtb3JlYDtcbiAgfVxuXG4gIHJldHVybiBtYXggIT09IHVuZGVmaW5lZCA/IGAke3dyaXRlKG1heCl9IG9yIGxlc3NgIDogbnVsbDtcbn1cblxuLy8gVGhlIHBpY2tzJyBuYW1lczogdGhlIG9uZXMgdGhlIGNhbGxlciByZXNvbHZlZCwgZWxzZSBlYWNoIHBpY2sgYXMgc3RvcmVkLlxuZnVuY3Rpb24gcGlja05hbWVzKHZhbHVlczogdW5rbm93bltdLCBjb250ZXh0OiBSZXBvcnRGaWx0ZXJMaW5lQ29udGV4dCk6IHN0cmluZ1tdIHtcbiAgY29uc3QgbmFtZXMgPSBjb250ZXh0Lm5hbWVzO1xuXG4gIHJldHVybiB2YWx1ZXMubWFwKCh2YWx1ZSwgaW5kZXgpID0+IG5hbWVzPy5baW5kZXhdID8/IFN0cmluZyh2YWx1ZSkpO1xufVxuXG4vLyBPbmUgZ3JvdXAncyBsaW5lLCBvbmNlIGl0cyBwaWNrcyBhcmUgbmFtZWQuIEFuIGV4Y2x1ZGUgbGluZSBzYXlzIHdoYXRcbi8vIGhhcHBlbnMgdG8gdGhlIGJsYW5rIHJvd3MgZnJvbSB0aGUgZ3JvdXAncyBibGFuayBsYWJlbCwgd2hpY2ggdGhlIHNlcnZlclxuLy8gc2VuZHMgb24gYSBzZWxlY3QgZ3JvdXAgKG51bGw6IGJsYW5rIHJvd3MgaGF2ZSBub25lKS4gQW4gb2xkZXIgc2VydmVyXG4vLyBzZW5kcyBub25lLCBhbmQgdGhlIGxpbmUgdGhlbiBzYXlzIG5vdGhpbmcgYWJvdXQgdGhlbS5cbmZ1bmN0aW9uIGdyb3VwTGluZShncm91cDogUmVwb3J0RmlsdGVyR3JvdXAsIGlucHV0OiBSZXBvcnRFeHBvcnRMaW5lc0lucHV0KTogT2JzZXJ2YWJsZTxSZXBvcnRFeHBvcnRMaW5lIHwgbnVsbD4ge1xuICBjb25zdCBzbmFwc2hvdCA9IGlucHV0LnNuYXBzaG90O1xuICBjb25zdCB2YWx1ZSA9IHNuYXBzaG90LnZhbHVlc1tncm91cC5pZF07XG5cbiAgaWYgKCF2YWx1ZSkge1xuICAgIHJldHVybiBvZihudWxsKTtcbiAgfVxuXG4gIGNvbnN0IHBpY2tzID0gdmFsdWVQaWNrcyh2YWx1ZSk7XG4gIGNvbnN0IG5hbWVzJCA9IHBpY2tzLmxlbmd0aFxuICAgID8gaW5wdXQubmFtZXMoZ3JvdXAsIHBpY2tzKS5waXBlKGNhdGNoRXJyb3IoKCkgPT4gb2YobnVsbCkpKVxuICAgIDogb2YobnVsbCk7XG5cbiAgcmV0dXJuIG5hbWVzJC5waXBlKFxuICAgIG1hcCgobmFtZXMpOiBSZXBvcnRFeHBvcnRMaW5lIHwgbnVsbCA9PiB7XG4gICAgICBjb25zdCB0ZXh0ID0gZmlsdGVyTGluZVRleHQoZ3JvdXAsIHZhbHVlLCB7XG4gICAgICAgIGxvY2FsZTogc25hcHNob3QuZm9ybWF0Q29udGV4dC5sb2NhbGUsXG4gICAgICAgIG5hbWVzLFxuICAgICAgICBwcmVzZXQ6IHNuYXBzaG90LnByZXNldHNbZ3JvdXAuaWRdID8/IG51bGwsXG4gICAgICAgIHBhZ2VOYW1lOiBwYWdlTmFtZShpbnB1dC5yZXBvcnQsIGdyb3VwLnBhZ2VJZCksXG4gICAgICAgIGJsYW5rTGFiZWw6IGdyb3VwLmJsYW5rTGFiZWwsXG4gICAgICB9LCAnbGluZScpO1xuXG4gICAgICByZXR1cm4gdGV4dCA/IHsga2luZDogJ2dyb3VwJywgdGV4dCwgZ3JvdXBJZDogZ3JvdXAuaWQgfSA6IG51bGw7XG4gICAgfSksXG4gICk7XG59XG5cbi8vIFRoZSBncm91cC1ieSBncmFpbiB1bmRlciB0aGUgcmVwb3J0J3Mgb3duIG5hbWUgZm9yIHRoZSBjb250cm9sLCBvciBudWxsXG4vLyB3aGlsZSBubyBncmFpbiBpcyBwaWNrZWQuXG5mdW5jdGlvbiBncm91cEJ5TGluZShpbnB1dDogUmVwb3J0RXhwb3J0TGluZXNJbnB1dCk6IFJlcG9ydEV4cG9ydExpbmUgfCBudWxsIHtcbiAgY29uc3QgZnJlcXVlbmN5ID0gaW5wdXQuc25hcHNob3QuZnJlcXVlbmN5O1xuXG4gIGlmICghZnJlcXVlbmN5KSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zdCBvcHRpb24gPSBHUkFOVUxBUklUWV9PUFRJT05TLmZpbmQoKGl0ZW0pID0+IGl0ZW0udmFsdWUgPT09IGZyZXF1ZW5jeSk7XG4gIGNvbnN0IGxhYmVsID0gaW5wdXQucmVwb3J0LmNvbmZpZz8uZ3JvdXBCeT8ubGFiZWwgfHwgR1JPVVBfQllfTEFCRUw7XG5cbiAgcmV0dXJuIHsga2luZDogJ2dyb3VwQnknLCB0ZXh0OiBgJHtsYWJlbH06ICR7b3B0aW9uPy5uYW1lID8/IGZyZXF1ZW5jeX1gIH07XG59XG5cbi8vIE9uZSBsaW5lIHBlciBkcmlsbGVkIGNoYXJ0IG9mIHRoZSBleHBvcnQncyBwYWdlcywgd2hpbGUgdGhlIHNlcnZlciBkcmlsbHMuXG5mdW5jdGlvbiBkcmlsbExpbmVzKGlucHV0OiBSZXBvcnRFeHBvcnRMaW5lc0lucHV0KTogUmVwb3J0RXhwb3J0TGluZVtdIHtcbiAgY29uc3QgeyByZXBvcnQsIHNuYXBzaG90LCBwYWdlSWQgfSA9IGlucHV0O1xuXG4gIGlmICghc25hcHNob3QuZmVhdHVyZXMuaW5jbHVkZXMoJ2RyaWxsJykpIHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICByZXR1cm4gKHJlcG9ydC5wYWdlcyA/PyBbXSlcbiAgICAuZmlsdGVyKChwYWdlKSA9PiAhcGFnZUlkIHx8IHBhZ2UuaWQgPT09IHBhZ2VJZClcbiAgICAuZmxhdE1hcCgocGFnZSkgPT4gcGFnZS5jb21wb25lbnRzID8/IFtdKVxuICAgIC5maWx0ZXIoKGNvbXBvbmVudCkgPT4gY29tcG9uZW50LnR5cGUgPT09ICdjaGFydCcgJiYgISFzbmFwc2hvdC5zdGF0ZS50aWxlcz8uW2NvbXBvbmVudC5pZF0/LmRyaWxsPy5sZW5ndGgpXG4gICAgLm1hcCgoY29tcG9uZW50KTogUmVwb3J0RXhwb3J0TGluZSA9PiAoe1xuICAgICAga2luZDogJ2RyaWxsJyxcbiAgICAgIHRleHQ6IGRyaWxsTGluZVRleHQoXG4gICAgICAgIHsgdGl0bGU6IGlucHV0LnRpdGxlcz8uW2NvbXBvbmVudC5pZF0gPz8gY29tcG9uZW50LnRpdGxlIH0sXG4gICAgICAgIHNuYXBzaG90LnN0YXRlLnRpbGVzW2NvbXBvbmVudC5pZF0uZHJpbGwsXG4gICAgICAgIHNuYXBzaG90LmZvcm1hdENvbnRleHQsXG4gICAgICApLFxuICAgICAgY29tcG9uZW50SWQ6IGNvbXBvbmVudC5pZCxcbiAgICB9KSk7XG59XG5cbi8vIFRoZSB0aWxlcyBhIGdyb3VwJ3MgbWVtYmVycyBzaXQgb246IHRoZSBzZXJ2ZXIncyBsaXN0LCBlbHNlIHRoZSB0aWxlcyBvZlxuLy8gaXRzIGVuYWJsZWQgbWVtYmVycyAoYW4gb2xkZXIgc2VydmVyKS5cbmZ1bmN0aW9uIGdyb3VwTWVtYmVySWRzKGdyb3VwOiBSZXBvcnRGaWx0ZXJHcm91cCk6IG51bWJlcltdIHtcbiAgcmV0dXJuIGdyb3VwLmNvbXBvbmVudElkc1xuICAgID8/IChncm91cC5maWx0ZXJzID8/IFtdKS5maWx0ZXIoKG1lbWJlcikgPT4gbWVtYmVyLmVuYWJsZWQpLm1hcCgobWVtYmVyKSA9PiBtZW1iZXIuY29tcG9uZW50SWQpO1xufVxuXG4vLyBBIHBhZ2UncyBuYW1lIGFzIHRoZSBleHBvcnQgbmFtZXMgaXQgKCdQYWdlIDInIHdoZW4gaXQgaGFzIG5vbmUpLCBvciBudWxsXG4vLyBmb3Igbm8gcGFnZS5cbmZ1bmN0aW9uIHBhZ2VOYW1lKHJlcG9ydDogUmVwb3J0LCBwYWdlSWQ6IG51bWJlciB8IG51bGwgfCB1bmRlZmluZWQpOiBzdHJpbmcgfCBudWxsIHtcbiAgY29uc3QgaW5kZXggPSBwYWdlSWQgPyAocmVwb3J0LnBhZ2VzID8/IFtdKS5maW5kSW5kZXgoKHBhZ2UpID0+IHBhZ2UuaWQgPT09IHBhZ2VJZCkgOiAtMTtcblxuICBpZiAoaW5kZXggPCAwKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICByZXR1cm4gcmVwb3J0LnBhZ2VzW2luZGV4XS5uYW1lIHx8IGBQYWdlICR7aW5kZXggKyAxfWA7XG59XG4iXX0=
|