@net7/boilerplate-muruca 5.5.3 → 5.5.5

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.
@@ -97,7 +97,22 @@ export class MrResourceLayoutComponent extends AbstractLayout {
97
97
  setTimeout(() => {
98
98
  const element = document.getElementById(fragment);
99
99
  if (element) {
100
- element.scrollIntoView({ behavior: 'smooth' });
100
+ // Open read-more if present
101
+ const readMoreElement = element
102
+ ?.closest('.mr-read-more__content')
103
+ ?.closest('.mr-read-more.is-collapsed');
104
+ if (readMoreElement) {
105
+ const readMoreButton = readMoreElement.querySelector(':scope > .mr-read-more__btn');
106
+ if (readMoreButton instanceof HTMLElement) {
107
+ readMoreButton.click();
108
+ }
109
+ // Scroll
110
+ setTimeout(() => element.scrollIntoView({ behavior: 'smooth' }), 300);
111
+ }
112
+ else {
113
+ // Scroll
114
+ element.scrollIntoView({ behavior: 'smooth' });
115
+ }
101
116
  }
102
117
  }, timeout);
103
118
  }
@@ -153,4 +168,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
153
168
  type: Component,
154
169
  args: [{ selector: 'mr-resource-layout', template: "<div class=\"mr-resource mr-layout\" \n *ngIf=\"lb.dataSource && lb.dataSource.pageConfig\"\n [ngClass]=\"{\n 'is-loading': ( layoutState.get$('content') | async ) == 'LOADING',\n 'is-error': ( layoutState.get$('content') | async ) == 'ERROR'\n }\">\n <!-- RESOURCE LAYOUT CONTENT -->\n <ng-container [ngSwitch]=\"layoutState.get$('content') | async\">\n <!-- loading -->\n <ng-container *ngSwitchCase=\"'LOADING'\">\n <div class=\"mr-layout__loader\">\n <n7-loader></n7-loader>\n </div>\n </ng-container>\n\n <!-- error -->\n <ng-container *ngSwitchCase=\"'ERROR'\">\n <div class=\"mr-layout__error\">\n <h2>{{ lb.dataSource.errorTitle }}</h2>\n <p>{{ lb.dataSource.errorDescription }}</p>\n </div>\n </ng-container>\n\n <!-- success -->\n <ng-container *ngSwitchCase=\"'SUCCESS'\">\n <ng-container *ngIf=\"lb.dataSource.pageConfig.sections as sections\">\n <!-- Pass the list of blocks to render to the block template -->\n <div class=\"mr-resource__top\">\n <ng-container *ngTemplateOutlet=\"blocks; context: { $implicit: sections.top }\"></ng-container>\n </div>\n <div class=\"mr-resource__content mr-side-margin\">\n <ng-container *ngTemplateOutlet=\"blocks; context: { $implicit: sections.content }\"></ng-container>\n </div>\n </ng-container>\n </ng-container>\n\n </ng-container>\n</div>\n\n<ng-template #blocks let-list>\n <ng-container *ngFor=\"let section of list\">\n <section *ngIf=\"lb.widgets[section.id].ds.out$ | async\"\n class=\"{{ 'mr-resource__section mr-resource__' + section.type }}\">\n <ng-container [ngSwitch]=\"section.type\">\n\n <!-- TABS -->\n <ng-container *ngSwitchCase=\"'tabs'\">\n <ng-container *ngFor=\"let tab of lb.widgets[section.id].ds.out$ | async\">\n <n7-anchor-wrapper [data]=\"tab.anchor\" [classes]=\"tab.classes\" *ngIf=\"!tab.hideTab\">\n <span class=\"mr-resource__tabs-item\">{{ tab.label }}</span>\n </n7-anchor-wrapper>\n </ng-container>\n </ng-container>\n\n <!-- INNER TITLE -->\n <ng-container *ngSwitchCase=\"'title'\">\n <div class=\"mr-resource__title-content mr-side-margin\">\n <n7-inner-title \n [data]=\"lb.widgets[section.id].ds.out$ | async\"\n [emit]=\"lb.widgets[section.id].emit\">\n </n7-inner-title>\n </div>\n </ng-container>\n\n <!-- CUSTOM BUTTON -->\n <ng-container *ngSwitchCase=\"'button'\">\n <div class=\"mr-resource__button\">\n <n7-button \n [data]=\"lb.widgets[section.id].ds.out$ | async\"\n [emit]=\"lb.widgets[section.id].emit\">\n </n7-button>\n </div>\n </ng-container>\n \n <!-- IMAGE VIEWER IIIF -->\n <ng-container *ngSwitchCase=\"'viewer-iiif'\">\n <n7-mirador\n (contextmenu)=\"lb.dataSource.hasContextMenu()\"\n [data]=\"lb.widgets[section.id].ds.out$ | async\">\n </n7-mirador>\n </ng-container>\n \n <!-- IMAGE VIEWER -->\n <ng-container *ngSwitchCase=\"'viewer'\">\n\n <n7-image-viewer \n [data]=\"lb.widgets[section.id].ds.out$ | async\" \n [emit]=\"lb.widgets[section.id].emit\">\n </n7-image-viewer>\n <!-- IMAGE VIEWER TOOLS -->\n <n7-image-viewer-tools *ngIf=\"section.tools\" \n [data]=\"lb.widgets[section.id + '-tools'].ds.out$ | async\" \n [emit]=\"lb.widgets[section.id + '-tools'].emit\">\n </n7-image-viewer-tools>\n <!-- IMAGE VIEWER OVERLAY DETAILS -->\n <div *ngIf=\"lb.widgets[section.id + '-overlay-details'].ds.out$ | async as viewerDetailsData\" \n class=\"mr-resource__viewer-overlay-details\">\n <div class=\"mr-resource__viewer-overlay-details__close\">\n <a class=\"mr-resource__viewer-overlay-details__close-link\" \n (click)=\"lb.eventHandler.emitOuter('overlaycloseclick')\">\n <span class=\"n7-icon-close\"></span>\n </a>\n </div>\n <n7-item-preview \n [data]=\"viewerDetailsData\" \n [emit]=\"lb.widgets[section.id + '-overlay-details'].emit\">\n </n7-item-preview>\n </div>\n\n </ng-container>\n \n <!-- METADATA VIEWER -->\n <ng-container *ngSwitchCase=\"'metadata'\">\n \n <div class=\"mr-content-block mr-content-block-metadata\">\n <h3 *ngIf=\"section.title\" class=\"mr-content-block__title\">\n {{ section.title }}\n </h3>\n <div class=\"mr-content-block__content\">\n <mr-read-more [data]=\"section.readmore\">\n <ng-container *ngIf=\" section?.options?.readmore || section?.options?.groupReadmore;\n else wihoutReadmore\">\n <mr-metadata-readmore\n [data]=\"lb.widgets[section.id].ds.out$ | async\"\n [emit]=\"lb.widgets[section.id].emit\">\n </mr-metadata-readmore>\n </ng-container>\n <ng-template #wihoutReadmore>\n <n7-metadata-viewer\n [data]=\"lb.widgets[section.id].ds.out$ | async\"\n [emit]=\"lb.widgets[section.id].emit\">\n </n7-metadata-viewer>\n </ng-template>\n </mr-read-more>\n </div>\n </div>\n \n </ng-container>\n \n <!-- METADATA DYNAMIC -->\n <ng-container *ngSwitchCase=\"'metadata-dynamic'\">\n <mr-metadata-dynamic \n [data]=\"lb.widgets[section.id].ds.out$ | async\"\n [emit]=\"lb.widgets[section.id].emit\">\n </mr-metadata-dynamic> \n </ng-container>\n \n <!-- COLLECTION -->\n <ng-container *ngSwitchCase=\"'collection'\">\n <ng-container *ngIf=\"lb.widgets[section.id].ds.out$ | async as collection$\">\n <div *ngIf=\"collection$.items?.length > 0\" class=\"mr-content-block mr-content-block-collection\">\n <h3 *ngIf=\"section.title\" class=\"mr-content-block__title\">\n {{ section.title }}\n </h3>\n <div class=\"mr-content-block__content {{ section.grid ? 'n7-grid-' + section.grid : '' }}\">\n <n7-item-preview *ngFor=\"let item of collection$?.items\"\n [data]=\"item\" [emit]=\"lb.widgets[section.id].emit\">\n </n7-item-preview>\n </div>\n </div>\n </ng-container>\n </ng-container>\n \n <!-- ITEM PREVIEW -->\n <ng-container *ngSwitchCase=\"'preview'\">\n <div class=\"mr-content-block mr-content-block-item-preview\">\n <h3 *ngIf=\"section.title\" class=\"mr-content-block__title\">\n {{ section.title }}\n </h3>\n <div class=\"mr-content-block__content\">\n <n7-item-preview [data]=\"lb.widgets[section.id].ds.out$ | async\" [emit]=\"lb.widgets[section.id].emit\"> \n </n7-item-preview>\n </div>\n </div>\n </ng-container>\n \n <!-- TEXT VIEWER -->\n <ng-container *ngSwitchCase=\"'text-viewer'\">\n <div class=\"mr-content-block mr-content-block-text-viewer\">\n <h3 *ngIf=\"section.title\" class=\"mr-content-block__title\">\n {{ section.title }}\n </h3>\n <div class=\"mr-content-block__content\">\n <n7-text-viewer [data]=\"lb.widgets[section.id].ds.out$ | async\" [emit]=\"lb.widgets[section.id].emit\">\n </n7-text-viewer>\n </div>\n </div>\n </ng-container>\n\n <!-- PARALLEL TEXT VIEWER -->\n <ng-container *ngSwitchCase=\"'parallel-text-viewer'\">\n <div class=\"mr-content-block mr-content-block-text-viewer mr-content-block-parallel-text-viewer\">\n <h3 *ngIf=\"section.title\" class=\"mr-content-block__title\">\n {{ section.title }}\n </h3>\n <div class=\"mr-content-block__content\">\n <n7-parallel-text-viewer [data]=\"lb.widgets[section.id].ds.out$ | async\" [emit]=\"lb.widgets[section.id].emit\">\n </n7-parallel-text-viewer>\n </div>\n </div>\n </ng-container>\n\n <!-- MAP -->\n <ng-container *ngSwitchCase=\"'map'\">\n <div class=\"mr-content-block mr-content-block-map\">\n <div class=\"mr-content-block__content\">\n <n7-map [data]=\"lb.widgets[section.id].ds.out$ | async\" [emit]=\"lb.widgets[section.id].emit\"></n7-map>\n </div>\n </div>\n </ng-container>\n\n <!-- NETWORK -->\n <ng-container *ngSwitchCase=\"'network-resource'\">\n <div class=\"mr-content-block mr-content-block-network\">\n <div class=\"mr-content-block__content\">\n <div id=\"demo-network\" class=\"network-visualization\"><p>Network</p></div>\n </div>\n </div>\n </ng-container>\n \n <!-- INFO BOX -->\n <ng-container *ngSwitchCase=\"'info-box'\">\n <div class=\"mr-content-block mr-content-block-info-box\">\n <h3 *ngIf=\"section.title\" class=\"mr-content-block__title\">\n {{ section.title }}\n </h3>\n <div class=\"mr-content-block__content\">\n <div class=\"info-box__mock\">info-box</div> \n </div>\n </div>\n </ng-container>\n \n <!-- BREADCRUMBS -->\n <ng-container *ngSwitchCase=\"'breadcrumbs'\">\n <n7-breadcrumbs [data]=\"lb.widgets[section.id].ds.out$ | async\">\n </n7-breadcrumbs>\n </ng-container>\n\n </ng-container>\n </section>\n </ng-container>\n</ng-template>\n" }]
155
170
  }], ctorParameters: () => [{ type: i1.LayoutsConfigurationService }, { type: i2.ActivatedRoute }, { type: i1.ConfigurationService }, { type: i1.CommunicationService }, { type: i1.MainStateService }, { type: i2.ActivatedRoute }, { type: i2.Router }, { type: i3.MrLayoutStateService }, { type: i4.MrResourceModalService }, { type: i5.MrLocaleService }] });
