@annalib/anna-core 20.3.1 → 20.3.2
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/esm2022/lib/anna-core.module.mjs +16 -1
- package/esm2022/lib/anna-generic-table-lib/components/anna-table-virtual-scroll-viewport/anna-table-virtual-scroll-viewport.component.mjs +353 -0
- package/esm2022/lib/anna-generic-table-lib/directives/anna-fixed-row-size-table-virtual-scroll-strategy/anna-fixed-row-size-table-virtual-scroll-strategy.directive.mjs +204 -0
- package/esm2022/lib/anna-generic-table-lib/directives/anna-fixed-row-size-table-virtual-scroll-strategy/index.mjs +2 -0
- package/esm2022/lib/anna-generic-table-lib/directives/anna-virtual-table/anna-virtual-table.directive.mjs +186 -0
- package/esm2022/lib/anna-generic-table-lib/directives/anna-virtual-table/index.mjs +2 -0
- package/esm2022/public-api.mjs +5 -1
- package/fesm2022/annalib-anna-core.mjs +877 -144
- package/fesm2022/annalib-anna-core.mjs.map +1 -1
- package/lib/anna-core-shared-lib/services/anna-date-time-format.service.d.ts +2 -2
- package/lib/anna-core.module.d.ts +15 -12
- package/lib/anna-generic-table-lib/components/anna-table-virtual-scroll-viewport/anna-table-virtual-scroll-viewport.component.d.ts +141 -0
- package/lib/anna-generic-table-lib/directives/anna-fixed-row-size-table-virtual-scroll-strategy/anna-fixed-row-size-table-virtual-scroll-strategy.directive.d.ts +89 -0
- package/lib/anna-generic-table-lib/directives/anna-fixed-row-size-table-virtual-scroll-strategy/index.d.ts +1 -0
- package/lib/anna-generic-table-lib/directives/anna-virtual-table/anna-virtual-table.directive.d.ts +45 -0
- package/lib/anna-generic-table-lib/directives/anna-virtual-table/index.d.ts +1 -0
- package/package.json +1 -1
- package/public-api.d.ts +3 -0
|
@@ -36,6 +36,9 @@ import { AnnaColumnSliderFilterComponent } from "./anna-generic-table-lib/compon
|
|
|
36
36
|
import { AnnaColumnTimeFilterComponent } from "./anna-generic-table-lib/components/anna-column-filters/anna-column-time-filter/anna-column-time-filter.component";
|
|
37
37
|
import { AnnaNonEditableGenericTableComponent } from "./anna-generic-table-lib/components/anna-non-editable-generic-table/anna-non-editable-generic-table.component";
|
|
38
38
|
import { AnnaSortComponent } from "./anna-generic-table-lib/components/anna-sort/anna-sort.component";
|
|
39
|
+
import { AnnaTableVirtualScrollViewportComponent } from "./anna-generic-table-lib/components/anna-table-virtual-scroll-viewport/anna-table-virtual-scroll-viewport.component";
|
|
40
|
+
import { AnnaFixedRowSizeTableVirtualScrollStrategyDirective } from "./anna-generic-table-lib/directives/anna-fixed-row-size-table-virtual-scroll-strategy";
|
|
41
|
+
import { AnnaVirtualTableDirective } from "./anna-generic-table-lib/directives/anna-virtual-table";
|
|
39
42
|
import * as i0 from "@angular/core";
|
|
40
43
|
import * as i1 from "ng-circle-progress";
|
|
41
44
|
export class AnnaCoreModule {
|
|
@@ -64,7 +67,10 @@ export class AnnaCoreModule {
|
|
|
64
67
|
AnnaWeekCalendarComponent,
|
|
65
68
|
AnnaCalendarFilterComponent,
|
|
66
69
|
AnnaSortComponent,
|
|
70
|
+
AnnaVirtualTableDirective,
|
|
67
71
|
AnnaNonEditableGenericTableComponent,
|
|
72
|
+
AnnaTableVirtualScrollViewportComponent,
|
|
73
|
+
AnnaFixedRowSizeTableVirtualScrollStrategyDirective,
|
|
68
74
|
DigitOnlyDirective,
|
|
69
75
|
AnnaColumnDateRangeFilterComponent,
|
|
70
76
|
AnnaColumnTimeFilterComponent,
|
|
@@ -90,10 +96,13 @@ export class AnnaCoreModule {
|
|
|
90
96
|
AnnaWeekCalendarComponent,
|
|
91
97
|
AnnaCalendarFilterComponent,
|
|
92
98
|
AnnaSortComponent,
|
|
99
|
+
AnnaVirtualTableDirective,
|
|
93
100
|
AnnaNonEditableGenericTableComponent,
|
|
101
|
+
AnnaTableVirtualScrollViewportComponent,
|
|
94
102
|
AnnaColumnDateRangeFilterComponent,
|
|
95
103
|
AnnaColumnTimeFilterComponent,
|
|
96
104
|
AnnaColumnCheckboxFilterComponent,
|
|
105
|
+
AnnaFixedRowSizeTableVirtualScrollStrategyDirective,
|
|
97
106
|
DigitOnlyDirective,
|
|
98
107
|
AnnaDeletedOrderIconTemplateComponent,
|
|
99
108
|
AnnaColumnSliderFilterComponent,
|
|
@@ -162,7 +171,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
162
171
|
AnnaWeekCalendarComponent,
|
|
163
172
|
AnnaCalendarFilterComponent,
|
|
164
173
|
AnnaSortComponent,
|
|
174
|
+
AnnaVirtualTableDirective,
|
|
165
175
|
AnnaNonEditableGenericTableComponent,
|
|
176
|
+
AnnaTableVirtualScrollViewportComponent,
|
|
177
|
+
AnnaFixedRowSizeTableVirtualScrollStrategyDirective,
|
|
166
178
|
DigitOnlyDirective,
|
|
167
179
|
AnnaColumnDateRangeFilterComponent,
|
|
168
180
|
AnnaColumnTimeFilterComponent,
|
|
@@ -191,10 +203,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
191
203
|
AnnaWeekCalendarComponent,
|
|
192
204
|
AnnaCalendarFilterComponent,
|
|
193
205
|
AnnaSortComponent,
|
|
206
|
+
AnnaVirtualTableDirective,
|
|
194
207
|
AnnaNonEditableGenericTableComponent,
|
|
208
|
+
AnnaTableVirtualScrollViewportComponent,
|
|
195
209
|
AnnaColumnDateRangeFilterComponent,
|
|
196
210
|
AnnaColumnTimeFilterComponent,
|
|
197
211
|
AnnaColumnCheckboxFilterComponent,
|
|
212
|
+
AnnaFixedRowSizeTableVirtualScrollStrategyDirective,
|
|
198
213
|
DigitOnlyDirective,
|
|
199
214
|
AnnaDeletedOrderIconTemplateComponent,
|
|
200
215
|
AnnaColumnSliderFilterComponent,
|
|
@@ -204,4 +219,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
204
219
|
],
|
|
205
220
|
}]
|
|
206
221
|
}] });
|
|
207
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5uYS1jb3JlLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2FubmEtY29yZS9zcmMvbGliL2FubmEtY29yZS5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsNEJBQTRCO0FBQzVCLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN6RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDeEUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDN0QsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQzVELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRTlELE9BQU8sRUFBRSxzQ0FBc0MsRUFBRSxNQUFNLGlIQUFpSCxDQUFDO0FBQ3pLLE9BQU8sRUFBRSxxQ0FBcUMsRUFBRSxNQUFNLCtHQUErRyxDQUFDO0FBQ3RLLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLDJGQUEyRixDQUFDO0FBQ3pJLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLCtFQUErRSxDQUFDO0FBQ3hILE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLDZGQUE2RixDQUFDO0FBQzVJLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFN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Q3BDLGtCQUFrQjt3QkFDbEIsa0NBQWtDO3dCQUNsQyw2QkFBNkI7d0JBQzdCLGlDQUFpQzt3QkFDakMscUNBQXFDO3dCQUNyQywrQkFBK0I7d0JBQy9CLHFCQUFxQjt3QkFDckIscUNBQXFDO3dCQUNyQyw0QkFBNEI7d0JBQzVCLDRCQUE0QjtxQkFDL0I7b0JBQ0QsT0FBTyxFQUFFO3dCQUNMLG1CQUFtQjt3QkFDbkIsMEJBQTBCO3dCQUMxQixvQ0FBb0M7d0JBQ3BDLGtCQUFrQjt3QkFDbEIsbUJBQW1CO3dCQUNuQiwwQkFBMEI7d0JBQzFCLHNDQUFzQzt3QkFDdEMsNkJBQTZCO3dCQUM3QiwrQkFBK0I7d0JBQy9CLDBDQUEwQzt3QkFDMUMsaUNBQWlDO3dCQUNqQyxnQ0FBZ0M7d0JBQ2hDLHVCQUF1Qjt3QkFDdkIseUJBQXlCO3dCQUN6QiwyQkFBMkI7d0JBQzNCLGlCQUFpQjt3QkFDakIsb0NBQW9DO3dCQUNwQyxrQ0FBa0M7d0JBQ2xDLDZCQUE2Qjt3QkFDN0IsaUNBQWlDO3dCQUNqQyxrQkFBa0I7d0JBQ2xCLHFDQUFxQzt3QkFDckMsK0JBQStCO3dCQUMvQixxQkFBcUI7d0JBQ3JCLHFDQUFxQzt3QkFDckMsNEJBQTRCO3FCQUMvQjtpQkFDSiIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4gKi9cclxuaW1wb3J0IHsgU2Nyb2xsaW5nTW9kdWxlIH0gZnJvbSBcIkBhbmd1bGFyL2Nkay9zY3JvbGxpbmdcIjtcclxuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSBcIkBhbmd1bGFyL2NvbW1vblwiO1xyXG5pbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSBcIkBhbmd1bGFyL2Zvcm1zXCI7XHJcbmltcG9ydCB7IE1hdEJ1dHRvblRvZ2dsZU1vZHVsZSB9IGZyb20gXCJAYW5ndWxhci9tYXRlcmlhbC9idXR0b24tdG9nZ2xlXCI7XHJcbmltcG9ydCB7IE1hdFJhZGlvTW9kdWxlIH0gZnJvbSBcIkBhbmd1bGFyL21hdGVyaWFsL3JhZGlvXCI7XHJcbmltcG9ydCB7IE1hdFRhYmxlTW9kdWxlIH0gZnJvbSBcIkBhbmd1bGFyL21hdGVyaWFsL3RhYmxlXCI7XHJcbmltcG9ydCB7IE5neFNsaWRlck1vZHVsZSB9IGZyb20gXCJAYW5ndWxhci1zbGlkZXIvbmd4LXNsaWRlclwiO1xyXG5pbXBvcnQgeyBOZ2JNb2R1bGUgfSBmcm9tIFwiQG5nLWJvb3RzdHJhcC9uZy1ib290c3RyYXBcIjtcclxuaW1wb3J0IHsgTmdDaXJjbGVQcm9ncmVzc01vZHVsZSB9IGZyb20gXCJuZy1jaXJjbGUtcHJvZ3Jlc3NcIjtcclxuaW1wb3J0IHsgTmd4U2tlbGV0b25Mb2FkZXJNb2R1bGUgfSBmcm9tIFwibmd4LXNrZWxldG9uLWxvYWRlclwiO1xyXG5cclxuaW1wb3J0IHsgQW5uYUJ1eWVyQXBwcm92YWxJY29uVGVtcGxhdGVDb21wb25lbnQgfSBmcm9tIFwiLi9hbm5hLWNvcmUtc2hhcmVkLWxpYi9jb21wb25lbnRzL2FubmEtYnV5ZXItYXBwcm92YWwtaWNvbi10ZW1wbGF0ZS9hbm5hLWJ1eWVyLWFwcHJvdmFsLWljb24tdGVtcGxhdGUuY29tcG9uZW50XCI7XHJcbmltcG9ydCB7IEFubmFEZWxldGVkT3JkZXJJY29uVGVtcGxhdGVDb21wb25lbnQgfSBmcm9tIFwiLi9hbm5hLWNvcmUtc2hhcmVkLWxpYi9jb21wb25lbnRzL2FubmEtZGVsZXRlZC1vcmRlci1pY29uLXRlbXBsYXRlL2FubmEtZGVsZXRlZC1vcmRlci1pY29uLXRlbXBsYXRlLmNvbXBvbmVudFwiO1xyXG5pbXBvcnQgeyBBbm5hRXN0SWNvblRlbXBsYXRlQ29tcG9uZW50IH0gZnJvbSBcIi4vYW5uYS1jb3JlLXNoYXJlZC1saWIvY29tcG9uZW50cy9hbm5hLWVzdC1pY29uLXRlbXBsYXRlL2FubmEtZXN0LWljb24tdGVtcGxhdGUuY29tcG9uZW50XCI7XHJcbmltcG9ydCB7IEFubmFJY29uQ29sdW1uQ29tcG9uZW50IH0gZnJvbSBcIi4vYW5uYS1jb3JlLXNoYXJlZC1saWIvY29tcG9uZW50cy9hbm5hLWljb24tY29sdW1uL2FubmEtaWNvbi1jb2x1bW4uY29tcG9uZW50XCI7XHJcbmltcG9ydCB7IEFubmFMaXZlSWNvblRlbXBsYXRlQ29tcG9uZW50IH0gZnJvbSBcIi4vYW5uYS1jb3JlLXNoYXJlZC1saWIvY29tcG9uZW50cy9hbm5hLWxpdmUtaWNvbi10ZW1wbGF0ZS9hbm5hLWxpdmUtaWNvbi10ZW1wbGF0ZS5jb21wb25lbnRcIjtcclxuaW1wb3J0IHsgQW5uYU5vRGF0YUNvbXBvbmVudCB9IGZyb20gXCIuL2FubmEtY29yZS1zaGFyZWQtbGliL2NvbXBvbmVudHMvYW5uYS1uby1kYXRhL2FubmEtbm8tZGF0YS5jb21wb25lbnRcIjtcclxuaW1wb3J0IHsgQW5uYU5vdGlmeUljb25UZW1wbGF0ZUNvbXBvbmVudCB9IGZyb20gXCIuL2FubmEtY29yZS1zaGFyZWQtbGliL2NvbXBvbmVudHMvYW5uYS1ub3RpZnktaWNvbi10ZW1wbGF0ZS9hbm5hLW5vdGlmeS1pY29uLXRlbXBsYXRlLmNvbXBvbmVudFwiO1xyXG5pbXBvcnQgeyBBbm5hUGF5Rm9yUGVyZm9ybWFuY2VJY29uVGVtcGxhdGVDb21wb25lbnQgfSBmcm9tIFwiLi9hbm5hLWNvcmUtc2hhcmVkLWxpYi9jb21wb25lbnRzL2FubmEtcGF5LWZvci1wZXJmb3JtYW5jZS1pY29uLXRlbXBsYXRlL2FubmEtcGF5LWZvci1wZXJmb3JtYW5jZS1pY29uLXRlbXBsYXRlLmNvbXBvbmVudFwiO1xyXG5pbXBvcnQgeyBBbm5hUmVqZWN0ZWRJY29uVGVtcGxhdGVDb21wb25lbnQgfSBmcm9tIFwiLi9hbm5hLWNvcmUtc2hhcmVkLWxpYi9jb21wb25lbnRzL2FubmEtcmVqZWN0ZWQtaWNvbi10ZW1wbGF0ZS9hbm5hLXJlamVjdGVkLWljb24tdGVtcGxhdGUuY29tcG9uZW50XCI7XHJcbmltcG9ydCB7IERpZ2l0T25seURpcmVjdGl2ZSB9IGZyb20gXCIuL2FubmEtY29yZS1zaGFyZWQtbGliL2RpcmVjdGl2ZXMvZGlnaXRzLW9ubHkvZGlnaXRzLW9ubHkuZGlyZWN0aXZlXCI7XHJcbmltcG9ydCB7IEZpeGVkUm93c1BvcHVwVGFibGVEaXJlY3RpdmUgfSBmcm9tIFwiLi9hbm5hLWNvcmUtc2hhcmVkLWxpYi9kaXJlY3RpdmVzL2ZpeGVkLXJvd3MtcG9wdXAtdGFibGUvZml4ZWQtcm93cy1wb3B1cC10YWJsZS5kaXJlY3RpdmVcIjtcclxuaW1wb3J0IHsgU2hvd0VsbGlwc2lzVGV4dE9uSG92ZXJEaXJlY3RpdmUgfSBmcm9tIFwiLi9hbm5hLWNvcmUtc2hhcmVkLWxpYi9kaXJlY3RpdmVzL3Nob3ctZWxsaXBzaXMtdGV4dC9zaG93LWVsbGlwc2lzLXRleHQuZGlyZWN0aXZlXCI7XHJcbmltcG9ydCB7IEFubmFDb252ZXJ0QXJyYXlUb0NvbW1hU2VwZXJhdGVkVmFsdWUgfSBmcm9tIFwiLi9hbm5hLWNvcmUtc2hhcmVkLWxpYi9waXBlcy9hbm5hQ29udmVydEFycmF5VG9Db21tYVNlcGVyYXRlZFZhbHVlLnBpcGVcIjtcclxuaW1wb3J0IHsgQW5uYUNvbnZlcnRaZXJvT3JOdWxsT3JVbmRlZmluZWRQaXBlIH0gZnJvbSBcIi4vYW5uYS1jb3JlLXNoYXJlZC1saWIvcGlwZXMvYW5uYUNvbnZlcnRaZXJvT3JOdWxsT3JVbmRlZmluZWQucGlwZVwiO1xyXG5pbXBvcnQgeyBBbm5hRGF0ZUZvcm1hdHRlclBpcGUgfSBmcm9tIFwiLi9hbm5hLWNvcmUtc2hhcmVkLWxpYi9waXBlcy9hbm5hRGF0ZUZvcm1hdHRlci5waXBlXCI7XHJcbmltcG9ydCB7IEFubmFGaWx0ZXJTZWFyY2hlZFRleHRQaXBlIH0gZnJvbSBcIi4vYW5uYS1jb3JlLXNoYXJlZC1saWIvcGlwZXMvYW5uYUZpbHRlclNlYXJjaGVkVGV4dC5waXBlXCI7XHJcbmltcG9ydCB7IEFubmFSZXBsYWNlQ2hhclBpcGUgfSBmcm9tIFwiLi9hbm5hLWNvcmUtc2hhcmVkLWxpYi9waXBlcy9hbm5hUmVwbGFjZUNoYXIucGlwZVwiO1xyXG5pbXBvcnQgeyBBbm5hVHlwZW9mRGF0YVBpcGUgfSBmcm9tIFwiLi9hbm5hLWNvcmUtc2hhcmVkLWxpYi9waXBlcy9hbm5hVHlwZU9mRGF0YS5waXBlXCI7XHJcbmltcG9ydCB7IEFubmFDYWxlbmRhckZpbHRlckNvbXBvbmVudCB9IGZyb20gXCIuL2FubmEtZHJvcGRvd24tbGliL2NvbXBvbmVudHMvYW5uYS1jYWxlbmRhci1maWx0ZXIvYW5uYS1jYWxlbmRhci1maWx0ZXIuY29tcG9uZW50XCI7XHJcbmltcG9ydCB7IEFubmFXZWVrQ2FsZW5kYXJDb21wb25lbnQgfSBmcm9tIFwiLi9hbm5hLWRyb3Bkb3duLWxpYi9jb21wb25lbnRzL2FubmEtd2Vlay1jYWxlbmRhci1maWx0ZXIvYW5uYS13ZWVrLWNhbGVuZGFyLWZpbHRlci5jb21wb25lbnRcIjtcclxuaW1wb3J0IHsgQW5uYUNvbHVtbkNoZWNrYm94RmlsdGVyQ29tcG9uZW50IH0gZnJvbSBcIi4vYW5uYS1nZW5lcmljLXRhYmxlLWxpYi9jb21wb25lbnRzL2FubmEtY29sdW1uLWZpbHRlcnMvYW5uYS1jb2x1bW4tY2hlY2tib3gtZmlsdGVyL2FubmEtY29sdW1uLWNoZWNrYm94LWZpbHRlci5jb21wb25lbnRcIjtcclxuaW1wb3J0IHsgQW5uYUNvbHVtbkRhdGVSYW5nZUZpbHRlckNvbXBvbmVudCB9IGZyb20gXCIuL2FubmEtZ2VuZXJpYy10YWJsZS1saWIvY29tcG9uZW50cy9hbm5hLWNvbHVtbi1maWx0ZXJzL2FubmEtY29sdW1uLWRhdGUtcmFuZ2UtZmlsdGVyL2FubmEtY29sdW1uLWRhdGUtcmFuZ2UtZmlsdGVyLmNvbXBvbmVudFwiO1xyXG5pbXBvcnQgeyBBbm5hQ29sdW1uU2xpZGVyRmlsdGVyQ29tcG9uZW50IH0gZnJvbSBcIi4vYW5uYS1nZW5lcmljLXRhYmxlLWxpYi9jb21wb25lbnRzL2FubmEtY29sdW1uLWZpbHRlcnMvYW5uYS1jb2x1bW4tc2xpZGVyLWZpbHRlci9hbm5hLWNvbHVtbi1zbGlkZXItZmlsdGVyLmNvbXBvbmVudFwiO1xyXG5pbXBvcnQgeyBBbm5hQ29sdW1uVGltZUZpbHRlckNvbXBvbmVudCB9IGZyb20gXCIuL2FubmEtZ2VuZXJpYy10YWJsZS1saWIvY29tcG9uZW50cy9hbm5hLWNvbHVtbi1maWx0ZXJzL2FubmEtY29sdW1uLXRpbWUtZmlsdGVyL2FubmEtY29sdW1uLXRpbWUtZmlsdGVyLmNvbXBvbmVudFwiO1xyXG5pbXBvcnQgeyBBbm5hTm9uRWRpdGFibGVHZW5lcmljVGFibGVDb21wb25lbnQgfSBmcm9tIFwiLi9hbm5hLWdlbmVyaWMtdGFibGUtbGliL2NvbXBvbmVudHMvYW5uYS1ub24tZWRpdGFibGUtZ2VuZXJpYy10YWJsZS9hbm5hLW5vbi1lZGl0YWJsZS1nZW5lcmljLXRhYmxlLmNvbXBvbmVudFwiO1xyXG5pbXBvcnQgeyBBbm5hU29ydENvbXBvbmVudCB9IGZyb20gXCIuL2FubmEtZ2VuZXJpYy10YWJsZS1saWIvY29tcG9uZW50cy9hbm5hLXNvcnQvYW5uYS1zb3J0LmNvbXBvbmVudFwiO1xyXG5cclxuQE5nTW9kdWxlKHtcclxuICAgIGltcG9ydHM6IFtcclxuICAgICAgICBDb21tb25Nb2R1bGUsXHJcbiAgICAgICAgTmdiTW9kdWxlLFxyXG4gICAgICAgIEZvcm1zTW9kdWxlLFxyXG4gICAgICAgIE1hdFJhZGlvTW9kdWxlLFxyXG4gICAgICAgIE1hdEJ1dHRvblRvZ2dsZU1vZHVsZSxcclxuICAgICAgICBNYXRUYWJsZU1vZHVsZSxcclxuICAgICAgICBOZ3hTbGlkZXJNb2R1bGUsXHJcbiAgICAgICAgTmd4U2tlbGV0b25Mb2FkZXJNb2R1bGUsXHJcbiAgICAgICAgU2Nyb2xsaW5nTW9kdWxlLFxyXG4gICAgICAgIE5nQ2lyY2xlUHJvZ3Jlc3NNb2R1bGUuZm9yUm9vdCh7XHJcbiAgICAgICAgICAgIHJhZGl1czogMTAwLFxyXG4gICAgICAgICAgICBvdXRlclN0cm9rZVdpZHRoOiAxNixcclxuICAgICAgICAgICAgaW5uZXJTdHJva2VXaWR0aDogOCxcclxuICAgICAgICAgICAgb3V0ZXJTdHJva2VDb2xvcjogXCIjNzhDMDAwXCIsXHJcbiAgICAgICAgICAgIGlubmVyU3Ryb2tlQ29sb3I6IFwiI0M3RTU5NlwiLFxyXG4gICAgICAgICAgICBhbmltYXRpb25EdXJhdGlvbjogMzAwLFxyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIEFubmFOb0RhdGFDb21wb25lbnQsXHJcbiAgICAgICAgQW5uYUZpbHRlclNlYXJjaGVkVGV4dFBpcGUsXHJcbiAgICAgICAgQW5uYUNvbnZlcnRaZXJvT3JOdWxsT3JVbmRlZmluZWRQaXBlLFxyXG4gICAgICAgIEFubmFUeXBlb2ZEYXRhUGlwZSxcclxuICAgICAgICBBbm5hRmlsdGVyU2VhcmNoZWRUZXh0UGlwZSxcclxuICAgICAgICBBbm5hUmVwbGFjZUNoYXJQaXBlLFxyXG4gICAgICAgIEFubmFCdXllckFwcHJvdmFsSWNvblRlbXBsYXRlQ29tcG9uZW50LFxyXG4gICAgICAgIEFubmFMaXZlSWNvblRlbXBsYXRlQ29tcG9uZW50LFxyXG4gICAgICAgIEFubmFOb3RpZnlJY29uVGVtcGxhdGVDb21wb25lbnQsXHJcbiAgICAgICAgQW5uYVBheUZvclBlcmZvcm1hbmNlSWNvblRlbXBsYXRlQ29tcG9uZW50LFxyXG4gICAgICAgIEFubmFSZWplY3RlZEljb25UZW1wbGF0ZUNvbXBvbmVudCxcclxuICAgICAgICBTaG93RWxsaXBzaXNUZXh0T25Ib3ZlckRpcmVjdGl2ZSxcclxuICAgICAgICBBbm5hSWNvbkNvbHVtbkNvbXBvbmVudCxcclxuICAgICAgICBBbm5hV2Vla0NhbGVuZGFyQ29tcG9uZW50LFxyXG4gICAgICAgIEFubmFDYWxlbmRhckZpbHRlckNvbXBvbmVudCxcclxuICAgICAgICBBbm5hU29ydENvbXBvbmVudCxcclxuICAgICAgICBBbm5hTm9uRWRpdGFibGVHZW5lcmljVGFibGVDb21wb25lbnQsXHJcbiAgICAgICAgRGlnaXRPbmx5RGlyZWN0aXZlLFxyXG4gICAgICAgIEFubmFDb2x1bW5EYXRlUmFuZ2VGaWx0ZXJDb21wb25lbnQsXHJcbiAgICAgICAgQW5uYUNvbHVtblRpbWVGaWx0ZXJDb21wb25lbnQsXHJcbiAgICAgICAgQW5uYUNvbHVtbkNoZWNrYm94RmlsdGVyQ29tcG9uZW50LFxyXG4gICAgICAgIEFubmFEZWxldGVkT3JkZXJJY29uVGVtcGxhdGVDb21wb25lbnQsXHJcbiAgICAgICAgQW5uYUNvbHVtblNsaWRlckZpbHRlckNvbXBvbmVudCxcclxuICAgICAgICBBbm5hRGF0ZUZvcm1hdHRlclBpcGUsXHJcbiAgICAgICAgQW5uYUNvbnZlcnRBcnJheVRvQ29tbWFTZXBlcmF0ZWRWYWx1ZSxcclxuICAgICAgICBGaXhlZFJvd3NQb3B1cFRhYmxlRGlyZWN0aXZlLFxyXG4gICAgICAgIEFubmFFc3RJY29uVGVtcGxhdGVDb21wb25lbnQsXHJcbiAgICBdLFxyXG4gICAgZXhwb3J0czogW1xyXG4gICAgICAgIEFubmFOb0RhdGFDb21wb25lbnQsXHJcbiAgICAgICAgQW5uYUZpbHRlclNlYXJjaGVkVGV4dFBpcGUsXHJcbiAgICAgICAgQW5uYUNvbnZlcnRaZXJvT3JOdWxsT3JVbmRlZmluZWRQaXBlLFxyXG4gICAgICAgIEFubmFUeXBlb2ZEYXRhUGlwZSxcclxuICAgICAgICBBbm5hUmVwbGFjZUNoYXJQaXBlLFxyXG4gICAgICAgIEFubmFGaWx0ZXJTZWFyY2hlZFRleHRQaXBlLFxyXG4gICAgICAgIEFubmFCdXllckFwcHJvdmFsSWNvblRlbXBsYXRlQ29tcG9uZW50LFxyXG4gICAgICAgIEFubmFMaXZlSWNvblRlbXBsYXRlQ29tcG9uZW50LFxyXG4gICAgICAgIEFubmFOb3RpZnlJY29uVGVtcGxhdGVDb21wb25lbnQsXHJcbiAgICAgICAgQW5uYVBheUZvclBlcmZvcm1hbmNlSWNvblRlbXBsYXRlQ29tcG9uZW50LFxyXG4gICAgICAgIEFubmFSZWplY3RlZEljb25UZW1wbGF0ZUNvbXBvbmVudCxcclxuICAgICAgICBTaG93RWxsaXBzaXNUZXh0T25Ib3ZlckRpcmVjdGl2ZSxcclxuICAgICAgICBBbm5hSWNvbkNvbHVtbkNvbXBvbmVudCxcclxuICAgICAgICBBbm5hV2Vla0NhbGVuZGFyQ29tcG9uZW50LFxyXG4gICAgICAgIEFubmFDYWxlbmRhckZpbHRlckNvbXBvbmVudCxcclxuICAgICAgICBBbm5hU29ydENvbXBvbmVudCxcclxuICAgICAgICBBbm5hTm9uRWRpdGFibGVHZW5lcmljVGFibGVDb21wb25lbnQsXHJcbiAgICAgICAgQW5uYUNvbHVtbkRhdGVSYW5nZUZpbHRlckNvbXBvbmVudCxcclxuICAgICAgICBBbm5hQ29sdW1uVGltZUZpbHRlckNvbXBvbmVudCxcclxuICAgICAgICBBbm5hQ29sdW1uQ2hlY2tib3hGaWx0ZXJDb21wb25lbnQsXHJcbiAgICAgICAgRGlnaXRPbmx5RGlyZWN0aXZlLFxyXG4gICAgICAgIEFubmFEZWxldGVkT3JkZXJJY29uVGVtcGxhdGVDb21wb25lbnQsXHJcbiAgICAgICAgQW5uYUNvbHVtblNsaWRlckZpbHRlckNvbXBvbmVudCxcclxuICAgICAgICBBbm5hRGF0ZUZvcm1hdHRlclBpcGUsXHJcbiAgICAgICAgQW5uYUNvbnZlcnRBcnJheVRvQ29tbWFTZXBlcmF0ZWRWYWx1ZSxcclxuICAgICAgICBGaXhlZFJvd3NQb3B1cFRhYmxlRGlyZWN0aXZlLFxyXG4gICAgXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIEFubmFDb3JlTW9kdWxlIHt9XHJcbiJdfQ==
|
|
222
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5uYS1jb3JlLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2FubmEtY29yZS9zcmMvbGliL2FubmEtY29yZS5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsNEJBQTRCO0FBQzVCLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN6RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDeEUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDN0QsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQzVELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRTlELE9BQU8sRUFBRSxzQ0FBc0MsRUFBRSxNQUFNLGlIQUFpSCxDQUFDO0FBQ3pLLE9BQU8sRUFBRSxxQ0FBcUMsRUFBRSxNQUFNLCtHQUErRyxDQUFDO0FBQ3RLLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLDJGQUEyRixDQUFDO0FBQ3pJLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLCtFQUErRSxDQUFDO0FBQ3hILE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLDZGQUE2RixDQUFDO0FBQzVJLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFN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aW5nTW9kdWxlIH0gZnJvbSBcIkBhbmd1bGFyL2Nkay9zY3JvbGxpbmdcIjtcclxuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSBcIkBhbmd1bGFyL2NvbW1vblwiO1xyXG5pbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSBcIkBhbmd1bGFyL2Zvcm1zXCI7XHJcbmltcG9ydCB7IE1hdEJ1dHRvblRvZ2dsZU1vZHVsZSB9IGZyb20gXCJAYW5ndWxhci9tYXRlcmlhbC9idXR0b24tdG9nZ2xlXCI7XHJcbmltcG9ydCB7IE1hdFJhZGlvTW9kdWxlIH0gZnJvbSBcIkBhbmd1bGFyL21hdGVyaWFsL3JhZGlvXCI7XHJcbmltcG9ydCB7IE1hdFRhYmxlTW9kdWxlIH0gZnJvbSBcIkBhbmd1bGFyL21hdGVyaWFsL3RhYmxlXCI7XHJcbmltcG9ydCB7IE5neFNsaWRlck1vZHVsZSB9IGZyb20gXCJAYW5ndWxhci1zbGlkZXIvbmd4LXNsaWRlclwiO1xyXG5pbXBvcnQgeyBOZ2JNb2R1bGUgfSBmcm9tIFwiQG5nLWJvb3RzdHJhcC9uZy1ib290c3RyYXBcIjtcclxuaW1wb3J0IHsgTmdDaXJjbGVQcm9ncmVzc01vZHVsZSB9IGZyb20gXCJuZy1jaXJjbGUtcHJvZ3Jlc3NcIjtcclxuaW1wb3J0IHsgTmd4U2tlbGV0b25Mb2FkZXJNb2R1bGUgfSBmcm9tIFwibmd4LXNrZWxldG9uLWxvYWRlclwiO1xyXG5cclxuaW1wb3J0IHsgQW5uYUJ1eWVyQXBwcm92YWxJY29uVGVtcGxhdGVDb21wb25lbnQgfSBmcm9tIFwiLi9hbm5hLWNvcmUtc2hhcmVkLWxpYi9jb21wb25lbnRzL2FubmEtYnV5ZXItYXBwcm92YWwtaWNvbi10ZW1wbGF0ZS9hbm5hLWJ1eWVyLWFwcHJvdmFsLWljb24tdGVtcGxhdGUuY29tcG9uZW50XCI7XHJcbmltcG9ydCB7IEFubmFEZWxldGVkT3JkZXJJY29uVGVtcGxhdGVDb21wb25lbnQgfSBmcm9tIFwiLi9hbm5hLWNvcmUtc2hhcmVkLWxpYi9jb21wb25lbnRzL2FubmEtZGVsZXRlZC1vcmRlci1pY29uLXRlbXBsYXRlL2FubmEtZGVsZXRlZC1vcmRlci1pY29uLXRlbXBsYXRlLmNvbXBvbmVudFwiO1xyXG5pbXBvcnQgeyBBbm5hRXN0SWNvblRlbXBsYXRlQ29tcG9uZW50IH0gZnJvbSBcIi4vYW5uYS1jb3JlLXNoYXJlZC1saWIvY29tcG9uZW50cy9hbm5hLWVzdC1pY29uLXRlbXBsYXRlL2FubmEtZXN0LWljb24tdGVtcGxhdGUuY29tcG9uZW50XCI7XHJcbmltcG9ydCB7IEFubmFJY29uQ29sdW1uQ29tcG9uZW50IH0gZnJvbSBcIi4vYW5uYS1jb3JlLXNoYXJlZC1saWIvY29tcG9uZW50cy9hbm5hLWljb24tY29sdW1uL2FubmEtaWNvbi1jb2x1bW4uY29tcG9uZW50XCI7XHJcbmltcG9ydCB7IEFubmFMaXZlSWNvblRlbXBsYXRlQ29tcG9uZW50IH0gZnJvbSBcIi4vYW5uYS1jb3JlLXNoYXJlZC1saWIvY29tcG9uZW50cy9hbm5hLWxpdmUtaWNvbi10ZW1wbGF0ZS9hbm5hLWxpdmUtaWNvbi10ZW1wbGF0ZS5jb21wb25lbnRcIjtcclxuaW1wb3J0IHsgQW5uYU5vRGF0YUNvbXBvbmVudCB9IGZyb20gXCIuL2FubmEtY29yZS1zaGFyZWQtbGliL2NvbXBvbmVudHMvYW5uYS1uby1kYXRhL2FubmEtbm8tZGF0YS5jb21wb25lbnRcIjtcclxuaW1wb3J0IHsgQW5uYU5vdGlmeUljb25UZW1wbGF0ZUNvbXBvbmVudCB9IGZyb20gXCIuL2FubmEtY29yZS1zaGFyZWQtbGliL2NvbXBvbmVudHMvYW5uYS1ub3RpZnktaWNvbi10ZW1wbGF0ZS9hbm5hLW5vdGlmeS1pY29uLXRlbXBsYXRlLmNvbXBvbmVudFwiO1xyXG5pbXBvcnQgeyBBbm5hUGF5Rm9yUGVyZm9ybWFuY2VJY29uVGVtcGxhdGVDb21wb25lbnQgfSBmcm9tIFwiLi9hbm5hLWNvcmUtc2hhcmVkLWxpYi9jb21wb25lbnRzL2FubmEtcGF5LWZvci1wZXJmb3JtYW5jZS1pY29uLXRlbXBsYXRlL2FubmEtcGF5LWZvci1wZXJmb3JtYW5jZS1pY29uLXRlbXBsYXRlLmNvbXBvbmVudFwiO1xyXG5pbXBvcnQgeyBBbm5hUmVqZWN0ZWRJY29uVGVtcGxhdGVDb21wb25lbnQgfSBmcm9tIFwiLi9hbm5hLWNvcmUtc2hhcmVkLWxpYi9jb21wb25lbnRzL2FubmEtcmVqZWN0ZWQtaWNvbi10ZW1wbGF0ZS9hbm5hLXJlamVjdGVkLWljb24tdGVtcGxhdGUuY29tcG9uZW50XCI7XHJcbmltcG9ydCB7IERpZ2l0T25seURpcmVjdGl2ZSB9IGZyb20gXCIuL2FubmEtY29yZS1zaGFyZWQtbGliL2RpcmVjdGl2ZXMvZGlnaXRzLW9ubHkvZGlnaXRzLW9ubHkuZGlyZWN0aXZlXCI7XHJcbmltcG9ydCB7IEZpeGVkUm93c1BvcHVwVGFibGVEaXJlY3RpdmUgfSBmcm9tIFwiLi9hbm5hLWNvcmUtc2hhcmVkLWxpYi9kaXJlY3RpdmVzL2ZpeGVkLXJvd3MtcG9wdXAtdGFibGUvZml4ZWQtcm93cy1wb3B1cC10YWJsZS5kaXJlY3RpdmVcIjtcclxuaW1wb3J0IHsgU2hvd0VsbGlwc2lzVGV4dE9uSG92ZXJEaXJlY3RpdmUgfSBmcm9tIFwiLi9hbm5hLWNvcmUtc2hhcmVkLWxpYi9kaXJlY3RpdmVzL3Nob3ctZWxsaXBzaXMtdGV4dC9zaG93LWVsbGlwc2lzLXRleHQuZGlyZWN0aXZlXCI7XHJcbmltcG9ydCB7IEFubmFDb252ZXJ0QXJyYXlUb0NvbW1hU2VwZXJhdGVkVmFsdWUgfSBmcm9tIFwiLi9hbm5hLWNvcmUtc2hhcmVkLWxpYi9waXBlcy9hbm5hQ29udmVydEFycmF5VG9Db21tYVNlcGVyYXRlZFZhbHVlLnBpcGVcIjtcclxuaW1wb3J0IHsgQW5uYUNvbnZlcnRaZXJvT3JOdWxsT3JVbmRlZmluZWRQaXBlIH0gZnJvbSBcIi4vYW5uYS1jb3JlLXNoYXJlZC1saWIvcGlwZXMvYW5uYUNvbnZlcnRaZXJvT3JOdWxsT3JVbmRlZmluZWQucGlwZVwiO1xyXG5pbXBvcnQgeyBBbm5hRGF0ZUZvcm1hdHRlclBpcGUgfSBmcm9tIFwiLi9hbm5hLWNvcmUtc2hhcmVkLWxpYi9waXBlcy9hbm5hRGF0ZUZvcm1hdHRlci5waXBlXCI7XHJcbmltcG9ydCB7IEFubmFGaWx0ZXJTZWFyY2hlZFRleHRQaXBlIH0gZnJvbSBcIi4vYW5uYS1jb3JlLXNoYXJlZC1saWIvcGlwZXMvYW5uYUZpbHRlclNlYXJjaGVkVGV4dC5waXBlXCI7XHJcbmltcG9ydCB7IEFubmFSZXBsYWNlQ2hhclBpcGUgfSBmcm9tIFwiLi9hbm5hLWNvcmUtc2hhcmVkLWxpYi9waXBlcy9hbm5hUmVwbGFjZUNoYXIucGlwZVwiO1xyXG5pbXBvcnQgeyBBbm5hVHlwZW9mRGF0YVBpcGUgfSBmcm9tIFwiLi9hbm5hLWNvcmUtc2hhcmVkLWxpYi9waXBlcy9hbm5hVHlwZU9mRGF0YS5waXBlXCI7XHJcbmltcG9ydCB7IEFubmFDYWxlbmRhckZpbHRlckNvbXBvbmVudCB9IGZyb20gXCIuL2FubmEtZHJvcGRvd24tbGliL2NvbXBvbmVudHMvYW5uYS1jYWxlbmRhci1maWx0ZXIvYW5uYS1jYWxlbmRhci1maWx0ZXIuY29tcG9uZW50XCI7XHJcbmltcG9ydCB7IEFubmFXZWVrQ2FsZW5kYXJDb21wb25lbnQgfSBmcm9tIFwiLi9hbm5hLWRyb3Bkb3duLWxpYi9jb21wb25lbnRzL2FubmEtd2Vlay1jYWxlbmRhci1maWx0ZXIvYW5uYS13ZWVrLWNhbGVuZGFyLWZpbHRlci5jb21wb25lbnRcIjtcclxuaW1wb3J0IHsgQW5uYUNvbHVtbkNoZWNrYm94RmlsdGVyQ29tcG9uZW50IH0gZnJvbSBcIi4vYW5uYS1nZW5lcmljLXRhYmxlLWxpYi9jb21wb25lbnRzL2FubmEtY29sdW1uLWZpbHRlcnMvYW5uYS1jb2x1bW4tY2hlY2tib3gtZmlsdGVyL2FubmEtY29sdW1uLWNoZWNrYm94LWZpbHRlci5jb21wb25lbnRcIjtcclxuaW1wb3J0IHsgQW5uYUNvbHVtbkRhdGVSYW5nZUZpbHRlckNvbXBvbmVudCB9IGZyb20gXCIuL2FubmEtZ2VuZXJpYy10YWJsZS1saWIvY29tcG9uZW50cy9hbm5hLWNvbHVtbi1maWx0ZXJzL2FubmEtY29sdW1uLWRhdGUtcmFuZ2UtZmlsdGVyL2FubmEtY29sdW1uLWRhdGUtcmFuZ2UtZmlsdGVyLmNvbXBvbmVudFwiO1xyXG5pbXBvcnQgeyBBbm5hQ29sdW1uU2xpZGVyRmlsdGVyQ29tcG9uZW50IH0gZnJvbSBcIi4vYW5uYS1nZW5lcmljLXRhYmxlLWxpYi9jb21wb25lbnRzL2FubmEtY29sdW1uLWZpbHRlcnMvYW5uYS1jb2x1bW4tc2xpZGVyLWZpbHRlci9hbm5hLWNvbHVtbi1zbGlkZXItZmlsdGVyLmNvbXBvbmVudFwiO1xyXG5pbXBvcnQgeyBBbm5hQ29sdW1uVGltZUZpbHRlckNvbXBvbmVudCB9IGZyb20gXCIuL2FubmEtZ2VuZXJpYy10YWJsZS1saWIvY29tcG9uZW50cy9hbm5hLWNvbHVtbi1maWx0ZXJzL2FubmEtY29sdW1uLXRpbWUtZmlsdGVyL2FubmEtY29sdW1uLXRpbWUtZmlsdGVyLmNvbXBvbmVudFwiO1xyXG5pbXBvcnQgeyBBbm5hTm9uRWRpdGFibGVHZW5lcmljVGFibGVDb21wb25lbnQgfSBmcm9tIFwiLi9hbm5hLWdlbmVyaWMtdGFibGUtbGliL2NvbXBvbmVudHMvYW5uYS1ub24tZWRpdGFibGUtZ2VuZXJpYy10YWJsZS9hbm5hLW5vbi1lZGl0YWJsZS1nZW5lcmljLXRhYmxlLmNvbXBvbmVudFwiO1xyXG5pbXBvcnQgeyBBbm5hU29ydENvbXBvbmVudCB9IGZyb20gXCIuL2FubmEtZ2VuZXJpYy10YWJsZS1saWIvY29tcG9uZW50cy9hbm5hLXNvcnQvYW5uYS1zb3J0LmNvbXBvbmVudFwiO1xyXG5pbXBvcnQgeyBBbm5hVGFibGVWaXJ0dWFsU2Nyb2xsVmlld3BvcnRDb21wb25lbnQgfSBmcm9tIFwiLi9hbm5hLWdlbmVyaWMtdGFibGUtbGliL2NvbXBvbmVudHMvYW5uYS10YWJsZS12aXJ0dWFsLXNjcm9sbC12aWV3cG9ydC9hbm5hLXRhYmxlLXZpcnR1YWwtc2Nyb2xsLXZpZXdwb3J0LmNvbXBvbmVudFwiO1xyXG5pbXBvcnQgeyBBbm5hRml4ZWRSb3dTaXplVGFibGVWaXJ0dWFsU2Nyb2xsU3RyYXRlZ3lEaXJlY3RpdmUgfSBmcm9tIFwiLi9hbm5hLWdlbmVyaWMtdGFibGUtbGliL2RpcmVjdGl2ZXMvYW5uYS1maXhlZC1yb3ctc2l6ZS10YWJsZS12aXJ0dWFsLXNjcm9sbC1zdHJhdGVneVwiO1xyXG5pbXBvcnQgeyBBbm5hVmlydHVhbFRhYmxlRGlyZWN0aXZlIH0gZnJvbSBcIi4vYW5uYS1nZW5lcmljLXRhYmxlLWxpYi9kaXJlY3RpdmVzL2FubmEtdmlydHVhbC10YWJsZVwiO1xyXG5cclxuQE5nTW9kdWxlKHtcclxuICAgIGltcG9ydHM6IFtcclxuICAgICAgICBDb21tb25Nb2R1bGUsXHJcbiAgICAgICAgTmdiTW9kdWxlLFxyXG4gICAgICAgIEZvcm1zTW9kdWxlLFxyXG4gICAgICAgIE1hdFJhZGlvTW9kdWxlLFxyXG4gICAgICAgIE1hdEJ1dHRvblRvZ2dsZU1vZHVsZSxcclxuICAgICAgICBNYXRUYWJsZU1vZHVsZSxcclxuICAgICAgICBOZ3hTbGlkZXJNb2R1bGUsXHJcbiAgICAgICAgTmd4U2tlbGV0b25Mb2FkZXJNb2R1bGUsXHJcbiAgICAgICAgU2Nyb2xsaW5nTW9kdWxlLFxyXG4gICAgICAgIE5nQ2lyY2xlUHJvZ3Jlc3NNb2R1bGUuZm9yUm9vdCh7XHJcbiAgICAgICAgICAgIHJhZGl1czogMTAwLFxyXG4gICAgICAgICAgICBvdXRlclN0cm9rZVdpZHRoOiAxNixcclxuICAgICAgICAgICAgaW5uZXJTdHJva2VXaWR0aDogOCxcclxuICAgICAgICAgICAgb3V0ZXJTdHJva2VDb2xvcjogXCIjNzhDMDAwXCIsXHJcbiAgICAgICAgICAgIGlubmVyU3Ryb2tlQ29sb3I6IFwiI0M3RTU5NlwiLFxyXG4gICAgICAgICAgICBhbmltYXRpb25EdXJhdGlvbjogMzAwLFxyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIEFubmFOb0RhdGFDb21wb25lbnQsXHJcbiAgICAgICAgQW5uYUZpbHRlclNlYXJjaGVkVGV4dFBpcGUsXHJcbiAgICAgICAgQW5uYUNvbnZlcnRaZXJvT3JOdWxsT3JVbmRlZmluZWRQaXBlLFxyXG4gICAgICAgIEFubmFUeXBlb2ZEYXRhUGlwZSxcclxuICAgICAgICBBbm5hRmlsdGVyU2VhcmNoZWRUZXh0UGlwZSxcclxuICAgICAgICBBbm5hUmVwbGFjZUNoYXJQaXBlLFxyXG4gICAgICAgIEFubmFCdXllckFwcHJvdmFsSWNvblRlbXBsYXRlQ29tcG9uZW50LFxyXG4gICAgICAgIEFubmFMaXZlSWNvblRlbXBsYXRlQ29tcG9uZW50LFxyXG4gICAgICAgIEFubmFOb3RpZnlJY29uVGVtcGxhdGVDb21wb25lbnQsXHJcbiAgICAgICAgQW5uYVBheUZvclBlcmZvcm1hbmNlSWNvblRlbXBsYXRlQ29tcG9uZW50LFxyXG4gICAgICAgIEFubmFSZWplY3RlZEljb25UZW1wbGF0ZUNvbXBvbmVudCxcclxuICAgICAgICBTaG93RWxsaXBzaXNUZXh0T25Ib3ZlckRpcmVjdGl2ZSxcclxuICAgICAgICBBbm5hSWNvbkNvbHVtbkNvbXBvbmVudCxcclxuICAgICAgICBBbm5hV2Vla0NhbGVuZGFyQ29tcG9uZW50LFxyXG4gICAgICAgIEFubmFDYWxlbmRhckZpbHRlckNvbXBvbmVudCxcclxuICAgICAgICBBbm5hU29ydENvbXBvbmVudCxcclxuICAgICAgICBBbm5hVmlydHVhbFRhYmxlRGlyZWN0aXZlLFxyXG4gICAgICAgIEFubmFOb25FZGl0YWJsZUdlbmVyaWNUYWJsZUNvbXBvbmVudCxcclxuICAgICAgICBBbm5hVGFibGVWaXJ0dWFsU2Nyb2xsVmlld3BvcnRDb21wb25lbnQsXHJcbiAgICAgICAgQW5uYUZpeGVkUm93U2l6ZVRhYmxlVmlydHVhbFNjcm9sbFN0cmF0ZWd5RGlyZWN0aXZlLFxyXG4gICAgICAgIERpZ2l0T25seURpcmVjdGl2ZSxcclxuICAgICAgICBBbm5hQ29sdW1uRGF0ZVJhbmdlRmlsdGVyQ29tcG9uZW50LFxyXG4gICAgICAgIEFubmFDb2x1bW5UaW1lRmlsdGVyQ29tcG9uZW50LFxyXG4gICAgICAgIEFubmFDb2x1bW5DaGVja2JveEZpbHRlckNvbXBvbmVudCxcclxuICAgICAgICBBbm5hRGVsZXRlZE9yZGVySWNvblRlbXBsYXRlQ29tcG9uZW50LFxyXG4gICAgICAgIEFubmFDb2x1bW5TbGlkZXJGaWx0ZXJDb21wb25lbnQsXHJcbiAgICAgICAgQW5uYURhdGVGb3JtYXR0ZXJQaXBlLFxyXG4gICAgICAgIEFubmFDb252ZXJ0QXJyYXlUb0NvbW1hU2VwZXJhdGVkVmFsdWUsXHJcbiAgICAgICAgRml4ZWRSb3dzUG9wdXBUYWJsZURpcmVjdGl2ZSxcclxuICAgICAgICBBbm5hRXN0SWNvblRlbXBsYXRlQ29tcG9uZW50LFxyXG4gICAgXSxcclxuICAgIGV4cG9ydHM6IFtcclxuICAgICAgICBBbm5hTm9EYXRhQ29tcG9uZW50LFxyXG4gICAgICAgIEFubmFGaWx0ZXJTZWFyY2hlZFRleHRQaXBlLFxyXG4gICAgICAgIEFubmFDb252ZXJ0WmVyb09yTnVsbE9yVW5kZWZpbmVkUGlwZSxcclxuICAgICAgICBBbm5hVHlwZW9mRGF0YVBpcGUsXHJcbiAgICAgICAgQW5uYVJlcGxhY2VDaGFyUGlwZSxcclxuICAgICAgICBBbm5hRmlsdGVyU2VhcmNoZWRUZXh0UGlwZSxcclxuICAgICAgICBBbm5hQnV5ZXJBcHByb3ZhbEljb25UZW1wbGF0ZUNvbXBvbmVudCxcclxuICAgICAgICBBbm5hTGl2ZUljb25UZW1wbGF0ZUNvbXBvbmVudCxcclxuICAgICAgICBBbm5hTm90aWZ5SWNvblRlbXBsYXRlQ29tcG9uZW50LFxyXG4gICAgICAgIEFubmFQYXlGb3JQZXJmb3JtYW5jZUljb25UZW1wbGF0ZUNvbXBvbmVudCxcclxuICAgICAgICBBbm5hUmVqZWN0ZWRJY29uVGVtcGxhdGVDb21wb25lbnQsXHJcbiAgICAgICAgU2hvd0VsbGlwc2lzVGV4dE9uSG92ZXJEaXJlY3RpdmUsXHJcbiAgICAgICAgQW5uYUljb25Db2x1bW5Db21wb25lbnQsXHJcbiAgICAgICAgQW5uYVdlZWtDYWxlbmRhckNvbXBvbmVudCxcclxuICAgICAgICBBbm5hQ2FsZW5kYXJGaWx0ZXJDb21wb25lbnQsXHJcbiAgICAgICAgQW5uYVNvcnRDb21wb25lbnQsXHJcbiAgICAgICAgQW5uYVZpcnR1YWxUYWJsZURpcmVjdGl2ZSxcclxuICAgICAgICBBbm5hTm9uRWRpdGFibGVHZW5lcmljVGFibGVDb21wb25lbnQsXHJcbiAgICAgICAgQW5uYVRhYmxlVmlydHVhbFNjcm9sbFZpZXdwb3J0Q29tcG9uZW50LFxyXG4gICAgICAgIEFubmFDb2x1bW5EYXRlUmFuZ2VGaWx0ZXJDb21wb25lbnQsXHJcbiAgICAgICAgQW5uYUNvbHVtblRpbWVGaWx0ZXJDb21wb25lbnQsXHJcbiAgICAgICAgQW5uYUNvbHVtbkNoZWNrYm94RmlsdGVyQ29tcG9uZW50LFxyXG4gICAgICAgIEFubmFGaXhlZFJvd1NpemVUYWJsZVZpcnR1YWxTY3JvbGxTdHJhdGVneURpcmVjdGl2ZSxcclxuICAgICAgICBEaWdpdE9ubHlEaXJlY3RpdmUsXHJcbiAgICAgICAgQW5uYURlbGV0ZWRPcmRlckljb25UZW1wbGF0ZUNvbXBvbmVudCxcclxuICAgICAgICBBbm5hQ29sdW1uU2xpZGVyRmlsdGVyQ29tcG9uZW50LFxyXG4gICAgICAgIEFubmFEYXRlRm9ybWF0dGVyUGlwZSxcclxuICAgICAgICBBbm5hQ29udmVydEFycmF5VG9Db21tYVNlcGVyYXRlZFZhbHVlLFxyXG4gICAgICAgIEZpeGVkUm93c1BvcHVwVGFibGVEaXJlY3RpdmUsXHJcbiAgICBdLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgQW5uYUNvcmVNb2R1bGUge31cclxuIl19
|
|
@@ -0,0 +1,353 @@
|
|
|
1
|
+
/* eslint-disable no-underscore-dangle */
|
|
2
|
+
/**
|
|
3
|
+
* @license
|
|
4
|
+
* Copyright Google LLC All Rights Reserved.
|
|
5
|
+
*
|
|
6
|
+
* Use of this source code is governed by an MIT-style license that can be
|
|
7
|
+
* found in the LICENSE file at https://angular.io/license
|
|
8
|
+
*/
|
|
9
|
+
import { Directionality } from "@angular/cdk/bidi";
|
|
10
|
+
import { CdkScrollable, CdkVirtualScrollViewport, ScrollDispatcher, ViewportRuler, VIRTUAL_SCROLL_STRATEGY, } from "@angular/cdk/scrolling";
|
|
11
|
+
import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef, Inject, Input, NgZone, Optional, Output, ViewChild, ViewEncapsulation, } from "@angular/core";
|
|
12
|
+
import { animationFrameScheduler, asapScheduler, Observable, Subject, Subscription } from "rxjs";
|
|
13
|
+
import { auditTime, startWith, takeUntil } from "rxjs/operators";
|
|
14
|
+
import { AnnaGtHelperService } from "../../../anna-core-shared-lib/services/anna-generic-table.service";
|
|
15
|
+
import * as i0 from "@angular/core";
|
|
16
|
+
import * as i1 from "@angular/cdk/bidi";
|
|
17
|
+
import * as i2 from "@angular/cdk/scrolling";
|
|
18
|
+
import * as i3 from "../../../anna-core-shared-lib/services/anna-generic-table.service";
|
|
19
|
+
/** Checks if the given ranges are equal. */
|
|
20
|
+
function rangesEqual(r1, r2) {
|
|
21
|
+
return r1.start === r2.start && r1.end === r2.end;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Scheduler to be used for scroll events. Needs to fall back to
|
|
25
|
+
* something that doesn't rely on requestAnimationFrame on environments
|
|
26
|
+
* that don't support it (e.g. server-side rendering).
|
|
27
|
+
*/
|
|
28
|
+
const SCROLL_SCHEDULER = typeof requestAnimationFrame !== "undefined" ? animationFrameScheduler : asapScheduler;
|
|
29
|
+
/**
|
|
30
|
+
* A viewport that virtualizes its scrolling with the help of `CdkVirtualForOf`.
|
|
31
|
+
* Uses `top: #px` instead of `transform: translateY(#px)` like the cdk virtual scroll viewport does
|
|
32
|
+
* which avoids flickering of elements in the transformed container with `position: sticky`.
|
|
33
|
+
*/
|
|
34
|
+
export class AnnaTableVirtualScrollViewportComponent extends CdkScrollable {
|
|
35
|
+
/** The direction the viewport scrolls. */
|
|
36
|
+
get orientation() {
|
|
37
|
+
return this._orientation;
|
|
38
|
+
}
|
|
39
|
+
set orientation(orientation) {
|
|
40
|
+
if (this._orientation !== orientation) {
|
|
41
|
+
this._orientation = orientation;
|
|
42
|
+
this._calculateSpacerSize();
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
constructor(elementRef, _changeDetectorRef, ngZone, _scrollStrategy, dir, scrollDispatcher, viewportRuler, annaGtService) {
|
|
46
|
+
super(elementRef, scrollDispatcher, ngZone, dir);
|
|
47
|
+
this.elementRef = elementRef;
|
|
48
|
+
this._changeDetectorRef = _changeDetectorRef;
|
|
49
|
+
this._scrollStrategy = _scrollStrategy;
|
|
50
|
+
this.annaGtService = annaGtService;
|
|
51
|
+
/** Emits when the viewport is detached from a CdkVirtualForOf. */
|
|
52
|
+
this._detachedSubject = new Subject();
|
|
53
|
+
/** Emits when the rendered range changes. */
|
|
54
|
+
this._renderedRangeSubject = new Subject();
|
|
55
|
+
this._orientation = "vertical";
|
|
56
|
+
// Note: we don't use the typical EventEmitter here because we need to subscribe to the scroll
|
|
57
|
+
// strategy lazily (i.e. only if the user is actually listening to the events). We do this because
|
|
58
|
+
// depending on how the strategy calculates the scrolled index, it may come at a cost to
|
|
59
|
+
// performance.
|
|
60
|
+
/** Emits when the index of the first element visible in the viewport changes. */
|
|
61
|
+
this.scrolledIndexChange = new Observable((observer) => this._scrollStrategy.scrolledIndexChange.subscribe((index) => Promise.resolve().then(() => this.ngZone.run(() => observer.next(index)))));
|
|
62
|
+
/** A stream that emits whenever the rendered range changes. */
|
|
63
|
+
this.renderedRangeStream = this._renderedRangeSubject;
|
|
64
|
+
/**
|
|
65
|
+
* The total size of all content (in pixels), including content that is not currently rendered.
|
|
66
|
+
*/
|
|
67
|
+
this._totalContentSize = 0;
|
|
68
|
+
/** A string representing the `style.width` property value to be used for the spacer element. */
|
|
69
|
+
this._totalContentWidth = "";
|
|
70
|
+
/** A string representing the `style.height` property value to be used for the spacer element. */
|
|
71
|
+
this._totalContentHeight = "";
|
|
72
|
+
/** The currently rendered range of indices. */
|
|
73
|
+
this._renderedRange = { start: 0, end: 0 };
|
|
74
|
+
/** The length of the data bound to this viewport (in number of items). */
|
|
75
|
+
this._dataLength = 0;
|
|
76
|
+
/** The size of the viewport (in pixels). */
|
|
77
|
+
this._viewportSize = 0;
|
|
78
|
+
/** The last rendered content offset that was set. */
|
|
79
|
+
this._renderedContentOffset = 0;
|
|
80
|
+
/**
|
|
81
|
+
* Whether the last rendered content offset was to the end of the content (and therefore needs to
|
|
82
|
+
* be rewritten as an offset to the start of the content).
|
|
83
|
+
*/
|
|
84
|
+
this._renderedContentOffsetNeedsRewrite = false;
|
|
85
|
+
/** Whether there is a pending change detection cycle. */
|
|
86
|
+
this._isChangeDetectionPending = false;
|
|
87
|
+
/** A list of functions to run after the next change detection cycle. */
|
|
88
|
+
this._runAfterChangeDetection = [];
|
|
89
|
+
/** Subscription to changes in the viewport size. */
|
|
90
|
+
this._viewportChanges = Subscription.EMPTY;
|
|
91
|
+
if (!_scrollStrategy) {
|
|
92
|
+
throw Error('Error: cdk-virtual-scroll-viewport requires the "itemSize" property to be set.');
|
|
93
|
+
}
|
|
94
|
+
this._viewportChanges = viewportRuler.change().subscribe(() => {
|
|
95
|
+
this.checkViewportSize();
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
ngOnInit() {
|
|
99
|
+
super.ngOnInit();
|
|
100
|
+
// It's still too early to measure the viewport at this point. Deferring with a promise allows
|
|
101
|
+
// the Viewport to be rendered with the correct size before we measure. We run this outside the
|
|
102
|
+
// zone to avoid causing more change detection cycles. We handle the change detection loop
|
|
103
|
+
// ourselves instead.
|
|
104
|
+
this.ngZone.runOutsideAngular(() => Promise.resolve().then(() => {
|
|
105
|
+
this._measureViewportSize();
|
|
106
|
+
this._scrollStrategy.attach(this);
|
|
107
|
+
this.elementScrolled()
|
|
108
|
+
.pipe(
|
|
109
|
+
// Start off with a fake scroll event so we properly detect our initial position.
|
|
110
|
+
startWith(null),
|
|
111
|
+
// Collect multiple events into one until the next animation frame. This way if
|
|
112
|
+
// there are multiple scroll events in the same frame we only need to recheck
|
|
113
|
+
// our layout once.
|
|
114
|
+
auditTime(0, SCROLL_SCHEDULER))
|
|
115
|
+
.subscribe(() => {
|
|
116
|
+
this._scrollStrategy.onContentScrolled();
|
|
117
|
+
this.annaGtService.virtualScrollSubject.next(true);
|
|
118
|
+
});
|
|
119
|
+
this._markChangeDetectionNeeded();
|
|
120
|
+
}));
|
|
121
|
+
}
|
|
122
|
+
ngOnDestroy() {
|
|
123
|
+
this.detach();
|
|
124
|
+
this._scrollStrategy.detach();
|
|
125
|
+
// Complete all subjects
|
|
126
|
+
this._renderedRangeSubject.complete();
|
|
127
|
+
this._detachedSubject.complete();
|
|
128
|
+
this._viewportChanges.unsubscribe();
|
|
129
|
+
super.ngOnDestroy();
|
|
130
|
+
}
|
|
131
|
+
/** Attaches a `CdkVirtualScrollRepeater` to this viewport. */
|
|
132
|
+
attach(forOf) {
|
|
133
|
+
if (this._forOf) {
|
|
134
|
+
throw Error("CdkVirtualScrollViewport is already attached.");
|
|
135
|
+
}
|
|
136
|
+
// Subscribe to the data stream of the CdkVirtualForOf to keep track of when the data length
|
|
137
|
+
// changes. Run outside the zone to avoid triggering change detection, since we're managing the
|
|
138
|
+
// change detection loop ourselves.
|
|
139
|
+
this.ngZone.runOutsideAngular(() => {
|
|
140
|
+
this._forOf = forOf;
|
|
141
|
+
this._forOf.dataStream.pipe(takeUntil(this._detachedSubject)).subscribe((data) => {
|
|
142
|
+
const newLength = data.length;
|
|
143
|
+
if (newLength !== this._dataLength) {
|
|
144
|
+
this._dataLength = newLength;
|
|
145
|
+
this._scrollStrategy.onDataLengthChanged();
|
|
146
|
+
}
|
|
147
|
+
this._doChangeDetection();
|
|
148
|
+
});
|
|
149
|
+
});
|
|
150
|
+
}
|
|
151
|
+
/** Detaches the current `CdkVirtualForOf`. */
|
|
152
|
+
detach() {
|
|
153
|
+
this._forOf = null;
|
|
154
|
+
this._detachedSubject.next();
|
|
155
|
+
}
|
|
156
|
+
/** Gets the length of the data bound to this viewport (in number of items). */
|
|
157
|
+
getDataLength() {
|
|
158
|
+
return this._dataLength;
|
|
159
|
+
}
|
|
160
|
+
/** Gets the size of the viewport (in pixels). */
|
|
161
|
+
getViewportSize() {
|
|
162
|
+
return this._viewportSize;
|
|
163
|
+
}
|
|
164
|
+
// TODO(mmalerba): This is technically out of sync with what's really rendered until a render
|
|
165
|
+
// cycle happens. I'm being careful to only call it after the render cycle is complete and before
|
|
166
|
+
// setting it to something else, but its error prone and should probably be split into
|
|
167
|
+
// `pendingRange` and `renderedRange`, the latter reflecting whats actually in the DOM.
|
|
168
|
+
/** Get the current rendered range of items. */
|
|
169
|
+
getRenderedRange() {
|
|
170
|
+
return this._renderedRange;
|
|
171
|
+
}
|
|
172
|
+
/**
|
|
173
|
+
* Sets the total size of all content (in pixels), including content that is not currently
|
|
174
|
+
* rendered.
|
|
175
|
+
*/
|
|
176
|
+
setTotalContentSize(size) {
|
|
177
|
+
if (this._totalContentSize !== size) {
|
|
178
|
+
this._totalContentSize = size;
|
|
179
|
+
this._calculateSpacerSize();
|
|
180
|
+
this._markChangeDetectionNeeded();
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
/** Sets the currently rendered range of indices. */
|
|
184
|
+
setRenderedRange(range) {
|
|
185
|
+
if (!rangesEqual(this._renderedRange, range)) {
|
|
186
|
+
this._renderedRangeSubject.next((this._renderedRange = range));
|
|
187
|
+
this._markChangeDetectionNeeded(() => this._scrollStrategy.onContentRendered());
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
/**
|
|
191
|
+
* Gets the offset from the start of the viewport to the start of the rendered data (in pixels).
|
|
192
|
+
*/
|
|
193
|
+
getOffsetToRenderedContentStart() {
|
|
194
|
+
return this._renderedContentOffsetNeedsRewrite ? null : this._renderedContentOffset;
|
|
195
|
+
}
|
|
196
|
+
/**
|
|
197
|
+
* Sets the offset from the start of the viewport to either the start or end of the rendered data
|
|
198
|
+
* (in pixels).
|
|
199
|
+
*/
|
|
200
|
+
setRenderedContentOffset(offset) {
|
|
201
|
+
const top = `${Number(offset)}px`;
|
|
202
|
+
this._renderedContentOffset = offset;
|
|
203
|
+
if (this._renderedContentTransform !== top) {
|
|
204
|
+
// We know this value is safe because we parse `offset` with `Number()` before passing it
|
|
205
|
+
// into the string.
|
|
206
|
+
this._renderedContentTransform = top;
|
|
207
|
+
this._markChangeDetectionNeeded(() => {
|
|
208
|
+
if (this._renderedContentOffsetNeedsRewrite) {
|
|
209
|
+
this._renderedContentOffset -= this.measureRenderedContentSize();
|
|
210
|
+
this._renderedContentOffsetNeedsRewrite = false;
|
|
211
|
+
this.setRenderedContentOffset(this._renderedContentOffset);
|
|
212
|
+
}
|
|
213
|
+
else {
|
|
214
|
+
this._scrollStrategy.onRenderedOffsetChanged();
|
|
215
|
+
}
|
|
216
|
+
});
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
/**
|
|
220
|
+
* Scrolls to the given offset from the start of the viewport. Please note that this is not always
|
|
221
|
+
* the same as setting `scrollTop` or `scrollLeft`. In a horizontal viewport with right-to-left
|
|
222
|
+
* direction, this would be the equivalent of setting a fictional `scrollRight` property.
|
|
223
|
+
* @param offset The offset to scroll to.
|
|
224
|
+
* @param behavior The ScrollBehavior to use when scrolling. Default is behavior is `auto`.
|
|
225
|
+
*/
|
|
226
|
+
scrollToOffset(offset, behavior = "auto") {
|
|
227
|
+
const options = { behavior, top: offset };
|
|
228
|
+
this.scrollTo(options);
|
|
229
|
+
}
|
|
230
|
+
/**
|
|
231
|
+
* Scrolls to the offset for the given index.
|
|
232
|
+
* @param index The index of the element to scroll to.
|
|
233
|
+
* @param behavior The ScrollBehavior to use when scrolling. Default is behavior is `auto`.
|
|
234
|
+
*/
|
|
235
|
+
scrollToIndex(index, behavior = "auto") {
|
|
236
|
+
this._scrollStrategy.scrollToIndex(index, behavior);
|
|
237
|
+
}
|
|
238
|
+
/**
|
|
239
|
+
* Gets the current scroll offset from the start of the viewport (in pixels).
|
|
240
|
+
* @param from The edge to measure the offset from. Defaults to 'top' in vertical mode and 'start'
|
|
241
|
+
* in horizontal mode.
|
|
242
|
+
*/
|
|
243
|
+
// CHANGES@ANNALIB added override to functions
|
|
244
|
+
measureScrollOffset(from) {
|
|
245
|
+
return from ? super.measureScrollOffset(from) : super.measureScrollOffset("top");
|
|
246
|
+
}
|
|
247
|
+
/** Measure the combined size of all of the rendered items. */
|
|
248
|
+
measureRenderedContentSize() {
|
|
249
|
+
const contentEl = this._contentWrapper.nativeElement;
|
|
250
|
+
return contentEl.offsetHeight;
|
|
251
|
+
}
|
|
252
|
+
/**
|
|
253
|
+
* Measure the total combined size of the given range. Throws if the range includes items that are
|
|
254
|
+
* not rendered.
|
|
255
|
+
*/
|
|
256
|
+
measureRangeSize(range) {
|
|
257
|
+
if (!this._forOf) {
|
|
258
|
+
return 0;
|
|
259
|
+
}
|
|
260
|
+
return this._forOf.measureRangeSize(range, this.orientation);
|
|
261
|
+
}
|
|
262
|
+
/** Update the viewport dimensions and re-render. */
|
|
263
|
+
checkViewportSize() {
|
|
264
|
+
// TODO: Cleanup later when add logic for handling content resize
|
|
265
|
+
this._measureViewportSize();
|
|
266
|
+
this._scrollStrategy.onDataLengthChanged();
|
|
267
|
+
}
|
|
268
|
+
/** Measure the viewport size. */
|
|
269
|
+
_measureViewportSize() {
|
|
270
|
+
const viewportEl = this.elementRef.nativeElement;
|
|
271
|
+
this._viewportSize = viewportEl.clientHeight;
|
|
272
|
+
}
|
|
273
|
+
/** Queue up change detection to run. */
|
|
274
|
+
_markChangeDetectionNeeded(runAfter) {
|
|
275
|
+
if (runAfter) {
|
|
276
|
+
this._runAfterChangeDetection.push(runAfter);
|
|
277
|
+
}
|
|
278
|
+
// Use a Promise to batch together calls to `_doChangeDetection`. This way if we set a bunch of
|
|
279
|
+
// properties sequentially we only have to run `_doChangeDetection` once at the end.
|
|
280
|
+
if (!this._isChangeDetectionPending) {
|
|
281
|
+
this._isChangeDetectionPending = true;
|
|
282
|
+
this.ngZone.runOutsideAngular(() => Promise.resolve().then(() => {
|
|
283
|
+
this._doChangeDetection();
|
|
284
|
+
}));
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
/** Run change detection. */
|
|
288
|
+
_doChangeDetection() {
|
|
289
|
+
this._isChangeDetectionPending = false;
|
|
290
|
+
// Apply the content transform. The transform can't be set via an Angular binding because
|
|
291
|
+
// bypassSecurityTrustStyle is banned in Google. However the value is safe, it's composed of
|
|
292
|
+
// string literals, a variable that can only be 'X' or 'Y', and user input that is run through
|
|
293
|
+
// the `Number` function first to coerce it to a numeric value.
|
|
294
|
+
this._contentWrapper.nativeElement.style.top = this._renderedContentTransform;
|
|
295
|
+
// Apply changes to Angular bindings. Note: We must call `markForCheck` to run change detection
|
|
296
|
+
// from the root, since the repeated items are content projected in. Calling `detectChanges`
|
|
297
|
+
// instead does not properly check the projected content.
|
|
298
|
+
this.ngZone.run(() => this._changeDetectorRef.markForCheck());
|
|
299
|
+
const runAfterChangeDetection = this._runAfterChangeDetection;
|
|
300
|
+
this._runAfterChangeDetection = [];
|
|
301
|
+
runAfterChangeDetection.forEach((fn) => {
|
|
302
|
+
fn();
|
|
303
|
+
});
|
|
304
|
+
}
|
|
305
|
+
/** Calculates the `style.width` and `style.height` for the spacer element. */
|
|
306
|
+
_calculateSpacerSize() {
|
|
307
|
+
this._totalContentHeight = `${this._totalContentSize}px`;
|
|
308
|
+
this._totalContentWidth = "";
|
|
309
|
+
}
|
|
310
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: AnnaTableVirtualScrollViewportComponent, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: i0.NgZone }, { token: VIRTUAL_SCROLL_STRATEGY, optional: true }, { token: i1.Directionality, optional: true }, { token: i2.ScrollDispatcher }, { token: i2.ViewportRuler }, { token: i3.AnnaGtHelperService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
311
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: AnnaTableVirtualScrollViewportComponent, isStandalone: true, selector: "anna-core-table-virtual-scroll-viewport", inputs: { orientation: "orientation" }, outputs: { scrolledIndexChange: "scrolledIndexChange" }, host: { properties: { "class.anna-table-virtual-scroll-orientation-horizontal": "orientation === \"horizontal\"", "class.anna-table-virtual-scroll-orientation-vertical": "orientation !== \"horizontal\"" }, classAttribute: "anna-table-virtual-scroll-viewport" }, providers: [
|
|
312
|
+
{
|
|
313
|
+
provide: CdkScrollable,
|
|
314
|
+
useExisting: AnnaTableVirtualScrollViewportComponent,
|
|
315
|
+
},
|
|
316
|
+
{
|
|
317
|
+
provide: CdkVirtualScrollViewport,
|
|
318
|
+
useExisting: AnnaTableVirtualScrollViewportComponent,
|
|
319
|
+
},
|
|
320
|
+
], viewQueries: [{ propertyName: "_contentWrapper", first: true, predicate: ["contentWrapper"], descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: "<!--\n Wrap the rendered content in an element that will be used to offset it based on the scroll\n position.\n-->\n<div\n #contentWrapper\n class=\"anna-table-virtual-scroll-content-wrapper\"\n>\n <ng-content></ng-content>\n</div>\n<!--\n Spacer used to force the scrolling container to the correct size for the *total* number of items\n so that the scrollbar captures the size of the entire data set.\n-->\n<div\n class=\"app-table-virtual-scroll-spacer\"\n [style.width]=\"_totalContentWidth\"\n [style.height]=\"_totalContentHeight\"\n></div>\n", styles: ["anna-table-virtual-scroll-viewport{display:block;position:relative;overflow:auto;contain:strict;will-change:scroll-position;-webkit-overflow-scrolling:touch}.anna-table-virtual-scroll-content-wrapper{position:absolute;top:0;left:0;contain:content}[dir=rtl] .anna-table-virtual-scroll-content-wrapper{right:0;left:auto}.app-table-virtual-scroll-orientation-horizontal .anna-table-virtual-scroll-content-wrapper{min-height:100%}.app-table-virtual-scroll-orientation-horizontal .anna-table-virtual-scroll-content-wrapper>dl:not([cdkVirtualFor]),.app-table-virtual-scroll-orientation-horizontal .anna-table-virtual-scroll-content-wrapper>ol:not([cdkVirtualFor]),.app-table-virtual-scroll-orientation-horizontal .anna-table-virtual-scroll-content-wrapper>table:not([cdkVirtualFor]),.app-table-virtual-scroll-orientation-horizontal .anna-table-virtual-scroll-content-wrapper>ul:not([cdkVirtualFor]){padding-left:0;padding-right:0;margin-left:0;margin-right:0;border-left-width:0;border-right-width:0;outline:none}.app-table-virtual-scroll-orientation-vertical .anna-table-virtual-scroll-content-wrapper{min-width:100%}.app-table-virtual-scroll-orientation-vertical .anna-table-virtual-scroll-content-wrapper>dl:not([cdkVirtualFor]),.app-table-virtual-scroll-orientation-vertical .anna-table-virtual-scroll-content-wrapper>ol:not([cdkVirtualFor]),.app-table-virtual-scroll-orientation-vertical .anna-table-virtual-scroll-content-wrapper>table:not([cdkVirtualFor]),.app-table-virtual-scroll-orientation-vertical .anna-table-virtual-scroll-content-wrapper>ul:not([cdkVirtualFor]){padding-top:0;padding-bottom:0;margin-top:0;margin-bottom:0;border-top-width:0;border-bottom-width:0;outline:none}.app-table-virtual-scroll-spacer{position:absolute;top:0;left:0;height:1px;width:1px;transform-origin:0 0}[dir=rtl] .app-table-virtual-scroll-spacer{right:0;left:auto;transform-origin:100% 0}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
321
|
+
}
|
|
322
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: AnnaTableVirtualScrollViewportComponent, decorators: [{
|
|
323
|
+
type: Component,
|
|
324
|
+
args: [{ selector: "anna-core-table-virtual-scroll-viewport", host: {
|
|
325
|
+
class: "anna-table-virtual-scroll-viewport",
|
|
326
|
+
"[class.anna-table-virtual-scroll-orientation-horizontal]": 'orientation === "horizontal"',
|
|
327
|
+
"[class.anna-table-virtual-scroll-orientation-vertical]": 'orientation !== "horizontal"',
|
|
328
|
+
}, encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, providers: [
|
|
329
|
+
{
|
|
330
|
+
provide: CdkScrollable,
|
|
331
|
+
useExisting: AnnaTableVirtualScrollViewportComponent,
|
|
332
|
+
},
|
|
333
|
+
{
|
|
334
|
+
provide: CdkVirtualScrollViewport,
|
|
335
|
+
useExisting: AnnaTableVirtualScrollViewportComponent,
|
|
336
|
+
},
|
|
337
|
+
], standalone: true, template: "<!--\n Wrap the rendered content in an element that will be used to offset it based on the scroll\n position.\n-->\n<div\n #contentWrapper\n class=\"anna-table-virtual-scroll-content-wrapper\"\n>\n <ng-content></ng-content>\n</div>\n<!--\n Spacer used to force the scrolling container to the correct size for the *total* number of items\n so that the scrollbar captures the size of the entire data set.\n-->\n<div\n class=\"app-table-virtual-scroll-spacer\"\n [style.width]=\"_totalContentWidth\"\n [style.height]=\"_totalContentHeight\"\n></div>\n", styles: ["anna-table-virtual-scroll-viewport{display:block;position:relative;overflow:auto;contain:strict;will-change:scroll-position;-webkit-overflow-scrolling:touch}.anna-table-virtual-scroll-content-wrapper{position:absolute;top:0;left:0;contain:content}[dir=rtl] .anna-table-virtual-scroll-content-wrapper{right:0;left:auto}.app-table-virtual-scroll-orientation-horizontal .anna-table-virtual-scroll-content-wrapper{min-height:100%}.app-table-virtual-scroll-orientation-horizontal .anna-table-virtual-scroll-content-wrapper>dl:not([cdkVirtualFor]),.app-table-virtual-scroll-orientation-horizontal .anna-table-virtual-scroll-content-wrapper>ol:not([cdkVirtualFor]),.app-table-virtual-scroll-orientation-horizontal .anna-table-virtual-scroll-content-wrapper>table:not([cdkVirtualFor]),.app-table-virtual-scroll-orientation-horizontal .anna-table-virtual-scroll-content-wrapper>ul:not([cdkVirtualFor]){padding-left:0;padding-right:0;margin-left:0;margin-right:0;border-left-width:0;border-right-width:0;outline:none}.app-table-virtual-scroll-orientation-vertical .anna-table-virtual-scroll-content-wrapper{min-width:100%}.app-table-virtual-scroll-orientation-vertical .anna-table-virtual-scroll-content-wrapper>dl:not([cdkVirtualFor]),.app-table-virtual-scroll-orientation-vertical .anna-table-virtual-scroll-content-wrapper>ol:not([cdkVirtualFor]),.app-table-virtual-scroll-orientation-vertical .anna-table-virtual-scroll-content-wrapper>table:not([cdkVirtualFor]),.app-table-virtual-scroll-orientation-vertical .anna-table-virtual-scroll-content-wrapper>ul:not([cdkVirtualFor]){padding-top:0;padding-bottom:0;margin-top:0;margin-bottom:0;border-top-width:0;border-bottom-width:0;outline:none}.app-table-virtual-scroll-spacer{position:absolute;top:0;left:0;height:1px;width:1px;transform-origin:0 0}[dir=rtl] .app-table-virtual-scroll-spacer{right:0;left:auto;transform-origin:100% 0}\n"] }]
|
|
338
|
+
}], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: i0.NgZone }, { type: undefined, decorators: [{
|
|
339
|
+
type: Optional
|
|
340
|
+
}, {
|
|
341
|
+
type: Inject,
|
|
342
|
+
args: [VIRTUAL_SCROLL_STRATEGY]
|
|
343
|
+
}] }, { type: i1.Directionality, decorators: [{
|
|
344
|
+
type: Optional
|
|
345
|
+
}] }, { type: i2.ScrollDispatcher }, { type: i2.ViewportRuler }, { type: i3.AnnaGtHelperService }]; }, propDecorators: { orientation: [{
|
|
346
|
+
type: Input
|
|
347
|
+
}], scrolledIndexChange: [{
|
|
348
|
+
type: Output
|
|
349
|
+
}], _contentWrapper: [{
|
|
350
|
+
type: ViewChild,
|
|
351
|
+
args: ["contentWrapper", { static: true }]
|
|
352
|
+
}] } });
|
|
353
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5uYS10YWJsZS12aXJ0dWFsLXNjcm9sbC12aWV3cG9ydC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbm5hLWNvcmUvc3JjL2xpYi9hbm5hLWdlbmVyaWMtdGFibGUtbGliL2NvbXBvbmVudHMvYW5uYS10YWJsZS12aXJ0dWFsLXNjcm9sbC12aWV3cG9ydC9hbm5hLXRhYmxlLXZpcnR1YWwtc2Nyb2xsLXZpZXdwb3J0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FubmEtY29yZS9zcmMvbGliL2FubmEtZ2VuZXJpYy10YWJsZS1saWIvY29tcG9uZW50cy9hbm5hLXRhYmxlLXZpcnR1YWwtc2Nyb2xsLXZpZXdwb3J0L2FubmEtdGFibGUtdmlydHVhbC1zY3JvbGwtdmlld3BvcnQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEseUNBQXlDO0FBQ3pDOzs7Ozs7R0FNRztBQUVILE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUVuRCxPQUFPLEVBQ0gsYUFBYSxFQUViLHdCQUF3QixFQUV4QixnQkFBZ0IsRUFDaEIsYUFBYSxFQUNiLHVCQUF1QixHQUUxQixNQUFNLHdCQUF3QixDQUFDO0FBQ2hDLE9BQU8sRUFDSCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxVQUFVLEVBQ1YsTUFBTSxFQUNOLEtBQUssRUFDTCxNQUFNLEVBR04sUUFBUSxFQUNSLE1BQU0sRUFDTixTQUFTLEVBQ1QsaUJBQWlCLEdBQ3BCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxhQUFhLEVBQUUsVUFBVSxFQUFZLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDM0csT0FBTyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLE1B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RnBDLHVCQUF1QjttR0F6RjFCLHVDQUF1Qyw2YkFackM7WUFDUDtnQkFDSSxPQUFPLEVBQUUsYUFBYTtnQkFDdEIsV0FBVyxFQUFFLHVDQUF1QzthQUN2RDtZQUNEO2dCQUNJLE9BQU8sRUFBRSx3QkFBd0I7Z0JBQ2pDLFdBQVcsRUFBRSx1Q0FBdUM7YUFDdkQ7U0FDSixrTEM5RUwsNGpCQW1CQTs7NEZEOERhLHVDQUF1QztrQkF2Qm5ELFNBQVM7K0JBQ0kseUNBQXlDLFFBRzdDO3dCQUNGLEtBQUssRUFBRSxvQ0FBb0M7d0JBQzNDLDBEQUEwRCxFQUFFLDhCQUE4Qjt3QkFDMUYsd0RBQXdELEVBQUUsOEJBQThCO3FCQUMzRixpQkFDYyxpQkFBaUIsQ0FBQyxJQUFJLG1CQUNwQix1QkFBdUIsQ0FBQyxNQUFNLGFBQ3BDO3dCQUNQOzRCQUNJLE9BQU8sRUFBRSxhQUFhOzRCQUN0QixXQUFXLHlDQUF5Qzt5QkFDdkQ7d0JBQ0Q7NEJBQ0ksT0FBTyxFQUFFLHdCQUF3Qjs0QkFDakMsV0FBVyx5Q0FBeUM7eUJBQ3ZEO3FCQUNKLGNBQ1csSUFBSTs7MEJBMEZYLFFBQVE7OzBCQUNSLE1BQU07MkJBQUMsdUJBQXVCOzswQkFFOUIsUUFBUTt5SUFsRlQsV0FBVztzQkFEZCxLQUFLO2dCQWlCSSxtQkFBbUI7c0JBQTVCLE1BQU07Z0JBT3dDLGVBQWU7c0JBQTdELFNBQVM7dUJBQUMsZ0JBQWdCLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgbm8tdW5kZXJzY29yZS1kYW5nbGUgKi9cclxuLyoqXHJcbiAqIEBsaWNlbnNlXHJcbiAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXHJcbiAqXHJcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXHJcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcclxuICovXHJcblxyXG5pbXBvcnQgeyBEaXJlY3Rpb25hbGl0eSB9IGZyb20gXCJAYW5ndWxhci9jZGsvYmlkaVwiO1xyXG5pbXBvcnQgeyBMaXN0UmFuZ2UgfSBmcm9tIFwiQGFuZ3VsYXIvY2RrL2NvbGxlY3Rpb25zXCI7XHJcbmltcG9ydCB7XHJcbiAgICBDZGtTY3JvbGxhYmxlLFxyXG4gICAgQ2RrVmlydHVhbFNjcm9sbFJlcGVhdGVyLFxyXG4gICAgQ2RrVmlydHVhbFNjcm9sbFZpZXdwb3J0LFxyXG4gICAgRXh0ZW5kZWRTY3JvbGxUb09wdGlvbnMsXHJcbiAgICBTY3JvbGxEaXNwYXRjaGVyLFxyXG4gICAgVmlld3BvcnRSdWxlcixcclxuICAgIFZJUlRVQUxfU0NST0xMX1NUUkFURUdZLFxyXG4gICAgVmlydHVhbFNjcm9sbFN0cmF0ZWd5LFxyXG59IGZyb20gXCJAYW5ndWxhci9jZGsvc2Nyb2xsaW5nXCI7XHJcbmltcG9ydCB7XHJcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcclxuICAgIENoYW5nZURldGVjdG9yUmVmLFxyXG4gICAgQ29tcG9uZW50LFxyXG4gICAgRWxlbWVudFJlZixcclxuICAgIEluamVjdCxcclxuICAgIElucHV0LFxyXG4gICAgTmdab25lLFxyXG4gICAgT25EZXN0cm95LFxyXG4gICAgT25Jbml0LFxyXG4gICAgT3B0aW9uYWwsXHJcbiAgICBPdXRwdXQsXHJcbiAgICBWaWV3Q2hpbGQsXHJcbiAgICBWaWV3RW5jYXBzdWxhdGlvbixcclxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgeyBhbmltYXRpb25GcmFtZVNjaGVkdWxlciwgYXNhcFNjaGVkdWxlciwgT2JzZXJ2YWJsZSwgT2JzZXJ2ZXIsIFN1YmplY3QsIFN1YnNjcmlwdGlvbiB9IGZyb20gXCJyeGpzXCI7XHJcbmltcG9ydCB7IGF1ZGl0VGltZSwgc3RhcnRXaXRoLCB0YWtlVW50aWwgfSBmcm9tIFwicnhqcy9vcGVyYXRvcnNcIjtcclxuXHJcbmltcG9ydCB7IEFubmFHdEhlbHBlclNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vLi4vYW5uYS1jb3JlLXNoYXJlZC1saWIvc2VydmljZXMvYW5uYS1nZW5lcmljLXRhYmxlLnNlcnZpY2VcIjtcclxuXHJcbi8qKiBDaGVja3MgaWYgdGhlIGdpdmVuIHJhbmdlcyBhcmUgZXF1YWwuICovXHJcbmZ1bmN0aW9uIHJhbmdlc0VxdWFsKHIxOiBMaXN0UmFuZ2UsIHIyOiBMaXN0UmFuZ2UpOiBib29sZWFuIHtcclxuICAgIHJldHVybiByMS5zdGFydCA9PT0gcjIuc3RhcnQgJiYgcjEuZW5kID09PSByMi5lbmQ7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBTY2hlZHVsZXIgdG8gYmUgdXNlZCBmb3Igc2Nyb2xsIGV2ZW50cy4gTmVlZHMgdG8gZmFsbCBiYWNrIHRvXHJcbiAqIHNvbWV0aGluZyB0aGF0IGRvZXNuJ3QgcmVseSBvbiByZXF1ZXN0QW5pbWF0aW9uRnJhbWUgb24gZW52aXJvbm1lbnRzXHJcbiAqIHRoYXQgZG9uJ3Qgc3VwcG9ydCBpdCAoZS5nLiBzZXJ2ZXItc2lkZSByZW5kZXJpbmcpLlxyXG4gKi9cclxuY29uc3QgU0NST0xMX1NDSEVEVUxFUiA9IHR5cGVvZiByZXF1ZXN0QW5pbWF0aW9uRnJhbWUgIT09IFwidW5kZWZpbmVkXCIgPyBhbmltYXRpb25GcmFtZVNjaGVkdWxlciA6IGFzYXBTY2hlZHVsZXI7XHJcblxyXG4vKipcclxuICogQSB2aWV3cG9ydCB0aGF0IHZpcnR1YWxpemVzIGl0cyBzY3JvbGxpbmcgd2l0aCB0aGUgaGVscCBvZiBgQ2RrVmlydHVhbEZvck9mYC5cclxuICogVXNlcyBgdG9wOiAjcHhgIGluc3RlYWQgb2YgYHRyYW5zZm9ybTogdHJhbnNsYXRlWSgjcHgpYCBsaWtlIHRoZSBjZGsgdmlydHVhbCBzY3JvbGwgdmlld3BvcnQgZG9lc1xyXG4gKiB3aGljaCBhdm9pZHMgZmxpY2tlcmluZyBvZiBlbGVtZW50cyBpbiB0aGUgdHJhbnNmb3JtZWQgY29udGFpbmVyIHdpdGggYHBvc2l0aW9uOiBzdGlja3lgLlxyXG4gKi9cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogXCJhbm5hLWNvcmUtdGFibGUtdmlydHVhbC1zY3JvbGwtdmlld3BvcnRcIixcclxuICAgIHRlbXBsYXRlVXJsOiBcImFubmEtdGFibGUtdmlydHVhbC1zY3JvbGwtdmlld3BvcnQuY29tcG9uZW50Lmh0bWxcIixcclxuICAgIHN0eWxlVXJsczogW1wiYW5uYS10YWJsZS12aXJ0dWFsLXNjcm9sbC12aWV3cG9ydC5jb21wb25lbnQuc2Nzc1wiXSxcclxuICAgIGhvc3Q6IHtcclxuICAgICAgICBjbGFzczogXCJhbm5hLXRhYmxlLXZpcnR1YWwtc2Nyb2xsLXZpZXdwb3J0XCIsXHJcbiAgICAgICAgXCJbY2xhc3MuYW5uYS10YWJsZS12aXJ0dWFsLXNjcm9sbC1vcmllbnRhdGlvbi1ob3Jpem9udGFsXVwiOiAnb3JpZW50YXRpb24gPT09IFwiaG9yaXpvbnRhbFwiJyxcclxuICAgICAgICBcIltjbGFzcy5hbm5hLXRhYmxlLXZpcnR1YWwtc2Nyb2xsLW9yaWVudGF0aW9uLXZlcnRpY2FsXVwiOiAnb3JpZW50YXRpb24gIT09IFwiaG9yaXpvbnRhbFwiJyxcclxuICAgIH0sXHJcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxyXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXHJcbiAgICBwcm92aWRlcnM6IFtcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHByb3ZpZGU6IENka1Njcm9sbGFibGUsXHJcbiAgICAgICAgICAgIHVzZUV4aXN0aW5nOiBBbm5hVGFibGVWaXJ0dWFsU2Nyb2xsVmlld3BvcnRDb21wb25lbnQsXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHByb3ZpZGU6IENka1ZpcnR1YWxTY3JvbGxWaWV3cG9ydCxcclxuICAgICAgICAgICAgdXNlRXhpc3Rpbmc6IEFubmFUYWJsZVZpcnR1YWxTY3JvbGxWaWV3cG9ydENvbXBvbmVudCxcclxuICAgICAgICB9LFxyXG4gICAgXSxcclxuICAgIHN0YW5kYWxvbmU6IHRydWUsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBBbm5hVGFibGVWaXJ0dWFsU2Nyb2xsVmlld3BvcnRDb21wb25lbnQgZXh0ZW5kcyBDZGtTY3JvbGxhYmxlIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xyXG4gICAgLyoqIEVtaXRzIHdoZW4gdGhlIHZpZXdwb3J0IGlzIGRldGFjaGVkIGZyb20gYSBDZGtWaXJ0dWFsRm9yT2YuICovXHJcbiAgICBwcml2YXRlIF9kZXRhY2hlZFN1YmplY3QgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xyXG5cclxuICAgIC8qKiBFbWl0cyB3aGVuIHRoZSByZW5kZXJlZCByYW5nZSBjaGFuZ2VzLiAqL1xyXG4gICAgcHJpdmF0ZSBfcmVuZGVyZWRSYW5nZVN1YmplY3QgPSBuZXcgU3ViamVjdDxMaXN0UmFuZ2U+KCk7XHJcblxyXG4gICAgLyoqIFRoZSBkaXJlY3Rpb24gdGhlIHZpZXdwb3J0IHNjcm9sbHMuICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgZ2V0IG9yaWVudGF0aW9uKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9vcmllbnRhdGlvbjtcclxuICAgIH1cclxuICAgIHNldCBvcmllbnRhdGlvbihvcmllbnRhdGlvbjogXCJob3Jpem9udGFsXCIgfCBcInZlcnRpY2FsXCIpIHtcclxuICAgICAgICBpZiAodGhpcy5fb3JpZW50YXRpb24gIT09IG9yaWVudGF0aW9uKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX29yaWVudGF0aW9uID0gb3JpZW50YXRpb247XHJcbiAgICAgICAgICAgIHRoaXMuX2NhbGN1bGF0ZVNwYWNlclNpemUoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIF9vcmllbnRhdGlvbjogXCJob3Jpem9udGFsXCIgfCBcInZlcnRpY2FsXCIgPSBcInZlcnRpY2FsXCI7XHJcblxyXG4gICAgLy8gTm90ZTogd2UgZG9uJ3QgdXNlIHRoZSB0eXBpY2FsIEV2ZW50RW1pdHRlciBoZXJlIGJlY2F1c2Ugd2UgbmVlZCB0byBzdWJzY3JpYmUgdG8gdGhlIHNjcm9sbFxyXG4gICAgLy8gc3RyYXRlZ3kgbGF6aWx5IChpLmUuIG9ubHkgaWYgdGhlIHVzZXIgaXMgYWN0dWFsbHkgbGlzdGVuaW5nIHRvIHRoZSBldmVudHMpLiBXZSBkbyB0aGlzIGJlY2F1c2VcclxuICAgIC8vIGRlcGVuZGluZyBvbiBob3cgdGhlIHN0cmF0ZWd5IGNhbGN1bGF0ZXMgdGhlIHNjcm9sbGVkIGluZGV4LCBpdCBtYXkgY29tZSBhdCBhIGNvc3QgdG9cclxuICAgIC8vIHBlcmZvcm1hbmNlLlxyXG4gICAgLyoqIEVtaXRzIHdoZW4gdGhlIGluZGV4IG9mIHRoZSBmaXJzdCBlbGVtZW50IHZpc2libGUgaW4gdGhlIHZpZXdwb3J0IGNoYW5nZXMuICovXHJcbiAgICBAT3V0cHV0KCkgc2Nyb2xsZWRJbmRleENoYW5nZTogT2JzZXJ2YWJsZTxudW1iZXI+ID0gbmV3IE9ic2VydmFibGUoKG9ic2VydmVyOiBPYnNlcnZlcjxudW1iZXI+KSA9PlxyXG4gICAgICAgIHRoaXMuX3Njcm9sbFN0cmF0ZWd5LnNjcm9sbGVkSW5kZXhDaGFuZ2Uuc3Vic2NyaWJlKChpbmRleCkgPT5cclxuICAgICAgICAgICAgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKSA9PiB0aGlzLm5nWm9uZS5ydW4oKCkgPT4gb2JzZXJ2ZXIubmV4dChpbmRleCkpKSxcclxuICAgICAgICApLFxyXG4gICAgKTtcclxuXHJcbiAgICAvKiogVGhlIGVsZW1lbnQgdGhhdCB3cmFwcyB0aGUgcmVuZGVyZWQgY29udGVudC4gKi9cclxuICAgIEBWaWV3Q2hpbGQoXCJjb250ZW50V3JhcHBlclwiLCB7IHN0YXRpYzogdHJ1ZSB9KSBfY29udGVudFdyYXBwZXI6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+O1xyXG5cclxuICAgIC8qKiBBIHN0cmVhbSB0aGF0IGVtaXRzIHdoZW5ldmVyIHRoZSByZW5kZXJlZCByYW5nZSBjaGFuZ2VzLiAqL1xyXG4gICAgcmVuZGVyZWRSYW5nZVN0cmVhbTogT2JzZXJ2YWJsZTxMaXN0UmFuZ2U+ID0gdGhpcy5fcmVuZGVyZWRSYW5nZVN1YmplY3Q7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgdG90YWwgc2l6ZSBvZiBhbGwgY29udGVudCAoaW4gcGl4ZWxzKSwgaW5jbHVkaW5nIGNvbnRlbnQgdGhhdCBpcyBub3QgY3VycmVudGx5IHJlbmRlcmVkLlxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIF90b3RhbENvbnRlbnRTaXplID0gMDtcclxuXHJcbiAgICAvKiogQSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBgc3R5bGUud2lkdGhgIHByb3BlcnR5IHZhbHVlIHRvIGJlIHVzZWQgZm9yIHRoZSBzcGFjZXIgZWxlbWVudC4gKi9cclxuICAgIF90b3RhbENvbnRlbnRXaWR0aCA9IFwiXCI7XHJcblxyXG4gICAgLyoqIEEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgYHN0eWxlLmhlaWdodGAgcHJvcGVydHkgdmFsdWUgdG8gYmUgdXNlZCBmb3IgdGhlIHNwYWNlciBlbGVtZW50LiAqL1xyXG4gICAgX3RvdGFsQ29udGVudEhlaWdodCA9IFwiXCI7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgQ1NTIHRyYW5zZm9ybSBhcHBsaWVkIHRvIHRoZSByZW5kZXJlZCBzdWJzZXQgb2YgaXRlbXMgc28gdGhhdCB0aGV5IGFwcGVhciB3aXRoaW4gdGhlIGJvdW5kc1xyXG4gICAgICogb2YgdGhlIHZpc2libGUgdmlld3BvcnQuXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgX3JlbmRlcmVkQ29udGVudFRyYW5zZm9ybTogc3RyaW5nO1xyXG5cclxuICAgIC8qKiBUaGUgY3VycmVudGx5IHJlbmRlcmVkIHJhbmdlIG9mIGluZGljZXMuICovXHJcbiAgICBwcml2YXRlIF9yZW5kZXJlZFJhbmdlOiBMaXN0UmFuZ2UgPSB7IHN0YXJ0OiAwLCBlbmQ6IDAgfTtcclxuXHJcbiAgICAvKiogVGhlIGxlbmd0aCBvZiB0aGUgZGF0YSBib3VuZCB0byB0aGlzIHZpZXdwb3J0IChpbiBudW1iZXIgb2YgaXRlbXMpLiAqL1xyXG4gICAgcHJpdmF0ZSBfZGF0YUxlbmd0aCA9IDA7XHJcblxyXG4gICAgLyoqIFRoZSBzaXplIG9mIHRoZSB2aWV3cG9ydCAoaW4gcGl4ZWxzKS4gKi9cclxuICAgIHByaXZhdGUgX3ZpZXdwb3J0U2l6ZSA9IDA7XHJcblxyXG4gICAgLyoqIHRoZSBjdXJyZW50bHkgYXR0YWNoZWQgQ2RrVmlydHVhbFNjcm9sbFJlcGVhdGVyLiAqL1xyXG4gICAgcHJpdmF0ZSBfZm9yT2Y6IENka1ZpcnR1YWxTY3JvbGxSZXBlYXRlcjxhbnk+IHwgbnVsbDtcclxuXHJcbiAgICAvKiogVGhlIGxhc3QgcmVuZGVyZWQgY29udGVudCBvZmZzZXQgdGhhdCB3YXMgc2V0LiAqL1xyXG4gICAgcHJpdmF0ZSBfcmVuZGVyZWRDb250ZW50T2Zmc2V0ID0gMDtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFdoZXRoZXIgdGhlIGxhc3QgcmVuZGVyZWQgY29udGVudCBvZmZzZXQgd2FzIHRvIHRoZSBlbmQgb2YgdGhlIGNvbnRlbnQgKGFuZCB0aGVyZWZvcmUgbmVlZHMgdG9cclxuICAgICAqIGJlIHJld3JpdHRlbiBhcyBhbiBvZmZzZXQgdG8gdGhlIHN0YXJ0IG9mIHRoZSBjb250ZW50KS5cclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBfcmVuZGVyZWRDb250ZW50T2Zmc2V0TmVlZHNSZXdyaXRlID0gZmFsc2U7XHJcblxyXG4gICAgLyoqIFdoZXRoZXIgdGhlcmUgaXMgYSBwZW5kaW5nIGNoYW5nZSBkZXRlY3Rpb24gY3ljbGUuICovXHJcbiAgICBwcml2YXRlIF9pc0NoYW5nZURldGVjdGlvblBlbmRpbmcgPSBmYWxzZTtcclxuXHJcbiAgICAvKiogQSBsaXN0IG9mIGZ1bmN0aW9ucyB0byBydW4gYWZ0ZXIgdGhlIG5leHQgY2hhbmdlIGRldGVjdGlvbiBjeWNsZS4gKi9cclxuICAgIHByaXZhdGUgX3J1bkFmdGVyQ2hhbmdlRGV0ZWN0aW9uOiBGdW5jdGlvbltdID0gW107XHJcblxyXG4gICAgLyoqIFN1YnNjcmlwdGlvbiB0byBjaGFuZ2VzIGluIHRoZSB2aWV3cG9ydCBzaXplLiAqL1xyXG4gICAgcHJpdmF0ZSBfdmlld3BvcnRDaGFuZ2VzID0gU3Vic2NyaXB0aW9uLkVNUFRZO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIHB1YmxpYyBvdmVycmlkZSBlbGVtZW50UmVmOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PixcclxuICAgICAgICBwcml2YXRlIF9jaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgICAgICAgbmdab25lOiBOZ1pvbmUsXHJcbiAgICAgICAgQE9wdGlvbmFsKClcclxuICAgICAgICBASW5qZWN0KFZJUlRVQUxfU0NST0xMX1NUUkFURUdZKVxyXG4gICAgICAgIHByaXZhdGUgX3Njcm9sbFN0cmF0ZWd5OiBWaXJ0dWFsU2Nyb2xsU3RyYXRlZ3ksXHJcbiAgICAgICAgQE9wdGlvbmFsKCkgZGlyOiBEaXJlY3Rpb25hbGl0eSxcclxuICAgICAgICBzY3JvbGxEaXNwYXRjaGVyOiBTY3JvbGxEaXNwYXRjaGVyLFxyXG4gICAgICAgIHZpZXdwb3J0UnVsZXI6IFZpZXdwb3J0UnVsZXIsXHJcbiAgICAgICAgcHJpdmF0ZSBhbm5hR3RTZXJ2aWNlOiBBbm5hR3RIZWxwZXJTZXJ2aWNlLFxyXG4gICAgKSB7XHJcbiAgICAgICAgc3VwZXIoZWxlbWVudFJlZiwgc2Nyb2xsRGlzcGF0Y2hlciwgbmdab25lLCBkaXIpO1xyXG5cclxuICAgICAgICBpZiAoIV9zY3JvbGxTdHJhdGVneSkge1xyXG4gICAgICAgICAgICB0aHJvdyBFcnJvcignRXJyb3I6IGNkay12aXJ0dWFsLXNjcm9sbC12aWV3cG9ydCByZXF1aXJlcyB0aGUgXCJpdGVtU2l6ZVwiIHByb3BlcnR5IHRvIGJlIHNldC4nKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX3ZpZXdwb3J0Q2hhbmdlcyA9IHZpZXdwb3J0UnVsZXIuY2hhbmdlKCkuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5jaGVja1ZpZXdwb3J0U2l6ZSgpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIG92ZXJyaWRlIG5nT25Jbml0KCkge1xyXG4gICAgICAgIHN1cGVyLm5nT25Jbml0KCk7XHJcblxyXG4gICAgICAgIC8vIEl0J3Mgc3RpbGwgdG9vIGVhcmx5IHRvIG1lYXN1cmUgdGhlIHZpZXdwb3J0IGF0IHRoaXMgcG9pbnQuIERlZmVycmluZyB3aXRoIGEgcHJvbWlzZSBhbGxvd3NcclxuICAgICAgICAvLyB0aGUgVmlld3BvcnQgdG8gYmUgcmVuZGVyZWQgd2l0aCB0aGUgY29ycmVjdCBzaXplIGJlZm9yZSB3ZSBtZWFzdXJlLiBXZSBydW4gdGhpcyBvdXRzaWRlIHRoZVxyXG4gICAgICAgIC8vIHpvbmUgdG8gYXZvaWQgY2F1c2luZyBtb3JlIGNoYW5nZSBkZXRlY3Rpb24gY3ljbGVzLiBXZSBoYW5kbGUgdGhlIGNoYW5nZSBkZXRlY3Rpb24gbG9vcFxyXG4gICAgICAgIC8vIG91cnNlbHZlcyBpbnN0ZWFkLlxyXG4gICAgICAgIHRoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+XHJcbiAgICAgICAgICAgIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fbWVhc3VyZVZpZXdwb3J0U2l6ZSgpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fc2Nyb2xsU3RyYXRlZ3kuYXR0YWNoKHRoaXMgYXMgYW55KTtcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLmVsZW1lbnRTY3JvbGxlZCgpXHJcbiAgICAgICAgICAgICAgICAgICAgLnBpcGUoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFN0YXJ0IG9mZiB3aXRoIGEgZmFrZSBzY3JvbGwgZXZlbnQgc28gd2UgcHJvcGVybHkgZGV0ZWN0IG91ciBpbml0aWFsIHBvc2l0aW9uLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGFydFdpdGgobnVsbCksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIENvbGxlY3QgbXVsdGlwbGUgZXZlbnRzIGludG8gb25lIHVudGlsIHRoZSBuZXh0IGFuaW1hdGlvbiBmcmFtZS4gVGhpcyB3YXkgaWZcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhlcmUgYXJlIG11bHRpcGxlIHNjcm9sbCBldmVudHMgaW4gdGhlIHNhbWUgZnJhbWUgd2Ugb25seSBuZWVkIHRvIHJlY2hlY2tcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gb3VyIGxheW91dCBvbmNlLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBhdWRpdFRpbWUoMCwgU0NST0xMX1NDSEVEVUxFUiksXHJcbiAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9zY3JvbGxTdHJhdGVneS5vbkNvbnRlbnRTY3JvbGxlZCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFubmFHdFNlcnZpY2UudmlydHVhbFNjcm9sbFN1YmplY3QubmV4dCh0cnVlKTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLl9tYXJrQ2hhbmdlRGV0ZWN0aW9uTmVlZGVkKCk7XHJcbiAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgb3ZlcnJpZGUgbmdPbkRlc3Ryb3koKSB7XHJcbiAgICAgICAgdGhpcy5kZXRhY2goKTtcclxuICAgICAgICB0aGlzLl9zY3JvbGxTdHJhdGVneS5kZXRhY2goKTtcclxuXHJcbiAgICAgICAgLy8gQ29tcGxldGUgYWxsIHN1YmplY3RzXHJcbiAgICAgICAgdGhpcy5fcmVuZGVyZWRSYW5nZVN1YmplY3QuY29tcGxldGUoKTtcclxuICAgICAgICB0aGlzLl9kZXRhY2hlZFN1YmplY3QuY29tcGxldGUoKTtcclxuICAgICAgICB0aGlzLl92aWV3cG9ydENoYW5nZXMudW5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICAgICAgc3VwZXIubmdPbkRlc3Ryb3koKTtcclxuICAgIH1cclxuXHJcbiAgICAvKiogQXR0YWNoZXMgYSBgQ2RrVmlydHVhbFNjcm9sbFJlcGVhdGVyYCB0byB0aGlzIHZpZXdwb3J0LiAqL1xyXG4gICAgYXR0YWNoKGZvck9mOiBDZGtWaXJ0dWFsU2Nyb2xsUmVwZWF0ZXI8YW55Pikge1xyXG4gICAgICAgIGlmICh0aGlzLl9mb3JPZikge1xyXG4gICAgICAgICAgICB0aHJvdyBFcnJvcihcIkNka1ZpcnR1YWxTY3JvbGxWaWV3cG9ydCBpcyBhbHJlYWR5IGF0dGFjaGVkLlwiKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIFN1YnNjcmliZSB0byB0aGUgZGF0YSBzdHJlYW0gb2YgdGhlIENka1ZpcnR1YWxGb3JPZiB0byBrZWVwIHRyYWNrIG9mIHdoZW4gdGhlIGRhdGEgbGVuZ3RoXHJcbiAgICAgICAgLy8gY2hhbmdlcy4gUnVuIG91dHNpZGUgdGhlIHpvbmUgdG8gYXZvaWQgdHJpZ2dlcmluZyBjaGFuZ2UgZGV0ZWN0aW9uLCBzaW5jZSB3ZSdyZSBtYW5hZ2luZyB0aGVcclxuICAgICAgICAvLyBjaGFuZ2UgZGV0ZWN0aW9uIGxvb3Agb3Vyc2VsdmVzLlxyXG4gICAgICAgIHRoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5fZm9yT2YgPSBmb3JPZjtcclxuICAgICAgICAgICAgdGhpcy5fZm9yT2YuZGF0YVN0cmVhbS5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXRhY2hlZFN1YmplY3QpKS5zdWJzY3JpYmUoKGRhdGEpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG5ld0xlbmd0aCA9IGRhdGEubGVuZ3RoO1xyXG4gICAgICAgICAgICAgICAgaWYgKG5ld0xlbmd0aCAhPT0gdGhpcy5fZGF0YUxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2RhdGFMZW5ndGggPSBuZXdMZW5ndGg7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2Nyb2xsU3RyYXRlZ3kub25EYXRhTGVuZ3RoQ2hhbmdlZCgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy5fZG9DaGFuZ2VEZXRlY3Rpb24oKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqIERldGFjaGVzIHRoZSBjdXJyZW50IGBDZGtWaXJ0dWFsRm9yT2ZgLiAqL1xyXG4gICAgZGV0YWNoKCkge1xyXG4gICAgICAgIHRoaXMuX2Zvck9mID0gbnVsbDtcclxuICAgICAgICB0aGlzLl9kZXRhY2hlZFN1YmplY3QubmV4dCgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiBHZXRzIHRoZSBsZW5ndGggb2YgdGhlIGRhdGEgYm91bmQgdG8gdGhpcyB2aWV3cG9ydCAoaW4gbnVtYmVyIG9mIGl0ZW1zKS4gKi9cclxuICAgIGdldERhdGFMZW5ndGgoKTogbnVtYmVyIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fZGF0YUxlbmd0aDtcclxuICAgIH1cclxuXHJcbiAgICAvKiogR2V0cyB0aGUgc2l6ZSBvZiB0aGUgdmlld3BvcnQgKGluIHBpeGVscykuICovXHJcbiAgICBnZXRWaWV3cG9ydFNpemUoKTogbnVtYmVyIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fdmlld3BvcnRTaXplO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFRPRE8obW1hbGVyYmEpOiBUaGlzIGlzIHRlY2huaWNhbGx5IG91dCBvZiBzeW5jIHdpdGggd2hhdCdzIHJlYWxseSByZW5kZXJlZCB1bnRpbCBhIHJlbmRlclxyXG4gICAgLy8gY3ljbGUgaGFwcGVucy4gSSdtIGJlaW5nIGNhcmVmdWwgdG8gb25seSBjYWxsIGl0IGFmdGVyIHRoZSByZW5kZXIgY3ljbGUgaXMgY29tcGxldGUgYW5kIGJlZm9yZVxyXG4gICAgLy8gc2V0dGluZyBpdCB0byBzb21ldGhpbmcgZWxzZSwgYnV0IGl0cyBlcnJvciBwcm9uZSBhbmQgc2hvdWxkIHByb2JhYmx5IGJlIHNwbGl0IGludG9cclxuICAgIC8vIGBwZW5kaW5nUmFuZ2VgIGFuZCBgcmVuZGVyZWRSYW5nZWAsIHRoZSBsYXR0ZXIgcmVmbGVjdGluZyB3aGF0cyBhY3R1YWxseSBpbiB0aGUgRE9NLlxyXG5cclxuICAgIC8qKiBHZXQgdGhlIGN1cnJlbnQgcmVuZGVyZWQgcmFuZ2Ugb2YgaXRlbXMuICovXHJcbiAgICBnZXRSZW5kZXJlZFJhbmdlKCk6IExpc3RSYW5nZSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3JlbmRlcmVkUmFuZ2U7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHRoZSB0b3RhbCBzaXplIG9mIGFsbCBjb250ZW50IChpbiBwaXhlbHMpLCBpbmNsdWRpbmcgY29udGVudCB0aGF0IGlzIG5vdCBjdXJyZW50bHlcclxuICAgICAqIHJlbmRlcmVkLlxyXG4gICAgICovXHJcbiAgICBzZXRUb3RhbENvbnRlbnRTaXplKHNpemU6IG51bWJlcikge1xyXG4gICAgICAgIGlmICh0aGlzLl90b3RhbENvbnRlbnRTaXplICE9PSBzaXplKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3RvdGFsQ29udGVudFNpemUgPSBzaXplO1xyXG4gICAgICAgICAgICB0aGlzLl9jYWxjdWxhdGVTcGFjZXJTaXplKCk7XHJcbiAgICAgICAgICAgIHRoaXMuX21hcmtDaGFuZ2VEZXRlY3Rpb25OZWVkZWQoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqIFNldHMgdGhlIGN1cnJlbnRseSByZW5kZXJlZCByYW5nZSBvZiBpbmRpY2VzLiAqL1xyXG4gICAgc2V0UmVuZGVyZWRSYW5nZShyYW5nZTogTGlzdFJhbmdlKSB7XHJcbiAgICAgICAgaWYgKCFyYW5nZXNFcXVhbCh0aGlzLl9yZW5kZXJlZFJhbmdlLCByYW5nZSkpIHtcclxuICAgICAgICAgICAgdGhpcy5fcmVuZGVyZWRSYW5nZVN1YmplY3QubmV4dCgodGhpcy5fcmVuZGVyZWRSYW5nZSA9IHJhbmdlKSk7XHJcbiAgICAgICAgICAgIHRoaXMuX21hcmtDaGFuZ2VEZXRlY3Rpb25OZWVkZWQoKCkgPT4gdGhpcy5fc2Nyb2xsU3RyYXRlZ3kub25Db250ZW50UmVuZGVyZWQoKSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyB0aGUgb2Zmc2V0IGZyb20gdGhlIHN0YXJ0IG9mIHRoZSB2aWV3cG9ydCB0byB0aGUgc3RhcnQgb2YgdGhlIHJlbmRlcmVkIGRhdGEgKGluIHBpeGVscykuXHJcbiAgICAgKi9cclxuICAgIGdldE9mZnNldFRvUmVuZGVyZWRDb250ZW50U3RhcnQoKTogbnVtYmVyIHwgbnVsbCB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3JlbmRlcmVkQ29udGVudE9mZnNldE5lZWRzUmV3cml0ZSA/IG51bGwgOiB0aGlzLl9yZW5kZXJlZENvbnRlbnRPZmZzZXQ7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHRoZSBvZmZzZXQgZnJvbSB0aGUgc3RhcnQgb2YgdGhlIHZpZXdwb3J0IHRvIGVpdGhlciB0aGUgc3RhcnQgb3IgZW5kIG9mIHRoZSByZW5kZXJlZCBkYXRhXHJcbiAgICAgKiAoaW4gcGl4ZWxzKS5cclxuICAgICAqL1xyXG4gICAgc2V0UmVuZGVyZWRDb250ZW50T2Zmc2V0KG9mZnNldDogbnVtYmVyKSB7XHJcbiAgICAgICAgY29uc3QgdG9wID0gYCR7TnVtYmVyKG9mZnNldCl9cHhgO1xyXG4gICAgICAgIHRoaXMuX3JlbmRlcmVkQ29udGVudE9mZnNldCA9IG9mZnNldDtcclxuICAgICAgICBpZiAodGhpcy5fcmVuZGVyZWRDb250ZW50VHJhbnNmb3JtICE9PSB0b3ApIHtcclxuICAgICAgICAgICAgLy8gV2Uga25vdyB0aGlzIHZhbHVlIGlzIHNhZmUgYmVjYXVzZSB3ZSBwYXJzZSBgb2Zmc2V0YCB3aXRoIGBOdW1iZXIoKWAgYmVmb3JlIHBhc3NpbmcgaXRcclxuICAgICAgICAgICAgLy8gaW50byB0aGUgc3RyaW5nLlxyXG4gICAgICAgICAgICB0aGlzLl9yZW5kZXJlZENvbnRlbnRUcmFuc2Zvcm0gPSB0b3A7XHJcbiAgICAgICAgICAgIHRoaXMuX21hcmtDaGFuZ2VEZXRlY3Rpb25OZWVkZWQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX3JlbmRlcmVkQ29udGVudE9mZnNldE5lZWRzUmV3cml0ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3JlbmRlcmVkQ29udGVudE9mZnNldCAtPSB0aGlzLm1lYXN1cmVSZW5kZXJlZENvbnRlbnRTaXplKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fcmVuZGVyZWRDb250ZW50T2Zmc2V0TmVlZHNSZXdyaXRlID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRSZW5kZXJlZENvbnRlbnRPZmZzZXQodGhpcy5fcmVuZGVyZWRDb250ZW50T2Zmc2V0KTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2Nyb2xsU3RyYXRlZ3kub25SZW5kZXJlZE9mZnNldENoYW5nZWQoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2Nyb2xscyB0byB0aGUgZ2l2ZW4gb2Zmc2V0IGZyb20gdGhlIHN0YXJ0IG9mIHRoZSB2aWV3cG9ydC4gUGxlYXNlIG5vdGUgdGhhdCB0aGlzIGlzIG5vdCBhbHdheXNcclxuICAgICAqIHRoZSBzYW1lIGFzIHNldHRpbmcgYHNjcm9sbFRvcGAgb3IgYHNjcm9sbExlZnRgLiBJbiBhIGhvcml6b250YWwgdmlld3BvcnQgd2l0aCByaWdodC10by1sZWZ0XHJcbiAgICAgKiBkaXJlY3Rpb24sIHRoaXMgd291bGQgYmUgdGhlIGVxdWl2YWxlbnQgb2Ygc2V0dGluZyBhIGZpY3Rpb25hbCBgc2Nyb2xsUmlnaHRgIHByb3BlcnR5LlxyXG4gICAgICogQHBhcmFtIG9mZnNldCBUaGUgb2Zmc2V0IHRvIHNjcm9sbCB0by5cclxuICAgICAqIEBwYXJhbSBiZWhhdmlvciBUaGUgU2Nyb2xsQmVoYXZpb3IgdG8gdXNlIHdoZW4gc2Nyb2xsaW5nLiBEZWZhdWx0IGlzIGJlaGF2aW9yIGlzIGBhdXRvYC5cclxuICAgICAqL1xyXG4gICAgc2Nyb2xsVG9PZmZzZXQob2Zmc2V0OiBudW1iZXIsIGJlaGF2aW9yOiBTY3JvbGxCZWhhdmlvciA9IFwiYXV0b1wiKSB7XHJcbiAgICAgICAgY29uc3Qgb3B0aW9uczogRXh0ZW5kZWRTY3JvbGxUb09wdGlvbnMgPSB7IGJlaGF2aW9yLCB0b3A6IG9mZnNldCB9O1xyXG4gICAgICAgIHRoaXMuc2Nyb2xsVG8ob3B0aW9ucyk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTY3JvbGxzIHRvIHRoZSBvZmZzZXQgZm9yIHRoZSBnaXZlbiBpbmRleC5cclxuICAgICAqIEBwYXJhbSBpbmRleCBUaGUgaW5kZXggb2YgdGhlIGVsZW1lbnQgdG8gc2Nyb2xsIHRvLlxyXG4gICAgICogQHBhcmFtIGJlaGF2aW9yIFRoZSBTY3JvbGxCZWhhdmlvciB0byB1c2Ugd2hlbiBzY3JvbGxpbmcuIERlZmF1bHQgaXMgYmVoYXZpb3IgaXMgYGF1dG9gLlxyXG4gICAgICovXHJcbiAgICBzY3JvbGxUb0luZGV4KGluZGV4OiBudW1iZXIsIGJlaGF2aW9yOiBTY3JvbGxCZWhhdmlvciA9IFwiYXV0b1wiKSB7XHJcbiAgICAgICAgdGhpcy5fc2Nyb2xsU3RyYXRlZ3kuc2Nyb2xsVG9JbmRleChpbmRleCwgYmVoYXZpb3IpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyB0aGUgY3VycmVudCBzY3JvbGwgb2Zmc2V0IGZyb20gdGhlIHN0YXJ0IG9mIHRoZSB2aWV3cG9ydCAoaW4gcGl4ZWxzKS5cclxuICAgICAqIEBwYXJhbSBmcm9tIFRoZSBlZGdlIHRvIG1lYXN1cmUgdGhlIG9mZnNldCBmcm9tLiBEZWZhdWx0cyB0byAndG9wJyBpbiB2ZXJ0aWNhbCBtb2RlIGFuZCAnc3RhcnQnXHJcbiAgICAgKiAgICAgaW4gaG9yaXpvbnRhbCBtb2RlLlxyXG4gICAgICovXHJcbiAgICAvLyAgQ0hBTkdFU0BBTk5BTElCIGFkZGVkIG92ZXJyaWRlIHRvIGZ1bmN0aW9uc1xyXG4gICAgb3ZlcnJpZGUgbWVhc3VyZVNjcm9sbE9mZnNldChmcm9tPzogXCJ0b3BcIiB8IFwibGVmdFwiIHwgXCJyaWdodFwiIHwgXCJib3R0b21cIiB8IFwic3RhcnRcIiB8IFwiZW5kXCIpOiBudW1iZXIge1xyXG4gICAgICAgIHJldHVybiBmcm9tID8gc3VwZXIubWVhc3VyZVNjcm9sbE9mZnNldChmcm9tKSA6IHN1cGVyLm1lYXN1cmVTY3JvbGxPZmZzZXQoXCJ0b3BcIik7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqIE1lYXN1cmUgdGhlIGNvbWJpbmVkIHNpemUgb2YgYWxsIG9mIHRoZSByZW5kZXJlZCBpdGVtcy4gKi9cclxuICAgIG1lYXN1cmVSZW5kZXJlZENvbnRlbnRTaXplKCk6IG51bWJlciB7XHJcbiAgICAgICAgY29uc3QgY29udGVudEVsID0gdGhpcy5fY29udGVudFdyYXBwZXIubmF0aXZlRWxlbWVudDtcclxuICAgICAgICByZXR1cm4gY29udGVudEVsLm9mZnNldEhlaWdodDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIE1lYXN1cmUgdGhlIHRvdGFsIGNvbWJpbmVkIHNpemUgb2YgdGhlIGdpdmVuIHJhbmdlLiBUaHJvd3MgaWYgdGhlIHJhbmdlIGluY2x1ZGVzIGl0ZW1zIHRoYXQgYXJlXHJcbiAgICAgKiBub3QgcmVuZGVyZWQuXHJcbiAgICAgKi9cclxuICAgIG1lYXN1cmVSYW5nZVNpemUocmFuZ2U6IExpc3RSYW5nZSk6IG51bWJlciB7XHJcbiAgICAgICAgaWYgKCF0aGlzLl9mb3JPZikge1xyXG4gICAgICAgICAgICByZXR1cm4gMDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2Zvck9mLm1lYXN1cmVSYW5nZVNpemUocmFuZ2UsIHRoaXMub3JpZW50YXRpb24pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiBVcGRhdGUgdGhlIHZpZXdwb3J0IGRpbWVuc2lvbnMgYW5kIHJlLXJlbmRlci4gKi9cclxuICAgIGNoZWNrVmlld3BvcnRTaXplKCkge1xyXG4gICAgICAgIC8vIFRPRE86IENsZWFudXAgbGF0ZXIgd2hlbiBhZGQgbG9naWMgZm9yIGhhbmRsaW5nIGNvbnRlbnQgcmVzaXplXHJcbiAgICAgICAgdGhpcy5fbWVhc3VyZVZpZXdwb3J0U2l6ZSgpO1xyXG4gICAgICAgIHRoaXMuX3Njcm9sbFN0cmF0ZWd5Lm9uRGF0YUxlbmd0aENoYW5nZWQoKTtcclxuICAgIH1cclxuXHJcbiAgICAvKiogTWVhc3VyZSB0aGUgdmlld3BvcnQgc2l6ZS4gKi9cclxuICAgIHByaXZhdGUgX21lYXN1cmVWaWV3cG9ydFNpemUoKSB7XHJcbiAgICAgICAgY29uc3Qgdmlld3BvcnRFbCA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O1xyXG4gICAgICAgIHRoaXMuX3ZpZXdwb3J0U2l6ZSA9IHZpZXdwb3J0RWwuY2xpZW50SGVpZ2h0O1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiBRdWV1ZSB1cCBjaGFuZ2UgZGV0ZWN0aW9uIHRvIHJ1bi4gKi9cclxuICAgIHByaXZhdGUgX21hcmtDaGFuZ2VEZXRlY3Rpb25OZWVkZWQocnVuQWZ0ZXI/OiBGdW5jdGlvbikge1xyXG4gICAgICAgIGlmIChydW5BZnRlcikge1xyXG4gICAgICAgICAgICB0aGlzLl9ydW5BZnRlckNoYW5nZURldGVjdGlvbi5wdXNoKHJ1bkFmdGVyKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIFVzZSBhIFByb21pc2UgdG8gYmF0Y2ggdG9nZXRoZXIgY2FsbHMgdG8gYF9kb0NoYW5nZURldGVjdGlvbmAuIFRoaXMgd2F5IGlmIHdlIHNldCBhIGJ1bmNoIG9mXHJcbiAgICAgICAgLy8gcHJvcGVydGllcyBzZXF1ZW50aWFsbHkgd2Ugb25seSBoYXZlIHRvIHJ1biBgX2RvQ2hhbmdlRGV0ZWN0aW9uYCBvbmNlIGF0IHRoZSBlbmQuXHJcbiAgICAgICAgaWYgKCF0aGlzLl9pc0NoYW5nZURldGVjdGlvblBlbmRpbmcpIHtcclxuICAgICAgICAgICAgdGhpcy5faXNDaGFuZ2VEZXRlY3Rpb25QZW5kaW5nID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT5cclxuICAgICAgICAgICAgICAgIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2RvQ2hhbmdlRGV0ZWN0aW9uKCk7XHJcbiAgICAgICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqIFJ1biBjaGFuZ2UgZGV0ZWN0aW9uLiAqL1xyXG4gICAgcHJpdmF0ZSBfZG9DaGFuZ2VEZXRlY3Rpb24oKSB7XHJcbiAgICAgICAgdGhpcy5faXNDaGFuZ2VEZXRlY3Rpb25QZW5kaW5nID0gZmFsc2U7XHJcblxyXG4gICAgICAgIC8vIEFwcGx5IHRoZSBjb250ZW50IHRyYW5zZm9ybS4gVGhlIHRyYW5zZm9ybSBjYW4ndCBiZSBzZXQgdmlhIGFuIEFuZ3VsYXIgYmluZGluZyBiZWNhdXNlXHJcbiAgICAgICAgLy8gYnlwYXNzU2VjdXJpdHlUcnVzdFN0eWxlIGlzIGJhbm5lZCBpbiBHb29nbGUuIEhvd2V2ZXIgdGhlIHZhbHVlIGlzIHNhZmUsIGl0J3MgY29tcG9zZWQgb2ZcclxuICAgICAgICAvLyBzdHJpbmcgbGl0ZXJhbHMsIGEgdmFyaWFibGUgdGhhdCBjYW4gb25seSBiZSAnWCcgb3IgJ1knLCBhbmQgdXNlciBpbnB1dCB0aGF0IGlzIHJ1biB0aHJvdWdoXHJcbiAgICAgICAgLy8gdGhlIGBOdW1iZXJgIGZ1bmN0aW9uIGZpcnN0IHRvIGNvZXJjZSBpdCB0byBhIG51bWVyaWMgdmFsdWUuXHJcbiAgICAgICAgdGhpcy5fY29udGVudFdyYXBwZXIubmF0aXZlRWxlbWVudC5zdHlsZS50b3AgPSB0aGlzLl9yZW5kZXJlZENvbnRlbnRUcmFuc2Zvcm07XHJcbiAgICAgICAgLy8gQXBwbHkgY2hhbmdlcyB0byBBbmd1bGFyIGJpbmRpbmdzLiBOb3RlOiBXZSBtdXN0IGNhbGwgYG1hcmtGb3JDaGVja2AgdG8gcnVuIGNoYW5nZSBkZXRlY3Rpb25cclxuICAgICAgICAvLyBmcm9tIHRoZSByb290LCBzaW5jZSB0aGUgcmVwZWF0ZWQgaXRlbXMgYXJlIGNvbnRlbnQgcHJvamVjdGVkIGluLiBDYWxsaW5nIGBkZXRlY3RDaGFuZ2VzYFxyXG4gICAgICAgIC8vIGluc3RlYWQgZG9lcyBub3QgcHJvcGVybHkgY2hlY2sgdGhlIHByb2plY3RlZCBjb250ZW50LlxyXG4gICAgICAgIHRoaXMubmdab25lLnJ1bigoKSA9PiB0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKSk7XHJcblxyXG4gICAgICAgIGNvbnN0IHJ1bkFmdGVyQ2hhbmdlRGV0ZWN0aW9uID0gdGhpcy5fcnVuQWZ0ZXJDaGFuZ2VEZXRlY3Rpb247XHJcbiAgICAgICAgdGhpcy5fcnVuQWZ0ZXJDaGFuZ2VEZXRlY3Rpb24gPSBbXTtcclxuICAgICAgICBydW5BZnRlckNoYW5nZURldGVjdGlvbi5mb3JFYWNoKChmbikgPT4ge1xyXG4gICAgICAgICAgICBmbigpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiBDYWxjdWxhdGVzIHRoZSBgc3R5bGUud2lkdGhgIGFuZCBgc3R5bGUuaGVpZ2h0YCBmb3IgdGhlIHNwYWNlciBlbGVtZW50LiAqL1xyXG4gICAgcHJpdmF0ZSBfY2FsY3VsYXRlU3BhY2VyU2l6ZSgpIHtcclxuICAgICAgICB0aGlzLl90b3RhbENvbnRlbnRIZWlnaHQgPSBgJHt0aGlzLl90b3RhbENvbnRlbnRTaXplfXB4YDtcclxuICAgICAgICB0aGlzLl90b3RhbENvbnRlbnRXaWR0aCA9IFwiXCI7XHJcbiAgICB9XHJcbn1cclxuIiwiPCEtLVxuICBXcmFwIHRoZSByZW5kZXJlZCBjb250ZW50IGluIGFuIGVsZW1lbnQgdGhhdCB3aWxsIGJlIHVzZWQgdG8gb2Zmc2V0IGl0IGJhc2VkIG9uIHRoZSBzY3JvbGxcbiAgcG9zaXRpb24uXG4tLT5cbjxkaXZcbiAgICAjY29udGVudFdyYXBwZXJcbiAgICBjbGFzcz1cImFubmEtdGFibGUtdmlydHVhbC1zY3JvbGwtY29udGVudC13cmFwcGVyXCJcbj5cbiAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG48L2Rpdj5cbjwhLS1cbiAgU3BhY2VyIHVzZWQgdG8gZm9yY2UgdGhlIHNjcm9sbGluZyBjb250YWluZXIgdG8gdGhlIGNvcnJlY3Qgc2l6ZSBmb3IgdGhlICp0b3RhbCogbnVtYmVyIG9mIGl0ZW1zXG4gIHNvIHRoYXQgdGhlIHNjcm9sbGJhciBjYXB0dXJlcyB0aGUgc2l6ZSBvZiB0aGUgZW50aXJlIGRhdGEgc2V0LlxuLS0+XG48ZGl2XG4gICAgY2xhc3M9XCJhcHAtdGFibGUtdmlydHVhbC1zY3JvbGwtc3BhY2VyXCJcbiAgICBbc3R5bGUud2lkdGhdPVwiX3RvdGFsQ29udGVudFdpZHRoXCJcbiAgICBbc3R5bGUuaGVpZ2h0XT1cIl90b3RhbENvbnRlbnRIZWlnaHRcIlxuPjwvZGl2PlxuIl19
|