@c8y/ngx-components 1016.0.476 → 1016.0.483
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.
- package/core/bootstrap/cookie-banner/cookie-banner.service.d.ts +1 -1
- package/core/common/ApplicationOptions.d.ts +2 -0
- package/core/header/right-drawer/right-drawer.component.d.ts +22 -0
- package/core/product-experience/gainsight.service.d.ts +96 -22
- package/core/product-experience/index.d.ts +1 -0
- package/core/product-experience/product-experience.module.d.ts +18 -5
- package/core/product-experience/user-engagements.service.d.ts +109 -0
- package/core/shared/core.model.d.ts +22 -0
- package/core/user/user-edit-modal.component.d.ts +36 -10
- package/core/user/user-edit.component.d.ts +7 -12
- package/device-grid/device-grid.service.d.ts +3 -4
- package/esm2020/core/action-bar/action-bar.component.mjs +10 -7
- package/esm2020/core/bootstrap/cookie-banner/cookie-banner.service.mjs +2 -2
- package/esm2020/core/common/ApplicationOptions.mjs +1 -1
- package/esm2020/core/dynamic-forms/validation/validation-config.factory.mjs +2 -2
- package/esm2020/core/header/right-drawer/right-drawer.component.mjs +5 -3
- package/esm2020/core/product-experience/gainsight.service.mjs +174 -71
- package/esm2020/core/product-experience/index.mjs +2 -1
- package/esm2020/core/product-experience/product-experience.module.mjs +42 -24
- package/esm2020/core/product-experience/user-engagements.service.mjs +174 -0
- package/esm2020/core/shared/core.model.mjs +15 -0
- package/esm2020/core/user/user-edit-modal.component.mjs +73 -45
- package/esm2020/core/user/user-edit.component.mjs +38 -43
- package/esm2020/device-grid/device-grid.service.mjs +6 -15
- package/esm2020/sensor-phone/sensor-phone-modal.component.mjs +26 -15
- package/esm2020/sensor-phone/sensor-phone.model.mjs +13 -0
- package/esm2020/sensor-phone/sensor-phone.service.mjs +5 -7
- package/esm2020/sub-assets/delete-assets-modal/delete-assets-modal.component.mjs +13 -3
- package/esm2020/sub-assets/shared/sub-assets.model.mjs +11 -0
- package/fesm2015/c8y-ngx-components-device-grid.mjs +4 -15
- package/fesm2015/c8y-ngx-components-device-grid.mjs.map +1 -1
- package/fesm2015/c8y-ngx-components-sensor-phone.mjs +40 -19
- package/fesm2015/c8y-ngx-components-sensor-phone.mjs.map +1 -1
- package/fesm2015/c8y-ngx-components-sub-assets.mjs +22 -2
- package/fesm2015/c8y-ngx-components-sub-assets.mjs.map +1 -1
- package/fesm2015/c8y-ngx-components.mjs +513 -173
- package/fesm2015/c8y-ngx-components.mjs.map +1 -1
- package/fesm2020/c8y-ngx-components-device-grid.mjs +4 -13
- package/fesm2020/c8y-ngx-components-device-grid.mjs.map +1 -1
- package/fesm2020/c8y-ngx-components-sensor-phone.mjs +40 -19
- package/fesm2020/c8y-ngx-components-sensor-phone.mjs.map +1 -1
- package/fesm2020/c8y-ngx-components-sub-assets.mjs +22 -2
- package/fesm2020/c8y-ngx-components-sub-assets.mjs.map +1 -1
- package/fesm2020/c8y-ngx-components.mjs +497 -166
- package/fesm2020/c8y-ngx-components.mjs.map +1 -1
- package/locales/locales.pot +4 -4
- package/package.json +2 -2
- package/sensor-phone/sensor-phone.model.d.ts +18 -0
- package/sensor-phone/sensor-phone.service.d.ts +2 -3
- package/sub-assets/delete-assets-modal/delete-assets-modal.component.d.ts +1 -0
- package/sub-assets/shared/sub-assets.model.d.ts +15 -0
|
@@ -4,9 +4,7 @@ import { clone } from 'lodash-es';
|
|
|
4
4
|
import { BsModalService } from 'ngx-bootstrap/modal';
|
|
5
5
|
import { AlertService } from '../alert/alert.service';
|
|
6
6
|
import { AppStateService } from '../common/ui-state.service';
|
|
7
|
-
import { UserPreferencesService } from '../common/user-preferences/user-preferences.service';
|
|
8
7
|
import { TranslateService } from '../i18n/translate.service';
|
|
9
|
-
import { GainsightService } from '../product-experience/gainsight.service';
|
|
10
8
|
import { UserTotpSetupComponent } from './user-totp-setup.component';
|
|
11
9
|
import * as i0 from "@angular/core";
|
|
12
10
|
import * as i1 from "../common/ui-state.service";
|
|
@@ -14,19 +12,17 @@ import * as i2 from "../i18n/translate.service";
|
|
|
14
12
|
import * as i3 from "ngx-bootstrap/modal";
|
|
15
13
|
import * as i4 from "../alert/alert.service";
|
|
16
14
|
import * as i5 from "@c8y/client";
|
|
17
|
-
import * as i6 from "../
|
|
18
|
-
import * as i7 from "../
|
|
19
|
-
import * as i8 from "
|
|
20
|
-
import * as i9 from "../forms/
|
|
21
|
-
import * as i10 from "
|
|
22
|
-
import * as i11 from "../
|
|
23
|
-
import * as i12 from "
|
|
24
|
-
import * as i13 from "../
|
|
25
|
-
import * as i14 from "
|
|
26
|
-
import * as i15 from "../authentication/new-password.component";
|
|
27
|
-
import * as i16 from "../i18n/c8y-translate.pipe";
|
|
15
|
+
import * as i6 from "../forms/phone-validation.directive";
|
|
16
|
+
import * as i7 from "../forms/default-validation.directive";
|
|
17
|
+
import * as i8 from "@angular/forms";
|
|
18
|
+
import * as i9 from "../forms/form-group.component";
|
|
19
|
+
import * as i10 from "../forms/required-input-placeholder.directive";
|
|
20
|
+
import * as i11 from "../i18n/c8y-translate.directive";
|
|
21
|
+
import * as i12 from "@angular/common";
|
|
22
|
+
import * as i13 from "../authentication/new-password.component";
|
|
23
|
+
import * as i14 from "../i18n/c8y-translate.pipe";
|
|
28
24
|
export class UserEditComponent {
|
|
29
|
-
constructor(state, translate, bsModalService, alert, userService, tenantLoginOptionsService, tenantService
|
|
25
|
+
constructor(state, translate, bsModalService, alert, userService, tenantLoginOptionsService, tenantService) {
|
|
30
26
|
this.state = state;
|
|
31
27
|
this.translate = translate;
|
|
32
28
|
this.bsModalService = bsModalService;
|
|
@@ -34,16 +30,14 @@ export class UserEditComponent {
|
|
|
34
30
|
this.userService = userService;
|
|
35
31
|
this.tenantLoginOptionsService = tenantLoginOptionsService;
|
|
36
32
|
this.tenantService = tenantService;
|
|
37
|
-
this.userPreferencesService = userPreferencesService;
|
|
38
|
-
this.gainsightService = gainsightService;
|
|
39
33
|
this.loading = false;
|
|
40
|
-
this.
|
|
34
|
+
this.showProductExperienceOptions = false;
|
|
41
35
|
this.isUsageTrackingEnabled = true;
|
|
42
|
-
this.
|
|
36
|
+
this.isUserEngagementPreferenceEnabled = true;
|
|
43
37
|
this.onUser = new EventEmitter();
|
|
44
38
|
this.onLanguage = new EventEmitter();
|
|
45
|
-
this.
|
|
46
|
-
this.
|
|
39
|
+
this.onUsageTrackingChange = new EventEmitter();
|
|
40
|
+
this.onUserEngagementPreferenceChange = new EventEmitter();
|
|
47
41
|
this.onCancel = new EventEmitter();
|
|
48
42
|
this.userHasActiveTotp = false;
|
|
49
43
|
this.userCanSetupTotp = false;
|
|
@@ -68,18 +62,12 @@ export class UserEditComponent {
|
|
|
68
62
|
this.isPhoneRequired = true;
|
|
69
63
|
}
|
|
70
64
|
}
|
|
71
|
-
async onEnablingProductUsageTracking(isUsageTrackingEnabled) {
|
|
72
|
-
if (isUsageTrackingEnabled && this.isGainsightBotEnabled === undefined) {
|
|
73
|
-
this.isGainsightBotEnabled = await this.userPreferencesService
|
|
74
|
-
.get(this.gainsightService.USER_PREFERENCES_GAINSIGHT_BOT_KEY)
|
|
75
|
-
.toPromise();
|
|
76
|
-
}
|
|
77
|
-
}
|
|
78
|
-
get langs() {
|
|
79
|
-
return this.state.state.langs;
|
|
80
|
-
}
|
|
81
65
|
setupTotp() {
|
|
82
|
-
this.bsModalService.show(UserTotpSetupComponent, {
|
|
66
|
+
this.bsModalService.show(UserTotpSetupComponent, {
|
|
67
|
+
class: 'modal-sm',
|
|
68
|
+
ariaDescribedby: 'modal-body',
|
|
69
|
+
ariaLabelledBy: 'modal-title'
|
|
70
|
+
});
|
|
83
71
|
this.cancel(); // to close the user edit modal and prevent console errors on logout
|
|
84
72
|
}
|
|
85
73
|
cancel() {
|
|
@@ -89,15 +77,22 @@ export class UserEditComponent {
|
|
|
89
77
|
if (this.loading) {
|
|
90
78
|
return;
|
|
91
79
|
}
|
|
92
|
-
if (this.
|
|
93
|
-
this.
|
|
94
|
-
|
|
80
|
+
if (this.showProductExperienceOptions) {
|
|
81
|
+
this.onUsageTrackingChange.emit(this.isUsageTrackingEnabled);
|
|
82
|
+
/**
|
|
83
|
+
* Emits a user engagement preference change event.
|
|
84
|
+
* If usage tracking is disabled, it emits `false`. Otherwise, it emits the current state of the user engagement preference.
|
|
85
|
+
*/
|
|
86
|
+
this.onUserEngagementPreferenceChange.emit(this.isUsageTrackingEnabled === false ? false : this.isUserEngagementPreferenceEnabled);
|
|
95
87
|
}
|
|
96
88
|
this.onUser.emit(this._user);
|
|
97
89
|
}
|
|
98
90
|
onNewPasswordChanged(newPassword) {
|
|
99
91
|
this._user.password = newPassword.password;
|
|
100
92
|
}
|
|
93
|
+
get langs() {
|
|
94
|
+
return this.state.state.langs;
|
|
95
|
+
}
|
|
101
96
|
async initializeTotpSettings() {
|
|
102
97
|
try {
|
|
103
98
|
this.userCanSetupTotp = await this.canUserSetupTotp();
|
|
@@ -116,32 +111,32 @@ export class UserEditComponent {
|
|
|
116
111
|
return loginOptions.some(({ tfaStrategy = '' }) => tfaStrategy.toLowerCase() === 'totp');
|
|
117
112
|
}
|
|
118
113
|
}
|
|
119
|
-
UserEditComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: UserEditComponent, deps: [{ token: i1.AppStateService }, { token: i2.TranslateService }, { token: i3.BsModalService }, { token: i4.AlertService }, { token: i5.UserService }, { token: i5.TenantLoginOptionsService }, { token: i5.TenantService }
|
|
120
|
-
UserEditComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.6", type: UserEditComponent, selector: "c8y-user-edit", inputs: { lang: "lang", loading: "loading", user: "user", showProductUsageSetting: "showProductUsageSetting", isUsageTrackingEnabled: "isUsageTrackingEnabled", isGainsightBotEnabled: "isGainsightBotEnabled" }, outputs: { onUser: "onUser", onLanguage: "onLanguage", onProductExperience: "onProductExperience", onGainsightBot: "onGainsightBot", onCancel: "onCancel" }, ngImport: i0, template: "<form #userForm=\"ngForm\" (ngSubmit)=\"userForm.form.valid && save()\">\n <div class=\"d-block p-24 p-b-0\">\n <div class=\"alert alert-warning\" role=\"alert\" *ngIf=\"userIsExternal\" translate>\n Some of the user settings are not editable here because they are managed via your\n authorization server.\n </div>\n <c8y-form-group>\n <label translate for=\"userName\">Username (for example, email)</label>\n <input\n id=\"userName\"\n class=\"form-control\"\n [(ngModel)]=\"user.userName\"\n name=\"userName\"\n autocomplete=\"off\"\n required\n maxlength=\"254\"\n placeholder=\"{{ 'e.g. joe.doe@example.com`LOCALIZE`' | translate }}\"\n [disabled]=\"user.id\"\n c8yDefaultValidation=\"user\"\n />\n </c8y-form-group>\n\n <c8y-form-group>\n <label translate for=\"displayName\">Login alias</label>\n <input\n id=\"displayName\"\n class=\"form-control\"\n [(ngModel)]=\"user.displayName\"\n name=\"displayName\"\n autocomplete=\"off\"\n maxlength=\"254\"\n placeholder=\"{{ 'e.g. joe.doe`LOCALIZE`' | translate }}\"\n [disabled]=\"userIsExternal\"\n c8yDefaultValidation=\"loginAlias\"\n />\n </c8y-form-group>\n\n <c8y-form-group [hasWarning]=\"!user.email\">\n <label translate for=\"userEmail\">Email</label>\n <input\n id=\"userEmail\"\n class=\"form-control\"\n type=\"email\"\n name=\"email\"\n [maxlength]=\"254\"\n autocomplete=\"off\"\n placeholder=\"{{ 'e.g. joe.doe@example.com`LOCALIZE`' | translate }}\"\n [(ngModel)]=\"user.email\"\n email\n [required]=\"true\"\n [disabled]=\"userIsExternal\"\n />\n </c8y-form-group>\n\n <div class=\"row\">\n <div class=\"col-sm-6\">\n <c8y-form-group>\n <label translate for=\"userFirstName\">First name</label>\n <input\n id=\"userFirstName\"\n class=\"form-control\"\n autocomplete=\"off\"\n maxlength=\"50\"\n name=\"firstName\"\n [(ngModel)]=\"user.firstName\"\n [disabled]=\"userIsExternal\"\n />\n </c8y-form-group>\n </div>\n <div class=\"col-sm-6\">\n <c8y-form-group>\n <label translate for=\"userLastName\">Last name</label>\n <input\n id=\"userLastName\"\n class=\"form-control\"\n autocomplete=\"off\"\n maxlength=\"50\"\n name=\"lastName\"\n [(ngModel)]=\"user.lastName\"\n [disabled]=\"userIsExternal\"\n />\n </c8y-form-group>\n </div>\n </div>\n\n <c8y-form-group>\n <label translate for=\"userTelephone\">Telephone</label>\n <input\n id=\"userTelephone\"\n class=\"form-control\"\n autocomplete=\"off\"\n name=\"phone\"\n maxlength=\"254\"\n [(ngModel)]=\"user.phone\"\n placeholder=\"{{ 'e.g. +49 9 876 543 210`LOCALIZE`' | translate }}\"\n c8yPhoneValidation\n c8yDefaultValidation=\"phoneNumber\"\n [required]=\"isPhoneRequired\"\n [disabled]=\"userIsExternal\"\n />\n </c8y-form-group>\n\n <c8y-form-group>\n <label translate for=\"userLang\">Language</label>\n <div class=\"c8y-select-wrapper\">\n <select\n id=\"userLang\"\n class=\"form-control\"\n #selectLang\n name=\"lang\"\n [(ngModel)]=\"lang\"\n (change)=\"onLanguage.emit(selectLang.value)\"\n >\n <option *ngFor=\"let lang of langs\" [value]=\"lang\">\n {{ translate.getNativeLanguage(lang) }}\n </option>\n </select>\n <span></span>\n </div>\n </c8y-form-group>\n\n <c8y-form-group class=\"p-t-8 p-b-8 separator-top\" *ngIf=\"showProductUsageSetting\">\n <strong translate>Product experience</strong>\n <label class=\"c8y-switch\" for=\"productUsageTracking\">\n <input\n id=\"productUsageTracking\"\n name=\"productUsageTracking\"\n type=\"checkbox\"\n (change)=\"onEnablingProductUsageTracking(isUsageTrackingEnabled)\"\n [(ngModel)]=\"isUsageTrackingEnabled\"\n />\n <span></span>\n {{ 'Enable anonymous tracking to enhance the product experience' | translate }}\n </label>\n <ng-container *ngIf=\"isUsageTrackingEnabled\">\n <label class=\"c8y-switch m-l-0\" for=\"knowledgeHubBot\">\n <input\n id=\"knowledgeHubBot\"\n name=\"knowledgeHubBot\"\n type=\"checkbox\"\n [(ngModel)]=\"isGainsightBotEnabled\"\n />\n <span></span>\n {{ 'Enable Knowledge Hub' | translate }}\n </label>\n </ng-container>\n </c8y-form-group>\n\n <div class=\"form-group\" *ngIf=\"!userIsExternal\">\n <label class=\"control-label\">{{ 'Login options' | translate }}</label>\n <c8y-new-password (password)=\"onNewPasswordChanged($event)\"></c8y-new-password>\n <button\n title=\"{{ 'Set up two-factor authentication' | translate }}\"\n class=\"btn btn-default\"\n type=\"button\"\n (click)=\"setupTotp()\"\n *ngIf=\"userCanSetupTotp && !userHasActiveTotp && isTfaEnabled\"\n >\n {{ 'Set up two-factor authentication' | translate }}\n </button>\n </div>\n\n <c8y-form-group *ngIf=\"!!(state.state$ | async).newsletter\">\n <label translate>Newsletter</label>\n <label\n title=\"{{ 'Send me information about outages, maintenance or updates.' | translate }}\"\n class=\"c8y-checkbox\"\n >\n <input\n type=\"checkbox\"\n name=\"newsletter\"\n [(ngModel)]=\"user.newsletter\"\n [disabled]=\"userIsExternal\"\n />\n <span></span>\n <span>\n {{ 'Send me information about outages, maintenance or updates.' | translate }}\n </span>\n </label>\n </c8y-form-group>\n </div>\n <div class=\"modal-footer separator-top bg-white sticky-bottom\">\n <button\n title=\"{{ 'Cancel' | translate }}\"\n class=\"btn btn-default\"\n type=\"button\"\n (click)=\"cancel()\"\n >\n {{ 'Cancel' | translate }}\n </button>\n <button\n title=\"{{ 'Save' | translate }}\"\n class=\"btn btn-primary\"\n type=\"submit\"\n [disabled]=\"!userForm.form.valid || userForm.form.pristine || loading\"\n >\n {{ 'Save' | translate }}\n </button>\n </div>\n</form>\n", dependencies: [{ kind: "directive", type: i8.PhoneValidationDirective, selector: "[c8yPhoneValidation]" }, { kind: "directive", type: i9.DefaultValidationDirective, selector: "[c8yDefaultValidation]", inputs: ["c8yDefaultValidation"] }, { kind: "directive", type: i10.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i10.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i10.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i10.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i10.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i10.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i10.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i10.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i10.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i10.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i10.EmailValidator, selector: "[email][formControlName],[email][formControl],[email][ngModel]", inputs: ["email"] }, { kind: "directive", type: i10.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i10.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: i11.FormGroupComponent, selector: "c8y-form-group", inputs: ["hasError", "hasWarning", "hasSuccess", "novalidation", "status"] }, { kind: "directive", type: i12.RequiredInputPlaceholderDirective, selector: "input[required], input[formControlName]" }, { kind: "directive", type: i13.C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: i14.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i14.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i15.NewPasswordComponent, selector: "c8y-new-password", outputs: ["password"] }, { kind: "pipe", type: i16.C8yTranslatePipe, name: "translate" }, { kind: "pipe", type: i14.AsyncPipe, name: "async" }] });
|
|
114
|
+
UserEditComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: UserEditComponent, deps: [{ token: i1.AppStateService }, { token: i2.TranslateService }, { token: i3.BsModalService }, { token: i4.AlertService }, { token: i5.UserService }, { token: i5.TenantLoginOptionsService }, { token: i5.TenantService }], target: i0.ɵɵFactoryTarget.Component });
|
|
115
|
+
UserEditComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.6", type: UserEditComponent, selector: "c8y-user-edit", inputs: { lang: "lang", loading: "loading", user: "user", showProductExperienceOptions: "showProductExperienceOptions", isUsageTrackingEnabled: "isUsageTrackingEnabled", isUserEngagementPreferenceEnabled: "isUserEngagementPreferenceEnabled" }, outputs: { onUser: "onUser", onLanguage: "onLanguage", onUsageTrackingChange: "onUsageTrackingChange", onUserEngagementPreferenceChange: "onUserEngagementPreferenceChange", onCancel: "onCancel" }, ngImport: i0, template: "<form #userForm=\"ngForm\" (ngSubmit)=\"userForm.form.valid && save()\">\n <div class=\"d-block p-24 p-b-0\">\n <div class=\"alert alert-warning\" role=\"alert\" *ngIf=\"userIsExternal\" translate>\n Some of the user settings are not editable here because they are managed via your\n authorization server.\n </div>\n <c8y-form-group>\n <label translate for=\"userName\">Username (for example, email)</label>\n <input\n id=\"userName\"\n class=\"form-control\"\n [(ngModel)]=\"user.userName\"\n name=\"userName\"\n autocomplete=\"off\"\n required\n maxlength=\"254\"\n placeholder=\"{{ 'e.g. joe.doe@example.com`LOCALIZE`' | translate }}\"\n [disabled]=\"user.id\"\n c8yDefaultValidation=\"user\"\n />\n </c8y-form-group>\n\n <c8y-form-group>\n <label translate for=\"displayName\">Login alias</label>\n <input\n id=\"displayName\"\n class=\"form-control\"\n [(ngModel)]=\"user.displayName\"\n name=\"displayName\"\n autocomplete=\"off\"\n maxlength=\"254\"\n placeholder=\"{{ 'e.g. joe.doe`LOCALIZE`' | translate }}\"\n [disabled]=\"userIsExternal\"\n c8yDefaultValidation=\"loginAlias\"\n />\n </c8y-form-group>\n\n <c8y-form-group [hasWarning]=\"!user.email\">\n <label translate for=\"userEmail\">Email</label>\n <input\n id=\"userEmail\"\n class=\"form-control\"\n type=\"email\"\n name=\"email\"\n [maxlength]=\"254\"\n autocomplete=\"off\"\n placeholder=\"{{ 'e.g. joe.doe@example.com`LOCALIZE`' | translate }}\"\n [(ngModel)]=\"user.email\"\n email\n [required]=\"true\"\n [disabled]=\"userIsExternal\"\n />\n </c8y-form-group>\n\n <div class=\"row\">\n <div class=\"col-sm-6\">\n <c8y-form-group>\n <label translate for=\"userFirstName\">First name</label>\n <input\n id=\"userFirstName\"\n class=\"form-control\"\n autocomplete=\"off\"\n maxlength=\"50\"\n name=\"firstName\"\n [(ngModel)]=\"user.firstName\"\n [disabled]=\"userIsExternal\"\n />\n </c8y-form-group>\n </div>\n <div class=\"col-sm-6\">\n <c8y-form-group>\n <label translate for=\"userLastName\">Last name</label>\n <input\n id=\"userLastName\"\n class=\"form-control\"\n autocomplete=\"off\"\n maxlength=\"50\"\n name=\"lastName\"\n [(ngModel)]=\"user.lastName\"\n [disabled]=\"userIsExternal\"\n />\n </c8y-form-group>\n </div>\n </div>\n\n <c8y-form-group>\n <label translate for=\"userTelephone\">Telephone</label>\n <input\n id=\"userTelephone\"\n class=\"form-control\"\n autocomplete=\"off\"\n name=\"phone\"\n maxlength=\"254\"\n [(ngModel)]=\"user.phone\"\n placeholder=\"{{ 'e.g. +49 9 876 543 210`LOCALIZE`' | translate }}\"\n c8yPhoneValidation\n c8yDefaultValidation=\"phoneNumber\"\n [required]=\"isPhoneRequired\"\n [disabled]=\"userIsExternal\"\n />\n </c8y-form-group>\n\n <c8y-form-group>\n <label translate for=\"userLang\">Language</label>\n <div class=\"c8y-select-wrapper\">\n <select\n id=\"userLang\"\n class=\"form-control\"\n #selectLang\n name=\"lang\"\n [(ngModel)]=\"lang\"\n (change)=\"onLanguage.emit(selectLang.value)\"\n >\n <option *ngFor=\"let lang of langs\" [value]=\"lang\">\n {{ translate.getNativeLanguage(lang) }}\n </option>\n </select>\n <span></span>\n </div>\n </c8y-form-group>\n\n <c8y-form-group class=\"p-t-16 separator-top\" *ngIf=\"showProductExperienceOptions\">\n <label translate>Product experience</label>\n <label class=\"c8y-switch\" for=\"productUsageTracking\">\n <input\n id=\"productUsageTracking\"\n name=\"productUsageTracking\"\n type=\"checkbox\"\n [(ngModel)]=\"isUsageTrackingEnabled\"\n />\n <span></span>\n {{ 'Enable personalized product experience tracking' | translate }}\n </label>\n <ng-container *ngIf=\"isUsageTrackingEnabled\">\n <label class=\"c8y-switch m-l-0\" for=\"userEngagementPreference\">\n <input\n id=\"userEngagementPreference\"\n name=\"userEngagementPreference\"\n type=\"checkbox\"\n [(ngModel)]=\"isUserEngagementPreferenceEnabled\"\n />\n <span></span>\n {{ 'Enable in-product information & communication' | translate }}\n </label>\n </ng-container>\n </c8y-form-group>\n\n <div class=\"form-group p-t-16 separator-top\" *ngIf=\"!userIsExternal\">\n <label class=\"control-label\">{{ 'Login options' | translate }}</label>\n <c8y-new-password (password)=\"onNewPasswordChanged($event)\"></c8y-new-password>\n <button\n title=\"{{ 'Set up two-factor authentication' | translate }}\"\n class=\"btn btn-default\"\n type=\"button\"\n (click)=\"setupTotp()\"\n *ngIf=\"userCanSetupTotp && !userHasActiveTotp && isTfaEnabled\"\n >\n {{ 'Set up two-factor authentication' | translate }}\n </button>\n </div>\n\n <c8y-form-group *ngIf=\"!!(state.state$ | async).newsletter\">\n <label translate>Newsletter</label>\n <label\n title=\"{{ 'Send me information about outages, maintenance or updates.' | translate }}\"\n class=\"c8y-checkbox\"\n >\n <input\n type=\"checkbox\"\n name=\"newsletter\"\n [(ngModel)]=\"user.newsletter\"\n [disabled]=\"userIsExternal\"\n />\n <span></span>\n <span>\n {{ 'Send me information about outages, maintenance or updates.' | translate }}\n </span>\n </label>\n </c8y-form-group>\n </div>\n <div class=\"modal-footer separator-top bg-white sticky-bottom\">\n <button\n title=\"{{ 'Cancel' | translate }}\"\n class=\"btn btn-default\"\n type=\"button\"\n (click)=\"cancel()\"\n >\n {{ 'Cancel' | translate }}\n </button>\n <button\n title=\"{{ 'Save' | translate }}\"\n class=\"btn btn-primary\"\n type=\"submit\"\n [disabled]=\"!userForm.form.valid || userForm.form.pristine || loading\"\n >\n {{ 'Save' | translate }}\n </button>\n </div>\n</form>\n", dependencies: [{ kind: "directive", type: i6.PhoneValidationDirective, selector: "[c8yPhoneValidation]" }, { kind: "directive", type: i7.DefaultValidationDirective, selector: "[c8yDefaultValidation]", inputs: ["c8yDefaultValidation"] }, { kind: "directive", type: i8.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i8.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i8.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i8.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i8.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i8.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i8.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i8.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i8.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i8.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i8.EmailValidator, selector: "[email][formControlName],[email][formControl],[email][ngModel]", inputs: ["email"] }, { kind: "directive", type: i8.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i8.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: i9.FormGroupComponent, selector: "c8y-form-group", inputs: ["hasError", "hasWarning", "hasSuccess", "novalidation", "status"] }, { kind: "directive", type: i10.RequiredInputPlaceholderDirective, selector: "input[required], input[formControlName]" }, { kind: "directive", type: i11.C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: i12.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i12.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i13.NewPasswordComponent, selector: "c8y-new-password", outputs: ["password"] }, { kind: "pipe", type: i14.C8yTranslatePipe, name: "translate" }, { kind: "pipe", type: i12.AsyncPipe, name: "async" }] });
|
|
121
116
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: UserEditComponent, decorators: [{
|
|
122
117
|
type: Component,
|
|
123
|
-
args: [{ selector: 'c8y-user-edit', template: "<form #userForm=\"ngForm\" (ngSubmit)=\"userForm.form.valid && save()\">\n <div class=\"d-block p-24 p-b-0\">\n <div class=\"alert alert-warning\" role=\"alert\" *ngIf=\"userIsExternal\" translate>\n Some of the user settings are not editable here because they are managed via your\n authorization server.\n </div>\n <c8y-form-group>\n <label translate for=\"userName\">Username (for example, email)</label>\n <input\n id=\"userName\"\n class=\"form-control\"\n [(ngModel)]=\"user.userName\"\n name=\"userName\"\n autocomplete=\"off\"\n required\n maxlength=\"254\"\n placeholder=\"{{ 'e.g. joe.doe@example.com`LOCALIZE`' | translate }}\"\n [disabled]=\"user.id\"\n c8yDefaultValidation=\"user\"\n />\n </c8y-form-group>\n\n <c8y-form-group>\n <label translate for=\"displayName\">Login alias</label>\n <input\n id=\"displayName\"\n class=\"form-control\"\n [(ngModel)]=\"user.displayName\"\n name=\"displayName\"\n autocomplete=\"off\"\n maxlength=\"254\"\n placeholder=\"{{ 'e.g. joe.doe`LOCALIZE`' | translate }}\"\n [disabled]=\"userIsExternal\"\n c8yDefaultValidation=\"loginAlias\"\n />\n </c8y-form-group>\n\n <c8y-form-group [hasWarning]=\"!user.email\">\n <label translate for=\"userEmail\">Email</label>\n <input\n id=\"userEmail\"\n class=\"form-control\"\n type=\"email\"\n name=\"email\"\n [maxlength]=\"254\"\n autocomplete=\"off\"\n placeholder=\"{{ 'e.g. joe.doe@example.com`LOCALIZE`' | translate }}\"\n [(ngModel)]=\"user.email\"\n email\n [required]=\"true\"\n [disabled]=\"userIsExternal\"\n />\n </c8y-form-group>\n\n <div class=\"row\">\n <div class=\"col-sm-6\">\n <c8y-form-group>\n <label translate for=\"userFirstName\">First name</label>\n <input\n id=\"userFirstName\"\n class=\"form-control\"\n autocomplete=\"off\"\n maxlength=\"50\"\n name=\"firstName\"\n [(ngModel)]=\"user.firstName\"\n [disabled]=\"userIsExternal\"\n />\n </c8y-form-group>\n </div>\n <div class=\"col-sm-6\">\n <c8y-form-group>\n <label translate for=\"userLastName\">Last name</label>\n <input\n id=\"userLastName\"\n class=\"form-control\"\n autocomplete=\"off\"\n maxlength=\"50\"\n name=\"lastName\"\n [(ngModel)]=\"user.lastName\"\n [disabled]=\"userIsExternal\"\n />\n </c8y-form-group>\n </div>\n </div>\n\n <c8y-form-group>\n <label translate for=\"userTelephone\">Telephone</label>\n <input\n id=\"userTelephone\"\n class=\"form-control\"\n autocomplete=\"off\"\n name=\"phone\"\n maxlength=\"254\"\n [(ngModel)]=\"user.phone\"\n placeholder=\"{{ 'e.g. +49 9 876 543 210`LOCALIZE`' | translate }}\"\n c8yPhoneValidation\n c8yDefaultValidation=\"phoneNumber\"\n [required]=\"isPhoneRequired\"\n [disabled]=\"userIsExternal\"\n />\n </c8y-form-group>\n\n <c8y-form-group>\n <label translate for=\"userLang\">Language</label>\n <div class=\"c8y-select-wrapper\">\n <select\n id=\"userLang\"\n class=\"form-control\"\n #selectLang\n name=\"lang\"\n [(ngModel)]=\"lang\"\n (change)=\"onLanguage.emit(selectLang.value)\"\n >\n <option *ngFor=\"let lang of langs\" [value]=\"lang\">\n {{ translate.getNativeLanguage(lang) }}\n </option>\n </select>\n <span></span>\n </div>\n </c8y-form-group>\n\n <c8y-form-group class=\"p-t-
|
|
124
|
-
}], ctorParameters: function () { return [{ type: i1.AppStateService }, { type: i2.TranslateService }, { type: i3.BsModalService }, { type: i4.AlertService }, { type: i5.UserService }, { type: i5.TenantLoginOptionsService }, { type: i5.TenantService }
|
|
118
|
+
args: [{ selector: 'c8y-user-edit', template: "<form #userForm=\"ngForm\" (ngSubmit)=\"userForm.form.valid && save()\">\n <div class=\"d-block p-24 p-b-0\">\n <div class=\"alert alert-warning\" role=\"alert\" *ngIf=\"userIsExternal\" translate>\n Some of the user settings are not editable here because they are managed via your\n authorization server.\n </div>\n <c8y-form-group>\n <label translate for=\"userName\">Username (for example, email)</label>\n <input\n id=\"userName\"\n class=\"form-control\"\n [(ngModel)]=\"user.userName\"\n name=\"userName\"\n autocomplete=\"off\"\n required\n maxlength=\"254\"\n placeholder=\"{{ 'e.g. joe.doe@example.com`LOCALIZE`' | translate }}\"\n [disabled]=\"user.id\"\n c8yDefaultValidation=\"user\"\n />\n </c8y-form-group>\n\n <c8y-form-group>\n <label translate for=\"displayName\">Login alias</label>\n <input\n id=\"displayName\"\n class=\"form-control\"\n [(ngModel)]=\"user.displayName\"\n name=\"displayName\"\n autocomplete=\"off\"\n maxlength=\"254\"\n placeholder=\"{{ 'e.g. joe.doe`LOCALIZE`' | translate }}\"\n [disabled]=\"userIsExternal\"\n c8yDefaultValidation=\"loginAlias\"\n />\n </c8y-form-group>\n\n <c8y-form-group [hasWarning]=\"!user.email\">\n <label translate for=\"userEmail\">Email</label>\n <input\n id=\"userEmail\"\n class=\"form-control\"\n type=\"email\"\n name=\"email\"\n [maxlength]=\"254\"\n autocomplete=\"off\"\n placeholder=\"{{ 'e.g. joe.doe@example.com`LOCALIZE`' | translate }}\"\n [(ngModel)]=\"user.email\"\n email\n [required]=\"true\"\n [disabled]=\"userIsExternal\"\n />\n </c8y-form-group>\n\n <div class=\"row\">\n <div class=\"col-sm-6\">\n <c8y-form-group>\n <label translate for=\"userFirstName\">First name</label>\n <input\n id=\"userFirstName\"\n class=\"form-control\"\n autocomplete=\"off\"\n maxlength=\"50\"\n name=\"firstName\"\n [(ngModel)]=\"user.firstName\"\n [disabled]=\"userIsExternal\"\n />\n </c8y-form-group>\n </div>\n <div class=\"col-sm-6\">\n <c8y-form-group>\n <label translate for=\"userLastName\">Last name</label>\n <input\n id=\"userLastName\"\n class=\"form-control\"\n autocomplete=\"off\"\n maxlength=\"50\"\n name=\"lastName\"\n [(ngModel)]=\"user.lastName\"\n [disabled]=\"userIsExternal\"\n />\n </c8y-form-group>\n </div>\n </div>\n\n <c8y-form-group>\n <label translate for=\"userTelephone\">Telephone</label>\n <input\n id=\"userTelephone\"\n class=\"form-control\"\n autocomplete=\"off\"\n name=\"phone\"\n maxlength=\"254\"\n [(ngModel)]=\"user.phone\"\n placeholder=\"{{ 'e.g. +49 9 876 543 210`LOCALIZE`' | translate }}\"\n c8yPhoneValidation\n c8yDefaultValidation=\"phoneNumber\"\n [required]=\"isPhoneRequired\"\n [disabled]=\"userIsExternal\"\n />\n </c8y-form-group>\n\n <c8y-form-group>\n <label translate for=\"userLang\">Language</label>\n <div class=\"c8y-select-wrapper\">\n <select\n id=\"userLang\"\n class=\"form-control\"\n #selectLang\n name=\"lang\"\n [(ngModel)]=\"lang\"\n (change)=\"onLanguage.emit(selectLang.value)\"\n >\n <option *ngFor=\"let lang of langs\" [value]=\"lang\">\n {{ translate.getNativeLanguage(lang) }}\n </option>\n </select>\n <span></span>\n </div>\n </c8y-form-group>\n\n <c8y-form-group class=\"p-t-16 separator-top\" *ngIf=\"showProductExperienceOptions\">\n <label translate>Product experience</label>\n <label class=\"c8y-switch\" for=\"productUsageTracking\">\n <input\n id=\"productUsageTracking\"\n name=\"productUsageTracking\"\n type=\"checkbox\"\n [(ngModel)]=\"isUsageTrackingEnabled\"\n />\n <span></span>\n {{ 'Enable personalized product experience tracking' | translate }}\n </label>\n <ng-container *ngIf=\"isUsageTrackingEnabled\">\n <label class=\"c8y-switch m-l-0\" for=\"userEngagementPreference\">\n <input\n id=\"userEngagementPreference\"\n name=\"userEngagementPreference\"\n type=\"checkbox\"\n [(ngModel)]=\"isUserEngagementPreferenceEnabled\"\n />\n <span></span>\n {{ 'Enable in-product information & communication' | translate }}\n </label>\n </ng-container>\n </c8y-form-group>\n\n <div class=\"form-group p-t-16 separator-top\" *ngIf=\"!userIsExternal\">\n <label class=\"control-label\">{{ 'Login options' | translate }}</label>\n <c8y-new-password (password)=\"onNewPasswordChanged($event)\"></c8y-new-password>\n <button\n title=\"{{ 'Set up two-factor authentication' | translate }}\"\n class=\"btn btn-default\"\n type=\"button\"\n (click)=\"setupTotp()\"\n *ngIf=\"userCanSetupTotp && !userHasActiveTotp && isTfaEnabled\"\n >\n {{ 'Set up two-factor authentication' | translate }}\n </button>\n </div>\n\n <c8y-form-group *ngIf=\"!!(state.state$ | async).newsletter\">\n <label translate>Newsletter</label>\n <label\n title=\"{{ 'Send me information about outages, maintenance or updates.' | translate }}\"\n class=\"c8y-checkbox\"\n >\n <input\n type=\"checkbox\"\n name=\"newsletter\"\n [(ngModel)]=\"user.newsletter\"\n [disabled]=\"userIsExternal\"\n />\n <span></span>\n <span>\n {{ 'Send me information about outages, maintenance or updates.' | translate }}\n </span>\n </label>\n </c8y-form-group>\n </div>\n <div class=\"modal-footer separator-top bg-white sticky-bottom\">\n <button\n title=\"{{ 'Cancel' | translate }}\"\n class=\"btn btn-default\"\n type=\"button\"\n (click)=\"cancel()\"\n >\n {{ 'Cancel' | translate }}\n </button>\n <button\n title=\"{{ 'Save' | translate }}\"\n class=\"btn btn-primary\"\n type=\"submit\"\n [disabled]=\"!userForm.form.valid || userForm.form.pristine || loading\"\n >\n {{ 'Save' | translate }}\n </button>\n </div>\n</form>\n" }]
|
|
119
|
+
}], ctorParameters: function () { return [{ type: i1.AppStateService }, { type: i2.TranslateService }, { type: i3.BsModalService }, { type: i4.AlertService }, { type: i5.UserService }, { type: i5.TenantLoginOptionsService }, { type: i5.TenantService }]; }, propDecorators: { lang: [{
|
|
125
120
|
type: Input
|
|
126
121
|
}], loading: [{
|
|
127
122
|
type: Input
|
|
128
123
|
}], user: [{
|
|
129
124
|
type: Input
|
|
130
|
-
}],
|
|
125
|
+
}], showProductExperienceOptions: [{
|
|
131
126
|
type: Input
|
|
132
127
|
}], isUsageTrackingEnabled: [{
|
|
133
128
|
type: Input
|
|
134
|
-
}],
|
|
129
|
+
}], isUserEngagementPreferenceEnabled: [{
|
|
135
130
|
type: Input
|
|
136
131
|
}], onUser: [{
|
|
137
132
|
type: Output
|
|
138
133
|
}], onLanguage: [{
|
|
139
134
|
type: Output
|
|
140
|
-
}],
|
|
135
|
+
}], onUsageTrackingChange: [{
|
|
141
136
|
type: Output
|
|
142
|
-
}],
|
|
137
|
+
}], onUserEngagementPreferenceChange: [{
|
|
143
138
|
type: Output
|
|
144
139
|
}], onCancel: [{
|
|
145
140
|
type: Output
|
|
146
141
|
}] } });
|
|
147
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci1lZGl0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2NvcmUvdXNlci91c2VyLWVkaXQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vY29yZS91c2VyL3VzZXItZWRpdC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQy9FLE9BQU8sRUFBUyx5QkFBeUIsRUFBRSxhQUFhLEVBQUUsV0FBVyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzNGLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDbEMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUV0RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDN0QsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0scURBQXFELENBQUM7QUFDN0YsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDN0QsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0seUNBQXlDLENBQUM7QUFDM0UsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQVlyRSxNQUFNLE9BQU8saUJBQWlCO0lBNkI1QixZQUNTLEtBQXNCLEVBQ3RCLFNBQTJCLEVBQzFCLGNBQThCLEVBQzlCLEtBQW1CLEVBQ25CLFdBQXdCLEVBQ3hCLHlCQUFvRCxFQUNwRCxhQUE0QixFQUM1QixzQkFBOEMsRUFDOUMsZ0JBQWtDO1FBUm5DLFVBQUssR0FBTCxLQUFLLENBQWlCO1FBQ3RCLGNBQVMsR0FBVCxTQUFTLENBQWtCO1FBQzFCLG1CQUFjLEdB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RUFBRSxXQUFXLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLFdBQVcsQ0FBQyxXQUFXLEVBQUUsS0FBSyxNQUFNLENBQUMsQ0FBQztJQUMzRixDQUFDOzs4R0E1R1UsaUJBQWlCO2tHQUFqQixpQkFBaUIsb2FDdEI5QiwraE5Bd01BOzJGRGxMYSxpQkFBaUI7a0JBSjdCLFNBQVM7K0JBQ0UsZUFBZTsrVkFJaEIsSUFBSTtzQkFBWixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDTyxJQUFJO3NCQUFoQixLQUFLO2dCQVVHLHVCQUF1QjtzQkFBL0IsS0FBSztnQkFDRyxzQkFBc0I7c0JBQTlCLEtBQUs7Z0JBQ0cscUJBQXFCO3NCQUE3QixLQUFLO2dCQUNJLE1BQU07c0JBQWYsTUFBTTtnQkFDRyxVQUFVO3NCQUFuQixNQUFNO2dCQUNHLG1CQUFtQjtzQkFBNUIsTUFBTTtnQkFDRyxjQUFjO3NCQUF2QixNQUFNO2dCQUNHLFFBQVE7c0JBQWpCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBJVXNlciwgVGVuYW50TG9naW5PcHRpb25zU2VydmljZSwgVGVuYW50U2VydmljZSwgVXNlclNlcnZpY2UgfSBmcm9tICdAYzh5L2NsaWVudCc7XG5pbXBvcnQgeyBjbG9uZSB9IGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQgeyBCc01vZGFsU2VydmljZSB9IGZyb20gJ25neC1ib290c3RyYXAvbW9kYWwnO1xuaW1wb3J0IHsgQWxlcnRTZXJ2aWNlIH0gZnJvbSAnLi4vYWxlcnQvYWxlcnQuc2VydmljZSc7XG5pbXBvcnQgeyBOZXdQYXNzd29yZCB9IGZyb20gJy4uL2F1dGhlbnRpY2F0aW9uL3Bhc3N3b3JkLm1vZGVsJztcbmltcG9ydCB7IEFwcFN0YXRlU2VydmljZSB9IGZyb20gJy4uL2NvbW1vbi91aS1zdGF0ZS5zZXJ2aWNlJztcbmltcG9ydCB7IFVzZXJQcmVmZXJlbmNlc1NlcnZpY2UgfSBmcm9tICcuLi9jb21tb24vdXNlci1wcmVmZXJlbmNlcy91c2VyLXByZWZlcmVuY2VzLnNlcnZpY2UnO1xuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJy4uL2kxOG4vdHJhbnNsYXRlLnNlcnZpY2UnO1xuaW1wb3J0IHsgR2FpbnNpZ2h0U2VydmljZSB9IGZyb20gJy4uL3Byb2R1Y3QtZXhwZXJpZW5jZS9nYWluc2lnaHQuc2VydmljZSc7XG5pbXBvcnQgeyBVc2VyVG90cFNldHVwQ29tcG9uZW50IH0gZnJvbSAnLi91c2VyLXRvdHAtc2V0dXAuY29tcG9uZW50JztcblxuZXhwb3J0IGludGVyZmFjZSBVc2VyIGV4dGVuZHMgSVVzZXIge1xuICBwaG9uZTogc3RyaW5nO1xuICBzZW5kUGFzc3dvcmRSZXNldEVtYWlsOiBib29sZWFuO1xuICBuZXdzbGV0dGVyPzogYm9vbGVhbjtcbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYzh5LXVzZXItZWRpdCcsXG4gIHRlbXBsYXRlVXJsOiAnLi91c2VyLWVkaXQuY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIFVzZXJFZGl0Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgQElucHV0KCkgbGFuZzogc3RyaW5nO1xuICBASW5wdXQoKSBsb2FkaW5nOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIHNldCB1c2VyKHU6IFVzZXIpIHtcbiAgICBpZiAodSkge1xuICAgICAgdGhpcy5fdXNlciA9IGNsb25lKHUpO1xuICAgICAgdGhpcy51c2VySXNFeHRlcm5hbCA9IHUuY3VzdG9tUHJvcGVydGllcy51c2VyT3JpZ2luID09PSAnT0FVVEgyJztcbiAgICAgIHRoaXMuaXNQaG9uZVJlcXVpcmVkID0gdGhpcy5pc1Bob25lUmVxdWlyZWQgJiYgdS50d29GYWN0b3JBdXRoZW50aWNhdGlvbkVuYWJsZWQ7XG4gICAgfVxuICB9XG4gIGdldCB1c2VyKCkge1xuICAgIHJldHVybiB0aGlzLl91c2VyO1xuICB9XG4gIEBJbnB1dCgpIHNob3dQcm9kdWN0VXNhZ2VTZXR0aW5nOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIGlzVXNhZ2VUcmFja2luZ0VuYWJsZWQ6IGJvb2xlYW4gPSB0cnVlO1xuICBASW5wdXQoKSBpc0dhaW5zaWdodEJvdEVuYWJsZWQ6IGJvb2xlYW4gPSB0cnVlO1xuICBAT3V0cHV0KCkgb25Vc2VyOiBFdmVudEVtaXR0ZXI8VXNlcj4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBPdXRwdXQoKSBvbkxhbmd1YWdlOiBFdmVudEVtaXR0ZXI8c3RyaW5nPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIG9uUHJvZHVjdEV4cGVyaWVuY2U6IEV2ZW50RW1pdHRlcjxib29sZWFuPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIG9uR2FpbnNpZ2h0Qm90OiBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBPdXRwdXQoKSBvbkNhbmNlbDogRXZlbnRFbWl0dGVyPHZvaWQ+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICB1c2VySGFzQWN0aXZlVG90cCA9IGZhbHNlO1xuICB1c2VyQ2FuU2V0dXBUb3RwID0gZmFsc2U7XG4gIGlzUGhvbmVSZXF1aXJlZCA9IGZhbHNlO1xuICB1c2VySXNFeHRlcm5hbDogYm9vbGVhbjtcbiAgaXNUZmFFbmFibGVkOiBib29sZWFuO1xuXG4gIHByaXZhdGUgX3VzZXI6IFVzZXI7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIHN0YXRlOiBBcHBTdGF0ZVNlcnZpY2UsXG4gICAgcHVibGljIHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICBwcml2YXRlIGJzTW9kYWxTZXJ2aWNlOiBCc01vZGFsU2VydmljZSxcbiAgICBwcml2YXRlIGFsZXJ0OiBBbGVydFNlcnZpY2UsXG4gICAgcHJpdmF0ZSB1c2VyU2VydmljZTogVXNlclNlcnZpY2UsXG4gICAgcHJpdmF0ZSB0ZW5hbnRMb2dpbk9wdGlvbnNTZXJ2aWNlOiBUZW5hbnRMb2dpbk9wdGlvbnNTZXJ2aWNlLFxuICAgIHByaXZhdGUgdGVuYW50U2VydmljZTogVGVuYW50U2VydmljZSxcbiAgICBwcml2YXRlIHVzZXJQcmVmZXJlbmNlc1NlcnZpY2U6IFVzZXJQcmVmZXJlbmNlc1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBnYWluc2lnaHRTZXJ2aWNlOiBHYWluc2lnaHRTZXJ2aWNlXG4gICkge31cblxuICBhc3luYyBuZ09uSW5pdCgpIHtcbiAgICBjb25zdCBjdXJyZW50VGVuYW50ID0gKGF3YWl0IHRoaXMudGVuYW50U2VydmljZS5jdXJyZW50KCkpLmRhdGE7XG4gICAgY29uc3QgeyBlbmFibGVkT25TeXN0ZW1MZXZlbCwgZW5hYmxlZE9uVGVuYW50TGV2ZWwgfSA9IGF3YWl0IHRoaXMudGVuYW50U2VydmljZS5nZXRUZmFTZXR0aW5ncyhcbiAgICAgIGN1cnJlbnRUZW5hbnRcbiAgICApO1xuICAgIHRoaXMuaXNUZmFFbmFibGVkID0gZW5hYmxlZE9uU3lzdGVtTGV2ZWwgfHwgZW5hYmxlZE9uVGVuYW50TGV2ZWw7XG5cbiAgICBhd2FpdCB0aGlzLmluaXRpYWxpemVUb3RwU2V0dGluZ3MoKTtcbiAgICBpZiAodGhpcy51c2VyLnR3b0ZhY3RvckF1dGhlbnRpY2F0aW9uRW5hYmxlZCAmJiAhdGhpcy51c2VyQ2FuU2V0dXBUb3RwKSB7XG4gICAgICB0aGlzLmlzUGhvbmVSZXF1aXJlZCA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgb25FbmFibGluZ1Byb2R1Y3RVc2FnZVRyYWNraW5nKGlzVXNhZ2VUcmFja2luZ0VuYWJsZWQ6IGJvb2xlYW4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoaXNVc2FnZVRyYWNraW5nRW5hYmxlZCAmJiB0aGlzLmlzR2FpbnNpZ2h0Qm90RW5hYmxlZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmlzR2FpbnNpZ2h0Qm90RW5hYmxlZCA9IGF3YWl0IHRoaXMudXNlclByZWZlcmVuY2VzU2VydmljZVxuICAgICAgICAuZ2V0KHRoaXMuZ2FpbnNpZ2h0U2VydmljZS5VU0VSX1BSRUZFUkVOQ0VTX0dBSU5TSUdIVF9CT1RfS0VZKVxuICAgICAgICAudG9Qcm9taXNlKCk7XG4gICAgfVxuICB9XG5cbiAgZ2V0IGxhbmdzKCkge1xuICAgIHJldHVybiB0aGlzLnN0YXRlLnN0YXRlLmxhbmdzO1xuICB9XG5cbiAgc2V0dXBUb3RwKCkge1xuICAgIHRoaXMuYnNNb2RhbFNlcnZpY2Uuc2hvdyhVc2VyVG90cFNldHVwQ29tcG9uZW50LCB7IGNsYXNzOiAnbW9kYWwtc20nIH0pO1xuICAgIHRoaXMuY2FuY2VsKCk7IC8vIHRvIGNsb3NlIHRoZSB1c2VyIGVkaXQgbW9kYWwgYW5kIHByZXZlbnQgY29uc29sZSBlcnJvcnMgb24gbG9nb3V0XG4gIH1cblxuICBjYW5jZWwoKSB7XG4gICAgdGhpcy5vbkNhbmNlbC5lbWl0KCk7XG4gIH1cblxuICBhc3luYyBzYXZlKCkge1xuICAgIGlmICh0aGlzLmxvYWRpbmcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5zaG93UHJvZHVjdFVzYWdlU2V0dGluZykge1xuICAgICAgdGhpcy5vblByb2R1Y3RFeHBlcmllbmNlLmVtaXQodGhpcy5pc1VzYWdlVHJhY2tpbmdFbmFibGVkKTtcbiAgICAgIHRoaXMub25HYWluc2lnaHRCb3QuZW1pdCh0aGlzLmlzR2FpbnNpZ2h0Qm90RW5hYmxlZCk7XG4gICAgfVxuXG4gICAgdGhpcy5vblVzZXIuZW1pdCh0aGlzLl91c2VyKTtcbiAgfVxuXG4gIG9uTmV3UGFzc3dvcmRDaGFuZ2VkKG5ld1Bhc3N3b3JkOiBOZXdQYXNzd29yZCkge1xuICAgIHRoaXMuX3VzZXIucGFzc3dvcmQgPSBuZXdQYXNzd29yZC5wYXNzd29yZDtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgaW5pdGlhbGl6ZVRvdHBTZXR0aW5ncygpIHtcbiAgICB0cnkge1xuICAgICAgdGhpcy51c2VyQ2FuU2V0dXBUb3RwID0gYXdhaXQgdGhpcy5jYW5Vc2VyU2V0dXBUb3RwKCk7XG4gICAgICBpZiAodGhpcy51c2VyQ2FuU2V0dXBUb3RwKSB7XG4gICAgICAgIGNvbnN0IHsgZGF0YTogdG90cEFjdGl2aXR5IH0gPSBhd2FpdCB0aGlzLnVzZXJTZXJ2aWNlLmdldEFjdGl2aXR5VG90cCgpO1xuICAgICAgICB0aGlzLnVzZXJIYXNBY3RpdmVUb3RwID0gdG90cEFjdGl2aXR5LmlzQWN0aXZlO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICB0aGlzLmFsZXJ0LnJlbW92ZUxhc3REYW5nZXIoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGNhblVzZXJTZXR1cFRvdHAoKSB7XG4gICAgLy8gd2UgZG9uJ3QgY2hlY2sgZm9yIHRlbmFudCBvcHRpb25zIGhlcmUgZHVlIHRvIHBlcm1pc3Npb24gcmVzdHJpY3Rpb25zIG9uIHRoYXQgZW5kLXBvaW50XG4gICAgY29uc3QgbG9naW5PcHRpb25zID0gKGF3YWl0IHRoaXMudGVuYW50TG9naW5PcHRpb25zU2VydmljZS5saXN0Rm9yQ3VycmVudFRlbmFudCgpKS5kYXRhO1xuICAgIHJldHVybiBsb2dpbk9wdGlvbnMuc29tZSgoeyB0ZmFTdHJhdGVneSA9ICcnIH0pID0+IHRmYVN0cmF0ZWd5LnRvTG93ZXJDYXNlKCkgPT09ICd0b3RwJyk7XG4gIH1cbn1cbiIsIjxmb3JtICN1c2VyRm9ybT1cIm5nRm9ybVwiIChuZ1N1Ym1pdCk9XCJ1c2VyRm9ybS5mb3JtLnZhbGlkICYmIHNhdmUoKVwiPlxuICA8ZGl2IGNsYXNzPVwiZC1ibG9jayBwLTI0IHAtYi0wXCI+XG4gICAgPGRpdiBjbGFzcz1cImFsZXJ0IGFsZXJ0LXdhcm5pbmdcIiByb2xlPVwiYWxlcnRcIiAqbmdJZj1cInVzZXJJc0V4dGVybmFsXCIgdHJhbnNsYXRlPlxuICAgICAgU29tZSBvZiB0aGUgdXNlciBzZXR0aW5ncyBhcmUgbm90IGVkaXRhYmxlIGhlcmUgYmVjYXVzZSB0aGV5IGFyZSBtYW5hZ2VkIHZpYSB5b3VyXG4gICAgICBhdXRob3JpemF0aW9uIHNlcnZlci5cbiAgICA8L2Rpdj5cbiAgICA8Yzh5LWZvcm0tZ3JvdXA+XG4gICAgICA8bGFiZWwgdHJhbnNsYXRlIGZvcj1cInVzZXJOYW1lXCI+VXNlcm5hbWUgKGZvciBleGFtcGxlLCBlbWFpbCk8L2xhYmVsPlxuICAgICAgPGlucHV0XG4gICAgICAgIGlkPVwidXNlck5hbWVcIlxuICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiXG4gICAgICAgIFsobmdNb2RlbCldPVwidXNlci51c2VyTmFtZVwiXG4gICAgICAgIG5hbWU9XCJ1c2VyTmFtZVwiXG4gICAgICAgIGF1dG9jb21wbGV0ZT1cIm9mZlwiXG4gICAgICAgIHJlcXVpcmVkXG4gICAgICAgIG1heGxlbmd0aD1cIjI1NFwiXG4gICAgICAgIHBsYWNlaG9sZGVyPVwie3sgJ2UuZy4gam9lLmRvZUBleGFtcGxlLmNvbWBMT0NBTElaRWAnIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgW2Rpc2FibGVkXT1cInVzZXIuaWRcIlxuICAgICAgICBjOHlEZWZhdWx0VmFsaWRhdGlvbj1cInVzZXJcIlxuICAgICAgLz5cbiAgICA8L2M4eS1mb3JtLWdyb3VwPlxuXG4gICAgPGM4eS1mb3JtLWdyb3VwPlxuICAgICAgPGxhYmVsIHRyYW5zbGF0ZSBmb3I9XCJkaXNwbGF5TmFtZVwiPkxvZ2luIGFsaWFzPC9sYWJlbD5cbiAgICAgIDxpbnB1dFxuICAgICAgICBpZD1cImRpc3BsYXlOYW1lXCJcbiAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIlxuICAgICAgICBbKG5nTW9kZWwpXT1cInVzZXIuZGlzcGxheU5hbWVcIlxuICAgICAgICBuYW1lPVwiZGlzcGxheU5hbWVcIlxuICAgICAgICBhdXRvY29tcGxldGU9XCJvZmZcIlxuICAgICAgICBtYXhsZW5ndGg9XCIyNTRcIlxuICAgICAgICBwbGFjZWhvbGRlcj1cInt7ICdlLmcuIGpvZS5kb2VgTE9DQUxJWkVgJyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICAgIFtkaXNhYmxlZF09XCJ1c2VySXNFeHRlcm5hbFwiXG4gICAgICAgIGM4eURlZmF1bHRWYWxpZGF0aW9uPVwibG9naW5BbGlhc1wiXG4gICAgICAvPlxuICAgIDwvYzh5LWZvcm0tZ3JvdXA+XG5cbiAgICA8Yzh5LWZvcm0tZ3JvdXAgW2hhc1dhcm5pbmddPVwiIXVzZXIuZW1haWxcIj5cbiAgICAgIDxsYWJlbCB0cmFuc2xhdGUgZm9yPVwidXNlckVtYWlsXCI+RW1haWw8L2xhYmVsPlxuICAgICAgPGlucHV0XG4gICAgICAgIGlkPVwidXNlckVtYWlsXCJcbiAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIlxuICAgICAgICB0eXBlPVwiZW1haWxcIlxuICAgICAgICBuYW1lPVwiZW1haWxcIlxuICAgICAgICBbbWF4bGVuZ3RoXT1cIjI1NFwiXG4gICAgICAgIGF1dG9jb21wbGV0ZT1cIm9mZlwiXG4gICAgICAgIHBsYWNlaG9sZGVyPVwie3sgJ2UuZy4gam9lLmRvZUBleGFtcGxlLmNvbWBMT0NBTElaRWAnIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgWyhuZ01vZGVsKV09XCJ1c2VyLmVtYWlsXCJcbiAgICAgICAgZW1haWxcbiAgICAgICAgW3JlcXVpcmVkXT1cInRydWVcIlxuICAgICAgICBbZGlzYWJsZWRdPVwidXNlcklzRXh0ZXJuYWxcIlxuICAgICAgLz5cbiAgICA8L2M4eS1mb3JtLWdyb3VwPlxuXG4gICAgPGRpdiBjbGFzcz1cInJvd1wiPlxuICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS02XCI+XG4gICAgICAgIDxjOHktZm9ybS1ncm91cD5cbiAgICAgICAgICA8bGFiZWwgdHJhbnNsYXRlIGZvcj1cInVzZXJGaXJzdE5hbWVcIj5GaXJzdCBuYW1lPC9sYWJlbD5cbiAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgIGlkPVwidXNlckZpcnN0TmFtZVwiXG4gICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiXG4gICAgICAgICAgICBhdXRvY29tcGxldGU9XCJvZmZcIlxuICAgICAgICAgICAgbWF4bGVuZ3RoPVwiNTBcIlxuICAgICAgICAgICAgbmFtZT1cImZpcnN0TmFtZVwiXG4gICAgICAgICAgICBbKG5nTW9kZWwpXT1cInVzZXIuZmlyc3ROYW1lXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJ1c2VySXNFeHRlcm5hbFwiXG4gICAgICAgICAgLz5cbiAgICAgICAgPC9jOHktZm9ybS1ncm91cD5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS02XCI+XG4gICAgICAgIDxjOHktZm9ybS1ncm91cD5cbiAgICAgICAgICA8bGFiZWwgdHJhbnNsYXRlIGZvcj1cInVzZXJMYXN0TmFtZVwiPkxhc3QgbmFtZTwvbGFiZWw+XG4gICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICBpZD1cInVzZXJMYXN0TmFtZVwiXG4gICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiXG4gICAgICAgICAgICBhdXRvY29tcGxldGU9XCJvZmZcIlxuICAgICAgICAgICAgbWF4bGVuZ3RoPVwiNTBcIlxuICAgICAgICAgICAgbmFtZT1cImxhc3ROYW1lXCJcbiAgICAgICAgICAgIFsobmdNb2RlbCldPVwidXNlci5sYXN0TmFtZVwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwidXNlcklzRXh0ZXJuYWxcIlxuICAgICAgICAgIC8+XG4gICAgICAgIDwvYzh5LWZvcm0tZ3JvdXA+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDxjOHktZm9ybS1ncm91cD5cbiAgICAgIDxsYWJlbCB0cmFuc2xhdGUgZm9yPVwidXNlclRlbGVwaG9uZVwiPlRlbGVwaG9uZTwvbGFiZWw+XG4gICAgICA8aW5wdXRcbiAgICAgICAgaWQ9XCJ1c2VyVGVsZXBob25lXCJcbiAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIlxuICAgICAgICBhdXRvY29tcGxldGU9XCJvZmZcIlxuICAgICAgICBuYW1lPVwicGhvbmVcIlxuICAgICAgICBtYXhsZW5ndGg9XCIyNTRcIlxuICAgICAgICBbKG5nTW9kZWwpXT1cInVzZXIucGhvbmVcIlxuICAgICAgICBwbGFjZWhvbGRlcj1cInt7ICdlLmcuICs0OSA5IDg3NiA1NDMgMjEwYExPQ0FMSVpFYCcgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICBjOHlQaG9uZVZhbGlkYXRpb25cbiAgICAgICAgYzh5RGVmYXVsdFZhbGlkYXRpb249XCJwaG9uZU51bWJlclwiXG4gICAgICAgIFtyZXF1aXJlZF09XCJpc1Bob25lUmVxdWlyZWRcIlxuICAgICAgICBbZGlzYWJsZWRdPVwidXNlcklzRXh0ZXJuYWxcIlxuICAgICAgLz5cbiAgICA8L2M4eS1mb3JtLWdyb3VwPlxuXG4gICAgPGM4eS1mb3JtLWdyb3VwPlxuICAgICAgPGxhYmVsIHRyYW5zbGF0ZSBmb3I9XCJ1c2VyTGFuZ1wiPkxhbmd1YWdlPC9sYWJlbD5cbiAgICAgIDxkaXYgY2xhc3M9XCJjOHktc2VsZWN0LXdyYXBwZXJcIj5cbiAgICAgICAgPHNlbGVjdFxuICAgICAgICAgIGlkPVwidXNlckxhbmdcIlxuICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sXCJcbiAgICAgICAgICAjc2VsZWN0TGFuZ1xuICAgICAgICAgIG5hbWU9XCJsYW5nXCJcbiAgICAgICAgICBbKG5nTW9kZWwpXT1cImxhbmdcIlxuICAgICAgICAgIChjaGFuZ2UpPVwib25MYW5ndWFnZS5lbWl0KHNlbGVjdExhbmcudmFsdWUpXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxvcHRpb24gKm5nRm9yPVwibGV0IGxhbmcgb2YgbGFuZ3NcIiBbdmFsdWVdPVwibGFuZ1wiPlxuICAgICAgICAgICAge3sgdHJhbnNsYXRlLmdldE5hdGl2ZUxhbmd1YWdlKGxhbmcpIH19XG4gICAgICAgICAgPC9vcHRpb24+XG4gICAgICAgIDwvc2VsZWN0PlxuICAgICAgICA8c3Bhbj48L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICA8L2M4eS1mb3JtLWdyb3VwPlxuXG4gICAgPGM4eS1mb3JtLWdyb3VwIGNsYXNzPVwicC10LTggcC1iLTggc2VwYXJhdG9yLXRvcFwiICpuZ0lmPVwic2hvd1Byb2R1Y3RVc2FnZVNldHRpbmdcIj5cbiAgICAgIDxzdHJvbmcgdHJhbnNsYXRlPlByb2R1Y3QgZXhwZXJpZW5jZTwvc3Ryb25nPlxuICAgICAgPGxhYmVsIGNsYXNzPVwiYzh5LXN3aXRjaFwiIGZvcj1cInByb2R1Y3RVc2FnZVRyYWNraW5nXCI+XG4gICAgICAgIDxpbnB1dFxuICAgICAgICAgIGlkPVwicHJvZHVjdFVzYWdlVHJhY2tpbmdcIlxuICAgICAgICAgIG5hbWU9XCJwcm9kdWN0VXNhZ2VUcmFja2luZ1wiXG4gICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgICAoY2hhbmdlKT1cIm9uRW5hYmxpbmdQcm9kdWN0VXNhZ2VUcmFja2luZyhpc1VzYWdlVHJhY2tpbmdFbmFibGVkKVwiXG4gICAgICAgICAgWyhuZ01vZGVsKV09XCJpc1VzYWdlVHJhY2tpbmdFbmFibGVkXCJcbiAgICAgICAgLz5cbiAgICAgICAgPHNwYW4+PC9zcGFuPlxuICAgICAgICB7eyAnRW5hYmxlIGFub255bW91cyB0cmFja2luZyB0byBlbmhhbmNlIHRoZSBwcm9kdWN0IGV4cGVyaWVuY2UnIHwgdHJhbnNsYXRlIH19XG4gICAgICA8L2xhYmVsPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzVXNhZ2VUcmFja2luZ0VuYWJsZWRcIj5cbiAgICAgICAgPGxhYmVsIGNsYXNzPVwiYzh5LXN3aXRjaCBtLWwtMFwiIGZvcj1cImtub3dsZWRnZUh1YkJvdFwiPlxuICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgaWQ9XCJrbm93bGVkZ2VIdWJCb3RcIlxuICAgICAgICAgICAgbmFtZT1cImtub3dsZWRnZUh1YkJvdFwiXG4gICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJpc0dhaW5zaWdodEJvdEVuYWJsZWRcIlxuICAgICAgICAgIC8+XG4gICAgICAgICAgPHNwYW4+PC9zcGFuPlxuICAgICAgICAgIHt7ICdFbmFibGUgS25vd2xlZGdlIEh1YicgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgPC9sYWJlbD5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvYzh5LWZvcm0tZ3JvdXA+XG5cbiAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiICpuZ0lmPVwiIXVzZXJJc0V4dGVybmFsXCI+XG4gICAgICA8bGFiZWwgY2xhc3M9XCJjb250cm9sLWxhYmVsXCI+e3sgJ0xvZ2luIG9wdGlvbnMnIHwgdHJhbnNsYXRlIH19PC9sYWJlbD5cbiAgICAgIDxjOHktbmV3LXBhc3N3b3JkIChwYXNzd29yZCk9XCJvbk5ld1Bhc3N3b3JkQ2hhbmdlZCgkZXZlbnQpXCI+PC9jOHktbmV3LXBhc3N3b3JkPlxuICAgICAgPGJ1dHRvblxuICAgICAgICB0aXRsZT1cInt7ICdTZXQgdXAgdHdvLWZhY3RvciBhdXRoZW50aWNhdGlvbicgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICBjbGFzcz1cImJ0biBidG4tZGVmYXVsdFwiXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAoY2xpY2spPVwic2V0dXBUb3RwKClcIlxuICAgICAgICAqbmdJZj1cInVzZXJDYW5TZXR1cFRvdHAgJiYgIXVzZXJIYXNBY3RpdmVUb3RwICYmIGlzVGZhRW5hYmxlZFwiXG4gICAgICA+XG4gICAgICAgIHt7ICdTZXQgdXAgdHdvLWZhY3RvciBhdXRoZW50aWNhdGlvbicgfCB0cmFuc2xhdGUgfX1cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuXG4gICAgPGM4eS1mb3JtLWdyb3VwICpuZ0lmPVwiISEoc3RhdGUuc3RhdGUkIHwgYXN5bmMpLm5ld3NsZXR0ZXJcIj5cbiAgICAgIDxsYWJlbCB0cmFuc2xhdGU+TmV3c2xldHRlcjwvbGFiZWw+XG4gICAgICA8bGFiZWxcbiAgICAgICAgdGl0bGU9XCJ7eyAnU2VuZCBtZSBpbmZvcm1hdGlvbiBhYm91dCBvdXRhZ2VzLCBtYWludGVuYW5jZSBvciB1cGRhdGVzLicgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICBjbGFzcz1cImM4eS1jaGVja2JveFwiXG4gICAgICA+XG4gICAgICAgIDxpbnB1dFxuICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgICAgbmFtZT1cIm5ld3NsZXR0ZXJcIlxuICAgICAgICAgIFsobmdNb2RlbCldPVwidXNlci5uZXdzbGV0dGVyXCJcbiAgICAgICAgICBbZGlzYWJsZWRdPVwidXNlcklzRXh0ZXJuYWxcIlxuICAgICAgICAvPlxuICAgICAgICA8c3Bhbj48L3NwYW4+XG4gICAgICAgIDxzcGFuPlxuICAgICAgICAgIHt7ICdTZW5kIG1lIGluZm9ybWF0aW9uIGFib3V0IG91dGFnZXMsIG1haW50ZW5hbmNlIG9yIHVwZGF0ZXMuJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICA8L3NwYW4+XG4gICAgICA8L2xhYmVsPlxuICAgIDwvYzh5LWZvcm0tZ3JvdXA+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPVwibW9kYWwtZm9vdGVyIHNlcGFyYXRvci10b3AgYmctd2hpdGUgc3RpY2t5LWJvdHRvbVwiPlxuICAgIDxidXR0b25cbiAgICAgIHRpdGxlPVwie3sgJ0NhbmNlbCcgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgY2xhc3M9XCJidG4gYnRuLWRlZmF1bHRcIlxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAoY2xpY2spPVwiY2FuY2VsKClcIlxuICAgID5cbiAgICAgIHt7ICdDYW5jZWwnIHwgdHJhbnNsYXRlIH19XG4gICAgPC9idXR0b24+XG4gICAgPGJ1dHRvblxuICAgICAgdGl0bGU9XCJ7eyAnU2F2ZScgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgY2xhc3M9XCJidG4gYnRuLXByaW1hcnlcIlxuICAgICAgdHlwZT1cInN1Ym1pdFwiXG4gICAgICBbZGlzYWJsZWRdPVwiIXVzZXJGb3JtLmZvcm0udmFsaWQgfHwgdXNlckZvcm0uZm9ybS5wcmlzdGluZSB8fCBsb2FkaW5nXCJcbiAgICA+XG4gICAgICB7eyAnU2F2ZScgfCB0cmFuc2xhdGUgfX1cbiAgICA8L2J1dHRvbj5cbiAgPC9kaXY+XG48L2Zvcm0+XG4iXX0=
|
|
142
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci1lZGl0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2NvcmUvdXNlci91c2VyLWVkaXQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vY29yZS91c2VyL3VzZXItZWRpdC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQy9FLE9BQU8sRUFBUyx5QkFBeUIsRUFBRSxhQUFhLEVBQUUsV0FBVyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzNGLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDbEMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUV0RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDN0QsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDN0QsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7QUFZckUsTUFBTSxPQUFPLGlCQUFpQjtJQTZCNUIsWUFDUyxLQUFzQixFQUN0QixTQUEyQixFQUMxQixjQUE4QixFQUM5QixLQUFtQixFQUNuQixXQUF3QixFQUN4Qix5QkFBb0QsRUFDcEQsYUFBNEI7UUFON0IsVUFBSyxHQUFMLEtBQUssQ0FBaUI7UUFDdEIsY0FBUyxHQUFULFNBQVMsQ0FBa0I7UUFDMUIsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQzlCLFVBQUssR0FBTCxLQUFLLENBQWM7UUFDbkIsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFDeEIsOEJBQXlCLEdBQXpCLHlCQUF5QixDQUEyQjtRQUNwRCxrQkFBYSxHQUFiLGFB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O2dCQUNHLGlDQUFpQztzQkFBekMsS0FBSztnQkFDSSxNQUFNO3NCQUFmLE1BQU07Z0JBQ0csVUFBVTtzQkFBbkIsTUFBTTtnQkFDRyxxQkFBcUI7c0JBQTlCLE1BQU07Z0JBQ0csZ0NBQWdDO3NCQUF6QyxNQUFNO2dCQUNHLFFBQVE7c0JBQWpCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBJVXNlciwgVGVuYW50TG9naW5PcHRpb25zU2VydmljZSwgVGVuYW50U2VydmljZSwgVXNlclNlcnZpY2UgfSBmcm9tICdAYzh5L2NsaWVudCc7XG5pbXBvcnQgeyBjbG9uZSB9IGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQgeyBCc01vZGFsU2VydmljZSB9IGZyb20gJ25neC1ib290c3RyYXAvbW9kYWwnO1xuaW1wb3J0IHsgQWxlcnRTZXJ2aWNlIH0gZnJvbSAnLi4vYWxlcnQvYWxlcnQuc2VydmljZSc7XG5pbXBvcnQgeyBOZXdQYXNzd29yZCB9IGZyb20gJy4uL2F1dGhlbnRpY2F0aW9uL3Bhc3N3b3JkLm1vZGVsJztcbmltcG9ydCB7IEFwcFN0YXRlU2VydmljZSB9IGZyb20gJy4uL2NvbW1vbi91aS1zdGF0ZS5zZXJ2aWNlJztcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICcuLi9pMThuL3RyYW5zbGF0ZS5zZXJ2aWNlJztcbmltcG9ydCB7IFVzZXJUb3RwU2V0dXBDb21wb25lbnQgfSBmcm9tICcuL3VzZXItdG90cC1zZXR1cC5jb21wb25lbnQnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFVzZXIgZXh0ZW5kcyBJVXNlciB7XG4gIHBob25lOiBzdHJpbmc7XG4gIHNlbmRQYXNzd29yZFJlc2V0RW1haWw6IGJvb2xlYW47XG4gIG5ld3NsZXR0ZXI/OiBib29sZWFuO1xufVxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjOHktdXNlci1lZGl0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL3VzZXItZWRpdC5jb21wb25lbnQuaHRtbCdcbn0pXG5leHBvcnQgY2xhc3MgVXNlckVkaXRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBASW5wdXQoKSBsYW5nOiBzdHJpbmc7XG4gIEBJbnB1dCgpIGxvYWRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgc2V0IHVzZXIodTogVXNlcikge1xuICAgIGlmICh1KSB7XG4gICAgICB0aGlzLl91c2VyID0gY2xvbmUodSk7XG4gICAgICB0aGlzLnVzZXJJc0V4dGVybmFsID0gdS5jdXN0b21Qcm9wZXJ0aWVzLnVzZXJPcmlnaW4gPT09ICdPQVVUSDInO1xuICAgICAgdGhpcy5pc1Bob25lUmVxdWlyZWQgPSB0aGlzLmlzUGhvbmVSZXF1aXJlZCAmJiB1LnR3b0ZhY3RvckF1dGhlbnRpY2F0aW9uRW5hYmxlZDtcbiAgICB9XG4gIH1cbiAgZ2V0IHVzZXIoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3VzZXI7XG4gIH1cbiAgQElucHV0KCkgc2hvd1Byb2R1Y3RFeHBlcmllbmNlT3B0aW9ucyA9IGZhbHNlO1xuICBASW5wdXQoKSBpc1VzYWdlVHJhY2tpbmdFbmFibGVkID0gdHJ1ZTtcbiAgQElucHV0KCkgaXNVc2VyRW5nYWdlbWVudFByZWZlcmVuY2VFbmFibGVkID0gdHJ1ZTtcbiAgQE91dHB1dCgpIG9uVXNlcjogRXZlbnRFbWl0dGVyPFVzZXI+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgb25MYW5ndWFnZTogRXZlbnRFbWl0dGVyPHN0cmluZz4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBPdXRwdXQoKSBvblVzYWdlVHJhY2tpbmdDaGFuZ2U6IEV2ZW50RW1pdHRlcjxib29sZWFuPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIG9uVXNlckVuZ2FnZW1lbnRQcmVmZXJlbmNlQ2hhbmdlOiBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBPdXRwdXQoKSBvbkNhbmNlbDogRXZlbnRFbWl0dGVyPHZvaWQ+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICB1c2VySGFzQWN0aXZlVG90cCA9IGZhbHNlO1xuICB1c2VyQ2FuU2V0dXBUb3RwID0gZmFsc2U7XG4gIGlzUGhvbmVSZXF1aXJlZCA9IGZhbHNlO1xuICB1c2VySXNFeHRlcm5hbDogYm9vbGVhbjtcbiAgaXNUZmFFbmFibGVkOiBib29sZWFuO1xuXG4gIHByaXZhdGUgX3VzZXI6IFVzZXI7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIHN0YXRlOiBBcHBTdGF0ZVNlcnZpY2UsXG4gICAgcHVibGljIHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICBwcml2YXRlIGJzTW9kYWxTZXJ2aWNlOiBCc01vZGFsU2VydmljZSxcbiAgICBwcml2YXRlIGFsZXJ0OiBBbGVydFNlcnZpY2UsXG4gICAgcHJpdmF0ZSB1c2VyU2VydmljZTogVXNlclNlcnZpY2UsXG4gICAgcHJpdmF0ZSB0ZW5hbnRMb2dpbk9wdGlvbnNTZXJ2aWNlOiBUZW5hbnRMb2dpbk9wdGlvbnNTZXJ2aWNlLFxuICAgIHByaXZhdGUgdGVuYW50U2VydmljZTogVGVuYW50U2VydmljZVxuICApIHt9XG5cbiAgYXN5bmMgbmdPbkluaXQoKSB7XG4gICAgY29uc3QgY3VycmVudFRlbmFudCA9IChhd2FpdCB0aGlzLnRlbmFudFNlcnZpY2UuY3VycmVudCgpKS5kYXRhO1xuICAgIGNvbnN0IHsgZW5hYmxlZE9uU3lzdGVtTGV2ZWwsIGVuYWJsZWRPblRlbmFudExldmVsIH0gPSBhd2FpdCB0aGlzLnRlbmFudFNlcnZpY2UuZ2V0VGZhU2V0dGluZ3MoXG4gICAgICBjdXJyZW50VGVuYW50XG4gICAgKTtcbiAgICB0aGlzLmlzVGZhRW5hYmxlZCA9IGVuYWJsZWRPblN5c3RlbUxldmVsIHx8IGVuYWJsZWRPblRlbmFudExldmVsO1xuXG4gICAgYXdhaXQgdGhpcy5pbml0aWFsaXplVG90cFNldHRpbmdzKCk7XG4gICAgaWYgKHRoaXMudXNlci50d29GYWN0b3JBdXRoZW50aWNhdGlvbkVuYWJsZWQgJiYgIXRoaXMudXNlckNhblNldHVwVG90cCkge1xuICAgICAgdGhpcy5pc1Bob25lUmVxdWlyZWQgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHNldHVwVG90cCgpIHtcbiAgICB0aGlzLmJzTW9kYWxTZXJ2aWNlLnNob3coVXNlclRvdHBTZXR1cENvbXBvbmVudCwge1xuICAgICAgY2xhc3M6ICdtb2RhbC1zbScsXG4gICAgICBhcmlhRGVzY3JpYmVkYnk6ICdtb2RhbC1ib2R5JyxcbiAgICAgIGFyaWFMYWJlbGxlZEJ5OiAnbW9kYWwtdGl0bGUnXG4gICAgfSk7XG4gICAgdGhpcy5jYW5jZWwoKTsgLy8gdG8gY2xvc2UgdGhlIHVzZXIgZWRpdCBtb2RhbCBhbmQgcHJldmVudCBjb25zb2xlIGVycm9ycyBvbiBsb2dvdXRcbiAgfVxuXG4gIGNhbmNlbCgpIHtcbiAgICB0aGlzLm9uQ2FuY2VsLmVtaXQoKTtcbiAgfVxuXG4gIGFzeW5jIHNhdmUoKSB7XG4gICAgaWYgKHRoaXMubG9hZGluZykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnNob3dQcm9kdWN0RXhwZXJpZW5jZU9wdGlvbnMpIHtcbiAgICAgIHRoaXMub25Vc2FnZVRyYWNraW5nQ2hhbmdlLmVtaXQodGhpcy5pc1VzYWdlVHJhY2tpbmdFbmFibGVkKTtcbiAgICAgIC8qKlxuICAgICAgICogRW1pdHMgYSB1c2VyIGVuZ2FnZW1lbnQgcHJlZmVyZW5jZSBjaGFuZ2UgZXZlbnQuXG4gICAgICAgKiBJZiB1c2FnZSB0cmFja2luZyBpcyBkaXNhYmxlZCwgaXQgZW1pdHMgYGZhbHNlYC4gT3RoZXJ3aXNlLCBpdCBlbWl0cyB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGUgdXNlciBlbmdhZ2VtZW50IHByZWZlcmVuY2UuXG4gICAgICAgKi9cbiAgICAgIHRoaXMub25Vc2VyRW5nYWdlbWVudFByZWZlcmVuY2VDaGFuZ2UuZW1pdChcbiAgICAgICAgdGhpcy5pc1VzYWdlVHJhY2tpbmdFbmFibGVkID09PSBmYWxzZSA/IGZhbHNlIDogdGhpcy5pc1VzZXJFbmdhZ2VtZW50UHJlZmVyZW5jZUVuYWJsZWRcbiAgICAgICk7XG4gICAgfVxuXG4gICAgdGhpcy5vblVzZXIuZW1pdCh0aGlzLl91c2VyKTtcbiAgfVxuXG4gIG9uTmV3UGFzc3dvcmRDaGFuZ2VkKG5ld1Bhc3N3b3JkOiBOZXdQYXNzd29yZCkge1xuICAgIHRoaXMuX3VzZXIucGFzc3dvcmQgPSBuZXdQYXNzd29yZC5wYXNzd29yZDtcbiAgfVxuXG4gIGdldCBsYW5ncygpIHtcbiAgICByZXR1cm4gdGhpcy5zdGF0ZS5zdGF0ZS5sYW5ncztcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgaW5pdGlhbGl6ZVRvdHBTZXR0aW5ncygpIHtcbiAgICB0cnkge1xuICAgICAgdGhpcy51c2VyQ2FuU2V0dXBUb3RwID0gYXdhaXQgdGhpcy5jYW5Vc2VyU2V0dXBUb3RwKCk7XG4gICAgICBpZiAodGhpcy51c2VyQ2FuU2V0dXBUb3RwKSB7XG4gICAgICAgIGNvbnN0IHsgZGF0YTogdG90cEFjdGl2aXR5IH0gPSBhd2FpdCB0aGlzLnVzZXJTZXJ2aWNlLmdldEFjdGl2aXR5VG90cCgpO1xuICAgICAgICB0aGlzLnVzZXJIYXNBY3RpdmVUb3RwID0gdG90cEFjdGl2aXR5LmlzQWN0aXZlO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICB0aGlzLmFsZXJ0LnJlbW92ZUxhc3REYW5nZXIoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGNhblVzZXJTZXR1cFRvdHAoKSB7XG4gICAgLy8gd2UgZG9uJ3QgY2hlY2sgZm9yIHRlbmFudCBvcHRpb25zIGhlcmUgZHVlIHRvIHBlcm1pc3Npb24gcmVzdHJpY3Rpb25zIG9uIHRoYXQgZW5kLXBvaW50XG4gICAgY29uc3QgbG9naW5PcHRpb25zID0gKGF3YWl0IHRoaXMudGVuYW50TG9naW5PcHRpb25zU2VydmljZS5saXN0Rm9yQ3VycmVudFRlbmFudCgpKS5kYXRhO1xuICAgIHJldHVybiBsb2dpbk9wdGlvbnMuc29tZSgoeyB0ZmFTdHJhdGVneSA9ICcnIH0pID0+IHRmYVN0cmF0ZWd5LnRvTG93ZXJDYXNlKCkgPT09ICd0b3RwJyk7XG4gIH1cbn1cbiIsIjxmb3JtICN1c2VyRm9ybT1cIm5nRm9ybVwiIChuZ1N1Ym1pdCk9XCJ1c2VyRm9ybS5mb3JtLnZhbGlkICYmIHNhdmUoKVwiPlxuICA8ZGl2IGNsYXNzPVwiZC1ibG9jayBwLTI0IHAtYi0wXCI+XG4gICAgPGRpdiBjbGFzcz1cImFsZXJ0IGFsZXJ0LXdhcm5pbmdcIiByb2xlPVwiYWxlcnRcIiAqbmdJZj1cInVzZXJJc0V4dGVybmFsXCIgdHJhbnNsYXRlPlxuICAgICAgU29tZSBvZiB0aGUgdXNlciBzZXR0aW5ncyBhcmUgbm90IGVkaXRhYmxlIGhlcmUgYmVjYXVzZSB0aGV5IGFyZSBtYW5hZ2VkIHZpYSB5b3VyXG4gICAgICBhdXRob3JpemF0aW9uIHNlcnZlci5cbiAgICA8L2Rpdj5cbiAgICA8Yzh5LWZvcm0tZ3JvdXA+XG4gICAgICA8bGFiZWwgdHJhbnNsYXRlIGZvcj1cInVzZXJOYW1lXCI+VXNlcm5hbWUgKGZvciBleGFtcGxlLCBlbWFpbCk8L2xhYmVsPlxuICAgICAgPGlucHV0XG4gICAgICAgIGlkPVwidXNlck5hbWVcIlxuICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiXG4gICAgICAgIFsobmdNb2RlbCldPVwidXNlci51c2VyTmFtZVwiXG4gICAgICAgIG5hbWU9XCJ1c2VyTmFtZVwiXG4gICAgICAgIGF1dG9jb21wbGV0ZT1cIm9mZlwiXG4gICAgICAgIHJlcXVpcmVkXG4gICAgICAgIG1heGxlbmd0aD1cIjI1NFwiXG4gICAgICAgIHBsYWNlaG9sZGVyPVwie3sgJ2UuZy4gam9lLmRvZUBleGFtcGxlLmNvbWBMT0NBTElaRWAnIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgW2Rpc2FibGVkXT1cInVzZXIuaWRcIlxuICAgICAgICBjOHlEZWZhdWx0VmFsaWRhdGlvbj1cInVzZXJcIlxuICAgICAgLz5cbiAgICA8L2M4eS1mb3JtLWdyb3VwPlxuXG4gICAgPGM4eS1mb3JtLWdyb3VwPlxuICAgICAgPGxhYmVsIHRyYW5zbGF0ZSBmb3I9XCJkaXNwbGF5TmFtZVwiPkxvZ2luIGFsaWFzPC9sYWJlbD5cbiAgICAgIDxpbnB1dFxuICAgICAgICBpZD1cImRpc3BsYXlOYW1lXCJcbiAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIlxuICAgICAgICBbKG5nTW9kZWwpXT1cInVzZXIuZGlzcGxheU5hbWVcIlxuICAgICAgICBuYW1lPVwiZGlzcGxheU5hbWVcIlxuICAgICAgICBhdXRvY29tcGxldGU9XCJvZmZcIlxuICAgICAgICBtYXhsZW5ndGg9XCIyNTRcIlxuICAgICAgICBwbGFjZWhvbGRlcj1cInt7ICdlLmcuIGpvZS5kb2VgTE9DQUxJWkVgJyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICAgIFtkaXNhYmxlZF09XCJ1c2VySXNFeHRlcm5hbFwiXG4gICAgICAgIGM4eURlZmF1bHRWYWxpZGF0aW9uPVwibG9naW5BbGlhc1wiXG4gICAgICAvPlxuICAgIDwvYzh5LWZvcm0tZ3JvdXA+XG5cbiAgICA8Yzh5LWZvcm0tZ3JvdXAgW2hhc1dhcm5pbmddPVwiIXVzZXIuZW1haWxcIj5cbiAgICAgIDxsYWJlbCB0cmFuc2xhdGUgZm9yPVwidXNlckVtYWlsXCI+RW1haWw8L2xhYmVsPlxuICAgICAgPGlucHV0XG4gICAgICAgIGlkPVwidXNlckVtYWlsXCJcbiAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIlxuICAgICAgICB0eXBlPVwiZW1haWxcIlxuICAgICAgICBuYW1lPVwiZW1haWxcIlxuICAgICAgICBbbWF4bGVuZ3RoXT1cIjI1NFwiXG4gICAgICAgIGF1dG9jb21wbGV0ZT1cIm9mZlwiXG4gICAgICAgIHBsYWNlaG9sZGVyPVwie3sgJ2UuZy4gam9lLmRvZUBleGFtcGxlLmNvbWBMT0NBTElaRWAnIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgWyhuZ01vZGVsKV09XCJ1c2VyLmVtYWlsXCJcbiAgICAgICAgZW1haWxcbiAgICAgICAgW3JlcXVpcmVkXT1cInRydWVcIlxuICAgICAgICBbZGlzYWJsZWRdPVwidXNlcklzRXh0ZXJuYWxcIlxuICAgICAgLz5cbiAgICA8L2M4eS1mb3JtLWdyb3VwPlxuXG4gICAgPGRpdiBjbGFzcz1cInJvd1wiPlxuICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS02XCI+XG4gICAgICAgIDxjOHktZm9ybS1ncm91cD5cbiAgICAgICAgICA8bGFiZWwgdHJhbnNsYXRlIGZvcj1cInVzZXJGaXJzdE5hbWVcIj5GaXJzdCBuYW1lPC9sYWJlbD5cbiAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgIGlkPVwidXNlckZpcnN0TmFtZVwiXG4gICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiXG4gICAgICAgICAgICBhdXRvY29tcGxldGU9XCJvZmZcIlxuICAgICAgICAgICAgbWF4bGVuZ3RoPVwiNTBcIlxuICAgICAgICAgICAgbmFtZT1cImZpcnN0TmFtZVwiXG4gICAgICAgICAgICBbKG5nTW9kZWwpXT1cInVzZXIuZmlyc3ROYW1lXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJ1c2VySXNFeHRlcm5hbFwiXG4gICAgICAgICAgLz5cbiAgICAgICAgPC9jOHktZm9ybS1ncm91cD5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS02XCI+XG4gICAgICAgIDxjOHktZm9ybS1ncm91cD5cbiAgICAgICAgICA8bGFiZWwgdHJhbnNsYXRlIGZvcj1cInVzZXJMYXN0TmFtZVwiPkxhc3QgbmFtZTwvbGFiZWw+XG4gICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICBpZD1cInVzZXJMYXN0TmFtZVwiXG4gICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiXG4gICAgICAgICAgICBhdXRvY29tcGxldGU9XCJvZmZcIlxuICAgICAgICAgICAgbWF4bGVuZ3RoPVwiNTBcIlxuICAgICAgICAgICAgbmFtZT1cImxhc3ROYW1lXCJcbiAgICAgICAgICAgIFsobmdNb2RlbCldPVwidXNlci5sYXN0TmFtZVwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwidXNlcklzRXh0ZXJuYWxcIlxuICAgICAgICAgIC8+XG4gICAgICAgIDwvYzh5LWZvcm0tZ3JvdXA+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDxjOHktZm9ybS1ncm91cD5cbiAgICAgIDxsYWJlbCB0cmFuc2xhdGUgZm9yPVwidXNlclRlbGVwaG9uZVwiPlRlbGVwaG9uZTwvbGFiZWw+XG4gICAgICA8aW5wdXRcbiAgICAgICAgaWQ9XCJ1c2VyVGVsZXBob25lXCJcbiAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIlxuICAgICAgICBhdXRvY29tcGxldGU9XCJvZmZcIlxuICAgICAgICBuYW1lPVwicGhvbmVcIlxuICAgICAgICBtYXhsZW5ndGg9XCIyNTRcIlxuICAgICAgICBbKG5nTW9kZWwpXT1cInVzZXIucGhvbmVcIlxuICAgICAgICBwbGFjZWhvbGRlcj1cInt7ICdlLmcuICs0OSA5IDg3NiA1NDMgMjEwYExPQ0FMSVpFYCcgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICBjOHlQaG9uZVZhbGlkYXRpb25cbiAgICAgICAgYzh5RGVmYXVsdFZhbGlkYXRpb249XCJwaG9uZU51bWJlclwiXG4gICAgICAgIFtyZXF1aXJlZF09XCJpc1Bob25lUmVxdWlyZWRcIlxuICAgICAgICBbZGlzYWJsZWRdPVwidXNlcklzRXh0ZXJuYWxcIlxuICAgICAgLz5cbiAgICA8L2M4eS1mb3JtLWdyb3VwPlxuXG4gICAgPGM4eS1mb3JtLWdyb3VwPlxuICAgICAgPGxhYmVsIHRyYW5zbGF0ZSBmb3I9XCJ1c2VyTGFuZ1wiPkxhbmd1YWdlPC9sYWJlbD5cbiAgICAgIDxkaXYgY2xhc3M9XCJjOHktc2VsZWN0LXdyYXBwZXJcIj5cbiAgICAgICAgPHNlbGVjdFxuICAgICAgICAgIGlkPVwidXNlckxhbmdcIlxuICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sXCJcbiAgICAgICAgICAjc2VsZWN0TGFuZ1xuICAgICAgICAgIG5hbWU9XCJsYW5nXCJcbiAgICAgICAgICBbKG5nTW9kZWwpXT1cImxhbmdcIlxuICAgICAgICAgIChjaGFuZ2UpPVwib25MYW5ndWFnZS5lbWl0KHNlbGVjdExhbmcudmFsdWUpXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxvcHRpb24gKm5nRm9yPVwibGV0IGxhbmcgb2YgbGFuZ3NcIiBbdmFsdWVdPVwibGFuZ1wiPlxuICAgICAgICAgICAge3sgdHJhbnNsYXRlLmdldE5hdGl2ZUxhbmd1YWdlKGxhbmcpIH19XG4gICAgICAgICAgPC9vcHRpb24+XG4gICAgICAgIDwvc2VsZWN0PlxuICAgICAgICA8c3Bhbj48L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICA8L2M4eS1mb3JtLWdyb3VwPlxuXG4gICAgPGM4eS1mb3JtLWdyb3VwIGNsYXNzPVwicC10LTE2IHNlcGFyYXRvci10b3BcIiAqbmdJZj1cInNob3dQcm9kdWN0RXhwZXJpZW5jZU9wdGlvbnNcIj5cbiAgICAgIDxsYWJlbCB0cmFuc2xhdGU+UHJvZHVjdCBleHBlcmllbmNlPC9sYWJlbD5cbiAgICAgIDxsYWJlbCBjbGFzcz1cImM4eS1zd2l0Y2hcIiBmb3I9XCJwcm9kdWN0VXNhZ2VUcmFja2luZ1wiPlxuICAgICAgICA8aW5wdXRcbiAgICAgICAgICBpZD1cInByb2R1Y3RVc2FnZVRyYWNraW5nXCJcbiAgICAgICAgICBuYW1lPVwicHJvZHVjdFVzYWdlVHJhY2tpbmdcIlxuICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgICAgWyhuZ01vZGVsKV09XCJpc1VzYWdlVHJhY2tpbmdFbmFibGVkXCJcbiAgICAgICAgLz5cbiAgICAgICAgPHNwYW4+PC9zcGFuPlxuICAgICAgICB7eyAnRW5hYmxlIHBlcnNvbmFsaXplZCBwcm9kdWN0IGV4cGVyaWVuY2UgdHJhY2tpbmcnIHwgdHJhbnNsYXRlIH19XG4gICAgICA8L2xhYmVsPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzVXNhZ2VUcmFja2luZ0VuYWJsZWRcIj5cbiAgICAgICAgPGxhYmVsIGNsYXNzPVwiYzh5LXN3aXRjaCBtLWwtMFwiIGZvcj1cInVzZXJFbmdhZ2VtZW50UHJlZmVyZW5jZVwiPlxuICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgaWQ9XCJ1c2VyRW5nYWdlbWVudFByZWZlcmVuY2VcIlxuICAgICAgICAgICAgbmFtZT1cInVzZXJFbmdhZ2VtZW50UHJlZmVyZW5jZVwiXG4gICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJpc1VzZXJFbmdhZ2VtZW50UHJlZmVyZW5jZUVuYWJsZWRcIlxuICAgICAgICAgIC8+XG4gICAgICAgICAgPHNwYW4+PC9zcGFuPlxuICAgICAgICAgIHt7ICdFbmFibGUgaW4tcHJvZHVjdCBpbmZvcm1hdGlvbiAmIGNvbW11bmljYXRpb24nIHwgdHJhbnNsYXRlIH19XG4gICAgICAgIDwvbGFiZWw+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L2M4eS1mb3JtLWdyb3VwPlxuXG4gICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgcC10LTE2IHNlcGFyYXRvci10b3BcIiAqbmdJZj1cIiF1c2VySXNFeHRlcm5hbFwiPlxuICAgICAgPGxhYmVsIGNsYXNzPVwiY29udHJvbC1sYWJlbFwiPnt7ICdMb2dpbiBvcHRpb25zJyB8IHRyYW5zbGF0ZSB9fTwvbGFiZWw+XG4gICAgICA8Yzh5LW5ldy1wYXNzd29yZCAocGFzc3dvcmQpPVwib25OZXdQYXNzd29yZENoYW5nZWQoJGV2ZW50KVwiPjwvYzh5LW5ldy1wYXNzd29yZD5cbiAgICAgIDxidXR0b25cbiAgICAgICAgdGl0bGU9XCJ7eyAnU2V0IHVwIHR3by1mYWN0b3IgYXV0aGVudGljYXRpb24nIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgY2xhc3M9XCJidG4gYnRuLWRlZmF1bHRcIlxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgKGNsaWNrKT1cInNldHVwVG90cCgpXCJcbiAgICAgICAgKm5nSWY9XCJ1c2VyQ2FuU2V0dXBUb3RwICYmICF1c2VySGFzQWN0aXZlVG90cCAmJiBpc1RmYUVuYWJsZWRcIlxuICAgICAgPlxuICAgICAgICB7eyAnU2V0IHVwIHR3by1mYWN0b3IgYXV0aGVudGljYXRpb24nIHwgdHJhbnNsYXRlIH19XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cblxuICAgIDxjOHktZm9ybS1ncm91cCAqbmdJZj1cIiEhKHN0YXRlLnN0YXRlJCB8IGFzeW5jKS5uZXdzbGV0dGVyXCI+XG4gICAgICA8bGFiZWwgdHJhbnNsYXRlPk5ld3NsZXR0ZXI8L2xhYmVsPlxuICAgICAgPGxhYmVsXG4gICAgICAgIHRpdGxlPVwie3sgJ1NlbmQgbWUgaW5mb3JtYXRpb24gYWJvdXQgb3V0YWdlcywgbWFpbnRlbmFuY2Ugb3IgdXBkYXRlcy4nIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgY2xhc3M9XCJjOHktY2hlY2tib3hcIlxuICAgICAgPlxuICAgICAgICA8aW5wdXRcbiAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICAgIG5hbWU9XCJuZXdzbGV0dGVyXCJcbiAgICAgICAgICBbKG5nTW9kZWwpXT1cInVzZXIubmV3c2xldHRlclwiXG4gICAgICAgICAgW2Rpc2FibGVkXT1cInVzZXJJc0V4dGVybmFsXCJcbiAgICAgICAgLz5cbiAgICAgICAgPHNwYW4+PC9zcGFuPlxuICAgICAgICA8c3Bhbj5cbiAgICAgICAgICB7eyAnU2VuZCBtZSBpbmZvcm1hdGlvbiBhYm91dCBvdXRhZ2VzLCBtYWludGVuYW5jZSBvciB1cGRhdGVzLicgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgPC9zcGFuPlxuICAgICAgPC9sYWJlbD5cbiAgICA8L2M4eS1mb3JtLWdyb3VwPlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz1cIm1vZGFsLWZvb3RlciBzZXBhcmF0b3ItdG9wIGJnLXdoaXRlIHN0aWNreS1ib3R0b21cIj5cbiAgICA8YnV0dG9uXG4gICAgICB0aXRsZT1cInt7ICdDYW5jZWwnIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgIGNsYXNzPVwiYnRuIGJ0bi1kZWZhdWx0XCJcbiAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgKGNsaWNrKT1cImNhbmNlbCgpXCJcbiAgICA+XG4gICAgICB7eyAnQ2FuY2VsJyB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvYnV0dG9uPlxuICAgIDxidXR0b25cbiAgICAgIHRpdGxlPVwie3sgJ1NhdmUnIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCJcbiAgICAgIHR5cGU9XCJzdWJtaXRcIlxuICAgICAgW2Rpc2FibGVkXT1cIiF1c2VyRm9ybS5mb3JtLnZhbGlkIHx8IHVzZXJGb3JtLmZvcm0ucHJpc3RpbmUgfHwgbG9hZGluZ1wiXG4gICAgPlxuICAgICAge3sgJ1NhdmUnIHwgdHJhbnNsYXRlIH19XG4gICAgPC9idXR0b24+XG4gIDwvZGl2PlxuPC9mb3JtPlxuIl19
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { Injectable
|
|
1
|
+
import { Injectable } from '@angular/core';
|
|
2
2
|
import { InventoryService, UserService } from '@c8y/client';
|
|
3
|
-
import { AlertService, DataGridService,
|
|
3
|
+
import { AlertService, DataGridService, gettext, ModalService, Status, UserPreferencesService } from '@c8y/ngx-components';
|
|
4
4
|
import { TranslateService } from '@ngx-translate/core';
|
|
5
5
|
import { AlarmsDeviceGridColumn } from './columns/alarms.device-grid-column';
|
|
6
6
|
import { ColumnUtilService } from './columns/column-util.service';
|
|
@@ -18,7 +18,7 @@ import * as i2 from "@ngx-translate/core";
|
|
|
18
18
|
import * as i3 from "@c8y/ngx-components";
|
|
19
19
|
import * as i4 from "./columns/column-util.service";
|
|
20
20
|
export class DeviceGridService extends DataGridService {
|
|
21
|
-
constructor(inventoryService, userService, translateService, alertService, modal, columnUtilService, userPreferencesService
|
|
21
|
+
constructor(inventoryService, userService, translateService, alertService, modal, columnUtilService, userPreferencesService) {
|
|
22
22
|
super(userPreferencesService);
|
|
23
23
|
this.inventoryService = inventoryService;
|
|
24
24
|
this.userService = userService;
|
|
@@ -27,7 +27,6 @@ export class DeviceGridService extends DataGridService {
|
|
|
27
27
|
this.modal = modal;
|
|
28
28
|
this.columnUtilService = columnUtilService;
|
|
29
29
|
this.userPreferencesService = userPreferencesService;
|
|
30
|
-
this.gainsightService = gainsightService;
|
|
31
30
|
this.GRID_CONFIG_DEFAULT_STORAGE_KEY = 'device-grid-config';
|
|
32
31
|
}
|
|
33
32
|
getDefaultColumns() {
|
|
@@ -129,16 +128,10 @@ export class DeviceGridService extends DataGridService {
|
|
|
129
128
|
});
|
|
130
129
|
await this.inventoryService.delete(device, modalResult.confirmOptions);
|
|
131
130
|
this.alertService.success(gettext('Device deleted.'));
|
|
132
|
-
if (this.gainsightService) {
|
|
133
|
-
this.gainsightService.triggerEvent('deviceGrid:EntryDeleted');
|
|
134
|
-
}
|
|
135
131
|
return Promise.resolve();
|
|
136
132
|
}
|
|
137
133
|
catch (ex) {
|
|
138
134
|
// only if not cancel from modal
|
|
139
|
-
if (this.gainsightService && !ex) {
|
|
140
|
-
this.gainsightService.triggerEvent('deviceGrid:EntryDeletionCancelled');
|
|
141
|
-
}
|
|
142
135
|
if (ex) {
|
|
143
136
|
this.alertService.addServerFailure(ex);
|
|
144
137
|
}
|
|
@@ -233,14 +226,12 @@ export class DeviceGridService extends DataGridService {
|
|
|
233
226
|
};
|
|
234
227
|
}
|
|
235
228
|
}
|
|
236
|
-
DeviceGridService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: DeviceGridService, deps: [{ token: i1.InventoryService }, { token: i1.UserService }, { token: i2.TranslateService }, { token: i3.AlertService }, { token: i3.ModalService }, { token: i4.ColumnUtilService }, { token: i3.UserPreferencesService }
|
|
229
|
+
DeviceGridService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: DeviceGridService, deps: [{ token: i1.InventoryService }, { token: i1.UserService }, { token: i2.TranslateService }, { token: i3.AlertService }, { token: i3.ModalService }, { token: i4.ColumnUtilService }, { token: i3.UserPreferencesService }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
237
230
|
DeviceGridService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: DeviceGridService, providedIn: 'root' });
|
|
238
231
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: DeviceGridService, decorators: [{
|
|
239
232
|
type: Injectable,
|
|
240
233
|
args: [{
|
|
241
234
|
providedIn: 'root'
|
|
242
235
|
}]
|
|
243
|
-
}], ctorParameters: function () { return [{ type: i1.InventoryService }, { type: i1.UserService }, { type: i2.TranslateService }, { type: i3.AlertService }, { type: i3.ModalService }, { type: i4.ColumnUtilService }, { type: i3.UserPreferencesService }
|
|
244
|
-
type: Optional
|
|
245
|
-
}] }]; } });
|
|
246
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGV2aWNlLWdyaWQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2RldmljZS1ncmlkL2RldmljZS1ncmlkLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDckQsT0FBTyxFQUFrQixnQkFBZ0IsRUFBUyxXQUFXLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDbkYsT0FBTyxFQUVMLFlBQVksRUFHWixlQUFlLEVBQ2YsZ0JBQWdCLEVBQ2hCLE9BQU8sRUFHUCxZQUFZLEVBR1osTUFBTSxFQUNOLHNCQUFzQixFQUN2QixNQUFNLHFCQUFxQixDQUFDO0FBQzdCLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRXZELE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQzdFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQzNFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ3pFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQzNFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ3pFLE9BQU8sRUFBRSxnQ0FBZ0MsRUFBRSxNQUFNLGdEQUFnRCxDQUFDO0FBQ2xHLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBQzFGLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQzdFLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLHdDQUF3QyxDQUFDOzs7Ozs7QUFNbEYsTUFBTSxPQUFPLGlCQUFrQixTQUFRLGVBQWU7SUFHcEQsWUFDWSxnQkFBa0MsRUFDbEMsV0FBd0IsRUFDeEIsZ0JBQWtDLEVBQ2xDLFlBQTBCLEVBQzFCLEtBQW1CLEVBQ25CLGlCQUFvQyxFQUNwQyxzQkFBOEMsRUFDbEMsZ0JBQW1DO1FBRXpELEtBQUssQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO1FBVHBCLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUFDbEMsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFDeEIscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQUNsQyxpQkFBWSxHQUFaLFlBQVksQ0FBYztRQUMxQixVQUFLLEdBQUwsS0FBSyxDQUFjO1FBQ25CLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBbUI7UUFDcEMsMkJBQXNCLEdBQXRCLHNCQUFzQixDQUF3QjtRQUNsQyxxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQW1CO1FBVmpELG9DQUErQixHQUFHLG9CQUFvQixDQUFDO0lBYWpFLENBQUM7SUFFRCxpQkFBaUI7UUFDZixNQUFNLGNBQWMsR0FBRztZQUNyQixJQUFJLHNCQUFzQixFQUFFO1lBQzVCLElBQUksb0JBQW9CLEVBQUU7WUFDMUIsSUFBSSxxQkFBcUIsRUFBRTtZQUMzQixJQUFJLDRCQUE0QixFQUFFO1lBQ2xDLElBQUkscUJBQXFCLEVBQUU7WUFDM0IsSUFBSSxnQ0FBZ0MsRUFBRTtZQUN0QyxJQUFJLHdCQUF3QixFQUFFO1lBQzlCLElBQUksb0JBQW9CLEVBQUU7WUFDMUIsSUFBSSxzQkFBc0IsRUFBRTtTQUM3QixDQUFDO1FBRUYsT0FBTyxjQUFjLENBQUM7SUFDeEIsQ0FBQztJQUVELHlCQUF5QjtRQUN2QixNQUFNLHFCQUFxQixHQUFHO1lBQzVCLElBQUksc0JBQXNCLEVBQUU7WUFDNUIsSUFBSSxvQkFBb0IsRUFBRTtZQUMxQixJQUFJLHFCQUFxQixFQUFFO1lBQzNCLElBQUksNEJBQTRCLEVBQUU7WUFDbEMsSUFBSSxnQ0FBZ0MsRUFBRTtZQUN0QyxJQUFJLHdCQUF3QixFQUFFO1lBQzlCLElBQUksb0JBQW9CLEVBQUU7WUFDMUIsSUFBSSxzQkFBc0IsRUFBRTtTQUM3QixDQUFDO1FBRUYsT0FBTyxxQkFBcUIsQ0FBQztJQUMvQixDQUFDO0lBRUQsb0JBQW9CO1FBQ2xCLE9BQU87WUFDTCxRQUFRLEVBQUUsRUFBRTtZQUNaLFdBQVcsRUFBRSxDQUFDO1NBQ2YsQ0FBQztJQUNKLENBQUM7SUFFRCwyQkFBMkI7UUFDekIsT0FBTztZQUNMLFFBQVEsRUFBRSxFQUFFO1lBQ1osV0FBVyxFQUFFLENBQUM7U0FDZixDQUFDO0lBQ0osQ0FBQztJQUVELHdCQUF3QjtRQUN0QixPQUFPO1lBQ0w7Z0JBQ0UsSUFBSSw0Q0FBNkI7Z0JBQ2pDLFFBQVEsRUFBRSxDQUFDLElBQVMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFzQixDQUFDO2FBQzdEO1NBQ0YsQ0FBQztJQUNKLENBQUM7SUFFRCw0QkFBNEI7UUFDMUIsT0FBTyxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQsOEJBQThCO1FBQzVCLE9BQU8sRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVELGFBQWEsQ0FBQyxNQUFzQjtRQUNsQyxPQUFPLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDdEQsQ0FBQztJQUVELFFBQVEsQ0FBQyxNQUFzQjtRQUM3QixPQUFPLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDakQsQ0FBQztJQUVELGVBQWUsQ0FBQyxNQUFzQjtRQUNwQyxPQUFPLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDeEQsQ0FBQztJQUVELGVBQWUsQ0FBQyxNQUFzQixFQUFFLGdCQUFrQztRQUN4RSxPQUFPLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxlQUFlLENBQUMsTUFBTSxFQUFFLGdCQUFnQixDQUFDLENBQUM7SUFDMUUsQ0FBQztJQUVELE9BQU8sQ0FBQyxhQUE2QixFQUFFLE1BQU0sR0FBRyxJQUFJO1FBQ2xELE9BQU8sSUFBSSxDQUFDLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxhQUFhLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDL0QsQ0FBQztJQUVELGFBQWEsQ0FBQyxNQUFzQjtRQUNsQyxPQUFPLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDdEQsQ0FBQztJQUVELEtBQUssQ0FBQyxNQUFNLENBQUMsTUFBc0I7UUFDakMsSUFBSTtZQUNGLE1BQU0sa0JBQWtCLEdBQUcsTUFBTSxDQUMvQixNQUFNLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLEVBQUUsWUFBWSxFQUFFLElBQUksRUFBRSxDQUFDLENBQ25FLENBQUMsSUFBSSxDQUFDO1lBQ1AsTUFBTSxlQUFlLEdBQUcsa0JBQWtCLENBQUMsWUFBWSxFQUFFLFVBQVUsRUFBRSxNQUFNLEdBQUcsQ0FBQyxDQUFDO1lBQ2hGLE1BQU0saUJBQWlCLEdBQUcsa0JBQWtCLENBQUMsY0FBYyxFQUFFLFVBQVUsRUFBRSxNQUFNLEdBQUcsQ0FBQyxDQUFDO1lBQ3BGLE1BQU0sY0FBYyxHQUFHLGtCQUFrQixDQUFDLFdBQVcsRUFBRSxVQUFVLEVBQUUsTUFBTSxHQUFHLENBQUMsQ0FBQztZQUM5RSxNQUFNLGtCQUFrQixHQUFHLEdBQUcsRUFBRSxDQUFDLGlCQUFpQixJQUFJLGVBQWUsSUFBSSxjQUFjLENBQUM7WUFDeEYsTUFBTSxXQUFXLEdBQUcsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FDMUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxFQUN4QixJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUMzQixPQUFPLENBQUMsc0VBQXNFLENBQUMsRUFDL0UsTUFBTSxDQUNQLEVBQ0QsTUFBTSxDQUFDLE1BQU0sRUFDYixFQUFFLEVBQUUsRUFBRSxPQUFPLENBQUMsUUFBUSxDQUFDLEVBQUUsTUFBTSxFQUFFLE9BQU8sQ0FBQyxRQUFRLENBQUMsRUFBRSxFQUNwRDtnQkFDRSxPQUFPLEVBQUU7b0JBQ1AsSUFBSSxFQUFFLE9BQU8sQ0FBQyw2Q0FBNkMsQ0FBQztvQkFDNUQsT0FBTyxFQUFFLGtCQUFrQixFQUFFO29CQUM3QixNQUFNLEVBQUUsa0JBQWtCO29CQUMxQixhQUFhLEVBQUUsZ0JBQWdCO2lCQUNoQztnQkFDRCxjQUFjLEVBQUU7b0JBQ2QsSUFBSSxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQ2pDLE9BQU8sQ0FBQyxvREFBb0QsQ0FBQyxFQUM3RCxNQUFNLENBQ1A7b0JBQ0QsT0FBTyxFQUFFLEtBQUs7b0JBQ2QsTUFBTSxFQUFFLEdBQUcsRUFBRTt3QkFDWCxNQUFNLFlBQVksR0FBRyxNQUFNLENBQUMsWUFBWSxDQUFDO3dCQUN6QyxNQUFNLG9CQUFvQixHQUN4QixNQUFNLENBQUMsS0FBSzs0QkFDWixJQUFJLENBQUMsV0FBVyxDQUFDLFlBQVksQ0FBQyxFQUFFLEVBQUUsRUFBRSxNQUFNLENBQUMsS0FBSyxFQUFzQixDQUFDLENBQUM7d0JBRTFFLE9BQU8sT0FBTyxDQUFDLFlBQVksSUFBSSxvQkFBb0IsQ0FBQyxDQUFDO29CQUN2RCxDQUFDO29CQUNELGFBQWEsRUFBRSxTQUFTO2lCQUN6QjthQUNGLENBQ0YsQ0FBQztZQUNGLE1BQU0sSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FDaEMsTUFBTSxFQUNMLFdBQTBELENBQUMsY0FBYyxDQUMzRSxDQUFDO1lBQ0YsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQztZQUN0RCxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsRUFBRTtnQkFDekIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFlBQVksQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO2FBQy9EO1lBQ0QsT0FBTyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7U0FDMUI7UUFBQyxPQUFPLEVBQUUsRUFBRTtZQUNYLGdDQUFnQztZQUNoQyxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsSUFBSSxDQUFDLEVBQUUsRUFBRTtnQkFDaEMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFlBQVksQ0FBQyxtQ0FBbUMsQ0FBQyxDQUFDO2FBQ3pFO1lBQ0QsSUFBSSxFQUFFLEVBQUU7Z0JBQ04sSUFBSSxDQUFDLFlBQVksQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLENBQUMsQ0FBQzthQUN4QztZQUNELE9BQU8sT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDO1NBQ3pCO0lBQ0gsQ0FBQztJQUVELEtBQUssQ0FBQyxPQUFPLENBQ1gsT0FBaUIsRUFDakIsVUFBc0IsRUFDdEIsUUFBYSxFQUFFLEVBQ2YsZUFBd0IsS0FBSztRQUU3QixNQUFNLE9BQU8sR0FBRztZQUNkLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE9BQU8sRUFBRSxVQUFVLEVBQUUsS0FBSyxDQUFDO1lBQ3JELFVBQVUsRUFBRSxJQUFJO1lBQ2hCLFlBQVk7U0FDYixDQUFDO1FBQ0YsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzdDLENBQUM7SUFFRCxLQUFLLENBQUMsa0JBQWtCLENBQ3RCLE9BQWlCLEVBQ2pCLFVBQXNCLEVBQ3RCLFFBQWEsRUFBRSxFQUNmLGVBQXdCLEtBQUssRUFDN0IsRUFBVTtRQUVWLE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxDQUFDO1FBQ2hDLE1BQU0sT0FBTyxHQUFHO1lBQ2QsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsT0FBTyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsa0JBQWtCLENBQUM7WUFDekUsVUFBVSxFQUFFLElBQUk7WUFDaEIsWUFBWTtTQUNiLENBQUM7UUFDRixPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDN0QsQ0FBQztJQUVELEtBQUssQ0FBQyxRQUFRLENBQUMsT0FBaUIsRUFBRSxVQUFzQixFQUFFLFFBQWEsRUFBRTtRQUN2RSxNQUFNLE9BQU8sR0FBRztZQUNkLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE9BQU8sRUFBRSxVQUFVLEVBQUUsS0FBSyxDQUFDO1lBQ3JELFFBQVEsRUFBRSxDQUFDO1lBQ1gsV0FBVyxFQUFFLENBQUM7U0FDZixDQUFDO1FBQ0YsT0FBTyxDQUFDLE1BQU0sSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUM7SUFDdkUsQ0FBQztJQUVELEtBQUssQ0FBQyxvQkFBb0IsQ0FDeEIsT0FBaUIsRUFDakIsVUFBc0IsRUFDdEIsUUFBYSxFQUFFLEVBQ2YsRUFBVTtRQUVWLE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxDQUFDO1FBQ2hDLE1BQU0sT0FBTyxHQUFHO1lBQ2QsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsT0FBTyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsa0JBQWtCLENBQUM7WUFDekUsUUFBUSxFQUFFLENBQUM7WUFDWCxXQUFXLEVBQUUsQ0FBQztTQUNmLENBQUM7UUFDRixPQUFPLENBQUMsTUFBTSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQztJQUN2RixDQUFDO0lBRUQsS0FBSyxDQUFDLG9CQUFvQixDQUFDLFFBQWEsRUFBRSxFQUFFLEVBQVU7UUFDcEQsTUFBTSxPQUFPLEdBQUc7WUFDZCxDQUFDLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDO1lBQ3JDLFFBQVEsRUFBRSxDQUFDO1lBQ1gsY0FBYyxFQUFFLElBQUk7U0FDckIsQ0FBQztRQUNGLE9BQU8sQ0FBQyxNQUFNLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDO0lBQ3ZGLENBQUM7SUFFRCxLQUFLLENBQUMsUUFBUSxDQUFDLFFBQWEsRUFBRTtRQUM1QixNQUFNLE9BQU8sR0FBRztZQUNkLENBQUMsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUM7WUFDckMsUUFBUSxFQUFFLENBQUM7WUFDWCxjQUFjLEVBQUUsSUFBSTtTQUNyQixDQUFDO1FBQ0YsT0FBTyxDQUFDLE1BQU0sSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUM7SUFDdkUsQ0FBQztJQUVELG9CQUFvQixDQUFDLE9BQWlCLEVBQUUsS0FBVTtRQUNoRCxJQUFJLFNBQVMsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzFDLFNBQVMsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFlBQVksQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDNUQsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUNoRCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxTQUFTLENBQUMsTUFBYyxJQUFJLENBQUMsK0JBQStCO1FBQzFELE9BQU8sS0FBSyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUM5QixDQUFDO0lBRUQ7O09BRUc7SUFDSCxVQUFVLENBQUMsTUFBa0IsRUFBRSxNQUFjLElBQUksQ0FBQywrQkFBK0I7UUFDL0UsS0FBSyxDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQUVELFdBQVcsQ0FBQyxNQUFjLElBQUksQ0FBQywrQkFBK0I7UUFDNUQsS0FBSyxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUN6QixDQUFDO0lBRUQsVUFBVSxDQUFDLE1BQWMsSUFBSSxDQUFDLCtCQUErQjtRQUMzRCxPQUFPLEtBQUssQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDL0IsQ0FBQztJQUVELFdBQVcsQ0FDVCxNQUFrQixFQUNsQixNQUFjLElBQUksQ0FBQywrQkFBK0I7UUFFbEQsT0FBTyxLQUFLLENBQUMsV0FBVyxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQztJQUN4QyxDQUFDO0lBRU8saUJBQWlCLENBQ3ZCLE9BQWlCLEVBQ2pCLFVBQXNCLEVBQ3RCLEtBQVUsRUFDVixrQkFBNEI7UUFFNUIsT0FBTztZQUNMLEdBQUcsQ0FBQyxrQkFBa0I7Z0JBQ3BCLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsb0JBQW9CLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxFQUFFO2dCQUN0RCxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLG9CQUFvQixDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ3JELFFBQVEsRUFBRSxVQUFVLENBQUMsUUFBUTtZQUM3QixXQUFXLEVBQUUsVUFBVSxDQUFDLFdBQVc7WUFDbkMsWUFBWSxFQUFFLEtBQUs7WUFDbkIsY0FBYyxFQUFFLElBQUk7U0FDckIsQ0FBQztJQUNKLENBQUM7OzhHQS9SVSxpQkFBaUI7a0hBQWpCLGlCQUFpQixjQUZoQixNQUFNOzJGQUVQLGlCQUFpQjtrQkFIN0IsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkI7OzBCQVlJLFFBQVEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBPcHRpb25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSU1hbmFnZWRPYmplY3QsIEludmVudG9yeVNlcnZpY2UsIElVc2VyLCBVc2VyU2VydmljZSB9IGZyb20gJ0BjOHkvY2xpZW50JztcbmltcG9ydCB7XG4gIEFjdGlvbkNvbnRyb2wsXG4gIEFsZXJ0U2VydmljZSxcbiAgQnVsa0FjdGlvbkNvbnRyb2wsXG4gIENvbHVtbixcbiAgRGF0YUdyaWRTZXJ2aWNlLFxuICBHYWluc2lnaHRTZXJ2aWNlLFxuICBnZXR0ZXh0LFxuICBHcmlkQ29uZmlnLFxuICBIZWFkZXJBY3Rpb25Db250cm9sLFxuICBNb2RhbFNlcnZpY2UsXG4gIFBhZ2luYXRpb24sXG4gIFJvdyxcbiAgU3RhdHVzLFxuICBVc2VyUHJlZmVyZW5jZXNTZXJ2aWNlXG59IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMnO1xuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQWxhcm1zRGV2aWNlR3JpZENvbHVtbiB9IGZyb20gJy4vY29sdW1ucy9hbGFybXMuZGV2aWNlLWdyaWQtY29sdW1uJztcbmltcG9ydCB7IENvbHVtblV0aWxTZXJ2aWNlIH0gZnJvbSAnLi9jb2x1bW5zL2NvbHVtbi11dGlsLnNlcnZpY2UnO1xuaW1wb3J0IHsgR3JvdXBEZXZpY2VHcmlkQ29sdW1uIH0gZnJvbSAnLi9jb2x1bW5zL2dyb3VwLmRldmljZS1ncmlkLWNvbHVtbic7XG5pbXBvcnQgeyBJbWVpRGV2aWNlR3JpZENvbHVtbiB9IGZyb20gJy4vY29sdW1ucy9pbWVpLmRldmljZS1ncmlkLWNvbHVtbic7XG5pbXBvcnQgeyBNb2RlbERldmljZUdyaWRDb2x1bW4gfSBmcm9tICcuL2NvbHVtbnMvbW9kZWwuZGV2aWNlLWdyaWQtY29sdW1uJztcbmltcG9ydCB7IE5hbWVEZXZpY2VHcmlkQ29sdW1uIH0gZnJvbSAnLi9jb2x1bW5zL25hbWUuZGV2aWNlLWdyaWQtY29sdW1uJztcbmltcG9ydCB7IFJlZ2lzdHJhdGlvbkRhdGVEZXZpY2VHcmlkQ29sdW1uIH0gZnJvbSAnLi9jb2x1bW5zL3JlZ2lzdHJhdGlvbi1kYXRlLmRldmljZS1ncmlkLWNvbHVtbic7XG5pbXBvcnQgeyBTZXJpYWxOdW1iZXJEZXZpY2VHcmlkQ29sdW1uIH0gZnJvbSAnLi9jb2x1bW5zL3NlcmlhbC1udW1iZXIuZGV2aWNlLWdyaWQtY29sdW1uJztcbmltcG9ydCB7IFN0YXR1c0RldmljZUdyaWRDb2x1bW4gfSBmcm9tICcuL2NvbHVtbnMvc3RhdHVzLmRldmljZS1ncmlkLWNvbHVtbic7XG5pbXBvcnQgeyBTeXN0ZW1JZERldmljZUdyaWRDb2x1bW4gfSBmcm9tICcuL2NvbHVtbnMvc3lzdGVtLWlkLmRldmljZS1ncmlkLWNvbHVtbic7XG5pbXBvcnQgeyBEZXZpY2VHcmlkQWN0aW9uVHlwZSB9IGZyb20gJy4vZGV2aWNlLWdyaWQubW9kZWwnO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBEZXZpY2VHcmlkU2VydmljZSBleHRlbmRzIERhdGFHcmlkU2VydmljZSB7XG4gIHByb3RlY3RlZCBHUklEX0NPTkZJR19ERUZBVUxUX1NUT1JBR0VfS0VZID0gJ2RldmljZS1ncmlkLWNvbmZpZyc7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJvdGVjdGVkIGludmVudG9yeVNlcnZpY2U6IEludmVudG9yeVNlcnZpY2UsXG4gICAgcHJvdGVjdGVkIHVzZXJTZXJ2aWNlOiBVc2VyU2VydmljZSxcbiAgICBwcm90ZWN0ZWQgdHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICBwcm90ZWN0ZWQgYWxlcnRTZXJ2aWNlOiBBbGVydFNlcnZpY2UsXG4gICAgcHJvdGVjdGVkIG1vZGFsOiBNb2RhbFNlcnZpY2UsXG4gICAgcHJvdGVjdGVkIGNvbHVtblV0aWxTZXJ2aWNlOiBDb2x1bW5VdGlsU2VydmljZSxcbiAgICBwcm90ZWN0ZWQgdXNlclByZWZlcmVuY2VzU2VydmljZTogVXNlclByZWZlcmVuY2VzU2VydmljZSxcbiAgICBAT3B0aW9uYWwoKSBwcm90ZWN0ZWQgZ2FpbnNpZ2h0U2VydmljZT86IEdhaW5zaWdodFNlcnZpY2VcbiAgKSB7XG4gICAgc3VwZXIodXNlclByZWZlcmVuY2VzU2VydmljZSk7XG4gIH1cblxuICBnZXREZWZhdWx0Q29sdW1ucygpOiBDb2x1bW5bXSB7XG4gICAgY29uc3QgZGVmYXVsdENvbHVtbnMgPSBbXG4gICAgICBuZXcgU3RhdHVzRGV2aWNlR3JpZENvbHVtbigpLFxuICAgICAgbmV3IE5hbWVEZXZpY2VHcmlkQ29sdW1uKCksXG4gICAgICBuZXcgTW9kZWxEZXZpY2VHcmlkQ29sdW1uKCksXG4gICAgICBuZXcgU2VyaWFsTnVtYmVyRGV2aWNlR3JpZENvbHVtbigpLFxuICAgICAgbmV3IEdyb3VwRGV2aWNlR3JpZENvbHVtbigpLFxuICAgICAgbmV3IFJlZ2lzdHJhdGlvbkRhdGVEZXZpY2VHcmlkQ29sdW1uKCksXG4gICAgICBuZXcgU3lzdGVtSWREZXZpY2VHcmlkQ29sdW1uKCksXG4gICAgICBuZXcgSW1laURldmljZUdyaWRDb2x1bW4oKSxcbiAgICAgIG5ldyBBbGFybXNEZXZpY2VHcmlkQ29sdW1uKClcbiAgICBdO1xuXG4gICAgcmV0dXJuIGRlZmF1bHRDb2x1bW5zO1xuICB9XG5cbiAgZ2V0Q2hpbGREZXZpY2VHcmlkQ29sdW1ucygpOiBDb2x1bW5bXSB7XG4gICAgY29uc3QgY2hpbGREZXZpY2VHcmlkQ29sdW1uID0gW1xuICAgICAgbmV3IFN0YXR1c0RldmljZUdyaWRDb2x1bW4oKSxcbiAgICAgIG5ldyBOYW1lRGV2aWNlR3JpZENvbHVtbigpLFxuICAgICAgbmV3IE1vZGVsRGV2aWNlR3JpZENvbHVtbigpLFxuICAgICAgbmV3IFNlcmlhbE51bWJlckRldmljZUdyaWRDb2x1bW4oKSxcbiAgICAgIG5ldyBSZWdpc3RyYXRpb25EYXRlRGV2aWNlR3JpZENvbHVtbigpLFxuICAgICAgbmV3IFN5c3RlbUlkRGV2aWNlR3JpZENvbHVtbigpLFxuICAgICAgbmV3IEltZWlEZXZpY2VHcmlkQ29sdW1uKCksXG4gICAgICBuZXcgQWxhcm1zRGV2aWNlR3JpZENvbHVtbigpXG4gICAgXTtcblxuICAgIHJldHVybiBjaGlsZERldmljZUdyaWRDb2x1bW47XG4gIH1cblxuICBnZXREZWZhdWx0UGFnaW5hdGlvbigpOiBQYWdpbmF0aW9uIHtcbiAgICByZXR1cm4ge1xuICAgICAgcGFnZVNpemU6IDEwLFxuICAgICAgY3VycmVudFBhZ2U6IDFcbiAgICB9O1xuICB9XG5cbiAgZ2V0SW5maW5pdGVTY3JvbGxQYWdpbmF0aW9uKCk6IFBhZ2luYXRpb24ge1xuICAgIHJldHVybiB7XG4gICAgICBwYWdlU2l6ZTogNTAsXG4gICAgICBjdXJyZW50UGFnZTogMVxuICAgIH07XG4gIH1cblxuICBnZXREZWZhdWx0QWN0aW9uQ29udHJvbHMoKTogQWN0aW9uQ29udHJvbFtdIHtcbiAgICByZXR1cm4gW1xuICAgICAge1xuICAgICAgICB0eXBlOiBEZXZpY2VHcmlkQWN0aW9uVHlwZS5EZWxldGUsXG4gICAgICAgIGNhbGxiYWNrOiAoaXRlbTogUm93KSA9PiB0aGlzLmRlbGV0ZShpdGVtIGFzIElNYW5hZ2VkT2JqZWN0KVxuICAgICAgfVxuICAgIF07XG4gIH1cblxuICBnZXREZWZhdWx0QnVsa0FjdGlvbkNvbnRyb2xzKCk6IEJ1bGtBY3Rpb25Db250cm9sW10ge1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIGdldERlZmF1bHRIZWFkZXJBY3Rpb25Db250cm9scygpOiBIZWFkZXJBY3Rpb25Db250cm9sW10ge1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIGdldFByb3Blck5hbWUoZGV2aWNlOiBJTWFuYWdlZE9iamVjdCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuY29sdW1uVXRpbFNlcnZpY2UuZ2V0UHJvcGVyTmFtZShkZXZpY2UpO1xuICB9XG5cbiAgZ2V0TW9kZWwoZGV2aWNlOiBJTWFuYWdlZE9iamVjdCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuY29sdW1uVXRpbFNlcnZpY2UuZ2V0TW9kZWwoZGV2aWNlKTtcbiAgfVxuXG4gIGdldFNlcmlhbE51bWJlcihkZXZpY2U6IElNYW5hZ2VkT2JqZWN0KTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5jb2x1bW5VdGlsU2VydmljZS5nZXRTZXJpYWxOdW1iZXIoZGV2aWNlKTtcbiAgfVxuXG4gIGdldFBhcmVudHNOYW1lcyhkZXZpY2U6IElNYW5hZ2VkT2JqZWN0LCBmZWF0dXJlZFBhcmVudElkPzogc3RyaW5nIHwgbnVtYmVyKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5jb2x1bW5VdGlsU2VydmljZS5nZXRQYXJlbnRzTmFtZXMoZGV2aWNlLCBmZWF0dXJlZFBhcmVudElkKTtcbiAgfVxuXG4gIGdldEhyZWYoZ3JvdXBPckRldmljZTogSU1hbmFnZWRPYmplY3QsIHByZWZpeCA9ICcjLycpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmNvbHVtblV0aWxTZXJ2aWNlLmdldEhyZWYoZ3JvdXBPckRldmljZSwgcHJlZml4KTtcbiAgfVxuXG4gIGdldEFsYXJtc0hyZWYoZGV2aWNlOiBJTWFuYWdlZE9iamVjdCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuY29sdW1uVXRpbFNlcnZpY2UuZ2V0QWxhcm1zSHJlZihkZXZpY2UpO1xuICB9XG5cbiAgYXN5bmMgZGVsZXRlKGRldmljZTogSU1hbmFnZWRPYmplY3QpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgZGV2aWNlV2l0aENoaWxkcmVuID0gYXdhaXQgKFxuICAgICAgICBhd2FpdCB0aGlzLmludmVudG9yeVNlcnZpY2UuZGV0YWlsKGRldmljZSwgeyB3aXRoQ2hpbGRyZW46IHRydWUgfSlcbiAgICAgICkuZGF0YTtcbiAgICAgIGNvbnN0IGhhc0NoaWxkRGV2aWNlcyA9IGRldmljZVdpdGhDaGlsZHJlbi5jaGlsZERldmljZXM/LnJlZmVyZW5jZXM/Lmxlbmd0aCA+IDA7XG4gICAgICBjb25zdCBoYXNDaGlsZEFkZGl0aW9ucyA9IGRldmljZVdpdGhDaGlsZHJlbi5jaGlsZEFkZGl0aW9ucz8ucmVmZXJlbmNlcz8ubGVuZ3RoID4gMDtcbiAgICAgIGNvbnN0IGhhc0NoaWxkQXNzZXRzID0gZGV2aWNlV2l0aENoaWxkcmVuLmNoaWxkQXNzZXRzPy5yZWZlcmVuY2VzPy5sZW5ndGggPiAwO1xuICAgICAgY29uc3Qgc2hvd0RlbGV0ZUNoaWxkcmVuID0gKCkgPT4gaGFzQ2hpbGRBZGRpdGlvbnMgfHwgaGFzQ2hpbGREZXZpY2VzIHx8IGhhc0NoaWxkQXNzZXRzO1xuICAgICAgY29uc3QgbW9kYWxSZXN1bHQgPSBhd2FpdCB0aGlzLm1vZGFsLmNvbmZpcm0oXG4gICAgICAgIGdldHRleHQoJ0RlbGV0ZSBkZXZpY2UnKSxcbiAgICAgICAgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoXG4gICAgICAgICAgZ2V0dGV4dChgWW91IGFyZSBhYm91dCB0byBkZWxldGUgZGV2aWNlIFwie3sgbmFtZSB9fVwiLiBEbyB5b3Ugd2FudCB0byBwcm9jZWVkP2ApLFxuICAgICAgICAgIGRldmljZVxuICAgICAgICApLFxuICAgICAgICBTdGF0dXMuREFOR0VSLFxuICAgICAgICB7IG9rOiBnZXR0ZXh0KCdEZWxldGUnKSwgY2FuY2VsOiBnZXR0ZXh0KCdDYW5jZWwnKSB9LFxuICAgICAgICB7XG4gICAgICAgICAgY2FzY2FkZToge1xuICAgICAgICAgICAgdGV4dDogZ2V0dGV4dCgnQWxzbyBkZWxldGUgY2hpbGQgaGllcmFyY2h5IG9mIHRoaXMgZGV2aWNlLicpLFxuICAgICAgICAgICAgY2hlY2tlZDogc2hvd0RlbGV0ZUNoaWxkcmVuKCksXG4gICAgICAgICAgICBzaG93SWY6IHNob3dEZWxldGVDaGlsZHJlbixcbiAgICAgICAgICAgIGRpc2FibGVkQnlLZXk6ICd3aXRoRGV2aWNlVXNlcidcbiAgICAgICAgICB9LFxuICAgICAgICAgIHdpdGhEZXZpY2VVc2VyOiB7XG4gICAgICAgICAgICB0ZXh0OiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChcbiAgICAgICAgICAgICAgZ2V0dGV4dCgnQWxzbyBkZWxldGUgYXNzb2NpYXRlZCBkZXZpY2Ugb3duZXIgXCJ7eyBvd25lciB9fVwiLicpLFxuICAgICAgICAgICAgICBkZXZpY2VcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBjaGVja2VkOiBmYWxzZSxcbiAgICAgICAgICAgIHNob3dJZjogKCkgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBpc1Jvb3REZXZpY2UgPSBkZXZpY2UuYzh5X0lzRGV2aWNlO1xuICAgICAgICAgICAgICBjb25zdCBoYXNEZXZpY2VVc2VyQXNPd25lciA9XG4gICAgICAgICAgICAgICAgZGV2aWNlLm93bmVyICYmXG4gICAgICAgICAgICAgICAgdGhpcy51c2VyU2VydmljZS5pc0RldmljZVVzZXIoeyBpZDogZGV2aWNlLm93bmVyIH0gYXMgdW5rbm93biBhcyBJVXNlcik7XG5cbiAgICAgICAgICAgICAgcmV0dXJuIEJvb2xlYW4oaXNSb290RGV2aWNlICYmIGhhc0RldmljZVVzZXJBc093bmVyKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkaXNhYmxlZEJ5S2V5OiAnY2FzY2FkZSdcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgICBhd2FpdCB0aGlzLmludmVudG9yeVNlcnZpY2UuZGVsZXRlKFxuICAgICAgICBkZXZpY2UsXG4gICAgICAgIChtb2RhbFJlc3VsdCBhcyB7IGNvbmZpcm1PcHRpb25zOiB7IFtrZXk6IHN0cmluZ106IGFueSB9IH0pLmNvbmZpcm1PcHRpb25zXG4gICAgICApO1xuICAgICAgdGhpcy5hbGVydFNlcnZpY2Uuc3VjY2VzcyhnZXR0ZXh0KCdEZXZpY2UgZGVsZXRlZC4nKSk7XG4gICAgICBpZiAodGhpcy5nYWluc2lnaHRTZXJ2aWNlKSB7XG4gICAgICAgIHRoaXMuZ2FpbnNpZ2h0U2VydmljZS50cmlnZ2VyRXZlbnQoJ2RldmljZUdyaWQ6RW50cnlEZWxldGVkJyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgIC8vIG9ubHkgaWYgbm90IGNhbmNlbCBmcm9tIG1vZGFsXG4gICAgICBpZiAodGhpcy5nYWluc2lnaHRTZXJ2aWNlICYmICFleCkge1xuICAgICAgICB0aGlzLmdhaW5zaWdodFNlcnZpY2UudHJpZ2dlckV2ZW50KCdkZXZpY2VHcmlkOkVudHJ5RGVsZXRpb25DYW5jZWxsZWQnKTtcbiAgICAgIH1cbiAgICAgIGlmIChleCkge1xuICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5hZGRTZXJ2ZXJGYWlsdXJlKGV4KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdCgpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGdldERhdGEoXG4gICAgY29sdW1uczogQ29sdW1uW10sXG4gICAgcGFnaW5hdGlvbjogUGFnaW5hdGlvbixcbiAgICBxdWVyeTogYW55ID0ge30sXG4gICAgd2l0aENoaWxkcmVuOiBib29sZWFuID0gZmFsc2VcbiAgKSB7XG4gICAgY29uc3QgZmlsdGVycyA9IHtcbiAgICAgIC4uLnRoaXMuZ2V0RGV2aWNlc0ZpbHRlcnMoY29sdW1ucywgcGFnaW5hdGlvbiwgcXVlcnkpLFxuICAgICAgd2l0aEdyb3VwczogdHJ1ZSxcbiAgICAgIHdpdGhDaGlsZHJlblxuICAgIH07XG4gICAgcmV0dXJuIHRoaXMuaW52ZW50b3J5U2VydmljZS5saXN0KGZpbHRlcnMpO1xuICB9XG5cbiAgYXN5bmMgZ2V0Q2hpbGREZXZpY2VEYXRhKFxuICAgIGNvbHVtbnM6IENvbHVtbltdLFxuICAgIHBhZ2luYXRpb246IFBhZ2luYXRpb24sXG4gICAgcXVlcnk6IGFueSA9IHt9LFxuICAgIHdpdGhDaGlsZHJlbjogYm9vbGVhbiA9IGZhbHNlLFxuICAgIGlkOiBzdHJpbmdcbiAgKSB7XG4gICAgY29uc3QgY2hpbGREZXZpY2VGaWx0ZXJzID0gdHJ1ZTtcbiAgICBjb25zdCBmaWx0ZXJzID0ge1xuICAgICAgLi4udGhpcy5nZXREZXZpY2VzRmlsdGVycyhjb2x1bW5zLCBwYWdpbmF0aW9uLCBxdWVyeSwgY2hpbGREZXZpY2VGaWx0ZXJzKSxcbiAgICAgIHdpdGhHcm91cHM6IHRydWUsXG4gICAgICB3aXRoQ2hpbGRyZW5cbiAgICB9O1xuICAgIHJldHVybiB0aGlzLmludmVudG9yeVNlcnZpY2UuY2hpbGREZXZpY2VzTGlzdChpZCwgZmlsdGVycyk7XG4gIH1cblxuICBhc3luYyBnZXRDb3VudChjb2x1bW5zOiBDb2x1bW5bXSwgcGFnaW5hdGlvbjogUGFnaW5hdGlvbiwgcXVlcnk6IGFueSA9IHt9KSB7XG4gICAgY29uc3QgZmlsdGVycyA9IHtcbiAgICAgIC4uLnRoaXMuZ2V0RGV2aWNlc0ZpbHRlcnMoY29sdW1ucywgcGFnaW5hdGlvbiwgcXVlcnkpLFxuICAgICAgcGFnZVNpemU6IDEsXG4gICAgICBjdXJyZW50UGFnZTogMVxuICAgIH07XG4gICAgcmV0dXJuIChhd2FpdCB0aGlzLmludmVudG9yeVNlcnZpY2UubGlzdChmaWx0ZXJzKSkucGFnaW5nLnRvdGFsUGFnZXM7XG4gIH1cblxuICBhc3luYyBnZXRDb3VudENoaWxkRGV2aWNlcyhcbiAgICBjb2x1bW5zOiBDb2x1bW5bXSxcbiAgICBwYWdpbmF0aW9uOiBQYWdpbmF0aW9uLFxuICAgIHF1ZXJ5OiBhbnkgPSB7fSxcbiAgICBpZDogc3RyaW5nXG4gICkge1xuICAgIGNvbnN0IGNoaWxkRGV2aWNlRmlsdGVycyA9IHRydWU7XG4gICAgY29uc3QgZmlsdGVycyA9IHtcbiAgICAgIC4uLnRoaXMuZ2V0RGV2aWNlc0ZpbHRlcnMoY29sdW1ucywgcGFnaW5hdGlvbiwgcXVlcnksIGNoaWxkRGV2aWNlRmlsdGVycyksXG4gICAgICBwYWdlU2l6ZTogMSxcbiAgICAgIGN1cnJlbnRQYWdlOiAxXG4gICAgfTtcbiAgICByZXR1cm4gKGF3YWl0IHRoaXMuaW52ZW50b3J5U2VydmljZS5jaGlsZERldmljZXNMaXN0KGlkLCBmaWx0ZXJzKSkucGFnaW5nLnRvdGFsUGFnZXM7XG4gIH1cblxuICBhc3luYyBnZXRUb3RhbENoaWxkRGV2aWNlcyhxdWVyeTogYW55ID0ge30sIGlkOiBzdHJpbmcpOiBQcm9taXNlPG51bWJlcj4ge1xuICAgIGNvbnN0IGZpbHRlcnMgPSB7XG4gICAgICBxOiB0aGlzLnF1ZXJpZXNVdGlsLmJ1aWxkUXVlcnkocXVlcnkpLFxuICAgICAgcGFnZVNpemU6IDEsXG4gICAgICB3aXRoVG90YWxQYWdlczogdHJ1ZVxuICAgIH07XG4gICAgcmV0dXJuIChhd2FpdCB0aGlzLmludmVudG9yeVNlcnZpY2UuY2hpbGREZXZpY2VzTGlzdChpZCwgZmlsdGVycykpLnBhZ2luZy50b3RhbFBhZ2VzO1xuICB9XG5cbiAgYXN5bmMgZ2V0VG90YWwocXVlcnk6IGFueSA9IHt9KTogUHJvbWlzZTxudW1iZXI+IHtcbiAgICBjb25zdCBmaWx0ZXJzID0ge1xuICAgICAgcTogdGhpcy5xdWVyaWVzVXRpbC5idWlsZFF1ZXJ5KHF1ZXJ5KSxcbiAgICAgIHBhZ2VTaXplOiAxLFxuICAgICAgd2l0aFRvdGFsUGFnZXM6IHRydWVcbiAgICB9O1xuICAgIHJldHVybiAoYXdhaXQgdGhpcy5pbnZlbnRvcnlTZXJ2aWNlLmxpc3QoZmlsdGVycykpLnBhZ2luZy50b3RhbFBhZ2VzO1xuICB9XG5cbiAgZ2V0RGV2aWNlUXVlcnlTdHJpbmcoY29sdW1uczogQ29sdW1uW10sIHF1ZXJ5OiBhbnkpOiBzdHJpbmcge1xuICAgIGxldCBmdWxsUXVlcnkgPSB0aGlzLmdldFF1ZXJ5T2JqKGNvbHVtbnMpO1xuICAgIGZ1bGxRdWVyeSA9IHRoaXMucXVlcmllc1V0aWwuYWRkQW5kRmlsdGVyKGZ1bGxRdWVyeSwgcXVlcnkpO1xuICAgIHJldHVybiB0aGlzLnF1ZXJpZXNVdGlsLmJ1aWxkUXVlcnkoZnVsbFF1ZXJ5KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCBVc2UgZ2V0Q29uZmlnJChrZXk6IHN0cmluZyk6IE9ic2VydmFibGU8R3JpZENvbmZpZz4gaW5zdGVhZC5cbiAgICovXG4gIGdldENvbmZpZyhrZXk6IHN0cmluZyA9IHRoaXMuR1JJRF9DT05GSUdfREVGQVVMVF9TVE9SQUdFX0tFWSk6IEdyaWRDb25maWcge1xuICAgIHJldHVybiBzdXBlci5nZXRDb25maWcoa2V5KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCBVc2Ugc2F2ZUNvbmZpZyQoY29uZmlnOiBHcmlkQ29uZmlnLCBrZXk6IHN0cmluZyk6IFByb21pc2U8R3JpZENvbmZpZz4gaW5zdGVhZC5cbiAgICovXG4gIHNhdmVDb25maWcoY29uZmlnOiBHcmlkQ29uZmlnLCBrZXk6IHN0cmluZyA9IHRoaXMuR1JJRF9DT05GSUdfREVGQVVMVF9TVE9SQUdFX0tFWSkge1xuICAgIHN1cGVyLnNhdmVDb25maWcoY29uZmlnLCBrZXkpO1xuICB9XG5cbiAgY2xlYXJDb25maWcoa2V5OiBzdHJpbmcgPSB0aGlzLkdSSURfQ09ORklHX0RFRkFVTFRfU1RPUkFHRV9LRVkpIHtcbiAgICBzdXBlci5jbGVhckNvbmZpZyhrZXkpO1xuICB9XG5cbiAgZ2V0Q29uZmlnJChrZXk6IHN0cmluZyA9IHRoaXMuR1JJRF9DT05GSUdfREVGQVVMVF9TVE9SQUdFX0tFWSk6IE9ic2VydmFibGU8R3JpZENvbmZpZz4ge1xuICAgIHJldHVybiBzdXBlci5nZXRDb25maWckKGtleSk7XG4gIH1cblxuICBzYXZlQ29uZmlnJChcbiAgICBjb25maWc6IEdyaWRDb25maWcsXG4gICAga2V5OiBzdHJpbmcgPSB0aGlzLkdSSURfQ09ORklHX0RFRkFVTFRfU1RPUkFHRV9LRVlcbiAgKTogT2JzZXJ2YWJsZTxHcmlkQ29uZmlnPiB7XG4gICAgcmV0dXJuIHN1cGVyLnNhdmVDb25maWckKGNvbmZpZywga2V5KTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0RGV2aWNlc0ZpbHRlcnMoXG4gICAgY29sdW1uczogQ29sdW1uW10sXG4gICAgcGFnaW5hdGlvbjogUGFnaW5hdGlvbixcbiAgICBxdWVyeTogYW55LFxuICAgIGNoaWxkRGV2aWNlRmlsdGVycz86IGJvb2xlYW5cbiAgKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLihjaGlsZERldmljZUZpbHRlcnNcbiAgICAgICAgPyB7IHF1ZXJ5OiB0aGlzLmdldERldmljZVF1ZXJ5U3RyaW5nKGNvbHVtbnMsIHF1ZXJ5KSB9XG4gICAgICAgIDogeyBxOiB0aGlzLmdldERldmljZVF1ZXJ5U3RyaW5nKGNvbHVtbnMsIHF1ZXJ5KSB9KSxcbiAgICAgIHBhZ2VTaXplOiBwYWdpbmF0aW9uLnBhZ2VTaXplLFxuICAgICAgY3VycmVudFBhZ2U6IHBhZ2luYXRpb24uY3VycmVudFBhZ2UsXG4gICAgICB3aXRoQ2hpbGRyZW46IGZhbHNlLFxuICAgICAgd2l0aFRvdGFsUGFnZXM6IHRydWVcbiAgICB9O1xuICB9XG59XG4iXX0=
|
|
236
|
+
}], ctorParameters: function () { return [{ type: i1.InventoryService }, { type: i1.UserService }, { type: i2.TranslateService }, { type: i3.AlertService }, { type: i3.ModalService }, { type: i4.ColumnUtilService }, { type: i3.UserPreferencesService }]; } });
|
|
237
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGV2aWNlLWdyaWQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2RldmljZS1ncmlkL2RldmljZS1ncmlkLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQWtCLGdCQUFnQixFQUFTLFdBQVcsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNuRixPQUFPLEVBRUwsWUFBWSxFQUdaLGVBQWUsRUFDZixPQUFPLEVBR1AsWUFBWSxFQUdaLE1BQU0sRUFDTixzQkFBc0IsRUFDdkIsTUFBTSxxQkFBcUIsQ0FBQztBQUM3QixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUV2RCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUM3RSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUNsRSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUMzRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUN6RSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUMzRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUN6RSxPQUFPLEVBQUUsZ0NBQWdDLEVBQUUsTUFBTSxnREFBZ0QsQ0FBQztBQUNsRyxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUMxRixPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUM3RSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQzs7Ozs7O0FBTWxGLE1BQU0sT0FBTyxpQkFBa0IsU0FBUSxlQUFlO0lBR3BELFlBQ1ksZ0JBQWtDLEVBQ2xDLFdBQXdCLEVBQ3hC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QUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDckQsUUFBUSxFQUFFLFVBQVUsQ0FBQyxRQUFRO1lBQzdCLFdBQVcsRUFBRSxVQUFVLENBQUMsV0FBVztZQUNuQyxZQUFZLEVBQUUsS0FBSztZQUNuQixjQUFjLEVBQUUsSUFBSTtTQUNyQixDQUFDO0lBQ0osQ0FBQzs7OEdBeFJVLGlCQUFpQjtrSEFBakIsaUJBQWlCLGNBRmhCLE1BQU07MkZBRVAsaUJBQWlCO2tCQUg3QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IElNYW5hZ2VkT2JqZWN0LCBJbnZlbnRvcnlTZXJ2aWNlLCBJVXNlciwgVXNlclNlcnZpY2UgfSBmcm9tICdAYzh5L2NsaWVudCc7XG5pbXBvcnQge1xuICBBY3Rpb25Db250cm9sLFxuICBBbGVydFNlcnZpY2UsXG4gIEJ1bGtBY3Rpb25Db250cm9sLFxuICBDb2x1bW4sXG4gIERhdGFHcmlkU2VydmljZSxcbiAgZ2V0dGV4dCxcbiAgR3JpZENvbmZpZyxcbiAgSGVhZGVyQWN0aW9uQ29udHJvbCxcbiAgTW9kYWxTZXJ2aWNlLFxuICBQYWdpbmF0aW9uLFxuICBSb3csXG4gIFN0YXR1cyxcbiAgVXNlclByZWZlcmVuY2VzU2VydmljZVxufSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzJztcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEFsYXJtc0RldmljZUdyaWRDb2x1bW4gfSBmcm9tICcuL2NvbHVtbnMvYWxhcm1zLmRldmljZS1ncmlkLWNvbHVtbic7XG5pbXBvcnQgeyBDb2x1bW5VdGlsU2VydmljZSB9IGZyb20gJy4vY29sdW1ucy9jb2x1bW4tdXRpbC5zZXJ2aWNlJztcbmltcG9ydCB7IEdyb3VwRGV2aWNlR3JpZENvbHVtbiB9IGZyb20gJy4vY29sdW1ucy9ncm91cC5kZXZpY2UtZ3JpZC1jb2x1bW4nO1xuaW1wb3J0IHsgSW1laURldmljZUdyaWRDb2x1bW4gfSBmcm9tICcuL2NvbHVtbnMvaW1laS5kZXZpY2UtZ3JpZC1jb2x1bW4nO1xuaW1wb3J0IHsgTW9kZWxEZXZpY2VHcmlkQ29sdW1uIH0gZnJvbSAnLi9jb2x1bW5zL21vZGVsLmRldmljZS1ncmlkLWNvbHVtbic7XG5pbXBvcnQgeyBOYW1lRGV2aWNlR3JpZENvbHVtbiB9IGZyb20gJy4vY29sdW1ucy9uYW1lLmRldmljZS1ncmlkLWNvbHVtbic7XG5pbXBvcnQgeyBSZWdpc3RyYXRpb25EYXRlRGV2aWNlR3JpZENvbHVtbiB9IGZyb20gJy4vY29sdW1ucy9yZWdpc3RyYXRpb24tZGF0ZS5kZXZpY2UtZ3JpZC1jb2x1bW4nO1xuaW1wb3J0IHsgU2VyaWFsTnVtYmVyRGV2aWNlR3JpZENvbHVtbiB9IGZyb20gJy4vY29sdW1ucy9zZXJpYWwtbnVtYmVyLmRldmljZS1ncmlkLWNvbHVtbic7XG5pbXBvcnQgeyBTdGF0dXNEZXZpY2VHcmlkQ29sdW1uIH0gZnJvbSAnLi9jb2x1bW5zL3N0YXR1cy5kZXZpY2UtZ3JpZC1jb2x1bW4nO1xuaW1wb3J0IHsgU3lzdGVtSWREZXZpY2VHcmlkQ29sdW1uIH0gZnJvbSAnLi9jb2x1bW5zL3N5c3RlbS1pZC5kZXZpY2UtZ3JpZC1jb2x1bW4nO1xuaW1wb3J0IHsgRGV2aWNlR3JpZEFjdGlvblR5cGUgfSBmcm9tICcuL2RldmljZS1ncmlkLm1vZGVsJztcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgRGV2aWNlR3JpZFNlcnZpY2UgZXh0ZW5kcyBEYXRhR3JpZFNlcnZpY2Uge1xuICBwcm90ZWN0ZWQgR1JJRF9DT05GSUdfREVGQVVMVF9TVE9SQUdFX0tFWSA9ICdkZXZpY2UtZ3JpZC1jb25maWcnO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCBpbnZlbnRvcnlTZXJ2aWNlOiBJbnZlbnRvcnlTZXJ2aWNlLFxuICAgIHByb3RlY3RlZCB1c2VyU2VydmljZTogVXNlclNlcnZpY2UsXG4gICAgcHJvdGVjdGVkIHRyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgcHJvdGVjdGVkIGFsZXJ0U2VydmljZTogQWxlcnRTZXJ2aWNlLFxuICAgIHByb3RlY3RlZCBtb2RhbDogTW9kYWxTZXJ2aWNlLFxuICAgIHByb3RlY3RlZCBjb2x1bW5VdGlsU2VydmljZTogQ29sdW1uVXRpbFNlcnZpY2UsXG4gICAgcHJvdGVjdGVkIHVzZXJQcmVmZXJlbmNlc1NlcnZpY2U6IFVzZXJQcmVmZXJlbmNlc1NlcnZpY2VcbiAgKSB7XG4gICAgc3VwZXIodXNlclByZWZlcmVuY2VzU2VydmljZSk7XG4gIH1cblxuICBnZXREZWZhdWx0Q29sdW1ucygpOiBDb2x1bW5bXSB7XG4gICAgY29uc3QgZGVmYXVsdENvbHVtbnMgPSBbXG4gICAgICBuZXcgU3RhdHVzRGV2aWNlR3JpZENvbHVtbigpLFxuICAgICAgbmV3IE5hbWVEZXZpY2VHcmlkQ29sdW1uKCksXG4gICAgICBuZXcgTW9kZWxEZXZpY2VHcmlkQ29sdW1uKCksXG4gICAgICBuZXcgU2VyaWFsTnVtYmVyRGV2aWNlR3JpZENvbHVtbigpLFxuICAgICAgbmV3IEdyb3VwRGV2aWNlR3JpZENvbHVtbigpLFxuICAgICAgbmV3IFJlZ2lzdHJhdGlvbkRhdGVEZXZpY2VHcmlkQ29sdW1uKCksXG4gICAgICBuZXcgU3lzdGVtSWREZXZpY2VHcmlkQ29sdW1uKCksXG4gICAgICBuZXcgSW1laURldmljZUdyaWRDb2x1bW4oKSxcbiAgICAgIG5ldyBBbGFybXNEZXZpY2VHcmlkQ29sdW1uKClcbiAgICBdO1xuXG4gICAgcmV0dXJuIGRlZmF1bHRDb2x1bW5zO1xuICB9XG5cbiAgZ2V0Q2hpbGREZXZpY2VHcmlkQ29sdW1ucygpOiBDb2x1bW5bXSB7XG4gICAgY29uc3QgY2hpbGREZXZpY2VHcmlkQ29sdW1uID0gW1xuICAgICAgbmV3IFN0YXR1c0RldmljZUdyaWRDb2x1bW4oKSxcbiAgICAgIG5ldyBOYW1lRGV2aWNlR3JpZENvbHVtbigpLFxuICAgICAgbmV3IE1vZGVsRGV2aWNlR3JpZENvbHVtbigpLFxuICAgICAgbmV3IFNlcmlhbE51bWJlckRldmljZUdyaWRDb2x1bW4oKSxcbiAgICAgIG5ldyBSZWdpc3RyYXRpb25EYXRlRGV2aWNlR3JpZENvbHVtbigpLFxuICAgICAgbmV3IFN5c3RlbUlkRGV2aWNlR3JpZENvbHVtbigpLFxuICAgICAgbmV3IEltZWlEZXZpY2VHcmlkQ29sdW1uKCksXG4gICAgICBuZXcgQWxhcm1zRGV2aWNlR3JpZENvbHVtbigpXG4gICAgXTtcblxuICAgIHJldHVybiBjaGlsZERldmljZUdyaWRDb2x1bW47XG4gIH1cblxuICBnZXREZWZhdWx0UGFnaW5hdGlvbigpOiBQYWdpbmF0aW9uIHtcbiAgICByZXR1cm4ge1xuICAgICAgcGFnZVNpemU6IDEwLFxuICAgICAgY3VycmVudFBhZ2U6IDFcbiAgICB9O1xuICB9XG5cbiAgZ2V0SW5maW5pdGVTY3JvbGxQYWdpbmF0aW9uKCk6IFBhZ2luYXRpb24ge1xuICAgIHJldHVybiB7XG4gICAgICBwYWdlU2l6ZTogNTAsXG4gICAgICBjdXJyZW50UGFnZTogMVxuICAgIH07XG4gIH1cblxuICBnZXREZWZhdWx0QWN0aW9uQ29udHJvbHMoKTogQWN0aW9uQ29udHJvbFtdIHtcbiAgICByZXR1cm4gW1xuICAgICAge1xuICAgICAgICB0eXBlOiBEZXZpY2VHcmlkQWN0aW9uVHlwZS5EZWxldGUsXG4gICAgICAgIGNhbGxiYWNrOiAoaXRlbTogUm93KSA9PiB0aGlzLmRlbGV0ZShpdGVtIGFzIElNYW5hZ2VkT2JqZWN0KVxuICAgICAgfVxuICAgIF07XG4gIH1cblxuICBnZXREZWZhdWx0QnVsa0FjdGlvbkNvbnRyb2xzKCk6IEJ1bGtBY3Rpb25Db250cm9sW10ge1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIGdldERlZmF1bHRIZWFkZXJBY3Rpb25Db250cm9scygpOiBIZWFkZXJBY3Rpb25Db250cm9sW10ge1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIGdldFByb3Blck5hbWUoZGV2aWNlOiBJTWFuYWdlZE9iamVjdCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuY29sdW1uVXRpbFNlcnZpY2UuZ2V0UHJvcGVyTmFtZShkZXZpY2UpO1xuICB9XG5cbiAgZ2V0TW9kZWwoZGV2aWNlOiBJTWFuYWdlZE9iamVjdCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuY29sdW1uVXRpbFNlcnZpY2UuZ2V0TW9kZWwoZGV2aWNlKTtcbiAgfVxuXG4gIGdldFNlcmlhbE51bWJlcihkZXZpY2U6IElNYW5hZ2VkT2JqZWN0KTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5jb2x1bW5VdGlsU2VydmljZS5nZXRTZXJpYWxOdW1iZXIoZGV2aWNlKTtcbiAgfVxuXG4gIGdldFBhcmVudHNOYW1lcyhkZXZpY2U6IElNYW5hZ2VkT2JqZWN0LCBmZWF0dXJlZFBhcmVudElkPzogc3RyaW5nIHwgbnVtYmVyKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5jb2x1bW5VdGlsU2VydmljZS5nZXRQYXJlbnRzTmFtZXMoZGV2aWNlLCBmZWF0dXJlZFBhcmVudElkKTtcbiAgfVxuXG4gIGdldEhyZWYoZ3JvdXBPckRldmljZTogSU1hbmFnZWRPYmplY3QsIHByZWZpeCA9ICcjLycpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmNvbHVtblV0aWxTZXJ2aWNlLmdldEhyZWYoZ3JvdXBPckRldmljZSwgcHJlZml4KTtcbiAgfVxuXG4gIGdldEFsYXJtc0hyZWYoZGV2aWNlOiBJTWFuYWdlZE9iamVjdCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuY29sdW1uVXRpbFNlcnZpY2UuZ2V0QWxhcm1zSHJlZihkZXZpY2UpO1xuICB9XG5cbiAgYXN5bmMgZGVsZXRlKGRldmljZTogSU1hbmFnZWRPYmplY3QpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgZGV2aWNlV2l0aENoaWxkcmVuID0gYXdhaXQgKFxuICAgICAgICBhd2FpdCB0aGlzLmludmVudG9yeVNlcnZpY2UuZGV0YWlsKGRldmljZSwgeyB3aXRoQ2hpbGRyZW46IHRydWUgfSlcbiAgICAgICkuZGF0YTtcbiAgICAgIGNvbnN0IGhhc0NoaWxkRGV2aWNlcyA9IGRldmljZVdpdGhDaGlsZHJlbi5jaGlsZERldmljZXM/LnJlZmVyZW5jZXM/Lmxlbmd0aCA+IDA7XG4gICAgICBjb25zdCBoYXNDaGlsZEFkZGl0aW9ucyA9IGRldmljZVdpdGhDaGlsZHJlbi5jaGlsZEFkZGl0aW9ucz8ucmVmZXJlbmNlcz8ubGVuZ3RoID4gMDtcbiAgICAgIGNvbnN0IGhhc0NoaWxkQXNzZXRzID0gZGV2aWNlV2l0aENoaWxkcmVuLmNoaWxkQXNzZXRzPy5yZWZlcmVuY2VzPy5sZW5ndGggPiAwO1xuICAgICAgY29uc3Qgc2hvd0RlbGV0ZUNoaWxkcmVuID0gKCkgPT4gaGFzQ2hpbGRBZGRpdGlvbnMgfHwgaGFzQ2hpbGREZXZpY2VzIHx8IGhhc0NoaWxkQXNzZXRzO1xuICAgICAgY29uc3QgbW9kYWxSZXN1bHQgPSBhd2FpdCB0aGlzLm1vZGFsLmNvbmZpcm0oXG4gICAgICAgIGdldHRleHQoJ0RlbGV0ZSBkZXZpY2UnKSxcbiAgICAgICAgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoXG4gICAgICAgICAgZ2V0dGV4dChgWW91IGFyZSBhYm91dCB0byBkZWxldGUgZGV2aWNlIFwie3sgbmFtZSB9fVwiLiBEbyB5b3Ugd2FudCB0byBwcm9jZWVkP2ApLFxuICAgICAgICAgIGRldmljZVxuICAgICAgICApLFxuICAgICAgICBTdGF0dXMuREFOR0VSLFxuICAgICAgICB7IG9rOiBnZXR0ZXh0KCdEZWxldGUnKSwgY2FuY2VsOiBnZXR0ZXh0KCdDYW5jZWwnKSB9LFxuICAgICAgICB7XG4gICAgICAgICAgY2FzY2FkZToge1xuICAgICAgICAgICAgdGV4dDogZ2V0dGV4dCgnQWxzbyBkZWxldGUgY2hpbGQgaGllcmFyY2h5IG9mIHRoaXMgZGV2aWNlLicpLFxuICAgICAgICAgICAgY2hlY2tlZDogc2hvd0RlbGV0ZUNoaWxkcmVuKCksXG4gICAgICAgICAgICBzaG93SWY6IHNob3dEZWxldGVDaGlsZHJlbixcbiAgICAgICAgICAgIGRpc2FibGVkQnlLZXk6ICd3aXRoRGV2aWNlVXNlcidcbiAgICAgICAgICB9LFxuICAgICAgICAgIHdpdGhEZXZpY2VVc2VyOiB7XG4gICAgICAgICAgICB0ZXh0OiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChcbiAgICAgICAgICAgICAgZ2V0dGV4dCgnQWxzbyBkZWxldGUgYXNzb2NpYXRlZCBkZXZpY2Ugb3duZXIgXCJ7eyBvd25lciB9fVwiLicpLFxuICAgICAgICAgICAgICBkZXZpY2VcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBjaGVja2VkOiBmYWxzZSxcbiAgICAgICAgICAgIHNob3dJZjogKCkgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBpc1Jvb3REZXZpY2UgPSBkZXZpY2UuYzh5X0lzRGV2aWNlO1xuICAgICAgICAgICAgICBjb25zdCBoYXNEZXZpY2VVc2VyQXNPd25lciA9XG4gICAgICAgICAgICAgICAgZGV2aWNlLm93bmVyICYmXG4gICAgICAgICAgICAgICAgdGhpcy51c2VyU2VydmljZS5pc0RldmljZVVzZXIoeyBpZDogZGV2aWNlLm93bmVyIH0gYXMgdW5rbm93biBhcyBJVXNlcik7XG5cbiAgICAgICAgICAgICAgcmV0dXJuIEJvb2xlYW4oaXNSb290RGV2aWNlICYmIGhhc0RldmljZVVzZXJBc093bmVyKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkaXNhYmxlZEJ5S2V5OiAnY2FzY2FkZSdcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgICBhd2FpdCB0aGlzLmludmVudG9yeVNlcnZpY2UuZGVsZXRlKFxuICAgICAgICBkZXZpY2UsXG4gICAgICAgIChtb2RhbFJlc3VsdCBhcyB7IGNvbmZpcm1PcHRpb25zOiB7IFtrZXk6IHN0cmluZ106IGFueSB9IH0pLmNvbmZpcm1PcHRpb25zXG4gICAgICApO1xuICAgICAgdGhpcy5hbGVydFNlcnZpY2Uuc3VjY2VzcyhnZXR0ZXh0KCdEZXZpY2UgZGVsZXRlZC4nKSk7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgIC8vIG9ubHkgaWYgbm90IGNhbmNlbCBmcm9tIG1vZGFsXG4gICAgICBpZiAoZXgpIHtcbiAgICAgICAgdGhpcy5hbGVydFNlcnZpY2UuYWRkU2VydmVyRmFpbHVyZShleCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBnZXREYXRhKFxuICAgIGNvbHVtbnM6IENvbHVtbltdLFxuICAgIHBhZ2luYXRpb246IFBhZ2luYXRpb24sXG4gICAgcXVlcnk6IGFueSA9IHt9LFxuICAgIHdpdGhDaGlsZHJlbjogYm9vbGVhbiA9IGZhbHNlXG4gICkge1xuICAgIGNvbnN0IGZpbHRlcnMgPSB7XG4gICAgICAuLi50aGlzLmdldERldmljZXNGaWx0ZXJzKGNvbHVtbnMsIHBhZ2luYXRpb24sIHF1ZXJ5KSxcbiAgICAgIHdpdGhHcm91cHM6IHRydWUsXG4gICAgICB3aXRoQ2hpbGRyZW5cbiAgICB9O1xuICAgIHJldHVybiB0aGlzLmludmVudG9yeVNlcnZpY2UubGlzdChmaWx0ZXJzKTtcbiAgfVxuXG4gIGFzeW5jIGdldENoaWxkRGV2aWNlRGF0YShcbiAgICBjb2x1bW5zOiBDb2x1bW5bXSxcbiAgICBwYWdpbmF0aW9uOiBQYWdpbmF0aW9uLFxuICAgIHF1ZXJ5OiBhbnkgPSB7fSxcbiAgICB3aXRoQ2hpbGRyZW46IGJvb2xlYW4gPSBmYWxzZSxcbiAgICBpZDogc3RyaW5nXG4gICkge1xuICAgIGNvbnN0IGNoaWxkRGV2aWNlRmlsdGVycyA9IHRydWU7XG4gICAgY29uc3QgZmlsdGVycyA9IHtcbiAgICAgIC4uLnRoaXMuZ2V0RGV2aWNlc0ZpbHRlcnMoY29sdW1ucywgcGFnaW5hdGlvbiwgcXVlcnksIGNoaWxkRGV2aWNlRmlsdGVycyksXG4gICAgICB3aXRoR3JvdXBzOiB0cnVlLFxuICAgICAgd2l0aENoaWxkcmVuXG4gICAgfTtcbiAgICByZXR1cm4gdGhpcy5pbnZlbnRvcnlTZXJ2aWNlLmNoaWxkRGV2aWNlc0xpc3QoaWQsIGZpbHRlcnMpO1xuICB9XG5cbiAgYXN5bmMgZ2V0Q291bnQoY29sdW1uczogQ29sdW1uW10sIHBhZ2luYXRpb246IFBhZ2luYXRpb24sIHF1ZXJ5OiBhbnkgPSB7fSkge1xuICAgIGNvbnN0IGZpbHRlcnMgPSB7XG4gICAgICAuLi50aGlzLmdldERldmljZXNGaWx0ZXJzKGNvbHVtbnMsIHBhZ2luYXRpb24sIHF1ZXJ5KSxcbiAgICAgIHBhZ2VTaXplOiAxLFxuICAgICAgY3VycmVudFBhZ2U6IDFcbiAgICB9O1xuICAgIHJldHVybiAoYXdhaXQgdGhpcy5pbnZlbnRvcnlTZXJ2aWNlLmxpc3QoZmlsdGVycykpLnBhZ2luZy50b3RhbFBhZ2VzO1xuICB9XG5cbiAgYXN5bmMgZ2V0Q291bnRDaGlsZERldmljZXMoXG4gICAgY29sdW1uczogQ29sdW1uW10sXG4gICAgcGFnaW5hdGlvbjogUGFnaW5hdGlvbixcbiAgICBxdWVyeTogYW55ID0ge30sXG4gICAgaWQ6IHN0cmluZ1xuICApIHtcbiAgICBjb25zdCBjaGlsZERldmljZUZpbHRlcnMgPSB0cnVlO1xuICAgIGNvbnN0IGZpbHRlcnMgPSB7XG4gICAgICAuLi50aGlzLmdldERldmljZXNGaWx0ZXJzKGNvbHVtbnMsIHBhZ2luYXRpb24sIHF1ZXJ5LCBjaGlsZERldmljZUZpbHRlcnMpLFxuICAgICAgcGFnZVNpemU6IDEsXG4gICAgICBjdXJyZW50UGFnZTogMVxuICAgIH07XG4gICAgcmV0dXJuIChhd2FpdCB0aGlzLmludmVudG9yeVNlcnZpY2UuY2hpbGREZXZpY2VzTGlzdChpZCwgZmlsdGVycykpLnBhZ2luZy50b3RhbFBhZ2VzO1xuICB9XG5cbiAgYXN5bmMgZ2V0VG90YWxDaGlsZERldmljZXMocXVlcnk6IGFueSA9IHt9LCBpZDogc3RyaW5nKTogUHJvbWlzZTxudW1iZXI+IHtcbiAgICBjb25zdCBmaWx0ZXJzID0ge1xuICAgICAgcTogdGhpcy5xdWVyaWVzVXRpbC5idWlsZFF1ZXJ5KHF1ZXJ5KSxcbiAgICAgIHBhZ2VTaXplOiAxLFxuICAgICAgd2l0aFRvdGFsUGFnZXM6IHRydWVcbiAgICB9O1xuICAgIHJldHVybiAoYXdhaXQgdGhpcy5pbnZlbnRvcnlTZXJ2aWNlLmNoaWxkRGV2aWNlc0xpc3QoaWQsIGZpbHRlcnMpKS5wYWdpbmcudG90YWxQYWdlcztcbiAgfVxuXG4gIGFzeW5jIGdldFRvdGFsKHF1ZXJ5OiBhbnkgPSB7fSk6IFByb21pc2U8bnVtYmVyPiB7XG4gICAgY29uc3QgZmlsdGVycyA9IHtcbiAgICAgIHE6IHRoaXMucXVlcmllc1V0aWwuYnVpbGRRdWVyeShxdWVyeSksXG4gICAgICBwYWdlU2l6ZTogMSxcbiAgICAgIHdpdGhUb3RhbFBhZ2VzOiB0cnVlXG4gICAgfTtcbiAgICByZXR1cm4gKGF3YWl0IHRoaXMuaW52ZW50b3J5U2VydmljZS5saXN0KGZpbHRlcnMpKS5wYWdpbmcudG90YWxQYWdlcztcbiAgfVxuXG4gIGdldERldmljZVF1ZXJ5U3RyaW5nKGNvbHVtbnM6IENvbHVtbltdLCBxdWVyeTogYW55KTogc3RyaW5nIHtcbiAgICBsZXQgZnVsbFF1ZXJ5ID0gdGhpcy5nZXRRdWVyeU9iaihjb2x1bW5zKTtcbiAgICBmdWxsUXVlcnkgPSB0aGlzLnF1ZXJpZXNVdGlsLmFkZEFuZEZpbHRlcihmdWxsUXVlcnksIHF1ZXJ5KTtcbiAgICByZXR1cm4gdGhpcy5xdWVyaWVzVXRpbC5idWlsZFF1ZXJ5KGZ1bGxRdWVyeSk7XG4gIH1cblxuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgVXNlIGdldENvbmZpZyQoa2V5OiBzdHJpbmcpOiBPYnNlcnZhYmxlPEdyaWRDb25maWc+IGluc3RlYWQuXG4gICAqL1xuICBnZXRDb25maWcoa2V5OiBzdHJpbmcgPSB0aGlzLkdSSURfQ09ORklHX0RFRkFVTFRfU1RPUkFHRV9LRVkpOiBHcmlkQ29uZmlnIHtcbiAgICByZXR1cm4gc3VwZXIuZ2V0Q29uZmlnKGtleSk7XG4gIH1cblxuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgVXNlIHNhdmVDb25maWckKGNvbmZpZzogR3JpZENvbmZpZywga2V5OiBzdHJpbmcpOiBQcm9taXNlPEdyaWRDb25maWc+IGluc3RlYWQuXG4gICAqL1xuICBzYXZlQ29uZmlnKGNvbmZpZzogR3JpZENvbmZpZywga2V5OiBzdHJpbmcgPSB0aGlzLkdSSURfQ09ORklHX0RFRkFVTFRfU1RPUkFHRV9LRVkpIHtcbiAgICBzdXBlci5zYXZlQ29uZmlnKGNvbmZpZywga2V5KTtcbiAgfVxuXG4gIGNsZWFyQ29uZmlnKGtleTogc3RyaW5nID0gdGhpcy5HUklEX0NPTkZJR19ERUZBVUxUX1NUT1JBR0VfS0VZKSB7XG4gICAgc3VwZXIuY2xlYXJDb25maWcoa2V5KTtcbiAgfVxuXG4gIGdldENvbmZpZyQoa2V5OiBzdHJpbmcgPSB0aGlzLkdSSURfQ09ORklHX0RFRkFVTFRfU1RPUkFHRV9LRVkpOiBPYnNlcnZhYmxlPEdyaWRDb25maWc+IHtcbiAgICByZXR1cm4gc3VwZXIuZ2V0Q29uZmlnJChrZXkpO1xuICB9XG5cbiAgc2F2ZUNvbmZpZyQoXG4gICAgY29uZmlnOiBHcmlkQ29uZmlnLFxuICAgIGtleTogc3RyaW5nID0gdGhpcy5HUklEX0NPTkZJR19ERUZBVUxUX1NUT1JBR0VfS0VZXG4gICk6IE9ic2VydmFibGU8R3JpZENvbmZpZz4ge1xuICAgIHJldHVybiBzdXBlci5zYXZlQ29uZmlnJChjb25maWcsIGtleSk7XG4gIH1cblxuICBwcml2YXRlIGdldERldmljZXNGaWx0ZXJzKFxuICAgIGNvbHVtbnM6IENvbHVtbltdLFxuICAgIHBhZ2luYXRpb246IFBhZ2luYXRpb24sXG4gICAgcXVlcnk6IGFueSxcbiAgICBjaGlsZERldmljZUZpbHRlcnM/OiBib29sZWFuXG4gICkge1xuICAgIHJldHVybiB7XG4gICAgICAuLi4oY2hpbGREZXZpY2VGaWx0ZXJzXG4gICAgICAgID8geyBxdWVyeTogdGhpcy5nZXREZXZpY2VRdWVyeVN0cmluZyhjb2x1bW5zLCBxdWVyeSkgfVxuICAgICAgICA6IHsgcTogdGhpcy5nZXREZXZpY2VRdWVyeVN0cmluZyhjb2x1bW5zLCBxdWVyeSkgfSksXG4gICAgICBwYWdlU2l6ZTogcGFnaW5hdGlvbi5wYWdlU2l6ZSxcbiAgICAgIGN1cnJlbnRQYWdlOiBwYWdpbmF0aW9uLmN1cnJlbnRQYWdlLFxuICAgICAgd2l0aENoaWxkcmVuOiBmYWxzZSxcbiAgICAgIHdpdGhUb3RhbFBhZ2VzOiB0cnVlXG4gICAgfTtcbiAgfVxufVxuIl19
|