@c8y/ngx-components 1017.0.456 → 1017.0.463

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,19 +1,19 @@
1
1
  import { Injectable } from '@angular/core';
2
2
  import { Router } from '@angular/router';
3
3
  import { InventoryService } from '@c8y/client';
4
- import { AlertService, DynamicComponentService, getActivatedRoute, gettext, ModalService, NavigatorNode, NavigatorService, Permissions, Status, TabsService, ViewContext } from '@c8y/ngx-components';
4
+ import { AlertService, DynamicComponentService, getActivatedRoute, gettext, GroupService, ModalService, NavigatorNode, NavigatorService, Permissions, Status, TabsService, ViewContext } from '@c8y/ngx-components';
5
5
  import { TranslateService } from '@ngx-translate/core';
6
6
  import { assign, pick, some, keys, keyBy, has, get, forEach, cloneDeep, reduce, set } from 'lodash-es';
7
7
  import { combineLatest, from, of } from 'rxjs';
8
8
  import { catchError, filter, map, mergeAll, mergeMap, tap, throwIfEmpty, toArray } from 'rxjs/operators';
9
- import { ContextDashboardType, STYLING_CLASS_PREFIXES, ALL_GLOBAL_ROLES_SELECTED } from './context-dashboard.model';
9
+ import { ContextDashboardType, STYLING_CLASS_PREFIXES, ALL_GLOBAL_ROLES_SELECTED, PRODUCT_EXPERIENCE } from './context-dashboard.model';
10
10
  import * as i0 from "@angular/core";
11
11
  import * as i1 from "@c8y/client";
12
12
  import * as i2 from "@c8y/ngx-components";
13
13
  import * as i3 from "@ngx-translate/core";
14
14
  import * as i4 from "@angular/router";
15
15
  export class ContextDashboardService {
16
- constructor(inventory, tabs, modal, translateService, router, navigator, permissions, alert, dynamicComponent) {
16
+ constructor(inventory, tabs, modal, translateService, router, navigator, permissions, alert, dynamicComponent, groupService) {
17
17
  this.inventory = inventory;
18
18
  this.tabs = tabs;
19
19
  this.modal = modal;
@@ -23,6 +23,7 @@ export class ContextDashboardService {
23
23
  this.permissions = permissions;
24
24
  this.alert = alert;
25
25
  this.dynamicComponent = dynamicComponent;
26
+ this.groupService = groupService;
26
27
  this.REPORT_PARTIAL_NAME = 'report_';
27
28
  this.INVENTORY_ROLES = ['ROLE_INVENTORY_ADMIN'];
28
29
  this.cache = new Map();
@@ -223,6 +224,20 @@ export class ContextDashboardService {
223
224
  }
224
225
  }
225
226
  }
227
+ getContextForGS(mo) {
228
+ if (this.groupService.isDevice(mo)) {
229
+ return PRODUCT_EXPERIENCE.DASHBOARD.CONTEXT.DEVICE;
230
+ }
231
+ else if (this.groupService.isAsset(mo)) {
232
+ return PRODUCT_EXPERIENCE.DASHBOARD.CONTEXT.ASSET;
233
+ }
234
+ else if (this.groupService.isGroup(mo)) {
235
+ return PRODUCT_EXPERIENCE.DASHBOARD.CONTEXT.GROUP;
236
+ }
237
+ else {
238
+ return null;
239
+ }
240
+ }
226
241
  async serializeWidgetConfigs(dashboard) {
227
242
  const children = cloneDeep(dashboard.c8y_Dashboard.children);
228
243
  if (!children) {
@@ -399,12 +414,12 @@ export class ContextDashboardService {
399
414
  return null;
400
415
  }
401
416
  }
402
- ContextDashboardService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: ContextDashboardService, deps: [{ token: i1.InventoryService }, { token: i2.TabsService }, { token: i2.ModalService }, { token: i3.TranslateService }, { token: i4.Router }, { token: i2.NavigatorService }, { token: i2.Permissions }, { token: i2.AlertService }, { token: i2.DynamicComponentService }], target: i0.ɵɵFactoryTarget.Injectable });
417
+ ContextDashboardService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: ContextDashboardService, deps: [{ token: i1.InventoryService }, { token: i2.TabsService }, { token: i2.ModalService }, { token: i3.TranslateService }, { token: i4.Router }, { token: i2.NavigatorService }, { token: i2.Permissions }, { token: i2.AlertService }, { token: i2.DynamicComponentService }, { token: i2.GroupService }], target: i0.ɵɵFactoryTarget.Injectable });
403
418
  ContextDashboardService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: ContextDashboardService, providedIn: 'root' });