156
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzb3VyY2UtbGF5b3V0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbjctYm9pbGVycGxhdGUtbXVydWNhL3NyYy9saWIvbGF5b3V0cy9yZXNvdXJjZS1sYXlvdXQvcmVzb3VyY2UtbGF5b3V0LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbjctYm9pbGVycGxhdGUtbXVydWNhL3NyYy9saWIvbGF5b3V0cy9yZXNvdXJjZS1sYXlvdXQvcmVzb3VyY2UtbGF5b3V0Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQ0wsY0FBYyxFQUtmLE1BQU0sMEJBQTBCLENBQUM7QUFHbEMsT0FBTyxFQUFFLHNCQUFzQixJQUFJLE1BQU0sRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzVFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUN2RSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDckUsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sOENBQThDLENBQUM7QUFDdEYsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFDbEYsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ3BFLE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLHNEQUFzRCxDQUFDO0FBQ3JHLE9BQU8sRUFBRSxVQUFVLEVBQUUsbUJBQW1CLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUM1RixPQUFPLEVBQ0wsZUFBZSxFQUNmLFVBQVUsRUFDVixjQUFjLEVBQ2QsZUFBZSxFQUNmLG9CQUFvQixFQUNwQixXQUFXLEVBQ1gsY0FBYyxFQUNkLGVBQWUsRUFDZixZQUFZLEVBQ1osY0FBYyxFQUNkLHNCQUFzQixFQUN0Qixn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UUFBUTt3QkFDakIsT0FBTyxFQUFFLGFBQWE7d0JBQ3RCLFVBQVUsRUFBRSxjQUFjLENBQUMsR0FBRyxJQUFJLFFBQVEsQ0FBQzt3QkFDM0MsWUFBWSxFQUFFLGdCQUFnQixDQUFDLEdBQUcsSUFBSSxRQUFRLENBQUM7cUJBQ2hELENBQUMsQ0FBQztnQkFDTCxDQUFDO1lBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDO0lBQ0gsQ0FBQzsrR0F6R1UseUJBQXlCO21HQUF6Qix5QkFBeUIsaUZDaEZ0Qyw2bllBa1BBOzs0RkRsS2EseUJBQXlCO2tCQUpyQyxTQUFTOytCQUNFLG9CQUFvQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCwgT25Jbml0LCBPbkRlc3Ryb3ksIEFmdGVyVmlld0luaXRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgRGF0YSwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7XG4gIEFic3RyYWN0TGF5b3V0LFxuICBDb21tdW5pY2F0aW9uU2VydmljZSxcbiAgTGF5b3V0c0NvbmZpZ3VyYXRpb25TZXJ2aWNlLFxuICBDb25maWd1cmF0aW9uU2VydmljZSxcbiAgTWFpblN0YXRlU2VydmljZVxufSBmcm9tICdAbmV0Ny9ib2lsZXJwbGF0ZS1jb21tb24nO1xuaW1wb3J0IHsgTXJMYXlvdXRTdGF0ZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9sYXlvdXQtc3RhdGUuc2VydmljZSc7XG5pbXBvcnQgeyBNclJlc291cmNlTW9kYWxTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvcmVzb3VyY2UtbW9kYWwuc2VydmljZSc7XG5pbXBvcnQgeyBNclJlc291cmNlTGF5b3V0Q29uZmlnIGFzIGNvbmZpZyB9IGZyb20gJy4vcmVzb3VyY2UtbGF5b3V0LmNvbmZpZyc7XG5pbXBvcnQgeyBNckltYWdlVmlld2VyRUggfSBmcm9tICcuLi8uLi9ldmVudC1oYW5kbGVycy9pbWFnZS12aWV3ZXIuZWgnO1xuaW1wb3J0IHsgTXJUZXh0Vmlld2VyRUggfSBmcm9tICcuLi8uLi9ldmVudC1oYW5kbGVycy90ZXh0LXZpZXdlci5laCc7XG5pbXBvcnQgeyBNclBhcmFsbGVsVGV4dFZpZXdlckVIIH0gZnJvbSAnLi4vLi4vZXZlbnQtaGFuZGxlcnMvcGFyYWxsZWwtdGV4dC12aWV3ZXIuZWgnO1xuaW1wb3J0IHsgTXJJbWFnZVZpZXdlclRvb2xzRUggfSBmcm9tICcuLi8uLi9ldmVudC1oYW5kbGVycy9pbWFnZS12aWV3ZXItdG9vbHMuZWgnO1xuaW1wb3J0IHsgTXJDb2xsZWN0aW9uRUggfSBmcm9tICcuLi8uLi9ldmVudC1oYW5kbGVycy9jb2xsZWN0aW9uLmVoJztcbmltcG9ydCB7IE1ySW1hZ2VWaWV3ZXJPdmVybGF5RGV0YWlsc0VIIH0gZnJvbSAnLi4vLi4vZXZlbnQtaGFuZGxlcnMvaW1hZ2Utdmlld2VyLW92ZXJsYXktZGV0YWlscy5laCc7XG5pbXBvcnQgeyBNckJ1dHRvbkVILCBNck1ldGFkYXRhRHluYW1pY0VILCBNck5ldHdvcmtSZXNvdXJjZUVIIH0gZnJvbSAnLi4vLi4vZXZlbnQtaGFuZGxlcnMnO1xuaW1wb3J0IHtcbiAgTXJCcmVhZGNydW1ic0RTLFxuICBNckJ1dHRvbkRTLFxuICBNckNvbGxlY3Rpb25EUyxcbiAgTXJJbWFnZVZpZXdlckRTLFxuICBNckltYWdlVmlld2VyVG9vbHNEUyxcbiAgTXJJbmZvQm94RFMsXG4gIE1ySW5uZXJUaXRsZURTLFxuICBNckl0ZW1QcmV2aWV3RFMsXG4gIE1yTWV0YWRhdGFEUyxcbiAgTXJUZXh0Vmlld2VyRFMsXG4gIE1yUGFyYWxsZWxUZXh0Vmlld2VyRFMsXG4gIE1yUmVzb3VyY2VUYWJzRFMsXG4gIE1ySW1hZ2VWaWV3ZXJPdmVybGF5RGV0YWlsc0RTLFxuICBNck1ldGFkYXRhRHluYW1pY0RTLFxuICBNckltYWdlVmlld2VySWlpZkRTLFxuICBNck5ldHdvcmtSZXNvdXJjZURTLFxufSBmcm9tICcuLi8uLi9kYXRhLXNvdXJjZXMnO1xuaW1wb3J0IHsgTXJNYXBEUyB9IGZyb20gJy4uLy4uL2RhdGEtc291cmNlcy9tYXAuZHMnO1xuaW1wb3J0IHsgTXJMb2NhbGVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbG9jYWxlLnNlcnZpY2UnO1xuXG5jb25zdCBEQVRBU09VUkNFX01BUCA9IHtcbiAgYnJlYWRjcnVtYnM6IE1yQnJlYWRjcnVtYnNEUyxcbiAgYnV0dG9uOiBNckJ1dHRvbkRTLFxuICBjb2xsZWN0aW9uOiBNckNvbGxlY3Rpb25EUyxcbiAgaW5mbzogTXJJbmZvQm94RFMsXG4gIG1hcDogTXJNYXBEUyxcbiAgbWV0YWRhdGE6IE1yTWV0YWRhdGFEUyxcbiAgcHJldmlldzogTXJJdGVtUHJldmlld0RTLFxuICB0YWJzOiBNclJlc291cmNlVGFic0RTLFxuICB0ZXh0OiBNclRleHRWaWV3ZXJEUyxcbiAgdGl0bGU6IE1ySW5uZXJUaXRsZURTLFxuICB2aWV3ZXI6IE1ySW1hZ2VWaWV3ZXJEUyxcbiAgJ3ZpZXdlci10b29scyc6IE1ySW1hZ2VWaWV3ZXJUb29sc0RTLFxuICAndmlld2VyLW92ZXJsYXktZGV0YWlscyc6IE1ySW1hZ2VWaWV3ZXJPdmVybGF5RGV0YWlsc0RTLFxuICAndGV4dC12aWV3ZXInOiBNclRleHRWaWV3ZXJEUyxcbiAgJ3BhcmFsbGVsLXRleHQtdmlld2VyJzogTXJQYXJhbGxlbFRleHRWaWV3ZXJEUyxcbiAgJ21ldGFkYXRhLWR5bmFtaWMnOiBNck1ldGFkYXRhRHluYW1pY0RTLFxuICAndmlld2VyLWlpaWYnOiBNckltYWdlVmlld2VySWlpZkRTLFxuICAnbmV0d29yay1yZXNvdXJjZSc6IE1yTmV0d29ya1Jlc291cmNlRFNcbn07XG5cbmNvbnN0IEVWRU5USEFORExFUl9NQVAgPSB7XG4gIHZpZXdlcjogTXJJbWFnZVZpZXdlckVILFxuICAndmlld2VyLXRvb2xzJzogTXJJbWFnZVZpZXdlclRvb2xzRUgsXG4gICd2aWV3ZXItb3ZlcmxheS1kZXRhaWxzJzogTXJJbWFnZVZpZXdlck92ZXJsYXlEZXRhaWxzRUgsXG4gICd0ZXh0LXZpZXdlcic6IE1yVGV4dFZpZXdlckVILFxuICAncGFyYWxsZWwtdGV4dC12aWV3ZXInOiBNclBhcmFsbGVsVGV4dFZpZXdlckVILFxuICBjb2xsZWN0aW9uOiBNckNvbGxlY3Rpb25FSCxcbiAgJ21ldGFkYXRhLWR5bmFtaWMnOiBNck1ldGFkYXRhRHluYW1pY0VILFxuICBidXR0b246IE1yQnV0dG9uRUgsXG4gICduZXR3b3JrLXJlc291cmNlJzogTXJOZXR3b3JrUmVzb3VyY2VFSCxcbiAgLy8gbWFwOiBNck1hcEVIXG59O1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdtci1yZXNvdXJjZS1sYXlvdXQnLFxuICB0ZW1wbGF0ZVVybDogJy4vcmVzb3VyY2UtbGF5b3V0Lmh0bWwnLFxufSlcbmV4cG9ydCBjbGFzcyBNclJlc291cmNlTGF5b3V0Q29tcG9uZW50IGV4dGVuZHMgQWJzdHJhY3RMYXlvdXQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSxcbkFmdGVyVmlld0luaXQge1xuICBwcml2YXRlIHJvdXRlckRhdGE6IERhdGE7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgbGF5b3V0c0NvbmZpZ3VyYXRpb246IExheW91dHNDb25maWd1cmF0aW9uU2VydmljZSxcbiAgICBwcml2YXRlIGFjdGl2YXRlZFJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcbiAgICBwcml2YXRlIGNvbmZpZ3VyYXRpb246IENvbmZpZ3VyYXRpb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgY29tbXVuaWNhdGlvbjogQ29tbXVuaWNhdGlvblNlcnZpY2UsXG4gICAgcHJpdmF0ZSBtYWluU3RhdGU6IE1haW5TdGF0ZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSByb3V0ZTogQWN0aXZhdGVkUm91dGUsXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcbiAgICBwdWJsaWMgbGF5b3V0U3RhdGU6IE1yTGF5b3V0U3RhdGVTZXJ2aWNlLFxuICAgIHB1YmxpYyBtb2RhbFNlcnZpY2U6IE1yUmVzb3VyY2VNb2RhbFNlcnZpY2UsXG4gICAgcHVibGljIGxvY2FsZVNlcnZpY2U6IE1yTG9jYWxlU2VydmljZSxcbiAgKSB7XG4gICAgc3VwZXIobGF5b3V0c0NvbmZpZ3VyYXRpb24uZ2V0KCdNclJlc291cmNlTGF5b3V0Q29uZmlnJykgfHwgY29uZmlnKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBpbml0UGF5bG9hZCgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgcm91dGVyRGF0YTogdGhpcy5yb3V0ZXJEYXRhLFxuICAgICAgY29uZmlndXJhdGlvbjogdGhpcy5jb25maWd1cmF0aW9uLFxuICAgICAgY29tbXVuaWNhdGlvbjogdGhpcy5jb21tdW5pY2F0aW9uLFxuICAgICAgbWFpblN0YXRlOiB0aGlzLm1haW5TdGF0ZSxcbiAgICAgIGxheW91dFN0YXRlOiB0aGlzLmxheW91dFN0YXRlLFxuICAgICAgbW9kYWxTZXJ2aWNlOiB0aGlzLm1vZGFsU2VydmljZSxcbiAgICAgIGxvY2FsZVNlcnZpY2U6IHRoaXMubG9jYWxlU2VydmljZSxcbiAgICAgIG9wdGlvbnM6IHRoaXMuY29uZmlnLm9wdGlvbnMgfHwge30sXG4gICAgICByb3V0ZTogdGhpcy5yb3V0ZSxcbiAgICAgIHJvdXRlcjogdGhpcy5yb3V0ZXJcbiAgICB9O1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5hY3RpdmF0ZWRSb3V0ZS5kYXRhLnN1YnNjcmliZSgocm91dGVyRGF0YSkgPT4ge1xuICAgICAgdGhpcy5sYXlvdXRTdGF0ZS5hZGQoJ2NvbnRlbnQnKTtcbiAgICAgIHRoaXMucm91dGVyRGF0YSA9IHJvdXRlckRhdGE7XG4gICAgICB0aGlzLmxvYWRXaWRnZXRzKCk7XG4gICAgICB0aGlzLm9uSW5pdCgpO1xuICAgIH0pO1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIGNvbnN0IHsgY29uZmlnSWQgfSA9IHRoaXMucm91dGVyRGF0YTtcbiAgICBjb25zdCB0aW1lb3V0ID0gdGhpcy5jb25maWd1cmF0aW9uLmdldChjb25maWdJZCkucGFnZUxvYWQgfHwgMTAwMDtcblxuICAgIC8vIElmIGEgZnJhZ21lbnQgKCNpZCkgaXMgcHJlc2VudCBpbiB0aGUgdXJsLCB0aGUgcGFnZSBzY3JvbGwgdG8gdGhhdCBmcmFnbWVudFxuICAgIHRoaXMucm91dGUuZnJhZ21lbnQuc3Vic2NyaWJlKChmcmFnbWVudCkgPT4ge1xuICAgICAgaWYgKGZyYWdtZW50KSB7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChmcmFnbWVudCk7XG4gICAgICAgICAgaWYgKGVsZW1lbnQpIHtcbiAgICAgICAgICAgIGVsZW1lbnQuc2Nyb2xsSW50b1ZpZXcoeyBiZWhhdmlvcjogJ3Ntb290aCcgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9LCB0aW1lb3V0KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMub25EZXN0cm95KCk7XG4gIH1cblxuICBsb2FkV2lkZ2V0cygpIHtcbiAgICBjb25zdCB7IGNvbmZpZ0lkIH0gPSB0aGlzLnJvdXRlckRhdGE7XG4gICAgY29uc3QgeyB0b3AsIGNvbnRlbnQgfSA9IHRoaXMuY29uZmlndXJhdGlvbi5nZXQoY29uZmlnSWQpLnNlY3Rpb25zO1xuICAgIGNvbnN0IHNlY3Rpb25zID0gdG9wLmNvbmNhdChjb250ZW50KTtcbiAgICB0aGlzLndpZGdldHMgPSBbXTtcbiAgICBpZiAoc2VjdGlvbnMpIHtcbiAgICAgIHNlY3Rpb25zLmZvckVhY2goKHtcbiAgICAgICAgaWQsIHR5cGUsIG9wdGlvbnMsIHRvb2xzXG4gICAgICB9KSA9PiB7XG4gICAgICAgIGNvbnN0IHdpZGdldE9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICAgICAgICB3aWRnZXRPcHRpb25zLmxvY2FsZVNlcnZpY2UgPSB0aGlzLmxvY2FsZVNlcnZpY2U7XG4gICAgICAgIC8vIEFkZCByb3V0ZSB0byBtZXRhZGF0YS1keW5hbWljIG9wdGlvbnNcbiAgICAgICAgaWYgKHR5cGUgPT09ICdtZXRhZGF0YS1keW5hbWljJykge1xuICAgICAgICAgIG9wdGlvbnMucm91dGUgPSB0aGlzLnJvdXRlO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMud2lkZ2V0cy5wdXNoKHtcbiAgICAgICAgICBpZCxcbiAgICAgICAgICBvcHRpb25zOiB3aWRnZXRPcHRpb25zLFxuICAgICAgICAgIGRhdGFTb3VyY2U6IERBVEFTT1VSQ0VfTUFQW3R5cGVdLFxuICAgICAgICAgIGV2ZW50SGFuZGxlcjogRVZFTlRIQU5ETEVSX01BUFt0eXBlXVxuICAgICAgICB9KTtcbiAgICAgICAgLy8gaW1hZ2Ugdmlld2VyIG92ZXJsYXkgZGV0YWlsc1xuICAgICAgICBpZiAodHlwZSA9PT0gJ3ZpZXdlcicpIHtcbiAgICAgICAgICB0aGlzLndpZGdldHMucHVzaCh7XG4gICAgICAgICAgICBpZDogYCR7aWR9LW92ZXJsYXktZGV0YWlsc2AsXG4gICAgICAgICAgICBvcHRpb25zOiB3aWRnZXRPcHRpb25zLFxuICAgICAgICAgICAgZGF0YVNvdXJjZTogREFUQVNPVVJDRV9NQVBbYCR7dHlwZX0tb3ZlcmxheS1kZXRhaWxzYF0sXG4gICAgICAgICAgICBldmVudEhhbmRsZXI6IEVWRU5USEFORExFUl9NQVBbYCR7dHlwZX0tb3ZlcmxheS1kZXRhaWxzYF1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICAvLyBpbWFnZSB2aWV3ZXIgdG9vbHNcbiAgICAgICAgaWYgKHR5cGUgPT09ICd2aWV3ZXInICYmIHRvb2xzKSB7XG4gICAgICAgICAgdGhpcy53aWRnZXRzLnB1c2goe1xuICAgICAgICAgICAgaWQ6IGAke2lkfS10b29sc2AsXG4gICAgICAgICAgICBvcHRpb25zOiB3aWRnZXRPcHRpb25zLFxuICAgICAgICAgICAgZGF0YVNvdXJjZTogREFUQVNPVVJDRV9NQVBbYCR7dHlwZX0tdG9vbHNgXSxcbiAgICAgICAgICAgIGV2ZW50SGFuZGxlcjogRVZFTlRIQU5ETEVSX01BUFtgJHt0eXBlfS10b29sc2BdXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cIm1yLXJlc291cmNlIG1yLWxheW91dFwiIFxuICAgICAqbmdJZj1cImxiLmRhdGFTb3VyY2UgJiYgbGIuZGF0YVNvdXJjZS5wYWdlQ29uZmlnXCJcbiAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAnaXMtbG9hZGluZyc6ICggbGF5b3V0U3RhdGUuZ2V0JCgnY29udGVudCcpIHwgYXN5bmMgKSA9PSAnTE9BRElORycsXG4gICAgICAgICdpcy1lcnJvcic6ICggbGF5b3V0U3RhdGUuZ2V0JCgnY29udGVudCcpIHwgYXN5bmMgKSA9PSAnRVJST1InXG4gICAgICB9XCI+XG4gICAgPCEtLSBSRVNPVVJDRSBMQVlPVVQgQ09OVEVOVCAtLT5cbiAgICA8bmctY29udGFpbmVyIFtuZ1N3aXRjaF09XCJsYXlvdXRTdGF0ZS5nZXQkKCdjb250ZW50JykgfCBhc3luY1wiPlxuICAgICAgICA8IS0tIGxvYWRpbmcgLS0+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidMT0FESU5HJ1wiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1yLWxheW91dF9fbG9hZGVyXCI+XG4gICAgICAgICAgICAgICAgPG43LWxvYWRlcj48L243LWxvYWRlcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICA8IS0tIGVycm9yIC0tPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInRVJST1InXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXItbGF5b3V0X19lcnJvclwiPlxuICAgICAgICAgICAgICAgIDxoMj57eyBsYi5kYXRhU291cmNlLmVycm9yVGl0bGUgfX08L2gyPlxuICAgICAgICAgICAgICAgIDxwPnt7IGxiLmRhdGFTb3VyY2UuZXJyb3JEZXNjcmlwdGlvbiB9fTwvcD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICA8IS0tIHN1Y2Nlc3MgLS0+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidTVUNDRVNTJ1wiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImxiLmRhdGFTb3VyY2UucGFnZUNvbmZpZy5zZWN0aW9ucyBhcyBzZWN0aW9uc1wiPlxuICAgICAgICAgICAgICAgIDwhLS0gUGFzcyB0aGUgbGlzdCBvZiBibG9ja3MgdG8gcmVuZGVyIHRvIHRoZSBibG9jayB0ZW1wbGF0ZSAtLT5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXItcmVzb3VyY2VfX3RvcFwiPlxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiYmxvY2tzOyBjb250ZXh0OiB7ICRpbXBsaWNpdDogc2VjdGlvbnMudG9wIH1cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXItcmVzb3VyY2VfX2NvbnRlbnQgbXItc2lkZS1tYXJnaW5cIj5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImJsb2NrczsgY29udGV4dDogeyAkaW1wbGljaXQ6IHNlY3Rpb25zLmNvbnRlbnQgfVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgPC9uZy1jb250YWluZXI+XG48L2Rpdj5cblxuPG5nLXRlbXBsYXRlICNibG9ja3MgbGV0LWxpc3Q+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgc2VjdGlvbiBvZiBsaXN0XCI+XG4gICAgICAgIDxzZWN0aW9uICpuZ0lmPVwibGIud2lkZ2V0c1tzZWN0aW9uLmlkXS5kcy5vdXQkIHwgYXN5bmNcIlxuICAgICAgICBjbGFzcz1cInt7ICdtci1yZXNvdXJjZV9fc2VjdGlvbiBtci1yZXNvdXJjZV9fJyArIHNlY3Rpb24udHlwZSB9fVwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPVwic2VjdGlvbi50eXBlXCI+XG5cbiAgICAgICAgICAgICAgICA8IS0tIFRBQlMgLS0+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ3RhYnMnXCI+XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHRhYiBvZiBsYi53aWRnZXRzW3NlY3Rpb24uaWRdLmRzLm91dCQgfCBhc3luY1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG43LWFuY2hvci13cmFwcGVyIFtkYXRhXT1cInRhYi5hbmNob3JcIiBbY2xhc3Nlc109XCJ0YWIuY2xhc3Nlc1wiICpuZ0lmPVwiIXRhYi5oaWRlVGFiXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtci1yZXNvdXJjZV9fdGFicy1pdGVtXCI+e3sgdGFiLmxhYmVsIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uNy1hbmNob3Itd3JhcHBlcj5cbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgICAgICA8IS0tIElOTkVSIFRJVExFIC0tPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIid0aXRsZSdcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1yLXJlc291cmNlX190aXRsZS1jb250ZW50IG1yLXNpZGUtbWFyZ2luXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bjctaW5uZXItdGl0bGUgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2RhdGFdPVwibGIud2lkZ2V0c1tzZWN0aW9uLmlkXS5kcy5vdXQkIHwgYXN5bmNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtlbWl0XT1cImxiLndpZGdldHNbc2VjdGlvbi5pZF0uZW1pdFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uNy1pbm5lci10aXRsZT5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgICAgICA8IS0tIENVU1RPTSBCVVRUT04gLS0+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ2J1dHRvbidcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1yLXJlc291cmNlX19idXR0b25cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxuNy1idXR0b24gXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2RhdGFdPVwibGIud2lkZ2V0c1tzZWN0aW9uLmlkXS5kcy5vdXQkIHwgYXN5bmNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtlbWl0XT1cImxiLndpZGdldHNbc2VjdGlvbi5pZF0uZW1pdFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uNy1idXR0b24+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIFxuICAgICAgICAgICAgICAgIDwhLS0gSU1BR0UgVklFV0VSIElJSUYgLS0+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ3ZpZXdlci1paWlmJ1wiPlxuICAgICAgICAgICAgICAgICAgICA8bjctbWlyYWRvclxuICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnRleHRtZW51KT1cImxiLmRhdGFTb3VyY2UuaGFzQ29udGV4dE1lbnUoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbZGF0YV09XCJsYi53aWRnZXRzW3NlY3Rpb24uaWRdLmRzLm91dCQgfCBhc3luY1wiPlxuICAgICAgICAgICAgICAgICAgICA8L243LW1pcmFkb3I+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgXG4gICAgICAgICAgICAgICAgPCEtLSBJTUFHRSBWSUVXRVIgLS0+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ3ZpZXdlcidcIj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgPG43LWltYWdlLXZpZXdlciBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGF0YV09XCJsYi53aWRnZXRzW3NlY3Rpb24uaWRdLmRzLm91dCQgfCBhc3luY1wiIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtlbWl0XT1cImxiLndpZGdldHNbc2VjdGlvbi5pZF0uZW1pdFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uNy1pbWFnZS12aWV3ZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tIElNQUdFIFZJRVdFUiBUT09MUyAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxuNy1pbWFnZS12aWV3ZXItdG9vbHMgKm5nSWY9XCJzZWN0aW9uLnRvb2xzXCIgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2RhdGFdPVwibGIud2lkZ2V0c1tzZWN0aW9uLmlkICsgJy10b29scyddLmRzLm91dCQgfCBhc3luY1wiIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtlbWl0XT1cImxiLndpZGdldHNbc2VjdGlvbi5pZCArICctdG9vbHMnXS5lbWl0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L243LWltYWdlLXZpZXdlci10b29scz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gSU1BR0UgVklFV0VSIE9WRVJMQVkgREVUQUlMUyAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJsYi53aWRnZXRzW3NlY3Rpb24uaWQgKyAnLW92ZXJsYXktZGV0YWlscyddLmRzLm91dCQgfCBhc3luYyBhcyB2aWV3ZXJEZXRhaWxzRGF0YVwiIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibXItcmVzb3VyY2VfX3ZpZXdlci1vdmVybGF5LWRldGFpbHNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXItcmVzb3VyY2VfX3ZpZXdlci1vdmVybGF5LWRldGFpbHNfX2Nsb3NlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPVwibXItcmVzb3VyY2VfX3ZpZXdlci1vdmVybGF5LWRldGFpbHNfX2Nsb3NlLWxpbmtcIiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJsYi5ldmVudEhhbmRsZXIuZW1pdE91dGVyKCdvdmVybGF5Y2xvc2VjbGljaycpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm43LWljb24tY2xvc2VcIj48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bjctaXRlbS1wcmV2aWV3IFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGF0YV09XCJ2aWV3ZXJEZXRhaWxzRGF0YVwiIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZW1pdF09XCJsYi53aWRnZXRzW3NlY3Rpb24uaWQgKyAnLW92ZXJsYXktZGV0YWlscyddLmVtaXRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L243LWl0ZW0tcHJldmlldz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgXG4gICAgICAgICAgICAgICAgPCEtLSBNRVRBREFUQSBWSUVXRVIgLS0+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ21ldGFkYXRhJ1wiPlxuICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1yLWNvbnRlbnQtYmxvY2sgbXItY29udGVudC1ibG9jay1tZXRhZGF0YVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGgzICpuZ0lmPVwic2VjdGlvbi50aXRsZVwiIGNsYXNzPVwibXItY29udGVudC1ibG9ja19fdGl0bGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBzZWN0aW9uLnRpdGxlIH19XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2gzPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1yLWNvbnRlbnQtYmxvY2tfX2NvbnRlbnRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bXItcmVhZC1tb3JlIFtkYXRhXT1cInNlY3Rpb24ucmVhZG1vcmVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiBzZWN0aW9uPy5vcHRpb25zPy5yZWFkbW9yZSB8fCBzZWN0aW9uPy5vcHRpb25zPy5ncm91cFJlYWRtb3JlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHdpaG91dFJlYWRtb3JlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bXItbWV0YWRhdGEtcmVhZG1vcmVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGF0YV09XCJsYi53aWRnZXRzW3NlY3Rpb24uaWRdLmRzLm91dCQgfCBhc3luY1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2VtaXRdPVwibGIud2lkZ2V0c1tzZWN0aW9uLmlkXS5lbWl0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21yLW1ldGFkYXRhLXJlYWRtb3JlPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICN3aWhvdXRSZWFkbW9yZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuNy1tZXRhZGF0YS12aWV3ZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGF0YV09XCJsYi53aWRnZXRzW3NlY3Rpb24uaWRdLmRzLm91dCQgfCBhc3luY1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2VtaXRdPVwibGIud2lkZ2V0c1tzZWN0aW9uLmlkXS5lbWl0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L243LW1ldGFkYXRhLXZpZXdlcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21yLXJlYWQtbW9yZT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgIFxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICA8IS0tIE1FVEFEQVRBIERZTkFNSUMgLS0+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ21ldGFkYXRhLWR5bmFtaWMnXCI+XG4gICAgICAgICAgICAgICAgICAgIDxtci1tZXRhZGF0YS1keW5hbWljIFxuICAgICAgICAgICAgICAgICAgICBbZGF0YV09XCJsYi53aWRnZXRzW3NlY3Rpb24uaWRdLmRzLm91dCQgfCBhc3luY1wiXG4gICAgICAgICAgICAgICAgICAgIFtlbWl0XT1cImxiLndpZGdldHNbc2VjdGlvbi5pZF0uZW1pdFwiPlxuICAgICAgICAgICAgICAgICAgICA8L21yLW1ldGFkYXRhLWR5bmFtaWM+ICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICBcbiAgICAgICAgICAgICAgICA8IS0tIENPTExFQ1RJT04gLS0+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ2NvbGxlY3Rpb24nXCI+XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJsYi53aWRnZXRzW3NlY3Rpb24uaWRdLmRzLm91dCQgfCBhc3luYyBhcyBjb2xsZWN0aW9uJFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImNvbGxlY3Rpb24kLml0ZW1zPy5sZW5ndGggPiAwXCIgY2xhc3M9XCJtci1jb250ZW50LWJsb2NrIG1yLWNvbnRlbnQtYmxvY2stY29sbGVjdGlvblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMyAqbmdJZj1cInNlY3Rpb24udGl0bGVcIiBjbGFzcz1cIm1yLWNvbnRlbnQtYmxvY2tfX3RpdGxlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IHNlY3Rpb24udGl0bGUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtci1jb250ZW50LWJsb2NrX19jb250ZW50IHt7IHNlY3Rpb24uZ3JpZCA/ICduNy1ncmlkLScgKyBzZWN0aW9uLmdyaWQgOiAnJyB9fVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bjctaXRlbS1wcmV2aWV3ICpuZ0Zvcj1cImxldCBpdGVtIG9mIGNvbGxlY3Rpb24kPy5pdGVtc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGF0YV09XCJpdGVtXCIgW2VtaXRdPVwibGIud2lkZ2V0c1tzZWN0aW9uLmlkXS5lbWl0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbjctaXRlbS1wcmV2aWV3PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIFxuICAgICAgICAgICAgICAgIDwhLS0gSVRFTSBQUkVWSUVXIC0tPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidwcmV2aWV3J1wiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXItY29udGVudC1ibG9jayBtci1jb250ZW50LWJsb2NrLWl0ZW0tcHJldmlld1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGgzICpuZ0lmPVwic2VjdGlvbi50aXRsZVwiIGNsYXNzPVwibXItY29udGVudC1ibG9ja19fdGl0bGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBzZWN0aW9uLnRpdGxlIH19XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2gzPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1yLWNvbnRlbnQtYmxvY2tfX2NvbnRlbnRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bjctaXRlbS1wcmV2aWV3IFtkYXRhXT1cImxiLndpZGdldHNbc2VjdGlvbi5pZF0uZHMub3V0JCB8IGFzeW5jXCIgW2VtaXRdPVwibGIud2lkZ2V0c1tzZWN0aW9uLmlkXS5lbWl0XCI+ICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L243LWl0ZW0tcHJldmlldz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICBcbiAgICAgICAgICAgICAgICA8IS0tIFRFWFQgVklFV0VSIC0tPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIid0ZXh0LXZpZXdlcidcIj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtci1jb250ZW50LWJsb2NrIG1yLWNvbnRlbnQtYmxvY2stdGV4dC12aWV3ZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxoMyAqbmdJZj1cInNlY3Rpb24udGl0bGVcIiBjbGFzcz1cIm1yLWNvbnRlbnQtYmxvY2tfX3RpdGxlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgc2VjdGlvbi50aXRsZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtci1jb250ZW50LWJsb2NrX19jb250ZW50XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxuNy10ZXh0LXZpZXdlciBbZGF0YV09XCJsYi53aWRnZXRzW3NlY3Rpb24uaWRdLmRzLm91dCQgfCBhc3luY1wiIFtlbWl0XT1cImxiLndpZGdldHNbc2VjdGlvbi5pZF0uZW1pdFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L243LXRleHQtdmlld2VyPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICAgICAgPCEtLSBQQVJBTExFTCBURVhUIFZJRVdFUiAtLT5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCIncGFyYWxsZWwtdGV4dC12aWV3ZXInXCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXItY29udGVudC1ibG9jayBtci1jb250ZW50LWJsb2NrLXRleHQtdmlld2VyIG1yLWNvbnRlbnQtYmxvY2stcGFyYWxsZWwtdGV4dC12aWV3ZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxoMyAqbmdJZj1cInNlY3Rpb24udGl0bGVcIiBjbGFzcz1cIm1yLWNvbnRlbnQtYmxvY2tfX3RpdGxlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgc2VjdGlvbi50aXRsZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtci1jb250ZW50LWJsb2NrX19jb250ZW50XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxuNy1wYXJhbGxlbC10ZXh0LXZpZXdlciBbZGF0YV09XCJsYi53aWRnZXRzW3NlY3Rpb24uaWRdLmRzLm91dCQgfCBhc3luY1wiIFtlbWl0XT1cImxiLndpZGdldHNbc2VjdGlvbi5pZF0uZW1pdFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L243LXBhcmFsbGVsLXRleHQtdmlld2VyPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICAgICAgPCEtLSBNQVAgLS0+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ21hcCdcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1yLWNvbnRlbnQtYmxvY2sgbXItY29udGVudC1ibG9jay1tYXBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtci1jb250ZW50LWJsb2NrX19jb250ZW50XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG43LW1hcCBbZGF0YV09XCJsYi53aWRnZXRzW3NlY3Rpb24uaWRdLmRzLm91dCQgfCBhc3luY1wiIFtlbWl0XT1cImxiLndpZGdldHNbc2VjdGlvbi5pZF0uZW1pdFwiPjwvbjctbWFwPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICAgICAgPCEtLSBORVRXT1JLIC0tPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIiduZXR3b3JrLXJlc291cmNlJ1wiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXItY29udGVudC1ibG9jayBtci1jb250ZW50LWJsb2NrLW5ldHdvcmtcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtci1jb250ZW50LWJsb2NrX19jb250ZW50XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD1cImRlbW8tbmV0d29ya1wiIGNsYXNzPVwibmV0d29yay12aXN1YWxpemF0aW9uXCI+PHA+TmV0d29yazwvcD48L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICBcbiAgICAgICAgICAgICAgICA8IS0tIElORk8gQk9YIC0tPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidpbmZvLWJveCdcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1yLWNvbnRlbnQtYmxvY2sgbXItY29udGVudC1ibG9jay1pbmZvLWJveFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGgzICpuZ0lmPVwic2VjdGlvbi50aXRsZVwiIGNsYXNzPVwibXItY29udGVudC1ibG9ja19fdGl0bGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBzZWN0aW9uLnRpdGxlIH19XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2gzPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1yLWNvbnRlbnQtYmxvY2tfX2NvbnRlbnRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5mby1ib3hfX21vY2tcIj5pbmZvLWJveDwvZGl2PiAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICBcbiAgICAgICAgICAgICAgICA8IS0tIEJSRUFEQ1JVTUJTIC0tPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidicmVhZGNydW1icydcIj5cbiAgICAgICAgICAgICAgICAgICAgPG43LWJyZWFkY3J1bWJzIFtkYXRhXT1cImxiLndpZGdldHNbc2VjdGlvbi5pZF0uZHMub3V0JCB8IGFzeW5jXCI+XG4gICAgICAgICAgICAgICAgICAgIDwvbjctYnJlYWRjcnVtYnM+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L3NlY3Rpb24+XG4gICAgPC9uZy1jb250YWluZXI+XG48L25nLXRlbXBsYXRlPlxuIl19
171
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzb3VyY2UtbGF5b3V0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbjctYm9pbGVycGxhdGUtbXVydWNhL3NyYy9saWIvbGF5b3V0cy9yZXNvdXJjZS1sYXlvdXQvcmVzb3VyY2UtbGF5b3V0LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbjctYm9pbGVycGxhdGUtbXVydWNhL3NyYy9saWIvbGF5b3V0cy9yZXNvdXJjZS1sYXlvdXQvcmVzb3VyY2UtbGF5b3V0Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQ0wsY0FBYyxFQUtmLE1BQU0sMEJBQTBCLENBQUM7QUFHbEMsT0FBTyxFQUFFLHNCQUFzQixJQUFJLE1BQU0sRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzVFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUN2RSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDckUsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sOENBQThDLENBQUM7QUFDdEYsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFDbEYsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ3BFLE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLHNEQUFzRCxDQUFDO0FBQ3JHLE9BQU8sRUFBRSxVQUFVLEVBQUUsbUJBQW1CLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUM1RixPQUFPLEVBQ0wsZUFBZSxFQUNmLFVBQVUsRUFDVixjQUFjLEVBQ2QsZUFBZSxFQUNmLG9CQUFvQixFQUNwQixXQUFXLEVBQ1gsY0FBYyxFQUNkLGVBQWUsRUFDZixZQUFZLEVBQ1osY0FBYyxFQUNkLHNCQUFzQixFQUN0Qixn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QUFFLGdCQUFnQixDQUFDLElBQUksQ0FBQztpQkFDckMsQ0FBQyxDQUFDO2dCQUNILCtCQUErQjtnQkFDL0IsSUFBSSxJQUFJLEtBQUssUUFBUSxFQUFFLENBQUM7b0JBQ3RCLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDO3dCQUNoQixFQUFFLEVBQUUsR0FBRyxFQUFFLGtCQUFrQjt3QkFDM0IsT0FBTyxFQUFFLGFBQWE7d0JBQ3RCLFVBQVUsRUFBRSxjQUFjLENBQUMsR0FBRyxJQUFJLGtCQUFrQixDQUFDO3dCQUNyRCxZQUFZLEVBQUUsZ0JBQWdCLENBQUMsR0FBRyxJQUFJLGtCQUFrQixDQUFDO3FCQUMxRCxDQUFDLENBQUM7Z0JBQ0wsQ0FBQztnQkFDRCxxQkFBcUI7Z0JBQ3JCLElBQUksSUFBSSxLQUFLLFFBQVEsSUFBSSxLQUFLLEVBQUUsQ0FBQztvQkFDL0IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUM7d0JBQ2hCLEVBQUUsRUFBRSxHQUFHLEVBQUUsUUFBUTt3QkFDakIsT0FBTyxFQUFFLGFBQWE7d0JBQ3RCLFVBQVUsRUFBRSxjQUFjLENBQUMsR0FBRyxJQUFJLFFBQVEsQ0FBQzt3QkFDM0MsWUFBWSxFQUFFLGdCQUFnQixDQUFDLEdBQUcsSUFBSSxRQUFRLENBQUM7cUJBQ2hELENBQUMsQ0FBQztnQkFDTCxDQUFDO1lBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDO0lBQ0gsQ0FBQzsrR0F6SFUseUJBQXlCO21HQUF6Qix5QkFBeUIsaUZDaEZ0Qyw2bllBa1BBOzs0RkRsS2EseUJBQXlCO2tCQUpyQyxTQUFTOytCQUNFLG9CQUFvQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCwgT25Jbml0LCBPbkRlc3Ryb3ksIEFmdGVyVmlld0luaXRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgRGF0YSwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7XG4gIEFic3RyYWN0TGF5b3V0LFxuICBDb21tdW5pY2F0aW9uU2VydmljZSxcbiAgTGF5b3V0c0NvbmZpZ3VyYXRpb25TZXJ2aWNlLFxuICBDb25maWd1cmF0aW9uU2VydmljZSxcbiAgTWFpblN0YXRlU2VydmljZVxufSBmcm9tICdAbmV0Ny9ib2lsZXJwbGF0ZS1jb21tb24nO1xuaW1wb3J0IHsgTXJMYXlvdXRTdGF0ZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9sYXlvdXQtc3RhdGUuc2VydmljZSc7XG5pbXBvcnQgeyBNclJlc291cmNlTW9kYWxTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvcmVzb3VyY2UtbW9kYWwuc2VydmljZSc7XG5pbXBvcnQgeyBNclJlc291cmNlTGF5b3V0Q29uZmlnIGFzIGNvbmZpZyB9IGZyb20gJy4vcmVzb3VyY2UtbGF5b3V0LmNvbmZpZyc7XG5pbXBvcnQgeyBNckltYWdlVmlld2VyRUggfSBmcm9tICcuLi8uLi9ldmVudC1oYW5kbGVycy9pbWFnZS12aWV3ZXIuZWgnO1xuaW1wb3J0IHsgTXJUZXh0Vmlld2VyRUggfSBmcm9tICcuLi8uLi9ldmVudC1oYW5kbGVycy90ZXh0LXZpZXdlci5laCc7XG5pbXBvcnQgeyBNclBhcmFsbGVsVGV4dFZpZXdlckVIIH0gZnJvbSAnLi4vLi4vZXZlbnQtaGFuZGxlcnMvcGFyYWxsZWwtdGV4dC12aWV3ZXIuZWgnO1xuaW1wb3J0IHsgTXJJbWFnZVZpZXdlclRvb2xzRUggfSBmcm9tICcuLi8uLi9ldmVudC1oYW5kbGVycy9pbWFnZS12aWV3ZXItdG9vbHMuZWgnO1xuaW1wb3J0IHsgTXJDb2xsZWN0aW9uRUggfSBmcm9tICcuLi8uLi9ldmVudC1oYW5kbGVycy9jb2xsZWN0aW9uLmVoJztcbmltcG9ydCB7IE1ySW1hZ2VWaWV3ZXJPdmVybGF5RGV0YWlsc0VIIH0gZnJvbSAnLi4vLi4vZXZlbnQtaGFuZGxlcnMvaW1hZ2Utdmlld2VyLW92ZXJsYXktZGV0YWlscy5laCc7XG5pbXBvcnQgeyBNckJ1dHRvbkVILCBNck1ldGFkYXRhRHluYW1pY0VILCBNck5ldHdvcmtSZXNvdXJjZUVIIH0gZnJvbSAnLi4vLi4vZXZlbnQtaGFuZGxlcnMnO1xuaW1wb3J0IHtcbiAgTXJCcmVhZGNydW1ic0RTLFxuICBNckJ1dHRvbkRTLFxuICBNckNvbGxlY3Rpb25EUyxcbiAgTXJJbWFnZVZpZXdlckRTLFxuICBNckltYWdlVmlld2VyVG9vbHNEUyxcbiAgTXJJbmZvQm94RFMsXG4gIE1ySW5uZXJUaXRsZURTLFxuICBNckl0ZW1QcmV2aWV3RFMsXG4gIE1yTWV0YWRhdGFEUyxcbiAgTXJUZXh0Vmlld2VyRFMsXG4gIE1yUGFyYWxsZWxUZXh0Vmlld2VyRFMsXG4gIE1yUmVzb3VyY2VUYWJzRFMsXG4gIE1ySW1hZ2VWaWV3ZXJPdmVybGF5RGV0YWlsc0RTLFxuICBNck1ldGFkYXRhRHluYW1pY0RTLFxuICBNckltYWdlVmlld2VySWlpZkRTLFxuICBNck5ldHdvcmtSZXNvdXJjZURTLFxufSBmcm9tICcuLi8uLi9kYXRhLXNvdXJjZXMnO1xuaW1wb3J0IHsgTXJNYXBEUyB9IGZyb20gJy4uLy4uL2RhdGEtc291cmNlcy9tYXAuZHMnO1xuaW1wb3J0IHsgTXJMb2NhbGVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbG9jYWxlLnNlcnZpY2UnO1xuXG5jb25zdCBEQVRBU09VUkNFX01BUCA9IHtcbiAgYnJlYWRjcnVtYnM6IE1yQnJlYWRjcnVtYnNEUyxcbiAgYnV0dG9uOiBNckJ1dHRvbkRTLFxuICBjb2xsZWN0aW9uOiBNckNvbGxlY3Rpb25EUyxcbiAgaW5mbzogTXJJbmZvQm94RFMsXG4gIG1hcDogTXJNYXBEUyxcbiAgbWV0YWRhdGE6IE1yTWV0YWRhdGFEUyxcbiAgcHJldmlldzogTXJJdGVtUHJldmlld0RTLFxuICB0YWJzOiBNclJlc291cmNlVGFic0RTLFxuICB0ZXh0OiBNclRleHRWaWV3ZXJEUyxcbiAgdGl0bGU6IE1ySW5uZXJUaXRsZURTLFxuICB2aWV3ZXI6IE1ySW1hZ2VWaWV3ZXJEUyxcbiAgJ3ZpZXdlci10b29scyc6IE1ySW1hZ2VWaWV3ZXJUb29sc0RTLFxuICAndmlld2VyLW92ZXJsYXktZGV0YWlscyc6IE1ySW1hZ2VWaWV3ZXJPdmVybGF5RGV0YWlsc0RTLFxuICAndGV4dC12aWV3ZXInOiBNclRleHRWaWV3ZXJEUyxcbiAgJ3BhcmFsbGVsLXRleHQtdmlld2VyJzogTXJQYXJhbGxlbFRleHRWaWV3ZXJEUyxcbiAgJ21ldGFkYXRhLWR5bmFtaWMnOiBNck1ldGFkYXRhRHluYW1pY0RTLFxuICAndmlld2VyLWlpaWYnOiBNckltYWdlVmlld2VySWlpZkRTLFxuICAnbmV0d29yay1yZXNvdXJjZSc6IE1yTmV0d29ya1Jlc291cmNlRFNcbn07XG5cbmNvbnN0IEVWRU5USEFORExFUl9NQVAgPSB7XG4gIHZpZXdlcjogTXJJbWFnZVZpZXdlckVILFxuICAndmlld2VyLXRvb2xzJzogTXJJbWFnZVZpZXdlclRvb2xzRUgsXG4gICd2aWV3ZXItb3ZlcmxheS1kZXRhaWxzJzogTXJJbWFnZVZpZXdlck92ZXJsYXlEZXRhaWxzRUgsXG4gICd0ZXh0LXZpZXdlcic6IE1yVGV4dFZpZXdlckVILFxuICAncGFyYWxsZWwtdGV4dC12aWV3ZXInOiBNclBhcmFsbGVsVGV4dFZpZXdlckVILFxuICBjb2xsZWN0aW9uOiBNckNvbGxlY3Rpb25FSCxcbiAgJ21ldGFkYXRhLWR5bmFtaWMnOiBNck1ldGFkYXRhRHluYW1pY0VILFxuICBidXR0b246IE1yQnV0dG9uRUgsXG4gICduZXR3b3JrLXJlc291cmNlJzogTXJOZXR3b3JrUmVzb3VyY2VFSCxcbiAgLy8gbWFwOiBNck1hcEVIXG59O1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdtci1yZXNvdXJjZS1sYXlvdXQnLFxuICB0ZW1wbGF0ZVVybDogJy4vcmVzb3VyY2UtbGF5b3V0Lmh0bWwnLFxufSlcbmV4cG9ydCBjbGFzcyBNclJlc291cmNlTGF5b3V0Q29tcG9uZW50IGV4dGVuZHMgQWJzdHJhY3RMYXlvdXQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSxcbkFmdGVyVmlld0luaXQge1xuICBwcml2YXRlIHJvdXRlckRhdGE6IERhdGE7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgbGF5b3V0c0NvbmZpZ3VyYXRpb246IExheW91dHNDb25maWd1cmF0aW9uU2VydmljZSxcbiAgICBwcml2YXRlIGFjdGl2YXRlZFJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcbiAgICBwcml2YXRlIGNvbmZpZ3VyYXRpb246IENvbmZpZ3VyYXRpb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgY29tbXVuaWNhdGlvbjogQ29tbXVuaWNhdGlvblNlcnZpY2UsXG4gICAgcHJpdmF0ZSBtYWluU3RhdGU6IE1haW5TdGF0ZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSByb3V0ZTogQWN0aXZhdGVkUm91dGUsXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcbiAgICBwdWJsaWMgbGF5b3V0U3RhdGU6IE1yTGF5b3V0U3RhdGVTZXJ2aWNlLFxuICAgIHB1YmxpYyBtb2RhbFNlcnZpY2U6IE1yUmVzb3VyY2VNb2RhbFNlcnZpY2UsXG4gICAgcHVibGljIGxvY2FsZVNlcnZpY2U6IE1yTG9jYWxlU2VydmljZSxcbiAgKSB7XG4gICAgc3VwZXIobGF5b3V0c0NvbmZpZ3VyYXRpb24uZ2V0KCdNclJlc291cmNlTGF5b3V0Q29uZmlnJykgfHwgY29uZmlnKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBpbml0UGF5bG9hZCgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgcm91dGVyRGF0YTogdGhpcy5yb3V0ZXJEYXRhLFxuICAgICAgY29uZmlndXJhdGlvbjogdGhpcy5jb25maWd1cmF0aW9uLFxuICAgICAgY29tbXVuaWNhdGlvbjogdGhpcy5jb21tdW5pY2F0aW9uLFxuICAgICAgbWFpblN0YXRlOiB0aGlzLm1haW5TdGF0ZSxcbiAgICAgIGxheW91dFN0YXRlOiB0aGlzLmxheW91dFN0YXRlLFxuICAgICAgbW9kYWxTZXJ2aWNlOiB0aGlzLm1vZGFsU2VydmljZSxcbiAgICAgIGxvY2FsZVNlcnZpY2U6IHRoaXMubG9jYWxlU2VydmljZSxcbiAgICAgIG9wdGlvbnM6IHRoaXMuY29uZmlnLm9wdGlvbnMgfHwge30sXG4gICAgICByb3V0ZTogdGhpcy5yb3V0ZSxcbiAgICAgIHJvdXRlcjogdGhpcy5yb3V0ZXJcbiAgICB9O1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5hY3RpdmF0ZWRSb3V0ZS5kYXRhLnN1YnNjcmliZSgocm91dGVyRGF0YSkgPT4ge1xuICAgICAgdGhpcy5sYXlvdXRTdGF0ZS5hZGQoJ2NvbnRlbnQnKTtcbiAgICAgIHRoaXMucm91dGVyRGF0YSA9IHJvdXRlckRhdGE7XG4gICAgICB0aGlzLmxvYWRXaWRnZXRzKCk7XG4gICAgICB0aGlzLm9uSW5pdCgpO1xuICAgIH0pO1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIGNvbnN0IHsgY29uZmlnSWQgfSA9IHRoaXMucm91dGVyRGF0YTtcbiAgICBjb25zdCB0aW1lb3V0ID0gdGhpcy5jb25maWd1cmF0aW9uLmdldChjb25maWdJZCkucGFnZUxvYWQgfHwgMTAwMDtcblxuICAgIC8vIElmIGEgZnJhZ21lbnQgKCNpZCkgaXMgcHJlc2VudCBpbiB0aGUgdXJsLCB0aGUgcGFnZSBzY3JvbGwgdG8gdGhhdCBmcmFnbWVudFxuICAgIHRoaXMucm91dGUuZnJhZ21lbnQuc3Vic2NyaWJlKChmcmFnbWVudCkgPT4ge1xuICAgICAgaWYgKGZyYWdtZW50KSB7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChmcmFnbWVudCk7XG4gICAgICAgICAgaWYgKGVsZW1lbnQpIHtcbiAgICAgICAgICAgIC8vIE9wZW4gcmVhZC1tb3JlIGlmIHByZXNlbnRcbiAgICAgICAgICAgIGNvbnN0IHJlYWRNb3JlRWxlbWVudCA9IGVsZW1lbnRcbiAgICAgICAgICAgICAgPy5jbG9zZXN0KCcubXItcmVhZC1tb3JlX19jb250ZW50JylcbiAgICAgICAgICAgICAgPy5jbG9zZXN0KCcubXItcmVhZC1tb3JlLmlzLWNvbGxhcHNlZCcpO1xuICAgICAgICAgICAgaWYgKHJlYWRNb3JlRWxlbWVudCkge1xuICAgICAgICAgICAgICBjb25zdCByZWFkTW9yZUJ1dHRvbiA9IHJlYWRNb3JlRWxlbWVudC5xdWVyeVNlbGVjdG9yKFxuICAgICAgICAgICAgICAgICc6c2NvcGUgPiAubXItcmVhZC1tb3JlX19idG4nXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIGlmIChyZWFkTW9yZUJ1dHRvbiBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgcmVhZE1vcmVCdXR0b24uY2xpY2soKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAvLyBTY3JvbGxcbiAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiBlbGVtZW50LnNjcm9sbEludG9WaWV3KHsgYmVoYXZpb3I6ICdzbW9vdGgnIH0pLCAzMDApO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgLy8gU2Nyb2xsXG4gICAgICAgICAgICAgIGVsZW1lbnQuc2Nyb2xsSW50b1ZpZXcoeyBiZWhhdmlvcjogJ3Ntb290aCcgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9LCB0aW1lb3V0KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMub25EZXN0cm95KCk7XG4gIH1cblxuICBsb2FkV2lkZ2V0cygpIHtcbiAgICBjb25zdCB7IGNvbmZpZ0lkIH0gPSB0aGlzLnJvdXRlckRhdGE7XG4gICAgY29uc3QgeyB0b3AsIGNvbnRlbnQgfSA9IHRoaXMuY29uZmlndXJhdGlvbi5nZXQoY29uZmlnSWQpLnNlY3Rpb25zO1xuICAgIGNvbnN0IHNlY3Rpb25zID0gdG9wLmNvbmNhdChjb250ZW50KTtcbiAgICB0aGlzLndpZGdldHMgPSBbXTtcbiAgICBpZiAoc2VjdGlvbnMpIHtcbiAgICAgIHNlY3Rpb25zLmZvckVhY2goKHtcbiAgICAgICAgaWQsIHR5cGUsIG9wdGlvbnMsIHRvb2xzXG4gICAgICB9KSA9PiB7XG4gICAgICAgIGNvbnN0IHdpZGdldE9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICAgICAgICB3aWRnZXRPcHRpb25zLmxvY2FsZVNlcnZpY2UgPSB0aGlzLmxvY2FsZVNlcnZpY2U7XG4gICAgICAgIC8vIEFkZCByb3V0ZSB0byBtZXRhZGF0YS1keW5hbWljIG9wdGlvbnNcbiAgICAgICAgaWYgKHR5cGUgPT09ICdtZXRhZGF0YS1keW5hbWljJykge1xuICAgICAgICAgIG9wdGlvbnMucm91dGUgPSB0aGlzLnJvdXRlO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMud2lkZ2V0cy5wdXNoKHtcbiAgICAgICAgICBpZCxcbiAgICAgICAgICBvcHRpb25zOiB3aWRnZXRPcHRpb25zLFxuICAgICAgICAgIGRhdGFTb3VyY2U6IERBVEFTT1VSQ0VfTUFQW3R5cGVdLFxuICAgICAgICAgIGV2ZW50SGFuZGxlcjogRVZFTlRIQU5ETEVSX01BUFt0eXBlXVxuICAgICAgICB9KTtcbiAgICAgICAgLy8gaW1hZ2Ugdmlld2VyIG92ZXJsYXkgZGV0YWlsc1xuICAgICAgICBpZiAodHlwZSA9PT0gJ3ZpZXdlcicpIHtcbiAgICAgICAgICB0aGlzLndpZGdldHMucHVzaCh7XG4gICAgICAgICAgICBpZDogYCR7aWR9LW92ZXJsYXktZGV0YWlsc2AsXG4gICAgICAgICAgICBvcHRpb25zOiB3aWRnZXRPcHRpb25zLFxuICAgICAgICAgICAgZGF0YVNvdXJjZTogREFUQVNPVVJDRV9NQVBbYCR7dHlwZX0tb3ZlcmxheS1kZXRhaWxzYF0sXG4gICAgICAgICAgICBldmVudEhhbmRsZXI6IEVWRU5USEFORExFUl9NQVBbYCR7dHlwZX0tb3ZlcmxheS1kZXRhaWxzYF1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICAvLyBpbWFnZSB2aWV3ZXIgdG9vbHNcbiAgICAgICAgaWYgKHR5cGUgPT09ICd2aWV3ZXInICYmIHRvb2xzKSB7XG4gICAgICAgICAgdGhpcy53aWRnZXRzLnB1c2goe1xuICAgICAgICAgICAgaWQ6IGAke2lkfS10b29sc2AsXG4gICAgICAgICAgICBvcHRpb25zOiB3aWRnZXRPcHRpb25zLFxuICAgICAgICAgICAgZGF0YVNvdXJjZTogREFUQVNPVVJDRV9NQVBbYCR7dHlwZX0tdG9vbHNgXSxcbiAgICAgICAgICAgIGV2ZW50SGFuZGxlcjogRVZFTlRIQU5ETEVSX01BUFtgJHt0eXBlfS10b29sc2BdXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cIm1yLXJlc291cmNlIG1yLWxheW91dFwiIFxuICAgICAqbmdJZj1cImxiLmRhdGFTb3VyY2UgJiYgbGIuZGF0YVNvdXJjZS5wYWdlQ29uZmlnXCJcbiAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAnaXMtbG9hZGluZyc6ICggbGF5b3V0U3RhdGUuZ2V0JCgnY29udGVudCcpIHwgYXN5bmMgKSA9PSAnTE9BRElORycsXG4gICAgICAgICdpcy1lcnJvcic6ICggbGF5b3V0U3RhdGUuZ2V0JCgnY29udGVudCcpIHwgYXN5bmMgKSA9PSAnRVJST1InXG4gICAgICB9XCI+XG4gICAgPCEtLSBSRVNPVVJDRSBMQVlPVVQgQ09OVEVOVCAtLT5cbiAgICA8bmctY29udGFpbmVyIFtuZ1N3aXRjaF09XCJsYXlvdXRTdGF0ZS5nZXQkKCdjb250ZW50JykgfCBhc3luY1wiPlxuICAgICAgICA8IS0tIGxvYWRpbmcgLS0+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidMT0FESU5HJ1wiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1yLWxheW91dF9fbG9hZGVyXCI+XG4gICAgICAgICAgICAgICAgPG43LWxvYWRlcj48L243LWxvYWRlcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICA8IS0tIGVycm9yIC0tPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInRVJST1InXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXItbGF5b3V0X19lcnJvclwiPlxuICAgICAgICAgICAgICAgIDxoMj57eyBsYi5kYXRhU291cmNlLmVycm9yVGl0bGUgfX08L2gyPlxuICAgICAgICAgICAgICAgIDxwPnt7IGxiLmRhdGFTb3VyY2UuZXJyb3JEZXNjcmlwdGlvbiB9fTwvcD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICA8IS0tIHN1Y2Nlc3MgLS0+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidTVUNDRVNTJ1wiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImxiLmRhdGFTb3VyY2UucGFnZUNvbmZpZy5zZWN0aW9ucyBhcyBzZWN0aW9uc1wiPlxuICAgICAgICAgICAgICAgIDwhLS0gUGFzcyB0aGUgbGlzdCBvZiBibG9ja3MgdG8gcmVuZGVyIHRvIHRoZSBibG9jayB0ZW1wbGF0ZSAtLT5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXItcmVzb3VyY2VfX3RvcFwiPlxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiYmxvY2tzOyBjb250ZXh0OiB7ICRpbXBsaWNpdDogc2VjdGlvbnMudG9wIH1cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXItcmVzb3VyY2VfX2NvbnRlbnQgbXItc2lkZS1tYXJnaW5cIj5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImJsb2NrczsgY29udGV4dDogeyAkaW1wbGljaXQ6IHNlY3Rpb25zLmNvbnRlbnQgfVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgPC9uZy1jb250YWluZXI+XG48L2Rpdj5cblxuPG5nLXRlbXBsYXRlICNibG9ja3MgbGV0LWxpc3Q+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgc2VjdGlvbiBvZiBsaXN0XCI+XG4gICAgICAgIDxzZWN0aW9uICpuZ0lmPVwibGIud2lkZ2V0c1tzZWN0aW9uLmlkXS5kcy5vdXQkIHwgYXN5bmNcIlxuICAgICAgICBjbGFzcz1cInt7ICdtci1yZXNvdXJjZV9fc2VjdGlvbiBtci1yZXNvdXJjZV9fJyArIHNlY3Rpb24udHlwZSB9fVwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPVwic2VjdGlvbi50eXBlXCI+XG5cbiAgICAgICAgICAgICAgICA8IS0tIFRBQlMgLS0+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ3RhYnMnXCI+XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHRhYiBvZiBsYi53aWRnZXRzW3NlY3Rpb24uaWRdLmRzLm91dCQgfCBhc3luY1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG43LWFuY2hvci13cmFwcGVyIFtkYXRhXT1cInRhYi5hbmNob3JcIiBbY2xhc3Nlc109XCJ0YWIuY2xhc3Nlc1wiICpuZ0lmPVwiIXRhYi5oaWRlVGFiXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtci1yZXNvdXJjZV9fdGFicy1pdGVtXCI+e3sgdGFiLmxhYmVsIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uNy1hbmNob3Itd3JhcHBlcj5cbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgICAgICA8IS0tIElOTkVSIFRJVExFIC0tPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIid0aXRsZSdcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1yLXJlc291cmNlX190aXRsZS1jb250ZW50IG1yLXNpZGUtbWFyZ2luXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bjctaW5uZXItdGl0bGUgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2RhdGFdPVwibGIud2lkZ2V0c1tzZWN0aW9uLmlkXS5kcy5vdXQkIHwgYXN5bmNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtlbWl0XT1cImxiLndpZGdldHNbc2VjdGlvbi5pZF0uZW1pdFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uNy1pbm5lci10aXRsZT5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgICAgICA8IS0tIENVU1RPTSBCVVRUT04gLS0+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ2J1dHRvbidcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1yLXJlc291cmNlX19idXR0b25cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxuNy1idXR0b24gXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2RhdGFdPVwibGIud2lkZ2V0c1tzZWN0aW9uLmlkXS5kcy5vdXQkIHwgYXN5bmNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtlbWl0XT1cImxiLndpZGdldHNbc2VjdGlvbi5pZF0uZW1pdFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uNy1idXR0b24+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIFxuICAgICAgICAgICAgICAgIDwhLS0gSU1BR0UgVklFV0VSIElJSUYgLS0+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ3ZpZXdlci1paWlmJ1wiPlxuICAgICAgICAgICAgICAgICAgICA8bjctbWlyYWRvclxuICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnRleHRtZW51KT1cImxiLmRhdGFTb3VyY2UuaGFzQ29udGV4dE1lbnUoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbZGF0YV09XCJsYi53aWRnZXRzW3NlY3Rpb24uaWRdLmRzLm91dCQgfCBhc3luY1wiPlxuICAgICAgICAgICAgICAgICAgICA8L243LW1pcmFkb3I+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgXG4gICAgICAgICAgICAgICAgPCEtLSBJTUFHRSBWSUVXRVIgLS0+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ3ZpZXdlcidcIj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgPG43LWltYWdlLXZpZXdlciBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGF0YV09XCJsYi53aWRnZXRzW3NlY3Rpb24uaWRdLmRzLm91dCQgfCBhc3luY1wiIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtlbWl0XT1cImxiLndpZGdldHNbc2VjdGlvbi5pZF0uZW1pdFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uNy1pbWFnZS12aWV3ZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tIElNQUdFIFZJRVdFUiBUT09MUyAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxuNy1pbWFnZS12aWV3ZXItdG9vbHMgKm5nSWY9XCJzZWN0aW9uLnRvb2xzXCIgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2RhdGFdPVwibGIud2lkZ2V0c1tzZWN0aW9uLmlkICsgJy10b29scyddLmRzLm91dCQgfCBhc3luY1wiIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtlbWl0XT1cImxiLndpZGdldHNbc2VjdGlvbi5pZCArICctdG9vbHMnXS5lbWl0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L243LWltYWdlLXZpZXdlci10b29scz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gSU1BR0UgVklFV0VSIE9WRVJMQVkgREVUQUlMUyAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJsYi53aWRnZXRzW3NlY3Rpb24uaWQgKyAnLW92ZXJsYXktZGV0YWlscyddLmRzLm91dCQgfCBhc3luYyBhcyB2aWV3ZXJEZXRhaWxzRGF0YVwiIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibXItcmVzb3VyY2VfX3ZpZXdlci1vdmVybGF5LWRldGFpbHNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXItcmVzb3VyY2VfX3ZpZXdlci1vdmVybGF5LWRldGFpbHNfX2Nsb3NlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPVwibXItcmVzb3VyY2VfX3ZpZXdlci1vdmVybGF5LWRldGFpbHNfX2Nsb3NlLWxpbmtcIiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJsYi5ldmVudEhhbmRsZXIuZW1pdE91dGVyKCdvdmVybGF5Y2xvc2VjbGljaycpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm43LWljb24tY2xvc2VcIj48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bjctaXRlbS1wcmV2aWV3IFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGF0YV09XCJ2aWV3ZXJEZXRhaWxzRGF0YVwiIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZW1pdF09XCJsYi53aWRnZXRzW3NlY3Rpb24uaWQgKyAnLW92ZXJsYXktZGV0YWlscyddLmVtaXRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L243LWl0ZW0tcHJldmlldz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgXG4gICAgICAgICAgICAgICAgPCEtLSBNRVRBREFUQSBWSUVXRVIgLS0+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ21ldGFkYXRhJ1wiPlxuICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1yLWNvbnRlbnQtYmxvY2sgbXItY29udGVudC1ibG9jay1tZXRhZGF0YVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGgzICpuZ0lmPVwic2VjdGlvbi50aXRsZVwiIGNsYXNzPVwibXItY29udGVudC1ibG9ja19fdGl0bGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBzZWN0aW9uLnRpdGxlIH19XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2gzPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1yLWNvbnRlbnQtYmxvY2tfX2NvbnRlbnRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bXItcmVhZC1tb3JlIFtkYXRhXT1cInNlY3Rpb24ucmVhZG1vcmVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiBzZWN0aW9uPy5vcHRpb25zPy5yZWFkbW9yZSB8fCBzZWN0aW9uPy5vcHRpb25zPy5ncm91cFJlYWRtb3JlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHdpaG91dFJlYWRtb3JlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bXItbWV0YWRhdGEtcmVhZG1vcmVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGF0YV09XCJsYi53aWRnZXRzW3NlY3Rpb24uaWRdLmRzLm91dCQgfCBhc3luY1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2VtaXRdPVwibGIud2lkZ2V0c1tzZWN0aW9uLmlkXS5lbWl0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21yLW1ldGFkYXRhLXJlYWRtb3JlPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICN3aWhvdXRSZWFkbW9yZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuNy1tZXRhZGF0YS12aWV3ZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGF0YV09XCJsYi53aWRnZXRzW3NlY3Rpb24uaWRdLmRzLm91dCQgfCBhc3luY1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2VtaXRdPVwibGIud2lkZ2V0c1tzZWN0aW9uLmlkXS5lbWl0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L243LW1ldGFkYXRhLXZpZXdlcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21yLXJlYWQtbW9yZT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgIFxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICA8IS0tIE1FVEFEQVRBIERZTkFNSUMgLS0+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ21ldGFkYXRhLWR5bmFtaWMnXCI+XG4gICAgICAgICAgICAgICAgICAgIDxtci1tZXRhZGF0YS1keW5hbWljIFxuICAgICAgICAgICAgICAgICAgICBbZGF0YV09XCJsYi53aWRnZXRzW3NlY3Rpb24uaWRdLmRzLm91dCQgfCBhc3luY1wiXG4gICAgICAgICAgICAgICAgICAgIFtlbWl0XT1cImxiLndpZGdldHNbc2VjdGlvbi5pZF0uZW1pdFwiPlxuICAgICAgICAgICAgICAgICAgICA8L21yLW1ldGFkYXRhLWR5bmFtaWM+ICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICBcbiAgICAgICAgICAgICAgICA8IS0tIENPTExFQ1RJT04gLS0+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ2NvbGxlY3Rpb24nXCI+XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJsYi53aWRnZXRzW3NlY3Rpb24uaWRdLmRzLm91dCQgfCBhc3luYyBhcyBjb2xsZWN0aW9uJFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImNvbGxlY3Rpb24kLml0ZW1zPy5sZW5ndGggPiAwXCIgY2xhc3M9XCJtci1jb250ZW50LWJsb2NrIG1yLWNvbnRlbnQtYmxvY2stY29sbGVjdGlvblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMyAqbmdJZj1cInNlY3Rpb24udGl0bGVcIiBjbGFzcz1cIm1yLWNvbnRlbnQtYmxvY2tfX3RpdGxlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IHNlY3Rpb24udGl0bGUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtci1jb250ZW50LWJsb2NrX19jb250ZW50IHt7IHNlY3Rpb24uZ3JpZCA/ICduNy1ncmlkLScgKyBzZWN0aW9uLmdyaWQgOiAnJyB9fVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bjctaXRlbS1wcmV2aWV3ICpuZ0Zvcj1cImxldCBpdGVtIG9mIGNvbGxlY3Rpb24kPy5pdGVtc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGF0YV09XCJpdGVtXCIgW2VtaXRdPVwibGIud2lkZ2V0c1tzZWN0aW9uLmlkXS5lbWl0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbjctaXRlbS1wcmV2aWV3PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIFxuICAgICAgICAgICAgICAgIDwhLS0gSVRFTSBQUkVWSUVXIC0tPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidwcmV2aWV3J1wiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXItY29udGVudC1ibG9jayBtci1jb250ZW50LWJsb2NrLWl0ZW0tcHJldmlld1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGgzICpuZ0lmPVwic2VjdGlvbi50aXRsZVwiIGNsYXNzPVwibXItY29udGVudC1ibG9ja19fdGl0bGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBzZWN0aW9uLnRpdGxlIH19XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2gzPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1yLWNvbnRlbnQtYmxvY2tfX2NvbnRlbnRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bjctaXRlbS1wcmV2aWV3IFtkYXRhXT1cImxiLndpZGdldHNbc2VjdGlvbi5pZF0uZHMub3V0JCB8IGFzeW5jXCIgW2VtaXRdPVwibGIud2lkZ2V0c1tzZWN0aW9uLmlkXS5lbWl0XCI+ICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L243LWl0ZW0tcHJldmlldz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICBcbiAgICAgICAgICAgICAgICA8IS0tIFRFWFQgVklFV0VSIC0tPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIid0ZXh0LXZpZXdlcidcIj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtci1jb250ZW50LWJsb2NrIG1yLWNvbnRlbnQtYmxvY2stdGV4dC12aWV3ZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxoMyAqbmdJZj1cInNlY3Rpb24udGl0bGVcIiBjbGFzcz1cIm1yLWNvbnRlbnQtYmxvY2tfX3RpdGxlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgc2VjdGlvbi50aXRsZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtci1jb250ZW50LWJsb2NrX19jb250ZW50XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxuNy10ZXh0LXZpZXdlciBbZGF0YV09XCJsYi53aWRnZXRzW3NlY3Rpb24uaWRdLmRzLm91dCQgfCBhc3luY1wiIFtlbWl0XT1cImxiLndpZGdldHNbc2VjdGlvbi5pZF0uZW1pdFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L243LXRleHQtdmlld2VyPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICAgICAgPCEtLSBQQVJBTExFTCBURVhUIFZJRVdFUiAtLT5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCIncGFyYWxsZWwtdGV4dC12aWV3ZXInXCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXItY29udGVudC1ibG9jayBtci1jb250ZW50LWJsb2NrLXRleHQtdmlld2VyIG1yLWNvbnRlbnQtYmxvY2stcGFyYWxsZWwtdGV4dC12aWV3ZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxoMyAqbmdJZj1cInNlY3Rpb24udGl0bGVcIiBjbGFzcz1cIm1yLWNvbnRlbnQtYmxvY2tfX3RpdGxlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgc2VjdGlvbi50aXRsZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtci1jb250ZW50LWJsb2NrX19jb250ZW50XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxuNy1wYXJhbGxlbC10ZXh0LXZpZXdlciBbZGF0YV09XCJsYi53aWRnZXRzW3NlY3Rpb24uaWRdLmRzLm91dCQgfCBhc3luY1wiIFtlbWl0XT1cImxiLndpZGdldHNbc2VjdGlvbi5pZF0uZW1pdFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L243LXBhcmFsbGVsLXRleHQtdmlld2VyPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICAgICAgPCEtLSBNQVAgLS0+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ21hcCdcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1yLWNvbnRlbnQtYmxvY2sgbXItY29udGVudC1ibG9jay1tYXBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtci1jb250ZW50LWJsb2NrX19jb250ZW50XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG43LW1hcCBbZGF0YV09XCJsYi53aWRnZXRzW3NlY3Rpb24uaWRdLmRzLm91dCQgfCBhc3luY1wiIFtlbWl0XT1cImxiLndpZGdldHNbc2VjdGlvbi5pZF0uZW1pdFwiPjwvbjctbWFwPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICAgICAgPCEtLSBORVRXT1JLIC0tPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIiduZXR3b3JrLXJlc291cmNlJ1wiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXItY29udGVudC1ibG9jayBtci1jb250ZW50LWJsb2NrLW5ldHdvcmtcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtci1jb250ZW50LWJsb2NrX19jb250ZW50XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD1cImRlbW8tbmV0d29ya1wiIGNsYXNzPVwibmV0d29yay12aXN1YWxpemF0aW9uXCI+PHA+TmV0d29yazwvcD48L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICBcbiAgICAgICAgICAgICAgICA8IS0tIElORk8gQk9YIC0tPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidpbmZvLWJveCdcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1yLWNvbnRlbnQtYmxvY2sgbXItY29udGVudC1ibG9jay1pbmZvLWJveFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGgzICpuZ0lmPVwic2VjdGlvbi50aXRsZVwiIGNsYXNzPVwibXItY29udGVudC1ibG9ja19fdGl0bGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBzZWN0aW9uLnRpdGxlIH19XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2gzPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1yLWNvbnRlbnQtYmxvY2tfX2NvbnRlbnRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5mby1ib3hfX21vY2tcIj5pbmZvLWJveDwvZGl2PiAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICBcbiAgICAgICAgICAgICAgICA8IS0tIEJSRUFEQ1JVTUJTIC0tPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidicmVhZGNydW1icydcIj5cbiAgICAgICAgICAgICAgICAgICAgPG43LWJyZWFkY3J1bWJzIFtkYXRhXT1cImxiLndpZGdldHNbc2VjdGlvbi5pZF0uZHMub3V0JCB8IGFzeW5jXCI+XG4gICAgICAgICAgICAgICAgICAgIDwvbjctYnJlYWRjcnVtYnM+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L3NlY3Rpb24+XG4gICAgPC9uZy1jb250YWluZXI+XG48L25nLXRlbXBsYXRlPlxuIl19
@@ -1155,8 +1155,12 @@ class MrFiltersDS extends DataSource {
1155
1155
  }
