@bnsights/bbsf-admin-portal 1.0.2 → 1.0.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bnsights-bbsf-admin-portal-1.0.6.tgz +0 -0
- package/bundles/bnsights-bbsf-admin-portal.umd.js +19377 -20042
- package/bundles/bnsights-bbsf-admin-portal.umd.js.map +1 -1
- package/esm2015/lib/Pages/_layout/components/aside/aside-menu/aside-menu.component.js +2 -2
- package/esm2015/lib/Pages/account/account-routing.module.js +3 -1
- package/esm2015/lib/Pages/account/account.component.js +15 -6
- package/esm2015/lib/Pages/account/account.module.js +16 -8
- package/esm2015/lib/Pages/account/forgot-password/forgot-password.component.js +48 -0
- package/esm2015/lib/Pages/configurations/configuration/configuration.component.js +392 -387
- package/esm2015/lib/Pages/core/authentication/auth.guard.js +10 -4
- package/esm2015/lib/Pages/core/authentication/auth.service.js +1 -2
- package/esm2015/lib/Pages/departments/department/department.component.js +49 -84
- package/esm2015/lib/Pages/departments/department-info/department-info.component.js +85 -94
- package/esm2015/lib/Pages/departments/departments.module.js +7 -2
- package/esm2015/lib/Pages/helpCenter/help-center/help-center.component.js +224 -223
- package/esm2015/lib/Pages/helpCenter/help-center-secondlevel/help-center-secondlevel.component.js +137 -146
- package/esm2015/lib/Pages/helpCenter/help-center-thirdlevel/help-center-thirdlevel.component.js +136 -153
- package/esm2015/lib/Pages/home/home.component.js +32 -26
- package/esm2015/lib/Pages/home/home.module.js +5 -10
- package/esm2015/lib/Pages/impersonation-rules/impersonation-rules/impersonation-rules.component.js +336 -317
- package/esm2015/lib/Pages/jobs/jobs/jobs.component.js +168 -227
- package/esm2015/lib/Pages/license/license/license.component.js +68 -99
- package/esm2015/lib/Pages/localizations/localizations.component.js +378 -341
- package/esm2015/lib/Pages/logs/log/log.component.js +18 -27
- package/esm2015/lib/Pages/lookups/lookup/lookup.component.js +297 -288
- package/esm2015/lib/Pages/lookups/lookup-group/lookup-group.component.js +143 -165
- package/esm2015/lib/Pages/lookups/lookup-item/lookup-item.component.js +234 -233
- package/esm2015/lib/Pages/lookups/lookups-routing.module.js +2 -2
- package/esm2015/lib/Pages/notifications/add/add.component.js +83 -76
- package/esm2015/lib/Pages/notifications/edit/edit.component.js +60 -63
- package/esm2015/lib/Pages/notifications/edit-email/edit-email.component.js +128 -126
- package/esm2015/lib/Pages/notifications/edit-sms/edit-sms.component.js +87 -85
- package/esm2015/lib/Pages/notifications/master-layouts/master-layouts.component.js +57 -58
- package/esm2015/lib/Pages/notifications/notifications-routing.module.js +1 -3
- package/esm2015/lib/Pages/notifications/notifications.module.js +3 -4
- package/esm2015/lib/Pages/notifications/template-info/template-info.component.js +232 -228
- package/esm2015/lib/Pages/notifications/templates/templates.component.js +347 -310
- package/esm2015/lib/Pages/providers/provider/provider.component.js +54 -52
- package/esm2015/lib/Pages/publicHolidays/public-holiday/public-holiday.component.js +268 -270
- package/esm2015/lib/Pages/roles/permission-set-info/permission-set-info.component.js +136 -152
- package/esm2015/lib/Pages/roles/permissions/permissions.component.js +182 -218
- package/esm2015/lib/Pages/roles/permissionsets/permissionsets.component.js +223 -258
- package/esm2015/lib/Pages/sectors/department-info/department-info.component.js +134 -142
- package/esm2015/lib/Pages/sectors/sector/sector.component.js +127 -144
- package/esm2015/lib/Pages/sectors/sector-info/sector-info.component.js +123 -139
- package/esm2015/lib/Pages/shared/Enums/ConfigurationScope.js +8 -0
- package/esm2015/lib/Pages/shared/Enums/ConfigurationType.js +8 -0
- package/esm2015/lib/Pages/shared/Enums/ConfigurationValueSource.js +6 -0
- package/esm2015/lib/Pages/shared/Enums/ParticipantType.js +8 -0
- package/esm2015/lib/Pages/shared/Services/AccountService.service.js +21 -0
- package/esm2015/lib/Pages/shared/Services/ConfigurationsService.service.js +15 -12
- package/esm2015/lib/Pages/shared/Services/DepartmentService.service.js +4 -5
- package/esm2015/lib/Pages/shared/Services/EmailHeaderAndFooterTemplateService.Service.js +10 -9
- package/esm2015/lib/Pages/shared/Services/HelpCenterService.service.js +10 -7
- package/esm2015/lib/Pages/shared/Services/ImpersonationRuleService.service.js +14 -8
- package/esm2015/lib/Pages/shared/Services/LicenseService.service.js +3 -3
- package/esm2015/lib/Pages/shared/Services/LogsService.js +1 -1
- package/esm2015/lib/Pages/shared/Services/LookupGroupsService.service.js +11 -5
- package/esm2015/lib/Pages/shared/Services/LookupService.service.js +31 -15
- package/esm2015/lib/Pages/shared/Services/PermissionSetService.service.js +18 -8
- package/esm2015/lib/Pages/shared/Services/PermissionsService.service.js +12 -9
- package/esm2015/lib/Pages/shared/Services/PublicHolidayService.service.js +9 -3
- package/esm2015/lib/Pages/shared/Services/SectorService.service.js +18 -13
- package/esm2015/lib/Pages/shared/Services/TemplateService.service.js +36 -29
- package/esm2015/lib/Pages/shared/Services/localizationsService.service .js +23 -13
- package/esm2015/lib/Pages/shared/Services/provider.service.js +5 -7
- package/esm2015/lib/Pages/shared/Services/userService.service.js +10 -2
- package/esm2015/lib/Pages/shared/models/AccountModels/forgotPasswordModel.js +6 -0
- package/esm2015/lib/Pages/shared/models/ConfigurationModels/ConfigurationModel.js +1 -1
- package/esm2015/lib/Pages/shared/models/DepartmentModels/DepartmentModel.js +1 -1
- package/esm2015/lib/Pages/shared/models/DepartmentModels/DepartmentUsersIDRequestModel.js +1 -1
- package/esm2015/lib/Pages/shared/models/ImpersonationRuleModels/ImpersonationRuleModel.js +1 -1
- package/esm2015/lib/Pages/shared/models/Lookups/LookupItem.js +1 -1
- package/esm2015/lib/Pages/shared/models/Lookups/LookupModel.js +1 -2
- package/esm2015/lib/Pages/shared/models/PermissionsModels/PermissionSetUsersIDRequestModel.js +1 -1
- package/esm2015/lib/Pages/shared/models/SectorModels/SectorDepartmentModel.js +1 -1
- package/esm2015/lib/Pages/users/users.component.js +398 -409
- package/esm2015/lib/Pages/workflows/tabs/tabs.component.js +2 -2
- package/esm2015/lib/masterlayout-routing.module.js +5 -4
- package/esm2015/lib/masterlayout.component.js +22 -32
- package/esm2015/lib/masterlayout.module.js +26 -22
- package/esm2015/public-api.js +2 -1
- package/fesm2015/bnsights-bbsf-admin-portal.js +17234 -17314
- package/fesm2015/bnsights-bbsf-admin-portal.js.map +1 -1
- package/lib/Pages/account/account.component.d.ts +5 -1
- package/lib/Pages/account/account.module.d.ts +8 -6
- package/lib/Pages/account/forgot-password/forgot-password.component.d.ts +20 -0
- package/lib/Pages/configurations/configuration/configuration.component.d.ts +39 -31
- package/lib/Pages/core/authentication/auth.guard.d.ts +1 -0
- package/lib/Pages/departments/department/department.component.d.ts +15 -13
- package/lib/Pages/departments/department-info/department-info.component.d.ts +31 -28
- package/lib/Pages/helpCenter/help-center/help-center.component.d.ts +34 -32
- package/lib/Pages/helpCenter/help-center-secondlevel/help-center-secondlevel.component.d.ts +31 -34
- package/lib/Pages/helpCenter/help-center-thirdlevel/help-center-thirdlevel.component.d.ts +30 -35
- package/lib/Pages/home/home.component.d.ts +4 -4
- package/lib/Pages/impersonation-rules/impersonation-rules/impersonation-rules.component.d.ts +43 -42
- package/lib/Pages/jobs/jobs/jobs.component.d.ts +56 -62
- package/lib/Pages/license/license/license.component.d.ts +25 -23
- package/lib/Pages/localizations/localizations.component.d.ts +77 -65
- package/lib/Pages/logs/log/log.component.d.ts +7 -11
- package/lib/Pages/lookups/lookup/lookup.component.d.ts +64 -59
- package/lib/Pages/lookups/lookup-group/lookup-group.component.d.ts +44 -45
- package/lib/Pages/lookups/lookup-item/lookup-item.component.d.ts +62 -56
- package/lib/Pages/notifications/add/add.component.d.ts +13 -11
- package/lib/Pages/notifications/edit/edit.component.d.ts +14 -14
- package/lib/Pages/notifications/edit-email/edit-email.component.d.ts +18 -20
- package/lib/Pages/notifications/edit-sms/edit-sms.component.d.ts +15 -16
- package/lib/Pages/notifications/master-layouts/master-layouts.component.d.ts +24 -25
- package/lib/Pages/notifications/notifications.module.d.ts +15 -16
- package/lib/Pages/notifications/template-info/template-info.component.d.ts +32 -32
- package/lib/Pages/notifications/templates/templates.component.d.ts +54 -46
- package/lib/Pages/providers/provider/provider.component.d.ts +14 -13
- package/lib/Pages/publicHolidays/public-holiday/public-holiday.component.d.ts +29 -27
- package/lib/Pages/roles/permission-set-info/permission-set-info.component.d.ts +39 -40
- package/lib/Pages/roles/permissions/permissions.component.d.ts +49 -54
- package/lib/Pages/roles/permissionsets/permissionsets.component.d.ts +53 -55
- package/lib/Pages/sectors/department-info/department-info.component.d.ts +41 -44
- package/lib/Pages/sectors/sector/sector.component.d.ts +35 -33
- package/lib/Pages/sectors/sector-info/sector-info.component.d.ts +40 -44
- package/lib/Pages/shared/Enums/ConfigurationScope.d.ts +5 -0
- package/lib/Pages/shared/Enums/ConfigurationType.d.ts +6 -0
- package/lib/Pages/shared/Enums/ConfigurationValueSource.d.ts +4 -0
- package/lib/Pages/shared/Enums/ParticipantType.d.ts +6 -0
- package/lib/Pages/shared/Services/AccountService.service.d.ts +10 -0
- package/lib/Pages/shared/Services/ActiveDirectoryService.service.d.ts +8 -8
- package/lib/Pages/shared/Services/ConfigurationsService.service.d.ts +7 -8
- package/lib/Pages/shared/Services/DepartmentService.service.d.ts +7 -7
- package/lib/Pages/shared/Services/EmailHeaderAndFooterTemplateService.Service.d.ts +5 -5
- package/lib/Pages/shared/Services/HelpCenterService.service.d.ts +8 -7
- package/lib/Pages/shared/Services/ImpersonationRuleService.service.d.ts +5 -5
- package/lib/Pages/shared/Services/JobsService.service.d.ts +1 -1
- package/lib/Pages/shared/Services/LicenseService.service.d.ts +2 -2
- package/lib/Pages/shared/Services/LogsService.d.ts +1 -1
- package/lib/Pages/shared/Services/LookupGroupsService.service.d.ts +4 -4
- package/lib/Pages/shared/Services/LookupService.service.d.ts +14 -11
- package/lib/Pages/shared/Services/PermissionSetService.service.d.ts +8 -7
- package/lib/Pages/shared/Services/PermissionsService.service.d.ts +5 -6
- package/lib/Pages/shared/Services/PublicHolidayService.service.d.ts +6 -6
- package/lib/Pages/shared/Services/SectorService.service.d.ts +7 -7
- package/lib/Pages/shared/Services/TemplateService.service.d.ts +20 -19
- package/lib/Pages/shared/Services/WorkflowActivityService.service.d.ts +3 -3
- package/lib/Pages/shared/Services/WorkflowService.service.d.ts +3 -3
- package/lib/Pages/shared/Services/WorkflowVariablesService.service.d.ts +4 -4
- package/lib/Pages/shared/Services/localizationsService.service .d.ts +12 -11
- package/lib/Pages/shared/Services/provider.service.d.ts +10 -10
- package/lib/Pages/shared/Services/userService.service.d.ts +14 -12
- package/lib/Pages/shared/models/AccountModels/forgotPasswordModel.d.ts +3 -0
- package/lib/Pages/shared/models/ConfigurationModels/ConfigurationModel.d.ts +0 -1
- package/lib/Pages/shared/models/DepartmentModels/DepartmentModel.d.ts +1 -0
- package/lib/Pages/shared/models/DepartmentModels/DepartmentUsersIDRequestModel.d.ts +1 -1
- package/lib/Pages/shared/models/ImpersonationRuleModels/ImpersonationRuleModel.d.ts +0 -2
- package/lib/Pages/shared/models/Lookups/LookupModel.d.ts +1 -1
- package/lib/Pages/shared/models/PermissionsModels/PermissionSetUsersIDRequestModel.d.ts +1 -1
- package/lib/Pages/shared/models/SectorModels/SectorDepartmentModel.d.ts +1 -1
- package/lib/Pages/users/users.component.d.ts +54 -68
- package/lib/masterlayout.component.d.ts +4 -5
- package/lib/masterlayout.module.d.ts +8 -9
- package/package.json +5 -3
- package/public-api.d.ts +1 -0
- package/src/lib/assets/sass/core/components/_variables.scss +1 -1
- package/src/lib/assets/sass/custom-styles-rtl.scss +5 -0
- package/src/lib/assets/sass/custom-styles.scss +153 -0
- package/src/lib/assets/sass/style-rtl.scss +2 -0
- package/src/lib/assets/sass/style.scss +2 -2
- package/esm2015/lib/Pages/notifications/edit-template/edit-template.component.js +0 -35
- package/lib/Pages/notifications/edit-template/edit-template.component.d.ts +0 -35
|
@@ -1,61 +1,86 @@
|
|
|
1
|
-
import { __awaiter } from "tslib";
|
|
2
1
|
import { Component, ViewChild } from '@angular/core';
|
|
3
2
|
import { FormGroup } from '@angular/forms';
|
|
4
|
-
import { FilterItem, FilterType, InputType, PagingOptions, TagsInputOptions, TextBoxOptions } from '@bnsights/bbsf-controls';
|
|
3
|
+
import { ConfirmationModalOptions, FilterItem, FilterType, FormOptions, InputType, PagingOptions, TagsInputOptions, TextBoxOptions } from '@bnsights/bbsf-controls';
|
|
5
4
|
import { PageInfoService } from '../../../_metronic/core/services/page-info.service';
|
|
6
5
|
import { PermissionSetUsersIDRequestModel } from '../../shared/models/PermissionsModels/PermissionSetUsersIDRequestModel';
|
|
6
|
+
import { PermissionSetModel } from './../../shared/models/PermissionsModels/PermissionSetModel';
|
|
7
7
|
import * as i0 from "@angular/core";
|
|
8
8
|
import * as i1 from "../../../_metronic/core/services/page-info.service";
|
|
9
9
|
import * as i2 from "@bnsights/bbsf-utilities";
|
|
10
10
|
import * as i3 from "@angular/router";
|
|
11
|
-
import * as i4 from "../../shared/Services/
|
|
12
|
-
import * as i5 from "
|
|
13
|
-
import * as i6 from "
|
|
14
|
-
import * as i7 from "
|
|
15
|
-
import * as i8 from "@
|
|
16
|
-
import * as i9 from "
|
|
17
|
-
import * as i10 from "
|
|
18
|
-
import * as i11 from "
|
|
19
|
-
import * as i12 from "@angular/forms";
|
|
20
|
-
import * as i13 from "ng-inline-svg";
|
|
11
|
+
import * as i4 from "../../shared/Services/PermissionSetService.service";
|
|
12
|
+
import * as i5 from "@ng-bootstrap/ng-bootstrap";
|
|
13
|
+
import * as i6 from "ng-block-ui";
|
|
14
|
+
import * as i7 from "@bnsights/bbsf-controls";
|
|
15
|
+
import * as i8 from "@angular/material/menu";
|
|
16
|
+
import * as i9 from "../../empty-data/empty-data.component";
|
|
17
|
+
import * as i10 from "@angular/common";
|
|
18
|
+
import * as i11 from "ng-inline-svg";
|
|
21
19
|
export class PermissionSetInfoComponent {
|
|
22
|
-
constructor(pageInfoService, utilityService,
|
|
20
|
+
constructor(pageInfoService, utilityService, activatedRoute, authService, permissionSetService, modalService, requestHandlerService) {
|
|
23
21
|
this.pageInfoService = pageInfoService;
|
|
24
22
|
this.utilityService = utilityService;
|
|
25
|
-
this.bbsfTranslateService = bbsfTranslateService;
|
|
26
|
-
this.environmentService = environmentService;
|
|
27
23
|
this.activatedRoute = activatedRoute;
|
|
28
|
-
this.dataServices = dataServices;
|
|
29
24
|
this.authService = authService;
|
|
30
|
-
this.
|
|
25
|
+
this.permissionSetService = permissionSetService;
|
|
31
26
|
this.modalService = modalService;
|
|
32
|
-
this.
|
|
33
|
-
|
|
34
|
-
this.
|
|
35
|
-
|
|
36
|
-
this.
|
|
37
|
-
this.
|
|
27
|
+
this.requestHandlerService = requestHandlerService;
|
|
28
|
+
//Page requirements
|
|
29
|
+
this.ApiUrl = this.permissionSetService.ApiUrl;
|
|
30
|
+
//Parent department data
|
|
31
|
+
this.PermissionSetId = "";
|
|
32
|
+
this.PermissionSet = new PermissionSetModel();
|
|
38
33
|
this.filterForm = new FormGroup({});
|
|
39
|
-
this.
|
|
34
|
+
this.userPermissionSetForm = new FormGroup({});
|
|
40
35
|
this.showFilter = false;
|
|
41
|
-
this.
|
|
42
|
-
this.
|
|
43
|
-
this.
|
|
44
|
-
this.PageName = "";
|
|
45
|
-
// Decorator wires up blockUI instance
|
|
46
|
-
this.ShowPageContent = false;
|
|
36
|
+
this.userPermissionSetPagingResult = [];
|
|
37
|
+
this.filteredUserPermissionSetPagingResult = [];
|
|
38
|
+
this.isFilterLoaded = false;
|
|
47
39
|
//Add Model Controls
|
|
48
|
-
this.
|
|
49
|
-
this.
|
|
40
|
+
this.addUsersToPermissionSetForm = new FormGroup({});
|
|
41
|
+
this.deleteControlLoaded = false;
|
|
42
|
+
this.getAddUserToPermissionSetModel = () => {
|
|
43
|
+
let paramArray = [];
|
|
44
|
+
let ResultModel = this.addUsersToPermissionSetForm.value;
|
|
45
|
+
let AddModel = new PermissionSetUsersIDRequestModel();
|
|
46
|
+
for (let index = 0; index < ResultModel.UserAutoComplete.length; index++) {
|
|
47
|
+
const key = ResultModel.UserAutoComplete[index].key;
|
|
48
|
+
AddModel.UsersIDs.push(Number(key));
|
|
49
|
+
}
|
|
50
|
+
AddModel.PermissionSetId = this.PermissionSetId;
|
|
51
|
+
paramArray.push(AddModel);
|
|
52
|
+
return paramArray;
|
|
53
|
+
};
|
|
54
|
+
this.getAddUserToPermissionSetFunction = (AddModel) => {
|
|
55
|
+
return this.permissionSetService.addUsersToPermissionSet(AddModel);
|
|
56
|
+
};
|
|
57
|
+
this.deleteUserFromPermissionSet = (deleteUserId, PerSetId) => {
|
|
58
|
+
return this.permissionSetService.deleteUserFromPermissionSet(deleteUserId, PerSetId);
|
|
59
|
+
};
|
|
60
|
+
this.activatedRoute.params.subscribe(params => {
|
|
61
|
+
this.PermissionSetId = params['id'];
|
|
62
|
+
});
|
|
50
63
|
}
|
|
51
64
|
ngOnInit() {
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
65
|
+
//Page header (breadcrumb and title)
|
|
66
|
+
this.loadBreadCrumpData();
|
|
67
|
+
}
|
|
68
|
+
//Paging functions
|
|
69
|
+
setUserPermissionSetListResult(result) {
|
|
70
|
+
this.userPermissionSetPagingResult = result;
|
|
71
|
+
this.filteredUserPermissionSetPagingResult = this.userPermissionSetPagingResult;
|
|
72
|
+
}
|
|
73
|
+
//Reset all Filters
|
|
74
|
+
resetFilters() {
|
|
75
|
+
this.userPermissionSetForm.controls["searchTextBox"].setValue(null);
|
|
76
|
+
let element = this.pagingElement;
|
|
77
|
+
element.ReinitializePaging();
|
|
78
|
+
}
|
|
79
|
+
//Get parent PermissionSets name and set page title and breadcrumbs
|
|
80
|
+
loadBreadCrumpData() {
|
|
81
|
+
this.permissionSetService.getPermissionSetInfo(this.PermissionSetId).subscribe((result) => {
|
|
82
|
+
let resultModel = result;
|
|
83
|
+
PageInfoService.PageTitle = resultModel.val;
|
|
59
84
|
PageInfoService.PageBreadcrumbs = [
|
|
60
85
|
{ title: this.utilityService.getResourceValue("Home"), path: '/Admin/Home', isSeparator: false, isActive: false },
|
|
61
86
|
{ title: '', path: '', isSeparator: true, isActive: false },
|
|
@@ -64,142 +89,101 @@ export class PermissionSetInfoComponent {
|
|
|
64
89
|
];
|
|
65
90
|
this.pageInfoService.calculateTitle();
|
|
66
91
|
this.pageInfoService.calculateBreadcrumbs();
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
this.language = event.lang;
|
|
70
|
-
this.ngOnInit();
|
|
71
|
-
});
|
|
72
|
-
this.language = yield this.utilityService.getCurrentLanguage();
|
|
73
|
-
this.activatedRoute.params.subscribe(params => {
|
|
74
|
-
this.PermissionSetId = params['id'];
|
|
75
|
-
this.LoadUserList();
|
|
76
|
-
});
|
|
92
|
+
//initialize page
|
|
93
|
+
this.initializePage();
|
|
77
94
|
});
|
|
78
95
|
}
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
}
|
|
83
|
-
UpdateUserPermissionSetPaging() {
|
|
84
|
-
let element = this.input;
|
|
85
|
-
element.UpdatePaging();
|
|
86
|
-
}
|
|
87
|
-
setUserPermissionSetListResult(result) {
|
|
88
|
-
this.UserPermissionSetPagingResult = result;
|
|
89
|
-
this.ShowPageContent = true;
|
|
90
|
-
}
|
|
91
|
-
resetFilters() {
|
|
92
|
-
this.UserPermissionSetForm.controls["searchTextBox"].setValue(null);
|
|
93
|
-
let element = this.input;
|
|
94
|
-
element.ReinitializePaging();
|
|
95
|
-
}
|
|
96
|
-
LoadUserList() {
|
|
96
|
+
//initialize page
|
|
97
|
+
initializePage() {
|
|
98
|
+
this.isFilterLoaded = false;
|
|
97
99
|
// TextBox inti
|
|
98
|
-
this.utilityService.startBlockUI();
|
|
99
100
|
this.searchTextBox = new TextBoxOptions();
|
|
100
101
|
this.searchTextBox.Name = "searchTextBox";
|
|
101
102
|
this.searchTextBox.HideLabel = true;
|
|
102
103
|
this.searchTextBox.Type = InputType.Text;
|
|
103
104
|
this.searchTextBox.Placeholder = this.utilityService.getResourceValue("SearchByNameOrEmail");
|
|
104
|
-
this.
|
|
105
|
-
this.
|
|
106
|
-
this.
|
|
107
|
-
this.
|
|
108
|
-
this.
|
|
109
|
-
this.
|
|
110
|
-
this.
|
|
111
|
-
this.
|
|
112
|
-
this.
|
|
113
|
-
this.
|
|
114
|
-
this.
|
|
115
|
-
this.
|
|
116
|
-
this.
|
|
117
|
-
this.
|
|
118
|
-
this.
|
|
119
|
-
this.
|
|
120
|
-
this.
|
|
121
|
-
this.
|
|
122
|
-
this.
|
|
123
|
-
this.
|
|
124
|
-
this.
|
|
125
|
-
setTimeout(() => {
|
|
126
|
-
this.IsFilterLoaded = true;
|
|
127
|
-
this.utilityService.stopBlockUI();
|
|
128
|
-
}, 10);
|
|
105
|
+
this.permissionSetIdTextBox = new TextBoxOptions();
|
|
106
|
+
this.permissionSetIdTextBox.Name = "PermissionSetIdTextBox";
|
|
107
|
+
this.permissionSetIdTextBox.HideLabel = true;
|
|
108
|
+
this.permissionSetIdTextBox.Type = InputType.Text;
|
|
109
|
+
this.permissionSetIdTextBox.Value = this.PermissionSetId;
|
|
110
|
+
this.permissionSetIdTextBox.Placeholder = this.utilityService.getResourceValue("SearchByName");
|
|
111
|
+
this.textInputFilter = new FilterItem();
|
|
112
|
+
this.textInputFilter.FormControlName = "searchTextBox";
|
|
113
|
+
this.textInputFilter.ActionParameterName = "searchText";
|
|
114
|
+
this.textInputFilter.IsFormControl = true;
|
|
115
|
+
this.textInputFilter.FilterType = FilterType.TextBox;
|
|
116
|
+
this.permissionSetIdTextInputFilter = new FilterItem();
|
|
117
|
+
this.permissionSetIdTextInputFilter.FormControlName = "PermissionSetIdTextBox";
|
|
118
|
+
this.permissionSetIdTextInputFilter.ActionParameterName = "permissionSetId";
|
|
119
|
+
this.permissionSetIdTextInputFilter.IsFormControl = true;
|
|
120
|
+
this.permissionSetIdTextInputFilter.FilterType = FilterType.TextBox;
|
|
121
|
+
this.userPermissionSetPaging = new PagingOptions();
|
|
122
|
+
this.userPermissionSetPaging.ActionPostURL = this.ApiUrl + 'GetUsersByFilter';
|
|
123
|
+
this.userPermissionSetPaging.OnKeyPressFiltersControlNames = ["searchTextBox", "PermissionSetIdTextBox"];
|
|
124
|
+
this.userPermissionSetPaging.Filters = [this.textInputFilter, this.permissionSetIdTextInputFilter];
|
|
125
|
+
this.isFilterLoaded = true;
|
|
129
126
|
}
|
|
130
|
-
|
|
127
|
+
///////////// Start add user Part//////////////////////
|
|
128
|
+
showAddUserToPermissionSetModal(addUserToDepartmentModal) {
|
|
131
129
|
this.utilityService.startBlockUI();
|
|
132
|
-
this.
|
|
133
|
-
this.
|
|
134
|
-
this.
|
|
135
|
-
this.
|
|
136
|
-
this.
|
|
137
|
-
this.
|
|
138
|
-
this.
|
|
139
|
-
this.
|
|
140
|
-
this.
|
|
130
|
+
this.addUsersToPermissionSetForm = new FormGroup({});
|
|
131
|
+
this.addUsersToPermissionSetFormOptions = new FormOptions();
|
|
132
|
+
this.addUsersToPermissionSetFormOptions.FormGroup = this.addUsersToPermissionSetForm;
|
|
133
|
+
this.addUsersToPermissionSetFormOptions.GetModelFunction = this.getAddUserToPermissionSetModel;
|
|
134
|
+
this.addUsersToPermissionSetFormOptions.ServiceSubmitFunction = this.getAddUserToPermissionSetFunction;
|
|
135
|
+
this.addUsersToPermissionSetFormOptions.PagingReference = this.pagingElement;
|
|
136
|
+
this.userAutoComplete = new TagsInputOptions();
|
|
137
|
+
this.userAutoComplete.Name = "UserAutoComplete";
|
|
138
|
+
this.userAutoComplete.LabelKey = "Users";
|
|
139
|
+
this.userAutoComplete.IsRequired = true;
|
|
140
|
+
this.userAutoComplete.Value = null;
|
|
141
|
+
this.userAutoComplete.ActionURL = this.ApiUrl + "AutoCompleteUserList";
|
|
142
|
+
this.userAutoComplete.ValidationToken = this.authService.authorizationHeaderValue();
|
|
143
|
+
this.modalService.open(addUserToDepartmentModal);
|
|
141
144
|
this.utilityService.stopBlockUI();
|
|
142
145
|
}
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
}, (error) => {
|
|
160
|
-
});
|
|
161
|
-
}
|
|
146
|
+
///////////// End add User Part//////////////////////
|
|
147
|
+
///////////Start delete user from PermissionSet//////////////////////
|
|
148
|
+
showDeleteUserFromPermissionSetModal(encryptedUserId) {
|
|
149
|
+
this.deleteUserId = encryptedUserId;
|
|
150
|
+
//array sent to service function
|
|
151
|
+
let paramArray = [];
|
|
152
|
+
paramArray.push(this.deleteUserId);
|
|
153
|
+
paramArray.push(this.PermissionSetId);
|
|
154
|
+
this.deleteConfirmationOptions = new ConfirmationModalOptions();
|
|
155
|
+
this.deleteConfirmationOptions.ServiceSubmitFunction = this.deleteUserFromPermissionSet;
|
|
156
|
+
this.deleteConfirmationOptions.ServiceSubmitModel = paramArray;
|
|
157
|
+
this.deleteConfirmationOptions.PagingReference = this.pagingElement;
|
|
158
|
+
this.deleteControlLoaded = true;
|
|
159
|
+
setTimeout(() => {
|
|
160
|
+
this.ConfirmationModalControl.showModal();
|
|
161
|
+
}, 200);
|
|
162
162
|
}
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
163
|
+
///////////End delete user from department//////////////////////
|
|
164
|
+
filterUserList(searchValue) {
|
|
165
|
+
if (searchValue)
|
|
166
|
+
this.filteredUserPermissionSetPagingResult = this.userPermissionSetPagingResult.filter(item => item.userName.toLowerCase().includes(searchValue.toLowerCase()));
|
|
167
|
+
else
|
|
168
|
+
this.filteredUserPermissionSetPagingResult = this.userPermissionSetPagingResult;
|
|
168
169
|
}
|
|
169
|
-
|
|
170
|
-
this.
|
|
171
|
-
var data = result;
|
|
172
|
-
if (!data.val) {
|
|
173
|
-
console.log("notified error");
|
|
174
|
-
this.utilityService.notifyErrorMessage(this.utilityService.getResourceValue("CannotDeleteLastUserPermissionSet"));
|
|
175
|
-
}
|
|
176
|
-
else {
|
|
177
|
-
this.utilityService.notifySuccessMessage();
|
|
178
|
-
}
|
|
179
|
-
this.deleteUserId = 0;
|
|
180
|
-
this.modalService.dismissAll();
|
|
181
|
-
let element = this.input;
|
|
182
|
-
element.ReinitializePaging();
|
|
183
|
-
}, (error) => {
|
|
184
|
-
});
|
|
170
|
+
ngOnDestroy() {
|
|
171
|
+
this.requestHandlerService.destroyHandler();
|
|
185
172
|
}
|
|
186
173
|
}
|
|
187
|
-
PermissionSetInfoComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.13", ngImport: i0, type: PermissionSetInfoComponent, deps: [{ token: i1.PageInfoService }, { token: i2.UtilityService }, { token:
|
|
188
|
-
PermissionSetInfoComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.13", type: PermissionSetInfoComponent, selector: "lib-permission-set-info", viewQueries: [{ propertyName: "
|
|
174
|
+
PermissionSetInfoComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.13", ngImport: i0, type: PermissionSetInfoComponent, deps: [{ token: i1.PageInfoService }, { token: i2.UtilityService }, { token: i3.ActivatedRoute }, { token: i2.AuthService }, { token: i4.PermissionSetService }, { token: i5.NgbModal }, { token: i2.RequestHandlerService }], target: i0.ɵɵFactoryTarget.Component });
|
|
175
|
+
PermissionSetInfoComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.13", type: PermissionSetInfoComponent, selector: "lib-permission-set-info", viewQueries: [{ propertyName: "pagingElement", first: true, predicate: ["UserPermissionSetPagingViewElement"], descendants: true }, { propertyName: "ConfirmationModalControl", first: true, predicate: ["ConfirmationModalControl"], descendants: true }], ngImport: i0, template: "\r\n<block-ui></block-ui>\r\n<!-- Page Content -->\r\n<div class=\"container-fluid\">\r\n <div class=\"card card-custom-h\">\r\n <div class=\"card-header border-0 pt-5\">\r\n <div class=\"card-title align-items-start flex-column\" *ngIf=\"isFilterLoaded\">\r\n <BBSF-TextBox [options]=\"searchTextBox\" (OnChange)=\"filterUserList($event)\" [group]=\"userPermissionSetForm\"></BBSF-TextBox>\r\n <BBSF-TextBox [hidden]=\"true\" [options]=\"permissionSetIdTextBox\" [group]=\"userPermissionSetForm\"></BBSF-TextBox>\r\n </div>\r\n <div class=\"card-toolbar\">\r\n <!-- begin::Menu -->\r\n <button type=\"button\" class=\"btn btn-sm btn-primary\" title=\"Add\" (click)=\"showAddUserToPermissionSetModal(AddUserToPermissionSetModal)\">\r\n <i class=\"fas fa-plus me-1\"></i>\r\n {{utilityService.getResourceValue(\"Add\")}}\r\n </button>\r\n\r\n <!-- end::Menu -->\r\n </div>\r\n </div>\r\n <div class=\"card-body py-3\">\r\n <div class=\"table-responsive\">\r\n <!--begin::Permission list-->\r\n <table class=\"table align-middle table-row-dashed fs-6 gy-5 dataTable no-footer\">\r\n <thead>\r\n <tr class=\"text-start text-gray-400 fw-bolder fs-7 text-uppercase gs-0\">\r\n\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"Name\")}}</th>\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"Email\")}}</th>\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"Roles\")}}</th>\r\n <th class=\"min-w-50px\">{{utilityService.getResourceValue(\"Action\")}}</th>\r\n </tr>\r\n </thead>\r\n <tbody id=\"listingContainer\" class=\"fw-bold text-gray-600 border-0\">\r\n\r\n <tr *ngFor=\"let user of filteredUserPermissionSetPagingResult\">\r\n\r\n <td>\r\n <span class=\"text-dark\">{{user.userName}}</span>\r\n </td>\r\n <td>{{user.email}}</td>\r\n <td>{{user.userPermsets}}</td>\r\n <td>\r\n <div>\r\n <button mat-button [matMenuTriggerFor]=\"menu\" class=\"btn btn-sm btn-icon btn-light btn-active-light-primary\">\r\n <i class=\"fa fa-ellipsis-h\" aria-hidden=\"true\"></i>\r\n </button>\r\n <mat-menu #menu=\"matMenu\">\r\n <a ngbDropdownItem class=\"drop-item px-3\"\r\n (click)=\"showDeleteUserFromPermissionSetModal(user.idEncrypted)\">\r\n <span class=\"drop-link px-3\">{{utilityService.getResourceValue(\"Delete\")}}</span>\r\n </a>\r\n </mat-menu>\r\n </div>\r\n </td>\r\n </tr>\r\n <tr *ngIf=\"filteredUserPermissionSetPagingResult.length == 0\">\r\n <td colspan=\"4\">\r\n <lib-empty-data></lib-empty-data>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n\r\n <!--end::Permission list-->\r\n </div>\r\n\r\n </div>\r\n <div class=\"card-footer border-0\">\r\n <BBSF-Paging (Items)=\"setUserPermissionSetListResult($event)\" *ngIf=\"isFilterLoaded\"\r\n [options]=\"userPermissionSetPaging\" [group]=\"userPermissionSetForm\" #UserPermissionSetPagingViewElement>\r\n </BBSF-Paging>\r\n </div>\r\n </div>\r\n\r\n</div>\r\n\r\n<!--add Modal-->\r\n<ng-template #AddUserToPermissionSetModal let-modal>\r\n <div class=\"modal-header pb-0 border-0 justify-content-end\">\r\n <h5 class=\"modal-title\" id=\"exampleModalLabel\"></h5>\r\n <button type=\"button\" data-dismiss=\"modal\" aria-label=\"Close\" class=\"btn btn-sm btn-icon btn-active-color-primary\"\r\n (click)=\"modal.dismiss()\">\r\n <span class=\"svg-icon svg-icon-1\">\r\n <span [inlineSVG]=\"'./src/assets/images/arr061.svg'\"></span>\r\n </span>\r\n </button>\r\n </div>\r\n <div class=\"modal-body scroll-y px-10 px-lg-15 pt-0 pb-15\">\r\n <div class=\"mb-13 text-center\">\r\n <h1 class=\"mb-3\"> {{utilityService.getResourceValue(\"Add\")}} {{utilityService.getResourceValue(\"User\")}} </h1>\r\n </div>\r\n <BBSF-Form [options]=\"addUsersToPermissionSetFormOptions\">\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-TagsInput [options]=\"userAutoComplete\" [group]=\"addUsersToPermissionSetForm\">\r\n </BBSF-TagsInput>\r\n </div>\r\n </div>\r\n <div class=\"text-center pt-7\">\r\n <button #CloseAddUsersToDepartment id=\"CloseAddUsersToDepartment\" type=\"button\"\r\n class=\"btn btn-light btn-sm me-3\" data-dismiss=\"modal\" (click)=\"modal.dismiss()\">\r\n {{utilityService.getResourceValue(\"CancelLabel\")}}\r\n </button>\r\n <button type=\"submit\" class=\"btn btn-primary btn-sm\">{{utilityService.getResourceValue(\"SaveLabel\")}}</button>\r\n </div>\r\n </BBSF-Form>\r\n </div>\r\n</ng-template>\r\n\r\n<!--delete Modal-->\r\n<BBSF-ConfirmationModal *ngIf=\"deleteControlLoaded\" [options]=\"deleteConfirmationOptions\" id=\"ConfirmationModalControl\"\r\n #ConfirmationModalControl></BBSF-ConfirmationModal>\r\n\r\n\r\n\r\n\r\n", components: [{ type: i6.BlockUIComponent, selector: "block-ui", inputs: ["name", "template", "message", "delayStart", "delayStop"] }, { type: i7.ɵd, selector: "BBSF-TextBox", inputs: ["group", "options"], outputs: ["OnChange"] }, { type: i8.MatMenu, selector: "mat-menu", exportAs: ["matMenu"] }, { type: i9.EmptyDataComponent, selector: "lib-empty-data", inputs: ["Message", "ShowImage", "ImgURL"] }, { type: i7.ɵs, selector: "BBSF-Paging", inputs: ["options", "group"], outputs: ["Items"] }, { type: i7.ɵv, selector: "BBSF-Form", inputs: ["options"] }, { type: i7.ɵr, selector: "BBSF-TagsInput", inputs: ["group", "options"], outputs: ["OnChange"] }, { type: i7.ɵw, selector: "BBSF-ConfirmationModal", inputs: ["options"] }], directives: [{ type: i10.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i10.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i8.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["matMenuTriggerRestoreFocus", "mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { type: i5.NgbDropdownItem, selector: "[ngbDropdownItem]", inputs: ["disabled"] }, { type: i11.InlineSVGDirective, selector: "[inlineSVG]", inputs: ["resolveSVGUrl", "replaceContents", "prepend", "injectComponent", "cacheSVG", "forceEvalStyles", "evalScripts", "inlineSVG", "setSVGAttributes", "removeSVGAttributes", "fallbackImgUrl", "onSVGLoaded"], outputs: ["onSVGInserted", "onSVGFailed"] }] });
|
|
189
176
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.13", ngImport: i0, type: PermissionSetInfoComponent, decorators: [{
|
|
190
177
|
type: Component,
|
|
191
178
|
args: [{
|
|
192
179
|
selector: 'lib-permission-set-info',
|
|
193
180
|
templateUrl: './permission-set-info.component.html'
|
|
194
181
|
}]
|
|
195
|
-
}], ctorParameters: function () { return [{ type: i1.PageInfoService }, { type: i2.UtilityService }, { type:
|
|
182
|
+
}], ctorParameters: function () { return [{ type: i1.PageInfoService }, { type: i2.UtilityService }, { type: i3.ActivatedRoute }, { type: i2.AuthService }, { type: i4.PermissionSetService }, { type: i5.NgbModal }, { type: i2.RequestHandlerService }]; }, propDecorators: { pagingElement: [{
|
|
196
183
|
type: ViewChild,
|
|
197
184
|
args: ['UserPermissionSetPagingViewElement', { static: false }]
|
|
198
|
-
}],
|
|
199
|
-
type: ViewChild,
|
|
200
|
-
args: ['CloseAddUsersToPermissionSet', { static: false }]
|
|
201
|
-
}], CloseDeleteUserFromPermissionSetModal: [{
|
|
185
|
+
}], ConfirmationModalControl: [{
|
|
202
186
|
type: ViewChild,
|
|
203
|
-
args: ['
|
|
187
|
+
args: ['ConfirmationModalControl', { static: false }]
|
|
204
188
|
}] } });
|
|
205
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVybWlzc2lvbi1zZXQtaW5mby5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9iYnNmLWFkbWluLXBvcnRhbC9zcmMvbGliL1BhZ2VzL3JvbGVzL3Blcm1pc3Npb24tc2V0LWluZm8vcGVybWlzc2lvbi1zZXQtaW5mby5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9iYnNmLWFkbWluLXBvcnRhbC9zcmMvbGliL1BhZ2VzL3JvbGVzL3Blcm1pc3Npb24tc2V0LWluZm8vcGVybWlzc2lvbi1zZXQtaW5mby5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBc0IsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUUzQyxPQUFPLEVBQUcsVUFBVSxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsYUFBYSxFQUFFLGdCQUFnQixFQUFFLGNBQWMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzlILE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxvREFBb0QsQ0FBQztBQUNyRixPQUFPLEVBQUUsZ0NBQWdDLEVBQUUsTUFBTSx3RUFBd0UsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7O0FBVTFILE1BQU0sT0FBTywwQkFBMEI7SUFrQ3JDLFlBQW9CLGVBQStCLEVBQVMsY0FBNkIsRUFBUyxvQkFBeUMsRUFBUyxrQkFBcUMsRUFBUyxjQUE4QixFQUFVLFlBQStCLEVBQVUsV0FBd0IsRUFBVSxvQkFBMEMsRUFBVSxZQUFzQjtRQUEzVyxvQkFBZSxHQUFmLGVBQWUsQ0FBZ0I7UUFBUyxtQkFBYyxHQUFkLGNBQWMsQ0FBZTtRQUFTLHlCQUFvQixHQUFwQixvQkFBb0IsQ0FBcUI7UUFBUyx1QkFBa0IsR0FBbEIsa0JBQWtCLENBQW1CO1FBQVMs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RyxDQUFDLENBQUM7WUFDdEIsSUFBSSxDQUFDLFlBQVksQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUMvQixJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUMsS0FBWSxDQUFDO1lBQ2hDLE9BQU8sQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBQy9CLENBQUMsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFO1FBRWIsQ0FBQyxDQUFDLENBQUE7SUFDSixDQUFDOzt3SEFoTVUsMEJBQTBCOzRHQUExQiwwQkFBMEIsNGNDZnZDLGkxT0F3SkE7NEZEeklhLDBCQUEwQjtrQkFKdEMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUseUJBQXlCO29CQUNuQyxXQUFXLEVBQUUsc0NBQXNDO2lCQUNwRDt3VkFxQnFFLEtBQUs7c0JBQXhFLFNBQVM7dUJBQUMsb0NBQW9DLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFO2dCQU9KLDRCQUE0QjtzQkFBekYsU0FBUzt1QkFBQyw4QkFBOEIsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7Z0JBS1cscUNBQXFDO3NCQUEzRyxTQUFTO3VCQUFDLHVDQUF1QyxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRWxlbWVudFJlZiwgT25Jbml0LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7ICBGaWx0ZXJJdGVtLCBGaWx0ZXJUeXBlLCBJbnB1dFR5cGUsIFBhZ2luZ09wdGlvbnMsIFRhZ3NJbnB1dE9wdGlvbnMsIFRleHRCb3hPcHRpb25zIH0gZnJvbSAnQGJuc2lnaHRzL2Jic2YtY29udHJvbHMnO1xyXG5pbXBvcnQgeyBQYWdlSW5mb1NlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9fbWV0cm9uaWMvY29yZS9zZXJ2aWNlcy9wYWdlLWluZm8uc2VydmljZSc7XHJcbmltcG9ydCB7IFBlcm1pc3Npb25TZXRVc2Vyc0lEUmVxdWVzdE1vZGVsIH0gZnJvbSAnLi4vLi4vc2hhcmVkL21vZGVscy9QZXJtaXNzaW9uc01vZGVscy9QZXJtaXNzaW9uU2V0VXNlcnNJRFJlcXVlc3RNb2RlbCc7XHJcbmltcG9ydCB7IERhdGFTZWNyZXRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2hhcmVkL1NlcnZpY2VzL2RhdGEuc2VydmljZSc7XHJcbmltcG9ydCB7IFBlcm1pc3Npb25TZXRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2hhcmVkL1NlcnZpY2VzL1Blcm1pc3Npb25TZXRTZXJ2aWNlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBOZ2JNb2RhbCwgTW9kYWxEaXNtaXNzUmVhc29ucyB9IGZyb20gJ0BuZy1ib290c3RyYXAvbmctYm9vdHN0cmFwJztcclxuaW1wb3J0IHsgQXV0aFNlcnZpY2UsIFV0aWxpdHlTZXJ2aWNlLCBCQlNGVHJhbnNsYXRlU2VydmljZSwgRW52aXJvbm1lbnRTZXJ2aWNlIH0gZnJvbSAnQGJuc2lnaHRzL2Jic2YtdXRpbGl0aWVzJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnbGliLXBlcm1pc3Npb24tc2V0LWluZm8nLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9wZXJtaXNzaW9uLXNldC1pbmZvLmNvbXBvbmVudC5odG1sJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgUGVybWlzc2lvblNldEluZm9Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG5cclxuICBBcGlVcmwgPSBcIi9hcGkvYWRtaW4vUGVybWlzc2lvblNldHMvXCJcclxuICBTdWJoZWFkZXJUaXRsZSA9IFwiXCI7XHJcbiAgQnJlYWRjcnVtYlRpdGxlID0gdGhpcy51dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKCdQZXJtaXNzaW9uU2V0cycpO1xyXG4gIFVybDpzdHJpbmc9XCIvQWRtaW4vUm9sZXMvUGVybWlzc2lvblNldHNcIlxyXG4gIFNob3dUb29sYmFyID0gdHJ1ZTtcclxuICBTaG93YnJlYWRDcnVtYiA9IHRydWU7XHJcbiAgc2VhcmNoVGV4dEJveDogVGV4dEJveE9wdGlvbnM7XHJcbiAgUGVybWlzc2lvblNldElkVGV4dEJveDogVGV4dEJveE9wdGlvbnM7XHJcbiAgZmlsdGVyRm9ybSA9IG5ldyBGb3JtR3JvdXAoe30pO1xyXG4gIFVzZXJQZXJtaXNzaW9uU2V0Rm9ybSA9IG5ldyBGb3JtR3JvdXAoe30pO1xyXG4gIHNob3dGaWx0ZXI6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBVc2VyUGVybWlzc2lvblNldFBhZ2luZ1Jlc3VsdDogYW55W10gPSBbXTtcclxuICBVc2VyUGVybWlzc2lvblNldFBhZ2luZzogUGFnaW5nT3B0aW9ucztcclxuICBUZXh0SW5wdXRGaWx0ZXI6IEZpbHRlckl0ZW07XHJcbiAgUGVybWlzc2lvblNldElkVGV4dElucHV0RmlsdGVyOiBGaWx0ZXJJdGVtO1xyXG4gIElzRmlsdGVyTG9hZGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgUGVybWlzc2lvblNldElkOiBzdHJpbmcgPSBcIlwiXHJcbiAgUGFnZU5hbWU6c3RyaW5nPVwiXCJcclxuICBAVmlld0NoaWxkKCdVc2VyUGVybWlzc2lvblNldFBhZ2luZ1ZpZXdFbGVtZW50JywgeyBzdGF0aWM6IGZhbHNlIH0pIGlucHV0OiBFbGVtZW50UmVmO1xyXG4gIC8vIERlY29yYXRvciB3aXJlcyB1cCBibG9ja1VJIGluc3RhbmNlXHJcbiAgU2hvd1BhZ2VDb250ZW50OiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIC8vQWRkIE1vZGVsIENvbnRyb2xzXHJcbiAgQWRkVXNlcnNUb1Blcm1pc3Npb25TZXRGb3JtID0gbmV3IEZvcm1Hcm91cCh7fSk7XHJcbiAgVXNlckF1dG9Db21wbGV0ZTogVGFnc0lucHV0T3B0aW9ucztcclxuICBAVmlld0NoaWxkKCdDbG9zZUFkZFVzZXJzVG9QZXJtaXNzaW9uU2V0JywgeyBzdGF0aWM6IGZhbHNlIH0pIENsb3NlQWRkVXNlcnNUb1Blcm1pc3Npb25TZXQ6IEVsZW1lbnRSZWY7XHJcbiAgbGFuZ3VhZ2U6c3RyaW5nPVwiXCJcclxuXHJcbiAgLy9kZWxldGUgIE1vZGVsIENvbnRyb2xzXHJcbiAgZGVsZXRlVXNlcklkOiBudW1iZXI7XHJcbiAgQFZpZXdDaGlsZCgnQ2xvc2VEZWxldGVVc2VyRnJvbVBlcm1pc3Npb25TZXRNb2RhbCcsIHsgc3RhdGljOiBmYWxzZSB9KSBDbG9zZURlbGV0ZVVzZXJGcm9tUGVybWlzc2lvblNldE1vZGFsOiBFbGVtZW50UmVmO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHBhZ2VJbmZvU2VydmljZTpQYWdlSW5mb1NlcnZpY2UsIHB1YmxpYyB1dGlsaXR5U2VydmljZTpVdGlsaXR5U2VydmljZSxwcml2YXRlIGJic2ZUcmFuc2xhdGVTZXJ2aWNlOkJCU0ZUcmFuc2xhdGVTZXJ2aWNlLHByaXZhdGUgZW52aXJvbm1lbnRTZXJ2aWNlOkVudmlyb25tZW50U2VydmljZSxwcml2YXRlIGFjdGl2YXRlZFJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSwgcHJpdmF0ZSBkYXRhU2VydmljZXM6IERhdGFTZWNyZXRTZXJ2aWNlLCBwcml2YXRlIGF1dGhTZXJ2aWNlOiBBdXRoU2VydmljZSwgcHJpdmF0ZSBQZXJtaXNzaW9uU2V0U2VydmljZTogUGVybWlzc2lvblNldFNlcnZpY2UsIHByaXZhdGUgbW9kYWxTZXJ2aWNlOiBOZ2JNb2RhbCkge1xyXG5cclxuICB9XHJcbiAgYXN5bmMgbmdPbkluaXQoKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICB0aGlzLlNob3dQYWdlQ29udGVudD10cnVlO1xyXG4gICAgdmFyIFBlcm1pc3Npb25TZXROYW1lT2JqZWN0ID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ1Blcm1pc3Npb25TZXROYW1lJyk7XHJcbiAgICBsZXQgUGFnZU5hbWUgPSBKU09OLnBhcnNlKFBlcm1pc3Npb25TZXROYW1lT2JqZWN0KTtcclxuICAgICAvL2NvbnNvbGUubG9nKFBhZ2VOYW1lKTtcclxuICAgIHRoaXMuU3ViaGVhZGVyVGl0bGUgPSB0aGlzLmxhbmd1YWdlID09ICdlbicgPyBQYWdlTmFtZS5FbmdsaXNoIDogUGFnZU5hbWUuQXJhYmljOyAgICBcclxuICAgIFBhZ2VJbmZvU2VydmljZS5QYWdlVGl0bGU9dGhpcy5TdWJoZWFkZXJUaXRsZVxyXG4gICAgUGFnZUluZm9TZXJ2aWNlLlBhZ2VCcmVhZGNydW1icz1bXHJcbiAgICAgICB7dGl0bGU6IHRoaXMudXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkhvbWVcIikgLCBwYXRoOiAnL0FkbWluL0hvbWUnLCBpc1NlcGFyYXRvcjogZmFsc2UsIGlzQWN0aXZlOiBmYWxzZX0sXHJcbiAgICAgICB7dGl0bGU6ICcnLCBwYXRoOiAnJywgaXNTZXBhcmF0b3I6IHRydWUsIGlzQWN0aXZlOiBmYWxzZX0sXHJcbiAgICAgICB7dGl0bGU6IHRoaXMudXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIlBlcm1pc3Npb25TZXRzXCIpLCBwYXRoOiAnL0FkbWluL1JvbGVzL1Blcm1pc3Npb25TZXRzJywgaXNTZXBhcmF0b3I6IGZhbHNlLCBpc0FjdGl2ZTogZmFsc2V9LFxyXG4gICAgICAge3RpdGxlOiAnJywgcGF0aDogJycsIGlzU2VwYXJhdG9yOiB0cnVlLCBpc0FjdGl2ZTogZmFsc2V9XHJcblxyXG4gICAgXTtcclxuXHJcbiAgICB0aGlzLnBhZ2VJbmZvU2VydmljZS5jYWxjdWxhdGVUaXRsZSgpO1xyXG4gICAgdGhpcy5wYWdlSW5mb1NlcnZpY2UuY2FsY3VsYXRlQnJlYWRjcnVtYnMoKTtcclxuICAgIHRoaXMuYmJzZlRyYW5zbGF0ZVNlcnZpY2Uub25MYW5nQ2hhbmdlLnN1YnNjcmliZSgoZXZlbnQpPT57XHJcbiAgICAgIHRoaXMuU2hvd1BhZ2VDb250ZW50PWZhbHNlO1xyXG4gICAgICB0aGlzLmxhbmd1YWdlID0gZXZlbnQubGFuZztcclxuICAgICAgdGhpcy5uZ09uSW5pdCgpO1xyXG4gICAgfSlcclxuICAgIHRoaXMubGFuZ3VhZ2UgPSAgYXdhaXQgdGhpcy51dGlsaXR5U2VydmljZS5nZXRDdXJyZW50TGFuZ3VhZ2UoKTtcclxuICAgIHRoaXMuYWN0aXZhdGVkUm91dGUucGFyYW1zLnN1YnNjcmliZShwYXJhbXMgPT4ge1xyXG4gICAgICB0aGlzLlBlcm1pc3Npb25TZXRJZCA9IHBhcmFtc1snaWQnXTtcclxuICAgICAgdGhpcy5Mb2FkVXNlckxpc3QoKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiBcclxuICBSZWluaXRpYWxpemVVc2VyUGVybWlzc2lvblNldFBhZ2luZygpIHtcclxuICAgIGxldCBlbGVtZW50ID0gdGhpcy5pbnB1dCBhcyBhbnk7XHJcbiAgICBlbGVtZW50LlJlaW5pdGlhbGl6ZVBhZ2luZygpO1xyXG4gIH1cclxuXHJcbiAgVXBkYXRlVXNlclBlcm1pc3Npb25TZXRQYWdpbmcoKSB7XHJcbiAgICBsZXQgZWxlbWVudCA9IHRoaXMuaW5wdXQgYXMgYW55O1xyXG4gICAgZWxlbWVudC5VcGRhdGVQYWdpbmcoKTtcclxuICB9XHJcblxyXG4gIHNldFVzZXJQZXJtaXNzaW9uU2V0TGlzdFJlc3VsdChyZXN1bHQpIHtcclxuICAgIHRoaXMuVXNlclBlcm1pc3Npb25TZXRQYWdpbmdSZXN1bHQgPSByZXN1bHQ7XHJcbiAgICB0aGlzLlNob3dQYWdlQ29udGVudCA9IHRydWU7XHJcbiAgfVxyXG5cclxuICByZXNldEZpbHRlcnMoKSB7XHJcbiAgICB0aGlzLlVzZXJQZXJtaXNzaW9uU2V0Rm9ybS5jb250cm9sc1tcInNlYXJjaFRleHRCb3hcIl0uc2V0VmFsdWUobnVsbCk7XHJcbiAgICBsZXQgZWxlbWVudCA9IHRoaXMuaW5wdXQgYXMgYW55O1xyXG4gICAgZWxlbWVudC5SZWluaXRpYWxpemVQYWdpbmcoKTtcclxuICB9XHJcblxyXG4gIExvYWRVc2VyTGlzdCgpIHtcclxuICAgIC8vIFRleHRCb3ggaW50aVxyXG4gICAgdGhpcy51dGlsaXR5U2VydmljZS5zdGFydEJsb2NrVUkoKVxyXG4gICAgdGhpcy5zZWFyY2hUZXh0Qm94ID0gbmV3IFRleHRCb3hPcHRpb25zKCk7XHJcbiAgICB0aGlzLnNlYXJjaFRleHRCb3guTmFtZSA9IFwic2VhcmNoVGV4dEJveFwiXHJcbiAgICB0aGlzLnNlYXJjaFRleHRCb3guSGlkZUxhYmVsID0gdHJ1ZVxyXG4gICAgdGhpcy5zZWFyY2hUZXh0Qm94LlR5cGUgPSBJbnB1dFR5cGUuVGV4dFxyXG4gICAgdGhpcy5zZWFyY2hUZXh0Qm94LlBsYWNlaG9sZGVyID0gdGhpcy51dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiU2VhcmNoQnlOYW1lT3JFbWFpbFwiKTtcclxuXHJcbiAgICB0aGlzLlBlcm1pc3Npb25TZXRJZFRleHRCb3ggPSBuZXcgVGV4dEJveE9wdGlvbnMoKTtcclxuICAgIHRoaXMuUGVybWlzc2lvblNldElkVGV4dEJveC5OYW1lID0gXCJQZXJtaXNzaW9uU2V0SWRUZXh0Qm94XCJcclxuICAgIHRoaXMuUGVybWlzc2lvblNldElkVGV4dEJveC5IaWRlTGFiZWwgPSB0cnVlXHJcbiAgICB0aGlzLlBlcm1pc3Npb25TZXRJZFRleHRCb3guVHlwZSA9IElucHV0VHlwZS5UZXh0XHJcbiAgICB0aGlzLlBlcm1pc3Npb25TZXRJZFRleHRCb3guVmFsdWUgPSB0aGlzLlBlcm1pc3Npb25TZXRJZDtcclxuICAgIHRoaXMuUGVybWlzc2lvblNldElkVGV4dEJveC5QbGFjZWhvbGRlciA9IHRoaXMudXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIlNlYXJjaEJ5TmFtZVwiKTtcclxuXHJcbiAgICB0aGlzLlRleHRJbnB1dEZpbHRlciA9IG5ldyBGaWx0ZXJJdGVtKCk7XHJcbiAgICB0aGlzLlRleHRJbnB1dEZpbHRlci5Gb3JtQ29udHJvbE5hbWUgPSBcInNlYXJjaFRleHRCb3hcIlxyXG4gICAgdGhpcy5UZXh0SW5wdXRGaWx0ZXIuQWN0aW9uUGFyYW1ldGVyTmFtZSA9IFwic2VhcmNoVGV4dFwiXHJcbiAgICB0aGlzLlRleHRJbnB1dEZpbHRlci5Jc0Zvcm1Db250cm9sID0gdHJ1ZVxyXG4gICAgdGhpcy5UZXh0SW5wdXRGaWx0ZXIuRmlsdGVyVHlwZSA9IEZpbHRlclR5cGUuVGV4dEJveFxyXG5cclxuICAgIHRoaXMuUGVybWlzc2lvblNldElkVGV4dElucHV0RmlsdGVyID0gbmV3IEZpbHRlckl0ZW0oKTtcclxuICAgIHRoaXMuUGVybWlzc2lvblNldElkVGV4dElucHV0RmlsdGVyLkZvcm1Db250cm9sTmFtZSA9IFwiUGVybWlzc2lvblNldElkVGV4dEJveFwiXHJcbiAgICB0aGlzLlBlcm1pc3Npb25TZXRJZFRleHRJbnB1dEZpbHRlci5BY3Rpb25QYXJhbWV0ZXJOYW1lID0gXCJwZXJtaXNzaW9uU2V0SWRcIlxyXG4gICAgdGhpcy5QZXJtaXNzaW9uU2V0SWRUZXh0SW5wdXRGaWx0ZXIuSXNGb3JtQ29udHJvbCA9IHRydWVcclxuICAgIHRoaXMuUGVybWlzc2lvblNldElkVGV4dElucHV0RmlsdGVyLkZpbHRlclR5cGUgPSBGaWx0ZXJUeXBlLlRleHRCb3hcclxuXHJcbiAgICB0aGlzLlVzZXJQZXJtaXNzaW9uU2V0UGFnaW5nID0gbmV3IFBhZ2luZ09wdGlvbnMoKTtcclxuICAgIHRoaXMuVXNlclBlcm1pc3Npb25TZXRQYWdpbmcuQWN0aW9uUG9zdFVSTCA9IHRoaXMuZW52aXJvbm1lbnRTZXJ2aWNlLmdldEFwaVVybCgpICsgdGhpcy5BcGlVcmwgKyAnR2V0VXNlcnNCeUZpbHRlcic7XHJcbiAgICB0aGlzLlVzZXJQZXJtaXNzaW9uU2V0UGFnaW5nLk9uS2V5UHJlc3NGaWx0ZXJzQ29udHJvbE5hbWVzID0gW1wic2VhcmNoVGV4dEJveFwiLCBcIlBlcm1pc3Npb25TZXRJZFRleHRCb3hcIl1cclxuICAgIHRoaXMuVXNlclBlcm1pc3Npb25TZXRQYWdpbmcuRmlsdGVycyA9IFt0aGlzLlRleHRJbnB1dEZpbHRlciwgdGhpcy5QZXJtaXNzaW9uU2V0SWRUZXh0SW5wdXRGaWx0ZXJdXHJcbiAgICB0aGlzLlVzZXJQZXJtaXNzaW9uU2V0UGFnaW5nLlZhbGlkYXRpb25Ub2tlbiA9IHRoaXMuYXV0aFNlcnZpY2UuYXV0aG9yaXphdGlvbkhlYWRlclZhbHVlKCk7XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy5Jc0ZpbHRlckxvYWRlZCA9IHRydWU7XHJcbiAgICAgIHRoaXMudXRpbGl0eVNlcnZpY2Uuc3RvcEJsb2NrVUkoKTtcclxuICAgIH0sIDEwKTtcclxuICB9XHJcblxyXG5cclxuXHJcbiAgc2hvd0FkZFVzZXJUb1Blcm1pc3Npb25TZXRNb2RhbChBZGRVc2VyVG9QZXJtaXNzaW9uU2V0TW9kYWwpIHtcclxuICAgIHRoaXMudXRpbGl0eVNlcnZpY2Uuc3RhcnRCbG9ja1VJKCk7XHJcbiAgICB0aGlzLkFkZFVzZXJzVG9QZXJtaXNzaW9uU2V0Rm9ybSA9IG5ldyBGb3JtR3JvdXAoe30pO1xyXG4gICAgdGhpcy5Vc2VyQXV0b0NvbXBsZXRlID0gbmV3IFRhZ3NJbnB1dE9wdGlvbnMoKTtcclxuICAgIHRoaXMuVXNlckF1dG9Db21wbGV0ZS5OYW1lID0gXCJVc2VyQXV0b0NvbXBsZXRlXCI7XHJcbiAgICB0aGlzLlVzZXJBdXRvQ29tcGxldGUuTGFiZWxLZXkgPSBcIlVzZXJzXCI7XHJcbiAgICB0aGlzLlVzZXJBdXRvQ29tcGxldGUuSXNSZXF1aXJlZCA9IHRydWU7XHJcbiAgICB0aGlzLlVzZXJBdXRvQ29tcGxldGUuVmFsdWUgPSBudWxsO1xyXG4gICAgdGhpcy5Vc2VyQXV0b0NvbXBsZXRlLkFjdGlvblVSTCA9IHRoaXMuZW52aXJvbm1lbnRTZXJ2aWNlLmdldEFwaVVybCgpICsgdGhpcy5BcGlVcmwgKyBcIkF1dG9Db21wbGV0ZVVzZXJMaXN0XCJcclxuICAgIHRoaXMuVXNlckF1dG9Db21wbGV0ZS5WYWxpZGF0aW9uVG9rZW4gPSB0aGlzLmF1dGhTZXJ2aWNlLmF1dGhvcml6YXRpb25IZWFkZXJWYWx1ZSgpXHJcbiAgICB0aGlzLm1vZGFsU2VydmljZS5vcGVuKEFkZFVzZXJUb1Blcm1pc3Npb25TZXRNb2RhbCk7XHJcbiAgICB0aGlzLnV0aWxpdHlTZXJ2aWNlLnN0b3BCbG9ja1VJKCk7XHJcbiAgfVxyXG5cclxuICBhZGRVc2VyVG9QZXJtaXNzaW9uU2V0KCkge1xyXG4gICAgaWYgKHRoaXMuQWRkVXNlcnNUb1Blcm1pc3Npb25TZXRGb3JtLmludmFsaWQpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIGxldCBSZXN1bHRNb2RlbCA9IHRoaXMuQWRkVXNlcnNUb1Blcm1pc3Npb25TZXRGb3JtLnZhbHVlO1xyXG4gICAgICBsZXQgQWRkTW9kZWw6UGVybWlzc2lvblNldFVzZXJzSURSZXF1ZXN0TW9kZWw9IG5ldyBQZXJtaXNzaW9uU2V0VXNlcnNJRFJlcXVlc3RNb2RlbCgpIDtcclxuICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IFJlc3VsdE1vZGVsLlVzZXJBdXRvQ29tcGxldGUubGVuZ3RoOyBpbmRleCsrKSB7XHJcbiAgICAgICAgY29uc3Qga2V5ID0gUmVzdWx0TW9kZWwuVXNlckF1dG9Db21wbGV0ZVtpbmRleF0ua2V5O1xyXG4gICAgICAgIEFkZE1vZGVsLlVzZXJzSURzLnB1c2goTnVtYmVyKGtleSkpXHJcbiAgICAgICAgXHJcbiAgICAgIH1cclxuICAgICAgQWRkTW9kZWwuUGVybWlzc2lvblNldElkPU51bWJlcih0aGlzLlBlcm1pc3Npb25TZXRJZCk7XHJcbiAgICAgIHRoaXMuUGVybWlzc2lvblNldFNlcnZpY2UuQWRkVXNlcnNUb1Blcm1pc3Npb25TZXQoIEFkZE1vZGVsKS5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xyXG4gICAgICAgIHRoaXMubW9kYWxTZXJ2aWNlLmRpc21pc3NBbGwoKTtcclxuICAgICAgICBsZXQgZWxlbWVudCA9IHRoaXMuaW5wdXQgYXMgYW55O1xyXG4gICAgICAgIGVsZW1lbnQuUmVpbml0aWFsaXplUGFnaW5nKCk7XHJcbiAgICAgIH0sIChlcnJvcikgPT4ge1xyXG4gICAgICAgIFxyXG4gICAgICB9KVxyXG4gICAgfVxyXG4gIH1cclxuXHJcblxyXG4gIHNob3dEZWxldGVVc2VyRnJvbVBlcm1pc3Npb25TZXRNb2RhbCh1c2VyOiBhbnksIGRlbGV0ZVVzZXJQZXJtaXNzaW9uU2V0TW9kYWwpIHtcclxuICAgIHRoaXMudXRpbGl0eVNlcnZpY2Uuc3RhcnRCbG9ja1VJKCk7XHJcbiAgICB0aGlzLmRlbGV0ZVVzZXJJZCA9IHVzZXIuaWRcclxuICAgIHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4oZGVsZXRlVXNlclBlcm1pc3Npb25TZXRNb2RhbCk7XHJcbiAgICB0aGlzLnV0aWxpdHlTZXJ2aWNlLnN0b3BCbG9ja1VJKCk7XHJcblxyXG4gIH1cclxuXHJcbiAgZGVsZXRlVXNlckZyb21QZXJtaXNzaW9uU2V0KCkge1xyXG4gICAgdGhpcy5QZXJtaXNzaW9uU2V0U2VydmljZS5EZWxldGVVc2VyRnJvbVBlcm1pc3Npb25TZXQoIHRoaXMuZGVsZXRlVXNlcklkLnRvU3RyaW5nKCksIHRoaXMuUGVybWlzc2lvblNldElkKS5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xyXG4gICAgICB2YXIgZGF0YSA9IHJlc3VsdCBhcyBhbnk7XHJcbiAgICAgIGlmICghZGF0YS52YWwpIHtcclxuICAgICAgICBjb25zb2xlLmxvZyhcIm5vdGlmaWVkIGVycm9yXCIpO1xyXG4gICAgICAgIHRoaXMudXRpbGl0eVNlcnZpY2Uubm90aWZ5RXJyb3JNZXNzYWdlKHRoaXMudXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkNhbm5vdERlbGV0ZUxhc3RVc2VyUGVybWlzc2lvblNldFwiKSk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgdGhpcy51dGlsaXR5U2VydmljZS5ub3RpZnlTdWNjZXNzTWVzc2FnZSgpXHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5kZWxldGVVc2VySWQgPSAwO1xyXG4gICAgICB0aGlzLm1vZGFsU2VydmljZS5kaXNtaXNzQWxsKCk7XHJcbiAgICAgIGxldCBlbGVtZW50ID0gdGhpcy5pbnB1dCBhcyBhbnk7XHJcbiAgICAgIGVsZW1lbnQuUmVpbml0aWFsaXplUGFnaW5nKCk7XHJcbiAgICB9LCAoZXJyb3IpID0+IHtcclxuICAgICAgXHJcbiAgICB9KVxyXG4gIH1cclxuXHJcblxyXG5cclxufVxyXG4iLCI8YmxvY2stdWk+PC9ibG9jay11aT5cclxuICA8IS0tIFBhZ2UgQ29udGVudCAtLT5cclxuICA8ZGl2ICpuZ0lmPVwiU2hvd1BhZ2VDb250ZW50XCIgY2xhc3M9XCJjb250YWluZXItZmx1aWRcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJjYXJkIGNhcmQtY3VzdG9tLWhcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cImNhcmQtaGVhZGVyIGJvcmRlci0wIHB0LTVcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC10aXRsZSBhbGlnbi1pdGVtcy1zdGFydCBmbGV4LWNvbHVtblwiICpuZ0lmPVwiSXNGaWx0ZXJMb2FkZWRcIj5cclxuICAgICAgICAgIDxmb3JtIFtmb3JtR3JvdXBdPVwiVXNlclBlcm1pc3Npb25TZXRGb3JtXCI+XHJcbiAgICAgICAgICAgIDxCQlNGLVRleHRCb3ggW29wdGlvbnNdPVwic2VhcmNoVGV4dEJveFwiIFtncm91cF09XCJVc2VyUGVybWlzc2lvblNldEZvcm1cIj48L0JCU0YtVGV4dEJveD5cclxuICAgICAgICAgICAgPEJCU0YtVGV4dEJveCBbaGlkZGVuXT1cInRydWVcIiBbb3B0aW9uc109XCJQZXJtaXNzaW9uU2V0SWRUZXh0Qm94XCIgW2dyb3VwXT1cIlVzZXJQZXJtaXNzaW9uU2V0Rm9ybVwiPjwvQkJTRi1UZXh0Qm94PlxyXG4gICAgICAgICAgPC9mb3JtPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLXRvb2xiYXJcIj5cclxuICAgICAgICAgIDwhLS0gYmVnaW46Ok1lbnUgLS0+XHJcblxyXG4gICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1wcmltYXJ5XCIgdGl0bGU9XCJBZGRcIiAoY2xpY2spPVwic2hvd0FkZFVzZXJUb1Blcm1pc3Npb25TZXRNb2RhbChBZGRVc2VyVG9QZXJtaXNzaW9uU2V0TW9kYWwpXCI+XHJcbiAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLXBsdXMgbWUtMVwiPjwvaT5cclxuICAgICAgICAgICAge3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiQWRkXCIpfX1cclxuICAgICAgICAgIDwvYnV0dG9uPlxyXG5cclxuICAgICAgICAgIDwhLS0gZW5kOjpNZW51IC0tPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cImNhcmQtYm9keSBweS0zXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLXJlc3BvbnNpdmVcIj5cclxuXHJcbiAgICAgICAgICA8IS0tYmVnaW46OlBlcm1pc3Npb24gbGlzdC0tPlxyXG4gICAgICAgICAgPHRhYmxlIGNsYXNzPVwidGFibGUgYWxpZ24tbWlkZGxlIHRhYmxlLXJvdy1kYXNoZWQgZnMtNiBneS01IGRhdGFUYWJsZSBuby1mb290ZXJcIj5cclxuICAgICAgICAgICAgPHRoZWFkPlxyXG4gICAgICAgICAgICAgIDx0ciBjbGFzcz1cInRleHQtc3RhcnQgdGV4dC1ncmF5LTQwMCBmdy1ib2xkZXIgZnMtNyB0ZXh0LXVwcGVyY2FzZSBncy0wXCI+XHJcbiAgICAgICAgICAgICAgICA8dGggY2xhc3M9XCJtaW4tdy0xNTBweFwiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIk5hbWVcIil9fTwvdGg+XHJcbiAgICAgICAgICAgICAgICA8dGggY2xhc3M9XCJtaW4tdy0xNTBweFwiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkVtYWlsXCIpfX08L3RoPlxyXG4gICAgICAgICAgICAgICAgPHRoIGNsYXNzPVwibWluLXctMTUwcHhcIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJSb2xlc1wiKX19PC90aD5cclxuICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cIm1pbi13LTUwcHhcIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJBY3Rpb25cIil9fTwvdGg+XHJcbiAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgPC90aGVhZD5cclxuICAgICAgICAgICAgPHRib2R5IGlkPVwibGlzdGluZ0NvbnRhaW5lclwiIGNsYXNzPVwiZnctYm9sZCB0ZXh0LWdyYXktNjAwIGJvcmRlci0wXCI+XHJcblxyXG4gICAgICAgICAgICAgIDx0ciAqbmdGb3I9XCJsZXQgdXNlciBvZiBVc2VyUGVybWlzc2lvblNldFBhZ2luZ1Jlc3VsdFwiPlxyXG5cclxuICAgICAgICAgICAgICAgIDx0ZD5cclxuICAgICAgICAgICAgICAgICAgPGEgKm5nSWY9XCJsYW5ndWFnZT09J2VuJ1wiIGhyZWY9XCJqYXZhc2NyaXB0OnZvaWQoMClcIlxyXG4gICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInRleHQtZGFya1wiPnt7dXNlci5uYW1lLmVuZ2xpc2h9fTwvYT5cclxuICAgICAgICAgICAgICAgICAgPGEgKm5nSWY9XCJsYW5ndWFnZT09J2FyJ1wiIGhyZWY9XCJqYXZhc2NyaXB0OnZvaWQoMClcIlxyXG4gICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInRleHQtZGFya1wiPnt7dXNlci5uYW1lLmFyYWJpY319PC9hPlxyXG4gICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgIDx0ZD57e3VzZXIuZW1haWx9fTwvdGQ+XHJcbiAgICAgICAgICAgICAgICA8dGQ+e3t1c2VyLnVzZXJQZXJtc2V0c319PC90ZD5cclxuICAgICAgICAgICAgICAgIDx0ZD5cclxuICAgICAgICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1idXR0b24gW21hdE1lbnVUcmlnZ2VyRm9yXT1cIm1lbnVcIiBjbGFzcz1cImJ0biBidG4tc20gYnRuLWljb24gYnRuLWxpZ2h0IGJ0bi1hY3RpdmUtbGlnaHQtcHJpbWFyeVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1lbGxpcHNpcy1oXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDxtYXQtbWVudSAjbWVudT1cIm1hdE1lbnVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxhIG5nYkRyb3Bkb3duSXRlbSBjbGFzcz1cImRyb3AtaXRlbSBweC0zXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzaG93RGVsZXRlVXNlckZyb21QZXJtaXNzaW9uU2V0TW9kYWwodXNlcixkZWxldGVVc2VyUGVybWlzc2lvblNldE1vZGFsKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImRyb3AtbGluayBweC0zXCI+e3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiRGVsZXRlXCIpfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2E+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtbWVudT5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgICAgPHRyICpuZ0lmPVwiVXNlclBlcm1pc3Npb25TZXRQYWdpbmdSZXN1bHQubGVuZ3RoID09IDBcIj5cclxuICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPVwiNFwiPlxyXG4gICAgICAgICAgICAgICAgICA8bGliLWVtcHR5LWRhdGE+PC9saWItZW1wdHktZGF0YT5cclxuICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgPC90Ym9keT5cclxuICAgICAgICAgIDwvdGFibGU+XHJcblxyXG4gICAgICAgICAgPCEtLWVuZDo6UGVybWlzc2lvbiBsaXN0LS0+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cImNhcmQtZm9vdGVyIGJvcmRlci0wXCI+XHJcbiAgICAgICAgPEJCU0YtUGFnaW5nIChJdGVtcyk9XCJzZXRVc2VyUGVybWlzc2lvblNldExpc3RSZXN1bHQoJGV2ZW50KVwiICpuZ0lmPVwiSXNGaWx0ZXJMb2FkZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICBbb3B0aW9uc109XCJVc2VyUGVybWlzc2lvblNldFBhZ2luZ1wiIFtncm91cF09XCJVc2VyUGVybWlzc2lvblNldEZvcm1cIiAjVXNlclBlcm1pc3Npb25TZXRQYWdpbmdWaWV3RWxlbWVudD5cclxuICAgICAgICA8L0JCU0YtUGFnaW5nPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG5cclxuICA8L2Rpdj5cclxuXHJcblxyXG4gIDwhLS0gQWRkIE1vZGFsIC0tPlxyXG4gIDxuZy10ZW1wbGF0ZSAjQWRkVXNlclRvUGVybWlzc2lvblNldE1vZGFsIGxldC1tb2RhbD5cclxuICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1oZWFkZXIgcGItMCBib3JkZXItMCBqdXN0aWZ5LWNvbnRlbnQtZW5kXCI+XHJcbiAgICAgIDxoNSBjbGFzcz1cIm1vZGFsLXRpdGxlXCIgaWQ9XCJleGFtcGxlTW9kYWxMYWJlbFwiPjwvaDU+XHJcbiAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGRhdGEtZGlzbWlzcz1cIm1vZGFsXCIgYXJpYS1sYWJlbD1cIkNsb3NlXCIgKGNsaWNrKT1cIm1vZGFsLmRpc21pc3MoKVwiIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4taWNvbiBidG4tYWN0aXZlLWNvbG9yLXByaW1hcnlcIj5cclxuICAgICAgICA8c3BhbiBjbGFzcz1cInN2Zy1pY29uIHN2Zy1pY29uLTFcIj5cclxuICAgICAgICAgIDxzcGFuIFtpbmxpbmVTVkddPVwiJy4vc3JjL2Fzc2V0cy9pbWFnZXMvYXJyMDYxLnN2ZydcIj48L3NwYW4+XHJcbiAgICAgICAgPC9zcGFuPlxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cIm1vZGFsLWJvZHkgc2Nyb2xsLXkgcHgtMTAgcHgtbGctMTUgcHQtMCBwYi0xNVwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwibWItMTMgdGV4dC1jZW50ZXJcIj5cclxuICAgICAgICA8aDEgY2xhc3M9XCJtYi0zXCI+e3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiQWRkVXNlclwiKX19PC9oMT5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxmb3JtIFtmb3JtR3JvdXBdPVwiQWRkVXNlcnNUb1Blcm1pc3Npb25TZXRGb3JtXCIgKG5nU3VibWl0KT1cImFkZFVzZXJUb1Blcm1pc3Npb25TZXQoKVwiPlxyXG4gICAgICAgIDxCQlNGLVRhZ3NJbnB1dCBbb3B0aW9uc109XCJVc2VyQXV0b0NvbXBsZXRlXCIgW2dyb3VwXT1cIkFkZFVzZXJzVG9QZXJtaXNzaW9uU2V0Rm9ybVwiPlxyXG4gICAgICAgIDwvQkJTRi1UYWdzSW5wdXQ+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtY2VudGVyIHB0LTdcIj5cclxuICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiICNDbG9zZUFkZFVzZXJzVG9QZXJtaXNzaW9uU2V0IGlkPVwiQ2xvc2VBZGRVc2Vyc1RvUGVybWlzc2lvblNldFwiIGRhdGEtZGlzbWlzcz1cIm1vZGFsXCIgYXJpYS1sYWJlbD1cIkNsb3NlXCIgY2xhc3M9XCJidG4gYnRuLWxpZ2h0IG1lLTMgYnRuLXNtXCIgKGNsaWNrKT1cIm1vZGFsLmRpc21pc3MoKVwiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkNhbmNlbExhYmVsXCIpfX0gPC9idXR0b24+XHJcbiAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJzdWJtaXRcIiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBidG4tc21cIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJTYXZlTGFiZWxcIil9fTwvYnV0dG9uPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Zvcm0+XHJcblxyXG4gICAgPC9kaXY+XHJcbiAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcblxyXG4gIDwhLS0gRGVsZXRlICBNb2RhbCAtLT5cclxuICA8bmctdGVtcGxhdGUgI2RlbGV0ZVVzZXJQZXJtaXNzaW9uU2V0TW9kYWwgbGV0LW1vZGFsPlxyXG4gICAgPGRpdiBjbGFzcz1cIm1vZGFsLWhlYWRlciBwYi0wIGJvcmRlci0wIGp1c3RpZnktY29udGVudC1lbmRcIj5cclxuICAgICAgPGg1IGNsYXNzPVwibW9kYWwtdGl0bGVcIiBpZD1cImV4YW1wbGVNb2RhbExhYmVsXCI+PC9oNT5cclxuICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgZGF0YS1kaXNtaXNzPVwibW9kYWxcIiBhcmlhLWxhYmVsPVwiQ2xvc2VcIiBjbGFzcz1cImJ0biBidG4tc20gYnRuLWljb24gYnRuLWFjdGl2ZS1jb2xvci1wcmltYXJ5XCIgKGNsaWNrKT1cIm1vZGFsLmRpc21pc3MoKVwiPlxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwic3ZnLWljb24gc3ZnLWljb24tMVwiPlxyXG4gICAgICAgICAgPHNwYW4gW2lubGluZVNWR109XCInLi9zcmMvYXNzZXRzL2ltYWdlcy9hcnIwNjEuc3ZnJ1wiPjwvc3Bhbj5cclxuICAgICAgICA8L3NwYW4+XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keSBzY3JvbGwteSBweC0xMCBweC1sZy0xNSBwdC0wIHBiLTE1XCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJtYi0xMyB0ZXh0LWNlbnRlclwiPlxyXG4gICAgICAgIDxoMSBjbGFzcz1cIm1iLTNcIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJEZWxldGVcIil9fSB7e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJVc2VyXCIpfX08L2gxPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cIm5vdGljZSBkLWZsZXggYmctbGlnaHQtZGFuZ2VyIHJvdW5kZWQgYm9yZGVyLWRhbmdlciBib3JkZXIgYm9yZGVyLWRhc2hlZCBtYi0xMCBwLTZcIj5cclxuICAgICAgICA8c3BhbiBjbGFzcz1cInN2Zy1pY29uIHN2Zy1pY29uLTJ0eCBzdmctaWNvbi1kYW5nZXIgbWUtNFwiPlxyXG4gICAgICAgICAgPHNwYW4gW2lubGluZVNWR109XCInLi9zcmMvYXNzZXRzL2ltYWdlcy9nZW4wNDQuc3ZnJ1wiPjwvc3Bhbj5cclxuICAgICAgICA8L3NwYW4+XHJcblxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZmxleC1zdGFjayBmbGV4LWdyb3ctMVwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImZ3LWJvbGRcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZzLTYgdGV4dC1ncmF5LTcwMFwiPlxyXG4gICAgICAgICAgICAgIHt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkRlbGV0ZV9RdWVzdGlvblwiKX19XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwidGV4dC1jZW50ZXIgcHQtN1wiPlxyXG4gICAgICAgIDxidXR0b24gI0Nsb3NlRGVsZXRlVXNlckZyb21QZXJtaXNzaW9uU2V0TW9kYWwgaWQ9XCJDbG9zZURlbGV0ZVVzZXJGcm9tUGVybWlzc2lvblNldE1vZGFsXCIgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tbGlnaHQgYnRuLXNtIG1lLTMgXCIgZGF0YS1kaXNtaXNzPVwibW9kYWxcIiAoY2xpY2spPVwibW9kYWwuZGlzbWlzcygpXCI+XHJcbiAgICAgICAgICB7e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJDYW5jZWxMYWJlbFwiKX19XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cImRlbGV0ZVVzZXJGcm9tUGVybWlzc2lvblNldCgpXCJcclxuICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1saWdodC1kYW5nZXIgYnRuLXNtIFwiPlxyXG4gICAgICAgICAge3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiRGVsZXRlXCIpfX1cclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICA8L25nLXRlbXBsYXRlPlxyXG5cclxuXHJcblxyXG4iXX0=
|
|
189
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVybWlzc2lvbi1zZXQtaW5mby5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9iYnNmLWFkbWluLXBvcnRhbC9zcmMvbGliL1BhZ2VzL3JvbGVzL3Blcm1pc3Npb24tc2V0LWluZm8vcGVybWlzc2lvbi1zZXQtaW5mby5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9iYnNmLWFkbWluLXBvcnRhbC9zcmMvbGliL1BhZ2VzL3JvbGVzL3Blcm1pc3Npb24tc2V0LWluZm8vcGVybWlzc2lvbi1zZXQtaW5mby5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFzQixTQUFTLEVBQWEsTUFBTSxlQUFlLENBQUM7QUFDcEYsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTNDLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsYUFBYSxFQUFFLGdCQUFnQixFQUFFLGNBQWMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3BLLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxvREFBb0QsQ0FBQztBQUNyRixPQUFPLEVBQUUsZ0NBQWdDLEVBQUUsTUFBTSx3RUFBd0UsQ0FBQztBQUkxSCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0REFBNEQsQ0FBQzs7Ozs7Ozs7Ozs7OztBQVNoRyxNQUFNLE9BQU8sMEJBQTBCO0lBcUNyQyxZQUNVLGVBQWdDLEVBQ2hDLGNBQThCLEVBQzlCLGNBQThCLEVBQzlCLFdBQXdCLEVBQ3hCLG9CQUEwQyxFQUMxQyxZQUFzQixFQUN0QixxQkFBMkM7UUFOM0Msb0JBQWUsR0FBZixlQUFlLENBQWlCO1FBQ2hDLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUM5QixtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFDOUIsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFDeEIseUJBQW9CLEdBQXBCLG9CQUFvQixDQUFzQjtRQUMxQyxpQkFBWSxHQUFaLFlBQVksQ0FBVTtRQUN0QiwwQkFBcUIsR0FBckIscUJBQXFCLENBQXNCO1FBMUNyRCxtQkFBbUI7UUFDbkIsV0FBTSxHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxNQUFNLENBQUE7UUFFekMsd0JBQXdCO1FBQ3hCLG9CQUFlLEdBQVcsRUFBRSxDQUFBO1FBQzVCLGtCQUFhLEdBQXVCLElBQUksa0JBQWtCLEVBQUUsQ0FBQztRQUs3RCxlQUFVLEdBQUcsSUFBSSxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDL0IsMEJBQXFCLEdBQUcsSUFBSSxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDMUMsZUFBVSxHQUFZLEtBQUssQ0FBQztRQUM1QixrQ0FBNkIsR0FBVSxFQUFFLENBQUM7UUFDMUMsMENBQXFDLEdBQVUsRUFBRSxDQUFDO1FBS2xELG1CQUFjLEdBQVksS0FBSyxDQUFDO1FBS2hDLG9CQUFvQjtRQUNwQixnQ0FBMkIsR0FBRyxJQUFJLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQU9oRCx3QkFBbUIsR0FBWSxLQUFLLENBQUM7UUF5SHJDLG1DQUE4QixHQUFHLEdBQUcsRUFBRTtZQUNwQyxJQUFJLFVBQVUsR0FBVSxFQUFFLENBQUM7WUFDM0IsSUFBSSxXQUFXLEdBQUcsSUFBSSxDQUFDLDJCQUEyQixDQUFDLEtBQUssQ0FBQztZQUN6RCxJQUFJLFFBQVEsR0FBcUMsSUFBSSxnQ0FBZ0MsRUFBRSxDQUFDO1lBQ3hGLEtBQUssSUFBSSxLQUFLLEdBQUcsQ0FBQyxFQUFFLEtBQUssR0FBRyxXQUFXLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxFQUFFO2dCQUN4RSxNQUFNLEdBQUcsR0FBRyxXQUFXLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDO2dCQUNwRCxRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQTthQUVwQztZQUNELFFBQVEsQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQztZQUNoRCxVQUFVLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQzFCLE9BQU8sVUFBVSxDQUFDO1FBQ3BCLENBQUMsQ0FBQTtRQUVELHNDQUFpQyxHQUFHLENBQUMsUUFBUSxFQUFtQixFQUFFO1lBQ2hFLE9BQU8sSUFBSSxDQUFDLG9CQUFvQixDQUFDLHVCQUF1QixDQUFDLFFBQVEsQ0FBQyxDQUFBO1FBQ3BFLENBQUMsQ0FBQTtRQTBCSCxnQ0FBMkIsR0FBRyxDQUFDLFlBQW9CLEVBQUMsUUFBZSxFQUFtQixFQUFFO1lBQ3RGLE9BQU8sSUFBSSxDQUFDLG9CQUFvQixDQUFDLDJCQUEyQixDQUFDLFlBQVksRUFBQyxRQUFRLENBQUMsQ0FBQztRQUN0RixDQUFDLENBQUE7UUF2SkcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQzVDLElBQUksQ0FBQyxlQUFlLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3ZDLENBQUMsQ0FBQyxDQUFDO0lBQ0osQ0FBQztJQUNBLFFBQVE7UUFDTixvQ0FBb0M7UUFDcEMsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUE7SUFFNUIsQ0FBQztJQUdELGtCQUFrQjtJQUNsQiw4QkFBOEIsQ0FBQyxNQUFNO1FBQ25DLElBQUksQ0FBQyw2QkFBNkIsR0FBRyxNQUFNLENBQUM7UUFDNUMsSUFBSSxDQUFDLHFDQUFxQyxHQUFDLElBQUksQ0FBQyw2QkFBNkIsQ0FBQTtJQUMvRSxDQUFDO0lBQ0QsbUJBQW1CO0lBQ25CLFlBQVk7UUFDVixJQUFJLENBQUMscUJBQXFCLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNwRSxJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUMsYUFBb0IsQ0FBQztRQUN4QyxPQUFPLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztJQUMvQixDQUFDO0lBR0QsbUVBQW1FO0lBQ2pFLGtCQUFrQjtRQUNoQixJQUFJLENBQUMsb0JBQW9CLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFO1lBQ3hGLElBQUksV0FBVyxHQUFHLE1BQWEsQ0FBQTtZQUMvQixlQUFlLENBQUMsU0FBUyxHQUFHLFdBQVcsQ0FBQyxHQUFHLENBQUE7WUFDM0MsZUFBZSxDQUFDLGVBQWUsR0FBRztnQkFDaEMsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsRUFBRSxJQUFJLEVBQUUsYUFBYSxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRTtnQkFDakgsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFO2dCQUMzRCxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLGdCQUFnQixDQUFDLGdCQUFnQixDQUFDLEVBQUUsSUFBSSxFQUFFLDZCQUE2QixFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRTtnQkFDM0ksRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFO2FBQzVELENBQUM7WUFDRixJQUFJLENBQUMsZUFBZSxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ3RDLElBQUksQ0FBQyxlQUFlLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztZQUM1QyxpQkFBaUI7WUFDaEIsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3pCLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVGLGlCQUFpQjtJQUNoQixjQUFjO1FBQ1osSUFBSSxDQUFDLGNBQWMsR0FBRyxLQUFLLENBQUE7UUFDM0IsZUFBZTtRQUNmLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxjQUFjLEVBQUUsQ0FBQztRQUMxQyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksR0FBRyxlQUFlLENBQUE7UUFDekMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFBO1FBQ25DLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUE7UUFDeEMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxnQkFBZ0IsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1FBRTdGLElBQUksQ0FBQyxzQkFBc0IsR0FBRyxJQUFJLGNBQWMsRUFBRSxDQUFDO1FBQ25ELElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLEdBQUcsd0JBQXdCLENBQUE7UUFDM0QsSUFBSSxDQUFDLHNCQUFzQixDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUE7UUFDNUMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLElBQUksR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFBO1FBQ2pELElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQztRQUN6RCxJQUFJLENBQUMsc0JBQXNCLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsZ0JBQWdCLENBQUMsY0FBYyxDQUFDLENBQUM7UUFHL0YsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLFVBQVUsRUFBRSxDQUFDO1FBQ3hDLElBQUksQ0FBQyxlQUFlLENBQUMsZUFBZSxHQUFHLGVBQWUsQ0FBQTtRQUN0RCxJQUFJLENBQUMsZUFBZSxDQUFDLG1CQUFtQixHQUFHLFlBQVksQ0FBQTtRQUN2RCxJQUFJLENBQUMsZUFBZSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUE7UUFDekMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDLE9BQU8sQ0FBQTtRQUVuRCxJQUFJLENBQUMsOEJBQThCLEdBQUcsSUFBSSxVQUFVLEVBQUUsQ0FBQztRQUN2RCxJQUFJLENBQUMsOEJBQThCLENBQUMsZUFBZSxHQUFHLHdCQUF3QixDQUFBO1FBQzlFLElBQUksQ0FBQyw4QkFBOEIsQ0FBQyxtQkFBbUIsR0FBRyxpQkFBaUIsQ0FBQTtRQUMzRSxJQUFJLENBQUMsOEJBQThCLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQTtRQUN4RCxJQUFJLENBQUMsOEJBQThCLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQyxPQUFPLENBQUE7UUFFbkUsSUFBSSxDQUFDLHVCQUF1QixHQUFHLElBQUksYUFBYSxFQUFFLENBQUM7UUFDbkQsSUFBSSxDQUFDLHVCQUF1QixDQUFDLGFBQWEsR0FBRSxJQUFJLENBQUMsTUFBTSxHQUFHLGtCQUFrQixDQUFDO1FBQzdFLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyw2QkFBNkIsR0FBRyxDQUFDLGVBQWUsRUFBRSx3QkFBd0IsQ0FBQyxDQUFBO1FBQ3hHLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxPQUFPLEdBQUcsQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLElBQUksQ0FBQyw4QkFBOEIsQ0FBQyxDQUFBO1FBRWxHLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDO0lBQzlCLENBQUM7SUFLRCx1REFBdUQ7SUFDdkQsK0JBQStCLENBQUMsd0JBQXdCO1FBQ3hELElBQUksQ0FBQyxjQUFjLENBQUMsWUFBWSxFQUFFLENBQUE7UUFFbEMsSUFBSSxDQUFDLDJCQUEyQixHQUFHLElBQUksU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFBO1FBQ3BELElBQUksQ0FBQyxrQ0FBa0MsR0FBRyxJQUFJLFdBQVcsRUFBRSxDQUFDO1FBQzVELElBQUksQ0FBQyxrQ0FBa0MsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLDJCQUEyQixDQUFBO1FBQ3BGLElBQUksQ0FBQyxrQ0FBa0MsQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsOEJBQThCLENBQUM7UUFDL0YsSUFBSSxDQUFDLGtDQUFrQyxDQUFDLHFCQUFxQixHQUFHLElBQUksQ0FBQyxpQ0FBaUMsQ0FBQztRQUN2RyxJQUFJLENBQUMsa0NBQWtDLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUE7UUFFNUUsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksZ0JBQWdCLEVBQUUsQ0FBQztRQUMvQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxHQUFHLGtCQUFrQixDQUFDO1FBQ2hELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFDO1FBQ3pDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO1FBQ3hDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO1FBQ25DLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxzQkFBc0IsQ0FBQTtRQUN0RSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsd0JBQXdCLEVBQUUsQ0FBQTtRQUNuRixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO1FBQ2pELElBQUksQ0FBQyxjQUFjLENBQUMsV0FBVyxFQUFFLENBQUE7SUFHbkMsQ0FBQztJQW9CRCxxREFBcUQ7SUFJcEQscUVBQXFFO0lBQ3hFLG9DQUFvQyxDQUFDLGVBQXVCO1FBQzFELElBQUksQ0FBQyxZQUFZLEdBQUcsZUFBZSxDQUFDO1FBQ3BDLGdDQUFnQztRQUNoQyxJQUFJLFVBQVUsR0FBVSxFQUFFLENBQUM7UUFDM0IsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDbkMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7UUFHdEMsSUFBSSxDQUFDLHlCQUF5QixHQUFHLElBQUksd0JBQXdCLEVBQUUsQ0FBQztRQUNoRSxJQUFJLENBQUMseUJBQXlCLENBQUMscUJBQXFCLEdBQUcsSUFBSSxDQUFDLDJCQUEyQixDQUFDO1FBQ3hGLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxrQkFBa0IsR0FBRyxVQUFVLENBQUM7UUFDL0QsSUFBSSxDQUFDLHlCQUF5QixDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDO1FBRXBFLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxJQUFJLENBQUM7UUFDaEMsVUFBVSxDQUFDLEdBQUcsRUFBRTtZQUNkLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUM1QyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDVixDQUFDO0lBS0QsZ0VBQWdFO0lBRWhFLGNBQWMsQ0FBQyxXQUFXO1FBQ3hCLElBQUksV0FBVztZQUNiLElBQUksQ0FBQyxxQ0FBcUMsR0FBRyxJQUFJLENBQUMsNkJBQTZCLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQzs7WUFFaEssSUFBSSxDQUFDLHFDQUFxQyxHQUFHLElBQUksQ0FBQyw2QkFBNkIsQ0FBQTtJQUNuRixDQUFDO0lBQ0QsV0FBVztRQUNULElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxjQUFjLEVBQUUsQ0FBQztJQUM5QyxDQUFDOzt3SEFsTlksMEJBQTBCOzRHQUExQiwwQkFBMEIsMlRDbEJ2Qyx3dktBcUhBOzRGRG5HYSwwQkFBMEI7a0JBSnRDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLHlCQUF5QjtvQkFDbkMsV0FBVyxFQUFFLHNDQUFzQztpQkFDcEQ7d1JBdUJxRSxhQUFhO3NCQUFoRixTQUFTO3VCQUFDLG9DQUFvQyxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTtnQkFhUix3QkFBd0I7c0JBQWpGLFNBQVM7dUJBQUMsMEJBQTBCLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBPbkluaXQsIFZpZXdDaGlsZCwgT25EZXN0cm95IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQgeyBDb25maXJtYXRpb25Nb2RhbE9wdGlvbnMsIEZpbHRlckl0ZW0sIEZpbHRlclR5cGUsIEZvcm1PcHRpb25zLCBJbnB1dFR5cGUsIFBhZ2luZ09wdGlvbnMsIFRhZ3NJbnB1dE9wdGlvbnMsIFRleHRCb3hPcHRpb25zIH0gZnJvbSAnQGJuc2lnaHRzL2Jic2YtY29udHJvbHMnO1xyXG5pbXBvcnQgeyBQYWdlSW5mb1NlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9fbWV0cm9uaWMvY29yZS9zZXJ2aWNlcy9wYWdlLWluZm8uc2VydmljZSc7XHJcbmltcG9ydCB7IFBlcm1pc3Npb25TZXRVc2Vyc0lEUmVxdWVzdE1vZGVsIH0gZnJvbSAnLi4vLi4vc2hhcmVkL21vZGVscy9QZXJtaXNzaW9uc01vZGVscy9QZXJtaXNzaW9uU2V0VXNlcnNJRFJlcXVlc3RNb2RlbCc7XHJcbmltcG9ydCB7IFBlcm1pc3Npb25TZXRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2hhcmVkL1NlcnZpY2VzL1Blcm1pc3Npb25TZXRTZXJ2aWNlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBOZ2JNb2RhbCB9IGZyb20gJ0BuZy1ib290c3RyYXAvbmctYm9vdHN0cmFwJztcclxuaW1wb3J0IHsgQXV0aFNlcnZpY2UsIFV0aWxpdHlTZXJ2aWNlLCAgUmVxdWVzdEhhbmRsZXJTZXJ2aWNlIH0gZnJvbSAnQGJuc2lnaHRzL2Jic2YtdXRpbGl0aWVzJztcclxuaW1wb3J0IHsgUGVybWlzc2lvblNldE1vZGVsIH0gZnJvbSAnLi8uLi8uLi9zaGFyZWQvbW9kZWxzL1Blcm1pc3Npb25zTW9kZWxzL1Blcm1pc3Npb25TZXRNb2RlbCc7XHJcbmltcG9ydCB7IFBhZ2luZ0NvbXBvbmVudCB9IGZyb20gJ0BibnNpZ2h0cy9iYnNmLWNvbnRyb2xzL2xpYi9jb250cm9scy9QYWdpbmcvUGFnaW5nLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgQ29uZmlybWF0aW9uTW9kYWxDb21wb25lbnQgfSBmcm9tICdAYm5zaWdodHMvYmJzZi1jb250cm9scy9saWIvY29udHJvbHMvQ29uZmlybWF0aW9uTW9kYWwvQ29uZmlybWF0aW9uTW9kYWwuY29tcG9uZW50JztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnbGliLXBlcm1pc3Npb24tc2V0LWluZm8nLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9wZXJtaXNzaW9uLXNldC1pbmZvLmNvbXBvbmVudC5odG1sJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgUGVybWlzc2lvblNldEluZm9Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQgLE9uRGVzdHJveSB7XHJcblxyXG4gIC8vUGFnZSByZXF1aXJlbWVudHNcclxuICBBcGlVcmwgPSB0aGlzLnBlcm1pc3Npb25TZXRTZXJ2aWNlLkFwaVVybFxyXG5cclxuICAvL1BhcmVudCBkZXBhcnRtZW50IGRhdGFcclxuICBQZXJtaXNzaW9uU2V0SWQ6IHN0cmluZyA9IFwiXCJcclxuICBQZXJtaXNzaW9uU2V0OiBQZXJtaXNzaW9uU2V0TW9kZWwgPSBuZXcgUGVybWlzc2lvblNldE1vZGVsKCk7XHJcblxyXG4gIC8vRmlsdGVyIGFuZCBwYWdpbmcgY29tcG9uZW50c1xyXG4gIHNlYXJjaFRleHRCb3g6IFRleHRCb3hPcHRpb25zO1xyXG4gIHBlcm1pc3Npb25TZXRJZFRleHRCb3g6IFRleHRCb3hPcHRpb25zO1xyXG4gIGZpbHRlckZvcm0gPSBuZXcgRm9ybUdyb3VwKHt9KTtcclxuICB1c2VyUGVybWlzc2lvblNldEZvcm0gPSBuZXcgRm9ybUdyb3VwKHt9KTtcclxuICBzaG93RmlsdGVyOiBib29sZWFuID0gZmFsc2U7XHJcbiAgdXNlclBlcm1pc3Npb25TZXRQYWdpbmdSZXN1bHQ6IGFueVtdID0gW107XHJcbiAgZmlsdGVyZWRVc2VyUGVybWlzc2lvblNldFBhZ2luZ1Jlc3VsdDogYW55W10gPSBbXTtcclxuXHJcbiAgdXNlclBlcm1pc3Npb25TZXRQYWdpbmc6IFBhZ2luZ09wdGlvbnM7XHJcbiAgdGV4dElucHV0RmlsdGVyOiBGaWx0ZXJJdGVtO1xyXG4gIHBlcm1pc3Npb25TZXRJZFRleHRJbnB1dEZpbHRlcjogRmlsdGVySXRlbTtcclxuICBpc0ZpbHRlckxvYWRlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBWaWV3Q2hpbGQoJ1VzZXJQZXJtaXNzaW9uU2V0UGFnaW5nVmlld0VsZW1lbnQnLCB7IHN0YXRpYzogZmFsc2UgfSkgcGFnaW5nRWxlbWVudDogUGFnaW5nQ29tcG9uZW50PGFueT47XHJcblxyXG5cclxuXHJcbiAgLy9BZGQgTW9kZWwgQ29udHJvbHNcclxuICBhZGRVc2Vyc1RvUGVybWlzc2lvblNldEZvcm0gPSBuZXcgRm9ybUdyb3VwKHt9KTtcclxuICBhZGRVc2Vyc1RvUGVybWlzc2lvblNldEZvcm1PcHRpb25zOiBGb3JtT3B0aW9uc1xyXG4gIHVzZXJBdXRvQ29tcGxldGU6IFRhZ3NJbnB1dE9wdGlvbnM7XHJcbiAgXHJcbiAgLy9kZWxldGUgIE1vZGVsIENvbnRyb2xzXHJcbiAgZGVsZXRlVXNlcklkOiBzdHJpbmc7XHJcbiAgZGVsZXRlQ29uZmlybWF0aW9uT3B0aW9uczogQ29uZmlybWF0aW9uTW9kYWxPcHRpb25zO1xyXG4gIGRlbGV0ZUNvbnRyb2xMb2FkZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBAVmlld0NoaWxkKCdDb25maXJtYXRpb25Nb2RhbENvbnRyb2wnLCB7IHN0YXRpYzogZmFsc2UgfSkgQ29uZmlybWF0aW9uTW9kYWxDb250cm9sOiBDb25maXJtYXRpb25Nb2RhbENvbXBvbmVudDtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIHBhZ2VJbmZvU2VydmljZTogUGFnZUluZm9TZXJ2aWNlLFxyXG4gICAgcHVibGljICB1dGlsaXR5U2VydmljZTogVXRpbGl0eVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGFjdGl2YXRlZFJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcclxuICAgIHByaXZhdGUgYXV0aFNlcnZpY2U6IEF1dGhTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBwZXJtaXNzaW9uU2V0U2VydmljZTogUGVybWlzc2lvblNldFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIG1vZGFsU2VydmljZTogTmdiTW9kYWwsXHJcbiAgICBwcml2YXRlIHJlcXVlc3RIYW5kbGVyU2VydmljZTpSZXF1ZXN0SGFuZGxlclNlcnZpY2VcclxuICApIFxyXG4gIHtcclxuXHJcbiAgICB0aGlzLmFjdGl2YXRlZFJvdXRlLnBhcmFtcy5zdWJzY3JpYmUocGFyYW1zID0+IHtcclxuICAgICAgdGhpcy5QZXJtaXNzaW9uU2V0SWQgPSBwYXJhbXNbJ2lkJ107XHJcbiAgIH0pO1xyXG4gIH1cclxuICAgbmdPbkluaXQoKSB7XHJcbiAgICAgLy9QYWdlIGhlYWRlciAoYnJlYWRjcnVtYiBhbmQgdGl0bGUpXHJcbiAgICAgdGhpcy5sb2FkQnJlYWRDcnVtcERhdGEoKVxyXG4gICBcclxuICB9XHJcblxyXG5cclxuICAvL1BhZ2luZyBmdW5jdGlvbnNcclxuICBzZXRVc2VyUGVybWlzc2lvblNldExpc3RSZXN1bHQocmVzdWx0KSB7XHJcbiAgICB0aGlzLnVzZXJQZXJtaXNzaW9uU2V0UGFnaW5nUmVzdWx0ID0gcmVzdWx0O1xyXG4gICAgdGhpcy5maWx0ZXJlZFVzZXJQZXJtaXNzaW9uU2V0UGFnaW5nUmVzdWx0PXRoaXMudXNlclBlcm1pc3Npb25TZXRQYWdpbmdSZXN1bHRcclxuICB9XHJcbiAgLy9SZXNldCBhbGwgRmlsdGVyc1xyXG4gIHJlc2V0RmlsdGVycygpIHtcclxuICAgIHRoaXMudXNlclBlcm1pc3Npb25TZXRGb3JtLmNvbnRyb2xzW1wic2VhcmNoVGV4dEJveFwiXS5zZXRWYWx1ZShudWxsKTtcclxuICAgIGxldCBlbGVtZW50ID0gdGhpcy5wYWdpbmdFbGVtZW50IGFzIGFueTtcclxuICAgIGVsZW1lbnQuUmVpbml0aWFsaXplUGFnaW5nKCk7XHJcbiAgfVxyXG5cclxuXHJcbiAgLy9HZXQgcGFyZW50IFBlcm1pc3Npb25TZXRzIG5hbWUgYW5kIHNldCBwYWdlIHRpdGxlIGFuZCBicmVhZGNydW1ic1xyXG4gICAgbG9hZEJyZWFkQ3J1bXBEYXRhKCkge1xyXG4gICAgICB0aGlzLnBlcm1pc3Npb25TZXRTZXJ2aWNlLmdldFBlcm1pc3Npb25TZXRJbmZvKHRoaXMuUGVybWlzc2lvblNldElkKS5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xyXG4gICAgICAgIGxldCByZXN1bHRNb2RlbCA9IHJlc3VsdCBhcyBhbnlcclxuICAgICAgICBQYWdlSW5mb1NlcnZpY2UuUGFnZVRpdGxlID0gcmVzdWx0TW9kZWwudmFsXHJcbiAgICAgICAgUGFnZUluZm9TZXJ2aWNlLlBhZ2VCcmVhZGNydW1icyA9IFtcclxuICAgICAgICAgIHsgdGl0bGU6IHRoaXMudXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkhvbWVcIiksIHBhdGg6ICcvQWRtaW4vSG9tZScsIGlzU2VwYXJhdG9yOiBmYWxzZSwgaXNBY3RpdmU6IGZhbHNlIH0sXHJcbiAgICAgICAgICB7IHRpdGxlOiAnJywgcGF0aDogJycsIGlzU2VwYXJhdG9yOiB0cnVlLCBpc0FjdGl2ZTogZmFsc2UgfSxcclxuICAgICAgICAgIHsgdGl0bGU6IHRoaXMudXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIlBlcm1pc3Npb25TZXRzXCIpLCBwYXRoOiAnL0FkbWluL1JvbGVzL1Blcm1pc3Npb25TZXRzJywgaXNTZXBhcmF0b3I6IGZhbHNlLCBpc0FjdGl2ZTogZmFsc2UgfSxcclxuICAgICAgICAgIHsgdGl0bGU6ICcnLCBwYXRoOiAnJywgaXNTZXBhcmF0b3I6IHRydWUsIGlzQWN0aXZlOiBmYWxzZSB9XHJcbiAgICAgICAgXTtcclxuICAgICAgICB0aGlzLnBhZ2VJbmZvU2VydmljZS5jYWxjdWxhdGVUaXRsZSgpO1xyXG4gICAgICAgIHRoaXMucGFnZUluZm9TZXJ2aWNlLmNhbGN1bGF0ZUJyZWFkY3J1bWJzKCk7XHJcbiAgICAgICAgLy9pbml0aWFsaXplIHBhZ2VcclxuICAgICAgICAgdGhpcy5pbml0aWFsaXplUGFnZSgpO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICBcclxuICAgLy9pbml0aWFsaXplIHBhZ2VcclxuICAgIGluaXRpYWxpemVQYWdlKCkge1xyXG4gICAgICB0aGlzLmlzRmlsdGVyTG9hZGVkID0gZmFsc2VcclxuICAgICAgLy8gVGV4dEJveCBpbnRpXHJcbiAgICAgIHRoaXMuc2VhcmNoVGV4dEJveCA9IG5ldyBUZXh0Qm94T3B0aW9ucygpO1xyXG4gICAgICB0aGlzLnNlYXJjaFRleHRCb3guTmFtZSA9IFwic2VhcmNoVGV4dEJveFwiXHJcbiAgICAgIHRoaXMuc2VhcmNoVGV4dEJveC5IaWRlTGFiZWwgPSB0cnVlXHJcbiAgICAgIHRoaXMuc2VhcmNoVGV4dEJveC5UeXBlID0gSW5wdXRUeXBlLlRleHRcclxuICAgICAgdGhpcy5zZWFyY2hUZXh0Qm94LlBsYWNlaG9sZGVyID0gdGhpcy51dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiU2VhcmNoQnlOYW1lT3JFbWFpbFwiKTtcclxuICBcclxuICAgICAgdGhpcy5wZXJtaXNzaW9uU2V0SWRUZXh0Qm94ID0gbmV3IFRleHRCb3hPcHRpb25zKCk7XHJcbiAgICAgIHRoaXMucGVybWlzc2lvblNldElkVGV4dEJveC5OYW1lID0gXCJQZXJtaXNzaW9uU2V0SWRUZXh0Qm94XCJcclxuICAgICAgdGhpcy5wZXJtaXNzaW9uU2V0SWRUZXh0Qm94LkhpZGVMYWJlbCA9IHRydWVcclxuICAgICAgdGhpcy5wZXJtaXNzaW9uU2V0SWRUZXh0Qm94LlR5cGUgPSBJbnB1dFR5cGUuVGV4dFxyXG4gICAgICB0aGlzLnBlcm1pc3Npb25TZXRJZFRleHRCb3guVmFsdWUgPSB0aGlzLlBlcm1pc3Npb25TZXRJZDtcclxuICAgICAgdGhpcy5wZXJtaXNzaW9uU2V0SWRUZXh0Qm94LlBsYWNlaG9sZGVyID0gdGhpcy51dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiU2VhcmNoQnlOYW1lXCIpO1xyXG4gIFxyXG4gIFxyXG4gICAgICB0aGlzLnRleHRJbnB1dEZpbHRlciA9IG5ldyBGaWx0ZXJJdGVtKCk7XHJcbiAgICAgIHRoaXMudGV4dElucHV0RmlsdGVyLkZvcm1Db250cm9sTmFtZSA9IFwic2VhcmNoVGV4dEJveFwiXHJcbiAgICAgIHRoaXMudGV4dElucHV0RmlsdGVyLkFjdGlvblBhcmFtZXRlck5hbWUgPSBcInNlYXJjaFRleHRcIlxyXG4gICAgICB0aGlzLnRleHRJbnB1dEZpbHRlci5Jc0Zvcm1Db250cm9sID0gdHJ1ZVxyXG4gICAgICB0aGlzLnRleHRJbnB1dEZpbHRlci5GaWx0ZXJUeXBlID0gRmlsdGVyVHlwZS5UZXh0Qm94XHJcbiAgXHJcbiAgICAgICB0aGlzLnBlcm1pc3Npb25TZXRJZFRleHRJbnB1dEZpbHRlciA9IG5ldyBGaWx0ZXJJdGVtKCk7XHJcbiAgICAgICB0aGlzLnBlcm1pc3Npb25TZXRJZFRleHRJbnB1dEZpbHRlci5Gb3JtQ29udHJvbE5hbWUgPSBcIlBlcm1pc3Npb25TZXRJZFRleHRCb3hcIlxyXG4gICAgICAgdGhpcy5wZXJtaXNzaW9uU2V0SWRUZXh0SW5wdXRGaWx0ZXIuQWN0aW9uUGFyYW1ldGVyTmFtZSA9IFwicGVybWlzc2lvblNldElkXCJcclxuICAgICAgIHRoaXMucGVybWlzc2lvblNldElkVGV4dElucHV0RmlsdGVyLklzRm9ybUNvbnRyb2wgPSB0cnVlXHJcbiAgICAgICB0aGlzLnBlcm1pc3Npb25TZXRJZFRleHRJbnB1dEZpbHRlci5GaWx0ZXJUeXBlID0gRmlsdGVyVHlwZS5UZXh0Qm94XHJcblxyXG4gICAgICAgdGhpcy51c2VyUGVybWlzc2lvblNldFBhZ2luZyA9IG5ldyBQYWdpbmdPcHRpb25zKCk7XHJcbiAgICAgICB0aGlzLnVzZXJQZXJtaXNzaW9uU2V0UGFnaW5nLkFjdGlvblBvc3RVUkwgPXRoaXMuQXBpVXJsICsgJ0dldFVzZXJzQnlGaWx0ZXInO1xyXG4gICAgICAgdGhpcy51c2VyUGVybWlzc2lvblNldFBhZ2luZy5PbktleVByZXNzRmlsdGVyc0NvbnRyb2xOYW1lcyA9IFtcInNlYXJjaFRleHRCb3hcIiwgXCJQZXJtaXNzaW9uU2V0SWRUZXh0Qm94XCJdXHJcbiAgICAgICB0aGlzLnVzZXJQZXJtaXNzaW9uU2V0UGFnaW5nLkZpbHRlcnMgPSBbdGhpcy50ZXh0SW5wdXRGaWx0ZXIsIHRoaXMucGVybWlzc2lvblNldElkVGV4dElucHV0RmlsdGVyXVxyXG4gXHJcbiAgICAgICB0aGlzLmlzRmlsdGVyTG9hZGVkID0gdHJ1ZTtcclxuICAgIH1cclxuICBcclxuXHJcbiAgICBcclxuXHJcbiAgICAvLy8vLy8vLy8vLy8vIFN0YXJ0IGFkZCB1c2VyIFBhcnQvLy8vLy8vLy8vLy8vLy8vLy8vLy8vXHJcbiAgICBzaG93QWRkVXNlclRvUGVybWlzc2lvblNldE1vZGFsKGFkZFVzZXJUb0RlcGFydG1lbnRNb2RhbCkge1xyXG4gICAgdGhpcy51dGlsaXR5U2VydmljZS5zdGFydEJsb2NrVUkoKVxyXG4gICAgXHJcbiAgICB0aGlzLmFkZFVzZXJzVG9QZXJtaXNzaW9uU2V0Rm9ybSA9IG5ldyBGb3JtR3JvdXAoe30pXHJcbiAgICB0aGlzLmFkZFVzZXJzVG9QZXJtaXNzaW9uU2V0Rm9ybU9wdGlvbnMgPSBuZXcgRm9ybU9wdGlvbnMoKTtcclxuICAgIHRoaXMuYWRkVXNlcnNUb1Blcm1pc3Npb25TZXRGb3JtT3B0aW9ucy5Gb3JtR3JvdXAgPSB0aGlzLmFkZFVzZXJzVG9QZXJtaXNzaW9uU2V0Rm9ybVxyXG4gICAgdGhpcy5hZGRVc2Vyc1RvUGVybWlzc2lvblNldEZvcm1PcHRpb25zLkdldE1vZGVsRnVuY3Rpb24gPSB0aGlzLmdldEFkZFVzZXJUb1Blcm1pc3Npb25TZXRNb2RlbDtcclxuICAgIHRoaXMuYWRkVXNlcnNUb1Blcm1pc3Npb25TZXRGb3JtT3B0aW9ucy5TZXJ2aWNlU3VibWl0RnVuY3Rpb24gPSB0aGlzLmdldEFkZFVzZXJUb1Blcm1pc3Npb25TZXRGdW5jdGlvbjtcclxuICAgIHRoaXMuYWRkVXNlcnNUb1Blcm1pc3Npb25TZXRGb3JtT3B0aW9ucy5QYWdpbmdSZWZlcmVuY2UgPSB0aGlzLnBhZ2luZ0VsZW1lbnRcclxuXHJcbiAgICB0aGlzLnVzZXJBdXRvQ29tcGxldGUgPSBuZXcgVGFnc0lucHV0T3B0aW9ucygpO1xyXG4gICAgdGhpcy51c2VyQXV0b0NvbXBsZXRlLk5hbWUgPSBcIlVzZXJBdXRvQ29tcGxldGVcIjtcclxuICAgIHRoaXMudXNlckF1dG9Db21wbGV0ZS5MYWJlbEtleSA9IFwiVXNlcnNcIjtcclxuICAgIHRoaXMudXNlckF1dG9Db21wbGV0ZS5Jc1JlcXVpcmVkID0gdHJ1ZTtcclxuICAgIHRoaXMudXNlckF1dG9Db21wbGV0ZS5WYWx1ZSA9IG51bGw7XHJcbiAgICB0aGlzLnVzZXJBdXRvQ29tcGxldGUuQWN0aW9uVVJMID0gdGhpcy5BcGlVcmwgKyBcIkF1dG9Db21wbGV0ZVVzZXJMaXN0XCJcclxuICAgIHRoaXMudXNlckF1dG9Db21wbGV0ZS5WYWxpZGF0aW9uVG9rZW4gPSB0aGlzLmF1dGhTZXJ2aWNlLmF1dGhvcml6YXRpb25IZWFkZXJWYWx1ZSgpXHJcbiAgICB0aGlzLm1vZGFsU2VydmljZS5vcGVuKGFkZFVzZXJUb0RlcGFydG1lbnRNb2RhbCk7XHJcbiAgICB0aGlzLnV0aWxpdHlTZXJ2aWNlLnN0b3BCbG9ja1VJKClcclxuXHJcblxyXG4gIH1cclxuXHJcbiAgZ2V0QWRkVXNlclRvUGVybWlzc2lvblNldE1vZGVsID0gKCkgPT4ge1xyXG4gICAgbGV0IHBhcmFtQXJyYXk6IGFueVtdID0gW107XHJcbiAgICBsZXQgUmVzdWx0TW9kZWwgPSB0aGlzLmFkZFVzZXJzVG9QZXJtaXNzaW9uU2V0Rm9ybS52YWx1ZTtcclxuICAgIGxldCBBZGRNb2RlbDogUGVybWlzc2lvblNldFVzZXJzSURSZXF1ZXN0TW9kZWwgPSBuZXcgUGVybWlzc2lvblNldFVzZXJzSURSZXF1ZXN0TW9kZWwoKTtcclxuICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBSZXN1bHRNb2RlbC5Vc2VyQXV0b0NvbXBsZXRlLmxlbmd0aDsgaW5kZXgrKykge1xyXG4gICAgICBjb25zdCBrZXkgPSBSZXN1bHRNb2RlbC5Vc2VyQXV0b0NvbXBsZXRlW2luZGV4XS5rZXk7XHJcbiAgICAgIEFkZE1vZGVsLlVzZXJzSURzLnB1c2goTnVtYmVyKGtleSkpXHJcblxyXG4gICAgfVxyXG4gICAgQWRkTW9kZWwuUGVybWlzc2lvblNldElkID0gdGhpcy5QZXJtaXNzaW9uU2V0SWQ7XHJcbiAgICBwYXJhbUFycmF5LnB1c2goQWRkTW9kZWwpO1xyXG4gICAgcmV0dXJuIHBhcmFtQXJyYXk7XHJcbiAgfVxyXG5cclxuICBnZXRBZGRVc2VyVG9QZXJtaXNzaW9uU2V0RnVuY3Rpb24gPSAoQWRkTW9kZWwpOiBPYnNlcnZhYmxlPGFueT4gPT4ge1xyXG4gICAgcmV0dXJuIHRoaXMucGVybWlzc2lvblNldFNlcnZpY2UuYWRkVXNlcnNUb1Blcm1pc3Npb25TZXQoQWRkTW9kZWwpXHJcbiAgfVxyXG5cclxuICAvLy8vLy8vLy8vLy8vIEVuZCBhZGQgVXNlciBQYXJ0Ly8vLy8vLy8vLy8vLy8vLy8vLy8vL1xyXG5cclxuXHJcblxyXG4gICAvLy8vLy8vLy8vL1N0YXJ0IGRlbGV0ZSB1c2VyIGZyb20gUGVybWlzc2lvblNldC8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cclxuc2hvd0RlbGV0ZVVzZXJGcm9tUGVybWlzc2lvblNldE1vZGFsKGVuY3J5cHRlZFVzZXJJZDogc3RyaW5nKSB7XHJcbiAgdGhpcy5kZWxldGVVc2VySWQgPSBlbmNyeXB0ZWRVc2VySWQ7XHJcbiAgLy9hcnJheSBzZW50IHRvIHNlcnZpY2UgZnVuY3Rpb25cclxuICBsZXQgcGFyYW1BcnJheTogYW55W10gPSBbXTtcclxuICBwYXJhbUFycmF5LnB1c2godGhpcy5kZWxldGVVc2VySWQpO1xyXG4gIHBhcmFtQXJyYXkucHVzaCh0aGlzLlBlcm1pc3Npb25TZXRJZCk7XHJcblxyXG5cclxuICB0aGlzLmRlbGV0ZUNvbmZpcm1hdGlvbk9wdGlvbnMgPSBuZXcgQ29uZmlybWF0aW9uTW9kYWxPcHRpb25zKCk7XHJcbiAgdGhpcy5kZWxldGVDb25maXJtYXRpb25PcHRpb25zLlNlcnZpY2VTdWJtaXRGdW5jdGlvbiA9IHRoaXMuZGVsZXRlVXNlckZyb21QZXJtaXNzaW9uU2V0O1xyXG4gIHRoaXMuZGVsZXRlQ29uZmlybWF0aW9uT3B0aW9ucy5TZXJ2aWNlU3VibWl0TW9kZWwgPSBwYXJhbUFycmF5O1xyXG4gIHRoaXMuZGVsZXRlQ29uZmlybWF0aW9uT3B0aW9ucy5QYWdpbmdSZWZlcmVuY2UgPSB0aGlzLnBhZ2luZ0VsZW1lbnQ7XHJcblxyXG4gIHRoaXMuZGVsZXRlQ29udHJvbExvYWRlZCA9IHRydWU7XHJcbiAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICB0aGlzLkNvbmZpcm1hdGlvbk1vZGFsQ29udHJvbC5zaG93TW9kYWwoKTtcclxuICB9LCAyMDApO1xyXG59XHJcblxyXG5kZWxldGVVc2VyRnJvbVBlcm1pc3Npb25TZXQgPSAoZGVsZXRlVXNlcklkOiBzdHJpbmcsUGVyU2V0SWQ6c3RyaW5nKTogT2JzZXJ2YWJsZTxhbnk+ID0+IHtcclxuICByZXR1cm4gdGhpcy5wZXJtaXNzaW9uU2V0U2VydmljZS5kZWxldGVVc2VyRnJvbVBlcm1pc3Npb25TZXQoZGVsZXRlVXNlcklkLFBlclNldElkKTtcclxufVxyXG4vLy8vLy8vLy8vL0VuZCBkZWxldGUgdXNlciBmcm9tIGRlcGFydG1lbnQvLy8vLy8vLy8vLy8vLy8vLy8vLy8vXHJcblxyXG5maWx0ZXJVc2VyTGlzdChzZWFyY2hWYWx1ZSkge1xyXG4gIGlmIChzZWFyY2hWYWx1ZSlcclxuICAgIHRoaXMuZmlsdGVyZWRVc2VyUGVybWlzc2lvblNldFBhZ2luZ1Jlc3VsdCA9IHRoaXMudXNlclBlcm1pc3Npb25TZXRQYWdpbmdSZXN1bHQuZmlsdGVyKGl0ZW0gPT4gaXRlbS51c2VyTmFtZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHNlYXJjaFZhbHVlLnRvTG93ZXJDYXNlKCkpKTtcclxuICBlbHNlXHJcbiAgICB0aGlzLmZpbHRlcmVkVXNlclBlcm1pc3Npb25TZXRQYWdpbmdSZXN1bHQgPSB0aGlzLnVzZXJQZXJtaXNzaW9uU2V0UGFnaW5nUmVzdWx0XHJcbn1cclxubmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgdGhpcy5yZXF1ZXN0SGFuZGxlclNlcnZpY2UuZGVzdHJveUhhbmRsZXIoKTtcclxufVxyXG5cclxuXHJcblxyXG59XHJcbiIsIlxyXG48YmxvY2stdWk+PC9ibG9jay11aT5cclxuPCEtLSBQYWdlIENvbnRlbnQgLS0+XHJcbjxkaXYgIGNsYXNzPVwiY29udGFpbmVyLWZsdWlkXCI+XHJcbiAgPGRpdiBjbGFzcz1cImNhcmQgY2FyZC1jdXN0b20taFwiPlxyXG4gICAgPGRpdiBjbGFzcz1cImNhcmQtaGVhZGVyIGJvcmRlci0wIHB0LTVcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cImNhcmQtdGl0bGUgYWxpZ24taXRlbXMtc3RhcnQgZmxleC1jb2x1bW5cIiAqbmdJZj1cImlzRmlsdGVyTG9hZGVkXCI+XHJcbiAgICAgICAgPEJCU0YtVGV4dEJveCBbb3B0aW9uc109XCJzZWFyY2hUZXh0Qm94XCIgIChPbkNoYW5nZSk9XCJmaWx0ZXJVc2VyTGlzdCgkZXZlbnQpXCIgW2dyb3VwXT1cInVzZXJQZXJtaXNzaW9uU2V0Rm9ybVwiPjwvQkJTRi1UZXh0Qm94PlxyXG4gICAgICAgIDxCQlNGLVRleHRCb3ggW2hpZGRlbl09XCJ0cnVlXCIgW29wdGlvbnNdPVwicGVybWlzc2lvblNldElkVGV4dEJveFwiIFtncm91cF09XCJ1c2VyUGVybWlzc2lvblNldEZvcm1cIj48L0JCU0YtVGV4dEJveD5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLXRvb2xiYXJcIj5cclxuICAgICAgICA8IS0tIGJlZ2luOjpNZW51IC0tPlxyXG4gICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4tcHJpbWFyeVwiIHRpdGxlPVwiQWRkXCIgIChjbGljayk9XCJzaG93QWRkVXNlclRvUGVybWlzc2lvblNldE1vZGFsKEFkZFVzZXJUb1Blcm1pc3Npb25TZXRNb2RhbClcIj5cclxuICAgICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLXBsdXMgbWUtMVwiPjwvaT5cclxuICAgICAgICAgIHt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkFkZFwiKX19XHJcbiAgICAgICAgPC9idXR0b24+XHJcblxyXG4gICAgICAgIDwhLS0gZW5kOjpNZW51IC0tPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cImNhcmQtYm9keSBweS0zXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1yZXNwb25zaXZlXCI+XHJcbiAgICAgICAgPCEtLWJlZ2luOjpQZXJtaXNzaW9uIGxpc3QtLT5cclxuICAgICAgICA8dGFibGUgY2xhc3M9XCJ0YWJsZSBhbGlnbi1taWRkbGUgdGFibGUtcm93LWRhc2hlZCBmcy02IGd5LTUgZGF0YVRhYmxlIG5vLWZvb3RlclwiPlxyXG4gICAgICAgICAgPHRoZWFkPlxyXG4gICAgICAgICAgICA8dHIgY2xhc3M9XCJ0ZXh0LXN0YXJ0IHRleHQtZ3JheS00MDAgZnctYm9sZGVyIGZzLTcgdGV4dC11cHBlcmNhc2UgZ3MtMFwiPlxyXG5cclxuICAgICAgICAgICAgICA8dGggY2xhc3M9XCJtaW4tdy0xNTBweFwiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIk5hbWVcIil9fTwvdGg+XHJcbiAgICAgICAgICAgICAgPHRoIGNsYXNzPVwibWluLXctMTUwcHhcIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJFbWFpbFwiKX19PC90aD5cclxuICAgICAgICAgICAgICA8dGggY2xhc3M9XCJtaW4tdy0xNTBweFwiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIlJvbGVzXCIpfX08L3RoPlxyXG4gICAgICAgICAgICAgIDx0aCBjbGFzcz1cIm1pbi13LTUwcHhcIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJBY3Rpb25cIil9fTwvdGg+XHJcbiAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICA8L3RoZWFkPlxyXG4gICAgICAgICAgPHRib2R5IGlkPVwibGlzdGluZ0NvbnRhaW5lclwiIGNsYXNzPVwiZnctYm9sZCB0ZXh0LWdyYXktNjAwIGJvcmRlci0wXCI+XHJcblxyXG4gICAgICAgICAgICA8dHIgKm5nRm9yPVwibGV0IHVzZXIgb2YgZmlsdGVyZWRVc2VyUGVybWlzc2lvblNldFBhZ2luZ1Jlc3VsdFwiPlxyXG5cclxuICAgICAgICAgICAgICA8dGQ+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtZGFya1wiPnt7dXNlci51c2VyTmFtZX19PC9zcGFuPlxyXG4gICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgPHRkPnt7dXNlci5lbWFpbH19PC90ZD5cclxuICAgICAgICAgICAgICA8dGQ+e3t1c2VyLnVzZXJQZXJtc2V0c319PC90ZD5cclxuICAgICAgICAgICAgICA8dGQ+XHJcbiAgICAgICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1idXR0b24gW21hdE1lbnVUcmlnZ2VyRm9yXT1cIm1lbnVcIiBjbGFzcz1cImJ0biBidG4tc20gYnRuLWljb24gYnRuLWxpZ2h0IGJ0bi1hY3RpdmUtbGlnaHQtcHJpbWFyeVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtZWxsaXBzaXMtaFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cclxuICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgIDxtYXQtbWVudSAjbWVudT1cIm1hdE1lbnVcIj5cclxuICAgICAgICAgICAgICAgICAgICA8YSBuZ2JEcm9wZG93bkl0ZW0gY2xhc3M9XCJkcm9wLWl0ZW0gcHgtM1wiXHJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInNob3dEZWxldGVVc2VyRnJvbVBlcm1pc3Npb25TZXRNb2RhbCh1c2VyLmlkRW5jcnlwdGVkKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkcm9wLWxpbmsgcHgtM1wiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkRlbGV0ZVwiKX19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgICAgICAgPC9tYXQtbWVudT5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgIDx0ciAqbmdJZj1cImZpbHRlcmVkVXNlclBlcm1pc3Npb25TZXRQYWdpbmdSZXN1bHQubGVuZ3RoID09IDBcIj5cclxuICAgICAgICAgICAgICA8dGQgY29sc3Bhbj1cIjRcIj5cclxuICAgICAgICAgICAgICAgIDxsaWItZW1wdHktZGF0YT48L2xpYi1lbXB0eS1kYXRhPlxyXG4gICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICA8L3Rib2R5PlxyXG4gICAgICAgIDwvdGFibGU+XHJcblxyXG4gICAgICAgIDwhLS1lbmQ6OlBlcm1pc3Npb24gbGlzdC0tPlxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJjYXJkLWZvb3RlciBib3JkZXItMFwiPlxyXG4gICAgICA8QkJTRi1QYWdpbmcgKEl0ZW1zKT1cInNldFVzZXJQZXJtaXNzaW9uU2V0TGlzdFJlc3VsdCgkZXZlbnQpXCIgKm5nSWY9XCJpc0ZpbHRlckxvYWRlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgIFtvcHRpb25zXT1cInVzZXJQZXJtaXNzaW9uU2V0UGFnaW5nXCIgW2dyb3VwXT1cInVzZXJQZXJtaXNzaW9uU2V0Rm9ybVwiICNVc2VyUGVybWlzc2lvblNldFBhZ2luZ1ZpZXdFbGVtZW50PlxyXG4gICAgICAgIDwvQkJTRi1QYWdpbmc+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuXHJcbjwvZGl2PlxyXG5cclxuPCEtLWFkZCBNb2RhbC0tPlxyXG48bmctdGVtcGxhdGUgI0FkZFVzZXJUb1Blcm1pc3Npb25TZXRNb2RhbCBsZXQtbW9kYWw+XHJcbiAgPGRpdiBjbGFzcz1cIm1vZGFsLWhlYWRlciBwYi0wIGJvcmRlci0wIGp1c3RpZnktY29udGVudC1lbmRcIj5cclxuICAgIDxoNSBjbGFzcz1cIm1vZGFsLXRpdGxlXCIgaWQ9XCJleGFtcGxlTW9kYWxMYWJlbFwiPjwvaDU+XHJcbiAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBkYXRhLWRpc21pc3M9XCJtb2RhbFwiIGFyaWEtbGFiZWw9XCJDbG9zZVwiIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4taWNvbiBidG4tYWN0aXZlLWNvbG9yLXByaW1hcnlcIlxyXG4gICAgICAoY2xpY2spPVwibW9kYWwuZGlzbWlzcygpXCI+XHJcbiAgICAgIDxzcGFuIGNsYXNzPVwic3ZnLWljb24gc3ZnLWljb24tMVwiPlxyXG4gICAgICAgIDxzcGFuIFtpbmxpbmVTVkddPVwiJy4vc3JjL2Fzc2V0cy9pbWFnZXMvYXJyMDYxLnN2ZydcIj48L3NwYW4+XHJcbiAgICAgIDwvc3Bhbj5cclxuICAgIDwvYnV0dG9uPlxyXG4gIDwvZGl2PlxyXG4gIDxkaXYgY2xhc3M9XCJtb2RhbC1ib2R5IHNjcm9sbC15IHB4LTEwIHB4LWxnLTE1IHB0LTAgcGItMTVcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJtYi0xMyB0ZXh0LWNlbnRlclwiPlxyXG4gICAgICA8aDEgY2xhc3M9XCJtYi0zXCI+IHt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkFkZFwiKX19IHt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIlVzZXJcIil9fSA8L2gxPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8QkJTRi1Gb3JtIFtvcHRpb25zXT1cImFkZFVzZXJzVG9QZXJtaXNzaW9uU2V0Rm9ybU9wdGlvbnNcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTJcIj5cclxuICAgICAgICAgIDxCQlNGLVRhZ3NJbnB1dCBbb3B0aW9uc109XCJ1c2VyQXV0b0NvbXBsZXRlXCIgW2dyb3VwXT1cImFkZFVzZXJzVG9QZXJtaXNzaW9uU2V0Rm9ybVwiPlxyXG4gICAgICAgICAgPC9CQlNGLVRhZ3NJbnB1dD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWNlbnRlciBwdC03XCI+XHJcbiAgICAgICAgPGJ1dHRvbiAjQ2xvc2VBZGRVc2Vyc1RvRGVwYXJ0bWVudCBpZD1cIkNsb3NlQWRkVXNlcnNUb0RlcGFydG1lbnRcIiB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1saWdodCBidG4tc20gIG1lLTNcIiBkYXRhLWRpc21pc3M9XCJtb2RhbFwiIChjbGljayk9XCJtb2RhbC5kaXNtaXNzKClcIj5cclxuICAgICAgICAgIHt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkNhbmNlbExhYmVsXCIpfX1cclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICA8YnV0dG9uIHR5cGU9XCJzdWJtaXRcIiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBidG4tc21cIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJTYXZlTGFiZWxcIil9fTwvYnV0dG9uPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvQkJTRi1Gb3JtPlxyXG4gIDwvZGl2PlxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuPCEtLWRlbGV0ZSBNb2RhbC0tPlxyXG48QkJTRi1Db25maXJtYXRpb25Nb2RhbCAqbmdJZj1cImRlbGV0ZUNvbnRyb2xMb2FkZWRcIiBbb3B0aW9uc109XCJkZWxldGVDb25maXJtYXRpb25PcHRpb25zXCIgaWQ9XCJDb25maXJtYXRpb25Nb2RhbENvbnRyb2xcIlxyXG4gICNDb25maXJtYXRpb25Nb2RhbENvbnRyb2w+PC9CQlNGLUNvbmZpcm1hdGlvbk1vZGFsPlxyXG5cclxuXHJcblxyXG5cclxuIl19
|