ngx-edu-sharing-metaqs2 0.9.51 → 0.9.53
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.
|
@@ -146,6 +146,7 @@ export class QualityMatrixComponent {
|
|
|
146
146
|
return this.pastQualityMatrix$.value?.columns.find((c) => c.id === columnId);
|
|
147
147
|
}
|
|
148
148
|
ngOnInit() {
|
|
149
|
+
this.loadingCount.update((it) => it + 1);
|
|
149
150
|
this.metaApi
|
|
150
151
|
.getCategoryFilters()
|
|
151
152
|
.pipe(take(1), tap((filters) => {
|
|
@@ -162,8 +163,9 @@ export class QualityMatrixComponent {
|
|
|
162
163
|
this.categoryControls.setValue(this.categoryControls.value, {
|
|
163
164
|
emitEvent: true,
|
|
164
165
|
});
|
|
165
|
-
}), takeUntilDestroyed(this.destroyRef))
|
|
166
|
+
}), takeUntilDestroyed(this.destroyRef), finalize(() => this.loadingCount.update((it) => it - 1)))
|
|
166
167
|
.subscribe();
|
|
168
|
+
this.loadingCount.update((it) => it + 1);
|
|
167
169
|
this.metaApi
|
|
168
170
|
.getTimerangeFilter()
|
|
169
171
|
.pipe(filter((rangeFilter) => !!rangeFilter), tap((rangeFilter) => {
|
|
@@ -179,7 +181,7 @@ export class QualityMatrixComponent {
|
|
|
179
181
|
this.range.setControl('end', new FormControl(endDate, { nonNullable: true }), {
|
|
180
182
|
emitEvent: true,
|
|
181
183
|
});
|
|
182
|
-
}), takeUntilDestroyed(this.destroyRef))
|
|
184
|
+
}), takeUntilDestroyed(this.destroyRef), finalize(() => this.loadingCount.update((it) => it - 1)))
|
|
183
185
|
.subscribe();
|
|
184
186
|
combineLatest([this.categoryControls.valueChanges, this.range.valueChanges, this.refresh$])
|
|
185
187
|
.pipe(filter((data) => !!data[0] && !!data[1].end?.isValid), throttleTime(500), map(([categories, range]) => [categories, range.end]), switchMap(([categories, end]) => this.loadCurrentData(categories, end)), tap((currentQm) => {
|
|
@@ -408,4 +410,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
408
410
|
type: HostListener,
|
|
409
411
|
args: ['window:resize']
|
|
410
412
|
}] } });
|
|
411
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVhbGl0eV9tYXRyaXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1tZXRhLXdpZGdldHMtbGliL3NyYy9saWIvY29tcG9uZW50cy9xdWFsaXR5LW1hdHJpeC9xdWFsaXR5X21hdHJpeC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLW1ldGEtd2lkZ2V0cy1saWIvc3JjL2xpYi9jb21wb25lbnRzL3F1YWxpdHktbWF0cml4L3F1YWxpdHktbWF0cml4Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLFNBQVMsRUFDVCxRQUFRLEVBQ1IsVUFBVSxFQUNWLFVBQVUsRUFDVixZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFFTCxNQUFNLEVBQ04sU0FBUyxFQUNULFlBQVksR0FDYixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsZUFBZSxFQUFFLGFBQWEsRUFBYyxFQUFFLEVBQUUsT0FBTyxFQUFrQixNQUFNLE1BQU0sQ0FBQztBQUMvRixPQUFPLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0YsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRXhELE9BQU8sRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3pGLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxRQUFRLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUMxRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxrREFBa0QsQ0FBQztBQUN4RixPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sT0FBTyxDQUFDO0FBRWpDLE9BQU8sRUFBWSxZQUFZLEVBQUUsT0FBTyxFQUFFLE9BQU8s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ZWQsXG4gIENvbXBvbmVudCxcbiAgY29tcHV0ZWQsXG4gIERlc3Ryb3lSZWYsXG4gIEVsZW1lbnRSZWYsXG4gIEhvc3RMaXN0ZW5lcixcbiAgaW5qZWN0LFxuICBJbnB1dCxcbiAgT25Jbml0LFxuICBzaWduYWwsXG4gIFZpZXdDaGlsZCxcbiAgVmlld0NoaWxkcmVuLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgY29tYmluZUxhdGVzdCwgT2JzZXJ2YWJsZSwgb2YsIFN1YmplY3QsIFVuc3Vic2NyaWJhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBmaWx0ZXIsIGZpbmFsaXplLCBtYXAsIHN3aXRjaE1hcCwgdGFrZSwgdGFwLCB0aHJvdHRsZVRpbWUgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBNZXRhQXBpU2VydmljZSB9IGZyb20gJy4uLy4uL21ldGEtYXBpLnNlcnZpY2UnO1xuaW1wb3J0IHsgRmlsdGVyLCBGaWx0ZXJWYWx1ZSwgUXVhbGl0eU1hdHJpeCwgUXVhbGl0eU1hdHJpeEhlYWRlciwgUXVhbGl0eU1hdHJpeFJvdyB9IGZyb20gJy4uLy4uL2phdmEtYXBpJztcbmltcG9ydCB7IEZvcm1Db250cm9sLCBGb3JtR3JvdXAsIEZvcm1SZWNvcmQsIFJlYWN0aXZlRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQsIHRvU2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHsgRWRpdG9yaWFsTGlua1NlcnZpY2UgfSBmcm9tICcuLi9lZGl0b3JpYWwtbGluay1zZXJ2aWNlL2VkaXRvcmlhbC1saW5rLnNlcnZpY2UnO1xuaW1wb3J0IHsgRGF0ZVRpbWUgfSBmcm9tICdsdXhvbic7XG5pbXBvcnQgeyBEb251dFNsaWNlIH0gZnJvbSAnLi4vZG9udXQtY2hhcnQvZG9udXQtY2hhcnQubW9kZWwnO1xuaW1wb3J0IHsgS2V5VmFsdWUsIEtleVZhbHVlUGlwZSwgTmdDbGFzcywgTmdGb3JPZiwgTmdJZiB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBPdmVybGF5IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL292ZXJsYXknO1xuaW1wb3J0IHtcbiAgRG9udXRDaGFydFRvb2x0aXBDb21wb25lbnQsXG4gIHRyYW5zZm9ybURvbnV0Q2hhcnREYXRhLFxufSBmcm9tICcuLi9kb251dC1jaGFydC10b29sdGlwL2RvbnV0LWNoYXJ0LXRvb2x0aXAuY29tcG9uZW50JztcbmltcG9ydCB7IGNlbnRlclBvc2l0aW9uU3RyYXRlZ3ksIFRvb2x0aXBSZWYsIFRvb2x0aXBTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY29yZS90b29sdGlwLnNlcnZpY2UnO1xuaW1wb3J0IHsgTWF0Q2FyZCwgTWF0Q2FyZENvbnRlbnQsIE1hdENhcmRIZWFkZXIsIE1hdENhcmRUaXRsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NhcmQnO1xuaW1wb3J0IHsgUXVhbGl0eU1hdHJpeEZpbHRlckNvbXBvbmVudCB9IGZyb20gJy4uL2ZpbHRlci9xdWFsaXR5LW1hdHJpeC1maWx0ZXIuY29tcG9uZW50JztcbmltcG9ydCB7IFRyYW5zbGF0ZU1vZHVsZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgTWF0SWNvbiB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2ljb24nO1xuaW1wb3J0IHsgRGF0ZXBpY2tlckNvbXBvbmVudCB9IGZyb20gJy4uL2ZpbHRlci9kYXRlcGlja2VyL2RhdGVwaWNrZXIuY29tcG9uZW50JztcbmltcG9ydCB7IE1hdFNsaWRlVG9nZ2xlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc2xpZGUtdG9nZ2xlJztcbmltcG9ydCB7IFByb2dyZXNzU3Bpbm5lckNvbXBvbmVudCB9IGZyb20gJy4uL2xvYWRpbmdfaW5kaWNhdG9yL3Byb2dyZXNzLXNwaW5uZXIvcHJvZ3Jlc3Mtc3Bpbm5lci5jb21wb25lbnQnO1xuaW1wb3J0IHtcbiAgTWF0Q2VsbCxcbiAgTWF0Q2VsbERlZixcbiAgTWF0Q29sdW1uRGVmLFxuICBNYXRIZWFkZXJDZWxsLFxuICBNYXRIZWFkZXJDZWxsRGVmLFxuICBNYXRIZWFkZXJSb3csXG4gIE1hdEhlYWRlclJvd0RlZixcbiAgTWF0Um93LFxuICBNYXRSb3dEZWYsXG4gIE1hdFRhYmxlLFxufSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90YWJsZSc7XG5pbXBvcnQgeyBNYXRUb29sdGlwIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdG9vbHRpcCc7XG5pbXBvcnQgeyBNYXRCdXR0b24sIE1hdEljb25CdXR0b24gfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9idXR0b24nO1xuaW1wb3J0IHsgRG9udXRDaGFydENvbXBvbmVudCB9IGZyb20gJy4uL2RvbnV0LWNoYXJ0L2RvbnV0LWNoYXJ0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBTY3JvbGxNYXJrZXJEaXJlY3RpdmUgfSBmcm9tICcuL3Njcm9sbC1tYXJrZXIuZGlyZWN0aXZlJztcblxuY29uc3Qgb3BlbkNsb3NlVGltZW91dCA9IDE1MDtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbWV0YXFzMi1xdWFsaXR5LW1hdHJpeC12MicsXG4gIHByb3ZpZGVyczogW1Rvb2x0aXBTZXJ2aWNlXSxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgdGVtcGxhdGVVcmw6ICcuL3F1YWxpdHktbWF0cml4Lmh0bWwnLFxuICBpbXBvcnRzOiBbXG4gICAgTWF0Q2FyZCxcbiAgICBNYXRDYXJkSGVhZGVyLFxuICAgIE1hdENhcmRUaXRsZSxcbiAgICBNYXRDYXJkQ29udGVudCxcbiAgICBRdWFsaXR5TWF0cml4RmlsdGVyQ29tcG9uZW50LFxuICAgIFRyYW5zbGF0ZU1vZHVsZSxcbiAgICBLZXlWYWx1ZVBpcGUsXG4gICAgTWF0SWNvbixcbiAgICBEYXRlcGlja2VyQ29tcG9uZW50LFxuICAgIE1hdFNsaWRlVG9nZ2xlLFxuICAgIFJlYWN0aXZlRm9ybXNNb2R1bGUsXG4gICAgUHJvZ3Jlc3NTcGlubmVyQ29tcG9uZW50LFxuICAgIE1hdFRhYmxlLFxuICAgIE1hdFRvb2x0aXAsXG4gICAgTWF0Q2VsbCxcbiAgICBNYXRDb2x1bW5EZWYsXG4gICAgTWF0SGVhZGVyQ2VsbCxcbiAgICBOZ0NsYXNzLFxuICAgIE1hdEhlYWRlclJvdyxcbiAgICBNYXRSb3csXG4gICAgTWF0SGVhZGVyUm93RGVmLFxuICAgIE1hdFJvd0RlZixcbiAgICBNYXRIZWFkZXJDZWxsRGVmLFxuICAgIE5nRm9yT2YsXG4gICAgTmdJZixcbiAgICBNYXRDZWxsRGVmLFxuICAgIE1hdEJ1dHRvbixcbiAgICBNYXRJY29uQnV0dG9uLFxuICAgIERvbnV0Q2hhcnRDb21wb25lbnQsXG4gICAgU2Nyb2xsTWFya2VyRGlyZWN0aXZlLFxuICBdLFxuICBzdHlsZVVybHM6IFsnLi9xdWFsaXR5X21hdHJpeC5zY3NzJ10sXG59KVxuZXhwb3J0IGNsYXNzIFF1YWxpdHlNYXRyaXhDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0NoZWNrZWQge1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgcmVmID0gaW5qZWN0KEVsZW1lbnRSZWYpO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgZGVzdHJveVJlZiA9IGluamVjdChEZXN0cm95UmVmKTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IG1ldGFBcGkgPSBpbmplY3QoTWV0YUFwaVNlcnZpY2UpO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgbGlua1NlcnZpY2UgPSBpbmplY3QoRWRpdG9yaWFsTGlua1NlcnZpY2UpO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgb3ZlcmxheSA9IGluamVjdChPdmVybGF5KTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHRvb2x0aXBTZXJ2aWNlID0gaW5qZWN0KFRvb2x0aXBTZXJ2aWNlKTtcbiAgcHJpdmF0ZSByZWFkb25seSBzY3JvbGxMZWZ0ID0gc2lnbmFsKDApO1xuICBwcml2YXRlIHJlYWRvbmx5IHNjcm9sbFdpZHRoID0gc2lnbmFsKDApO1xuICBwdWJsaWMgcmVhZG9ubHkgaXNMZWZ0U2Nyb2xsYWJsZSA9IGNvbXB1dGVkKCgpID0+IHRoaXMuc2Nyb2xsTGVmdCgpID4gMCk7XG4gIHB1YmxpYyByZWFkb25seSBpc1JpZ2h0U2Nyb2xsYWJsZSA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCB2aWV3cG9ydCA9IGdsb2JhbFRoaXMudmlzdWFsVmlld3BvcnQ7XG4gICAgaWYgKCF2aWV3cG9ydCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCB2aWV3cG9ydFdpZHRoID0gdmlld3BvcnQud2lkdGg7XG5cbiAgICByZXR1cm4gdGhpcy5zY3JvbGxXaWR0aCgpID4gdmlld3BvcnRXaWR0aCAmJiB0aGlzLnNjcm9sbExlZnQoKSArIHZpZXdwb3J0V2lkdGggPCB0aGlzLnNjcm9sbFdpZHRoKCk7XG4gIH0pO1xuICBAVmlld0NoaWxkKCdpc3N1ZVR5cGUnLCB7XG4gICAgcmVhZDogRWxlbWVudFJlZixcbiAgICBzdGF0aWM6IHRydWUsXG4gIH0pXG4gIHByaXZhdGUgcmVhZG9ubHkgaXNzdWVUeXBlSGVhZGVyITogRWxlbWVudFJlZjxIVE1MVGFibGVDZWxsRWxlbWVudD47XG4gIHJlYWRvbmx5IGZpbHRlcmVkQ29sdW1ucyA9IGNvbXB1dGVkPEFycmF5PFF1YWxpdHlNYXRyaXhIZWFkZXI+PigoKSA9PiB7XG4gICAgY29uc3QgYWxsQ29sdW1ucyA9IHRoaXMuYWxsQ29sdW1ucygpO1xuICAgIGNvbnN0IGlzT25seVNvdXJjZXNXaXRoTWF0ZXJpYWxFbmFibGVkID0gdGhpcy5pc09ubHlTb3VyY2VzV2l0aE1hdGVyaWFsRW5hYmxlZCgpO1xuICAgIGlmIChpc09ubHlTb3VyY2VzV2l0aE1hdGVyaWFsRW5hYmxlZCkge1xuICAgICAgcmV0dXJuIGFsbENvbHVtbnMuZmlsdGVyKChjKSA9PiBjLnRvdGFsID4gMCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBhbGxDb2x1bW5zO1xuICAgIH1cbiAgfSk7XG4gIHJlYWRvbmx5IGRhdGF0YWJsZUNvbHVtbnMgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgcmV0dXJuIHRoaXMuZmlsdGVyZWRDb2x1bW5zKClcbiAgICAgIC5maWx0ZXIoKGMpID0+IGMubGV2ZWwgIT09IDApXG4gICAgICAubWFwKChjKSA9PiBjLmlkKTtcbiAgfSk7XG4gIHJlYWRvbmx5IGlzSGlzdG9yaWNhbERhdGFFbmFibGVkRm9ybUZpZWxkID0gbmV3IEZvcm1Db250cm9sKHsgdmFsdWU6IGZhbHNlLCBkaXNhYmxlZDogdHJ1ZSB9KTtcbiAgcmVhZG9ubHkgaXNIaXN0b3JpY2FsRGF0YUVuYWJsZWQgPSB0b1NpZ25hbCh0aGlzLmlzSGlzdG9yaWNhbERhdGFFbmFibGVkRm9ybUZpZWxkLnZhbHVlQ2hhbmdlcyk7XG4gIHJlYWRvbmx5IGlzT25seVNvdXJjZXNXaXRoTWF0ZXJpYWxFbmFibGVkRm9ybUZpZWxkID0gbmV3IEZvcm1Db250cm9sKHsgdmFsdWU6IHRydWUsIGRpc2FibGVkOiB0cnVlIH0pO1xuICByZWFkb25seSBpc09ubHlTb3VyY2VzV2l0aE1hdGVyaWFsRW5hYmxlZCA9IHRvU2lnbmFsKHRoaXMuaXNPbmx5U291cmNlc1dpdGhNYXRlcmlhbEVuYWJsZWRGb3JtRmllbGQudmFsdWVDaGFuZ2VzKTtcbiAgcmVhZG9ubHkgY2F0ZWdvcnlDb250cm9scyA9IG5ldyBGb3JtUmVjb3JkPEZvcm1Db250cm9sPEFycmF5PHN0cmluZz4+Pih7fSk7XG4gIHJlYWRvbmx5IGxvYWRpbmdDb3VudCA9IHNpZ25hbCgwKTtcbiAgcmVhZG9ubHkgaXNMb2FkaW5nID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5sb2FkaW5nQ291bnQoKSA+IDApO1xuICBAVmlld0NoaWxkcmVuKFNjcm9sbE1hcmtlckRpcmVjdGl2ZSlcbiAgcHJpdmF0ZSByZWFkb25seSBzY3JvbGxNYXJrZXJzITogUmVhZG9ubHlBcnJheTxTY3JvbGxNYXJrZXJEaXJlY3RpdmU+O1xuICByZWFkb25seSBjYXRlZ29yeUZpbHRlclZhbHVlczogTWFwPHN0cmluZywgRmlsdGVyVmFsdWVbXT4gPSBuZXcgTWFwKCk7XG4gIHByb3RlY3RlZCByZWFkb25seSByZWZyZXNoJCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gIHJlYWRvbmx5IHJlY2VudFF1YWxpdHlNYXRyaXgkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxRdWFsaXR5TWF0cml4Pih7IGNvbHVtbnM6IFtdLCByb3dzOiBbXSB9IGFzIFF1YWxpdHlNYXRyaXgpO1xuICByZWFkb25seSByZWNlbnRRdWFsaXR5TWF0cml4ID0gdG9TaWduYWwodGhpcy5yZWNlbnRRdWFsaXR5TWF0cml4JCwge1xuICAgIGluaXRpYWxWYWx1ZTogeyBjb2x1bW5zOiBbXSwgcm93czogW10gfSBhcyBRdWFsaXR5TWF0cml4LFxuICB9KTtcbiAgcmVhZG9ubHkgcGFzdFF1YWxpdHlNYXRyaXgkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxRdWFsaXR5TWF0cml4IHwgbnVsbD4oeyBjb2x1bW5zOiBbXSwgcm93czogW10gfSBhcyBRdWFsaXR5TWF0cml4KTtcbiAgcmVhZG9ubHkgcmFuZ2U6IEZvcm1Hcm91cDx7XG4gICAgc3RhcnQ6IEZvcm1Db250cm9sPERhdGVUaW1lPGJvb2xlYW4+PjtcbiAgICBlbmQ6IEZvcm1Db250cm9sPERhdGVUaW1lPGJvb2xlYW4+PjtcbiAgfT4gPSBuZXcgRm9ybUdyb3VwKHtcbiAgICBzdGFydDogbmV3IEZvcm1Db250cm9sKCksXG4gICAgZW5kOiBuZXcgRm9ybUNvbnRyb2woKSxcbiAgfSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgdG9vbHRpcHMgPSBuZXcgTWFwPEhUTUxFbGVtZW50LCBUb29sdGlwUmVmPERvbnV0Q2hhcnRUb29sdGlwQ29tcG9uZW50Pj4oKTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IERhdGVUaW1lID0gRGF0ZVRpbWU7XG4gIEBJbnB1dCgpXG4gIHBhZ2VUaXRsZTogc3RyaW5nID0gJ1F1YWxpdHkgTWF0cml4JztcblxuICByZWFkb25seSBhbGxDb2x1bW5zID0gY29tcHV0ZWQoKCkgPT5cbiAgICB0aGlzLnJlY2VudFF1YWxpdHlNYXRyaXgoKT8uY29sdW1ucy50b1NvcnRlZCgoYSwgYikgPT4gYS5sYWJlbC5sb2NhbGVDb21wYXJlKGIubGFiZWwpKVxuICApO1xuXG4gIG5nQWZ0ZXJWaWV3Q2hlY2tlZCgpOiB2b2lkIHtcbiAgICB0aGlzLm9uU2Nyb2xsKCk7XG4gIH1cblxuICBmaWx0ZXJJZGVudChfaW5kZXg6IG51bWJlciwgaXRlbTogS2V5VmFsdWU8c3RyaW5nLCBGb3JtQ29udHJvbDxzdHJpbmdbXT4+KSB7XG4gICAgcmV0dXJuIGl0ZW0ua2V5O1xuICB9XG5cbiAgc291cmNlQ29sdW1ucyA9IGNvbXB1dGVkKCgpID0+IHRoaXMuZGF0YXRhYmxlQ29sdW1ucygpLm1hcCgoYykgPT4gYyArICdfc291cmNlJykpO1xuXG4gIGN1cnJlbnRDb2x1bW5zID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5kYXRhdGFibGVDb2x1bW5zKCkubWFwKChjKSA9PiBjICsgJ19jdXJyZW50JykpO1xuXG4gIHBhc3RDb2x1bW5zID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5kYXRhdGFibGVDb2x1bW5zKCkubWFwKChjKSA9PiBjICsgJ19wYXN0JykpO1xuXG4gIGFsbERhdGFDb2x1bW5zID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IHBhc3RDb2x1bW5zID0gdGhpcy5wYXN0Q29sdW1ucygpO1xuICAgIGNvbnN0IGN1cnJlbnRDb2x1bW5zID0gdGhpcy5jdXJyZW50Q29sdW1ucygpO1xuICAgIGlmICh0aGlzLmlzSGlzdG9yaWNhbERhdGFFbmFibGVkKCkpIHtcbiAgICAgIHJldHVybiBjdXJyZW50Q29sdW1ucy5mbGF0TWFwKChlLCBpKSA9PiBbcGFzdENvbHVtbnNbaV0sIGVdKTtcbiAgICB9XG4gICAgcmV0dXJuIGN1cnJlbnRDb2x1bW5zO1xuICB9KTtcblxuICBwcml2YXRlIGxvYWREYXRhKGNhdGVnb3JpZXM6IHsgW2tleTogc3RyaW5nXTogQXJyYXk8c3RyaW5nPiB9LCBkYXRlOiBEYXRlVGltZTx0cnVlPik6IE9ic2VydmFibGU8UXVhbGl0eU1hdHJpeD4ge1xuICAgIHJldHVybiBvZih1bmRlZmluZWQpLnBpcGUoXG4gICAgICB0YXAoKCkgPT4gdGhpcy5sb2FkaW5nQ291bnQudXBkYXRlKChpdCkgPT4gaXQgKyAxKSksXG4gICAgICBzd2l0Y2hNYXAoKCkgPT5cbiAgICAgICAgdGhpcy5tZXRhQXBpXG4gICAgICAgICAgLmdldFF1YWxpdHlNYXRyaXhXaXRoRmlsdGVyc1YyKFtcbiAgICAgICAgICAgIC4uLnRoaXMudHJhbnNmb3JtQ2F0ZWdvcnlGaWx0ZXJzKGNhdGVnb3JpZXMpLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBmaWVsZDogJ2FzT2YnLFxuICAgICAgICAgICAgICB2YWx1ZXM6IFtcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBpZDogZGF0ZS50b0lTTyh7XG4gICAgICAgICAgICAgICAgICAgIGluY2x1ZGVPZmZzZXQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgfSkgYXMgc3RyaW5nLFxuICAgICAgICAgICAgICAgICAgbGFiZWw6ICcnLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0pXG4gICAgICAgICAgLnBpcGUodGFrZSgxKSlcbiAgICAgICksXG4gICAgICBmaW5hbGl6ZSgoKSA9PiB0aGlzLmxvYWRpbmdDb3VudC51cGRhdGUoKGl0KSA9PiBpdCAtIDEpKVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIHRyYW5zZm9ybUNhdGVnb3J5RmlsdGVycyhjYXRlZ29yaWVzOiB7IFtrZXk6IHN0cmluZ106IEFycmF5PHN0cmluZz4gfSk6IEZpbHRlcltdIHtcbiAgICByZXR1cm4gT2JqZWN0LmVudHJpZXMoY2F0ZWdvcmllcylcbiAgICAgIC5maWx0ZXIoKHBhaXIpOiBwYWlyIGlzIFtzdHJpbmcsIEFycmF5PHN0cmluZz5dID0+ICEhcGFpclsxXT8ubGVuZ3RoKVxuICAgICAgLm1hcCgoW2ZpZWxkLCB2YWx1ZXNdKSA9PiAoe1xuICAgICAgICBmaWVsZCxcbiAgICAgICAgdmFsdWVzOiB2YWx1ZXMubWFwKCh2YWx1ZSkgPT4gKHsgaWQ6IHZhbHVlLCBsYWJlbDogJycgfSkpLFxuICAgICAgfSkpO1xuICB9XG5cbiAgcHJpdmF0ZSBsb2FkUGFzdERhdGEoY2F0ZWdvcmllczogYW55LCBkYXRlOiBEYXRlVGltZTx0cnVlPikge1xuICAgIHJldHVybiBvZih1bmRlZmluZWQpLnBpcGUoc3dpdGNoTWFwKCgpID0+IHRoaXMubG9hZERhdGEoY2F0ZWdvcmllcywgZGF0ZSkpKTtcbiAgfVxuXG4gIHByaXZhdGUgbG9hZEN1cnJlbnREYXRhKGNhdGVnb3JpZXM6IGFueSwgZGF0ZTogRGF0ZVRpbWU8dHJ1ZT4pIHtcbiAgICByZXR1cm4gb2YodW5kZWZpbmVkKS5waXBlKHN3aXRjaE1hcCgoKSA9PiB0aGlzLmxvYWREYXRhKGNhdGVnb3JpZXMsIGRhdGUpKSk7XG4gIH1cblxuICBvcGVuRWRpdExpbmsoc291cmNlOiBzdHJpbmcsIGlzc3VlOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5saW5rU2VydmljZS5vcGVuQnlSZXBsaWNhdGlvbnNvdXJjZUFuZElzc3VlVHlwZVdpdGhGaWx0ZXJzKHNvdXJjZSwgaXNzdWUsIHRoaXMuY2F0ZWdvcnlDb250cm9scy52YWx1ZSk7XG4gIH1cblxuICAvLyBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2FuZ3VsYXIvY29tcG9uZW50cy9pc3N1ZXMvODM2MSNpc3N1ZWNvbW1lbnQtMzQ1ODA0OTU0XG4gIGNvbHVtbklkZW50KF9pbmRleDogbnVtYmVyLCBjb2w6IFF1YWxpdHlNYXRyaXhIZWFkZXIpIHtcbiAgICByZXR1cm4gY29sLmlkO1xuICB9XG5cbiAgcmVmcmVzaCgpIHtcbiAgICB0aGlzLnJlZnJlc2gkLm5leHQoKTtcbiAgfVxuXG4gIGdldFBhc3RDb2x1bW4oY29sdW1uSWQ6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLnBhc3RRdWFsaXR5TWF0cml4JC52YWx1ZT8uY29sdW1ucy5maW5kKChjKSA9PiBjLmlkID09PSBjb2x1bW5JZCk7XG4gIH1cblxuICBwdWJsaWMgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5tZXRhQXBpXG4gICAgICAuZ2V0Q2F0ZWdvcnlGaWx0ZXJzKClcbiAgICAgIC5waXBlKFxuICAgICAgICB0YWtlKDEpLFxuICAgICAgICB0YXAoKGZpbHRlcnMpID0+IHtcbiAgICAgICAgICBmaWx0ZXJzLmZvckVhY2goKGZpbHRlcikgPT4ge1xuICAgICAgICAgICAgLy8gZG8gbm90IGVtaXQgdGhlIGV2ZW50IHdoZW4gc2V0dGluZyB0aGUgY29udHJvbCB0byBwcmV2ZW50IHVubmVjZXNzYXJ5IHZhbHVlQ2hhbmdlcyBldmVudHNcbiAgICAgICAgICAgIHRoaXMuY2F0ZWdvcnlDb250cm9scy5hZGRDb250cm9sKGZpbHRlci5maWVsZCwgbmV3IEZvcm1Db250cm9sKFtdLCB7IG5vbk51bGxhYmxlOiB0cnVlIH0pLCB7XG4gICAgICAgICAgICAgIGVtaXRFdmVudDogZmFsc2UsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMuY2F0ZWdvcnlGaWx0ZXJWYWx1ZXMuc2V0KFxuICAgICAgICAgICAgICBmaWx0ZXIuZmllbGQsXG4gICAgICAgICAgICAgIGZpbHRlci52YWx1ZXMudG9Tb3J0ZWQoKGEsIGIpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYS5sYWJlbC5sb2NhbGVDb21wYXJlKGIubGFiZWwpO1xuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICAvLyBlbWl0IHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBmb3JtIGdyb3VwIG9uY2UgdG8gdHJpZ2dlciB0aGUgdmFsdWVDaGFuZ2VzIG9ic2VydmFibGVcbiAgICAgICAgICB0aGlzLmNhdGVnb3J5Q29udHJvbHMuc2V0VmFsdWUodGhpcy5jYXRlZ29yeUNvbnRyb2xzLnZhbHVlIGFzIHsgW2tleTogc3RyaW5nXTogc3RyaW5nW10gfSwge1xuICAgICAgICAgICAgZW1pdEV2ZW50OiB0cnVlLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9KSxcbiAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZilcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKTtcblxuICAgIHRoaXMubWV0YUFwaVxuICAgICAgLmdldFRpbWVyYW5nZUZpbHRlcigpXG4gICAgICAucGlwZShcbiAgICAgICAgZmlsdGVyKChyYW5nZUZpbHRlcikgPT4gISFyYW5nZUZpbHRlciksXG4gICAgICAgIHRhcCgocmFuZ2VGaWx0ZXIpID0+IHtcbiAgICAgICAgICBjb25zdCBzdGFydERhdGUgPSBEYXRlVGltZS5mcm9tSVNPKHJhbmdlRmlsdGVyLnZhbHVlcy5maW5kKCh2KSA9PiB2LmlkID09PSAncmFuZ2VTdGFydCcpPy5sYWJlbCEsIHtcbiAgICAgICAgICAgIHpvbmU6ICd1dGMnLFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGNvbnN0IGVuZERhdGUgPSBEYXRlVGltZS5mcm9tSVNPKHJhbmdlRmlsdGVyLnZhbHVlcy5maW5kKCh2KSA9PiB2LmlkID09PSAncmFuZ2VFbmQnKT8ubGFiZWwhLCB7XG4gICAgICAgICAgICB6b25lOiAndXRjJyxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICB0aGlzLnJhbmdlLnNldENvbnRyb2woJ3N0YXJ0JywgbmV3IEZvcm1Db250cm9sPERhdGVUaW1lPihzdGFydERhdGUsIHsgbm9uTnVsbGFibGU6IHRydWUgfSksIHtcbiAgICAgICAgICAgIGVtaXRFdmVudDogZmFsc2UsXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdGhpcy5yYW5nZS5zZXRDb250cm9sKCdlbmQnLCBuZXcgRm9ybUNvbnRyb2w8RGF0ZVRpbWU+KGVuZERhdGUsIHsgbm9uTnVsbGFibGU6IHRydWUgfSksIHtcbiAgICAgICAgICAgIGVtaXRFdmVudDogdHJ1ZSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSksXG4gICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCk7XG5cbiAgICBjb21iaW5lTGF0ZXN0KFt0aGlzLmNhdGVnb3J5Q29udHJvbHMudmFsdWVDaGFuZ2VzLCB0aGlzLnJhbmdlLnZhbHVlQ2hhbmdlcywgdGhpcy5yZWZyZXNoJF0pXG4gICAgICAucGlwZShcbiAgICAgICAgZmlsdGVyKFxuICAgICAgICAgIChkYXRhKTogZGF0YSBpcyBbeyBba2V5OiBzdHJpbmddOiBBcnJheTxzdHJpbmc+IH0sIHsgZW5kOiBEYXRlVGltZTx0cnVlPiB9LCB2b2lkXSA9PlxuICAgICAgICAgICAgISFkYXRhWzBdICYmICEhZGF0YVsxXS5lbmQ/LmlzVmFsaWRcbiAgICAgICAgKSxcbiAgICAgICAgdGhyb3R0bGVUaW1lKDUwMCksXG4gICAgICAgIG1hcCgoW2NhdGVnb3JpZXMsIHJhbmdlXSkgPT4gW2NhdGVnb3JpZXMsIHJhbmdlLmVuZF0gYXMgY29uc3QpLFxuICAgICAgICBzd2l0Y2hNYXAoKFtjYXRlZ29yaWVzLCBlbmRdKSA9PiB0aGlzLmxvYWRDdXJyZW50RGF0YShjYXRlZ29yaWVzLCBlbmQpKSxcbiAgICAgICAgdGFwKChjdXJyZW50UW0pID0+IHtcbiAgICAgICAgICB0aGlzLnJlY2VudFF1YWxpdHlNYXRyaXgkLm5leHQoY3VycmVudFFtKTtcbiAgICAgICAgfSksXG4gICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCk7XG5cbiAgICBsZXQgcGFzdERhdGFTdWJzY3JpcHRpb246IFVuc3Vic2NyaWJhYmxlIHwgdW5kZWZpbmVkO1xuXG4gICAgY29uc3QgcGFzdERhdGEkID0gY29tYmluZUxhdGVzdChbdGhpcy5jYXRlZ29yeUNvbnRyb2xzLnZhbHVlQ2hhbmdlcywgdGhpcy5yYW5nZS52YWx1ZUNoYW5nZXMsIHRoaXMucmVmcmVzaCRdKS5waXBlKFxuICAgICAgZmlsdGVyKFxuICAgICAgICAoZGF0YSk6IGRhdGEgaXMgW3sgW2tleTogc3RyaW5nXTogQXJyYXk8c3RyaW5nPiB9LCB7IHN0YXJ0OiBEYXRlVGltZTx0cnVlPiB9LCB2b2lkXSA9PlxuICAgICAgICAgICEhZGF0YVswXSAmJiAhIWRhdGFbMV0uc3RhcnQ/LmlzVmFsaWRcbiAgICAgICksXG4gICAgICB0aHJvdHRsZVRpbWUoNTAwKSxcbiAgICAgIG1hcCgoW2NhdGVnb3JpZXMsIHJhbmdlXSkgPT4gW2NhdGVnb3JpZXMsIHJhbmdlLnN0YXJ0XSBhcyBjb25zdCksXG4gICAgICBzd2l0Y2hNYXAoKFtjYXRlZ29yaWVzLCBzdGFydF0pID0+IHRoaXMubG9hZFBhc3REYXRhKGNhdGVnb3JpZXMsIHN0YXJ0KSksXG4gICAgICB0YXAoKHBhc3RRbSkgPT4ge1xuICAgICAgICB0aGlzLnBhc3RRdWFsaXR5TWF0cml4JC5uZXh0KHBhc3RRbSk7XG4gICAgICB9KSxcbiAgICAgIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpXG4gICAgKTtcblxuICAgIHRoaXMuaXNIaXN0b3JpY2FsRGF0YUVuYWJsZWRGb3JtRmllbGQudmFsdWVDaGFuZ2VzXG4gICAgICAucGlwZShcbiAgICAgICAgdGFwKChpc0VuYWJsZWQpID0+IHtcbiAgICAgICAgICBpZiAoaXNFbmFibGVkKSB7XG4gICAgICAgICAgICBwYXN0RGF0YVN1YnNjcmlwdGlvbiA9IHBhc3REYXRhJC5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIHRoaXMuY2F0ZWdvcnlDb250cm9scy5zZXRWYWx1ZSh0aGlzLmNhdGVnb3J5Q29udHJvbHMudmFsdWUgYXMgeyBba2V5OiBzdHJpbmddOiBzdHJpbmdbXSB9LCB7XG4gICAgICAgICAgICAgIGVtaXRFdmVudDogdHJ1ZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5yYW5nZS5zZXRWYWx1ZSh0aGlzLnJhbmdlLnZhbHVlIGFzIHsgc3RhcnQ6IERhdGVUaW1lOyBlbmQ6IERhdGVUaW1lIH0sIHtcbiAgICAgICAgICAgICAgZW1pdEV2ZW50OiB0cnVlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLnJlZnJlc2gkLm5leHQoKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcGFzdERhdGFTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KSxcbiAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZilcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKTtcblxuICAgIHRoaXMucmVmcmVzaCQubmV4dCgpO1xuICAgIHRoaXMuaXNPbmx5U291cmNlc1dpdGhNYXRlcmlhbEVuYWJsZWRGb3JtRmllbGQuc2V0VmFsdWUodGhpcy5pc09ubHlTb3VyY2VzV2l0aE1hdGVyaWFsRW5hYmxlZEZvcm1GaWVsZC52YWx1ZSwge1xuICAgICAgZW1pdEV2ZW50OiB0cnVlLFxuICAgIH0pO1xuICB9XG5cbiAgZ2V0VHJlbmQocm93OiBRdWFsaXR5TWF0cml4Um93LCBjb2x1bW46IFF1YWxpdHlNYXRyaXhIZWFkZXIpOiB7IGRlbHRhPzogbnVtYmVyOyB0cmVuZD86IHN0cmluZyB9IHtcbiAgICBpZiAodGhpcy5wYXN0UXVhbGl0eU1hdHJpeCQudmFsdWUgPT09IG51bGwgfHwgdGhpcy5wYXN0UXVhbGl0eU1hdHJpeCQudmFsdWUuY29sdW1ucy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiB7fTtcbiAgICB9XG4gICAgY29uc3QgcGFzdF9yb3cgPSB0aGlzLnBhc3RRdWFsaXR5TWF0cml4JD8udmFsdWUucm93cy5maW5kKChwcikgPT4gcHIubWV0YS5pZCA9PSByb3cubWV0YS5pZCk7XG4gICAgY29uc3QgcGFzdF9jb2x1bW4gPSB0aGlzLnBhc3RRdWFsaXR5TWF0cml4JC52YWx1ZS5jb2x1bW5zLmZpbmQoKGMpID0+IGMuaWQgPT0gY29sdW1uLmlkKTtcbiAgICBpZiAoIXBhc3Rfcm93IHx8ICFwYXN0X2NvbHVtbikge1xuICAgICAgcmV0dXJuIHt9O1xuICAgIH1cblxuICAgIGNvbnN0IGRlbHRhID0gTWF0aC5mbG9vcihcbiAgICAgICgxMDAgKiByb3cuY291bnRzW2NvbHVtbi5pZF0uc3VmZmljaWVudCkgLyBjb2x1bW4udG90YWwgLVxuICAgICAgICAoMTAwICogcGFzdF9yb3cuY291bnRzW2NvbHVtbi5pZF0uc3VmZmljaWVudCkgLyBwYXN0X2NvbHVtbi50b3RhbFxuICAgICk7XG5cbiAgICBjb25zdCB0cmVuZCA9IGRlbHRhID09PSAwID8gJ3RyZW5kaW5nX2ZsYXQnIDogZGVsdGEgPCAwID8gJ3RyZW5kaW5nX2Rvd24nIDogJ3RyZW5kaW5nX3VwJztcbiAgICByZXR1cm4geyBkZWx0YSwgdHJlbmQgfTtcbiAgfVxuXG4gIGdldERvbnV0U2xpY2VzKHJvdzogUXVhbGl0eU1hdHJpeFJvdywgY29sdW1uOiBRdWFsaXR5TWF0cml4SGVhZGVyKTogRG9udXRTbGljZVtdIHtcbiAgICBjb25zdCBzdWZmaWNpZW50VG90YWwgPSByb3cuY291bnRzW2NvbHVtbi5pZF0uc3VmZmljaWVudDtcbiAgICBjb25zdCBpbnN1ZmZpY2llbnRUb3RhbCA9IHJvdy5jb3VudHNbY29sdW1uLmlkXS5pbnN1ZmZpY2llbnQ7XG4gICAgY29uc3QgbWlzc2luZ1RvdGFsID0gY29sdW1uLnRvdGFsIC0gc3VmZmljaWVudFRvdGFsIC0gaW5zdWZmaWNpZW50VG90YWw7XG4gICAgbGV0IHN1ZmZpY2llbnRGaWxsUmF0ZSA9IDA7XG4gICAgbGV0IGluc3VmZmljaWVudEZpbGxSYXRlID0gMDtcbiAgICAvL0RlciBXZXJ0IGJlcmVjaG5ldCBzaWNoIGF1cyBkZW0gdG90YWxfY291bnQgLSB3aXRob3V0X2Rlc2NyaXB0aW9uX2NvdW50LlxuXG4gICAgaWYgKGNvbHVtbi50b3RhbCAhPT0gMCkge1xuICAgICAgc3VmZmljaWVudEZpbGxSYXRlID0gTWF0aC5yb3VuZCgoMTAwICogc3VmZmljaWVudFRvdGFsKSAvIGNvbHVtbi50b3RhbCk7XG4gICAgICBpbnN1ZmZpY2llbnRGaWxsUmF0ZSA9IE1hdGgucm91bmQoKDEwMCAqIGluc3VmZmljaWVudFRvdGFsKSAvIGNvbHVtbi50b3RhbCk7XG4gICAgfVxuICAgIGNvbnN0IHJlc3QgPSAxMDAgLSAoc3VmZmljaWVudEZpbGxSYXRlICsgaW5zdWZmaWNpZW50RmlsbFJhdGUpOyAvLyBhLmsuYS4gXCJtaXNzaW5nXCJcbiAgICByZXR1cm4gW1xuICAgICAge1xuICAgICAgICBpZDogMyxcbiAgICAgICAgcGVyY2VudDogcmVzdCxcbiAgICAgICAgY29sb3I6ICcjRDhFREZDJyxcbiAgICAgICAgbGFiZWw6IGAke3Jlc3R9ICUgKCR7bWlzc2luZ1RvdGFsfSlgLFxuICAgICAgICB2ZXJib3NlTGFiZWw6IGAke21pc3NpbmdUb3RhbH0gTWV0YWRhdGVuc1xcdTAwZTR0emUgZmVobGVuYCxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGlkOiAxLFxuICAgICAgICBwZXJjZW50OiBpbnN1ZmZpY2llbnRGaWxsUmF0ZSxcbiAgICAgICAgY29sb3I6ICcjQzIwODA4JyxcbiAgICAgICAgbGFiZWw6IGAke2luc3VmZmljaWVudEZpbGxSYXRlfSAlICgke2luc3VmZmljaWVudFRvdGFsfSlgLFxuICAgICAgICB2ZXJib3NlTGFiZWw6IGAke2luc3VmZmljaWVudFRvdGFsfSBNZXRhZGF0ZW5zXFx1MDBlNHR6ZSBzaW5kIHVuenVyZWljaGVuZCBhdXNnZWZcXHUwMGZjbGx0YCxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGlkOiAyLFxuICAgICAgICBwZXJjZW50OiBzdWZmaWNpZW50RmlsbFJhdGUsXG4gICAgICAgIGNvbG9yOiAnIzRBQkVGRicsXG4gICAgICAgIGxhYmVsOiBgJHtzdWZmaWNpZW50RmlsbFJhdGV9ICUgKCR7c3VmZmljaWVudFRvdGFsfSlgLFxuICAgICAgICB2ZXJib3NlTGFiZWw6IGAke3N1ZmZpY2llbnRUb3RhbH0gTWV0YWRhdGVuc1xcdTAwZTR0emUgc2luZCBndXQgYXVzZ2VmXFx1MDBmY2xsdGAsXG4gICAgICB9LFxuICAgIF07XG4gIH1cblxuICBzaG93VG9vbHRpcChyb3c6IFF1YWxpdHlNYXRyaXhSb3csIGNvbHVtbjogUXVhbGl0eU1hdHJpeEhlYWRlciwgY2VsbDogSFRNTEVsZW1lbnQpIHtcbiAgICBpZiAocm93LmNvdW50c1tjb2x1bW4uaWRdLnN1ZmZpY2llbnQgKyByb3cuY291bnRzW2NvbHVtbi5pZF0uaW5zdWZmaWNpZW50ID09PSAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0aGlzLnRvb2x0aXBzLmhhcyhjZWxsKSkge1xuICAgICAgdGhpcy50b29sdGlwcy5nZXQoY2VsbCkhLmNhbmNlbENsb3NlQWN0aW9uKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgdG9vbHRpcFJlZiA9IHRoaXMudG9vbHRpcFNlcnZpY2UuY3JlYXRlKERvbnV0Q2hhcnRUb29sdGlwQ29tcG9uZW50LCB7XG4gICAgICBjbG9zZVRpbWVvdXQ6IG9wZW5DbG9zZVRpbWVvdXQsXG4gICAgICBvcGVuVGltZW91dDogb3BlbkNsb3NlVGltZW91dCxcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgbGFiZWw6IGNvbHVtbi5sYWJlbCxcbiAgICAgICAgZGF0YTogdHJhbnNmb3JtRG9udXRDaGFydERhdGEodGhpcy5nZXREb251dFNsaWNlcyhyb3csIGNvbHVtbikpLFxuICAgICAgfSxcbiAgICAgIG92ZXJsYXlDb25maWc6IHtcbiAgICAgICAgaGFzQmFja2Ryb3A6IGZhbHNlLFxuICAgICAgICBwb3NpdGlvblN0cmF0ZWd5OiB0aGlzLm92ZXJsYXkucG9zaXRpb24oKS5mbGV4aWJsZUNvbm5lY3RlZFRvKGNlbGwpLndpdGhQb3NpdGlvbnMoY2VudGVyUG9zaXRpb25TdHJhdGVneSksXG4gICAgICAgIGRpc3Bvc2VPbk5hdmlnYXRpb246IHRydWUsXG4gICAgICAgIHBhbmVsQ2xhc3M6ICdkb251dC1jaGFydC10b29sdGlwJyxcbiAgICAgIH0sXG4gICAgICBvbkNsb3NlOiAoKSA9PiB7XG4gICAgICAgIHRoaXMudG9vbHRpcHMuZGVsZXRlKGNlbGwpO1xuICAgICAgfSxcbiAgICB9KTtcbiAgICB0b29sdGlwUmVmLm9wZW4oKTtcbiAgICB0aGlzLnRvb2x0aXBzLnNldChjZWxsLCB0b29sdGlwUmVmKTtcbiAgfVxuXG4gIGhpZGVUb29sdGlwKGNlbGw6IEhUTUxFbGVtZW50KSB7XG4gICAgdGhpcy50b29sdGlwcy5nZXQoY2VsbCk/Lm1hcmtGb3JDbG9zZSgpO1xuICB9XG5cbiAgZmluZEhvcml6b250YWxTY3JvbGxDb250YWluZXIoZWxlbWVudDogRWxlbWVudCk6IEVsZW1lbnQgfCBudWxsIHtcbiAgICBpZiAoZWxlbWVudC5zY3JvbGxXaWR0aCA+IGVsZW1lbnQuY2xpZW50V2lkdGggJiYgWydhdXRvJywgJ3Njcm9sbCddLmluY2x1ZGVzKGdldENvbXB1dGVkU3R5bGUoZWxlbWVudCkub3ZlcmZsb3dYKSkge1xuICAgICAgLy8gZmluZCB0aGUgbmVhcmVzdCBob3Jpem9udGFsbHkgc2Nyb2xsYWJsZSBlbGVtZW50XG4gICAgICByZXR1cm4gZWxlbWVudDtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKCFlbGVtZW50LnBhcmVudEVsZW1lbnQpIHtcbiAgICAgICAgcmV0dXJuIGRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQ7XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5maW5kSG9yaXpvbnRhbFNjcm9sbENvbnRhaW5lcihlbGVtZW50LnBhcmVudEVsZW1lbnQpO1xuICAgIH1cbiAgfVxuXG4gIHNjcm9sbFRvUmlnaHQoKSB7XG4gICAgY29uc3Qgc2Nyb2xsaW5nRWxlbWVudCA9IHRoaXMuZmluZEhvcml6b250YWxTY3JvbGxDb250YWluZXIodGhpcy5yZWYubmF0aXZlRWxlbWVudCBhcyBIVE1MRWxlbWVudCk7XG4gICAgaWYgKCFzY3JvbGxpbmdFbGVtZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHZpZXdwb3J0ID0gZ2xvYmFsVGhpcy52aXN1YWxWaWV3cG9ydDtcbiAgICBpZiAoIXZpZXdwb3J0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHZpZXdwb3J0V2lkdGggPSB2aWV3cG9ydC53aWR0aDtcblxuICAgIGNvbnN0IGxhc3RWaXNpYmxlID0gdGhpcy5zY3JvbGxNYXJrZXJzLmZpbmRMYXN0KFxuICAgICAgKG1hcmtlcikgPT4gKG1hcmtlci5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQgYXMgSFRNTEVsZW1lbnQpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQgPCB2aWV3cG9ydFdpZHRoXG4gICAgKTtcblxuICAgIGlmICghbGFzdFZpc2libGUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBsZWZ0Q29sdW1uV2lkdGggPSB0aGlzLmlzc3VlVHlwZUhlYWRlcj8ubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aCA/PyAwO1xuXG4gICAgc2Nyb2xsaW5nRWxlbWVudC5zY3JvbGxCeSh7XG4gICAgICBsZWZ0OiAobGFzdFZpc2libGUuZWxlbWVudC5uYXRpdmVFbGVtZW50IGFzIEhUTUxFbGVtZW50KS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0IC0gbGVmdENvbHVtbldpZHRoLFxuICAgICAgYmVoYXZpb3I6ICdzbW9vdGgnLFxuICAgIH0pO1xuICB9XG5cbiAgc2Nyb2xsVG9MZWZ0KCkge1xuICAgIGNvbnN0IHNjcm9sbGluZ0VsZW1lbnQgPSB0aGlzLmZpbmRIb3Jpem9udGFsU2Nyb2xsQ29udGFpbmVyKHRoaXMucmVmLm5hdGl2ZUVsZW1lbnQgYXMgSFRNTEVsZW1lbnQpO1xuICAgIGlmICghc2Nyb2xsaW5nRWxlbWVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCB2aWV3cG9ydCA9IGdsb2JhbFRoaXMudmlzdWFsVmlld3BvcnQ7XG4gICAgaWYgKCF2aWV3cG9ydCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCB2aWV3cG9ydFdpZHRoID0gdmlld3BvcnQud2lkdGg7XG5cbiAgICBjb25zdCBsZWZ0Q29sdW1uV2lkdGggPSB0aGlzLmlzc3VlVHlwZUhlYWRlcj8ubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aCA/PyAwO1xuXG4gICAgY29uc3QgZmlyc3RWaXNpYmxlID0gdGhpcy5zY3JvbGxNYXJrZXJzLmZpbmQoXG4gICAgICAobWFya2VyKSA9PiAobWFya2VyLmVsZW1lbnQubmF0aXZlRWxlbWVudCBhcyBIVE1MRWxlbWVudCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkucmlnaHQgPiBsZWZ0Q29sdW1uV2lkdGhcbiAgICApO1xuXG4gICAgaWYgKCFmaXJzdFZpc2libGUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBzY3JvbGxpbmdFbGVtZW50LnNjcm9sbEJ5KHtcbiAgICAgIGxlZnQ6IChmaXJzdFZpc2libGUuZWxlbWVudC5uYXRpdmVFbGVtZW50IGFzIEhUTUxFbGVtZW50KS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5yaWdodCAtIHZpZXdwb3J0V2lkdGgsXG4gICAgICBiZWhhdmlvcjogJ3Ntb290aCcsXG4gICAgfSk7XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCd3aW5kb3c6c2Nyb2xsJylcbiAgQEhvc3RMaXN0ZW5lcignd2luZG93OnJlc2l6ZScpXG4gIG9uU2Nyb2xsKCkge1xuICAgIGNvbnN0IHNjcm9sbGluZ0VsZW1lbnQgPSB0aGlzLmZpbmRIb3Jpem9udGFsU2Nyb2xsQ29udGFpbmVyKHRoaXMucmVmLm5hdGl2ZUVsZW1lbnQgYXMgSFRNTEVsZW1lbnQpO1xuICAgIGlmICghc2Nyb2xsaW5nRWxlbWVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnNjcm9sbExlZnQuc2V0KHNjcm9sbGluZ0VsZW1lbnQuc2Nyb2xsTGVmdCk7XG4gICAgdGhpcy5zY3JvbGxXaWR0aC5zZXQoc2Nyb2xsaW5nRWxlbWVudC5zY3JvbGxXaWR0aCk7XG4gIH1cbn1cbiIsIjxtYXQtY2FyZCBhcHBlYXJhbmNlPVwicmFpc2VkXCI+XG4gIDxtYXQtY2FyZC1oZWFkZXIgKm5nSWY9XCJwYWdlVGl0bGVcIj5cbiAgICA8bWF0LWNhcmQtdGl0bGU+UXVhbGl0w6R0c21ldHJpazoge3sgcGFnZVRpdGxlIHwgdHJhbnNsYXRlIH19e3tpc0xvYWRpbmcoKSA/IFwiOiBMYWRlIG5ldWUgRGF0ZW4uXCIgOiBcIlwifX08L21hdC1jYXJkLXRpdGxlPlxuICA8L21hdC1jYXJkLWhlYWRlcj5cbiAgPG1hdC1jYXJkLWNvbnRlbnQgY2xhc3M9XCJ0b29sYmFyXCI+XG4gICAgPG1ldGFxczItcW0tZmlsdGVyICpuZ0Zvcj1cImxldCBmaWx0ZXIgb2YgY2F0ZWdvcnlDb250cm9scy5jb250cm9scyB8IGtleXZhbHVlOyB0cmFja0J5OiBmaWx0ZXJJZGVudFwiXG4gICAgICAgICAgICAgICAgICAgICAgIFtvcHRpb25zXT1cImNhdGVnb3J5RmlsdGVyVmFsdWVzLmdldChmaWx0ZXIua2V5KVwiXG4gICAgICAgICAgICAgICAgICAgICAgIFtpbnB1dEZvcm1Db250cm9sXT1cImZpbHRlci52YWx1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF0gPSBcIidmaWx0ZXIuJyArIGZpbHRlci5rZXkgfCB0cmFuc2xhdGVcIiAvPlxuICAgIDxkaXYgY2xhc3M9XCJhY3Rpb25iYXJcIj5cbiAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIFtkaXNhYmxlZF09XCJpc0xvYWRpbmcoKVwiIGxhYmVsUG9zaXRpb249XCJiZWZvcmVcIiBbZm9ybUNvbnRyb2xdPVwiaXNPbmx5U291cmNlc1dpdGhNYXRlcmlhbEVuYWJsZWRGb3JtRmllbGRcIiBpZD1cIm9ubHlTb3VyY2VzV2l0aE1hdGVyaWFsXCI+XG4gICAgICAgIHNob3cgb25seSBzb3VyY2VzIHdpdGggbWF0ZXJpYWxcbiAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgIDxkaXYgc3R5bGU9XCJmbGV4OiAxIDEgYXV0b1wiPjwvZGl2PlxuICAgICAgPG1ldGFxczItZGF0ZXBpY2tlciAqbmdJZj1cImlzSGlzdG9yaWNhbERhdGFFbmFibGVkKClcIiBbZGlzYWJsZWRdPVwiaXNMb2FkaW5nKClcIiBbaW5wdXRHcm91cF09XCJyYW5nZVwiIC8+XG4gICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBbZGlzYWJsZWRdPVwiaXNMb2FkaW5nKClcIiBsYWJlbFBvc2l0aW9uPVwiYmVmb3JlXCIgW2Zvcm1Db250cm9sXT1cImlzSGlzdG9yaWNhbERhdGFFbmFibGVkRm9ybUZpZWxkXCIgaWQ9XCJzaG93SGlzdG9yaWNhbERhdGFcIj5cbiAgICAgICAgc2hvdyBoaXN0b3JpY2FsIGRhdGFcbiAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgIDxidXR0b25cbiAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgIGNvbG9yPVwicHJpbWFyeVwiXG4gICAgICAgIFtkaXNhYmxlZF09XCJpc0xvYWRpbmcoKVwiXG4gICAgICAgIChjbGljayk9XCJyZWZyZXNoKClcIlxuICAgICAgICBtYXRUb29sdGlwPVwiQWt0dWFsaXNpZXJlIGRlbiBJU1QtU3RhbmRcIlxuICAgICAgICBtYXRUb29sdGlwU2hvd0RlbGF5PVwiNTAwXCJcbiAgICAgID5cbiAgICAgICAgPG1hdC1pY29uPnJlZnJlc2g8L21hdC1pY29uPlxuICAgICAgPC9idXR0b24+XG4gICAgICA8ZGl2IHN0eWxlPVwiZmxleDogMCAwIHt7c2Nyb2xsZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGh9fXB4XCI+PC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwic2Nyb2xsLWNvbnRyb2xsZXJcIiAjc2Nyb2xsZXI+IDwhLS0gcHV0IHRoZSB3aG9sZSB0b29sYmFyIGluIGEgZml4ZWQgY29udGFpbmVyIChNUVMtIC0tPlxuICAgICAgICA8YnV0dG9uIG1hdC1yYWlzZWQtYnV0dG9uIChjbGljayk9XCJzY3JvbGxUb0xlZnQoKVwiIFtkaXNhYmxlZF09XCIhaXNMZWZ0U2Nyb2xsYWJsZSgpXCIgY2xhc3M9XCJzY3JvbGwtYnV0dG9uXCI+XG4gICAgICAgICAgPG1hdC1pY29uIHN0eWxlPVwibWFyZ2luOiAwXCI+Y2hldnJvbl9sZWZ0PC9tYXQtaWNvbj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDxidXR0b24gbWF0LXJhaXNlZC1idXR0b24gKGNsaWNrKT1cInNjcm9sbFRvUmlnaHQoKVwiIFtkaXNhYmxlZF09XCIhaXNSaWdodFNjcm9sbGFibGUoKVwiIGNsYXNzPVwic2Nyb2xsLWJ1dHRvblwiPlxuICAgICAgICAgIDxtYXQtaWNvbiBzdHlsZT1cIm1hcmdpbjogMFwiPmNoZXZyb25fcmlnaHQ8L21hdC1pY29uPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L21hdC1jYXJkLWNvbnRlbnQ+XG48L21hdC1jYXJkPlxuPG1hdC1jYXJkPlxuICA8bWV0YXFzMi1wcm9ncmVzcy1zcGlubmVyIFtkaXNwbGF5UHJvZ3Jlc3NTcGlubmVyXT1cImlzTG9hZGluZygpXCI+PC9tZXRhcXMyLXByb2dyZXNzLXNwaW5uZXI+XG4gIDx0YWJsZSBbY2xhc3Mud2hpbGUtbG9hZGluZ109XCJpc0xvYWRpbmcoKVwiIG1hdC10YWJsZSBbZGF0YVNvdXJjZV09XCJyZWNlbnRRdWFsaXR5TWF0cml4KCkucm93c1wiIGNsYXNzPVwicXVhbGl0eS1tYXRyaXhcIj5cbiAgICA8IS0tIERlZmluZSBjb2x1bW5zIG9mIHRhYmxlIC0tPlxuICAgIDwhLS0gUm93IEhlYWRlciBDb2x1bW4gLS0+XG4gICAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9XCJyb3ctaGVhZGVyXCIgc3RpY2t5PlxuICAgICAgPHRoIHJvd3NwYW49XCIyXCIgbWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmICNpc3N1ZVR5cGU+SXNzdWUgVHlwZTwvdGg+XG4gICAgICA8dGRcbiAgICAgICAgbWF0LWNlbGxcbiAgICAgICAgKm1hdENlbGxEZWY9XCJsZXQgcm93XCJcbiAgICAgICAgbWF0VG9vbHRpcD1cInt7cm93Lm1ldGEuYWx0X2xhYmVsfX1cIlxuICAgICAgICBjbGFzcz1cInJvdy1oZWFkZXIgbWF0LWNlbGwtbGV2ZWwte3tyb3cubWV0YS5sZXZlbCArIDF9fVwiXG4gICAgICA+XG4gICAgICAgIHt7XCJxdWFsaXR5X21hdHJpeC5cIiArIHJvdy5tZXRhLmxhYmVsIHwgdHJhbnNsYXRlIH19XG4gICAgICA8L3RkPlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwhLS0gb25lIGNvbHVtbiBmb3IgdGhlIHNvdXJjZSAtLT5cbiAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBjb2wgb2YgZmlsdGVyZWRDb2x1bW5zKCk7IHRyYWNrQnk6Y29sdW1uSWRlbnRcIiBbbWF0Q29sdW1uRGVmXT1cImNvbC5pZCArICdfc291cmNlJ1wiPlxuICAgICAgPHRoIFthdHRyLmNvbHNwYW5dPVwiaXNIaXN0b3JpY2FsRGF0YUVuYWJsZWQoKSA/IDIgOiAxXCIgbWV0YXFzMlNjcm9sbE1hcmtlciBtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWYgbWF0VG9vbHRpcD1cInt7Y29sLmFsdExhYmVsfX1cIj57e2NvbC5sYWJlbH19PC90aD5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8IS0tIC9zb3VyY2UgLS0+XG4gICAgPCEtLSBjdXJyZW50IERhdGEgQ29sdW1ucyAtLT5cbiAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBjb2x1bW4gb2YgZmlsdGVyZWRDb2x1bW5zKCk7IHRyYWNrQnk6Y29sdW1uSWRlbnRcIiBbbWF0Q29sdW1uRGVmXT1cImNvbHVtbi5pZCArICdfY3VycmVudCdcIj5cbiAgICAgIDx0aCBjbGFzcz1cInJlY2VudC1kYXRhLWNlbGxcIiBtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWYgbWF0VG9vbHRpcD1cInt7Y29sdW1uLmFsdExhYmVsfX1cIj57eyByYW5nZS5jb250cm9scy5lbmQudmFsdWU/LnRvTG9jYWxlU3RyaW5nKERhdGVUaW1lLkRBVEVfU0hPUlQpIH19IDxicj4oe3tjb2x1bW4udG90YWx9fSk8L3RoPlxuICAgICAgPHRkIGNsYXNzPVwicmVjZW50LWRhdGEtY2VsbFwiIG1hdC1jZWxsICptYXRDZWxsRGVmPVwibGV0IHJvd1wiICNjZWxsIChtb3VzZW92ZXIpPVwic2hvd1Rvb2x0aXAocm93LCBjb2x1bW4sIGNlbGwpXCIgKG1vdXNlbGVhdmUpPVwiaGlkZVRvb2x0aXAoY2VsbClcIj5cbiAgICAgICAgICA8YSAqbmdJZj1cImNvbHVtbi50b3RhbCA+IDAgZWxzZSBlbXB0eURpdlwiIGNsYXNzPVwiY2hhcnQtY29udGFpbmVyXCIgKGNsaWNrKT1cIm9wZW5FZGl0TGluayggY29sdW1uLmxhYmVsLCByb3cubWV0YS5sYWJlbClcIj5cbiAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgIDxtZXRhcXMyLWRvbnV0LWNoYXJ0IFtkYXRhXT1cImdldERvbnV0U2xpY2VzKHJvdywgY29sdW1uKVwiIFtib3JkZXJTaXplXT1cIjI1XCI+PC9tZXRhcXMyLWRvbnV0LWNoYXJ0PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9hPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjZW1wdHlEaXY+XG4gICAgICAgICAgICA8ZGl2Pi08L2Rpdj5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPC90ZD5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8IS0tIC9jdXJyZW50IERhdGEgQ29sdW1ucyAtLT5cbiAgICA8IS0tIHBhc3QgRGF0YSBDb2x1bW5zIC0tPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpc0hpc3RvcmljYWxEYXRhRW5hYmxlZCgpXCI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBjb2x1bW4gb2YgZmlsdGVyZWRDb2x1bW5zKCk7IHRyYWNrQnk6Y29sdW1uSWRlbnRcIiBbbWF0Q29sdW1uRGVmXT1cImNvbHVtbi5pZCArICdfcGFzdCdcIj5cbiAgICAgICAgPHRoIGNsYXNzPVwiaGlzdG9yaWMtZGF0YS1jZWxsXCIgbWF0LWhlYWRlci1jZWxsXG4gICAgICAgICAgICAqbWF0SGVhZGVyQ2VsbERlZj57eyByYW5nZS5jb250cm9scy5zdGFydC52YWx1ZT8udG9Mb2NhbGVTdHJpbmcoRGF0ZVRpbWUuREFURV9TSE9SVCkgfX1cbiAgICAgICAgICA8YnI+e3sgZ2V0UGFzdENvbHVtbihjb2x1bW4uaWQpPy50b3RhbCB9fVxuICAgICAgICA8L3RoPlxuICAgICAgICA8dGQgY2xhc3M9XCJoaXN0b3JpYy1kYXRhLWNlbGxcIiBtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCByb3dcIj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZ2V0VHJlbmQocm93LCBjb2x1bW4pIGFzIHRyZW5kXCI+XG4gICAgICAgICAgICA8c3BhbiBbbmdDbGFzc109XCJ0cmVuZC50cmVuZFwiPlxuICAgICAgICAgICAgICA8bWF0LWljb24gYXJpYS1oaWRkZW49XCJmYWxzZVwiIFthdHRyLmFyaWEtbGFiZWxdPVwidHJlbmQudHJlbmRcIiBbZm9udEljb25dPVwidHJlbmQudHJlbmQhXCIgLz5cbiAgICAgICAgICAgICAge3sgdHJlbmQuZGVsdGEgfX1cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICA8L3RkPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPCEtLSAvcGFzdCBEYXRhIENvbHVtbnMgLS0+XG5cbiAgICAgIDwhLS0gR2VuZXJhdGUgYWN0dWFsIHRhYmxlIC0tPlxuICAgIDx0ciBtYXQtaGVhZGVyLXJvdyAqbWF0SGVhZGVyUm93RGVmPVwiWydyb3ctaGVhZGVyJ10uY29uY2F0KHNvdXJjZUNvbHVtbnMoKSk7IHN0aWNreTogdHJ1ZTtcIj48L3RyPlxuICAgIDx0ciBtYXQtaGVhZGVyLXJvdyAqbWF0SGVhZGVyUm93RGVmPVwiYWxsRGF0YUNvbHVtbnMoKTsgc3RpY2t5OiB0cnVlO1wiIFtoaWRkZW5dPVwiIWlzSGlzdG9yaWNhbERhdGFFbmFibGVkKClcIj48L3RyPlxuICAgIDx0ciBtYXQtcm93ICptYXRSb3dEZWY9XCJsZXQgcm93OyBjb2x1bW5zOiBbJ3Jvdy1oZWFkZXInXS5jb25jYXQoYWxsRGF0YUNvbHVtbnMoKSlcIj48L3RyPlxuICA8L3RhYmxlPlxuPC9tYXQtY2FyZD5cbiJdfQ==
|
|
413
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVhbGl0eV9tYXRyaXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1tZXRhLXdpZGdldHMtbGliL3NyYy9saWIvY29tcG9uZW50cy9xdWFsaXR5LW1hdHJpeC9xdWFsaXR5X21hdHJpeC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLW1ldGEtd2lkZ2V0cy1saWIvc3JjL2xpYi9jb21wb25lbnRzL3F1YWxpdHktbWF0cml4L3F1YWxpdHktbWF0cml4Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLFNBQVMsRUFDVCxRQUFRLEVBQ1IsVUFBVSxFQUNWLFVBQVUsRUFDVixZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFFTCxNQUFNLEVBQ04sU0FBUyxFQUNULFlBQVksR0FDYixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsZUFBZSxFQUFFLGFBQWEsRUFBYyxFQUFFLEVBQUUsT0FBTyxFQUFrQixNQUFNLE1BQU0sQ0FBQztBQUMvRixPQUFPLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0YsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRXhELE9BQU8sRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3pGLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxRQUFRLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUMxRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxrREFBa0QsQ0FBQztBQUN4RixPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sT0FBTyxDQUFDO0FBRWpDLE9BQU8sRUFBWSxZQUFZLEVBQUUsT0FBTyxFQUFFLE9BQU8s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O3dCQUNaLE1BQU07d0JBQ04sZUFBZTt3QkFDZixTQUFTO3dCQUNULGdCQUFnQjt3QkFDaEIsT0FBTzt3QkFDUCxJQUFJO3dCQUNKLFVBQVU7d0JBQ1YsU0FBUzt3QkFDVCxhQUFhO3dCQUNiLG1CQUFtQjt3QkFDbkIscUJBQXFCO3FCQUN0Qjs4QkEwQmdCLGVBQWU7c0JBSi9CLFNBQVM7dUJBQUMsV0FBVyxFQUFFO3dCQUN0QixJQUFJLEVBQUUsVUFBVTt3QkFDaEIsTUFBTSxFQUFFLElBQUk7cUJBQ2I7Z0JBd0JnQixhQUFhO3NCQUQ3QixZQUFZO3VCQUFDLHFCQUFxQjtnQkFtQm5DLFNBQVM7c0JBRFIsS0FBSztnQkF1V04sUUFBUTtzQkFGUCxZQUFZO3VCQUFDLGVBQWU7O3NCQUM1QixZQUFZO3VCQUFDLGVBQWUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBZnRlclZpZXdDaGVja2VkLFxuICBDb21wb25lbnQsXG4gIGNvbXB1dGVkLFxuICBEZXN0cm95UmVmLFxuICBFbGVtZW50UmVmLFxuICBIb3N0TGlzdGVuZXIsXG4gIGluamVjdCxcbiAgSW5wdXQsXG4gIE9uSW5pdCxcbiAgc2lnbmFsLFxuICBWaWV3Q2hpbGQsXG4gIFZpZXdDaGlsZHJlbixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIGNvbWJpbmVMYXRlc3QsIE9ic2VydmFibGUsIG9mLCBTdWJqZWN0LCBVbnN1YnNjcmliYWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZmlsdGVyLCBmaW5hbGl6ZSwgbWFwLCBzd2l0Y2hNYXAsIHRha2UsIHRhcCwgdGhyb3R0bGVUaW1lIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgTWV0YUFwaVNlcnZpY2UgfSBmcm9tICcuLi8uLi9tZXRhLWFwaS5zZXJ2aWNlJztcbmltcG9ydCB7IEZpbHRlciwgRmlsdGVyVmFsdWUsIFF1YWxpdHlNYXRyaXgsIFF1YWxpdHlNYXRyaXhIZWFkZXIsIFF1YWxpdHlNYXRyaXhSb3cgfSBmcm9tICcuLi8uLi9qYXZhLWFwaSc7XG5pbXBvcnQgeyBGb3JtQ29udHJvbCwgRm9ybUdyb3VwLCBGb3JtUmVjb3JkLCBSZWFjdGl2ZUZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgdGFrZVVudGlsRGVzdHJveWVkLCB0b1NpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7IEVkaXRvcmlhbExpbmtTZXJ2aWNlIH0gZnJvbSAnLi4vZWRpdG9yaWFsLWxpbmstc2VydmljZS9lZGl0b3JpYWwtbGluay5zZXJ2aWNlJztcbmltcG9ydCB7IERhdGVUaW1lIH0gZnJvbSAnbHV4b24nO1xuaW1wb3J0IHsgRG9udXRTbGljZSB9IGZyb20gJy4uL2RvbnV0LWNoYXJ0L2RvbnV0LWNoYXJ0Lm1vZGVsJztcbmltcG9ydCB7IEtleVZhbHVlLCBLZXlWYWx1ZVBpcGUsIE5nQ2xhc3MsIE5nRm9yT2YsIE5nSWYgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgT3ZlcmxheSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9vdmVybGF5JztcbmltcG9ydCB7XG4gIERvbnV0Q2hhcnRUb29sdGlwQ29tcG9uZW50LFxuICB0cmFuc2Zvcm1Eb251dENoYXJ0RGF0YSxcbn0gZnJvbSAnLi4vZG9udXQtY2hhcnQtdG9vbHRpcC9kb251dC1jaGFydC10b29sdGlwLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBjZW50ZXJQb3NpdGlvblN0cmF0ZWd5LCBUb29sdGlwUmVmLCBUb29sdGlwU2VydmljZSB9IGZyb20gJy4uLy4uL2NvcmUvdG9vbHRpcC5zZXJ2aWNlJztcbmltcG9ydCB7IE1hdENhcmQsIE1hdENhcmRDb250ZW50LCBNYXRDYXJkSGVhZGVyLCBNYXRDYXJkVGl0bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jYXJkJztcbmltcG9ydCB7IFF1YWxpdHlNYXRyaXhGaWx0ZXJDb21wb25lbnQgfSBmcm9tICcuLi9maWx0ZXIvcXVhbGl0eS1tYXRyaXgtZmlsdGVyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBUcmFuc2xhdGVNb2R1bGUgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IE1hdEljb24gfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pY29uJztcbmltcG9ydCB7IERhdGVwaWNrZXJDb21wb25lbnQgfSBmcm9tICcuLi9maWx0ZXIvZGF0ZXBpY2tlci9kYXRlcGlja2VyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBNYXRTbGlkZVRvZ2dsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NsaWRlLXRvZ2dsZSc7XG5pbXBvcnQgeyBQcm9ncmVzc1NwaW5uZXJDb21wb25lbnQgfSBmcm9tICcuLi9sb2FkaW5nX2luZGljYXRvci9wcm9ncmVzcy1zcGlubmVyL3Byb2dyZXNzLXNwaW5uZXIuY29tcG9uZW50JztcbmltcG9ydCB7XG4gIE1hdENlbGwsXG4gIE1hdENlbGxEZWYsXG4gIE1hdENvbHVtbkRlZixcbiAgTWF0SGVhZGVyQ2VsbCxcbiAgTWF0SGVhZGVyQ2VsbERlZixcbiAgTWF0SGVhZGVyUm93LFxuICBNYXRIZWFkZXJSb3dEZWYsXG4gIE1hdFJvdyxcbiAgTWF0Um93RGVmLFxuICBNYXRUYWJsZSxcbn0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdGFibGUnO1xuaW1wb3J0IHsgTWF0VG9vbHRpcCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3Rvb2x0aXAnO1xuaW1wb3J0IHsgTWF0QnV0dG9uLCBNYXRJY29uQnV0dG9uIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYnV0dG9uJztcbmltcG9ydCB7IERvbnV0Q2hhcnRDb21wb25lbnQgfSBmcm9tICcuLi9kb251dC1jaGFydC9kb251dC1jaGFydC5jb21wb25lbnQnO1xuaW1wb3J0IHsgU2Nyb2xsTWFya2VyRGlyZWN0aXZlIH0gZnJvbSAnLi9zY3JvbGwtbWFya2VyLmRpcmVjdGl2ZSc7XG5cbmNvbnN0IG9wZW5DbG9zZVRpbWVvdXQgPSAxNTA7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ21ldGFxczItcXVhbGl0eS1tYXRyaXgtdjInLFxuICBwcm92aWRlcnM6IFtUb29sdGlwU2VydmljZV0sXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIHRlbXBsYXRlVXJsOiAnLi9xdWFsaXR5LW1hdHJpeC5odG1sJyxcbiAgaW1wb3J0czogW1xuICAgIE1hdENhcmQsXG4gICAgTWF0Q2FyZEhlYWRlcixcbiAgICBNYXRDYXJkVGl0bGUsXG4gICAgTWF0Q2FyZENvbnRlbnQsXG4gICAgUXVhbGl0eU1hdHJpeEZpbHRlckNvbXBvbmVudCxcbiAgICBUcmFuc2xhdGVNb2R1bGUsXG4gICAgS2V5VmFsdWVQaXBlLFxuICAgIE1hdEljb24sXG4gICAgRGF0ZXBpY2tlckNvbXBvbmVudCxcbiAgICBNYXRTbGlkZVRvZ2dsZSxcbiAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxuICAgIFByb2dyZXNzU3Bpbm5lckNvbXBvbmVudCxcbiAgICBNYXRUYWJsZSxcbiAgICBNYXRUb29sdGlwLFxuICAgIE1hdENlbGwsXG4gICAgTWF0Q29sdW1uRGVmLFxuICAgIE1hdEhlYWRlckNlbGwsXG4gICAgTmdDbGFzcyxcbiAgICBNYXRIZWFkZXJSb3csXG4gICAgTWF0Um93LFxuICAgIE1hdEhlYWRlclJvd0RlZixcbiAgICBNYXRSb3dEZWYsXG4gICAgTWF0SGVhZGVyQ2VsbERlZixcbiAgICBOZ0Zvck9mLFxuICAgIE5nSWYsXG4gICAgTWF0Q2VsbERlZixcbiAgICBNYXRCdXR0b24sXG4gICAgTWF0SWNvbkJ1dHRvbixcbiAgICBEb251dENoYXJ0Q29tcG9uZW50LFxuICAgIFNjcm9sbE1hcmtlckRpcmVjdGl2ZSxcbiAgXSxcbiAgc3R5bGVVcmxzOiBbJy4vcXVhbGl0eV9tYXRyaXguc2NzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBRdWFsaXR5TWF0cml4Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdDaGVja2VkIHtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHJlZiA9IGluamVjdChFbGVtZW50UmVmKTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGRlc3Ryb3lSZWYgPSBpbmplY3QoRGVzdHJveVJlZik7XG4gIHByb3RlY3RlZCByZWFkb25seSBtZXRhQXBpID0gaW5qZWN0KE1ldGFBcGlTZXJ2aWNlKTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGxpbmtTZXJ2aWNlID0gaW5qZWN0KEVkaXRvcmlhbExpbmtTZXJ2aWNlKTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IG92ZXJsYXkgPSBpbmplY3QoT3ZlcmxheSk7XG4gIHByb3RlY3RlZCByZWFkb25seSB0b29sdGlwU2VydmljZSA9IGluamVjdChUb29sdGlwU2VydmljZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgc2Nyb2xsTGVmdCA9IHNpZ25hbCgwKTtcbiAgcHJpdmF0ZSByZWFkb25seSBzY3JvbGxXaWR0aCA9IHNpZ25hbCgwKTtcbiAgcHVibGljIHJlYWRvbmx5IGlzTGVmdFNjcm9sbGFibGUgPSBjb21wdXRlZCgoKSA9PiB0aGlzLnNjcm9sbExlZnQoKSA+IDApO1xuICBwdWJsaWMgcmVhZG9ubHkgaXNSaWdodFNjcm9sbGFibGUgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3Qgdmlld3BvcnQgPSBnbG9iYWxUaGlzLnZpc3VhbFZpZXdwb3J0O1xuICAgIGlmICghdmlld3BvcnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3Qgdmlld3BvcnRXaWR0aCA9IHZpZXdwb3J0LndpZHRoO1xuXG4gICAgcmV0dXJuIHRoaXMuc2Nyb2xsV2lkdGgoKSA+IHZpZXdwb3J0V2lkdGggJiYgdGhpcy5zY3JvbGxMZWZ0KCkgKyB2aWV3cG9ydFdpZHRoIDwgdGhpcy5zY3JvbGxXaWR0aCgpO1xuICB9KTtcbiAgQFZpZXdDaGlsZCgnaXNzdWVUeXBlJywge1xuICAgIHJlYWQ6IEVsZW1lbnRSZWYsXG4gICAgc3RhdGljOiB0cnVlLFxuICB9KVxuICBwcml2YXRlIHJlYWRvbmx5IGlzc3VlVHlwZUhlYWRlciE6IEVsZW1lbnRSZWY8SFRNTFRhYmxlQ2VsbEVsZW1lbnQ+O1xuICByZWFkb25seSBmaWx0ZXJlZENvbHVtbnMgPSBjb21wdXRlZDxBcnJheTxRdWFsaXR5TWF0cml4SGVhZGVyPj4oKCkgPT4ge1xuICAgIGNvbnN0IGFsbENvbHVtbnMgPSB0aGlzLmFsbENvbHVtbnMoKTtcbiAgICBjb25zdCBpc09ubHlTb3VyY2VzV2l0aE1hdGVyaWFsRW5hYmxlZCA9IHRoaXMuaXNPbmx5U291cmNlc1dpdGhNYXRlcmlhbEVuYWJsZWQoKTtcbiAgICBpZiAoaXNPbmx5U291cmNlc1dpdGhNYXRlcmlhbEVuYWJsZWQpIHtcbiAgICAgIHJldHVybiBhbGxDb2x1bW5zLmZpbHRlcigoYykgPT4gYy50b3RhbCA+IDApO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gYWxsQ29sdW1ucztcbiAgICB9XG4gIH0pO1xuICByZWFkb25seSBkYXRhdGFibGVDb2x1bW5zID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIHJldHVybiB0aGlzLmZpbHRlcmVkQ29sdW1ucygpXG4gICAgICAuZmlsdGVyKChjKSA9PiBjLmxldmVsICE9PSAwKVxuICAgICAgLm1hcCgoYykgPT4gYy5pZCk7XG4gIH0pO1xuICByZWFkb25seSBpc0hpc3RvcmljYWxEYXRhRW5hYmxlZEZvcm1GaWVsZCA9IG5ldyBGb3JtQ29udHJvbCh7IHZhbHVlOiBmYWxzZSwgZGlzYWJsZWQ6IHRydWUgfSk7XG4gIHJlYWRvbmx5IGlzSGlzdG9yaWNhbERhdGFFbmFibGVkID0gdG9TaWduYWwodGhpcy5pc0hpc3RvcmljYWxEYXRhRW5hYmxlZEZvcm1GaWVsZC52YWx1ZUNoYW5nZXMpO1xuICByZWFkb25seSBpc09ubHlTb3VyY2VzV2l0aE1hdGVyaWFsRW5hYmxlZEZvcm1GaWVsZCA9IG5ldyBGb3JtQ29udHJvbCh7IHZhbHVlOiB0cnVlLCBkaXNhYmxlZDogdHJ1ZSB9KTtcbiAgcmVhZG9ubHkgaXNPbmx5U291cmNlc1dpdGhNYXRlcmlhbEVuYWJsZWQgPSB0b1NpZ25hbCh0aGlzLmlzT25seVNvdXJjZXNXaXRoTWF0ZXJpYWxFbmFibGVkRm9ybUZpZWxkLnZhbHVlQ2hhbmdlcyk7XG4gIHJlYWRvbmx5IGNhdGVnb3J5Q29udHJvbHMgPSBuZXcgRm9ybVJlY29yZDxGb3JtQ29udHJvbDxBcnJheTxzdHJpbmc+Pj4oe30pO1xuICByZWFkb25seSBsb2FkaW5nQ291bnQgPSBzaWduYWwoMCk7XG4gIHJlYWRvbmx5IGlzTG9hZGluZyA9IGNvbXB1dGVkKCgpID0+IHRoaXMubG9hZGluZ0NvdW50KCkgPiAwKTtcbiAgQFZpZXdDaGlsZHJlbihTY3JvbGxNYXJrZXJEaXJlY3RpdmUpXG4gIHByaXZhdGUgcmVhZG9ubHkgc2Nyb2xsTWFya2VycyE6IFJlYWRvbmx5QXJyYXk8U2Nyb2xsTWFya2VyRGlyZWN0aXZlPjtcbiAgcmVhZG9ubHkgY2F0ZWdvcnlGaWx0ZXJWYWx1ZXM6IE1hcDxzdHJpbmcsIEZpbHRlclZhbHVlW10+ID0gbmV3IE1hcCgpO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgcmVmcmVzaCQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICByZWFkb25seSByZWNlbnRRdWFsaXR5TWF0cml4JCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8UXVhbGl0eU1hdHJpeD4oeyBjb2x1bW5zOiBbXSwgcm93czogW10gfSBhcyBRdWFsaXR5TWF0cml4KTtcbiAgcmVhZG9ubHkgcmVjZW50UXVhbGl0eU1hdHJpeCA9IHRvU2lnbmFsKHRoaXMucmVjZW50UXVhbGl0eU1hdHJpeCQsIHtcbiAgICBpbml0aWFsVmFsdWU6IHsgY29sdW1uczogW10sIHJvd3M6IFtdIH0gYXMgUXVhbGl0eU1hdHJpeCxcbiAgfSk7XG4gIHJlYWRvbmx5IHBhc3RRdWFsaXR5TWF0cml4JCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8UXVhbGl0eU1hdHJpeCB8IG51bGw+KHsgY29sdW1uczogW10sIHJvd3M6IFtdIH0gYXMgUXVhbGl0eU1hdHJpeCk7XG4gIHJlYWRvbmx5IHJhbmdlOiBGb3JtR3JvdXA8e1xuICAgIHN0YXJ0OiBGb3JtQ29udHJvbDxEYXRlVGltZTxib29sZWFuPj47XG4gICAgZW5kOiBGb3JtQ29udHJvbDxEYXRlVGltZTxib29sZWFuPj47XG4gIH0+ID0gbmV3IEZvcm1Hcm91cCh7XG4gICAgc3RhcnQ6IG5ldyBGb3JtQ29udHJvbCgpLFxuICAgIGVuZDogbmV3IEZvcm1Db250cm9sKCksXG4gIH0pO1xuICBwcml2YXRlIHJlYWRvbmx5IHRvb2x0aXBzID0gbmV3IE1hcDxIVE1MRWxlbWVudCwgVG9vbHRpcFJlZjxEb251dENoYXJ0VG9vbHRpcENvbXBvbmVudD4+KCk7XG4gIHByb3RlY3RlZCByZWFkb25seSBEYXRlVGltZSA9IERhdGVUaW1lO1xuICBASW5wdXQoKVxuICBwYWdlVGl0bGU6IHN0cmluZyA9ICdRdWFsaXR5IE1hdHJpeCc7XG5cbiAgcmVhZG9ubHkgYWxsQ29sdW1ucyA9IGNvbXB1dGVkKCgpID0+XG4gICAgdGhpcy5yZWNlbnRRdWFsaXR5TWF0cml4KCk/LmNvbHVtbnMudG9Tb3J0ZWQoKGEsIGIpID0+IGEubGFiZWwubG9jYWxlQ29tcGFyZShiLmxhYmVsKSlcbiAgKTtcblxuICBuZ0FmdGVyVmlld0NoZWNrZWQoKTogdm9pZCB7XG4gICAgdGhpcy5vblNjcm9sbCgpO1xuICB9XG5cbiAgZmlsdGVySWRlbnQoX2luZGV4OiBudW1iZXIsIGl0ZW06IEtleVZhbHVlPHN0cmluZywgRm9ybUNvbnRyb2w8c3RyaW5nW10+Pikge1xuICAgIHJldHVybiBpdGVtLmtleTtcbiAgfVxuXG4gIHNvdXJjZUNvbHVtbnMgPSBjb21wdXRlZCgoKSA9PiB0aGlzLmRhdGF0YWJsZUNvbHVtbnMoKS5tYXAoKGMpID0+IGMgKyAnX3NvdXJjZScpKTtcblxuICBjdXJyZW50Q29sdW1ucyA9IGNvbXB1dGVkKCgpID0+IHRoaXMuZGF0YXRhYmxlQ29sdW1ucygpLm1hcCgoYykgPT4gYyArICdfY3VycmVudCcpKTtcblxuICBwYXN0Q29sdW1ucyA9IGNvbXB1dGVkKCgpID0+IHRoaXMuZGF0YXRhYmxlQ29sdW1ucygpLm1hcCgoYykgPT4gYyArICdfcGFzdCcpKTtcblxuICBhbGxEYXRhQ29sdW1ucyA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBwYXN0Q29sdW1ucyA9IHRoaXMucGFzdENvbHVtbnMoKTtcbiAgICBjb25zdCBjdXJyZW50Q29sdW1ucyA9IHRoaXMuY3VycmVudENvbHVtbnMoKTtcbiAgICBpZiAodGhpcy5pc0hpc3RvcmljYWxEYXRhRW5hYmxlZCgpKSB7XG4gICAgICByZXR1cm4gY3VycmVudENvbHVtbnMuZmxhdE1hcCgoZSwgaSkgPT4gW3Bhc3RDb2x1bW5zW2ldLCBlXSk7XG4gICAgfVxuICAgIHJldHVybiBjdXJyZW50Q29sdW1ucztcbiAgfSk7XG5cbiAgcHJpdmF0ZSBsb2FkRGF0YShjYXRlZ29yaWVzOiB7IFtrZXk6IHN0cmluZ106IEFycmF5PHN0cmluZz4gfSwgZGF0ZTogRGF0ZVRpbWU8dHJ1ZT4pOiBPYnNlcnZhYmxlPFF1YWxpdHlNYXRyaXg+IHtcbiAgICByZXR1cm4gb2YodW5kZWZpbmVkKS5waXBlKFxuICAgICAgdGFwKCgpID0+IHRoaXMubG9hZGluZ0NvdW50LnVwZGF0ZSgoaXQpID0+IGl0ICsgMSkpLFxuICAgICAgc3dpdGNoTWFwKCgpID0+XG4gICAgICAgIHRoaXMubWV0YUFwaVxuICAgICAgICAgIC5nZXRRdWFsaXR5TWF0cml4V2l0aEZpbHRlcnNWMihbXG4gICAgICAgICAgICAuLi50aGlzLnRyYW5zZm9ybUNhdGVnb3J5RmlsdGVycyhjYXRlZ29yaWVzKSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgZmllbGQ6ICdhc09mJyxcbiAgICAgICAgICAgICAgdmFsdWVzOiBbXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgaWQ6IGRhdGUudG9JU08oe1xuICAgICAgICAgICAgICAgICAgICBpbmNsdWRlT2Zmc2V0OiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgIH0pIGFzIHN0cmluZyxcbiAgICAgICAgICAgICAgICAgIGxhYmVsOiAnJyxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdKVxuICAgICAgICAgIC5waXBlKHRha2UoMSkpXG4gICAgICApLFxuICAgICAgZmluYWxpemUoKCkgPT4gdGhpcy5sb2FkaW5nQ291bnQudXBkYXRlKChpdCkgPT4gaXQgLSAxKSlcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSB0cmFuc2Zvcm1DYXRlZ29yeUZpbHRlcnMoY2F0ZWdvcmllczogeyBba2V5OiBzdHJpbmddOiBBcnJheTxzdHJpbmc+IH0pOiBGaWx0ZXJbXSB7XG4gICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKGNhdGVnb3JpZXMpXG4gICAgICAuZmlsdGVyKChwYWlyKTogcGFpciBpcyBbc3RyaW5nLCBBcnJheTxzdHJpbmc+XSA9PiAhIXBhaXJbMV0/Lmxlbmd0aClcbiAgICAgIC5tYXAoKFtmaWVsZCwgdmFsdWVzXSkgPT4gKHtcbiAgICAgICAgZmllbGQsXG4gICAgICAgIHZhbHVlczogdmFsdWVzLm1hcCgodmFsdWUpID0+ICh7IGlkOiB2YWx1ZSwgbGFiZWw6ICcnIH0pKSxcbiAgICAgIH0pKTtcbiAgfVxuXG4gIHByaXZhdGUgbG9hZFBhc3REYXRhKGNhdGVnb3JpZXM6IGFueSwgZGF0ZTogRGF0ZVRpbWU8dHJ1ZT4pIHtcbiAgICByZXR1cm4gb2YodW5kZWZpbmVkKS5waXBlKHN3aXRjaE1hcCgoKSA9PiB0aGlzLmxvYWREYXRhKGNhdGVnb3JpZXMsIGRhdGUpKSk7XG4gIH1cblxuICBwcml2YXRlIGxvYWRDdXJyZW50RGF0YShjYXRlZ29yaWVzOiBhbnksIGRhdGU6IERhdGVUaW1lPHRydWU+KSB7XG4gICAgcmV0dXJuIG9mKHVuZGVmaW5lZCkucGlwZShzd2l0Y2hNYXAoKCkgPT4gdGhpcy5sb2FkRGF0YShjYXRlZ29yaWVzLCBkYXRlKSkpO1xuICB9XG5cbiAgb3BlbkVkaXRMaW5rKHNvdXJjZTogc3RyaW5nLCBpc3N1ZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMubGlua1NlcnZpY2Uub3BlbkJ5UmVwbGljYXRpb25zb3VyY2VBbmRJc3N1ZVR5cGVXaXRoRmlsdGVycyhzb3VyY2UsIGlzc3VlLCB0aGlzLmNhdGVnb3J5Q29udHJvbHMudmFsdWUpO1xuICB9XG5cbiAgLy8gc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9hbmd1bGFyL2NvbXBvbmVudHMvaXNzdWVzLzgzNjEjaXNzdWVjb21tZW50LTM0NTgwNDk1NFxuICBjb2x1bW5JZGVudChfaW5kZXg6IG51bWJlciwgY29sOiBRdWFsaXR5TWF0cml4SGVhZGVyKSB7XG4gICAgcmV0dXJuIGNvbC5pZDtcbiAgfVxuXG4gIHJlZnJlc2goKSB7XG4gICAgdGhpcy5yZWZyZXNoJC5uZXh0KCk7XG4gIH1cblxuICBnZXRQYXN0Q29sdW1uKGNvbHVtbklkOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5wYXN0UXVhbGl0eU1hdHJpeCQudmFsdWU/LmNvbHVtbnMuZmluZCgoYykgPT4gYy5pZCA9PT0gY29sdW1uSWQpO1xuICB9XG5cbiAgcHVibGljIG5nT25Jbml0KCkge1xuICAgIHRoaXMubG9hZGluZ0NvdW50LnVwZGF0ZSgoaXQpID0+IGl0ICsgMSk7XG4gICAgdGhpcy5tZXRhQXBpXG4gICAgICAuZ2V0Q2F0ZWdvcnlGaWx0ZXJzKClcbiAgICAgIC5waXBlKFxuICAgICAgICB0YWtlKDEpLFxuICAgICAgICB0YXAoKGZpbHRlcnMpID0+IHtcbiAgICAgICAgICBmaWx0ZXJzLmZvckVhY2goKGZpbHRlcikgPT4ge1xuICAgICAgICAgICAgLy8gZG8gbm90IGVtaXQgdGhlIGV2ZW50IHdoZW4gc2V0dGluZyB0aGUgY29udHJvbCB0byBwcmV2ZW50IHVubmVjZXNzYXJ5IHZhbHVlQ2hhbmdlcyBldmVudHNcbiAgICAgICAgICAgIHRoaXMuY2F0ZWdvcnlDb250cm9scy5hZGRDb250cm9sKGZpbHRlci5maWVsZCwgbmV3IEZvcm1Db250cm9sKFtdLCB7IG5vbk51bGxhYmxlOiB0cnVlIH0pLCB7XG4gICAgICAgICAgICAgIGVtaXRFdmVudDogZmFsc2UsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMuY2F0ZWdvcnlGaWx0ZXJWYWx1ZXMuc2V0KFxuICAgICAgICAgICAgICBmaWx0ZXIuZmllbGQsXG4gICAgICAgICAgICAgIGZpbHRlci52YWx1ZXMudG9Tb3J0ZWQoKGEsIGIpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYS5sYWJlbC5sb2NhbGVDb21wYXJlKGIubGFiZWwpO1xuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICAvLyBlbWl0IHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBmb3JtIGdyb3VwIG9uY2UgdG8gdHJpZ2dlciB0aGUgdmFsdWVDaGFuZ2VzIG9ic2VydmFibGVcbiAgICAgICAgICB0aGlzLmNhdGVnb3J5Q29udHJvbHMuc2V0VmFsdWUodGhpcy5jYXRlZ29yeUNvbnRyb2xzLnZhbHVlIGFzIHsgW2tleTogc3RyaW5nXTogc3RyaW5nW10gfSwge1xuICAgICAgICAgICAgZW1pdEV2ZW50OiB0cnVlLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9KSxcbiAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZiksXG4gICAgICAgIGZpbmFsaXplKCgpID0+IHRoaXMubG9hZGluZ0NvdW50LnVwZGF0ZSgoaXQpID0+IGl0IC0gMSkpXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCk7XG5cbiAgICB0aGlzLmxvYWRpbmdDb3VudC51cGRhdGUoKGl0KSA9PiBpdCArIDEpO1xuICAgIHRoaXMubWV0YUFwaVxuICAgICAgLmdldFRpbWVyYW5nZUZpbHRlcigpXG4gICAgICAucGlwZShcbiAgICAgICAgZmlsdGVyKChyYW5nZUZpbHRlcikgPT4gISFyYW5nZUZpbHRlciksXG4gICAgICAgIHRhcCgocmFuZ2VGaWx0ZXIpID0+IHtcbiAgICAgICAgICBjb25zdCBzdGFydERhdGUgPSBEYXRlVGltZS5mcm9tSVNPKHJhbmdlRmlsdGVyLnZhbHVlcy5maW5kKCh2KSA9PiB2LmlkID09PSAncmFuZ2VTdGFydCcpPy5sYWJlbCEsIHtcbiAgICAgICAgICAgIHpvbmU6ICd1dGMnLFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGNvbnN0IGVuZERhdGUgPSBEYXRlVGltZS5mcm9tSVNPKHJhbmdlRmlsdGVyLnZhbHVlcy5maW5kKCh2KSA9PiB2LmlkID09PSAncmFuZ2VFbmQnKT8ubGFiZWwhLCB7XG4gICAgICAgICAgICB6b25lOiAndXRjJyxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICB0aGlzLnJhbmdlLnNldENvbnRyb2woJ3N0YXJ0JywgbmV3IEZvcm1Db250cm9sPERhdGVUaW1lPihzdGFydERhdGUsIHsgbm9uTnVsbGFibGU6IHRydWUgfSksIHtcbiAgICAgICAgICAgIGVtaXRFdmVudDogZmFsc2UsXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdGhpcy5yYW5nZS5zZXRDb250cm9sKCdlbmQnLCBuZXcgRm9ybUNvbnRyb2w8RGF0ZVRpbWU+KGVuZERhdGUsIHsgbm9uTnVsbGFibGU6IHRydWUgfSksIHtcbiAgICAgICAgICAgIGVtaXRFdmVudDogdHJ1ZSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSksXG4gICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpLFxuICAgICAgICBmaW5hbGl6ZSgoKSA9PiB0aGlzLmxvYWRpbmdDb3VudC51cGRhdGUoKGl0KSA9PiBpdCAtIDEpKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgpO1xuXG4gICAgY29tYmluZUxhdGVzdChbdGhpcy5jYXRlZ29yeUNvbnRyb2xzLnZhbHVlQ2hhbmdlcywgdGhpcy5yYW5nZS52YWx1ZUNoYW5nZXMsIHRoaXMucmVmcmVzaCRdKVxuICAgICAgLnBpcGUoXG4gICAgICAgIGZpbHRlcihcbiAgICAgICAgICAoZGF0YSk6IGRhdGEgaXMgW3sgW2tleTogc3RyaW5nXTogQXJyYXk8c3RyaW5nPiB9LCB7IGVuZDogRGF0ZVRpbWU8dHJ1ZT4gfSwgdm9pZF0gPT5cbiAgICAgICAgICAgICEhZGF0YVswXSAmJiAhIWRhdGFbMV0uZW5kPy5pc1ZhbGlkXG4gICAgICAgICksXG4gICAgICAgIHRocm90dGxlVGltZSg1MDApLFxuICAgICAgICBtYXAoKFtjYXRlZ29yaWVzLCByYW5nZV0pID0+IFtjYXRlZ29yaWVzLCByYW5nZS5lbmRdIGFzIGNvbnN0KSxcbiAgICAgICAgc3dpdGNoTWFwKChbY2F0ZWdvcmllcywgZW5kXSkgPT4gdGhpcy5sb2FkQ3VycmVudERhdGEoY2F0ZWdvcmllcywgZW5kKSksXG4gICAgICAgIHRhcCgoY3VycmVudFFtKSA9PiB7XG4gICAgICAgICAgdGhpcy5yZWNlbnRRdWFsaXR5TWF0cml4JC5uZXh0KGN1cnJlbnRRbSk7XG4gICAgICAgIH0pLFxuICAgICAgICB0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgpO1xuXG4gICAgbGV0IHBhc3REYXRhU3Vic2NyaXB0aW9uOiBVbnN1YnNjcmliYWJsZSB8IHVuZGVmaW5lZDtcblxuICAgIGNvbnN0IHBhc3REYXRhJCA9IGNvbWJpbmVMYXRlc3QoW3RoaXMuY2F0ZWdvcnlDb250cm9scy52YWx1ZUNoYW5nZXMsIHRoaXMucmFuZ2UudmFsdWVDaGFuZ2VzLCB0aGlzLnJlZnJlc2gkXSkucGlwZShcbiAgICAgIGZpbHRlcihcbiAgICAgICAgKGRhdGEpOiBkYXRhIGlzIFt7IFtrZXk6IHN0cmluZ106IEFycmF5PHN0cmluZz4gfSwgeyBzdGFydDogRGF0ZVRpbWU8dHJ1ZT4gfSwgdm9pZF0gPT5cbiAgICAgICAgICAhIWRhdGFbMF0gJiYgISFkYXRhWzFdLnN0YXJ0Py5pc1ZhbGlkXG4gICAgICApLFxuICAgICAgdGhyb3R0bGVUaW1lKDUwMCksXG4gICAgICBtYXAoKFtjYXRlZ29yaWVzLCByYW5nZV0pID0+IFtjYXRlZ29yaWVzLCByYW5nZS5zdGFydF0gYXMgY29uc3QpLFxuICAgICAgc3dpdGNoTWFwKChbY2F0ZWdvcmllcywgc3RhcnRdKSA9PiB0aGlzLmxvYWRQYXN0RGF0YShjYXRlZ29yaWVzLCBzdGFydCkpLFxuICAgICAgdGFwKChwYXN0UW0pID0+IHtcbiAgICAgICAgdGhpcy5wYXN0UXVhbGl0eU1hdHJpeCQubmV4dChwYXN0UW0pO1xuICAgICAgfSksXG4gICAgICB0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKVxuICAgICk7XG5cbiAgICB0aGlzLmlzSGlzdG9yaWNhbERhdGFFbmFibGVkRm9ybUZpZWxkLnZhbHVlQ2hhbmdlc1xuICAgICAgLnBpcGUoXG4gICAgICAgIHRhcCgoaXNFbmFibGVkKSA9PiB7XG4gICAgICAgICAgaWYgKGlzRW5hYmxlZCkge1xuICAgICAgICAgICAgcGFzdERhdGFTdWJzY3JpcHRpb24gPSBwYXN0RGF0YSQuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICB0aGlzLmNhdGVnb3J5Q29udHJvbHMuc2V0VmFsdWUodGhpcy5jYXRlZ29yeUNvbnRyb2xzLnZhbHVlIGFzIHsgW2tleTogc3RyaW5nXTogc3RyaW5nW10gfSwge1xuICAgICAgICAgICAgICBlbWl0RXZlbnQ6IHRydWUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMucmFuZ2Uuc2V0VmFsdWUodGhpcy5yYW5nZS52YWx1ZSBhcyB7IHN0YXJ0OiBEYXRlVGltZTsgZW5kOiBEYXRlVGltZSB9LCB7XG4gICAgICAgICAgICAgIGVtaXRFdmVudDogdHJ1ZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5yZWZyZXNoJC5uZXh0KCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHBhc3REYXRhU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSksXG4gICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCk7XG5cbiAgICB0aGlzLnJlZnJlc2gkLm5leHQoKTtcbiAgICB0aGlzLmlzT25seVNvdXJjZXNXaXRoTWF0ZXJpYWxFbmFibGVkRm9ybUZpZWxkLnNldFZhbHVlKHRoaXMuaXNPbmx5U291cmNlc1dpdGhNYXRlcmlhbEVuYWJsZWRGb3JtRmllbGQudmFsdWUsIHtcbiAgICAgIGVtaXRFdmVudDogdHJ1ZSxcbiAgICB9KTtcbiAgfVxuXG4gIGdldFRyZW5kKHJvdzogUXVhbGl0eU1hdHJpeFJvdywgY29sdW1uOiBRdWFsaXR5TWF0cml4SGVhZGVyKTogeyBkZWx0YT86IG51bWJlcjsgdHJlbmQ/OiBzdHJpbmcgfSB7XG4gICAgaWYgKHRoaXMucGFzdFF1YWxpdHlNYXRyaXgkLnZhbHVlID09PSBudWxsIHx8IHRoaXMucGFzdFF1YWxpdHlNYXRyaXgkLnZhbHVlLmNvbHVtbnMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4ge307XG4gICAgfVxuICAgIGNvbnN0IHBhc3Rfcm93ID0gdGhpcy5wYXN0UXVhbGl0eU1hdHJpeCQ/LnZhbHVlLnJvd3MuZmluZCgocHIpID0+IHByLm1ldGEuaWQgPT0gcm93Lm1ldGEuaWQpO1xuICAgIGNvbnN0IHBhc3RfY29sdW1uID0gdGhpcy5wYXN0UXVhbGl0eU1hdHJpeCQudmFsdWUuY29sdW1ucy5maW5kKChjKSA9PiBjLmlkID09IGNvbHVtbi5pZCk7XG4gICAgaWYgKCFwYXN0X3JvdyB8fCAhcGFzdF9jb2x1bW4pIHtcbiAgICAgIHJldHVybiB7fTtcbiAgICB9XG5cbiAgICBjb25zdCBkZWx0YSA9IE1hdGguZmxvb3IoXG4gICAgICAoMTAwICogcm93LmNvdW50c1tjb2x1bW4uaWRdLnN1ZmZpY2llbnQpIC8gY29sdW1uLnRvdGFsIC1cbiAgICAgICAgKDEwMCAqIHBhc3Rfcm93LmNvdW50c1tjb2x1bW4uaWRdLnN1ZmZpY2llbnQpIC8gcGFzdF9jb2x1bW4udG90YWxcbiAgICApO1xuXG4gICAgY29uc3QgdHJlbmQgPSBkZWx0YSA9PT0gMCA/ICd0cmVuZGluZ19mbGF0JyA6IGRlbHRhIDwgMCA/ICd0cmVuZGluZ19kb3duJyA6ICd0cmVuZGluZ191cCc7XG4gICAgcmV0dXJuIHsgZGVsdGEsIHRyZW5kIH07XG4gIH1cblxuICBnZXREb251dFNsaWNlcyhyb3c6IFF1YWxpdHlNYXRyaXhSb3csIGNvbHVtbjogUXVhbGl0eU1hdHJpeEhlYWRlcik6IERvbnV0U2xpY2VbXSB7XG4gICAgY29uc3Qgc3VmZmljaWVudFRvdGFsID0gcm93LmNvdW50c1tjb2x1bW4uaWRdLnN1ZmZpY2llbnQ7XG4gICAgY29uc3QgaW5zdWZmaWNpZW50VG90YWwgPSByb3cuY291bnRzW2NvbHVtbi5pZF0uaW5zdWZmaWNpZW50O1xuICAgIGNvbnN0IG1pc3NpbmdUb3RhbCA9IGNvbHVtbi50b3RhbCAtIHN1ZmZpY2llbnRUb3RhbCAtIGluc3VmZmljaWVudFRvdGFsO1xuICAgIGxldCBzdWZmaWNpZW50RmlsbFJhdGUgPSAwO1xuICAgIGxldCBpbnN1ZmZpY2llbnRGaWxsUmF0ZSA9IDA7XG4gICAgLy9EZXIgV2VydCBiZXJlY2huZXQgc2ljaCBhdXMgZGVtIHRvdGFsX2NvdW50IC0gd2l0aG91dF9kZXNjcmlwdGlvbl9jb3VudC5cblxuICAgIGlmIChjb2x1bW4udG90YWwgIT09IDApIHtcbiAgICAgIHN1ZmZpY2llbnRGaWxsUmF0ZSA9IE1hdGgucm91bmQoKDEwMCAqIHN1ZmZpY2llbnRUb3RhbCkgLyBjb2x1bW4udG90YWwpO1xuICAgICAgaW5zdWZmaWNpZW50RmlsbFJhdGUgPSBNYXRoLnJvdW5kKCgxMDAgKiBpbnN1ZmZpY2llbnRUb3RhbCkgLyBjb2x1bW4udG90YWwpO1xuICAgIH1cbiAgICBjb25zdCByZXN0ID0gMTAwIC0gKHN1ZmZpY2llbnRGaWxsUmF0ZSArIGluc3VmZmljaWVudEZpbGxSYXRlKTsgLy8gYS5rLmEuIFwibWlzc2luZ1wiXG4gICAgcmV0dXJuIFtcbiAgICAgIHtcbiAgICAgICAgaWQ6IDMsXG4gICAgICAgIHBlcmNlbnQ6IHJlc3QsXG4gICAgICAgIGNvbG9yOiAnI0Q4RURGQycsXG4gICAgICAgIGxhYmVsOiBgJHtyZXN0fSAlICgke21pc3NpbmdUb3RhbH0pYCxcbiAgICAgICAgdmVyYm9zZUxhYmVsOiBgJHttaXNzaW5nVG90YWx9IE1ldGFkYXRlbnNcXHUwMGU0dHplIGZlaGxlbmAsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBpZDogMSxcbiAgICAgICAgcGVyY2VudDogaW5zdWZmaWNpZW50RmlsbFJhdGUsXG4gICAgICAgIGNvbG9yOiAnI0MyMDgwOCcsXG4gICAgICAgIGxhYmVsOiBgJHtpbnN1ZmZpY2llbnRGaWxsUmF0ZX0gJSAoJHtpbnN1ZmZpY2llbnRUb3RhbH0pYCxcbiAgICAgICAgdmVyYm9zZUxhYmVsOiBgJHtpbnN1ZmZpY2llbnRUb3RhbH0gTWV0YWRhdGVuc1xcdTAwZTR0emUgc2luZCB1bnp1cmVpY2hlbmQgYXVzZ2VmXFx1MDBmY2xsdGAsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBpZDogMixcbiAgICAgICAgcGVyY2VudDogc3VmZmljaWVudEZpbGxSYXRlLFxuICAgICAgICBjb2xvcjogJyM0QUJFRkYnLFxuICAgICAgICBsYWJlbDogYCR7c3VmZmljaWVudEZpbGxSYXRlfSAlICgke3N1ZmZpY2llbnRUb3RhbH0pYCxcbiAgICAgICAgdmVyYm9zZUxhYmVsOiBgJHtzdWZmaWNpZW50VG90YWx9IE1ldGFkYXRlbnNcXHUwMGU0dHplIHNpbmQgZ3V0IGF1c2dlZlxcdTAwZmNsbHRgLFxuICAgICAgfSxcbiAgICBdO1xuICB9XG5cbiAgc2hvd1Rvb2x0aXAocm93OiBRdWFsaXR5TWF0cml4Um93LCBjb2x1bW46IFF1YWxpdHlNYXRyaXhIZWFkZXIsIGNlbGw6IEhUTUxFbGVtZW50KSB7XG4gICAgaWYgKHJvdy5jb3VudHNbY29sdW1uLmlkXS5zdWZmaWNpZW50ICsgcm93LmNvdW50c1tjb2x1bW4uaWRdLmluc3VmZmljaWVudCA9PT0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodGhpcy50b29sdGlwcy5oYXMoY2VsbCkpIHtcbiAgICAgIHRoaXMudG9vbHRpcHMuZ2V0KGNlbGwpIS5jYW5jZWxDbG9zZUFjdGlvbigpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHRvb2x0aXBSZWYgPSB0aGlzLnRvb2x0aXBTZXJ2aWNlLmNyZWF0ZShEb251dENoYXJ0VG9vbHRpcENvbXBvbmVudCwge1xuICAgICAgY2xvc2VUaW1lb3V0OiBvcGVuQ2xvc2VUaW1lb3V0LFxuICAgICAgb3BlblRpbWVvdXQ6IG9wZW5DbG9zZVRpbWVvdXQsXG4gICAgICBkYXRhOiB7XG4gICAgICAgIGxhYmVsOiBjb2x1bW4ubGFiZWwsXG4gICAgICAgIGRhdGE6IHRyYW5zZm9ybURvbnV0Q2hhcnREYXRhKHRoaXMuZ2V0RG9udXRTbGljZXMocm93LCBjb2x1bW4pKSxcbiAgICAgIH0sXG4gICAgICBvdmVybGF5Q29uZmlnOiB7XG4gICAgICAgIGhhc0JhY2tkcm9wOiBmYWxzZSxcbiAgICAgICAgcG9zaXRpb25TdHJhdGVneTogdGhpcy5vdmVybGF5LnBvc2l0aW9uKCkuZmxleGlibGVDb25uZWN0ZWRUbyhjZWxsKS53aXRoUG9zaXRpb25zKGNlbnRlclBvc2l0aW9uU3RyYXRlZ3kpLFxuICAgICAgICBkaXNwb3NlT25OYXZpZ2F0aW9uOiB0cnVlLFxuICAgICAgICBwYW5lbENsYXNzOiAnZG9udXQtY2hhcnQtdG9vbHRpcCcsXG4gICAgICB9LFxuICAgICAgb25DbG9zZTogKCkgPT4ge1xuICAgICAgICB0aGlzLnRvb2x0aXBzLmRlbGV0ZShjZWxsKTtcbiAgICAgIH0sXG4gICAgfSk7XG4gICAgdG9vbHRpcFJlZi5vcGVuKCk7XG4gICAgdGhpcy50b29sdGlwcy5zZXQoY2VsbCwgdG9vbHRpcFJlZik7XG4gIH1cblxuICBoaWRlVG9vbHRpcChjZWxsOiBIVE1MRWxlbWVudCkge1xuICAgIHRoaXMudG9vbHRpcHMuZ2V0KGNlbGwpPy5tYXJrRm9yQ2xvc2UoKTtcbiAgfVxuXG4gIGZpbmRIb3Jpem9udGFsU2Nyb2xsQ29udGFpbmVyKGVsZW1lbnQ6IEVsZW1lbnQpOiBFbGVtZW50IHwgbnVsbCB7XG4gICAgaWYgKGVsZW1lbnQuc2Nyb2xsV2lkdGggPiBlbGVtZW50LmNsaWVudFdpZHRoICYmIFsnYXV0bycsICdzY3JvbGwnXS5pbmNsdWRlcyhnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpLm92ZXJmbG93WCkpIHtcbiAgICAgIC8vIGZpbmQgdGhlIG5lYXJlc3QgaG9yaXpvbnRhbGx5IHNjcm9sbGFibGUgZWxlbWVudFxuICAgICAgcmV0dXJuIGVsZW1lbnQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICghZWxlbWVudC5wYXJlbnRFbGVtZW50KSB7XG4gICAgICAgIHJldHVybiBkb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMuZmluZEhvcml6b250YWxTY3JvbGxDb250YWluZXIoZWxlbWVudC5wYXJlbnRFbGVtZW50KTtcbiAgICB9XG4gIH1cblxuICBzY3JvbGxUb1JpZ2h0KCkge1xuICAgIGNvbnN0IHNjcm9sbGluZ0VsZW1lbnQgPSB0aGlzLmZpbmRIb3Jpem9udGFsU2Nyb2xsQ29udGFpbmVyKHRoaXMucmVmLm5hdGl2ZUVsZW1lbnQgYXMgSFRNTEVsZW1lbnQpO1xuICAgIGlmICghc2Nyb2xsaW5nRWxlbWVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCB2aWV3cG9ydCA9IGdsb2JhbFRoaXMudmlzdWFsVmlld3BvcnQ7XG4gICAgaWYgKCF2aWV3cG9ydCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCB2aWV3cG9ydFdpZHRoID0gdmlld3BvcnQud2lkdGg7XG5cbiAgICBjb25zdCBsYXN0VmlzaWJsZSA9IHRoaXMuc2Nyb2xsTWFya2Vycy5maW5kTGFzdChcbiAgICAgIChtYXJrZXIpID0+IChtYXJrZXIuZWxlbWVudC5uYXRpdmVFbGVtZW50IGFzIEhUTUxFbGVtZW50KS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0IDwgdmlld3BvcnRXaWR0aFxuICAgICk7XG5cbiAgICBpZiAoIWxhc3RWaXNpYmxlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgbGVmdENvbHVtbldpZHRoID0gdGhpcy5pc3N1ZVR5cGVIZWFkZXI/Lm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGggPz8gMDtcblxuICAgIHNjcm9sbGluZ0VsZW1lbnQuc2Nyb2xsQnkoe1xuICAgICAgbGVmdDogKGxhc3RWaXNpYmxlLmVsZW1lbnQubmF0aXZlRWxlbWVudCBhcyBIVE1MRWxlbWVudCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdCAtIGxlZnRDb2x1bW5XaWR0aCxcbiAgICAgIGJlaGF2aW9yOiAnc21vb3RoJyxcbiAgICB9KTtcbiAgfVxuXG4gIHNjcm9sbFRvTGVmdCgpIHtcbiAgICBjb25zdCBzY3JvbGxpbmdFbGVtZW50ID0gdGhpcy5maW5kSG9yaXpvbnRhbFNjcm9sbENvbnRhaW5lcih0aGlzLnJlZi5uYXRpdmVFbGVtZW50IGFzIEhUTUxFbGVtZW50KTtcbiAgICBpZiAoIXNjcm9sbGluZ0VsZW1lbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3Qgdmlld3BvcnQgPSBnbG9iYWxUaGlzLnZpc3VhbFZpZXdwb3J0O1xuICAgIGlmICghdmlld3BvcnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3Qgdmlld3BvcnRXaWR0aCA9IHZpZXdwb3J0LndpZHRoO1xuXG4gICAgY29uc3QgbGVmdENvbHVtbldpZHRoID0gdGhpcy5pc3N1ZVR5cGVIZWFkZXI/Lm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGggPz8gMDtcblxuICAgIGNvbnN0IGZpcnN0VmlzaWJsZSA9IHRoaXMuc2Nyb2xsTWFya2Vycy5maW5kKFxuICAgICAgKG1hcmtlcikgPT4gKG1hcmtlci5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQgYXMgSFRNTEVsZW1lbnQpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnJpZ2h0ID4gbGVmdENvbHVtbldpZHRoXG4gICAgKTtcblxuICAgIGlmICghZmlyc3RWaXNpYmxlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgc2Nyb2xsaW5nRWxlbWVudC5zY3JvbGxCeSh7XG4gICAgICBsZWZ0OiAoZmlyc3RWaXNpYmxlLmVsZW1lbnQubmF0aXZlRWxlbWVudCBhcyBIVE1MRWxlbWVudCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkucmlnaHQgLSB2aWV3cG9ydFdpZHRoLFxuICAgICAgYmVoYXZpb3I6ICdzbW9vdGgnLFxuICAgIH0pO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignd2luZG93OnNjcm9sbCcpXG4gIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzpyZXNpemUnKVxuICBvblNjcm9sbCgpIHtcbiAgICBjb25zdCBzY3JvbGxpbmdFbGVtZW50ID0gdGhpcy5maW5kSG9yaXpvbnRhbFNjcm9sbENvbnRhaW5lcih0aGlzLnJlZi5uYXRpdmVFbGVtZW50IGFzIEhUTUxFbGVtZW50KTtcbiAgICBpZiAoIXNjcm9sbGluZ0VsZW1lbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5zY3JvbGxMZWZ0LnNldChzY3JvbGxpbmdFbGVtZW50LnNjcm9sbExlZnQpO1xuICAgIHRoaXMuc2Nyb2xsV2lkdGguc2V0KHNjcm9sbGluZ0VsZW1lbnQuc2Nyb2xsV2lkdGgpO1xuICB9XG59XG4iLCI8bWF0LWNhcmQgYXBwZWFyYW5jZT1cInJhaXNlZFwiPlxuICA8bWF0LWNhcmQtaGVhZGVyICpuZ0lmPVwicGFnZVRpdGxlXCI+XG4gICAgPG1hdC1jYXJkLXRpdGxlPlF1YWxpdMOkdHNtZXRyaWs6IHt7IHBhZ2VUaXRsZSB8IHRyYW5zbGF0ZSB9fXt7aXNMb2FkaW5nKCkgPyBcIjogTGFkZSBuZXVlIERhdGVuLlwiIDogXCJcIn19PC9tYXQtY2FyZC10aXRsZT5cbiAgPC9tYXQtY2FyZC1oZWFkZXI+XG4gIDxtYXQtY2FyZC1jb250ZW50IGNsYXNzPVwidG9vbGJhclwiPlxuICAgIDxtZXRhcXMyLXFtLWZpbHRlciAqbmdGb3I9XCJsZXQgZmlsdGVyIG9mIGNhdGVnb3J5Q29udHJvbHMuY29udHJvbHMgfCBrZXl2YWx1ZTsgdHJhY2tCeTogZmlsdGVySWRlbnRcIlxuICAgICAgICAgICAgICAgICAgICAgICBbb3B0aW9uc109XCJjYXRlZ29yeUZpbHRlclZhbHVlcy5nZXQoZmlsdGVyLmtleSlcIlxuICAgICAgICAgICAgICAgICAgICAgICBbaW5wdXRGb3JtQ29udHJvbF09XCJmaWx0ZXIudmFsdWVcIlxuICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdID0gXCInZmlsdGVyLicgKyBmaWx0ZXIua2V5IHwgdHJhbnNsYXRlXCIgLz5cbiAgICA8ZGl2IGNsYXNzPVwiYWN0aW9uYmFyXCI+XG4gICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBbZGlzYWJsZWRdPVwiaXNMb2FkaW5nKClcIiBsYWJlbFBvc2l0aW9uPVwiYmVmb3JlXCIgW2Zvcm1Db250cm9sXT1cImlzT25seVNvdXJjZXNXaXRoTWF0ZXJpYWxFbmFibGVkRm9ybUZpZWxkXCIgaWQ9XCJvbmx5U291cmNlc1dpdGhNYXRlcmlhbFwiPlxuICAgICAgICBzaG93IG9ubHkgc291cmNlcyB3aXRoIG1hdGVyaWFsXG4gICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICA8ZGl2IHN0eWxlPVwiZmxleDogMSAxIGF1dG9cIj48L2Rpdj5cbiAgICAgIDxtZXRhcXMyLWRhdGVwaWNrZXIgKm5nSWY9XCJpc0hpc3RvcmljYWxEYXRhRW5hYmxlZCgpXCIgW2Rpc2FibGVkXT1cImlzTG9hZGluZygpXCIgW2lucHV0R3JvdXBdPVwicmFuZ2VcIiAvPlxuICAgICAgPG1hdC1zbGlkZS10b2dnbGUgW2Rpc2FibGVkXT1cImlzTG9hZGluZygpXCIgbGFiZWxQb3NpdGlvbj1cImJlZm9yZVwiIFtmb3JtQ29udHJvbF09XCJpc0hpc3RvcmljYWxEYXRhRW5hYmxlZEZvcm1GaWVsZFwiIGlkPVwic2hvd0hpc3RvcmljYWxEYXRhXCI+XG4gICAgICAgIHNob3cgaGlzdG9yaWNhbCBkYXRhXG4gICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICBjb2xvcj1cInByaW1hcnlcIlxuICAgICAgICBbZGlzYWJsZWRdPVwiaXNMb2FkaW5nKClcIlxuICAgICAgICAoY2xpY2spPVwicmVmcmVzaCgpXCJcbiAgICAgICAgbWF0VG9vbHRpcD1cIkFrdHVhbGlzaWVyZSBkZW4gSVNULVN0YW5kXCJcbiAgICAgICAgbWF0VG9vbHRpcFNob3dEZWxheT1cIjUwMFwiXG4gICAgICA+XG4gICAgICAgIDxtYXQtaWNvbj5yZWZyZXNoPC9tYXQtaWNvbj5cbiAgICAgIDwvYnV0dG9uPlxuICAgICAgPGRpdiBzdHlsZT1cImZsZXg6IDAgMCB7e3Njcm9sbGVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRofX1weFwiPjwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cInNjcm9sbC1jb250cm9sbGVyXCIgI3Njcm9sbGVyPiA8IS0tIHB1dCB0aGUgd2hvbGUgdG9vbGJhciBpbiBhIGZpeGVkIGNvbnRhaW5lciAoTVFTLSAtLT5cbiAgICAgICAgPGJ1dHRvbiBtYXQtcmFpc2VkLWJ1dHRvbiAoY2xpY2spPVwic2Nyb2xsVG9MZWZ0KClcIiBbZGlzYWJsZWRdPVwiIWlzTGVmdFNjcm9sbGFibGUoKVwiIGNsYXNzPVwic2Nyb2xsLWJ1dHRvblwiPlxuICAgICAgICAgIDxtYXQtaWNvbiBzdHlsZT1cIm1hcmdpbjogMFwiPmNoZXZyb25fbGVmdDwvbWF0LWljb24+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8YnV0dG9uIG1hdC1yYWlzZWQtYnV0dG9uIChjbGljayk9XCJzY3JvbGxUb1JpZ2h0KClcIiBbZGlzYWJsZWRdPVwiIWlzUmlnaHRTY3JvbGxhYmxlKClcIiBjbGFzcz1cInNjcm9sbC1idXR0b25cIj5cbiAgICAgICAgICA8bWF0LWljb24gc3R5bGU9XCJtYXJnaW46IDBcIj5jaGV2cm9uX3JpZ2h0PC9tYXQtaWNvbj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9tYXQtY2FyZC1jb250ZW50PlxuPC9tYXQtY2FyZD5cbjxtYXQtY2FyZD5cbiAgPG1ldGFxczItcHJvZ3Jlc3Mtc3Bpbm5lciBbZGlzcGxheVByb2dyZXNzU3Bpbm5lcl09XCJpc0xvYWRpbmcoKVwiPjwvbWV0YXFzMi1wcm9ncmVzcy1zcGlubmVyPlxuICA8dGFibGUgW2NsYXNzLndoaWxlLWxvYWRpbmddPVwiaXNMb2FkaW5nKClcIiBtYXQtdGFibGUgW2RhdGFTb3VyY2VdPVwicmVjZW50UXVhbGl0eU1hdHJpeCgpLnJvd3NcIiBjbGFzcz1cInF1YWxpdHktbWF0cml4XCI+XG4gICAgPCEtLSBEZWZpbmUgY29sdW1ucyBvZiB0YWJsZSAtLT5cbiAgICA8IS0tIFJvdyBIZWFkZXIgQ29sdW1uIC0tPlxuICAgIDxuZy1jb250YWluZXIgbWF0Q29sdW1uRGVmPVwicm93LWhlYWRlclwiIHN0aWNreT5cbiAgICAgIDx0aCByb3dzcGFuPVwiMlwiIG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZiAjaXNzdWVUeXBlPklzc3VlIFR5cGU8L3RoPlxuICAgICAgPHRkXG4gICAgICAgIG1hdC1jZWxsXG4gICAgICAgICptYXRDZWxsRGVmPVwibGV0IHJvd1wiXG4gICAgICAgIG1hdFRvb2x0aXA9XCJ7e3Jvdy5tZXRhLmFsdF9sYWJlbH19XCJcbiAgICAgICAgY2xhc3M9XCJyb3ctaGVhZGVyIG1hdC1jZWxsLWxldmVsLXt7cm93Lm1ldGEubGV2ZWwgKyAxfX1cIlxuICAgICAgPlxuICAgICAgICB7e1wicXVhbGl0eV9tYXRyaXguXCIgKyByb3cubWV0YS5sYWJlbCB8IHRyYW5zbGF0ZSB9fVxuICAgICAgPC90ZD5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8IS0tIG9uZSBjb2x1bW4gZm9yIHRoZSBzb3VyY2UgLS0+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgY29sIG9mIGZpbHRlcmVkQ29sdW1ucygpOyB0cmFja0J5OmNvbHVtbklkZW50XCIgW21hdENvbHVtbkRlZl09XCJjb2wuaWQgKyAnX3NvdXJjZSdcIj5cbiAgICAgIDx0aCBbYXR0ci5jb2xzcGFuXT1cImlzSGlzdG9yaWNhbERhdGFFbmFibGVkKCkgPyAyIDogMVwiIG1ldGFxczJTY3JvbGxNYXJrZXIgbWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmIG1hdFRvb2x0aXA9XCJ7e2NvbC5hbHRMYWJlbH19XCI+e3tjb2wubGFiZWx9fTwvdGg+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPCEtLSAvc291cmNlIC0tPlxuICAgIDwhLS0gY3VycmVudCBEYXRhIENvbHVtbnMgLS0+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgY29sdW1uIG9mIGZpbHRlcmVkQ29sdW1ucygpOyB0cmFja0J5OmNvbHVtbklkZW50XCIgW21hdENvbHVtbkRlZl09XCJjb2x1bW4uaWQgKyAnX2N1cnJlbnQnXCI+XG4gICAgICA8dGggY2xhc3M9XCJyZWNlbnQtZGF0YS1jZWxsXCIgbWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmIG1hdFRvb2x0aXA9XCJ7e2NvbHVtbi5hbHRMYWJlbH19XCI+e3sgcmFuZ2UuY29udHJvbHMuZW5kLnZhbHVlPy50b0xvY2FsZVN0cmluZyhEYXRlVGltZS5EQVRFX1NIT1JUKSB9fSA8YnI+KHt7Y29sdW1uLnRvdGFsfX0pPC90aD5cbiAgICAgIDx0ZCBjbGFzcz1cInJlY2VudC1kYXRhLWNlbGxcIiBtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCByb3dcIiAjY2VsbCAobW91c2VvdmVyKT1cInNob3dUb29sdGlwKHJvdywgY29sdW1uLCBjZWxsKVwiIChtb3VzZWxlYXZlKT1cImhpZGVUb29sdGlwKGNlbGwpXCI+XG4gICAgICAgICAgPGEgKm5nSWY9XCJjb2x1bW4udG90YWwgPiAwIGVsc2UgZW1wdHlEaXZcIiBjbGFzcz1cImNoYXJ0LWNvbnRhaW5lclwiIChjbGljayk9XCJvcGVuRWRpdExpbmsoIGNvbHVtbi5sYWJlbCwgcm93Lm1ldGEubGFiZWwpXCI+XG4gICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICA8bWV0YXFzMi1kb251dC1jaGFydCBbZGF0YV09XCJnZXREb251dFNsaWNlcyhyb3csIGNvbHVtbilcIiBbYm9yZGVyU2l6ZV09XCIyNVwiPjwvbWV0YXFzMi1kb251dC1jaGFydD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvYT5cbiAgICAgICAgICA8bmctdGVtcGxhdGUgI2VtcHR5RGl2PlxuICAgICAgICAgICAgPGRpdj4tPC9kaXY+XG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgIDwvdGQ+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPCEtLSAvY3VycmVudCBEYXRhIENvbHVtbnMgLS0+XG4gICAgPCEtLSBwYXN0IERhdGEgQ29sdW1ucyAtLT5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXNIaXN0b3JpY2FsRGF0YUVuYWJsZWQoKVwiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgY29sdW1uIG9mIGZpbHRlcmVkQ29sdW1ucygpOyB0cmFja0J5OmNvbHVtbklkZW50XCIgW21hdENvbHVtbkRlZl09XCJjb2x1bW4uaWQgKyAnX3Bhc3QnXCI+XG4gICAgICAgIDx0aCBjbGFzcz1cImhpc3RvcmljLWRhdGEtY2VsbFwiIG1hdC1oZWFkZXItY2VsbFxuICAgICAgICAgICAgKm1hdEhlYWRlckNlbGxEZWY+e3sgcmFuZ2UuY29udHJvbHMuc3RhcnQudmFsdWU/LnRvTG9jYWxlU3RyaW5nKERhdGVUaW1lLkRBVEVfU0hPUlQpIH19XG4gICAgICAgICAgPGJyPnt7IGdldFBhc3RDb2x1bW4oY29sdW1uLmlkKT8udG90YWwgfX1cbiAgICAgICAgPC90aD5cbiAgICAgICAgPHRkIGNsYXNzPVwiaGlzdG9yaWMtZGF0YS1jZWxsXCIgbWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgcm93XCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImdldFRyZW5kKHJvdywgY29sdW1uKSBhcyB0cmVuZFwiPlxuICAgICAgICAgICAgPHNwYW4gW25nQ2xhc3NdPVwidHJlbmQudHJlbmRcIj5cbiAgICAgICAgICAgICAgPG1hdC1pY29uIGFyaWEtaGlkZGVuPVwiZmFsc2VcIiBbYXR0ci5hcmlhLWxhYmVsXT1cInRyZW5kLnRyZW5kXCIgW2ZvbnRJY29uXT1cInRyZW5kLnRyZW5kIVwiIC8+XG4gICAgICAgICAgICAgIHt7IHRyZW5kLmRlbHRhIH19XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgPC90ZD5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwhLS0gL3Bhc3QgRGF0YSBDb2x1bW5zIC0tPlxuXG4gICAgICA8IS0tIEdlbmVyYXRlIGFjdHVhbCB0YWJsZSAtLT5cbiAgICA8dHIgbWF0LWhlYWRlci1yb3cgKm1hdEhlYWRlclJvd0RlZj1cIlsncm93LWhlYWRlciddLmNvbmNhdChzb3VyY2VDb2x1bW5zKCkpOyBzdGlja3k6IHRydWU7XCI+PC90cj5cbiAgICA8dHIgbWF0LWhlYWRlci1yb3cgKm1hdEhlYWRlclJvd0RlZj1cImFsbERhdGFDb2x1bW5zKCk7IHN0aWNreTogdHJ1ZTtcIiBbaGlkZGVuXT1cIiFpc0hpc3RvcmljYWxEYXRhRW5hYmxlZCgpXCI+PC90cj5cbiAgICA8dHIgbWF0LXJvdyAqbWF0Um93RGVmPVwibGV0IHJvdzsgY29sdW1uczogWydyb3ctaGVhZGVyJ10uY29uY2F0KGFsbERhdGFDb2x1bW5zKCkpXCI+PC90cj5cbiAgPC90YWJsZT5cbjwvbWF0LWNhcmQ+XG4iXX0=
|
|
@@ -2449,6 +2449,7 @@ class QualityMatrixComponent {
|
|
|
2449
2449
|
return this.pastQualityMatrix$.value?.columns.find((c) => c.id === columnId);
|
|
2450
2450
|
}
|
|
2451
2451
|
ngOnInit() {
|
|
2452
|
+
this.loadingCount.update((it) => it + 1);
|
|
2452
2453
|
this.metaApi
|
|
2453
2454
|
.getCategoryFilters()
|
|
2454
2455
|
.pipe(take(1), tap((filters) => {
|
|
@@ -2465,8 +2466,9 @@ class QualityMatrixComponent {
|
|
|
2465
2466
|
this.categoryControls.setValue(this.categoryControls.value, {
|
|
2466
2467
|
emitEvent: true,
|
|
2467
2468
|
});
|
|
2468
|
-
}), takeUntilDestroyed(this.destroyRef))
|
|
2469
|
+
}), takeUntilDestroyed(this.destroyRef), finalize(() => this.loadingCount.update((it) => it - 1)))
|
|
2469
2470
|
.subscribe();
|
|
2471
|
+
this.loadingCount.update((it) => it + 1);
|
|
2470
2472
|
this.metaApi
|
|
2471
2473
|
.getTimerangeFilter()
|
|
2472
2474
|
.pipe(filter((rangeFilter) => !!rangeFilter), tap((rangeFilter) => {
|
|
@@ -2482,7 +2484,7 @@ class QualityMatrixComponent {
|
|
|
2482
2484
|
this.range.setControl('end', new FormControl(endDate, { nonNullable: true }), {
|
|
2483
2485
|
emitEvent: true,
|
|
2484
2486
|
});
|
|
2485
|
-
}), takeUntilDestroyed(this.destroyRef))
|
|
2487
|
+
}), takeUntilDestroyed(this.destroyRef), finalize(() => this.loadingCount.update((it) => it - 1)))
|
|
2486
2488
|
.subscribe();
|
|
2487
2489
|
combineLatest([this.categoryControls.valueChanges, this.range.valueChanges, this.refresh$])
|
|
2488
2490
|
.pipe(filter((data) => !!data[0] && !!data[1].end?.isValid), throttleTime(500), map(([categories, range]) => [categories, range.end]), switchMap(([categories, end]) => this.loadCurrentData(categories, end)), tap((currentQm) => {
|