@bnsights/bbsf-admin-portal 1.0.0 → 1.0.5
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.5.tgz +0 -0
- package/bundles/bnsights-bbsf-admin-portal.umd.js +19694 -20386
- 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.service.js +1 -2
- package/esm2015/lib/Pages/departments/department/department.component.js +59 -98
- package/esm2015/lib/Pages/departments/department-info/department-info.component.js +85 -94
- package/esm2015/lib/Pages/departments/departments.module.js +4 -1
- 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 +219 -254
- 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 +5 -8
- 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/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/masterlayout-routing.module.js +5 -4
- package/esm2015/lib/masterlayout.component.js +22 -32
- package/esm2015/lib/masterlayout.module.js +25 -19
- package/fesm2015/bnsights-bbsf-admin-portal.js +17295 -17401
- 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/departments/department/department.component.d.ts +19 -15
- 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 +13 -12
- 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/ConfigurationsService.service.d.ts +7 -8
- package/lib/Pages/shared/Services/DepartmentService.service.d.ts +2 -2
- package/lib/Pages/shared/Services/EmailHeaderAndFooterTemplateService.Service.d.ts +5 -5
- package/lib/Pages/shared/Services/HelpCenterService.service.d.ts +2 -1
- package/lib/Pages/shared/Services/ImpersonationRuleService.service.d.ts +5 -5
- package/lib/Pages/shared/Services/LicenseService.service.d.ts +2 -2
- 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 +2 -2
- 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/localizationsService.service .d.ts +12 -11
- package/lib/Pages/shared/Services/provider.service.d.ts +1 -1
- package/lib/Pages/shared/Services/userService.service.d.ts +2 -0
- 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/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/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/bnsights-bbsf-admin-portal-0.0.1.tgz +0 -0
- package/bnsights-bbsf-admin-portal-1.0.0.tgz +0 -0
- 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,7 +1,7 @@
|
|
|
1
1
|
import { __awaiter } from "tslib";
|
|
2
2
|
import { Component, ViewChild } from '@angular/core';
|
|
3
3
|
import { FormGroup } from '@angular/forms';
|
|
4
|
-
import { Country, CustomValidation, FilterType, InputType, MultiLingualTextBoxOptions, PhoneOptions, TextBoxOptions, ToggleSlideOptions, EnglishArabicDTO } from '@bnsights/bbsf-controls';
|
|
4
|
+
import { Country, CustomValidation, FilterType, InputType, MultiLingualTextBoxOptions, PhoneOptions, TextBoxOptions, ToggleSlideOptions, EnglishArabicDTO, FormOptions, PagingActionMode } from '@bnsights/bbsf-controls';
|
|
5
5
|
import { ControlLayout, DropdownOptions, FilterItem, PagingOptions } from '@bnsights/bbsf-controls';
|
|
6
6
|
import { AddUserModel } from '../shared/models/UserModels/AddUserModel';
|
|
7
7
|
import { EditUserModel } from '../shared/models/UserModels/EditUserModel';
|
|
@@ -22,7 +22,7 @@ import * as i10 from "@angular/common";
|
|
|
22
22
|
import * as i11 from "@angular/forms";
|
|
23
23
|
import * as i12 from "ng-inline-svg";
|
|
24
24
|
export class UsersComponent {
|
|
25
|
-
constructor(authService, utilityService, bbsfTranslateService, environmentService, pageInfoService, userService, modalService) {
|
|
25
|
+
constructor(authService, utilityService, bbsfTranslateService, environmentService, pageInfoService, userService, modalService, requestHandlerService) {
|
|
26
26
|
this.authService = authService;
|
|
27
27
|
this.utilityService = utilityService;
|
|
28
28
|
this.bbsfTranslateService = bbsfTranslateService;
|
|
@@ -30,42 +30,39 @@ export class UsersComponent {
|
|
|
30
30
|
this.pageInfoService = pageInfoService;
|
|
31
31
|
this.userService = userService;
|
|
32
32
|
this.modalService = modalService;
|
|
33
|
-
this.
|
|
34
|
-
|
|
35
|
-
this.ShowToolbar = true;
|
|
36
|
-
this.ShowbreadCrumb = false;
|
|
33
|
+
this.requestHandlerService = requestHandlerService;
|
|
34
|
+
//Page requirements
|
|
37
35
|
this.ShowPageContent = false;
|
|
36
|
+
this.ApiUrl = "/api/admin/Users/";
|
|
37
|
+
//Filter and paging components
|
|
38
|
+
this.UsersForm = new FormGroup({});
|
|
39
|
+
this.IsFilterLoaded = false;
|
|
40
|
+
this.IsFilterDataLoaded = false;
|
|
41
|
+
this.UserPagingResult = [];
|
|
42
|
+
this.clientSidePagingResult = [];
|
|
43
|
+
//Required lists
|
|
38
44
|
this.SelectedUserList = [];
|
|
39
45
|
this.permissionSetList = [];
|
|
40
46
|
this.accountStatusList = [];
|
|
41
47
|
this.lockedStatusList = [];
|
|
42
48
|
this.departmentsList = [];
|
|
43
|
-
this.activityStatusList = [];
|
|
44
|
-
this.filterForm = new FormGroup({});
|
|
45
|
-
this.UsersForm = new FormGroup({});
|
|
46
|
-
this.showFilter = false;
|
|
47
|
-
this.UserPagingResult = [];
|
|
48
|
-
this.IsFilterLoaded = false;
|
|
49
|
-
this.IsFilterDataLoaded = false;
|
|
50
49
|
//Add Model Controls
|
|
51
50
|
this.AddUserForm = new FormGroup({});
|
|
51
|
+
this.AddUserFormOptions = new FormOptions;
|
|
52
52
|
//Edit Model Controls
|
|
53
53
|
this.EditUserForm = new FormGroup({});
|
|
54
|
+
this.EditUserFormOptions = new FormOptions;
|
|
54
55
|
//Deactivate/Activate User Model Controls
|
|
55
56
|
this.ShowActivateModelData = false;
|
|
56
|
-
this.
|
|
57
|
-
this.DeActivatUserList = [];
|
|
57
|
+
this.ActivatorDeactivateUserList = [];
|
|
58
58
|
//Reset Password User Model Controls
|
|
59
59
|
this.ResetPasswordUserList = [];
|
|
60
|
-
this.OpenResetPasswordUserModal = false;
|
|
61
60
|
//set Password User Model Controls
|
|
62
61
|
this.SetUserPasswordForm = new FormGroup({});
|
|
63
|
-
this.
|
|
62
|
+
this.SetUserPasswordFormOptions = new FormOptions;
|
|
64
63
|
this.customValidation = new CustomValidation();
|
|
65
64
|
this.setPasswordUserList = [];
|
|
66
|
-
//
|
|
67
|
-
this.UserList = [];
|
|
68
|
-
this.OpenSendActivationEmailModal = false;
|
|
65
|
+
//Confirmation Model Controls
|
|
69
66
|
this.ConfirmationModalType = 0;
|
|
70
67
|
this.ConfirmationMessage = "";
|
|
71
68
|
//Users selection
|
|
@@ -78,8 +75,79 @@ export class UsersComponent {
|
|
|
78
75
|
this.showSendEmailBtn = false;
|
|
79
76
|
this.showGeneralBtns = true;
|
|
80
77
|
this.allSelected = false;
|
|
81
|
-
this.
|
|
82
|
-
|
|
78
|
+
this.getAddUserModel = () => {
|
|
79
|
+
let paramArray = [];
|
|
80
|
+
let ResultModel = this.AddUserForm.value;
|
|
81
|
+
let AddModel = new AddUserModel();
|
|
82
|
+
AddModel.Username = ResultModel.AddUsername;
|
|
83
|
+
AddModel.NameAR = ResultModel.AddName.ArabicValue;
|
|
84
|
+
AddModel.NameEN = ResultModel.AddName.EnglishValue;
|
|
85
|
+
AddModel.SamAccount = ResultModel.AddSamAccount;
|
|
86
|
+
AddModel.OrganizationID = 1;
|
|
87
|
+
if (ResultModel.AddDepartmentID != undefined)
|
|
88
|
+
AddModel.DepartmentID = Number(ResultModel.AddDepartmentID);
|
|
89
|
+
let PermissionSets = ResultModel.AddPermissionSets;
|
|
90
|
+
AddModel.PermissionSets = PermissionSets.map((i) => Number(i));
|
|
91
|
+
AddModel.SendActivationMail = ResultModel.AddSendActivationMail;
|
|
92
|
+
let internationalNumber = null;
|
|
93
|
+
if (ResultModel.AddMobileNumber != null) {
|
|
94
|
+
internationalNumber = ResultModel.AddMobileNumber.internationalNumber;
|
|
95
|
+
internationalNumber = internationalNumber.replace(/\s/g, "");
|
|
96
|
+
}
|
|
97
|
+
AddModel.PhoneInputMobile = internationalNumber;
|
|
98
|
+
paramArray.push(AddModel);
|
|
99
|
+
return paramArray;
|
|
100
|
+
};
|
|
101
|
+
this.getAddUserFunction = (AddModel) => {
|
|
102
|
+
return this.userService.AddUser(AddModel);
|
|
103
|
+
};
|
|
104
|
+
this.getEditUserModel = () => {
|
|
105
|
+
let paramArray = [];
|
|
106
|
+
let ResultModel = this.EditUserForm.value;
|
|
107
|
+
let EditModel = new EditUserModel();
|
|
108
|
+
EditModel.ID = this.UserId;
|
|
109
|
+
EditModel.Username = ResultModel.EditUsername;
|
|
110
|
+
EditModel.Email = ResultModel.EditEmail;
|
|
111
|
+
EditModel.NameAR = ResultModel.EditName.ArabicValue;
|
|
112
|
+
EditModel.NameEN = ResultModel.EditName.EnglishValue;
|
|
113
|
+
EditModel.SamAccount = ResultModel.EditSamAccount;
|
|
114
|
+
if (ResultModel.EditDepartmentID != undefined)
|
|
115
|
+
EditModel.DepartmentID = Number(ResultModel.EditDepartmentID);
|
|
116
|
+
let PermissionSets = ResultModel.EditPermissionSets;
|
|
117
|
+
EditModel.PermissionIDs = PermissionSets.map((i) => Number(i));
|
|
118
|
+
let internationalNumber = null;
|
|
119
|
+
if (ResultModel.EditMobileNumber != null) {
|
|
120
|
+
internationalNumber = ResultModel.EditMobileNumber.internationalNumber;
|
|
121
|
+
internationalNumber = internationalNumber.replace(/\s/g, "");
|
|
122
|
+
}
|
|
123
|
+
EditModel.Mobile = internationalNumber;
|
|
124
|
+
paramArray.push(EditModel);
|
|
125
|
+
return paramArray;
|
|
126
|
+
};
|
|
127
|
+
this.getEditUserFunction = (EditModel) => {
|
|
128
|
+
return this.userService.EditUser(EditModel);
|
|
129
|
+
};
|
|
130
|
+
this.getSetPAsswordModel = () => {
|
|
131
|
+
debugger;
|
|
132
|
+
let paramArray = [];
|
|
133
|
+
let ResultModel = this.SetUserPasswordForm.value;
|
|
134
|
+
let updatesUsers = [];
|
|
135
|
+
for (let index = 0; index < this.setPasswordUserList.length; index++) {
|
|
136
|
+
var element = this.setPasswordUserList[index];
|
|
137
|
+
element.Password = ResultModel.Password;
|
|
138
|
+
element.PasswordConfirmation = ResultModel.PasswordConfirmation;
|
|
139
|
+
updatesUsers.push(element);
|
|
140
|
+
}
|
|
141
|
+
paramArray.push(updatesUsers);
|
|
142
|
+
return paramArray;
|
|
143
|
+
};
|
|
144
|
+
this.getSetPasswordFunction = (passwordListModel) => {
|
|
145
|
+
return this.userService.SetUsersPassword(passwordListModel);
|
|
146
|
+
};
|
|
147
|
+
this.onSubmitSuccess = (result) => {
|
|
148
|
+
this.resetUsersCount();
|
|
149
|
+
this.disableButtons();
|
|
150
|
+
};
|
|
83
151
|
}
|
|
84
152
|
ngOnInit() {
|
|
85
153
|
return __awaiter(this, void 0, void 0, function* () {
|
|
@@ -93,36 +161,128 @@ export class UsersComponent {
|
|
|
93
161
|
this.pageInfoService.calculateBreadcrumbs();
|
|
94
162
|
this.bbsfTranslateService.onLangChange.subscribe((event) => {
|
|
95
163
|
this.ShowPageContent = false;
|
|
96
|
-
this.language = event.lang;
|
|
97
164
|
this.ngOnInit();
|
|
98
165
|
});
|
|
99
|
-
this.language = yield this.utilityService.getCurrentLanguage();
|
|
100
166
|
this.ProductionMode = this.environmentService.getProductionMode();
|
|
101
167
|
this.initializePage();
|
|
102
168
|
});
|
|
103
169
|
}
|
|
104
|
-
|
|
105
|
-
let element = this.input;
|
|
106
|
-
element.ReinitializePaging();
|
|
107
|
-
this.resetUsersCount();
|
|
108
|
-
this.disableButtons();
|
|
109
|
-
this.allSelected = false;
|
|
110
|
-
}
|
|
111
|
-
UpdateUserPaging() {
|
|
112
|
-
let element = this.input;
|
|
113
|
-
element.UpdatePaging();
|
|
114
|
-
this.resetUsersCount();
|
|
115
|
-
this.disableButtons();
|
|
116
|
-
this.allSelected = false;
|
|
117
|
-
}
|
|
170
|
+
//Paging functions
|
|
118
171
|
setUsersListResult(result) {
|
|
119
172
|
this.UserPagingResult = result;
|
|
173
|
+
this.clientSidePagingResult = result;
|
|
120
174
|
this.ShowPageContent = true;
|
|
121
175
|
this.resetUsersCount();
|
|
122
176
|
this.disableButtons();
|
|
123
177
|
this.allSelected = false;
|
|
124
178
|
this.utilityService.stopBlockUI();
|
|
125
179
|
}
|
|
180
|
+
resetFilters() {
|
|
181
|
+
this.UsersForm.controls["permissionsets"].setValue([]);
|
|
182
|
+
this.UsersForm.controls["accountstatus"].setValue([]);
|
|
183
|
+
this.UsersForm.controls["lockedstatus"].setValue([]);
|
|
184
|
+
this.UsersForm.controls["departments"].setValue([]);
|
|
185
|
+
this.UsersForm.controls["searchTextBox"].setValue(null);
|
|
186
|
+
let element = this.pagingElement;
|
|
187
|
+
element.ReinitializePaging();
|
|
188
|
+
}
|
|
189
|
+
searchClientSide(searchValue) {
|
|
190
|
+
if (searchValue)
|
|
191
|
+
this.clientSidePagingResult = this.clientSidePagingResult.filter(function (item) {
|
|
192
|
+
return (item.name.english.toLowerCase().includes(searchValue.toLowerCase())
|
|
193
|
+
|| item.name.arabic.toLowerCase().includes(searchValue.toLowerCase())
|
|
194
|
+
|| item.username.toLowerCase().includes(searchValue.toLowerCase()));
|
|
195
|
+
});
|
|
196
|
+
else
|
|
197
|
+
this.clientSidePagingResult = this.UserPagingResult;
|
|
198
|
+
}
|
|
199
|
+
//Initialize filters and paging
|
|
200
|
+
initializePage() {
|
|
201
|
+
// Permission Sets init
|
|
202
|
+
this.permissionSetsOptions = new DropdownOptions();
|
|
203
|
+
this.permissionSetsOptions.Name = "permissionsets";
|
|
204
|
+
this.permissionSetsOptions.LabelKey = "PermissionSets";
|
|
205
|
+
this.permissionSetsOptions.SingleSelection = true;
|
|
206
|
+
this.permissionSetsOptions.AllowSearchFilter = true;
|
|
207
|
+
this.permissionSetsOptions.Placeholder = "";
|
|
208
|
+
// Account Status init
|
|
209
|
+
this.accountStatusOptions = new DropdownOptions();
|
|
210
|
+
this.accountStatusOptions.Name = "accountstatus";
|
|
211
|
+
this.accountStatusOptions.LabelKey = "AccountStatus";
|
|
212
|
+
this.accountStatusOptions.SingleSelection = true;
|
|
213
|
+
// Locked Status init
|
|
214
|
+
this.lockedStatusOptions = new DropdownOptions();
|
|
215
|
+
this.lockedStatusOptions.Name = "lockedstatus";
|
|
216
|
+
this.lockedStatusOptions.LabelKey = "LockedStatus";
|
|
217
|
+
this.lockedStatusOptions.SingleSelection = true;
|
|
218
|
+
// departments init
|
|
219
|
+
this.departmentsOptions = new DropdownOptions();
|
|
220
|
+
this.departmentsOptions.Name = "departments";
|
|
221
|
+
this.departmentsOptions.LabelKey = "Departments";
|
|
222
|
+
this.departmentsOptions.SingleSelection = false;
|
|
223
|
+
this.departmentsOptions.AllowSearchFilter = true;
|
|
224
|
+
// TextBox init
|
|
225
|
+
this.searchTextBox = new TextBoxOptions();
|
|
226
|
+
this.searchTextBox.Name = "searchTextBox";
|
|
227
|
+
this.searchTextBox.HideLabel = true;
|
|
228
|
+
this.searchTextBox.Type = InputType.Text;
|
|
229
|
+
this.searchTextBox.Placeholder = this.utilityService.getResourceValue("SearchByNameOrEmail");
|
|
230
|
+
//Filters
|
|
231
|
+
this.TextInputFilter = new FilterItem();
|
|
232
|
+
this.TextInputFilter.FormControlName = "searchTextBox";
|
|
233
|
+
this.TextInputFilter.ActionParameterName = "nameFilter";
|
|
234
|
+
this.TextInputFilter.IsFormControl = true;
|
|
235
|
+
this.TextInputFilter.FilterType = FilterType.TextBox;
|
|
236
|
+
this.permissionSetsFilter = new FilterItem();
|
|
237
|
+
this.permissionSetsFilter.FormControlName = "permissionsets";
|
|
238
|
+
this.permissionSetsFilter.ActionParameterName = "permissionIds";
|
|
239
|
+
this.permissionSetsFilter.IsFormControl = true;
|
|
240
|
+
this.permissionSetsFilter.FilterType = FilterType.DropdownList;
|
|
241
|
+
this.accountStatusFilter = new FilterItem();
|
|
242
|
+
this.accountStatusFilter.FormControlName = "accountstatus";
|
|
243
|
+
this.accountStatusFilter.ActionParameterName = "accountStatusIDs";
|
|
244
|
+
this.accountStatusFilter.IsFormControl = true;
|
|
245
|
+
this.accountStatusFilter.FilterType = FilterType.DropdownList;
|
|
246
|
+
this.lockedStatusFilter = new FilterItem();
|
|
247
|
+
this.lockedStatusFilter.FormControlName = "lockedstatus";
|
|
248
|
+
this.lockedStatusFilter.ActionParameterName = "lockedStatusIds";
|
|
249
|
+
this.lockedStatusFilter.IsFormControl = true;
|
|
250
|
+
this.lockedStatusFilter.FilterType = FilterType.DropdownList;
|
|
251
|
+
this.departmentsFilter = new FilterItem();
|
|
252
|
+
this.departmentsFilter.FormControlName = "departments";
|
|
253
|
+
this.departmentsFilter.ActionParameterName = "departmentIds";
|
|
254
|
+
this.departmentsFilter.IsFormControl = true;
|
|
255
|
+
this.departmentsFilter.FilterType = FilterType.DropdownList;
|
|
256
|
+
this.UserPaging = new PagingOptions();
|
|
257
|
+
this.UserPaging.ActionPostURL = this.ApiUrl + 'GetUsersByFilter';
|
|
258
|
+
this.UserPaging.OnKeyPressFiltersControlNames = ["searchTextBox"];
|
|
259
|
+
this.UserPaging.DropdownFiltersControlNames = ["permissionsets", "accountstatus", "lockedstatus", "departments"];
|
|
260
|
+
this.UserPaging.Filters = [this.permissionSetsFilter, this.lockedStatusFilter, this.accountStatusFilter, this.departmentsFilter, this.TextInputFilter];
|
|
261
|
+
this.UserPaging.ValidationToken = this.authService.authorizationHeaderValue();
|
|
262
|
+
this.IsFilterLoaded = true;
|
|
263
|
+
}
|
|
264
|
+
//Load lists for filters
|
|
265
|
+
loadLists() {
|
|
266
|
+
if (!this.IsFilterDataLoaded) {
|
|
267
|
+
this.userService.Loaddropdowns().subscribe((result) => {
|
|
268
|
+
let DropdownsResponseModel = result;
|
|
269
|
+
this.permissionSetList = DropdownsResponseModel.permessionsets;
|
|
270
|
+
this.accountStatusList = DropdownsResponseModel.accountStatus;
|
|
271
|
+
this.lockedStatusList = DropdownsResponseModel.lockedStatus;
|
|
272
|
+
this.departmentsList = DropdownsResponseModel.departments;
|
|
273
|
+
let permissionSetElement = this.permissionSetDDL;
|
|
274
|
+
let accountStatusElement = this.accountStatusDDL;
|
|
275
|
+
let lockedStatusElement = this.lockedStatusDDL;
|
|
276
|
+
let departmentsElement = this.departmentsDDL;
|
|
277
|
+
permissionSetElement.UpdateDataSource(this.permissionSetList);
|
|
278
|
+
accountStatusElement.UpdateDataSource(this.accountStatusList);
|
|
279
|
+
lockedStatusElement.UpdateDataSource(this.lockedStatusList);
|
|
280
|
+
departmentsElement.UpdateDataSource(this.departmentsList);
|
|
281
|
+
this.IsFilterDataLoaded = true;
|
|
282
|
+
});
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
//Users checkboxes selection functions
|
|
126
286
|
selectAllUserList(event, Users) {
|
|
127
287
|
if (this.UserPagingResult == null) {
|
|
128
288
|
return;
|
|
@@ -171,6 +331,18 @@ export class UsersComponent {
|
|
|
171
331
|
}
|
|
172
332
|
this.enableButtons();
|
|
173
333
|
}
|
|
334
|
+
deleteUserFromList(user) {
|
|
335
|
+
this.UserPagingResult.find(u => u.id === user.id).selected = false;
|
|
336
|
+
this.SelectedUserList = this.SelectedUserList.filter(item => item != user);
|
|
337
|
+
if (user.isActive)
|
|
338
|
+
this.activatedUsersSelected -= 1;
|
|
339
|
+
else
|
|
340
|
+
this.deActivatedUsersSelected -= 1;
|
|
341
|
+
this.enableButtons();
|
|
342
|
+
if (this.SelectedUserList.length <= 0) {
|
|
343
|
+
this.modalService.dismissAll();
|
|
344
|
+
}
|
|
345
|
+
}
|
|
174
346
|
enableButtons() {
|
|
175
347
|
//Reset all btns
|
|
176
348
|
this.disableButtons();
|
|
@@ -211,248 +383,133 @@ export class UsersComponent {
|
|
|
211
383
|
this.deActivatedUsersSelected = 0;
|
|
212
384
|
this.UserPagingResult.forEach(u => u.selected = false);
|
|
213
385
|
}
|
|
214
|
-
|
|
215
|
-
if (this.showFilter === false) {
|
|
216
|
-
this.showFilter = true;
|
|
217
|
-
}
|
|
218
|
-
else {
|
|
219
|
-
this.showFilter = false;
|
|
220
|
-
}
|
|
221
|
-
}
|
|
222
|
-
loadLists() {
|
|
223
|
-
if (!this.IsFilterDataLoaded) {
|
|
224
|
-
this.userService.Loaddropdowns().subscribe((result) => {
|
|
225
|
-
let DropdownsResponseModel = result;
|
|
226
|
-
this.permissionSetList = DropdownsResponseModel.permessionsets;
|
|
227
|
-
this.accountStatusList = DropdownsResponseModel.accountStatus;
|
|
228
|
-
this.lockedStatusList = DropdownsResponseModel.lockedStatus;
|
|
229
|
-
this.departmentsList = DropdownsResponseModel.departments;
|
|
230
|
-
this.activityStatusList = DropdownsResponseModel.accountStatus;
|
|
231
|
-
let permissionSetElement = this.permissionSetDDL;
|
|
232
|
-
let accountStatusElement = this.accountStatusDDL;
|
|
233
|
-
let lockedStatusElement = this.lockedStatusDDL;
|
|
234
|
-
let departmentsElement = this.departmentsDDL;
|
|
235
|
-
permissionSetElement.UpdateDataSource(this.permissionSetList);
|
|
236
|
-
accountStatusElement.UpdateDataSource(this.accountStatusList);
|
|
237
|
-
lockedStatusElement.UpdateDataSource(this.lockedStatusList);
|
|
238
|
-
departmentsElement.UpdateDataSource(this.departmentsList);
|
|
239
|
-
this.IsFilterDataLoaded = true;
|
|
240
|
-
});
|
|
241
|
-
}
|
|
242
|
-
}
|
|
243
|
-
initializePage() {
|
|
244
|
-
// Permission Sets Init
|
|
245
|
-
this.permissionSetsOptions = new DropdownOptions();
|
|
246
|
-
this.permissionSetsOptions.Name = "permissionsets";
|
|
247
|
-
this.permissionSetsOptions.LabelKey = "PermissionSets";
|
|
248
|
-
this.permissionSetsOptions.SingleSelection = true;
|
|
249
|
-
this.permissionSetsOptions.AllowSearchFilter = true;
|
|
250
|
-
this.permissionSetsOptions.Placeholder = "";
|
|
251
|
-
// Account Status Init
|
|
252
|
-
this.accountStatusOptions = new DropdownOptions();
|
|
253
|
-
this.accountStatusOptions.Name = "accountstatus";
|
|
254
|
-
this.accountStatusOptions.LabelKey = "AccountStatus";
|
|
255
|
-
this.accountStatusOptions.SingleSelection = true;
|
|
256
|
-
// Locked Status Init
|
|
257
|
-
this.lockedStatusOptions = new DropdownOptions();
|
|
258
|
-
this.lockedStatusOptions.Name = "lockedstatus";
|
|
259
|
-
this.lockedStatusOptions.LabelKey = "LockedStatus";
|
|
260
|
-
this.lockedStatusOptions.SingleSelection = true;
|
|
261
|
-
// departments inti
|
|
262
|
-
this.departmentsOptions = new DropdownOptions();
|
|
263
|
-
this.departmentsOptions.Name = "departments";
|
|
264
|
-
this.departmentsOptions.LabelKey = "Departments";
|
|
265
|
-
this.departmentsOptions.SingleSelection = false;
|
|
266
|
-
this.departmentsOptions.AllowSearchFilter = true;
|
|
267
|
-
// TextBox inti
|
|
268
|
-
this.searchTextBox = new TextBoxOptions();
|
|
269
|
-
this.searchTextBox.Name = "searchTextBox";
|
|
270
|
-
this.searchTextBox.HideLabel = true;
|
|
271
|
-
this.searchTextBox.Type = InputType.Text;
|
|
272
|
-
this.searchTextBox.Placeholder = this.utilityService.getResourceValue("SearchByNameOrEmail");
|
|
273
|
-
this.permissionSetsFilter = new FilterItem();
|
|
274
|
-
this.permissionSetsFilter.FormControlName = "permissionsets";
|
|
275
|
-
this.permissionSetsFilter.ActionParameterName = "permissionIds";
|
|
276
|
-
this.permissionSetsFilter.IsFormControl = true;
|
|
277
|
-
this.permissionSetsFilter.FilterType = FilterType.DropdownList;
|
|
278
|
-
this.accountStatusFilter = new FilterItem();
|
|
279
|
-
this.accountStatusFilter.FormControlName = "accountstatus";
|
|
280
|
-
this.accountStatusFilter.ActionParameterName = "accountStatusIDs";
|
|
281
|
-
this.accountStatusFilter.IsFormControl = true;
|
|
282
|
-
this.accountStatusFilter.FilterType = FilterType.DropdownList;
|
|
283
|
-
this.lockedStatusFilter = new FilterItem();
|
|
284
|
-
this.lockedStatusFilter.FormControlName = "lockedstatus";
|
|
285
|
-
this.lockedStatusFilter.ActionParameterName = "lockedStatusIds";
|
|
286
|
-
this.lockedStatusFilter.IsFormControl = true;
|
|
287
|
-
this.lockedStatusFilter.FilterType = FilterType.DropdownList;
|
|
288
|
-
this.departmentsFilter = new FilterItem();
|
|
289
|
-
this.departmentsFilter.FormControlName = "departments";
|
|
290
|
-
this.departmentsFilter.ActionParameterName = "departmentIds";
|
|
291
|
-
this.departmentsFilter.IsFormControl = true;
|
|
292
|
-
this.departmentsFilter.FilterType = FilterType.DropdownList;
|
|
293
|
-
this.TextInputFilter = new FilterItem();
|
|
294
|
-
this.TextInputFilter.FormControlName = "searchTextBox";
|
|
295
|
-
this.TextInputFilter.ActionParameterName = "nameFilter";
|
|
296
|
-
this.TextInputFilter.IsFormControl = true;
|
|
297
|
-
this.TextInputFilter.FilterType = FilterType.TextBox;
|
|
298
|
-
this.UserPaging = new PagingOptions();
|
|
299
|
-
this.UserPaging.ActionPostURL = this.environmentService.getApiUrl() + this.ApiUrl + 'GetUsersByFilter';
|
|
300
|
-
this.UserPaging.OnKeyPressFiltersControlNames = ["searchTextBox"];
|
|
301
|
-
this.UserPaging.DropdownFiltersControlNames = ["permissionsets", "accountstatus", "lockedstatus", "departments"];
|
|
302
|
-
this.UserPaging.Filters = [this.permissionSetsFilter, this.lockedStatusFilter, this.accountStatusFilter, this.departmentsFilter, this.TextInputFilter];
|
|
303
|
-
this.UserPaging.ValidationToken = this.authService.authorizationHeaderValue();
|
|
304
|
-
this.IsFilterLoaded = true;
|
|
305
|
-
}
|
|
306
|
-
resetFilters() {
|
|
307
|
-
this.UsersForm.controls["permissionsets"].setValue([]);
|
|
308
|
-
this.UsersForm.controls["accountstatus"].setValue([]);
|
|
309
|
-
this.UsersForm.controls["lockedstatus"].setValue([]);
|
|
310
|
-
this.UsersForm.controls["departments"].setValue([]);
|
|
311
|
-
this.UsersForm.controls["searchTextBox"].setValue(null);
|
|
312
|
-
let element = this.input;
|
|
313
|
-
element.ReinitializePaging();
|
|
314
|
-
}
|
|
386
|
+
//Add User
|
|
315
387
|
showAddUserModal(addUserModal) {
|
|
316
388
|
this.utilityService.startBlockUI();
|
|
317
|
-
this.userService.
|
|
389
|
+
this.userService.LoadAddDropdowns().subscribe((result) => {
|
|
318
390
|
let DropdownsResponseModel = result;
|
|
391
|
+
//Set required lists
|
|
319
392
|
this.permissionSetList = DropdownsResponseModel.permessionsets;
|
|
320
393
|
this.departmentsList = DropdownsResponseModel.departments;
|
|
321
394
|
this.AddUserForm = new FormGroup({});
|
|
322
|
-
this.
|
|
323
|
-
this.
|
|
324
|
-
this.
|
|
325
|
-
this.
|
|
326
|
-
this.
|
|
327
|
-
this.
|
|
328
|
-
this.
|
|
329
|
-
this.
|
|
330
|
-
this.
|
|
331
|
-
this.
|
|
332
|
-
this.
|
|
333
|
-
this.
|
|
334
|
-
this.
|
|
335
|
-
this.
|
|
336
|
-
this.
|
|
337
|
-
this.
|
|
338
|
-
this.
|
|
339
|
-
this.
|
|
340
|
-
this.
|
|
341
|
-
this.
|
|
342
|
-
this.
|
|
343
|
-
this.
|
|
344
|
-
this.
|
|
345
|
-
this.
|
|
346
|
-
this.
|
|
347
|
-
this.
|
|
348
|
-
this.
|
|
349
|
-
this.
|
|
350
|
-
this.
|
|
351
|
-
this.
|
|
352
|
-
this.
|
|
353
|
-
this.
|
|
354
|
-
this.
|
|
355
|
-
this.
|
|
356
|
-
this.
|
|
357
|
-
this.
|
|
358
|
-
this.
|
|
359
|
-
this.
|
|
360
|
-
this.
|
|
361
|
-
this.
|
|
362
|
-
this.
|
|
363
|
-
this.
|
|
364
|
-
this.
|
|
365
|
-
this.
|
|
366
|
-
this.
|
|
395
|
+
this.AddUserFormOptions = new FormOptions();
|
|
396
|
+
this.AddUserFormOptions.FormGroup = this.AddUserForm;
|
|
397
|
+
this.AddUserFormOptions.GetModelFunction = this.getAddUserModel;
|
|
398
|
+
this.AddUserFormOptions.ServiceSubmitFunction = this.getAddUserFunction;
|
|
399
|
+
this.AddUserFormOptions.PagingReference = this.pagingElement;
|
|
400
|
+
this.AddName = new MultiLingualTextBoxOptions();
|
|
401
|
+
this.AddName.Name = "AddName";
|
|
402
|
+
this.AddName.ArabicLabelKey = "NameInArabic";
|
|
403
|
+
this.AddName.EnglishLabelKey = "NameInEnglish";
|
|
404
|
+
this.AddName.IsRequired = true;
|
|
405
|
+
this.AddName.Value = null;
|
|
406
|
+
this.AddMobileNumber = new PhoneOptions();
|
|
407
|
+
this.AddMobileNumber.Value = null;
|
|
408
|
+
this.AddMobileNumber.Name = "AddMobileNumber";
|
|
409
|
+
this.AddMobileNumber.LabelKey = "MobileNumber";
|
|
410
|
+
this.AddMobileNumber.ExtraClasses = "form-control bnsights-control";
|
|
411
|
+
this.AddMobileNumber.SelectedCountryISO = Country.UnitedArabEmirates;
|
|
412
|
+
this.AddMobileNumber.PhoneValidation = true;
|
|
413
|
+
this.AddMobileNumber.AllowSearch = true;
|
|
414
|
+
this.AddUsername = new TextBoxOptions();
|
|
415
|
+
this.AddUsername.Value = null;
|
|
416
|
+
this.AddUsername.Name = "AddUsername";
|
|
417
|
+
this.AddUsername.LabelKey = "Username";
|
|
418
|
+
this.AddUsername.Type = InputType.Email;
|
|
419
|
+
this.AddUsername.IsRequired = true;
|
|
420
|
+
this.AddSamAccount = new TextBoxOptions();
|
|
421
|
+
this.AddSamAccount.Value = null;
|
|
422
|
+
this.AddSamAccount.Name = "AddSamAccount";
|
|
423
|
+
this.AddSamAccount.LabelKey = "SamAccount";
|
|
424
|
+
this.AddSamAccount.Type = InputType.Text;
|
|
425
|
+
this.AddUserDepartment = new DropdownOptions();
|
|
426
|
+
this.AddUserDepartment.Name = "AddDepartmentID";
|
|
427
|
+
this.AddUserDepartment.LabelKey = "Department";
|
|
428
|
+
this.AddUserDepartment.SelectedItems = null;
|
|
429
|
+
this.AddUserDepartment.DataSource = this.departmentsList;
|
|
430
|
+
this.AddUserDepartment.SingleSelection = false;
|
|
431
|
+
this.AddUserDepartment.AllowSearchFilter = true;
|
|
432
|
+
this.AddSendActivationEmail = new ToggleSlideOptions();
|
|
433
|
+
this.AddSendActivationEmail.Name = "AddSendActivationMail";
|
|
434
|
+
this.AddSendActivationEmail.LabelKey = "SendActivationEmail";
|
|
435
|
+
this.AddSendActivationEmail.Value = false;
|
|
436
|
+
this.AddSendActivationEmail.ViewType = ControlLayout.Horizontal;
|
|
437
|
+
this.AddUserPermissions = new DropdownOptions();
|
|
438
|
+
this.AddUserPermissions.Name = "AddPermissionSets";
|
|
439
|
+
this.AddUserPermissions.LabelKey = "PermissionSets";
|
|
440
|
+
this.AddUserPermissions.SelectedItems = null;
|
|
441
|
+
this.AddUserPermissions.DataSource = this.permissionSetList;
|
|
442
|
+
this.AddUserPermissions.SingleSelection = false;
|
|
443
|
+
this.AddUserPermissions.AllowSearchFilter = true;
|
|
444
|
+
this.AddUserPermissions.IsRequired = true;
|
|
367
445
|
this.modalService.open(addUserModal);
|
|
368
446
|
this.utilityService.stopBlockUI();
|
|
369
447
|
});
|
|
370
448
|
}
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
return;
|
|
374
|
-
}
|
|
375
|
-
else {
|
|
376
|
-
let ResultModel = this.AddUserForm.value;
|
|
377
|
-
let UserModel = new AddUserModel();
|
|
378
|
-
UserModel.Username = ResultModel.Username;
|
|
379
|
-
UserModel.NameAR = ResultModel.Name.ArabicValue;
|
|
380
|
-
UserModel.NameEN = ResultModel.Name.EnglishValue;
|
|
381
|
-
UserModel.SamAccount = ResultModel.SamAccount;
|
|
382
|
-
UserModel.OrganizationID = 1;
|
|
383
|
-
if (ResultModel.DepartmentID != undefined)
|
|
384
|
-
UserModel.DepartmentID = Number(ResultModel.DepartmentID);
|
|
385
|
-
let PermissionSets = ResultModel.PermissionSets;
|
|
386
|
-
UserModel.PermissionSets = PermissionSets.map((i) => Number(i));
|
|
387
|
-
UserModel.SendActivationMail = ResultModel.SendActivationMail;
|
|
388
|
-
let internationalNumber = null;
|
|
389
|
-
if (ResultModel.MobileNumber != null) {
|
|
390
|
-
internationalNumber = ResultModel.MobileNumber.internationalNumber;
|
|
391
|
-
internationalNumber = internationalNumber.replace(/\s/g, "");
|
|
392
|
-
}
|
|
393
|
-
UserModel.PhoneInputMobile = internationalNumber;
|
|
394
|
-
this.userService.AddUser(UserModel).subscribe((result) => {
|
|
395
|
-
this.modalService.dismissAll();
|
|
396
|
-
let element = this.input;
|
|
397
|
-
element.ReinitializePaging();
|
|
398
|
-
}, (error) => {
|
|
399
|
-
});
|
|
400
|
-
}
|
|
401
|
-
}
|
|
402
|
-
showEditUserModal(User, EditUserModal) {
|
|
449
|
+
//Edit User
|
|
450
|
+
showEditUserModal(userID, userIDEnc, EditUserModal) {
|
|
403
451
|
this.utilityService.startBlockUI();
|
|
404
|
-
this.
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
452
|
+
this.UserId = userID;
|
|
453
|
+
this.userService.getEditUser(userIDEnc).subscribe((result) => {
|
|
454
|
+
let resultObj = result;
|
|
455
|
+
let user = resultObj.model;
|
|
456
|
+
let lists = resultObj.lists;
|
|
457
|
+
this.permissionSetList = lists.permessionsets;
|
|
458
|
+
this.departmentsList = lists.departments;
|
|
408
459
|
this.EditUserForm = new FormGroup({});
|
|
409
|
-
this.
|
|
460
|
+
this.EditUserFormOptions = new FormOptions();
|
|
461
|
+
this.EditUserFormOptions.FormGroup = this.EditUserForm;
|
|
462
|
+
this.EditUserFormOptions.GetModelFunction = this.getEditUserModel;
|
|
463
|
+
this.EditUserFormOptions.ServiceSubmitFunction = this.getEditUserFunction;
|
|
464
|
+
this.EditUserFormOptions.PagingReference = this.pagingElement;
|
|
465
|
+
this.EditUserFormOptions.PagingActionMode = PagingActionMode.Update;
|
|
466
|
+
this.EditUserFormOptions.OnSuccessHandler = this.onSubmitSuccess;
|
|
410
467
|
let Name = new EnglishArabicDTO();
|
|
411
|
-
Name.Arabic =
|
|
412
|
-
Name.English =
|
|
413
|
-
this.
|
|
414
|
-
this.
|
|
415
|
-
this.
|
|
416
|
-
this.
|
|
417
|
-
this.
|
|
418
|
-
this.
|
|
468
|
+
Name.Arabic = user.nameAR;
|
|
469
|
+
Name.English = user.nameEN;
|
|
470
|
+
this.EditName = new MultiLingualTextBoxOptions();
|
|
471
|
+
this.EditName.Name = "EditName";
|
|
472
|
+
this.EditName.ArabicLabelKey = "NameInArabic";
|
|
473
|
+
this.EditName.EnglishLabelKey = "NameInEnglish";
|
|
474
|
+
this.EditName.IsRequired = true;
|
|
475
|
+
this.EditName.Value = Name;
|
|
419
476
|
this.EditMobileNumber = new PhoneOptions();
|
|
420
|
-
this.EditMobileNumber.Value =
|
|
421
|
-
this.EditMobileNumber.Name = "
|
|
477
|
+
this.EditMobileNumber.Value = user.mobile;
|
|
478
|
+
this.EditMobileNumber.Name = "EditMobileNumber";
|
|
422
479
|
this.EditMobileNumber.LabelKey = "MobileNumber";
|
|
423
480
|
this.EditMobileNumber.ExtraClasses = "form-control bnsights-control";
|
|
424
481
|
this.EditMobileNumber.SelectedCountryISO = Country.UnitedArabEmirates;
|
|
425
482
|
this.EditMobileNumber.PhoneValidation = true;
|
|
426
483
|
this.EditMobileNumber.AllowSearch = true;
|
|
427
484
|
this.EditUsername = new TextBoxOptions();
|
|
428
|
-
this.EditUsername.Value =
|
|
429
|
-
this.EditUsername.Name = "
|
|
485
|
+
this.EditUsername.Value = user.username;
|
|
486
|
+
this.EditUsername.Name = "EditUsername";
|
|
430
487
|
this.EditUsername.LabelKey = "Username";
|
|
431
488
|
this.EditUsername.Type = InputType.Text;
|
|
432
489
|
this.EditUsername.IsRequired = true;
|
|
433
490
|
this.EditEmail = new TextBoxOptions();
|
|
434
|
-
this.EditEmail.Value =
|
|
435
|
-
this.EditEmail.Name = "
|
|
491
|
+
this.EditEmail.Value = user.email;
|
|
492
|
+
this.EditEmail.Name = "EditEmail";
|
|
436
493
|
this.EditEmail.LabelKey = "Email";
|
|
437
494
|
this.EditEmail.Type = InputType.Text;
|
|
438
495
|
this.EditEmail.IsRequired = true;
|
|
439
496
|
this.EditSamAccount = new TextBoxOptions();
|
|
440
|
-
this.EditSamAccount.Value =
|
|
441
|
-
this.EditSamAccount.Name = "
|
|
497
|
+
this.EditSamAccount.Value = user.samAccount;
|
|
498
|
+
this.EditSamAccount.Name = "EditSamAccount";
|
|
442
499
|
this.EditSamAccount.LabelKey = "SamAccount";
|
|
443
|
-
this.EditSamAccount.Type = InputType.
|
|
500
|
+
this.EditSamAccount.Type = InputType.Text;
|
|
444
501
|
this.EditUserDepartment = new DropdownOptions();
|
|
445
|
-
this.EditUserDepartment.Name = "
|
|
502
|
+
this.EditUserDepartment.Name = "EditDepartmentID";
|
|
446
503
|
this.EditUserDepartment.LabelKey = "Department";
|
|
447
|
-
this.EditUserDepartment.SelectedItems = this.departmentsList.filter((item) => { return parseInt(item.key) ==
|
|
504
|
+
this.EditUserDepartment.SelectedItems = this.departmentsList.filter((item) => { return parseInt(item.key) == user.departmentID; }).map((item) => item.key)[0];
|
|
448
505
|
this.EditUserDepartment.DataSource = this.departmentsList;
|
|
449
506
|
this.EditUserDepartment.SingleSelection = true;
|
|
450
507
|
this.EditUserDepartment.AllowSearchFilter = true;
|
|
451
508
|
this.EditUserPermissions = new DropdownOptions();
|
|
452
|
-
this.EditUserPermissions.Name = "
|
|
509
|
+
this.EditUserPermissions.Name = "EditPermissionSets";
|
|
453
510
|
this.EditUserPermissions.LabelKey = "PermissionSets";
|
|
454
511
|
this.EditUserPermissions.SelectedItems = this.permissionSetList.filter(function (tag) {
|
|
455
|
-
return
|
|
512
|
+
return user.permissionIDs.indexOf(parseInt(tag.key)) >= 0;
|
|
456
513
|
}).map((item) => item.key);
|
|
457
514
|
this.EditUserPermissions.DataSource = this.permissionSetList;
|
|
458
515
|
this.EditUserPermissions.SingleSelection = false;
|
|
@@ -462,39 +519,7 @@ export class UsersComponent {
|
|
|
462
519
|
this.utilityService.stopBlockUI();
|
|
463
520
|
});
|
|
464
521
|
}
|
|
465
|
-
|
|
466
|
-
if (this.EditUserForm.invalid) {
|
|
467
|
-
return;
|
|
468
|
-
}
|
|
469
|
-
else {
|
|
470
|
-
let ResultModel = this.EditUserForm.value;
|
|
471
|
-
let UserModel = new EditUserModel();
|
|
472
|
-
UserModel.ID = this.UserId;
|
|
473
|
-
UserModel.Username = ResultModel.Username;
|
|
474
|
-
UserModel.Email = ResultModel.Email;
|
|
475
|
-
UserModel.NameAR = ResultModel.Name.ArabicValue;
|
|
476
|
-
UserModel.NameEN = ResultModel.Name.EnglishValue;
|
|
477
|
-
UserModel.SamAccount = ResultModel.SamAccount;
|
|
478
|
-
if (ResultModel.DepartmentID != undefined)
|
|
479
|
-
UserModel.DepartmentID = Number(ResultModel.DepartmentID);
|
|
480
|
-
let PermissionSets = ResultModel.PermissionSets;
|
|
481
|
-
UserModel.PermissionIDs = PermissionSets.map((i) => Number(i));
|
|
482
|
-
let internationalNumber = null;
|
|
483
|
-
if (ResultModel.MobileNumber != null) {
|
|
484
|
-
internationalNumber = ResultModel.MobileNumber.internationalNumber;
|
|
485
|
-
internationalNumber = internationalNumber.replace(/\s/g, "");
|
|
486
|
-
}
|
|
487
|
-
UserModel.Mobile = internationalNumber;
|
|
488
|
-
this.userService.EditUser(UserModel).subscribe((result) => {
|
|
489
|
-
this.modalService.dismissAll();
|
|
490
|
-
let element = this.input;
|
|
491
|
-
element.UpdatePaging();
|
|
492
|
-
this.resetUsersCount();
|
|
493
|
-
this.disableButtons();
|
|
494
|
-
}, (error) => {
|
|
495
|
-
});
|
|
496
|
-
}
|
|
497
|
-
}
|
|
522
|
+
//Export users excel
|
|
498
523
|
exportExcel() {
|
|
499
524
|
let params = new HttpParams();
|
|
500
525
|
params = params.append("permissionIds", this.UsersForm.controls["permissionsets"].value == undefined ? "" : this.UsersForm.controls["permissionsets"].value);
|
|
@@ -505,60 +530,102 @@ export class UsersComponent {
|
|
|
505
530
|
this.userService.Export(params).subscribe((result) => {
|
|
506
531
|
let FileDTO = result;
|
|
507
532
|
const file = new Blob([FileDTO], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' });
|
|
508
|
-
|
|
533
|
+
let fileName = this.utilityService.getResourceValue("Users") + ".xlsx";
|
|
534
|
+
saveAs(file, fileName);
|
|
535
|
+
window.location.reload();
|
|
509
536
|
}, (error) => {
|
|
510
537
|
});
|
|
511
538
|
}
|
|
512
539
|
//One user functions
|
|
540
|
+
//Activation and deactivation functions
|
|
513
541
|
showActivateUserModal(User, isActivateModel, ActivateUserModal) {
|
|
514
542
|
this.utilityService.startBlockUI();
|
|
515
|
-
this.
|
|
516
|
-
this.
|
|
517
|
-
this.Name =
|
|
543
|
+
this.ActivatorDeactivateUserList = [];
|
|
544
|
+
this.ActivatorDeactivateUserList.push(User);
|
|
545
|
+
this.Name = User.nameStr;
|
|
518
546
|
this.Email = User.email;
|
|
519
547
|
this.ShowActivateModelData = isActivateModel;
|
|
520
548
|
this.modalService.open(ActivateUserModal);
|
|
521
549
|
this.utilityService.stopBlockUI();
|
|
522
550
|
}
|
|
551
|
+
activate() {
|
|
552
|
+
this.userService.ActivateUsers(this.ActivatorDeactivateUserList).subscribe((result) => {
|
|
553
|
+
this.modalService.dismissAll();
|
|
554
|
+
let element = this.pagingElement;
|
|
555
|
+
element.UpdatePaging();
|
|
556
|
+
this.resetUsersCount();
|
|
557
|
+
this.disableButtons();
|
|
558
|
+
}, (error) => {
|
|
559
|
+
});
|
|
560
|
+
}
|
|
561
|
+
deactivate() {
|
|
562
|
+
this.userService.DeactivateUsers(this.ActivatorDeactivateUserList).subscribe((result) => {
|
|
563
|
+
this.modalService.dismissAll();
|
|
564
|
+
let element = this.pagingElement;
|
|
565
|
+
element.UpdatePaging();
|
|
566
|
+
this.resetUsersCount();
|
|
567
|
+
this.disableButtons();
|
|
568
|
+
}, (error) => {
|
|
569
|
+
});
|
|
570
|
+
}
|
|
571
|
+
//Reset Password function
|
|
523
572
|
showResetPasswordUserModal(User, ResetPasswordUserModal) {
|
|
524
573
|
this.utilityService.startBlockUI();
|
|
525
574
|
this.ResetPasswordUserList = [];
|
|
526
575
|
this.ResetPasswordUserList.push(User);
|
|
527
|
-
this.Name =
|
|
576
|
+
this.Name = User.nameStr;
|
|
528
577
|
this.Email = User.email;
|
|
529
578
|
this.modalService.open(ResetPasswordUserModal);
|
|
530
579
|
this.utilityService.stopBlockUI();
|
|
531
580
|
}
|
|
581
|
+
resetPassword() {
|
|
582
|
+
this.userService.ResetUsersPassword(this.ResetPasswordUserList).subscribe((result) => {
|
|
583
|
+
this.modalService.dismissAll();
|
|
584
|
+
let element = this.pagingElement;
|
|
585
|
+
element.UpdatePaging();
|
|
586
|
+
this.resetUsersCount();
|
|
587
|
+
this.disableButtons();
|
|
588
|
+
}, (error) => {
|
|
589
|
+
});
|
|
590
|
+
}
|
|
591
|
+
//Send activation mail function
|
|
532
592
|
showSendActivationEmailModal(User, SendActivationEmailModal) {
|
|
533
593
|
this.utilityService.startBlockUI();
|
|
534
594
|
this.SelectedUserList = [];
|
|
535
595
|
this.SelectedUserList.push(User);
|
|
536
|
-
this.Name =
|
|
596
|
+
this.Name = User.nameStr;
|
|
537
597
|
this.Email = User.email;
|
|
538
|
-
this.OpenSendActivationEmailModal = false;
|
|
539
598
|
this.modalService.open(SendActivationEmailModal);
|
|
540
599
|
this.utilityService.stopBlockUI();
|
|
541
600
|
}
|
|
542
|
-
|
|
543
|
-
this.
|
|
544
|
-
this.SelectedUserList = this.SelectedUserList.filter(item => item != user);
|
|
545
|
-
if (user.isActive)
|
|
546
|
-
this.activatedUsersSelected -= 1;
|
|
547
|
-
else
|
|
548
|
-
this.deActivatedUsersSelected -= 1;
|
|
549
|
-
this.enableButtons();
|
|
550
|
-
if (this.SelectedUserList.length <= 0) {
|
|
601
|
+
sendActivationEmailForUser() {
|
|
602
|
+
this.userService.SendActivationEmailForUser(this.SelectedUserList).subscribe((result) => {
|
|
551
603
|
this.modalService.dismissAll();
|
|
552
|
-
|
|
604
|
+
this.SelectedUserList = [];
|
|
605
|
+
let element = this.pagingElement;
|
|
606
|
+
element.UpdatePaging();
|
|
607
|
+
this.resetUsersCount();
|
|
608
|
+
this.disableButtons();
|
|
609
|
+
}, (error) => {
|
|
610
|
+
});
|
|
553
611
|
}
|
|
612
|
+
//Set password function
|
|
554
613
|
showsetPasswordUserModal(User, setPasswordUserModal) {
|
|
555
614
|
this.utilityService.startBlockUI();
|
|
556
615
|
this.SetUserPasswordForm = new FormGroup({});
|
|
616
|
+
this.SetUserPasswordFormOptions = new FormOptions();
|
|
617
|
+
this.SetUserPasswordFormOptions.FormGroup = this.SetUserPasswordForm;
|
|
618
|
+
this.SetUserPasswordFormOptions.GetModelFunction = this.getSetPAsswordModel;
|
|
619
|
+
this.SetUserPasswordFormOptions.ServiceSubmitFunction = this.getSetPasswordFunction;
|
|
620
|
+
this.SetUserPasswordFormOptions.PagingReference = this.pagingElement;
|
|
621
|
+
this.SetUserPasswordFormOptions.PagingActionMode = PagingActionMode.Update;
|
|
622
|
+
this.SetUserPasswordFormOptions.OnSuccessHandler = this.onSubmitSuccess;
|
|
557
623
|
this.setPasswordUserList = [];
|
|
558
624
|
this.setPasswordUserList.push(User);
|
|
559
|
-
this.Name =
|
|
625
|
+
this.Name = User.nameStr;
|
|
560
626
|
this.Email = User.email;
|
|
561
627
|
this.Password = new TextBoxOptions();
|
|
628
|
+
this.Password.Name = "Password";
|
|
562
629
|
this.Password.HideLabel = true;
|
|
563
630
|
this.Password.Type = InputType.Password;
|
|
564
631
|
this.Password.IsRequired = true;
|
|
@@ -578,162 +645,84 @@ export class UsersComponent {
|
|
|
578
645
|
this.modalService.open(setPasswordUserModal);
|
|
579
646
|
this.utilityService.stopBlockUI();
|
|
580
647
|
}
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
|
|
599
|
-
|
|
600
|
-
|
|
601
|
-
|
|
602
|
-
|
|
603
|
-
|
|
604
|
-
let element = this.input;
|
|
605
|
-
element.UpdatePaging();
|
|
606
|
-
this.resetUsersCount();
|
|
607
|
-
this.disableButtons();
|
|
608
|
-
}, (error) => {
|
|
609
|
-
});
|
|
610
|
-
}
|
|
611
|
-
setPassword() {
|
|
612
|
-
if (this.SetUserPasswordForm.invalid) {
|
|
613
|
-
return;
|
|
614
|
-
}
|
|
615
|
-
else {
|
|
616
|
-
let ResultModel = this.SetUserPasswordForm.value;
|
|
617
|
-
for (let index = 0; index < this.setPasswordUserList.length; index++) {
|
|
618
|
-
var element = this.setPasswordUserList[index];
|
|
619
|
-
element.Password = ResultModel.Password;
|
|
620
|
-
element.ConfirmPassword = ResultModel.PasswordConfirmation;
|
|
621
|
-
}
|
|
622
|
-
this.userService.SetUsersPassword(this.setPasswordUserList).subscribe((result) => {
|
|
623
|
-
this.modalService.dismissAll();
|
|
624
|
-
let element = this.input;
|
|
625
|
-
element.UpdatePaging();
|
|
626
|
-
this.resetUsersCount();
|
|
627
|
-
this.disableButtons();
|
|
628
|
-
}, (error) => {
|
|
629
|
-
});
|
|
648
|
+
//Users List Functions
|
|
649
|
+
//Show activate,deactivate,resetPassword,sendactivationemail modals
|
|
650
|
+
showConfirmationModal(type, ConfirmationModal) {
|
|
651
|
+
this.utilityService.startBlockUI();
|
|
652
|
+
switch (type) {
|
|
653
|
+
case 1:
|
|
654
|
+
this.ConfirmationMessage = this.utilityService.getResourceValue("ActivateConfirmation");
|
|
655
|
+
this.ConfirmationModalType = 1;
|
|
656
|
+
break;
|
|
657
|
+
case 2:
|
|
658
|
+
this.ConfirmationMessage = this.utilityService.getResourceValue("DeactivateConfirmation");
|
|
659
|
+
this.ConfirmationModalType = 2;
|
|
660
|
+
break;
|
|
661
|
+
case 3:
|
|
662
|
+
this.ConfirmationMessage = this.utilityService.getResourceValue("ResetPasswordConfirmation");
|
|
663
|
+
this.ConfirmationModalType = 3;
|
|
664
|
+
break;
|
|
665
|
+
case 4:
|
|
666
|
+
this.ConfirmationMessage = this.utilityService.getResourceValue("SendActivationMailConfirmation");
|
|
667
|
+
this.ConfirmationModalType = 4;
|
|
668
|
+
break;
|
|
669
|
+
default:
|
|
670
|
+
break;
|
|
630
671
|
}
|
|
672
|
+
this.modalService.open(ConfirmationModal);
|
|
673
|
+
this.utilityService.stopBlockUI();
|
|
631
674
|
}
|
|
632
|
-
|
|
633
|
-
this.userService.SendActivationEmailForUser(this.SelectedUserList).subscribe((result) => {
|
|
634
|
-
this.modalService.dismissAll();
|
|
635
|
-
this.SelectedUserList = [];
|
|
636
|
-
let element = this.input;
|
|
637
|
-
element.UpdatePaging();
|
|
638
|
-
this.resetUsersCount();
|
|
639
|
-
this.disableButtons();
|
|
640
|
-
}, (error) => {
|
|
641
|
-
});
|
|
642
|
-
}
|
|
643
|
-
//Users List Functions
|
|
675
|
+
//Activate users list
|
|
644
676
|
activateUserList() {
|
|
645
677
|
this.userService.ActivateUsers(this.SelectedUserList).subscribe((result) => {
|
|
646
678
|
this.modalService.dismissAll();
|
|
647
679
|
this.SelectedUserList = [];
|
|
648
|
-
let element = this.
|
|
680
|
+
let element = this.pagingElement;
|
|
649
681
|
element.UpdatePaging();
|
|
650
682
|
this.resetUsersCount();
|
|
651
683
|
this.disableButtons();
|
|
652
684
|
}, (error) => {
|
|
653
685
|
});
|
|
654
686
|
}
|
|
687
|
+
//Deactivate users list
|
|
655
688
|
deactivateUserList() {
|
|
656
689
|
this.userService.DeactivateUsers(this.SelectedUserList).subscribe((result) => {
|
|
657
690
|
this.modalService.dismissAll();
|
|
658
691
|
this.SelectedUserList = [];
|
|
659
|
-
let element = this.
|
|
692
|
+
let element = this.pagingElement;
|
|
660
693
|
element.UpdatePaging();
|
|
661
694
|
this.resetUsersCount();
|
|
662
695
|
this.disableButtons();
|
|
663
696
|
}, (error) => {
|
|
664
697
|
});
|
|
665
698
|
}
|
|
699
|
+
//Reset passwords users list
|
|
666
700
|
resetUserPasswordList() {
|
|
667
701
|
this.userService.ResetUsersPassword(this.SelectedUserList).subscribe((result) => {
|
|
668
702
|
this.modalService.dismissAll();
|
|
669
703
|
this.SelectedUserList = [];
|
|
670
|
-
let element = this.
|
|
704
|
+
let element = this.pagingElement;
|
|
671
705
|
element.UpdatePaging();
|
|
672
706
|
this.resetUsersCount();
|
|
673
707
|
this.disableButtons();
|
|
674
708
|
}, (error) => {
|
|
675
709
|
});
|
|
676
710
|
}
|
|
677
|
-
|
|
678
|
-
|
|
679
|
-
this.IsOpenConfirmationModal = false;
|
|
680
|
-
this.utilityService.startBlockUI();
|
|
681
|
-
switch (type) {
|
|
682
|
-
case 1:
|
|
683
|
-
this.ConfirmationMessage = this.utilityService.getResourceValue("ActivateConfirmation");
|
|
684
|
-
this.ConfirmationModalType = 1;
|
|
685
|
-
break;
|
|
686
|
-
case 2:
|
|
687
|
-
this.ConfirmationMessage = this.utilityService.getResourceValue("DeactivateConfirmation");
|
|
688
|
-
this.ConfirmationModalType = 2;
|
|
689
|
-
break;
|
|
690
|
-
case 3:
|
|
691
|
-
this.ConfirmationMessage = this.utilityService.getResourceValue("ResetPasswordConfirmation");
|
|
692
|
-
this.ConfirmationModalType = 3;
|
|
693
|
-
break;
|
|
694
|
-
case 4:
|
|
695
|
-
this.ConfirmationMessage = this.utilityService.getResourceValue("SendActivationMailConfirmation");
|
|
696
|
-
this.ConfirmationModalType = 4;
|
|
697
|
-
break;
|
|
698
|
-
default:
|
|
699
|
-
break;
|
|
700
|
-
}
|
|
701
|
-
this.modalService.open(ConfirmationModal);
|
|
702
|
-
this.utilityService.stopBlockUI();
|
|
711
|
+
ngOnDestroy() {
|
|
712
|
+
this.requestHandlerService.destroyHandler();
|
|
703
713
|
}
|
|
704
714
|
}
|
|
705
|
-
UsersComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.13", ngImport: i0, type: UsersComponent, deps: [{ token: i1.AuthService }, { token: i1.UtilityService }, { token: i1.BBSFTranslateService }, { token: i1.EnvironmentService }, { token: i2.PageInfoService }, { token: i3.userService }, { token: i4.NgbModal }], target: i0.ɵɵFactoryTarget.Component });
|
|
706
|
-
UsersComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.13", type: UsersComponent, selector: "lib-users", viewQueries: [{ propertyName: "input", first: true, predicate: ["UserPagingViewElement"], descendants: true }, { propertyName: "CloseUserModal", first: true, predicate: ["CloseUserModal"], descendants: true }, { propertyName: "CloseEditUserModal", first: true, predicate: ["CloseEditUserModal"], descendants: true }, { propertyName: "EditUserModal", first: true, predicate: ["EditUserModal"], descendants: true }, { propertyName: "CloseResetPasswordUserModal", first: true, predicate: ["CloseResetPasswordUserModal"], descendants: true }, { propertyName: "ClosesetPasswordUserModal", first: true, predicate: ["ClosesetPasswordUserModal"], descendants: true }, { propertyName: "CloseActivationEmailModal", first: true, predicate: ["CloseActivationEmailModal"], descendants: true }, { propertyName: "CloseConfirmationModal", first: true, predicate: ["CloseConfirmationModal"], descendants: true }, { propertyName: "permissionSetDDL", first: true, predicate: ["permissionSetDDL"], descendants: true }, { propertyName: "accountStatusDDL", first: true, predicate: ["accountStatusDDL"], descendants: true }, { propertyName: "lockedStatusDDL", first: true, predicate: ["lockedStatusDDL"], descendants: true }, { propertyName: "departmentsDDL", first: true, predicate: ["departmentsDDL"], descendants: true }], ngImport: i0, template: "<block-ui></block-ui>\r\n<div *ngIf=\"ShowPageContent\" class=\"container-fluid\">\r\n <!-- begin::Header -->\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 <form [formGroup]=\"UsersForm\">\r\n <BBSF-TextBox [options]=\"searchTextBox\" [group]=\"UsersForm\"></BBSF-TextBox>\r\n </form>\r\n </div>\r\n <div class=\"card-toolbar\">\r\n <!-- begin::Menu -->\r\n <div *ngIf=\"showGeneralBtns\" ngbDropdown class=\"d-inline-block\" [ngStyle]=\"{'display': ShowPageContent==true?'block':'none'}\">\r\n <button (click)=\"loadLists()\" ngbDropdownToggle href=\"javascript:;\" type=\"button\" class=\"btn btn-sm btn-light-primary me-3\" id=\"FiltersDropdown\" title=\"Filter\">\r\n <i class=\"fas fa-filter me-1\"></i>\r\n {{utilityService.getResourceValue(\"Filter\")}}\r\n </button>\r\n <div *ngIf=\"IsFilterLoaded\" ngbDropdownMenu aria-labelledby=\"FiltersDropdown\" class=\" filter-container menu menu-sub menu-sub-dropdown menu-column menu-rounded menu-gray-800 menu-state-bg-light-primary w-250px w-md-500px fw-bold py-3 \">\r\n <form [formGroup]=\"UsersForm\">\r\n <div class=\"px-7 py-5\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-6\">\r\n <div class=\"mb-10\">\r\n <BBSF-DropdownList #permissionSetDDL [options]=\"permissionSetsOptions\" [group]=\"UsersForm\"></BBSF-DropdownList>\r\n </div>\r\n </div>\r\n <div class=\"col-lg-6\">\r\n <div class=\"mb-10\">\r\n <BBSF-DropdownList #accountStatusDDL [options]=\"accountStatusOptions\" [group]=\"UsersForm\"></BBSF-DropdownList>\r\n </div>\r\n </div>\r\n <div class=\"col-lg-6\">\r\n <div class=\"mb-10\">\r\n <BBSF-DropdownList #lockedStatusDDL [options]=\"lockedStatusOptions\" [group]=\"UsersForm\"></BBSF-DropdownList>\r\n </div>\r\n </div>\r\n <div class=\"col-lg-6\">\r\n <div class=\"mb-10\">\r\n <BBSF-DropdownList #departmentsDDL [options]=\"departmentsOptions\" [group]=\"UsersForm\"></BBSF-DropdownList>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"d-flex justify-content-end\">\r\n <button class=\"btn btn-light btn-active-light-primary pv-reset btn-sm\" id=\"applyFiltersBtn\"\r\n (click)=\"resetFilters()\">\r\n {{utilityService.getResourceValue(\"Reset\")}}\r\n </button>\r\n </div>\r\n </div>\r\n </form>\r\n </div>\r\n </div>\r\n <button *ngIf=\"showGeneralBtns\" href=\"javascript:;\" type=\"button\" (click)=\"exportExcel()\" class=\"btn btn-sm btn-light-primary me-3 bnsights-btn-export\"\r\n title=\"Export\">\r\n <i class=\"fas fa-download me-1\"></i>\r\n {{utilityService.getResourceValue(\"Export\")}}\r\n </button>\r\n <button *ngIf=\"showActivateBtn\" type=\"button\" id=\"btnActivate\" class=\"btn btn-sm btn-light-primary me-3\" href=\"javascript:;\" data-toggle=\"modal\"\r\n data-target=\"#ConfirmationModal\" (click)=\"showConfirmationModal(1, ConfirmationModal)\">\r\n <i class=\"fa fa-history\"></i> {{utilityService.getResourceValue(\"Activate\")}}\r\n </button>\r\n <button *ngIf=\"showDeactivateBtn\" type=\"button\" id=\"btnDeactivate\" class=\"btn btn-sm btn-light-primary me-3\" href=\"javascript:;\" data-toggle=\"modal\"\r\n data-target=\"#ConfirmationModal\" (click)=\"showConfirmationModal(2, ConfirmationModal)\">\r\n <i class=\"fa fa-power-off\"></i>{{utilityService.getResourceValue(\"Deactivate\")}}\r\n </button>\r\n <button *ngIf=\"showResetPassBtn\" type=\"button\" id=\"btnResetPass\" class=\"btn btn-sm btn-light-primary me-3\" href=\"javascript:;\" data-toggle=\"modal\"\r\n data-target=\"#ConfirmationModal\" (click)=\"showConfirmationModal(3, ConfirmationModal)\">\r\n <i class=\"fa fa-cog\"></i>{{utilityService.getResourceValue(\"ResetPassword\")}}\r\n </button>\r\n <button *ngIf=\"showSendEmailBtn\" type=\"button\" id=\"btnResendActivation\" class=\"btn btn-sm btn-light-primary me-3\" href=\"javascript:;\" data-toggle=\"modal\"\r\n data-target=\"#ConfirmationModal\" (click)=\"showConfirmationModal(4 , ConfirmationModal)\">\r\n <i class=\"fa fa-envelope\"></i> {{utilityService.getResourceValue(\"SendActivationEmail\")}}\r\n </button>\r\n <button *ngIf=\"showGeneralBtns\" type=\"button\" class=\"btn btn-sm btn-primary\" title=\"Add\" (click)=\"showAddUserModal(addUserModal)\">\r\n <i class=\"fas fa-plus me-1\"></i>\r\n {{utilityService.getResourceValue(\"Add\")}}\r\n </button>\r\n <!-- end::Menu -->\r\n </div>\r\n </div>\r\n <!-- end::Header -->\r\n <!-- begin::Body -->\r\n <div class=\"card-body py-3\">\r\n <!-- begin::Table container -->\r\n <div class=\"table-responsive\">\r\n <!-- begin::Table -->\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 <th class=\"w-50px\">\r\n <span>\r\n <label class=\"form-check form-check-sm form-check-custom form-check-solid\">\r\n <mat-checkbox (change)=\"selectAllUserList($event,UserPagingResult)\" [checked]=\"allSelected\">\r\n </mat-checkbox>\r\n <!--<input type=\"checkbox\" class=\"form-check-input\" (change)=\"selectAllUserList($event,UserPagingResult)\" id=\"chk_SelectAll\">-->\r\n <span></span>\r\n </label>\r\n </span>\r\n </th>\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(\"Mobile\")}}</th>\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"Roles\")}}</th>\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"Status\")}}</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 <tr *ngFor=\"let user of UserPagingResult\">\r\n <td>\r\n <span>\r\n <label class=\"form-check form-check-sm form-check-custom form-check-solid\">\r\n <!--<input type=\"checkbox\" class=\"form-check-input\" (change)=\"updateUserList($event,user)\" id=\"User-{{user.id}}\">-->\r\n <span></span>\r\n <mat-checkbox (change)=\"updateUserList($event,user)\" [(ngModel)]=\"user.selected\">\r\n </mat-checkbox>\r\n </label>\r\n </span>\r\n </td>\r\n <td>\r\n <div class=\"d-flex align-items-center\">\r\n <div class=\"symbol symbol-35px\">\r\n <h6 class=\"symbol-label font-size-h5 font-weight-bold bg-light-primary ml-2 mb-0 me-3\">A</h6>\r\n </div>\r\n <div class=\"d-flex justify-content-start flex-column\">\r\n <a *ngIf=\"language=='en'\" data-toggle=\"modal\" data-target=\"#EditUserModal\"\r\n (click)=\"showEditUserModal(user,EditUserModal)\" href=\"javascript:void(0)\" class=\"text-dark fw-bolder text-hover-primary fs-6\">{{user.name.english}}</a>\r\n <a *ngIf=\"language=='ar'\" data-toggle=\"modal\" data-target=\"#EditUserModal\"\r\n (click)=\"showEditUserModal(user,EditUserModal)\" href=\"javascript:void(0)\" class=\"text-dark fw-bolder text-hover-primary fs-6\">{{user.name.arabic}}</a>\r\n </div>\r\n </div>\r\n </td>\r\n <td>{{user.username}}</td>\r\n <td>{{user.mobile}}</td>\r\n <td>{{user.permissionset}}</td>\r\n <td>\r\n <span class=\"badge badge-light-success\" *ngIf=\"user.isActive==true\">\r\n {{utilityService.getResourceValue(\"Activate\")}}\r\n </span>\r\n <span class=\"badge badge-light-danger\" *ngIf=\"user.isActive==false\">\r\n {{utilityService.getResourceValue(\"Deactivate\")}}\r\n </span>\r\n </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 <button type=\"button\" class=\"menu-item px-3\" ngbDropdownItem\r\n (click)=\"showEditUserModal(user,EditUserModal)\">\r\n <span class=\"menu-link px-3\">{{utilityService.getResourceValue(\"Edit\")}}</span>\r\n </button>\r\n <button ngbDropdownItem class=\"menu-item px-3\" *ngIf=\"user.isActive\" id=\"btnDeactivate\" (click)=\"showActivateUserModal(user,false,ActivateUserModal)\">\r\n <span class=\"menu-link px-3\">{{utilityService.getResourceValue(\"Deactivate\")}}</span>\r\n </button>\r\n <button ngbDropdownItem class=\"menu-item px-3\" id=\"btnactivate\" (click)=\"showActivateUserModal(user,true,ActivateUserModal)\" *ngIf=\"!user.isActive\">\r\n <span class=\"menu-link px-3\">{{utilityService.getResourceValue(\"Activate\")}}</span>\r\n </button>\r\n <button ngbDropdownItem class=\"menu-item px-3\" id=\"btnResetPass\" (click)=\"showResetPasswordUserModal(user , ResetPasswordUserModal)\">\r\n <span class=\"menu-link px-3\">{{utilityService.getResourceValue(\"ResetPassword\")}}</span>\r\n </button>\r\n\r\n <button ngbDropdownItem class=\"menu-item px-3\" id=\"btnResetPass\" (click)=\"showsetPasswordUserModal(user, setPasswordUserModal)\">\r\n <span class=\"menu-link px-3\">{{utilityService.getResourceValue(\"SetPassword\")}}</span>\r\n </button>\r\n\r\n <button ngbDropdownItem class=\"menu-item px-3\" id=\"btnResetPass\" *ngIf=\"!user.isActive\" (click)=\"showSendActivationEmailModal(user , SendActivationEmailModal)\">\r\n <span class=\"menu-link px-3\">{{utilityService.getResourceValue(\"SendActivationEmail\")}}</span>\r\n </button>\r\n </mat-menu>\r\n\r\n\r\n </div>\r\n\r\n </td>\r\n </tr>\r\n <tr *ngIf=\"UserPagingResult.length == 0\">\r\n <td colspan=\"6\">\r\n <lib-empty-data></lib-empty-data>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n <!-- end::Table -->\r\n </div>\r\n <!-- end::Table container -->\r\n <!-- begin paging-->\r\n <BBSF-Paging (Items)=\"setUsersListResult($event)\" *ngIf=\"IsFilterLoaded\" [options]=\"UserPaging\"\r\n [group]=\"UsersForm\" #UserPagingViewElement>\r\n </BBSF-Paging>\r\n <!-- End paging-->\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<!-- add user-->\r\n<ng-template #addUserModal 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\" (click)=\"modal.dismiss()\" class=\"btn btn-sm btn-icon btn-active-color-primary\">\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(\"AddUser\")}}</h1>\r\n </div>\r\n <form [formGroup]=\"AddUserForm\" (ngSubmit)=\"addUser()\">\r\n <BBSF-MultiLingualTextBox [options]=\"MultiLingualName\" [group]=\"AddUserForm\"></BBSF-MultiLingualTextBox>\r\n <BBSF-TextBox [options]=\"Username\" [group]=\"AddUserForm\"></BBSF-TextBox>\r\n <BBSF-TextBox [options]=\"SamAccount\" [group]=\"AddUserForm\"></BBSF-TextBox>\r\n <BBSF-Phone [options]=\"MobileNumber\" [group]=\"AddUserForm\"></BBSF-Phone>\r\n <BBSF-DropdownList [options]=\"UserDepartment\" [group]=\"AddUserForm\"></BBSF-DropdownList>\r\n <BBSF-Toggleslide [options]=\"SendActivationEmail\" [group]=\"AddUserForm\"></BBSF-Toggleslide>\r\n <BBSF-DropdownList [options]=\"UserPermissions\" [group]=\"AddUserForm\"></BBSF-DropdownList>\r\n <div class=\"text-center pt-7\">\r\n <button type=\"button\" #CloseUserModal id=\"CloseUserModal\" data-dismiss=\"modal\" aria-label=\"Close\" class=\"btn btn-light me-3 btn-sm\" (click)=\"modal.dismiss()\">{{utilityService.getResourceValue(\"CancelLabel\")}} </button>\r\n <button type=\"submit\" class=\"btn btn-primary btn-sm\">{{utilityService.getResourceValue(\"SaveLabel\")}}</button>\r\n </div>\r\n </form>\r\n\r\n </div>\r\n</ng-template>\r\n\r\n<!-- Edit user-->\r\n<ng-template #EditUserModal 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\" (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(\"EditUser\")}}</h1>\r\n </div>\r\n <form [formGroup]=\"EditUserForm\" (ngSubmit)=\"editUser()\">\r\n <BBSF-MultiLingualTextBox [options]=\"EditMultiLingualName\" [group]=\"EditUserForm\"></BBSF-MultiLingualTextBox>\r\n <BBSF-Phone [options]=\"EditMobileNumber\" [group]=\"EditUserForm\"></BBSF-Phone>\r\n <BBSF-TextBox [options]=\"EditUsername\" [group]=\"EditUserForm\"></BBSF-TextBox>\r\n <BBSF-TextBox [options]=\"EditEmail\" [group]=\"EditUserForm\"></BBSF-TextBox>\r\n <BBSF-TextBox [options]=\"EditSamAccount\" [group]=\"EditUserForm\"></BBSF-TextBox>\r\n <BBSF-DropdownList [options]=\"EditUserDepartment\" [group]=\"EditUserForm\"></BBSF-DropdownList>\r\n <BBSF-DropdownList [options]=\"EditUserPermissions\" [group]=\"EditUserForm\"></BBSF-DropdownList>\r\n <div class=\"text-center pt-7\">\r\n <button type=\"button\" data-dismiss=\"modal\" #CloseEditUserModal id=\"CloseEditUserModal\" aria-label=\"Close\" class=\"btn btn-light me-3 btn-sm\" (click)=\"modal.dismiss()\">{{utilityService.getResourceValue(\"CancelLabel\")}}</button>\r\n <button type=\"submit\" class=\"btn btn-primary btn-sm\">{{utilityService.getResourceValue(\"SaveLabel\")}}</button>\r\n </div>\r\n </form>\r\n\r\n </div>\r\n</ng-template>\r\n<!-- Deactivate/Activate User Modal -->\r\n<ng-template #ActivateUserModal 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\" (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\" *ngIf=\"!ShowActivateModelData\" id=\"exampleModalLabel\">\r\n {{utilityService.getResourceValue(\"Deactivate\")}}\r\n </h1>\r\n <h1 class=\"mb-3\" *ngIf=\"ShowActivateModelData\" id=\"exampleModalLabel\">\r\n {{utilityService.getResourceValue(\"Activate\")}}\r\n </h1>\r\n </div>\r\n <div class=\"notice d-flex bg-light-warning rounded border-warning border border-dashed mb-10 p-6\">\r\n <!--begin::Icon-->\r\n <!--begin::Svg Icon | path: icons/duotune/general/gen044.svg-->\r\n <span class=\"svg-icon svg-icon-2tx svg-icon-warning me-4\">\r\n <span [inlineSVG]=\"'./src/assets/images/gen044.svg'\"></span>\r\n </span>\r\n <!--end::Svg Icon-->\r\n <!--end::Icon-->\r\n <!--begin::Wrapper-->\r\n <div class=\"d-flex flex-stack flex-grow-1\">\r\n <!--begin::Content-->\r\n <div class=\"fw-bold\">\r\n <div class=\"fs-6 text-gray-700\" *ngIf=\"!ShowActivateModelData\">\r\n {{utilityService.getResourceValue(\"DeactivateConfirmation\")}}\r\n </div>\r\n <div class=\"fs-6 text-gray-700\" *ngIf=\"ShowActivateModelData\">\r\n {{utilityService.getResourceValue(\"ActivateConfirmation\")}}\r\n </div>\r\n </div>\r\n <!--end::Content-->\r\n </div>\r\n <!--end::Wrapper-->\r\n </div>\r\n <div id=\"\" class=\"\">\r\n <div class=\"table-responsive-x\">\r\n <table id=\"tableConfirmation\" class=\"table table-striped table-bordered \">\r\n <thead>\r\n <tr>\r\n <th>{{utilityService.getResourceValue(\"Name\")}}</th>\r\n <th>{{utilityService.getResourceValue(\"Email\")}}</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr class=\"trItem\">\r\n <td>{{Name}}</td>\r\n <td>{{Email}}</td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n </div>\r\n <div class=\"text-center pt-7\">\r\n <button type=\"button\" #CloseActivateUserModal id=\"CloseActivateUserModal\" data-dismiss=\"modal\" aria-label=\"Close\" class=\"btn btn-light me-3 btn-sm\" (click)=\"modal.dismiss()\">{{utilityService.getResourceValue(\"CancelLabel\")}} </button>\r\n <button type=\"button\" *ngIf=\"!ShowActivateModelData\" (click)=\"deactivate()\"\r\n class=\"btn btn-primary btn-sm\">\r\n {{utilityService.getResourceValue(\"SaveLabel\")}}\r\n </button>\r\n <button type=\"button\" *ngIf=\"ShowActivateModelData\" (click)=\"activate()\"\r\n class=\"btn btn-primary btn-sm\">\r\n {{utilityService.getResourceValue(\"SaveLabel\")}}\r\n </button>\r\n\r\n </div>\r\n </div>\r\n</ng-template>\r\n<!-- ResetPassword User Modal -->\r\n<ng-template #ResetPasswordUserModal 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\" (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(\"ResetPassword\")}}</h1>\r\n </div>\r\n <div class=\"notice d-flex bg-light-warning rounded border-warning border border-dashed mb-10 p-6\">\r\n <!--begin::Icon-->\r\n <!--begin::Svg Icon | path: icons/duotune/general/gen044.svg-->\r\n <span class=\"svg-icon svg-icon-2tx svg-icon-warning me-4\">\r\n <span [inlineSVG]=\"'./src/assets/images/gen044.svg'\"></span>\r\n </span>\r\n <!--end::Svg Icon-->\r\n <!--end::Icon-->\r\n <!--begin::Wrapper-->\r\n <div class=\"d-flex flex-stack flex-grow-1\">\r\n <!--begin::Content-->\r\n <div class=\"fw-bold\">\r\n <div class=\"fs-6 text-gray-700\">\r\n {{utilityService.getResourceValue(\"ResetPasswordConfirmation\")}}\r\n </div>\r\n </div>\r\n <!--end::Content-->\r\n </div>\r\n <!--end::Wrapper-->\r\n </div>\r\n <div id=\"\" class=\"\">\r\n <div class=\"table-responsive\">\r\n <!-- begin::Table -->\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 <th class=\"min-w-200\">{{utilityService.getResourceValue(\"Name\")}}</th>\r\n <th class=\"min-w-200\">{{utilityService.getResourceValue(\"Email\")}}</th>\r\n </tr>\r\n </thead>\r\n <tbody class=\"fw-bold text-gray-600 border-0\">\r\n <tr class=\"trItem\">\r\n <td class=\"text-dark\">{{Name}}</td>\r\n <td>{{Email}}</td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n </div>\r\n\r\n <div class=\"text-center pt-7\">\r\n <button id=\"CloseResetPasswordUserModal\" #CloseResetPasswordUserModal type=\"button\" data-dismiss=\"modal\" aria-label=\"Close\" class=\"btn btn-light me-3 btn-sm\" (click)=\"modal.dismiss()\">{{utilityService.getResourceValue(\"CancelLabel\")}}</button>\r\n\r\n <button type=\"button\" (click)=\"resetPassword()\" class=\"btn btn-primary btn-sm\">\r\n {{utilityService.getResourceValue(\"SaveLabel\")}}\r\n </button>\r\n </div>\r\n </div>\r\n</ng-template>\r\n\r\n<!-- setPassword User Modal -->\r\n<ng-template #setPasswordUserModal 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\" (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(\"SetPassword\")}}</h1>\r\n </div>\r\n <div class=\"notice d-flex bg-light-warning rounded border-warning border border-dashed mb-10 p-6\">\r\n <!--begin::Icon-->\r\n <!--begin::Svg Icon | path: icons/duotune/general/gen044.svg-->\r\n <span class=\"svg-icon svg-icon-2tx svg-icon-warning me-4\">\r\n <span [inlineSVG]=\"'./src/assets/images/gen044.svg'\"></span>\r\n </span>\r\n <!--end::Svg Icon-->\r\n <!--end::Icon-->\r\n <!--begin::Wrapper-->\r\n <div class=\"d-flex flex-stack flex-grow-1\">\r\n <!--begin::Content-->\r\n <div class=\"fw-bold\">\r\n <div class=\"fs-6 text-gray-700\">\r\n {{utilityService.getResourceValue(\"SetPasswordConfirmation\")}}\r\n </div>\r\n </div>\r\n <!--end::Content-->\r\n </div>\r\n <!--end::Wrapper-->\r\n </div>\r\n <form [formGroup]=\"SetUserPasswordForm\" (ngSubmit)=\"setPassword()\">\r\n <div class=\"table-responsive\">\r\n <!-- begin::Table -->\r\n <table id=\"tableConfirmation\" 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 <th class=\"min-w-150\"> {{utilityService.getResourceValue(\"Name\")}}</th>\r\n <th class=\"min-w-150\"> {{utilityService.getResourceValue(\"Email\")}}</th>\r\n <th class=\"min-w-150\"> {{utilityService.getResourceValue(\"Password\")}}</th>\r\n <th class=\"min-w-150\"> {{utilityService.getResourceValue(\"ConfirmPassword\")}}</th>\r\n </tr>\r\n </thead>\r\n <tbody class=\"fw-bold text-gray-600 border-0\">\r\n <tr class=\"trItem\">\r\n <td>{{Name}}</td>\r\n <td>{{Email}}</td>\r\n <td>\r\n <BBSF-TextBox [options]=\"Password\" [group]=\"SetUserPasswordForm\"></BBSF-TextBox>\r\n </td>\r\n <td>\r\n <BBSF-TextBox [options]=\"PasswordConfirmation\" [group]=\"SetUserPasswordForm\"></BBSF-TextBox>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n <div class=\"text-center pt-7\">\r\n <button id=\"ClosesetPasswordUserModal\" #ClosesetPasswordUserModal type=\"button\" aria-label=\"Close\" class=\"btn btn-light me-3 btn-sm\" (click)=\"modal.dismiss()\">{{utilityService.getResourceValue(\"CancelLabel\")}}</button>\r\n <button type=\"submit\" class=\"btn btn-primary btn-sm\">{{utilityService.getResourceValue(\"SaveLabel\")}}</button>\r\n </div>\r\n </form>\r\n\r\n </div>\r\n</ng-template>\r\n\r\n<!-- Send Activation Email Modal -->\r\n<ng-template #SendActivationEmailModal 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\" (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(\"SendActivationEmail\")}}</h1>\r\n </div>\r\n <div class=\"notice d-flex bg-light-warning rounded border-warning border border-dashed mb-10 p-6\">\r\n <!--begin::Icon-->\r\n <!--begin::Svg Icon | path: icons/duotune/general/gen044.svg-->\r\n <span class=\"svg-icon svg-icon-2tx svg-icon-warning me-4\">\r\n <span [inlineSVG]=\"'./src/assets/images/gen044.svg'\"></span>\r\n </span>\r\n <!--end::Svg Icon-->\r\n <!--end::Icon-->\r\n <!--begin::Wrapper-->\r\n <div class=\"d-flex flex-stack flex-grow-1\">\r\n <!--begin::Content-->\r\n <div class=\"fw-bold\">\r\n <div class=\"fs-6 text-gray-700\">\r\n {{utilityService.getResourceValue(\"ActivateConfirmation\")}}\r\n </div>\r\n </div>\r\n <!--end::Content-->\r\n </div>\r\n <!--end::Wrapper-->\r\n </div>\r\n <div class=\"note note-warning text-center\">\r\n </div>\r\n <div class=\"table-responsive\">\r\n <!-- begin::Table -->\r\n <table id=\"tableConfirmation\" 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 <th class=\"min-w-150\">{{utilityService.getResourceValue(\"Name\")}}</th>\r\n <th class=\"min-w-150\">{{utilityService.getResourceValue(\"Email\")}}</th>\r\n <th class=\"min-w-50\" *ngIf=\"SelectedUserList.length>1\">{{utilityService.getResourceValue(\"Action\")}}</th>\r\n </tr>\r\n </thead>\r\n <tbody class=\"fw-bold text-gray-600 border-0\">\r\n <tr *ngFor=\"let user of SelectedUserList\" class=\"trItem\">\r\n <td *ngIf=\"language=='en'\" class=\"text-dark\">{{user.name.english}}</td>\r\n <td *ngIf=\"language=='ar'\" class=\"text-dark\">{{user.name.arabic}}</td>\r\n\r\n <td>{{user.username}}</td>\r\n <td *ngIf=\"SelectedUserList.length>1\">\r\n <button type=\"button\" (click)=\"deleteUserFromList(user)\"\r\n class=\"btn btn-light-danger btn-icon btn-sm\">\r\n <i class=\"fas fa-trash\"></i>\r\n </button>\r\n </td>\r\n\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n <div class=\"text-center pt-7\">\r\n <button #CloseActivationEmailModal id=\"CloseActivationEmailModal\" type=\"button\" aria-label=\"Close\" class=\"btn btn-light me-3 btn-sm\" (click)=\"modal.dismiss()\">{{utilityService.getResourceValue(\"CancelLabel\")}}</button>\r\n <button type=\"button\" class=\"btn btn-primary btn-sm\" (click)=\"sendActivationEmailForUser()\">{{utilityService.getResourceValue(\"SaveLabel\")}}</button>\r\n </div>\r\n </div>\r\n</ng-template>\r\n\r\n<!-- confirmation Message Modal -->\r\n<ng-template #ConfirmationModal 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\" (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(\"ConfirmationMessage\")}}</h1>\r\n </div>\r\n <div class=\"notice d-flex bg-light-warning rounded border-warning border border-dashed mb-10 p-6\">\r\n <!--begin::Icon-->\r\n <!--begin::Svg Icon | path: icons/duotune/general/gen044.svg-->\r\n <span class=\"svg-icon svg-icon-2tx svg-icon-warning me-4\">\r\n <span [inlineSVG]=\"'./src/assets/images/gen044.svg'\"></span>\r\n </span>\r\n <!--end::Svg Icon-->\r\n <!--end::Icon-->\r\n <!--begin::Wrapper-->\r\n <div class=\"d-flex flex-stack flex-grow-1\">\r\n <!--begin::Content-->\r\n <div class=\"fw-bold\">\r\n <div class=\"fs-6 text-gray-700\">\r\n {{ConfirmationMessage}}\r\n </div>\r\n </div>\r\n <!--end::Content-->\r\n </div>\r\n <!--end::Wrapper-->\r\n </div>\r\n <div class=\"table-responsive\">\r\n <!-- begin::Table -->\r\n <table id=\"tableConfirmation\" 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 <th class=\"min-w-150\">{{utilityService.getResourceValue(\"Name\")}}</th>\r\n <th class=\"min-w-150\">{{utilityService.getResourceValue(\"Email\")}}</th>\r\n <th class=\"min-w-50\" *ngIf=\"SelectedUserList.length>1\">{{utilityService.getResourceValue(\"Action\")}}</th>\r\n </tr>\r\n </thead>\r\n <tbody class=\"fw-bold text-gray-600 border-0\">\r\n <tr *ngFor=\"let user of SelectedUserList\" class=\"trItem\">\r\n <td *ngIf=\"language=='en'\" class=\"text-dark\">{{user.name.english}}</td>\r\n <td *ngIf=\"language=='ar'\" class=\"text-dark\">{{user.name.arabic}}</td>\r\n\r\n <td>{{user.username}}</td>\r\n <td *ngIf=\"SelectedUserList.length>1\">\r\n <button type=\"button\" (click)=\"deleteUserFromList(user)\"\r\n class=\"btn btn-light-danger btn-icon\">\r\n <i class=\"fas fa-trash\"></i>\r\n </button>\r\n </td>\r\n\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n <div class=\"text-center pt-7\">\r\n <button #CloseConfirmationModal id=\"CloseConfirmationModal\" class=\"btn btn-light me-3 btn-sm\" (click)=\"modal.dismiss()\">\r\n {{utilityService.getResourceValue(\"CancelLabel\")}}\r\n </button>\r\n\r\n <button type=\"button\" *ngIf=\"ConfirmationModalType==1\" (click)=\"activateUserList()\"\r\n class=\"btn btn-primary btn-sm\">\r\n {{utilityService.getResourceValue(\"SaveLabel\")}}\r\n </button>\r\n <button type=\"button\" *ngIf=\"ConfirmationModalType==2\" (click)=\"deactivateUserList()\"\r\n class=\"btn btn-primary btn-sm\">\r\n {{utilityService.getResourceValue(\"SaveLabel\")}}\r\n </button>\r\n <button type=\"button\" *ngIf=\"ConfirmationModalType==3\" (click)=\"resetUserPasswordList()\"\r\n class=\"btn btn-primary btn-sm\">\r\n {{utilityService.getResourceValue(\"SaveLabel\")}}\r\n </button>\r\n <button type=\"button\" *ngIf=\"ConfirmationModalType==4\" (click)=\"sendActivationEmailForUser()\"\r\n class=\"btn btn-primary btn-sm\">\r\n {{utilityService.getResourceValue(\"SaveLabel\")}}\r\n </button>\r\n\r\n </div>\r\n </div>\r\n</ng-template>\r\n\r\n\r\n\r\n", components: [{ type: i5.BlockUIComponent, selector: "block-ui", inputs: ["name", "template", "message", "delayStart", "delayStop"] }, { type: i6.ɵd, selector: "BBSF-TextBox", inputs: ["group", "options"], outputs: ["OnChange"] }, { type: i6.ɵh, selector: "BBSF-DropdownList", inputs: ["group", "options"], outputs: ["OnChange", "onClear"] }, { type: i7.MatCheckbox, selector: "mat-checkbox", inputs: ["disableRipple", "color", "tabIndex", "aria-label", "aria-labelledby", "id", "labelPosition", "name", "required", "checked", "disabled", "indeterminate", "aria-describedby", "value"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { type: i8.MatMenu, selector: "mat-menu", exportAs: ["matMenu"] }, { type: i9.EmptyDataComponent, selector: "lib-empty-data", inputs: ["Message", "ShowImage", "ImgURL"] }, { type: i6.ɵs, selector: "BBSF-Paging", inputs: ["options", "group"], outputs: ["Items"] }, { type: i6.ɵc, selector: "BBSF-MultiLingualTextBox", inputs: ["group", "options"], outputs: ["OnChange"] }, { type: i6.ɵi, selector: "BBSF-Phone", inputs: ["group", "options"], outputs: ["OnChange"] }, { type: i6.ɵj, selector: "BBSF-Toggleslide", inputs: ["group", "options"] }], directives: [{ type: i10.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i11.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { type: i11.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i11.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i4.NgbDropdown, selector: "[ngbDropdown]", inputs: ["open", "placement", "container", "autoClose", "display", "dropdownClass"], outputs: ["openChange"], exportAs: ["ngbDropdown"] }, { type: i10.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { type: i4.NgbDropdownToggle, selector: "[ngbDropdownToggle]" }, { type: i4.NgbDropdownMenu, selector: "[ngbDropdownMenu]" }, { type: i10.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i11.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i11.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { 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: i4.NgbDropdownItem, selector: "[ngbDropdownItem]", inputs: ["disabled"] }, { type: i12.InlineSVGDirective, selector: "[inlineSVG]", inputs: ["resolveSVGUrl", "replaceContents", "prepend", "injectComponent", "cacheSVG", "forceEvalStyles", "evalScripts", "inlineSVG", "setSVGAttributes", "removeSVGAttributes", "fallbackImgUrl", "onSVGLoaded"], outputs: ["onSVGInserted", "onSVGFailed"] }] });
|
|
715
|
+
UsersComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.13", ngImport: i0, type: UsersComponent, deps: [{ token: i1.AuthService }, { token: i1.UtilityService }, { token: i1.BBSFTranslateService }, { token: i1.EnvironmentService }, { token: i2.PageInfoService }, { token: i3.userService }, { token: i4.NgbModal }, { token: i1.RequestHandlerService }], target: i0.ɵɵFactoryTarget.Component });
|
|
716
|
+
UsersComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.13", type: UsersComponent, selector: "lib-users", viewQueries: [{ propertyName: "pagingElement", first: true, predicate: ["UserPagingViewElement"], descendants: true }, { propertyName: "permissionSetDDL", first: true, predicate: ["permissionSetDDL"], descendants: true }, { propertyName: "accountStatusDDL", first: true, predicate: ["accountStatusDDL"], descendants: true }, { propertyName: "lockedStatusDDL", first: true, predicate: ["lockedStatusDDL"], descendants: true }, { propertyName: "departmentsDDL", first: true, predicate: ["departmentsDDL"], descendants: true }], ngImport: i0, template: "<block-ui></block-ui>\r\n<div *ngIf=\"ShowPageContent\" class=\"container-fluid\">\r\n <!-- begin::Header -->\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 <form [formGroup]=\"UsersForm\">\r\n <BBSF-TextBox (OnChange)=\"searchClientSide($event)\" [options]=\"searchTextBox\" [group]=\"UsersForm\"></BBSF-TextBox>\r\n </form>\r\n </div>\r\n <div class=\"card-toolbar\">\r\n <!-- begin::Menu -->\r\n <div *ngIf=\"showGeneralBtns\" ngbDropdown class=\"d-inline-block\" [ngStyle]=\"{'display': ShowPageContent==true?'block':'none'}\">\r\n <button (click)=\"loadLists()\" ngbDropdownToggle href=\"javascript:;\" type=\"button\" class=\"btn btn-sm btn-light-primary me-3\" id=\"FiltersDropdown\" title=\"Filter\">\r\n <i class=\"fas fa-filter me-1\"></i>\r\n {{utilityService.getResourceValue(\"Filter\")}}\r\n </button>\r\n <div *ngIf=\"IsFilterLoaded\" ngbDropdownMenu aria-labelledby=\"FiltersDropdown\" class=\" filter-container menu menu-sub menu-sub-dropdown menu-column menu-rounded menu-gray-800 menu-state-bg-light-primary w-250px w-md-500px fw-bold py-3 dropdown-menu dropdown-menu-right\">\r\n <form [formGroup]=\"UsersForm\">\r\n <div class=\"px-7 py-5\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-6\">\r\n <div class=\"mb-10\">\r\n <BBSF-DropdownList #permissionSetDDL [options]=\"permissionSetsOptions\" [group]=\"UsersForm\"></BBSF-DropdownList>\r\n </div>\r\n </div>\r\n <div class=\"col-lg-6\">\r\n <div class=\"mb-10\">\r\n <BBSF-DropdownList #accountStatusDDL [options]=\"accountStatusOptions\" [group]=\"UsersForm\"></BBSF-DropdownList>\r\n </div>\r\n </div>\r\n <div class=\"col-lg-6\">\r\n <div class=\"mb-10\">\r\n <BBSF-DropdownList #lockedStatusDDL [options]=\"lockedStatusOptions\" [group]=\"UsersForm\"></BBSF-DropdownList>\r\n </div>\r\n </div>\r\n <div class=\"col-lg-6\">\r\n <div class=\"mb-10\">\r\n <BBSF-DropdownList #departmentsDDL [options]=\"departmentsOptions\" [group]=\"UsersForm\"></BBSF-DropdownList>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"d-flex justify-content-end\">\r\n <button class=\"btn btn-light btn-active-light-primary pv-reset btn-sm\" id=\"applyFiltersBtn\"\r\n (click)=\"resetFilters()\">\r\n {{utilityService.getResourceValue(\"Reset\")}}\r\n </button>\r\n </div>\r\n </div>\r\n </form>\r\n </div>\r\n </div>\r\n <button *ngIf=\"showGeneralBtns\" href=\"javascript:;\" type=\"button\" (click)=\"exportExcel()\" class=\"btn btn-sm btn-light-primary me-3 bnsights-btn-export\"\r\n title=\"Export\">\r\n <i class=\"fas fa-download me-1\"></i>\r\n {{utilityService.getResourceValue(\"Export\")}}\r\n </button>\r\n <button *ngIf=\"showActivateBtn\" type=\"button\" id=\"btnActivate\" class=\"btn btn-sm btn-light-primary me-3\" href=\"javascript:;\" (click)=\"showConfirmationModal(1, ConfirmationModal)\">\r\n <i class=\"fa fa-history\"></i> {{utilityService.getResourceValue(\"Activate\")}}\r\n </button>\r\n <button *ngIf=\"showDeactivateBtn\" type=\"button\" id=\"btnDeactivate\" class=\"btn btn-sm btn-light-primary me-3\" href=\"javascript:;\" (click)=\"showConfirmationModal(2, ConfirmationModal)\">\r\n <i class=\"fa fa-power-off\"></i>{{utilityService.getResourceValue(\"Deactivate\")}}\r\n </button>\r\n <button *ngIf=\"showResetPassBtn\" type=\"button\" id=\"btnResetPass\" class=\"btn btn-sm btn-light-primary me-3\" href=\"javascript:;\" (click)=\"showConfirmationModal(3, ConfirmationModal)\">\r\n <i class=\"fa fa-cog\"></i>{{utilityService.getResourceValue(\"ResetPassword\")}}\r\n </button>\r\n <button *ngIf=\"showSendEmailBtn\" type=\"button\" id=\"btnResendActivation\" class=\"btn btn-sm btn-light-primary me-3\" href=\"javascript:;\" (click)=\"showConfirmationModal(4 , ConfirmationModal)\">\r\n <i class=\"fa fa-envelope\"></i> {{utilityService.getResourceValue(\"SendActivationEmail\")}}\r\n </button>\r\n <button *ngIf=\"showGeneralBtns\" type=\"button\" class=\"btn btn-sm btn-primary\" title=\"Add\" (click)=\"showAddUserModal(addUserModal)\">\r\n <i class=\"fas fa-plus me-1\"></i>\r\n {{utilityService.getResourceValue(\"Add\")}}\r\n </button>\r\n <!-- end::Menu -->\r\n </div>\r\n </div>\r\n <!-- end::Header -->\r\n <!-- begin::Body -->\r\n <div class=\"card-body py-3\">\r\n <!-- begin::Table container -->\r\n <div class=\"table-responsive\">\r\n <!-- begin::Table -->\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 <th class=\"w-50px d-flex justify-content-center\">\r\n <span>\r\n <label class=\"form-check form-check-sm form-check-custom form-check-solid\">\r\n <mat-checkbox (change)=\"selectAllUserList($event,clientSidePagingResult)\" [checked]=\"allSelected\">\r\n </mat-checkbox>\r\n <!--<input type=\"checkbox\" class=\"form-check-input\" (change)=\"selectAllUserList($event,UserPagingResult)\" id=\"chk_SelectAll\">-->\r\n <span></span>\r\n </label>\r\n </span>\r\n </th>\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(\"Mobile\")}}</th>\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"Roles\")}}</th>\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"Status\")}}</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 <tr *ngFor=\"let user of clientSidePagingResult\">\r\n <td class=\"d-flex justify-content-center\">\r\n <span>\r\n <label class=\"form-check form-check-sm form-check-custom form-check-solid\">\r\n <!--<input type=\"checkbox\" class=\"form-check-input\" (change)=\"updateUserList($event,user)\" id=\"User-{{user.id}}\">-->\r\n <span></span>\r\n <mat-checkbox (change)=\"updateUserList($event,user)\" [(ngModel)]=\"user.selected\">\r\n </mat-checkbox>\r\n </label>\r\n </span>\r\n </td>\r\n <td>\r\n <div class=\"d-flex align-items-center\">\r\n <div class=\"symbol symbol-35px\">\r\n <h6 class=\"symbol-label font-size-h5 font-weight-bold bg-light-primary ml-2 mb-0 me-3\">A</h6>\r\n </div>\r\n <div class=\"d-flex justify-content-start flex-column\">\r\n <a (click)=\"showEditUserModal(user.id,user.idEncrypted,EditUserModal)\" href=\"javascript:void(0)\" class=\"text-dark fw-bolder text-hover-primary fs-6\">{{user.nameStr}}</a>\r\n </div>\r\n </div>\r\n </td>\r\n <td>{{user.username}}</td>\r\n <td>{{user.mobile}}</td>\r\n <td>{{user.permissionset}}</td>\r\n <td>\r\n <span class=\"badge badge-light-success\" *ngIf=\"user.isActive==true\">\r\n {{utilityService.getResourceValue(\"Activate\")}}\r\n </span>\r\n <span class=\"badge badge-light-danger\" *ngIf=\"user.isActive==false\">\r\n {{utilityService.getResourceValue(\"Deactivate\")}}\r\n </span>\r\n </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 <button type=\"button\" class=\"menu-item px-3\" ngbDropdownItem\r\n (click)=\"showEditUserModal(user.id,user.idEncrypted,EditUserModal)\">\r\n <span class=\"menu-link px-3\">{{utilityService.getResourceValue(\"Edit\")}}</span>\r\n </button>\r\n <button ngbDropdownItem class=\"menu-item px-3\" *ngIf=\"user.isActive\" id=\"btnDeactivate\" (click)=\"showActivateUserModal(user,false,ActivateUserModal)\">\r\n <span class=\"menu-link px-3\">{{utilityService.getResourceValue(\"Deactivate\")}}</span>\r\n </button>\r\n <button ngbDropdownItem class=\"menu-item px-3\" id=\"btnactivate\" (click)=\"showActivateUserModal(user,true,ActivateUserModal)\" *ngIf=\"!user.isActive\">\r\n <span class=\"menu-link px-3\">{{utilityService.getResourceValue(\"Activate\")}}</span>\r\n </button>\r\n <button ngbDropdownItem class=\"menu-item px-3\" id=\"btnResetPass\" (click)=\"showResetPasswordUserModal(user , ResetPasswordUserModal)\">\r\n <span class=\"menu-link px-3\">{{utilityService.getResourceValue(\"ResetPassword\")}}</span>\r\n </button>\r\n\r\n <button ngbDropdownItem class=\"menu-item px-3\" id=\"btnResetPass\" (click)=\"showsetPasswordUserModal(user, setPasswordUserModal)\">\r\n <span class=\"menu-link px-3\">{{utilityService.getResourceValue(\"SetPassword\")}}</span>\r\n </button>\r\n\r\n <button ngbDropdownItem class=\"menu-item px-3\" id=\"btnResetPass\" *ngIf=\"!user.isActive\" (click)=\"showSendActivationEmailModal(user , SendActivationEmailModal)\">\r\n <span class=\"menu-link px-3\">{{utilityService.getResourceValue(\"SendActivationEmail\")}}</span>\r\n </button>\r\n </mat-menu>\r\n\r\n\r\n </div>\r\n\r\n </td>\r\n </tr>\r\n <tr *ngIf=\"clientSidePagingResult.length == 0\">\r\n <td colspan=\"6\">\r\n <lib-empty-data></lib-empty-data>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n <!-- end::Table -->\r\n </div>\r\n <!-- end::Table container -->\r\n\r\n </div>\r\n <div class=\"card-footer border-0\">\r\n <!-- begin paging-->\r\n <BBSF-Paging (Items)=\"setUsersListResult($event)\" *ngIf=\"IsFilterLoaded\" [options]=\"UserPaging\"\r\n [group]=\"UsersForm\" #UserPagingViewElement>\r\n </BBSF-Paging>\r\n <!-- End paging-->\r\n </div>\r\n </div>\r\n </div>\r\n\r\n<!-- add user-->\r\n<ng-template #addUserModal 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\" (click)=\"modal.dismiss()\" class=\"btn btn-sm btn-icon btn-active-color-primary\">\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(\"AddUser\")}}</h1>\r\n </div>\r\n <BBSF-Form [options]=\"AddUserFormOptions\">\r\n <BBSF-MultiLingualTextBox [options]=\"AddName\" [group]=\"AddUserForm\"></BBSF-MultiLingualTextBox>\r\n <BBSF-TextBox [options]=\"AddUsername\" [group]=\"AddUserForm\"></BBSF-TextBox>\r\n <BBSF-TextBox [options]=\"AddSamAccount\" [group]=\"AddUserForm\"></BBSF-TextBox>\r\n <BBSF-Phone [options]=\"AddMobileNumber\" [group]=\"AddUserForm\"></BBSF-Phone>\r\n <BBSF-DropdownList [options]=\"AddUserDepartment\" [group]=\"AddUserForm\"></BBSF-DropdownList>\r\n <BBSF-Toggleslide [options]=\"AddSendActivationEmail\" [group]=\"AddUserForm\"></BBSF-Toggleslide>\r\n <BBSF-DropdownList [options]=\"AddUserPermissions\" [group]=\"AddUserForm\"></BBSF-DropdownList>\r\n <div class=\"text-center pt-7\">\r\n <button type=\"button\" #CloseUserModal id=\"CloseUserModal\" data-dismiss=\"modal\" aria-label=\"Close\" class=\"btn btn-light me-3 btn-sm\" (click)=\"modal.dismiss()\">{{utilityService.getResourceValue(\"CancelLabel\")}} </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\r\n </div>\r\n</ng-template>\r\n\r\n<!-- Edit user-->\r\n<ng-template #EditUserModal 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\" (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(\"EditUser\")}}</h1>\r\n </div>\r\n <BBSF-Form [options]=\"EditUserFormOptions\">\r\n <BBSF-MultiLingualTextBox [options]=\"EditName\" [group]=\"EditUserForm\"></BBSF-MultiLingualTextBox>\r\n <BBSF-Phone [options]=\"EditMobileNumber\" [group]=\"EditUserForm\"></BBSF-Phone>\r\n <BBSF-TextBox [options]=\"EditUsername\" [group]=\"EditUserForm\"></BBSF-TextBox>\r\n <BBSF-TextBox [options]=\"EditEmail\" [group]=\"EditUserForm\"></BBSF-TextBox>\r\n <BBSF-TextBox [options]=\"EditSamAccount\" [group]=\"EditUserForm\"></BBSF-TextBox>\r\n <BBSF-DropdownList [options]=\"EditUserDepartment\" [group]=\"EditUserForm\"></BBSF-DropdownList>\r\n <BBSF-DropdownList [options]=\"EditUserPermissions\" [group]=\"EditUserForm\"></BBSF-DropdownList>\r\n <div class=\"text-center pt-7\">\r\n <button type=\"button\" data-dismiss=\"modal\" #CloseEditUserModal id=\"CloseEditUserModal\" aria-label=\"Close\" class=\"btn btn-light me-3 btn-sm\" (click)=\"modal.dismiss()\">{{utilityService.getResourceValue(\"CancelLabel\")}}</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\r\n </div>\r\n</ng-template>\r\n<!-- Deactivate/Activate User Modal -->\r\n<ng-template #ActivateUserModal 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\" (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\" *ngIf=\"!ShowActivateModelData\" id=\"exampleModalLabel\">\r\n {{utilityService.getResourceValue(\"Deactivate\")}}\r\n </h1>\r\n <h1 class=\"mb-3\" *ngIf=\"ShowActivateModelData\" id=\"exampleModalLabel\">\r\n {{utilityService.getResourceValue(\"Activate\")}}\r\n </h1>\r\n </div>\r\n <div class=\"notice d-flex bg-light-warning rounded border-warning border border-dashed mb-10 p-6\">\r\n <!--begin::Icon-->\r\n <!--begin::Svg Icon | path: icons/duotune/general/gen044.svg-->\r\n <span class=\"svg-icon svg-icon-2tx svg-icon-warning me-4\">\r\n <span [inlineSVG]=\"'./src/assets/images/gen044.svg'\"></span>\r\n </span>\r\n <!--end::Svg Icon-->\r\n <!--end::Icon-->\r\n <!--begin::Wrapper-->\r\n <div class=\"d-flex flex-stack flex-grow-1\">\r\n <!--begin::Content-->\r\n <div class=\"fw-bold\">\r\n <div class=\"fs-6 text-gray-700\" *ngIf=\"!ShowActivateModelData\">\r\n {{utilityService.getResourceValue(\"DeactivateConfirmation\")}}\r\n </div>\r\n <div class=\"fs-6 text-gray-700\" *ngIf=\"ShowActivateModelData\">\r\n {{utilityService.getResourceValue(\"ActivateConfirmation\")}}\r\n </div>\r\n </div>\r\n <!--end::Content-->\r\n </div>\r\n <!--end::Wrapper-->\r\n </div>\r\n <div id=\"\" class=\"\">\r\n <div class=\"table-responsive\">\r\n <table id=\"tableConfirmation\" class=\"table align-middle table-row-dashed fs-6 gy-5 dataTable no-footer\">\r\n <thead>\r\n <tr>\r\n <th class=\"min-w-150\">{{utilityService.getResourceValue(\"Name\")}}</th>\r\n <th class=\"min-w-150\">{{utilityService.getResourceValue(\"Email\")}}</th>\r\n </tr>\r\n </thead>\r\n <tbody class=\"fw-bold text-gray-600 border-0\">\r\n <tr class=\"trItem\">\r\n <td>{{Name}}</td>\r\n <td>{{Email}}</td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n </div>\r\n <div class=\"text-center pt-7\">\r\n <button type=\"button\" #CloseActivateUserModal id=\"CloseActivateUserModal\" data-dismiss=\"modal\" aria-label=\"Close\" class=\"btn btn-light me-3 btn-sm\" (click)=\"modal.dismiss()\">{{utilityService.getResourceValue(\"CancelLabel\")}} </button>\r\n <button type=\"button\" *ngIf=\"!ShowActivateModelData\" (click)=\"deactivate()\"\r\n class=\"btn btn-primary btn-sm\">\r\n {{utilityService.getResourceValue(\"SaveLabel\")}}\r\n </button>\r\n <button type=\"button\" *ngIf=\"ShowActivateModelData\" (click)=\"activate()\"\r\n class=\"btn btn-primary btn-sm\">\r\n {{utilityService.getResourceValue(\"SaveLabel\")}}\r\n </button>\r\n\r\n </div>\r\n </div>\r\n</ng-template>\r\n<!-- ResetPassword User Modal -->\r\n<ng-template #ResetPasswordUserModal 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\" (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(\"ResetPassword\")}}</h1>\r\n </div>\r\n <div class=\"notice d-flex bg-light-warning rounded border-warning border border-dashed mb-10 p-6\">\r\n <!--begin::Icon-->\r\n <!--begin::Svg Icon | path: icons/duotune/general/gen044.svg-->\r\n <span class=\"svg-icon svg-icon-2tx svg-icon-warning me-4\">\r\n <span [inlineSVG]=\"'./src/assets/images/gen044.svg'\"></span>\r\n </span>\r\n <!--end::Svg Icon-->\r\n <!--end::Icon-->\r\n <!--begin::Wrapper-->\r\n <div class=\"d-flex flex-stack flex-grow-1\">\r\n <!--begin::Content-->\r\n <div class=\"fw-bold\">\r\n <div class=\"fs-6 text-gray-700\">\r\n {{utilityService.getResourceValue(\"ResetPasswordConfirmation\")}}\r\n </div>\r\n </div>\r\n <!--end::Content-->\r\n </div>\r\n <!--end::Wrapper-->\r\n </div>\r\n <div id=\"\" class=\"\">\r\n <div class=\"table-responsive\">\r\n <!-- begin::Table -->\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 <th class=\"min-w-200\">{{utilityService.getResourceValue(\"Name\")}}</th>\r\n <th class=\"min-w-200\">{{utilityService.getResourceValue(\"Email\")}}</th>\r\n </tr>\r\n </thead>\r\n <tbody class=\"fw-bold text-gray-600 border-0\">\r\n <tr class=\"trItem\">\r\n <td class=\"text-dark\">{{Name}}</td>\r\n <td>{{Email}}</td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n </div>\r\n\r\n <div class=\"text-center pt-7\">\r\n <button id=\"CloseResetPasswordUserModal\" #CloseResetPasswordUserModal type=\"button\" data-dismiss=\"modal\" aria-label=\"Close\" class=\"btn btn-light me-3 btn-sm\" (click)=\"modal.dismiss()\">{{utilityService.getResourceValue(\"CancelLabel\")}}</button>\r\n\r\n <button type=\"button\" (click)=\"resetPassword()\" class=\"btn btn-primary btn-sm\">\r\n {{utilityService.getResourceValue(\"SaveLabel\")}}\r\n </button>\r\n </div>\r\n </div>\r\n</ng-template>\r\n\r\n<!-- setPassword User Modal -->\r\n<ng-template #setPasswordUserModal 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\" (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(\"SetPassword\")}}</h1>\r\n </div>\r\n <div class=\"notice d-flex bg-light-warning rounded border-warning border border-dashed mb-10 p-6\">\r\n <!--begin::Icon-->\r\n <!--begin::Svg Icon | path: icons/duotune/general/gen044.svg-->\r\n <span class=\"svg-icon svg-icon-2tx svg-icon-warning me-4\">\r\n <span [inlineSVG]=\"'./src/assets/images/gen044.svg'\"></span>\r\n </span>\r\n <!--end::Svg Icon-->\r\n <!--end::Icon-->\r\n <!--begin::Wrapper-->\r\n <div class=\"d-flex flex-stack flex-grow-1\">\r\n <!--begin::Content-->\r\n <div class=\"fw-bold\">\r\n <div class=\"fs-6 text-gray-700\">\r\n {{utilityService.getResourceValue(\"SetPasswordConfirmation\")}}\r\n </div>\r\n </div>\r\n <!--end::Content-->\r\n </div>\r\n <!--end::Wrapper-->\r\n </div>\r\n <div class=\"table-responsive\">\r\n <!-- begin::Table -->\r\n <BBSF-Form [options]=\"SetUserPasswordFormOptions\">\r\n <table id=\"tableConfirmation\" 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 <th class=\"min-w-150\"> {{utilityService.getResourceValue(\"Name\")}}</th>\r\n <th class=\"min-w-150\"> {{utilityService.getResourceValue(\"Email\")}}</th>\r\n <th class=\"min-w-150\"> {{utilityService.getResourceValue(\"Password\")}}</th>\r\n <th class=\"min-w-150\"> {{utilityService.getResourceValue(\"ConfirmPassword\")}}</th>\r\n </tr>\r\n </thead>\r\n <tbody class=\"fw-bold text-gray-600 border-0\">\r\n <tr class=\"trItem\">\r\n <td>{{Name}}</td>\r\n <td>{{Email}}</td>\r\n <td>\r\n <BBSF-TextBox [options]=\"Password\" [group]=\"SetUserPasswordForm\"></BBSF-TextBox>\r\n </td>\r\n <td>\r\n <BBSF-TextBox [options]=\"PasswordConfirmation\" [group]=\"SetUserPasswordForm\"></BBSF-TextBox>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n <div class=\"text-center pt-7\">\r\n <button id=\"ClosesetPasswordUserModal\" #ClosesetPasswordUserModal type=\"button\" aria-label=\"Close\" class=\"btn btn-light me-3 btn-sm\" (click)=\"modal.dismiss()\">{{utilityService.getResourceValue(\"CancelLabel\")}}</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\r\n </div>\r\n \r\n\r\n </div>\r\n</ng-template>\r\n\r\n<!-- Send Activation Email Modal -->\r\n<ng-template #SendActivationEmailModal 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\" (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(\"SendActivationEmail\")}}</h1>\r\n </div>\r\n <div class=\"notice d-flex bg-light-warning rounded border-warning border border-dashed mb-10 p-6\">\r\n <!--begin::Icon-->\r\n <!--begin::Svg Icon | path: icons/duotune/general/gen044.svg-->\r\n <span class=\"svg-icon svg-icon-2tx svg-icon-warning me-4\">\r\n <span [inlineSVG]=\"'./src/assets/images/gen044.svg'\"></span>\r\n </span>\r\n <!--end::Svg Icon-->\r\n <!--end::Icon-->\r\n <!--begin::Wrapper-->\r\n <div class=\"d-flex flex-stack flex-grow-1\">\r\n <!--begin::Content-->\r\n <div class=\"fw-bold\">\r\n <div class=\"fs-6 text-gray-700\">\r\n {{utilityService.getResourceValue(\"ActivateConfirmation\")}}\r\n </div>\r\n </div>\r\n <!--end::Content-->\r\n </div>\r\n <!--end::Wrapper-->\r\n </div>\r\n <div class=\"note note-warning text-center\">\r\n </div>\r\n <div class=\"table-responsive\">\r\n <!-- begin::Table -->\r\n <table id=\"tableConfirmation\" 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 <th class=\"min-w-150\">{{utilityService.getResourceValue(\"Name\")}}</th>\r\n <th class=\"min-w-150\">{{utilityService.getResourceValue(\"Email\")}}</th>\r\n <th class=\"min-w-50\" *ngIf=\"SelectedUserList.length>1\">{{utilityService.getResourceValue(\"Action\")}}</th>\r\n </tr>\r\n </thead>\r\n <tbody class=\"fw-bold text-gray-600 border-0\">\r\n <tr *ngFor=\"let user of SelectedUserList\" class=\"trItem\">\r\n <td class=\"text-dark\">{{user.nameStr}}</td>\r\n\r\n <td>{{user.username}}</td>\r\n <td *ngIf=\"SelectedUserList.length>1\">\r\n <button type=\"button\" (click)=\"deleteUserFromList(user)\"\r\n class=\"btn btn-light-danger btn-icon btn-sm\">\r\n <i class=\"fas fa-trash\"></i>\r\n </button>\r\n </td>\r\n\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n <div class=\"text-center pt-7\">\r\n <button #CloseActivationEmailModal id=\"CloseActivationEmailModal\" type=\"button\" aria-label=\"Close\" class=\"btn btn-light me-3 btn-sm\" (click)=\"modal.dismiss()\">{{utilityService.getResourceValue(\"CancelLabel\")}}</button>\r\n <button type=\"button\" class=\"btn btn-primary btn-sm\" (click)=\"sendActivationEmailForUser()\">{{utilityService.getResourceValue(\"SaveLabel\")}}</button>\r\n </div>\r\n </div>\r\n</ng-template>\r\n\r\n<!-- confirmation Message Modal -->\r\n<ng-template #ConfirmationModal 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\" (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(\"ConfirmationMessage\")}}</h1>\r\n </div>\r\n <div class=\"notice d-flex bg-light-warning rounded border-warning border border-dashed mb-10 p-6\">\r\n <!--begin::Icon-->\r\n <!--begin::Svg Icon | path: icons/duotune/general/gen044.svg-->\r\n <span class=\"svg-icon svg-icon-2tx svg-icon-warning me-4\">\r\n <span [inlineSVG]=\"'./src/assets/images/gen044.svg'\"></span>\r\n </span>\r\n <!--end::Svg Icon-->\r\n <!--end::Icon-->\r\n <!--begin::Wrapper-->\r\n <div class=\"d-flex flex-stack flex-grow-1\">\r\n <!--begin::Content-->\r\n <div class=\"fw-bold\">\r\n <div class=\"fs-6 text-gray-700\">\r\n {{ConfirmationMessage}}\r\n </div>\r\n </div>\r\n <!--end::Content-->\r\n </div>\r\n <!--end::Wrapper-->\r\n </div>\r\n <div class=\"table-responsive\">\r\n <!-- begin::Table -->\r\n <table id=\"tableConfirmation\" 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 <th class=\"min-w-150\">{{utilityService.getResourceValue(\"Name\")}}</th>\r\n <th class=\"min-w-150\">{{utilityService.getResourceValue(\"Email\")}}</th>\r\n <th class=\"min-w-50\" *ngIf=\"SelectedUserList.length>1\">{{utilityService.getResourceValue(\"Action\")}}</th>\r\n </tr>\r\n </thead>\r\n <tbody class=\"fw-bold text-gray-600 border-0\">\r\n <tr *ngFor=\"let user of SelectedUserList\" class=\"trItem\">\r\n <td class=\"text-dark\">{{user.nameStr}}</td>\r\n\r\n <td>{{user.username}}</td>\r\n <td *ngIf=\"SelectedUserList.length>1\">\r\n <button type=\"button\" (click)=\"deleteUserFromList(user)\"\r\n class=\"btn btn-light-danger btn-icon\">\r\n <i class=\"fas fa-trash\"></i>\r\n </button>\r\n </td>\r\n\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n <div class=\"text-center pt-7\">\r\n <button #CloseConfirmationModal id=\"CloseConfirmationModal\" class=\"btn btn-light me-3 btn-sm\" (click)=\"modal.dismiss()\">\r\n {{utilityService.getResourceValue(\"CancelLabel\")}}\r\n </button>\r\n\r\n <button type=\"button\" *ngIf=\"ConfirmationModalType==1\" (click)=\"activateUserList()\"\r\n class=\"btn btn-primary btn-sm\">\r\n {{utilityService.getResourceValue(\"SaveLabel\")}}\r\n </button>\r\n <button type=\"button\" *ngIf=\"ConfirmationModalType==2\" (click)=\"deactivateUserList()\"\r\n class=\"btn btn-primary btn-sm\">\r\n {{utilityService.getResourceValue(\"SaveLabel\")}}\r\n </button>\r\n <button type=\"button\" *ngIf=\"ConfirmationModalType==3\" (click)=\"resetUserPasswordList()\"\r\n class=\"btn btn-primary btn-sm\">\r\n {{utilityService.getResourceValue(\"SaveLabel\")}}\r\n </button>\r\n <button type=\"button\" *ngIf=\"ConfirmationModalType==4\" (click)=\"sendActivationEmailForUser()\"\r\n class=\"btn btn-primary btn-sm\">\r\n {{utilityService.getResourceValue(\"SaveLabel\")}}\r\n </button>\r\n\r\n </div>\r\n </div>\r\n</ng-template>\r\n\r\n\r\n\r\n", components: [{ type: i5.BlockUIComponent, selector: "block-ui", inputs: ["name", "template", "message", "delayStart", "delayStop"] }, { type: i6.ɵd, selector: "BBSF-TextBox", inputs: ["group", "options"], outputs: ["OnChange"] }, { type: i6.ɵh, selector: "BBSF-DropdownList", inputs: ["group", "options"], outputs: ["OnChange", "onClear"] }, { type: i7.MatCheckbox, selector: "mat-checkbox", inputs: ["disableRipple", "color", "tabIndex", "aria-label", "aria-labelledby", "id", "labelPosition", "name", "required", "checked", "disabled", "indeterminate", "aria-describedby", "value"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { type: i8.MatMenu, selector: "mat-menu", exportAs: ["matMenu"] }, { type: i9.EmptyDataComponent, selector: "lib-empty-data", inputs: ["Message", "ShowImage", "ImgURL"] }, { type: i6.ɵs, selector: "BBSF-Paging", inputs: ["options", "group"], outputs: ["Items"] }, { type: i6.ɵv, selector: "BBSF-Form", inputs: ["options"] }, { type: i6.ɵc, selector: "BBSF-MultiLingualTextBox", inputs: ["group", "options"], outputs: ["OnChange"] }, { type: i6.ɵi, selector: "BBSF-Phone", inputs: ["group", "options"], outputs: ["OnChange"] }, { type: i6.ɵj, selector: "BBSF-Toggleslide", inputs: ["group", "options"] }], directives: [{ type: i10.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i11.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { type: i11.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i11.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i4.NgbDropdown, selector: "[ngbDropdown]", inputs: ["open", "placement", "container", "autoClose", "display", "dropdownClass"], outputs: ["openChange"], exportAs: ["ngbDropdown"] }, { type: i10.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { type: i4.NgbDropdownToggle, selector: "[ngbDropdownToggle]" }, { type: i4.NgbDropdownMenu, selector: "[ngbDropdownMenu]" }, { type: i10.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i11.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i11.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { 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: i4.NgbDropdownItem, selector: "[ngbDropdownItem]", inputs: ["disabled"] }, { type: i12.InlineSVGDirective, selector: "[inlineSVG]", inputs: ["resolveSVGUrl", "replaceContents", "prepend", "injectComponent", "cacheSVG", "forceEvalStyles", "evalScripts", "inlineSVG", "setSVGAttributes", "removeSVGAttributes", "fallbackImgUrl", "onSVGLoaded"], outputs: ["onSVGInserted", "onSVGFailed"] }] });
|
|
707
717
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.13", ngImport: i0, type: UsersComponent, decorators: [{
|
|
708
718
|
type: Component,
|
|
709
719
|
args: [{
|
|
710
720
|
selector: 'lib-users',
|
|
711
721
|
templateUrl: './users.component.html'
|
|
712
722
|
}]
|
|
713
|
-
}], ctorParameters: function () { return [{ type: i1.AuthService }, { type: i1.UtilityService }, { type: i1.BBSFTranslateService }, { type: i1.EnvironmentService }, { type: i2.PageInfoService }, { type: i3.userService }, { type: i4.NgbModal }]; }, propDecorators: {
|
|
723
|
+
}], ctorParameters: function () { return [{ type: i1.AuthService }, { type: i1.UtilityService }, { type: i1.BBSFTranslateService }, { type: i1.EnvironmentService }, { type: i2.PageInfoService }, { type: i3.userService }, { type: i4.NgbModal }, { type: i1.RequestHandlerService }]; }, propDecorators: { pagingElement: [{
|
|
714
724
|
type: ViewChild,
|
|
715
725
|
args: ['UserPagingViewElement', { static: false }]
|
|
716
|
-
}], CloseUserModal: [{
|
|
717
|
-
type: ViewChild,
|
|
718
|
-
args: ['CloseUserModal', { static: false }]
|
|
719
|
-
}], CloseEditUserModal: [{
|
|
720
|
-
type: ViewChild,
|
|
721
|
-
args: ['CloseEditUserModal', { static: false }]
|
|
722
|
-
}], EditUserModal: [{
|
|
723
|
-
type: ViewChild,
|
|
724
|
-
args: ['EditUserModal', { static: false }]
|
|
725
|
-
}], CloseResetPasswordUserModal: [{
|
|
726
|
-
type: ViewChild,
|
|
727
|
-
args: ['CloseResetPasswordUserModal', { static: false }]
|
|
728
|
-
}], ClosesetPasswordUserModal: [{
|
|
729
|
-
type: ViewChild,
|
|
730
|
-
args: ['ClosesetPasswordUserModal', { static: false }]
|
|
731
|
-
}], CloseActivationEmailModal: [{
|
|
732
|
-
type: ViewChild,
|
|
733
|
-
args: ['CloseActivationEmailModal', { static: false }]
|
|
734
|
-
}], CloseConfirmationModal: [{
|
|
735
|
-
type: ViewChild,
|
|
736
|
-
args: ['CloseConfirmationModal', { static: false }]
|
|
737
726
|
}], permissionSetDDL: [{
|
|
738
727
|
type: ViewChild,
|
|
739
728
|
args: ['permissionSetDDL', { static: false }]
|
|
@@ -747,4 +736,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.13", ngImpo
|
|
|
747
736
|
type: ViewChild,
|
|
748
737
|
args: ['departmentsDDL', { static: false }]
|
|
749
738
|
}] } });
|
|
750
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlcnMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmJzZi1hZG1pbi1wb3J0YWwvc3JjL2xpYi9QYWdlcy91c2Vycy91c2Vycy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9iYnNmLWFkbWluLXBvcnRhbC9zcmMvbGliL1BhZ2VzL3VzZXJzL3VzZXJzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFzQixTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSwwQkFBMEIsRUFBRSxZQUFZLEVBQUUsY0FBYyxFQUFFLGtCQUFrQixFQUFFLGdCQUFnQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDM0wsT0FBTyxFQUFFLGFBQWEsRUFBRSxlQUFlLEVBQUUsVUFBVSxFQUFFLGFBQWEsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3BHLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUV4RSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFFMUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDcEMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGlEQUFpRCxDQUFDOzs7Ozs7Ozs7Ozs7OztBQVNsRixNQUFNLE9BQU8sY0FBYztJQWlIekIsWUFBb0IsV0FBd0IsRUFBUyxjQUE4QixFQUFVLG9CQUEwQyxFQUFVLGtCQUFzQyxFQUFVLGVBQWdDLEVBQ3ZOLFdBQXdCLEVBQVUsWUFBc0I7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LEVBQUUsS0FBSyxFQUFFO2dCQUVKLGdCQUFnQjtzQkFBakUsU0FBUzt1QkFBQyxrQkFBa0IsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7Z0JBQ0UsZ0JBQWdCO3NCQUFqRSxTQUFTO3VCQUFDLGtCQUFrQixFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTtnQkFDQyxlQUFlO3NCQUEvRCxTQUFTO3VCQUFDLGlCQUFpQixFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTtnQkFDQyxjQUFjO3NCQUE3RCxTQUFTO3VCQUFDLGdCQUFnQixFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRWxlbWVudFJlZiwgT25Jbml0LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBDb3VudHJ5LCBDdXN0b21WYWxpZGF0aW9uLCBGaWx0ZXJUeXBlLCBJbnB1dFR5cGUsIE11bHRpTGluZ3VhbFRleHRCb3hPcHRpb25zLCBQaG9uZU9wdGlvbnMsIFRleHRCb3hPcHRpb25zLCBUb2dnbGVTbGlkZU9wdGlvbnMsIEVuZ2xpc2hBcmFiaWNEVE8gfSBmcm9tICdAYm5zaWdodHMvYmJzZi1jb250cm9scyc7XHJcbmltcG9ydCB7IENvbnRyb2xMYXlvdXQsIERyb3Bkb3duT3B0aW9ucywgRmlsdGVySXRlbSwgUGFnaW5nT3B0aW9ucyB9IGZyb20gJ0BibnNpZ2h0cy9iYnNmLWNvbnRyb2xzJztcclxuaW1wb3J0IHsgQWRkVXNlck1vZGVsIH0gZnJvbSAnLi4vc2hhcmVkL21vZGVscy9Vc2VyTW9kZWxzL0FkZFVzZXJNb2RlbCc7XHJcbmltcG9ydCB7IERyb3Bkb3duc1Jlc3BvbnNlTW9kZWwgfSBmcm9tICcuLi9zaGFyZWQvbW9kZWxzL1VzZXJNb2RlbHMvRHJvcGRvd25zUmVzcG9uc2VNb2RlbCc7XHJcbmltcG9ydCB7IEVkaXRVc2VyTW9kZWwgfSBmcm9tICcuLi9zaGFyZWQvbW9kZWxzL1VzZXJNb2RlbHMvRWRpdFVzZXJNb2RlbCc7XHJcbmltcG9ydCB7IHVzZXJTZXJ2aWNlIH0gZnJvbSAnLi4vc2hhcmVkL1NlcnZpY2VzL3VzZXJTZXJ2aWNlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBIdHRwUGFyYW1zIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQgeyBzYXZlQXMgfSBmcm9tICdmaWxlLXNhdmVyJztcclxuaW1wb3J0IHsgUGFnZUluZm9TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vX21ldHJvbmljL2NvcmUvc2VydmljZXMvcGFnZS1pbmZvLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBOZ2JNb2RhbCB9IGZyb20gJ0BuZy1ib290c3RyYXAvbmctYm9vdHN0cmFwJztcclxuaW1wb3J0IHsgQXV0aFNlcnZpY2UsIFV0aWxpdHlTZXJ2aWNlLCBCQlNGVHJhbnNsYXRlU2VydmljZSwgRW52aXJvbm1lbnRTZXJ2aWNlIH0gZnJvbSAnQGJuc2lnaHRzL2Jic2YtdXRpbGl0aWVzJztcclxuaW1wb3J0IHsgRGF0YVNvdXJjZSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2xsZWN0aW9ucyc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2xpYi11c2VycycsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3VzZXJzLmNvbXBvbmVudC5odG1sJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgVXNlcnNDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG5cclxuICBBcGlVcmwgPSBcIi9hcGkvYWRtaW4vVXNlcnMvXCJcclxuICBTdWJoZWFkZXJUaXRsZSA9IHRoaXMudXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZSgnVXNlcnMnKTtcclxuICBTaG93VG9vbGJhciA9IHRydWU7XHJcbiAgU2hvd2JyZWFkQ3J1bWIgPSBmYWxzZTtcclxuICBTaG93UGFnZUNvbnRlbnQgPSBmYWxzZTtcclxuICBwZXJtaXNzaW9uU2V0c09wdGlvbnM6IERyb3Bkb3duT3B0aW9ucztcclxuICBhY2NvdW50U3RhdHVzT3B0aW9uczogRHJvcGRvd25PcHRpb25zO1xyXG4gIGxvY2tlZFN0YXR1c09wdGlvbnM6IERyb3Bkb3duT3B0aW9ucztcclxuICBkZXBhcnRtZW50c09wdGlvbnM6IERyb3Bkb3duT3B0aW9ucztcclxuICBzZWFyY2hUZXh0Qm94OiBUZXh0Qm94T3B0aW9ucztcclxuICBTZWxlY3RlZFVzZXJMaXN0ID0gW107XHJcbiAgcGVybWlzc2lvblNldExpc3QgPSBbXTtcclxuICBhY2NvdW50U3RhdHVzTGlzdCA9IFtdO1xyXG4gIGxvY2tlZFN0YXR1c0xpc3QgPSBbXTtcclxuICBkZXBhcnRtZW50c0xpc3QgPSBbXTtcclxuICBhY3Rpdml0eVN0YXR1c0xpc3QgPSBbXTtcclxuICBmaWx0ZXJGb3JtID0gbmV3IEZvcm1Hcm91cCh7fSk7XHJcbiAgVXNlcnNGb3JtID0gbmV3IEZvcm1Hcm91cCh7fSk7XHJcbiAgc2hvd0ZpbHRlcjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIFVzZXJQYWdpbmdSZXN1bHQ6IGFueVtdID0gW107XHJcbiAgVXNlclBhZ2luZzogUGFnaW5nT3B0aW9ucztcclxuICBwZXJtaXNzaW9uU2V0c0ZpbHRlcjogRmlsdGVySXRlbTtcclxuICBsb2NrZWRTdGF0dXNGaWx0ZXI6IEZpbHRlckl0ZW07XHJcbiAgYWNjb3VudFN0YXR1c0ZpbHRlcjogRmlsdGVySXRlbTtcclxuICBkZXBhcnRtZW50c0ZpbHRlcjogRmlsdGVySXRlbTtcclxuICBUZXh0SW5wdXRGaWx0ZXI6IEZpbHRlckl0ZW07XHJcbiAgSXNGaWx0ZXJMb2FkZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBJc0ZpbHRlckRhdGFMb2FkZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBAVmlld0NoaWxkKCdVc2VyUGFnaW5nVmlld0VsZW1lbnQnLCB7IHN0YXRpYzogZmFsc2UgfSkgaW5wdXQ6IEVsZW1lbnRSZWY7XHJcblxyXG4gIC8vQWRkIE1vZGVsIENvbnRyb2xzXHJcbiAgQWRkVXNlckZvcm0gPSBuZXcgRm9ybUdyb3VwKHt9KTtcclxuICBNdWx0aUxpbmd1YWxOYW1lOiBNdWx0aUxpbmd1YWxUZXh0Qm94T3B0aW9uc1xyXG4gIC8vIE5hbWVJbkVuZ2xpc2g6IFRleHRCb3hPcHRpb25zO1xyXG4gIC8vIE5hbWVJbkFyYWJpYzogVGV4dEJveE9wdGlvbnM7XHJcbiAgTW9iaWxlTnVtYmVyOiBQaG9uZU9wdGlvbnM7XHJcbiAgVXNlcm5hbWU6IFRleHRCb3hPcHRpb25zO1xyXG4gIFNhbUFjY291bnQ6IFRleHRCb3hPcHRpb25zO1xyXG4gIFVzZXJEZXBhcnRtZW50OiBEcm9wZG93bk9wdGlvbnM7XHJcbiAgU2VuZEFjdGl2YXRpb25FbWFpbDogVG9nZ2xlU2xpZGVPcHRpb25zO1xyXG4gIFVzZXJQZXJtaXNzaW9uczogRHJvcGRvd25PcHRpb25zO1xyXG4gIEBWaWV3Q2hpbGQoJ0Nsb3NlVXNlck1vZGFsJywgeyBzdGF0aWM6IGZhbHNlIH0pIENsb3NlVXNlck1vZGFsOiBFbGVtZW50UmVmO1xyXG5cclxuICAvL0VkaXQgTW9kZWwgQ29udHJvbHNcclxuICBFZGl0VXNlckZvcm0gPSBuZXcgRm9ybUdyb3VwKHt9KTtcclxuICBFZGl0TXVsdGlMaW5ndWFsTmFtZTogTXVsdGlMaW5ndWFsVGV4dEJveE9wdGlvbnNcclxuICBFZGl0TW9iaWxlTnVtYmVyOiBQaG9uZU9wdGlvbnM7XHJcbiAgRWRpdFVzZXJuYW1lOiBUZXh0Qm94T3B0aW9ucztcclxuICBFZGl0RW1haWw6IFRleHRCb3hPcHRpb25zO1xyXG4gIEVkaXRTYW1BY2NvdW50OiBUZXh0Qm94T3B0aW9ucztcclxuICBFZGl0VXNlckRlcGFydG1lbnQ6IERyb3Bkb3duT3B0aW9ucztcclxuICBFZGl0VXNlclBlcm1pc3Npb25zOiBEcm9wZG93bk9wdGlvbnM7XHJcbiAgVXNlcklkOiBudW1iZXI7XHJcblxyXG5cclxuICAvL0RlYWN0aXZhdGUvQWN0aXZhdGUgVXNlciBNb2RlbCBDb250cm9sc1xyXG4gIFNob3dBY3RpdmF0ZU1vZGVsRGF0YTogYm9vbGVhbiA9IGZhbHNlXHJcbiAgQWN0aXZhdFVzZXJMaXN0OiBhbnlbXSA9IFtdXHJcbiAgRGVBY3RpdmF0VXNlckxpc3Q6IGFueVtdID0gW11cclxuICBOYW1lOiBzdHJpbmdcclxuICBTYXZlTGFiZWw6IHN0cmluZ1xyXG4gIFVzZXJzOiBzdHJpbmdcclxuICBDYW5jZWxMYWJlbDogc3RyaW5nXHJcbiAgRGVsZXRlTGFiZWw6IHN0cmluZ1xyXG4gIEVtYWlsOiBzdHJpbmdcclxuICBAVmlld0NoaWxkKCdDbG9zZUVkaXRVc2VyTW9kYWwnLCB7IHN0YXRpYzogZmFsc2UgfSkgQ2xvc2VFZGl0VXNlck1vZGFsOiBFbGVtZW50UmVmO1xyXG4gIEBWaWV3Q2hpbGQoJ0VkaXRVc2VyTW9kYWwnLCB7IHN0YXRpYzogZmFsc2UgfSkgRWRpdFVzZXJNb2RhbDogRWxlbWVudFJlZjtcclxuICAvL1Jlc2V0IFBhc3N3b3JkIFVzZXIgTW9kZWwgQ29udHJvbHNcclxuICBSZXNldFBhc3N3b3JkVXNlckxpc3Q6IGFueVtdID0gW11cclxuICBPcGVuUmVzZXRQYXNzd29yZFVzZXJNb2RhbDogYm9vbGVhbiA9IGZhbHNlXHJcbiAgQFZpZXdDaGlsZCgnQ2xvc2VSZXNldFBhc3N3b3JkVXNlck1vZGFsJywgeyBzdGF0aWM6IGZhbHNlIH0pIENsb3NlUmVzZXRQYXNzd29yZFVzZXJNb2RhbDogRWxlbWVudFJlZjtcclxuICAvL3NldCBQYXNzd29yZCBVc2VyIE1vZGVsIENvbnRyb2xzXHJcbiAgU2V0VXNlclBhc3N3b3JkRm9ybSA9IG5ldyBGb3JtR3JvdXAoe30pO1xyXG4gIFBhc3N3b3JkOiBUZXh0Qm94T3B0aW9ucztcclxuICBQYXNzd29yZENvbmZpcm1hdGlvbjogVGV4dEJveE9wdGlvbnM7XHJcbiAgT3BlbnNldFBhc3N3b3JkVXNlck1vZGFsOiBib29sZWFuID0gZmFsc2VcclxuICBjdXN0b21WYWxpZGF0aW9uOiBDdXN0b21WYWxpZGF0aW9uID0gbmV3IEN1c3RvbVZhbGlkYXRpb24oKTtcclxuICBzZXRQYXNzd29yZFVzZXJMaXN0OiBhbnlbXSA9IFtdXHJcbiAgQFZpZXdDaGlsZCgnQ2xvc2VzZXRQYXNzd29yZFVzZXJNb2RhbCcsIHsgc3RhdGljOiBmYWxzZSB9KSBDbG9zZXNldFBhc3N3b3JkVXNlck1vZGFsOiBFbGVtZW50UmVmO1xyXG5cclxuICAvL2RlbGV0ZSBVc2VyIE1vZGVsIENvbnRyb2xzXHJcbiAgVXNlckxpc3Q6IGFueVtdID0gW11cclxuICBPcGVuU2VuZEFjdGl2YXRpb25FbWFpbE1vZGFsOiBib29sZWFuID0gZmFsc2VcclxuICBAVmlld0NoaWxkKCdDbG9zZUFjdGl2YXRpb25FbWFpbE1vZGFsJywgeyBzdGF0aWM6IGZhbHNlIH0pIENsb3NlQWN0aXZhdGlvbkVtYWlsTW9kYWw6IEVsZW1lbnRSZWY7XHJcblxyXG5cclxuXHJcbiAgLy9Db25maXJtYXRpb24gIE1vZGVsIENvbnRyb2xzXHJcbiAgSXNPcGVuQ29uZmlybWF0aW9uTW9kYWw6IGJvb2xlYW47XHJcbiAgQ29uZmlybWF0aW9uTW9kYWxUeXBlOiBudW1iZXIgPSAwO1xyXG4gIENvbmZpcm1hdGlvbk1lc3NhZ2U6IHN0cmluZyA9IFwiXCI7XHJcbiAgQFZpZXdDaGlsZCgnQ2xvc2VDb25maXJtYXRpb25Nb2RhbCcsIHsgc3RhdGljOiBmYWxzZSB9KSBDbG9zZUNvbmZpcm1hdGlvbk1vZGFsOiBFbGVtZW50UmVmO1xyXG5cclxuICBAVmlld0NoaWxkKCdwZXJtaXNzaW9uU2V0RERMJywgeyBzdGF0aWM6IGZhbHNlIH0pIHBlcm1pc3Npb25TZXREREw6IEVsZW1lbnRSZWY7XHJcbiAgQFZpZXdDaGlsZCgnYWNjb3VudFN0YXR1c0RETCcsIHsgc3RhdGljOiBmYWxzZSB9KSBhY2NvdW50U3RhdHVzRERMOiBFbGVtZW50UmVmO1xyXG4gIEBWaWV3Q2hpbGQoJ2xvY2tlZFN0YXR1c0RETCcsIHsgc3RhdGljOiBmYWxzZSB9KSBsb2NrZWRTdGF0dXNEREw6IEVsZW1lbnRSZWY7XHJcbiAgQFZpZXdDaGlsZCgnZGVwYXJ0bWVudHNEREwnLCB7IHN0YXRpYzogZmFsc2UgfSkgZGVwYXJ0bWVudHNEREw6IEVsZW1lbnRSZWY7XHJcblxyXG5cclxuICAvL1VzZXJzIHNlbGVjdGlvblxyXG4gIGFjdGl2YXRlZFVzZXJzU2VsZWN0ZWQ6IG51bWJlciA9IDA7XHJcbiAgZGVBY3RpdmF0ZWRVc2Vyc1NlbGVjdGVkOiBudW1iZXIgPSAwO1xyXG4gIHNob3dBY3RpdmF0ZUJ0bjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHNob3dEZWFjdGl2YXRlQnRuOiBib29sZWFuID0gZmFsc2U7XHJcbiAgc2hvd1NldFBhc3NCdG46IGJvb2xlYW4gPSBmYWxzZTtcclxuICBzaG93UmVzZXRQYXNzQnRuOiBib29sZWFuID0gZmFsc2U7XHJcbiAgc2hvd1NlbmRFbWFpbEJ0bjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHNob3dHZW5lcmFsQnRuczogYm9vbGVhbiA9IHRydWU7XHJcbiAgYWxsU2VsZWN0ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBsYW5ndWFnZTogc3RyaW5nID0gXCJcIjtcclxuICBQcm9kdWN0aW9uTW9kZTogYm9vbGVhbiA9IGZhbHNlXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBhdXRoU2VydmljZTogQXV0aFNlcnZpY2UsIHB1YmxpYyB1dGlsaXR5U2VydmljZTogVXRpbGl0eVNlcnZpY2UsIHByaXZhdGUgYmJzZlRyYW5zbGF0ZVNlcnZpY2U6IEJCU0ZUcmFuc2xhdGVTZXJ2aWNlLCBwcml2YXRlIGVudmlyb25tZW50U2VydmljZTogRW52aXJvbm1lbnRTZXJ2aWNlLCBwcml2YXRlIHBhZ2VJbmZvU2VydmljZTogUGFnZUluZm9TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSB1c2VyU2VydmljZTogdXNlclNlcnZpY2UsIHByaXZhdGUgbW9kYWxTZXJ2aWNlOiBOZ2JNb2RhbCkge1xyXG4gIH1cclxuICBhc3luYyBuZ09uSW5pdCgpIHtcclxuICAgIHRoaXMuU2hvd1BhZ2VDb250ZW50ID0gdHJ1ZTtcclxuICAgIFBhZ2VJbmZvU2VydmljZS5QYWdlVGl0bGUgPSB0aGlzLnV0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJVc2Vyc1wiKVxyXG4gICAgUGFnZUluZm9TZXJ2aWNlLlBhZ2VCcmVhZGNydW1icyA9IFtcclxuICAgICAgeyB0aXRsZTogdGhpcy51dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiSG9tZVwiKSwgcGF0aDonL0FkbWluL0hvbWUnLCBpc1NlcGFyYXRvcjogZmFsc2UsIGlzQWN0aXZlOiBmYWxzZSB9LFxyXG4gICAgICB7IHRpdGxlOiAnJywgcGF0aDogJycsIGlzU2VwYXJhdG9yOiB0cnVlLCBpc0FjdGl2ZTogZmFsc2UgfVxyXG5cclxuICAgIF07XHJcblxyXG4gICAgdGhpcy5wYWdlSW5mb1NlcnZpY2UuY2FsY3VsYXRlVGl0bGUoKTtcclxuICAgIHRoaXMucGFnZUluZm9TZXJ2aWNlLmNhbGN1bGF0ZUJyZWFkY3J1bWJzKCk7XHJcbiAgICB0aGlzLmJic2ZUcmFuc2xhdGVTZXJ2aWNlLm9uTGFuZ0NoYW5nZS5zdWJzY3JpYmUoKGV2ZW50KSA9PiB7XHJcbiAgICAgIHRoaXMuU2hvd1BhZ2VDb250ZW50ID0gZmFsc2U7XHJcbiAgICAgIHRoaXMubGFuZ3VhZ2UgPSBldmVudC5sYW5nO1xyXG4gICAgICB0aGlzLm5nT25Jbml0KCk7XHJcbiAgICB9KVxyXG4gICAgdGhpcy5sYW5ndWFnZSA9IGF3YWl0IHRoaXMudXRpbGl0eVNlcnZpY2UuZ2V0Q3VycmVudExhbmd1YWdlKCk7XHJcbiAgICB0aGlzLlByb2R1Y3Rpb25Nb2RlID0gdGhpcy5lbnZpcm9ubWVudFNlcnZpY2UuZ2V0UHJvZHVjdGlvbk1vZGUoKVxyXG4gICAgdGhpcy5pbml0aWFsaXplUGFnZSgpO1xyXG5cclxuICB9XHJcblxyXG5cclxuXHJcblxyXG4gIFJlaW5pdGlhbGl6ZVVzZXJQYWdpbmcoKSB7XHJcbiAgICBsZXQgZWxlbWVudCA9IHRoaXMuaW5wdXQgYXMgYW55O1xyXG4gICAgZWxlbWVudC5SZWluaXRpYWxpemVQYWdpbmcoKTtcclxuICAgIHRoaXMucmVzZXRVc2Vyc0NvdW50KCk7XHJcbiAgICB0aGlzLmRpc2FibGVCdXR0b25zKCk7XHJcbiAgICB0aGlzLmFsbFNlbGVjdGVkID0gZmFsc2U7XHJcblxyXG4gIH1cclxuXHJcbiAgVXBkYXRlVXNlclBhZ2luZygpIHtcclxuICAgIGxldCBlbGVtZW50ID0gdGhpcy5pbnB1dCBhcyBhbnk7XHJcbiAgICBlbGVtZW50LlVwZGF0ZVBhZ2luZygpO1xyXG4gICAgdGhpcy5yZXNldFVzZXJzQ291bnQoKTtcclxuICAgIHRoaXMuZGlzYWJsZUJ1dHRvbnMoKTtcclxuICAgIHRoaXMuYWxsU2VsZWN0ZWQgPSBmYWxzZTtcclxuXHJcbiAgfVxyXG5cclxuICBzZXRVc2Vyc0xpc3RSZXN1bHQocmVzdWx0KSB7XHJcbiAgICB0aGlzLlVzZXJQYWdpbmdSZXN1bHQgPSByZXN1bHRcclxuICAgIHRoaXMuU2hvd1BhZ2VDb250ZW50ID0gdHJ1ZTtcclxuICAgIHRoaXMucmVzZXRVc2Vyc0NvdW50KCk7XHJcbiAgICB0aGlzLmRpc2FibGVCdXR0b25zKCk7XHJcbiAgICB0aGlzLmFsbFNlbGVjdGVkID0gZmFsc2U7XHJcbiAgICB0aGlzLnV0aWxpdHlTZXJ2aWNlLnN0b3BCbG9ja1VJKCk7XHJcblxyXG4gIH1cclxuXHJcbiAgc2VsZWN0QWxsVXNlckxpc3QoZXZlbnQsIFVzZXJzOiBhbnlbXSkge1xyXG4gICAgaWYgKHRoaXMuVXNlclBhZ2luZ1Jlc3VsdCA9PSBudWxsKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMuVXNlclBhZ2luZ1Jlc3VsdC5mb3JFYWNoKHUgPT4gdS5zZWxlY3RlZCA9IGV2ZW50LmNoZWNrZWQpO1xyXG5cclxuICAgIGlmIChldmVudC5jaGVja2VkKSB7XHJcbiAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBVc2Vycy5sZW5ndGg7IGluZGV4KyspIHtcclxuICAgICAgICBjb25zdCB1c2VyID0gVXNlcnNbaW5kZXhdO1xyXG4gICAgICAgIHRoaXMuU2VsZWN0ZWRVc2VyTGlzdC5wdXNoKHVzZXIpO1xyXG4gICAgICAgIGlmICh1c2VyLmlzQWN0aXZlKSB7XHJcbiAgICAgICAgICB0aGlzLmFjdGl2YXRlZFVzZXJzU2VsZWN0ZWQgKz0gMTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLmRlQWN0aXZhdGVkVXNlcnNTZWxlY3RlZCArPSAxO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICB0aGlzLmFjdGl2YXRlZFVzZXJzU2VsZWN0ZWQgPSBVc2Vycy5maWx0ZXIoKGl0ZW0pID0+IHsgcmV0dXJuIGl0ZW0uaXNBY3RpdmU7IH0pLm1hcCgoaXRlbSkgPT4gaXRlbS5rZXkpLmxlbmd0aDtcclxuICAgICAgdGhpcy5kZUFjdGl2YXRlZFVzZXJzU2VsZWN0ZWQgPSBVc2Vycy5maWx0ZXIoKGl0ZW0pID0+IHsgcmV0dXJuICFpdGVtLmlzQWN0aXZlOyB9KS5tYXAoKGl0ZW0pID0+IGl0ZW0ua2V5KS5sZW5ndGg7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgdGhpcy5TZWxlY3RlZFVzZXJMaXN0ID0gW107XHJcbiAgICAgIHRoaXMuYWN0aXZhdGVkVXNlcnNTZWxlY3RlZCA9IDA7XHJcbiAgICAgIHRoaXMuZGVBY3RpdmF0ZWRVc2Vyc1NlbGVjdGVkID0gMDtcclxuICAgIH1cclxuICAgIHRoaXMuZW5hYmxlQnV0dG9ucygpO1xyXG4gIH1cclxuICB1cGRhdGVVc2VyTGlzdChldmVudCwgVXNlcikge1xyXG4gICAgdGhpcy5Vc2VyUGFnaW5nUmVzdWx0LmZpbmQodSA9PiB1LmlkID09PSBVc2VyLmlkKS5zZWxlY3RlZCA9IGV2ZW50LmNoZWNrZWQ7XHJcbiAgICB0aGlzLmFsbFNlbGVjdGVkID0gdGhpcy5Vc2VyUGFnaW5nUmVzdWx0ICE9IG51bGwgJiYgdGhpcy5Vc2VyUGFnaW5nUmVzdWx0LmV2ZXJ5KHUgPT4gdS5zZWxlY3RlZCk7XHJcbiAgICBpZiAoZXZlbnQuY2hlY2tlZCkge1xyXG4gICAgICB0aGlzLlNlbGVjdGVkVXNlckxpc3QucHVzaChVc2VyKTtcclxuICAgICAgaWYgKFVzZXIuaXNBY3RpdmUpXHJcbiAgICAgICAgdGhpcy5hY3RpdmF0ZWRVc2Vyc1NlbGVjdGVkICs9IDE7XHJcbiAgICAgIGVsc2VcclxuICAgICAgICB0aGlzLmRlQWN0aXZhdGVkVXNlcnNTZWxlY3RlZCArPSAxO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRoaXMuU2VsZWN0ZWRVc2VyTGlzdC5mb3JFYWNoKCh2YWx1ZSwgaW5kZXgpID0+IHtcclxuICAgICAgICBpZiAodmFsdWUuaWQgPT0gVXNlci5pZCkgdGhpcy5TZWxlY3RlZFVzZXJMaXN0LnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgIH0pO1xyXG4gICAgICBpZiAoVXNlci5pc0FjdGl2ZSlcclxuICAgICAgICB0aGlzLmFjdGl2YXRlZFVzZXJzU2VsZWN0ZWQgLT0gMTtcclxuICAgICAgZWxzZVxyXG4gICAgICAgIHRoaXMuZGVBY3RpdmF0ZWRVc2Vyc1NlbGVjdGVkIC09IDE7XHJcbiAgICB9XHJcbiAgICB0aGlzLmVuYWJsZUJ1dHRvbnMoKTtcclxuICB9XHJcbiAgZW5hYmxlQnV0dG9ucygpIHtcclxuICAgIC8vUmVzZXQgYWxsIGJ0bnNcclxuICAgIHRoaXMuZGlzYWJsZUJ1dHRvbnMoKTtcclxuXHJcbiAgICBpZiAodGhpcy5hY3RpdmF0ZWRVc2Vyc1NlbGVjdGVkID09IDAgJiYgdGhpcy5kZUFjdGl2YXRlZFVzZXJzU2VsZWN0ZWQgPT0gMCkge1xyXG4gICAgICB0aGlzLnNob3dHZW5lcmFsQnRucyA9IHRydWU7XHJcblxyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRoaXMuc2hvd0dlbmVyYWxCdG5zID0gZmFsc2U7XHJcblxyXG4gICAgICAvL2lmIG9ubHkgYWN0aXZhdGVkIHVzZXJzXHJcbiAgICAgIGlmICh0aGlzLmFjdGl2YXRlZFVzZXJzU2VsZWN0ZWQgPiAwICYmIHRoaXMuZGVBY3RpdmF0ZWRVc2Vyc1NlbGVjdGVkID09IDApIHtcclxuICAgICAgICB0aGlzLnNob3dEZWFjdGl2YXRlQnRuID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnNob3dSZXNldFBhc3NCdG4gPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2UgaWYgKHRoaXMuZGVBY3RpdmF0ZWRVc2Vyc1NlbGVjdGVkID4gMCAmJiB0aGlzLmFjdGl2YXRlZFVzZXJzU2VsZWN0ZWQgPT0gMCkgICAgIC8vaWYgb25seSBkZUFjdGl2YXRlZCB1c2Vyc1xyXG4gICAgICB7XHJcbiAgICAgICAgdGhpcy5zaG93QWN0aXZhdGVCdG4gPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuc2hvd1NlbmRFbWFpbEJ0biA9IHRydWU7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSBpZiAodGhpcy5hY3RpdmF0ZWRVc2Vyc1NlbGVjdGVkID4gMCAmJiB0aGlzLmRlQWN0aXZhdGVkVXNlcnNTZWxlY3RlZCA+IDApIC8vaWYgYWN0aXZhdGVkIGFuZCBkZWFjdGl2YXRlZCB1c2VycyBzZWxlY3RlZFxyXG4gICAgICB7XHJcbiAgICAgICAgdGhpcy5zaG93UmVzZXRQYXNzQnRuID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnNob3dTZXRQYXNzQnRuID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuICBkaXNhYmxlQnV0dG9ucygpIHtcclxuICAgIC8vUmVzZXQgYWxsIGJ0bnNcclxuICAgIHRoaXMuc2hvd0FjdGl2YXRlQnRuID0gZmFsc2U7XHJcbiAgICB0aGlzLnNob3dEZWFjdGl2YXRlQnRuID0gZmFsc2U7XHJcbiAgICB0aGlzLnNob3dTZW5kRW1haWxCdG4gPSBmYWxzZTtcclxuICAgIHRoaXMuc2hvd1Jlc2V0UGFzc0J0biA9IGZhbHNlO1xyXG4gICAgdGhpcy5zaG93U2V0UGFzc0J0biA9IGZhbHNlO1xyXG4gICAgdGhpcy5zaG93R2VuZXJhbEJ0bnMgPSB0cnVlO1xyXG4gIH1cclxuICByZXNldFVzZXJzQ291bnQoKSB7XHJcbiAgICB0aGlzLlNlbGVjdGVkVXNlckxpc3QgPSBbXTtcclxuICAgIHRoaXMuYWN0aXZhdGVkVXNlcnNTZWxlY3RlZCA9IDA7XHJcbiAgICB0aGlzLmRlQWN0aXZhdGVkVXNlcnNTZWxlY3RlZCA9IDA7XHJcbiAgICB0aGlzLlVzZXJQYWdpbmdSZXN1bHQuZm9yRWFjaCh1ID0+IHUuc2VsZWN0ZWQgPSBmYWxzZSk7XHJcbiAgfVxyXG5cclxuICBsb2FkRmlsdGVycygpIHtcclxuICAgIGlmICh0aGlzLnNob3dGaWx0ZXIgPT09IGZhbHNlKSB7XHJcbiAgICAgIHRoaXMuc2hvd0ZpbHRlciA9IHRydWU7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnNob3dGaWx0ZXIgPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgfVxyXG5cclxuICBsb2FkTGlzdHMoKSB7XHJcbiAgICBpZiAoIXRoaXMuSXNGaWx0ZXJEYXRhTG9hZGVkKSB7XHJcbiAgICAgIHRoaXMudXNlclNlcnZpY2UuTG9hZGRyb3Bkb3ducygpLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XHJcbiAgICAgICAgbGV0IERyb3Bkb3duc1Jlc3BvbnNlTW9kZWwgPSByZXN1bHQgYXMgRHJvcGRvd25zUmVzcG9uc2VNb2RlbDtcclxuICAgICAgICB0aGlzLnBlcm1pc3Npb25TZXRMaXN0ID0gRHJvcGRvd25zUmVzcG9uc2VNb2RlbC5wZXJtZXNzaW9uc2V0cztcclxuICAgICAgICB0aGlzLmFjY291bnRTdGF0dXNMaXN0ID0gRHJvcGRvd25zUmVzcG9uc2VNb2RlbC5hY2NvdW50U3RhdHVzO1xyXG4gICAgICAgIHRoaXMubG9ja2VkU3RhdHVzTGlzdCA9IERyb3Bkb3duc1Jlc3BvbnNlTW9kZWwubG9ja2VkU3RhdHVzO1xyXG4gICAgICAgIHRoaXMuZGVwYXJ0bWVudHNMaXN0ID0gRHJvcGRvd25zUmVzcG9uc2VNb2RlbC5kZXBhcnRtZW50cztcclxuICAgICAgICB0aGlzLmFjdGl2aXR5U3RhdHVzTGlzdCA9IERyb3Bkb3duc1Jlc3BvbnNlTW9kZWwuYWNjb3VudFN0YXR1cztcclxuXHJcbiAgICAgICAgbGV0IHBlcm1pc3Npb25TZXRFbGVtZW50ID0gdGhpcy5wZXJtaXNzaW9uU2V0RERMIGFzIGFueTtcclxuICAgICAgICBsZXQgYWNjb3VudFN0YXR1c0VsZW1lbnQgPSB0aGlzLmFjY291bnRTdGF0dXNEREwgYXMgYW55O1xyXG4gICAgICAgIGxldCBsb2NrZWRTdGF0dXNFbGVtZW50ID0gdGhpcy5sb2NrZWRTdGF0dXNEREwgYXMgYW55O1xyXG4gICAgICAgIGxldCBkZXBhcnRtZW50c0VsZW1lbnQgPSB0aGlzLmRlcGFydG1lbnRzRERMIGFzIGFueTtcclxuXHJcblxyXG4gICAgICAgIHBlcm1pc3Npb25TZXRFbGVtZW50LlVwZGF0ZURhdGFTb3VyY2UodGhpcy5wZXJtaXNzaW9uU2V0TGlzdCk7XHJcblxyXG4gICAgICAgIGFjY291bnRTdGF0dXNFbGVtZW50LlVwZGF0ZURhdGFTb3VyY2UodGhpcy5hY2NvdW50U3RhdHVzTGlzdCk7XHJcblxyXG4gICAgICAgIGxvY2tlZFN0YXR1c0VsZW1lbnQuVXBkYXRlRGF0YVNvdXJjZSh0aGlzLmxvY2tlZFN0YXR1c0xpc3QpO1xyXG5cclxuICAgICAgICBkZXBhcnRtZW50c0VsZW1lbnQuVXBkYXRlRGF0YVNvdXJjZSh0aGlzLmRlcGFydG1lbnRzTGlzdCk7XHJcblxyXG5cclxuICAgICAgICB0aGlzLklzRmlsdGVyRGF0YUxvYWRlZCA9IHRydWU7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuICBpbml0aWFsaXplUGFnZSgpIHtcclxuXHJcbiAgICAvLyBQZXJtaXNzaW9uIFNldHMgSW5pdCAgIFxyXG4gICAgdGhpcy5wZXJtaXNzaW9uU2V0c09wdGlvbnMgPSBuZXcgRHJvcGRvd25PcHRpb25zKCk7XHJcbiAgICB0aGlzLnBlcm1pc3Npb25TZXRzT3B0aW9ucy5OYW1lID0gXCJwZXJtaXNzaW9uc2V0c1wiXHJcbiAgICB0aGlzLnBlcm1pc3Npb25TZXRzT3B0aW9ucy5MYWJlbEtleSA9IFwiUGVybWlzc2lvblNldHNcIlxyXG4gICAgdGhpcy5wZXJtaXNzaW9uU2V0c09wdGlvbnMuU2luZ2xlU2VsZWN0aW9uID0gdHJ1ZTtcclxuICAgIHRoaXMucGVybWlzc2lvblNldHNPcHRpb25zLkFsbG93U2VhcmNoRmlsdGVyID0gdHJ1ZTtcclxuICAgIHRoaXMucGVybWlzc2lvblNldHNPcHRpb25zLlBsYWNlaG9sZGVyID0gXCJcIjtcclxuXHJcbiAgICAvLyBBY2NvdW50IFN0YXR1cyBJbml0XHJcbiAgICB0aGlzLmFjY291bnRTdGF0dXNPcHRpb25zID0gbmV3IERyb3Bkb3duT3B0aW9ucygpO1xyXG4gICAgdGhpcy5hY2NvdW50U3RhdHVzT3B0aW9ucy5OYW1lID0gXCJhY2NvdW50c3RhdHVzXCJcclxuICAgIHRoaXMuYWNjb3VudFN0YXR1c09wdGlvbnMuTGFiZWxLZXkgPSBcIkFjY291bnRTdGF0dXNcIlxyXG4gICAgdGhpcy5hY2NvdW50U3RhdHVzT3B0aW9ucy5TaW5nbGVTZWxlY3Rpb24gPSB0cnVlO1xyXG5cclxuICAgIC8vIExvY2tlZCBTdGF0dXMgSW5pdFxyXG4gICAgdGhpcy5sb2NrZWRTdGF0dXNPcHRpb25zID0gbmV3IERyb3Bkb3duT3B0aW9ucygpO1xyXG4gICAgdGhpcy5sb2NrZWRTdGF0dXNPcHRpb25zLk5hbWUgPSBcImxvY2tlZHN0YXR1c1wiO1xyXG4gICAgdGhpcy5sb2NrZWRTdGF0dXNPcHRpb25zLkxhYmVsS2V5ID0gXCJMb2NrZWRTdGF0dXNcIjtcclxuICAgIHRoaXMubG9ja2VkU3RhdHVzT3B0aW9ucy5TaW5nbGVTZWxlY3Rpb24gPSB0cnVlO1xyXG5cclxuICAgIC8vIGRlcGFydG1lbnRzIGludGlcclxuICAgIHRoaXMuZGVwYXJ0bWVudHNPcHRpb25zID0gbmV3IERyb3Bkb3duT3B0aW9ucygpO1xyXG4gICAgdGhpcy5kZXBhcnRtZW50c09wdGlvbnMuTmFtZSA9IFwiZGVwYXJ0bWVudHNcIlxyXG4gICAgdGhpcy5kZXBhcnRtZW50c09wdGlvbnMuTGFiZWxLZXkgPSBcIkRlcGFydG1lbnRzXCJcclxuICAgIHRoaXMuZGVwYXJ0bWVudHNPcHRpb25zLlNpbmdsZVNlbGVjdGlvbiA9IGZhbHNlO1xyXG4gICAgdGhpcy5kZXBhcnRtZW50c09wdGlvbnMuQWxsb3dTZWFyY2hGaWx0ZXIgPSB0cnVlO1xyXG5cclxuICAgIC8vIFRleHRCb3ggaW50aVxyXG4gICAgdGhpcy5zZWFyY2hUZXh0Qm94ID0gbmV3IFRleHRCb3hPcHRpb25zKCk7XHJcbiAgICB0aGlzLnNlYXJjaFRleHRCb3guTmFtZSA9IFwic2VhcmNoVGV4dEJveFwiXHJcbiAgICB0aGlzLnNlYXJjaFRleHRCb3guSGlkZUxhYmVsID0gdHJ1ZVxyXG4gICAgdGhpcy5zZWFyY2hUZXh0Qm94LlR5cGUgPSBJbnB1dFR5cGUuVGV4dFxyXG4gICAgdGhpcy5zZWFyY2hUZXh0Qm94LlBsYWNlaG9sZGVyID0gdGhpcy51dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiU2VhcmNoQnlOYW1lT3JFbWFpbFwiKVxyXG5cclxuXHJcbiAgICB0aGlzLnBlcm1pc3Npb25TZXRzRmlsdGVyID0gbmV3IEZpbHRlckl0ZW0oKTtcclxuICAgIHRoaXMucGVybWlzc2lvblNldHNGaWx0ZXIuRm9ybUNvbnRyb2xOYW1lID0gXCJwZXJtaXNzaW9uc2V0c1wiXHJcbiAgICB0aGlzLnBlcm1pc3Npb25TZXRzRmlsdGVyLkFjdGlvblBhcmFtZXRlck5hbWUgPSBcInBlcm1pc3Npb25JZHNcIlxyXG4gICAgdGhpcy5wZXJtaXNzaW9uU2V0c0ZpbHRlci5Jc0Zvcm1Db250cm9sID0gdHJ1ZVxyXG4gICAgdGhpcy5wZXJtaXNzaW9uU2V0c0ZpbHRlci5GaWx0ZXJUeXBlID0gRmlsdGVyVHlwZS5Ecm9wZG93bkxpc3RcclxuXHJcbiAgICB0aGlzLmFjY291bnRTdGF0dXNGaWx0ZXIgPSBuZXcgRmlsdGVySXRlbSgpO1xyXG4gICAgdGhpcy5hY2NvdW50U3RhdHVzRmlsdGVyLkZvcm1Db250cm9sTmFtZSA9IFwiYWNjb3VudHN0YXR1c1wiXHJcbiAgICB0aGlzLmFjY291bnRTdGF0dXNGaWx0ZXIuQWN0aW9uUGFyYW1ldGVyTmFtZSA9IFwiYWNjb3VudFN0YXR1c0lEc1wiXHJcbiAgICB0aGlzLmFjY291bnRTdGF0dXNGaWx0ZXIuSXNGb3JtQ29udHJvbCA9IHRydWVcclxuICAgIHRoaXMuYWNjb3VudFN0YXR1c0ZpbHRlci5GaWx0ZXJUeXBlID0gRmlsdGVyVHlwZS5Ecm9wZG93bkxpc3RcclxuXHJcbiAgICB0aGlzLmxvY2tlZFN0YXR1c0ZpbHRlciA9IG5ldyBGaWx0ZXJJdGVtKCk7XHJcbiAgICB0aGlzLmxvY2tlZFN0YXR1c0ZpbHRlci5Gb3JtQ29udHJvbE5hbWUgPSBcImxvY2tlZHN0YXR1c1wiXHJcbiAgICB0aGlzLmxvY2tlZFN0YXR1c0ZpbHRlci5BY3Rpb25QYXJhbWV0ZXJOYW1lID0gXCJsb2NrZWRTdGF0dXNJZHNcIlxyXG4gICAgdGhpcy5sb2NrZWRTdGF0dXNGaWx0ZXIuSXNGb3JtQ29udHJvbCA9IHRydWVcclxuICAgIHRoaXMubG9ja2VkU3RhdHVzRmlsdGVyLkZpbHRlclR5cGUgPSBGaWx0ZXJUeXBlLkRyb3Bkb3duTGlzdFxyXG5cclxuXHJcblxyXG4gICAgdGhpcy5kZXBhcnRtZW50c0ZpbHRlciA9IG5ldyBGaWx0ZXJJdGVtKCk7XHJcbiAgICB0aGlzLmRlcGFydG1lbnRzRmlsdGVyLkZvcm1Db250cm9sTmFtZSA9IFwiZGVwYXJ0bWVudHNcIlxyXG4gICAgdGhpcy5kZXBhcnRtZW50c0ZpbHRlci5BY3Rpb25QYXJhbWV0ZXJOYW1lID0gXCJkZXBhcnRtZW50SWRzXCJcclxuICAgIHRoaXMuZGVwYXJ0bWVudHNGaWx0ZXIuSXNGb3JtQ29udHJvbCA9IHRydWVcclxuICAgIHRoaXMuZGVwYXJ0bWVudHNGaWx0ZXIuRmlsdGVyVHlwZSA9IEZpbHRlclR5cGUuRHJvcGRvd25MaXN0XHJcblxyXG4gICAgdGhpcy5UZXh0SW5wdXRGaWx0ZXIgPSBuZXcgRmlsdGVySXRlbSgpO1xyXG4gICAgdGhpcy5UZXh0SW5wdXRGaWx0ZXIuRm9ybUNvbnRyb2xOYW1lID0gXCJzZWFyY2hUZXh0Qm94XCJcclxuICAgIHRoaXMuVGV4dElucHV0RmlsdGVyLkFjdGlvblBhcmFtZXRlck5hbWUgPSBcIm5hbWVGaWx0ZXJcIlxyXG4gICAgdGhpcy5UZXh0SW5wdXRGaWx0ZXIuSXNGb3JtQ29udHJvbCA9IHRydWVcclxuICAgIHRoaXMuVGV4dElucHV0RmlsdGVyLkZpbHRlclR5cGUgPSBGaWx0ZXJUeXBlLlRleHRCb3hcclxuXHJcblxyXG4gICAgdGhpcy5Vc2VyUGFnaW5nID0gbmV3IFBhZ2luZ09wdGlvbnMoKTtcclxuICAgIHRoaXMuVXNlclBhZ2luZy5BY3Rpb25Qb3N0VVJMID0gdGhpcy5lbnZpcm9ubWVudFNlcnZpY2UuZ2V0QXBpVXJsKCkgKyB0aGlzLkFwaVVybCArICdHZXRVc2Vyc0J5RmlsdGVyJztcclxuICAgIHRoaXMuVXNlclBhZ2luZy5PbktleVByZXNzRmlsdGVyc0NvbnRyb2xOYW1lcyA9IFtcInNlYXJjaFRleHRCb3hcIl1cclxuICAgIHRoaXMuVXNlclBhZ2luZy5Ecm9wZG93bkZpbHRlcnNDb250cm9sTmFtZXMgPSBbXCJwZXJtaXNzaW9uc2V0c1wiLCBcImFjY291bnRzdGF0dXNcIiwgXCJsb2NrZWRzdGF0dXNcIiwgXCJkZXBhcnRtZW50c1wiXTtcclxuICAgIHRoaXMuVXNlclBhZ2luZy5GaWx0ZXJzID0gW3RoaXMucGVybWlzc2lvblNldHNGaWx0ZXIsIHRoaXMubG9ja2VkU3RhdHVzRmlsdGVyLCB0aGlzLmFjY291bnRTdGF0dXNGaWx0ZXIsIHRoaXMuZGVwYXJ0bWVudHNGaWx0ZXIsIHRoaXMuVGV4dElucHV0RmlsdGVyXVxyXG4gICAgdGhpcy5Vc2VyUGFnaW5nLlZhbGlkYXRpb25Ub2tlbiA9IHRoaXMuYXV0aFNlcnZpY2UuYXV0aG9yaXphdGlvbkhlYWRlclZhbHVlKClcclxuICAgIHRoaXMuSXNGaWx0ZXJMb2FkZWQgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgcmVzZXRGaWx0ZXJzKCkge1xyXG4gICAgdGhpcy5Vc2Vyc0Zvcm0uY29udHJvbHNbXCJwZXJtaXNzaW9uc2V0c1wiXS5zZXRWYWx1ZShbXSk7XHJcbiAgICB0aGlzLlVzZXJzRm9ybS5jb250cm9sc1tcImFjY291bnRzdGF0dXNcIl0uc2V0VmFsdWUoW10pO1xyXG4gICAgdGhpcy5Vc2Vyc0Zvcm0uY29udHJvbHNbXCJsb2NrZWRzdGF0dXNcIl0uc2V0VmFsdWUoW10pO1xyXG4gICAgdGhpcy5Vc2Vyc0Zvcm0uY29udHJvbHNbXCJkZXBhcnRtZW50c1wiXS5zZXRWYWx1ZShbXSk7XHJcbiAgICB0aGlzLlVzZXJzRm9ybS5jb250cm9sc1tcInNlYXJjaFRleHRCb3hcIl0uc2V0VmFsdWUobnVsbCk7XHJcbiAgICBsZXQgZWxlbWVudCA9IHRoaXMuaW5wdXQgYXMgYW55O1xyXG4gICAgZWxlbWVudC5SZWluaXRpYWxpemVQYWdpbmcoKTtcclxuXHJcblxyXG5cclxuICB9XHJcblxyXG4gIHNob3dBZGRVc2VyTW9kYWwoYWRkVXNlck1vZGFsKSB7XHJcbiAgICB0aGlzLnV0aWxpdHlTZXJ2aWNlLnN0YXJ0QmxvY2tVSSgpO1xyXG4gICAgdGhpcy51c2VyU2VydmljZS5Mb2FkZHJvcGRvd25zKCkuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcclxuXHJcbiAgICAgIGxldCBEcm9wZG93bnNSZXNwb25zZU1vZGVsID0gcmVzdWx0IGFzIERyb3Bkb3duc1Jlc3BvbnNlTW9kZWw7XHJcbiAgICAgIHRoaXMucGVybWlzc2lvblNldExpc3QgPSBEcm9wZG93bnNSZXNwb25zZU1vZGVsLnBlcm1lc3Npb25zZXRzO1xyXG4gICAgICB0aGlzLmRlcGFydG1lbnRzTGlzdCA9IERyb3Bkb3duc1Jlc3BvbnNlTW9kZWwuZGVwYXJ0bWVudHM7XHJcblxyXG4gICAgICB0aGlzLkFkZFVzZXJGb3JtID0gbmV3IEZvcm1Hcm91cCh7fSk7XHJcblxyXG4gICAgICB0aGlzLk11bHRpTGluZ3VhbE5hbWUgPSBuZXcgTXVsdGlMaW5ndWFsVGV4dEJveE9wdGlvbnMoKTtcclxuICAgICAgdGhpcy5NdWx0aUxpbmd1YWxOYW1lLk5hbWUgPSBcIk5hbWVcIjtcclxuICAgICAgdGhpcy5NdWx0aUxpbmd1YWxOYW1lLkFyYWJpY0xhYmVsS2V5ID0gXCJOYW1lSW5BcmFiaWNcIjtcclxuICAgICAgdGhpcy5NdWx0aUxpbmd1YWxOYW1lLkVuZ2xpc2hMYWJlbEtleSA9IFwiTmFtZUluRW5nbGlzaFwiO1xyXG4gICAgICB0aGlzLk11bHRpTGluZ3VhbE5hbWUuSXNSZXF1aXJlZCA9IHRydWU7XHJcbiAgICAgIHRoaXMuTXVsdGlMaW5ndWFsTmFtZS5WYWx1ZSA9IG51bGw7XHJcblxyXG5cclxuICAgICAgdGhpcy5Nb2JpbGVOdW1iZXIgPSBuZXcgUGhvbmVPcHRpb25zKCk7XHJcbiAgICAgIHRoaXMuTW9iaWxlTnVtYmVyLlZhbHVlID0gbnVsbDtcclxuICAgICAgdGhpcy5Nb2JpbGVOdW1iZXIuTmFtZSA9IFwiTW9iaWxlTnVtYmVyXCJcclxuICAgICAgdGhpcy5Nb2JpbGVOdW1iZXIuTGFiZWxLZXkgPSBcIk1vYmlsZU51bWJlclwiXHJcbiAgICAgIHRoaXMuTW9iaWxlTnVtYmVyLkV4dHJhQ2xhc3NlcyA9IFwiZm9ybS1jb250cm9sIGJuc2lnaHRzLWNvbnRyb2xcIlxyXG4gICAgICB0aGlzLk1vYmlsZU51bWJlci5TZWxlY3RlZENvdW50cnlJU08gPSBDb3VudHJ5LlVuaXRlZEFyYWJFbWlyYXRlc1xyXG4gICAgICB0aGlzLk1vYmlsZU51bWJlci5QaG9uZVZhbGlkYXRpb24gPSB0cnVlXHJcbiAgICAgIHRoaXMuTW9iaWxlTnVtYmVyLkFsbG93U2VhcmNoID0gdHJ1ZVxyXG5cclxuICAgICAgdGhpcy5Vc2VybmFtZSA9IG5ldyBUZXh0Qm94T3B0aW9ucygpO1xyXG4gICAgICB0aGlzLlVzZXJuYW1lLlZhbHVlID0gbnVsbDtcclxuICAgICAgdGhpcy5Vc2VybmFtZS5OYW1lID0gXCJVc2VybmFtZVwiO1xyXG4gICAgICB0aGlzLlVzZXJuYW1lLkxhYmVsS2V5ID0gXCJVc2VybmFtZVwiO1xyXG4gICAgICB0aGlzLlVzZXJuYW1lLlR5cGUgPSBJbnB1dFR5cGUuRW1haWw7XHJcbiAgICAgIHRoaXMuVXNlcm5hbWUuSXNSZXF1aXJlZCA9IHRydWU7XHJcblxyXG4gICAgICB0aGlzLlNhbUFjY291bnQgPSBuZXcgVGV4dEJveE9wdGlvbnMoKTtcclxuICAgICAgdGhpcy5TYW1BY2NvdW50LlZhbHVlID0gbnVsbDtcclxuICAgICAgdGhpcy5TYW1BY2NvdW50Lk5hbWUgPSBcIlNhbUFjY291bnRcIjtcclxuICAgICAgdGhpcy5TYW1BY2NvdW50LkxhYmVsS2V5ID0gXCJTYW1BY2NvdW50XCI7XHJcbiAgICAgIHRoaXMuU2FtQWNjb3VudC5UeXBlID0gSW5wdXRUeXBlLkVtYWlsO1xyXG5cclxuICAgICAgdGhpcy5Vc2VyRGVwYXJ0bWVudCA9IG5ldyBEcm9wZG93bk9wdGlvbnMoKTtcclxuICAgICAgdGhpcy5Vc2VyRGVwYXJ0bWVudC5OYW1lID0gXCJEZXBhcnRtZW50SURcIlxyXG4gICAgICB0aGlzLlVzZXJEZXBhcnRtZW50LkxhYmVsS2V5ID0gXCJEZXBhcnRtZW50XCJcclxuICAgICAgdGhpcy5Vc2VyRGVwYXJ0bWVudC5TZWxlY3RlZEl0ZW1zID0gbnVsbDtcclxuICAgICAgdGhpcy5Vc2VyRGVwYXJ0bWVudC5EYXRhU291cmNlID0gdGhpcy5kZXBhcnRtZW50c0xpc3RcclxuICAgICAgdGhpcy5Vc2VyRGVwYXJ0bWVudC5TaW5nbGVTZWxlY3Rpb24gPSBmYWxzZTtcclxuICAgICAgdGhpcy5Vc2VyRGVwYXJ0bWVudC5BbGxvd1NlYXJjaEZpbHRlciA9IHRydWU7XHJcblxyXG4gICAgICB0aGlzLlNlbmRBY3RpdmF0aW9uRW1haWwgPSBuZXcgVG9nZ2xlU2xpZGVPcHRpb25zKCk7XHJcbiAgICAgIHRoaXMuU2VuZEFjdGl2YXRpb25FbWFpbC5OYW1lID0gXCJTZW5kQWN0aXZhdGlvbk1haWxcIlxyXG4gICAgICB0aGlzLlNlbmRBY3RpdmF0aW9uRW1haWwuTGFiZWxLZXkgPSBcIlNlbmRBY3RpdmF0aW9uRW1haWxcIlxyXG4gICAgICB0aGlzLlNlbmRBY3RpdmF0aW9uRW1haWwuVmFsdWUgPSBmYWxzZVxyXG4gICAgICB0aGlzLlNlbmRBY3RpdmF0aW9uRW1haWwuVmlld1R5cGUgPSBDb250cm9sTGF5b3V0Lkhvcml6b250YWxcclxuXHJcblxyXG4gICAgICB0aGlzLlVzZXJQZXJtaXNzaW9ucyA9IG5ldyBEcm9wZG93bk9wdGlvbnMoKTtcclxuICAgICAgdGhpcy5Vc2VyUGVybWlzc2lvbnMuTmFtZSA9IFwiUGVybWlzc2lvblNldHNcIlxyXG4gICAgICB0aGlzLlVzZXJQZXJtaXNzaW9ucy5MYWJlbEtleSA9IFwiUGVybWlzc2lvblNldHNcIlxyXG4gICAgICB0aGlzLlVzZXJQZXJtaXNzaW9ucy5TZWxlY3RlZEl0ZW1zID0gbnVsbDtcclxuICAgICAgdGhpcy5Vc2VyUGVybWlzc2lvbnMuRGF0YVNvdXJjZSA9IHRoaXMucGVybWlzc2lvblNldExpc3RcclxuICAgICAgdGhpcy5Vc2VyUGVybWlzc2lvbnMuU2luZ2xlU2VsZWN0aW9uID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuVXNlclBlcm1pc3Npb25zLkFsbG93U2VhcmNoRmlsdGVyID0gdHJ1ZTtcclxuICAgICAgdGhpcy5Vc2VyUGVybWlzc2lvbnMuSXNSZXF1aXJlZCA9IHRydWU7XHJcblxyXG4gICAgICB0aGlzLm1vZGFsU2VydmljZS5vcGVuKGFkZFVzZXJNb2RhbCk7XHJcbiAgICAgIHRoaXMudXRpbGl0eVNlcnZpY2Uuc3RvcEJsb2NrVUkoKTtcclxuICAgIH0pO1xyXG5cclxuICB9XHJcbiAgYWRkVXNlcigpIHtcclxuICAgIGlmICh0aGlzLkFkZFVzZXJGb3JtLmludmFsaWQpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIGxldCBSZXN1bHRNb2RlbCA9IHRoaXMuQWRkVXNlckZvcm0udmFsdWU7XHJcbiAgICAgIGxldCBVc2VyTW9kZWwgPSBuZXcgQWRkVXNlck1vZGVsKCk7XHJcbiAgICAgIFVzZXJNb2RlbC5Vc2VybmFtZSA9IFJlc3VsdE1vZGVsLlVzZXJuYW1lO1xyXG4gICAgICBVc2VyTW9kZWwuTmFtZUFSID0gUmVzdWx0TW9kZWwuTmFtZS5BcmFiaWNWYWx1ZTtcclxuICAgICAgVXNlck1vZGVsLk5hbWVFTiA9IFJlc3VsdE1vZGVsLk5hbWUuRW5nbGlzaFZhbHVlO1xyXG4gICAgICBVc2VyTW9kZWwuU2FtQWNjb3VudCA9IFJlc3VsdE1vZGVsLlNhbUFjY291bnQ7XHJcbiAgICAgIFVzZXJNb2RlbC5Pcmdhbml6YXRpb25JRCA9IDE7XHJcbiAgICAgIGlmIChSZXN1bHRNb2RlbC5EZXBhcnRtZW50SUQgIT0gdW5kZWZpbmVkKVxyXG4gICAgICAgIFVzZXJNb2RlbC5EZXBhcnRtZW50SUQgPSBOdW1iZXIoUmVzdWx0TW9kZWwuRGVwYXJ0bWVudElEKTtcclxuICAgICAgbGV0IFBlcm1pc3Npb25TZXRzID0gUmVzdWx0TW9kZWwuUGVybWlzc2lvblNldHMgYXMgc3RyaW5nW11cclxuICAgICAgVXNlck1vZGVsLlBlcm1pc3Npb25TZXRzID0gUGVybWlzc2lvblNldHMubWFwKChpKSA9PiBOdW1iZXIoaSkpO1xyXG4gICAgICBVc2VyTW9kZWwuU2VuZEFjdGl2YXRpb25NYWlsID0gUmVzdWx0TW9kZWwuU2VuZEFjdGl2YXRpb25NYWlsO1xyXG4gICAgICBsZXQgaW50ZXJuYXRpb25hbE51bWJlcjogc3RyaW5nID0gbnVsbDtcclxuICAgICAgaWYgKFJlc3VsdE1vZGVsLk1vYmlsZU51bWJlciAhPSBudWxsKSB7XHJcbiAgICAgICAgaW50ZXJuYXRpb25hbE51bWJlciA9IFJlc3VsdE1vZGVsLk1vYmlsZU51bWJlci5pbnRlcm5hdGlvbmFsTnVtYmVyIGFzIHN0cmluZztcclxuICAgICAgICBpbnRlcm5hdGlvbmFsTnVtYmVyID0gaW50ZXJuYXRpb25hbE51bWJlci5yZXBsYWNlKC9cXHMvZywgXCJcIik7XHJcbiAgICAgIH1cclxuICAgICAgVXNlck1vZGVsLlBob25lSW5wdXRNb2JpbGUgPSBpbnRlcm5hdGlvbmFsTnVtYmVyO1xyXG4gICAgICB0aGlzLnVzZXJTZXJ2aWNlLkFkZFVzZXIoVXNlck1vZGVsKS5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xyXG4gICAgICAgIHRoaXMubW9kYWxTZXJ2aWNlLmRpc21pc3NBbGwoKTtcclxuICAgICAgICBsZXQgZWxlbWVudCA9IHRoaXMuaW5wdXQgYXMgYW55O1xyXG4gICAgICAgIGVsZW1lbnQuUmVpbml0aWFsaXplUGFnaW5nKCk7XHJcbiAgICAgIH0sIChlcnJvcikgPT4ge1xyXG5cclxuICAgICAgfSlcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNob3dFZGl0VXNlck1vZGFsKFVzZXI6IGFueSwgRWRpdFVzZXJNb2RhbCkge1xyXG4gICAgdGhpcy51dGlsaXR5U2VydmljZS5zdGFydEJsb2NrVUkoKTtcclxuICAgIHRoaXMudXNlclNlcnZpY2UuTG9hZGRyb3Bkb3ducygpLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XHJcbiAgICAgIGxldCBEcm9wZG93bnNSZXNwb25zZU1vZGVsID0gcmVzdWx0IGFzIERyb3Bkb3duc1Jlc3BvbnNlTW9kZWw7XHJcbiAgICAgIHRoaXMucGVybWlzc2lvblNldExpc3QgPSBEcm9wZG93bnNSZXNwb25zZU1vZGVsLnBlcm1lc3Npb25zZXRzO1xyXG4gICAgICB0aGlzLmRlcGFydG1lbnRzTGlzdCA9IERyb3Bkb3duc1Jlc3BvbnNlTW9kZWwuZGVwYXJ0bWVudHM7XHJcblxyXG4gICAgICB0aGlzLkVkaXRVc2VyRm9ybSA9IG5ldyBGb3JtR3JvdXAoe30pO1xyXG5cclxuICAgICAgdGhpcy5Vc2VySWQgPSBVc2VyLmlkXHJcblxyXG4gICAgICBsZXQgTmFtZSA9IG5ldyBFbmdsaXNoQXJhYmljRFRPKCk7XHJcbiAgICAgIE5hbWUuQXJhYmljID0gVXNlci5uYW1lLmFyYWJpYztcclxuICAgICAgTmFtZS5FbmdsaXNoID0gVXNlci5uYW1lLmVuZ2xpc2g7XHJcblxyXG4gICAgICB0aGlzLkVkaXRNdWx0aUxpbmd1YWxOYW1lID0gbmV3IE11bHRpTGluZ3VhbFRleHRCb3hPcHRpb25zKCk7XHJcbiAgICAgIHRoaXMuRWRpdE11bHRpTGluZ3VhbE5hbWUuTmFtZSA9IFwiTmFtZVwiO1xyXG4gICAgICB0aGlzLkVkaXRNdWx0aUxpbmd1YWxOYW1lLkFyYWJpY0xhYmVsS2V5ID0gXCJOYW1lSW5BcmFiaWNcIjtcclxuICAgICAgdGhpcy5FZGl0TXVsdGlMaW5ndWFsTmFtZS5FbmdsaXNoTGFiZWxLZXkgPSBcIk5hbWVJbkVuZ2xpc2hcIjtcclxuICAgICAgdGhpcy5FZGl0TXVsdGlMaW5ndWFsTmFtZS5Jc1JlcXVpcmVkID0gdHJ1ZTtcclxuICAgICAgdGhpcy5FZGl0TXVsdGlMaW5ndWFsTmFtZS5WYWx1ZSA9IE5hbWU7XHJcblxyXG4gICAgICB0aGlzLkVkaXRNb2JpbGVOdW1iZXIgPSBuZXcgUGhvbmVPcHRpb25zKCk7XHJcbiAgICAgIHRoaXMuRWRpdE1vYmlsZU51bWJlci5WYWx1ZSA9IFVzZXIubW9iaWxlIGFzIHN0cmluZztcclxuICAgICAgdGhpcy5FZGl0TW9iaWxlTnVtYmVyLk5hbWUgPSBcIk1vYmlsZU51bWJlclwiXHJcbiAgICAgIHRoaXMuRWRpdE1vYmlsZU51bWJlci5MYWJlbEtleSA9IFwiTW9iaWxlTnVtYmVyXCJcclxuICAgICAgdGhpcy5FZGl0TW9iaWxlTnVtYmVyLkV4dHJhQ2xhc3NlcyA9IFwiZm9ybS1jb250cm9sIGJuc2lnaHRzLWNvbnRyb2xcIlxyXG4gICAgICB0aGlzLkVkaXRNb2JpbGVOdW1iZXIuU2VsZWN0ZWRDb3VudHJ5SVNPID0gQ291bnRyeS5Vbml0ZWRBcmFiRW1pcmF0ZXNcclxuICAgICAgdGhpcy5FZGl0TW9iaWxlTnVtYmVyLlBob25lVmFsaWRhdGlvbiA9IHRydWVcclxuICAgICAgdGhpcy5FZGl0TW9iaWxlTnVtYmVyLkFsbG93U2VhcmNoID0gdHJ1ZVxyXG5cclxuXHJcbiAgICAgIHRoaXMuRWRpdFVzZXJuYW1lID0gbmV3IFRleHRCb3hPcHRpb25zKCk7XHJcbiAgICAgIHRoaXMuRWRpdFVzZXJuYW1lLlZhbHVlID0gVXNlci51c2VybmFtZTtcclxuICAgICAgdGhpcy5FZGl0VXNlcm5hbWUuTmFtZSA9IFwiVXNlcm5hbWVcIjtcclxuICAgICAgdGhpcy5FZGl0VXNlcm5hbWUuTGFiZWxLZXkgPSBcIlVzZXJuYW1lXCI7XHJcbiAgICAgIHRoaXMuRWRpdFVzZXJuYW1lLlR5cGUgPSBJbnB1dFR5cGUuVGV4dDtcclxuICAgICAgdGhpcy5FZGl0VXNlcm5hbWUuSXNSZXF1aXJlZCA9IHRydWU7XHJcblxyXG4gICAgICB0aGlzLkVkaXRFbWFpbCA9IG5ldyBUZXh0Qm94T3B0aW9ucygpO1xyXG4gICAgICB0aGlzLkVkaXRFbWFpbC5WYWx1ZSA9IFVzZXIuZW1haWw7XHJcbiAgICAgIHRoaXMuRWRpdEVtYWlsLk5hbWUgPSBcIkVtYWlsXCI7XHJcbiAgICAgIHRoaXMuRWRpdEVtYWlsLkxhYmVsS2V5ID0gXCJFbWFpbFwiO1xyXG4gICAgICB0aGlzLkVkaXRFbWFpbC5UeXBlID0gSW5wdXRUeXBlLlRleHQ7XHJcbiAgICAgIHRoaXMuRWRpdEVtYWlsLklzUmVxdWlyZWQgPSB0cnVlO1xyXG5cclxuICAgICAgdGhpcy5FZGl0U2FtQWNjb3VudCA9IG5ldyBUZXh0Qm94T3B0aW9ucygpO1xyXG4gICAgICB0aGlzLkVkaXRTYW1BY2NvdW50LlZhbHVlID0gVXNlci5zYW1BY2NvdW50O1xyXG4gICAgICB0aGlzLkVkaXRTYW1BY2NvdW50Lk5hbWUgPSBcIlNhbUFjY291bnRcIjtcclxuICAgICAgdGhpcy5FZGl0U2FtQWNjb3VudC5MYWJlbEtleSA9IFwiU2FtQWNjb3VudFwiO1xyXG4gICAgICB0aGlzLkVkaXRTYW1BY2NvdW50LlR5cGUgPSBJbnB1dFR5cGUuRW1haWw7XHJcblxyXG5cclxuICAgICAgdGhpcy5FZGl0VXNlckRlcGFydG1lbnQgPSBuZXcgRHJvcGRvd25PcHRpb25zKCk7XHJcbiAgICAgIHRoaXMuRWRpdFVzZXJEZXBhcnRtZW50Lk5hbWUgPSBcIkRlcGFydG1lbnRJRFwiXHJcbiAgICAgIHRoaXMuRWRpdFVzZXJEZXBhcnRtZW50LkxhYmVsS2V5ID0gXCJEZXBhcnRtZW50XCJcclxuICAgICAgdGhpcy5FZGl0VXNlckRlcGFydG1lbnQuU2VsZWN0ZWRJdGVtcyA9IHRoaXMuZGVwYXJ0bWVudHNMaXN0LmZpbHRlcigoaXRlbSkgPT4geyByZXR1cm4gcGFyc2VJbnQoaXRlbS5rZXkpID09IFVzZXIuZGVwYXJ0bWVudElEOyB9KS5tYXAoKGl0ZW0pID0+IGl0ZW0ua2V5KVswXTtcclxuICAgICAgdGhpcy5FZGl0VXNlckRlcGFydG1lbnQuRGF0YVNvdXJjZSA9IHRoaXMuZGVwYXJ0bWVudHNMaXN0XHJcbiAgICAgIHRoaXMuRWRpdFVzZXJEZXBhcnRtZW50LlNpbmdsZVNlbGVjdGlvbiA9IHRydWU7XHJcbiAgICAgIHRoaXMuRWRpdFVzZXJEZXBhcnRtZW50LkFsbG93U2VhcmNoRmlsdGVyID0gdHJ1ZTtcclxuXHJcbiAgICAgIHRoaXMuRWRpdFVzZXJQZXJtaXNzaW9ucyA9IG5ldyBEcm9wZG93bk9wdGlvbnMoKTtcclxuICAgICAgdGhpcy5FZGl0VXNlclBlcm1pc3Npb25zLk5hbWUgPSBcIlBlcm1pc3Npb25TZXRzXCJcclxuICAgICAgdGhpcy5FZGl0VXNlclBlcm1pc3Npb25zLkxhYmVsS2V5ID0gXCJQZXJtaXNzaW9uU2V0c1wiXHJcbiAgICAgIHRoaXMuRWRpdFVzZXJQZXJtaXNzaW9ucy5TZWxlY3RlZEl0ZW1zID0gdGhpcy5wZXJtaXNzaW9uU2V0TGlzdC5maWx0ZXIoZnVuY3Rpb24gKHRhZykge1xyXG4gICAgICAgIHJldHVybiBVc2VyLnBlcm1TZXRMaXN0LmluZGV4T2YocGFyc2VJbnQodGFnLmtleSkpID49IDA7XHJcbiAgICAgIH0pLm1hcCgoaXRlbSkgPT4gaXRlbS5rZXkpO1xyXG4gICAgICB0aGlzLkVkaXRVc2VyUGVybWlzc2lvbnMuRGF0YVNvdXJjZSA9IHRoaXMucGVybWlzc2lvblNldExpc3RcclxuICAgICAgdGhpcy5FZGl0VXNlclBlcm1pc3Npb25zLlNpbmdsZVNlbGVjdGlvbiA9IGZhbHNlO1xyXG4gICAgICB0aGlzLkVkaXRVc2VyUGVybWlzc2lvbnMuQWxsb3dTZWFyY2hGaWx0ZXIgPSB0cnVlO1xyXG4gICAgICB0aGlzLkVkaXRVc2VyUGVybWlzc2lvbnMuSXNSZXF1aXJlZCA9IHRydWU7XHJcblxyXG4gICAgICB0aGlzLm1vZGFsU2VydmljZS5vcGVuKEVkaXRVc2VyTW9kYWwpO1xyXG4gICAgICB0aGlzLnV0aWxpdHlTZXJ2aWNlLnN0b3BCbG9ja1VJKCk7XHJcbiAgICB9KTtcclxuXHJcblxyXG4gIH1cclxuXHJcbiAgZWRpdFVzZXIoKSB7XHJcbiAgICBpZiAodGhpcy5FZGl0VXNlckZvcm0uaW52YWxpZCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgbGV0IFJlc3VsdE1vZGVsID0gdGhpcy5FZGl0VXNlckZvcm0udmFsdWU7XHJcbiAgICAgIGxldCBVc2VyTW9kZWwgPSBuZXcgRWRpdFVzZXJNb2RlbCgpO1xyXG4gICAgICBVc2VyTW9kZWwuSUQgPSB0aGlzLlVzZXJJZDtcclxuICAgICAgVXNlck1vZGVsLlVzZXJuYW1lID0gUmVzdWx0TW9kZWwuVXNlcm5hbWU7XHJcbiAgICAgIFVzZXJNb2RlbC5FbWFpbCA9IFJlc3VsdE1vZGVsLkVtYWlsO1xyXG4gICAgICBVc2VyTW9kZWwuTmFtZUFSID0gUmVzdWx0TW9kZWwuTmFtZS5BcmFiaWNWYWx1ZTtcclxuICAgICAgVXNlck1vZGVsLk5hbWVFTiA9IFJlc3VsdE1vZGVsLk5hbWUuRW5nbGlzaFZhbHVlO1xyXG4gICAgICBVc2VyTW9kZWwuU2FtQWNjb3VudCA9IFJlc3VsdE1vZGVsLlNhbUFjY291bnQ7XHJcbiAgICAgIGlmIChSZXN1bHRNb2RlbC5EZXBhcnRtZW50SUQgIT0gdW5kZWZpbmVkKVxyXG4gICAgICAgIFVzZXJNb2RlbC5EZXBhcnRtZW50SUQgPSBOdW1iZXIoUmVzdWx0TW9kZWwuRGVwYXJ0bWVudElEKTtcclxuICAgICAgbGV0IFBlcm1pc3Npb25TZXRzID0gUmVzdWx0TW9kZWwuUGVybWlzc2lvblNldHMgYXMgc3RyaW5nW11cclxuICAgICAgVXNlck1vZGVsLlBlcm1pc3Npb25JRHMgPSBQZXJtaXNzaW9uU2V0cy5tYXAoKGkpID0+IE51bWJlcihpKSk7XHJcbiAgICAgIGxldCBpbnRlcm5hdGlvbmFsTnVtYmVyOiBzdHJpbmcgPSBudWxsO1xyXG4gICAgICBpZiAoUmVzdWx0TW9kZWwuTW9iaWxlTnVtYmVyICE9IG51bGwpIHtcclxuICAgICAgICBpbnRlcm5hdGlvbmFsTnVtYmVyID0gUmVzdWx0TW9kZWwuTW9iaWxlTnVtYmVyLmludGVybmF0aW9uYWxOdW1iZXIgYXMgc3RyaW5nO1xyXG4gICAgICAgIGludGVybmF0aW9uYWxOdW1iZXIgPSBpbnRlcm5hdGlvbmFsTnVtYmVyLnJlcGxhY2UoL1xccy9nLCBcIlwiKTtcclxuICAgICAgfVxyXG4gICAgICBVc2VyTW9kZWwuTW9iaWxlID0gaW50ZXJuYXRpb25hbE51bWJlcjtcclxuICAgICAgdGhpcy51c2VyU2VydmljZS5FZGl0VXNlcihVc2VyTW9kZWwpLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XHJcbiAgICAgICAgdGhpcy5tb2RhbFNlcnZpY2UuZGlzbWlzc0FsbCgpO1xyXG4gICAgICAgIGxldCBlbGVtZW50ID0gdGhpcy5pbnB1dCBhcyBhbnk7XHJcbiAgICAgICAgZWxlbWVudC5VcGRhdGVQYWdpbmcoKTtcclxuICAgICAgICB0aGlzLnJlc2V0VXNlcnNDb3VudCgpO1xyXG4gICAgICAgIHRoaXMuZGlzYWJsZUJ1dHRvbnMoKTtcclxuICAgICAgfSwgKGVycm9yKSA9PiB7XHJcblxyXG4gICAgICB9KVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZXhwb3J0RXhjZWwoKSB7XHJcbiAgICBsZXQgcGFyYW1zID0gbmV3IEh0dHBQYXJhbXMoKTtcclxuICAgIHBhcmFtcyA9IHBhcmFtcy5hcHBlbmQoXCJwZXJtaXNzaW9uSWRzXCIsIHRoaXMuVXNlcnNGb3JtLmNvbnRyb2xzW1wicGVybWlzc2lvbnNldHNcIl0udmFsdWUgPT0gdW5kZWZpbmVkID8gXCJcIiA6IHRoaXMuVXNlcnNGb3JtLmNvbnRyb2xzW1wicGVybWlzc2lvbnNldHNcIl0udmFsdWUpO1xyXG4gICAgcGFyYW1zID0gcGFyYW1zLmFwcGVuZChcImFjY291bnRTdGF0dXNJRHNcIiwgdGhpcy5Vc2Vyc0Zvcm0uY29udHJvbHNbXCJhY2NvdW50c3RhdHVzXCJdLnZhbHVlID09IHVuZGVmaW5lZCA/IFwiXCIgOiB0aGlzLlVzZXJzRm9ybS5jb250cm9sc1tcImFjY291bnRzdGF0dXNcIl0udmFsdWUpO1xyXG4gICAgcGFyYW1zID0gcGFyYW1zLmFwcGVuZChcImxvY2tlZFN0YXR1c0lkc1wiLCB0aGlzLlVzZXJzRm9ybS5jb250cm9sc1tcImxvY2tlZHN0YXR1c1wiXS52YWx1ZSA9PSB1bmRlZmluZWQgPyBcIlwiIDogdGhpcy5Vc2Vyc0Zvcm0uY29udHJvbHNbXCJsb2NrZWRzdGF0dXNcIl0udmFsdWUpO1xyXG4gICAgcGFyYW1zID0gcGFyYW1zLmFwcGVuZChcImRlcGFydG1lbnRJZHNcIiwgdGhpcy5Vc2Vyc0Zvcm0uY29udHJvbHNbXCJkZXBhcnRtZW50c1wiXS52YWx1ZSA9PSB1bmRlZmluZWQgPyBcIlwiIDogdGhpcy5Vc2Vyc0Zvcm0uY29udHJvbHNbXCJkZXBhcnRtZW50c1wiXS52YWx1ZSk7XHJcbiAgICBwYXJhbXMgPSBwYXJhbXMuYXBwZW5kKFwibmFtZUZpbHRlclwiLCB0aGlzLlVzZXJzRm9ybS5jb250cm9sc1tcInNlYXJjaFRleHRCb3hcIl0udmFsdWUgPT0gdW5kZWZpbmVkID8gXCJcIiA6IHRoaXMuVXNlcnNGb3JtLmNvbnRyb2xzW1wic2VhcmNoVGV4dEJveFwiXS52YWx1ZSk7XHJcbiAgICB0aGlzLnVzZXJTZXJ2aWNlLkV4cG9ydChwYXJhbXMpLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XHJcbiAgICAgIGxldCBGaWxlRFRPID0gcmVzdWx0IGFzIGFueVxyXG4gICAgICBjb25zdCBmaWxlID0gbmV3IEJsb2IoW0ZpbGVEVE9dLCB7IHR5cGU6ICdhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5zaGVldCcgfSk7XHJcbiAgICAgIHNhdmVBcyhmaWxlLCBgVXNlcnMueGxzeGApO1xyXG5cclxuICAgIH0sIChlcnJvcikgPT4ge1xyXG5cclxuICAgIH0pXHJcblxyXG4gIH1cclxuXHJcbiAgLy9PbmUgdXNlciBmdW5jdGlvbnNcclxuICBzaG93QWN0aXZhdGVVc2VyTW9kYWwoVXNlcjogYW55LCBpc0FjdGl2YXRlTW9kZWw6IGJvb2xlYW4sIEFjdGl2YXRlVXNlck1vZGFsKSB7XHJcbiAgICB0aGlzLnV0aWxpdHlTZXJ2aWNlLnN0YXJ0QmxvY2tVSSgpXHJcbiAgICB0aGlzLkFjdGl2YXRVc2VyTGlzdCA9IFtdXHJcbiAgICB0aGlzLkFjdGl2YXRVc2VyTGlzdC5wdXNoKFVzZXIpO1xyXG4gICAgdGhpcy5OYW1lID0gdGhpcy5sYW5ndWFnZSA9PSBcImVuXCIgPyBVc2VyLm5hbWUuZW5nbGlzaCA6IFVzZXIubmFtZS5hcmFiaWM7XHJcbiAgICB0aGlzLkVtYWlsID0gVXNlci5lbWFpbFxyXG4gICAgdGhpcy5TaG93QWN0aXZhdGVNb2RlbERhdGEgPSBpc0FjdGl2YXRlTW9kZWxcclxuICAgIHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4oQWN0aXZhdGVVc2VyTW9kYWwpO1xyXG4gICAgdGhpcy51dGlsaXR5U2VydmljZS5zdG9wQmxvY2tVSSgpO1xyXG5cclxuICB9XHJcblxyXG4gIHNob3dSZXNldFBhc3N3b3JkVXNlck1vZGFsKFVzZXI6IGFueSwgUmVzZXRQYXNzd29yZFVzZXJNb2RhbCkge1xyXG4gICAgdGhpcy51dGlsaXR5U2VydmljZS5zdGFydEJsb2NrVUkoKVxyXG4gICAgdGhpcy5SZXNldFBhc3N3b3JkVXNlckxpc3QgPSBbXVxyXG4gICAgdGhpcy5SZXNldFBhc3N3b3JkVXNlckxpc3QucHVzaChVc2VyKTtcclxuICAgIHRoaXMuTmFtZSA9IHRoaXMubGFuZ3VhZ2UgPT0gXCJlblwiID8gVXNlci5uYW1lLmVuZ2xpc2ggOiBVc2VyLm5hbWUuYXJhYmljO1xyXG4gICAgdGhpcy5FbWFpbCA9IFVzZXIuZW1haWxcclxuICAgIHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4oUmVzZXRQYXNzd29yZFVzZXJNb2RhbCk7XHJcbiAgICB0aGlzLnV0aWxpdHlTZXJ2aWNlLnN0b3BCbG9ja1VJKCk7XHJcblxyXG5cclxuICB9XHJcblxyXG4gIHNob3dTZW5kQWN0aXZhdGlvbkVtYWlsTW9kYWwoVXNlcjogYW55LCBTZW5kQWN0aXZhdGlvbkVtYWlsTW9kYWwpIHtcclxuICAgIHRoaXMudXRpbGl0eVNlcnZpY2Uuc3RhcnRCbG9ja1VJKClcclxuICAgIHRoaXMuU2VsZWN0ZWRVc2VyTGlzdCA9IFtdXHJcbiAgICB0aGlzLlNlbGVjdGVkVXNlckxpc3QucHVzaChVc2VyKTtcclxuICAgIHRoaXMuTmFtZSA9IHRoaXMubGFuZ3VhZ2UgPT0gXCJlblwiID8gVXNlci5uYW1lLmVuZ2xpc2ggOiBVc2VyLm5hbWUuYXJhYmljO1xyXG4gICAgdGhpcy5FbWFpbCA9IFVzZXIuZW1haWxcclxuICAgIHRoaXMuT3BlblNlbmRBY3RpdmF0aW9uRW1haWxNb2RhbCA9IGZhbHNlO1xyXG4gICAgdGhpcy5tb2RhbFNlcnZpY2Uub3BlbihTZW5kQWN0aXZhdGlvbkVtYWlsTW9kYWwpO1xyXG4gICAgdGhpcy51dGlsaXR5U2VydmljZS5zdG9wQmxvY2tVSSgpO1xyXG5cclxuICB9XHJcblxyXG4gIGRlbGV0ZVVzZXJGcm9tTGlzdCh1c2VyOiBhbnkpIHtcclxuICAgIHRoaXMuVXNlclBhZ2luZ1Jlc3VsdC5maW5kKHUgPT4gdS5pZCA9PT0gdXNlci5pZCkuc2VsZWN0ZWQgPSBmYWxzZTtcclxuICAgIHRoaXMuU2VsZWN0ZWRVc2VyTGlzdCA9IHRoaXMuU2VsZWN0ZWRVc2VyTGlzdC5maWx0ZXIoaXRlbSA9PiBpdGVtICE9IHVzZXIpO1xyXG4gICAgaWYgKHVzZXIuaXNBY3RpdmUpXHJcbiAgICAgIHRoaXMuYWN0aXZhdGVkVXNlcnNTZWxlY3RlZCAtPSAxO1xyXG4gICAgZWxzZVxyXG4gICAgICB0aGlzLmRlQWN0aXZhdGVkVXNlcnNTZWxlY3RlZCAtPSAxO1xyXG4gICAgdGhpcy5lbmFibGVCdXR0b25zKCk7XHJcbiAgICBpZiAodGhpcy5TZWxlY3RlZFVzZXJMaXN0Lmxlbmd0aCA8PSAwKSB7XHJcbiAgICAgIHRoaXMubW9kYWxTZXJ2aWNlLmRpc21pc3NBbGwoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gIH1cclxuXHJcbiAgc2hvd3NldFBhc3N3b3JkVXNlck1vZGFsKFVzZXI6IGFueSwgc2V0UGFzc3dvcmRVc2VyTW9kYWwpIHtcclxuICAgIHRoaXMudXRpbGl0eVNlcnZpY2Uuc3RhcnRCbG9ja1VJKCk7XHJcbiAgICB0aGlzLlNldFVzZXJQYXNzd29yZEZvcm0gPSBuZXcgRm9ybUdyb3VwKHt9KTtcclxuICAgIHRoaXMuc2V0UGFzc3dvcmRVc2VyTGlzdCA9IFtdO1xyXG4gICAgdGhpcy5zZXRQYXNzd29yZFVzZXJMaXN0LnB1c2goVXNlcik7XHJcbiAgICB0aGlzLk5hbWUgPSB0aGlzLmxhbmd1YWdlID09IFwiZW5cIiA/IFVzZXIubmFtZS5lbmdsaXNoIDogVXNlci5uYW1lLmFyYWJpYztcclxuICAgIHRoaXMuRW1haWwgPSBVc2VyLmVtYWlsO1xyXG5cclxuICAgIHRoaXMuUGFzc3dvcmQgPSBuZXcgVGV4dEJveE9wdGlvbnMoKTtcclxuICAgIHRoaXMuUGFzc3dvcmQuSGlkZUxhYmVsID0gdHJ1ZTtcclxuICAgIHRoaXMuUGFzc3dvcmQuVHlwZSA9IElucHV0VHlwZS5QYXNzd29yZDtcclxuICAgIHRoaXMuUGFzc3dvcmQuSXNSZXF1aXJlZCA9IHRydWU7XHJcblxyXG4gICAgdGhpcy5jdXN0b21WYWxpZGF0aW9uLmZ1bmN0aW9uQm9keSA9IChjb250cm9sKSA9PiB7XHJcbiAgICAgIGxldCBQYXNzd29yZCA9IHRoaXMuU2V0VXNlclBhc3N3b3JkRm9ybS5jb250cm9sc1tcIlBhc3N3b3JkXCJdLnZhbHVlO1xyXG4gICAgICBpZiAoY29udHJvbC52YWx1ZSAhPSBQYXNzd29yZClcclxuICAgICAgICByZXR1cm4geyAnY3VzdG9tZXJFcnJvcic6IHRydWUgfTtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9O1xyXG4gICAgdGhpcy5jdXN0b21WYWxpZGF0aW9uLm1hc3NhZ2UgPSB0aGlzLnV0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJQYXNzd29yZE5vdE1hdGNoXCIpO1xyXG5cclxuICAgIHRoaXMuUGFzc3dvcmRDb25maXJtYXRpb24gPSBuZXcgVGV4dEJveE9wdGlvbnMoKTtcclxuICAgIHRoaXMuUGFzc3dvcmRDb25maXJtYXRpb24uTmFtZSA9IFwiUGFzc3dvcmRDb25maXJtYXRpb25cIjtcclxuICAgIHRoaXMuUGFzc3dvcmRDb25maXJtYXRpb24uSGlkZUxhYmVsID0gdHJ1ZTtcclxuICAgIHRoaXMuUGFzc3dvcmRDb25maXJtYXRpb24uVHlwZSA9IElucHV0VHlwZS5QYXNzd29yZDtcclxuICAgIHRoaXMuUGFzc3dvcmRDb25maXJtYXRpb24uSXNSZXF1aXJlZCA9IHRydWU7XHJcbiAgICB0aGlzLlBhc3N3b3JkQ29uZmlybWF0aW9uLkN1c3RvbVZhbGlkYXRpb24gPSBbdGhpcy5jdXN0b21WYWxpZGF0aW9uXTtcclxuXHJcbiAgICB0aGlzLm1vZGFsU2VydmljZS5vcGVuKHNldFBhc3N3b3JkVXNlck1vZGFsKTtcclxuICAgIHRoaXMudXRpbGl0eVNlcnZpY2Uuc3RvcEJsb2NrVUkoKTtcclxuICB9XHJcblxyXG5cclxuICBhY3RpdmF0ZSgpIHtcclxuICAgIHRoaXMudXNlclNlcnZpY2UuQWN0aXZhdGVVc2Vycyh0aGlzLkFjdGl2YXRVc2VyTGlzdCkuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcclxuICAgICAgdGhpcy5tb2RhbFNlcnZpY2UuZGlzbWlzc0FsbCgpO1xyXG4gICAgICBsZXQgZWxlbWVudCA9IHRoaXMuaW5wdXQgYXMgYW55O1xyXG4gICAgICBlbGVtZW50LlVwZGF0ZVBhZ2luZygpO1xyXG4gICAgICB0aGlzLnJlc2V0VXNlcnNDb3VudCgpO1xyXG4gICAgICB0aGlzLmRpc2FibGVCdXR0b25zKCk7XHJcbiAgICB9LCAoZXJyb3IpID0+IHtcclxuXHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgZGVhY3RpdmF0ZSgpIHtcclxuICAgIHRoaXMudXNlclNlcnZpY2UuRGVhY3RpdmF0ZVVzZXJzKHRoaXMuQWN0aXZhdFVzZXJMaXN0KS5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xyXG4gICAgICB0aGlzLm1vZGFsU2VydmljZS5kaXNtaXNzQWxsKCk7XHJcbiAgICAgIGxldCBlbGVtZW50ID0gdGhpcy5pbnB1dCBhcyBhbnk7XHJcbiAgICAgIGVsZW1lbnQuVXBkYXRlUGFnaW5nKCk7XHJcbiAgICAgIHRoaXMucmVzZXRVc2Vyc0NvdW50KCk7XHJcbiAgICAgIHRoaXMuZGlzYWJsZUJ1dHRvbnMoKTtcclxuICAgIH0sIChlcnJvcikgPT4ge1xyXG5cclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICByZXNldFBhc3N3b3JkKCkge1xyXG5cclxuICAgIHRoaXMudXNlclNlcnZpY2UuUmVzZXRVc2Vyc1Bhc3N3b3JkKHRoaXMuUmVzZXRQYXNzd29yZFVzZXJMaXN0KS5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xyXG4gICAgICB0aGlzLm1vZGFsU2VydmljZS5kaXNtaXNzQWxsKCk7XHJcbiAgICAgIGxldCBlbGVtZW50ID0gdGhpcy5pbnB1dCBhcyBhbnk7XHJcbiAgICAgIGVsZW1lbnQuVXBkYXRlUGFnaW5nKCk7XHJcbiAgICAgIHRoaXMucmVzZXRVc2Vyc0NvdW50KCk7XHJcbiAgICAgIHRoaXMuZGlzYWJsZUJ1dHRvbnMoKTtcclxuICAgIH0sIChlcnJvcikgPT4ge1xyXG5cclxuICAgIH0pXHJcblxyXG4gIH1cclxuICBzZXRQYXNzd29yZCgpIHtcclxuICAgIGlmICh0aGlzLlNldFVzZXJQYXNzd29yZEZvcm0uaW52YWxpZCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgbGV0IFJlc3VsdE1vZGVsID0gdGhpcy5TZXRVc2VyUGFzc3dvcmRGb3JtLnZhbHVlO1xyXG4gICAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgdGhpcy5zZXRQYXNzd29yZFVzZXJMaXN0Lmxlbmd0aDsgaW5kZXgrKykge1xyXG4gICAgICAgIHZhciBlbGVtZW50ID0gdGhpcy5zZXRQYXNzd29yZFVzZXJMaXN0W2luZGV4XTtcclxuICAgICAgICBlbGVtZW50LlBhc3N3b3JkID0gUmVzdWx0TW9kZWwuUGFzc3dvcmRcclxuICAgICAgICBlbGVtZW50LkNvbmZpcm1QYXNzd29yZCA9IFJlc3VsdE1vZGVsLlBhc3N3b3JkQ29uZmlybWF0aW9uXHJcbiAgICAgIH1cclxuICAgICAgdGhpcy51c2VyU2VydmljZS5TZXRVc2Vyc1Bhc3N3b3JkKHRoaXMuc2V0UGFzc3dvcmRVc2VyTGlzdCkuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcclxuICAgICAgICB0aGlzLm1vZGFsU2VydmljZS5kaXNtaXNzQWxsKCk7XHJcbiAgICAgICAgbGV0IGVsZW1lbnQgPSB0aGlzLmlucHV0IGFzIGFueTtcclxuICAgICAgICBlbGVtZW50LlVwZGF0ZVBhZ2luZygpO1xyXG4gICAgICAgIHRoaXMucmVzZXRVc2Vyc0NvdW50KCk7XHJcbiAgICAgICAgdGhpcy5kaXNhYmxlQnV0dG9ucygpO1xyXG4gICAgICB9LCAoZXJyb3IpID0+IHtcclxuXHJcbiAgICAgIH0pXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZW5kQWN0aXZhdGlvbkVtYWlsRm9yVXNlcigpIHtcclxuICAgIHRoaXMudXNlclNlcnZpY2UuU2VuZEFjdGl2YXRpb25FbWFpbEZvclVzZXIodGhpcy5TZWxlY3RlZFVzZXJMaXN0KS5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xyXG4gICAgICB0aGlzLm1vZGFsU2VydmljZS5kaXNtaXNzQWxsKCk7XHJcbiAgICAgIHRoaXMuU2VsZWN0ZWRVc2VyTGlzdCA9IFtdO1xyXG4gICAgICBsZXQgZWxlbWVudCA9IHRoaXMuaW5wdXQgYXMgYW55O1xyXG4gICAgICBlbGVtZW50LlVwZGF0ZVBhZ2luZygpO1xyXG4gICAgICB0aGlzLnJlc2V0VXNlcnNDb3VudCgpO1xyXG4gICAgICB0aGlzLmRpc2FibGVCdXR0b25zKCk7XHJcbiAgICB9LCAoZXJyb3IpID0+IHtcclxuXHJcbiAgICB9KVxyXG5cclxuICB9XHJcblxyXG5cclxuICAvL1VzZXJzIExpc3QgRnVuY3Rpb25zIFxyXG4gIGFjdGl2YXRlVXNlckxpc3QoKSB7XHJcbiAgICB0aGlzLnVzZXJTZXJ2aWNlLkFjdGl2YXRlVXNlcnModGhpcy5TZWxlY3RlZFVzZXJMaXN0KS5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xyXG4gICAgICB0aGlzLm1vZGFsU2VydmljZS5kaXNtaXNzQWxsKCk7XHJcbiAgICAgIHRoaXMuU2VsZWN0ZWRVc2VyTGlzdCA9IFtdO1xyXG4gICAgICBsZXQgZWxlbWVudCA9IHRoaXMuaW5wdXQgYXMgYW55O1xyXG4gICAgICBlbGVtZW50LlVwZGF0ZVBhZ2luZygpO1xyXG4gICAgICB0aGlzLnJlc2V0VXNlcnNDb3VudCgpO1xyXG4gICAgICB0aGlzLmRpc2FibGVCdXR0b25zKCk7XHJcbiAgICB9LCAoZXJyb3IpID0+IHtcclxuXHJcbiAgICB9KTtcclxuICB9XHJcbiAgZGVhY3RpdmF0ZVVzZXJMaXN0KCkge1xyXG4gICAgdGhpcy51c2VyU2VydmljZS5EZWFjdGl2YXRlVXNlcnModGhpcy5TZWxlY3RlZFVzZXJMaXN0KS5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xyXG4gICAgICB0aGlzLm1vZGFsU2VydmljZS5kaXNtaXNzQWxsKCk7XHJcbiAgICAgIHRoaXMuU2VsZWN0ZWRVc2VyTGlzdCA9IFtdO1xyXG4gICAgICBsZXQgZWxlbWVudCA9IHRoaXMuaW5wdXQgYXMgYW55O1xyXG4gICAgICBlbGVtZW50LlVwZGF0ZVBhZ2luZygpO1xyXG4gICAgICB0aGlzLnJlc2V0VXNlcnNDb3VudCgpO1xyXG4gICAgICB0aGlzLmRpc2FibGVCdXR0b25zKCk7XHJcbiAgICB9LCAoZXJyb3IpID0+IHtcclxuXHJcbiAgICB9KTtcclxuICB9XHJcbiAgcmVzZXRVc2VyUGFzc3dvcmRMaXN0KCkge1xyXG4gICAgdGhpcy51c2VyU2VydmljZS5SZXNldFVzZXJzUGFzc3dvcmQodGhpcy5TZWxlY3RlZFVzZXJMaXN0KS5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xyXG4gICAgICB0aGlzLm1vZGFsU2VydmljZS5kaXNtaXNzQWxsKCk7XHJcbiAgICAgIHRoaXMuU2VsZWN0ZWRVc2VyTGlzdCA9IFtdO1xyXG4gICAgICBsZXQgZWxlbWVudCA9IHRoaXMuaW5wdXQgYXMgYW55O1xyXG4gICAgICBlbGVtZW50LlVwZGF0ZVBhZ2luZygpO1xyXG4gICAgICB0aGlzLnJlc2V0VXNlcnNDb3VudCgpO1xyXG4gICAgICB0aGlzLmRpc2FibGVCdXR0b25zKCk7XHJcbiAgICB9LCAoZXJyb3IpID0+IHtcclxuXHJcbiAgICB9KTtcclxuICB9XHJcbiAgLy9TaG93IGFjdGl2YXRlLGRlYWN0aXZhdGUscmVzZXRQYXNzd29yZCxzZW5kYWN0aXZhdGlvbmVtYWlsIG1vZGFsc1xyXG4gIHNob3dDb25maXJtYXRpb25Nb2RhbCh0eXBlOiBudW1iZXIsIENvbmZpcm1hdGlvbk1vZGFsKSB7XHJcbiAgICB0aGlzLklzT3BlbkNvbmZpcm1hdGlvbk1vZGFsID0gZmFsc2U7XHJcbiAgICB0aGlzLnV0aWxpdHlTZXJ2aWNlLnN0YXJ0QmxvY2tVSSgpO1xyXG4gICAgc3dpdGNoICh0eXBlKSB7XHJcbiAgICAgIGNhc2UgMTpcclxuICAgICAgICB0aGlzLkNvbmZpcm1hdGlvbk1lc3NhZ2UgPSB0aGlzLnV0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJBY3RpdmF0ZUNvbmZpcm1hdGlvblwiKTtcclxuICAgICAgICB0aGlzLkNvbmZpcm1hdGlvbk1vZGFsVHlwZSA9IDFcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAyOlxyXG4gICAgICAgIHRoaXMuQ29uZmlybWF0aW9uTWVzc2FnZSA9IHRoaXMudXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkRlYWN0aXZhdGVDb25maXJtYXRpb25cIik7XHJcbiAgICAgICAgdGhpcy5Db25maXJtYXRpb25Nb2RhbFR5cGUgPSAyXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgMzpcclxuICAgICAgICB0aGlzLkNvbmZpcm1hdGlvbk1lc3NhZ2UgPSB0aGlzLnV0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJSZXNldFBhc3N3b3JkQ29uZmlybWF0aW9uXCIpO1xyXG4gICAgICAgIHRoaXMuQ29uZmlybWF0aW9uTW9kYWxUeXBlID0gM1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIDQ6XHJcbiAgICAgICAgdGhpcy5Db25maXJtYXRpb25NZXNzYWdlID0gdGhpcy51dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiU2VuZEFjdGl2YXRpb25NYWlsQ29uZmlybWF0aW9uXCIpO1xyXG4gICAgICAgIHRoaXMuQ29uZmlybWF0aW9uTW9kYWxUeXBlID0gNFxyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICAgIHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4oQ29uZmlybWF0aW9uTW9kYWwpO1xyXG4gICAgdGhpcy51dGlsaXR5U2VydmljZS5zdG9wQmxvY2tVSSgpO1xyXG5cclxuICB9XHJcblxyXG59XHJcbiIsIjxibG9jay11aT48L2Jsb2NrLXVpPlxyXG48ZGl2ICpuZ0lmPVwiU2hvd1BhZ2VDb250ZW50XCIgY2xhc3M9XCJjb250YWluZXItZmx1aWRcIj5cclxuICA8IS0tIGJlZ2luOjpIZWFkZXIgLS0+XHJcbiAgPGRpdiBjbGFzcz1cImNhcmQgY2FyZC1jdXN0b20taFwiPlxyXG4gICAgPGRpdiBjbGFzcz1cImNhcmQtaGVhZGVyIGJvcmRlci0wIHB0LTVcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cImNhcmQtdGl0bGUgYWxpZ24taXRlbXMtc3RhcnQgZmxleC1jb2x1bW5cIiAqbmdJZj1cIklzRmlsdGVyTG9hZGVkXCI+XHJcbiAgICAgICAgPGZvcm0gW2Zvcm1Hcm91cF09XCJVc2Vyc0Zvcm1cIj5cclxuICAgICAgICAgIDxCQlNGLVRleHRCb3ggW29wdGlvbnNdPVwic2VhcmNoVGV4dEJveFwiIFtncm91cF09XCJVc2Vyc0Zvcm1cIj48L0JCU0YtVGV4dEJveD5cclxuICAgICAgICA8L2Zvcm0+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiY2FyZC10b29sYmFyXCI+XHJcbiAgICAgICAgPCEtLSBiZWdpbjo6TWVudSAtLT5cclxuICAgICAgICA8ZGl2ICpuZ0lmPVwic2hvd0dlbmVyYWxCdG5zXCIgbmdiRHJvcGRvd24gY2xhc3M9XCJkLWlubGluZS1ibG9ja1wiIFtuZ1N0eWxlXT1cInsnZGlzcGxheSc6IFNob3dQYWdlQ29udGVudD09dHJ1ZT8nYmxvY2snOidub25lJ31cIj5cclxuICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cImxvYWRMaXN0cygpXCIgbmdiRHJvcGRvd25Ub2dnbGUgaHJlZj1cImphdmFzY3JpcHQ6O1wiIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tc20gYnRuLWxpZ2h0LXByaW1hcnkgbWUtM1wiIGlkPVwiRmlsdGVyc0Ryb3Bkb3duXCIgdGl0bGU9XCJGaWx0ZXJcIj5cclxuICAgICAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtZmlsdGVyIG1lLTFcIj48L2k+XHJcbiAgICAgICAgICAgIHt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkZpbHRlclwiKX19XHJcbiAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJJc0ZpbHRlckxvYWRlZFwiIG5nYkRyb3Bkb3duTWVudSBhcmlhLWxhYmVsbGVkYnk9XCJGaWx0ZXJzRHJvcGRvd25cIiBjbGFzcz1cIiBmaWx0ZXItY29udGFpbmVyIG1lbnUgbWVudS1zdWIgbWVudS1zdWItZHJvcGRvd24gbWVudS1jb2x1bW4gbWVudS1yb3VuZGVkIG1lbnUtZ3JheS04MDAgbWVudS1zdGF0ZS1iZy1saWdodC1wcmltYXJ5ICB3LTI1MHB4IHctbWQtNTAwcHggZnctYm9sZCBweS0zIFwiPlxyXG4gICAgICAgICAgICA8Zm9ybSBbZm9ybUdyb3VwXT1cIlVzZXJzRm9ybVwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJweC03IHB5LTVcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1sZy02XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTEwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8QkJTRi1Ecm9wZG93bkxpc3QgI3Blcm1pc3Npb25TZXREREwgW29wdGlvbnNdPVwicGVybWlzc2lvblNldHNPcHRpb25zXCIgW2dyb3VwXT1cIlVzZXJzRm9ybVwiPjwvQkJTRi1Ecm9wZG93bkxpc3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLWxnLTZcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItMTBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxCQlNGLURyb3Bkb3duTGlzdCAjYWNjb3VudFN0YXR1c0RETCBbb3B0aW9uc109XCJhY2NvdW50U3RhdHVzT3B0aW9uc1wiIFtncm91cF09XCJVc2Vyc0Zvcm1cIj48L0JCU0YtRHJvcGRvd25MaXN0PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1sZy02XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTEwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8QkJTRi1Ecm9wZG93bkxpc3QgI2xvY2tlZFN0YXR1c0RETCBbb3B0aW9uc109XCJsb2NrZWRTdGF0dXNPcHRpb25zXCIgW2dyb3VwXT1cIlVzZXJzRm9ybVwiPjwvQkJTRi1Ecm9wZG93bkxpc3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLWxnLTZcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItMTBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxCQlNGLURyb3Bkb3duTGlzdCAjZGVwYXJ0bWVudHNEREwgW29wdGlvbnNdPVwiZGVwYXJ0bWVudHNPcHRpb25zXCIgW2dyb3VwXT1cIlVzZXJzRm9ybVwiPjwvQkJTRi1Ecm9wZG93bkxpc3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1lbmRcIj5cclxuICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tbGlnaHQgYnRuLWFjdGl2ZS1saWdodC1wcmltYXJ5IHB2LXJlc2V0IGJ0bi1zbVwiIGlkPVwiYXBwbHlGaWx0ZXJzQnRuXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwicmVzZXRGaWx0ZXJzKClcIj5cclxuICAgICAgICAgICAgICAgICAgICB7e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJSZXNldFwiKX19XHJcbiAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZm9ybT5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxidXR0b24gKm5nSWY9XCJzaG93R2VuZXJhbEJ0bnNcIiBocmVmPVwiamF2YXNjcmlwdDo7XCIgdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJleHBvcnRFeGNlbCgpXCIgY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1saWdodC1wcmltYXJ5IG1lLTMgYm5zaWdodHMtYnRuLWV4cG9ydFwiXHJcbiAgICAgICAgICAgICAgICB0aXRsZT1cIkV4cG9ydFwiPlxyXG4gICAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtZG93bmxvYWQgbWUtMVwiPjwvaT5cclxuICAgICAgICAgIHt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkV4cG9ydFwiKX19XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPGJ1dHRvbiAqbmdJZj1cInNob3dBY3RpdmF0ZUJ0blwiIHR5cGU9XCJidXR0b25cIiBpZD1cImJ0bkFjdGl2YXRlXCIgY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1saWdodC1wcmltYXJ5IG1lLTNcIiBocmVmPVwiamF2YXNjcmlwdDo7XCIgZGF0YS10b2dnbGU9XCJtb2RhbFwiXHJcbiAgICAgICAgICAgICAgICBkYXRhLXRhcmdldD1cIiNDb25maXJtYXRpb25Nb2RhbFwiIChjbGljayk9XCJzaG93Q29uZmlybWF0aW9uTW9kYWwoMSwgQ29uZmlybWF0aW9uTW9kYWwpXCI+XHJcbiAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWhpc3RvcnlcIj48L2k+IHt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkFjdGl2YXRlXCIpfX1cclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICA8YnV0dG9uICpuZ0lmPVwic2hvd0RlYWN0aXZhdGVCdG5cIiB0eXBlPVwiYnV0dG9uXCIgaWQ9XCJidG5EZWFjdGl2YXRlXCIgY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1saWdodC1wcmltYXJ5IG1lLTNcIiBocmVmPVwiamF2YXNjcmlwdDo7XCIgZGF0YS10b2dnbGU9XCJtb2RhbFwiXHJcbiAgICAgICAgICAgICAgICBkYXRhLXRhcmdldD1cIiNDb25maXJtYXRpb25Nb2RhbFwiIChjbGljayk9XCJzaG93Q29uZmlybWF0aW9uTW9kYWwoMiwgQ29uZmlybWF0aW9uTW9kYWwpXCI+XHJcbiAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLXBvd2VyLW9mZlwiPjwvaT57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJEZWFjdGl2YXRlXCIpfX1cclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICA8YnV0dG9uICpuZ0lmPVwic2hvd1Jlc2V0UGFzc0J0blwiIHR5cGU9XCJidXR0b25cIiBpZD1cImJ0blJlc2V0UGFzc1wiIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4tbGlnaHQtcHJpbWFyeSBtZS0zXCIgaHJlZj1cImphdmFzY3JpcHQ6O1wiIGRhdGEtdG9nZ2xlPVwibW9kYWxcIlxyXG4gICAgICAgICAgICAgICAgZGF0YS10YXJnZXQ9XCIjQ29uZmlybWF0aW9uTW9kYWxcIiAoY2xpY2spPVwic2hvd0NvbmZpcm1hdGlvbk1vZGFsKDMsIENvbmZpcm1hdGlvbk1vZGFsKVwiPlxyXG4gICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1jb2dcIj48L2k+e3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiUmVzZXRQYXNzd29yZFwiKX19XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPGJ1dHRvbiAqbmdJZj1cInNob3dTZW5kRW1haWxCdG5cIiB0eXBlPVwiYnV0dG9uXCIgaWQ9XCJidG5SZXNlbmRBY3RpdmF0aW9uXCIgY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1saWdodC1wcmltYXJ5IG1lLTNcIiBocmVmPVwiamF2YXNjcmlwdDo7XCIgZGF0YS10b2dnbGU9XCJtb2RhbFwiXHJcbiAgICAgICAgICAgICAgICBkYXRhLXRhcmdldD1cIiNDb25maXJtYXRpb25Nb2RhbFwiIChjbGljayk9XCJzaG93Q29uZmlybWF0aW9uTW9kYWwoNCAsIENvbmZpcm1hdGlvbk1vZGFsKVwiPlxyXG4gICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1lbnZlbG9wZVwiPjwvaT4ge3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiU2VuZEFjdGl2YXRpb25FbWFpbFwiKX19XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPGJ1dHRvbiAqbmdJZj1cInNob3dHZW5lcmFsQnRuc1wiIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tc20gYnRuLXByaW1hcnlcIiB0aXRsZT1cIkFkZFwiIChjbGljayk9XCJzaG93QWRkVXNlck1vZGFsKGFkZFVzZXJNb2RhbClcIj5cclxuICAgICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLXBsdXMgbWUtMVwiPjwvaT5cclxuICAgICAgICAgIHt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkFkZFwiKX19XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPCEtLSBlbmQ6Ok1lbnUgLS0+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8IS0tIGVuZDo6SGVhZGVyIC0tPlxyXG4gICAgPCEtLSBiZWdpbjo6Qm9keSAtLT5cclxuICAgIDxkaXYgY2xhc3M9XCJjYXJkLWJvZHkgcHktM1wiPlxyXG4gICAgICA8IS0tIGJlZ2luOjpUYWJsZSBjb250YWluZXIgLS0+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1yZXNwb25zaXZlXCI+XHJcbiAgICAgICAgPCEtLSBiZWdpbjo6VGFibGUgLS0+XHJcbiAgICAgICAgPHRhYmxlIGNsYXNzPVwidGFibGUgYWxpZ24tbWlkZGxlIHRhYmxlLXJvdy1kYXNoZWQgZnMtNiBneS01IGRhdGFUYWJsZSBuby1mb290ZXJcIj5cclxuICAgICAgICAgIDx0aGVhZD5cclxuICAgICAgICAgICAgPHRyIGNsYXNzPVwidGV4dC1zdGFydCB0ZXh0LWdyYXktNDAwIGZ3LWJvbGRlciBmcy03IHRleHQtdXBwZXJjYXNlIGdzLTBcIj5cclxuICAgICAgICAgICAgICA8dGggY2xhc3M9XCJ3LTUwcHhcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuPlxyXG4gICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWNoZWNrIGZvcm0tY2hlY2stc20gZm9ybS1jaGVjay1jdXN0b20gZm9ybS1jaGVjay1zb2xpZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxtYXQtY2hlY2tib3ggKGNoYW5nZSk9XCJzZWxlY3RBbGxVc2VyTGlzdCgkZXZlbnQsVXNlclBhZ2luZ1Jlc3VsdClcIiBbY2hlY2tlZF09XCJhbGxTZWxlY3RlZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LWNoZWNrYm94PlxyXG4gICAgICAgICAgICAgICAgICAgIDwhLS08aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0XCIgKGNoYW5nZSk9XCJzZWxlY3RBbGxVc2VyTGlzdCgkZXZlbnQsVXNlclBhZ2luZ1Jlc3VsdClcIiBpZD1cImNoa19TZWxlY3RBbGxcIj4tLT5cclxuICAgICAgICAgICAgICAgICAgICAmbmJzcDs8c3Bhbj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgPC90aD5cclxuICAgICAgICAgICAgICA8dGggY2xhc3M9XCJtaW4tdy0xNTBweFwiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIk5hbWVcIil9fTwvdGg+XHJcbiAgICAgICAgICAgICAgPHRoIGNsYXNzPVwibWluLXctMTUwcHhcIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJFbWFpbFwiKX19PC90aD5cclxuICAgICAgICAgICAgICA8dGggY2xhc3M9XCJtaW4tdy0xNTBweFwiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIk1vYmlsZVwiKX19PC90aD5cclxuICAgICAgICAgICAgICA8dGggY2xhc3M9XCJtaW4tdy0xNTBweFwiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIlJvbGVzXCIpfX08L3RoPlxyXG4gICAgICAgICAgICAgIDx0aCBjbGFzcz1cIm1pbi13LTE1MHB4XCI+e3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiU3RhdHVzXCIpfX08L3RoPlxyXG4gICAgICAgICAgICAgIDx0aCBjbGFzcz1cIm1pbi13LTUwcHhcIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJBY3Rpb25cIil9fTwvdGg+XHJcbiAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICA8L3RoZWFkPlxyXG4gICAgICAgICAgPHRib2R5IGlkPVwibGlzdGluZ0NvbnRhaW5lclwiIGNsYXNzPVwiZnctYm9sZCB0ZXh0LWdyYXktNjAwIGJvcmRlci0wXCI+XHJcbiAgICAgICAgICAgIDx0ciAqbmdGb3I9XCJsZXQgdXNlciBvZiBVc2VyUGFnaW5nUmVzdWx0XCI+XHJcbiAgICAgICAgICAgICAgPHRkPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4+XHJcbiAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tY2hlY2sgZm9ybS1jaGVjay1zbSBmb3JtLWNoZWNrLWN1c3RvbSBmb3JtLWNoZWNrLXNvbGlkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPCEtLTxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBjbGFzcz1cImZvcm0tY2hlY2staW5wdXRcIiAoY2hhbmdlKT1cInVwZGF0ZVVzZXJMaXN0KCRldmVudCx1c2VyKVwiIGlkPVwiVXNlci17e3VzZXIuaWR9fVwiPi0tPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8bWF0LWNoZWNrYm94IChjaGFuZ2UpPVwidXBkYXRlVXNlckxpc3QoJGV2ZW50LHVzZXIpXCIgWyhuZ01vZGVsKV09XCJ1c2VyLnNlbGVjdGVkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtY2hlY2tib3g+XHJcbiAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICA8dGQ+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3ltYm9sIHN5bWJvbC0zNXB4XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGg2IGNsYXNzPVwic3ltYm9sLWxhYmVsIGZvbnQtc2l6ZS1oNSBmb250LXdlaWdodC1ib2xkIGJnLWxpZ2h0LXByaW1hcnkgbWwtMiBtYi0wIG1lLTNcIj5BPC9oNj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LXN0YXJ0IGZsZXgtY29sdW1uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGEgKm5nSWY9XCJsYW5ndWFnZT09J2VuJ1wiIGRhdGEtdG9nZ2xlPVwibW9kYWxcIiBkYXRhLXRhcmdldD1cIiNFZGl0VXNlck1vZGFsXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwic2hvd0VkaXRVc2VyTW9kYWwodXNlcixFZGl0VXNlck1vZGFsKVwiIGhyZWY9XCJqYXZhc2NyaXB0OnZvaWQoMClcIiBjbGFzcz1cInRleHQtZGFyayBmdy1ib2xkZXIgdGV4dC1ob3Zlci1wcmltYXJ5IGZzLTZcIj57e3VzZXIubmFtZS5lbmdsaXNofX08L2E+XHJcbiAgICAgICAgICAgICAgICAgICAgPGEgKm5nSWY9XCJsYW5ndWFnZT09J2FyJ1wiIGRhdGEtdG9nZ2xlPVwibW9kYWxcIiBkYXRhLXRhcmdldD1cIiNFZGl0VXNlck1vZGFsXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwic2hvd0VkaXRVc2VyTW9kYWwodXNlcixFZGl0VXNlck1vZGFsKVwiIGhyZWY9XCJqYXZhc2NyaXB0OnZvaWQoMClcIiBjbGFzcz1cInRleHQtZGFyayBmdy1ib2xkZXIgdGV4dC1ob3Zlci1wcmltYXJ5IGZzLTZcIj57e3VzZXIubmFtZS5hcmFiaWN9fTwvYT5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgIDx0ZD57e3VzZXIudXNlcm5hbWV9fTwvdGQ+XHJcbiAgICAgICAgICAgICAgPHRkPnt7dXNlci5tb2JpbGV9fTwvdGQ+XHJcbiAgICAgICAgICAgICAgPHRkPnt7dXNlci5wZXJtaXNzaW9uc2V0fX08L3RkPlxyXG4gICAgICAgICAgICAgIDx0ZD5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYmFkZ2UgYmFkZ2UtbGlnaHQtc3VjY2Vzc1wiICpuZ0lmPVwidXNlci5pc0FjdGl2ZT09dHJ1ZVwiPlxyXG4gICAgICAgICAgICAgICAgICB7e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJBY3RpdmF0ZVwiKX19XHJcbiAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImJhZGdlIGJhZGdlLWxpZ2h0LWRhbmdlclwiICpuZ0lmPVwidXNlci5pc0FjdGl2ZT09ZmFsc2VcIj5cclxuICAgICAgICAgICAgICAgICAge3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiRGVhY3RpdmF0ZVwiKX19XHJcbiAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICA8dGQ+XHJcbiAgICAgICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1idXR0b24gW21hdE1lbnVUcmlnZ2VyRm9yXT1cIm1lbnVcIiBjbGFzcz1cImJ0biBidG4tc20gYnRuLWljb24gYnRuLWxpZ2h0IGJ0bi1hY3RpdmUtbGlnaHQtcHJpbWFyeVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtZWxsaXBzaXMtaFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cclxuICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgIDxtYXQtbWVudSAjbWVudT1cIm1hdE1lbnVcIj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cIm1lbnUtaXRlbSBweC0zXCIgbmdiRHJvcGRvd25JdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwic2hvd0VkaXRVc2VyTW9kYWwodXNlcixFZGl0VXNlck1vZGFsKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtZW51LWxpbmsgcHgtM1wiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkVkaXRcIil9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIG5nYkRyb3Bkb3duSXRlbSBjbGFzcz1cIm1lbnUtaXRlbSBweC0zXCIgKm5nSWY9XCJ1c2VyLmlzQWN0aXZlXCIgaWQ9XCJidG5EZWFjdGl2YXRlXCIgKGNsaWNrKT1cInNob3dBY3RpdmF0ZVVzZXJNb2RhbCh1c2VyLGZhbHNlLEFjdGl2YXRlVXNlck1vZGFsKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtZW51LWxpbmsgcHgtM1wiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkRlYWN0aXZhdGVcIil9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIG5nYkRyb3Bkb3duSXRlbSBjbGFzcz1cIm1lbnUtaXRlbSBweC0zXCIgaWQ9XCJidG5hY3RpdmF0ZVwiIChjbGljayk9XCJzaG93QWN0aXZhdGVVc2VyTW9kYWwodXNlcix0cnVlLEFjdGl2YXRlVXNlck1vZGFsKVwiICpuZ0lmPVwiIXVzZXIuaXNBY3RpdmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWVudS1saW5rIHB4LTNcIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJBY3RpdmF0ZVwiKX19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gbmdiRHJvcGRvd25JdGVtIGNsYXNzPVwibWVudS1pdGVtIHB4LTNcIiBpZD1cImJ0blJlc2V0UGFzc1wiIChjbGljayk9XCJzaG93UmVzZXRQYXNzd29yZFVzZXJNb2RhbCh1c2VyICwgUmVzZXRQYXNzd29yZFVzZXJNb2RhbClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWVudS1saW5rIHB4LTNcIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJSZXNldFBhc3N3b3JkXCIpfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gbmdiRHJvcGRvd25JdGVtIGNsYXNzPVwibWVudS1pdGVtIHB4LTNcIiBpZD1cImJ0blJlc2V0UGFzc1wiIChjbGljayk9XCJzaG93c2V0UGFzc3dvcmRVc2VyTW9kYWwodXNlciwgc2V0UGFzc3dvcmRVc2VyTW9kYWwpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1lbnUtbGluayBweC0zXCI+e3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiU2V0UGFzc3dvcmRcIil9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBuZ2JEcm9wZG93bkl0ZW0gY2xhc3M9XCJtZW51LWl0ZW0gcHgtM1wiIGlkPVwiYnRuUmVzZXRQYXNzXCIgKm5nSWY9XCIhdXNlci5pc0FjdGl2ZVwiIChjbGljayk9XCJzaG93U2VuZEFjdGl2YXRpb25FbWFpbE1vZGFsKHVzZXIgLCBTZW5kQWN0aXZhdGlvbkVtYWlsTW9kYWwpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1lbnUtbGluayBweC0zXCI+e3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiU2VuZEFjdGl2YXRpb25FbWFpbFwiKX19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICA8L21hdC1tZW51PlxyXG5cclxuXHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgPHRyICpuZ0lmPVwiVXNlclBhZ2luZ1Jlc3VsdC5sZW5ndGggPT0gMFwiPlxyXG4gICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPVwiNlwiPlxyXG4gICAgICAgICAgICAgICAgPGxpYi1lbXB0eS1kYXRhPjwvbGliLWVtcHR5LWRhdGE+XHJcbiAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgIDwvdGJvZHk+XHJcbiAgICAgICAgPC90YWJsZT5cclxuICAgICAgICA8IS0tIGVuZDo6VGFibGUgLS0+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8IS0tIGVuZDo6VGFibGUgY29udGFpbmVyIC0tPlxyXG4gICAgICA8IS0tIGJlZ2luIHBhZ2luZy0tPlxyXG4gICAgICA8QkJTRi1QYWdpbmcgKEl0ZW1zKT1cInNldFVzZXJzTGlzdFJlc3VsdCgkZXZlbnQpXCIgKm5nSWY9XCJJc0ZpbHRlckxvYWRlZFwiIFtvcHRpb25zXT1cIlVzZXJQYWdpbmdcIlxyXG4gICAgICAgICAgICAgICAgICAgW2dyb3VwXT1cIlVzZXJzRm9ybVwiICNVc2VyUGFnaW5nVmlld0VsZW1lbnQ+XHJcbiAgICAgIDwvQkJTRi1QYWdpbmc+XHJcbiAgICAgIDwhLS0gRW5kIHBhZ2luZy0tPlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbjwvZGl2PlxyXG5cclxuPCEtLSBhZGQgdXNlci0tPlxyXG48bmctdGVtcGxhdGUgI2FkZFVzZXJNb2RhbCBsZXQtbW9kYWw+XHJcbiAgPGRpdiBjbGFzcz1cIm1vZGFsLWhlYWRlciBwYi0wIGJvcmRlci0wIGp1c3RpZnktY29udGVudC1lbmRcIj5cclxuICAgIDxoNSBjbGFzcz1cIm1vZGFsLXRpdGxlXCIgaWQ9XCJleGFtcGxlTW9kYWxMYWJlbFwiPjwvaDU+XHJcbiAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBkYXRhLWRpc21pc3M9XCJtb2RhbFwiIGFyaWEtbGFiZWw9XCJDbG9zZVwiIChjbGljayk9XCJtb2RhbC5kaXNtaXNzKClcIiBjbGFzcz1cImJ0biBidG4tc20gYnRuLWljb24gYnRuLWFjdGl2ZS1jb2xvci1wcmltYXJ5XCI+XHJcbiAgICAgIDxzcGFuIGNsYXNzPVwic3ZnLWljb24gc3ZnLWljb24tMVwiPlxyXG4gICAgICAgIDxzcGFuIFtpbmxpbmVTVkddPVwiJy4vc3JjL2Fzc2V0cy9pbWFnZXMvYXJyMDYxLnN2ZydcIj48L3NwYW4+XHJcbiAgICAgIDwvc3Bhbj5cclxuICAgIDwvYnV0dG9uPlxyXG4gIDwvZGl2PlxyXG4gIDxkaXYgY2xhc3M9XCJtb2RhbC1ib2R5IHNjcm9sbC15IHB4LTEwIHB4LWxnLTE1IHB0LTAgcGItMTVcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJtYi0xMyB0ZXh0LWNlbnRlclwiPlxyXG4gICAgICA8aDEgY2xhc3M9XCJtYi0zXCI+e3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiQWRkVXNlclwiKX19PC9oMT5cclxuICAgIDwvZGl2PlxyXG4gICAgPGZvcm0gW2Zvcm1Hcm91cF09XCJBZGRVc2VyRm9ybVwiIChuZ1N1Ym1pdCk9XCJhZGRVc2VyKClcIj5cclxuICAgICAgPEJCU0YtTXVsdGlMaW5ndWFsVGV4dEJveCBbb3B0aW9uc109XCJNdWx0aUxpbmd1YWxOYW1lXCIgW2dyb3VwXT1cIkFkZFVzZXJGb3JtXCI+PC9CQlNGLU11bHRpTGluZ3VhbFRleHRCb3g+XHJcbiAgICAgIDxCQlNGLVRleHRCb3ggW29wdGlvbnNdPVwiVXNlcm5hbWVcIiBbZ3JvdXBdPVwiQWRkVXNlckZvcm1cIj48L0JCU0YtVGV4dEJveD5cclxuICAgICAgPEJCU0YtVGV4dEJveCBbb3B0aW9uc109XCJTYW1BY2NvdW50XCIgW2dyb3VwXT1cIkFkZFVzZXJGb3JtXCI+PC9CQlNGLVRleHRCb3g+XHJcbiAgICAgIDxCQlNGLVBob25lIFtvcHRpb25zXT1cIk1vYmlsZU51bWJlclwiIFtncm91cF09XCJBZGRVc2VyRm9ybVwiPjwvQkJTRi1QaG9uZT5cclxuICAgICAgPEJCU0YtRHJvcGRvd25MaXN0IFtvcHRpb25zXT1cIlVzZXJEZXBhcnRtZW50XCIgW2dyb3VwXT1cIkFkZFVzZXJGb3JtXCI+PC9CQlNGLURyb3Bkb3duTGlzdD5cclxuICAgICAgPEJCU0YtVG9nZ2xlc2xpZGUgW29wdGlvbnNdPVwiU2VuZEFjdGl2YXRpb25FbWFpbFwiIFtncm91cF09XCJBZGRVc2VyRm9ybVwiPjwvQkJTRi1Ub2dnbGVzbGlkZT5cclxuICAgICAgPEJCU0YtRHJvcGRvd25MaXN0IFtvcHRpb25zXT1cIlVzZXJQZXJtaXNzaW9uc1wiIFtncm91cF09XCJBZGRVc2VyRm9ybVwiPjwvQkJTRi1Ecm9wZG93bkxpc3Q+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWNlbnRlciBwdC03XCI+XHJcbiAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgI0Nsb3NlVXNlck1vZGFsIGlkPVwiQ2xvc2VVc2VyTW9kYWxcIiBkYXRhLWRpc21pc3M9XCJtb2RhbFwiIGFyaWEtbGFiZWw9XCJDbG9zZVwiIGNsYXNzPVwiYnRuIGJ0bi1saWdodCBtZS0zIGJ0bi1zbVwiIChjbGljayk9XCJtb2RhbC5kaXNtaXNzKClcIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJDYW5jZWxMYWJlbFwiKX19IDwvYnV0dG9uPlxyXG4gICAgICAgIDxidXR0b24gdHlwZT1cInN1Ym1pdFwiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IGJ0bi1zbVwiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIlNhdmVMYWJlbFwiKX19PC9idXR0b24+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9mb3JtPlxyXG5cclxuICA8L2Rpdj5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjwhLS0gRWRpdCB1c2VyLS0+XHJcbjxuZy10ZW1wbGF0ZSAjRWRpdFVzZXJNb2RhbCBsZXQtbW9kYWw+XHJcbiAgPGRpdiBjbGFzcz1cIm1vZGFsLWhlYWRlciBwYi0wIGJvcmRlci0wIGp1c3RpZnktY29udGVudC1lbmRcIj5cclxuICAgIDxoNSBjbGFzcz1cIm1vZGFsLXRpdGxlXCIgaWQ9XCJleGFtcGxlTW9kYWxMYWJlbFwiPjwvaDU+XHJcbiAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBkYXRhLWRpc21pc3M9XCJtb2RhbFwiIGFyaWEtbGFiZWw9XCJDbG9zZVwiIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4taWNvbiBidG4tYWN0aXZlLWNvbG9yLXByaW1hcnlcIiAoY2xpY2spPVwibW9kYWwuZGlzbWlzcygpXCI+XHJcbiAgICAgIDxzcGFuIGNsYXNzPVwic3ZnLWljb24gc3ZnLWljb24tMVwiPlxyXG4gICAgICAgIDxzcGFuIFtpbmxpbmVTVkddPVwiJy4vc3JjL2Fzc2V0cy9pbWFnZXMvYXJyMDYxLnN2ZydcIj48L3NwYW4+XHJcbiAgICAgIDwvc3Bhbj5cclxuICAgIDwvYnV0dG9uPlxyXG4gIDwvZGl2PlxyXG4gIDxkaXYgY2xhc3M9XCJtb2RhbC1ib2R5IHNjcm9sbC15IHB4LTEwIHB4LWxnLTE1IHB0LTAgcGItMTVcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJtYi0xMyB0ZXh0LWNlbnRlclwiPlxyXG4gICAgICA8aDEgY2xhc3M9XCJtYi0zXCI+e3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiRWRpdFVzZXJcIil9fTwvaDE+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxmb3JtIFtmb3JtR3JvdXBdPVwiRWRpdFVzZXJGb3JtXCIgKG5nU3VibWl0KT1cImVkaXRVc2VyKClcIj5cclxuICAgICAgPEJCU0YtTXVsdGlMaW5ndWFsVGV4dEJveCBbb3B0aW9uc109XCJFZGl0TXVsdGlMaW5ndWFsTmFtZVwiIFtncm91cF09XCJFZGl0VXNlckZvcm1cIj48L0JCU0YtTXVsdGlMaW5ndWFsVGV4dEJveD5cclxuICAgICAgPEJCU0YtUGhvbmUgW29wdGlvbnNdPVwiRWRpdE1vYmlsZU51bWJlclwiIFtncm91cF09XCJFZGl0VXNlckZvcm1cIj48L0JCU0YtUGhvbmU+XHJcbiAgICAgIDxCQlNGLVRleHRCb3ggW29wdGlvbnNdPVwiRWRpdFVzZXJuYW1lXCIgW2dyb3VwXT1cIkVkaXRVc2VyRm9ybVwiPjwvQkJTRi1UZXh0Qm94PlxyXG4gICAgICA8QkJTRi1UZXh0Qm94IFtvcHRpb25zXT1cIkVkaXRFbWFpbFwiIFtncm91cF09XCJFZGl0VXNlckZvcm1cIj48L0JCU0YtVGV4dEJveD5cclxuICAgICAgPEJCU0YtVGV4dEJveCBbb3B0aW9uc109XCJFZGl0U2FtQWNjb3VudFwiIFtncm91cF09XCJFZGl0VXNlckZvcm1cIj48L0JCU0YtVGV4dEJveD5cclxuICAgICAgPEJCU0YtRHJvcGRvd25MaXN0IFtvcHRpb25zXT1cIkVkaXRVc2VyRGVwYXJ0bWVudFwiIFtncm91cF09XCJFZGl0VXNlckZvcm1cIj48L0JCU0YtRHJvcGRvd25MaXN0PlxyXG4gICAgICA8QkJTRi1Ecm9wZG93bkxpc3QgW29wdGlvbnNdPVwiRWRpdFVzZXJQZXJtaXNzaW9uc1wiIFtncm91cF09XCJFZGl0VXNlckZvcm1cIj48L0JCU0YtRHJvcGRvd25MaXN0PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwidGV4dC1jZW50ZXIgcHQtN1wiPlxyXG4gICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGRhdGEtZGlzbWlzcz1cIm1vZGFsXCIgI0Nsb3NlRWRpdFVzZXJNb2RhbCBpZD1cIkNsb3NlRWRpdFVzZXJNb2RhbFwiIGFyaWEtbGFiZWw9XCJDbG9zZVwiIGNsYXNzPVwiYnRuIGJ0bi1saWdodCBtZS0zIGJ0bi1zbVwiIChjbGljayk9XCJtb2RhbC5kaXNtaXNzKClcIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJDYW5jZWxMYWJlbFwiKX19PC9idXR0b24+XHJcbiAgICAgICAgPGJ1dHRvbiB0eXBlPVwic3VibWl0XCIgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgYnRuLXNtXCI+e3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiU2F2ZUxhYmVsXCIpfX08L2J1dHRvbj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Zvcm0+XHJcblxyXG4gIDwvZGl2PlxyXG48L25nLXRlbXBsYXRlPlxyXG48IS0tIERlYWN0aXZhdGUvQWN0aXZhdGUgVXNlciBNb2RhbCAtLT5cclxuPG5nLXRlbXBsYXRlICNBY3RpdmF0ZVVzZXJNb2RhbCBsZXQtbW9kYWw+XHJcbiAgPGRpdiBjbGFzcz1cIm1vZGFsLWhlYWRlciBwYi0wIGJvcmRlci0wIGp1c3RpZnktY29udGVudC1lbmRcIj5cclxuICAgIDxoNSBjbGFzcz1cIm1vZGFsLXRpdGxlXCIgaWQ9XCJleGFtcGxlTW9kYWxMYWJlbFwiPjwvaDU+XHJcbiAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBkYXRhLWRpc21pc3M9XCJtb2RhbFwiIGFyaWEtbGFiZWw9XCJDbG9zZVwiIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4taWNvbiBidG4tYWN0aXZlLWNvbG9yLXByaW1hcnlcIiAoY2xpY2spPVwibW9kYWwuZGlzbWlzcygpXCI+XHJcbiAgICAgIDxzcGFuIGNsYXNzPVwic3ZnLWljb24gc3ZnLWljb24tMVwiPlxyXG4gICAgICAgIDxzcGFuIFtpbmxpbmVTVkddPVwiJy4vc3JjL2Fzc2V0cy9pbWFnZXMvYXJyMDYxLnN2ZydcIj48L3NwYW4+XHJcbiAgICAgIDwvc3Bhbj5cclxuICAgIDwvYnV0dG9uPlxyXG4gIDwvZGl2PlxyXG4gIDxkaXYgY2xhc3M9XCJtb2RhbC1ib2R5IHNjcm9sbC15IHB4LTEwIHB4LWxnLTE1IHB0LTAgcGItMTVcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJtYi0xMyB0ZXh0LWNlbnRlclwiPlxyXG4gICAgICA8aDEgY2xhc3M9XCJtYi0zXCIgKm5nSWY9XCIhU2hvd0FjdGl2YXRlTW9kZWxEYXRhXCIgaWQ9XCJleGFtcGxlTW9kYWxMYWJlbFwiPlxyXG4gICAgICAgIHt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkRlYWN0aXZhdGVcIil9fVxyXG4gICAgICA8L2gxPlxyXG4gICAgICA8aDEgY2xhc3M9XCJtYi0zXCIgKm5nSWY9XCJTaG93QWN0aXZhdGVNb2RlbERhdGFcIiBpZD1cImV4YW1wbGVNb2RhbExhYmVsXCI+XHJcbiAgICAgICAge3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiQWN0aXZhdGVcIil9fVxyXG4gICAgICA8L2gxPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwibm90aWNlIGQtZmxleCBiZy1saWdodC13YXJuaW5nIHJvdW5kZWQgYm9yZGVyLXdhcm5pbmcgYm9yZGVyIGJvcmRlci1kYXNoZWQgbWItMTAgcC02XCI+XHJcbiAgICAgIDwhLS1iZWdpbjo6SWNvbi0tPlxyXG4gICAgICA8IS0tYmVnaW46OlN2ZyBJY29uIHwgcGF0aDogaWNvbnMvZHVvdHVuZS9nZW5lcmFsL2dlbjA0NC5zdmctLT5cclxuICAgICAgPHNwYW4gY2xhc3M9XCJzdmctaWNvbiBzdmctaWNvbi0ydHggc3ZnLWljb24td2FybmluZyBtZS00XCI+XHJcbiAgICAgICAgPHNwYW4gW2lubGluZVNWR109XCInLi9zcmMvYXNzZXRzL2ltYWdlcy9nZW4wNDQuc3ZnJ1wiPjwvc3Bhbj5cclxuICAgICAgPC9zcGFuPlxyXG4gICAgICA8IS0tZW5kOjpTdmcgSWNvbi0tPlxyXG4gICAgICA8IS0tZW5kOjpJY29uLS0+XHJcbiAgICAgIDwhLS1iZWdpbjo6V3JhcHBlci0tPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGZsZXgtc3RhY2sgZmxleC1ncm93LTFcIj5cclxuICAgICAgICA8IS0tYmVnaW46OkNvbnRlbnQtLT5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZnctYm9sZFwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImZzLTYgdGV4dC1ncmF5LTcwMFwiICpuZ0lmPVwiIVNob3dBY3RpdmF0ZU1vZGVsRGF0YVwiPlxyXG4gICAgICAgICAgICB7e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJEZWFjdGl2YXRlQ29uZmlybWF0aW9uXCIpfX1cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImZzLTYgdGV4dC1ncmF5LTcwMFwiICpuZ0lmPVwiU2hvd0FjdGl2YXRlTW9kZWxEYXRhXCI+XHJcbiAgICAgICAgICAgIHt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkFjdGl2YXRlQ29uZmlybWF0aW9uXCIpfX1cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwhLS1lbmQ6OkNvbnRlbnQtLT5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDwhLS1lbmQ6OldyYXBwZXItLT5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBpZD1cIlwiIGNsYXNzPVwiXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1yZXNwb25zaXZlLXhcIj5cclxuICAgICAgICA8dGFibGUgaWQ9XCJ0YWJsZUNvbmZpcm1hdGlvblwiIGNsYXNzPVwidGFibGUgdGFibGUtc3RyaXBlZCB0YWJsZS1ib3JkZXJlZCBcIj5cclxuICAgICAgICAgIDx0aGVhZD5cclxuICAgICAgICAgICAgPHRyPlxyXG4gICAgICAgICAgICAgIDx0aD57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJOYW1lXCIpfX08L3RoPlxyXG4gICAgICAgICAgICAgIDx0aD57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJFbWFpbFwiKX19PC90aD5cclxuICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgIDwvdGhlYWQ+XHJcbiAgICAgICAgICA8dGJvZHk+XHJcbiAgICAgICAgICAgIDx0ciBjbGFzcz1cInRySXRlbVwiPlxyXG4gICAgICAgICAgICAgIDx0ZD57e05hbWV9fTwvdGQ+XHJcbiAgICAgICAgICAgICAgPHRkPnt7RW1haWx9fTwvdGQ+XHJcbiAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICA8L3Rib2R5PlxyXG4gICAgICAgIDwvdGFibGU+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwidGV4dC1jZW50ZXIgcHQtN1wiPlxyXG4gICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiAjQ2xvc2VBY3RpdmF0ZVVzZXJNb2RhbCBpZD1cIkNsb3NlQWN0aXZhdGVVc2VyTW9kYWxcIiBkYXRhLWRpc21pc3M9XCJtb2RhbFwiIGFyaWEtbGFiZWw9XCJDbG9zZVwiIGNsYXNzPVwiYnRuIGJ0bi1saWdodCBtZS0zIGJ0bi1zbVwiIChjbGljayk9XCJtb2RhbC5kaXNtaXNzKClcIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJDYW5jZWxMYWJlbFwiKX19IDwvYnV0dG9uPlxyXG4gICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiAqbmdJZj1cIiFTaG93QWN0aXZhdGVNb2RlbERhdGFcIiAoY2xpY2spPVwiZGVhY3RpdmF0ZSgpXCJcclxuICAgICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBidG4tc21cIj5cclxuICAgICAgICB7e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJTYXZlTGFiZWxcIil9fVxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgKm5nSWY9XCJTaG93QWN0aXZhdGVNb2RlbERhdGFcIiAoY2xpY2spPVwiYWN0aXZhdGUoKVwiXHJcbiAgICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgYnRuLXNtXCI+XHJcbiAgICAgICAge3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiU2F2ZUxhYmVsXCIpfX1cclxuICAgICAgPC9idXR0b24+XHJcblxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbjwvbmctdGVtcGxhdGU+XHJcbjwhLS0gUmVzZXRQYXNzd29yZCBVc2VyIE1vZGFsIC0tPlxyXG48bmctdGVtcGxhdGUgI1Jlc2V0UGFzc3dvcmRVc2VyTW9kYWwgbGV0LW1vZGFsPlxyXG4gIDxkaXYgY2xhc3M9XCJtb2RhbC1oZWFkZXIgcGItMCBib3JkZXItMCBqdXN0aWZ5LWNvbnRlbnQtZW5kXCI+XHJcbiAgICA8aDUgY2xhc3M9XCJtb2RhbC10aXRsZVwiIGlkPVwiZXhhbXBsZU1vZGFsTGFiZWxcIj48L2g1PlxyXG4gICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgZGF0YS1kaXNtaXNzPVwibW9kYWxcIiBhcmlhLWxhYmVsPVwiQ2xvc2VcIiBjbGFzcz1cImJ0biBidG4tc20gYnRuLWljb24gYnRuLWFjdGl2ZS1jb2xvci1wcmltYXJ5XCIgKGNsaWNrKT1cIm1vZGFsLmRpc21pc3MoKVwiPlxyXG4gICAgICA8c3BhbiBjbGFzcz1cInN2Zy1pY29uIHN2Zy1pY29uLTFcIj5cclxuICAgICAgICA8c3BhbiBbaW5saW5lU1ZHXT1cIicuL3NyYy9hc3NldHMvaW1hZ2VzL2FycjA2MS5zdmcnXCI+PC9zcGFuPlxyXG4gICAgICA8L3NwYW4+XHJcbiAgICA8L2J1dHRvbj5cclxuICA8L2Rpdj5cclxuICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keSBzY3JvbGwteSBweC0xMCBweC1sZy0xNSBwdC0wIHBiLTE1XCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwibWItMTMgdGV4dC1jZW50ZXJcIj5cclxuICAgICAgPGgxIGNsYXNzPVwibWItM1wiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIlJlc2V0UGFzc3dvcmRcIil9fTwvaDE+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJub3RpY2UgZC1mbGV4IGJnLWxpZ2h0LXdhcm5pbmcgcm91bmRlZCBib3JkZXItd2FybmluZyBib3JkZXIgYm9yZGVyLWRhc2hlZCBtYi0xMCBwLTZcIj5cclxuICAgICAgPCEtLWJlZ2luOjpJY29uLS0+XHJcbiAgICAgIDwhLS1iZWdpbjo6U3ZnIEljb24gfCBwYXRoOiBpY29ucy9kdW90dW5lL2dlbmVyYWwvZ2VuMDQ0LnN2Zy0tPlxyXG4gICAgICA8c3BhbiBjbGFzcz1cInN2Zy1pY29uIHN2Zy1pY29uLTJ0eCBzdmctaWNvbi13YXJuaW5nIG1lLTRcIj5cclxuICAgICAgICA8c3BhbiBbaW5saW5lU1ZHXT1cIicuL3NyYy9hc3NldHMvaW1hZ2VzL2dlbjA0NC5zdmcnXCI+PC9zcGFuPlxyXG4gICAgICA8L3NwYW4+XHJcbiAgICAgIDwhLS1lbmQ6OlN2ZyBJY29uLS0+XHJcbiAgICAgIDwhLS1lbmQ6Okljb24tLT5cclxuICAgICAgPCEtLWJlZ2luOjpXcmFwcGVyLS0+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZmxleC1zdGFjayBmbGV4LWdyb3ctMVwiPlxyXG4gICAgICAgIDwhLS1iZWdpbjo6Q29udGVudC0tPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJmdy1ib2xkXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZnMtNiB0ZXh0LWdyYXktNzAwXCI+XHJcbiAgICAgICAgICAgIHt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIlJlc2V0UGFzc3dvcmRDb25maXJtYXRpb25cIil9fVxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPCEtLWVuZDo6Q29udGVudC0tPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPCEtLWVuZDo6V3JhcHBlci0tPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGlkPVwiXCIgY2xhc3M9XCJcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLXJlc3BvbnNpdmVcIj5cclxuICAgICAgICA8IS0tIGJlZ2luOjpUYWJsZSAtLT5cclxuICAgICAgICA8dGFibGUgY2xhc3M9XCJ0YWJsZSBhbGlnbi1taWRkbGUgdGFibGUtcm93LWRhc2hlZCBmcy02IGd5LTUgZGF0YVRhYmxlIG5vLWZvb3RlclwiPlxyXG4gICAgICAgICAgPHRoZWFkPlxyXG4gICAgICAgICAgICA8dHIgY2xhc3M9XCJ0ZXh0LXN0YXJ0IHRleHQtZ3JheS00MDAgZnctYm9sZGVyIGZzLTcgdGV4dC11cHBlcmNhc2UgZ3MtMFwiPlxyXG4gICAgICAgICAgICAgIDx0aCBjbGFzcz1cIm1pbi13LTIwMFwiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIk5hbWVcIil9fTwvdGg+XHJcbiAgICAgICAgICAgICAgPHRoIGNsYXNzPVwibWluLXctMjAwXCI+e3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiRW1haWxcIil9fTwvdGg+XHJcbiAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICA8L3RoZWFkPlxyXG4gICAgICAgICAgPHRib2R5IGNsYXNzPVwiZnctYm9sZCB0ZXh0LWdyYXktNjAwIGJvcmRlci0wXCI+XHJcbiAgICAgICAgICAgIDx0ciBjbGFzcz1cInRySXRlbVwiPlxyXG4gICAgICAgICAgICAgIDx0ZCBjbGFzcz1cInRleHQtZGFya1wiPnt7TmFtZX19PC90ZD5cclxuICAgICAgICAgICAgICA8dGQ+e3tFbWFpbH19PC90ZD5cclxuICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgIDwvdGJvZHk+XHJcbiAgICAgICAgPC90YWJsZT5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8ZGl2IGNsYXNzPVwidGV4dC1jZW50ZXIgcHQtN1wiPlxyXG4gICAgICA8YnV0dG9uIGlkPVwiQ2xvc2VSZXNldFBhc3N3b3JkVXNlck1vZGFsXCIgI0Nsb3NlUmVzZXRQYXNzd29yZFVzZXJNb2RhbCB0eXBlPVwiYnV0dG9uXCIgZGF0YS1kaXNtaXNzPVwibW9kYWxcIiBhcmlhLWxhYmVsPVwiQ2xvc2VcIiBjbGFzcz1cImJ0biBidG4tbGlnaHQgbWUtMyBidG4tc21cIiAoY2xpY2spPVwibW9kYWwuZGlzbWlzcygpXCI+e3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiQ2FuY2VsTGFiZWxcIil9fTwvYnV0dG9uPlxyXG5cclxuICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cInJlc2V0UGFzc3dvcmQoKVwiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IGJ0bi1zbVwiPlxyXG4gICAgICAgIHt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIlNhdmVMYWJlbFwiKX19XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48IS0tIHNldFBhc3N3b3JkIFVzZXIgTW9kYWwgLS0+XHJcbjxuZy10ZW1wbGF0ZSAjc2V0UGFzc3dvcmRVc2VyTW9kYWwgbGV0LW1vZGFsPlxyXG4gIDxkaXYgY2xhc3M9XCJtb2RhbC1oZWFkZXIgcGItMCBib3JkZXItMCBqdXN0aWZ5LWNvbnRlbnQtZW5kXCI+XHJcbiAgICA8aDUgY2xhc3M9XCJtb2RhbC10aXRsZVwiIGlkPVwiZXhhbXBsZU1vZGFsTGFiZWxcIj48L2g1PlxyXG4gICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgZGF0YS1kaXNtaXNzPVwibW9kYWxcIiBhcmlhLWxhYmVsPVwiQ2xvc2VcIiBjbGFzcz1cImJ0biBidG4tc20gYnRuLWljb24gYnRuLWFjdGl2ZS1jb2xvci1wcmltYXJ5XCIgKGNsaWNrKT1cIm1vZGFsLmRpc21pc3MoKVwiPlxyXG4gICAgICA8c3BhbiBjbGFzcz1cInN2Zy1pY29uIHN2Zy1pY29uLTFcIj5cclxuICAgICAgICA8c3BhbiBbaW5saW5lU1ZHXT1cIicuL3NyYy9hc3NldHMvaW1hZ2VzL2FycjA2MS5zdmcnXCI+PC9zcGFuPlxyXG4gICAgICA8L3NwYW4+XHJcbiAgICA8L2J1dHRvbj5cclxuICA8L2Rpdj5cclxuICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keSBzY3JvbGwteSBweC0xMCBweC1sZy0xNSBwdC0wIHBiLTE1XCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwibWItMTMgdGV4dC1jZW50ZXJcIj5cclxuICAgICAgPGgxIGNsYXNzPVwibWItM1wiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIlNldFBhc3N3b3JkXCIpfX08L2gxPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwibm90aWNlIGQtZmxleCBiZy1saWdodC13YXJuaW5nIHJvdW5kZWQgYm9yZGVyLXdhcm5pbmcgYm9yZGVyIGJvcmRlci1kYXNoZWQgbWItMTAgcC02XCI+XHJcbiAgICAgIDwhLS1iZWdpbjo6SWNvbi0tPlxyXG4gICAgICA8IS0tYmVnaW46OlN2ZyBJY29uIHwgcGF0aDogaWNvbnMvZHVvdHVuZS9nZW5lcmFsL2dlbjA0NC5zdmctLT5cclxuICAgICAgPHNwYW4gY2xhc3M9XCJzdmctaWNvbiBzdmctaWNvbi0ydHggc3ZnLWljb24td2FybmluZyBtZS00XCI+XHJcbiAgICAgICAgPHNwYW4gW2lubGluZVNWR109XCInLi9zcmMvYXNzZXRzL2ltYWdlcy9nZW4wNDQuc3ZnJ1wiPjwvc3Bhbj5cclxuICAgICAgPC9zcGFuPlxyXG4gICAgICA8IS0tZW5kOjpTdmcgSWNvbi0tPlxyXG4gICAgICA8IS0tZW5kOjpJY29uLS0+XHJcbiAgICAgIDwhLS1iZWdpbjo6V3JhcHBlci0tPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGZsZXgtc3RhY2sgZmxleC1ncm93LTFcIj5cclxuICAgICAgICA8IS0tYmVnaW46OkNvbnRlbnQtLT5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZnctYm9sZFwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImZzLTYgdGV4dC1ncmF5LTcwMFwiPlxyXG4gICAgICAgICAgICB7e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJTZXRQYXNzd29yZENvbmZpcm1hdGlvblwiKX19XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8IS0tZW5kOjpDb250ZW50LS0+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8IS0tZW5kOjpXcmFwcGVyLS0+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxmb3JtIFtmb3JtR3JvdXBdPVwiU2V0VXNlclBhc3N3b3JkRm9ybVwiIChuZ1N1Ym1pdCk9XCJzZXRQYXNzd29yZCgpXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1yZXNwb25zaXZlXCI+XHJcbiAgICAgICAgPCEtLSBiZWdpbjo6VGFibGUgLS0+XHJcbiAgICAgICAgPHRhYmxlIGlkPVwidGFibGVDb25maXJtYXRpb25cIiBjbGFzcz1cInRhYmxlIGFsaWduLW1pZGRsZSB0YWJsZS1yb3ctZGFzaGVkIGZzLTYgZ3ktNSBkYXRhVGFibGUgbm8tZm9vdGVyXCI+XHJcbiAgICAgICAgICA8dGhlYWQ+XHJcbiAgICAgICAgICAgIDx0ciBjbGFzcz1cInRleHQtc3RhcnQgdGV4dC1ncmF5LTQwMCBmdy1ib2xkZXIgZnMtNyB0ZXh0LXVwcGVyY2FzZSBncy0wXCI+XHJcbiAgICAgICAgICAgICAgPHRoIGNsYXNzPVwibWluLXctMTUwXCI+IHt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIk5hbWVcIil9fTwvdGg+XHJcbiAgICAgICAgICAgICAgPHRoIGNsYXNzPVwibWluLXctMTUwXCI+IHt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkVtYWlsXCIpfX08L3RoPlxyXG4gICAgICAgICAgICAgIDx0aCBjbGFzcz1cIm1pbi13LTE1MFwiPiB7e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJQYXNzd29yZFwiKX19PC90aD5cclxuICAgICAgICAgICAgICA8dGggY2xhc3M9XCJtaW4tdy0xNTBcIj4ge3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiQ29uZmlybVBhc3N3b3JkXCIpfX08L3RoPlxyXG4gICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgPC90aGVhZD5cclxuICAgICAgICAgIDx0Ym9keSBjbGFzcz1cImZ3LWJvbGQgdGV4dC1ncmF5LTYwMCBib3JkZXItMFwiPlxyXG4gICAgICAgICAgICA8dHIgY2xhc3M9XCJ0ckl0ZW1cIj5cclxuICAgICAgICAgICAgICA8dGQ+e3tOYW1lfX08L3RkPlxyXG4gICAgICAgICAgICAgIDx0ZD57e0VtYWlsfX08L3RkPlxyXG4gICAgICAgICAgICAgIDx0ZD5cclxuICAgICAgICAgICAgICAgIDxCQlNGLVRleHRCb3ggW29wdGlvbnNdPVwiUGFzc3dvcmRcIiBbZ3JvdXBdPVwiU2V0VXNlclBhc3N3b3JkRm9ybVwiPjwvQkJTRi1UZXh0Qm94PlxyXG4gICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgPHRkPlxyXG4gICAgICAgICAgICAgICAgPEJCU0YtVGV4dEJveCBbb3B0aW9uc109XCJQYXNzd29yZENvbmZpcm1hdGlvblwiIFtncm91cF09XCJTZXRVc2VyUGFzc3dvcmRGb3JtXCI+PC9CQlNGLVRleHRCb3g+XHJcbiAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgIDwvdGJvZHk+XHJcbiAgICAgICAgPC90YWJsZT5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWNlbnRlciBwdC03XCI+XHJcbiAgICAgICAgPGJ1dHRvbiBpZD1cIkNsb3Nlc2V0UGFzc3dvcmRVc2VyTW9kYWxcIiAjQ2xvc2VzZXRQYXNzd29yZFVzZXJNb2RhbCB0eXBlPVwiYnV0dG9uXCIgYXJpYS1sYWJlbD1cIkNsb3NlXCIgY2xhc3M9XCJidG4gYnRuLWxpZ2h0IG1lLTMgYnRuLXNtXCIgKGNsaWNrKT1cIm1vZGFsLmRpc21pc3MoKVwiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkNhbmNlbExhYmVsXCIpfX08L2J1dHRvbj5cclxuICAgICAgICA8YnV0dG9uIHR5cGU9XCJzdWJtaXRcIiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBidG4tc21cIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJTYXZlTGFiZWxcIil9fTwvYnV0dG9uPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZm9ybT5cclxuXHJcbiAgPC9kaXY+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48IS0tIFNlbmQgQWN0aXZhdGlvbiBFbWFpbCBNb2RhbCAtLT5cclxuPG5nLXRlbXBsYXRlICNTZW5kQWN0aXZhdGlvbkVtYWlsTW9kYWwgbGV0LW1vZGFsPlxyXG4gIDxkaXYgY2xhc3M9XCJtb2RhbC1oZWFkZXIgcGItMCBib3JkZXItMCBqdXN0aWZ5LWNvbnRlbnQtZW5kXCI+XHJcbiAgICA8aDUgY2xhc3M9XCJtb2RhbC10aXRsZVwiIGlkPVwiZXhhbXBsZU1vZGFsTGFiZWxcIj48L2g1PlxyXG4gICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgZGF0YS1kaXNtaXNzPVwibW9kYWxcIiBhcmlhLWxhYmVsPVwiQ2xvc2VcIiBjbGFzcz1cImJ0biBidG4tc20gYnRuLWljb24gYnRuLWFjdGl2ZS1jb2xvci1wcmltYXJ5XCIgKGNsaWNrKT1cIm1vZGFsLmRpc21pc3MoKVwiPlxyXG4gICAgICA8c3BhbiBjbGFzcz1cInN2Zy1pY29uIHN2Zy1pY29uLTFcIj5cclxuICAgICAgICA8c3BhbiBbaW5saW5lU1ZHXT1cIicuL3NyYy9hc3NldHMvaW1hZ2VzL2FycjA2MS5zdmcnXCI+PC9zcGFuPlxyXG4gICAgICA8L3NwYW4+XHJcbiAgICA8L2J1dHRvbj5cclxuICA8L2Rpdj5cclxuICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keSBzY3JvbGwteSBweC0xMCBweC1sZy0xNSBwdC0wIHBiLTE1XCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwibWItMTMgdGV4dC1jZW50ZXJcIj5cclxuICAgICAgPGgxIGNsYXNzPVwibWItM1wiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIlNlbmRBY3RpdmF0aW9uRW1haWxcIil9fTwvaDE+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJub3RpY2UgZC1mbGV4IGJnLWxpZ2h0LXdhcm5pbmcgcm91bmRlZCBib3JkZXItd2FybmluZyBib3JkZXIgYm9yZGVyLWRhc2hlZCBtYi0xMCBwLTZcIj5cclxuICAgICAgPCEtLWJlZ2luOjpJY29uLS0+XHJcbiAgICAgIDwhLS1iZWdpbjo6U3ZnIEljb24gfCBwYXRoOiBpY29ucy9kdW90dW5lL2dlbmVyYWwvZ2VuMDQ0LnN2Zy0tPlxyXG4gICAgICA8c3BhbiBjbGFzcz1cInN2Zy1pY29uIHN2Zy1pY29uLTJ0eCBzdmctaWNvbi13YXJuaW5nIG1lLTRcIj5cclxuICAgICAgICA8c3BhbiBbaW5saW5lU1ZHXT1cIicuL3NyYy9hc3NldHMvaW1hZ2VzL2dlbjA0NC5zdmcnXCI+PC9zcGFuPlxyXG4gICAgICA8L3NwYW4+XHJcbiAgICAgIDwhLS1lbmQ6OlN2ZyBJY29uLS0+XHJcbiAgICAgIDwhLS1lbmQ6Okljb24tLT5cclxuICAgICAgPCEtLWJlZ2luOjpXcmFwcGVyLS0+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZmxleC1zdGFjayBmbGV4LWdyb3ctMVwiPlxyXG4gICAgICAgIDwhLS1iZWdpbjo6Q29udGVudC0tPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJmdy1ib2xkXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZnMtNiB0ZXh0LWdyYXktNzAwXCI+XHJcbiAgICAgICAgICAgIHt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkFjdGl2YXRlQ29uZmlybWF0aW9uXCIpfX1cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwhLS1lbmQ6OkNvbnRlbnQtLT5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDwhLS1lbmQ6OldyYXBwZXItLT5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cIm5vdGUgbm90ZS13YXJuaW5nIHRleHQtY2VudGVyXCI+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1yZXNwb25zaXZlXCI+XHJcbiAgICAgIDwhLS0gYmVnaW46OlRhYmxlIC0tPlxyXG4gICAgICA8dGFibGUgaWQ9XCJ0YWJsZUNvbmZpcm1hdGlvblwiIGNsYXNzPVwidGFibGUgYWxpZ24tbWlkZGxlIHRhYmxlLXJvdy1kYXNoZWQgZnMtNiBneS01IGRhdGFUYWJsZSBuby1mb290ZXJcIj5cclxuICAgICAgICA8dGhlYWQ+XHJcbiAgICAgICAgICA8dHIgY2xhc3M9XCJ0ZXh0LXN0YXJ0IHRleHQtZ3JheS00MDAgZnctYm9sZGVyIGZzLTcgdGV4dC11cHBlcmNhc2UgZ3MtMFwiPlxyXG4gICAgICAgICAgICA8dGggY2xhc3M9XCJtaW4tdy0xNTBcIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJOYW1lXCIpfX08L3RoPlxyXG4gICAgICAgICAgICA8dGggY2xhc3M9XCJtaW4tdy0xNTBcIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJFbWFpbFwiKX19PC90aD5cclxuICAgICAgICAgICAgPHRoIGNsYXNzPVwibWluLXctNTBcIiAqbmdJZj1cIlNlbGVjdGVkVXNlckxpc3QubGVuZ3RoPjFcIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJBY3Rpb25cIil9fTwvdGg+XHJcbiAgICAgICAgICA8L3RyPlxyXG4gICAgICAgIDwvdGhlYWQ+XHJcbiAgICAgICAgPHRib2R5IGNsYXNzPVwiZnctYm9sZCB0ZXh0LWdyYXktNjAwIGJvcmRlci0wXCI+XHJcbiAgICAgICAgICA8dHIgKm5nRm9yPVwibGV0IHVzZXIgb2YgU2VsZWN0ZWRVc2VyTGlzdFwiIGNsYXNzPVwidHJJdGVtXCI+XHJcbiAgICAgICAgICAgIDx0ZCAqbmdJZj1cImxhbmd1YWdlPT0nZW4nXCIgY2xhc3M9XCJ0ZXh0LWRhcmtcIj57e3VzZXIubmFtZS5lbmdsaXNofX08L3RkPlxyXG4gICAgICAgICAgICA8dGQgKm5nSWY9XCJsYW5ndWFnZT09J2FyJ1wiIGNsYXNzPVwidGV4dC1kYXJrXCI+e3t1c2VyLm5hbWUuYXJhYmljfX08L3RkPlxyXG5cclxuICAgICAgICAgICAgPHRkPnt7dXNlci51c2VybmFtZX19PC90ZD5cclxuICAgICAgICAgICAgPHRkICpuZ0lmPVwiU2VsZWN0ZWRVc2VyTGlzdC5sZW5ndGg+MVwiPlxyXG4gICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJkZWxldGVVc2VyRnJvbUxpc3QodXNlcilcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLWxpZ2h0LWRhbmdlciBidG4taWNvbiBidG4tc21cIj5cclxuICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLXRyYXNoXCI+PC9pPlxyXG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8L3RkPlxyXG5cclxuICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgPC90Ym9keT5cclxuICAgICAgPC90YWJsZT5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cInRleHQtY2VudGVyIHB0LTdcIj5cclxuICAgICAgPGJ1dHRvbiAjQ2xvc2VBY3RpdmF0aW9uRW1haWxNb2RhbCBpZD1cIkNsb3NlQWN0aXZhdGlvbkVtYWlsTW9kYWxcIiB0eXBlPVwiYnV0dG9uXCIgYXJpYS1sYWJlbD1cIkNsb3NlXCIgY2xhc3M9XCJidG4gYnRuLWxpZ2h0IG1lLTMgYnRuLXNtXCIgKGNsaWNrKT1cIm1vZGFsLmRpc21pc3MoKVwiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkNhbmNlbExhYmVsXCIpfX08L2J1dHRvbj5cclxuICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgYnRuLXNtXCIgKGNsaWNrKT1cInNlbmRBY3RpdmF0aW9uRW1haWxGb3JVc2VyKClcIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJTYXZlTGFiZWxcIil9fTwvYnV0dG9uPlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48IS0tIGNvbmZpcm1hdGlvbiBNZXNzYWdlICBNb2RhbCAtLT5cclxuPG5nLXRlbXBsYXRlICNDb25maXJtYXRpb25Nb2RhbCBsZXQtbW9kYWw+XHJcbiAgPGRpdiBjbGFzcz1cIm1vZGFsLWhlYWRlciBwYi0wIGJvcmRlci0wIGp1c3RpZnktY29udGVudC1lbmRcIj5cclxuICAgIDxoNSBjbGFzcz1cIm1vZGFsLXRpdGxlXCIgaWQ9XCJleGFtcGxlTW9kYWxMYWJlbFwiPjwvaDU+XHJcbiAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBkYXRhLWRpc21pc3M9XCJtb2RhbFwiIGFyaWEtbGFiZWw9XCJDbG9zZVwiIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4taWNvbiBidG4tYWN0aXZlLWNvbG9yLXByaW1hcnlcIiAoY2xpY2spPVwibW9kYWwuZGlzbWlzcygpXCI+XHJcbiAgICAgIDxzcGFuIGNsYXNzPVwic3ZnLWljb24gc3ZnLWljb24tMVwiPlxyXG4gICAgICAgIDxzcGFuIFtpbmxpbmVTVkddPVwiJy4vc3JjL2Fzc2V0cy9pbWFnZXMvYXJyMDYxLnN2ZydcIj48L3NwYW4+XHJcbiAgICAgIDwvc3Bhbj5cclxuICAgIDwvYnV0dG9uPlxyXG4gIDwvZGl2PlxyXG4gIDxkaXYgY2xhc3M9XCJtb2RhbC1ib2R5IHNjcm9sbC15IHB4LTEwIHB4LWxnLTE1IHB0LTAgcGItMTVcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJtYi0xMyB0ZXh0LWNlbnRlclwiPlxyXG4gICAgICA8aDEgY2xhc3M9XCJtYi0zXCI+e3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiQ29uZmlybWF0aW9uTWVzc2FnZVwiKX19PC9oMT5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cIm5vdGljZSBkLWZsZXggYmctbGlnaHQtd2FybmluZyByb3VuZGVkIGJvcmRlci13YXJuaW5nIGJvcmRlciBib3JkZXItZGFzaGVkIG1iLTEwIHAtNlwiPlxyXG4gICAgICA8IS0tYmVnaW46Okljb24tLT5cclxuICAgICAgPCEtLWJlZ2luOjpTdmcgSWNvbiB8IHBhdGg6IGljb25zL2R1b3R1bmUvZ2VuZXJhbC9nZW4wNDQuc3ZnLS0+XHJcbiAgICAgIDxzcGFuIGNsYXNzPVwic3ZnLWljb24gc3ZnLWljb24tMnR4IHN2Zy1pY29uLXdhcm5pbmcgbWUtNFwiPlxyXG4gICAgICAgIDxzcGFuIFtpbmxpbmVTVkddPVwiJy4vc3JjL2Fzc2V0cy9pbWFnZXMvZ2VuMDQ0LnN2ZydcIj48L3NwYW4+XHJcbiAgICAgIDwvc3Bhbj5cclxuICAgICAgPCEtLWVuZDo6U3ZnIEljb24tLT5cclxuICAgICAgPCEtLWVuZDo6SWNvbi0tPlxyXG4gICAgICA8IS0tYmVnaW46OldyYXBwZXItLT5cclxuICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBmbGV4LXN0YWNrIGZsZXgtZ3Jvdy0xXCI+XHJcbiAgICAgICAgPCEtLWJlZ2luOjpDb250ZW50LS0+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImZ3LWJvbGRcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmcy02IHRleHQtZ3JheS03MDBcIj5cclxuICAgICAgICAgICAge3tDb25maXJtYXRpb25NZXNzYWdlfX1cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwhLS1lbmQ6OkNvbnRlbnQtLT5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDwhLS1lbmQ6OldyYXBwZXItLT5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cInRhYmxlLXJlc3BvbnNpdmVcIj5cclxuICAgICAgPCEtLSBiZWdpbjo6VGFibGUgLS0+XHJcbiAgICAgIDx0YWJsZSBpZD1cInRhYmxlQ29uZmlybWF0aW9uXCIgY2xhc3M9XCJ0YWJsZSBhbGlnbi1taWRkbGUgdGFibGUtcm93LWRhc2hlZCBmcy02IGd5LTUgZGF0YVRhYmxlIG5vLWZvb3RlclwiPlxyXG4gICAgICAgIDx0aGVhZD5cclxuICAgICAgICAgIDx0ciBjbGFzcz1cInRleHQtc3RhcnQgdGV4dC1ncmF5LTQwMCBmdy1ib2xkZXIgZnMtNyB0ZXh0LXVwcGVyY2FzZSBncy0wXCI+XHJcbiAgICAgICAgICAgIDx0aCBjbGFzcz1cIm1pbi13LTE1MFwiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIk5hbWVcIil9fTwvdGg+XHJcbiAgICAgICAgICAgIDx0aCBjbGFzcz1cIm1pbi13LTE1MFwiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkVtYWlsXCIpfX08L3RoPlxyXG4gICAgICAgICAgICA8dGggY2xhc3M9XCJtaW4tdy01MFwiICpuZ0lmPVwiU2VsZWN0ZWRVc2VyTGlzdC5sZW5ndGg+MVwiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkFjdGlvblwiKX19PC90aD5cclxuICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgPC90aGVhZD5cclxuICAgICAgICA8dGJvZHkgY2xhc3M9XCJmdy1ib2xkIHRleHQtZ3JheS02MDAgYm9yZGVyLTBcIj5cclxuICAgICAgICAgIDx0ciAqbmdGb3I9XCJsZXQgdXNlciBvZiBTZWxlY3RlZFVzZXJMaXN0XCIgY2xhc3M9XCJ0ckl0ZW1cIj5cclxuICAgICAgICAgICAgPHRkICpuZ0lmPVwibGFuZ3VhZ2U9PSdlbidcIiBjbGFzcz1cInRleHQtZGFya1wiPnt7dXNlci5uYW1lLmVuZ2xpc2h9fTwvdGQ+XHJcbiAgICAgICAgICAgIDx0ZCAqbmdJZj1cImxhbmd1YWdlPT0nYXInXCIgY2xhc3M9XCJ0ZXh0LWRhcmtcIj57e3VzZXIubmFtZS5hcmFiaWN9fTwvdGQ+XHJcblxyXG4gICAgICAgICAgICA8dGQ+e3t1c2VyLnVzZXJuYW1lfX08L3RkPlxyXG4gICAgICAgICAgICA8dGQgKm5nSWY9XCJTZWxlY3RlZFVzZXJMaXN0Lmxlbmd0aD4xXCI+XHJcbiAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cImRlbGV0ZVVzZXJGcm9tTGlzdCh1c2VyKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tbGlnaHQtZGFuZ2VyIGJ0bi1pY29uXCI+XHJcbiAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhcyBmYS10cmFzaFwiPjwvaT5cclxuICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgPC90ZD5cclxuXHJcbiAgICAgICAgICA8L3RyPlxyXG4gICAgICAgIDwvdGJvZHk+XHJcbiAgICAgIDwvdGFibGU+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWNlbnRlciBwdC03XCI+XHJcbiAgICAgIDxidXR0b24gI0Nsb3NlQ29uZmlybWF0aW9uTW9kYWwgaWQ9XCJDbG9zZUNvbmZpcm1hdGlvbk1vZGFsXCIgY2xhc3M9XCJidG4gYnRuLWxpZ2h0IG1lLTMgYnRuLXNtXCIgKGNsaWNrKT1cIm1vZGFsLmRpc21pc3MoKVwiPlxyXG4gICAgICAgIHt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkNhbmNlbExhYmVsXCIpfX1cclxuICAgICAgPC9idXR0b24+XHJcblxyXG4gICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiAqbmdJZj1cIkNvbmZpcm1hdGlvbk1vZGFsVHlwZT09MVwiIChjbGljayk9XCJhY3RpdmF0ZVVzZXJMaXN0KClcIlxyXG4gICAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IGJ0bi1zbVwiPlxyXG4gICAgICAgIHt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIlNhdmVMYWJlbFwiKX19XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiAqbmdJZj1cIkNvbmZpcm1hdGlvbk1vZGFsVHlwZT09MlwiIChjbGljayk9XCJkZWFjdGl2YXRlVXNlckxpc3QoKVwiXHJcbiAgICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgYnRuLXNtXCI+XHJcbiAgICAgICAge3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiU2F2ZUxhYmVsXCIpfX1cclxuICAgICAgPC9idXR0b24+XHJcbiAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiICpuZ0lmPVwiQ29uZmlybWF0aW9uTW9kYWxUeXBlPT0zXCIgKGNsaWNrKT1cInJlc2V0VXNlclBhc3N3b3JkTGlzdCgpXCJcclxuICAgICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBidG4tc21cIj5cclxuICAgICAgICB7e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJTYXZlTGFiZWxcIil9fVxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgKm5nSWY9XCJDb25maXJtYXRpb25Nb2RhbFR5cGU9PTRcIiAoY2xpY2spPVwic2VuZEFjdGl2YXRpb25FbWFpbEZvclVzZXIoKVwiXHJcbiAgICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgYnRuLXNtXCI+XHJcbiAgICAgICAge3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiU2F2ZUxhYmVsXCIpfX1cclxuICAgICAgPC9idXR0b24+XHJcblxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG5cclxuXHJcbiJdfQ==
|
|
739
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlcnMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmJzZi1hZG1pbi1wb3J0YWwvc3JjL2xpYi9QYWdlcy91c2Vycy91c2Vycy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9iYnNmLWFkbWluLXBvcnRhbC9zcmMvbGliL1BhZ2VzL3VzZXJzL3VzZXJzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFzQixTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSwwQkFBMEIsRUFBRSxZQUFZLEVBQUUsY0FBYyxFQUFFLGtCQUFrQixFQUFFLGdCQUFnQixFQUFFLFdBQVcsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzFOLE9BQU8sRUFBRSxhQUFhLEVBQUUsZUFBZSxFQUFFLFVBQVUsRUFBRSxhQUFhLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNwRyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFFeEUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDJDQUEyQyxDQUFDO0FBRTFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNsRCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ3BDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxpREFBaUQsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7QUFVbEYsTUFBTSxPQUFPLGNBQWM7SUE4RnpCLFlBQW9CLFdBQXdCLEVBQVMsY0FBOEIsRUFBVSxvQkFBMEMsRUFBVSxrQkFBc0MsRUFBVSxlQUFnQyxF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U0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsV0FBVztvQkFDckIsV0FBVyxFQUFFLHdCQUF3QjtpQkFDdEM7c1RBd0J3RCxhQUFhO3NCQUFuRSxTQUFTO3VCQUFDLHVCQUF1QixFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTtnQkFTSCxnQkFBZ0I7c0JBQWpFLFNBQVM7dUJBQUMsa0JBQWtCLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFO2dCQUNFLGdCQUFnQjtzQkFBakUsU0FBUzt1QkFBQyxrQkFBa0IsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7Z0JBQ0MsZUFBZTtzQkFBL0QsU0FBUzt1QkFBQyxpQkFBaUIsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7Z0JBQ0MsY0FBYztzQkFBN0QsU0FBUzt1QkFBQyxnQkFBZ0IsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEVsZW1lbnRSZWYsIE9uSW5pdCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgQ291bnRyeSwgQ3VzdG9tVmFsaWRhdGlvbiwgRmlsdGVyVHlwZSwgSW5wdXRUeXBlLCBNdWx0aUxpbmd1YWxUZXh0Qm94T3B0aW9ucywgUGhvbmVPcHRpb25zLCBUZXh0Qm94T3B0aW9ucywgVG9nZ2xlU2xpZGVPcHRpb25zLCBFbmdsaXNoQXJhYmljRFRPLCBGb3JtT3B0aW9ucywgUGFnaW5nQWN0aW9uTW9kZSB9IGZyb20gJ0BibnNpZ2h0cy9iYnNmLWNvbnRyb2xzJztcclxuaW1wb3J0IHsgQ29udHJvbExheW91dCwgRHJvcGRvd25PcHRpb25zLCBGaWx0ZXJJdGVtLCBQYWdpbmdPcHRpb25zIH0gZnJvbSAnQGJuc2lnaHRzL2Jic2YtY29udHJvbHMnO1xyXG5pbXBvcnQgeyBBZGRVc2VyTW9kZWwgfSBmcm9tICcuLi9zaGFyZWQvbW9kZWxzL1VzZXJNb2RlbHMvQWRkVXNlck1vZGVsJztcclxuaW1wb3J0IHsgRHJvcGRvd25zUmVzcG9uc2VNb2RlbCB9IGZyb20gJy4uL3NoYXJlZC9tb2RlbHMvVXNlck1vZGVscy9Ecm9wZG93bnNSZXNwb25zZU1vZGVsJztcclxuaW1wb3J0IHsgRWRpdFVzZXJNb2RlbCB9IGZyb20gJy4uL3NoYXJlZC9tb2RlbHMvVXNlck1vZGVscy9FZGl0VXNlck1vZGVsJztcclxuaW1wb3J0IHsgdXNlclNlcnZpY2UgfSBmcm9tICcuLi9zaGFyZWQvU2VydmljZXMvdXNlclNlcnZpY2Uuc2VydmljZSc7XHJcbmltcG9ydCB7IEh0dHBQYXJhbXMgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7IHNhdmVBcyB9IGZyb20gJ2ZpbGUtc2F2ZXInO1xyXG5pbXBvcnQgeyBQYWdlSW5mb1NlcnZpY2UgfSBmcm9tICcuLi8uLi9fbWV0cm9uaWMvY29yZS9zZXJ2aWNlcy9wYWdlLWluZm8uc2VydmljZSc7XHJcbmltcG9ydCB7IE5nYk1vZGFsIH0gZnJvbSAnQG5nLWJvb3RzdHJhcC9uZy1ib290c3RyYXAnO1xyXG5pbXBvcnQgeyBBdXRoU2VydmljZSwgVXRpbGl0eVNlcnZpY2UsIEJCU0ZUcmFuc2xhdGVTZXJ2aWNlLCBFbnZpcm9ubWVudFNlcnZpY2UsIFJlcXVlc3RIYW5kbGVyU2VydmljZSB9IGZyb20gJ0BibnNpZ2h0cy9iYnNmLXV0aWxpdGllcyc7XHJcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgUGFnaW5nQ29tcG9uZW50IH0gZnJvbSAnQGJuc2lnaHRzL2Jic2YtY29udHJvbHMvbGliL2NvbnRyb2xzL1BhZ2luZy9QYWdpbmcuY29tcG9uZW50JztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnbGliLXVzZXJzJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vdXNlcnMuY29tcG9uZW50Lmh0bWwnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBVc2Vyc0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgLy9QYWdlIHJlcXVpcmVtZW50c1xyXG4gIFNob3dQYWdlQ29udGVudDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIFByb2R1Y3Rpb25Nb2RlOiBib29sZWFuO1xyXG4gIEFwaVVybCA9IFwiL2FwaS9hZG1pbi9Vc2Vycy9cIlxyXG5cclxuICAvL0ZpbHRlciBhbmQgcGFnaW5nIGNvbXBvbmVudHNcclxuICBVc2Vyc0Zvcm0gPSBuZXcgRm9ybUdyb3VwKHt9KTtcclxuICBzZWFyY2hUZXh0Qm94OiBUZXh0Qm94T3B0aW9ucztcclxuICBwZXJtaXNzaW9uU2V0c09wdGlvbnM6IERyb3Bkb3duT3B0aW9ucztcclxuICBhY2NvdW50U3RhdHVzT3B0aW9uczogRHJvcGRvd25PcHRpb25zO1xyXG4gIGxvY2tlZFN0YXR1c09wdGlvbnM6IERyb3Bkb3duT3B0aW9ucztcclxuICBkZXBhcnRtZW50c09wdGlvbnM6IERyb3Bkb3duT3B0aW9ucztcclxuICBUZXh0SW5wdXRGaWx0ZXI6IEZpbHRlckl0ZW07XHJcbiAgcGVybWlzc2lvblNldHNGaWx0ZXI6IEZpbHRlckl0ZW07XHJcbiAgbG9ja2VkU3RhdHVzRmlsdGVyOiBGaWx0ZXJJdGVtO1xyXG4gIGFjY291bnRTdGF0dXNGaWx0ZXI6IEZpbHRlckl0ZW07XHJcbiAgZGVwYXJ0bWVudHNGaWx0ZXI6IEZpbHRlckl0ZW07XHJcbiAgSXNGaWx0ZXJMb2FkZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBJc0ZpbHRlckRhdGFMb2FkZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBVc2VyUGFnaW5nUmVzdWx0OiBhbnlbXSA9IFtdO1xyXG4gIGNsaWVudFNpZGVQYWdpbmdSZXN1bHQ6IGFueVtdID0gW107XHJcbiAgVXNlclBhZ2luZzogUGFnaW5nT3B0aW9ucztcclxuICBAVmlld0NoaWxkKCdVc2VyUGFnaW5nVmlld0VsZW1lbnQnLCB7IHN0YXRpYzogZmFsc2UgfSkgcGFnaW5nRWxlbWVudDogUGFnaW5nQ29tcG9uZW50O1xyXG5cclxuICAvL1JlcXVpcmVkIGxpc3RzXHJcbiAgU2VsZWN0ZWRVc2VyTGlzdCA9IFtdO1xyXG4gIHBlcm1pc3Npb25TZXRMaXN0ID0gW107XHJcbiAgYWNjb3VudFN0YXR1c0xpc3QgPSBbXTtcclxuICBsb2NrZWRTdGF0dXNMaXN0ID0gW107XHJcbiAgZGVwYXJ0bWVudHNMaXN0ID0gW107XHJcblxyXG4gIEBWaWV3Q2hpbGQoJ3Blcm1pc3Npb25TZXREREwnLCB7IHN0YXRpYzogZmFsc2UgfSkgcGVybWlzc2lvblNldERETDogRWxlbWVudFJlZjtcclxuICBAVmlld0NoaWxkKCdhY2NvdW50U3RhdHVzRERMJywgeyBzdGF0aWM6IGZhbHNlIH0pIGFjY291bnRTdGF0dXNEREw6IEVsZW1lbnRSZWY7XHJcbiAgQFZpZXdDaGlsZCgnbG9ja2VkU3RhdHVzRERMJywgeyBzdGF0aWM6IGZhbHNlIH0pIGxvY2tlZFN0YXR1c0RETDogRWxlbWVudFJlZjtcclxuICBAVmlld0NoaWxkKCdkZXBhcnRtZW50c0RETCcsIHsgc3RhdGljOiBmYWxzZSB9KSBkZXBhcnRtZW50c0RETDogRWxlbWVudFJlZjtcclxuXHJcbiAgLy9BZGQgTW9kZWwgQ29udHJvbHNcclxuICBBZGRVc2VyRm9ybSA9IG5ldyBGb3JtR3JvdXAoe30pO1xyXG4gIEFkZFVzZXJGb3JtT3B0aW9ucyA9IG5ldyBGb3JtT3B0aW9ucztcclxuICBBZGROYW1lOiBNdWx0aUxpbmd1YWxUZXh0Qm94T3B0aW9uc1xyXG4gIEFkZE1vYmlsZU51bWJlcjogUGhvbmVPcHRpb25zO1xyXG4gIEFkZFVzZXJuYW1lOiBUZXh0Qm94T3B0aW9ucztcclxuICBBZGRTYW1BY2NvdW50OiBUZXh0Qm94T3B0aW9ucztcclxuICBBZGRVc2VyRGVwYXJ0bWVudDogRHJvcGRvd25PcHRpb25zO1xyXG4gIEFkZFNlbmRBY3RpdmF0aW9uRW1haWw6IFRvZ2dsZVNsaWRlT3B0aW9ucztcclxuICBBZGRVc2VyUGVybWlzc2lvbnM6IERyb3Bkb3duT3B0aW9ucztcclxuXHJcbiAgLy9FZGl0IE1vZGVsIENvbnRyb2xzXHJcbiAgRWRpdFVzZXJGb3JtID0gbmV3IEZvcm1Hcm91cCh7fSk7XHJcbiAgRWRpdFVzZXJGb3JtT3B0aW9ucyA9IG5ldyBGb3JtT3B0aW9ucztcclxuICBFZGl0TmFtZTogTXVsdGlMaW5ndWFsVGV4dEJveE9wdGlvbnNcclxuICBFZGl0TW9iaWxlTnVtYmVyOiBQaG9uZU9wdGlvbnM7XHJcbiAgRWRpdFVzZXJuYW1lOiBUZXh0Qm94T3B0aW9ucztcclxuICBFZGl0RW1haWw6IFRleHRCb3hPcHRpb25zO1xyXG4gIEVkaXRTYW1BY2NvdW50OiBUZXh0Qm94T3B0aW9ucztcclxuICBFZGl0VXNlckRlcGFydG1lbnQ6IERyb3Bkb3duT3B0aW9ucztcclxuICBFZGl0VXNlclBlcm1pc3Npb25zOiBEcm9wZG93bk9wdGlvbnM7XHJcbiAgVXNlcklkOiBudW1iZXI7XHJcblxyXG5cclxuICAvL0RlYWN0aXZhdGUvQWN0aXZhdGUgVXNlciBNb2RlbCBDb250cm9sc1xyXG4gIFNob3dBY3RpdmF0ZU1vZGVsRGF0YTogYm9vbGVhbiA9IGZhbHNlXHJcbiAgQWN0aXZhdG9yRGVhY3RpdmF0ZVVzZXJMaXN0OiBhbnlbXSA9IFtdXHJcbiAgTmFtZTogc3RyaW5nXHJcbiAgRW1haWw6IHN0cmluZ1xyXG5cclxuICAvL1Jlc2V0IFBhc3N3b3JkIFVzZXIgTW9kZWwgQ29udHJvbHNcclxuICBSZXNldFBhc3N3b3JkVXNlckxpc3Q6IGFueVtdID0gW11cclxuXHJcbiAgLy9zZXQgUGFzc3dvcmQgVXNlciBNb2RlbCBDb250cm9sc1xyXG4gIFNldFVzZXJQYXNzd29yZEZvcm0gPSBuZXcgRm9ybUdyb3VwKHt9KTtcclxuICBTZXRVc2VyUGFzc3dvcmRGb3JtT3B0aW9ucyA9IG5ldyBGb3JtT3B0aW9ucztcclxuICBQYXNzd29yZDogVGV4dEJveE9wdGlvbnM7XHJcbiAgUGFzc3dvcmRDb25maXJtYXRpb246IFRleHRCb3hPcHRpb25zO1xyXG4gIGN1c3RvbVZhbGlkYXRpb246IEN1c3RvbVZhbGlkYXRpb24gPSBuZXcgQ3VzdG9tVmFsaWRhdGlvbigpO1xyXG4gIHNldFBhc3N3b3JkVXNlckxpc3Q6IGFueVtdID0gW11cclxuXHJcbiAgLy9Db25maXJtYXRpb24gIE1vZGVsIENvbnRyb2xzXHJcbiAgQ29uZmlybWF0aW9uTW9kYWxUeXBlOiBudW1iZXIgPSAwO1xyXG4gIENvbmZpcm1hdGlvbk1lc3NhZ2U6IHN0cmluZyA9IFwiXCI7XHJcblxyXG4gIC8vVXNlcnMgc2VsZWN0aW9uXHJcbiAgYWN0aXZhdGVkVXNlcnNTZWxlY3RlZDogbnVtYmVyID0gMDtcclxuICBkZUFjdGl2YXRlZFVzZXJzU2VsZWN0ZWQ6IG51bWJlciA9IDA7XHJcbiAgc2hvd0FjdGl2YXRlQnRuOiBib29sZWFuID0gZmFsc2U7XHJcbiAgc2hvd0RlYWN0aXZhdGVCdG46IGJvb2xlYW4gPSBmYWxzZTtcclxuICBzaG93U2V0UGFzc0J0bjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHNob3dSZXNldFBhc3NCdG46IGJvb2xlYW4gPSBmYWxzZTtcclxuICBzaG93U2VuZEVtYWlsQnRuOiBib29sZWFuID0gZmFsc2U7XHJcbiAgc2hvd0dlbmVyYWxCdG5zOiBib29sZWFuID0gdHJ1ZTtcclxuICBhbGxTZWxlY3RlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBhdXRoU2VydmljZTogQXV0aFNlcnZpY2UsIHB1YmxpYyB1dGlsaXR5U2VydmljZTogVXRpbGl0eVNlcnZpY2UsIHByaXZhdGUgYmJzZlRyYW5zbGF0ZVNlcnZpY2U6IEJCU0ZUcmFuc2xhdGVTZXJ2aWNlLCBwcml2YXRlIGVudmlyb25tZW50U2VydmljZTogRW52aXJvbm1lbnRTZXJ2aWNlLCBwcml2YXRlIHBhZ2VJbmZvU2VydmljZTogUGFnZUluZm9TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSB1c2VyU2VydmljZTogdXNlclNlcnZpY2UsIHByaXZhdGUgbW9kYWxTZXJ2aWNlOiBOZ2JNb2RhbCxwcml2YXRlIHJlcXVlc3RIYW5kbGVyU2VydmljZTogUmVxdWVzdEhhbmRsZXJTZXJ2aWNlKSB7XHJcbiAgfVxyXG4gIGFzeW5jIG5nT25Jbml0KCkge1xyXG4gICAgdGhpcy5TaG93UGFnZUNvbnRlbnQgPSB0cnVlO1xyXG4gICAgUGFnZUluZm9TZXJ2aWNlLlBhZ2VUaXRsZSA9IHRoaXMudXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIlVzZXJzXCIpXHJcbiAgICBQYWdlSW5mb1NlcnZpY2UuUGFnZUJyZWFkY3J1bWJzID0gW1xyXG4gICAgICB7IHRpdGxlOiB0aGlzLnV0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJIb21lXCIpLCBwYXRoOicvQWRtaW4vSG9tZScsIGlzU2VwYXJhdG9yOiBmYWxzZSwgaXNBY3RpdmU6IGZhbHNlIH0sXHJcbiAgICAgIHsgdGl0bGU6ICcnLCBwYXRoOiAnJywgaXNTZXBhcmF0b3I6IHRydWUsIGlzQWN0aXZlOiBmYWxzZSB9XHJcblxyXG4gICAgXTtcclxuXHJcbiAgICB0aGlzLnBhZ2VJbmZvU2VydmljZS5jYWxjdWxhdGVUaXRsZSgpO1xyXG4gICAgdGhpcy5wYWdlSW5mb1NlcnZpY2UuY2FsY3VsYXRlQnJlYWRjcnVtYnMoKTtcclxuICAgIHRoaXMuYmJzZlRyYW5zbGF0ZVNlcnZpY2Uub25MYW5nQ2hhbmdlLnN1YnNjcmliZSgoZXZlbnQpID0+IHtcclxuICAgICAgdGhpcy5TaG93UGFnZUNvbnRlbnQgPSBmYWxzZTtcclxuICAgICAgdGhpcy5uZ09uSW5pdCgpO1xyXG4gICAgfSlcclxuICAgIHRoaXMuUHJvZHVjdGlvbk1vZGUgPSB0aGlzLmVudmlyb25tZW50U2VydmljZS5nZXRQcm9kdWN0aW9uTW9kZSgpO1xyXG5cclxuICAgIHRoaXMuaW5pdGlhbGl6ZVBhZ2UoKTtcclxuXHJcbiAgfVxyXG5cclxuICAgIC8vUGFnaW5nIGZ1bmN0aW9uc1xyXG4gIHNldFVzZXJzTGlzdFJlc3VsdChyZXN1bHQpIHtcclxuICAgIHRoaXMuVXNlclBhZ2luZ1Jlc3VsdCA9IHJlc3VsdDtcclxuICAgIHRoaXMuY2xpZW50U2lkZVBhZ2luZ1Jlc3VsdCA9IHJlc3VsdDtcclxuICAgIHRoaXMuU2hvd1BhZ2VDb250ZW50ID0gdHJ1ZTtcclxuICAgIHRoaXMucmVzZXRVc2Vyc0NvdW50KCk7XHJcbiAgICB0aGlzLmRpc2FibGVCdXR0b25zKCk7XHJcbiAgICB0aGlzLmFsbFNlbGVjdGVkID0gZmFsc2U7XHJcbiAgICB0aGlzLnV0aWxpdHlTZXJ2aWNlLnN0b3BCbG9ja1VJKCk7XHJcblxyXG4gIH1cclxuXHJcbiAgcmVzZXRGaWx0ZXJzKCkge1xyXG4gICAgdGhpcy5Vc2Vyc0Zvcm0uY29udHJvbHNbXCJwZXJtaXNzaW9uc2V0c1wiXS5zZXRWYWx1ZShbXSk7XHJcbiAgICB0aGlzLlVzZXJzRm9ybS5jb250cm9sc1tcImFjY291bnRzdGF0dXNcIl0uc2V0VmFsdWUoW10pO1xyXG4gICAgdGhpcy5Vc2Vyc0Zvcm0uY29udHJvbHNbXCJsb2NrZWRzdGF0dXNcIl0uc2V0VmFsdWUoW10pO1xyXG4gICAgdGhpcy5Vc2Vyc0Zvcm0uY29udHJvbHNbXCJkZXBhcnRtZW50c1wiXS5zZXRWYWx1ZShbXSk7XHJcbiAgICB0aGlzLlVzZXJzRm9ybS5jb250cm9sc1tcInNlYXJjaFRleHRCb3hcIl0uc2V0VmFsdWUobnVsbCk7XHJcbiAgICBsZXQgZWxlbWVudCA9IHRoaXMucGFnaW5nRWxlbWVudCBhcyBhbnk7XHJcbiAgICBlbGVtZW50LlJlaW5pdGlhbGl6ZVBhZ2luZygpO1xyXG4gIH1cclxuICBzZWFyY2hDbGllbnRTaWRlKHNlYXJjaFZhbHVlKSB7XHJcbiAgICBpZiAoc2VhcmNoVmFsdWUpXHJcbiAgICAgIHRoaXMuY2xpZW50U2lkZVBhZ2luZ1Jlc3VsdCA9IHRoaXMuY2xpZW50U2lkZVBhZ2luZ1Jlc3VsdC5maWx0ZXIoXHJcbiAgICAgICAgZnVuY3Rpb24gKGl0ZW0pIHtcclxuICAgICAgICAgIHJldHVybiAoaXRlbS5uYW1lLmVuZ2xpc2gudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhzZWFyY2hWYWx1ZS50b0xvd2VyQ2FzZSgpKVxyXG4gICAgICAgICAgICB8fCBpdGVtLm5hbWUuYXJhYmljLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoc2VhcmNoVmFsdWUudG9Mb3dlckNhc2UoKSlcclxuICAgICAgICAgICAgfHwgaXRlbS51c2VybmFtZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHNlYXJjaFZhbHVlLnRvTG93ZXJDYXNlKCkpKTtcclxuICAgICAgICB9KVxyXG4gICAgZWxzZVxyXG4gICAgICB0aGlzLmNsaWVudFNpZGVQYWdpbmdSZXN1bHQgPSB0aGlzLlVzZXJQYWdpbmdSZXN1bHQ7XHJcbiAgfVxyXG5cclxuICAgLy9Jbml0aWFsaXplIGZpbHRlcnMgYW5kIHBhZ2luZ1xyXG4gIGluaXRpYWxpemVQYWdlKCkge1xyXG5cclxuICAgIC8vIFBlcm1pc3Npb24gU2V0cyBpbml0ICAgXHJcbiAgICB0aGlzLnBlcm1pc3Npb25TZXRzT3B0aW9ucyA9IG5ldyBEcm9wZG93bk9wdGlvbnMoKTtcclxuICAgIHRoaXMucGVybWlzc2lvblNldHNPcHRpb25zLk5hbWUgPSBcInBlcm1pc3Npb25zZXRzXCJcclxuICAgIHRoaXMucGVybWlzc2lvblNldHNPcHRpb25zLkxhYmVsS2V5ID0gXCJQZXJtaXNzaW9uU2V0c1wiXHJcbiAgICB0aGlzLnBlcm1pc3Npb25TZXRzT3B0aW9ucy5TaW5nbGVTZWxlY3Rpb24gPSB0cnVlO1xyXG4gICAgdGhpcy5wZXJtaXNzaW9uU2V0c09wdGlvbnMuQWxsb3dTZWFyY2hGaWx0ZXIgPSB0cnVlO1xyXG4gICAgdGhpcy5wZXJtaXNzaW9uU2V0c09wdGlvbnMuUGxhY2Vob2xkZXIgPSBcIlwiO1xyXG5cclxuICAgIC8vIEFjY291bnQgU3RhdHVzIGluaXRcclxuICAgIHRoaXMuYWNjb3VudFN0YXR1c09wdGlvbnMgPSBuZXcgRHJvcGRvd25PcHRpb25zKCk7XHJcbiAgICB0aGlzLmFjY291bnRTdGF0dXNPcHRpb25zLk5hbWUgPSBcImFjY291bnRzdGF0dXNcIlxyXG4gICAgdGhpcy5hY2NvdW50U3RhdHVzT3B0aW9ucy5MYWJlbEtleSA9IFwiQWNjb3VudFN0YXR1c1wiXHJcbiAgICB0aGlzLmFjY291bnRTdGF0dXNPcHRpb25zLlNpbmdsZVNlbGVjdGlvbiA9IHRydWU7XHJcblxyXG4gICAgLy8gTG9ja2VkIFN0YXR1cyBpbml0XHJcbiAgICB0aGlzLmxvY2tlZFN0YXR1c09wdGlvbnMgPSBuZXcgRHJvcGRvd25PcHRpb25zKCk7XHJcbiAgICB0aGlzLmxvY2tlZFN0YXR1c09wdGlvbnMuTmFtZSA9IFwibG9ja2Vkc3RhdHVzXCI7XHJcbiAgICB0aGlzLmxvY2tlZFN0YXR1c09wdGlvbnMuTGFiZWxLZXkgPSBcIkxvY2tlZFN0YXR1c1wiO1xyXG4gICAgdGhpcy5sb2NrZWRTdGF0dXNPcHRpb25zLlNpbmdsZVNlbGVjdGlvbiA9IHRydWU7XHJcblxyXG4gICAgLy8gZGVwYXJ0bWVudHMgaW5pdFxyXG4gICAgdGhpcy5kZXBhcnRtZW50c09wdGlvbnMgPSBuZXcgRHJvcGRvd25PcHRpb25zKCk7XHJcbiAgICB0aGlzLmRlcGFydG1lbnRzT3B0aW9ucy5OYW1lID0gXCJkZXBhcnRtZW50c1wiXHJcbiAgICB0aGlzLmRlcGFydG1lbnRzT3B0aW9ucy5MYWJlbEtleSA9IFwiRGVwYXJ0bWVudHNcIlxyXG4gICAgdGhpcy5kZXBhcnRtZW50c09wdGlvbnMuU2luZ2xlU2VsZWN0aW9uID0gZmFsc2U7XHJcbiAgICB0aGlzLmRlcGFydG1lbnRzT3B0aW9ucy5BbGxvd1NlYXJjaEZpbHRlciA9IHRydWU7XHJcblxyXG4gICAgLy8gVGV4dEJveCBpbml0XHJcbiAgICB0aGlzLnNlYXJjaFRleHRCb3ggPSBuZXcgVGV4dEJveE9wdGlvbnMoKTtcclxuICAgIHRoaXMuc2VhcmNoVGV4dEJveC5OYW1lID0gXCJzZWFyY2hUZXh0Qm94XCJcclxuICAgIHRoaXMuc2VhcmNoVGV4dEJveC5IaWRlTGFiZWwgPSB0cnVlXHJcbiAgICB0aGlzLnNlYXJjaFRleHRCb3guVHlwZSA9IElucHV0VHlwZS5UZXh0XHJcbiAgICB0aGlzLnNlYXJjaFRleHRCb3guUGxhY2Vob2xkZXIgPSB0aGlzLnV0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJTZWFyY2hCeU5hbWVPckVtYWlsXCIpXHJcblxyXG5cclxuICAgIC8vRmlsdGVyc1xyXG4gICAgdGhpcy5UZXh0SW5wdXRGaWx0ZXIgPSBuZXcgRmlsdGVySXRlbSgpO1xyXG4gICAgdGhpcy5UZXh0SW5wdXRGaWx0ZXIuRm9ybUNvbnRyb2xOYW1lID0gXCJzZWFyY2hUZXh0Qm94XCJcclxuICAgIHRoaXMuVGV4dElucHV0RmlsdGVyLkFjdGlvblBhcmFtZXRlck5hbWUgPSBcIm5hbWVGaWx0ZXJcIlxyXG4gICAgdGhpcy5UZXh0SW5wdXRGaWx0ZXIuSXNGb3JtQ29udHJvbCA9IHRydWVcclxuICAgIHRoaXMuVGV4dElucHV0RmlsdGVyLkZpbHRlclR5cGUgPSBGaWx0ZXJUeXBlLlRleHRCb3hcclxuXHJcbiAgICB0aGlzLnBlcm1pc3Npb25TZXRzRmlsdGVyID0gbmV3IEZpbHRlckl0ZW0oKTtcclxuICAgIHRoaXMucGVybWlzc2lvblNldHNGaWx0ZXIuRm9ybUNvbnRyb2xOYW1lID0gXCJwZXJtaXNzaW9uc2V0c1wiXHJcbiAgICB0aGlzLnBlcm1pc3Npb25TZXRzRmlsdGVyLkFjdGlvblBhcmFtZXRlck5hbWUgPSBcInBlcm1pc3Npb25JZHNcIlxyXG4gICAgdGhpcy5wZXJtaXNzaW9uU2V0c0ZpbHRlci5Jc0Zvcm1Db250cm9sID0gdHJ1ZVxyXG4gICAgdGhpcy5wZXJtaXNzaW9uU2V0c0ZpbHRlci5GaWx0ZXJUeXBlID0gRmlsdGVyVHlwZS5Ecm9wZG93bkxpc3RcclxuXHJcbiAgICB0aGlzLmFjY291bnRTdGF0dXNGaWx0ZXIgPSBuZXcgRmlsdGVySXRlbSgpO1xyXG4gICAgdGhpcy5hY2NvdW50U3RhdHVzRmlsdGVyLkZvcm1Db250cm9sTmFtZSA9IFwiYWNjb3VudHN0YXR1c1wiXHJcbiAgICB0aGlzLmFjY291bnRTdGF0dXNGaWx0ZXIuQWN0aW9uUGFyYW1ldGVyTmFtZSA9IFwiYWNjb3VudFN0YXR1c0lEc1wiXHJcbiAgICB0aGlzLmFjY291bnRTdGF0dXNGaWx0ZXIuSXNGb3JtQ29udHJvbCA9IHRydWVcclxuICAgIHRoaXMuYWNjb3VudFN0YXR1c0ZpbHRlci5GaWx0ZXJUeXBlID0gRmlsdGVyVHlwZS5Ecm9wZG93bkxpc3RcclxuXHJcbiAgICB0aGlzLmxvY2tlZFN0YXR1c0ZpbHRlciA9IG5ldyBGaWx0ZXJJdGVtKCk7XHJcbiAgICB0aGlzLmxvY2tlZFN0YXR1c0ZpbHRlci5Gb3JtQ29udHJvbE5hbWUgPSBcImxvY2tlZHN0YXR1c1wiXHJcbiAgICB0aGlzLmxvY2tlZFN0YXR1c0ZpbHRlci5BY3Rpb25QYXJhbWV0ZXJOYW1lID0gXCJsb2NrZWRTdGF0dXNJZHNcIlxyXG4gICAgdGhpcy5sb2NrZWRTdGF0dXNGaWx0ZXIuSXNGb3JtQ29udHJvbCA9IHRydWVcclxuICAgIHRoaXMubG9ja2VkU3RhdHVzRmlsdGVyLkZpbHRlclR5cGUgPSBGaWx0ZXJUeXBlLkRyb3Bkb3duTGlzdFxyXG5cclxuICAgIHRoaXMuZGVwYXJ0bWVudHNGaWx0ZXIgPSBuZXcgRmlsdGVySXRlbSgpO1xyXG4gICAgdGhpcy5kZXBhcnRtZW50c0ZpbHRlci5Gb3JtQ29udHJvbE5hbWUgPSBcImRlcGFydG1lbnRzXCJcclxuICAgIHRoaXMuZGVwYXJ0bWVudHNGaWx0ZXIuQWN0aW9uUGFyYW1ldGVyTmFtZSA9IFwiZGVwYXJ0bWVudElkc1wiXHJcbiAgICB0aGlzLmRlcGFydG1lbnRzRmlsdGVyLklzRm9ybUNvbnRyb2wgPSB0cnVlXHJcbiAgICB0aGlzLmRlcGFydG1lbnRzRmlsdGVyLkZpbHRlclR5cGUgPSBGaWx0ZXJUeXBlLkRyb3Bkb3duTGlzdFxyXG5cclxuXHJcbiAgICB0aGlzLlVzZXJQYWdpbmcgPSBuZXcgUGFnaW5nT3B0aW9ucygpO1xyXG4gICAgdGhpcy5Vc2VyUGFnaW5nLkFjdGlvblBvc3RVUkwgPSB0aGlzLkFwaVVybCArICdHZXRVc2Vyc0J5RmlsdGVyJztcclxuICAgIHRoaXMuVXNlclBhZ2luZy5PbktleVByZXNzRmlsdGVyc0NvbnRyb2xOYW1lcyA9IFtcInNlYXJjaFRleHRCb3hcIl1cclxuICAgIHRoaXMuVXNlclBhZ2luZy5Ecm9wZG93bkZpbHRlcnNDb250cm9sTmFtZXMgPSBbXCJwZXJtaXNzaW9uc2V0c1wiLCBcImFjY291bnRzdGF0dXNcIiwgXCJsb2NrZWRzdGF0dXNcIiwgXCJkZXBhcnRtZW50c1wiXTtcclxuICAgIHRoaXMuVXNlclBhZ2luZy5GaWx0ZXJzID0gW3RoaXMucGVybWlzc2lvblNldHNGaWx0ZXIsIHRoaXMubG9ja2VkU3RhdHVzRmlsdGVyLCB0aGlzLmFjY291bnRTdGF0dXNGaWx0ZXIsIHRoaXMuZGVwYXJ0bWVudHNGaWx0ZXIsIHRoaXMuVGV4dElucHV0RmlsdGVyXVxyXG4gICAgdGhpcy5Vc2VyUGFnaW5nLlZhbGlkYXRpb25Ub2tlbiA9IHRoaXMuYXV0aFNlcnZpY2UuYXV0aG9yaXphdGlvbkhlYWRlclZhbHVlKClcclxuICAgIHRoaXMuSXNGaWx0ZXJMb2FkZWQgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgLy9Mb2FkIGxpc3RzIGZvciBmaWx0ZXJzXHJcbiAgbG9hZExpc3RzKCkge1xyXG4gICAgaWYgKCF0aGlzLklzRmlsdGVyRGF0YUxvYWRlZCkge1xyXG4gICAgICB0aGlzLnVzZXJTZXJ2aWNlLkxvYWRkcm9wZG93bnMoKS5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xyXG4gICAgICAgIGxldCBEcm9wZG93bnNSZXNwb25zZU1vZGVsID0gcmVzdWx0IGFzIERyb3Bkb3duc1Jlc3BvbnNlTW9kZWw7XHJcbiAgICAgICAgdGhpcy5wZXJtaXNzaW9uU2V0TGlzdCA9IERyb3Bkb3duc1Jlc3BvbnNlTW9kZWwucGVybWVzc2lvbnNldHM7XHJcbiAgICAgICAgdGhpcy5hY2NvdW50U3RhdHVzTGlzdCA9IERyb3Bkb3duc1Jlc3BvbnNlTW9kZWwuYWNjb3VudFN0YXR1cztcclxuICAgICAgICB0aGlzLmxvY2tlZFN0YXR1c0xpc3QgPSBEcm9wZG93bnNSZXNwb25zZU1vZGVsLmxvY2tlZFN0YXR1cztcclxuICAgICAgICB0aGlzLmRlcGFydG1lbnRzTGlzdCA9IERyb3Bkb3duc1Jlc3BvbnNlTW9kZWwuZGVwYXJ0bWVudHM7XHJcblxyXG4gICAgICAgIGxldCBwZXJtaXNzaW9uU2V0RWxlbWVudCA9IHRoaXMucGVybWlzc2lvblNldERETCBhcyBhbnk7XHJcbiAgICAgICAgbGV0IGFjY291bnRTdGF0dXNFbGVtZW50ID0gdGhpcy5hY2NvdW50U3RhdHVzRERMIGFzIGFueTtcclxuICAgICAgICBsZXQgbG9ja2VkU3RhdHVzRWxlbWVudCA9IHRoaXMubG9ja2VkU3RhdHVzRERMIGFzIGFueTtcclxuICAgICAgICBsZXQgZGVwYXJ0bWVudHNFbGVtZW50ID0gdGhpcy5kZXBhcnRtZW50c0RETCBhcyBhbnk7XHJcblxyXG5cclxuICAgICAgICBwZXJtaXNzaW9uU2V0RWxlbWVudC5VcGRhdGVEYXRhU291cmNlKHRoaXMucGVybWlzc2lvblNldExpc3QpO1xyXG5cclxuICAgICAgICBhY2NvdW50U3RhdHVzRWxlbWVudC5VcGRhdGVEYXRhU291cmNlKHRoaXMuYWNjb3VudFN0YXR1c0xpc3QpO1xyXG5cclxuICAgICAgICBsb2NrZWRTdGF0dXNFbGVtZW50LlVwZGF0ZURhdGFTb3VyY2UodGhpcy5sb2NrZWRTdGF0dXNMaXN0KTtcclxuXHJcbiAgICAgICAgZGVwYXJ0bWVudHNFbGVtZW50LlVwZGF0ZURhdGFTb3VyY2UodGhpcy5kZXBhcnRtZW50c0xpc3QpO1xyXG5cclxuXHJcbiAgICAgICAgdGhpcy5Jc0ZpbHRlckRhdGFMb2FkZWQgPSB0cnVlO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vVXNlcnMgY2hlY2tib3hlcyBzZWxlY3Rpb24gZnVuY3Rpb25zXHJcbiAgc2VsZWN0QWxsVXNlckxpc3QoZXZlbnQsIFVzZXJzOiBhbnlbXSkge1xyXG4gICAgaWYgKHRoaXMuVXNlclBhZ2luZ1Jlc3VsdCA9PSBudWxsKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMuVXNlclBhZ2luZ1Jlc3VsdC5mb3JFYWNoKHUgPT4gdS5zZWxlY3RlZCA9IGV2ZW50LmNoZWNrZWQpO1xyXG5cclxuICAgIGlmIChldmVudC5jaGVja2VkKSB7XHJcbiAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBVc2Vycy5sZW5ndGg7IGluZGV4KyspIHtcclxuICAgICAgICBjb25zdCB1c2VyID0gVXNlcnNbaW5kZXhdO1xyXG4gICAgICAgIHRoaXMuU2VsZWN0ZWRVc2VyTGlzdC5wdXNoKHVzZXIpO1xyXG4gICAgICAgIGlmICh1c2VyLmlzQWN0aXZlKSB7XHJcbiAgICAgICAgICB0aGlzLmFjdGl2YXRlZFVzZXJzU2VsZWN0ZWQgKz0gMTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLmRlQWN0aXZhdGVkVXNlcnNTZWxlY3RlZCArPSAxO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICB0aGlzLmFjdGl2YXRlZFVzZXJzU2VsZWN0ZWQgPSBVc2Vycy5maWx0ZXIoKGl0ZW0pID0+IHsgcmV0dXJuIGl0ZW0uaXNBY3RpdmU7IH0pLm1hcCgoaXRlbSkgPT4gaXRlbS5rZXkpLmxlbmd0aDtcclxuICAgICAgdGhpcy5kZUFjdGl2YXRlZFVzZXJzU2VsZWN0ZWQgPSBVc2Vycy5maWx0ZXIoKGl0ZW0pID0+IHsgcmV0dXJuICFpdGVtLmlzQWN0aXZlOyB9KS5tYXAoKGl0ZW0pID0+IGl0ZW0ua2V5KS5sZW5ndGg7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgdGhpcy5TZWxlY3RlZFVzZXJMaXN0ID0gW107XHJcbiAgICAgIHRoaXMuYWN0aXZhdGVkVXNlcnNTZWxlY3RlZCA9IDA7XHJcbiAgICAgIHRoaXMuZGVBY3RpdmF0ZWRVc2Vyc1NlbGVjdGVkID0gMDtcclxuICAgIH1cclxuICAgIHRoaXMuZW5hYmxlQnV0dG9ucygpO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlVXNlckxpc3QoZXZlbnQsIFVzZXIpIHtcclxuICAgIHRoaXMuVXNlclBhZ2luZ1Jlc3VsdC5maW5kKHUgPT4gdS5pZCA9PT0gVXNlci5pZCkuc2VsZWN0ZWQgPSBldmVudC5jaGVja2VkO1xyXG4gICAgdGhpcy5hbGxTZWxlY3RlZCA9IHRoaXMuVXNlclBhZ2luZ1Jlc3VsdCAhPSBudWxsICYmIHRoaXMuVXNlclBhZ2luZ1Jlc3VsdC5ldmVyeSh1ID0+IHUuc2VsZWN0ZWQpO1xyXG4gICAgaWYgKGV2ZW50LmNoZWNrZWQpIHtcclxuICAgICAgdGhpcy5TZWxlY3RlZFVzZXJMaXN0LnB1c2goVXNlcik7XHJcbiAgICAgIGlmIChVc2VyLmlzQWN0aXZlKVxyXG4gICAgICAgIHRoaXMuYWN0aXZhdGVkVXNlcnNTZWxlY3RlZCArPSAxO1xyXG4gICAgICBlbHNlXHJcbiAgICAgICAgdGhpcy5kZUFjdGl2YXRlZFVzZXJzU2VsZWN0ZWQgKz0gMTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB0aGlzLlNlbGVjdGVkVXNlckxpc3QuZm9yRWFjaCgodmFsdWUsIGluZGV4KSA9PiB7XHJcbiAgICAgICAgaWYgKHZhbHVlLmlkID09IFVzZXIuaWQpIHRoaXMuU2VsZWN0ZWRVc2VyTGlzdC5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgICB9KTtcclxuICAgICAgaWYgKFVzZXIuaXNBY3RpdmUpXHJcbiAgICAgICAgdGhpcy5hY3RpdmF0ZWRVc2Vyc1NlbGVjdGVkIC09IDE7XHJcbiAgICAgIGVsc2VcclxuICAgICAgICB0aGlzLmRlQWN0aXZhdGVkVXNlcnNTZWxlY3RlZCAtPSAxO1xyXG4gICAgfVxyXG4gICAgdGhpcy5lbmFibGVCdXR0b25zKCk7XHJcbiAgfVxyXG5cclxuICBkZWxldGVVc2VyRnJvbUxpc3QodXNlcjogYW55KSB7XHJcbiAgICB0aGlzLlVzZXJQYWdpbmdSZXN1bHQuZmluZCh1ID0+IHUuaWQgPT09IHVzZXIuaWQpLnNlbGVjdGVkID0gZmFsc2U7XHJcbiAgICB0aGlzLlNlbGVjdGVkVXNlckxpc3QgPSB0aGlzLlNlbGVjdGVkVXNlckxpc3QuZmlsdGVyKGl0ZW0gPT4gaXRlbSAhPSB1c2VyKTtcclxuICAgIGlmICh1c2VyLmlzQWN0aXZlKVxyXG4gICAgICB0aGlzLmFjdGl2YXRlZFVzZXJzU2VsZWN0ZWQgLT0gMTtcclxuICAgIGVsc2VcclxuICAgICAgdGhpcy5kZUFjdGl2YXRlZFVzZXJzU2VsZWN0ZWQgLT0gMTtcclxuICAgIHRoaXMuZW5hYmxlQnV0dG9ucygpO1xyXG4gICAgaWYgKHRoaXMuU2VsZWN0ZWRVc2VyTGlzdC5sZW5ndGggPD0gMCkge1xyXG4gICAgICB0aGlzLm1vZGFsU2VydmljZS5kaXNtaXNzQWxsKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICB9XHJcblxyXG4gIGVuYWJsZUJ1dHRvbnMoKSB7XHJcbiAgICAvL1Jlc2V0IGFsbCBidG5zXHJcbiAgICB0aGlzLmRpc2FibGVCdXR0b25zKCk7XHJcblxyXG4gICAgaWYgKHRoaXMuYWN0aXZhdGVkVXNlcnNTZWxlY3RlZCA9PSAwICYmIHRoaXMuZGVBY3RpdmF0ZWRVc2Vyc1NlbGVjdGVkID09IDApIHtcclxuICAgICAgdGhpcy5zaG93R2VuZXJhbEJ0bnMgPSB0cnVlO1xyXG5cclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB0aGlzLnNob3dHZW5lcmFsQnRucyA9IGZhbHNlO1xyXG5cclxuICAgICAgLy9pZiBvbmx5IGFjdGl2YXRlZCB1c2Vyc1xyXG4gICAgICBpZiAodGhpcy5hY3RpdmF0ZWRVc2Vyc1NlbGVjdGVkID4gMCAmJiB0aGlzLmRlQWN0aXZhdGVkVXNlcnNTZWxlY3RlZCA9PSAwKSB7XHJcbiAgICAgICAgdGhpcy5zaG93RGVhY3RpdmF0ZUJ0biA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5zaG93UmVzZXRQYXNzQnRuID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIGlmICh0aGlzLmRlQWN0aXZhdGVkVXNlcnNTZWxlY3RlZCA+IDAgJiYgdGhpcy5hY3RpdmF0ZWRVc2Vyc1NlbGVjdGVkID09IDApICAgICAvL2lmIG9ubHkgZGVBY3RpdmF0ZWQgdXNlcnNcclxuICAgICAge1xyXG4gICAgICAgIHRoaXMuc2hvd0FjdGl2YXRlQnRuID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnNob3dTZW5kRW1haWxCdG4gPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2UgaWYgKHRoaXMuYWN0aXZhdGVkVXNlcnNTZWxlY3RlZCA+IDAgJiYgdGhpcy5kZUFjdGl2YXRlZFVzZXJzU2VsZWN0ZWQgPiAwKSAvL2lmIGFjdGl2YXRlZCBhbmQgZGVhY3RpdmF0ZWQgdXNlcnMgc2VsZWN0ZWRcclxuICAgICAge1xyXG4gICAgICAgIHRoaXMuc2hvd1Jlc2V0UGFzc0J0biA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5zaG93U2V0UGFzc0J0biA9IHRydWU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGRpc2FibGVCdXR0b25zKCkge1xyXG4gICAgLy9SZXNldCBhbGwgYnRuc1xyXG4gICAgdGhpcy5zaG93QWN0aXZhdGVCdG4gPSBmYWxzZTtcclxuICAgIHRoaXMuc2hvd0RlYWN0aXZhdGVCdG4gPSBmYWxzZTtcclxuICAgIHRoaXMuc2hvd1NlbmRFbWFpbEJ0biA9IGZhbHNlO1xyXG4gICAgdGhpcy5zaG93UmVzZXRQYXNzQnRuID0gZmFsc2U7XHJcbiAgICB0aGlzLnNob3dTZXRQYXNzQnRuID0gZmFsc2U7XHJcbiAgICB0aGlzLnNob3dHZW5lcmFsQnRucyA9IHRydWU7XHJcbiAgfVxyXG5cclxuICByZXNldFVzZXJzQ291bnQoKSB7XHJcbiAgICB0aGlzLlNlbGVjdGVkVXNlckxpc3QgPSBbXTtcclxuICAgIHRoaXMuYWN0aXZhdGVkVXNlcnNTZWxlY3RlZCA9IDA7XHJcbiAgICB0aGlzLmRlQWN0aXZhdGVkVXNlcnNTZWxlY3RlZCA9IDA7XHJcbiAgICB0aGlzLlVzZXJQYWdpbmdSZXN1bHQuZm9yRWFjaCh1ID0+IHUuc2VsZWN0ZWQgPSBmYWxzZSk7XHJcbiAgfVxyXG5cclxuICAvL0FkZCBVc2VyXHJcbiAgc2hvd0FkZFVzZXJNb2RhbChhZGRVc2VyTW9kYWwpIHtcclxuICAgIHRoaXMudXRpbGl0eVNlcnZpY2Uuc3RhcnRCbG9ja1VJKCk7XHJcbiAgICB0aGlzLnVzZXJTZXJ2aWNlLkxvYWRBZGREcm9wZG93bnMoKS5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xyXG5cclxuICAgICAgbGV0IERyb3Bkb3duc1Jlc3BvbnNlTW9kZWwgPSByZXN1bHQgYXMgRHJvcGRvd25zUmVzcG9uc2VNb2RlbDtcclxuICAgICAgLy9TZXQgcmVxdWlyZWQgbGlzdHNcclxuICAgICAgdGhpcy5wZXJtaXNzaW9uU2V0TGlzdCA9IERyb3Bkb3duc1Jlc3BvbnNlTW9kZWwucGVybWVzc2lvbnNldHM7XHJcbiAgICAgIHRoaXMuZGVwYXJ0bWVudHNMaXN0ID0gRHJvcGRvd25zUmVzcG9uc2VNb2RlbC5kZXBhcnRtZW50cztcclxuXHJcbiAgICAgIHRoaXMuQWRkVXNlckZvcm0gPSBuZXcgRm9ybUdyb3VwKHt9KTtcclxuXHJcbiAgICAgIHRoaXMuQWRkVXNlckZvcm1PcHRpb25zID0gbmV3IEZvcm1PcHRpb25zKCk7XHJcbiAgICAgIHRoaXMuQWRkVXNlckZvcm1PcHRpb25zLkZvcm1Hcm91cCA9IHRoaXMuQWRkVXNlckZvcm1cclxuICAgICAgdGhpcy5BZGRVc2VyRm9ybU9wdGlvbnMuR2V0TW9kZWxGdW5jdGlvbiA9IHRoaXMuZ2V0QWRkVXNlck1vZGVsO1xyXG4gICAgICB0aGlzLkFkZFVzZXJGb3JtT3B0aW9ucy5TZXJ2aWNlU3VibWl0RnVuY3Rpb24gPSB0aGlzLmdldEFkZFVzZXJGdW5jdGlvbjtcclxuICAgICAgdGhpcy5BZGRVc2VyRm9ybU9wdGlvbnMuUGFnaW5nUmVmZXJlbmNlID0gdGhpcy5wYWdpbmdFbGVtZW50XHJcblxyXG4gICAgICB0aGlzLkFkZE5hbWUgPSBuZXcgTXVsdGlMaW5ndWFsVGV4dEJveE9wdGlvbnMoKTtcclxuICAgICAgdGhpcy5BZGROYW1lLk5hbWUgPSBcIkFkZE5hbWVcIjtcclxuICAgICAgdGhpcy5BZGROYW1lLkFyYWJpY0xhYmVsS2V5ID0gXCJOYW1lSW5BcmFiaWNcIjtcclxuICAgICAgdGhpcy5BZGROYW1lLkVuZ2xpc2hMYWJlbEtleSA9IFwiTmFtZUluRW5nbGlzaFwiO1xyXG4gICAgICB0aGlzLkFkZE5hbWUuSXNSZXF1aXJlZCA9IHRydWU7XHJcbiAgICAgIHRoaXMuQWRkTmFtZS5WYWx1ZSA9IG51bGw7XHJcblxyXG4gICAgICB0aGlzLkFkZE1vYmlsZU51bWJlciA9IG5ldyBQaG9uZU9wdGlvbnMoKTtcclxuICAgICAgdGhpcy5BZGRNb2JpbGVOdW1iZXIuVmFsdWUgPSBudWxsO1xyXG4gICAgICB0aGlzLkFkZE1vYmlsZU51bWJlci5OYW1lID0gXCJBZGRNb2JpbGVOdW1iZXJcIlxyXG4gICAgICB0aGlzLkFkZE1vYmlsZU51bWJlci5MYWJlbEtleSA9IFwiTW9iaWxlTnVtYmVyXCJcclxuICAgICAgdGhpcy5BZGRNb2JpbGVOdW1iZXIuRXh0cmFDbGFzc2VzID0gXCJmb3JtLWNvbnRyb2wgYm5zaWdodHMtY29udHJvbFwiXHJcbiAgICAgIHRoaXMuQWRkTW9iaWxlTnVtYmVyLlNlbGVjdGVkQ291bnRyeUlTTyA9IENvdW50cnkuVW5pdGVkQXJhYkVtaXJhdGVzXHJcbiAgICAgIHRoaXMuQWRkTW9iaWxlTnVtYmVyLlBob25lVmFsaWRhdGlvbiA9IHRydWVcclxuICAgICAgdGhpcy5BZGRNb2JpbGVOdW1iZXIuQWxsb3dTZWFyY2ggPSB0cnVlXHJcblxyXG4gICAgICB0aGlzLkFkZFVzZXJuYW1lID0gbmV3IFRleHRCb3hPcHRpb25zKCk7XHJcbiAgICAgIHRoaXMuQWRkVXNlcm5hbWUuVmFsdWUgPSBudWxsO1xyXG4gICAgICB0aGlzLkFkZFVzZXJuYW1lLk5hbWUgPSBcIkFkZFVzZXJuYW1lXCI7XHJcbiAgICAgIHRoaXMuQWRkVXNlcm5hbWUuTGFiZWxLZXkgPSBcIlVzZXJuYW1lXCI7XHJcbiAgICAgIHRoaXMuQWRkVXNlcm5hbWUuVHlwZSA9IElucHV0VHlwZS5FbWFpbDtcclxuICAgICAgdGhpcy5BZGRVc2VybmFtZS5Jc1JlcXVpcmVkID0gdHJ1ZTtcclxuXHJcbiAgICAgIHRoaXMuQWRkU2FtQWNjb3VudCA9IG5ldyBUZXh0Qm94T3B0aW9ucygpO1xyXG4gICAgICB0aGlzLkFkZFNhbUFjY291bnQuVmFsdWUgPSBudWxsO1xyXG4gICAgICB0aGlzLkFkZFNhbUFjY291bnQuTmFtZSA9IFwiQWRkU2FtQWNjb3VudFwiO1xyXG4gICAgICB0aGlzLkFkZFNhbUFjY291bnQuTGFiZWxLZXkgPSBcIlNhbUFjY291bnRcIjtcclxuICAgICAgdGhpcy5BZGRTYW1BY2NvdW50LlR5cGUgPSBJbnB1dFR5cGUuVGV4dDtcclxuXHJcbiAgICAgIHRoaXMuQWRkVXNlckRlcGFydG1lbnQgPSBuZXcgRHJvcGRvd25PcHRpb25zKCk7XHJcbiAgICAgIHRoaXMuQWRkVXNlckRlcGFydG1lbnQuTmFtZSA9IFwiQWRkRGVwYXJ0bWVudElEXCJcclxuICAgICAgdGhpcy5BZGRVc2VyRGVwYXJ0bWVudC5MYWJlbEtleSA9IFwiRGVwYXJ0bWVudFwiXHJcbiAgICAgIHRoaXMuQWRkVXNlckRlcGFydG1lbnQuU2VsZWN0ZWRJdGVtcyA9IG51bGw7XHJcbiAgICAgIHRoaXMuQWRkVXNlckRlcGFydG1lbnQuRGF0YVNvdXJjZSA9IHRoaXMuZGVwYXJ0bWVudHNMaXN0XHJcbiAgICAgIHRoaXMuQWRkVXNlckRlcGFydG1lbnQuU2luZ2xlU2VsZWN0aW9uID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuQWRkVXNlckRlcGFydG1lbnQuQWxsb3dTZWFyY2hGaWx0ZXIgPSB0cnVlO1xyXG5cclxuICAgICAgdGhpcy5BZGRTZW5kQWN0aXZhdGlvbkVtYWlsID0gbmV3IFRvZ2dsZVNsaWRlT3B0aW9ucygpO1xyXG4gICAgICB0aGlzLkFkZFNlbmRBY3RpdmF0aW9uRW1haWwuTmFtZSA9IFwiQWRkU2VuZEFjdGl2YXRpb25NYWlsXCJcclxuICAgICAgdGhpcy5BZGRTZW5kQWN0aXZhdGlvbkVtYWlsLkxhYmVsS2V5ID0gXCJTZW5kQWN0aXZhdGlvbkVtYWlsXCJcclxuICAgICAgdGhpcy5BZGRTZW5kQWN0aXZhdGlvbkVtYWlsLlZhbHVlID0gZmFsc2VcclxuICAgICAgdGhpcy5BZGRTZW5kQWN0aXZhdGlvbkVtYWlsLlZpZXdUeXBlID0gQ29udHJvbExheW91dC5Ib3Jpem9udGFsXHJcblxyXG5cclxuICAgICAgdGhpcy5BZGRVc2VyUGVybWlzc2lvbnMgPSBuZXcgRHJvcGRvd25PcHRpb25zKCk7XHJcbiAgICAgIHRoaXMuQWRkVXNlclBlcm1pc3Npb25zLk5hbWUgPSBcIkFkZFBlcm1pc3Npb25TZXRzXCJcclxuICAgICAgdGhpcy5BZGRVc2VyUGVybWlzc2lvbnMuTGFiZWxLZXkgPSBcIlBlcm1pc3Npb25TZXRzXCJcclxuICAgICAgdGhpcy5BZGRVc2VyUGVybWlzc2lvbnMuU2VsZWN0ZWRJdGVtcyA9IG51bGw7XHJcbiAgICAgIHRoaXMuQWRkVXNlclBlcm1pc3Npb25zLkRhdGFTb3VyY2UgPSB0aGlzLnBlcm1pc3Npb25TZXRMaXN0XHJcbiAgICAgIHRoaXMuQWRkVXNlclBlcm1pc3Npb25zLlNpbmdsZVNlbGVjdGlvbiA9IGZhbHNlO1xyXG4gICAgICB0aGlzLkFkZFVzZXJQZXJtaXNzaW9ucy5BbGxvd1NlYXJjaEZpbHRlciA9IHRydWU7XHJcbiAgICAgIHRoaXMuQWRkVXNlclBlcm1pc3Npb25zLklzUmVxdWlyZWQgPSB0cnVlO1xyXG5cclxuICAgICAgdGhpcy5tb2RhbFNlcnZpY2Uub3BlbihhZGRVc2VyTW9kYWwpO1xyXG4gICAgICB0aGlzLnV0aWxpdHlTZXJ2aWNlLnN0b3BCbG9ja1VJKCk7XHJcbiAgICB9KTtcclxuXHJcbiAgfVxyXG5cclxuICBnZXRBZGRVc2VyTW9kZWwgPSAoKSA9PiB7XHJcbiAgICBsZXQgcGFyYW1BcnJheTogYW55W10gPSBbXTtcclxuICAgIGxldCBSZXN1bHRNb2RlbCA9IHRoaXMuQWRkVXNlckZvcm0udmFsdWU7XHJcbiAgICBsZXQgQWRkTW9kZWwgPSBuZXcgQWRkVXNlck1vZGVsKCk7XHJcbiAgICBBZGRNb2RlbC5Vc2VybmFtZSA9IFJlc3VsdE1vZGVsLkFkZFVzZXJuYW1lO1xyXG4gICAgQWRkTW9kZWwuTmFtZUFSID0gUmVzdWx0TW9kZWwuQWRkTmFtZS5BcmFiaWNWYWx1ZTtcclxuICAgIEFkZE1vZGVsLk5hbWVFTiA9IFJlc3VsdE1vZGVsLkFkZE5hbWUuRW5nbGlzaFZhbHVlO1xyXG4gICAgQWRkTW9kZWwuU2FtQWNjb3VudCA9IFJlc3VsdE1vZGVsLkFkZFNhbUFjY291bnQ7XHJcbiAgICBBZGRNb2RlbC5Pcmdhbml6YXRpb25JRCA9IDE7XHJcbiAgICBpZiAoUmVzdWx0TW9kZWwuQWRkRGVwYXJ0bWVudElEICE9IHVuZGVmaW5lZClcclxuICAgICAgQWRkTW9kZWwuRGVwYXJ0bWVudElEID0gTnVtYmVyKFJlc3VsdE1vZGVsLkFkZERlcGFydG1lbnRJRCk7XHJcbiAgICBsZXQgUGVybWlzc2lvblNldHMgPSBSZXN1bHRNb2RlbC5BZGRQZXJtaXNzaW9uU2V0cyBhcyBzdHJpbmdbXVxyXG4gICAgQWRkTW9kZWwuUGVybWlzc2lvblNldHMgPSBQZXJtaXNzaW9uU2V0cy5tYXAoKGkpID0+IE51bWJlcihpKSk7XHJcbiAgICBBZGRNb2RlbC5TZW5kQWN0aXZhdGlvbk1haWwgPSBSZXN1bHRNb2RlbC5BZGRTZW5kQWN0aXZhdGlvbk1haWw7XHJcbiAgICBsZXQgaW50ZXJuYXRpb25hbE51bWJlcjogc3RyaW5nID0gbnVsbDtcclxuICAgIGlmIChSZXN1bHRNb2RlbC5BZGRNb2JpbGVOdW1iZXIgIT0gbnVsbCkge1xyXG4gICAgICBpbnRlcm5hdGlvbmFsTnVtYmVyID0gUmVzdWx0TW9kZWwuQWRkTW9iaWxlTnVtYmVyLmludGVybmF0aW9uYWxOdW1iZXIgYXMgc3RyaW5nO1xyXG4gICAgICBpbnRlcm5hdGlvbmFsTnVtYmVyID0gaW50ZXJuYXRpb25hbE51bWJlci5yZXBsYWNlKC9cXHMvZywgXCJcIik7XHJcbiAgICB9XHJcbiAgICBBZGRNb2RlbC5QaG9uZUlucHV0TW9iaWxlID0gaW50ZXJuYXRpb25hbE51bWJlcjtcclxuICAgIHBhcmFtQXJyYXkucHVzaChBZGRNb2RlbCk7XHJcbiAgICByZXR1cm4gcGFyYW1BcnJheTtcclxuICB9XHJcblxyXG4gIGdldEFkZFVzZXJGdW5jdGlvbiA9IChBZGRNb2RlbCk6IE9ic2VydmFibGU8YW55PiA9PiB7XHJcbiAgICByZXR1cm4gdGhpcy51c2VyU2VydmljZS5BZGRVc2VyKEFkZE1vZGVsKVxyXG4gIH1cclxuXHJcblxyXG4gIC8vRWRpdCBVc2VyXHJcbiAgc2hvd0VkaXRVc2VyTW9kYWwodXNlcklEOiBudW1iZXIsdXNlcklERW5jOnN0cmluZywgRWRpdFVzZXJNb2RhbCkge1xyXG4gICAgdGhpcy51dGlsaXR5U2VydmljZS5zdGFydEJsb2NrVUkoKTtcclxuICAgIHRoaXMuVXNlcklkID0gdXNlcklEXHJcblxyXG4gICAgdGhpcy51c2VyU2VydmljZS5nZXRFZGl0VXNlcih1c2VySURFbmMpLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XHJcbiAgICAgIGxldCByZXN1bHRPYmogPSByZXN1bHQgYXMgYW55O1xyXG4gICAgICBsZXQgdXNlciA9IHJlc3VsdE9iai5tb2RlbDtcclxuICAgICAgbGV0IGxpc3RzID0gcmVzdWx0T2JqLmxpc3RzO1xyXG5cclxuICAgICAgdGhpcy5wZXJtaXNzaW9uU2V0TGlzdCA9IGxpc3RzLnBlcm1lc3Npb25zZXRzO1xyXG4gICAgICB0aGlzLmRlcGFydG1lbnRzTGlzdCA9IGxpc3RzLmRlcGFydG1lbnRzO1xyXG5cclxuICAgICAgdGhpcy5FZGl0VXNlckZvcm0gPSBuZXcgRm9ybUdyb3VwKHt9KTtcclxuXHJcbiAgICAgIHRoaXMuRWRpdFVzZXJGb3JtT3B0aW9ucyA9IG5ldyBGb3JtT3B0aW9ucygpO1xyXG4gICAgICB0aGlzLkVkaXRVc2VyRm9ybU9wdGlvbnMuRm9ybUdyb3VwID0gdGhpcy5FZGl0VXNlckZvcm1cclxuICAgICAgdGhpcy5FZGl0VXNlckZvcm1PcHRpb25zLkdldE1vZGVsRnVuY3Rpb24gPSB0aGlzLmdldEVkaXRVc2VyTW9kZWw7XHJcbiAgICAgIHRoaXMuRWRpdFVzZXJGb3JtT3B0aW9ucy5TZXJ2aWNlU3VibWl0RnVuY3Rpb24gPSB0aGlzLmdldEVkaXRVc2VyRnVuY3Rpb247XHJcbiAgICAgIHRoaXMuRWRpdFVzZXJGb3JtT3B0aW9ucy5QYWdpbmdSZWZlcmVuY2UgPSB0aGlzLnBhZ2luZ0VsZW1lbnQ7XHJcbiAgICAgIHRoaXMuRWRpdFVzZXJGb3JtT3B0aW9ucy5QYWdpbmdBY3Rpb25Nb2RlID0gUGFnaW5nQWN0aW9uTW9kZS5VcGRhdGU7XHJcbiAgICAgIHRoaXMuRWRpdFVzZXJGb3JtT3B0aW9ucy5PblN1Y2Nlc3NIYW5kbGVyID0gdGhpcy5vblN1Ym1pdFN1Y2Nlc3M7XHJcblxyXG5cclxuXHJcbiAgICAgIGxldCBOYW1lID0gbmV3IEVuZ2xpc2hBcmFiaWNEVE8oKTtcclxuICAgICAgTmFtZS5BcmFiaWMgPSB1c2VyLm5hbWVBUjtcclxuICAgICAgTmFtZS5FbmdsaXNoID0gdXNlci5uYW1lRU47XHJcblxyXG4gICAgICB0aGlzLkVkaXROYW1lID0gbmV3IE11bHRpTGluZ3VhbFRleHRCb3hPcHRpb25zKCk7XHJcbiAgICAgIHRoaXMuRWRpdE5hbWUuTmFtZSA9IFwiRWRpdE5hbWVcIjtcclxuICAgICAgdGhpcy5FZGl0TmFtZS5BcmFiaWNMYWJlbEtleSA9IFwiTmFtZUluQXJhYmljXCI7XHJcbiAgICAgIHRoaXMuRWRpdE5hbWUuRW5nbGlzaExhYmVsS2V5ID0gXCJOYW1lSW5FbmdsaXNoXCI7XHJcbiAgICAgIHRoaXMuRWRpdE5hbWUuSXNSZXF1aXJlZCA9IHRydWU7XHJcbiAgICAgIHRoaXMuRWRpdE5hbWUuVmFsdWUgPSBOYW1lO1xyXG5cclxuICAgICAgdGhpcy5FZGl0TW9iaWxlTnVtYmVyID0gbmV3IFBob25lT3B0aW9ucygpO1xyXG4gICAgICB0aGlzLkVkaXRNb2JpbGVOdW1iZXIuVmFsdWUgPSB1c2VyLm1vYmlsZSBhcyBzdHJpbmc7XHJcbiAgICAgIHRoaXMuRWRpdE1vYmlsZU51bWJlci5OYW1lID0gXCJFZGl0TW9iaWxlTnVtYmVyXCJcclxuICAgICAgdGhpcy5FZGl0TW9iaWxlTnVtYmVyLkxhYmVsS2V5ID0gXCJNb2JpbGVOdW1iZXJcIlxyXG4gICAgICB0aGlzLkVkaXRNb2JpbGVOdW1iZXIuRXh0cmFDbGFzc2VzID0gXCJmb3JtLWNvbnRyb2wgYm5zaWdodHMtY29udHJvbFwiXHJcbiAgICAgIHRoaXMuRWRpdE1vYmlsZU51bWJlci5TZWxlY3RlZENvdW50cnlJU08gPSBDb3VudHJ5LlVuaXRlZEFyYWJFbWlyYXRlc1xyXG4gICAgICB0aGlzLkVkaXRNb2JpbGVOdW1iZXIuUGhvbmVWYWxpZGF0aW9uID0gdHJ1ZVxyXG4gICAgICB0aGlzLkVkaXRNb2JpbGVOdW1iZXIuQWxsb3dTZWFyY2ggPSB0cnVlXHJcblxyXG5cclxuICAgICAgdGhpcy5FZGl0VXNlcm5hbWUgPSBuZXcgVGV4dEJveE9wdGlvbnMoKTtcclxuICAgICAgdGhpcy5FZGl0VXNlcm5hbWUuVmFsdWUgPSB1c2VyLnVzZXJuYW1lO1xyXG4gICAgICB0aGlzLkVkaXRVc2VybmFtZS5OYW1lID0gXCJFZGl0VXNlcm5hbWVcIjtcclxuICAgICAgdGhpcy5FZGl0VXNlcm5hbWUuTGFiZWxLZXkgPSBcIlVzZXJuYW1lXCI7XHJcbiAgICAgIHRoaXMuRWRpdFVzZXJuYW1lLlR5cGUgPSBJbnB1dFR5cGUuVGV4dDtcclxuICAgICAgdGhpcy5FZGl0VXNlcm5hbWUuSXNSZXF1aXJlZCA9IHRydWU7XHJcblxyXG4gICAgICB0aGlzLkVkaXRFbWFpbCA9IG5ldyBUZXh0Qm94T3B0aW9ucygpO1xyXG4gICAgICB0aGlzLkVkaXRFbWFpbC5WYWx1ZSA9IHVzZXIuZW1haWw7XHJcbiAgICAgIHRoaXMuRWRpdEVtYWlsLk5hbWUgPSBcIkVkaXRFbWFpbFwiO1xyXG4gICAgICB0aGlzLkVkaXRFbWFpbC5MYWJlbEtleSA9IFwiRW1haWxcIjtcclxuICAgICAgdGhpcy5FZGl0RW1haWwuVHlwZSA9IElucHV0VHlwZS5UZXh0O1xyXG4gICAgICB0aGlzLkVkaXRFbWFpbC5Jc1JlcXVpcmVkID0gdHJ1ZTtcclxuXHJcbiAgICAgIHRoaXMuRWRpdFNhbUFjY291bnQgPSBuZXcgVGV4dEJveE9wdGlvbnMoKTtcclxuICAgICAgdGhpcy5FZGl0U2FtQWNjb3VudC5WYWx1ZSA9IHVzZXIuc2FtQWNjb3VudDtcclxuICAgICAgdGhpcy5FZGl0U2FtQWNjb3VudC5OYW1lID0gXCJFZGl0U2FtQWNjb3VudFwiO1xyXG4gICAgICB0aGlzLkVkaXRTYW1BY2NvdW50LkxhYmVsS2V5ID0gXCJTYW1BY2NvdW50XCI7XHJcbiAgICAgIHRoaXMuRWRpdFNhbUFjY291bnQuVHlwZSA9IElucHV0VHlwZS5UZXh0O1xyXG5cclxuXHJcbiAgICAgIHRoaXMuRWRpdFVzZXJEZXBhcnRtZW50ID0gbmV3IERyb3Bkb3duT3B0aW9ucygpO1xyXG4gICAgICB0aGlzLkVkaXRVc2VyRGVwYXJ0bWVudC5OYW1lID0gXCJFZGl0RGVwYXJ0bWVudElEXCJcclxuICAgICAgdGhpcy5FZGl0VXNlckRlcGFydG1lbnQuTGFiZWxLZXkgPSBcIkRlcGFydG1lbnRcIlxyXG4gICAgICB0aGlzLkVkaXRVc2VyRGVwYXJ0bWVudC5TZWxlY3RlZEl0ZW1zID0gdGhpcy5kZXBhcnRtZW50c0xpc3QuZmlsdGVyKChpdGVtKSA9PiB7IHJldHVybiBwYXJzZUludChpdGVtLmtleSkgPT0gdXNlci5kZXBhcnRtZW50SUQ7IH0pLm1hcCgoaXRlbSkgPT4gaXRlbS5rZXkpWzBdO1xyXG4gICAgICB0aGlzLkVkaXRVc2VyRGVwYXJ0bWVudC5EYXRhU291cmNlID0gdGhpcy5kZXBhcnRtZW50c0xpc3RcclxuICAgICAgdGhpcy5FZGl0VXNlckRlcGFydG1lbnQuU2luZ2xlU2VsZWN0aW9uID0gdHJ1ZTtcclxuICAgICAgdGhpcy5FZGl0VXNlckRlcGFydG1lbnQuQWxsb3dTZWFyY2hGaWx0ZXIgPSB0cnVlO1xyXG5cclxuICAgICAgdGhpcy5FZGl0VXNlclBlcm1pc3Npb25zID0gbmV3IERyb3Bkb3duT3B0aW9ucygpO1xyXG4gICAgICB0aGlzLkVkaXRVc2VyUGVybWlzc2lvbnMuTmFtZSA9IFwiRWRpdFBlcm1pc3Npb25TZXRzXCJcclxuICAgICAgdGhpcy5FZGl0VXNlclBlcm1pc3Npb25zLkxhYmVsS2V5ID0gXCJQZXJtaXNzaW9uU2V0c1wiXHJcbiAgICAgIHRoaXMuRWRpdFVzZXJQZXJtaXNzaW9ucy5TZWxlY3RlZEl0ZW1zID0gdGhpcy5wZXJtaXNzaW9uU2V0TGlzdC5maWx0ZXIoZnVuY3Rpb24gKHRhZykge1xyXG4gICAgICAgIHJldHVybiB1c2VyLnBlcm1pc3Npb25JRHMuaW5kZXhPZihwYXJzZUludCh0YWcua2V5KSkgPj0gMDtcclxuICAgICAgfSkubWFwKChpdGVtKSA9PiBpdGVtLmtleSk7XHJcbiAgICAgIHRoaXMuRWRpdFVzZXJQZXJtaXNzaW9ucy5EYXRhU291cmNlID0gdGhpcy5wZXJtaXNzaW9uU2V0TGlzdFxyXG4gICAgICB0aGlzLkVkaXRVc2VyUGVybWlzc2lvbnMuU2luZ2xlU2VsZWN0aW9uID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuRWRpdFVzZXJQZXJtaXNzaW9ucy5BbGxvd1NlYXJjaEZpbHRlciA9IHRydWU7XHJcbiAgICAgIHRoaXMuRWRpdFVzZXJQZXJtaXNzaW9ucy5Jc1JlcXVpcmVkID0gdHJ1ZTtcclxuXHJcbiAgICAgIHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4oRWRpdFVzZXJNb2RhbCk7XHJcbiAgICAgIHRoaXMudXRpbGl0eVNlcnZpY2Uuc3RvcEJsb2NrVUkoKTtcclxuICAgIH0pO1xyXG5cclxuXHJcbiAgfVxyXG4gIGdldEVkaXRVc2VyTW9kZWwgPSAoKSA9PiB7XHJcbiAgICBsZXQgcGFyYW1BcnJheTogYW55W10gPSBbXTtcclxuICAgIGxldCBSZXN1bHRNb2RlbCA9IHRoaXMuRWRpdFVzZXJGb3JtLnZhbHVlO1xyXG4gICAgbGV0IEVkaXRNb2RlbCA9IG5ldyBFZGl0VXNlck1vZGVsKCk7XHJcbiAgICBFZGl0TW9kZWwuSUQgPSB0aGlzLlVzZXJJZDtcclxuICAgIEVkaXRNb2RlbC5Vc2VybmFtZSA9IFJlc3VsdE1vZGVsLkVkaXRVc2VybmFtZTtcclxuICAgIEVkaXRNb2RlbC5FbWFpbCA9IFJlc3VsdE1vZGVsLkVkaXRFbWFpbDtcclxuICAgIEVkaXRNb2RlbC5OYW1lQVIgPSBSZXN1bHRNb2RlbC5FZGl0TmFtZS5BcmFiaWNWYWx1ZTtcclxuICAgIEVkaXRNb2RlbC5OYW1lRU4gPSBSZXN1bHRNb2RlbC5FZGl0TmFtZS5FbmdsaXNoVmFsdWU7XHJcbiAgICBFZGl0TW9kZWwuU2FtQWNjb3VudCA9IFJlc3VsdE1vZGVsLkVkaXRTYW1BY2NvdW50O1xyXG4gICAgaWYgKFJlc3VsdE1vZGVsLkVkaXREZXBhcnRtZW50SUQgIT0gdW5kZWZpbmVkKVxyXG4gICAgICBFZGl0TW9kZWwuRGVwYXJ0bWVudElEID0gTnVtYmVyKFJlc3VsdE1vZGVsLkVkaXREZXBhcnRtZW50SUQpO1xyXG4gICAgbGV0IFBlcm1pc3Npb25TZXRzID0gUmVzdWx0TW9kZWwuRWRpdFBlcm1pc3Npb25TZXRzIGFzIHN0cmluZ1tdXHJcbiAgICBFZGl0TW9kZWwuUGVybWlzc2lvbklEcyA9IFBlcm1pc3Npb25TZXRzLm1hcCgoaSkgPT4gTnVtYmVyKGkpKTtcclxuICAgIGxldCBpbnRlcm5hdGlvbmFsTnVtYmVyOiBzdHJpbmcgPSBudWxsO1xyXG4gICAgaWYgKFJlc3VsdE1vZGVsLkVkaXRNb2JpbGVOdW1iZXIgIT0gbnVsbCkge1xyXG4gICAgICBpbnRlcm5hdGlvbmFsTnVtYmVyID0gUmVzdWx0TW9kZWwuRWRpdE1vYmlsZU51bWJlci5pbnRlcm5hdGlvbmFsTnVtYmVyIGFzIHN0cmluZztcclxuICAgICAgaW50ZXJuYXRpb25hbE51bWJlciA9IGludGVybmF0aW9uYWxOdW1iZXIucmVwbGFjZSgvXFxzL2csIFwiXCIpO1xyXG4gICAgfVxyXG4gICAgRWRpdE1vZGVsLk1vYmlsZSA9IGludGVybmF0aW9uYWxOdW1iZXI7XHJcblxyXG4gICAgcGFyYW1BcnJheS5wdXNoKEVkaXRNb2RlbCk7XHJcbiAgICByZXR1cm4gcGFyYW1BcnJheTtcclxuICB9XHJcblxyXG4gIGdldEVkaXRVc2VyRnVuY3Rpb24gPSAoRWRpdE1vZGVsKTogT2JzZXJ2YWJsZTxhbnk+ID0+IHtcclxuICAgIHJldHVybiB0aGlzLnVzZXJTZXJ2aWNlLkVkaXRVc2VyKEVkaXRNb2RlbClcclxuICB9XHJcblxyXG4gIC8vRXhwb3J0IHVzZXJzIGV4Y2VsXHJcbiAgZXhwb3J0RXhjZWwoKSB7XHJcbiAgICBsZXQgcGFyYW1zID0gbmV3IEh0dHBQYXJhbXMoKTtcclxuICAgIHBhcmFtcyA9IHBhcmFtcy5hcHBlbmQoXCJwZXJtaXNzaW9uSWRzXCIsIHRoaXMuVXNlcnNGb3JtLmNvbnRyb2xzW1wicGVybWlzc2lvbnNldHNcIl0udmFsdWUgPT0gdW5kZWZpbmVkID8gXCJcIiA6IHRoaXMuVXNlcnNGb3JtLmNvbnRyb2xzW1wicGVybWlzc2lvbnNldHNcIl0udmFsdWUpO1xyXG4gICAgcGFyYW1zID0gcGFyYW1zLmFwcGVuZChcImFjY291bnRTdGF0dXNJRHNcIiwgdGhpcy5Vc2Vyc0Zvcm0uY29udHJvbHNbXCJhY2NvdW50c3RhdHVzXCJdLnZhbHVlID09IHVuZGVmaW5lZCA/IFwiXCIgOiB0aGlzLlVzZXJzRm9ybS5jb250cm9sc1tcImFjY291bnRzdGF0dXNcIl0udmFsdWUpO1xyXG4gICAgcGFyYW1zID0gcGFyYW1zLmFwcGVuZChcImxvY2tlZFN0YXR1c0lkc1wiLCB0aGlzLlVzZXJzRm9ybS5jb250cm9sc1tcImxvY2tlZHN0YXR1c1wiXS52YWx1ZSA9PSB1bmRlZmluZWQgPyBcIlwiIDogdGhpcy5Vc2Vyc0Zvcm0uY29udHJvbHNbXCJsb2NrZWRzdGF0dXNcIl0udmFsdWUpO1xyXG4gICAgcGFyYW1zID0gcGFyYW1zLmFwcGVuZChcImRlcGFydG1lbnRJZHNcIiwgdGhpcy5Vc2Vyc0Zvcm0uY29udHJvbHNbXCJkZXBhcnRtZW50c1wiXS52YWx1ZSA9PSB1bmRlZmluZWQgPyBcIlwiIDogdGhpcy5Vc2Vyc0Zvcm0uY29udHJvbHNbXCJkZXBhcnRtZW50c1wiXS52YWx1ZSk7XHJcbiAgICBwYXJhbXMgPSBwYXJhbXMuYXBwZW5kKFwibmFtZUZpbHRlclwiLCB0aGlzLlVzZXJzRm9ybS5jb250cm9sc1tcInNlYXJjaFRleHRCb3hcIl0udmFsdWUgPT0gdW5kZWZpbmVkID8gXCJcIiA6IHRoaXMuVXNlcnNGb3JtLmNvbnRyb2xzW1wic2VhcmNoVGV4dEJveFwiXS52YWx1ZSk7XHJcbiAgICB0aGlzLnVzZXJTZXJ2aWNlLkV4cG9ydChwYXJhbXMpLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XHJcbiAgICAgIGxldCBGaWxlRFRPID0gcmVzdWx0IGFzIGFueVxyXG4gICAgICBjb25zdCBmaWxlID0gbmV3IEJsb2IoW0ZpbGVEVE9dLCB7IHR5cGU6ICdhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5zaGVldCcgfSk7XHJcbiAgICAgIGxldCBmaWxlTmFtZSA9IHRoaXMudXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIlVzZXJzXCIpICsgXCIueGxzeFwiO1xyXG4gICAgICBzYXZlQXMoZmlsZSwgZmlsZU5hbWUpO1xyXG4gICAgICB3aW5kb3cubG9jYXRpb24ucmVsb2FkKCk7XHJcblxyXG5cclxuICAgIH0sIChlcnJvcikgPT4ge1xyXG5cclxuICAgIH0pXHJcblxyXG4gIH1cclxuXHJcbiAgLy9PbmUgdXNlciBmdW5jdGlvbnNcclxuXHJcbiAgLy9BY3RpdmF0aW9uIGFuZCBkZWFjdGl2YXRpb24gZnVuY3Rpb25zXHJcbiAgc2hvd0FjdGl2YXRlVXNlck1vZGFsKFVzZXI6IGFueSwgaXNBY3RpdmF0ZU1vZGVsOiBib29sZWFuLCBBY3RpdmF0ZVVzZXJNb2RhbCkge1xyXG4gICAgdGhpcy51dGlsaXR5U2VydmljZS5zdGFydEJsb2NrVUkoKVxyXG4gICAgdGhpcy5BY3RpdmF0b3JEZWFjdGl2YXRlVXNlckxpc3QgPSBbXVxyXG4gICAgdGhpcy5BY3RpdmF0b3JEZWFjdGl2YXRlVXNlckxpc3QucHVzaChVc2VyKTtcclxuICAgIHRoaXMuTmFtZSA9IFVzZXIubmFtZVN0cjtcclxuICAgIHRoaXMuRW1haWwgPSBVc2VyLmVtYWlsO1xyXG4gICAgdGhpcy5TaG93QWN0aXZhdGVNb2RlbERhdGEgPSBpc0FjdGl2YXRlTW9kZWxcclxuICAgIHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4oQWN0aXZhdGVVc2VyTW9kYWwpO1xyXG4gICAgdGhpcy51dGlsaXR5U2VydmljZS5zdG9wQmxvY2tVSSgpO1xyXG5cclxuICB9XHJcblxyXG4gIGFjdGl2YXRlKCkge1xyXG4gICAgdGhpcy51c2VyU2VydmljZS5BY3RpdmF0ZVVzZXJzKHRoaXMuQWN0aXZhdG9yRGVhY3RpdmF0ZVVzZXJMaXN0KS5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xyXG4gICAgICB0aGlzLm1vZGFsU2VydmljZS5kaXNtaXNzQWxsKCk7XHJcbiAgICAgIGxldCBlbGVtZW50ID0gdGhpcy5wYWdpbmdFbGVtZW50IGFzIGFueTtcclxuICAgICAgZWxlbWVudC5VcGRhdGVQYWdpbmcoKTtcclxuICAgICAgdGhpcy5yZXNldFVzZXJzQ291bnQoKTtcclxuICAgICAgdGhpcy5kaXNhYmxlQnV0dG9ucygpO1xyXG4gICAgfSwgKGVycm9yKSA9PiB7XHJcblxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIGRlYWN0aXZhdGUoKSB7XHJcbiAgICB0aGlzLnVzZXJTZXJ2aWNlLkRlYWN0aXZhdGVVc2Vycyh0aGlzLkFjdGl2YXRvckRlYWN0aXZhdGVVc2VyTGlzdCkuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcclxuICAgICAgdGhpcy5tb2RhbFNlcnZpY2UuZGlzbWlzc0FsbCgpO1xyXG4gICAgICBsZXQgZWxlbWVudCA9IHRoaXMucGFnaW5nRWxlbWVudCBhcyBhbnk7XHJcbiAgICAgIGVsZW1lbnQuVXBkYXRlUGFnaW5nKCk7XHJcbiAgICAgIHRoaXMucmVzZXRVc2Vyc0NvdW50KCk7XHJcbiAgICAgIHRoaXMuZGlzYWJsZUJ1dHRvbnMoKTtcclxuICAgIH0sIChlcnJvcikgPT4ge1xyXG5cclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICAvL1Jlc2V0IFBhc3N3b3JkIGZ1bmN0aW9uXHJcbiAgc2hvd1Jlc2V0UGFzc3dvcmRVc2VyTW9kYWwoVXNlcjogYW55LCBSZXNldFBhc3N3b3JkVXNlck1vZGFsKSB7XHJcbiAgICB0aGlzLnV0aWxpdHlTZXJ2aWNlLnN0YXJ0QmxvY2tVSSgpXHJcbiAgICB0aGlzLlJlc2V0UGFzc3dvcmRVc2VyTGlzdCA9IFtdXHJcbiAgICB0aGlzLlJlc2V0UGFzc3dvcmRVc2VyTGlzdC5wdXNoKFVzZXIpO1xyXG4gICAgdGhpcy5OYW1lID0gVXNlci5uYW1lU3RyO1xyXG4gICAgdGhpcy5FbWFpbCA9IFVzZXIuZW1haWxcclxuICAgIHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4oUmVzZXRQYXNzd29yZFVzZXJNb2RhbCk7XHJcbiAgICB0aGlzLnV0aWxpdHlTZXJ2aWNlLnN0b3BCbG9ja1VJKCk7XHJcblxyXG5cclxuICB9XHJcblxyXG4gIHJlc2V0UGFzc3dvcmQoKSB7XHJcblxyXG4gICAgdGhpcy51c2VyU2VydmljZS5SZXNldFVzZXJzUGFzc3dvcmQodGhpcy5SZXNldFBhc3N3b3JkVXNlckxpc3QpLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XHJcbiAgICAgIHRoaXMubW9kYWxTZXJ2aWNlLmRpc21pc3NBbGwoKTtcclxuICAgICAgbGV0IGVsZW1lbnQgPSB0aGlzLnBhZ2luZ0VsZW1lbnQgYXMgYW55O1xyXG4gICAgICBlbGVtZW50LlVwZGF0ZVBhZ2luZygpO1xyXG4gICAgICB0aGlzLnJlc2V0VXNlcnNDb3VudCgpO1xyXG4gICAgICB0aGlzLmRpc2FibGVCdXR0b25zKCk7XHJcbiAgICB9LCAoZXJyb3IpID0+IHtcclxuXHJcbiAgICB9KVxyXG5cclxuICB9XHJcblxyXG4gIC8vU2VuZCBhY3RpdmF0aW9uIG1haWwgZnVuY3Rpb25cclxuICBzaG93U2VuZEFjdGl2YXRpb25FbWFpbE1vZGFsKFVzZXI6IGFueSwgU2VuZEFjdGl2YXRpb25FbWFpbE1vZGFsKSB7XHJcbiAgICB0aGlzLnV0aWxpdHlTZXJ2aWNlLnN0YXJ0QmxvY2tVSSgpXHJcbiAgICB0aGlzLlNlbGVjdGVkVXNlckxpc3QgPSBbXVxyXG4gICAgdGhpcy5TZWxlY3RlZFVzZXJMaXN0LnB1c2goVXNlcik7XHJcbiAgICB0aGlzLk5hbWUgPSBVc2VyLm5hbWVTdHI7XHJcbiAgICB0aGlzLkVtYWlsID0gVXNlci5lbWFpbFxyXG4gICAgdGhpcy5tb2RhbFNlcnZpY2Uub3BlbihTZW5kQWN0aXZhdGlvbkVtYWlsTW9kYWwpO1xyXG4gICAgdGhpcy51dGlsaXR5U2VydmljZS5zdG9wQmxvY2tVSSgpO1xyXG5cclxuICB9XHJcblxyXG4gIHNlbmRBY3RpdmF0aW9uRW1haWxGb3JVc2VyKCkge1xyXG4gICAgdGhpcy51c2VyU2VydmljZS5TZW5kQWN0aXZhdGlvbkVtYWlsRm9yVXNlcih0aGlzLlNlbGVjdGVkVXNlckxpc3QpLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XHJcbiAgICAgIHRoaXMubW9kYWxTZXJ2aWNlLmRpc21pc3NBbGwoKTtcclxuICAgICAgdGhpcy5TZWxlY3RlZFVzZXJMaXN0ID0gW107XHJcbiAgICAgIGxldCBlbGVtZW50ID0gdGhpcy5wYWdpbmdFbGVtZW50IGFzIGFueTtcclxuICAgICAgZWxlbWVudC5VcGRhdGVQYWdpbmcoKTtcclxuICAgICAgdGhpcy5yZXNldFVzZXJzQ291bnQoKTtcclxuICAgICAgdGhpcy5kaXNhYmxlQnV0dG9ucygpO1xyXG4gICAgfSwgKGVycm9yKSA9PiB7XHJcblxyXG4gICAgfSlcclxuXHJcbiAgfVxyXG5cclxuICAvL1NldCBwYXNzd29yZCBmdW5jdGlvblxyXG5cclxuICBzaG93c2V0UGFzc3dvcmRVc2VyTW9kYWwoVXNlcjogYW55LCBzZXRQYXNzd29yZFVzZXJNb2RhbCkge1xyXG4gICAgdGhpcy51dGlsaXR5U2VydmljZS5zdGFydEJsb2NrVUkoKTtcclxuICAgIHRoaXMuU2V0VXNlclBhc3N3b3JkRm9ybSA9IG5ldyBGb3JtR3JvdXAoe30pO1xyXG4gICAgdGhpcy5TZXRVc2VyUGFzc3dvcmRGb3JtT3B0aW9ucyA9IG5ldyBGb3JtT3B0aW9ucygpO1xyXG4gICAgdGhpcy5TZXRVc2VyUGFzc3dvcmRGb3JtT3B0aW9ucy5Gb3JtR3JvdXAgPSB0aGlzLlNldFVzZXJQYXNzd29yZEZvcm1cclxuICAgIHRoaXMuU2V0VXNlclBhc3N3b3JkRm9ybU9wdGlvbnMuR2V0TW9kZWxGdW5jdGlvbiA9IHRoaXMuZ2V0U2V0UEFzc3dvcmRNb2RlbDtcclxuICAgIHRoaXMuU2V0VXNlclBhc3N3b3JkRm9ybU9wdGlvbnMuU2VydmljZVN1Ym1pdEZ1bmN0aW9uID0gdGhpcy5nZXRTZXRQYXNzd29yZEZ1bmN0aW9uO1xyXG4gICAgdGhpcy5TZXRVc2VyUGFzc3dvcmRGb3JtT3B0aW9ucy5QYWdpbmdSZWZlcmVuY2UgPSB0aGlzLnBhZ2luZ0VsZW1lbnQ7XHJcbiAgICB0aGlzLlNldFVzZXJQYXNzd29yZEZvcm1PcHRpb25zLlBhZ2luZ0FjdGlvbk1vZGUgPSBQYWdpbmdBY3Rpb25Nb2RlLlVwZGF0ZTtcclxuICAgIHRoaXMuU2V0VXNlclBhc3N3b3JkRm9ybU9wdGlvbnMuT25TdWNjZXNzSGFuZGxlciA9IHRoaXMub25TdWJtaXRTdWNjZXNzO1xyXG5cclxuICAgIHRoaXMuc2V0UGFzc3dvcmRVc2VyTGlzdCA9IFtdO1xyXG4gICAgdGhpcy5zZXRQYXNzd29yZFVzZXJMaXN0LnB1c2goVXNlcik7XHJcbiAgICB0aGlzLk5hbWUgPSBVc2VyLm5hbWVTdHI7XHJcbiAgICB0aGlzLkVtYWlsID0gVXNlci5lbWFpbDtcclxuXHJcbiAgICB0aGlzLlBhc3N3b3JkID0gbmV3IFRleHRCb3hPcHRpb25zKCk7XHJcbiAgICB0aGlzLlBhc3N3b3JkLk5hbWUgPSBcIlBhc3N3b3JkXCI7XHJcbiAgICB0aGlzLlBhc3N3b3JkLkhpZGVMYWJlbCA9IHRydWU7XHJcbiAgICB0aGlzLlBhc3N3b3JkLlR5cGUgPSBJbnB1dFR5cGUuUGFzc3dvcmQ7XHJcbiAgICB0aGlzLlBhc3N3b3JkLklzUmVxdWlyZWQgPSB0cnVlO1xyXG5cclxuICAgIHRoaXMuY3VzdG9tVmFsaWRhdGlvbi5mdW5jdGlvbkJvZHkgPSAoY29udHJvbCkgPT4ge1xyXG4gICAgICBsZXQgUGFzc3dvcmQgPSB0aGlzLlNldFVzZXJQYXNzd29yZEZvcm0uY29udHJvbHNbXCJQYXNzd29yZFwiXS52YWx1ZTtcclxuICAgICAgaWYgKGNvbnRyb2wudmFsdWUgIT0gUGFzc3dvcmQpXHJcbiAgICAgICAgcmV0dXJuIHsgJ2N1c3RvbWVyRXJyb3InOiB0cnVlIH07XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfTtcclxuICAgIHRoaXMuY3VzdG9tVmFsaWRhdGlvbi5tYXNzYWdlID0gdGhpcy51dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiUGFzc3dvcmROb3RNYXRjaFwiKTtcclxuXHJcbiAgICB0aGlzLlBhc3N3b3JkQ29uZmlybWF0aW9uID0gbmV3IFRleHRCb3hPcHRpb25zKCk7XHJcbiAgICB0aGlzLlBhc3N3b3JkQ29uZmlybWF0aW9uLk5hbWUgPSBcIlBhc3N3b3JkQ29uZmlybWF0aW9uXCI7XHJcbiAgICB0aGlzLlBhc3N3b3JkQ29uZmlybWF0aW9uLkhpZGVMYWJlbCA9IHRydWU7XHJcbiAgICB0aGlzLlBhc3N3b3JkQ29uZmlybWF0aW9uLlR5cGUgPSBJbnB1dFR5cGUuUGFzc3dvcmQ7XHJcbiAgICB0aGlzLlBhc3N3b3JkQ29uZmlybWF0aW9uLklzUmVxdWlyZWQgPSB0cnVlO1xyXG4gICAgdGhpcy5QYXNzd29yZENvbmZpcm1hdGlvbi5DdXN0b21WYWxpZGF0aW9uID0gW3RoaXMuY3VzdG9tVmFsaWRhdGlvbl07XHJcblxyXG4gICAgdGhpcy5tb2RhbFNlcnZpY2Uub3BlbihzZXRQYXNzd29yZFVzZXJNb2RhbCk7XHJcbiAgICB0aGlzLnV0aWxpdHlTZXJ2aWNlLnN0b3BCbG9ja1VJKCk7XHJcbiAgfVxyXG4gIGdldFNldFBBc3N3b3JkTW9kZWwgPSAoKSA9PiB7XHJcbiAgICBkZWJ1Z2dlcjtcclxuICAgIGxldCBwYXJhbUFycmF5OiBhbnlbXSA9IFtdO1xyXG4gICAgbGV0IFJlc3VsdE1vZGVsID0gdGhpcy5TZXRVc2VyUGFzc3dvcmRGb3JtLnZhbHVlO1xyXG4gICAgbGV0IHVwZGF0ZXNVc2VycyA9IFtdO1xyXG4gICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IHRoaXMuc2V0UGFzc3dvcmRVc2VyTGlzdC5sZW5ndGg7IGluZGV4KyspIHtcclxuICAgICAgdmFyIGVsZW1lbnQgPSB0aGlzLnNldFBhc3N3b3JkVXNlckxpc3RbaW5kZXhdO1xyXG4gICAgICBlbGVtZW50LlBhc3N3b3JkID0gUmVzdWx0TW9kZWwuUGFzc3dvcmQ7XHJcbiAgICAgIGVsZW1lbnQuUGFzc3dvcmRDb25maXJtYXRpb24gPSBSZXN1bHRNb2RlbC5QYXNzd29yZENvbmZpcm1hdGlvbjtcclxuICAgICAgdXBkYXRlc1VzZXJzLnB1c2goZWxlbWVudCk7XHJcbiAgICB9XHJcbiAgICBwYXJhbUFycmF5LnB1c2godXBkYXRlc1VzZXJzKTtcclxuICAgIHJldHVybiBwYXJhbUFycmF5O1xyXG4gIH1cclxuXHJcbiAgZ2V0U2V0UGFzc3dvcmRGdW5jdGlvbiA9IChwYXNzd29yZExpc3RNb2RlbCk6IE9ic2VydmFibGU8YW55PiA9PiB7XHJcbiAgICByZXR1cm4gdGhpcy51c2VyU2VydmljZS5TZXRVc2Vyc1Bhc3N3b3JkKHBhc3N3b3JkTGlzdE1vZGVsKTtcclxuICB9XHJcblxyXG4gIG9uU3VibWl0U3VjY2VzcyA9IChyZXN1bHQpID0+IHtcclxuICAgIHRoaXMucmVzZXRVc2Vyc0NvdW50KCk7XHJcbiAgICB0aGlzLmRpc2FibGVCdXR0b25zKCk7XHJcbiAgfVxyXG5cclxuXHJcblxyXG5cclxuXHJcbiAgLy9Vc2VycyBMaXN0IEZ1bmN0aW9uc1xyXG5cclxuICAvL1Nob3cgYWN0aXZhdGUsZGVhY3RpdmF0ZSxyZXNldFBhc3N3b3JkLHNlbmRhY3RpdmF0aW9uZW1haWwgbW9kYWxzXHJcbiAgc2hvd0NvbmZpcm1hdGlvbk1vZGFsKHR5cGU6IG51bWJlciwgQ29uZmlybWF0aW9uTW9kYWwpIHtcclxuICAgIHRoaXMudXRpbGl0eVNlcnZpY2Uuc3RhcnRCbG9ja1VJKCk7XHJcbiAgICBzd2l0Y2ggKHR5cGUpIHtcclxuICAgICAgY2FzZSAxOlxyXG4gICAgICAgIHRoaXMuQ29uZmlybWF0aW9uTWVzc2FnZSA9IHRoaXMudXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkFjdGl2YXRlQ29uZmlybWF0aW9uXCIpO1xyXG4gICAgICAgIHRoaXMuQ29uZmlybWF0aW9uTW9kYWxUeXBlID0gMVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIDI6XHJcbiAgICAgICAgdGhpcy5Db25maXJtYXRpb25NZXNzYWdlID0gdGhpcy51dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiRGVhY3RpdmF0ZUNvbmZpcm1hdGlvblwiKTtcclxuICAgICAgICB0aGlzLkNvbmZpcm1hdGlvbk1vZGFsVHlwZSA9IDJcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAzOlxyXG4gICAgICAgIHRoaXMuQ29uZmlybWF0aW9uTWVzc2FnZSA9IHRoaXMudXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIlJlc2V0UGFzc3dvcmRDb25maXJtYXRpb25cIik7XHJcbiAgICAgICAgdGhpcy5Db25maXJtYXRpb25Nb2RhbFR5cGUgPSAzXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgNDpcclxuICAgICAgICB0aGlzLkNvbmZpcm1hdGlvbk1lc3NhZ2UgPSB0aGlzLnV0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJTZW5kQWN0aXZhdGlvbk1haWxDb25maXJtYXRpb25cIik7XHJcbiAgICAgICAgdGhpcy5Db25maXJtYXRpb25Nb2RhbFR5cGUgPSA0XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gICAgdGhpcy5tb2RhbFNlcnZpY2Uub3BlbihDb25maXJtYXRpb25Nb2RhbCk7XHJcbiAgICB0aGlzLnV0aWxpdHlTZXJ2aWNlLnN0b3BCbG9ja1VJKCk7XHJcblxyXG4gIH1cclxuICAvL0FjdGl2YXRlIHVzZXJzIGxpc3RcclxuICBhY3RpdmF0ZVVzZXJMaXN0KCkge1xyXG4gICAgdGhpcy51c2VyU2VydmljZS5BY3RpdmF0ZVVzZXJzKHRoaXMuU2VsZWN0ZWRVc2VyTGlzdCkuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcclxuICAgICAgdGhpcy5tb2RhbFNlcnZpY2UuZGlzbWlzc0FsbCgpO1xyXG4gICAgICB0aGlzLlNlbGVjdGVkVXNlckxpc3QgPSBbXTtcclxuICAgICAgbGV0IGVsZW1lbnQgPSB0aGlzLnBhZ2luZ0VsZW1lbnQgYXMgYW55O1xyXG4gICAgICBlbGVtZW50LlVwZGF0ZVBhZ2luZygpO1xyXG4gICAgICB0aGlzLnJlc2V0VXNlcnNDb3VudCgpO1xyXG4gICAgICB0aGlzLmRpc2FibGVCdXR0b25zKCk7XHJcbiAgICB9LCAoZXJyb3IpID0+IHtcclxuXHJcbiAgICB9KTtcclxuICB9XHJcbiAgICAvL0RlYWN0aXZhdGUgdXNlcnMgbGlzdFxyXG4gIGRlYWN0aXZhdGVVc2VyTGlzdCgpIHtcclxuICAgIHRoaXMudXNlclNlcnZpY2UuRGVhY3RpdmF0ZVVzZXJzKHRoaXMuU2VsZWN0ZWRVc2VyTGlzdCkuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcclxuICAgICAgdGhpcy5tb2RhbFNlcnZpY2UuZGlzbWlzc0FsbCgpO1xyXG4gICAgICB0aGlzLlNlbGVjdGVkVXNlckxpc3QgPSBbXTtcclxuICAgICAgbGV0IGVsZW1lbnQgPSB0aGlzLnBhZ2luZ0VsZW1lbnQgYXMgYW55O1xyXG4gICAgICBlbGVtZW50LlVwZGF0ZVBhZ2luZygpO1xyXG4gICAgICB0aGlzLnJlc2V0VXNlcnNDb3VudCgpO1xyXG4gICAgICB0aGlzLmRpc2FibGVCdXR0b25zKCk7XHJcbiAgICB9LCAoZXJyb3IpID0+IHtcclxuXHJcbiAgICB9KTtcclxuICB9XHJcbiAgLy9SZXNldCBwYXNzd29yZHMgdXNlcnMgbGlzdFxyXG4gIHJlc2V0VXNlclBhc3N3b3JkTGlzdCgpIHtcclxuICAgIHRoaXMudXNlclNlcnZpY2UuUmVzZXRVc2Vyc1Bhc3N3b3JkKHRoaXMuU2VsZWN0ZWRVc2VyTGlzdCkuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcclxuICAgICAgdGhpcy5tb2RhbFNlcnZpY2UuZGlzbWlzc0FsbCgpO1xyXG4gICAgICB0aGlzLlNlbGVjdGVkVXNlckxpc3QgPSBbXTtcclxuICAgICAgbGV0IGVsZW1lbnQgPSB0aGlzLnBhZ2luZ0VsZW1lbnQgYXMgYW55O1xyXG4gICAgICBlbGVtZW50LlVwZGF0ZVBhZ2luZygpO1xyXG4gICAgICB0aGlzLnJlc2V0VXNlcnNDb3VudCgpO1xyXG4gICAgICB0aGlzLmRpc2FibGVCdXR0b25zKCk7XHJcbiAgICB9LCAoZXJyb3IpID0+IHtcclxuXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5yZXF1ZXN0SGFuZGxlclNlcnZpY2UuZGVzdHJveUhhbmRsZXIoKTtcclxuICB9XHJcblxyXG5cclxufVxyXG4iLCI8YmxvY2stdWk+PC9ibG9jay11aT5cclxuPGRpdiAqbmdJZj1cIlNob3dQYWdlQ29udGVudFwiIGNsYXNzPVwiY29udGFpbmVyLWZsdWlkXCI+XHJcbiAgPCEtLSBiZWdpbjo6SGVhZGVyIC0tPlxyXG4gIDxkaXYgY2xhc3M9XCJjYXJkIGNhcmQtY3VzdG9tLWhcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJjYXJkLWhlYWRlciBib3JkZXItMCBwdC01XCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLXRpdGxlIGFsaWduLWl0ZW1zLXN0YXJ0IGZsZXgtY29sdW1uXCIgKm5nSWY9XCJJc0ZpbHRlckxvYWRlZFwiPlxyXG4gICAgICAgIDxmb3JtIFtmb3JtR3JvdXBdPVwiVXNlcnNGb3JtXCI+XHJcbiAgICAgICAgICA8QkJTRi1UZXh0Qm94IChPbkNoYW5nZSk9XCJzZWFyY2hDbGllbnRTaWRlKCRldmVudClcIiBbb3B0aW9uc109XCJzZWFyY2hUZXh0Qm94XCIgW2dyb3VwXT1cIlVzZXJzRm9ybVwiPjwvQkJTRi1UZXh0Qm94PlxyXG4gICAgICAgIDwvZm9ybT5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLXRvb2xiYXJcIj5cclxuICAgICAgICA8IS0tIGJlZ2luOjpNZW51IC0tPlxyXG4gICAgICAgIDxkaXYgKm5nSWY9XCJzaG93R2VuZXJhbEJ0bnNcIiBuZ2JEcm9wZG93biBjbGFzcz1cImQtaW5saW5lLWJsb2NrXCIgW25nU3R5bGVdPVwieydkaXNwbGF5JzogU2hvd1BhZ2VDb250ZW50PT10cnVlPydibG9jayc6J25vbmUnfVwiPlxyXG4gICAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwibG9hZExpc3RzKClcIiBuZ2JEcm9wZG93blRvZ2dsZSBocmVmPVwiamF2YXNjcmlwdDo7XCIgdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4tbGlnaHQtcHJpbWFyeSBtZS0zXCIgaWQ9XCJGaWx0ZXJzRHJvcGRvd25cIiB0aXRsZT1cIkZpbHRlclwiPlxyXG4gICAgICAgICAgICA8aSBjbGFzcz1cImZhcyBmYS1maWx0ZXIgbWUtMVwiPjwvaT5cclxuICAgICAgICAgICAge3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiRmlsdGVyXCIpfX1cclxuICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgPGRpdiAqbmdJZj1cIklzRmlsdGVyTG9hZGVkXCIgbmdiRHJvcGRvd25NZW51IGFyaWEtbGFiZWxsZWRieT1cIkZpbHRlcnNEcm9wZG93blwiICBjbGFzcz1cIiBmaWx0ZXItY29udGFpbmVyIG1lbnUgbWVudS1zdWIgbWVudS1zdWItZHJvcGRvd24gbWVudS1jb2x1bW4gbWVudS1yb3VuZGVkIG1lbnUtZ3JheS04MDAgbWVudS1zdGF0ZS1iZy1saWdodC1wcmltYXJ5ICB3LTI1MHB4IHctbWQtNTAwcHggZnctYm9sZCBweS0zIGRyb3Bkb3duLW1lbnUgZHJvcGRvd24tbWVudS1yaWdodFwiPlxyXG4gICAgICAgICAgICA8Zm9ybSBbZm9ybUdyb3VwXT1cIlVzZXJzRm9ybVwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJweC03IHB5LTVcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1sZy02XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTEwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8QkJTRi1Ecm9wZG93bkxpc3QgI3Blcm1pc3Npb25TZXREREwgW29wdGlvbnNdPVwicGVybWlzc2lvblNldHNPcHRpb25zXCIgW2dyb3VwXT1cIlVzZXJzRm9ybVwiPjwvQkJTRi1Ecm9wZG93bkxpc3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLWxnLTZcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItMTBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxCQlNGLURyb3Bkb3duTGlzdCAjYWNjb3VudFN0YXR1c0RETCBbb3B0aW9uc109XCJhY2NvdW50U3RhdHVzT3B0aW9uc1wiIFtncm91cF09XCJVc2Vyc0Zvcm1cIj48L0JCU0YtRHJvcGRvd25MaXN0PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1sZy02XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTEwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8QkJTRi1Ecm9wZG93bkxpc3QgI2xvY2tlZFN0YXR1c0RETCBbb3B0aW9uc109XCJsb2NrZWRTdGF0dXNPcHRpb25zXCIgW2dyb3VwXT1cIlVzZXJzRm9ybVwiPjwvQkJTRi1Ecm9wZG93bkxpc3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLWxnLTZcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItMTBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxCQlNGLURyb3Bkb3duTGlzdCAjZGVwYXJ0bWVudHNEREwgW29wdGlvbnNdPVwiZGVwYXJ0bWVudHNPcHRpb25zXCIgW2dyb3VwXT1cIlVzZXJzRm9ybVwiPjwvQkJTRi1Ecm9wZG93bkxpc3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1lbmRcIj5cclxuICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tbGlnaHQgYnRuLWFjdGl2ZS1saWdodC1wcmltYXJ5IHB2LXJlc2V0IGJ0bi1zbVwiIGlkPVwiYXBwbHlGaWx0ZXJzQnRuXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwicmVzZXRGaWx0ZXJzKClcIj5cclxuICAgICAgICAgICAgICAgICAgICB7e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJSZXNldFwiKX19XHJcbiAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZm9ybT5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxidXR0b24gKm5nSWY9XCJzaG93R2VuZXJhbEJ0bnNcIiBocmVmPVwiamF2YXNjcmlwdDo7XCIgdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJleHBvcnRFeGNlbCgpXCIgY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1saWdodC1wcmltYXJ5IG1lLTMgYm5zaWdodHMtYnRuLWV4cG9ydFwiXHJcbiAgICAgICAgICAgICAgICB0aXRsZT1cIkV4cG9ydFwiPlxyXG4gICAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtZG93bmxvYWQgbWUtMVwiPjwvaT5cclxuICAgICAgICAgIHt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkV4cG9ydFwiKX19XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPGJ1dHRvbiAqbmdJZj1cInNob3dBY3RpdmF0ZUJ0blwiIHR5cGU9XCJidXR0b25cIiBpZD1cImJ0bkFjdGl2YXRlXCIgY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1saWdodC1wcmltYXJ5IG1lLTNcIiBocmVmPVwiamF2YXNjcmlwdDo7XCIgKGNsaWNrKT1cInNob3dDb25maXJtYXRpb25Nb2RhbCgxLCBDb25maXJtYXRpb25Nb2RhbClcIj5cclxuICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtaGlzdG9yeVwiPjwvaT4ge3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiQWN0aXZhdGVcIil9fVxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDxidXR0b24gKm5nSWY9XCJzaG93RGVhY3RpdmF0ZUJ0blwiIHR5cGU9XCJidXR0b25cIiBpZD1cImJ0bkRlYWN0aXZhdGVcIiBjbGFzcz1cImJ0biBidG4tc20gYnRuLWxpZ2h0LXByaW1hcnkgbWUtM1wiIGhyZWY9XCJqYXZhc2NyaXB0OjtcIiAoY2xpY2spPVwic2hvd0NvbmZpcm1hdGlvbk1vZGFsKDIsIENvbmZpcm1hdGlvbk1vZGFsKVwiPlxyXG4gICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1wb3dlci1vZmZcIj48L2k+e3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiRGVhY3RpdmF0ZVwiKX19XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPGJ1dHRvbiAqbmdJZj1cInNob3dSZXNldFBhc3NCdG5cIiB0eXBlPVwiYnV0dG9uXCIgaWQ9XCJidG5SZXNldFBhc3NcIiBjbGFzcz1cImJ0biBidG4tc20gYnRuLWxpZ2h0LXByaW1hcnkgbWUtM1wiIGhyZWY9XCJqYXZhc2NyaXB0OjtcIiAoY2xpY2spPVwic2hvd0NvbmZpcm1hdGlvbk1vZGFsKDMsIENvbmZpcm1hdGlvbk1vZGFsKVwiPlxyXG4gICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1jb2dcIj48L2k+e3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiUmVzZXRQYXNzd29yZFwiKX19XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPGJ1dHRvbiAqbmdJZj1cInNob3dTZW5kRW1haWxCdG5cIiB0eXBlPVwiYnV0dG9uXCIgaWQ9XCJidG5SZXNlbmRBY3RpdmF0aW9uXCIgY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1saWdodC1wcmltYXJ5IG1lLTNcIiBocmVmPVwiamF2YXNjcmlwdDo7XCIgKGNsaWNrKT1cInNob3dDb25maXJtYXRpb25Nb2RhbCg0ICwgQ29uZmlybWF0aW9uTW9kYWwpXCI+XHJcbiAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWVudmVsb3BlXCI+PC9pPiB7e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJTZW5kQWN0aXZhdGlvbkVtYWlsXCIpfX1cclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICA8YnV0dG9uICpuZ0lmPVwic2hvd0dlbmVyYWxCdG5zXCIgdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4tcHJpbWFyeVwiIHRpdGxlPVwiQWRkXCIgKGNsaWNrKT1cInNob3dBZGRVc2VyTW9kYWwoYWRkVXNlck1vZGFsKVwiPlxyXG4gICAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtcGx1cyBtZS0xXCI+PC9pPlxyXG4gICAgICAgICAge3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiQWRkXCIpfX1cclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICA8IS0tIGVuZDo6TWVudSAtLT5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDwhLS0gZW5kOjpIZWFkZXIgLS0+XHJcbiAgICA8IS0tIGJlZ2luOjpCb2R5IC0tPlxyXG4gICAgPGRpdiBjbGFzcz1cImNhcmQtYm9keSBweS0zXCI+XHJcbiAgICAgIDwhLS0gYmVnaW46OlRhYmxlIGNvbnRhaW5lciAtLT5cclxuICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLXJlc3BvbnNpdmVcIj5cclxuICAgICAgICA8IS0tIGJlZ2luOjpUYWJsZSAtLT5cclxuICAgICAgICA8dGFibGUgY2xhc3M9XCJ0YWJsZSBhbGlnbi1taWRkbGUgdGFibGUtcm93LWRhc2hlZCBmcy02IGd5LTUgZGF0YVRhYmxlIG5vLWZvb3RlclwiPlxyXG4gICAgICAgICAgPHRoZWFkPlxyXG4gICAgICAgICAgICA8dHIgY2xhc3M9XCJ0ZXh0LXN0YXJ0IHRleHQtZ3JheS00MDAgZnctYm9sZGVyIGZzLTcgdGV4dC11cHBlcmNhc2UgZ3MtMFwiPlxyXG4gICAgICAgICAgICAgIDx0aCBjbGFzcz1cInctNTBweCBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4+XHJcbiAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tY2hlY2sgZm9ybS1jaGVjay1zbSBmb3JtLWNoZWNrLWN1c3RvbSBmb3JtLWNoZWNrLXNvbGlkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG1hdC1jaGVja2JveCAoY2hhbmdlKT1cInNlbGVjdEFsbFVzZXJMaXN0KCRldmVudCxjbGllbnRTaWRlUGFnaW5nUmVzdWx0KVwiIFtjaGVja2VkXT1cImFsbFNlbGVjdGVkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtY2hlY2tib3g+XHJcbiAgICAgICAgICAgICAgICAgICAgPCEtLTxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBjbGFzcz1cImZvcm0tY2hlY2staW5wdXRcIiAoY2hhbmdlKT1cInNlbGVjdEFsbFVzZXJMaXN0KCRldmVudCxVc2VyUGFnaW5nUmVzdWx0KVwiIGlkPVwiY2hrX1NlbGVjdEFsbFwiPi0tPlxyXG4gICAgICAgICAgICAgICAgICAgICZuYnNwOzxzcGFuPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICA8L3RoPlxyXG4gICAgICAgICAgICAgIDx0aCBjbGFzcz1cIm1pbi13LTE1MHB4XCI+e3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiTmFtZVwiKX19PC90aD5cclxuICAgICAgICAgICAgICA8dGggY2xhc3M9XCJtaW4tdy0xNTBweFwiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkVtYWlsXCIpfX08L3RoPlxyXG4gICAgICAgICAgICAgIDx0aCBjbGFzcz1cIm1pbi13LTE1MHB4XCI+e3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiTW9iaWxlXCIpfX08L3RoPlxyXG4gICAgICAgICAgICAgIDx0aCBjbGFzcz1cIm1pbi13LTE1MHB4XCI+e3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiUm9sZXNcIil9fTwvdGg+XHJcbiAgICAgICAgICAgICAgPHRoIGNsYXNzPVwibWluLXctMTUwcHhcIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJTdGF0dXNcIil9fTwvdGg+XHJcbiAgICAgICAgICAgICAgPHRoIGNsYXNzPVwibWluLXctNTBweFwiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkFjdGlvblwiKX19PC90aD5cclxuICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgIDwvdGhlYWQ+XHJcbiAgICAgICAgICA8dGJvZHkgaWQ9XCJsaXN0aW5nQ29udGFpbmVyXCIgY2xhc3M9XCJmdy1ib2xkIHRleHQtZ3JheS02MDAgYm9yZGVyLTBcIj5cclxuICAgICAgICAgICAgPHRyICpuZ0Zvcj1cImxldCB1c2VyIG9mIGNsaWVudFNpZGVQYWdpbmdSZXN1bHRcIj5cclxuICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4+XHJcbiAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tY2hlY2sgZm9ybS1jaGVjay1zbSBmb3JtLWNoZWNrLWN1c3RvbSBmb3JtLWNoZWNrLXNvbGlkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPCEtLTxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBjbGFzcz1cImZvcm0tY2hlY2staW5wdXRcIiAoY2hhbmdlKT1cInVwZGF0ZVVzZXJMaXN0KCRldmVudCx1c2VyKVwiIGlkPVwiVXNlci17e3VzZXIuaWR9fVwiPi0tPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8bWF0LWNoZWNrYm94IChjaGFuZ2UpPVwidXBkYXRlVXNlckxpc3QoJGV2ZW50LHVzZXIpXCIgWyhuZ01vZGVsKV09XCJ1c2VyLnNlbGVjdGVkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtY2hlY2tib3g+XHJcbiAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICA8dGQ+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3ltYm9sIHN5bWJvbC0zNXB4XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGg2IGNsYXNzPVwic3ltYm9sLWxhYmVsIGZvbnQtc2l6ZS1oNSBmb250LXdlaWdodC1ib2xkIGJnLWxpZ2h0LXByaW1hcnkgbWwtMiBtYi0wIG1lLTNcIj5BPC9oNj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LXN0YXJ0IGZsZXgtY29sdW1uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGEgKGNsaWNrKT1cInNob3dFZGl0VXNlck1vZGFsKHVzZXIuaWQsdXNlci5pZEVuY3J5cHRlZCxFZGl0VXNlck1vZGFsKVwiIGhyZWY9XCJqYXZhc2NyaXB0OnZvaWQoMClcIiBjbGFzcz1cInRleHQtZGFyayBmdy1ib2xkZXIgdGV4dC1ob3Zlci1wcmltYXJ5IGZzLTZcIj57e3VzZXIubmFtZVN0cn19PC9hPlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgPHRkPnt7dXNlci51c2VybmFtZX19PC90ZD5cclxuICAgICAgICAgICAgICA8dGQ+e3t1c2VyLm1vYmlsZX19PC90ZD5cclxuICAgICAgICAgICAgICA8dGQ+e3t1c2VyLnBlcm1pc3Npb25zZXR9fTwvdGQ+XHJcbiAgICAgICAgICAgICAgPHRkPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJiYWRnZSBiYWRnZS1saWdodC1zdWNjZXNzXCIgKm5nSWY9XCJ1c2VyLmlzQWN0aXZlPT10cnVlXCI+XHJcbiAgICAgICAgICAgICAgICAgIHt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkFjdGl2YXRlXCIpfX1cclxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYmFkZ2UgYmFkZ2UtbGlnaHQtZGFuZ2VyXCIgKm5nSWY9XCJ1c2VyLmlzQWN0aXZlPT1mYWxzZVwiPlxyXG4gICAgICAgICAgICAgICAgICB7e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJEZWFjdGl2YXRlXCIpfX1cclxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgIDx0ZD5cclxuICAgICAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICAgIDxidXR0b24gbWF0LWJ1dHRvbiBbbWF0TWVudVRyaWdnZXJGb3JdPVwibWVudVwiIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4taWNvbiBidG4tbGlnaHQgYnRuLWFjdGl2ZS1saWdodC1wcmltYXJ5XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1lbGxpcHNpcy1oXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgPG1hdC1tZW51ICNtZW51PVwibWF0TWVudVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwibWVudS1pdGVtIHB4LTNcIiBuZ2JEcm9wZG93bkl0ZW1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzaG93RWRpdFVzZXJNb2RhbCh1c2VyLmlkLHVzZXIuaWRFbmNyeXB0ZWQsRWRpdFVzZXJNb2RhbClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWVudS1saW5rIHB4LTNcIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJFZGl0XCIpfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBuZ2JEcm9wZG93bkl0ZW0gY2xhc3M9XCJtZW51LWl0ZW0gcHgtM1wiICpuZ0lmPVwidXNlci5pc0FjdGl2ZVwiIGlkPVwiYnRuRGVhY3RpdmF0ZVwiIChjbGljayk9XCJzaG93QWN0aXZhdGVVc2VyTW9kYWwodXNlcixmYWxzZSxBY3RpdmF0ZVVzZXJNb2RhbClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWVudS1saW5rIHB4LTNcIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJEZWFjdGl2YXRlXCIpfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBuZ2JEcm9wZG93bkl0ZW0gY2xhc3M9XCJtZW51LWl0ZW0gcHgtM1wiIGlkPVwiYnRuYWN0aXZhdGVcIiAoY2xpY2spPVwic2hvd0FjdGl2YXRlVXNlck1vZGFsKHVzZXIsdHJ1ZSxBY3RpdmF0ZVVzZXJNb2RhbClcIiAqbmdJZj1cIiF1c2VyLmlzQWN0aXZlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1lbnUtbGluayBweC0zXCI+e3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiQWN0aXZhdGVcIil9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIG5nYkRyb3Bkb3duSXRlbSBjbGFzcz1cIm1lbnUtaXRlbSBweC0zXCIgaWQ9XCJidG5SZXNldFBhc3NcIiAoY2xpY2spPVwic2hvd1Jlc2V0UGFzc3dvcmRVc2VyTW9kYWwodXNlciAsIFJlc2V0UGFzc3dvcmRVc2VyTW9kYWwpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1lbnUtbGluayBweC0zXCI+e3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiUmVzZXRQYXNzd29yZFwiKX19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIG5nYkRyb3Bkb3duSXRlbSBjbGFzcz1cIm1lbnUtaXRlbSBweC0zXCIgaWQ9XCJidG5SZXNldFBhc3NcIiAoY2xpY2spPVwic2hvd3NldFBhc3N3b3JkVXNlck1vZGFsKHVzZXIsIHNldFBhc3N3b3JkVXNlck1vZGFsKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtZW51LWxpbmsgcHgtM1wiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIlNldFBhc3N3b3JkXCIpfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gbmdiRHJvcGRvd25JdGVtIGNsYXNzPVwibWVudS1pdGVtIHB4LTNcIiBpZD1cImJ0blJlc2V0UGFzc1wiICpuZ0lmPVwiIXVzZXIuaXNBY3RpdmVcIiAoY2xpY2spPVwic2hvd1NlbmRBY3RpdmF0aW9uRW1haWxNb2RhbCh1c2VyICwgU2VuZEFjdGl2YXRpb25FbWFpbE1vZGFsKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtZW51LWxpbmsgcHgtM1wiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIlNlbmRBY3RpdmF0aW9uRW1haWxcIil9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgPC9tYXQtbWVudT5cclxuXHJcblxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgIDx0ciAqbmdJZj1cImNsaWVudFNpZGVQYWdpbmdSZXN1bHQubGVuZ3RoID09IDBcIj5cclxuICAgICAgICAgICAgICA8dGQgY29sc3Bhbj1cIjZcIj5cclxuICAgICAgICAgICAgICAgIDxsaWItZW1wdHktZGF0YT48L2xpYi1lbXB0eS1kYXRhPlxyXG4gICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICA8L3Rib2R5PlxyXG4gICAgICAgIDwvdGFibGU+XHJcbiAgICAgICAgPCEtLSBlbmQ6OlRhYmxlIC0tPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPCEtLSBlbmQ6OlRhYmxlIGNvbnRhaW5lciAtLT5cclxuXHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJjYXJkLWZvb3RlciBib3JkZXItMFwiPlxyXG4gICAgICAgICAgICA8IS0tIGJlZ2luIHBhZ2luZy0tPlxyXG4gICAgICA8QkJTRi1QYWdpbmcgKEl0ZW1zKT1cInNldFVzZXJzTGlzdFJlc3VsdCgkZXZlbnQpXCIgKm5nSWY9XCJJc0ZpbHRlckxvYWRlZFwiIFtvcHRpb25zXT1cIlVzZXJQYWdpbmdcIlxyXG4gICAgICAgICAgICAgICAgICAgW2dyb3VwXT1cIlVzZXJzRm9ybVwiICNVc2VyUGFnaW5nVmlld0VsZW1lbnQ+XHJcbiAgICAgIDwvQkJTRi1QYWdpbmc+XHJcbiAgICAgIDwhLS0gRW5kIHBhZ2luZy0tPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuXHJcbjwhLS0gYWRkIHVzZXItLT5cclxuPG5nLXRlbXBsYXRlICNhZGRVc2VyTW9kYWwgbGV0LW1vZGFsPlxyXG4gIDxkaXYgY2xhc3M9XCJtb2RhbC1oZWFkZXIgcGItMCBib3JkZXItMCBqdXN0aWZ5LWNvbnRlbnQtZW5kXCI+XHJcbiAgICA8aDUgY2xhc3M9XCJtb2RhbC10aXRsZVwiIGlkPVwiZXhhbXBsZU1vZGFsTGFiZWxcIj48L2g1PlxyXG4gICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgZGF0YS1kaXNtaXNzPVwibW9kYWxcIiBhcmlhLWxhYmVsPVwiQ2xvc2VcIiAoY2xpY2spPVwibW9kYWwuZGlzbWlzcygpXCIgY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1pY29uIGJ0bi1hY3RpdmUtY29sb3ItcHJpbWFyeVwiPlxyXG4gICAgICA8c3BhbiBjbGFzcz1cInN2Zy1pY29uIHN2Zy1pY29uLTFcIj5cclxuICAgICAgICA8c3BhbiBbaW5saW5lU1ZHXT1cIicuL3NyYy9hc3NldHMvaW1hZ2VzL2FycjA2MS5zdmcnXCI+PC9zcGFuPlxyXG4gICAgICA8L3NwYW4+XHJcbiAgICA8L2J1dHRvbj5cclxuICA8L2Rpdj5cclxuICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keSBzY3JvbGwteSBweC0xMCBweC1sZy0xNSBwdC0wIHBiLTE1XCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwibWItMTMgdGV4dC1jZW50ZXJcIj5cclxuICAgICAgPGgxIGNsYXNzPVwibWItM1wiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkFkZFVzZXJcIil9fTwvaDE+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxCQlNGLUZvcm0gW29wdGlvbnNdPVwiQWRkVXNlckZvcm1PcHRpb25zXCI+XHJcbiAgICAgIDxCQlNGLU11bHRpTGluZ3VhbFRleHRCb3ggW29wdGlvbnNdPVwiQWRkTmFtZVwiIFtncm91cF09XCJBZGRVc2VyRm9ybVwiPjwvQkJTRi1NdWx0aUxpbmd1YWxUZXh0Qm94PlxyXG4gICAgICA8QkJTRi1UZXh0Qm94IFtvcHRpb25zXT1cIkFkZFVzZXJuYW1lXCIgW2dyb3VwXT1cIkFkZFVzZXJGb3JtXCI+PC9CQlNGLVRleHRCb3g+XHJcbiAgICAgIDxCQlNGLVRleHRCb3ggW29wdGlvbnNdPVwiQWRkU2FtQWNjb3VudFwiIFtncm91cF09XCJBZGRVc2VyRm9ybVwiPjwvQkJTRi1UZXh0Qm94PlxyXG4gICAgICA8QkJTRi1QaG9uZSBbb3B0aW9uc109XCJBZGRNb2JpbGVOdW1iZXJcIiBbZ3JvdXBdPVwiQWRkVXNlckZvcm1cIj48L0JCU0YtUGhvbmU+XHJcbiAgICAgIDxCQlNGLURyb3Bkb3duTGlzdCBbb3B0aW9uc109XCJBZGRVc2VyRGVwYXJ0bWVudFwiIFtncm91cF09XCJBZGRVc2VyRm9ybVwiPjwvQkJTRi1Ecm9wZG93bkxpc3Q+XHJcbiAgICAgIDxCQlNGLVRvZ2dsZXNsaWRlIFtvcHRpb25zXT1cIkFkZFNlbmRBY3RpdmF0aW9uRW1haWxcIiBbZ3JvdXBdPVwiQWRkVXNlckZvcm1cIj48L0JCU0YtVG9nZ2xlc2xpZGU+XHJcbiAgICAgIDxCQlNGLURyb3Bkb3duTGlzdCBbb3B0aW9uc109XCJBZGRVc2VyUGVybWlzc2lvbnNcIiBbZ3JvdXBdPVwiQWRkVXNlckZvcm1cIj48L0JCU0YtRHJvcGRvd25MaXN0PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwidGV4dC1jZW50ZXIgcHQtN1wiPlxyXG4gICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiICNDbG9zZVVzZXJNb2RhbCBpZD1cIkNsb3NlVXNlck1vZGFsXCIgZGF0YS1kaXNtaXNzPVwibW9kYWxcIiBhcmlhLWxhYmVsPVwiQ2xvc2VcIiBjbGFzcz1cImJ0biBidG4tbGlnaHQgbWUtMyBidG4tc21cIiAoY2xpY2spPVwibW9kYWwuZGlzbWlzcygpXCI+e3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiQ2FuY2VsTGFiZWxcIil9fSA8L2J1dHRvbj5cclxuICAgICAgICA8YnV0dG9uIHR5cGU9XCJzdWJtaXRcIiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBidG4tc21cIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJTYXZlTGFiZWxcIil9fTwvYnV0dG9uPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvQkJTRi1Gb3JtPlxyXG5cclxuICA8L2Rpdj5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjwhLS0gRWRpdCB1c2VyLS0+XHJcbjxuZy10ZW1wbGF0ZSAjRWRpdFVzZXJNb2RhbCBsZXQtbW9kYWw+XHJcbiAgPGRpdiBjbGFzcz1cIm1vZGFsLWhlYWRlciBwYi0wIGJvcmRlci0wIGp1c3RpZnktY29udGVudC1lbmRcIj5cclxuICAgIDxoNSBjbGFzcz1cIm1vZGFsLXRpdGxlXCIgaWQ9XCJleGFtcGxlTW9kYWxMYWJlbFwiPjwvaDU+XHJcbiAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBkYXRhLWRpc21pc3M9XCJtb2RhbFwiIGFyaWEtbGFiZWw9XCJDbG9zZVwiIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4taWNvbiBidG4tYWN0aXZlLWNvbG9yLXByaW1hcnlcIiAoY2xpY2spPVwibW9kYWwuZGlzbWlzcygpXCI+XHJcbiAgICAgIDxzcGFuIGNsYXNzPVwic3ZnLWljb24gc3ZnLWljb24tMVwiPlxyXG4gICAgICAgIDxzcGFuIFtpbmxpbmVTVkddPVwiJy4vc3JjL2Fzc2V0cy9pbWFnZXMvYXJyMDYxLnN2ZydcIj48L3NwYW4+XHJcbiAgICAgIDwvc3Bhbj5cclxuICAgIDwvYnV0dG9uPlxyXG4gIDwvZGl2PlxyXG4gIDxkaXYgY2xhc3M9XCJtb2RhbC1ib2R5IHNjcm9sbC15IHB4LTEwIHB4LWxnLTE1IHB0LTAgcGItMTVcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJtYi0xMyB0ZXh0LWNlbnRlclwiPlxyXG4gICAgICA8aDEgY2xhc3M9XCJtYi0zXCI+e3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiRWRpdFVzZXJcIil9fTwvaDE+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxCQlNGLUZvcm0gW29wdGlvbnNdPVwiRWRpdFVzZXJGb3JtT3B0aW9uc1wiPlxyXG4gICAgICA8QkJTRi1NdWx0aUxpbmd1YWxUZXh0Qm94IFtvcHRpb25zXT1cIkVkaXROYW1lXCIgW2dyb3VwXT1cIkVkaXRVc2VyRm9ybVwiPjwvQkJTRi1NdWx0aUxpbmd1YWxUZXh0Qm94PlxyXG4gICAgICA8QkJTRi1QaG9uZSBbb3B0aW9uc109XCJFZGl0TW9iaWxlTnVtYmVyXCIgW2dyb3VwXT1cIkVkaXRVc2VyRm9ybVwiPjwvQkJTRi1QaG9uZT5cclxuICAgICAgPEJCU0YtVGV4dEJveCBbb3B0aW9uc109XCJFZGl0VXNlcm5hbWVcIiBbZ3JvdXBdPVwiRWRpdFVzZXJGb3JtXCI+PC9CQlNGLVRleHRCb3g+XHJcbiAgICAgIDxCQlNGLVRleHRCb3ggW29wdGlvbnNdPVwiRWRpdEVtYWlsXCIgW2dyb3VwXT1cIkVkaXRVc2VyRm9ybVwiPjwvQkJTRi1UZXh0Qm94PlxyXG4gICAgICA8QkJTRi1UZXh0Qm94IFtvcHRpb25zXT1cIkVkaXRTYW1BY2NvdW50XCIgW2dyb3VwXT1cIkVkaXRVc2VyRm9ybVwiPjwvQkJTRi1UZXh0Qm94PlxyXG4gICAgICA8QkJTRi1Ecm9wZG93bkxpc3QgW29wdGlvbnNdPVwiRWRpdFVzZXJEZXBhcnRtZW50XCIgW2dyb3VwXT1cIkVkaXRVc2VyRm9ybVwiPjwvQkJTRi1Ecm9wZG93bkxpc3Q+XHJcbiAgICAgIDxCQlNGLURyb3Bkb3duTGlzdCBbb3B0aW9uc109XCJFZGl0VXNlclBlcm1pc3Npb25zXCIgW2dyb3VwXT1cIkVkaXRVc2VyRm9ybVwiPjwvQkJTRi1Ecm9wZG93bkxpc3Q+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWNlbnRlciBwdC03XCI+XHJcbiAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgZGF0YS1kaXNtaXNzPVwibW9kYWxcIiAjQ2xvc2VFZGl0VXNlck1vZGFsIGlkPVwiQ2xvc2VFZGl0VXNlck1vZGFsXCIgYXJpYS1sYWJlbD1cIkNsb3NlXCIgY2xhc3M9XCJidG4gYnRuLWxpZ2h0IG1lLTMgYnRuLXNtXCIgKGNsaWNrKT1cIm1vZGFsLmRpc21pc3MoKVwiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkNhbmNlbExhYmVsXCIpfX08L2J1dHRvbj5cclxuICAgICAgICA8YnV0dG9uIHR5cGU9XCJzdWJtaXRcIiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBidG4tc21cIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJTYXZlTGFiZWxcIil9fTwvYnV0dG9uPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvQkJTRi1Gb3JtPlxyXG5cclxuICA8L2Rpdj5cclxuPC9uZy10ZW1wbGF0ZT5cclxuPCEtLSBEZWFjdGl2YXRlL0FjdGl2YXRlIFVzZXIgTW9kYWwgLS0+XHJcbjxuZy10ZW1wbGF0ZSAjQWN0aXZhdGVVc2VyTW9kYWwgbGV0LW1vZGFsPlxyXG4gIDxkaXYgY2xhc3M9XCJtb2RhbC1oZWFkZXIgcGItMCBib3JkZXItMCBqdXN0aWZ5LWNvbnRlbnQtZW5kXCI+XHJcbiAgICA8aDUgY2xhc3M9XCJtb2RhbC10aXRsZVwiIGlkPVwiZXhhbXBsZU1vZGFsTGFiZWxcIj48L2g1PlxyXG4gICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgZGF0YS1kaXNtaXNzPVwibW9kYWxcIiBhcmlhLWxhYmVsPVwiQ2xvc2VcIiBjbGFzcz1cImJ0biBidG4tc20gYnRuLWljb24gYnRuLWFjdGl2ZS1jb2xvci1wcmltYXJ5XCIgKGNsaWNrKT1cIm1vZGFsLmRpc21pc3MoKVwiPlxyXG4gICAgICA8c3BhbiBjbGFzcz1cInN2Zy1pY29uIHN2Zy1pY29uLTFcIj5cclxuICAgICAgICA8c3BhbiBbaW5saW5lU1ZHXT1cIicuL3NyYy9hc3NldHMvaW1hZ2VzL2FycjA2MS5zdmcnXCI+PC9zcGFuPlxyXG4gICAgICA8L3NwYW4+XHJcbiAgICA8L2J1dHRvbj5cclxuICA8L2Rpdj5cclxuICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keSBzY3JvbGwteSBweC0xMCBweC1sZy0xNSBwdC0wIHBiLTE1XCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwibWItMTMgdGV4dC1jZW50ZXJcIj5cclxuICAgICAgPGgxIGNsYXNzPVwibWItM1wiICpuZ0lmPVwiIVNob3dBY3RpdmF0ZU1vZGVsRGF0YVwiIGlkPVwiZXhhbXBsZU1vZGFsTGFiZWxcIj5cclxuICAgICAgICB7e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJEZWFjdGl2YXRlXCIpfX1cclxuICAgICAgPC9oMT5cclxuICAgICAgPGgxIGNsYXNzPVwibWItM1wiICpuZ0lmPVwiU2hvd0FjdGl2YXRlTW9kZWxEYXRhXCIgaWQ9XCJleGFtcGxlTW9kYWxMYWJlbFwiPlxyXG4gICAgICAgIHt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkFjdGl2YXRlXCIpfX1cclxuICAgICAgPC9oMT5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cIm5vdGljZSBkLWZsZXggYmctbGlnaHQtd2FybmluZyByb3VuZGVkIGJvcmRlci13YXJuaW5nIGJvcmRlciBib3JkZXItZGFzaGVkIG1iLTEwIHAtNlwiPlxyXG4gICAgICA8IS0tYmVnaW46Okljb24tLT5cclxuICAgICAgPCEtLWJlZ2luOjpTdmcgSWNvbiB8IHBhdGg6IGljb25zL2R1b3R1bmUvZ2VuZXJhbC9nZW4wNDQuc3ZnLS0+XHJcbiAgICAgIDxzcGFuIGNsYXNzPVwic3ZnLWljb24gc3ZnLWljb24tMnR4IHN2Zy1pY29uLXdhcm5pbmcgbWUtNFwiPlxyXG4gICAgICAgIDxzcGFuIFtpbmxpbmVTVkddPVwiJy4vc3JjL2Fzc2V0cy9pbWFnZXMvZ2VuMDQ0LnN2ZydcIj48L3NwYW4+XHJcbiAgICAgIDwvc3Bhbj5cclxuICAgICAgPCEtLWVuZDo6U3ZnIEljb24tLT5cclxuICAgICAgPCEtLWVuZDo6SWNvbi0tPlxyXG4gICAgICA8IS0tYmVnaW46OldyYXBwZXItLT5cclxuICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBmbGV4LXN0YWNrIGZsZXgtZ3Jvdy0xXCI+XHJcbiAgICAgICAgPCEtLWJlZ2luOjpDb250ZW50LS0+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImZ3LWJvbGRcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmcy02IHRleHQtZ3JheS03MDBcIiAqbmdJZj1cIiFTaG93QWN0aXZhdGVNb2RlbERhdGFcIj5cclxuICAgICAgICAgICAge3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiRGVhY3RpdmF0ZUNvbmZpcm1hdGlvblwiKX19XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmcy02IHRleHQtZ3JheS03MDBcIiAqbmdJZj1cIlNob3dBY3RpdmF0ZU1vZGVsRGF0YVwiPlxyXG4gICAgICAgICAgICB7e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJBY3RpdmF0ZUNvbmZpcm1hdGlvblwiKX19XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8IS0tZW5kOjpDb250ZW50LS0+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8IS0tZW5kOjpXcmFwcGVyLS0+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgaWQ9XCJcIiBjbGFzcz1cIlwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwidGFibGUtcmVzcG9uc2l2ZVwiPlxyXG4gICAgICAgIDx0YWJsZSBpZD1cInRhYmxlQ29uZmlybWF0aW9uXCIgY2xhc3M9XCJ0YWJsZSBhbGlnbi1taWRkbGUgdGFibGUtcm93LWRhc2hlZCBmcy02IGd5LTUgZGF0YVRhYmxlIG5vLWZvb3RlclwiPlxyXG4gICAgICAgICAgPHRoZWFkPlxyXG4gICAgICAgICAgICA8dHI+XHJcbiAgICAgICAgICAgICAgPHRoIGNsYXNzPVwibWluLXctMTUwXCI+e3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiTmFtZVwiKX19PC90aD5cclxuICAgICAgICAgICAgICA8dGggY2xhc3M9XCJtaW4tdy0xNTBcIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJFbWFpbFwiKX19PC90aD5cclxuICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgIDwvdGhlYWQ+XHJcbiAgICAgICAgICA8dGJvZHkgY2xhc3M9XCJmdy1ib2xkIHRleHQtZ3JheS02MDAgYm9yZGVyLTBcIj5cclxuICAgICAgICAgICAgPHRyIGNsYXNzPVwidHJJdGVtXCI+XHJcbiAgICAgICAgICAgICAgPHRkPnt7TmFtZX19PC90ZD5cclxuICAgICAgICAgICAgICA8dGQ+e3tFbWFpbH19PC90ZD5cclxuICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgIDwvdGJvZHk+XHJcbiAgICAgICAgPC90YWJsZT5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWNlbnRlciBwdC03XCI+XHJcbiAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiICNDbG9zZUFjdGl2YXRlVXNlck1vZGFsIGlkPVwiQ2xvc2VBY3RpdmF0ZVVzZXJNb2RhbFwiIGRhdGEtZGlzbWlzcz1cIm1vZGFsXCIgYXJpYS1sYWJlbD1cIkNsb3NlXCIgY2xhc3M9XCJidG4gYnRuLWxpZ2h0IG1lLTMgYnRuLXNtXCIgKGNsaWNrKT1cIm1vZGFsLmRpc21pc3MoKVwiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkNhbmNlbExhYmVsXCIpfX0gPC9idXR0b24+XHJcbiAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiICpuZ0lmPVwiIVNob3dBY3RpdmF0ZU1vZGVsRGF0YVwiIChjbGljayk9XCJkZWFjdGl2YXRlKClcIlxyXG4gICAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IGJ0bi1zbVwiPlxyXG4gICAgICAgIHt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIlNhdmVMYWJlbFwiKX19XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiAqbmdJZj1cIlNob3dBY3RpdmF0ZU1vZGVsRGF0YVwiIChjbGljayk9XCJhY3RpdmF0ZSgpXCJcclxuICAgICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBidG4tc21cIj5cclxuICAgICAgICB7e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJTYXZlTGFiZWxcIil9fVxyXG4gICAgICA8L2J1dHRvbj5cclxuXHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuPC9uZy10ZW1wbGF0ZT5cclxuPCEtLSBSZXNldFBhc3N3b3JkIFVzZXIgTW9kYWwgLS0+XHJcbjxuZy10ZW1wbGF0ZSAjUmVzZXRQYXNzd29yZFVzZXJNb2RhbCBsZXQtbW9kYWw+XHJcbiAgPGRpdiBjbGFzcz1cIm1vZGFsLWhlYWRlciBwYi0wIGJvcmRlci0wIGp1c3RpZnktY29udGVudC1lbmRcIj5cclxuICAgIDxoNSBjbGFzcz1cIm1vZGFsLXRpdGxlXCIgaWQ9XCJleGFtcGxlTW9kYWxMYWJlbFwiPjwvaDU+XHJcbiAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBkYXRhLWRpc21pc3M9XCJtb2RhbFwiIGFyaWEtbGFiZWw9XCJDbG9zZVwiIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4taWNvbiBidG4tYWN0aXZlLWNvbG9yLXByaW1hcnlcIiAoY2xpY2spPVwibW9kYWwuZGlzbWlzcygpXCI+XHJcbiAgICAgIDxzcGFuIGNsYXNzPVwic3ZnLWljb24gc3ZnLWljb24tMVwiPlxyXG4gICAgICAgIDxzcGFuIFtpbmxpbmVTVkddPVwiJy4vc3JjL2Fzc2V0cy9pbWFnZXMvYXJyMDYxLnN2ZydcIj48L3NwYW4+XHJcbiAgICAgIDwvc3Bhbj5cclxuICAgIDwvYnV0dG9uPlxyXG4gIDwvZGl2PlxyXG4gIDxkaXYgY2xhc3M9XCJtb2RhbC1ib2R5IHNjcm9sbC15IHB4LTEwIHB4LWxnLTE1IHB0LTAgcGItMTVcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJtYi0xMyB0ZXh0LWNlbnRlclwiPlxyXG4gICAgICA8aDEgY2xhc3M9XCJtYi0zXCI+e3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiUmVzZXRQYXNzd29yZFwiKX19PC9oMT5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cIm5vdGljZSBkLWZsZXggYmctbGlnaHQtd2FybmluZyByb3VuZGVkIGJvcmRlci13YXJuaW5nIGJvcmRlciBib3JkZXItZGFzaGVkIG1iLTEwIHAtNlwiPlxyXG4gICAgICA8IS0tYmVnaW46Okljb24tLT5cclxuICAgICAgPCEtLWJlZ2luOjpTdmcgSWNvbiB8IHBhdGg6IGljb25zL2R1b3R1bmUvZ2VuZXJhbC9nZW4wNDQuc3ZnLS0+XHJcbiAgICAgIDxzcGFuIGNsYXNzPVwic3ZnLWljb24gc3ZnLWljb24tMnR4IHN2Zy1pY29uLXdhcm5pbmcgbWUtNFwiPlxyXG4gICAgICAgIDxzcGFuIFtpbmxpbmVTVkddPVwiJy4vc3JjL2Fzc2V0cy9pbWFnZXMvZ2VuMDQ0LnN2ZydcIj48L3NwYW4+XHJcbiAgICAgIDwvc3Bhbj5cclxuICAgICAgPCEtLWVuZDo6U3ZnIEljb24tLT5cclxuICAgICAgPCEtLWVuZDo6SWNvbi0tPlxyXG4gICAgICA8IS0tYmVnaW46OldyYXBwZXItLT5cclxuICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBmbGV4LXN0YWNrIGZsZXgtZ3Jvdy0xXCI+XHJcbiAgICAgICAgPCEtLWJlZ2luOjpDb250ZW50LS0+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImZ3LWJvbGRcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmcy02IHRleHQtZ3JheS03MDBcIj5cclxuICAgICAgICAgICAge3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiUmVzZXRQYXNzd29yZENvbmZpcm1hdGlvblwiKX19XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8IS0tZW5kOjpDb250ZW50LS0+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8IS0tZW5kOjpXcmFwcGVyLS0+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgaWQ9XCJcIiBjbGFzcz1cIlwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwidGFibGUtcmVzcG9uc2l2ZVwiPlxyXG4gICAgICAgIDwhLS0gYmVnaW46OlRhYmxlIC0tPlxyXG4gICAgICAgIDx0YWJsZSBjbGFzcz1cInRhYmxlIGFsaWduLW1pZGRsZSB0YWJsZS1yb3ctZGFzaGVkIGZzLTYgZ3ktNSBkYXRhVGFibGUgbm8tZm9vdGVyXCI+XHJcbiAgICAgICAgICA8dGhlYWQ+XHJcbiAgICAgICAgICAgIDx0ciBjbGFzcz1cInRleHQtc3RhcnQgdGV4dC1ncmF5LTQwMCBmdy1ib2xkZXIgZnMtNyB0ZXh0LXVwcGVyY2FzZSBncy0wXCI+XHJcbiAgICAgICAgICAgICAgPHRoIGNsYXNzPVwibWluLXctMjAwXCI+e3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiTmFtZVwiKX19PC90aD5cclxuICAgICAgICAgICAgICA8dGggY2xhc3M9XCJtaW4tdy0yMDBcIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJFbWFpbFwiKX19PC90aD5cclxuICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgIDwvdGhlYWQ+XHJcbiAgICAgICAgICA8dGJvZHkgY2xhc3M9XCJmdy1ib2xkIHRleHQtZ3JheS02MDAgYm9yZGVyLTBcIj5cclxuICAgICAgICAgICAgPHRyIGNsYXNzPVwidHJJdGVtXCI+XHJcbiAgICAgICAgICAgICAgPHRkIGNsYXNzPVwidGV4dC1kYXJrXCI+e3tOYW1lfX08L3RkPlxyXG4gICAgICAgICAgICAgIDx0ZD57e0VtYWlsfX08L3RkPlxyXG4gICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgPC90Ym9keT5cclxuICAgICAgICA8L3RhYmxlPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWNlbnRlciBwdC03XCI+XHJcbiAgICAgIDxidXR0b24gaWQ9XCJDbG9zZVJlc2V0UGFzc3dvcmRVc2VyTW9kYWxcIiAjQ2xvc2VSZXNldFBhc3N3b3JkVXNlck1vZGFsIHR5cGU9XCJidXR0b25cIiBkYXRhLWRpc21pc3M9XCJtb2RhbFwiIGFyaWEtbGFiZWw9XCJDbG9zZVwiIGNsYXNzPVwiYnRuIGJ0bi1saWdodCBtZS0zIGJ0bi1zbVwiIChjbGljayk9XCJtb2RhbC5kaXNtaXNzKClcIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJDYW5jZWxMYWJlbFwiKX19PC9idXR0b24+XHJcblxyXG4gICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwicmVzZXRQYXNzd29yZCgpXCIgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgYnRuLXNtXCI+XHJcbiAgICAgICAge3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiU2F2ZUxhYmVsXCIpfX1cclxuICAgICAgPC9idXR0b24+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjwhLS0gc2V0UGFzc3dvcmQgVXNlciBNb2RhbCAtLT5cclxuPG5nLXRlbXBsYXRlICNzZXRQYXNzd29yZFVzZXJNb2RhbCBsZXQtbW9kYWw+XHJcbiAgPGRpdiBjbGFzcz1cIm1vZGFsLWhlYWRlciBwYi0wIGJvcmRlci0wIGp1c3RpZnktY29udGVudC1lbmRcIj5cclxuICAgIDxoNSBjbGFzcz1cIm1vZGFsLXRpdGxlXCIgaWQ9XCJleGFtcGxlTW9kYWxMYWJlbFwiPjwvaDU+XHJcbiAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBkYXRhLWRpc21pc3M9XCJtb2RhbFwiIGFyaWEtbGFiZWw9XCJDbG9zZVwiIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4taWNvbiBidG4tYWN0aXZlLWNvbG9yLXByaW1hcnlcIiAoY2xpY2spPVwibW9kYWwuZGlzbWlzcygpXCI+XHJcbiAgICAgIDxzcGFuIGNsYXNzPVwic3ZnLWljb24gc3ZnLWljb24tMVwiPlxyXG4gICAgICAgIDxzcGFuIFtpbmxpbmVTVkddPVwiJy4vc3JjL2Fzc2V0cy9pbWFnZXMvYXJyMDYxLnN2ZydcIj48L3NwYW4+XHJcbiAgICAgIDwvc3Bhbj5cclxuICAgIDwvYnV0dG9uPlxyXG4gIDwvZGl2PlxyXG4gIDxkaXYgY2xhc3M9XCJtb2RhbC1ib2R5IHNjcm9sbC15IHB4LTEwIHB4LWxnLTE1IHB0LTAgcGItMTVcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJtYi0xMyB0ZXh0LWNlbnRlclwiPlxyXG4gICAgICA8aDEgY2xhc3M9XCJtYi0zXCI+e3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiU2V0UGFzc3dvcmRcIil9fTwvaDE+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJub3RpY2UgZC1mbGV4IGJnLWxpZ2h0LXdhcm5pbmcgcm91bmRlZCBib3JkZXItd2FybmluZyBib3JkZXIgYm9yZGVyLWRhc2hlZCBtYi0xMCBwLTZcIj5cclxuICAgICAgPCEtLWJlZ2luOjpJY29uLS0+XHJcbiAgICAgIDwhLS1iZWdpbjo6U3ZnIEljb24gfCBwYXRoOiBpY29ucy9kdW90dW5lL2dlbmVyYWwvZ2VuMDQ0LnN2Zy0tPlxyXG4gICAgICA8c3BhbiBjbGFzcz1cInN2Zy1pY29uIHN2Zy1pY29uLTJ0eCBzdmctaWNvbi13YXJuaW5nIG1lLTRcIj5cclxuICAgICAgICA8c3BhbiBbaW5saW5lU1ZHXT1cIicuL3NyYy9hc3NldHMvaW1hZ2VzL2dlbjA0NC5zdmcnXCI+PC9zcGFuPlxyXG4gICAgICA8L3NwYW4+XHJcbiAgICAgIDwhLS1lbmQ6OlN2ZyBJY29uLS0+XHJcbiAgICAgIDwhLS1lbmQ6Okljb24tLT5cclxuICAgICAgPCEtLWJlZ2luOjpXcmFwcGVyLS0+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZmxleC1zdGFjayBmbGV4LWdyb3ctMVwiPlxyXG4gICAgICAgIDwhLS1iZWdpbjo6Q29udGVudC0tPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJmdy1ib2xkXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZnMtNiB0ZXh0LWdyYXktNzAwXCI+XHJcbiAgICAgICAgICAgIHt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIlNldFBhc3N3b3JkQ29uZmlybWF0aW9uXCIpfX1cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwhLS1lbmQ6OkNvbnRlbnQtLT5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDwhLS1lbmQ6OldyYXBwZXItLT5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cInRhYmxlLXJlc3BvbnNpdmVcIj5cclxuICAgICAgPCEtLSBiZWdpbjo6VGFibGUgLS0+XHJcbiAgICAgIDxCQlNGLUZvcm0gW29wdGlvbnNdPVwiU2V0VXNlclBhc3N3b3JkRm9ybU9wdGlvbnNcIj5cclxuICAgICAgICA8dGFibGUgaWQ9XCJ0YWJsZUNvbmZpcm1hdGlvblwiIGNsYXNzPVwidGFibGUgYWxpZ24tbWlkZGxlIHRhYmxlLXJvdy1kYXNoZWQgZnMtNiBneS01IGRhdGFUYWJsZSBuby1mb290ZXJcIj5cclxuICAgICAgICAgIDx0aGVhZD5cclxuICAgICAgICAgICAgPHRyIGNsYXNzPVwidGV4dC1zdGFydCB0ZXh0LWdyYXktNDAwIGZ3LWJvbGRlciBmcy03IHRleHQtdXBwZXJjYXNlIGdzLTBcIj5cclxuICAgICAgICAgICAgICA8dGggY2xhc3M9XCJtaW4tdy0xNTBcIj4ge3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiTmFtZVwiKX19PC90aD5cclxuICAgICAgICAgICAgICA8dGggY2xhc3M9XCJtaW4tdy0xNTBcIj4ge3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiRW1haWxcIil9fTwvdGg+XHJcbiAgICAgICAgICAgICAgPHRoIGNsYXNzPVwibWluLXctMTUwXCI+IHt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIlBhc3N3b3JkXCIpfX08L3RoPlxyXG4gICAgICAgICAgICAgIDx0aCBjbGFzcz1cIm1pbi13LTE1MFwiPiB7e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJDb25maXJtUGFzc3dvcmRcIil9fTwvdGg+XHJcbiAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICA8L3RoZWFkPlxyXG4gICAgICAgICAgPHRib2R5IGNsYXNzPVwiZnctYm9sZCB0ZXh0LWdyYXktNjAwIGJvcmRlci0wXCI+XHJcbiAgICAgICAgICAgIDx0ciBjbGFzcz1cInRySXRlbVwiPlxyXG4gICAgICAgICAgICAgIDx0ZD57e05hbWV9fTwvdGQ+XHJcbiAgICAgICAgICAgICAgPHRkPnt7RW1haWx9fTwvdGQ+XHJcbiAgICAgICAgICAgICAgPHRkPlxyXG4gICAgICAgICAgICAgICAgPEJCU0YtVGV4dEJveCBbb3B0aW9uc109XCJQYXNzd29yZFwiIFtncm91cF09XCJTZXRVc2VyUGFzc3dvcmRGb3JtXCI+PC9CQlNGLVRleHRCb3g+XHJcbiAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICA8dGQ+XHJcbiAgICAgICAgICAgICAgICA8QkJTRi1UZXh0Qm94IFtvcHRpb25zXT1cIlBhc3N3b3JkQ29uZmlybWF0aW9uXCIgW2dyb3VwXT1cIlNldFVzZXJQYXNzd29yZEZvcm1cIj48L0JCU0YtVGV4dEJveD5cclxuICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgPC90Ym9keT5cclxuICAgICAgICA8L3RhYmxlPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWNlbnRlciBwdC03XCI+XHJcbiAgICAgICAgICA8YnV0dG9uIGlkPVwiQ2xvc2VzZXRQYXNzd29yZFVzZXJNb2RhbFwiICNDbG9zZXNldFBhc3N3b3JkVXNlck1vZGFsIHR5cGU9XCJidXR0b25cIiBhcmlhLWxhYmVsPVwiQ2xvc2VcIiBjbGFzcz1cImJ0biBidG4tbGlnaHQgbWUtMyBidG4tc21cIiAoY2xpY2spPVwibW9kYWwuZGlzbWlzcygpXCI+e3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiQ2FuY2VsTGFiZWxcIil9fTwvYnV0dG9uPlxyXG4gICAgICAgICAgPGJ1dHRvbiB0eXBlPVwic3VibWl0XCIgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgYnRuLXNtXCI+e3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiU2F2ZUxhYmVsXCIpfX08L2J1dHRvbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9CQlNGLUZvcm0+XHJcblxyXG4gICAgPC9kaXY+XHJcbiAgXHJcblxyXG4gIDwvZGl2PlxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuPCEtLSBTZW5kIEFjdGl2YXRpb24gRW1haWwgTW9kYWwgLS0+XHJcbjxuZy10ZW1wbGF0ZSAjU2VuZEFjdGl2YXRpb25FbWFpbE1vZGFsIGxldC1tb2RhbD5cclxuICA8ZGl2IGNsYXNzPVwibW9kYWwtaGVhZGVyIHBiLTAgYm9yZGVyLTAganVzdGlmeS1jb250ZW50LWVuZFwiPlxyXG4gICAgPGg1IGNsYXNzPVwibW9kYWwtdGl0bGVcIiBpZD1cImV4YW1wbGVNb2RhbExhYmVsXCI+PC9oNT5cclxuICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGRhdGEtZGlzbWlzcz1cIm1vZGFsXCIgYXJpYS1sYWJlbD1cIkNsb3NlXCIgY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1pY29uIGJ0bi1hY3RpdmUtY29sb3ItcHJpbWFyeVwiIChjbGljayk9XCJtb2RhbC5kaXNtaXNzKClcIj5cclxuICAgICAgPHNwYW4gY2xhc3M9XCJzdmctaWNvbiBzdmctaWNvbi0xXCI+XHJcbiAgICAgICAgPHNwYW4gW2lubGluZVNWR109XCInLi9zcmMvYXNzZXRzL2ltYWdlcy9hcnIwNjEuc3ZnJ1wiPjwvc3Bhbj5cclxuICAgICAgPC9zcGFuPlxyXG4gICAgPC9idXR0b24+XHJcbiAgPC9kaXY+XHJcbiAgPGRpdiBjbGFzcz1cIm1vZGFsLWJvZHkgc2Nyb2xsLXkgcHgtMTAgcHgtbGctMTUgcHQtMCBwYi0xNVwiPlxyXG4gICAgPGRpdiBjbGFzcz1cIm1iLTEzIHRleHQtY2VudGVyXCI+XHJcbiAgICAgIDxoMSBjbGFzcz1cIm1iLTNcIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJTZW5kQWN0aXZhdGlvbkVtYWlsXCIpfX08L2gxPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwibm90aWNlIGQtZmxleCBiZy1saWdodC13YXJuaW5nIHJvdW5kZWQgYm9yZGVyLXdhcm5pbmcgYm9yZGVyIGJvcmRlci1kYXNoZWQgbWItMTAgcC02XCI+XHJcbiAgICAgIDwhLS1iZWdpbjo6SWNvbi0tPlxyXG4gICAgICA8IS0tYmVnaW46OlN2ZyBJY29uIHwgcGF0aDogaWNvbnMvZHVvdHVuZS9nZW5lcmFsL2dlbjA0NC5zdmctLT5cclxuICAgICAgPHNwYW4gY2xhc3M9XCJzdmctaWNvbiBzdmctaWNvbi0ydHggc3ZnLWljb24td2FybmluZyBtZS00XCI+XHJcbiAgICAgICAgPHNwYW4gW2lubGluZVNWR109XCInLi9zcmMvYXNzZXRzL2ltYWdlcy9nZW4wNDQuc3ZnJ1wiPjwvc3Bhbj5cclxuICAgICAgPC9zcGFuPlxyXG4gICAgICA8IS0tZW5kOjpTdmcgSWNvbi0tPlxyXG4gICAgICA8IS0tZW5kOjpJY29uLS0+XHJcbiAgICAgIDwhLS1iZWdpbjo6V3JhcHBlci0tPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGZsZXgtc3RhY2sgZmxleC1ncm93LTFcIj5cclxuICAgICAgICA8IS0tYmVnaW46OkNvbnRlbnQtLT5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZnctYm9sZFwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImZzLTYgdGV4dC1ncmF5LTcwMFwiPlxyXG4gICAgICAgICAgICB7e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJBY3RpdmF0ZUNvbmZpcm1hdGlvblwiKX19XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8IS0tZW5kOjpDb250ZW50LS0+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8IS0tZW5kOjpXcmFwcGVyLS0+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJub3RlIG5vdGUtd2FybmluZyB0ZXh0LWNlbnRlclwiPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwidGFibGUtcmVzcG9uc2l2ZVwiPlxyXG4gICAgICA8IS0tIGJlZ2luOjpUYWJsZSAtLT5cclxuICAgICAgPHRhYmxlIGlkPVwidGFibGVDb25maXJtYXRpb25cIiBjbGFzcz1cInRhYmxlIGFsaWduLW1pZGRsZSB0YWJsZS1yb3ctZGFzaGVkIGZzLTYgZ3ktNSBkYXRhVGFibGUgbm8tZm9vdGVyXCI+XHJcbiAgICAgICAgPHRoZWFkPlxyXG4gICAgICAgICAgPHRyIGNsYXNzPVwidGV4dC1zdGFydCB0ZXh0LWdyYXktNDAwIGZ3LWJvbGRlciBmcy03IHRleHQtdXBwZXJjYXNlIGdzLTBcIj5cclxuICAgICAgICAgICAgPHRoIGNsYXNzPVwibWluLXctMTUwXCI+e3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiTmFtZVwiKX19PC90aD5cclxuICAgICAgICAgICAgPHRoIGNsYXNzPVwibWluLXctMTUwXCI+e3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiRW1haWxcIil9fTwvdGg+XHJcbiAgICAgICAgICAgIDx0aCBjbGFzcz1cIm1pbi13LTUwXCIgKm5nSWY9XCJTZWxlY3RlZFVzZXJMaXN0Lmxlbmd0aD4xXCI+e3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiQWN0aW9uXCIpfX08L3RoPlxyXG4gICAgICAgICAgPC90cj5cclxuICAgICAgICA8L3RoZWFkPlxyXG4gICAgICAgIDx0Ym9keSBjbGFzcz1cImZ3LWJvbGQgdGV4dC1ncmF5LTYwMCBib3JkZXItMFwiPlxyXG4gICAgICAgICAgPHRyICpuZ0Zvcj1cImxldCB1c2VyIG9mIFNlbGVjdGVkVXNlckxpc3RcIiBjbGFzcz1cInRySXRlbVwiPlxyXG4gICAgICAgICAgICA8dGQgY2xhc3M9XCJ0ZXh0LWRhcmtcIj57e3VzZXIubmFtZVN0cn19PC90ZD5cclxuXHJcbiAgICAgICAgICAgIDx0ZD57e3VzZXIudXNlcm5hbWV9fTwvdGQ+XHJcbiAgICAgICAgICAgIDx0ZCAqbmdJZj1cIlNlbGVjdGVkVXNlckxpc3QubGVuZ3RoPjFcIj5cclxuICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwiZGVsZXRlVXNlckZyb21MaXN0KHVzZXIpXCJcclxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1saWdodC1kYW5nZXIgYnRuLWljb24gYnRuLXNtXCI+XHJcbiAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhcyBmYS10cmFzaFwiPjwvaT5cclxuICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgPC90ZD5cclxuXHJcbiAgICAgICAgICA8L3RyPlxyXG4gICAgICAgIDwvdGJvZHk+XHJcbiAgICAgIDwvdGFibGU+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWNlbnRlciBwdC03XCI+XHJcbiAgICAgIDxidXR0b24gI0Nsb3NlQWN0aXZhdGlvbkVtYWlsTW9kYWwgaWQ9XCJDbG9zZUFjdGl2YXRpb25FbWFpbE1vZGFsXCIgdHlwZT1cImJ1dHRvblwiIGFyaWEtbGFiZWw9XCJDbG9zZVwiIGNsYXNzPVwiYnRuIGJ0bi1saWdodCBtZS0zIGJ0bi1zbVwiIChjbGljayk9XCJtb2RhbC5kaXNtaXNzKClcIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJDYW5jZWxMYWJlbFwiKX19PC9idXR0b24+XHJcbiAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IGJ0bi1zbVwiIChjbGljayk9XCJzZW5kQWN0aXZhdGlvbkVtYWlsRm9yVXNlcigpXCI+e3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiU2F2ZUxhYmVsXCIpfX08L2J1dHRvbj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuPCEtLSBjb25maXJtYXRpb24gTWVzc2FnZSAgTW9kYWwgLS0+XHJcbjxuZy10ZW1wbGF0ZSAjQ29uZmlybWF0aW9uTW9kYWwgbGV0LW1vZGFsPlxyXG4gIDxkaXYgY2xhc3M9XCJtb2RhbC1oZWFkZXIgcGItMCBib3JkZXItMCBqdXN0aWZ5LWNvbnRlbnQtZW5kXCI+XHJcbiAgICA8aDUgY2xhc3M9XCJtb2RhbC10aXRsZVwiIGlkPVwiZXhhbXBsZU1vZGFsTGFiZWxcIj48L2g1PlxyXG4gICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgZGF0YS1kaXNtaXNzPVwibW9kYWxcIiBhcmlhLWxhYmVsPVwiQ2xvc2VcIiBjbGFzcz1cImJ0biBidG4tc20gYnRuLWljb24gYnRuLWFjdGl2ZS1jb2xvci1wcmltYXJ5XCIgKGNsaWNrKT1cIm1vZGFsLmRpc21pc3MoKVwiPlxyXG4gICAgICA8c3BhbiBjbGFzcz1cInN2Zy1pY29uIHN2Zy1pY29uLTFcIj5cclxuICAgICAgICA8c3BhbiBbaW5saW5lU1ZHXT1cIicuL3NyYy9hc3NldHMvaW1hZ2VzL2FycjA2MS5zdmcnXCI+PC9zcGFuPlxyXG4gICAgICA8L3NwYW4+XHJcbiAgICA8L2J1dHRvbj5cclxuICA8L2Rpdj5cclxuICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keSBzY3JvbGwteSBweC0xMCBweC1sZy0xNSBwdC0wIHBiLTE1XCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwibWItMTMgdGV4dC1jZW50ZXJcIj5cclxuICAgICAgPGgxIGNsYXNzPVwibWItM1wiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkNvbmZpcm1hdGlvbk1lc3NhZ2VcIil9fTwvaDE+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJub3RpY2UgZC1mbGV4IGJnLWxpZ2h0LXdhcm5pbmcgcm91bmRlZCBib3JkZXItd2FybmluZyBib3JkZXIgYm9yZGVyLWRhc2hlZCBtYi0xMCBwLTZcIj5cclxuICAgICAgPCEtLWJlZ2luOjpJY29uLS0+XHJcbiAgICAgIDwhLS1iZWdpbjo6U3ZnIEljb24gfCBwYXRoOiBpY29ucy9kdW90dW5lL2dlbmVyYWwvZ2VuMDQ0LnN2Zy0tPlxyXG4gICAgICA8c3BhbiBjbGFzcz1cInN2Zy1pY29uIHN2Zy1pY29uLTJ0eCBzdmctaWNvbi13YXJuaW5nIG1lLTRcIj5cclxuICAgICAgICA8c3BhbiBbaW5saW5lU1ZHXT1cIicuL3NyYy9hc3NldHMvaW1hZ2VzL2dlbjA0NC5zdmcnXCI+PC9zcGFuPlxyXG4gICAgICA8L3NwYW4+XHJcbiAgICAgIDwhLS1lbmQ6OlN2ZyBJY29uLS0+XHJcbiAgICAgIDwhLS1lbmQ6Okljb24tLT5cclxuICAgICAgPCEtLWJlZ2luOjpXcmFwcGVyLS0+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZmxleC1zdGFjayBmbGV4LWdyb3ctMVwiPlxyXG4gICAgICAgIDwhLS1iZWdpbjo6Q29udGVudC0tPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJmdy1ib2xkXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZnMtNiB0ZXh0LWdyYXktNzAwXCI+XHJcbiAgICAgICAgICAgIHt7Q29uZmlybWF0aW9uTWVzc2FnZX19XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8IS0tZW5kOjpDb250ZW50LS0+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8IS0tZW5kOjpXcmFwcGVyLS0+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1yZXNwb25zaXZlXCI+XHJcbiAgICAgIDwhLS0gYmVnaW46OlRhYmxlIC0tPlxyXG4gICAgICA8dGFibGUgaWQ9XCJ0YWJsZUNvbmZpcm1hdGlvblwiIGNsYXNzPVwidGFibGUgYWxpZ24tbWlkZGxlIHRhYmxlLXJvdy1kYXNoZWQgZnMtNiBneS01IGRhdGFUYWJsZSBuby1mb290ZXJcIj5cclxuICAgICAgICA8dGhlYWQ+XHJcbiAgICAgICAgICA8dHIgY2xhc3M9XCJ0ZXh0LXN0YXJ0IHRleHQtZ3JheS00MDAgZnctYm9sZGVyIGZzLTcgdGV4dC11cHBlcmNhc2UgZ3MtMFwiPlxyXG4gICAgICAgICAgICA8dGggY2xhc3M9XCJtaW4tdy0xNTBcIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJOYW1lXCIpfX08L3RoPlxyXG4gICAgICAgICAgICA8dGggY2xhc3M9XCJtaW4tdy0xNTBcIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJFbWFpbFwiKX19PC90aD5cclxuICAgICAgICAgICAgPHRoIGNsYXNzPVwibWluLXctNTBcIiAqbmdJZj1cIlNlbGVjdGVkVXNlckxpc3QubGVuZ3RoPjFcIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJBY3Rpb25cIil9fTwvdGg+XHJcbiAgICAgICAgICA8L3RyPlxyXG4gICAgICAgIDwvdGhlYWQ+XHJcbiAgICAgICAgPHRib2R5IGNsYXNzPVwiZnctYm9sZCB0ZXh0LWdyYXktNjAwIGJvcmRlci0wXCI+XHJcbiAgICAgICAgICA8dHIgKm5nRm9yPVwibGV0IHVzZXIgb2YgU2VsZWN0ZWRVc2VyTGlzdFwiIGNsYXNzPVwidHJJdGVtXCI+XHJcbiAgICAgICAgICAgIDx0ZCBjbGFzcz1cInRleHQtZGFya1wiPnt7dXNlci5uYW1lU3RyfX08L3RkPlxyXG5cclxuICAgICAgICAgICAgPHRkPnt7dXNlci51c2VybmFtZX19PC90ZD5cclxuICAgICAgICAgICAgPHRkICpuZ0lmPVwiU2VsZWN0ZWRVc2VyTGlzdC5sZW5ndGg+MVwiPlxyXG4gICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJkZWxldGVVc2VyRnJvbUxpc3QodXNlcilcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLWxpZ2h0LWRhbmdlciBidG4taWNvblwiPlxyXG4gICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtdHJhc2hcIj48L2k+XHJcbiAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvdGQ+XHJcblxyXG4gICAgICAgICAgPC90cj5cclxuICAgICAgICA8L3Rib2R5PlxyXG4gICAgICA8L3RhYmxlPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwidGV4dC1jZW50ZXIgcHQtN1wiPlxyXG4gICAgICA8YnV0dG9uICNDbG9zZUNvbmZpcm1hdGlvbk1vZGFsIGlkPVwiQ2xvc2VDb25maXJtYXRpb25Nb2RhbFwiIGNsYXNzPVwiYnRuIGJ0bi1saWdodCBtZS0zIGJ0bi1zbVwiIChjbGljayk9XCJtb2RhbC5kaXNtaXNzKClcIj5cclxuICAgICAgICB7e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJDYW5jZWxMYWJlbFwiKX19XHJcbiAgICAgIDwvYnV0dG9uPlxyXG5cclxuICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgKm5nSWY9XCJDb25maXJtYXRpb25Nb2RhbFR5cGU9PTFcIiAoY2xpY2spPVwiYWN0aXZhdGVVc2VyTGlzdCgpXCJcclxuICAgICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBidG4tc21cIj5cclxuICAgICAgICB7e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJTYXZlTGFiZWxcIil9fVxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgKm5nSWY9XCJDb25maXJtYXRpb25Nb2RhbFR5cGU9PTJcIiAoY2xpY2spPVwiZGVhY3RpdmF0ZVVzZXJMaXN0KClcIlxyXG4gICAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IGJ0bi1zbVwiPlxyXG4gICAgICAgIHt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIlNhdmVMYWJlbFwiKX19XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiAqbmdJZj1cIkNvbmZpcm1hdGlvbk1vZGFsVHlwZT09M1wiIChjbGljayk9XCJyZXNldFVzZXJQYXNzd29yZExpc3QoKVwiXHJcbiAgICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgYnRuLXNtXCI+XHJcbiAgICAgICAge3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiU2F2ZUxhYmVsXCIpfX1cclxuICAgICAgPC9idXR0b24+XHJcbiAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiICpuZ0lmPVwiQ29uZmlybWF0aW9uTW9kYWxUeXBlPT00XCIgKGNsaWNrKT1cInNlbmRBY3RpdmF0aW9uRW1haWxGb3JVc2VyKClcIlxyXG4gICAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IGJ0bi1zbVwiPlxyXG4gICAgICAgIHt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIlNhdmVMYWJlbFwiKX19XHJcbiAgICAgIDwvYnV0dG9uPlxyXG5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuXHJcblxyXG4iXX0=
|