@quadrel-enterprise-ui/framework 18.21.4 → 18.21.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -64,6 +64,8 @@ import * as i7 from "@angular/common";
64
64
  *
65
65
  * #### **Usage**
66
66
  *
67
+ * **Basic Example:**
68
+ *
67
69
  * ```typescript
68
70
  * @Component({ ... })
69
71
  * export class MyPageTabsComponent {
@@ -105,6 +107,74 @@ import * as i7 from "@angular/common";
105
107
  * </qd-page-tab>
106
108
  * </qd-page-tabs>
107
109
  * ```
110
+ *
111
+ * **Bookmarkable Tabs Example: **
112
+ *
113
+ * To enable bookmarkable tabs that sync with the browser URL, set `connectWithRouter: true`
114
+ * and provide a unique `name` for each tab:
115
+ *
116
+ * ```typescript
117
+ * import { Component } from '@angular/core';
118
+ * import { Router } from '@angular/router';
119
+ * import { QdPageTabsConfig, QdPageTabConfig } from '@qd-ui/qd-ui';
120
+ *
121
+ * @Component({
122
+ * selector: 'app-bookmarkable-tabs',
123
+ * template: `
124
+ * <qd-page-tabs [config]="pageTabsConfig">
125
+ * <qd-page-tab [config]="overviewTabConfig">
126
+ * <qd-section>
127
+ * This is the overview tab content.
128
+ * </qd-section>
129
+ * </qd-page-tab>
130
+ *
131
+ * <qd-page-tab [config]="detailTabConfig">
132
+ * <qd-section>
133
+ * This is the detail tab content.
134
+ * </qd-section>
135
+ * </qd-page-tab>
136
+ *
137
+ * <qd-page-tab [config]="controlResultsTabConfig">
138
+ * <qd-section>
139
+ * This is the control results tab content.
140
+ * </qd-section>
141
+ * </qd-page-tab>
142
+ * </qd-page-tabs>
143
+ * `
144
+ * })
145
+ * export class BookmarkableTabsComponent {
146
+ * // Enable router connection for bookmarkable tabs
147
+ * pageTabsConfig: QdPageTabsConfig = {
148
+ * selectedIndex: 0,
149
+ * connectWithRouter: true
150
+ * };
151
+ *
152
+ * // Each tab must have a unique 'name' when connectWithRouter is enabled
153
+ * overviewTabConfig: QdPageTabConfig = {
154
+ * label: { i18n: 'Overview' },
155
+ * name: 'overview' // Required for router connection
156
+ * };
157
+ *
158
+ * detailTabConfig: QdPageTabConfig = {
159
+ * label: { i18n: 'Details' },
160
+ * name: 'details' // Required for router connection
161
+ * };
162
+ *
163
+ * controlResultsTabConfig: QdPageTabConfig = {
164
+ * label: { i18n: 'Control Results' },
165
+ * name: 'controlResults' // Required for router connection
166
+ * };
167
+ *
168
+ * constructor (private router: Router) {}
169
+ * }
170
+ * ```
171
+ *
172
+ * **Bookmarkable Tabs Behavior: **
173
+ * - URLs will include query parameter: `?tab=overview`, `?tab=details`, `?tab=controlResults`
174
+ * - Users can bookmark specific tabs and return directly to them
175
+ * - Browser back/forward buttons work with tab navigation
176
+ * - If an invalid tab name is provided in URL, the first available tab is selected
177
+ * - If no tab parameter is present, the `selectedIndex` or first non-disabled tab is selected
108
178
  */
109
179
  export class QdPageTabsComponent extends CdkStepper {
110
180
  footerService;
@@ -293,7 +363,7 @@ export class QdPageTabsComponent extends CdkStepper {
293
363
  });
294
364
  });
295
365
  }
296
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: QdPageTabsComponent, deps: [{ token: i1.QdPageFooterService, optional: true }, { token: i2.Directionality, optional: true }, { token: i3.QdPageStoreService }, { token: i4.Router }, { token: i4.ActivatedRoute }, { token: i0.ChangeDetectorRef }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
366
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: QdPageTabsComponent, deps: [{ token: i1.QdPageFooterService, optional: true }, { token: i2.Directionality, optional: true }, { token: i3.QdPageStoreService }, { token: i4.Router }, { token: i4.ActivatedRoute, optional: true }, { token: i0.ChangeDetectorRef }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
297
367
  static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.9", type: QdPageTabsComponent, isStandalone: true, selector: "qd-page-tabs", inputs: { config: "config", testId: ["data-test-id", "testId"] }, outputs: { tabSelection: "tabSelection" }, host: { properties: { "class.standalone": "!footerService" }, classAttribute: "qd-tabs" }, providers: [{ provide: CdkStepper, useExisting: QdPageTabsComponent }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<div class=\"qd-tabs-items-container\" [ngClass]=\"{ scrollable: config?.scrollabe }\">\n <qd-page-tab-header\n *ngFor=\"let tab of tabs; let i = index\"\n (click)=\"selectTab(tab)\"\n [id]=\"_getTabLabelId(i)\"\n [index]=\"i\"\n [state]=\"_getIndicatorType(i, tab.state)\"\n [label]=\"tab.config.label.i18n | translate\"\n [counters]=\"tab.config.counters\"\n [isSelected]=\"selectedIndex === i\"\n [isDisabled]=\"tab.config?.isDisabled\"\n [data-test-id]=\"testId + '-header' + '-' + i\"\n >\n </qd-page-tab-header>\n</div>\n\n<div class=\"tabs-content\">\n <ng-container *ngIf=\"!selected?.config?.isDisabled\" [ngTemplateOutlet]=\"selected?.content\"></ng-container>\n</div>\n\n<div class=\"qd-tabs-action-area\" *ngIf=\"isSubmitButtonShown()\">\n <button qdButton (click)=\"save()\" [disabled]=\"isSubmitButtonDisabled()\" [data-test-id]=\"testId + '-submit'\">\n {{ config?.submitButton?.i18n || \"i18n.qd.tabs.button.submit\" | translate }}\n </button>\n</div>\n", styles: [":host{display:flex;flex-direction:column}:host.standalone{height:calc(100% - 50px)}:host .qd-tabs-items-container{display:flex;width:100%;flex-direction:row;flex-wrap:wrap;padding:0 1.25rem;border-bottom:.125rem solid rgb(213,213,213);background-color:#fff;gap:0 .9375rem}@media (max-width: 599.98px){:host .qd-tabs-items-container{padding:0 .9375rem}}@media (max-width: 1279.98px){:host .qd-tabs-items-container.scrollable{flex-wrap:nowrap;overflow-x:scroll;overflow-y:hidden;scrollbar-width:none}}:host .tabs-content{flex:1 1 auto}:host .qd-tabs-action-area{display:flex;width:100%;height:50px;justify-content:flex-end}:host .qd-tabs-action-area button{margin-right:1.25rem}\n"], dependencies: [{ kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: QdPageTabHeaderComponent, selector: "qd-page-tab-header", inputs: ["state", "label", "counters", "index", "isSelected", "isDisabled", "data-test-id"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i5.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: QdButtonModule }, { kind: "component", type: i6.QdButtonComponent, selector: "button[qdButton], a[qdButton], button[qd-button]", inputs: ["disabled", "color", "icon", "data-test-id", "additionalInfo"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i7.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
298
368
  }
299
369
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: QdPageTabsComponent, decorators: [{
@@ -303,7 +373,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImpor
303
373
  type: Optional
304
374
  }] }, { type: i2.Directionality, decorators: [{
305
375
  type: Optional
306
- }] }, { type: i3.QdPageStoreService }, { type: i4.Router }, { type: i4.ActivatedRoute }, { type: i0.ChangeDetectorRef }, { type: i0.ElementRef }], propDecorators: { config: [{
376
+ }] }, { type: i3.QdPageStoreService }, { type: i4.Router }, { type: i4.ActivatedRoute, decorators: [{
377
+ type: Optional
378
+ }] }, { type: i0.ChangeDetectorRef }, { type: i0.ElementRef }], propDecorators: { config: [{
307
379
  type: Input
308
380
  }], testId: [{
309
381
  type: Input,
@@ -311,4 +383,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImpor
311
383
  }], tabSelection: [{
312
384
  type: Output
313
385
  }] } });