404
419
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: ContextDashboardService, decorators: [{
405
420
  type: Injectable,
406
421
  args: [{
407
422
  providedIn: 'root'
408
423
  }]
409
- }], ctorParameters: function () { return [{ type: i1.InventoryService }, { type: i2.TabsService }, { type: i2.ModalService }, { type: i3.TranslateService }, { type: i4.Router }, { type: i2.NavigatorService }, { type: i2.Permissions }, { type: i2.AlertService }, { type: i2.DynamicComponentService }]; } });
410
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGV4dC1kYXNoYm9hcmQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2NvbnRleHQtZGFzaGJvYXJkL2NvbnRleHQtZGFzaGJvYXJkLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQTBCLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2pFLE9BQU8sRUFBa0IsZ0JBQWdCLEVBQWUsTUFBTSxhQUFhLENBQUM7QUFDNUUsT0FBTyxFQUNMLFlBQVksRUFFWix1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLE9BQU8sRUFDUCxZQUFZLEVBQ1osYUFBYSxFQUNiLGdCQUFnQixFQUNoQixXQUFXLEVBQ1gsTUFBTSxFQUVOLFdBQVcsRUFDWCxXQUFXLEVBRVosTUFBTSxxQkFBcUIsQ0FBQztBQUM3QixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN2RCxPQUFPLEVBQ0wsTUFBTSxFQUNOLElBQUksRUFDSixJQUFJLEVBQ0osSUFBSSxFQUNKLEtBQUssRUFDTCxHQUFHLEVBQ0gsR0FBRyxFQUNILE9BQU8sRUFDUCxTQUFTLEVBQ1QsTUFBTSxFQUNOLEdBQUcsRUFDSixNQUFNLFdBQVcsQ0FBQztBQUNuQixPQUFPLEVBQUUsYUFBYSxFQUFFLElBQUksRUFBYyxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDM0QsT0FBTyxFQUNMLFVBQVUsRUFDVixNQUFNLEVBQ04sR0FBRyxFQUNILFFBQVEsRUFDUixRQUFRLEVBQ1IsR0FBRyxFQUNILFlBQVksRUFDWixPQUFPLEVBQ1IsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBR0wsb0JBQW9CLEVBR3BCLHNCQUFzQixFQUN0Qix5QkFBeUIsRUFDMUIsTUFBTSwyQkFBMkIsQ0FBQzs7Ozs7O0FBS25DLE1BQU0sT0FBTyx1QkFBdUI7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LGFBQWEsRUFBRSxvQkFBb0IsRUFBRSxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ2xGLENBQUM7SUFFTyxlQUFlLENBQUMsU0FBaUQsRUFBRSxPQUFRO1FBQ2pGLElBQ0UsQ0FBQyxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUNsRSxJQUFJLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxFQUM1QjtZQUNBLE9BQU8sRUFBRSxDQUFDO1NBQ1g7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7O29IQTVpQlUsdUJBQXVCO3dIQUF2Qix1QkFBdUIsY0FGdEIsTUFBTTsyRkFFUCx1QkFBdUI7a0JBSG5DLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGVTbmFwc2hvdCwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IElNYW5hZ2VkT2JqZWN0LCBJbnZlbnRvcnlTZXJ2aWNlLCBJUmVzdWx0TGlzdCB9IGZyb20gJ0BjOHkvY2xpZW50JztcbmltcG9ydCB7XG4gIEFsZXJ0U2VydmljZSxcbiAgQ29udGV4dERhdGEsXG4gIER5bmFtaWNDb21wb25lbnRTZXJ2aWNlLFxuICBnZXRBY3RpdmF0ZWRSb3V0ZSxcbiAgZ2V0dGV4dCxcbiAgTW9kYWxTZXJ2aWNlLFxuICBOYXZpZ2F0b3JOb2RlLFxuICBOYXZpZ2F0b3JTZXJ2aWNlLFxuICBQZXJtaXNzaW9ucyxcbiAgU3RhdHVzLFxuICBUYWIsXG4gIFRhYnNTZXJ2aWNlLFxuICBWaWV3Q29udGV4dCxcbiAgV2lkZ2V0XG59IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMnO1xuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHtcbiAgYXNzaWduLFxuICBwaWNrLFxuICBzb21lLFxuICBrZXlzLFxuICBrZXlCeSxcbiAgaGFzLFxuICBnZXQsXG4gIGZvckVhY2gsXG4gIGNsb25lRGVlcCxcbiAgcmVkdWNlLFxuICBzZXRcbn0gZnJvbSAnbG9kYXNoLWVzJztcbmltcG9ydCB7IGNvbWJpbmVMYXRlc3QsIGZyb20sIE9ic2VydmFibGUsIG9mIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQge1xuICBjYXRjaEVycm9yLFxuICBmaWx0ZXIsXG4gIG1hcCxcbiAgbWVyZ2VBbGwsXG4gIG1lcmdlTWFwLFxuICB0YXAsXG4gIHRocm93SWZFbXB0eSxcbiAgdG9BcnJheVxufSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQge1xuICBDb250ZXh0RGFzaGJvYXJkLFxuICBDb250ZXh0RGFzaGJvYXJkTWFuYWdlZE9iamVjdCxcbiAgQ29udGV4dERhc2hib2FyZFR5cGUsXG4gIERhc2hib2FyZENvbnRleHQsXG4gIERhc2hib2FyZENvcHlDbGlwYm9hcmQsXG4gIFNUWUxJTkdfQ0xBU1NfUFJFRklYRVMsXG4gIEFMTF9HTE9CQUxfUk9MRVNfU0VMRUNURURcbn0gZnJvbSAnLi9jb250ZXh0LWRhc2hib2FyZC5tb2RlbCc7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIENvbnRleHREYXNoYm9hcmRTZXJ2aWNlIHtcbiAgcmVhZG9ubHkgUkVQT1JUX1BBUlRJQUxfTkFNRSA9ICdyZXBvcnRfJztcbiAgY29weUNsaXBib2FyZDogRGFzaGJvYXJkQ29weUNsaXBib2FyZDtcbiAgcHJpdmF0ZSByZWFkb25seSBJTlZFTlRPUllfUk9MRVMgPSBbJ1JPTEVfSU5WRU5UT1JZX0FETUlOJ107XG4gIHByaXZhdGUgY2FjaGUgPSBuZXcgTWFwPHN0cmluZywgQ29udGV4dERhc2hib2FyZE1hbmFnZWRPYmplY3Q+KCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgREVGQVVMVF9QQUdFU0laRSA9IDEwMDA7XG4gIHByaXZhdGUgcmVhZG9ubHkgRlJBR01FTlRfTkFNRSA9ICdjOHlfRGFzaGJvYXJkJztcbiAgcHJpdmF0ZSByZWFkb25seSBEQVNIQk9BUkRfUk9VVEVfUEFUSCA9ICdkYXNoYm9hcmQnO1xuICBwcml2YXRlIHJlYWRvbmx5IElOREVYX1NQTElUID0gJyEnO1xuICBwcml2YXRlIF9mb3JtRGlzYWJsZWQgPSB0cnVlO1xuXG4gIGdldCBmb3JtRGlzYWJsZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2Zvcm1EaXNhYmxlZDtcbiAgfVxuXG4gIHNldCBmb3JtRGlzYWJsZWQodmFsdWUpIHtcbiAgICB0aGlzLl9mb3JtRGlzYWJsZWQgPSB2YWx1ZTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgaW52ZW50b3J5OiBJbnZlbnRvcnlTZXJ2aWNlLFxuICAgIHByaXZhdGUgdGFiczogVGFic1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBtb2RhbDogTW9kYWxTZXJ2aWNlLFxuICAgIHByaXZhdGUgdHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxuICAgIHByaXZhdGUgbmF2aWdhdG9yOiBOYXZpZ2F0b3JTZXJ2aWNlLFxuICAgIHByaXZhdGUgcGVybWlzc2lvbnM6IFBlcm1pc3Npb25zLFxuICAgIHByaXZhdGUgYWxlcnQ6IEFsZXJ0U2VydmljZSxcbiAgICBwcml2YXRlIGR5bmFtaWNDb21wb25lbnQ6IER5bmFtaWNDb21wb25lbnRTZXJ2aWNlXG4gICkge31cblxuICBhc3luYyBjcmVhdGUoZGFzaGJvYXJkQ2ZnOiBDb250ZXh0RGFzaGJvYXJkLCBjb250ZXh0PzogQ29udGV4dERhdGEsIG5hbWUgPSAnJykge1xuICAgIGxldCBpZCA9ICcnO1xuICAgIGxldCBkYXNoYm9hcmRUeXBlO1xuXG4gICAgaWYgKGNvbnRleHQpIHtcbiAgICAgIGlkID0gY29udGV4dC5jb250ZXh0RGF0YS5pZCBhcyBzdHJpbmc7XG4gICAgICBkYXNoYm9hcmRUeXBlID0gdGhpcy5nZXREYXNoYm9hcmRUeXBlRnJvbVZpZXdDb250ZXh0KGRhc2hib2FyZENmZywgY29udGV4dCk7XG4gICAgfVxuICAgIGlmIChuYW1lKSB7XG4gICAgICBkYXNoYm9hcmRUeXBlID0gQ29udGV4dERhc2hib2FyZFR5cGUuTmFtZWQ7XG4gICAgfVxuXG4gICAgY29uc3QgZGFzaGJvYXJkOiBQYXJ0aWFsPElNYW5hZ2VkT2JqZWN0PiA9IHt9O1xuICAgIGFzc2lnbihkYXNoYm9hcmQsIHsgYzh5X0Rhc2hib2FyZDogZGFzaGJvYXJkQ2ZnIH0pO1xuXG4gICAgY29uc3QgdmFsdWUgPVxuICAgICAgZGFzaGJvYXJkVHlwZSA9PT0gQ29udGV4dERhc2hib2FyZFR5cGUuRGV2aWNlVHlwZSA/IGRhc2hib2FyZENmZy5kZXZpY2VUeXBlVmFsdWUgOiBuYW1lIHx8IGlkO1xuXG4gICAgY29uc3QgZnJhZ21lbnRLZXkgPSB0aGlzLmNyZWF0ZUZyYWdtZW50S2V5KGRhc2hib2FyZFR5cGUsIHZhbHVlKTtcbiAgICBkYXNoYm9hcmRbZnJhZ21lbnRLZXldID0ge307XG5cbiAgICBpZiAodGhpcy5zaG91bGRTZXRHbG9iYWwoZGFzaGJvYXJkLCBjb250ZXh0KSkge1xuICAgICAgYXNzaWduKGRhc2hib2FyZCwgeyBjOHlfR2xvYmFsOiB7fSB9KTtcbiAgICB9XG4gICAgZGFzaGJvYXJkLm5hbWUgPSBkYXNoYm9hcmQuYzh5X0Rhc2hib2FyZC5uYW1lO1xuICAgIGNvbnN0IHsgZGF0YSB9ID1cbiAgICAgIGRhc2hib2FyZFR5cGUgPT09IENvbnRleHREYXNoYm9hcmRUeXBlLkdyb3VwIHx8XG4gICAgICBkYXNoYm9hcmRUeXBlID09PSBDb250ZXh0RGFzaGJvYXJkVHlwZS5EZXZpY2UgfHxcbiAgICAgIChjb250ZXh0ICYmIGRhc2hib2FyZFR5cGUgPT09IENvbnRleHREYXNoYm9hcmRUeXBlLk5hbWVkKVxuICAgICAgICA/IGF3YWl0IHRoaXMuaW52ZW50b3J5LmNoaWxkQWRkaXRpb25zQ3JlYXRlKGRhc2hib2FyZCwgaWQpXG4gICAgICAgIDogYXdhaXQgdGhpcy5pbnZlbnRvcnkuY3JlYXRlKGRhc2hib2FyZCk7XG4gICAgcmV0dXJuIGRhdGEgYXMgQ29udGV4dERhc2hib2FyZE1hbmFnZWRPYmplY3Q7XG4gIH1cblxuICBhc3luYyBkZXRhaWwoZGFzaGJvYXJkTU86IENvbnRleHREYXNoYm9hcmRNYW5hZ2VkT2JqZWN0KSB7XG4gICAgY29uc3QgeyBkYXRhIH0gPSBhd2FpdCB0aGlzLmludmVudG9yeS5kZXRhaWwoZGFzaGJvYXJkTU8pO1xuICAgIHRoaXMuY2FjaGUuc2V0KGRhc2hib2FyZE1PLmlkLCBkYXRhKTtcbiAgICByZXR1cm4gZGF0YTtcbiAgfVxuXG4gIGFzeW5jIHVwZGF0ZShkYXNoYm9hcmQ6IENvbnRleHREYXNoYm9hcmRNYW5hZ2VkT2JqZWN0KSB7XG4gICAgZGFzaGJvYXJkLm5hbWUgPSBkYXNoYm9hcmQuYzh5X0Rhc2hib2FyZC5uYW1lO1xuICAgIGNvbnN0IGtlZXBGcmFnbWVudHMgPSB0aGlzLmNsZWFuKHBpY2soZGFzaGJvYXJkLCBbdGhpcy5GUkFHTUVOVF9OQU1FLCAnaWQnLCAnbmFtZSddKSk7XG4gICAga2VlcEZyYWdtZW50cy5jOHlfR2xvYmFsID0gdGhpcy5zaG91bGRTZXRHbG9iYWwoZGFzaGJvYXJkKTtcbiAgICBhd2FpdCB0aGlzLnNlcmlhbGl6ZVdpZGdldENvbmZpZ3Moa2VlcEZyYWdtZW50cyk7XG4gICAgY29uc3QgeyBkYXRhIH0gPSBhd2FpdCB0aGlzLmludmVudG9yeS51cGRhdGUoa2VlcEZyYWdtZW50cyk7XG4gICAgdGhpcy5jYWNoZS5zZXQoZGFzaGJvYXJkLmlkLCBkYXRhKTtcbiAgICByZXR1cm4gZGF0YTtcbiAgfVxuXG4gIGFzeW5jIGRlbGV0ZShkYXNoYm9hcmQ6IENvbnRleHREYXNoYm9hcmRNYW5hZ2VkT2JqZWN0LCB3aXRoQ29uZmlybWF0aW9uOiBib29sZWFuID0gdHJ1ZSkge1xuICAgIHRyeSB7XG4gICAgICBpZiAod2l0aENvbmZpcm1hdGlvbikge1xuICAgICAgICBsZXQgbXNnID0gZ2V0dGV4dChcbiAgICAgICAgICBgWW91IGFyZSBhYm91dCB0byBkZWxldGUgdGhlIGRhc2hib2FyZCBcInt7IGRhc2hib2FyZE5hbWUgfX1cIi4gRG8geW91IHdhbnQgdG8gcHJvY2VlZD9gXG4gICAgICAgICk7XG4gICAgICAgIGlmICh0aGlzLmlzRGV2aWNlVHlwZShkYXNoYm9hcmQpKSB7XG4gICAgICAgICAgbXNnID0gZ2V0dGV4dChcbiAgICAgICAgICAgIGBZb3UgYXJlIGFib3V0IHRvIGRlbGV0ZSB0aGUgZGFzaGJvYXJkIFwie3sgZGFzaGJvYXJkTmFtZSB9fVwiIGZyb20gYWxsIGRldmljZXMgb2YgdGhlIHR5cGUgXCJ7eyBkZXZpY2VUeXBlIH19XCIuXG4gICAgICAgICAgIERvIHlvdSB3YW50IHRvIHByb2NlZWQ/YFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgYXdhaXQgdGhpcy5tb2RhbC5jb25maXJtKFxuICAgICAgICAgIGdldHRleHQoJ0RlbGV0ZSBkYXNoYm9hcmQnKSxcbiAgICAgICAgICB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChtc2csIHtcbiAgICAgICAgICAgIGRhc2hib2FyZE5hbWU6IGRhc2hib2FyZC5jOHlfRGFzaGJvYXJkLm5hbWUsXG4gICAgICAgICAgICBkZXZpY2VUeXBlOiBkYXNoYm9hcmQuYzh5X0Rhc2hib2FyZC5kZXZpY2VUeXBlVmFsdWVcbiAgICAgICAgICB9KSxcbiAgICAgICAgICBTdGF0dXMuREFOR0VSLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIG9rOiBnZXR0ZXh0KCdEZWxldGUnKSxcbiAgICAgICAgICAgIGNhbmNlbDogZ2V0dGV4dCgnQ2FuY2VsJylcbiAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBhd2FpdCB0aGlzLmludmVudG9yeS5kZWxldGUoZGFzaGJvYXJkKTtcbiAgICAgIGNvbnN0IHRhYlRvUmVtb3ZlID0gQXJyYXkuZnJvbSh0aGlzLnRhYnMuc3RhdGUpLmZpbmQodGFiID0+XG4gICAgICAgIHRhYi5wYXRoLmVuZHNXaXRoKGAke3RoaXMuREFTSEJPQVJEX1JPVVRFX1BBVEh9LyR7ZGFzaGJvYXJkLmlkfWApXG4gICAgICApO1xuICAgICAgdGhpcy50YWJzLnJlbW92ZSh0YWJUb1JlbW92ZSk7XG4gICAgICB0aGlzLnRhYnMucmVmcmVzaCgpO1xuICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICAvLyBpbnRlbmRlZCBlbXB0eVxuICAgIH1cbiAgfVxuXG4gIGFjdGl2YXRlRGFzaGJvYXJkcyhcbiAgICByb3V0ZTogQWN0aXZhdGVkUm91dGVTbmFwc2hvdCxcbiAgICB0eXBlczogQ29udGV4dERhc2hib2FyZFR5cGVbXVxuICApOiBPYnNlcnZhYmxlPGJvb2xlYW4gfCBUYWJbXT4ge1xuICAgIGNvbnN0IHsgZGFzaGJvYXJkSWQgfSA9IHJvdXRlLnBhcmFtcztcbiAgICBpZiAoZGFzaGJvYXJkSWQpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldERhc2hib2FyZCQoZGFzaGJvYXJkSWQsIHR5cGVzLCByb3V0ZS5wYXJlbnQuZGF0YS5jb250ZXh0RGF0YSkucGlwZShcbiAgICAgICAgdGFwKGRhc2hib2FyZCA9PiB7XG4gICAgICAgICAgcm91dGUuZGF0YSA9IHsgZGFzaGJvYXJkIH07XG4gICAgICAgIH0pLFxuICAgICAgICBtYXAoKCkgPT4gdHJ1ZSksXG4gICAgICAgIGNhdGNoRXJyb3IoKCkgPT4ge1xuICAgICAgICAgIHJldHVybiBvZihmYWxzZSk7XG4gICAgICAgIH0pXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmdldFRhYnMkKHJvdXRlLmRhdGEuY29udGV4dERhdGEsIHR5cGVzKTtcbiAgfVxuXG4gIGdldE5hbWVkRGFzaGJvYXJkT3JDcmVhdGUobmFtZTogc3RyaW5nLCBkZWZhdWx0V2lkZ2V0czogV2lkZ2V0W10sIGNvbnRleHQ/OiBDb250ZXh0RGF0YSkge1xuICAgIGNvbnN0IGNoaWxkcmVuID0gdGhpcy5tYXBXaWRnZXRzKGRlZmF1bHRXaWRnZXRzKTtcbiAgICByZXR1cm4gdGhpcy5nZXREYXNoYm9hcmQkKG5hbWUsIFtDb250ZXh0RGFzaGJvYXJkVHlwZS5OYW1lZF0pLnBpcGUoXG4gICAgICB0aHJvd0lmRW1wdHkoKSxcbiAgICAgIGNhdGNoRXJyb3IoKCkgPT5cbiAgICAgICAgZnJvbShcbiAgICAgICAgICB0aGlzLmNyZWF0ZShcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgY2hpbGRyZW4sXG4gICAgICAgICAgICAgIHdpZGdldENsYXNzZXM6IHsgJ2Rhc2hib2FyZC10aGVtZS1saWdodCc6IHRydWUsICdwYW5lbC10aXRsZS1yZWd1bGFyJzogdHJ1ZSB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29udGV4dCxcbiAgICAgICAgICAgIG5hbWVcbiAgICAgICAgICApXG4gICAgICAgIClcbiAgICAgIClcbiAgICApO1xuICB9XG5cbiAgYXN5bmMgcmVmcmVzaFRhYnMoZGFzaGJvYXJkTU86IENvbnRleHREYXNoYm9hcmRNYW5hZ2VkT2JqZWN0KSB7XG4gICAgaWYgKCF0aGlzLmlzTmFtZWQoZGFzaGJvYXJkTU8pKSB7XG4gICAgICBjb25zdCB0YWJUb1VwZGF0ZSA9IEFycmF5LmZyb20odGhpcy50YWJzLnN0YXRlKS5maW5kKHRhYiA9PlxuICAgICAgICB0YWIucGF0aC5lbmRzV2l0aChgJHt0aGlzLkRBU0hCT0FSRF9ST1VURV9QQVRIfS8ke2Rhc2hib2FyZE1PLmlkfWApXG4gICAgICApO1xuXG4gICAgICBjb25zdCBkYXRhID0gYXdhaXQgdGhpcy5kZXRhaWwoZGFzaGJvYXJkTU8pO1xuICAgICAgaWYgKHRhYlRvVXBkYXRlKSB7XG4gICAgICAgIGNvbnN0IHsgaWNvbiwgcHJpb3JpdHksIG5hbWUgfSA9IGRhdGEuYzh5X0Rhc2hib2FyZDtcbiAgICAgICAgdGFiVG9VcGRhdGUuaWNvbiA9IGljb247XG4gICAgICAgIHRhYlRvVXBkYXRlLnByaW9yaXR5ID0gcHJpb3JpdHk7XG4gICAgICAgIHRhYlRvVXBkYXRlLmxhYmVsID0gbmFtZTtcbiAgICAgIH1cbiAgICAgIHRoaXMudGFicy5yZWZyZXNoKCk7XG4gICAgfVxuICB9XG5cbiAgdXBkYXRlTmF2aWdhdG9ySXRlbShtbzogSU1hbmFnZWRPYmplY3QpIHtcbiAgICB0aGlzLm5hdmlnYXRvci5zdGF0ZS5mb3JFYWNoKG5vZGUgPT4ge1xuICAgICAgaWYgKG5vZGUucGF0aCA9PT0gYHJlcG9ydHMvJHttby5pZH1gKSB7XG4gICAgICAgIHRoaXMubmF2aWdhdG9yLnJlbW92ZShub2RlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBpZiAobW8uYzh5X0lzTmF2aWdhdG9yTm9kZSkge1xuICAgICAgY29uc3Qgbm9kZVRvQWRkID0gbmV3IE5hdmlnYXRvck5vZGUoe1xuICAgICAgICBsYWJlbDogbW8ubmFtZSxcbiAgICAgICAgcGF0aDogYHJlcG9ydHMvJHttby5pZH1gLFxuICAgICAgICBpY29uOiBtby5pY29uLFxuICAgICAgICBwcmlvcml0eTogbW8ucHJpb3JpdHlcbiAgICAgIH0pO1xuICAgICAgdGhpcy5uYXZpZ2F0b3IuYWRkKG5vZGVUb0FkZCk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgbmF2aWdhdGVUb0Rhc2hib2FyZChkYXNoYm9hcmRNTzogQ29udGV4dERhc2hib2FyZE1hbmFnZWRPYmplY3QpIHtcbiAgICBpZiAoL2Rhc2hib2FyZC8udGVzdCh0aGlzLnJvdXRlci51cmwpKSB7XG4gICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy4uJywgZGFzaGJvYXJkTU8uaWRdLCB7XG4gICAgICAgIHJlbGF0aXZlVG86IGdldEFjdGl2YXRlZFJvdXRlKHRoaXMucm91dGVyKVxuICAgICAgfSk7XG4gICAgfSBlbHNlIGlmICgvXlxcLyhkZXZpY2V8Z3JvdXApXFwvWzAtOV0rJC8udGVzdCh0aGlzLnJvdXRlci51cmwpKSB7XG4gICAgICAvLyBpbiBjYXNlIHRoZSBhZGQgZGFzaGJvYXJkIGJ1dHRvbiBpcyB0aGUgb25seSB0YWIgb24gdGhhdCByb3V0ZVxuICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycuJywgdGhpcy5EQVNIQk9BUkRfUk9VVEVfUEFUSCwgZGFzaGJvYXJkTU8uaWRdLCB7XG4gICAgICAgIHJlbGF0aXZlVG86IGdldEFjdGl2YXRlZFJvdXRlKHRoaXMucm91dGVyKVxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnLi4nLCB0aGlzLkRBU0hCT0FSRF9ST1VURV9QQVRILCBkYXNoYm9hcmRNTy5pZF0sIHtcbiAgICAgICAgcmVsYXRpdmVUbzogZ2V0QWN0aXZhdGVkUm91dGUodGhpcy5yb3V0ZXIpXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBjYW5FZGl0RGFzaGJvYXJkKG1vKSB7XG4gICAgcmV0dXJuIHRoaXMucGVybWlzc2lvbnMuY2FuRWRpdChbJ1JPTEVfSU5WRU5UT1JZX0FETUlOJywgJ1JPTEVfSU5WRU5UT1JZX0NSRUFURSddLCBtbyk7XG4gIH1cblxuICBpc05hbWVkKGRhc2hib2FyZDogUGFydGlhbDxDb250ZXh0RGFzaGJvYXJkTWFuYWdlZE9iamVjdD4pIHtcbiAgICByZXR1cm4gc29tZShrZXlzKGRhc2hib2FyZCksIHByb3AgPT5cbiAgICAgIG5ldyBSZWdFeHAoXG4gICAgICAgIGBeJHt0aGlzLkZSQUdNRU5UX05BTUV9JHt0aGlzLklOREVYX1NQTElUfSR7Q29udGV4dERhc2hib2FyZFR5cGUuTmFtZWR9JHt0aGlzLklOREVYX1NQTElUfWBcbiAgICAgICkudGVzdChwcm9wKVxuICAgICk7XG4gIH1cblxuICBpc1JlcG9ydChkYXNoYm9hcmQ6IFBhcnRpYWw8Q29udGV4dERhc2hib2FyZE1hbmFnZWRPYmplY3Q+KSB7XG4gICAgcmV0dXJuIHNvbWUoa2V5cyhkYXNoYm9hcmQpLCBwcm9wID0+XG4gICAgICBuZXcgUmVnRXhwKFxuICAgICAgICBgXiR7dGhpcy5GUkFHTUVOVF9OQU1FfSR7dGhpcy5JTkRFWF9TUExJVH0ke0NvbnRleHREYXNoYm9hcmRUeXBlLk5hbWVkfSR7dGhpcy5JTkRFWF9TUExJVH0ke3RoaXMuUkVQT1JUX1BBUlRJQUxfTkFNRX1gXG4gICAgICApLnRlc3QocHJvcClcbiAgICApO1xuICB9XG5cbiAgaXNEZXZpY2VUeXBlKGRhc2hib2FyZDogUGFydGlhbDxDb250ZXh0RGFzaGJvYXJkTWFuYWdlZE9iamVjdD4pIHtcbiAgICByZXR1cm4gc29tZShrZXlzKGRhc2hib2FyZCksIHByb3AgPT5cbiAgICAgIG5ldyBSZWdFeHAoXG4gICAgICAgIGBeJHt0aGlzLkZSQUdNRU5UX05BTUV9JHt0aGlzLklOREVYX1NQTElUfSR7Q29udGV4dERhc2hib2FyZFR5cGUuRGV2aWNlVHlwZX0ke3RoaXMuSU5ERVhfU1BMSVR9YFxuICAgICAgKS50ZXN0KHByb3ApXG4gICAgKTtcbiAgfVxuXG4gIGlzRGV2aWNlRGFzaGJvYXJkKGRhc2hib2FyZDogUGFydGlhbDxDb250ZXh0RGFzaGJvYXJkTWFuYWdlZE9iamVjdD4pOiBib29sZWFuIHtcbiAgICByZXR1cm4gc29tZShrZXlzKGRhc2hib2FyZCksIHByb3AgPT5cbiAgICAgIG5ldyBSZWdFeHAoXG4gICAgICAgIGBeJHt0aGlzLkZSQUdNRU5UX05BTUV9JHt0aGlzLklOREVYX1NQTElUfSR7Q29udGV4dERhc2hib2FyZFR5cGUuRGV2aWNlfSR7dGhpcy5JTkRFWF9TUExJVH1gXG4gICAgICApLnRlc3QocHJvcClcbiAgICApO1xuICB9XG5cbiAgaXNHcm91cERhc2hib2FyZChkYXNoYm9hcmQ6IFBhcnRpYWw8Q29udGV4dERhc2hib2FyZE1hbmFnZWRPYmplY3Q+KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHNvbWUoa2V5cyhkYXNoYm9hcmQpLCBwcm9wID0+XG4gICAgICBuZXcgUmVnRXhwKFxuICAgICAgICBgXiR7dGhpcy5GUkFHTUVOVF9OQU1FfSR7dGhpcy5JTkRFWF9TUExJVH0ke0NvbnRleHREYXNoYm9hcmRUeXBlLkdyb3VwfSR7dGhpcy5JTkRFWF9TUExJVH1gXG4gICAgICApLnRlc3QocHJvcClcbiAgICApO1xuICB9XG5cbiAgZ2V0RmlsdGVyZWREYXNoYm9hcmRTdHlsZXMoc3R5bGVMaXN0OiBzdHJpbmdbXSkge1xuICAgIHJldHVybiBzdHlsZUxpc3QuZmlsdGVyKGMgPT5cbiAgICAgIFNUWUxJTkdfQ0xBU1NfUFJFRklYRVMuc29tZShjbGFzc1ByZWZpeCA9PiBjLnN0YXJ0c1dpdGgoY2xhc3NQcmVmaXgpKVxuICAgICk7XG4gIH1cblxuICBnZXRTdHlsaW5nKHN0eWxlTGlzdCwgc3R5bGVOYW1lLCBkZWZhdWx0VmFsdWUpIHtcbiAgICBjb25zdCBzdHlsaW5nID0gc3R5bGVMaXN0LmZpbmQoXG4gICAgICBzdHlsZSA9PiBzdHlsZSAmJiBuZXcgUmVnRXhwKGAtJHtzdHlsZU5hbWV9JGAsICdpJykudGVzdChzdHlsZS5jbGFzcylcbiAgICApO1xuICAgIHJldHVybiBzdHlsaW5nID8gc3R5bGluZy5jbGFzcyA6IGRlZmF1bHRWYWx1ZTtcbiAgfVxuXG4gIG1hcFdpZGdldHMod2lkZ2V0czogV2lkZ2V0W10pIHtcbiAgICByZXR1cm4ga2V5QnkoXG4gICAgICB3aWRnZXRzLm1hcCh3aWRnZXQgPT4ge1xuICAgICAgICB3aWRnZXQuaWQgPSBTdHJpbmcoTWF0aC5yYW5kb20oKSkuc3Vic3RyKDIpO1xuICAgICAgICByZXR1cm4gd2lkZ2V0O1xuICAgICAgfSksXG4gICAgICAnaWQnXG4gICAgKTtcbiAgfVxuXG4gIGdldERhc2hib2FyZCQoZGFzaGJvYXJkSWRPck5hbWUsIGRhc2hib2FyZFR5cGU6IENvbnRleHREYXNoYm9hcmRUeXBlW10sIG1vPzogSU1hbmFnZWRPYmplY3QpIHtcbiAgICBjb25zdCBjYWNoZSA9IHRoaXMuY2FjaGUuZ2V0KGRhc2hib2FyZElkT3JOYW1lKTtcblxuICAgIGNvbnN0IGRhc2hib2FyZHMgPSBtb1xuICAgICAgPyB0aGlzLmdldENvbnRleHREYXNoYm9hcmRzKG1vLCBkYXNoYm9hcmRUeXBlKVxuICAgICAgOiBbdGhpcy5nZXROYW1lZERhc2hib2FyZChkYXNoYm9hcmRJZE9yTmFtZSldO1xuXG4gICAgY29uc3QgY2FjaGVSZWZyZXNoID0gdGhpcy5nZXRDb250ZXh0RGFzaGJvYXJkcyQoZGFzaGJvYXJkcykucGlwZShcbiAgICAgIHRhcChkYXNoYm9hcmQgPT4gdGhpcy5jYWNoZURhc2hib2FyZChkYXNoYm9hcmQpKSxcbiAgICAgIGZpbHRlcihcbiAgICAgICAgZGFzaGJvYXJkID0+XG4gICAgICAgICAgZGFzaGJvYXJkLmlkID09PSBkYXNoYm9hcmRJZE9yTmFtZSB8fFxuICAgICAgICAgIGhhcyhcbiAgICAgICAgICAgIGRhc2hib2FyZCxcbiAgICAgICAgICAgIGAke3RoaXMuRlJBR01FTlRfTkFNRX0ke3RoaXMuSU5ERVhfU1BMSVR9JHtDb250ZXh0RGFzaGJvYXJkVHlwZS5OYW1lZH0ke3RoaXMuSU5ERVhfU1BMSVR9JHtkYXNoYm9hcmRJZE9yTmFtZX1gXG4gICAgICAgICAgKVxuICAgICAgKVxuICAgICk7XG4gICAgcmV0dXJuIGNhY2hlID8gb2YoY2FjaGUpIDogY2FjaGVSZWZyZXNoO1xuICB9XG5cbiAgYXN5bmMgcGFzdGVEYXNoYm9hcmQobmV3Q29udGV4dDogRGFzaGJvYXJkQ29udGV4dCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLmNvcHlDbGlwYm9hcmQpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGlmICh0aGlzLmNhblBhc3RlRGFzaGJvYXJkKHRoaXMuY29weUNsaXBib2FyZCwgbmV3Q29udGV4dC5jb250ZXh0KSkge1xuICAgICAgICAgIGNvbnN0IGRhc2hib2FyZFRvUGFzdGUgPSB0aGlzLmNyZWF0ZUNvbnRleHREYXNoYm9hcmRDb3B5KFxuICAgICAgICAgICAgdGhpcy5jb3B5Q2xpcGJvYXJkLmRhc2hib2FyZCxcbiAgICAgICAgICAgIG5ld0NvbnRleHQuY29udGV4dERhdGEsXG4gICAgICAgICAgICB0aGlzLmNvcHlDbGlwYm9hcmQuY29udGV4dC5jb250ZXh0RGF0YVxuICAgICAgICAgICk7XG4gICAgICAgICAgY29uc3QgZGFzaGJvYXJkID0gYXdhaXQgdGhpcy5jcmVhdGUodGhpcy5jbGVhbihkYXNoYm9hcmRUb1Bhc3RlKSwgbmV3Q29udGV4dCk7XG4gICAgICAgICAgdGhpcy5jb3B5Q2xpcGJvYXJkID0gdW5kZWZpbmVkO1xuICAgICAgICAgIHRoaXMubmF2aWdhdGVUb0Rhc2hib2FyZChkYXNoYm9hcmQpO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgdGhpcy5hbGVydC53YXJuaW5nKGdldHRleHQoJ0luc3VmZmljaWVudCBwZXJtaXNzaW9ucyBmb3IgdGhpcyBhY3Rpb24uJykpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgc2VyaWFsaXplV2lkZ2V0Q29uZmlncyhkYXNoYm9hcmQ6IENvbnRleHREYXNoYm9hcmRNYW5hZ2VkT2JqZWN0KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgY2hpbGRyZW4gPSBjbG9uZURlZXAoZGFzaGJvYXJkLmM4eV9EYXNoYm9hcmQuY2hpbGRyZW4pO1xuICAgIGlmICghY2hpbGRyZW4pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgY29uZmlncyA9IE9iamVjdC52YWx1ZXMoY2hpbGRyZW4pO1xuICAgIGNvbnN0IGRldGFpbHMgPSBjb25maWdzLm1hcCgoeyBjb21wb25lbnRJZCwgY29uZmlnIH0pID0+ICh7IGNvbXBvbmVudElkLCBjb25maWcgfSkpO1xuICAgIGNvbnN0IHJlc3VsdHMgPSBhd2FpdCB0aGlzLmR5bmFtaWNDb21wb25lbnQuc2VyaWFsaXplQ29uZmlncyhkZXRhaWxzKTtcbiAgICByZXN1bHRzLmZvckVhY2goKHJlc3VsdCwgaW5kZXgpID0+IHtcbiAgICAgIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgICAgIHNldChkZXRhaWxzW2luZGV4XS5jb25maWcsIGtleSwgdmFsdWUpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gICAgZGFzaGJvYXJkLmM4eV9EYXNoYm9hcmQuY2hpbGRyZW4gPSBjaGlsZHJlbjtcbiAgfVxuXG4gIHByaXZhdGUgY2FuUGFzdGVEYXNoYm9hcmQoXG4gICAgY29weUNsaXBib2FyZDogRGFzaGJvYXJkQ29weUNsaXBib2FyZCxcbiAgICBjdXJyZW50Q29udGV4dDogVmlld0NvbnRleHRcbiAgKTogYm9vbGVhbiB7XG4gICAgY29uc3QgY2xpcGJvYXJkVmlld0NvbnRleHQgPSBjb3B5Q2xpcGJvYXJkLmNvbnRleHQuY29udGV4dDtcblxuICAgIGlmIChjdXJyZW50Q29udGV4dCAhPT0gY2xpcGJvYXJkVmlld0NvbnRleHQpIHtcbiAgICAgIGlmIChjbGlwYm9hcmRWaWV3Q29udGV4dCA9PT0gVmlld0NvbnRleHQuRGV2aWNlKSB7XG4gICAgICAgIHRoaXMuYWxlcnQud2FybmluZyhnZXR0ZXh0KCdEZXZpY2UgZGFzaGJvYXJkcyBjYW4gb25seSBiZSBjb3BpZWQgaW50byBhIGRldmljZS4nKSk7XG4gICAgICB9IGVsc2UgaWYgKGNsaXBib2FyZFZpZXdDb250ZXh0ID09PSBWaWV3Q29udGV4dC5Hcm91cCkge1xuICAgICAgICB0aGlzLmFsZXJ0Lndhcm5pbmcoZ2V0dGV4dCgnR3JvdXAgZGFzaGJvYXJkcyBjYW4gb25seSBiZSBjb3BpZWQgaW50byBhIGdyb3VwLicpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZUNvbnRleHREYXNoYm9hcmRDb3B5KFxuICAgIGRhc2g6IENvbnRleHREYXNoYm9hcmQsXG4gICAgbmV3Q29udGV4dDogUGFydGlhbDxJTWFuYWdlZE9iamVjdD4sXG4gICAgb2xkQ29udGV4dDogUGFydGlhbDxJTWFuYWdlZE9iamVjdD5cbiAgKTogQ29udGV4dERhc2hib2FyZCB7XG4gICAgY29uc3QgY2hpbGRyZW4gPSByZWR1Y2UoXG4gICAgICBkYXNoLmNoaWxkcmVuLFxuICAgICAgKF9jaGlsZHJlbiwgY2hpbGQpID0+IHtcbiAgICAgICAgY29uc3QgeyBpZCB9ID0gY2hpbGQ7XG4gICAgICAgIGNvbnN0IGNmZyA9IGNoaWxkLmNvbmZpZztcbiAgICAgICAgY29uc3QgcHJvcGVydGllc1RvQ29weSA9IHtcbiAgICAgICAgICBkZXZpY2U6IGRldmljZSA9PiB0aGlzLnJlcGxhY2VDb250ZXh0SW5PYmooZGV2aWNlLCBuZXdDb250ZXh0LCBvbGRDb250ZXh0KSxcbiAgICAgICAgICBkYXRhcG9pbnRzOiBkYXRhUG9pbnRzID0+XG4gICAgICAgICAgICB0aGlzLnJlcGxhY2VDb250ZXh0SW5EYXRhUG9pbnRzKGRhdGFQb2ludHMsIG5ld0NvbnRleHQsIG9sZENvbnRleHQpLFxuICAgICAgICAgIGRhdGFQb2ludHM6IGRhdGFQb2ludHMgPT5cbiAgICAgICAgICAgIHRoaXMucmVwbGFjZUNvbnRleHRJbkRhdGFQb2ludHMoZGF0YVBvaW50cywgbmV3Q29udGV4dCwgb2xkQ29udGV4dCksXG4gICAgICAgICAgZGF0YXBvaW50c0dhdWdlOiBkYXRhUG9pbnRzID0+XG4gICAgICAgICAgICB0aGlzLnJlcGxhY2VDb250ZXh0SW5EYXRhUG9pbnRzKGRhdGFQb2ludHMsIG5ld0NvbnRleHQsIG9sZENvbnRleHQpLFxuICAgICAgICAgIGRhdGFwb2ludHNMYWJlbHM6IGRhdGFQb2ludHMgPT5cbiAgICAgICAgICAgIHRoaXMucmVwbGFjZUNvbnRleHRJbkRhdGFQb2ludHMoZGF0YVBvaW50cywgbmV3Q29udGV4dCwgb2xkQ29udGV4dClcbiAgICAgICAgfTtcblxuICAgICAgICBpZiAoY2ZnKSB7XG4gICAgICAgICAgdGhpcy5jb3B5UHJvcGVydGllcyhjZmcsIHByb3BlcnRpZXNUb0NvcHkpO1xuICAgICAgICAgIGlmIChjZmcub3B0aW9ucykge1xuICAgICAgICAgICAgdGhpcy5jb3B5UHJvcGVydGllcyhjZmcub3B0aW9ucywgcHJvcGVydGllc1RvQ29weSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgX2NoaWxkcmVuW2lkXSA9IGNsb25lRGVlcChjaGlsZCk7XG4gICAgICAgIHJldHVybiBfY2hpbGRyZW47XG4gICAgICB9LFxuICAgICAge31cbiAgICApO1xuXG4gICAgZGFzaC5jaGlsZHJlbiA9IGNoaWxkcmVuO1xuICAgIHJldHVybiBkYXNoO1xuICB9XG5cbiAgcHJpdmF0ZSBjb3B5UHJvcGVydGllcyhvYmosIHByb3BlcnRpZXNUb0NvcHkpIHtcbiAgICBmb3JFYWNoKHByb3BlcnRpZXNUb0NvcHksIChjb3B5Rm4sIHByb3BlcnR5KSA9PiB7XG4gICAgICBpZiAob2JqW3Byb3BlcnR5XSkge1xuICAgICAgICBvYmpbcHJvcGVydHldID0gY29weUZuKG9ialtwcm9wZXJ0eV0pO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSByZXBsYWNlQ29udGV4dEluRGF0YVBvaW50cyhcbiAgICBkYXRhUG9pbnRzLFxuICAgIG5ld0NvbnRleHQ6IFBhcnRpYWw8SU1hbmFnZWRPYmplY3Q+LFxuICAgIG9sZENvbnRleHQ6IFBhcnRpYWw8SU1hbmFnZWRPYmplY3Q+XG4gICkge1xuICAgIGRhdGFQb2ludHMuZm9yRWFjaChkcCA9PiB7XG4gICAgICBkcC5fX3RhcmdldCA9IHRoaXMucmVwbGFjZUNvbnRleHRJbk9iaihkcC5fX3RhcmdldCwgbmV3Q29udGV4dCwgb2xkQ29udGV4dCk7XG4gICAgfSk7XG4gICAgcmV0dXJuIGRhdGFQb2ludHM7XG4gIH1cblxuICBwcml2YXRlIHJlcGxhY2VDb250ZXh0SW5PYmooXG4gICAgb2JqOiBQYXJ0aWFsPElNYW5hZ2VkT2JqZWN0PixcbiAgICBuZXdDb250ZXh0OiBQYXJ0aWFsPElNYW5hZ2VkT2JqZWN0PixcbiAgICBvbGRDb250ZXh0OiBQYXJ0aWFsPElNYW5hZ2VkT2JqZWN0PlxuICApIHtcbiAgICBpZiAob2JqICYmIG9iai5pZCA9PT0gb2xkQ29udGV4dC5pZCkge1xuICAgICAgT2JqZWN0LmFzc2lnbihvYmosIHBpY2sobmV3Q29udGV4dCwgWydpZCcsICduYW1lJ10pKTtcbiAgICB9XG4gICAgcmV0dXJuIG9iajtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0VGFicyQobW86IENvbnRleHREYXNoYm9hcmRNYW5hZ2VkT2JqZWN0LCBkYXNoYm9hcmRUeXBlOiBDb250ZXh0RGFzaGJvYXJkVHlwZVtdKSB7XG4gICAgY29uc3QgZGFzaGJvYXJkcyA9IHRoaXMuZ2V0Q29udGV4dERhc2hib2FyZHMobW8sIGRhc2hib2FyZFR5cGUpO1xuXG4gICAgcmV0dXJuIHRoaXMuZ2V0Q29udGV4dERhc2hib2FyZHMkKGRhc2hib2FyZHMpLnBpcGUoXG4gICAgICBtZXJnZU1hcChkYXNoYm9hcmQgPT4gdGhpcy52ZXJpZnlEYXNoYm9hcmRBdmFpbGFiaWxpdHkkKGRhc2hib2FyZCkpLFxuICAgICAgbWVyZ2VNYXAoKFtkYXNoYm9hcmRdKSA9PiB0aGlzLnJlbW92ZURhc2hib2FyZE1vUHJvcGVydHkoZGFzaGJvYXJkKSksXG4gICAgICB0YXAoZGFzaGJvYXJkID0+IHRoaXMuY2FjaGVEYXNoYm9hcmQoZGFzaGJvYXJkKSksXG4gICAgICBtYXAoZGFzaGJvYXJkID0+IHRoaXMuY3JlYXRlRGFzaGJvYXJkVGFiKGRhc2hib2FyZCkpLFxuICAgICAgdG9BcnJheSgpXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgdmVyaWZ5RGFzaGJvYXJkQXZhaWxhYmlsaXR5JChkYXNoYm9hcmQ6IENvbnRleHREYXNoYm9hcmRNYW5hZ2VkT2JqZWN0KSB7XG4gICAgY29uc3QgZ2xvYmFsUm9sZXNJZHMgPSBkYXNoYm9hcmQ/LmM4eV9EYXNoYm9hcmQ/Lmdsb2JhbFJvbGVzSWRzO1xuICAgIGNvbnN0IGNhbkVkaXQgPSBmcm9tKFxuICAgICAgdGhpcy5wZXJtaXNzaW9ucy5jYW5FZGl0KHRoaXMuSU5WRU5UT1JZX1JPTEVTLCBkYXNoYm9hcmQsIHsgc2tpcFJlcXVlc3RDaGVjazogdHJ1ZSB9KVxuICAgICk7XG4gICAgY29uc3QgaGFzQW55R2xvYmFsUm9sZSA9XG4gICAgICAhZ2xvYmFsUm9sZXNJZHMgfHwgZ2xvYmFsUm9sZXNJZHMgPT09IEFMTF9HTE9CQUxfUk9MRVNfU0VMRUNURURcbiAgICAgICAgPyBvZih0cnVlKVxuICAgICAgICA6IG9mKHRoaXMucGVybWlzc2lvbnMuaGFzQW55R2xvYmFsUm9sZShnbG9iYWxSb2xlc0lkcykpO1xuXG4gICAgcmV0dXJuIGNvbWJpbmVMYXRlc3QoW29mKGRhc2hib2FyZCksIGNhbkVkaXQsIGhhc0FueUdsb2JhbFJvbGVdKS5waXBlKFxuICAgICAgZmlsdGVyKChbLCBjYW5FZGl0LCBoYXNBbnlHbG9iYWxSb2xlXSkgPT4gY2FuRWRpdCB8fCBoYXNBbnlHbG9iYWxSb2xlKVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGdldENvbnRleHREYXNoYm9hcmRzJChyZXF1ZXN0czogQXJyYXk8UHJvbWlzZTxJUmVzdWx0TGlzdDxJTWFuYWdlZE9iamVjdD4+Pikge1xuICAgIHJldHVybiBmcm9tKHJlcXVlc3RzKS5waXBlKFxuICAgICAgbWVyZ2VBbGwoKSxcbiAgICAgIG1lcmdlTWFwKHJlc3BvbnNlID0+IHJlc3BvbnNlLmRhdGEgYXMgQ29udGV4dERhc2hib2FyZE1hbmFnZWRPYmplY3RbXSlcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIENsZWFucyBhbHJlYWR5IGNvcnJ1cHRlZCBkYXNoYm9hcmRzIGZyb20gZGFzaGJvYXJkTW8gcHJvcGVydHkuXG4gICAqIEFkZGVkIHRvIGZpeCBkYXNoYm9hcmRzIG9uIHRoZSBjbG91ZCBpbnN0YW5jZSAoZXUtbGF0ZXN0KS5cbiAgICogQGRlcHJlY2F0ZWQgVGhpcyBpcyBnb2luZyB0byBiZSByZW1vdmVkIGFmdGVyIDEwMDcuNy4wLlxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyByZW1vdmVEYXNoYm9hcmRNb1Byb3BlcnR5KFxuICAgIGRhc2hib2FyZDogQ29udGV4dERhc2hib2FyZE1hbmFnZWRPYmplY3RcbiAgKTogUHJvbWlzZTxDb250ZXh0RGFzaGJvYXJkTWFuYWdlZE9iamVjdD4ge1xuICAgIGNvbnN0IGRhc2hib2FyZENvcHkgPSBjbG9uZURlZXAoZGFzaGJvYXJkKTtcbiAgICBjb25zdCBjaGlsZHJlbiA9IGdldChkYXNoYm9hcmRDb3B5LCAnYzh5X0Rhc2hib2FyZC5jaGlsZHJlbicpO1xuICAgIGxldCB1cGRhdGVEYXNoYm9hcmQgPSBmYWxzZTtcblxuICAgIGZvckVhY2goY2hpbGRyZW4sIGNoaWxkID0+IHtcbiAgICAgIGlmIChnZXQoY2hpbGQsICdjb21wb25lbnRUcmFuc2Zvcm1Db25maWdXaXRoQ29udGV4dCcpKSB7XG4gICAgICAgIGRlbGV0ZSBjaGlsZC5jb21wb25lbnRUcmFuc2Zvcm1Db25maWdXaXRoQ29udGV4dDtcbiAgICAgICAgdXBkYXRlRGFzaGJvYXJkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGlmIChnZXQoY2hpbGQsICdjb25maWcuZGFzaGJvYXJkTW8nKSkge1xuICAgICAgICBkZWxldGUgY2hpbGQuY29uZmlnLmRhc2hib2FyZE1vO1xuICAgICAgICB1cGRhdGVEYXNoYm9hcmQgPSB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaWYgKHVwZGF0ZURhc2hib2FyZCkge1xuICAgICAgYXdhaXQgdGhpcy51cGRhdGUoZGFzaGJvYXJkQ29weSk7XG4gICAgfVxuICAgIHJldHVybiBkYXNoYm9hcmRDb3B5O1xuICB9XG5cbiAgcHJpdmF0ZSBjYWNoZURhc2hib2FyZChkYXNoYm9hcmQ6IENvbnRleHREYXNoYm9hcmRNYW5hZ2VkT2JqZWN0KSB7XG4gICAgdGhpcy5jYWNoZS5zZXQoZGFzaGJvYXJkLmlkLCBkYXNoYm9hcmQpO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVEYXNoYm9hcmRUYWIoZGFzaGJvYXJkOiBDb250ZXh0RGFzaGJvYXJkTWFuYWdlZE9iamVjdCkge1xuICAgIGNvbnN0IHsgYzh5X0Rhc2hib2FyZDogX2Rhc2hib2FyZCwgaWQgfSA9IGRhc2hib2FyZDtcbiAgICByZXR1cm4ge1xuICAgICAgaWNvbjogX2Rhc2hib2FyZC5pY29uLFxuICAgICAgcGF0aDogYCR7dGhpcy5EQVNIQk9BUkRfUk9VVEVfUEFUSH0vJHtpZH1gLFxuICAgICAgbGFiZWw6IF9kYXNoYm9hcmQubmFtZSxcbiAgICAgIHByaW9yaXR5OiBfZGFzaGJvYXJkLnByaW9yaXR5LFxuICAgICAgaGlkZTogdGhpcy5pc1JlcG9ydChkYXNoYm9hcmQpXG4gICAgfSBhcyBUYWI7XG4gIH1cblxuICBwcml2YXRlIGNsZWFuKGRhc2hib2FyZCkge1xuICAgIGNvbnN0IGpzb25TdHJpbmcgPSBKU09OLnN0cmluZ2lmeShkYXNoYm9hcmQsIChrZXksIHZhbHVlKSA9PiB7XG4gICAgICBpZiAoa2V5ID09PSAnJCRoYXNoS2V5JyB8fCBrZXkgPT09ICdrbGFzc2VzJykge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfSk7XG4gICAgcmV0dXJuIEpTT04ucGFyc2UoanNvblN0cmluZyk7XG4gIH1cblxuICBwcml2YXRlIGdldE5hbWVkRGFzaGJvYXJkKG5hbWU6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmludmVudG9yeS5saXN0KHtcbiAgICAgIGZyYWdtZW50VHlwZTogYCR7dGhpcy5GUkFHTUVOVF9OQU1FfSR7dGhpcy5JTkRFWF9TUExJVH0ke0NvbnRleHREYXNoYm9hcmRUeXBlLk5hbWVkfSR7dGhpcy5JTkRFWF9TUExJVH0ke25hbWV9YCxcbiAgICAgIHBhZ2VTaXplOiAxXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGdldENvbnRleHREYXNoYm9hcmRzKG1vOiBJTWFuYWdlZE9iamVjdCwgZGFzaGJvYXJkVHlwZTogQ29udGV4dERhc2hib2FyZFR5cGVbXSkge1xuICAgIHJldHVybiBkYXNoYm9hcmRUeXBlLm1hcCgodHlwZTogQ29udGV4dERhc2hib2FyZFR5cGUpID0+XG4gICAgICB0aGlzLmludmVudG9yeS5saXN0KHtcbiAgICAgICAgZnJhZ21lbnRUeXBlOiB0aGlzLmNyZWF0ZURhc2hib2FyZEZyYWdtZW50KG1vLCB0eXBlKSxcbiAgICAgICAgcGFnZVNpemU6IHRoaXMuREVGQVVMVF9QQUdFU0laRVxuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVEYXNoYm9hcmRGcmFnbWVudChtbzogSU1hbmFnZWRPYmplY3QsIHR5cGU6IENvbnRleHREYXNoYm9hcmRUeXBlKSB7XG4gICAgbGV0IHZhbHVlO1xuICAgIGlmIChtby5jOHlfUmVwb3J0KSB7XG4gICAgICB2YWx1ZSA9IGAke3RoaXMuUkVQT1JUX1BBUlRJQUxfTkFNRX0ke21vLmlkfWA7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhbHVlID0gdHlwZSA9PT0gQ29udGV4dERhc2hib2FyZFR5cGUuRGV2aWNlVHlwZSA/IG1vLnR5cGUgOiBtby5pZDtcbiAgICB9XG4gICAgcmV0dXJuIGAke3RoaXMuRlJBR01FTlRfTkFNRX0ke3RoaXMuSU5ERVhfU1BMSVR9JHt0eXBlfSR7dGhpcy5JTkRFWF9TUExJVH0ke3ZhbHVlfWA7XG4gIH1cblxuICBwcml2YXRlIGdldERhc2hib2FyZFR5cGVGcm9tVmlld0NvbnRleHQoZGFzaGJvYXJkQ2ZnLCBjb250ZXh0KSB7XG4gICAgbGV0IGRhc2hib2FyZFR5cGU7XG4gICAgaWYgKGNvbnRleHQuY29udGV4dCA9PT0gVmlld0NvbnRleHQuRGV2aWNlKSB7XG4gICAgICBkYXNoYm9hcmRUeXBlID0gZGFzaGJvYXJkQ2ZnLmRldmljZVR5cGVcbiAgICAgICAgPyBDb250ZXh0RGFzaGJvYXJkVHlwZS5EZXZpY2VUeXBlXG4gICAgICAgIDogQ29udGV4dERhc2hib2FyZFR5cGUuRGV2aWNlO1xuICAgIH1cbiAgICBpZiAoY29udGV4dC5jb250ZXh0ID09PSBWaWV3Q29udGV4dC5Hcm91cCkge1xuICAgICAgZGFzaGJvYXJkVHlwZSA9IENvbnRleHREYXNoYm9hcmRUeXBlLkdyb3VwO1xuICAgIH1cbiAgICByZXR1cm4gZGFzaGJvYXJkVHlwZTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlRnJhZ21lbnRLZXkoY29udGV4dERhc2hib2FyZFR5cGU6IENvbnRleHREYXNoYm9hcmRUeXBlLCB2YWx1ZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIFt0aGlzLkZSQUdNRU5UX05BTUUsIGNvbnRleHREYXNoYm9hcmRUeXBlLCB2YWx1ZV0uam9pbih0aGlzLklOREVYX1NQTElUKTtcbiAgfVxuXG4gIHByaXZhdGUgc2hvdWxkU2V0R2xvYmFsKGRhc2hib2FyZDogUGFydGlhbDxDb250ZXh0RGFzaGJvYXJkTWFuYWdlZE9iamVjdD4sIGNvbnRleHQ/KSB7XG4gICAgaWYgKFxuICAgICAgKCFjb250ZXh0ICYmIHRoaXMuaXNOYW1lZChkYXNoYm9hcmQpICYmICF0aGlzLmlzUmVwb3J0KGRhc2hib2FyZCkpIHx8XG4gICAgICB0aGlzLmlzRGV2aWNlVHlwZShkYXNoYm9hcmQpXG4gICAgKSB7XG4gICAgICByZXR1cm4ge307XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG59XG4iXX0=
424
+ }], ctorParameters: function () { return [{ type: i1.InventoryService }, { type: i2.TabsService }, { type: i2.ModalService }, { type: i3.TranslateService }, { type: i4.Router }, { type: i2.NavigatorService }, { type: i2.Permissions }, { type: i2.AlertService }, { type: i2.DynamicComponentService }, { type: i2.GroupService }]; } });
425
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGV4dC1kYXNoYm9hcmQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2NvbnRleHQtZGFzaGJvYXJkL2NvbnRleHQtZGFzaGJvYXJkLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQTBCLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2pFLE9BQU8sRUFBa0IsZ0JBQWdCLEVBQWUsTUFBTSxhQUFhLENBQUM7QUFDNUUsT0FBTyxFQUNMLFlBQVksRUFFWix1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLE9BQU8sRUFDUCxZQUFZLEVBQ1osWUFBWSxFQUNaLGFBQWEsRUFDYixnQkFBZ0IsRUFDaEIsV0FBVyxFQUNYLE1BQU0sRUFFTixXQUFXLEVBQ1gsV0FBVyxFQUVaLE1BQU0scUJBQXFCLENBQUM7QUFDN0IsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdkQsT0FBTyxFQUNMLE1BQU0sRUFDTixJQUFJLEVBQ0osSUFBSSxFQUNKLElBQUksRUFDSixLQUFLLEVBQ0wsR0FBRyxFQUNILEdBQUcsRUFDSCxPQUFPLEVBQ1AsU0FBUyxFQUNULE1BQU0sRUFDTixHQUFHLEVBQ0osTUFBTSxXQUFXLENBQUM7QUFDbkIsT0FBTyxFQUFFLGFBQWEsRUFBRSxJQUFJLEVBQWMsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzNELE9BQU8sRUFDTCxVQUFVLEVBQ1YsTUFBTSxFQUNOLEdBQUcsRUFDSCxRQUFRLEVBQ1IsUUFBUSxFQUNSLEdBQUcsRUFDSCxZQUFZLEVBQ1osT0FBTyxFQUNSLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxFQUdMLG9CQUFvQixFQUdwQixzQkFBc0IsRUFDdEIseUJBQXlCLEVBQ3pCLGtCQUFrQixFQUNuQixNQUFNLDJCQUEyQixDQUFDOzs7Ozs7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IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlU25hcHNob3QsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBJTWFuYWdlZE9iamVjdCwgSW52ZW50b3J5U2VydmljZSwgSVJlc3VsdExpc3QgfSBmcm9tICdAYzh5L2NsaWVudCc7XG5pbXBvcnQge1xuICBBbGVydFNlcnZpY2UsXG4gIENvbnRleHREYXRhLFxuICBEeW5hbWljQ29tcG9uZW50U2VydmljZSxcbiAgZ2V0QWN0aXZhdGVkUm91dGUsXG4gIGdldHRleHQsXG4gIEdyb3VwU2VydmljZSxcbiAgTW9kYWxTZXJ2aWNlLFxuICBOYXZpZ2F0b3JOb2RlLFxuICBOYXZpZ2F0b3JTZXJ2aWNlLFxuICBQZXJtaXNzaW9ucyxcbiAgU3RhdHVzLFxuICBUYWIsXG4gIFRhYnNTZXJ2aWNlLFxuICBWaWV3Q29udGV4dCxcbiAgV2lkZ2V0XG59IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMnO1xuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHtcbiAgYXNzaWduLFxuICBwaWNrLFxuICBzb21lLFxuICBrZXlzLFxuICBrZXlCeSxcbiAgaGFzLFxuICBnZXQsXG4gIGZvckVhY2gsXG4gIGNsb25lRGVlcCxcbiAgcmVkdWNlLFxuICBzZXRcbn0gZnJvbSAnbG9kYXNoLWVzJztcbmltcG9ydCB7IGNvbWJpbmVMYXRlc3QsIGZyb20sIE9ic2VydmFibGUsIG9mIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQge1xuICBjYXRjaEVycm9yLFxuICBmaWx0ZXIsXG4gIG1hcCxcbiAgbWVyZ2VBbGwsXG4gIG1lcmdlTWFwLFxuICB0YXAsXG4gIHRocm93SWZFbXB0eSxcbiAgdG9BcnJheVxufSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQge1xuICBDb250ZXh0RGFzaGJvYXJkLFxuICBDb250ZXh0RGFzaGJvYXJkTWFuYWdlZE9iamVjdCxcbiAgQ29udGV4dERhc2hib2FyZFR5cGUsXG4gIERhc2hib2FyZENvbnRleHQsXG4gIERhc2hib2FyZENvcHlDbGlwYm9hcmQsXG4gIFNUWUxJTkdfQ0xBU1NfUFJFRklYRVMsXG4gIEFMTF9HTE9CQUxfUk9MRVNfU0VMRUNURUQsXG4gIFBST0RVQ1RfRVhQRVJJRU5DRVxufSBmcm9tICcuL2NvbnRleHQtZGFzaGJvYXJkLm1vZGVsJztcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgQ29udGV4dERhc2hib2FyZFNlcnZpY2Uge1xuICByZWFkb25seSBSRVBPUlRfUEFSVElBTF9OQU1FID0gJ3JlcG9ydF8nO1xuICBjb3B5Q2xpcGJvYXJkOiBEYXNoYm9hcmRDb3B5Q2xpcGJvYXJkO1xuICBwcml2YXRlIHJlYWRvbmx5IElOVkVOVE9SWV9ST0xFUyA9IFsnUk9MRV9JTlZFTlRPUllfQURNSU4nXTtcbiAgcHJpdmF0ZSBjYWNoZSA9IG5ldyBNYXA8c3RyaW5nLCBDb250ZXh0RGFzaGJvYXJkTWFuYWdlZE9iamVjdD4oKTtcbiAgcHJpdmF0ZSByZWFkb25seSBERUZBVUxUX1BBR0VTSVpFID0gMTAwMDtcbiAgcHJpdmF0ZSByZWFkb25seSBGUkFHTUVOVF9OQU1FID0gJ2M4eV9EYXNoYm9hcmQnO1xuICBwcml2YXRlIHJlYWRvbmx5IERBU0hCT0FSRF9ST1VURV9QQVRIID0gJ2Rhc2hib2FyZCc7XG4gIHByaXZhdGUgcmVhZG9ubHkgSU5ERVhfU1BMSVQgPSAnISc7XG4gIHByaXZhdGUgX2Zvcm1EaXNhYmxlZCA9IHRydWU7XG5cbiAgZ2V0IGZvcm1EaXNhYmxlZCgpIHtcbiAgICByZXR1cm4gdGhpcy5fZm9ybURpc2FibGVkO1xuICB9XG5cbiAgc2V0IGZvcm1EaXNhYmxlZCh2YWx1ZSkge1xuICAgIHRoaXMuX2Zvcm1EaXNhYmxlZCA9IHZhbHVlO1xuICB9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBpbnZlbnRvcnk6IEludmVudG9yeVNlcnZpY2UsXG4gICAgcHJpdmF0ZSB0YWJzOiBUYWJzU2VydmljZSxcbiAgICBwcml2YXRlIG1vZGFsOiBNb2RhbFNlcnZpY2UsXG4gICAgcHJpdmF0ZSB0cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXG4gICAgcHJpdmF0ZSBuYXZpZ2F0b3I6IE5hdmlnYXRvclNlcnZpY2UsXG4gICAgcHJpdmF0ZSBwZXJtaXNzaW9uczogUGVybWlzc2lvbnMsXG4gICAgcHJpdmF0ZSBhbGVydDogQWxlcnRTZXJ2aWNlLFxuICAgIHByaXZhdGUgZHluYW1pY0NvbXBvbmVudDogRHluYW1pY0NvbXBvbmVudFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBncm91cFNlcnZpY2U6IEdyb3VwU2VydmljZVxuICApIHt9XG5cbiAgYXN5bmMgY3JlYXRlKGRhc2hib2FyZENmZzogQ29udGV4dERhc2hib2FyZCwgY29udGV4dD86IENvbnRleHREYXRhLCBuYW1lID0gJycpIHtcbiAgICBsZXQgaWQgPSAnJztcbiAgICBsZXQgZGFzaGJvYXJkVHlwZTtcblxuICAgIGlmIChjb250ZXh0KSB7XG4gICAgICBpZCA9IGNvbnRleHQuY29udGV4dERhdGEuaWQgYXMgc3RyaW5nO1xuICAgICAgZGFzaGJvYXJkVHlwZSA9IHRoaXMuZ2V0RGFzaGJvYXJkVHlwZUZyb21WaWV3Q29udGV4dChkYXNoYm9hcmRDZmcsIGNvbnRleHQpO1xuICAgIH1cbiAgICBpZiAobmFtZSkge1xuICAgICAgZGFzaGJvYXJkVHlwZSA9IENvbnRleHREYXNoYm9hcmRUeXBlLk5hbWVkO1xuICAgIH1cblxuICAgIGNvbnN0IGRhc2hib2FyZDogUGFydGlhbDxJTWFuYWdlZE9iamVjdD4gPSB7fTtcbiAgICBhc3NpZ24oZGFzaGJvYXJkLCB7IGM4eV9EYXNoYm9hcmQ6IGRhc2hib2FyZENmZyB9KTtcblxuICAgIGNvbnN0IHZhbHVlID1cbiAgICAgIGRhc2hib2FyZFR5cGUgPT09IENvbnRleHREYXNoYm9hcmRUeXBlLkRldmljZVR5cGUgPyBkYXNoYm9hcmRDZmcuZGV2aWNlVHlwZVZhbHVlIDogbmFtZSB8fCBpZDtcblxuICAgIGNvbnN0IGZyYWdtZW50S2V5ID0gdGhpcy5jcmVhdGVGcmFnbWVudEtleShkYXNoYm9hcmRUeXBlLCB2YWx1ZSk7XG4gICAgZGFzaGJvYXJkW2ZyYWdtZW50S2V5XSA9IHt9O1xuXG4gICAgaWYgKHRoaXMuc2hvdWxkU2V0R2xvYmFsKGRhc2hib2FyZCwgY29udGV4dCkpIHtcbiAgICAgIGFzc2lnbihkYXNoYm9hcmQsIHsgYzh5X0dsb2JhbDoge30gfSk7XG4gICAgfVxuICAgIGRhc2hib2FyZC5uYW1lID0gZGFzaGJvYXJkLmM4eV9EYXNoYm9hcmQubmFtZTtcbiAgICBjb25zdCB7IGRhdGEgfSA9XG4gICAgICBkYXNoYm9hcmRUeXBlID09PSBDb250ZXh0RGFzaGJvYXJkVHlwZS5Hcm91cCB8fFxuICAgICAgZGFzaGJvYXJkVHlwZSA9PT0gQ29udGV4dERhc2hib2FyZFR5cGUuRGV2aWNlIHx8XG4gICAgICAoY29udGV4dCAmJiBkYXNoYm9hcmRUeXBlID09PSBDb250ZXh0RGFzaGJvYXJkVHlwZS5OYW1lZClcbiAgICAgICAgPyBhd2FpdCB0aGlzLmludmVudG9yeS5jaGlsZEFkZGl0aW9uc0NyZWF0ZShkYXNoYm9hcmQsIGlkKVxuICAgICAgICA6IGF3YWl0IHRoaXMuaW52ZW50b3J5LmNyZWF0ZShkYXNoYm9hcmQpO1xuICAgIHJldHVybiBkYXRhIGFzIENvbnRleHREYXNoYm9hcmRNYW5hZ2VkT2JqZWN0O1xuICB9XG5cbiAgYXN5bmMgZGV0YWlsKGRhc2hib2FyZE1POiBDb250ZXh0RGFzaGJvYXJkTWFuYWdlZE9iamVjdCkge1xuICAgIGNvbnN0IHsgZGF0YSB9ID0gYXdhaXQgdGhpcy5pbnZlbnRvcnkuZGV0YWlsKGRhc2hib2FyZE1PKTtcbiAgICB0aGlzLmNhY2hlLnNldChkYXNoYm9hcmRNTy5pZCwgZGF0YSk7XG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cblxuICBhc3luYyB1cGRhdGUoZGFzaGJvYXJkOiBDb250ZXh0RGFzaGJvYXJkTWFuYWdlZE9iamVjdCkge1xuICAgIGRhc2hib2FyZC5uYW1lID0gZGFzaGJvYXJkLmM4eV9EYXNoYm9hcmQubmFtZTtcbiAgICBjb25zdCBrZWVwRnJhZ21lbnRzID0gdGhpcy5jbGVhbihwaWNrKGRhc2hib2FyZCwgW3RoaXMuRlJBR01FTlRfTkFNRSwgJ2lkJywgJ25hbWUnXSkpO1xuICAgIGtlZXBGcmFnbWVudHMuYzh5X0dsb2JhbCA9IHRoaXMuc2hvdWxkU2V0R2xvYmFsKGRhc2hib2FyZCk7XG4gICAgYXdhaXQgdGhpcy5zZXJpYWxpemVXaWRnZXRDb25maWdzKGtlZXBGcmFnbWVudHMpO1xuICAgIGNvbnN0IHsgZGF0YSB9ID0gYXdhaXQgdGhpcy5pbnZlbnRvcnkudXBkYXRlKGtlZXBGcmFnbWVudHMpO1xuICAgIHRoaXMuY2FjaGUuc2V0KGRhc2hib2FyZC5pZCwgZGF0YSk7XG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cblxuICBhc3luYyBkZWxldGUoZGFzaGJvYXJkOiBDb250ZXh0RGFzaGJvYXJkTWFuYWdlZE9iamVjdCwgd2l0aENvbmZpcm1hdGlvbjogYm9vbGVhbiA9IHRydWUpIHtcbiAgICB0cnkge1xuICAgICAgaWYgKHdpdGhDb25maXJtYXRpb24pIHtcbiAgICAgICAgbGV0IG1zZyA9IGdldHRleHQoXG4gICAgICAgICAgYFlvdSBhcmUgYWJvdXQgdG8gZGVsZXRlIHRoZSBkYXNoYm9hcmQgXCJ7eyBkYXNoYm9hcmROYW1lIH19XCIuIERvIHlvdSB3YW50IHRvIHByb2NlZWQ/YFxuICAgICAgICApO1xuICAgICAgICBpZiAodGhpcy5pc0RldmljZVR5cGUoZGFzaGJvYXJkKSkge1xuICAgICAgICAgIG1zZyA9IGdldHRleHQoXG4gICAgICAgICAgICBgWW91IGFyZSBhYm91dCB0byBkZWxldGUgdGhlIGRhc2hib2FyZCBcInt7IGRhc2hib2FyZE5hbWUgfX1cIiBmcm9tIGFsbCBkZXZpY2VzIG9mIHRoZSB0eXBlIFwie3sgZGV2aWNlVHlwZSB9fVwiLlxuICAgICAgICAgICBEbyB5b3Ugd2FudCB0byBwcm9jZWVkP2BcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGF3YWl0IHRoaXMubW9kYWwuY29uZmlybShcbiAgICAgICAgICBnZXR0ZXh0KCdEZWxldGUgZGFzaGJvYXJkJyksXG4gICAgICAgICAgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQobXNnLCB7XG4gICAgICAgICAgICBkYXNoYm9hcmROYW1lOiBkYXNoYm9hcmQuYzh5X0Rhc2hib2FyZC5uYW1lLFxuICAgICAgICAgICAgZGV2aWNlVHlwZTogZGFzaGJvYXJkLmM4eV9EYXNoYm9hcmQuZGV2aWNlVHlwZVZhbHVlXG4gICAgICAgICAgfSksXG4gICAgICAgICAgU3RhdHVzLkRBTkdFUixcbiAgICAgICAgICB7XG4gICAgICAgICAgICBvazogZ2V0dGV4dCgnRGVsZXRlJyksXG4gICAgICAgICAgICBjYW5jZWw6IGdldHRleHQoJ0NhbmNlbCcpXG4gICAgICAgICAgfVxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgYXdhaXQgdGhpcy5pbnZlbnRvcnkuZGVsZXRlKGRhc2hib2FyZCk7XG4gICAgICBjb25zdCB0YWJUb1JlbW92ZSA9IEFycmF5LmZyb20odGhpcy50YWJzLnN0YXRlKS5maW5kKHRhYiA9PlxuICAgICAgICB0YWIucGF0aC5lbmRzV2l0aChgJHt0aGlzLkRBU0hCT0FSRF9ST1VURV9QQVRIfS8ke2Rhc2hib2FyZC5pZH1gKVxuICAgICAgKTtcbiAgICAgIHRoaXMudGFicy5yZW1vdmUodGFiVG9SZW1vdmUpO1xuICAgICAgdGhpcy50YWJzLnJlZnJlc2goKTtcbiAgICB9IGNhdGNoIChleCkge1xuICAgICAgLy8gaW50ZW5kZWQgZW1wdHlcbiAgICB9XG4gIH1cblxuICBhY3RpdmF0ZURhc2hib2FyZHMoXG4gICAgcm91dGU6IEFjdGl2YXRlZFJvdXRlU25hcHNob3QsXG4gICAgdHlwZXM6IENvbnRleHREYXNoYm9hcmRUeXBlW11cbiAgKTogT2JzZXJ2YWJsZTxib29sZWFuIHwgVGFiW10+IHtcbiAgICBjb25zdCB7IGRhc2hib2FyZElkIH0gPSByb3V0ZS5wYXJhbXM7XG4gICAgaWYgKGRhc2hib2FyZElkKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXREYXNoYm9hcmQkKGRhc2hib2FyZElkLCB0eXBlcywgcm91dGUucGFyZW50LmRhdGEuY29udGV4dERhdGEpLnBpcGUoXG4gICAgICAgIHRhcChkYXNoYm9hcmQgPT4ge1xuICAgICAgICAgIHJvdXRlLmRhdGEgPSB7IGRhc2hib2FyZCB9O1xuICAgICAgICB9KSxcbiAgICAgICAgbWFwKCgpID0+IHRydWUpLFxuICAgICAgICBjYXRjaEVycm9yKCgpID0+IHtcbiAgICAgICAgICByZXR1cm4gb2YoZmFsc2UpO1xuICAgICAgICB9KVxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5nZXRUYWJzJChyb3V0ZS5kYXRhLmNvbnRleHREYXRhLCB0eXBlcyk7XG4gIH1cblxuICBnZXROYW1lZERhc2hib2FyZE9yQ3JlYXRlKG5hbWU6IHN0cmluZywgZGVmYXVsdFdpZGdldHM6IFdpZGdldFtdLCBjb250ZXh0PzogQ29udGV4dERhdGEpIHtcbiAgICBjb25zdCBjaGlsZHJlbiA9IHRoaXMubWFwV2lkZ2V0cyhkZWZhdWx0V2lkZ2V0cyk7XG4gICAgcmV0dXJuIHRoaXMuZ2V0RGFzaGJvYXJkJChuYW1lLCBbQ29udGV4dERhc2hib2FyZFR5cGUuTmFtZWRdKS5waXBlKFxuICAgICAgdGhyb3dJZkVtcHR5KCksXG4gICAgICBjYXRjaEVycm9yKCgpID0+XG4gICAgICAgIGZyb20oXG4gICAgICAgICAgdGhpcy5jcmVhdGUoXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGNoaWxkcmVuLFxuICAgICAgICAgICAgICB3aWRnZXRDbGFzc2VzOiB7ICdkYXNoYm9hcmQtdGhlbWUtbGlnaHQnOiB0cnVlLCAncGFuZWwtdGl0bGUtcmVndWxhcic6IHRydWUgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvbnRleHQsXG4gICAgICAgICAgICBuYW1lXG4gICAgICAgICAgKVxuICAgICAgICApXG4gICAgICApXG4gICAgKTtcbiAgfVxuXG4gIGFzeW5jIHJlZnJlc2hUYWJzKGRhc2hib2FyZE1POiBDb250ZXh0RGFzaGJvYXJkTWFuYWdlZE9iamVjdCkge1xuICAgIGlmICghdGhpcy5pc05hbWVkKGRhc2hib2FyZE1PKSkge1xuICAgICAgY29uc3QgdGFiVG9VcGRhdGUgPSBBcnJheS5mcm9tKHRoaXMudGFicy5zdGF0ZSkuZmluZCh0YWIgPT5cbiAgICAgICAgdGFiLnBhdGguZW5kc1dpdGgoYCR7dGhpcy5EQVNIQk9BUkRfUk9VVEVfUEFUSH0vJHtkYXNoYm9hcmRNTy5pZH1gKVxuICAgICAgKTtcblxuICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IHRoaXMuZGV0YWlsKGRhc2hib2FyZE1PKTtcbiAgICAgIGlmICh0YWJUb1VwZGF0ZSkge1xuICAgICAgICBjb25zdCB7IGljb24sIHByaW9yaXR5LCBuYW1lIH0gPSBkYXRhLmM4eV9EYXNoYm9hcmQ7XG4gICAgICAgIHRhYlRvVXBkYXRlLmljb24gPSBpY29uO1xuICAgICAgICB0YWJUb1VwZGF0ZS5wcmlvcml0eSA9IHByaW9yaXR5O1xuICAgICAgICB0YWJUb1VwZGF0ZS5sYWJlbCA9IG5hbWU7XG4gICAgICB9XG4gICAgICB0aGlzLnRhYnMucmVmcmVzaCgpO1xuICAgIH1cbiAgfVxuXG4gIHVwZGF0ZU5hdmlnYXRvckl0ZW0obW86IElNYW5hZ2VkT2JqZWN0KSB7XG4gICAgdGhpcy5uYXZpZ2F0b3Iuc3RhdGUuZm9yRWFjaChub2RlID0+IHtcbiAgICAgIGlmIChub2RlLnBhdGggPT09IGByZXBvcnRzLyR7bW8uaWR9YCkge1xuICAgICAgICB0aGlzLm5hdmlnYXRvci5yZW1vdmUobm9kZSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgaWYgKG1vLmM4eV9Jc05hdmlnYXRvck5vZGUpIHtcbiAgICAgIGNvbnN0IG5vZGVUb0FkZCA9IG5ldyBOYXZpZ2F0b3JOb2RlKHtcbiAgICAgICAgbGFiZWw6IG1vLm5hbWUsXG4gICAgICAgIHBhdGg6IGByZXBvcnRzLyR7bW8uaWR9YCxcbiAgICAgICAgaWNvbjogbW8uaWNvbixcbiAgICAgICAgcHJpb3JpdHk6IG1vLnByaW9yaXR5XG4gICAgICB9KTtcbiAgICAgIHRoaXMubmF2aWdhdG9yLmFkZChub2RlVG9BZGQpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIG5hdmlnYXRlVG9EYXNoYm9hcmQoZGFzaGJvYXJkTU86IENvbnRleHREYXNoYm9hcmRNYW5hZ2VkT2JqZWN0KSB7XG4gICAgaWYgKC9kYXNoYm9hcmQvLnRlc3QodGhpcy5yb3V0ZXIudXJsKSkge1xuICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycuLicsIGRhc2hib2FyZE1PLmlkXSwge1xuICAgICAgICByZWxhdGl2ZVRvOiBnZXRBY3RpdmF0ZWRSb3V0ZSh0aGlzLnJvdXRlcilcbiAgICAgIH0pO1xuICAgIH0gZWxzZSBpZiAoL15cXC8oZGV2aWNlfGdyb3VwKVxcL1swLTldKyQvLnRlc3QodGhpcy5yb3V0ZXIudXJsKSkge1xuICAgICAgLy8gaW4gY2FzZSB0aGUgYWRkIGRhc2hib2FyZCBidXR0b24gaXMgdGhlIG9ubHkgdGFiIG9uIHRoYXQgcm91dGVcbiAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnLicsIHRoaXMuREFTSEJPQVJEX1JPVVRFX1BBVEgsIGRhc2hib2FyZE1PLmlkXSwge1xuICAgICAgICByZWxhdGl2ZVRvOiBnZXRBY3RpdmF0ZWRSb3V0ZSh0aGlzLnJvdXRlcilcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy4uJywgdGhpcy5EQVNIQk9BUkRfUk9VVEVfUEFUSCwgZGFzaGJvYXJkTU8uaWRdLCB7XG4gICAgICAgIHJlbGF0aXZlVG86IGdldEFjdGl2YXRlZFJvdXRlKHRoaXMucm91dGVyKVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgY2FuRWRpdERhc2hib2FyZChtbykge1xuICAgIHJldHVybiB0aGlzLnBlcm1pc3Npb25zLmNhbkVkaXQoWydST0xFX0lOVkVOVE9SWV9BRE1JTicsICdST0xFX0lOVkVOVE9SWV9DUkVBVEUnXSwgbW8pO1xuICB9XG5cbiAgaXNOYW1lZChkYXNoYm9hcmQ6IFBhcnRpYWw8Q29udGV4dERhc2hib2FyZE1hbmFnZWRPYmplY3Q+KSB7XG4gICAgcmV0dXJuIHNvbWUoa2V5cyhkYXNoYm9hcmQpLCBwcm9wID0+XG4gICAgICBuZXcgUmVnRXhwKFxuICAgICAgICBgXiR7dGhpcy5GUkFHTUVOVF9OQU1FfSR7dGhpcy5JTkRFWF9TUExJVH0ke0NvbnRleHREYXNoYm9hcmRUeXBlLk5hbWVkfSR7dGhpcy5JTkRFWF9TUExJVH1gXG4gICAgICApLnRlc3QocHJvcClcbiAgICApO1xuICB9XG5cbiAgaXNSZXBvcnQoZGFzaGJvYXJkOiBQYXJ0aWFsPENvbnRleHREYXNoYm9hcmRNYW5hZ2VkT2JqZWN0Pikge1xuICAgIHJldHVybiBzb21lKGtleXMoZGFzaGJvYXJkKSwgcHJvcCA9PlxuICAgICAgbmV3IFJlZ0V4cChcbiAgICAgICAgYF4ke3RoaXMuRlJBR01FTlRfTkFNRX0ke3RoaXMuSU5ERVhfU1BMSVR9JHtDb250ZXh0RGFzaGJvYXJkVHlwZS5OYW1lZH0ke3RoaXMuSU5ERVhfU1BMSVR9JHt0aGlzLlJFUE9SVF9QQVJUSUFMX05BTUV9YFxuICAgICAgKS50ZXN0KHByb3ApXG4gICAgKTtcbiAgfVxuXG4gIGlzRGV2aWNlVHlwZShkYXNoYm9hcmQ6IFBhcnRpYWw8Q29udGV4dERhc2hib2FyZE1hbmFnZWRPYmplY3Q+KSB7XG4gICAgcmV0dXJuIHNvbWUoa2V5cyhkYXNoYm9hcmQpLCBwcm9wID0+XG4gICAgICBuZXcgUmVnRXhwKFxuICAgICAgICBgXiR7dGhpcy5GUkFHTUVOVF9OQU1FfSR7dGhpcy5JTkRFWF9TUExJVH0ke0NvbnRleHREYXNoYm9hcmRUeXBlLkRldmljZVR5cGV9JHt0aGlzLklOREVYX1NQTElUfWBcbiAgICAgICkudGVzdChwcm9wKVxuICAgICk7XG4gIH1cblxuICBpc0RldmljZURhc2hib2FyZChkYXNoYm9hcmQ6IFBhcnRpYWw8Q29udGV4dERhc2hib2FyZE1hbmFnZWRPYmplY3Q+KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHNvbWUoa2V5cyhkYXNoYm9hcmQpLCBwcm9wID0+XG4gICAgICBuZXcgUmVnRXhwKFxuICAgICAgICBgXiR7dGhpcy5GUkFHTUVOVF9OQU1FfSR7dGhpcy5JTkRFWF9TUExJVH0ke0NvbnRleHREYXNoYm9hcmRUeXBlLkRldmljZX0ke3RoaXMuSU5ERVhfU1BMSVR9YFxuICAgICAgKS50ZXN0KHByb3ApXG4gICAgKTtcbiAgfVxuXG4gIGlzR3JvdXBEYXNoYm9hcmQoZGFzaGJvYXJkOiBQYXJ0aWFsPENvbnRleHREYXNoYm9hcmRNYW5hZ2VkT2JqZWN0Pik6IGJvb2xlYW4ge1xuICAgIHJldHVybiBzb21lKGtleXMoZGFzaGJvYXJkKSwgcHJvcCA9PlxuICAgICAgbmV3IFJlZ0V4cChcbiAgICAgICAgYF4ke3RoaXMuRlJBR01FTlRfTkFNRX0ke3RoaXMuSU5ERVhfU1BMSVR9JHtDb250ZXh0RGFzaGJvYXJkVHlwZS5Hcm91cH0ke3RoaXMuSU5ERVhfU1BMSVR9YFxuICAgICAgKS50ZXN0KHByb3ApXG4gICAgKTtcbiAgfVxuXG4gIGdldEZpbHRlcmVkRGFzaGJvYXJkU3R5bGVzKHN0eWxlTGlzdDogc3RyaW5nW10pIHtcbiAgICByZXR1cm4gc3R5bGVMaXN0LmZpbHRlcihjID0+XG4gICAgICBTVFlMSU5HX0NMQVNTX1BSRUZJWEVTLnNvbWUoY2xhc3NQcmVmaXggPT4gYy5zdGFydHNXaXRoKGNsYXNzUHJlZml4KSlcbiAgICApO1xuICB9XG5cbiAgZ2V0U3R5bGluZyhzdHlsZUxpc3QsIHN0eWxlTmFtZSwgZGVmYXVsdFZhbHVlKSB7XG4gICAgY29uc3Qgc3R5bGluZyA9IHN0eWxlTGlzdC5maW5kKFxuICAgICAgc3R5bGUgPT4gc3R5bGUgJiYgbmV3IFJlZ0V4cChgLSR7c3R5bGVOYW1lfSRgLCAnaScpLnRlc3Qoc3R5bGUuY2xhc3MpXG4gICAgKTtcbiAgICByZXR1cm4gc3R5bGluZyA/IHN0eWxpbmcuY2xhc3MgOiBkZWZhdWx0VmFsdWU7XG4gIH1cblxuICBtYXBXaWRnZXRzKHdpZGdldHM6IFdpZGdldFtdKSB7XG4gICAgcmV0dXJuIGtleUJ5KFxuICAgICAgd2lkZ2V0cy5tYXAod2lkZ2V0ID0+IHtcbiAgICAgICAgd2lkZ2V0LmlkID0gU3RyaW5nKE1hdGgucmFuZG9tKCkpLnN1YnN0cigyKTtcbiAgICAgICAgcmV0dXJuIHdpZGdldDtcbiAgICAgIH0pLFxuICAgICAgJ2lkJ1xuICAgICk7XG4gIH1cblxuICBnZXREYXNoYm9hcmQkKGRhc2hib2FyZElkT3JOYW1lLCBkYXNoYm9hcmRUeXBlOiBDb250ZXh0RGFzaGJvYXJkVHlwZVtdLCBtbz86IElNYW5hZ2VkT2JqZWN0KSB7XG4gICAgY29uc3QgY2FjaGUgPSB0aGlzLmNhY2hlLmdldChkYXNoYm9hcmRJZE9yTmFtZSk7XG5cbiAgICBjb25zdCBkYXNoYm9hcmRzID0gbW9cbiAgICAgID8gdGhpcy5nZXRDb250ZXh0RGFzaGJvYXJkcyhtbywgZGFzaGJvYXJkVHlwZSlcbiAgICAgIDogW3RoaXMuZ2V0TmFtZWREYXNoYm9hcmQoZGFzaGJvYXJkSWRPck5hbWUpXTtcblxuICAgIGNvbnN0IGNhY2hlUmVmcmVzaCA9IHRoaXMuZ2V0Q29udGV4dERhc2hib2FyZHMkKGRhc2hib2FyZHMpLnBpcGUoXG4gICAgICB0YXAoZGFzaGJvYXJkID0+IHRoaXMuY2FjaGVEYXNoYm9hcmQoZGFzaGJvYXJkKSksXG4gICAgICBmaWx0ZXIoXG4gICAgICAgIGRhc2hib2FyZCA9PlxuICAgICAgICAgIGRhc2hib2FyZC5pZCA9PT0gZGFzaGJvYXJkSWRPck5hbWUgfHxcbiAgICAgICAgICBoYXMoXG4gICAgICAgICAgICBkYXNoYm9hcmQsXG4gICAgICAgICAgICBgJHt0aGlzLkZSQUdNRU5UX05BTUV9JHt0aGlzLklOREVYX1NQTElUfSR7Q29udGV4dERhc2hib2FyZFR5cGUuTmFtZWR9JHt0aGlzLklOREVYX1NQTElUfSR7ZGFzaGJvYXJkSWRPck5hbWV9YFxuICAgICAgICAgIClcbiAgICAgIClcbiAgICApO1xuICAgIHJldHVybiBjYWNoZSA/IG9mKGNhY2hlKSA6IGNhY2hlUmVmcmVzaDtcbiAgfVxuXG4gIGFzeW5jIHBhc3RlRGFzaGJvYXJkKG5ld0NvbnRleHQ6IERhc2hib2FyZENvbnRleHQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5jb3B5Q2xpcGJvYXJkKSB7XG4gICAgICB0cnkge1xuICAgICAgICBpZiAodGhpcy5jYW5QYXN0ZURhc2hib2FyZCh0aGlzLmNvcHlDbGlwYm9hcmQsIG5ld0NvbnRleHQuY29udGV4dCkpIHtcbiAgICAgICAgICBjb25zdCBkYXNoYm9hcmRUb1Bhc3RlID0gdGhpcy5jcmVhdGVDb250ZXh0RGFzaGJvYXJkQ29weShcbiAgICAgICAgICAgIHRoaXMuY29weUNsaXBib2FyZC5kYXNoYm9hcmQsXG4gICAgICAgICAgICBuZXdDb250ZXh0LmNvbnRleHREYXRhLFxuICAgICAgICAgICAgdGhpcy5jb3B5Q2xpcGJvYXJkLmNvbnRleHQuY29udGV4dERhdGFcbiAgICAgICAgICApO1xuICAgICAgICAgIGNvbnN0IGRhc2hib2FyZCA9IGF3YWl0IHRoaXMuY3JlYXRlKHRoaXMuY2xlYW4oZGFzaGJvYXJkVG9QYXN0ZSksIG5ld0NvbnRleHQpO1xuICAgICAgICAgIHRoaXMuY29weUNsaXBib2FyZCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICB0aGlzLm5hdmlnYXRlVG9EYXNoYm9hcmQoZGFzaGJvYXJkKTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIHRoaXMuYWxlcnQud2FybmluZyhnZXR0ZXh0KCdJbnN1ZmZpY2llbnQgcGVybWlzc2lvbnMgZm9yIHRoaXMgYWN0aW9uLicpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBnZXRDb250ZXh0Rm9yR1MobW86IElNYW5hZ2VkT2JqZWN0KTogc3RyaW5nIHwgbnVsbCB7XG4gICAgaWYgKHRoaXMuZ3JvdXBTZXJ2aWNlLmlzRGV2aWNlKG1vKSkge1xuICAgICAgcmV0dXJuIFBST0RVQ1RfRVhQRVJJRU5DRS5EQVNIQk9BUkQuQ09OVEVYVC5ERVZJQ0U7XG4gICAgfSBlbHNlIGlmICh0aGlzLmdyb3VwU2VydmljZS5pc0Fzc2V0KG1vKSkge1xuICAgICAgcmV0dXJuIFBST0RVQ1RfRVhQRVJJRU5DRS5EQVNIQk9BUkQuQ09OVEVYVC5BU1NFVDtcbiAgICB9IGVsc2UgaWYgKHRoaXMuZ3JvdXBTZXJ2aWNlLmlzR3JvdXAobW8pKSB7XG4gICAgICByZXR1cm4gUFJPRFVDVF9FWFBFUklFTkNFLkRBU0hCT0FSRC5DT05URVhULkdST1VQO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHNlcmlhbGl6ZVdpZGdldENvbmZpZ3MoZGFzaGJvYXJkOiBDb250ZXh0RGFzaGJvYXJkTWFuYWdlZE9iamVjdCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGNoaWxkcmVuID0gY2xvbmVEZWVwKGRhc2hib2FyZC5jOHlfRGFzaGJvYXJkLmNoaWxkcmVuKTtcbiAgICBpZiAoIWNoaWxkcmVuKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGNvbmZpZ3MgPSBPYmplY3QudmFsdWVzKGNoaWxkcmVuKTtcbiAgICBjb25zdCBkZXRhaWxzID0gY29uZmlncy5tYXAoKHsgY29tcG9uZW50SWQsIGNvbmZpZyB9KSA9PiAoeyBjb21wb25lbnRJZCwgY29uZmlnIH0pKTtcbiAgICBjb25zdCByZXN1bHRzID0gYXdhaXQgdGhpcy5keW5hbWljQ29tcG9uZW50LnNlcmlhbGl6ZUNvbmZpZ3MoZGV0YWlscyk7XG4gICAgcmVzdWx0cy5mb3JFYWNoKChyZXN1bHQsIGluZGV4KSA9PiB7XG4gICAgICBPYmplY3QuZW50cmllcyhyZXN1bHQpLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT4ge1xuICAgICAgICBzZXQoZGV0YWlsc1tpbmRleF0uY29uZmlnLCBrZXksIHZhbHVlKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIGRhc2hib2FyZC5jOHlfRGFzaGJvYXJkLmNoaWxkcmVuID0gY2hpbGRyZW47XG4gIH1cblxuICBwcml2YXRlIGNhblBhc3RlRGFzaGJvYXJkKFxuICAgIGNvcHlDbGlwYm9hcmQ6IERhc2hib2FyZENvcHlDbGlwYm9hcmQsXG4gICAgY3VycmVudENvbnRleHQ6IFZpZXdDb250ZXh0XG4gICk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGNsaXBib2FyZFZpZXdDb250ZXh0ID0gY29weUNsaXBib2FyZC5jb250ZXh0LmNvbnRleHQ7XG5cbiAgICBpZiAoY3VycmVudENvbnRleHQgIT09IGNsaXBib2FyZFZpZXdDb250ZXh0KSB7XG4gICAgICBpZiAoY2xpcGJvYXJkVmlld0NvbnRleHQgPT09IFZpZXdDb250ZXh0LkRldmljZSkge1xuICAgICAgICB0aGlzLmFsZXJ0Lndhcm5pbmcoZ2V0dGV4dCgnRGV2aWNlIGRhc2hib2FyZHMgY2FuIG9ubHkgYmUgY29waWVkIGludG8gYSBkZXZpY2UuJykpO1xuICAgICAgfSBlbHNlIGlmIChjbGlwYm9hcmRWaWV3Q29udGV4dCA9PT0gVmlld0NvbnRleHQuR3JvdXApIHtcbiAgICAgICAgdGhpcy5hbGVydC53YXJuaW5nKGdldHRleHQoJ0dyb3VwIGRhc2hib2FyZHMgY2FuIG9ubHkgYmUgY29waWVkIGludG8gYSBncm91cC4nKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVDb250ZXh0RGFzaGJvYXJkQ29weShcbiAgICBkYXNoOiBDb250ZXh0RGFzaGJvYXJkLFxuICAgIG5ld0NvbnRleHQ6IFBhcnRpYWw8SU1hbmFnZWRPYmplY3Q+LFxuICAgIG9sZENvbnRleHQ6IFBhcnRpYWw8SU1hbmFnZWRPYmplY3Q+XG4gICk6IENvbnRleHREYXNoYm9hcmQge1xuICAgIGNvbnN0IGNoaWxkcmVuID0gcmVkdWNlKFxuICAgICAgZGFzaC5jaGlsZHJlbixcbiAgICAgIChfY2hpbGRyZW4sIGNoaWxkKSA9PiB7XG4gICAgICAgIGNvbnN0IHsgaWQgfSA9IGNoaWxkO1xuICAgICAgICBjb25zdCBjZmcgPSBjaGlsZC5jb25maWc7XG4gICAgICAgIGNvbnN0IHByb3BlcnRpZXNUb0NvcHkgPSB7XG4gICAgICAgICAgZGV2aWNlOiBkZXZpY2UgPT4gdGhpcy5yZXBsYWNlQ29udGV4dEluT2JqKGRldmljZSwgbmV3Q29udGV4dCwgb2xkQ29udGV4dCksXG4gICAgICAgICAgZGF0YXBvaW50czogZGF0YVBvaW50cyA9PlxuICAgICAgICAgICAgdGhpcy5yZXBsYWNlQ29udGV4dEluRGF0YVBvaW50cyhkYXRhUG9pbnRzLCBuZXdDb250ZXh0LCBvbGRDb250ZXh0KSxcbiAgICAgICAgICBkYXRhUG9pbnRzOiBkYXRhUG9pbnRzID0+XG4gICAgICAgICAgICB0aGlzLnJlcGxhY2VDb250ZXh0SW5EYXRhUG9pbnRzKGRhdGFQb2ludHMsIG5ld0NvbnRleHQsIG9sZENvbnRleHQpLFxuICAgICAgICAgIGRhdGFwb2ludHNHYXVnZTogZGF0YVBvaW50cyA9PlxuICAgICAgICAgICAgdGhpcy5yZXBsYWNlQ29udGV4dEluRGF0YVBvaW50cyhkYXRhUG9pbnRzLCBuZXdDb250ZXh0LCBvbGRDb250ZXh0KSxcbiAgICAgICAgICBkYXRhcG9pbnRzTGFiZWxzOiBkYXRhUG9pbnRzID0+XG4gICAgICAgICAgICB0aGlzLnJlcGxhY2VDb250ZXh0SW5EYXRhUG9pbnRzKGRhdGFQb2ludHMsIG5ld0NvbnRleHQsIG9sZENvbnRleHQpXG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKGNmZykge1xuICAgICAgICAgIHRoaXMuY29weVByb3BlcnRpZXMoY2ZnLCBwcm9wZXJ0aWVzVG9Db3B5KTtcbiAgICAgICAgICBpZiAoY2ZnLm9wdGlvbnMpIHtcbiAgICAgICAgICAgIHRoaXMuY29weVByb3BlcnRpZXMoY2ZnLm9wdGlvbnMsIHByb3BlcnRpZXNUb0NvcHkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIF9jaGlsZHJlbltpZF0gPSBjbG9uZURlZXAoY2hpbGQpO1xuICAgICAgICByZXR1cm4gX2NoaWxkcmVuO1xuICAgICAgfSxcbiAgICAgIHt9XG4gICAgKTtcblxuICAgIGRhc2guY2hpbGRyZW4gPSBjaGlsZHJlbjtcbiAgICByZXR1cm4gZGFzaDtcbiAgfVxuXG4gIHByaXZhdGUgY29weVByb3BlcnRpZXMob2JqLCBwcm9wZXJ0aWVzVG9Db3B5KSB7XG4gICAgZm9yRWFjaChwcm9wZXJ0aWVzVG9Db3B5LCAoY29weUZuLCBwcm9wZXJ0eSkgPT4ge1xuICAgICAgaWYgKG9ialtwcm9wZXJ0eV0pIHtcbiAgICAgICAgb2JqW3Byb3BlcnR5XSA9IGNvcHlGbihvYmpbcHJvcGVydHldKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgcmVwbGFjZUNvbnRleHRJbkRhdGFQb2ludHMoXG4gICAgZGF0YVBvaW50cyxcbiAgICBuZXdDb250ZXh0OiBQYXJ0aWFsPElNYW5hZ2VkT2JqZWN0PixcbiAgICBvbGRDb250ZXh0OiBQYXJ0aWFsPElNYW5hZ2VkT2JqZWN0PlxuICApIHtcbiAgICBkYXRhUG9pbnRzLmZvckVhY2goZHAgPT4ge1xuICAgICAgZHAuX190YXJnZXQgPSB0aGlzLnJlcGxhY2VDb250ZXh0SW5PYmooZHAuX190YXJnZXQsIG5ld0NvbnRleHQsIG9sZENvbnRleHQpO1xuICAgIH0pO1xuICAgIHJldHVybiBkYXRhUG9pbnRzO1xuICB9XG5cbiAgcHJpdmF0ZSByZXBsYWNlQ29udGV4dEluT2JqKFxuICAgIG9iajogUGFydGlhbDxJTWFuYWdlZE9iamVjdD4sXG4gICAgbmV3Q29udGV4dDogUGFydGlhbDxJTWFuYWdlZE9iamVjdD4sXG4gICAgb2xkQ29udGV4dDogUGFydGlhbDxJTWFuYWdlZE9iamVjdD5cbiAgKSB7XG4gICAgaWYgKG9iaiAmJiBvYmouaWQgPT09IG9sZENvbnRleHQuaWQpIHtcbiAgICAgIE9iamVjdC5hc3NpZ24ob2JqLCBwaWNrKG5ld0NvbnRleHQsIFsnaWQnLCAnbmFtZSddKSk7XG4gICAgfVxuICAgIHJldHVybiBvYmo7XG4gIH1cblxuICBwcml2YXRlIGdldFRhYnMkKG1vOiBDb250ZXh0RGFzaGJvYXJkTWFuYWdlZE9iamVjdCwgZGFzaGJvYXJkVHlwZTogQ29udGV4dERhc2hib2FyZFR5cGVbXSkge1xuICAgIGNvbnN0IGRhc2hib2FyZHMgPSB0aGlzLmdldENvbnRleHREYXNoYm9hcmRzKG1vLCBkYXNoYm9hcmRUeXBlKTtcblxuICAgIHJldHVybiB0aGlzLmdldENvbnRleHREYXNoYm9hcmRzJChkYXNoYm9hcmRzKS5waXBlKFxuICAgICAgbWVyZ2VNYXAoZGFzaGJvYXJkID0+IHRoaXMudmVyaWZ5RGFzaGJvYXJkQXZhaWxhYmlsaXR5JChkYXNoYm9hcmQpKSxcbiAgICAgIG1lcmdlTWFwKChbZGFzaGJvYXJkXSkgPT4gdGhpcy5yZW1vdmVEYXNoYm9hcmRNb1Byb3BlcnR5KGRhc2hib2FyZCkpLFxuICAgICAgdGFwKGRhc2hib2FyZCA9PiB0aGlzLmNhY2hlRGFzaGJvYXJkKGRhc2hib2FyZCkpLFxuICAgICAgbWFwKGRhc2hib2FyZCA9PiB0aGlzLmNyZWF0ZURhc2hib2FyZFRhYihkYXNoYm9hcmQpKSxcbiAgICAgIHRvQXJyYXkoKVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIHZlcmlmeURhc2hib2FyZEF2YWlsYWJpbGl0eSQoZGFzaGJvYXJkOiBDb250ZXh0RGFzaGJvYXJkTWFuYWdlZE9iamVjdCkge1xuICAgIGNvbnN0IGdsb2JhbFJvbGVzSWRzID0gZGFzaGJvYXJkPy5jOHlfRGFzaGJvYXJkPy5nbG9iYWxSb2xlc0lkcztcbiAgICBjb25zdCBjYW5FZGl0ID0gZnJvbShcbiAgICAgIHRoaXMucGVybWlzc2lvbnMuY2FuRWRpdCh0aGlzLklOVkVOVE9SWV9ST0xFUywgZGFzaGJvYXJkLCB7IHNraXBSZXF1ZXN0Q2hlY2s6IHRydWUgfSlcbiAgICApO1xuICAgIGNvbnN0IGhhc0FueUdsb2JhbFJvbGUgPVxuICAgICAgIWdsb2JhbFJvbGVzSWRzIHx8IGdsb2JhbFJvbGVzSWRzID09PSBBTExfR0xPQkFMX1JPTEVTX1NFTEVDVEVEXG4gICAgICAgID8gb2YodHJ1ZSlcbiAgICAgICAgOiBvZih0aGlzLnBlcm1pc3Npb25zLmhhc0FueUdsb2JhbFJvbGUoZ2xvYmFsUm9sZXNJZHMpKTtcblxuICAgIHJldHVybiBjb21iaW5lTGF0ZXN0KFtvZihkYXNoYm9hcmQpLCBjYW5FZGl0LCBoYXNBbnlHbG9iYWxSb2xlXSkucGlwZShcbiAgICAgIGZpbHRlcigoWywgY2FuRWRpdCwgaGFzQW55R2xvYmFsUm9sZV0pID0+IGNhbkVkaXQgfHwgaGFzQW55R2xvYmFsUm9sZSlcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRDb250ZXh0RGFzaGJvYXJkcyQocmVxdWVzdHM6IEFycmF5PFByb21pc2U8SVJlc3VsdExpc3Q8SU1hbmFnZWRPYmplY3Q+Pj4pIHtcbiAgICByZXR1cm4gZnJvbShyZXF1ZXN0cykucGlwZShcbiAgICAgIG1lcmdlQWxsKCksXG4gICAgICBtZXJnZU1hcChyZXNwb25zZSA9PiByZXNwb25zZS5kYXRhIGFzIENvbnRleHREYXNoYm9hcmRNYW5hZ2VkT2JqZWN0W10pXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDbGVhbnMgYWxyZWFkeSBjb3JydXB0ZWQgZGFzaGJvYXJkcyBmcm9tIGRhc2hib2FyZE1vIHByb3BlcnR5LlxuICAgKiBBZGRlZCB0byBmaXggZGFzaGJvYXJkcyBvbiB0aGUgY2xvdWQgaW5zdGFuY2UgKGV1LWxhdGVzdCkuXG4gICAqIEBkZXByZWNhdGVkIFRoaXMgaXMgZ29pbmcgdG8gYmUgcmVtb3ZlZCBhZnRlciAxMDA3LjcuMC5cbiAgICovXG4gIHByaXZhdGUgYXN5bmMgcmVtb3ZlRGFzaGJvYXJkTW9Qcm9wZXJ0eShcbiAgICBkYXNoYm9hcmQ6IENvbnRleHREYXNoYm9hcmRNYW5hZ2VkT2JqZWN0XG4gICk6IFByb21pc2U8Q29udGV4dERhc2hib2FyZE1hbmFnZWRPYmplY3Q+IHtcbiAgICBjb25zdCBkYXNoYm9hcmRDb3B5ID0gY2xvbmVEZWVwKGRhc2hib2FyZCk7XG4gICAgY29uc3QgY2hpbGRyZW4gPSBnZXQoZGFzaGJvYXJkQ29weSwgJ2M4eV9EYXNoYm9hcmQuY2hpbGRyZW4nKTtcbiAgICBsZXQgdXBkYXRlRGFzaGJvYXJkID0gZmFsc2U7XG5cbiAgICBmb3JFYWNoKGNoaWxkcmVuLCBjaGlsZCA9PiB7XG4gICAgICBpZiAoZ2V0KGNoaWxkLCAnY29tcG9uZW50VHJhbnNmb3JtQ29uZmlnV2l0aENvbnRleHQnKSkge1xuICAgICAgICBkZWxldGUgY2hpbGQuY29tcG9uZW50VHJhbnNmb3JtQ29uZmlnV2l0aENvbnRleHQ7XG4gICAgICAgIHVwZGF0ZURhc2hib2FyZCA9IHRydWU7XG4gICAgICB9XG4gICAgICBpZiAoZ2V0KGNoaWxkLCAnY29uZmlnLmRhc2hib2FyZE1vJykpIHtcbiAgICAgICAgZGVsZXRlIGNoaWxkLmNvbmZpZy5kYXNoYm9hcmRNbztcbiAgICAgICAgdXBkYXRlRGFzaGJvYXJkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGlmICh1cGRhdGVEYXNoYm9hcmQpIHtcbiAgICAgIGF3YWl0IHRoaXMudXBkYXRlKGRhc2hib2FyZENvcHkpO1xuICAgIH1cbiAgICByZXR1cm4gZGFzaGJvYXJkQ29weTtcbiAgfVxuXG4gIHByaXZhdGUgY2FjaGVEYXNoYm9hcmQoZGFzaGJvYXJkOiBDb250ZXh0RGFzaGJvYXJkTWFuYWdlZE9iamVjdCkge1xuICAgIHRoaXMuY2FjaGUuc2V0KGRhc2hib2FyZC5pZCwgZGFzaGJvYXJkKTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlRGFzaGJvYXJkVGFiKGRhc2hib2FyZDogQ29udGV4dERhc2hib2FyZE1hbmFnZWRPYmplY3QpIHtcbiAgICBjb25zdCB7IGM4eV9EYXNoYm9hcmQ6IF9kYXNoYm9hcmQsIGlkIH0gPSBkYXNoYm9hcmQ7XG4gICAgcmV0dXJuIHtcbiAgICAgIGljb246IF9kYXNoYm9hcmQuaWNvbixcbiAgICAgIHBhdGg6IGAke3RoaXMuREFTSEJPQVJEX1JPVVRFX1BBVEh9LyR7aWR9YCxcbiAgICAgIGxhYmVsOiBfZGFzaGJvYXJkLm5hbWUsXG4gICAgICBwcmlvcml0eTogX2Rhc2hib2FyZC5wcmlvcml0eSxcbiAgICAgIGhpZGU6IHRoaXMuaXNSZXBvcnQoZGFzaGJvYXJkKVxuICAgIH0gYXMgVGFiO1xuICB9XG5cbiAgcHJpdmF0ZSBjbGVhbihkYXNoYm9hcmQpIHtcbiAgICBjb25zdCBqc29uU3RyaW5nID0gSlNPTi5zdHJpbmdpZnkoZGFzaGJvYXJkLCAoa2V5LCB2YWx1ZSkgPT4ge1xuICAgICAgaWYgKGtleSA9PT0gJyQkaGFzaEtleScgfHwga2V5ID09PSAna2xhc3NlcycpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH0pO1xuICAgIHJldHVybiBKU09OLnBhcnNlKGpzb25TdHJpbmcpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXROYW1lZERhc2hib2FyZChuYW1lOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5pbnZlbnRvcnkubGlzdCh7XG4gICAgICBmcmFnbWVudFR5cGU6IGAke3RoaXMuRlJBR01FTlRfTkFNRX0ke3RoaXMuSU5ERVhfU1BMSVR9JHtDb250ZXh0RGFzaGJvYXJkVHlwZS5OYW1lZH0ke3RoaXMuSU5ERVhfU1BMSVR9JHtuYW1lfWAsXG4gICAgICBwYWdlU2l6ZTogMVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRDb250ZXh0RGFzaGJvYXJkcyhtbzogSU1hbmFnZWRPYmplY3QsIGRhc2hib2FyZFR5cGU6IENvbnRleHREYXNoYm9hcmRUeXBlW10pIHtcbiAgICByZXR1cm4gZGFzaGJvYXJkVHlwZS5tYXAoKHR5cGU6IENvbnRleHREYXNoYm9hcmRUeXBlKSA9PlxuICAgICAgdGhpcy5pbnZlbnRvcnkubGlzdCh7XG4gICAgICAgIGZyYWdtZW50VHlwZTogdGhpcy5jcmVhdGVEYXNoYm9hcmRGcmFnbWVudChtbywgdHlwZSksXG4gICAgICAgIHBhZ2VTaXplOiB0aGlzLkRFRkFVTFRfUEFHRVNJWkVcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlRGFzaGJvYXJkRnJhZ21lbnQobW86IElNYW5hZ2VkT2JqZWN0LCB0eXBlOiBDb250ZXh0RGFzaGJvYXJkVHlwZSkge1xuICAgIGxldCB2YWx1ZTtcbiAgICBpZiAobW8uYzh5X1JlcG9ydCkge1xuICAgICAgdmFsdWUgPSBgJHt0aGlzLlJFUE9SVF9QQVJUSUFMX05BTUV9JHttby5pZH1gO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YWx1ZSA9IHR5cGUgPT09IENvbnRleHREYXNoYm9hcmRUeXBlLkRldmljZVR5cGUgPyBtby50eXBlIDogbW8uaWQ7XG4gICAgfVxuICAgIHJldHVybiBgJHt0aGlzLkZSQUdNRU5UX05BTUV9JHt0aGlzLklOREVYX1NQTElUfSR7dHlwZX0ke3RoaXMuSU5ERVhfU1BMSVR9JHt2YWx1ZX1gO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXREYXNoYm9hcmRUeXBlRnJvbVZpZXdDb250ZXh0KGRhc2hib2FyZENmZywgY29udGV4dCkge1xuICAgIGxldCBkYXNoYm9hcmRUeXBlO1xuICAgIGlmIChjb250ZXh0LmNvbnRleHQgPT09IFZpZXdDb250ZXh0LkRldmljZSkge1xuICAgICAgZGFzaGJvYXJkVHlwZSA9IGRhc2hib2FyZENmZy5kZXZpY2VUeXBlXG4gICAgICAgID8gQ29udGV4dERhc2hib2FyZFR5cGUuRGV2aWNlVHlwZVxuICAgICAgICA6IENvbnRleHREYXNoYm9hcmRUeXBlLkRldmljZTtcbiAgICB9XG4gICAgaWYgKGNvbnRleHQuY29udGV4dCA9PT0gVmlld0NvbnRleHQuR3JvdXApIHtcbiAgICAgIGRhc2hib2FyZFR5cGUgPSBDb250ZXh0RGFzaGJvYXJkVHlwZS5Hcm91cDtcbiAgICB9XG4gICAgcmV0dXJuIGRhc2hib2FyZFR5cGU7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZUZyYWdtZW50S2V5KGNvbnRleHREYXNoYm9hcmRUeXBlOiBDb250ZXh0RGFzaGJvYXJkVHlwZSwgdmFsdWU6IHN0cmluZykge1xuICAgIHJldHVybiBbdGhpcy5GUkFHTUVOVF9OQU1FLCBjb250ZXh0RGFzaGJvYXJkVHlwZSwgdmFsdWVdLmpvaW4odGhpcy5JTkRFWF9TUExJVCk7XG4gIH1cblxuICBwcml2YXRlIHNob3VsZFNldEdsb2JhbChkYXNoYm9hcmQ6IFBhcnRpYWw8Q29udGV4dERhc2hib2FyZE1hbmFnZWRPYmplY3Q+LCBjb250ZXh0Pykge1xuICAgIGlmIChcbiAgICAgICghY29udGV4dCAmJiB0aGlzLmlzTmFtZWQoZGFzaGJvYXJkKSAmJiAhdGhpcy5pc1JlcG9ydChkYXNoYm9hcmQpKSB8fFxuICAgICAgdGhpcy5pc0RldmljZVR5cGUoZGFzaGJvYXJkKVxuICAgICkge1xuICAgICAgcmV0dXJuIHt9O1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuIl19
@@ -1,13 +1,15 @@
1
1
  import { Component, EventEmitter, Input, Output } from '@angular/core';