1156
1156
 
1157
1157
  class MrHeroDS extends DataSource {
1158
+ constructor() {
1159
+ super(...arguments);
1160
+ this.currentInputValue = '';
1161
+ }
1158
1162
  transform(data) {
1159
- const { classes, background } = this.options;
1163
+ const { classes, background, input } = this.options;
1160
1164
  const { localeService } = this.options;
1161
1165
  const { text, image, title, button } = data;
1162
1166
  const backgroundImage = background ? image : null;
@@ -1175,6 +1179,11 @@ class MrHeroDS extends DataSource {
1175
1179
  queryParams: linksHelper.getQueryParams(button.link),
1176
1180
  };
1177
1181
  }
1182
+ // Search input
1183
+ if (button && input) {
1184
+ anchor.payload = { route: anchor.href, payloadId: 'hero-search' };
1185
+ anchor.href = null;
1186
+ }
1178
1187
  return {
1179
1188
  text,
1180
1189
  title,
@@ -1184,7 +1193,8 @@ class MrHeroDS extends DataSource {
1184
1193
  button: button && anchor ? {
1185
1194
  ...button,
1186
1195
  anchor,
1187
- } : null
1196
+ } : null,
1197
+ input
1188
1198
  };
1189
1199
  }
1190
1200
  }