314
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFnZS10YWJzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvcWQtdWkvc3JjL2xpYi9wYWdlLXRhYnMvcGFnZS10YWJzLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL2xpYnMvcWQtdWkvc3JjL2xpYi9wYWdlLXRhYnMvcGFnZS10YWJzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNuRCxPQUFPLEVBQUUsVUFBVSxFQUFhLE1BQU0sc0JBQXNCLENBQUM7QUFDN0QsT0FBTyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDOUUsT0FBTyxFQUdMLHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsU0FBUyxFQUNULFVBQVUsRUFDVixVQUFVLEVBQ1YsWUFBWSxFQUNaLE1BQU0sRUFDTixLQUFLLEVBSUwsUUFBUSxFQUNSLE1BQU0sRUFHUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdEQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDZDQUE2QyxDQUFDO0FBQ2xGLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBR2hGLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLDZDQUE2QyxDQUFDO0FBRXZGLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDekQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7Ozs7Ozs7OztBQUVoRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7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QUFVLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsRUFBRTtZQUN4RixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQztnQkFDckIsYUFBYSxFQUFFLGNBQWMsQ0FBQyxhQUFhO2dCQUMzQyx1QkFBdUIsRUFBRSxjQUFjLENBQUMsdUJBQXVCO2dCQUMvRCxXQUFXLEVBQUUsY0FBYyxDQUFDLFlBQWtDO2dCQUM5RCxxQkFBcUIsRUFBRSxjQUFjLENBQUMsc0JBQTRDO2FBQ25GLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzt1R0E3TlUsbUJBQW1COzJGQUFuQixtQkFBbUIsbVFBTm5CLENBQUMsRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxtQkFBbUIsRUFBRSxDQUFDLHNFQzlIeEUsay9CQXlCQSxndUJEeUdZLEtBQUssbUhBQUUsSUFBSSw2RkFBRSxnQkFBZ0Isb0pBQUUsd0JBQXdCLDJKQUFFLGVBQWUsMkZBQUUsY0FBYyx3TkFBRSxZQUFZOzsyRkFFckcsbUJBQW1CO2tCQVYvQixTQUFTOytCQUNFLGNBQWMsYUFHYixDQUFDLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxXQUFXLHFCQUFxQixFQUFFLENBQUMsbUJBQ3JELHVCQUF1QixDQUFDLE1BQU0sUUFDekMsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLG9CQUFvQixFQUFFLGdCQUFnQixFQUFFLGNBQ3RELElBQUksV0FDUCxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsZ0JBQWdCLEVBQUUsd0JBQXdCLEVBQUUsZUFBZSxFQUFFLGNBQWMsRUFBRSxZQUFZLENBQUM7OzBCQW1DOUcsUUFBUTs7MEJBQ1IsUUFBUTtxTEExQlgsTUFBTTtzQkFETCxLQUFLO2dCQU1pQixNQUFNO3NCQUE1QixLQUFLO3VCQUFDLGNBQWM7Z0JBRUYsWUFBWTtzQkFBOUIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpcmVjdGlvbmFsaXR5IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2JpZGknO1xuaW1wb3J0IHsgQ2RrU3RlcHBlciwgU3RlcFN0YXRlIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3N0ZXBwZXInO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlLCBOZ0ZvciwgTmdJZiwgTmdUZW1wbGF0ZU91dGxldCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICBBZnRlckNvbnRlbnRJbml0LFxuICBBZnRlclZpZXdJbml0LFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgRGVzdHJveVJlZixcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBpbmplY3QsXG4gIElucHV0LFxuICBPbkNoYW5nZXMsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBPcHRpb25hbCxcbiAgT3V0cHV0LFxuICBRdWVyeUxpc3QsXG4gIFNpbXBsZUNoYW5nZXNcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBUcmFuc2xhdGVNb2R1bGUgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IFFkQnV0dG9uTW9kdWxlIH0gZnJvbSAnLi4vYnV0dG9uL2J1dHRvbi5tb2R1bGUnO1xuaW1wb3J0IHsgUWRQYWdlRm9vdGVyU2VydmljZSB9IGZyb20gJy4uL3BhZ2Uvc2hhcmVkL3NlcnZpY2VzL3BhZ2UtZm9vdGVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgUWRQYWdlU3RvcmVTZXJ2aWNlIH0gZnJvbSAnLi4vcGFnZS9zaGFyZWQvc2VydmljZXMvcGFnZS1zdG9yZS5zZXJ2aWNlJztcbmltcG9ydCB7IFFkUGFnZVRhYnNDb25maWcgfSBmcm9tICcuL21vZGVsL3BhZ2UtdGFicy1jb25maWcnO1xuaW1wb3J0IHsgUWRUYWJTZWxlY3Rpb25FdmVudCB9IGZyb20gJy4vbW9kZWwvcGFnZS10YWJzLXNlbGVjdGlvbi1ldmVudCc7XG5pbXBvcnQgeyBRZFBhZ2VUYWJIZWFkZXJDb21wb25lbnQgfSBmcm9tICcuL3BhZ2UtdGFiLWhlYWRlci9wYWdlLXRhYi1oZWFkZXIuY29tcG9uZW50JztcbmltcG9ydCB7IFFkUGFnZVRhYkNvbXBvbmVudCB9IGZyb20gJy4vcGFnZS10YWIvcGFnZS10YWIuY29tcG9uZW50JztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgdGFrZVVudGlsRGVzdHJveWVkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuXG4vKipcbiAqICoqUWRQYWdlVGFic0NvbXBvbmVudCoqIHByb3ZpZGVzIGEgbm9uLWxpbmVhciB0YWJiZWQgbmF2aWdhdGlvbiBzeXN0ZW0gd2l0aGluIGEgKipRZFBhZ2UqKi5cbiAqIEl0IGVuYWJsZXMgc3dpdGNoaW5nIGJldHdlZW4gZGlmZmVyZW50IHNlY3Rpb25zIHdoaWxlIG1haW50YWluaW5nIGZvcm0gdmFsaWRhdGlvbiBhbmQgY29udHJvbGxlZCBuYXZpZ2F0aW9uLlxuICpcbiAqICMjIyMgKipGZWF0dXJlcyoqXG4gKlxuICogLSAqKk5vbi1saW5lYXIgTmF2aWdhdGlvbioqOiBVc2VycyBjYW4gbmF2aWdhdGUgZnJlZWx5IGJldHdlZW4gdGFicywgd2l0aCB2YWxpZGF0aW9uIGNoZWNrcyB3aGVyZSBuZWNlc3NhcnkuXG4gKiAtICoqRm9ybSBWYWxpZGF0aW9uIFN1cHBvcnQqKjogRW5zdXJlcyB0YWJzIGRpc3BsYXkgZXJyb3JzIHdoZW4gbmVjZXNzYXJ5IGlmIGZvcm0gaW5wdXRzIGFyZSBpbnZhbGlkLlxuICogLSAqKkN1c3RvbWl6YWJsZSBUYWIgQ29uZmlndXJhdGlvbnMqKjogRWFjaCB0YWIgY2FuIGhhdmUgY3VzdG9tIGxhYmVscywgdmFsaWRhdGlvbiwgYW5kIGNvdW50ZXJzIGZvciB0cmFja2luZyBzdGF0ZXMuXG4gKiAtICoqRHluYW1pYyBDb3VudGVycyoqOiBEaXNwbGF5cyBudW1lcmljIGluZGljYXRvcnMgdG8gc2lnbmFsIGNyaXRpY2FsIG9yIHBvc2l0aXZlIHN0YXRlcy5cbiAqIC0gKipTdGFuZGFsb25lIENvbXBhdGliaWxpdHkqKjogQ2FuIGJlIHVzZWQgaW5kZXBlbmRlbnRseSBvciBpbnRlZ3JhdGVkIHdpdGhpbiBhIGxhcmdlciAqKlFkUGFnZSoqIHN0cnVjdHVyZS5cbiAqIC0gKipDdXN0b21pemFibGUgU3VibWl0IEJ1dHRvbioqOiBBbGxvd3MgY29uZmlndXJhdGlvbiBvZiBhbiBhY3Rpb24gaGFuZGxlciBhbmQgdmlzaWJpbGl0eSBzZXR0aW5ncy5cbiAqIC0gKipCb29rbWFya2FibGUgdGFicyoqOiBBbGxvd3MgdXNlcnMgdG8gYm9va21hcmsgdGFicyBhbmQgbWFrZSB0aGVtIG5hdmlnYWJsZS5cbiAqXG4gKiAjIyMjICoqVGFiIENvbmZpZ3VyYXRpb24qKlxuICpcbiAqIEVhY2ggdGFiIGluc2lkZSBgUWRQYWdlVGFic0NvbXBvbmVudGAgY2FuIGJlIGNvbmZpZ3VyZWQgdXNpbmcgYFFkUGFnZVRhYkNvbmZpZ2AsIHN1cHBvcnRpbmc6XG4gKlxuICogLSAqKmxhYmVsKio6IEEgdHJhbnNsYXRhYmxlIGxhYmVsIGZvciB0aGUgdGFiLlxuICogLSAqKmlzRGlzYWJsZWQqKjogV2hldGhlciB0aGUgdGFiIHNob3VsZCBiZSBpbnRlcmFjdGFibGUuXG4gKiAtICoqY291bnRlcnMqKjogRGlzcGxheXMgbnVtZXJpYyBjb3VudGVycyBmb3IgKipjcml0aWNhbCoqIChyZWQpIGFuZCAqKnBvc2l0aXZlKiogKGdyZWVuKSBzdGF0ZXMuXG4gKiAtICoqbmFtZSoqOiBVbmlxdWUgbmFtZSBvZiB0aGlzIHRhYi4gVXNlZCBmb3IgcXVlcnkgcGFyYW0gcm91dGluZyB2aWEgYD90YWI9PHRhYk5hbWU+YC4gUmVxdWlyZWQgd2hlbiBgY29ubmVjdFdpdGhSb3V0ZXJgIGluICoqUWRQYWdlVGFic0NvbmZpZyoqIGlzIGVuYWJsZWQuXG4gKlxuICogIyMjIyAqKkZvcm0gSGFuZGxpbmcqKlxuICpcbiAqIFRhYnMgc3VwcG9ydCBmb3JtIGdyb3Vwcywgd2hpY2ggYXJlIHBhc3NlZCB1c2luZyB0aGUgYFt0YWJDb250cm9sXWAgaW5wdXQuXG4gKiBUaGUgc3lzdGVtIGVuc3VyZXMgdGhhdCBmb3JtcyB2YWxpZGF0ZSBjb3JyZWN0bHkgYmVmb3JlIGFsbG93aW5nIG5hdmlnYXRpb24uXG4gKlxuICogIyMjIyAqKkVycm9yIEhhbmRsaW5nKipcbiAqXG4gKiBFcnJvciBzdGF0ZXMgYXBwZWFyIHdoZW46XG4gKlxuICogLSAqKkEgcmVxdWlyZWQgZm9ybSBmaWVsZCBpcyBsZWZ0IGVtcHR5Kio6IFRoZSB0YWIgdGl0bGUgY2hhbmdlcyB0byByZWQuXG4gKiAtICoqSW52YWxpZCBkYXRhIGlzIGVudGVyZWQqKjogVGhlIHZhbGlkYXRpb24gcHJvY2VzcyBjaGFuZ2VzIHRoZSB0YWIgdGl0bGUgdG8gcmVkLlxuICpcbiAqICMjIyMgKipTdWJtaXQgQnV0dG9uIENvbmZpZ3VyYXRpb24qKlxuICpcbiAqIFRoZSBzdWJtaXQgYnV0dG9uIGF0IHRoZSBib3R0b20gb2YgdGhlIHRhYiBzeXN0ZW0gY2FuIGJlIGNvbmZpZ3VyZWQgdmlhIGBRZFBhZ2VUYWJzQ29uZmlnYDpcbiAqXG4gKiAtICoqaTE4bioqOiBUaGUgdHJhbnNsYXRlZCBsYWJlbCBmb3IgdGhlIHN1Ym1pdCBidXR0b24uXG4gKiAtICoqaGFuZGxlcioqOiBBIGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgcmVjZWl2ZXMgZm9ybSBkYXRhIHVwb24gc3VibWlzc2lvbi5cbiAqIC0gKippc0Rpc2FibGVkKio6IENvbnRyb2xzIHdoZXRoZXIgdGhlIGJ1dHRvbiBzaG91bGQgYmUgYWN0aXZlIG9yIG5vdC5cbiAqIC0gKippc0hpZGRlbioqOiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIGJ1dHRvbiBpcyB2aXNpYmxlLlxuICogLSAqKmNvbm5lY3RXaXRoUm91dGVyKio6IElmIHNldCB0byB0cnVlLCB0aGUgdGFiIHdpbGwgYmUgY29ubmVjdGVkIHRvIHRoZSBVUkwgYW5kIHdpbGwgYmUgYm9va21hcmtlZC4gSXQgaXMgb2JsaWdhdG9yeSB0byBzZXQgdGhlIGBuYW1lYCBhdHRyaWJ1dGUgZm9yIGVhY2ggdGFiLlxuICpcbiAqICMjIyMgKipVc2FnZSoqXG4gKlxuICogYGBgdHlwZXNjcmlwdFxuICogQENvbXBvbmVudCh7IC4uLiB9KVxuICogZXhwb3J0IGNsYXNzIE15UGFnZVRhYnNDb21wb25lbnQge1xuICogICBmb3JtID0gbmV3IEZvcm1Hcm91cCh7XG4gKiAgICAgZmlyc3ROYW1lOiBuZXcgRm9ybUNvbnRyb2woJycsIFZhbGlkYXRvcnMucmVxdWlyZWQpLFxuICogICAgIGxhc3ROYW1lOiBuZXcgRm9ybUNvbnRyb2woJycpLFxuICogICAgIGFnZTogbmV3IEZvcm1Db250cm9sKCcnKVxuICogICB9KTtcbiAqXG4gKiAgIGNvbmZpZzogUWRQYWdlVGFic0NvbmZpZyA9IHtcbiAqICAgICBzdWJtaXRCdXR0b246IHtcbiAqICAgICAgIGhhbmRsZXI6ICh2YWx1ZXMpID0+IGRvU29tZXRoaW5nV2l0aCh2YWx1ZXMpXG4gKiAgICAgfVxuICogICB9O1xuICpcbiAqICAgZmlyc3RUYWJDb25maWc6IFFkUGFnZVRhYkNvbmZpZyA9IHtcbiAqICAgICBsYWJlbDogeyBpMThuOiAnVGFiIE9uZScgfSxcbiAqICAgICBjb3VudGVyczogb2YoeyBwb3NpdGl2ZTogMywgY3JpdGljYWw6IDEgfSlcbiAqICAgfTtcbiAqXG4gKiAgIC4uLlxuICogfVxuICogYGBgXG4gKlxuICogYGBgaHRtbFxuICogPHFkLXBhZ2UtdGFicyBbY29uZmlnXT1cImNvbmZpZ1wiPlxuICogICA8cWQtcGFnZS10YWIgW2NvbmZpZ109XCJmaXJzdFRhYkNvbmZpZ1wiIFt0YWJDb250cm9sXT1cImZvcm1cIj5cbiAqICAgICA8cWQtc2VjdGlvbiBbY29uZmlnXT1cInNlY3Rpb25Db25maWdcIj5cbiAqICAgICAgIDxxZC1ncmlkIFtjb25maWddPVwiZ3JpZENvbmZpZ1wiIFtmb3JtR3JvdXBdPVwiZm9ybVwiPlxuICogICAgICAgICA8cWQtaW5wdXQgZm9ybUNvbnRyb2xOYW1lPVwiZmlyc3ROYW1lXCI+PC9xZC1pbnB1dD5cbiAqICAgICAgICAgPHFkLWlucHV0IGZvcm1Db250cm9sTmFtZT1cImxhc3ROYW1lXCI+PC9xZC1pbnB1dD5cbiAqICAgICAgICAgPHFkLWlucHV0IGZvcm1Db250cm9sTmFtZT1cImFnZVwiPjwvcWQtaW5wdXQ+XG4gKiAgICAgICA8L3FkLWdyaWQ+XG4gKiAgICAgPC9xZC1zZWN0aW9uPlxuICogICA8L3FkLXBhZ2UtdGFiPlxuICpcbiAqICAgPHFkLXBhZ2UtdGFiIC4uLiA+XG4gKiAgICAgLi4uXG4gKiAgIDwvcWQtcGFnZS10YWI+XG4gKiA8L3FkLXBhZ2UtdGFicz5cbiAqIGBgYFxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdxZC1wYWdlLXRhYnMnLFxuICB0ZW1wbGF0ZVVybDogJy4vcGFnZS10YWJzLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vcGFnZS10YWJzLmNvbXBvbmVudC5zY3NzJ10sXG4gIHByb3ZpZGVyczogW3sgcHJvdmlkZTogQ2RrU3RlcHBlciwgdXNlRXhpc3Rpbmc6IFFkUGFnZVRhYnNDb21wb25lbnQgfV0sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBob3N0OiB7IGNsYXNzOiAncWQtdGFicycsICdbY2xhc3Muc3RhbmRhbG9uZV0nOiAnIWZvb3RlclNlcnZpY2UnIH0sXG4gIHN0YW5kYWxvbmU6IHRydWUsIC8vIGluaGVyaXRlZCBieSBDZGtTdGVwcGVyXG4gIGltcG9ydHM6IFtOZ0ZvciwgTmdJZiwgTmdUZW1wbGF0ZU91dGxldCwgUWRQYWdlVGFiSGVhZGVyQ29tcG9uZW50LCBUcmFuc2xhdGVNb2R1bGUsIFFkQnV0dG9uTW9kdWxlLCBDb21tb25Nb2R1bGVdXG59KVxuZXhwb3J0IGNsYXNzIFFkUGFnZVRhYnNDb21wb25lbnRcbiAgZXh0ZW5kcyBDZGtTdGVwcGVyXG4gIGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMsIEFmdGVyQ29udGVudEluaXQsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveVxue1xuICAvKipcbiAgICogQ29uZmlndXJhdGlvbiBvZiBRZFBhZ2VUYWJzLlxuICAgKi9cbiAgQElucHV0KClcbiAgY29uZmlnITogUWRQYWdlVGFic0NvbmZpZztcblxuICAvKipcbiAgICogQSBzdGF0aWMgdGVzdCBJRCBmb3IgaW50ZWdyYXRpb24gdGVzdHMgY2FuIGJlIHNldC5cbiAgICovXG4gIEBJbnB1dCgnZGF0YS10ZXN0LWlkJykgdGVzdElkID0gJ3BhZ2UtdGFicyc7XG5cbiAgQE91dHB1dCgpIHJlYWRvbmx5IHRhYlNlbGVjdGlvbiA9IG5ldyBFdmVudEVtaXR0ZXI8UWRUYWJTZWxlY3Rpb25FdmVudD4oKTtcblxuICBwcml2YXRlIF92aWV3b25seTogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiAgcHJpdmF0ZSByZWFkb25seSBkZXN0cm95UmVmID0gaW5qZWN0KERlc3Ryb3lSZWYpO1xuXG4gIGdldCB0YWJzKCk6IFF1ZXJ5TGlzdDxRZFBhZ2VUYWJDb21wb25lbnQ+IHtcbiAgICByZXR1cm4gdGhpcy5zdGVwcyBhcyBRdWVyeUxpc3Q8UWRQYWdlVGFiQ29tcG9uZW50PjtcbiAgfVxuXG4gIG92ZXJyaWRlIGdldCBzZWxlY3RlZCgpOiBRZFBhZ2VUYWJDb21wb25lbnQgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiBzdXBlci5zZWxlY3RlZCBhcyBRZFBhZ2VUYWJDb21wb25lbnQ7XG4gIH1cblxuICBvdmVycmlkZSBzZXQgc2VsZWN0ZWQoc3RlcDogUWRQYWdlVGFiQ29tcG9uZW50IHwgdW5kZWZpbmVkKSB7XG4gICAgc3VwZXIuc2VsZWN0ZWQgPSBzdGVwO1xuICB9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgQE9wdGlvbmFsKCkgcmVhZG9ubHkgZm9vdGVyU2VydmljZTogUWRQYWdlRm9vdGVyU2VydmljZSxcbiAgICBAT3B0aW9uYWwoKSBfZGlyOiBEaXJlY3Rpb25hbGl0eSxcbiAgICBwcml2YXRlIHBhZ2VTdG9yZVNlcnZpY2U6IFFkUGFnZVN0b3JlU2VydmljZTxhbnk+LFxuICAgIHByaXZhdGUgcmVhZG9ubHkgcm91dGVyOiBSb3V0ZXIsXG4gICAgcHJpdmF0ZSByZWFkb25seSByb3V0ZTogQWN0aXZhdGVkUm91dGUsXG4gICAgX2NoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBfZWxlbWVudFJlZjogRWxlbWVudFJlZjxIVE1MRWxlbWVudD5cbiAgKSB7XG4gICAgc3VwZXIoX2RpciwgX2NoYW5nZURldGVjdG9yUmVmLCBfZWxlbWVudFJlZik7XG4gICAgdGhpcy5tYXBTZWxlY3Rpb25DaGFuZ2VUb1RhYlNlbGVjdGlvbk91dHB1dCgpO1xuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5saW5lYXIgPSBmYWxzZTtcblxuICAgIHRoaXMucGFnZVN0b3JlU2VydmljZS5pc1ZpZXdvbmx5JC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpKS5zdWJzY3JpYmUodiA9PiB7XG4gICAgICB0aGlzLl92aWV3b25seSA9IHY7XG4gICAgICB0aGlzLl9zdGF0ZUNoYW5nZWQoKTtcbiAgICB9KTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBbJ2xpbmVhcicsICdzZWxlY3RlZEluZGV4JywgJ3NlbGVjdGVkJywgJ29yaWVudGF0aW9uJ11cbiAgICAgIC5maWx0ZXIoaW5wdXROYW1lID0+ICEhY2hhbmdlc1tpbnB1dE5hbWVdKVxuICAgICAgLmZvckVhY2goaW5wdXROYW1lID0+IHRoaXMuYmxvY2tDZGtJbnB1dChpbnB1dE5hbWUpKTtcbiAgfVxuXG4gIG92ZXJyaWRlIG5nQWZ0ZXJDb250ZW50SW5pdCgpOiB2b2lkIHtcbiAgICBzdXBlci5uZ0FmdGVyQ29udGVudEluaXQoKTtcblxuICAgIHRoaXMudGFicy5jaGFuZ2VzLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZikpLnN1YnNjcmliZSgoKSA9PiB0aGlzLl9zdGF0ZUNoYW5nZWQoKSk7XG4gIH1cblxuICBvdmVycmlkZSBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgc3VwZXIubmdBZnRlclZpZXdJbml0KCk7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLmluaXRpYWxpemVUYWJTZWxlY3Rpb24oKTtcbiAgICAgIHRoaXMuY29uZmlndXJlQm9va21hcmthYmxlVGFicygpO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0aWFsaXplVGFiU2VsZWN0aW9uKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmNvbmZpZz8uc2VsZWN0ZWRJbmRleCAmJiB0aGlzLmlzVGFiU2VsZWN0YWJsZSh0aGlzLmNvbmZpZy5zZWxlY3RlZEluZGV4KSkge1xuICAgICAgdGhpcy5zZWxlY3RlZEluZGV4ID0gdGhpcy5jb25maWcuc2VsZWN0ZWRJbmRleDtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnNlbGVjdEZpcnN0Tm90RGlzYWJsZWRUYWIoKTtcbiAgfVxuXG4gIHByaXZhdGUgY29uZmlndXJlQm9va21hcmthYmxlVGFicygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5jb25maWc/LmNvbm5lY3RXaXRoUm91dGVyKSB7XG4gICAgICB0aGlzLmluaXRpYWxpemVUYWJGcm9tVXJsKCk7XG4gICAgICB0aGlzLmluaXRpYWxpemVGaXJzdFRhYlNlbGVjdGlvbigpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBJbml0aWFsaXplcyB0aGUgdGFiIHNlbGVjdGlvbiBiYXNlZCBvbiB0aGUgVVJMIHBhcmFtZXRlciAndGFiJy5cbiAgICogQHByaXZhdGVcbiAgICovXG4gIHByaXZhdGUgaW5pdGlhbGl6ZVRhYkZyb21VcmwoKTogdm9pZCB7XG4gICAgdGhpcy5yb3V0ZS5xdWVyeVBhcmFtcy5waXBlKHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpKS5zdWJzY3JpYmUocGFyYW1zID0+IHtcbiAgICAgIGNvbnN0IHRhYk5hbWVGcm9tUGFyYW1zID0gcGFyYW1zWyd0YWInXTtcbiAgICAgIGNvbnN0IHBhZ2VUYWIgPSB0aGlzLnRhYnMuZmluZCh0YWIgPT4gdGFiLmNvbmZpZz8ubmFtZSA9PT0gdGFiTmFtZUZyb21QYXJhbXMpO1xuICAgICAgaWYgKHBhZ2VUYWIpIHtcbiAgICAgICAgcGFnZVRhYi5zZWxlY3QoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUud2FybignUUQtVUkgfCBRZFBhZ2VUYWJzQ29tcG9uZW50IC0gTm8gdGFiIGZvdW5kIHdpdGggbmFtZSAnICsgdGFiTmFtZUZyb21QYXJhbXMpO1xuICAgICAgICB0aGlzLnNlbGVjdEZpcnN0Tm90RGlzYWJsZWRUYWIodHJ1ZSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogSWYgdGhlIHVzZXIgbmF2aWdhdGVzIHRvIGEgcGFnZSB3aXRoIGEgdGFiIHNlbGVjdGVkLCB0aGUgdGFiIHdpbGwgYmUgc2VsZWN0ZWQgYXV0b21hdGljYWxseSBpbiB7QGxpbmsgaW5pdGlhbGl6ZVRhYkZyb21VcmwoKX0gbWV0aG9kLlxuICAgKiBJZiB0aGUgdXNlciBuYXZpZ2F0ZXMgdG8gYSBwYWdlIHdpdGhvdXQgYSB0YWIgc2VsZWN0ZWQsIHRoZSBmaXJzdCBhY3RpdmUgdGFiIHdpbGwgYmUgc2VsZWN0ZWQuXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBwcml2YXRlIGluaXRpYWxpemVGaXJzdFRhYlNlbGVjdGlvbigpOiB2b2lkIHtcbiAgICB0aGlzLnJvdXRlLnF1ZXJ5UGFyYW1zLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZikpLnN1YnNjcmliZShwYXJhbXMgPT4ge1xuICAgICAgY29uc3QgdGFiTmFtZUZyb21QYXJhbXMgPSBwYXJhbXNbJ3RhYiddO1xuICAgICAgaWYgKCF0YWJOYW1lRnJvbVBhcmFtcykge1xuICAgICAgICBjb25zdCBzZWxlY3RlZEluZGV4ID0gdGhpcy5jb25maWcuc2VsZWN0ZWRJbmRleDtcbiAgICAgICAgY29uc3QgcGFnZVRhYiA9IHRoaXMudGFicy5maW5kKCh0YWIsIHRhYkluZGV4KSA9PiB0YWJJbmRleCA9PT0gc2VsZWN0ZWRJbmRleCk7XG4gICAgICAgIGlmIChwYWdlVGFiICYmIHBhZ2VUYWI/LmNvbmZpZy5uYW1lKSB7XG4gICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW10sIHtcbiAgICAgICAgICAgIHJlbGF0aXZlVG86IHRoaXMucm91dGUsXG4gICAgICAgICAgICBxdWVyeVBhcmFtczogeyB0YWI6IHBhZ2VUYWIuY29uZmlnLm5hbWUgfSxcbiAgICAgICAgICAgIHF1ZXJ5UGFyYW1zSGFuZGxpbmc6ICdtZXJnZSdcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgICAnUUQtVUkgfCBRZFBhZ2VUYWJzQ29tcG9uZW50IC0gY29ubmVjdGVkV2l0aFJvdXRlciBpcyBhY3RpdmUsIGhvd2V2ZXIgUWRQYWdlVGFiIGhhcyBubyBuYW1lIGF0dHJpYnV0ZS4nXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgb3ZlcnJpZGUgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgc3VwZXIubmdPbkRlc3Ryb3koKTtcbiAgfVxuXG4gIG92ZXJyaWRlIF9nZXRJbmRpY2F0b3JUeXBlKGluZGV4OiBudW1iZXIsIHN0YXRlPzogU3RlcFN0YXRlKTogU3RlcFN0YXRlIHtcbiAgICBsZXQgc3RlcFN0YXRlID0gc3VwZXIuX2dldEluZGljYXRvclR5cGUoaW5kZXgsIHN0YXRlKTtcbiAgICBpZiAoc3RlcFN0YXRlID09PSAnZXJyb3InICYmIHRoaXMuX3ZpZXdvbmx5ID09PSB0cnVlKSBzdGVwU3RhdGUgPSAnZWRpdCc7XG4gICAgcmV0dXJuIHN0ZXBTdGF0ZTtcbiAgfVxuXG4gIHByaXZhdGUgaXNUYWJTZWxlY3RhYmxlKGluZGV4OiBudW1iZXIpOiBib29sZWFuIHtcbiAgICBjb25zdCB0YWIgPSB0aGlzLnRhYnMuZ2V0KGluZGV4KTtcblxuICAgIHJldHVybiAhIXRhYiAmJiAhdGFiLmNvbmZpZy5pc0Rpc2FibGVkO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlbGVjdHMgdGhlIGZpcnN0IHRhYiB0aGF0IGlzIG5vdCBkaXNhYmxlZC5cbiAgICogQHBhcmFtIHVwZGF0ZVVybCBpZiB0cnVlLCB0aGUgVVJMIHdpbGwgYmUgdXBkYXRlZCB0byByZWZsZWN0IHRoZSBzZWxlY3RlZCB0YWIuXG4gICAqL1xuICBwcml2YXRlIHNlbGVjdEZpcnN0Tm90RGlzYWJsZWRUYWIodXBkYXRlVXJsID0gZmFsc2UpOiB2b2lkIHtcbiAgICB0aGlzLnRhYnMuc29tZSgodGFiLCB0YWJJbmRleCkgPT4ge1xuICAgICAgaWYgKCF0YWIuY29uZmlnLmlzRGlzYWJsZWQpIHtcbiAgICAgICAgaWYgKHRoaXMuY29uZmlnKSB7XG4gICAgICAgICAgdGhpcy5jb25maWcuc2VsZWN0ZWRJbmRleCA9IHRhYkluZGV4O1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRJbmRleCA9IHRhYkluZGV4O1xuXG4gICAgICAgIGlmICh1cGRhdGVVcmwgJiYgdGhpcy5jb25maWc/LmNvbm5lY3RXaXRoUm91dGVyICYmIHRhYi5jb25maWc/Lm5hbWUpIHtcbiAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbXSwge1xuICAgICAgICAgICAgcmVsYXRpdmVUbzogdGhpcy5yb3V0ZSxcbiAgICAgICAgICAgIHF1ZXJ5UGFyYW1zOiB7IHRhYjogdGFiLmNvbmZpZy5uYW1lIH0sXG4gICAgICAgICAgICBxdWVyeVBhcmFtc0hhbmRsaW5nOiAnbWVyZ2UnXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBzYXZlKCk6IHZvaWQge1xuICAgIHRoaXMuc2VsZWN0ZWQ/LnRhYkNvbnRyb2w/Lm1hcmtBbGxBc1RvdWNoZWQoKTtcblxuICAgIGNvbnN0IHRhYkNvbnRyb2xWYWx1ZXMgPSB0aGlzLnRhYnMubWFwKHRhYiA9PiB0YWIudGFiQ29udHJvbD8udmFsdWUpO1xuICAgIHRoaXMuY29uZmlnPy5zdWJtaXRCdXR0b24/LmhhbmRsZXI/Lih0YWJDb250cm9sVmFsdWVzKTtcbiAgfVxuXG4gIHNlbGVjdFRhYih0YWI6IFFkUGFnZVRhYkNvbXBvbmVudCk6IHZvaWQge1xuICAgIGlmICh0YWIuY29uZmlnPy5pc0Rpc2FibGVkKSByZXR1cm47XG4gICAgdGFiLnNlbGVjdCgpO1xuICAgIGlmICh0aGlzLmNvbmZpZz8uY29ubmVjdFdpdGhSb3V0ZXIgJiYgdGFiLmNvbmZpZz8ubmFtZSkge1xuICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW10sIHtcbiAgICAgICAgcmVsYXRpdmVUbzogdGhpcy5yb3V0ZSxcbiAgICAgICAgcXVlcnlQYXJhbXM6IHsgdGFiOiB0YWIuY29uZmlnLm5hbWUgfSxcbiAgICAgICAgcXVlcnlQYXJhbXNIYW5kbGluZzogJ21lcmdlJ1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgaXNTdWJtaXRCdXR0b25TaG93bigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5jb25maWc/LnN1Ym1pdEJ1dHRvbj8uaXNIaWRkZW4gIT09IHRydWUgJiYgIXRoaXMuZm9vdGVyU2VydmljZTtcbiAgfVxuXG4gIGlzU3VibWl0QnV0dG9uRGlzYWJsZWQoKTogYm9vbGVhbiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnPy5zdWJtaXRCdXR0b24/LmlzRGlzYWJsZWQ7XG4gIH1cblxuICBfZ2V0VGFiTGFiZWxJZChpOiBudW1iZXIpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9nZXRTdGVwTGFiZWxJZChpKTtcbiAgfVxuXG4gIHByaXZhdGUgYmxvY2tDZGtJbnB1dChpbnB1dE5hbWU6IHN0cmluZyk6IHZvaWQge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBRRC1VSSB8IFFkUGFnZVRhYnNDb21wb25lbnQgLSBUaGUgdXNlIG9mIHRoZSAke2lucHV0TmFtZX0gYXR0cmlidXRlIGlzIG5vdCBwZXJtaXR0ZWQuIFBsZWFzZSB1c2UgUWRQYWdlVGFic0NvbmZpZyBpbnN0ZWFkLmBcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBtYXBTZWxlY3Rpb25DaGFuZ2VUb1RhYlNlbGVjdGlvbk91dHB1dCgpOiB2b2lkIHtcbiAgICB0aGlzLnNlbGVjdGlvbkNoYW5nZS5waXBlKHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpKS5zdWJzY3JpYmUoc2VsZWN0aW9uRXZlbnQgPT4ge1xuICAgICAgdGhpcy50YWJTZWxlY3Rpb24uZW1pdCh7XG4gICAgICAgIHNlbGVjdGVkSW5kZXg6IHNlbGVjdGlvbkV2ZW50LnNlbGVjdGVkSW5kZXgsXG4gICAgICAgIHByZXZpb3VzbHlTZWxlY3RlZEluZGV4OiBzZWxlY3Rpb25FdmVudC5wcmV2aW91c2x5U2VsZWN0ZWRJbmRleCxcbiAgICAgICAgc2VsZWN0ZWRUYWI6IHNlbGVjdGlvbkV2ZW50LnNlbGVjdGVkU3RlcCBhcyBRZFBhZ2VUYWJDb21wb25lbnQsXG4gICAgICAgIHByZXZpb3VzbHlTZWxlY3RlZFRhYjogc2VsZWN0aW9uRXZlbnQucHJldmlvdXNseVNlbGVjdGVkU3RlcCBhcyBRZFBhZ2VUYWJDb21wb25lbnRcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwicWQtdGFicy1pdGVtcy1jb250YWluZXJcIiBbbmdDbGFzc109XCJ7IHNjcm9sbGFibGU6IGNvbmZpZz8uc2Nyb2xsYWJlIH1cIj5cbiAgPHFkLXBhZ2UtdGFiLWhlYWRlclxuICAgICpuZ0Zvcj1cImxldCB0YWIgb2YgdGFiczsgbGV0IGkgPSBpbmRleFwiXG4gICAgKGNsaWNrKT1cInNlbGVjdFRhYih0YWIpXCJcbiAgICBbaWRdPVwiX2dldFRhYkxhYmVsSWQoaSlcIlxuICAgIFtpbmRleF09XCJpXCJcbiAgICBbc3RhdGVdPVwiX2dldEluZGljYXRvclR5cGUoaSwgdGFiLnN0YXRlKVwiXG4gICAgW2xhYmVsXT1cInRhYi5jb25maWcubGFiZWwuaTE4biB8IHRyYW5zbGF0ZVwiXG4gICAgW2NvdW50ZXJzXT1cInRhYi5jb25maWcuY291bnRlcnNcIlxuICAgIFtpc1NlbGVjdGVkXT1cInNlbGVjdGVkSW5kZXggPT09IGlcIlxuICAgIFtpc0Rpc2FibGVkXT1cInRhYi5jb25maWc/LmlzRGlzYWJsZWRcIlxuICAgIFtkYXRhLXRlc3QtaWRdPVwidGVzdElkICsgJy1oZWFkZXInICsgJy0nICsgaVwiXG4gID5cbiAgPC9xZC1wYWdlLXRhYi1oZWFkZXI+XG48L2Rpdj5cblxuPGRpdiBjbGFzcz1cInRhYnMtY29udGVudFwiPlxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiIXNlbGVjdGVkPy5jb25maWc/LmlzRGlzYWJsZWRcIiBbbmdUZW1wbGF0ZU91dGxldF09XCJzZWxlY3RlZD8uY29udGVudFwiPjwvbmctY29udGFpbmVyPlxuPC9kaXY+XG5cbjxkaXYgY2xhc3M9XCJxZC10YWJzLWFjdGlvbi1hcmVhXCIgKm5nSWY9XCJpc1N1Ym1pdEJ1dHRvblNob3duKClcIj5cbiAgPGJ1dHRvbiBxZEJ1dHRvbiAoY2xpY2spPVwic2F2ZSgpXCIgW2Rpc2FibGVkXT1cImlzU3VibWl0QnV0dG9uRGlzYWJsZWQoKVwiIFtkYXRhLXRlc3QtaWRdPVwidGVzdElkICsgJy1zdWJtaXQnXCI+XG4gICAge3sgY29uZmlnPy5zdWJtaXRCdXR0b24/LmkxOG4gfHwgXCJpMThuLnFkLnRhYnMuYnV0dG9uLnN1Ym1pdFwiIHwgdHJhbnNsYXRlIH19XG4gIDwvYnV0dG9uPlxuPC9kaXY+XG4iXX0=
386
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFnZS10YWJzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvcWQtdWkvc3JjL2xpYi9wYWdlLXRhYnMvcGFnZS10YWJzLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL2xpYnMvcWQtdWkvc3JjL2xpYi9wYWdlLXRhYnMvcGFnZS10YWJzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNuRCxPQUFPLEVBQUUsVUFBVSxFQUFhLE1BQU0sc0JBQXNCLENBQUM7QUFDN0QsT0FBTyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDOUUsT0FBTyxFQUdMLHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsU0FBUyxFQUNULFVBQVUsRUFDVixVQUFVLEVBQ1YsWUFBWSxFQUNaLE1BQU0sRUFDTixLQUFLLEVBSUwsUUFBUSxFQUNSLE1BQU0sRUFHUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdEQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDZDQUE2QyxDQUFDO0FBQ2xGLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBR2hGLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLDZDQUE2QyxDQUFDO0FBRXZGLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDekQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7Ozs7Ozs7OztBQUVoRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7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c0JBQTlCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXJlY3Rpb25hbGl0eSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9iaWRpJztcbmltcG9ydCB7IENka1N0ZXBwZXIsIFN0ZXBTdGF0ZSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9zdGVwcGVyJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSwgTmdGb3IsIE5nSWYsIE5nVGVtcGxhdGVPdXRsZXQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgQWZ0ZXJDb250ZW50SW5pdCxcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIERlc3Ryb3lSZWYsXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgaW5qZWN0LFxuICBJbnB1dCxcbiAgT25DaGFuZ2VzLFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgT3B0aW9uYWwsXG4gIE91dHB1dCxcbiAgUXVlcnlMaXN0LFxuICBTaW1wbGVDaGFuZ2VzXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVHJhbnNsYXRlTW9kdWxlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBRZEJ1dHRvbk1vZHVsZSB9IGZyb20gJy4uL2J1dHRvbi9idXR0b24ubW9kdWxlJztcbmltcG9ydCB7IFFkUGFnZUZvb3RlclNlcnZpY2UgfSBmcm9tICcuLi9wYWdlL3NoYXJlZC9zZXJ2aWNlcy9wYWdlLWZvb3Rlci5zZXJ2aWNlJztcbmltcG9ydCB7IFFkUGFnZVN0b3JlU2VydmljZSB9IGZyb20gJy4uL3BhZ2Uvc2hhcmVkL3NlcnZpY2VzL3BhZ2Utc3RvcmUuc2VydmljZSc7XG5pbXBvcnQgeyBRZFBhZ2VUYWJzQ29uZmlnIH0gZnJvbSAnLi9tb2RlbC9wYWdlLXRhYnMtY29uZmlnJztcbmltcG9ydCB7IFFkVGFiU2VsZWN0aW9uRXZlbnQgfSBmcm9tICcuL21vZGVsL3BhZ2UtdGFicy1zZWxlY3Rpb24tZXZlbnQnO1xuaW1wb3J0IHsgUWRQYWdlVGFiSGVhZGVyQ29tcG9uZW50IH0gZnJvbSAnLi9wYWdlLXRhYi1oZWFkZXIvcGFnZS10YWItaGVhZGVyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBRZFBhZ2VUYWJDb21wb25lbnQgfSBmcm9tICcuL3BhZ2UtdGFiL3BhZ2UtdGFiLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IHRha2VVbnRpbERlc3Ryb3llZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcblxuLyoqXG4gKiAqKlFkUGFnZVRhYnNDb21wb25lbnQqKiBwcm92aWRlcyBhIG5vbi1saW5lYXIgdGFiYmVkIG5hdmlnYXRpb24gc3lzdGVtIHdpdGhpbiBhICoqUWRQYWdlKiouXG4gKiBJdCBlbmFibGVzIHN3aXRjaGluZyBiZXR3ZWVuIGRpZmZlcmVudCBzZWN0aW9ucyB3aGlsZSBtYWludGFpbmluZyBmb3JtIHZhbGlkYXRpb24gYW5kIGNvbnRyb2xsZWQgbmF2aWdhdGlvbi5cbiAqXG4gKiAjIyMjICoqRmVhdHVyZXMqKlxuICpcbiAqIC0gKipOb24tbGluZWFyIE5hdmlnYXRpb24qKjogVXNlcnMgY2FuIG5hdmlnYXRlIGZyZWVseSBiZXR3ZWVuIHRhYnMsIHdpdGggdmFsaWRhdGlvbiBjaGVja3Mgd2hlcmUgbmVjZXNzYXJ5LlxuICogLSAqKkZvcm0gVmFsaWRhdGlvbiBTdXBwb3J0Kio6IEVuc3VyZXMgdGFicyBkaXNwbGF5IGVycm9ycyB3aGVuIG5lY2Vzc2FyeSBpZiBmb3JtIGlucHV0cyBhcmUgaW52YWxpZC5cbiAqIC0gKipDdXN0b21pemFibGUgVGFiIENvbmZpZ3VyYXRpb25zKio6IEVhY2ggdGFiIGNhbiBoYXZlIGN1c3RvbSBsYWJlbHMsIHZhbGlkYXRpb24sIGFuZCBjb3VudGVycyBmb3IgdHJhY2tpbmcgc3RhdGVzLlxuICogLSAqKkR5bmFtaWMgQ291bnRlcnMqKjogRGlzcGxheXMgbnVtZXJpYyBpbmRpY2F0b3JzIHRvIHNpZ25hbCBjcml0aWNhbCBvciBwb3NpdGl2ZSBzdGF0ZXMuXG4gKiAtICoqU3RhbmRhbG9uZSBDb21wYXRpYmlsaXR5Kio6IENhbiBiZSB1c2VkIGluZGVwZW5kZW50bHkgb3IgaW50ZWdyYXRlZCB3aXRoaW4gYSBsYXJnZXIgKipRZFBhZ2UqKiBzdHJ1Y3R1cmUuXG4gKiAtICoqQ3VzdG9taXphYmxlIFN1Ym1pdCBCdXR0b24qKjogQWxsb3dzIGNvbmZpZ3VyYXRpb24gb2YgYW4gYWN0aW9uIGhhbmRsZXIgYW5kIHZpc2liaWxpdHkgc2V0dGluZ3MuXG4gKiAtICoqQm9va21hcmthYmxlIHRhYnMqKjogQWxsb3dzIHVzZXJzIHRvIGJvb2ttYXJrIHRhYnMgYW5kIG1ha2UgdGhlbSBuYXZpZ2FibGUuXG4gKlxuICogIyMjIyAqKlRhYiBDb25maWd1cmF0aW9uKipcbiAqXG4gKiBFYWNoIHRhYiBpbnNpZGUgYFFkUGFnZVRhYnNDb21wb25lbnRgIGNhbiBiZSBjb25maWd1cmVkIHVzaW5nIGBRZFBhZ2VUYWJDb25maWdgLCBzdXBwb3J0aW5nOlxuICpcbiAqIC0gKipsYWJlbCoqOiBBIHRyYW5zbGF0YWJsZSBsYWJlbCBmb3IgdGhlIHRhYi5cbiAqIC0gKippc0Rpc2FibGVkKio6IFdoZXRoZXIgdGhlIHRhYiBzaG91bGQgYmUgaW50ZXJhY3RhYmxlLlxuICogLSAqKmNvdW50ZXJzKio6IERpc3BsYXlzIG51bWVyaWMgY291bnRlcnMgZm9yICoqY3JpdGljYWwqKiAocmVkKSBhbmQgKipwb3NpdGl2ZSoqIChncmVlbikgc3RhdGVzLlxuICogLSAqKm5hbWUqKjogVW5pcXVlIG5hbWUgb2YgdGhpcyB0YWIuIFVzZWQgZm9yIHF1ZXJ5IHBhcmFtIHJvdXRpbmcgdmlhIGA/dGFiPTx0YWJOYW1lPmAuIFJlcXVpcmVkIHdoZW4gYGNvbm5lY3RXaXRoUm91dGVyYCBpbiAqKlFkUGFnZVRhYnNDb25maWcqKiBpcyBlbmFibGVkLlxuICpcbiAqICMjIyMgKipGb3JtIEhhbmRsaW5nKipcbiAqXG4gKiBUYWJzIHN1cHBvcnQgZm9ybSBncm91cHMsIHdoaWNoIGFyZSBwYXNzZWQgdXNpbmcgdGhlIGBbdGFiQ29udHJvbF1gIGlucHV0LlxuICogVGhlIHN5c3RlbSBlbnN1cmVzIHRoYXQgZm9ybXMgdmFsaWRhdGUgY29ycmVjdGx5IGJlZm9yZSBhbGxvd2luZyBuYXZpZ2F0aW9uLlxuICpcbiAqICMjIyMgKipFcnJvciBIYW5kbGluZyoqXG4gKlxuICogRXJyb3Igc3RhdGVzIGFwcGVhciB3aGVuOlxuICpcbiAqIC0gKipBIHJlcXVpcmVkIGZvcm0gZmllbGQgaXMgbGVmdCBlbXB0eSoqOiBUaGUgdGFiIHRpdGxlIGNoYW5nZXMgdG8gcmVkLlxuICogLSAqKkludmFsaWQgZGF0YSBpcyBlbnRlcmVkKio6IFRoZSB2YWxpZGF0aW9uIHByb2Nlc3MgY2hhbmdlcyB0aGUgdGFiIHRpdGxlIHRvIHJlZC5cbiAqXG4gKiAjIyMjICoqU3VibWl0IEJ1dHRvbiBDb25maWd1cmF0aW9uKipcbiAqXG4gKiBUaGUgc3VibWl0IGJ1dHRvbiBhdCB0aGUgYm90dG9tIG9mIHRoZSB0YWIgc3lzdGVtIGNhbiBiZSBjb25maWd1cmVkIHZpYSBgUWRQYWdlVGFic0NvbmZpZ2A6XG4gKlxuICogLSAqKmkxOG4qKjogVGhlIHRyYW5zbGF0ZWQgbGFiZWwgZm9yIHRoZSBzdWJtaXQgYnV0dG9uLlxuICogLSAqKmhhbmRsZXIqKjogQSBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IHJlY2VpdmVzIGZvcm0gZGF0YSB1cG9uIHN1Ym1pc3Npb24uXG4gKiAtICoqaXNEaXNhYmxlZCoqOiBDb250cm9scyB3aGV0aGVyIHRoZSBidXR0b24gc2hvdWxkIGJlIGFjdGl2ZSBvciBub3QuXG4gKiAtICoqaXNIaWRkZW4qKjogRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBidXR0b24gaXMgdmlzaWJsZS5cbiAqIC0gKipjb25uZWN0V2l0aFJvdXRlcioqOiBJZiBzZXQgdG8gdHJ1ZSwgdGhlIHRhYiB3aWxsIGJlIGNvbm5lY3RlZCB0byB0aGUgVVJMIGFuZCB3aWxsIGJlIGJvb2ttYXJrZWQuIEl0IGlzIG9ibGlnYXRvcnkgdG8gc2V0IHRoZSBgbmFtZWAgYXR0cmlidXRlIGZvciBlYWNoIHRhYi5cbiAqXG4gKiAjIyMjICoqVXNhZ2UqKlxuICpcbiAqICoqQmFzaWMgRXhhbXBsZToqKlxuICpcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIEBDb21wb25lbnQoeyAuLi4gfSlcbiAqIGV4cG9ydCBjbGFzcyBNeVBhZ2VUYWJzQ29tcG9uZW50IHtcbiAqICAgZm9ybSA9IG5ldyBGb3JtR3JvdXAoe1xuICogICAgIGZpcnN0TmFtZTogbmV3IEZvcm1Db250cm9sKCcnLCBWYWxpZGF0b3JzLnJlcXVpcmVkKSxcbiAqICAgICBsYXN0TmFtZTogbmV3IEZvcm1Db250cm9sKCcnKSxcbiAqICAgICBhZ2U6IG5ldyBGb3JtQ29udHJvbCgnJylcbiAqICAgfSk7XG4gKlxuICogICBjb25maWc6IFFkUGFnZVRhYnNDb25maWcgPSB7XG4gKiAgICAgc3VibWl0QnV0dG9uOiB7XG4gKiAgICAgICBoYW5kbGVyOiAodmFsdWVzKSA9PiBkb1NvbWV0aGluZ1dpdGgodmFsdWVzKVxuICogICAgIH1cbiAqICAgfTtcbiAqXG4gKiAgIGZpcnN0VGFiQ29uZmlnOiBRZFBhZ2VUYWJDb25maWcgPSB7XG4gKiAgICAgbGFiZWw6IHsgaTE4bjogJ1RhYiBPbmUnIH0sXG4gKiAgICAgY291bnRlcnM6IG9mKHsgcG9zaXRpdmU6IDMsIGNyaXRpY2FsOiAxIH0pXG4gKiAgIH07XG4gKlxuICogICAuLi5cbiAqIH1cbiAqIGBgYFxuICpcbiAqIGBgYGh0bWxcbiAqIDxxZC1wYWdlLXRhYnMgW2NvbmZpZ109XCJjb25maWdcIj5cbiAqICAgPHFkLXBhZ2UtdGFiIFtjb25maWddPVwiZmlyc3RUYWJDb25maWdcIiBbdGFiQ29udHJvbF09XCJmb3JtXCI+XG4gKiAgICAgPHFkLXNlY3Rpb24gW2NvbmZpZ109XCJzZWN0aW9uQ29uZmlnXCI+XG4gKiAgICAgICA8cWQtZ3JpZCBbY29uZmlnXT1cImdyaWRDb25maWdcIiBbZm9ybUdyb3VwXT1cImZvcm1cIj5cbiAqICAgICAgICAgPHFkLWlucHV0IGZvcm1Db250cm9sTmFtZT1cImZpcnN0TmFtZVwiPjwvcWQtaW5wdXQ+XG4gKiAgICAgICAgIDxxZC1pbnB1dCBmb3JtQ29udHJvbE5hbWU9XCJsYXN0TmFtZVwiPjwvcWQtaW5wdXQ+XG4gKiAgICAgICAgIDxxZC1pbnB1dCBmb3JtQ29udHJvbE5hbWU9XCJhZ2VcIj48L3FkLWlucHV0PlxuICogICAgICAgPC9xZC1ncmlkPlxuICogICAgIDwvcWQtc2VjdGlvbj5cbiAqICAgPC9xZC1wYWdlLXRhYj5cbiAqXG4gKiAgIDxxZC1wYWdlLXRhYiAuLi4gPlxuICogICAgIC4uLlxuICogICA8L3FkLXBhZ2UtdGFiPlxuICogPC9xZC1wYWdlLXRhYnM+XG4gKiBgYGBcbiAqXG4gKiAqKkJvb2ttYXJrYWJsZSBUYWJzIEV4YW1wbGU6ICoqXG4gKlxuICogVG8gZW5hYmxlIGJvb2ttYXJrYWJsZSB0YWJzIHRoYXQgc3luYyB3aXRoIHRoZSBicm93c2VyIFVSTCwgc2V0IGBjb25uZWN0V2l0aFJvdXRlcjogdHJ1ZWBcbiAqIGFuZCBwcm92aWRlIGEgdW5pcXVlIGBuYW1lYCBmb3IgZWFjaCB0YWI6XG4gKlxuICogYGBgdHlwZXNjcmlwdFxuICogaW1wb3J0IHsgQ29tcG9uZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG4gKiBpbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuICogaW1wb3J0IHsgUWRQYWdlVGFic0NvbmZpZywgUWRQYWdlVGFiQ29uZmlnIH0gZnJvbSAnQHFkLXVpL3FkLXVpJztcbiAqXG4gKiBAQ29tcG9uZW50KHtcbiAqICAgc2VsZWN0b3I6ICdhcHAtYm9va21hcmthYmxlLXRhYnMnLFxuICogICB0ZW1wbGF0ZTogYFxuICogICAgIDxxZC1wYWdlLXRhYnMgW2NvbmZpZ109XCJwYWdlVGFic0NvbmZpZ1wiPlxuICogICAgICAgPHFkLXBhZ2UtdGFiIFtjb25maWddPVwib3ZlcnZpZXdUYWJDb25maWdcIj5cbiAqICAgICAgICAgPHFkLXNlY3Rpb24+XG4gKiAgICAgICAgICAgVGhpcyBpcyB0aGUgb3ZlcnZpZXcgdGFiIGNvbnRlbnQuXG4gKiAgICAgICAgIDwvcWQtc2VjdGlvbj5cbiAqICAgICAgIDwvcWQtcGFnZS10YWI+XG4gKlxuICogICAgICAgPHFkLXBhZ2UtdGFiIFtjb25maWddPVwiZGV0YWlsVGFiQ29uZmlnXCI+XG4gKiAgICAgICAgIDxxZC1zZWN0aW9uPlxuICogICAgICAgICAgIFRoaXMgaXMgdGhlIGRldGFpbCB0YWIgY29udGVudC5cbiAqICAgICAgICAgPC9xZC1zZWN0aW9uPlxuICogICAgICAgPC9xZC1wYWdlLXRhYj5cbiAqXG4gKiAgICAgICA8cWQtcGFnZS10YWIgW2NvbmZpZ109XCJjb250cm9sUmVzdWx0c1RhYkNvbmZpZ1wiPlxuICogICAgICAgICA8cWQtc2VjdGlvbj5cbiAqICAgICAgICAgICBUaGlzIGlzIHRoZSBjb250cm9sIHJlc3VsdHMgdGFiIGNvbnRlbnQuXG4gKiAgICAgICAgIDwvcWQtc2VjdGlvbj5cbiAqICAgICAgIDwvcWQtcGFnZS10YWI+XG4gKiAgICAgPC9xZC1wYWdlLXRhYnM+XG4gKiAgIGBcbiAqIH0pXG4gKiBleHBvcnQgY2xhc3MgQm9va21hcmthYmxlVGFic0NvbXBvbmVudCB7XG4gKiAgIC8vIEVuYWJsZSByb3V0ZXIgY29ubmVjdGlvbiBmb3IgYm9va21hcmthYmxlIHRhYnNcbiAqICAgcGFnZVRhYnNDb25maWc6IFFkUGFnZVRhYnNDb25maWcgPSB7XG4gKiAgICAgc2VsZWN0ZWRJbmRleDogMCxcbiAqICAgICBjb25uZWN0V2l0aFJvdXRlcjogdHJ1ZVxuICogICB9O1xuICpcbiAqICAgLy8gRWFjaCB0YWIgbXVzdCBoYXZlIGEgdW5pcXVlICduYW1lJyB3aGVuIGNvbm5lY3RXaXRoUm91dGVyIGlzIGVuYWJsZWRcbiAqICAgb3ZlcnZpZXdUYWJDb25maWc6IFFkUGFnZVRhYkNvbmZpZyA9IHtcbiAqICAgICBsYWJlbDogeyBpMThuOiAnT3ZlcnZpZXcnIH0sXG4gKiAgICAgbmFtZTogJ292ZXJ2aWV3JyAvLyBSZXF1aXJlZCBmb3Igcm91dGVyIGNvbm5lY3Rpb25cbiAqICAgfTtcbiAqXG4gKiAgIGRldGFpbFRhYkNvbmZpZzogUWRQYWdlVGFiQ29uZmlnID0ge1xuICogICAgIGxhYmVsOiB7IGkxOG46ICdEZXRhaWxzJyB9LFxuICogICAgIG5hbWU6ICdkZXRhaWxzJyAvLyBSZXF1aXJlZCBmb3Igcm91dGVyIGNvbm5lY3Rpb25cbiAqICAgfTtcbiAqXG4gKiAgIGNvbnRyb2xSZXN1bHRzVGFiQ29uZmlnOiBRZFBhZ2VUYWJDb25maWcgPSB7XG4gKiAgICAgbGFiZWw6IHsgaTE4bjogJ0NvbnRyb2wgUmVzdWx0cycgfSxcbiAqICAgICBuYW1lOiAnY29udHJvbFJlc3VsdHMnIC8vIFJlcXVpcmVkIGZvciByb3V0ZXIgY29ubmVjdGlvblxuICogICB9O1xuICpcbiAqICAgY29uc3RydWN0b3IgKHByaXZhdGUgcm91dGVyOiBSb3V0ZXIpIHt9XG4gKiB9XG4gKiBgYGBcbiAqXG4gKiAqKkJvb2ttYXJrYWJsZSBUYWJzIEJlaGF2aW9yOiAqKlxuICogLSBVUkxzIHdpbGwgaW5jbHVkZSBxdWVyeSBwYXJhbWV0ZXI6IGA/dGFiPW92ZXJ2aWV3YCwgYD90YWI9ZGV0YWlsc2AsIGA/dGFiPWNvbnRyb2xSZXN1bHRzYFxuICogLSBVc2VycyBjYW4gYm9va21hcmsgc3BlY2lmaWMgdGFicyBhbmQgcmV0dXJuIGRpcmVjdGx5IHRvIHRoZW1cbiAqIC0gQnJvd3NlciBiYWNrL2ZvcndhcmQgYnV0dG9ucyB3b3JrIHdpdGggdGFiIG5hdmlnYXRpb25cbiAqIC0gSWYgYW4gaW52YWxpZCB0YWIgbmFtZSBpcyBwcm92aWRlZCBpbiBVUkwsIHRoZSBmaXJzdCBhdmFpbGFibGUgdGFiIGlzIHNlbGVjdGVkXG4gKiAtIElmIG5vIHRhYiBwYXJhbWV0ZXIgaXMgcHJlc2VudCwgdGhlIGBzZWxlY3RlZEluZGV4YCBvciBmaXJzdCBub24tZGlzYWJsZWQgdGFiIGlzIHNlbGVjdGVkXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3FkLXBhZ2UtdGFicycsXG4gIHRlbXBsYXRlVXJsOiAnLi9wYWdlLXRhYnMuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9wYWdlLXRhYnMuY29tcG9uZW50LnNjc3MnXSxcbiAgcHJvdmlkZXJzOiBbeyBwcm92aWRlOiBDZGtTdGVwcGVyLCB1c2VFeGlzdGluZzogUWRQYWdlVGFic0NvbXBvbmVudCB9XSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGhvc3Q6IHsgY2xhc3M6ICdxZC10YWJzJywgJ1tjbGFzcy5zdGFuZGFsb25lXSc6ICchZm9vdGVyU2VydmljZScgfSxcbiAgc3RhbmRhbG9uZTogdHJ1ZSwgLy8gaW5oZXJpdGVkIGJ5IENka1N0ZXBwZXJcbiAgaW1wb3J0czogW05nRm9yLCBOZ0lmLCBOZ1RlbXBsYXRlT3V0bGV0LCBRZFBhZ2VUYWJIZWFkZXJDb21wb25lbnQsIFRyYW5zbGF0ZU1vZHVsZSwgUWRCdXR0b25Nb2R1bGUsIENvbW1vbk1vZHVsZV1cbn0pXG5leHBvcnQgY2xhc3MgUWRQYWdlVGFic0NvbXBvbmVudFxuICBleHRlbmRzIENka1N0ZXBwZXJcbiAgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcywgQWZ0ZXJDb250ZW50SW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95XG57XG4gIC8qKlxuICAgKiBDb25maWd1cmF0aW9uIG9mIFFkUGFnZVRhYnMuXG4gICAqL1xuICBASW5wdXQoKVxuICBjb25maWchOiBRZFBhZ2VUYWJzQ29uZmlnO1xuXG4gIC8qKlxuICAgKiBBIHN0YXRpYyB0ZXN0IElEIGZvciBpbnRlZ3JhdGlvbiB0ZXN0cyBjYW4gYmUgc2V0LlxuICAgKi9cbiAgQElucHV0KCdkYXRhLXRlc3QtaWQnKSB0ZXN0SWQgPSAncGFnZS10YWJzJztcblxuICBAT3V0cHV0KCkgcmVhZG9ubHkgdGFiU2VsZWN0aW9uID0gbmV3IEV2ZW50RW1pdHRlcjxRZFRhYlNlbGVjdGlvbkV2ZW50PigpO1xuXG4gIHByaXZhdGUgX3ZpZXdvbmx5OiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICBwcml2YXRlIHJlYWRvbmx5IGRlc3Ryb3lSZWYgPSBpbmplY3QoRGVzdHJveVJlZik7XG5cbiAgZ2V0IHRhYnMoKTogUXVlcnlMaXN0PFFkUGFnZVRhYkNvbXBvbmVudD4ge1xuICAgIHJldHVybiB0aGlzLnN0ZXBzIGFzIFF1ZXJ5TGlzdDxRZFBhZ2VUYWJDb21wb25lbnQ+O1xuICB9XG5cbiAgb3ZlcnJpZGUgZ2V0IHNlbGVjdGVkKCk6IFFkUGFnZVRhYkNvbXBvbmVudCB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHN1cGVyLnNlbGVjdGVkIGFzIFFkUGFnZVRhYkNvbXBvbmVudDtcbiAgfVxuXG4gIG92ZXJyaWRlIHNldCBzZWxlY3RlZChzdGVwOiBRZFBhZ2VUYWJDb21wb25lbnQgfCB1bmRlZmluZWQpIHtcbiAgICBzdXBlci5zZWxlY3RlZCA9IHN0ZXA7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBAT3B0aW9uYWwoKSByZWFkb25seSBmb290ZXJTZXJ2aWNlOiBRZFBhZ2VGb290ZXJTZXJ2aWNlLFxuICAgIEBPcHRpb25hbCgpIF9kaXI6IERpcmVjdGlvbmFsaXR5LFxuICAgIHByaXZhdGUgcGFnZVN0b3JlU2VydmljZTogUWRQYWdlU3RvcmVTZXJ2aWNlPGFueT4sXG4gICAgcHJpdmF0ZSByZWFkb25seSByb3V0ZXI6IFJvdXRlcixcbiAgICBAT3B0aW9uYWwoKSBwcml2YXRlIHJlYWRvbmx5IHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcbiAgICBfY2hhbmdlRGV0ZWN0b3JSZWY6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIF9lbGVtZW50UmVmOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PlxuICApIHtcbiAgICBzdXBlcihfZGlyLCBfY2hhbmdlRGV0ZWN0b3JSZWYsIF9lbGVtZW50UmVmKTtcbiAgICB0aGlzLm1hcFNlbGVjdGlvbkNoYW5nZVRvVGFiU2VsZWN0aW9uT3V0cHV0KCk7XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmxpbmVhciA9IGZhbHNlO1xuXG4gICAgdGhpcy5wYWdlU3RvcmVTZXJ2aWNlLmlzVmlld29ubHkkLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZikpLnN1YnNjcmliZSh2ID0+IHtcbiAgICAgIHRoaXMuX3ZpZXdvbmx5ID0gdjtcbiAgICAgIHRoaXMuX3N0YXRlQ2hhbmdlZCgpO1xuICAgIH0pO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIFsnbGluZWFyJywgJ3NlbGVjdGVkSW5kZXgnLCAnc2VsZWN0ZWQnLCAnb3JpZW50YXRpb24nXVxuICAgICAgLmZpbHRlcihpbnB1dE5hbWUgPT4gISFjaGFuZ2VzW2lucHV0TmFtZV0pXG4gICAgICAuZm9yRWFjaChpbnB1dE5hbWUgPT4gdGhpcy5ibG9ja0Nka0lucHV0KGlucHV0TmFtZSkpO1xuICB9XG5cbiAgb3ZlcnJpZGUgbmdBZnRlckNvbnRlbnRJbml0KCk6IHZvaWQge1xuICAgIHN1cGVyLm5nQWZ0ZXJDb250ZW50SW5pdCgpO1xuXG4gICAgdGhpcy50YWJzLmNoYW5nZXMucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKSkuc3Vic2NyaWJlKCgpID0+IHRoaXMuX3N0YXRlQ2hhbmdlZCgpKTtcbiAgfVxuXG4gIG92ZXJyaWRlIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICBzdXBlci5uZ0FmdGVyVmlld0luaXQoKTtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuaW5pdGlhbGl6ZVRhYlNlbGVjdGlvbigpO1xuICAgICAgdGhpcy5jb25maWd1cmVCb29rbWFya2FibGVUYWJzKCk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGluaXRpYWxpemVUYWJTZWxlY3Rpb24oKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuY29uZmlnPy5zZWxlY3RlZEluZGV4ICYmIHRoaXMuaXNUYWJTZWxlY3RhYmxlKHRoaXMuY29uZmlnLnNlbGVjdGVkSW5kZXgpKSB7XG4gICAgICB0aGlzLnNlbGVjdGVkSW5kZXggPSB0aGlzLmNvbmZpZy5zZWxlY3RlZEluZGV4O1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuc2VsZWN0Rmlyc3ROb3REaXNhYmxlZFRhYigpO1xuICB9XG5cbiAgcHJpdmF0ZSBjb25maWd1cmVCb29rbWFya2FibGVUYWJzKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmNvbmZpZz8uY29ubmVjdFdpdGhSb3V0ZXIpIHtcbiAgICAgIHRoaXMuaW5pdGlhbGl6ZVRhYkZyb21VcmwoKTtcbiAgICAgIHRoaXMuaW5pdGlhbGl6ZUZpcnN0VGFiU2VsZWN0aW9uKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEluaXRpYWxpemVzIHRoZSB0YWIgc2VsZWN0aW9uIGJhc2VkIG9uIHRoZSBVUkwgcGFyYW1ldGVyICd0YWInLlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgcHJpdmF0ZSBpbml0aWFsaXplVGFiRnJvbVVybCgpOiB2b2lkIHtcbiAgICB0aGlzLnJvdXRlLnF1ZXJ5UGFyYW1zLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZikpLnN1YnNjcmliZShwYXJhbXMgPT4ge1xuICAgICAgY29uc3QgdGFiTmFtZUZyb21QYXJhbXMgPSBwYXJhbXNbJ3RhYiddO1xuICAgICAgY29uc3QgcGFnZVRhYiA9IHRoaXMudGFicy5maW5kKHRhYiA9PiB0YWIuY29uZmlnPy5uYW1lID09PSB0YWJOYW1lRnJvbVBhcmFtcyk7XG4gICAgICBpZiAocGFnZVRhYikge1xuICAgICAgICBwYWdlVGFiLnNlbGVjdCgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc29sZS53YXJuKCdRRC1VSSB8IFFkUGFnZVRhYnNDb21wb25lbnQgLSBObyB0YWIgZm91bmQgd2l0aCBuYW1lICcgKyB0YWJOYW1lRnJvbVBhcmFtcyk7XG4gICAgICAgIHRoaXMuc2VsZWN0Rmlyc3ROb3REaXNhYmxlZFRhYih0cnVlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJZiB0aGUgdXNlciBuYXZpZ2F0ZXMgdG8gYSBwYWdlIHdpdGggYSB0YWIgc2VsZWN0ZWQsIHRoZSB0YWIgd2lsbCBiZSBzZWxlY3RlZCBhdXRvbWF0aWNhbGx5IGluIHtAbGluayBpbml0aWFsaXplVGFiRnJvbVVybCgpfSBtZXRob2QuXG4gICAqIElmIHRoZSB1c2VyIG5hdmlnYXRlcyB0byBhIHBhZ2Ugd2l0aG91dCBhIHRhYiBzZWxlY3RlZCwgdGhlIGZpcnN0IGFjdGl2ZSB0YWIgd2lsbCBiZSBzZWxlY3RlZC5cbiAgICogQHByaXZhdGVcbiAgICovXG4gIHByaXZhdGUgaW5pdGlhbGl6ZUZpcnN0VGFiU2VsZWN0aW9uKCk6IHZvaWQge1xuICAgIHRoaXMucm91dGUucXVlcnlQYXJhbXMucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKSkuc3Vic2NyaWJlKHBhcmFtcyA9PiB7XG4gICAgICBjb25zdCB0YWJOYW1lRnJvbVBhcmFtcyA9IHBhcmFtc1sndGFiJ107XG4gICAgICBpZiAoIXRhYk5hbWVGcm9tUGFyYW1zKSB7XG4gICAgICAgIGNvbnN0IHNlbGVjdGVkSW5kZXggPSB0aGlzLmNvbmZpZy5zZWxlY3RlZEluZGV4O1xuICAgICAgICBjb25zdCBwYWdlVGFiID0gdGhpcy50YWJzLmZpbmQoKHRhYiwgdGFiSW5kZXgpID0+IHRhYkluZGV4ID09PSBzZWxlY3RlZEluZGV4KTtcbiAgICAgICAgaWYgKHBhZ2VUYWIgJiYgcGFnZVRhYj8uY29uZmlnLm5hbWUpIHtcbiAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbXSwge1xuICAgICAgICAgICAgcmVsYXRpdmVUbzogdGhpcy5yb3V0ZSxcbiAgICAgICAgICAgIHF1ZXJ5UGFyYW1zOiB7IHRhYjogcGFnZVRhYi5jb25maWcubmFtZSB9LFxuICAgICAgICAgICAgcXVlcnlQYXJhbXNIYW5kbGluZzogJ21lcmdlJ1xuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICAgICdRRC1VSSB8IFFkUGFnZVRhYnNDb21wb25lbnQgLSBjb25uZWN0ZWRXaXRoUm91dGVyIGlzIGFjdGl2ZSwgaG93ZXZlciBRZFBhZ2VUYWIgaGFzIG5vIG5hbWUgYXR0cmlidXRlLidcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBvdmVycmlkZSBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICBzdXBlci5uZ09uRGVzdHJveSgpO1xuICB9XG5cbiAgb3ZlcnJpZGUgX2dldEluZGljYXRvclR5cGUoaW5kZXg6IG51bWJlciwgc3RhdGU/OiBTdGVwU3RhdGUpOiBTdGVwU3RhdGUge1xuICAgIGxldCBzdGVwU3RhdGUgPSBzdXBlci5fZ2V0SW5kaWNhdG9yVHlwZShpbmRleCwgc3RhdGUpO1xuICAgIGlmIChzdGVwU3RhdGUgPT09ICdlcnJvcicgJiYgdGhpcy5fdmlld29ubHkgPT09IHRydWUpIHN0ZXBTdGF0ZSA9ICdlZGl0JztcbiAgICByZXR1cm4gc3RlcFN0YXRlO1xuICB9XG5cbiAgcHJpdmF0ZSBpc1RhYlNlbGVjdGFibGUoaW5kZXg6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHRhYiA9IHRoaXMudGFicy5nZXQoaW5kZXgpO1xuXG4gICAgcmV0dXJuICEhdGFiICYmICF0YWIuY29uZmlnLmlzRGlzYWJsZWQ7XG4gIH1cblxuICAvKipcbiAgICogU2VsZWN0cyB0aGUgZmlyc3QgdGFiIHRoYXQgaXMgbm90IGRpc2FibGVkLlxuICAgKiBAcGFyYW0gdXBkYXRlVXJsIGlmIHRydWUsIHRoZSBVUkwgd2lsbCBiZSB1cGRhdGVkIHRvIHJlZmxlY3QgdGhlIHNlbGVjdGVkIHRhYi5cbiAgICovXG4gIHByaXZhdGUgc2VsZWN0Rmlyc3ROb3REaXNhYmxlZFRhYih1cGRhdGVVcmwgPSBmYWxzZSk6IHZvaWQge1xuICAgIHRoaXMudGFicy5zb21lKCh0YWIsIHRhYkluZGV4KSA9PiB7XG4gICAgICBpZiAoIXRhYi5jb25maWcuaXNEaXNhYmxlZCkge1xuICAgICAgICBpZiAodGhpcy5jb25maWcpIHtcbiAgICAgICAgICB0aGlzLmNvbmZpZy5zZWxlY3RlZEluZGV4ID0gdGFiSW5kZXg7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zZWxlY3RlZEluZGV4ID0gdGFiSW5kZXg7XG5cbiAgICAgICAgaWYgKHVwZGF0ZVVybCAmJiB0aGlzLmNvbmZpZz8uY29ubmVjdFdpdGhSb3V0ZXIgJiYgdGFiLmNvbmZpZz8ubmFtZSkge1xuICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtdLCB7XG4gICAgICAgICAgICByZWxhdGl2ZVRvOiB0aGlzLnJvdXRlLFxuICAgICAgICAgICAgcXVlcnlQYXJhbXM6IHsgdGFiOiB0YWIuY29uZmlnLm5hbWUgfSxcbiAgICAgICAgICAgIHF1ZXJ5UGFyYW1zSGFuZGxpbmc6ICdtZXJnZSdcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHNhdmUoKTogdm9pZCB7XG4gICAgdGhpcy5zZWxlY3RlZD8udGFiQ29udHJvbD8ubWFya0FsbEFzVG91Y2hlZCgpO1xuXG4gICAgY29uc3QgdGFiQ29udHJvbFZhbHVlcyA9IHRoaXMudGFicy5tYXAodGFiID0+IHRhYi50YWJDb250cm9sPy52YWx1ZSk7XG4gICAgdGhpcy5jb25maWc/LnN1Ym1pdEJ1dHRvbj8uaGFuZGxlcj8uKHRhYkNvbnRyb2xWYWx1ZXMpO1xuICB9XG5cbiAgc2VsZWN0VGFiKHRhYjogUWRQYWdlVGFiQ29tcG9uZW50KTogdm9pZCB7XG4gICAgaWYgKHRhYi5jb25maWc/LmlzRGlzYWJsZWQpIHJldHVybjtcbiAgICB0YWIuc2VsZWN0KCk7XG4gICAgaWYgKHRoaXMuY29uZmlnPy5jb25uZWN0V2l0aFJvdXRlciAmJiB0YWIuY29uZmlnPy5uYW1lKSB7XG4gICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbXSwge1xuICAgICAgICByZWxhdGl2ZVRvOiB0aGlzLnJvdXRlLFxuICAgICAgICBxdWVyeVBhcmFtczogeyB0YWI6IHRhYi5jb25maWcubmFtZSB9LFxuICAgICAgICBxdWVyeVBhcmFtc0hhbmRsaW5nOiAnbWVyZ2UnXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBpc1N1Ym1pdEJ1dHRvblNob3duKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZz8uc3VibWl0QnV0dG9uPy5pc0hpZGRlbiAhPT0gdHJ1ZSAmJiAhdGhpcy5mb290ZXJTZXJ2aWNlO1xuICB9XG5cbiAgaXNTdWJtaXRCdXR0b25EaXNhYmxlZCgpOiBib29sZWFuIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5jb25maWc/LnN1Ym1pdEJ1dHRvbj8uaXNEaXNhYmxlZDtcbiAgfVxuXG4gIF9nZXRUYWJMYWJlbElkKGk6IG51bWJlcik6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2dldFN0ZXBMYWJlbElkKGkpO1xuICB9XG5cbiAgcHJpdmF0ZSBibG9ja0Nka0lucHV0KGlucHV0TmFtZTogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYFFELVVJIHwgUWRQYWdlVGFic0NvbXBvbmVudCAtIFRoZSB1c2Ugb2YgdGhlICR7aW5wdXROYW1lfSBhdHRyaWJ1dGUgaXMgbm90IHBlcm1pdHRlZC4gUGxlYXNlIHVzZSBRZFBhZ2VUYWJzQ29uZmlnIGluc3RlYWQuYFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIG1hcFNlbGVjdGlvbkNoYW5nZVRvVGFiU2VsZWN0aW9uT3V0cHV0KCk6IHZvaWQge1xuICAgIHRoaXMuc2VsZWN0aW9uQ2hhbmdlLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZikpLnN1YnNjcmliZShzZWxlY3Rpb25FdmVudCA9PiB7XG4gICAgICB0aGlzLnRhYlNlbGVjdGlvbi5lbWl0KHtcbiAgICAgICAgc2VsZWN0ZWRJbmRleDogc2VsZWN0aW9uRXZlbnQuc2VsZWN0ZWRJbmRleCxcbiAgICAgICAgcHJldmlvdXNseVNlbGVjdGVkSW5kZXg6IHNlbGVjdGlvbkV2ZW50LnByZXZpb3VzbHlTZWxlY3RlZEluZGV4LFxuICAgICAgICBzZWxlY3RlZFRhYjogc2VsZWN0aW9uRXZlbnQuc2VsZWN0ZWRTdGVwIGFzIFFkUGFnZVRhYkNvbXBvbmVudCxcbiAgICAgICAgcHJldmlvdXNseVNlbGVjdGVkVGFiOiBzZWxlY3Rpb25FdmVudC5wcmV2aW91c2x5U2VsZWN0ZWRTdGVwIGFzIFFkUGFnZVRhYkNvbXBvbmVudFxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJxZC10YWJzLWl0ZW1zLWNvbnRhaW5lclwiIFtuZ0NsYXNzXT1cInsgc2Nyb2xsYWJsZTogY29uZmlnPy5zY3JvbGxhYmUgfVwiPlxuICA8cWQtcGFnZS10YWItaGVhZGVyXG4gICAgKm5nRm9yPVwibGV0IHRhYiBvZiB0YWJzOyBsZXQgaSA9IGluZGV4XCJcbiAgICAoY2xpY2spPVwic2VsZWN0VGFiKHRhYilcIlxuICAgIFtpZF09XCJfZ2V0VGFiTGFiZWxJZChpKVwiXG4gICAgW2luZGV4XT1cImlcIlxuICAgIFtzdGF0ZV09XCJfZ2V0SW5kaWNhdG9yVHlwZShpLCB0YWIuc3RhdGUpXCJcbiAgICBbbGFiZWxdPVwidGFiLmNvbmZpZy5sYWJlbC5pMThuIHwgdHJhbnNsYXRlXCJcbiAgICBbY291bnRlcnNdPVwidGFiLmNvbmZpZy5jb3VudGVyc1wiXG4gICAgW2lzU2VsZWN0ZWRdPVwic2VsZWN0ZWRJbmRleCA9PT0gaVwiXG4gICAgW2lzRGlzYWJsZWRdPVwidGFiLmNvbmZpZz8uaXNEaXNhYmxlZFwiXG4gICAgW2RhdGEtdGVzdC1pZF09XCJ0ZXN0SWQgKyAnLWhlYWRlcicgKyAnLScgKyBpXCJcbiAgPlxuICA8L3FkLXBhZ2UtdGFiLWhlYWRlcj5cbjwvZGl2PlxuXG48ZGl2IGNsYXNzPVwidGFicy1jb250ZW50XCI+XG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCIhc2VsZWN0ZWQ/LmNvbmZpZz8uaXNEaXNhYmxlZFwiIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInNlbGVjdGVkPy5jb250ZW50XCI+PC9uZy1jb250YWluZXI+XG48L2Rpdj5cblxuPGRpdiBjbGFzcz1cInFkLXRhYnMtYWN0aW9uLWFyZWFcIiAqbmdJZj1cImlzU3VibWl0QnV0dG9uU2hvd24oKVwiPlxuICA8YnV0dG9uIHFkQnV0dG9uIChjbGljayk9XCJzYXZlKClcIiBbZGlzYWJsZWRdPVwiaXNTdWJtaXRCdXR0b25EaXNhYmxlZCgpXCIgW2RhdGEtdGVzdC1pZF09XCJ0ZXN0SWQgKyAnLXN1Ym1pdCdcIj5cbiAgICB7eyBjb25maWc/LnN1Ym1pdEJ1dHRvbj8uaTE4biB8fCBcImkxOG4ucWQudGFicy5idXR0b24uc3VibWl0XCIgfCB0cmFuc2xhdGUgfX1cbiAgPC9idXR0b24+XG48L2Rpdj5cbiJdfQ==
@@ -33800,6 +33800,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImpor
33800
33800
  *