2
2
  import { UserGroupService } from '@c8y/client';
3
- import { ALL_GLOBAL_ROLES_SELECTED } from './context-dashboard.model';
3
+ import { GainsightService } from '@c8y/ngx-components';
4
+ import { ALL_GLOBAL_ROLES_SELECTED, PRODUCT_EXPERIENCE } from './context-dashboard.model';
4
5
  import * as i0 from "@angular/core";
5
6
  import * as i1 from "@c8y/client";
6
7
  import * as i2 from "@c8y/ngx-components";
7
8
  import * as i3 from "ngx-bootstrap/popover";
8
9
  export class DashboardAvailabilityComponent {
9
- constructor(userGroupService) {
10
+ constructor(userGroupService, gainsightService) {
10
11
  this.userGroupService = userGroupService;
12
+ this.gainsightService = gainsightService;
11
13
  this.globalRolesIdsChange = new EventEmitter();
12
14
  this.globalRolesItems = [];
13
15
  this.globalRolesItemsSelected = [];
@@ -38,10 +40,20 @@ export class DashboardAvailabilityComponent {
38
40
  this.globalRolesItemsSelected = items;
39
41
  if (allItemsSelected) {
40
42
  this.globalRolesIdsChange.emit(ALL_GLOBAL_ROLES_SELECTED);
43
+ this.gainsightService.triggerEvent(PRODUCT_EXPERIENCE.DASHBOARD.EVENTS.DASHBOARDS, {
44
+ component: PRODUCT_EXPERIENCE.DASHBOARD.COMPONENTS.DASHBOARD_AVAILABILITY,
45
+ action: PRODUCT_EXPERIENCE.DASHBOARD.ACTIONS.APPLY_GLOBAL_ROLES_CHANGES,
46
+ globalRoles: ALL_GLOBAL_ROLES_SELECTED
47
+ });
41
48
  }
42
49
  else {
43
50
  const selectedGlobalRolesIds = items.map(i => i.id);
44
51
  this.globalRolesIdsChange.emit([...selectedGlobalRolesIds]);
52
+ this.gainsightService.triggerEvent(PRODUCT_EXPERIENCE.DASHBOARD.EVENTS.DASHBOARDS, {
53
+ component: PRODUCT_EXPERIENCE.DASHBOARD.COMPONENTS.DASHBOARD_AVAILABILITY,
54
+ action: PRODUCT_EXPERIENCE.DASHBOARD.ACTIONS.APPLY_GLOBAL_ROLES_CHANGES,
55
+ globalRoles: selectedGlobalRolesIds?.sort()?.join()
56
+ });
45
57
  }
46
58
  }
47
59
  async getGlobalRoles() {
@@ -62,14 +74,14 @@ export class DashboardAvailabilityComponent {
62
74
  .filter(Boolean);
63
75
  }
64
76
  }
65
- DashboardAvailabilityComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: DashboardAvailabilityComponent, deps: [{ token: i1.UserGroupService }], target: i0.ɵɵFactoryTarget.Component });
77
+ DashboardAvailabilityComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: DashboardAvailabilityComponent, deps: [{ token: i1.UserGroupService }, { token: i2.GainsightService }], target: i0.ɵɵFactoryTarget.Component });
66
78
  DashboardAvailabilityComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.6", type: DashboardAvailabilityComponent, selector: "c8y-dashboard-availability", inputs: { globalRolesIds: "globalRolesIds" }, outputs: { globalRolesIdsChange: "globalRolesIdsChange" }, ngImport: i0, template: "<c8y-form-group class=\"p-b-24 m-b-0\">\n <div class=\"legend form-block\">\n <span>{{ 'Availability' | translate }}</span>\n </div>\n <label for=\"availability\">\n <span class=\"m-r-4\" id=\"availability\">\n {{ 'Global roles' | translate }}\n </span>\n <button\n class=\"btn-help btn-help--sm\"\n [attr.aria-label]=\"'Help' | translate\"\n type=\"button\"\n popover=\"{{\n 'Select the global roles for which the dashboard will be available' | translate\n }}\"\n triggers=\"focus\"\n placement=\"right\"\n container=\"body\"\n >\n <i [c8yIcon]=\"'question-circle-o'\"></i>\n </button>\n </label>\n <c8y-select\n style=\"width: 180px\"\n [items]=\"globalRolesItems\"\n [selected]=\"globalRolesItemsSelected\"\n (onChange)=\"onSelected($event)\"\n ></c8y-select>\n</c8y-form-group>\n", dependencies: [{ kind: "directive", type: i2.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "component", type: i2.SelectComponent, selector: "c8y-select", inputs: ["placeholder", "selectedLabel", "applyLabel", "items", "selected", "updateItems", "disableApplyOnNoSelection"], outputs: ["onChange"] }, { kind: "component", type: i2.FormGroupComponent, selector: "c8y-form-group", inputs: ["hasError", "hasWarning", "hasSuccess", "novalidation", "status"] }, { kind: "directive", type: i3.PopoverDirective, selector: "[popover]", inputs: ["adaptivePosition", "boundariesElement", "popover", "popoverContext", "popoverTitle", "placement", "outsideClick", "triggers", "container", "containerClass", "isOpen", "delay"], outputs: ["onShown", "onHidden"], exportAs: ["bs-popover"] }, { kind: "pipe", type: i2.C8yTranslatePipe, name: "translate" }] });