@@ -2010,7 +2020,7 @@ class MrMetadataDS extends DataSource {
2010
2020
  .forEach(({ items }) => {
2011
2021
  items
2012
2022
  .filter((item) => isObject(item))
2013
- .forEach(({ label, value }) => {
2023
+ .forEach(({ label, value, anchorId }) => {
2014
2024
  const itemLabel = label && !hideLabels ? label : null;
2015
2025
  const classLabel = label && !hideLabels ? label.replace(/ /g, '_').toLowerCase() : null;
2016
2026
  if (Array.isArray(value)) {
@@ -2034,7 +2044,8 @@ class MrMetadataDS extends DataSource {
2034
2044
  classes: `mrc-${classLabel}`,
2035
2045
  items: value ? [{
2036
2046
  label: _t(itemLabel),
2037
- value: this.getItemValue(value)
2047
+ value: this.getItemValue(value),
2048
+ anchorId: anchorId || ''
2038
2049
  }] : []
2039
2050
  }]
2040
2051
  });
@@ -2058,6 +2069,7 @@ class MrMetadataDS extends DataSource {
2058
2069
  .map((childItem) => ({
2059
2070
  label: _t(childItem.label),
2060
2071
  value: this.getItemValue(childItem.value),
2072
+ anchorId: childItem.anchorId || ''
2061
2073
  })),
2062
2074
  // load the optional "readmore" configuration
2063
2075
  groupReadmore,
@@ -4579,6 +4591,7 @@ class MrHomeLayoutDS extends LayoutDataSource {
4579
4591
  this.errorDescription = _t('global#layout_error_description');
4580
4592
  }
4581
4593
  onInit(payload) {
4594
+ this.router = payload.router;
4582
4595
  this.configuration = payload.configuration;
4583
4596
  this.communication = payload.communication;
4584
4597
  this.mainState = payload.mainState;
@@ -4631,6 +4644,20 @@ class MrHomeLayoutDS extends LayoutDataSource {
4631
4644
  const pageTitle = this.pageConfig.title;
4632
4645
  this.mainState.update('headTitle', [appName, pageTitle].join(' > '));
4633
4646
  }
4647
+ searchRedirect(type, payload) {
4648
+ const configId = type.split('.')[0];
4649
+ const { input } = this.pageConfig.sections.find((section) => section.id === configId).options;
4650
+ const { queryId } = input;
4651
+ const { additionalQueryParams } = input;
4652
+ const queryParams = {};
4653
+ queryParams[queryId] = payload.inputValue;
4654
+ if (additionalQueryParams) {
4655
+ Object.keys(additionalQueryParams).forEach((paramKey) => {
4656
+ queryParams[paramKey] = additionalQueryParams[paramKey];
4657
+ });
4658
+ }
4659
+ this.router.navigate([payload.route], { queryParams });
4660
+ }
4634
4661
  }
4635
4662
 
4636
4663
  class MrHomeLayoutEH extends EventHandler {
@@ -4646,10 +4673,9 @@ class MrHomeLayoutEH extends EventHandler {
4646
4673
  break;
4647
4674
  }
4648
4675
  });
4649
- this.outerEvents$.subscribe(({ type }) => {
4650
- switch (type) {
4651
- default:
4652
- break;
4676
+ this.outerEvents$.subscribe(({ type, payload }) => {
4677
+ if (type.indexOf('hero-search-enter') !== -1) {
4678
+ this.dataSource.searchRedirect(type, payload);
4653
4679
  }
4654
4680
  });
4655
4681
  }
@@ -4711,15 +4737,22 @@ class MrSliderEH extends EventHandler {
4711
4737
 
4712
4738
  class MrHeroEH extends EventHandler {
4713
4739
  listen() {
4714
- // this.innerEvents$.subscribe(({ type, payload }) => {
4715
- // switch (type) {
4716
- // case `${this.dataSource.id}.<event-type>`:
4717
- // // TODO
4718
- // break;
4719
- // default:
4720
- // break;
4721
- // }
4722
- // });
4740
+ this.innerEvents$.subscribe(({ type, payload }) => {
4741
+ switch (type) {
4742
+ case `${this.dataSource.id}.change`:
4743
+ if (payload.inputPayload && payload.inputPayload === 'input') {
4744
+ this.dataSource.currentInputValue = payload.value;
4745
+ }
4746
+ break;
4747
+ case `${this.dataSource.id}.click`:
4748
+ if (payload.payloadId === 'hero-search' && this.dataSource.currentInputValue) {
4749
+ this.emitOuter('hero-search-enter', { inputValue: this.dataSource.currentInputValue, route: payload.route });
4750
+ }
4751
+ break;
4752
+ default:
4753
+ break;
4754
+ }
4755
+ });
4723
4756
  }
4724
4757
  }
4725
4758
 
@@ -4735,8 +4768,9 @@ const EVENTHANDLER_MAP$4 = {
4735
4768
  hero: MrHeroEH,
4736
4769
  };
4737
4770
  class MrHomeLayoutComponent extends AbstractLayout {
4738
- constructor(layoutsConfiguration, activatedRoute, configuration, communication, mainState, layoutState, localeService) {
4771
+ constructor(layoutsConfiguration, router, activatedRoute, configuration, communication, mainState, layoutState, localeService) {
4739
4772
  super(layoutsConfiguration.get('MrHomeLayoutConfig') || MrHomeLayoutConfig);
4773
+ this.router = router;
4740
4774
  this.activatedRoute = activatedRoute;
4741
4775
  this.configuration = configuration;
4742
4776
  this.communication = communication;
@@ -4746,6 +4780,7 @@ class MrHomeLayoutComponent extends AbstractLayout {
4746
4780
  }
4747
4781
  initPayload() {
4748
4782
  return {
4783
+ router: this.router,
4749
4784
  routeData: this.routeData,
4750
4785
  mainState: this.mainState,
4751
4786
  configuration: this.configuration,
@@ -4783,13 +4818,13 @@ class MrHomeLayoutComponent extends AbstractLayout {
4783
4818
  });
4784
4819
  }
4785
4820
  }
4786
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: MrHomeLayoutComponent, deps: [{ token: i1.LayoutsConfigurationService }, { token: i2.ActivatedRoute }, { token: i1.ConfigurationService }, { token: i1.CommunicationService }, { token: i1.MainStateService }, { token: MrLayoutStateService }, { token: MrLocaleService }], target: i0.ɵɵFactoryTarget.Component }); }
4787
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: MrHomeLayoutComponent, selector: "mr-home-layout", usesInheritance: true, ngImport: i0, template: "<div class=\"mr-home mr-layout\"\n *ngIf=\"lb.dataSource\"\n [ngClass]=\"{\n 'is-loading': ( layoutState.get$('content') | async ) == 'LOADING',\n 'is-error': ( layoutState.get$('content') | async ) == 'ERROR'\n }\">\n <!-- HOME CONTENT -->\n <ng-container [ngSwitch]=\"layoutState.get$('content') | async\">\n <!-- loading -->\n <ng-container *ngSwitchCase=\"'LOADING'\">\n <div class=\"mr-layout__loader\">\n <n7-loader></n7-loader>\n </div>\n </ng-container>\n\n <!-- error -->\n <ng-container *ngSwitchCase=\"'ERROR'\">\n <div class=\"mr-layout__error\">\n <h2>{{ lb.dataSource.errorTitle }}</h2>\n <p>{{ lb.dataSource.errorDescription }}</p>\n </div>\n </ng-container>\n\n <!-- success -->\n <ng-container *ngSwitchCase=\"'SUCCESS'\">\n <section *ngFor=\"let section of lb.dataSource.pageConfig.sections\" class=\"{{ 'mr-layout__' + section.type }}\">\n <ng-container [ngSwitch]=\"section.type\">\n \n <!-- SLIDER -->\n <ng-container *ngSwitchCase=\"'slider'\">\n <n7-carousel \n [data]=\"lb.widgets[section.id].ds.out$ | async\"\n [emit]=\"lb.widgets[section.id].emit\">\n </n7-carousel> \n </ng-container>\n \n <!-- COLLECTION -->\n <ng-container *ngSwitchCase=\"'collection'\">\n <div class=\"mr-layout__maxwidth mr-items-preview\">\n <n7-inner-title \n [data]=\"(lb.widgets[section.id].ds.out$ | async)?.header\"\n [emit]=\"lb.widgets[section.id].emit\">\n </n7-inner-title>\n <div class=\"{{ section.grid ? 'n7-grid-' + section.grid : '' }}\">\n <n7-item-preview\n *ngFor=\"let item of (lb.widgets[section.id].ds.out$ | async)?.items\"\n [data]=\"item\"\n [emit]=\"lb.widgets[section.id].emit\">\n </n7-item-preview>\n </div>\n </div>\n </ng-container>\n \n <!-- HERO -->\n <ng-container *ngSwitchCase=\"'hero'\">\n <n7-hero \n [data]=\"lb.widgets[section.id].ds.out$ | async\"\n [emit]=\"lb.widgets[section.id].emit\">\n </n7-hero> \n </ng-container>\n \n <!-- CONTENT -->\n <ng-container *ngSwitchCase=\"'content'\">\n <div [innerHTML]=\"lb.widgets[section.id].ds.out$ | async\"></div>\n </ng-container>\n \n </ng-container>\n </section>\n </ng-container>\n\n </ng-container>\n</div>\n", dependencies: [{ kind: "directive", type: i1$2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$2.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i1$2.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "component", type: i7.CarouselComponent, selector: "n7-carousel", inputs: ["data", "emit"] }, { kind: "component", type: i7.HeroComponent, selector: "n7-hero", inputs: ["data", "emit"] }, { kind: "component", type: i7.InnerTitleComponent, selector: "n7-inner-title", inputs: ["data", "emit"] }, { kind: "component", type: i7.ItemPreviewComponent, selector: "n7-item-preview", inputs: ["data", "emit"] }, { kind: "component", type: i7.LoaderComponent, selector: "n7-loader", inputs: ["data"] }, { kind: "pipe", type: i1$2.AsyncPipe, name: "async" }] }); }
4821
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: MrHomeLayoutComponent, deps: [{ token: i1.LayoutsConfigurationService }, { token: i2.Router }, { token: i2.ActivatedRoute }, { token: i1.ConfigurationService }, { token: i1.CommunicationService }, { token: i1.MainStateService }, { token: MrLayoutStateService }, { token: MrLocaleService }], target: i0.ɵɵFactoryTarget.Component }); }
4822
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: MrHomeLayoutComponent, selector: "mr-home-layout", usesInheritance: true, ngImport: i0, template: "<div class=\"mr-home mr-layout\"\n *ngIf=\"lb.dataSource\"\n [ngClass]=\"{\n 'is-loading': ( layoutState.get$('content') | async ) == 'LOADING',\n 'is-error': ( layoutState.get$('content') | async ) == 'ERROR'\n }\">\n <!-- HOME CONTENT -->\n <ng-container [ngSwitch]=\"layoutState.get$('content') | async\">\n <!-- loading -->\n <ng-container *ngSwitchCase=\"'LOADING'\">\n <div class=\"mr-layout__loader\">\n <n7-loader></n7-loader>\n </div>\n </ng-container>\n\n <!-- error -->\n <ng-container *ngSwitchCase=\"'ERROR'\">\n <div class=\"mr-layout__error\">\n <h2>{{ lb.dataSource.errorTitle }}</h2>\n <p>{{ lb.dataSource.errorDescription }}</p>\n </div>\n </ng-container>\n\n <!-- success -->\n <ng-container *ngSwitchCase=\"'SUCCESS'\">\n <section *ngFor=\"let section of lb.dataSource.pageConfig.sections\" class=\"{{ 'mr-layout__' + section.type }}\" id=\"{{ section.id }}\">\n <ng-container [ngSwitch]=\"section.type\">\n \n <!-- SLIDER -->\n <ng-container *ngSwitchCase=\"'slider'\">\n <n7-carousel\n [data]=\"lb.widgets[section.id].ds.out$ | async\"\n [emit]=\"lb.widgets[section.id].emit\">\n </n7-carousel> \n </ng-container>\n \n <!-- COLLECTION -->\n <ng-container *ngSwitchCase=\"'collection'\">\n <div class=\"mr-layout__maxwidth mr-items-preview\">\n <n7-inner-title \n [data]=\"(lb.widgets[section.id].ds.out$ | async)?.header\"\n [emit]=\"lb.widgets[section.id].emit\">\n </n7-inner-title>\n <div class=\"{{ section.grid ? 'n7-grid-' + section.grid : '' }}\">\n <n7-item-preview\n *ngFor=\"let item of (lb.widgets[section.id].ds.out$ | async)?.items\"\n [data]=\"item\"\n [emit]=\"lb.widgets[section.id].emit\">\n </n7-item-preview>\n </div>\n </div>\n </ng-container>\n \n <!-- HERO -->\n <ng-container *ngSwitchCase=\"'hero'\">\n <n7-hero \n [data]=\"lb.widgets[section.id].ds.out$ | async\"\n [emit]=\"lb.widgets[section.id].emit\">\n </n7-hero> \n </ng-container>\n \n <!-- CONTENT -->\n <ng-container *ngSwitchCase=\"'content'\">\n <div [innerHTML]=\"lb.widgets[section.id].ds.out$ | async\"></div>\n </ng-container>\n \n </ng-container>\n </section>\n </ng-container>\n\n </ng-container>\n</div>\n", dependencies: [{ kind: "directive", type: i1$2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$2.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i1$2.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "component", type: i7.CarouselComponent, selector: "n7-carousel", inputs: ["data", "emit"] }, { kind: "component", type: i7.HeroComponent, selector: "n7-hero", inputs: ["data", "emit"] }, { kind: "component", type: i7.InnerTitleComponent, selector: "n7-inner-title", inputs: ["data", "emit"] }, { kind: "component", type: i7.ItemPreviewComponent, selector: "n7-item-preview", inputs: ["data", "emit"] }, { kind: "component", type: i7.LoaderComponent, selector: "n7-loader", inputs: ["data"] }, { kind: "pipe", type: i1$2.AsyncPipe, name: "async" }] }); }
4788
4823
  }
