@firestitch/report 18.6.1 → 18.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/app/reports/components/component-chart/component-chart.component.d.ts +6 -7
- package/app/reports/components/component-kpi/component-kpi.component.d.ts +17 -9
- package/app/reports/components/component-kpi/components/sparkline/sparkline.component.d.ts +8 -0
- package/app/reports/components/component-list/component-list.component.d.ts +39 -10
- package/app/reports/components/component-note/component-note.component.d.ts +12 -0
- package/app/reports/components/report-canvas/report-canvas.component.d.ts +0 -10
- package/app/reports/components/report-component/report-component.component.d.ts +5 -12
- package/app/reports/data/report.data.d.ts +2 -3
- package/app/reports/dialogs/component-settings/component-settings.component.d.ts +34 -2
- package/app/reports/dialogs/list-columns/list-columns.component.d.ts +23 -0
- package/app/reports/dialogs/report-settings/report-locale-patch.d.ts +5 -0
- package/app/reports/dialogs/report-settings/report-settings.component.d.ts +20 -2
- package/app/reports/enums/report-change-polarity.enum.d.ts +5 -0
- package/app/reports/enums/report-chart-color.enum.d.ts +12 -0
- package/app/reports/enums/report-chart-data-labels.enum.d.ts +6 -0
- package/app/reports/enums/report-chart-date-label.enum.d.ts +5 -0
- package/app/reports/enums/report-chart-line-style.enum.d.ts +5 -0
- package/app/reports/enums/report-chart-mark-stat.enum.d.ts +6 -0
- package/app/reports/enums/report-kpi-trend.enum.d.ts +5 -0
- package/app/reports/enums/report-list-column-format.enum.d.ts +6 -0
- package/app/reports/enums/report-number-units.enum.d.ts +6 -0
- package/app/reports/enums/report-value-format.enum.d.ts +5 -0
- package/app/reports/export/offscreen-chart.d.ts +2 -2
- package/app/reports/export/report-export-collector.service.d.ts +37 -8
- package/app/reports/export/report-pdf.service.d.ts +6 -0
- package/app/reports/export/report-pptx.service.d.ts +24 -0
- package/app/reports/format.d.ts +64 -3
- package/app/reports/interfaces/report-chat-viewer-filter.interface.d.ts +2 -0
- package/app/reports/interfaces/report.interface.d.ts +205 -14
- package/app/reports/kpi-card.d.ts +48 -0
- package/app/reports/layout.d.ts +0 -9
- package/app/reports/list-config.d.ts +16 -0
- package/app/reports/option-builder.d.ts +76 -9
- package/app/reports/output-notes.d.ts +14 -0
- package/app/reports/pipes/report-date.pipe.d.ts +2 -1
- package/app/reports/pipes/report-number.pipe.d.ts +8 -0
- package/app/reports/pipes/report-output.pipe.d.ts +10 -0
- package/app/reports/report-filter-items.d.ts +5 -2
- package/app/reports/report-url-state.d.ts +4 -0
- package/app/reports/services/report-filter-state.service.d.ts +27 -2
- package/app/reports/theme/palette.d.ts +6 -0
- package/app/reports/theme/typography.d.ts +2 -0
- package/esm2022/app/reports/components/component-chart/component-chart.component.mjs +23 -20
- package/esm2022/app/reports/components/component-kpi/component-kpi.component.mjs +56 -29
- package/esm2022/app/reports/components/component-kpi/components/sparkline/sparkline.component.mjs +19 -0
- package/esm2022/app/reports/components/component-list/component-list.component.mjs +218 -32
- package/esm2022/app/reports/components/component-note/component-note.component.mjs +30 -0
- package/esm2022/app/reports/components/report-canvas/report-canvas.component.mjs +7 -61
- package/esm2022/app/reports/components/report-component/report-component.component.mjs +99 -100
- package/esm2022/app/reports/data/report.data.mjs +20 -7
- package/esm2022/app/reports/dialogs/component-settings/component-settings.component.mjs +133 -13
- package/esm2022/app/reports/dialogs/list-columns/list-columns.component.mjs +56 -0
- package/esm2022/app/reports/dialogs/report-settings/report-locale-patch.mjs +13 -0
- package/esm2022/app/reports/dialogs/report-settings/report-settings.component.mjs +138 -20
- package/esm2022/app/reports/enums/report-change-polarity.enum.mjs +11 -0
- package/esm2022/app/reports/enums/report-chart-color.enum.mjs +19 -0
- package/esm2022/app/reports/enums/report-chart-data-labels.enum.mjs +13 -0
- package/esm2022/app/reports/enums/report-chart-date-label.enum.mjs +13 -0
- package/esm2022/app/reports/enums/report-chart-line-style.enum.mjs +12 -0
- package/esm2022/app/reports/enums/report-chart-mark-stat.enum.mjs +12 -0
- package/esm2022/app/reports/enums/report-kpi-trend.enum.mjs +10 -0
- package/esm2022/app/reports/enums/report-list-column-format.enum.mjs +14 -0
- package/esm2022/app/reports/enums/report-number-units.enum.mjs +14 -0
- package/esm2022/app/reports/enums/report-value-format.enum.mjs +13 -0
- package/esm2022/app/reports/export/offscreen-chart.mjs +5 -4
- package/esm2022/app/reports/export/report-export-collector.service.mjs +186 -40
- package/esm2022/app/reports/export/report-pdf.service.mjs +332 -67
- package/esm2022/app/reports/export/report-pptx.service.mjs +765 -106
- package/esm2022/app/reports/format.mjs +917 -57
- package/esm2022/app/reports/interfaces/report-chat-viewer-filter.interface.mjs +1 -1
- package/esm2022/app/reports/interfaces/report.interface.mjs +1 -1
- package/esm2022/app/reports/kpi-card.mjs +174 -0
- package/esm2022/app/reports/layout.mjs +1 -46
- package/esm2022/app/reports/list-config.mjs +106 -0
- package/esm2022/app/reports/option-builder.mjs +1457 -117
- package/esm2022/app/reports/output-notes.mjs +158 -0
- package/esm2022/app/reports/pipes/report-date.pipe.mjs +7 -6
- package/esm2022/app/reports/pipes/report-number.pipe.mjs +25 -0
- package/esm2022/app/reports/pipes/report-output.pipe.mjs +28 -0
- package/esm2022/app/reports/report-filter-items.mjs +28 -3
- package/esm2022/app/reports/report-url-state.mjs +56 -15
- package/esm2022/app/reports/services/report-filter-state.service.mjs +274 -22
- package/esm2022/app/reports/theme/echarts.mjs +8 -2
- package/esm2022/app/reports/theme/palette.mjs +35 -1
- package/esm2022/app/reports/theme/typography.mjs +8 -1
- package/esm2022/app/reports/views/report/fs-ai-report.component.mjs +2 -2
- package/esm2022/app/reports/views/report/report.component.mjs +3 -4
- package/esm2022/public_api.mjs +10 -1
- package/fesm2022/{firestitch-report-echarts-Djtmaxj1.mjs → firestitch-report-echarts-qCBE3LqM.mjs} +9 -3
- package/fesm2022/firestitch-report-echarts-qCBE3LqM.mjs.map +1 -0
- package/fesm2022/{firestitch-report-firestitch-report-D3zseBZc.mjs → firestitch-report-firestitch-report-DbsWbE-j.mjs} +5523 -875
- package/fesm2022/firestitch-report-firestitch-report-DbsWbE-j.mjs.map +1 -0
- package/fesm2022/firestitch-report.mjs +1 -1
- package/package.json +1 -1
- package/public_api.d.ts +9 -0
- package/fesm2022/firestitch-report-echarts-Djtmaxj1.mjs.map +0 -1
- package/fesm2022/firestitch-report-firestitch-report-D3zseBZc.mjs.map +0 -1
|
@@ -108,9 +108,8 @@ export class ReportComponent {
|
|
|
108
108
|
toggleMasterMode() {
|
|
109
109
|
this._canvas?.toggleMasterMode();
|
|
110
110
|
}
|
|
111
|
-
// Report settings — name, page size
|
|
112
|
-
//
|
|
113
|
-
// whole canvas).
|
|
111
|
+
// Report settings — name, page size. The picker list and structure both
|
|
112
|
+
// reload on save (a page resize re-renders the whole canvas).
|
|
114
113
|
reportSettings() {
|
|
115
114
|
if (!this.report()) {
|
|
116
115
|
return;
|
|
@@ -416,4 +415,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
416
415
|
type: ViewChild,
|
|
417
416
|
args: [ReportCanvasComponent]
|
|
418
417
|
}] } });
|
|
419
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwb3J0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvcmVwb3J0cy92aWV3cy9yZXBvcnQvcmVwb3J0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvcmVwb3J0cy92aWV3cy9yZXBvcnQvcmVwb3J0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxzQkFBc0IsRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQzFELFVBQVUsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsTUFBTSxHQUMxRCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFN0MsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDakQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBRXZELE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQzNFLE9BQU8sRUFBZ0IsY0FBYyxFQUFxQixNQUFNLG9CQUFvQixDQUFDO0FBQ3JGLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNoRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDaEQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRTlDLE9BQU8sRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRWhFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDRCQUE0QixDQUFD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LG0zQ0Q1RUYsV0FBVyw4VkFDWCx5QkFBeUIsMC9CQUN6QixjQUFjLGtLQUNkLFlBQVksa1NBQ1osaUJBQWlCLGtMQUNqQixTQUFTLGlMQUNULE9BQU8sMklBQ1AsVUFBVSxpUkFDVixxQkFBcUI7OzRGQUdaLGVBQWU7a0JBOUIzQixTQUFTO3NDQUdTLHVCQUF1QixDQUFDLE1BQU0sY0FDbkMsSUFBSSxXQUNQLENBQUMsc0JBQXNCLENBQUMsYUFDdEI7d0JBQ1QsMkVBQTJFO3dCQUMzRSx1RUFBdUU7d0JBQ3ZFLHdCQUF3Qjt3QkFDeEIsNEJBQTRCO3dCQUM1QixpQkFBaUI7d0JBQ2pCLGdCQUFnQjt3QkFDaEIsbUJBQW1CO3dCQUNuQiwwRUFBMEU7d0JBQzFFLHNCQUFzQjt3QkFDdEIsa0JBQWtCLENBQUMsRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLHFCQUFxQixDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztxQkFDdEcsV0FDUTt3QkFDUCxXQUFXO3dCQUNYLHlCQUF5Qjt3QkFDekIsY0FBYzt3QkFDZCxZQUFZO3dCQUNaLGlCQUFpQjt3QkFDakIsU0FBUzt3QkFDVCxPQUFPO3dCQUNQLFVBQVU7d0JBQ1YscUJBQXFCO3FCQUN0Qjt3REFpQk8sTUFBTTtzQkFEYixTQUFTO3VCQUFDLE9BQU8sRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBSTVCLFVBQVU7c0JBRGpCLFNBQVM7dUJBQUMsV0FBVyxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFO2dCQU1sRCxPQUFPO3NCQURkLFNBQVM7dUJBQUMscUJBQXFCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ1VTVE9NX0VMRU1FTlRTX1NDSEVNQSwgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCxcbiAgRGVzdHJveVJlZiwgRWxlbWVudFJlZiwgTmdab25lLCBWaWV3Q2hpbGQsIGluamVjdCwgc2lnbmFsLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG5pbXBvcnQgeyBNYXRCdXR0b24gfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9idXR0b24nO1xuaW1wb3J0IHsgTWF0RGlhbG9nIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcbmltcG9ydCB7IE1hdEljb24gfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pY29uJztcbmltcG9ydCB7IE1hdFRvb2x0aXAgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90b29sdGlwJztcblxuaW1wb3J0IHsgRnNBdXRvY29tcGxldGVDaGlwc01vZHVsZSB9IGZyb20gJ0BmaXJlc3RpdGNoL2F1dG9jb21wbGV0ZS1jaGlwcyc7XG5pbXBvcnQgeyBGaWx0ZXJDb25maWcsIEZzRmlsdGVyTW9kdWxlLCBJRmlsdGVyQ29uZmlnSXRlbSB9IGZyb20gJ0BmaXJlc3RpdGNoL2ZpbHRlcic7XG5pbXBvcnQgeyBGc01lbnVNb2R1bGUgfSBmcm9tICdAZmlyZXN0aXRjaC9tZW51JztcbmltcG9ydCB7IEZzUHJvY2VzcyB9IGZyb20gJ0BmaXJlc3RpdGNoL3Byb2Nlc3MnO1xuaW1wb3J0IHsgRnNQcm9tcHQgfSBmcm9tICdAZmlyZXN0aXRjaC9wcm9tcHQnO1xuXG5pbXBvcnQgeyBmaW5hbGl6ZSwgc3dpdGNoTWFwLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IHRha2VVbnRpbERlc3Ryb3llZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7IHByb3ZpZGVFY2hhcnRzQ29yZSB9IGZyb20gJ25neC1lY2hhcnRzJztcblxuaW1wb3J0IHsgRnNBaUNoYXRDb21wb25lbnQsIEZzQWlDaGF0UmVzcG9uc2UgfSBmcm9tICdAZmlyZXN0aXRjaC9haSc7XG5cbmltcG9ydCB7IFJlcG9ydENhbnZhc0NvbXBvbmVudCB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvcmVwb3J0LWNhbnZhcy9yZXBvcnQtY2FudmFzLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBSZXBvcnREYXRhIH0gZnJvbSAnLi4vLi4vZGF0YS9yZXBvcnQuZGF0YSc7XG5pbXBvcnQgeyBDb21wb25lbnRTZXR0aW5nc0NvbXBvbmVudCwgQ29tcG9uZW50U2V0dGluZ3NSZXN1bHQgfSBmcm9tICcuLi8uLi9kaWFsb2dzL2NvbXBvbmVudC1zZXR0aW5ncy9jb21wb25lbnQtc2V0dGluZ3MuY29tcG9uZW50JztcbmltcG9ydCB7IFJlcG9ydFNldHRpbmdzQ29tcG9uZW50LCBSZXBvcnRTZXR0aW5nc1Jlc3VsdCB9IGZyb20gJy4uLy4uL2RpYWxvZ3MvcmVwb3J0LXNldHRpbmdzL3JlcG9ydC1zZXR0aW5ncy5jb21wb25lbnQnO1xuaW1wb3J0IHsgUmVwb3J0RXhwb3J0Q29sbGVjdG9yU2VydmljZSB9IGZyb20gJy4uLy4uL2V4cG9ydC9yZXBvcnQtZXhwb3J0LWNvbGxlY3Rvci5zZXJ2aWNlJztcbmltcG9ydCB7IFJlcG9ydEV4cG9ydFNlcnZpY2UgfSBmcm9tICcuLi8uLi9leHBvcnQvcmVwb3J0LWV4cG9ydC5zZXJ2aWNlJztcbmltcG9ydCB7IFJlcG9ydFBkZlNlcnZpY2UgfSBmcm9tICcuLi8uLi9leHBvcnQvcmVwb3J0LXBkZi5zZXJ2aWNlJztcbmltcG9ydCB7IFJlcG9ydFBwdHhTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vZXhwb3J0L3JlcG9ydC1wcHR4LnNlcnZpY2UnO1xuaW1wb3J0IHtcbiAgQ2hhcnRHcmFudWxhcml0eSwgUmVwb3J0LFxuICBSZXBvcnRDb21wb25lbnQgYXMgUmVwb3J0Q29tcG9uZW50TW9kZWwsIFJlcG9ydEZpbHRlckdyb3VwLCBSZXBvcnRMaXN0SXRlbSxcbn0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9yZXBvcnQuaW50ZXJmYWNlJztcbmltcG9ydCB7XG4gIEdST1VQX0JZX0lURU0sIGZpbHRlckl0ZW1Gb3JHcm91cCwgZ3JvdXBCeUZpbHRlckl0ZW0sIGdyb3VwQnlTaWduYXR1cmUsIGdyb3VwVmFsdWVzRnJvbVF1ZXJ5LFxuICBpc0dyYW51bGFyaXR5T2ZmZXJlZCxcbn0gZnJvbSAnLi4vLi4vcmVwb3J0LWZpbHRlci1pdGVtcyc7XG5pbXBvcnQgeyBSZXBvcnRGaWx0ZXJTdGF0ZVNlcnZpY2UsIGRlZmF1bHRTaWduYXR1cmUgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9yZXBvcnQtZmlsdGVyLXN0YXRlLnNlcnZpY2UnO1xuaW1wb3J0IHsgUmVwb3J0U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3JlcG9ydC5zZXJ2aWNlJztcblxuXG4vLyBUaGUgUmVwb3J0cyBwYWdlOiBBSSBjaGF0IG9uIHRoZSBsZWZ0LCB0aGUgcmVwb3J0IGNhbnZhcyBvbiB0aGUgcmlnaHQg4oCUXG4vLyBhIHNwbGl0LXBhbmUgbGF5b3V0OyB0aGUgdmlld2VyIGlzIG91ciBvd24gY2FudmFzIChubyBpZnJhbWUsIG5vIGVtYmVkIFVSTHMpLlxuLy8gVGhlIGNoYXQgaXMgYWx3YXlzIHNjb3BlZCB0byB0aGUgc2VsZWN0ZWQgcmVwb3J0OyBpdHMgaWQgcmlkZXMgb24gZXZlcnlcbi8vIHR1cm4gdmlhIFtyZXF1ZXN0RGF0YV0uXG5AQ29tcG9uZW50KHtcbiAgdGVtcGxhdGVVcmw6ICcuL3JlcG9ydC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3JlcG9ydC5jb21wb25lbnQuc2NzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgc2NoZW1hczogW0NVU1RPTV9FTEVNRU5UU19TQ0hFTUFdLFxuICBwcm92aWRlcnM6IFtcbiAgICAvLyBTZXNzaW9uIGZpbHRlciBzdGF0ZSBpcyBwZXItb3Blbi1yZXBvcnQtcGFnZSwgbm90IGFwcC1nbG9iYWw7IHRoZSBleHBvcnRcbiAgICAvLyBzZXJ2aWNlcyByZXNvbHZlIGZpbHRlcnMgdGhyb3VnaCBpdCwgc28gdGhleSBsaXZlIGF0IHRoZSBzYW1lIGxldmVsLlxuICAgIFJlcG9ydEZpbHRlclN0YXRlU2VydmljZSxcbiAgICBSZXBvcnRFeHBvcnRDb2xsZWN0b3JTZXJ2aWNlLFxuICAgIFJlcG9ydFBwdHhTZXJ2aWNlLFxuICAgIFJlcG9ydFBkZlNlcnZpY2UsXG4gICAgUmVwb3J0RXhwb3J0U2VydmljZSxcbiAgICAvLyBUcmVlLXNoYWtlbiBFQ2hhcnRzIGNvcmUgKyB0aGUgJ3JlcG9ydCcgaG91c2UgdGhlbWUsIGxvYWRlZCBsYXppbHkgd2l0aFxuICAgIC8vIHRoaXMgcm91dGUncyBjaHVuay5cbiAgICBwcm92aWRlRWNoYXJ0c0NvcmUoeyBlY2hhcnRzOiAoKSA9PiBpbXBvcnQoJy4uLy4uL3RoZW1lL2VjaGFydHMnKS50aGVuKChtb2R1bGUpID0+IG1vZHVsZS5kZWZhdWx0KSB9KSxcbiAgXSxcbiAgaW1wb3J0czogW1xuICAgIEZvcm1zTW9kdWxlLFxuICAgIEZzQXV0b2NvbXBsZXRlQ2hpcHNNb2R1bGUsXG4gICAgRnNGaWx0ZXJNb2R1bGUsXG4gICAgRnNNZW51TW9kdWxlLFxuICAgIEZzQWlDaGF0Q29tcG9uZW50LFxuICAgIE1hdEJ1dHRvbixcbiAgICBNYXRJY29uLFxuICAgIE1hdFRvb2x0aXAsXG4gICAgUmVwb3J0Q2FudmFzQ29tcG9uZW50LFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBSZXBvcnRDb21wb25lbnQge1xuXG4gIC8vIFRoZSBzaW5nbGUgcmVwb3J0IHRoZSB2aWV3ZXIgYW5kIGNoYXQgYXJlIGZvY3VzZWQgb24uXG4gIHB1YmxpYyByZWFkb25seSBzZWxlY3RlZCA9IHNpZ25hbDxSZXBvcnRMaXN0SXRlbSB8IG51bGw+KG51bGwpO1xuICBwdWJsaWMgcmVhZG9ubHkgcmVwb3J0ID0gc2lnbmFsPFJlcG9ydCB8IG51bGw+KG51bGwpO1xuICBwdWJsaWMgcmVhZG9ubHkgbG9hZGluZ1JlcG9ydHMgPSBzaWduYWwodHJ1ZSk7XG4gIHB1YmxpYyByZWFkb25seSBlZGl0TW9kZSA9IHNpZ25hbChmYWxzZSk7XG5cbiAgLy8gVGhlIHJlcG9ydCB0b29sYmFyIElTIGFuIGZzLWZpbHRlcjogdGhlIHBpY2tlciByaWRlcyBpbiBpdHMgaGVhZGluZ1xuICAvLyB0ZW1wbGF0ZSwgdGhlIG1lbnUgYmVjb21lcyBpdHMgYWN0aW9ucywgYW5kIHJlcG9ydC1sZXZlbCBmaWx0ZXIgZ3JvdXBzXG4gIC8vIGJlY29tZSBpdHMgaXRlbXMuIFJlYnVpbHQgd2hlbmV2ZXIgdGhlIGxvYWRlZCByZXBvcnQgKGFuZCB0aHVzIGl0cyBncm91cHMpXG4gIC8vIGNoYW5nZXM7IHRoZSBtZW51J3Mgc2hvdy1ndWFyZHMga2VlcCB3b3JraW5nIHdoaWxlIG5vIHJlcG9ydCBpcyBzZWxlY3RlZC5cbiAgcHVibGljIHJlYWRvbmx5IHJlcG9ydEZpbHRlckNvbmZpZyA9IHNpZ25hbDxGaWx0ZXJDb25maWcgfCBudWxsPihudWxsKTtcblxuICBAVmlld0NoaWxkKCdzcGxpdCcsIHsgc3RhdGljOiB0cnVlIH0pXG4gIHByaXZhdGUgX3NwbGl0ITogRWxlbWVudFJlZjxIVE1MRGl2RWxlbWVudD47XG5cbiAgQFZpZXdDaGlsZCgnY2hhdFBhbmVsJywgeyBzdGF0aWM6IHRydWUsIHJlYWQ6IEVsZW1lbnRSZWYgfSlcbiAgcHJpdmF0ZSBfY2hhdFBhbmVsITogRWxlbWVudFJlZjxIVE1MRWxlbWVudD47XG5cbiAgLy8gT25seSB0aGUgY2FudmFzIGtub3dzIHdoaWNoIHBhZ2UgaXMgb24gc2NyZWVuLCBhbmQgYSBwYWdlLXNjb3BlZCBleHBvcnRcbiAgLy8gaGFzIHRvIGFzayBpdC5cbiAgQFZpZXdDaGlsZChSZXBvcnRDYW52YXNDb21wb25lbnQpXG4gIHByaXZhdGUgX2NhbnZhcz86IFJlcG9ydENhbnZhc0NvbXBvbmVudDtcblxuICBwdWJsaWMgcmVhZG9ubHkgaW50cm9NZXNzYWdlID0ge1xuICAgIHRleHQ6ICcnLFxuICB9O1xuXG4gIHByaXZhdGUgX3JlcG9ydERhdGEgPSBpbmplY3QoUmVwb3J0RGF0YSk7XG4gIHByaXZhdGUgX3JlcG9ydFNlcnZpY2UgPSBpbmplY3QoUmVwb3J0U2VydmljZSk7XG4gIHByaXZhdGUgX2ZpbHRlclN0YXRlID0gaW5qZWN0KFJlcG9ydEZpbHRlclN0YXRlU2VydmljZSk7XG4gIHByaXZhdGUgX2V4cG9ydFNlcnZpY2UgPSBpbmplY3QoUmVwb3J0RXhwb3J0U2VydmljZSk7XG4gIHByaXZhdGUgX2NvbGxlY3RvciA9IGluamVjdChSZXBvcnRFeHBvcnRDb2xsZWN0b3JTZXJ2aWNlKTtcbiAgcHJpdmF0ZSBfcHJvY2VzcyA9IGluamVjdChGc1Byb2Nlc3MpO1xuICBwcml2YXRlIF9wcm9tcHQgPSBpbmplY3QoRnNQcm9tcHQpO1xuICBwcml2YXRlIF9kaWFsb2cgPSBpbmplY3QoTWF0RGlhbG9nKTtcbiAgcHJpdmF0ZSBfZGVzdHJveVJlZiA9IGluamVjdChEZXN0cm95UmVmKTtcbiAgcHJpdmF0ZSBfem9uZSA9IGluamVjdChOZ1pvbmUpO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuX2J1aWxkUmVwb3J0Q29uZmlnKCk7XG5cbiAgICB0aGlzLl9yZXBvcnRTZXJ2aWNlLmxvYWQoKVxuICAgICAgLnBpcGUoXG4gICAgICAgIGZpbmFsaXplKCgpID0+IHtcbiAgICAgICAgICB0aGlzLmxvYWRpbmdSZXBvcnRzLnNldChmYWxzZSk7XG4gICAgICAgIH0pLFxuICAgICAgICB0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5fZGVzdHJveVJlZiksXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKHsgZXJyb3I6ICgpID0+IHVuZGVmaW5lZCB9KTtcbiAgfVxuXG4gIHB1YmxpYyBmZXRjaFJlcG9ydHMgPSAoa2V5d29yZDogc3RyaW5nKSA9PiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlcG9ydFNlcnZpY2UuZmlsdGVyKGtleXdvcmQpO1xuICB9O1xuXG4gIHB1YmxpYyByZXBvcnRDaGFuZ2UocmVwb3J0OiBSZXBvcnRMaXN0SXRlbSB8IG51bGwpOiB2b2lkIHtcbiAgICB0aGlzLnJlcG9ydC5zZXQobnVsbCk7XG4gICAgdGhpcy5lZGl0TW9kZS5zZXQoZmFsc2UpO1xuICAgIHRoaXMuX2J1aWxkUmVwb3J0Q29uZmlnKCk7XG5cbiAgICBpZiAocmVwb3J0KSB7XG4gICAgICB0aGlzLl9sb2FkUmVwb3J0KHJlcG9ydC5pZCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGNyZWF0ZVJlcG9ydCgpOiB2b2lkIHtcbiAgICB0aGlzLl9wcm9tcHQuaW5wdXQoe1xuICAgICAgdGl0bGU6ICdDcmVhdGUgUmVwb3J0JyxcbiAgICAgIGxhYmVsOiAnTmFtZScsXG4gICAgICBjb21taXRMYWJlbDogJ0NyZWF0ZScsXG4gICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICB9KVxuICAgICAgLnBpcGUoXG4gICAgICAgIHN3aXRjaE1hcCgobmFtZTogc3RyaW5nKSA9PiB0aGlzLl9yZXBvcnRTZXJ2aWNlLmNyZWF0ZShuYW1lKSksXG4gICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLl9kZXN0cm95UmVmKSxcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKHJlcG9ydDogUmVwb3J0TGlzdEl0ZW0pID0+IHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZC5zZXQocmVwb3J0KTtcbiAgICAgICAgdGhpcy5fbG9hZFJlcG9ydChyZXBvcnQuaWQpO1xuICAgICAgfSk7XG4gIH1cblxuICBwdWJsaWMgdG9nZ2xlRWRpdE1vZGUoKTogdm9pZCB7XG4gICAgdGhpcy5lZGl0TW9kZS51cGRhdGUoKGVkaXRNb2RlKSA9PiAhZWRpdE1vZGUpO1xuICB9XG5cbiAgLy8gVGhlIGVkaXQgdG9vbHMgbGl2ZSBpbiB0aGlzIHRvb2xiYXIsIGJ1dCB0aGUgY2FudmFzIG93bnMgd2hhdCB0aGV5IGFjdCBvblxuICAvLyAodGhlIGFjdGl2ZSBwYWdlLCB0aGUgaGVhZGVyL2Zvb3RlciBiYW5kcywgd2hpY2ggbGF5ZXIgaXMgbGl2ZSkuXG4gIHB1YmxpYyBnZXQgaXNNYXN0ZXJNb2RlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9jYW52YXM/Lm1hc3Rlck1vZGUoKSA/PyBmYWxzZTtcbiAgfVxuXG4gIHB1YmxpYyBhZGRUZXh0KCk6IHZvaWQge1xuICAgIHRoaXMuX2NhbnZhcz8uYWRkVGV4dCgpO1xuICB9XG5cbiAgcHVibGljIHRvZ2dsZU1hc3Rlck1vZGUoKTogdm9pZCB7XG4gICAgdGhpcy5fY2FudmFzPy50b2dnbGVNYXN0ZXJNb2RlKCk7XG4gIH1cblxuICAvLyBSZXBvcnQgc2V0dGluZ3Mg4oCUIG5hbWUsIHBhZ2Ugc2l6ZSwgb3JpZW50YXRpb24sIGxheW91dCBtb2RlLiBUaGUgcGlja2VyXG4gIC8vIGxpc3QgYW5kIHN0cnVjdHVyZSBib3RoIHJlbG9hZCBvbiBzYXZlIChhIGxheW91dCBzd2l0Y2ggcmUtcmVuZGVycyB0aGVcbiAgLy8gd2hvbGUgY2FudmFzKS5cbiAgcHVibGljIHJlcG9ydFNldHRpbmdzKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5yZXBvcnQoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2RpYWxvZy5vcGVuPFJlcG9ydFNldHRpbmdzQ29tcG9uZW50LCB1bmtub3duLCBSZXBvcnRTZXR0aW5nc1Jlc3VsdD4oUmVwb3J0U2V0dGluZ3NDb21wb25lbnQsIHtcbiAgICAgIGRhdGE6IHsgcmVwb3J0OiB0aGlzLnJlcG9ydCgpIH0sXG4gICAgICB3aWR0aDogJzQ2MHB4JyxcbiAgICB9KVxuICAgICAgLmFmdGVyQ2xvc2VkKClcbiAgICAgIC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLl9kZXN0cm95UmVmKSlcbiAgICAgIC5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xuICAgICAgICAvLyBUaGUgZGlhbG9nIGNvbmZpcm1zICsgcGVyZm9ybXMgdGhlIGRlbGV0ZSBpdHNlbGY7IHdlIGp1c3QgcmVhY3QgdG9cbiAgICAgICAgLy8gd2hhdCBpdCByZXBvcnRzIGJhY2suXG4gICAgICAgIGlmIChyZXN1bHQ/LmFjdGlvbiA9PT0gJ2RlbGV0ZWQnKSB7XG4gICAgICAgICAgdGhpcy5zZWxlY3RlZC5zZXQobnVsbCk7XG4gICAgICAgICAgdGhpcy5yZXBvcnQuc2V0KG51bGwpO1xuICAgICAgICAgIHRoaXMuX2J1aWxkUmVwb3J0Q29uZmlnKCk7XG5cbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocmVzdWx0Py5hY3Rpb24gPT09ICdzYXZlZCcgJiYgdGhpcy5zZWxlY3RlZCgpKSB7XG4gICAgICAgICAgdGhpcy5fbG9hZFJlcG9ydCh0aGlzLnNlbGVjdGVkKCkuaWQpO1xuICAgICAgICAgIHRoaXMuX3JlZnJlc2hSZXBvcnROYW1lKHRoaXMuc2VsZWN0ZWQoKS5pZCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICB9XG5cbiAgLy8gQ29tcG9uZW50IHNldHRpbmdzIOKAlCB0aXRsZSwgZXhhY3QgZ2VvbWV0cnksIGFuZCB0aGUgZGlhZ25vc3RpYyB2aWV3c1xuICAvLyAoU1FMLCBjb25maWcsIGZpbHRlciB3aXJpbmcpLlxuICBwdWJsaWMgY29tcG9uZW50U2V0dGluZ3MoY29tcG9uZW50OiBSZXBvcnRDb21wb25lbnRNb2RlbCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5yZXBvcnQoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGRpYWxvZ1JlZiA9IHRoaXMuX2RpYWxvZy5vcGVuPENvbXBvbmVudFNldHRpbmdzQ29tcG9uZW50LCB1bmtub3duLCBDb21wb25lbnRTZXR0aW5nc1Jlc3VsdD4oXG4gICAgICBDb21wb25lbnRTZXR0aW5nc0NvbXBvbmVudCxcbiAgICAgIHtcbiAgICAgICAgZGF0YTogeyByZXBvcnQ6IHRoaXMucmVwb3J0KCksIGNvbXBvbmVudCB9LFxuICAgICAgICB3aWR0aDogJzY0MHB4JyxcbiAgICAgIH0sXG4gICAgKTtcblxuICAgIC8vIEZpbHRlciBhZGQvcmVtb3ZlL2xldmVsIGNoYW5nZXMgcGVyc2lzdCBpbW1lZGlhdGVseSBpbnNpZGUgdGhlIGRpYWxvZyAobm9cbiAgICAvLyBcInNhdmVcIikgYW5kIGNhbiBsZWF2ZSBpdCBieSBhbiBleGl0IHRoYXQgY2FycmllcyBubyByZXN1bHQsIHNvIHRoZXkgYXJlXG4gICAgLy8gYW5ub3VuY2VkIGFzIHRoZXkgbGFuZC4gVGhlIHJlbG9hZCB3YWl0cyBmb3IgdGhlIGNsb3NlIHNvIHRoZSBjYW52YXMgaXNuJ3RcbiAgICAvLyByZS1yZW5kZXJpbmcgdW5kZXJuZWF0aCBhbiBvcGVuIGRpYWxvZy5cbiAgICBsZXQgZmlsdGVyc0NoYW5nZWQgPSBmYWxzZTtcbiAgICBkaWFsb2dSZWYuY29tcG9uZW50SW5zdGFuY2UuZmlsdGVyc0NoYW5nZWRcbiAgICAgIC5waXBlKHRha2VVbnRpbChkaWFsb2dSZWYuYWZ0ZXJDbG9zZWQoKSkpXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IGZpbHRlcnNDaGFuZ2VkID0gdHJ1ZSk7XG5cbiAgICBkaWFsb2dSZWYuYWZ0ZXJDbG9zZWQoKVxuICAgICAgLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKHRoaXMuX2Rlc3Ryb3lSZWYpKVxuICAgICAgLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XG4gICAgICAgIC8vIFRoZSBkaWFsb2cgY29uZmlybXMgKyBwZXJmb3JtcyB0aGUgZGVsZXRlIGl0c2VsZi4gVGhlIGNvbXBvbmVudCBpc1xuICAgICAgICAvLyBnb25lIGZyb20gdGhlIHJlcG9ydCwgc28gcmVsb2FkIHJhdGhlciB0aGFuIHBhdGNoaW5nIGl0IG91dCBsb2NhbGx5IOKAlFxuICAgICAgICAvLyBpdHMgZmlsdGVycyB3ZW50IHdpdGggaXQsIHdoaWNoIHRoZSByZXBvcnQgYmFyIGhhcyB0byBiZSByZWJ1aWx0IGZvci5cbiAgICAgICAgaWYgKHJlc3VsdD8uZGVsZXRlZCkge1xuICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGVkKCkpIHtcbiAgICAgICAgICAgIHRoaXMuX2xvYWRSZXBvcnQodGhpcy5zZWxlY3RlZCgpLmlkKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBUaGUgcmVwb3J0J3MgZmlsdGVyIGdyb3VwcyBjaGFuZ2VkLCBzbyB0aGUgcmVwb3J0IGJhciBhbmQgdGhlXG4gICAgICAgIC8vIG9uLWNvbXBvbmVudCBzdHJpcHMgaGF2ZSB0byBiZSByZWJ1aWx0IGZyb20gYSBmcmVzaCByZXBvcnQuXG4gICAgICAgIGlmIChmaWx0ZXJzQ2hhbmdlZCkge1xuICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGVkKCkpIHtcbiAgICAgICAgICAgIHRoaXMuX2xvYWRSZXBvcnQodGhpcy5zZWxlY3RlZCgpLmlkKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBOb3RoaW5nIGVsc2UgaW4gdGhlIGRpYWxvZyB0b3VjaGVzIHRoZSBxdWVyeSDigJQgdGl0bGUgYW5kIHBhZGRpbmcgYXJlXG4gICAgICAgIC8vIHByZXNlbnRhdGlvbi4gUmVwYWludCB0aGUgb25lIGNvbXBvbmVudCBpdCB3YXMgb3BlbmVkIGZvciBhbmQgbGVhdmVcbiAgICAgICAgLy8gZXZlcnkgb3RoZXIgY29tcG9uZW50J3MgZGF0YSwgYW5kIGl0cyBxdWVyeSwgYWxvbmUuXG4gICAgICAgIGlmIChyZXN1bHQ/LnNldHRpbmdzKSB7XG4gICAgICAgICAgdGhpcy5fY2FudmFzPy5hcHBseUNvbXBvbmVudFNldHRpbmdzKGNvbXBvbmVudC5pZCwgcmVzdWx0LnNldHRpbmdzKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH1cblxuICAvLyBUaGUgY2FudmFzIGNoYW5nZWQgdGhlIHJlcG9ydCdzIHN0cnVjdHVyZSAoYWRkZWQgYSBwYWdlKSDigJQgcmUtZmV0Y2ggc28gdGhlXG4gIC8vIG5ldyBwYWdlIHJlbmRlcnM7IHRoZSBjYW52YXMgbGFuZHMgdGhlIHZpZXcgb24gaXQuXG4gIHB1YmxpYyBvbkNhbnZhc1JlcG9ydENoYW5nZWQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuc2VsZWN0ZWQoKSkge1xuICAgICAgdGhpcy5fbG9hZFJlcG9ydCh0aGlzLnNlbGVjdGVkKCkuaWQpO1xuICAgIH1cbiAgfVxuXG4gIC8vIEV4cG9ydCB0aGUgcmVwb3J0IHRvIFBvd2VyUG9pbnQsIGVudGlyZWx5IGNsaWVudC1zaWRlOiBldmVyeSBjb21wb25lbnQnc1xuICAvLyBkYXRhIGlzIGZldGNoZWQgZnJlc2ggd2l0aCB0aGUgY3VycmVudCBmaWx0ZXIgc3RhdGUgKGFsbCBwYWdlcywgbm90IGp1c3RcbiAgLy8gdGhlIHZpc2libGUgb25lKSwgdGhlbiBwcHR4Z2VuanMgYnVpbGRzIGEgZGVjayBvZiBOQVRJVkUgZWRpdGFibGUgY2hhcnRzIOKAlFxuICAvLyBwYWdlID0gc2xpZGUsIHBvc2l0aW9ucyAxOjEuIFRoZSBkb2NrIHNob3dzIHByb2dyZXNzIHVudGlsIHRoZSBmaWxlIHNhdmVzLlxuICBwdWJsaWMgZXhwb3J0UG93ZXJwb2ludCgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMucmVwb3J0KCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9wcm9jZXNzLnJ1bihcbiAgICAgICdFeHBvcnRpbmcgUG93ZXJQb2ludCcsXG4gICAgICB0aGlzLl9leHBvcnRTZXJ2aWNlLnBvd2VycG9pbnQodGhpcy5yZXBvcnQoKSksXG4gICAgKTtcbiAgfVxuXG4gIC8vIEV4cG9ydCB0byBQREYsIGVudGlyZWx5IGNsaWVudC1zaWRlOiBzYW1lIGNvbGxlY3Rpb24gcGFzcywgY2hhcnRzIHJlbmRlcmVkXG4gIC8vIHRocm91Z2ggYW4gb2Zmc2NyZWVuIEVDaGFydHMgaW5zdGFuY2UgYXQgM8OXIHBpeGVsIHJhdGlvIChwaXhlbC1pZGVudGljYWxcbiAgLy8gdG8gdGhlIHNjcmVlbiksIHRhYmxlcyB2aWEganNwZGYtYXV0b3RhYmxlIOKAlCBwYWdlID0gUERGIHBhZ2UuXG4gIHB1YmxpYyBleHBvcnRQZGYoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnJlcG9ydCgpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fcHJvY2Vzcy5ydW4oXG4gICAgICAnRXhwb3J0aW5nIFBERicsXG4gICAgICB0aGlzLl9leHBvcnRTZXJ2aWNlLnBkZih0aGlzLnJlcG9ydCgpKSxcbiAgICApO1xuICB9XG5cbiAgLy8gVGhlIHdob2xlIHJlcG9ydCBhcyBmaWxlcyBpbiBvbmUgYWN0aW9uOiB0aGUgc2VydmVyIHdyaXRlcyBvbmUgQ1NWIHBlclxuICAvLyBjb21wb25lbnQsIGVhY2ggd2hhdCB0aGUgc2NyZWVuIHNob3dzIChhIGNoYXJ0IG9yIEtQSSBhcyBkcmF3biwgYXQgdGhlXG4gIC8vIHZpZXdlcidzIGdyb3VwLWJ5IGdyYWluOyBhIGxpc3QgaW4gZnVsbCksIGFuZCB6aXBzIHRoZW0gZm9sZGVyZWQgYnkgcGFnZVxuICAvLyB3aXRoIGFuIEV4cG9ydCBOb3Rlcy50eHQgdGhhdCByZWNvcmRzIHRoZSBmaWx0ZXJzIGFzIHRoZSBiYXIgcmVhZHMgdGhlbS5cbiAgLy8gTGlzdHMgdXNlIHRoZWlyIHNhdmVkIGRlZmF1bHQgc29ydDsgYSBoZWFkZXIgY2xpY2sgaXMgY2FycmllZCBvbmx5IGJ5IGFcbiAgLy8gY29tcG9uZW50J3Mgb3duIENTViBleHBvcnQuIGB0aGlzUGFnZWAgbmFycm93cyBpdCB0byB0aGUgcGFnZSB0aGUgY2FudmFzIGlzXG4gIC8vIHNob3dpbmcuIFVubGlrZSB0aGUgUERGL1Bvd2VyUG9pbnQgZXhwb3J0cyB0aGUgZmlsZXMgYXJlIHdyaXR0ZW5cbiAgLy8gc2VydmVyLXNpZGUsIHNvIHRoZXkgYXJlIG5vdCBjYXBwZWQgYnkgd2hhdCBhIHNsaWRlIGNhbiBob2xkLlxuICBwdWJsaWMgZXhwb3J0RGF0YSh0aGlzUGFnZSA9IGZhbHNlKTogdm9pZCB7XG4gICAgY29uc3QgcmVwb3J0ID0gdGhpcy5yZXBvcnQoKTtcbiAgICBpZiAoIXJlcG9ydCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHBhZ2VJZCA9IHRoaXNQYWdlID8gdGhpcy5fY2FudmFzPy5hY3RpdmVQYWdlPy5pZCA/PyBudWxsIDogbnVsbDtcbiAgICBjb25zdCBmaWx0ZXJzID0gdGhpcy5fZmlsdGVyU3RhdGUucmVzb2x2ZUZvclJlcG9ydChyZXBvcnQsIHBhZ2VJZCk7XG4gICAgY29uc3QgZnJlcXVlbmN5ID0gdGhpcy5fZmlsdGVyU3RhdGUuZnJlcXVlbmN5KCk7XG5cbiAgICB0aGlzLl9wcm9jZXNzLmRvd25sb2FkKFxuICAgICAgJ0V4cG9ydGluZyBkYXRhJyxcbiAgICAgIHRoaXMuX2NvbGxlY3Rvci5nZXRGaWx0ZXJTdW1tYXJ5KHJlcG9ydClcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgc3dpdGNoTWFwKChsaW5lcykgPT4gdGhpcy5fcmVwb3J0RGF0YS5leHBvcnRSZXBvcnQoXG4gICAgICAgICAgICByZXBvcnQuaWQsXG4gICAgICAgICAgICBmaWx0ZXJzLFxuICAgICAgICAgICAgcGFnZUlkLFxuICAgICAgICAgICAgZnJlcXVlbmN5LFxuICAgICAgICAgICAgbGluZXMsXG4gICAgICAgICAgKSksXG4gICAgICAgICksXG4gICAgKTtcbiAgfVxuXG4gIC8vIFJlYWN0IHRvIGVhY2ggY2hhdCB0dXJuIChmcy1jaGF0IGhhbmRsZXMgdGhlIHJlcXVlc3QgKyBwZXJzaXN0ZW5jZSk7IHdlXG4gIC8vIG9ubHkgY2FyZSBhYm91dCB0aGUgcmVwb3J0IHNpZGUgZWZmZWN0cyB0aGlzIGNvbnRleHQncyBiYWNrZW5kIGZsYWdzLlxuICBwdWJsaWMgb25DaGF0UmVzcG9uc2UocmVzcG9uc2U6IEZzQWlDaGF0UmVzcG9uc2UpOiB2b2lkIHtcbiAgICAvLyBUaGUgYWdlbnQgY2hhbmdlZCB0aGUgcmVwb3J0J3Mgc3RydWN0dXJlIOKAlCByZS1mZXRjaCBpdC4gU2Vzc2lvbiBmaWx0ZXJcbiAgICAvLyB2YWx1ZXMgc3Vydml2ZSAodGhlIGZpbHRlci1zdGF0ZSBzZXJ2aWNlIGtlZXBzIHZhbHVlcyBmb3IgZ3JvdXBzIHRoYXRcbiAgICAvLyBzdGlsbCBleGlzdCkuXG4gICAgaWYgKHJlc3BvbnNlLnJlcG9ydENoYW5nZWQgJiYgdGhpcy5zZWxlY3RlZCgpKSB7XG4gICAgICB0aGlzLl9sb2FkUmVwb3J0KHRoaXMuc2VsZWN0ZWQoKS5pZCk7XG4gICAgfVxuXG4gICAgLy8gQSByZW5hbWUgY2hhbmdlcyBub3RoaW5nIHN0cnVjdHVyYWwg4oCUIHJlZnJlc2ggdGhlIHBpY2tlciBjaGlwIGxhYmVsLlxuICAgIGlmIChyZXNwb25zZS5yZXBvcnRSZW5hbWVkICYmIHRoaXMuc2VsZWN0ZWQoKSkge1xuICAgICAgdGhpcy5fcmVmcmVzaFJlcG9ydE5hbWUodGhpcy5zZWxlY3RlZCgpLmlkKTtcbiAgICB9XG4gIH1cblxuICAvLyBEcmFnIHRoZSBkaXZpZGVyIGJldHdlZW4gdGhlIGNoYXQgYW5kIGNhbnZhcyBwYW5lcyAocG9pbnRlci1jYXB0dXJlIGxvb3BcbiAgLy8gb3V0c2lkZSBBbmd1bGFyKS5cbiAgcHVibGljIG9uUmVzaXplU3RhcnQoZXZlbnQ6IFBvaW50ZXJFdmVudCk6IHZvaWQge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICBjb25zdCBoYW5kbGUgPSBldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQ7XG4gICAgaGFuZGxlLnNldFBvaW50ZXJDYXB0dXJlKGV2ZW50LnBvaW50ZXJJZCk7XG4gICAgdGhpcy5fc3BsaXQubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QuYWRkKCdyZXNpemluZycpO1xuXG4gICAgdGhpcy5fem9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICBjb25zdCBtb3ZlID0gKGU6IFBvaW50ZXJFdmVudCkgPT4gdGhpcy5fcmVzaXplVG8oZS5jbGllbnRYKTtcbiAgICAgIGNvbnN0IGVuZCA9ICgpID0+IHtcbiAgICAgICAgaGFuZGxlLnJlbGVhc2VQb2ludGVyQ2FwdHVyZShldmVudC5wb2ludGVySWQpO1xuICAgICAgICBoYW5kbGUucmVtb3ZlRXZlbnRMaXN0ZW5lcigncG9pbnRlcm1vdmUnLCBtb3ZlKTtcbiAgICAgICAgaGFuZGxlLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3BvaW50ZXJ1cCcsIGVuZCk7XG4gICAgICAgIGhhbmRsZS5yZW1vdmVFdmVudExpc3RlbmVyKCdwb2ludGVyY2FuY2VsJywgZW5kKTtcbiAgICAgICAgdGhpcy5fc3BsaXQubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKCdyZXNpemluZycpO1xuICAgICAgfTtcblxuICAgICAgaGFuZGxlLmFkZEV2ZW50TGlzdGVuZXIoJ3BvaW50ZXJtb3ZlJywgbW92ZSk7XG4gICAgICBoYW5kbGUuYWRkRXZlbnRMaXN0ZW5lcigncG9pbnRlcnVwJywgZW5kKTtcbiAgICAgIGhhbmRsZS5hZGRFdmVudExpc3RlbmVyKCdwb2ludGVyY2FuY2VsJywgZW5kKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgX3Jlc2l6ZVRvKGNsaWVudFg6IG51bWJlcik6IHZvaWQge1xuICAgIGNvbnN0IHJlY3QgPSB0aGlzLl9zcGxpdC5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIGlmIChyZWN0LndpZHRoID09PSAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgcmF0aW8gPSAoY2xpZW50WCAtIHJlY3QubGVmdCkgLyByZWN0LndpZHRoO1xuICAgIGNvbnN0IGNsYW1wZWQgPSBNYXRoLm1pbigwLjgsIE1hdGgubWF4KDAuMiwgcmF0aW8pKTtcbiAgICB0aGlzLl9jaGF0UGFuZWwubmF0aXZlRWxlbWVudC5zdHlsZS5mbGV4QmFzaXMgPSBgJHtjbGFtcGVkICogMTAwfSVgO1xuICB9XG5cbiAgcHJpdmF0ZSBfbG9hZFJlcG9ydChyZXBvcnRJZDogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5fcmVwb3J0RGF0YS5nZXQocmVwb3J0SWQpXG4gICAgICAucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5fZGVzdHJveVJlZikpXG4gICAgICAuc3Vic2NyaWJlKChyZXBvcnQ6IFJlcG9ydCkgPT4ge1xuICAgICAgICB0aGlzLnJlcG9ydC5zZXQocmVwb3J0KTtcbiAgICAgICAgLy8gTm8gVVJMIHN0YXRlIGluIHRoaXMgdmlldzogbm90aGluZyBpcyByZXN0b3JlZCBmcm9tIHRoZSBVUkwgYW5kXG4gICAgICAgIC8vIG5vdGhpbmcgbGlzdGVucyB0byB1cmxDaGFuZ2VzKCksIHNvIGl0cyBmaWx0ZXJzIHN0YXkgc2Vzc2lvbi1vbmx5LlxuICAgICAgICB0aGlzLl9maWx0ZXJTdGF0ZS5pbml0KHJlcG9ydCk7XG4gICAgICAgIHRoaXMuX2J1aWxkUmVwb3J0Q29uZmlnKCk7XG4gICAgICB9KTtcbiAgfVxuXG4gIC8vIFJlcG9ydC1sZXZlbCBmaWx0ZXIgZ3JvdXBzIGluIHRoZWlyIHNhdmVkIG9yZGVyIOKAlCB0aGUgb25lcyB0aGF0IHJlbmRlciBpblxuICAvLyB0aGUgdG9vbGJhciAoY29tcG9uZW50LWxldmVsIGdyb3VwcyByZW5kZXIgb24gdGhlaXIgY29tcG9uZW50cykuXG4gIHByaXZhdGUgX3JlcG9ydEdyb3VwcygpOiBSZXBvcnRGaWx0ZXJHcm91cFtdIHtcbiAgICByZXR1cm4gKHRoaXMucmVwb3J0KCk/LmZpbHRlckdyb3VwcyA/PyBbXSlcbiAgICAgIC5maWx0ZXIoKGdyb3VwKSA9PiBncm91cC5sZXZlbCA9PT0gJ3JlcG9ydCcgfHwgZ3JvdXAubGV2ZWwgPT09ICdib3RoJylcbiAgICAgIC5zb3J0KChhLCBiKSA9PiBhLm9yZGVyIC0gYi5vcmRlcik7XG4gIH1cblxuICAvLyBHYXRlcyB0aGUgdG9vbGJhciBmcy1maWx0ZXIgc28gaXQgaXNuJ3QgcmVuZGVyZWQgKHRha2luZyBzcGFjZSkgd2hlbiB0aGVyZVxuICAvLyBpcyBub3RoaW5nIHRvIHB1dCBpbiBpdCDigJQgbm8gcmVwb3J0LWxldmVsIGZpbHRlcnMgYW5kIG5vIGdyb3VwLWJ5IGNvbnRyb2wuXG4gIHB1YmxpYyBnZXQgcmVwb3J0SGFzRmlsdGVycygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fcmVwb3J0R3JvdXBzKCkubGVuZ3RoID4gMCB8fCAhIXRoaXMuX2dyb3VwQnlJdGVtKCk7XG4gIH1cblxuICAvLyBmcy1maWx0ZXIgcmVhZHMgaXRzIGNvbmZpZyBvbmx5IG9uY2UgKGF0IGluaXQpIOKAlCByZS1iaW5kaW5nIGRvZXMgbm90aGluZy5cbiAgLy8gVGhlIHRlbXBsYXRlIGtleXMgdGhlIHRvb2xiYXIgZnMtZmlsdGVyIG9uIHRoaXMgc2lnbmF0dXJlIHNvIGl0J3MgcmVjcmVhdGVkXG4gIC8vIChhbmQgcmUtcmVhZHMgdGhlIHJlYnVpbHQgY29uZmlnKSB3aGVuZXZlciB0aGUgcmVwb3J0LWxldmVsIGZpbHRlciBzZXRcbiAgLy8gY2hhbmdlcywgZS5nLiBhZnRlciB0aGUgY29tcG9uZW50IHNldHRpbmdzIGRpYWxvZyBhZGRzL21vdmVzIGEgZmlsdGVyLlxuICBwdWJsaWMgZ2V0IHJlcG9ydEZpbHRlcktleSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBbXG4gICAgICAvLyBUaGUgZWZmZWN0aXZlIHpvbmUgaXMgcGFydCBvZiBpdCB0b286IGEgem9uZSBjaGFuZ2UgcmUtcmVzb2x2ZXMgcmVsYXRpdmVcbiAgICAgIC8vIHByZXNldHMsIGFuZCB0aGUgYmFyIG11c3QgYmUgcmVjcmVhdGVkIHRvIHNob3cgdGhlIG5ldyBkYXlzLlxuICAgICAgdGhpcy5fZmlsdGVyU3RhdGUudGltZXpvbmUoKSxcbiAgICAgIC8vIFRoZSBzdG9yZWQgZGVmYXVsdCBpcyBwYXJ0IG9mIHRoZSBzaWduYXR1cmU6IHNhdmluZyBhIG5ldyBkZWZhdWx0IGluIHJlcG9ydFxuICAgICAgLy8gc2V0dGluZ3MgcmVidWlsZHMgdGhlIGNvbmZpZywgYnV0IHdpdGhvdXQgYSBrZXkgY2hhbmdlIGZzLWZpbHRlciBrZWVwc1xuICAgICAgLy8gcmVuZGVyaW5nIHRoZSB2YWx1ZXMgaXQgd2FzIGNyZWF0ZWQgd2l0aCB1bnRpbCBhIGZ1bGwgcGFnZSByZWxvYWQuXG4gICAgICBncm91cEJ5U2lnbmF0dXJlKHRoaXMucmVwb3J0KCkpLFxuICAgICAgLi4udGhpcy5fcmVwb3J0R3JvdXBzKCkubWFwKChncm91cCkgPT4gYCR7Z3JvdXAuaWR9OiR7Z3JvdXAubGV2ZWx9OiR7Z3JvdXAubGFiZWx9OiR7ZGVmYXVsdFNpZ25hdHVyZShncm91cCl9YCksXG4gICAgXS5qb2luKCd8Jyk7XG4gIH1cblxuICAvLyAoUmUpYnVpbGQgdGhlIHRvb2xiYXIgZnMtZmlsdGVyIGNvbmZpZyDigJQgdGhlIHJlcG9ydC1sZXZlbCBmaWx0ZXIgaXRlbXMgYW5kXG4gIC8vIHRoZW4gdGhlIGdyb3VwLWJ5IGNvbnRyb2wuIFRoZSByZXBvcnQncyBhY3Rpb25zIGxpdmUgaW4gdGhlIGZzLW1lbnUgYmVzaWRlXG4gIC8vIHRoZSBwaWNrZXIsIG5vdCBoZXJlLiBPbmx5IGJ1aWx0L3VzZWQgb25jZSBhIHJlcG9ydCBpcyBsb2FkZWQgKHRoZSB0ZW1wbGF0ZVxuICAvLyBnYXRlcyBpdCBvbiBgcmVwb3J0YCkuXG4gIHByaXZhdGUgX2J1aWxkUmVwb3J0Q29uZmlnKCk6IHZvaWQge1xuICAgIGNvbnN0IHJlcG9ydElkID0gdGhpcy5yZXBvcnQoKT8uaWQgPz8gbnVsbDtcblxuICAgIC8vIERyb3AgYSBncmFpbiB0aGUgY29udHJvbCBubyBsb25nZXIgb2ZmZXJzIOKAlCB0aGUgYWdlbnQgY2FuIG5hcnJvdyB0aGUgbGlzdFxuICAgIC8vIG1pZC1zZXNzaW9uLCBhbmQgYW4gb3ZlcnJpZGUgdGhlIHZpZXdlciBjYW4ndCBzZWUgaXMgd29yc2UgdGhhbiBub25lLlxuICAgIGlmICh0aGlzLnJlcG9ydCgpICYmICFpc0dyYW51bGFyaXR5T2ZmZXJlZCh0aGlzLnJlcG9ydCgpLCB0aGlzLl9maWx0ZXJTdGF0ZS5mcmVxdWVuY3koKSkpIHtcbiAgICAgIHRoaXMuX2ZpbHRlclN0YXRlLnNldEZyZXF1ZW5jeShudWxsKTtcbiAgICB9XG5cbiAgICBjb25zdCBpdGVtcyA9IHJlcG9ydElkXG4gICAgICA/IHRoaXMuX3JlcG9ydEdyb3VwcygpLm1hcCgoZ3JvdXApID0+XG4gICAgICAgIGZpbHRlckl0ZW1Gb3JHcm91cChncm91cCwgdGhpcy5fcmVwb3J0RGF0YSwgcmVwb3J0SWQsIHRoaXMuX2ZpbHRlclN0YXRlLnZhbHVlKGdyb3VwLmlkKSkpXG4gICAgICA6IFtdO1xuXG4gICAgLy8gVGhlIGdyb3VwLWJ5IGNvbnRyb2wgbGVhZHMgdGhlIGJhciwgYWhlYWQgb2YgZXZlcnkgZmlsdGVyOiBpdCBzZXRzIHRoZVxuICAgIC8vIGdyYWluIHRoZSB3aG9sZSByZXBvcnQgaXMgcmVhZCBhdCwgc28gaXQgaXMgdGhlIGZpcnN0IHRoaW5nIGEgdmlld2VyXG4gICAgLy8gZGVjaWRlcy4gSXQgaXMgbm90IGEgZmlsdGVyIGdyb3VwIOKAlCBpdCByZS1idWNrZXRzIHJvd3MgcmF0aGVyIHRoYW5cbiAgICAvLyBuYXJyb3dpbmcgdGhlbSDigJQgc28gaXQgaXMgcGxhY2VkIGhlcmUgcmF0aGVyIHRoYW4gb3JkZXJlZCBhbW9uZyB0aGVtLlxuICAgIGNvbnN0IGdyb3VwQnlJdGVtID0gdGhpcy5fZ3JvdXBCeUl0ZW0oKTtcbiAgICBpZiAoZ3JvdXBCeUl0ZW0pIHtcbiAgICAgIGl0ZW1zLnVuc2hpZnQoZ3JvdXBCeUl0ZW0pO1xuICAgIH1cblxuICAgIHRoaXMucmVwb3J0RmlsdGVyQ29uZmlnLnNldCh7XG4gICAgICAvLyBOZXZlciB0b3VjaCB0aGUgVVJMIG9yIHBlcnNpc3QgZmlsdGVyIHN0YXRlIOKAlCByZXBvcnQgZmlsdGVycyBhcmVcbiAgICAgIC8vIHNlc3Npb24tb25seSwgb3duZWQgYnkgUmVwb3J0RmlsdGVyU3RhdGVTZXJ2aWNlLlxuICAgICAgcXVlcnlQYXJhbTogZmFsc2UsXG4gICAgICBwZXJzaXN0OiBmYWxzZSxcbiAgICAgIGl0ZW1zLFxuICAgICAgY2hhbmdlOiAocXVlcnkpID0+IHtcbiAgICAgICAgZm9yIChjb25zdCB7IGdyb3VwSWQsIHZhbHVlIH0gb2YgZ3JvdXBWYWx1ZXNGcm9tUXVlcnkocXVlcnkgPz8ge30sIHRoaXMuX3JlcG9ydEdyb3VwcygpKSkge1xuICAgICAgICAgIHRoaXMuX2ZpbHRlclN0YXRlLnNldFZhbHVlKGdyb3VwSWQsIHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBOb3QgYSBmaWx0ZXIgZ3JvdXAg4oCUIHRoZSBncmFpbiBpcyByZWFkIHN0cmFpZ2h0IG9mZiB0aGUgcXVlcnkuXG4gICAgICAgIHRoaXMuX2ZpbHRlclN0YXRlLnNldEZyZXF1ZW5jeSgocXVlcnk/LltHUk9VUF9CWV9JVEVNXSBhcyBDaGFydEdyYW51bGFyaXR5KSB8fCBudWxsKTtcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICAvLyBUaGUgcmVwb3J0J3MgZ3JvdXAtYnkgY29udHJvbCBhcyBhbiBmcy1maWx0ZXIgaXRlbSwgb3IgbnVsbCB3aGVuIHRoZSByZXBvcnRcbiAgLy8gaGFzIG5vbmUgdG8gc2hvdy4gU2VlZGVkIGZyb20gdGhlIHNlc3Npb24gc3RhdGUgc28gdGhlIGdyYWluIHRoZSB2aWV3ZXJcbiAgLy8gcGlja2VkIHN1cnZpdmVzIHRoZSByZXBvcnQgYmVpbmcgcmUtZmV0Y2hlZCBhZnRlciBhIGNoYXQgZWRpdC5cbiAgcHJpdmF0ZSBfZ3JvdXBCeUl0ZW0oKTogSUZpbHRlckNvbmZpZ0l0ZW0gfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5yZXBvcnQoKVxuICAgICAgPyBncm91cEJ5RmlsdGVySXRlbSh0aGlzLnJlcG9ydCgpLCB0aGlzLl9maWx0ZXJTdGF0ZS5mcmVxdWVuY3koKSlcbiAgICAgIDogbnVsbDtcbiAgfVxuXG4gIHByaXZhdGUgX3JlZnJlc2hSZXBvcnROYW1lKHJlcG9ydElkOiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLl9yZXBvcnRTZXJ2aWNlLmxvYWQoKVxuICAgICAgLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKHRoaXMuX2Rlc3Ryb3lSZWYpKVxuICAgICAgLnN1YnNjcmliZSgocmVwb3J0czogUmVwb3J0TGlzdEl0ZW1bXSkgPT4ge1xuICAgICAgICBjb25zdCByZW5hbWVkID0gcmVwb3J0cy5maW5kKChyZXBvcnQpID0+IHJlcG9ydC5pZCA9PT0gcmVwb3J0SWQpO1xuICAgICAgICBpZiAocmVuYW1lZCkge1xuICAgICAgICAgIHRoaXMuc2VsZWN0ZWQuc2V0KHJlbmFtZWQpO1xuICAgICAgICAgIGlmICh0aGlzLnJlcG9ydCgpKSB7XG4gICAgICAgICAgICB0aGlzLnJlcG9ydC5zZXQoeyAuLi50aGlzLnJlcG9ydCgpLCBuYW1lOiByZW5hbWVkLm5hbWUgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgfVxufVxuIiwiPGRpdlxuICAgICNzcGxpdFxuICAgIGNsYXNzPVwicmVwb3J0IGZzLXJvdy5hbGlnbi1zdGFydFwiPlxuICA8ZnMtYWktY2hhdFxuICAgICNjaGF0UGFuZWxcbiAgICBjbGFzcz1cImNoYXRcIlxuICAgIHN0eWxlPVwibWluLWhlaWdodDogNTAwcHg7XCJcbiAgICBiYXNlUGF0aD1cInJlcG9ydHNcIlxuICAgIFtyZXF1ZXN0RGF0YV09XCJ7IHJlcG9ydElkOiBzZWxlY3RlZCgpPy5pZCA/PyBudWxsIH1cIlxuICAgIFtpbnRyb01lc3NhZ2VdPVwiaW50cm9NZXNzYWdlXCJcbiAgICAocmVzcG9uc2UpPVwib25DaGF0UmVzcG9uc2UoJGV2ZW50KVwiPlxuICA8L2ZzLWFpLWNoYXQ+XG4gIDxkaXZcbiAgICBjbGFzcz1cInJlc2l6ZXJcIlxuICAgIChwb2ludGVyZG93bik9XCJvblJlc2l6ZVN0YXJ0KCRldmVudClcIj5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9XCJ2aWV3ZXIgZnMtZmxleCBmcy1jb2x1bW5cIj5cbiAgICA8ZGl2IGNsYXNzPVwiZnMtcm93LmFsaWduLWNlbnRlci5nYXAtc21cIj5cbiAgICAgIDxmcy1hdXRvY29tcGxldGUtY2hpcHNcbiAgICAgICAgICBjbGFzcz1cImZzLWZsZXhcIlxuICAgICAgICAgIFtmZXRjaF09XCJmZXRjaFJlcG9ydHNcIlxuICAgICAgICAgIFsobmdNb2RlbCldPVwic2VsZWN0ZWRcIlxuICAgICAgICAgIFtkaXNhYmxlZF09XCJsb2FkaW5nUmVwb3J0cygpXCJcbiAgICAgICAgICBbcGFkbGVzc109XCJ0cnVlXCJcbiAgICAgICAgICBbbXVsdGlwbGVdPVwiZmFsc2VcIlxuICAgICAgICAgIFtmZXRjaE9uRm9jdXNdPVwidHJ1ZVwiXG4gICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwicmVwb3J0Q2hhbmdlKCRldmVudClcIlxuICAgICAgICAgIHBsYWNlaG9sZGVyPVwiUmVwb3J0XCJcbiAgICAgICAgICBuYW1lPVwicmVwb3J0XCI+XG4gICAgICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICAgICAgZnNBdXRvY29tcGxldGVDaGlwc1RlbXBsYXRlXG4gICAgICAgICAgICBsZXQtb2JqZWN0PVwib2JqZWN0XCI+XG4gICAgICAgICAge3sgb2JqZWN0Lm5hbWUgfX1cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPG5nLXRlbXBsYXRlXG4gICAgICAgICAgICBmc0F1dG9jb21wbGV0ZUNoaXBzU3RhdGljXG4gICAgICAgICAgICAoY2xpY2spPVwiY3JlYXRlUmVwb3J0KClcIj5cbiAgICAgICAgICBDcmVhdGUgUmVwb3J0XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICA8L2ZzLWF1dG9jb21wbGV0ZS1jaGlwcz5cbiAgICAgIEBpZiAocmVwb3J0KCkgJiYgZWRpdE1vZGUoKSkge1xuICAgICAgICA8IS0tIFdoYXQgbGF5b3V0IGVkaXRpbmcgY2FuIGFkZCBvciBzd2l0Y2ggdG8sIGFuZCB0aGUgd2F5IG91dCBvZiBpdCDigJRcbiAgICAgICAgICAgICB0aGUgc2FtZSBvdXRsaW5lZCBidXR0b25zIGFzIHRoZSBmcy1haS1yZXBvcnQgdG9vbGJhci4gLS0+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIG1hdC1zdHJva2VkLWJ1dHRvblxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICBtYXRUb29sdGlwPVwiQWRkIGEgYmxvY2sgb2YgdGV4dFwiXG4gICAgICAgICAgICAoY2xpY2spPVwiYWRkVGV4dCgpXCI+XG4gICAgICAgICAgPG1hdC1pY29uPnRpdGxlPC9tYXQtaWNvbj5cbiAgICAgICAgICBBZGQgdGV4dFxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgbWF0LXN0cm9rZWQtYnV0dG9uXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIGNsYXNzPVwibWFzdGVyLXRvZ2dsZVwiXG4gICAgICAgICAgICBbY2xhc3MuYWN0aXZlXT1cImlzTWFzdGVyTW9kZVwiXG4gICAgICAgICAgICBbbWF0VG9vbHRpcF09XCJpc01hc3Rlck1vZGUgPyAnQmFjayB0byBlZGl0aW5nIHRoaXMgcGFnZScgOiAnRWRpdCB0aGUgaGVhZGVyIGFuZCBmb290ZXIgc2hvd24gb24gZXZlcnkgcGFnZSdcIlxuICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZU1hc3Rlck1vZGUoKVwiPlxuICAgICAgICAgIDxtYXQtaWNvbj53ZWJfYXNzZXQ8L21hdC1pY29uPlxuICAgICAgICAgIEhlYWRlciAmIGZvb3RlclxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgbWF0LXN0cm9rZWQtYnV0dG9uXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVFZGl0TW9kZSgpXCI+XG4gICAgICAgICAgPG1hdC1pY29uPmNoZWNrPC9tYXQtaWNvbj5cbiAgICAgICAgICBEb25lIGVkaXRpbmdcbiAgICAgICAgPC9idXR0b24+XG4gICAgICB9XG4gICAgICBAaWYgKHJlcG9ydCgpKSB7XG4gICAgICAgIDxmcy1tZW51PlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICAgICAgICBmcy1tZW51LWl0ZW1cbiAgICAgICAgICAgICAgKGNsaWNrKT1cInJlcG9ydFNldHRpbmdzKClcIj5cbiAgICAgICAgICAgIDxtYXQtaWNvbj5cbiAgICAgICAgICAgICAgdHVuZVxuICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgIFJlcG9ydCBzZXR0aW5nc1xuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlXG4gICAgICAgICAgICAgIGZzLW1lbnUtaXRlbVxuICAgICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlRWRpdE1vZGUoKVwiXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJlZGl0TW9kZSgpXCI+XG4gICAgICAgICAgICA8bWF0LWljb24+XG4gICAgICAgICAgICAgIGRhc2hib2FyZF9jdXN0b21pemVcbiAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICB7eyBlZGl0TW9kZSgpID8gJ0RvbmUgZWRpdGluZyBsYXlvdXQnIDogJ0VkaXQgbGF5b3V0JyB9fVxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlXG4gICAgICAgICAgICAgIGZzLW1lbnUtaXRlbVxuICAgICAgICAgICAgICAoY2xpY2spPVwiZXhwb3J0UG93ZXJwb2ludCgpXCI+XG4gICAgICAgICAgICA8bWF0LWljb24+XG4gICAgICAgICAgICAgIHNsaWRlc2hvd1xuICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgIEV4cG9ydCBQb3dlclBvaW50XG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICAgICAgZnMtbWVudS1pdGVtXG4gICAgICAgICAgICAgIChjbGljayk9XCJleHBvcnRQZGYoKVwiPlxuICAgICAgICAgICAgPG1hdC1pY29uPlxuICAgICAgICAgICAgICBwaWN0dXJlX2FzX3BkZlxuICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgIEV4cG9ydCBQREZcbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICAgICAgICBmcy1tZW51LWl0ZW1cbiAgICAgICAgICAgICAgKGNsaWNrKT1cImV4cG9ydERhdGEoKVwiPlxuICAgICAgICAgICAgPG1hdC1pY29uPlxuICAgICAgICAgICAgICB0YWJsZV92aWV3XG4gICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgRXhwb3J0IFJhdyBEYXRhXG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICBAaWYgKChyZXBvcnQoKT8ucGFnZXM/Lmxlbmd0aCA/PyAwKSA+IDEpIHtcbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICAgICAgICAgIGZzLW1lbnUtaXRlbVxuICAgICAgICAgICAgICAgIChjbGljayk9XCJleHBvcnREYXRhKHRydWUpXCI+XG4gICAgICAgICAgICAgIDxtYXQtaWNvbj5cbiAgICAgICAgICAgICAgICB0YWJsZV92aWV3XG4gICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgIEV4cG9ydCBSYXcgRGF0YSAoVGhpcyBQYWdlKVxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICB9XG4gICAgICAgIDwvZnMtbWVudT5cbiAgICAgIH1cbiAgICA8L2Rpdj5cbiAgICBAaWYgKHJlcG9ydCgpKSB7XG4gICAgICA8IS0tIFJlcG9ydC1sZXZlbCBmaWx0ZXJzIG9ubHkgKHRoZSByZXBvcnQncyBhY3Rpb25zIGxpdmUgaW4gdGhlIG1lbnVcbiAgICAgICAgICAgYWJvdmUpLiBmcy1maWx0ZXIgcmVhZHMgaXRzIGNvbmZpZyBvbmNlIGF0IGluaXQsIHNvIGl0J3Mga2V5ZWQgb24gdGhlXG4gICAgICAgICAgIGZpbHRlciBzaWduYXR1cmU6IHdoZW4gdGhlIHJlcG9ydC1sZXZlbCBmaWx0ZXIgc2V0IGNoYW5nZXMgdGhlIGJsb2NrXG4gICAgICAgICAgIGlzIHJlY3JlYXRlZCBhbmQgcmUtcmVhZHMgdGhlIHJlYnVpbHQgY29uZmlnLiAtLT5cbiAgICAgIEBpZiAocmVwb3J0SGFzRmlsdGVycykge1xuICAgICAgICBAZm9yIChrZXkgb2YgW3JlcG9ydEZpbHRlcktleV07IHRyYWNrIGtleSkge1xuICAgICAgICAgIDxmcy1maWx0ZXIgW2NvbmZpZ109XCJyZXBvcnRGaWx0ZXJDb25maWcoKVwiPjwvZnMtZmlsdGVyPlxuICAgICAgICB9XG4gICAgICB9XG4gICAgICA8YXBwLXJlcG9ydC1jYW52YXNcbiAgICAgICAgW3JlcG9ydF09XCJyZXBvcnQoKVwiXG4gICAgICAgIFtlZGl0TW9kZV09XCJlZGl0TW9kZSgpXCJcbiAgICAgICAgKGNvbXBvbmVudFNldHRpbmdzKT1cImNvbXBvbmVudFNldHRpbmdzKCRldmVudClcIlxuICAgICAgICAocmVwb3J0Q2hhbmdlZCk9XCJvbkNhbnZhc1JlcG9ydENoYW5nZWQoKVwiPlxuICAgICAgPC9hcHAtcmVwb3J0LWNhbnZhcz5cbiAgICB9XG4gIDwvZGl2PlxuPC9kaXY+Il19
|
|
418
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwb3J0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvcmVwb3J0cy92aWV3cy9yZXBvcnQvcmVwb3J0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvcmVwb3J0cy92aWV3cy9yZXBvcnQvcmVwb3J0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxzQkFBc0IsRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQzFELFVBQVUsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsTUFBTSxHQUMxRCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFN0MsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDakQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBRXZELE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQzNFLE9BQU8sRUFBZ0IsY0FBYyxFQUFxQixNQUFNLG9CQUFvQixDQUFDO0FBQ3JGLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNoRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDaEQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRTlDLE9BQU8sRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRWhFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDRCQUE0QixDQUFD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Vyw4VkFDWCx5QkFBeUIsMC9CQUN6QixjQUFjLGtLQUNkLFlBQVksa1NBQ1osaUJBQWlCLGtMQUNqQixTQUFTLGlMQUNULE9BQU8sMklBQ1AsVUFBVSxpUkFDVixxQkFBcUI7OzRGQUdaLGVBQWU7a0JBOUIzQixTQUFTO3NDQUdTLHVCQUF1QixDQUFDLE1BQU0sY0FDbkMsSUFBSSxXQUNQLENBQUMsc0JBQXNCLENBQUMsYUFDdEI7d0JBQ1QsMkVBQTJFO3dCQUMzRSx1RUFBdUU7d0JBQ3ZFLHdCQUF3Qjt3QkFDeEIsNEJBQTRCO3dCQUM1QixpQkFBaUI7d0JBQ2pCLGdCQUFnQjt3QkFDaEIsbUJBQW1CO3dCQUNuQiwwRUFBMEU7d0JBQzFFLHNCQUFzQjt3QkFDdEIsa0JBQWtCLENBQUMsRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLHFCQUFxQixDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztxQkFDdEcsV0FDUTt3QkFDUCxXQUFXO3dCQUNYLHlCQUF5Qjt3QkFDekIsY0FBYzt3QkFDZCxZQUFZO3dCQUNaLGlCQUFpQjt3QkFDakIsU0FBUzt3QkFDVCxPQUFPO3dCQUNQLFVBQVU7d0JBQ1YscUJBQXFCO3FCQUN0Qjt3REFpQk8sTUFBTTtzQkFEYixTQUFTO3VCQUFDLE9BQU8sRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBSTVCLFVBQVU7c0JBRGpCLFNBQVM7dUJBQUMsV0FBVyxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFO2dCQU1sRCxPQUFPO3NCQURkLFNBQVM7dUJBQUMscUJBQXFCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ1VTVE9NX0VMRU1FTlRTX1NDSEVNQSwgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCxcbiAgRGVzdHJveVJlZiwgRWxlbWVudFJlZiwgTmdab25lLCBWaWV3Q2hpbGQsIGluamVjdCwgc2lnbmFsLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG5pbXBvcnQgeyBNYXRCdXR0b24gfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9idXR0b24nO1xuaW1wb3J0IHsgTWF0RGlhbG9nIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcbmltcG9ydCB7IE1hdEljb24gfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pY29uJztcbmltcG9ydCB7IE1hdFRvb2x0aXAgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90b29sdGlwJztcblxuaW1wb3J0IHsgRnNBdXRvY29tcGxldGVDaGlwc01vZHVsZSB9IGZyb20gJ0BmaXJlc3RpdGNoL2F1dG9jb21wbGV0ZS1jaGlwcyc7XG5pbXBvcnQgeyBGaWx0ZXJDb25maWcsIEZzRmlsdGVyTW9kdWxlLCBJRmlsdGVyQ29uZmlnSXRlbSB9IGZyb20gJ0BmaXJlc3RpdGNoL2ZpbHRlcic7XG5pbXBvcnQgeyBGc01lbnVNb2R1bGUgfSBmcm9tICdAZmlyZXN0aXRjaC9tZW51JztcbmltcG9ydCB7IEZzUHJvY2VzcyB9IGZyb20gJ0BmaXJlc3RpdGNoL3Byb2Nlc3MnO1xuaW1wb3J0IHsgRnNQcm9tcHQgfSBmcm9tICdAZmlyZXN0aXRjaC9wcm9tcHQnO1xuXG5pbXBvcnQgeyBmaW5hbGl6ZSwgc3dpdGNoTWFwLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IHRha2VVbnRpbERlc3Ryb3llZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7IHByb3ZpZGVFY2hhcnRzQ29yZSB9IGZyb20gJ25neC1lY2hhcnRzJztcblxuaW1wb3J0IHsgRnNBaUNoYXRDb21wb25lbnQsIEZzQWlDaGF0UmVzcG9uc2UgfSBmcm9tICdAZmlyZXN0aXRjaC9haSc7XG5cbmltcG9ydCB7IFJlcG9ydENhbnZhc0NvbXBvbmVudCB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvcmVwb3J0LWNhbnZhcy9yZXBvcnQtY2FudmFzLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBSZXBvcnREYXRhIH0gZnJvbSAnLi4vLi4vZGF0YS9yZXBvcnQuZGF0YSc7XG5pbXBvcnQgeyBDb21wb25lbnRTZXR0aW5nc0NvbXBvbmVudCwgQ29tcG9uZW50U2V0dGluZ3NSZXN1bHQgfSBmcm9tICcuLi8uLi9kaWFsb2dzL2NvbXBvbmVudC1zZXR0aW5ncy9jb21wb25lbnQtc2V0dGluZ3MuY29tcG9uZW50JztcbmltcG9ydCB7IFJlcG9ydFNldHRpbmdzQ29tcG9uZW50LCBSZXBvcnRTZXR0aW5nc1Jlc3VsdCB9IGZyb20gJy4uLy4uL2RpYWxvZ3MvcmVwb3J0LXNldHRpbmdzL3JlcG9ydC1zZXR0aW5ncy5jb21wb25lbnQnO1xuaW1wb3J0IHsgUmVwb3J0RXhwb3J0Q29sbGVjdG9yU2VydmljZSB9IGZyb20gJy4uLy4uL2V4cG9ydC9yZXBvcnQtZXhwb3J0LWNvbGxlY3Rvci5zZXJ2aWNlJztcbmltcG9ydCB7IFJlcG9ydEV4cG9ydFNlcnZpY2UgfSBmcm9tICcuLi8uLi9leHBvcnQvcmVwb3J0LWV4cG9ydC5zZXJ2aWNlJztcbmltcG9ydCB7IFJlcG9ydFBkZlNlcnZpY2UgfSBmcm9tICcuLi8uLi9leHBvcnQvcmVwb3J0LXBkZi5zZXJ2aWNlJztcbmltcG9ydCB7IFJlcG9ydFBwdHhTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vZXhwb3J0L3JlcG9ydC1wcHR4LnNlcnZpY2UnO1xuaW1wb3J0IHtcbiAgQ2hhcnRHcmFudWxhcml0eSwgUmVwb3J0LFxuICBSZXBvcnRDb21wb25lbnQgYXMgUmVwb3J0Q29tcG9uZW50TW9kZWwsIFJlcG9ydEZpbHRlckdyb3VwLCBSZXBvcnRMaXN0SXRlbSxcbn0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9yZXBvcnQuaW50ZXJmYWNlJztcbmltcG9ydCB7XG4gIEdST1VQX0JZX0lURU0sIGZpbHRlckl0ZW1Gb3JHcm91cCwgZ3JvdXBCeUZpbHRlckl0ZW0sIGdyb3VwQnlTaWduYXR1cmUsIGdyb3VwVmFsdWVzRnJvbVF1ZXJ5LFxuICBpc0dyYW51bGFyaXR5T2ZmZXJlZCxcbn0gZnJvbSAnLi4vLi4vcmVwb3J0LWZpbHRlci1pdGVtcyc7XG5pbXBvcnQgeyBSZXBvcnRGaWx0ZXJTdGF0ZVNlcnZpY2UsIGRlZmF1bHRTaWduYXR1cmUgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9yZXBvcnQtZmlsdGVyLXN0YXRlLnNlcnZpY2UnO1xuaW1wb3J0IHsgUmVwb3J0U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3JlcG9ydC5zZXJ2aWNlJztcblxuXG4vLyBUaGUgUmVwb3J0cyBwYWdlOiBBSSBjaGF0IG9uIHRoZSBsZWZ0LCB0aGUgcmVwb3J0IGNhbnZhcyBvbiB0aGUgcmlnaHQg4oCUXG4vLyBhIHNwbGl0LXBhbmUgbGF5b3V0OyB0aGUgdmlld2VyIGlzIG91ciBvd24gY2FudmFzIChubyBpZnJhbWUsIG5vIGVtYmVkIFVSTHMpLlxuLy8gVGhlIGNoYXQgaXMgYWx3YXlzIHNjb3BlZCB0byB0aGUgc2VsZWN0ZWQgcmVwb3J0OyBpdHMgaWQgcmlkZXMgb24gZXZlcnlcbi8vIHR1cm4gdmlhIFtyZXF1ZXN0RGF0YV0uXG5AQ29tcG9uZW50KHtcbiAgdGVtcGxhdGVVcmw6ICcuL3JlcG9ydC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3JlcG9ydC5jb21wb25lbnQuc2NzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgc2NoZW1hczogW0NVU1RPTV9FTEVNRU5UU19TQ0hFTUFdLFxuICBwcm92aWRlcnM6IFtcbiAgICAvLyBTZXNzaW9uIGZpbHRlciBzdGF0ZSBpcyBwZXItb3Blbi1yZXBvcnQtcGFnZSwgbm90IGFwcC1nbG9iYWw7IHRoZSBleHBvcnRcbiAgICAvLyBzZXJ2aWNlcyByZXNvbHZlIGZpbHRlcnMgdGhyb3VnaCBpdCwgc28gdGhleSBsaXZlIGF0IHRoZSBzYW1lIGxldmVsLlxuICAgIFJlcG9ydEZpbHRlclN0YXRlU2VydmljZSxcbiAgICBSZXBvcnRFeHBvcnRDb2xsZWN0b3JTZXJ2aWNlLFxuICAgIFJlcG9ydFBwdHhTZXJ2aWNlLFxuICAgIFJlcG9ydFBkZlNlcnZpY2UsXG4gICAgUmVwb3J0RXhwb3J0U2VydmljZSxcbiAgICAvLyBUcmVlLXNoYWtlbiBFQ2hhcnRzIGNvcmUgKyB0aGUgJ3JlcG9ydCcgaG91c2UgdGhlbWUsIGxvYWRlZCBsYXppbHkgd2l0aFxuICAgIC8vIHRoaXMgcm91dGUncyBjaHVuay5cbiAgICBwcm92aWRlRWNoYXJ0c0NvcmUoeyBlY2hhcnRzOiAoKSA9PiBpbXBvcnQoJy4uLy4uL3RoZW1lL2VjaGFydHMnKS50aGVuKChtb2R1bGUpID0+IG1vZHVsZS5kZWZhdWx0KSB9KSxcbiAgXSxcbiAgaW1wb3J0czogW1xuICAgIEZvcm1zTW9kdWxlLFxuICAgIEZzQXV0b2NvbXBsZXRlQ2hpcHNNb2R1bGUsXG4gICAgRnNGaWx0ZXJNb2R1bGUsXG4gICAgRnNNZW51TW9kdWxlLFxuICAgIEZzQWlDaGF0Q29tcG9uZW50LFxuICAgIE1hdEJ1dHRvbixcbiAgICBNYXRJY29uLFxuICAgIE1hdFRvb2x0aXAsXG4gICAgUmVwb3J0Q2FudmFzQ29tcG9uZW50LFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBSZXBvcnRDb21wb25lbnQge1xuXG4gIC8vIFRoZSBzaW5nbGUgcmVwb3J0IHRoZSB2aWV3ZXIgYW5kIGNoYXQgYXJlIGZvY3VzZWQgb24uXG4gIHB1YmxpYyByZWFkb25seSBzZWxlY3RlZCA9IHNpZ25hbDxSZXBvcnRMaXN0SXRlbSB8IG51bGw+KG51bGwpO1xuICBwdWJsaWMgcmVhZG9ubHkgcmVwb3J0ID0gc2lnbmFsPFJlcG9ydCB8IG51bGw+KG51bGwpO1xuICBwdWJsaWMgcmVhZG9ubHkgbG9hZGluZ1JlcG9ydHMgPSBzaWduYWwodHJ1ZSk7XG4gIHB1YmxpYyByZWFkb25seSBlZGl0TW9kZSA9IHNpZ25hbChmYWxzZSk7XG5cbiAgLy8gVGhlIHJlcG9ydCB0b29sYmFyIElTIGFuIGZzLWZpbHRlcjogdGhlIHBpY2tlciByaWRlcyBpbiBpdHMgaGVhZGluZ1xuICAvLyB0ZW1wbGF0ZSwgdGhlIG1lbnUgYmVjb21lcyBpdHMgYWN0aW9ucywgYW5kIHJlcG9ydC1sZXZlbCBmaWx0ZXIgZ3JvdXBzXG4gIC8vIGJlY29tZSBpdHMgaXRlbXMuIFJlYnVpbHQgd2hlbmV2ZXIgdGhlIGxvYWRlZCByZXBvcnQgKGFuZCB0aHVzIGl0cyBncm91cHMpXG4gIC8vIGNoYW5nZXM7IHRoZSBtZW51J3Mgc2hvdy1ndWFyZHMga2VlcCB3b3JraW5nIHdoaWxlIG5vIHJlcG9ydCBpcyBzZWxlY3RlZC5cbiAgcHVibGljIHJlYWRvbmx5IHJlcG9ydEZpbHRlckNvbmZpZyA9IHNpZ25hbDxGaWx0ZXJDb25maWcgfCBudWxsPihudWxsKTtcblxuICBAVmlld0NoaWxkKCdzcGxpdCcsIHsgc3RhdGljOiB0cnVlIH0pXG4gIHByaXZhdGUgX3NwbGl0ITogRWxlbWVudFJlZjxIVE1MRGl2RWxlbWVudD47XG5cbiAgQFZpZXdDaGlsZCgnY2hhdFBhbmVsJywgeyBzdGF0aWM6IHRydWUsIHJlYWQ6IEVsZW1lbnRSZWYgfSlcbiAgcHJpdmF0ZSBfY2hhdFBhbmVsITogRWxlbWVudFJlZjxIVE1MRWxlbWVudD47XG5cbiAgLy8gT25seSB0aGUgY2FudmFzIGtub3dzIHdoaWNoIHBhZ2UgaXMgb24gc2NyZWVuLCBhbmQgYSBwYWdlLXNjb3BlZCBleHBvcnRcbiAgLy8gaGFzIHRvIGFzayBpdC5cbiAgQFZpZXdDaGlsZChSZXBvcnRDYW52YXNDb21wb25lbnQpXG4gIHByaXZhdGUgX2NhbnZhcz86IFJlcG9ydENhbnZhc0NvbXBvbmVudDtcblxuICBwdWJsaWMgcmVhZG9ubHkgaW50cm9NZXNzYWdlID0ge1xuICAgIHRleHQ6ICcnLFxuICB9O1xuXG4gIHByaXZhdGUgX3JlcG9ydERhdGEgPSBpbmplY3QoUmVwb3J0RGF0YSk7XG4gIHByaXZhdGUgX3JlcG9ydFNlcnZpY2UgPSBpbmplY3QoUmVwb3J0U2VydmljZSk7XG4gIHByaXZhdGUgX2ZpbHRlclN0YXRlID0gaW5qZWN0KFJlcG9ydEZpbHRlclN0YXRlU2VydmljZSk7XG4gIHByaXZhdGUgX2V4cG9ydFNlcnZpY2UgPSBpbmplY3QoUmVwb3J0RXhwb3J0U2VydmljZSk7XG4gIHByaXZhdGUgX2NvbGxlY3RvciA9IGluamVjdChSZXBvcnRFeHBvcnRDb2xsZWN0b3JTZXJ2aWNlKTtcbiAgcHJpdmF0ZSBfcHJvY2VzcyA9IGluamVjdChGc1Byb2Nlc3MpO1xuICBwcml2YXRlIF9wcm9tcHQgPSBpbmplY3QoRnNQcm9tcHQpO1xuICBwcml2YXRlIF9kaWFsb2cgPSBpbmplY3QoTWF0RGlhbG9nKTtcbiAgcHJpdmF0ZSBfZGVzdHJveVJlZiA9IGluamVjdChEZXN0cm95UmVmKTtcbiAgcHJpdmF0ZSBfem9uZSA9IGluamVjdChOZ1pvbmUpO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuX2J1aWxkUmVwb3J0Q29uZmlnKCk7XG5cbiAgICB0aGlzLl9yZXBvcnRTZXJ2aWNlLmxvYWQoKVxuICAgICAgLnBpcGUoXG4gICAgICAgIGZpbmFsaXplKCgpID0+IHtcbiAgICAgICAgICB0aGlzLmxvYWRpbmdSZXBvcnRzLnNldChmYWxzZSk7XG4gICAgICAgIH0pLFxuICAgICAgICB0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5fZGVzdHJveVJlZiksXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKHsgZXJyb3I6ICgpID0+IHVuZGVmaW5lZCB9KTtcbiAgfVxuXG4gIHB1YmxpYyBmZXRjaFJlcG9ydHMgPSAoa2V5d29yZDogc3RyaW5nKSA9PiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlcG9ydFNlcnZpY2UuZmlsdGVyKGtleXdvcmQpO1xuICB9O1xuXG4gIHB1YmxpYyByZXBvcnRDaGFuZ2UocmVwb3J0OiBSZXBvcnRMaXN0SXRlbSB8IG51bGwpOiB2b2lkIHtcbiAgICB0aGlzLnJlcG9ydC5zZXQobnVsbCk7XG4gICAgdGhpcy5lZGl0TW9kZS5zZXQoZmFsc2UpO1xuICAgIHRoaXMuX2J1aWxkUmVwb3J0Q29uZmlnKCk7XG5cbiAgICBpZiAocmVwb3J0KSB7XG4gICAgICB0aGlzLl9sb2FkUmVwb3J0KHJlcG9ydC5pZCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGNyZWF0ZVJlcG9ydCgpOiB2b2lkIHtcbiAgICB0aGlzLl9wcm9tcHQuaW5wdXQoe1xuICAgICAgdGl0bGU6ICdDcmVhdGUgUmVwb3J0JyxcbiAgICAgIGxhYmVsOiAnTmFtZScsXG4gICAgICBjb21taXRMYWJlbDogJ0NyZWF0ZScsXG4gICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICB9KVxuICAgICAgLnBpcGUoXG4gICAgICAgIHN3aXRjaE1hcCgobmFtZTogc3RyaW5nKSA9PiB0aGlzLl9yZXBvcnRTZXJ2aWNlLmNyZWF0ZShuYW1lKSksXG4gICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLl9kZXN0cm95UmVmKSxcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKHJlcG9ydDogUmVwb3J0TGlzdEl0ZW0pID0+IHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZC5zZXQocmVwb3J0KTtcbiAgICAgICAgdGhpcy5fbG9hZFJlcG9ydChyZXBvcnQuaWQpO1xuICAgICAgfSk7XG4gIH1cblxuICBwdWJsaWMgdG9nZ2xlRWRpdE1vZGUoKTogdm9pZCB7XG4gICAgdGhpcy5lZGl0TW9kZS51cGRhdGUoKGVkaXRNb2RlKSA9PiAhZWRpdE1vZGUpO1xuICB9XG5cbiAgLy8gVGhlIGVkaXQgdG9vbHMgbGl2ZSBpbiB0aGlzIHRvb2xiYXIsIGJ1dCB0aGUgY2FudmFzIG93bnMgd2hhdCB0aGV5IGFjdCBvblxuICAvLyAodGhlIGFjdGl2ZSBwYWdlLCB0aGUgaGVhZGVyL2Zvb3RlciBiYW5kcywgd2hpY2ggbGF5ZXIgaXMgbGl2ZSkuXG4gIHB1YmxpYyBnZXQgaXNNYXN0ZXJNb2RlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9jYW52YXM/Lm1hc3Rlck1vZGUoKSA/PyBmYWxzZTtcbiAgfVxuXG4gIHB1YmxpYyBhZGRUZXh0KCk6IHZvaWQge1xuICAgIHRoaXMuX2NhbnZhcz8uYWRkVGV4dCgpO1xuICB9XG5cbiAgcHVibGljIHRvZ2dsZU1hc3Rlck1vZGUoKTogdm9pZCB7XG4gICAgdGhpcy5fY2FudmFzPy50b2dnbGVNYXN0ZXJNb2RlKCk7XG4gIH1cblxuICAvLyBSZXBvcnQgc2V0dGluZ3Mg4oCUIG5hbWUsIHBhZ2Ugc2l6ZS4gVGhlIHBpY2tlciBsaXN0IGFuZCBzdHJ1Y3R1cmUgYm90aFxuICAvLyByZWxvYWQgb24gc2F2ZSAoYSBwYWdlIHJlc2l6ZSByZS1yZW5kZXJzIHRoZSB3aG9sZSBjYW52YXMpLlxuICBwdWJsaWMgcmVwb3J0U2V0dGluZ3MoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnJlcG9ydCgpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fZGlhbG9nLm9wZW48UmVwb3J0U2V0dGluZ3NDb21wb25lbnQsIHVua25vd24sIFJlcG9ydFNldHRpbmdzUmVzdWx0PihSZXBvcnRTZXR0aW5nc0NvbXBvbmVudCwge1xuICAgICAgZGF0YTogeyByZXBvcnQ6IHRoaXMucmVwb3J0KCkgfSxcbiAgICAgIHdpZHRoOiAnNDYwcHgnLFxuICAgIH0pXG4gICAgICAuYWZ0ZXJDbG9zZWQoKVxuICAgICAgLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKHRoaXMuX2Rlc3Ryb3lSZWYpKVxuICAgICAgLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XG4gICAgICAgIC8vIFRoZSBkaWFsb2cgY29uZmlybXMgKyBwZXJmb3JtcyB0aGUgZGVsZXRlIGl0c2VsZjsgd2UganVzdCByZWFjdCB0b1xuICAgICAgICAvLyB3aGF0IGl0IHJlcG9ydHMgYmFjay5cbiAgICAgICAgaWYgKHJlc3VsdD8uYWN0aW9uID09PSAnZGVsZXRlZCcpIHtcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkLnNldChudWxsKTtcbiAgICAgICAgICB0aGlzLnJlcG9ydC5zZXQobnVsbCk7XG4gICAgICAgICAgdGhpcy5fYnVpbGRSZXBvcnRDb25maWcoKTtcblxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChyZXN1bHQ/LmFjdGlvbiA9PT0gJ3NhdmVkJyAmJiB0aGlzLnNlbGVjdGVkKCkpIHtcbiAgICAgICAgICB0aGlzLl9sb2FkUmVwb3J0KHRoaXMuc2VsZWN0ZWQoKS5pZCk7XG4gICAgICAgICAgdGhpcy5fcmVmcmVzaFJlcG9ydE5hbWUodGhpcy5zZWxlY3RlZCgpLmlkKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH1cblxuICAvLyBDb21wb25lbnQgc2V0dGluZ3Mg4oCUIHRpdGxlLCBleGFjdCBnZW9tZXRyeSwgYW5kIHRoZSBkaWFnbm9zdGljIHZpZXdzXG4gIC8vIChTUUwsIGNvbmZpZywgZmlsdGVyIHdpcmluZykuXG4gIHB1YmxpYyBjb21wb25lbnRTZXR0aW5ncyhjb21wb25lbnQ6IFJlcG9ydENvbXBvbmVudE1vZGVsKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnJlcG9ydCgpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgZGlhbG9nUmVmID0gdGhpcy5fZGlhbG9nLm9wZW48Q29tcG9uZW50U2V0dGluZ3NDb21wb25lbnQsIHVua25vd24sIENvbXBvbmVudFNldHRpbmdzUmVzdWx0PihcbiAgICAgIENvbXBvbmVudFNldHRpbmdzQ29tcG9uZW50LFxuICAgICAge1xuICAgICAgICBkYXRhOiB7IHJlcG9ydDogdGhpcy5yZXBvcnQoKSwgY29tcG9uZW50IH0sXG4gICAgICAgIHdpZHRoOiAnNjQwcHgnLFxuICAgICAgfSxcbiAgICApO1xuXG4gICAgLy8gRmlsdGVyIGFkZC9yZW1vdmUvbGV2ZWwgY2hhbmdlcyBwZXJzaXN0IGltbWVkaWF0ZWx5IGluc2lkZSB0aGUgZGlhbG9nIChub1xuICAgIC8vIFwic2F2ZVwiKSBhbmQgY2FuIGxlYXZlIGl0IGJ5IGFuIGV4aXQgdGhhdCBjYXJyaWVzIG5vIHJlc3VsdCwgc28gdGhleSBhcmVcbiAgICAvLyBhbm5vdW5jZWQgYXMgdGhleSBsYW5kLiBUaGUgcmVsb2FkIHdhaXRzIGZvciB0aGUgY2xvc2Ugc28gdGhlIGNhbnZhcyBpc24ndFxuICAgIC8vIHJlLXJlbmRlcmluZyB1bmRlcm5lYXRoIGFuIG9wZW4gZGlhbG9nLlxuICAgIGxldCBmaWx0ZXJzQ2hhbmdlZCA9IGZhbHNlO1xuICAgIGRpYWxvZ1JlZi5jb21wb25lbnRJbnN0YW5jZS5maWx0ZXJzQ2hhbmdlZFxuICAgICAgLnBpcGUodGFrZVVudGlsKGRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpKSlcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4gZmlsdGVyc0NoYW5nZWQgPSB0cnVlKTtcblxuICAgIGRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpXG4gICAgICAucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5fZGVzdHJveVJlZikpXG4gICAgICAuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcbiAgICAgICAgLy8gVGhlIGRpYWxvZyBjb25maXJtcyArIHBlcmZvcm1zIHRoZSBkZWxldGUgaXRzZWxmLiBUaGUgY29tcG9uZW50IGlzXG4gICAgICAgIC8vIGdvbmUgZnJvbSB0aGUgcmVwb3J0LCBzbyByZWxvYWQgcmF0aGVyIHRoYW4gcGF0Y2hpbmcgaXQgb3V0IGxvY2FsbHkg4oCUXG4gICAgICAgIC8vIGl0cyBmaWx0ZXJzIHdlbnQgd2l0aCBpdCwgd2hpY2ggdGhlIHJlcG9ydCBiYXIgaGFzIHRvIGJlIHJlYnVpbHQgZm9yLlxuICAgICAgICBpZiAocmVzdWx0Py5kZWxldGVkKSB7XG4gICAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWQoKSkge1xuICAgICAgICAgICAgdGhpcy5fbG9hZFJlcG9ydCh0aGlzLnNlbGVjdGVkKCkuaWQpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFRoZSByZXBvcnQncyBmaWx0ZXIgZ3JvdXBzIGNoYW5nZWQsIHNvIHRoZSByZXBvcnQgYmFyIGFuZCB0aGVcbiAgICAgICAgLy8gb24tY29tcG9uZW50IHN0cmlwcyBoYXZlIHRvIGJlIHJlYnVpbHQgZnJvbSBhIGZyZXNoIHJlcG9ydC5cbiAgICAgICAgaWYgKGZpbHRlcnNDaGFuZ2VkKSB7XG4gICAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWQoKSkge1xuICAgICAgICAgICAgdGhpcy5fbG9hZFJlcG9ydCh0aGlzLnNlbGVjdGVkKCkuaWQpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIE5vdGhpbmcgZWxzZSBpbiB0aGUgZGlhbG9nIHRvdWNoZXMgdGhlIHF1ZXJ5IOKAlCB0aXRsZSBhbmQgcGFkZGluZyBhcmVcbiAgICAgICAgLy8gcHJlc2VudGF0aW9uLiBSZXBhaW50IHRoZSBvbmUgY29tcG9uZW50IGl0IHdhcyBvcGVuZWQgZm9yIGFuZCBsZWF2ZVxuICAgICAgICAvLyBldmVyeSBvdGhlciBjb21wb25lbnQncyBkYXRhLCBhbmQgaXRzIHF1ZXJ5LCBhbG9uZS5cbiAgICAgICAgaWYgKHJlc3VsdD8uc2V0dGluZ3MpIHtcbiAgICAgICAgICB0aGlzLl9jYW52YXM/LmFwcGx5Q29tcG9uZW50U2V0dGluZ3MoY29tcG9uZW50LmlkLCByZXN1bHQuc2V0dGluZ3MpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgfVxuXG4gIC8vIFRoZSBjYW52YXMgY2hhbmdlZCB0aGUgcmVwb3J0J3Mgc3RydWN0dXJlIChhZGRlZCBhIHBhZ2UpIOKAlCByZS1mZXRjaCBzbyB0aGVcbiAgLy8gbmV3IHBhZ2UgcmVuZGVyczsgdGhlIGNhbnZhcyBsYW5kcyB0aGUgdmlldyBvbiBpdC5cbiAgcHVibGljIG9uQ2FudmFzUmVwb3J0Q2hhbmdlZCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5zZWxlY3RlZCgpKSB7XG4gICAgICB0aGlzLl9sb2FkUmVwb3J0KHRoaXMuc2VsZWN0ZWQoKS5pZCk7XG4gICAgfVxuICB9XG5cbiAgLy8gRXhwb3J0IHRoZSByZXBvcnQgdG8gUG93ZXJQb2ludCwgZW50aXJlbHkgY2xpZW50LXNpZGU6IGV2ZXJ5IGNvbXBvbmVudCdzXG4gIC8vIGRhdGEgaXMgZmV0Y2hlZCBmcmVzaCB3aXRoIHRoZSBjdXJyZW50IGZpbHRlciBzdGF0ZSAoYWxsIHBhZ2VzLCBub3QganVzdFxuICAvLyB0aGUgdmlzaWJsZSBvbmUpLCB0aGVuIHBwdHhnZW5qcyBidWlsZHMgYSBkZWNrIG9mIE5BVElWRSBlZGl0YWJsZSBjaGFydHMg4oCUXG4gIC8vIHBhZ2UgPSBzbGlkZSwgcG9zaXRpb25zIDE6MS4gVGhlIGRvY2sgc2hvd3MgcHJvZ3Jlc3MgdW50aWwgdGhlIGZpbGUgc2F2ZXMuXG4gIHB1YmxpYyBleHBvcnRQb3dlcnBvaW50KCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5yZXBvcnQoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX3Byb2Nlc3MucnVuKFxuICAgICAgJ0V4cG9ydGluZyBQb3dlclBvaW50JyxcbiAgICAgIHRoaXMuX2V4cG9ydFNlcnZpY2UucG93ZXJwb2ludCh0aGlzLnJlcG9ydCgpKSxcbiAgICApO1xuICB9XG5cbiAgLy8gRXhwb3J0IHRvIFBERiwgZW50aXJlbHkgY2xpZW50LXNpZGU6IHNhbWUgY29sbGVjdGlvbiBwYXNzLCBjaGFydHMgcmVuZGVyZWRcbiAgLy8gdGhyb3VnaCBhbiBvZmZzY3JlZW4gRUNoYXJ0cyBpbnN0YW5jZSBhdCAzw5cgcGl4ZWwgcmF0aW8gKHBpeGVsLWlkZW50aWNhbFxuICAvLyB0byB0aGUgc2NyZWVuKSwgdGFibGVzIHZpYSBqc3BkZi1hdXRvdGFibGUg4oCUIHBhZ2UgPSBQREYgcGFnZS5cbiAgcHVibGljIGV4cG9ydFBkZigpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMucmVwb3J0KCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9wcm9jZXNzLnJ1bihcbiAgICAgICdFeHBvcnRpbmcgUERGJyxcbiAgICAgIHRoaXMuX2V4cG9ydFNlcnZpY2UucGRmKHRoaXMucmVwb3J0KCkpLFxuICAgICk7XG4gIH1cblxuICAvLyBUaGUgd2hvbGUgcmVwb3J0IGFzIGZpbGVzIGluIG9uZSBhY3Rpb246IHRoZSBzZXJ2ZXIgd3JpdGVzIG9uZSBDU1YgcGVyXG4gIC8vIGNvbXBvbmVudCwgZWFjaCB3aGF0IHRoZSBzY3JlZW4gc2hvd3MgKGEgY2hhcnQgb3IgS1BJIGFzIGRyYXduLCBhdCB0aGVcbiAgLy8gdmlld2VyJ3MgZ3JvdXAtYnkgZ3JhaW47IGEgbGlzdCBpbiBmdWxsKSwgYW5kIHppcHMgdGhlbSBmb2xkZXJlZCBieSBwYWdlXG4gIC8vIHdpdGggYW4gRXhwb3J0IE5vdGVzLnR4dCB0aGF0IHJlY29yZHMgdGhlIGZpbHRlcnMgYXMgdGhlIGJhciByZWFkcyB0aGVtLlxuICAvLyBMaXN0cyB1c2UgdGhlaXIgc2F2ZWQgZGVmYXVsdCBzb3J0OyBhIGhlYWRlciBjbGljayBpcyBjYXJyaWVkIG9ubHkgYnkgYVxuICAvLyBjb21wb25lbnQncyBvd24gQ1NWIGV4cG9ydC4gYHRoaXNQYWdlYCBuYXJyb3dzIGl0IHRvIHRoZSBwYWdlIHRoZSBjYW52YXMgaXNcbiAgLy8gc2hvd2luZy4gVW5saWtlIHRoZSBQREYvUG93ZXJQb2ludCBleHBvcnRzIHRoZSBmaWxlcyBhcmUgd3JpdHRlblxuICAvLyBzZXJ2ZXItc2lkZSwgc28gdGhleSBhcmUgbm90IGNhcHBlZCBieSB3aGF0IGEgc2xpZGUgY2FuIGhvbGQuXG4gIHB1YmxpYyBleHBvcnREYXRhKHRoaXNQYWdlID0gZmFsc2UpOiB2b2lkIHtcbiAgICBjb25zdCByZXBvcnQgPSB0aGlzLnJlcG9ydCgpO1xuICAgIGlmICghcmVwb3J0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgcGFnZUlkID0gdGhpc1BhZ2UgPyB0aGlzLl9jYW52YXM/LmFjdGl2ZVBhZ2U/LmlkID8/IG51bGwgOiBudWxsO1xuICAgIGNvbnN0IGZpbHRlcnMgPSB0aGlzLl9maWx0ZXJTdGF0ZS5yZXNvbHZlRm9yUmVwb3J0KHJlcG9ydCwgcGFnZUlkKTtcbiAgICBjb25zdCBmcmVxdWVuY3kgPSB0aGlzLl9maWx0ZXJTdGF0ZS5mcmVxdWVuY3koKTtcblxuICAgIHRoaXMuX3Byb2Nlc3MuZG93bmxvYWQoXG4gICAgICAnRXhwb3J0aW5nIGRhdGEnLFxuICAgICAgdGhpcy5fY29sbGVjdG9yLmdldEZpbHRlclN1bW1hcnkocmVwb3J0KVxuICAgICAgICAucGlwZShcbiAgICAgICAgICBzd2l0Y2hNYXAoKGxpbmVzKSA9PiB0aGlzLl9yZXBvcnREYXRhLmV4cG9ydFJlcG9ydChcbiAgICAgICAgICAgIHJlcG9ydC5pZCxcbiAgICAgICAgICAgIGZpbHRlcnMsXG4gICAgICAgICAgICBwYWdlSWQsXG4gICAgICAgICAgICBmcmVxdWVuY3ksXG4gICAgICAgICAgICBsaW5lcyxcbiAgICAgICAgICApKSxcbiAgICAgICAgKSxcbiAgICApO1xuICB9XG5cbiAgLy8gUmVhY3QgdG8gZWFjaCBjaGF0IHR1cm4gKGZzLWNoYXQgaGFuZGxlcyB0aGUgcmVxdWVzdCArIHBlcnNpc3RlbmNlKTsgd2VcbiAgLy8gb25seSBjYXJlIGFib3V0IHRoZSByZXBvcnQgc2lkZSBlZmZlY3RzIHRoaXMgY29udGV4dCdzIGJhY2tlbmQgZmxhZ3MuXG4gIHB1YmxpYyBvbkNoYXRSZXNwb25zZShyZXNwb25zZTogRnNBaUNoYXRSZXNwb25zZSk6IHZvaWQge1xuICAgIC8vIFRoZSBhZ2VudCBjaGFuZ2VkIHRoZSByZXBvcnQncyBzdHJ1Y3R1cmUg4oCUIHJlLWZldGNoIGl0LiBTZXNzaW9uIGZpbHRlclxuICAgIC8vIHZhbHVlcyBzdXJ2aXZlICh0aGUgZmlsdGVyLXN0YXRlIHNlcnZpY2Uga2VlcHMgdmFsdWVzIGZvciBncm91cHMgdGhhdFxuICAgIC8vIHN0aWxsIGV4aXN0KS5cbiAgICBpZiAocmVzcG9uc2UucmVwb3J0Q2hhbmdlZCAmJiB0aGlzLnNlbGVjdGVkKCkpIHtcbiAgICAgIHRoaXMuX2xvYWRSZXBvcnQodGhpcy5zZWxlY3RlZCgpLmlkKTtcbiAgICB9XG5cbiAgICAvLyBBIHJlbmFtZSBjaGFuZ2VzIG5vdGhpbmcgc3RydWN0dXJhbCDigJQgcmVmcmVzaCB0aGUgcGlja2VyIGNoaXAgbGFiZWwuXG4gICAgaWYgKHJlc3BvbnNlLnJlcG9ydFJlbmFtZWQgJiYgdGhpcy5zZWxlY3RlZCgpKSB7XG4gICAgICB0aGlzLl9yZWZyZXNoUmVwb3J0TmFtZSh0aGlzLnNlbGVjdGVkKCkuaWQpO1xuICAgIH1cbiAgfVxuXG4gIC8vIERyYWcgdGhlIGRpdmlkZXIgYmV0d2VlbiB0aGUgY2hhdCBhbmQgY2FudmFzIHBhbmVzIChwb2ludGVyLWNhcHR1cmUgbG9vcFxuICAvLyBvdXRzaWRlIEFuZ3VsYXIpLlxuICBwdWJsaWMgb25SZXNpemVTdGFydChldmVudDogUG9pbnRlckV2ZW50KTogdm9pZCB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgIGNvbnN0IGhhbmRsZSA9IGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudDtcbiAgICBoYW5kbGUuc2V0UG9pbnRlckNhcHR1cmUoZXZlbnQucG9pbnRlcklkKTtcbiAgICB0aGlzLl9zcGxpdC5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5hZGQoJ3Jlc2l6aW5nJyk7XG5cbiAgICB0aGlzLl96b25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgIGNvbnN0IG1vdmUgPSAoZTogUG9pbnRlckV2ZW50KSA9PiB0aGlzLl9yZXNpemVUbyhlLmNsaWVudFgpO1xuICAgICAgY29uc3QgZW5kID0gKCkgPT4ge1xuICAgICAgICBoYW5kbGUucmVsZWFzZVBvaW50ZXJDYXB0dXJlKGV2ZW50LnBvaW50ZXJJZCk7XG4gICAgICAgIGhhbmRsZS5yZW1vdmVFdmVudExpc3RlbmVyKCdwb2ludGVybW92ZScsIG1vdmUpO1xuICAgICAgICBoYW5kbGUucmVtb3ZlRXZlbnRMaXN0ZW5lcigncG9pbnRlcnVwJywgZW5kKTtcbiAgICAgICAgaGFuZGxlLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3BvaW50ZXJjYW5jZWwnLCBlbmQpO1xuICAgICAgICB0aGlzLl9zcGxpdC5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoJ3Jlc2l6aW5nJyk7XG4gICAgICB9O1xuXG4gICAgICBoYW5kbGUuYWRkRXZlbnRMaXN0ZW5lcigncG9pbnRlcm1vdmUnLCBtb3ZlKTtcbiAgICAgIGhhbmRsZS5hZGRFdmVudExpc3RlbmVyKCdwb2ludGVydXAnLCBlbmQpO1xuICAgICAgaGFuZGxlLmFkZEV2ZW50TGlzdGVuZXIoJ3BvaW50ZXJjYW5jZWwnLCBlbmQpO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBfcmVzaXplVG8oY2xpZW50WDogbnVtYmVyKTogdm9pZCB7XG4gICAgY29uc3QgcmVjdCA9IHRoaXMuX3NwbGl0Lm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgaWYgKHJlY3Qud2lkdGggPT09IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCByYXRpbyA9IChjbGllbnRYIC0gcmVjdC5sZWZ0KSAvIHJlY3Qud2lkdGg7XG4gICAgY29uc3QgY2xhbXBlZCA9IE1hdGgubWluKDAuOCwgTWF0aC5tYXgoMC4yLCByYXRpbykpO1xuICAgIHRoaXMuX2NoYXRQYW5lbC5uYXRpdmVFbGVtZW50LnN0eWxlLmZsZXhCYXNpcyA9IGAke2NsYW1wZWQgKiAxMDB9JWA7XG4gIH1cblxuICBwcml2YXRlIF9sb2FkUmVwb3J0KHJlcG9ydElkOiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLl9yZXBvcnREYXRhLmdldChyZXBvcnRJZClcbiAgICAgIC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLl9kZXN0cm95UmVmKSlcbiAgICAgIC5zdWJzY3JpYmUoKHJlcG9ydDogUmVwb3J0KSA9PiB7XG4gICAgICAgIHRoaXMucmVwb3J0LnNldChyZXBvcnQpO1xuICAgICAgICAvLyBObyBVUkwgc3RhdGUgaW4gdGhpcyB2aWV3OiBub3RoaW5nIGlzIHJlc3RvcmVkIGZyb20gdGhlIFVSTCBhbmRcbiAgICAgICAgLy8gbm90aGluZyBsaXN0ZW5zIHRvIHVybENoYW5nZXMoKSwgc28gaXRzIGZpbHRlcnMgc3RheSBzZXNzaW9uLW9ubHkuXG4gICAgICAgIHRoaXMuX2ZpbHRlclN0YXRlLmluaXQocmVwb3J0KTtcbiAgICAgICAgdGhpcy5fYnVpbGRSZXBvcnRDb25maWcoKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgLy8gUmVwb3J0LWxldmVsIGZpbHRlciBncm91cHMgaW4gdGhlaXIgc2F2ZWQgb3JkZXIg4oCUIHRoZSBvbmVzIHRoYXQgcmVuZGVyIGluXG4gIC8vIHRoZSB0b29sYmFyIChjb21wb25lbnQtbGV2ZWwgZ3JvdXBzIHJlbmRlciBvbiB0aGVpciBjb21wb25lbnRzKS5cbiAgcHJpdmF0ZSBfcmVwb3J0R3JvdXBzKCk6IFJlcG9ydEZpbHRlckdyb3VwW10ge1xuICAgIHJldHVybiAodGhpcy5yZXBvcnQoKT8uZmlsdGVyR3JvdXBzID8/IFtdKVxuICAgICAgLmZpbHRlcigoZ3JvdXApID0+IGdyb3VwLmxldmVsID09PSAncmVwb3J0JyB8fCBncm91cC5sZXZlbCA9PT0gJ2JvdGgnKVxuICAgICAgLnNvcnQoKGEsIGIpID0+IGEub3JkZXIgLSBiLm9yZGVyKTtcbiAgfVxuXG4gIC8vIEdhdGVzIHRoZSB0b29sYmFyIGZzLWZpbHRlciBzbyBpdCBpc24ndCByZW5kZXJlZCAodGFraW5nIHNwYWNlKSB3aGVuIHRoZXJlXG4gIC8vIGlzIG5vdGhpbmcgdG8gcHV0IGluIGl0IOKAlCBubyByZXBvcnQtbGV2ZWwgZmlsdGVycyBhbmQgbm8gZ3JvdXAtYnkgY29udHJvbC5cbiAgcHVibGljIGdldCByZXBvcnRIYXNGaWx0ZXJzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9yZXBvcnRHcm91cHMoKS5sZW5ndGggPiAwIHx8ICEhdGhpcy5fZ3JvdXBCeUl0ZW0oKTtcbiAgfVxuXG4gIC8vIGZzLWZpbHRlciByZWFkcyBpdHMgY29uZmlnIG9ubHkgb25jZSAoYXQgaW5pdCkg4oCUIHJlLWJpbmRpbmcgZG9lcyBub3RoaW5nLlxuICAvLyBUaGUgdGVtcGxhdGUga2V5cyB0aGUgdG9vbGJhciBmcy1maWx0ZXIgb24gdGhpcyBzaWduYXR1cmUgc28gaXQncyByZWNyZWF0ZWRcbiAgLy8gKGFuZCByZS1yZWFkcyB0aGUgcmVidWlsdCBjb25maWcpIHdoZW5ldmVyIHRoZSByZXBvcnQtbGV2ZWwgZmlsdGVyIHNldFxuICAvLyBjaGFuZ2VzLCBlLmcuIGFmdGVyIHRoZSBjb21wb25lbnQgc2V0dGluZ3MgZGlhbG9nIGFkZHMvbW92ZXMgYSBmaWx0ZXIuXG4gIHB1YmxpYyBnZXQgcmVwb3J0RmlsdGVyS2V5KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFtcbiAgICAgIC8vIFRoZSBlZmZlY3RpdmUgem9uZSBpcyBwYXJ0IG9mIGl0IHRvbzogYSB6b25lIGNoYW5nZSByZS1yZXNvbHZlcyByZWxhdGl2ZVxuICAgICAgLy8gcHJlc2V0cywgYW5kIHRoZSBiYXIgbXVzdCBiZSByZWNyZWF0ZWQgdG8gc2hvdyB0aGUgbmV3IGRheXMuXG4gICAgICB0aGlzLl9maWx0ZXJTdGF0ZS50aW1lem9uZSgpLFxuICAgICAgLy8gVGhlIHN0b3JlZCBkZWZhdWx0IGlzIHBhcnQgb2YgdGhlIHNpZ25hdHVyZTogc2F2aW5nIGEgbmV3IGRlZmF1bHQgaW4gcmVwb3J0XG4gICAgICAvLyBzZXR0aW5ncyByZWJ1aWxkcyB0aGUgY29uZmlnLCBidXQgd2l0aG91dCBhIGtleSBjaGFuZ2UgZnMtZmlsdGVyIGtlZXBzXG4gICAgICAvLyByZW5kZXJpbmcgdGhlIHZhbHVlcyBpdCB3YXMgY3JlYXRlZCB3aXRoIHVudGlsIGEgZnVsbCBwYWdlIHJlbG9hZC5cbiAgICAgIGdyb3VwQnlTaWduYXR1cmUodGhpcy5yZXBvcnQoKSksXG4gICAgICAuLi50aGlzLl9yZXBvcnRHcm91cHMoKS5tYXAoKGdyb3VwKSA9PiBgJHtncm91cC5pZH06JHtncm91cC5sZXZlbH06JHtncm91cC5sYWJlbH06JHtkZWZhdWx0U2lnbmF0dXJlKGdyb3VwKX1gKSxcbiAgICBdLmpvaW4oJ3wnKTtcbiAgfVxuXG4gIC8vIChSZSlidWlsZCB0aGUgdG9vbGJhciBmcy1maWx0ZXIgY29uZmlnIOKAlCB0aGUgcmVwb3J0LWxldmVsIGZpbHRlciBpdGVtcyBhbmRcbiAgLy8gdGhlbiB0aGUgZ3JvdXAtYnkgY29udHJvbC4gVGhlIHJlcG9ydCdzIGFjdGlvbnMgbGl2ZSBpbiB0aGUgZnMtbWVudSBiZXNpZGVcbiAgLy8gdGhlIHBpY2tlciwgbm90IGhlcmUuIE9ubHkgYnVpbHQvdXNlZCBvbmNlIGEgcmVwb3J0IGlzIGxvYWRlZCAodGhlIHRlbXBsYXRlXG4gIC8vIGdhdGVzIGl0IG9uIGByZXBvcnRgKS5cbiAgcHJpdmF0ZSBfYnVpbGRSZXBvcnRDb25maWcoKTogdm9pZCB7XG4gICAgY29uc3QgcmVwb3J0SWQgPSB0aGlzLnJlcG9ydCgpPy5pZCA/PyBudWxsO1xuXG4gICAgLy8gRHJvcCBhIGdyYWluIHRoZSBjb250cm9sIG5vIGxvbmdlciBvZmZlcnMg4oCUIHRoZSBhZ2VudCBjYW4gbmFycm93IHRoZSBsaXN0XG4gICAgLy8gbWlkLXNlc3Npb24sIGFuZCBhbiBvdmVycmlkZSB0aGUgdmlld2VyIGNhbid0IHNlZSBpcyB3b3JzZSB0aGFuIG5vbmUuXG4gICAgaWYgKHRoaXMucmVwb3J0KCkgJiYgIWlzR3JhbnVsYXJpdHlPZmZlcmVkKHRoaXMucmVwb3J0KCksIHRoaXMuX2ZpbHRlclN0YXRlLmZyZXF1ZW5jeSgpKSkge1xuICAgICAgdGhpcy5fZmlsdGVyU3RhdGUuc2V0RnJlcXVlbmN5KG51bGwpO1xuICAgIH1cblxuICAgIGNvbnN0IGl0ZW1zID0gcmVwb3J0SWRcbiAgICAgID8gdGhpcy5fcmVwb3J0R3JvdXBzKCkubWFwKChncm91cCkgPT5cbiAgICAgICAgZmlsdGVySXRlbUZvckdyb3VwKGdyb3VwLCB0aGlzLl9yZXBvcnREYXRhLCByZXBvcnRJZCwgdGhpcy5fZmlsdGVyU3RhdGUudmFsdWUoZ3JvdXAuaWQpKSlcbiAgICAgIDogW107XG5cbiAgICAvLyBUaGUgZ3JvdXAtYnkgY29udHJvbCBsZWFkcyB0aGUgYmFyLCBhaGVhZCBvZiBldmVyeSBmaWx0ZXI6IGl0IHNldHMgdGhlXG4gICAgLy8gZ3JhaW4gdGhlIHdob2xlIHJlcG9ydCBpcyByZWFkIGF0LCBzbyBpdCBpcyB0aGUgZmlyc3QgdGhpbmcgYSB2aWV3ZXJcbiAgICAvLyBkZWNpZGVzLiBJdCBpcyBub3QgYSBmaWx0ZXIgZ3JvdXAg4oCUIGl0IHJlLWJ1Y2tldHMgcm93cyByYXRoZXIgdGhhblxuICAgIC8vIG5hcnJvd2luZyB0aGVtIOKAlCBzbyBpdCBpcyBwbGFjZWQgaGVyZSByYXRoZXIgdGhhbiBvcmRlcmVkIGFtb25nIHRoZW0uXG4gICAgY29uc3QgZ3JvdXBCeUl0ZW0gPSB0aGlzLl9ncm91cEJ5SXRlbSgpO1xuICAgIGlmIChncm91cEJ5SXRlbSkge1xuICAgICAgaXRlbXMudW5zaGlmdChncm91cEJ5SXRlbSk7XG4gICAgfVxuXG4gICAgdGhpcy5yZXBvcnRGaWx0ZXJDb25maWcuc2V0KHtcbiAgICAgIC8vIE5ldmVyIHRvdWNoIHRoZSBVUkwgb3IgcGVyc2lzdCBmaWx0ZXIgc3RhdGUg4oCUIHJlcG9ydCBmaWx0ZXJzIGFyZVxuICAgICAgLy8gc2Vzc2lvbi1vbmx5LCBvd25lZCBieSBSZXBvcnRGaWx0ZXJTdGF0ZVNlcnZpY2UuXG4gICAgICBxdWVyeVBhcmFtOiBmYWxzZSxcbiAgICAgIHBlcnNpc3Q6IGZhbHNlLFxuICAgICAgaXRlbXMsXG4gICAgICBjaGFuZ2U6IChxdWVyeSkgPT4ge1xuICAgICAgICBmb3IgKGNvbnN0IHsgZ3JvdXBJZCwgdmFsdWUgfSBvZiBncm91cFZhbHVlc0Zyb21RdWVyeShxdWVyeSA/PyB7fSwgdGhpcy5fcmVwb3J0R3JvdXBzKCkpKSB7XG4gICAgICAgICAgdGhpcy5fZmlsdGVyU3RhdGUuc2V0VmFsdWUoZ3JvdXBJZCwgdmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIC8vIE5vdCBhIGZpbHRlciBncm91cCDigJQgdGhlIGdyYWluIGlzIHJlYWQgc3RyYWlnaHQgb2ZmIHRoZSBxdWVyeS5cbiAgICAgICAgdGhpcy5fZmlsdGVyU3RhdGUuc2V0RnJlcXVlbmN5KChxdWVyeT8uW0dST1VQX0JZX0lURU1dIGFzIENoYXJ0R3JhbnVsYXJpdHkpIHx8IG51bGwpO1xuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIC8vIFRoZSByZXBvcnQncyBncm91cC1ieSBjb250cm9sIGFzIGFuIGZzLWZpbHRlciBpdGVtLCBvciBudWxsIHdoZW4gdGhlIHJlcG9ydFxuICAvLyBoYXMgbm9uZSB0byBzaG93LiBTZWVkZWQgZnJvbSB0aGUgc2Vzc2lvbiBzdGF0ZSBzbyB0aGUgZ3JhaW4gdGhlIHZpZXdlclxuICAvLyBwaWNrZWQgc3Vydml2ZXMgdGhlIHJlcG9ydCBiZWluZyByZS1mZXRjaGVkIGFmdGVyIGEgY2hhdCBlZGl0LlxuICBwcml2YXRlIF9ncm91cEJ5SXRlbSgpOiBJRmlsdGVyQ29uZmlnSXRlbSB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLnJlcG9ydCgpXG4gICAgICA/IGdyb3VwQnlGaWx0ZXJJdGVtKHRoaXMucmVwb3J0KCksIHRoaXMuX2ZpbHRlclN0YXRlLmZyZXF1ZW5jeSgpKVxuICAgICAgOiBudWxsO1xuICB9XG5cbiAgcHJpdmF0ZSBfcmVmcmVzaFJlcG9ydE5hbWUocmVwb3J0SWQ6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMuX3JlcG9ydFNlcnZpY2UubG9hZCgpXG4gICAgICAucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5fZGVzdHJveVJlZikpXG4gICAgICAuc3Vic2NyaWJlKChyZXBvcnRzOiBSZXBvcnRMaXN0SXRlbVtdKSA9PiB7XG4gICAgICAgIGNvbnN0IHJlbmFtZWQgPSByZXBvcnRzLmZpbmQoKHJlcG9ydCkgPT4gcmVwb3J0LmlkID09PSByZXBvcnRJZCk7XG4gICAgICAgIGlmIChyZW5hbWVkKSB7XG4gICAgICAgICAgdGhpcy5zZWxlY3RlZC5zZXQocmVuYW1lZCk7XG4gICAgICAgICAgaWYgKHRoaXMucmVwb3J0KCkpIHtcbiAgICAgICAgICAgIHRoaXMucmVwb3J0LnNldCh7IC4uLnRoaXMucmVwb3J0KCksIG5hbWU6IHJlbmFtZWQubmFtZSB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICB9XG59XG4iLCI8ZGl2XG4gICAgI3NwbGl0XG4gICAgY2xhc3M9XCJyZXBvcnQgZnMtcm93LmFsaWduLXN0YXJ0XCI+XG4gIDxmcy1haS1jaGF0XG4gICAgI2NoYXRQYW5lbFxuICAgIGNsYXNzPVwiY2hhdFwiXG4gICAgc3R5bGU9XCJtaW4taGVpZ2h0OiA1MDBweDtcIlxuICAgIGJhc2VQYXRoPVwicmVwb3J0c1wiXG4gICAgW3JlcXVlc3REYXRhXT1cInsgcmVwb3J0SWQ6IHNlbGVjdGVkKCk/LmlkID8/IG51bGwgfVwiXG4gICAgW2ludHJvTWVzc2FnZV09XCJpbnRyb01lc3NhZ2VcIlxuICAgIChyZXNwb25zZSk9XCJvbkNoYXRSZXNwb25zZSgkZXZlbnQpXCI+XG4gIDwvZnMtYWktY2hhdD5cbiAgPGRpdlxuICAgIGNsYXNzPVwicmVzaXplclwiXG4gICAgKHBvaW50ZXJkb3duKT1cIm9uUmVzaXplU3RhcnQoJGV2ZW50KVwiPlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz1cInZpZXdlciBmcy1mbGV4IGZzLWNvbHVtblwiPlxuICAgIDxkaXYgY2xhc3M9XCJmcy1yb3cuYWxpZ24tY2VudGVyLmdhcC1zbVwiPlxuICAgICAgPGZzLWF1dG9jb21wbGV0ZS1jaGlwc1xuICAgICAgICAgIGNsYXNzPVwiZnMtZmxleFwiXG4gICAgICAgICAgW2ZldGNoXT1cImZldGNoUmVwb3J0c1wiXG4gICAgICAgICAgWyhuZ01vZGVsKV09XCJzZWxlY3RlZFwiXG4gICAgICAgICAgW2Rpc2FibGVkXT1cImxvYWRpbmdSZXBvcnRzKClcIlxuICAgICAgICAgIFtwYWRsZXNzXT1cInRydWVcIlxuICAgICAgICAgIFttdWx0aXBsZV09XCJmYWxzZVwiXG4gICAgICAgICAgW2ZldGNoT25Gb2N1c109XCJ0cnVlXCJcbiAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJyZXBvcnRDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgcGxhY2Vob2xkZXI9XCJSZXBvcnRcIlxuICAgICAgICAgIG5hbWU9XCJyZXBvcnRcIj5cbiAgICAgICAgPG5nLXRlbXBsYXRlXG4gICAgICAgICAgICBmc0F1dG9jb21wbGV0ZUNoaXBzVGVtcGxhdGVcbiAgICAgICAgICAgIGxldC1vYmplY3Q9XCJvYmplY3RcIj5cbiAgICAgICAgICB7eyBvYmplY3QubmFtZSB9fVxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICAgIGZzQXV0b2NvbXBsZXRlQ2hpcHNTdGF0aWNcbiAgICAgICAgICAgIChjbGljayk9XCJjcmVhdGVSZXBvcnQoKVwiPlxuICAgICAgICAgIENyZWF0ZSBSZXBvcnRcbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgIDwvZnMtYXV0b2NvbXBsZXRlLWNoaXBzPlxuICAgICAgQGlmIChyZXBvcnQoKSAmJiBlZGl0TW9kZSgpKSB7XG4gICAgICAgIDwhLS0gV2hhdCBsYXlvdXQgZWRpdGluZyBjYW4gYWRkIG9yIHN3aXRjaCB0bywgYW5kIHRoZSB3YXkgb3V0IG9mIGl0IOKAlFxuICAgICAgICAgICAgIHRoZSBzYW1lIG91dGxpbmVkIGJ1dHRvbnMgYXMgdGhlIGZzLWFpLXJlcG9ydCB0b29sYmFyLiAtLT5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgbWF0LXN0cm9rZWQtYnV0dG9uXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIG1hdFRvb2x0aXA9XCJBZGQgYSBibG9jayBvZiB0ZXh0XCJcbiAgICAgICAgICAgIChjbGljayk9XCJhZGRUZXh0KClcIj5cbiAgICAgICAgICA8bWF0LWljb24+dGl0bGU8L21hdC1pY29uPlxuICAgICAgICAgIEFkZCB0ZXh0XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICBtYXQtc3Ryb2tlZC1idXR0b25cbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgY2xhc3M9XCJtYXN0ZXItdG9nZ2xlXCJcbiAgICAgICAgICAgIFtjbGFzcy5hY3RpdmVdPVwiaXNNYXN0ZXJNb2RlXCJcbiAgICAgICAgICAgIFttYXRUb29sdGlwXT1cImlzTWFzdGVyTW9kZSA/ICdCYWNrIHRvIGVkaXRpbmcgdGhpcyBwYWdlJyA6ICdFZGl0IHRoZSBoZWFkZXIgYW5kIGZvb3RlciBzaG93biBvbiBldmVyeSBwYWdlJ1wiXG4gICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlTWFzdGVyTW9kZSgpXCI+XG4gICAgICAgICAgPG1hdC1pY29uPndlYl9hc3NldDwvbWF0LWljb24+XG4gICAgICAgICAgSGVhZGVyICYgZm9vdGVyXG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICBtYXQtc3Ryb2tlZC1idXR0b25cbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZUVkaXRNb2RlKClcIj5cbiAgICAgICAgICA8bWF0LWljb24+Y2hlY2s8L21hdC1pY29uPlxuICAgICAgICAgIERvbmUgZWRpdGluZ1xuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIH1cbiAgICAgIEBpZiAocmVwb3J0KCkpIHtcbiAgICAgICAgPGZzLW1lbnU+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlXG4gICAgICAgICAgICAgIGZzLW1lbnUtaXRlbVxuICAgICAgICAgICAgICAoY2xpY2spPVwicmVwb3J0U2V0dGluZ3MoKVwiPlxuICAgICAgICAgICAgPG1hdC1pY29uPlxuICAgICAgICAgICAgICB0dW5lXG4gICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgUmVwb3J0IHNldHRpbmdzXG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICAgICAgZnMtbWVudS1pdGVtXG4gICAgICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVFZGl0TW9kZSgpXCJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImVkaXRNb2RlKClcIj5cbiAgICAgICAgICAgIDxtYXQtaWNvbj5cbiAgICAgICAgICAgICAgZGFzaGJvYXJkX2N1c3RvbWl6ZVxuICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgIHt7IGVkaXRNb2RlKCkgPyAnRG9uZSBlZGl0aW5nIGxheW91dCcgOiAnRWRpdCBsYXlvdXQnIH19XG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICAgICAgZnMtbWVudS1pdGVtXG4gICAgICAgICAgICAgIChjbGljayk9XCJleHBvcnRQb3dlcnBvaW50KClcIj5cbiAgICAgICAgICAgIDxtYXQtaWNvbj5cbiAgICAgICAgICAgICAgc2xpZGVzaG93XG4gICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgRXhwb3J0IFBvd2VyUG9pbnRcbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICAgICAgICBmcy1tZW51LWl0ZW1cbiAgICAgICAgICAgICAgKGNsaWNrKT1cImV4cG9ydFBkZigpXCI+XG4gICAgICAgICAgICA8bWF0LWljb24+XG4gICAgICAgICAgICAgIHBpY3R1cmVfYXNfcGRmXG4gICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgRXhwb3J0IFBERlxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlXG4gICAgICAgICAgICAgIGZzLW1lbnUtaXRlbVxuICAgICAgICAgICAgICAoY2xpY2spPVwiZXhwb3J0RGF0YSgpXCI+XG4gICAgICAgICAgICA8bWF0LWljb24+XG4gICAgICAgICAgICAgIHRhYmxlX3ZpZXdcbiAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICBFeHBvcnQgUmF3IERhdGFcbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgIEBpZiAoKHJlcG9ydCgpPy5wYWdlcz8ubGVuZ3RoID8/IDApID4gMSkge1xuICAgICAgICAgICAgPG5nLXRlbXBsYXRlXG4gICAgICAgICAgICAgICAgZnMtbWVudS1pdGVtXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cImV4cG9ydERhdGEodHJ1ZSlcIj5cbiAgICAgICAgICAgICAgPG1hdC1pY29uPlxuICAgICAgICAgICAgICAgIHRhYmxlX3ZpZXdcbiAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgRXhwb3J0IFJhdyBEYXRhIChUaGlzIFBhZ2UpXG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgIH1cbiAgICAgICAgPC9mcy1tZW51PlxuICAgICAgfVxuICAgIDwvZGl2PlxuICAgIEBpZiAocmVwb3J0KCkpIHtcbiAgICAgIDwhLS0gUmVwb3J0LWxldmVsIGZpbHRlcnMgb25seSAodGhlIHJlcG9ydCdzIGFjdGlvbnMgbGl2ZSBpbiB0aGUgbWVudVxuICAgICAgICAgICBhYm92ZSkuIGZzLWZpbHRlciByZWFkcyBpdHMgY29uZmlnIG9uY2UgYXQgaW5pdCwgc28gaXQncyBrZXllZCBvbiB0aGVcbiAgICAgICAgICAgZmlsdGVyIHNpZ25hdHVyZTogd2hlbiB0aGUgcmVwb3J0LWxldmVsIGZpbHRlciBzZXQgY2hhbmdlcyB0aGUgYmxvY2tcbiAgICAgICAgICAgaXMgcmVjcmVhdGVkIGFuZCByZS1yZWFkcyB0aGUgcmVidWlsdCBjb25maWcuIC0tPlxuICAgICAgQGlmIChyZXBvcnRIYXNGaWx0ZXJzKSB7XG4gICAgICAgIEBmb3IgKGtleSBvZiBbcmVwb3J0RmlsdGVyS2V5XTsgdHJhY2sga2V5KSB7XG4gICAgICAgICAgPGZzLWZpbHRlciBbY29uZmlnXT1cInJlcG9ydEZpbHRlckNvbmZpZygpXCI+PC9mcy1maWx0ZXI+XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIDxhcHAtcmVwb3J0LWNhbnZhc1xuICAgICAgICBbcmVwb3J0XT1cInJlcG9ydCgpXCJcbiAgICAgICAgW2VkaXRNb2RlXT1cImVkaXRNb2RlKClcIlxuICAgICAgICAoY29tcG9uZW50U2V0dGluZ3MpPVwiY29tcG9uZW50U2V0dGluZ3MoJGV2ZW50KVwiXG4gICAgICAgIChyZXBvcnRDaGFuZ2VkKT1cIm9uQ2FudmFzUmVwb3J0Q2hhbmdlZCgpXCI+XG4gICAgICA8L2FwcC1yZXBvcnQtY2FudmFzPlxuICAgIH1cbiAgPC9kaXY+XG48L2Rpdj4iXX0=
|
package/esm2022/public_api.mjs
CHANGED
|
@@ -14,4 +14,13 @@ export { ReportData } from './app/reports/data/report.data';
|
|
|
14
14
|
export { ReportService } from './app/reports/services/report.service';
|
|
15
15
|
export { ReportFilterStateService } from './app/reports/services/report-filter-state.service';
|
|
16
16
|
export * from './app/reports/interfaces/report.interface';
|
|
17
|
-
|
|
17
|
+
export * from './app/reports/enums/report-value-format.enum';
|
|
18
|
+
export * from './app/reports/enums/report-list-column-format.enum';
|
|
19
|
+
export * from './app/reports/enums/report-number-units.enum';
|
|
20
|
+
export * from './app/reports/enums/report-chart-data-labels.enum';
|
|
21
|
+
export * from './app/reports/enums/report-chart-color.enum';
|
|
22
|
+
export * from './app/reports/enums/report-chart-line-style.enum';
|
|
23
|
+
export * from './app/reports/enums/report-chart-mark-stat.enum';
|
|
24
|
+
export * from './app/reports/enums/report-chart-date-label.enum';
|
|
25
|
+
export * from './app/reports/enums/report-change-polarity.enum';
|
|
26
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljX2FwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wdWJsaWNfYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRztBQUNILE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQUM5RSwrRUFBK0U7QUFDL0UsMkVBQTJFO0FBQzNFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHFEQUFxRCxDQUFDO0FBQzNGLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG1EQUFtRCxDQUFDO0FBQ3hGLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUM1RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDdEUsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sb0RBQW9ELENBQUM7QUFDOUYsY0FBYywyQ0FBMkMsQ0FBQztBQUMxRCxjQUFjLDhDQUE4QyxDQUFDO0FBQzdELGNBQWMsb0RBQW9ELENBQUM7QUFDbkUsY0FBYyw4Q0FBOEMsQ0FBQztBQUM3RCxjQUFjLG1EQUFtRCxDQUFDO0FBQ2xFLGNBQWMsNkNBQTZDLENBQUM7QUFDNUQsY0FBYyxrREFBa0QsQ0FBQztBQUNqRSxjQUFjLGlEQUFpRCxDQUFDO0FBQ2hFLGNBQWMsa0RBQWtELENBQUM7QUFDakUsY0FBYyxpREFBaUQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBQdWJsaWMgQVBJIFN1cmZhY2Ugb2YgQGZpcmVzdGl0Y2gvcmVwb3J0c1xuICpcbiAqIFRoZSBBSS1idWlsdCByZXBvcnQgdmlld2VyL2VkaXRvciwgaXRzIGRhdGEgZ2F0ZXdheSwgc2Vzc2lvbiBmaWx0ZXIgc3RhdGUgYW5kXG4gKiByZW5kZXJlciBjb21wb25lbnRzLiBUaGUgaG9zdCBhcHAgb25seSBuZWVkcyBSZXBvcnRDb21wb25lbnQgKHJvdXRlIGl0KSDigJRcbiAqIGV2ZXJ5dGhpbmcgZWxzZSBpcyBpbnRlcm5hbCB3aXJpbmcuIFRoZSBBSSBjaGF0IGlzIHByb3ZpZGVkIGJ5IEBmaXJlc3RpdGNoL2FpLlxuICovXG5leHBvcnQgeyBSZXBvcnRDb21wb25lbnQgfSBmcm9tICcuL2FwcC9yZXBvcnRzL3ZpZXdzL3JlcG9ydC9yZXBvcnQuY29tcG9uZW50Jztcbi8vIFNwbGl0LCByb3V0aW5nLWZyZWUgc3VyZmFjZTogYSByZXBvcnRzIGxpc3RpbmcgYW5kIGEgc2luZ2xlLXJlcG9ydCB2aWV3LiBUaGVcbi8vIGhvc3Qgcm91dGVzIGJldHdlZW4gdGhlbSBhbmQgcGFzc2VzIFtyZXBvcnRJZF0gaW50byBGc0FpUmVwb3J0Q29tcG9uZW50LlxuZXhwb3J0IHsgRnNBaVJlcG9ydHNDb21wb25lbnQgfSBmcm9tICcuL2FwcC9yZXBvcnRzL3ZpZXdzL3JlcG9ydHMvZnMtYWktcmVwb3J0cy5jb21wb25lbnQnO1xuZXhwb3J0IHsgRnNBaVJlcG9ydENvbXBvbmVudCB9IGZyb20gJy4vYXBwL3JlcG9ydHMvdmlld3MvcmVwb3J0L2ZzLWFpLXJlcG9ydC5jb21wb25lbnQnO1xuZXhwb3J0IHsgUmVwb3J0RGF0YSB9IGZyb20gJy4vYXBwL3JlcG9ydHMvZGF0YS9yZXBvcnQuZGF0YSc7XG5leHBvcnQgeyBSZXBvcnRTZXJ2aWNlIH0gZnJvbSAnLi9hcHAvcmVwb3J0cy9zZXJ2aWNlcy9yZXBvcnQuc2VydmljZSc7XG5leHBvcnQgeyBSZXBvcnRGaWx0ZXJTdGF0ZVNlcnZpY2UgfSBmcm9tICcuL2FwcC9yZXBvcnRzL3NlcnZpY2VzL3JlcG9ydC1maWx0ZXItc3RhdGUuc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL2FwcC9yZXBvcnRzL2ludGVyZmFjZXMvcmVwb3J0LmludGVyZmFjZSc7XG5leHBvcnQgKiBmcm9tICcuL2FwcC9yZXBvcnRzL2VudW1zL3JlcG9ydC12YWx1ZS1mb3JtYXQuZW51bSc7XG5leHBvcnQgKiBmcm9tICcuL2FwcC9yZXBvcnRzL2VudW1zL3JlcG9ydC1saXN0LWNvbHVtbi1mb3JtYXQuZW51bSc7XG5leHBvcnQgKiBmcm9tICcuL2FwcC9yZXBvcnRzL2VudW1zL3JlcG9ydC1udW1iZXItdW5pdHMuZW51bSc7XG5leHBvcnQgKiBmcm9tICcuL2FwcC9yZXBvcnRzL2VudW1zL3JlcG9ydC1jaGFydC1kYXRhLWxhYmVscy5lbnVtJztcbmV4cG9ydCAqIGZyb20gJy4vYXBwL3JlcG9ydHMvZW51bXMvcmVwb3J0LWNoYXJ0LWNvbG9yLmVudW0nO1xuZXhwb3J0ICogZnJvbSAnLi9hcHAvcmVwb3J0cy9lbnVtcy9yZXBvcnQtY2hhcnQtbGluZS1zdHlsZS5lbnVtJztcbmV4cG9ydCAqIGZyb20gJy4vYXBwL3JlcG9ydHMvZW51bXMvcmVwb3J0LWNoYXJ0LW1hcmstc3RhdC5lbnVtJztcbmV4cG9ydCAqIGZyb20gJy4vYXBwL3JlcG9ydHMvZW51bXMvcmVwb3J0LWNoYXJ0LWRhdGUtbGFiZWwuZW51bSc7XG5leHBvcnQgKiBmcm9tICcuL2FwcC9yZXBvcnRzL2VudW1zL3JlcG9ydC1jaGFuZ2UtcG9sYXJpdHkuZW51bSc7XG4iXX0=
|
package/fesm2022/{firestitch-report-echarts-Djtmaxj1.mjs → firestitch-report-echarts-qCBE3LqM.mjs}
RENAMED
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import { BarChart, LineChart, PieChart } from 'echarts/charts';
|
|
2
|
-
import { GridComponent, TooltipComponent, LegendComponent, DatasetComponent } from 'echarts/components';
|
|
2
|
+
import { GridComponent, TooltipComponent, LegendComponent, DatasetComponent, MarkLineComponent, MarkAreaComponent } from 'echarts/components';
|
|
3
3
|
import * as echarts from 'echarts/core';
|
|
4
4
|
export { echarts as default };
|
|
5
|
+
import { LabelLayout } from 'echarts/features';
|
|
5
6
|
import { CanvasRenderer } from 'echarts/renderers';
|
|
6
|
-
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-DbsWbE-j.mjs';
|
|
7
8
|
|
|
8
9
|
// Tree-shaken ECharts build for the reports renderer: only the chart types and
|
|
9
10
|
// components the option-builder emits are registered, keeping the lazy chunk
|
|
@@ -20,6 +21,11 @@ echarts.use([
|
|
|
20
21
|
TooltipComponent,
|
|
21
22
|
LegendComponent,
|
|
22
23
|
DatasetComponent,
|
|
24
|
+
// Reference lines and statistic lines (markLine), reference bands
|
|
25
|
+
// (markArea), and the overlap hiding of 'auto' data labels (LabelLayout).
|
|
26
|
+
MarkLineComponent,
|
|
27
|
+
MarkAreaComponent,
|
|
28
|
+
LabelLayout,
|
|
23
29
|
CanvasRenderer,
|
|
24
30
|
]);
|
|
25
31
|
// The house theme — the single place report chart "standards" live (palette,
|
|
@@ -57,4 +63,4 @@ echarts.registerTheme('report', {
|
|
|
57
63
|
axisLabel: { color: '#52606d', fontSize: REPORT_AXIS_LABEL_FONT_SIZE },
|
|
58
64
|
},
|
|
59
65
|
});
|
|
60
|
-
//# sourceMappingURL=firestitch-report-echarts-
|
|
66
|
+
//# sourceMappingURL=firestitch-report-echarts-qCBE3LqM.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"firestitch-report-echarts-qCBE3LqM.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"}
|