qms-angular 2.0.7 → 2.0.9
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/esm2022/lib/components/select-access-dialog/model/select-access-config.model.mjs +2 -1
- package/esm2022/lib/components/select-access-dialog/model/select-access-data.mjs +3 -1
- package/esm2022/lib/components/select-access-dialog/select-access-dialog.component.mjs +90 -15
- package/esm2022/lib/components/select-department-tree/select-department-tree.component.mjs +3 -3
- package/esm2022/lib/components/select-process-data-tree/select-process-data-tree.component.mjs +3 -3
- package/fesm2022/qms-angular.mjs +96 -18
- package/fesm2022/qms-angular.mjs.map +1 -1
- package/lib/components/select-access-dialog/model/select-access-config.model.d.ts +1 -0
- package/lib/components/select-access-dialog/model/select-access-data.d.ts +2 -0
- package/lib/components/select-access-dialog/select-access-dialog.component.d.ts +8 -1
- package/package.json +1 -1
@@ -88,6 +88,13 @@ export class QMSSelectAccessDialogComponent {
|
|
88
88
|
return userGroups.data || [];
|
89
89
|
}
|
90
90
|
;
|
91
|
+
get departmentFiltered() {
|
92
|
+
const departments = this.getDepartment$.value;
|
93
|
+
const ids = this.resultAccess.departmentsFlat.map(x => x.id);
|
94
|
+
departments.data?.forEach(x => x.selected = ids.includes(x.id));
|
95
|
+
return departments.data || [];
|
96
|
+
}
|
97
|
+
;
|
91
98
|
constructor(dialogRef, dialogData, translate, _fb, cdRef) {
|
92
99
|
this.dialogRef = dialogRef;
|
93
100
|
this.dialogData = dialogData;
|
@@ -105,6 +112,8 @@ export class QMSSelectAccessDialogComponent {
|
|
105
112
|
this.onSearchPersonFreeTextEvent = new EventEmitter();
|
106
113
|
this.onSearchUserGroupEvent = new EventEmitter();
|
107
114
|
this.onSearchDepartmentEvent = new EventEmitter();
|
115
|
+
this.onSearchDepartmentPagingEvent = new EventEmitter();
|
116
|
+
this.departmentSearchForm = new UntypedFormControl('');
|
108
117
|
this.onPagingEvent = new EventEmitter();
|
109
118
|
this.onSelectOptionChange$ = new Subject();
|
110
119
|
/** list filtered by search keyword */
|
@@ -118,6 +127,7 @@ export class QMSSelectAccessDialogComponent {
|
|
118
127
|
};
|
119
128
|
this.getPerson$ = new BehaviorSubject(new QMSAccessPagingModel());
|
120
129
|
this.getUserGroup$ = new BehaviorSubject(new QMSAccessPagingModel());
|
130
|
+
this.getDepartment$ = new BehaviorSubject(new QMSAccessPagingModel());
|
121
131
|
this.PAGINATION_SIZE = PaginationSize;
|
122
132
|
this.PAGE_SIZE_OPTION = [5, 10, 15, 20, 25, 100];
|
123
133
|
this.resultAccess = new QMSSelectAccessResult();
|
@@ -158,10 +168,12 @@ export class QMSSelectAccessDialogComponent {
|
|
158
168
|
if (response) {
|
159
169
|
this.personForm && this.personForm.disable();
|
160
170
|
this.userGroupForm && this.userGroupForm.disable();
|
171
|
+
this.departmentSearchForm && this.departmentSearchForm.disable();
|
161
172
|
return;
|
162
173
|
}
|
163
174
|
this.personForm && this.personForm.enable();
|
164
175
|
this.userGroupForm && this.userGroupForm.enable();
|
176
|
+
this.departmentSearchForm && this.departmentSearchForm.enable();
|
165
177
|
});
|
166
178
|
}
|
167
179
|
ngOnDestroy() {
|
@@ -260,8 +272,9 @@ export class QMSSelectAccessDialogComponent {
|
|
260
272
|
const resultObj = {
|
261
273
|
0: this.resultAccess.persons,
|
262
274
|
1: this.resultAccess.userGroups,
|
263
|
-
2: this.resultAccess.departments
|
275
|
+
2: this.resultAccess.departments || this.resultAccess.departmentsFlat
|
264
276
|
};
|
277
|
+
console.log('resultObj', resultObj[this.optionSelect.value]);
|
265
278
|
return resultObj[this.optionSelect.value];
|
266
279
|
}
|
267
280
|
checkExistOptionSelect(option) {
|
@@ -290,10 +303,10 @@ export class QMSSelectAccessDialogComponent {
|
|
290
303
|
recursive: formValue.recursive
|
291
304
|
};
|
292
305
|
this.getSearching$.next(true);
|
293
|
-
this.
|
306
|
+
this._resetPaginator(this.pagingPerson);
|
294
307
|
this.onSearchPersonEvent.emit(filterData);
|
295
308
|
}
|
296
|
-
|
309
|
+
_resetPaginator(paginator) {
|
297
310
|
if (!paginator)
|
298
311
|
return;
|
299
312
|
paginator.changePage(0);
|
@@ -303,14 +316,20 @@ export class QMSSelectAccessDialogComponent {
|
|
303
316
|
this.getLoading$.next(true);
|
304
317
|
this.getSearching$.next(true);
|
305
318
|
this.onSearchPersonFreeTextEvent.emit(this.personForm.get('keyword').value);
|
306
|
-
this.
|
319
|
+
this._resetPaginator(this.pagingPerson);
|
307
320
|
}
|
308
321
|
onFilterUserGroup() {
|
309
322
|
this.getLoading$.next(true);
|
310
323
|
this.getSearching$.next(true);
|
311
|
-
this.
|
324
|
+
this._resetPaginator(this.pagingUserGroup);
|
312
325
|
this.onSearchUserGroupEvent.emit(this.userGroupForm.value);
|
313
326
|
}
|
327
|
+
onFilterDepartment() {
|
328
|
+
this.getLoading$.next(true);
|
329
|
+
this.getSearching$.next(true);
|
330
|
+
this._resetPaginator(this.pagingDepartment);
|
331
|
+
this.onSearchDepartmentPagingEvent.emit(this.departmentSearchForm.value);
|
332
|
+
}
|
314
333
|
onSelectItem(type, item) {
|
315
334
|
if (!this.allowRemove(type, item))
|
316
335
|
return;
|
@@ -354,6 +373,24 @@ export class QMSSelectAccessDialogComponent {
|
|
354
373
|
indexItem > -1 && this.resultAccess.userGroups.splice(indexItem, 1);
|
355
374
|
}
|
356
375
|
break;
|
376
|
+
case OptionSelectAccessEnum.DEPARTMENT:
|
377
|
+
{
|
378
|
+
if (this.dialogData.modeSelectOneUserGroup) {
|
379
|
+
this.resultAccess.departmentsFlat = item.selected ? [item] : [];
|
380
|
+
this.departmentFiltered.forEach(item => {
|
381
|
+
if (item.id !== item.id) {
|
382
|
+
item.selected = false;
|
383
|
+
}
|
384
|
+
});
|
385
|
+
return;
|
386
|
+
}
|
387
|
+
if (item.selected) {
|
388
|
+
this.resultAccess.departmentsFlat.push(item);
|
389
|
+
return;
|
390
|
+
}
|
391
|
+
const indexItem = this.resultAccess.departmentsFlat.findIndex(x => x.id === item.id);
|
392
|
+
indexItem > -1 && this.resultAccess.departmentsFlat.splice(indexItem, 1);
|
393
|
+
}
|
357
394
|
default:
|
358
395
|
return;
|
359
396
|
}
|
@@ -373,12 +410,21 @@ export class QMSSelectAccessDialogComponent {
|
|
373
410
|
}
|
374
411
|
break;
|
375
412
|
case this.OPTION_ENUM.DEPARTMENT:
|
376
|
-
this.
|
377
|
-
|
378
|
-
|
379
|
-
|
380
|
-
|
381
|
-
|
413
|
+
if (!this.dialogData.isDepartmentPaging) {
|
414
|
+
this.resultAccess.departments.splice(index, 1);
|
415
|
+
this._departmentSelected = _.cloneDeep(this.resultAccess.departments);
|
416
|
+
if (!this.treeDepartment)
|
417
|
+
return;
|
418
|
+
this.treeDepartment.onRemoveNode(item.id);
|
419
|
+
break;
|
420
|
+
}
|
421
|
+
else {
|
422
|
+
this.resultAccess.departmentsFlat.splice(index, 1);
|
423
|
+
if (this.departmentFiltered[index]) {
|
424
|
+
this.departmentFiltered[index].selected = false;
|
425
|
+
}
|
426
|
+
break;
|
427
|
+
}
|
382
428
|
default:
|
383
429
|
return;
|
384
430
|
}
|
@@ -409,6 +455,8 @@ export class QMSSelectAccessDialogComponent {
|
|
409
455
|
return !this.dialogData.modeSelectOnePerson && this.personFiltered.length && this.personFiltered.every(x => x.selected);
|
410
456
|
case this.OPTION_ENUM.USER_GROUP:
|
411
457
|
return !this.dialogData.modeSelectOneUserGroup && this.userGroupFiltered.length && this.userGroupFiltered.every(x => x.selected);
|
458
|
+
case this.OPTION_ENUM.DEPARTMENT:
|
459
|
+
return !this.dialogData.modeSelectOneUserGroup && this.departmentFiltered.length && this.departmentFiltered.every(x => x.selected);
|
412
460
|
default:
|
413
461
|
return false;
|
414
462
|
}
|
@@ -417,6 +465,7 @@ export class QMSSelectAccessDialogComponent {
|
|
417
465
|
switch (type) {
|
418
466
|
case OptionSelectAccessEnum.PERSON: return !this.personFiltered.length || this.personFiltered.every(x => !this.allowRemove(type, x));
|
419
467
|
case OptionSelectAccessEnum.USER_GROUP: return !this.userGroupFiltered.length || this.userGroupFiltered.every(x => !this.allowRemove(type, x));
|
468
|
+
case OptionSelectAccessEnum.DEPARTMENT: return !this.departmentFiltered.length || this.departmentFiltered.every(x => !this.allowRemove(type, x));
|
420
469
|
default: return false;
|
421
470
|
}
|
422
471
|
}
|
@@ -426,6 +475,8 @@ export class QMSSelectAccessDialogComponent {
|
|
426
475
|
return !this.dialogData.modeSelectOnePerson && !this.isCheckAll(type) && this.personFiltered?.some(x => x.selected);
|
427
476
|
case this.OPTION_ENUM.USER_GROUP:
|
428
477
|
return !this.dialogData.modeSelectOneUserGroup && !this.isCheckAll(type) && this.userGroupFiltered?.some(x => x.selected);
|
478
|
+
case this.OPTION_ENUM.DEPARTMENT:
|
479
|
+
return !this.dialogData.modeSelectOneUserGroup && !this.isCheckAll(type) && this.departmentFiltered?.some(x => x.selected);
|
429
480
|
default:
|
430
481
|
return false;
|
431
482
|
}
|
@@ -468,6 +519,22 @@ export class QMSSelectAccessDialogComponent {
|
|
468
519
|
this.resultAccess.userGroups = this.resultAccess.userGroups.filter(x => !this.allowRemove(type, x) || !idFiltered.includes(x.id));
|
469
520
|
break;
|
470
521
|
}
|
522
|
+
case this.OPTION_ENUM.DEPARTMENT: {
|
523
|
+
if (this.dialogData.modeSelectOneUserGroup) {
|
524
|
+
$event.checked = false;
|
525
|
+
return;
|
526
|
+
}
|
527
|
+
const departmentPaging = this.departmentFiltered;
|
528
|
+
departmentPaging.filter(x => this.allowRemove(type, x)).forEach(x => x.selected = $event.checked);
|
529
|
+
const idFiltered = departmentPaging.map(x => x.id);
|
530
|
+
if ($event.checked) {
|
531
|
+
const idSelected = this.resultAccess.departmentsFlat.map(x => x.id);
|
532
|
+
this.resultAccess.departmentsFlat = [...this.resultAccess.departmentsFlat, ...departmentPaging.filter(x => this.allowRemove(type, x) && !idSelected.includes(x.id))];
|
533
|
+
return;
|
534
|
+
}
|
535
|
+
this.resultAccess.departmentsFlat = this.resultAccess.departmentsFlat.filter(x => !this.allowRemove(type, x) || !idFiltered.includes(x.id));
|
536
|
+
break;
|
537
|
+
}
|
471
538
|
default:
|
472
539
|
return;
|
473
540
|
}
|
@@ -533,7 +600,7 @@ export class QMSSelectAccessDialogComponent {
|
|
533
600
|
onPaginatorEvent(val, type) {
|
534
601
|
if (this.getSearching$.value)
|
535
602
|
return;
|
536
|
-
this.getLoading$.next(this.optionSelect.value !==
|
603
|
+
this.getLoading$.next(this.optionSelect.value !== '');
|
537
604
|
this.onPagingEvent.emit({
|
538
605
|
...val,
|
539
606
|
type: type
|
@@ -551,6 +618,11 @@ export class QMSSelectAccessDialogComponent {
|
|
551
618
|
}
|
552
619
|
this.treeDepartment.setResultSearch(data);
|
553
620
|
}
|
621
|
+
updateDepartmentFilter(data) {
|
622
|
+
this.getDepartment$.next(data);
|
623
|
+
this.getLoading$.next(false);
|
624
|
+
this.getSearching$.next(false);
|
625
|
+
}
|
554
626
|
generateTooltip(node) {
|
555
627
|
if (this.dialogData?.formatTooltip)
|
556
628
|
return this.dialogData.formatTooltip(node);
|
@@ -591,7 +663,7 @@ export class QMSSelectAccessDialogComponent {
|
|
591
663
|
clickAction: 'noop'
|
592
664
|
}
|
593
665
|
}
|
594
|
-
], viewQueries: [{ propertyName: "tree", first: true, predicate: ["tree"], descendants: true, read: SelectDepartmentTreeComponent }, { propertyName: "pagingPerson", first: true, predicate: ["pagingPerson"], descendants: true }, { propertyName: "pagingUserGroup", first: true, predicate: ["pagingUserGroup"], descendants: true }], ngImport: i0, template: "<h3 mat-dialog-title class=\"more-action\">\n {{dialogData.titleDialog || LANG.SELECT_ACCESS}}\n <button matDialogClose class=\"close-btn\" qms-btn-icon color=\"light\">\n <mat-icon class=\"mat-icons-outlined\">close</mat-icon>\n </button>\n</h3>\n<mat-dialog-content>\n <div [class.active]=\"optionSelect.value !== null\" class=\"qms-dialog-content\">\n <div class=\"access-dialog-wraper\">\n <mat-form-field *ngIf=\"options.length > 1\" qms-form qms-select-input class=\"field-select-option w-100 mb-2\"\n appearance=\"fill\">\n <mat-label [attr.aria-label]=\"LANG.TYPE\" qms-select-input>{{LANG.TYPE}}</mat-label>\n <mat-select (selectionChange)=\"onSelectionTypeChange($event)\" [formControl]=\"optionSelect\" placeholder=\"Select\"\n disableOptionCentering #singleSelect panelClass=\"qms-select-panel\" qms-select>\n\n <mat-option *ngFor=\"let item of options\" [value]=\"item.type\">\n {{ LANG[item.displayName] }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n <div class=\"body-dialog-container\">\n <div class=\"option-selected-content\">\n <ng-container *ngIf=\"optionSelect.value === OPTION_ENUM.PERSON\">\n <form *ngIf=\"personForm\" [formGroup]=\"personForm\">\n <div class=\"group-filter-person-option\">\n <mat-form-field *ngIf=\"optionFilterPersonDataGlobal.userGroups.length\" qms-form qms-select-input\n class=\"w-100 mb-2\" appearance=\"fill\">\n <mat-label [attr.aria-label]=\"LANG.ROLE\" qms-select-input>{{LANG.ROLE}}</mat-label>\n <mat-select panelClass=\"qms-select-panel\" qms-select formControlName=\"userGroup\"\n disableOptionCentering>\n <mat-select-trigger>\n {{personForm.controls['userGroup'].value?.name || ''}}\n </mat-select-trigger>\n <mat-option>\n <ngx-mat-select-search formControlName=\"userGroupFilter\" placeholderLabel=\"{{ LANG.ROLE }}\"\n noEntriesFoundLabel=\"\">\n </ngx-mat-select-search>\n </mat-option>\n <mat-option mode=\"dark\" class=\"opt-check-icon\"\n *ngFor=\"let item of filteredSearchTextBox.userGroup.value\" [value]=\"item\">\n <span qms-elipsify position=\"top\" mode=\"dark\" class=\"text-option-content\">{{ item.name }}</span>\n <mat-icon class=\"check-icon\"\n *ngIf=\"personForm.controls['userGroup'].value?.id == item.id\">check</mat-icon>\n </mat-option>\n </mat-select>\n <span [@inOutAnimation] (click)=\"personForm.get('userGroup').setValue('')\" class=\"pointer \" matSuffix\n aria-label=\"Clear\" *ngIf=\"personForm.get('userGroup').value && !getLoading$.value\">\n <mat-icon>close</mat-icon>\n </span>\n </mat-form-field>\n <mat-form-field *ngIf=\"optionFilterPersonDataGlobal.departments.length\"\n class=\"w-100 input-select-option mb-2\" qms-form qms-select-input>\n <mat-label [attr.aria-label]=\"LANG.DEPARTMENT_UNIT\">{{LANG.DEPARTMENT_UNIT}}</mat-label>\n <mat-select panelClass=\"qms-select-panel\" qms-select disableOptionCentering\n formControlName=\"department\">\n <mat-select-trigger>\n {{personForm.controls['department'].value?.name || ''}}\n </mat-select-trigger>\n <mat-option>\n <ngx-mat-select-search formControlName=\"departmentFilter\"\n [placeholderLabel]=\"LANG.DEPARTMENT_UNIT\" noEntriesFoundLabel=\"\">\n </ngx-mat-select-search>\n </mat-option>\n <mat-option class=\"opt-check-icon\" *ngFor=\"let item of filteredSearchTextBox.department.value\"\n [value]=\"item\">\n <span qms-elipsify mode=\"dark\" position=\"top\" class=\"text-option-content\">{{ item.name }}</span>\n <mat-icon class=\"check-icon\"\n *ngIf=\"personForm.controls['department'].value?.id == item.id\">check</mat-icon>\n </mat-option>\n </mat-select>\n <span (click)=\"setFormControlValue(['recursive','department'], [false,''])\" [@inOutAnimation]\n class=\"pointer\" matSuffix aria-label=\"Clear\"\n *ngIf=\"personForm.get('department').value && !getLoading$.value\">\n <mat-icon>close</mat-icon>\n </span>\n </mat-form-field>\n </div>\n\n <mat-slide-toggle [@inOutAnimation] *ngIf=\"personForm.controls['department'].value\"\n class=\"w-100 slide-toggle\" formControlName=\"recursive\" color=\"default\" qms-group-options>\n <span class=\"text-label\">{{LANG.INCLUDE_SUB_DEPARTMENTS}}</span>\n </mat-slide-toggle>\n\n <mat-form-field class=\"w-100 mb-2\" appearance=\"fill\" qms-form qms-search-field>\n <mat-label [attr.aria-label]=\"LANG.SEARCH_WITH_NAME\" class=\"visually-hidden\"\n qms-select-input>{{LANG.SEARCH_WITH_NAME}}</mat-label>\n <input matInput appearance=\"off\" [placeholder]=\"LANG.SEARCH_WITH_NAME\" formControlName=\"keyword\"\n type=\"text\" autocomplete=\"off\" />\n <button *ngIf=\"!getLoading$.value\" qms-btn-icon color=\"light\" [@inOutAnimation]\n (click)=\"onSearchPersonFreeText()\" class=\"pointer me-1\" matSuffix aria-label=\"Search\">\n <mat-icon>search</mat-icon>\n </button>\n <mat-progress-spinner [@inOutAnimation] *ngIf=\"getLoading$.value\" matSuffix mode=\"indeterminate\"\n diameter=\"20\"></mat-progress-spinner>\n <span [@inOutAnimation] (click)=\"personForm.get('keyword').setValue('')\"\n class=\"pointer btn-icon-clear d-flex justify-content-center align-items-center \" matSuffix\n aria-label=\"Clear\" *ngIf=\"personForm.get('keyword').value && !getLoading$.value\">\n <button qms-btn-icon color=\"light\">\n <mat-icon>close</mat-icon>\n </button>\n </span>\n </mat-form-field>\n <button (click)=\"onFilterPerson()\" qms-btn-outlined class=\"w-100 my-1\">\n {{LANG.FILTER}}\n </button>\n\n <div qms-scrollbar>\n <div class=\"item\">\n <mat-checkbox [@inOutAnimation]\n *ngIf=\"!getLoading$.value && personFiltered.length && !dialogData.modeSelectOnePerson\"\n [disabled]=\"isDisabledSelectAll(OPTION_ENUM.PERSON)\" #checkPerson class=\"w-100 mb-1 checkbox-all\"\n (click)=\"personFiltered.length && onCheckAll(OPTION_ENUM.PERSON,checkPerson)\"\n [checked]=\"isCheckAll(OPTION_ENUM.PERSON)\" [indeterminate]=\"isIndeterminate(OPTION_ENUM.PERSON)\"\n color=\"default\" qms-group-options>\n <span class=\"text-label header-title\">{{LANG.CHOOSE_ALL}} </span>\n <span>(<b>{{personFiltered.length}}</b>)</span>\n </mat-checkbox>\n </div>\n <mat-divider class=\"mx-auto\"></mat-divider>\n <ng-container *ngIf=\"getLoading$.value; then loading\">\n </ng-container>\n <div [@inOutAnimation] *ngIf=\"personFiltered.length && !getLoading$.value\" [@listAnimation]\n class=\"item-list-wrapper\">\n <div class=\"item mt-1\" [@inOutAnimation] *ngFor=\"let employee of personFiltered; trackBy: trackByFn\">\n <ng-container\n [ngTemplateOutlet]=\"dialogData.modeSelectOnePerson ?itemWithoutCheckboxTemplate : itemCheckboxTemplate\"\n [ngTemplateOutletContext]=\"{item: employee, type: OPTION_ENUM.PERSON}\">\n </ng-container>\n </div>\n </div>\n <div [@inOutAnimation] *ngIf=\"!personFiltered.length && !getLoading$.value\"\n class=\"item-list-wrapper no-result\">\n <ng-container *ngTemplateOutlet=\"noResult\"></ng-container>\n </div>\n <mat-divider class=\"mx-auto\"></mat-divider>\n <qms-paginator overlayPanelClass=\"select-access-paginator\" #pagingPerson\n *ngIf=\"getPerson$.value.length > 10\" [length]=\"getPerson$.value.length\" [numHidden]=\"0\"\n [pageSize]=\"getPerson$.value.pageSize\" [pageSizeOptions]=\"PAGE_SIZE_OPTION\"\n (page)='onPaginatorEvent($event, OPTION_ENUM.PERSON)' [size]='PAGINATION_SIZE.medium'>\n </qms-paginator>\n </div>\n </form>\n </ng-container>\n <ng-container *ngIf=\"optionSelect.value === OPTION_ENUM.USER_GROUP\">\n <div>\n <form (submit)=\"onFilterUserGroup()\">\n <mat-form-field class=\"w-100 mb-2\" qms-form qms-search-field>\n <mat-label aria-label=\"User group\" class=\"visually-hidden\" qms-select-input>User group</mat-label>\n <input [formControl]=\"userGroupForm\" matInput type=\"text\" autocomplete=\"off\"\n placeholder=\"User group\" />\n <button [@inOutAnimation] *ngIf=\"!getLoading$.value\" type=\"submit\" qms-btn-icon color=\"light\"\n matSuffix>\n <mat-icon>search</mat-icon>\n </button>\n <mat-progress-spinner [@inOutAnimation] *ngIf=\"getLoading$.value\" matSuffix mode=\"indeterminate\"\n diameter=\"20\"></mat-progress-spinner>\n <div [@inOutAnimation] *ngIf=\"!!userGroupForm.value && !getLoading$.value\" matSuffix qms-input-clear>\n <button (click)=\"userGroupForm.setValue('')\" qms-btn-icon color=\"light\">\n <mat-icon>close</mat-icon>\n </button>\n </div>\n </mat-form-field>\n </form>\n <div qms-scrollbar>\n <div class=\"item\">\n <mat-checkbox [@inOutAnimation]\n *ngIf=\"!getLoading$.value && (userGroupFiltered.length && !dialogData.modeSelectOneUserGroup)\"\n [disabled]=\"isDisabledSelectAll(OPTION_ENUM.USER_GROUP)\" #checkUserGroup\n class=\"w-100 checkbox-all mb-1\" color=\"default\" [checked]=\"isCheckAll(OPTION_ENUM.USER_GROUP)\"\n [indeterminate]=\"isIndeterminate(OPTION_ENUM.USER_GROUP)\"\n (click)=\"userGroupFiltered.length && onCheckAll(OPTION_ENUM.USER_GROUP,checkUserGroup)\"\n qms-group-options>\n <span class=\"text-label header-title\">{{LANG.CHOOSE_ALL}}</span>\n <span>(<b>{{userGroupFiltered.length}}</b>)</span>\n </mat-checkbox>\n </div>\n <mat-divider class=\"mx-auto\"></mat-divider>\n <ng-container *ngIf=\"getLoading$.value;then loading\">\n </ng-container>\n <div *ngIf=\"userGroupFiltered.length && !getLoading$.value\" [@listAnimation] class=\"item-list-wrapper\">\n <div [@inOutAnimation] class=\"item mt-1\" *ngFor=\"let userGroup of userGroupFiltered\">\n <ng-container\n [ngTemplateOutlet]=\"dialogData.modeSelectOneUserGroup ? itemWithoutCheckboxTemplate : itemCheckboxTemplate\"\n [ngTemplateOutletContext]=\"{item: userGroup,type: OPTION_ENUM.USER_GROUP}\">\n </ng-container>\n </div>\n </div>\n <div [@inOutAnimation] *ngIf=\"!userGroupFiltered.length && !getLoading$.value\"\n class=\"item-list-wrapper no-result\">\n <ng-container *ngTemplateOutlet=\"noResult\"></ng-container>\n </div>\n <mat-divider class=\"mx-auto\"></mat-divider>\n <qms-paginator overlayPanelClass=\"select-access-paginator\" #pagingUserGroup class=\"my-1\"\n *ngIf=\"getUserGroup$.value.length > 10 \" [length]=\"getUserGroup$.value.length\" [numHidden]=\"0\"\n [pageSize]=\"getUserGroup$.value.pageSize\" [pageSizeOptions]=\"PAGE_SIZE_OPTION\"\n (page)='onPaginatorEvent($event, OPTION_ENUM.USER_GROUP)' [size]='PAGINATION_SIZE.medium'>\n </qms-paginator>\n </div>\n </div>\n </ng-container>\n <ng-container\n *ngIf=\"optionSelect.value === OPTION_ENUM.DEPARTMENT && getLoading$.value; then loading\"></ng-container>\n <ng-container *ngIf=\"optionSelect.value === OPTION_ENUM.DEPARTMENT && !getLoading$.value\"\n class=\"person-access\">\n <qms-select-department-tree #tree [rowsSkeleton]=\"8\" [config]=\"dialogData.treeDepartmentConfig\"\n [maxWidthNode]=\"dialogData.maxWidthNode\" (onSearchEvent)=\"onSearchDepartmentEvent.emit($event)\"\n (onValueChangeEvent)=\"onResultDepartmentChange($event)\"\n (selectionNodeChangeEvent)=\"onSelectionNodeDepartmentChange($event)\"\n (onPagingSearchEvent)=\"onPaginatorEvent($event, OPTION_ENUM.DEPARTMENT)\">\n </qms-select-department-tree>\n </ng-container>\n </div>\n </div>\n </div>\n\n <div *ngIf=\"optionSelect.value !== null\" class=\"result-wrapper\">\n <div class=\"result-selected-container\">\n <div [@inOutAnimation] *ngIf=\"(options.length === 1) || (options.length > 1 && optionSelect.value !== null)\"\n class=\"header-title result-header\">\n <span>\n {{\n dialogData.titleResult || LANG.RESULTS}}\n <span *ngIf=\"options.length === 1 && hasItemSelected()\">\n ({{getResultTabActive().length}})\n </span>\n </span>\n </div>\n <div class=\"result-body\">\n <ng-container *ngIf=\"checkExistOptionSelect(OPTION_ENUM.PERSON)\"\n [ngTemplateOutlet]=\"options?.length == 1 ? listChip : viewResultCollapse\"\n [ngTemplateOutletContext]=\"{data:resultAccess.persons, type:OPTION_ENUM.PERSON, title:LANG.PERSON}\">\n </ng-container>\n <ng-container *ngIf=\"checkExistOptionSelect(OPTION_ENUM.USER_GROUP)\"\n [ngTemplateOutlet]=\"options?.length == 1 ? listChip : viewResultCollapse\"\n [ngTemplateOutletContext]=\"{data:resultAccess.userGroups, type:OPTION_ENUM.USER_GROUP, title:LANG.USER_GROUP}\">\n </ng-container>\n <ng-container *ngIf=\"checkExistOptionSelect(OPTION_ENUM.DEPARTMENT)\"\n [ngTemplateOutlet]=\"options?.length == 1 ? listChip : viewResultCollapse\"\n [ngTemplateOutletContext]=\"{data: resultAccess.departments, type:OPTION_ENUM.DEPARTMENT, title:LANG.DEPARTMENT}\">\n </ng-container>\n </div>\n </div>\n </div>\n </div>\n\n</mat-dialog-content>\n<mat-dialog-actions align=\"end\">\n <mat-divider class=\"w-100 mb-3\"></mat-divider>\n <button class=\"me-2\" qms-btn-text mat-dialog-close>\n {{dialogData.cancelTitle || LANG.CANCEL}}\n </button>\n <button *ngIf=\"optionSelect.value !== null\"\n [disabled]=\"!hasItemSelected() && !dialogData.treeDepartmentConfig.canAddNullResult\" class=\"btn-add\"\n [class.qms-btn-disabled]=\"!hasItemSelected() && !dialogData.treeDepartmentConfig.canAddNullResult\"\n [mat-dialog-close]=\"resultAccess\" qms-btn>\n <span>{{dialogData.confirmTitle || LANG.ADD}}</span>\n </button>\n</mat-dialog-actions>\n\n<ng-template #noResult>\n <svg width=\"89\" height=\"130\" viewBox=\"0 0 89 88\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <rect x=\"0.5\" width=\"88\" height=\"88\" rx=\"44\" fill=\"white\" />\n <rect x=\"0.5\" width=\"88\" height=\"88\" rx=\"44\" fill=\"#0163B2\" fill-opacity=\"0.12\" />\n <path\n d=\"M44.5 56.6936L58.096 64.8996L54.488 49.4336L66.5 39.0276L50.682 37.6856L44.5 23.0996L38.318 37.6856L22.5 39.0276L34.512 49.4336L30.904 64.8996L44.5 56.6936Z\"\n fill=\"#0163B3\" />\n <text x=\"10\" y=\"105\" fill=\"#0163B2\">{{LANG.NO_RESULT}}</text>\n </svg>\n</ng-template>\n<ng-template #listChip let-data=\"data\" let-type=\"type\">\n <mat-chip-set [@inOutAnimation] *ngIf=\"data?.length\" class=\"panel__item qms-scrollbar\">\n <div [@inOutAnimation_2] *ngFor=\"let item of data; let i = index\">\n <mat-chip (click)=\"onScollToNodeTreeDepartment(item)\" [@updateItemAnimation]\n *qmsContentChanges=\"item.children?.length\" class=\"chip-item-result\" qms-chip [removable]=\"true\">\n <span qms-chip-body>\n <span [qms-tool-tip]=\"generateTooltip(item)\" position=\"top\" mode=\"dark\" class=\"text-label\">\n {{item.name}}\n <span *ngIf=\"item.subName\">({{ item.subName }})</span>\n </span>\n <span class=\"chip-item-children__count ms-1\" *ngIf=\"item?.children && item?.isGroup\">\n {{item.children.length}}/{{item.childCount}}\n </span>\n </span>\n\n <button matChipRemove *ngIf=\"allowRemove(type, item)\" (click)=\"onRemoveChip(type,item, i)\">\n <mat-icon class=\"remove-chip-icon\">cancel</mat-icon>\n <mat-icon *ngIf=\"allowRemove(type, item) && dialogData.formatMsgDisable\" position=\"top\" mode=\"dark\"\n [qms-tool-tip]=\"dialogData.formatMsgDisable(item)\" class=\"remove-chip-icon\">info_i</mat-icon>\n </button>\n <button matChipRemove *ngIf=\"!allowRemove(type, item) && dialogData.formatMsgDisable\"\n (click)=\"onRemoveChip(type,item, i)\">\n <mat-icon class=\"remove-chip-icon\">cancel</mat-icon>\n <mat-icon *ngIf=\"!allowRemove(type, item) && dialogData.formatMsgDisable\" position=\"top\" mode=\"dark\"\n [qms-tool-tip]=\"dialogData.formatMsgDisable(item)\" class=\"remove-chip-icon\">info_i</mat-icon>\n </button>\n </mat-chip>\n </div>\n </mat-chip-set>\n</ng-template>\n\n\n<ng-template #viewResultCollapse let-title=\"title\" let-data=\"data\" let-type=\"type\">\n <mat-expansion-panel qms-expansion [expanded]=\"optionSelect.value === type\">\n <mat-expansion-panel-header>\n <div class=\"title-content\">\n <div class=\"qms-list-text\">\n <div qms-line color=\"default-subtitle\">{{title}}\n <span class=\"fw-600\">\n ({{data?.length}})\n </span>\n </div>\n </div>\n </div>\n </mat-expansion-panel-header>\n <ng-container [ngTemplateOutlet]=\"listChip\" [ngTemplateOutletContext]=\"{data: data,type: type}\">\n </ng-container>\n </mat-expansion-panel>\n</ng-template>\n\n<ng-template #itemWithoutCheckboxTemplate let-item=\"item\" let-type=\"type\">\n <div (click)=\"onSelectItem(type,item)\" class=\"item-without-checkbox w-100\" [class.active]=\"item.selected\">\n <div class=\"item-content\">\n <div class=\"text-label\">\n <span class=\"text-label label-item fs-14 \">\n {{ item.name }}\n </span>\n <span *ngIf=\"item.subName\" class=\"ms-1 sub-label\">({{item.subName}})</span>\n </div>\n <small *ngIf=\"item.helpText\" class=\"text-help px-1 fs-12 sub-label\">{{ item.helpText }}</small>\n </div>\n <div class=\"item-state\">\n <mat-icon [@inOutAnimation] *ngIf=\"item.selected\">check</mat-icon>\n </div>\n </div>\n</ng-template>\n\n<ng-template #itemCheckboxTemplate let-item=\"item\" let-type=\"type\">\n <mat-checkbox [disabled]=\"!allowRemove(type, item)\" [checked]=\"item.selected\" (click)=\"onSelectItem(type,item)\"\n class=\"w-100\" color=\"default\" qms-group-options>\n <div class=\"text-label\">\n <span class=\"text-label label-item fs-14 \">\n {{ item.name }}\n </span>\n <span *ngIf=\"item.subName\" class=\"ms-1 sub-label\">({{item.subName}})</span>\n </div>\n <small *ngIf=\"item.helpText\" class=\"text-help px-1 fs-12 sub-label\">{{ item.helpText }}</small>\n </mat-checkbox>\n</ng-template>\n\n<ng-template #loading>\n <div class=\"qms-loading-container\">\n <div class=\"qms-loader\" *ngFor=\"let item of arrSkeleton\">\n <div class=\"qms-loader__wrapper\">\n <div class=\"row-loader\">\n </div>\n </div>\n </div>\n </div>\n</ng-template>", styles: ["@font-face{font-family:icomoon;src:url(/assets/fonts/icomoon.eot?aghldx);src:url(/assets/fonts/icomoon.eot?aghldx#iefix) format(\"embedded-opentype\"),url(/assets/fonts/icomoon.ttf?aghldx) format(\"truetype\"),url(/assets/fonts/icomoon.woff?aghldx) format(\"woff\"),url(/assets/fonts/icomoon.svg?aghldx#icomoon) format(\"svg\");font-weight:400;font-style:normal;font-display:block}[class^=icon-],[class*=\" icon-\"]{font-family:icomoon!important;speak:never;font-style:normal;font-weight:400;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.icon-acutely-toxic .path1:before{content:\"\\e91b\";color:#e32730}.icon-acutely-toxic .path2:before{content:\"\\e922\";margin-left:-1em;color:#323232}.icon-acutely-toxic .path3:before{content:\"\\e923\";margin-left:-1em;color:#323232}.icon-acutely-toxic .path4:before{content:\"\\e924\";margin-left:-1em;color:#323232}.icon-acutely-toxic .path5:before{content:\"\\e925\";margin-left:-1em;color:#323232}.icon-acutely-toxic .path6:before{content:\"\\e926\";margin-left:-1em;color:#323232}.icon-acutely-toxic .path7:before{content:\"\\e927\";margin-left:-1em;color:#323232}.icon-acutely-toxic .path8:before{content:\"\\e928\";margin-left:-1em;color:#323232}.icon-acutely-toxic .path9:before{content:\"\\e929\";margin-left:-1em;color:#323232}.icon-acutely-toxic .path10:before{content:\"\\e92a\";margin-left:-1em;color:#323232}.icon-acutely-toxic .path11:before{content:\"\\e92b\";margin-left:-1em;color:#323232}.icon-acutely-toxic .path12:before{content:\"\\e92c\";margin-left:-1em;color:#323232}.icon-acutely-toxic .path13:before{content:\"\\e92d\";margin-left:-1em;color:#323232}.icon-acutely-toxic .path14:before{content:\"\\e92e\";margin-left:-1em;color:#323232}.icon-acutely-toxic .path15:before{content:\"\\e92f\";margin-left:-1em;color:#323232}.icon-acutely-toxic .path16:before{content:\"\\e930\";margin-left:-1em;color:#323232}.icon-acutely-toxic .path17:before{content:\"\\e931\";margin-left:-1em;color:#323232}.icon-add-column:before{content:\"\\e932\"}.icon-add-tooltip:before{content:\"\\e933\"}.icon-admin:before{content:\"\\e934\"}.icon-annual-cycle:before{content:\"\\e935\"}.icon-assignment-repete:before{content:\"\\e936\"}.icon-barrier-add:before{content:\"\\e937\"}.icon-barrier-edit:before{content:\"\\e938\"}.icon-barrier-view:before{content:\"\\e939\"}.icon-button-group:before{content:\"\\e93a\"}.icon-chemical-manager:before{content:\"\\e93b\"}.icon-chronic-health-hazard .path1:before{content:\"\\e93c\";color:#e32730}.icon-chronic-health-hazard .path2:before{content:\"\\e93d\";margin-left:-1em;color:#323232}.icon-chronic-health-hazard .path3:before{content:\"\\e93e\";margin-left:-1em;color:#323232}.icon-chronic-health-hazard .path4:before{content:\"\\e93f\";margin-left:-1em;color:#323232}.icon-chronic-health-hazard .path5:before{content:\"\\e940\";margin-left:-1em;color:#323232}.icon-chronic-health-hazard .path6:before{content:\"\\e941\";margin-left:-1em;color:#323232}.icon-chronic-health-hazard .path7:before{content:\"\\e942\";margin-left:-1em;color:#323232}.icon-chronic-health-hazard .path8:before{content:\"\\e943\";margin-left:-1em;color:#323232}.icon-chronic-health-hazard .path9:before{content:\"\\e944\";margin-left:-1em;color:#323232}.icon-chronic-health-hazard .path10:before{content:\"\\e945\";margin-left:-1em;color:#323232}.icon-chronic-health-hazard .path11:before{content:\"\\e946\";margin-left:-1em;color:#323232}.icon-chronic-health-hazard .path12:before{content:\"\\e947\";margin-left:-1em;color:#323232}.icon-chronic-health-hazard .path13:before{content:\"\\e948\";margin-left:-1em;color:#323232}.icon-chronic-health-hazard .path14:before{content:\"\\e949\";margin-left:-1em;color:#323232}.icon-chronic-health-hazard .path15:before{content:\"\\e94a\";margin-left:-1em;color:#323232}.icon-contingency:before{content:\"\\e94b\"}.icon-corrosive .path1:before{content:\"\\e94c\";color:#323232}.icon-corrosive .path2:before{content:\"\\e94d\";margin-left:-1em;color:#323232}.icon-corrosive .path3:before{content:\"\\e94e\";margin-left:-1em;color:#323232}.icon-corrosive .path4:before{content:\"\\e94f\";margin-left:-1em;color:#323232}.icon-corrosive .path5:before{content:\"\\e950\";margin-left:-1em;color:#323232}.icon-corrosive .path6:before{content:\"\\e951\";margin-left:-1em;color:#323232}.icon-corrosive .path7:before{content:\"\\e952\";margin-left:-1em;color:#323232}.icon-corrosive .path8:before{content:\"\\e953\";margin-left:-1em;color:#323232}.icon-corrosive .path9:before{content:\"\\e954\";margin-left:-1em;color:#323232}.icon-corrosive .path10:before{content:\"\\e955\";margin-left:-1em;color:#323232}.icon-corrosive .path11:before{content:\"\\e956\";margin-left:-1em;color:#323232}.icon-corrosive .path12:before{content:\"\\e957\";margin-left:-1em;color:#323232}.icon-corrosive .path13:before{content:\"\\e958\";margin-left:-1em;color:#323232}.icon-corrosive .path14:before{content:\"\\e959\";margin-left:-1em;color:#323232}.icon-corrosive .path15:before{content:\"\\e95a\";margin-left:-1em;color:#323232}.icon-corrosive .path16:before{content:\"\\e95b\";margin-left:-1em;color:#323232}.icon-corrosive .path17:before{content:\"\\e95c\";margin-left:-1em;color:#323232}.icon-corrosive .path18:before{content:\"\\e95d\";margin-left:-1em;color:#323232}.icon-corrosive .path19:before{content:\"\\e95e\";margin-left:-1em;color:#323232}.icon-corrosive .path20:before{content:\"\\e95f\";margin-left:-1em;color:#323232}.icon-corrosive .path21:before{content:\"\\e960\";margin-left:-1em;color:#e32730}.icon-dashboard:before{content:\"\\e961\"}.icon-database-sds:before{content:\"\\e962\"}.icon-description-add:before{content:\"\\e963\"}.icon-description-edit:before{content:\"\\e964\"}.icon-description-view:before{content:\"\\e965\";color:#666}.icon-document-read .path1:before{content:\"\\e966\";color:#000;opacity:.6}.icon-document-read .path2:before{content:\"\\e967\";margin-left:-1em;color:#fff}.icon-document-read .path3:before{content:\"\\e968\";margin-left:-1em;color:#000;opacity:.6}.icon-draft:before{content:\"\\e969\"}.icon-expired-off:before{content:\"\\e96a\"}.icon-expired-on:before{content:\"\\e96b\"}.icon-explosive .path1:before{content:\"\\e96c\";color:#e32730}.icon-explosive .path2:before{content:\"\\e96d\";margin-left:-1em;color:#323232}.icon-explosive .path3:before{content:\"\\e96e\";margin-left:-1em;color:#323232}.icon-explosive .path4:before{content:\"\\e96f\";margin-left:-1em;color:#323232}.icon-explosive .path5:before{content:\"\\e970\";margin-left:-1em;color:#323232}.icon-explosive .path6:before{content:\"\\e971\";margin-left:-1em;color:#323232}.icon-explosive .path7:before{content:\"\\e972\";margin-left:-1em;color:#323232}.icon-explosive .path8:before{content:\"\\e973\";margin-left:-1em;color:#323232}.icon-explosive .path9:before{content:\"\\e974\";margin-left:-1em;color:#323232}.icon-explosive .path10:before{content:\"\\e975\";margin-left:-1em;color:#323232}.icon-explosive .path11:before{content:\"\\e976\";margin-left:-1em;color:#323232}.icon-explosive .path12:before{content:\"\\e977\";margin-left:-1em;color:#323232}.icon-explosive .path13:before{content:\"\\e978\";margin-left:-1em;color:#323232}.icon-explosive .path14:before{content:\"\\e979\";margin-left:-1em;color:#323232}.icon-explosive .path15:before{content:\"\\e97a\";margin-left:-1em;color:#323232}.icon-explosive .path16:before{content:\"\\e97b\";margin-left:-1em;color:#323232}.icon-explosive .path17:before{content:\"\\e97c\";margin-left:-1em;color:#323232}.icon-explosive .path18:before{content:\"\\e97d\";margin-left:-1em;color:#323232}.icon-explosive .path19:before{content:\"\\e97e\";margin-left:-1em;color:#323232}.icon-explosive .path20:before{content:\"\\e97f\";margin-left:-1em;color:#323232}.icon-explosive .path21:before{content:\"\\e980\";margin-left:-1em;color:#323232}.icon-explosive .path22:before{content:\"\\e981\";margin-left:-1em;color:#323232}.icon-explosive .path23:before{content:\"\\e982\";margin-left:-1em;color:#323232}.icon-explosive .path24:before{content:\"\\e983\";margin-left:-1em;color:#323232}.icon-explosive .path25:before{content:\"\\e984\";margin-left:-1em;color:#323232}.icon-explosive .path26:before{content:\"\\e985\";margin-left:-1em;color:#323232}.icon-explosive .path27:before{content:\"\\e986\";margin-left:-1em;color:#323232}.icon-explosive .path28:before{content:\"\\e987\";margin-left:-1em;color:#323232}.icon-explosive .path29:before{content:\"\\e988\";margin-left:-1em;color:#323232}.icon-explosive .path30:before{content:\"\\e989\";margin-left:-1em;color:#323232}.icon-explosive .path31:before{content:\"\\e98a\";margin-left:-1em;color:#323232}.icon-explosive .path32:before{content:\"\\e98b\";margin-left:-1em;color:#323232}.icon-explosive .path33:before{content:\"\\e98c\";margin-left:-1em;color:#323232}.icon-explosive .path34:before{content:\"\\e98d\";margin-left:-1em;color:#323232}.icon-explosive .path35:before{content:\"\\e98e\";margin-left:-1em;color:#323232}.icon-explosive .path36:before{content:\"\\e98f\";margin-left:-1em;color:#323232}.icon-explosive .path37:before{content:\"\\e990\";margin-left:-1em;color:#323232}.icon-explosive .path38:before{content:\"\\e991\";margin-left:-1em;color:#323232}.icon-explosive .path39:before{content:\"\\e992\";margin-left:-1em;color:#323232}.icon-explosive .path40:before{content:\"\\e993\";margin-left:-1em;color:#323232}.icon-explosive .path41:before{content:\"\\e994\";margin-left:-1em;color:#323232}.icon-explosive .path42:before{content:\"\\e995\";margin-left:-1em;color:#323232}.icon-explosive .path43:before{content:\"\\e996\";margin-left:-1em;color:#323232}.icon-explosive .path44:before{content:\"\\e997\";margin-left:-1em;color:#323232}.icon-explosive .path45:before{content:\"\\e998\";margin-left:-1em;color:#323232}.icon-explosive .path46:before{content:\"\\e999\";margin-left:-1em;color:#323232}.icon-file-excel:before{content:\"\\e99a\"}.icon-file-pdf:before{content:\"\\e99b\"}.icon-file-pdf-verified .path1:before{content:\"\\e99c\";color:#000;opacity:.6}.icon-file-pdf-verified .path2:before{content:\"\\e99d\";margin-left:-1em;color:#fff}.icon-file-pdf-verified .path3:before{content:\"\\e99e\";margin-left:-1em;color:#000;opacity:.6}.icon-file-word:before{content:\"\\e99f\"}.icon-filter-alt:before{content:\"\\e9a0\"}.icon-flammable .path1:before{content:\"\\e9a1\";color:#323232}.icon-flammable .path2:before{content:\"\\e9a2\";margin-left:-1em;color:#323232}.icon-flammable .path3:before{content:\"\\e9a3\";margin-left:-1em;color:#e32730}.icon-gas-under-pressure .path1:before{content:\"\\e9a4\";color:#323232}.icon-gas-under-pressure .path2:before{content:\"\\e9a5\";margin-left:-1em;color:#e32730}.icon-health-hazard .path1:before{content:\"\\e9a6\";color:#323232}.icon-health-hazard .path2:before{content:\"\\e9a7\";margin-left:-1em;color:#e32730}.icon-line-break:before{content:\"\\e9a8\"}.icon-location:before{content:\"\\e9a9\"}.icon-measure-add:before{content:\"\\e9aa\"}.icon-measure-edit:before{content:\"\\e9ab\"}.icon-measure-view:before{content:\"\\e9ac\";color:#666}.icon-messages:before{content:\"\\e9ad\"}.icon-monitoring:before{content:\"\\e9ae\";color:#666}.icon-move:before{content:\"\\e9af\"}.icon-oxidizing .path1:before{content:\"\\e9b0\";color:#e32730}.icon-oxidizing .path2:before{content:\"\\e9b1\";margin-left:-1em;color:#323232}.icon-oxidizing .path3:before{content:\"\\e9b2\";margin-left:-1em;color:#323232}.icon-oxidizing .path4:before{content:\"\\e9b3\";margin-left:-1em;color:#323232}.icon-process-area-closed:before{content:\"\\e9b4\"}.icon-process-area-open:before{content:\"\\e9b5\"}.icon-process-linked .path1:before{content:\"\\e9b6\";color:#000;opacity:.6}.icon-process-linked .path2:before{content:\"\\e9b7\";margin-left:-1em;color:#666}.icon-risk:before{content:\"\\e9b8\"}.icon-search-in-file:before{content:\"\\e9b9\"}.icon-sort-ascending:before{content:\"\\e9ba\"}.icon-sort-descending:before{content:\"\\e9bb\"}.icon-subscript:before{content:\"\\e9bc\"}.icon-superscript:before{content:\"\\e9bd\"}.icon-syncronice-favorites:before{content:\"\\e9be\"}.icon-system-settings:before{content:\"\\e9bf\"}.icon-view-three-outlined:before{content:\"\\e9c0\"}.icon-workplace-safety:before{content:\"\\e9c1\"}.icon-checklist:before{content:\"\\e900\"}.icon-department-document .path1:before{content:\"\\e901\";color:#000;opacity:.6}.icon-department-document .path2:before{content:\"\\e902\";margin-left:-1em;color:#00804c}.icon-department-folder-closed .path1:before{content:\"\\e903\";color:#000;opacity:.6}.icon-department-folder-closed .path2:before{content:\"\\e904\";margin-left:-1em;color:#00804c}.icon-department-folder-open .path1:before{content:\"\\e905\";color:#000;opacity:.6}.icon-department-folder-open .path2:before{content:\"\\e906\";margin-left:-1em;color:#00804c}.icon-deviation:before{content:\"\\e907\"}.icon-dropdown-folder .path1:before{content:\"\\e908\";color:#00324e}.icon-dropdown-folder .path2:before{content:\"\\e909\";margin-left:-1em;color:#fff;opacity:.6}.icon-enterprise-document .path1:before{content:\"\\e90a\";color:#000;opacity:.6}.icon-enterprise-document .path2:before{content:\"\\e90b\";margin-left:-1em;color:#cf4714}.icon-enterprise-folder-closed .path1:before{content:\"\\e90c\";color:#000;opacity:.6}.icon-enterprise-folder-closed .path2:before{content:\"\\e90d\";margin-left:-1em;color:#cf4714}.icon-enterprise-folder-open .path1:before{content:\"\\e90e\";color:#000;opacity:.6}.icon-enterprise-folder-open .path2:before{content:\"\\e90f\";margin-left:-1em;color:#cf4714}.icon-folder-closed:before{content:\"\\e910\"}.icon-folder-open:before{content:\"\\e911\"}.icon-keyboard_arrow_down:before{content:\"\\e912\"}.icon-keyboard_arrow_up:before{content:\"\\e913\"}.icon-local-document .path1:before{content:\"\\e914\";color:#000;opacity:.6}.icon-local-document .path2:before{content:\"\\e915\";margin-left:-1em;color:#1954a9}.icon-local-folder-closed .path1:before{content:\"\\e916\";color:#000;opacity:.6}.icon-local-folder-closed .path2:before{content:\"\\e917\";margin-left:-1em;color:#1954a9}.icon-local-folder-open .path1:before{content:\"\\e918\";color:#000;opacity:.6}.icon-local-folder-open .path2:before{content:\"\\e919\";margin-left:-1em;color:#1954a9}.icon-process:before{content:\"\\e91a\"}.icon-regional-document .path1:before{content:\"\\e91c\";color:#000;opacity:.6}.icon-regional-document .path2:before{content:\"\\e91d\";margin-left:-1em;color:#662e0d}.icon-regional-folder-closed .path1:before{content:\"\\e91e\";color:#000;opacity:.6}.icon-regional-folder-closed .path2:before{content:\"\\e91f\";margin-left:-1em;color:#662e0d}.icon-regional-folder-open .path1:before{content:\"\\e920\";color:#000;opacity:.6}.icon-regional-folder-open .path2:before{content:\"\\e921\";margin-left:-1em;color:#662e0d}.select-access-paginator{max-height:150px!important}.mat-expansion-panel .mat-expansion-panel-body{padding-top:0!important}.mat-expansion-panel-header{font-weight:800!important}.mat-expansion-panel-header .title-content{font-size:12px!important}.w-100{width:100%}.h-100{height:100%}.pointer{cursor:pointer}.fw-600{font-weight:600}.label-item{font-weight:600;color:var(--ws-text-primary)}.sub-label{color:var(--ws-text-secondary)}.fs-14{font-size:14px}.fs-12{font-size:12px}.color-primary{color:var(--primary-light)!important}.header-title{font-weight:600;color:var(--ws-text-primary);font-size:16px}.mat-mdc-chip.chip-item-result{max-width:250px}.mat-mdc-chip.chip-item-result.item-department .qms-chip-body{display:flex;justify-content:center;align-items:center}.remove-chip-icon{cursor:pointer}.remove-chip-icon:hover{color:#000000b3}.mat-form-field-wrapper{padding-bottom:8px!important}.mat-expansion-panel{border-radius:unset!important}.mat-expansion-panel-header:not([aria-disabled=true]){background:unset}.mat-expansion-panel.mat-expanded .mat-expansion-panel-header{background:#e5eefb}.mat-expansion-panel.mat-expanded .mat-expansion-panel-header .qms-line{color:var(--primary-light)!important}.access-dialog-header{display:flex;justify-content:space-between;align-items:center}.mat-chip-list-wrapper{margin:unset!important}.item-list-wrapper{height:40vh;padding:4px 4px 4px 0;overflow-y:auto}.item-list-wrapper.no-result{height:50vh;display:flex;justify-content:center;align-items:center}.item-list-wrapper .item{min-height:40px}.item-list-wrapper .item-without-checkbox{min-height:45px;display:flex;justify-content:space-between;align-items:center;padding:4px 8px;cursor:pointer;-webkit-user-select:none;user-select:none;border-radius:4px;transition:background .3s ease}.item-list-wrapper .item-without-checkbox.active{background:var(--primary-light-12-opacity)}.item-list-wrapper .item-without-checkbox:hover{background:var(--primary-light-6-opacity)}.item-list-wrapper .item-without-checkbox .mat-icon{color:var(--primary-light)!important}.confirm__button__groups .btn-add>.qms-btn-wrapper{display:flex;justify-content:center;align-items:center}.qms-dialog-content{display:grid;column-gap:8px}.qms-dialog-content.active{grid-template-columns:2fr 1fr;min-height:50vh}.qms-dialog-content .access-dialog-wraper .field-select-option .mat-form-field-wrapper{padding-bottom:16px!important}.qms-dialog-content .access-dialog-wraper .field-select-option .mat-form-field-underline{bottom:16px!important}.qms-dialog-content .result-wrapper{position:relative;width:100%;margin-left:8px}.qms-dialog-content .result-wrapper:after{position:absolute;content:\"\";top:0;left:0;background-color:#0000001f;height:100%;width:1px}.qms-dialog-content .result-selected-container{position:absolute;inset:0;overflow-y:auto;padding:0 8px}.qms-dialog-content .result-selected-container .result-header{height:51px;display:flex;align-items:center;position:sticky;top:0;z-index:10;padding:0!important;background:#fff;margin-bottom:12px}.qms-dialog-content .result-selected-container .result-header:after{position:absolute;content:\"\";bottom:0;left:0;width:100%;height:1px;background:#0000000a}.qms-dialog-content .result-selected-container .result-header .mat-mdc-card-content{height:51px;width:100%;padding-left:4px;display:flex;align-items:center;background-color:#0000000a}.option-selected-content .group-filter-person-option{display:flex;flex-direction:row-reverse;justify-content:center;align-items:center;gap:8px}span.chip-item__content_name{display:inline-block;max-width:175px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}span.chip-item-children__count{font-size:.75rem;color:#00000080;font-weight:600}.mat-mdc-slide-toggle.qms-group-options{padding:unset!important}.input-option-filter .mat-form-field-wrapper{padding-bottom:8px!important}.input-option-filter .mat-form-field-underline{bottom:8px!important}.slide-toggle{margin-bottom:8px}.confirm__button__groups.none-option{margin-top:85px}.btn-icon-clear{position:relative;padding:0 1rem}.btn-icon-clear .qms-btn-icon{margin-right:unset!important}.btn-icon-clear:after{position:absolute;content:\"\";left:0;top:0;height:100%;width:1px;background:#0000004d}.qms-paginator .mat-mdc-paginator-container .qms-total-result{margin-bottom:0;margin-right:12px;height:100%;display:flex;align-items:center}.qms-paginator .mat-mdc-paginator-container .qms-total-result span{font-weight:600;color:#000c}.qms-paginator .mat-mdc-paginator-container .qms-paginator-range-actions{margin-bottom:0;column-gap:2px}.qms-paginator .mat-mdc-paginator-container .qms-paginator-range-actions>.qms-total-result{margin-bottom:0}.qms-paginator .qms-paginator-page-size{align-items:center}.qms-paginator .mat-form-field-wrapper{padding-bottom:0!important}.mat-mdc-checkbox.checkbox-all .mat-checkbox-label{flex-direction:row!important;align-items:center!important;column-gap:4px!important}.mat-expansion-panel.qms-expansion{margin:0!important}.access-department .qms-view-search-result{height:100%!important}.access-department .qms-view-search-result .result{max-height:calc(100% - 80px)!important}.access-department .loading-container{height:calc(100% - 40px)!important}.qms-loading-container{height:45vh;overflow:hidden;display:grid;grid-template-rows:repeat(60px)}.qms-loading-container .qms-loader{position:relative;width:100%;height:100%;padding:10px 0;overflow:hidden}.qms-loading-container .qms-loader:after{content:\"\";position:absolute;width:100%;height:100%;top:0;left:0;background:linear-gradient(110deg,#e9e9e900,#e3e3e300 40%,#e3e3e380 50%,#e3e3e300 60% 100%);animation:animate-loading 1.2s linear infinite}.qms-loading-container .qms-loader__wrapper{position:relative;width:100%;height:100%}.qms-loading-container .qms-loader__wrapper .row-loader{background-color:#eee;position:absolute;left:0;width:100%;height:40px;overflow:hidden}@keyframes animate-loading{0%{transform:translate(-100%)}to{transform:translate(100%)}}.btn-close-dialog.qms-btn-icon:focus:not(:hover){background-color:unset!important;color:unset!important}.mdc-evolution-chip-set .mat-mdc-standard-chip .mdc-evolution-chip__cell--primary,.mdc-evolution-chip-set .mat-mdc-standard-chip .mdc-evolution-chip__action--primary,.mdc-evolution-chip-set .mat-mdc-standard-chip .mat-mdc-chip-action-label{overflow:hidden}\n"], dependencies: [{ kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i5.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i5.MatLabel, selector: "mat-label" }, { kind: "directive", type: i5.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "directive", type: i6.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i7.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "directive", type: i8.QMSSearchFieldDirective, selector: "mat-form-field[qms-search-field]", inputs: ["isLoading"] }, { kind: "directive", type: i8.QMSInputClearDirective, selector: "[qms-input-clear]" }, { kind: "directive", type: i9.QMSFormFieldDirective, selector: "[qms-form]" }, { kind: "directive", type: i9.QMSGroupOptionDirective, selector: "[qms-group-options]", inputs: ["label"] }, { kind: "directive", type: i9.AutocompleteOffDirective, selector: "[qms-group-options]" }, { kind: "directive", type: i10.QMSInputChipDirective, selector: "mat-chip[qms-chip]", inputs: ["selected"] }, { kind: "directive", type: i11.QMSChipBodyDirective, selector: "[qms-chip-body]" }, { kind: "directive", type: i12.QMSScrollbarDirective, selector: "[qms-scrollbar]", inputs: ["isNoneBackground"] }, { kind: "directive", type: i13.QMSToolTipRendererDirective, selector: "[qms-tool-tip]", inputs: ["showToolTip", "mode", "qms-tool-tip", "contentTemplate", "position"] }, { kind: "directive", type: i14.EllipsifyDirective, selector: "[qms-elipsify]" }, { kind: "directive", type: i15.QMSContentChangesDirective, selector: "[qmsContentChanges]", inputs: ["qmsContentChanges"] }, { kind: "component", type: i16.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "directive", type: i16.MatSelectTrigger, selector: "mat-select-trigger" }, { kind: "component", type: i17.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "component", type: i18.MatSelectSearchComponent, selector: "ngx-mat-select-search", inputs: ["placeholderLabel", "type", "closeIcon", "closeSvgIcon", "noEntriesFoundLabel", "clearSearchInput", "searching", "disableInitialFocus", "enableClearOnEscapePressed", "preventHomeEndKeyPropagation", "disableScrollToActiveOnOptionsChanged", "ariaLabel", "showToggleAllCheckbox", "toggleAllCheckboxChecked", "toggleAllCheckboxIndeterminate", "toggleAllCheckboxTooltipMessage", "toggleAllCheckboxTooltipPosition", "hideClearSearchButton", "alwaysRestoreSelectedOptionsMulti", "recreateValuesArray"], outputs: ["toggleAll"] }, { kind: "directive", type: i3.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i3.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: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i3.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i3.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i3.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i19.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i1.MatDialogClose, selector: "[mat-dialog-close], [matDialogClose]", inputs: ["aria-label", "type", "mat-dialog-close", "matDialogClose"], exportAs: ["matDialogClose"] }, { kind: "directive", type: i1.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "directive", type: i1.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "directive", type: i1.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "component", type: i20.QMSButton, selector: "button[qms-btn], button[qms-btn-lg], button[qms-btn-outlined],\n button[qms-btn-outlined-lg], button[qms-btn-text], button[qms-btn-text-lg],\n button[qms-btn-fab],button[qms-btn-fab-sm],button[qms-btn-fab-ext],\n button[qms-btn-fab-outlined],button[qms-btn-fab-outlined-sm],button[qms-btn-fab-outlined-ext]", inputs: ["disabled", "color"], exportAs: ["qmsButton"] }, { kind: "component", type: i20.QMSButtonIcon, selector: "button[qms-btn-icon]", inputs: ["disabled", "color", "active"], exportAs: ["qmsButtonIcon"] }, { kind: "component", type: i21.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }, { kind: "component", type: i22.MatChip, selector: "mat-basic-chip, [mat-basic-chip], mat-chip, [mat-chip]", inputs: ["role", "id", "aria-label", "aria-description", "value", "color", "removable", "highlighted", "disableRipple", "disabled", "tabIndex"], outputs: ["removed", "destroyed"], exportAs: ["matChip"] }, { kind: "directive", type: i22.MatChipRemove, selector: "[matChipRemove]" }, { kind: "component", type: i22.MatChipSet, selector: "mat-chip-set", inputs: ["disabled", "role", "tabIndex"] }, { kind: "component", type: i23.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }, { kind: "component", type: i24.MatExpansionPanel, selector: "mat-expansion-panel", inputs: ["hideToggle", "togglePosition"], outputs: ["afterExpand", "afterCollapse"], exportAs: ["matExpansionPanel"] }, { kind: "component", type: i24.MatExpansionPanelHeader, selector: "mat-expansion-panel-header", inputs: ["expandedHeight", "collapsedHeight", "tabIndex"] }, { kind: "component", type: i25.SelectDepartmentTreeComponent, selector: "qms-select-department-tree", inputs: ["rowsSkeleton", "height", "config", "maxWidthNode"], outputs: ["onSearchEvent", "onPagingSearchEvent", "onValueChangeEvent", "selectionNodeChangeEvent", "onCheckNodeEvent", "onExpandNodeEvent", "onLoadMoreEvent", "onCheckItemSearchEvent", "onCheckAllItemSearchEvent", "toggleIncludeChildEvent", "isPushingChildNodes"] }, { kind: "component", type: i26.MatSlideToggle, selector: "mat-slide-toggle", inputs: ["name", "id", "labelPosition", "aria-label", "aria-labelledby", "aria-describedby", "required", "color", "disabled", "disableRipple", "tabIndex", "checked", "hideIcon"], outputs: ["change", "toggleChange"], exportAs: ["matSlideToggle"] }, { kind: "directive", type: i27.QMSListLine, selector: "[qms-line]", inputs: ["size", "type", "color"] }, { kind: "directive", type: i27.QMSListExpansion, selector: "[qms-expansion]" }, { kind: "component", type: i28.QMSPaginatorComponent, selector: "qms-paginator", inputs: ["numHidden", "size", "pageSizeOptions", "pageSize", "length", "pageIndex", "overlayPanelClass"], outputs: ["page"] }], animations: [SelectAccessAnimationTrigger], encapsulation: i0.ViewEncapsulation.None }); }
|
666
|
+
], viewQueries: [{ propertyName: "tree", first: true, predicate: ["tree"], descendants: true, read: SelectDepartmentTreeComponent }, { propertyName: "pagingPerson", first: true, predicate: ["pagingPerson"], descendants: true }, { propertyName: "pagingUserGroup", first: true, predicate: ["pagingUserGroup"], descendants: true }, { propertyName: "pagingDepartment", first: true, predicate: ["pagingDepartment"], descendants: true }], ngImport: i0, template: "<h3 mat-dialog-title class=\"more-action\">\n {{dialogData.titleDialog || LANG.SELECT_ACCESS}}\n <button matDialogClose class=\"close-btn\" qms-btn-icon color=\"light\">\n <mat-icon class=\"mat-icons-outlined\">close</mat-icon>\n </button>\n</h3>\n<mat-dialog-content>\n <div [class.active]=\"optionSelect.value !== null\" class=\"qms-dialog-content\">\n <div class=\"access-dialog-wraper\">\n <mat-form-field *ngIf=\"options.length > 1\" qms-form qms-select-input class=\"field-select-option w-100 mb-2\"\n appearance=\"fill\">\n <mat-label [attr.aria-label]=\"LANG.TYPE\" qms-select-input>{{LANG.TYPE}}</mat-label>\n <mat-select (selectionChange)=\"onSelectionTypeChange($event)\" [formControl]=\"optionSelect\" placeholder=\"Select\"\n disableOptionCentering #singleSelect panelClass=\"qms-select-panel\" qms-select>\n\n <mat-option *ngFor=\"let item of options\" [value]=\"item.type\">\n {{ LANG[item.displayName] }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n <div class=\"body-dialog-container\">\n <div class=\"option-selected-content\">\n <ng-container *ngIf=\"optionSelect.value === OPTION_ENUM.PERSON\">\n <form *ngIf=\"personForm\" [formGroup]=\"personForm\">\n <div class=\"group-filter-person-option\">\n <mat-form-field *ngIf=\"optionFilterPersonDataGlobal.userGroups.length\" qms-form qms-select-input\n class=\"w-100 mb-2\" appearance=\"fill\">\n <mat-label [attr.aria-label]=\"LANG.ROLE\" qms-select-input>{{LANG.ROLE}}</mat-label>\n <mat-select panelClass=\"qms-select-panel\" qms-select formControlName=\"userGroup\"\n disableOptionCentering>\n <mat-select-trigger>\n {{personForm.controls['userGroup'].value?.name || ''}}\n </mat-select-trigger>\n <mat-option>\n <ngx-mat-select-search formControlName=\"userGroupFilter\" placeholderLabel=\"{{ LANG.ROLE }}\"\n noEntriesFoundLabel=\"\">\n </ngx-mat-select-search>\n </mat-option>\n <mat-option mode=\"dark\" class=\"opt-check-icon\"\n *ngFor=\"let item of filteredSearchTextBox.userGroup.value\" [value]=\"item\">\n <span qms-elipsify position=\"top\" mode=\"dark\" class=\"text-option-content\">{{ item.name }}</span>\n <mat-icon class=\"check-icon\"\n *ngIf=\"personForm.controls['userGroup'].value?.id == item.id\">check</mat-icon>\n </mat-option>\n </mat-select>\n <span [@inOutAnimation] (click)=\"personForm.get('userGroup').setValue('')\" class=\"pointer \" matSuffix\n aria-label=\"Clear\" *ngIf=\"personForm.get('userGroup').value && !getLoading$.value\">\n <mat-icon>close</mat-icon>\n </span>\n </mat-form-field>\n <mat-form-field *ngIf=\"optionFilterPersonDataGlobal.departments.length\"\n class=\"w-100 input-select-option mb-2\" qms-form qms-select-input>\n <mat-label [attr.aria-label]=\"LANG.DEPARTMENT_UNIT\">{{LANG.DEPARTMENT_UNIT}}</mat-label>\n <mat-select panelClass=\"qms-select-panel\" qms-select disableOptionCentering\n formControlName=\"department\">\n <mat-select-trigger>\n {{personForm.controls['department'].value?.name || ''}}\n </mat-select-trigger>\n <mat-option>\n <ngx-mat-select-search formControlName=\"departmentFilter\"\n [placeholderLabel]=\"LANG.DEPARTMENT_UNIT\" noEntriesFoundLabel=\"\">\n </ngx-mat-select-search>\n </mat-option>\n <mat-option class=\"opt-check-icon\" *ngFor=\"let item of filteredSearchTextBox.department.value\"\n [value]=\"item\">\n <span qms-elipsify mode=\"dark\" position=\"top\" class=\"text-option-content\">{{ item.name }}</span>\n <mat-icon class=\"check-icon\"\n *ngIf=\"personForm.controls['department'].value?.id == item.id\">check</mat-icon>\n </mat-option>\n </mat-select>\n <span (click)=\"setFormControlValue(['recursive','department'], [false,''])\" [@inOutAnimation]\n class=\"pointer\" matSuffix aria-label=\"Clear\"\n *ngIf=\"personForm.get('department').value && !getLoading$.value\">\n <mat-icon>close</mat-icon>\n </span>\n </mat-form-field>\n </div>\n\n <mat-slide-toggle [@inOutAnimation] *ngIf=\"personForm.controls['department'].value\"\n class=\"w-100 slide-toggle\" formControlName=\"recursive\" color=\"default\" qms-group-options>\n <span class=\"text-label\">{{LANG.INCLUDE_SUB_DEPARTMENTS}}</span>\n </mat-slide-toggle>\n\n <mat-form-field class=\"w-100 mb-2\" appearance=\"fill\" qms-form qms-search-field>\n <mat-label [attr.aria-label]=\"LANG.SEARCH_WITH_NAME\"\n qms-select-input>{{LANG.SEARCH_WITH_NAME}}</mat-label>\n <input matInput appearance=\"off\" formControlName=\"keyword\" type=\"text\" autocomplete=\"off\" />\n <button *ngIf=\"!getLoading$.value\" qms-btn-icon color=\"light\" [@inOutAnimation]\n (click)=\"onSearchPersonFreeText()\" class=\"pointer me-1\" matSuffix aria-label=\"Search\">\n <mat-icon>search</mat-icon>\n </button>\n <div matSuffix class=\"d-inline-block\">\n <mat-progress-spinner [@inOutAnimation] *ngIf=\"getLoading$.value\" mode=\"indeterminate\"\n diameter=\"20\"></mat-progress-spinner>\n </div>\n <button [@inOutAnimation] (click)=\"personForm.get('keyword').setValue('')\" matSuffix aria-label=\"Clear\"\n *ngIf=\"personForm.get('keyword').value && !getLoading$.value\">\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n <button (click)=\"onFilterPerson()\" qms-btn-outlined class=\"w-100 my-1\">\n {{LANG.FILTER}}\n </button>\n\n <div qms-scrollbar>\n <div class=\"item\">\n <mat-checkbox [@inOutAnimation]\n *ngIf=\"!getLoading$.value && personFiltered.length && !dialogData.modeSelectOnePerson\"\n [disabled]=\"isDisabledSelectAll(OPTION_ENUM.PERSON)\" #checkPerson class=\"w-100 mb-1 checkbox-all\"\n (click)=\"personFiltered.length && onCheckAll(OPTION_ENUM.PERSON,checkPerson)\"\n [checked]=\"isCheckAll(OPTION_ENUM.PERSON)\" [indeterminate]=\"isIndeterminate(OPTION_ENUM.PERSON)\"\n color=\"default\" qms-group-options>\n <span class=\"text-label header-title\">{{LANG.CHOOSE_ALL}} (<b>{{personFiltered.length}}</b>)</span>\n </mat-checkbox>\n </div>\n <mat-divider class=\"mx-auto\"></mat-divider>\n <ng-container *ngIf=\"getLoading$.value; then loading\">\n </ng-container>\n <div [@inOutAnimation] *ngIf=\"personFiltered.length && !getLoading$.value\" [@listAnimation]\n class=\"item-list-wrapper\">\n <div class=\"item mt-1\" [@inOutAnimation] *ngFor=\"let employee of personFiltered; trackBy: trackByFn\">\n <ng-container\n [ngTemplateOutlet]=\"dialogData.modeSelectOnePerson ?itemWithoutCheckboxTemplate : itemCheckboxTemplate\"\n [ngTemplateOutletContext]=\"{item: employee, type: OPTION_ENUM.PERSON}\">\n </ng-container>\n </div>\n </div>\n <div [@inOutAnimation] *ngIf=\"!personFiltered.length && !getLoading$.value\"\n class=\"item-list-wrapper no-result\">\n <ng-container *ngTemplateOutlet=\"noResult\"></ng-container>\n </div>\n <mat-divider class=\"mx-auto\"></mat-divider>\n <qms-paginator overlayPanelClass=\"select-access-paginator\" #pagingPerson\n *ngIf=\"getPerson$.value.length > 10\" [length]=\"getPerson$.value.length\" [numHidden]=\"0\"\n [pageSize]=\"getPerson$.value.pageSize\" [pageSizeOptions]=\"PAGE_SIZE_OPTION\"\n (page)='onPaginatorEvent($event, OPTION_ENUM.PERSON)' [size]='PAGINATION_SIZE.medium'>\n </qms-paginator>\n </div>\n </form>\n </ng-container>\n <ng-container *ngIf=\"optionSelect.value === OPTION_ENUM.USER_GROUP\">\n <div>\n <form (submit)=\"onFilterUserGroup()\">\n <mat-form-field class=\"w-100 mb-2\" qms-form qms-search-field>\n <mat-label aria-label=\"User group\" qms-select-input>{{ LANG.SEARCH }} {{ LANG.USER_GROUP\n }}</mat-label>\n <input [formControl]=\"userGroupForm\" matInput type=\"text\" autocomplete=\"off\" />\n <button [@inOutAnimation] *ngIf=\"!getLoading$.value\" type=\"submit\" qms-btn-icon color=\"light\"\n matSuffix>\n <mat-icon>search</mat-icon>\n </button>\n <div matSuffix class=\"d-inline-block\">\n <mat-progress-spinner [@inOutAnimation] *ngIf=\"getLoading$.value\" mode=\"indeterminate\"\n diameter=\"20\"></mat-progress-spinner>\n </div>\n <button matSuffix (click)=\"userGroupForm.setValue('')\" qms-btn-icon color=\"light\">\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n </form>\n <div qms-scrollbar>\n <div class=\"item\">\n <mat-checkbox [@inOutAnimation]\n *ngIf=\"!getLoading$.value && (userGroupFiltered.length && !dialogData.modeSelectOneUserGroup)\"\n [disabled]=\"isDisabledSelectAll(OPTION_ENUM.USER_GROUP)\" #checkUserGroup\n class=\"w-100 checkbox-all mb-1\" color=\"default\" [checked]=\"isCheckAll(OPTION_ENUM.USER_GROUP)\"\n [indeterminate]=\"isIndeterminate(OPTION_ENUM.USER_GROUP)\"\n (click)=\"userGroupFiltered.length && onCheckAll(OPTION_ENUM.USER_GROUP,checkUserGroup)\"\n qms-group-options>\n <span class=\"text-label header-title\">{{LANG.CHOOSE_ALL}}\n (<b>{{userGroupFiltered.length}}</b>)</span>\n </mat-checkbox>\n </div>\n <mat-divider class=\"mx-auto\"></mat-divider>\n <ng-container *ngIf=\"getLoading$.value;then loading\">\n </ng-container>\n <div *ngIf=\"userGroupFiltered.length && !getLoading$.value\" [@listAnimation] class=\"item-list-wrapper\">\n <div [@inOutAnimation] class=\"item mt-1\" *ngFor=\"let userGroup of userGroupFiltered\">\n <ng-container\n [ngTemplateOutlet]=\"dialogData.modeSelectOneUserGroup ? itemWithoutCheckboxTemplate : itemCheckboxTemplate\"\n [ngTemplateOutletContext]=\"{item: userGroup,type: OPTION_ENUM.USER_GROUP}\">\n </ng-container>\n </div>\n </div>\n <div [@inOutAnimation] *ngIf=\"!userGroupFiltered.length && !getLoading$.value\"\n class=\"item-list-wrapper no-result\">\n <ng-container *ngTemplateOutlet=\"noResult\"></ng-container>\n </div>\n <mat-divider class=\"mx-auto\"></mat-divider>\n <qms-paginator overlayPanelClass=\"select-access-paginator\" #pagingUserGroup class=\"my-1\"\n *ngIf=\"getUserGroup$.value.length > 10 \" [length]=\"getUserGroup$.value.length\" [numHidden]=\"0\"\n [pageSize]=\"getUserGroup$.value.pageSize\" [pageSizeOptions]=\"PAGE_SIZE_OPTION\"\n (page)='onPaginatorEvent($event, OPTION_ENUM.USER_GROUP)' [size]='PAGINATION_SIZE.medium'>\n </qms-paginator>\n </div>\n </div>\n </ng-container>\n <ng-container *ngIf=\"optionSelect.value === OPTION_ENUM.DEPARTMENT\">\n\n <ng-container *ngIf=\"!dialogData.isDepartmentPaging\">\n <qms-select-department-tree #tree [rowsSkeleton]=\"8\" [config]=\"dialogData.treeDepartmentConfig\"\n [maxWidthNode]=\"dialogData.maxWidthNode\" (onSearchEvent)=\"onSearchDepartmentEvent.emit($event)\"\n (onValueChangeEvent)=\"onResultDepartmentChange($event)\"\n (selectionNodeChangeEvent)=\"onSelectionNodeDepartmentChange($event)\"\n (onPagingSearchEvent)=\"onPaginatorEvent($event, OPTION_ENUM.DEPARTMENT)\">\n </qms-select-department-tree>\n </ng-container>\n\n <ng-container *ngIf=\"dialogData.isDepartmentPaging\">\n\n <form (ngSubmit)=\"onFilterDepartment()\">\n <mat-form-field class=\"w-100 mb-2\" qms-form qms-search-field>\n <mat-label aria-label=\"Department\" qms-select-input>{{ LANG.SEARCH }} {{LANG.DEPARTMENT}}</mat-label>\n <input [formControl]=\"departmentSearchForm\" matInput type=\"text\" autocomplete=\"off\" />\n <button [@inOutAnimation] *ngIf=\"!getLoading$.value\" type=\"submit\" qms-btn-icon color=\"light\"\n matSuffix>\n <mat-icon>search</mat-icon>\n </button>\n <div matSuffix class=\"d-inline-block\">\n <mat-progress-spinner [@inOutAnimation] *ngIf=\"getLoading$.value\" mode=\"indeterminate\"\n diameter=\"20\"></mat-progress-spinner>\n </div>\n <div [@inOutAnimation] *ngIf=\"!!departmentSearchForm.value && !getLoading$.value\" matSuffix\n qms-input-clear>\n <button (click)=\"departmentSearchForm.setValue('')\" qms-btn-icon color=\"light\">\n <mat-icon>close</mat-icon>\n </button>\n </div>\n </mat-form-field>\n </form>\n\n <div qms-scrollbar>\n <div class=\"item\">\n <mat-checkbox [@inOutAnimation] *ngIf=\"!getLoading$.value && departmentFiltered.length\"\n [disabled]=\"isDisabledSelectAll(OPTION_ENUM.DEPARTMENT)\" #checkDepartment\n class=\"w-100 checkbox-all mb-1\" color=\"default\" [checked]=\"isCheckAll(OPTION_ENUM.DEPARTMENT)\"\n [indeterminate]=\"isIndeterminate(OPTION_ENUM.DEPARTMENT)\"\n (click)=\"departmentFiltered.length && onCheckAll(OPTION_ENUM.DEPARTMENT,checkDepartment)\"\n qms-group-options>\n <span class=\"text-label header-title\">{{LANG.CHOOSE_ALL}}\n (<b>{{departmentFiltered.length}}</b>)</span>\n </mat-checkbox>\n </div>\n <mat-divider class=\"mx-auto\"></mat-divider>\n <ng-container *ngIf=\"getLoading$.value;then loading\">\n </ng-container>\n <div *ngIf=\"departmentFiltered.length && !getLoading$.value\" [@listAnimation] class=\"item-list-wrapper\">\n <div [@inOutAnimation] class=\"item mt-1\" *ngFor=\"let item of departmentFiltered\">\n <ng-container [ngTemplateOutlet]=\"itemCheckboxTemplate\"\n [ngTemplateOutletContext]=\"{item: item,type: OPTION_ENUM.DEPARTMENT}\">\n </ng-container>\n </div>\n </div>\n <div [@inOutAnimation] *ngIf=\"!departmentFiltered.length && !getLoading$.value\"\n class=\"item-list-wrapper no-result\">\n <ng-container *ngTemplateOutlet=\"noResult\"></ng-container>\n </div>\n <mat-divider class=\"mx-auto\"></mat-divider>\n <qms-paginator overlayPanelClass=\"select-access-paginator\" #pagingDepartment class=\"my-1\"\n *ngIf=\"getDepartment$.value.length > 10 \" [length]=\"getDepartment$.value.length\" [numHidden]=\"0\"\n [pageSize]=\"getDepartment$.value.pageSize\" [pageSizeOptions]=\"PAGE_SIZE_OPTION\"\n (page)='onPaginatorEvent($event, OPTION_ENUM.DEPARTMENT)' [size]='PAGINATION_SIZE.medium'>\n </qms-paginator>\n </div>\n </ng-container>\n </ng-container>\n </div>\n </div>\n </div>\n\n <div *ngIf=\"optionSelect.value !== null\" class=\"result-wrapper\">\n <div class=\"result-selected-container\">\n <div [@inOutAnimation] *ngIf=\"(options.length === 1) || (options.length > 1 && optionSelect.value !== null)\"\n class=\"header-title result-header\">\n <span>\n {{\n dialogData.titleResult || LANG.RESULTS}}\n <span *ngIf=\"options.length === 1 && hasItemSelected()\">\n ({{getResultTabActive().length}})\n </span>\n </span>\n </div>\n <div class=\"result-body\">\n <ng-container *ngIf=\"checkExistOptionSelect(OPTION_ENUM.PERSON)\"\n [ngTemplateOutlet]=\"options?.length == 1 ? listChip : viewResultCollapse\"\n [ngTemplateOutletContext]=\"{data:resultAccess.persons, type:OPTION_ENUM.PERSON, title:LANG.PERSON}\">\n </ng-container>\n <ng-container *ngIf=\"checkExistOptionSelect(OPTION_ENUM.USER_GROUP)\"\n [ngTemplateOutlet]=\"options?.length == 1 ? listChip : viewResultCollapse\"\n [ngTemplateOutletContext]=\"{data:resultAccess.userGroups, type:OPTION_ENUM.USER_GROUP, title:LANG.USER_GROUP}\">\n </ng-container>\n <ng-container *ngIf=\"checkExistOptionSelect(OPTION_ENUM.DEPARTMENT) && !dialogData.isDepartmentPaging\"\n [ngTemplateOutlet]=\"options?.length == 1 ? listChip : viewResultCollapse\"\n [ngTemplateOutletContext]=\"{data: resultAccess.departments || resultAccess.departmentsFlat, type:OPTION_ENUM.DEPARTMENT, title:LANG.DEPARTMENT}\">\n </ng-container>\n <ng-container *ngIf=\"checkExistOptionSelect(OPTION_ENUM.DEPARTMENT) && dialogData.isDepartmentPaging\"\n [ngTemplateOutlet]=\"options?.length == 1 ? listChip : viewResultCollapse\"\n [ngTemplateOutletContext]=\"{data: resultAccess.departmentsFlat, type:OPTION_ENUM.DEPARTMENT, title:LANG.DEPARTMENT}\">\n </ng-container>\n </div>\n </div>\n </div>\n </div>\n\n</mat-dialog-content>\n<mat-dialog-actions align=\"end\">\n <mat-divider class=\"w-100 mb-3\"></mat-divider>\n <button class=\"me-2\" qms-btn-text mat-dialog-close>\n {{dialogData.cancelTitle || LANG.CANCEL}}\n </button>\n <button *ngIf=\"optionSelect.value !== null\"\n [disabled]=\"!hasItemSelected() && !dialogData.treeDepartmentConfig.canAddNullResult\" class=\"btn-add\"\n [class.qms-btn-disabled]=\"!hasItemSelected() && !dialogData.treeDepartmentConfig.canAddNullResult\"\n [mat-dialog-close]=\"resultAccess\" qms-btn>\n <span>{{dialogData.confirmTitle || LANG.ADD}}</span>\n </button>\n</mat-dialog-actions>\n\n<ng-template #noResult>\n <svg width=\"89\" height=\"130\" viewBox=\"0 0 89 88\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <rect x=\"0.5\" width=\"88\" height=\"88\" rx=\"44\" fill=\"white\" />\n <rect x=\"0.5\" width=\"88\" height=\"88\" rx=\"44\" fill=\"#0163B2\" fill-opacity=\"0.12\" />\n <path\n d=\"M44.5 56.6936L58.096 64.8996L54.488 49.4336L66.5 39.0276L50.682 37.6856L44.5 23.0996L38.318 37.6856L22.5 39.0276L34.512 49.4336L30.904 64.8996L44.5 56.6936Z\"\n fill=\"#0163B3\" />\n <text x=\"10\" y=\"105\" fill=\"#0163B2\">{{LANG.NO_RESULT}}</text>\n </svg>\n</ng-template>\n<ng-template #listChip let-data=\"data\" let-type=\"type\">\n <mat-chip-set [@inOutAnimation] *ngIf=\"data?.length\" class=\"panel__item qms-scrollbar\">\n <div [@inOutAnimation_2] *ngFor=\"let item of data; let i = index\">\n <mat-chip (click)=\"onScollToNodeTreeDepartment(item)\" [@updateItemAnimation]\n *qmsContentChanges=\"item.children?.length\" class=\"chip-item-result\" qms-chip [removable]=\"true\">\n <span qms-chip-body>\n <span [qms-tool-tip]=\"generateTooltip(item)\" position=\"top\" mode=\"dark\" class=\"text-label\">\n {{item.name}}\n <span *ngIf=\"item.subName\">({{ item.subName }})</span>\n </span>\n <span class=\"chip-item-children__count ms-1\" *ngIf=\"item?.children && item?.isGroup\">\n {{item.children.length}}/{{item.childCount}}\n </span>\n </span>\n\n <button matChipRemove *ngIf=\"allowRemove(type, item)\" (click)=\"onRemoveChip(type,item, i)\">\n <mat-icon class=\"remove-chip-icon\">cancel</mat-icon>\n <mat-icon *ngIf=\"allowRemove(type, item) && dialogData.formatMsgDisable\" position=\"top\" mode=\"dark\"\n [qms-tool-tip]=\"dialogData.formatMsgDisable(item)\" class=\"remove-chip-icon\">info_i</mat-icon>\n </button>\n <button matChipRemove *ngIf=\"!allowRemove(type, item) && dialogData.formatMsgDisable\"\n (click)=\"onRemoveChip(type,item, i)\">\n <mat-icon class=\"remove-chip-icon\">cancel</mat-icon>\n <mat-icon *ngIf=\"!allowRemove(type, item) && dialogData.formatMsgDisable\" position=\"top\" mode=\"dark\"\n [qms-tool-tip]=\"dialogData.formatMsgDisable(item)\" class=\"remove-chip-icon\">info_i</mat-icon>\n </button>\n </mat-chip>\n </div>\n </mat-chip-set>\n</ng-template>\n\n\n<ng-template #viewResultCollapse let-title=\"title\" let-data=\"data\" let-type=\"type\">\n <mat-expansion-panel qms-expansion [expanded]=\"optionSelect.value === type\">\n <mat-expansion-panel-header>\n <div class=\"title-content\">\n <div class=\"qms-list-text\">\n <div qms-line color=\"default-subtitle\">{{title}}\n <span class=\"fw-600\">\n ({{data?.length}})\n </span>\n </div>\n </div>\n </div>\n </mat-expansion-panel-header>\n <ng-container [ngTemplateOutlet]=\"listChip\" [ngTemplateOutletContext]=\"{data: data,type: type}\">\n </ng-container>\n </mat-expansion-panel>\n</ng-template>\n\n<ng-template #itemWithoutCheckboxTemplate let-item=\"item\" let-type=\"type\">\n <div (click)=\"onSelectItem(type,item)\" class=\"item-without-checkbox w-100\" [class.active]=\"item.selected\">\n <div class=\"item-content\">\n <div class=\"text-label\">\n <span class=\"text-label label-item fs-14 \">\n {{ item.name }}\n </span>\n <span *ngIf=\"item.subName\" class=\"ms-1 sub-label\">({{item.subName}})</span>\n </div>\n <small *ngIf=\"item.helpText\" class=\"text-help px-1 fs-12 sub-label\">{{ item.helpText }}</small>\n </div>\n <div class=\"item-state\">\n <mat-icon [@inOutAnimation] *ngIf=\"item.selected\">check</mat-icon>\n </div>\n </div>\n</ng-template>\n\n<ng-template #itemCheckboxTemplate let-item=\"item\" let-type=\"type\">\n <mat-checkbox [disabled]=\"!allowRemove(type, item)\" [checked]=\"item.selected\" (click)=\"onSelectItem(type,item)\"\n class=\"w-100\" color=\"default\" qms-group-options>\n <div class=\"text-label\">\n <span class=\"text-label label-item fs-14 \">\n {{ item.name }}\n </span>\n <span *ngIf=\"item.subName\" class=\"ms-1 sub-label\">({{item.subName}})</span>\n </div>\n <small *ngIf=\"item.helpText\" class=\"text-help px-1 fs-12 sub-label\">{{ item.helpText }}</small>\n </mat-checkbox>\n</ng-template>\n\n<ng-template #loading>\n <div class=\"qms-loading-container\">\n <div class=\"qms-loader\" *ngFor=\"let item of arrSkeleton\">\n <div class=\"qms-loader__wrapper\">\n <div class=\"row-loader\">\n </div>\n </div>\n </div>\n </div>\n</ng-template>", styles: ["@font-face{font-family:icomoon;src:url(/assets/fonts/icomoon.eot?aghldx);src:url(/assets/fonts/icomoon.eot?aghldx#iefix) format(\"embedded-opentype\"),url(/assets/fonts/icomoon.ttf?aghldx) format(\"truetype\"),url(/assets/fonts/icomoon.woff?aghldx) format(\"woff\"),url(/assets/fonts/icomoon.svg?aghldx#icomoon) format(\"svg\");font-weight:400;font-style:normal;font-display:block}[class^=icon-],[class*=\" icon-\"]{font-family:icomoon!important;speak:never;font-style:normal;font-weight:400;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.icon-acutely-toxic .path1:before{content:\"\\e91b\";color:#e32730}.icon-acutely-toxic .path2:before{content:\"\\e922\";margin-left:-1em;color:#323232}.icon-acutely-toxic .path3:before{content:\"\\e923\";margin-left:-1em;color:#323232}.icon-acutely-toxic .path4:before{content:\"\\e924\";margin-left:-1em;color:#323232}.icon-acutely-toxic .path5:before{content:\"\\e925\";margin-left:-1em;color:#323232}.icon-acutely-toxic .path6:before{content:\"\\e926\";margin-left:-1em;color:#323232}.icon-acutely-toxic .path7:before{content:\"\\e927\";margin-left:-1em;color:#323232}.icon-acutely-toxic .path8:before{content:\"\\e928\";margin-left:-1em;color:#323232}.icon-acutely-toxic .path9:before{content:\"\\e929\";margin-left:-1em;color:#323232}.icon-acutely-toxic .path10:before{content:\"\\e92a\";margin-left:-1em;color:#323232}.icon-acutely-toxic .path11:before{content:\"\\e92b\";margin-left:-1em;color:#323232}.icon-acutely-toxic .path12:before{content:\"\\e92c\";margin-left:-1em;color:#323232}.icon-acutely-toxic .path13:before{content:\"\\e92d\";margin-left:-1em;color:#323232}.icon-acutely-toxic .path14:before{content:\"\\e92e\";margin-left:-1em;color:#323232}.icon-acutely-toxic .path15:before{content:\"\\e92f\";margin-left:-1em;color:#323232}.icon-acutely-toxic .path16:before{content:\"\\e930\";margin-left:-1em;color:#323232}.icon-acutely-toxic .path17:before{content:\"\\e931\";margin-left:-1em;color:#323232}.icon-add-column:before{content:\"\\e932\"}.icon-add-tooltip:before{content:\"\\e933\"}.icon-admin:before{content:\"\\e934\"}.icon-annual-cycle:before{content:\"\\e935\"}.icon-assignment-repete:before{content:\"\\e936\"}.icon-barrier-add:before{content:\"\\e937\"}.icon-barrier-edit:before{content:\"\\e938\"}.icon-barrier-view:before{content:\"\\e939\"}.icon-button-group:before{content:\"\\e93a\"}.icon-chemical-manager:before{content:\"\\e93b\"}.icon-chronic-health-hazard .path1:before{content:\"\\e93c\";color:#e32730}.icon-chronic-health-hazard .path2:before{content:\"\\e93d\";margin-left:-1em;color:#323232}.icon-chronic-health-hazard .path3:before{content:\"\\e93e\";margin-left:-1em;color:#323232}.icon-chronic-health-hazard .path4:before{content:\"\\e93f\";margin-left:-1em;color:#323232}.icon-chronic-health-hazard .path5:before{content:\"\\e940\";margin-left:-1em;color:#323232}.icon-chronic-health-hazard .path6:before{content:\"\\e941\";margin-left:-1em;color:#323232}.icon-chronic-health-hazard .path7:before{content:\"\\e942\";margin-left:-1em;color:#323232}.icon-chronic-health-hazard .path8:before{content:\"\\e943\";margin-left:-1em;color:#323232}.icon-chronic-health-hazard .path9:before{content:\"\\e944\";margin-left:-1em;color:#323232}.icon-chronic-health-hazard .path10:before{content:\"\\e945\";margin-left:-1em;color:#323232}.icon-chronic-health-hazard .path11:before{content:\"\\e946\";margin-left:-1em;color:#323232}.icon-chronic-health-hazard .path12:before{content:\"\\e947\";margin-left:-1em;color:#323232}.icon-chronic-health-hazard .path13:before{content:\"\\e948\";margin-left:-1em;color:#323232}.icon-chronic-health-hazard .path14:before{content:\"\\e949\";margin-left:-1em;color:#323232}.icon-chronic-health-hazard .path15:before{content:\"\\e94a\";margin-left:-1em;color:#323232}.icon-contingency:before{content:\"\\e94b\"}.icon-corrosive .path1:before{content:\"\\e94c\";color:#323232}.icon-corrosive .path2:before{content:\"\\e94d\";margin-left:-1em;color:#323232}.icon-corrosive .path3:before{content:\"\\e94e\";margin-left:-1em;color:#323232}.icon-corrosive .path4:before{content:\"\\e94f\";margin-left:-1em;color:#323232}.icon-corrosive .path5:before{content:\"\\e950\";margin-left:-1em;color:#323232}.icon-corrosive .path6:before{content:\"\\e951\";margin-left:-1em;color:#323232}.icon-corrosive .path7:before{content:\"\\e952\";margin-left:-1em;color:#323232}.icon-corrosive .path8:before{content:\"\\e953\";margin-left:-1em;color:#323232}.icon-corrosive .path9:before{content:\"\\e954\";margin-left:-1em;color:#323232}.icon-corrosive .path10:before{content:\"\\e955\";margin-left:-1em;color:#323232}.icon-corrosive .path11:before{content:\"\\e956\";margin-left:-1em;color:#323232}.icon-corrosive .path12:before{content:\"\\e957\";margin-left:-1em;color:#323232}.icon-corrosive .path13:before{content:\"\\e958\";margin-left:-1em;color:#323232}.icon-corrosive .path14:before{content:\"\\e959\";margin-left:-1em;color:#323232}.icon-corrosive .path15:before{content:\"\\e95a\";margin-left:-1em;color:#323232}.icon-corrosive .path16:before{content:\"\\e95b\";margin-left:-1em;color:#323232}.icon-corrosive .path17:before{content:\"\\e95c\";margin-left:-1em;color:#323232}.icon-corrosive .path18:before{content:\"\\e95d\";margin-left:-1em;color:#323232}.icon-corrosive .path19:before{content:\"\\e95e\";margin-left:-1em;color:#323232}.icon-corrosive .path20:before{content:\"\\e95f\";margin-left:-1em;color:#323232}.icon-corrosive .path21:before{content:\"\\e960\";margin-left:-1em;color:#e32730}.icon-dashboard:before{content:\"\\e961\"}.icon-database-sds:before{content:\"\\e962\"}.icon-description-add:before{content:\"\\e963\"}.icon-description-edit:before{content:\"\\e964\"}.icon-description-view:before{content:\"\\e965\";color:#666}.icon-document-read .path1:before{content:\"\\e966\";color:#000;opacity:.6}.icon-document-read .path2:before{content:\"\\e967\";margin-left:-1em;color:#fff}.icon-document-read .path3:before{content:\"\\e968\";margin-left:-1em;color:#000;opacity:.6}.icon-draft:before{content:\"\\e969\"}.icon-expired-off:before{content:\"\\e96a\"}.icon-expired-on:before{content:\"\\e96b\"}.icon-explosive .path1:before{content:\"\\e96c\";color:#e32730}.icon-explosive .path2:before{content:\"\\e96d\";margin-left:-1em;color:#323232}.icon-explosive .path3:before{content:\"\\e96e\";margin-left:-1em;color:#323232}.icon-explosive .path4:before{content:\"\\e96f\";margin-left:-1em;color:#323232}.icon-explosive .path5:before{content:\"\\e970\";margin-left:-1em;color:#323232}.icon-explosive .path6:before{content:\"\\e971\";margin-left:-1em;color:#323232}.icon-explosive .path7:before{content:\"\\e972\";margin-left:-1em;color:#323232}.icon-explosive .path8:before{content:\"\\e973\";margin-left:-1em;color:#323232}.icon-explosive .path9:before{content:\"\\e974\";margin-left:-1em;color:#323232}.icon-explosive .path10:before{content:\"\\e975\";margin-left:-1em;color:#323232}.icon-explosive .path11:before{content:\"\\e976\";margin-left:-1em;color:#323232}.icon-explosive .path12:before{content:\"\\e977\";margin-left:-1em;color:#323232}.icon-explosive .path13:before{content:\"\\e978\";margin-left:-1em;color:#323232}.icon-explosive .path14:before{content:\"\\e979\";margin-left:-1em;color:#323232}.icon-explosive .path15:before{content:\"\\e97a\";margin-left:-1em;color:#323232}.icon-explosive .path16:before{content:\"\\e97b\";margin-left:-1em;color:#323232}.icon-explosive .path17:before{content:\"\\e97c\";margin-left:-1em;color:#323232}.icon-explosive .path18:before{content:\"\\e97d\";margin-left:-1em;color:#323232}.icon-explosive .path19:before{content:\"\\e97e\";margin-left:-1em;color:#323232}.icon-explosive .path20:before{content:\"\\e97f\";margin-left:-1em;color:#323232}.icon-explosive .path21:before{content:\"\\e980\";margin-left:-1em;color:#323232}.icon-explosive .path22:before{content:\"\\e981\";margin-left:-1em;color:#323232}.icon-explosive .path23:before{content:\"\\e982\";margin-left:-1em;color:#323232}.icon-explosive .path24:before{content:\"\\e983\";margin-left:-1em;color:#323232}.icon-explosive .path25:before{content:\"\\e984\";margin-left:-1em;color:#323232}.icon-explosive .path26:before{content:\"\\e985\";margin-left:-1em;color:#323232}.icon-explosive .path27:before{content:\"\\e986\";margin-left:-1em;color:#323232}.icon-explosive .path28:before{content:\"\\e987\";margin-left:-1em;color:#323232}.icon-explosive .path29:before{content:\"\\e988\";margin-left:-1em;color:#323232}.icon-explosive .path30:before{content:\"\\e989\";margin-left:-1em;color:#323232}.icon-explosive .path31:before{content:\"\\e98a\";margin-left:-1em;color:#323232}.icon-explosive .path32:before{content:\"\\e98b\";margin-left:-1em;color:#323232}.icon-explosive .path33:before{content:\"\\e98c\";margin-left:-1em;color:#323232}.icon-explosive .path34:before{content:\"\\e98d\";margin-left:-1em;color:#323232}.icon-explosive .path35:before{content:\"\\e98e\";margin-left:-1em;color:#323232}.icon-explosive .path36:before{content:\"\\e98f\";margin-left:-1em;color:#323232}.icon-explosive .path37:before{content:\"\\e990\";margin-left:-1em;color:#323232}.icon-explosive .path38:before{content:\"\\e991\";margin-left:-1em;color:#323232}.icon-explosive .path39:before{content:\"\\e992\";margin-left:-1em;color:#323232}.icon-explosive .path40:before{content:\"\\e993\";margin-left:-1em;color:#323232}.icon-explosive .path41:before{content:\"\\e994\";margin-left:-1em;color:#323232}.icon-explosive .path42:before{content:\"\\e995\";margin-left:-1em;color:#323232}.icon-explosive .path43:before{content:\"\\e996\";margin-left:-1em;color:#323232}.icon-explosive .path44:before{content:\"\\e997\";margin-left:-1em;color:#323232}.icon-explosive .path45:before{content:\"\\e998\";margin-left:-1em;color:#323232}.icon-explosive .path46:before{content:\"\\e999\";margin-left:-1em;color:#323232}.icon-file-excel:before{content:\"\\e99a\"}.icon-file-pdf:before{content:\"\\e99b\"}.icon-file-pdf-verified .path1:before{content:\"\\e99c\";color:#000;opacity:.6}.icon-file-pdf-verified .path2:before{content:\"\\e99d\";margin-left:-1em;color:#fff}.icon-file-pdf-verified .path3:before{content:\"\\e99e\";margin-left:-1em;color:#000;opacity:.6}.icon-file-word:before{content:\"\\e99f\"}.icon-filter-alt:before{content:\"\\e9a0\"}.icon-flammable .path1:before{content:\"\\e9a1\";color:#323232}.icon-flammable .path2:before{content:\"\\e9a2\";margin-left:-1em;color:#323232}.icon-flammable .path3:before{content:\"\\e9a3\";margin-left:-1em;color:#e32730}.icon-gas-under-pressure .path1:before{content:\"\\e9a4\";color:#323232}.icon-gas-under-pressure .path2:before{content:\"\\e9a5\";margin-left:-1em;color:#e32730}.icon-health-hazard .path1:before{content:\"\\e9a6\";color:#323232}.icon-health-hazard .path2:before{content:\"\\e9a7\";margin-left:-1em;color:#e32730}.icon-line-break:before{content:\"\\e9a8\"}.icon-location:before{content:\"\\e9a9\"}.icon-measure-add:before{content:\"\\e9aa\"}.icon-measure-edit:before{content:\"\\e9ab\"}.icon-measure-view:before{content:\"\\e9ac\";color:#666}.icon-messages:before{content:\"\\e9ad\"}.icon-monitoring:before{content:\"\\e9ae\";color:#666}.icon-move:before{content:\"\\e9af\"}.icon-oxidizing .path1:before{content:\"\\e9b0\";color:#e32730}.icon-oxidizing .path2:before{content:\"\\e9b1\";margin-left:-1em;color:#323232}.icon-oxidizing .path3:before{content:\"\\e9b2\";margin-left:-1em;color:#323232}.icon-oxidizing .path4:before{content:\"\\e9b3\";margin-left:-1em;color:#323232}.icon-process-area-closed:before{content:\"\\e9b4\"}.icon-process-area-open:before{content:\"\\e9b5\"}.icon-process-linked .path1:before{content:\"\\e9b6\";color:#000;opacity:.6}.icon-process-linked .path2:before{content:\"\\e9b7\";margin-left:-1em;color:#666}.icon-risk:before{content:\"\\e9b8\"}.icon-search-in-file:before{content:\"\\e9b9\"}.icon-sort-ascending:before{content:\"\\e9ba\"}.icon-sort-descending:before{content:\"\\e9bb\"}.icon-subscript:before{content:\"\\e9bc\"}.icon-superscript:before{content:\"\\e9bd\"}.icon-syncronice-favorites:before{content:\"\\e9be\"}.icon-system-settings:before{content:\"\\e9bf\"}.icon-view-three-outlined:before{content:\"\\e9c0\"}.icon-workplace-safety:before{content:\"\\e9c1\"}.icon-checklist:before{content:\"\\e900\"}.icon-department-document .path1:before{content:\"\\e901\";color:#000;opacity:.6}.icon-department-document .path2:before{content:\"\\e902\";margin-left:-1em;color:#00804c}.icon-department-folder-closed .path1:before{content:\"\\e903\";color:#000;opacity:.6}.icon-department-folder-closed .path2:before{content:\"\\e904\";margin-left:-1em;color:#00804c}.icon-department-folder-open .path1:before{content:\"\\e905\";color:#000;opacity:.6}.icon-department-folder-open .path2:before{content:\"\\e906\";margin-left:-1em;color:#00804c}.icon-deviation:before{content:\"\\e907\"}.icon-dropdown-folder .path1:before{content:\"\\e908\";color:#00324e}.icon-dropdown-folder .path2:before{content:\"\\e909\";margin-left:-1em;color:#fff;opacity:.6}.icon-enterprise-document .path1:before{content:\"\\e90a\";color:#000;opacity:.6}.icon-enterprise-document .path2:before{content:\"\\e90b\";margin-left:-1em;color:#cf4714}.icon-enterprise-folder-closed .path1:before{content:\"\\e90c\";color:#000;opacity:.6}.icon-enterprise-folder-closed .path2:before{content:\"\\e90d\";margin-left:-1em;color:#cf4714}.icon-enterprise-folder-open .path1:before{content:\"\\e90e\";color:#000;opacity:.6}.icon-enterprise-folder-open .path2:before{content:\"\\e90f\";margin-left:-1em;color:#cf4714}.icon-folder-closed:before{content:\"\\e910\"}.icon-folder-open:before{content:\"\\e911\"}.icon-keyboard_arrow_down:before{content:\"\\e912\"}.icon-keyboard_arrow_up:before{content:\"\\e913\"}.icon-local-document .path1:before{content:\"\\e914\";color:#000;opacity:.6}.icon-local-document .path2:before{content:\"\\e915\";margin-left:-1em;color:#1954a9}.icon-local-folder-closed .path1:before{content:\"\\e916\";color:#000;opacity:.6}.icon-local-folder-closed .path2:before{content:\"\\e917\";margin-left:-1em;color:#1954a9}.icon-local-folder-open .path1:before{content:\"\\e918\";color:#000;opacity:.6}.icon-local-folder-open .path2:before{content:\"\\e919\";margin-left:-1em;color:#1954a9}.icon-process:before{content:\"\\e91a\"}.icon-regional-document .path1:before{content:\"\\e91c\";color:#000;opacity:.6}.icon-regional-document .path2:before{content:\"\\e91d\";margin-left:-1em;color:#662e0d}.icon-regional-folder-closed .path1:before{content:\"\\e91e\";color:#000;opacity:.6}.icon-regional-folder-closed .path2:before{content:\"\\e91f\";margin-left:-1em;color:#662e0d}.icon-regional-folder-open .path1:before{content:\"\\e920\";color:#000;opacity:.6}.icon-regional-folder-open .path2:before{content:\"\\e921\";margin-left:-1em;color:#662e0d}.select-access-paginator{max-height:150px!important}.mat-expansion-panel .mat-expansion-panel-body{padding-top:0!important}.mat-expansion-panel-header{font-weight:800!important}.mat-expansion-panel-header .title-content{font-size:12px!important}.w-100{width:100%}.h-100{height:100%}.pointer{cursor:pointer}.fw-600{font-weight:600}.label-item{font-weight:600;color:var(--ws-text-primary)}.sub-label{color:var(--ws-text-secondary)}.fs-14{font-size:14px}.fs-12{font-size:12px}.color-primary{color:var(--primary-light)!important}.header-title{font-weight:600;color:var(--ws-text-primary);font-size:16px}.mat-mdc-chip.chip-item-result{max-width:250px}.mat-mdc-chip.chip-item-result.item-department .qms-chip-body{display:flex;justify-content:center;align-items:center}.remove-chip-icon{cursor:pointer}.remove-chip-icon:hover{color:#000000b3}.mat-form-field-wrapper{padding-bottom:8px!important}.mat-expansion-panel{border-radius:unset!important}.mat-expansion-panel-header:not([aria-disabled=true]){background:unset}.mat-expansion-panel.mat-expanded .mat-expansion-panel-header{background:#e5eefb}.mat-expansion-panel.mat-expanded .mat-expansion-panel-header .qms-line{color:var(--primary-light)!important}.access-dialog-header{display:flex;justify-content:space-between;align-items:center}.mat-chip-list-wrapper{margin:unset!important}.item-list-wrapper{height:40vh;padding:4px 4px 4px 0;overflow-y:auto}.item-list-wrapper.no-result{height:50vh;display:flex;justify-content:center;align-items:center}.item-list-wrapper .item{min-height:40px}.item-list-wrapper .item-without-checkbox{min-height:45px;display:flex;justify-content:space-between;align-items:center;padding:4px 8px;cursor:pointer;-webkit-user-select:none;user-select:none;border-radius:4px;transition:background .3s ease}.item-list-wrapper .item-without-checkbox.active{background:var(--primary-light-12-opacity)}.item-list-wrapper .item-without-checkbox:hover{background:var(--primary-light-6-opacity)}.item-list-wrapper .item-without-checkbox .mat-icon{color:var(--primary-light)!important}.confirm__button__groups .btn-add>.qms-btn-wrapper{display:flex;justify-content:center;align-items:center}.qms-dialog-content{display:grid;column-gap:8px}.qms-dialog-content.active{grid-template-columns:2fr 1fr;min-height:50vh}.qms-dialog-content .access-dialog-wraper .field-select-option .mat-form-field-wrapper{padding-bottom:16px!important}.qms-dialog-content .access-dialog-wraper .field-select-option .mat-form-field-underline{bottom:16px!important}.qms-dialog-content .result-wrapper{position:relative;width:100%;margin-left:8px}.qms-dialog-content .result-wrapper:after{position:absolute;content:\"\";top:0;left:0;background-color:#0000001f;height:100%;width:1px}.qms-dialog-content .result-selected-container{position:absolute;inset:0;overflow-y:auto;padding:0 8px}.qms-dialog-content .result-selected-container .result-header{height:51px;display:flex;align-items:center;position:sticky;top:0;z-index:10;padding:0!important;background:#fff;margin-bottom:12px}.qms-dialog-content .result-selected-container .result-header:after{position:absolute;content:\"\";bottom:0;left:0;width:100%;height:1px;background:#0000000a}.qms-dialog-content .result-selected-container .result-header .mat-mdc-card-content{height:51px;width:100%;padding-left:4px;display:flex;align-items:center;background-color:#0000000a}.option-selected-content .group-filter-person-option{display:flex;flex-direction:row-reverse;justify-content:center;align-items:center;gap:8px}span.chip-item__content_name{display:inline-block;max-width:175px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}span.chip-item-children__count{font-size:.75rem;color:#00000080;font-weight:600}.mat-mdc-slide-toggle.qms-group-options{padding:unset!important}.input-option-filter .mat-form-field-wrapper{padding-bottom:8px!important}.input-option-filter .mat-form-field-underline{bottom:8px!important}.slide-toggle{margin-bottom:8px}.confirm__button__groups.none-option{margin-top:85px}.btn-icon-clear{position:relative;padding:0 1rem}.btn-icon-clear .qms-btn-icon{margin-right:unset!important}.btn-icon-clear:after{position:absolute;content:\"\";left:0;top:0;height:100%;width:1px;background:#0000004d}.qms-paginator .mat-mdc-paginator-container .qms-total-result{margin-bottom:0;margin-right:12px;height:100%;display:flex;align-items:center}.qms-paginator .mat-mdc-paginator-container .qms-total-result span{font-weight:600;color:#000c}.qms-paginator .mat-mdc-paginator-container .qms-paginator-range-actions{margin-bottom:0;column-gap:2px}.qms-paginator .mat-mdc-paginator-container .qms-paginator-range-actions>.qms-total-result{margin-bottom:0}.qms-paginator .qms-paginator-page-size{align-items:center}.qms-paginator .mat-form-field-wrapper{padding-bottom:0!important}.mat-mdc-checkbox.checkbox-all .mat-checkbox-label{flex-direction:row!important;align-items:center!important;column-gap:4px!important}.mat-expansion-panel.qms-expansion{margin:0!important}.access-department .qms-view-search-result{height:100%!important}.access-department .qms-view-search-result .result{max-height:calc(100% - 80px)!important}.access-department .loading-container{height:calc(100% - 40px)!important}.qms-loading-container{height:45vh;overflow:hidden;display:grid;grid-template-rows:repeat(60px)}.qms-loading-container .qms-loader{position:relative;width:100%;height:100%;padding:10px 0;overflow:hidden}.qms-loading-container .qms-loader:after{content:\"\";position:absolute;width:100%;height:100%;top:0;left:0;background:linear-gradient(110deg,#e9e9e900,#e3e3e300 40%,#e3e3e380 50%,#e3e3e300 60% 100%);animation:animate-loading 1.2s linear infinite}.qms-loading-container .qms-loader__wrapper{position:relative;width:100%;height:100%}.qms-loading-container .qms-loader__wrapper .row-loader{background-color:#eee;position:absolute;left:0;width:100%;height:40px;overflow:hidden}@keyframes animate-loading{0%{transform:translate(-100%)}to{transform:translate(100%)}}.btn-close-dialog.qms-btn-icon:focus:not(:hover){background-color:unset!important;color:unset!important}.mdc-evolution-chip-set .mat-mdc-standard-chip .mdc-evolution-chip__cell--primary,.mdc-evolution-chip-set .mat-mdc-standard-chip .mdc-evolution-chip__action--primary,.mdc-evolution-chip-set .mat-mdc-standard-chip .mat-mdc-chip-action-label{overflow:hidden}\n"], dependencies: [{ kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i5.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i5.MatLabel, selector: "mat-label" }, { kind: "directive", type: i5.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "directive", type: i6.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i7.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "directive", type: i8.QMSSearchFieldDirective, selector: "mat-form-field[qms-search-field]", inputs: ["isLoading"] }, { kind: "directive", type: i8.QMSInputClearDirective, selector: "[qms-input-clear]" }, { kind: "directive", type: i9.QMSFormFieldDirective, selector: "[qms-form]" }, { kind: "directive", type: i9.QMSGroupOptionDirective, selector: "[qms-group-options]", inputs: ["label"] }, { kind: "directive", type: i9.AutocompleteOffDirective, selector: "[qms-group-options]" }, { kind: "directive", type: i10.QMSInputChipDirective, selector: "mat-chip[qms-chip]", inputs: ["selected"] }, { kind: "directive", type: i11.QMSChipBodyDirective, selector: "[qms-chip-body]" }, { kind: "directive", type: i12.QMSScrollbarDirective, selector: "[qms-scrollbar]", inputs: ["isNoneBackground"] }, { kind: "directive", type: i13.QMSToolTipRendererDirective, selector: "[qms-tool-tip]", inputs: ["showToolTip", "mode", "qms-tool-tip", "contentTemplate", "position"] }, { kind: "directive", type: i14.EllipsifyDirective, selector: "[qms-elipsify]" }, { kind: "directive", type: i15.QMSContentChangesDirective, selector: "[qmsContentChanges]", inputs: ["qmsContentChanges"] }, { kind: "component", type: i16.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "directive", type: i16.MatSelectTrigger, selector: "mat-select-trigger" }, { kind: "component", type: i17.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "component", type: i18.MatSelectSearchComponent, selector: "ngx-mat-select-search", inputs: ["placeholderLabel", "type", "closeIcon", "closeSvgIcon", "noEntriesFoundLabel", "clearSearchInput", "searching", "disableInitialFocus", "enableClearOnEscapePressed", "preventHomeEndKeyPropagation", "disableScrollToActiveOnOptionsChanged", "ariaLabel", "showToggleAllCheckbox", "toggleAllCheckboxChecked", "toggleAllCheckboxIndeterminate", "toggleAllCheckboxTooltipMessage", "toggleAllCheckboxTooltipPosition", "hideClearSearchButton", "alwaysRestoreSelectedOptionsMulti", "recreateValuesArray"], outputs: ["toggleAll"] }, { kind: "directive", type: i3.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i3.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: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i3.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i3.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i3.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i19.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i1.MatDialogClose, selector: "[mat-dialog-close], [matDialogClose]", inputs: ["aria-label", "type", "mat-dialog-close", "matDialogClose"], exportAs: ["matDialogClose"] }, { kind: "directive", type: i1.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "directive", type: i1.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "directive", type: i1.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "component", type: i20.QMSButton, selector: "button[qms-btn], button[qms-btn-lg], button[qms-btn-outlined],\n button[qms-btn-outlined-lg], button[qms-btn-text], button[qms-btn-text-lg],\n button[qms-btn-fab],button[qms-btn-fab-sm],button[qms-btn-fab-ext],\n button[qms-btn-fab-outlined],button[qms-btn-fab-outlined-sm],button[qms-btn-fab-outlined-ext]", inputs: ["disabled", "color"], exportAs: ["qmsButton"] }, { kind: "component", type: i20.QMSButtonIcon, selector: "button[qms-btn-icon]", inputs: ["disabled", "color", "active"], exportAs: ["qmsButtonIcon"] }, { kind: "component", type: i21.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }, { kind: "component", type: i22.MatChip, selector: "mat-basic-chip, [mat-basic-chip], mat-chip, [mat-chip]", inputs: ["role", "id", "aria-label", "aria-description", "value", "color", "removable", "highlighted", "disableRipple", "disabled", "tabIndex"], outputs: ["removed", "destroyed"], exportAs: ["matChip"] }, { kind: "directive", type: i22.MatChipRemove, selector: "[matChipRemove]" }, { kind: "component", type: i22.MatChipSet, selector: "mat-chip-set", inputs: ["disabled", "role", "tabIndex"] }, { kind: "component", type: i23.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }, { kind: "component", type: i24.MatExpansionPanel, selector: "mat-expansion-panel", inputs: ["hideToggle", "togglePosition"], outputs: ["afterExpand", "afterCollapse"], exportAs: ["matExpansionPanel"] }, { kind: "component", type: i24.MatExpansionPanelHeader, selector: "mat-expansion-panel-header", inputs: ["expandedHeight", "collapsedHeight", "tabIndex"] }, { kind: "component", type: i25.SelectDepartmentTreeComponent, selector: "qms-select-department-tree", inputs: ["rowsSkeleton", "height", "config", "maxWidthNode"], outputs: ["onSearchEvent", "onPagingSearchEvent", "onValueChangeEvent", "selectionNodeChangeEvent", "onCheckNodeEvent", "onExpandNodeEvent", "onLoadMoreEvent", "onCheckItemSearchEvent", "onCheckAllItemSearchEvent", "toggleIncludeChildEvent", "isPushingChildNodes"] }, { kind: "component", type: i26.MatSlideToggle, selector: "mat-slide-toggle", inputs: ["name", "id", "labelPosition", "aria-label", "aria-labelledby", "aria-describedby", "required", "color", "disabled", "disableRipple", "tabIndex", "checked", "hideIcon"], outputs: ["change", "toggleChange"], exportAs: ["matSlideToggle"] }, { kind: "directive", type: i27.QMSListLine, selector: "[qms-line]", inputs: ["size", "type", "color"] }, { kind: "directive", type: i27.QMSListExpansion, selector: "[qms-expansion]" }, { kind: "component", type: i28.QMSPaginatorComponent, selector: "qms-paginator", inputs: ["numHidden", "size", "pageSizeOptions", "pageSize", "length", "pageIndex", "overlayPanelClass"], outputs: ["page"] }], animations: [SelectAccessAnimationTrigger], encapsulation: i0.ViewEncapsulation.None }); }
|
595
667
|
}
|
596
668
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: QMSSelectAccessDialogComponent, decorators: [{
|
597
669
|
type: Component,
|
@@ -602,7 +674,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
602
674
|
clickAction: 'noop'
|
603
675
|
}
|
604
676
|
}
|
605
|
-
], encapsulation: ViewEncapsulation.None, template: "<h3 mat-dialog-title class=\"more-action\">\n {{dialogData.titleDialog || LANG.SELECT_ACCESS}}\n <button matDialogClose class=\"close-btn\" qms-btn-icon color=\"light\">\n <mat-icon class=\"mat-icons-outlined\">close</mat-icon>\n </button>\n</h3>\n<mat-dialog-content>\n <div [class.active]=\"optionSelect.value !== null\" class=\"qms-dialog-content\">\n <div class=\"access-dialog-wraper\">\n <mat-form-field *ngIf=\"options.length > 1\" qms-form qms-select-input class=\"field-select-option w-100 mb-2\"\n appearance=\"fill\">\n <mat-label [attr.aria-label]=\"LANG.TYPE\" qms-select-input>{{LANG.TYPE}}</mat-label>\n <mat-select (selectionChange)=\"onSelectionTypeChange($event)\" [formControl]=\"optionSelect\" placeholder=\"Select\"\n disableOptionCentering #singleSelect panelClass=\"qms-select-panel\" qms-select>\n\n <mat-option *ngFor=\"let item of options\" [value]=\"item.type\">\n {{ LANG[item.displayName] }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n <div class=\"body-dialog-container\">\n <div class=\"option-selected-content\">\n <ng-container *ngIf=\"optionSelect.value === OPTION_ENUM.PERSON\">\n <form *ngIf=\"personForm\" [formGroup]=\"personForm\">\n <div class=\"group-filter-person-option\">\n <mat-form-field *ngIf=\"optionFilterPersonDataGlobal.userGroups.length\" qms-form qms-select-input\n class=\"w-100 mb-2\" appearance=\"fill\">\n <mat-label [attr.aria-label]=\"LANG.ROLE\" qms-select-input>{{LANG.ROLE}}</mat-label>\n <mat-select panelClass=\"qms-select-panel\" qms-select formControlName=\"userGroup\"\n disableOptionCentering>\n <mat-select-trigger>\n {{personForm.controls['userGroup'].value?.name || ''}}\n </mat-select-trigger>\n <mat-option>\n <ngx-mat-select-search formControlName=\"userGroupFilter\" placeholderLabel=\"{{ LANG.ROLE }}\"\n noEntriesFoundLabel=\"\">\n </ngx-mat-select-search>\n </mat-option>\n <mat-option mode=\"dark\" class=\"opt-check-icon\"\n *ngFor=\"let item of filteredSearchTextBox.userGroup.value\" [value]=\"item\">\n <span qms-elipsify position=\"top\" mode=\"dark\" class=\"text-option-content\">{{ item.name }}</span>\n <mat-icon class=\"check-icon\"\n *ngIf=\"personForm.controls['userGroup'].value?.id == item.id\">check</mat-icon>\n </mat-option>\n </mat-select>\n <span [@inOutAnimation] (click)=\"personForm.get('userGroup').setValue('')\" class=\"pointer \" matSuffix\n aria-label=\"Clear\" *ngIf=\"personForm.get('userGroup').value && !getLoading$.value\">\n <mat-icon>close</mat-icon>\n </span>\n </mat-form-field>\n <mat-form-field *ngIf=\"optionFilterPersonDataGlobal.departments.length\"\n class=\"w-100 input-select-option mb-2\" qms-form qms-select-input>\n <mat-label [attr.aria-label]=\"LANG.DEPARTMENT_UNIT\">{{LANG.DEPARTMENT_UNIT}}</mat-label>\n <mat-select panelClass=\"qms-select-panel\" qms-select disableOptionCentering\n formControlName=\"department\">\n <mat-select-trigger>\n {{personForm.controls['department'].value?.name || ''}}\n </mat-select-trigger>\n <mat-option>\n <ngx-mat-select-search formControlName=\"departmentFilter\"\n [placeholderLabel]=\"LANG.DEPARTMENT_UNIT\" noEntriesFoundLabel=\"\">\n </ngx-mat-select-search>\n </mat-option>\n <mat-option class=\"opt-check-icon\" *ngFor=\"let item of filteredSearchTextBox.department.value\"\n [value]=\"item\">\n <span qms-elipsify mode=\"dark\" position=\"top\" class=\"text-option-content\">{{ item.name }}</span>\n <mat-icon class=\"check-icon\"\n *ngIf=\"personForm.controls['department'].value?.id == item.id\">check</mat-icon>\n </mat-option>\n </mat-select>\n <span (click)=\"setFormControlValue(['recursive','department'], [false,''])\" [@inOutAnimation]\n class=\"pointer\" matSuffix aria-label=\"Clear\"\n *ngIf=\"personForm.get('department').value && !getLoading$.value\">\n <mat-icon>close</mat-icon>\n </span>\n </mat-form-field>\n </div>\n\n <mat-slide-toggle [@inOutAnimation] *ngIf=\"personForm.controls['department'].value\"\n class=\"w-100 slide-toggle\" formControlName=\"recursive\" color=\"default\" qms-group-options>\n <span class=\"text-label\">{{LANG.INCLUDE_SUB_DEPARTMENTS}}</span>\n </mat-slide-toggle>\n\n <mat-form-field class=\"w-100 mb-2\" appearance=\"fill\" qms-form qms-search-field>\n <mat-label [attr.aria-label]=\"LANG.SEARCH_WITH_NAME\" class=\"visually-hidden\"\n qms-select-input>{{LANG.SEARCH_WITH_NAME}}</mat-label>\n <input matInput appearance=\"off\" [placeholder]=\"LANG.SEARCH_WITH_NAME\" formControlName=\"keyword\"\n type=\"text\" autocomplete=\"off\" />\n <button *ngIf=\"!getLoading$.value\" qms-btn-icon color=\"light\" [@inOutAnimation]\n (click)=\"onSearchPersonFreeText()\" class=\"pointer me-1\" matSuffix aria-label=\"Search\">\n <mat-icon>search</mat-icon>\n </button>\n <mat-progress-spinner [@inOutAnimation] *ngIf=\"getLoading$.value\" matSuffix mode=\"indeterminate\"\n diameter=\"20\"></mat-progress-spinner>\n <span [@inOutAnimation] (click)=\"personForm.get('keyword').setValue('')\"\n class=\"pointer btn-icon-clear d-flex justify-content-center align-items-center \" matSuffix\n aria-label=\"Clear\" *ngIf=\"personForm.get('keyword').value && !getLoading$.value\">\n <button qms-btn-icon color=\"light\">\n <mat-icon>close</mat-icon>\n </button>\n </span>\n </mat-form-field>\n <button (click)=\"onFilterPerson()\" qms-btn-outlined class=\"w-100 my-1\">\n {{LANG.FILTER}}\n </button>\n\n <div qms-scrollbar>\n <div class=\"item\">\n <mat-checkbox [@inOutAnimation]\n *ngIf=\"!getLoading$.value && personFiltered.length && !dialogData.modeSelectOnePerson\"\n [disabled]=\"isDisabledSelectAll(OPTION_ENUM.PERSON)\" #checkPerson class=\"w-100 mb-1 checkbox-all\"\n (click)=\"personFiltered.length && onCheckAll(OPTION_ENUM.PERSON,checkPerson)\"\n [checked]=\"isCheckAll(OPTION_ENUM.PERSON)\" [indeterminate]=\"isIndeterminate(OPTION_ENUM.PERSON)\"\n color=\"default\" qms-group-options>\n <span class=\"text-label header-title\">{{LANG.CHOOSE_ALL}} </span>\n <span>(<b>{{personFiltered.length}}</b>)</span>\n </mat-checkbox>\n </div>\n <mat-divider class=\"mx-auto\"></mat-divider>\n <ng-container *ngIf=\"getLoading$.value; then loading\">\n </ng-container>\n <div [@inOutAnimation] *ngIf=\"personFiltered.length && !getLoading$.value\" [@listAnimation]\n class=\"item-list-wrapper\">\n <div class=\"item mt-1\" [@inOutAnimation] *ngFor=\"let employee of personFiltered; trackBy: trackByFn\">\n <ng-container\n [ngTemplateOutlet]=\"dialogData.modeSelectOnePerson ?itemWithoutCheckboxTemplate : itemCheckboxTemplate\"\n [ngTemplateOutletContext]=\"{item: employee, type: OPTION_ENUM.PERSON}\">\n </ng-container>\n </div>\n </div>\n <div [@inOutAnimation] *ngIf=\"!personFiltered.length && !getLoading$.value\"\n class=\"item-list-wrapper no-result\">\n <ng-container *ngTemplateOutlet=\"noResult\"></ng-container>\n </div>\n <mat-divider class=\"mx-auto\"></mat-divider>\n <qms-paginator overlayPanelClass=\"select-access-paginator\" #pagingPerson\n *ngIf=\"getPerson$.value.length > 10\" [length]=\"getPerson$.value.length\" [numHidden]=\"0\"\n [pageSize]=\"getPerson$.value.pageSize\" [pageSizeOptions]=\"PAGE_SIZE_OPTION\"\n (page)='onPaginatorEvent($event, OPTION_ENUM.PERSON)' [size]='PAGINATION_SIZE.medium'>\n </qms-paginator>\n </div>\n </form>\n </ng-container>\n <ng-container *ngIf=\"optionSelect.value === OPTION_ENUM.USER_GROUP\">\n <div>\n <form (submit)=\"onFilterUserGroup()\">\n <mat-form-field class=\"w-100 mb-2\" qms-form qms-search-field>\n <mat-label aria-label=\"User group\" class=\"visually-hidden\" qms-select-input>User group</mat-label>\n <input [formControl]=\"userGroupForm\" matInput type=\"text\" autocomplete=\"off\"\n placeholder=\"User group\" />\n <button [@inOutAnimation] *ngIf=\"!getLoading$.value\" type=\"submit\" qms-btn-icon color=\"light\"\n matSuffix>\n <mat-icon>search</mat-icon>\n </button>\n <mat-progress-spinner [@inOutAnimation] *ngIf=\"getLoading$.value\" matSuffix mode=\"indeterminate\"\n diameter=\"20\"></mat-progress-spinner>\n <div [@inOutAnimation] *ngIf=\"!!userGroupForm.value && !getLoading$.value\" matSuffix qms-input-clear>\n <button (click)=\"userGroupForm.setValue('')\" qms-btn-icon color=\"light\">\n <mat-icon>close</mat-icon>\n </button>\n </div>\n </mat-form-field>\n </form>\n <div qms-scrollbar>\n <div class=\"item\">\n <mat-checkbox [@inOutAnimation]\n *ngIf=\"!getLoading$.value && (userGroupFiltered.length && !dialogData.modeSelectOneUserGroup)\"\n [disabled]=\"isDisabledSelectAll(OPTION_ENUM.USER_GROUP)\" #checkUserGroup\n class=\"w-100 checkbox-all mb-1\" color=\"default\" [checked]=\"isCheckAll(OPTION_ENUM.USER_GROUP)\"\n [indeterminate]=\"isIndeterminate(OPTION_ENUM.USER_GROUP)\"\n (click)=\"userGroupFiltered.length && onCheckAll(OPTION_ENUM.USER_GROUP,checkUserGroup)\"\n qms-group-options>\n <span class=\"text-label header-title\">{{LANG.CHOOSE_ALL}}</span>\n <span>(<b>{{userGroupFiltered.length}}</b>)</span>\n </mat-checkbox>\n </div>\n <mat-divider class=\"mx-auto\"></mat-divider>\n <ng-container *ngIf=\"getLoading$.value;then loading\">\n </ng-container>\n <div *ngIf=\"userGroupFiltered.length && !getLoading$.value\" [@listAnimation] class=\"item-list-wrapper\">\n <div [@inOutAnimation] class=\"item mt-1\" *ngFor=\"let userGroup of userGroupFiltered\">\n <ng-container\n [ngTemplateOutlet]=\"dialogData.modeSelectOneUserGroup ? itemWithoutCheckboxTemplate : itemCheckboxTemplate\"\n [ngTemplateOutletContext]=\"{item: userGroup,type: OPTION_ENUM.USER_GROUP}\">\n </ng-container>\n </div>\n </div>\n <div [@inOutAnimation] *ngIf=\"!userGroupFiltered.length && !getLoading$.value\"\n class=\"item-list-wrapper no-result\">\n <ng-container *ngTemplateOutlet=\"noResult\"></ng-container>\n </div>\n <mat-divider class=\"mx-auto\"></mat-divider>\n <qms-paginator overlayPanelClass=\"select-access-paginator\" #pagingUserGroup class=\"my-1\"\n *ngIf=\"getUserGroup$.value.length > 10 \" [length]=\"getUserGroup$.value.length\" [numHidden]=\"0\"\n [pageSize]=\"getUserGroup$.value.pageSize\" [pageSizeOptions]=\"PAGE_SIZE_OPTION\"\n (page)='onPaginatorEvent($event, OPTION_ENUM.USER_GROUP)' [size]='PAGINATION_SIZE.medium'>\n </qms-paginator>\n </div>\n </div>\n </ng-container>\n <ng-container\n *ngIf=\"optionSelect.value === OPTION_ENUM.DEPARTMENT && getLoading$.value; then loading\"></ng-container>\n <ng-container *ngIf=\"optionSelect.value === OPTION_ENUM.DEPARTMENT && !getLoading$.value\"\n class=\"person-access\">\n <qms-select-department-tree #tree [rowsSkeleton]=\"8\" [config]=\"dialogData.treeDepartmentConfig\"\n [maxWidthNode]=\"dialogData.maxWidthNode\" (onSearchEvent)=\"onSearchDepartmentEvent.emit($event)\"\n (onValueChangeEvent)=\"onResultDepartmentChange($event)\"\n (selectionNodeChangeEvent)=\"onSelectionNodeDepartmentChange($event)\"\n (onPagingSearchEvent)=\"onPaginatorEvent($event, OPTION_ENUM.DEPARTMENT)\">\n </qms-select-department-tree>\n </ng-container>\n </div>\n </div>\n </div>\n\n <div *ngIf=\"optionSelect.value !== null\" class=\"result-wrapper\">\n <div class=\"result-selected-container\">\n <div [@inOutAnimation] *ngIf=\"(options.length === 1) || (options.length > 1 && optionSelect.value !== null)\"\n class=\"header-title result-header\">\n <span>\n {{\n dialogData.titleResult || LANG.RESULTS}}\n <span *ngIf=\"options.length === 1 && hasItemSelected()\">\n ({{getResultTabActive().length}})\n </span>\n </span>\n </div>\n <div class=\"result-body\">\n <ng-container *ngIf=\"checkExistOptionSelect(OPTION_ENUM.PERSON)\"\n [ngTemplateOutlet]=\"options?.length == 1 ? listChip : viewResultCollapse\"\n [ngTemplateOutletContext]=\"{data:resultAccess.persons, type:OPTION_ENUM.PERSON, title:LANG.PERSON}\">\n </ng-container>\n <ng-container *ngIf=\"checkExistOptionSelect(OPTION_ENUM.USER_GROUP)\"\n [ngTemplateOutlet]=\"options?.length == 1 ? listChip : viewResultCollapse\"\n [ngTemplateOutletContext]=\"{data:resultAccess.userGroups, type:OPTION_ENUM.USER_GROUP, title:LANG.USER_GROUP}\">\n </ng-container>\n <ng-container *ngIf=\"checkExistOptionSelect(OPTION_ENUM.DEPARTMENT)\"\n [ngTemplateOutlet]=\"options?.length == 1 ? listChip : viewResultCollapse\"\n [ngTemplateOutletContext]=\"{data: resultAccess.departments, type:OPTION_ENUM.DEPARTMENT, title:LANG.DEPARTMENT}\">\n </ng-container>\n </div>\n </div>\n </div>\n </div>\n\n</mat-dialog-content>\n<mat-dialog-actions align=\"end\">\n <mat-divider class=\"w-100 mb-3\"></mat-divider>\n <button class=\"me-2\" qms-btn-text mat-dialog-close>\n {{dialogData.cancelTitle || LANG.CANCEL}}\n </button>\n <button *ngIf=\"optionSelect.value !== null\"\n [disabled]=\"!hasItemSelected() && !dialogData.treeDepartmentConfig.canAddNullResult\" class=\"btn-add\"\n [class.qms-btn-disabled]=\"!hasItemSelected() && !dialogData.treeDepartmentConfig.canAddNullResult\"\n [mat-dialog-close]=\"resultAccess\" qms-btn>\n <span>{{dialogData.confirmTitle || LANG.ADD}}</span>\n </button>\n</mat-dialog-actions>\n\n<ng-template #noResult>\n <svg width=\"89\" height=\"130\" viewBox=\"0 0 89 88\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <rect x=\"0.5\" width=\"88\" height=\"88\" rx=\"44\" fill=\"white\" />\n <rect x=\"0.5\" width=\"88\" height=\"88\" rx=\"44\" fill=\"#0163B2\" fill-opacity=\"0.12\" />\n <path\n d=\"M44.5 56.6936L58.096 64.8996L54.488 49.4336L66.5 39.0276L50.682 37.6856L44.5 23.0996L38.318 37.6856L22.5 39.0276L34.512 49.4336L30.904 64.8996L44.5 56.6936Z\"\n fill=\"#0163B3\" />\n <text x=\"10\" y=\"105\" fill=\"#0163B2\">{{LANG.NO_RESULT}}</text>\n </svg>\n</ng-template>\n<ng-template #listChip let-data=\"data\" let-type=\"type\">\n <mat-chip-set [@inOutAnimation] *ngIf=\"data?.length\" class=\"panel__item qms-scrollbar\">\n <div [@inOutAnimation_2] *ngFor=\"let item of data; let i = index\">\n <mat-chip (click)=\"onScollToNodeTreeDepartment(item)\" [@updateItemAnimation]\n *qmsContentChanges=\"item.children?.length\" class=\"chip-item-result\" qms-chip [removable]=\"true\">\n <span qms-chip-body>\n <span [qms-tool-tip]=\"generateTooltip(item)\" position=\"top\" mode=\"dark\" class=\"text-label\">\n {{item.name}}\n <span *ngIf=\"item.subName\">({{ item.subName }})</span>\n </span>\n <span class=\"chip-item-children__count ms-1\" *ngIf=\"item?.children && item?.isGroup\">\n {{item.children.length}}/{{item.childCount}}\n </span>\n </span>\n\n <button matChipRemove *ngIf=\"allowRemove(type, item)\" (click)=\"onRemoveChip(type,item, i)\">\n <mat-icon class=\"remove-chip-icon\">cancel</mat-icon>\n <mat-icon *ngIf=\"allowRemove(type, item) && dialogData.formatMsgDisable\" position=\"top\" mode=\"dark\"\n [qms-tool-tip]=\"dialogData.formatMsgDisable(item)\" class=\"remove-chip-icon\">info_i</mat-icon>\n </button>\n <button matChipRemove *ngIf=\"!allowRemove(type, item) && dialogData.formatMsgDisable\"\n (click)=\"onRemoveChip(type,item, i)\">\n <mat-icon class=\"remove-chip-icon\">cancel</mat-icon>\n <mat-icon *ngIf=\"!allowRemove(type, item) && dialogData.formatMsgDisable\" position=\"top\" mode=\"dark\"\n [qms-tool-tip]=\"dialogData.formatMsgDisable(item)\" class=\"remove-chip-icon\">info_i</mat-icon>\n </button>\n </mat-chip>\n </div>\n </mat-chip-set>\n</ng-template>\n\n\n<ng-template #viewResultCollapse let-title=\"title\" let-data=\"data\" let-type=\"type\">\n <mat-expansion-panel qms-expansion [expanded]=\"optionSelect.value === type\">\n <mat-expansion-panel-header>\n <div class=\"title-content\">\n <div class=\"qms-list-text\">\n <div qms-line color=\"default-subtitle\">{{title}}\n <span class=\"fw-600\">\n ({{data?.length}})\n </span>\n </div>\n </div>\n </div>\n </mat-expansion-panel-header>\n <ng-container [ngTemplateOutlet]=\"listChip\" [ngTemplateOutletContext]=\"{data: data,type: type}\">\n </ng-container>\n </mat-expansion-panel>\n</ng-template>\n\n<ng-template #itemWithoutCheckboxTemplate let-item=\"item\" let-type=\"type\">\n <div (click)=\"onSelectItem(type,item)\" class=\"item-without-checkbox w-100\" [class.active]=\"item.selected\">\n <div class=\"item-content\">\n <div class=\"text-label\">\n <span class=\"text-label label-item fs-14 \">\n {{ item.name }}\n </span>\n <span *ngIf=\"item.subName\" class=\"ms-1 sub-label\">({{item.subName}})</span>\n </div>\n <small *ngIf=\"item.helpText\" class=\"text-help px-1 fs-12 sub-label\">{{ item.helpText }}</small>\n </div>\n <div class=\"item-state\">\n <mat-icon [@inOutAnimation] *ngIf=\"item.selected\">check</mat-icon>\n </div>\n </div>\n</ng-template>\n\n<ng-template #itemCheckboxTemplate let-item=\"item\" let-type=\"type\">\n <mat-checkbox [disabled]=\"!allowRemove(type, item)\" [checked]=\"item.selected\" (click)=\"onSelectItem(type,item)\"\n class=\"w-100\" color=\"default\" qms-group-options>\n <div class=\"text-label\">\n <span class=\"text-label label-item fs-14 \">\n {{ item.name }}\n </span>\n <span *ngIf=\"item.subName\" class=\"ms-1 sub-label\">({{item.subName}})</span>\n </div>\n <small *ngIf=\"item.helpText\" class=\"text-help px-1 fs-12 sub-label\">{{ item.helpText }}</small>\n </mat-checkbox>\n</ng-template>\n\n<ng-template #loading>\n <div class=\"qms-loading-container\">\n <div class=\"qms-loader\" *ngFor=\"let item of arrSkeleton\">\n <div class=\"qms-loader__wrapper\">\n <div class=\"row-loader\">\n </div>\n </div>\n </div>\n </div>\n</ng-template>", styles: ["@font-face{font-family:icomoon;src:url(/assets/fonts/icomoon.eot?aghldx);src:url(/assets/fonts/icomoon.eot?aghldx#iefix) format(\"embedded-opentype\"),url(/assets/fonts/icomoon.ttf?aghldx) format(\"truetype\"),url(/assets/fonts/icomoon.woff?aghldx) format(\"woff\"),url(/assets/fonts/icomoon.svg?aghldx#icomoon) format(\"svg\");font-weight:400;font-style:normal;font-display:block}[class^=icon-],[class*=\" icon-\"]{font-family:icomoon!important;speak:never;font-style:normal;font-weight:400;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.icon-acutely-toxic .path1:before{content:\"\\e91b\";color:#e32730}.icon-acutely-toxic .path2:before{content:\"\\e922\";margin-left:-1em;color:#323232}.icon-acutely-toxic .path3:before{content:\"\\e923\";margin-left:-1em;color:#323232}.icon-acutely-toxic .path4:before{content:\"\\e924\";margin-left:-1em;color:#323232}.icon-acutely-toxic .path5:before{content:\"\\e925\";margin-left:-1em;color:#323232}.icon-acutely-toxic .path6:before{content:\"\\e926\";margin-left:-1em;color:#323232}.icon-acutely-toxic .path7:before{content:\"\\e927\";margin-left:-1em;color:#323232}.icon-acutely-toxic .path8:before{content:\"\\e928\";margin-left:-1em;color:#323232}.icon-acutely-toxic .path9:before{content:\"\\e929\";margin-left:-1em;color:#323232}.icon-acutely-toxic .path10:before{content:\"\\e92a\";margin-left:-1em;color:#323232}.icon-acutely-toxic .path11:before{content:\"\\e92b\";margin-left:-1em;color:#323232}.icon-acutely-toxic .path12:before{content:\"\\e92c\";margin-left:-1em;color:#323232}.icon-acutely-toxic .path13:before{content:\"\\e92d\";margin-left:-1em;color:#323232}.icon-acutely-toxic .path14:before{content:\"\\e92e\";margin-left:-1em;color:#323232}.icon-acutely-toxic .path15:before{content:\"\\e92f\";margin-left:-1em;color:#323232}.icon-acutely-toxic .path16:before{content:\"\\e930\";margin-left:-1em;color:#323232}.icon-acutely-toxic .path17:before{content:\"\\e931\";margin-left:-1em;color:#323232}.icon-add-column:before{content:\"\\e932\"}.icon-add-tooltip:before{content:\"\\e933\"}.icon-admin:before{content:\"\\e934\"}.icon-annual-cycle:before{content:\"\\e935\"}.icon-assignment-repete:before{content:\"\\e936\"}.icon-barrier-add:before{content:\"\\e937\"}.icon-barrier-edit:before{content:\"\\e938\"}.icon-barrier-view:before{content:\"\\e939\"}.icon-button-group:before{content:\"\\e93a\"}.icon-chemical-manager:before{content:\"\\e93b\"}.icon-chronic-health-hazard .path1:before{content:\"\\e93c\";color:#e32730}.icon-chronic-health-hazard .path2:before{content:\"\\e93d\";margin-left:-1em;color:#323232}.icon-chronic-health-hazard .path3:before{content:\"\\e93e\";margin-left:-1em;color:#323232}.icon-chronic-health-hazard .path4:before{content:\"\\e93f\";margin-left:-1em;color:#323232}.icon-chronic-health-hazard .path5:before{content:\"\\e940\";margin-left:-1em;color:#323232}.icon-chronic-health-hazard .path6:before{content:\"\\e941\";margin-left:-1em;color:#323232}.icon-chronic-health-hazard .path7:before{content:\"\\e942\";margin-left:-1em;color:#323232}.icon-chronic-health-hazard .path8:before{content:\"\\e943\";margin-left:-1em;color:#323232}.icon-chronic-health-hazard .path9:before{content:\"\\e944\";margin-left:-1em;color:#323232}.icon-chronic-health-hazard .path10:before{content:\"\\e945\";margin-left:-1em;color:#323232}.icon-chronic-health-hazard .path11:before{content:\"\\e946\";margin-left:-1em;color:#323232}.icon-chronic-health-hazard .path12:before{content:\"\\e947\";margin-left:-1em;color:#323232}.icon-chronic-health-hazard .path13:before{content:\"\\e948\";margin-left:-1em;color:#323232}.icon-chronic-health-hazard .path14:before{content:\"\\e949\";margin-left:-1em;color:#323232}.icon-chronic-health-hazard .path15:before{content:\"\\e94a\";margin-left:-1em;color:#323232}.icon-contingency:before{content:\"\\e94b\"}.icon-corrosive .path1:before{content:\"\\e94c\";color:#323232}.icon-corrosive .path2:before{content:\"\\e94d\";margin-left:-1em;color:#323232}.icon-corrosive .path3:before{content:\"\\e94e\";margin-left:-1em;color:#323232}.icon-corrosive .path4:before{content:\"\\e94f\";margin-left:-1em;color:#323232}.icon-corrosive .path5:before{content:\"\\e950\";margin-left:-1em;color:#323232}.icon-corrosive .path6:before{content:\"\\e951\";margin-left:-1em;color:#323232}.icon-corrosive .path7:before{content:\"\\e952\";margin-left:-1em;color:#323232}.icon-corrosive .path8:before{content:\"\\e953\";margin-left:-1em;color:#323232}.icon-corrosive .path9:before{content:\"\\e954\";margin-left:-1em;color:#323232}.icon-corrosive .path10:before{content:\"\\e955\";margin-left:-1em;color:#323232}.icon-corrosive .path11:before{content:\"\\e956\";margin-left:-1em;color:#323232}.icon-corrosive .path12:before{content:\"\\e957\";margin-left:-1em;color:#323232}.icon-corrosive .path13:before{content:\"\\e958\";margin-left:-1em;color:#323232}.icon-corrosive .path14:before{content:\"\\e959\";margin-left:-1em;color:#323232}.icon-corrosive .path15:before{content:\"\\e95a\";margin-left:-1em;color:#323232}.icon-corrosive .path16:before{content:\"\\e95b\";margin-left:-1em;color:#323232}.icon-corrosive .path17:before{content:\"\\e95c\";margin-left:-1em;color:#323232}.icon-corrosive .path18:before{content:\"\\e95d\";margin-left:-1em;color:#323232}.icon-corrosive .path19:before{content:\"\\e95e\";margin-left:-1em;color:#323232}.icon-corrosive .path20:before{content:\"\\e95f\";margin-left:-1em;color:#323232}.icon-corrosive .path21:before{content:\"\\e960\";margin-left:-1em;color:#e32730}.icon-dashboard:before{content:\"\\e961\"}.icon-database-sds:before{content:\"\\e962\"}.icon-description-add:before{content:\"\\e963\"}.icon-description-edit:before{content:\"\\e964\"}.icon-description-view:before{content:\"\\e965\";color:#666}.icon-document-read .path1:before{content:\"\\e966\";color:#000;opacity:.6}.icon-document-read .path2:before{content:\"\\e967\";margin-left:-1em;color:#fff}.icon-document-read .path3:before{content:\"\\e968\";margin-left:-1em;color:#000;opacity:.6}.icon-draft:before{content:\"\\e969\"}.icon-expired-off:before{content:\"\\e96a\"}.icon-expired-on:before{content:\"\\e96b\"}.icon-explosive .path1:before{content:\"\\e96c\";color:#e32730}.icon-explosive .path2:before{content:\"\\e96d\";margin-left:-1em;color:#323232}.icon-explosive .path3:before{content:\"\\e96e\";margin-left:-1em;color:#323232}.icon-explosive .path4:before{content:\"\\e96f\";margin-left:-1em;color:#323232}.icon-explosive .path5:before{content:\"\\e970\";margin-left:-1em;color:#323232}.icon-explosive .path6:before{content:\"\\e971\";margin-left:-1em;color:#323232}.icon-explosive .path7:before{content:\"\\e972\";margin-left:-1em;color:#323232}.icon-explosive .path8:before{content:\"\\e973\";margin-left:-1em;color:#323232}.icon-explosive .path9:before{content:\"\\e974\";margin-left:-1em;color:#323232}.icon-explosive .path10:before{content:\"\\e975\";margin-left:-1em;color:#323232}.icon-explosive .path11:before{content:\"\\e976\";margin-left:-1em;color:#323232}.icon-explosive .path12:before{content:\"\\e977\";margin-left:-1em;color:#323232}.icon-explosive .path13:before{content:\"\\e978\";margin-left:-1em;color:#323232}.icon-explosive .path14:before{content:\"\\e979\";margin-left:-1em;color:#323232}.icon-explosive .path15:before{content:\"\\e97a\";margin-left:-1em;color:#323232}.icon-explosive .path16:before{content:\"\\e97b\";margin-left:-1em;color:#323232}.icon-explosive .path17:before{content:\"\\e97c\";margin-left:-1em;color:#323232}.icon-explosive .path18:before{content:\"\\e97d\";margin-left:-1em;color:#323232}.icon-explosive .path19:before{content:\"\\e97e\";margin-left:-1em;color:#323232}.icon-explosive .path20:before{content:\"\\e97f\";margin-left:-1em;color:#323232}.icon-explosive .path21:before{content:\"\\e980\";margin-left:-1em;color:#323232}.icon-explosive .path22:before{content:\"\\e981\";margin-left:-1em;color:#323232}.icon-explosive .path23:before{content:\"\\e982\";margin-left:-1em;color:#323232}.icon-explosive .path24:before{content:\"\\e983\";margin-left:-1em;color:#323232}.icon-explosive .path25:before{content:\"\\e984\";margin-left:-1em;color:#323232}.icon-explosive .path26:before{content:\"\\e985\";margin-left:-1em;color:#323232}.icon-explosive .path27:before{content:\"\\e986\";margin-left:-1em;color:#323232}.icon-explosive .path28:before{content:\"\\e987\";margin-left:-1em;color:#323232}.icon-explosive .path29:before{content:\"\\e988\";margin-left:-1em;color:#323232}.icon-explosive .path30:before{content:\"\\e989\";margin-left:-1em;color:#323232}.icon-explosive .path31:before{content:\"\\e98a\";margin-left:-1em;color:#323232}.icon-explosive .path32:before{content:\"\\e98b\";margin-left:-1em;color:#323232}.icon-explosive .path33:before{content:\"\\e98c\";margin-left:-1em;color:#323232}.icon-explosive .path34:before{content:\"\\e98d\";margin-left:-1em;color:#323232}.icon-explosive .path35:before{content:\"\\e98e\";margin-left:-1em;color:#323232}.icon-explosive .path36:before{content:\"\\e98f\";margin-left:-1em;color:#323232}.icon-explosive .path37:before{content:\"\\e990\";margin-left:-1em;color:#323232}.icon-explosive .path38:before{content:\"\\e991\";margin-left:-1em;color:#323232}.icon-explosive .path39:before{content:\"\\e992\";margin-left:-1em;color:#323232}.icon-explosive .path40:before{content:\"\\e993\";margin-left:-1em;color:#323232}.icon-explosive .path41:before{content:\"\\e994\";margin-left:-1em;color:#323232}.icon-explosive .path42:before{content:\"\\e995\";margin-left:-1em;color:#323232}.icon-explosive .path43:before{content:\"\\e996\";margin-left:-1em;color:#323232}.icon-explosive .path44:before{content:\"\\e997\";margin-left:-1em;color:#323232}.icon-explosive .path45:before{content:\"\\e998\";margin-left:-1em;color:#323232}.icon-explosive .path46:before{content:\"\\e999\";margin-left:-1em;color:#323232}.icon-file-excel:before{content:\"\\e99a\"}.icon-file-pdf:before{content:\"\\e99b\"}.icon-file-pdf-verified .path1:before{content:\"\\e99c\";color:#000;opacity:.6}.icon-file-pdf-verified .path2:before{content:\"\\e99d\";margin-left:-1em;color:#fff}.icon-file-pdf-verified .path3:before{content:\"\\e99e\";margin-left:-1em;color:#000;opacity:.6}.icon-file-word:before{content:\"\\e99f\"}.icon-filter-alt:before{content:\"\\e9a0\"}.icon-flammable .path1:before{content:\"\\e9a1\";color:#323232}.icon-flammable .path2:before{content:\"\\e9a2\";margin-left:-1em;color:#323232}.icon-flammable .path3:before{content:\"\\e9a3\";margin-left:-1em;color:#e32730}.icon-gas-under-pressure .path1:before{content:\"\\e9a4\";color:#323232}.icon-gas-under-pressure .path2:before{content:\"\\e9a5\";margin-left:-1em;color:#e32730}.icon-health-hazard .path1:before{content:\"\\e9a6\";color:#323232}.icon-health-hazard .path2:before{content:\"\\e9a7\";margin-left:-1em;color:#e32730}.icon-line-break:before{content:\"\\e9a8\"}.icon-location:before{content:\"\\e9a9\"}.icon-measure-add:before{content:\"\\e9aa\"}.icon-measure-edit:before{content:\"\\e9ab\"}.icon-measure-view:before{content:\"\\e9ac\";color:#666}.icon-messages:before{content:\"\\e9ad\"}.icon-monitoring:before{content:\"\\e9ae\";color:#666}.icon-move:before{content:\"\\e9af\"}.icon-oxidizing .path1:before{content:\"\\e9b0\";color:#e32730}.icon-oxidizing .path2:before{content:\"\\e9b1\";margin-left:-1em;color:#323232}.icon-oxidizing .path3:before{content:\"\\e9b2\";margin-left:-1em;color:#323232}.icon-oxidizing .path4:before{content:\"\\e9b3\";margin-left:-1em;color:#323232}.icon-process-area-closed:before{content:\"\\e9b4\"}.icon-process-area-open:before{content:\"\\e9b5\"}.icon-process-linked .path1:before{content:\"\\e9b6\";color:#000;opacity:.6}.icon-process-linked .path2:before{content:\"\\e9b7\";margin-left:-1em;color:#666}.icon-risk:before{content:\"\\e9b8\"}.icon-search-in-file:before{content:\"\\e9b9\"}.icon-sort-ascending:before{content:\"\\e9ba\"}.icon-sort-descending:before{content:\"\\e9bb\"}.icon-subscript:before{content:\"\\e9bc\"}.icon-superscript:before{content:\"\\e9bd\"}.icon-syncronice-favorites:before{content:\"\\e9be\"}.icon-system-settings:before{content:\"\\e9bf\"}.icon-view-three-outlined:before{content:\"\\e9c0\"}.icon-workplace-safety:before{content:\"\\e9c1\"}.icon-checklist:before{content:\"\\e900\"}.icon-department-document .path1:before{content:\"\\e901\";color:#000;opacity:.6}.icon-department-document .path2:before{content:\"\\e902\";margin-left:-1em;color:#00804c}.icon-department-folder-closed .path1:before{content:\"\\e903\";color:#000;opacity:.6}.icon-department-folder-closed .path2:before{content:\"\\e904\";margin-left:-1em;color:#00804c}.icon-department-folder-open .path1:before{content:\"\\e905\";color:#000;opacity:.6}.icon-department-folder-open .path2:before{content:\"\\e906\";margin-left:-1em;color:#00804c}.icon-deviation:before{content:\"\\e907\"}.icon-dropdown-folder .path1:before{content:\"\\e908\";color:#00324e}.icon-dropdown-folder .path2:before{content:\"\\e909\";margin-left:-1em;color:#fff;opacity:.6}.icon-enterprise-document .path1:before{content:\"\\e90a\";color:#000;opacity:.6}.icon-enterprise-document .path2:before{content:\"\\e90b\";margin-left:-1em;color:#cf4714}.icon-enterprise-folder-closed .path1:before{content:\"\\e90c\";color:#000;opacity:.6}.icon-enterprise-folder-closed .path2:before{content:\"\\e90d\";margin-left:-1em;color:#cf4714}.icon-enterprise-folder-open .path1:before{content:\"\\e90e\";color:#000;opacity:.6}.icon-enterprise-folder-open .path2:before{content:\"\\e90f\";margin-left:-1em;color:#cf4714}.icon-folder-closed:before{content:\"\\e910\"}.icon-folder-open:before{content:\"\\e911\"}.icon-keyboard_arrow_down:before{content:\"\\e912\"}.icon-keyboard_arrow_up:before{content:\"\\e913\"}.icon-local-document .path1:before{content:\"\\e914\";color:#000;opacity:.6}.icon-local-document .path2:before{content:\"\\e915\";margin-left:-1em;color:#1954a9}.icon-local-folder-closed .path1:before{content:\"\\e916\";color:#000;opacity:.6}.icon-local-folder-closed .path2:before{content:\"\\e917\";margin-left:-1em;color:#1954a9}.icon-local-folder-open .path1:before{content:\"\\e918\";color:#000;opacity:.6}.icon-local-folder-open .path2:before{content:\"\\e919\";margin-left:-1em;color:#1954a9}.icon-process:before{content:\"\\e91a\"}.icon-regional-document .path1:before{content:\"\\e91c\";color:#000;opacity:.6}.icon-regional-document .path2:before{content:\"\\e91d\";margin-left:-1em;color:#662e0d}.icon-regional-folder-closed .path1:before{content:\"\\e91e\";color:#000;opacity:.6}.icon-regional-folder-closed .path2:before{content:\"\\e91f\";margin-left:-1em;color:#662e0d}.icon-regional-folder-open .path1:before{content:\"\\e920\";color:#000;opacity:.6}.icon-regional-folder-open .path2:before{content:\"\\e921\";margin-left:-1em;color:#662e0d}.select-access-paginator{max-height:150px!important}.mat-expansion-panel .mat-expansion-panel-body{padding-top:0!important}.mat-expansion-panel-header{font-weight:800!important}.mat-expansion-panel-header .title-content{font-size:12px!important}.w-100{width:100%}.h-100{height:100%}.pointer{cursor:pointer}.fw-600{font-weight:600}.label-item{font-weight:600;color:var(--ws-text-primary)}.sub-label{color:var(--ws-text-secondary)}.fs-14{font-size:14px}.fs-12{font-size:12px}.color-primary{color:var(--primary-light)!important}.header-title{font-weight:600;color:var(--ws-text-primary);font-size:16px}.mat-mdc-chip.chip-item-result{max-width:250px}.mat-mdc-chip.chip-item-result.item-department .qms-chip-body{display:flex;justify-content:center;align-items:center}.remove-chip-icon{cursor:pointer}.remove-chip-icon:hover{color:#000000b3}.mat-form-field-wrapper{padding-bottom:8px!important}.mat-expansion-panel{border-radius:unset!important}.mat-expansion-panel-header:not([aria-disabled=true]){background:unset}.mat-expansion-panel.mat-expanded .mat-expansion-panel-header{background:#e5eefb}.mat-expansion-panel.mat-expanded .mat-expansion-panel-header .qms-line{color:var(--primary-light)!important}.access-dialog-header{display:flex;justify-content:space-between;align-items:center}.mat-chip-list-wrapper{margin:unset!important}.item-list-wrapper{height:40vh;padding:4px 4px 4px 0;overflow-y:auto}.item-list-wrapper.no-result{height:50vh;display:flex;justify-content:center;align-items:center}.item-list-wrapper .item{min-height:40px}.item-list-wrapper .item-without-checkbox{min-height:45px;display:flex;justify-content:space-between;align-items:center;padding:4px 8px;cursor:pointer;-webkit-user-select:none;user-select:none;border-radius:4px;transition:background .3s ease}.item-list-wrapper .item-without-checkbox.active{background:var(--primary-light-12-opacity)}.item-list-wrapper .item-without-checkbox:hover{background:var(--primary-light-6-opacity)}.item-list-wrapper .item-without-checkbox .mat-icon{color:var(--primary-light)!important}.confirm__button__groups .btn-add>.qms-btn-wrapper{display:flex;justify-content:center;align-items:center}.qms-dialog-content{display:grid;column-gap:8px}.qms-dialog-content.active{grid-template-columns:2fr 1fr;min-height:50vh}.qms-dialog-content .access-dialog-wraper .field-select-option .mat-form-field-wrapper{padding-bottom:16px!important}.qms-dialog-content .access-dialog-wraper .field-select-option .mat-form-field-underline{bottom:16px!important}.qms-dialog-content .result-wrapper{position:relative;width:100%;margin-left:8px}.qms-dialog-content .result-wrapper:after{position:absolute;content:\"\";top:0;left:0;background-color:#0000001f;height:100%;width:1px}.qms-dialog-content .result-selected-container{position:absolute;inset:0;overflow-y:auto;padding:0 8px}.qms-dialog-content .result-selected-container .result-header{height:51px;display:flex;align-items:center;position:sticky;top:0;z-index:10;padding:0!important;background:#fff;margin-bottom:12px}.qms-dialog-content .result-selected-container .result-header:after{position:absolute;content:\"\";bottom:0;left:0;width:100%;height:1px;background:#0000000a}.qms-dialog-content .result-selected-container .result-header .mat-mdc-card-content{height:51px;width:100%;padding-left:4px;display:flex;align-items:center;background-color:#0000000a}.option-selected-content .group-filter-person-option{display:flex;flex-direction:row-reverse;justify-content:center;align-items:center;gap:8px}span.chip-item__content_name{display:inline-block;max-width:175px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}span.chip-item-children__count{font-size:.75rem;color:#00000080;font-weight:600}.mat-mdc-slide-toggle.qms-group-options{padding:unset!important}.input-option-filter .mat-form-field-wrapper{padding-bottom:8px!important}.input-option-filter .mat-form-field-underline{bottom:8px!important}.slide-toggle{margin-bottom:8px}.confirm__button__groups.none-option{margin-top:85px}.btn-icon-clear{position:relative;padding:0 1rem}.btn-icon-clear .qms-btn-icon{margin-right:unset!important}.btn-icon-clear:after{position:absolute;content:\"\";left:0;top:0;height:100%;width:1px;background:#0000004d}.qms-paginator .mat-mdc-paginator-container .qms-total-result{margin-bottom:0;margin-right:12px;height:100%;display:flex;align-items:center}.qms-paginator .mat-mdc-paginator-container .qms-total-result span{font-weight:600;color:#000c}.qms-paginator .mat-mdc-paginator-container .qms-paginator-range-actions{margin-bottom:0;column-gap:2px}.qms-paginator .mat-mdc-paginator-container .qms-paginator-range-actions>.qms-total-result{margin-bottom:0}.qms-paginator .qms-paginator-page-size{align-items:center}.qms-paginator .mat-form-field-wrapper{padding-bottom:0!important}.mat-mdc-checkbox.checkbox-all .mat-checkbox-label{flex-direction:row!important;align-items:center!important;column-gap:4px!important}.mat-expansion-panel.qms-expansion{margin:0!important}.access-department .qms-view-search-result{height:100%!important}.access-department .qms-view-search-result .result{max-height:calc(100% - 80px)!important}.access-department .loading-container{height:calc(100% - 40px)!important}.qms-loading-container{height:45vh;overflow:hidden;display:grid;grid-template-rows:repeat(60px)}.qms-loading-container .qms-loader{position:relative;width:100%;height:100%;padding:10px 0;overflow:hidden}.qms-loading-container .qms-loader:after{content:\"\";position:absolute;width:100%;height:100%;top:0;left:0;background:linear-gradient(110deg,#e9e9e900,#e3e3e300 40%,#e3e3e380 50%,#e3e3e300 60% 100%);animation:animate-loading 1.2s linear infinite}.qms-loading-container .qms-loader__wrapper{position:relative;width:100%;height:100%}.qms-loading-container .qms-loader__wrapper .row-loader{background-color:#eee;position:absolute;left:0;width:100%;height:40px;overflow:hidden}@keyframes animate-loading{0%{transform:translate(-100%)}to{transform:translate(100%)}}.btn-close-dialog.qms-btn-icon:focus:not(:hover){background-color:unset!important;color:unset!important}.mdc-evolution-chip-set .mat-mdc-standard-chip .mdc-evolution-chip__cell--primary,.mdc-evolution-chip-set .mat-mdc-standard-chip .mdc-evolution-chip__action--primary,.mdc-evolution-chip-set .mat-mdc-standard-chip .mat-mdc-chip-action-label{overflow:hidden}\n"] }]
|
677
|
+
], encapsulation: ViewEncapsulation.None, template: "<h3 mat-dialog-title class=\"more-action\">\n {{dialogData.titleDialog || LANG.SELECT_ACCESS}}\n <button matDialogClose class=\"close-btn\" qms-btn-icon color=\"light\">\n <mat-icon class=\"mat-icons-outlined\">close</mat-icon>\n </button>\n</h3>\n<mat-dialog-content>\n <div [class.active]=\"optionSelect.value !== null\" class=\"qms-dialog-content\">\n <div class=\"access-dialog-wraper\">\n <mat-form-field *ngIf=\"options.length > 1\" qms-form qms-select-input class=\"field-select-option w-100 mb-2\"\n appearance=\"fill\">\n <mat-label [attr.aria-label]=\"LANG.TYPE\" qms-select-input>{{LANG.TYPE}}</mat-label>\n <mat-select (selectionChange)=\"onSelectionTypeChange($event)\" [formControl]=\"optionSelect\" placeholder=\"Select\"\n disableOptionCentering #singleSelect panelClass=\"qms-select-panel\" qms-select>\n\n <mat-option *ngFor=\"let item of options\" [value]=\"item.type\">\n {{ LANG[item.displayName] }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n <div class=\"body-dialog-container\">\n <div class=\"option-selected-content\">\n <ng-container *ngIf=\"optionSelect.value === OPTION_ENUM.PERSON\">\n <form *ngIf=\"personForm\" [formGroup]=\"personForm\">\n <div class=\"group-filter-person-option\">\n <mat-form-field *ngIf=\"optionFilterPersonDataGlobal.userGroups.length\" qms-form qms-select-input\n class=\"w-100 mb-2\" appearance=\"fill\">\n <mat-label [attr.aria-label]=\"LANG.ROLE\" qms-select-input>{{LANG.ROLE}}</mat-label>\n <mat-select panelClass=\"qms-select-panel\" qms-select formControlName=\"userGroup\"\n disableOptionCentering>\n <mat-select-trigger>\n {{personForm.controls['userGroup'].value?.name || ''}}\n </mat-select-trigger>\n <mat-option>\n <ngx-mat-select-search formControlName=\"userGroupFilter\" placeholderLabel=\"{{ LANG.ROLE }}\"\n noEntriesFoundLabel=\"\">\n </ngx-mat-select-search>\n </mat-option>\n <mat-option mode=\"dark\" class=\"opt-check-icon\"\n *ngFor=\"let item of filteredSearchTextBox.userGroup.value\" [value]=\"item\">\n <span qms-elipsify position=\"top\" mode=\"dark\" class=\"text-option-content\">{{ item.name }}</span>\n <mat-icon class=\"check-icon\"\n *ngIf=\"personForm.controls['userGroup'].value?.id == item.id\">check</mat-icon>\n </mat-option>\n </mat-select>\n <span [@inOutAnimation] (click)=\"personForm.get('userGroup').setValue('')\" class=\"pointer \" matSuffix\n aria-label=\"Clear\" *ngIf=\"personForm.get('userGroup').value && !getLoading$.value\">\n <mat-icon>close</mat-icon>\n </span>\n </mat-form-field>\n <mat-form-field *ngIf=\"optionFilterPersonDataGlobal.departments.length\"\n class=\"w-100 input-select-option mb-2\" qms-form qms-select-input>\n <mat-label [attr.aria-label]=\"LANG.DEPARTMENT_UNIT\">{{LANG.DEPARTMENT_UNIT}}</mat-label>\n <mat-select panelClass=\"qms-select-panel\" qms-select disableOptionCentering\n formControlName=\"department\">\n <mat-select-trigger>\n {{personForm.controls['department'].value?.name || ''}}\n </mat-select-trigger>\n <mat-option>\n <ngx-mat-select-search formControlName=\"departmentFilter\"\n [placeholderLabel]=\"LANG.DEPARTMENT_UNIT\" noEntriesFoundLabel=\"\">\n </ngx-mat-select-search>\n </mat-option>\n <mat-option class=\"opt-check-icon\" *ngFor=\"let item of filteredSearchTextBox.department.value\"\n [value]=\"item\">\n <span qms-elipsify mode=\"dark\" position=\"top\" class=\"text-option-content\">{{ item.name }}</span>\n <mat-icon class=\"check-icon\"\n *ngIf=\"personForm.controls['department'].value?.id == item.id\">check</mat-icon>\n </mat-option>\n </mat-select>\n <span (click)=\"setFormControlValue(['recursive','department'], [false,''])\" [@inOutAnimation]\n class=\"pointer\" matSuffix aria-label=\"Clear\"\n *ngIf=\"personForm.get('department').value && !getLoading$.value\">\n <mat-icon>close</mat-icon>\n </span>\n </mat-form-field>\n </div>\n\n <mat-slide-toggle [@inOutAnimation] *ngIf=\"personForm.controls['department'].value\"\n class=\"w-100 slide-toggle\" formControlName=\"recursive\" color=\"default\" qms-group-options>\n <span class=\"text-label\">{{LANG.INCLUDE_SUB_DEPARTMENTS}}</span>\n </mat-slide-toggle>\n\n <mat-form-field class=\"w-100 mb-2\" appearance=\"fill\" qms-form qms-search-field>\n <mat-label [attr.aria-label]=\"LANG.SEARCH_WITH_NAME\"\n qms-select-input>{{LANG.SEARCH_WITH_NAME}}</mat-label>\n <input matInput appearance=\"off\" formControlName=\"keyword\" type=\"text\" autocomplete=\"off\" />\n <button *ngIf=\"!getLoading$.value\" qms-btn-icon color=\"light\" [@inOutAnimation]\n (click)=\"onSearchPersonFreeText()\" class=\"pointer me-1\" matSuffix aria-label=\"Search\">\n <mat-icon>search</mat-icon>\n </button>\n <div matSuffix class=\"d-inline-block\">\n <mat-progress-spinner [@inOutAnimation] *ngIf=\"getLoading$.value\" mode=\"indeterminate\"\n diameter=\"20\"></mat-progress-spinner>\n </div>\n <button [@inOutAnimation] (click)=\"personForm.get('keyword').setValue('')\" matSuffix aria-label=\"Clear\"\n *ngIf=\"personForm.get('keyword').value && !getLoading$.value\">\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n <button (click)=\"onFilterPerson()\" qms-btn-outlined class=\"w-100 my-1\">\n {{LANG.FILTER}}\n </button>\n\n <div qms-scrollbar>\n <div class=\"item\">\n <mat-checkbox [@inOutAnimation]\n *ngIf=\"!getLoading$.value && personFiltered.length && !dialogData.modeSelectOnePerson\"\n [disabled]=\"isDisabledSelectAll(OPTION_ENUM.PERSON)\" #checkPerson class=\"w-100 mb-1 checkbox-all\"\n (click)=\"personFiltered.length && onCheckAll(OPTION_ENUM.PERSON,checkPerson)\"\n [checked]=\"isCheckAll(OPTION_ENUM.PERSON)\" [indeterminate]=\"isIndeterminate(OPTION_ENUM.PERSON)\"\n color=\"default\" qms-group-options>\n <span class=\"text-label header-title\">{{LANG.CHOOSE_ALL}} (<b>{{personFiltered.length}}</b>)</span>\n </mat-checkbox>\n </div>\n <mat-divider class=\"mx-auto\"></mat-divider>\n <ng-container *ngIf=\"getLoading$.value; then loading\">\n </ng-container>\n <div [@inOutAnimation] *ngIf=\"personFiltered.length && !getLoading$.value\" [@listAnimation]\n class=\"item-list-wrapper\">\n <div class=\"item mt-1\" [@inOutAnimation] *ngFor=\"let employee of personFiltered; trackBy: trackByFn\">\n <ng-container\n [ngTemplateOutlet]=\"dialogData.modeSelectOnePerson ?itemWithoutCheckboxTemplate : itemCheckboxTemplate\"\n [ngTemplateOutletContext]=\"{item: employee, type: OPTION_ENUM.PERSON}\">\n </ng-container>\n </div>\n </div>\n <div [@inOutAnimation] *ngIf=\"!personFiltered.length && !getLoading$.value\"\n class=\"item-list-wrapper no-result\">\n <ng-container *ngTemplateOutlet=\"noResult\"></ng-container>\n </div>\n <mat-divider class=\"mx-auto\"></mat-divider>\n <qms-paginator overlayPanelClass=\"select-access-paginator\" #pagingPerson\n *ngIf=\"getPerson$.value.length > 10\" [length]=\"getPerson$.value.length\" [numHidden]=\"0\"\n [pageSize]=\"getPerson$.value.pageSize\" [pageSizeOptions]=\"PAGE_SIZE_OPTION\"\n (page)='onPaginatorEvent($event, OPTION_ENUM.PERSON)' [size]='PAGINATION_SIZE.medium'>\n </qms-paginator>\n </div>\n </form>\n </ng-container>\n <ng-container *ngIf=\"optionSelect.value === OPTION_ENUM.USER_GROUP\">\n <div>\n <form (submit)=\"onFilterUserGroup()\">\n <mat-form-field class=\"w-100 mb-2\" qms-form qms-search-field>\n <mat-label aria-label=\"User group\" qms-select-input>{{ LANG.SEARCH }} {{ LANG.USER_GROUP\n }}</mat-label>\n <input [formControl]=\"userGroupForm\" matInput type=\"text\" autocomplete=\"off\" />\n <button [@inOutAnimation] *ngIf=\"!getLoading$.value\" type=\"submit\" qms-btn-icon color=\"light\"\n matSuffix>\n <mat-icon>search</mat-icon>\n </button>\n <div matSuffix class=\"d-inline-block\">\n <mat-progress-spinner [@inOutAnimation] *ngIf=\"getLoading$.value\" mode=\"indeterminate\"\n diameter=\"20\"></mat-progress-spinner>\n </div>\n <button matSuffix (click)=\"userGroupForm.setValue('')\" qms-btn-icon color=\"light\">\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n </form>\n <div qms-scrollbar>\n <div class=\"item\">\n <mat-checkbox [@inOutAnimation]\n *ngIf=\"!getLoading$.value && (userGroupFiltered.length && !dialogData.modeSelectOneUserGroup)\"\n [disabled]=\"isDisabledSelectAll(OPTION_ENUM.USER_GROUP)\" #checkUserGroup\n class=\"w-100 checkbox-all mb-1\" color=\"default\" [checked]=\"isCheckAll(OPTION_ENUM.USER_GROUP)\"\n [indeterminate]=\"isIndeterminate(OPTION_ENUM.USER_GROUP)\"\n (click)=\"userGroupFiltered.length && onCheckAll(OPTION_ENUM.USER_GROUP,checkUserGroup)\"\n qms-group-options>\n <span class=\"text-label header-title\">{{LANG.CHOOSE_ALL}}\n (<b>{{userGroupFiltered.length}}</b>)</span>\n </mat-checkbox>\n </div>\n <mat-divider class=\"mx-auto\"></mat-divider>\n <ng-container *ngIf=\"getLoading$.value;then loading\">\n </ng-container>\n <div *ngIf=\"userGroupFiltered.length && !getLoading$.value\" [@listAnimation] class=\"item-list-wrapper\">\n <div [@inOutAnimation] class=\"item mt-1\" *ngFor=\"let userGroup of userGroupFiltered\">\n <ng-container\n [ngTemplateOutlet]=\"dialogData.modeSelectOneUserGroup ? itemWithoutCheckboxTemplate : itemCheckboxTemplate\"\n [ngTemplateOutletContext]=\"{item: userGroup,type: OPTION_ENUM.USER_GROUP}\">\n </ng-container>\n </div>\n </div>\n <div [@inOutAnimation] *ngIf=\"!userGroupFiltered.length && !getLoading$.value\"\n class=\"item-list-wrapper no-result\">\n <ng-container *ngTemplateOutlet=\"noResult\"></ng-container>\n </div>\n <mat-divider class=\"mx-auto\"></mat-divider>\n <qms-paginator overlayPanelClass=\"select-access-paginator\" #pagingUserGroup class=\"my-1\"\n *ngIf=\"getUserGroup$.value.length > 10 \" [length]=\"getUserGroup$.value.length\" [numHidden]=\"0\"\n [pageSize]=\"getUserGroup$.value.pageSize\" [pageSizeOptions]=\"PAGE_SIZE_OPTION\"\n (page)='onPaginatorEvent($event, OPTION_ENUM.USER_GROUP)' [size]='PAGINATION_SIZE.medium'>\n </qms-paginator>\n </div>\n </div>\n </ng-container>\n <ng-container *ngIf=\"optionSelect.value === OPTION_ENUM.DEPARTMENT\">\n\n <ng-container *ngIf=\"!dialogData.isDepartmentPaging\">\n <qms-select-department-tree #tree [rowsSkeleton]=\"8\" [config]=\"dialogData.treeDepartmentConfig\"\n [maxWidthNode]=\"dialogData.maxWidthNode\" (onSearchEvent)=\"onSearchDepartmentEvent.emit($event)\"\n (onValueChangeEvent)=\"onResultDepartmentChange($event)\"\n (selectionNodeChangeEvent)=\"onSelectionNodeDepartmentChange($event)\"\n (onPagingSearchEvent)=\"onPaginatorEvent($event, OPTION_ENUM.DEPARTMENT)\">\n </qms-select-department-tree>\n </ng-container>\n\n <ng-container *ngIf=\"dialogData.isDepartmentPaging\">\n\n <form (ngSubmit)=\"onFilterDepartment()\">\n <mat-form-field class=\"w-100 mb-2\" qms-form qms-search-field>\n <mat-label aria-label=\"Department\" qms-select-input>{{ LANG.SEARCH }} {{LANG.DEPARTMENT}}</mat-label>\n <input [formControl]=\"departmentSearchForm\" matInput type=\"text\" autocomplete=\"off\" />\n <button [@inOutAnimation] *ngIf=\"!getLoading$.value\" type=\"submit\" qms-btn-icon color=\"light\"\n matSuffix>\n <mat-icon>search</mat-icon>\n </button>\n <div matSuffix class=\"d-inline-block\">\n <mat-progress-spinner [@inOutAnimation] *ngIf=\"getLoading$.value\" mode=\"indeterminate\"\n diameter=\"20\"></mat-progress-spinner>\n </div>\n <div [@inOutAnimation] *ngIf=\"!!departmentSearchForm.value && !getLoading$.value\" matSuffix\n qms-input-clear>\n <button (click)=\"departmentSearchForm.setValue('')\" qms-btn-icon color=\"light\">\n <mat-icon>close</mat-icon>\n </button>\n </div>\n </mat-form-field>\n </form>\n\n <div qms-scrollbar>\n <div class=\"item\">\n <mat-checkbox [@inOutAnimation] *ngIf=\"!getLoading$.value && departmentFiltered.length\"\n [disabled]=\"isDisabledSelectAll(OPTION_ENUM.DEPARTMENT)\" #checkDepartment\n class=\"w-100 checkbox-all mb-1\" color=\"default\" [checked]=\"isCheckAll(OPTION_ENUM.DEPARTMENT)\"\n [indeterminate]=\"isIndeterminate(OPTION_ENUM.DEPARTMENT)\"\n (click)=\"departmentFiltered.length && onCheckAll(OPTION_ENUM.DEPARTMENT,checkDepartment)\"\n qms-group-options>\n <span class=\"text-label header-title\">{{LANG.CHOOSE_ALL}}\n (<b>{{departmentFiltered.length}}</b>)</span>\n </mat-checkbox>\n </div>\n <mat-divider class=\"mx-auto\"></mat-divider>\n <ng-container *ngIf=\"getLoading$.value;then loading\">\n </ng-container>\n <div *ngIf=\"departmentFiltered.length && !getLoading$.value\" [@listAnimation] class=\"item-list-wrapper\">\n <div [@inOutAnimation] class=\"item mt-1\" *ngFor=\"let item of departmentFiltered\">\n <ng-container [ngTemplateOutlet]=\"itemCheckboxTemplate\"\n [ngTemplateOutletContext]=\"{item: item,type: OPTION_ENUM.DEPARTMENT}\">\n </ng-container>\n </div>\n </div>\n <div [@inOutAnimation] *ngIf=\"!departmentFiltered.length && !getLoading$.value\"\n class=\"item-list-wrapper no-result\">\n <ng-container *ngTemplateOutlet=\"noResult\"></ng-container>\n </div>\n <mat-divider class=\"mx-auto\"></mat-divider>\n <qms-paginator overlayPanelClass=\"select-access-paginator\" #pagingDepartment class=\"my-1\"\n *ngIf=\"getDepartment$.value.length > 10 \" [length]=\"getDepartment$.value.length\" [numHidden]=\"0\"\n [pageSize]=\"getDepartment$.value.pageSize\" [pageSizeOptions]=\"PAGE_SIZE_OPTION\"\n (page)='onPaginatorEvent($event, OPTION_ENUM.DEPARTMENT)' [size]='PAGINATION_SIZE.medium'>\n </qms-paginator>\n </div>\n </ng-container>\n </ng-container>\n </div>\n </div>\n </div>\n\n <div *ngIf=\"optionSelect.value !== null\" class=\"result-wrapper\">\n <div class=\"result-selected-container\">\n <div [@inOutAnimation] *ngIf=\"(options.length === 1) || (options.length > 1 && optionSelect.value !== null)\"\n class=\"header-title result-header\">\n <span>\n {{\n dialogData.titleResult || LANG.RESULTS}}\n <span *ngIf=\"options.length === 1 && hasItemSelected()\">\n ({{getResultTabActive().length}})\n </span>\n </span>\n </div>\n <div class=\"result-body\">\n <ng-container *ngIf=\"checkExistOptionSelect(OPTION_ENUM.PERSON)\"\n [ngTemplateOutlet]=\"options?.length == 1 ? listChip : viewResultCollapse\"\n [ngTemplateOutletContext]=\"{data:resultAccess.persons, type:OPTION_ENUM.PERSON, title:LANG.PERSON}\">\n </ng-container>\n <ng-container *ngIf=\"checkExistOptionSelect(OPTION_ENUM.USER_GROUP)\"\n [ngTemplateOutlet]=\"options?.length == 1 ? listChip : viewResultCollapse\"\n [ngTemplateOutletContext]=\"{data:resultAccess.userGroups, type:OPTION_ENUM.USER_GROUP, title:LANG.USER_GROUP}\">\n </ng-container>\n <ng-container *ngIf=\"checkExistOptionSelect(OPTION_ENUM.DEPARTMENT) && !dialogData.isDepartmentPaging\"\n [ngTemplateOutlet]=\"options?.length == 1 ? listChip : viewResultCollapse\"\n [ngTemplateOutletContext]=\"{data: resultAccess.departments || resultAccess.departmentsFlat, type:OPTION_ENUM.DEPARTMENT, title:LANG.DEPARTMENT}\">\n </ng-container>\n <ng-container *ngIf=\"checkExistOptionSelect(OPTION_ENUM.DEPARTMENT) && dialogData.isDepartmentPaging\"\n [ngTemplateOutlet]=\"options?.length == 1 ? listChip : viewResultCollapse\"\n [ngTemplateOutletContext]=\"{data: resultAccess.departmentsFlat, type:OPTION_ENUM.DEPARTMENT, title:LANG.DEPARTMENT}\">\n </ng-container>\n </div>\n </div>\n </div>\n </div>\n\n</mat-dialog-content>\n<mat-dialog-actions align=\"end\">\n <mat-divider class=\"w-100 mb-3\"></mat-divider>\n <button class=\"me-2\" qms-btn-text mat-dialog-close>\n {{dialogData.cancelTitle || LANG.CANCEL}}\n </button>\n <button *ngIf=\"optionSelect.value !== null\"\n [disabled]=\"!hasItemSelected() && !dialogData.treeDepartmentConfig.canAddNullResult\" class=\"btn-add\"\n [class.qms-btn-disabled]=\"!hasItemSelected() && !dialogData.treeDepartmentConfig.canAddNullResult\"\n [mat-dialog-close]=\"resultAccess\" qms-btn>\n <span>{{dialogData.confirmTitle || LANG.ADD}}</span>\n </button>\n</mat-dialog-actions>\n\n<ng-template #noResult>\n <svg width=\"89\" height=\"130\" viewBox=\"0 0 89 88\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <rect x=\"0.5\" width=\"88\" height=\"88\" rx=\"44\" fill=\"white\" />\n <rect x=\"0.5\" width=\"88\" height=\"88\" rx=\"44\" fill=\"#0163B2\" fill-opacity=\"0.12\" />\n <path\n d=\"M44.5 56.6936L58.096 64.8996L54.488 49.4336L66.5 39.0276L50.682 37.6856L44.5 23.0996L38.318 37.6856L22.5 39.0276L34.512 49.4336L30.904 64.8996L44.5 56.6936Z\"\n fill=\"#0163B3\" />\n <text x=\"10\" y=\"105\" fill=\"#0163B2\">{{LANG.NO_RESULT}}</text>\n </svg>\n</ng-template>\n<ng-template #listChip let-data=\"data\" let-type=\"type\">\n <mat-chip-set [@inOutAnimation] *ngIf=\"data?.length\" class=\"panel__item qms-scrollbar\">\n <div [@inOutAnimation_2] *ngFor=\"let item of data; let i = index\">\n <mat-chip (click)=\"onScollToNodeTreeDepartment(item)\" [@updateItemAnimation]\n *qmsContentChanges=\"item.children?.length\" class=\"chip-item-result\" qms-chip [removable]=\"true\">\n <span qms-chip-body>\n <span [qms-tool-tip]=\"generateTooltip(item)\" position=\"top\" mode=\"dark\" class=\"text-label\">\n {{item.name}}\n <span *ngIf=\"item.subName\">({{ item.subName }})</span>\n </span>\n <span class=\"chip-item-children__count ms-1\" *ngIf=\"item?.children && item?.isGroup\">\n {{item.children.length}}/{{item.childCount}}\n </span>\n </span>\n\n <button matChipRemove *ngIf=\"allowRemove(type, item)\" (click)=\"onRemoveChip(type,item, i)\">\n <mat-icon class=\"remove-chip-icon\">cancel</mat-icon>\n <mat-icon *ngIf=\"allowRemove(type, item) && dialogData.formatMsgDisable\" position=\"top\" mode=\"dark\"\n [qms-tool-tip]=\"dialogData.formatMsgDisable(item)\" class=\"remove-chip-icon\">info_i</mat-icon>\n </button>\n <button matChipRemove *ngIf=\"!allowRemove(type, item) && dialogData.formatMsgDisable\"\n (click)=\"onRemoveChip(type,item, i)\">\n <mat-icon class=\"remove-chip-icon\">cancel</mat-icon>\n <mat-icon *ngIf=\"!allowRemove(type, item) && dialogData.formatMsgDisable\" position=\"top\" mode=\"dark\"\n [qms-tool-tip]=\"dialogData.formatMsgDisable(item)\" class=\"remove-chip-icon\">info_i</mat-icon>\n </button>\n </mat-chip>\n </div>\n </mat-chip-set>\n</ng-template>\n\n\n<ng-template #viewResultCollapse let-title=\"title\" let-data=\"data\" let-type=\"type\">\n <mat-expansion-panel qms-expansion [expanded]=\"optionSelect.value === type\">\n <mat-expansion-panel-header>\n <div class=\"title-content\">\n <div class=\"qms-list-text\">\n <div qms-line color=\"default-subtitle\">{{title}}\n <span class=\"fw-600\">\n ({{data?.length}})\n </span>\n </div>\n </div>\n </div>\n </mat-expansion-panel-header>\n <ng-container [ngTemplateOutlet]=\"listChip\" [ngTemplateOutletContext]=\"{data: data,type: type}\">\n </ng-container>\n </mat-expansion-panel>\n</ng-template>\n\n<ng-template #itemWithoutCheckboxTemplate let-item=\"item\" let-type=\"type\">\n <div (click)=\"onSelectItem(type,item)\" class=\"item-without-checkbox w-100\" [class.active]=\"item.selected\">\n <div class=\"item-content\">\n <div class=\"text-label\">\n <span class=\"text-label label-item fs-14 \">\n {{ item.name }}\n </span>\n <span *ngIf=\"item.subName\" class=\"ms-1 sub-label\">({{item.subName}})</span>\n </div>\n <small *ngIf=\"item.helpText\" class=\"text-help px-1 fs-12 sub-label\">{{ item.helpText }}</small>\n </div>\n <div class=\"item-state\">\n <mat-icon [@inOutAnimation] *ngIf=\"item.selected\">check</mat-icon>\n </div>\n </div>\n</ng-template>\n\n<ng-template #itemCheckboxTemplate let-item=\"item\" let-type=\"type\">\n <mat-checkbox [disabled]=\"!allowRemove(type, item)\" [checked]=\"item.selected\" (click)=\"onSelectItem(type,item)\"\n class=\"w-100\" color=\"default\" qms-group-options>\n <div class=\"text-label\">\n <span class=\"text-label label-item fs-14 \">\n {{ item.name }}\n </span>\n <span *ngIf=\"item.subName\" class=\"ms-1 sub-label\">({{item.subName}})</span>\n </div>\n <small *ngIf=\"item.helpText\" class=\"text-help px-1 fs-12 sub-label\">{{ item.helpText }}</small>\n </mat-checkbox>\n</ng-template>\n\n<ng-template #loading>\n <div class=\"qms-loading-container\">\n <div class=\"qms-loader\" *ngFor=\"let item of arrSkeleton\">\n <div class=\"qms-loader__wrapper\">\n <div class=\"row-loader\">\n </div>\n </div>\n </div>\n </div>\n</ng-template>", styles: ["@font-face{font-family:icomoon;src:url(/assets/fonts/icomoon.eot?aghldx);src:url(/assets/fonts/icomoon.eot?aghldx#iefix) format(\"embedded-opentype\"),url(/assets/fonts/icomoon.ttf?aghldx) format(\"truetype\"),url(/assets/fonts/icomoon.woff?aghldx) format(\"woff\"),url(/assets/fonts/icomoon.svg?aghldx#icomoon) format(\"svg\");font-weight:400;font-style:normal;font-display:block}[class^=icon-],[class*=\" icon-\"]{font-family:icomoon!important;speak:never;font-style:normal;font-weight:400;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.icon-acutely-toxic .path1:before{content:\"\\e91b\";color:#e32730}.icon-acutely-toxic .path2:before{content:\"\\e922\";margin-left:-1em;color:#323232}.icon-acutely-toxic .path3:before{content:\"\\e923\";margin-left:-1em;color:#323232}.icon-acutely-toxic .path4:before{content:\"\\e924\";margin-left:-1em;color:#323232}.icon-acutely-toxic .path5:before{content:\"\\e925\";margin-left:-1em;color:#323232}.icon-acutely-toxic .path6:before{content:\"\\e926\";margin-left:-1em;color:#323232}.icon-acutely-toxic .path7:before{content:\"\\e927\";margin-left:-1em;color:#323232}.icon-acutely-toxic .path8:before{content:\"\\e928\";margin-left:-1em;color:#323232}.icon-acutely-toxic .path9:before{content:\"\\e929\";margin-left:-1em;color:#323232}.icon-acutely-toxic .path10:before{content:\"\\e92a\";margin-left:-1em;color:#323232}.icon-acutely-toxic .path11:before{content:\"\\e92b\";margin-left:-1em;color:#323232}.icon-acutely-toxic .path12:before{content:\"\\e92c\";margin-left:-1em;color:#323232}.icon-acutely-toxic .path13:before{content:\"\\e92d\";margin-left:-1em;color:#323232}.icon-acutely-toxic .path14:before{content:\"\\e92e\";margin-left:-1em;color:#323232}.icon-acutely-toxic .path15:before{content:\"\\e92f\";margin-left:-1em;color:#323232}.icon-acutely-toxic .path16:before{content:\"\\e930\";margin-left:-1em;color:#323232}.icon-acutely-toxic .path17:before{content:\"\\e931\";margin-left:-1em;color:#323232}.icon-add-column:before{content:\"\\e932\"}.icon-add-tooltip:before{content:\"\\e933\"}.icon-admin:before{content:\"\\e934\"}.icon-annual-cycle:before{content:\"\\e935\"}.icon-assignment-repete:before{content:\"\\e936\"}.icon-barrier-add:before{content:\"\\e937\"}.icon-barrier-edit:before{content:\"\\e938\"}.icon-barrier-view:before{content:\"\\e939\"}.icon-button-group:before{content:\"\\e93a\"}.icon-chemical-manager:before{content:\"\\e93b\"}.icon-chronic-health-hazard .path1:before{content:\"\\e93c\";color:#e32730}.icon-chronic-health-hazard .path2:before{content:\"\\e93d\";margin-left:-1em;color:#323232}.icon-chronic-health-hazard .path3:before{content:\"\\e93e\";margin-left:-1em;color:#323232}.icon-chronic-health-hazard .path4:before{content:\"\\e93f\";margin-left:-1em;color:#323232}.icon-chronic-health-hazard .path5:before{content:\"\\e940\";margin-left:-1em;color:#323232}.icon-chronic-health-hazard .path6:before{content:\"\\e941\";margin-left:-1em;color:#323232}.icon-chronic-health-hazard .path7:before{content:\"\\e942\";margin-left:-1em;color:#323232}.icon-chronic-health-hazard .path8:before{content:\"\\e943\";margin-left:-1em;color:#323232}.icon-chronic-health-hazard .path9:before{content:\"\\e944\";margin-left:-1em;color:#323232}.icon-chronic-health-hazard .path10:before{content:\"\\e945\";margin-left:-1em;color:#323232}.icon-chronic-health-hazard .path11:before{content:\"\\e946\";margin-left:-1em;color:#323232}.icon-chronic-health-hazard .path12:before{content:\"\\e947\";margin-left:-1em;color:#323232}.icon-chronic-health-hazard .path13:before{content:\"\\e948\";margin-left:-1em;color:#323232}.icon-chronic-health-hazard .path14:before{content:\"\\e949\";margin-left:-1em;color:#323232}.icon-chronic-health-hazard .path15:before{content:\"\\e94a\";margin-left:-1em;color:#323232}.icon-contingency:before{content:\"\\e94b\"}.icon-corrosive .path1:before{content:\"\\e94c\";color:#323232}.icon-corrosive .path2:before{content:\"\\e94d\";margin-left:-1em;color:#323232}.icon-corrosive .path3:before{content:\"\\e94e\";margin-left:-1em;color:#323232}.icon-corrosive .path4:before{content:\"\\e94f\";margin-left:-1em;color:#323232}.icon-corrosive .path5:before{content:\"\\e950\";margin-left:-1em;color:#323232}.icon-corrosive .path6:before{content:\"\\e951\";margin-left:-1em;color:#323232}.icon-corrosive .path7:before{content:\"\\e952\";margin-left:-1em;color:#323232}.icon-corrosive .path8:before{content:\"\\e953\";margin-left:-1em;color:#323232}.icon-corrosive .path9:before{content:\"\\e954\";margin-left:-1em;color:#323232}.icon-corrosive .path10:before{content:\"\\e955\";margin-left:-1em;color:#323232}.icon-corrosive .path11:before{content:\"\\e956\";margin-left:-1em;color:#323232}.icon-corrosive .path12:before{content:\"\\e957\";margin-left:-1em;color:#323232}.icon-corrosive .path13:before{content:\"\\e958\";margin-left:-1em;color:#323232}.icon-corrosive .path14:before{content:\"\\e959\";margin-left:-1em;color:#323232}.icon-corrosive .path15:before{content:\"\\e95a\";margin-left:-1em;color:#323232}.icon-corrosive .path16:before{content:\"\\e95b\";margin-left:-1em;color:#323232}.icon-corrosive .path17:before{content:\"\\e95c\";margin-left:-1em;color:#323232}.icon-corrosive .path18:before{content:\"\\e95d\";margin-left:-1em;color:#323232}.icon-corrosive .path19:before{content:\"\\e95e\";margin-left:-1em;color:#323232}.icon-corrosive .path20:before{content:\"\\e95f\";margin-left:-1em;color:#323232}.icon-corrosive .path21:before{content:\"\\e960\";margin-left:-1em;color:#e32730}.icon-dashboard:before{content:\"\\e961\"}.icon-database-sds:before{content:\"\\e962\"}.icon-description-add:before{content:\"\\e963\"}.icon-description-edit:before{content:\"\\e964\"}.icon-description-view:before{content:\"\\e965\";color:#666}.icon-document-read .path1:before{content:\"\\e966\";color:#000;opacity:.6}.icon-document-read .path2:before{content:\"\\e967\";margin-left:-1em;color:#fff}.icon-document-read .path3:before{content:\"\\e968\";margin-left:-1em;color:#000;opacity:.6}.icon-draft:before{content:\"\\e969\"}.icon-expired-off:before{content:\"\\e96a\"}.icon-expired-on:before{content:\"\\e96b\"}.icon-explosive .path1:before{content:\"\\e96c\";color:#e32730}.icon-explosive .path2:before{content:\"\\e96d\";margin-left:-1em;color:#323232}.icon-explosive .path3:before{content:\"\\e96e\";margin-left:-1em;color:#323232}.icon-explosive .path4:before{content:\"\\e96f\";margin-left:-1em;color:#323232}.icon-explosive .path5:before{content:\"\\e970\";margin-left:-1em;color:#323232}.icon-explosive .path6:before{content:\"\\e971\";margin-left:-1em;color:#323232}.icon-explosive .path7:before{content:\"\\e972\";margin-left:-1em;color:#323232}.icon-explosive .path8:before{content:\"\\e973\";margin-left:-1em;color:#323232}.icon-explosive .path9:before{content:\"\\e974\";margin-left:-1em;color:#323232}.icon-explosive .path10:before{content:\"\\e975\";margin-left:-1em;color:#323232}.icon-explosive .path11:before{content:\"\\e976\";margin-left:-1em;color:#323232}.icon-explosive .path12:before{content:\"\\e977\";margin-left:-1em;color:#323232}.icon-explosive .path13:before{content:\"\\e978\";margin-left:-1em;color:#323232}.icon-explosive .path14:before{content:\"\\e979\";margin-left:-1em;color:#323232}.icon-explosive .path15:before{content:\"\\e97a\";margin-left:-1em;color:#323232}.icon-explosive .path16:before{content:\"\\e97b\";margin-left:-1em;color:#323232}.icon-explosive .path17:before{content:\"\\e97c\";margin-left:-1em;color:#323232}.icon-explosive .path18:before{content:\"\\e97d\";margin-left:-1em;color:#323232}.icon-explosive .path19:before{content:\"\\e97e\";margin-left:-1em;color:#323232}.icon-explosive .path20:before{content:\"\\e97f\";margin-left:-1em;color:#323232}.icon-explosive .path21:before{content:\"\\e980\";margin-left:-1em;color:#323232}.icon-explosive .path22:before{content:\"\\e981\";margin-left:-1em;color:#323232}.icon-explosive .path23:before{content:\"\\e982\";margin-left:-1em;color:#323232}.icon-explosive .path24:before{content:\"\\e983\";margin-left:-1em;color:#323232}.icon-explosive .path25:before{content:\"\\e984\";margin-left:-1em;color:#323232}.icon-explosive .path26:before{content:\"\\e985\";margin-left:-1em;color:#323232}.icon-explosive .path27:before{content:\"\\e986\";margin-left:-1em;color:#323232}.icon-explosive .path28:before{content:\"\\e987\";margin-left:-1em;color:#323232}.icon-explosive .path29:before{content:\"\\e988\";margin-left:-1em;color:#323232}.icon-explosive .path30:before{content:\"\\e989\";margin-left:-1em;color:#323232}.icon-explosive .path31:before{content:\"\\e98a\";margin-left:-1em;color:#323232}.icon-explosive .path32:before{content:\"\\e98b\";margin-left:-1em;color:#323232}.icon-explosive .path33:before{content:\"\\e98c\";margin-left:-1em;color:#323232}.icon-explosive .path34:before{content:\"\\e98d\";margin-left:-1em;color:#323232}.icon-explosive .path35:before{content:\"\\e98e\";margin-left:-1em;color:#323232}.icon-explosive .path36:before{content:\"\\e98f\";margin-left:-1em;color:#323232}.icon-explosive .path37:before{content:\"\\e990\";margin-left:-1em;color:#323232}.icon-explosive .path38:before{content:\"\\e991\";margin-left:-1em;color:#323232}.icon-explosive .path39:before{content:\"\\e992\";margin-left:-1em;color:#323232}.icon-explosive .path40:before{content:\"\\e993\";margin-left:-1em;color:#323232}.icon-explosive .path41:before{content:\"\\e994\";margin-left:-1em;color:#323232}.icon-explosive .path42:before{content:\"\\e995\";margin-left:-1em;color:#323232}.icon-explosive .path43:before{content:\"\\e996\";margin-left:-1em;color:#323232}.icon-explosive .path44:before{content:\"\\e997\";margin-left:-1em;color:#323232}.icon-explosive .path45:before{content:\"\\e998\";margin-left:-1em;color:#323232}.icon-explosive .path46:before{content:\"\\e999\";margin-left:-1em;color:#323232}.icon-file-excel:before{content:\"\\e99a\"}.icon-file-pdf:before{content:\"\\e99b\"}.icon-file-pdf-verified .path1:before{content:\"\\e99c\";color:#000;opacity:.6}.icon-file-pdf-verified .path2:before{content:\"\\e99d\";margin-left:-1em;color:#fff}.icon-file-pdf-verified .path3:before{content:\"\\e99e\";margin-left:-1em;color:#000;opacity:.6}.icon-file-word:before{content:\"\\e99f\"}.icon-filter-alt:before{content:\"\\e9a0\"}.icon-flammable .path1:before{content:\"\\e9a1\";color:#323232}.icon-flammable .path2:before{content:\"\\e9a2\";margin-left:-1em;color:#323232}.icon-flammable .path3:before{content:\"\\e9a3\";margin-left:-1em;color:#e32730}.icon-gas-under-pressure .path1:before{content:\"\\e9a4\";color:#323232}.icon-gas-under-pressure .path2:before{content:\"\\e9a5\";margin-left:-1em;color:#e32730}.icon-health-hazard .path1:before{content:\"\\e9a6\";color:#323232}.icon-health-hazard .path2:before{content:\"\\e9a7\";margin-left:-1em;color:#e32730}.icon-line-break:before{content:\"\\e9a8\"}.icon-location:before{content:\"\\e9a9\"}.icon-measure-add:before{content:\"\\e9aa\"}.icon-measure-edit:before{content:\"\\e9ab\"}.icon-measure-view:before{content:\"\\e9ac\";color:#666}.icon-messages:before{content:\"\\e9ad\"}.icon-monitoring:before{content:\"\\e9ae\";color:#666}.icon-move:before{content:\"\\e9af\"}.icon-oxidizing .path1:before{content:\"\\e9b0\";color:#e32730}.icon-oxidizing .path2:before{content:\"\\e9b1\";margin-left:-1em;color:#323232}.icon-oxidizing .path3:before{content:\"\\e9b2\";margin-left:-1em;color:#323232}.icon-oxidizing .path4:before{content:\"\\e9b3\";margin-left:-1em;color:#323232}.icon-process-area-closed:before{content:\"\\e9b4\"}.icon-process-area-open:before{content:\"\\e9b5\"}.icon-process-linked .path1:before{content:\"\\e9b6\";color:#000;opacity:.6}.icon-process-linked .path2:before{content:\"\\e9b7\";margin-left:-1em;color:#666}.icon-risk:before{content:\"\\e9b8\"}.icon-search-in-file:before{content:\"\\e9b9\"}.icon-sort-ascending:before{content:\"\\e9ba\"}.icon-sort-descending:before{content:\"\\e9bb\"}.icon-subscript:before{content:\"\\e9bc\"}.icon-superscript:before{content:\"\\e9bd\"}.icon-syncronice-favorites:before{content:\"\\e9be\"}.icon-system-settings:before{content:\"\\e9bf\"}.icon-view-three-outlined:before{content:\"\\e9c0\"}.icon-workplace-safety:before{content:\"\\e9c1\"}.icon-checklist:before{content:\"\\e900\"}.icon-department-document .path1:before{content:\"\\e901\";color:#000;opacity:.6}.icon-department-document .path2:before{content:\"\\e902\";margin-left:-1em;color:#00804c}.icon-department-folder-closed .path1:before{content:\"\\e903\";color:#000;opacity:.6}.icon-department-folder-closed .path2:before{content:\"\\e904\";margin-left:-1em;color:#00804c}.icon-department-folder-open .path1:before{content:\"\\e905\";color:#000;opacity:.6}.icon-department-folder-open .path2:before{content:\"\\e906\";margin-left:-1em;color:#00804c}.icon-deviation:before{content:\"\\e907\"}.icon-dropdown-folder .path1:before{content:\"\\e908\";color:#00324e}.icon-dropdown-folder .path2:before{content:\"\\e909\";margin-left:-1em;color:#fff;opacity:.6}.icon-enterprise-document .path1:before{content:\"\\e90a\";color:#000;opacity:.6}.icon-enterprise-document .path2:before{content:\"\\e90b\";margin-left:-1em;color:#cf4714}.icon-enterprise-folder-closed .path1:before{content:\"\\e90c\";color:#000;opacity:.6}.icon-enterprise-folder-closed .path2:before{content:\"\\e90d\";margin-left:-1em;color:#cf4714}.icon-enterprise-folder-open .path1:before{content:\"\\e90e\";color:#000;opacity:.6}.icon-enterprise-folder-open .path2:before{content:\"\\e90f\";margin-left:-1em;color:#cf4714}.icon-folder-closed:before{content:\"\\e910\"}.icon-folder-open:before{content:\"\\e911\"}.icon-keyboard_arrow_down:before{content:\"\\e912\"}.icon-keyboard_arrow_up:before{content:\"\\e913\"}.icon-local-document .path1:before{content:\"\\e914\";color:#000;opacity:.6}.icon-local-document .path2:before{content:\"\\e915\";margin-left:-1em;color:#1954a9}.icon-local-folder-closed .path1:before{content:\"\\e916\";color:#000;opacity:.6}.icon-local-folder-closed .path2:before{content:\"\\e917\";margin-left:-1em;color:#1954a9}.icon-local-folder-open .path1:before{content:\"\\e918\";color:#000;opacity:.6}.icon-local-folder-open .path2:before{content:\"\\e919\";margin-left:-1em;color:#1954a9}.icon-process:before{content:\"\\e91a\"}.icon-regional-document .path1:before{content:\"\\e91c\";color:#000;opacity:.6}.icon-regional-document .path2:before{content:\"\\e91d\";margin-left:-1em;color:#662e0d}.icon-regional-folder-closed .path1:before{content:\"\\e91e\";color:#000;opacity:.6}.icon-regional-folder-closed .path2:before{content:\"\\e91f\";margin-left:-1em;color:#662e0d}.icon-regional-folder-open .path1:before{content:\"\\e920\";color:#000;opacity:.6}.icon-regional-folder-open .path2:before{content:\"\\e921\";margin-left:-1em;color:#662e0d}.select-access-paginator{max-height:150px!important}.mat-expansion-panel .mat-expansion-panel-body{padding-top:0!important}.mat-expansion-panel-header{font-weight:800!important}.mat-expansion-panel-header .title-content{font-size:12px!important}.w-100{width:100%}.h-100{height:100%}.pointer{cursor:pointer}.fw-600{font-weight:600}.label-item{font-weight:600;color:var(--ws-text-primary)}.sub-label{color:var(--ws-text-secondary)}.fs-14{font-size:14px}.fs-12{font-size:12px}.color-primary{color:var(--primary-light)!important}.header-title{font-weight:600;color:var(--ws-text-primary);font-size:16px}.mat-mdc-chip.chip-item-result{max-width:250px}.mat-mdc-chip.chip-item-result.item-department .qms-chip-body{display:flex;justify-content:center;align-items:center}.remove-chip-icon{cursor:pointer}.remove-chip-icon:hover{color:#000000b3}.mat-form-field-wrapper{padding-bottom:8px!important}.mat-expansion-panel{border-radius:unset!important}.mat-expansion-panel-header:not([aria-disabled=true]){background:unset}.mat-expansion-panel.mat-expanded .mat-expansion-panel-header{background:#e5eefb}.mat-expansion-panel.mat-expanded .mat-expansion-panel-header .qms-line{color:var(--primary-light)!important}.access-dialog-header{display:flex;justify-content:space-between;align-items:center}.mat-chip-list-wrapper{margin:unset!important}.item-list-wrapper{height:40vh;padding:4px 4px 4px 0;overflow-y:auto}.item-list-wrapper.no-result{height:50vh;display:flex;justify-content:center;align-items:center}.item-list-wrapper .item{min-height:40px}.item-list-wrapper .item-without-checkbox{min-height:45px;display:flex;justify-content:space-between;align-items:center;padding:4px 8px;cursor:pointer;-webkit-user-select:none;user-select:none;border-radius:4px;transition:background .3s ease}.item-list-wrapper .item-without-checkbox.active{background:var(--primary-light-12-opacity)}.item-list-wrapper .item-without-checkbox:hover{background:var(--primary-light-6-opacity)}.item-list-wrapper .item-without-checkbox .mat-icon{color:var(--primary-light)!important}.confirm__button__groups .btn-add>.qms-btn-wrapper{display:flex;justify-content:center;align-items:center}.qms-dialog-content{display:grid;column-gap:8px}.qms-dialog-content.active{grid-template-columns:2fr 1fr;min-height:50vh}.qms-dialog-content .access-dialog-wraper .field-select-option .mat-form-field-wrapper{padding-bottom:16px!important}.qms-dialog-content .access-dialog-wraper .field-select-option .mat-form-field-underline{bottom:16px!important}.qms-dialog-content .result-wrapper{position:relative;width:100%;margin-left:8px}.qms-dialog-content .result-wrapper:after{position:absolute;content:\"\";top:0;left:0;background-color:#0000001f;height:100%;width:1px}.qms-dialog-content .result-selected-container{position:absolute;inset:0;overflow-y:auto;padding:0 8px}.qms-dialog-content .result-selected-container .result-header{height:51px;display:flex;align-items:center;position:sticky;top:0;z-index:10;padding:0!important;background:#fff;margin-bottom:12px}.qms-dialog-content .result-selected-container .result-header:after{position:absolute;content:\"\";bottom:0;left:0;width:100%;height:1px;background:#0000000a}.qms-dialog-content .result-selected-container .result-header .mat-mdc-card-content{height:51px;width:100%;padding-left:4px;display:flex;align-items:center;background-color:#0000000a}.option-selected-content .group-filter-person-option{display:flex;flex-direction:row-reverse;justify-content:center;align-items:center;gap:8px}span.chip-item__content_name{display:inline-block;max-width:175px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}span.chip-item-children__count{font-size:.75rem;color:#00000080;font-weight:600}.mat-mdc-slide-toggle.qms-group-options{padding:unset!important}.input-option-filter .mat-form-field-wrapper{padding-bottom:8px!important}.input-option-filter .mat-form-field-underline{bottom:8px!important}.slide-toggle{margin-bottom:8px}.confirm__button__groups.none-option{margin-top:85px}.btn-icon-clear{position:relative;padding:0 1rem}.btn-icon-clear .qms-btn-icon{margin-right:unset!important}.btn-icon-clear:after{position:absolute;content:\"\";left:0;top:0;height:100%;width:1px;background:#0000004d}.qms-paginator .mat-mdc-paginator-container .qms-total-result{margin-bottom:0;margin-right:12px;height:100%;display:flex;align-items:center}.qms-paginator .mat-mdc-paginator-container .qms-total-result span{font-weight:600;color:#000c}.qms-paginator .mat-mdc-paginator-container .qms-paginator-range-actions{margin-bottom:0;column-gap:2px}.qms-paginator .mat-mdc-paginator-container .qms-paginator-range-actions>.qms-total-result{margin-bottom:0}.qms-paginator .qms-paginator-page-size{align-items:center}.qms-paginator .mat-form-field-wrapper{padding-bottom:0!important}.mat-mdc-checkbox.checkbox-all .mat-checkbox-label{flex-direction:row!important;align-items:center!important;column-gap:4px!important}.mat-expansion-panel.qms-expansion{margin:0!important}.access-department .qms-view-search-result{height:100%!important}.access-department .qms-view-search-result .result{max-height:calc(100% - 80px)!important}.access-department .loading-container{height:calc(100% - 40px)!important}.qms-loading-container{height:45vh;overflow:hidden;display:grid;grid-template-rows:repeat(60px)}.qms-loading-container .qms-loader{position:relative;width:100%;height:100%;padding:10px 0;overflow:hidden}.qms-loading-container .qms-loader:after{content:\"\";position:absolute;width:100%;height:100%;top:0;left:0;background:linear-gradient(110deg,#e9e9e900,#e3e3e300 40%,#e3e3e380 50%,#e3e3e300 60% 100%);animation:animate-loading 1.2s linear infinite}.qms-loading-container .qms-loader__wrapper{position:relative;width:100%;height:100%}.qms-loading-container .qms-loader__wrapper .row-loader{background-color:#eee;position:absolute;left:0;width:100%;height:40px;overflow:hidden}@keyframes animate-loading{0%{transform:translate(-100%)}to{transform:translate(100%)}}.btn-close-dialog.qms-btn-icon:focus:not(:hover){background-color:unset!important;color:unset!important}.mdc-evolution-chip-set .mat-mdc-standard-chip .mdc-evolution-chip__cell--primary,.mdc-evolution-chip-set .mat-mdc-standard-chip .mdc-evolution-chip__action--primary,.mdc-evolution-chip-set .mat-mdc-standard-chip .mat-mdc-chip-action-label{overflow:hidden}\n"] }]
|
606
678
|
}], ctorParameters: () => [{ type: i1.MatDialogRef }, { type: i29.QMSSelectAccessDialog, decorators: [{
|
607
679
|
type: Inject,
|
608
680
|
args: [MAT_DIALOG_DATA]
|
@@ -617,5 +689,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
617
689
|
}], pagingUserGroup: [{
|
618
690
|
type: ViewChild,
|
619
691
|
args: ['pagingUserGroup']
|
692
|
+
}], pagingDepartment: [{
|
693
|
+
type: ViewChild,
|
694
|
+
args: ['pagingDepartment']
|
620
695
|
}] } });
|
621
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0LWFjY2Vzcy1kaWFsb2cuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcW1zLWFuZ3VsYXIvc3JjL2xpYi9jb21wb25lbnRzL3NlbGVjdC1hY2Nlc3MtZGlhbG9nL3NlbGVjdC1hY2Nlc3MtZGlhbG9nLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Ftcy1hbmd1bGFyL3NyYy9saWIvY29tcG9uZW50cy9zZWxlY3QtYWNjZXNzLWRpYWxvZy9zZWxlY3QtYWNjZXNzLWRpYWxvZy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBS0wsU0FBUyxFQUNULFlBQVksRUFDWixNQUFNLEVBR04sU0FBUyxFQUNULGlCQUFpQixFQUNsQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQXNCLGtCQUFrQixFQUFvQixNQUFNLGdCQUFnQixDQUFDO0FBQzFGLE9BQU8sRUFBRSw0QkFBNEIsRUFBNkIsTUFBTSw0QkFBNEIsQ0FBQztBQUNyRyxPQUFPLEVBQUUsZUFBZSxFQUFnQixNQUFNLDBCQUEwQixDQUFDO0FBRXpFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRCxPQUFPLEtBQUssQ0FBQyxNQUFNLFFBQVEsQ0FBQztBQUM1QixPQUFPLEVBQUUsZUFBZSxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNoRCxPQUFPLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBSXpELE9BQU8sRUFBRSxjQUFjLEVBQXlCLE1BQU0sa0JBQWtCLENBQUM7QUFFekUsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0sNERBQTRELENBQUM7QUFDM0csT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDbEUsT0FBTyxFQUFFLHNCQUFzQixF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QzdELENBQUM7SUFFRCx3QkFBd0IsQ0FBQyxJQUFjO1FBQ3JDLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUM7SUFDL0IsQ0FBQzsrR0F2bEJVLDhCQUE4Qiw4Q0FnRy9CLGVBQWU7bUdBaEdkLDhCQUE4QixtREFWOUI7WUFDVDtnQkFDRSxPQUFPLEVBQUUsNEJBQTRCO2dCQUNyQyxRQUFRLEVBQUU7b0JBQ1IsV0FBVyxFQUFFLE1BQU07aUJBQ1M7YUFDL0I7U0FDRixtR0F5Q08sNkJBQTZCLGlPQ3pGdkMsK2twQkFzV2MseTg2QkQ5VEEsQ0FBQyw0QkFBNEIsQ0FBQzs7NEZBVy9CLDhCQUE4QjtrQkFmMUMsU0FBUzsrQkFDRSwwQkFBMEIsY0FHeEIsQ0FBQyw0QkFBNEIsQ0FBQyxhQUMvQjt3QkFDVDs0QkFDRSxPQUFPLEVBQUUsNEJBQTRCOzRCQUNyQyxRQUFRLEVBQUU7Z0NBQ1IsV0FBVyxFQUFFLE1BQU07NkJBQ1M7eUJBQy9CO3FCQUNGLGlCQUNjLGlCQUFpQixDQUFDLElBQUk7OzBCQWtHbEMsTUFBTTsyQkFBQyxlQUFlO2dKQXpEbEIsSUFBSTtzQkFGVixTQUFTO3VCQUFDLE1BQU0sRUFBRTt3QkFDakIsSUFBSSxFQUFFLDZCQUE2QjtxQkFDcEM7Z0JBZ0IwQixZQUFZO3NCQUF0QyxTQUFTO3VCQUFDLGNBQWM7Z0JBQ0ssZUFBZTtzQkFBNUMsU0FBUzt1QkFBQyxpQkFBaUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIEFmdGVyQ29udGVudENoZWNrZWQsXHJcbiAgQWZ0ZXJDb250ZW50SW5pdCxcclxuICBBZnRlclZpZXdJbml0LFxyXG4gIENoYW5nZURldGVjdG9yUmVmLFxyXG4gIENvbXBvbmVudCxcclxuICBFdmVudEVtaXR0ZXIsXHJcbiAgSW5qZWN0LFxyXG4gIE9uRGVzdHJveSxcclxuICBPbkluaXQsXHJcbiAgVmlld0NoaWxkLFxyXG4gIFZpZXdFbmNhcHN1bGF0aW9uXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFVudHlwZWRGb3JtQnVpbGRlciwgVW50eXBlZEZvcm1Db250cm9sLCBVbnR5cGVkRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBNQVRfQ0hFQ0tCT1hfREVGQVVMVF9PUFRJT05TLCBNYXRDaGVja2JveERlZmF1bHRPcHRpb25zIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvY2hlY2tib3gnO1xyXG5pbXBvcnQgeyBNQVRfRElBTE9HX0RBVEEsIE1hdERpYWxvZ1JlZiB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XHJcbmltcG9ydCB7IFBhZ2VFdmVudCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3BhZ2luYXRvcic7XHJcbmltcG9ydCB7IE1hdFNlbGVjdENoYW5nZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NlbGVjdCc7XHJcbmltcG9ydCAqIGFzIF8gZnJvbSAnbG9kYXNoJztcclxuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBRTVNGbGF0Tm9kZVRyZWUgfSBmcm9tICcuLi8uLi9jb21tb24vbW9kZWxzL3Ftcy1mbGF0LW5vZGUubW9kZWwnO1xyXG5pbXBvcnQgeyBRTVNUcmVlTm9kZSB9IGZyb20gJy4uLy4uL2NvbW1vbi9tb2RlbHMvcW1zLXRyZWUtbm9kZS5tb2RlbCc7XHJcbmltcG9ydCB7IFRyYW5zbGF0ZUxpYnJhcnlTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL3RyYW5zbGF0aW9uLXJlZ2lzdHJ5LnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgUGFnaW5hdGlvblNpemUsIFFNU1BhZ2luYXRvckNvbXBvbmVudCB9IGZyb20gJy4uL3Ftcy1wYWdpbmF0b3InO1xyXG5pbXBvcnQgeyBJU2VsZWN0aW9uTm9kZUNoYW5nZSwgUU1TRGVwYXJ0bWVudFBhZ2luZ01vZGVsIH0gZnJvbSAnLi4vc2VsZWN0LWRlcGFydG1lbnQtdHJlZSc7XHJcbmltcG9ydCB7IFNlbGVjdERlcGFydG1lbnRUcmVlQ29tcG9uZW50IH0gZnJvbSAnLi4vc2VsZWN0LWRlcGFydG1lbnQtdHJlZS9zZWxlY3QtZGVwYXJ0bWVudC10cmVlLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFNlbGVjdEFjY2Vzc0FuaW1hdGlvblRyaWdnZXIgfSBmcm9tICcuL2NvbW1vbi9hbmltYXRpb24nO1xyXG5pbXBvcnQgeyBPcHRpb25TZWxlY3RBY2Nlc3NFbnVtIH0gZnJvbSAnLi9jb21tb24vb3B0aW9uLXNlbGVjdC1hY2Nlc3MuZW51bSc7XHJcbmltcG9ydCB7IFFNU0FjY2Vzc0l0ZW0gfSBmcm9tICcuL21vZGVsL2FjY2Vzcy1pdGVtLm1vZGVsJztcclxuaW1wb3J0IHsgUU1TQWNjZXNzUGFnaW5nQ2hhbmdlTW9kZWwsIFFNU0FjY2Vzc1BhZ2luZ01vZGVsIH0gZnJvbSAnLi9tb2RlbC9hY2Nlc3MtcGFnaW5nLm1vZGVsJztcclxuaW1wb3J0IHsgRmlsdGVyUGVyc29uTW9kZWwgfSBmcm9tICcuL21vZGVsL2ZpbHRlci1wZXJzb24ubW9kZWwnO1xyXG5pbXBvcnQgeyBPcHRpb25TZWxlY3RBY2Nlc3NNb2RlbCB9IGZyb20gJy4vbW9kZWwvb3B0aW9uLXNlbGVjdC1hY2Nlc3MubW9kZWwnO1xyXG5pbXBvcnQgeyBRTVNTZWxlY3RBY2Nlc3NEaWFsb2cgfSBmcm9tICcuL21vZGVsL3NlbGVjdC1hY2Nlc3MtY29uZmlnLm1vZGVsJztcclxuaW1wb3J0IHsgUU1TU2VsZWN0QWNjZXNzUmVzdWx0IH0gZnJvbSAnLi9tb2RlbC9zZWxlY3QtYWNjZXNzLWRhdGEnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdxbXMtc2VsZWN0LWFjY2Vzcy1kaWFsb2cnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9zZWxlY3QtYWNjZXNzLWRpYWxvZy5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vc2VsZWN0LWFjY2Vzcy1kaWFsb2cuY29tcG9uZW50LnNjc3MnXSxcclxuICBhbmltYXRpb25zOiBbU2VsZWN0QWNjZXNzQW5pbWF0aW9uVHJpZ2dlcl0sXHJcbiAgcHJvdmlkZXJzOiBbXHJcbiAgICB7XHJcbiAgICAgIHByb3ZpZGU6IE1BVF9DSEVDS0JPWF9ERUZBVUxUX09QVElPTlMsXHJcbiAgICAgIHVzZVZhbHVlOiB7XHJcbiAgICAgICAgY2xpY2tBY3Rpb246ICdub29wJ1xyXG4gICAgICB9IGFzIE1hdENoZWNrYm94RGVmYXVsdE9wdGlvbnNcclxuICAgIH1cclxuICBdLFxyXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmVcclxufSlcclxuZXhwb3J0IGNsYXNzIFFNU1NlbGVjdEFjY2Vzc0RpYWxvZ0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBBZnRlclZpZXdJbml0LCBBZnRlckNvbnRlbnRJbml0LCBBZnRlckNvbnRlbnRDaGVja2VkIHtcclxuICBuZ1Vuc3ViY3JpYmUgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xyXG4gIExBTkc6IGFueTtcclxuICBvcHRpb25TZWxlY3QgPSBuZXcgVW50eXBlZEZvcm1Db250cm9sKCk7XHJcbiAgT1BUSU9OX0VOVU0gPSBPcHRpb25TZWxlY3RBY2Nlc3NFbnVtO1xyXG4gIG9wdGlvbnM6IE9wdGlvblNlbGVjdEFjY2Vzc01vZGVsW10gPSBbXTtcclxuXHJcbiAgcHJpdmF0ZSBfZGVwYXJ0bWVudFNlbGVjdGVkOiBRTVNUcmVlTm9kZVtdID0gW107XHJcbiAgZ2V0IHNlbGVjdGVkRGVwYXJ0bWVudHMoKSB7XHJcbiAgICBjb25zdCBkZXBhcnRtZW50U2VsZWN0ZWQ6IFFNU0ZsYXROb2RlVHJlZVtdID0gW107XHJcbiAgICB0aGlzLl9kZXBhcnRtZW50U2VsZWN0ZWQuZm9yRWFjaCh4ID0+IHtcclxuICAgICAgZGVwYXJ0bWVudFNlbGVjdGVkLnB1c2goe1xyXG4gICAgICAgIGlkOiB4LmlkLFxyXG4gICAgICAgIGdyb3VwSWQ6IHguZ3JvdXBJZCxcclxuICAgICAgICBpc0dyb3VwOiB4LmlzR3JvdXBcclxuICAgICAgfSBhcyBRTVNGbGF0Tm9kZVRyZWUpO1xyXG4gICAgICBpZiAoIXguY2hpbGRyZW4/Lmxlbmd0aClcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIGRlcGFydG1lbnRTZWxlY3RlZC5wdXNoKC4uLih4LmNoaWxkcmVuLm1hcChpdGVtID0+ICh7XHJcbiAgICAgICAgaWQ6IGl0ZW0uaWQsXHJcbiAgICAgICAgZ3JvdXBJZDogaXRlbS5ncm91cElkLFxyXG4gICAgICAgIGlzR3JvdXA6IGl0ZW0uaXNHcm91cFxyXG4gICAgICB9IGFzIFFNU0ZsYXROb2RlVHJlZSkpKSk7XHJcbiAgICB9KTtcclxuICAgIHJldHVybiBkZXBhcnRtZW50U2VsZWN0ZWQgfHwgW107XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgcGVyc29uRm9ybTogVW50eXBlZEZvcm1Hcm91cDtcclxuICBwdWJsaWMgdXNlckdyb3VwRm9ybSA9IG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woJycpXHJcbiAgcHVibGljIGdldExvYWRpbmckID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XHJcbiAgb25TZWFyY2hQZXJzb25FdmVudCA9IG5ldyBFdmVudEVtaXR0ZXI8RmlsdGVyUGVyc29uTW9kZWw+KCk7XHJcbiAgb25TZWFyY2hQZXJzb25GcmVlVGV4dEV2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIG9uU2VhcmNoVXNlckdyb3VwRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcclxuICBvblNlYXJjaERlcGFydG1lbnRFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBvblBhZ2luZ0V2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcjxRTVNBY2Nlc3NQYWdpbmdDaGFuZ2VNb2RlbD4oKTtcclxuICBvblNlbGVjdE9wdGlvbkNoYW5nZSQgPSBuZXcgU3ViamVjdDxNYXRTZWxlY3RDaGFuZ2U+KCk7XHJcbiAgdHJlZURlcGFydG1lbnQ6IFNlbGVjdERlcGFydG1lbnRUcmVlQ29tcG9uZW50XHJcbiAgQFZpZXdDaGlsZCgndHJlZScsIHtcclxuICAgIHJlYWQ6IFNlbGVjdERlcGFydG1lbnRUcmVlQ29tcG9uZW50XHJcbiAgfSkgc2V0IHRyZWUoZGF0YTogU2VsZWN0RGVwYXJ0bWVudFRyZWVDb21wb25lbnQpIHtcclxuICAgIHRoaXMudHJlZURlcGFydG1lbnQgPSBkYXRhO1xyXG5cclxuICAgIGNvbnN0IGdyb3VwcyA9IHRoaXMucmVzdWx0QWNjZXNzLmRlcGFydG1lbnRzLmZpbHRlcih4ID0+IHguaXNHcm91cCk7XHJcbiAgICBpZiAoZ3JvdXBzLmxlbmd0aClcclxuICAgICAgZ3JvdXBzLmZvckVhY2goZ3JvdXAgPT4ge1xyXG4gICAgICAgIGlmICghZ3JvdXAuY2hpbGRDb3VudCkge1xyXG4gICAgICAgICAgaWYgKCF0aGlzLnRyZWVEZXBhcnRtZW50KVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICBjb25zdCBub2RlID0gdGhpcy50cmVlRGVwYXJ0bWVudC50cmVlQ29udHJvbC5kYXRhTm9kZXMuZmluZCh4ID0+IHguaWQgPT0gZ3JvdXAuaWQpO1xyXG4gICAgICAgICAgaWYgKG5vZGUpXHJcbiAgICAgICAgICAgIGdyb3VwLmNoaWxkQ291bnQgPSB0aGlzLnRyZWVEZXBhcnRtZW50LmdldExpc3RDaGlsZHJlbk9mTm9kZShub2RlKS5sZW5ndGg7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIEBWaWV3Q2hpbGQoJ3BhZ2luZ1BlcnNvbicpIHBhZ2luZ1BlcnNvbjogUU1TUGFnaW5hdG9yQ29tcG9uZW50O1xyXG4gIEBWaWV3Q2hpbGQoJ3BhZ2luZ1VzZXJHcm91cCcpIHBhZ2luZ1VzZXJHcm91cDogUU1TUGFnaW5hdG9yQ29tcG9uZW50O1xyXG5cclxuICAvKiogbGlzdCBmaWx0ZXJlZCBieSBzZWFyY2gga2V5d29yZCAqL1xyXG4gIG9wdGlvbkZpbHRlclBlcnNvbkRhdGFHbG9iYWw6IHtcclxuICAgIGRlcGFydG1lbnRzOiBRTVNGbGF0Tm9kZVRyZWVbXSxcclxuICAgIHVzZXJHcm91cHM6IFFNU0FjY2Vzc0l0ZW1bXVxyXG4gIH0gPSB7XHJcbiAgICAgIGRlcGFydG1lbnRzOiBbXSxcclxuICAgICAgdXNlckdyb3VwczogW11cclxuICAgIH07XHJcblxyXG4gIHB1YmxpYyBmaWx0ZXJlZFNlYXJjaFRleHRCb3ggPSB7XHJcbiAgICBkZXBhcnRtZW50OiBuZXcgQmVoYXZpb3JTdWJqZWN0PFFNU0ZsYXROb2RlVHJlZVtdPihbXSksXHJcbiAgICB1c2VyR3JvdXA6IG5ldyBCZWhhdmlvclN1YmplY3Q8UU1TQWNjZXNzSXRlbVtdPihbXSksXHJcbiAgfVxyXG4gIGdldFBlcnNvbiQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFFNU0FjY2Vzc1BhZ2luZ01vZGVsPFFNU0FjY2Vzc0l0ZW0+PihuZXcgUU1TQWNjZXNzUGFnaW5nTW9kZWw8UU1TQWNjZXNzSXRlbT4oKSk7XHJcbiAgZ2V0IHBlcnNvbkZpbHRlcmVkKCkge1xyXG4gICAgY29uc3QgcGVyc29ucyA9IHRoaXMuZ2V0UGVyc29uJC52YWx1ZTtcclxuICAgIGNvbnN0IGlkcyA9IHRoaXMucmVzdWx0QWNjZXNzLnBlcnNvbnMubWFwKHggPT4geC5pZCk7XHJcbiAgICBwZXJzb25zLmRhdGE/LmZvckVhY2goeCA9PiB4LnNlbGVjdGVkID0gaWRzLmluY2x1ZGVzKHguaWQpKTtcclxuICAgIHJldHVybiBwZXJzb25zLmRhdGEgfHwgW107XHJcbiAgfVxyXG5cclxuICBnZXRVc2VyR3JvdXAkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxRTVNBY2Nlc3NQYWdpbmdNb2RlbDxRTVNBY2Nlc3NJdGVtPj4obmV3IFFNU0FjY2Vzc1BhZ2luZ01vZGVsPFFNU0FjY2Vzc0l0ZW0+KCkpO1xyXG4gIGdldCB1c2VyR3JvdXBGaWx0ZXJlZCgpIHtcclxuICAgIGNvbnN0IHVzZXJHcm91cHMgPSB0aGlzLmdldFVzZXJHcm91cCQudmFsdWU7XHJcbiAgICBjb25zdCBpZHMgPSB0aGlzLnJlc3VsdEFjY2Vzcy51c2VyR3JvdXBzLm1hcCh4ID0+IHguaWQpO1xyXG4gICAgdXNlckdyb3Vwcy5kYXRhPy5mb3JFYWNoKHggPT4geC5zZWxlY3RlZCA9IGlkcy5pbmNsdWRlcyh4LmlkKSk7XHJcbiAgICByZXR1cm4gdXNlckdyb3Vwcy5kYXRhIHx8IFtdO1xyXG4gIH07XHJcblxyXG4gIFBBR0lOQVRJT05fU0laRSA9IFBhZ2luYXRpb25TaXplO1xyXG4gIFBBR0VfU0laRV9PUFRJT046IG51bWJlcltdID0gWzUsIDEwLCAxNSwgMjAsIDI1LCAxMDBdO1xyXG4gIHJlc3VsdEFjY2VzcyA9IG5ldyBRTVNTZWxlY3RBY2Nlc3NSZXN1bHQoKTtcclxuICBhcnJTa2VsZXRvbiA9IG5ldyBBcnJheSg4KS5maWxsKDApO1xyXG4gIC8vcHJldmVudCBldmVudCBwYWdpbmcgd2hlbiBzZWFyY2ggZW1pdCBzZWFyY2ggZXZlbnRcclxuICBnZXRTZWFyY2hpbmckID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBkaWFsb2dSZWY6IE1hdERpYWxvZ1JlZjxRTVNTZWxlY3RBY2Nlc3NEaWFsb2dDb21wb25lbnQ+LFxyXG4gICAgQEluamVjdChNQVRfRElBTE9HX0RBVEEpIHB1YmxpYyBkaWFsb2dEYXRhOiBRTVNTZWxlY3RBY2Nlc3NEaWFsb2csXHJcbiAgICBwdWJsaWMgdHJhbnNsYXRlOiBUcmFuc2xhdGVMaWJyYXJ5U2VydmljZSxcclxuICAgIHByaXZhdGUgX2ZiOiBVbnR5cGVkRm9ybUJ1aWxkZXIsXHJcbiAgICBwcml2YXRlIGNkUmVmOiBDaGFuZ2VEZXRlY3RvclJlZlxyXG4gICkge1xyXG4gICAgdGhpcy5faW5pdFJlc3VsdEFjY2VzcygpO1xyXG4gIH1cclxuXHJcbiAgbmdBZnRlckNvbnRlbnRDaGVja2VkKCk6IHZvaWQge1xyXG4gICAgdGhpcy5jZFJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyQ29udGVudEluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmNkUmVmLmRldGVjdENoYW5nZXMoKTtcclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLnRyYW5zbGF0ZS5nZXRMYW5ndWFnZVN1YmplY3QkLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YmNyaWJlKSkuc3Vic2NyaWJlKChyZXMpID0+IHtcclxuICAgICAgaWYgKHJlcykge1xyXG4gICAgICAgIHRoaXMuTEFORyA9IHRoaXMudHJhbnNsYXRlLmdldE9iamVjdExhbmcocmVzKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICB0aGlzLl9idWlsZE9wdGlvblNlbGVjdCgpO1xyXG4gICAgdGhpcy5nZXRMb2FkaW5nJC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJjcmliZSkpXHJcbiAgICAgIC5zdWJzY3JpYmUocmVzcG9uc2UgPT4ge1xyXG4gICAgICAgIGlmIChyZXNwb25zZSkge1xyXG4gICAgICAgICAgdGhpcy5wZXJzb25Gb3JtICYmIHRoaXMucGVyc29uRm9ybS5kaXNhYmxlKCk7XHJcbiAgICAgICAgICB0aGlzLnVzZXJHcm91cEZvcm0gJiYgdGhpcy51c2VyR3JvdXBGb3JtLmRpc2FibGUoKTtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5wZXJzb25Gb3JtICYmIHRoaXMucGVyc29uRm9ybS5lbmFibGUoKTtcclxuICAgICAgICB0aGlzLnVzZXJHcm91cEZvcm0gJiYgdGhpcy51c2VyR3JvdXBGb3JtLmVuYWJsZSgpO1xyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5uZ1Vuc3ViY3JpYmUubmV4dCgpO1xyXG4gICAgdGhpcy5uZ1Vuc3ViY3JpYmUuY29tcGxldGUoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2J1aWxkT3B0aW9uU2VsZWN0KCkge1xyXG4gICAgY29uc3Qgb3B0aW9uT2JqID0ge1xyXG4gICAgICBlbmFibGVTZWxlY3REZXBhcnRtZW50OiB7XHJcbiAgICAgICAgZGlzcGxheU5hbWU6ICdERVBBUlRNRU5UJyxcclxuICAgICAgICB0eXBlOiB0aGlzLk9QVElPTl9FTlVNLkRFUEFSVE1FTlRcclxuICAgICAgfSxcclxuICAgICAgZW5hYmxlU2VsZWN0UGVyc29uOiB7XHJcbiAgICAgICAgZGlzcGxheU5hbWU6ICdQRVJTT04nLFxyXG4gICAgICAgIHR5cGU6IHRoaXMuT1BUSU9OX0VOVU0uUEVSU09OXHJcbiAgICAgIH0sXHJcbiAgICAgIGVuYWJsZVNlbGVjdFVzZXJHcm91cDoge1xyXG4gICAgICAgIGRpc3BsYXlOYW1lOiAnVVNFUl9HUk9VUCcsXHJcbiAgICAgICAgdHlwZTogdGhpcy5PUFRJT05fRU5VTS5VU0VSX0dST1VQXHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBmb3IgKGxldCBpdGVtIGluIHRoaXMuZGlhbG9nRGF0YSkge1xyXG4gICAgICBpZiAoISF0aGlzLmRpYWxvZ0RhdGFbaXRlbV0gJiYgb3B0aW9uT2JqW2l0ZW1dKSB7XHJcbiAgICAgICAgdGhpcy5vcHRpb25zLnB1c2gob3B0aW9uT2JqW2l0ZW1dKVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG5cclxuICAgIGlmICh0aGlzLm9wdGlvbnMubGVuZ3RoID09PSAxIHx8IHRoaXMuZGlhbG9nRGF0YS5za2lwRmlyc3RBc2tpbmdTY3JlZW4pIHtcclxuICAgICAgdGhpcy5kaWFsb2dSZWYudXBkYXRlU2l6ZSh0aGlzLmRpYWxvZ0RhdGEuc2l6ZVVwZGF0ZURlZmF1bHQpO1xyXG4gICAgICB0aGlzLm9wdGlvblNlbGVjdC5zZXRWYWx1ZSh0aGlzLm9wdGlvbnNbMF0udHlwZSk7XHJcbiAgICAgIGNvbnN0IGV2ZW50JCA9IG5ldyBNYXRTZWxlY3RDaGFuZ2UobnVsbCwgdGhpcy5vcHRpb25zWzBdLnR5cGUpO1xyXG4gICAgICB0aGlzLm9uU2VsZWN0aW9uVHlwZUNoYW5nZShldmVudCQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfaW5pdFJlc3VsdEFjY2VzcygpIHtcclxuICAgIHRoaXMucmVzdWx0QWNjZXNzID0gXy5jbG9uZURlZXAoe1xyXG4gICAgICAuLi50aGlzLmRpYWxvZ0RhdGEuZGF0YS5zZWxlY3RlZERhdGEsXHJcbiAgICAgIGRlcGFydG1lbnRzOiBbXVxyXG4gICAgfSBhcyBRTVNTZWxlY3RBY2Nlc3NSZXN1bHQpO1xyXG4gICAgLy8gaW5pdCBncm91cCBzZWxlY3RlZCBkZXBhcnRtZW50XHJcbiAgICB0aGlzLl9kZXBhcnRtZW50U2VsZWN0ZWQgPSBfLmNsb25lRGVlcCh0aGlzLmRpYWxvZ0RhdGEuZGF0YS5zZWxlY3RlZERhdGEuZGVwYXJ0bWVudHMpO1xyXG4gICAgY29uc3QgZ3JvdXBzID0gW107XHJcbiAgICBjb25zdCBzaW5nbGVJdGVtID0gW107XHJcblxyXG4gICAgdGhpcy5fZGVwYXJ0bWVudFNlbGVjdGVkLmZvckVhY2goaXRlbSA9PiB7XHJcbiAgICAgIGlmIChpdGVtLmlzR3JvdXApIHtcclxuICAgICAgICBncm91cHMucHVzaChpdGVtKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICghaXRlbS5ncm91cElkKSB7XHJcbiAgICAgICAgc2luZ2xlSXRlbS5wdXNoKGl0ZW0pO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKCF0aGlzLl9kZXBhcnRtZW50U2VsZWN0ZWQuc29tZSh4ID0+IHguaWQgPT0gaXRlbS5ncm91cElkKSkge1xyXG4gICAgICAgIGl0ZW0uZ3JvdXBJZCA9IG51bGw7XHJcbiAgICAgICAgc2luZ2xlSXRlbS5wdXNoKGl0ZW0pXHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICBncm91cHMuZm9yRWFjaChncm91cCA9PiB7XHJcbiAgICAgIGNvbnN0IGNoaWxkID0gdGhpcy5fZGVwYXJ0bWVudFNlbGVjdGVkLmZpbHRlcihpdGVtID0+IGl0ZW0uZ3JvdXBJZCA9PSBncm91cC5pZCk7XHJcbiAgICAgIGdyb3VwLmNoaWxkcmVuID0gY2hpbGQ7XHJcbiAgICB9KTtcclxuICAgIHRoaXMucmVzdWx0QWNjZXNzLmRlcGFydG1lbnRzID0gWy4uLmdyb3VwcywgLi4uc2luZ2xlSXRlbV07XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9maWx0ZXJPcHRpb25QZXJzb25DaGFuZ2UoKSB7XHJcbiAgICAvLyBGaWx0ZXIgcGVyc29uIGJ5IHJvbGVzXHJcbiAgICB0aGlzLnBlcnNvbkZvcm0uZ2V0KCd1c2VyR3JvdXBGaWx0ZXInKS52YWx1ZUNoYW5nZXNcclxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YmNyaWJlKSwgZGVib3VuY2VUaW1lKDUwMCkpXHJcbiAgICAgIC5zdWJzY3JpYmUoa2V5d29yZCA9PiB7XHJcbiAgICAgICAgaWYgKCF0aGlzLm9wdGlvbkZpbHRlclBlcnNvbkRhdGFHbG9iYWwudXNlckdyb3Vwcy5sZW5ndGgpIHtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFrZXl3b3JkKSB7XHJcbiAgICAgICAgICB0aGlzLmZpbHRlcmVkU2VhcmNoVGV4dEJveC51c2VyR3JvdXAubmV4dCh0aGlzLm9wdGlvbkZpbHRlclBlcnNvbkRhdGFHbG9iYWwudXNlckdyb3Vwcyk7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHJlc3VsdEZpbHRlciA9IHRoaXMub3B0aW9uRmlsdGVyUGVyc29uRGF0YUdsb2JhbC51c2VyR3JvdXBzLmZpbHRlcih1c2VyR3JvdXAgPT4gdXNlckdyb3VwLm5hbWUudG9Mb2NhbGVMb3dlckNhc2UoKS5pbmNsdWRlcyhrZXl3b3JkLnRvTG9jYWxlTG93ZXJDYXNlKCkpKTtcclxuICAgICAgICB0aGlzLmZpbHRlcmVkU2VhcmNoVGV4dEJveC51c2VyR3JvdXAubmV4dChyZXN1bHRGaWx0ZXIpO1xyXG4gICAgICB9KTtcclxuICAgIC8vIEZpbHRlciBwZXJzb24gYnkgZGVwYXJ0bWVudHNcclxuICAgIHRoaXMucGVyc29uRm9ybS5nZXQoJ2RlcGFydG1lbnRGaWx0ZXInKS52YWx1ZUNoYW5nZXNcclxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YmNyaWJlKSlcclxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgaWYgKCF0aGlzLm9wdGlvbkZpbHRlclBlcnNvbkRhdGFHbG9iYWwuZGVwYXJ0bWVudHMpIHtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgbGV0IHNlYXJjaCA9IHRoaXMucGVyc29uRm9ybS5nZXQoJ2RlcGFydG1lbnRGaWx0ZXInKS52YWx1ZTtcclxuICAgICAgICBpZiAoIXNlYXJjaCkge1xyXG4gICAgICAgICAgdGhpcy5maWx0ZXJlZFNlYXJjaFRleHRCb3guZGVwYXJ0bWVudC5uZXh0KHRoaXMub3B0aW9uRmlsdGVyUGVyc29uRGF0YUdsb2JhbC5kZXBhcnRtZW50cy5zbGljZSgpKTtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgc2VhcmNoID0gc2VhcmNoLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgICAgdGhpcy5maWx0ZXJlZFNlYXJjaFRleHRCb3guZGVwYXJ0bWVudC5uZXh0KFxyXG4gICAgICAgICAgdGhpcy5vcHRpb25GaWx0ZXJQZXJzb25EYXRhR2xvYmFsLmRlcGFydG1lbnRzLmZpbHRlcih4ID0+IHgubmFtZS50b0xvd2VyQ2FzZSgpLmluZGV4T2Yoc2VhcmNoKSA+IC0xKVxyXG4gICAgICAgICk7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZ2V0UmVzdWx0VGFiQWN0aXZlKCkge1xyXG4gICAgY29uc3QgcmVzdWx0T2JqID0ge1xyXG4gICAgICAwOiB0aGlzLnJlc3VsdEFjY2Vzcy5wZXJzb25zLFxyXG4gICAgICAxOiB0aGlzLnJlc3VsdEFjY2Vzcy51c2VyR3JvdXBzLFxyXG4gICAgICAyOiB0aGlzLnJlc3VsdEFjY2Vzcy5kZXBhcnRtZW50c1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlc3VsdE9ialt0aGlzLm9wdGlvblNlbGVjdC52YWx1ZV07XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgY2hlY2tFeGlzdE9wdGlvblNlbGVjdChvcHRpb246IE9wdGlvblNlbGVjdEFjY2Vzc0VudW0pOiBib29sZWFuIHtcclxuICAgIHJldHVybiAhIXRoaXMub3B0aW9ucy5maW5kKGl0ZW0gPT4gaXRlbS50eXBlID09PSBvcHRpb24pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBidWlsZFBlcnNvbkZvcm0oKSB7XHJcbiAgICB0aGlzLnBlcnNvbkZvcm0gPSB0aGlzLl9mYi5ncm91cCh7XHJcbiAgICAgIHVzZXJHcm91cDogW10sXHJcbiAgICAgIGRlcGFydG1lbnQ6IFtdLFxyXG4gICAgICBkZXBhcnRtZW50RmlsdGVyOiBbJyddLFxyXG4gICAgICByZWN1cnNpdmU6IFt7XHJcbiAgICAgICAgdmFsdWU6IGZhbHNlLCBkaXNhYmxlZDogdHJ1ZVxyXG4gICAgICB9XSxcclxuICAgICAga2V5d29yZDogWycnXSxcclxuICAgICAgdXNlckdyb3VwRmlsdGVyOiBbJyddLFxyXG4gICAgICBleGNsdWRlZFF1aXREZXBhcnRtZW50SWQ6IFt0cnVlXVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuXHJcbiAgb25GaWx0ZXJQZXJzb24oKSB7XHJcbiAgICB0aGlzLmdldExvYWRpbmckLm5leHQodHJ1ZSk7XHJcbiAgICBjb25zdCBmb3JtVmFsdWUgPSB0aGlzLnBlcnNvbkZvcm0uZ2V0UmF3VmFsdWUoKTtcclxuICAgIGNvbnN0IGZpbHRlckRhdGE6IEZpbHRlclBlcnNvbk1vZGVsID0ge1xyXG4gICAgICBkZXBhcnRtZW50SWQ6IGZvcm1WYWx1ZS5kZXBhcnRtZW50Py5pZCxcclxuICAgICAgdXNlckdyb3VwSWQ6IGZvcm1WYWx1ZS51c2VyR3JvdXA/LmlkLFxyXG4gICAgICBrZXl3b3JkOiBmb3JtVmFsdWUua2V5d29yZCxcclxuICAgICAgcmVjdXJzaXZlOiBmb3JtVmFsdWUucmVjdXJzaXZlXHJcbiAgICB9O1xyXG4gICAgdGhpcy5nZXRTZWFyY2hpbmckLm5leHQodHJ1ZSk7XHJcbiAgICB0aGlzLl9yZXNldFBhZ2luZ2F0b3IodGhpcy5wYWdpbmdQZXJzb24pO1xyXG4gICAgdGhpcy5vblNlYXJjaFBlcnNvbkV2ZW50LmVtaXQoZmlsdGVyRGF0YSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9yZXNldFBhZ2luZ2F0b3IocGFnaW5hdG9yOiBRTVNQYWdpbmF0b3JDb21wb25lbnQpIHtcclxuICAgIGlmICghcGFnaW5hdG9yKVxyXG4gICAgICByZXR1cm47XHJcbiAgICBwYWdpbmF0b3IuY2hhbmdlUGFnZSgwKTtcclxuICAgIHBhZ2luYXRvci5yZW5kZXJEaXNwbGF5TnVtYmVyT2ZwYWdlcygpO1xyXG4gIH1cclxuXHJcbiAgb25TZWFyY2hQZXJzb25GcmVlVGV4dCgpIHtcclxuICAgIHRoaXMuZ2V0TG9hZGluZyQubmV4dCh0cnVlKTtcclxuICAgIHRoaXMuZ2V0U2VhcmNoaW5nJC5uZXh0KHRydWUpO1xyXG4gICAgdGhpcy5vblNlYXJjaFBlcnNvbkZyZWVUZXh0RXZlbnQuZW1pdCh0aGlzLnBlcnNvbkZvcm0uZ2V0KCdrZXl3b3JkJykudmFsdWUpO1xyXG4gICAgdGhpcy5fcmVzZXRQYWdpbmdhdG9yKHRoaXMucGFnaW5nUGVyc29uKTtcclxuICB9XHJcblxyXG4gIG9uRmlsdGVyVXNlckdyb3VwKCkge1xyXG4gICAgdGhpcy5nZXRMb2FkaW5nJC5uZXh0KHRydWUpO1xyXG4gICAgdGhpcy5nZXRTZWFyY2hpbmckLm5leHQodHJ1ZSk7XHJcbiAgICB0aGlzLl9yZXNldFBhZ2luZ2F0b3IodGhpcy5wYWdpbmdVc2VyR3JvdXApO1xyXG4gICAgdGhpcy5vblNlYXJjaFVzZXJHcm91cEV2ZW50LmVtaXQodGhpcy51c2VyR3JvdXBGb3JtLnZhbHVlKTtcclxuICB9XHJcblxyXG4gIG9uU2VsZWN0SXRlbSh0eXBlOiBPcHRpb25TZWxlY3RBY2Nlc3NFbnVtLCBpdGVtOiBRTVNBY2Nlc3NJdGVtKSB7XHJcbiAgICBpZiAoIXRoaXMuYWxsb3dSZW1vdmUodHlwZSwgaXRlbSkpXHJcbiAgICAgIHJldHVybjtcclxuICAgIGl0ZW0uc2VsZWN0ZWQgPSAhaXRlbS5zZWxlY3RlZDtcclxuICAgIHN3aXRjaCAodHlwZSkge1xyXG4gICAgICBjYXNlIE9wdGlvblNlbGVjdEFjY2Vzc0VudW0uUEVSU09OOlxyXG4gICAgICAgIHtcclxuICAgICAgICAgIGlmICh0aGlzLmRpYWxvZ0RhdGEubW9kZVNlbGVjdE9uZVBlcnNvbikge1xyXG4gICAgICAgICAgICB0aGlzLnJlc3VsdEFjY2Vzcy5wZXJzb25zID0gaXRlbS5zZWxlY3RlZCA/IFtpdGVtXSA6IFtdO1xyXG4gICAgICAgICAgICB0aGlzLnBlcnNvbkZpbHRlcmVkLmZvckVhY2goaXRlbSA9PiB7XHJcbiAgICAgICAgICAgICAgaWYgKGl0ZW0uaWQgIT09IGl0ZW0uaWQpIHtcclxuICAgICAgICAgICAgICAgIGl0ZW0uc2VsZWN0ZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAoaXRlbS5zZWxlY3RlZCkge1xyXG4gICAgICAgICAgICB0aGlzLnJlc3VsdEFjY2Vzcy5wZXJzb25zLnB1c2goaXRlbSk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGNvbnN0IGluZGV4SXRlbSA9IHRoaXMucmVzdWx0QWNjZXNzLnBlcnNvbnMuZmluZEluZGV4KHggPT4geC5pZCA9PT0gaXRlbS5pZCk7XHJcbiAgICAgICAgICBpbmRleEl0ZW0gPiAtMSAmJiB0aGlzLnJlc3VsdEFjY2Vzcy5wZXJzb25zLnNwbGljZShpbmRleEl0ZW0sIDEpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBPcHRpb25TZWxlY3RBY2Nlc3NFbnVtLlVTRVJfR1JPVVA6XHJcbiAgICAgICAge1xyXG4gICAgICAgICAgaWYgKHRoaXMuZGlhbG9nRGF0YS5tb2RlU2VsZWN0T25lVXNlckdyb3VwKSB7XHJcbiAgICAgICAgICAgIHRoaXMucmVzdWx0QWNjZXNzLnVzZXJHcm91cHMgPSBpdGVtLnNlbGVjdGVkID8gW2l0ZW1dIDogW107XHJcbiAgICAgICAgICAgIHRoaXMudXNlckdyb3VwRmlsdGVyZWQuZm9yRWFjaChpdGVtID0+IHtcclxuICAgICAgICAgICAgICBpZiAoaXRlbS5pZCAhPT0gaXRlbS5pZCkge1xyXG4gICAgICAgICAgICAgICAgaXRlbS5zZWxlY3RlZCA9IGZhbHNlXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKGl0ZW0uc2VsZWN0ZWQpIHtcclxuICAgICAgICAgICAgdGhpcy5yZXN1bHRBY2Nlc3MudXNlckdyb3Vwcy5wdXNoKGl0ZW0pXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGNvbnN0IGluZGV4SXRlbSA9IHRoaXMucmVzdWx0QWNjZXNzLnVzZXJHcm91cHMuZmluZEluZGV4KHggPT4geC5pZCA9PT0gaXRlbS5pZCk7XHJcbiAgICAgICAgICBpbmRleEl0ZW0gPiAtMSAmJiB0aGlzLnJlc3VsdEFjY2Vzcy51c2VyR3JvdXBzLnNwbGljZShpbmRleEl0ZW0sIDEpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvblJlbW92ZUNoaXAodHlwZTogT3B0aW9uU2VsZWN0QWNjZXNzRW51bSwgaXRlbSwgaW5kZXgpIHtcclxuICAgIHN3aXRjaCAodHlwZSkge1xyXG4gICAgICBjYXNlIHRoaXMuT1BUSU9OX0VOVU0uUEVSU09OOlxyXG4gICAgICAgIHRoaXMucmVzdWx0QWNjZXNzLnBlcnNvbnMuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgICBpZiAodGhpcy5wZXJzb25GaWx0ZXJlZFtpbmRleF0pIHtcclxuICAgICAgICAgIHRoaXMucGVyc29uRmlsdGVyZWRbaW5kZXhdLnNlbGVjdGVkID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIHRoaXMuT1BUSU9OX0VOVU0uVVNFUl9HUk9VUDpcclxuICAgICAgICB0aGlzLnJlc3VsdEFjY2Vzcy51c2VyR3JvdXBzLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgICAgaWYgKHRoaXMudXNlckdyb3VwRmlsdGVyZWRbaW5kZXhdKSB7XHJcbiAgICAgICAgICB0aGlzLnVzZXJHcm91cEZpbHRlcmVkW2luZGV4XS5zZWxlY3RlZCA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSB0aGlzLk9QVElPTl9FTlVNLkRFUEFSVE1FTlQ6XHJcbiAgICAgICAgdGhpcy5yZXN1bHRBY2Nlc3MuZGVwYXJ0bWVudHMuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgICB0aGlzLl9kZXBhcnRtZW50U2VsZWN0ZWQgPSBfLmNsb25lRGVlcCh0aGlzLnJlc3VsdEFjY2Vzcy5kZXBhcnRtZW50cyk7XHJcbiAgICAgICAgaWYgKCF0aGlzLnRyZWVEZXBhcnRtZW50KVxyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMudHJlZURlcGFydG1lbnQub25SZW1vdmVOb2RlKGl0ZW0uaWQpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uU2VsZWN0aW9uVHlwZUNoYW5nZShldmVudDogTWF0U2VsZWN0Q2hhbmdlKSB7XHJcbiAgICBzd2l0Y2ggKGV2ZW50LnZhbHVlKSB7XHJcbiAgICAgIGNhc2UgdGhpcy5PUFRJT05fRU5VTS5QRVJTT046XHJcbiAgICAgICAgdGhpcy5idWlsZFBlcnNvbkZvcm0oKTtcclxuICAgICAgICB0aGlzLl9maWx0ZXJPcHRpb25QZXJzb25DaGFuZ2UoKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSB0aGlzLk9QVElPTl9FTlVNLkRFUEFSVE1FTlQ6XHJcbiAgICAgICAgdGhpcy5kaWFsb2dEYXRhLnRyZWVEZXBhcnRtZW50Q29uZmlnLnNlbGVjdGVkTGlzdCA9IHRoaXMuc2VsZWN0ZWREZXBhcnRtZW50cztcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICAgIHRoaXMuZ2V0TG9hZGluZyQubmV4dCh0cnVlKTtcclxuICAgIHRoaXMuZGlhbG9nUmVmLnVwZGF0ZVNpemUodGhpcy5kaWFsb2dEYXRhLnNpemVVcGRhdGVEZWZhdWx0KTtcclxuICAgIHRoaXMub25TZWxlY3RPcHRpb25DaGFuZ2UkLm5leHQoZXZlbnQpO1xyXG4gICAgdGhpcy5jZFJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG5cclxuICBzZXRGb3JtQ29udHJvbFZhbHVlKGZvcm1Db250cm9sTmFtZXM6IHN0cmluZ1tdLCB2YWx1ZXMpIHtcclxuICAgIGZvcm1Db250cm9sTmFtZXMuZm9yRWFjaCgoY29udHJvbE5hbWUsIF9pbmRleCkgPT4ge1xyXG4gICAgICB0aGlzLnBlcnNvbkZvcm0uZ2V0KGNvbnRyb2xOYW1lKT8uc2V0VmFsdWUodmFsdWVzW19pbmRleF0pO1xyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIGlzQ2hlY2tBbGwodHlwZTogT3B0aW9uU2VsZWN0QWNjZXNzRW51bSkge1xyXG4gICAgc3dpdGNoICh0eXBlKSB7XHJcbiAgICAgIGNhc2UgdGhpcy5PUFRJT05fRU5VTS5QRVJTT046XHJcbiAgICAgICAgcmV0dXJuICF0aGlzLmRpYWxvZ0RhdGEubW9kZVNlbGVjdE9uZVBlcnNvbiAmJiB0aGlzLnBlcnNvbkZpbHRlcmVkLmxlbmd0aCAmJiB0aGlzLnBlcnNvbkZpbHRlcmVkLmV2ZXJ5KHggPT4geC5zZWxlY3RlZCk7XHJcbiAgICAgIGNhc2UgdGhpcy5PUFRJT05fRU5VTS5VU0VSX0dST1VQOlxyXG4gICAgICAgIHJldHVybiAhdGhpcy5kaWFsb2dEYXRhLm1vZGVTZWxlY3RPbmVVc2VyR3JvdXAgJiYgdGhpcy51c2VyR3JvdXBGaWx0ZXJlZC5sZW5ndGggJiYgdGhpcy51c2VyR3JvdXBGaWx0ZXJlZC5ldmVyeSh4ID0+IHguc2VsZWN0ZWQpO1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGlzRGlzYWJsZWRTZWxlY3RBbGwodHlwZTogT3B0aW9uU2VsZWN0QWNjZXNzRW51bSkge1xyXG4gICAgc3dpdGNoICh0eXBlKSB7XHJcbiAgICAgIGNhc2UgT3B0aW9uU2VsZWN0QWNjZXNzRW51bS5QRVJTT046IHJldHVybiAhdGhpcy5wZXJzb25GaWx0ZXJlZC5sZW5ndGggfHwgdGhpcy5wZXJzb25GaWx0ZXJlZC5ldmVyeSh4ID0+ICF0aGlzLmFsbG93UmVtb3ZlKHR5cGUsIHgpKVxyXG4gICAgICBjYXNlIE9wdGlvblNlbGVjdEFjY2Vzc0VudW0uVVNFUl9HUk9VUDogcmV0dXJuICF0aGlzLnVzZXJHcm91cEZpbHRlcmVkLmxlbmd0aCB8fCB0aGlzLnVzZXJHcm91cEZpbHRlcmVkLmV2ZXJ5KHggPT4gIXRoaXMuYWxsb3dSZW1vdmUodHlwZSwgeCkpXHJcbiAgICAgIGRlZmF1bHQ6IHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGlzSW5kZXRlcm1pbmF0ZSh0eXBlOiBPcHRpb25TZWxlY3RBY2Nlc3NFbnVtKSB7XHJcbiAgICBzd2l0Y2ggKHR5cGUpIHtcclxuICAgICAgY2FzZSB0aGlzLk9QVElPTl9FTlVNLlBFUlNPTjpcclxuICAgICAgICByZXR1cm4gIXRoaXMuZGlhbG9nRGF0YS5tb2RlU2VsZWN0T25lUGVyc29uICYmICF0aGlzLmlzQ2hlY2tBbGwodHlwZSkgJiYgdGhpcy5wZXJzb25GaWx0ZXJlZD8uc29tZSh4ID0+IHguc2VsZWN0ZWQpO1xyXG4gICAgICBjYXNlIHRoaXMuT1BUSU9OX0VOVU0uVVNFUl9HUk9VUDpcclxuICAgICAgICByZXR1cm4gIXRoaXMuZGlhbG9nRGF0YS5tb2RlU2VsZWN0T25lVXNlckdyb3VwICYmICF0aGlzLmlzQ2hlY2tBbGwodHlwZSkgJiYgdGhpcy51c2VyR3JvdXBGaWx0ZXJlZD8uc29tZSh4ID0+IHguc2VsZWN0ZWQpO1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uQ2hlY2tBbGwodHlwZTogT3B0aW9uU2VsZWN0QWNjZXNzRW51bSwgJGV2ZW50KSB7XHJcbiAgICBpZiAodGhpcy5pc0Rpc2FibGVkU2VsZWN0QWxsKHR5cGUpKVxyXG4gICAgICByZXR1cm47XHJcbiAgICAkZXZlbnQuY2hlY2tlZCA9ICEkZXZlbnQuY2hlY2tlZDtcclxuICAgIHN3aXRjaCAodHlwZSkge1xyXG4gICAgICBjYXNlIHRoaXMuT1BUSU9OX0VOVU0uUEVSU09OOiB7XHJcbiAgICAgICAgaWYgKHRoaXMuZGlhbG9nRGF0YS5tb2RlU2VsZWN0T25lUGVyc29uKSB7XHJcbiAgICAgICAgICAkZXZlbnQuY2hlY2tlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIXRoaXMucGVyc29uRmlsdGVyZWQubGVuZ3RoKVxyXG4gICAgICAgICAgcmV0dXJuO1xyXG5cclxuICAgICAgICB0aGlzLnBlcnNvbkZpbHRlcmVkLmZpbHRlcih4ID0+IHRoaXMuYWxsb3dSZW1vdmUodHlwZSwgeCkpLmZvckVhY2goeCA9PiB4LnNlbGVjdGVkID0gJGV2ZW50LmNoZWNrZWQpO1xyXG4gICAgICAgIGNvbnN0IGlkRmlsdGVyZWQgPSB0aGlzLnBlcnNvbkZpbHRlcmVkLm1hcCh4ID0+IHguaWQpO1xyXG4gICAgICAgIGlmICgkZXZlbnQuY2hlY2tlZCkge1xyXG4gICAgICAgICAgY29uc3QgaWRQZXJzb25TZWxlY3RlZCA9IHRoaXMucmVzdWx0QWNjZXNzLnBlcnNvbnMubWFwKHggPT4geC5pZCk7XHJcbiAgICAgICAgICB0aGlzLnJlc3VsdEFjY2Vzcy5wZXJzb25zID0gWy4uLnRoaXMucmVzdWx0QWNjZXNzLnBlcnNvbnMsIC4uLnRoaXMucGVyc29uRmlsdGVyZWQuZmlsdGVyKHggPT4gdGhpcy5hbGxvd1JlbW92ZSh0eXBlLCB4KSAmJiAhaWRQZXJzb25TZWxlY3RlZC5pbmNsdWRlcyh4LmlkKSldO1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnJlc3VsdEFjY2Vzcy5wZXJzb25zID0gdGhpcy5yZXN1bHRBY2Nlc3MucGVyc29ucy5maWx0ZXIoeCA9PiAhdGhpcy5hbGxvd1JlbW92ZSh0eXBlLCB4KSB8fCAhaWRGaWx0ZXJlZC5pbmNsdWRlcyh4LmlkKSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgICAgY2FzZSB0aGlzLk9QVElPTl9FTlVNLlVTRVJfR1JPVVA6IHtcclxuICAgICAgICBpZiAodGhpcy5kaWFsb2dEYXRhLm1vZGVTZWxlY3RPbmVVc2VyR3JvdXApIHtcclxuICAgICAgICAgICRldmVudC5jaGVja2VkID0gZmFsc2U7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHVzZXJHcm91cFBhZ2luZyA9IHRoaXMudXNlckdyb3VwRmlsdGVyZWQ7XHJcbiAgICAgICAgdXNlckdyb3VwUGFnaW5nLmZpbHRlcih4ID0+IHRoaXMuYWxsb3dSZW1vdmUodHlwZSwgeCkpLmZvckVhY2goeCA9PiB4LnNlbGVjdGVkID0gJGV2ZW50LmNoZWNrZWQpO1xyXG4gICAgICAgIGNvbnN0IGlkRmlsdGVyZWQgPSB1c2VyR3JvdXBQYWdpbmcubWFwKHggPT4geC5pZCk7XHJcbiAgICAgICAgaWYgKCRldmVudC5jaGVja2VkKSB7XHJcbiAgICAgICAgICBjb25zdCBpZFNlbGVjdGVkID0gdGhpcy5yZXN1bHRBY2Nlc3MudXNlckdyb3Vwcy5tYXAoeCA9PiB4LmlkKTtcclxuICAgICAgICAgIHRoaXMucmVzdWx0QWNjZXNzLnVzZXJHcm91cHMgPSBbLi4udGhpcy5yZXN1bHRBY2Nlc3MudXNlckdyb3VwcywgLi4udXNlckdyb3VwUGFnaW5nLmZpbHRlcih4ID0+IHRoaXMuYWxsb3dSZW1vdmUodHlwZSwgeCkgJiYgIWlkU2VsZWN0ZWQuaW5jbHVkZXMoeC5pZCkpXTtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5yZXN1bHRBY2Nlc3MudXNlckdyb3VwcyA9IHRoaXMucmVzdWx0QWNjZXNzLnVzZXJHcm91cHMuZmlsdGVyKHggPT4gIXRoaXMuYWxsb3dSZW1vdmUodHlwZSwgeCkgfHwgIWlkRmlsdGVyZWQuaW5jbHVkZXMoeC5pZCkpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25TZWxlY3Rpb25Ob2RlRGVwYXJ0bWVudENoYW5nZSh7IGFkZGVkLCByZW1vdmVkLCB1cGRhdGVkIH06IElTZWxlY3Rpb25Ob2RlQ2hhbmdlPFFNU1RyZWVOb2RlPikge1xyXG4gICAgaWYgKGFkZGVkLmxlbmd0aCkge1xyXG4gICAgICBhZGRlZC5mb3JFYWNoKGl0ZW0gPT4ge1xyXG4gICAgICAgIGlmICh0aGlzLnJlc3VsdEFjY2Vzcy5kZXBhcnRtZW50cy5zb21lKHggPT4geC5pZCA9PT0gaXRlbS5pZCkpXHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgdGhpcy5yZXN1bHRBY2Nlc3MuZGVwYXJ0bWVudHMucHVzaChpdGVtKTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBpZiAocmVtb3ZlZC5sZW5ndGgpIHtcclxuICAgICAgcmVtb3ZlZC5mb3JFYWNoKHggPT4ge1xyXG4gICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5yZXN1bHRBY2Nlc3MuZGVwYXJ0bWVudHMuZmluZEluZGV4KGl0ZW0gPT4gaXRlbS5pZCA9PT0geC5pZCk7XHJcbiAgICAgICAgaWYgKGluZGV4IDwgMClcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB0aGlzLnJlc3VsdEFjY2Vzcy5kZXBhcnRtZW50cy5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIGlmICh1cGRhdGVkLmxlbmd0aCkge1xyXG4gICAgICB1cGRhdGVkLmZvckVhY2goeCA9PiB7XHJcbiAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLnJlc3VsdEFjY2Vzcy5kZXBhcnRtZW50cy5maW5kSW5kZXgoaXRlbSA9PiBpdGVtLmlkID09IHguaWQpO1xyXG4gICAgICAgIGlmIChpbmRleCA8IDApXHJcbiAgICAgICAgICByZXR1cm47XHJcblxyXG4gICAgICAgIGNvbnN0IGRlcGFydG1lbnRzID0gdGhpcy5yZXN1bHRBY2Nlc3MuZGVwYXJ0bWVudHMuZmluZChpdGVtID0+IGl0ZW0uaWQgPT0geC5pZCk7XHJcbiAgICAgICAgaWYgKCFkZXBhcnRtZW50cylcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBkZXBhcnRtZW50cy5jaGlsZHJlbiA9IHguY2hpbGRyZW47XHJcbiAgICAgICAgZGVwYXJ0bWVudHMuY2hpbGRDb3VudCA9IHguY2hpbGRDb3VudDtcclxuXHJcbiAgICAgICAgaWYgKGRlcGFydG1lbnRzLmNoaWxkcmVuLmxlbmd0aClcclxuICAgICAgICAgIGRlcGFydG1lbnRzLmNoaWxkcmVuLmZvckVhY2goeCA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5yZXN1bHRBY2Nlc3MuZGVwYXJ0bWVudHMuZmluZEluZGV4KGl0ZW0gPT4gaXRlbS5pZCA9PT0geC5pZCk7XHJcbiAgICAgICAgICAgIGlmIChpbmRleCA+IC0xKVxyXG4gICAgICAgICAgICAgIHRoaXMucmVzdWx0QWNjZXNzLmRlcGFydG1lbnRzLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgfSk7XHJcbiAgICAgIHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5yZXN1bHRBY2Nlc3MuZGVwYXJ0bWVudHMuZm9yRWFjaChpdGVtID0+IHtcclxuICAgICAgaWYgKCEhaXRlbS5jaGlsZHJlbilcclxuICAgICAgICBpdGVtLmNoaWxkcmVuID0gaXRlbS5jaGlsZHJlbi5maWx0ZXIoKHgsIGluZGV4KSA9PiBpbmRleCA9PT0gaXRlbS5jaGlsZHJlbi5maW5kSW5kZXgoX3ggPT4geC5pZCA9PT0gX3guaWQpKTtcclxuICAgIH0pO1xyXG4gICAgdGhpcy5fZGVwYXJ0bWVudFNlbGVjdGVkID0gXy5jbG9uZURlZXAodGhpcy5yZXN1bHRBY2Nlc3MuZGVwYXJ0bWVudHMpO1xyXG4gICAgdGhpcy5jZFJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG5cclxuICBvblNjb2xsVG9Ob2RlVHJlZURlcGFydG1lbnQobm9kZTogUU1TVHJlZU5vZGUpIHtcclxuICAgIHRoaXMub3B0aW9uU2VsZWN0LnZhbHVlID09PSB0aGlzLk9QVElPTl9FTlVNLkRFUEFSVE1FTlQgJiYgdGhpcy50cmVlRGVwYXJ0bWVudC5zY3JvbGxUb05vZGUobm9kZS5pZClcclxuICB9XHJcblxyXG4gIHRyYWNrQnlGbihpbmRleCwgaXRlbSkge1xyXG4gICAgcmV0dXJuIGluZGV4O1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlUGVyc29uRmlsdGVyKGRhdGE6IFFNU0FjY2Vzc1BhZ2luZ01vZGVsPFFNU0FjY2Vzc0l0ZW0+KSB7XHJcbiAgICB0aGlzLmdldFBlcnNvbiQubmV4dChkYXRhKTtcclxuICAgIHRoaXMuZ2V0TG9hZGluZyQubmV4dChmYWxzZSk7XHJcbiAgICB0aGlzLmdldFNlYXJjaGluZyQubmV4dChmYWxzZSk7XHJcbiAgfVxyXG5cclxuICB1cGRhdGVVc2VyR3JvdXBGaWx0ZXIoZGF0YTogUU1TQWNjZXNzUGFnaW5nTW9kZWw8UU1TQWNjZXNzSXRlbT4pIHtcclxuICAgIHRoaXMuZ2V0VXNlckdyb3VwJC5uZXh0KGRhdGEpO1xyXG4gICAgdGhpcy5nZXRMb2FkaW5nJC5uZXh0KGZhbHNlKTtcclxuICAgIHRoaXMuZ2V0U2VhcmNoaW5nJC5uZXh0KGZhbHNlKTtcclxuICB9XHJcblxyXG4gIG9uUGFnaW5hdG9yRXZlbnQodmFsOiBQYWdlRXZlbnQsIHR5cGU6IE9wdGlvblNlbGVjdEFjY2Vzc0VudW0pIHtcclxuICAgIGlmICh0aGlzLmdldFNlYXJjaGluZyQudmFsdWUpXHJcbiAgICAgIHJldHVybjtcclxuICAgIHRoaXMuZ2V0TG9hZGluZyQubmV4dCh0aGlzLm9wdGlvblNlbGVjdC52YWx1ZSAhPT0gdGhpcy5PUFRJT05fRU5VTS5ERVBBUlRNRU5UKTtcclxuICAgIHRoaXMub25QYWdpbmdFdmVudC5lbWl0KHtcclxuICAgICAgLi4udmFsLFxyXG4gICAgICB0eXBlOiB0eXBlXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIG9uUmVzdWx0RGVwYXJ0bWVudENoYW5nZShldmVudDogUU1TVHJlZU5vZGVbXSkge1xyXG4gICAgLy8gdGhpcy5yZXN1bHRBY2Nlc3MuZGVwYXJ0bWVudHMgPSBldmVudDtcclxuICB9XHJcblxyXG4gIHVwZGF0ZVJlc3VsdFNlYXJjaERlcGFydG1lbnQoZGF0YTogUU1TQWNjZXNzUGFnaW5nTW9kZWw8UU1TRmxhdE5vZGVUcmVlPiA9IG5ldyBRTVNBY2Nlc3NQYWdpbmdNb2RlbDxRTVNGbGF0Tm9kZVRyZWU+KCkpIHtcclxuICAgIGlmICghdGhpcy50cmVlRGVwYXJ0bWVudClcclxuICAgICAgcmV0dXJuO1xyXG4gICAgZGF0YSA9IGRhdGEgYXMgUU1TRGVwYXJ0bWVudFBhZ2luZ01vZGVsPFFNU0ZsYXROb2RlVHJlZT47XHJcbiAgICBpZiAodGhpcy5kaWFsb2dEYXRhLmRpc2FibGVTZWxlY3RlZExpc3QpIHtcclxuICAgICAgZGF0YS5kYXRhLmZvckVhY2goeCA9PiB4LmRpc2FibGVkID0gIXRoaXMuYWxsb3dSZW1vdmUoT3B0aW9uU2VsZWN0QWNjZXNzRW51bS5ERVBBUlRNRU5ULCB4KSk7XHJcbiAgICB9XHJcbiAgICB0aGlzLnRyZWVEZXBhcnRtZW50LnNldFJlc3VsdFNlYXJjaChkYXRhKTtcclxuICB9XHJcblxyXG4gIGdlbmVyYXRlVG9vbHRpcChub2RlOiBhbnkpIHtcclxuICAgIGlmICh0aGlzLmRpYWxvZ0RhdGE/LmZvcm1hdFRvb2x0aXApXHJcbiAgICAgIHJldHVybiB0aGlzLmRpYWxvZ0RhdGEuZm9ybWF0VG9vbHRpcChub2RlKTtcclxuICAgIHJldHVybiAobm9kZT8uaXNHcm91cCkgPyB0aGlzLmZvcm1hdFN0cmluZyh0aGlzLkxBTkcuVE9PTFRJUF9JTkNMVURFX1NVQl9ERVBBUlRNRU5ULCBub2RlLm5hbWUsIG5vZGUuY2hpbGRyZW4/Lmxlbmd0aC50b1N0cmluZygpKSA6IChgJHtub2RlLm5hbWV9ICR7bm9kZT8uc3ViTmFtZSA/IGAtICgke25vZGUuc3ViTmFtZX0pYCA6ICcnfWApO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBmb3JtYXRTdHJpbmcoLi4ucmVwbGFjZW1lbnRzOiBzdHJpbmdbXSk6IHN0cmluZyB7XHJcbiAgICBsZXQgcmVzdWx0ID0gYXJndW1lbnRzWzBdO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoIC0gMTsgaSsrKSB7XHJcbiAgICAgIGNvbnN0IHJlZyA9IG5ldyBSZWdFeHAoYFxcXFx7JHtpfVxcXFx9YCwgJ2dtJyk7XHJcbiAgICAgIHJlc3VsdCA9IHJlc3VsdC5yZXBsYWNlKHJlZywgYXJndW1lbnRzW2kgKyAxXSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG4gIH1cclxuXHJcbiAgaGFzSXRlbVNlbGVjdGVkKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKHRoaXMucmVzdWx0QWNjZXNzKS5zb21lKGtleSA9PiAhIXRoaXMucmVzdWx0QWNjZXNzW2tleV0/Lmxlbmd0aClcclxuICB9XHJcblxyXG4gIHVwZGF0ZURlcGFydG1lbnQoZGF0YTogUU1TVHJlZU5vZGVbXSA9IFtdKSB7XHJcbiAgICB0aGlzLmdldExvYWRpbmckLm5leHQoZmFsc2UpO1xyXG5cclxuICAgIGlmICh0aGlzLmRpYWxvZ0RhdGEuZGlzYWJsZVNlbGVjdGVkTGlzdCkge1xyXG4gICAgICBkYXRhLmZvckVhY2goaXRlbSA9PiBpdGVtLmRpc2FibGVkID0gIXRoaXMuYWxsb3dSZW1vdmUoT3B0aW9uU2VsZWN0QWNjZXNzRW51bS5ERVBBUlRNRU5ULCBpdGVtKSk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmRpYWxvZ0RhdGEudHJlZURlcGFydG1lbnRDb25maWcudHJlZURhdGEgPSBfLmNsb25lRGVlcChkYXRhKTtcclxuICB9XHJcblxyXG4gIHVwZGF0ZU9wdGlvblBlcnNvbkZpbHRlcihkZXBhcnRtZW50RmlsdGVyOiBRTVNGbGF0Tm9kZVRyZWVbXSA9IFtdLCB1c2VyR3JvdXBGaWx0ZXI6IFFNU0FjY2Vzc0l0ZW1bXSA9IFtdKSB7XHJcbiAgICB0aGlzLm9wdGlvbkZpbHRlclBlcnNvbkRhdGFHbG9iYWwuZGVwYXJ0bWVudHMgPSBkZXBhcnRtZW50RmlsdGVyO1xyXG4gICAgdGhpcy5vcHRpb25GaWx0ZXJQZXJzb25EYXRhR2xvYmFsLnVzZXJHcm91cHMgPSB1c2VyR3JvdXBGaWx0ZXI7XHJcbiAgICB0aGlzLmZpbHRlcmVkU2VhcmNoVGV4dEJveC5kZXBhcnRtZW50Lm5leHQoZGVwYXJ0bWVudEZpbHRlcik7XHJcbiAgICB0aGlzLmZpbHRlcmVkU2VhcmNoVGV4dEJveC51c2VyR3JvdXAubmV4dCh1c2VyR3JvdXBGaWx0ZXIpO1xyXG4gIH1cclxuXHJcbiAgc2V0RGVmYXVsdFBhZ2VTaXplT3B0aW9uKGRhdGE6IG51bWJlcltdKSB7XHJcbiAgICB0aGlzLlBBR0VfU0laRV9PUFRJT04gPSBkYXRhO1xyXG4gIH1cclxuICBhbGxvd1JlbW92ZSA9ICh0eXBlOiBPcHRpb25TZWxlY3RBY2Nlc3NFbnVtLCBpdGVtOiBhbnkpOiBib29sZWFuID0+IHtcclxuICAgIGlmICghdGhpcy5kaWFsb2dEYXRhLmRpc2FibGVTZWxlY3RlZExpc3QpXHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgY29uc3QgeyBwZXJzb25zLCBkZXBhcnRtZW50cywgdXNlckdyb3VwcyB9ID0gdGhpcy5kaWFsb2dEYXRhLmRhdGEuc2VsZWN0ZWREYXRhO1xyXG4gICAgc3dpdGNoICh0eXBlKSB7XHJcbiAgICAgIGNhc2UgT3B0aW9uU2VsZWN0QWNjZXNzRW51bS5QRVJTT046IHJldHVybiAhcGVyc29ucy5zb21lKHggPT4geC5pZCA9PSBpdGVtLmlkKVxyXG4gICAgICBjYXNlIE9wdGlvblNlbGVjdEFjY2Vzc0VudW0uREVQQVJUTUVOVDogcmV0dXJuICFkZXBhcnRtZW50cy5zb21lKHggPT4geC5pZCA9PSBpdGVtLmlkKVxyXG4gICAgICBjYXNlIE9wdGlvblNlbGVjdEFjY2Vzc0VudW0uVVNFUl9HUk9VUDogcmV0dXJuICF1c2VyR3JvdXBzLnNvbWUoeCA9PiB4LmlkID09IGl0ZW0uaWQpXHJcbiAgICAgIGRlZmF1bHQ6IHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxuIiwiPGgzIG1hdC1kaWFsb2ctdGl0bGUgY2xhc3M9XCJtb3JlLWFjdGlvblwiPlxuICB7e2RpYWxvZ0RhdGEudGl0bGVEaWFsb2cgfHwgTEFORy5TRUxFQ1RfQUNDRVNTfX1cbiAgPGJ1dHRvbiBtYXREaWFsb2dDbG9zZSBjbGFzcz1cImNsb3NlLWJ0blwiIHFtcy1idG4taWNvbiBjb2xvcj1cImxpZ2h0XCI+XG4gICAgPG1hdC1pY29uIGNsYXNzPVwibWF0LWljb25zLW91dGxpbmVkXCI+Y2xvc2U8L21hdC1pY29uPlxuICA8L2J1dHRvbj5cbjwvaDM+XG48bWF0LWRpYWxvZy1jb250ZW50PlxuICA8ZGl2IFtjbGFzcy5hY3RpdmVdPVwib3B0aW9uU2VsZWN0LnZhbHVlICE9PSBudWxsXCIgY2xhc3M9XCJxbXMtZGlhbG9nLWNvbnRlbnRcIj5cbiAgICA8ZGl2IGNsYXNzPVwiYWNjZXNzLWRpYWxvZy13cmFwZXJcIj5cbiAgICAgIDxtYXQtZm9ybS1maWVsZCAqbmdJZj1cIm9wdGlvbnMubGVuZ3RoID4gMVwiIHFtcy1mb3JtIHFtcy1zZWxlY3QtaW5wdXQgY2xhc3M9XCJmaWVsZC1zZWxlY3Qtb3B0aW9uIHctMTAwIG1iLTJcIlxuICAgICAgICBhcHBlYXJhbmNlPVwiZmlsbFwiPlxuICAgICAgICA8bWF0LWxhYmVsIFthdHRyLmFyaWEtbGFiZWxdPVwiTEFORy5UWVBFXCIgcW1zLXNlbGVjdC1pbnB1dD57e0xBTkcuVFlQRX19PC9tYXQtbGFiZWw+XG4gICAgICAgIDxtYXQtc2VsZWN0IChzZWxlY3Rpb25DaGFuZ2UpPVwib25TZWxlY3Rpb25UeXBlQ2hhbmdlKCRldmVudClcIiBbZm9ybUNvbnRyb2xdPVwib3B0aW9uU2VsZWN0XCIgcGxhY2Vob2xkZXI9XCJTZWxlY3RcIlxuICAgICAgICAgIGRpc2FibGVPcHRpb25DZW50ZXJpbmcgI3NpbmdsZVNlbGVjdCBwYW5lbENsYXNzPVwicW1zLXNlbGVjdC1wYW5lbFwiIHFtcy1zZWxlY3Q+XG5cbiAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgaXRlbSBvZiBvcHRpb25zXCIgW3ZhbHVlXT1cIml0ZW0udHlwZVwiPlxuICAgICAgICAgICAge3sgTEFOR1tpdGVtLmRpc3BsYXlOYW1lXSB9fVxuICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgIDxkaXYgY2xhc3M9XCJib2R5LWRpYWxvZy1jb250YWluZXJcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm9wdGlvbi1zZWxlY3RlZC1jb250ZW50XCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm9wdGlvblNlbGVjdC52YWx1ZSA9PT0gT1BUSU9OX0VOVU0uUEVSU09OXCI+XG4gICAgICAgICAgICA8Zm9ybSAqbmdJZj1cInBlcnNvbkZvcm1cIiBbZm9ybUdyb3VwXT1cInBlcnNvbkZvcm1cIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImdyb3VwLWZpbHRlci1wZXJzb24tb3B0aW9uXCI+XG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkICpuZ0lmPVwib3B0aW9uRmlsdGVyUGVyc29uRGF0YUdsb2JhbC51c2VyR3JvdXBzLmxlbmd0aFwiIHFtcy1mb3JtIHFtcy1zZWxlY3QtaW5wdXRcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwidy0xMDAgIG1iLTJcIiBhcHBlYXJhbmNlPVwiZmlsbFwiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbCBbYXR0ci5hcmlhLWxhYmVsXT1cIkxBTkcuUk9MRVwiIHFtcy1zZWxlY3QtaW5wdXQ+e3tMQU5HLlJPTEV9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgcGFuZWxDbGFzcz1cInFtcy1zZWxlY3QtcGFuZWxcIiBxbXMtc2VsZWN0IGZvcm1Db250cm9sTmFtZT1cInVzZXJHcm91cFwiXG4gICAgICAgICAgICAgICAgICAgIGRpc2FibGVPcHRpb25DZW50ZXJpbmc+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0LXRyaWdnZXI+XG4gICAgICAgICAgICAgICAgICAgICAge3twZXJzb25Gb3JtLmNvbnRyb2xzWyd1c2VyR3JvdXAnXS52YWx1ZT8ubmFtZSB8fCAnJ319XG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdC10cmlnZ2VyPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICA8bmd4LW1hdC1zZWxlY3Qtc2VhcmNoIGZvcm1Db250cm9sTmFtZT1cInVzZXJHcm91cEZpbHRlclwiIHBsYWNlaG9sZGVyTGFiZWw9XCJ7eyBMQU5HLlJPTEUgfX1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgbm9FbnRyaWVzRm91bmRMYWJlbD1cIlwiPlxuICAgICAgICAgICAgICAgICAgICAgIDwvbmd4LW1hdC1zZWxlY3Qtc2VhcmNoPlxuICAgICAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uIG1vZGU9XCJkYXJrXCIgY2xhc3M9XCJvcHQtY2hlY2staWNvblwiXG4gICAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGl0ZW0gb2YgZmlsdGVyZWRTZWFyY2hUZXh0Qm94LnVzZXJHcm91cC52YWx1ZVwiIFt2YWx1ZV09XCJpdGVtXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gcW1zLWVsaXBzaWZ5IHBvc2l0aW9uPVwidG9wXCIgbW9kZT1cImRhcmtcIiBjbGFzcz1cInRleHQtb3B0aW9uLWNvbnRlbnRcIj57eyBpdGVtLm5hbWUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwiY2hlY2staWNvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInBlcnNvbkZvcm0uY29udHJvbHNbJ3VzZXJHcm91cCddLnZhbHVlPy5pZCA9PSBpdGVtLmlkXCI+Y2hlY2s8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICA8c3BhbiBbQGluT3V0QW5pbWF0aW9uXSAoY2xpY2spPVwicGVyc29uRm9ybS5nZXQoJ3VzZXJHcm91cCcpLnNldFZhbHVlKCcnKVwiIGNsYXNzPVwicG9pbnRlciBcIiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgYXJpYS1sYWJlbD1cIkNsZWFyXCIgKm5nSWY9XCJwZXJzb25Gb3JtLmdldCgndXNlckdyb3VwJykudmFsdWUgJiYgIWdldExvYWRpbmckLnZhbHVlXCI+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5jbG9zZTwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgKm5nSWY9XCJvcHRpb25GaWx0ZXJQZXJzb25EYXRhR2xvYmFsLmRlcGFydG1lbnRzLmxlbmd0aFwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cInctMTAwIGlucHV0LXNlbGVjdC1vcHRpb24gIG1iLTJcIiBxbXMtZm9ybSBxbXMtc2VsZWN0LWlucHV0PlxuICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbCBbYXR0ci5hcmlhLWxhYmVsXT1cIkxBTkcuREVQQVJUTUVOVF9VTklUXCI+e3tMQU5HLkRFUEFSVE1FTlRfVU5JVH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdCBwYW5lbENsYXNzPVwicW1zLXNlbGVjdC1wYW5lbFwiIHFtcy1zZWxlY3QgZGlzYWJsZU9wdGlvbkNlbnRlcmluZ1xuICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJkZXBhcnRtZW50XCI+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0LXRyaWdnZXI+XG4gICAgICAgICAgICAgICAgICAgICAge3twZXJzb25Gb3JtLmNvbnRyb2xzWydkZXBhcnRtZW50J10udmFsdWU/Lm5hbWUgfHwgJyd9fVxuICAgICAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3QtdHJpZ2dlcj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgPG5neC1tYXQtc2VsZWN0LXNlYXJjaCBmb3JtQ29udHJvbE5hbWU9XCJkZXBhcnRtZW50RmlsdGVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlckxhYmVsXT1cIkxBTkcuREVQQVJUTUVOVF9VTklUXCIgbm9FbnRyaWVzRm91bmRMYWJlbD1cIlwiPlxuICAgICAgICAgICAgICAgICAgICAgIDwvbmd4LW1hdC1zZWxlY3Qtc2VhcmNoPlxuICAgICAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uIGNsYXNzPVwib3B0LWNoZWNrLWljb25cIiAqbmdGb3I9XCJsZXQgaXRlbSBvZiBmaWx0ZXJlZFNlYXJjaFRleHRCb3guZGVwYXJ0bWVudC52YWx1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cIml0ZW1cIj5cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBxbXMtZWxpcHNpZnkgbW9kZT1cImRhcmtcIiBwb3NpdGlvbj1cInRvcFwiIGNsYXNzPVwidGV4dC1vcHRpb24tY29udGVudFwiPnt7IGl0ZW0ubmFtZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJjaGVjay1pY29uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwicGVyc29uRm9ybS5jb250cm9sc1snZGVwYXJ0bWVudCddLnZhbHVlPy5pZCA9PSBpdGVtLmlkXCI+Y2hlY2s8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICA8c3BhbiAoY2xpY2spPVwic2V0Rm9ybUNvbnRyb2xWYWx1ZShbJ3JlY3Vyc2l2ZScsJ2RlcGFydG1lbnQnXSwgW2ZhbHNlLCcnXSlcIiBbQGluT3V0QW5pbWF0aW9uXVxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInBvaW50ZXJcIiBtYXRTdWZmaXggYXJpYS1sYWJlbD1cIkNsZWFyXCJcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJwZXJzb25Gb3JtLmdldCgnZGVwYXJ0bWVudCcpLnZhbHVlICYmICFnZXRMb2FkaW5nJC52YWx1ZVwiPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24+Y2xvc2U8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIFtAaW5PdXRBbmltYXRpb25dICpuZ0lmPVwicGVyc29uRm9ybS5jb250cm9sc1snZGVwYXJ0bWVudCddLnZhbHVlXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cInctMTAwIHNsaWRlLXRvZ2dsZVwiIGZvcm1Db250cm9sTmFtZT1cInJlY3Vyc2l2ZVwiIGNvbG9yPVwiZGVmYXVsdFwiIHFtcy1ncm91cC1vcHRpb25zPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1sYWJlbFwiPnt7TEFORy5JTkNMVURFX1NVQl9ERVBBUlRNRU5UU319PC9zcGFuPlxuICAgICAgICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG5cbiAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwidy0xMDAgIG1iLTJcIiBhcHBlYXJhbmNlPVwiZmlsbFwiIHFtcy1mb3JtIHFtcy1zZWFyY2gtZmllbGQ+XG4gICAgICAgICAgICAgICAgPG1hdC1sYWJlbCBbYXR0ci5hcmlhLWxhYmVsXT1cIkxBTkcuU0VBUkNIX1dJVEhfTkFNRVwiIGNsYXNzPVwidmlzdWFsbHktaGlkZGVuXCJcbiAgICAgICAgICAgICAgICAgIHFtcy1zZWxlY3QtaW5wdXQ+e3tMQU5HLlNFQVJDSF9XSVRIX05BTUV9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBhcHBlYXJhbmNlPVwib2ZmXCIgW3BsYWNlaG9sZGVyXT1cIkxBTkcuU0VBUkNIX1dJVEhfTkFNRVwiIGZvcm1Db250cm9sTmFtZT1cImtleXdvcmRcIlxuICAgICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIiBhdXRvY29tcGxldGU9XCJvZmZcIiAvPlxuICAgICAgICAgICAgICAgIDxidXR0b24gKm5nSWY9XCIhZ2V0TG9hZGluZyQudmFsdWVcIiBxbXMtYnRuLWljb24gY29sb3I9XCJsaWdodFwiIFtAaW5PdXRBbmltYXRpb25dXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25TZWFyY2hQZXJzb25GcmVlVGV4dCgpXCIgY2xhc3M9XCJwb2ludGVyIG1lLTFcIiBtYXRTdWZmaXggYXJpYS1sYWJlbD1cIlNlYXJjaFwiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1pY29uPnNlYXJjaDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgPG1hdC1wcm9ncmVzcy1zcGlubmVyIFtAaW5PdXRBbmltYXRpb25dICpuZ0lmPVwiZ2V0TG9hZGluZyQudmFsdWVcIiBtYXRTdWZmaXggbW9kZT1cImluZGV0ZXJtaW5hdGVcIlxuICAgICAgICAgICAgICAgICAgZGlhbWV0ZXI9XCIyMFwiPjwvbWF0LXByb2dyZXNzLXNwaW5uZXI+XG4gICAgICAgICAgICAgICAgPHNwYW4gW0Bpbk91dEFuaW1hdGlvbl0gKGNsaWNrKT1cInBlcnNvbkZvcm0uZ2V0KCdrZXl3b3JkJykuc2V0VmFsdWUoJycpXCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwicG9pbnRlciBidG4taWNvbi1jbGVhciBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXIgXCIgbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPVwiQ2xlYXJcIiAqbmdJZj1cInBlcnNvbkZvcm0uZ2V0KCdrZXl3b3JkJykudmFsdWUgJiYgIWdldExvYWRpbmckLnZhbHVlXCI+XG4gICAgICAgICAgICAgICAgICA8YnV0dG9uIHFtcy1idG4taWNvbiBjb2xvcj1cImxpZ2h0XCI+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5jbG9zZTwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cIm9uRmlsdGVyUGVyc29uKClcIiBxbXMtYnRuLW91dGxpbmVkIGNsYXNzPVwidy0xMDAgbXktMVwiPlxuICAgICAgICAgICAgICAgIHt7TEFORy5GSUxURVJ9fVxuICAgICAgICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICAgICAgICA8ZGl2IHFtcy1zY3JvbGxiYXI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIml0ZW1cIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtY2hlY2tib3ggW0Bpbk91dEFuaW1hdGlvbl1cbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCIhZ2V0TG9hZGluZyQudmFsdWUgJiYgcGVyc29uRmlsdGVyZWQubGVuZ3RoICYmICFkaWFsb2dEYXRhLm1vZGVTZWxlY3RPbmVQZXJzb25cIlxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiaXNEaXNhYmxlZFNlbGVjdEFsbChPUFRJT05fRU5VTS5QRVJTT04pXCIgI2NoZWNrUGVyc29uIGNsYXNzPVwidy0xMDAgbWItMSBjaGVja2JveC1hbGxcIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwicGVyc29uRmlsdGVyZWQubGVuZ3RoICYmIG9uQ2hlY2tBbGwoT1BUSU9OX0VOVU0uUEVSU09OLGNoZWNrUGVyc29uKVwiXG4gICAgICAgICAgICAgICAgICAgIFtjaGVja2VkXT1cImlzQ2hlY2tBbGwoT1BUSU9OX0VOVU0uUEVSU09OKVwiIFtpbmRldGVybWluYXRlXT1cImlzSW5kZXRlcm1pbmF0ZShPUFRJT05fRU5VTS5QRVJTT04pXCJcbiAgICAgICAgICAgICAgICAgICAgY29sb3I9XCJkZWZhdWx0XCIgcW1zLWdyb3VwLW9wdGlvbnM+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1sYWJlbCBoZWFkZXItdGl0bGVcIj57e0xBTkcuQ0hPT1NFX0FMTH19IDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4+KDxiPnt7cGVyc29uRmlsdGVyZWQubGVuZ3RofX08L2I+KTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWNoZWNrYm94PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxtYXQtZGl2aWRlciBjbGFzcz1cIm14LWF1dG9cIj48L21hdC1kaXZpZGVyPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJnZXRMb2FkaW5nJC52YWx1ZTsgdGhlbiBsb2FkaW5nXCI+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPGRpdiBbQGluT3V0QW5pbWF0aW9uXSAqbmdJZj1cInBlcnNvbkZpbHRlcmVkLmxlbmd0aCAmJiAhZ2V0TG9hZGluZyQudmFsdWVcIiBbQGxpc3RBbmltYXRpb25dXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cIml0ZW0tbGlzdC13cmFwcGVyXCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaXRlbSAgbXQtMVwiIFtAaW5PdXRBbmltYXRpb25dICpuZ0Zvcj1cImxldCBlbXBsb3llZSBvZiBwZXJzb25GaWx0ZXJlZDsgdHJhY2tCeTogdHJhY2tCeUZuXCI+XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJkaWFsb2dEYXRhLm1vZGVTZWxlY3RPbmVQZXJzb24gP2l0ZW1XaXRob3V0Q2hlY2tib3hUZW1wbGF0ZSA6IGl0ZW1DaGVja2JveFRlbXBsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie2l0ZW06IGVtcGxveWVlLCB0eXBlOiBPUFRJT05fRU5VTS5QRVJTT059XCI+XG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBbQGluT3V0QW5pbWF0aW9uXSAqbmdJZj1cIiFwZXJzb25GaWx0ZXJlZC5sZW5ndGggJiYgIWdldExvYWRpbmckLnZhbHVlXCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaXRlbS1saXN0LXdyYXBwZXIgbm8tcmVzdWx0XCI+XG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwibm9SZXN1bHRcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8bWF0LWRpdmlkZXIgY2xhc3M9XCJteC1hdXRvXCI+PC9tYXQtZGl2aWRlcj5cbiAgICAgICAgICAgICAgICA8cW1zLXBhZ2luYXRvciBvdmVybGF5UGFuZWxDbGFzcz1cInNlbGVjdC1hY2Nlc3MtcGFnaW5hdG9yXCIgI3BhZ2luZ1BlcnNvblxuICAgICAgICAgICAgICAgICAgKm5nSWY9XCJnZXRQZXJzb24kLnZhbHVlLmxlbmd0aCA+IDEwXCIgW2xlbmd0aF09XCJnZXRQZXJzb24kLnZhbHVlLmxlbmd0aFwiIFtudW1IaWRkZW5dPVwiMFwiXG4gICAgICAgICAgICAgICAgICBbcGFnZVNpemVdPVwiZ2V0UGVyc29uJC52YWx1ZS5wYWdlU2l6ZVwiIFtwYWdlU2l6ZU9wdGlvbnNdPVwiUEFHRV9TSVpFX09QVElPTlwiXG4gICAgICAgICAgICAgICAgICAocGFnZSk9J29uUGFnaW5hdG9yRXZlbnQoJGV2ZW50LCBPUFRJT05fRU5VTS5QRVJTT04pJyBbc2l6ZV09J1BBR0lOQVRJT05fU0laRS5tZWRpdW0nPlxuICAgICAgICAgICAgICAgIDwvcW1zLXBhZ2luYXRvcj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Zvcm0+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm9wdGlvblNlbGVjdC52YWx1ZSA9PT0gT1BUSU9OX0VOVU0uVVNFUl9HUk9VUFwiPlxuICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgPGZvcm0gKHN1Ym1pdCk9XCJvbkZpbHRlclVzZXJHcm91cCgpXCI+XG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwidy0xMDAgIG1iLTJcIiBxbXMtZm9ybSBxbXMtc2VhcmNoLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbCBhcmlhLWxhYmVsPVwiVXNlciBncm91cFwiIGNsYXNzPVwidmlzdWFsbHktaGlkZGVuXCIgcW1zLXNlbGVjdC1pbnB1dD5Vc2VyIGdyb3VwPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgICA8aW5wdXQgW2Zvcm1Db250cm9sXT1cInVzZXJHcm91cEZvcm1cIiBtYXRJbnB1dCB0eXBlPVwidGV4dFwiIGF1dG9jb21wbGV0ZT1cIm9mZlwiXG4gICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiVXNlciBncm91cFwiIC8+XG4gICAgICAgICAgICAgICAgICA8YnV0dG9uIFtAaW5PdXRBbmltYXRpb25dICpuZ0lmPVwiIWdldExvYWRpbmckLnZhbHVlXCIgdHlwZT1cInN1Ym1pdFwiIHFtcy1idG4taWNvbiBjb2xvcj1cImxpZ2h0XCJcbiAgICAgICAgICAgICAgICAgICAgbWF0U3VmZml4PlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24+c2VhcmNoPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgPG1hdC1wcm9ncmVzcy1zcGlubmVyIFtAaW5PdXRBbmltYXRpb25dICpuZ0lmPVwiZ2V0TG9hZGluZyQudmFsdWVcIiBtYXRTdWZmaXggbW9kZT1cImluZGV0ZXJtaW5hdGVcIlxuICAgICAgICAgICAgICAgICAgICBkaWFtZXRlcj1cIjIwXCI+PC9tYXQtcHJvZ3Jlc3Mtc3Bpbm5lcj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgW0Bpbk91dEFuaW1hdGlvbl0gKm5nSWY9XCIhIXVzZXJHcm91cEZvcm0udmFsdWUgJiYgIWdldExvYWRpbmckLnZhbHVlXCIgbWF0U3VmZml4IHFtcy1pbnB1dC1jbGVhcj5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwidXNlckdyb3VwRm9ybS5zZXRWYWx1ZSgnJylcIiBxbXMtYnRuLWljb24gY29sb3I9XCJsaWdodFwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5jbG9zZTwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgPC9mb3JtPlxuICAgICAgICAgICAgICA8ZGl2IHFtcy1zY3JvbGxiYXI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIml0ZW1cIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtY2hlY2tib3ggW0Bpbk91dEFuaW1hdGlvbl1cbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCIhZ2V0TG9hZGluZyQudmFsdWUgJiYgKHVzZXJHcm91cEZpbHRlcmVkLmxlbmd0aCAmJiAhZGlhbG9nRGF0YS5tb2RlU2VsZWN0T25lVXNlckdyb3VwKVwiXG4gICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJpc0Rpc2FibGVkU2VsZWN0QWxsKE9QVElPTl9FTlVNLlVTRVJfR1JPVVApXCIgI2NoZWNrVXNlckdyb3VwXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidy0xMDAgY2hlY2tib3gtYWxsIG1iLTFcIiBjb2xvcj1cImRlZmF1bHRcIiBbY2hlY2tlZF09XCJpc0NoZWNrQWxsKE9QVElPTl9FTlVNLlVTRVJfR1JPVVApXCJcbiAgICAgICAgICAgICAgICAgICAgW2luZGV0ZXJtaW5hdGVdPVwiaXNJbmRldGVybWluYXRlKE9QVElPTl9FTlVNLlVTRVJfR1JPVVApXCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInVzZXJHcm91cEZpbHRlcmVkLmxlbmd0aCAmJiBvbkNoZWNrQWxsKE9QVElPTl9FTlVNLlVTRVJfR1JPVVAsY2hlY2tVc2VyR3JvdXApXCJcbiAgICAgICAgICAgICAgICAgICAgcW1zLWdyb3VwLW9wdGlvbnM+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1sYWJlbCBoZWFkZXItdGl0bGVcIj57e0xBTkcuQ0hPT1NFX0FMTH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8c3Bhbj4oPGI+e3t1c2VyR3JvdXBGaWx0ZXJlZC5sZW5ndGh9fTwvYj4pPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPC9tYXQtY2hlY2tib3g+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPG1hdC1kaXZpZGVyIGNsYXNzPVwibXgtYXV0b1wiPjwvbWF0LWRpdmlkZXI+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImdldExvYWRpbmckLnZhbHVlO3RoZW4gbG9hZGluZ1wiPlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJ1c2VyR3JvdXBGaWx0ZXJlZC5sZW5ndGggJiYgIWdldExvYWRpbmckLnZhbHVlXCIgW0BsaXN0QW5pbWF0aW9uXSBjbGFzcz1cIml0ZW0tbGlzdC13cmFwcGVyXCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IFtAaW5PdXRBbmltYXRpb25dIGNsYXNzPVwiaXRlbSBtdC0xXCIgKm5nRm9yPVwibGV0IHVzZXJHcm91cCBvZiB1c2VyR3JvdXBGaWx0ZXJlZFwiPlxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiZGlhbG9nRGF0YS5tb2RlU2VsZWN0T25lVXNlckdyb3VwID8gaXRlbVdpdGhvdXRDaGVja2JveFRlbXBsYXRlIDogaXRlbUNoZWNrYm94VGVtcGxhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7aXRlbTogdXNlckdyb3VwLHR5cGU6IE9QVElPTl9FTlVNLlVTRVJfR1JPVVB9XCI+XG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBbQGluT3V0QW5pbWF0aW9uXSAqbmdJZj1cIiF1c2VyR3JvdXBGaWx0ZXJlZC5sZW5ndGggJiYgIWdldExvYWRpbmckLnZhbHVlXCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaXRlbS1saXN0LXdyYXBwZXIgbm8tcmVzdWx0XCI+XG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwibm9SZXN1bHRcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8bWF0LWRpdmlkZXIgY2xhc3M9XCJteC1hdXRvXCI+PC9tYXQtZGl2aWRlcj5cbiAgICAgICAgICAgICAgICA8cW1zLXBhZ2luYXRvciBvdmVybGF5UGFuZWxDbGFzcz1cInNlbGVjdC1hY2Nlc3MtcGFnaW5hdG9yXCIgI3BhZ2luZ1VzZXJHcm91cCBjbGFzcz1cIm15LTFcIlxuICAgICAgICAgICAgICAgICAgKm5nSWY9XCJnZXRVc2VyR3JvdXAkLnZhbHVlLmxlbmd0aCA+IDEwIFwiIFtsZW5ndGhdPVwiZ2V0VXNlckdyb3VwJC52YWx1ZS5sZW5ndGhcIiBbbnVtSGlkZGVuXT1cIjBcIlxuICAgICAgICAgICAgICAgICAgW3BhZ2VTaXplXT1cImdldFVzZXJHcm91cCQudmFsdWUucGFnZVNpemVcIiBbcGFnZVNpemVPcHRpb25zXT1cIlBBR0VfU0laRV9PUFRJT05cIlxuICAgICAgICAgICAgICAgICAgKHBhZ2UpPSdvblBhZ2luYXRvckV2ZW50KCRldmVudCwgT1BUSU9OX0VOVU0uVVNFUl9HUk9VUCknIFtzaXplXT0nUEFHSU5BVElPTl9TSVpFLm1lZGl1bSc+XG4gICAgICAgICAgICAgICAgPC9xbXMtcGFnaW5hdG9yPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICpuZ0lmPVwib3B0aW9uU2VsZWN0LnZhbHVlID09PSBPUFRJT05fRU5VTS5ERVBBUlRNRU5UICYmIGdldExvYWRpbmckLnZhbHVlOyB0aGVuIGxvYWRpbmdcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwib3B0aW9uU2VsZWN0LnZhbHVlID09PSBPUFRJT05fRU5VTS5ERVBBUlRNRU5UICYmICFnZXRMb2FkaW5nJC52YWx1ZVwiXG4gICAgICAgICAgICBjbGFzcz1cInBlcnNvbi1hY2Nlc3NcIj5cbiAgICAgICAgICAgIDxxbXMtc2VsZWN0LWRlcGFydG1lbnQtdHJlZSAjdHJlZSBbcm93c1NrZWxldG9uXT1cIjhcIiBbY29uZmlnXT1cImRpYWxvZ0RhdGEudHJlZURlcGFydG1lbnRDb25maWdcIlxuICAgICAgICAgICAgICBbbWF4V2lkdGhOb2RlXT1cImRpYWxvZ0RhdGEubWF4V2lkdGhOb2RlXCIgKG9uU2VhcmNoRXZlbnQpPVwib25TZWFyY2hEZXBhcnRtZW50RXZlbnQuZW1pdCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgKG9uVmFsdWVDaGFuZ2VFdmVudCk9XCJvblJlc3VsdERlcGFydG1lbnRDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgICAgIChzZWxlY3Rpb25Ob2RlQ2hhbmdlRXZlbnQpPVwib25TZWxlY3Rpb25Ob2RlRGVwYXJ0bWVudENoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgKG9uUGFnaW5nU2VhcmNoRXZlbnQpPVwib25QYWdpbmF0b3JFdmVudCgkZXZlbnQsIE9QVElPTl9FTlVNLkRFUEFSVE1FTlQpXCI+XG4gICAgICAgICAgICA8L3Ftcy1zZWxlY3QtZGVwYXJ0bWVudC10cmVlPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiAqbmdJZj1cIm9wdGlvblNlbGVjdC52YWx1ZSAhPT0gbnVsbFwiIGNsYXNzPVwicmVzdWx0LXdyYXBwZXJcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJyZXN1bHQtc2VsZWN0ZWQtY29udGFpbmVyXCI+XG4gICAgICAgIDxkaXYgW0Bpbk91dEFuaW1hdGlvbl0gKm5nSWY9XCIob3B0aW9ucy5sZW5ndGggPT09IDEpIHx8IChvcHRpb25zLmxlbmd0aCA+IDEgJiYgb3B0aW9uU2VsZWN0LnZhbHVlICE9PSBudWxsKVwiXG4gICAgICAgICAgY2xhc3M9XCJoZWFkZXItdGl0bGUgcmVzdWx0LWhlYWRlclwiPlxuICAgICAgICAgIDxzcGFuPlxuICAgICAgICAgICAge3tcbiAgICAgICAgICAgIGRpYWxvZ0RhdGEudGl0bGVSZXN1bHQgfHwgTEFORy5SRVNVTFRTfX1cbiAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwib3B0aW9ucy5sZW5ndGggPT09IDEgJiYgaGFzSXRlbVNlbGVjdGVkKClcIj5cbiAgICAgICAgICAgICAgKHt7Z2V0UmVzdWx0VGFiQWN0aXZlKCkubGVuZ3RofX0pXG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInJlc3VsdC1ib2R5XCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNoZWNrRXhpc3RPcHRpb25TZWxlY3QoT1BUSU9OX0VOVU0uUEVSU09OKVwiXG4gICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJvcHRpb25zPy5sZW5ndGggPT0gMSA/IGxpc3RDaGlwIDogdmlld1Jlc3VsdENvbGxhcHNlXCJcbiAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7ZGF0YTpyZXN1bHRBY2Nlc3MucGVyc29ucywgdHlwZTpPUFRJT05fRU5VTS5QRVJTT04sIHRpdGxlOkxBTkcuUEVSU09OfVwiPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjaGVja0V4aXN0T3B0aW9uU2VsZWN0KE9QVElPTl9FTlVNLlVTRVJfR1JPVVApXCJcbiAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIm9wdGlvbnM/Lmxlbmd0aCA9PSAxID8gbGlzdENoaXAgOiB2aWV3UmVzdWx0Q29sbGFwc2VcIlxuICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cIntkYXRhOnJlc3VsdEFjY2Vzcy51c2VyR3JvdXBzLCB0eXBlOk9QVElPTl9FTlVNLlVTRVJfR1JPVVAsIHRpdGxlOkxBTkcuVVNFUl9HUk9VUH1cIj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY2hlY2tFeGlzdE9wdGlvblNlbGVjdChPUFRJT05fRU5VTS5ERVBBUlRNRU5UKVwiXG4gICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJvcHRpb25zPy5sZW5ndGggPT0gMSA/IGxpc3RDaGlwIDogdmlld1Jlc3VsdENvbGxhcHNlXCJcbiAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7ZGF0YTogcmVzdWx0QWNjZXNzLmRlcGFydG1lbnRzLCB0eXBlOk9QVElPTl9FTlVNLkRFUEFSVE1FTlQsIHRpdGxlOkxBTkcuREVQQVJUTUVOVH1cIj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbjwvbWF0LWRpYWxvZy1jb250ZW50PlxuPG1hdC1kaWFsb2ctYWN0aW9ucyBhbGlnbj1cImVuZFwiPlxuICA8bWF0LWRpdmlkZXIgY2xhc3M9XCJ3LTEwMCBtYi0zXCI+PC9tYXQtZGl2aWRlcj5cbiAgPGJ1dHRvbiBjbGFzcz1cIm1lLTJcIiBxbXMtYnRuLXRleHQgbWF0LWRpYWxvZy1jbG9zZT5cbiAgICB7e2RpYWxvZ0RhdGEuY2FuY2VsVGl0bGUgfHwgTEFORy5DQU5DRUx9fVxuICA8L2J1dHRvbj5cbiAgPGJ1dHRvbiAqbmdJZj1cIm9wdGlvblNlbGVjdC52YWx1ZSAhPT0gbnVsbFwiXG4gICAgW2Rpc2FibGVkXT1cIiFoYXNJdGVtU2VsZWN0ZWQoKSAmJiAhZGlhbG9nRGF0YS50cmVlRGVwYXJ0bWVudENvbmZpZy5jYW5BZGROdWxsUmVzdWx0XCIgY2xhc3M9XCJidG4tYWRkXCJcbiAgICBbY2xhc3MucW1zLWJ0bi1kaXNhYmxlZF09XCIhaGFzSXRlbVNlbGVjdGVkKCkgJiYgIWRpYWxvZ0RhdGEudHJlZURlcGFydG1lbnRDb25maWcuY2FuQWRkTnVsbFJlc3VsdFwiXG4gICAgW21hdC1kaWFsb2ctY2xvc2VdPVwicmVzdWx0QWNjZXNzXCIgcW1zLWJ0bj5cbiAgICA8c3Bhbj57e2RpYWxvZ0RhdGEuY29uZmlybVRpdGxlIHx8IExBTkcuQUREfX08L3NwYW4+XG4gIDwvYnV0dG9uPlxuPC9tYXQtZGlhbG9nLWFjdGlvbnM+XG5cbjxuZy10ZW1wbGF0ZSAjbm9SZXN1bHQ+XG4gIDxzdmcgd2lkdGg9XCI4OVwiIGhlaWdodD1cIjEzMFwiIHZpZXdCb3g9XCIwIDAgODkgODhcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cbiAgICA8cmVjdCB4PVwiMC41XCIgd2lkdGg9XCI4OFwiIGhlaWdodD1cIjg4XCIgcng9XCI0NFwiIGZpbGw9XCJ3aGl0ZVwiIC8+XG4gICAgPHJlY3QgeD1cIjAuNVwiIHdpZHRoPVwiODhcIiBoZWlnaHQ9XCI4OFwiIHJ4PVwiNDRcIiBmaWxsPVwiIzAxNjNCMlwiIGZpbGwtb3BhY2l0eT1cIjAuMTJcIiAvPlxuICAgIDxwYXRoXG4gICAgICBkPVwiTTQ0LjUgNTYuNjkzNkw1OC4wOTYgNjQuODk5Nkw1NC40ODggNDkuNDMzNkw2Ni41IDM5LjAyNzZMNTAuNjgyIDM3LjY4NTZMNDQuNSAyMy4wOTk2TDM4LjMxOCAzNy42ODU2TDIyLjUgMzkuMDI3NkwzNC41MTIgNDkuNDMzNkwzMC45MDQgNjQuODk5Nkw0NC41IDU2LjY5MzZaXCJcbiAgICAgIGZpbGw9XCIjMDE2M0IzXCIgLz5cbiAgICA8dGV4dCB4PVwiMTBcIiB5PVwiMTA1XCIgZmlsbD1cIiMwMTYzQjJcIj57e0xBTkcuTk9fUkVTVUxUfX08L3RleHQ+XG4gIDwvc3ZnPlxuPC9uZy10ZW1wbGF0ZT5cbjxuZy10ZW1wbGF0ZSAjbGlzdENoaXAgbGV0LWRhdGE9XCJkYXRhXCIgbGV0LXR5cGU9XCJ0eXBlXCI+XG4gIDxtYXQtY2hpcC1zZXQgW0Bpbk91dEFuaW1hdGlvbl0gKm5nSWY9XCJkYXRhPy5sZW5ndGhcIiBjbGFzcz1cInBhbmVsX19pdGVtIHFtcy1zY3JvbGxiYXJcIj5cbiAgICA8ZGl2IFtAaW5PdXRBbmltYXRpb25fMl0gKm5nRm9yPVwibGV0IGl0ZW0gb2YgZGF0YTsgbGV0IGkgPSBpbmRleFwiPlxuICAgICAgPG1hdC1jaGlwIChjbGljayk9XCJvblNjb2xsVG9Ob2RlVHJlZURlcGFydG1lbnQoaXRlbSlcIiBbQHVwZGF0ZUl0ZW1BbmltYXRpb25dXG4gICAgICAgICpxbXNDb250ZW50Q2hhbmdlcz1cIml0ZW0uY2hpbGRyZW4/Lmxlbmd0aFwiIGNsYXNzPVwiY2hpcC1pdGVtLXJlc3VsdFwiIHFtcy1jaGlwIFtyZW1vdmFibGVdPVwidHJ1ZVwiPlxuICAgICAgICA8c3BhbiBxbXMtY2hpcC1ib2R5PlxuICAgICAgICAgIDxzcGFuIFtxbXMtdG9vbC10aXBdPVwiZ2VuZXJhdGVUb29sdGlwKGl0ZW0pXCIgcG9zaXRpb249XCJ0b3BcIiBtb2RlPVwiZGFya1wiIGNsYXNzPVwidGV4dC1sYWJlbFwiPlxuICAgICAgICAgICAge3tpdGVtLm5hbWV9fVxuICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJpdGVtLnN1Yk5hbWVcIj4oe3sgaXRlbS5zdWJOYW1lIH19KTwvc3Bhbj5cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJjaGlwLWl0ZW0tY2hpbGRyZW5fX2NvdW50IG1zLTFcIiAqbmdJZj1cIml0ZW0/LmNoaWxkcmVuICYmIGl0ZW0/LmlzR3JvdXBcIj5cbiAgICAgICAgICAgIHt7aXRlbS5jaGlsZHJlbi5sZW5ndGh9fS97e2l0ZW0uY2hpbGRDb3VudH19XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAgPGJ1dHRvbiBtYXRDaGlwUmVtb3ZlICpuZ0lmPVwiYWxsb3dSZW1vdmUodHlwZSwgaXRlbSlcIiAoY2xpY2spPVwib25SZW1vdmVDaGlwKHR5cGUsaXRlbSwgaSlcIj5cbiAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJyZW1vdmUtY2hpcC1pY29uXCI+Y2FuY2VsPC9tYXQtaWNvbj5cbiAgICAgICAgICA8bWF0LWljb24gKm5nSWY9XCJhbGxvd1JlbW92ZSh0eXBlLCBpdGVtKSAmJiBkaWFsb2dEYXRhLmZvcm1hdE1zZ0Rpc2FibGVcIiBwb3NpdGlvbj1cInRvcFwiIG1vZGU9XCJkYXJrXCJcbiAgICAgICAgICAgIFtxbXMtdG9vbC10aXBdPVwiZGlhbG9nRGF0YS5mb3JtYXRNc2dEaXNhYmxlKGl0ZW0pXCIgY2xhc3M9XCJyZW1vdmUtY2hpcC1pY29uXCI+aW5mb19pPC9tYXQtaWNvbj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDxidXR0b24gbWF0Q2hpcFJlbW92ZSAqbmdJZj1cIiFhbGxvd1JlbW92ZSh0eXBlLCBpdGVtKSAmJiBkaWFsb2dEYXRhLmZvcm1hdE1zZ0Rpc2FibGVcIlxuICAgICAgICAgIChjbGljayk9XCJvblJlbW92ZUNoaXAodHlwZSxpdGVtLCBpKVwiPlxuICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cInJlbW92ZS1jaGlwLWljb25cIj5jYW5jZWw8L21hdC1pY29uPlxuICAgICAgICAgIDxtYXQtaWNvbiAqbmdJZj1cIiFhbGxvd1JlbW92ZSh0eXBlLCBpdGVtKSAmJiBkaWFsb2dEYXRhLmZvcm1hdE1zZ0Rpc2FibGVcIiBwb3NpdGlvbj1cInRvcFwiIG1vZGU9XCJkYXJrXCJcbiAgICAgICAgICAgIFtxbXMtdG9vbC10aXBdPVwiZGlhbG9nRGF0YS5mb3JtYXRNc2dEaXNhYmxlKGl0ZW0pXCIgY2xhc3M9XCJyZW1vdmUtY2hpcC1pY29uXCI+aW5mb19pPC9tYXQtaWNvbj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L21hdC1jaGlwPlxuICAgIDwvZGl2PlxuICA8L21hdC1jaGlwLXNldD5cbjwvbmctdGVtcGxhdGU+XG5cblxuPG5nLXRlbXBsYXRlICN2aWV3UmVzdWx0Q29sbGFwc2UgbGV0LXRpdGxlPVwidGl0bGVcIiBsZXQtZGF0YT1cImRhdGFcIiBsZXQtdHlwZT1cInR5cGVcIj5cbiAgPG1hdC1leHBhbnNpb24tcGFuZWwgcW1zLWV4cGFuc2lvbiBbZXhwYW5kZWRdPVwib3B0aW9uU2VsZWN0LnZhbHVlID09PSB0eXBlXCI+XG4gICAgPG1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyPlxuICAgICAgPGRpdiBjbGFzcz1cInRpdGxlLWNvbnRlbnRcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInFtcy1saXN0LXRleHRcIj5cbiAgICAgICAgICA8ZGl2IHFtcy1saW5lIGNvbG9yPVwiZGVmYXVsdC1zdWJ0aXRsZVwiPnt7dGl0bGV9fVxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmdy02MDBcIj5cbiAgICAgICAgICAgICAgKHt7ZGF0YT8ubGVuZ3RofX0pXG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcj5cbiAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImxpc3RDaGlwXCIgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cIntkYXRhOiBkYXRhLHR5cGU6IHR5cGV9XCI+XG4gICAgPC9uZy1jb250YWluZXI+XG4gIDwvbWF0LWV4cGFuc2lvbi1wYW5lbD5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjaXRlbVdpdGhvdXRDaGVja2JveFRlbXBsYXRlIGxldC1pdGVtPVwiaXRlbVwiIGxldC10eXBlPVwidHlwZVwiPlxuICA8ZGl2IChjbGljayk9XCJvblNlbGVjdEl0ZW0odHlwZSxpdGVtKVwiIGNsYXNzPVwiaXRlbS13aXRob3V0LWNoZWNrYm94IHctMTAwXCIgW2NsYXNzLmFjdGl2ZV09XCJpdGVtLnNlbGVjdGVkXCI+XG4gICAgPGRpdiBjbGFzcz1cIml0ZW0tY29udGVudFwiPlxuICAgICAgPGRpdiBjbGFzcz1cInRleHQtbGFiZWxcIj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LWxhYmVsIGxhYmVsLWl0ZW0gZnMtMTQgXCI+XG4gICAgICAgICAge3sgaXRlbS5uYW1lIH19XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPHNwYW4gKm5nSWY9XCJpdGVtLnN1Yk5hbWVcIiBjbGFzcz1cIm1zLTEgc3ViLWxhYmVsXCI+KHt7aXRlbS5zdWJOYW1lfX0pPC9zcGFuPlxuICAgICAgPC9kaXY+XG4gICAgICA8c21hbGwgKm5nSWY9XCJpdGVtLmhlbHBUZXh0XCIgY2xhc3M9XCJ0ZXh0LWhlbHAgcHgtMSBmcy0xMiBzdWItbGFiZWxcIj57eyBpdGVtLmhlbHBUZXh0IH19PC9zbWFsbD5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiaXRlbS1zdGF0ZVwiPlxuICAgICAgPG1hdC1pY29uIFtAaW5PdXRBbmltYXRpb25dICpuZ0lmPVwiaXRlbS5zZWxlY3RlZFwiPmNoZWNrPC9tYXQtaWNvbj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2l0ZW1DaGVja2JveFRlbXBsYXRlIGxldC1pdGVtPVwiaXRlbVwiIGxldC10eXBlPVwidHlwZVwiPlxuICA8bWF0LWNoZWNrYm94IFtkaXNhYmxlZF09XCIhYWxsb3dSZW1vdmUodHlwZSwgaXRlbSlcIiBbY2hlY2tlZF09XCJpdGVtLnNlbGVjdGVkXCIgKGNsaWNrKT1cIm9uU2VsZWN0SXRlbSh0eXBlLGl0ZW0pXCJcbiAgICBjbGFzcz1cInctMTAwXCIgY29sb3I9XCJkZWZhdWx0XCIgcW1zLWdyb3VwLW9wdGlvbnM+XG4gICAgPGRpdiBjbGFzcz1cInRleHQtbGFiZWxcIj5cbiAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1sYWJlbCBsYWJlbC1pdGVtIGZzLTE0IFwiPlxuICAgICAgICB7eyBpdGVtLm5hbWUgfX1cbiAgICAgIDwvc3Bhbj5cbiAgICAgIDxzcGFuICpuZ0lmPVwiaXRlbS5zdWJOYW1lXCIgY2xhc3M9XCJtcy0xIHN1Yi1sYWJlbFwiPih7e2l0ZW0uc3ViTmFtZX19KTwvc3Bhbj5cbiAgICA8L2Rpdj5cbiAgICA8c21hbGwgKm5nSWY9XCJpdGVtLmhlbHBUZXh0XCIgY2xhc3M9XCJ0ZXh0LWhlbHAgcHgtMSBmcy0xMiBzdWItbGFiZWxcIj57eyBpdGVtLmhlbHBUZXh0IH19PC9zbWFsbD5cbiAgPC9tYXQtY2hlY2tib3g+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2xvYWRpbmc+XG4gIDxkaXYgY2xhc3M9XCJxbXMtbG9hZGluZy1jb250YWluZXJcIj5cbiAgICA8ZGl2IGNsYXNzPVwicW1zLWxvYWRlclwiICpuZ0Zvcj1cImxldCBpdGVtIG9mIGFyclNrZWxldG9uXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwicW1zLWxvYWRlcl9fd3JhcHBlclwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwicm93LWxvYWRlclwiPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+Il19
|
696
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0LWFjY2Vzcy1kaWFsb2cuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcW1zLWFuZ3VsYXIvc3JjL2xpYi9jb21wb25lbnRzL3NlbGVjdC1hY2Nlc3MtZGlhbG9nL3NlbGVjdC1hY2Nlc3MtZGlhbG9nLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Ftcy1hbmd1bGFyL3NyYy9saWIvY29tcG9uZW50cy9zZWxlY3QtYWNjZXNzLWRpYWxvZy9zZWxlY3QtYWNjZXNzLWRpYWxvZy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBS0wsU0FBUyxFQUNULFlBQVksRUFDWixNQUFNLEVBR04sU0FBUyxFQUNULGlCQUFpQixFQUNsQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQXNCLGtCQUFrQixFQUFvQixNQUFNLGdCQUFnQixDQUFDO0FBQzFGLE9BQU8sRUFBRSw0QkFBNEIsRUFBNkIsTUFBTSw0QkFBNEIsQ0FBQztBQUNyRyxPQUFPLEVBQUUsZUFBZSxFQUFnQixNQUFNLDBCQUEwQixDQUFDO0FBRXpFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRCxPQUFPLEtBQUssQ0FBQyxNQUFNLFFBQVEsQ0FBQztBQUM1QixPQUFPLEVBQUUsZUFBZSxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNoRCxPQUFPLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBSXpELE9BQU8sRUFBRSxjQUFjLEVBQXlCLE1BQU0sa0JBQWtCLENBQUM7QUFFekUsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0sNERBQTRELENBQUM7QUFDM0csT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDbEUsT0FBTyxFQUFFLHNCQUFzQixF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LGlCQUFpQjtnQkFDRyxnQkFBZ0I7c0JBQTlDLFNBQVM7dUJBQUMsa0JBQWtCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBBZnRlckNvbnRlbnRDaGVja2VkLFxyXG4gIEFmdGVyQ29udGVudEluaXQsXHJcbiAgQWZ0ZXJWaWV3SW5pdCxcclxuICBDaGFuZ2VEZXRlY3RvclJlZixcclxuICBDb21wb25lbnQsXHJcbiAgRXZlbnRFbWl0dGVyLFxyXG4gIEluamVjdCxcclxuICBPbkRlc3Ryb3ksXHJcbiAgT25Jbml0LFxyXG4gIFZpZXdDaGlsZCxcclxuICBWaWV3RW5jYXBzdWxhdGlvblxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBVbnR5cGVkRm9ybUJ1aWxkZXIsIFVudHlwZWRGb3JtQ29udHJvbCwgVW50eXBlZEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgTUFUX0NIRUNLQk9YX0RFRkFVTFRfT1BUSU9OUywgTWF0Q2hlY2tib3hEZWZhdWx0T3B0aW9ucyB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NoZWNrYm94JztcclxuaW1wb3J0IHsgTUFUX0RJQUxPR19EQVRBLCBNYXREaWFsb2dSZWYgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xyXG5pbXBvcnQgeyBQYWdlRXZlbnQgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9wYWdpbmF0b3InO1xyXG5pbXBvcnQgeyBNYXRTZWxlY3RDaGFuZ2UgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zZWxlY3QnO1xyXG5pbXBvcnQgKiBhcyBfIGZyb20gJ2xvZGFzaCc7XHJcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgUU1TRmxhdE5vZGVUcmVlIH0gZnJvbSAnLi4vLi4vY29tbW9uL21vZGVscy9xbXMtZmxhdC1ub2RlLm1vZGVsJztcclxuaW1wb3J0IHsgUU1TVHJlZU5vZGUgfSBmcm9tICcuLi8uLi9jb21tb24vbW9kZWxzL3Ftcy10cmVlLW5vZGUubW9kZWwnO1xyXG5pbXBvcnQgeyBUcmFuc2xhdGVMaWJyYXJ5U2VydmljZSB9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy90cmFuc2xhdGlvbi1yZWdpc3RyeS5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IFBhZ2luYXRpb25TaXplLCBRTVNQYWdpbmF0b3JDb21wb25lbnQgfSBmcm9tICcuLi9xbXMtcGFnaW5hdG9yJztcclxuaW1wb3J0IHsgSVNlbGVjdGlvbk5vZGVDaGFuZ2UsIFFNU0RlcGFydG1lbnRQYWdpbmdNb2RlbCB9IGZyb20gJy4uL3NlbGVjdC1kZXBhcnRtZW50LXRyZWUnO1xyXG5pbXBvcnQgeyBTZWxlY3REZXBhcnRtZW50VHJlZUNvbXBvbmVudCB9IGZyb20gJy4uL3NlbGVjdC1kZXBhcnRtZW50LXRyZWUvc2VsZWN0LWRlcGFydG1lbnQtdHJlZS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBTZWxlY3RBY2Nlc3NBbmltYXRpb25UcmlnZ2VyIH0gZnJvbSAnLi9jb21tb24vYW5pbWF0aW9uJztcclxuaW1wb3J0IHsgT3B0aW9uU2VsZWN0QWNjZXNzRW51bSB9IGZyb20gJy4vY29tbW9uL29wdGlvbi1zZWxlY3QtYWNjZXNzLmVudW0nO1xyXG5pbXBvcnQgeyBRTVNBY2Nlc3NJdGVtIH0gZnJvbSAnLi9tb2RlbC9hY2Nlc3MtaXRlbS5tb2RlbCc7XHJcbmltcG9ydCB7IFFNU0FjY2Vzc1BhZ2luZ0NoYW5nZU1vZGVsLCBRTVNBY2Nlc3NQYWdpbmdNb2RlbCB9IGZyb20gJy4vbW9kZWwvYWNjZXNzLXBhZ2luZy5tb2RlbCc7XHJcbmltcG9ydCB7IEZpbHRlclBlcnNvbk1vZGVsIH0gZnJvbSAnLi9tb2RlbC9maWx0ZXItcGVyc29uLm1vZGVsJztcclxuaW1wb3J0IHsgT3B0aW9uU2VsZWN0QWNjZXNzTW9kZWwgfSBmcm9tICcuL21vZGVsL29wdGlvbi1zZWxlY3QtYWNjZXNzLm1vZGVsJztcclxuaW1wb3J0IHsgUU1TU2VsZWN0QWNjZXNzRGlhbG9nIH0gZnJvbSAnLi9tb2RlbC9zZWxlY3QtYWNjZXNzLWNvbmZpZy5tb2RlbCc7XHJcbmltcG9ydCB7IFFNU1NlbGVjdEFjY2Vzc1Jlc3VsdCB9IGZyb20gJy4vbW9kZWwvc2VsZWN0LWFjY2Vzcy1kYXRhJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAncW1zLXNlbGVjdC1hY2Nlc3MtZGlhbG9nJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vc2VsZWN0LWFjY2Vzcy1kaWFsb2cuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL3NlbGVjdC1hY2Nlc3MtZGlhbG9nLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgYW5pbWF0aW9uczogW1NlbGVjdEFjY2Vzc0FuaW1hdGlvblRyaWdnZXJdLFxyXG4gIHByb3ZpZGVyczogW1xyXG4gICAge1xyXG4gICAgICBwcm92aWRlOiBNQVRfQ0hFQ0tCT1hfREVGQVVMVF9PUFRJT05TLFxyXG4gICAgICB1c2VWYWx1ZToge1xyXG4gICAgICAgIGNsaWNrQWN0aW9uOiAnbm9vcCdcclxuICAgICAgfSBhcyBNYXRDaGVja2JveERlZmF1bHRPcHRpb25zXHJcbiAgICB9XHJcbiAgXSxcclxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBRTVNTZWxlY3RBY2Nlc3NEaWFsb2dDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSwgQWZ0ZXJWaWV3SW5pdCwgQWZ0ZXJDb250ZW50SW5pdCwgQWZ0ZXJDb250ZW50Q2hlY2tlZCB7XHJcbiAgbmdVbnN1YmNyaWJlID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcclxuICBMQU5HOiBhbnk7XHJcbiAgb3B0aW9uU2VsZWN0ID0gbmV3IFVudHlwZWRGb3JtQ29udHJvbCgpO1xyXG4gIE9QVElPTl9FTlVNID0gT3B0aW9uU2VsZWN0QWNjZXNzRW51bTtcclxuICBvcHRpb25zOiBPcHRpb25TZWxlY3RBY2Nlc3NNb2RlbFtdID0gW107XHJcblxyXG4gIHByaXZhdGUgX2RlcGFydG1lbnRTZWxlY3RlZDogUU1TVHJlZU5vZGVbXSA9IFtdO1xyXG4gIGdldCBzZWxlY3RlZERlcGFydG1lbnRzKCkge1xyXG4gICAgY29uc3QgZGVwYXJ0bWVudFNlbGVjdGVkOiBRTVNGbGF0Tm9kZVRyZWVbXSA9IFtdO1xyXG4gICAgdGhpcy5fZGVwYXJ0bWVudFNlbGVjdGVkLmZvckVhY2goeCA9PiB7XHJcbiAgICAgIGRlcGFydG1lbnRTZWxlY3RlZC5wdXNoKHtcclxuICAgICAgICBpZDogeC5pZCxcclxuICAgICAgICBncm91cElkOiB4Lmdyb3VwSWQsXHJcbiAgICAgICAgaXNHcm91cDogeC5pc0dyb3VwXHJcbiAgICAgIH0gYXMgUU1TRmxhdE5vZGVUcmVlKTtcclxuICAgICAgaWYgKCF4LmNoaWxkcmVuPy5sZW5ndGgpXHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICBkZXBhcnRtZW50U2VsZWN0ZWQucHVzaCguLi4oeC5jaGlsZHJlbi5tYXAoaXRlbSA9PiAoe1xyXG4gICAgICAgIGlkOiBpdGVtLmlkLFxyXG4gICAgICAgIGdyb3VwSWQ6IGl0ZW0uZ3JvdXBJZCxcclxuICAgICAgICBpc0dyb3VwOiBpdGVtLmlzR3JvdXBcclxuICAgICAgfSBhcyBRTVNGbGF0Tm9kZVRyZWUpKSkpO1xyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gZGVwYXJ0bWVudFNlbGVjdGVkIHx8IFtdO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHBlcnNvbkZvcm06IFVudHlwZWRGb3JtR3JvdXA7XHJcbiAgcHVibGljIHVzZXJHcm91cEZvcm0gPSBuZXcgVW50eXBlZEZvcm1Db250cm9sKCcnKVxyXG4gIHB1YmxpYyBnZXRMb2FkaW5nJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xyXG4gIG9uU2VhcmNoUGVyc29uRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyPEZpbHRlclBlcnNvbk1vZGVsPigpO1xyXG4gIG9uU2VhcmNoUGVyc29uRnJlZVRleHRFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBvblNlYXJjaFVzZXJHcm91cEV2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XHJcbiAgb25TZWFyY2hEZXBhcnRtZW50RXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgb25TZWFyY2hEZXBhcnRtZW50UGFnaW5nRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcclxuICBkZXBhcnRtZW50U2VhcmNoRm9ybSA9IG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woJycpO1xyXG4gIG9uUGFnaW5nRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyPFFNU0FjY2Vzc1BhZ2luZ0NoYW5nZU1vZGVsPigpO1xyXG4gIG9uU2VsZWN0T3B0aW9uQ2hhbmdlJCA9IG5ldyBTdWJqZWN0PE1hdFNlbGVjdENoYW5nZT4oKTtcclxuICB0cmVlRGVwYXJ0bWVudDogU2VsZWN0RGVwYXJ0bWVudFRyZWVDb21wb25lbnRcclxuICBAVmlld0NoaWxkKCd0cmVlJywge1xyXG4gICAgcmVhZDogU2VsZWN0RGVwYXJ0bWVudFRyZWVDb21wb25lbnRcclxuICB9KSBzZXQgdHJlZShkYXRhOiBTZWxlY3REZXBhcnRtZW50VHJlZUNvbXBvbmVudCkge1xyXG4gICAgdGhpcy50cmVlRGVwYXJ0bWVudCA9IGRhdGE7XHJcblxyXG4gICAgY29uc3QgZ3JvdXBzID0gdGhpcy5yZXN1bHRBY2Nlc3MuZGVwYXJ0bWVudHMuZmlsdGVyKHggPT4geC5pc0dyb3VwKTtcclxuICAgIGlmIChncm91cHMubGVuZ3RoKVxyXG4gICAgICBncm91cHMuZm9yRWFjaChncm91cCA9PiB7XHJcbiAgICAgICAgaWYgKCFncm91cC5jaGlsZENvdW50KSB7XHJcbiAgICAgICAgICBpZiAoIXRoaXMudHJlZURlcGFydG1lbnQpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgIGNvbnN0IG5vZGUgPSB0aGlzLnRyZWVEZXBhcnRtZW50LnRyZWVDb250cm9sLmRhdGFOb2Rlcy5maW5kKHggPT4geC5pZCA9PSBncm91cC5pZCk7XHJcbiAgICAgICAgICBpZiAobm9kZSlcclxuICAgICAgICAgICAgZ3JvdXAuY2hpbGRDb3VudCA9IHRoaXMudHJlZURlcGFydG1lbnQuZ2V0TGlzdENoaWxkcmVuT2ZOb2RlKG5vZGUpLmxlbmd0aDtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgQFZpZXdDaGlsZCgncGFnaW5nUGVyc29uJykgcGFnaW5nUGVyc29uOiBRTVNQYWdpbmF0b3JDb21wb25lbnQ7XHJcbiAgQFZpZXdDaGlsZCgncGFnaW5nVXNlckdyb3VwJykgcGFnaW5nVXNlckdyb3VwOiBRTVNQYWdpbmF0b3JDb21wb25lbnQ7XHJcbiAgQFZpZXdDaGlsZCgncGFnaW5nRGVwYXJ0bWVudCcpIHBhZ2luZ0RlcGFydG1lbnQ6IFFNU1BhZ2luYXRvckNvbXBvbmVudDtcclxuXHJcbiAgLyoqIGxpc3QgZmlsdGVyZWQgYnkgc2VhcmNoIGtleXdvcmQgKi9cclxuICBvcHRpb25GaWx0ZXJQZXJzb25EYXRhR2xvYmFsOiB7XHJcbiAgICBkZXBhcnRtZW50czogUU1TRmxhdE5vZGVUcmVlW10sXHJcbiAgICB1c2VyR3JvdXBzOiBRTVNBY2Nlc3NJdGVtW11cclxuICB9ID0ge1xyXG4gICAgICBkZXBhcnRtZW50czogW10sXHJcbiAgICAgIHVzZXJHcm91cHM6IFtdXHJcbiAgICB9O1xyXG5cclxuICBwdWJsaWMgZmlsdGVyZWRTZWFyY2hUZXh0Qm94ID0ge1xyXG4gICAgZGVwYXJ0bWVudDogbmV3IEJlaGF2aW9yU3ViamVjdDxRTVNGbGF0Tm9kZVRyZWVbXT4oW10pLFxyXG4gICAgdXNlckdyb3VwOiBuZXcgQmVoYXZpb3JTdWJqZWN0PFFNU0FjY2Vzc0l0ZW1bXT4oW10pLFxyXG4gIH1cclxuICBnZXRQZXJzb24kID0gbmV3IEJlaGF2aW9yU3ViamVjdDxRTVNBY2Nlc3NQYWdpbmdNb2RlbDxRTVNBY2Nlc3NJdGVtPj4obmV3IFFNU0FjY2Vzc1BhZ2luZ01vZGVsPFFNU0FjY2Vzc0l0ZW0+KCkpO1xyXG4gIGdldCBwZXJzb25GaWx0ZXJlZCgpIHtcclxuICAgIGNvbnN0IHBlcnNvbnMgPSB0aGlzLmdldFBlcnNvbiQudmFsdWU7XHJcbiAgICBjb25zdCBpZHMgPSB0aGlzLnJlc3VsdEFjY2Vzcy5wZXJzb25zLm1hcCh4ID0+IHguaWQpO1xyXG4gICAgcGVyc29ucy5kYXRhPy5mb3JFYWNoKHggPT4geC5zZWxlY3RlZCA9IGlkcy5pbmNsdWRlcyh4LmlkKSk7XHJcbiAgICByZXR1cm4gcGVyc29ucy5kYXRhIHx8IFtdO1xyXG4gIH1cclxuXHJcbiAgZ2V0VXNlckdyb3VwJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8UU1TQWNjZXNzUGFnaW5nTW9kZWw8UU1TQWNjZXNzSXRlbT4+KG5ldyBRTVNBY2Nlc3NQYWdpbmdNb2RlbDxRTVNBY2Nlc3NJdGVtPigpKTtcclxuICBnZXQgdXNlckdyb3VwRmlsdGVyZWQoKSB7XHJcbiAgICBjb25zdCB1c2VyR3JvdXBzID0gdGhpcy5nZXRVc2VyR3JvdXAkLnZhbHVlO1xyXG4gICAgY29uc3QgaWRzID0gdGhpcy5yZXN1bHRBY2Nlc3MudXNlckdyb3Vwcy5tYXAoeCA9PiB4LmlkKTtcclxuICAgIHVzZXJHcm91cHMuZGF0YT8uZm9yRWFjaCh4ID0+IHguc2VsZWN0ZWQgPSBpZHMuaW5jbHVkZXMoeC5pZCkpO1xyXG4gICAgcmV0dXJuIHVzZXJHcm91cHMuZGF0YSB8fCBbXTtcclxuICB9O1xyXG5cclxuICBnZXREZXBhcnRtZW50JCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8UU1TQWNjZXNzUGFnaW5nTW9kZWw8UU1TQWNjZXNzSXRlbT4+KG5ldyBRTVNBY2Nlc3NQYWdpbmdNb2RlbDxRTVNBY2Nlc3NJdGVtPigpKTtcclxuICBnZXQgZGVwYXJ0bWVudEZpbHRlcmVkKCkge1xyXG4gICAgY29uc3QgZGVwYXJ0bWVudHMgPSB0aGlzLmdldERlcGFydG1lbnQkLnZhbHVlO1xyXG4gICAgY29uc3QgaWRzID0gdGhpcy5yZXN1bHRBY2Nlc3MuZGVwYXJ0bWVudHNGbGF0Lm1hcCh4ID0+IHguaWQpO1xyXG4gICAgZGVwYXJ0bWVudHMuZGF0YT8uZm9yRWFjaCh4ID0+IHguc2VsZWN0ZWQgPSBpZHMuaW5jbHVkZXMoeC5pZCkpO1xyXG4gICAgcmV0dXJuIGRlcGFydG1lbnRzLmRhdGEgfHwgW107XHJcbiAgfTtcclxuXHJcblxyXG4gIFBBR0lOQVRJT05fU0laRSA9IFBhZ2luYXRpb25TaXplO1xyXG4gIFBBR0VfU0laRV9PUFRJT046IG51bWJlcltdID0gWzUsIDEwLCAxNSwgMjAsIDI1LCAxMDBdO1xyXG4gIHJlc3VsdEFjY2VzcyA9IG5ldyBRTVNTZWxlY3RBY2Nlc3NSZXN1bHQoKTtcclxuICBhcnJTa2VsZXRvbiA9IG5ldyBBcnJheSg4KS5maWxsKDApO1xyXG4gIC8vcHJldmVudCBldmVudCBwYWdpbmcgd2hlbiBzZWFyY2ggZW1pdCBzZWFyY2ggZXZlbnRcclxuICBnZXRTZWFyY2hpbmckID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBkaWFsb2dSZWY6IE1hdERpYWxvZ1JlZjxRTVNTZWxlY3RBY2Nlc3NEaWFsb2dDb21wb25lbnQ+LFxyXG4gICAgQEluamVjdChNQVRfRElBTE9HX0RBVEEpIHB1YmxpYyBkaWFsb2dEYXRhOiBRTVNTZWxlY3RBY2Nlc3NEaWFsb2csXHJcbiAgICBwdWJsaWMgdHJhbnNsYXRlOiBUcmFuc2xhdGVMaWJyYXJ5U2VydmljZSxcclxuICAgIHByaXZhdGUgX2ZiOiBVbnR5cGVkRm9ybUJ1aWxkZXIsXHJcbiAgICBwcml2YXRlIGNkUmVmOiBDaGFuZ2VEZXRlY3RvclJlZlxyXG4gICkge1xyXG4gICAgdGhpcy5faW5pdFJlc3VsdEFjY2VzcygpO1xyXG4gIH1cclxuXHJcbiAgbmdBZnRlckNvbnRlbnRDaGVja2VkKCk6IHZvaWQge1xyXG4gICAgdGhpcy5jZFJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyQ29udGVudEluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmNkUmVmLmRldGVjdENoYW5nZXMoKTtcclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLnRyYW5zbGF0ZS5nZXRMYW5ndWFnZVN1YmplY3QkLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YmNyaWJlKSkuc3Vic2NyaWJlKChyZXMpID0+IHtcclxuICAgICAgaWYgKHJlcykge1xyXG4gICAgICAgIHRoaXMuTEFORyA9IHRoaXMudHJhbnNsYXRlLmdldE9iamVjdExhbmcocmVzKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICB0aGlzLl9idWlsZE9wdGlvblNlbGVjdCgpO1xyXG4gICAgdGhpcy5nZXRMb2FkaW5nJC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJjcmliZSkpXHJcbiAgICAgIC5zdWJzY3JpYmUocmVzcG9uc2UgPT4ge1xyXG4gICAgICAgIGlmIChyZXNwb25zZSkge1xyXG4gICAgICAgICAgdGhpcy5wZXJzb25Gb3JtICYmIHRoaXMucGVyc29uRm9ybS5kaXNhYmxlKCk7XHJcbiAgICAgICAgICB0aGlzLnVzZXJHcm91cEZvcm0gJiYgdGhpcy51c2VyR3JvdXBGb3JtLmRpc2FibGUoKTtcclxuICAgICAgICAgIHRoaXMuZGVwYXJ0bWVudFNlYXJjaEZvcm0gJiYgdGhpcy5kZXBhcnRtZW50U2VhcmNoRm9ybS5kaXNhYmxlKCk7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMucGVyc29uRm9ybSAmJiB0aGlzLnBlcnNvbkZvcm0uZW5hYmxlKCk7XHJcbiAgICAgICAgdGhpcy51c2VyR3JvdXBGb3JtICYmIHRoaXMudXNlckdyb3VwRm9ybS5lbmFibGUoKTtcclxuICAgICAgICB0aGlzLmRlcGFydG1lbnRTZWFyY2hGb3JtICYmIHRoaXMuZGVwYXJ0bWVudFNlYXJjaEZvcm0uZW5hYmxlKCk7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLm5nVW5zdWJjcmliZS5uZXh0KCk7XHJcbiAgICB0aGlzLm5nVW5zdWJjcmliZS5jb21wbGV0ZSgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfYnVpbGRPcHRpb25TZWxlY3QoKSB7XHJcbiAgICBjb25zdCBvcHRpb25PYmogPSB7XHJcbiAgICAgIGVuYWJsZVNlbGVjdERlcGFydG1lbnQ6IHtcclxuICAgICAgICBkaXNwbGF5TmFtZTogJ0RFUEFSVE1FTlQnLFxyXG4gICAgICAgIHR5cGU6IHRoaXMuT1BUSU9OX0VOVU0uREVQQVJUTUVOVFxyXG4gICAgICB9LFxyXG4gICAgICBlbmFibGVTZWxlY3RQZXJzb246IHtcclxuICAgICAgICBkaXNwbGF5TmFtZTogJ1BFUlNPTicsXHJcbiAgICAgICAgdHlwZTogdGhpcy5PUFRJT05fRU5VTS5QRVJTT05cclxuICAgICAgfSxcclxuICAgICAgZW5hYmxlU2VsZWN0VXNlckdyb3VwOiB7XHJcbiAgICAgICAgZGlzcGxheU5hbWU6ICdVU0VSX0dST1VQJyxcclxuICAgICAgICB0eXBlOiB0aGlzLk9QVElPTl9FTlVNLlVTRVJfR1JPVVBcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGZvciAobGV0IGl0ZW0gaW4gdGhpcy5kaWFsb2dEYXRhKSB7XHJcbiAgICAgIGlmICghIXRoaXMuZGlhbG9nRGF0YVtpdGVtXSAmJiBvcHRpb25PYmpbaXRlbV0pIHtcclxuICAgICAgICB0aGlzLm9wdGlvbnMucHVzaChvcHRpb25PYmpbaXRlbV0pXHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcblxyXG4gICAgaWYgKHRoaXMub3B0aW9ucy5sZW5ndGggPT09IDEgfHwgdGhpcy5kaWFsb2dEYXRhLnNraXBGaXJzdEFza2luZ1NjcmVlbikge1xyXG4gICAgICB0aGlzLmRpYWxvZ1JlZi51cGRhdGVTaXplKHRoaXMuZGlhbG9nRGF0YS5zaXplVXBkYXRlRGVmYXVsdCk7XHJcbiAgICAgIHRoaXMub3B0aW9uU2VsZWN0LnNldFZhbHVlKHRoaXMub3B0aW9uc1swXS50eXBlKTtcclxuICAgICAgY29uc3QgZXZlbnQkID0gbmV3IE1hdFNlbGVjdENoYW5nZShudWxsLCB0aGlzLm9wdGlvbnNbMF0udHlwZSk7XHJcbiAgICAgIHRoaXMub25TZWxlY3Rpb25UeXBlQ2hhbmdlKGV2ZW50JCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9pbml0UmVzdWx0QWNjZXNzKCkge1xyXG4gICAgdGhpcy5yZXN1bHRBY2Nlc3MgPSBfLmNsb25lRGVlcCh7XHJcbiAgICAgIC4uLnRoaXMuZGlhbG9nRGF0YS5kYXRhLnNlbGVjdGVkRGF0YSxcclxuICAgICAgZGVwYXJ0bWVudHM6IFtdXHJcbiAgICB9IGFzIFFNU1NlbGVjdEFjY2Vzc1Jlc3VsdCk7XHJcbiAgICAvLyBpbml0IGdyb3VwIHNlbGVjdGVkIGRlcGFydG1lbnRcclxuICAgIHRoaXMuX2RlcGFydG1lbnRTZWxlY3RlZCA9IF8uY2xvbmVEZWVwKHRoaXMuZGlhbG9nRGF0YS5kYXRhLnNlbGVjdGVkRGF0YS5kZXBhcnRtZW50cyk7XHJcbiAgICBjb25zdCBncm91cHMgPSBbXTtcclxuICAgIGNvbnN0IHNpbmdsZUl0ZW0gPSBbXTtcclxuXHJcbiAgICB0aGlzLl9kZXBhcnRtZW50U2VsZWN0ZWQuZm9yRWFjaChpdGVtID0+IHtcclxuICAgICAgaWYgKGl0ZW0uaXNHcm91cCkge1xyXG4gICAgICAgIGdyb3Vwcy5wdXNoKGl0ZW0pO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKCFpdGVtLmdyb3VwSWQpIHtcclxuICAgICAgICBzaW5nbGVJdGVtLnB1c2goaXRlbSk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoIXRoaXMuX2RlcGFydG1lbnRTZWxlY3RlZC5zb21lKHggPT4geC5pZCA9PSBpdGVtLmdyb3VwSWQpKSB7XHJcbiAgICAgICAgaXRlbS5ncm91cElkID0gbnVsbDtcclxuICAgICAgICBzaW5nbGVJdGVtLnB1c2goaXRlbSlcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIGdyb3Vwcy5mb3JFYWNoKGdyb3VwID0+IHtcclxuICAgICAgY29uc3QgY2hpbGQgPSB0aGlzLl9kZXBhcnRtZW50U2VsZWN0ZWQuZmlsdGVyKGl0ZW0gPT4gaXRlbS5ncm91cElkID09IGdyb3VwLmlkKTtcclxuICAgICAgZ3JvdXAuY2hpbGRyZW4gPSBjaGlsZDtcclxuICAgIH0pO1xyXG4gICAgdGhpcy5yZXN1bHRBY2Nlc3MuZGVwYXJ0bWVudHMgPSBbLi4uZ3JvdXBzLCAuLi5zaW5nbGVJdGVtXTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2ZpbHRlck9wdGlvblBlcnNvbkNoYW5nZSgpIHtcclxuICAgIC8vIEZpbHRlciBwZXJzb24gYnkgcm9sZXNcclxuICAgIHRoaXMucGVyc29uRm9ybS5nZXQoJ3VzZXJHcm91cEZpbHRlcicpLnZhbHVlQ2hhbmdlc1xyXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3ViY3JpYmUpLCBkZWJvdW5jZVRpbWUoNTAwKSlcclxuICAgICAgLnN1YnNjcmliZShrZXl3b3JkID0+IHtcclxuICAgICAgICBpZiAoIXRoaXMub3B0aW9uRmlsdGVyUGVyc29uRGF0YUdsb2JhbC51c2VyR3JvdXBzLmxlbmd0aCkge1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIWtleXdvcmQpIHtcclxuICAgICAgICAgIHRoaXMuZmlsdGVyZWRTZWFyY2hUZXh0Qm94LnVzZXJHcm91cC5uZXh0KHRoaXMub3B0aW9uRmlsdGVyUGVyc29uRGF0YUdsb2JhbC51c2VyR3JvdXBzKTtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgcmVzdWx0RmlsdGVyID0gdGhpcy5vcHRpb25GaWx0ZXJQZXJzb25EYXRhR2xvYmFsLnVzZXJHcm91cHMuZmlsdGVyKHVzZXJHcm91cCA9PiB1c2VyR3JvdXAubmFtZS50b0xvY2FsZUxvd2VyQ2FzZSgpLmluY2x1ZGVzKGtleXdvcmQudG9Mb2NhbGVMb3dlckNhc2UoKSkpO1xyXG4gICAgICAgIHRoaXMuZmlsdGVyZWRTZWFyY2hUZXh0Qm94LnVzZXJHcm91cC5uZXh0KHJlc3VsdEZpbHRlcik7XHJcbiAgICAgIH0pO1xyXG4gICAgLy8gRmlsdGVyIHBlcnNvbiBieSBkZXBhcnRtZW50c1xyXG4gICAgdGhpcy5wZXJzb25Gb3JtLmdldCgnZGVwYXJ0bWVudEZpbHRlcicpLnZhbHVlQ2hhbmdlc1xyXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3ViY3JpYmUpKVxyXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICBpZiAoIXRoaXMub3B0aW9uRmlsdGVyUGVyc29uRGF0YUdsb2JhbC5kZXBhcnRtZW50cykge1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgc2VhcmNoID0gdGhpcy5wZXJzb25Gb3JtLmdldCgnZGVwYXJ0bWVudEZpbHRlcicpLnZhbHVlO1xyXG4gICAgICAgIGlmICghc2VhcmNoKSB7XHJcbiAgICAgICAgICB0aGlzLmZpbHRlcmVkU2VhcmNoVGV4dEJveC5kZXBhcnRtZW50Lm5leHQodGhpcy5vcHRpb25GaWx0ZXJQZXJzb25EYXRhR2xvYmFsLmRlcGFydG1lbnRzLnNsaWNlKCkpO1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBzZWFyY2ggPSBzZWFyY2gudG9Mb3dlckNhc2UoKTtcclxuICAgICAgICB0aGlzLmZpbHRlcmVkU2VhcmNoVGV4dEJveC5kZXBhcnRtZW50Lm5leHQoXHJcbiAgICAgICAgICB0aGlzLm9wdGlvbkZpbHRlclBlcnNvbkRhdGFHbG9iYWwuZGVwYXJ0bWVudHMuZmlsdGVyKHggPT4geC5uYW1lLnRvTG93ZXJDYXNlKCkuaW5kZXhPZihzZWFyY2gpID4gLTEpXHJcbiAgICAgICAgKTtcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICBnZXRSZXN1bHRUYWJBY3RpdmUoKSB7XHJcbiAgICBjb25zdCByZXN1bHRPYmogPSB7XHJcbiAgICAgIDA6IHRoaXMucmVzdWx0QWNjZXNzLnBlcnNvbnMsXHJcbiAgICAgIDE6IHRoaXMucmVzdWx0QWNjZXNzLnVzZXJHcm91cHMsXHJcbiAgICAgIDI6IHRoaXMucmVzdWx0QWNjZXNzLmRlcGFydG1lbnRzIHx8IHRoaXMucmVzdWx0QWNjZXNzLmRlcGFydG1lbnRzRmxhdFxyXG4gICAgfVxyXG5cclxuICAgIGNvbnNvbGUubG9nKCdyZXN1bHRPYmonLCByZXN1bHRPYmpbdGhpcy5vcHRpb25TZWxlY3QudmFsdWVdKTtcclxuXHJcbiAgICByZXR1cm4gcmVzdWx0T2JqW3RoaXMub3B0aW9uU2VsZWN0LnZhbHVlXTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBjaGVja0V4aXN0T3B0aW9uU2VsZWN0KG9wdGlvbjogT3B0aW9uU2VsZWN0QWNjZXNzRW51bSk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuICEhdGhpcy5vcHRpb25zLmZpbmQoaXRlbSA9PiBpdGVtLnR5cGUgPT09IG9wdGlvbik7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGJ1aWxkUGVyc29uRm9ybSgpIHtcclxuICAgIHRoaXMucGVyc29uRm9ybSA9IHRoaXMuX2ZiLmdyb3VwKHtcclxuICAgICAgdXNlckdyb3VwOiBbXSxcclxuICAgICAgZGVwYXJ0bWVudDogW10sXHJcbiAgICAgIGRlcGFydG1lbnRGaWx0ZXI6IFsnJ10sXHJcbiAgICAgIHJlY3Vyc2l2ZTogW3tcclxuICAgICAgICB2YWx1ZTogZmFsc2UsIGRpc2FibGVkOiB0cnVlXHJcbiAgICAgIH1dLFxyXG4gICAgICBrZXl3b3JkOiBbJyddLFxyXG4gICAgICB1c2VyR3JvdXBGaWx0ZXI6IFsnJ10sXHJcbiAgICAgIGV4Y2x1ZGVkUXVpdERlcGFydG1lbnRJZDogW3RydWVdXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG5cclxuICBvbkZpbHRlclBlcnNvbigpIHtcclxuICAgIHRoaXMuZ2V0TG9hZGluZyQubmV4dCh0cnVlKTtcclxuICAgIGNvbnN0IGZvcm1WYWx1ZSA9IHRoaXMucGVyc29uRm9ybS5nZXRSYXdWYWx1ZSgpO1xyXG4gICAgY29uc3QgZmlsdGVyRGF0YTogRmlsdGVyUGVyc29uTW9kZWwgPSB7XHJcbiAgICAgIGRlcGFydG1lbnRJZDogZm9ybVZhbHVlLmRlcGFydG1lbnQ/LmlkLFxyXG4gICAgICB1c2VyR3JvdXBJZDogZm9ybVZhbHVlLnVzZXJHcm91cD8uaWQsXHJcbiAgICAgIGtleXdvcmQ6IGZvcm1WYWx1ZS5rZXl3b3JkLFxyXG4gICAgICByZWN1cnNpdmU6IGZvcm1WYWx1ZS5yZWN1cnNpdmVcclxuICAgIH07XHJcbiAgICB0aGlzLmdldFNlYXJjaGluZyQubmV4dCh0cnVlKTtcclxuICAgIHRoaXMuX3Jlc2V0UGFnaW5hdG9yKHRoaXMucGFnaW5nUGVyc29uKTtcclxuICAgIHRoaXMub25TZWFyY2hQZXJzb25FdmVudC5lbWl0KGZpbHRlckRhdGEpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfcmVzZXRQYWdpbmF0b3IocGFnaW5hdG9yOiBRTVNQYWdpbmF0b3JDb21wb25lbnQpIHtcclxuICAgIGlmICghcGFnaW5hdG9yKVxyXG4gICAgICByZXR1cm47XHJcbiAgICBwYWdpbmF0b3IuY2hhbmdlUGFnZSgwKTtcclxuICAgIHBhZ2luYXRvci5yZW5kZXJEaXNwbGF5TnVtYmVyT2ZwYWdlcygpO1xyXG4gIH1cclxuXHJcbiAgb25TZWFyY2hQZXJzb25GcmVlVGV4dCgpIHtcclxuICAgIHRoaXMuZ2V0TG9hZGluZyQubmV4dCh0cnVlKTtcclxuICAgIHRoaXMuZ2V0U2VhcmNoaW5nJC5uZXh0KHRydWUpO1xyXG4gICAgdGhpcy5vblNlYXJjaFBlcnNvbkZyZWVUZXh0RXZlbnQuZW1pdCh0aGlzLnBlcnNvbkZvcm0uZ2V0KCdrZXl3b3JkJykudmFsdWUpO1xyXG4gICAgdGhpcy5fcmVzZXRQYWdpbmF0b3IodGhpcy5wYWdpbmdQZXJzb24pO1xyXG4gIH1cclxuXHJcbiAgb25GaWx0ZXJVc2VyR3JvdXAoKSB7XHJcbiAgICB0aGlzLmdldExvYWRpbmckLm5leHQodHJ1ZSk7XHJcbiAgICB0aGlzLmdldFNlYXJjaGluZyQubmV4dCh0cnVlKTtcclxuICAgIHRoaXMuX3Jlc2V0UGFnaW5hdG9yKHRoaXMucGFnaW5nVXNlckdyb3VwKTtcclxuICAgIHRoaXMub25TZWFyY2hVc2VyR3JvdXBFdmVudC5lbWl0KHRoaXMudXNlckdyb3VwRm9ybS52YWx1ZSk7XHJcbiAgfVxyXG5cclxuICBvbkZpbHRlckRlcGFydG1lbnQoKSB7XHJcbiAgICB0aGlzLmdldExvYWRpbmckLm5leHQodHJ1ZSk7XHJcbiAgICB0aGlzLmdldFNlYXJjaGluZyQubmV4dCh0cnVlKTtcclxuICAgIHRoaXMuX3Jlc2V0UGFnaW5hdG9yKHRoaXMucGFnaW5nRGVwYXJ0bWVudCk7XHJcbiAgICB0aGlzLm9uU2VhcmNoRGVwYXJ0bWVudFBhZ2luZ0V2ZW50LmVtaXQodGhpcy5kZXBhcnRtZW50U2VhcmNoRm9ybS52YWx1ZSk7XHJcbiAgfVxyXG5cclxuICBvblNlbGVjdEl0ZW0odHlwZTogT3B0aW9uU2VsZWN0QWNjZXNzRW51bSwgaXRlbTogUU1TQWNjZXNzSXRlbSkge1xyXG4gICAgaWYgKCF0aGlzLmFsbG93UmVtb3ZlKHR5cGUsIGl0ZW0pKVxyXG4gICAgICByZXR1cm47XHJcbiAgICBpdGVtLnNlbGVjdGVkID0gIWl0ZW0uc2VsZWN0ZWQ7XHJcbiAgICBzd2l0Y2ggKHR5cGUpIHtcclxuICAgICAgY2FzZSBPcHRpb25TZWxlY3RBY2Nlc3NFbnVtLlBFUlNPTjpcclxuICAgICAgICB7XHJcbiAgICAgICAgICBpZiAodGhpcy5kaWFsb2dEYXRhLm1vZGVTZWxlY3RPbmVQZXJzb24pIHtcclxuICAgICAgICAgICAgdGhpcy5yZXN1bHRBY2Nlc3MucGVyc29ucyA9IGl0ZW0uc2VsZWN0ZWQgPyBbaXRlbV0gOiBbXTtcclxuICAgICAgICAgICAgdGhpcy5wZXJzb25GaWx0ZXJlZC5mb3JFYWNoKGl0ZW0gPT4ge1xyXG4gICAgICAgICAgICAgIGlmIChpdGVtLmlkICE9PSBpdGVtLmlkKSB7XHJcbiAgICAgICAgICAgICAgICBpdGVtLnNlbGVjdGVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKGl0ZW0uc2VsZWN0ZWQpIHtcclxuICAgICAgICAgICAgdGhpcy5yZXN1bHRBY2Nlc3MucGVyc29ucy5wdXNoKGl0ZW0pO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBjb25zdCBpbmRleEl0ZW0gPSB0aGlzLnJlc3VsdEFjY2Vzcy5wZXJzb25zLmZpbmRJbmRleCh4ID0+IHguaWQgPT09IGl0ZW0uaWQpO1xyXG4gICAgICAgICAgaW5kZXhJdGVtID4gLTEgJiYgdGhpcy5yZXN1bHRBY2Nlc3MucGVyc29ucy5zcGxpY2UoaW5kZXhJdGVtLCAxKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgT3B0aW9uU2VsZWN0QWNjZXNzRW51bS5VU0VSX0dST1VQOlxyXG4gICAgICAgIHtcclxuICAgICAgICAgIGlmICh0aGlzLmRpYWxvZ0RhdGEubW9kZVNlbGVjdE9uZVVzZXJHcm91cCkge1xyXG4gICAgICAgICAgICB0aGlzLnJlc3VsdEFjY2Vzcy51c2VyR3JvdXBzID0gaXRlbS5zZWxlY3RlZCA/IFtpdGVtXSA6IFtdO1xyXG4gICAgICAgICAgICB0aGlzLnVzZXJHcm91cEZpbHRlcmVkLmZvckVhY2goaXRlbSA9PiB7XHJcbiAgICAgICAgICAgICAgaWYgKGl0ZW0uaWQgIT09IGl0ZW0uaWQpIHtcclxuICAgICAgICAgICAgICAgIGl0ZW0uc2VsZWN0ZWQgPSBmYWxzZVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmIChpdGVtLnNlbGVjdGVkKSB7XHJcbiAgICAgICAgICAgIHRoaXMucmVzdWx0QWNjZXNzLnVzZXJHcm91cHMucHVzaChpdGVtKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBjb25zdCBpbmRleEl0ZW0gPSB0aGlzLnJlc3VsdEFjY2Vzcy51c2VyR3JvdXBzLmZpbmRJbmRleCh4ID0+IHguaWQgPT09IGl0ZW0uaWQpO1xyXG4gICAgICAgICAgaW5kZXhJdGVtID4gLTEgJiYgdGhpcy5yZXN1bHRBY2Nlc3MudXNlckdyb3Vwcy5zcGxpY2UoaW5kZXhJdGVtLCAxKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgT3B0aW9uU2VsZWN0QWNjZXNzRW51bS5ERVBBUlRNRU5UOlxyXG4gICAgICAgIHtcclxuICAgICAgICAgIGlmICh0aGlzLmRpYWxvZ0RhdGEubW9kZVNlbGVjdE9uZVVzZXJHcm91cCkge1xyXG4gICAgICAgICAgICB0aGlzLnJlc3VsdEFjY2Vzcy5kZXBhcnRtZW50c0ZsYXQgPSBpdGVtLnNlbGVjdGVkID8gW2l0ZW1dIDogW107XHJcbiAgICAgICAgICAgIHRoaXMuZGVwYXJ0bWVudEZpbHRlcmVkLmZvckVhY2goaXRlbSA9PiB7XHJcbiAgICAgICAgICAgICAgaWYgKGl0ZW0uaWQgIT09IGl0ZW0uaWQpIHtcclxuICAgICAgICAgICAgICAgIGl0ZW0uc2VsZWN0ZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAoaXRlbS5zZWxlY3RlZCkge1xyXG4gICAgICAgICAgICB0aGlzLnJlc3VsdEFjY2Vzcy5kZXBhcnRtZW50c0ZsYXQucHVzaChpdGVtKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgY29uc3QgaW5kZXhJdGVtID0gdGhpcy5yZXN1bHRBY2Nlc3MuZGVwYXJ0bWVudHNGbGF0LmZpbmRJbmRleCh4ID0+IHguaWQgPT09IGl0ZW0uaWQpO1xyXG4gICAgICAgICAgaW5kZXhJdGVtID4gLTEgJiYgdGhpcy5yZXN1bHRBY2Nlc3MuZGVwYXJ0bWVudHNGbGF0LnNwbGljZShpbmRleEl0ZW0sIDEpO1xyXG4gICAgICAgIH1cclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvblJlbW92ZUNoaXAodHlwZTogT3B0aW9uU2VsZWN0QWNjZXNzRW51bSwgaXRlbSwgaW5kZXgpIHtcclxuICAgIHN3aXRjaCAodHlwZSkge1xyXG4gICAgICBjYXNlIHRoaXMuT1BUSU9OX0VOVU0uUEVSU09OOlxyXG4gICAgICAgIHRoaXMucmVzdWx0QWNjZXNzLnBlcnNvbnMuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgICBpZiAodGhpcy5wZXJzb25GaWx0ZXJlZFtpbmRleF0pIHtcclxuICAgICAgICAgIHRoaXMucGVyc29uRmlsdGVyZWRbaW5kZXhdLnNlbGVjdGVkID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIHRoaXMuT1BUSU9OX0VOVU0uVVNFUl9HUk9VUDpcclxuICAgICAgICB0aGlzLnJlc3VsdEFjY2Vzcy51c2VyR3JvdXBzLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgICAgaWYgKHRoaXMudXNlckdyb3VwRmlsdGVyZWRbaW5kZXhdKSB7XHJcbiAgICAgICAgICB0aGlzLnVzZXJHcm91cEZpbHRlcmVkW2luZGV4XS5zZWxlY3RlZCA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSB0aGlzLk9QVElPTl9FTlVNLkRFUEFSVE1FTlQ6XHJcbiAgICAgICAgaWYgKCF0aGlzLmRpYWxvZ0RhdGEuaXNEZXBhcnRtZW50UGFnaW5nKSB7XHJcbiAgICAgICAgICB0aGlzLnJlc3VsdEFjY2Vzcy5kZXBhcnRtZW50cy5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgICAgICAgdGhpcy5fZGVwYXJ0bWVudFNlbGVjdGVkID0gXy5jbG9uZURlZXAodGhpcy5yZXN1bHRBY2Nlc3MuZGVwYXJ0bWVudHMpO1xyXG4gICAgICAgICAgaWYgKCF0aGlzLnRyZWVEZXBhcnRtZW50KVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICB0aGlzLnRyZWVEZXBhcnRtZW50Lm9uUmVtb3ZlTm9kZShpdGVtLmlkKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLnJlc3VsdEFjY2Vzcy5kZXBhcnRtZW50c0ZsYXQuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgICAgIGlmICh0aGlzLmRlcGFydG1lbnRGaWx0ZXJlZFtpbmRleF0pIHtcclxuICAgICAgICAgICAgdGhpcy5kZXBhcnRtZW50RmlsdGVyZWRbaW5kZXhdLnNlbGVjdGVkID0gZmFsc2U7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25TZWxlY3Rpb25UeXBlQ2hhbmdlKGV2ZW50OiBNYXRTZWxlY3RDaGFuZ2UpIHtcclxuICAgIHN3aXRjaCAoZXZlbnQudmFsdWUpIHtcclxuICAgICAgY2FzZSB0aGlzLk9QVElPTl9FTlVNLlBFUlNPTjpcclxuICAgICAgICB0aGlzLmJ1aWxkUGVyc29uRm9ybSgpO1xyXG4gICAgICAgIHRoaXMuX2ZpbHRlck9wdGlvblBlcnNvbkNoYW5nZSgpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIHRoaXMuT1BUSU9OX0VOVU0uREVQQVJUTUVOVDpcclxuICAgICAgICB0aGlzLmRpYWxvZ0RhdGEudHJlZURlcGFydG1lbnRDb25maWcuc2VsZWN0ZWRMaXN0ID0gdGhpcy5zZWxlY3RlZERlcGFydG1lbnRzO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gICAgdGhpcy5nZXRMb2FkaW5nJC5uZXh0KHRydWUpO1xyXG4gICAgdGhpcy5kaWFsb2dSZWYudXBkYXRlU2l6ZSh0aGlzLmRpYWxvZ0RhdGEuc2l6ZVVwZGF0ZURlZmF1bHQpO1xyXG4gICAgdGhpcy5vblNlbGVjdE9wdGlvbkNoYW5nZSQubmV4dChldmVudCk7XHJcbiAgICB0aGlzLmNkUmVmLmRldGVjdENoYW5nZXMoKTtcclxuICB9XHJcblxyXG4gIHNldEZvcm1Db250cm9sVmFsdWUoZm9ybUNvbnRyb2xOYW1lczogc3RyaW5nW10sIHZhbHVlcykge1xyXG4gICAgZm9ybUNvbnRyb2xOYW1lcy5mb3JFYWNoKChjb250cm9sTmFtZSwgX2luZGV4KSA9PiB7XHJcbiAgICAgIHRoaXMucGVyc29uRm9ybS5nZXQoY29udHJvbE5hbWUpPy5zZXRWYWx1ZSh2YWx1ZXNbX2luZGV4XSk7XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgaXNDaGVja0FsbCh0eXBlOiBPcHRpb25TZWxlY3RBY2Nlc3NFbnVtKSB7XHJcbiAgICBzd2l0Y2ggKHR5cGUpIHtcclxuICAgICAgY2FzZSB0aGlzLk9QVElPTl9FTlVNLlBFUlNPTjpcclxuICAgICAgICByZXR1cm4gIXRoaXMuZGlhbG9nRGF0YS5tb2RlU2VsZWN0T25lUGVyc29uICYmIHRoaXMucGVyc29uRmlsdGVyZWQubGVuZ3RoICYmIHRoaXMucGVyc29uRmlsdGVyZWQuZXZlcnkoeCA9PiB4LnNlbGVjdGVkKTtcclxuICAgICAgY2FzZSB0aGlzLk9QVElPTl9FTlVNLlVTRVJfR1JPVVA6XHJcbiAgICAgICAgcmV0dXJuICF0aGlzLmRpYWxvZ0RhdGEubW9kZVNlbGVjdE9uZVVzZXJHcm91cCAmJiB0aGlzLnVzZXJHcm91cEZpbHRlcmVkLmxlbmd0aCAmJiB0aGlzLnVzZXJHcm91cEZpbHRlcmVkLmV2ZXJ5KHggPT4geC5zZWxlY3RlZCk7XHJcbiAgICAgIGNhc2UgdGhpcy5PUFRJT05fRU5VTS5ERVBBUlRNRU5UOlxyXG4gICAgICAgIHJldHVybiAhdGhpcy5kaWFsb2dEYXRhLm1vZGVTZWxlY3RPbmVVc2VyR3JvdXAgJiYgdGhpcy5kZXBhcnRtZW50RmlsdGVyZWQubGVuZ3RoICYmIHRoaXMuZGVwYXJ0bWVudEZpbHRlcmVkLmV2ZXJ5KHggPT4geC5zZWxlY3RlZCk7XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaXNEaXNhYmxlZFNlbGVjdEFsbCh0eXBlOiBPcHRpb25TZWxlY3RBY2Nlc3NFbnVtKSB7XHJcbiAgICBzd2l0Y2ggKHR5cGUpIHtcclxuICAgICAgY2FzZSBPcHRpb25TZWxlY3RBY2Nlc3NFbnVtLlBFUlNPTjogcmV0dXJuICF0aGlzLnBlcnNvbkZpbHRlcmVkLmxlbmd0aCB8fCB0aGlzLnBlcnNvbkZpbHRlcmVkLmV2ZXJ5KHggPT4gIXRoaXMuYWxsb3dSZW1vdmUodHlwZSwgeCkpXHJcbiAgICAgIGNhc2UgT3B0aW9uU2VsZWN0QWNjZXNzRW51bS5VU0VSX0dST1VQOiByZXR1cm4gIXRoaXMudXNlckdyb3VwRmlsdGVyZWQubGVuZ3RoIHx8IHRoaXMudXNlckdyb3VwRmlsdGVyZWQuZXZlcnkoeCA9PiAhdGhpcy5hbGxvd1JlbW92ZSh0eXBlLCB4KSlcclxuICAgICAgY2FzZSBPcHRpb25TZWxlY3RBY2Nlc3NFbnVtLkRFUEFSVE1FTlQ6IHJldHVybiAhdGhpcy5kZXBhcnRtZW50RmlsdGVyZWQubGVuZ3RoIHx8IHRoaXMuZGVwYXJ0bWVudEZpbHRlcmVkLmV2ZXJ5KHggPT4gIXRoaXMuYWxsb3dSZW1vdmUodHlwZSwgeCkpXHJcbiAgICAgIGRlZmF1bHQ6IHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGlzSW5kZXRlcm1pbmF0ZSh0eXBlOiBPcHRpb25TZWxlY3RBY2Nlc3NFbnVtKSB7XHJcbiAgICBzd2l0Y2ggKHR5cGUpIHtcclxuICAgICAgY2FzZSB0aGlzLk9QVElPTl9FTlVNLlBFUlNPTjpcclxuICAgICAgICByZXR1cm4gIXRoaXMuZGlhbG9nRGF0YS5tb2RlU2VsZWN0T25lUGVyc29uICYmICF0aGlzLmlzQ2hlY2tBbGwodHlwZSkgJiYgdGhpcy5wZXJzb25GaWx0ZXJlZD8uc29tZSh4ID0+IHguc2VsZWN0ZWQpO1xyXG4gICAgICBjYXNlIHRoaXMuT1BUSU9OX0VOVU0uVVNFUl9HUk9VUDpcclxuICAgICAgICByZXR1cm4gIXRoaXMuZGlhbG9nRGF0YS5tb2RlU2VsZWN0T25lVXNlckdyb3VwICYmICF0aGlzLmlzQ2hlY2tBbGwodHlwZSkgJiYgdGhpcy51c2VyR3JvdXBGaWx0ZXJlZD8uc29tZSh4ID0+IHguc2VsZWN0ZWQpO1xyXG4gICAgICBjYXNlIHRoaXMuT1BUSU9OX0VOVU0uREVQQVJUTUVOVDpcclxuICAgICAgICByZXR1cm4gIXRoaXMuZGlhbG9nRGF0YS5tb2RlU2VsZWN0T25lVXNlckdyb3VwICYmICF0aGlzLmlzQ2hlY2tBbGwodHlwZSkgJiYgdGhpcy5kZXBhcnRtZW50RmlsdGVyZWQ/LnNvbWUoeCA9PiB4LnNlbGVjdGVkKTtcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvbkNoZWNrQWxsKHR5cGU6IE9wdGlvblNlbGVjdEFjY2Vzc0VudW0sICRldmVudCkge1xyXG4gICAgaWYgKHRoaXMuaXNEaXNhYmxlZFNlbGVjdEFsbCh0eXBlKSlcclxuICAgICAgcmV0dXJuO1xyXG4gICAgJGV2ZW50LmNoZWNrZWQgPSAhJGV2ZW50LmNoZWNrZWQ7XHJcbiAgICBzd2l0Y2ggKHR5cGUpIHtcclxuICAgICAgY2FzZSB0aGlzLk9QVElPTl9FTlVNLlBFUlNPTjoge1xyXG4gICAgICAgIGlmICh0aGlzLmRpYWxvZ0RhdGEubW9kZVNlbGVjdE9uZVBlcnNvbikge1xyXG4gICAgICAgICAgJGV2ZW50LmNoZWNrZWQgPSBmYWxzZTtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCF0aGlzLnBlcnNvbkZpbHRlcmVkLmxlbmd0aClcclxuICAgICAgICAgIHJldHVybjtcclxuXHJcbiAgICAgICAgdGhpcy5wZXJzb25GaWx0ZXJlZC5maWx0ZXIoeCA9PiB0aGlzLmFsbG93UmVtb3ZlKHR5cGUsIHgpKS5mb3JFYWNoKHggPT4geC5zZWxlY3RlZCA9ICRldmVudC5jaGVja2VkKTtcclxuICAgICAgICBjb25zdCBpZEZpbHRlcmVkID0gdGhpcy5wZXJzb25GaWx0ZXJlZC5tYXAoeCA9PiB4LmlkKTtcclxuICAgICAgICBpZiAoJGV2ZW50LmNoZWNrZWQpIHtcclxuICAgICAgICAgIGNvbnN0IGlkUGVyc29uU2VsZWN0ZWQgPSB0aGlzLnJlc3VsdEFjY2Vzcy5wZXJzb25zLm1hcCh4ID0+IHguaWQpO1xyXG4gICAgICAgICAgdGhpcy5yZXN1bHRBY2Nlc3MucGVyc29ucyA9IFsuLi50aGlzLnJlc3VsdEFjY2Vzcy5wZXJzb25zLCAuLi50aGlzLnBlcnNvbkZpbHRlcmVkLmZpbHRlcih4ID0+IHRoaXMuYWxsb3dSZW1vdmUodHlwZSwgeCkgJiYgIWlkUGVyc29uU2VsZWN0ZWQuaW5jbHVkZXMoeC5pZCkpXTtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5yZXN1bHRBY2Nlc3MucGVyc29ucyA9IHRoaXMucmVzdWx0QWNjZXNzLnBlcnNvbnMuZmlsdGVyKHggPT4gIXRoaXMuYWxsb3dSZW1vdmUodHlwZSwgeCkgfHwgIWlkRmlsdGVyZWQuaW5jbHVkZXMoeC5pZCkpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICAgIGNhc2UgdGhpcy5PUFRJT05fRU5VTS5VU0VSX0dST1VQOiB7XHJcbiAgICAgICAgaWYgKHRoaXMuZGlhbG9nRGF0YS5tb2RlU2VsZWN0T25lVXNlckdyb3VwKSB7XHJcbiAgICAgICAgICAkZXZlbnQuY2hlY2tlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCB1c2VyR3JvdXBQYWdpbmcgPSB0aGlzLnVzZXJHcm91cEZpbHRlcmVkO1xyXG4gICAgICAgIHVzZXJHcm91cFBhZ2luZy5maWx0ZXIoeCA9PiB0aGlzLmFsbG93UmVtb3ZlKHR5cGUsIHgpKS5mb3JFYWNoKHggPT4geC5zZWxlY3RlZCA9ICRldmVudC5jaGVja2VkKTtcclxuICAgICAgICBjb25zdCBpZEZpbHRlcmVkID0gdXNlckdyb3VwUGFnaW5nLm1hcCh4ID0+IHguaWQpO1xyXG4gICAgICAgIGlmICgkZXZlbnQuY2hlY2tlZCkge1xyXG4gICAgICAgICAgY29uc3QgaWRTZWxlY3RlZCA9IHRoaXMucmVzdWx0QWNjZXNzLnVzZXJHcm91cHMubWFwKHggPT4geC5pZCk7XHJcbiAgICAgICAgICB0aGlzLnJlc3VsdEFjY2Vzcy51c2VyR3JvdXBzID0gWy4uLnRoaXMucmVzdWx0QWNjZXNzLnVzZXJHcm91cHMsIC4uLnVzZXJHcm91cFBhZ2luZy5maWx0ZXIoeCA9PiB0aGlzLmFsbG93UmVtb3ZlKHR5cGUsIHgpICYmICFpZFNlbGVjdGVkLmluY2x1ZGVzKHguaWQpKV07XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMucmVzdWx0QWNjZXNzLnVzZXJHcm91cHMgPSB0aGlzLnJlc3VsdEFjY2Vzcy51c2VyR3JvdXBzLmZpbHRlcih4ID0+ICF0aGlzLmFsbG93UmVtb3ZlKHR5cGUsIHgpIHx8ICFpZEZpbHRlcmVkLmluY2x1ZGVzKHguaWQpKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgICBjYXNlIHRoaXMuT1BUSU9OX0VOVU0uREVQQVJUTUVOVDoge1xyXG4gICAgICAgIGlmICh0aGlzLmRpYWxvZ0RhdGEubW9kZVNlbGVjdE9uZVVzZXJHcm91cCkge1xyXG4gICAgICAgICAgJGV2ZW50LmNoZWNrZWQgPSBmYWxzZTtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgZGVwYXJ0bWVudFBhZ2luZyA9IHRoaXMuZGVwYXJ0bWVudEZpbHRlcmVkO1xyXG4gICAgICAgIGRlcGFydG1lbnRQYWdpbmcuZmlsdGVyKHggPT4gdGhpcy5hbGxvd1JlbW92ZSh0eXBlLCB4KSkuZm9yRWFjaCh4ID0+IHguc2VsZWN0ZWQgPSAkZXZlbnQuY2hlY2tlZCk7XHJcbiAgICAgICAgY29uc3QgaWRGaWx0ZXJlZCA9IGRlcGFydG1lbnRQYWdpbmcubWFwKHggPT4geC5pZCk7XHJcbiAgICAgICAgaWYgKCRldmVudC5jaGVja2VkKSB7XHJcbiAgICAgICAgICBjb25zdCBpZFNlbGVjdGVkID0gdGhpcy5yZXN1bHRBY2Nlc3MuZGVwYXJ0bWVudHNGbGF0Lm1hcCh4ID0+IHguaWQpO1xyXG4gICAgICAgICAgdGhpcy5yZXN1bHRBY2Nlc3MuZGVwYXJ0bWVudHNGbGF0ID0gWy4uLnRoaXMucmVzdWx0QWNjZXNzLmRlcGFydG1lbnRzRmxhdCwgLi4uZGVwYXJ0bWVudFBhZ2luZy5maWx0ZXIoeCA9PiB0aGlzLmFsbG93UmVtb3ZlKHR5cGUsIHgpICYmICFpZFNlbGVjdGVkLmluY2x1ZGVzKHguaWQpKV07XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMucmVzdWx0QWNjZXNzLmRlcGFydG1lbnRzRmxhdCA9IHRoaXMucmVzdWx0QWNjZXNzLmRlcGFydG1lbnRzRmxhdC5maWx0ZXIoeCA9PiAhdGhpcy5hbGxvd1JlbW92ZSh0eXBlLCB4KSB8fCAhaWRGaWx0ZXJlZC5pbmNsdWRlcyh4LmlkKSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvblNlbGVjdGlvbk5vZGVEZXBhcnRtZW50Q2hhbmdlKHsgYWRkZWQsIHJlbW92ZWQsIHVwZGF0ZWQgfTogSVNlbGVjdGlvbk5vZGVDaGFuZ2U8UU1TVHJlZU5vZGU+KSB7XHJcbiAgICBpZiAoYWRkZWQubGVuZ3RoKSB7XHJcbiAgICAgIGFkZGVkLmZvckVhY2goaXRlbSA9PiB7XHJcbiAgICAgICAgaWYgKHRoaXMucmVzdWx0QWNjZXNzLmRlcGFydG1lbnRzLnNvbWUoeCA9PiB4LmlkID09PSBpdGVtLmlkKSlcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB0aGlzLnJlc3VsdEFjY2Vzcy5kZXBhcnRtZW50cy5wdXNoKGl0ZW0pO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIGlmIChyZW1vdmVkLmxlbmd0aCkge1xyXG4gICAgICByZW1vdmVkLmZvckVhY2goeCA9PiB7XHJcbiAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLnJlc3VsdEFjY2Vzcy5kZXBhcnRtZW50cy5maW5kSW5kZXgoaXRlbSA9PiBpdGVtLmlkID09PSB4LmlkKTtcclxuICAgICAgICBpZiAoaW5kZXggPCAwKVxyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMucmVzdWx0QWNjZXNzLmRlcGFydG1lbnRzLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgaWYgKHVwZGF0ZWQubGVuZ3RoKSB7XHJcbiAgICAgIHVwZGF0ZWQuZm9yRWFjaCh4ID0+IHtcclxuICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMucmVzdWx0QWNjZXNzLmRlcGFydG1lbnRzLmZpbmRJbmRleChpdGVtID0+IGl0ZW0uaWQgPT0geC5pZCk7XHJcbiAgICAgICAgaWYgKGluZGV4IDwgMClcclxuICAgICAgICAgIHJldHVybjtcclxuXHJcbiAgICAgICAgY29uc3QgZGVwYXJ0bWVudHMgPSB0aGlzLnJlc3VsdEFjY2Vzcy5kZXBhcnRtZW50cy5maW5kKGl0ZW0gPT4gaXRlbS5pZCA9PSB4LmlkKTtcclxuICAgICAgICBpZiAoIWRlcGFydG1lbnRzKVxyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGRlcGFydG1lbnRzLmNoaWxkcmVuID0geC5jaGlsZHJlbjtcclxuICAgICAgICBkZXBhcnRtZW50cy5jaGlsZENvdW50ID0geC5jaGlsZENvdW50O1xyXG5cclxuICAgICAgICBpZiAoZGVwYXJ0bWVudHMuY2hpbGRyZW4ubGVuZ3RoKVxyXG4gICAgICAgICAgZGVwYXJ0bWVudHMuY2hpbGRyZW4uZm9yRWFjaCh4ID0+IHtcclxuICAgICAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLnJlc3VsdEFjY2Vzcy5kZXBhcnRtZW50cy5maW5kSW5kZXgoaXRlbSA9PiBpdGVtLmlkID09PSB4LmlkKTtcclxuICAgICAgICAgICAgaWYgKGluZGV4ID4gLTEpXHJcbiAgICAgICAgICAgICAgdGhpcy5yZXN1bHRBY2Nlc3MuZGVwYXJ0bWVudHMuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICB9KTtcclxuICAgICAgdGhpcy5jZFJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLnJlc3VsdEFjY2Vzcy5kZXBhcnRtZW50cy5mb3JFYWNoKGl0ZW0gPT4ge1xyXG4gICAgICBpZiAoISFpdGVtLmNoaWxkcmVuKVxyXG4gICAgICAgIGl0ZW0uY2hpbGRyZW4gPSBpdGVtLmNoaWxkcmVuLmZpbHRlcigoeCwgaW5kZXgpID0+IGluZGV4ID09PSBpdGVtLmNoaWxkcmVuLmZpbmRJbmRleChfeCA9PiB4LmlkID09PSBfeC5pZCkpO1xyXG4gICAgfSk7XHJcbiAgICB0aGlzLl9kZXBhcnRtZW50U2VsZWN0ZWQgPSBfLmNsb25lRGVlcCh0aGlzLnJlc3VsdEFjY2Vzcy5kZXBhcnRtZW50cyk7XHJcbiAgICB0aGlzLmNkUmVmLmRldGVjdENoYW5nZXMoKTtcclxuICB9XHJcblxyXG4gIG9uU2NvbGxUb05vZGVUcmVlRGVwYXJ0bWVudChub2RlOiBRTVNUcmVlTm9kZSkge1xyXG4gICAgdGhpcy5vcHRpb25TZWxlY3QudmFsdWUgPT09IHRoaXMuT1BUSU9OX0VOVU0uREVQQVJUTUVOVCAmJiB0aGlzLnRyZWVEZXBhcnRtZW50LnNjcm9sbFRvTm9kZShub2RlLmlkKVxyXG4gIH1cclxuXHJcbiAgdHJhY2tCeUZuKGluZGV4LCBpdGVtKSB7XHJcbiAgICByZXR1cm4gaW5kZXg7XHJcbiAgfVxyXG5cclxuICB1cGRhdGVQZXJzb25GaWx0ZXIoZGF0YTogUU1TQWNjZXNzUGFnaW5nTW9kZWw8UU1TQWNjZXNzSXRlbT4pIHtcclxuICAgIHRoaXMuZ2V0UGVyc29uJC5uZXh0KGRhdGEpO1xyXG4gICAgdGhpcy5nZXRMb2FkaW5nJC5uZXh0KGZhbHNlKTtcclxuICAgIHRoaXMuZ2V0U2VhcmNoaW5nJC5uZXh0KGZhbHNlKTtcclxuICB9XHJcblxyXG4gIHVwZGF0ZVVzZXJHcm91cEZpbHRlcihkYXRhOiBRTVNBY2Nlc3NQYWdpbmdNb2RlbDxRTVNBY2Nlc3NJdGVtPikge1xyXG4gICAgdGhpcy5nZXRVc2VyR3JvdXAkLm5leHQoZGF0YSk7XHJcbiAgICB0aGlzLmdldExvYWRpbmckLm5leHQoZmFsc2UpO1xyXG4gICAgdGhpcy5nZXRTZWFyY2hpbmckLm5leHQoZmFsc2UpO1xyXG4gIH1cclxuXHJcbiAgb25QYWdpbmF0b3JFdmVudCh2YWw6IFBhZ2VFdmVudCwgdHlwZTogT3B0aW9uU2VsZWN0QWNjZXNzRW51bSkge1xyXG4gICAgaWYgKHRoaXMuZ2V0U2VhcmNoaW5nJC52YWx1ZSlcclxuICAgICAgcmV0dXJuO1xyXG4gICAgdGhpcy5nZXRMb2FkaW5nJC5uZXh0KHRoaXMub3B0aW9uU2VsZWN0LnZhbHVlICE9PSAnJyk7XHJcbiAgICB0aGlzLm9uUGFnaW5nRXZlbnQuZW1pdCh7XHJcbiAgICAgIC4uLnZhbCxcclxuICAgICAgdHlwZTogdHlwZVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBvblJlc3VsdERlcGFydG1lbnRDaGFuZ2UoZXZlbnQ6IFFNU1RyZWVOb2RlW10pIHtcclxuICAgIC8vIHRoaXMucmVzdWx0QWNjZXNzLmRlcGFydG1lbnRzID0gZXZlbnQ7XHJcbiAgfVxyXG5cclxuICB1cGRhdGVSZXN1bHRTZWFyY2hEZXBhcnRtZW50KGRhdGE6IFFNU0FjY2Vzc1BhZ2luZ01vZGVsPFFNU0ZsYXROb2RlVHJlZT4gPSBuZXcgUU1TQWNjZXNzUGFnaW5nTW9kZWw8UU1TRmxhdE5vZGVUcmVlPigpKSB7XHJcbiAgICBpZiAoIXRoaXMudHJlZURlcGFydG1lbnQpXHJcbiAgICAgIHJldHVybjtcclxuICAgIGRhdGEgPSBkYXRhIGFzIFFNU0RlcGFydG1lbnRQYWdpbmdNb2RlbDxRTVNGbGF0Tm9kZVRyZWU+O1xyXG4gICAgaWYgKHRoaXMuZGlhbG9nRGF0YS5kaXNhYmxlU2VsZWN0ZWRMaXN0KSB7XHJcbiAgICAgIGRhdGEuZGF0YS5mb3JFYWNoKHggPT4geC5kaXNhYmxlZCA9ICF0aGlzLmFsbG93UmVtb3ZlKE9wdGlvblNlbGVjdEFjY2Vzc0VudW0uREVQQVJUTUVOVCwgeCkpO1xyXG4gICAgfVxyXG4gICAgdGhpcy50cmVlRGVwYXJ0bWVudC5zZXRSZXN1bHRTZWFyY2goZGF0YSk7XHJcbiAgfVxyXG5cclxuICB1cGRhdGVEZXBhcnRtZW50RmlsdGVyKGRhdGE6IFFNU0FjY2Vzc1BhZ2luZ01vZGVsPFFNU0FjY2Vzc0l0ZW0+KSB7XHJcbiAgICB0aGlzLmdldERlcGFydG1lbnQkLm5leHQoZGF0YSk7XHJcbiAgICB0aGlzLmdldExvYWRpbmckLm5leHQoZmFsc2UpO1xyXG4gICAgdGhpcy5nZXRTZWFyY2hpbmckLm5leHQoZmFsc2UpO1xyXG4gIH1cclxuXHJcblxyXG4gIGdlbmVyYXRlVG9vbHRpcChub2RlOiBhbnkpIHtcclxuICAgIGlmICh0aGlzLmRpYWxvZ0RhdGE/LmZvcm1hdFRvb2x0aXApXHJcbiAgICAgIHJldHVybiB0aGlzLmRpYWxvZ0RhdGEuZm9ybWF0VG9vbHRpcChub2RlKTtcclxuICAgIHJldHVybiAobm9kZT8uaXNHcm91cCkgPyB0aGlzLmZvcm1hdFN0cmluZyh0aGlzLkxBTkcuVE9PTFRJUF9JTkNMVURFX1NVQl9ERVBBUlRNRU5ULCBub2RlLm5hbWUsIG5vZGUuY2hpbGRyZW4/Lmxlbmd0aC50b1N0cmluZygpKSA6IChgJHtub2RlLm5hbWV9ICR7bm9kZT8uc3ViTmFtZSA/IGAtICgke25vZGUuc3ViTmFtZX0pYCA6ICcnfWApO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBmb3JtYXRTdHJpbmcoLi4ucmVwbGFjZW1lbnRzOiBzdHJpbmdbXSk6IHN0cmluZyB7XHJcbiAgICBsZXQgcmVzdWx0ID0gYXJndW1lbnRzWzBdO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoIC0gMTsgaSsrKSB7XHJcbiAgICAgIGNvbnN0IHJlZyA9IG5ldyBSZWdFeHAoYFxcXFx7JHtpfVxcXFx9YCwgJ2dtJyk7XHJcbiAgICAgIHJlc3VsdCA9IHJlc3VsdC5yZXBsYWNlKHJlZywgYXJndW1lbnRzW2kgKyAxXSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG4gIH1cclxuXHJcbiAgaGFzSXRlbVNlbGVjdGVkKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKHRoaXMucmVzdWx0QWNjZXNzKS5zb21lKGtleSA9PiAhIXRoaXMucmVzdWx0QWNjZXNzW2tleV0/Lmxlbmd0aClcclxuICB9XHJcblxyXG4gIHVwZGF0ZURlcGFydG1lbnQoZGF0YTogUU1TVHJlZU5vZGVbXSA9IFtdKSB7XHJcbiAgICB0aGlzLmdldExvYWRpbmckLm5leHQoZmFsc2UpO1xyXG5cclxuICAgIGlmICh0aGlzLmRpYWxvZ0RhdGEuZGlzYWJsZVNlbGVjdGVkTGlzdCkge1xyXG4gICAgICBkYXRhLmZvckVhY2goaXRlbSA9PiBpdGVtLmRpc2FibGVkID0gIXRoaXMuYWxsb3dSZW1vdmUoT3B0aW9uU2VsZWN0QWNjZXNzRW51bS5ERVBBUlRNRU5ULCBpdGVtKSk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmRpYWxvZ0RhdGEudHJlZURlcGFydG1lbnRDb25maWcudHJlZURhdGEgPSBfLmNsb25lRGVlcChkYXRhKTtcclxuICB9XHJcblxyXG4gIHVwZGF0ZU9wdGlvblBlcnNvbkZpbHRlcihkZXBhcnRtZW50RmlsdGVyOiBRTVNGbGF0Tm9kZVRyZWVbXSA9IFtdLCB1c2VyR3JvdXBGaWx0ZXI6IFFNU0FjY2Vzc0l0ZW1bXSA9IFtdKSB7XHJcbiAgICB0aGlzLm9wdGlvbkZpbHRlclBlcnNvbkRhdGFHbG9iYWwuZGVwYXJ0bWVudHMgPSBkZXBhcnRtZW50RmlsdGVyO1xyXG4gICAgdGhpcy5vcHRpb25GaWx0ZXJQZXJzb25EYXRhR2xvYmFsLnVzZXJHcm91cHMgPSB1c2VyR3JvdXBGaWx0ZXI7XHJcbiAgICB0aGlzLmZpbHRlcmVkU2VhcmNoVGV4dEJveC5kZXBhcnRtZW50Lm5leHQoZGVwYXJ0bWVudEZpbHRlcik7XHJcbiAgICB0aGlzLmZpbHRlcmVkU2VhcmNoVGV4dEJveC51c2VyR3JvdXAubmV4dCh1c2VyR3JvdXBGaWx0ZXIpO1xyXG4gIH1cclxuXHJcbiAgc2V0RGVmYXVsdFBhZ2VTaXplT3B0aW9uKGRhdGE6IG51bWJlcltdKSB7XHJcbiAgICB0aGlzLlBBR0VfU0laRV9PUFRJT04gPSBkYXRhO1xyXG4gIH1cclxuICBhbGxvd1JlbW92ZSA9ICh0eXBlOiBPcHRpb25TZWxlY3RBY2Nlc3NFbnVtLCBpdGVtOiBhbnkpOiBib29sZWFuID0+IHtcclxuICAgIGlmICghdGhpcy5kaWFsb2dEYXRhLmRpc2FibGVTZWxlY3RlZExpc3QpXHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgY29uc3QgeyBwZXJzb25zLCBkZXBhcnRtZW50cywgdXNlckdyb3VwcyB9ID0gdGhpcy5kaWFsb2dEYXRhLmRhdGEuc2VsZWN0ZWREYXRhO1xyXG4gICAgc3dpdGNoICh0eXBlKSB7XHJcbiAgICAgIGNhc2UgT3B0aW9uU2VsZWN0QWNjZXNzRW51bS5QRVJTT046IHJldHVybiAhcGVyc29ucy5zb21lKHggPT4geC5pZCA9PSBpdGVtLmlkKVxyXG4gICAgICBjYXNlIE9wdGlvblNlbGVjdEFjY2Vzc0VudW0uREVQQVJUTUVOVDogcmV0dXJuICFkZXBhcnRtZW50cy5zb21lKHggPT4geC5pZCA9PSBpdGVtLmlkKVxyXG4gICAgICBjYXNlIE9wdGlvblNlbGVjdEFjY2Vzc0VudW0uVVNFUl9HUk9VUDogcmV0dXJuICF1c2VyR3JvdXBzLnNvbWUoeCA9PiB4LmlkID09IGl0ZW0uaWQpXHJcbiAgICAgIGRlZmF1bHQ6IHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxuIiwiPGgzIG1hdC1kaWFsb2ctdGl0bGUgY2xhc3M9XCJtb3JlLWFjdGlvblwiPlxuICB7e2RpYWxvZ0RhdGEudGl0bGVEaWFsb2cgfHwgTEFORy5TRUxFQ1RfQUNDRVNTfX1cbiAgPGJ1dHRvbiBtYXREaWFsb2dDbG9zZSBjbGFzcz1cImNsb3NlLWJ0blwiIHFtcy1idG4taWNvbiBjb2xvcj1cImxpZ2h0XCI+XG4gICAgPG1hdC1pY29uIGNsYXNzPVwibWF0LWljb25zLW91dGxpbmVkXCI+Y2xvc2U8L21hdC1pY29uPlxuICA8L2J1dHRvbj5cbjwvaDM+XG48bWF0LWRpYWxvZy1jb250ZW50PlxuICA8ZGl2IFtjbGFzcy5hY3RpdmVdPVwib3B0aW9uU2VsZWN0LnZhbHVlICE9PSBudWxsXCIgY2xhc3M9XCJxbXMtZGlhbG9nLWNvbnRlbnRcIj5cbiAgICA8ZGl2IGNsYXNzPVwiYWNjZXNzLWRpYWxvZy13cmFwZXJcIj5cbiAgICAgIDxtYXQtZm9ybS1maWVsZCAqbmdJZj1cIm9wdGlvbnMubGVuZ3RoID4gMVwiIHFtcy1mb3JtIHFtcy1zZWxlY3QtaW5wdXQgY2xhc3M9XCJmaWVsZC1zZWxlY3Qtb3B0aW9uIHctMTAwIG1iLTJcIlxuICAgICAgICBhcHBlYXJhbmNlPVwiZmlsbFwiPlxuICAgICAgICA8bWF0LWxhYmVsIFthdHRyLmFyaWEtbGFiZWxdPVwiTEFORy5UWVBFXCIgcW1zLXNlbGVjdC1pbnB1dD57e0xBTkcuVFlQRX19PC9tYXQtbGFiZWw+XG4gICAgICAgIDxtYXQtc2VsZWN0IChzZWxlY3Rpb25DaGFuZ2UpPVwib25TZWxlY3Rpb25UeXBlQ2hhbmdlKCRldmVudClcIiBbZm9ybUNvbnRyb2xdPVwib3B0aW9uU2VsZWN0XCIgcGxhY2Vob2xkZXI9XCJTZWxlY3RcIlxuICAgICAgICAgIGRpc2FibGVPcHRpb25DZW50ZXJpbmcgI3NpbmdsZVNlbGVjdCBwYW5lbENsYXNzPVwicW1zLXNlbGVjdC1wYW5lbFwiIHFtcy1zZWxlY3Q+XG5cbiAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgaXRlbSBvZiBvcHRpb25zXCIgW3ZhbHVlXT1cIml0ZW0udHlwZVwiPlxuICAgICAgICAgICAge3sgTEFOR1tpdGVtLmRpc3BsYXlOYW1lXSB9fVxuICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgIDxkaXYgY2xhc3M9XCJib2R5LWRpYWxvZy1jb250YWluZXJcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm9wdGlvbi1zZWxlY3RlZC1jb250ZW50XCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm9wdGlvblNlbGVjdC52YWx1ZSA9PT0gT1BUSU9OX0VOVU0uUEVSU09OXCI+XG4gICAgICAgICAgICA8Zm9ybSAqbmdJZj1cInBlcnNvbkZvcm1cIiBbZm9ybUdyb3VwXT1cInBlcnNvbkZvcm1cIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImdyb3VwLWZpbHRlci1wZXJzb24tb3B0aW9uXCI+XG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkICpuZ0lmPVwib3B0aW9uRmlsdGVyUGVyc29uRGF0YUdsb2JhbC51c2VyR3JvdXBzLmxlbmd0aFwiIHFtcy1mb3JtIHFtcy1zZWxlY3QtaW5wdXRcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwidy0xMDAgIG1iLTJcIiBhcHBlYXJhbmNlPVwiZmlsbFwiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbCBbYXR0ci5hcmlhLWxhYmVsXT1cIkxBTkcuUk9MRVwiIHFtcy1zZWxlY3QtaW5wdXQ+e3tMQU5HLlJPTEV9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgcGFuZWxDbGFzcz1cInFtcy1zZWxlY3QtcGFuZWxcIiBxbXMtc2VsZWN0IGZvcm1Db250cm9sTmFtZT1cInVzZXJHcm91cFwiXG4gICAgICAgICAgICAgICAgICAgIGRpc2FibGVPcHRpb25DZW50ZXJpbmc+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0LXRyaWdnZXI+XG4gICAgICAgICAgICAgICAgICAgICAge3twZXJzb25Gb3JtLmNvbnRyb2xzWyd1c2VyR3JvdXAnXS52YWx1ZT8ubmFtZSB8fCAnJ319XG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdC10cmlnZ2VyPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICA8bmd4LW1hdC1zZWxlY3Qtc2VhcmNoIGZvcm1Db250cm9sTmFtZT1cInVzZXJHcm91cEZpbHRlclwiIHBsYWNlaG9sZGVyTGFiZWw9XCJ7eyBMQU5HLlJPTEUgfX1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgbm9FbnRyaWVzRm91bmRMYWJlbD1cIlwiPlxuICAgICAgICAgICAgICAgICAgICAgIDwvbmd4LW1hdC1zZWxlY3Qtc2VhcmNoPlxuICAgICAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uIG1vZGU9XCJkYXJrXCIgY2xhc3M9XCJvcHQtY2hlY2staWNvblwiXG4gICAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGl0ZW0gb2YgZmlsdGVyZWRTZWFyY2hUZXh0Qm94LnVzZXJHcm91cC52YWx1ZVwiIFt2YWx1ZV09XCJpdGVtXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gcW1zLWVsaXBzaWZ5IHBvc2l0aW9uPVwidG9wXCIgbW9kZT1cImRhcmtcIiBjbGFzcz1cInRleHQtb3B0aW9uLWNvbnRlbnRcIj57eyBpdGVtLm5hbWUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwiY2hlY2staWNvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInBlcnNvbkZvcm0uY29udHJvbHNbJ3VzZXJHcm91cCddLnZhbHVlPy5pZCA9PSBpdGVtLmlkXCI+Y2hlY2s8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICA8c3BhbiBbQGluT3V0QW5pbWF0aW9uXSAoY2xpY2spPVwicGVyc29uRm9ybS5nZXQoJ3VzZXJHcm91cCcpLnNldFZhbHVlKCcnKVwiIGNsYXNzPVwicG9pbnRlciBcIiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgYXJpYS1sYWJlbD1cIkNsZWFyXCIgKm5nSWY9XCJwZXJzb25Gb3JtLmdldCgndXNlckdyb3VwJykudmFsdWUgJiYgIWdldExvYWRpbmckLnZhbHVlXCI+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5jbG9zZTwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgKm5nSWY9XCJvcHRpb25GaWx0ZXJQZXJzb25EYXRhR2xvYmFsLmRlcGFydG1lbnRzLmxlbmd0aFwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cInctMTAwIGlucHV0LXNlbGVjdC1vcHRpb24gIG1iLTJcIiBxbXMtZm9ybSBxbXMtc2VsZWN0LWlucHV0PlxuICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbCBbYXR0ci5hcmlhLWxhYmVsXT1cIkxBTkcuREVQQVJUTUVOVF9VTklUXCI+e3tMQU5HLkRFUEFSVE1FTlRfVU5JVH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdCBwYW5lbENsYXNzPVwicW1zLXNlbGVjdC1wYW5lbFwiIHFtcy1zZWxlY3QgZGlzYWJsZU9wdGlvbkNlbnRlcmluZ1xuICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJkZXBhcnRtZW50XCI+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0LXRyaWdnZXI+XG4gICAgICAgICAgICAgICAgICAgICAge3twZXJzb25Gb3JtLmNvbnRyb2xzWydkZXBhcnRtZW50J10udmFsdWU/Lm5hbWUgfHwgJyd9fVxuICAgICAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3QtdHJpZ2dlcj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgPG5neC1tYXQtc2VsZWN0LXNlYXJjaCBmb3JtQ29udHJvbE5hbWU9XCJkZXBhcnRtZW50RmlsdGVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlckxhYmVsXT1cIkxBTkcuREVQQVJUTUVOVF9VTklUXCIgbm9FbnRyaWVzRm91bmRMYWJlbD1cIlwiPlxuICAgICAgICAgICAgICAgICAgICAgIDwvbmd4LW1hdC1zZWxlY3Qtc2VhcmNoPlxuICAgICAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uIGNsYXNzPVwib3B0LWNoZWNrLWljb25cIiAqbmdGb3I9XCJsZXQgaXRlbSBvZiBmaWx0ZXJlZFNlYXJjaFRleHRCb3guZGVwYXJ0bWVudC52YWx1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cIml0ZW1cIj5cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBxbXMtZWxpcHNpZnkgbW9kZT1cImRhcmtcIiBwb3NpdGlvbj1cInRvcFwiIGNsYXNzPVwidGV4dC1vcHRpb24tY29udGVudFwiPnt7IGl0ZW0ubmFtZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJjaGVjay1pY29uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwicGVyc29uRm9ybS5jb250cm9sc1snZGVwYXJ0bWVudCddLnZhbHVlPy5pZCA9PSBpdGVtLmlkXCI+Y2hlY2s8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICA8c3BhbiAoY2xpY2spPVwic2V0Rm9ybUNvbnRyb2xWYWx1ZShbJ3JlY3Vyc2l2ZScsJ2RlcGFydG1lbnQnXSwgW2ZhbHNlLCcnXSlcIiBbQGluT3V0QW5pbWF0aW9uXVxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInBvaW50ZXJcIiBtYXRTdWZmaXggYXJpYS1sYWJlbD1cIkNsZWFyXCJcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJwZXJzb25Gb3JtLmdldCgnZGVwYXJ0bWVudCcpLnZhbHVlICYmICFnZXRMb2FkaW5nJC52YWx1ZVwiPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24+Y2xvc2U8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIFtAaW5PdXRBbmltYXRpb25dICpuZ0lmPVwicGVyc29uRm9ybS5jb250cm9sc1snZGVwYXJ0bWVudCddLnZhbHVlXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cInctMTAwIHNsaWRlLXRvZ2dsZVwiIGZvcm1Db250cm9sTmFtZT1cInJlY3Vyc2l2ZVwiIGNvbG9yPVwiZGVmYXVsdFwiIHFtcy1ncm91cC1vcHRpb25zPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1sYWJlbFwiPnt7TEFORy5JTkNMVURFX1NVQl9ERVBBUlRNRU5UU319PC9zcGFuPlxuICAgICAgICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG5cbiAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwidy0xMDAgIG1iLTJcIiBhcHBlYXJhbmNlPVwiZmlsbFwiIHFtcy1mb3JtIHFtcy1zZWFyY2gtZmllbGQ+XG4gICAgICAgICAgICAgICAgPG1hdC1sYWJlbCBbYXR0ci5hcmlhLWxhYmVsXT1cIkxBTkcuU0VBUkNIX1dJVEhfTkFNRVwiXG4gICAgICAgICAgICAgICAgICBxbXMtc2VsZWN0LWlucHV0Pnt7TEFORy5TRUFSQ0hfV0lUSF9OQU1FfX08L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgYXBwZWFyYW5jZT1cIm9mZlwiIGZvcm1Db250cm9sTmFtZT1cImtleXdvcmRcIiB0eXBlPVwidGV4dFwiIGF1dG9jb21wbGV0ZT1cIm9mZlwiIC8+XG4gICAgICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cIiFnZXRMb2FkaW5nJC52YWx1ZVwiIHFtcy1idG4taWNvbiBjb2xvcj1cImxpZ2h0XCIgW0Bpbk91dEFuaW1hdGlvbl1cbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvblNlYXJjaFBlcnNvbkZyZWVUZXh0KClcIiBjbGFzcz1cInBvaW50ZXIgbWUtMVwiIG1hdFN1ZmZpeCBhcmlhLWxhYmVsPVwiU2VhcmNoXCI+XG4gICAgICAgICAgICAgICAgICA8bWF0LWljb24+c2VhcmNoPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8ZGl2IG1hdFN1ZmZpeCBjbGFzcz1cImQtaW5saW5lLWJsb2NrXCI+XG4gICAgICAgICAgICAgICAgICA8bWF0LXByb2dyZXNzLXNwaW5uZXIgW0Bpbk91dEFuaW1hdGlvbl0gKm5nSWY9XCJnZXRMb2FkaW5nJC52YWx1ZVwiIG1vZGU9XCJpbmRldGVybWluYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgZGlhbWV0ZXI9XCIyMFwiPjwvbWF0LXByb2dyZXNzLXNwaW5uZXI+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBbQGluT3V0QW5pbWF0aW9uXSAoY2xpY2spPVwicGVyc29uRm9ybS5nZXQoJ2tleXdvcmQnKS5zZXRWYWx1ZSgnJylcIiBtYXRTdWZmaXggYXJpYS1sYWJlbD1cIkNsZWFyXCJcbiAgICAgICAgICAgICAgICAgICpuZ0lmPVwicGVyc29uRm9ybS5nZXQoJ2tleXdvcmQnKS52YWx1ZSAmJiAhZ2V0TG9hZGluZyQudmFsdWVcIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5jbG9zZTwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cIm9uRmlsdGVyUGVyc29uKClcIiBxbXMtYnRuLW91dGxpbmVkIGNsYXNzPVwidy0xMDAgbXktMVwiPlxuICAgICAgICAgICAgICAgIHt7TEFORy5GSUxURVJ9fVxuICAgICAgICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICAgICAgICA8ZGl2IHFtcy1zY3JvbGxiYXI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIml0ZW1cIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtY2hlY2tib3ggW0Bpbk91dEFuaW1hdGlvbl1cbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCIhZ2V0TG9hZGluZyQudmFsdWUgJiYgcGVyc29uRmlsdGVyZWQubGVuZ3RoICYmICFkaWFsb2dEYXRhLm1vZGVTZWxlY3RPbmVQZXJzb25cIlxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiaXNEaXNhYmxlZFNlbGVjdEFsbChPUFRJT05fRU5VTS5QRVJTT04pXCIgI2NoZWNrUGVyc29uIGNsYXNzPVwidy0xMDAgbWItMSBjaGVja2JveC1hbGxcIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwicGVyc29uRmlsdGVyZWQubGVuZ3RoICYmIG9uQ2hlY2tBbGwoT1BUSU9OX0VOVU0uUEVSU09OLGNoZWNrUGVyc29uKVwiXG4gICAgICAgICAgICAgICAgICAgIFtjaGVja2VkXT1cImlzQ2hlY2tBbGwoT1BUSU9OX0VOVU0uUEVSU09OKVwiIFtpbmRldGVybWluYXRlXT1cImlzSW5kZXRlcm1pbmF0ZShPUFRJT05fRU5VTS5QRVJTT04pXCJcbiAgICAgICAgICAgICAgICAgICAgY29sb3I9XCJkZWZhdWx0XCIgcW1zLWdyb3VwLW9wdGlvbnM+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1sYWJlbCBoZWFkZXItdGl0bGVcIj57e0xBTkcuQ0hPT1NFX0FMTH19ICg8Yj57e3BlcnNvbkZpbHRlcmVkLmxlbmd0aH19PC9iPik8L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8L21hdC1jaGVja2JveD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8bWF0LWRpdmlkZXIgY2xhc3M9XCJteC1hdXRvXCI+PC9tYXQtZGl2aWRlcj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZ2V0TG9hZGluZyQudmFsdWU7IHRoZW4gbG9hZGluZ1wiPlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDxkaXYgW0Bpbk91dEFuaW1hdGlvbl0gKm5nSWY9XCJwZXJzb25GaWx0ZXJlZC5sZW5ndGggJiYgIWdldExvYWRpbmckLnZhbHVlXCIgW0BsaXN0QW5pbWF0aW9uXVxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJpdGVtLWxpc3Qtd3JhcHBlclwiPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIml0ZW0gIG10LTFcIiBbQGluT3V0QW5pbWF0aW9uXSAqbmdGb3I9XCJsZXQgZW1wbG95ZWUgb2YgcGVyc29uRmlsdGVyZWQ7IHRyYWNrQnk6IHRyYWNrQnlGblwiPlxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiZGlhbG9nRGF0YS5tb2RlU2VsZWN0T25lUGVyc29uID9pdGVtV2l0aG91dENoZWNrYm94VGVtcGxhdGUgOiBpdGVtQ2hlY2tib3hUZW1wbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cIntpdGVtOiBlbXBsb3llZSwgdHlwZTogT1BUSU9OX0VOVU0uUEVSU09OfVwiPlxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgW0Bpbk91dEFuaW1hdGlvbl0gKm5nSWY9XCIhcGVyc29uRmlsdGVyZWQubGVuZ3RoICYmICFnZXRMb2FkaW5nJC52YWx1ZVwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cIml0ZW0tbGlzdC13cmFwcGVyIG5vLXJlc3VsdFwiPlxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIm5vUmVzdWx0XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPG1hdC1kaXZpZGVyIGNsYXNzPVwibXgtYXV0b1wiPjwvbWF0LWRpdmlkZXI+XG4gICAgICAgICAgICAgICAgPHFtcy1wYWdpbmF0b3Igb3ZlcmxheVBhbmVsQ2xhc3M9XCJzZWxlY3QtYWNjZXNzLXBhZ2luYXRvclwiICNwYWdpbmdQZXJzb25cbiAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZ2V0UGVyc29uJC52YWx1ZS5sZW5ndGggPiAxMFwiIFtsZW5ndGhdPVwiZ2V0UGVyc29uJC52YWx1ZS5sZW5ndGhcIiBbbnVtSGlkZGVuXT1cIjBcIlxuICAgICAgICAgICAgICAgICAgW3BhZ2VTaXplXT1cImdldFBlcnNvbiQudmFsdWUucGFnZVNpemVcIiBbcGFnZVNpemVPcHRpb25zXT1cIlBBR0VfU0laRV9PUFRJT05cIlxuICAgICAgICAgICAgICAgICAgKHBhZ2UpPSdvblBhZ2luYXRvckV2ZW50KCRldmVudCwgT1BUSU9OX0VOVU0uUEVSU09OKScgW3NpemVdPSdQQUdJTkFUSU9OX1NJWkUubWVkaXVtJz5cbiAgICAgICAgICAgICAgICA8L3Ftcy1wYWdpbmF0b3I+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9mb3JtPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJvcHRpb25TZWxlY3QudmFsdWUgPT09IE9QVElPTl9FTlVNLlVTRVJfR1JPVVBcIj5cbiAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgIDxmb3JtIChzdWJtaXQpPVwib25GaWx0ZXJVc2VyR3JvdXAoKVwiPlxuICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cInctMTAwICBtYi0yXCIgcW1zLWZvcm0gcW1zLXNlYXJjaC1maWVsZD5cbiAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgYXJpYS1sYWJlbD1cIlVzZXIgZ3JvdXBcIiBxbXMtc2VsZWN0LWlucHV0Pnt7IExBTkcuU0VBUkNIIH19IHt7IExBTkcuVVNFUl9HUk9VUFxuICAgICAgICAgICAgICAgICAgICB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgICAgPGlucHV0IFtmb3JtQ29udHJvbF09XCJ1c2VyR3JvdXBGb3JtXCIgbWF0SW5wdXQgdHlwZT1cInRleHRcIiBhdXRvY29tcGxldGU9XCJvZmZcIiAvPlxuICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBbQGluT3V0QW5pbWF0aW9uXSAqbmdJZj1cIiFnZXRMb2FkaW5nJC52YWx1ZVwiIHR5cGU9XCJzdWJtaXRcIiBxbXMtYnRuLWljb24gY29sb3I9XCJsaWdodFwiXG4gICAgICAgICAgICAgICAgICAgIG1hdFN1ZmZpeD5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uPnNlYXJjaDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgbWF0U3VmZml4IGNsYXNzPVwiZC1pbmxpbmUtYmxvY2tcIj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1wcm9ncmVzcy1zcGlubmVyIFtAaW5PdXRBbmltYXRpb25dICpuZ0lmPVwiZ2V0TG9hZGluZyQudmFsdWVcIiBtb2RlPVwiaW5kZXRlcm1pbmF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgZGlhbWV0ZXI9XCIyMFwiPjwvbWF0LXByb2dyZXNzLXNwaW5uZXI+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxidXR0b24gbWF0U3VmZml4IChjbGljayk9XCJ1c2VyR3JvdXBGb3JtLnNldFZhbHVlKCcnKVwiIHFtcy1idG4taWNvbiBjb2xvcj1cImxpZ2h0XCI+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5jbG9zZTwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICA8L2Zvcm0+XG4gICAgICAgICAgICAgIDxkaXYgcW1zLXNjcm9sbGJhcj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaXRlbVwiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1jaGVja2JveCBbQGluT3V0QW5pbWF0aW9uXVxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIiFnZXRMb2FkaW5nJC52YWx1ZSAmJiAodXNlckdyb3VwRmlsdGVyZWQubGVuZ3RoICYmICFkaWFsb2dEYXRhLm1vZGVTZWxlY3RPbmVVc2VyR3JvdXApXCJcbiAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImlzRGlzYWJsZWRTZWxlY3RBbGwoT1BUSU9OX0VOVU0uVVNFUl9HUk9VUClcIiAjY2hlY2tVc2VyR3JvdXBcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ3LTEwMCBjaGVja2JveC1hbGwgbWItMVwiIGNvbG9yPVwiZGVmYXVsdFwiIFtjaGVja2VkXT1cImlzQ2hlY2tBbGwoT1BUSU9OX0VOVU0uVVNFUl9HUk9VUClcIlxuICAgICAgICAgICAgICAgICAgICBbaW5kZXRlcm1pbmF0ZV09XCJpc0luZGV0ZXJtaW5hdGUoT1BUSU9OX0VOVU0uVVNFUl9HUk9VUClcIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwidXNlckdyb3VwRmlsdGVyZWQubGVuZ3RoICYmIG9uQ2hlY2tBbGwoT1BUSU9OX0VOVU0uVVNFUl9HUk9VUCxjaGVja1VzZXJHcm91cClcIlxuICAgICAgICAgICAgICAgICAgICBxbXMtZ3JvdXAtb3B0aW9ucz5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LWxhYmVsIGhlYWRlci10aXRsZVwiPnt7TEFORy5DSE9PU0VfQUxMfX1cbiAgICAgICAgICAgICAgICAgICAgICAoPGI+e3t1c2VyR3JvdXBGaWx0ZXJlZC5sZW5ndGh9fTwvYj4pPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPC9tYXQtY2hlY2tib3g+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPG1hdC1kaXZpZGVyIGNsYXNzPVwibXgtYXV0b1wiPjwvbWF0LWRpdmlkZXI+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImdldExvYWRpbmckLnZhbHVlO3RoZW4gbG9hZGluZ1wiPlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJ1c2VyR3JvdXBGaWx0ZXJlZC5sZW5ndGggJiYgIWdldExvYWRpbmckLnZhbHVlXCIgW0BsaXN0QW5pbWF0aW9uXSBjbGFzcz1cIml0ZW0tbGlzdC13cmFwcGVyXCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IFtAaW5PdXRBbmltYXRpb25dIGNsYXNzPVwiaXRlbSBtdC0xXCIgKm5nRm9yPVwibGV0IHVzZXJHcm91cCBvZiB1c2VyR3JvdXBGaWx0ZXJlZFwiPlxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiZGlhbG9nRGF0YS5tb2RlU2VsZWN0T25lVXNlckdyb3VwID8gaXRlbVdpdGhvdXRDaGVja2JveFRlbXBsYXRlIDogaXRlbUNoZWNrYm94VGVtcGxhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7aXRlbTogdXNlckdyb3VwLHR5cGU6IE9QVElPTl9FTlVNLlVTRVJfR1JPVVB9XCI+XG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBbQGluT3V0QW5pbWF0aW9uXSAqbmdJZj1cIiF1c2VyR3JvdXBGaWx0ZXJlZC5sZW5ndGggJiYgIWdldExvYWRpbmckLnZhbHVlXCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaXRlbS1saXN0LXdyYXBwZXIgbm8tcmVzdWx0XCI+XG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwibm9SZXN1bHRcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8bWF0LWRpdmlkZXIgY2xhc3M9XCJteC1hdXRvXCI+PC9tYXQtZGl2aWRlcj5cbiAgICAgICAgICAgICAgICA8cW1zLXBhZ2luYXRvciBvdmVybGF5UGFuZWxDbGFzcz1cInNlbGVjdC1hY2Nlc3MtcGFnaW5hdG9yXCIgI3BhZ2luZ1VzZXJHcm91cCBjbGFzcz1cIm15LTFcIlxuICAgICAgICAgICAgICAgICAgKm5nSWY9XCJnZXRVc2VyR3JvdXAkLnZhbHVlLmxlbmd0aCA+IDEwIFwiIFtsZW5ndGhdPVwiZ2V0VXNlckdyb3VwJC52YWx1ZS5sZW5ndGhcIiBbbnVtSGlkZGVuXT1cIjBcIlxuICAgICAgICAgICAgICAgICAgW3BhZ2VTaXplXT1cImdldFVzZXJHcm91cCQudmFsdWUucGFnZVNpemVcIiBbcGFnZVNpemVPcHRpb25zXT1cIlBBR0VfU0laRV9PUFRJT05cIlxuICAgICAgICAgICAgICAgICAgKHBhZ2UpPSdvblBhZ2luYXRvckV2ZW50KCRldmVudCwgT1BUSU9OX0VOVU0uVVNFUl9HUk9VUCknIFtzaXplXT0nUEFHSU5BVElPTl9TSVpFLm1lZGl1bSc+XG4gICAgICAgICAgICAgICAgPC9xbXMtcGFnaW5hdG9yPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJvcHRpb25TZWxlY3QudmFsdWUgPT09IE9QVElPTl9FTlVNLkRFUEFSVE1FTlRcIj5cblxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFkaWFsb2dEYXRhLmlzRGVwYXJ0bWVudFBhZ2luZ1wiPlxuICAgICAgICAgICAgICA8cW1zLXNlbGVjdC1kZXBhcnRtZW50LXRyZWUgI3RyZWUgW3Jvd3NTa2VsZXRvbl09XCI4XCIgW2NvbmZpZ109XCJkaWFsb2dEYXRhLnRyZWVEZXBhcnRtZW50Q29uZmlnXCJcbiAgICAgICAgICAgICAgICBbbWF4V2lkdGhOb2RlXT1cImRpYWxvZ0RhdGEubWF4V2lkdGhOb2RlXCIgKG9uU2VhcmNoRXZlbnQpPVwib25TZWFyY2hEZXBhcnRtZW50RXZlbnQuZW1pdCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAob25WYWx1ZUNoYW5nZUV2ZW50KT1cIm9uUmVzdWx0RGVwYXJ0bWVudENoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAoc2VsZWN0aW9uTm9kZUNoYW5nZUV2ZW50KT1cIm9uU2VsZWN0aW9uTm9kZURlcGFydG1lbnRDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgKG9uUGFnaW5nU2VhcmNoRXZlbnQpPVwib25QYWdpbmF0b3JFdmVudCgkZXZlbnQsIE9QVElPTl9FTlVNLkRFUEFSVE1FTlQpXCI+XG4gICAgICAgICAgICAgIDwvcW1zLXNlbGVjdC1kZXBhcnRtZW50LXRyZWU+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImRpYWxvZ0RhdGEuaXNEZXBhcnRtZW50UGFnaW5nXCI+XG5cbiAgICAgICAgICAgICAgPGZvcm0gKG5nU3VibWl0KT1cIm9uRmlsdGVyRGVwYXJ0bWVudCgpXCI+XG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwidy0xMDAgIG1iLTJcIiBxbXMtZm9ybSBxbXMtc2VhcmNoLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbCBhcmlhLWxhYmVsPVwiRGVwYXJ0bWVudFwiIHFtcy1zZWxlY3QtaW5wdXQ+e3sgTEFORy5TRUFSQ0ggfX0ge3tMQU5HLkRFUEFSVE1FTlR9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgICAgPGlucHV0IFtmb3JtQ29udHJvbF09XCJkZXBhcnRtZW50U2VhcmNoRm9ybVwiIG1hdElucHV0IHR5cGU9XCJ0ZXh0XCIgYXV0b2NvbXBsZXRlPVwib2ZmXCIgLz5cbiAgICAgICAgICAgICAgICAgIDxidXR0b24gW0Bpbk91dEFuaW1hdGlvbl0gKm5nSWY9XCIhZ2V0TG9hZGluZyQudmFsdWVcIiB0eXBlPVwic3VibWl0XCIgcW1zLWJ0bi1pY29uIGNvbG9yPVwibGlnaHRcIlxuICAgICAgICAgICAgICAgICAgICBtYXRTdWZmaXg+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5zZWFyY2g8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICA8ZGl2IG1hdFN1ZmZpeCBjbGFzcz1cImQtaW5saW5lLWJsb2NrXCI+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtcHJvZ3Jlc3Mtc3Bpbm5lciBbQGluT3V0QW5pbWF0aW9uXSAqbmdJZj1cImdldExvYWRpbmckLnZhbHVlXCIgbW9kZT1cImluZGV0ZXJtaW5hdGVcIlxuICAgICAgICAgICAgICAgICAgICAgIGRpYW1ldGVyPVwiMjBcIj48L21hdC1wcm9ncmVzcy1zcGlubmVyPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2IFtAaW5PdXRBbmltYXRpb25dICpuZ0lmPVwiISFkZXBhcnRtZW50U2VhcmNoRm9ybS52YWx1ZSAmJiAhZ2V0TG9hZGluZyQudmFsdWVcIiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgcW1zLWlucHV0LWNsZWFyPlxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIChjbGljayk9XCJkZXBhcnRtZW50U2VhcmNoRm9ybS5zZXRWYWx1ZSgnJylcIiBxbXMtYnRuLWljb24gY29sb3I9XCJsaWdodFwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5jbG9zZTwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgPC9mb3JtPlxuXG4gICAgICAgICAgICAgIDxkaXYgcW1zLXNjcm9sbGJhcj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaXRlbVwiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1jaGVja2JveCBbQGluT3V0QW5pbWF0aW9uXSAqbmdJZj1cIiFnZXRMb2FkaW5nJC52YWx1ZSAmJiBkZXBhcnRtZW50RmlsdGVyZWQubGVuZ3RoXCJcbiAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImlzRGlzYWJsZWRTZWxlY3RBbGwoT1BUSU9OX0VOVU0uREVQQVJUTUVOVClcIiAjY2hlY2tEZXBhcnRtZW50XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidy0xMDAgY2hlY2tib3gtYWxsIG1iLTFcIiBjb2xvcj1cImRlZmF1bHRcIiBbY2hlY2tlZF09XCJpc0NoZWNrQWxsKE9QVElPTl9FTlVNLkRFUEFSVE1FTlQpXCJcbiAgICAgICAgICAgICAgICAgICAgW2luZGV0ZXJtaW5hdGVdPVwiaXNJbmRldGVybWluYXRlKE9QVElPTl9FTlVNLkRFUEFSVE1FTlQpXCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImRlcGFydG1lbnRGaWx0ZXJlZC5sZW5ndGggJiYgb25DaGVja0FsbChPUFRJT05fRU5VTS5ERVBBUlRNRU5ULGNoZWNrRGVwYXJ0bWVudClcIlxuICAgICAgICAgICAgICAgICAgICBxbXMtZ3JvdXAtb3B0aW9ucz5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LWxhYmVsIGhlYWRlci10aXRsZVwiPnt7TEFORy5DSE9PU0VfQUxMfX1cbiAgICAgICAgICAgICAgICAgICAgICAoPGI+e3tkZXBhcnRtZW50RmlsdGVyZWQubGVuZ3RofX08L2I+KTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWNoZWNrYm94PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxtYXQtZGl2aWRlciBjbGFzcz1cIm14LWF1dG9cIj48L21hdC1kaXZpZGVyPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJnZXRMb2FkaW5nJC52YWx1ZTt0aGVuIGxvYWRpbmdcIj5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiZGVwYXJ0bWVudEZpbHRlcmVkLmxlbmd0aCAmJiAhZ2V0TG9hZGluZyQudmFsdWVcIiBbQGxpc3RBbmltYXRpb25dIGNsYXNzPVwiaXRlbS1saXN0LXdyYXBwZXJcIj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgW0Bpbk91dEFuaW1hdGlvbl0gY2xhc3M9XCJpdGVtIG10LTFcIiAqbmdGb3I9XCJsZXQgaXRlbSBvZiBkZXBhcnRtZW50RmlsdGVyZWRcIj5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09XCJpdGVtQ2hlY2tib3hUZW1wbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cIntpdGVtOiBpdGVtLHR5cGU6IE9QVElPTl9FTlVNLkRFUEFSVE1FTlR9XCI+XG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBbQGluT3V0QW5pbWF0aW9uXSAqbmdJZj1cIiFkZXBhcnRtZW50RmlsdGVyZWQubGVuZ3RoICYmICFnZXRMb2FkaW5nJC52YWx1ZVwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cIml0ZW0tbGlzdC13cmFwcGVyIG5vLXJlc3VsdFwiPlxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIm5vUmVzdWx0XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPG1hdC1kaXZpZGVyIGNsYXNzPVwibXgtYXV0b1wiPjwvbWF0LWRpdmlkZXI+XG4gICAgICAgICAgICAgICAgPHFtcy1wYWdpbmF0b3Igb3ZlcmxheVBhbmVsQ2xhc3M9XCJzZWxlY3QtYWNjZXNzLXBhZ2luYXRvclwiICNwYWdpbmdEZXBhcnRtZW50IGNsYXNzPVwibXktMVwiXG4gICAgICAgICAgICAgICAgICAqbmdJZj1cImdldERlcGFydG1lbnQkLnZhbHVlLmxlbmd0aCA+IDEwIFwiIFtsZW5ndGhdPVwiZ2V0RGVwYXJ0bWVudCQudmFsdWUubGVuZ3RoXCIgW251bUhpZGRlbl09XCIwXCJcbiAgICAgICAgICAgICAgICAgIFtwYWdlU2l6ZV09XCJnZXREZXBhcnRtZW50JC52YWx1ZS5wYWdlU2l6ZVwiIFtwYWdlU2l6ZU9wdGlvbnNdPVwiUEFHRV9TSVpFX09QVElPTlwiXG4gICAgICAgICAgICAgICAgICAocGFnZSk9J29uUGFnaW5hdG9yRXZlbnQoJGV2ZW50LCBPUFRJT05fRU5VTS5ERVBBUlRNRU5UKScgW3NpemVdPSdQQUdJTkFUSU9OX1NJWkUubWVkaXVtJz5cbiAgICAgICAgICAgICAgICA8L3Ftcy1wYWdpbmF0b3I+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2ICpuZ0lmPVwib3B0aW9uU2VsZWN0LnZhbHVlICE9PSBudWxsXCIgY2xhc3M9XCJyZXN1bHQtd3JhcHBlclwiPlxuICAgICAgPGRpdiBjbGFzcz1cInJlc3VsdC1zZWxlY3RlZC1jb250YWluZXJcIj5cbiAgICAgICAgPGRpdiBbQGluT3V0QW5pbWF0aW9uXSAqbmdJZj1cIihvcHRpb25zLmxlbmd0aCA9PT0gMSkgfHwgKG9wdGlvbnMubGVuZ3RoID4gMSAmJiBvcHRpb25TZWxlY3QudmFsdWUgIT09IG51bGwpXCJcbiAgICAgICAgICBjbGFzcz1cImhlYWRlci10aXRsZSByZXN1bHQtaGVhZGVyXCI+XG4gICAgICAgICAgPHNwYW4+XG4gICAgICAgICAgICB7e1xuICAgICAgICAgICAgZGlhbG9nRGF0YS50aXRsZVJlc3VsdCB8fCBMQU5HLlJFU1VMVFN9fVxuICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJvcHRpb25zLmxlbmd0aCA9PT0gMSAmJiBoYXNJdGVtU2VsZWN0ZWQoKVwiPlxuICAgICAgICAgICAgICAoe3tnZXRSZXN1bHRUYWJBY3RpdmUoKS5sZW5ndGh9fSlcbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwicmVzdWx0LWJvZHlcIj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY2hlY2tFeGlzdE9wdGlvblNlbGVjdChPUFRJT05fRU5VTS5QRVJTT04pXCJcbiAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIm9wdGlvbnM/Lmxlbmd0aCA9PSAxID8gbGlzdENoaXAgOiB2aWV3UmVzdWx0Q29sbGFwc2VcIlxuICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cIntkYXRhOnJlc3VsdEFjY2Vzcy5wZXJzb25zLCB0eXBlOk9QVElPTl9FTlVNLlBFUlNPTiwgdGl0bGU6TEFORy5QRVJTT059XCI+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNoZWNrRXhpc3RPcHRpb25TZWxlY3QoT1BUSU9OX0VOVU0uVVNFUl9HUk9VUClcIlxuICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwib3B0aW9ucz8ubGVuZ3RoID09IDEgPyBsaXN0Q2hpcCA6IHZpZXdSZXN1bHRDb2xsYXBzZVwiXG4gICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie2RhdGE6cmVzdWx0QWNjZXNzLnVzZXJHcm91cHMsIHR5cGU6T1BUSU9OX0VOVU0uVVNFUl9HUk9VUCwgdGl0bGU6TEFORy5VU0VSX0dST1VQfVwiPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjaGVja0V4aXN0T3B0aW9uU2VsZWN0KE9QVElPTl9FTlVNLkRFUEFSVE1FTlQpICYmICFkaWFsb2dEYXRhLmlzRGVwYXJ0bWVudFBhZ2luZ1wiXG4gICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJvcHRpb25zPy5sZW5ndGggPT0gMSA/IGxpc3RDaGlwIDogdmlld1Jlc3VsdENvbGxhcHNlXCJcbiAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7ZGF0YTogcmVzdWx0QWNjZXNzLmRlcGFydG1lbnRzIHx8IHJlc3VsdEFjY2Vzcy5kZXBhcnRtZW50c0ZsYXQsIHR5cGU6T1BUSU9OX0VOVU0uREVQQVJUTUVOVCwgdGl0bGU6TEFORy5ERVBBUlRNRU5UfVwiPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjaGVja0V4aXN0T3B0aW9uU2VsZWN0KE9QVElPTl9FTlVNLkRFUEFSVE1FTlQpICYmIGRpYWxvZ0RhdGEuaXNEZXBhcnRtZW50UGFnaW5nXCJcbiAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIm9wdGlvbnM/Lmxlbmd0aCA9PSAxID8gbGlzdENoaXAgOiB2aWV3UmVzdWx0Q29sbGFwc2VcIlxuICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cIntkYXRhOiByZXN1bHRBY2Nlc3MuZGVwYXJ0bWVudHNGbGF0LCB0eXBlOk9QVElPTl9FTlVNLkRFUEFSVE1FTlQsIHRpdGxlOkxBTkcuREVQQVJUTUVOVH1cIj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbjwvbWF0LWRpYWxvZy1jb250ZW50PlxuPG1hdC1kaWFsb2ctYWN0aW9ucyBhbGlnbj1cImVuZFwiPlxuICA8bWF0LWRpdmlkZXIgY2xhc3M9XCJ3LTEwMCBtYi0zXCI+PC9tYXQtZGl2aWRlcj5cbiAgPGJ1dHRvbiBjbGFzcz1cIm1lLTJcIiBxbXMtYnRuLXRleHQgbWF0LWRpYWxvZy1jbG9zZT5cbiAgICB7e2RpYWxvZ0RhdGEuY2FuY2VsVGl0bGUgfHwgTEFORy5DQU5DRUx9fVxuICA8L2J1dHRvbj5cbiAgPGJ1dHRvbiAqbmdJZj1cIm9wdGlvblNlbGVjdC52YWx1ZSAhPT0gbnVsbFwiXG4gICAgW2Rpc2FibGVkXT1cIiFoYXNJdGVtU2VsZWN0ZWQoKSAmJiAhZGlhbG9nRGF0YS50cmVlRGVwYXJ0bWVudENvbmZpZy5jYW5BZGROdWxsUmVzdWx0XCIgY2xhc3M9XCJidG4tYWRkXCJcbiAgICBbY2xhc3MucW1zLWJ0bi1kaXNhYmxlZF09XCIhaGFzSXRlbVNlbGVjdGVkKCkgJiYgIWRpYWxvZ0RhdGEudHJlZURlcGFydG1lbnRDb25maWcuY2FuQWRkTnVsbFJlc3VsdFwiXG4gICAgW21hdC1kaWFsb2ctY2xvc2VdPVwicmVzdWx0QWNjZXNzXCIgcW1zLWJ0bj5cbiAgICA8c3Bhbj57e2RpYWxvZ0RhdGEuY29uZmlybVRpdGxlIHx8IExBTkcuQUREfX08L3NwYW4+XG4gIDwvYnV0dG9uPlxuPC9tYXQtZGlhbG9nLWFjdGlvbnM+XG5cbjxuZy10ZW1wbGF0ZSAjbm9SZXN1bHQ+XG4gIDxzdmcgd2lkdGg9XCI4OVwiIGhlaWdodD1cIjEzMFwiIHZpZXdCb3g9XCIwIDAgODkgODhcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cbiAgICA8cmVjdCB4PVwiMC41XCIgd2lkdGg9XCI4OFwiIGhlaWdodD1cIjg4XCIgcng9XCI0NFwiIGZpbGw9XCJ3aGl0ZVwiIC8+XG4gICAgPHJlY3QgeD1cIjAuNVwiIHdpZHRoPVwiODhcIiBoZWlnaHQ9XCI4OFwiIHJ4PVwiNDRcIiBmaWxsPVwiIzAxNjNCMlwiIGZpbGwtb3BhY2l0eT1cIjAuMTJcIiAvPlxuICAgIDxwYXRoXG4gICAgICBkPVwiTTQ0LjUgNTYuNjkzNkw1OC4wOTYgNjQuODk5Nkw1NC40ODggNDkuNDMzNkw2Ni41IDM5LjAyNzZMNTAuNjgyIDM3LjY4NTZMNDQuNSAyMy4wOTk2TDM4LjMxOCAzNy42ODU2TDIyLjUgMzkuMDI3NkwzNC41MTIgNDkuNDMzNkwzMC45MDQgNjQuODk5Nkw0NC41IDU2LjY5MzZaXCJcbiAgICAgIGZpbGw9XCIjMDE2M0IzXCIgLz5cbiAgICA8dGV4dCB4PVwiMTBcIiB5PVwiMTA1XCIgZmlsbD1cIiMwMTYzQjJcIj57e0xBTkcuTk9fUkVTVUxUfX08L3RleHQ+XG4gIDwvc3ZnPlxuPC9uZy10ZW1wbGF0ZT5cbjxuZy10ZW1wbGF0ZSAjbGlzdENoaXAgbGV0LWRhdGE9XCJkYXRhXCIgbGV0LXR5cGU9XCJ0eXBlXCI+XG4gIDxtYXQtY2hpcC1zZXQgW0Bpbk91dEFuaW1hdGlvbl0gKm5nSWY9XCJkYXRhPy5sZW5ndGhcIiBjbGFzcz1cInBhbmVsX19pdGVtIHFtcy1zY3JvbGxiYXJcIj5cbiAgICA8ZGl2IFtAaW5PdXRBbmltYXRpb25fMl0gKm5nRm9yPVwibGV0IGl0ZW0gb2YgZGF0YTsgbGV0IGkgPSBpbmRleFwiPlxuICAgICAgPG1hdC1jaGlwIChjbGljayk9XCJvblNjb2xsVG9Ob2RlVHJlZURlcGFydG1lbnQoaXRlbSlcIiBbQHVwZGF0ZUl0ZW1BbmltYXRpb25dXG4gICAgICAgICpxbXNDb250ZW50Q2hhbmdlcz1cIml0ZW0uY2hpbGRyZW4/Lmxlbmd0aFwiIGNsYXNzPVwiY2hpcC1pdGVtLXJlc3VsdFwiIHFtcy1jaGlwIFtyZW1vdmFibGVdPVwidHJ1ZVwiPlxuICAgICAgICA8c3BhbiBxbXMtY2hpcC1ib2R5PlxuICAgICAgICAgIDxzcGFuIFtxbXMtdG9vbC10aXBdPVwiZ2VuZXJhdGVUb29sdGlwKGl0ZW0pXCIgcG9zaXRpb249XCJ0b3BcIiBtb2RlPVwiZGFya1wiIGNsYXNzPVwidGV4dC1sYWJlbFwiPlxuICAgICAgICAgICAge3tpdGVtLm5hbWV9fVxuICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJpdGVtLnN1Yk5hbWVcIj4oe3sgaXRlbS5zdWJOYW1lIH19KTwvc3Bhbj5cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJjaGlwLWl0ZW0tY2hpbGRyZW5fX2NvdW50IG1zLTFcIiAqbmdJZj1cIml0ZW0/LmNoaWxkcmVuICYmIGl0ZW0/LmlzR3JvdXBcIj5cbiAgICAgICAgICAgIHt7aXRlbS5jaGlsZHJlbi5sZW5ndGh9fS97e2l0ZW0uY2hpbGRDb3VudH19XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAgPGJ1dHRvbiBtYXRDaGlwUmVtb3ZlICpuZ0lmPVwiYWxsb3dSZW1vdmUodHlwZSwgaXRlbSlcIiAoY2xpY2spPVwib25SZW1vdmVDaGlwKHR5cGUsaXRlbSwgaSlcIj5cbiAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJyZW1vdmUtY2hpcC1pY29uXCI+Y2FuY2VsPC9tYXQtaWNvbj5cbiAgICAgICAgICA8bWF0LWljb24gKm5nSWY9XCJhbGxvd1JlbW92ZSh0eXBlLCBpdGVtKSAmJiBkaWFsb2dEYXRhLmZvcm1hdE1zZ0Rpc2FibGVcIiBwb3NpdGlvbj1cInRvcFwiIG1vZGU9XCJkYXJrXCJcbiAgICAgICAgICAgIFtxbXMtdG9vbC10aXBdPVwiZGlhbG9nRGF0YS5mb3JtYXRNc2dEaXNhYmxlKGl0ZW0pXCIgY2xhc3M9XCJyZW1vdmUtY2hpcC1pY29uXCI+aW5mb19pPC9tYXQtaWNvbj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDxidXR0b24gbWF0Q2hpcFJlbW92ZSAqbmdJZj1cIiFhbGxvd1JlbW92ZSh0eXBlLCBpdGVtKSAmJiBkaWFsb2dEYXRhLmZvcm1hdE1zZ0Rpc2FibGVcIlxuICAgICAgICAgIChjbGljayk9XCJvblJlbW92ZUNoaXAodHlwZSxpdGVtLCBpKVwiPlxuICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cInJlbW92ZS1jaGlwLWljb25cIj5jYW5jZWw8L21hdC1pY29uPlxuICAgICAgICAgIDxtYXQtaWNvbiAqbmdJZj1cIiFhbGxvd1JlbW92ZSh0eXBlLCBpdGVtKSAmJiBkaWFsb2dEYXRhLmZvcm1hdE1zZ0Rpc2FibGVcIiBwb3NpdGlvbj1cInRvcFwiIG1vZGU9XCJkYXJrXCJcbiAgICAgICAgICAgIFtxbXMtdG9vbC10aXBdPVwiZGlhbG9nRGF0YS5mb3JtYXRNc2dEaXNhYmxlKGl0ZW0pXCIgY2xhc3M9XCJyZW1vdmUtY2hpcC1pY29uXCI+aW5mb19pPC9tYXQtaWNvbj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L21hdC1jaGlwPlxuICAgIDwvZGl2PlxuICA8L21hdC1jaGlwLXNldD5cbjwvbmctdGVtcGxhdGU+XG5cblxuPG5nLXRlbXBsYXRlICN2aWV3UmVzdWx0Q29sbGFwc2UgbGV0LXRpdGxlPVwidGl0bGVcIiBsZXQtZGF0YT1cImRhdGFcIiBsZXQtdHlwZT1cInR5cGVcIj5cbiAgPG1hdC1leHBhbnNpb24tcGFuZWwgcW1zLWV4cGFuc2lvbiBbZXhwYW5kZWRdPVwib3B0aW9uU2VsZWN0LnZhbHVlID09PSB0eXBlXCI+XG4gICAgPG1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyPlxuICAgICAgPGRpdiBjbGFzcz1cInRpdGxlLWNvbnRlbnRcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInFtcy1saXN0LXRleHRcIj5cbiAgICAgICAgICA8ZGl2IHFtcy1saW5lIGNvbG9yPVwiZGVmYXVsdC1zdWJ0aXRsZVwiPnt7dGl0bGV9fVxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmdy02MDBcIj5cbiAgICAgICAgICAgICAgKHt7ZGF0YT8ubGVuZ3RofX0pXG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcj5cbiAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImxpc3RDaGlwXCIgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cIntkYXRhOiBkYXRhLHR5cGU6IHR5cGV9XCI+XG4gICAgPC9uZy1jb250YWluZXI+XG4gIDwvbWF0LWV4cGFuc2lvbi1wYW5lbD5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjaXRlbVdpdGhvdXRDaGVja2JveFRlbXBsYXRlIGxldC1pdGVtPVwiaXRlbVwiIGxldC10eXBlPVwidHlwZVwiPlxuICA8ZGl2IChjbGljayk9XCJvblNlbGVjdEl0ZW0odHlwZSxpdGVtKVwiIGNsYXNzPVwiaXRlbS13aXRob3V0LWNoZWNrYm94IHctMTAwXCIgW2NsYXNzLmFjdGl2ZV09XCJpdGVtLnNlbGVjdGVkXCI+XG4gICAgPGRpdiBjbGFzcz1cIml0ZW0tY29udGVudFwiPlxuICAgICAgPGRpdiBjbGFzcz1cInRleHQtbGFiZWxcIj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LWxhYmVsIGxhYmVsLWl0ZW0gZnMtMTQgXCI+XG4gICAgICAgICAge3sgaXRlbS5uYW1lIH19XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPHNwYW4gKm5nSWY9XCJpdGVtLnN1Yk5hbWVcIiBjbGFzcz1cIm1zLTEgc3ViLWxhYmVsXCI+KHt7aXRlbS5zdWJOYW1lfX0pPC9zcGFuPlxuICAgICAgPC9kaXY+XG4gICAgICA8c21hbGwgKm5nSWY9XCJpdGVtLmhlbHBUZXh0XCIgY2xhc3M9XCJ0ZXh0LWhlbHAgcHgtMSBmcy0xMiBzdWItbGFiZWxcIj57eyBpdGVtLmhlbHBUZXh0IH19PC9zbWFsbD5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiaXRlbS1zdGF0ZVwiPlxuICAgICAgPG1hdC1pY29uIFtAaW5PdXRBbmltYXRpb25dICpuZ0lmPVwiaXRlbS5zZWxlY3RlZFwiPmNoZWNrPC9tYXQtaWNvbj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2l0ZW1DaGVja2JveFRlbXBsYXRlIGxldC1pdGVtPVwiaXRlbVwiIGxldC10eXBlPVwidHlwZVwiPlxuICA8bWF0LWNoZWNrYm94IFtkaXNhYmxlZF09XCIhYWxsb3dSZW1vdmUodHlwZSwgaXRlbSlcIiBbY2hlY2tlZF09XCJpdGVtLnNlbGVjdGVkXCIgKGNsaWNrKT1cIm9uU2VsZWN0SXRlbSh0eXBlLGl0ZW0pXCJcbiAgICBjbGFzcz1cInctMTAwXCIgY29sb3I9XCJkZWZhdWx0XCIgcW1zLWdyb3VwLW9wdGlvbnM+XG4gICAgPGRpdiBjbGFzcz1cInRleHQtbGFiZWxcIj5cbiAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1sYWJlbCBsYWJlbC1pdGVtIGZzLTE0IFwiPlxuICAgICAgICB7eyBpdGVtLm5hbWUgfX1cbiAgICAgIDwvc3Bhbj5cbiAgICAgIDxzcGFuICpuZ0lmPVwiaXRlbS5zdWJOYW1lXCIgY2xhc3M9XCJtcy0xIHN1Yi1sYWJlbFwiPih7e2l0ZW0uc3ViTmFtZX19KTwvc3Bhbj5cbiAgICA8L2Rpdj5cbiAgICA8c21hbGwgKm5nSWY9XCJpdGVtLmhlbHBUZXh0XCIgY2xhc3M9XCJ0ZXh0LWhlbHAgcHgtMSBmcy0xMiBzdWItbGFiZWxcIj57eyBpdGVtLmhlbHBUZXh0IH19PC9zbWFsbD5cbiAgPC9tYXQtY2hlY2tib3g+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2xvYWRpbmc+XG4gIDxkaXYgY2xhc3M9XCJxbXMtbG9hZGluZy1jb250YWluZXJcIj5cbiAgICA8ZGl2IGNsYXNzPVwicW1zLWxvYWRlclwiICpuZ0Zvcj1cImxldCBpdGVtIG9mIGFyclNrZWxldG9uXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwicW1zLWxvYWRlcl9fd3JhcHBlclwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwicm93LWxvYWRlclwiPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+Il19
|