67
79
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: DashboardAvailabilityComponent, decorators: [{
68
80
  type: Component,
69
81
  args: [{ selector: 'c8y-dashboard-availability', template: "<c8y-form-group class=\"p-b-24 m-b-0\">\n <div class=\"legend form-block\">\n <span>{{ 'Availability' | translate }}</span>\n </div>\n <label for=\"availability\">\n <span class=\"m-r-4\" id=\"availability\">\n {{ 'Global roles' | translate }}\n </span>\n <button\n class=\"btn-help btn-help--sm\"\n [attr.aria-label]=\"'Help' | translate\"\n type=\"button\"\n popover=\"{{\n 'Select the global roles for which the dashboard will be available' | translate\n }}\"\n triggers=\"focus\"\n placement=\"right\"\n container=\"body\"\n >\n <i [c8yIcon]=\"'question-circle-o'\"></i>\n </button>\n </label>\n <c8y-select\n style=\"width: 180px\"\n [items]=\"globalRolesItems\"\n [selected]=\"globalRolesItemsSelected\"\n (onChange)=\"onSelected($event)\"\n ></c8y-select>\n</c8y-form-group>\n" }]
70
- }], ctorParameters: function () { return [{ type: i1.UserGroupService }]; }, propDecorators: { globalRolesIds: [{
82
+ }], ctorParameters: function () { return [{ type: i1.UserGroupService }, { type: i2.GainsightService }]; }, propDecorators: { globalRolesIds: [{
71
83
  type: Input
72
84
  }], globalRolesIdsChange: [{
73
85
  type: Output
74
86
  }] } });