4789
4824
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: MrHomeLayoutComponent, decorators: [{
4790
4825
  type: Component,
4791
- args: [{ selector: 'mr-home-layout', template: "<div class=\"mr-home mr-layout\"\n *ngIf=\"lb.dataSource\"\n [ngClass]=\"{\n 'is-loading': ( layoutState.get$('content') | async ) == 'LOADING',\n 'is-error': ( layoutState.get$('content') | async ) == 'ERROR'\n }\">\n <!-- HOME CONTENT -->\n <ng-container [ngSwitch]=\"layoutState.get$('content') | async\">\n <!-- loading -->\n <ng-container *ngSwitchCase=\"'LOADING'\">\n <div class=\"mr-layout__loader\">\n <n7-loader></n7-loader>\n </div>\n </ng-container>\n\n <!-- error -->\n <ng-container *ngSwitchCase=\"'ERROR'\">\n <div class=\"mr-layout__error\">\n <h2>{{ lb.dataSource.errorTitle }}</h2>\n <p>{{ lb.dataSource.errorDescription }}</p>\n </div>\n </ng-container>\n\n <!-- success -->\n <ng-container *ngSwitchCase=\"'SUCCESS'\">\n <section *ngFor=\"let section of lb.dataSource.pageConfig.sections\" class=\"{{ 'mr-layout__' + section.type }}\">\n <ng-container [ngSwitch]=\"section.type\">\n \n <!-- SLIDER -->\n <ng-container *ngSwitchCase=\"'slider'\">\n <n7-carousel \n [data]=\"lb.widgets[section.id].ds.out$ | async\"\n [emit]=\"lb.widgets[section.id].emit\">\n </n7-carousel> \n </ng-container>\n \n <!-- COLLECTION -->\n <ng-container *ngSwitchCase=\"'collection'\">\n <div class=\"mr-layout__maxwidth mr-items-preview\">\n <n7-inner-title \n [data]=\"(lb.widgets[section.id].ds.out$ | async)?.header\"\n [emit]=\"lb.widgets[section.id].emit\">\n </n7-inner-title>\n <div class=\"{{ section.grid ? 'n7-grid-' + section.grid : '' }}\">\n <n7-item-preview\n *ngFor=\"let item of (lb.widgets[section.id].ds.out$ | async)?.items\"\n [data]=\"item\"\n [emit]=\"lb.widgets[section.id].emit\">\n </n7-item-preview>\n </div>\n </div>\n </ng-container>\n \n <!-- HERO -->\n <ng-container *ngSwitchCase=\"'hero'\">\n <n7-hero \n [data]=\"lb.widgets[section.id].ds.out$ | async\"\n [emit]=\"lb.widgets[section.id].emit\">\n </n7-hero> \n </ng-container>\n \n <!-- CONTENT -->\n <ng-container *ngSwitchCase=\"'content'\">\n <div [innerHTML]=\"lb.widgets[section.id].ds.out$ | async\"></div>\n </ng-container>\n \n </ng-container>\n </section>\n </ng-container>\n\n </ng-container>\n</div>\n" }]
4792
- }], ctorParameters: () => [{ type: i1.LayoutsConfigurationService }, { type: i2.ActivatedRoute }, { type: i1.ConfigurationService }, { type: i1.CommunicationService }, { type: i1.MainStateService }, { type: MrLayoutStateService }, { type: MrLocaleService }] });
4826
+ args: [{ selector: 'mr-home-layout', template: "<div class=\"mr-home mr-layout\"\n *ngIf=\"lb.dataSource\"\n [ngClass]=\"{\n 'is-loading': ( layoutState.get$('content') | async ) == 'LOADING',\n 'is-error': ( layoutState.get$('content') | async ) == 'ERROR'\n }\">\n <!-- HOME CONTENT -->\n <ng-container [ngSwitch]=\"layoutState.get$('content') | async\">\n <!-- loading -->\n <ng-container *ngSwitchCase=\"'LOADING'\">\n <div class=\"mr-layout__loader\">\n <n7-loader></n7-loader>\n </div>\n </ng-container>\n\n <!-- error -->\n <ng-container *ngSwitchCase=\"'ERROR'\">\n <div class=\"mr-layout__error\">\n <h2>{{ lb.dataSource.errorTitle }}</h2>\n <p>{{ lb.dataSource.errorDescription }}</p>\n </div>\n </ng-container>\n\n <!-- success -->\n <ng-container *ngSwitchCase=\"'SUCCESS'\">\n <section *ngFor=\"let section of lb.dataSource.pageConfig.sections\" class=\"{{ 'mr-layout__' + section.type }}\" id=\"{{ section.id }}\">\n <ng-container [ngSwitch]=\"section.type\">\n \n <!-- SLIDER -->\n <ng-container *ngSwitchCase=\"'slider'\">\n <n7-carousel\n [data]=\"lb.widgets[section.id].ds.out$ | async\"\n [emit]=\"lb.widgets[section.id].emit\">\n </n7-carousel> \n </ng-container>\n \n <!-- COLLECTION -->\n <ng-container *ngSwitchCase=\"'collection'\">\n <div class=\"mr-layout__maxwidth mr-items-preview\">\n <n7-inner-title \n [data]=\"(lb.widgets[section.id].ds.out$ | async)?.header\"\n [emit]=\"lb.widgets[section.id].emit\">\n </n7-inner-title>\n <div class=\"{{ section.grid ? 'n7-grid-' + section.grid : '' }}\">\n <n7-item-preview\n *ngFor=\"let item of (lb.widgets[section.id].ds.out$ | async)?.items\"\n [data]=\"item\"\n [emit]=\"lb.widgets[section.id].emit\">\n </n7-item-preview>\n </div>\n </div>\n </ng-container>\n \n <!-- HERO -->\n <ng-container *ngSwitchCase=\"'hero'\">\n <n7-hero \n [data]=\"lb.widgets[section.id].ds.out$ | async\"\n [emit]=\"lb.widgets[section.id].emit\">\n </n7-hero> \n </ng-container>\n \n <!-- CONTENT -->\n <ng-container *ngSwitchCase=\"'content'\">\n <div [innerHTML]=\"lb.widgets[section.id].ds.out$ | async\"></div>\n </ng-container>\n \n </ng-container>\n </section>\n </ng-container>\n\n </ng-container>\n</div>\n" }]
4827
+ }], ctorParameters: () => [{ type: i1.LayoutsConfigurationService }, { type: i2.Router }, { type: i2.ActivatedRoute }, { type: i1.ConfigurationService }, { type: i1.CommunicationService }, { type: i1.MainStateService }, { type: MrLayoutStateService }, { type: MrLocaleService }] });
4793
4828
 
