@firestitch/report 18.10.0 → 18.10.1
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/data/report.data.d.ts +3 -5
- package/app/reports/dialogs/report-settings/report-settings.component.d.ts +30 -2
- package/app/reports/filter-settings-rules.d.ts +4 -0
- package/app/reports/interfaces/report-filter-group-changes.interface.d.ts +7 -0
- package/app/reports/interfaces/report.interface.d.ts +1 -14
- package/app/reports/report-filter-items.d.ts +2 -8
- package/app/reports/report-view-config.d.ts +1 -3
- package/app/reports/services/report-filter-state.service.d.ts +5 -14
- package/app/reports/services/report-view.service.d.ts +1 -13
- package/app/reports/views/report/fs-ai-report.component.d.ts +2 -8
- package/esm2022/app/reports/canvas-landing-page.mjs +7 -6
- package/esm2022/app/reports/components/component-list/component-list.component.mjs +5 -5
- package/esm2022/app/reports/components/report-canvas/report-canvas.component.mjs +13 -12
- package/esm2022/app/reports/components/report-component/report-component.component.mjs +9 -9
- package/esm2022/app/reports/data/report.data.mjs +8 -5
- package/esm2022/app/reports/dialogs/report-settings/report-settings.component.mjs +169 -21
- package/esm2022/app/reports/filter-settings-rules.mjs +8 -1
- package/esm2022/app/reports/interfaces/canvas-landing-input.interface.mjs +1 -1
- package/esm2022/app/reports/interfaces/report-filter-group-changes.interface.mjs +2 -0
- package/esm2022/app/reports/interfaces/report-temporary-state.interface.mjs +1 -1
- package/esm2022/app/reports/interfaces/report-view-config.interface.mjs +1 -1
- package/esm2022/app/reports/interfaces/report.interface.mjs +1 -1
- package/esm2022/app/reports/report-date-presets.mjs +2 -2
- package/esm2022/app/reports/report-filter-items.mjs +25 -105
- package/esm2022/app/reports/report-view-config.mjs +6 -116
- package/esm2022/app/reports/services/report-filter-state.service.mjs +92 -269
- package/esm2022/app/reports/services/report-view.service.mjs +25 -165
- package/esm2022/app/reports/views/report/fs-ai-report.component.mjs +56 -120
- package/esm2022/app/reports/views/report/report.component.mjs +11 -8
- package/fesm2022/{firestitch-report-echarts-UBg8Wlhd.mjs → firestitch-report-echarts-DHEH_K_q.mjs} +2 -2
- package/fesm2022/{firestitch-report-echarts-UBg8Wlhd.mjs.map → firestitch-report-echarts-DHEH_K_q.mjs.map} +1 -1
- package/fesm2022/{firestitch-report-firestitch-report-B1keNrcK.mjs → firestitch-report-firestitch-report-ZcHTnNKq.mjs} +454 -1470
- package/fesm2022/firestitch-report-firestitch-report-ZcHTnNKq.mjs.map +1 -0
- package/fesm2022/firestitch-report.mjs +1 -1
- package/package.json +1 -1
- package/app/reports/interfaces/report-url-link.interface.d.ts +0 -4
- package/app/reports/interfaces/report-url-value-name.type.d.ts +0 -1
- package/app/reports/interfaces/report-url-write.interface.d.ts +0 -4
- package/app/reports/report-url-state.d.ts +0 -36
- package/esm2022/app/reports/interfaces/report-url-link.interface.mjs +0 -2
- package/esm2022/app/reports/interfaces/report-url-value-name.type.mjs +0 -2
- package/esm2022/app/reports/interfaces/report-url-write.interface.mjs +0 -2
- package/esm2022/app/reports/report-url-state.mjs +0 -677
- package/fesm2022/firestitch-report-firestitch-report-B1keNrcK.mjs.map +0 -1
|
@@ -136,11 +136,12 @@ export class ReportComponent {
|
|
|
136
136
|
if (!this.report()) {
|
|
137
137
|
return;
|
|
138
138
|
}
|
|
139
|
-
this._dialog.open(ReportSettingsComponent, {
|
|
139
|
+
const dialogRef = this._dialog.open(ReportSettingsComponent, {
|
|
140
140
|
data: { report: this.report() },
|
|
141
141
|
width: '460px',
|
|
142
|
-
})
|
|
143
|
-
|
|
142
|
+
});
|
|
143
|
+
const settings = dialogRef.componentInstance;
|
|
144
|
+
dialogRef.afterClosed()
|
|
144
145
|
.pipe(takeUntilDestroyed(this._destroyRef))
|
|
145
146
|
.subscribe((result) => {
|
|
146
147
|
// The dialog confirms + performs the delete itself; we just react to
|
|
@@ -151,7 +152,9 @@ export class ReportComponent {
|
|
|
151
152
|
this._buildReportConfig();
|
|
152
153
|
return;
|
|
153
154
|
}
|
|
154
|
-
|
|
155
|
+
// A save that failed part way (a refused name) may still have stored
|
|
156
|
+
// the filters before it, so a dismissed dialog that wrote reloads too.
|
|
157
|
+
if ((result?.action === 'saved' || settings.wrote()) && this.selected()) {
|
|
155
158
|
this._loadReport(this.selected().id);
|
|
156
159
|
this._refreshReportName(this.selected().id);
|
|
157
160
|
}
|
|
@@ -314,8 +317,8 @@ export class ReportComponent {
|
|
|
314
317
|
.pipe(takeUntilDestroyed(this._destroyRef))
|
|
315
318
|
.subscribe((report) => {
|
|
316
319
|
this.report.set(report);
|
|
317
|
-
//
|
|
318
|
-
//
|
|
320
|
+
// A report keeps no state in the URL: its filters live in the state
|
|
321
|
+
// service for as long as the report is open.
|
|
319
322
|
this._filterState.init(report);
|
|
320
323
|
this._buildReportConfig();
|
|
321
324
|
});
|
|
@@ -402,7 +405,7 @@ export class ReportComponent {
|
|
|
402
405
|
// The bar's values into the state: every group it shows, the grain and,
|
|
403
406
|
// when the bar has the control, the match.
|
|
404
407
|
_barChanged(query, hasMatch) {
|
|
405
|
-
for (const { groupId, value } of groupValuesFromQuery(query, this._reportGroups()
|
|
408
|
+
for (const { groupId, value } of groupValuesFromQuery(query, this._reportGroups())) {
|
|
406
409
|
this._filterState.setValue(groupId, value);
|
|
407
410
|
}
|
|
408
411
|
// Not a filter group — the grain is read straight off the query.
|
|
@@ -498,4 +501,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
498
501
|
type: ViewChild,
|
|
499
502
|
args: [ReportCanvasComponent]
|
|
500
503
|
}] } });
|
|
501
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwb3J0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvcmVwb3J0cy92aWV3cy9yZXBvcnQvcmVwb3J0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvcmVwb3J0cy92aWV3cy9yZXBvcnQvcmVwb3J0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxzQkFBc0IsRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQzFELFVBQVUsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxTQUFTLEdBQzdFLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUU3QyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDckQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNqRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFFdkQsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDM0UsT0FBTyxFQUFnQixjQUFjLEVBQXFCLE1BQU0sb0JBQW9CLENBQUM7QUFDckYsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNoRCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFFOUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFaEUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDaEUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRWpELE9BQU8sRUFBRSxpQkFBaUIsRUFBb0IsTUFBTSxnQkFBZ0IsQ0FBQztBQUVyRSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx3REFBd0QsQ0FBQztBQUMvRixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDcEQsT0FBTyxFQUFFLDBCQUEwQixFQUEyQixNQUFNLCtEQUErRCxDQUFDO0FBQ3BJLE9BQU8sRUFBRSx1QkFBdUIsRUFBd0IsTUFBTSx5REFBeUQsQ0FBQztBQUN4SCxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSw4Q0FBOEMsQ0FBQztBQUM1RixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUN6RSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNuRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUNyRSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUtsRixPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNwRSxPQUFPLEVBQ0wsYUFBYSxFQUFFLGtCQUFrQixFQUFFLGlCQUFpQixFQUFFLGdCQUFnQixFQUFFLG9CQUFvQixFQUM1RixZQUFZLEVBQUUsb0JBQW9CLEVBQUUsZUFBZSxFQUFFLGNBQWMsRUFBRSxlQUFlLEdBQ3JGLE1BQU0sMkJBQTJCLENBQUM7QUFDbkMsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sOENBQThDLENBQUM7QUFDMUYsT0FBTyxFQUFFLHdCQUF3QixFQUFFLGdCQUFnQixFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFDeEcsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQzlELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQzs7Ozs7O0FBR3hELDBFQUEwRTtBQUMxRSxnRkFBZ0Y7QUFDaEYsMEVBQTBFO0FBQzFFLDBCQUEwQjtBQXFDMUIsTUFBTSxPQUFPLGVBQWU7SUFFMUIsd0RBQXdEO0lBQ3hDLFFBQVEsR0FBRyxNQUFNLENBQXdCLElBQUksQ0FBQyxDQUFDO0lBQy9DLE1BQU0sR0FBRyxNQUFNLENBQWdCLElBQUksQ0FBQyxDQUFDO0lBQ3JDLGNBQWMsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDOUIsUUFBUSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUV6QyxzRUFBc0U7SUFDdEUseUVBQXlFO0lBQ3pFLDZFQUE2RTtJQUM3RSw0RUFBNEU7SUFDNUQsa0JBQWtCLEdBQUcsTUFBTSxDQUFzQixJQUFJLENBQUMsQ0FBQztJQUcvRCxNQUFNLENBQThCO0lBR3BDLFVBQVUsQ0FBMkI7SUFFN0MsMEVBQTBFO0lBQzFFLGlCQUFpQjtJQUVULE9BQU8sQ0FBeUI7SUFFeEIsWUFBWSxHQUFHO1FBQzdCLElBQUksRUFBRSxFQUFFO0tBQ1QsQ0FBQztJQUVNLFdBQVcsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDakMsY0FBYyxHQUFHLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUN2QyxZQUFZLEdBQUcsTUFBTSxDQUFDLHdCQUF3QixDQUFDLENBQUM7SUFDaEQsY0FBYyxHQUFHLE1BQU0sQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO0lBQ3BELGNBQWMsR0FBRyxNQUFNLENBQUMsbUJBQW1CLENBQUMsQ0FBQztJQUM3QyxVQUFVLEdBQUcsTUFBTSxDQUFDLDRCQUE0QixDQUFDLENBQUM7SUFDbEQsUUFBUSxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUM3QixPQUFPLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQzNCLE9BQU8sR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDNUIsV0FBVyxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUNqQyxLQUFLLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBRS9CLGtFQUFrRTtJQUNqRCxXQUFXLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBRXpDLHdFQUF3RTtJQUN4RSxlQUFlO0lBQ0UsT0FBTyxHQUFHLE1BQU0sQ0FBZ0IsSUFBSSxDQUFDLENBQUM7SUFFdkQ7UUFDRSxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztRQUUxQixxRUFBcUU7UUFDckUsaUVBQWlFO1FBQ2pFLHVDQUF1QztRQUN2QyxNQUFNLENBQUMsR0FBRyxFQUFFO1lBQ1YsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUVqRCxTQUFTLENBQUMsR0FBRyxFQUFFO2dCQUNiLElBQUksT0FBTyxLQUFLLElBQUksQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDO29CQUNuQyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztnQkFDNUIsQ0FBQztZQUNILENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRTthQUN2QixJQUFJLENBQ0gsUUFBUSxDQUFDLEdBQUcsRUFBRTtZQUNaLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2pDLENBQUMsQ0FBQyxFQUNGLGtCQUFrQixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FDckM7YUFDQSxTQUFTLENBQUMsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQztJQUMzQyxDQUFDO0lBRU0sWUFBWSxHQUFHLENBQUMsT0FBZSxFQUFFLEVBQUU7UUFDeEMsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUM3QyxDQUFDLENBQUM7SUFFSyxZQUFZLENBQUMsTUFBNkI7UUFDL0MsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDdEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDekIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDdkIsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7UUFFMUIsSUFBSSxNQUFNLEVBQUUsQ0FBQztZQUNYLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzlCLENBQUM7SUFDSCxDQUFDO0lBRU0sWUFBWTtRQUNqQixJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQztZQUNqQixLQUFLLEVBQUUsZUFBZTtZQUN0QixLQUFLLEVBQUUsTUFBTTtZQUNiLFdBQVcsRUFBRSxRQUFRO1lBQ3JCLFFBQVEsRUFBRSxJQUFJO1NBQ2YsQ0FBQzthQUNDLElBQUksQ0FDSCxTQUFTLENBQUMsQ0FBQyxJQUFZLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQzdELGtCQUFrQixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FDckM7YUFDQSxTQUFTLENBQUMsQ0FBQyxNQUFzQixFQUFFLEVBQUU7WUFDcEMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDMUIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDOUIsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRU0sY0FBYztRQUNuQixJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNoRCxDQUFDO0lBRUQsNEVBQTRFO0lBQzVFLG1FQUFtRTtJQUNuRSxJQUFXLFlBQVk7UUFDckIsT0FBTyxJQUFJLENBQUMsT0FBTyxFQUFFLFVBQVUsRUFBRSxJQUFJLEtBQUssQ0FBQztJQUM3QyxDQUFDO0lBRU0sT0FBTztRQUNaLElBQUksQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUM7SUFDMUIsQ0FBQztJQUVNLGdCQUFnQjtRQUNyQixJQUFJLENBQUMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLENBQUM7SUFDbkMsQ0FBQztJQUVELHdFQUF3RTtJQUN4RSw4REFBOEQ7SUFDdkQsY0FBYztRQUNuQixJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUM7WUFDbkIsT0FBTztRQUNULENBQUM7UUFFRCxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBeUQsdUJBQXVCLEVBQUU7WUFDakcsSUFBSSxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBRTtZQUMvQixLQUFLLEVBQUUsT0FBTztTQUNmLENBQUM7YUFDQyxXQUFXLEVBQUU7YUFDYixJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO2FBQzFDLFNBQVMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFO1lBQ3BCLHFFQUFxRTtZQUNyRSx3QkFBd0I7WUFDeEIsSUFBSSxNQUFNLEVBQUUsTUFBTSxLQUFLLFNBQVMsRUFBRSxDQUFDO2dCQUNqQyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDeEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ3RCLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO2dCQUUxQixPQUFPO1lBQ1QsQ0FBQztZQUVELElBQUksTUFBTSxFQUFFLE1BQU0sS0FBSyxPQUFPLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUM7Z0JBQ2xELElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUNyQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQzlDLENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCx1RUFBdUU7SUFDdkUsZ0NBQWdDO0lBQ3pCLGlCQUFpQixDQUFDLFNBQStCO1FBQ3RELElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQztZQUNuQixPQUFPO1FBQ1QsQ0FBQztRQUVELE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUNqQywwQkFBMEIsRUFDMUI7WUFDRSxJQUFJLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFFLFNBQVMsRUFBRTtZQUMxQyxLQUFLLEVBQUUsT0FBTztTQUNmLENBQ0YsQ0FBQztRQUVGLDRFQUE0RTtRQUM1RSwwRUFBMEU7UUFDMUUsNkVBQTZFO1FBQzdFLDBDQUEwQztRQUMxQyxJQUFJLGNBQWMsR0FBRyxLQUFLLENBQUM7UUFDM0IsU0FBUyxDQUFDLGlCQUFpQixDQUFDLGNBQWM7YUFDdkMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQzthQUN4QyxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxDQUFDO1FBRTFDLFNBQVMsQ0FBQyxXQUFXLEVBQUU7YUFDcEIsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQzthQUMxQyxTQUFTLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRTtZQUNwQixxRUFBcUU7WUFDckUsd0VBQXdFO1lBQ3hFLHdFQUF3RTtZQUN4RSxJQUFJLE1BQU0sRUFBRSxPQUFPLEVBQUUsQ0FBQztnQkFDcEIsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQztvQkFDcEIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBQ3ZDLENBQUM7Z0JBRUQsT0FBTztZQUNULENBQUM7WUFFRCxnRUFBZ0U7WUFDaEUsOERBQThEO1lBQzlELElBQUksY0FBYyxFQUFFLENBQUM7Z0JBQ25CLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUM7b0JBQ3BCLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUN2QyxDQUFDO2dCQUVELE9BQU87WUFDVCxDQUFDO1lBRUQsdUVBQXVFO1lBQ3ZFLHNFQUFzRTtZQUN0RSxzREFBc0Q7WUFDdEQsSUFBSSxNQUFNLEVBQUUsUUFBUSxFQUFFLENBQUM7Z0JBQ3JCLElBQUksQ0FBQyxPQUFPLEVBQUUsc0JBQXNCLENBQUMsU0FBUyxDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDdEUsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELHlFQUF5RTtJQUN6RSxrQkFBa0I7SUFDWCxtQkFBbUIsQ0FBQyxNQUFxQjtRQUM5QyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN6Qiw4REFBOEQ7UUFDOUQsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFbEMsSUFBSSxZQUFZLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQztZQUNoQyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztRQUM1QixDQUFDO0lBQ0gsQ0FBQztJQUVELDZFQUE2RTtJQUM3RSxxREFBcUQ7SUFDOUMscUJBQXFCO1FBQzFCLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUM7WUFDcEIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDdkMsQ0FBQztJQUNILENBQUM7SUFFRCwyRUFBMkU7SUFDM0UsMkVBQTJFO0lBQzNFLDZFQUE2RTtJQUM3RSw2RUFBNkU7SUFDdEUsZ0JBQWdCO1FBQ3JCLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQztZQUNuQixPQUFPO1FBQ1QsQ0FBQztRQUVELElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUNmLHNCQUFzQixFQUN0QixJQUFJLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FDOUMsQ0FBQztJQUNKLENBQUM7SUFFRCw2RUFBNkU7SUFDN0UsMkVBQTJFO0lBQzNFLGdFQUFnRTtJQUN6RCxTQUFTO1FBQ2QsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDO1lBQ25CLE9BQU87UUFDVCxDQUFDO1FBRUQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQ2YsZUFBZSxFQUNmLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUN2QyxDQUFDO0lBQ0osQ0FBQztJQUVELHlFQUF5RTtJQUN6RSx5RUFBeUU7SUFDekUsMkVBQTJFO0lBQzNFLDJFQUEyRTtJQUMzRSwyRUFBMkU7SUFDM0UsNEVBQTRFO0lBQzVFLHlFQUF5RTtJQUN6RSwwRUFBMEU7SUFDMUUseUVBQXlFO0lBQ3pFLHNFQUFzRTtJQUN0RSx1RUFBdUU7SUFDdkUsMEVBQTBFO0lBQzFFLGdEQUFnRDtJQUN6QyxVQUFVLENBQUMsUUFBUSxHQUFHLEtBQUs7UUFDaEMsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQzdCLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNaLE9BQU87UUFDVCxDQUFDO1FBRUQsTUFBTSxNQUFNLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLFVBQVUsRUFBRSxFQUFFLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFDdEUsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDbkUsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUNoRCxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNsRCxNQUFNLE1BQU0sR0FBRyxlQUFlLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFFOUQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQ3BCLGdCQUFnQixFQUNoQixJQUFJLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQzthQUNsRCxJQUFJLENBQ0gsU0FBUyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFlBQVksQ0FDaEQsTUFBTSxDQUFDLEVBQUUsRUFDVCxPQUFPLEVBQ1AsTUFBTSxFQUNOLFNBQVMsRUFDVCxLQUFLLEVBQ0wsTUFBTSxDQUNQLENBQUMsQ0FDSCxDQUNKLENBQUM7SUFDSixDQUFDO0lBRUQsMEVBQTBFO0lBQzFFLHdFQUF3RTtJQUNqRSxjQUFjLENBQUMsUUFBMEI7UUFDOUMseUVBQXlFO1FBQ3pFLHdFQUF3RTtRQUN4RSxnQkFBZ0I7UUFDaEIsSUFBSSxRQUFRLENBQUMsYUFBYSxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDO1lBQzlDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3ZDLENBQUM7UUFFRCx1RUFBdUU7UUFDdkUsSUFBSSxRQUFRLENBQUMsYUFBYSxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDO1lBQzlDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDOUMsQ0FBQztJQUNILENBQUM7SUFFRCwyRUFBMkU7SUFDM0Usb0JBQW9CO0lBQ2IsYUFBYSxDQUFDLEtBQW1CO1FBQ3RDLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUV2QixNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsTUFBcUIsQ0FBQztRQUMzQyxNQUFNLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzFDLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUM7UUFFcEQsSUFBSSxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLEVBQUU7WUFDaEMsTUFBTSxJQUFJLEdBQUcsQ0FBQyxDQUFlLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQzVELE1BQU0sR0FBRyxHQUFHLEdBQUcsRUFBRTtnQkFDZixNQUFNLENBQUMscUJBQXFCLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDO2dCQUM5QyxNQUFNLENBQUMsbUJBQW1CLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxDQUFDO2dCQUNoRCxNQUFNLENBQUMsbUJBQW1CLENBQUMsV0FBVyxFQUFFLEdBQUcsQ0FBQyxDQUFDO2dCQUM3QyxNQUFNLENBQUMsbUJBQW1CLENBQUMsZUFBZSxFQUFFLEdBQUcsQ0FBQyxDQUFDO2dCQUNqRCxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQ3pELENBQUMsQ0FBQztZQUVGLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDN0MsTUFBTSxDQUFDLGdCQUFnQixDQUFDLFdBQVcsRUFBRSxHQUFHLENBQUMsQ0FBQztZQUMxQyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsZUFBZSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ2hELENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVPLFNBQVMsQ0FBQyxPQUFlO1FBQy9CLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLHFCQUFxQixFQUFFLENBQUM7UUFDL0QsSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ3JCLE9BQU87UUFDVCxDQUFDO1FBRUQsTUFBTSxLQUFLLEdBQUcsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7UUFDakQsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUNwRCxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsU0FBUyxHQUFHLEdBQUcsT0FBTyxHQUFHLEdBQUcsR0FBRyxDQUFDO0lBQ3RFLENBQUM7SUFFTyxXQUFXLENBQUMsUUFBZ0I7UUFDbEMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDO2FBQzNCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7YUFDMUMsU0FBUyxDQUFDLENBQUMsTUFBYyxFQUFFLEVBQUU7WUFDNUIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDeEIsa0VBQWtFO1lBQ2xFLHFFQUFxRTtZQUNyRSxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUMvQixJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztRQUM1QixDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCw0RUFBNEU7SUFDNUUsd0VBQXdFO0lBQ3hFLHlDQUF5QztJQUNqQyxhQUFhO1FBQ25CLE9BQU8sZUFBZSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztJQUN4RCxDQUFDO0lBRUQsNkVBQTZFO0lBQzdFLDZFQUE2RTtJQUM3RSxJQUFXLGdCQUFnQjtRQUN6QixPQUFPLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDbEUsQ0FBQztJQUVELDRFQUE0RTtJQUM1RSw4RUFBOEU7SUFDOUUseUVBQXlFO0lBQ3pFLHlFQUF5RTtJQUN6RSxJQUFXLGVBQWU7UUFDeEIsT0FBTztZQUNMLHVFQUF1RTtZQUN2RSw2Q0FBNkM7WUFDN0MsSUFBSSxDQUFDLFdBQVcsRUFBRTtZQUNsQiwyRUFBMkU7WUFDM0UsK0RBQStEO1lBQy9ELElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxFQUFFO1lBQzVCLDhFQUE4RTtZQUM5RSx5RUFBeUU7WUFDekUscUVBQXFFO1lBQ3JFLGdCQUFnQixDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUMvQixHQUFHLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLEVBQUUsSUFBSSxLQUFLLENBQUMsS0FBSyxJQUFJLEtBQUssQ0FBQyxLQUFLLElBQUksZ0JBQWdCLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUM5RyxzRUFBc0U7WUFDdEUsbUNBQW1DO1lBQ25DLEdBQUcsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxJQUFJLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7U0FDbkUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDZCxDQUFDO0lBRUQsNkVBQTZFO0lBQzdFLDZFQUE2RTtJQUM3RSw4RUFBOEU7SUFDOUUseUJBQXlCO0lBQ2pCLGtCQUFrQjtRQUN4QixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLEVBQUUsRUFBRSxJQUFJLElBQUksQ0FBQztRQUUzQyw0RUFBNEU7UUFDNUUsd0VBQXdFO1FBQ3hFLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsU0FBUyxFQUFFLENBQUMsRUFBRSxDQUFDO1lBQ3pGLElBQUksQ0FBQyxZQUFZLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3ZDLENBQUM7UUFFRCxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLEVBQUUsY0FBYyxJQUFJLEVBQUUsQ0FBQztRQUNyRCxNQUFNLEtBQUssR0FBRyxRQUFRO1lBQ3BCLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FDbkMsa0JBQWtCLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxjQUFjLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQztZQUM3RyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBRVAseUVBQXlFO1FBQ3pFLHVFQUF1RTtRQUN2RSxxRUFBcUU7UUFDckUsd0VBQXdFO1FBQ3hFLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUN4QyxJQUFJLFdBQVcsRUFBRSxDQUFDO1lBQ2hCLEtBQUssQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDN0IsQ0FBQztRQUVELHlDQUF5QztRQUN6QyxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDcEMsSUFBSSxTQUFTLEVBQUUsQ0FBQztZQUNkLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDeEIsQ0FBQztRQUVELElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQztRQUN2RCxJQUFJLENBQUMsa0JBQWtCLENBQUMsR0FBRyxDQUFDO1lBQzFCLG1FQUFtRTtZQUNuRSxtREFBbUQ7WUFDbkQsVUFBVSxFQUFFLEtBQUs7WUFDakIsT0FBTyxFQUFFLEtBQUs7WUFDZCxLQUFLO1lBQ0wsTUFBTSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQztZQUM3RCxzRUFBc0U7WUFDdEUscUVBQXFFO1lBQ3JFLHFFQUFxRTtZQUNyRSxRQUFRO1lBQ1IsS0FBSyxFQUFFLFFBQVEsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVM7WUFDckYsc0VBQXNFO1lBQ3RFLHlCQUF5QjtZQUN6QixZQUFZLEVBQUUsUUFBUSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUztTQUM3RixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsd0VBQXdFO0lBQ3hFLDJDQUEyQztJQUNuQyxXQUFXLENBQUMsS0FBOEIsRUFBRSxRQUFpQjtRQUNuRSxLQUFLLE1BQU0sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLElBQUksb0JBQW9CLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxhQUFhLEVBQUUsRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDO1lBQ2xHLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQztRQUM3QyxDQUFDO1FBQ0QsaUVBQWlFO1FBQ2pFLElBQUksQ0FBQyxZQUFZLENBQUMsWUFBWSxDQUFFLEtBQUssQ0FBQyxhQUFhLENBQXNCLElBQUksSUFBSSxDQUFDLENBQUM7UUFDbkYsa0VBQWtFO1FBQ2xFLElBQUksUUFBUSxFQUFFLENBQUM7WUFDYixJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUNwRCxDQUFDO0lBQ0gsQ0FBQztJQUVELDhFQUE4RTtJQUM5RSwwRUFBMEU7SUFDMUUsaUVBQWlFO0lBQ3pELFlBQVk7UUFDbEIsT0FBTyxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ2xCLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNqRSxDQUFDLENBQUMsSUFBSSxDQUFDO0lBQ1gsQ0FBQztJQUVELHlFQUF5RTtJQUN6RSxvREFBb0Q7SUFDNUMsVUFBVTtRQUNoQixPQUFPLGVBQWUsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEVBQUUsSUFBSSxDQUFDLGFBQWEsRUFBRSxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUUsRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7SUFDekcsQ0FBQztJQUVPLGtCQUFrQixDQUFDLFFBQWdCO1FBQ3pDLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFO2FBQ3ZCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7YUFDMUMsU0FBUyxDQUFDLENBQUMsT0FBeUIsRUFBRSxFQUFFO1lBQ3ZDLE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEtBQUssUUFBUSxDQUFDLENBQUM7WUFDakUsSUFBSSxPQUFPLEVBQUUsQ0FBQztnQkFDWixJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDM0IsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQztvQkFDbEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBRSxJQUFJLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7Z0JBQzVELENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO3dHQWhmVSxlQUFlOzRGQUFmLGVBQWUsMkRBOUJmO1lBQ1QsMkVBQTJFO1lBQzNFLHVFQUF1RTtZQUN2RSx3QkFBd0I7WUFDeEIsMEVBQTBFO1lBQzFFLDBCQUEwQjtZQUMxQiw0QkFBNEI7WUFDNUIsaUJBQWlCO1lBQ2pCLGdCQUFnQjtZQUNoQix1QkFBdUI7WUFDdkIsbUJBQW1CO1lBQ25CLDBFQUEwRTtZQUMxRSxzQkFBc0I7WUFDdEIsa0JBQWtCLENBQUMsRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLHFCQUFxQixDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUNyRywyRUFBMkU7WUFDM0Usd0NBQXdDO1lBQ3hDLHVCQUF1QixFQUFFO1NBQzFCLDhNQThCNkMsVUFBVSxxRUFLN0MscUJBQXFCLGdEQzlHbEMsa25KQWdKTSxtM0NEbkVGLFdBQVcsOFZBQ1gseUJBQXlCLDAvQkFDekIsY0FBYyxrS0FDZCxZQUFZLGtTQUNaLGlCQUFpQixrTEFDakIsU0FBUyxpTEFDVCxPQUFPLDJJQUNQLFVBQVUsaVJBQ1YscUJBQXFCOzs0RkFHWixlQUFlO2tCQXBDM0IsU0FBUztzQ0FHUyx1QkFBdUIsQ0FBQyxNQUFNLGNBQ25DLElBQUksV0FDUCxDQUFDLHNCQUFzQixDQUFDLGFBQ3RCO3dCQUNULDJFQUEyRTt3QkFDM0UsdUVBQXVFO3dCQUN2RSx3QkFBd0I7d0JBQ3hCLDBFQUEwRTt3QkFDMUUsMEJBQTBCO3dCQUMxQiw0QkFBNEI7d0JBQzVCLGlCQUFpQjt3QkFDakIsZ0JBQWdCO3dCQUNoQix1QkFBdUI7d0JBQ3ZCLG1CQUFtQjt3QkFDbkIsMEVBQTBFO3dCQUMxRSxzQkFBc0I7d0JBQ3RCLGtCQUFrQixDQUFDLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7d0JBQ3JHLDJFQUEyRTt3QkFDM0Usd0NBQXdDO3dCQUN4Qyx1QkFBdUIsRUFBRTtxQkFDMUIsV0FDUTt3QkFDUCxXQUFXO3dCQUNYLHlCQUF5Qjt3QkFDekIsY0FBYzt3QkFDZCxZQUFZO3dCQUNaLGlCQUFpQjt3QkFDakIsU0FBUzt3QkFDVCxPQUFPO3dCQUNQLFVBQVU7d0JBQ1YscUJBQXFCO3FCQUN0Qjt3REFpQk8sTUFBTTtzQkFEYixTQUFTO3VCQUFDLE9BQU8sRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBSTVCLFVBQVU7c0JBRGpCLFNBQVM7dUJBQUMsV0FBVyxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFO2dCQU1sRCxPQUFPO3NCQURkLFNBQVM7dUJBQUMscUJBQXFCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ1VTVE9NX0VMRU1FTlRTX1NDSEVNQSwgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCxcbiAgRGVzdHJveVJlZiwgRWxlbWVudFJlZiwgTmdab25lLCBWaWV3Q2hpbGQsIGVmZmVjdCwgaW5qZWN0LCBzaWduYWwsIHVudHJhY2tlZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuaW1wb3J0IHsgTWF0QnV0dG9uIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYnV0dG9uJztcbmltcG9ydCB7IE1hdERpYWxvZyB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XG5pbXBvcnQgeyBNYXRJY29uIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvbic7XG5pbXBvcnQgeyBNYXRUb29sdGlwIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdG9vbHRpcCc7XG5cbmltcG9ydCB7IEZzQXV0b2NvbXBsZXRlQ2hpcHNNb2R1bGUgfSBmcm9tICdAZmlyZXN0aXRjaC9hdXRvY29tcGxldGUtY2hpcHMnO1xuaW1wb3J0IHsgRmlsdGVyQ29uZmlnLCBGc0ZpbHRlck1vZHVsZSwgSUZpbHRlckNvbmZpZ0l0ZW0gfSBmcm9tICdAZmlyZXN0aXRjaC9maWx0ZXInO1xuaW1wb3J0IHsgRnNNZW51TW9kdWxlIH0gZnJvbSAnQGZpcmVzdGl0Y2gvbWVudSc7XG5pbXBvcnQgeyBGc1Byb2Nlc3MgfSBmcm9tICdAZmlyZXN0aXRjaC9wcm9jZXNzJztcbmltcG9ydCB7IEZzUHJvbXB0IH0gZnJvbSAnQGZpcmVzdGl0Y2gvcHJvbXB0JztcblxuaW1wb3J0IHsgZmluYWxpemUsIHN3aXRjaE1hcCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQgeyBwcm92aWRlRWNoYXJ0c0NvcmUgfSBmcm9tICduZ3gtZWNoYXJ0cyc7XG5cbmltcG9ydCB7IEZzQWlDaGF0Q29tcG9uZW50LCBGc0FpQ2hhdFJlc3BvbnNlIH0gZnJvbSAnQGZpcmVzdGl0Y2gvYWknO1xuXG5pbXBvcnQgeyBSZXBvcnRDYW52YXNDb21wb25lbnQgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL3JlcG9ydC1jYW52YXMvcmVwb3J0LWNhbnZhcy5jb21wb25lbnQnO1xuaW1wb3J0IHsgUmVwb3J0RGF0YSB9IGZyb20gJy4uLy4uL2RhdGEvcmVwb3J0LmRhdGEnO1xuaW1wb3J0IHsgQ29tcG9uZW50U2V0dGluZ3NDb21wb25lbnQsIENvbXBvbmVudFNldHRpbmdzUmVzdWx0IH0gZnJvbSAnLi4vLi4vZGlhbG9ncy9jb21wb25lbnQtc2V0dGluZ3MvY29tcG9uZW50LXNldHRpbmdzLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBSZXBvcnRTZXR0aW5nc0NvbXBvbmVudCwgUmVwb3J0U2V0dGluZ3NSZXN1bHQgfSBmcm9tICcuLi8uLi9kaWFsb2dzL3JlcG9ydC1zZXR0aW5ncy9yZXBvcnQtc2V0dGluZ3MuY29tcG9uZW50JztcbmltcG9ydCB7IFJlcG9ydEV4cG9ydENvbGxlY3RvclNlcnZpY2UgfSBmcm9tICcuLi8uLi9leHBvcnQvcmVwb3J0LWV4cG9ydC1jb2xsZWN0b3Iuc2VydmljZSc7XG5pbXBvcnQgeyBSZXBvcnRFeHBvcnRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vZXhwb3J0L3JlcG9ydC1leHBvcnQuc2VydmljZSc7XG5pbXBvcnQgeyBSZXBvcnRQZGZTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vZXhwb3J0L3JlcG9ydC1wZGYuc2VydmljZSc7XG5pbXBvcnQgeyBSZXBvcnRQcHR4U2VydmljZSB9IGZyb20gJy4uLy4uL2V4cG9ydC9yZXBvcnQtcHB0eC5zZXJ2aWNlJztcbmltcG9ydCB7IFJlcG9ydFRleHRMYXlvdXRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vZXhwb3J0L3JlcG9ydC10ZXh0LWxheW91dC5zZXJ2aWNlJztcbmltcG9ydCB7XG4gIENoYXJ0R3JhbnVsYXJpdHksIFJlcG9ydCxcbiAgUmVwb3J0Q29tcG9uZW50IGFzIFJlcG9ydENvbXBvbmVudE1vZGVsLCBSZXBvcnRGaWx0ZXJHcm91cCwgUmVwb3J0TGlzdEl0ZW0sXG59IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvcmVwb3J0LmludGVyZmFjZSc7XG5pbXBvcnQgeyBwcm92aWRlUmVwb3J0RGF0ZVBpY2tlciB9IGZyb20gJy4uLy4uL3JlcG9ydC1kYXRlLXByZXNldHMnO1xuaW1wb3J0IHtcbiAgR1JPVVBfQllfSVRFTSwgZmlsdGVySXRlbUZvckdyb3VwLCBncm91cEJ5RmlsdGVySXRlbSwgZ3JvdXBCeVNpZ25hdHVyZSwgZ3JvdXBWYWx1ZXNGcm9tUXVlcnksXG4gIGhhc1BhZ2VHcm91cCwgaXNHcmFudWxhcml0eU9mZmVyZWQsIG1hdGNoRmlsdGVySXRlbSwgbWF0Y2hGcm9tUXVlcnksIHJlcG9ydEJhckdyb3Vwcyxcbn0gZnJvbSAnLi4vLi4vcmVwb3J0LWZpbHRlci1pdGVtcyc7XG5pbXBvcnQgeyBSZXBvcnRGaWx0ZXJPcHRpb25zU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3JlcG9ydC1maWx0ZXItb3B0aW9ucy5zZXJ2aWNlJztcbmltcG9ydCB7IFJlcG9ydEZpbHRlclN0YXRlU2VydmljZSwgZGVmYXVsdFNpZ25hdHVyZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3JlcG9ydC1maWx0ZXItc3RhdGUuc2VydmljZSc7XG5pbXBvcnQgeyBSZXBvcnRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvcmVwb3J0LnNlcnZpY2UnO1xuaW1wb3J0IHsgemlwRXhwb3J0U3RhdGVzIH0gZnJvbSAnLi4vLi4vdGlsZS1kYXRhLXN0YXRlJztcblxuXG4vLyBUaGUgUmVwb3J0cyBwYWdlOiBBSSBjaGF0IG9uIHRoZSBsZWZ0LCB0aGUgcmVwb3J0IGNhbnZhcyBvbiB0aGUgcmlnaHQg4oCUXG4vLyBhIHNwbGl0LXBhbmUgbGF5b3V0OyB0aGUgdmlld2VyIGlzIG91ciBvd24gY2FudmFzIChubyBpZnJhbWUsIG5vIGVtYmVkIFVSTHMpLlxuLy8gVGhlIGNoYXQgaXMgYWx3YXlzIHNjb3BlZCB0byB0aGUgc2VsZWN0ZWQgcmVwb3J0OyBpdHMgaWQgcmlkZXMgb24gZXZlcnlcbi8vIHR1cm4gdmlhIFtyZXF1ZXN0RGF0YV0uXG5AQ29tcG9uZW50KHtcbiAgdGVtcGxhdGVVcmw6ICcuL3JlcG9ydC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3JlcG9ydC5jb21wb25lbnQuc2NzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgc2NoZW1hczogW0NVU1RPTV9FTEVNRU5UU19TQ0hFTUFdLFxuICBwcm92aWRlcnM6IFtcbiAgICAvLyBTZXNzaW9uIGZpbHRlciBzdGF0ZSBpcyBwZXItb3Blbi1yZXBvcnQtcGFnZSwgbm90IGFwcC1nbG9iYWw7IHRoZSBleHBvcnRcbiAgICAvLyBzZXJ2aWNlcyByZXNvbHZlIGZpbHRlcnMgdGhyb3VnaCBpdCwgc28gdGhleSBsaXZlIGF0IHRoZSBzYW1lIGxldmVsLlxuICAgIFJlcG9ydEZpbHRlclN0YXRlU2VydmljZSxcbiAgICAvLyBUaGUgYmFycycgc2VsZWN0IGxpc3RzLCBuYXJyb3dlZCBieSB0aGUgb3RoZXIgZmlsdGVyczsgcGVyIG9wZW4gcmVwb3J0LlxuICAgIFJlcG9ydEZpbHRlck9wdGlvbnNTZXJ2aWNlLFxuICAgIFJlcG9ydEV4cG9ydENvbGxlY3RvclNlcnZpY2UsXG4gICAgUmVwb3J0UHB0eFNlcnZpY2UsXG4gICAgUmVwb3J0UGRmU2VydmljZSxcbiAgICBSZXBvcnRUZXh0TGF5b3V0U2VydmljZSxcbiAgICBSZXBvcnRFeHBvcnRTZXJ2aWNlLFxuICAgIC8vIFRyZWUtc2hha2VuIEVDaGFydHMgY29yZSArIHRoZSAncmVwb3J0JyBob3VzZSB0aGVtZSwgbG9hZGVkIGxhemlseSB3aXRoXG4gICAgLy8gdGhpcyByb3V0ZSdzIGNodW5rLlxuICAgIHByb3ZpZGVFY2hhcnRzQ29yZSh7IGVjaGFydHM6ICgpID0+IGltcG9ydCgnLi4vLi4vdGhlbWUvZWNoYXJ0cycpLnRoZW4oKG1vZHVsZSkgPT4gbW9kdWxlLmRlZmF1bHQpIH0pLFxuICAgIC8vIFRoZSBiYXIncyBkYXRlIHBpY2tlcnMgc3RhcnQgdGhlaXIgd2Vla3Mgb24gTW9uZGF5IGFuZCBsaXN0IHRoZSBidWlsdC1pblxuICAgIC8vIHByZXNldHM7IGEgcHJlc2V0IG9ubHkgc2V0cyB0aGUgZGF5cy5cbiAgICBwcm92aWRlUmVwb3J0RGF0ZVBpY2tlcigpLFxuICBdLFxuICBpbXBvcnRzOiBbXG4gICAgRm9ybXNNb2R1bGUsXG4gICAgRnNBdXRvY29tcGxldGVDaGlwc01vZHVsZSxcbiAgICBGc0ZpbHRlck1vZHVsZSxcbiAgICBGc01lbnVNb2R1bGUsXG4gICAgRnNBaUNoYXRDb21wb25lbnQsXG4gICAgTWF0QnV0dG9uLFxuICAgIE1hdEljb24sXG4gICAgTWF0VG9vbHRpcCxcbiAgICBSZXBvcnRDYW52YXNDb21wb25lbnQsXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIFJlcG9ydENvbXBvbmVudCB7XG5cbiAgLy8gVGhlIHNpbmdsZSByZXBvcnQgdGhlIHZpZXdlciBhbmQgY2hhdCBhcmUgZm9jdXNlZCBvbi5cbiAgcHVibGljIHJlYWRvbmx5IHNlbGVjdGVkID0gc2lnbmFsPFJlcG9ydExpc3RJdGVtIHwgbnVsbD4obnVsbCk7XG4gIHB1YmxpYyByZWFkb25seSByZXBvcnQgPSBzaWduYWw8UmVwb3J0IHwgbnVsbD4obnVsbCk7XG4gIHB1YmxpYyByZWFkb25seSBsb2FkaW5nUmVwb3J0cyA9IHNpZ25hbCh0cnVlKTtcbiAgcHVibGljIHJlYWRvbmx5IGVkaXRNb2RlID0gc2lnbmFsKGZhbHNlKTtcblxuICAvLyBUaGUgcmVwb3J0IHRvb2xiYXIgSVMgYW4gZnMtZmlsdGVyOiB0aGUgcGlja2VyIHJpZGVzIGluIGl0cyBoZWFkaW5nXG4gIC8vIHRlbXBsYXRlLCB0aGUgbWVudSBiZWNvbWVzIGl0cyBhY3Rpb25zLCBhbmQgcmVwb3J0LWxldmVsIGZpbHRlciBncm91cHNcbiAgLy8gYmVjb21lIGl0cyBpdGVtcy4gUmVidWlsdCB3aGVuZXZlciB0aGUgbG9hZGVkIHJlcG9ydCAoYW5kIHRodXMgaXRzIGdyb3VwcylcbiAgLy8gY2hhbmdlczsgdGhlIG1lbnUncyBzaG93LWd1YXJkcyBrZWVwIHdvcmtpbmcgd2hpbGUgbm8gcmVwb3J0IGlzIHNlbGVjdGVkLlxuICBwdWJsaWMgcmVhZG9ubHkgcmVwb3J0RmlsdGVyQ29uZmlnID0gc2lnbmFsPEZpbHRlckNvbmZpZyB8IG51bGw+KG51bGwpO1xuXG4gIEBWaWV3Q2hpbGQoJ3NwbGl0JywgeyBzdGF0aWM6IHRydWUgfSlcbiAgcHJpdmF0ZSBfc3BsaXQhOiBFbGVtZW50UmVmPEhUTUxEaXZFbGVtZW50PjtcblxuICBAVmlld0NoaWxkKCdjaGF0UGFuZWwnLCB7IHN0YXRpYzogdHJ1ZSwgcmVhZDogRWxlbWVudFJlZiB9KVxuICBwcml2YXRlIF9jaGF0UGFuZWwhOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PjtcblxuICAvLyBPbmx5IHRoZSBjYW52YXMga25vd3Mgd2hpY2ggcGFnZSBpcyBvbiBzY3JlZW4sIGFuZCBhIHBhZ2Utc2NvcGVkIGV4cG9ydFxuICAvLyBoYXMgdG8gYXNrIGl0LlxuICBAVmlld0NoaWxkKFJlcG9ydENhbnZhc0NvbXBvbmVudClcbiAgcHJpdmF0ZSBfY2FudmFzPzogUmVwb3J0Q2FudmFzQ29tcG9uZW50O1xuXG4gIHB1YmxpYyByZWFkb25seSBpbnRyb01lc3NhZ2UgPSB7XG4gICAgdGV4dDogJycsXG4gIH07XG5cbiAgcHJpdmF0ZSBfcmVwb3J0RGF0YSA9IGluamVjdChSZXBvcnREYXRhKTtcbiAgcHJpdmF0ZSBfcmVwb3J0U2VydmljZSA9IGluamVjdChSZXBvcnRTZXJ2aWNlKTtcbiAgcHJpdmF0ZSBfZmlsdGVyU3RhdGUgPSBpbmplY3QoUmVwb3J0RmlsdGVyU3RhdGVTZXJ2aWNlKTtcbiAgcHJpdmF0ZSBfZmlsdGVyT3B0aW9ucyA9IGluamVjdChSZXBvcnRGaWx0ZXJPcHRpb25zU2VydmljZSk7XG4gIHByaXZhdGUgX2V4cG9ydFNlcnZpY2UgPSBpbmplY3QoUmVwb3J0RXhwb3J0U2VydmljZSk7XG4gIHByaXZhdGUgX2NvbGxlY3RvciA9IGluamVjdChSZXBvcnRFeHBvcnRDb2xsZWN0b3JTZXJ2aWNlKTtcbiAgcHJpdmF0ZSBfcHJvY2VzcyA9IGluamVjdChGc1Byb2Nlc3MpO1xuICBwcml2YXRlIF9wcm9tcHQgPSBpbmplY3QoRnNQcm9tcHQpO1xuICBwcml2YXRlIF9kaWFsb2cgPSBpbmplY3QoTWF0RGlhbG9nKTtcbiAgcHJpdmF0ZSBfZGVzdHJveVJlZiA9IGluamVjdChEZXN0cm95UmVmKTtcbiAgcHJpdmF0ZSBfem9uZSA9IGluamVjdChOZ1pvbmUpO1xuXG4gIC8vIFRoZSBzdGF0ZSB2ZXJzaW9uIHRoZSBiYXIgd2FzIGxhc3QgYnVpbHQgZm9yIChyZXBvcnRGaWx0ZXJLZXkpLlxuICBwcml2YXRlIHJlYWRvbmx5IF9iYXJWZXJzaW9uID0gc2lnbmFsKDApO1xuXG4gIC8vIFRoZSBwYWdlIG9uIHNjcmVlbiwgYXMgdGhlIGNhbnZhcyBsYXN0IHJlcG9ydGVkIGl0OiB0aGUgYmFyIHNob3dzIGl0c1xuICAvLyBwYWdlIGdyb3Vwcy5cbiAgcHJpdmF0ZSByZWFkb25seSBfcGFnZUlkID0gc2lnbmFsPG51bWJlciB8IG51bGw+KG51bGwpO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuX2J1aWxkUmVwb3J0Q29uZmlnKCk7XG5cbiAgICAvLyBhcHBseSgpIGFuZCByZXNldFRvQmFzZSgpIG1vdmUgdGhlIHN0YXRlIHZlcnNpb24uIFRoZSBiYXIgaXMgYnVpbHRcbiAgICAvLyBhZ2FpbiBmb3IgaXQsIGFuZCByZXBvcnRGaWx0ZXJLZXksIHdoaWNoIGNhcnJpZXMgaXQsIHJlY3JlYXRlc1xuICAgIC8vIGZzLWZpbHRlcjogaXQgcmVhZHMgaXRzIGNvbmZpZyBvbmNlLlxuICAgIGVmZmVjdCgoKSA9PiB7XG4gICAgICBjb25zdCB2ZXJzaW9uID0gdGhpcy5fZmlsdGVyU3RhdGUuc3RhdGVWZXJzaW9uKCk7XG5cbiAgICAgIHVudHJhY2tlZCgoKSA9PiB7XG4gICAgICAgIGlmICh2ZXJzaW9uICE9PSB0aGlzLl9iYXJWZXJzaW9uKCkpIHtcbiAgICAgICAgICB0aGlzLl9idWlsZFJlcG9ydENvbmZpZygpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIHRoaXMuX3JlcG9ydFNlcnZpY2UubG9hZCgpXG4gICAgICAucGlwZShcbiAgICAgICAgZmluYWxpemUoKCkgPT4ge1xuICAgICAgICAgIHRoaXMubG9hZGluZ1JlcG9ydHMuc2V0KGZhbHNlKTtcbiAgICAgICAgfSksXG4gICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLl9kZXN0cm95UmVmKSxcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoeyBlcnJvcjogKCkgPT4gdW5kZWZpbmVkIH0pO1xuICB9XG5cbiAgcHVibGljIGZldGNoUmVwb3J0cyA9IChrZXl3b3JkOiBzdHJpbmcpID0+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVwb3J0U2VydmljZS5maWx0ZXIoa2V5d29yZCk7XG4gIH07XG5cbiAgcHVibGljIHJlcG9ydENoYW5nZShyZXBvcnQ6IFJlcG9ydExpc3RJdGVtIHwgbnVsbCk6IHZvaWQge1xuICAgIHRoaXMucmVwb3J0LnNldChudWxsKTtcbiAgICB0aGlzLmVkaXRNb2RlLnNldChmYWxzZSk7XG4gICAgdGhpcy5fcGFnZUlkLnNldChudWxsKTtcbiAgICB0aGlzLl9idWlsZFJlcG9ydENvbmZpZygpO1xuXG4gICAgaWYgKHJlcG9ydCkge1xuICAgICAgdGhpcy5fbG9hZFJlcG9ydChyZXBvcnQuaWQpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBjcmVhdGVSZXBvcnQoKTogdm9pZCB7XG4gICAgdGhpcy5fcHJvbXB0LmlucHV0KHtcbiAgICAgIHRpdGxlOiAnQ3JlYXRlIFJlcG9ydCcsXG4gICAgICBsYWJlbDogJ05hbWUnLFxuICAgICAgY29tbWl0TGFiZWw6ICdDcmVhdGUnLFxuICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgfSlcbiAgICAgIC5waXBlKFxuICAgICAgICBzd2l0Y2hNYXAoKG5hbWU6IHN0cmluZykgPT4gdGhpcy5fcmVwb3J0U2VydmljZS5jcmVhdGUobmFtZSkpLFxuICAgICAgICB0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5fZGVzdHJveVJlZiksXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKChyZXBvcnQ6IFJlcG9ydExpc3RJdGVtKSA9PiB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWQuc2V0KHJlcG9ydCk7XG4gICAgICAgIHRoaXMuX2xvYWRSZXBvcnQocmVwb3J0LmlkKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHVibGljIHRvZ2dsZUVkaXRNb2RlKCk6IHZvaWQge1xuICAgIHRoaXMuZWRpdE1vZGUudXBkYXRlKChlZGl0TW9kZSkgPT4gIWVkaXRNb2RlKTtcbiAgfVxuXG4gIC8vIFRoZSBlZGl0IHRvb2xzIGxpdmUgaW4gdGhpcyB0b29sYmFyLCBidXQgdGhlIGNhbnZhcyBvd25zIHdoYXQgdGhleSBhY3Qgb25cbiAgLy8gKHRoZSBhY3RpdmUgcGFnZSwgdGhlIGhlYWRlci9mb290ZXIgYmFuZHMsIHdoaWNoIGxheWVyIGlzIGxpdmUpLlxuICBwdWJsaWMgZ2V0IGlzTWFzdGVyTW9kZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fY2FudmFzPy5tYXN0ZXJNb2RlKCkgPz8gZmFsc2U7XG4gIH1cblxuICBwdWJsaWMgYWRkVGV4dCgpOiB2b2lkIHtcbiAgICB0aGlzLl9jYW52YXM/LmFkZFRleHQoKTtcbiAgfVxuXG4gIHB1YmxpYyB0b2dnbGVNYXN0ZXJNb2RlKCk6IHZvaWQge1xuICAgIHRoaXMuX2NhbnZhcz8udG9nZ2xlTWFzdGVyTW9kZSgpO1xuICB9XG5cbiAgLy8gUmVwb3J0IHNldHRpbmdzIOKAlCBuYW1lLCBwYWdlIHNpemUuIFRoZSBwaWNrZXIgbGlzdCBhbmQgc3RydWN0dXJlIGJvdGhcbiAgLy8gcmVsb2FkIG9uIHNhdmUgKGEgcGFnZSByZXNpemUgcmUtcmVuZGVycyB0aGUgd2hvbGUgY2FudmFzKS5cbiAgcHVibGljIHJlcG9ydFNldHRpbmdzKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5yZXBvcnQoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2RpYWxvZy5vcGVuPFJlcG9ydFNldHRpbmdzQ29tcG9uZW50LCB1bmtub3duLCBSZXBvcnRTZXR0aW5nc1Jlc3VsdD4oUmVwb3J0U2V0dGluZ3NDb21wb25lbnQsIHtcbiAgICAgIGRhdGE6IHsgcmVwb3J0OiB0aGlzLnJlcG9ydCgpIH0sXG4gICAgICB3aWR0aDogJzQ2MHB4JyxcbiAgICB9KVxuICAgICAgLmFmdGVyQ2xvc2VkKClcbiAgICAgIC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLl9kZXN0cm95UmVmKSlcbiAgICAgIC5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xuICAgICAgICAvLyBUaGUgZGlhbG9nIGNvbmZpcm1zICsgcGVyZm9ybXMgdGhlIGRlbGV0ZSBpdHNlbGY7IHdlIGp1c3QgcmVhY3QgdG9cbiAgICAgICAgLy8gd2hhdCBpdCByZXBvcnRzIGJhY2suXG4gICAgICAgIGlmIChyZXN1bHQ/LmFjdGlvbiA9PT0gJ2RlbGV0ZWQnKSB7XG4gICAgICAgICAgdGhpcy5zZWxlY3RlZC5zZXQobnVsbCk7XG4gICAgICAgICAgdGhpcy5yZXBvcnQuc2V0KG51bGwpO1xuICAgICAgICAgIHRoaXMuX2J1aWxkUmVwb3J0Q29uZmlnKCk7XG5cbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocmVzdWx0Py5hY3Rpb24gPT09ICdzYXZlZCcgJiYgdGhpcy5zZWxlY3RlZCgpKSB7XG4gICAgICAgICAgdGhpcy5fbG9hZFJlcG9ydCh0aGlzLnNlbGVjdGVkKCkuaWQpO1xuICAgICAgICAgIHRoaXMuX3JlZnJlc2hSZXBvcnROYW1lKHRoaXMuc2VsZWN0ZWQoKS5pZCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICB9XG5cbiAgLy8gQ29tcG9uZW50IHNldHRpbmdzIOKAlCB0aXRsZSwgZXhhY3QgZ2VvbWV0cnksIGFuZCB0aGUgZGlhZ25vc3RpYyB2aWV3c1xuICAvLyAoU1FMLCBjb25maWcsIGZpbHRlciB3aXJpbmcpLlxuICBwdWJsaWMgY29tcG9uZW50U2V0dGluZ3MoY29tcG9uZW50OiBSZXBvcnRDb21wb25lbnRNb2RlbCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5yZXBvcnQoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGRpYWxvZ1JlZiA9IHRoaXMuX2RpYWxvZy5vcGVuPENvbXBvbmVudFNldHRpbmdzQ29tcG9uZW50LCB1bmtub3duLCBDb21wb25lbnRTZXR0aW5nc1Jlc3VsdD4oXG4gICAgICBDb21wb25lbnRTZXR0aW5nc0NvbXBvbmVudCxcbiAgICAgIHtcbiAgICAgICAgZGF0YTogeyByZXBvcnQ6IHRoaXMucmVwb3J0KCksIGNvbXBvbmVudCB9LFxuICAgICAgICB3aWR0aDogJzY0MHB4JyxcbiAgICAgIH0sXG4gICAgKTtcblxuICAgIC8vIEZpbHRlciBhZGQvcmVtb3ZlL2xldmVsIGNoYW5nZXMgcGVyc2lzdCBpbW1lZGlhdGVseSBpbnNpZGUgdGhlIGRpYWxvZyAobm9cbiAgICAvLyBcInNhdmVcIikgYW5kIGNhbiBsZWF2ZSBpdCBieSBhbiBleGl0IHRoYXQgY2FycmllcyBubyByZXN1bHQsIHNvIHRoZXkgYXJlXG4gICAgLy8gYW5ub3VuY2VkIGFzIHRoZXkgbGFuZC4gVGhlIHJlbG9hZCB3YWl0cyBmb3IgdGhlIGNsb3NlIHNvIHRoZSBjYW52YXMgaXNuJ3RcbiAgICAvLyByZS1yZW5kZXJpbmcgdW5kZXJuZWF0aCBhbiBvcGVuIGRpYWxvZy5cbiAgICBsZXQgZmlsdGVyc0NoYW5nZWQgPSBmYWxzZTtcbiAgICBkaWFsb2dSZWYuY29tcG9uZW50SW5zdGFuY2UuZmlsdGVyc0NoYW5nZWRcbiAgICAgIC5waXBlKHRha2VVbnRpbChkaWFsb2dSZWYuYWZ0ZXJDbG9zZWQoKSkpXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IGZpbHRlcnNDaGFuZ2VkID0gdHJ1ZSk7XG5cbiAgICBkaWFsb2dSZWYuYWZ0ZXJDbG9zZWQoKVxuICAgICAgLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKHRoaXMuX2Rlc3Ryb3lSZWYpKVxuICAgICAgLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XG4gICAgICAgIC8vIFRoZSBkaWFsb2cgY29uZmlybXMgKyBwZXJmb3JtcyB0aGUgZGVsZXRlIGl0c2VsZi4gVGhlIGNvbXBvbmVudCBpc1xuICAgICAgICAvLyBnb25lIGZyb20gdGhlIHJlcG9ydCwgc28gcmVsb2FkIHJhdGhlciB0aGFuIHBhdGNoaW5nIGl0IG91dCBsb2NhbGx5IOKAlFxuICAgICAgICAvLyBpdHMgZmlsdGVycyB3ZW50IHdpdGggaXQsIHdoaWNoIHRoZSByZXBvcnQgYmFyIGhhcyB0byBiZSByZWJ1aWx0IGZvci5cbiAgICAgICAgaWYgKHJlc3VsdD8uZGVsZXRlZCkge1xuICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGVkKCkpIHtcbiAgICAgICAgICAgIHRoaXMuX2xvYWRSZXBvcnQodGhpcy5zZWxlY3RlZCgpLmlkKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBUaGUgcmVwb3J0J3MgZmlsdGVyIGdyb3VwcyBjaGFuZ2VkLCBzbyB0aGUgcmVwb3J0IGJhciBhbmQgdGhlXG4gICAgICAgIC8vIG9uLWNvbXBvbmVudCBzdHJpcHMgaGF2ZSB0byBiZSByZWJ1aWx0IGZyb20gYSBmcmVzaCByZXBvcnQuXG4gICAgICAgIGlmIChmaWx0ZXJzQ2hhbmdlZCkge1xuICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGVkKCkpIHtcbiAgICAgICAgICAgIHRoaXMuX2xvYWRSZXBvcnQodGhpcy5zZWxlY3RlZCgpLmlkKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBOb3RoaW5nIGVsc2UgaW4gdGhlIGRpYWxvZyB0b3VjaGVzIHRoZSBxdWVyeSDigJQgdGl0bGUgYW5kIHBhZGRpbmcgYXJlXG4gICAgICAgIC8vIHByZXNlbnRhdGlvbi4gUmVwYWludCB0aGUgb25lIGNvbXBvbmVudCBpdCB3YXMgb3BlbmVkIGZvciBhbmQgbGVhdmVcbiAgICAgICAgLy8gZXZlcnkgb3RoZXIgY29tcG9uZW50J3MgZGF0YSwgYW5kIGl0cyBxdWVyeSwgYWxvbmUuXG4gICAgICAgIGlmIChyZXN1bHQ/LnNldHRpbmdzKSB7XG4gICAgICAgICAgdGhpcy5fY2FudmFzPy5hcHBseUNvbXBvbmVudFNldHRpbmdzKGNvbXBvbmVudC5pZCwgcmVzdWx0LnNldHRpbmdzKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH1cblxuICAvLyBUaGUgY2FudmFzIG1vdmVkIHRvIGFub3RoZXIgcGFnZS4gVGhlIGJhciBzaG93cyB0aGUgcGFnZSBncm91cHMgb2YgdGhlXG4gIC8vIHBhZ2Ugb24gc2NyZWVuLlxuICBwdWJsaWMgb25DYW52YXNQYWdlQ2hhbmdlZChwYWdlSWQ6IG51bWJlciB8IG51bGwpOiB2b2lkIHtcbiAgICB0aGlzLl9wYWdlSWQuc2V0KHBhZ2VJZCk7XG4gICAgLy8gQSBoZWFkZXIgb3IgZm9vdGVyIHRpbGUgcmVhZHMgaXRzIHBhZ2UncyBncm91cHMgdGhyb3VnaCBpdC5cbiAgICB0aGlzLl9maWx0ZXJTdGF0ZS5zZXRQYWdlKHBhZ2VJZCk7XG5cbiAgICBpZiAoaGFzUGFnZUdyb3VwKHRoaXMucmVwb3J0KCkpKSB7XG4gICAgICB0aGlzLl9idWlsZFJlcG9ydENvbmZpZygpO1xuICAgIH1cbiAgfVxuXG4gIC8vIFRoZSBjYW52YXMgY2hhbmdlZCB0aGUgcmVwb3J0J3Mgc3RydWN0dXJlIChhZGRlZCBhIHBhZ2UpIOKAlCByZS1mZXRjaCBzbyB0aGVcbiAgLy8gbmV3IHBhZ2UgcmVuZGVyczsgdGhlIGNhbnZhcyBsYW5kcyB0aGUgdmlldyBvbiBpdC5cbiAgcHVibGljIG9uQ2FudmFzUmVwb3J0Q2hhbmdlZCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5zZWxlY3RlZCgpKSB7XG4gICAgICB0aGlzLl9sb2FkUmVwb3J0KHRoaXMuc2VsZWN0ZWQoKS5pZCk7XG4gICAgfVxuICB9XG5cbiAgLy8gRXhwb3J0IHRoZSByZXBvcnQgdG8gUG93ZXJQb2ludCwgZW50aXJlbHkgY2xpZW50LXNpZGU6IGV2ZXJ5IGNvbXBvbmVudCdzXG4gIC8vIGRhdGEgaXMgZmV0Y2hlZCBmcmVzaCB3aXRoIHRoZSBjdXJyZW50IGZpbHRlciBzdGF0ZSAoYWxsIHBhZ2VzLCBub3QganVzdFxuICAvLyB0aGUgdmlzaWJsZSBvbmUpLCB0aGVuIHBwdHhnZW5qcyBidWlsZHMgYSBkZWNrIG9mIE5BVElWRSBlZGl0YWJsZSBjaGFydHMg4oCUXG4gIC8vIHBhZ2UgPSBzbGlkZSwgcG9zaXRpb25zIDE6MS4gVGhlIGRvY2sgc2hvd3MgcHJvZ3Jlc3MgdW50aWwgdGhlIGZpbGUgc2F2ZXMuXG4gIHB1YmxpYyBleHBvcnRQb3dlcnBvaW50KCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5yZXBvcnQoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX3Byb2Nlc3MucnVuKFxuICAgICAgJ0V4cG9ydGluZyBQb3dlclBvaW50JyxcbiAgICAgIHRoaXMuX2V4cG9ydFNlcnZpY2UucG93ZXJwb2ludCh0aGlzLnJlcG9ydCgpKSxcbiAgICApO1xuICB9XG5cbiAgLy8gRXhwb3J0IHRvIFBERiwgZW50aXJlbHkgY2xpZW50LXNpZGU6IHNhbWUgY29sbGVjdGlvbiBwYXNzLCBjaGFydHMgcmVuZGVyZWRcbiAgLy8gdGhyb3VnaCBhbiBvZmZzY3JlZW4gRUNoYXJ0cyBpbnN0YW5jZSBhdCAzw5cgcGl4ZWwgcmF0aW8gKHBpeGVsLWlkZW50aWNhbFxuICAvLyB0byB0aGUgc2NyZWVuKSwgdGFibGVzIHZpYSBqc3BkZi1hdXRvdGFibGUg4oCUIHBhZ2UgPSBQREYgcGFnZS5cbiAgcHVibGljIGV4cG9ydFBkZigpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMucmVwb3J0KCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9wcm9jZXNzLnJ1bihcbiAgICAgICdFeHBvcnRpbmcgUERGJyxcbiAgICAgIHRoaXMuX2V4cG9ydFNlcnZpY2UucGRmKHRoaXMucmVwb3J0KCkpLFxuICAgICk7XG4gIH1cblxuICAvLyBUaGUgd2hvbGUgcmVwb3J0IGFzIGZpbGVzIGluIG9uZSBhY3Rpb246IHRoZSBzZXJ2ZXIgd3JpdGVzIG9uZSBDU1YgcGVyXG4gIC8vIGNvbXBvbmVudCwgZWFjaCB3aGF0IHRoZSBzY3JlZW4gc2hvd3MgKGEgY2hhcnQgb3IgS1BJIGFzIGRyYXduLCBhdCB0aGVcbiAgLy8gdmlld2VyJ3MgZ3JvdXAtYnkgZ3JhaW47IGEgbGlzdCBpbiBmdWxsKSwgYW5kIHppcHMgdGhlbSBmb2xkZXJlZCBieSBwYWdlXG4gIC8vIHdpdGggYW4gRXhwb3J0IE5vdGVzLnR4dCB0aGF0IHJlY29yZHMgdGhlIGZpbHRlcnMgYXMgdGhlIGJhciByZWFkcyB0aGVtLlxuICAvLyBFYWNoIGZpbGUgY2FycmllcyBpdHMgdGlsZSdzIG93biBzdGF0ZSAoemlwRXhwb3J0U3RhdGVzKTogYSBsaXN0J3Mgc29ydCxcbiAgLy8gc2VhcmNoIGFuZCBoaWRkZW4gY29sdW1ucywgYSBjaGFydCdzIGRyaWxsIHBhdGggYW5kIHRoZSBncm91cHMgdGhhdCBtYXRjaFxuICAvLyAnYW55JzsgYSBzZXJ2ZXIgdGhhdCBkb2VzIG5vdCByZWFkIGl0IHVzZXMgZWFjaCBsaXN0J3Mgc2F2ZWQgc29ydC4gVGhlXG4gIC8vIG5vdGVzIGdldCB0aGUgZmlsdGVyIGxpbmVzIGFzIHRoZSBjb3ZlciB3b3JkcyB0aGVtIChmaWx0ZXJMaW5lczsgYSBUaGlzXG4gIC8vIFBhZ2UgemlwIG5hbWVzIG9ubHkgdGhlIGdyb3VwcyB0aGF0IHJlYWNoIHRoZSBwYWdlKS4gQWxsIG9mIGl0IGlzIHJlYWRcbiAgLy8gb25jZSwgd2hlbiB0aGUgZXhwb3J0IHN0YXJ0cy4gVGhpcyB2aWV3IGtlZXBzIG5vIHNhdmVkIHZpZXdzLCBzbyBpdFxuICAvLyBuYW1lcyBub25lLiBgdGhpc1BhZ2VgIG5hcnJvd3MgaXQgdG8gdGhlIHBhZ2UgdGhlIGNhbnZhcyBpcyBzaG93aW5nLlxuICAvLyBVbmxpa2UgdGhlIFBERi9Qb3dlclBvaW50IGV4cG9ydHMgdGhlIGZpbGVzIGFyZSB3cml0dGVuIHNlcnZlci1zaWRlLCBzb1xuICAvLyB0aGV5IGFyZSBub3QgY2FwcGVkIGJ5IHdoYXQgYSBzbGlkZSBjYW4gaG9sZC5cbiAgcHVibGljIGV4cG9ydERhdGEodGhpc1BhZ2UgPSBmYWxzZSk6IHZvaWQge1xuICAgIGNvbnN0IHJlcG9ydCA9IHRoaXMucmVwb3J0KCk7XG4gICAgaWYgKCFyZXBvcnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBwYWdlSWQgPSB0aGlzUGFnZSA/IHRoaXMuX2NhbnZhcz8uYWN0aXZlUGFnZT8uaWQgPz8gbnVsbCA6IG51bGw7XG4gICAgY29uc3QgZmlsdGVycyA9IHRoaXMuX2ZpbHRlclN0YXRlLnJlc29sdmVGb3JSZXBvcnQocmVwb3J0LCBwYWdlSWQpO1xuICAgIGNvbnN0IGZyZXF1ZW5jeSA9IHRoaXMuX2ZpbHRlclN0YXRlLmZyZXF1ZW5jeSgpO1xuICAgIGNvbnN0IHNuYXBzaG90ID0gdGhpcy5fY29sbGVjdG9yLnNuYXBzaG90KHJlcG9ydCk7XG4gICAgY29uc3Qgc3RhdGVzID0gemlwRXhwb3J0U3RhdGVzKHJlcG9ydCwgc25hcHNob3QudmlldywgcGFnZUlkKTtcblxuICAgIHRoaXMuX3Byb2Nlc3MuZG93bmxvYWQoXG4gICAgICAnRXhwb3J0aW5nIGRhdGEnLFxuICAgICAgdGhpcy5fY29sbGVjdG9yLmZpbHRlckxpbmVzKHJlcG9ydCwgc25hcHNob3QsIHBhZ2VJZClcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgc3dpdGNoTWFwKChsaW5lcykgPT4gdGhpcy5fcmVwb3J0RGF0YS5leHBvcnRSZXBvcnQoXG4gICAgICAgICAgICByZXBvcnQuaWQsXG4gICAgICAgICAgICBmaWx0ZXJzLFxuICAgICAgICAgICAgcGFnZUlkLFxuICAgICAgICAgICAgZnJlcXVlbmN5LFxuICAgICAgICAgICAgbGluZXMsXG4gICAgICAgICAgICBzdGF0ZXMsXG4gICAgICAgICAgKSksXG4gICAgICAgICksXG4gICAgKTtcbiAgfVxuXG4gIC8vIFJlYWN0IHRvIGVhY2ggY2hhdCB0dXJuIChmcy1jaGF0IGhhbmRsZXMgdGhlIHJlcXVlc3QgKyBwZXJzaXN0ZW5jZSk7IHdlXG4gIC8vIG9ubHkgY2FyZSBhYm91dCB0aGUgcmVwb3J0IHNpZGUgZWZmZWN0cyB0aGlzIGNvbnRleHQncyBiYWNrZW5kIGZsYWdzLlxuICBwdWJsaWMgb25DaGF0UmVzcG9uc2UocmVzcG9uc2U6IEZzQWlDaGF0UmVzcG9uc2UpOiB2b2lkIHtcbiAgICAvLyBUaGUgYWdlbnQgY2hhbmdlZCB0aGUgcmVwb3J0J3Mgc3RydWN0dXJlIOKAlCByZS1mZXRjaCBpdC4gU2Vzc2lvbiBmaWx0ZXJcbiAgICAvLyB2YWx1ZXMgc3Vydml2ZSAodGhlIGZpbHRlci1zdGF0ZSBzZXJ2aWNlIGtlZXBzIHZhbHVlcyBmb3IgZ3JvdXBzIHRoYXRcbiAgICAvLyBzdGlsbCBleGlzdCkuXG4gICAgaWYgKHJlc3BvbnNlLnJlcG9ydENoYW5nZWQgJiYgdGhpcy5zZWxlY3RlZCgpKSB7XG4gICAgICB0aGlzLl9sb2FkUmVwb3J0KHRoaXMuc2VsZWN0ZWQoKS5pZCk7XG4gICAgfVxuXG4gICAgLy8gQSByZW5hbWUgY2hhbmdlcyBub3RoaW5nIHN0cnVjdHVyYWwg4oCUIHJlZnJlc2ggdGhlIHBpY2tlciBjaGlwIGxhYmVsLlxuICAgIGlmIChyZXNwb25zZS5yZXBvcnRSZW5hbWVkICYmIHRoaXMuc2VsZWN0ZWQoKSkge1xuICAgICAgdGhpcy5fcmVmcmVzaFJlcG9ydE5hbWUodGhpcy5zZWxlY3RlZCgpLmlkKTtcbiAgICB9XG4gIH1cblxuICAvLyBEcmFnIHRoZSBkaXZpZGVyIGJldHdlZW4gdGhlIGNoYXQgYW5kIGNhbnZhcyBwYW5lcyAocG9pbnRlci1jYXB0dXJlIGxvb3BcbiAgLy8gb3V0c2lkZSBBbmd1bGFyKS5cbiAgcHVibGljIG9uUmVzaXplU3RhcnQoZXZlbnQ6IFBvaW50ZXJFdmVudCk6IHZvaWQge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICBjb25zdCBoYW5kbGUgPSBldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQ7XG4gICAgaGFuZGxlLnNldFBvaW50ZXJDYXB0dXJlKGV2ZW50LnBvaW50ZXJJZCk7XG4gICAgdGhpcy5fc3BsaXQubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QuYWRkKCdyZXNpemluZycpO1xuXG4gICAgdGhpcy5fem9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICBjb25zdCBtb3ZlID0gKGU6IFBvaW50ZXJFdmVudCkgPT4gdGhpcy5fcmVzaXplVG8oZS5jbGllbnRYKTtcbiAgICAgIGNvbnN0IGVuZCA9ICgpID0+IHtcbiAgICAgICAgaGFuZGxlLnJlbGVhc2VQb2ludGVyQ2FwdHVyZShldmVudC5wb2ludGVySWQpO1xuICAgICAgICBoYW5kbGUucmVtb3ZlRXZlbnRMaXN0ZW5lcigncG9pbnRlcm1vdmUnLCBtb3ZlKTtcbiAgICAgICAgaGFuZGxlLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3BvaW50ZXJ1cCcsIGVuZCk7XG4gICAgICAgIGhhbmRsZS5yZW1vdmVFdmVudExpc3RlbmVyKCdwb2ludGVyY2FuY2VsJywgZW5kKTtcbiAgICAgICAgdGhpcy5fc3BsaXQubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKCdyZXNpemluZycpO1xuICAgICAgfTtcblxuICAgICAgaGFuZGxlLmFkZEV2ZW50TGlzdGVuZXIoJ3BvaW50ZXJtb3ZlJywgbW92ZSk7XG4gICAgICBoYW5kbGUuYWRkRXZlbnRMaXN0ZW5lcigncG9pbnRlcnVwJywgZW5kKTtcbiAgICAgIGhhbmRsZS5hZGRFdmVudExpc3RlbmVyKCdwb2ludGVyY2FuY2VsJywgZW5kKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgX3Jlc2l6ZVRvKGNsaWVudFg6IG51bWJlcik6IHZvaWQge1xuICAgIGNvbnN0IHJlY3QgPSB0aGlzLl9zcGxpdC5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIGlmIChyZWN0LndpZHRoID09PSAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgcmF0aW8gPSAoY2xpZW50WCAtIHJlY3QubGVmdCkgLyByZWN0LndpZHRoO1xuICAgIGNvbnN0IGNsYW1wZWQgPSBNYXRoLm1pbigwLjgsIE1hdGgubWF4KDAuMiwgcmF0aW8pKTtcbiAgICB0aGlzLl9jaGF0UGFuZWwubmF0aXZlRWxlbWVudC5zdHlsZS5mbGV4QmFzaXMgPSBgJHtjbGFtcGVkICogMTAwfSVgO1xuICB9XG5cbiAgcHJpdmF0ZSBfbG9hZFJlcG9ydChyZXBvcnRJZDogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5fcmVwb3J0RGF0YS5nZXQocmVwb3J0SWQpXG4gICAgICAucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5fZGVzdHJveVJlZikpXG4gICAgICAuc3Vic2NyaWJlKChyZXBvcnQ6IFJlcG9ydCkgPT4ge1xuICAgICAgICB0aGlzLnJlcG9ydC5zZXQocmVwb3J0KTtcbiAgICAgICAgLy8gTm8gVVJMIHN0YXRlIGluIHRoaXMgdmlldzogbm90aGluZyBpcyByZXN0b3JlZCBmcm9tIHRoZSBVUkwgYW5kXG4gICAgICAgIC8vIG5vdGhpbmcgbGlzdGVucyB0byB1cmxDaGFuZ2VzKCksIHNvIGl0cyBmaWx0ZXJzIHN0YXkgc2Vzc2lvbi1vbmx5LlxuICAgICAgICB0aGlzLl9maWx0ZXJTdGF0ZS5pbml0KHJlcG9ydCk7XG4gICAgICAgIHRoaXMuX2J1aWxkUmVwb3J0Q29uZmlnKCk7XG4gICAgICB9KTtcbiAgfVxuXG4gIC8vIFJlcG9ydC1sZXZlbCBmaWx0ZXIgZ3JvdXBzIGluIHRoZWlyIHNhdmVkIG9yZGVyIOKAlCB0aGUgb25lcyB0aGF0IHJlbmRlciBpblxuICAvLyB0aGUgdG9vbGJhciAoY29tcG9uZW50LWxldmVsIGdyb3VwcyByZW5kZXIgb24gdGhlaXIgY29tcG9uZW50cyksIHdpdGhcbiAgLy8gdGhlIHBhZ2UgZ3JvdXBzIG9mIHRoZSBwYWdlIG9uIHNjcmVlbi5cbiAgcHJpdmF0ZSBfcmVwb3J0R3JvdXBzKCk6IFJlcG9ydEZpbHRlckdyb3VwW10ge1xuICAgIHJldHVybiByZXBvcnRCYXJHcm91cHModGhpcy5yZXBvcnQoKSwgdGhpcy5fcGFnZUlkKCkpO1xuICB9XG5cbiAgLy8gR2F0ZXMgdGhlIHRvb2xiYXIgZnMtZmlsdGVyIHNvIGl0IGlzbid0IHJlbmRlcmVkICh0YWtpbmcgc3BhY2UpIHdoZW4gdGhlcmVcbiAgLy8gaXMgbm90aGluZyB0byBwdXQgaW4gaXQg4oCUIG5vIHJlcG9ydC1sZXZlbCBmaWx0ZXJzIGFuZCBubyBncm91cC1ieSBjb250cm9sLlxuICBwdWJsaWMgZ2V0IHJlcG9ydEhhc0ZpbHRlcnMoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlcG9ydEdyb3VwcygpLmxlbmd0aCA+IDAgfHwgISF0aGlzLl9ncm91cEJ5SXRlbSgpO1xuICB9XG5cbiAgLy8gZnMtZmlsdGVyIHJlYWRzIGl0cyBjb25maWcgb25seSBvbmNlIChhdCBpbml0KSDigJQgcmUtYmluZGluZyBkb2VzIG5vdGhpbmcuXG4gIC8vIFRoZSB0ZW1wbGF0ZSBrZXlzIHRoZSB0b29sYmFyIGZzLWZpbHRlciBvbiB0aGlzIHNpZ25hdHVyZSBzbyBpdCdzIHJlY3JlYXRlZFxuICAvLyAoYW5kIHJlLXJlYWRzIHRoZSByZWJ1aWx0IGNvbmZpZykgd2hlbmV2ZXIgdGhlIHJlcG9ydC1sZXZlbCBmaWx0ZXIgc2V0XG4gIC8vIGNoYW5nZXMsIGUuZy4gYWZ0ZXIgdGhlIGNvbXBvbmVudCBzZXR0aW5ncyBkaWFsb2cgYWRkcy9tb3ZlcyBhIGZpbHRlci5cbiAgcHVibGljIGdldCByZXBvcnRGaWx0ZXJLZXkoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gW1xuICAgICAgLy8gVGhlIHN0YXRlIHZlcnNpb24gdGhlIGJhciB3YXMgYnVpbHQgZm9yOiBhbiBhcHBsaWVkIHZpZXcsIG9yIGEgcmVzZXRcbiAgICAgIC8vIHRvIHRoZSBiYXNlLCByZXBsYWNlcyBldmVyeSB2YWx1ZSBhdCBvbmNlLlxuICAgICAgdGhpcy5fYmFyVmVyc2lvbigpLFxuICAgICAgLy8gVGhlIGVmZmVjdGl2ZSB6b25lIGlzIHBhcnQgb2YgaXQgdG9vOiBhIHpvbmUgY2hhbmdlIHJlLXJlc29sdmVzIHJlbGF0aXZlXG4gICAgICAvLyBwcmVzZXRzLCBhbmQgdGhlIGJhciBtdXN0IGJlIHJlY3JlYXRlZCB0byBzaG93IHRoZSBuZXcgZGF5cy5cbiAgICAgIHRoaXMuX2ZpbHRlclN0YXRlLnRpbWV6b25lKCksXG4gICAgICAvLyBUaGUgc3RvcmVkIGRlZmF1bHQgaXMgcGFydCBvZiB0aGUgc2lnbmF0dXJlOiBzYXZpbmcgYSBuZXcgZGVmYXVsdCBpbiByZXBvcnRcbiAgICAgIC8vIHNldHRpbmdzIHJlYnVpbGRzIHRoZSBjb25maWcsIGJ1dCB3aXRob3V0IGEga2V5IGNoYW5nZSBmcy1maWx0ZXIga2VlcHNcbiAgICAgIC8vIHJlbmRlcmluZyB0aGUgdmFsdWVzIGl0IHdhcyBjcmVhdGVkIHdpdGggdW50aWwgYSBmdWxsIHBhZ2UgcmVsb2FkLlxuICAgICAgZ3JvdXBCeVNpZ25hdHVyZSh0aGlzLnJlcG9ydCgpKSxcbiAgICAgIC4uLnRoaXMuX3JlcG9ydEdyb3VwcygpLm1hcCgoZ3JvdXApID0+IGAke2dyb3VwLmlkfToke2dyb3VwLmxldmVsfToke2dyb3VwLmxhYmVsfToke2RlZmF1bHRTaWduYXR1cmUoZ3JvdXApfWApLFxuICAgICAgLy8gQSBwYWdlIGdyb3VwIHNob3dzIG9uIGl0cyBvd24gcGFnZSBvbmx5LCBzbyBzdWNoIGEgYmFyIGlzIHJlY3JlYXRlZFxuICAgICAgLy8gd2hlbiB0aGUgcGFnZSBvbiBzY3JlZW4gY2hhbmdlcy5cbiAgICAgIC4uLihoYXNQYWdlR3JvdXAodGhpcy5yZXBvcnQoKSkgPyBbYHBhZ2U6JHt0aGlzLl9wYWdlSWQoKX1gXSA6IFtdKSxcbiAgICBdLmpvaW4oJ3wnKTtcbiAgfVxuXG4gIC8vIChSZSlidWlsZCB0aGUgdG9vbGJhciBmcy1maWx0ZXIgY29uZmlnIOKAlCB0aGUgcmVwb3J0LWxldmVsIGZpbHRlciBpdGVtcyBhbmRcbiAgLy8gdGhlbiB0aGUgZ3JvdXAtYnkgY29udHJvbC4gVGhlIHJlcG9ydCdzIGFjdGlvbnMgbGl2ZSBpbiB0aGUgZnMtbWVudSBiZXNpZGVcbiAgLy8gdGhlIHBpY2tlciwgbm90IGhlcmUuIE9ubHkgYnVpbHQvdXNlZCBvbmNlIGEgcmVwb3J0IGlzIGxvYWRlZCAodGhlIHRlbXBsYXRlXG4gIC8vIGdhdGVzIGl0IG9uIGByZXBvcnRgKS5cbiAgcHJpdmF0ZSBfYnVpbGRSZXBvcnRDb25maWcoKTogdm9pZCB7XG4gICAgY29uc3QgcmVwb3J0SWQgPSB0aGlzLnJlcG9ydCgpPy5pZCA/PyBudWxsO1xuXG4gICAgLy8gRHJvcCBhIGdyYWluIHRoZSBjb250cm9sIG5vIGxvbmdlciBvZmZlcnMg4oCUIHRoZSBhZ2VudCBjYW4gbmFycm93IHRoZSBsaXN0XG4gICAgLy8gbWlkLXNlc3Npb24sIGFuZCBhbiBvdmVycmlkZSB0aGUgdmlld2VyIGNhbid0IHNlZSBpcyB3b3JzZSB0aGFuIG5vbmUuXG4gICAgaWYgKHRoaXMucmVwb3J0KCkgJiYgIWlzR3JhbnVsYXJpdHlPZmZlcmVkKHRoaXMucmVwb3J0KCksIHRoaXMuX2ZpbHRlclN0YXRlLmZyZXF1ZW5jeSgpKSkge1xuICAgICAgdGhpcy5fZmlsdGVyU3RhdGUuc2V0RnJlcXVlbmN5KG51bGwpO1xuICAgIH1cblxuICAgIGNvbnN0IGZlYXR1cmVzID0gdGhpcy5yZXBvcnQoKT8udmlld2VyRmVhdHVyZXMgPz8gW107XG4gICAgY29uc3QgaXRlbXMgPSByZXBvcnRJZFxuICAgICAgPyB0aGlzLl9yZXBvcnRHcm91cHMoKS5tYXAoKGdyb3VwKSA9PlxuICAgICAgICBmaWx0ZXJJdGVtRm9yR3JvdXAoZ3JvdXAsIHRoaXMuX2ZpbHRlck9wdGlvbnMsIHRoaXMucmVwb3J0KCksIHRoaXMuX2ZpbHRlclN0YXRlLnZhbHVlKGdyb3VwLmlkKSwgZmVhdHVyZXMpKVxuICAgICAgOiBbXTtcblxuICAgIC8vIFRoZSBncm91cC1ieSBjb250cm9sIGxlYWRzIHRoZSBiYXIsIGFoZWFkIG9mIGV2ZXJ5IGZpbHRlcjogaXQgc2V0cyB0aGVcbiAgICAvLyBncmFpbiB0aGUgd2hvbGUgcmVwb3J0IGlzIHJlYWQgYXQsIHNvIGl0IGlzIHRoZSBmaXJzdCB0aGluZyBhIHZpZXdlclxuICAgIC8vIGRlY2lkZXMuIEl0IGlzIG5vdCBhIGZpbHRlciBncm91cCDigJQgaXQgcmUtYnVja2V0cyByb3dzIHJhdGhlciB0aGFuXG4gICAgLy8gbmFycm93aW5nIHRoZW0g4oCUIHNvIGl0IGlzIHBsYWNlZCBoZXJlIHJhdGhlciB0aGFuIG9yZGVyZWQgYW1vbmcgdGhlbS5cbiAgICBjb25zdCBncm91cEJ5SXRlbSA9IHRoaXMuX2dyb3VwQnlJdGVtKCk7XG4gICAgaWYgKGdyb3VwQnlJdGVtKSB7XG4gICAgICBpdGVtcy51bnNoaWZ0KGdyb3VwQnlJdGVtKTtcbiAgICB9XG5cbiAgICAvLyBIb3cgdGhlIGdyb3VwcyBjb21iaW5lIGNsb3NlcyB0aGUgYmFyLlxuICAgIGNvbnN0IG1hdGNoSXRlbSA9IHRoaXMuX21hdGNoSXRlbSgpO1xuICAgIGlmIChtYXRjaEl0ZW0pIHtcbiAgICAgIGl0ZW1zLnB1c2gobWF0Y2hJdGVtKTtcbiAgICB9XG5cbiAgICB0aGlzLl9iYXJWZXJzaW9uLnNldCh0aGlzLl9maWx0ZXJTdGF0ZS5zdGF0ZVZlcnNpb24oKSk7XG4gICAgdGhpcy5yZXBvcnRGaWx0ZXJDb25maWcuc2V0KHtcbiAgICAgIC8vIE5ldmVyIHRvdWNoIHRoZSBVUkwgb3IgcGVyc2lzdCBmaWx0ZXIgc3RhdGUg4oCUIHJlcG9ydCBmaWx0ZXJzIGFyZVxuICAgICAgLy8gc2Vzc2lvbi1vbmx5LCBvd25lZCBieSBSZXBvcnRGaWx0ZXJTdGF0ZVNlcnZpY2UuXG4gICAgICBxdWVyeVBhcmFtOiBmYWxzZSxcbiAgICAgIHBlcnNpc3Q6IGZhbHNlLFxuICAgICAgaXRlbXMsXG4gICAgICBjaGFuZ2U6IChxdWVyeSkgPT4gdGhpcy5fYmFyQ2hhbmdlZChxdWVyeSA/PyB7fSwgISFtYXRjaEl0ZW0pLFxuICAgICAgLy8gJ0NsZWFyIGZpbHRlcnMnIHB1dHMgdGhlIHNjcmVlbiBiYWNrIG9uIHRoZSByZXBvcnQncyBkZWZhdWx0cyAodGhpc1xuICAgICAgLy8gdmlldyBvcGVucyBubyBzYXZlZCB2aWV3cykgYW5kIGRyb3BzIHRoZSB0ZW1wb3JhcnkgbGF5ZXIuIEEgc2VydmVyXG4gICAgICAvLyB3aXRob3V0IHNhdmVkIHZpZXdzIGtlZXBzIHRoZSBjbGVhciBpdCBhbHdheXMgaGFkOiB0aGUgYmFyJ3MgaXRlbXNcbiAgICAgIC8vIG9ubHkuXG4gICAgICBjbGVhcjogZmVhdHVyZXMuaW5jbHVkZXMoJ3ZpZXdzJykgPyAoKSA9PiB0aGlzLl9maWx0ZXJTdGF0ZS5yZXNldFRvQmFzZSgpIDogdW5kZWZpbmVkLFxuICAgICAgLy8gVGhlIGNoaXAgc2hvd3MgZXhhY3RseSB3aGlsZSB0aGUgc2NyZWVuIGRpZmZlcnMgZnJvbSB0aGUgZGVmYXVsdHMgYVxuICAgICAgLy8gY2xlYXIgcmV0dXJucyB0byAoQzUpLlxuICAgICAgY2xlYXJWaXNpYmxlOiBmZWF0dXJlcy5pbmNsdWRlcygndmlld3MnKSA/ICgpID0+IHRoaXMuX2ZpbHRlclN0YXRlLnZpZXdDaGFuZ2VkKCkgOiB1bmRlZmluZWQsXG4gICAgfSk7XG4gIH1cblxuICAvLyBUaGUgYmFyJ3MgdmFsdWVzIGludG8gdGhlIHN0YXRlOiBldmVyeSBncm91cCBpdCBzaG93cywgdGhlIGdyYWluIGFuZCxcbiAgLy8gd2hlbiB0aGUgYmFyIGhhcyB0aGUgY29udHJvbCwgdGhlIG1hdGNoLlxuICBwcml2YXRlIF9iYXJDaGFuZ2VkKHF1ZXJ5OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiwgaGFzTWF0Y2g6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBmb3IgKGNvbnN0IHsgZ3JvdXBJZCwgdmFsdWUgfSBvZiBncm91cFZhbHVlc0Zyb21RdWVyeShxdWVyeSwgdGhpcy5fcmVwb3J0R3JvdXBzKCksIHRoaXMucmVwb3J0KCkpKSB7XG4gICAgICB0aGlzLl9maWx0ZXJTdGF0ZS5zZXRWYWx1ZShncm91cElkLCB2YWx1ZSk7XG4gICAgfVxuICAgIC8vIE5vdCBhIGZpbHRlciBncm91cCDigJQgdGhlIGdyYWluIGlzIHJlYWQgc3RyYWlnaHQgb2ZmIHRoZSBxdWVyeS5cbiAgICB0aGlzLl9maWx0ZXJTdGF0ZS5zZXRGcmVxdWVuY3koKHF1ZXJ5W0dST1VQX0JZX0lURU1dIGFzIENoYXJ0R3JhbnVsYXJpdHkpIHx8IG51bGwpO1xuICAgIC8vIE5vciBpcyB0aGUgbWF0Y2g7IGEgYmFyIHdpdGhvdXQgdGhlIGNvbnRyb2wgbGVhdmVzIGl0IGFzIGl0IGlzLlxuICAgIGlmIChoYXNNYXRjaCkge1xuICAgICAgdGhpcy5fZmlsdGVyU3RhdGUuc2V0TWF0Y2gobWF0Y2hGcm9tUXVlcnkocXVlcnkpKTtcbiAgICB9XG4gIH1cblxuICAvLyBUaGUgcmVwb3J0J3MgZ3JvdXAtYnkgY29udHJvbCBhcyBhbiBmcy1maWx0ZXIgaXRlbSwgb3IgbnVsbCB3aGVuIHRoZSByZXBvcnRcbiAgLy8gaGFzIG5vbmUgdG8gc2hvdy4gU2VlZGVkIGZyb20gdGhlIHNlc3Npb24gc3RhdGUgc28gdGhlIGdyYWluIHRoZSB2aWV3ZXJcbiAgLy8gcGlja2VkIHN1cnZpdmVzIHRoZSByZXBvcnQgYmVpbmcgcmUtZmV0Y2hlZCBhZnRlciBhIGNoYXQgZWRpdC5cbiAgcHJpdmF0ZSBfZ3JvdXBCeUl0ZW0oKTogSUZpbHRlckNvbmZpZ0l0ZW0gfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5yZXBvcnQoKVxuICAgICAgPyBncm91cEJ5RmlsdGVySXRlbSh0aGlzLnJlcG9ydCgpLCB0aGlzLl9maWx0ZXJTdGF0ZS5mcmVxdWVuY3koKSlcbiAgICAgIDogbnVsbDtcbiAgfVxuXG4gIC8vIFRoZSBiYXIncyBNYXRjaCBjb250cm9sLCBzZWVkZWQgd2l0aCB0aGUgbWF0Y2ggb24gc2NyZWVuLCBvciBudWxsIHdoZW5cbiAgLy8gdGhlIGJhciBob2xkcyBmZXdlciB0aGFuIHR3byBncm91cHMgdGhhdCBjb21iaW5lLlxuICBwcml2YXRlIF9tYXRjaEl0ZW0oKTogSUZpbHRlckNvbmZpZ0l0ZW0gfCBudWxsIHtcbiAgICByZXR1cm4gbWF0Y2hGaWx0ZXJJdGVtKHRoaXMucmVwb3J0KCksIHRoaXMuX3JlcG9ydEdyb3VwcygpLCB0aGlzLl9wYWdlSWQoKSwgdGhpcy5fZmlsdGVyU3RhdGUubWF0Y2goKSk7XG4gIH1cblxuICBwcml2YXRlIF9yZWZyZXNoUmVwb3J0TmFtZShyZXBvcnRJZDogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5fcmVwb3J0U2VydmljZS5sb2FkKClcbiAgICAgIC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLl9kZXN0cm95UmVmKSlcbiAgICAgIC5zdWJzY3JpYmUoKHJlcG9ydHM6IFJlcG9ydExpc3RJdGVtW10pID0+IHtcbiAgICAgICAgY29uc3QgcmVuYW1lZCA9IHJlcG9ydHMuZmluZCgocmVwb3J0KSA9PiByZXBvcnQuaWQgPT09IHJlcG9ydElkKTtcbiAgICAgICAgaWYgKHJlbmFtZWQpIHtcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkLnNldChyZW5hbWVkKTtcbiAgICAgICAgICBpZiAodGhpcy5yZXBvcnQoKSkge1xuICAgICAgICAgICAgdGhpcy5yZXBvcnQuc2V0KHsgLi4udGhpcy5yZXBvcnQoKSwgbmFtZTogcmVuYW1lZC5uYW1lIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH1cbn1cbiIsIjxkaXZcbiAgICAjc3BsaXRcbiAgICBjbGFzcz1cInJlcG9ydCBmcy1yb3cuYWxpZ24tc3RhcnRcIj5cbiAgPGZzLWFpLWNoYXRcbiAgICAjY2hhdFBhbmVsXG4gICAgY2xhc3M9XCJjaGF0XCJcbiAgICBzdHlsZT1cIm1pbi1oZWlnaHQ6IDUwMHB4O1wiXG4gICAgYmFzZVBhdGg9XCJyZXBvcnRzXCJcbiAgICBbcmVxdWVzdERhdGFdPVwieyByZXBvcnRJZDogc2VsZWN0ZWQoKT8uaWQgPz8gbnVsbCB9XCJcbiAgICBbaW50cm9NZXNzYWdlXT1cImludHJvTWVzc2FnZVwiXG4gICAgKHJlc3BvbnNlKT1cIm9uQ2hhdFJlc3BvbnNlKCRldmVudClcIj5cbiAgPC9mcy1haS1jaGF0PlxuICA8ZGl2XG4gICAgY2xhc3M9XCJyZXNpemVyXCJcbiAgICAocG9pbnRlcmRvd24pPVwib25SZXNpemVTdGFydCgkZXZlbnQpXCI+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPVwidmlld2VyIGZzLWZsZXggZnMtY29sdW1uXCI+XG4gICAgPGRpdiBjbGFzcz1cImZzLXJvdy5hbGlnbi1jZW50ZXIuZ2FwLXNtXCI+XG4gICAgICA8ZnMtYXV0b2NvbXBsZXRlLWNoaXBzXG4gICAgICAgICAgY2xhc3M9XCJmcy1mbGV4XCJcbiAgICAgICAgICBbZmV0Y2hdPVwiZmV0Y2hSZXBvcnRzXCJcbiAgICAgICAgICBbKG5nTW9kZWwpXT1cInNlbGVjdGVkXCJcbiAgICAgICAgICBbZGlzYWJsZWRdPVwibG9hZGluZ1JlcG9ydHMoKVwiXG4gICAgICAgICAgW3BhZGxlc3NdPVwidHJ1ZVwiXG4gICAgICAgICAgW211bHRpcGxlXT1cImZhbHNlXCJcbiAgICAgICAgICBbZmV0Y2hPbkZvY3VzXT1cInRydWVcIlxuICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInJlcG9ydENoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICBwbGFjZWhvbGRlcj1cIlJlcG9ydFwiXG4gICAgICAgICAgbmFtZT1cInJlcG9ydFwiPlxuICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICAgIGZzQXV0b2NvbXBsZXRlQ2hpcHNUZW1wbGF0ZVxuICAgICAgICAgICAgbGV0LW9iamVjdD1cIm9iamVjdFwiPlxuICAgICAgICAgIHt7IG9iamVjdC5uYW1lIH19XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICAgICAgZnNBdXRvY29tcGxldGVDaGlwc1N0YXRpY1xuICAgICAgICAgICAgKGNsaWNrKT1cImNyZWF0ZVJlcG9ydCgpXCI+XG4gICAgICAgICAgQ3JlYXRlIFJlcG9ydFxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPC9mcy1hdXRvY29tcGxldGUtY2hpcHM+XG4gICAgICBAaWYgKHJlcG9ydCgpICYmIGVkaXRNb2RlKCkpIHtcbiAgICAgICAgPCEtLSBXaGF0IGxheW91dCBlZGl0aW5nIGNhbiBhZGQgb3Igc3dpdGNoIHRvLCBhbmQgdGhlIHdheSBvdXQgb2YgaXQg4oCUXG4gICAgICAgICAgICAgdGhlIHNhbWUgb3V0bGluZWQgYnV0dG9ucyBhcyB0aGUgZnMtYWktcmVwb3J0IHRvb2xiYXIuIC0tPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICBtYXQtc3Ryb2tlZC1idXR0b25cbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgbWF0VG9vbHRpcD1cIkFkZCBhIGJsb2NrIG9mIHRleHRcIlxuICAgICAgICAgICAgKGNsaWNrKT1cImFkZFRleHQoKVwiPlxuICAgICAgICAgIDxtYXQtaWNvbj50aXRsZTwvbWF0LWljb24+XG4gICAgICAgICAgQWRkIHRleHRcbiAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIG1hdC1zdHJva2VkLWJ1dHRvblxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICBjbGFzcz1cIm1hc3Rlci10b2dnbGVcIlxuICAgICAgICAgICAgW2NsYXNzLmFjdGl2ZV09XCJpc01hc3Rlck1vZGVcIlxuICAgICAgICAgICAgW21hdFRvb2x0aXBdPVwiaXNNYXN0ZXJNb2RlID8gJ0JhY2sgdG8gZWRpdGluZyB0aGlzIHBhZ2UnIDogJ0VkaXQgdGhlIGhlYWRlciBhbmQgZm9vdGVyIHNob3duIG9uIGV2ZXJ5IHBhZ2UnXCJcbiAgICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVNYXN0ZXJNb2RlKClcIj5cbiAgICAgICAgICA8bWF0LWljb24+d2ViX2Fzc2V0PC9tYXQtaWNvbj5cbiAgICAgICAgICBIZWFkZXIgJiBmb290ZXJcbiAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIG1hdC1zdHJva2VkLWJ1dHRvblxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlRWRpdE1vZGUoKVwiPlxuICAgICAgICAgIDxtYXQtaWNvbj5jaGVjazwvbWF0LWljb24+XG4gICAgICAgICAgRG9uZSBlZGl0aW5nXG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgfVxuICAgICAgQGlmIChyZXBvcnQoKSkge1xuICAgICAgICA8ZnMtbWVudT5cbiAgICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICAgICAgZnMtbWVudS1pdGVtXG4gICAgICAgICAgICAgIChjbGljayk9XCJyZXBvcnRTZXR0aW5ncygpXCI+XG4gICAgICAgICAgICA8bWF0LWljb24+XG4gICAgICAgICAgICAgIHR1bmVcbiAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICBSZXBvcnQgc2V0dGluZ3NcbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICAgICAgICBmcy1tZW51LWl0ZW1cbiAgICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZUVkaXRNb2RlKClcIlxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZWRpdE1vZGUoKVwiPlxuICAgICAgICAgICAgPG1hdC1pY29uPlxuICAgICAgICAgICAgICBkYXNoYm9hcmRfY3VzdG9taXplXG4gICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAge3sgZWRpdE1vZGUoKSA/ICdEb25lIGVkaXRpbmcgbGF5b3V0JyA6ICdFZGl0IGxheW91dCcgfX1cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICAgICAgICBmcy1tZW51LWl0ZW1cbiAgICAgICAgICAgICAgKGNsaWNrKT1cImV4cG9ydFBvd2VycG9pbnQoKVwiPlxuICAgICAgICAgICAgPG1hdC1pY29uPlxuICAgICAgICAgICAgICBzbGlkZXNob3dcbiAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICBFeHBvcnQgUG93ZXJQb2ludFxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlXG4gICAgICAgICAgICAgIGZzLW1lbnUtaXRlbVxuICAgICAgICAgICAgICAoY2xpY2spPVwiZXhwb3J0UGRmKClcIj5cbiAgICAgICAgICAgIDxtYXQtaWNvbj5cbiAgICAgICAgICAgICAgcGljdHVyZV9hc19wZGZcbiAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICBFeHBvcnQgUERGXG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICAgICAgZnMtbWVudS1pdGVtXG4gICAgICAgICAgICAgIChjbGljayk9XCJleHBvcnREYXRhKClcIj5cbiAgICAgICAgICAgIDxtYXQtaWNvbj5cbiAgICAgICAgICAgICAgdGFibGVfdmlld1xuICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgIEV4cG9ydCBSYXcgRGF0YVxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgQGlmICgocmVwb3J0KCk/LnBhZ2VzPy5sZW5ndGggPz8gMCkgPiAxKSB7XG4gICAgICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICAgICAgICBmcy1tZW51LWl0ZW1cbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiZXhwb3J0RGF0YSh0cnVlKVwiPlxuICAgICAgICAgICAgICA8bWF0LWljb24+XG4gICAgICAgICAgICAgICAgdGFibGVfdmlld1xuICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICBFeHBvcnQgUmF3IERhdGEgKFRoaXMgUGFnZSlcbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgfVxuICAgICAgICA8L2ZzLW1lbnU+XG4gICAgICB9XG4gICAgPC9kaXY+XG4gICAgQGlmIChyZXBvcnQoKSkge1xuICAgICAgPCEtLSBSZXBvcnQtbGV2ZWwgZmlsdGVycyBvbmx5ICh0aGUgcmVwb3J0J3MgYWN0aW9ucyBsaXZlIGluIHRoZSBtZW51XG4gICAgICAgICAgIGFib3ZlKS4gZnMtZmlsdGVyIHJlYWRzIGl0cyBjb25maWcgb25jZSBhdCBpbml0LCBzbyBpdCdzIGtleWVkIG9uIHRoZVxuICAgICAgICAgICBmaWx0ZXIgc2lnbmF0dXJlOiB3aGVuIHRoZSByZXBvcnQtbGV2ZWwgZmlsdGVyIHNldCBjaGFuZ2VzIHRoZSBibG9ja1xuICAgICAgICAgICBpcyByZWNyZWF0ZWQgYW5kIHJlLXJlYWRzIHRoZSByZWJ1aWx0IGNvbmZpZy4gLS0+XG4gICAgICBAaWYgKHJlcG9ydEhhc0ZpbHRlcnMpIHtcbiAgICAgICAgQGZvciAoa2V5IG9mIFtyZXBvcnRGaWx0ZXJLZXldOyB0cmFjayBrZXkpIHtcbiAgICAgICAgICA8ZnMtZmlsdGVyIFtjb25maWddPVwicmVwb3J0RmlsdGVyQ29uZmlnKClcIj48L2ZzLWZpbHRlcj5cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgPGFwcC1yZXBvcnQtY2FudmFzXG4gICAgICAgIFtyZXBvcnRdPVwicmVwb3J0KClcIlxuICAgICAgICBbZWRpdE1vZGVdPVwiZWRpdE1vZGUoKVwiXG4gICAgICAgIChjb21wb25lbnRTZXR0aW5ncyk9XCJjb21wb25lbnRTZXR0aW5ncygkZXZlbnQpXCJcbiAgICAgICAgKHJlcG9ydENoYW5nZWQpPVwib25DYW52YXNSZXBvcnRDaGFuZ2VkKClcIlxuICAgICAgICAocGFnZUNoYW5nZWQpPVwib25DYW52YXNQYWdlQ2hhbmdlZCgkZXZlbnQpXCI+XG4gICAgICA8L2FwcC1yZXBvcnQtY2FudmFzPlxuICAgIH1cbiAgPC9kaXY+XG48L2Rpdj4iXX0=
|
|
504
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwb3J0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvcmVwb3J0cy92aWV3cy9yZXBvcnQvcmVwb3J0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvcmVwb3J0cy92aWV3cy9yZXBvcnQvcmVwb3J0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxzQkFBc0IsRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQzFELFVBQVUsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxTQUFTLEdBQzdFLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUU3QyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDckQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNqRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFFdkQsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDM0UsT0FBTyxFQUFnQixjQUFjLEVBQXFCLE1BQU0sb0JBQW9CLENBQUM7QUFDckYsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNoRCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFFOUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFaEUsT0FBTyxFQUFFLGtCQUFrQixF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QXNCLENBQUMsYUFDdEI7d0JBQ1QsMkVBQTJFO3dCQUMzRSx1RUFBdUU7d0JBQ3ZFLHdCQUF3Qjt3QkFDeEIsMEVBQTBFO3dCQUMxRSwwQkFBMEI7d0JBQzFCLDRCQUE0Qjt3QkFDNUIsaUJBQWlCO3dCQUNqQixnQkFBZ0I7d0JBQ2hCLHVCQUF1Qjt3QkFDdkIsbUJBQW1CO3dCQUNuQiwwRUFBMEU7d0JBQzFFLHNCQUFzQjt3QkFDdEIsa0JBQWtCLENBQUMsRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLHFCQUFxQixDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQzt3QkFDckcsMkVBQTJFO3dCQUMzRSx3Q0FBd0M7d0JBQ3hDLHVCQUF1QixFQUFFO3FCQUMxQixXQUNRO3dCQUNQLFdBQVc7d0JBQ1gseUJBQXlCO3dCQUN6QixjQUFjO3dCQUNkLFlBQVk7d0JBQ1osaUJBQWlCO3dCQUNqQixTQUFTO3dCQUNULE9BQU87d0JBQ1AsVUFBVTt3QkFDVixxQkFBcUI7cUJBQ3RCO3dEQWlCTyxNQUFNO3NCQURiLFNBQVM7dUJBQUMsT0FBTyxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFJNUIsVUFBVTtzQkFEakIsU0FBUzt1QkFBQyxXQUFXLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUU7Z0JBTWxELE9BQU87c0JBRGQsU0FBUzt1QkFBQyxxQkFBcUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDVVNUT01fRUxFTUVOVFNfU0NIRU1BLCBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LFxuICBEZXN0cm95UmVmLCBFbGVtZW50UmVmLCBOZ1pvbmUsIFZpZXdDaGlsZCwgZWZmZWN0LCBpbmplY3QsIHNpZ25hbCwgdW50cmFja2VkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG5pbXBvcnQgeyBNYXRCdXR0b24gfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9idXR0b24nO1xuaW1wb3J0IHsgTWF0RGlhbG9nIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcbmltcG9ydCB7IE1hdEljb24gfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pY29uJztcbmltcG9ydCB7IE1hdFRvb2x0aXAgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90b29sdGlwJztcblxuaW1wb3J0IHsgRnNBdXRvY29tcGxldGVDaGlwc01vZHVsZSB9IGZyb20gJ0BmaXJlc3RpdGNoL2F1dG9jb21wbGV0ZS1jaGlwcyc7XG5pbXBvcnQgeyBGaWx0ZXJDb25maWcsIEZzRmlsdGVyTW9kdWxlLCBJRmlsdGVyQ29uZmlnSXRlbSB9IGZyb20gJ0BmaXJlc3RpdGNoL2ZpbHRlcic7XG5pbXBvcnQgeyBGc01lbnVNb2R1bGUgfSBmcm9tICdAZmlyZXN0aXRjaC9tZW51JztcbmltcG9ydCB7IEZzUHJvY2VzcyB9IGZyb20gJ0BmaXJlc3RpdGNoL3Byb2Nlc3MnO1xuaW1wb3J0IHsgRnNQcm9tcHQgfSBmcm9tICdAZmlyZXN0aXRjaC9wcm9tcHQnO1xuXG5pbXBvcnQgeyBmaW5hbGl6ZSwgc3dpdGNoTWFwLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IHRha2VVbnRpbERlc3Ryb3llZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7IHByb3ZpZGVFY2hhcnRzQ29yZSB9IGZyb20gJ25neC1lY2hhcnRzJztcblxuaW1wb3J0IHsgRnNBaUNoYXRDb21wb25lbnQsIEZzQWlDaGF0UmVzcG9uc2UgfSBmcm9tICdAZmlyZXN0aXRjaC9haSc7XG5cbmltcG9ydCB7IFJlcG9ydENhbnZhc0NvbXBvbmVudCB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvcmVwb3J0LWNhbnZhcy9yZXBvcnQtY2FudmFzLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBSZXBvcnREYXRhIH0gZnJvbSAnLi4vLi4vZGF0YS9yZXBvcnQuZGF0YSc7XG5pbXBvcnQgeyBDb21wb25lbnRTZXR0aW5nc0NvbXBvbmVudCwgQ29tcG9uZW50U2V0dGluZ3NSZXN1bHQgfSBmcm9tICcuLi8uLi9kaWFsb2dzL2NvbXBvbmVudC1zZXR0aW5ncy9jb21wb25lbnQtc2V0dGluZ3MuY29tcG9uZW50JztcbmltcG9ydCB7IFJlcG9ydFNldHRpbmdzQ29tcG9uZW50LCBSZXBvcnRTZXR0aW5nc1Jlc3VsdCB9IGZyb20gJy4uLy4uL2RpYWxvZ3MvcmVwb3J0LXNldHRpbmdzL3JlcG9ydC1zZXR0aW5ncy5jb21wb25lbnQnO1xuaW1wb3J0IHsgUmVwb3J0RXhwb3J0Q29sbGVjdG9yU2VydmljZSB9IGZyb20gJy4uLy4uL2V4cG9ydC9yZXBvcnQtZXhwb3J0LWNvbGxlY3Rvci5zZXJ2aWNlJztcbmltcG9ydCB7IFJlcG9ydEV4cG9ydFNlcnZpY2UgfSBmcm9tICcuLi8uLi9leHBvcnQvcmVwb3J0LWV4cG9ydC5zZXJ2aWNlJztcbmltcG9ydCB7IFJlcG9ydFBkZlNlcnZpY2UgfSBmcm9tICcuLi8uLi9leHBvcnQvcmVwb3J0LXBkZi5zZXJ2aWNlJztcbmltcG9ydCB7IFJlcG9ydFBwdHhTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vZXhwb3J0L3JlcG9ydC1wcHR4LnNlcnZpY2UnO1xuaW1wb3J0IHsgUmVwb3J0VGV4dExheW91dFNlcnZpY2UgfSBmcm9tICcuLi8uLi9leHBvcnQvcmVwb3J0LXRleHQtbGF5b3V0LnNlcnZpY2UnO1xuaW1wb3J0IHtcbiAgQ2hhcnRHcmFudWxhcml0eSwgUmVwb3J0LFxuICBSZXBvcnRDb21wb25lbnQgYXMgUmVwb3J0Q29tcG9uZW50TW9kZWwsIFJlcG9ydEZpbHRlckdyb3VwLCBSZXBvcnRMaXN0SXRlbSxcbn0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9yZXBvcnQuaW50ZXJmYWNlJztcbmltcG9ydCB7IHByb3ZpZGVSZXBvcnREYXRlUGlja2VyIH0gZnJvbSAnLi4vLi4vcmVwb3J0LWRhdGUtcHJlc2V0cyc7XG5pbXBvcnQge1xuICBHUk9VUF9CWV9JVEVNLCBmaWx0ZXJJdGVtRm9yR3JvdXAsIGdyb3VwQnlGaWx0ZXJJdGVtLCBncm91cEJ5U2lnbmF0dXJlLCBncm91cFZhbHVlc0Zyb21RdWVyeSxcbiAgaGFzUGFnZUdyb3VwLCBpc0dyYW51bGFyaXR5T2ZmZXJlZCwgbWF0Y2hGaWx0ZXJJdGVtLCBtYXRjaEZyb21RdWVyeSwgcmVwb3J0QmFyR3JvdXBzLFxufSBmcm9tICcuLi8uLi9yZXBvcnQtZmlsdGVyLWl0ZW1zJztcbmltcG9ydCB7IFJlcG9ydEZpbHRlck9wdGlvbnNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvcmVwb3J0LWZpbHRlci1vcHRpb25zLnNlcnZpY2UnO1xuaW1wb3J0IHsgUmVwb3J0RmlsdGVyU3RhdGVTZXJ2aWNlLCBkZWZhdWx0U2lnbmF0dXJlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvcmVwb3J0LWZpbHRlci1zdGF0ZS5zZXJ2aWNlJztcbmltcG9ydCB7IFJlcG9ydFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9yZXBvcnQuc2VydmljZSc7XG5pbXBvcnQgeyB6aXBFeHBvcnRTdGF0ZXMgfSBmcm9tICcuLi8uLi90aWxlLWRhdGEtc3RhdGUnO1xuXG5cbi8vIFRoZSBSZXBvcnRzIHBhZ2U6IEFJIGNoYXQgb24gdGhlIGxlZnQsIHRoZSByZXBvcnQgY2FudmFzIG9uIHRoZSByaWdodCDigJRcbi8vIGEgc3BsaXQtcGFuZSBsYXlvdXQ7IHRoZSB2aWV3ZXIgaXMgb3VyIG93biBjYW52YXMgKG5vIGlmcmFtZSwgbm8gZW1iZWQgVVJMcykuXG4vLyBUaGUgY2hhdCBpcyBhbHdheXMgc2NvcGVkIHRvIHRoZSBzZWxlY3RlZCByZXBvcnQ7IGl0cyBpZCByaWRlcyBvbiBldmVyeVxuLy8gdHVybiB2aWEgW3JlcXVlc3REYXRhXS5cbkBDb21wb25lbnQoe1xuICB0ZW1wbGF0ZVVybDogJy4vcmVwb3J0LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vcmVwb3J0LmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBzY2hlbWFzOiBbQ1VTVE9NX0VMRU1FTlRTX1NDSEVNQV0sXG4gIHByb3ZpZGVyczogW1xuICAgIC8vIFNlc3Npb24gZmlsdGVyIHN0YXRlIGlzIHBlci1vcGVuLXJlcG9ydC1wYWdlLCBub3QgYXBwLWdsb2JhbDsgdGhlIGV4cG9ydFxuICAgIC8vIHNlcnZpY2VzIHJlc29sdmUgZmlsdGVycyB0aHJvdWdoIGl0LCBzbyB0aGV5IGxpdmUgYXQgdGhlIHNhbWUgbGV2ZWwuXG4gICAgUmVwb3J0RmlsdGVyU3RhdGVTZXJ2aWNlLFxuICAgIC8vIFRoZSBiYXJzJyBzZWxlY3QgbGlzdHMsIG5hcnJvd2VkIGJ5IHRoZSBvdGhlciBmaWx0ZXJzOyBwZXIgb3BlbiByZXBvcnQuXG4gICAgUmVwb3J0RmlsdGVyT3B0aW9uc1NlcnZpY2UsXG4gICAgUmVwb3J0RXhwb3J0Q29sbGVjdG9yU2VydmljZSxcbiAgICBSZXBvcnRQcHR4U2VydmljZSxcbiAgICBSZXBvcnRQZGZTZXJ2aWNlLFxuICAgIFJlcG9ydFRleHRMYXlvdXRTZXJ2aWNlLFxuICAgIFJlcG9ydEV4cG9ydFNlcnZpY2UsXG4gICAgLy8gVHJlZS1zaGFrZW4gRUNoYXJ0cyBjb3JlICsgdGhlICdyZXBvcnQnIGhvdXNlIHRoZW1lLCBsb2FkZWQgbGF6aWx5IHdpdGhcbiAgICAvLyB0aGlzIHJvdXRlJ3MgY2h1bmsuXG4gICAgcHJvdmlkZUVjaGFydHNDb3JlKHsgZWNoYXJ0czogKCkgPT4gaW1wb3J0KCcuLi8uLi90aGVtZS9lY2hhcnRzJykudGhlbigobW9kdWxlKSA9PiBtb2R1bGUuZGVmYXVsdCkgfSksXG4gICAgLy8gVGhlIGJhcidzIGRhdGUgcGlja2VycyBzdGFydCB0aGVpciB3ZWVrcyBvbiBNb25kYXkgYW5kIGxpc3QgdGhlIGJ1aWx0LWluXG4gICAgLy8gcHJlc2V0czsgYSBwcmVzZXQgb25seSBzZXRzIHRoZSBkYXlzLlxuICAgIHByb3ZpZGVSZXBvcnREYXRlUGlja2VyKCksXG4gIF0sXG4gIGltcG9ydHM6IFtcbiAgICBGb3Jtc01vZHVsZSxcbiAgICBGc0F1dG9jb21wbGV0ZUNoaXBzTW9kdWxlLFxuICAgIEZzRmlsdGVyTW9kdWxlLFxuICAgIEZzTWVudU1vZHVsZSxcbiAgICBGc0FpQ2hhdENvbXBvbmVudCxcbiAgICBNYXRCdXR0b24sXG4gICAgTWF0SWNvbixcbiAgICBNYXRUb29sdGlwLFxuICAgIFJlcG9ydENhbnZhc0NvbXBvbmVudCxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgUmVwb3J0Q29tcG9uZW50IHtcblxuICAvLyBUaGUgc2luZ2xlIHJlcG9ydCB0aGUgdmlld2VyIGFuZCBjaGF0IGFyZSBmb2N1c2VkIG9uLlxuICBwdWJsaWMgcmVhZG9ubHkgc2VsZWN0ZWQgPSBzaWduYWw8UmVwb3J0TGlzdEl0ZW0gfCBudWxsPihudWxsKTtcbiAgcHVibGljIHJlYWRvbmx5IHJlcG9ydCA9IHNpZ25hbDxSZXBvcnQgfCBudWxsPihudWxsKTtcbiAgcHVibGljIHJlYWRvbmx5IGxvYWRpbmdSZXBvcnRzID0gc2lnbmFsKHRydWUpO1xuICBwdWJsaWMgcmVhZG9ubHkgZWRpdE1vZGUgPSBzaWduYWwoZmFsc2UpO1xuXG4gIC8vIFRoZSByZXBvcnQgdG9vbGJhciBJUyBhbiBmcy1maWx0ZXI6IHRoZSBwaWNrZXIgcmlkZXMgaW4gaXRzIGhlYWRpbmdcbiAgLy8gdGVtcGxhdGUsIHRoZSBtZW51IGJlY29tZXMgaXRzIGFjdGlvbnMsIGFuZCByZXBvcnQtbGV2ZWwgZmlsdGVyIGdyb3Vwc1xuICAvLyBiZWNvbWUgaXRzIGl0ZW1zLiBSZWJ1aWx0IHdoZW5ldmVyIHRoZSBsb2FkZWQgcmVwb3J0IChhbmQgdGh1cyBpdHMgZ3JvdXBzKVxuICAvLyBjaGFuZ2VzOyB0aGUgbWVudSdzIHNob3ctZ3VhcmRzIGtlZXAgd29ya2luZyB3aGlsZSBubyByZXBvcnQgaXMgc2VsZWN0ZWQuXG4gIHB1YmxpYyByZWFkb25seSByZXBvcnRGaWx0ZXJDb25maWcgPSBzaWduYWw8RmlsdGVyQ29uZmlnIHwgbnVsbD4obnVsbCk7XG5cbiAgQFZpZXdDaGlsZCgnc3BsaXQnLCB7IHN0YXRpYzogdHJ1ZSB9KVxuICBwcml2YXRlIF9zcGxpdCE6IEVsZW1lbnRSZWY8SFRNTERpdkVsZW1lbnQ+O1xuXG4gIEBWaWV3Q2hpbGQoJ2NoYXRQYW5lbCcsIHsgc3RhdGljOiB0cnVlLCByZWFkOiBFbGVtZW50UmVmIH0pXG4gIHByaXZhdGUgX2NoYXRQYW5lbCE6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+O1xuXG4gIC8vIE9ubHkgdGhlIGNhbnZhcyBrbm93cyB3aGljaCBwYWdlIGlzIG9uIHNjcmVlbiwgYW5kIGEgcGFnZS1zY29wZWQgZXhwb3J0XG4gIC8vIGhhcyB0byBhc2sgaXQuXG4gIEBWaWV3Q2hpbGQoUmVwb3J0Q2FudmFzQ29tcG9uZW50KVxuICBwcml2YXRlIF9jYW52YXM/OiBSZXBvcnRDYW52YXNDb21wb25lbnQ7XG5cbiAgcHVibGljIHJlYWRvbmx5IGludHJvTWVzc2FnZSA9IHtcbiAgICB0ZXh0OiAnJyxcbiAgfTtcblxuICBwcml2YXRlIF9yZXBvcnREYXRhID0gaW5qZWN0KFJlcG9ydERhdGEpO1xuICBwcml2YXRlIF9yZXBvcnRTZXJ2aWNlID0gaW5qZWN0KFJlcG9ydFNlcnZpY2UpO1xuICBwcml2YXRlIF9maWx0ZXJTdGF0ZSA9IGluamVjdChSZXBvcnRGaWx0ZXJTdGF0ZVNlcnZpY2UpO1xuICBwcml2YXRlIF9maWx0ZXJPcHRpb25zID0gaW5qZWN0KFJlcG9ydEZpbHRlck9wdGlvbnNTZXJ2aWNlKTtcbiAgcHJpdmF0ZSBfZXhwb3J0U2VydmljZSA9IGluamVjdChSZXBvcnRFeHBvcnRTZXJ2aWNlKTtcbiAgcHJpdmF0ZSBfY29sbGVjdG9yID0gaW5qZWN0KFJlcG9ydEV4cG9ydENvbGxlY3RvclNlcnZpY2UpO1xuICBwcml2YXRlIF9wcm9jZXNzID0gaW5qZWN0KEZzUHJvY2Vzcyk7XG4gIHByaXZhdGUgX3Byb21wdCA9IGluamVjdChGc1Byb21wdCk7XG4gIHByaXZhdGUgX2RpYWxvZyA9IGluamVjdChNYXREaWFsb2cpO1xuICBwcml2YXRlIF9kZXN0cm95UmVmID0gaW5qZWN0KERlc3Ryb3lSZWYpO1xuICBwcml2YXRlIF96b25lID0gaW5qZWN0KE5nWm9uZSk7XG5cbiAgLy8gVGhlIHN0YXRlIHZlcnNpb24gdGhlIGJhciB3YXMgbGFzdCBidWlsdCBmb3IgKHJlcG9ydEZpbHRlcktleSkuXG4gIHByaXZhdGUgcmVhZG9ubHkgX2JhclZlcnNpb24gPSBzaWduYWwoMCk7XG5cbiAgLy8gVGhlIHBhZ2Ugb24gc2NyZWVuLCBhcyB0aGUgY2FudmFzIGxhc3QgcmVwb3J0ZWQgaXQ6IHRoZSBiYXIgc2hvd3MgaXRzXG4gIC8vIHBhZ2UgZ3JvdXBzLlxuICBwcml2YXRlIHJlYWRvbmx5IF9wYWdlSWQgPSBzaWduYWw8bnVtYmVyIHwgbnVsbD4obnVsbCk7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5fYnVpbGRSZXBvcnRDb25maWcoKTtcblxuICAgIC8vIGFwcGx5KCkgYW5kIHJlc2V0VG9CYXNlKCkgbW92ZSB0aGUgc3RhdGUgdmVyc2lvbi4gVGhlIGJhciBpcyBidWlsdFxuICAgIC8vIGFnYWluIGZvciBpdCwgYW5kIHJlcG9ydEZpbHRlcktleSwgd2hpY2ggY2FycmllcyBpdCwgcmVjcmVhdGVzXG4gICAgLy8gZnMtZmlsdGVyOiBpdCByZWFkcyBpdHMgY29uZmlnIG9uY2UuXG4gICAgZWZmZWN0KCgpID0+IHtcbiAgICAgIGNvbnN0IHZlcnNpb24gPSB0aGlzLl9maWx0ZXJTdGF0ZS5zdGF0ZVZlcnNpb24oKTtcblxuICAgICAgdW50cmFja2VkKCgpID0+IHtcbiAgICAgICAgaWYgKHZlcnNpb24gIT09IHRoaXMuX2JhclZlcnNpb24oKSkge1xuICAgICAgICAgIHRoaXMuX2J1aWxkUmVwb3J0Q29uZmlnKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgdGhpcy5fcmVwb3J0U2VydmljZS5sb2FkKClcbiAgICAgIC5waXBlKFxuICAgICAgICBmaW5hbGl6ZSgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5sb2FkaW5nUmVwb3J0cy5zZXQoZmFsc2UpO1xuICAgICAgICB9KSxcbiAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKHRoaXMuX2Rlc3Ryb3lSZWYpLFxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSh7IGVycm9yOiAoKSA9PiB1bmRlZmluZWQgfSk7XG4gIH1cblxuICBwdWJsaWMgZmV0Y2hSZXBvcnRzID0gKGtleXdvcmQ6IHN0cmluZykgPT4ge1xuICAgIHJldHVybiB0aGlzLl9yZXBvcnRTZXJ2aWNlLmZpbHRlcihrZXl3b3JkKTtcbiAgfTtcblxuICBwdWJsaWMgcmVwb3J0Q2hhbmdlKHJlcG9ydDogUmVwb3J0TGlzdEl0ZW0gfCBudWxsKTogdm9pZCB7XG4gICAgdGhpcy5yZXBvcnQuc2V0KG51bGwpO1xuICAgIHRoaXMuZWRpdE1vZGUuc2V0KGZhbHNlKTtcbiAgICB0aGlzLl9wYWdlSWQuc2V0KG51bGwpO1xuICAgIHRoaXMuX2J1aWxkUmVwb3J0Q29uZmlnKCk7XG5cbiAgICBpZiAocmVwb3J0KSB7XG4gICAgICB0aGlzLl9sb2FkUmVwb3J0KHJlcG9ydC5pZCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGNyZWF0ZVJlcG9ydCgpOiB2b2lkIHtcbiAgICB0aGlzLl9wcm9tcHQuaW5wdXQoe1xuICAgICAgdGl0bGU6ICdDcmVhdGUgUmVwb3J0JyxcbiAgICAgIGxhYmVsOiAnTmFtZScsXG4gICAgICBjb21taXRMYWJlbDogJ0NyZWF0ZScsXG4gICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICB9KVxuICAgICAgLnBpcGUoXG4gICAgICAgIHN3aXRjaE1hcCgobmFtZTogc3RyaW5nKSA9PiB0aGlzLl9yZXBvcnRTZXJ2aWNlLmNyZWF0ZShuYW1lKSksXG4gICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLl9kZXN0cm95UmVmKSxcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKHJlcG9ydDogUmVwb3J0TGlzdEl0ZW0pID0+IHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZC5zZXQocmVwb3J0KTtcbiAgICAgICAgdGhpcy5fbG9hZFJlcG9ydChyZXBvcnQuaWQpO1xuICAgICAgfSk7XG4gIH1cblxuICBwdWJsaWMgdG9nZ2xlRWRpdE1vZGUoKTogdm9pZCB7XG4gICAgdGhpcy5lZGl0TW9kZS51cGRhdGUoKGVkaXRNb2RlKSA9PiAhZWRpdE1vZGUpO1xuICB9XG5cbiAgLy8gVGhlIGVkaXQgdG9vbHMgbGl2ZSBpbiB0aGlzIHRvb2xiYXIsIGJ1dCB0aGUgY2FudmFzIG93bnMgd2hhdCB0aGV5IGFjdCBvblxuICAvLyAodGhlIGFjdGl2ZSBwYWdlLCB0aGUgaGVhZGVyL2Zvb3RlciBiYW5kcywgd2hpY2ggbGF5ZXIgaXMgbGl2ZSkuXG4gIHB1YmxpYyBnZXQgaXNNYXN0ZXJNb2RlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9jYW52YXM/Lm1hc3Rlck1vZGUoKSA/PyBmYWxzZTtcbiAgfVxuXG4gIHB1YmxpYyBhZGRUZXh0KCk6IHZvaWQge1xuICAgIHRoaXMuX2NhbnZhcz8uYWRkVGV4dCgpO1xuICB9XG5cbiAgcHVibGljIHRvZ2dsZU1hc3Rlck1vZGUoKTogdm9pZCB7XG4gICAgdGhpcy5fY2FudmFzPy50b2dnbGVNYXN0ZXJNb2RlKCk7XG4gIH1cblxuICAvLyBSZXBvcnQgc2V0dGluZ3Mg4oCUIG5hbWUsIHBhZ2Ugc2l6ZS4gVGhlIHBpY2tlciBsaXN0IGFuZCBzdHJ1Y3R1cmUgYm90aFxuICAvLyByZWxvYWQgb24gc2F2ZSAoYSBwYWdlIHJlc2l6ZSByZS1yZW5kZXJzIHRoZSB3aG9sZSBjYW52YXMpLlxuICBwdWJsaWMgcmVwb3J0U2V0dGluZ3MoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnJlcG9ydCgpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgZGlhbG9nUmVmID0gdGhpcy5fZGlhbG9nLm9wZW48UmVwb3J0U2V0dGluZ3NDb21wb25lbnQsIHVua25vd24sIFJlcG9ydFNldHRpbmdzUmVzdWx0PihSZXBvcnRTZXR0aW5nc0NvbXBvbmVudCwge1xuICAgICAgZGF0YTogeyByZXBvcnQ6IHRoaXMucmVwb3J0KCkgfSxcbiAgICAgIHdpZHRoOiAnNDYwcHgnLFxuICAgIH0pO1xuICAgIGNvbnN0IHNldHRpbmdzID0gZGlhbG9nUmVmLmNvbXBvbmVudEluc3RhbmNlO1xuXG4gICAgZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKClcbiAgICAgIC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLl9kZXN0cm95UmVmKSlcbiAgICAgIC5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xuICAgICAgICAvLyBUaGUgZGlhbG9nIGNvbmZpcm1zICsgcGVyZm9ybXMgdGhlIGRlbGV0ZSBpdHNlbGY7IHdlIGp1c3QgcmVhY3QgdG9cbiAgICAgICAgLy8gd2hhdCBpdCByZXBvcnRzIGJhY2suXG4gICAgICAgIGlmIChyZXN1bHQ/LmFjdGlvbiA9PT0gJ2RlbGV0ZWQnKSB7XG4gICAgICAgICAgdGhpcy5zZWxlY3RlZC5zZXQobnVsbCk7XG4gICAgICAgICAgdGhpcy5yZXBvcnQuc2V0KG51bGwpO1xuICAgICAgICAgIHRoaXMuX2J1aWxkUmVwb3J0Q29uZmlnKCk7XG5cbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBBIHNhdmUgdGhhdCBmYWlsZWQgcGFydCB3YXkgKGEgcmVmdXNlZCBuYW1lKSBtYXkgc3RpbGwgaGF2ZSBzdG9yZWRcbiAgICAgICAgLy8gdGhlIGZpbHRlcnMgYmVmb3JlIGl0LCBzbyBhIGRpc21pc3NlZCBkaWFsb2cgdGhhdCB3cm90ZSByZWxvYWRzIHRvby5cbiAgICAgICAgaWYgKChyZXN1bHQ/LmFjdGlvbiA9PT0gJ3NhdmVkJyB8fCBzZXR0aW5ncy53cm90ZSgpKSAmJiB0aGlzLnNlbGVjdGVkKCkpIHtcbiAgICAgICAgICB0aGlzLl9sb2FkUmVwb3J0KHRoaXMuc2VsZWN0ZWQoKS5pZCk7XG4gICAgICAgICAgdGhpcy5fcmVmcmVzaFJlcG9ydE5hbWUodGhpcy5zZWxlY3RlZCgpLmlkKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH1cblxuICAvLyBDb21wb25lbnQgc2V0dGluZ3Mg4oCUIHRpdGxlLCBleGFjdCBnZW9tZXRyeSwgYW5kIHRoZSBkaWFnbm9zdGljIHZpZXdzXG4gIC8vIChTUUwsIGNvbmZpZywgZmlsdGVyIHdpcmluZykuXG4gIHB1YmxpYyBjb21wb25lbnRTZXR0aW5ncyhjb21wb25lbnQ6IFJlcG9ydENvbXBvbmVudE1vZGVsKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnJlcG9ydCgpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgZGlhbG9nUmVmID0gdGhpcy5fZGlhbG9nLm9wZW48Q29tcG9uZW50U2V0dGluZ3NDb21wb25lbnQsIHVua25vd24sIENvbXBvbmVudFNldHRpbmdzUmVzdWx0PihcbiAgICAgIENvbXBvbmVudFNldHRpbmdzQ29tcG9uZW50LFxuICAgICAge1xuICAgICAgICBkYXRhOiB7IHJlcG9ydDogdGhpcy5yZXBvcnQoKSwgY29tcG9uZW50IH0sXG4gICAgICAgIHdpZHRoOiAnNjQwcHgnLFxuICAgICAgfSxcbiAgICApO1xuXG4gICAgLy8gRmlsdGVyIGFkZC9yZW1vdmUvbGV2ZWwgY2hhbmdlcyBwZXJzaXN0IGltbWVkaWF0ZWx5IGluc2lkZSB0aGUgZGlhbG9nIChub1xuICAgIC8vIFwic2F2ZVwiKSBhbmQgY2FuIGxlYXZlIGl0IGJ5IGFuIGV4aXQgdGhhdCBjYXJyaWVzIG5vIHJlc3VsdCwgc28gdGhleSBhcmVcbiAgICAvLyBhbm5vdW5jZWQgYXMgdGhleSBsYW5kLiBUaGUgcmVsb2FkIHdhaXRzIGZvciB0aGUgY2xvc2Ugc28gdGhlIGNhbnZhcyBpc24ndFxuICAgIC8vIHJlLXJlbmRlcmluZyB1bmRlcm5lYXRoIGFuIG9wZW4gZGlhbG9nLlxuICAgIGxldCBmaWx0ZXJzQ2hhbmdlZCA9IGZhbHNlO1xuICAgIGRpYWxvZ1JlZi5jb21wb25lbnRJbnN0YW5jZS5maWx0ZXJzQ2hhbmdlZFxuICAgICAgLnBpcGUodGFrZVVudGlsKGRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpKSlcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4gZmlsdGVyc0NoYW5nZWQgPSB0cnVlKTtcblxuICAgIGRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpXG4gICAgICAucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5fZGVzdHJveVJlZikpXG4gICAgICAuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcbiAgICAgICAgLy8gVGhlIGRpYWxvZyBjb25maXJtcyArIHBlcmZvcm1zIHRoZSBkZWxldGUgaXRzZWxmLiBUaGUgY29tcG9uZW50IGlzXG4gICAgICAgIC8vIGdvbmUgZnJvbSB0aGUgcmVwb3J0LCBzbyByZWxvYWQgcmF0aGVyIHRoYW4gcGF0Y2hpbmcgaXQgb3V0IGxvY2FsbHkg4oCUXG4gICAgICAgIC8vIGl0cyBmaWx0ZXJzIHdlbnQgd2l0aCBpdCwgd2hpY2ggdGhlIHJlcG9ydCBiYXIgaGFzIHRvIGJlIHJlYnVpbHQgZm9yLlxuICAgICAgICBpZiAocmVzdWx0Py5kZWxldGVkKSB7XG4gICAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWQoKSkge1xuICAgICAgICAgICAgdGhpcy5fbG9hZFJlcG9ydCh0aGlzLnNlbGVjdGVkKCkuaWQpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFRoZSByZXBvcnQncyBmaWx0ZXIgZ3JvdXBzIGNoYW5nZWQsIHNvIHRoZSByZXBvcnQgYmFyIGFuZCB0aGVcbiAgICAgICAgLy8gb24tY29tcG9uZW50IHN0cmlwcyBoYXZlIHRvIGJlIHJlYnVpbHQgZnJvbSBhIGZyZXNoIHJlcG9ydC5cbiAgICAgICAgaWYgKGZpbHRlcnNDaGFuZ2VkKSB7XG4gICAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWQoKSkge1xuICAgICAgICAgICAgdGhpcy5fbG9hZFJlcG9ydCh0aGlzLnNlbGVjdGVkKCkuaWQpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIE5vdGhpbmcgZWxzZSBpbiB0aGUgZGlhbG9nIHRvdWNoZXMgdGhlIHF1ZXJ5IOKAlCB0aXRsZSBhbmQgcGFkZGluZyBhcmVcbiAgICAgICAgLy8gcHJlc2VudGF0aW9uLiBSZXBhaW50IHRoZSBvbmUgY29tcG9uZW50IGl0IHdhcyBvcGVuZWQgZm9yIGFuZCBsZWF2ZVxuICAgICAgICAvLyBldmVyeSBvdGhlciBjb21wb25lbnQncyBkYXRhLCBhbmQgaXRzIHF1ZXJ5LCBhbG9uZS5cbiAgICAgICAgaWYgKHJlc3VsdD8uc2V0dGluZ3MpIHtcbiAgICAgICAgICB0aGlzLl9jYW52YXM/LmFwcGx5Q29tcG9uZW50U2V0dGluZ3MoY29tcG9uZW50LmlkLCByZXN1bHQuc2V0dGluZ3MpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgfVxuXG4gIC8vIFRoZSBjYW52YXMgbW92ZWQgdG8gYW5vdGhlciBwYWdlLiBUaGUgYmFyIHNob3dzIHRoZSBwYWdlIGdyb3VwcyBvZiB0aGVcbiAgLy8gcGFnZSBvbiBzY3JlZW4uXG4gIHB1YmxpYyBvbkNhbnZhc1BhZ2VDaGFuZ2VkKHBhZ2VJZDogbnVtYmVyIHwgbnVsbCk6IHZvaWQge1xuICAgIHRoaXMuX3BhZ2VJZC5zZXQocGFnZUlkKTtcbiAgICAvLyBBIGhlYWRlciBvciBmb290ZXIgdGlsZSByZWFkcyBpdHMgcGFnZSdzIGdyb3VwcyB0aHJvdWdoIGl0LlxuICAgIHRoaXMuX2ZpbHRlclN0YXRlLnNldFBhZ2UocGFnZUlkKTtcblxuICAgIGlmIChoYXNQYWdlR3JvdXAodGhpcy5yZXBvcnQoKSkpIHtcbiAgICAgIHRoaXMuX2J1aWxkUmVwb3J0Q29uZmlnKCk7XG4gICAgfVxuICB9XG5cbiAgLy8gVGhlIGNhbnZhcyBjaGFuZ2VkIHRoZSByZXBvcnQncyBzdHJ1Y3R1cmUgKGFkZGVkIGEgcGFnZSkg4oCUIHJlLWZldGNoIHNvIHRoZVxuICAvLyBuZXcgcGFnZSByZW5kZXJzOyB0aGUgY2FudmFzIGxhbmRzIHRoZSB2aWV3IG9uIGl0LlxuICBwdWJsaWMgb25DYW52YXNSZXBvcnRDaGFuZ2VkKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnNlbGVjdGVkKCkpIHtcbiAgICAgIHRoaXMuX2xvYWRSZXBvcnQodGhpcy5zZWxlY3RlZCgpLmlkKTtcbiAgICB9XG4gIH1cblxuICAvLyBFeHBvcnQgdGhlIHJlcG9ydCB0byBQb3dlclBvaW50LCBlbnRpcmVseSBjbGllbnQtc2lkZTogZXZlcnkgY29tcG9uZW50J3NcbiAgLy8gZGF0YSBpcyBmZXRjaGVkIGZyZXNoIHdpdGggdGhlIGN1cnJlbnQgZmlsdGVyIHN0YXRlIChhbGwgcGFnZXMsIG5vdCBqdXN0XG4gIC8vIHRoZSB2aXNpYmxlIG9uZSksIHRoZW4gcHB0eGdlbmpzIGJ1aWxkcyBhIGRlY2sgb2YgTkFUSVZFIGVkaXRhYmxlIGNoYXJ0cyDigJRcbiAgLy8gcGFnZSA9IHNsaWRlLCBwb3NpdGlvbnMgMToxLiBUaGUgZG9jayBzaG93cyBwcm9ncmVzcyB1bnRpbCB0aGUgZmlsZSBzYXZlcy5cbiAgcHVibGljIGV4cG9ydFBvd2VycG9pbnQoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnJlcG9ydCgpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fcHJvY2Vzcy5ydW4oXG4gICAgICAnRXhwb3J0aW5nIFBvd2VyUG9pbnQnLFxuICAgICAgdGhpcy5fZXhwb3J0U2VydmljZS5wb3dlcnBvaW50KHRoaXMucmVwb3J0KCkpLFxuICAgICk7XG4gIH1cblxuICAvLyBFeHBvcnQgdG8gUERGLCBlbnRpcmVseSBjbGllbnQtc2lkZTogc2FtZSBjb2xsZWN0aW9uIHBhc3MsIGNoYXJ0cyByZW5kZXJlZFxuICAvLyB0aHJvdWdoIGFuIG9mZnNjcmVlbiBFQ2hhcnRzIGluc3RhbmNlIGF0IDPDlyBwaXhlbCByYXRpbyAocGl4ZWwtaWRlbnRpY2FsXG4gIC8vIHRvIHRoZSBzY3JlZW4pLCB0YWJsZXMgdmlhIGpzcGRmLWF1dG90YWJsZSDigJQgcGFnZSA9IFBERiBwYWdlLlxuICBwdWJsaWMgZXhwb3J0UGRmKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5yZXBvcnQoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX3Byb2Nlc3MucnVuKFxuICAgICAgJ0V4cG9ydGluZyBQREYnLFxuICAgICAgdGhpcy5fZXhwb3J0U2VydmljZS5wZGYodGhpcy5yZXBvcnQoKSksXG4gICAgKTtcbiAgfVxuXG4gIC8vIFRoZSB3aG9sZSByZXBvcnQgYXMgZmlsZXMgaW4gb25lIGFjdGlvbjogdGhlIHNlcnZlciB3cml0ZXMgb25lIENTViBwZXJcbiAgLy8gY29tcG9uZW50LCBlYWNoIHdoYXQgdGhlIHNjcmVlbiBzaG93cyAoYSBjaGFydCBvciBLUEkgYXMgZHJhd24sIGF0IHRoZVxuICAvLyB2aWV3ZXIncyBncm91cC1ieSBncmFpbjsgYSBsaXN0IGluIGZ1bGwpLCBhbmQgemlwcyB0aGVtIGZvbGRlcmVkIGJ5IHBhZ2VcbiAgLy8gd2l0aCBhbiBFeHBvcnQgTm90ZXMudHh0IHRoYXQgcmVjb3JkcyB0aGUgZmlsdGVycyBhcyB0aGUgYmFyIHJlYWRzIHRoZW0uXG4gIC8vIEVhY2ggZmlsZSBjYXJyaWVzIGl0cyB0aWxlJ3Mgb3duIHN0YXRlICh6aXBFeHBvcnRTdGF0ZXMpOiBhIGxpc3QncyBzb3J0LFxuICAvLyBzZWFyY2ggYW5kIGhpZGRlbiBjb2x1bW5zLCBhIGNoYXJ0J3MgZHJpbGwgcGF0aCBhbmQgdGhlIGdyb3VwcyB0aGF0IG1hdGNoXG4gIC8vICdhbnknOyBhIHNlcnZlciB0aGF0IGRvZXMgbm90IHJlYWQgaXQgdXNlcyBlYWNoIGxpc3QncyBzYXZlZCBzb3J0LiBUaGVcbiAgLy8gbm90ZXMgZ2V0IHRoZSBmaWx0ZXIgbGluZXMgYXMgdGhlIGNvdmVyIHdvcmRzIHRoZW0gKGZpbHRlckxpbmVzOyBhIFRoaXNcbiAgLy8gUGFnZSB6aXAgbmFtZXMgb25seSB0aGUgZ3JvdXBzIHRoYXQgcmVhY2ggdGhlIHBhZ2UpLiBBbGwgb2YgaXQgaXMgcmVhZFxuICAvLyBvbmNlLCB3aGVuIHRoZSBleHBvcnQgc3RhcnRzLiBUaGlzIHZpZXcga2VlcHMgbm8gc2F2ZWQgdmlld3MsIHNvIGl0XG4gIC8vIG5hbWVzIG5vbmUuIGB0aGlzUGFnZWAgbmFycm93cyBpdCB0byB0aGUgcGFnZSB0aGUgY2FudmFzIGlzIHNob3dpbmcuXG4gIC8vIFVubGlrZSB0aGUgUERGL1Bvd2VyUG9pbnQgZXhwb3J0cyB0aGUgZmlsZXMgYXJlIHdyaXR0ZW4gc2VydmVyLXNpZGUsIHNvXG4gIC8vIHRoZXkgYXJlIG5vdCBjYXBwZWQgYnkgd2hhdCBhIHNsaWRlIGNhbiBob2xkLlxuICBwdWJsaWMgZXhwb3J0RGF0YSh0aGlzUGFnZSA9IGZhbHNlKTogdm9pZCB7XG4gICAgY29uc3QgcmVwb3J0ID0gdGhpcy5yZXBvcnQoKTtcbiAgICBpZiAoIXJlcG9ydCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHBhZ2VJZCA9IHRoaXNQYWdlID8gdGhpcy5fY2FudmFzPy5hY3RpdmVQYWdlPy5pZCA/PyBudWxsIDogbnVsbDtcbiAgICBjb25zdCBmaWx0ZXJzID0gdGhpcy5fZmlsdGVyU3RhdGUucmVzb2x2ZUZvclJlcG9ydChyZXBvcnQsIHBhZ2VJZCk7XG4gICAgY29uc3QgZnJlcXVlbmN5ID0gdGhpcy5fZmlsdGVyU3RhdGUuZnJlcXVlbmN5KCk7XG4gICAgY29uc3Qgc25hcHNob3QgPSB0aGlzLl9jb2xsZWN0b3Iuc25hcHNob3QocmVwb3J0KTtcbiAgICBjb25zdCBzdGF0ZXMgPSB6aXBFeHBvcnRTdGF0ZXMocmVwb3J0LCBzbmFwc2hvdC52aWV3LCBwYWdlSWQpO1xuXG4gICAgdGhpcy5fcHJvY2Vzcy5kb3dubG9hZChcbiAgICAgICdFeHBvcnRpbmcgZGF0YScsXG4gICAgICB0aGlzLl9jb2xsZWN0b3IuZmlsdGVyTGluZXMocmVwb3J0LCBzbmFwc2hvdCwgcGFnZUlkKVxuICAgICAgICAucGlwZShcbiAgICAgICAgICBzd2l0Y2hNYXAoKGxpbmVzKSA9PiB0aGlzLl9yZXBvcnREYXRhLmV4cG9ydFJlcG9ydChcbiAgICAgICAgICAgIHJlcG9ydC5pZCxcbiAgICAgICAgICAgIGZpbHRlcnMsXG4gICAgICAgICAgICBwYWdlSWQsXG4gICAgICAgICAgICBmcmVxdWVuY3ksXG4gICAgICAgICAgICBsaW5lcyxcbiAgICAgICAgICAgIHN0YXRlcyxcbiAgICAgICAgICApKSxcbiAgICAgICAgKSxcbiAgICApO1xuICB9XG5cbiAgLy8gUmVhY3QgdG8gZWFjaCBjaGF0IHR1cm4gKGZzLWNoYXQgaGFuZGxlcyB0aGUgcmVxdWVzdCArIHBlcnNpc3RlbmNlKTsgd2VcbiAgLy8gb25seSBjYXJlIGFib3V0IHRoZSByZXBvcnQgc2lkZSBlZmZlY3RzIHRoaXMgY29udGV4dCdzIGJhY2tlbmQgZmxhZ3MuXG4gIHB1YmxpYyBvbkNoYXRSZXNwb25zZShyZXNwb25zZTogRnNBaUNoYXRSZXNwb25zZSk6IHZvaWQge1xuICAgIC8vIFRoZSBhZ2VudCBjaGFuZ2VkIHRoZSByZXBvcnQncyBzdHJ1Y3R1cmUg4oCUIHJlLWZldGNoIGl0LiBTZXNzaW9uIGZpbHRlclxuICAgIC8vIHZhbHVlcyBzdXJ2aXZlICh0aGUgZmlsdGVyLXN0YXRlIHNlcnZpY2Uga2VlcHMgdmFsdWVzIGZvciBncm91cHMgdGhhdFxuICAgIC8vIHN0aWxsIGV4aXN0KS5cbiAgICBpZiAocmVzcG9uc2UucmVwb3J0Q2hhbmdlZCAmJiB0aGlzLnNlbGVjdGVkKCkpIHtcbiAgICAgIHRoaXMuX2xvYWRSZXBvcnQodGhpcy5zZWxlY3RlZCgpLmlkKTtcbiAgICB9XG5cbiAgICAvLyBBIHJlbmFtZSBjaGFuZ2VzIG5vdGhpbmcgc3RydWN0dXJhbCDigJQgcmVmcmVzaCB0aGUgcGlja2VyIGNoaXAgbGFiZWwuXG4gICAgaWYgKHJlc3BvbnNlLnJlcG9ydFJlbmFtZWQgJiYgdGhpcy5zZWxlY3RlZCgpKSB7XG4gICAgICB0aGlzLl9yZWZyZXNoUmVwb3J0TmFtZSh0aGlzLnNlbGVjdGVkKCkuaWQpO1xuICAgIH1cbiAgfVxuXG4gIC8vIERyYWcgdGhlIGRpdmlkZXIgYmV0d2VlbiB0aGUgY2hhdCBhbmQgY2FudmFzIHBhbmVzIChwb2ludGVyLWNhcHR1cmUgbG9vcFxuICAvLyBvdXRzaWRlIEFuZ3VsYXIpLlxuICBwdWJsaWMgb25SZXNpemVTdGFydChldmVudDogUG9pbnRlckV2ZW50KTogdm9pZCB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgIGNvbnN0IGhhbmRsZSA9IGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudDtcbiAgICBoYW5kbGUuc2V0UG9pbnRlckNhcHR1cmUoZXZlbnQucG9pbnRlcklkKTtcbiAgICB0aGlzLl9zcGxpdC5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5hZGQoJ3Jlc2l6aW5nJyk7XG5cbiAgICB0aGlzLl96b25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgIGNvbnN0IG1vdmUgPSAoZTogUG9pbnRlckV2ZW50KSA9PiB0aGlzLl9yZXNpemVUbyhlLmNsaWVudFgpO1xuICAgICAgY29uc3QgZW5kID0gKCkgPT4ge1xuICAgICAgICBoYW5kbGUucmVsZWFzZVBvaW50ZXJDYXB0dXJlKGV2ZW50LnBvaW50ZXJJZCk7XG4gICAgICAgIGhhbmRsZS5yZW1vdmVFdmVudExpc3RlbmVyKCdwb2ludGVybW92ZScsIG1vdmUpO1xuICAgICAgICBoYW5kbGUucmVtb3ZlRXZlbnRMaXN0ZW5lcigncG9pbnRlcnVwJywgZW5kKTtcbiAgICAgICAgaGFuZGxlLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3BvaW50ZXJjYW5jZWwnLCBlbmQpO1xuICAgICAgICB0aGlzLl9zcGxpdC5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoJ3Jlc2l6aW5nJyk7XG4gICAgICB9O1xuXG4gICAgICBoYW5kbGUuYWRkRXZlbnRMaXN0ZW5lcigncG9pbnRlcm1vdmUnLCBtb3ZlKTtcbiAgICAgIGhhbmRsZS5hZGRFdmVudExpc3RlbmVyKCdwb2ludGVydXAnLCBlbmQpO1xuICAgICAgaGFuZGxlLmFkZEV2ZW50TGlzdGVuZXIoJ3BvaW50ZXJjYW5jZWwnLCBlbmQpO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBfcmVzaXplVG8oY2xpZW50WDogbnVtYmVyKTogdm9pZCB7XG4gICAgY29uc3QgcmVjdCA9IHRoaXMuX3NwbGl0Lm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgaWYgKHJlY3Qud2lkdGggPT09IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCByYXRpbyA9IChjbGllbnRYIC0gcmVjdC5sZWZ0KSAvIHJlY3Qud2lkdGg7XG4gICAgY29uc3QgY2xhbXBlZCA9IE1hdGgubWluKDAuOCwgTWF0aC5tYXgoMC4yLCByYXRpbykpO1xuICAgIHRoaXMuX2NoYXRQYW5lbC5uYXRpdmVFbGVtZW50LnN0eWxlLmZsZXhCYXNpcyA9IGAke2NsYW1wZWQgKiAxMDB9JWA7XG4gIH1cblxuICBwcml2YXRlIF9sb2FkUmVwb3J0KHJlcG9ydElkOiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLl9yZXBvcnREYXRhLmdldChyZXBvcnRJZClcbiAgICAgIC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLl9kZXN0cm95UmVmKSlcbiAgICAgIC5zdWJzY3JpYmUoKHJlcG9ydDogUmVwb3J0KSA9PiB7XG4gICAgICAgIHRoaXMucmVwb3J0LnNldChyZXBvcnQpO1xuICAgICAgICAvLyBBIHJlcG9ydCBrZWVwcyBubyBzdGF0ZSBpbiB0aGUgVVJMOiBpdHMgZmlsdGVycyBsaXZlIGluIHRoZSBzdGF0ZVxuICAgICAgICAvLyBzZXJ2aWNlIGZvciBhcyBsb25nIGFzIHRoZSByZXBvcnQgaXMgb3Blbi5cbiAgICAgICAgdGhpcy5fZmlsdGVyU3RhdGUuaW5pdChyZXBvcnQpO1xuICAgICAgICB0aGlzLl9idWlsZFJlcG9ydENvbmZpZygpO1xuICAgICAgfSk7XG4gIH1cblxuICAvLyBSZXBvcnQtbGV2ZWwgZmlsdGVyIGdyb3VwcyBpbiB0aGVpciBzYXZlZCBvcmRlciDigJQgdGhlIG9uZXMgdGhhdCByZW5kZXIgaW5cbiAgLy8gdGhlIHRvb2xiYXIgKGNvbXBvbmVudC1sZXZlbCBncm91cHMgcmVuZGVyIG9uIHRoZWlyIGNvbXBvbmVudHMpLCB3aXRoXG4gIC8vIHRoZSBwYWdlIGdyb3VwcyBvZiB0aGUgcGFnZSBvbiBzY3JlZW4uXG4gIHByaXZhdGUgX3JlcG9ydEdyb3VwcygpOiBSZXBvcnRGaWx0ZXJHcm91cFtdIHtcbiAgICByZXR1cm4gcmVwb3J0QmFyR3JvdXBzKHRoaXMucmVwb3J0KCksIHRoaXMuX3BhZ2VJZCgpKTtcbiAgfVxuXG4gIC8vIEdhdGVzIHRoZSB0b29sYmFyIGZzLWZpbHRlciBzbyBpdCBpc24ndCByZW5kZXJlZCAodGFraW5nIHNwYWNlKSB3aGVuIHRoZXJlXG4gIC8vIGlzIG5vdGhpbmcgdG8gcHV0IGluIGl0IOKAlCBubyByZXBvcnQtbGV2ZWwgZmlsdGVycyBhbmQgbm8gZ3JvdXAtYnkgY29udHJvbC5cbiAgcHVibGljIGdldCByZXBvcnRIYXNGaWx0ZXJzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9yZXBvcnRHcm91cHMoKS5sZW5ndGggPiAwIHx8ICEhdGhpcy5fZ3JvdXBCeUl0ZW0oKTtcbiAgfVxuXG4gIC8vIGZzLWZpbHRlciByZWFkcyBpdHMgY29uZmlnIG9ubHkgb25jZSAoYXQgaW5pdCkg4oCUIHJlLWJpbmRpbmcgZG9lcyBub3RoaW5nLlxuICAvLyBUaGUgdGVtcGxhdGUga2V5cyB0aGUgdG9vbGJhciBmcy1maWx0ZXIgb24gdGhpcyBzaWduYXR1cmUgc28gaXQncyByZWNyZWF0ZWRcbiAgLy8gKGFuZCByZS1yZWFkcyB0aGUgcmVidWlsdCBjb25maWcpIHdoZW5ldmVyIHRoZSByZXBvcnQtbGV2ZWwgZmlsdGVyIHNldFxuICAvLyBjaGFuZ2VzLCBlLmcuIGFmdGVyIHRoZSBjb21wb25lbnQgc2V0dGluZ3MgZGlhbG9nIGFkZHMvbW92ZXMgYSBmaWx0ZXIuXG4gIHB1YmxpYyBnZXQgcmVwb3J0RmlsdGVyS2V5KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFtcbiAgICAgIC8vIFRoZSBzdGF0ZSB2ZXJzaW9uIHRoZSBiYXIgd2FzIGJ1aWx0IGZvcjogYW4gYXBwbGllZCB2aWV3LCBvciBhIHJlc2V0XG4gICAgICAvLyB0byB0aGUgYmFzZSwgcmVwbGFjZXMgZXZlcnkgdmFsdWUgYXQgb25jZS5cbiAgICAgIHRoaXMuX2JhclZlcnNpb24oKSxcbiAgICAgIC8vIFRoZSBlZmZlY3RpdmUgem9uZSBpcyBwYXJ0IG9mIGl0IHRvbzogYSB6b25lIGNoYW5nZSByZS1yZXNvbHZlcyByZWxhdGl2ZVxuICAgICAgLy8gcHJlc2V0cywgYW5kIHRoZSBiYXIgbXVzdCBiZSByZWNyZWF0ZWQgdG8gc2hvdyB0aGUgbmV3IGRheXMuXG4gICAgICB0aGlzLl9maWx0ZXJTdGF0ZS50aW1lem9uZSgpLFxuICAgICAgLy8gVGhlIHN0b3JlZCBkZWZhdWx0IGlzIHBhcnQgb2YgdGhlIHNpZ25hdHVyZTogc2F2aW5nIGEgbmV3IGRlZmF1bHQgaW4gcmVwb3J0XG4gICAgICAvLyBzZXR0aW5ncyByZWJ1aWxkcyB0aGUgY29uZmlnLCBidXQgd2l0aG91dCBhIGtleSBjaGFuZ2UgZnMtZmlsdGVyIGtlZXBzXG4gICAgICAvLyByZW5kZXJpbmcgdGhlIHZhbHVlcyBpdCB3YXMgY3JlYXRlZCB3aXRoIHVudGlsIGEgZnVsbCBwYWdlIHJlbG9hZC5cbiAgICAgIGdyb3VwQnlTaWduYXR1cmUodGhpcy5yZXBvcnQoKSksXG4gICAgICAuLi50aGlzLl9yZXBvcnRHcm91cHMoKS5tYXAoKGdyb3VwKSA9PiBgJHtncm91cC5pZH06JHtncm91cC5sZXZlbH06JHtncm91cC5sYWJlbH06JHtkZWZhdWx0U2lnbmF0dXJlKGdyb3VwKX1gKSxcbiAgICAgIC8vIEEgcGFnZSBncm91cCBzaG93cyBvbiBpdHMgb3duIHBhZ2Ugb25seSwgc28gc3VjaCBhIGJhciBpcyByZWNyZWF0ZWRcbiAgICAgIC8vIHdoZW4gdGhlIHBhZ2Ugb24gc2NyZWVuIGNoYW5nZXMuXG4gICAgICAuLi4oaGFzUGFnZUdyb3VwKHRoaXMucmVwb3J0KCkpID8gW2BwYWdlOiR7dGhpcy5fcGFnZUlkKCl9YF0gOiBbXSksXG4gICAgXS5qb2luKCd8Jyk7XG4gIH1cblxuICAvLyAoUmUpYnVpbGQgdGhlIHRvb2xiYXIgZnMtZmlsdGVyIGNvbmZpZyDigJQgdGhlIHJlcG9ydC1sZXZlbCBmaWx0ZXIgaXRlbXMgYW5kXG4gIC8vIHRoZW4gdGhlIGdyb3VwLWJ5IGNvbnRyb2wuIFRoZSByZXBvcnQncyBhY3Rpb25zIGxpdmUgaW4gdGhlIGZzLW1lbnUgYmVzaWRlXG4gIC8vIHRoZSBwaWNrZXIsIG5vdCBoZXJlLiBPbmx5IGJ1aWx0L3VzZWQgb25jZSBhIHJlcG9ydCBpcyBsb2FkZWQgKHRoZSB0ZW1wbGF0ZVxuICAvLyBnYXRlcyBpdCBvbiBgcmVwb3J0YCkuXG4gIHByaXZhdGUgX2J1aWxkUmVwb3J0Q29uZmlnKCk6IHZvaWQge1xuICAgIGNvbnN0IHJlcG9ydElkID0gdGhpcy5yZXBvcnQoKT8uaWQgPz8gbnVsbDtcblxuICAgIC8vIERyb3AgYSBncmFpbiB0aGUgY29udHJvbCBubyBsb25nZXIgb2ZmZXJzIOKAlCB0aGUgYWdlbnQgY2FuIG5hcnJvdyB0aGUgbGlzdFxuICAgIC8vIG1pZC1zZXNzaW9uLCBhbmQgYW4gb3ZlcnJpZGUgdGhlIHZpZXdlciBjYW4ndCBzZWUgaXMgd29yc2UgdGhhbiBub25lLlxuICAgIGlmICh0aGlzLnJlcG9ydCgpICYmICFpc0dyYW51bGFyaXR5T2ZmZXJlZCh0aGlzLnJlcG9ydCgpLCB0aGlzLl9maWx0ZXJTdGF0ZS5mcmVxdWVuY3koKSkpIHtcbiAgICAgIHRoaXMuX2ZpbHRlclN0YXRlLnNldEZyZXF1ZW5jeShudWxsKTtcbiAgICB9XG5cbiAgICBjb25zdCBmZWF0dXJlcyA9IHRoaXMucmVwb3J0KCk/LnZpZXdlckZlYXR1cmVzID8/IFtdO1xuICAgIGNvbnN0IGl0ZW1zID0gcmVwb3J0SWRcbiAgICAgID8gdGhpcy5fcmVwb3J0R3JvdXBzKCkubWFwKChncm91cCkgPT5cbiAgICAgICAgZmlsdGVySXRlbUZvckdyb3VwKGdyb3VwLCB0aGlzLl9maWx0ZXJPcHRpb25zLCB0aGlzLnJlcG9ydCgpLCB0aGlzLl9maWx0ZXJTdGF0ZS52YWx1ZShncm91cC5pZCksIGZlYXR1cmVzKSlcbiAgICAgIDogW107XG5cbiAgICAvLyBUaGUgZ3JvdXAtYnkgY29udHJvbCBsZWFkcyB0aGUgYmFyLCBhaGVhZCBvZiBldmVyeSBmaWx0ZXI6IGl0IHNldHMgdGhlXG4gICAgLy8gZ3JhaW4gdGhlIHdob2xlIHJlcG9ydCBpcyByZWFkIGF0LCBzbyBpdCBpcyB0aGUgZmlyc3QgdGhpbmcgYSB2aWV3ZXJcbiAgICAvLyBkZWNpZGVzLiBJdCBpcyBub3QgYSBmaWx0ZXIgZ3JvdXAg4oCUIGl0IHJlLWJ1Y2tldHMgcm93cyByYXRoZXIgdGhhblxuICAgIC8vIG5hcnJvd2luZyB0aGVtIOKAlCBzbyBpdCBpcyBwbGFjZWQgaGVyZSByYXRoZXIgdGhhbiBvcmRlcmVkIGFtb25nIHRoZW0uXG4gICAgY29uc3QgZ3JvdXBCeUl0ZW0gPSB0aGlzLl9ncm91cEJ5SXRlbSgpO1xuICAgIGlmIChncm91cEJ5SXRlbSkge1xuICAgICAgaXRlbXMudW5zaGlmdChncm91cEJ5SXRlbSk7XG4gICAgfVxuXG4gICAgLy8gSG93IHRoZSBncm91cHMgY29tYmluZSBjbG9zZXMgdGhlIGJhci5cbiAgICBjb25zdCBtYXRjaEl0ZW0gPSB0aGlzLl9tYXRjaEl0ZW0oKTtcbiAgICBpZiAobWF0Y2hJdGVtKSB7XG4gICAgICBpdGVtcy5wdXNoKG1hdGNoSXRlbSk7XG4gICAgfVxuXG4gICAgdGhpcy5fYmFyVmVyc2lvbi5zZXQodGhpcy5fZmlsdGVyU3RhdGUuc3RhdGVWZXJzaW9uKCkpO1xuICAgIHRoaXMucmVwb3J0RmlsdGVyQ29uZmlnLnNldCh7XG4gICAgICAvLyBOZXZlciB0b3VjaCB0aGUgVVJMIG9yIHBlcnNpc3QgZmlsdGVyIHN0YXRlIOKAlCByZXBvcnQgZmlsdGVycyBhcmVcbiAgICAgIC8vIHNlc3Npb24tb25seSwgb3duZWQgYnkgUmVwb3J0RmlsdGVyU3RhdGVTZXJ2aWNlLlxuICAgICAgcXVlcnlQYXJhbTogZmFsc2UsXG4gICAgICBwZXJzaXN0OiBmYWxzZSxcbiAgICAgIGl0ZW1zLFxuICAgICAgY2hhbmdlOiAocXVlcnkpID0+IHRoaXMuX2JhckNoYW5nZWQocXVlcnkgPz8ge30sICEhbWF0Y2hJdGVtKSxcbiAgICAgIC8vICdDbGVhciBmaWx0ZXJzJyBwdXRzIHRoZSBzY3JlZW4gYmFjayBvbiB0aGUgcmVwb3J0J3MgZGVmYXVsdHMgKHRoaXNcbiAgICAgIC8vIHZpZXcgb3BlbnMgbm8gc2F2ZWQgdmlld3MpIGFuZCBkcm9wcyB0aGUgdGVtcG9yYXJ5IGxheWVyLiBBIHNlcnZlclxuICAgICAgLy8gd2l0aG91dCBzYXZlZCB2aWV3cyBrZWVwcyB0aGUgY2xlYXIgaXQgYWx3YXlzIGhhZDogdGhlIGJhcidzIGl0ZW1zXG4gICAgICAvLyBvbmx5LlxuICAgICAgY2xlYXI6IGZlYXR1cmVzLmluY2x1ZGVzKCd2aWV3cycpID8gKCkgPT4gdGhpcy5fZmlsdGVyU3RhdGUucmVzZXRUb0Jhc2UoKSA6IHVuZGVmaW5lZCxcbiAgICAgIC8vIFRoZSBjaGlwIHNob3dzIGV4YWN0bHkgd2hpbGUgdGhlIHNjcmVlbiBkaWZmZXJzIGZyb20gdGhlIGRlZmF1bHRzIGFcbiAgICAgIC8vIGNsZWFyIHJldHVybnMgdG8gKEM1KS5cbiAgICAgIGNsZWFyVmlzaWJsZTogZmVhdHVyZXMuaW5jbHVkZXMoJ3ZpZXdzJykgPyAoKSA9PiB0aGlzLl9maWx0ZXJTdGF0ZS52aWV3Q2hhbmdlZCgpIDogdW5kZWZpbmVkLFxuICAgIH0pO1xuICB9XG5cbiAgLy8gVGhlIGJhcidzIHZhbHVlcyBpbnRvIHRoZSBzdGF0ZTogZXZlcnkgZ3JvdXAgaXQgc2hvd3MsIHRoZSBncmFpbiBhbmQsXG4gIC8vIHdoZW4gdGhlIGJhciBoYXMgdGhlIGNvbnRyb2wsIHRoZSBtYXRjaC5cbiAgcHJpdmF0ZSBfYmFyQ2hhbmdlZChxdWVyeTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sIGhhc01hdGNoOiBib29sZWFuKTogdm9pZCB7XG4gICAgZm9yIChjb25zdCB7IGdyb3VwSWQsIHZhbHVlIH0gb2YgZ3JvdXBWYWx1ZXNGcm9tUXVlcnkocXVlcnksIHRoaXMuX3JlcG9ydEdyb3VwcygpKSkge1xuICAgICAgdGhpcy5fZmlsdGVyU3RhdGUuc2V0VmFsdWUoZ3JvdXBJZCwgdmFsdWUpO1xuICAgIH1cbiAgICAvLyBOb3QgYSBmaWx0ZXIgZ3JvdXAg4oCUIHRoZSBncmFpbiBpcyByZWFkIHN0cmFpZ2h0IG9mZiB0aGUgcXVlcnkuXG4gICAgdGhpcy5fZmlsdGVyU3RhdGUuc2V0RnJlcXVlbmN5KChxdWVyeVtHUk9VUF9CWV9JVEVNXSBhcyBDaGFydEdyYW51bGFyaXR5KSB8fCBudWxsKTtcbiAgICAvLyBOb3IgaXMgdGhlIG1hdGNoOyBhIGJhciB3aXRob3V0IHRoZSBjb250cm9sIGxlYXZlcyBpdCBhcyBpdCBpcy5cbiAgICBpZiAoaGFzTWF0Y2gpIHtcbiAgICAgIHRoaXMuX2ZpbHRlclN0YXRlLnNldE1hdGNoKG1hdGNoRnJvbVF1ZXJ5KHF1ZXJ5KSk7XG4gICAgfVxuICB9XG5cbiAgLy8gVGhlIHJlcG9ydCdzIGdyb3VwLWJ5IGNvbnRyb2wgYXMgYW4gZnMtZmlsdGVyIGl0ZW0sIG9yIG51bGwgd2hlbiB0aGUgcmVwb3J0XG4gIC8vIGhhcyBub25lIHRvIHNob3cuIFNlZWRlZCBmcm9tIHRoZSBzZXNzaW9uIHN0YXRlIHNvIHRoZSBncmFpbiB0aGUgdmlld2VyXG4gIC8vIHBpY2tlZCBzdXJ2aXZlcyB0aGUgcmVwb3J0IGJlaW5nIHJlLWZldGNoZWQgYWZ0ZXIgYSBjaGF0IGVkaXQuXG4gIHByaXZhdGUgX2dyb3VwQnlJdGVtKCk6IElGaWx0ZXJDb25maWdJdGVtIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMucmVwb3J0KClcbiAgICAgID8gZ3JvdXBCeUZpbHRlckl0ZW0odGhpcy5yZXBvcnQoKSwgdGhpcy5fZmlsdGVyU3RhdGUuZnJlcXVlbmN5KCkpXG4gICAgICA6IG51bGw7XG4gIH1cblxuICAvLyBUaGUgYmFyJ3MgTWF0Y2ggY29udHJvbCwgc2VlZGVkIHdpdGggdGhlIG1hdGNoIG9uIHNjcmVlbiwgb3IgbnVsbCB3aGVuXG4gIC8vIHRoZSBiYXIgaG9sZHMgZmV3ZXIgdGhhbiB0d28gZ3JvdXBzIHRoYXQgY29tYmluZS5cbiAgcHJpdmF0ZSBfbWF0Y2hJdGVtKCk6IElGaWx0ZXJDb25maWdJdGVtIHwgbnVsbCB7XG4gICAgcmV0dXJuIG1hdGNoRmlsdGVySXRlbSh0aGlzLnJlcG9ydCgpLCB0aGlzLl9yZXBvcnRHcm91cHMoKSwgdGhpcy5fcGFnZUlkKCksIHRoaXMuX2ZpbHRlclN0YXRlLm1hdGNoKCkpO1xuICB9XG5cbiAgcHJpdmF0ZSBfcmVmcmVzaFJlcG9ydE5hbWUocmVwb3J0SWQ6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMuX3JlcG9ydFNlcnZpY2UubG9hZCgpXG4gICAgICAucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5fZGVzdHJveVJlZikpXG4gICAgICAuc3Vic2NyaWJlKChyZXBvcnRzOiBSZXBvcnRMaXN0SXRlbVtdKSA9PiB7XG4gICAgICAgIGNvbnN0IHJlbmFtZWQgPSByZXBvcnRzLmZpbmQoKHJlcG9ydCkgPT4gcmVwb3J0LmlkID09PSByZXBvcnRJZCk7XG4gICAgICAgIGlmIChyZW5hbWVkKSB7XG4gICAgICAgICAgdGhpcy5zZWxlY3RlZC5zZXQocmVuYW1lZCk7XG4gICAgICAgICAgaWYgKHRoaXMucmVwb3J0KCkpIHtcbiAgICAgICAgICAgIHRoaXMucmVwb3J0LnNldCh7IC4uLnRoaXMucmVwb3J0KCksIG5hbWU6IHJlbmFtZWQubmFtZSB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICB9XG59XG4iLCI8ZGl2XG4gICAgI3NwbGl0XG4gICAgY2xhc3M9XCJyZXBvcnQgZnMtcm93LmFsaWduLXN0YXJ0XCI+XG4gIDxmcy1haS1jaGF0XG4gICAgI2NoYXRQYW5lbFxuICAgIGNsYXNzPVwiY2hhdFwiXG4gICAgc3R5bGU9XCJtaW4taGVpZ2h0OiA1MDBweDtcIlxuICAgIGJhc2VQYXRoPVwicmVwb3J0c1wiXG4gICAgW3JlcXVlc3REYXRhXT1cInsgcmVwb3J0SWQ6IHNlbGVjdGVkKCk/LmlkID8/IG51bGwgfVwiXG4gICAgW2ludHJvTWVzc2FnZV09XCJpbnRyb01lc3NhZ2VcIlxuICAgIChyZXNwb25zZSk9XCJvbkNoYXRSZXNwb25zZSgkZXZlbnQpXCI+XG4gIDwvZnMtYWktY2hhdD5cbiAgPGRpdlxuICAgIGNsYXNzPVwicmVzaXplclwiXG4gICAgKHBvaW50ZXJkb3duKT1cIm9uUmVzaXplU3RhcnQoJGV2ZW50KVwiPlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz1cInZpZXdlciBmcy1mbGV4IGZzLWNvbHVtblwiPlxuICAgIDxkaXYgY2xhc3M9XCJmcy1yb3cuYWxpZ24tY2VudGVyLmdhcC1zbVwiPlxuICAgICAgPGZzLWF1dG9jb21wbGV0ZS1jaGlwc1xuICAgICAgICAgIGNsYXNzPVwiZnMtZmxleFwiXG4gICAgICAgICAgW2ZldGNoXT1cImZldGNoUmVwb3J0c1wiXG4gICAgICAgICAgWyhuZ01vZGVsKV09XCJzZWxlY3RlZFwiXG4gICAgICAgICAgW2Rpc2FibGVkXT1cImxvYWRpbmdSZXBvcnRzKClcIlxuICAgICAgICAgIFtwYWRsZXNzXT1cInRydWVcIlxuICAgICAgICAgIFttdWx0aXBsZV09XCJmYWxzZVwiXG4gICAgICAgICAgW2ZldGNoT25Gb2N1c109XCJ0cnVlXCJcbiAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJyZXBvcnRDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgcGxhY2Vob2xkZXI9XCJSZXBvcnRcIlxuICAgICAgICAgIG5hbWU9XCJyZXBvcnRcIj5cbiAgICAgICAgPG5nLXRlbXBsYXRlXG4gICAgICAgICAgICBmc0F1dG9jb21wbGV0ZUNoaXBzVGVtcGxhdGVcbiAgICAgICAgICAgIGxldC1vYmplY3Q9XCJvYmplY3RcIj5cbiAgICAgICAgICB7eyBvYmplY3QubmFtZSB9fVxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICAgIGZzQXV0b2NvbXBsZXRlQ2hpcHNTdGF0aWNcbiAgICAgICAgICAgIChjbGljayk9XCJjcmVhdGVSZXBvcnQoKVwiPlxuICAgICAgICAgIENyZWF0ZSBSZXBvcnRcbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgIDwvZnMtYXV0b2NvbXBsZXRlLWNoaXBzPlxuICAgICAgQGlmIChyZXBvcnQoKSAmJiBlZGl0TW9kZSgpKSB7XG4gICAgICAgIDwhLS0gV2hhdCBsYXlvdXQgZWRpdGluZyBjYW4gYWRkIG9yIHN3aXRjaCB0bywgYW5kIHRoZSB3YXkgb3V0IG9mIGl0IOKAlFxuICAgICAgICAgICAgIHRoZSBzYW1lIG91dGxpbmVkIGJ1dHRvbnMgYXMgdGhlIGZzLWFpLXJlcG9ydCB0b29sYmFyLiAtLT5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgbWF0LXN0cm9rZWQtYnV0dG9uXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIG1hdFRvb2x0aXA9XCJBZGQgYSBibG9jayBvZiB0ZXh0XCJcbiAgICAgICAgICAgIChjbGljayk9XCJhZGRUZXh0KClcIj5cbiAgICAgICAgICA8bWF0LWljb24+dGl0bGU8L21hdC1pY29uPlxuICAgICAgICAgIEFkZCB0ZXh0XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICBtYXQtc3Ryb2tlZC1idXR0b25cbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgY2xhc3M9XCJtYXN0ZXItdG9nZ2xlXCJcbiAgICAgICAgICAgIFtjbGFzcy5hY3RpdmVdPVwiaXNNYXN0ZXJNb2RlXCJcbiAgICAgICAgICAgIFttYXRUb29sdGlwXT1cImlzTWFzdGVyTW9kZSA/ICdCYWNrIHRvIGVkaXRpbmcgdGhpcyBwYWdlJyA6ICdFZGl0IHRoZSBoZWFkZXIgYW5kIGZvb3RlciBzaG93biBvbiBldmVyeSBwYWdlJ1wiXG4gICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlTWFzdGVyTW9kZSgpXCI+XG4gICAgICAgICAgPG1hdC1pY29uPndlYl9hc3NldDwvbWF0LWljb24+XG4gICAgICAgICAgSGVhZGVyICYgZm9vdGVyXG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICBtYXQtc3Ryb2tlZC1idXR0b25cbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZUVkaXRNb2RlKClcIj5cbiAgICAgICAgICA8bWF0LWljb24+Y2hlY2s8L21hdC1pY29uPlxuICAgICAgICAgIERvbmUgZWRpdGluZ1xuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIH1cbiAgICAgIEBpZiAocmVwb3J0KCkpIHtcbiAgICAgICAgPGZzLW1lbnU+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlXG4gICAgICAgICAgICAgIGZzLW1lbnUtaXRlbVxuICAgICAgICAgICAgICAoY2xpY2spPVwicmVwb3J0U2V0dGluZ3MoKVwiPlxuICAgICAgICAgICAgPG1hdC1pY29uPlxuICAgICAgICAgICAgICB0dW5lXG4gICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgUmVwb3J0IHNldHRpbmdzXG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICAgICAgZnMtbWVudS1pdGVtXG4gICAgICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVFZGl0TW9kZSgpXCJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImVkaXRNb2RlKClcIj5cbiAgICAgICAgICAgIDxtYXQtaWNvbj5cbiAgICAgICAgICAgICAgZGFzaGJvYXJkX2N1c3RvbWl6ZVxuICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgIHt7IGVkaXRNb2RlKCkgPyAnRG9uZSBlZGl0aW5nIGxheW91dCcgOiAnRWRpdCBsYXlvdXQnIH19XG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICAgICAgZnMtbWVudS1pdGVtXG4gICAgICAgICAgICAgIChjbGljayk9XCJleHBvcnRQb3dlcnBvaW50KClcIj5cbiAgICAgICAgICAgIDxtYXQtaWNvbj5cbiAgICAgICAgICAgICAgc2xpZGVzaG93XG4gICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgRXhwb3J0IFBvd2VyUG9pbnRcbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICAgICAgICBmcy1tZW51LWl0ZW1cbiAgICAgICAgICAgICAgKGNsaWNrKT1cImV4cG9ydFBkZigpXCI+XG4gICAgICAgICAgICA8bWF0LWljb24+XG4gICAgICAgICAgICAgIHBpY3R1cmVfYXNfcGRmXG4gICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgRXhwb3J0IFBERlxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlXG4gICAgICAgICAgICAgIGZzLW1lbnUtaXRlbVxuICAgICAgICAgICAgICAoY2xpY2spPVwiZXhwb3J0RGF0YSgpXCI+XG4gICAgICAgICAgICA8bWF0LWljb24+XG4gICAgICAgICAgICAgIHRhYmxlX3ZpZXdcbiAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICBFeHBvcnQgUmF3IERhdGFcbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgIEBpZiAoKHJlcG9ydCgpPy5wYWdlcz8ubGVuZ3RoID8/IDApID4gMSkge1xuICAgICAgICAgICAgPG5nLXRlbXBsYXRlXG4gICAgICAgICAgICAgICAgZnMtbWVudS1pdGVtXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cImV4cG9ydERhdGEodHJ1ZSlcIj5cbiAgICAgICAgICAgICAgPG1hdC1pY29uPlxuICAgICAgICAgICAgICAgIHRhYmxlX3ZpZXdcbiAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgRXhwb3J0IFJhdyBEYXRhIChUaGlzIFBhZ2UpXG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgIH1cbiAgICAgICAgPC9mcy1tZW51PlxuICAgICAgfVxuICAgIDwvZGl2PlxuICAgIEBpZiAocmVwb3J0KCkpIHtcbiAgICAgIDwhLS0gUmVwb3J0LWxldmVsIGZpbHRlcnMgb25seSAodGhlIHJlcG9ydCdzIGFjdGlvbnMgbGl2ZSBpbiB0aGUgbWVudVxuICAgICAgICAgICBhYm92ZSkuIGZzLWZpbHRlciByZWFkcyBpdHMgY29uZmlnIG9uY2UgYXQgaW5pdCwgc28gaXQncyBrZXllZCBvbiB0aGVcbiAgICAgICAgICAgZmlsdGVyIHNpZ25hdHVyZTogd2hlbiB0aGUgcmVwb3J0LWxldmVsIGZpbHRlciBzZXQgY2hhbmdlcyB0aGUgYmxvY2tcbiAgICAgICAgICAgaXMgcmVjcmVhdGVkIGFuZCByZS1yZWFkcyB0aGUgcmVidWlsdCBjb25maWcuIC0tPlxuICAgICAgQGlmIChyZXBvcnRIYXNGaWx0ZXJzKSB7XG4gICAgICAgIEBmb3IgKGtleSBvZiBbcmVwb3J0RmlsdGVyS2V5XTsgdHJhY2sga2V5KSB7XG4gICAgICAgICAgPGZzLWZpbHRlciBbY29uZmlnXT1cInJlcG9ydEZpbHRlckNvbmZpZygpXCI+PC9mcy1maWx0ZXI+XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIDxhcHAtcmVwb3J0LWNhbnZhc1xuICAgICAgICBbcmVwb3J0XT1cInJlcG9ydCgpXCJcbiAgICAgICAgW2VkaXRNb2RlXT1cImVkaXRNb2RlKClcIlxuICAgICAgICAoY29tcG9uZW50U2V0dGluZ3MpPVwiY29tcG9uZW50U2V0dGluZ3MoJGV2ZW50KVwiXG4gICAgICAgIChyZXBvcnRDaGFuZ2VkKT1cIm9uQ2FudmFzUmVwb3J0Q2hhbmdlZCgpXCJcbiAgICAgICAgKHBhZ2VDaGFuZ2VkKT1cIm9uQ2FudmFzUGFnZUNoYW5nZWQoJGV2ZW50KVwiPlxuICAgICAgPC9hcHAtcmVwb3J0LWNhbnZhcz5cbiAgICB9XG4gIDwvZGl2PlxuPC9kaXY+Il19
|
package/fesm2022/{firestitch-report-echarts-UBg8Wlhd.mjs → firestitch-report-echarts-DHEH_K_q.mjs}
RENAMED
|
@@ -4,7 +4,7 @@ import * as echarts from 'echarts/core';
|
|
|
4
4
|
export { echarts as default };
|
|
5
5
|
import { LabelLayout } from 'echarts/features';
|
|
6
6
|
import { CanvasRenderer } from 'echarts/renderers';
|
|
7
|
-
import { R as REPORT_CHART_COLORS_CSS, a as REPORT_CHART_FONT_FAMILY, b as REPORT_AXIS_LABEL_FONT_SIZE } from './firestitch-report-firestitch-report-
|
|
7
|
+
import { R as REPORT_CHART_COLORS_CSS, a as REPORT_CHART_FONT_FAMILY, b as REPORT_AXIS_LABEL_FONT_SIZE } from './firestitch-report-firestitch-report-ZcHTnNKq.mjs';
|
|
8
8
|
|
|
9
9
|
// Tree-shaken ECharts build for the reports renderer: only the chart types and
|
|
10
10
|
// components the option-builder emits are registered, keeping the lazy chunk
|
|
@@ -63,4 +63,4 @@ echarts.registerTheme('report', {
|
|
|
63
63
|
axisLabel: { color: '#52606d', fontSize: REPORT_AXIS_LABEL_FONT_SIZE },
|
|
64
64
|
},
|
|
65
65
|
});
|
|
66
|
-
//# sourceMappingURL=firestitch-report-echarts-
|
|
66
|
+
//# sourceMappingURL=firestitch-report-echarts-DHEH_K_q.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"firestitch-report-echarts-
|
|
1
|
+
{"version":3,"file":"firestitch-report-echarts-DHEH_K_q.mjs","sources":["../../src/app/reports/theme/echarts.ts"],"sourcesContent":["// Tree-shaken ECharts build for the reports renderer: only the chart types and\n// components the option-builder emits are registered, keeping the lazy chunk\n// lean. Loaded on demand by ngx-echarts via provideEchartsCore — see\n// REPORT_ECHARTS_PROVIDERS in reports-echarts.provider.ts.\n//\n// The canvas renderer (not SVG) is deliberate: chart.getDataURL() needs it for\n// the high-res images the PPT/PDF exports will use.\n\nimport { BarChart, LineChart, PieChart } from 'echarts/charts';\nimport {\n DatasetComponent,\n GridComponent,\n LegendComponent,\n MarkAreaComponent,\n MarkLineComponent,\n TooltipComponent,\n} from 'echarts/components';\nimport * as echarts from 'echarts/core';\nimport { LabelLayout } from 'echarts/features';\nimport { CanvasRenderer } from 'echarts/renderers';\n\nimport { REPORT_CHART_COLORS_CSS } from './palette';\nimport { REPORT_AXIS_LABEL_FONT_SIZE, REPORT_CHART_FONT_FAMILY } from './typography';\n\necharts.use([\n BarChart,\n LineChart,\n PieChart,\n GridComponent,\n TooltipComponent,\n LegendComponent,\n DatasetComponent,\n // Reference lines and statistic lines (markLine), reference bands\n // (markArea), and the overlap hiding of 'auto' data labels (LabelLayout).\n MarkLineComponent,\n MarkAreaComponent,\n LabelLayout,\n CanvasRenderer,\n]);\n\n// The house theme — the single place report chart \"standards\" live (palette,\n// typography, tooltip styling). Polished defaults now; refined in the polish\n// phase.\necharts.registerTheme('report', {\n color: REPORT_CHART_COLORS_CSS,\n textStyle: {\n fontFamily: REPORT_CHART_FONT_FAMILY,\n },\n title: {\n textStyle: { color: '#1f2933', fontSize: 14, fontWeight: 600 },\n },\n legend: {\n textStyle: { color: '#52606d', fontSize: 11 },\n },\n tooltip: {\n backgroundColor: 'rgba(31, 41, 51, 0.92)',\n borderWidth: 0,\n textStyle: { color: '#fff', fontSize: 12 },\n },\n categoryAxis: {\n axisLine: { lineStyle: { color: '#cbd2d9' } },\n axisTick: { show: false },\n axisLabel: { color: '#52606d', fontSize: REPORT_AXIS_LABEL_FONT_SIZE },\n splitLine: { show: false },\n },\n valueAxis: {\n axisLine: { show: false },\n axisLabel: { color: '#52606d', fontSize: REPORT_AXIS_LABEL_FONT_SIZE },\n splitLine: { lineStyle: { color: '#e4e7eb' } },\n },\n timeAxis: {\n axisLine: { lineStyle: { color: '#cbd2d9' } },\n axisLabel: { color: '#52606d', fontSize: REPORT_AXIS_LABEL_FONT_SIZE },\n },\n});\n\nexport default echarts;\n"],"names":[],"mappings":";;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAkBA,OAAO,CAAC,GAAG,CAAC;IACV,QAAQ;IACR,SAAS;IACT,QAAQ;IACR,aAAa;IACb,gBAAgB;IAChB,eAAe;IACf,gBAAgB;;;IAGhB,iBAAiB;IACjB,iBAAiB;IACjB,WAAW;IACX,cAAc;AACf,CAAA,CAAC,CAAC;AAEH;AACA;AACA;AACA,OAAO,CAAC,aAAa,CAAC,QAAQ,EAAE;AAC9B,IAAA,KAAK,EAAE,uBAAuB;AAC9B,IAAA,SAAS,EAAE;AACT,QAAA,UAAU,EAAE,wBAAwB;AACrC,KAAA;AACD,IAAA,KAAK,EAAE;AACL,QAAA,SAAS,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,EAAE,UAAU,EAAE,GAAG,EAAE;AAC/D,KAAA;AACD,IAAA,MAAM,EAAE;QACN,SAAS,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,EAAE;AAC9C,KAAA;AACD,IAAA,OAAO,EAAE;AACP,QAAA,eAAe,EAAE,wBAAwB;AACzC,QAAA,WAAW,EAAE,CAAC;QACd,SAAS,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,EAAE;AAC3C,KAAA;AACD,IAAA,YAAY,EAAE;QACZ,QAAQ,EAAE,EAAE,SAAS,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE;AAC7C,QAAA,QAAQ,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE;QACzB,SAAS,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,2BAA2B,EAAE;AACtE,QAAA,SAAS,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE;AAC3B,KAAA;AACD,IAAA,SAAS,EAAE;AACT,QAAA,QAAQ,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE;QACzB,SAAS,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,2BAA2B,EAAE;QACtE,SAAS,EAAE,EAAE,SAAS,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE;AAC/C,KAAA;AACD,IAAA,QAAQ,EAAE;QACR,QAAQ,EAAE,EAAE,SAAS,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE;QAC7C,SAAS,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,2BAA2B,EAAE;AACvE,KAAA;AACF,CAAA,CAAC"}
|