ngx-rendering-service-lib 0.0.66862 → 0.0.66863
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.
|
@@ -104,8 +104,12 @@ export class RenderComponent {
|
|
|
104
104
|
console.info("setting assetUrl to: " + this.assetUrl + "");
|
|
105
105
|
this.configuration.assetsUrl = this.assetUrl;
|
|
106
106
|
}
|
|
107
|
+
if (!this.activateServiceWorker) {
|
|
108
|
+
this.serviceWorkerReady = true;
|
|
109
|
+
this.loadData.next();
|
|
110
|
+
}
|
|
107
111
|
// await firstValueFrom(this.translationsService.initialize())
|
|
108
|
-
if (
|
|
112
|
+
if ('serviceWorker' in navigator) {
|
|
109
113
|
const reg = await navigator.serviceWorker.getRegistrations();
|
|
110
114
|
await Promise.all(reg?.map((r) => r.unregister()));
|
|
111
115
|
const serviceWorkerUrl = this.serviceWorkerUrl ?? (this.platformLocation.getBaseHrefFromDOM() + 'edu-service-worker.js');
|
|
@@ -134,7 +138,7 @@ export class RenderComponent {
|
|
|
134
138
|
console.info('Service Worker controlling this page.');
|
|
135
139
|
});
|
|
136
140
|
}
|
|
137
|
-
else
|
|
141
|
+
else {
|
|
138
142
|
console.warn('Service worker API not available');
|
|
139
143
|
}
|
|
140
144
|
}
|
|
@@ -274,4 +278,4 @@ i0.ɵɵngDeclareClassMetadataAsync({ minVersion: "18.0.0", version: "18.2.6", ng
|
|
|
274
278
|
}], assetUrl: [{
|
|
275
279
|
type: Input
|
|
276
280
|
}] } }) });
|
|
277
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVuZGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvcmVuZGVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uL3NyYy9saWIvcmVuZGVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxTQUFTLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBcUIsUUFBUSxFQUFnQixNQUFNLGVBQWUsQ0FBQztBQUNuRyxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFRbkQsT0FBTyxFQUFDLGVBQWUsRUFBRSxZQUFZLEVBQUUsY0FBYyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUU1RyxPQUFPLEVBQUMsa0JBQWtCLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQztBQUUxRCxPQUFPLEVBQUMsd0JBQXdCLEVBQUMsTUFBTSxvQ0FBb0MsQ0FBQztBQUM1RSxPQUFPLEVBQUMsbUJBQW1CLEVBQU8sTUFBTSxxQkFBcUIsQ0FBQztBQUM5RCxPQUFPLEVBQUMsb0JBQW9CLEVBQUMsTUFBTSxnQ0FBZ0MsQ0FBQztBQU1wRSxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFPdEMsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFDckQsT0FBTyxFQUFDLGtCQUFrQixFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFFdEQsT0FBTyxFQUFDLDRCQUE0QixFQUFtQyxNQUFNLHdDQUF3QyxDQUFDOzs7Ozs7OztBQTZCdEgsTUFBTSxPQUFPLGVBQWU7SUFhMUIsWUFDVSx1QkFBdUQsRUFDdkQsd0JBQWtELEVBQ2xELGlCQUFvQyxFQUNwQyxnQkFBa0MsRUFDZSxhQUErQztRQUpoRyw0QkFBdUIsR0FBdkIsdUJBQXVCLENBQWdDO1FBQ3ZELDZCQUF3QixHQUF4Qix3QkFB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ekMsT0FBTzswQkFBZixLQUFLO29CQUNHLElBQUk7MEJBQVosS0FBSztvQkFDRyxnQkFBZ0I7MEJBQXhCLEtBQUs7b0JBQ0cscUJBQXFCOzBCQUE3QixLQUFLO29CQUNHLFFBQVE7MEJBQWhCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NvbXBvbmVudCwgSW5qZWN0LCBJbnB1dCwgT25DaGFuZ2VzLCBPbkluaXQsIE9wdGlvbmFsLCBTaW1wbGVDaGFuZ2VzfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7UmVuZGVyaW5nTW9kdWxlfSBmcm9tICcuL3JlbmRlcmluZy5tb2R1bGUnO1xuaW1wb3J0IHtcbiAgSm9iSW5mb0NvbnRyb2xsZXJTZXJ2aWNlLFxuICBKb2JJbmZvUmVwbHksXG4gIFJlbmRlckNvbnRyb2xsZXJXcmFwcGVyU2VydmljZSxcbiAgUmVuZGVyRGF0YVJlcXVlc3RXaXRoVG9rZW4sXG4gIFJlbmRlckRhdGFSZXNwb25zZVxufSBmcm9tICduZ3gtcmVuZGVyaW5nLXNlcnZpY2UtYXBpJztcbmltcG9ydCB7QmVoYXZpb3JTdWJqZWN0LCBkZWJvdW5jZVRpbWUsIGZpcnN0VmFsdWVGcm9tLCBpbnRlcnZhbCwgU3ViamVjdCwgc3dpdGNoTWFwLCB0YWtlVW50aWx9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtJbWFnZUNvbXBvbmVudH0gZnJvbSAnLi9tb2R1bGUvaW1hZ2UvaW1hZ2UuY29tcG9uZW50JztcbmltcG9ydCB7UmVuZGVyaW5nQXBpTW9kdWxlfSBmcm9tICcuL3JlbmRlcmluZy1hcGkubW9kdWxlJztcbmltcG9ydCB7VmlkZW9Db21wb25lbnR9IGZyb20gJy4vbW9kdWxlL3ZpZGVvL3ZpZGVvLmNvbXBvbmVudCc7XG5pbXBvcnQge01hdFByb2dyZXNzU3Bpbm5lck1vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvcHJvZ3Jlc3Mtc3Bpbm5lcic7XG5pbXBvcnQge0VkdVNoYXJpbmdBcGlNb2R1bGUsIE5vZGV9IGZyb20gJ25neC1lZHUtc2hhcmluZy1hcGknO1xuaW1wb3J0IHtNYXRQcm9ncmVzc0Jhck1vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvcHJvZ3Jlc3MtYmFyJztcbmltcG9ydCB7QXNzZXRTdGF0ZUl0ZW0sIFJlbmRlckRhdGF9IGZyb20gJy4vZHRvL1JlbmRlckRhdGEnO1xuaW1wb3J0IHtQZGZDb21wb25lbnR9IGZyb20gJy4vbW9kdWxlL3BkZi9wZGYuY29tcG9uZW50JztcbmltcG9ydCB7VXJsQ29tcG9uZW50fSBmcm9tICcuL21vZHVsZS91cmwvdXJsLmNvbXBvbmVudCc7XG5pbXBvcnQge0VkdUh0bWxDb21wb25lbnR9IGZyb20gJy4vbW9kdWxlL2VkdWh0bWwvZWR1SHRtbC5jb21wb25lbnQnO1xuaW1wb3J0IHtNb2R1bGVJbmZvU2VydmljZX0gZnJvbSAnLi4vbW9kdWxlLWluZm8uc2VydmljZSc7XG5pbXBvcnQge2ZpbHRlcn0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtQbGF0Zm9ybUxvY2F0aW9ufSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtEZWZhdWx0Q29tcG9uZW50fSBmcm9tICcuL21vZHVsZS9kZWZhdWx0L2RlZmF1bHQuY29tcG9uZW50JztcbmltcG9ydCB7RnJvbnRlbmRNb2R1bGVDb25maWd9IGZyb20gJy4vZHRvL0Zyb250ZW5kTW9kdWxlQ29uZmlnJztcbmltcG9ydCB7QXVkaW9Db21wb25lbnR9IGZyb20gJy4vbW9kdWxlL2F1ZGlvL2F1ZGlvLmNvbXBvbmVudCc7XG5pbXBvcnQge0JpbmRlckNvbXBvbmVudH0gZnJvbSAnLi9tb2R1bGUvYmluZGVyL2JpbmRlci5jb21wb25lbnQnO1xuaW1wb3J0IHtEZGJDb21wb25lbnR9IGZyb20gJy4vbW9kdWxlL2RkYi9kZGIuY29tcG9uZW50JztcbmltcG9ydCB7VHJhbnNsYXRlU2VydmljZX0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQge0VkdVNoYXJpbmdVaU1vZHVsZX0gZnJvbSAnbmd4LWVkdS1zaGFyaW5nLXVpJztcbmltcG9ydCB7RXJyb3JDb21wb25lbnR9IGZyb20gJy4vbW9kdWxlL2Vycm9yL2Vycm9yLmNvbXBvbmVudCc7XG5pbXBvcnQge1JFTkRFUklOR19TRVJWSUNFX0xJQl9DT05GSUcsIFJlbmRlcmluZ1NlcnZpY2VMaWJDb25maWd1cmF0aW9ufSBmcm9tIFwiLi4vcmVuZGVyaW5nLXNlcnZpY2UtbGliLWNvbmZpZ3VyYXRpb25cIjtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAncnMtcm9vdCcsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBSZW5kZXJpbmdBcGlNb2R1bGUsXG4gICAgUmVuZGVyaW5nTW9kdWxlLFxuICAgIEltYWdlQ29tcG9uZW50LFxuICAgIFZpZGVvQ29tcG9uZW50LFxuICAgIE1hdFByb2dyZXNzU3Bpbm5lck1vZHVsZSxcbiAgICBNYXRQcm9ncmVzc0Jhck1vZHVsZSxcbiAgICBQZGZDb21wb25lbnQsXG4gICAgVXJsQ29tcG9uZW50LFxuICAgIEVkdUh0bWxDb21wb25lbnQsXG4gICAgRGVmYXVsdENvbXBvbmVudCxcbiAgICBBdWRpb0NvbXBvbmVudCxcbiAgICBCaW5kZXJDb21wb25lbnQsXG4gICAgRGRiQ29tcG9uZW50LFxuICAgIEVkdVNoYXJpbmdBcGlNb2R1bGUsXG4gICAgRWR1U2hhcmluZ1VpTW9kdWxlLFxuICAgIEVycm9yQ29tcG9uZW50LFxuICBdLFxuICBwcm92aWRlcnM6IFtcbiAgICBUcmFuc2xhdGVTZXJ2aWNlXG4gIF0sXG4gIHRlbXBsYXRlVXJsOiAnLi9yZW5kZXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybDogJy4vcmVuZGVyLmNvbXBvbmVudC5zY3NzJ1xufSlcbmV4cG9ydCBjbGFzcyBSZW5kZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkNoYW5nZXMsIE9uSW5pdCB7XG4gIEBJbnB1dCgpIHJlcXVlc3Q6IFJlbmRlckRhdGFSZXF1ZXN0V2l0aFRva2VuIHwgdW5kZWZpbmVkO1xuICBASW5wdXQoKSBub2RlOiBOb2RlIHwgdW5kZWZpbmVkO1xuICBASW5wdXQoKSBzZXJ2aWNlV29ya2VyVXJsOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIEBJbnB1dCgpIGFjdGl2YXRlU2VydmljZVdvcmtlcjogYm9vbGVhbiA9IHRydWU7XG4gIEBJbnB1dCgpIGFzc2V0VXJsOiBzdHJpbmcgPSAnJztcbiAgc2VydmljZVdvcmtlclJlYWR5ID0gZmFsc2U7XG4gIGxvYWREYXRhID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgcmVuZGVyRGF0YSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFJlbmRlckRhdGEgfCBudWxsPihudWxsKTtcbiAgZmluaXNoZWQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICBzb21lQnV0Tm90QWxsRmluaXNoZWQgPSBuZXcgU3ViamVjdDxCb29sZWFuPigpXG4gIHByb2dyZXNzJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8eyBtb2R1bGU6IHN0cmluZywgcHJvZ3Jlc3M/OiBudW1iZXIgfSB8IG51bGw+KG51bGwpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVuZGVyQ29udHJvbGxlclNlcnZpY2U6IFJlbmRlckNvbnRyb2xsZXJXcmFwcGVyU2VydmljZSxcbiAgICBwcml2YXRlIGpvYkluZm9Db250cm9sbGVyU2VydmljZTogSm9iSW5mb0NvbnRyb2xsZXJTZXJ2aWNlLFxuICAgIHByaXZhdGUgbW9kdWxlSW5mb1NlcnZpY2U6IE1vZHVsZUluZm9TZXJ2aWNlLFxuICAgIHByaXZhdGUgcGxhdGZvcm1Mb2NhdGlvbjogUGxhdGZvcm1Mb2NhdGlvbixcbiAgICBAT3B0aW9uYWwoKSBASW5qZWN0KFJFTkRFUklOR19TRVJWSUNFX0xJQl9DT05GSUcpIHB1YmxpYyBjb25maWd1cmF0aW9uOiBSZW5kZXJpbmdTZXJ2aWNlTGliQ29uZmlndXJhdGlvbixcbiAgKSB7XG4gICAgdGhpcy5sb2FkRGF0YS5waXBlKFxuICAgICAgZmlsdGVyKCgpID0+IHRoaXMubm9kZSAhPT0gdW5kZWZpbmVkICYmIHRoaXMuc2VydmljZVdvcmtlclJlYWR5KSxcbiAgICAgIGRlYm91bmNlVGltZSgxMCksXG4gICAgICBzd2l0Y2hNYXAoKCkgPT4ge1xuICAgICAgICAvLyBzdWJzY3JpYmUgZXJyb3IgaGFuZGxpbmdcbiAgICAgICAgcmV0dXJuIHRoaXMuY2hlY2tNb2R1bGUoKVxuICAgICAgfSlcbiAgICApLnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiBhc3luYyAoZnJvbnRlbmRNb2R1bGUpID0+IHtcbiAgICAgICAgLy8gTm8gZnVydGhlciBjYWxscyB0byByczIgbmVjZXNzYXJ5IGlmIHdlIGhhdmUgYSBmcm9udGVuZCBvbmx5IG1vZHVsZVxuICAgICAgICBpZiAoZnJvbnRlbmRNb2R1bGUgIT09IG51bGwpIHtcbiAgICAgICAgICBjb25zdCBkYXRhOiBSZW5kZXJEYXRhID0ge1xuICAgICAgICAgICAgbW9kdWxlOiBmcm9udGVuZE1vZHVsZS5tb2R1bGUsXG4gICAgICAgICAgICBmcm9udGVuZE1vZHVsZUNvbmZpZzogZnJvbnRlbmRNb2R1bGVcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5yZW5kZXJEYXRhJC5uZXh0KGRhdGEpXG4gICAgICAgICAgdGhpcy5maW5pc2hlZC5uZXh0KClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgcmVuZGVyUmVzcG9uc2VEYXRhID0gYXdhaXQgZmlyc3RWYWx1ZUZyb20odGhpcy5yZW5kZXJDb250cm9sbGVyU2VydmljZS5nZXRSZW5kZXJEYXRhVG9rZW4odGhpcy5yZXF1ZXN0ISEpKVxuICAgICAgICAgICAgLy8gQ2FzZSAxOiBubyBqb2IgcmV0dXJuZWQgPT4gbm8gcG9sbGluZyBuZWVkZWRcbiAgICAgICAgICAgIGlmIChyZW5kZXJSZXNwb25zZURhdGEuam9iSWQgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgdGhpcy5oYW5kbGVSZW5kZXJpbmdSZXNwb25zZVdpdGhvdXRKb2IocmVuZGVyUmVzcG9uc2VEYXRhKVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdGhpcy5wcm9ncmVzcyQubmV4dCh7bW9kdWxlOiByZW5kZXJSZXNwb25zZURhdGEubW9kdWxlID8/ICcnfSk7XG4gICAgICAgICAgICAgIGludGVydmFsKDUwMCkucGlwZShcbiAgICAgICAgICAgICAgICB0YWtlVW50aWwodGhpcy5maW5pc2hlZCksXG4gICAgICAgICAgICAgICAgc3dpdGNoTWFwKCgpID0+IHRoaXMuam9iSW5mb0NvbnRyb2xsZXJTZXJ2aWNlLmdldEpvYkluZm8oe2pvYklkOiByZW5kZXJSZXNwb25zZURhdGEuam9iSWQhIX0pLnBpcGUoKSksXG4gICAgICAgICAgICAgICkuc3Vic2NyaWJlKHtcbiAgICAgICAgICAgICAgICBuZXh0OiBhc3luYyAoam9iSW5mbykgPT4ge1xuICAgICAgICAgICAgICAgICAgLy8gU29tZSwgYnV0IG5vdCBhbGwsIGpvYnMgYXJlIGluIGEgZmluYWwgc3RhdHVzICh0aGlzIG1lYW5zIHNvbWUgYXJlIHN0aWxsIFFVRVVFRCBvciBQUk9DRVNTSU5HKVxuICAgICAgICAgICAgICAgICAgaWYgKGpvYkluZm8uam9icy5zb21lKGogPT4gai5zdGF0dXMgPT09ICdGSU5JU0hFRCcpICYmIGpvYkluZm8uc3RhdHVzICE9PSAnRklOSVNIRUQnKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlSm9iSW5mb1dpdGhTdWJKb2JzSW5Qcm9ncmVzcyhyZW5kZXJSZXNwb25zZURhdGEsIGpvYkluZm8pXG4gICAgICAgICAgICAgICAgICAgIC8vIG1haW4gam9iIGZpbmlzaGVkIG9yIHBhcnRpYWxseSBmYWlsZWRcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoam9iSW5mby5zdGF0dXMgPT09ICdGSU5JU0hFRCcgfHwgam9iSW5mby5zdGF0dXMgPT09ICdQQVJUSUFMTFlfRkFJTEVEJykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZUZpbmlzaGVkT3JQYXJ0aWFsSm9iSW5mbyhyZW5kZXJSZXNwb25zZURhdGEsIGpvYkluZm8pXG4gICAgICAgICAgICAgICAgICAgIC8vIE1haW4gam9iIGZhaWxlZCA9PiBubyBtb2R1bGUgYnV0IGVycm9yIHBhZ2VcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoam9iSW5mby5zdGF0dXMgPT09ICdGQUlMRUQnKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlRmFpbGVkTWFpbkpvYihqb2JJbmZvKVxuICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gbm8gZmluaXNoZWQgam9icyAtPiBzaG93IGVpdGhlciBvbmUgcHJvZ3Jlc3MgYmFyIHdpdGggcmFjZSBsZWFkZXIgKHByb2dyZXNzIDAtMTAwKVxuICAgICAgICAgICAgICAgICAgICAvLyBvciBxdWV1ZSBwb3NpdGlvbiAocHJvZ3Jlc3MgKC1pbmYsLTFdKVxuICAgICAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZU1haW5Kb2JXaXRoTm9TdWJKb2JJbkZpbmFsU3RhdHVzKGpvYkluZm8pXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBlcnJvcjogZXJyb3IgPT4ge1xuICAgICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVBcGlFcnJvcihlcnJvcilcbiAgICAgICAgICAgICAgICB9fSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlQXBpRXJyb3IoZXJyb3IpXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgZXJyb3I6IChlcnJvcikgPT4ge1xuICAgICAgICB0aGlzLmhhbmRsZUFwaUVycm9yKGVycm9yKVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgaGFuZGxlQXBpRXJyb3IoZXJyb3I6IGFueSkge1xuICAgIGNvbnN0IHB1YmxpY01lc3NhZ2UgPSBlcnJvci5lcnJvci51c2VyTWVzc2FnZSA/PyAnR0VORVJJQ19FUlJPUl9NRVNTQUdFJ1xuICAgIGNvbnN0IGRhdGE6IFJlbmRlckRhdGEgPSB7XG4gICAgICBtb2R1bGU6ICdFUlJPUicsXG4gICAgICBwdWJsaWNFcnJvck1lc3NhZ2U6IHB1YmxpY01lc3NhZ2VcbiAgICB9XG4gICAgdGhpcy5yZW5kZXJEYXRhJC5uZXh0KGRhdGEpXG4gICAgdGhpcy5maW5pc2hlZC5uZXh0KClcbiAgfVxuXG4gIGFzeW5jIG5nT25Jbml0KCkge1xuICAgIGlmICh0aGlzLmFzc2V0VXJsICE9PSAnJykge1xuICAgICAgY29uc29sZS5pbmZvKFwic2V0dGluZyBhc3NldFVybCB0bzogXCIgKyB0aGlzLmFzc2V0VXJsICsgXCJcIik7XG4gICAgICB0aGlzLmNvbmZpZ3VyYXRpb24uYXNzZXRzVXJsID0gdGhpcy5hc3NldFVybDtcbiAgICB9XG4gICAgLy8gYXdhaXQgZmlyc3RWYWx1ZUZyb20odGhpcy50cmFuc2xhdGlvbnNTZXJ2aWNlLmluaXRpYWxpemUoKSlcbiAgICBpZiAodGhpcy5hY3RpdmF0ZVNlcnZpY2VXb3JrZXIgJiYgJ3NlcnZpY2VXb3JrZXInIGluIG5hdmlnYXRvcikge1xuICAgICAgY29uc3QgcmVnID0gYXdhaXQgbmF2aWdhdG9yLnNlcnZpY2VXb3JrZXIuZ2V0UmVnaXN0cmF0aW9ucygpO1xuICAgICAgYXdhaXQgUHJvbWlzZS5hbGwocmVnPy5tYXAoKHI6IFNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb24pID0+IHIudW5yZWdpc3RlcigpKSk7XG4gICAgICBjb25zdCBzZXJ2aWNlV29ya2VyVXJsID0gdGhpcy5zZXJ2aWNlV29ya2VyVXJsID8/ICh0aGlzLnBsYXRmb3JtTG9jYXRpb24uZ2V0QmFzZUhyZWZGcm9tRE9NKCkgKyAnZWR1LXNlcnZpY2Utd29ya2VyLmpzJyk7XG4gICAgICBjb25zdCBzY29wZSA9IHRoaXMuc2VydmljZVdvcmtlclVybCA/ICcvJyA6IHRoaXMucGxhdGZvcm1Mb2NhdGlvbi5nZXRCYXNlSHJlZkZyb21ET00oKTtcbiAgICAgIGNvbnN0IHJlZ2lzdHJhdGlvbiA9IGF3YWl0IG5hdmlnYXRvci5zZXJ2aWNlV29ya2VyLnJlZ2lzdGVyKHNlcnZpY2VXb3JrZXJVcmwsIHtcbiAgICAgICAgc2NvcGU6IHNjb3BlXG4gICAgICB9KTtcbiAgICAgIGlmIChyZWdpc3RyYXRpb24ud2FpdGluZykge1xuICAgICAgICByZWdpc3RyYXRpb24ud2FpdGluZy5wb3N0TWVzc2FnZSh7dHlwZTogJ1NLSVBfV0FJVElORyd9KTtcbiAgICAgIH1cbiAgICAgIHRoaXMuc2VydmljZVdvcmtlclJlYWR5ID0gdHJ1ZTtcbiAgICAgIHRoaXMubG9hZERhdGEubmV4dCgpO1xuICAgICAgcmVnaXN0cmF0aW9uLm9udXBkYXRlZm91bmQgPSAoKSA9PiB7XG4gICAgICAgIGNvbnN0IG5ld1dvcmtlciA9IHJlZ2lzdHJhdGlvbi5pbnN0YWxsaW5nO1xuICAgICAgICBpZiAobmV3V29ya2VyKSB7XG4gICAgICAgICAgbmV3V29ya2VyLm9uc3RhdGVjaGFuZ2UgPSAoKSA9PiB7XG4gICAgICAgICAgICBpZiAobmV3V29ya2VyLnN0YXRlID09PSAnaW5zdGFsbGVkJykge1xuICAgICAgICAgICAgICBpZiAobmF2aWdhdG9yLnNlcnZpY2VXb3JrZXIuY29udHJvbGxlcikge1xuICAgICAgICAgICAgICAgIG5ld1dvcmtlci5wb3N0TWVzc2FnZSh7dHlwZTogJ1NLSVBfV0FJVElORyd9KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBuYXZpZ2F0b3Iuc2VydmljZVdvcmtlci5hZGRFdmVudExpc3RlbmVyKCdjb250cm9sbGVyY2hhbmdlJywgKCkgPT4ge1xuICAgICAgICBjb25zb2xlLmluZm8oJ1NlcnZpY2UgV29ya2VyIGNvbnRyb2xsaW5nIHRoaXMgcGFnZS4nKTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSBpZiAoJ3NlcnZpY2VXb3JrZXInIGluIG5hdmlnYXRvciAmJiB0aGlzLmFjdGl2YXRlU2VydmljZVdvcmtlcil7XG4gICAgICAgIGNvbnNvbGUud2FybignU2VydmljZSB3b3JrZXIgQVBJIG5vdCBhdmFpbGFibGUnKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBuZ09uQ2hhbmdlcyhfOiBTaW1wbGVDaGFuZ2VzKSB7XG4gICAgdGhpcy5sb2FkRGF0YS5uZXh0KCk7XG4gIH1cblxuICBhc3luYyBjaGVja01vZHVsZSgpOiBQcm9taXNlPEZyb250ZW5kTW9kdWxlQ29uZmlnIHwgbnVsbD4ge1xuICAgIGlmICghYXdhaXQgdGhpcy5tb2R1bGVJbmZvU2VydmljZS5pc0F2YWlsYWJsZUJhY2tlbmRPYmplY3QodGhpcy5ub2RlKSkge1xuICAgICAgaWYgKHRoaXMubm9kZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1vZHVsZUluZm9TZXJ2aWNlLmdldEZyb250ZW5kTW9kdWxlU2V0dGluZyh0aGlzLm5vZGUpXG4gICAgICB9XG4gICAgICByZXR1cm4ge21vZHVsZTogJ2RlZmF1bHQnLCB1cmxNb2R1bGVDb25maWc6IG51bGx9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBudWxsXG4gICAgfVxuICB9XG5cbiAgaGFuZGxlUmVuZGVyaW5nUmVzcG9uc2VXaXRob3V0Sm9iKHJlbmRlckRhdGFSZXNwb25zZTogUmVuZGVyRGF0YVJlc3BvbnNlKSB7XG4gICAgY29uc3QgaXRlbXMgPSByZW5kZXJEYXRhUmVzcG9uc2Uub2JqZWN0TGlua3M/Lm1hcChpdGVtID0+IHtcbiAgICAgIGNvbnN0IGFzc2V0SXRlbTogQXNzZXRTdGF0ZUl0ZW0gPSB7XG4gICAgICAgIGxpbms6IGl0ZW0ubGluayxcbiAgICAgICAgcHJvZ3Jlc3M6IDEwMCxcbiAgICAgICAgaGVpZ2h0OiBpdGVtLmhlaWdodCxcbiAgICAgICAgd2lkdGg6IGl0ZW0ud2lkdGgsXG4gICAgICAgIGFkZGl0aW9uYWxEYXRhOiB1bmRlZmluZWQsXG4gICAgICAgIHN0YXR1czogJ0ZJTklTSEVEJ1xuICAgICAgfVxuICAgICAgcmV0dXJuIGFzc2V0SXRlbVxuICAgIH0pXG4gICAgY29uc3QgZGF0YTogUmVuZGVyRGF0YSA9IHtcbiAgICAgIG1vZHVsZTogcmVuZGVyRGF0YVJlc3BvbnNlLm1vZHVsZSA/PyAnJyxcbiAgICAgIGl0ZW1zOiBpdGVtc1xuICAgIH1cbiAgICByZW5kZXJEYXRhUmVzcG9uc2Uub2JqZWN0TGlua3MgIT09IHVuZGVmaW5lZCAmJiB0aGlzLnJlbmRlckRhdGEkLm5leHQoZGF0YSk7XG4gICAgdGhpcy5maW5pc2hlZC5uZXh0KCk7XG4gIH1cblxuICBoYW5kbGVKb2JJbmZvV2l0aFN1YkpvYnNJblByb2dyZXNzKHJlbmRlckRhdGFSZXNwb25zZTogUmVuZGVyRGF0YVJlc3BvbnNlLCBqb2JJbmZvOiBKb2JJbmZvUmVwbHkpIHtcbiAgICBjb25zdCBpdGVtcyA9IGpvYkluZm8uam9icy5tYXAoc3ViSm9iID0+IHtcbiAgICAgIGNvbnN0IGFzc2V0SXRlbTogQXNzZXRTdGF0ZUl0ZW0gPSB7XG4gICAgICAgIGxpbms6IHN1YkpvYi5vYmplY3RMaW5rPy5saW5rID8/ICcnLFxuICAgICAgICBwcm9ncmVzczogc3ViSm9iLnN0YXR1cyAhPT0gJ1FVRVVFRCcgPyBzdWJKb2IucHJvZ3Jlc3MgOiAtKHN1YkpvYi5wcm9ncmVzcyArIDEpLFxuICAgICAgICBoZWlnaHQ6IHN1YkpvYi5vYmplY3RMaW5rPy5oZWlnaHQgPz8gc3ViSm9iLnF1YWxpdHksXG4gICAgICAgIHdpZHRoOiBzdWJKb2Iub2JqZWN0TGluaz8ud2lkdGggPz8gMCxcbiAgICAgICAgYWRkaXRpb25hbERhdGE6IHN1YkpvYi5hZGRpdGlvbmFsRGF0YSxcbiAgICAgICAgc3RhdHVzOiBzdWJKb2Iuc3RhdHVzLFxuICAgICAgfVxuICAgICAgcmV0dXJuIGFzc2V0SXRlbVxuICAgIH0pXG4gICAgY29uc3QgZGF0YTogUmVuZGVyRGF0YSA9IHtcbiAgICAgIG1vZHVsZTogcmVuZGVyRGF0YVJlc3BvbnNlLm1vZHVsZSA/PyAnJyxcbiAgICAgIGl0ZW1zOiBpdGVtc1xuICAgIH1cbiAgICB0aGlzLnJlbmRlckRhdGEkLm5leHQoZGF0YSlcbiAgICB0aGlzLnNvbWVCdXROb3RBbGxGaW5pc2hlZC5uZXh0KHRydWUpXG4gIH1cblxuICBoYW5kbGVGaW5pc2hlZE9yUGFydGlhbEpvYkluZm8ocmVuZGVyRGF0YVJlc3BvbnNlOiBSZW5kZXJEYXRhUmVzcG9uc2UsIGpvYkluZm86IEpvYkluZm9SZXBseSkge1xuICAgIGNvbnN0IGl0ZW1zID0gam9iSW5mby5qb2JzLm1hcChzdWJKb2IgPT4ge1xuICAgICAgY29uc3QgYXNzZXRJdGVtOiBBc3NldFN0YXRlSXRlbSA9IHtcbiAgICAgICAgbGluazogc3ViSm9iLm9iamVjdExpbms/LmxpbmsgPz8gJycsXG4gICAgICAgIHByb2dyZXNzOiBzdWJKb2IucHJvZ3Jlc3MsXG4gICAgICAgIGhlaWdodDogc3ViSm9iLm9iamVjdExpbms/LmhlaWdodCA/PyBzdWJKb2IucXVhbGl0eSxcbiAgICAgICAgd2lkdGg6IHN1YkpvYi5vYmplY3RMaW5rPy53aWR0aCA/PyAwLFxuICAgICAgICBhZGRpdGlvbmFsRGF0YTogc3ViSm9iLmFkZGl0aW9uYWxEYXRhLFxuICAgICAgICBwdWJsaWNFcnJvck1lc3NhZ2U6IHN1YkpvYi5lcnJvcj8udXNlck1lc3NhZ2UsXG4gICAgICAgIHN0YXR1czpzdWJKb2Iuc3RhdHVzLFxuICAgICAgfVxuICAgICAgcmV0dXJuIGFzc2V0SXRlbVxuICAgIH0pXG4gICAgY29uc3QgZGF0YTogUmVuZGVyRGF0YSA9IHtcbiAgICAgIG1vZHVsZTogcmVuZGVyRGF0YVJlc3BvbnNlLm1vZHVsZSA/PyAnJyxcbiAgICAgIGl0ZW1zOiBpdGVtc1xuICAgIH1cbiAgICB0aGlzLnJlbmRlckRhdGEkLm5leHQoZGF0YSlcbiAgICB0aGlzLmZpbmlzaGVkLm5leHQoKVxuICB9XG5cbiAgaGFuZGxlRmFpbGVkTWFpbkpvYihqb2JJbmZvOiBKb2JJbmZvUmVwbHkpIHtcbiAgICBjb25zdCBkYXRhOiBSZW5kZXJEYXRhID0ge1xuICAgICAgbW9kdWxlOiAnRVJST1InLFxuICAgICAgcHVibGljRXJyb3JNZXNzYWdlOiBqb2JJbmZvLmVycm9yTWVzc2FnZT8udXNlck1lc3NhZ2UgPz8gJ0dFTkVSSUNfRVJST1JfTUVTU0FHRSdcbiAgICB9XG4gICAgdGhpcy5yZW5kZXJEYXRhJC5uZXh0KGRhdGEpXG4gICAgdGhpcy5maW5pc2hlZC5uZXh0KClcbiAgfVxuXG4gIGhhbmRsZU1haW5Kb2JXaXRoTm9TdWJKb2JJbkZpbmFsU3RhdHVzKGpvYkluZm86IEpvYkluZm9SZXBseSkge1xuICAgIGxldCBwcm9ncmVzcyA9IDBcbiAgICBpZiAoam9iSW5mby5qb2JzLnNvbWUoaiA9PiBqLnN0YXR1cyA9PT0gJ1BST0NFU1NJTkcnKSkge1xuICAgICAgcHJvZ3Jlc3MgPSBNYXRoLm1heCguLi5qb2JJbmZvLmpvYnMubWFwKGogPT4gai5wcm9ncmVzcykpXG4gICAgfSBlbHNlIGlmIChqb2JJbmZvLmpvYnMuc29tZShqID0+IGouc3RhdHVzID09PSAnUVVFVUVEJykpIHtcbiAgICAgIHByb2dyZXNzID0gLShNYXRoLm1pbiguLi5qb2JJbmZvLmpvYnMubWFwKGogPT4gai5wcm9ncmVzcyArIDEpKSlcbiAgICB9XG4gICAgdGhpcy5wcm9ncmVzcyQubmV4dCh7XG4gICAgICBtb2R1bGU6IGpvYkluZm8ubW9kdWxlID8/ICcnLFxuICAgICAgcHJvZ3Jlc3M6IHByb2dyZXNzXG4gICAgfSk7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJtb2R1bGUgbW9kdWxlLXt7KHJlbmRlckRhdGEkIHwgYXN5bmMpPy5tb2R1bGV9fVwiPlxuICA8bmctY29udGFpbmVyICpuZ0lmPVwicmVuZGVyRGF0YSQgfCBhc3luYyBhcyBkYXRhXCI+XG4gICAgQGRlZmVyICh3aGVuIGRhdGE/Lm1vZHVsZSA9PT0gJ0lNQUdFJyl7XG4gICAgICA8cnMtbW9kdWxlLWltYWdlIFtkYXRhXT1cImRhdGFcIiBbbm9kZV09XCJub2RlXCI+PC9ycy1tb2R1bGUtaW1hZ2U+XG4gICAgfSBAbG9hZGluZyB7XG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwibG9hZGluZ1wiPjwvbmctY29udGFpbmVyPlxuICAgIH1cbiAgICBAZGVmZXIgKHdoZW4gZGF0YT8ubW9kdWxlID09PSAnVklERU8nKXtcbiAgICAgIDxycy1tb2R1bGUtdmlkZW8gW2RhdGFdPVwiZGF0YVwiIFtub2RlXT1cIm5vZGVcIj48L3JzLW1vZHVsZS12aWRlbz5cbiAgICB9IEBsb2FkaW5nIHtcbiAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJsb2FkaW5nXCI+PC9uZy1jb250YWluZXI+XG4gICAgfVxuICAgIEBkZWZlciAod2hlbiBkYXRhPy5tb2R1bGUgPT09ICdQREYnIHx8IGRhdGE/Lm1vZHVsZSA9PT0gJ0RPQ1VNRU5UJykge1xuICAgICAgPHJzLW1vZHVsZS1wZGYgW2RhdGFdPVwiZGF0YVwiIFtub2RlXT1cIm5vZGVcIj48L3JzLW1vZHVsZS1wZGY+XG4gICAgfSBAbG9hZGluZyB7XG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwibG9hZGluZ1wiPjwvbmctY29udGFpbmVyPlxuICAgIH1cbiAgICBAZGVmZXIgKHdoZW4gZGF0YT8ubW9kdWxlID09PSAnRURVSFRNTCcgfHwgZGF0YT8ubW9kdWxlID09PSAnSDVQJyB8fCBkYXRhPy5tb2R1bGUgPT09ICdKVVBZVEVSJyB8fCBkYXRhLm1vZHVsZSA9PT0gJ1NQUkVBRFNIRUVUJykge1xuICAgICAgPHJzLW1vZHVsZS1lZHUtaHRtbCBbZGF0YV09XCJkYXRhXCIgW25vZGVdPVwibm9kZVwiPjwvcnMtbW9kdWxlLWVkdS1odG1sPlxuICAgIH0gQGxvYWRpbmcge1xuICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImxvYWRpbmdcIj48L25nLWNvbnRhaW5lcj5cbiAgICB9XG4gICAgQGRlZmVyICh3aGVuIGRhdGE/Lm1vZHVsZSA9PT0gJ0FVRElPJyl7XG4gICAgICA8cnMtbW9kdWxlLWF1ZGlvIFtkYXRhXT1cImRhdGFcIiBbbm9kZV09XCJub2RlXCI+PC9ycy1tb2R1bGUtYXVkaW8+XG4gICAgfSBAbG9hZGluZyB7XG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwibG9hZGluZ1wiPjwvbmctY29udGFpbmVyPlxuICAgIH1cbiAgICBAZGVmZXIgKHdoZW4gZGF0YT8ubW9kdWxlID09PSAnQklOREVSJyl7XG4gICAgICA8cnMtbW9kdWxlLWJpbmRlciBbZGF0YV09XCJkYXRhXCIgW25vZGVdPVwibm9kZVwiPjwvcnMtbW9kdWxlLWJpbmRlcj5cbiAgICB9IEBsb2FkaW5nIHtcbiAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJsb2FkaW5nXCI+PC9uZy1jb250YWluZXI+XG4gICAgfVxuICAgIEBkZWZlciAod2hlbiBkYXRhPy5tb2R1bGUgPT09ICdEREInKXtcbiAgICAgIDxycy1tb2R1bGUtZGRiIFtkYXRhXT1cImRhdGFcIiBbbm9kZV09XCJub2RlXCI+PC9ycy1tb2R1bGUtZGRiPlxuICAgIH0gQGxvYWRpbmcge1xuICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImxvYWRpbmdcIj48L25nLWNvbnRhaW5lcj5cbiAgICB9XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImRhdGEubW9kdWxlID09PSAnZGVmYXVsdCdcIj5cbiAgICAgIEBkZWZlciAod2hlbiBkYXRhLm1vZHVsZSA9PT0gJ2RlZmF1bHQnKSB7XG4gICAgICAgIDxycy1tb2R1bGUtZGVmYXVsdCBbbm9kZV09XCJub2RlXCI+PC9ycy1tb2R1bGUtZGVmYXVsdD5cbiAgICAgIH1cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZGF0YS5tb2R1bGUgPT09ICd1cmwnXCI+XG4gICAgICBAZGVmZXIgKHdoZW4gZGF0YS5tb2R1bGUgPT09ICd1cmwnKSB7XG4gICAgICAgIDxycy1tb2R1bGUtdXJsIFtub2RlXT1cIm5vZGVcIiBbZGF0YV09XCJkYXRhXCI+PC9ycy1tb2R1bGUtdXJsPlxuICAgICAgfVxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJkYXRhLm1vZHVsZSA9PT0gJ0VSUk9SJ1wiPlxuICAgICAgQGRlZmVyICh3aGVuIGRhdGEubW9kdWxlID09PSAnRVJST1InKSB7XG4gICAgICAgIDxycy1tb2R1bGUtZXJyb3IgW25vZGVdPVwibm9kZVwiIFtkYXRhXT1cImRhdGFcIj48L3JzLW1vZHVsZS1lcnJvcj5cbiAgICAgIH1cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC9uZy1jb250YWluZXI+XG5cbiAgPGRpdiBjbGFzcz1cInByb2dyZXNzXCIgKm5nSWY9XCIocmVuZGVyRGF0YSQgfCBhc3luYykgPT09IG51bGw7XCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInByb2dyZXNzJCB8IGFzeW5jIGFzIHByb2dyZXNzXCI+XG4gICAgICA8bmctY29udGFpbmVyIFtuZ1N3aXRjaF09XCJbJ1ZJREVPJywgJ0FVRElPJ10uaW5jbHVkZXMocHJvZ3Jlc3MubW9kdWxlKSA/ICdiYXInIDogJ3NwaW5uZXInXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidiYXInXCI+XG4gICAgICAgICAgPGRpdiAqbmdJZj1cIihwcm9ncmVzcy5wcm9ncmVzcyA/PyAwKSA8IDBcIj5RdWV1ZSBwb3NpdGlvbjoge3stKHByb2dyZXNzLnByb2dyZXNzID8/IDApfX08L2Rpdj5cbiAgICAgICAgICA8bWF0LXByb2dyZXNzLWJhciBbdmFsdWVdPVwiKHByb2dyZXNzLnByb2dyZXNzID8/IDApXCIgKm5nSWY9XCIocHJvZ3Jlc3MucHJvZ3Jlc3MgPz8gMCkgPj0gMFwiPjwvbWF0LXByb2dyZXNzLWJhcj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidzcGlubmVyJ1wiPlxuICAgICAgICAgIDxkaXYgKm5nSWY9XCIocHJvZ3Jlc3MucHJvZ3Jlc3MgPz8gMCkgPCAwXCI+UXVldWUgcG9zaXRpb246IHt7LShwcm9ncmVzcy5wcm9ncmVzcyA/PyAwKX08L2Rpdj5cbiAgICAgICAgICA8bWF0LXNwaW5uZXIgW2RpYW1ldGVyXT1cIjUwXCIgKm5nSWY9XCIocHJvZ3Jlc3MucHJvZ3Jlc3MgPz8gMCkgPj0gMFwiPjwvbWF0LXNwaW5uZXI+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9uZy1jb250YWluZXI+XG4gIDwvZGl2PlxuPC9kaXY+XG5cbjxuZy10ZW1wbGF0ZSAjbG9hZGluZz5cbiAgPGRpdiBjbGFzcz1cInByb2dyZXNzXCI+XG4gICAgPG1hdC1zcGlubmVyPjwvbWF0LXNwaW5uZXI+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
|
|
281
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVuZGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvcmVuZGVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uL3NyYy9saWIvcmVuZGVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxTQUFTLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBcUIsUUFBUSxFQUFnQixNQUFNLGVBQWUsQ0FBQztBQUNuRyxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFRbkQsT0FBTyxFQUFDLGVBQWUsRUFBRSxZQUFZLEVBQUUsY0FBYyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUU1RyxPQUFPLEVBQUMsa0JBQWtCLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQztBQUUxRCxPQUFPLEVBQUMsd0JBQXdCLEVBQUMsTUFBTSxvQ0FBb0MsQ0FBQztBQUM1RSxPQUFPLEVBQUMsbUJBQW1CLEVBQU8sTUFBTSxxQkFBcUIsQ0FBQztBQUM5RCxPQUFPLEVBQUMsb0JBQW9CLEVBQUMsTUFBTSxnQ0FBZ0MsQ0FBQztBQU1wRSxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFPdEMsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFDckQsT0FBTyxFQUFDLGtCQUFrQixFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFFdEQsT0FBTyxFQUFDLDRCQUE0QixFQUFtQyxNQUFNLHdDQUF3QyxDQUFDOzs7Ozs7OztBQTZCdEgsTUFBTSxPQUFPLGVBQWU7SUFhMUIsWUFDVSx1QkFBdUQsRUFDdkQsd0JBQWtELEVBQ2xELGlCQUFvQyxFQUNwQyxnQkFBa0MsRUFDZSxhQUErQztRQUpoRyw0QkFBdUIsR0FBdkIsdUJBQXVCLENBQWdDO1FBQ3ZELDZCQUF3QixHQUF4Qix3QkFB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QkFDVCxnQkFBZ0I7eUJBQ2pCOzs4QkFzQkUsUUFBUTs7OEJBQUksTUFBTTsrQkFBQyw0QkFBNEI7NkNBakJ6QyxPQUFPOzBCQUFmLEtBQUs7b0JBQ0csSUFBSTswQkFBWixLQUFLO29CQUNHLGdCQUFnQjswQkFBeEIsS0FBSztvQkFDRyxxQkFBcUI7MEJBQTdCLEtBQUs7b0JBQ0csUUFBUTswQkFBaEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q29tcG9uZW50LCBJbmplY3QsIElucHV0LCBPbkNoYW5nZXMsIE9uSW5pdCwgT3B0aW9uYWwsIFNpbXBsZUNoYW5nZXN9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtSZW5kZXJpbmdNb2R1bGV9IGZyb20gJy4vcmVuZGVyaW5nLm1vZHVsZSc7XG5pbXBvcnQge1xuICBKb2JJbmZvQ29udHJvbGxlclNlcnZpY2UsXG4gIEpvYkluZm9SZXBseSxcbiAgUmVuZGVyQ29udHJvbGxlcldyYXBwZXJTZXJ2aWNlLFxuICBSZW5kZXJEYXRhUmVxdWVzdFdpdGhUb2tlbixcbiAgUmVuZGVyRGF0YVJlc3BvbnNlXG59IGZyb20gJ25neC1yZW5kZXJpbmctc2VydmljZS1hcGknO1xuaW1wb3J0IHtCZWhhdmlvclN1YmplY3QsIGRlYm91bmNlVGltZSwgZmlyc3RWYWx1ZUZyb20sIGludGVydmFsLCBTdWJqZWN0LCBzd2l0Y2hNYXAsIHRha2VVbnRpbH0gZnJvbSAncnhqcyc7XG5pbXBvcnQge0ltYWdlQ29tcG9uZW50fSBmcm9tICcuL21vZHVsZS9pbWFnZS9pbWFnZS5jb21wb25lbnQnO1xuaW1wb3J0IHtSZW5kZXJpbmdBcGlNb2R1bGV9IGZyb20gJy4vcmVuZGVyaW5nLWFwaS5tb2R1bGUnO1xuaW1wb3J0IHtWaWRlb0NvbXBvbmVudH0gZnJvbSAnLi9tb2R1bGUvdmlkZW8vdmlkZW8uY29tcG9uZW50JztcbmltcG9ydCB7TWF0UHJvZ3Jlc3NTcGlubmVyTW9kdWxlfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9wcm9ncmVzcy1zcGlubmVyJztcbmltcG9ydCB7RWR1U2hhcmluZ0FwaU1vZHVsZSwgTm9kZX0gZnJvbSAnbmd4LWVkdS1zaGFyaW5nLWFwaSc7XG5pbXBvcnQge01hdFByb2dyZXNzQmFyTW9kdWxlfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9wcm9ncmVzcy1iYXInO1xuaW1wb3J0IHtBc3NldFN0YXRlSXRlbSwgUmVuZGVyRGF0YX0gZnJvbSAnLi9kdG8vUmVuZGVyRGF0YSc7XG5pbXBvcnQge1BkZkNvbXBvbmVudH0gZnJvbSAnLi9tb2R1bGUvcGRmL3BkZi5jb21wb25lbnQnO1xuaW1wb3J0IHtVcmxDb21wb25lbnR9IGZyb20gJy4vbW9kdWxlL3VybC91cmwuY29tcG9uZW50JztcbmltcG9ydCB7RWR1SHRtbENvbXBvbmVudH0gZnJvbSAnLi9tb2R1bGUvZWR1aHRtbC9lZHVIdG1sLmNvbXBvbmVudCc7XG5pbXBvcnQge01vZHVsZUluZm9TZXJ2aWNlfSBmcm9tICcuLi9tb2R1bGUtaW5mby5zZXJ2aWNlJztcbmltcG9ydCB7ZmlsdGVyfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQge1BsYXRmb3JtTG9jYXRpb259IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge0RlZmF1bHRDb21wb25lbnR9IGZyb20gJy4vbW9kdWxlL2RlZmF1bHQvZGVmYXVsdC5jb21wb25lbnQnO1xuaW1wb3J0IHtGcm9udGVuZE1vZHVsZUNvbmZpZ30gZnJvbSAnLi9kdG8vRnJvbnRlbmRNb2R1bGVDb25maWcnO1xuaW1wb3J0IHtBdWRpb0NvbXBvbmVudH0gZnJvbSAnLi9tb2R1bGUvYXVkaW8vYXVkaW8uY29tcG9uZW50JztcbmltcG9ydCB7QmluZGVyQ29tcG9uZW50fSBmcm9tICcuL21vZHVsZS9iaW5kZXIvYmluZGVyLmNvbXBvbmVudCc7XG5pbXBvcnQge0RkYkNvbXBvbmVudH0gZnJvbSAnLi9tb2R1bGUvZGRiL2RkYi5jb21wb25lbnQnO1xuaW1wb3J0IHtUcmFuc2xhdGVTZXJ2aWNlfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7RWR1U2hhcmluZ1VpTW9kdWxlfSBmcm9tICduZ3gtZWR1LXNoYXJpbmctdWknO1xuaW1wb3J0IHtFcnJvckNvbXBvbmVudH0gZnJvbSAnLi9tb2R1bGUvZXJyb3IvZXJyb3IuY29tcG9uZW50JztcbmltcG9ydCB7UkVOREVSSU5HX1NFUlZJQ0VfTElCX0NPTkZJRywgUmVuZGVyaW5nU2VydmljZUxpYkNvbmZpZ3VyYXRpb259IGZyb20gXCIuLi9yZW5kZXJpbmctc2VydmljZS1saWItY29uZmlndXJhdGlvblwiO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdycy1yb290JyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIFJlbmRlcmluZ0FwaU1vZHVsZSxcbiAgICBSZW5kZXJpbmdNb2R1bGUsXG4gICAgSW1hZ2VDb21wb25lbnQsXG4gICAgVmlkZW9Db21wb25lbnQsXG4gICAgTWF0UHJvZ3Jlc3NTcGlubmVyTW9kdWxlLFxuICAgIE1hdFByb2dyZXNzQmFyTW9kdWxlLFxuICAgIFBkZkNvbXBvbmVudCxcbiAgICBVcmxDb21wb25lbnQsXG4gICAgRWR1SHRtbENvbXBvbmVudCxcbiAgICBEZWZhdWx0Q29tcG9uZW50LFxuICAgIEF1ZGlvQ29tcG9uZW50LFxuICAgIEJpbmRlckNvbXBvbmVudCxcbiAgICBEZGJDb21wb25lbnQsXG4gICAgRWR1U2hhcmluZ0FwaU1vZHVsZSxcbiAgICBFZHVTaGFyaW5nVWlNb2R1bGUsXG4gICAgRXJyb3JDb21wb25lbnQsXG4gIF0sXG4gIHByb3ZpZGVyczogW1xuICAgIFRyYW5zbGF0ZVNlcnZpY2VcbiAgXSxcbiAgdGVtcGxhdGVVcmw6ICcuL3JlbmRlci5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsOiAnLi9yZW5kZXIuY29tcG9uZW50LnNjc3MnXG59KVxuZXhwb3J0IGNsYXNzIFJlbmRlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uQ2hhbmdlcywgT25Jbml0IHtcbiAgQElucHV0KCkgcmVxdWVzdDogUmVuZGVyRGF0YVJlcXVlc3RXaXRoVG9rZW4gfCB1bmRlZmluZWQ7XG4gIEBJbnB1dCgpIG5vZGU6IE5vZGUgfCB1bmRlZmluZWQ7XG4gIEBJbnB1dCgpIHNlcnZpY2VXb3JrZXJVcmw6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgQElucHV0KCkgYWN0aXZhdGVTZXJ2aWNlV29ya2VyOiBib29sZWFuID0gdHJ1ZTtcbiAgQElucHV0KCkgYXNzZXRVcmw6IHN0cmluZyA9ICcnO1xuICBzZXJ2aWNlV29ya2VyUmVhZHkgPSBmYWxzZTtcbiAgbG9hZERhdGEgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICByZW5kZXJEYXRhJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8UmVuZGVyRGF0YSB8IG51bGw+KG51bGwpO1xuICBmaW5pc2hlZCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gIHNvbWVCdXROb3RBbGxGaW5pc2hlZCA9IG5ldyBTdWJqZWN0PEJvb2xlYW4+KClcbiAgcHJvZ3Jlc3MkID0gbmV3IEJlaGF2aW9yU3ViamVjdDx7IG1vZHVsZTogc3RyaW5nLCBwcm9ncmVzcz86IG51bWJlciB9IHwgbnVsbD4obnVsbCk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZW5kZXJDb250cm9sbGVyU2VydmljZTogUmVuZGVyQ29udHJvbGxlcldyYXBwZXJTZXJ2aWNlLFxuICAgIHByaXZhdGUgam9iSW5mb0NvbnRyb2xsZXJTZXJ2aWNlOiBKb2JJbmZvQ29udHJvbGxlclNlcnZpY2UsXG4gICAgcHJpdmF0ZSBtb2R1bGVJbmZvU2VydmljZTogTW9kdWxlSW5mb1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBwbGF0Zm9ybUxvY2F0aW9uOiBQbGF0Zm9ybUxvY2F0aW9uLFxuICAgIEBPcHRpb25hbCgpIEBJbmplY3QoUkVOREVSSU5HX1NFUlZJQ0VfTElCX0NPTkZJRykgcHVibGljIGNvbmZpZ3VyYXRpb246IFJlbmRlcmluZ1NlcnZpY2VMaWJDb25maWd1cmF0aW9uLFxuICApIHtcbiAgICB0aGlzLmxvYWREYXRhLnBpcGUoXG4gICAgICBmaWx0ZXIoKCkgPT4gdGhpcy5ub2RlICE9PSB1bmRlZmluZWQgJiYgdGhpcy5zZXJ2aWNlV29ya2VyUmVhZHkpLFxuICAgICAgZGVib3VuY2VUaW1lKDEwKSxcbiAgICAgIHN3aXRjaE1hcCgoKSA9PiB7XG4gICAgICAgIC8vIHN1YnNjcmliZSBlcnJvciBoYW5kbGluZ1xuICAgICAgICByZXR1cm4gdGhpcy5jaGVja01vZHVsZSgpXG4gICAgICB9KVxuICAgICkuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6IGFzeW5jIChmcm9udGVuZE1vZHVsZSkgPT4ge1xuICAgICAgICAvLyBObyBmdXJ0aGVyIGNhbGxzIHRvIHJzMiBuZWNlc3NhcnkgaWYgd2UgaGF2ZSBhIGZyb250ZW5kIG9ubHkgbW9kdWxlXG4gICAgICAgIGlmIChmcm9udGVuZE1vZHVsZSAhPT0gbnVsbCkge1xuICAgICAgICAgIGNvbnN0IGRhdGE6IFJlbmRlckRhdGEgPSB7XG4gICAgICAgICAgICBtb2R1bGU6IGZyb250ZW5kTW9kdWxlLm1vZHVsZSxcbiAgICAgICAgICAgIGZyb250ZW5kTW9kdWxlQ29uZmlnOiBmcm9udGVuZE1vZHVsZVxuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLnJlbmRlckRhdGEkLm5leHQoZGF0YSlcbiAgICAgICAgICB0aGlzLmZpbmlzaGVkLm5leHQoKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCByZW5kZXJSZXNwb25zZURhdGEgPSBhd2FpdCBmaXJzdFZhbHVlRnJvbSh0aGlzLnJlbmRlckNvbnRyb2xsZXJTZXJ2aWNlLmdldFJlbmRlckRhdGFUb2tlbih0aGlzLnJlcXVlc3QhISkpXG4gICAgICAgICAgICAvLyBDYXNlIDE6IG5vIGpvYiByZXR1cm5lZCA9PiBubyBwb2xsaW5nIG5lZWRlZFxuICAgICAgICAgICAgaWYgKHJlbmRlclJlc3BvbnNlRGF0YS5qb2JJZCA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICB0aGlzLmhhbmRsZVJlbmRlcmluZ1Jlc3BvbnNlV2l0aG91dEpvYihyZW5kZXJSZXNwb25zZURhdGEpXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB0aGlzLnByb2dyZXNzJC5uZXh0KHttb2R1bGU6IHJlbmRlclJlc3BvbnNlRGF0YS5tb2R1bGUgPz8gJyd9KTtcbiAgICAgICAgICAgICAgaW50ZXJ2YWwoNTAwKS5waXBlKFxuICAgICAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLmZpbmlzaGVkKSxcbiAgICAgICAgICAgICAgICBzd2l0Y2hNYXAoKCkgPT4gdGhpcy5qb2JJbmZvQ29udHJvbGxlclNlcnZpY2UuZ2V0Sm9iSW5mbyh7am9iSWQ6IHJlbmRlclJlc3BvbnNlRGF0YS5qb2JJZCEhfSkucGlwZSgpKSxcbiAgICAgICAgICAgICAgKS5zdWJzY3JpYmUoe1xuICAgICAgICAgICAgICAgIG5leHQ6IGFzeW5jIChqb2JJbmZvKSA9PiB7XG4gICAgICAgICAgICAgICAgICAvLyBTb21lLCBidXQgbm90IGFsbCwgam9icyBhcmUgaW4gYSBmaW5hbCBzdGF0dXMgKHRoaXMgbWVhbnMgc29tZSBhcmUgc3RpbGwgUVVFVUVEIG9yIFBST0NFU1NJTkcpXG4gICAgICAgICAgICAgICAgICBpZiAoam9iSW5mby5qb2JzLnNvbWUoaiA9PiBqLnN0YXR1cyA9PT0gJ0ZJTklTSEVEJykgJiYgam9iSW5mby5zdGF0dXMgIT09ICdGSU5JU0hFRCcpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVKb2JJbmZvV2l0aFN1YkpvYnNJblByb2dyZXNzKHJlbmRlclJlc3BvbnNlRGF0YSwgam9iSW5mbylcbiAgICAgICAgICAgICAgICAgICAgLy8gbWFpbiBqb2IgZmluaXNoZWQgb3IgcGFydGlhbGx5IGZhaWxlZFxuICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChqb2JJbmZvLnN0YXR1cyA9PT0gJ0ZJTklTSEVEJyB8fCBqb2JJbmZvLnN0YXR1cyA9PT0gJ1BBUlRJQUxMWV9GQUlMRUQnKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlRmluaXNoZWRPclBhcnRpYWxKb2JJbmZvKHJlbmRlclJlc3BvbnNlRGF0YSwgam9iSW5mbylcbiAgICAgICAgICAgICAgICAgICAgLy8gTWFpbiBqb2IgZmFpbGVkID0+IG5vIG1vZHVsZSBidXQgZXJyb3IgcGFnZVxuICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChqb2JJbmZvLnN0YXR1cyA9PT0gJ0ZBSUxFRCcpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVGYWlsZWRNYWluSm9iKGpvYkluZm8pXG4gICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAvLyBubyBmaW5pc2hlZCBqb2JzIC0+IHNob3cgZWl0aGVyIG9uZSBwcm9ncmVzcyBiYXIgd2l0aCByYWNlIGxlYWRlciAocHJvZ3Jlc3MgMC0xMDApXG4gICAgICAgICAgICAgICAgICAgIC8vIG9yIHF1ZXVlIHBvc2l0aW9uIChwcm9ncmVzcyAoLWluZiwtMV0pXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlTWFpbkpvYldpdGhOb1N1YkpvYkluRmluYWxTdGF0dXMoam9iSW5mbylcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGVycm9yOiBlcnJvciA9PiB7XG4gICAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZUFwaUVycm9yKGVycm9yKVxuICAgICAgICAgICAgICAgIH19KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgdGhpcy5oYW5kbGVBcGlFcnJvcihlcnJvcilcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBlcnJvcjogKGVycm9yKSA9PiB7XG4gICAgICAgIHRoaXMuaGFuZGxlQXBpRXJyb3IoZXJyb3IpXG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBoYW5kbGVBcGlFcnJvcihlcnJvcjogYW55KSB7XG4gICAgY29uc3QgcHVibGljTWVzc2FnZSA9IGVycm9yLmVycm9yLnVzZXJNZXNzYWdlID8/ICdHRU5FUklDX0VSUk9SX01FU1NBR0UnXG4gICAgY29uc3QgZGF0YTogUmVuZGVyRGF0YSA9IHtcbiAgICAgIG1vZHVsZTogJ0VSUk9SJyxcbiAgICAgIHB1YmxpY0Vycm9yTWVzc2FnZTogcHVibGljTWVzc2FnZVxuICAgIH1cbiAgICB0aGlzLnJlbmRlckRhdGEkLm5leHQoZGF0YSlcbiAgICB0aGlzLmZpbmlzaGVkLm5leHQoKVxuICB9XG5cbiAgYXN5bmMgbmdPbkluaXQoKSB7XG4gICAgaWYgKHRoaXMuYXNzZXRVcmwgIT09ICcnKSB7XG4gICAgICBjb25zb2xlLmluZm8oXCJzZXR0aW5nIGFzc2V0VXJsIHRvOiBcIiArIHRoaXMuYXNzZXRVcmwgKyBcIlwiKTtcbiAgICAgIHRoaXMuY29uZmlndXJhdGlvbi5hc3NldHNVcmwgPSB0aGlzLmFzc2V0VXJsO1xuICAgIH1cbiAgICBpZiAoIXRoaXMuYWN0aXZhdGVTZXJ2aWNlV29ya2VyKSB7XG4gICAgICB0aGlzLnNlcnZpY2VXb3JrZXJSZWFkeSA9IHRydWU7XG4gICAgICB0aGlzLmxvYWREYXRhLm5leHQoKTtcbiAgICB9XG4gICAgLy8gYXdhaXQgZmlyc3RWYWx1ZUZyb20odGhpcy50cmFuc2xhdGlvbnNTZXJ2aWNlLmluaXRpYWxpemUoKSlcbiAgICBpZiAoJ3NlcnZpY2VXb3JrZXInIGluIG5hdmlnYXRvcikge1xuICAgICAgY29uc3QgcmVnID0gYXdhaXQgbmF2aWdhdG9yLnNlcnZpY2VXb3JrZXIuZ2V0UmVnaXN0cmF0aW9ucygpO1xuICAgICAgYXdhaXQgUHJvbWlzZS5hbGwocmVnPy5tYXAoKHI6IFNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb24pID0+IHIudW5yZWdpc3RlcigpKSk7XG4gICAgICBjb25zdCBzZXJ2aWNlV29ya2VyVXJsID0gdGhpcy5zZXJ2aWNlV29ya2VyVXJsID8/ICh0aGlzLnBsYXRmb3JtTG9jYXRpb24uZ2V0QmFzZUhyZWZGcm9tRE9NKCkgKyAnZWR1LXNlcnZpY2Utd29ya2VyLmpzJyk7XG4gICAgICBjb25zdCBzY29wZSA9IHRoaXMuc2VydmljZVdvcmtlclVybCA/ICcvJyA6IHRoaXMucGxhdGZvcm1Mb2NhdGlvbi5nZXRCYXNlSHJlZkZyb21ET00oKTtcbiAgICAgIGNvbnN0IHJlZ2lzdHJhdGlvbiA9IGF3YWl0IG5hdmlnYXRvci5zZXJ2aWNlV29ya2VyLnJlZ2lzdGVyKHNlcnZpY2VXb3JrZXJVcmwsIHtcbiAgICAgICAgc2NvcGU6IHNjb3BlXG4gICAgICB9KTtcbiAgICAgIGlmIChyZWdpc3RyYXRpb24ud2FpdGluZykge1xuICAgICAgICByZWdpc3RyYXRpb24ud2FpdGluZy5wb3N0TWVzc2FnZSh7dHlwZTogJ1NLSVBfV0FJVElORyd9KTtcbiAgICAgIH1cbiAgICAgIHRoaXMuc2VydmljZVdvcmtlclJlYWR5ID0gdHJ1ZTtcbiAgICAgIHRoaXMubG9hZERhdGEubmV4dCgpO1xuICAgICAgcmVnaXN0cmF0aW9uLm9udXBkYXRlZm91bmQgPSAoKSA9PiB7XG4gICAgICAgIGNvbnN0IG5ld1dvcmtlciA9IHJlZ2lzdHJhdGlvbi5pbnN0YWxsaW5nO1xuICAgICAgICBpZiAobmV3V29ya2VyKSB7XG4gICAgICAgICAgbmV3V29ya2VyLm9uc3RhdGVjaGFuZ2UgPSAoKSA9PiB7XG4gICAgICAgICAgICBpZiAobmV3V29ya2VyLnN0YXRlID09PSAnaW5zdGFsbGVkJykge1xuICAgICAgICAgICAgICBpZiAobmF2aWdhdG9yLnNlcnZpY2VXb3JrZXIuY29udHJvbGxlcikge1xuICAgICAgICAgICAgICAgIG5ld1dvcmtlci5wb3N0TWVzc2FnZSh7dHlwZTogJ1NLSVBfV0FJVElORyd9KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBuYXZpZ2F0b3Iuc2VydmljZVdvcmtlci5hZGRFdmVudExpc3RlbmVyKCdjb250cm9sbGVyY2hhbmdlJywgKCkgPT4ge1xuICAgICAgICBjb25zb2xlLmluZm8oJ1NlcnZpY2UgV29ya2VyIGNvbnRyb2xsaW5nIHRoaXMgcGFnZS4nKTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUud2FybignU2VydmljZSB3b3JrZXIgQVBJIG5vdCBhdmFpbGFibGUnKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBuZ09uQ2hhbmdlcyhfOiBTaW1wbGVDaGFuZ2VzKSB7XG4gICAgdGhpcy5sb2FkRGF0YS5uZXh0KCk7XG4gIH1cblxuICBhc3luYyBjaGVja01vZHVsZSgpOiBQcm9taXNlPEZyb250ZW5kTW9kdWxlQ29uZmlnIHwgbnVsbD4ge1xuICAgIGlmICghYXdhaXQgdGhpcy5tb2R1bGVJbmZvU2VydmljZS5pc0F2YWlsYWJsZUJhY2tlbmRPYmplY3QodGhpcy5ub2RlKSkge1xuICAgICAgaWYgKHRoaXMubm9kZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1vZHVsZUluZm9TZXJ2aWNlLmdldEZyb250ZW5kTW9kdWxlU2V0dGluZyh0aGlzLm5vZGUpXG4gICAgICB9XG4gICAgICByZXR1cm4ge21vZHVsZTogJ2RlZmF1bHQnLCB1cmxNb2R1bGVDb25maWc6IG51bGx9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBudWxsXG4gICAgfVxuICB9XG5cbiAgaGFuZGxlUmVuZGVyaW5nUmVzcG9uc2VXaXRob3V0Sm9iKHJlbmRlckRhdGFSZXNwb25zZTogUmVuZGVyRGF0YVJlc3BvbnNlKSB7XG4gICAgY29uc3QgaXRlbXMgPSByZW5kZXJEYXRhUmVzcG9uc2Uub2JqZWN0TGlua3M/Lm1hcChpdGVtID0+IHtcbiAgICAgIGNvbnN0IGFzc2V0SXRlbTogQXNzZXRTdGF0ZUl0ZW0gPSB7XG4gICAgICAgIGxpbms6IGl0ZW0ubGluayxcbiAgICAgICAgcHJvZ3Jlc3M6IDEwMCxcbiAgICAgICAgaGVpZ2h0OiBpdGVtLmhlaWdodCxcbiAgICAgICAgd2lkdGg6IGl0ZW0ud2lkdGgsXG4gICAgICAgIGFkZGl0aW9uYWxEYXRhOiB1bmRlZmluZWQsXG4gICAgICAgIHN0YXR1czogJ0ZJTklTSEVEJ1xuICAgICAgfVxuICAgICAgcmV0dXJuIGFzc2V0SXRlbVxuICAgIH0pXG4gICAgY29uc3QgZGF0YTogUmVuZGVyRGF0YSA9IHtcbiAgICAgIG1vZHVsZTogcmVuZGVyRGF0YVJlc3BvbnNlLm1vZHVsZSA/PyAnJyxcbiAgICAgIGl0ZW1zOiBpdGVtc1xuICAgIH1cbiAgICByZW5kZXJEYXRhUmVzcG9uc2Uub2JqZWN0TGlua3MgIT09IHVuZGVmaW5lZCAmJiB0aGlzLnJlbmRlckRhdGEkLm5leHQoZGF0YSk7XG4gICAgdGhpcy5maW5pc2hlZC5uZXh0KCk7XG4gIH1cblxuICBoYW5kbGVKb2JJbmZvV2l0aFN1YkpvYnNJblByb2dyZXNzKHJlbmRlckRhdGFSZXNwb25zZTogUmVuZGVyRGF0YVJlc3BvbnNlLCBqb2JJbmZvOiBKb2JJbmZvUmVwbHkpIHtcbiAgICBjb25zdCBpdGVtcyA9IGpvYkluZm8uam9icy5tYXAoc3ViSm9iID0+IHtcbiAgICAgIGNvbnN0IGFzc2V0SXRlbTogQXNzZXRTdGF0ZUl0ZW0gPSB7XG4gICAgICAgIGxpbms6IHN1YkpvYi5vYmplY3RMaW5rPy5saW5rID8/ICcnLFxuICAgICAgICBwcm9ncmVzczogc3ViSm9iLnN0YXR1cyAhPT0gJ1FVRVVFRCcgPyBzdWJKb2IucHJvZ3Jlc3MgOiAtKHN1YkpvYi5wcm9ncmVzcyArIDEpLFxuICAgICAgICBoZWlnaHQ6IHN1YkpvYi5vYmplY3RMaW5rPy5oZWlnaHQgPz8gc3ViSm9iLnF1YWxpdHksXG4gICAgICAgIHdpZHRoOiBzdWJKb2Iub2JqZWN0TGluaz8ud2lkdGggPz8gMCxcbiAgICAgICAgYWRkaXRpb25hbERhdGE6IHN1YkpvYi5hZGRpdGlvbmFsRGF0YSxcbiAgICAgICAgc3RhdHVzOiBzdWJKb2Iuc3RhdHVzLFxuICAgICAgfVxuICAgICAgcmV0dXJuIGFzc2V0SXRlbVxuICAgIH0pXG4gICAgY29uc3QgZGF0YTogUmVuZGVyRGF0YSA9IHtcbiAgICAgIG1vZHVsZTogcmVuZGVyRGF0YVJlc3BvbnNlLm1vZHVsZSA/PyAnJyxcbiAgICAgIGl0ZW1zOiBpdGVtc1xuICAgIH1cbiAgICB0aGlzLnJlbmRlckRhdGEkLm5leHQoZGF0YSlcbiAgICB0aGlzLnNvbWVCdXROb3RBbGxGaW5pc2hlZC5uZXh0KHRydWUpXG4gIH1cblxuICBoYW5kbGVGaW5pc2hlZE9yUGFydGlhbEpvYkluZm8ocmVuZGVyRGF0YVJlc3BvbnNlOiBSZW5kZXJEYXRhUmVzcG9uc2UsIGpvYkluZm86IEpvYkluZm9SZXBseSkge1xuICAgIGNvbnN0IGl0ZW1zID0gam9iSW5mby5qb2JzLm1hcChzdWJKb2IgPT4ge1xuICAgICAgY29uc3QgYXNzZXRJdGVtOiBBc3NldFN0YXRlSXRlbSA9IHtcbiAgICAgICAgbGluazogc3ViSm9iLm9iamVjdExpbms/LmxpbmsgPz8gJycsXG4gICAgICAgIHByb2dyZXNzOiBzdWJKb2IucHJvZ3Jlc3MsXG4gICAgICAgIGhlaWdodDogc3ViSm9iLm9iamVjdExpbms/LmhlaWdodCA/PyBzdWJKb2IucXVhbGl0eSxcbiAgICAgICAgd2lkdGg6IHN1YkpvYi5vYmplY3RMaW5rPy53aWR0aCA/PyAwLFxuICAgICAgICBhZGRpdGlvbmFsRGF0YTogc3ViSm9iLmFkZGl0aW9uYWxEYXRhLFxuICAgICAgICBwdWJsaWNFcnJvck1lc3NhZ2U6IHN1YkpvYi5lcnJvcj8udXNlck1lc3NhZ2UsXG4gICAgICAgIHN0YXR1czpzdWJKb2Iuc3RhdHVzLFxuICAgICAgfVxuICAgICAgcmV0dXJuIGFzc2V0SXRlbVxuICAgIH0pXG4gICAgY29uc3QgZGF0YTogUmVuZGVyRGF0YSA9IHtcbiAgICAgIG1vZHVsZTogcmVuZGVyRGF0YVJlc3BvbnNlLm1vZHVsZSA/PyAnJyxcbiAgICAgIGl0ZW1zOiBpdGVtc1xuICAgIH1cbiAgICB0aGlzLnJlbmRlckRhdGEkLm5leHQoZGF0YSlcbiAgICB0aGlzLmZpbmlzaGVkLm5leHQoKVxuICB9XG5cbiAgaGFuZGxlRmFpbGVkTWFpbkpvYihqb2JJbmZvOiBKb2JJbmZvUmVwbHkpIHtcbiAgICBjb25zdCBkYXRhOiBSZW5kZXJEYXRhID0ge1xuICAgICAgbW9kdWxlOiAnRVJST1InLFxuICAgICAgcHVibGljRXJyb3JNZXNzYWdlOiBqb2JJbmZvLmVycm9yTWVzc2FnZT8udXNlck1lc3NhZ2UgPz8gJ0dFTkVSSUNfRVJST1JfTUVTU0FHRSdcbiAgICB9XG4gICAgdGhpcy5yZW5kZXJEYXRhJC5uZXh0KGRhdGEpXG4gICAgdGhpcy5maW5pc2hlZC5uZXh0KClcbiAgfVxuXG4gIGhhbmRsZU1haW5Kb2JXaXRoTm9TdWJKb2JJbkZpbmFsU3RhdHVzKGpvYkluZm86IEpvYkluZm9SZXBseSkge1xuICAgIGxldCBwcm9ncmVzcyA9IDBcbiAgICBpZiAoam9iSW5mby5qb2JzLnNvbWUoaiA9PiBqLnN0YXR1cyA9PT0gJ1BST0NFU1NJTkcnKSkge1xuICAgICAgcHJvZ3Jlc3MgPSBNYXRoLm1heCguLi5qb2JJbmZvLmpvYnMubWFwKGogPT4gai5wcm9ncmVzcykpXG4gICAgfSBlbHNlIGlmIChqb2JJbmZvLmpvYnMuc29tZShqID0+IGouc3RhdHVzID09PSAnUVVFVUVEJykpIHtcbiAgICAgIHByb2dyZXNzID0gLShNYXRoLm1pbiguLi5qb2JJbmZvLmpvYnMubWFwKGogPT4gai5wcm9ncmVzcyArIDEpKSlcbiAgICB9XG4gICAgdGhpcy5wcm9ncmVzcyQubmV4dCh7XG4gICAgICBtb2R1bGU6IGpvYkluZm8ubW9kdWxlID8/ICcnLFxuICAgICAgcHJvZ3Jlc3M6IHByb2dyZXNzXG4gICAgfSk7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJtb2R1bGUgbW9kdWxlLXt7KHJlbmRlckRhdGEkIHwgYXN5bmMpPy5tb2R1bGV9fVwiPlxuICA8bmctY29udGFpbmVyICpuZ0lmPVwicmVuZGVyRGF0YSQgfCBhc3luYyBhcyBkYXRhXCI+XG4gICAgQGRlZmVyICh3aGVuIGRhdGE/Lm1vZHVsZSA9PT0gJ0lNQUdFJyl7XG4gICAgICA8cnMtbW9kdWxlLWltYWdlIFtkYXRhXT1cImRhdGFcIiBbbm9kZV09XCJub2RlXCI+PC9ycy1tb2R1bGUtaW1hZ2U+XG4gICAgfSBAbG9hZGluZyB7XG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwibG9hZGluZ1wiPjwvbmctY29udGFpbmVyPlxuICAgIH1cbiAgICBAZGVmZXIgKHdoZW4gZGF0YT8ubW9kdWxlID09PSAnVklERU8nKXtcbiAgICAgIDxycy1tb2R1bGUtdmlkZW8gW2RhdGFdPVwiZGF0YVwiIFtub2RlXT1cIm5vZGVcIj48L3JzLW1vZHVsZS12aWRlbz5cbiAgICB9IEBsb2FkaW5nIHtcbiAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJsb2FkaW5nXCI+PC9uZy1jb250YWluZXI+XG4gICAgfVxuICAgIEBkZWZlciAod2hlbiBkYXRhPy5tb2R1bGUgPT09ICdQREYnIHx8IGRhdGE/Lm1vZHVsZSA9PT0gJ0RPQ1VNRU5UJykge1xuICAgICAgPHJzLW1vZHVsZS1wZGYgW2RhdGFdPVwiZGF0YVwiIFtub2RlXT1cIm5vZGVcIj48L3JzLW1vZHVsZS1wZGY+XG4gICAgfSBAbG9hZGluZyB7XG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwibG9hZGluZ1wiPjwvbmctY29udGFpbmVyPlxuICAgIH1cbiAgICBAZGVmZXIgKHdoZW4gZGF0YT8ubW9kdWxlID09PSAnRURVSFRNTCcgfHwgZGF0YT8ubW9kdWxlID09PSAnSDVQJyB8fCBkYXRhPy5tb2R1bGUgPT09ICdKVVBZVEVSJyB8fCBkYXRhLm1vZHVsZSA9PT0gJ1NQUkVBRFNIRUVUJykge1xuICAgICAgPHJzLW1vZHVsZS1lZHUtaHRtbCBbZGF0YV09XCJkYXRhXCIgW25vZGVdPVwibm9kZVwiPjwvcnMtbW9kdWxlLWVkdS1odG1sPlxuICAgIH0gQGxvYWRpbmcge1xuICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImxvYWRpbmdcIj48L25nLWNvbnRhaW5lcj5cbiAgICB9XG4gICAgQGRlZmVyICh3aGVuIGRhdGE/Lm1vZHVsZSA9PT0gJ0FVRElPJyl7XG4gICAgICA8cnMtbW9kdWxlLWF1ZGlvIFtkYXRhXT1cImRhdGFcIiBbbm9kZV09XCJub2RlXCI+PC9ycy1tb2R1bGUtYXVkaW8+XG4gICAgfSBAbG9hZGluZyB7XG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwibG9hZGluZ1wiPjwvbmctY29udGFpbmVyPlxuICAgIH1cbiAgICBAZGVmZXIgKHdoZW4gZGF0YT8ubW9kdWxlID09PSAnQklOREVSJyl7XG4gICAgICA8cnMtbW9kdWxlLWJpbmRlciBbZGF0YV09XCJkYXRhXCIgW25vZGVdPVwibm9kZVwiPjwvcnMtbW9kdWxlLWJpbmRlcj5cbiAgICB9IEBsb2FkaW5nIHtcbiAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJsb2FkaW5nXCI+PC9uZy1jb250YWluZXI+XG4gICAgfVxuICAgIEBkZWZlciAod2hlbiBkYXRhPy5tb2R1bGUgPT09ICdEREInKXtcbiAgICAgIDxycy1tb2R1bGUtZGRiIFtkYXRhXT1cImRhdGFcIiBbbm9kZV09XCJub2RlXCI+PC9ycy1tb2R1bGUtZGRiPlxuICAgIH0gQGxvYWRpbmcge1xuICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImxvYWRpbmdcIj48L25nLWNvbnRhaW5lcj5cbiAgICB9XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImRhdGEubW9kdWxlID09PSAnZGVmYXVsdCdcIj5cbiAgICAgIEBkZWZlciAod2hlbiBkYXRhLm1vZHVsZSA9PT0gJ2RlZmF1bHQnKSB7XG4gICAgICAgIDxycy1tb2R1bGUtZGVmYXVsdCBbbm9kZV09XCJub2RlXCI+PC9ycy1tb2R1bGUtZGVmYXVsdD5cbiAgICAgIH1cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZGF0YS5tb2R1bGUgPT09ICd1cmwnXCI+XG4gICAgICBAZGVmZXIgKHdoZW4gZGF0YS5tb2R1bGUgPT09ICd1cmwnKSB7XG4gICAgICAgIDxycy1tb2R1bGUtdXJsIFtub2RlXT1cIm5vZGVcIiBbZGF0YV09XCJkYXRhXCI+PC9ycy1tb2R1bGUtdXJsPlxuICAgICAgfVxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJkYXRhLm1vZHVsZSA9PT0gJ0VSUk9SJ1wiPlxuICAgICAgQGRlZmVyICh3aGVuIGRhdGEubW9kdWxlID09PSAnRVJST1InKSB7XG4gICAgICAgIDxycy1tb2R1bGUtZXJyb3IgW25vZGVdPVwibm9kZVwiIFtkYXRhXT1cImRhdGFcIj48L3JzLW1vZHVsZS1lcnJvcj5cbiAgICAgIH1cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC9uZy1jb250YWluZXI+XG5cbiAgPGRpdiBjbGFzcz1cInByb2dyZXNzXCIgKm5nSWY9XCIocmVuZGVyRGF0YSQgfCBhc3luYykgPT09IG51bGw7XCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInByb2dyZXNzJCB8IGFzeW5jIGFzIHByb2dyZXNzXCI+XG4gICAgICA8bmctY29udGFpbmVyIFtuZ1N3aXRjaF09XCJbJ1ZJREVPJywgJ0FVRElPJ10uaW5jbHVkZXMocHJvZ3Jlc3MubW9kdWxlKSA/ICdiYXInIDogJ3NwaW5uZXInXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidiYXInXCI+XG4gICAgICAgICAgPGRpdiAqbmdJZj1cIihwcm9ncmVzcy5wcm9ncmVzcyA/PyAwKSA8IDBcIj5RdWV1ZSBwb3NpdGlvbjoge3stKHByb2dyZXNzLnByb2dyZXNzID8/IDApfX08L2Rpdj5cbiAgICAgICAgICA8bWF0LXByb2dyZXNzLWJhciBbdmFsdWVdPVwiKHByb2dyZXNzLnByb2dyZXNzID8/IDApXCIgKm5nSWY9XCIocHJvZ3Jlc3MucHJvZ3Jlc3MgPz8gMCkgPj0gMFwiPjwvbWF0LXByb2dyZXNzLWJhcj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidzcGlubmVyJ1wiPlxuICAgICAgICAgIDxkaXYgKm5nSWY9XCIocHJvZ3Jlc3MucHJvZ3Jlc3MgPz8gMCkgPCAwXCI+UXVldWUgcG9zaXRpb246IHt7LShwcm9ncmVzcy5wcm9ncmVzcyA/PyAwKX08L2Rpdj5cbiAgICAgICAgICA8bWF0LXNwaW5uZXIgW2RpYW1ldGVyXT1cIjUwXCIgKm5nSWY9XCIocHJvZ3Jlc3MucHJvZ3Jlc3MgPz8gMCkgPj0gMFwiPjwvbWF0LXNwaW5uZXI+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9uZy1jb250YWluZXI+XG4gIDwvZGl2PlxuPC9kaXY+XG5cbjxuZy10ZW1wbGF0ZSAjbG9hZGluZz5cbiAgPGRpdiBjbGFzcz1cInByb2dyZXNzXCI+XG4gICAgPG1hdC1zcGlubmVyPjwvbWF0LXNwaW5uZXI+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
|
|
@@ -746,8 +746,12 @@ class RenderComponent {
|
|
|
746
746
|
console.info("setting assetUrl to: " + this.assetUrl + "");
|
|
747
747
|
this.configuration.assetsUrl = this.assetUrl;
|
|
748
748
|
}
|
|
749
|
+
if (!this.activateServiceWorker) {
|
|
750
|
+
this.serviceWorkerReady = true;
|
|
751
|
+
this.loadData.next();
|
|
752
|
+
}
|
|
749
753
|
// await firstValueFrom(this.translationsService.initialize())
|
|
750
|
-
if (
|
|
754
|
+
if ('serviceWorker' in navigator) {
|
|
751
755
|
const reg = await navigator.serviceWorker.getRegistrations();
|
|
752
756
|
await Promise.all(reg?.map((r) => r.unregister()));
|
|
753
757
|
const serviceWorkerUrl = this.serviceWorkerUrl ?? (this.platformLocation.getBaseHrefFromDOM() + 'edu-service-worker.js');
|
|
@@ -776,7 +780,7 @@ class RenderComponent {
|
|
|
776
780
|
console.info('Service Worker controlling this page.');
|
|
777
781
|
});
|
|
778
782
|
}
|
|
779
|
-
else
|
|
783
|
+
else {
|
|
780
784
|
console.warn('Service worker API not available');
|
|
781
785
|
}
|
|
782
786
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ngx-rendering-service-lib.mjs","sources":["../../src/lib/asset-link.pipe.ts","../../src/lib/rendering.module.ts","../../src/lib/module/image/image.component.ts","../../src/lib/module/image/image.component.html","../../src/lib/module/video/video.component.ts","../../src/lib/module/video/video.component.html","../../src/rendering-service-lib-configuration.ts","../../src/lib/module/pdf/pdf.component.ts","../../src/lib/module/pdf/pdf.component.html","../../src/lib/dto/FrontendModuleConfig.ts","../../src/lib/module/url/url.component.ts","../../src/lib/module/url/url.component.html","../../src/lib/module/eduhtml/eduHtml.component.ts","../../src/lib/module/eduhtml/eduHtml.component.html","../../src/lib/rendering-api.module.ts","../../src/module-info.service.ts","../../src/lib/render.component.ts","../../src/lib/render.component.html","../../src/rendering-service-lib.module.ts","../../src/index.ts","../../src/ngx-rendering-service-lib.ts"],"sourcesContent":["import {Injector, Pipe, PipeTransform} from '@angular/core';\nimport {RSApiConfiguration} from 'ngx-rendering-service-api';\n\n/**\n * this pipe transforms any reported asset data uri from the rendering to the uri that is currently configured for the backend\n * this is required in case the rendering service is behind a proxy, i.e. in dev mode\n */\n@Pipe({ name: 'rsAssetLink' })\nexport class AssetLinkPipe implements PipeTransform {\n constructor(\n private injector: Injector,\n ) {\n }\n\n transform(value: string | undefined) {\n if(value) {\n const str = value.split('/public');\n str[0] = this.injector.get(RSApiConfiguration).rootUrl;\n return str.join('/public');\n }\n return value;\n }\n\n}\n","import {NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {AssetLinkPipe} from './asset-link.pipe';\n\n@NgModule({\n imports: [\n CommonModule,\n ],\n declarations: [\n AssetLinkPipe,\n ],\n exports: [\n CommonModule,\n AssetLinkPipe,\n ]\n})\nexport class RenderingModule {}\n","import {AfterViewInit, Component, ElementRef, HostListener, Input, signal} from '@angular/core';\nimport {RenderingModule} from '../../rendering.module';\nimport {RenderModule} from '../RenderModule';\nimport {Node} from 'ngx-edu-sharing-api';\nimport {MatIconModule} from '@angular/material/icon';\nimport {MatButtonModule} from '@angular/material/button';\nimport {RenderData, AssetStateItem} from '../../dto/RenderData';\n\n@Component({\n selector: 'rs-module-image',\n standalone: true,\n imports: [\n RenderingModule,\n MatButtonModule,\n MatIconModule,\n ],\n templateUrl: './image.component.html',\n styleUrl: './image.component.scss'\n})\nexport class ImageComponent implements RenderModule, AfterViewInit {\n @Input() data: RenderData | undefined;\n @Input() node: Node | undefined;\n activeObject = signal<AssetStateItem | undefined>(undefined);\n constructor(public element: ElementRef) { }\n ngAfterViewInit(): void {\n this.loadOptimalSize();\n }\n\n @HostListener('document:fullscreenchange')\n private loadOptimalSize() {\n const size = this.element.nativeElement.getBoundingClientRect();\n const allFinishedItems = this.data?.items?.filter(item => item.link !== '')\n const matchingItem = allFinishedItems?.sort((a, b) => {\n // sort by the image size closest to the viewport\n return Math.abs(a.width - size.width) > Math.abs(b.width - size.width) ? 1 : -1;\n })[0]\n this.activeObject.set(matchingItem);\n }\n\n toggleFullscreen() {\n if(document.fullscreenElement) {\n void document.exitFullscreen();\n } else {\n this.element.nativeElement.requestFullscreen();\n }\n }\n}\n","<div class=\"image-wrapper\"\n *ngIf=\"activeObject()\"\n>\n <img\n #image\n [src]=\"activeObject()?.link | rsAssetLink\"\n [alt]=\"node?.title || node?.name || ''\"\n >\n <button mat-icon-button (click)=\"toggleFullscreen()\"><mat-icon>fullscreen</mat-icon></button>\n</div>\n","import {AfterViewInit, Component, ElementRef, Input, signal, ViewChild} from '@angular/core';\nimport {RenderingModule} from '../../rendering.module';\nimport {RenderModule} from '../RenderModule';\nimport {Node} from 'ngx-edu-sharing-api';\nimport {MatIcon} from '@angular/material/icon';\nimport {MatIconButton} from '@angular/material/button';\nimport {FormsModule} from '@angular/forms';\nimport {RenderData, AssetStateItem} from '../../dto/RenderData';\nimport {MatMenu, MatMenuItem, MatMenuTrigger} from '@angular/material/menu';\nimport {EduSharingUiModule} from 'ngx-edu-sharing-ui';\n\n@Component({\n selector: 'rs-module-video',\n standalone: true,\n imports: [\n RenderingModule,\n MatIcon,\n MatIconButton,\n FormsModule,\n MatMenu,\n MatMenuTrigger,\n MatMenuItem,\n EduSharingUiModule\n ],\n templateUrl: './video.component.html',\n styleUrl: './video.component.scss'\n})\nexport class VideoComponent implements RenderModule, AfterViewInit{\n @Input() data: RenderData | undefined;\n @Input() node: Node | undefined;\n @ViewChild('video') videoRef: ElementRef<HTMLVideoElement> | undefined\n activeObject = signal<AssetStateItem | undefined>(undefined);\n hasMultipleResolutions: Boolean = true\n\n ngAfterViewInit(): void {\n this.hasMultipleResolutions = (this.data?.items?.length ?? 1) > 1\n const downlink: number = (navigator as any).connection?.downlink;\n let optimalResolution = 720;\n if(downlink < 2) {\n optimalResolution = 240;\n }\n if(downlink > 6) {\n optimalResolution = 1080;\n }\n const allFinishedItems = this.data?.items?.filter(item => item.link !== '')\n this.activeObject.set(allFinishedItems?.sort((a, b) => {\n // sort by the image size closest to the viewport\n return Math.abs(a.width - optimalResolution) > Math.abs(b.width - optimalResolution) ? 1 : -1;\n })[0]);\n }\n\n switchResolution(item: AssetStateItem) {\n this.activeObject.set(item)\n const currentTime = this.videoRef?.nativeElement.currentTime\n this.videoRef?.nativeElement.load()\n if (currentTime !== undefined) {\n this.videoRef!.nativeElement.currentTime = currentTime\n }\n }\n\n protected readonly JSON = JSON;\n}\n","<div class=\"video-wrapper\" *ngIf=\"activeObject()\">\n <video\n controls\n #video\n >\n <source [src]=\"activeObject()?.link | rsAssetLink\" />\n </video>\n <button *ngIf=\"hasMultipleResolutions\"\n mat-icon-button\n [matMenuTriggerFor]=\"resolutionMenu\"\n >\n <mat-icon>settings</mat-icon>\n </button>\n <mat-menu\n #resolutionMenu=\"matMenu\"\n xPosition=\"before\"\n >\n <button\n mat-menu-item\n *ngFor=\"let item of data?.items\"\n [disabled]=\"item.link === ''\"\n (click)=\"item.height !== activeObject()?.height && switchResolution(item)\"\n >\n <ng-container\n [ngTemplateOutlet]=\"item.link !== '' ? ready : loading\"\n [ngTemplateOutletContext]=\"{item:item}\"\n >\n </ng-container>\n </button>\n\n </mat-menu>\n</div>\n\n<ng-template #ready let-item='item'>\n <div style=\"display: flex; justify-content: space-between\">\n <mat-icon *ngIf=\"item.height === activeObject()?.height\">\n done\n </mat-icon>\n <div *ngIf=\"item.height !== activeObject()?.height\"></div>\n <div>\n {{item.height}}p\n </div>\n </div>\n</ng-template>\n\n<ng-template #loading let-item='item'>\n <div style=\"display: flex; justify-content: space-between\">\n <div>\n <ng-container *ngIf=\"item.status === 'PROCESSING'; else queue\">\n {{ 'RENDERING.CONVERTING' | translate }}: {{ item.progress }}%\n </ng-container>\n <ng-template #queue>\n {{ 'RENDERING.QUEUED' | translate }}: {{ item.progress }}\n </ng-template>\n </div>\n <div style=\"padding-left: .5em\">\n {{item.height}}p\n </div>\n </div>\n</ng-template>\n","import {Injectable, InjectionToken, Provider} from '@angular/core';\n\nexport const RENDERING_SERVICE_LIB_CONFIG = new InjectionToken<RenderingServiceLibConfiguration>(\n 'RENDERING_SERVICE_LIB_CONFIG',\n);\n@Injectable({\n providedIn: 'root',\n})\nexport class RenderingServiceLibConfiguration {\n /**\n * the assets url\n * this is important for modules that require to fetch external javascript, i.e. ng2-pdfjs-viewer\n */\n assetsUrl: string | null = null;\n static create(params: RenderingServiceLibConfigurationParams = {}): RenderingServiceLibConfiguration {\n return { ...new RenderingServiceLibConfiguration(), ...params };\n }\n}\n\nexport type RenderingServiceLibConfigurationParams = Partial<RenderingServiceLibConfiguration>;\n\nexport function getConfigProvider(params?: RenderingServiceLibConfigurationParams): Provider[] {\n return [\n // Provide the params given to `forRoot()`. These can be overridden by the application by\n // providing `EDU_SHARING_API_CONFIG` itself.\n {\n provide: RENDERING_SERVICE_LIB_CONFIG,\n useValue: params,\n }\n ];\n}\n","import {Component, Inject, Input, OnChanges, Optional, SimpleChanges, ViewChild} from '@angular/core';\nimport {RenderingModule} from '../../rendering.module';\nimport {RenderModule} from '../RenderModule';\nimport {Node} from 'ngx-edu-sharing-api';\nimport {MatIconModule} from '@angular/material/icon';\nimport {MatButtonModule} from '@angular/material/button';\nimport {RenderData} from '../../dto/RenderData';\nimport {PdfJsViewerComponent, PdfJsViewerModule} from 'ng2-pdfjs-viewer';\nimport {AssetControllerService, GetAsset$Params} from 'ngx-rendering-service-api';\nimport {\n RENDERING_SERVICE_LIB_CONFIG,\n RenderingServiceLibConfiguration\n} from \"../../../rendering-service-lib-configuration\";\n\n\n@Component({\n selector: 'rs-module-pdf',\n standalone: true,\n imports: [\n RenderingModule,\n MatButtonModule,\n MatIconModule,\n PdfJsViewerModule\n ],\n templateUrl: './pdf.component.html',\n styleUrl: './pdf.component.scss'\n})\nexport class PdfComponent implements RenderModule, OnChanges {\n @Input() data: RenderData | undefined\n @Input() node: Node | undefined\n @ViewChild('pdfViewer') viewerRef: PdfJsViewerComponent | undefined\n restrictedView: boolean = false\n fileData: Blob | undefined\n\n constructor(\n private assetControllerService: AssetControllerService,\n @Optional() @Inject(RENDERING_SERVICE_LIB_CONFIG) public configuration: RenderingServiceLibConfiguration,\n ) {}\n\n ngOnChanges(changes: SimpleChanges) {\n this.downloadFile()\n }\n\n private downloadFile() {\n if (this.data?.items === undefined || this.data.items[0].link === '') {\n return\n }\n const url = new URL(this.data.items[0].link)\n const assetParams = url.searchParams.get('assetParams')\n if (assetParams === null) {\n return\n }\n const params: GetAsset$Params = {\n assetParams: assetParams\n }\n this.assetControllerService.getAsset$Response(params)\n .subscribe(async (response) => {\n let responseData = response.body\n if (response.headers.get('content-type') === 'application/octet-stream') {\n this.restrictedView = true\n responseData = responseData.slice(0, responseData.size, 'application/pdf')\n }\n this.fileData = responseData\n }\n )\n }\n\n onDocumentLoad() {\n const iFrameDocument = this.viewerRef?.iframe.nativeElement.contentWindow.document\n // Always hide document properties button in right dropdown menu\n iFrameDocument.getElementById('documentProperties').style.display = 'none'\n iFrameDocument.querySelector('.horizontalToolbarSeparator.spreadModeButtons').style.display = 'none'\n if (this.restrictedView) {\n const iFrameWindow = this.viewerRef?.iframe.nativeElement.contentWindow\n // Disable printing in iframe\n iFrameWindow.print = () => {alert('Nice try!')}\n // Disable selection tool and remove the corresponding button from the right dropdown menu\n iFrameDocument.querySelector('.textLayer').style.display = 'none'\n iFrameDocument.getElementById('cursorSelectTool').style.display = 'none'\n // Disable context menu in iframe\n iFrameDocument.body.addEventListener('contextmenu', (event:MouseEvent) => {event.preventDefault();});\n // Disable printing via keyboard shortcuts\n ['keyup', 'keydown'].forEach(type => {\n iFrameDocument.addEventListener(type, (event:KeyboardEvent) => {\n if ((event.key === 's' && event.ctrlKey) || event.key === 'F12') {\n event.preventDefault();\n if (event.stopImmediatePropagation) {\n event.stopImmediatePropagation();\n } else {\n event.stopPropagation();\n }\n }\n })\n })\n }\n }\n}\n","<div class=\"pdf-wrapper\" [class.hide-all]=\"restrictedView\" *ngIf=\"fileData !== undefined\">\n <ng2-pdfjs-viewer\n #pdfViewer\n [pdfSrc]=\"fileData\"\n [print]=\"!restrictedView\"\n [download]=\"false\"\n [openFile]=\"false\"\n [viewBookmark]=\"false\"\n [viewerFolder]=\"configuration?.assetsUrl ? configuration.assetsUrl + '/pdfjs' : ''\"\n (onDocumentLoad)=\"onDocumentLoad()\"\n >\n </ng2-pdfjs-viewer>\n</div>\n","\nexport type FrontendModuleConfig = {\n module: string,\n urlModuleConfig: UrlModuleConfig | null\n}\n\nexport type UrlModuleConfig = {\n embedding: UrlEmbeddings,\n externalId: string\n}\n\nexport enum UrlEmbeddings {\n YOUTUBE,\n VIMEO,\n VIDEO,\n AUDIO,\n IMAGE,\n LTI13TOOL,\n H5P,\n PREZI,\n LEARNINGAPPS\n}\n","import {Component, Input, OnInit} from '@angular/core';\nimport {RenderingModule} from '../../rendering.module';\nimport {RenderModule} from '../RenderModule';\nimport {Node} from 'ngx-edu-sharing-api';\nimport {MatIconModule} from '@angular/material/icon';\nimport {MatButtonModule} from '@angular/material/button';\nimport {YouTubePlayer} from '@angular/youtube-player';\nimport {DomSanitizer, SafeResourceUrl} from '@angular/platform-browser';\nimport {NgOptimizedImage} from '@angular/common';\nimport {RenderData} from '../../dto/RenderData';\nimport {UrlEmbeddings} from '../../dto/FrontendModuleConfig';\nimport {EduSharingUiModule} from 'ngx-edu-sharing-ui';\n\n@Component({\n selector: 'rs-module-url',\n standalone: true,\n imports: [\n RenderingModule,\n MatButtonModule,\n MatIconModule,\n YouTubePlayer,\n NgOptimizedImage,\n EduSharingUiModule,\n ],\n templateUrl: './url.component.html',\n styleUrl: './url.component.scss'\n})\nexport class UrlComponent implements RenderModule, OnInit {\n @Input() data: RenderData | undefined;\n @Input() node: Node | undefined;\n gdpr: any[] | undefined = undefined\n gdprOk: boolean = true\n embedding?: UrlEmbeddings\n externalId?: string\n sanitizedUrl: SafeResourceUrl | null = null\n url: string = ''\n\n constructor(private sanitizer: DomSanitizer) {\n }\n\n ngOnInit() {\n this.embedding = this.data?.frontendModuleConfig?.urlModuleConfig?.embedding\n this.externalId = this.data?.frontendModuleConfig?.urlModuleConfig?.externalId\n this.url = this.node?.properties?.['ccm:wwwurl']?.[0] || ''\n if (this.embedding === UrlEmbeddings.VIMEO) {\n this.sanitizedUrl = this.getVimeoUri()\n } else if (this.embedding === UrlEmbeddings.PREZI) {\n this.sanitizedUrl = this.getPreziUrl()\n } else if (this.embedding === UrlEmbeddings.LEARNINGAPPS) {\n this.sanitizedUrl = this.getLearningAppsUrl()\n }\n }\n\n isProtected(): boolean {\n return this.gdpr === undefined;\n }\n\n consentToGdprWarning() {\n this.gdprOk = true\n }\n\n getVimeoUri(): SafeResourceUrl {\n let url = '//player.vimeo.com/video/' + this.externalId\n return this.sanitizer.bypassSecurityTrustResourceUrl(url)\n }\n\n getPreziUrl(): SafeResourceUrl {\n const preziUrl = this.url.slice(-1) === '/' ? this.url.substring(0, this.url.length - 1) : this.url\n return this.sanitizer.bypassSecurityTrustResourceUrl(preziUrl)\n }\n\n getLearningAppsUrl(): SafeResourceUrl {\n const learningAppsUrl = this.url.replace('https://learningapps.org/', 'https://learningapps.org/view')\n return this.sanitizer.bypassSecurityTrustResourceUrl(learningAppsUrl)\n }\n\n protected readonly UrlEmbeddings = UrlEmbeddings;\n}\n","<div class=\"url-wrapper\">\n <div *ngIf=\"gdprOk\">\n <ng-container *ngIf=\"embedding === UrlEmbeddings.YOUTUBE && externalId !== ''\">\n <youtube-player\n [videoId]=\"externalId ?? ''\"\n [disableCookies]=\"true\"\n ></youtube-player>\n </ng-container>\n <ng-container *ngIf=\"embedding === UrlEmbeddings.VIMEO && externalId !== ''\">\n <iframe class=\"vimeoFrame\" [src]=\"sanitizedUrl\"></iframe>\n </ng-container>\n <ng-container *ngIf=\"embedding === UrlEmbeddings.AUDIO && url !== ''\" >\n <div class=\"audio-wrapper\">\n <video\n controls\n style=\"max-width: 100%\"\n [src]=\"url\"\n poster=\"assets/img/audio.svg\"\n >\n </video>\n </div>\n </ng-container>\n <ng-container *ngIf=\"embedding === UrlEmbeddings.IMAGE && url !== ''\">\n <div class=\"image-wrapper\">\n <img\n [ngSrc]=\"url\"\n [alt]=\"node?.title ?? 'Edu-Sharing image'\"\n [title]=\"node?.title ?? 'Edu-Sharing image'\"\n >\n </div>\n </ng-container>\n <ng-container *ngIf=\"embedding === UrlEmbeddings.VIDEO && url !== ''\">\n <div class=\"video-wrapper\">\n <video\n controls\n [src]=\"url\"\n >\n </video>\n </div>\n </ng-container>\n <ng-container *ngIf=\"(embedding === UrlEmbeddings.PREZI || embedding === UrlEmbeddings.LEARNINGAPPS) && url !== ''\">\n <iframe class=\"eduUrlFrame\" [src]=sanitizedUrl allowfullscreen=\"\" allow=\"autoplay; fullscreen\" ></iframe>\n </ng-container>\n\n </div>\n <div *ngIf=\"!gdprOk\">\n {{ 'RENDERING.GDPR.GDPR_DIALOG' | translate }}\n <button mat-button (click)=\"consentToGdprWarning()\">{{'RENDERING.GDPR.GDPR_CONTINUE' | translate}}</button>\n </div>\n</div>\n","import {Component, Input, OnInit} from '@angular/core';\nimport {RenderingModule} from '../../rendering.module';\nimport {RenderModule} from '../RenderModule';\nimport {Node} from 'ngx-edu-sharing-api';\nimport {MatIconModule} from '@angular/material/icon';\nimport {MatButtonModule} from '@angular/material/button';\nimport {RenderData} from '../../dto/RenderData';\nimport {DomSanitizer, SafeResourceUrl} from '@angular/platform-browser';\n\n@Component({\n selector: 'rs-module-edu-html',\n standalone: true,\n imports: [\n RenderingModule,\n MatButtonModule,\n MatIconModule,\n ],\n templateUrl: './eduHtml.component.html',\n styleUrl: './eduHtml.component.scss'\n})\nexport class EduHtmlComponent implements RenderModule, OnInit {\n @Input() data: RenderData | undefined\n @Input() node: Node | undefined\n sanitizedUrl: SafeResourceUrl = new class implements SafeResourceUrl {\n }\n\n constructor(private sanitizer: DomSanitizer) {\n }\n\n ngOnInit() {\n if (this.data?.items !== undefined && this.data.items[0].link) {\n this.sanitizedUrl = this.getSafeUri()\n }\n }\n\n getSafeUri() {\n if (this.data?.items !== undefined && this.data.items[0].link) {\n const uri = new URL(this.data.items[0].link)\n /**\n if (uri.hostname.includes('nip.io')) {\n uri.hostname = 'localhost'\n }\n */\n return this.sanitizer.bypassSecurityTrustResourceUrl(uri.toString())\n }\n return new class implements SafeResourceUrl {\n }\n }\n}\n","<div class=\"eduHtml-wrapper\" *ngIf=\"data?.items !== undefined\">\n <iframe class=\"frame\" [src]=\"sanitizedUrl\"></iframe>\n</div>\n","import {NgModule} from '@angular/core';\n\n@NgModule({\n imports: []\n})\nexport class RenderingApiModule {}\n","import {Injectable} from '@angular/core';\nimport {ModuleInfoControllerService} from 'ngx-rendering-service-api';\nimport {firstValueFrom} from 'rxjs';\nimport {Node, RestConstants} from 'ngx-edu-sharing-api';\nimport {FrontendModuleConfig, UrlEmbeddings, UrlModuleConfig} from './lib/dto/FrontendModuleConfig';\n\n@Injectable({providedIn: 'root'})\nexport class ModuleInfoService {\n\n private availableMediaTypes: String[] = []\n private availableMimeTypes: String[] = []\n private availableMimeTypePrefixes: String[] = []\n private availableReplicationSources: String[] = []\n private availableResourceTypes: String[] = []\n private availableRemoteRepositories: String[] = []\n\n constructor(\n private service: ModuleInfoControllerService\n ) {}\n\n async isAvailableBackendObject(node: Node| undefined): Promise<boolean> {\n if (!this.isInitialized()) {\n const result = await firstValueFrom(this.service.getModulesInfo({repoId: node?.ref.repo ?? ''}))\n result.forEach(info => {\n if (info.typeMapping.type !== undefined && info.typeMapping.type !== null) {\n this.availableMediaTypes.push(info.typeMapping.type)\n } else if (info.typeMapping.remoteRepositoryType !== undefined && info.typeMapping.remoteRepositoryType !== null) {\n this.availableRemoteRepositories.push(info.typeMapping.remoteRepositoryType)\n } else if(info.typeMapping.resourceType !== undefined && info.typeMapping.resourceType !== null) {\n this.availableResourceTypes.push(info.typeMapping.resourceType)\n } else if(info.typeMapping.replicationSource !== undefined && info.typeMapping.replicationSource !== null) {\n this.availableReplicationSources.push(info.typeMapping.replicationSource)\n } else if (info.typeMapping.mimeTypeSuffix !== undefined\n && info.typeMapping.mimeTypeSuffix !== null\n && info.typeMapping.mimeTypePrefix !== undefined\n && info.typeMapping.mimeTypePrefix !== null\n ) {\n this.availableMimeTypes.push(`${info.typeMapping.mimeTypePrefix}/${info.typeMapping.mimeTypeSuffix}`)\n } else if (info.typeMapping.mimeTypePrefix !== undefined && info.typeMapping.mimeTypePrefix !== null) {\n this.availableMimeTypePrefixes.push(info.typeMapping.mimeTypePrefix)\n }\n })\n }\n const mimeTypePrefix = (node?.mimetype ?? '').split('/', 2)[0]\n return this.availableMediaTypes.includes(node?.mediatype ?? '') ||\n this.availableRemoteRepositories.includes(node?.remote?.repository?.repositoryType ?? '') ||\n this.availableReplicationSources.includes(node?.properties?.[RestConstants.CCM_PROP_REPLICATIONSOURCE]?.[0]?? '') ||\n this.availableResourceTypes.includes(node?.properties?.[RestConstants.CCM_PROP_CCRESSOURCETYPE]?.[0]?? '') ||\n this.availableMimeTypes.includes(node?.mimetype ?? '') ||\n this.availableMimeTypePrefixes.includes(mimeTypePrefix)\n }\n\n private isInitialized(): boolean {\n return this.availableMediaTypes.length\n + this.availableMimeTypes.length\n + this.availableMimeTypePrefixes.length\n + this.availableReplicationSources.length\n + this.availableResourceTypes.length\n + this.availableRemoteRepositories.length !== 0\n }\n\n getFrontendModuleSetting(node: Node): FrontendModuleConfig {\n const urlModuleConfig = this.checkUrlModule(node)\n if (urlModuleConfig !== null) {\n return urlModuleConfig\n }\n return {\n module: 'default',\n urlModuleConfig: null\n }\n }\n\n checkUrlModule(node: Node): FrontendModuleConfig | null {\n const url = node.properties?.['ccm:wwwurl']?.[0] || ''\n const checkLearningApps = (): UrlModuleConfig | null => {\n if (node.remote?.repository?.repositoryType?.toLowerCase() === 'learningapps') {\n return {\n embedding: UrlEmbeddings.LEARNINGAPPS,\n externalId: ''\n }\n }\n return null\n }\n /**\n * Function checkYouTube\n */\n const checkYouTube = (): UrlModuleConfig | null => {\n if (node.remote?.repository?.repositoryType?.toLowerCase() === 'youtube') {\n return {\n embedding: UrlEmbeddings.YOUTUBE,\n externalId: node.remote?.id ?? ''\n }\n }\n if (url.includes('youtu.be') ) {\n const split = url.split('/')\n return {\n embedding: UrlEmbeddings.YOUTUBE,\n externalId: split[split.length - 1]\n }\n }\n if (url.includes('.youtube.com/watch?')) {\n const urlObject = new URL(url)\n return {\n embedding: UrlEmbeddings.YOUTUBE,\n externalId: urlObject.searchParams.get('v') ?? ''\n }\n }\n return null\n }\n /**\n * Function checkVimeo\n */\n const checkVimeo = (): UrlModuleConfig | null => {\n if (url.includes('vimeo.com')) {\n const split = url.split('/')\n return {\n embedding: UrlEmbeddings.VIMEO,\n externalId: split[split.length - 1]\n }\n }\n return null\n }\n const checkGenericVideo = (): UrlModuleConfig | null => {\n if (url.length > 0 && ['mp4', 'webm'].includes(url.split('.').pop() ?? '')) {\n return {\n embedding: UrlEmbeddings.VIDEO,\n externalId: ''\n }\n }\n return null\n }\n /**\n * Function checkAudio\n */\n const checkAudio = (): UrlModuleConfig | null => {\n if (url.length > 0 && node.mimetype?.startsWith('audio')) {\n return {\n embedding: UrlEmbeddings.AUDIO,\n externalId: ''\n }\n }\n return null\n }\n /**\n * Function checkLti13ToolObject\n */\n const checkLti13ToolObject = (): UrlModuleConfig | null => {\n if (node.aspects?.includes('ccm:ltitool_node')) {\n return {\n embedding: UrlEmbeddings.LTI13TOOL,\n externalId: ''\n }\n }\n return null\n }\n /**\n * Function checkImage\n */\n const checkImage = (): UrlModuleConfig | null => {\n if (node.properties?.['ccm:remoterepositorytype']?.[0] === 'DDB') {\n return null\n }\n if (node.mediatype === 'file-image') {\n return {\n embedding: UrlEmbeddings.IMAGE,\n externalId: ''\n }\n }\n const mimeTypeSplit = node.mimetype?.split('/') ?? []\n if (mimeTypeSplit.length === 2 && ['png', 'jpg', 'jpeg', 'gif'].includes(mimeTypeSplit[1])) {\n return {\n embedding: UrlEmbeddings.IMAGE,\n externalId: ''\n }\n }\n return null\n }\n /**\n * Function detectH5P\n */\n const detectH5P = (): UrlModuleConfig | null => {\n if (url.length > 0 && url.includes('h5p.org/h5p/embed')) {\n return {\n embedding: UrlEmbeddings.H5P,\n externalId: ''\n }\n }\n return null\n }\n /**\n * Function detectPrezi\n */\n const detectPrezi = (): UrlModuleConfig | null => {\n if (url.length > 0 &&\n (url.includes('prezi.com/view/') || url.includes('prezi.com/embed/') || url.includes('prezi.com/p/embed'))\n ) {\n return {\n embedding: UrlEmbeddings.PREZI,\n externalId: ''\n }\n }\n return null\n }\n\n /**\n * embedding if applicable to node\n */\n const embedding =\n checkLearningApps()\n ?? checkYouTube()\n ?? checkVimeo()\n ?? checkGenericVideo()\n ?? checkAudio()\n ?? checkImage()\n ?? checkLti13ToolObject()\n ?? detectH5P()\n ?? detectPrezi()\n\n if (embedding !== null) {\n return {\n module: 'url',\n urlModuleConfig: embedding\n }\n }\n return null\n }\n}\n","import {Component, Inject, Input, OnChanges, OnInit, Optional, SimpleChanges} from '@angular/core';\nimport {RenderingModule} from './rendering.module';\nimport {\n JobInfoControllerService,\n JobInfoReply,\n RenderControllerWrapperService,\n RenderDataRequestWithToken,\n RenderDataResponse\n} from 'ngx-rendering-service-api';\nimport {BehaviorSubject, debounceTime, firstValueFrom, interval, Subject, switchMap, takeUntil} from 'rxjs';\nimport {ImageComponent} from './module/image/image.component';\nimport {RenderingApiModule} from './rendering-api.module';\nimport {VideoComponent} from './module/video/video.component';\nimport {MatProgressSpinnerModule} from '@angular/material/progress-spinner';\nimport {EduSharingApiModule, Node} from 'ngx-edu-sharing-api';\nimport {MatProgressBarModule} from '@angular/material/progress-bar';\nimport {AssetStateItem, RenderData} from './dto/RenderData';\nimport {PdfComponent} from './module/pdf/pdf.component';\nimport {UrlComponent} from './module/url/url.component';\nimport {EduHtmlComponent} from './module/eduhtml/eduHtml.component';\nimport {ModuleInfoService} from '../module-info.service';\nimport {filter} from 'rxjs/operators';\nimport {PlatformLocation} from '@angular/common';\nimport {DefaultComponent} from './module/default/default.component';\nimport {FrontendModuleConfig} from './dto/FrontendModuleConfig';\nimport {AudioComponent} from './module/audio/audio.component';\nimport {BinderComponent} from './module/binder/binder.component';\nimport {DdbComponent} from './module/ddb/ddb.component';\nimport {TranslateService} from '@ngx-translate/core';\nimport {EduSharingUiModule} from 'ngx-edu-sharing-ui';\nimport {ErrorComponent} from './module/error/error.component';\nimport {RENDERING_SERVICE_LIB_CONFIG, RenderingServiceLibConfiguration} from \"../rendering-service-lib-configuration\";\n\n@Component({\n selector: 'rs-root',\n standalone: true,\n imports: [\n RenderingApiModule,\n RenderingModule,\n ImageComponent,\n VideoComponent,\n MatProgressSpinnerModule,\n MatProgressBarModule,\n PdfComponent,\n UrlComponent,\n EduHtmlComponent,\n DefaultComponent,\n AudioComponent,\n BinderComponent,\n DdbComponent,\n EduSharingApiModule,\n EduSharingUiModule,\n ErrorComponent,\n ],\n providers: [\n TranslateService\n ],\n templateUrl: './render.component.html',\n styleUrl: './render.component.scss'\n})\nexport class RenderComponent implements OnChanges, OnInit {\n @Input() request: RenderDataRequestWithToken | undefined;\n @Input() node: Node | undefined;\n @Input() serviceWorkerUrl: string | undefined;\n @Input() activateServiceWorker: boolean = true;\n @Input() assetUrl: string = '';\n serviceWorkerReady = false;\n loadData = new Subject<void>();\n renderData$ = new BehaviorSubject<RenderData | null>(null);\n finished = new Subject<void>();\n someButNotAllFinished = new Subject<Boolean>()\n progress$ = new BehaviorSubject<{ module: string, progress?: number } | null>(null);\n\n constructor(\n private renderControllerService: RenderControllerWrapperService,\n private jobInfoControllerService: JobInfoControllerService,\n private moduleInfoService: ModuleInfoService,\n private platformLocation: PlatformLocation,\n @Optional() @Inject(RENDERING_SERVICE_LIB_CONFIG) public configuration: RenderingServiceLibConfiguration,\n ) {\n this.loadData.pipe(\n filter(() => this.node !== undefined && this.serviceWorkerReady),\n debounceTime(10),\n switchMap(() => {\n // subscribe error handling\n return this.checkModule()\n })\n ).subscribe({\n next: async (frontendModule) => {\n // No further calls to rs2 necessary if we have a frontend only module\n if (frontendModule !== null) {\n const data: RenderData = {\n module: frontendModule.module,\n frontendModuleConfig: frontendModule\n }\n this.renderData$.next(data)\n this.finished.next()\n } else {\n try {\n const renderResponseData = await firstValueFrom(this.renderControllerService.getRenderDataToken(this.request!!))\n // Case 1: no job returned => no polling needed\n if (renderResponseData.jobId === null) {\n this.handleRenderingResponseWithoutJob(renderResponseData)\n } else {\n this.progress$.next({module: renderResponseData.module ?? ''});\n interval(500).pipe(\n takeUntil(this.finished),\n switchMap(() => this.jobInfoControllerService.getJobInfo({jobId: renderResponseData.jobId!!}).pipe()),\n ).subscribe({\n next: async (jobInfo) => {\n // Some, but not all, jobs are in a final status (this means some are still QUEUED or PROCESSING)\n if (jobInfo.jobs.some(j => j.status === 'FINISHED') && jobInfo.status !== 'FINISHED') {\n this.handleJobInfoWithSubJobsInProgress(renderResponseData, jobInfo)\n // main job finished or partially failed\n } else if (jobInfo.status === 'FINISHED' || jobInfo.status === 'PARTIALLY_FAILED') {\n this.handleFinishedOrPartialJobInfo(renderResponseData, jobInfo)\n // Main job failed => no module but error page\n } else if (jobInfo.status === 'FAILED') {\n this.handleFailedMainJob(jobInfo)\n } else {\n // no finished jobs -> show either one progress bar with race leader (progress 0-100)\n // or queue position (progress (-inf,-1])\n this.handleMainJobWithNoSubJobInFinalStatus(jobInfo)\n }\n },\n error: error => {\n this.handleApiError(error)\n }});\n }\n } catch (error) {\n this.handleApiError(error)\n }\n }\n },\n error: (error) => {\n this.handleApiError(error)\n }\n });\n }\n\n handleApiError(error: any) {\n const publicMessage = error.error.userMessage ?? 'GENERIC_ERROR_MESSAGE'\n const data: RenderData = {\n module: 'ERROR',\n publicErrorMessage: publicMessage\n }\n this.renderData$.next(data)\n this.finished.next()\n }\n\n async ngOnInit() {\n if (this.assetUrl !== '') {\n console.info(\"setting assetUrl to: \" + this.assetUrl + \"\");\n this.configuration.assetsUrl = this.assetUrl;\n }\n // await firstValueFrom(this.translationsService.initialize())\n if (this.activateServiceWorker && 'serviceWorker' in navigator) {\n const reg = await navigator.serviceWorker.getRegistrations();\n await Promise.all(reg?.map((r: ServiceWorkerRegistration) => r.unregister()));\n const serviceWorkerUrl = this.serviceWorkerUrl ?? (this.platformLocation.getBaseHrefFromDOM() + 'edu-service-worker.js');\n const scope = this.serviceWorkerUrl ? '/' : this.platformLocation.getBaseHrefFromDOM();\n const registration = await navigator.serviceWorker.register(serviceWorkerUrl, {\n scope: scope\n });\n if (registration.waiting) {\n registration.waiting.postMessage({type: 'SKIP_WAITING'});\n }\n this.serviceWorkerReady = true;\n this.loadData.next();\n registration.onupdatefound = () => {\n const newWorker = registration.installing;\n if (newWorker) {\n newWorker.onstatechange = () => {\n if (newWorker.state === 'installed') {\n if (navigator.serviceWorker.controller) {\n newWorker.postMessage({type: 'SKIP_WAITING'});\n }\n }\n };\n }\n };\n navigator.serviceWorker.addEventListener('controllerchange', () => {\n console.info('Service Worker controlling this page.');\n });\n } else if ('serviceWorker' in navigator && this.activateServiceWorker){\n console.warn('Service worker API not available');\n }\n }\n\n async ngOnChanges(_: SimpleChanges) {\n this.loadData.next();\n }\n\n async checkModule(): Promise<FrontendModuleConfig | null> {\n if (!await this.moduleInfoService.isAvailableBackendObject(this.node)) {\n if (this.node !== undefined) {\n return this.moduleInfoService.getFrontendModuleSetting(this.node)\n }\n return {module: 'default', urlModuleConfig: null}\n } else {\n return null\n }\n }\n\n handleRenderingResponseWithoutJob(renderDataResponse: RenderDataResponse) {\n const items = renderDataResponse.objectLinks?.map(item => {\n const assetItem: AssetStateItem = {\n link: item.link,\n progress: 100,\n height: item.height,\n width: item.width,\n additionalData: undefined,\n status: 'FINISHED'\n }\n return assetItem\n })\n const data: RenderData = {\n module: renderDataResponse.module ?? '',\n items: items\n }\n renderDataResponse.objectLinks !== undefined && this.renderData$.next(data);\n this.finished.next();\n }\n\n handleJobInfoWithSubJobsInProgress(renderDataResponse: RenderDataResponse, jobInfo: JobInfoReply) {\n const items = jobInfo.jobs.map(subJob => {\n const assetItem: AssetStateItem = {\n link: subJob.objectLink?.link ?? '',\n progress: subJob.status !== 'QUEUED' ? subJob.progress : -(subJob.progress + 1),\n height: subJob.objectLink?.height ?? subJob.quality,\n width: subJob.objectLink?.width ?? 0,\n additionalData: subJob.additionalData,\n status: subJob.status,\n }\n return assetItem\n })\n const data: RenderData = {\n module: renderDataResponse.module ?? '',\n items: items\n }\n this.renderData$.next(data)\n this.someButNotAllFinished.next(true)\n }\n\n handleFinishedOrPartialJobInfo(renderDataResponse: RenderDataResponse, jobInfo: JobInfoReply) {\n const items = jobInfo.jobs.map(subJob => {\n const assetItem: AssetStateItem = {\n link: subJob.objectLink?.link ?? '',\n progress: subJob.progress,\n height: subJob.objectLink?.height ?? subJob.quality,\n width: subJob.objectLink?.width ?? 0,\n additionalData: subJob.additionalData,\n publicErrorMessage: subJob.error?.userMessage,\n status:subJob.status,\n }\n return assetItem\n })\n const data: RenderData = {\n module: renderDataResponse.module ?? '',\n items: items\n }\n this.renderData$.next(data)\n this.finished.next()\n }\n\n handleFailedMainJob(jobInfo: JobInfoReply) {\n const data: RenderData = {\n module: 'ERROR',\n publicErrorMessage: jobInfo.errorMessage?.userMessage ?? 'GENERIC_ERROR_MESSAGE'\n }\n this.renderData$.next(data)\n this.finished.next()\n }\n\n handleMainJobWithNoSubJobInFinalStatus(jobInfo: JobInfoReply) {\n let progress = 0\n if (jobInfo.jobs.some(j => j.status === 'PROCESSING')) {\n progress = Math.max(...jobInfo.jobs.map(j => j.progress))\n } else if (jobInfo.jobs.some(j => j.status === 'QUEUED')) {\n progress = -(Math.min(...jobInfo.jobs.map(j => j.progress + 1)))\n }\n this.progress$.next({\n module: jobInfo.module ?? '',\n progress: progress\n });\n }\n}\n","<div class=\"module module-{{(renderData$ | async)?.module}}\">\n <ng-container *ngIf=\"renderData$ | async as data\">\n @defer (when data?.module === 'IMAGE'){\n <rs-module-image [data]=\"data\" [node]=\"node\"></rs-module-image>\n } @loading {\n <ng-container *ngTemplateOutlet=\"loading\"></ng-container>\n }\n @defer (when data?.module === 'VIDEO'){\n <rs-module-video [data]=\"data\" [node]=\"node\"></rs-module-video>\n } @loading {\n <ng-container *ngTemplateOutlet=\"loading\"></ng-container>\n }\n @defer (when data?.module === 'PDF' || data?.module === 'DOCUMENT') {\n <rs-module-pdf [data]=\"data\" [node]=\"node\"></rs-module-pdf>\n } @loading {\n <ng-container *ngTemplateOutlet=\"loading\"></ng-container>\n }\n @defer (when data?.module === 'EDUHTML' || data?.module === 'H5P' || data?.module === 'JUPYTER' || data.module === 'SPREADSHEET') {\n <rs-module-edu-html [data]=\"data\" [node]=\"node\"></rs-module-edu-html>\n } @loading {\n <ng-container *ngTemplateOutlet=\"loading\"></ng-container>\n }\n @defer (when data?.module === 'AUDIO'){\n <rs-module-audio [data]=\"data\" [node]=\"node\"></rs-module-audio>\n } @loading {\n <ng-container *ngTemplateOutlet=\"loading\"></ng-container>\n }\n @defer (when data?.module === 'BINDER'){\n <rs-module-binder [data]=\"data\" [node]=\"node\"></rs-module-binder>\n } @loading {\n <ng-container *ngTemplateOutlet=\"loading\"></ng-container>\n }\n @defer (when data?.module === 'DDB'){\n <rs-module-ddb [data]=\"data\" [node]=\"node\"></rs-module-ddb>\n } @loading {\n <ng-container *ngTemplateOutlet=\"loading\"></ng-container>\n }\n <ng-container *ngIf=\"data.module === 'default'\">\n @defer (when data.module === 'default') {\n <rs-module-default [node]=\"node\"></rs-module-default>\n }\n </ng-container>\n <ng-container *ngIf=\"data.module === 'url'\">\n @defer (when data.module === 'url') {\n <rs-module-url [node]=\"node\" [data]=\"data\"></rs-module-url>\n }\n </ng-container>\n <ng-container *ngIf=\"data.module === 'ERROR'\">\n @defer (when data.module === 'ERROR') {\n <rs-module-error [node]=\"node\" [data]=\"data\"></rs-module-error>\n }\n </ng-container>\n </ng-container>\n\n <div class=\"progress\" *ngIf=\"(renderData$ | async) === null;\">\n <ng-container *ngIf=\"progress$ | async as progress\">\n <ng-container [ngSwitch]=\"['VIDEO', 'AUDIO'].includes(progress.module) ? 'bar' : 'spinner'\">\n <ng-container *ngSwitchCase=\"'bar'\">\n <div *ngIf=\"(progress.progress ?? 0) < 0\">Queue position: {{-(progress.progress ?? 0)}}</div>\n <mat-progress-bar [value]=\"(progress.progress ?? 0)\" *ngIf=\"(progress.progress ?? 0) >= 0\"></mat-progress-bar>\n </ng-container>\n <ng-container *ngSwitchCase=\"'spinner'\">\n <div *ngIf=\"(progress.progress ?? 0) < 0\">Queue position: {{-(progress.progress ?? 0)}</div>\n <mat-spinner [diameter]=\"50\" *ngIf=\"(progress.progress ?? 0) >= 0\"></mat-spinner>\n </ng-container>\n </ng-container>\n </ng-container>\n </div>\n</div>\n\n<ng-template #loading>\n <div class=\"progress\">\n <mat-spinner></mat-spinner>\n </div>\n</ng-template>\n","import {ModuleWithProviders, NgModule} from '@angular/core';\nimport {RenderComponent} from './lib/render.component';\nimport {CommonModule} from '@angular/common';\nimport {EduSharingUiConfigurationParams} from \"ngx-edu-sharing-ui/lib/edu-sharing-ui-configuration\";\nimport {getConfigProvider, RenderingServiceLibConfigurationParams} from \"./rendering-service-lib-configuration\";\n\n@NgModule({\n declarations: [],\n imports: [\n RenderComponent,\n CommonModule,\n ],\n exports: [\n CommonModule,\n RenderComponent,\n ],\n})\nexport class RenderingServiceLibModule {\n public static forRoot(\n params: RenderingServiceLibConfigurationParams\n): ModuleWithProviders<RenderingServiceLibModule> {\n return {\n ngModule: RenderingServiceLibModule,\n providers: [getConfigProvider(params)]\n };\n }\n}\n","/*\n * Public API Surface of edu-sharing-ui\n */\n\nexport * from './lib/rendering.module';\nexport * from './lib/module/image/image.component';\nexport * from './lib/module/video/video.component';\nexport * from './lib/module/pdf/pdf.component';\nexport * from './lib/module/url/url.component';\nexport * from './lib/module/eduhtml/eduHtml.component';\nexport * from './lib/render.component';\nexport * from './lib/asset-link.pipe';\nexport * from './rendering-service-lib.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1","i2.AssetLinkPipe","i3","i2","i4"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ngx-rendering-service-lib.mjs","sources":["../../src/lib/asset-link.pipe.ts","../../src/lib/rendering.module.ts","../../src/lib/module/image/image.component.ts","../../src/lib/module/image/image.component.html","../../src/lib/module/video/video.component.ts","../../src/lib/module/video/video.component.html","../../src/rendering-service-lib-configuration.ts","../../src/lib/module/pdf/pdf.component.ts","../../src/lib/module/pdf/pdf.component.html","../../src/lib/dto/FrontendModuleConfig.ts","../../src/lib/module/url/url.component.ts","../../src/lib/module/url/url.component.html","../../src/lib/module/eduhtml/eduHtml.component.ts","../../src/lib/module/eduhtml/eduHtml.component.html","../../src/lib/rendering-api.module.ts","../../src/module-info.service.ts","../../src/lib/render.component.ts","../../src/lib/render.component.html","../../src/rendering-service-lib.module.ts","../../src/index.ts","../../src/ngx-rendering-service-lib.ts"],"sourcesContent":["import {Injector, Pipe, PipeTransform} from '@angular/core';\nimport {RSApiConfiguration} from 'ngx-rendering-service-api';\n\n/**\n * this pipe transforms any reported asset data uri from the rendering to the uri that is currently configured for the backend\n * this is required in case the rendering service is behind a proxy, i.e. in dev mode\n */\n@Pipe({ name: 'rsAssetLink' })\nexport class AssetLinkPipe implements PipeTransform {\n constructor(\n private injector: Injector,\n ) {\n }\n\n transform(value: string | undefined) {\n if(value) {\n const str = value.split('/public');\n str[0] = this.injector.get(RSApiConfiguration).rootUrl;\n return str.join('/public');\n }\n return value;\n }\n\n}\n","import {NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {AssetLinkPipe} from './asset-link.pipe';\n\n@NgModule({\n imports: [\n CommonModule,\n ],\n declarations: [\n AssetLinkPipe,\n ],\n exports: [\n CommonModule,\n AssetLinkPipe,\n ]\n})\nexport class RenderingModule {}\n","import {AfterViewInit, Component, ElementRef, HostListener, Input, signal} from '@angular/core';\nimport {RenderingModule} from '../../rendering.module';\nimport {RenderModule} from '../RenderModule';\nimport {Node} from 'ngx-edu-sharing-api';\nimport {MatIconModule} from '@angular/material/icon';\nimport {MatButtonModule} from '@angular/material/button';\nimport {RenderData, AssetStateItem} from '../../dto/RenderData';\n\n@Component({\n selector: 'rs-module-image',\n standalone: true,\n imports: [\n RenderingModule,\n MatButtonModule,\n MatIconModule,\n ],\n templateUrl: './image.component.html',\n styleUrl: './image.component.scss'\n})\nexport class ImageComponent implements RenderModule, AfterViewInit {\n @Input() data: RenderData | undefined;\n @Input() node: Node | undefined;\n activeObject = signal<AssetStateItem | undefined>(undefined);\n constructor(public element: ElementRef) { }\n ngAfterViewInit(): void {\n this.loadOptimalSize();\n }\n\n @HostListener('document:fullscreenchange')\n private loadOptimalSize() {\n const size = this.element.nativeElement.getBoundingClientRect();\n const allFinishedItems = this.data?.items?.filter(item => item.link !== '')\n const matchingItem = allFinishedItems?.sort((a, b) => {\n // sort by the image size closest to the viewport\n return Math.abs(a.width - size.width) > Math.abs(b.width - size.width) ? 1 : -1;\n })[0]\n this.activeObject.set(matchingItem);\n }\n\n toggleFullscreen() {\n if(document.fullscreenElement) {\n void document.exitFullscreen();\n } else {\n this.element.nativeElement.requestFullscreen();\n }\n }\n}\n","<div class=\"image-wrapper\"\n *ngIf=\"activeObject()\"\n>\n <img\n #image\n [src]=\"activeObject()?.link | rsAssetLink\"\n [alt]=\"node?.title || node?.name || ''\"\n >\n <button mat-icon-button (click)=\"toggleFullscreen()\"><mat-icon>fullscreen</mat-icon></button>\n</div>\n","import {AfterViewInit, Component, ElementRef, Input, signal, ViewChild} from '@angular/core';\nimport {RenderingModule} from '../../rendering.module';\nimport {RenderModule} from '../RenderModule';\nimport {Node} from 'ngx-edu-sharing-api';\nimport {MatIcon} from '@angular/material/icon';\nimport {MatIconButton} from '@angular/material/button';\nimport {FormsModule} from '@angular/forms';\nimport {RenderData, AssetStateItem} from '../../dto/RenderData';\nimport {MatMenu, MatMenuItem, MatMenuTrigger} from '@angular/material/menu';\nimport {EduSharingUiModule} from 'ngx-edu-sharing-ui';\n\n@Component({\n selector: 'rs-module-video',\n standalone: true,\n imports: [\n RenderingModule,\n MatIcon,\n MatIconButton,\n FormsModule,\n MatMenu,\n MatMenuTrigger,\n MatMenuItem,\n EduSharingUiModule\n ],\n templateUrl: './video.component.html',\n styleUrl: './video.component.scss'\n})\nexport class VideoComponent implements RenderModule, AfterViewInit{\n @Input() data: RenderData | undefined;\n @Input() node: Node | undefined;\n @ViewChild('video') videoRef: ElementRef<HTMLVideoElement> | undefined\n activeObject = signal<AssetStateItem | undefined>(undefined);\n hasMultipleResolutions: Boolean = true\n\n ngAfterViewInit(): void {\n this.hasMultipleResolutions = (this.data?.items?.length ?? 1) > 1\n const downlink: number = (navigator as any).connection?.downlink;\n let optimalResolution = 720;\n if(downlink < 2) {\n optimalResolution = 240;\n }\n if(downlink > 6) {\n optimalResolution = 1080;\n }\n const allFinishedItems = this.data?.items?.filter(item => item.link !== '')\n this.activeObject.set(allFinishedItems?.sort((a, b) => {\n // sort by the image size closest to the viewport\n return Math.abs(a.width - optimalResolution) > Math.abs(b.width - optimalResolution) ? 1 : -1;\n })[0]);\n }\n\n switchResolution(item: AssetStateItem) {\n this.activeObject.set(item)\n const currentTime = this.videoRef?.nativeElement.currentTime\n this.videoRef?.nativeElement.load()\n if (currentTime !== undefined) {\n this.videoRef!.nativeElement.currentTime = currentTime\n }\n }\n\n protected readonly JSON = JSON;\n}\n","<div class=\"video-wrapper\" *ngIf=\"activeObject()\">\n <video\n controls\n #video\n >\n <source [src]=\"activeObject()?.link | rsAssetLink\" />\n </video>\n <button *ngIf=\"hasMultipleResolutions\"\n mat-icon-button\n [matMenuTriggerFor]=\"resolutionMenu\"\n >\n <mat-icon>settings</mat-icon>\n </button>\n <mat-menu\n #resolutionMenu=\"matMenu\"\n xPosition=\"before\"\n >\n <button\n mat-menu-item\n *ngFor=\"let item of data?.items\"\n [disabled]=\"item.link === ''\"\n (click)=\"item.height !== activeObject()?.height && switchResolution(item)\"\n >\n <ng-container\n [ngTemplateOutlet]=\"item.link !== '' ? ready : loading\"\n [ngTemplateOutletContext]=\"{item:item}\"\n >\n </ng-container>\n </button>\n\n </mat-menu>\n</div>\n\n<ng-template #ready let-item='item'>\n <div style=\"display: flex; justify-content: space-between\">\n <mat-icon *ngIf=\"item.height === activeObject()?.height\">\n done\n </mat-icon>\n <div *ngIf=\"item.height !== activeObject()?.height\"></div>\n <div>\n {{item.height}}p\n </div>\n </div>\n</ng-template>\n\n<ng-template #loading let-item='item'>\n <div style=\"display: flex; justify-content: space-between\">\n <div>\n <ng-container *ngIf=\"item.status === 'PROCESSING'; else queue\">\n {{ 'RENDERING.CONVERTING' | translate }}: {{ item.progress }}%\n </ng-container>\n <ng-template #queue>\n {{ 'RENDERING.QUEUED' | translate }}: {{ item.progress }}\n </ng-template>\n </div>\n <div style=\"padding-left: .5em\">\n {{item.height}}p\n </div>\n </div>\n</ng-template>\n","import {Injectable, InjectionToken, Provider} from '@angular/core';\n\nexport const RENDERING_SERVICE_LIB_CONFIG = new InjectionToken<RenderingServiceLibConfiguration>(\n 'RENDERING_SERVICE_LIB_CONFIG',\n);\n@Injectable({\n providedIn: 'root',\n})\nexport class RenderingServiceLibConfiguration {\n /**\n * the assets url\n * this is important for modules that require to fetch external javascript, i.e. ng2-pdfjs-viewer\n */\n assetsUrl: string | null = null;\n static create(params: RenderingServiceLibConfigurationParams = {}): RenderingServiceLibConfiguration {\n return { ...new RenderingServiceLibConfiguration(), ...params };\n }\n}\n\nexport type RenderingServiceLibConfigurationParams = Partial<RenderingServiceLibConfiguration>;\n\nexport function getConfigProvider(params?: RenderingServiceLibConfigurationParams): Provider[] {\n return [\n // Provide the params given to `forRoot()`. These can be overridden by the application by\n // providing `EDU_SHARING_API_CONFIG` itself.\n {\n provide: RENDERING_SERVICE_LIB_CONFIG,\n useValue: params,\n }\n ];\n}\n","import {Component, Inject, Input, OnChanges, Optional, SimpleChanges, ViewChild} from '@angular/core';\nimport {RenderingModule} from '../../rendering.module';\nimport {RenderModule} from '../RenderModule';\nimport {Node} from 'ngx-edu-sharing-api';\nimport {MatIconModule} from '@angular/material/icon';\nimport {MatButtonModule} from '@angular/material/button';\nimport {RenderData} from '../../dto/RenderData';\nimport {PdfJsViewerComponent, PdfJsViewerModule} from 'ng2-pdfjs-viewer';\nimport {AssetControllerService, GetAsset$Params} from 'ngx-rendering-service-api';\nimport {\n RENDERING_SERVICE_LIB_CONFIG,\n RenderingServiceLibConfiguration\n} from \"../../../rendering-service-lib-configuration\";\n\n\n@Component({\n selector: 'rs-module-pdf',\n standalone: true,\n imports: [\n RenderingModule,\n MatButtonModule,\n MatIconModule,\n PdfJsViewerModule\n ],\n templateUrl: './pdf.component.html',\n styleUrl: './pdf.component.scss'\n})\nexport class PdfComponent implements RenderModule, OnChanges {\n @Input() data: RenderData | undefined\n @Input() node: Node | undefined\n @ViewChild('pdfViewer') viewerRef: PdfJsViewerComponent | undefined\n restrictedView: boolean = false\n fileData: Blob | undefined\n\n constructor(\n private assetControllerService: AssetControllerService,\n @Optional() @Inject(RENDERING_SERVICE_LIB_CONFIG) public configuration: RenderingServiceLibConfiguration,\n ) {}\n\n ngOnChanges(changes: SimpleChanges) {\n this.downloadFile()\n }\n\n private downloadFile() {\n if (this.data?.items === undefined || this.data.items[0].link === '') {\n return\n }\n const url = new URL(this.data.items[0].link)\n const assetParams = url.searchParams.get('assetParams')\n if (assetParams === null) {\n return\n }\n const params: GetAsset$Params = {\n assetParams: assetParams\n }\n this.assetControllerService.getAsset$Response(params)\n .subscribe(async (response) => {\n let responseData = response.body\n if (response.headers.get('content-type') === 'application/octet-stream') {\n this.restrictedView = true\n responseData = responseData.slice(0, responseData.size, 'application/pdf')\n }\n this.fileData = responseData\n }\n )\n }\n\n onDocumentLoad() {\n const iFrameDocument = this.viewerRef?.iframe.nativeElement.contentWindow.document\n // Always hide document properties button in right dropdown menu\n iFrameDocument.getElementById('documentProperties').style.display = 'none'\n iFrameDocument.querySelector('.horizontalToolbarSeparator.spreadModeButtons').style.display = 'none'\n if (this.restrictedView) {\n const iFrameWindow = this.viewerRef?.iframe.nativeElement.contentWindow\n // Disable printing in iframe\n iFrameWindow.print = () => {alert('Nice try!')}\n // Disable selection tool and remove the corresponding button from the right dropdown menu\n iFrameDocument.querySelector('.textLayer').style.display = 'none'\n iFrameDocument.getElementById('cursorSelectTool').style.display = 'none'\n // Disable context menu in iframe\n iFrameDocument.body.addEventListener('contextmenu', (event:MouseEvent) => {event.preventDefault();});\n // Disable printing via keyboard shortcuts\n ['keyup', 'keydown'].forEach(type => {\n iFrameDocument.addEventListener(type, (event:KeyboardEvent) => {\n if ((event.key === 's' && event.ctrlKey) || event.key === 'F12') {\n event.preventDefault();\n if (event.stopImmediatePropagation) {\n event.stopImmediatePropagation();\n } else {\n event.stopPropagation();\n }\n }\n })\n })\n }\n }\n}\n","<div class=\"pdf-wrapper\" [class.hide-all]=\"restrictedView\" *ngIf=\"fileData !== undefined\">\n <ng2-pdfjs-viewer\n #pdfViewer\n [pdfSrc]=\"fileData\"\n [print]=\"!restrictedView\"\n [download]=\"false\"\n [openFile]=\"false\"\n [viewBookmark]=\"false\"\n [viewerFolder]=\"configuration?.assetsUrl ? configuration.assetsUrl + '/pdfjs' : ''\"\n (onDocumentLoad)=\"onDocumentLoad()\"\n >\n </ng2-pdfjs-viewer>\n</div>\n","\nexport type FrontendModuleConfig = {\n module: string,\n urlModuleConfig: UrlModuleConfig | null\n}\n\nexport type UrlModuleConfig = {\n embedding: UrlEmbeddings,\n externalId: string\n}\n\nexport enum UrlEmbeddings {\n YOUTUBE,\n VIMEO,\n VIDEO,\n AUDIO,\n IMAGE,\n LTI13TOOL,\n H5P,\n PREZI,\n LEARNINGAPPS\n}\n","import {Component, Input, OnInit} from '@angular/core';\nimport {RenderingModule} from '../../rendering.module';\nimport {RenderModule} from '../RenderModule';\nimport {Node} from 'ngx-edu-sharing-api';\nimport {MatIconModule} from '@angular/material/icon';\nimport {MatButtonModule} from '@angular/material/button';\nimport {YouTubePlayer} from '@angular/youtube-player';\nimport {DomSanitizer, SafeResourceUrl} from '@angular/platform-browser';\nimport {NgOptimizedImage} from '@angular/common';\nimport {RenderData} from '../../dto/RenderData';\nimport {UrlEmbeddings} from '../../dto/FrontendModuleConfig';\nimport {EduSharingUiModule} from 'ngx-edu-sharing-ui';\n\n@Component({\n selector: 'rs-module-url',\n standalone: true,\n imports: [\n RenderingModule,\n MatButtonModule,\n MatIconModule,\n YouTubePlayer,\n NgOptimizedImage,\n EduSharingUiModule,\n ],\n templateUrl: './url.component.html',\n styleUrl: './url.component.scss'\n})\nexport class UrlComponent implements RenderModule, OnInit {\n @Input() data: RenderData | undefined;\n @Input() node: Node | undefined;\n gdpr: any[] | undefined = undefined\n gdprOk: boolean = true\n embedding?: UrlEmbeddings\n externalId?: string\n sanitizedUrl: SafeResourceUrl | null = null\n url: string = ''\n\n constructor(private sanitizer: DomSanitizer) {\n }\n\n ngOnInit() {\n this.embedding = this.data?.frontendModuleConfig?.urlModuleConfig?.embedding\n this.externalId = this.data?.frontendModuleConfig?.urlModuleConfig?.externalId\n this.url = this.node?.properties?.['ccm:wwwurl']?.[0] || ''\n if (this.embedding === UrlEmbeddings.VIMEO) {\n this.sanitizedUrl = this.getVimeoUri()\n } else if (this.embedding === UrlEmbeddings.PREZI) {\n this.sanitizedUrl = this.getPreziUrl()\n } else if (this.embedding === UrlEmbeddings.LEARNINGAPPS) {\n this.sanitizedUrl = this.getLearningAppsUrl()\n }\n }\n\n isProtected(): boolean {\n return this.gdpr === undefined;\n }\n\n consentToGdprWarning() {\n this.gdprOk = true\n }\n\n getVimeoUri(): SafeResourceUrl {\n let url = '//player.vimeo.com/video/' + this.externalId\n return this.sanitizer.bypassSecurityTrustResourceUrl(url)\n }\n\n getPreziUrl(): SafeResourceUrl {\n const preziUrl = this.url.slice(-1) === '/' ? this.url.substring(0, this.url.length - 1) : this.url\n return this.sanitizer.bypassSecurityTrustResourceUrl(preziUrl)\n }\n\n getLearningAppsUrl(): SafeResourceUrl {\n const learningAppsUrl = this.url.replace('https://learningapps.org/', 'https://learningapps.org/view')\n return this.sanitizer.bypassSecurityTrustResourceUrl(learningAppsUrl)\n }\n\n protected readonly UrlEmbeddings = UrlEmbeddings;\n}\n","<div class=\"url-wrapper\">\n <div *ngIf=\"gdprOk\">\n <ng-container *ngIf=\"embedding === UrlEmbeddings.YOUTUBE && externalId !== ''\">\n <youtube-player\n [videoId]=\"externalId ?? ''\"\n [disableCookies]=\"true\"\n ></youtube-player>\n </ng-container>\n <ng-container *ngIf=\"embedding === UrlEmbeddings.VIMEO && externalId !== ''\">\n <iframe class=\"vimeoFrame\" [src]=\"sanitizedUrl\"></iframe>\n </ng-container>\n <ng-container *ngIf=\"embedding === UrlEmbeddings.AUDIO && url !== ''\" >\n <div class=\"audio-wrapper\">\n <video\n controls\n style=\"max-width: 100%\"\n [src]=\"url\"\n poster=\"assets/img/audio.svg\"\n >\n </video>\n </div>\n </ng-container>\n <ng-container *ngIf=\"embedding === UrlEmbeddings.IMAGE && url !== ''\">\n <div class=\"image-wrapper\">\n <img\n [ngSrc]=\"url\"\n [alt]=\"node?.title ?? 'Edu-Sharing image'\"\n [title]=\"node?.title ?? 'Edu-Sharing image'\"\n >\n </div>\n </ng-container>\n <ng-container *ngIf=\"embedding === UrlEmbeddings.VIDEO && url !== ''\">\n <div class=\"video-wrapper\">\n <video\n controls\n [src]=\"url\"\n >\n </video>\n </div>\n </ng-container>\n <ng-container *ngIf=\"(embedding === UrlEmbeddings.PREZI || embedding === UrlEmbeddings.LEARNINGAPPS) && url !== ''\">\n <iframe class=\"eduUrlFrame\" [src]=sanitizedUrl allowfullscreen=\"\" allow=\"autoplay; fullscreen\" ></iframe>\n </ng-container>\n\n </div>\n <div *ngIf=\"!gdprOk\">\n {{ 'RENDERING.GDPR.GDPR_DIALOG' | translate }}\n <button mat-button (click)=\"consentToGdprWarning()\">{{'RENDERING.GDPR.GDPR_CONTINUE' | translate}}</button>\n </div>\n</div>\n","import {Component, Input, OnInit} from '@angular/core';\nimport {RenderingModule} from '../../rendering.module';\nimport {RenderModule} from '../RenderModule';\nimport {Node} from 'ngx-edu-sharing-api';\nimport {MatIconModule} from '@angular/material/icon';\nimport {MatButtonModule} from '@angular/material/button';\nimport {RenderData} from '../../dto/RenderData';\nimport {DomSanitizer, SafeResourceUrl} from '@angular/platform-browser';\n\n@Component({\n selector: 'rs-module-edu-html',\n standalone: true,\n imports: [\n RenderingModule,\n MatButtonModule,\n MatIconModule,\n ],\n templateUrl: './eduHtml.component.html',\n styleUrl: './eduHtml.component.scss'\n})\nexport class EduHtmlComponent implements RenderModule, OnInit {\n @Input() data: RenderData | undefined\n @Input() node: Node | undefined\n sanitizedUrl: SafeResourceUrl = new class implements SafeResourceUrl {\n }\n\n constructor(private sanitizer: DomSanitizer) {\n }\n\n ngOnInit() {\n if (this.data?.items !== undefined && this.data.items[0].link) {\n this.sanitizedUrl = this.getSafeUri()\n }\n }\n\n getSafeUri() {\n if (this.data?.items !== undefined && this.data.items[0].link) {\n const uri = new URL(this.data.items[0].link)\n /**\n if (uri.hostname.includes('nip.io')) {\n uri.hostname = 'localhost'\n }\n */\n return this.sanitizer.bypassSecurityTrustResourceUrl(uri.toString())\n }\n return new class implements SafeResourceUrl {\n }\n }\n}\n","<div class=\"eduHtml-wrapper\" *ngIf=\"data?.items !== undefined\">\n <iframe class=\"frame\" [src]=\"sanitizedUrl\"></iframe>\n</div>\n","import {NgModule} from '@angular/core';\n\n@NgModule({\n imports: []\n})\nexport class RenderingApiModule {}\n","import {Injectable} from '@angular/core';\nimport {ModuleInfoControllerService} from 'ngx-rendering-service-api';\nimport {firstValueFrom} from 'rxjs';\nimport {Node, RestConstants} from 'ngx-edu-sharing-api';\nimport {FrontendModuleConfig, UrlEmbeddings, UrlModuleConfig} from './lib/dto/FrontendModuleConfig';\n\n@Injectable({providedIn: 'root'})\nexport class ModuleInfoService {\n\n private availableMediaTypes: String[] = []\n private availableMimeTypes: String[] = []\n private availableMimeTypePrefixes: String[] = []\n private availableReplicationSources: String[] = []\n private availableResourceTypes: String[] = []\n private availableRemoteRepositories: String[] = []\n\n constructor(\n private service: ModuleInfoControllerService\n ) {}\n\n async isAvailableBackendObject(node: Node| undefined): Promise<boolean> {\n if (!this.isInitialized()) {\n const result = await firstValueFrom(this.service.getModulesInfo({repoId: node?.ref.repo ?? ''}))\n result.forEach(info => {\n if (info.typeMapping.type !== undefined && info.typeMapping.type !== null) {\n this.availableMediaTypes.push(info.typeMapping.type)\n } else if (info.typeMapping.remoteRepositoryType !== undefined && info.typeMapping.remoteRepositoryType !== null) {\n this.availableRemoteRepositories.push(info.typeMapping.remoteRepositoryType)\n } else if(info.typeMapping.resourceType !== undefined && info.typeMapping.resourceType !== null) {\n this.availableResourceTypes.push(info.typeMapping.resourceType)\n } else if(info.typeMapping.replicationSource !== undefined && info.typeMapping.replicationSource !== null) {\n this.availableReplicationSources.push(info.typeMapping.replicationSource)\n } else if (info.typeMapping.mimeTypeSuffix !== undefined\n && info.typeMapping.mimeTypeSuffix !== null\n && info.typeMapping.mimeTypePrefix !== undefined\n && info.typeMapping.mimeTypePrefix !== null\n ) {\n this.availableMimeTypes.push(`${info.typeMapping.mimeTypePrefix}/${info.typeMapping.mimeTypeSuffix}`)\n } else if (info.typeMapping.mimeTypePrefix !== undefined && info.typeMapping.mimeTypePrefix !== null) {\n this.availableMimeTypePrefixes.push(info.typeMapping.mimeTypePrefix)\n }\n })\n }\n const mimeTypePrefix = (node?.mimetype ?? '').split('/', 2)[0]\n return this.availableMediaTypes.includes(node?.mediatype ?? '') ||\n this.availableRemoteRepositories.includes(node?.remote?.repository?.repositoryType ?? '') ||\n this.availableReplicationSources.includes(node?.properties?.[RestConstants.CCM_PROP_REPLICATIONSOURCE]?.[0]?? '') ||\n this.availableResourceTypes.includes(node?.properties?.[RestConstants.CCM_PROP_CCRESSOURCETYPE]?.[0]?? '') ||\n this.availableMimeTypes.includes(node?.mimetype ?? '') ||\n this.availableMimeTypePrefixes.includes(mimeTypePrefix)\n }\n\n private isInitialized(): boolean {\n return this.availableMediaTypes.length\n + this.availableMimeTypes.length\n + this.availableMimeTypePrefixes.length\n + this.availableReplicationSources.length\n + this.availableResourceTypes.length\n + this.availableRemoteRepositories.length !== 0\n }\n\n getFrontendModuleSetting(node: Node): FrontendModuleConfig {\n const urlModuleConfig = this.checkUrlModule(node)\n if (urlModuleConfig !== null) {\n return urlModuleConfig\n }\n return {\n module: 'default',\n urlModuleConfig: null\n }\n }\n\n checkUrlModule(node: Node): FrontendModuleConfig | null {\n const url = node.properties?.['ccm:wwwurl']?.[0] || ''\n const checkLearningApps = (): UrlModuleConfig | null => {\n if (node.remote?.repository?.repositoryType?.toLowerCase() === 'learningapps') {\n return {\n embedding: UrlEmbeddings.LEARNINGAPPS,\n externalId: ''\n }\n }\n return null\n }\n /**\n * Function checkYouTube\n */\n const checkYouTube = (): UrlModuleConfig | null => {\n if (node.remote?.repository?.repositoryType?.toLowerCase() === 'youtube') {\n return {\n embedding: UrlEmbeddings.YOUTUBE,\n externalId: node.remote?.id ?? ''\n }\n }\n if (url.includes('youtu.be') ) {\n const split = url.split('/')\n return {\n embedding: UrlEmbeddings.YOUTUBE,\n externalId: split[split.length - 1]\n }\n }\n if (url.includes('.youtube.com/watch?')) {\n const urlObject = new URL(url)\n return {\n embedding: UrlEmbeddings.YOUTUBE,\n externalId: urlObject.searchParams.get('v') ?? ''\n }\n }\n return null\n }\n /**\n * Function checkVimeo\n */\n const checkVimeo = (): UrlModuleConfig | null => {\n if (url.includes('vimeo.com')) {\n const split = url.split('/')\n return {\n embedding: UrlEmbeddings.VIMEO,\n externalId: split[split.length - 1]\n }\n }\n return null\n }\n const checkGenericVideo = (): UrlModuleConfig | null => {\n if (url.length > 0 && ['mp4', 'webm'].includes(url.split('.').pop() ?? '')) {\n return {\n embedding: UrlEmbeddings.VIDEO,\n externalId: ''\n }\n }\n return null\n }\n /**\n * Function checkAudio\n */\n const checkAudio = (): UrlModuleConfig | null => {\n if (url.length > 0 && node.mimetype?.startsWith('audio')) {\n return {\n embedding: UrlEmbeddings.AUDIO,\n externalId: ''\n }\n }\n return null\n }\n /**\n * Function checkLti13ToolObject\n */\n const checkLti13ToolObject = (): UrlModuleConfig | null => {\n if (node.aspects?.includes('ccm:ltitool_node')) {\n return {\n embedding: UrlEmbeddings.LTI13TOOL,\n externalId: ''\n }\n }\n return null\n }\n /**\n * Function checkImage\n */\n const checkImage = (): UrlModuleConfig | null => {\n if (node.properties?.['ccm:remoterepositorytype']?.[0] === 'DDB') {\n return null\n }\n if (node.mediatype === 'file-image') {\n return {\n embedding: UrlEmbeddings.IMAGE,\n externalId: ''\n }\n }\n const mimeTypeSplit = node.mimetype?.split('/') ?? []\n if (mimeTypeSplit.length === 2 && ['png', 'jpg', 'jpeg', 'gif'].includes(mimeTypeSplit[1])) {\n return {\n embedding: UrlEmbeddings.IMAGE,\n externalId: ''\n }\n }\n return null\n }\n /**\n * Function detectH5P\n */\n const detectH5P = (): UrlModuleConfig | null => {\n if (url.length > 0 && url.includes('h5p.org/h5p/embed')) {\n return {\n embedding: UrlEmbeddings.H5P,\n externalId: ''\n }\n }\n return null\n }\n /**\n * Function detectPrezi\n */\n const detectPrezi = (): UrlModuleConfig | null => {\n if (url.length > 0 &&\n (url.includes('prezi.com/view/') || url.includes('prezi.com/embed/') || url.includes('prezi.com/p/embed'))\n ) {\n return {\n embedding: UrlEmbeddings.PREZI,\n externalId: ''\n }\n }\n return null\n }\n\n /**\n * embedding if applicable to node\n */\n const embedding =\n checkLearningApps()\n ?? checkYouTube()\n ?? checkVimeo()\n ?? checkGenericVideo()\n ?? checkAudio()\n ?? checkImage()\n ?? checkLti13ToolObject()\n ?? detectH5P()\n ?? detectPrezi()\n\n if (embedding !== null) {\n return {\n module: 'url',\n urlModuleConfig: embedding\n }\n }\n return null\n }\n}\n","import {Component, Inject, Input, OnChanges, OnInit, Optional, SimpleChanges} from '@angular/core';\nimport {RenderingModule} from './rendering.module';\nimport {\n JobInfoControllerService,\n JobInfoReply,\n RenderControllerWrapperService,\n RenderDataRequestWithToken,\n RenderDataResponse\n} from 'ngx-rendering-service-api';\nimport {BehaviorSubject, debounceTime, firstValueFrom, interval, Subject, switchMap, takeUntil} from 'rxjs';\nimport {ImageComponent} from './module/image/image.component';\nimport {RenderingApiModule} from './rendering-api.module';\nimport {VideoComponent} from './module/video/video.component';\nimport {MatProgressSpinnerModule} from '@angular/material/progress-spinner';\nimport {EduSharingApiModule, Node} from 'ngx-edu-sharing-api';\nimport {MatProgressBarModule} from '@angular/material/progress-bar';\nimport {AssetStateItem, RenderData} from './dto/RenderData';\nimport {PdfComponent} from './module/pdf/pdf.component';\nimport {UrlComponent} from './module/url/url.component';\nimport {EduHtmlComponent} from './module/eduhtml/eduHtml.component';\nimport {ModuleInfoService} from '../module-info.service';\nimport {filter} from 'rxjs/operators';\nimport {PlatformLocation} from '@angular/common';\nimport {DefaultComponent} from './module/default/default.component';\nimport {FrontendModuleConfig} from './dto/FrontendModuleConfig';\nimport {AudioComponent} from './module/audio/audio.component';\nimport {BinderComponent} from './module/binder/binder.component';\nimport {DdbComponent} from './module/ddb/ddb.component';\nimport {TranslateService} from '@ngx-translate/core';\nimport {EduSharingUiModule} from 'ngx-edu-sharing-ui';\nimport {ErrorComponent} from './module/error/error.component';\nimport {RENDERING_SERVICE_LIB_CONFIG, RenderingServiceLibConfiguration} from \"../rendering-service-lib-configuration\";\n\n@Component({\n selector: 'rs-root',\n standalone: true,\n imports: [\n RenderingApiModule,\n RenderingModule,\n ImageComponent,\n VideoComponent,\n MatProgressSpinnerModule,\n MatProgressBarModule,\n PdfComponent,\n UrlComponent,\n EduHtmlComponent,\n DefaultComponent,\n AudioComponent,\n BinderComponent,\n DdbComponent,\n EduSharingApiModule,\n EduSharingUiModule,\n ErrorComponent,\n ],\n providers: [\n TranslateService\n ],\n templateUrl: './render.component.html',\n styleUrl: './render.component.scss'\n})\nexport class RenderComponent implements OnChanges, OnInit {\n @Input() request: RenderDataRequestWithToken | undefined;\n @Input() node: Node | undefined;\n @Input() serviceWorkerUrl: string | undefined;\n @Input() activateServiceWorker: boolean = true;\n @Input() assetUrl: string = '';\n serviceWorkerReady = false;\n loadData = new Subject<void>();\n renderData$ = new BehaviorSubject<RenderData | null>(null);\n finished = new Subject<void>();\n someButNotAllFinished = new Subject<Boolean>()\n progress$ = new BehaviorSubject<{ module: string, progress?: number } | null>(null);\n\n constructor(\n private renderControllerService: RenderControllerWrapperService,\n private jobInfoControllerService: JobInfoControllerService,\n private moduleInfoService: ModuleInfoService,\n private platformLocation: PlatformLocation,\n @Optional() @Inject(RENDERING_SERVICE_LIB_CONFIG) public configuration: RenderingServiceLibConfiguration,\n ) {\n this.loadData.pipe(\n filter(() => this.node !== undefined && this.serviceWorkerReady),\n debounceTime(10),\n switchMap(() => {\n // subscribe error handling\n return this.checkModule()\n })\n ).subscribe({\n next: async (frontendModule) => {\n // No further calls to rs2 necessary if we have a frontend only module\n if (frontendModule !== null) {\n const data: RenderData = {\n module: frontendModule.module,\n frontendModuleConfig: frontendModule\n }\n this.renderData$.next(data)\n this.finished.next()\n } else {\n try {\n const renderResponseData = await firstValueFrom(this.renderControllerService.getRenderDataToken(this.request!!))\n // Case 1: no job returned => no polling needed\n if (renderResponseData.jobId === null) {\n this.handleRenderingResponseWithoutJob(renderResponseData)\n } else {\n this.progress$.next({module: renderResponseData.module ?? ''});\n interval(500).pipe(\n takeUntil(this.finished),\n switchMap(() => this.jobInfoControllerService.getJobInfo({jobId: renderResponseData.jobId!!}).pipe()),\n ).subscribe({\n next: async (jobInfo) => {\n // Some, but not all, jobs are in a final status (this means some are still QUEUED or PROCESSING)\n if (jobInfo.jobs.some(j => j.status === 'FINISHED') && jobInfo.status !== 'FINISHED') {\n this.handleJobInfoWithSubJobsInProgress(renderResponseData, jobInfo)\n // main job finished or partially failed\n } else if (jobInfo.status === 'FINISHED' || jobInfo.status === 'PARTIALLY_FAILED') {\n this.handleFinishedOrPartialJobInfo(renderResponseData, jobInfo)\n // Main job failed => no module but error page\n } else if (jobInfo.status === 'FAILED') {\n this.handleFailedMainJob(jobInfo)\n } else {\n // no finished jobs -> show either one progress bar with race leader (progress 0-100)\n // or queue position (progress (-inf,-1])\n this.handleMainJobWithNoSubJobInFinalStatus(jobInfo)\n }\n },\n error: error => {\n this.handleApiError(error)\n }});\n }\n } catch (error) {\n this.handleApiError(error)\n }\n }\n },\n error: (error) => {\n this.handleApiError(error)\n }\n });\n }\n\n handleApiError(error: any) {\n const publicMessage = error.error.userMessage ?? 'GENERIC_ERROR_MESSAGE'\n const data: RenderData = {\n module: 'ERROR',\n publicErrorMessage: publicMessage\n }\n this.renderData$.next(data)\n this.finished.next()\n }\n\n async ngOnInit() {\n if (this.assetUrl !== '') {\n console.info(\"setting assetUrl to: \" + this.assetUrl + \"\");\n this.configuration.assetsUrl = this.assetUrl;\n }\n if (!this.activateServiceWorker) {\n this.serviceWorkerReady = true;\n this.loadData.next();\n }\n // await firstValueFrom(this.translationsService.initialize())\n if ('serviceWorker' in navigator) {\n const reg = await navigator.serviceWorker.getRegistrations();\n await Promise.all(reg?.map((r: ServiceWorkerRegistration) => r.unregister()));\n const serviceWorkerUrl = this.serviceWorkerUrl ?? (this.platformLocation.getBaseHrefFromDOM() + 'edu-service-worker.js');\n const scope = this.serviceWorkerUrl ? '/' : this.platformLocation.getBaseHrefFromDOM();\n const registration = await navigator.serviceWorker.register(serviceWorkerUrl, {\n scope: scope\n });\n if (registration.waiting) {\n registration.waiting.postMessage({type: 'SKIP_WAITING'});\n }\n this.serviceWorkerReady = true;\n this.loadData.next();\n registration.onupdatefound = () => {\n const newWorker = registration.installing;\n if (newWorker) {\n newWorker.onstatechange = () => {\n if (newWorker.state === 'installed') {\n if (navigator.serviceWorker.controller) {\n newWorker.postMessage({type: 'SKIP_WAITING'});\n }\n }\n };\n }\n };\n navigator.serviceWorker.addEventListener('controllerchange', () => {\n console.info('Service Worker controlling this page.');\n });\n } else {\n console.warn('Service worker API not available');\n }\n }\n\n async ngOnChanges(_: SimpleChanges) {\n this.loadData.next();\n }\n\n async checkModule(): Promise<FrontendModuleConfig | null> {\n if (!await this.moduleInfoService.isAvailableBackendObject(this.node)) {\n if (this.node !== undefined) {\n return this.moduleInfoService.getFrontendModuleSetting(this.node)\n }\n return {module: 'default', urlModuleConfig: null}\n } else {\n return null\n }\n }\n\n handleRenderingResponseWithoutJob(renderDataResponse: RenderDataResponse) {\n const items = renderDataResponse.objectLinks?.map(item => {\n const assetItem: AssetStateItem = {\n link: item.link,\n progress: 100,\n height: item.height,\n width: item.width,\n additionalData: undefined,\n status: 'FINISHED'\n }\n return assetItem\n })\n const data: RenderData = {\n module: renderDataResponse.module ?? '',\n items: items\n }\n renderDataResponse.objectLinks !== undefined && this.renderData$.next(data);\n this.finished.next();\n }\n\n handleJobInfoWithSubJobsInProgress(renderDataResponse: RenderDataResponse, jobInfo: JobInfoReply) {\n const items = jobInfo.jobs.map(subJob => {\n const assetItem: AssetStateItem = {\n link: subJob.objectLink?.link ?? '',\n progress: subJob.status !== 'QUEUED' ? subJob.progress : -(subJob.progress + 1),\n height: subJob.objectLink?.height ?? subJob.quality,\n width: subJob.objectLink?.width ?? 0,\n additionalData: subJob.additionalData,\n status: subJob.status,\n }\n return assetItem\n })\n const data: RenderData = {\n module: renderDataResponse.module ?? '',\n items: items\n }\n this.renderData$.next(data)\n this.someButNotAllFinished.next(true)\n }\n\n handleFinishedOrPartialJobInfo(renderDataResponse: RenderDataResponse, jobInfo: JobInfoReply) {\n const items = jobInfo.jobs.map(subJob => {\n const assetItem: AssetStateItem = {\n link: subJob.objectLink?.link ?? '',\n progress: subJob.progress,\n height: subJob.objectLink?.height ?? subJob.quality,\n width: subJob.objectLink?.width ?? 0,\n additionalData: subJob.additionalData,\n publicErrorMessage: subJob.error?.userMessage,\n status:subJob.status,\n }\n return assetItem\n })\n const data: RenderData = {\n module: renderDataResponse.module ?? '',\n items: items\n }\n this.renderData$.next(data)\n this.finished.next()\n }\n\n handleFailedMainJob(jobInfo: JobInfoReply) {\n const data: RenderData = {\n module: 'ERROR',\n publicErrorMessage: jobInfo.errorMessage?.userMessage ?? 'GENERIC_ERROR_MESSAGE'\n }\n this.renderData$.next(data)\n this.finished.next()\n }\n\n handleMainJobWithNoSubJobInFinalStatus(jobInfo: JobInfoReply) {\n let progress = 0\n if (jobInfo.jobs.some(j => j.status === 'PROCESSING')) {\n progress = Math.max(...jobInfo.jobs.map(j => j.progress))\n } else if (jobInfo.jobs.some(j => j.status === 'QUEUED')) {\n progress = -(Math.min(...jobInfo.jobs.map(j => j.progress + 1)))\n }\n this.progress$.next({\n module: jobInfo.module ?? '',\n progress: progress\n });\n }\n}\n","<div class=\"module module-{{(renderData$ | async)?.module}}\">\n <ng-container *ngIf=\"renderData$ | async as data\">\n @defer (when data?.module === 'IMAGE'){\n <rs-module-image [data]=\"data\" [node]=\"node\"></rs-module-image>\n } @loading {\n <ng-container *ngTemplateOutlet=\"loading\"></ng-container>\n }\n @defer (when data?.module === 'VIDEO'){\n <rs-module-video [data]=\"data\" [node]=\"node\"></rs-module-video>\n } @loading {\n <ng-container *ngTemplateOutlet=\"loading\"></ng-container>\n }\n @defer (when data?.module === 'PDF' || data?.module === 'DOCUMENT') {\n <rs-module-pdf [data]=\"data\" [node]=\"node\"></rs-module-pdf>\n } @loading {\n <ng-container *ngTemplateOutlet=\"loading\"></ng-container>\n }\n @defer (when data?.module === 'EDUHTML' || data?.module === 'H5P' || data?.module === 'JUPYTER' || data.module === 'SPREADSHEET') {\n <rs-module-edu-html [data]=\"data\" [node]=\"node\"></rs-module-edu-html>\n } @loading {\n <ng-container *ngTemplateOutlet=\"loading\"></ng-container>\n }\n @defer (when data?.module === 'AUDIO'){\n <rs-module-audio [data]=\"data\" [node]=\"node\"></rs-module-audio>\n } @loading {\n <ng-container *ngTemplateOutlet=\"loading\"></ng-container>\n }\n @defer (when data?.module === 'BINDER'){\n <rs-module-binder [data]=\"data\" [node]=\"node\"></rs-module-binder>\n } @loading {\n <ng-container *ngTemplateOutlet=\"loading\"></ng-container>\n }\n @defer (when data?.module === 'DDB'){\n <rs-module-ddb [data]=\"data\" [node]=\"node\"></rs-module-ddb>\n } @loading {\n <ng-container *ngTemplateOutlet=\"loading\"></ng-container>\n }\n <ng-container *ngIf=\"data.module === 'default'\">\n @defer (when data.module === 'default') {\n <rs-module-default [node]=\"node\"></rs-module-default>\n }\n </ng-container>\n <ng-container *ngIf=\"data.module === 'url'\">\n @defer (when data.module === 'url') {\n <rs-module-url [node]=\"node\" [data]=\"data\"></rs-module-url>\n }\n </ng-container>\n <ng-container *ngIf=\"data.module === 'ERROR'\">\n @defer (when data.module === 'ERROR') {\n <rs-module-error [node]=\"node\" [data]=\"data\"></rs-module-error>\n }\n </ng-container>\n </ng-container>\n\n <div class=\"progress\" *ngIf=\"(renderData$ | async) === null;\">\n <ng-container *ngIf=\"progress$ | async as progress\">\n <ng-container [ngSwitch]=\"['VIDEO', 'AUDIO'].includes(progress.module) ? 'bar' : 'spinner'\">\n <ng-container *ngSwitchCase=\"'bar'\">\n <div *ngIf=\"(progress.progress ?? 0) < 0\">Queue position: {{-(progress.progress ?? 0)}}</div>\n <mat-progress-bar [value]=\"(progress.progress ?? 0)\" *ngIf=\"(progress.progress ?? 0) >= 0\"></mat-progress-bar>\n </ng-container>\n <ng-container *ngSwitchCase=\"'spinner'\">\n <div *ngIf=\"(progress.progress ?? 0) < 0\">Queue position: {{-(progress.progress ?? 0)}</div>\n <mat-spinner [diameter]=\"50\" *ngIf=\"(progress.progress ?? 0) >= 0\"></mat-spinner>\n </ng-container>\n </ng-container>\n </ng-container>\n </div>\n</div>\n\n<ng-template #loading>\n <div class=\"progress\">\n <mat-spinner></mat-spinner>\n </div>\n</ng-template>\n","import {ModuleWithProviders, NgModule} from '@angular/core';\nimport {RenderComponent} from './lib/render.component';\nimport {CommonModule} from '@angular/common';\nimport {EduSharingUiConfigurationParams} from \"ngx-edu-sharing-ui/lib/edu-sharing-ui-configuration\";\nimport {getConfigProvider, RenderingServiceLibConfigurationParams} from \"./rendering-service-lib-configuration\";\n\n@NgModule({\n declarations: [],\n imports: [\n RenderComponent,\n CommonModule,\n ],\n exports: [\n CommonModule,\n RenderComponent,\n ],\n})\nexport class RenderingServiceLibModule {\n public static forRoot(\n params: RenderingServiceLibConfigurationParams\n): ModuleWithProviders<RenderingServiceLibModule> {\n return {\n ngModule: RenderingServiceLibModule,\n providers: [getConfigProvider(params)]\n };\n }\n}\n","/*\n * Public API Surface of edu-sharing-ui\n */\n\nexport * from './lib/rendering.module';\nexport * from './lib/module/image/image.component';\nexport * from './lib/module/video/video.component';\nexport * from './lib/module/pdf/pdf.component';\nexport * from './lib/module/url/url.component';\nexport * from './lib/module/eduhtml/eduHtml.component';\nexport * from './lib/render.component';\nexport * from './lib/asset-link.pipe';\nexport * from './rendering-service-lib.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1","i2.AssetLinkPipe","i3","i2","i4"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AAGA;;;AAGG;MAEU,aAAa,CAAA;AACxB,IAAA,WAAA,CACU,QAAkB,EAAA;QAAlB,IAAQ,CAAA,QAAA,GAAR,QAAQ,CAAU;KAE3B;AAED,IAAA,SAAS,CAAC,KAAyB,EAAA;QACjC,IAAG,KAAK,EAAE;YACR,MAAM,GAAG,GAAG,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;AACnC,YAAA,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC,OAAO,CAAC;AACvD,YAAA,OAAO,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;SAC5B;AACD,QAAA,OAAO,KAAK,CAAC;KACd;8GAbU,aAAa,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,QAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA,CAAA,EAAA;4GAAb,aAAa,EAAA,IAAA,EAAA,aAAA,EAAA,CAAA,CAAA,EAAA;;2FAAb,aAAa,EAAA,UAAA,EAAA,CAAA;kBADzB,IAAI;mBAAC,EAAE,IAAI,EAAE,aAAa,EAAE,CAAA;;;MCShB,eAAe,CAAA;8GAAf,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA,EAAA;AAAf,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,eAAe,EAPxB,YAAA,EAAA,CAAA,aAAa,CAHb,EAAA,OAAA,EAAA,CAAA,YAAY,aAMZ,YAAY;YACZ,aAAa,CAAA,EAAA,CAAA,CAAA,EAAA;+GAGJ,eAAe,EAAA,OAAA,EAAA,CAVxB,YAAY,EAMZ,YAAY,CAAA,EAAA,CAAA,CAAA,EAAA;;2FAIH,eAAe,EAAA,UAAA,EAAA,CAAA;kBAZ3B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,OAAO,EAAE;wBACP,YAAY;AACb,qBAAA;AACD,oBAAA,YAAY,EAAE;wBACZ,aAAa;AACd,qBAAA;AACD,oBAAA,OAAO,EAAE;wBACP,YAAY;wBACZ,aAAa;AACd,qBAAA;AACF,iBAAA,CAAA;;;MCIY,cAAc,CAAA;AAIzB,IAAA,WAAA,CAAmB,OAAmB,EAAA;QAAnB,IAAO,CAAA,OAAA,GAAP,OAAO,CAAY;AADtC,QAAA,IAAA,CAAA,YAAY,GAAG,MAAM,CAA6B,SAAS,CAAC,CAAC;KAClB;IAC3C,eAAe,GAAA;QACb,IAAI,CAAC,eAAe,EAAE,CAAC;KACxB;IAGO,eAAe,GAAA;QACrB,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,qBAAqB,EAAE,CAAC;QAChE,MAAM,gBAAgB,GAAG,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,KAAK,EAAE,CAAC,CAAA;QAC3E,MAAM,YAAY,GAAG,gBAAgB,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAI;;AAEnD,YAAA,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAClF,SAAC,CAAC,CAAC,CAAC,CAAC,CAAA;AACL,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;KACrC;IAED,gBAAgB,GAAA;AACd,QAAA,IAAG,QAAQ,CAAC,iBAAiB,EAAE;AAC7B,YAAA,KAAK,QAAQ,CAAC,cAAc,EAAE,CAAC;SAChC;aAAM;AACL,YAAA,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,iBAAiB,EAAE,CAAC;SAChD;KACF;8GA1BU,cAAc,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAAd,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,cAAc,8LCnB3B,oSAUA,EAAA,MAAA,EAAA,CAAA,4NAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDEI,eAAe,EACf,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAC,aAAA,EAAA,IAAA,EAAA,aAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,eAAe,6IACf,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA,EAAA;;2FAKJ,cAAc,EAAA,UAAA,EAAA,CAAA;kBAX1B,SAAS;+BACE,iBAAiB,EAAA,UAAA,EACf,IAAI,EACP,OAAA,EAAA;wBACP,eAAe;wBACf,eAAe;wBACf,aAAa;AACd,qBAAA,EAAA,QAAA,EAAA,oSAAA,EAAA,MAAA,EAAA,CAAA,4NAAA,CAAA,EAAA,CAAA;+EAKQ,IAAI,EAAA,CAAA;sBAAZ,KAAK;gBACG,IAAI,EAAA,CAAA;sBAAZ,KAAK;gBAQE,eAAe,EAAA,CAAA;sBADtB,YAAY;uBAAC,2BAA2B,CAAA;;;;;;;;MED9B,cAAc,CAAA;AAhB3B,IAAA,WAAA,GAAA;AAoBE,QAAA,IAAA,CAAA,YAAY,GAAG,MAAM,CAA6B,SAAS,CAAC,CAAC;QAC7D,IAAsB,CAAA,sBAAA,GAAY,IAAI,CAAA;QA4BnB,IAAI,CAAA,IAAA,GAAG,IAAI,CAAC;AAChC,KAAA;IA3BC,eAAe,GAAA;AACb,QAAA,IAAI,CAAC,sBAAsB,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,IAAI,CAAC,IAAI,CAAC,CAAA;AACjE,QAAA,MAAM,QAAQ,GAAY,SAAiB,CAAC,UAAU,EAAE,QAAQ,CAAC;QACjE,IAAI,iBAAiB,GAAG,GAAG,CAAC;AAC5B,QAAA,IAAG,QAAQ,GAAG,CAAC,EAAE;YACb,iBAAiB,GAAG,GAAG,CAAC;SAC3B;AACD,QAAA,IAAG,QAAQ,GAAG,CAAC,EAAE;YACf,iBAAiB,GAAG,IAAI,CAAC;SAC1B;QACD,MAAM,gBAAgB,GAAG,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,KAAK,EAAE,CAAC,CAAA;AAC3E,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,gBAAgB,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAI;;AAEpD,YAAA,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG,iBAAiB,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG,iBAAiB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAChG,SAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;KACR;AAED,IAAA,gBAAgB,CAAC,IAAoB,EAAA;AACnC,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;QAC3B,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,EAAE,aAAa,CAAC,WAAW,CAAA;AAC5D,QAAA,IAAI,CAAC,QAAQ,EAAE,aAAa,CAAC,IAAI,EAAE,CAAA;AACnC,QAAA,IAAI,WAAW,KAAK,SAAS,EAAE;YAC7B,IAAI,CAAC,QAAS,CAAC,aAAa,CAAC,WAAW,GAAG,WAAW,CAAA;SACvD;KACF;8GA/BU,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAAd,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,cAAc,sNC3B3B,mpDA4DA,EAAA,MAAA,EAAA,CAAA,0LAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,ED7CI,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAD,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAC,aAAA,EAAA,IAAA,EAAA,aAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACf,OAAO,EACP,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,aAAa,EACb,QAAA,EAAA,yBAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,WAAW,+BACX,OAAO,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,eAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,WAAA,EAAA,WAAA,EAAA,gBAAA,EAAA,aAAA,EAAA,OAAA,EAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,OAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACP,cAAc,EACd,QAAA,EAAA,6CAAA,EAAA,MAAA,EAAA,CAAA,sBAAA,EAAA,mBAAA,EAAA,oBAAA,EAAA,4BAAA,CAAA,EAAA,OAAA,EAAA,CAAA,YAAA,EAAA,YAAA,EAAA,YAAA,EAAA,aAAA,CAAA,EAAA,QAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,WAAW,qIACX,kBAAkB,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,aAAA,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,CAAA,CAAA,EAAA;;2FAKT,cAAc,EAAA,UAAA,EAAA,CAAA;kBAhB1B,SAAS;+BACE,iBAAiB,EAAA,UAAA,EACf,IAAI,EACP,OAAA,EAAA;wBACP,eAAe;wBACf,OAAO;wBACP,aAAa;wBACb,WAAW;wBACX,OAAO;wBACP,cAAc;wBACd,WAAW;wBACX,kBAAkB;AACnB,qBAAA,EAAA,QAAA,EAAA,mpDAAA,EAAA,MAAA,EAAA,CAAA,0LAAA,CAAA,EAAA,CAAA;8BAKQ,IAAI,EAAA,CAAA;sBAAZ,KAAK;gBACG,IAAI,EAAA,CAAA;sBAAZ,KAAK;gBACc,QAAQ,EAAA,CAAA;sBAA3B,SAAS;uBAAC,OAAO,CAAA;;;;;;;;AE5Bb,MAAM,4BAA4B,GAAG,IAAI,cAAc,CAC5D,8BAA8B,CAC/B,CAAC;MAIW,gCAAgC,CAAA;AAH7C,IAAA,WAAA,GAAA;AAIE;;;AAGG;QACH,IAAS,CAAA,SAAA,GAAkB,IAAI,CAAC;AAIjC,KAAA;AAHC,IAAA,OAAO,MAAM,CAAC,MAAA,GAAiD,EAAE,EAAA;QAC/D,OAAO,EAAE,GAAG,IAAI,gCAAgC,EAAE,EAAE,GAAG,MAAM,EAAE,CAAC;KACjE;8GARU,gCAAgC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA,EAAA;AAAhC,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,gCAAgC,cAF/B,MAAM,EAAA,CAAA,CAAA,EAAA;;2FAEP,gCAAgC,EAAA,UAAA,EAAA,CAAA;kBAH5C,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA,CAAA;;AAcK,SAAU,iBAAiB,CAAC,MAA+C,EAAA;IAC/E,OAAO;;;AAGL,QAAA;AACE,YAAA,OAAO,EAAE,4BAA4B;AACrC,YAAA,QAAQ,EAAE,MAAM;AACjB,SAAA;KACF,CAAC;AACJ;;MCHa,YAAY,CAAA;IAOvB,WACU,CAAA,sBAA8C,EACG,aAA+C,EAAA;QADhG,IAAsB,CAAA,sBAAA,GAAtB,sBAAsB,CAAwB;QACG,IAAa,CAAA,aAAA,GAAb,aAAa,CAAkC;QAL1G,IAAc,CAAA,cAAA,GAAY,KAAK,CAAA;KAM3B;AAEJ,IAAA,WAAW,CAAC,OAAsB,EAAA;QAChC,IAAI,CAAC,YAAY,EAAE,CAAA;KACpB;IAEO,YAAY,GAAA;QAClB,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,KAAK,SAAS,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,EAAE,EAAE;YACpE,OAAM;SACP;AACD,QAAA,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAA;QAC5C,MAAM,WAAW,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,aAAa,CAAC,CAAA;AACvD,QAAA,IAAI,WAAW,KAAK,IAAI,EAAE;YACxB,OAAM;SACP;AACD,QAAA,MAAM,MAAM,GAAoB;AAC9B,YAAA,WAAW,EAAE,WAAW;SACzB,CAAA;AACD,QAAA,IAAI,CAAC,sBAAsB,CAAC,iBAAiB,CAAC,MAAM,CAAC;AAClD,aAAA,SAAS,CAAC,OAAO,QAAQ,KAAI;AAC5B,YAAA,IAAI,YAAY,GAAG,QAAQ,CAAC,IAAI,CAAA;YAChC,IAAI,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,KAAK,0BAA0B,EAAE;AACvE,gBAAA,IAAI,CAAC,cAAc,GAAG,IAAI,CAAA;AAC1B,gBAAA,YAAY,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,YAAY,CAAC,IAAI,EAAE,iBAAiB,CAAC,CAAA;aAC3E;AACD,YAAA,IAAI,CAAC,QAAQ,GAAG,YAAY,CAAA;AAC9B,SAAC,CACF,CAAA;KACF;IAED,cAAc,GAAA;AACZ,QAAA,MAAM,cAAc,GAAG,IAAI,CAAC,SAAS,EAAE,MAAM,CAAC,aAAa,CAAC,aAAa,CAAC,QAAQ,CAAA;;QAElF,cAAc,CAAC,cAAc,CAAC,oBAAoB,CAAC,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAA;QAC1E,cAAc,CAAC,aAAa,CAAC,+CAA+C,CAAC,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAA;AACpG,QAAA,IAAI,IAAI,CAAC,cAAc,EAAE;YACvB,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,EAAE,MAAM,CAAC,aAAa,CAAC,aAAa,CAAA;;AAEvE,YAAA,YAAY,CAAC,KAAK,GAAG,MAAK,EAAE,KAAK,CAAC,WAAW,CAAC,CAAA,EAAC,CAAA;;YAE/C,cAAc,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAA;YACjE,cAAc,CAAC,cAAc,CAAC,kBAAkB,CAAC,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAA;;YAExE,cAAc,CAAC,IAAI,CAAC,gBAAgB,CAAC,aAAa,EAAE,CAAC,KAAgB,KAAM,EAAA,KAAK,CAAC,cAAc,EAAE,CAAC,EAAC,CAAC,CAAC;;YAErG,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC,OAAO,CAAC,IAAI,IAAG;gBAClC,cAAc,CAAC,gBAAgB,CAAC,IAAI,EAAE,CAAC,KAAmB,KAAI;AAC5D,oBAAA,IAAI,CAAC,KAAK,CAAC,GAAG,KAAK,GAAG,IAAI,KAAK,CAAC,OAAO,KAAK,KAAK,CAAC,GAAG,KAAK,KAAK,EAAE;wBAC/D,KAAK,CAAC,cAAc,EAAE,CAAC;AACvB,wBAAA,IAAI,KAAK,CAAC,wBAAwB,EAAE;4BAClC,KAAK,CAAC,wBAAwB,EAAE,CAAC;yBAClC;6BAAM;4BACL,KAAK,CAAC,eAAe,EAAE,CAAC;yBACzB;qBACF;AACH,iBAAC,CAAC,CAAA;AACJ,aAAC,CAAC,CAAA;SACH;KACF;AApEU,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,YAAY,wDASD,4BAA4B,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;kGATvC,YAAY,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,WAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,WAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC3BzB,icAaA,EDMI,MAAA,EAAA,CAAA,4JAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,eAAe,kIACf,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACf,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACb,iBAAiB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,kBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,eAAA,EAAA,cAAA,EAAA,OAAA,EAAA,YAAA,EAAA,YAAA,EAAA,MAAA,EAAA,MAAA,EAAA,WAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,QAAA,EAAA,QAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,aAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,QAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,cAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA,EAAA;;2FAKR,YAAY,EAAA,UAAA,EAAA,CAAA;kBAZxB,SAAS;+BACE,eAAe,EAAA,UAAA,EACb,IAAI,EACP,OAAA,EAAA;wBACP,eAAe;wBACf,eAAe;wBACf,aAAa;wBACb,iBAAiB;AAClB,qBAAA,EAAA,QAAA,EAAA,icAAA,EAAA,MAAA,EAAA,CAAA,4JAAA,CAAA,EAAA,CAAA;;0BAaE,QAAQ;;0BAAI,MAAM;2BAAC,4BAA4B,CAAA;yCARzC,IAAI,EAAA,CAAA;sBAAZ,KAAK;gBACG,IAAI,EAAA,CAAA;sBAAZ,KAAK;gBACkB,SAAS,EAAA,CAAA;sBAAhC,SAAS;uBAAC,WAAW,CAAA;;;;;;;;AEnBxB,IAAY,aAUX,CAAA;AAVD,CAAA,UAAY,aAAa,EAAA;AACvB,IAAA,aAAA,CAAA,aAAA,CAAA,SAAA,CAAA,GAAA,CAAA,CAAA,GAAA,SAAO,CAAA;AACP,IAAA,aAAA,CAAA,aAAA,CAAA,OAAA,CAAA,GAAA,CAAA,CAAA,GAAA,OAAK,CAAA;AACL,IAAA,aAAA,CAAA,aAAA,CAAA,OAAA,CAAA,GAAA,CAAA,CAAA,GAAA,OAAK,CAAA;AACL,IAAA,aAAA,CAAA,aAAA,CAAA,OAAA,CAAA,GAAA,CAAA,CAAA,GAAA,OAAK,CAAA;AACL,IAAA,aAAA,CAAA,aAAA,CAAA,OAAA,CAAA,GAAA,CAAA,CAAA,GAAA,OAAK,CAAA;AACL,IAAA,aAAA,CAAA,aAAA,CAAA,WAAA,CAAA,GAAA,CAAA,CAAA,GAAA,WAAS,CAAA;AACT,IAAA,aAAA,CAAA,aAAA,CAAA,KAAA,CAAA,GAAA,CAAA,CAAA,GAAA,KAAG,CAAA;AACH,IAAA,aAAA,CAAA,aAAA,CAAA,OAAA,CAAA,GAAA,CAAA,CAAA,GAAA,OAAK,CAAA;AACL,IAAA,aAAA,CAAA,aAAA,CAAA,cAAA,CAAA,GAAA,CAAA,CAAA,GAAA,cAAY,CAAA;AACd,CAAC,EAVW,aAAa,KAAb,aAAa,GAUxB,EAAA,CAAA,CAAA;;MCMY,YAAY,CAAA;AAUvB,IAAA,WAAA,CAAoB,SAAuB,EAAA;QAAvB,IAAS,CAAA,SAAA,GAAT,SAAS,CAAc;QAP3C,IAAI,CAAA,IAAA,GAAsB,SAAS,CAAA;QACnC,IAAM,CAAA,MAAA,GAAY,IAAI,CAAA;QAGtB,IAAY,CAAA,YAAA,GAA2B,IAAI,CAAA;QAC3C,IAAG,CAAA,GAAA,GAAW,EAAE,CAAA;QAyCG,IAAa,CAAA,aAAA,GAAG,aAAa,CAAC;KAtChD;IAED,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,IAAI,EAAE,oBAAoB,EAAE,eAAe,EAAE,SAAS,CAAA;AAC5E,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,IAAI,EAAE,oBAAoB,EAAE,eAAe,EAAE,UAAU,CAAA;AAC9E,QAAA,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,IAAI,EAAE,UAAU,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAA;QAC3D,IAAI,IAAI,CAAC,SAAS,KAAK,aAAa,CAAC,KAAK,EAAE;AAC1C,YAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,WAAW,EAAE,CAAA;SACvC;aAAM,IAAI,IAAI,CAAC,SAAS,KAAK,aAAa,CAAC,KAAK,EAAE;AACjD,YAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,WAAW,EAAE,CAAA;SACvC;aAAM,IAAI,IAAI,CAAC,SAAS,KAAK,aAAa,CAAC,YAAY,EAAE;AACxD,YAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAA;SAC9C;KACF;IAED,WAAW,GAAA;AACT,QAAA,OAAO,IAAI,CAAC,IAAI,KAAK,SAAS,CAAC;KAChC;IAED,oBAAoB,GAAA;AACjB,QAAA,IAAI,CAAC,MAAM,GAAG,IAAI,CAAA;KACpB;IAED,WAAW,GAAA;AACT,QAAA,IAAI,GAAG,GAAG,2BAA2B,GAAG,IAAI,CAAC,UAAU,CAAA;QACvD,OAAO,IAAI,CAAC,SAAS,CAAC,8BAA8B,CAAC,GAAG,CAAC,CAAA;KAC1D;IAED,WAAW,GAAA;AACT,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAA;QACnG,OAAO,IAAI,CAAC,SAAS,CAAC,8BAA8B,CAAC,QAAQ,CAAC,CAAA;KAC/D;IAED,kBAAkB,GAAA;AAChB,QAAA,MAAM,eAAe,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,2BAA2B,EAAE,+BAA+B,CAAC,CAAA;QACtG,OAAO,IAAI,CAAC,SAAS,CAAC,8BAA8B,CAAC,eAAe,CAAC,CAAA;KACtE;8GA/CU,YAAY,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAF,IAAA,CAAA,YAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAAZ,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAY,EC3BzB,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,syDAkDA,EDjCI,MAAA,EAAA,CAAA,8NAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,eAAe,EACf,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAG,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,eAAe,EACf,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAD,IAAA,CAAA,SAAA,EAAA,QAAA,EAAA,6GAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,aAAa,EACb,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,aAAa,EACb,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,OAAA,EAAA,cAAA,EAAA,YAAA,EAAA,kBAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,SAAA,EAAA,oBAAA,EAAA,0BAAA,EAAA,wBAAA,EAAA,yBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,OAAA,EAAA,aAAA,EAAA,OAAA,EAAA,WAAA,EAAA,uBAAA,EAAA,oBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,gBAAgB,+OAChB,kBAAkB,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAE,IAAA,CAAA,aAAA,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,CAAA,CAAA,EAAA;;2FAKT,YAAY,EAAA,UAAA,EAAA,CAAA;kBAdxB,SAAS;+BACE,eAAe,EAAA,UAAA,EACb,IAAI,EACP,OAAA,EAAA;wBACP,eAAe;wBACf,eAAe;wBACf,aAAa;wBACb,aAAa;wBACb,gBAAgB;wBAChB,kBAAkB;AACnB,qBAAA,EAAA,QAAA,EAAA,syDAAA,EAAA,MAAA,EAAA,CAAA,8NAAA,CAAA,EAAA,CAAA;mFAKQ,IAAI,EAAA,CAAA;sBAAZ,KAAK;gBACG,IAAI,EAAA,CAAA;sBAAZ,KAAK;;;;;;;;METK,gBAAgB,CAAA;AAM3B,IAAA,WAAA,CAAoB,SAAuB,EAAA;QAAvB,IAAS,CAAA,SAAA,GAAT,SAAS,CAAc;AAH3C,QAAA,IAAA,CAAA,YAAY,GAAoB,IAAI,MAAA;SACnC,CAAA;KAGA;IAED,QAAQ,GAAA;AACN,QAAA,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,KAAK,SAAS,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE;AAC7D,YAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,UAAU,EAAE,CAAA;SACtC;KACF;IAED,UAAU,GAAA;AACR,QAAA,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,KAAK,SAAS,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE;AAC7D,YAAA,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAA;AAC5C;;;;AAII;YACJ,OAAO,IAAI,CAAC,SAAS,CAAC,8BAA8B,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAA;SACrE;AACD,QAAA,OAAO,IAAI,MAAA;SACV,CAAA;KACF;8GA3BU,gBAAgB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAJ,IAAA,CAAA,YAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAAhB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,gBAAgB,sHCpB7B,2IAGA,EAAA,MAAA,EAAA,CAAA,uIAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDUI,eAAe,EACf,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAG,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,eAAe,8BACf,aAAa,EAAA,CAAA,EAAA,CAAA,CAAA,EAAA;;2FAKJ,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAX5B,SAAS;+BACE,oBAAoB,EAAA,UAAA,EAClB,IAAI,EACP,OAAA,EAAA;wBACP,eAAe;wBACf,eAAe;wBACf,aAAa;AACd,qBAAA,EAAA,QAAA,EAAA,2IAAA,EAAA,MAAA,EAAA,CAAA,uIAAA,CAAA,EAAA,CAAA;mFAKQ,IAAI,EAAA,CAAA;sBAAZ,KAAK;gBACG,IAAI,EAAA,CAAA;sBAAZ,KAAK;;;;;;;;MEjBK,kBAAkB,CAAA;8GAAlB,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA,EAAA;+GAAlB,kBAAkB,EAAA,CAAA,CAAA,EAAA;+GAAlB,kBAAkB,EAAA,CAAA,CAAA,EAAA;;2FAAlB,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAH9B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,OAAO,EAAE,EAAE;AACZ,iBAAA,CAAA;;;MCGY,iBAAiB,CAAA;AAS5B,IAAA,WAAA,CACU,OAAoC,EAAA;QAApC,IAAO,CAAA,OAAA,GAAP,OAAO,CAA6B;QARtC,IAAmB,CAAA,mBAAA,GAAa,EAAE,CAAA;QAClC,IAAkB,CAAA,kBAAA,GAAa,EAAE,CAAA;QACjC,IAAyB,CAAA,yBAAA,GAAa,EAAE,CAAA;QACxC,IAA2B,CAAA,2BAAA,GAAa,EAAE,CAAA;QAC1C,IAAsB,CAAA,sBAAA,GAAa,EAAE,CAAA;QACrC,IAA2B,CAAA,2BAAA,GAAa,EAAE,CAAA;KAI9C;IAEJ,MAAM,wBAAwB,CAAC,IAAqB,EAAA;AAClD,QAAA,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,EAAE;YACzB,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,EAAC,MAAM,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,IAAI,EAAE,EAAC,CAAC,CAAC,CAAA;AAChG,YAAA,MAAM,CAAC,OAAO,CAAC,IAAI,IAAG;AACpB,gBAAA,IAAI,IAAI,CAAC,WAAW,CAAC,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,WAAW,CAAC,IAAI,KAAK,IAAI,EAAE;oBACzE,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAA;iBACrD;AAAM,qBAAA,IAAI,IAAI,CAAC,WAAW,CAAC,oBAAoB,KAAK,SAAS,IAAI,IAAI,CAAC,WAAW,CAAC,oBAAoB,KAAK,IAAI,EAAE;oBAChH,IAAI,CAAC,2BAA2B,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,oBAAoB,CAAC,CAAA;iBAC7E;AAAM,qBAAA,IAAG,IAAI,CAAC,WAAW,CAAC,YAAY,KAAK,SAAS,IAAI,IAAI,CAAC,WAAW,CAAC,YAAY,KAAK,IAAI,EAAE;oBAC/F,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,CAAA;iBAChE;AAAM,qBAAA,IAAG,IAAI,CAAC,WAAW,CAAC,iBAAiB,KAAK,SAAS,IAAI,IAAI,CAAC,WAAW,CAAC,iBAAiB,KAAK,IAAI,EAAE;oBACzG,IAAI,CAAC,2BAA2B,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,iBAAiB,CAAC,CAAA;iBAC1E;AAAM,qBAAA,IAAI,IAAI,CAAC,WAAW,CAAC,cAAc,KAAK,SAAS;AACjD,uBAAA,IAAI,CAAC,WAAW,CAAC,cAAc,KAAK,IAAI;AACxC,uBAAA,IAAI,CAAC,WAAW,CAAC,cAAc,KAAK,SAAS;AAC7C,uBAAA,IAAI,CAAC,WAAW,CAAC,cAAc,KAAK,IAAI,EAC7C;AACA,oBAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAA,EAAG,IAAI,CAAC,WAAW,CAAC,cAAc,CAAA,CAAA,EAAI,IAAI,CAAC,WAAW,CAAC,cAAc,CAAA,CAAE,CAAC,CAAA;iBACtG;AAAM,qBAAA,IAAI,IAAI,CAAC,WAAW,CAAC,cAAc,KAAK,SAAS,IAAI,IAAI,CAAC,WAAW,CAAC,cAAc,KAAK,IAAI,EAAE;oBACpG,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,CAAA;iBACrE;AACH,aAAC,CAAC,CAAA;SACH;AACD,QAAA,MAAM,cAAc,GAAG,CAAC,IAAI,EAAE,QAAQ,IAAI,EAAE,EAAE,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;QAC9D,OAAO,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC,IAAI,EAAE,SAAS,IAAI,EAAE,CAAC;AAC7D,YAAA,IAAI,CAAC,2BAA2B,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,cAAc,IAAI,EAAE,CAAC;YACzF,IAAI,CAAC,2BAA2B,CAAC,QAAQ,CAAC,IAAI,EAAE,UAAU,GAAG,aAAa,CAAC,0BAA0B,CAAC,GAAG,CAAC,CAAC,IAAG,EAAE,CAAC;YACjH,IAAI,CAAC,sBAAsB,CAAC,QAAQ,CAAC,IAAI,EAAE,UAAU,GAAG,aAAa,CAAC,wBAAwB,CAAC,GAAG,CAAC,CAAC,IAAG,EAAE,CAAC;YAC1G,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,IAAI,EAAE,CAAC;AACtD,YAAA,IAAI,CAAC,yBAAyB,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAA;KAC1D;IAEO,aAAa,GAAA;AACnB,QAAA,OAAO,IAAI,CAAC,mBAAmB,CAAC,MAAM;cAClC,IAAI,CAAC,kBAAkB,CAAC,MAAM;cAC9B,IAAI,CAAC,yBAAyB,CAAC,MAAM;cACrC,IAAI,CAAC,2BAA2B,CAAC,MAAM;cACvC,IAAI,CAAC,sBAAsB,CAAC,MAAM;AAClC,cAAA,IAAI,CAAC,2BAA2B,CAAC,MAAM,KAAK,CAAC,CAAA;KAClD;AAED,IAAA,wBAAwB,CAAC,IAAU,EAAA;QACjC,MAAM,eAAe,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAA;AACjD,QAAA,IAAI,eAAe,KAAK,IAAI,EAAE;AAC5B,YAAA,OAAO,eAAe,CAAA;SACvB;QACD,OAAO;AACL,YAAA,MAAM,EAAE,SAAS;AACjB,YAAA,eAAe,EAAE,IAAI;SACtB,CAAA;KACF;AAED,IAAA,cAAc,CAAC,IAAU,EAAA;AACvB,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAA;QACtD,MAAM,iBAAiB,GAAG,MAA6B;AACrD,YAAA,IAAI,IAAI,CAAC,MAAM,EAAE,UAAU,EAAE,cAAc,EAAE,WAAW,EAAE,KAAK,cAAc,EAAE;gBAC7E,OAAO;oBACL,SAAS,EAAE,aAAa,CAAC,YAAY;AACrC,oBAAA,UAAU,EAAE,EAAE;iBACf,CAAA;aACF;AACD,YAAA,OAAO,IAAI,CAAA;AACb,SAAC,CAAA;AACD;;AAEG;QACH,MAAM,YAAY,GAAG,MAA6B;AAChD,YAAA,IAAI,IAAI,CAAC,MAAM,EAAE,UAAU,EAAE,cAAc,EAAE,WAAW,EAAE,KAAK,SAAS,EAAE;gBACxE,OAAO;oBACL,SAAS,EAAE,aAAa,CAAC,OAAO;AAChC,oBAAA,UAAU,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE;iBAClC,CAAA;aACF;AACD,YAAA,IAAI,GAAG,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAG;gBAC7B,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;gBAC5B,OAAO;oBACL,SAAS,EAAE,aAAa,CAAC,OAAO;oBAChC,UAAU,EAAE,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;iBACpC,CAAA;aACF;AACD,YAAA,IAAI,GAAG,CAAC,QAAQ,CAAC,qBAAqB,CAAC,EAAE;AACvC,gBAAA,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAA;gBAC9B,OAAO;oBACL,SAAS,EAAE,aAAa,CAAC,OAAO;oBAChC,UAAU,EAAE,SAAS,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE;iBAClD,CAAA;aACF;AACD,YAAA,OAAO,IAAI,CAAA;AACb,SAAC,CAAA;AACD;;AAEG;QACH,MAAM,UAAU,GAAG,MAA6B;AAC9C,YAAA,IAAI,GAAG,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE;gBAC7B,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;gBAC5B,OAAO;oBACL,SAAS,EAAE,aAAa,CAAC,KAAK;oBAC9B,UAAU,EAAE,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;iBACpC,CAAA;aACF;AACD,YAAA,OAAO,IAAI,CAAA;AACb,SAAC,CAAA;QACD,MAAM,iBAAiB,GAAG,MAA6B;YACrD,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,EAAE;gBAC1E,OAAO;oBACL,SAAS,EAAE,aAAa,CAAC,KAAK;AAC9B,oBAAA,UAAU,EAAE,EAAE;iBACf,CAAA;aACF;AACD,YAAA,OAAO,IAAI,CAAA;AACb,SAAC,CAAA;AACD;;AAEG;QACH,MAAM,UAAU,GAAG,MAA6B;AAC9C,YAAA,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC,OAAO,CAAC,EAAE;gBACxD,OAAO;oBACL,SAAS,EAAE,aAAa,CAAC,KAAK;AAC9B,oBAAA,UAAU,EAAE,EAAE;iBACf,CAAA;aACF;AACD,YAAA,OAAO,IAAI,CAAA;AACb,SAAC,CAAA;AACD;;AAEG;QACH,MAAM,oBAAoB,GAAG,MAA6B;YACxD,IAAI,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,kBAAkB,CAAC,EAAE;gBAC9C,OAAO;oBACL,SAAS,EAAE,aAAa,CAAC,SAAS;AAClC,oBAAA,UAAU,EAAE,EAAE;iBACf,CAAA;aACF;AACD,YAAA,OAAO,IAAI,CAAA;AACb,SAAC,CAAA;AACD;;AAEG;QACH,MAAM,UAAU,GAAG,MAA8B;AAC/C,YAAA,IAAI,IAAI,CAAC,UAAU,GAAG,0BAA0B,CAAC,GAAG,CAAC,CAAC,KAAK,KAAK,EAAE;AAChE,gBAAA,OAAO,IAAI,CAAA;aACZ;AACD,YAAA,IAAI,IAAI,CAAC,SAAS,KAAK,YAAY,EAAE;gBACnC,OAAO;oBACL,SAAS,EAAE,aAAa,CAAC,KAAK;AAC9B,oBAAA,UAAU,EAAE,EAAE;iBACf,CAAA;aACF;AACD,YAAA,MAAM,aAAa,GAAG,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,CAAA;YACrD,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,EAAE;gBAC1F,OAAO;oBACL,SAAS,EAAE,aAAa,CAAC,KAAK;AAC9B,oBAAA,UAAU,EAAE,EAAE;iBACf,CAAA;aACF;AACD,YAAA,OAAO,IAAI,CAAA;AACb,SAAC,CAAA;AACD;;AAEG;QACH,MAAM,SAAS,GAAG,MAA6B;AAC7C,YAAA,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,mBAAmB,CAAC,EAAE;gBACvD,OAAO;oBACL,SAAS,EAAE,aAAa,CAAC,GAAG;AAC5B,oBAAA,UAAU,EAAE,EAAE;iBACf,CAAA;aACF;AACD,YAAA,OAAO,IAAI,CAAA;AACb,SAAC,CAAA;AACD;;AAEG;QACH,MAAM,WAAW,GAAG,MAA6B;AAC/C,YAAA,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC;iBACf,GAAG,CAAC,QAAQ,CAAC,iBAAiB,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,kBAAkB,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,mBAAmB,CAAC,CAAC,EAC1G;gBACA,OAAO;oBACL,SAAS,EAAE,aAAa,CAAC,KAAK;AAC9B,oBAAA,UAAU,EAAE,EAAE;iBACf,CAAA;aACF;AACD,YAAA,OAAO,IAAI,CAAA;AACb,SAAC,CAAA;AAED;;AAEG;QACH,MAAM,SAAS,GACb,iBAAiB,EAAE;AACd,eAAA,YAAY,EAAE;AACd,eAAA,UAAU,EAAE;AACZ,eAAA,iBAAiB,EAAE;AACnB,eAAA,UAAU,EAAE;AACZ,eAAA,UAAU,EAAE;AACZ,eAAA,oBAAoB,EAAE;AACtB,eAAA,SAAS,EAAE;AACX,eAAA,WAAW,EAAE,CAAA;AAEpB,QAAA,IAAI,SAAS,KAAK,IAAI,EAAE;YACtB,OAAO;AACL,gBAAA,MAAM,EAAE,KAAK;AACb,gBAAA,eAAe,EAAE,SAAS;aAC3B,CAAA;SACF;AACD,QAAA,OAAO,IAAI,CAAA;KACZ;8GA1NU,iBAAiB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,2BAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA,EAAA;AAAjB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,iBAAiB,cADL,MAAM,EAAA,CAAA,CAAA,EAAA;;2FAClB,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAD7B,UAAU;mBAAC,EAAC,UAAU,EAAE,MAAM,EAAC,CAAA;;;MCsDnB,eAAe,CAAA;IAa1B,WACU,CAAA,uBAAuD,EACvD,wBAAkD,EAClD,iBAAoC,EACpC,gBAAkC,EACe,aAA+C,EAAA;QAJhG,IAAuB,CAAA,uBAAA,GAAvB,uBAAuB,CAAgC;QACvD,IAAwB,CAAA,wBAAA,GAAxB,wBAAwB,CAA0B;QAClD,IAAiB,CAAA,iBAAA,GAAjB,iBAAiB,CAAmB;QACpC,IAAgB,CAAA,gBAAA,GAAhB,gBAAgB,CAAkB;QACe,IAAa,CAAA,aAAA,GAAb,aAAa,CAAkC;QAdjG,IAAqB,CAAA,qBAAA,GAAY,IAAI,CAAC;QACtC,IAAQ,CAAA,QAAA,GAAW,EAAE,CAAC;QAC/B,IAAkB,CAAA,kBAAA,GAAG,KAAK,CAAC;AAC3B,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,OAAO,EAAQ,CAAC;AAC/B,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,eAAe,CAAoB,IAAI,CAAC,CAAC;AAC3D,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,OAAO,EAAQ,CAAC;AAC/B,QAAA,IAAA,CAAA,qBAAqB,GAAG,IAAI,OAAO,EAAW,CAAA;AAC9C,QAAA,IAAA,CAAA,SAAS,GAAG,IAAI,eAAe,CAA+C,IAAI,CAAC,CAAC;AASlF,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAChB,MAAM,CAAC,MAAM,IAAI,CAAC,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,kBAAkB,CAAC,EAChE,YAAY,CAAC,EAAE,CAAC,EAChB,SAAS,CAAC,MAAK;;AAEb,YAAA,OAAO,IAAI,CAAC,WAAW,EAAE,CAAA;AAC3B,SAAC,CAAC,CACH,CAAC,SAAS,CAAC;AACV,YAAA,IAAI,EAAE,OAAO,cAAc,KAAI;;AAE7B,gBAAA,IAAI,cAAc,KAAK,IAAI,EAAE;AAC3B,oBAAA,MAAM,IAAI,GAAe;wBACvB,MAAM,EAAE,cAAc,CAAC,MAAM;AAC7B,wBAAA,oBAAoB,EAAE,cAAc;qBACrC,CAAA;AACD,oBAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AAC3B,oBAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAA;iBACrB;qBAAM;AACL,oBAAA,IAAI;AACF,wBAAA,MAAM,kBAAkB,GAAG,MAAM,cAAc,CAAC,IAAI,CAAC,uBAAuB,CAAC,kBAAkB,CAAC,IAAI,CAAC,OAAS,CAAC,CAAC,CAAA;;AAEhH,wBAAA,IAAI,kBAAkB,CAAC,KAAK,KAAK,IAAI,EAAE;AACrC,4BAAA,IAAI,CAAC,iCAAiC,CAAC,kBAAkB,CAAC,CAAA;yBAC3D;6BAAM;AACL,4BAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAC,MAAM,EAAE,kBAAkB,CAAC,MAAM,IAAI,EAAE,EAAC,CAAC,CAAC;AAC/D,4BAAA,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,CAChB,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,EACxB,SAAS,CAAC,MAAM,IAAI,CAAC,wBAAwB,CAAC,UAAU,CAAC,EAAC,KAAK,EAAE,kBAAkB,CAAC,KAAO,EAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CACtG,CAAC,SAAS,CAAC;AACV,gCAAA,IAAI,EAAE,OAAO,OAAO,KAAI;;oCAEtB,IAAI,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,UAAU,CAAC,IAAI,OAAO,CAAC,MAAM,KAAK,UAAU,EAAE;AACpF,wCAAA,IAAI,CAAC,kCAAkC,CAAC,kBAAkB,EAAE,OAAO,CAAC,CAAA;;qCAErE;AAAM,yCAAA,IAAI,OAAO,CAAC,MAAM,KAAK,UAAU,IAAI,OAAO,CAAC,MAAM,KAAK,kBAAkB,EAAE;AACjF,wCAAA,IAAI,CAAC,8BAA8B,CAAC,kBAAkB,EAAE,OAAO,CAAC,CAAA;;qCAEjE;AAAM,yCAAA,IAAI,OAAO,CAAC,MAAM,KAAK,QAAQ,EAAE;AACtC,wCAAA,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAA;qCAClC;yCAAM;;;AAGL,wCAAA,IAAI,CAAC,sCAAsC,CAAC,OAAO,CAAC,CAAA;qCACrD;iCACF;gCACD,KAAK,EAAE,KAAK,IAAG;AACb,oCAAA,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAA;iCAC3B;AAAC,6BAAA,CAAC,CAAC;yBACP;qBACF;oBAAC,OAAO,KAAK,EAAE;AACd,wBAAA,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAA;qBAC3B;iBACF;aACF;AACD,YAAA,KAAK,EAAE,CAAC,KAAK,KAAI;AACf,gBAAA,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAA;aAC3B;AACF,SAAA,CAAC,CAAC;KACJ;AAED,IAAA,cAAc,CAAC,KAAU,EAAA;QACvB,MAAM,aAAa,GAAG,KAAK,CAAC,KAAK,CAAC,WAAW,IAAI,uBAAuB,CAAA;AACxE,QAAA,MAAM,IAAI,GAAe;AACvB,YAAA,MAAM,EAAE,OAAO;AACf,YAAA,kBAAkB,EAAE,aAAa;SAClC,CAAA;AACD,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AAC3B,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAA;KACrB;AAED,IAAA,MAAM,QAAQ,GAAA;AACZ,QAAA,IAAI,IAAI,CAAC,QAAQ,KAAK,EAAE,EAAE;YACxB,OAAO,CAAC,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC,CAAC;YAC3D,IAAI,CAAC,aAAa,CAAC,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC;SAC9C;AACD,QAAA,IAAI,CAAC,IAAI,CAAC,qBAAqB,EAAE;AAC/B,YAAA,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC;AAC/B,YAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;SACtB;;AAED,QAAA,IAAI,eAAe,IAAI,SAAS,EAAE;YAChC,MAAM,GAAG,GAAG,MAAM,SAAS,CAAC,aAAa,CAAC,gBAAgB,EAAE,CAAC;AAC7D,YAAA,MAAM,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAA4B,KAAK,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;AAC9E,YAAA,MAAM,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,KAAK,IAAI,CAAC,gBAAgB,CAAC,kBAAkB,EAAE,GAAG,uBAAuB,CAAC,CAAC;AACzH,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,gBAAgB,GAAG,GAAG,GAAG,IAAI,CAAC,gBAAgB,CAAC,kBAAkB,EAAE,CAAC;YACvF,MAAM,YAAY,GAAG,MAAM,SAAS,CAAC,aAAa,CAAC,QAAQ,CAAC,gBAAgB,EAAE;AAC5E,gBAAA,KAAK,EAAE,KAAK;AACb,aAAA,CAAC,CAAC;AACH,YAAA,IAAI,YAAY,CAAC,OAAO,EAAE;gBACxB,YAAY,CAAC,OAAO,CAAC,WAAW,CAAC,EAAC,IAAI,EAAE,cAAc,EAAC,CAAC,CAAC;aAC1D;AACD,YAAA,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC;AAC/B,YAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;AACrB,YAAA,YAAY,CAAC,aAAa,GAAG,MAAK;AAChC,gBAAA,MAAM,SAAS,GAAG,YAAY,CAAC,UAAU,CAAC;gBAC1C,IAAI,SAAS,EAAE;AACb,oBAAA,SAAS,CAAC,aAAa,GAAG,MAAK;AAC7B,wBAAA,IAAI,SAAS,CAAC,KAAK,KAAK,WAAW,EAAE;AACnC,4BAAA,IAAI,SAAS,CAAC,aAAa,CAAC,UAAU,EAAE;gCACtC,SAAS,CAAC,WAAW,CAAC,EAAC,IAAI,EAAE,cAAc,EAAC,CAAC,CAAC;6BAC/C;yBACF;AACH,qBAAC,CAAC;iBACH;AACH,aAAC,CAAC;YACF,SAAS,CAAC,aAAa,CAAC,gBAAgB,CAAC,kBAAkB,EAAE,MAAK;AAChE,gBAAA,OAAO,CAAC,IAAI,CAAC,uCAAuC,CAAC,CAAC;AACxD,aAAC,CAAC,CAAC;SACJ;aAAM;AACH,YAAA,OAAO,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAC;SACpD;KACF;IAED,MAAM,WAAW,CAAC,CAAgB,EAAA;AAChC,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;KACtB;AAED,IAAA,MAAM,WAAW,GAAA;AACf,QAAA,IAAI,CAAC,MAAM,IAAI,CAAC,iBAAiB,CAAC,wBAAwB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;AACrE,YAAA,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,EAAE;gBAC3B,OAAO,IAAI,CAAC,iBAAiB,CAAC,wBAAwB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;aAClE;YACD,OAAO,EAAC,MAAM,EAAE,SAAS,EAAE,eAAe,EAAE,IAAI,EAAC,CAAA;SAClD;aAAM;AACL,YAAA,OAAO,IAAI,CAAA;SACZ;KACF;AAED,IAAA,iCAAiC,CAAC,kBAAsC,EAAA;QACtE,MAAM,KAAK,GAAG,kBAAkB,CAAC,WAAW,EAAE,GAAG,CAAC,IAAI,IAAG;AACvD,YAAA,MAAM,SAAS,GAAmB;gBAChC,IAAI,EAAE,IAAI,CAAC,IAAI;AACf,gBAAA,QAAQ,EAAE,GAAG;gBACb,MAAM,EAAE,IAAI,CAAC,MAAM;gBACnB,KAAK,EAAE,IAAI,CAAC,KAAK;AACjB,gBAAA,cAAc,EAAE,SAAS;AACzB,gBAAA,MAAM,EAAE,UAAU;aACnB,CAAA;AACD,YAAA,OAAO,SAAS,CAAA;AAClB,SAAC,CAAC,CAAA;AACF,QAAA,MAAM,IAAI,GAAe;AACvB,YAAA,MAAM,EAAE,kBAAkB,CAAC,MAAM,IAAI,EAAE;AACvC,YAAA,KAAK,EAAE,KAAK;SACb,CAAA;AACD,QAAA,kBAAkB,CAAC,WAAW,KAAK,SAAS,IAAI,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC5E,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;KACtB;IAED,kCAAkC,CAAC,kBAAsC,EAAE,OAAqB,EAAA;QAC9F,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,IAAG;AACtC,YAAA,MAAM,SAAS,GAAmB;AAChC,gBAAA,IAAI,EAAE,MAAM,CAAC,UAAU,EAAE,IAAI,IAAI,EAAE;gBACnC,QAAQ,EAAE,MAAM,CAAC,MAAM,KAAK,QAAQ,GAAG,MAAM,CAAC,QAAQ,GAAG,EAAE,MAAM,CAAC,QAAQ,GAAG,CAAC,CAAC;gBAC/E,MAAM,EAAE,MAAM,CAAC,UAAU,EAAE,MAAM,IAAI,MAAM,CAAC,OAAO;AACnD,gBAAA,KAAK,EAAE,MAAM,CAAC,UAAU,EAAE,KAAK,IAAI,CAAC;gBACpC,cAAc,EAAE,MAAM,CAAC,cAAc;gBACrC,MAAM,EAAE,MAAM,CAAC,MAAM;aACtB,CAAA;AACD,YAAA,OAAO,SAAS,CAAA;AAClB,SAAC,CAAC,CAAA;AACF,QAAA,MAAM,IAAI,GAAe;AACvB,YAAA,MAAM,EAAE,kBAAkB,CAAC,MAAM,IAAI,EAAE;AACvC,YAAA,KAAK,EAAE,KAAK;SACb,CAAA;AACD,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AAC3B,QAAA,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;KACtC;IAED,8BAA8B,CAAC,kBAAsC,EAAE,OAAqB,EAAA;QAC1F,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,IAAG;AACtC,YAAA,MAAM,SAAS,GAAmB;AAChC,gBAAA,IAAI,EAAE,MAAM,CAAC,UAAU,EAAE,IAAI,IAAI,EAAE;gBACnC,QAAQ,EAAE,MAAM,CAAC,QAAQ;gBACzB,MAAM,EAAE,MAAM,CAAC,UAAU,EAAE,MAAM,IAAI,MAAM,CAAC,OAAO;AACnD,gBAAA,KAAK,EAAE,MAAM,CAAC,UAAU,EAAE,KAAK,IAAI,CAAC;gBACpC,cAAc,EAAE,MAAM,CAAC,cAAc;AACrC,gBAAA,kBAAkB,EAAE,MAAM,CAAC,KAAK,EAAE,WAAW;gBAC7C,MAAM,EAAC,MAAM,CAAC,MAAM;aACrB,CAAA;AACD,YAAA,OAAO,SAAS,CAAA;AAClB,SAAC,CAAC,CAAA;AACF,QAAA,MAAM,IAAI,GAAe;AACvB,YAAA,MAAM,EAAE,kBAAkB,CAAC,MAAM,IAAI,EAAE;AACvC,YAAA,KAAK,EAAE,KAAK;SACb,CAAA;AACD,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AAC3B,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAA;KACrB;AAED,IAAA,mBAAmB,CAAC,OAAqB,EAAA;AACvC,QAAA,MAAM,IAAI,GAAe;AACvB,YAAA,MAAM,EAAE,OAAO;AACf,YAAA,kBAAkB,EAAE,OAAO,CAAC,YAAY,EAAE,WAAW,IAAI,uBAAuB;SACjF,CAAA;AACD,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AAC3B,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAA;KACrB;AAED,IAAA,sCAAsC,CAAC,OAAqB,EAAA;QAC1D,IAAI,QAAQ,GAAG,CAAC,CAAA;AAChB,QAAA,IAAI,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,YAAY,CAAC,EAAE;YACrD,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAA;SAC1D;AAAM,aAAA,IAAI,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,QAAQ,CAAC,EAAE;YACxD,QAAQ,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA;SACjE;AACD,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;AAClB,YAAA,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,EAAE;AAC5B,YAAA,QAAQ,EAAE,QAAQ;AACnB,SAAA,CAAC,CAAC;KACJ;AArOU,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,eAAe,sKAkBJ,4BAA4B,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAlBvC,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,eAAe,EANf,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,MAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,qBAAA,EAAA,uBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,EAAA,SAAA,EAAA;YACT,gBAAgB;AACjB,SAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECxDH,sxGA2EA,EAAA,MAAA,EAAA,CAAA,mSAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDtCI,kBAAkB,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAClB,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,YAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,OAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAGf,wBAAwB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,mCAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,aAAA,CAAA,EAAA,QAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACxB,oBAAoB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,OAAA,EAAA,aAAA,EAAA,MAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,CAAA,EAAA,QAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAQpB,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACnB,kBAAkB,EAAA,CAAA,EAAA,sBAAA,EAAA,CAAA,MAAA,CAAA,+DAAA,CAAA,IAAA,CAAA,CAAA,IAAA,CAAA,CAAA,cAAA,CAAA,CAAA,EAAA,MAAA,CAAA,+DAAA,CAAA,IAAA,CAAA,CAAA,IAAA,CAAA,CAAA,cAAA,CAAA,CAAA,EAAA,MAAA,CAAA,6DAAA,CAAA,IAAA,CAAA,CAAA,IAAA,CAAA,CAAA,YAAA,CAAA,CAAA,EAAA,MAAA,CAAA,iEAAA,CAAA,IAAA,CAAA,CAAA,IAAA,CAAA,CAAA,gBAAA,CAAA,CAAA,EAAA,MAAA,CAAA,OAAA,0DAAA,CAAA,CAAA,IAAA,CAAA,CAAA,IAAA,CAAA,CAAA,cAAA,CAAA,CAAA,EAAA,MAAA,CAAA,OAAA,2DAAA,CAAA,CAAA,IAAA,CAAA,CAAA,IAAA,CAAA,CAAA,eAAA,CAAA,CAAA,EAAA,MAAA,CAAA,OAAA,wDAAA,CAAA,CAAA,IAAA,CAAA,CAAA,IAAA,CAAA,CAAA,YAAA,CAAA,CAAA,EAAA,MAAA,CAAA,OAAA,4DAAA,CAAA,CAAA,IAAA,CAAA,CAAA,IAAA,CAAA,CAAA,gBAAA,CAAA,CAAA,EAAA,MAAA,CAAA,6DAAA,CAAA,IAAA,CAAA,CAAA,IAAA,CAAA,CAAA,YAAA,CAAA,CAAA,EAAA,MAAA,CAAA,OAAA,0DAAA,CAAA,CAAA,IAAA,CAAA,CAAA,IAAA,CAAA,CAAA,cAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,EAAA;;gGAST,eAAe,EAAA,mBAAA,EAAA,MAAA,CAAA,+DAAA,CAAA,IAAA,CAAA,CAAA,IAAA,CAAA,CAAA,cAAA,CAAA,EAAA,+DAAA,CAAA,IAAA,CAAA,CAAA,IAAA,CAAA,CAAA,cAAA,CAAA,EAAA,6DAAA,CAAA,IAAA,CAAA,CAAA,IAAA,CAAA,CAAA,YAAA,CAAA,EAAA,iEAAA,CAAA,IAAA,CAAA,CAAA,IAAA,CAAA,CAAA,gBAAA,CAAA,EAAA,OAAA,0DAAA,CAAA,CAAA,IAAA,CAAA,CAAA,IAAA,CAAA,CAAA,cAAA,CAAA,EAAA,OAAA,2DAAA,CAAA,CAAA,IAAA,CAAA,CAAA,IAAA,CAAA,CAAA,eAAA,CAAA,EAAA,OAAA,wDAAA,CAAA,CAAA,IAAA,CAAA,CAAA,IAAA,CAAA,CAAA,YAAA,CAAA,EAAA,OAAA,4DAAA,CAAA,CAAA,IAAA,CAAA,CAAA,IAAA,CAAA,CAAA,gBAAA,CAAA,EAAA,6DAAA,CAAA,IAAA,CAAA,CAAA,IAAA,CAAA,CAAA,YAAA,CAAA,EAAA,OAAA,0DAAA,CAAA,CAAA,IAAA,CAAA,CAAA,IAAA,CAAA,CAAA,cAAA,CAAA,CAAA,EAAA,eAAA,EAAA,CAAA,cAAA,EAAA,cAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,cAAA,EAAA,eAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,YAAA,EAAA,cAAA,MAAA,EAAA,UAAA,EAAA,CAAA;sBA3B3B,SAAS;mCACE,SAAS,EAAA,UAAA,EACP,IAAI,EACP,OAAA,EAAA;4BACP,kBAAkB;4BAClB,eAAe;4BACf,cAAc;4BACd,cAAc;4BACd,wBAAwB;4BACxB,oBAAoB;4BACpB,YAAY;4BACZ,YAAY;4BACZ,gBAAgB;4BAChB,gBAAgB;4BAChB,cAAc;4BACd,eAAe;4BACf,YAAY;4BACZ,mBAAmB;4BACnB,kBAAkB;4BAClB,cAAc;yBACf,EACU,SAAA,EAAA;4BACT,gBAAgB;AACjB,yBAAA,EAAA,QAAA,EAAA,sxGAAA,EAAA,MAAA,EAAA,CAAA,mSAAA,CAAA,EAAA,CAAA;;8BAsBE,QAAQ;;8BAAI,MAAM;+BAAC,4BAA4B,CAAA;6CAjBzC,OAAO,EAAA,CAAA;0BAAf,KAAK;oBACG,IAAI,EAAA,CAAA;0BAAZ,KAAK;oBACG,gBAAgB,EAAA,CAAA;0BAAxB,KAAK;oBACG,qBAAqB,EAAA,CAAA;0BAA7B,KAAK;oBACG,QAAQ,EAAA,CAAA;0BAAhB,KAAK;;;MEhDK,yBAAyB,CAAA;IAC7B,OAAO,OAAO,CACnB,MAA8C,EAAA;QAE9C,OAAO;AACL,YAAA,QAAQ,EAAE,yBAAyB;AACnC,YAAA,SAAS,EAAE,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;SACvC,CAAC;KACH;8GARU,yBAAyB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA,EAAA;AAAzB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,yBAAyB,YARlC,eAAe;AACf,YAAA,YAAY,aAGZ,YAAY;YACZ,eAAe,CAAA,EAAA,CAAA,CAAA,EAAA;AAGN,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,yBAAyB,YARlC,eAAe;AACf,YAAA,YAAY,EAGZ,YAAY,CAAA,EAAA,CAAA,CAAA,EAAA;;2FAIH,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBAXrC,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,YAAY,EAAE,EAAE;AAChB,oBAAA,OAAO,EAAE;wBACP,eAAe;wBACf,YAAY;AACb,qBAAA;AACD,oBAAA,OAAO,EAAE;wBACP,YAAY;wBACZ,eAAe;AAChB,qBAAA;AACF,iBAAA,CAAA;;;AChBD;;AAEG;;ACFH;;AAEG;;;;"}
|