4794
4829
  class MrItineraryLayoutDS extends LayoutDataSource {
4795
4830
  constructor() {
@@ -6362,11 +6397,11 @@ class MrImageViewerOverlayDetailsEH extends EventHandler {
6362
6397
  //---------------------------
6363
6398
  class MrMetadataReadmoreComponent {
6364
6399
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: MrMetadataReadmoreComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
6365
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: MrMetadataReadmoreComponent, selector: "mr-metadata-readmore", inputs: { data: "data", emit: "emit" }, ngImport: i0, template: "<div *ngIf=\"data\"\n class=\"n7-metadata-viewer\">\n <!-- Metadata groups wrapper -->\n <div class=\"n7-metadata-viewer__wrapper {{ data.classes || ''}}\"\n *ngFor=\"let grp of data.group\">\n <!-- For each data group, render it -->\n <ng-container *ngTemplateOutlet=\"group; context:{$implicit: grp}\"></ng-container>\n </div>\n</div>\n\n<!-- Template for Metadata.group -->\n<ng-template #group\n let-grp>\n <div *ngIf=\"grp.title || grp.items\"\n class=\"n7-metadata-viewer__group {{ grp.classes || '' }}\">\n <div class=\"n7-metadata-viewer__group-title\"\n *ngIf=\"grp.title\">{{grp.title}}</div>\n <div class=\"n7-metadata-viewer__group-content\"\n *ngIf=\"grp.items\">\n <!-- \"read more\" enabled on the metadata group -->\n <mr-read-more [data]=\"grp.groupReadmore\">\n <div class=\"n7-metadata-viewer__item\"\n *ngFor=\"let i of grp.items\">\n <span *ngIf=\"i.label\" class=\"n7-metadata-viewer__item-label\">\n {{ i.label }}\n </span>\n <!-- \"read more\" enabled on the metadata value field -->\n <mr-read-more [data]=\"grp.readmore\">\n <span *ngIf=\"i.value\"\n class=\"n7-metadata-viewer__item-value\"\n [innerHTML]=\"i.value\">\n </span>\n </mr-read-more>\n </div>\n </mr-read-more>\n </div>\n </div>\n <!-- Render all child groups -->\n <div *ngIf=\"grp.group\">\n <div class=\"n7-metadata-viewer__group-wrapper\"\n *ngFor=\"let grp of grp.group\">\n <ng-container *ngTemplateOutlet=\"group; context:{$implicit: grp}\"></ng-container>\n </div>\n </div>\n</ng-template>\n", dependencies: [{ kind: "directive", type: i1$2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: ReadMoreComponent, selector: "mr-read-more", inputs: ["data"] }] }); }
6400
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: MrMetadataReadmoreComponent, selector: "mr-metadata-readmore", inputs: { data: "data", emit: "emit" }, ngImport: i0, template: "<div *ngIf=\"data\"\n class=\"n7-metadata-viewer\">\n <!-- Metadata groups wrapper -->\n <div class=\"n7-metadata-viewer__wrapper {{ data.classes || ''}}\"\n *ngFor=\"let grp of data.group\">\n <!-- For each data group, render it -->\n <ng-container *ngTemplateOutlet=\"group; context:{$implicit: grp}\"></ng-container>\n </div>\n</div>\n\n<!-- Template for Metadata.group -->\n<ng-template #group\n let-grp>\n <div *ngIf=\"grp.title || grp.items\"\n class=\"n7-metadata-viewer__group {{ grp.classes || '' }}\">\n <div class=\"n7-metadata-viewer__group-title\"\n *ngIf=\"grp.title\">{{grp.title}}</div>\n <div class=\"n7-metadata-viewer__group-content\"\n *ngIf=\"grp.items\">\n <!-- \"read more\" enabled on the metadata group -->\n <mr-read-more [data]=\"grp.groupReadmore\">\n <div class=\"n7-metadata-viewer__item\"\n *ngFor=\"let i of grp.items\">\n <span *ngIf=\"i.anchorId\" id=\"{{ i.anchorId }}\"></span>\n <span *ngIf=\"i.label\" class=\"n7-metadata-viewer__item-label\">\n {{ i.label }}\n </span>\n <!-- \"read more\" enabled on the metadata value field -->\n <mr-read-more [data]=\"grp.readmore\">\n <span *ngIf=\"i.value\"\n class=\"n7-metadata-viewer__item-value\"\n [innerHTML]=\"i.value\">\n </span>\n </mr-read-more>\n </div>\n </mr-read-more>\n </div>\n </div>\n <!-- Render all child groups -->\n <div *ngIf=\"grp.group\">\n <div class=\"n7-metadata-viewer__group-wrapper\"\n *ngFor=\"let grp of grp.group\">\n <ng-container *ngTemplateOutlet=\"group; context:{$implicit: grp}\"></ng-container>\n </div>\n </div>\n</ng-template>\n", dependencies: [{ kind: "directive", type: i1$2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: ReadMoreComponent, selector: "mr-read-more", inputs: ["data"] }] }); }
6366
6401
  }