33801
33801
  * #### **Usage**
33802
33802
  *
33803
+ * **Basic Example:**
33804
+ *
33803
33805
  * ```typescript
33804
33806
  * @Component({ ... })
33805
33807
  * export class MyPageTabsComponent {
@@ -33841,6 +33843,74 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImpor
33841
33843
  * </qd-page-tab>
33842
33844
  * </qd-page-tabs>
33843
33845
  * ```
33846
+ *
33847
+ * **Bookmarkable Tabs Example: **
33848
+ *
33849
+ * To enable bookmarkable tabs that sync with the browser URL, set `connectWithRouter: true`
33850
+ * and provide a unique `name` for each tab:
33851
+ *
33852
+ * ```typescript
33853
+ * import { Component } from '@angular/core';
33854
+ * import { Router } from '@angular/router';
33855
+ * import { QdPageTabsConfig, QdPageTabConfig } from '@qd-ui/qd-ui';
33856
+ *
33857
+ * @Component({
33858
+ * selector: 'app-bookmarkable-tabs',
33859
+ * template: `
33860
+ * <qd-page-tabs [config]="pageTabsConfig">
33861
+ * <qd-page-tab [config]="overviewTabConfig">
33862
+ * <qd-section>
33863
+ * This is the overview tab content.
33864
+ * </qd-section>
33865
+ * </qd-page-tab>
33866
+ *
33867
+ * <qd-page-tab [config]="detailTabConfig">
33868
+ * <qd-section>
33869
+ * This is the detail tab content.
33870
+ * </qd-section>
33871
+ * </qd-page-tab>
33872
+ *
33873
+ * <qd-page-tab [config]="controlResultsTabConfig">
33874
+ * <qd-section>
33875
+ * This is the control results tab content.
33876
+ * </qd-section>
33877
+ * </qd-page-tab>
33878
+ * </qd-page-tabs>
33879
+ * `
33880
+ * })
33881
+ * export class BookmarkableTabsComponent {
33882
+ * // Enable router connection for bookmarkable tabs
33883
+ * pageTabsConfig: QdPageTabsConfig = {
33884
+ * selectedIndex: 0,
33885
+ * connectWithRouter: true
33886
+ * };
33887
+ *
33888
+ * // Each tab must have a unique 'name' when connectWithRouter is enabled
33889
+ * overviewTabConfig: QdPageTabConfig = {
33890
+ * label: { i18n: 'Overview' },
33891
+ * name: 'overview' // Required for router connection
33892
+ * };
33893
+ *
33894
+ * detailTabConfig: QdPageTabConfig = {
33895
+ * label: { i18n: 'Details' },
33896
+ * name: 'details' // Required for router connection
33897
+ * };
33898
+ *
33899
+ * controlResultsTabConfig: QdPageTabConfig = {
33900
+ * label: { i18n: 'Control Results' },
33901
+ * name: 'controlResults' // Required for router connection
33902
+ * };
33903
+ *
33904
+ * constructor (private router: Router) {}
33905
+ * }
33906
+ * ```
33907
+ *
33908
+ * **Bookmarkable Tabs Behavior: **
33909
+ * - URLs will include query parameter: `?tab=overview`, `?tab=details`, `?tab=controlResults`
33910
+ * - Users can bookmark specific tabs and return directly to them
33911
+ * - Browser back/forward buttons work with tab navigation
33912
+ * - If an invalid tab name is provided in URL, the first available tab is selected
33913
+ * - If no tab parameter is present, the `selectedIndex` or first non-disabled tab is selected
33844
33914
  */
