@sinequa/assistant 3.9.6-rc1 → 3.9.6

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.
@@ -1,6 +1,6 @@
1
1
  import { CommonModule } from "@angular/common";
2
2
  import { Component, EventEmitter, inject, Input, Output } from "@angular/core";
3
- import { catchError, EMPTY, of, Subscription, switchMap, tap } from "rxjs";
3
+ import { catchError, EMPTY, of, Subscription, switchMap } from "rxjs";
4
4
  import { provideTranslocoScope, TranslocoPipe } from '@jsverse/transloco';
5
5
  import { isAuthenticated } from "@sinequa/atomic";
6
6
  import { DocumentsUploadService } from "../documents-upload.service";
@@ -18,7 +18,7 @@ export class DocumentOverviewComponent {
18
18
  this.appService = inject(AppService);
19
19
  }
20
20
  ngOnInit() {
21
- this._subscription.add(of(isAuthenticated()).pipe(switchMap((_) => this.appService.init()), tap((_) => this.documentsUploadService.getDocumentsList()), catchError((error) => {
21
+ this._subscription.add(of(isAuthenticated()).pipe(switchMap((_) => this.appService.init()), switchMap((_) => this.documentsUploadService.getDocumentsList()), catchError((error) => {
22
22
  console.error(error);
23
23
  this.notificationsService.error(error);
24
24
  return EMPTY;
@@ -39,4 +39,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
39
39
  }], onUpload: [{
40
40
  type: Output
41
41
  }] } });
42
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9jdW1lbnQtb3ZlcnZpZXcuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXNzaXN0YW50L2NoYXQvZG9jdW1lbnRzLXVwbG9hZC9kb2N1bWVudC1vdmVydmlldy9kb2N1bWVudC1vdmVydmlldy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hc3Npc3RhbnQvY2hhdC9kb2N1bWVudHMtdXBsb2FkL2RvY3VtZW50LW92ZXJ2aWV3L2RvY3VtZW50LW92ZXJ2aWV3LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFxQixNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbEcsT0FBTyxFQUNMLFVBQVUsRUFDVixLQUFLLEVBQ0wsRUFBRSxFQUNGLFlBQVksRUFDWixTQUFTLEVBQ1QsR0FBRyxFQUNKLE1BQU0sTUFBTSxDQUFDO0FBQ2QsT0FBTyxFQUFFLHFCQUFxQixFQUFFLGFBQWEsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRTFFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUVsRCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUNyRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUMzRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7OztBQWV4RCxNQUFNLE9BQU8seUJBQXlCO0lBYnRDO1FBY1csbUJBQWMsR0FBWSxJQUFJLENBQUM7UUFFOUIsYUFBUSxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFFaEMsa0JBQWEsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBRXBDLDJCQUFzQixHQUFHLE1BQU0sQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO1FBQ3hELHlCQUFvQixHQUFHLE1BQU0sQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1FBQ3BELGVBQVUsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7S0FxQnhDO0lBbkJDLFFBQVE7UUFDTixJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FDcEIsRUFBRSxDQUFDLGVBQWUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUN0QixTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLENBQUMsRUFDeEMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsc0JBQXNCLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxFQUMxRCxVQUFVLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUNuQixPQUFPLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3JCLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDdkMsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDLENBQUMsQ0FDSDthQUNBLFNBQVMsRUFBRSxDQUNmLENBQUM7SUFDSixDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxhQUFhLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDbkMsQ0FBQzsrR0E1QlUseUJBQXlCO21HQUF6Qix5QkFBeUIsb0pBVHpCLENBQUMscUJBQXFCLENBQUMsdUJBQXVCLENBQUMsQ0FBQywwQkN0QjdELHdjQVFBLGdIRGVZLFlBQVksK0VBQUUsYUFBYTs7NEZBUTFCLHlCQUF5QjtrQkFickMsU0FBUzsrQkFDRSxzQkFBc0IsY0FFcEIsSUFBSSxhQUNMLENBQUMscUJBQXFCLENBQUMsdUJBQXVCLENBQUMsQ0FBQyxXQUNsRCxDQUFDLFlBQVksRUFBRSxhQUFhLENBQUM7OEJBUzdCLGNBQWM7c0JBQXRCLEtBQUs7Z0JBRUksUUFBUTtzQkFBakIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gXCJAYW5ndWxhci9jb21tb25cIjtcbmltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBpbmplY3QsIElucHV0LCBPbkRlc3Ryb3ksIE9uSW5pdCwgT3V0cHV0IH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7XG4gIGNhdGNoRXJyb3IsXG4gIEVNUFRZLFxuICBvZixcbiAgU3Vic2NyaXB0aW9uLFxuICBzd2l0Y2hNYXAsXG4gIHRhcFxufSBmcm9tIFwicnhqc1wiO1xuaW1wb3J0IHsgcHJvdmlkZVRyYW5zbG9jb1Njb3BlLCBUcmFuc2xvY29QaXBlIH0gZnJvbSAnQGpzdmVyc2UvdHJhbnNsb2NvJztcblxuaW1wb3J0IHsgaXNBdXRoZW50aWNhdGVkIH0gZnJvbSBcIkBzaW5lcXVhL2F0b21pY1wiO1xuXG5pbXBvcnQgeyBEb2N1bWVudHNVcGxvYWRTZXJ2aWNlIH0gZnJvbSBcIi4uL2RvY3VtZW50cy11cGxvYWQuc2VydmljZVwiO1xuaW1wb3J0IHsgTm90aWZpY2F0aW9uc1NlcnZpY2UgfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvbm90aWZpY2F0aW9uLnNlcnZpY2VcIjtcbmltcG9ydCB7IEFwcFNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvYXBwLnNlcnZpY2VcIjtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiBcInNxLWRvY3VtZW50LW92ZXJ2aWV3XCIsXG4gIHRlbXBsYXRlVXJsOiBcIi4vZG9jdW1lbnQtb3ZlcnZpZXcuY29tcG9uZW50Lmh0bWxcIixcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgcHJvdmlkZXJzOiBbcHJvdmlkZVRyYW5zbG9jb1Njb3BlKCdjaGF0LWRvY3VtZW50cy11cGxvYWQnKV0sXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIFRyYW5zbG9jb1BpcGVdLFxuICBzdHlsZXM6IFtgXG4ub3ZlcnZpZXctdGV4dCB7XG4gIGZvbnQtc3R5bGU6IGl0YWxpYztcbiAgcGFkZGluZzogLjVyZW0gLjhyZW07XG59XG4gIGBdXG59KVxuZXhwb3J0IGNsYXNzIERvY3VtZW50T3ZlcnZpZXdDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIEBJbnB1dCgpIGRpc2FibGVkVXBsb2FkOiBib29sZWFuID0gdHJ1ZTtcblxuICBAT3V0cHV0KCkgb25VcGxvYWQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgcHJpdmF0ZSBfc3Vic2NyaXB0aW9uID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuXG4gIHB1YmxpYyBkb2N1bWVudHNVcGxvYWRTZXJ2aWNlID0gaW5qZWN0KERvY3VtZW50c1VwbG9hZFNlcnZpY2UpO1xuICBwdWJsaWMgbm90aWZpY2F0aW9uc1NlcnZpY2UgPSBpbmplY3QoTm90aWZpY2F0aW9uc1NlcnZpY2UpO1xuICBwdWJsaWMgYXBwU2VydmljZSA9IGluamVjdChBcHBTZXJ2aWNlKTtcblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLl9zdWJzY3JpcHRpb24uYWRkKFxuICAgICAgb2YoaXNBdXRoZW50aWNhdGVkKCkpLnBpcGUoXG4gICAgICAgICAgc3dpdGNoTWFwKChfKSA9PiB0aGlzLmFwcFNlcnZpY2UuaW5pdCgpKSxcbiAgICAgICAgICB0YXAoKF8pID0+IHRoaXMuZG9jdW1lbnRzVXBsb2FkU2VydmljZS5nZXREb2N1bWVudHNMaXN0KCkpLFxuICAgICAgICAgIGNhdGNoRXJyb3IoKGVycm9yKSA9PiB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcbiAgICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uc1NlcnZpY2UuZXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgcmV0dXJuIEVNUFRZO1xuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSgpXG4gICAgKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuX3N1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICB9XG5cbn1cbiIsIjxkaXYgY2xhc3M9XCJkLWZsZXhcIj5cbiAgPHNwYW4gY2xhc3M9XCJvdmVydmlldy10ZXh0IGZsZXgtZ3Jvdy0xXCI+XG4gICAge3sgJ2NoYXREb2N1bWVudHNVcGxvYWQudXBsb2FkZWREb2N1bWVudHMnIHwgdHJhbnNsb2NvOiB7IGNvdW50OiAoZG9jdW1lbnRzVXBsb2FkU2VydmljZS51cGxvYWRlZERvY3VtZW50cyQgfCBhc3luYyk/Lmxlbmd0aCB8fCAwIH0gfX1cbiAgPC9zcGFuPlxuICA8YnV0dG9uIGRpc2FibGVkIGNsYXNzPVwiYnRuIGJ0bi1saWdodFwiIFt0aXRsZV09XCInY2hhdERvY3VtZW50c1VwbG9hZC51cGxvYWRUb1NvdXJjZXMnIHwgdHJhbnNsb2NvXCIgKGNsaWNrKT1cIm9uVXBsb2FkLmVtaXQoKVwiIFtkaXNhYmxlZF09XCJkaXNhYmxlZFVwbG9hZFwiPlxuICAgIDxpIGNsYXNzPVwiZmFzIGZhLWNsb3VkLXVwbG9hZC1hbHRcIj48L2k+XG4gIDwvYnV0dG9uPlxuPC9kaXY+XG4iXX0=
42
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9jdW1lbnQtb3ZlcnZpZXcuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXNzaXN0YW50L2NoYXQvZG9jdW1lbnRzLXVwbG9hZC9kb2N1bWVudC1vdmVydmlldy9kb2N1bWVudC1vdmVydmlldy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hc3Npc3RhbnQvY2hhdC9kb2N1bWVudHMtdXBsb2FkL2RvY3VtZW50LW92ZXJ2aWV3L2RvY3VtZW50LW92ZXJ2aWV3LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFxQixNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbEcsT0FBTyxFQUNMLFVBQVUsRUFDVixLQUFLLEVBQ0wsRUFBRSxFQUNGLFlBQVksRUFDWixTQUFTLEVBQ1YsTUFBTSxNQUFNLENBQUM7QUFDZCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsYUFBYSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFFMUUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRWxELE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ3JFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQzNFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQzs7O0FBZXhELE1BQU0sT0FBTyx5QkFBeUI7SUFidEM7UUFjVyxtQkFBYyxHQUFZLElBQUksQ0FBQztRQUU5QixhQUFRLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUVoQyxrQkFBYSxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFFcEMsMkJBQXNCLEdBQUcsTUFBTSxDQUFDLHNCQUFzQixDQUFDLENBQUM7UUFDeEQseUJBQW9CLEdBQUcsTUFBTSxDQUFDLG9CQUFvQixDQUFDLENBQUM7UUFDcEQsZUFBVSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztLQXFCeEM7SUFuQkMsUUFBUTtRQUNOLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUNwQixFQUFFLENBQUMsZUFBZSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQ3RCLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUN4QyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDLEVBQ2hFLFVBQVUsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQ25CLE9BQU8sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDckIsSUFBSSxDQUFDLG9CQUFvQixDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUN2QyxPQUFPLEtBQUssQ0FBQztRQUNmLENBQUMsQ0FBQyxDQUNIO2FBQ0EsU0FBUyxFQUFFLENBQ2YsQ0FBQztJQUNKLENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLGFBQWEsQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUNuQyxDQUFDOytHQTVCVSx5QkFBeUI7bUdBQXpCLHlCQUF5QixvSkFUekIsQ0FBQyxxQkFBcUIsQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDLDBCQ3JCN0Qsd2NBUUEsZ0hEY1ksWUFBWSwrRUFBRSxhQUFhOzs0RkFRMUIseUJBQXlCO2tCQWJyQyxTQUFTOytCQUNFLHNCQUFzQixjQUVwQixJQUFJLGFBQ0wsQ0FBQyxxQkFBcUIsQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDLFdBQ2xELENBQUMsWUFBWSxFQUFFLGFBQWEsQ0FBQzs4QkFTN0IsY0FBYztzQkFBdEIsS0FBSztnQkFFSSxRQUFRO3NCQUFqQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSBcIkBhbmd1bGFyL2NvbW1vblwiO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIGluamVjdCwgSW5wdXQsIE9uRGVzdHJveSwgT25Jbml0LCBPdXRwdXQgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHtcbiAgY2F0Y2hFcnJvcixcbiAgRU1QVFksXG4gIG9mLFxuICBTdWJzY3JpcHRpb24sXG4gIHN3aXRjaE1hcFxufSBmcm9tIFwicnhqc1wiO1xuaW1wb3J0IHsgcHJvdmlkZVRyYW5zbG9jb1Njb3BlLCBUcmFuc2xvY29QaXBlIH0gZnJvbSAnQGpzdmVyc2UvdHJhbnNsb2NvJztcblxuaW1wb3J0IHsgaXNBdXRoZW50aWNhdGVkIH0gZnJvbSBcIkBzaW5lcXVhL2F0b21pY1wiO1xuXG5pbXBvcnQgeyBEb2N1bWVudHNVcGxvYWRTZXJ2aWNlIH0gZnJvbSBcIi4uL2RvY3VtZW50cy11cGxvYWQuc2VydmljZVwiO1xuaW1wb3J0IHsgTm90aWZpY2F0aW9uc1NlcnZpY2UgfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvbm90aWZpY2F0aW9uLnNlcnZpY2VcIjtcbmltcG9ydCB7IEFwcFNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvYXBwLnNlcnZpY2VcIjtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiBcInNxLWRvY3VtZW50LW92ZXJ2aWV3XCIsXG4gIHRlbXBsYXRlVXJsOiBcIi4vZG9jdW1lbnQtb3ZlcnZpZXcuY29tcG9uZW50Lmh0bWxcIixcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgcHJvdmlkZXJzOiBbcHJvdmlkZVRyYW5zbG9jb1Njb3BlKCdjaGF0LWRvY3VtZW50cy11cGxvYWQnKV0sXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIFRyYW5zbG9jb1BpcGVdLFxuICBzdHlsZXM6IFtgXG4ub3ZlcnZpZXctdGV4dCB7XG4gIGZvbnQtc3R5bGU6IGl0YWxpYztcbiAgcGFkZGluZzogLjVyZW0gLjhyZW07XG59XG4gIGBdXG59KVxuZXhwb3J0IGNsYXNzIERvY3VtZW50T3ZlcnZpZXdDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIEBJbnB1dCgpIGRpc2FibGVkVXBsb2FkOiBib29sZWFuID0gdHJ1ZTtcblxuICBAT3V0cHV0KCkgb25VcGxvYWQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgcHJpdmF0ZSBfc3Vic2NyaXB0aW9uID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuXG4gIHB1YmxpYyBkb2N1bWVudHNVcGxvYWRTZXJ2aWNlID0gaW5qZWN0KERvY3VtZW50c1VwbG9hZFNlcnZpY2UpO1xuICBwdWJsaWMgbm90aWZpY2F0aW9uc1NlcnZpY2UgPSBpbmplY3QoTm90aWZpY2F0aW9uc1NlcnZpY2UpO1xuICBwdWJsaWMgYXBwU2VydmljZSA9IGluamVjdChBcHBTZXJ2aWNlKTtcblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLl9zdWJzY3JpcHRpb24uYWRkKFxuICAgICAgb2YoaXNBdXRoZW50aWNhdGVkKCkpLnBpcGUoXG4gICAgICAgICAgc3dpdGNoTWFwKChfKSA9PiB0aGlzLmFwcFNlcnZpY2UuaW5pdCgpKSxcbiAgICAgICAgICBzd2l0Y2hNYXAoKF8pID0+IHRoaXMuZG9jdW1lbnRzVXBsb2FkU2VydmljZS5nZXREb2N1bWVudHNMaXN0KCkpLFxuICAgICAgICAgIGNhdGNoRXJyb3IoKGVycm9yKSA9PiB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcbiAgICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uc1NlcnZpY2UuZXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgcmV0dXJuIEVNUFRZO1xuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSgpXG4gICAgKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuX3N1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICB9XG5cbn1cbiIsIjxkaXYgY2xhc3M9XCJkLWZsZXhcIj5cbiAgPHNwYW4gY2xhc3M9XCJvdmVydmlldy10ZXh0IGZsZXgtZ3Jvdy0xXCI+XG4gICAge3sgJ2NoYXREb2N1bWVudHNVcGxvYWQudXBsb2FkZWREb2N1bWVudHMnIHwgdHJhbnNsb2NvOiB7IGNvdW50OiAoZG9jdW1lbnRzVXBsb2FkU2VydmljZS51cGxvYWRlZERvY3VtZW50cyQgfCBhc3luYyk/Lmxlbmd0aCB8fCAwIH0gfX1cbiAgPC9zcGFuPlxuICA8YnV0dG9uIGRpc2FibGVkIGNsYXNzPVwiYnRuIGJ0bi1saWdodFwiIFt0aXRsZV09XCInY2hhdERvY3VtZW50c1VwbG9hZC51cGxvYWRUb1NvdXJjZXMnIHwgdHJhbnNsb2NvXCIgKGNsaWNrKT1cIm9uVXBsb2FkLmVtaXQoKVwiIFtkaXNhYmxlZF09XCJkaXNhYmxlZFVwbG9hZFwiPlxuICAgIDxpIGNsYXNzPVwiZmFzIGZhLWNsb3VkLXVwbG9hZC1hbHRcIj48L2k+XG4gIDwvYnV0dG9uPlxuPC9kaXY+XG4iXX0=
@@ -1,4 +1,4 @@
1
- import { afterNextRender, Component, ElementRef, inject, Input, signal } from "@angular/core";
1
+ import { Component, ElementRef, inject, Input } from "@angular/core";
2
2
  import { ChatReferenceComponent } from "../chat-reference/chat-reference.component";
3
3
  import { CopyToClipboardDirective } from "../directives/copy-to-clipboard.directive";
4
4
  import { TooltipDirective } from "../tooltip/tooltip.directive";
@@ -6,42 +6,25 @@ import { InlineImageReferenceComponent } from "./inline-image-reference";
6
6
  import { InlinePageReferenceComponent } from "./inline-page-reference";
7
7
  import * as i0 from "@angular/core";
8
8
  /*
9
- * Web Element Reference Component
10
- * This component is used to display a reference in the chat interface.
9
+ * Web Element Reference Components
10
+ * Those components are used to display a reference (page, image, document) in the chat interface.
11
11
  * It uses a tooltip to show additional information about the reference.
12
12
  * The component emits custom events when the user interacts with it.
13
- *
14
- * This component is based on the remark template.
15
- *
16
- * <!-- Chat reference (badge with file and part number) -->
17
- * <ng-template remarkTemplate="chat-reference" let-ref>
18
- * @let attachment = referenceMap.get(ref.refId);
19
- * @if (attachment) {
20
- * <a
21
- * class="reference"
22
- * role="button"
23
- * [sqTooltip]="attachment"
24
- * [sqTooltipTemplate]="tooltipTpl"
25
- * [hoverableTooltip]="true"
26
- * (click)="openAttachmentPreview(attachment, ref.refId)"
27
- * >
28
- * {{ref.refId}}
29
- * </a>
30
- * }
31
- * @else {
32
- * <ng-template #staticRefTpl>
33
- * <span class="reference">{{ ref.refId }}</span>
34
- * </ng-template>
35
- * }
36
- * </ng-template>
37
13
  */
38
14
  export class ReferenceComponent {
39
15
  constructor() {
40
- this.ref = signal({});
41
- afterNextRender(() => {
16
+ this.ref = {};
17
+ }
18
+ ngOnChanges() {
19
+ if (!this.attachment)
20
+ return;
21
+ try {
42
22
  const obj = JSON.parse(decodeURIComponent(atob(this.attachment)));
43
- this.ref.set(obj);
44
- });
23
+ this.ref = obj;
24
+ }
25
+ catch (error) {
26
+ console.error("Error parsing attachment", error, this.attachment);
27
+ }
45
28
  }
46
29
  onOpenPreview(attachment, partId) {
47
30
  // Émettre un événement personnalisé pour le web element using the service
@@ -56,23 +39,23 @@ export class ReferenceComponent {
56
39
  }));
57
40
  }
58
41
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ReferenceComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
59
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: ReferenceComponent, isStandalone: true, selector: "reference", inputs: { id: "id", attachment: "attachment", rank: "rank" }, providers: [], ngImport: i0, template: `
42
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: ReferenceComponent, isStandalone: true, selector: "reference", inputs: { id: "id", attachment: "attachment", rank: "rank" }, providers: [], usesOnChanges: true, ngImport: i0, template: `
60
43
  <a
61
44
  class="reference"
62
45
  role="button"
63
- [sqTooltip]="ref()"
46
+ [sqTooltip]="ref"
64
47
  [sqTooltipTemplate]="tooltipTpl"
65
48
  [hoverableTooltip]="true"
66
- (click)="onOpenPreview(ref())"
49
+ (click)="onOpenPreview(ref)"
67
50
  >{{ id }}</a>
68
51
 
69
52
  <!-- tooltip template -->
70
53
  <ng-template #tooltipTpl>
71
54
  <sq-chat-reference
72
55
  class="expanded"
73
- [attachment]="ref()"
74
- [reference]="ref().contextId"
75
- [partId]="ref().$partId"
56
+ [attachment]="ref"
57
+ [reference]="ref.contextId"
58
+ [partId]="ref.$partId"
76
59
  (openPreview)="onOpenPreview($event, $event.$partId)"
77
60
  (openDocument)="onOpenDocument($event, $event.$partId)"
78
61
  ></sq-chat-reference>
@@ -85,25 +68,25 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
85
68
  <a
86
69
  class="reference"
87
70
  role="button"
88
- [sqTooltip]="ref()"
71
+ [sqTooltip]="ref"
89
72
  [sqTooltipTemplate]="tooltipTpl"
90
73
  [hoverableTooltip]="true"
91
- (click)="onOpenPreview(ref())"
74
+ (click)="onOpenPreview(ref)"
92
75
  >{{ id }}</a>
93
76
 
94
77
  <!-- tooltip template -->
95
78
  <ng-template #tooltipTpl>
96
79
  <sq-chat-reference
97
80
  class="expanded"
98
- [attachment]="ref()"
99
- [reference]="ref().contextId"
100
- [partId]="ref().$partId"
81
+ [attachment]="ref"
82
+ [reference]="ref.contextId"
83
+ [partId]="ref.$partId"
101
84
  (openPreview)="onOpenPreview($event, $event.$partId)"
102
85
  (openDocument)="onOpenDocument($event, $event.$partId)"
103
86
  ></sq-chat-reference>
104
87
  </ng-template>
105
88
  `, standalone: true, styles: ["div{border:1px solid #ccc;padding:8px;border-radius:4px;display:flex;gap:8px;flex-direction:column}\n"] }]
106
- }], ctorParameters: () => [], propDecorators: { id: [{
89
+ }], propDecorators: { id: [{
107
90
  type: Input
108
91
  }], attachment: [{
109
92
  type: Input
@@ -112,11 +95,18 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
112
95
  }] } });
113
96
  export class PageReferenceComponent {
114
97
  constructor() {
115
- this.ref = signal({});
116
- afterNextRender(() => {
98
+ this.ref = {};
99
+ }
100
+ ngOnChanges() {
101
+ if (!this.attachment)
102
+ return;
103
+ try {
117
104
  const obj = JSON.parse(decodeURIComponent(atob(this.attachment)));
118
- this.ref.set(obj);
119
- });
105
+ this.ref = obj;
106
+ }
107
+ catch (error) {
108
+ console.error("Error parsing attachment", error, this.attachment);
109
+ }
120
110
  }
121
111
  onOpenPreview(attachment, partId) {
122
112
  // Émettre un événement personnalisé pour le web element using the service
@@ -131,10 +121,10 @@ export class PageReferenceComponent {
131
121
  }));
132
122
  }
133
123
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: PageReferenceComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
134
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: PageReferenceComponent, isStandalone: true, selector: "page-reference", inputs: { id: "id", attachment: "attachment" }, providers: [], ngImport: i0, template: `
124
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: PageReferenceComponent, isStandalone: true, selector: "page-reference", inputs: { id: "id", attachment: "attachment" }, providers: [], usesOnChanges: true, ngImport: i0, template: `
135
125
  <span
136
126
  class="reference"
137
- [sqTooltip]="{ obj: ref(), id }"
127
+ [sqTooltip]="{ obj: ref, id }"
138
128
  [sqTooltipTemplate]="pageTooltipTpl"
139
129
  [hoverableTooltip]="true"
140
130
  >
@@ -156,7 +146,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
156
146
  args: [{ selector: "page-reference", imports: [TooltipDirective, InlinePageReferenceComponent], providers: [], template: `
157
147
  <span
158
148
  class="reference"
159
- [sqTooltip]="{ obj: ref(), id }"
149
+ [sqTooltip]="{ obj: ref, id }"
160
150
  [sqTooltipTemplate]="pageTooltipTpl"
161
151
  [hoverableTooltip]="true"
162
152
  >
@@ -172,18 +162,25 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
172
162
  />
173
163
  </ng-template>
174
164
  `, standalone: true, styles: ["div{border:1px solid #ccc;padding:8px;border-radius:4px;display:flex;gap:8px;flex-direction:column}\n"] }]
175
- }], ctorParameters: () => [], propDecorators: { id: [{
165
+ }], propDecorators: { id: [{
176
166
  type: Input
177
167
  }], attachment: [{
178
168
  type: Input
179
169
  }] } });
180
170
  export class ImageReferenceComponent {
181
171
  constructor() {
182
- this.ref = signal({});
183
- afterNextRender(() => {
172
+ this.ref = {};
173
+ }
174
+ ngOnChanges() {
175
+ if (!this.attachment)
176
+ return;
177
+ try {
184
178
  const obj = JSON.parse(decodeURIComponent(atob(this.attachment)));
185
- this.ref.set(obj);
186
- });
179
+ this.ref = obj;
180
+ }
181
+ catch (error) {
182
+ console.error("Error parsing attachment", error, this.attachment);
183
+ }
187
184
  }
188
185
  onOpenPreview(attachment, partId) {
189
186
  // Émettre un événement personnalisé pour le web element using the service
@@ -198,10 +195,10 @@ export class ImageReferenceComponent {
198
195
  }));
199
196
  }
200
197
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ImageReferenceComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
201
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: ImageReferenceComponent, isStandalone: true, selector: "image-reference", inputs: { id: "id", attachment: "attachment" }, providers: [], ngImport: i0, template: `
198
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: ImageReferenceComponent, isStandalone: true, selector: "image-reference", inputs: { id: "id", attachment: "attachment" }, providers: [], usesOnChanges: true, ngImport: i0, template: `
202
199
  <span
203
200
  class="reference"
204
- [sqTooltip]="{ obj: ref(), id }"
201
+ [sqTooltip]="{ obj: ref, id }"
205
202
  [sqTooltipTemplate]="imageTooltipTpl"
206
203
  [hoverableTooltip]="true"
207
204
  >
@@ -223,7 +220,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
223
220
  args: [{ selector: "image-reference", imports: [TooltipDirective, InlineImageReferenceComponent], providers: [], template: `
224
221
  <span
225
222
  class="reference"
226
- [sqTooltip]="{ obj: ref(), id }"
223
+ [sqTooltip]="{ obj: ref, id }"
227
224
  [sqTooltipTemplate]="imageTooltipTpl"
228
225
  [hoverableTooltip]="true"
229
226
  >
@@ -239,15 +236,15 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
239
236
  />
240
237
  </ng-template>
241
238
  `, standalone: true, styles: ["div{border:1px solid #ccc;padding:8px;border-radius:4px;display:flex;gap:8px;flex-direction:column}\n"] }]
242
- }], ctorParameters: () => [], propDecorators: { id: [{
239
+ }], propDecorators: { id: [{
243
240
  type: Input
244
241
  }], attachment: [{
245
242
  type: Input
246
243
  }] } });
247
244
  export class CodeBlockReferenceComponent {
248
245
  constructor() {
249
- this.el = inject(ElementRef);
250
246
  this.langname = "";
247
+ this.el = inject(ElementRef);
251
248
  this.encodeCode = '';
252
249
  }
253
250
  ngAfterViewInit() {
@@ -258,15 +255,15 @@ export class CodeBlockReferenceComponent {
258
255
  }
259
256
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CodeBlockReferenceComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
260
257
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: CodeBlockReferenceComponent, isStandalone: true, selector: "code-block-reference", inputs: { langname: "langname" }, ngImport: i0, template: `
261
- <div class="card mb-2">
262
- <div class="card-header d-flex justify-content-end align-items-center">
263
- <span class="me-auto">{{ langname || 'code'}}</span>
264
- <button class="btn btn-light btn-sm" copy-to-clipboard [text]="encodeCode">
265
- <svg data-testid="geist-icon" height="16" stroke-linejoin="round" viewBox="0 0 16 16" width="16" aria-hidden="true" style="color: currentcolor;"><path fill-rule="evenodd" clip-rule="evenodd" d="M2.75 0.5C1.7835 0.5 1 1.2835 1 2.25V9.75C1 10.7165 1.7835 11.5 2.75 11.5H3.75H4.5V10H3.75H2.75C2.61193 10 2.5 9.88807 2.5 9.75V2.25C2.5 2.11193 2.61193 2 2.75 2H8.25C8.38807 2 8.5 2.11193 8.5 2.25V3H10V2.25C10 1.2835 9.2165 0.5 8.25 0.5H2.75ZM7.75 4.5C6.7835 4.5 6 5.2835 6 6.25V13.75C6 14.7165 6.7835 15.5 7.75 15.5H13.25C14.2165 15.5 15 14.7165 15 13.75V6.25C15 5.2835 14.2165 4.5 13.25 4.5H7.75ZM7.5 6.25C7.5 6.11193 7.61193 6 7.75 6H13.25C13.3881 6 13.5 6.11193 13.5 6.25V13.75C13.5 13.8881 13.3881 14 13.25 14H7.75C7.61193 14 7.5 13.8881 7.5 13.75V6.25Z" fill="currentColor"></path></svg>
266
- </button>
267
- </div>
268
- <ng-content></ng-content>
269
- </div>
258
+ <div class="card mb-2">
259
+ <div class="card-header d-flex justify-content-end align-items-center">
260
+ <span class="me-auto">{{ langname || 'code'}}</span>
261
+ <button class="btn btn-light btn-sm" copy-to-clipboard [text]="encodeCode">
262
+ <svg data-testid="geist-icon" height="16" stroke-linejoin="round" viewBox="0 0 16 16" width="16" aria-hidden="true" style="color: currentcolor;"><path fill-rule="evenodd" clip-rule="evenodd" d="M2.75 0.5C1.7835 0.5 1 1.2835 1 2.25V9.75C1 10.7165 1.7835 11.5 2.75 11.5H3.75H4.5V10H3.75H2.75C2.61193 10 2.5 9.88807 2.5 9.75V2.25C2.5 2.11193 2.61193 2 2.75 2H8.25C8.38807 2 8.5 2.11193 8.5 2.25V3H10V2.25C10 1.2835 9.2165 0.5 8.25 0.5H2.75ZM7.75 4.5C6.7835 4.5 6 5.2835 6 6.25V13.75C6 14.7165 6.7835 15.5 7.75 15.5H13.25C14.2165 15.5 15 14.7165 15 13.75V6.25C15 5.2835 14.2165 4.5 13.25 4.5H7.75ZM7.5 6.25C7.5 6.11193 7.61193 6 7.75 6H13.25C13.3881 6 13.5 6.11193 13.5 6.25V13.75C13.5 13.8881 13.3881 14 13.25 14H7.75C7.61193 14 7.5 13.8881 7.5 13.75V6.25Z" fill="currentColor"></path></svg>
263
+ </button>
264
+ </div>
265
+ <ng-content></ng-content>
266
+ </div>
270
267
  `, isInline: true, dependencies: [{ kind: "directive", type: CopyToClipboardDirective, selector: "[copy-to-clipboard]", inputs: ["text"] }] }); }
271
268
  }
272
269
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CodeBlockReferenceComponent, decorators: [{
@@ -275,19 +272,19 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
275
272
  selector: "code-block-reference",
276
273
  imports: [CopyToClipboardDirective],
277
274
  template: `
278
- <div class="card mb-2">
279
- <div class="card-header d-flex justify-content-end align-items-center">
280
- <span class="me-auto">{{ langname || 'code'}}</span>
281
- <button class="btn btn-light btn-sm" copy-to-clipboard [text]="encodeCode">
282
- <svg data-testid="geist-icon" height="16" stroke-linejoin="round" viewBox="0 0 16 16" width="16" aria-hidden="true" style="color: currentcolor;"><path fill-rule="evenodd" clip-rule="evenodd" d="M2.75 0.5C1.7835 0.5 1 1.2835 1 2.25V9.75C1 10.7165 1.7835 11.5 2.75 11.5H3.75H4.5V10H3.75H2.75C2.61193 10 2.5 9.88807 2.5 9.75V2.25C2.5 2.11193 2.61193 2 2.75 2H8.25C8.38807 2 8.5 2.11193 8.5 2.25V3H10V2.25C10 1.2835 9.2165 0.5 8.25 0.5H2.75ZM7.75 4.5C6.7835 4.5 6 5.2835 6 6.25V13.75C6 14.7165 6.7835 15.5 7.75 15.5H13.25C14.2165 15.5 15 14.7165 15 13.75V6.25C15 5.2835 14.2165 4.5 13.25 4.5H7.75ZM7.5 6.25C7.5 6.11193 7.61193 6 7.75 6H13.25C13.3881 6 13.5 6.11193 13.5 6.25V13.75C13.5 13.8881 13.3881 14 13.25 14H7.75C7.61193 14 7.5 13.8881 7.5 13.75V6.25Z" fill="currentColor"></path></svg>
283
- </button>
284
- </div>
285
- <ng-content></ng-content>
286
- </div>
275
+ <div class="card mb-2">
276
+ <div class="card-header d-flex justify-content-end align-items-center">
277
+ <span class="me-auto">{{ langname || 'code'}}</span>
278
+ <button class="btn btn-light btn-sm" copy-to-clipboard [text]="encodeCode">
279
+ <svg data-testid="geist-icon" height="16" stroke-linejoin="round" viewBox="0 0 16 16" width="16" aria-hidden="true" style="color: currentcolor;"><path fill-rule="evenodd" clip-rule="evenodd" d="M2.75 0.5C1.7835 0.5 1 1.2835 1 2.25V9.75C1 10.7165 1.7835 11.5 2.75 11.5H3.75H4.5V10H3.75H2.75C2.61193 10 2.5 9.88807 2.5 9.75V2.25C2.5 2.11193 2.61193 2 2.75 2H8.25C8.38807 2 8.5 2.11193 8.5 2.25V3H10V2.25C10 1.2835 9.2165 0.5 8.25 0.5H2.75ZM7.75 4.5C6.7835 4.5 6 5.2835 6 6.25V13.75C6 14.7165 6.7835 15.5 7.75 15.5H13.25C14.2165 15.5 15 14.7165 15 13.75V6.25C15 5.2835 14.2165 4.5 13.25 4.5H7.75ZM7.5 6.25C7.5 6.11193 7.61193 6 7.75 6H13.25C13.3881 6 13.5 6.11193 13.5 6.25V13.75C13.5 13.8881 13.3881 14 13.25 14H7.75C7.61193 14 7.5 13.8881 7.5 13.75V6.25Z" fill="currentColor"></path></svg>
280
+ </button>
281
+ </div>
282
+ <ng-content></ng-content>
283
+ </div>
287
284
  `,
288
285
  standalone: true,
289
286
  }]
290
287
  }], propDecorators: { langname: [{
291
288
  type: Input
292
289
  }] } });
293
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVmZXJlbmNlcy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hc3Npc3RhbnQvY2hhdC9yZWZlcmVuY2VzL3JlZmVyZW5jZXMuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxlQUFlLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM5RixPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUNwRixPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUNyRixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUdoRSxPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN6RSxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQzs7QUFFdkU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBNkJHO0FBaUNILE1BQU0sT0FBTyxrQkFBa0I7SUFRN0I7UUFGQSxRQUFHLEdBQUcsTUFBTSxDQUF3QixFQUEyQixDQUFDLENBQUM7UUFHL0QsZUFBZSxDQUFDLEdBQUcsRUFBRTtZQUNuQixNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2xFLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3BCLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELGFBQWEsQ0FBQyxVQUFpQyxFQUFFLE1BQWU7UUFDOUQsMEVBQTBFO1FBQzFFLGFBQWEsQ0FDWCxJQUFJLFdBQVcsQ0FBQyxlQUFlLEVBQUU7WUFDL0IsTUFB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QUFDO1FBQzNELE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQzlDLElBQUksQ0FBQyxVQUFVLEdBQUcsa0JBQWtCLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDN0MsQ0FBQzsrR0FaVSwyQkFBMkI7bUdBQTNCLDJCQUEyQixrSEFiNUI7Ozs7Ozs7Ozs7R0FVVCw0REFYUyx3QkFBd0I7OzRGQWN2QiwyQkFBMkI7a0JBaEJ2QyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxzQkFBc0I7b0JBQ2hDLE9BQU8sRUFBRSxDQUFDLHdCQUF3QixDQUFDO29CQUNuQyxRQUFRLEVBQUU7Ozs7Ozs7Ozs7R0FVVDtvQkFDRCxVQUFVLEVBQUUsSUFBSTtpQkFDakI7OEJBSVUsUUFBUTtzQkFBaEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGFmdGVyTmV4dFJlbmRlciwgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBpbmplY3QsIElucHV0LCBzaWduYWwgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgeyBDaGF0UmVmZXJlbmNlQ29tcG9uZW50IH0gZnJvbSBcIi4uL2NoYXQtcmVmZXJlbmNlL2NoYXQtcmVmZXJlbmNlLmNvbXBvbmVudFwiO1xyXG5pbXBvcnQgeyBDb3B5VG9DbGlwYm9hcmREaXJlY3RpdmUgfSBmcm9tIFwiLi4vZGlyZWN0aXZlcy9jb3B5LXRvLWNsaXBib2FyZC5kaXJlY3RpdmVcIjtcclxuaW1wb3J0IHsgVG9vbHRpcERpcmVjdGl2ZSB9IGZyb20gXCIuLi90b29sdGlwL3Rvb2x0aXAuZGlyZWN0aXZlXCI7XHJcbmltcG9ydCB7IENoYXRDb250ZXh0QXR0YWNobWVudCB9IGZyb20gXCIuLi90eXBlc1wiO1xyXG5pbXBvcnQgdHlwZSB7IE1lc3NhZ2VJbWFnZVJlZmVyZW5jZSB9IGZyb20gXCIuLi90eXBlcy9tZXNzYWdlLXJlZmVyZW5jZS50eXBlc1wiO1xyXG5pbXBvcnQgeyBJbmxpbmVJbWFnZVJlZmVyZW5jZUNvbXBvbmVudCB9IGZyb20gXCIuL2lubGluZS1pbWFnZS1yZWZlcmVuY2VcIjtcclxuaW1wb3J0IHsgSW5saW5lUGFnZVJlZmVyZW5jZUNvbXBvbmVudCB9IGZyb20gXCIuL2lubGluZS1wYWdlLXJlZmVyZW5jZVwiO1xyXG5cclxuLypcclxuICogV2ViIEVsZW1lbnQgUmVmZXJlbmNlIENvbXBvbmVudFxyXG4gKiBUaGlzIGNvbXBvbmVudCBpcyB1c2VkIHRvIGRpc3BsYXkgYSByZWZlcmVuY2UgaW4gdGhlIGNoYXQgaW50ZXJmYWNlLlxyXG4gKiBJdCB1c2VzIGEgdG9vbHRpcCB0byBzaG93IGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHJlZmVyZW5jZS5cclxuICogVGhlIGNvbXBvbmVudCBlbWl0cyBjdXN0b20gZXZlbnRzIHdoZW4gdGhlIHVzZXIgaW50ZXJhY3RzIHdpdGggaXQuXHJcbiAqXHJcbiAqIFRoaXMgY29tcG9uZW50IGlzIGJhc2VkIG9uIHRoZSByZW1hcmsgdGVtcGxhdGUuXHJcbiAqXHJcbiAqIDwhLS0gQ2hhdCByZWZlcmVuY2UgKGJhZGdlIHdpdGggZmlsZSBhbmQgcGFydCBudW1iZXIpIC0tPlxyXG4gKiA8bmctdGVtcGxhdGUgcmVtYXJrVGVtcGxhdGU9XCJjaGF0LXJlZmVyZW5jZVwiIGxldC1yZWY+XHJcbiAqICAgICBAbGV0IGF0dGFjaG1lbnQgPSByZWZlcmVuY2VNYXAuZ2V0KHJlZi5yZWZJZCk7XHJcbiAqICAgICBAaWYgKGF0dGFjaG1lbnQpIHtcclxuICogICAgICAgPGFcclxuICogICAgICAgICBjbGFzcz1cInJlZmVyZW5jZVwiXHJcbiAqICAgICAgICAgcm9sZT1cImJ1dHRvblwiXHJcbiAqICAgICAgICAgW3NxVG9vbHRpcF09XCJhdHRhY2htZW50XCJcclxuICogICAgICAgICBbc3FUb29sdGlwVGVtcGxhdGVdPVwidG9vbHRpcFRwbFwiXHJcbiAqICAgICAgICAgW2hvdmVyYWJsZVRvb2x0aXBdPVwidHJ1ZVwiXHJcbiAqICAgICAgICAgKGNsaWNrKT1cIm9wZW5BdHRhY2htZW50UHJldmlldyhhdHRhY2htZW50LCByZWYucmVmSWQpXCJcclxuICogICAgICAgPlxyXG4gKiAgICAgICAgIHt7cmVmLnJlZklkfX1cclxuICogICAgICAgPC9hPlxyXG4gKiAgICAgfVxyXG4gKiAgICAgQGVsc2Uge1xyXG4gKiAgICAgICA8bmctdGVtcGxhdGUgI3N0YXRpY1JlZlRwbD5cclxuICogICAgICAgICA8c3BhbiBjbGFzcz1cInJlZmVyZW5jZVwiPnt7IHJlZi5yZWZJZCB9fTwvc3Bhbj5cclxuICogICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICogICAgIH1cclxuICogPC9uZy10ZW1wbGF0ZT5cclxuICovXHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogXCJyZWZlcmVuY2VcIixcclxuICBpbXBvcnRzOiBbVG9vbHRpcERpcmVjdGl2ZSwgQ2hhdFJlZmVyZW5jZUNvbXBvbmVudF0sXHJcbiAgcHJvdmlkZXJzOiBbXSxcclxuICB0ZW1wbGF0ZTogYFxyXG4gIDxhXHJcbiAgICBjbGFzcz1cInJlZmVyZW5jZVwiXHJcbiAgICByb2xlPVwiYnV0dG9uXCJcclxuICAgIFtzcVRvb2x0aXBdPVwicmVmKClcIlxyXG4gICAgW3NxVG9vbHRpcFRlbXBsYXRlXT1cInRvb2x0aXBUcGxcIlxyXG4gICAgW2hvdmVyYWJsZVRvb2x0aXBdPVwidHJ1ZVwiXHJcbiAgICAoY2xpY2spPVwib25PcGVuUHJldmlldyhyZWYoKSlcIlxyXG4gICAgPnt7IGlkIH19PC9hPlxyXG5cclxuICAgIDwhLS0gdG9vbHRpcCB0ZW1wbGF0ZSAtLT5cclxuICAgIDxuZy10ZW1wbGF0ZSAjdG9vbHRpcFRwbD5cclxuICAgICAgPHNxLWNoYXQtcmVmZXJlbmNlXHJcbiAgICAgICAgY2xhc3M9XCJleHBhbmRlZFwiXHJcbiAgICAgICAgW2F0dGFjaG1lbnRdPVwicmVmKClcIlxyXG4gICAgICAgIFtyZWZlcmVuY2VdPVwicmVmKCkuY29udGV4dElkXCJcclxuICAgICAgICBbcGFydElkXT1cInJlZigpLiRwYXJ0SWRcIlxyXG4gICAgICAgIChvcGVuUHJldmlldyk9XCJvbk9wZW5QcmV2aWV3KCRldmVudCwgJGV2ZW50LiRwYXJ0SWQpXCJcclxuICAgICAgICAob3BlbkRvY3VtZW50KT1cIm9uT3BlbkRvY3VtZW50KCRldmVudCwgJGV2ZW50LiRwYXJ0SWQpXCJcclxuICAgICAgPjwvc3EtY2hhdC1yZWZlcmVuY2U+XHJcbiAgICA8L25nLXRlbXBsYXRlPlxyXG4gIGAsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBzdHlsZXM6IGBcclxuICBkaXYgeyBib3JkZXI6IDFweCBzb2xpZCAjY2NjOyBwYWRkaW5nOiA4cHg7Ym9yZGVyLXJhZGl1czogNHB4OyBkaXNwbGF5OiBmbGV4OyBnYXA6IDhweDsgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsgfVxyXG4gIGAsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBSZWZlcmVuY2VDb21wb25lbnQge1xyXG4gIC8vIGplIHN1aXMgb2JsaWfDqSBkJ3V0aWxpc2VyIGxlcyBkw6ljb3JhdGV1cnMgQElucHV0KCkgY2FyIEFuZ3VsYXIgbmUgc3VwcG9ydGUgcGFzIGxlcyBpbnB1dHMgKHNpZ25hbCkgZGFucyBsZXMgd2ViIGVsZW1lbnRzIGVuIEFuZ3VsYXIgdjE4XHJcbiAgQElucHV0KCkgaWQ7XHJcbiAgQElucHV0KCkgYXR0YWNobWVudDtcclxuICBASW5wdXQoKSByYW5rOiBudW1iZXI7XHJcblxyXG4gIHJlZiA9IHNpZ25hbDxDaGF0Q29udGV4dEF0dGFjaG1lbnQ+KHt9IGFzIENoYXRDb250ZXh0QXR0YWNobWVudCk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgYWZ0ZXJOZXh0UmVuZGVyKCgpID0+IHtcclxuICAgICAgY29uc3Qgb2JqID0gSlNPTi5wYXJzZShkZWNvZGVVUklDb21wb25lbnQoYXRvYih0aGlzLmF0dGFjaG1lbnQpKSk7XHJcbiAgICAgIHRoaXMucmVmLnNldChvYmopO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBvbk9wZW5QcmV2aWV3KGF0dGFjaG1lbnQ6IENoYXRDb250ZXh0QXR0YWNobWVudCwgcGFydElkPzogbnVtYmVyKSB7XHJcbiAgICAvLyDDiW1ldHRyZSB1biDDqXbDqW5lbWVudCBwZXJzb25uYWxpc8OpIHBvdXIgbGUgd2ViIGVsZW1lbnQgdXNpbmcgdGhlIHNlcnZpY2VcclxuICAgIGRpc3BhdGNoRXZlbnQoXHJcbiAgICAgIG5ldyBDdXN0b21FdmVudChcIm9uT3BlblByZXZpZXdcIiwge1xyXG4gICAgICAgIGRldGFpbDogeyByZWZlcmVuY2U6IGF0dGFjaG1lbnQsIHBhcnRJZDogcGFydElkIHx8IHRoaXMuaWQgfSxcclxuICAgICAgfSlcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBvbk9wZW5Eb2N1bWVudChhdHRhY2htZW50OiBDaGF0Q29udGV4dEF0dGFjaG1lbnQsIHBhcnRJZD86IG51bWJlcikge1xyXG4gICAgLy8gw4ltZXR0cmUgdW4gw6l2w6luZW1lbnQgcGVyc29ubmFsaXPDqSBwb3VyIGxlIHdlYiBlbGVtZW50IHVzaW5nIHRoZSBzZXJ2aWNlXHJcbiAgICBkaXNwYXRjaEV2ZW50KFxyXG4gICAgICBuZXcgQ3VzdG9tRXZlbnQoXCJvbk9wZW5Eb2N1bWVudFwiLCB7XHJcbiAgICAgICAgZGV0YWlsOiB7IHJlZmVyZW5jZTogYXR0YWNobWVudCwgcGFydElkOiBwYXJ0SWQgfHwgdGhpcy5pZCB9LFxyXG4gICAgICB9KVxyXG4gICAgKTtcclxuICB9XHJcbn1cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiBcInBhZ2UtcmVmZXJlbmNlXCIsXHJcbiAgaW1wb3J0czogW1Rvb2x0aXBEaXJlY3RpdmUsIElubGluZVBhZ2VSZWZlcmVuY2VDb21wb25lbnRdLFxyXG4gIHByb3ZpZGVyczogW10sXHJcbiAgdGVtcGxhdGU6IGBcclxuICAgIDxzcGFuXHJcbiAgICAgIGNsYXNzPVwicmVmZXJlbmNlXCJcclxuICAgICAgW3NxVG9vbHRpcF09XCJ7IG9iajogcmVmKCksIGlkIH1cIlxyXG4gICAgICBbc3FUb29sdGlwVGVtcGxhdGVdPVwicGFnZVRvb2x0aXBUcGxcIlxyXG4gICAgICBbaG92ZXJhYmxlVG9vbHRpcF09XCJ0cnVlXCJcclxuICAgID5cclxuICAgICAgUGFnZS17eyBpZCB9fVxyXG4gICAgPC9zcGFuPlxyXG4gICAgPG5nLXRlbXBsYXRlICNwYWdlVG9vbHRpcFRwbCBsZXQtcmVmPlxyXG4gICAgICA8SW5saW5lUGFnZVJlZmVyZW5jZVxyXG4gICAgICAgIHN0eWxlPVwibWF4LXdpZHRoOiAzMHZ3O1wiXHJcbiAgICAgICAgW2lkXT1cInJlZi5pZFwiXHJcbiAgICAgICAgW3JlZl09XCJyZWYub2JqXCJcclxuICAgICAgICAob3BlblByZXZpZXcpPVwib25PcGVuUHJldmlldygkZXZlbnQsICRldmVudC4kcGFydElkKVwiXHJcbiAgICAgICAgKG9wZW5Eb2N1bWVudCk9XCJvbk9wZW5QcmV2aWV3KCRldmVudCwgJGV2ZW50LiRwYXJ0SWQpXCJcclxuICAgICAgLz5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgYCxcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gIHN0eWxlczogYFxyXG4gIGRpdiB7IGJvcmRlcjogMXB4IHNvbGlkICNjY2M7IHBhZGRpbmc6IDhweDtib3JkZXItcmFkaXVzOiA0cHg7IGRpc3BsYXk6IGZsZXg7IGdhcDogOHB4OyBmbGV4LWRpcmVjdGlvbjogY29sdW1uOyB9XHJcbiAgYCxcclxufSlcclxuZXhwb3J0IGNsYXNzIFBhZ2VSZWZlcmVuY2VDb21wb25lbnQge1xyXG4gIC8vIGplIHN1aXMgb2JsaWfDqSBkJ3V0aWxpc2VyIGxlcyBkw6ljb3JhdGV1cnMgQElucHV0KCkgY2FyIEFuZ3VsYXIgbmUgc3VwcG9ydGUgcGFzIGxlcyBpbnB1dHMgKHNpZ25hbCkgZGFucyBsZXMgd2ViIGVsZW1lbnRzIGVuIEFuZ3VsYXIgdjE4XHJcbiAgQElucHV0KCkgaWQ7XHJcbiAgQElucHV0KCkgYXR0YWNobWVudDtcclxuXHJcbiAgcmVmID0gc2lnbmFsPE1lc3NhZ2VJbWFnZVJlZmVyZW5jZT4oe30pO1xyXG5cclxuICBjb25zdHJ1Y3RvcigpIHtcclxuICAgIGFmdGVyTmV4dFJlbmRlcigoKSA9PiB7XHJcbiAgICAgIGNvbnN0IG9iaiA9IEpTT04ucGFyc2UoZGVjb2RlVVJJQ29tcG9uZW50KGF0b2IodGhpcy5hdHRhY2htZW50KSkpO1xyXG4gICAgICB0aGlzLnJlZi5zZXQob2JqKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgb25PcGVuUHJldmlldyhhdHRhY2htZW50OiBDaGF0Q29udGV4dEF0dGFjaG1lbnQsIHBhcnRJZD86IG51bWJlcikge1xyXG4gICAgLy8gw4ltZXR0cmUgdW4gw6l2w6luZW1lbnQgcGVyc29ubmFsaXPDqSBwb3VyIGxlIHdlYiBlbGVtZW50IHVzaW5nIHRoZSBzZXJ2aWNlXHJcbiAgICBkaXNwYXRjaEV2ZW50KFxyXG4gICAgICBuZXcgQ3VzdG9tRXZlbnQoXCJvbk9wZW5QcmV2aWV3XCIsIHtcclxuICAgICAgICBkZXRhaWw6IHsgcmVmZXJlbmNlOiBhdHRhY2htZW50LCBwYXJ0SWQ6IHBhcnRJZCB8fCB0aGlzLmlkIH0sXHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgb25PcGVuRG9jdW1lbnQoYXR0YWNobWVudDogQ2hhdENvbnRleHRBdHRhY2htZW50LCBwYXJ0SWQ/OiBudW1iZXIpIHtcclxuICAgIC8vIMOJbWV0dHJlIHVuIMOpdsOpbmVtZW50IHBlcnNvbm5hbGlzw6kgcG91ciBsZSB3ZWIgZWxlbWVudCB1c2luZyB0aGUgc2VydmljZVxyXG4gICAgZGlzcGF0Y2hFdmVudChcclxuICAgICAgbmV3IEN1c3RvbUV2ZW50KFwib25PcGVuRG9jdW1lbnRcIiwge1xyXG4gICAgICAgIGRldGFpbDogeyByZWZlcmVuY2U6IGF0dGFjaG1lbnQsIHBhcnRJZDogcGFydElkIHx8IHRoaXMuaWQgfSxcclxuICAgICAgfSlcclxuICAgICk7XHJcbiAgfVxyXG59XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogXCJpbWFnZS1yZWZlcmVuY2VcIixcclxuICBpbXBvcnRzOiBbVG9vbHRpcERpcmVjdGl2ZSwgSW5saW5lSW1hZ2VSZWZlcmVuY2VDb21wb25lbnRdLFxyXG4gIHByb3ZpZGVyczogW10sXHJcbiAgdGVtcGxhdGU6IGBcclxuICAgIDxzcGFuXHJcbiAgICAgIGNsYXNzPVwicmVmZXJlbmNlXCJcclxuICAgICAgW3NxVG9vbHRpcF09XCJ7IG9iajogcmVmKCksIGlkIH1cIlxyXG4gICAgICBbc3FUb29sdGlwVGVtcGxhdGVdPVwiaW1hZ2VUb29sdGlwVHBsXCJcclxuICAgICAgW2hvdmVyYWJsZVRvb2x0aXBdPVwidHJ1ZVwiXHJcbiAgICA+XHJcbiAgICAgIEltZy17eyB0aGlzLmlkIH19XHJcbiAgICA8L3NwYW4+XHJcbiAgICA8bmctdGVtcGxhdGUgI2ltYWdlVG9vbHRpcFRwbCBsZXQtcmVmPlxyXG4gICAgICA8SW5saW5lSW1hZ2VSZWZlcmVuY2VcclxuICAgICAgICBzdHlsZT1cIm1heC13aWR0aDogMzB2dztcIlxyXG4gICAgICAgIFtpZF09XCJyZWYuaWRcIlxyXG4gICAgICAgIFtyZWZdPVwicmVmLm9ialwiXHJcbiAgICAgICAgKG9wZW5QcmV2aWV3KT1cIm9uT3BlblByZXZpZXcoJGV2ZW50LCAkZXZlbnQuJHBhcnRJZClcIlxyXG4gICAgICAgIChvcGVuRG9jdW1lbnQpPVwib25PcGVuRG9jdW1lbnQoJGV2ZW50LCAkZXZlbnQuJHBhcnRJZClcIlxyXG4gICAgICAvPlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuICBgLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgc3R5bGVzOiBgXHJcbiAgZGl2IHsgYm9yZGVyOiAxcHggc29saWQgI2NjYzsgcGFkZGluZzogOHB4O2JvcmRlci1yYWRpdXM6IDRweDsgZGlzcGxheTogZmxleDsgZ2FwOiA4cHg7IGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47IH1cclxuICBgLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgSW1hZ2VSZWZlcmVuY2VDb21wb25lbnQge1xyXG4gIC8vIGplIHN1aXMgb2JsaWfDqSBkJ3V0aWxpc2VyIGxlcyBkw6ljb3JhdGV1cnMgQElucHV0KCkgY2FyIEFuZ3VsYXIgbmUgc3VwcG9ydGUgcGFzIGxlcyBpbnB1dHMgKHNpZ25hbCkgZGFucyBsZXMgd2ViIGVsZW1lbnRzIGVuIEFuZ3VsYXIgdjE4XHJcbiAgQElucHV0KCkgaWQ7XHJcbiAgQElucHV0KCkgYXR0YWNobWVudDtcclxuXHJcbiAgcmVmID0gc2lnbmFsPE1lc3NhZ2VJbWFnZVJlZmVyZW5jZT4oe30pO1xyXG5cclxuICBjb25zdHJ1Y3RvcigpIHtcclxuICAgIGFmdGVyTmV4dFJlbmRlcigoKSA9PiB7XHJcbiAgICAgIGNvbnN0IG9iaiA9IEpTT04ucGFyc2UoZGVjb2RlVVJJQ29tcG9uZW50KGF0b2IodGhpcy5hdHRhY2htZW50KSkpO1xyXG4gICAgICB0aGlzLnJlZi5zZXQob2JqKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgb25PcGVuUHJldmlldyhhdHRhY2htZW50OiBDaGF0Q29udGV4dEF0dGFjaG1lbnQsIHBhcnRJZD86IG51bWJlcikge1xyXG4gICAgLy8gw4ltZXR0cmUgdW4gw6l2w6luZW1lbnQgcGVyc29ubmFsaXPDqSBwb3VyIGxlIHdlYiBlbGVtZW50IHVzaW5nIHRoZSBzZXJ2aWNlXHJcbiAgICBkaXNwYXRjaEV2ZW50KFxyXG4gICAgICBuZXcgQ3VzdG9tRXZlbnQoXCJvbk9wZW5QcmV2aWV3XCIsIHtcclxuICAgICAgICBkZXRhaWw6IHsgcmVmZXJlbmNlOiBhdHRhY2htZW50LCBwYXJ0SWQ6IHBhcnRJZCB8fCB0aGlzLmlkIH0sXHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgb25PcGVuRG9jdW1lbnQoYXR0YWNobWVudDogQ2hhdENvbnRleHRBdHRhY2htZW50LCBwYXJ0SWQ/OiBudW1iZXIpIHtcclxuICAgIC8vIMOJbWV0dHJlIHVuIMOpdsOpbmVtZW50IHBlcnNvbm5hbGlzw6kgcG91ciBsZSB3ZWIgZWxlbWVudCB1c2luZyB0aGUgc2VydmljZVxyXG4gICAgZGlzcGF0Y2hFdmVudChcclxuICAgICAgbmV3IEN1c3RvbUV2ZW50KFwib25PcGVuRG9jdW1lbnRcIiwge1xyXG4gICAgICAgIGRldGFpbDogeyByZWZlcmVuY2U6IGF0dGFjaG1lbnQsIHBhcnRJZDogcGFydElkIHx8IHRoaXMuaWQgfSxcclxuICAgICAgfSlcclxuICAgICk7XHJcbiAgfVxyXG59XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogXCJjb2RlLWJsb2NrLXJlZmVyZW5jZVwiLFxyXG4gIGltcG9ydHM6IFtDb3B5VG9DbGlwYm9hcmREaXJlY3RpdmVdLFxyXG4gIHRlbXBsYXRlOiBgXHJcbjxkaXYgY2xhc3M9XCJjYXJkIG1iLTJcIj5cclxuICA8ZGl2IGNsYXNzPVwiY2FyZC1oZWFkZXIgZC1mbGV4IGp1c3RpZnktY29udGVudC1lbmQgYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICA8c3BhbiBjbGFzcz1cIm1lLWF1dG9cIj57eyBsYW5nbmFtZSB8fCAnY29kZSd9fTwvc3Bhbj5cclxuICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLWxpZ2h0IGJ0bi1zbVwiIGNvcHktdG8tY2xpcGJvYXJkIFt0ZXh0XT1cImVuY29kZUNvZGVcIj5cclxuICAgICAgPHN2ZyBkYXRhLXRlc3RpZD1cImdlaXN0LWljb25cIiBoZWlnaHQ9XCIxNlwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgdmlld0JveD1cIjAgMCAxNiAxNlwiIHdpZHRoPVwiMTZcIiBhcmlhLWhpZGRlbj1cInRydWVcIiBzdHlsZT1cImNvbG9yOiBjdXJyZW50Y29sb3I7XCI+PHBhdGggZmlsbC1ydWxlPVwiZXZlbm9kZFwiIGNsaXAtcnVsZT1cImV2ZW5vZGRcIiBkPVwiTTIuNzUgMC41QzEuNzgzNSAwLjUgMSAxLjI4MzUgMSAyLjI1VjkuNzVDMSAxMC43MTY1IDEuNzgzNSAxMS41IDIuNzUgMTEuNUgzLjc1SDQuNVYxMEgzLjc1SDIuNzVDMi42MTE5MyAxMCAyLjUgOS44ODgwNyAyLjUgOS43NVYyLjI1QzIuNSAyLjExMTkzIDIuNjExOTMgMiAyLjc1IDJIOC4yNUM4LjM4ODA3IDIgOC41IDIuMTExOTMgOC41IDIuMjVWM0gxMFYyLjI1QzEwIDEuMjgzNSA5LjIxNjUgMC41IDguMjUgMC41SDIuNzVaTTcuNzUgNC41QzYuNzgzNSA0LjUgNiA1LjI4MzUgNiA2LjI1VjEzLjc1QzYgMTQuNzE2NSA2Ljc4MzUgMTUuNSA3Ljc1IDE1LjVIMTMuMjVDMTQuMjE2NSAxNS41IDE1IDE0LjcxNjUgMTUgMTMuNzVWNi4yNUMxNSA1LjI4MzUgMTQuMjE2NSA0LjUgMTMuMjUgNC41SDcuNzVaTTcuNSA2LjI1QzcuNSA2LjExMTkzIDcuNjExOTMgNiA3Ljc1IDZIMTMuMjVDMTMuMzg4MSA2IDEzLjUgNi4xMTE5MyAxMy41IDYuMjVWMTMuNzVDMTMuNSAxMy44ODgxIDEzLjM4ODEgMTQgMTMuMjUgMTRINy43NUM3LjYxMTkzIDE0IDcuNSAxMy44ODgxIDcuNSAxMy43NVY2LjI1WlwiIGZpbGw9XCJjdXJyZW50Q29sb3JcIj48L3BhdGg+PC9zdmc+XHJcbiAgICA8L2J1dHRvbj5cclxuICA8L2Rpdj5cclxuICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XHJcbjwvZGl2PlxyXG4gIGAsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxufSlcclxuZXhwb3J0IGNsYXNzIENvZGVCbG9ja1JlZmVyZW5jZUNvbXBvbmVudCB7XHJcbiAgZWwgPSBpbmplY3QoRWxlbWVudFJlZik7XHJcblxyXG4gIEBJbnB1dCgpIGxhbmduYW1lID0gXCJcIjtcclxuXHJcbiAgZW5jb2RlQ29kZSA9ICcnO1xyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKSB7XHJcbiAgICAvLyBnZXQgdGhlIGNvZGUgY29udGVudFxyXG4gICAgY29uc3QgY29kZUVsID0gdGhpcy5lbC5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoXCJjb2RlXCIpO1xyXG4gICAgY29uc3QgY29kZSA9IGNvZGVFbCA/IGNvZGVFbC50ZXh0Q29udGVudCA6IFwiXCI7XHJcbiAgICB0aGlzLmVuY29kZUNvZGUgPSBlbmNvZGVVUklDb21wb25lbnQoY29kZSk7XHJcbiAgfVxyXG59Il19
290
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVmZXJlbmNlcy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hc3Npc3RhbnQvY2hhdC9yZWZlcmVuY2VzL3JlZmVyZW5jZXMuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQWEsTUFBTSxlQUFlLENBQUM7QUFDaEYsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFDcEYsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDckYsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFHaEUsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDekUsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0seUJBQXlCLENBQUM7O0FBRXZFOzs7OztHQUtHO0FBaUNILE1BQU0sT0FBTyxrQkFBa0I7SUEvQi9CO1FBcUNFLFFBQUcsR0FBeUIsRUFBMkIsQ0FBQztLQTZCekQ7SUEzQkMsV0FBVztRQUNULElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVTtZQUFFLE9BQU87UUFDN0IsSUFBSSxDQUFDO1lBQ0gsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNsRSxJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztRQUNqQixDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLE9BQU8sQ0FBQyxLQUFLLENBQUMsMEJBQTBCLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNwRSxDQUFDO0lBQ0gsQ0FBQztJQUVELGFBQWEsQ0FBQyxVQUFpQyxF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RSxZQUNIOzs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FrQlQsY0FDVyxJQUFJOzhCQU9QLEVBQUU7c0JBQVYsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLOztBQWlEUixNQUFNLE9BQU8sMkJBQTJCO0lBaEJ4QztRQWlCVyxhQUFRLEdBQUcsRUFBRSxDQUFDO1FBRXZCLE9BQUUsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDeEIsZUFBVSxHQUFHLEVBQUUsQ0FBQztLQVFqQjtJQU5DLGVBQWU7UUFDYix1QkFBdUI7UUFDdkIsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzNELE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQzlDLElBQUksQ0FBQyxVQUFVLEdBQUcsa0JBQWtCLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDN0MsQ0FBQzsrR0FYVSwyQkFBMkI7bUdBQTNCLDJCQUEyQixrSEFiNUI7Ozs7Ozs7Ozs7R0FVVCw0REFYUyx3QkFBd0I7OzRGQWN2QiwyQkFBMkI7a0JBaEJ2QyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxzQkFBc0I7b0JBQ2hDLE9BQU8sRUFBRSxDQUFDLHdCQUF3QixDQUFDO29CQUNuQyxRQUFRLEVBQUU7Ozs7Ozs7Ozs7R0FVVDtvQkFDRCxVQUFVLEVBQUUsSUFBSTtpQkFDakI7OEJBRVUsUUFBUTtzQkFBaEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRWxlbWVudFJlZiwgaW5qZWN0LCBJbnB1dCwgT25DaGFuZ2VzIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgQ2hhdFJlZmVyZW5jZUNvbXBvbmVudCB9IGZyb20gXCIuLi9jaGF0LXJlZmVyZW5jZS9jaGF0LXJlZmVyZW5jZS5jb21wb25lbnRcIjtcclxuaW1wb3J0IHsgQ29weVRvQ2xpcGJvYXJkRGlyZWN0aXZlIH0gZnJvbSBcIi4uL2RpcmVjdGl2ZXMvY29weS10by1jbGlwYm9hcmQuZGlyZWN0aXZlXCI7XHJcbmltcG9ydCB7IFRvb2x0aXBEaXJlY3RpdmUgfSBmcm9tIFwiLi4vdG9vbHRpcC90b29sdGlwLmRpcmVjdGl2ZVwiO1xyXG5pbXBvcnQgeyBDaGF0Q29udGV4dEF0dGFjaG1lbnQgfSBmcm9tIFwiLi4vdHlwZXNcIjtcclxuaW1wb3J0IHR5cGUgeyBNZXNzYWdlSW1hZ2VSZWZlcmVuY2UgfSBmcm9tIFwiLi4vdHlwZXMvbWVzc2FnZS1yZWZlcmVuY2UudHlwZXNcIjtcclxuaW1wb3J0IHsgSW5saW5lSW1hZ2VSZWZlcmVuY2VDb21wb25lbnQgfSBmcm9tIFwiLi9pbmxpbmUtaW1hZ2UtcmVmZXJlbmNlXCI7XHJcbmltcG9ydCB7IElubGluZVBhZ2VSZWZlcmVuY2VDb21wb25lbnQgfSBmcm9tIFwiLi9pbmxpbmUtcGFnZS1yZWZlcmVuY2VcIjtcclxuXHJcbi8qXHJcbiAqIFdlYiBFbGVtZW50IFJlZmVyZW5jZSBDb21wb25lbnRzXHJcbiAqIFRob3NlIGNvbXBvbmVudHMgYXJlIHVzZWQgdG8gZGlzcGxheSBhIHJlZmVyZW5jZSAocGFnZSwgaW1hZ2UsIGRvY3VtZW50KSBpbiB0aGUgY2hhdCBpbnRlcmZhY2UuXHJcbiAqIEl0IHVzZXMgYSB0b29sdGlwIHRvIHNob3cgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgcmVmZXJlbmNlLlxyXG4gKiBUaGUgY29tcG9uZW50IGVtaXRzIGN1c3RvbSBldmVudHMgd2hlbiB0aGUgdXNlciBpbnRlcmFjdHMgd2l0aCBpdC5cclxuICovXHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogXCJyZWZlcmVuY2VcIixcclxuICBpbXBvcnRzOiBbVG9vbHRpcERpcmVjdGl2ZSwgQ2hhdFJlZmVyZW5jZUNvbXBvbmVudF0sXHJcbiAgcHJvdmlkZXJzOiBbXSxcclxuICB0ZW1wbGF0ZTogYFxyXG4gIDxhXHJcbiAgICBjbGFzcz1cInJlZmVyZW5jZVwiXHJcbiAgICByb2xlPVwiYnV0dG9uXCJcclxuICAgIFtzcVRvb2x0aXBdPVwicmVmXCJcclxuICAgIFtzcVRvb2x0aXBUZW1wbGF0ZV09XCJ0b29sdGlwVHBsXCJcclxuICAgIFtob3ZlcmFibGVUb29sdGlwXT1cInRydWVcIlxyXG4gICAgKGNsaWNrKT1cIm9uT3BlblByZXZpZXcocmVmKVwiXHJcbiAgICA+e3sgaWQgfX08L2E+XHJcblxyXG4gICAgPCEtLSB0b29sdGlwIHRlbXBsYXRlIC0tPlxyXG4gICAgPG5nLXRlbXBsYXRlICN0b29sdGlwVHBsPlxyXG4gICAgICA8c3EtY2hhdC1yZWZlcmVuY2VcclxuICAgICAgICBjbGFzcz1cImV4cGFuZGVkXCJcclxuICAgICAgICBbYXR0YWNobWVudF09XCJyZWZcIlxyXG4gICAgICAgIFtyZWZlcmVuY2VdPVwicmVmLmNvbnRleHRJZFwiXHJcbiAgICAgICAgW3BhcnRJZF09XCJyZWYuJHBhcnRJZFwiXHJcbiAgICAgICAgKG9wZW5QcmV2aWV3KT1cIm9uT3BlblByZXZpZXcoJGV2ZW50LCAkZXZlbnQuJHBhcnRJZClcIlxyXG4gICAgICAgIChvcGVuRG9jdW1lbnQpPVwib25PcGVuRG9jdW1lbnQoJGV2ZW50LCAkZXZlbnQuJHBhcnRJZClcIlxyXG4gICAgICA+PC9zcS1jaGF0LXJlZmVyZW5jZT5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgYCxcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gIHN0eWxlczogYFxyXG4gIGRpdiB7IGJvcmRlcjogMXB4IHNvbGlkICNjY2M7IHBhZGRpbmc6IDhweDtib3JkZXItcmFkaXVzOiA0cHg7IGRpc3BsYXk6IGZsZXg7IGdhcDogOHB4OyBmbGV4LWRpcmVjdGlvbjogY29sdW1uOyB9XHJcbiAgYCxcclxufSlcclxuZXhwb3J0IGNsYXNzIFJlZmVyZW5jZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uQ2hhbmdlcyB7XHJcbiAgLy8gamUgc3VpcyBvYmxpZ8OpIGQndXRpbGlzZXIgbGVzIGTDqWNvcmF0ZXVycyBASW5wdXQoKSBjYXIgQW5ndWxhciBuZSBzdXBwb3J0ZSBwYXMgbGVzIGlucHV0cyAoc2lnbmFsKSBkYW5zIGxlcyB3ZWIgZWxlbWVudHMgZW4gQW5ndWxhciB2MThcclxuICBASW5wdXQoKSBpZDtcclxuICBASW5wdXQoKSBhdHRhY2htZW50O1xyXG4gIEBJbnB1dCgpIHJhbms6IG51bWJlcjtcclxuXHJcbiAgcmVmOkNoYXRDb250ZXh0QXR0YWNobWVudCA9IHt9IGFzIENoYXRDb250ZXh0QXR0YWNobWVudDtcclxuXHJcbiAgbmdPbkNoYW5nZXMoKSB7XHJcbiAgICBpZiAoIXRoaXMuYXR0YWNobWVudCkgcmV0dXJuO1xyXG4gICAgdHJ5IHtcclxuICAgICAgY29uc3Qgb2JqID0gSlNPTi5wYXJzZShkZWNvZGVVUklDb21wb25lbnQoYXRvYih0aGlzLmF0dGFjaG1lbnQpKSk7XHJcbiAgICAgIHRoaXMucmVmID0gb2JqO1xyXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgY29uc29sZS5lcnJvcihcIkVycm9yIHBhcnNpbmcgYXR0YWNobWVudFwiLCBlcnJvciwgdGhpcy5hdHRhY2htZW50KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uT3BlblByZXZpZXcoYXR0YWNobWVudDogQ2hhdENvbnRleHRBdHRhY2htZW50LCBwYXJ0SWQ/OiBudW1iZXIpIHtcclxuICAgIC8vIMOJbWV0dHJlIHVuIMOpdsOpbmVtZW50IHBlcnNvbm5hbGlzw6kgcG91ciBsZSB3ZWIgZWxlbWVudCB1c2luZyB0aGUgc2VydmljZVxyXG4gICAgZGlzcGF0Y2hFdmVudChcclxuICAgICAgbmV3IEN1c3RvbUV2ZW50KFwib25PcGVuUHJldmlld1wiLCB7XHJcbiAgICAgICAgZGV0YWlsOiB7IHJlZmVyZW5jZTogYXR0YWNobWVudCwgcGFydElkOiBwYXJ0SWQgfHwgdGhpcy5pZCB9LFxyXG4gICAgICB9KVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIG9uT3BlbkRvY3VtZW50KGF0dGFjaG1lbnQ6IENoYXRDb250ZXh0QXR0YWNobWVudCwgcGFydElkPzogbnVtYmVyKSB7XHJcbiAgICAvLyDDiW1ldHRyZSB1biDDqXbDqW5lbWVudCBwZXJzb25uYWxpc8OpIHBvdXIgbGUgd2ViIGVsZW1lbnQgdXNpbmcgdGhlIHNlcnZpY2VcclxuICAgIGRpc3BhdGNoRXZlbnQoXHJcbiAgICAgIG5ldyBDdXN0b21FdmVudChcIm9uT3BlbkRvY3VtZW50XCIsIHtcclxuICAgICAgICBkZXRhaWw6IHsgcmVmZXJlbmNlOiBhdHRhY2htZW50LCBwYXJ0SWQ6IHBhcnRJZCB8fCB0aGlzLmlkIH0sXHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG4gIH1cclxufVxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6IFwicGFnZS1yZWZlcmVuY2VcIixcclxuICBpbXBvcnRzOiBbVG9vbHRpcERpcmVjdGl2ZSwgSW5saW5lUGFnZVJlZmVyZW5jZUNvbXBvbmVudF0sXHJcbiAgcHJvdmlkZXJzOiBbXSxcclxuICB0ZW1wbGF0ZTogYFxyXG4gICAgPHNwYW5cclxuICAgICAgY2xhc3M9XCJyZWZlcmVuY2VcIlxyXG4gICAgICBbc3FUb29sdGlwXT1cInsgb2JqOiByZWYsIGlkIH1cIlxyXG4gICAgICBbc3FUb29sdGlwVGVtcGxhdGVdPVwicGFnZVRvb2x0aXBUcGxcIlxyXG4gICAgICBbaG92ZXJhYmxlVG9vbHRpcF09XCJ0cnVlXCJcclxuICAgID5cclxuICAgICAgUGFnZS17eyBpZCB9fVxyXG4gICAgPC9zcGFuPlxyXG4gICAgPG5nLXRlbXBsYXRlICNwYWdlVG9vbHRpcFRwbCBsZXQtcmVmPlxyXG4gICAgICA8SW5saW5lUGFnZVJlZmVyZW5jZVxyXG4gICAgICAgIHN0eWxlPVwibWF4LXdpZHRoOiAzMHZ3O1wiXHJcbiAgICAgICAgW2lkXT1cInJlZi5pZFwiXHJcbiAgICAgICAgW3JlZl09XCJyZWYub2JqXCJcclxuICAgICAgICAob3BlblByZXZpZXcpPVwib25PcGVuUHJldmlldygkZXZlbnQsICRldmVudC4kcGFydElkKVwiXHJcbiAgICAgICAgKG9wZW5Eb2N1bWVudCk9XCJvbk9wZW5QcmV2aWV3KCRldmVudCwgJGV2ZW50LiRwYXJ0SWQpXCJcclxuICAgICAgLz5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgYCxcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gIHN0eWxlczogYFxyXG4gIGRpdiB7IGJvcmRlcjogMXB4IHNvbGlkICNjY2M7IHBhZGRpbmc6IDhweDtib3JkZXItcmFkaXVzOiA0cHg7IGRpc3BsYXk6IGZsZXg7IGdhcDogOHB4OyBmbGV4LWRpcmVjdGlvbjogY29sdW1uOyB9XHJcbiAgYCxcclxufSlcclxuZXhwb3J0IGNsYXNzIFBhZ2VSZWZlcmVuY2VDb21wb25lbnQgaW1wbGVtZW50cyBPbkNoYW5nZXMge1xyXG4gIC8vIGplIHN1aXMgb2JsaWfDqSBkJ3V0aWxpc2VyIGxlcyBkw6ljb3JhdGV1cnMgQElucHV0KCkgY2FyIEFuZ3VsYXIgbmUgc3VwcG9ydGUgcGFzIGxlcyBpbnB1dHMgKHNpZ25hbCkgZGFucyBsZXMgd2ViIGVsZW1lbnRzIGVuIEFuZ3VsYXIgdjE4XHJcbiAgQElucHV0KCkgaWQ7XHJcbiAgQElucHV0KCkgYXR0YWNobWVudDtcclxuXHJcbiAgcmVmOiBNZXNzYWdlSW1hZ2VSZWZlcmVuY2UgPSB7fSBhcyBNZXNzYWdlSW1hZ2VSZWZlcmVuY2U7XHJcblxyXG4gIG5nT25DaGFuZ2VzKCkge1xyXG4gICAgaWYgKCF0aGlzLmF0dGFjaG1lbnQpIHJldHVybjtcclxuICAgIHRyeSB7XHJcbiAgICAgIGNvbnN0IG9iaiA9IEpTT04ucGFyc2UoZGVjb2RlVVJJQ29tcG9uZW50KGF0b2IodGhpcy5hdHRhY2htZW50KSkpO1xyXG4gICAgICB0aGlzLnJlZiA9IG9iajtcclxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoXCJFcnJvciBwYXJzaW5nIGF0dGFjaG1lbnRcIiwgZXJyb3IsIHRoaXMuYXR0YWNobWVudCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvbk9wZW5QcmV2aWV3KGF0dGFjaG1lbnQ6IENoYXRDb250ZXh0QXR0YWNobWVudCwgcGFydElkPzogbnVtYmVyKSB7XHJcbiAgICAvLyDDiW1ldHRyZSB1biDDqXbDqW5lbWVudCBwZXJzb25uYWxpc8OpIHBvdXIgbGUgd2ViIGVsZW1lbnQgdXNpbmcgdGhlIHNlcnZpY2VcclxuICAgIGRpc3BhdGNoRXZlbnQoXHJcbiAgICAgIG5ldyBDdXN0b21FdmVudChcIm9uT3BlblByZXZpZXdcIiwge1xyXG4gICAgICAgIGRldGFpbDogeyByZWZlcmVuY2U6IGF0dGFjaG1lbnQsIHBhcnRJZDogcGFydElkIHx8IHRoaXMuaWQgfSxcclxuICAgICAgfSlcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBvbk9wZW5Eb2N1bWVudChhdHRhY2htZW50OiBDaGF0Q29udGV4dEF0dGFjaG1lbnQsIHBhcnRJZD86IG51bWJlcikge1xyXG4gICAgLy8gw4ltZXR0cmUgdW4gw6l2w6luZW1lbnQgcGVyc29ubmFsaXPDqSBwb3VyIGxlIHdlYiBlbGVtZW50IHVzaW5nIHRoZSBzZXJ2aWNlXHJcbiAgICBkaXNwYXRjaEV2ZW50KFxyXG4gICAgICBuZXcgQ3VzdG9tRXZlbnQoXCJvbk9wZW5Eb2N1bWVudFwiLCB7XHJcbiAgICAgICAgZGV0YWlsOiB7IHJlZmVyZW5jZTogYXR0YWNobWVudCwgcGFydElkOiBwYXJ0SWQgfHwgdGhpcy5pZCB9LFxyXG4gICAgICB9KVxyXG4gICAgKTtcclxuICB9XHJcbn1cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiBcImltYWdlLXJlZmVyZW5jZVwiLFxyXG4gIGltcG9ydHM6IFtUb29sdGlwRGlyZWN0aXZlLCBJbmxpbmVJbWFnZVJlZmVyZW5jZUNvbXBvbmVudF0sXHJcbiAgcHJvdmlkZXJzOiBbXSxcclxuICB0ZW1wbGF0ZTogYFxyXG4gICAgPHNwYW5cclxuICAgICAgY2xhc3M9XCJyZWZlcmVuY2VcIlxyXG4gICAgICBbc3FUb29sdGlwXT1cInsgb2JqOiByZWYsIGlkIH1cIlxyXG4gICAgICBbc3FUb29sdGlwVGVtcGxhdGVdPVwiaW1hZ2VUb29sdGlwVHBsXCJcclxuICAgICAgW2hvdmVyYWJsZVRvb2x0aXBdPVwidHJ1ZVwiXHJcbiAgICA+XHJcbiAgICAgIEltZy17eyB0aGlzLmlkIH19XHJcbiAgICA8L3NwYW4+XHJcbiAgICA8bmctdGVtcGxhdGUgI2ltYWdlVG9vbHRpcFRwbCBsZXQtcmVmPlxyXG4gICAgICA8SW5saW5lSW1hZ2VSZWZlcmVuY2VcclxuICAgICAgICBzdHlsZT1cIm1heC13aWR0aDogMzB2dztcIlxyXG4gICAgICAgIFtpZF09XCJyZWYuaWRcIlxyXG4gICAgICAgIFtyZWZdPVwicmVmLm9ialwiXHJcbiAgICAgICAgKG9wZW5QcmV2aWV3KT1cIm9uT3BlblByZXZpZXcoJGV2ZW50LCAkZXZlbnQuJHBhcnRJZClcIlxyXG4gICAgICAgIChvcGVuRG9jdW1lbnQpPVwib25PcGVuRG9jdW1lbnQoJGV2ZW50LCAkZXZlbnQuJHBhcnRJZClcIlxyXG4gICAgICAvPlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuICBgLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgc3R5bGVzOiBgXHJcbiAgZGl2IHsgYm9yZGVyOiAxcHggc29saWQgI2NjYzsgcGFkZGluZzogOHB4O2JvcmRlci1yYWRpdXM6IDRweDsgZGlzcGxheTogZmxleDsgZ2FwOiA4cHg7IGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47IH1cclxuICBgLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgSW1hZ2VSZWZlcmVuY2VDb21wb25lbnQgaW1wbGVtZW50cyBPbkNoYW5nZXMge1xyXG4gIC8vIGplIHN1aXMgb2JsaWfDqSBkJ3V0aWxpc2VyIGxlcyBkw6ljb3JhdGV1cnMgQElucHV0KCkgY2FyIEFuZ3VsYXIgbmUgc3VwcG9ydGUgcGFzIGxlcyBpbnB1dHMgKHNpZ25hbCkgZGFucyBsZXMgd2ViIGVsZW1lbnRzIGVuIEFuZ3VsYXIgdjE4XHJcbiAgQElucHV0KCkgaWQ7XHJcbiAgQElucHV0KCkgYXR0YWNobWVudDtcclxuXHJcbiAgcmVmOiBNZXNzYWdlSW1hZ2VSZWZlcmVuY2UgPSB7fSBhcyBNZXNzYWdlSW1hZ2VSZWZlcmVuY2U7XHJcblxyXG4gIG5nT25DaGFuZ2VzKCkge1xyXG4gICAgaWYgKCF0aGlzLmF0dGFjaG1lbnQpIHJldHVybjtcclxuICAgIHRyeSB7XHJcbiAgICAgIGNvbnN0IG9iaiA9IEpTT04ucGFyc2UoZGVjb2RlVVJJQ29tcG9uZW50KGF0b2IodGhpcy5hdHRhY2htZW50KSkpO1xyXG4gICAgICB0aGlzLnJlZiA9IG9iajtcclxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoXCJFcnJvciBwYXJzaW5nIGF0dGFjaG1lbnRcIiwgZXJyb3IsIHRoaXMuYXR0YWNobWVudCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvbk9wZW5QcmV2aWV3KGF0dGFjaG1lbnQ6IENoYXRDb250ZXh0QXR0YWNobWVudCwgcGFydElkPzogbnVtYmVyKSB7XHJcbiAgICAvLyDDiW1ldHRyZSB1biDDqXbDqW5lbWVudCBwZXJzb25uYWxpc8OpIHBvdXIgbGUgd2ViIGVsZW1lbnQgdXNpbmcgdGhlIHNlcnZpY2VcclxuICAgIGRpc3BhdGNoRXZlbnQoXHJcbiAgICAgIG5ldyBDdXN0b21FdmVudChcIm9uT3BlblByZXZpZXdcIiwge1xyXG4gICAgICAgIGRldGFpbDogeyByZWZlcmVuY2U6IGF0dGFjaG1lbnQsIHBhcnRJZDogcGFydElkIHx8IHRoaXMuaWQgfSxcclxuICAgICAgfSlcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBvbk9wZW5Eb2N1bWVudChhdHRhY2htZW50OiBDaGF0Q29udGV4dEF0dGFjaG1lbnQsIHBhcnRJZD86IG51bWJlcikge1xyXG4gICAgLy8gw4ltZXR0cmUgdW4gw6l2w6luZW1lbnQgcGVyc29ubmFsaXPDqSBwb3VyIGxlIHdlYiBlbGVtZW50IHVzaW5nIHRoZSBzZXJ2aWNlXHJcbiAgICBkaXNwYXRjaEV2ZW50KFxyXG4gICAgICBuZXcgQ3VzdG9tRXZlbnQoXCJvbk9wZW5Eb2N1bWVudFwiLCB7XHJcbiAgICAgICAgZGV0YWlsOiB7IHJlZmVyZW5jZTogYXR0YWNobWVudCwgcGFydElkOiBwYXJ0SWQgfHwgdGhpcy5pZCB9LFxyXG4gICAgICB9KVxyXG4gICAgKTtcclxuICB9XHJcbn1cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiBcImNvZGUtYmxvY2stcmVmZXJlbmNlXCIsXHJcbiAgaW1wb3J0czogW0NvcHlUb0NsaXBib2FyZERpcmVjdGl2ZV0sXHJcbiAgdGVtcGxhdGU6IGBcclxuICAgIDxkaXYgY2xhc3M9XCJjYXJkIG1iLTJcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cImNhcmQtaGVhZGVyIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtZW5kIGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwibWUtYXV0b1wiPnt7IGxhbmduYW1lIHx8ICdjb2RlJ319PC9zcGFuPlxyXG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLWxpZ2h0IGJ0bi1zbVwiIGNvcHktdG8tY2xpcGJvYXJkIFt0ZXh0XT1cImVuY29kZUNvZGVcIj5cclxuICAgICAgICAgIDxzdmcgZGF0YS10ZXN0aWQ9XCJnZWlzdC1pY29uXCIgaGVpZ2h0PVwiMTZcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIHZpZXdCb3g9XCIwIDAgMTYgMTZcIiB3aWR0aD1cIjE2XCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgc3R5bGU9XCJjb2xvcjogY3VycmVudGNvbG9yO1wiPjxwYXRoIGZpbGwtcnVsZT1cImV2ZW5vZGRcIiBjbGlwLXJ1bGU9XCJldmVub2RkXCIgZD1cIk0yLjc1IDAuNUMxLjc4MzUgMC41IDEgMS4yODM1IDEgMi4yNVY5Ljc1QzEgMTAuNzE2NSAxLjc4MzUgMTEuNSAyLjc1IDExLjVIMy43NUg0LjVWMTBIMy43NUgyLjc1QzIuNjExOTMgMTAgMi41IDkuODg4MDcgMi41IDkuNzVWMi4yNUMyLjUgMi4xMTE5MyAyLjYxMTkzIDIgMi43NSAySDguMjVDOC4zODgwNyAyIDguNSAyLjExMTkzIDguNSAyLjI1VjNIMTBWMi4yNUMxMCAxLjI4MzUgOS4yMTY1IDAuNSA4LjI1IDAuNUgyLjc1Wk03Ljc1IDQuNUM2Ljc4MzUgNC41IDYgNS4yODM1IDYgNi4yNVYxMy43NUM2IDE0LjcxNjUgNi43ODM1IDE1LjUgNy43NSAxNS41SDEzLjI1QzE0LjIxNjUgMTUuNSAxNSAxNC43MTY1IDE1IDEzLjc1VjYuMjVDMTUgNS4yODM1IDE0LjIxNjUgNC41IDEzLjI1IDQuNUg3Ljc1Wk03LjUgNi4yNUM3LjUgNi4xMTE5MyA3LjYxMTkzIDYgNy43NSA2SDEzLjI1QzEzLjM4ODEgNiAxMy41IDYuMTExOTMgMTMuNSA2LjI1VjEzLjc1QzEzLjUgMTMuODg4MSAxMy4zODgxIDE0IDEzLjI1IDE0SDcuNzVDNy42MTE5MyAxNCA3LjUgMTMuODg4MSA3LjUgMTMuNzVWNi4yNVpcIiBmaWxsPVwiY3VycmVudENvbG9yXCI+PC9wYXRoPjwvc3ZnPlxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxyXG4gICAgPC9kaXY+XHJcbiAgYCxcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgQ29kZUJsb2NrUmVmZXJlbmNlQ29tcG9uZW50IHtcclxuICBASW5wdXQoKSBsYW5nbmFtZSA9IFwiXCI7XHJcblxyXG4gIGVsID0gaW5qZWN0KEVsZW1lbnRSZWYpO1xyXG4gIGVuY29kZUNvZGUgPSAnJztcclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCkge1xyXG4gICAgLy8gZ2V0IHRoZSBjb2RlIGNvbnRlbnRcclxuICAgIGNvbnN0IGNvZGVFbCA9IHRoaXMuZWwubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKFwiY29kZVwiKTtcclxuICAgIGNvbnN0IGNvZGUgPSBjb2RlRWwgPyBjb2RlRWwudGV4dENvbnRlbnQgOiBcIlwiO1xyXG4gICAgdGhpcy5lbmNvZGVDb2RlID0gZW5jb2RlVVJJQ29tcG9uZW50KGNvZGUpO1xyXG4gIH1cclxufVxyXG4iXX0=
@@ -1,6 +1,6 @@
1
1
  import { Component, effect, input, Pipe, signal } from "@angular/core";
2
2
  import markdownit from "markdown-it";
3
- import * as Prism from 'prismjs';
3
+ import * as Prism from "prismjs";
4
4
  import "prismjs-components-importer/esm";
5
5
  import "prismjs/plugins/autoloader/prism-autoloader";
6
6
  import { markdownItCodeBlockPlugin } from "../markdown-it-plugins/code-block.plugin";
@@ -10,7 +10,7 @@ import { markdownItPageReferencePlugin } from "../markdown-it-plugins/page-refer
10
10
  import { markdownItReferencePlugin } from "../markdown-it-plugins/reference.plugin";
11
11
  import * as i0 from "@angular/core";
12
12
  import * as i1 from "@angular/platform-browser";
13
- const GROUPING_REGEX = /<([a-z]+)>[\s\S]*?<\/\1>/gm;
13
+ const GROUPING_REGEX = /<!--[\s\S]*-->|<[a-z0-9]+(?: [\S]*){1,}\/>|<([a-z0-9]+)(?: [\S]*?)*>[\s\S]*?<\/\1>/gim;
14
14
  export class SafeHtmlPipe {
15
15
  constructor(sanitizer) {
16
16
  this.sanitizer = sanitizer;
@@ -72,14 +72,14 @@ export class SmartRendererComponent {
72
72
  // no blocks, nothing to process
73
73
  if (!blocks || blocks.length === 0)
74
74
  return;
75
- if (blocks.length > 1) {
76
- this.localSliceIndex = html.lastIndexOf(blocks.at(-1) || "");
75
+ if (blocks.length > 2) {
76
+ this.localSliceIndex = html.lastIndexOf(blocks.at(-2) || "");
77
77
  this.lastSliceIndex += this.localSliceIndex;
78
78
  this.safe.update((v) => v + html.slice(0, this.localSliceIndex));
79
79
  this.processing.set(html.slice(this.localSliceIndex));
80
80
  }
81
81
  else {
82
- this.processing.set(blocks[0]);
82
+ this.processing.set(blocks.slice(0, 2).join(""));
83
83
  }
84
84
  }
85
85
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SmartRendererComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
@@ -100,4 +100,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
100
100
  standalone: true,
101
101
  }]
102
102
  }], ctorParameters: () => [] });
103
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnQtcmVuZGVyZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hc3Npc3RhbnQvY2hhdC9zbWFydC1yZW5kZXJlci9zbWFydC1yZW5kZXJlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUV2RSxPQUFPLFVBQVUsTUFBTSxhQUFhLENBQUM7QUFDckMsT0FBTyxLQUFLLEtBQUssTUFBTSxTQUFTLENBQUM7QUFDakMsT0FBTyxpQ0FBaUMsQ0FBQztBQUN6QyxPQUFPLDZDQUE2QyxDQUFDO0FBRXJELE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBQ3JGLE9BQU8sRUFBRSw4QkFBOEIsRUFBRSxNQUFNLCtDQUErQyxDQUFDO0FBQy9GLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQzFFLE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLDhDQUE4QyxDQUFDO0FBQzdGLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLHlDQUF5QyxDQUFDOzs7QUFFcEYsTUFBTSxjQUFjLEdBQUcsNEJBQTRCLENBQUM7QUFNcEQsTUFBTSxPQUFPLFlBQVk7SUFDdkIsWUFBb0IsU0FBdUI7UUFBdkIsY0FBUyxHQUFULFNBQVMsQ0FBYztJQUFHLENBQUM7SUFFL0MsU0FBUyxDQUFDLElBQUk7UUFDWixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDdEQsQ0FBQzsrR0FMVSxZQUFZOzZHQUFaLFlBQVk7OzRGQUFaLFlBQVk7a0JBSnhCLElBQUk7bUJBQUM7b0JBQ0osSUFBSSxFQUFFLFVBQVU7b0JBQ2hCLFVBQVUsRUFBRSxJQUFJO2lCQUNqQjs7QUFrQkQsTUFBTSxPQUFP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QUNqQyxDQUFDO0lBQ0gsQ0FBQzsrR0E5RFUsc0JBQXNCO21HQUF0QixzQkFBc0IsaVZBUHZCOzs7R0FHVCx1REFiVSxZQUFZOzs0RkFpQlosc0JBQXNCO2tCQVRsQyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxlQUFlO29CQUN6QixRQUFRLEVBQUU7OztHQUdUO29CQUNELE9BQU8sRUFBRSxDQUFDLFlBQVksQ0FBQztvQkFDdkIsVUFBVSxFQUFFLElBQUk7aUJBQ2pCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBlZmZlY3QsIGlucHV0LCBQaXBlLCBzaWduYWwgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgRG9tU2FuaXRpemVyIH0gZnJvbSBcIkBhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXJcIjtcbmltcG9ydCBtYXJrZG93bml0IGZyb20gXCJtYXJrZG93bi1pdFwiO1xuaW1wb3J0ICogYXMgUHJpc20gZnJvbSAncHJpc21qcyc7XG5pbXBvcnQgXCJwcmlzbWpzLWNvbXBvbmVudHMtaW1wb3J0ZXIvZXNtXCI7XG5pbXBvcnQgXCJwcmlzbWpzL3BsdWdpbnMvYXV0b2xvYWRlci9wcmlzbS1hdXRvbG9hZGVyXCI7XG5cbmltcG9ydCB7IG1hcmtkb3duSXRDb2RlQmxvY2tQbHVnaW4gfSBmcm9tIFwiLi4vbWFya2Rvd24taXQtcGx1Z2lucy9jb2RlLWJsb2NrLnBsdWdpblwiO1xuaW1wb3J0IHsgbWFya2Rvd25JdEltYWdlUmVmZXJlbmNlUGx1Z2luIH0gZnJvbSBcIi4uL21hcmtkb3duLWl0LXBsdWdpbnMvaW1hZ2UtcmVmZXJlbmNlLnBsdWdpblwiO1xuaW1wb3J0IHsgbWFya2Rvd25JdExpbmtQbHVnaW4gfSBmcm9tIFwiLi4vbWFya2Rvd24taXQtcGx1Z2lucy9saW5rLnBsdWdpblwiO1xuaW1wb3J0IHsgbWFya2Rvd25JdFBhZ2VSZWZlcmVuY2VQbHVnaW4gfSBmcm9tIFwiLi4vbWFya2Rvd24taXQtcGx1Z2lucy9wYWdlLXJlZmVyZW5jZS5wbHVnaW5cIjtcbmltcG9ydCB7IG1hcmtkb3duSXRSZWZlcmVuY2VQbHVnaW4gfSBmcm9tIFwiLi4vbWFya2Rvd24taXQtcGx1Z2lucy9yZWZlcmVuY2UucGx1Z2luXCI7XG5cbmNvbnN0IEdST1VQSU5HX1JFR0VYID0gLzwoW2Etel0rKT5bXFxzXFxTXSo/PFxcL1xcMT4vZ207XG5cbkBQaXBlKHtcbiAgbmFtZTogXCJzYWZlSHRtbFwiLFxuICBzdGFuZGFsb25lOiB0cnVlLFxufSlcbmV4cG9ydCBjbGFzcyBTYWZlSHRtbFBpcGUge1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHNhbml0aXplcjogRG9tU2FuaXRpemVyKSB7fVxuXG4gIHRyYW5zZm9ybShodG1sKSB7XG4gICAgcmV0dXJuIHRoaXMuc2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RIdG1sKGh0bWwpO1xuICB9XG59XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogXCJTbWFydFJlbmRlcmVyXCIsXG4gIHRlbXBsYXRlOiBgXG4gICAgPGRpdiBbaW5uZXJIVE1MXT1cInNhZmUoKSB8IHNhZmVIdG1sXCI+PC9kaXY+XG4gICAgPGRpdiBbaW5uZXJIVE1MXT1cInByb2Nlc3NpbmcoKSB8IHNhZmVIdG1sXCI+PC9kaXY+XG4gIGAsXG4gIGltcG9ydHM6IFtTYWZlSHRtbFBpcGVdLFxuICBzdGFuZGFsb25lOiB0cnVlLFxufSlcbmV4cG9ydCBjbGFzcyBTbWFydFJlbmRlcmVyQ29tcG9uZW50IHtcbiAgLy8gRW50aXJlIG1lc3NhZ2UgY29udGVudCB3aXRoIHRoZSBkZWx0YVxuICByZWFkb25seSBtZXNzYWdlID0gaW5wdXQ8c3RyaW5nPihcIlwiKTtcbiAgcmVhZG9ubHkgY29udGV4dCA9IGlucHV0PGFueSB8IG51bGw+KG51bGwpO1xuXG4gIHJlYWRvbmx5IHNhZmUgPSBzaWduYWw8c3RyaW5nPihcIlwiKTtcbiAgcmVhZG9ubHkgcHJvY2Vzc2luZyA9IHNpZ25hbDxzdHJpbmc+KFwiXCIpO1xuXG4gIC8vIEhpZ2ggb3JkZXIgbGFzdCBzbGljZSBpbmRleCwgaWUuIHdoZXJlIG5leHQgbWVzc2FnZSgpIHNob3VsZCBiZSB0cnVuY2F0ZWRcbiAgLy8gdG8gYXZvaWQgcmUtcmVuZGVyaW5nIHRoZSBzYW1lIGNvbnRlbnQuXG4gIHByaXZhdGUgbGFzdFNsaWNlSW5kZXggPSAwO1xuICAvLyBMb2NhbCBzbGljZSBpbmRleCB0byBrZWVwIHRyYWNrIG9mIHRoZSBjdXJyZW50IG1lc3NhZ2UncyBjb250ZW50XG4gIHByaXZhdGUgbG9jYWxTbGljZUluZGV4ID0gMDtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBlZmZlY3QoKCkgPT4gdGhpcy5tZXNzYWdlVXBkYXRlZCgpLCB7IGFsbG93U2lnbmFsV3JpdGVzOiB0cnVlIH0pO1xuICB9XG5cbiAgbWVzc2FnZVVwZGF0ZWQoKSB7XG4gICAgLy8gcmVuZGVyIGRlbHRhIGZyb20gbGFzdCBzbGljZWQgbWVzc2FnZVxuICAgIGNvbnN0IGh0bWwgPSBtYXJrZG93bml0KHtcbiAgICAgIGhpZ2hsaWdodDogZnVuY3Rpb24gKGNvZGUsIGxhbmcpIHtcbiAgICAgICAgaWYgKGxhbmcgJiYgUHJpc20ubGFuZ3VhZ2VzW2xhbmddKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IGhpZ2hsaWdodGVkQ29kZSA9IFByaXNtLmhpZ2hsaWdodChcbiAgICAgICAgICAgICAgY29kZSxcbiAgICAgICAgICAgICAgUHJpc20ubGFuZ3VhZ2VzW2xhbmddLFxuICAgICAgICAgICAgICBsYW5nXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgLy8gQnkgcmV0dXJuaW5nIGEgc3RyaW5nIHRoYXQgc3RhcnRzIHdpdGggPHByZT4sIHdlIGFyZSB0ZWxsaW5nIG1hcmtkb3duLWl0IHRoYXQgd2UgaGFuZGxlZCB0aGUgd3JhcHBpbmcuXG4gICAgICAgICAgICByZXR1cm4gYDxwcmUgY2xhc3M9XCJsYW5ndWFnZS0ke2xhbmd9XCI+PGNvZGUgY2xhc3M9XCJsYW5ndWFnZS0ke2xhbmd9XCI+JHtoaWdobGlnaHRlZENvZGV9PC9jb2RlPjwvcHJlPmA7XG4gICAgICAgICAgfSBjYXRjaCAoX18pIHtcbiAgICAgICAgICAgIC8vIGlmIHByaXNtIGZhaWxzLCBmYWxsIGJhY2sgdG8gbm8gaGlnaGxpZ2h0aW5nXG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gaWYgbm8gbGFuZywgb3IgcHJpc20gZmFpbHMsIGp1c3QgZXNjYXBlIHRoZSBjb2RlIGZvciBzYWZldHlcbiAgICAgICAgcmV0dXJuIGA8cHJlIGNsYXNzPVwibGFuZ3VhZ2UtY29kZVwiPjxjb2RlIGNsYXNzPVwibGFuZ3VhZ2UtY29kZVwiPiR7bWFya2Rvd25pdCgpLnV0aWxzLmVzY2FwZUh0bWwoY29kZSl9PC9jb2RlPjwvcHJlPmA7XG4gICAgICB9LFxuICAgIH0pXG4gICAgICAudXNlKG1hcmtkb3duSXRSZWZlcmVuY2VQbHVnaW4pXG4gICAgICAudXNlKG1hcmtkb3duSXRQYWdlUmVmZXJlbmNlUGx1Z2luKVxuICAgICAgLnVzZShtYXJrZG93bkl0SW1hZ2VSZWZlcmVuY2VQbHVnaW4pXG4gICAgICAudXNlKG1hcmtkb3duSXRMaW5rUGx1Z2luKVxuICAgICAgLnVzZShtYXJrZG93bkl0Q29kZUJsb2NrUGx1Z2luKVxuICAgICAgLnJlbmRlcih0aGlzLm1lc3NhZ2UoKSwgdGhpcy5jb250ZXh0KCkpXG4gICAgICA/LnNsaWNlKHRoaXMubGFzdFNsaWNlSW5kZXgpO1xuICAgIC8vIHNwbGl0IHRoZSBodG1sIGludG8gYmxvY2tzIG9mIGZpcnN0IGxldmVsIHRhZ3NcbiAgICBjb25zdCBibG9ja3MgPSBodG1sLm1hdGNoKEdST1VQSU5HX1JFR0VYKTtcblxuICAgIC8vIG5vIGJsb2Nrcywgbm90aGluZyB0byBwcm9jZXNzXG4gICAgaWYgKCFibG9ja3MgfHwgYmxvY2tzLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuXG4gICAgaWYgKGJsb2Nrcy5sZW5ndGggPiAxKSB7XG4gICAgICB0aGlzLmxvY2FsU2xpY2VJbmRleCA9IGh0bWwubGFzdEluZGV4T2YoYmxvY2tzLmF0KC0xKSB8fCBcIlwiKTtcbiAgICAgIHRoaXMubGFzdFNsaWNlSW5kZXggKz0gdGhpcy5sb2NhbFNsaWNlSW5kZXg7XG5cbiAgICAgIHRoaXMuc2FmZS51cGRhdGUoKHYpID0+IHYgKyBodG1sLnNsaWNlKDAsIHRoaXMubG9jYWxTbGljZUluZGV4KSk7XG4gICAgICB0aGlzLnByb2Nlc3Npbmcuc2V0KGh0bWwuc2xpY2UodGhpcy5sb2NhbFNsaWNlSW5kZXgpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5wcm9jZXNzaW5nLnNldChibG9ja3NbMF0pO1xuICAgIH1cbiAgfVxufVxuIl19
103
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnQtcmVuZGVyZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hc3Npc3RhbnQvY2hhdC9zbWFydC1yZW5kZXJlci9zbWFydC1yZW5kZXJlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUV2RSxPQUFPLFVBQVUsTUFBTSxhQUFhLENBQUM7QUFDckMsT0FBTyxLQUFLLEtBQUssTUFBTSxTQUFTLENBQUM7QUFDakMsT0FBTyxpQ0FBaUMsQ0FBQztBQUN6QyxPQUFPLDZDQUE2QyxDQUFDO0FBRXJELE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBQ3JGLE9BQU8sRUFBRSw4QkFBOEIsRUFBRSxNQUFNLCtDQUErQyxDQUFDO0FBQy9GLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQzFFLE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLDhDQUE4QyxDQUFDO0FBQzdGLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLHlDQUF5QyxDQUFDOzs7QUFFcEYsTUFBTSxjQUFjLEdBQ2xCLHVGQUF1RixDQUFDO0FBTTFGLE1BQU0sT0FBTyxZQUFZO0lBQ3ZCLFlBQW9CLFNBQXVCO1FBQXZCLGNBQVMsR0FBVCxTQUFTLENBQWM7SUFBRyxDQUFDO0lBRS9DLFNBQVMsQ0FBQyxJQUFJO1FBQ1osT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLHVCQUF1QixDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3RELENBQUM7K0dBTFUsWUFBWTs2R0FBWixZQUFZOzs0RkFBWixZQUFZO2tCQUp4QixJQUFJO21CQUFDO29CQUNKLElBQUksRUFBRSxVQUFVO29CQUNoQixVQUFVLEVBQUUsSUFBSTtpQkFDakI7O0FBa0JELE1BQU0sT0FB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LENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ25ELENBQUM7SUFDSCxDQUFDOytHQWpFVSxzQkFBc0I7bUdBQXRCLHNCQUFzQixpVkFQdkI7OztHQUdULHVEQWJVLFlBQVk7OzRGQWlCWixzQkFBc0I7a0JBVGxDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLGVBQWU7b0JBQ3pCLFFBQVEsRUFBRTs7O0dBR1Q7b0JBQ0QsT0FBTyxFQUFFLENBQUMsWUFBWSxDQUFDO29CQUN2QixVQUFVLEVBQUUsSUFBSTtpQkFDakIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIGVmZmVjdCwgaW5wdXQsIFBpcGUsIHNpZ25hbCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBEb21TYW5pdGl6ZXIgfSBmcm9tIFwiQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3NlclwiO1xuaW1wb3J0IG1hcmtkb3duaXQgZnJvbSBcIm1hcmtkb3duLWl0XCI7XG5pbXBvcnQgKiBhcyBQcmlzbSBmcm9tIFwicHJpc21qc1wiO1xuaW1wb3J0IFwicHJpc21qcy1jb21wb25lbnRzLWltcG9ydGVyL2VzbVwiO1xuaW1wb3J0IFwicHJpc21qcy9wbHVnaW5zL2F1dG9sb2FkZXIvcHJpc20tYXV0b2xvYWRlclwiO1xuXG5pbXBvcnQgeyBtYXJrZG93bkl0Q29kZUJsb2NrUGx1Z2luIH0gZnJvbSBcIi4uL21hcmtkb3duLWl0LXBsdWdpbnMvY29kZS1ibG9jay5wbHVnaW5cIjtcbmltcG9ydCB7IG1hcmtkb3duSXRJbWFnZVJlZmVyZW5jZVBsdWdpbiB9IGZyb20gXCIuLi9tYXJrZG93bi1pdC1wbHVnaW5zL2ltYWdlLXJlZmVyZW5jZS5wbHVnaW5cIjtcbmltcG9ydCB7IG1hcmtkb3duSXRMaW5rUGx1Z2luIH0gZnJvbSBcIi4uL21hcmtkb3duLWl0LXBsdWdpbnMvbGluay5wbHVnaW5cIjtcbmltcG9ydCB7IG1hcmtkb3duSXRQYWdlUmVmZXJlbmNlUGx1Z2luIH0gZnJvbSBcIi4uL21hcmtkb3duLWl0LXBsdWdpbnMvcGFnZS1yZWZlcmVuY2UucGx1Z2luXCI7XG5pbXBvcnQgeyBtYXJrZG93bkl0UmVmZXJlbmNlUGx1Z2luIH0gZnJvbSBcIi4uL21hcmtkb3duLWl0LXBsdWdpbnMvcmVmZXJlbmNlLnBsdWdpblwiO1xuXG5jb25zdCBHUk9VUElOR19SRUdFWCA9XG4gIC88IS0tW1xcc1xcU10qLS0+fDxbYS16MC05XSsoPzogW1xcU10qKXsxLH1cXC8+fDwoW2EtejAtOV0rKSg/OiBbXFxTXSo/KSo+W1xcc1xcU10qPzxcXC9cXDE+L2dpbTtcblxuQFBpcGUoe1xuICBuYW1lOiBcInNhZmVIdG1sXCIsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG59KVxuZXhwb3J0IGNsYXNzIFNhZmVIdG1sUGlwZSB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgc2FuaXRpemVyOiBEb21TYW5pdGl6ZXIpIHt9XG5cbiAgdHJhbnNmb3JtKGh0bWwpIHtcbiAgICByZXR1cm4gdGhpcy5zYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdEh0bWwoaHRtbCk7XG4gIH1cbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiBcIlNtYXJ0UmVuZGVyZXJcIixcbiAgdGVtcGxhdGU6IGBcbiAgICA8ZGl2IFtpbm5lckhUTUxdPVwic2FmZSgpIHwgc2FmZUh0bWxcIj48L2Rpdj5cbiAgICA8ZGl2IFtpbm5lckhUTUxdPVwicHJvY2Vzc2luZygpIHwgc2FmZUh0bWxcIj48L2Rpdj5cbiAgYCxcbiAgaW1wb3J0czogW1NhZmVIdG1sUGlwZV0sXG4gIHN0YW5kYWxvbmU6IHRydWUsXG59KVxuZXhwb3J0IGNsYXNzIFNtYXJ0UmVuZGVyZXJDb21wb25lbnQge1xuICAvLyBFbnRpcmUgbWVzc2FnZSBjb250ZW50IHdpdGggdGhlIGRlbHRhXG4gIHJlYWRvbmx5IG1lc3NhZ2UgPSBpbnB1dDxzdHJpbmc+KFwiXCIpO1xuICByZWFkb25seSBjb250ZXh0ID0gaW5wdXQ8YW55IHwgbnVsbD4obnVsbCk7XG5cbiAgcmVhZG9ubHkgc2FmZSA9IHNpZ25hbDxzdHJpbmc+KFwiXCIpO1xuICByZWFkb25seSBwcm9jZXNzaW5nID0gc2lnbmFsPHN0cmluZz4oXCJcIik7XG5cbiAgLy8gSGlnaCBvcmRlciBsYXN0IHNsaWNlIGluZGV4LCBpZS4gd2hlcmUgbmV4dCBtZXNzYWdlKCkgc2hvdWxkIGJlIHRydW5jYXRlZFxuICAvLyB0byBhdm9pZCByZS1yZW5kZXJpbmcgdGhlIHNhbWUgY29udGVudC5cbiAgcHJpdmF0ZSBsYXN0U2xpY2VJbmRleCA9IDA7XG4gIC8vIExvY2FsIHNsaWNlIGluZGV4IHRvIGtlZXAgdHJhY2sgb2YgdGhlIGN1cnJlbnQgbWVzc2FnZSdzIGNvbnRlbnRcbiAgcHJpdmF0ZSBsb2NhbFNsaWNlSW5kZXggPSAwO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGVmZmVjdCgoKSA9PiB0aGlzLm1lc3NhZ2VVcGRhdGVkKCksIHsgYWxsb3dTaWduYWxXcml0ZXM6IHRydWUgfSk7XG4gIH1cblxuICBtZXNzYWdlVXBkYXRlZCgpIHtcbiAgICAvLyByZW5kZXIgZGVsdGEgZnJvbSBsYXN0IHNsaWNlZCBtZXNzYWdlXG4gICAgY29uc3QgaHRtbDogc3RyaW5nID0gbWFya2Rvd25pdCh7XG4gICAgICBoaWdobGlnaHQ6IGZ1bmN0aW9uIChjb2RlLCBsYW5nKSB7XG4gICAgICAgIGlmIChsYW5nICYmIFByaXNtLmxhbmd1YWdlc1tsYW5nXSkge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBoaWdobGlnaHRlZENvZGUgPSBQcmlzbS5oaWdobGlnaHQoXG4gICAgICAgICAgICAgIGNvZGUsXG4gICAgICAgICAgICAgIFByaXNtLmxhbmd1YWdlc1tsYW5nXSxcbiAgICAgICAgICAgICAgbGFuZ1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIC8vIEJ5IHJldHVybmluZyBhIHN0cmluZyB0aGF0IHN0YXJ0cyB3aXRoIDxwcmU+LCB3ZSBhcmUgdGVsbGluZyBtYXJrZG93bi1pdCB0aGF0IHdlIGhhbmRsZWQgdGhlIHdyYXBwaW5nLlxuICAgICAgICAgICAgcmV0dXJuIGA8cHJlIGNsYXNzPVwibGFuZ3VhZ2UtJHtsYW5nfVwiPjxjb2RlIGNsYXNzPVwibGFuZ3VhZ2UtJHtsYW5nfVwiPiR7aGlnaGxpZ2h0ZWRDb2RlfTwvY29kZT48L3ByZT5gO1xuICAgICAgICAgIH0gY2F0Y2ggKF9fKSB7XG4gICAgICAgICAgICAvLyBpZiBwcmlzbSBmYWlscywgZmFsbCBiYWNrIHRvIG5vIGhpZ2hsaWdodGluZ1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGlmIG5vIGxhbmcsIG9yIHByaXNtIGZhaWxzLCBqdXN0IGVzY2FwZSB0aGUgY29kZSBmb3Igc2FmZXR5XG4gICAgICAgIHJldHVybiBgPHByZSBjbGFzcz1cImxhbmd1YWdlLWNvZGVcIj48Y29kZSBjbGFzcz1cImxhbmd1YWdlLWNvZGVcIj4ke21hcmtkb3duaXQoKS51dGlscy5lc2NhcGVIdG1sKFxuICAgICAgICAgIGNvZGVcbiAgICAgICAgKX08L2NvZGU+PC9wcmU+YDtcbiAgICAgIH0sXG4gICAgfSlcbiAgICAgIC51c2UobWFya2Rvd25JdFJlZmVyZW5jZVBsdWdpbilcbiAgICAgIC51c2UobWFya2Rvd25JdFBhZ2VSZWZlcmVuY2VQbHVnaW4pXG4gICAgICAudXNlKG1hcmtkb3duSXRJbWFnZVJlZmVyZW5jZVBsdWdpbilcbiAgICAgIC51c2UobWFya2Rvd25JdExpbmtQbHVnaW4pXG4gICAgICAudXNlKG1hcmtkb3duSXRDb2RlQmxvY2tQbHVnaW4pXG4gICAgICAucmVuZGVyKHRoaXMubWVzc2FnZSgpLCB0aGlzLmNvbnRleHQoKSlcbiAgICAgID8uc2xpY2UodGhpcy5sYXN0U2xpY2VJbmRleCk7XG5cbiAgICAvLyBzcGxpdCB0aGUgaHRtbCBpbnRvIGJsb2NrcyBvZiBmaXJzdCBsZXZlbCB0YWdzXG4gICAgY29uc3QgYmxvY2tzID0gaHRtbC5tYXRjaChHUk9VUElOR19SRUdFWCk7XG5cbiAgICAvLyBubyBibG9ja3MsIG5vdGhpbmcgdG8gcHJvY2Vzc1xuICAgIGlmICghYmxvY2tzIHx8IGJsb2Nrcy5sZW5ndGggPT09IDApIHJldHVybjtcblxuICAgIGlmIChibG9ja3MubGVuZ3RoID4gMikge1xuICAgICAgdGhpcy5sb2NhbFNsaWNlSW5kZXggPSBodG1sLmxhc3RJbmRleE9mKGJsb2Nrcy5hdCgtMikgfHwgXCJcIik7XG4gICAgICB0aGlzLmxhc3RTbGljZUluZGV4ICs9IHRoaXMubG9jYWxTbGljZUluZGV4O1xuXG4gICAgICB0aGlzLnNhZmUudXBkYXRlKCh2KSA9PiB2ICsgaHRtbC5zbGljZSgwLCB0aGlzLmxvY2FsU2xpY2VJbmRleCkpO1xuICAgICAgdGhpcy5wcm9jZXNzaW5nLnNldChodG1sLnNsaWNlKHRoaXMubG9jYWxTbGljZUluZGV4KSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucHJvY2Vzc2luZy5zZXQoYmxvY2tzLnNsaWNlKDAsIDIpLmpvaW4oXCJcIikpO1xuICAgIH1cbiAgfVxufVxuIl19