6367
6402
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: MrMetadataReadmoreComponent, decorators: [{
6368
6403
  type: Component,
6369
- args: [{ selector: 'mr-metadata-readmore', template: "<div *ngIf=\"data\"\n class=\"n7-metadata-viewer\">\n <!-- Metadata groups wrapper -->\n <div class=\"n7-metadata-viewer__wrapper {{ data.classes || ''}}\"\n *ngFor=\"let grp of data.group\">\n <!-- For each data group, render it -->\n <ng-container *ngTemplateOutlet=\"group; context:{$implicit: grp}\"></ng-container>\n </div>\n</div>\n\n<!-- Template for Metadata.group -->\n<ng-template #group\n let-grp>\n <div *ngIf=\"grp.title || grp.items\"\n class=\"n7-metadata-viewer__group {{ grp.classes || '' }}\">\n <div class=\"n7-metadata-viewer__group-title\"\n *ngIf=\"grp.title\">{{grp.title}}</div>\n <div class=\"n7-metadata-viewer__group-content\"\n *ngIf=\"grp.items\">\n <!-- \"read more\" enabled on the metadata group -->\n <mr-read-more [data]=\"grp.groupReadmore\">\n <div class=\"n7-metadata-viewer__item\"\n *ngFor=\"let i of grp.items\">\n <span *ngIf=\"i.label\" class=\"n7-metadata-viewer__item-label\">\n {{ i.label }}\n </span>\n <!-- \"read more\" enabled on the metadata value field -->\n <mr-read-more [data]=\"grp.readmore\">\n <span *ngIf=\"i.value\"\n class=\"n7-metadata-viewer__item-value\"\n [innerHTML]=\"i.value\">\n </span>\n </mr-read-more>\n </div>\n </mr-read-more>\n </div>\n </div>\n <!-- Render all child groups -->\n <div *ngIf=\"grp.group\">\n <div class=\"n7-metadata-viewer__group-wrapper\"\n *ngFor=\"let grp of grp.group\">\n <ng-container *ngTemplateOutlet=\"group; context:{$implicit: grp}\"></ng-container>\n </div>\n </div>\n</ng-template>\n" }]
6404
+ args: [{ selector: 'mr-metadata-readmore', template: "<div *ngIf=\"data\"\n class=\"n7-metadata-viewer\">\n <!-- Metadata groups wrapper -->\n <div class=\"n7-metadata-viewer__wrapper {{ data.classes || ''}}\"\n *ngFor=\"let grp of data.group\">\n <!-- For each data group, render it -->\n <ng-container *ngTemplateOutlet=\"group; context:{$implicit: grp}\"></ng-container>\n </div>\n</div>\n\n<!-- Template for Metadata.group -->\n<ng-template #group\n let-grp>\n <div *ngIf=\"grp.title || grp.items\"\n class=\"n7-metadata-viewer__group {{ grp.classes || '' }}\">\n <div class=\"n7-metadata-viewer__group-title\"\n *ngIf=\"grp.title\">{{grp.title}}</div>\n <div class=\"n7-metadata-viewer__group-content\"\n *ngIf=\"grp.items\">\n <!-- \"read more\" enabled on the metadata group -->\n <mr-read-more [data]=\"grp.groupReadmore\">\n <div class=\"n7-metadata-viewer__item\"\n *ngFor=\"let i of grp.items\">\n <span *ngIf=\"i.anchorId\" id=\"{{ i.anchorId }}\"></span>\n <span *ngIf=\"i.label\" class=\"n7-metadata-viewer__item-label\">\n {{ i.label }}\n </span>\n <!-- \"read more\" enabled on the metadata value field -->\n <mr-read-more [data]=\"grp.readmore\">\n <span *ngIf=\"i.value\"\n class=\"n7-metadata-viewer__item-value\"\n [innerHTML]=\"i.value\">\n </span>\n </mr-read-more>\n </div>\n </mr-read-more>\n </div>\n </div>\n <!-- Render all child groups -->\n <div *ngIf=\"grp.group\">\n <div class=\"n7-metadata-viewer__group-wrapper\"\n *ngFor=\"let grp of grp.group\">\n <ng-container *ngTemplateOutlet=\"group; context:{$implicit: grp}\"></ng-container>\n </div>\n </div>\n</ng-template>\n" }]
6370
6405
  }], propDecorators: { data: [{
6371
6406
  type: Input
6372
6407
  }], emit: [{
@@ -6470,7 +6505,22 @@ class MrResourceLayoutComponent extends AbstractLayout {
6470
6505
  setTimeout(() => {
6471
6506
  const element = document.getElementById(fragment);
6472
6507
  if (element) {
6473
- element.scrollIntoView({ behavior: 'smooth' });
6508
+ // Open read-more if present
6509
+ const readMoreElement = element
6510
+ ?.closest('.mr-read-more__content')
6511
+ ?.closest('.mr-read-more.is-collapsed');
6512
+ if (readMoreElement) {
6513
+ const readMoreButton = readMoreElement.querySelector(':scope > .mr-read-more__btn');
6514
+ if (readMoreButton instanceof HTMLElement) {
6515
+ readMoreButton.click();
6516
+ }
6517
+ // Scroll
6518
+ setTimeout(() => element.scrollIntoView({ behavior: 'smooth' }), 300);
6519
+ }
6520
+ else {
6521
+ // Scroll
6522
+ element.scrollIntoView({ behavior: 'smooth' });
6523
+ }
6474
6524
  }
6475
6525
  }, timeout);
6476
6526
  }