33845
33915
  class QdPageTabsComponent extends CdkStepper {
33846
33916
  footerService;
@@ -34029,7 +34099,7 @@ class QdPageTabsComponent extends CdkStepper {
34029
34099
  });
34030
34100
  });
34031
34101
  }
34032
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: QdPageTabsComponent, deps: [{ token: QdPageFooterService, optional: true }, { token: i1$9.Directionality, optional: true }, { token: QdPageStoreService }, { token: i1$3.Router }, { token: i1$3.ActivatedRoute }, { token: i0.ChangeDetectorRef }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
34102
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: QdPageTabsComponent, deps: [{ token: QdPageFooterService, optional: true }, { token: i1$9.Directionality, optional: true }, { token: QdPageStoreService }, { token: i1$3.Router }, { token: i1$3.ActivatedRoute, optional: true }, { token: i0.ChangeDetectorRef }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
34033
34103
  static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.9", type: QdPageTabsComponent, isStandalone: true, selector: "qd-page-tabs", inputs: { config: "config", testId: ["data-test-id", "testId"] }, outputs: { tabSelection: "tabSelection" }, host: { properties: { "class.standalone": "!footerService" }, classAttribute: "qd-tabs" }, providers: [{ provide: CdkStepper, useExisting: QdPageTabsComponent }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<div class=\"qd-tabs-items-container\" [ngClass]=\"{ scrollable: config?.scrollabe }\">\n <qd-page-tab-header\n *ngFor=\"let tab of tabs; let i = index\"\n (click)=\"selectTab(tab)\"\n [id]=\"_getTabLabelId(i)\"\n [index]=\"i\"\n [state]=\"_getIndicatorType(i, tab.state)\"\n [label]=\"tab.config.label.i18n | translate\"\n [counters]=\"tab.config.counters\"\n [isSelected]=\"selectedIndex === i\"\n [isDisabled]=\"tab.config?.isDisabled\"\n [data-test-id]=\"testId + '-header' + '-' + i\"\n >\n </qd-page-tab-header>\n</div>\n\n<div class=\"tabs-content\">\n <ng-container *ngIf=\"!selected?.config?.isDisabled\" [ngTemplateOutlet]=\"selected?.content\"></ng-container>\n</div>\n\n<div class=\"qd-tabs-action-area\" *ngIf=\"isSubmitButtonShown()\">\n <button qdButton (click)=\"save()\" [disabled]=\"isSubmitButtonDisabled()\" [data-test-id]=\"testId + '-submit'\">\n {{ config?.submitButton?.i18n || \"i18n.qd.tabs.button.submit\" | translate }}\n </button>\n</div>\n", styles: [":host{display:flex;flex-direction:column}:host.standalone{height:calc(100% - 50px)}:host .qd-tabs-items-container{display:flex;width:100%;flex-direction:row;flex-wrap:wrap;padding:0 1.25rem;border-bottom:.125rem solid rgb(213,213,213);background-color:#fff;gap:0 .9375rem}@media (max-width: 599.98px){:host .qd-tabs-items-container{padding:0 .9375rem}}@media (max-width: 1279.98px){:host .qd-tabs-items-container.scrollable{flex-wrap:nowrap;overflow-x:scroll;overflow-y:hidden;scrollbar-width:none}}:host .tabs-content{flex:1 1 auto}:host .qd-tabs-action-area{display:flex;width:100%;height:50px;justify-content:flex-end}:host .qd-tabs-action-area button{margin-right:1.25rem}\n"], dependencies: [{ kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: QdPageTabHeaderComponent, selector: "qd-page-tab-header", inputs: ["state", "label", "counters", "index", "isSelected", "isDisabled", "data-test-id"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1$2.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: QdButtonModule }, { kind: "component", type: QdButtonComponent, selector: "button[qdButton], a[qdButton], button[qd-button]", inputs: ["disabled", "color", "icon", "data-test-id", "additionalInfo"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
34034
34104
  }
34035
34105
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: QdPageTabsComponent, decorators: [{
@@ -34039,7 +34109,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImpor
34039
34109
  type: Optional
34040
34110
  }] }, { type: i1$9.Directionality, decorators: [{
34041
34111
  type: Optional
34042
- }] }, { type: QdPageStoreService }, { type: i1$3.Router }, { type: i1$3.ActivatedRoute }, { type: i0.ChangeDetectorRef }, { type: i0.ElementRef }], propDecorators: { config: [{
34112
+ }] }, { type: QdPageStoreService }, { type: i1$3.Router }, { type: i1$3.ActivatedRoute, decorators: [{
34113
+ type: Optional
34114
+ }] }, { type: i0.ChangeDetectorRef }, { type: i0.ElementRef }], propDecorators: { config: [{
34043
34115
  type: Input
34044
34116
  }], testId: [{
34045
34117
  type: Input,