75
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGFzaGJvYXJkLWF2YWlsYWJpbGl0eS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9jb250ZXh0LWRhc2hib2FyZC9kYXNoYm9hcmQtYXZhaWxhYmlsaXR5LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uL2NvbnRleHQtZGFzaGJvYXJkL2Rhc2hib2FyZC1hdmFpbGFiaWxpdHkuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMvRSxPQUFPLEVBQWMsZ0JBQWdCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFM0QsT0FBTyxFQUF3Qix5QkFBeUIsRUFBRSxNQUFNLDJCQUEyQixDQUFDOzs7OztBQU01RixNQUFNLE9BQU8sOEJBQThCO0lBdUJ6QyxZQUFvQixnQkFBa0M7UUFBbEMscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQVA1Qyx5QkFBb0IsR0FBRyxJQUFJLFlBQVksRUFBd0IsQ0FBQztRQUMxRSxxQkFBZ0IsR0FBVyxFQUFFLENBQUM7UUFDOUIsNkJBQXdCLEdBQVcsRUFBRSxDQUFDO1FBQzlCLGdCQUFXLEdBQWlCLEVBQUUsQ0FBQztRQUMvQixjQUFTLEdBQUcsR0FBRyxDQUFDO0lBR2lDLENBQUM7SUF0QjFEOzs7T0FHRztJQUNILElBQ0ksY0FBYztRQUNoQixPQUFPLElBQUksQ0FBQyxlQUFlLENBQUM7SUFDOUIsQ0FBQztJQUNELElBQUksY0FBYyxDQUFDLEdBQXlCO1FBQzFDLElBQUksQ0FBQyxHQUFHLElBQUksR0FBRyxLQUFLLHlCQUF5QixFQUFFO1lBQzdDLElBQUksQ0FBQyxlQUFlLEdBQUcseUJBQXlCLENBQUM7WUFDakQsT0FBTztTQUNSO1FBQ0QsSUFBSSxDQUFDLGVBQWUsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUM7SUFDbEMsQ0FBQztJQVVELEtBQUssQ0FBQyxRQUFRO1FBQ1osSUFBSSxDQUFDLFdBQVcsR0FBRyxNQUFNLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUMvQyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7UUFDckQsSUFBSSxDQUFDLHdCQUF3QixHQUFHLElBQUksQ0FBQywyQkFBMkIsRUFBRSxDQUFDO0lBQ3JFLENBQUM7SUFFRCxVQUFVLENBQUMsS0FBYTtRQUN0QixNQUFNLGdCQUFnQixHQUFHLEtBQUssQ0FBQyxNQUFNLEtBQUssSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQztRQUN2RSxJQUFJLENBQUMsd0JBQXdCLEdBQUcsS0FBSyxDQUFDO1FBRXRDLElBQUksZ0JBQWdCLEVBQUU7WUFDcEIsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO1NBQzNEO2FBQU07WUFDTCxNQUFNLHNCQUFzQixHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDcEQsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsc0JBQXNCLENBQUMsQ0FBQyxDQUFDO1NBQzdEO0lBQ0gsQ0FBQztJQUVPLEtBQUssQ0FBQyxjQUFjO1FBQzFCLE9BQU8sQ0FBQyxNQUFNLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDL0UsQ0FBQztJQUVPLHFCQUFxQjtRQUMzQixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDN0MsSUFBSTtZQUNKLEVBQUU7U0FDSCxDQUFDLENBQUMsQ0FBQztJQUNOLENBQUM7SUFFTywyQkFBMkI7UUFDakMsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLElBQUksSUFBSSxDQUFDLGNBQWMsS0FBSyx5QkFBeUIsRUFBRTtZQUM3RSxPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQztTQUM5QjtRQUNELE9BQU8sSUFBSSxDQUFDLGNBQWM7YUFDdkIsR0FBRyxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEtBQUssWUFBWSxDQUFDLENBQUM7YUFDN0UsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3JCLENBQUM7OzJIQTdEVSw4QkFBOEI7K0dBQTlCLDhCQUE4QiwyS0NUM0MsODJCQTZCQTsyRkRwQmEsOEJBQThCO2tCQUoxQyxTQUFTOytCQUNFLDRCQUE0Qjt1R0FTbEMsY0FBYztzQkFEakIsS0FBSztnQkFXSSxvQkFBb0I7c0JBQTdCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBJVXNlckdyb3VwLCBVc2VyR3JvdXBTZXJ2aWNlIH0gZnJvbSAnQGM4eS9jbGllbnQnO1xuaW1wb3J0IHsgSXRlbSB9IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMnO1xuaW1wb3J0IHsgRGFzaGJvYXJkR2xvYmFsUm9sZXMsIEFMTF9HTE9CQUxfUk9MRVNfU0VMRUNURUQgfSBmcm9tICcuL2NvbnRleHQtZGFzaGJvYXJkLm1vZGVsJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYzh5LWRhc2hib2FyZC1hdmFpbGFiaWxpdHknLFxuICB0ZW1wbGF0ZVVybDogJy4vZGFzaGJvYXJkLWF2YWlsYWJpbGl0eS5jb21wb25lbnQuaHRtbCdcbn0pXG5leHBvcnQgY2xhc3MgRGFzaGJvYXJkQXZhaWxhYmlsaXR5Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgLyoqXG4gICAqIElkcyBvZiBnbG9iYWwgcm9sZXMgYXNzaWduZWQgdG8gdGhlIGRhc2hib2FyZCBvciBhIHN0cmluZyBcImFsbFwiIGluZGljYXRpbmcgdGhlIHNlbGVjdGlvbiBvZiBhbGwgZ2xvYmFsIHJvbGVzLlxuICAgKiBUaGUgdmFsdWUgdW5kZWZpbmVkIGlzIHRyZWF0ZWQgYXMgZXF1aXZhbGVudCB0byAnYWxsJy5cbiAgICovXG4gIEBJbnB1dCgpXG4gIGdldCBnbG9iYWxSb2xlc0lkcygpOiBEYXNoYm9hcmRHbG9iYWxSb2xlcyB7XG4gICAgcmV0dXJuIHRoaXMuX2dsb2JhbFJvbGVzSWRzO1xuICB9XG4gIHNldCBnbG9iYWxSb2xlc0lkcyhpZHM6IERhc2hib2FyZEdsb2JhbFJvbGVzKSB7XG4gICAgaWYgKCFpZHMgfHwgaWRzID09PSBBTExfR0xPQkFMX1JPTEVTX1NFTEVDVEVEKSB7XG4gICAgICB0aGlzLl9nbG9iYWxSb2xlc0lkcyA9IEFMTF9HTE9CQUxfUk9MRVNfU0VMRUNURUQ7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuX2dsb2JhbFJvbGVzSWRzID0gWy4uLmlkc107XG4gIH1cbiAgQE91dHB1dCgpIGdsb2JhbFJvbGVzSWRzQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxEYXNoYm9hcmRHbG9iYWxSb2xlcz4oKTtcbiAgZ2xvYmFsUm9sZXNJdGVtczogSXRlbVtdID0gW107XG4gIGdsb2JhbFJvbGVzSXRlbXNTZWxlY3RlZDogSXRlbVtdID0gW107XG4gIHByaXZhdGUgZ2xvYmFsUm9sZXM6IElVc2VyR3JvdXBbXSA9IFtdO1xuICBwcml2YXRlIFBBR0VfU0laRSA9IDEwMDtcbiAgcHJpdmF0ZSBfZ2xvYmFsUm9sZXNJZHM6IERhc2hib2FyZEdsb2JhbFJvbGVzO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgdXNlckdyb3VwU2VydmljZTogVXNlckdyb3VwU2VydmljZSkge31cblxuICBhc3luYyBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLmdsb2JhbFJvbGVzID0gYXdhaXQgdGhpcy5nZXRHbG9iYWxSb2xlcygpO1xuICAgIHRoaXMuZ2xvYmFsUm9sZXNJdGVtcyA9IHRoaXMubWFwR2xvYmFsUm9sZXNUb0l0ZW1zKCk7XG4gICAgdGhpcy5nbG9iYWxSb2xlc0l0ZW1zU2VsZWN0ZWQgPSB0aGlzLmdldFNlbGVjdGVkR2xvYmFsUm9sZXNJdGVtcygpO1xuICB9XG5cbiAgb25TZWxlY3RlZChpdGVtczogSXRlbVtdKSB7XG4gICAgY29uc3QgYWxsSXRlbXNTZWxlY3RlZCA9IGl0ZW1zLmxlbmd0aCA9PT0gdGhpcy5nbG9iYWxSb2xlc0l0ZW1zLmxlbmd0aDtcbiAgICB0aGlzLmdsb2JhbFJvbGVzSXRlbXNTZWxlY3RlZCA9IGl0ZW1zO1xuXG4gICAgaWYgKGFsbEl0ZW1zU2VsZWN0ZWQpIHtcbiAgICAgIHRoaXMuZ2xvYmFsUm9sZXNJZHNDaGFuZ2UuZW1pdChBTExfR0xPQkFMX1JPTEVTX1NFTEVDVEVEKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3Qgc2VsZWN0ZWRHbG9iYWxSb2xlc0lkcyA9IGl0ZW1zLm1hcChpID0+IGkuaWQpO1xuICAgICAgdGhpcy5nbG9iYWxSb2xlc0lkc0NoYW5nZS5lbWl0KFsuLi5zZWxlY3RlZEdsb2JhbFJvbGVzSWRzXSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBnZXRHbG9iYWxSb2xlcygpIHtcbiAgICByZXR1cm4gKGF3YWl0IHRoaXMudXNlckdyb3VwU2VydmljZS5saXN0KHsgcGFnZVNpemU6IHRoaXMuUEFHRV9TSVpFIH0pKS5kYXRhO1xuICB9XG5cbiAgcHJpdmF0ZSBtYXBHbG9iYWxSb2xlc1RvSXRlbXMoKTogSXRlbVtdIHtcbiAgICByZXR1cm4gdGhpcy5nbG9iYWxSb2xlcy5tYXAoKHsgbmFtZSwgaWQgfSkgPT4gKHtcbiAgICAgIG5hbWUsXG4gICAgICBpZFxuICAgIH0pKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0U2VsZWN0ZWRHbG9iYWxSb2xlc0l0ZW1zKCk6IEl0ZW1bXSB7XG4gICAgaWYgKCF0aGlzLmdsb2JhbFJvbGVzSWRzIHx8IHRoaXMuZ2xvYmFsUm9sZXNJZHMgPT09IEFMTF9HTE9CQUxfUk9MRVNfU0VMRUNURUQpIHtcbiAgICAgIHJldHVybiB0aGlzLmdsb2JhbFJvbGVzSXRlbXM7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmdsb2JhbFJvbGVzSWRzXG4gICAgICAubWFwKGdsb2JhbFJvbGVJZCA9PiB0aGlzLmdsb2JhbFJvbGVzSXRlbXMuZmluZChnUiA9PiBnUi5pZCA9PT0gZ2xvYmFsUm9sZUlkKSlcbiAgICAgIC5maWx0ZXIoQm9vbGVhbik7XG4gIH1cbn1cbiIsIjxjOHktZm9ybS1ncm91cCBjbGFzcz1cInAtYi0yNCBtLWItMFwiPlxuICA8ZGl2IGNsYXNzPVwibGVnZW5kIGZvcm0tYmxvY2tcIj5cbiAgICA8c3Bhbj57eyAnQXZhaWxhYmlsaXR5JyB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgPC9kaXY+XG4gIDxsYWJlbCBmb3I9XCJhdmFpbGFiaWxpdHlcIj5cbiAgICA8c3BhbiBjbGFzcz1cIm0tci00XCIgaWQ9XCJhdmFpbGFiaWxpdHlcIj5cbiAgICAgIHt7ICdHbG9iYWwgcm9sZXMnIHwgdHJhbnNsYXRlIH19XG4gICAgPC9zcGFuPlxuICAgIDxidXR0b25cbiAgICAgIGNsYXNzPVwiYnRuLWhlbHAgYnRuLWhlbHAtLXNtXCJcbiAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiJ0hlbHAnIHwgdHJhbnNsYXRlXCJcbiAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgcG9wb3Zlcj1cInt7XG4gICAgICAgICdTZWxlY3QgdGhlIGdsb2JhbCByb2xlcyBmb3Igd2hpY2ggdGhlIGRhc2hib2FyZCB3aWxsIGJlIGF2YWlsYWJsZScgfCB0cmFuc2xhdGVcbiAgICAgIH19XCJcbiAgICAgIHRyaWdnZXJzPVwiZm9jdXNcIlxuICAgICAgcGxhY2VtZW50PVwicmlnaHRcIlxuICAgICAgY29udGFpbmVyPVwiYm9keVwiXG4gICAgPlxuICAgICAgPGkgW2M4eUljb25dPVwiJ3F1ZXN0aW9uLWNpcmNsZS1vJ1wiPjwvaT5cbiAgICA8L2J1dHRvbj5cbiAgPC9sYWJlbD5cbiAgPGM4eS1zZWxlY3RcbiAgICBzdHlsZT1cIndpZHRoOiAxODBweFwiXG4gICAgW2l0ZW1zXT1cImdsb2JhbFJvbGVzSXRlbXNcIlxuICAgIFtzZWxlY3RlZF09XCJnbG9iYWxSb2xlc0l0ZW1zU2VsZWN0ZWRcIlxuICAgIChvbkNoYW5nZSk9XCJvblNlbGVjdGVkKCRldmVudClcIlxuICA+PC9jOHktc2VsZWN0PlxuPC9jOHktZm9ybS1ncm91cD5cbiJdfQ==
87
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGFzaGJvYXJkLWF2YWlsYWJpbGl0eS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9jb250ZXh0LWRhc2hib2FyZC9kYXNoYm9hcmQtYXZhaWxhYmlsaXR5LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uL2NvbnRleHQtZGFzaGJvYXJkL2Rhc2hib2FyZC1hdmFpbGFiaWxpdHkuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMvRSxPQUFPLEVBQWMsZ0JBQWdCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDM0QsT0FBTyxFQUFFLGdCQUFnQixFQUFRLE1BQU0scUJBQXFCLENBQUM7QUFDN0QsT0FBTyxFQUVMLHlCQUF5QixFQUN6QixrQkFBa0IsRUFDbkIsTUFBTSwyQkFBMkIsQ0FBQzs7Ozs7QUFNbkMsTUFBTSxPQUFPLDhCQUE4QjtJQXVCekMsWUFDVSxnQkFBa0MsRUFDbEMsZ0JBQWtDO1FBRGxDLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUFDbEMscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQVRsQyx5QkFBb0IsR0FBRyxJQUFJLFlBQVksRUFBd0IsQ0FBQztRQUMxRSxxQkFBZ0IsR0FBVyxFQUFFLENBQUM7UUFDOUIsNkJBQXdCLEdBQVcsRUFBRSxDQUFDO1FBQzlCLGdCQUFXLEdBQWlCLEVBQUUsQ0FBQztRQUMvQixjQUFTLEdBQUcsR0FBRyxDQUFDO0lBTXJCLENBQUM7SUF6Qko7OztPQUdHO0lBQ0gsSUFDSSxjQUFjO1FBQ2hCLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQztJQUM5QixDQUFDO0lBQ0QsSUFBSSxjQUFjLENBQUMsR0FBeUI7UUFDMUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxHQUFHLEtBQUsseUJBQXlCLEVBQUU7WUFDN0MsSUFBSSxDQUFD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QUE4QjsrR0FBOUIsOEJBQThCLDJLQ2IzQyw4MkJBNkJBOzJGRGhCYSw4QkFBOEI7a0JBSjFDLFNBQVM7K0JBQ0UsNEJBQTRCO3NJQVNsQyxjQUFjO3NCQURqQixLQUFLO2dCQVdJLG9CQUFvQjtzQkFBN0IsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25Jbml0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IElVc2VyR3JvdXAsIFVzZXJHcm91cFNlcnZpY2UgfSBmcm9tICdAYzh5L2NsaWVudCc7XG5pbXBvcnQgeyBHYWluc2lnaHRTZXJ2aWNlLCBJdGVtIH0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cyc7XG5pbXBvcnQge1xuICBEYXNoYm9hcmRHbG9iYWxSb2xlcyxcbiAgQUxMX0dMT0JBTF9ST0xFU19TRUxFQ1RFRCxcbiAgUFJPRFVDVF9FWFBFUklFTkNFXG59IGZyb20gJy4vY29udGV4dC1kYXNoYm9hcmQubW9kZWwnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjOHktZGFzaGJvYXJkLWF2YWlsYWJpbGl0eScsXG4gIHRlbXBsYXRlVXJsOiAnLi9kYXNoYm9hcmQtYXZhaWxhYmlsaXR5LmNvbXBvbmVudC5odG1sJ1xufSlcbmV4cG9ydCBjbGFzcyBEYXNoYm9hcmRBdmFpbGFiaWxpdHlDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICAvKipcbiAgICogSWRzIG9mIGdsb2JhbCByb2xlcyBhc3NpZ25lZCB0byB0aGUgZGFzaGJvYXJkIG9yIGEgc3RyaW5nIFwiYWxsXCIgaW5kaWNhdGluZyB0aGUgc2VsZWN0aW9uIG9mIGFsbCBnbG9iYWwgcm9sZXMuXG4gICAqIFRoZSB2YWx1ZSB1bmRlZmluZWQgaXMgdHJlYXRlZCBhcyBlcXVpdmFsZW50IHRvICdhbGwnLlxuICAgKi9cbiAgQElucHV0KClcbiAgZ2V0IGdsb2JhbFJvbGVzSWRzKCk6IERhc2hib2FyZEdsb2JhbFJvbGVzIHtcbiAgICByZXR1cm4gdGhpcy5fZ2xvYmFsUm9sZXNJZHM7XG4gIH1cbiAgc2V0IGdsb2JhbFJvbGVzSWRzKGlkczogRGFzaGJvYXJkR2xvYmFsUm9sZXMpIHtcbiAgICBpZiAoIWlkcyB8fCBpZHMgPT09IEFMTF9HTE9CQUxfUk9MRVNfU0VMRUNURUQpIHtcbiAgICAgIHRoaXMuX2dsb2JhbFJvbGVzSWRzID0gQUxMX0dMT0JBTF9ST0xFU19TRUxFQ1RFRDtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5fZ2xvYmFsUm9sZXNJZHMgPSBbLi4uaWRzXTtcbiAgfVxuICBAT3V0cHV0KCkgZ2xvYmFsUm9sZXNJZHNDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPERhc2hib2FyZEdsb2JhbFJvbGVzPigpO1xuICBnbG9iYWxSb2xlc0l0ZW1zOiBJdGVtW10gPSBbXTtcbiAgZ2xvYmFsUm9sZXNJdGVtc1NlbGVjdGVkOiBJdGVtW10gPSBbXTtcbiAgcHJpdmF0ZSBnbG9iYWxSb2xlczogSVVzZXJHcm91cFtdID0gW107XG4gIHByaXZhdGUgUEFHRV9TSVpFID0gMTAwO1xuICBwcml2YXRlIF9nbG9iYWxSb2xlc0lkczogRGFzaGJvYXJkR2xvYmFsUm9sZXM7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSB1c2VyR3JvdXBTZXJ2aWNlOiBVc2VyR3JvdXBTZXJ2aWNlLFxuICAgIHByaXZhdGUgZ2FpbnNpZ2h0U2VydmljZTogR2FpbnNpZ2h0U2VydmljZVxuICApIHt9XG5cbiAgYXN5bmMgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5nbG9iYWxSb2xlcyA9IGF3YWl0IHRoaXMuZ2V0R2xvYmFsUm9sZXMoKTtcbiAgICB0aGlzLmdsb2JhbFJvbGVzSXRlbXMgPSB0aGlzLm1hcEdsb2JhbFJvbGVzVG9JdGVtcygpO1xuICAgIHRoaXMuZ2xvYmFsUm9sZXNJdGVtc1NlbGVjdGVkID0gdGhpcy5nZXRTZWxlY3RlZEdsb2JhbFJvbGVzSXRlbXMoKTtcbiAgfVxuXG4gIG9uU2VsZWN0ZWQoaXRlbXM6IEl0ZW1bXSkge1xuICAgIGNvbnN0IGFsbEl0ZW1zU2VsZWN0ZWQgPSBpdGVtcy5sZW5ndGggPT09IHRoaXMuZ2xvYmFsUm9sZXNJdGVtcy5sZW5ndGg7XG4gICAgdGhpcy5nbG9iYWxSb2xlc0l0ZW1zU2VsZWN0ZWQgPSBpdGVtcztcblxuICAgIGlmIChhbGxJdGVtc1NlbGVjdGVkKSB7XG4gICAgICB0aGlzLmdsb2JhbFJvbGVzSWRzQ2hhbmdlLmVtaXQoQUxMX0dMT0JBTF9ST0xFU19TRUxFQ1RFRCk7XG4gICAgICB0aGlzLmdhaW5zaWdodFNlcnZpY2UudHJpZ2dlckV2ZW50KFBST0RVQ1RfRVhQRVJJRU5DRS5EQVNIQk9BUkQuRVZFTlRTLkRBU0hCT0FSRFMsIHtcbiAgICAgICAgY29tcG9uZW50OiBQUk9EVUNUX0VYUEVSSUVOQ0UuREFTSEJPQVJELkNPTVBPTkVOVFMuREFTSEJPQVJEX0FWQUlMQUJJTElUWSxcbiAgICAgICAgYWN0aW9uOiBQUk9EVUNUX0VYUEVSSUVOQ0UuREFTSEJPQVJELkFDVElPTlMuQVBQTFlfR0xPQkFMX1JPTEVTX0NIQU5HRVMsXG4gICAgICAgIGdsb2JhbFJvbGVzOiBBTExfR0xPQkFMX1JPTEVTX1NFTEVDVEVEXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3Qgc2VsZWN0ZWRHbG9iYWxSb2xlc0lkcyA9IGl0ZW1zLm1hcChpID0+IGkuaWQpO1xuICAgICAgdGhpcy5nbG9iYWxSb2xlc0lkc0NoYW5nZS5lbWl0KFsuLi5zZWxlY3RlZEdsb2JhbFJvbGVzSWRzXSk7XG5cbiAgICAgIHRoaXMuZ2FpbnNpZ2h0U2VydmljZS50cmlnZ2VyRXZlbnQoUFJPRFVDVF9FWFBFUklFTkNFLkRBU0hCT0FSRC5FVkVOVFMuREFTSEJPQVJEUywge1xuICAgICAgICBjb21wb25lbnQ6IFBST0RVQ1RfRVhQRVJJRU5DRS5EQVNIQk9BUkQuQ09NUE9ORU5UUy5EQVNIQk9BUkRfQVZBSUxBQklMSVRZLFxuICAgICAgICBhY3Rpb246IFBST0RVQ1RfRVhQRVJJRU5DRS5EQVNIQk9BUkQuQUNUSU9OUy5BUFBMWV9HTE9CQUxfUk9MRVNfQ0hBTkdFUyxcbiAgICAgICAgZ2xvYmFsUm9sZXM6IHNlbGVjdGVkR2xvYmFsUm9sZXNJZHM/LnNvcnQoKT8uam9pbigpXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGdldEdsb2JhbFJvbGVzKCkge1xuICAgIHJldHVybiAoYXdhaXQgdGhpcy51c2VyR3JvdXBTZXJ2aWNlLmxpc3QoeyBwYWdlU2l6ZTogdGhpcy5QQUdFX1NJWkUgfSkpLmRhdGE7XG4gIH1cblxuICBwcml2YXRlIG1hcEdsb2JhbFJvbGVzVG9JdGVtcygpOiBJdGVtW10ge1xuICAgIHJldHVybiB0aGlzLmdsb2JhbFJvbGVzLm1hcCgoeyBuYW1lLCBpZCB9KSA9PiAoe1xuICAgICAgbmFtZSxcbiAgICAgIGlkXG4gICAgfSkpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRTZWxlY3RlZEdsb2JhbFJvbGVzSXRlbXMoKTogSXRlbVtdIHtcbiAgICBpZiAoIXRoaXMuZ2xvYmFsUm9sZXNJZHMgfHwgdGhpcy5nbG9iYWxSb2xlc0lkcyA9PT0gQUxMX0dMT0JBTF9ST0xFU19TRUxFQ1RFRCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2xvYmFsUm9sZXNJdGVtcztcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuZ2xvYmFsUm9sZXNJZHNcbiAgICAgIC5tYXAoZ2xvYmFsUm9sZUlkID0+IHRoaXMuZ2xvYmFsUm9sZXNJdGVtcy5maW5kKGdSID0+IGdSLmlkID09PSBnbG9iYWxSb2xlSWQpKVxuICAgICAgLmZpbHRlcihCb29sZWFuKTtcbiAgfVxufVxuIiwiPGM4eS1mb3JtLWdyb3VwIGNsYXNzPVwicC1iLTI0IG0tYi0wXCI+XG4gIDxkaXYgY2xhc3M9XCJsZWdlbmQgZm9ybS1ibG9ja1wiPlxuICAgIDxzcGFuPnt7ICdBdmFpbGFiaWxpdHknIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxuICA8L2Rpdj5cbiAgPGxhYmVsIGZvcj1cImF2YWlsYWJpbGl0eVwiPlxuICAgIDxzcGFuIGNsYXNzPVwibS1yLTRcIiBpZD1cImF2YWlsYWJpbGl0eVwiPlxuICAgICAge3sgJ0dsb2JhbCByb2xlcycgfCB0cmFuc2xhdGUgfX1cbiAgICA8L3NwYW4+XG4gICAgPGJ1dHRvblxuICAgICAgY2xhc3M9XCJidG4taGVscCBidG4taGVscC0tc21cIlxuICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCInSGVscCcgfCB0cmFuc2xhdGVcIlxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICBwb3BvdmVyPVwie3tcbiAgICAgICAgJ1NlbGVjdCB0aGUgZ2xvYmFsIHJvbGVzIGZvciB3aGljaCB0aGUgZGFzaGJvYXJkIHdpbGwgYmUgYXZhaWxhYmxlJyB8IHRyYW5zbGF0ZVxuICAgICAgfX1cIlxuICAgICAgdHJpZ2dlcnM9XCJmb2N1c1wiXG4gICAgICBwbGFjZW1lbnQ9XCJyaWdodFwiXG4gICAgICBjb250YWluZXI9XCJib2R5XCJcbiAgICA+XG4gICAgICA8aSBbYzh5SWNvbl09XCIncXVlc3Rpb24tY2lyY2xlLW8nXCI+PC9pPlxuICAgIDwvYnV0dG9uPlxuICA8L2xhYmVsPlxuICA8Yzh5LXNlbGVjdFxuICAgIHN0eWxlPVwid2lkdGg6IDE4MHB4XCJcbiAgICBbaXRlbXNdPVwiZ2xvYmFsUm9sZXNJdGVtc1wiXG4gICAgW3NlbGVjdGVkXT1cImdsb2JhbFJvbGVzSXRlbXNTZWxlY3RlZFwiXG4gICAgKG9uQ2hhbmdlKT1cIm9uU2VsZWN0ZWQoJGV2ZW50KVwiXG4gID48L2M4eS1zZWxlY3Q+XG48L2M4eS1mb3JtLWdyb3VwPlxuIl19