@bnsights/bbsf-admin-portal 1.1.4 → 1.1.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +6 -2
- package/bnsights-bbsf-admin-portal-1.1.6.tgz +0 -0
- package/esm2022/lib/Pages/ActiveDirectories/active-directories.component.mjs +1 -1
- package/esm2022/lib/Pages/ActiveDirectories/active-directory/active-directory.component.mjs +146 -146
- package/esm2022/lib/Pages/ActiveDirectories/active-directory-add/active-directory-add.component.mjs +152 -152
- package/esm2022/lib/Pages/_layout/components/aside/aside-menu/aside-menu.component.mjs +1 -1
- package/esm2022/lib/Pages/_layout/components/aside/aside.component.mjs +1 -1
- package/esm2022/lib/Pages/anonymouslayout/activation/activation.component.mjs +15 -15
- package/esm2022/lib/Pages/anonymouslayout/anonymouslayout-routing.module.mjs +1 -1
- package/esm2022/lib/Pages/anonymouslayout/anonymouslayout.component.mjs +1 -1
- package/esm2022/lib/Pages/anonymouslayout/error/error.component.mjs +7 -7
- package/esm2022/lib/Pages/anonymouslayout/forgot-password/forgot-password.component.mjs +12 -12
- package/esm2022/lib/Pages/anonymouslayout/login/login.component.mjs +19 -19
- package/esm2022/lib/Pages/anonymouslayout/rest-password/rest-password.component.mjs +15 -15
- package/esm2022/lib/Pages/anonymouslayout/upload-license/upload-license.component.mjs +12 -12
- package/esm2022/lib/Pages/configurations/auth-configuration/auth-configuration-edit/auth-configuration-edit.component.mjs +102 -102
- package/esm2022/lib/Pages/configurations/auth-configuration/auth-configuration.component.mjs +7 -7
- package/esm2022/lib/Pages/configurations/configuration/configuration.component.mjs +271 -271
- package/esm2022/lib/Pages/core/auth.module.mjs +1 -1
- package/esm2022/lib/Pages/core/authentication/admin.guard.mjs +1 -1
- package/esm2022/lib/Pages/core/authentication/auth.guard.mjs +3 -3
- package/esm2022/lib/Pages/departments/department/department.component.mjs +48 -48
- package/esm2022/lib/Pages/departments/department-info/department-info.component.mjs +32 -32
- package/esm2022/lib/Pages/documents/add-document/add-document.component.mjs +52 -52
- package/esm2022/lib/Pages/documents/document-master-layouts/document-master-layouts.component.mjs +20 -20
- package/esm2022/lib/Pages/documents/document-template-info/document-template-info.component.mjs +100 -100
- package/esm2022/lib/Pages/documents/document-templates/document-templates.component.mjs +151 -151
- package/esm2022/lib/Pages/documents/edit-document/edit-document.component.mjs +72 -72
- package/esm2022/lib/Pages/documents/edit-document-template/edit-document-template.component.mjs +27 -27
- package/esm2022/lib/Pages/empty-data/empty-data.component.mjs +1 -1
- package/esm2022/lib/Pages/empty-data/empty-data.module.mjs +1 -1
- package/esm2022/lib/Pages/helpCenter/help-center/help-center.component.mjs +84 -84
- package/esm2022/lib/Pages/helpCenter/help-center-preview/help-center-preview.component.mjs +1 -1
- package/esm2022/lib/Pages/helpCenter/help-center-secondlevel/help-center-secondlevel.component.mjs +56 -56
- package/esm2022/lib/Pages/helpCenter/help-center-thirdlevel/help-center-thirdlevel.component.mjs +58 -58
- package/esm2022/lib/Pages/home/home.component.mjs +7 -7
- package/esm2022/lib/Pages/impersonation-rules/impersonation-rules/impersonation-rules.component.mjs +129 -129
- package/esm2022/lib/Pages/jobs/jobs/jobs.component.mjs +14 -14
- package/esm2022/lib/Pages/license/license/license.component.mjs +11 -11
- package/esm2022/lib/Pages/localizations/localizations-replace-text/localizations-replace-text.component.mjs +41 -41
- package/esm2022/lib/Pages/localizations/localizations.component.mjs +125 -125
- package/esm2022/lib/Pages/logs/log/log.component.mjs +11 -11
- package/esm2022/lib/Pages/lookups/lookup/lookup.component.mjs +120 -120
- package/esm2022/lib/Pages/lookups/lookup-group/lookup-group.component.mjs +34 -34
- package/esm2022/lib/Pages/lookups/lookup-item/lookup-item.component.mjs +83 -83
- package/esm2022/lib/Pages/notifications/add-notification/add-notification.component.mjs +35 -35
- package/esm2022/lib/Pages/notifications/edit-email/edit-email.component.mjs +53 -53
- package/esm2022/lib/Pages/notifications/edit-notification/edit-notification.component.mjs +50 -50
- package/esm2022/lib/Pages/notifications/edit-sms/edit-sms.component.mjs +16 -16
- package/esm2022/lib/Pages/notifications/master-layouts/master-layouts.component.mjs +20 -20
- package/esm2022/lib/Pages/notifications/template-info/template-info.component.mjs +135 -135
- package/esm2022/lib/Pages/notifications/templates/templates.component.mjs +186 -186
- package/esm2022/lib/Pages/providers/provider/provider.component.mjs +122 -122
- package/esm2022/lib/Pages/publicHolidays/public-holiday/public-holiday.component.mjs +120 -120
- package/esm2022/lib/Pages/roles/permission-set-info/permission-set-info.component.mjs +29 -29
- package/esm2022/lib/Pages/roles/permissions/permissions.component.mjs +57 -57
- package/esm2022/lib/Pages/roles/permissionsets/permissionsets.component.mjs +79 -79
- package/esm2022/lib/Pages/sectors/sector/sector.component.mjs +35 -35
- package/esm2022/lib/Pages/sectors/sector-info/sector-info.component.mjs +27 -27
- package/esm2022/lib/Pages/sectors/sectors-department-info/sectors-department-info.component.mjs +27 -27
- package/esm2022/lib/Pages/shared/Services/AccountService.service.mjs +1 -1
- package/esm2022/lib/Pages/shared/Services/ActiveDirectoryService.service.mjs +1 -1
- package/esm2022/lib/Pages/shared/Services/AnonymousLayoutService.service.mjs +1 -1
- package/esm2022/lib/Pages/shared/Services/DepartmentService.service.mjs +1 -1
- package/esm2022/lib/Pages/shared/Services/DocumentHeaderAndFooterTemplate.service.mjs +1 -1
- package/esm2022/lib/Pages/shared/Services/DocumentTemplateService.service.mjs +1 -1
- package/esm2022/lib/Pages/shared/Services/EmailHeaderAndFooterTemplateService.Service.mjs +1 -1
- package/esm2022/lib/Pages/shared/Services/HelpCenterService.service.mjs +1 -1
- package/esm2022/lib/Pages/shared/Services/ImpersonationRuleService.service.mjs +1 -1
- package/esm2022/lib/Pages/shared/Services/JobsService.service.mjs +1 -1
- package/esm2022/lib/Pages/shared/Services/LicenseService.service.mjs +1 -1
- package/esm2022/lib/Pages/shared/Services/LogsService.mjs +1 -1
- package/esm2022/lib/Pages/shared/Services/LookupGroupsService.service.mjs +1 -1
- package/esm2022/lib/Pages/shared/Services/LookupService.service.mjs +1 -1
- package/esm2022/lib/Pages/shared/Services/PermissionSetService.service.mjs +1 -1
- package/esm2022/lib/Pages/shared/Services/PermissionsService.service.mjs +1 -1
- package/esm2022/lib/Pages/shared/Services/PublicHolidayService.service.mjs +1 -1
- package/esm2022/lib/Pages/shared/Services/SectorService.service.mjs +1 -1
- package/esm2022/lib/Pages/shared/Services/TemplateService.service.mjs +1 -1
- package/esm2022/lib/Pages/shared/Services/WorkflowActivityService.service.mjs +1 -1
- package/esm2022/lib/Pages/shared/Services/WorkflowService.service.mjs +1 -1
- package/esm2022/lib/Pages/shared/Services/WorkflowVariablesService.service.mjs +1 -1
- package/esm2022/lib/Pages/shared/Services/localizationsService.service .mjs +1 -1
- package/esm2022/lib/Pages/shared/Services/provider.service.mjs +1 -1
- package/esm2022/lib/Pages/shared/components/external-url/external-url.component.mjs +36 -36
- package/esm2022/lib/Pages/shared/components/survey/add-survey/add-survey.component.mjs +74 -74
- package/esm2022/lib/Pages/shared/components/survey/delete-survey/delete-survey.component.mjs +8 -8
- package/esm2022/lib/Pages/shared/components/survey/duplicate-survey/duplicate-survey.component.mjs +10 -10
- package/esm2022/lib/Pages/shared/components/survey/edit-survey/edit-survey.component.mjs +89 -89
- package/esm2022/lib/Pages/shared/components/survey/submissions/delete-submission/delete-submission.component.mjs +7 -7
- package/esm2022/lib/Pages/shared/components/survey/submissions/eliminate-submission/eliminate-submission.component.mjs +9 -9
- package/esm2022/lib/Pages/shared/components/survey/submissions/uneliminate-submission/uneliminate-submission.component.mjs +10 -10
- package/esm2022/lib/Pages/shared/components/survey/survey-info/add-question/add-question.component.mjs +222 -222
- package/esm2022/lib/Pages/shared/components/survey/survey-info/delete-question/delete-question.component.mjs +7 -7
- package/esm2022/lib/Pages/shared/components/survey/survey-info/edit-question/edit-question.component.mjs +257 -257
- package/esm2022/lib/Pages/shared/components/survey/survey-info/preview/preview.component.mjs +25 -25
- package/esm2022/lib/Pages/shared/components/survey/survey-info/publish-survey/publish-survey.component.mjs +24 -24
- package/esm2022/lib/Pages/shared/components/survey/survey-info/result-question/result.component.mjs +6 -6
- package/esm2022/lib/Pages/shared/components/survey/survey-info/survey-info.component.mjs +52 -52
- package/esm2022/lib/Pages/shared/components/survey/survey-info/take-survey/take-survey.component.mjs +16 -16
- package/esm2022/lib/Pages/shared/components/survey/survey-info/unpublish-survey/unpublish-survey.component.mjs +20 -20
- package/esm2022/lib/Pages/shared/components/survey/survey.component.mjs +69 -69
- package/esm2022/lib/Pages/shared/components/survey-form/survey-form.component.mjs +180 -180
- package/esm2022/lib/Pages/shared/models/SurveyModels/survey-question-option.mjs +3 -3
- package/esm2022/lib/Pages/users/users.component.mjs +190 -190
- package/esm2022/lib/Pages/workflows/activity/workflow-activity-add/workflow-activity-add.component.mjs +176 -176
- package/esm2022/lib/Pages/workflows/activity/workflow-activity-edit/workflow-activity-edit.component.mjs +364 -364
- package/esm2022/lib/Pages/workflows/instance-info/instance-info.component.mjs +67 -67
- package/esm2022/lib/Pages/workflows/tabs/tabs.component.mjs +227 -227
- package/esm2022/lib/Pages/workflows/version-info/version-info.component.mjs +31 -31
- package/esm2022/lib/Pages/workflows/workflow/workflow.component.mjs +56 -56
- package/fesm2022/bnsights-bbsf-admin-portal.mjs +5187 -5187
- package/fesm2022/bnsights-bbsf-admin-portal.mjs.map +1 -1
- package/lib/Pages/ActiveDirectories/active-directories.component.d.ts +0 -1
- package/lib/Pages/configurations/auth-configuration/auth-configuration-edit/auth-configuration-edit.component.d.ts +2 -2
- package/lib/Pages/workflows/tabs/tabs.component.d.ts +1 -1
- package/package.json +3 -3
- package/esm2022/bnsights-test-test-admin-portal.mjs +0 -5
- package/fesm2022/bnsights-test-test-admin-portal.mjs +0 -27181
- package/fesm2022/bnsights-test-test-admin-portal.mjs.map +0 -1
package/esm2022/lib/Pages/impersonation-rules/impersonation-rules/impersonation-rules.component.mjs
CHANGED
|
@@ -119,20 +119,20 @@ export class ImpersonationRulesComponent {
|
|
|
119
119
|
initializePage() {
|
|
120
120
|
// TextBox init
|
|
121
121
|
this.searchTextBox = new TextBoxOptions();
|
|
122
|
-
this.searchTextBox.
|
|
123
|
-
this.searchTextBox.
|
|
124
|
-
this.searchTextBox.
|
|
125
|
-
this.searchTextBox.
|
|
122
|
+
this.searchTextBox.name = "searchTextBox";
|
|
123
|
+
this.searchTextBox.hideLabel = true;
|
|
124
|
+
this.searchTextBox.type = InputType.Text;
|
|
125
|
+
this.searchTextBox.placeholder = this.utilityService.getResourceValue("SearchBySource");
|
|
126
126
|
this.TextInputFilter = new FilterItem();
|
|
127
127
|
this.TextInputFilter.FormControlName = "searchTextBox";
|
|
128
128
|
this.TextInputFilter.ActionParameterName = "searchText";
|
|
129
129
|
this.TextInputFilter.IsFormControl = true;
|
|
130
130
|
this.TextInputFilter.FilterType = FilterType.TextBox;
|
|
131
131
|
this.ImpersonationPaging = new PagingOptions();
|
|
132
|
-
this.ImpersonationPaging.
|
|
133
|
-
this.ImpersonationPaging.
|
|
134
|
-
this.ImpersonationPaging.
|
|
135
|
-
this.ImpersonationPaging.
|
|
132
|
+
this.ImpersonationPaging.actionPostURL = this.ApiUrl + 'GetImpersonationRuleByFilter';
|
|
133
|
+
this.ImpersonationPaging.onKeyPressFiltersControlNames = ["searchTextBox"];
|
|
134
|
+
this.ImpersonationPaging.filters = [this.TextInputFilter];
|
|
135
|
+
this.ImpersonationPaging.validationToken = this.authService.authorizationHeaderValue();
|
|
136
136
|
this.IsFilterLoaded = true;
|
|
137
137
|
}
|
|
138
138
|
//Paging functions
|
|
@@ -164,76 +164,76 @@ export class ImpersonationRulesComponent {
|
|
|
164
164
|
this.ParticipantTypeList = DropdownLists.participantTypeList;
|
|
165
165
|
this.AddImpersonationForm = new FormGroup({});
|
|
166
166
|
this.AddImpersonationFormOptions = new FormOptions();
|
|
167
|
-
this.AddImpersonationFormOptions.
|
|
168
|
-
this.AddImpersonationFormOptions.
|
|
169
|
-
this.AddImpersonationFormOptions.
|
|
170
|
-
this.AddImpersonationFormOptions.
|
|
167
|
+
this.AddImpersonationFormOptions.formGroup = this.AddImpersonationForm;
|
|
168
|
+
this.AddImpersonationFormOptions.getModelFunction = this.getAddImpersonationRuleModel;
|
|
169
|
+
this.AddImpersonationFormOptions.serviceSubmitFunction = this.getAddImpersonationRuleFunction;
|
|
170
|
+
this.AddImpersonationFormOptions.pagingReference = this.pagingElement;
|
|
171
171
|
this.AddShowDestinationPermissionList = false;
|
|
172
172
|
this.AddShowDestinationUserAutoComplete = false;
|
|
173
173
|
this.AddShowSourcePermissionList = false;
|
|
174
174
|
this.AddShowSourceUserAutoComplete = false;
|
|
175
175
|
this.AddSourceParticipantType = new DropdownOptions();
|
|
176
|
-
this.AddSourceParticipantType.
|
|
177
|
-
this.AddSourceParticipantType.
|
|
178
|
-
this.AddSourceParticipantType.
|
|
179
|
-
this.AddSourceParticipantType.
|
|
180
|
-
this.AddSourceParticipantType.
|
|
181
|
-
this.AddSourceParticipantType.
|
|
182
|
-
this.AddSourceParticipantType.
|
|
176
|
+
this.AddSourceParticipantType.name = "SourceParticipantDTO.ParticipantTypeItemID_GUID";
|
|
177
|
+
this.AddSourceParticipantType.labelKey = "SourceParticipantType";
|
|
178
|
+
this.AddSourceParticipantType.selectedItems = null;
|
|
179
|
+
this.AddSourceParticipantType.dataSource = this.ParticipantTypeList;
|
|
180
|
+
this.AddSourceParticipantType.singleSelection = true;
|
|
181
|
+
this.AddSourceParticipantType.allowSearchFilter = true;
|
|
182
|
+
this.AddSourceParticipantType.isRequired = true;
|
|
183
183
|
this.AddDestinationParticipantType = new DropdownOptions();
|
|
184
|
-
this.AddDestinationParticipantType.
|
|
185
|
-
this.AddDestinationParticipantType.
|
|
186
|
-
this.AddDestinationParticipantType.
|
|
187
|
-
this.AddDestinationParticipantType.
|
|
188
|
-
this.AddDestinationParticipantType.
|
|
189
|
-
this.AddDestinationParticipantType.
|
|
190
|
-
this.AddDestinationParticipantType.
|
|
184
|
+
this.AddDestinationParticipantType.name = "DestinationParticipantDTO.ParticipantTypeItemID_GUID";
|
|
185
|
+
this.AddDestinationParticipantType.labelKey = "DestinationParticipantType";
|
|
186
|
+
this.AddDestinationParticipantType.selectedItems = null;
|
|
187
|
+
this.AddDestinationParticipantType.dataSource = this.ParticipantTypeList;
|
|
188
|
+
this.AddDestinationParticipantType.singleSelection = true;
|
|
189
|
+
this.AddDestinationParticipantType.allowSearchFilter = true;
|
|
190
|
+
this.AddDestinationParticipantType.isRequired = true;
|
|
191
191
|
this.AddSourcePermissionSetList = new DropdownOptions();
|
|
192
|
-
this.AddSourcePermissionSetList.
|
|
193
|
-
this.AddSourcePermissionSetList.
|
|
194
|
-
this.AddSourcePermissionSetList.
|
|
195
|
-
this.AddSourcePermissionSetList.
|
|
196
|
-
this.AddSourcePermissionSetList.
|
|
197
|
-
this.AddSourcePermissionSetList.
|
|
198
|
-
this.AddSourcePermissionSetList.
|
|
192
|
+
this.AddSourcePermissionSetList.name = "SourceParticipantDTO.PermissionSetID_GUID";
|
|
193
|
+
this.AddSourcePermissionSetList.labelKey = "SourcePermissionSetList";
|
|
194
|
+
this.AddSourcePermissionSetList.selectedItems = null;
|
|
195
|
+
this.AddSourcePermissionSetList.dataSource = this.PermissionSetList;
|
|
196
|
+
this.AddSourcePermissionSetList.singleSelection = true;
|
|
197
|
+
this.AddSourcePermissionSetList.allowSearchFilter = true;
|
|
198
|
+
this.AddSourcePermissionSetList.isRequired = true;
|
|
199
199
|
this.AddDestinationPermissionSetList = new DropdownOptions();
|
|
200
|
-
this.AddDestinationPermissionSetList.
|
|
201
|
-
this.AddDestinationPermissionSetList.
|
|
202
|
-
this.AddDestinationPermissionSetList.
|
|
203
|
-
this.AddDestinationPermissionSetList.
|
|
204
|
-
this.AddDestinationPermissionSetList.
|
|
205
|
-
this.AddDestinationPermissionSetList.
|
|
206
|
-
this.AddDestinationPermissionSetList.
|
|
207
|
-
this.AddDestinationPermissionSetList.
|
|
200
|
+
this.AddDestinationPermissionSetList.name = "DestinationParticipantDTO.PermissionSetID_GUID";
|
|
201
|
+
this.AddDestinationPermissionSetList.labelValue = "DestinationPermissionSetList";
|
|
202
|
+
this.AddDestinationPermissionSetList.labelKey = "DestinationPermissionSetList";
|
|
203
|
+
this.AddDestinationPermissionSetList.selectedItems = null;
|
|
204
|
+
this.AddDestinationPermissionSetList.dataSource = this.PermissionSetList;
|
|
205
|
+
this.AddDestinationPermissionSetList.singleSelection = true;
|
|
206
|
+
this.AddDestinationPermissionSetList.allowSearchFilter = true;
|
|
207
|
+
this.AddDestinationPermissionSetList.isRequired = true;
|
|
208
208
|
this.AddSourceUserAutoComplete = new AutocompleteOptions();
|
|
209
|
-
this.AddSourceUserAutoComplete.
|
|
210
|
-
this.AddSourceUserAutoComplete.
|
|
211
|
-
this.AddSourceUserAutoComplete.
|
|
212
|
-
this.AddSourceUserAutoComplete.
|
|
213
|
-
this.AddSourceUserAutoComplete.
|
|
214
|
-
this.AddSourceUserAutoComplete.
|
|
215
|
-
this.AddSourceUserAutoComplete.
|
|
216
|
-
this.AddSourceUserAutoComplete.
|
|
209
|
+
this.AddSourceUserAutoComplete.name = "SourceParticipantDTO.UserID_GUID";
|
|
210
|
+
this.AddSourceUserAutoComplete.labelKey = "User";
|
|
211
|
+
this.AddSourceUserAutoComplete.type = InputType.Text;
|
|
212
|
+
this.AddSourceUserAutoComplete.isRequired = true;
|
|
213
|
+
this.AddSourceUserAutoComplete.value = null;
|
|
214
|
+
this.AddSourceUserAutoComplete.forceDirection = ForceDirection.English;
|
|
215
|
+
this.AddSourceUserAutoComplete.actionURL = this.ApiUrl + "AutoCompleteUser";
|
|
216
|
+
this.AddSourceUserAutoComplete.validationToken = this.authService.authorizationHeaderValue();
|
|
217
217
|
this.AddDestinationUserAutoComplete = new AutocompleteOptions();
|
|
218
|
-
this.AddDestinationUserAutoComplete.
|
|
219
|
-
this.AddDestinationUserAutoComplete.
|
|
220
|
-
this.AddDestinationUserAutoComplete.
|
|
221
|
-
this.AddDestinationUserAutoComplete.
|
|
222
|
-
this.AddDestinationUserAutoComplete.
|
|
223
|
-
this.AddDestinationUserAutoComplete.
|
|
224
|
-
this.AddDestinationUserAutoComplete.
|
|
218
|
+
this.AddDestinationUserAutoComplete.name = "DestinationParticipantDTO.UserID_GUID";
|
|
219
|
+
this.AddDestinationUserAutoComplete.labelKey = "User";
|
|
220
|
+
this.AddDestinationUserAutoComplete.type = InputType.Text;
|
|
221
|
+
this.AddDestinationUserAutoComplete.isRequired = true;
|
|
222
|
+
this.AddDestinationUserAutoComplete.value = null;
|
|
223
|
+
this.AddDestinationUserAutoComplete.actionURL = this.ApiUrl + "AutoCompleteUser";
|
|
224
|
+
this.AddDestinationUserAutoComplete.validationToken = this.authService.authorizationHeaderValue();
|
|
225
225
|
this.AddIsActive = new CheckBoxOptions();
|
|
226
|
-
this.AddIsActive.
|
|
227
|
-
this.AddIsActive.
|
|
228
|
-
this.AddIsActive.
|
|
226
|
+
this.AddIsActive.name = "IsActive";
|
|
227
|
+
this.AddIsActive.labelKey = "Active";
|
|
228
|
+
this.AddIsActive.value = true;
|
|
229
229
|
this.AddExpiresAt = new DatePickerOptions();
|
|
230
|
-
this.AddExpiresAt.
|
|
231
|
-
this.AddExpiresAt.
|
|
232
|
-
this.AddExpiresAt.
|
|
233
|
-
this.AddExpiresAt.
|
|
234
|
-
this.AddExpiresAt.
|
|
235
|
-
this.AddExpiresAt.
|
|
236
|
-
this.AddExpiresAt.
|
|
230
|
+
this.AddExpiresAt.name = "ExpiresAt";
|
|
231
|
+
this.AddExpiresAt.labelKey = "ExpiresAt";
|
|
232
|
+
this.AddExpiresAt.isRequired = true;
|
|
233
|
+
this.AddExpiresAt.startView = StartView.Month;
|
|
234
|
+
this.AddExpiresAt.pickerType = PickerType.Calendar;
|
|
235
|
+
this.AddExpiresAt.selectMode = SelectMode.Single;
|
|
236
|
+
this.AddExpiresAt.startDate = new Date();
|
|
237
237
|
this.modalService.open(AddImpersonationModal);
|
|
238
238
|
this.utilityService.stopBlockUI();
|
|
239
239
|
});
|
|
@@ -279,11 +279,11 @@ export class ImpersonationRulesComponent {
|
|
|
279
279
|
this.ParticipantTypeList = lists.participantTypeList;
|
|
280
280
|
this.EditImpersonationForm = new FormGroup({});
|
|
281
281
|
this.EditImpersonationFormOptions = new FormOptions();
|
|
282
|
-
this.EditImpersonationFormOptions.
|
|
283
|
-
this.EditImpersonationFormOptions.
|
|
284
|
-
this.EditImpersonationFormOptions.
|
|
285
|
-
this.EditImpersonationFormOptions.
|
|
286
|
-
this.EditImpersonationFormOptions.
|
|
282
|
+
this.EditImpersonationFormOptions.formGroup = this.EditImpersonationForm;
|
|
283
|
+
this.EditImpersonationFormOptions.getModelFunction = this.getEditImpersonationRuleModel;
|
|
284
|
+
this.EditImpersonationFormOptions.serviceSubmitFunction = this.getEditImpersonationRuleFunction;
|
|
285
|
+
this.EditImpersonationFormOptions.pagingReference = this.pagingElement;
|
|
286
|
+
this.EditImpersonationFormOptions.pagingActionMode = PagingActionMode.Update;
|
|
287
287
|
this.EditShowDestinationPermissionList = false;
|
|
288
288
|
this.EditShowDestinationUserAutoComplete = false;
|
|
289
289
|
this.EditShowSourcePermissionList = false;
|
|
@@ -296,21 +296,21 @@ export class ImpersonationRulesComponent {
|
|
|
296
296
|
this.SourceParticipantId = impersonation.sourceParticipantDTO.iD_GUID;
|
|
297
297
|
this.DestinationParticipantId = impersonation.destinationParticipantDTO.iD_GUID;
|
|
298
298
|
this.EditSourceParticipantType = new DropdownOptions();
|
|
299
|
-
this.EditSourceParticipantType.
|
|
300
|
-
this.EditSourceParticipantType.
|
|
301
|
-
this.EditSourceParticipantType.
|
|
302
|
-
this.EditSourceParticipantType.
|
|
303
|
-
this.EditSourceParticipantType.
|
|
304
|
-
this.EditSourceParticipantType.
|
|
305
|
-
this.EditSourceParticipantType.
|
|
299
|
+
this.EditSourceParticipantType.name = "SourceParticipantDTO.ParticipantTypeItemID_GUID";
|
|
300
|
+
this.EditSourceParticipantType.labelKey = "SourceParticipantType";
|
|
301
|
+
this.EditSourceParticipantType.selectedItems = impersonation.sourceParticipantDTO.participantTypeItemID_GUID?.toLowerCase();
|
|
302
|
+
this.EditSourceParticipantType.dataSource = this.ParticipantTypeList;
|
|
303
|
+
this.EditSourceParticipantType.singleSelection = true;
|
|
304
|
+
this.EditSourceParticipantType.allowSearchFilter = true;
|
|
305
|
+
this.EditSourceParticipantType.isRequired = true;
|
|
306
306
|
this.EditDestinationParticipantType = new DropdownOptions();
|
|
307
|
-
this.EditDestinationParticipantType.
|
|
308
|
-
this.EditDestinationParticipantType.
|
|
309
|
-
this.EditDestinationParticipantType.
|
|
310
|
-
this.EditDestinationParticipantType.
|
|
311
|
-
this.EditDestinationParticipantType.
|
|
312
|
-
this.EditDestinationParticipantType.
|
|
313
|
-
this.EditDestinationParticipantType.
|
|
307
|
+
this.EditDestinationParticipantType.name = "DestinationParticipantDTO.ParticipantTypeItemID_GUID";
|
|
308
|
+
this.EditDestinationParticipantType.labelKey = "DestinationParticipantType";
|
|
309
|
+
this.EditDestinationParticipantType.selectedItems = impersonation.destinationParticipantDTO.participantTypeItemID_GUID?.toLowerCase();
|
|
310
|
+
this.EditDestinationParticipantType.dataSource = this.ParticipantTypeList;
|
|
311
|
+
this.EditDestinationParticipantType.singleSelection = true;
|
|
312
|
+
this.EditDestinationParticipantType.allowSearchFilter = true;
|
|
313
|
+
this.EditDestinationParticipantType.isRequired = true;
|
|
314
314
|
let sourcePermissionSetSelectedItem;
|
|
315
315
|
let sourceUserModel = new AutocompleteDTO();
|
|
316
316
|
if (impersonation.sourceParticipantDTO.participantTypeItemID_GUID?.toLowerCase() == ParticipantType.User) {
|
|
@@ -321,21 +321,21 @@ export class ImpersonationRulesComponent {
|
|
|
321
321
|
sourcePermissionSetSelectedItem = impersonation.sourceParticipantDTO.permissionSetID_GUID?.toLowerCase();
|
|
322
322
|
}
|
|
323
323
|
this.EditSourcePermissionSetList = new DropdownOptions();
|
|
324
|
-
this.EditSourcePermissionSetList.
|
|
325
|
-
this.EditSourcePermissionSetList.
|
|
326
|
-
this.EditSourcePermissionSetList.
|
|
327
|
-
this.EditSourcePermissionSetList.
|
|
328
|
-
this.EditSourcePermissionSetList.
|
|
329
|
-
this.EditSourcePermissionSetList.
|
|
330
|
-
this.EditSourcePermissionSetList.
|
|
324
|
+
this.EditSourcePermissionSetList.name = "SourceParticipantDTO.PermissionSetID_GUID";
|
|
325
|
+
this.EditSourcePermissionSetList.labelKey = "SourcePermissionSetList";
|
|
326
|
+
this.EditSourcePermissionSetList.selectedItems = sourcePermissionSetSelectedItem;
|
|
327
|
+
this.EditSourcePermissionSetList.dataSource = this.PermissionSetList;
|
|
328
|
+
this.EditSourcePermissionSetList.singleSelection = true;
|
|
329
|
+
this.EditSourcePermissionSetList.allowSearchFilter = true;
|
|
330
|
+
this.EditSourcePermissionSetList.isRequired = true;
|
|
331
331
|
this.EditSourceUserAutoComplete = new AutocompleteOptions();
|
|
332
|
-
this.EditSourceUserAutoComplete.
|
|
333
|
-
this.EditSourceUserAutoComplete.
|
|
334
|
-
this.EditSourceUserAutoComplete.
|
|
335
|
-
this.EditSourceUserAutoComplete.
|
|
336
|
-
this.EditSourceUserAutoComplete.
|
|
337
|
-
this.EditSourceUserAutoComplete.
|
|
338
|
-
this.EditSourceUserAutoComplete.
|
|
332
|
+
this.EditSourceUserAutoComplete.name = "SourceParticipantDTO.UserID_GUID";
|
|
333
|
+
this.EditSourceUserAutoComplete.labelKey = "User";
|
|
334
|
+
this.EditSourceUserAutoComplete.type = InputType.Text;
|
|
335
|
+
this.EditSourceUserAutoComplete.isRequired = true;
|
|
336
|
+
this.EditSourceUserAutoComplete.selectedValue = sourceUserModel;
|
|
337
|
+
this.EditSourceUserAutoComplete.actionURL = this.ApiUrl + "AutoCompleteUser";
|
|
338
|
+
this.EditSourceUserAutoComplete.validationToken = this.authService.authorizationHeaderValue();
|
|
339
339
|
let destinationPermissionSetSelectedItem;
|
|
340
340
|
let destinationUserModel = new AutocompleteDTO();
|
|
341
341
|
if (impersonation.destinationParticipantDTO.participantTypeItemID_GUID == ParticipantType.User) {
|
|
@@ -346,34 +346,34 @@ export class ImpersonationRulesComponent {
|
|
|
346
346
|
destinationPermissionSetSelectedItem = impersonation.destinationParticipantDTO.permissionSetID_GUID?.toLowerCase();
|
|
347
347
|
}
|
|
348
348
|
this.EditDestinationPermissionSetList = new DropdownOptions();
|
|
349
|
-
this.EditDestinationPermissionSetList.
|
|
350
|
-
this.EditDestinationPermissionSetList.
|
|
351
|
-
this.EditDestinationPermissionSetList.
|
|
352
|
-
this.EditDestinationPermissionSetList.
|
|
353
|
-
this.EditDestinationPermissionSetList.
|
|
354
|
-
this.EditDestinationPermissionSetList.
|
|
355
|
-
this.EditDestinationPermissionSetList.
|
|
349
|
+
this.EditDestinationPermissionSetList.name = "DestinationParticipantDTO.PermissionSetID_GUID";
|
|
350
|
+
this.EditDestinationPermissionSetList.labelKey = "DestinationPermissionSetList";
|
|
351
|
+
this.EditDestinationPermissionSetList.selectedItems = destinationPermissionSetSelectedItem;
|
|
352
|
+
this.EditDestinationPermissionSetList.dataSource = this.PermissionSetList;
|
|
353
|
+
this.EditDestinationPermissionSetList.singleSelection = true;
|
|
354
|
+
this.EditDestinationPermissionSetList.allowSearchFilter = true;
|
|
355
|
+
this.EditDestinationPermissionSetList.isRequired = true;
|
|
356
356
|
this.EditDestinationUserAutoComplete = new AutocompleteOptions();
|
|
357
|
-
this.EditDestinationUserAutoComplete.
|
|
358
|
-
this.EditDestinationUserAutoComplete.
|
|
359
|
-
this.EditDestinationUserAutoComplete.
|
|
360
|
-
this.EditDestinationUserAutoComplete.
|
|
361
|
-
this.EditDestinationUserAutoComplete.
|
|
362
|
-
this.EditDestinationUserAutoComplete.
|
|
363
|
-
this.EditDestinationUserAutoComplete.
|
|
357
|
+
this.EditDestinationUserAutoComplete.name = "DestinationParticipantDTO.UserID_GUID";
|
|
358
|
+
this.EditDestinationUserAutoComplete.labelKey = "User";
|
|
359
|
+
this.EditDestinationUserAutoComplete.type = InputType.Text;
|
|
360
|
+
this.EditDestinationUserAutoComplete.isRequired = true;
|
|
361
|
+
this.EditDestinationUserAutoComplete.selectedValue = destinationUserModel;
|
|
362
|
+
this.EditDestinationUserAutoComplete.actionURL = this.ApiUrl + "AutoCompleteUser";
|
|
363
|
+
this.EditDestinationUserAutoComplete.validationToken = this.authService.authorizationHeaderValue();
|
|
364
364
|
this.EditIsActive = new CheckBoxOptions();
|
|
365
|
-
this.EditIsActive.
|
|
366
|
-
this.EditIsActive.
|
|
367
|
-
this.EditIsActive.
|
|
365
|
+
this.EditIsActive.name = "IsActive";
|
|
366
|
+
this.EditIsActive.labelKey = "Active";
|
|
367
|
+
this.EditIsActive.value = impersonation.isActive;
|
|
368
368
|
this.EditExpiresAt = new DatePickerOptions();
|
|
369
|
-
this.EditExpiresAt.
|
|
370
|
-
this.EditExpiresAt.
|
|
371
|
-
this.EditExpiresAt.
|
|
372
|
-
this.EditExpiresAt.
|
|
373
|
-
this.EditExpiresAt.
|
|
374
|
-
this.EditExpiresAt.
|
|
375
|
-
this.EditExpiresAt.
|
|
376
|
-
this.EditExpiresAt.
|
|
369
|
+
this.EditExpiresAt.name = "ExpiresAt";
|
|
370
|
+
this.EditExpiresAt.labelKey = "ExpiresAt";
|
|
371
|
+
this.EditExpiresAt.isRequired = true;
|
|
372
|
+
this.EditExpiresAt.value = impersonation.expiresAt;
|
|
373
|
+
this.EditExpiresAt.startView = StartView.Month;
|
|
374
|
+
this.EditExpiresAt.pickerType = PickerType.Calendar;
|
|
375
|
+
this.EditExpiresAt.selectMode = SelectMode.Single;
|
|
376
|
+
this.EditExpiresAt.startDate = new Date();
|
|
377
377
|
this.modalService.open(editImpersonationModal);
|
|
378
378
|
this.utilityService.stopBlockUI();
|
|
379
379
|
});
|
|
@@ -415,9 +415,9 @@ export class ImpersonationRulesComponent {
|
|
|
415
415
|
let paramArray = [];
|
|
416
416
|
paramArray.push(this.deleteImpersonationRuleId);
|
|
417
417
|
this.DeleteConfirmationOptions = new ConfirmationModalOptions();
|
|
418
|
-
this.DeleteConfirmationOptions.
|
|
419
|
-
this.DeleteConfirmationOptions.
|
|
420
|
-
this.DeleteConfirmationOptions.
|
|
418
|
+
this.DeleteConfirmationOptions.serviceSubmitFunction = this.deleteImpersonation;
|
|
419
|
+
this.DeleteConfirmationOptions.serviceSubmitModel = paramArray;
|
|
420
|
+
this.DeleteConfirmationOptions.pagingReference = this.pagingElement;
|
|
421
421
|
this.deleteControlLoaded = true;
|
|
422
422
|
setTimeout(() => {
|
|
423
423
|
this.ConfirmationModalControl.showModal();
|
|
@@ -428,7 +428,7 @@ export class ImpersonationRulesComponent {
|
|
|
428
428
|
this.requestHandlerService.destroyHandler();
|
|
429
429
|
}
|
|
430
430
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: ImpersonationRulesComponent, deps: [{ token: i1.AuthService }, { token: i2.PageInfoService }, { token: i1.UtilityService }, { token: i1.BBSFTranslateService }, { token: i1.EnvironmentService }, { token: i3.ImpersonationRuleService }, { token: i4.NgbModal }, { token: i1.RequestHandlerService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
431
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.0.6", type: ImpersonationRulesComponent, selector: "lib-impersonation-rules", viewQueries: [{ propertyName: "pagingElement", first: true, predicate: ["ImpersonationPagingViewElement"], descendants: true }, { propertyName: "ConfirmationModalControl", first: true, predicate: ["ConfirmationModalControl"], descendants: true }], ngImport: i0, template: "<block-ui></block-ui>\r\n<!-- Page Content -->\r\n<div *ngIf=\"ShowPageContent\" class=\"container-fluid\">\r\n <div class=\"card card-custom-h\">\r\n <div class=\"card-header border-0 pt-5\">\r\n <div class=\"card-title align-items-start flex-column\" *ngIf=\"IsFilterLoaded\">\r\n <form [formGroup]=\"ImpersonationForm\">\r\n <!--(OnChange)=\"searchClientSide($event)\" -->\r\n <BBSF-TextBox [options]=\"searchTextBox\" [group]=\"ImpersonationForm\"></BBSF-TextBox>\r\n </form>\r\n </div>\r\n <div class=\"card-toolbar\">\r\n <!-- begin::Menu -->\r\n <button type=\"button\" class=\"btn btn-sm btn-primary\" title=\"Add\" (click)=\"showAddImpersonationModal(AddImpersonationModal)\">\r\n <i class=\"fas fa-plus me-1\"></i>\r\n {{utilityService.getResourceValue(\"Add\")}}\r\n </button>\r\n\r\n <!-- end::Menu -->\r\n </div>\r\n </div>\r\n <div class=\"card-body py-3\">\r\n <div class=\"table-responsive\">\r\n <!--begin::Permission list-->\r\n <table class=\"table align-middle table-row-dashed fs-6 gy-5 dataTable no-footer\">\r\n <thead>\r\n <tr class=\"text-start text-gray-400 fw-bolder fs-7 text-uppercase gs-0\">\r\n\r\n <th class=\"min-w-150px\"> [{{utilityService.getResourceValue(\"ParticipantType\")}}] {{utilityService.getResourceValue(\"Source\")}}</th>\r\n <th class=\"min-w-150px\"> [{{utilityService.getResourceValue(\"ParticipantType\")}}] {{utilityService.getResourceValue(\"Destination\")}}</th>\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"ExpiresAt\")}}</th>\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"Active\")}}</th>\r\n <th class=\"min-w-50px\">{{utilityService.getResourceValue(\"Action\")}}</th>\r\n </tr>\r\n </thead>\r\n <tbody id=\"listingContainer\" class=\"fw-bold text-gray-600 border-0\">\r\n\r\n <tr *ngFor=\"let Impersonation of clientSidePagingResult\">\r\n\r\n <td>\r\n <span class=\"text-dark\">\r\n [{{Impersonation.sourceParticipantDTO.participantTypeItemNameStr}}] {{Impersonation.sourceParticipantDTO.participantNameStr}}\r\n </span>\r\n\r\n </td>\r\n <td> [{{Impersonation.destinationParticipantDTO.participantTypeItemNameStr}}] {{Impersonation.destinationParticipantDTO.participantNameStr}}</td>\r\n\r\n <td>{{Impersonation.expiresAt}}</td>\r\n <td>{{Impersonation.isActive}}</td>\r\n\r\n <td>\r\n\r\n <div>\r\n <button mat-button [matMenuTriggerFor]=\"menu\" class=\"btn btn-sm btn-icon btn-light btn-active-light-primary\">\r\n <i class=\"fa fa-ellipsis-h\" aria-hidden=\"true\"></i>\r\n </button>\r\n <mat-menu #menu=\"matMenu\">\r\n <a class=\"drop-item px-3\" ngbDropdownItem\r\n (click)=\"showEditImpersonationModal(Impersonation.iD_GUID,EditImpersonationModal)\">\r\n <span class=\"drop-link px-3\">{{utilityService.getResourceValue(\"Edit\")}}</span>\r\n </a>\r\n <a ngbDropdownItem class=\"drop-item px-3\"\r\n (click)=\"showDeleteImpersonationModal(Impersonation.iD_GUID)\">\r\n <span class=\"drop-link px-3\">{{utilityService.getResourceValue(\"Delete\")}}</span>\r\n </a>\r\n </mat-menu>\r\n </div>\r\n </td>\r\n </tr>\r\n <tr *ngIf=\"clientSidePagingResult.length == 0\">\r\n <td colspan=\"5\">\r\n <lib-empty-data></lib-empty-data>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n\r\n <!--end::Permission list-->\r\n </div>\r\n\r\n </div>\r\n <div class=\"card-footer border-0\">\r\n <BBSF-Paging (Items)=\"setImpersonationListResult($event)\" *ngIf=\"IsFilterLoaded\"\r\n [options]=\"ImpersonationPaging\" [group]=\"ImpersonationForm\" #ImpersonationPagingViewElement>\r\n </BBSF-Paging>\r\n </div>\r\n </div>\r\n\r\n</div>\r\n<!-- Add Modal -->\r\n<ng-template #AddImpersonationModal 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(\"Add\")}} {{utilityService.getResourceValue(\"ImpersonationRule\")}}</h1>\r\n </div>\r\n\r\n <BBSF-Form [options]=\"AddImpersonationFormOptions\">\r\n\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-DropdownList [options]=\"AddSourceParticipantType\" (OnChange)=\"addSourceParticipantOnChange($event)\" [group]=\"AddImpersonationForm\">\r\n </BBSF-DropdownList>\r\n </div>\r\n <div class=\"col-md-12\">\r\n <BBSF-DropdownList [options]=\"AddSourcePermissionSetList\" *ngIf=\"AddShowSourcePermissionList\" [group]=\"AddImpersonationForm\">\r\n </BBSF-DropdownList>\r\n </div>\r\n <div class=\"col-md-12\">\r\n <BBSF-AutocompleteTextBox [options]=\"AddSourceUserAutoComplete\" *ngIf=\"AddShowSourceUserAutoComplete\" [group]=\"AddImpersonationForm\">\r\n </BBSF-AutocompleteTextBox>\r\n </div>\r\n </div>\r\n\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-DropdownList [options]=\"AddDestinationParticipantType\" (OnChange)=\"addDestinationParticipantOnChange($event)\" [group]=\"AddImpersonationForm\">\r\n </BBSF-DropdownList>\r\n </div>\r\n <div class=\"col-md-12\">\r\n <BBSF-DropdownList [options]=\"AddDestinationPermissionSetList\" *ngIf=\"AddShowDestinationPermissionList\" [group]=\"AddImpersonationForm\">\r\n </BBSF-DropdownList>\r\n </div>\r\n <div class=\"col-md-12\">\r\n <BBSF-AutocompleteTextBox [options]=\"AddDestinationUserAutoComplete\" *ngIf=\"AddShowDestinationUserAutoComplete\" [group]=\"AddImpersonationForm\">\r\n </BBSF-AutocompleteTextBox>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-CheckBox [options]=\"AddIsActive\" [group]=\"AddImpersonationForm\">\r\n </BBSF-CheckBox>\r\n </div>\r\n </div>\r\n\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-DateTimePicker [options]=\"AddExpiresAt\" [group]=\"AddImpersonationForm\">\r\n\r\n </BBSF-DateTimePicker>\r\n </div>\r\n </div>\r\n <div class=\"text-center pt-7\">\r\n <button CloseImpersonationModal id=\"CloseImpersonationModal\" type=\"button\" class=\"btn btn-light me-3 btn-sm\"\r\n (click)=\"modal.dismiss()\">\r\n {{utilityService.getResourceValue(\"CancelLabel\")}}\r\n </button>\r\n <button type=\"submit\" class=\"btn btn-primary btn-sm\">{{utilityService.getResourceValue(\"SaveLabel\")}}</button>\r\n </div>\r\n </BBSF-Form>\r\n </div>\r\n</ng-template>\r\n\r\n<!--Edit Modal-->\r\n<ng-template #EditImpersonationModal 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(\"Edit\")}} {{utilityService.getResourceValue(\"ImpersonationRule\")}}</h1>\r\n </div>\r\n <BBSF-Form [options]=\"EditImpersonationFormOptions\">\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-DropdownList [options]=\"EditSourceParticipantType\" (OnChange)=\"editSourceParticipantOnChange($event)\" [group]=\"EditImpersonationForm\">\r\n </BBSF-DropdownList>\r\n </div>\r\n <div class=\"col-md-12\">\r\n <BBSF-DropdownList [options]=\"EditSourcePermissionSetList\" *ngIf=\"EditShowSourcePermissionList\" [group]=\"EditImpersonationForm\">\r\n </BBSF-DropdownList>\r\n </div>\r\n <div class=\"col-md-12\">\r\n <BBSF-AutocompleteTextBox [options]=\"EditSourceUserAutoComplete\" *ngIf=\"EditShowSourceUserAutoComplete\" [group]=\"EditImpersonationForm\">\r\n </BBSF-AutocompleteTextBox>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-DropdownList [options]=\"EditDestinationParticipantType\" (OnChange)=\"editDestinationParticipantOnChange($event)\" [group]=\"EditImpersonationForm\">\r\n </BBSF-DropdownList>\r\n </div>\r\n <div class=\"col-md-12\">\r\n <BBSF-DropdownList [options]=\"EditDestinationPermissionSetList\" *ngIf=\"EditShowDestinationPermissionList\" [group]=\"EditImpersonationForm\">\r\n </BBSF-DropdownList>\r\n </div>\r\n <div class=\"col-md-12\">\r\n <BBSF-AutocompleteTextBox [options]=\"EditDestinationUserAutoComplete\" *ngIf=\"EditShowDestinationUserAutoComplete\" [group]=\"EditImpersonationForm\">\r\n </BBSF-AutocompleteTextBox>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-CheckBox [options]=\"EditIsActive\" [group]=\"EditImpersonationForm\">\r\n </BBSF-CheckBox>\r\n </div>\r\n </div>\r\n\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-DateTimePicker [options]=\"EditExpiresAt\" [group]=\"EditImpersonationForm\">\r\n\r\n </BBSF-DateTimePicker>\r\n </div>\r\n </div>\r\n <div class=\"text-center pt-7\">\r\n <button #CloseEditImpersonationModal id=\"CloseEditImpersonationModal\" type=\"button\"\r\n class=\"btn btn-light btn-sm me-3\" data-dismiss=\"modal\" (click)=\"modal.dismiss()\">\r\n {{utilityService.getResourceValue(\"CancelLabel\")}}\r\n </button>\r\n <button type=\"submit\" class=\"btn btn-primary btn-sm\">{{utilityService.getResourceValue(\"SaveLabel\")}}</button>\r\n </div>\r\n </BBSF-Form>\r\n </div>\r\n</ng-template>\r\n\r\n\r\n<!--delete Modal-->\r\n<BBSF-ConfirmationModal *ngIf=\"deleteControlLoaded\" [options]=\"DeleteConfirmationOptions\" id=\"ConfirmationModalControl\" #ConfirmationModalControl></BBSF-ConfirmationModal>\r\n\r\n", dependencies: [{ kind: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i6.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i6.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i6.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: i7.BlockUIComponent, selector: "block-ui", inputs: ["name", "message", "delayStart", "delayStop", "template"] }, { kind: "component", type: i8.DateInputComponent, selector: "BBSF-DateTimePicker", inputs: ["group", "options"], outputs: ["OnChange"] }, { kind: "component", type: i8.TextboxComponent, selector: "BBSF-TextBox", inputs: ["group", "options"], outputs: ["OnChange", "OnBlur"] }, { kind: "component", type: i8.CheckBoxComponent, selector: "BBSF-CheckBox", inputs: ["group", "options"], outputs: ["OnChange"] }, { kind: "component", type: i8.DropdownListComponent, selector: "BBSF-DropdownList", inputs: ["group", "options"], outputs: ["OnChange", "onClear"] }, { kind: "component", type: i8.AutocompleteTextBoxComponent, selector: "BBSF-AutocompleteTextBox", inputs: ["group", "options"], outputs: ["OnChange"] }, { kind: "component", type: i8.PagingComponent, selector: "BBSF-Paging", inputs: ["options", "group"], outputs: ["Items"] }, { kind: "component", type: i8.FormComponent, selector: "BBSF-Form", inputs: ["options"], outputs: ["OnChange"] }, { kind: "component", type: i8.ConfirmationModalComponent, selector: "BBSF-ConfirmationModal", inputs: ["options"] }, { kind: "directive", type: i4.NgbDropdownItem, selector: "[ngbDropdownItem]", inputs: ["tabindex", "disabled"] }, { kind: "component", type: i9.MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "directive", type: i9.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "directive", type: i10.InlineSVGDirective, selector: "[inlineSVG]", inputs: ["inlineSVG", "resolveSVGUrl", "replaceContents", "prepend", "injectComponent", "cacheSVG", "setSVGAttributes", "removeSVGAttributes", "forceEvalStyles", "evalScripts", "fallbackImgUrl", "fallbackSVG", "onSVGLoaded"], outputs: ["onSVGInserted", "onSVGFailed"] }, { kind: "component", type: i11.EmptyDataComponent, selector: "lib-empty-data", inputs: ["Message", "ShowImage", "ImgURL"] }] }); }
|
|
431
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.0.6", type: ImpersonationRulesComponent, selector: "lib-impersonation-rules", viewQueries: [{ propertyName: "pagingElement", first: true, predicate: ["ImpersonationPagingViewElement"], descendants: true }, { propertyName: "ConfirmationModalControl", first: true, predicate: ["ConfirmationModalControl"], descendants: true }], ngImport: i0, template: "<block-ui></block-ui>\r\n<!-- Page Content -->\r\n<div *ngIf=\"ShowPageContent\" class=\"container-fluid\">\r\n <div class=\"card card-custom-h\">\r\n <div class=\"card-header border-0 pt-5\">\r\n <div class=\"card-title align-items-start flex-column\" *ngIf=\"IsFilterLoaded\">\r\n <form [formGroup]=\"ImpersonationForm\">\r\n <!--(OnChange)=\"searchClientSide($event)\" -->\r\n <BBSF-TextBox [options]=\"searchTextBox\" [group]=\"ImpersonationForm\"></BBSF-TextBox>\r\n </form>\r\n </div>\r\n <div class=\"card-toolbar\">\r\n <!-- begin::Menu -->\r\n <button type=\"button\" class=\"btn btn-sm btn-primary\" title=\"Add\" (click)=\"showAddImpersonationModal(AddImpersonationModal)\">\r\n <i class=\"fas fa-plus me-1\"></i>\r\n {{utilityService.getResourceValue(\"Add\")}}\r\n </button>\r\n\r\n <!-- end::Menu -->\r\n </div>\r\n </div>\r\n <div class=\"card-body py-3\">\r\n <div class=\"table-responsive\">\r\n <!--begin::Permission list-->\r\n <table class=\"table align-middle table-row-dashed fs-6 gy-5 dataTable no-footer\">\r\n <thead>\r\n <tr class=\"text-start text-gray-400 fw-bolder fs-7 text-uppercase gs-0\">\r\n\r\n <th class=\"min-w-150px\"> [{{utilityService.getResourceValue(\"ParticipantType\")}}] {{utilityService.getResourceValue(\"Source\")}}</th>\r\n <th class=\"min-w-150px\"> [{{utilityService.getResourceValue(\"ParticipantType\")}}] {{utilityService.getResourceValue(\"Destination\")}}</th>\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"ExpiresAt\")}}</th>\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"Active\")}}</th>\r\n <th class=\"min-w-50px\">{{utilityService.getResourceValue(\"Action\")}}</th>\r\n </tr>\r\n </thead>\r\n <tbody id=\"listingContainer\" class=\"fw-bold text-gray-600 border-0\">\r\n\r\n <tr *ngFor=\"let Impersonation of clientSidePagingResult\">\r\n\r\n <td>\r\n <span class=\"text-dark\">\r\n [{{Impersonation.sourceParticipantDTO.participantTypeItemNameStr}}] {{Impersonation.sourceParticipantDTO.participantNameStr}}\r\n </span>\r\n\r\n </td>\r\n <td> [{{Impersonation.destinationParticipantDTO.participantTypeItemNameStr}}] {{Impersonation.destinationParticipantDTO.participantNameStr}}</td>\r\n\r\n <td>{{Impersonation.expiresAt}}</td>\r\n <td>{{Impersonation.isActive}}</td>\r\n\r\n <td>\r\n\r\n <div>\r\n <button mat-button [matMenuTriggerFor]=\"menu\" class=\"btn btn-sm btn-icon btn-light btn-active-light-primary\">\r\n <i class=\"fa fa-ellipsis-h\" aria-hidden=\"true\"></i>\r\n </button>\r\n <mat-menu #menu=\"matMenu\">\r\n <a class=\"drop-item px-3\" ngbDropdownItem\r\n (click)=\"showEditImpersonationModal(Impersonation.iD_GUID,EditImpersonationModal)\">\r\n <span class=\"drop-link px-3\">{{utilityService.getResourceValue(\"Edit\")}}</span>\r\n </a>\r\n <a ngbDropdownItem class=\"drop-item px-3\"\r\n (click)=\"showDeleteImpersonationModal(Impersonation.iD_GUID)\">\r\n <span class=\"drop-link px-3\">{{utilityService.getResourceValue(\"Delete\")}}</span>\r\n </a>\r\n </mat-menu>\r\n </div>\r\n </td>\r\n </tr>\r\n <tr *ngIf=\"clientSidePagingResult.length == 0\">\r\n <td colspan=\"5\">\r\n <lib-empty-data></lib-empty-data>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n\r\n <!--end::Permission list-->\r\n </div>\r\n\r\n </div>\r\n <div class=\"card-footer border-0\">\r\n <BBSF-Paging (Items)=\"setImpersonationListResult($event)\" *ngIf=\"IsFilterLoaded\"\r\n [options]=\"ImpersonationPaging\" [group]=\"ImpersonationForm\" #ImpersonationPagingViewElement>\r\n </BBSF-Paging>\r\n </div>\r\n </div>\r\n\r\n</div>\r\n<!-- Add Modal -->\r\n<ng-template #AddImpersonationModal 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(\"Add\")}} {{utilityService.getResourceValue(\"ImpersonationRule\")}}</h1>\r\n </div>\r\n\r\n <BBSF-Form [options]=\"AddImpersonationFormOptions\">\r\n\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-DropdownList [options]=\"AddSourceParticipantType\" (OnChange)=\"addSourceParticipantOnChange($event)\" [group]=\"AddImpersonationForm\">\r\n </BBSF-DropdownList>\r\n </div>\r\n <div class=\"col-md-12\">\r\n <BBSF-DropdownList [options]=\"AddSourcePermissionSetList\" *ngIf=\"AddShowSourcePermissionList\" [group]=\"AddImpersonationForm\">\r\n </BBSF-DropdownList>\r\n </div>\r\n <div class=\"col-md-12\">\r\n <BBSF-AutocompleteTextBox [options]=\"AddSourceUserAutoComplete\" *ngIf=\"AddShowSourceUserAutoComplete\" [group]=\"AddImpersonationForm\">\r\n </BBSF-AutocompleteTextBox>\r\n </div>\r\n </div>\r\n\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-DropdownList [options]=\"AddDestinationParticipantType\" (OnChange)=\"addDestinationParticipantOnChange($event)\" [group]=\"AddImpersonationForm\">\r\n </BBSF-DropdownList>\r\n </div>\r\n <div class=\"col-md-12\">\r\n <BBSF-DropdownList [options]=\"AddDestinationPermissionSetList\" *ngIf=\"AddShowDestinationPermissionList\" [group]=\"AddImpersonationForm\">\r\n </BBSF-DropdownList>\r\n </div>\r\n <div class=\"col-md-12\">\r\n <BBSF-AutocompleteTextBox [options]=\"AddDestinationUserAutoComplete\" *ngIf=\"AddShowDestinationUserAutoComplete\" [group]=\"AddImpersonationForm\">\r\n </BBSF-AutocompleteTextBox>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-CheckBox [options]=\"AddIsActive\" [group]=\"AddImpersonationForm\">\r\n </BBSF-CheckBox>\r\n </div>\r\n </div>\r\n\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-DateTimePicker [options]=\"AddExpiresAt\" [group]=\"AddImpersonationForm\">\r\n\r\n </BBSF-DateTimePicker>\r\n </div>\r\n </div>\r\n <div class=\"text-center pt-7\">\r\n <button CloseImpersonationModal id=\"CloseImpersonationModal\" type=\"button\" class=\"btn btn-light me-3 btn-sm\"\r\n (click)=\"modal.dismiss()\">\r\n {{utilityService.getResourceValue(\"CancelLabel\")}}\r\n </button>\r\n <button type=\"submit\" class=\"btn btn-primary btn-sm\">{{utilityService.getResourceValue(\"SaveLabel\")}}</button>\r\n </div>\r\n </BBSF-Form>\r\n </div>\r\n</ng-template>\r\n\r\n<!--Edit Modal-->\r\n<ng-template #EditImpersonationModal 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(\"Edit\")}} {{utilityService.getResourceValue(\"ImpersonationRule\")}}</h1>\r\n </div>\r\n <BBSF-Form [options]=\"EditImpersonationFormOptions\">\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-DropdownList [options]=\"EditSourceParticipantType\" (OnChange)=\"editSourceParticipantOnChange($event)\" [group]=\"EditImpersonationForm\">\r\n </BBSF-DropdownList>\r\n </div>\r\n <div class=\"col-md-12\">\r\n <BBSF-DropdownList [options]=\"EditSourcePermissionSetList\" *ngIf=\"EditShowSourcePermissionList\" [group]=\"EditImpersonationForm\">\r\n </BBSF-DropdownList>\r\n </div>\r\n <div class=\"col-md-12\">\r\n <BBSF-AutocompleteTextBox [options]=\"EditSourceUserAutoComplete\" *ngIf=\"EditShowSourceUserAutoComplete\" [group]=\"EditImpersonationForm\">\r\n </BBSF-AutocompleteTextBox>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-DropdownList [options]=\"EditDestinationParticipantType\" (OnChange)=\"editDestinationParticipantOnChange($event)\" [group]=\"EditImpersonationForm\">\r\n </BBSF-DropdownList>\r\n </div>\r\n <div class=\"col-md-12\">\r\n <BBSF-DropdownList [options]=\"EditDestinationPermissionSetList\" *ngIf=\"EditShowDestinationPermissionList\" [group]=\"EditImpersonationForm\">\r\n </BBSF-DropdownList>\r\n </div>\r\n <div class=\"col-md-12\">\r\n <BBSF-AutocompleteTextBox [options]=\"EditDestinationUserAutoComplete\" *ngIf=\"EditShowDestinationUserAutoComplete\" [group]=\"EditImpersonationForm\">\r\n </BBSF-AutocompleteTextBox>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-CheckBox [options]=\"EditIsActive\" [group]=\"EditImpersonationForm\">\r\n </BBSF-CheckBox>\r\n </div>\r\n </div>\r\n\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-DateTimePicker [options]=\"EditExpiresAt\" [group]=\"EditImpersonationForm\">\r\n\r\n </BBSF-DateTimePicker>\r\n </div>\r\n </div>\r\n <div class=\"text-center pt-7\">\r\n <button #CloseEditImpersonationModal id=\"CloseEditImpersonationModal\" type=\"button\"\r\n class=\"btn btn-light btn-sm me-3\" data-dismiss=\"modal\" (click)=\"modal.dismiss()\">\r\n {{utilityService.getResourceValue(\"CancelLabel\")}}\r\n </button>\r\n <button type=\"submit\" class=\"btn btn-primary btn-sm\">{{utilityService.getResourceValue(\"SaveLabel\")}}</button>\r\n </div>\r\n </BBSF-Form>\r\n </div>\r\n</ng-template>\r\n\r\n\r\n<!--delete Modal-->\r\n<BBSF-ConfirmationModal *ngIf=\"deleteControlLoaded\" [options]=\"DeleteConfirmationOptions\" id=\"ConfirmationModalControl\" #ConfirmationModalControl></BBSF-ConfirmationModal>\r\n\r\n", dependencies: [{ kind: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i6.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i6.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i6.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: i7.BlockUIComponent, selector: "block-ui", inputs: ["name", "message", "delayStart", "delayStop", "template"] }, { kind: "component", type: i8.DateInputComponent, selector: "BBSF-DateTimePicker", inputs: ["group", "options"], outputs: ["onChange"] }, { kind: "component", type: i8.TextboxComponent, selector: "BBSF-TextBox", inputs: ["group", "options"], outputs: ["onChange", "onBlur"] }, { kind: "component", type: i8.CheckBoxComponent, selector: "BBSF-CheckBox", inputs: ["group", "options"], outputs: ["onChange"] }, { kind: "component", type: i8.DropdownListComponent, selector: "BBSF-DropdownList", inputs: ["group", "options"], outputs: ["onChange", "onClear"] }, { kind: "component", type: i8.AutocompleteTextBoxComponent, selector: "BBSF-AutocompleteTextBox", inputs: ["group", "options"], outputs: ["OnChange"] }, { kind: "component", type: i8.PagingComponent, selector: "BBSF-Paging", inputs: ["options", "group"], outputs: ["Items"] }, { kind: "component", type: i8.FormComponent, selector: "BBSF-Form", inputs: ["options"], outputs: ["onChange"] }, { kind: "component", type: i8.ConfirmationModalComponent, selector: "BBSF-ConfirmationModal", inputs: ["options"] }, { kind: "directive", type: i4.NgbDropdownItem, selector: "[ngbDropdownItem]", inputs: ["tabindex", "disabled"] }, { kind: "component", type: i9.MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "directive", type: i9.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "directive", type: i10.InlineSVGDirective, selector: "[inlineSVG]", inputs: ["inlineSVG", "resolveSVGUrl", "replaceContents", "prepend", "injectComponent", "cacheSVG", "setSVGAttributes", "removeSVGAttributes", "forceEvalStyles", "evalScripts", "fallbackImgUrl", "fallbackSVG", "onSVGLoaded"], outputs: ["onSVGInserted", "onSVGFailed"] }, { kind: "component", type: i11.EmptyDataComponent, selector: "lib-empty-data", inputs: ["Message", "ShowImage", "ImgURL"] }] }); }
|
|
432
432
|
}
|
|
433
433
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: ImpersonationRulesComponent, decorators: [{
|
|
434
434
|
type: Component,
|
|
@@ -440,4 +440,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.6", ngImpor
|
|
|
440
440
|
type: ViewChild,
|
|
441
441
|
args: ['ConfirmationModalControl', { static: false }]
|
|
442
442
|
}] } });
|
|
443
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1wZXJzb25hdGlvbi1ydWxlcy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9iYnNmLWFkbWluLXBvcnRhbC9zcmMvbGliL1BhZ2VzL2ltcGVyc29uYXRpb24tcnVsZXMvaW1wZXJzb25hdGlvbi1ydWxlcy9pbXBlcnNvbmF0aW9uLXJ1bGVzLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Jic2YtYWRtaW4tcG9ydGFsL3NyYy9saWIvUGFnZXMvaW1wZXJzb25hdGlvbi1ydWxlcy9pbXBlcnNvbmF0aW9uLXJ1bGVzL2ltcGVyc29uYXRpb24tcnVsZXMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBVSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDN0QsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxlQUFlLEVBQUUsbUJBQW1CLEVBQUUsZUFBZSxFQUE4Qix3QkFBd0IsRUFBRSxpQkFBaUIsRUFBRSxlQUFlLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxjQUFjLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBbUIsYUFBYSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLGNBQWMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQy9WLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLG9FQUFvRSxDQUFDO0FBRTVHLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxvREFBb0QsQ0FBQztBQUlyRixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7Ozs7Ozs7Ozs7Ozs7QUFNekQsTUFBTSxPQUFPLDJCQUEyQjtJQTZEdEMsWUFBb0IsV0FBd0IsRUFBVSxlQUFnQyxFQUFTLGNBQThCLEVBQ25I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O2tHQUEzQiwyQkFBMkIsdVRDZnhDLG9vV0F3T0E7OzJGRHpOYSwyQkFBMkI7a0JBSnZDLFNBQVM7K0JBQ0UseUJBQXlCO2lUQWdCNkIsYUFBYTtzQkFBNUUsU0FBUzt1QkFBQyxnQ0FBZ0MsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7Z0JBOENKLHdCQUF3QjtzQkFBakYsU0FBUzt1QkFBQywwQkFBMEIsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgQXV0b2NvbXBsZXRlRFRPLCBBdXRvY29tcGxldGVPcHRpb25zLCBDaGVja0JveE9wdGlvbnMsIENvbmZpcm1hdGlvbk1vZGFsQ29tcG9uZW50LCBDb25maXJtYXRpb25Nb2RhbE9wdGlvbnMsIERhdGVQaWNrZXJPcHRpb25zLCBEcm9wZG93bk9wdGlvbnMsIEZpbHRlckl0ZW0sIEZpbHRlclR5cGUsIEZvcmNlRGlyZWN0aW9uLCBGb3JtT3B0aW9ucywgSW5wdXRUeXBlLCBQYWdpbmdBY3Rpb25Nb2RlLCBQYWdpbmdDb21wb25lbnQsIFBhZ2luZ09wdGlvbnMsIFBpY2tlclR5cGUsIFNlbGVjdE1vZGUsIFN0YXJ0VmlldywgVGV4dEJveE9wdGlvbnMgfSBmcm9tICdAYm5zaWdodHMvYmJzZi1jb250cm9scyc7XHJcbmltcG9ydCB7IEltcGVyc29uYXRpb25SdWxlTW9kZWwgfSBmcm9tICcuLi8uLi9zaGFyZWQvbW9kZWxzL0ltcGVyc29uYXRpb25SdWxlTW9kZWxzL0ltcGVyc29uYXRpb25SdWxlTW9kZWwnO1xyXG5pbXBvcnQgeyBJbXBlcnNvbmF0aW9uUnVsZVNlcnZpY2UgfSBmcm9tICcuLy4uLy4uL3NoYXJlZC9TZXJ2aWNlcy9JbXBlcnNvbmF0aW9uUnVsZVNlcnZpY2Uuc2VydmljZSc7XHJcbmltcG9ydCB7IFBhZ2VJbmZvU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL19tZXRyb25pYy9jb3JlL3NlcnZpY2VzL3BhZ2UtaW5mby5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTmdiTW9kYWwgfSBmcm9tICdAbmctYm9vdHN0cmFwL25nLWJvb3RzdHJhcCc7XHJcbmltcG9ydCB7IEF1dGhTZXJ2aWNlLCBVdGlsaXR5U2VydmljZSwgQkJTRlRyYW5zbGF0ZVNlcnZpY2UsIEVudmlyb25tZW50U2VydmljZSwgUmVxdWVzdEhhbmRsZXJTZXJ2aWNlIH0gZnJvbSAnQGJuc2lnaHRzL2Jic2YtdXRpbGl0aWVzJztcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBQYXJ0aWNpcGFudFR5cGUgfSBmcm9tICcuLi8uLi9zaGFyZWQvY29uc3RhbnRzJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnbGliLWltcGVyc29uYXRpb24tcnVsZXMnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9pbXBlcnNvbmF0aW9uLXJ1bGVzLmNvbXBvbmVudC5odG1sJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgSW1wZXJzb25hdGlvblJ1bGVzQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuICAvL1BhZ2UgcmVxdWlyZW1lbnRzXHJcbiAgU2hvd1BhZ2VDb250ZW50OiBib29sZWFuID0gZmFsc2U7XHJcbiAgQXBpVXJsID0gXCIvYXBpL2FkbWluL0ltcGVyc29uYXRpb25SdWxlL1wiXHJcblxyXG4gIC8vRmlsdGVyIGFuZCBwYWdpbmcgY29tcG9uZW50c1xyXG4gIHNlYXJjaFRleHRCb3g6IFRleHRCb3hPcHRpb25zO1xyXG4gIFRleHRJbnB1dEZpbHRlcjogRmlsdGVySXRlbTtcclxuICBJbXBlcnNvbmF0aW9uRm9ybSA9IG5ldyBGb3JtR3JvdXAoe30pO1xyXG4gIEltcGVyc29uYXRpb25QYWdpbmdSZXN1bHQ6IGFueVtdID0gW107XHJcbiAgY2xpZW50U2lkZVBhZ2luZ1Jlc3VsdDogYW55W10gPSBbXTtcclxuICBJbXBlcnNvbmF0aW9uUGFnaW5nOiBQYWdpbmdPcHRpb25zO1xyXG4gIElzRmlsdGVyTG9hZGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQFZpZXdDaGlsZCgnSW1wZXJzb25hdGlvblBhZ2luZ1ZpZXdFbGVtZW50JywgeyBzdGF0aWM6IGZhbHNlIH0pIHBhZ2luZ0VsZW1lbnQ6IFBhZ2luZ0NvbXBvbmVudDxhbnk+O1xyXG5cclxuICAvL1JlcXVpcmVkIGxpc3RzXHJcbiAgUGVybWlzc2lvblNldExpc3Q6IGFueVtdID0gW107XHJcbiAgUGFydGljaXBhbnRUeXBlTGlzdDogYW55W10gPSBbXTtcclxuXHJcbiAgLy9BZGQgTW9kZWwgQ29udHJvbHNcclxuICBBZGRJbXBlcnNvbmF0aW9uRm9ybSA9IG5ldyBGb3JtR3JvdXAoe30pO1xyXG4gIEFkZEltcGVyc29uYXRpb25Gb3JtT3B0aW9ucyA9IG5ldyBGb3JtT3B0aW9ucztcclxuICBBZGRTb3VyY2VQYXJ0aWNpcGFudFR5cGU6IERyb3Bkb3duT3B0aW9ucztcclxuICBBZGREZXN0aW5hdGlvblBhcnRpY2lwYW50VHlwZTogRHJvcGRvd25PcHRpb25zO1xyXG4gIEFkZFNvdXJjZVBlcm1pc3Npb25TZXRMaXN0OiBEcm9wZG93bk9wdGlvbnM7XHJcbiAgQWRkRGVzdGluYXRpb25QZXJtaXNzaW9uU2V0TGlzdDogRHJvcGRvd25PcHRpb25zO1xyXG4gIEFkZFNvdXJjZVVzZXJBdXRvQ29tcGxldGU6IEF1dG9jb21wbGV0ZU9wdGlvbnM7XHJcbiAgQWRkRGVzdGluYXRpb25Vc2VyQXV0b0NvbXBsZXRlOiBBdXRvY29tcGxldGVPcHRpb25zO1xyXG4gIEFkZElzQWN0aXZlOiBDaGVja0JveE9wdGlvbnM7XHJcbiAgQWRkRXhwaXJlc0F0OiBEYXRlUGlja2VyT3B0aW9ucztcclxuICBBZGRTaG93U291cmNlUGVybWlzc2lvbkxpc3Q6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBBZGRTaG93U291cmNlVXNlckF1dG9Db21wbGV0ZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEFkZFNob3dEZXN0aW5hdGlvblBlcm1pc3Npb25MaXN0OiBib29sZWFuID0gZmFsc2U7XHJcbiAgQWRkU2hvd0Rlc3RpbmF0aW9uVXNlckF1dG9Db21wbGV0ZTogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuXHJcbiAgLy9FZGl0IE1vZGVsIENvbnRyb2xzXHJcbiAgRWRpdEltcGVyc29uYXRpb25Gb3JtID0gbmV3IEZvcm1Hcm91cCh7fSk7XHJcbiAgRWRpdEltcGVyc29uYXRpb25Gb3JtT3B0aW9ucyA9IG5ldyBGb3JtT3B0aW9ucztcclxuICBFZGl0U291cmNlUGFydGljaXBhbnRUeXBlOiBEcm9wZG93bk9wdGlvbnM7XHJcbiAgRWRpdERlc3RpbmF0aW9uUGFydGljaXBhbnRUeXBlOiBEcm9wZG93bk9wdGlvbnM7XHJcbiAgRWRpdFNvdXJjZVBlcm1pc3Npb25TZXRMaXN0OiBEcm9wZG93bk9wdGlvbnM7XHJcbiAgRWRpdERlc3RpbmF0aW9uUGVybWlzc2lvblNldExpc3Q6IERyb3Bkb3duT3B0aW9ucztcclxuICBFZGl0U291cmNlVXNlckF1dG9Db21wbGV0ZTogQXV0b2NvbXBsZXRlT3B0aW9ucztcclxuICBFZGl0RGVzdGluYXRpb25Vc2VyQXV0b0NvbXBsZXRlOiBBdXRvY29tcGxldGVPcHRpb25zO1xyXG4gIEVkaXRJc0FjdGl2ZTogQ2hlY2tCb3hPcHRpb25zO1xyXG4gIEVkaXRFeHBpcmVzQXQ6IERhdGVQaWNrZXJPcHRpb25zO1xyXG4gIEVkaXRTaG93U291cmNlUGVybWlzc2lvbkxpc3Q6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBFZGl0U2hvd1NvdXJjZVVzZXJBdXRvQ29tcGxldGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBFZGl0U2hvd0Rlc3RpbmF0aW9uUGVybWlzc2lvbkxpc3Q6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBFZGl0U2hvd0Rlc3RpbmF0aW9uVXNlckF1dG9Db21wbGV0ZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEltcGVyc29uYXRpb25JZDogc3RyaW5nO1xyXG4gIFNvdXJjZVBhcnRpY2lwYW50SWQ6IHN0cmluZztcclxuICBEZXN0aW5hdGlvblBhcnRpY2lwYW50SWQ6IHN0cmluZztcclxuXHJcbiAgLy9kZWxldGUgIE1vZGVsIENvbnRyb2xzXHJcbiAgZGVsZXRlSW1wZXJzb25hdGlvblJ1bGVJZDogc3RyaW5nO1xyXG4gIERlbGV0ZUNvbmZpcm1hdGlvbk9wdGlvbnM6IENvbmZpcm1hdGlvbk1vZGFsT3B0aW9ucztcclxuICBkZWxldGVDb250cm9sTG9hZGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQFZpZXdDaGlsZCgnQ29uZmlybWF0aW9uTW9kYWxDb250cm9sJywgeyBzdGF0aWM6IGZhbHNlIH0pIENvbmZpcm1hdGlvbk1vZGFsQ29udHJvbDogQ29uZmlybWF0aW9uTW9kYWxDb21wb25lbnQ7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgYXV0aFNlcnZpY2U6IEF1dGhTZXJ2aWNlLCBwcml2YXRlIHBhZ2VJbmZvU2VydmljZTogUGFnZUluZm9TZXJ2aWNlLCBwdWJsaWMgdXRpbGl0eVNlcnZpY2U6IFV0aWxpdHlTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBiYnNmVHJhbnNsYXRlU2VydmljZTogQkJTRlRyYW5zbGF0ZVNlcnZpY2UsIHByaXZhdGUgZW52aXJvbm1lbnRTZXJ2aWNlOiBFbnZpcm9ubWVudFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIEltcGVyc29uYXRpb25SdWxlU2VydmljZTogSW1wZXJzb25hdGlvblJ1bGVTZXJ2aWNlLCBwcml2YXRlIG1vZGFsU2VydmljZTogTmdiTW9kYWwsIHByaXZhdGUgcmVxdWVzdEhhbmRsZXJTZXJ2aWNlOiBSZXF1ZXN0SGFuZGxlclNlcnZpY2UpIHtcclxuICB9XHJcblxyXG4gIGFzeW5jIG5nT25Jbml0KCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgdGhpcy5TaG93UGFnZUNvbnRlbnQgPSB0cnVlO1xyXG4gICAgUGFnZUluZm9TZXJ2aWNlLlBhZ2VUaXRsZSA9IHRoaXMudXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkltcGVyc29uYXRpb25SdWxlc1wiKVxyXG4gICAgUGFnZUluZm9TZXJ2aWNlLlBhZ2VCcmVhZGNydW1icyA9IFtcclxuICAgICAgeyB0aXRsZTogdGhpcy51dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiSG9tZVwiKSwgcGF0aDogJy9BZG1pbi9Ib21lJywgaXNTZXBhcmF0b3I6IGZhbHNlLCBpc0FjdGl2ZTogZmFsc2UgfSxcclxuICAgICAgeyB0aXRsZTogJycsIHBhdGg6ICcnLCBpc1NlcGFyYXRvcjogdHJ1ZSwgaXNBY3RpdmU6IGZhbHNlIH1cclxuXHJcbiAgICBdO1xyXG4gICAgdGhpcy5wYWdlSW5mb1NlcnZpY2UuY2FsY3VsYXRlVGl0bGUoKTtcclxuICAgIHRoaXMucGFnZUluZm9TZXJ2aWNlLmNhbGN1bGF0ZUJyZWFkY3J1bWJzKCk7XHJcbiAgICB0aGlzLmJic2ZUcmFuc2xhdGVTZXJ2aWNlLm9uTGFuZ0NoYW5nZS5zdWJzY3JpYmUoKGV2ZW50KSA9PiB7XHJcbiAgICAgIHRoaXMubmdPbkluaXQoKTtcclxuICAgIH0pXHJcbiAgICB0aGlzLmluaXRpYWxpemVQYWdlKCk7XHJcbiAgfVxyXG5cclxuICBpbml0aWFsaXplUGFnZSgpIHtcclxuICAgIC8vIFRleHRCb3ggaW5pdFxyXG4gICAgdGhpcy5zZWFyY2hUZXh0Qm94ID0gbmV3IFRleHRCb3hPcHRpb25zKCk7XHJcbiAgICB0aGlzLnNlYXJjaFRleHRCb3guTmFtZSA9IFwic2VhcmNoVGV4dEJveFwiXHJcbiAgICB0aGlzLnNlYXJjaFRleHRCb3guSGlkZUxhYmVsID0gdHJ1ZVxyXG4gICAgdGhpcy5zZWFyY2hUZXh0Qm94LlR5cGUgPSBJbnB1dFR5cGUuVGV4dFxyXG4gICAgdGhpcy5zZWFyY2hUZXh0Qm94LlBsYWNlaG9sZGVyID0gdGhpcy51dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiU2VhcmNoQnlTb3VyY2VcIilcclxuXHJcbiAgICB0aGlzLlRleHRJbnB1dEZpbHRlciA9IG5ldyBGaWx0ZXJJdGVtKCk7XHJcbiAgICB0aGlzLlRleHRJbnB1dEZpbHRlci5Gb3JtQ29udHJvbE5hbWUgPSBcInNlYXJjaFRleHRCb3hcIlxyXG4gICAgdGhpcy5UZXh0SW5wdXRGaWx0ZXIuQWN0aW9uUGFyYW1ldGVyTmFtZSA9IFwic2VhcmNoVGV4dFwiXHJcbiAgICB0aGlzLlRleHRJbnB1dEZpbHRlci5Jc0Zvcm1Db250cm9sID0gdHJ1ZVxyXG4gICAgdGhpcy5UZXh0SW5wdXRGaWx0ZXIuRmlsdGVyVHlwZSA9IEZpbHRlclR5cGUuVGV4dEJveFxyXG5cclxuICAgIHRoaXMuSW1wZXJzb25hdGlvblBhZ2luZyA9IG5ldyBQYWdpbmdPcHRpb25zKCk7XHJcbiAgICB0aGlzLkltcGVyc29uYXRpb25QYWdpbmcuQWN0aW9uUG9zdFVSTCA9IHRoaXMuQXBpVXJsICsgJ0dldEltcGVyc29uYXRpb25SdWxlQnlGaWx0ZXInO1xyXG4gICAgdGhpcy5JbXBlcnNvbmF0aW9uUGFnaW5nLk9uS2V5UHJlc3NGaWx0ZXJzQ29udHJvbE5hbWVzID0gW1wic2VhcmNoVGV4dEJveFwiXVxyXG4gICAgdGhpcy5JbXBlcnNvbmF0aW9uUGFnaW5nLkZpbHRlcnMgPSBbdGhpcy5UZXh0SW5wdXRGaWx0ZXJdXHJcbiAgICB0aGlzLkltcGVyc29uYXRpb25QYWdpbmcuVmFsaWRhdGlvblRva2VuID0gdGhpcy5hdXRoU2VydmljZS5hdXRob3JpemF0aW9uSGVhZGVyVmFsdWUoKVxyXG4gICAgdGhpcy5Jc0ZpbHRlckxvYWRlZCA9IHRydWU7XHJcbiAgfVxyXG5cclxuICAvL1BhZ2luZyBmdW5jdGlvbnNcclxuICBzZXRJbXBlcnNvbmF0aW9uTGlzdFJlc3VsdChyZXN1bHQpIHtcclxuICAgIHRoaXMuSW1wZXJzb25hdGlvblBhZ2luZ1Jlc3VsdCA9IHJlc3VsdDtcclxuICAgIHRoaXMuY2xpZW50U2lkZVBhZ2luZ1Jlc3VsdCA9IHJlc3VsdDtcclxuICAgIHRoaXMuU2hvd1BhZ2VDb250ZW50ID0gdHJ1ZTtcclxuICAgIHRoaXMudXRpbGl0eVNlcnZpY2Uuc3RvcEJsb2NrVUkoKVxyXG4gIH1cclxuXHJcbiAgc2VhcmNoQ2xpZW50U2lkZShzZWFyY2hWYWx1ZSkge1xyXG4gICAgaWYgKHNlYXJjaFZhbHVlKVxyXG4gICAgICB0aGlzLmNsaWVudFNpZGVQYWdpbmdSZXN1bHQgPSB0aGlzLmNsaWVudFNpZGVQYWdpbmdSZXN1bHQuZmlsdGVyKFxyXG4gICAgICAgIGZ1bmN0aW9uIChpdGVtKSB7XHJcbiAgICAgICAgICB2YXIgc291cmNlUGFydGljaXBhbnROYW1lID0gaXRlbS5zb3VyY2VQYXJ0aWNpcGFudERUTy5wYXJ0aWNpcGFudE5hbWU7XHJcbiAgICAgICAgICB2YXIgZGVzdGluYXRpb25QYXJ0aWNpcGFudE5hbWUgPSBpdGVtLmRlc3RpbmF0aW9uUGFydGljaXBhbnREVE8ucGFydGljaXBhbnROYW1lO1xyXG4gICAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgc291cmNlUGFydGljaXBhbnROYW1lLmVuZ2xpc2gudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhzZWFyY2hWYWx1ZS50b0xvd2VyQ2FzZSgpKVxyXG4gICAgICAgICAgICB8fCBzb3VyY2VQYXJ0aWNpcGFudE5hbWUuYXJhYmljLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoc2VhcmNoVmFsdWUudG9Mb3dlckNhc2UoKSlcclxuICAgICAgICAgICAgfHwgZGVzdGluYXRpb25QYXJ0aWNpcGFudE5hbWUuYXJhYmljLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoc2VhcmNoVmFsdWUudG9Mb3dlckNhc2UoKSlcclxuICAgICAgICAgICAgfHwgZGVzdGluYXRpb25QYXJ0aWNpcGFudE5hbWUuYXJhYmljLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoc2VhcmNoVmFsdWUudG9Mb3dlckNhc2UoKSkpO1xyXG4gICAgICAgIH0pXHJcbiAgICBlbHNlXHJcbiAgICAgIHRoaXMuY2xpZW50U2lkZVBhZ2luZ1Jlc3VsdCA9IHRoaXMuSW1wZXJzb25hdGlvblBhZ2luZ1Jlc3VsdDtcclxuICB9XHJcblxyXG4gIC8vQWRkIGltcGVyc29uYXRpb24gcnVsZSBmdW5jdGlvbnNcclxuICBzaG93QWRkSW1wZXJzb25hdGlvbk1vZGFsKEFkZEltcGVyc29uYXRpb25Nb2RhbCkge1xyXG4gICAgdGhpcy51dGlsaXR5U2VydmljZS5zdGFydEJsb2NrVUkoKTtcclxuXHJcbiAgICB0aGlzLkltcGVyc29uYXRpb25SdWxlU2VydmljZS5sb2FkQWRkRHJvcGRvd25zKCkuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcclxuICAgICAgbGV0IERyb3Bkb3duTGlzdHMgPSByZXN1bHQgYXMgYW55O1xyXG4gICAgICB0aGlzLlBlcm1pc3Npb25TZXRMaXN0ID0gRHJvcGRvd25MaXN0cy5wZXJtaXNzaW9uTGlzdDtcclxuICAgICAgdGhpcy5QYXJ0aWNpcGFudFR5cGVMaXN0ID0gRHJvcGRvd25MaXN0cy5wYXJ0aWNpcGFudFR5cGVMaXN0O1xyXG4gICAgICB0aGlzLkFkZEltcGVyc29uYXRpb25Gb3JtID0gbmV3IEZvcm1Hcm91cCh7fSlcclxuXHJcbiAgICAgIHRoaXMuQWRkSW1wZXJzb25hdGlvbkZvcm1PcHRpb25zID0gbmV3IEZvcm1PcHRpb25zKCk7XHJcbiAgICAgIHRoaXMuQWRkSW1wZXJzb25hdGlvbkZvcm1PcHRpb25zLkZvcm1Hcm91cCA9IHRoaXMuQWRkSW1wZXJzb25hdGlvbkZvcm1cclxuICAgICAgdGhpcy5BZGRJbXBlcnNvbmF0aW9uRm9ybU9wdGlvbnMuR2V0TW9kZWxGdW5jdGlvbiA9IHRoaXMuZ2V0QWRkSW1wZXJzb25hdGlvblJ1bGVNb2RlbDtcclxuICAgICAgdGhpcy5BZGRJbXBlcnNvbmF0aW9uRm9ybU9wdGlvbnMuU2VydmljZVN1Ym1pdEZ1bmN0aW9uID0gdGhpcy5nZXRBZGRJbXBlcnNvbmF0aW9uUnVsZUZ1bmN0aW9uO1xyXG4gICAgICB0aGlzLkFkZEltcGVyc29uYXRpb25Gb3JtT3B0aW9ucy5QYWdpbmdSZWZlcmVuY2UgPSB0aGlzLnBhZ2luZ0VsZW1lbnRcclxuXHJcbiAgICAgIHRoaXMuQWRkU2hvd0Rlc3RpbmF0aW9uUGVybWlzc2lvbkxpc3QgPSBmYWxzZTtcclxuICAgICAgdGhpcy5BZGRTaG93RGVzdGluYXRpb25Vc2VyQXV0b0NvbXBsZXRlID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuQWRkU2hvd1NvdXJjZVBlcm1pc3Npb25MaXN0ID0gZmFsc2VcclxuICAgICAgdGhpcy5BZGRTaG93U291cmNlVXNlckF1dG9Db21wbGV0ZSA9IGZhbHNlXHJcblxyXG4gICAgICB0aGlzLkFkZFNvdXJjZVBhcnRpY2lwYW50VHlwZSA9IG5ldyBEcm9wZG93bk9wdGlvbnMoKTtcclxuICAgICAgdGhpcy5BZGRTb3VyY2VQYXJ0aWNpcGFudFR5cGUuTmFtZSA9IFwiU291cmNlUGFydGljaXBhbnREVE8uUGFydGljaXBhbnRUeXBlSXRlbUlEX0dVSURcIlxyXG4gICAgICB0aGlzLkFkZFNvdXJjZVBhcnRpY2lwYW50VHlwZS5MYWJlbEtleSA9IFwiU291cmNlUGFydGljaXBhbnRUeXBlXCJcclxuICAgICAgdGhpcy5BZGRTb3VyY2VQYXJ0aWNpcGFudFR5cGUuU2VsZWN0ZWRJdGVtcyA9IG51bGw7XHJcbiAgICAgIHRoaXMuQWRkU291cmNlUGFydGljaXBhbnRUeXBlLkRhdGFTb3VyY2UgPSB0aGlzLlBhcnRpY2lwYW50VHlwZUxpc3RcclxuICAgICAgdGhpcy5BZGRTb3VyY2VQYXJ0aWNpcGFudFR5cGUuU2luZ2xlU2VsZWN0aW9uID0gdHJ1ZTtcclxuICAgICAgdGhpcy5BZGRTb3VyY2VQYXJ0aWNpcGFudFR5cGUuQWxsb3dTZWFyY2hGaWx0ZXIgPSB0cnVlO1xyXG4gICAgICB0aGlzLkFkZFNvdXJjZVBhcnRpY2lwYW50VHlwZS5Jc1JlcXVpcmVkID0gdHJ1ZTtcclxuXHJcbiAgICAgIHRoaXMuQWRkRGVzdGluYXRpb25QYXJ0aWNpcGFudFR5cGUgPSBuZXcgRHJvcGRvd25PcHRpb25zKCk7XHJcbiAgICAgIHRoaXMuQWRkRGVzdGluYXRpb25QYXJ0aWNpcGFudFR5cGUuTmFtZSA9IFwiRGVzdGluYXRpb25QYXJ0aWNpcGFudERUTy5QYXJ0aWNpcGFudFR5cGVJdGVtSURfR1VJRFwiXHJcbiAgICAgIHRoaXMuQWRkRGVzdGluYXRpb25QYXJ0aWNpcGFudFR5cGUuTGFiZWxLZXkgPSBcIkRlc3RpbmF0aW9uUGFydGljaXBhbnRUeXBlXCJcclxuICAgICAgdGhpcy5BZGREZXN0aW5hdGlvblBhcnRpY2lwYW50VHlwZS5TZWxlY3RlZEl0ZW1zID0gbnVsbDtcclxuICAgICAgdGhpcy5BZGREZXN0aW5hdGlvblBhcnRpY2lwYW50VHlwZS5EYXRhU291cmNlID0gdGhpcy5QYXJ0aWNpcGFudFR5cGVMaXN0XHJcbiAgICAgIHRoaXMuQWRkRGVzdGluYXRpb25QYXJ0aWNpcGFudFR5cGUuU2luZ2xlU2VsZWN0aW9uID0gdHJ1ZTtcclxuICAgICAgdGhpcy5BZGREZXN0aW5hdGlvblBhcnRpY2lwYW50VHlwZS5BbGxvd1NlYXJjaEZpbHRlciA9IHRydWU7XHJcbiAgICAgIHRoaXMuQWRkRGVzdGluYXRpb25QYXJ0aWNpcGFudFR5cGUuSXNSZXF1aXJlZCA9IHRydWU7XHJcblxyXG4gICAgICB0aGlzLkFkZFNvdXJjZVBlcm1pc3Npb25TZXRMaXN0ID0gbmV3IERyb3Bkb3duT3B0aW9ucygpO1xyXG4gICAgICB0aGlzLkFkZFNvdXJjZVBlcm1pc3Npb25TZXRMaXN0Lk5hbWUgPSBcIlNvdXJjZVBhcnRpY2lwYW50RFRPLlBlcm1pc3Npb25TZXRJRF9HVUlEXCJcclxuICAgICAgdGhpcy5BZGRTb3VyY2VQZXJtaXNzaW9uU2V0TGlzdC5MYWJlbEtleSA9IFwiU291cmNlUGVybWlzc2lvblNldExpc3RcIlxyXG4gICAgICB0aGlzLkFkZFNvdXJjZVBlcm1pc3Npb25TZXRMaXN0LlNlbGVjdGVkSXRlbXMgPSBudWxsO1xyXG4gICAgICB0aGlzLkFkZFNvdXJjZVBlcm1pc3Npb25TZXRMaXN0LkRhdGFTb3VyY2UgPSB0aGlzLlBlcm1pc3Npb25TZXRMaXN0XHJcbiAgICAgIHRoaXMuQWRkU291cmNlUGVybWlzc2lvblNldExpc3QuU2luZ2xlU2VsZWN0aW9uID0gdHJ1ZTtcclxuICAgICAgdGhpcy5BZGRTb3VyY2VQZXJtaXNzaW9uU2V0TGlzdC5BbGxvd1NlYXJjaEZpbHRlciA9IHRydWU7XHJcbiAgICAgIHRoaXMuQWRkU291cmNlUGVybWlzc2lvblNldExpc3QuSXNSZXF1aXJlZCA9IHRydWU7XHJcblxyXG4gICAgICB0aGlzLkFkZERlc3RpbmF0aW9uUGVybWlzc2lvblNldExpc3QgPSBuZXcgRHJvcGRvd25PcHRpb25zKCk7XHJcbiAgICAgIHRoaXMuQWRkRGVzdGluYXRpb25QZXJtaXNzaW9uU2V0TGlzdC5OYW1lID0gXCJEZXN0aW5hdGlvblBhcnRpY2lwYW50RFRPLlBlcm1pc3Npb25TZXRJRF9HVUlEXCJcclxuICAgICAgdGhpcy5BZGREZXN0aW5hdGlvblBlcm1pc3Npb25TZXRMaXN0LkxhYmVsVmFsdWUgPSBcIkRlc3RpbmF0aW9uUGVybWlzc2lvblNldExpc3RcIlxyXG4gICAgICB0aGlzLkFkZERlc3RpbmF0aW9uUGVybWlzc2lvblNldExpc3QuTGFiZWxLZXkgPSBcIkRlc3RpbmF0aW9uUGVybWlzc2lvblNldExpc3RcIlxyXG4gICAgICB0aGlzLkFkZERlc3RpbmF0aW9uUGVybWlzc2lvblNldExpc3QuU2VsZWN0ZWRJdGVtcyA9IG51bGw7XHJcbiAgICAgIHRoaXMuQWRkRGVzdGluYXRpb25QZXJtaXNzaW9uU2V0TGlzdC5EYXRhU291cmNlID0gdGhpcy5QZXJtaXNzaW9uU2V0TGlzdFxyXG4gICAgICB0aGlzLkFkZERlc3RpbmF0aW9uUGVybWlzc2lvblNldExpc3QuU2luZ2xlU2VsZWN0aW9uID0gdHJ1ZTtcclxuICAgICAgdGhpcy5BZGREZXN0aW5hdGlvblBlcm1pc3Npb25TZXRMaXN0LkFsbG93U2VhcmNoRmlsdGVyID0gdHJ1ZTtcclxuICAgICAgdGhpcy5BZGREZXN0aW5hdGlvblBlcm1pc3Npb25TZXRMaXN0LklzUmVxdWlyZWQgPSB0cnVlO1xyXG5cclxuICAgICAgdGhpcy5BZGRTb3VyY2VVc2VyQXV0b0NvbXBsZXRlID0gbmV3IEF1dG9jb21wbGV0ZU9wdGlvbnMoKTtcclxuICAgICAgdGhpcy5BZGRTb3VyY2VVc2VyQXV0b0NvbXBsZXRlLk5hbWUgPSBcIlNvdXJjZVBhcnRpY2lwYW50RFRPLlVzZXJJRF9HVUlEXCI7XHJcbiAgICAgIHRoaXMuQWRkU291cmNlVXNlckF1dG9Db21wbGV0ZS5MYWJlbEtleSA9IFwiVXNlclwiO1xyXG4gICAgICB0aGlzLkFkZFNvdXJjZVVzZXJBdXRvQ29tcGxldGUuVHlwZSA9IElucHV0VHlwZS5UZXh0O1xyXG4gICAgICB0aGlzLkFkZFNvdXJjZVVzZXJBdXRvQ29tcGxldGUuSXNSZXF1aXJlZCA9IHRydWU7XHJcbiAgICAgIHRoaXMuQWRkU291cmNlVXNlckF1dG9Db21wbGV0ZS5WYWx1ZSA9IG51bGw7XHJcbiAgICAgIHRoaXMuQWRkU291cmNlVXNlckF1dG9Db21wbGV0ZS5Gb3JjZURpcmVjdGlvbiA9IEZvcmNlRGlyZWN0aW9uLkVuZ2xpc2g7XHJcbiAgICAgIHRoaXMuQWRkU291cmNlVXNlckF1dG9Db21wbGV0ZS5BY3Rpb25VUkwgPSB0aGlzLkFwaVVybCArIFwiQXV0b0NvbXBsZXRlVXNlclwiXHJcbiAgICAgIHRoaXMuQWRkU291cmNlVXNlckF1dG9Db21wbGV0ZS5WYWxpZGF0aW9uVG9rZW4gPSB0aGlzLmF1dGhTZXJ2aWNlLmF1dGhvcml6YXRpb25IZWFkZXJWYWx1ZSgpXHJcblxyXG4gICAgICB0aGlzLkFkZERlc3RpbmF0aW9uVXNlckF1dG9Db21wbGV0ZSA9IG5ldyBBdXRvY29tcGxldGVPcHRpb25zKCk7XHJcbiAgICAgIHRoaXMuQWRkRGVzdGluYXRpb25Vc2VyQXV0b0NvbXBsZXRlLk5hbWUgPSBcIkRlc3RpbmF0aW9uUGFydGljaXBhbnREVE8uVXNlcklEX0dVSURcIjtcclxuICAgICAgdGhpcy5BZGREZXN0aW5hdGlvblVzZXJBdXRvQ29tcGxldGUuTGFiZWxLZXkgPSBcIlVzZXJcIjtcclxuICAgICAgdGhpcy5BZGREZXN0aW5hdGlvblVzZXJBdXRvQ29tcGxldGUuVHlwZSA9IElucHV0VHlwZS5UZXh0O1xyXG4gICAgICB0aGlzLkFkZERlc3RpbmF0aW9uVXNlckF1dG9Db21wbGV0ZS5Jc1JlcXVpcmVkID0gdHJ1ZTtcclxuICAgICAgdGhpcy5BZGREZXN0aW5hdGlvblVzZXJBdXRvQ29tcGxldGUuVmFsdWUgPSBudWxsO1xyXG4gICAgICB0aGlzLkFkZERlc3RpbmF0aW9uVXNlckF1dG9Db21wbGV0ZS5BY3Rpb25VUkwgPSB0aGlzLkFwaVVybCArIFwiQXV0b0NvbXBsZXRlVXNlclwiXHJcbiAgICAgIHRoaXMuQWRkRGVzdGluYXRpb25Vc2VyQXV0b0NvbXBsZXRlLlZhbGlkYXRpb25Ub2tlbiA9IHRoaXMuYXV0aFNlcnZpY2UuYXV0aG9yaXphdGlvbkhlYWRlclZhbHVlKClcclxuXHJcbiAgICAgIHRoaXMuQWRkSXNBY3RpdmUgPSBuZXcgQ2hlY2tCb3hPcHRpb25zKCk7XHJcbiAgICAgIHRoaXMuQWRkSXNBY3RpdmUuTmFtZSA9IFwiSXNBY3RpdmVcIlxyXG4gICAgICB0aGlzLkFkZElzQWN0aXZlLkxhYmVsS2V5ID0gXCJBY3RpdmVcIlxyXG4gICAgICB0aGlzLkFkZElzQWN0aXZlLlZhbHVlID0gdHJ1ZVxyXG5cclxuICAgICAgdGhpcy5BZGRFeHBpcmVzQXQgPSBuZXcgRGF0ZVBpY2tlck9wdGlvbnMoKTtcclxuICAgICAgdGhpcy5BZGRFeHBpcmVzQXQuTmFtZSA9IFwiRXhwaXJlc0F0XCJcclxuICAgICAgdGhpcy5BZGRFeHBpcmVzQXQuTGFiZWxLZXkgPSBcIkV4cGlyZXNBdFwiXHJcbiAgICAgIHRoaXMuQWRkRXhwaXJlc0F0LklzUmVxdWlyZWQgPSB0cnVlXHJcbiAgICAgIHRoaXMuQWRkRXhwaXJlc0F0LlN0YXJ0VmlldyA9IFN0YXJ0Vmlldy5Nb250aFxyXG4gICAgICB0aGlzLkFkZEV4cGlyZXNBdC5QaWNrZXJUeXBlID0gUGlja2VyVHlwZS5DYWxlbmRhclxyXG4gICAgICB0aGlzLkFkZEV4cGlyZXNBdC5TZWxlY3RNb2RlID0gU2VsZWN0TW9kZS5TaW5nbGVcclxuICAgICAgdGhpcy5BZGRFeHBpcmVzQXQuU3RhcnREYXRlID0gbmV3IERhdGUoKVxyXG5cclxuICAgICAgdGhpcy5tb2RhbFNlcnZpY2Uub3BlbihBZGRJbXBlcnNvbmF0aW9uTW9kYWwpO1xyXG4gICAgICB0aGlzLnV0aWxpdHlTZXJ2aWNlLnN0b3BCbG9ja1VJKCk7XHJcbiAgICB9KTtcclxuXHJcblxyXG4gIH1cclxuICBnZXRBZGRJbXBlcnNvbmF0aW9uUnVsZU1vZGVsID0gKCkgPT4ge1xyXG4gICAgbGV0IHBhcmFtQXJyYXk6IGFueVtdID0gW107XHJcbiAgICBsZXQgUmVzdWx0TW9kZWwgPSB0aGlzLkFkZEltcGVyc29uYXRpb25Gb3JtLnZhbHVlIGFzIGFueTtcclxuXHJcbiAgICBsZXQgQWRkTW9kZWw6IEltcGVyc29uYXRpb25SdWxlTW9kZWwgPSBuZXcgSW1wZXJzb25hdGlvblJ1bGVNb2RlbCgpO1xyXG4gICAgQWRkTW9kZWwuU291cmNlUGFydGljaXBhbnREVE8uUGFydGljaXBhbnRUeXBlSXRlbUlEX0dVSUQgPSBSZXN1bHRNb2RlbFtcIlNvdXJjZVBhcnRpY2lwYW50RFRPLlBhcnRpY2lwYW50VHlwZUl0ZW1JRF9HVUlEXCJdXHJcbiAgICBBZGRNb2RlbC5EZXN0aW5hdGlvblBhcnRpY2lwYW50RFRPLlBhcnRpY2lwYW50VHlwZUl0ZW1JRF9HVUlEID0gUmVzdWx0TW9kZWxbXCJEZXN0aW5hdGlvblBhcnRpY2lwYW50RFRPLlBhcnRpY2lwYW50VHlwZUl0ZW1JRF9HVUlEXCJdXHJcbiAgICBBZGRNb2RlbC5FeHBpcmVzQXQgPSBSZXN1bHRNb2RlbC5FeHBpcmVzQXRcclxuICAgIEFkZE1vZGVsLklzQWN0aXZlID0gUmVzdWx0TW9kZWwuSXNBY3RpdmVcclxuICAgIGlmIChSZXN1bHRNb2RlbFtcIkRlc3RpbmF0aW9uUGFydGljaXBhbnREVE8uVXNlcklEX0dVSURcIl0pXHJcbiAgICAgIEFkZE1vZGVsLkRlc3RpbmF0aW9uUGFydGljaXBhbnREVE8uVXNlcklEX0dVSUQgPSBSZXN1bHRNb2RlbFtcIkRlc3RpbmF0aW9uUGFydGljaXBhbnREVE8uVXNlcklEX0dVSURcIl0ua2V5XHJcbiAgICBlbHNlXHJcbiAgICAgIEFkZE1vZGVsLkRlc3RpbmF0aW9uUGFydGljaXBhbnREVE8uUGVybWlzc2lvblNldElEX0dVSUQgPSBSZXN1bHRNb2RlbFtcIkRlc3RpbmF0aW9uUGFydGljaXBhbnREVE8uUGVybWlzc2lvblNldElEX0dVSURcIl1cclxuXHJcbiAgICBpZiAoUmVzdWx0TW9kZWxbXCJTb3VyY2VQYXJ0aWNpcGFudERUTy5Vc2VySURfR1VJRFwiXSlcclxuICAgICAgQWRkTW9kZWwuU291cmNlUGFydGljaXBhbnREVE8uVXNlcklEX0dVSUQgPSBSZXN1bHRNb2RlbFtcIlNvdXJjZVBhcnRpY2lwYW50RFRPLlVzZXJJRF9HVUlEXCJdLmtleVxyXG4gICAgZWxzZVxyXG4gICAgICBBZGRNb2RlbC5Tb3VyY2VQYXJ0aWNpcGFudERUTy5QZXJtaXNzaW9uU2V0SURfR1VJRCA9IFJlc3VsdE1vZGVsW1wiU291cmNlUGFydGljaXBhbnREVE8uUGVybWlzc2lvblNldElEX0dVSURcIl1cclxuICAgIHBhcmFtQXJyYXkucHVzaChBZGRNb2RlbCk7XHJcbiAgICByZXR1cm4gcGFyYW1BcnJheTtcclxuICB9XHJcblxyXG4gIGdldEFkZEltcGVyc29uYXRpb25SdWxlRnVuY3Rpb24gPSAoQWRkTW9kZWwpOiBPYnNlcnZhYmxlPGFueT4gPT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuSW1wZXJzb25hdGlvblJ1bGVTZXJ2aWNlLmFkZEltcGVyc29uYXRpb25SdWxlKEFkZE1vZGVsKVxyXG4gIH1cclxuXHJcblxyXG4gIGFkZERlc3RpbmF0aW9uUGFydGljaXBhbnRPbkNoYW5nZShrZXkpIHtcclxuICAgIGtleSA9IGtleT8udG9Mb3dlckNhc2UoKTtcclxuICAgIHN3aXRjaCAoa2V5KSB7XHJcbiAgICAgIGNhc2UgUGFydGljaXBhbnRUeXBlLlBlcm1pc3Npb25TZXQ6XHJcbiAgICAgICAgdGhpcy5BZGRTaG93RGVzdGluYXRpb25QZXJtaXNzaW9uTGlzdCA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5BZGRTaG93RGVzdGluYXRpb25Vc2VyQXV0b0NvbXBsZXRlID0gZmFsc2U7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgUGFydGljaXBhbnRUeXBlLlVzZXI6XHJcbiAgICAgICAgdGhpcy5BZGRTaG93RGVzdGluYXRpb25QZXJtaXNzaW9uTGlzdCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuQWRkU2hvd0Rlc3RpbmF0aW9uVXNlckF1dG9Db21wbGV0ZSA9IHRydWU7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG5cclxuICB9XHJcblxyXG4gIGFkZFNvdXJjZVBhcnRpY2lwYW50T25DaGFuZ2Uoa2V5KSB7XHJcbiAgICBrZXkgPSBrZXk/LnRvTG93ZXJDYXNlKCk7XHJcbiAgICBzd2l0Y2ggKGtleSkge1xyXG4gICAgICBjYXNlIFBhcnRpY2lwYW50VHlwZS5QZXJtaXNzaW9uU2V0OlxyXG4gICAgICAgIHRoaXMuQWRkU2hvd1NvdXJjZVBlcm1pc3Npb25MaXN0ID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLkFkZFNob3dTb3VyY2VVc2VyQXV0b0NvbXBsZXRlID0gZmFsc2U7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgUGFydGljaXBhbnRUeXBlLlVzZXI6XHJcbiAgICAgICAgdGhpcy5BZGRTaG93U291cmNlUGVybWlzc2lvbkxpc3QgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLkFkZFNob3dTb3VyY2VVc2VyQXV0b0NvbXBsZXRlID0gdHJ1ZTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvL0VkaXQgaW1wZXJzb25hdGlvbiBydWxlIGZ1bmN0aW9uc1xyXG4gIHNob3dFZGl0SW1wZXJzb25hdGlvbk1vZGFsKGltcGVyc29uYXRpb25JRDogc3RyaW5nLCBlZGl0SW1wZXJzb25hdGlvbk1vZGFsKSB7XHJcbiAgICB0aGlzLkltcGVyc29uYXRpb25JZCA9IGltcGVyc29uYXRpb25JRDtcclxuXHJcbiAgICB0aGlzLkltcGVyc29uYXRpb25SdWxlU2VydmljZS5nZXRFZGl0SW1wZXJzb25hdGlvblJ1bGUodGhpcy5JbXBlcnNvbmF0aW9uSWQpLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XHJcbiAgICAgIGxldCByZXN1bHRPYmogPSByZXN1bHQgYXMgYW55O1xyXG4gICAgICBsZXQgaW1wZXJzb25hdGlvbiA9IHJlc3VsdE9iai5tb2RlbDtcclxuICAgICAgbGV0IGxpc3RzID0gcmVzdWx0T2JqLmxpc3RzO1xyXG4gICAgICB0aGlzLlBlcm1pc3Npb25TZXRMaXN0ID0gbGlzdHMucGVybWlzc2lvbkxpc3Q7XHJcbiAgICAgIHRoaXMuUGFydGljaXBhbnRUeXBlTGlzdCA9IGxpc3RzLnBhcnRpY2lwYW50VHlwZUxpc3Q7XHJcblxyXG4gICAgICB0aGlzLkVkaXRJbXBlcnNvbmF0aW9uRm9ybSA9IG5ldyBGb3JtR3JvdXAoe30pXHJcblxyXG4gICAgICB0aGlzLkVkaXRJbXBlcnNvbmF0aW9uRm9ybU9wdGlvbnMgPSBuZXcgRm9ybU9wdGlvbnMoKTtcclxuICAgICAgdGhpcy5FZGl0SW1wZXJzb25hdGlvbkZvcm1PcHRpb25zLkZvcm1Hcm91cCA9IHRoaXMuRWRpdEltcGVyc29uYXRpb25Gb3JtXHJcbiAgICAgIHRoaXMuRWRpdEltcGVyc29uYXRpb25Gb3JtT3B0aW9ucy5HZXRNb2RlbEZ1bmN0aW9uID0gdGhpcy5nZXRFZGl0SW1wZXJzb25hdGlvblJ1bGVNb2RlbDtcclxuICAgICAgdGhpcy5FZGl0SW1wZXJzb25hdGlvbkZvcm1PcHRpb25zLlNlcnZpY2VTdWJtaXRGdW5jdGlvbiA9IHRoaXMuZ2V0RWRpdEltcGVyc29uYXRpb25SdWxlRnVuY3Rpb247XHJcbiAgICAgIHRoaXMuRWRpdEltcGVyc29uYXRpb25Gb3JtT3B0aW9ucy5QYWdpbmdSZWZlcmVuY2UgPSB0aGlzLnBhZ2luZ0VsZW1lbnRcclxuICAgICAgdGhpcy5FZGl0SW1wZXJzb25hdGlvbkZvcm1PcHRpb25zLlBhZ2luZ0FjdGlvbk1vZGUgPSBQYWdpbmdBY3Rpb25Nb2RlLlVwZGF0ZVxyXG5cclxuICAgICAgdGhpcy5FZGl0U2hvd0Rlc3RpbmF0aW9uUGVybWlzc2lvbkxpc3QgPSBmYWxzZTtcclxuICAgICAgdGhpcy5FZGl0U2hvd0Rlc3RpbmF0aW9uVXNlckF1dG9Db21wbGV0ZSA9IGZhbHNlO1xyXG4gICAgICB0aGlzLkVkaXRTaG93U291cmNlUGVybWlzc2lvbkxpc3QgPSBmYWxzZVxyXG4gICAgICB0aGlzLkVkaXRTaG93U291cmNlVXNlckF1dG9Db21wbGV0ZSA9IGZhbHNlXHJcblxyXG4gICAgICBpZiAoaW1wZXJzb25hdGlvbi5zb3VyY2VQYXJ0aWNpcGFudERUTy5wYXJ0aWNpcGFudFR5cGVJdGVtSURfR1VJRCAhPSBudWxsICYmIGltcGVyc29uYXRpb24uZGVzdGluYXRpb25QYXJ0aWNpcGFudERUTy5wYXJ0aWNpcGFudFR5cGVJdGVtSURfR1VJRCkge1xyXG4gICAgICAgIHRoaXMuZWRpdERlc3RpbmF0aW9uUGFydGljaXBhbnRPbkNoYW5nZShpbXBlcnNvbmF0aW9uLmRlc3RpbmF0aW9uUGFydGljaXBhbnREVE8ucGFydGljaXBhbnRUeXBlSXRlbUlEX0dVSUQpO1xyXG4gICAgICAgIHRoaXMuZWRpdFNvdXJjZVBhcnRpY2lwYW50T25DaGFuZ2UoaW1wZXJzb25hdGlvbi5zb3VyY2VQYXJ0aWNpcGFudERUTy5wYXJ0aWNpcGFudFR5cGVJdGVtSURfR1VJRCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMudXRpbGl0eVNlcnZpY2Uuc3RhcnRCbG9ja1VJKCk7XHJcblxyXG4gICAgICB0aGlzLlNvdXJjZVBhcnRpY2lwYW50SWQgPSBpbXBlcnNvbmF0aW9uLnNvdXJjZVBhcnRpY2lwYW50RFRPLmlEX0dVSUQ7XHJcbiAgICAgIHRoaXMuRGVzdGluYXRpb25QYXJ0aWNpcGFudElkID0gaW1wZXJzb25hdGlvbi5kZXN0aW5hdGlvblBhcnRpY2lwYW50RFRPLmlEX0dVSUQ7XHJcbiAgICAgIHRoaXMuRWRpdFNvdXJjZVBhcnRpY2lwYW50VHlwZSA9IG5ldyBEcm9wZG93bk9wdGlvbnMoKTtcclxuICAgICAgdGhpcy5FZGl0U291cmNlUGFydGljaXBhbnRUeXBlLk5hbWUgPSBcIlNvdXJjZVBhcnRpY2lwYW50RFRPLlBhcnRpY2lwYW50VHlwZUl0ZW1JRF9HVUlEXCJcclxuICAgICAgdGhpcy5FZGl0U291cmNlUGFydGljaXBhbnRUeXBlLkxhYmVsS2V5ID0gXCJTb3VyY2VQYXJ0aWNpcGFudFR5cGVcIlxyXG4gICAgICB0aGlzLkVkaXRTb3VyY2VQYXJ0aWNpcGFudFR5cGUuU2VsZWN0ZWRJdGVtcyA9IGltcGVyc29uYXRpb24uc291cmNlUGFydGljaXBhbnREVE8ucGFydGljaXBhbnRUeXBlSXRlbUlEX0dVSUQ/LnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgIHRoaXMuRWRpdFNvdXJjZVBhcnRpY2lwYW50VHlwZS5EYXRhU291cmNlID0gdGhpcy5QYXJ0aWNpcGFudFR5cGVMaXN0XHJcbiAgICAgIHRoaXMuRWRpdFNvdXJjZVBhcnRpY2lwYW50VHlwZS5TaW5nbGVTZWxlY3Rpb24gPSB0cnVlO1xyXG4gICAgICB0aGlzLkVkaXRTb3VyY2VQYXJ0aWNpcGFudFR5cGUuQWxsb3dTZWFyY2hGaWx0ZXIgPSB0cnVlO1xyXG4gICAgICB0aGlzLkVkaXRTb3VyY2VQYXJ0aWNpcGFudFR5cGUuSXNSZXF1aXJlZCA9IHRydWU7XHJcblxyXG4gICAgICB0aGlzLkVkaXREZXN0aW5hdGlvblBhcnRpY2lwYW50VHlwZSA9IG5ldyBEcm9wZG93bk9wdGlvbnMoKTtcclxuICAgICAgdGhpcy5FZGl0RGVzdGluYXRpb25QYXJ0aWNpcGFudFR5cGUuTmFtZSA9IFwiRGVzdGluYXRpb25QYXJ0aWNpcGFudERUTy5QYXJ0aWNpcGFudFR5cGVJdGVtSURfR1VJRFwiXHJcbiAgICAgIHRoaXMuRWRpdERlc3RpbmF0aW9uUGFydGljaXBhbnRUeXBlLkxhYmVsS2V5ID0gXCJEZXN0aW5hdGlvblBhcnRpY2lwYW50VHlwZVwiXHJcbiAgICAgIHRoaXMuRWRpdERlc3RpbmF0aW9uUGFydGljaXBhbnRUeXBlLlNlbGVjdGVkSXRlbXMgPSBpbXBlcnNvbmF0aW9uLmRlc3RpbmF0aW9uUGFydGljaXBhbnREVE8ucGFydGljaXBhbnRUeXBlSXRlbUlEX0dVSUQ/LnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgIHRoaXMuRWRpdERlc3RpbmF0aW9uUGFydGljaXBhbnRUeXBlLkRhdGFTb3VyY2UgPSB0aGlzLlBhcnRpY2lwYW50VHlwZUxpc3RcclxuICAgICAgdGhpcy5FZGl0RGVzdGluYXRpb25QYXJ0aWNpcGFudFR5cGUuU2luZ2xlU2VsZWN0aW9uID0gdHJ1ZTtcclxuICAgICAgdGhpcy5FZGl0RGVzdGluYXRpb25QYXJ0aWNpcGFudFR5cGUuQWxsb3dTZWFyY2hGaWx0ZXIgPSB0cnVlO1xyXG4gICAgICB0aGlzLkVkaXREZXN0aW5hdGlvblBhcnRpY2lwYW50VHlwZS5Jc1JlcXVpcmVkID0gdHJ1ZTtcclxuXHJcbiAgICAgIGxldCBzb3VyY2VQZXJtaXNzaW9uU2V0U2VsZWN0ZWRJdGVtO1xyXG4gICAgICBsZXQgc291cmNlVXNlck1vZGVsID0gbmV3IEF1dG9jb21wbGV0ZURUTygpO1xyXG4gICAgICBpZiAoaW1wZXJzb25hdGlvbi5zb3VyY2VQYXJ0aWNpcGFudERUTy5wYXJ0aWNpcGFudFR5cGVJdGVtSURfR1VJRD8udG9Mb3dlckNhc2UoKSA9PSBQYXJ0aWNpcGFudFR5cGUuVXNlcikge1xyXG4gICAgICAgIHNvdXJjZVVzZXJNb2RlbC5rZXkgPSBpbXBlcnNvbmF0aW9uLnNvdXJjZVBhcnRpY2lwYW50RFRPLnVzZXJJRF9HVUlEXHJcbiAgICAgICAgc291cmNlVXNlck1vZGVsLnZhbHVlID0gaW1wZXJzb25hdGlvbi5zb3VyY2VQYXJ0aWNpcGFudERUTy5wYXJ0aWNpcGFudE5hbWVTdHI7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgc291cmNlUGVybWlzc2lvblNldFNlbGVjdGVkSXRlbSA9IGltcGVyc29uYXRpb24uc291cmNlUGFydGljaXBhbnREVE8ucGVybWlzc2lvblNldElEX0dVSUQ/LnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5FZGl0U291cmNlUGVybWlzc2lvblNldExpc3QgPSBuZXcgRHJvcGRvd25PcHRpb25zKCk7XHJcbiAgICAgIHRoaXMuRWRpdFNvdXJjZVBlcm1pc3Npb25TZXRMaXN0Lk5hbWUgPSBcIlNvdXJjZVBhcnRpY2lwYW50RFRPLlBlcm1pc3Npb25TZXRJRF9HVUlEXCJcclxuICAgICAgdGhpcy5FZGl0U291cmNlUGVybWlzc2lvblNldExpc3QuTGFiZWxLZXkgPSBcIlNvdXJjZVBlcm1pc3Npb25TZXRMaXN0XCJcclxuICAgICAgdGhpcy5FZGl0U291cmNlUGVybWlzc2lvblNldExpc3QuU2VsZWN0ZWRJdGVtcyA9IHNvdXJjZVBlcm1pc3Npb25TZXRTZWxlY3RlZEl0ZW07XHJcbiAgICAgIHRoaXMuRWRpdFNvdXJjZVBlcm1pc3Npb25TZXRMaXN0LkRhdGFTb3VyY2UgPSB0aGlzLlBlcm1pc3Npb25TZXRMaXN0XHJcbiAgICAgIHRoaXMuRWRpdFNvdXJjZVBlcm1pc3Npb25TZXRMaXN0LlNpbmdsZVNlbGVjdGlvbiA9IHRydWU7XHJcbiAgICAgIHRoaXMuRWRpdFNvdXJjZVBlcm1pc3Npb25TZXRMaXN0LkFsbG93U2VhcmNoRmlsdGVyID0gdHJ1ZTtcclxuICAgICAgdGhpcy5FZGl0U291cmNlUGVybWlzc2lvblNldExpc3QuSXNSZXF1aXJlZCA9IHRydWU7XHJcblxyXG4gICAgICB0aGlzLkVkaXRTb3VyY2VVc2VyQXV0b0NvbXBsZXRlID0gbmV3IEF1dG9jb21wbGV0ZU9wdGlvbnMoKTtcclxuICAgICAgdGhpcy5FZGl0U291cmNlVXNlckF1dG9Db21wbGV0ZS5OYW1lID0gXCJTb3VyY2VQYXJ0aWNpcGFudERUTy5Vc2VySURfR1VJRFwiO1xyXG4gICAgICB0aGlzLkVkaXRTb3VyY2VVc2VyQXV0b0NvbXBsZXRlLkxhYmVsS2V5ID0gXCJVc2VyXCI7XHJcbiAgICAgIHRoaXMuRWRpdFNvdXJjZVVzZXJBdXRvQ29tcGxldGUuVHlwZSA9IElucHV0VHlwZS5UZXh0O1xyXG4gICAgICB0aGlzLkVkaXRTb3VyY2VVc2VyQXV0b0NvbXBsZXRlLklzUmVxdWlyZWQgPSB0cnVlO1xyXG4gICAgICB0aGlzLkVkaXRTb3VyY2VVc2VyQXV0b0NvbXBsZXRlLlNlbGVjdGVkVmFsdWUgPSBzb3VyY2VVc2VyTW9kZWw7XHJcbiAgICAgIHRoaXMuRWRpdFNvdXJjZVVzZXJBdXRvQ29tcGxldGUuQWN0aW9uVVJMID0gdGhpcy5BcGlVcmwgKyBcIkF1dG9Db21wbGV0ZVVzZXJcIlxyXG4gICAgICB0aGlzLkVkaXRTb3VyY2VVc2VyQXV0b0NvbXBsZXRlLlZhbGlkYXRpb25Ub2tlbiA9IHRoaXMuYXV0aFNlcnZpY2UuYXV0aG9yaXphdGlvbkhlYWRlclZhbHVlKClcclxuXHJcbiAgICAgIGxldCBkZXN0aW5hdGlvblBlcm1pc3Npb25TZXRTZWxlY3RlZEl0ZW07XHJcbiAgICAgIGxldCBkZXN0aW5hdGlvblVzZXJNb2RlbCA9IG5ldyBBdXRvY29tcGxldGVEVE8oKTtcclxuICAgICAgaWYgKGltcGVyc29uYXRpb24uZGVzdGluYXRpb25QYXJ0aWNpcGFudERUTy5wYXJ0aWNpcGFudFR5cGVJdGVtSURfR1VJRCA9PSBQYXJ0aWNpcGFudFR5cGUuVXNlcikge1xyXG4gICAgICAgIGRlc3RpbmF0aW9uVXNlck1vZGVsLmtleSA9IGltcGVyc29uYXRpb24uZGVzdGluYXRpb25QYXJ0aWNpcGFudERUTy51c2VySURfR1VJRFxyXG4gICAgICAgIGRlc3RpbmF0aW9uVXNlck1vZGVsLnZhbHVlID0gaW1wZXJzb25hdGlvbi5kZXN0aW5hdGlvblBhcnRpY2lwYW50RFRPLnBhcnRpY2lwYW50TmFtZVN0cjtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICBkZXN0aW5hdGlvblBlcm1pc3Npb25TZXRTZWxlY3RlZEl0ZW0gPSBpbXBlcnNvbmF0aW9uLmRlc3RpbmF0aW9uUGFydGljaXBhbnREVE8ucGVybWlzc2lvblNldElEX0dVSUQ/LnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5FZGl0RGVzdGluYXRpb25QZXJtaXNzaW9uU2V0TGlzdCA9IG5ldyBEcm9wZG93bk9wdGlvbnMoKTtcclxuICAgICAgdGhpcy5FZGl0RGVzdGluYXRpb25QZXJtaXNzaW9uU2V0TGlzdC5OYW1lID0gXCJEZXN0aW5hdGlvblBhcnRpY2lwYW50RFRPLlBlcm1pc3Npb25TZXRJRF9HVUlEXCJcclxuICAgICAgdGhpcy5FZGl0RGVzdGluYXRpb25QZXJtaXNzaW9uU2V0TGlzdC5MYWJlbEtleSA9IFwiRGVzdGluYXRpb25QZXJtaXNzaW9uU2V0TGlzdFwiXHJcbiAgICAgIHRoaXMuRWRpdERlc3RpbmF0aW9uUGVybWlzc2lvblNldExpc3QuU2VsZWN0ZWRJdGVtcyA9IGRlc3RpbmF0aW9uUGVybWlzc2lvblNldFNlbGVjdGVkSXRlbVxyXG4gICAgICB0aGlzLkVkaXREZXN0aW5hdGlvblBlcm1pc3Npb25TZXRMaXN0LkRhdGFTb3VyY2UgPSB0aGlzLlBlcm1pc3Npb25TZXRMaXN0XHJcbiAgICAgIHRoaXMuRWRpdERlc3RpbmF0aW9uUGVybWlzc2lvblNldExpc3QuU2luZ2xlU2VsZWN0aW9uID0gdHJ1ZTtcclxuICAgICAgdGhpcy5FZGl0RGVzdGluYXRpb25QZXJtaXNzaW9uU2V0TGlzdC5BbGxvd1NlYXJjaEZpbHRlciA9IHRydWU7XHJcbiAgICAgIHRoaXMuRWRpdERlc3RpbmF0aW9uUGVybWlzc2lvblNldExpc3QuSXNSZXF1aXJlZCA9IHRydWU7XHJcblxyXG5cclxuICAgICAgdGhpcy5FZGl0RGVzdGluYXRpb25Vc2VyQXV0b0NvbXBsZXRlID0gbmV3IEF1dG9jb21wbGV0ZU9wdGlvbnMoKTtcclxuICAgICAgdGhpcy5FZGl0RGVzdGluYXRpb25Vc2VyQXV0b0NvbXBsZXRlLk5hbWUgPSBcIkRlc3RpbmF0aW9uUGFydGljaXBhbnREVE8uVXNlcklEX0dVSURcIjtcclxuICAgICAgdGhpcy5FZGl0RGVzdGluYXRpb25Vc2VyQXV0b0NvbXBsZXRlLkxhYmVsS2V5ID0gXCJVc2VyXCI7XHJcbiAgICAgIHRoaXMuRWRpdERlc3RpbmF0aW9uVXNlckF1dG9Db21wbGV0ZS5UeXBlID0gSW5wdXRUeXBlLlRleHQ7XHJcbiAgICAgIHRoaXMuRWRpdERlc3RpbmF0aW9uVXNlckF1dG9Db21wbGV0ZS5Jc1JlcXVpcmVkID0gdHJ1ZTtcclxuICAgICAgdGhpcy5FZGl0RGVzdGluYXRpb25Vc2VyQXV0b0NvbXBsZXRlLlNlbGVjdGVkVmFsdWUgPSBkZXN0aW5hdGlvblVzZXJNb2RlbFxyXG4gICAgICB0aGlzLkVkaXREZXN0aW5hdGlvblVzZXJBdXRvQ29tcGxldGUuQWN0aW9uVVJMID0gdGhpcy5BcGlVcmwgKyBcIkF1dG9Db21wbGV0ZVVzZXJcIlxyXG4gICAgICB0aGlzLkVkaXREZXN0aW5hdGlvblVzZXJBdXRvQ29tcGxldGUuVmFsaWRhdGlvblRva2VuID0gdGhpcy5hdXRoU2VydmljZS5hdXRob3JpemF0aW9uSGVhZGVyVmFsdWUoKVxyXG5cclxuICAgICAgdGhpcy5FZGl0SXNBY3RpdmUgPSBuZXcgQ2hlY2tCb3hPcHRpb25zKCk7XHJcbiAgICAgIHRoaXMuRWRpdElzQWN0aXZlLk5hbWUgPSBcIklzQWN0aXZlXCJcclxuICAgICAgdGhpcy5FZGl0SXNBY3RpdmUuTGFiZWxLZXkgPSBcIkFjdGl2ZVwiXHJcbiAgICAgIHRoaXMuRWRpdElzQWN0aXZlLlZhbHVlID0gaW1wZXJzb25hdGlvbi5pc0FjdGl2ZVxyXG5cclxuICAgICAgdGhpcy5FZGl0RXhwaXJlc0F0ID0gbmV3IERhdGVQaWNrZXJPcHRpb25zKCk7XHJcbiAgICAgIHRoaXMuRWRpdEV4cGlyZXNBdC5OYW1lID0gXCJFeHBpcmVzQXRcIlxyXG4gICAgICB0aGlzLkVkaXRFeHBpcmVzQXQuTGFiZWxLZXkgPSBcIkV4cGlyZXNBdFwiXHJcbiAgICAgIHRoaXMuRWRpdEV4cGlyZXNBdC5Jc1JlcXVpcmVkID0gdHJ1ZVxyXG4gICAgICB0aGlzLkVkaXRFeHBpcmVzQXQuVmFsdWUgPSBpbXBlcnNvbmF0aW9uLmV4cGlyZXNBdFxyXG4gICAgICB0aGlzLkVkaXRFeHBpcmVzQXQuU3RhcnRWaWV3ID0gU3RhcnRWaWV3Lk1vbnRoXHJcbiAgICAgIHRoaXMuRWRpdEV4cGlyZXNBdC5QaWNrZXJUeXBlID0gUGlja2VyVHlwZS5DYWxlbmRhclxyXG4gICAgICB0aGlzLkVkaXRFeHBpcmVzQXQuU2VsZWN0TW9kZSA9IFNlbGVjdE1vZGUuU2luZ2xlXHJcbiAgICAgIHRoaXMuRWRpdEV4cGlyZXNBdC5TdGFydERhdGUgPSBuZXcgRGF0ZSgpXHJcblxyXG5cclxuICAgICAgdGhpcy5tb2RhbFNlcnZpY2Uub3BlbihlZGl0SW1wZXJzb25hdGlvbk1vZGFsKTtcclxuICAgICAgdGhpcy51dGlsaXR5U2VydmljZS5zdG9wQmxvY2tVSSgpXHJcbiAgICB9KTtcclxuXHJcbiAgfVxyXG5cclxuICBnZXRFZGl0SW1wZXJzb25hdGlvblJ1bGVNb2RlbCA9ICgpID0+IHtcclxuICAgIGxldCBwYXJhbUFycmF5OiBhbnlbXSA9IFtdO1xyXG4gICAgbGV0IFJlc3VsdE1vZGVsID0gdGhpcy5FZGl0SW1wZXJzb25hdGlvbkZvcm0udmFsdWUgYXMgYW55O1xyXG5cclxuICAgIGxldCBFZGl0TW9kZWw6IEltcGVyc29uYXRpb25SdWxlTW9kZWwgPSBuZXcgSW1wZXJzb25hdGlvblJ1bGVNb2RlbCgpO1xyXG4gICAgRWRpdE1vZGVsLklEX0dVSUQgPSB0aGlzLkltcGVyc29uYXRpb25JZFxyXG4gICAgRWRpdE1vZGVsLkRlc3RpbmF0aW9uUGFydGljaXBhbnREVE8uSURfR1VJRCA9IHRoaXMuRGVzdGluYXRpb25QYXJ0aWNpcGFudElkXHJcbiAgICBFZGl0TW9kZWwuU291cmNlUGFydGljaXBhbnREVE8uSURfR1VJRCA9IHRoaXMuU291cmNlUGFydGljaXBhbnRJZFxyXG4gICAgRWRpdE1vZGVsLlNvdXJjZVBhcnRpY2lwYW50RFRPLlBhcnRpY2lwYW50VHlwZUl0ZW1JRF9HVUlEID0gUmVzdWx0TW9kZWxbXCJTb3VyY2VQYXJ0aWNpcGFudERUTy5QYXJ0aWNpcGFudFR5cGVJdGVtSURfR1VJRFwiXVxyXG4gICAgRWRpdE1vZGVsLkRlc3RpbmF0aW9uUGFydGljaXBhbnREVE8uUGFydGljaXBhbnRUeXBlSXRlbUlEX0dVSUQgPSBSZXN1bHRNb2RlbFtcIkRlc3RpbmF0aW9uUGFydGljaXBhbnREVE8uUGFydGljaXBhbnRUeXBlSXRlbUlEX0dVSURcIl1cclxuICAgIEVkaXRNb2RlbC5FeHBpcmVzQXQgPSBSZXN1bHRNb2RlbC5FeHBpcmVzQXRcclxuICAgIEVkaXRNb2RlbC5Jc0FjdGl2ZSA9IFJlc3VsdE1vZGVsLklzQWN0aXZlXHJcbiAgICBpZiAoRWRpdE1vZGVsLkRlc3RpbmF0aW9uUGFydGljaXBhbnREVE8uUGFydGljaXBhbnRUeXBlSXRlbUlEX0dVSUQgPT0gUGFydGljaXBhbnRUeXBlLlVzZXIpXHJcbiAgICAgIEVkaXRNb2RlbC5EZXN0aW5hdGlvblBhcnRpY2lwYW50RFRPLlVzZXJJRF9HVUlEID0gUmVzdWx0TW9kZWxbXCJEZXN0aW5hdGlvblBhcnRpY2lwYW50RFRPLlVzZXJJRF9HVUlEXCJdLmtleVxyXG4gICAgZWxzZVxyXG4gICAgICBFZGl0TW9kZWwuRGVzdGluYXRpb25QYXJ0aWNpcGFudERUTy5QZXJtaXNzaW9uU2V0SURfR1VJRCA9IFJlc3VsdE1vZGVsW1wiRGVzdGluYXRpb25QYXJ0aWNpcGFudERUTy5QZXJtaXNzaW9uU2V0SURfR1VJRFwiXVxyXG4gICAgaWYgKEVkaXRNb2RlbC5Tb3VyY2VQYXJ0aWNpcGFudERUTy5QYXJ0aWNpcGFudFR5cGVJdGVtSURfR1VJRCA9PSBQYXJ0aWNpcGFudFR5cGUuVXNlcilcclxuICAgICAgRWRpdE1vZGVsLlNvdXJjZVBhcnRpY2lwYW50RFRPLlVzZXJJRF9HVUlEID0gUmVzdWx0TW9kZWxbXCJTb3VyY2VQYXJ0aWNpcGFudERUTy5Vc2VySURfR1VJRFwiXS5rZXlcclxuICAgIGVsc2VcclxuICAgICAgRWRpdE1vZGVsLlNvdXJjZVBhcnRpY2lwYW50RFRPLlBlcm1pc3Npb25TZXRJRF9HVUlEID0gUmVzdWx0TW9kZWxbXCJTb3VyY2VQYXJ0aWNpcGFudERUTy5QZXJtaXNzaW9uU2V0SURfR1VJRFwiXVxyXG4gICAgcGFyYW1BcnJheS5wdXNoKEVkaXRNb2RlbCk7XHJcbiAgICByZXR1cm4gcGFyYW1BcnJheTtcclxuICB9XHJcblxyXG4gIGdldEVkaXRJbXBlcnNvbmF0aW9uUnVsZUZ1bmN0aW9uID0gKEVkaXRNb2RlbCk6IE9ic2VydmFibGU8YW55PiA9PiB7XHJcbiAgICByZXR1cm4gdGhpcy5JbXBlcnNvbmF0aW9uUnVsZVNlcnZpY2UuZWRpdEltcGVyc29uYXRpb25SdWxlKEVkaXRNb2RlbClcclxuICB9XHJcblxyXG4gIGVkaXREZXN0aW5hdGlvblBhcnRpY2lwYW50T25DaGFuZ2Uoa2V5KSB7XHJcbiAgICBrZXkgPSBrZXk/LnRvTG93ZXJDYXNlKCk7XHJcbiAgICBzd2l0Y2ggKGtleSkge1xyXG4gICAgICBjYXNlIFBhcnRpY2lwYW50VHlwZS5QZXJtaXNzaW9uU2V0OlxyXG4gICAgICAgIHRoaXMuRWRpdFNob3dEZXN0aW5hdGlvblBlcm1pc3Npb25MaXN0ID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLkVkaXRTaG93RGVzdGluYXRpb25Vc2VyQXV0b0NvbXBsZXRlID0gZmFsc2U7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgUGFydGljaXBhbnRUeXBlLlVzZXI6XHJcbiAgICAgICAgdGhpcy5FZGl0U2hvd0Rlc3RpbmF0aW9uUGVybWlzc2lvbkxpc3QgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLkVkaXRTaG93RGVzdGluYXRpb25Vc2VyQXV0b0NvbXBsZXRlID0gdHJ1ZTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGVkaXRTb3VyY2VQYXJ0aWNpcGFudE9uQ2hhbmdlKGtleSkge1xyXG4gICAga2V5ID0ga2V5Py50b0xvd2VyQ2FzZSgpO1xyXG4gICAgc3dpdGNoIChrZXkpIHtcclxuICAgICAgY2FzZSBQYXJ0aWNpcGFudFR5cGUuUGVybWlzc2lvblNldDpcclxuICAgICAgICB0aGlzLkVkaXRTaG93U291cmNlUGVybWlzc2lvbkxpc3QgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuRWRpdFNob3dTb3VyY2VVc2VyQXV0b0NvbXBsZXRlID0gZmFsc2U7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgUGFydGljaXBhbnRUeXBlLlVzZXI6XHJcbiAgICAgICAgdGhpcy5FZGl0U2hvd1NvdXJjZVBlcm1pc3Npb25MaXN0ID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5FZGl0U2hvd1NvdXJjZVVzZXJBdXRvQ29tcGxldGUgPSB0cnVlO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy9EZWxldGUgSW1wZXJzb25hdGlvblJ1bGVcclxuICBzaG93RGVsZXRlSW1wZXJzb25hdGlvbk1vZGFsKGltcGVyc29uYXRpb25SdWxlSUQ6IHN0cmluZykge1xyXG4gICAgdGhpcy5kZWxldGVJbXBlcnNvbmF0aW9uUnVsZUlkID0gaW1wZXJzb25hdGlvblJ1bGVJRDtcclxuXHJcbiAgICAvL2FycmF5IHNlbnQgdG8gc2VydmljZSBmdW5jdGlvblxyXG4gICAgbGV0IHBhcmFtQXJyYXk6IGFueVtdID0gW107XHJcbiAgICBwYXJhbUFycmF5LnB1c2godGhpcy5kZWxldGVJbXBlcnNvbmF0aW9uUnVsZUlkKTtcclxuXHJcbiAgICB0aGlzLkRlbGV0ZUNvbmZpcm1hdGlvbk9wdGlvbnMgPSBuZXcgQ29uZmlybWF0aW9uTW9kYWxPcHRpb25zKCk7XHJcbiAgICB0aGlzLkRlbGV0ZUNvbmZpcm1hdGlvbk9wdGlvbnMuU2VydmljZVN1Ym1pdEZ1bmN0aW9uID0gdGhpcy5kZWxldGVJbXBlcnNvbmF0aW9uO1xyXG4gICAgdGhpcy5EZWxldGVDb25maXJtYXRpb25PcHRpb25zLlNlcnZpY2VTdWJtaXRNb2RlbCA9IHBhcmFtQXJyYXk7XHJcbiAgICB0aGlzLkRlbGV0ZUNvbmZpcm1hdGlvbk9wdGlvbnMuUGFnaW5nUmVmZXJlbmNlID0gdGhpcy5wYWdpbmdFbGVtZW50O1xyXG5cclxuICAgIHRoaXMuZGVsZXRlQ29udHJvbExvYWRlZCA9IHRydWU7XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy5Db25maXJtYXRpb25Nb2RhbENvbnRyb2wuc2hvd01vZGFsKCk7XHJcbiAgICB9LCAyMDApO1xyXG4gIH1cclxuXHJcbiAgZGVsZXRlSW1wZXJzb25hdGlvbiA9IChpZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxhbnk+ID0+IHtcclxuICAgIHJldHVybiB0aGlzLkltcGVyc29uYXRpb25SdWxlU2VydmljZS5kZWxldGVJbXBlcnNvbmF0aW9uUnVsZShpZCk7XHJcbiAgfVxyXG5cclxuICAvL09uIGRlc3Ryb3lcclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMucmVxdWVzdEhhbmRsZXJTZXJ2aWNlLmRlc3Ryb3lIYW5kbGVyKCk7XHJcbiAgfVxyXG5cclxufVxyXG4iLCI8YmxvY2stdWk+PC9ibG9jay11aT5cclxuPCEtLSBQYWdlIENvbnRlbnQgLS0+XHJcbjxkaXYgKm5nSWY9XCJTaG93UGFnZUNvbnRlbnRcIiBjbGFzcz1cImNvbnRhaW5lci1mbHVpZFwiPlxyXG4gIDxkaXYgY2xhc3M9XCJjYXJkIGNhcmQtY3VzdG9tLWhcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJjYXJkLWhlYWRlciBib3JkZXItMCBwdC01XCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLXRpdGxlIGFsaWduLWl0ZW1zLXN0YXJ0IGZsZXgtY29sdW1uXCIgKm5nSWY9XCJJc0ZpbHRlckxvYWRlZFwiPlxyXG4gICAgICAgIDxmb3JtIFtmb3JtR3JvdXBdPVwiSW1wZXJzb25hdGlvbkZvcm1cIj5cclxuICAgICAgICAgIDwhLS0oT25DaGFuZ2UpPVwic2VhcmNoQ2xpZW50U2lkZSgkZXZlbnQpXCIgLS0+XHJcbiAgICAgICAgICA8QkJTRi1UZXh0Qm94IFtvcHRpb25zXT1cInNlYXJjaFRleHRCb3hcIiBbZ3JvdXBdPVwiSW1wZXJzb25hdGlvbkZvcm1cIj48L0JCU0YtVGV4dEJveD5cclxuICAgICAgICA8L2Zvcm0+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiY2FyZC10b29sYmFyXCI+XHJcbiAgICAgICAgPCEtLSBiZWdpbjo6TWVudSAtLT5cclxuICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tc20gYnRuLXByaW1hcnlcIiB0aXRsZT1cIkFkZFwiIChjbGljayk9XCJzaG93QWRkSW1wZXJzb25hdGlvbk1vZGFsKEFkZEltcGVyc29uYXRpb25Nb2RhbClcIj5cclxuICAgICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLXBsdXMgbWUtMVwiPjwvaT5cclxuICAgICAgICAgIHt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkFkZFwiKX19XHJcbiAgICAgICAgPC9idXR0b24+XHJcblxyXG4gICAgICAgIDwhLS0gZW5kOjpNZW51IC0tPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cImNhcmQtYm9keSBweS0zXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1yZXNwb25zaXZlXCI+XHJcbiAgICAgICAgPCEtLWJlZ2luOjpQZXJtaXNzaW9uIGxpc3QtLT5cclxuICAgICAgICA8dGFibGUgY2xhc3M9XCJ0YWJsZSBhbGlnbi1taWRkbGUgdGFibGUtcm93LWRhc2hlZCBmcy02IGd5LTUgZGF0YVRhYmxlIG5vLWZvb3RlclwiPlxyXG4gICAgICAgICAgPHRoZWFkPlxyXG4gICAgICAgICAgICA8dHIgY2xhc3M9XCJ0ZXh0LXN0YXJ0IHRleHQtZ3JheS00MDAgZnctYm9sZGVyIGZzLTcgdGV4dC11cHBlcmNhc2UgZ3MtMFwiPlxyXG5cclxuICAgICAgICAgICAgICA8dGggY2xhc3M9XCJtaW4tdy0xNTBweFwiPiBbe3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiUGFydGljaXBhbnRUeXBlXCIpfX1dIHt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIlNvdXJjZVwiKX19PC90aD5cclxuICAgICAgICAgICAgICA8dGggY2xhc3M9XCJtaW4tdy0xNTBweFwiPiBbe3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiUGFydGljaXBhbnRUeXBlXCIpfX1dIHt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkRlc3RpbmF0aW9uXCIpfX08L3RoPlxyXG4gICAgICAgICAgICAgIDx0aCBjbGFzcz1cIm1pbi13LTE1MHB4XCI+e3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiRXhwaXJlc0F0XCIpfX08L3RoPlxyXG4gICAgICAgICAgICAgIDx0aCBjbGFzcz1cIm1pbi13LTE1MHB4XCI+e3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiQWN0aXZlXCIpfX08L3RoPlxyXG4gICAgICAgICAgICAgIDx0aCBjbGFzcz1cIm1pbi13LTUwcHhcIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJBY3Rpb25cIil9fTwvdGg+XHJcbiAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICA8L3RoZWFkPlxyXG4gICAgICAgICAgPHRib2R5IGlkPVwibGlzdGluZ0NvbnRhaW5lclwiIGNsYXNzPVwiZnctYm9sZCB0ZXh0LWdyYXktNjAwIGJvcmRlci0wXCI+XHJcblxyXG4gICAgICAgICAgICA8dHIgKm5nRm9yPVwibGV0IEltcGVyc29uYXRpb24gb2YgY2xpZW50U2lkZVBhZ2luZ1Jlc3VsdFwiPlxyXG5cclxuICAgICAgICAgICAgICA8dGQ+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtZGFya1wiPlxyXG4gICAgICAgICAgICAgICAgICBbe3tJbXBlcnNvbmF0aW9uLnNvdXJjZVBhcnRpY2lwYW50RFRPLnBhcnRpY2lwYW50VHlwZUl0ZW1OYW1lU3RyfX1dIHt7SW1wZXJzb25hdGlvbi5zb3VyY2VQYXJ0aWNpcGFudERUTy5wYXJ0aWNpcGFudE5hbWVTdHJ9fVxyXG4gICAgICAgICAgICAgICAgPC9zcGFuPlxyXG5cclxuICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgIDx0ZD4gIFt7e0ltcGVyc29uYXRpb24uZGVzdGluYXRpb25QYXJ0aWNpcGFudERUTy5wYXJ0aWNpcGFudFR5cGVJdGVtTmFtZVN0cn19XSB7e0ltcGVyc29uYXRpb24uZGVzdGluYXRpb25QYXJ0aWNpcGFudERUTy5wYXJ0aWNpcGFudE5hbWVTdHJ9fTwvdGQ+XHJcblxyXG4gICAgICAgICAgICAgIDx0ZD57e0ltcGVyc29uYXRpb24uZXhwaXJlc0F0fX08L3RkPlxyXG4gICAgICAgICAgICAgIDx0ZD57e0ltcGVyc29uYXRpb24uaXNBY3RpdmV9fTwvdGQ+XHJcblxyXG4gICAgICAgICAgICAgIDx0ZD5cclxuXHJcbiAgICAgICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1idXR0b24gW21hdE1lbnVUcmlnZ2VyRm9yXT1cIm1lbnVcIiBjbGFzcz1cImJ0biBidG4tc20gYnRuLWljb24gYnRuLWxpZ2h0IGJ0bi1hY3RpdmUtbGlnaHQtcHJpbWFyeVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtZWxsaXBzaXMtaFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cclxuICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgIDxtYXQtbWVudSAjbWVudT1cIm1hdE1lbnVcIj5cclxuICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz1cImRyb3AtaXRlbSBweC0zXCIgbmdiRHJvcGRvd25JdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInNob3dFZGl0SW1wZXJzb25hdGlvbk1vZGFsKEltcGVyc29uYXRpb24uaURfR1VJRCxFZGl0SW1wZXJzb25hdGlvbk1vZGFsKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkcm9wLWxpbmsgcHgtM1wiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkVkaXRcIil9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2E+XHJcbiAgICAgICAgICAgICAgICAgICAgPGEgbmdiRHJvcGRvd25JdGVtIGNsYXNzPVwiZHJvcC1pdGVtIHB4LTNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzaG93RGVsZXRlSW1wZXJzb25hdGlvbk1vZGFsKEltcGVyc29uYXRpb24uaURfR1VJRClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZHJvcC1saW5rIHB4LTNcIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJEZWxldGVcIil9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2E+XHJcbiAgICAgICAgICAgICAgICAgIDwvbWF0LW1lbnU+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICA8dHIgKm5nSWY9XCJjbGllbnRTaWRlUGFnaW5nUmVzdWx0Lmxlbmd0aCA9PSAwXCI+XHJcbiAgICAgICAgICAgICAgPHRkIGNvbHNwYW49XCI1XCI+XHJcbiAgICAgICAgICAgICAgICA8bGliLWVtcHR5LWRhdGE+PC9saWItZW1wdHktZGF0YT5cclxuICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgPC90Ym9keT5cclxuICAgICAgICA8L3RhYmxlPlxyXG5cclxuICAgICAgICA8IS0tZW5kOjpQZXJtaXNzaW9uIGxpc3QtLT5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY2FyZC1mb290ZXIgYm9yZGVyLTBcIj5cclxuICAgICAgPEJCU0YtUGFnaW5nIChJdGVtcyk9XCJzZXRJbXBlcnNvbmF0aW9uTGlzdFJlc3VsdCgkZXZlbnQpXCIgKm5nSWY9XCJJc0ZpbHRlckxvYWRlZFwiXHJcbiAgICAgICAgICAgICAgICAgICBbb3B0aW9uc109XCJJbXBlcnNvbmF0aW9uUGFnaW5nXCIgW2dyb3VwXT1cIkltcGVyc29uYXRpb25Gb3JtXCIgI0ltcGVyc29uYXRpb25QYWdpbmdWaWV3RWxlbWVudD5cclxuICAgICAgPC9CQlNGLVBhZ2luZz5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG5cclxuPC9kaXY+XHJcbjwhLS0gQWRkIE1vZGFsIC0tPlxyXG48bmctdGVtcGxhdGUgI0FkZEltcGVyc29uYXRpb25Nb2RhbCBsZXQtbW9kYWw+XHJcbiAgPGRpdiBjbGFzcz1cIm1vZGFsLWhlYWRlciBwYi0wIGJvcmRlci0wIGp1c3RpZnktY29udGVudC1lbmRcIj5cclxuICAgIDxoNSBjbGFzcz1cIm1vZGFsLXRpdGxlXCIgaWQ9XCJleGFtcGxlTW9kYWxMYWJlbFwiPjwvaDU+XHJcbiAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBkYXRhLWRpc21pc3M9XCJtb2RhbFwiIGFyaWEtbGFiZWw9XCJDbG9zZVwiIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4taWNvbiBidG4tYWN0aXZlLWNvbG9yLXByaW1hcnlcIiAoY2xpY2spPVwibW9kYWwuZGlzbWlzcygpXCI+XHJcbiAgICAgIDxzcGFuIGNsYXNzPVwic3ZnLWljb24gc3ZnLWljb24tMVwiPlxyXG4gICAgICAgIDxzcGFuIFtpbmxpbmVTVkddPVwiJy4vc3JjL2Fzc2V0cy9pbWFnZXMvYXJyMDYxLnN2ZydcIj48L3NwYW4+XHJcbiAgICAgIDwvc3Bhbj5cclxuICAgIDwvYnV0dG9uPlxyXG4gIDwvZGl2PlxyXG4gIDxkaXYgY2xhc3M9XCJtb2RhbC1ib2R5IHNjcm9sbC15IHB4LTEwIHB4LWxnLTE1IHB0LTAgcGItMTVcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJtYi0xMyB0ZXh0LWNlbnRlclwiPlxyXG4gICAgICA8aDEgY2xhc3M9XCJtYi0zXCI+e3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiQWRkXCIpfX0ge3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiSW1wZXJzb25hdGlvblJ1bGVcIil9fTwvaDE+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8QkJTRi1Gb3JtIFtvcHRpb25zXT1cIkFkZEltcGVyc29uYXRpb25Gb3JtT3B0aW9uc1wiPlxyXG5cclxuICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTJcIj5cclxuICAgICAgICAgIDxCQlNGLURyb3Bkb3duTGlzdCBbb3B0aW9uc109XCJBZGRTb3VyY2VQYXJ0aWNpcGFudFR5cGVcIiAoT25DaGFuZ2UpPVwiYWRkU291cmNlUGFydGljaXBhbnRPbkNoYW5nZSgkZXZlbnQpXCIgW2dyb3VwXT1cIkFkZEltcGVyc29uYXRpb25Gb3JtXCI+XHJcbiAgICAgICAgICA8L0JCU0YtRHJvcGRvd25MaXN0PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTJcIj5cclxuICAgICAgICAgIDxCQlNGLURyb3Bkb3duTGlzdCBbb3B0aW9uc109XCJBZGRTb3VyY2VQZXJtaXNzaW9uU2V0TGlzdFwiICpuZ0lmPVwiQWRkU2hvd1NvdXJjZVBlcm1pc3Npb25MaXN0XCIgW2dyb3VwXT1cIkFkZEltcGVyc29uYXRpb25Gb3JtXCI+XHJcbiAgICAgICAgICA8L0JCU0YtRHJvcGRvd25MaXN0PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTJcIj5cclxuICAgICAgICAgIDxCQlNGLUF1dG9jb21wbGV0ZVRleHRCb3ggW29wdGlvbnNdPVwiQWRkU291cmNlVXNlckF1dG9Db21wbGV0ZVwiICpuZ0lmPVwiQWRkU2hvd1NvdXJjZVVzZXJBdXRvQ29tcGxldGVcIiBbZ3JvdXBdPVwiQWRkSW1wZXJzb25hdGlvbkZvcm1cIj5cclxuICAgICAgICAgIDwvQkJTRi1BdXRvY29tcGxldGVUZXh0Qm94PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyXCI+XHJcbiAgICAgICAgICA8QkJTRi1Ecm9wZG93bkxpc3QgW29wdGlvbnNdPVwiQWRkRGVzdGluYXRpb25QYXJ0aWNpcGFudFR5cGVcIiAoT25DaGFuZ2UpPVwiYWRkRGVzdGluYXRpb25QYXJ0aWNpcGFudE9uQ2hhbmdlKCRldmVudClcIiBbZ3JvdXBdPVwiQWRkSW1wZXJzb25hdGlvbkZvcm1cIj5cclxuICAgICAgICAgIDwvQkJTRi1Ecm9wZG93bkxpc3Q+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMlwiPlxyXG4gICAgICAgICAgPEJCU0YtRHJvcGRvd25MaXN0IFtvcHRpb25zXT1cIkFkZERlc3RpbmF0aW9uUGVybWlzc2lvblNldExpc3RcIiAqbmdJZj1cIkFkZFNob3dEZXN0aW5hdGlvblBlcm1pc3Npb25MaXN0XCIgW2dyb3VwXT1cIkFkZEltcGVyc29uYXRpb25Gb3JtXCI+XHJcbiAgICAgICAgICA8L0JCU0YtRHJvcGRvd25MaXN0PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTJcIj5cclxuICAgICAgICAgIDxCQlNGLUF1dG9jb21wbGV0ZVRleHRCb3ggW29wdGlvbnNdPVwiQWRkRGVzdGluYXRpb25Vc2VyQXV0b0NvbXBsZXRlXCIgKm5nSWY9XCJBZGRTaG93RGVzdGluYXRpb25Vc2VyQXV0b0NvbXBsZXRlXCIgW2dyb3VwXT1cIkFkZEltcGVyc29uYXRpb25Gb3JtXCI+XHJcbiAgICAgICAgICA8L0JCU0YtQXV0b2NvbXBsZXRlVGV4dEJveD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyXCI+XHJcbiAgICAgICAgICA8QkJTRi1DaGVja0JveCBbb3B0aW9uc109XCJBZGRJc0FjdGl2ZVwiIFtncm91cF09XCJBZGRJbXBlcnNvbmF0aW9uRm9ybVwiPlxyXG4gICAgICAgICAgPC9CQlNGLUNoZWNrQm94PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyXCI+XHJcbiAgICAgICAgICA8QkJTRi1EYXRlVGltZVBpY2tlciBbb3B0aW9uc109XCJBZGRFeHBpcmVzQXRcIiBbZ3JvdXBdPVwiQWRkSW1wZXJzb25hdGlvbkZvcm1cIj5cclxuXHJcbiAgICAgICAgICA8L0JCU0YtRGF0ZVRpbWVQaWNrZXI+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwidGV4dC1jZW50ZXIgcHQtN1wiPlxyXG4gICAgICAgIDxidXR0b24gQ2xvc2VJbXBlcnNvbmF0aW9uTW9kYWwgaWQ9XCJDbG9zZUltcGVyc29uYXRpb25Nb2RhbFwiIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tbGlnaHQgbWUtMyBidG4tc21cIlxyXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIm1vZGFsLmRpc21pc3MoKVwiPlxyXG4gICAgICAgICAge3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiQ2FuY2VsTGFiZWxcIil9fVxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDxidXR0b24gdHlwZT1cInN1Ym1pdFwiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IGJ0bi1zbVwiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIlNhdmVMYWJlbFwiKX19PC9idXR0b24+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9CQlNGLUZvcm0+XHJcbiAgPC9kaXY+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48IS0tRWRpdCBNb2RhbC0tPlxyXG48bmctdGVtcGxhdGUgI0VkaXRJbXBlcnNvbmF0aW9uTW9kYWwgbGV0LW1vZGFsPlxyXG4gIDxkaXYgY2xhc3M9XCJtb2RhbC1oZWFkZXIgcGItMCBib3JkZXItMCBqdXN0aWZ5LWNvbnRlbnQtZW5kXCI+XHJcbiAgICA8aDUgY2xhc3M9XCJtb2RhbC10aXRsZVwiIGlkPVwiZXhhbXBsZU1vZGFsTGFiZWxcIj48L2g1PlxyXG4gICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgZGF0YS1kaXNtaXNzPVwibW9kYWxcIiBhcmlhLWxhYmVsPVwiQ2xvc2VcIiBjbGFzcz1cImJ0biBidG4tc20gYnRuLWljb24gYnRuLWFjdGl2ZS1jb2xvci1wcmltYXJ5XCIgKGNsaWNrKT1cIm1vZGFsLmRpc21pc3MoKVwiPlxyXG4gICAgICA8c3BhbiBjbGFzcz1cInN2Zy1pY29uIHN2Zy1pY29uLTFcIj5cclxuICAgICAgICA8c3BhbiBbaW5saW5lU1ZHXT1cIicuL3NyYy9hc3NldHMvaW1hZ2VzL2FycjA2MS5zdmcnXCI+PC9zcGFuPlxyXG4gICAgICA8L3NwYW4+XHJcbiAgICA8L2J1dHRvbj5cclxuICA8L2Rpdj5cclxuICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keSBzY3JvbGwteSBweC0xMCBweC1sZy0xNSBwdC0wIHBiLTE1XCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwibWItMTMgdGV4dC1jZW50ZXJcIj5cclxuICAgICAgPGgxIGNsYXNzPVwibWItM1wiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkVkaXRcIil9fSB7e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJJbXBlcnNvbmF0aW9uUnVsZVwiKX19PC9oMT5cclxuICAgIDwvZGl2PlxyXG4gICAgPEJCU0YtRm9ybSBbb3B0aW9uc109XCJFZGl0SW1wZXJzb25hdGlvbkZvcm1PcHRpb25zXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyXCI+XHJcbiAgICAgICAgICA8QkJTRi1Ecm9wZG93bkxpc3QgW29wdGlvbnNdPVwiRWRpdFNvdXJjZVBhcnRpY2lwYW50VHlwZVwiIChPbkNoYW5nZSk9XCJlZGl0U291cmNlUGFydGljaXBhbnRPbkNoYW5nZSgkZXZlbnQpXCIgW2dyb3VwXT1cIkVkaXRJbXBlcnNvbmF0aW9uRm9ybVwiPlxyXG4gICAgICAgICAgPC9CQlNGLURyb3Bkb3duTGlzdD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyXCI+XHJcbiAgICAgICAgICA8QkJTRi1Ecm9wZG93bkxpc3QgW29wdGlvbnNdPVwiRWRpdFNvdXJjZVBlcm1pc3Npb25TZXRMaXN0XCIgKm5nSWY9XCJFZGl0U2hvd1NvdXJjZVBlcm1pc3Npb25MaXN0XCIgW2dyb3VwXT1cIkVkaXRJbXBlcnNvbmF0aW9uRm9ybVwiPlxyXG4gICAgICAgICAgPC9CQlNGLURyb3Bkb3duTGlzdD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyXCI+XHJcbiAgICAgICAgICA8QkJTRi1BdXRvY29tcGxldGVUZXh0Qm94IFtvcHRpb25zXT1cIkVkaXRTb3VyY2VVc2VyQXV0b0NvbXBsZXRlXCIgKm5nSWY9XCJFZGl0U2hvd1NvdXJjZVVzZXJBdXRvQ29tcGxldGVcIiBbZ3JvdXBdPVwiRWRpdEltcGVyc29uYXRpb25Gb3JtXCI+XHJcbiAgICAgICAgICA8L0JCU0YtQXV0b2NvbXBsZXRlVGV4dEJveD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyXCI+XHJcbiAgICAgICAgICA8QkJTRi1Ecm9wZG93bkxpc3QgW29wdGlvbnNdPVwiRWRpdERlc3RpbmF0aW9uUGFydGljaXBhbnRUeXBlXCIgKE9uQ2hhbmdlKT1cImVkaXREZXN0aW5hdGlvblBhcnRpY2lwYW50T25DaGFuZ2UoJGV2ZW50KVwiIFtncm91cF09XCJFZGl0SW1wZXJzb25hdGlvbkZvcm1cIj5cclxuICAgICAgICAgIDwvQkJTRi1Ecm9wZG93bkxpc3Q+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMlwiPlxyXG4gICAgICAgICAgPEJCU0YtRHJvcGRvd25MaXN0IFtvcHRpb25zXT1cIkVkaXREZXN0aW5hdGlvblBlcm1pc3Npb25TZXRMaXN0XCIgKm5nSWY9XCJFZGl0U2hvd0Rlc3RpbmF0aW9uUGVybWlzc2lvbkxpc3RcIiBbZ3JvdXBdPVwiRWRpdEltcGVyc29uYXRpb25Gb3JtXCI+XHJcbiAgICAgICAgICA8L0JCU0YtRHJvcGRvd25MaXN0PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTJcIj5cclxuICAgICAgICAgIDxCQlNGLUF1dG9jb21wbGV0ZVRleHRCb3ggW29wdGlvbnNdPVwiRWRpdERlc3RpbmF0aW9uVXNlckF1dG9Db21wbGV0ZVwiICpuZ0lmPVwiRWRpdFNob3dEZXN0aW5hdGlvblVzZXJBdXRvQ29tcGxldGVcIiBbZ3JvdXBdPVwiRWRpdEltcGVyc29uYXRpb25Gb3JtXCI+XHJcbiAgICAgICAgICA8L0JCU0YtQXV0b2NvbXBsZXRlVGV4dEJveD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyXCI+XHJcbiAgICAgICAgICA8QkJTRi1DaGVja0JveCBbb3B0aW9uc109XCJFZGl0SXNBY3RpdmVcIiBbZ3JvdXBdPVwiRWRpdEltcGVyc29uYXRpb25Gb3JtXCI+XHJcbiAgICAgICAgICA8L0JCU0YtQ2hlY2tCb3g+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTJcIj5cclxuICAgICAgICAgIDxCQlNGLURhdGVUaW1lUGlja2VyIFtvcHRpb25zXT1cIkVkaXRFeHBpcmVzQXRcIiBbZ3JvdXBdPVwiRWRpdEltcGVyc29uYXRpb25Gb3JtXCI+XHJcblxyXG4gICAgICAgICAgPC9CQlNGLURhdGVUaW1lUGlja2VyPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cInRleHQtY2VudGVyIHB0LTdcIj5cclxuICAgICAgICA8YnV0dG9uICNDbG9zZUVkaXRJbXBlcnNvbmF0aW9uTW9kYWwgaWQ9XCJDbG9zZUVkaXRJbXBlcnNvbmF0aW9uTW9kYWxcIiB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1saWdodCBidG4tc20gIG1lLTNcIiBkYXRhLWRpc21pc3M9XCJtb2RhbFwiIChjbGljayk9XCJtb2RhbC5kaXNtaXNzKClcIj5cclxuICAgICAgICAgIHt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkNhbmNlbExhYmVsXCIpfX1cclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICA8YnV0dG9uIHR5cGU9XCJzdWJtaXRcIiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBidG4tc21cIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJTYXZlTGFiZWxcIil9fTwvYnV0dG9uPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvQkJTRi1Gb3JtPlxyXG4gIDwvZGl2PlxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuXHJcbjwhLS1kZWxldGUgTW9kYWwtLT5cclxuPEJCU0YtQ29uZmlybWF0aW9uTW9kYWwgKm5nSWY9XCJkZWxldGVDb250cm9sTG9hZGVkXCIgW29wdGlvbnNdPVwiRGVsZXRlQ29uZmlybWF0aW9uT3B0aW9uc1wiIGlkPVwiQ29uZmlybWF0aW9uTW9kYWxDb250cm9sXCIgI0NvbmZpcm1hdGlvbk1vZGFsQ29udHJvbD48L0JCU0YtQ29uZmlybWF0aW9uTW9kYWw+XHJcblxyXG4iXX0=
|
|
443
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1wZXJzb25hdGlvbi1ydWxlcy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9iYnNmLWFkbWluLXBvcnRhbC9zcmMvbGliL1BhZ2VzL2ltcGVyc29uYXRpb24tcnVsZXMvaW1wZXJzb25hdGlvbi1ydWxlcy9pbXBlcnNvbmF0aW9uLXJ1bGVzLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Jic2YtYWRtaW4tcG9ydGFsL3NyYy9saWIvUGFnZXMvaW1wZXJzb25hdGlvbi1ydWxlcy9pbXBlcnNvbmF0aW9uLXJ1bGVzL2ltcGVyc29uYXRpb24tcnVsZXMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBVSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDN0QsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxlQUFlLEVBQUUsbUJBQW1CLEVBQUUsZUFBZSxFQUE4Qix3QkFBd0IsRUFBRSxpQkFBaUIsRUFBRSxlQUFlLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxjQUFjLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBbUIsYUFBYSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLGNBQWMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQy9WLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLG9FQUFvRSxDQUFDO0FBRTVHLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxvREFBb0QsQ0FBQztBQUlyRixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7Ozs7Ozs7Ozs7Ozs7QUFNekQsTUFBTSxPQUFPLDJCQUEyQjtJQTZEdEMsWUFBb0IsV0FBd0IsRUFBVSxlQUFnQyxFQUFTLGNBQThCLEVBQ25I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O2tHQUEzQiwyQkFBMkIsdVRDZnhDLG9vV0F3T0E7OzJGRHpOYSwyQkFBMkI7a0JBSnZDLFNBQVM7K0JBQ0UseUJBQXlCO2lUQWdCNkIsYUFBYTtzQkFBNUUsU0FBUzt1QkFBQyxnQ0FBZ0MsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7Z0JBOENKLHdCQUF3QjtzQkFBakYsU0FBUzt1QkFBQywwQkFBMEIsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgQXV0b2NvbXBsZXRlRFRPLCBBdXRvY29tcGxldGVPcHRpb25zLCBDaGVja0JveE9wdGlvbnMsIENvbmZpcm1hdGlvbk1vZGFsQ29tcG9uZW50LCBDb25maXJtYXRpb25Nb2RhbE9wdGlvbnMsIERhdGVQaWNrZXJPcHRpb25zLCBEcm9wZG93bk9wdGlvbnMsIEZpbHRlckl0ZW0sIEZpbHRlclR5cGUsIEZvcmNlRGlyZWN0aW9uLCBGb3JtT3B0aW9ucywgSW5wdXRUeXBlLCBQYWdpbmdBY3Rpb25Nb2RlLCBQYWdpbmdDb21wb25lbnQsIFBhZ2luZ09wdGlvbnMsIFBpY2tlclR5cGUsIFNlbGVjdE1vZGUsIFN0YXJ0VmlldywgVGV4dEJveE9wdGlvbnMgfSBmcm9tICdAYm5zaWdodHMvYmJzZi1jb250cm9scyc7XHJcbmltcG9ydCB7IEltcGVyc29uYXRpb25SdWxlTW9kZWwgfSBmcm9tICcuLi8uLi9zaGFyZWQvbW9kZWxzL0ltcGVyc29uYXRpb25SdWxlTW9kZWxzL0ltcGVyc29uYXRpb25SdWxlTW9kZWwnO1xyXG5pbXBvcnQgeyBJbXBlcnNvbmF0aW9uUnVsZVNlcnZpY2UgfSBmcm9tICcuLy4uLy4uL3NoYXJlZC9TZXJ2aWNlcy9JbXBlcnNvbmF0aW9uUnVsZVNlcnZpY2Uuc2VydmljZSc7XHJcbmltcG9ydCB7IFBhZ2VJbmZvU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL19tZXRyb25pYy9jb3JlL3NlcnZpY2VzL3BhZ2UtaW5mby5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTmdiTW9kYWwgfSBmcm9tICdAbmctYm9vdHN0cmFwL25nLWJvb3RzdHJhcCc7XHJcbmltcG9ydCB7IEF1dGhTZXJ2aWNlLCBVdGlsaXR5U2VydmljZSwgQkJTRlRyYW5zbGF0ZVNlcnZpY2UsIEVudmlyb25tZW50U2VydmljZSwgUmVxdWVzdEhhbmRsZXJTZXJ2aWNlIH0gZnJvbSAnQGJuc2lnaHRzL2Jic2YtdXRpbGl0aWVzJztcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBQYXJ0aWNpcGFudFR5cGUgfSBmcm9tICcuLi8uLi9zaGFyZWQvY29uc3RhbnRzJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnbGliLWltcGVyc29uYXRpb24tcnVsZXMnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9pbXBlcnNvbmF0aW9uLXJ1bGVzLmNvbXBvbmVudC5odG1sJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgSW1wZXJzb25hdGlvblJ1bGVzQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuICAvL1BhZ2UgcmVxdWlyZW1lbnRzXHJcbiAgU2hvd1BhZ2VDb250ZW50OiBib29sZWFuID0gZmFsc2U7XHJcbiAgQXBpVXJsID0gXCIvYXBpL2FkbWluL0ltcGVyc29uYXRpb25SdWxlL1wiXHJcblxyXG4gIC8vRmlsdGVyIGFuZCBwYWdpbmcgY29tcG9uZW50c1xyXG4gIHNlYXJjaFRleHRCb3g6IFRleHRCb3hPcHRpb25zO1xyXG4gIFRleHRJbnB1dEZpbHRlcjogRmlsdGVySXRlbTtcclxuICBJbXBlcnNvbmF0aW9uRm9ybSA9IG5ldyBGb3JtR3JvdXAoe30pO1xyXG4gIEltcGVyc29uYXRpb25QYWdpbmdSZXN1bHQ6IGFueVtdID0gW107XHJcbiAgY2xpZW50U2lkZVBhZ2luZ1Jlc3VsdDogYW55W10gPSBbXTtcclxuICBJbXBlcnNvbmF0aW9uUGFnaW5nOiBQYWdpbmdPcHRpb25zO1xyXG4gIElzRmlsdGVyTG9hZGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQFZpZXdDaGlsZCgnSW1wZXJzb25hdGlvblBhZ2luZ1ZpZXdFbGVtZW50JywgeyBzdGF0aWM6IGZhbHNlIH0pIHBhZ2luZ0VsZW1lbnQ6IFBhZ2luZ0NvbXBvbmVudDxhbnk+O1xyXG5cclxuICAvL1JlcXVpcmVkIGxpc3RzXHJcbiAgUGVybWlzc2lvblNldExpc3Q6IGFueVtdID0gW107XHJcbiAgUGFydGljaXBhbnRUeXBlTGlzdDogYW55W10gPSBbXTtcclxuXHJcbiAgLy9BZGQgTW9kZWwgQ29udHJvbHNcclxuICBBZGRJbXBlcnNvbmF0aW9uRm9ybSA9IG5ldyBGb3JtR3JvdXAoe30pO1xyXG4gIEFkZEltcGVyc29uYXRpb25Gb3JtT3B0aW9ucyA9IG5ldyBGb3JtT3B0aW9ucztcclxuICBBZGRTb3VyY2VQYXJ0aWNpcGFudFR5cGU6IERyb3Bkb3duT3B0aW9ucztcclxuICBBZGREZXN0aW5hdGlvblBhcnRpY2lwYW50VHlwZTogRHJvcGRvd25PcHRpb25zO1xyXG4gIEFkZFNvdXJjZVBlcm1pc3Npb25TZXRMaXN0OiBEcm9wZG93bk9wdGlvbnM7XHJcbiAgQWRkRGVzdGluYXRpb25QZXJtaXNzaW9uU2V0TGlzdDogRHJvcGRvd25PcHRpb25zO1xyXG4gIEFkZFNvdXJjZVVzZXJBdXRvQ29tcGxldGU6IEF1dG9jb21wbGV0ZU9wdGlvbnM7XHJcbiAgQWRkRGVzdGluYXRpb25Vc2VyQXV0b0NvbXBsZXRlOiBBdXRvY29tcGxldGVPcHRpb25zO1xyXG4gIEFkZElzQWN0aXZlOiBDaGVja0JveE9wdGlvbnM7XHJcbiAgQWRkRXhwaXJlc0F0OiBEYXRlUGlja2VyT3B0aW9ucztcclxuICBBZGRTaG93U291cmNlUGVybWlzc2lvbkxpc3Q6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBBZGRTaG93U291cmNlVXNlckF1dG9Db21wbGV0ZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEFkZFNob3dEZXN0aW5hdGlvblBlcm1pc3Npb25MaXN0OiBib29sZWFuID0gZmFsc2U7XHJcbiAgQWRkU2hvd0Rlc3RpbmF0aW9uVXNlckF1dG9Db21wbGV0ZTogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuXHJcbiAgLy9FZGl0IE1vZGVsIENvbnRyb2xzXHJcbiAgRWRpdEltcGVyc29uYXRpb25Gb3JtID0gbmV3IEZvcm1Hcm91cCh7fSk7XHJcbiAgRWRpdEltcGVyc29uYXRpb25Gb3JtT3B0aW9ucyA9IG5ldyBGb3JtT3B0aW9ucztcclxuICBFZGl0U291cmNlUGFydGljaXBhbnRUeXBlOiBEcm9wZG93bk9wdGlvbnM7XHJcbiAgRWRpdERlc3RpbmF0aW9uUGFydGljaXBhbnRUeXBlOiBEcm9wZG93bk9wdGlvbnM7XHJcbiAgRWRpdFNvdXJjZVBlcm1pc3Npb25TZXRMaXN0OiBEcm9wZG93bk9wdGlvbnM7XHJcbiAgRWRpdERlc3RpbmF0aW9uUGVybWlzc2lvblNldExpc3Q6IERyb3Bkb3duT3B0aW9ucztcclxuICBFZGl0U291cmNlVXNlckF1dG9Db21wbGV0ZTogQXV0b2NvbXBsZXRlT3B0aW9ucztcclxuICBFZGl0RGVzdGluYXRpb25Vc2VyQXV0b0NvbXBsZXRlOiBBdXRvY29tcGxldGVPcHRpb25zO1xyXG4gIEVkaXRJc0FjdGl2ZTogQ2hlY2tCb3hPcHRpb25zO1xyXG4gIEVkaXRFeHBpcmVzQXQ6IERhdGVQaWNrZXJPcHRpb25zO1xyXG4gIEVkaXRTaG93U291cmNlUGVybWlzc2lvbkxpc3Q6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBFZGl0U2hvd1NvdXJjZVVzZXJBdXRvQ29tcGxldGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBFZGl0U2hvd0Rlc3RpbmF0aW9uUGVybWlzc2lvbkxpc3Q6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBFZGl0U2hvd0Rlc3RpbmF0aW9uVXNlckF1dG9Db21wbGV0ZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEltcGVyc29uYXRpb25JZDogc3RyaW5nO1xyXG4gIFNvdXJjZVBhcnRpY2lwYW50SWQ6IHN0cmluZztcclxuICBEZXN0aW5hdGlvblBhcnRpY2lwYW50SWQ6IHN0cmluZztcclxuXHJcbiAgLy9kZWxldGUgIE1vZGVsIENvbnRyb2xzXHJcbiAgZGVsZXRlSW1wZXJzb25hdGlvblJ1bGVJZDogc3RyaW5nO1xyXG4gIERlbGV0ZUNvbmZpcm1hdGlvbk9wdGlvbnM6IENvbmZpcm1hdGlvbk1vZGFsT3B0aW9ucztcclxuICBkZWxldGVDb250cm9sTG9hZGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQFZpZXdDaGlsZCgnQ29uZmlybWF0aW9uTW9kYWxDb250cm9sJywgeyBzdGF0aWM6IGZhbHNlIH0pIENvbmZpcm1hdGlvbk1vZGFsQ29udHJvbDogQ29uZmlybWF0aW9uTW9kYWxDb21wb25lbnQ7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgYXV0aFNlcnZpY2U6IEF1dGhTZXJ2aWNlLCBwcml2YXRlIHBhZ2VJbmZvU2VydmljZTogUGFnZUluZm9TZXJ2aWNlLCBwdWJsaWMgdXRpbGl0eVNlcnZpY2U6IFV0aWxpdHlTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBiYnNmVHJhbnNsYXRlU2VydmljZTogQkJTRlRyYW5zbGF0ZVNlcnZpY2UsIHByaXZhdGUgZW52aXJvbm1lbnRTZXJ2aWNlOiBFbnZpcm9ubWVudFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIEltcGVyc29uYXRpb25SdWxlU2VydmljZTogSW1wZXJzb25hdGlvblJ1bGVTZXJ2aWNlLCBwcml2YXRlIG1vZGFsU2VydmljZTogTmdiTW9kYWwsIHByaXZhdGUgcmVxdWVzdEhhbmRsZXJTZXJ2aWNlOiBSZXF1ZXN0SGFuZGxlclNlcnZpY2UpIHtcclxuICB9XHJcblxyXG4gIGFzeW5jIG5nT25Jbml0KCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgdGhpcy5TaG93UGFnZUNvbnRlbnQgPSB0cnVlO1xyXG4gICAgUGFnZUluZm9TZXJ2aWNlLlBhZ2VUaXRsZSA9IHRoaXMudXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkltcGVyc29uYXRpb25SdWxlc1wiKVxyXG4gICAgUGFnZUluZm9TZXJ2aWNlLlBhZ2VCcmVhZGNydW1icyA9IFtcclxuICAgICAgeyB0aXRsZTogdGhpcy51dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiSG9tZVwiKSwgcGF0aDogJy9BZG1pbi9Ib21lJywgaXNTZXBhcmF0b3I6IGZhbHNlLCBpc0FjdGl2ZTogZmFsc2UgfSxcclxuICAgICAgeyB0aXRsZTogJycsIHBhdGg6ICcnLCBpc1NlcGFyYXRvcjogdHJ1ZSwgaXNBY3RpdmU6IGZhbHNlIH1cclxuXHJcbiAgICBdO1xyXG4gICAgdGhpcy5wYWdlSW5mb1NlcnZpY2UuY2FsY3VsYXRlVGl0bGUoKTtcclxuICAgIHRoaXMucGFnZUluZm9TZXJ2aWNlLmNhbGN1bGF0ZUJyZWFkY3J1bWJzKCk7XHJcbiAgICB0aGlzLmJic2ZUcmFuc2xhdGVTZXJ2aWNlLm9uTGFuZ0NoYW5nZS5zdWJzY3JpYmUoKGV2ZW50KSA9PiB7XHJcbiAgICAgIHRoaXMubmdPbkluaXQoKTtcclxuICAgIH0pXHJcbiAgICB0aGlzLmluaXRpYWxpemVQYWdlKCk7XHJcbiAgfVxyXG5cclxuICBpbml0aWFsaXplUGFnZSgpIHtcclxuICAgIC8vIFRleHRCb3ggaW5pdFxyXG4gICAgdGhpcy5zZWFyY2hUZXh0Qm94ID0gbmV3IFRleHRCb3hPcHRpb25zKCk7XHJcbiAgICB0aGlzLnNlYXJjaFRleHRCb3gubmFtZSA9IFwic2VhcmNoVGV4dEJveFwiXHJcbiAgICB0aGlzLnNlYXJjaFRleHRCb3guaGlkZUxhYmVsID0gdHJ1ZVxyXG4gICAgdGhpcy5zZWFyY2hUZXh0Qm94LnR5cGUgPSBJbnB1dFR5cGUuVGV4dFxyXG4gICAgdGhpcy5zZWFyY2hUZXh0Qm94LnBsYWNlaG9sZGVyID0gdGhpcy51dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiU2VhcmNoQnlTb3VyY2VcIilcclxuXHJcbiAgICB0aGlzLlRleHRJbnB1dEZpbHRlciA9IG5ldyBGaWx0ZXJJdGVtKCk7XHJcbiAgICB0aGlzLlRleHRJbnB1dEZpbHRlci5Gb3JtQ29udHJvbE5hbWUgPSBcInNlYXJjaFRleHRCb3hcIlxyXG4gICAgdGhpcy5UZXh0SW5wdXRGaWx0ZXIuQWN0aW9uUGFyYW1ldGVyTmFtZSA9IFwic2VhcmNoVGV4dFwiXHJcbiAgICB0aGlzLlRleHRJbnB1dEZpbHRlci5Jc0Zvcm1Db250cm9sID0gdHJ1ZVxyXG4gICAgdGhpcy5UZXh0SW5wdXRGaWx0ZXIuRmlsdGVyVHlwZSA9IEZpbHRlclR5cGUuVGV4dEJveFxyXG5cclxuICAgIHRoaXMuSW1wZXJzb25hdGlvblBhZ2luZyA9IG5ldyBQYWdpbmdPcHRpb25zKCk7XHJcbiAgICB0aGlzLkltcGVyc29uYXRpb25QYWdpbmcuYWN0aW9uUG9zdFVSTCA9IHRoaXMuQXBpVXJsICsgJ0dldEltcGVyc29uYXRpb25SdWxlQnlGaWx0ZXInO1xyXG4gICAgdGhpcy5JbXBlcnNvbmF0aW9uUGFnaW5nLm9uS2V5UHJlc3NGaWx0ZXJzQ29udHJvbE5hbWVzID0gW1wic2VhcmNoVGV4dEJveFwiXVxyXG4gICAgdGhpcy5JbXBlcnNvbmF0aW9uUGFnaW5nLmZpbHRlcnMgPSBbdGhpcy5UZXh0SW5wdXRGaWx0ZXJdXHJcbiAgICB0aGlzLkltcGVyc29uYXRpb25QYWdpbmcudmFsaWRhdGlvblRva2VuID0gdGhpcy5hdXRoU2VydmljZS5hdXRob3JpemF0aW9uSGVhZGVyVmFsdWUoKVxyXG4gICAgdGhpcy5Jc0ZpbHRlckxvYWRlZCA9IHRydWU7XHJcbiAgfVxyXG5cclxuICAvL1BhZ2luZyBmdW5jdGlvbnNcclxuICBzZXRJbXBlcnNvbmF0aW9uTGlzdFJlc3VsdChyZXN1bHQpIHtcclxuICAgIHRoaXMuSW1wZXJzb25hdGlvblBhZ2luZ1Jlc3VsdCA9IHJlc3VsdDtcclxuICAgIHRoaXMuY2xpZW50U2lkZVBhZ2luZ1Jlc3VsdCA9IHJlc3VsdDtcclxuICAgIHRoaXMuU2hvd1BhZ2VDb250ZW50ID0gdHJ1ZTtcclxuICAgIHRoaXMudXRpbGl0eVNlcnZpY2Uuc3RvcEJsb2NrVUkoKVxyXG4gIH1cclxuXHJcbiAgc2VhcmNoQ2xpZW50U2lkZShzZWFyY2hWYWx1ZSkge1xyXG4gICAgaWYgKHNlYXJjaFZhbHVlKVxyXG4gICAgICB0aGlzLmNsaWVudFNpZGVQYWdpbmdSZXN1bHQgPSB0aGlzLmNsaWVudFNpZGVQYWdpbmdSZXN1bHQuZmlsdGVyKFxyXG4gICAgICAgIGZ1bmN0aW9uIChpdGVtKSB7XHJcbiAgICAgICAgICB2YXIgc291cmNlUGFydGljaXBhbnROYW1lID0gaXRlbS5zb3VyY2VQYXJ0aWNpcGFudERUTy5wYXJ0aWNpcGFudE5hbWU7XHJcbiAgICAgICAgICB2YXIgZGVzdGluYXRpb25QYXJ0aWNpcGFudE5hbWUgPSBpdGVtLmRlc3RpbmF0aW9uUGFydGljaXBhbnREVE8ucGFydGljaXBhbnROYW1lO1xyXG4gICAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgc291cmNlUGFydGljaXBhbnROYW1lLmVuZ2xpc2gudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhzZWFyY2hWYWx1ZS50b0xvd2VyQ2FzZSgpKVxyXG4gICAgICAgICAgICB8fCBzb3VyY2VQYXJ0aWNpcGFudE5hbWUuYXJhYmljLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoc2VhcmNoVmFsdWUudG9Mb3dlckNhc2UoKSlcclxuICAgICAgICAgICAgfHwgZGVzdGluYXRpb25QYXJ0aWNpcGFudE5hbWUuYXJhYmljLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoc2VhcmNoVmFsdWUudG9Mb3dlckNhc2UoKSlcclxuICAgICAgICAgICAgfHwgZGVzdGluYXRpb25QYXJ0aWNpcGFudE5hbWUuYXJhYmljLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoc2VhcmNoVmFsdWUudG9Mb3dlckNhc2UoKSkpO1xyXG4gICAgICAgIH0pXHJcbiAgICBlbHNlXHJcbiAgICAgIHRoaXMuY2xpZW50U2lkZVBhZ2luZ1Jlc3VsdCA9IHRoaXMuSW1wZXJzb25hdGlvblBhZ2luZ1Jlc3VsdDtcclxuICB9XHJcblxyXG4gIC8vQWRkIGltcGVyc29uYXRpb24gcnVsZSBmdW5jdGlvbnNcclxuICBzaG93QWRkSW1wZXJzb25hdGlvbk1vZGFsKEFkZEltcGVyc29uYXRpb25Nb2RhbCkge1xyXG4gICAgdGhpcy51dGlsaXR5U2VydmljZS5zdGFydEJsb2NrVUkoKTtcclxuXHJcbiAgICB0aGlzLkltcGVyc29uYXRpb25SdWxlU2VydmljZS5sb2FkQWRkRHJvcGRvd25zKCkuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcclxuICAgICAgbGV0IERyb3Bkb3duTGlzdHMgPSByZXN1bHQgYXMgYW55O1xyXG4gICAgICB0aGlzLlBlcm1pc3Npb25TZXRMaXN0ID0gRHJvcGRvd25MaXN0cy5wZXJtaXNzaW9uTGlzdDtcclxuICAgICAgdGhpcy5QYXJ0aWNpcGFudFR5cGVMaXN0ID0gRHJvcGRvd25MaXN0cy5wYXJ0aWNpcGFudFR5cGVMaXN0O1xyXG4gICAgICB0aGlzLkFkZEltcGVyc29uYXRpb25Gb3JtID0gbmV3IEZvcm1Hcm91cCh7fSlcclxuXHJcbiAgICAgIHRoaXMuQWRkSW1wZXJzb25hdGlvbkZvcm1PcHRpb25zID0gbmV3IEZvcm1PcHRpb25zKCk7XHJcbiAgICAgIHRoaXMuQWRkSW1wZXJzb25hdGlvbkZvcm1PcHRpb25zLmZvcm1Hcm91cCA9IHRoaXMuQWRkSW1wZXJzb25hdGlvbkZvcm1cclxuICAgICAgdGhpcy5BZGRJbXBlcnNvbmF0aW9uRm9ybU9wdGlvbnMuZ2V0TW9kZWxGdW5jdGlvbiA9IHRoaXMuZ2V0QWRkSW1wZXJzb25hdGlvblJ1bGVNb2RlbDtcclxuICAgICAgdGhpcy5BZGRJbXBlcnNvbmF0aW9uRm9ybU9wdGlvbnMuc2VydmljZVN1Ym1pdEZ1bmN0aW9uID0gdGhpcy5nZXRBZGRJbXBlcnNvbmF0aW9uUnVsZUZ1bmN0aW9uO1xyXG4gICAgICB0aGlzLkFkZEltcGVyc29uYXRpb25Gb3JtT3B0aW9ucy5wYWdpbmdSZWZlcmVuY2UgPSB0aGlzLnBhZ2luZ0VsZW1lbnRcclxuXHJcbiAgICAgIHRoaXMuQWRkU2hvd0Rlc3RpbmF0aW9uUGVybWlzc2lvbkxpc3QgPSBmYWxzZTtcclxuICAgICAgdGhpcy5BZGRTaG93RGVzdGluYXRpb25Vc2VyQXV0b0NvbXBsZXRlID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuQWRkU2hvd1NvdXJjZVBlcm1pc3Npb25MaXN0ID0gZmFsc2VcclxuICAgICAgdGhpcy5BZGRTaG93U291cmNlVXNlckF1dG9Db21wbGV0ZSA9IGZhbHNlXHJcblxyXG4gICAgICB0aGlzLkFkZFNvdXJjZVBhcnRpY2lwYW50VHlwZSA9IG5ldyBEcm9wZG93bk9wdGlvbnMoKTtcclxuICAgICAgdGhpcy5BZGRTb3VyY2VQYXJ0aWNpcGFudFR5cGUubmFtZSA9IFwiU291cmNlUGFydGljaXBhbnREVE8uUGFydGljaXBhbnRUeXBlSXRlbUlEX0dVSURcIlxyXG4gICAgICB0aGlzLkFkZFNvdXJjZVBhcnRpY2lwYW50VHlwZS5sYWJlbEtleSA9IFwiU291cmNlUGFydGljaXBhbnRUeXBlXCJcclxuICAgICAgdGhpcy5BZGRTb3VyY2VQYXJ0aWNpcGFudFR5cGUuc2VsZWN0ZWRJdGVtcyA9IG51bGw7XHJcbiAgICAgIHRoaXMuQWRkU291cmNlUGFydGljaXBhbnRUeXBlLmRhdGFTb3VyY2UgPSB0aGlzLlBhcnRpY2lwYW50VHlwZUxpc3RcclxuICAgICAgdGhpcy5BZGRTb3VyY2VQYXJ0aWNpcGFudFR5cGUuc2luZ2xlU2VsZWN0aW9uID0gdHJ1ZTtcclxuICAgICAgdGhpcy5BZGRTb3VyY2VQYXJ0aWNpcGFudFR5cGUuYWxsb3dTZWFyY2hGaWx0ZXIgPSB0cnVlO1xyXG4gICAgICB0aGlzLkFkZFNvdXJjZVBhcnRpY2lwYW50VHlwZS5pc1JlcXVpcmVkID0gdHJ1ZTtcclxuXHJcbiAgICAgIHRoaXMuQWRkRGVzdGluYXRpb25QYXJ0aWNpcGFudFR5cGUgPSBuZXcgRHJvcGRvd25PcHRpb25zKCk7XHJcbiAgICAgIHRoaXMuQWRkRGVzdGluYXRpb25QYXJ0aWNpcGFudFR5cGUubmFtZSA9IFwiRGVzdGluYXRpb25QYXJ0aWNpcGFudERUTy5QYXJ0aWNpcGFudFR5cGVJdGVtSURfR1VJRFwiXHJcbiAgICAgIHRoaXMuQWRkRGVzdGluYXRpb25QYXJ0aWNpcGFudFR5cGUubGFiZWxLZXkgPSBcIkRlc3RpbmF0aW9uUGFydGljaXBhbnRUeXBlXCJcclxuICAgICAgdGhpcy5BZGREZXN0aW5hdGlvblBhcnRpY2lwYW50VHlwZS5zZWxlY3RlZEl0ZW1zID0gbnVsbDtcclxuICAgICAgdGhpcy5BZGREZXN0aW5hdGlvblBhcnRpY2lwYW50VHlwZS5kYXRhU291cmNlID0gdGhpcy5QYXJ0aWNpcGFudFR5cGVMaXN0XHJcbiAgICAgIHRoaXMuQWRkRGVzdGluYXRpb25QYXJ0aWNpcGFudFR5cGUuc2luZ2xlU2VsZWN0aW9uID0gdHJ1ZTtcclxuICAgICAgdGhpcy5BZGREZXN0aW5hdGlvblBhcnRpY2lwYW50VHlwZS5hbGxvd1NlYXJjaEZpbHRlciA9IHRydWU7XHJcbiAgICAgIHRoaXMuQWRkRGVzdGluYXRpb25QYXJ0aWNpcGFudFR5cGUuaXNSZXF1aXJlZCA9IHRydWU7XHJcblxyXG4gICAgICB0aGlzLkFkZFNvdXJjZVBlcm1pc3Npb25TZXRMaXN0ID0gbmV3IERyb3Bkb3duT3B0aW9ucygpO1xyXG4gICAgICB0aGlzLkFkZFNvdXJjZVBlcm1pc3Npb25TZXRMaXN0Lm5hbWUgPSBcIlNvdXJjZVBhcnRpY2lwYW50RFRPLlBlcm1pc3Npb25TZXRJRF9HVUlEXCJcclxuICAgICAgdGhpcy5BZGRTb3VyY2VQZXJtaXNzaW9uU2V0TGlzdC5sYWJlbEtleSA9IFwiU291cmNlUGVybWlzc2lvblNldExpc3RcIlxyXG4gICAgICB0aGlzLkFkZFNvdXJjZVBlcm1pc3Npb25TZXRMaXN0LnNlbGVjdGVkSXRlbXMgPSBudWxsO1xyXG4gICAgICB0aGlzLkFkZFNvdXJjZVBlcm1pc3Npb25TZXRMaXN0LmRhdGFTb3VyY2UgPSB0aGlzLlBlcm1pc3Npb25TZXRMaXN0XHJcbiAgICAgIHRoaXMuQWRkU291cmNlUGVybWlzc2lvblNldExpc3Quc2luZ2xlU2VsZWN0aW9uID0gdHJ1ZTtcclxuICAgICAgdGhpcy5BZGRTb3VyY2VQZXJtaXNzaW9uU2V0TGlzdC5hbGxvd1NlYXJjaEZpbHRlciA9IHRydWU7XHJcbiAgICAgIHRoaXMuQWRkU291cmNlUGVybWlzc2lvblNldExpc3QuaXNSZXF1aXJlZCA9IHRydWU7XHJcblxyXG4gICAgICB0aGlzLkFkZERlc3RpbmF0aW9uUGVybWlzc2lvblNldExpc3QgPSBuZXcgRHJvcGRvd25PcHRpb25zKCk7XHJcbiAgICAgIHRoaXMuQWRkRGVzdGluYXRpb25QZXJtaXNzaW9uU2V0TGlzdC5uYW1lID0gXCJEZXN0aW5hdGlvblBhcnRpY2lwYW50RFRPLlBlcm1pc3Npb25TZXRJRF9HVUlEXCJcclxuICAgICAgdGhpcy5BZGREZXN0aW5hdGlvblBlcm1pc3Npb25TZXRMaXN0LmxhYmVsVmFsdWUgPSBcIkRlc3RpbmF0aW9uUGVybWlzc2lvblNldExpc3RcIlxyXG4gICAgICB0aGlzLkFkZERlc3RpbmF0aW9uUGVybWlzc2lvblNldExpc3QubGFiZWxLZXkgPSBcIkRlc3RpbmF0aW9uUGVybWlzc2lvblNldExpc3RcIlxyXG4gICAgICB0aGlzLkFkZERlc3RpbmF0aW9uUGVybWlzc2lvblNldExpc3Quc2VsZWN0ZWRJdGVtcyA9IG51bGw7XHJcbiAgICAgIHRoaXMuQWRkRGVzdGluYXRpb25QZXJtaXNzaW9uU2V0TGlzdC5kYXRhU291cmNlID0gdGhpcy5QZXJtaXNzaW9uU2V0TGlzdFxyXG4gICAgICB0aGlzLkFkZERlc3RpbmF0aW9uUGVybWlzc2lvblNldExpc3Quc2luZ2xlU2VsZWN0aW9uID0gdHJ1ZTtcclxuICAgICAgdGhpcy5BZGREZXN0aW5hdGlvblBlcm1pc3Npb25TZXRMaXN0LmFsbG93U2VhcmNoRmlsdGVyID0gdHJ1ZTtcclxuICAgICAgdGhpcy5BZGREZXN0aW5hdGlvblBlcm1pc3Npb25TZXRMaXN0LmlzUmVxdWlyZWQgPSB0cnVlO1xyXG5cclxuICAgICAgdGhpcy5BZGRTb3VyY2VVc2VyQXV0b0NvbXBsZXRlID0gbmV3IEF1dG9jb21wbGV0ZU9wdGlvbnMoKTtcclxuICAgICAgdGhpcy5BZGRTb3VyY2VVc2VyQXV0b0NvbXBsZXRlLm5hbWUgPSBcIlNvdXJjZVBhcnRpY2lwYW50RFRPLlVzZXJJRF9HVUlEXCI7XHJcbiAgICAgIHRoaXMuQWRkU291cmNlVXNlckF1dG9Db21wbGV0ZS5sYWJlbEtleSA9IFwiVXNlclwiO1xyXG4gICAgICB0aGlzLkFkZFNvdXJjZVVzZXJBdXRvQ29tcGxldGUudHlwZSA9IElucHV0VHlwZS5UZXh0O1xyXG4gICAgICB0aGlzLkFkZFNvdXJjZVVzZXJBdXRvQ29tcGxldGUuaXNSZXF1aXJlZCA9IHRydWU7XHJcbiAgICAgIHRoaXMuQWRkU291cmNlVXNlckF1dG9Db21wbGV0ZS52YWx1ZSA9IG51bGw7XHJcbiAgICAgIHRoaXMuQWRkU291cmNlVXNlckF1dG9Db21wbGV0ZS5mb3JjZURpcmVjdGlvbiA9IEZvcmNlRGlyZWN0aW9uLkVuZ2xpc2g7XHJcbiAgICAgIHRoaXMuQWRkU291cmNlVXNlckF1dG9Db21wbGV0ZS5hY3Rpb25VUkwgPSB0aGlzLkFwaVVybCArIFwiQXV0b0NvbXBsZXRlVXNlclwiXHJcbiAgICAgIHRoaXMuQWRkU291cmNlVXNlckF1dG9Db21wbGV0ZS52YWxpZGF0aW9uVG9rZW4gPSB0aGlzLmF1dGhTZXJ2aWNlLmF1dGhvcml6YXRpb25IZWFkZXJWYWx1ZSgpXHJcblxyXG4gICAgICB0aGlzLkFkZERlc3RpbmF0aW9uVXNlckF1dG9Db21wbGV0ZSA9IG5ldyBBdXRvY29tcGxldGVPcHRpb25zKCk7XHJcbiAgICAgIHRoaXMuQWRkRGVzdGluYXRpb25Vc2VyQXV0b0NvbXBsZXRlLm5hbWUgPSBcIkRlc3RpbmF0aW9uUGFydGljaXBhbnREVE8uVXNlcklEX0dVSURcIjtcclxuICAgICAgdGhpcy5BZGREZXN0aW5hdGlvblVzZXJBdXRvQ29tcGxldGUubGFiZWxLZXkgPSBcIlVzZXJcIjtcclxuICAgICAgdGhpcy5BZGREZXN0aW5hdGlvblVzZXJBdXRvQ29tcGxldGUudHlwZSA9IElucHV0VHlwZS5UZXh0O1xyXG4gICAgICB0aGlzLkFkZERlc3RpbmF0aW9uVXNlckF1dG9Db21wbGV0ZS5pc1JlcXVpcmVkID0gdHJ1ZTtcclxuICAgICAgdGhpcy5BZGREZXN0aW5hdGlvblVzZXJBdXRvQ29tcGxldGUudmFsdWUgPSBudWxsO1xyXG4gICAgICB0aGlzLkFkZERlc3RpbmF0aW9uVXNlckF1dG9Db21wbGV0ZS5hY3Rpb25VUkwgPSB0aGlzLkFwaVVybCArIFwiQXV0b0NvbXBsZXRlVXNlclwiXHJcbiAgICAgIHRoaXMuQWRkRGVzdGluYXRpb25Vc2VyQXV0b0NvbXBsZXRlLnZhbGlkYXRpb25Ub2tlbiA9IHRoaXMuYXV0aFNlcnZpY2UuYXV0aG9yaXphdGlvbkhlYWRlclZhbHVlKClcclxuXHJcbiAgICAgIHRoaXMuQWRkSXNBY3RpdmUgPSBuZXcgQ2hlY2tCb3hPcHRpb25zKCk7XHJcbiAgICAgIHRoaXMuQWRkSXNBY3RpdmUubmFtZSA9IFwiSXNBY3RpdmVcIlxyXG4gICAgICB0aGlzLkFkZElzQWN0aXZlLmxhYmVsS2V5ID0gXCJBY3RpdmVcIlxyXG4gICAgICB0aGlzLkFkZElzQWN0aXZlLnZhbHVlID0gdHJ1ZVxyXG5cclxuICAgICAgdGhpcy5BZGRFeHBpcmVzQXQgPSBuZXcgRGF0ZVBpY2tlck9wdGlvbnMoKTtcclxuICAgICAgdGhpcy5BZGRFeHBpcmVzQXQubmFtZSA9IFwiRXhwaXJlc0F0XCJcclxuICAgICAgdGhpcy5BZGRFeHBpcmVzQXQubGFiZWxLZXkgPSBcIkV4cGlyZXNBdFwiXHJcbiAgICAgIHRoaXMuQWRkRXhwaXJlc0F0LmlzUmVxdWlyZWQgPSB0cnVlXHJcbiAgICAgIHRoaXMuQWRkRXhwaXJlc0F0LnN0YXJ0VmlldyA9IFN0YXJ0Vmlldy5Nb250aFxyXG4gICAgICB0aGlzLkFkZEV4cGlyZXNBdC5waWNrZXJUeXBlID0gUGlja2VyVHlwZS5DYWxlbmRhclxyXG4gICAgICB0aGlzLkFkZEV4cGlyZXNBdC5zZWxlY3RNb2RlID0gU2VsZWN0TW9kZS5TaW5nbGVcclxuICAgICAgdGhpcy5BZGRFeHBpcmVzQXQuc3RhcnREYXRlID0gbmV3IERhdGUoKVxyXG5cclxuICAgICAgdGhpcy5tb2RhbFNlcnZpY2Uub3BlbihBZGRJbXBlcnNvbmF0aW9uTW9kYWwpO1xyXG4gICAgICB0aGlzLnV0aWxpdHlTZXJ2aWNlLnN0b3BCbG9ja1VJKCk7XHJcbiAgICB9KTtcclxuXHJcblxyXG4gIH1cclxuICBnZXRBZGRJbXBlcnNvbmF0aW9uUnVsZU1vZGVsID0gKCkgPT4ge1xyXG4gICAgbGV0IHBhcmFtQXJyYXk6IGFueVtdID0gW107XHJcbiAgICBsZXQgUmVzdWx0TW9kZWwgPSB0aGlzLkFkZEltcGVyc29uYXRpb25Gb3JtLnZhbHVlIGFzIGFueTtcclxuXHJcbiAgICBsZXQgQWRkTW9kZWw6IEltcGVyc29uYXRpb25SdWxlTW9kZWwgPSBuZXcgSW1wZXJzb25hdGlvblJ1bGVNb2RlbCgpO1xyXG4gICAgQWRkTW9kZWwuU291cmNlUGFydGljaXBhbnREVE8uUGFydGljaXBhbnRUeXBlSXRlbUlEX0dVSUQgPSBSZXN1bHRNb2RlbFtcIlNvdXJjZVBhcnRpY2lwYW50RFRPLlBhcnRpY2lwYW50VHlwZUl0ZW1JRF9HVUlEXCJdXHJcbiAgICBBZGRNb2RlbC5EZXN0aW5hdGlvblBhcnRpY2lwYW50RFRPLlBhcnRpY2lwYW50VHlwZUl0ZW1JRF9HVUlEID0gUmVzdWx0TW9kZWxbXCJEZXN0aW5hdGlvblBhcnRpY2lwYW50RFRPLlBhcnRpY2lwYW50VHlwZUl0ZW1JRF9HVUlEXCJdXHJcbiAgICBBZGRNb2RlbC5FeHBpcmVzQXQgPSBSZXN1bHRNb2RlbC5FeHBpcmVzQXRcclxuICAgIEFkZE1vZGVsLklzQWN0aXZlID0gUmVzdWx0TW9kZWwuSXNBY3RpdmVcclxuICAgIGlmIChSZXN1bHRNb2RlbFtcIkRlc3RpbmF0aW9uUGFydGljaXBhbnREVE8uVXNlcklEX0dVSURcIl0pXHJcbiAgICAgIEFkZE1vZGVsLkRlc3RpbmF0aW9uUGFydGljaXBhbnREVE8uVXNlcklEX0dVSUQgPSBSZXN1bHRNb2RlbFtcIkRlc3RpbmF0aW9uUGFydGljaXBhbnREVE8uVXNlcklEX0dVSURcIl0ua2V5XHJcbiAgICBlbHNlXHJcbiAgICAgIEFkZE1vZGVsLkRlc3RpbmF0aW9uUGFydGljaXBhbnREVE8uUGVybWlzc2lvblNldElEX0dVSUQgPSBSZXN1bHRNb2RlbFtcIkRlc3RpbmF0aW9uUGFydGljaXBhbnREVE8uUGVybWlzc2lvblNldElEX0dVSURcIl1cclxuXHJcbiAgICBpZiAoUmVzdWx0TW9kZWxbXCJTb3VyY2VQYXJ0aWNpcGFudERUTy5Vc2VySURfR1VJRFwiXSlcclxuICAgICAgQWRkTW9kZWwuU291cmNlUGFydGljaXBhbnREVE8uVXNlcklEX0dVSUQgPSBSZXN1bHRNb2RlbFtcIlNvdXJjZVBhcnRpY2lwYW50RFRPLlVzZXJJRF9HVUlEXCJdLmtleVxyXG4gICAgZWxzZVxyXG4gICAgICBBZGRNb2RlbC5Tb3VyY2VQYXJ0aWNpcGFudERUTy5QZXJtaXNzaW9uU2V0SURfR1VJRCA9IFJlc3VsdE1vZGVsW1wiU291cmNlUGFydGljaXBhbnREVE8uUGVybWlzc2lvblNldElEX0dVSURcIl1cclxuICAgIHBhcmFtQXJyYXkucHVzaChBZGRNb2RlbCk7XHJcbiAgICByZXR1cm4gcGFyYW1BcnJheTtcclxuICB9XHJcblxyXG4gIGdldEFkZEltcGVyc29uYXRpb25SdWxlRnVuY3Rpb24gPSAoQWRkTW9kZWwpOiBPYnNlcnZhYmxlPGFueT4gPT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuSW1wZXJzb25hdGlvblJ1bGVTZXJ2aWNlLmFkZEltcGVyc29uYXRpb25SdWxlKEFkZE1vZGVsKVxyXG4gIH1cclxuXHJcblxyXG4gIGFkZERlc3RpbmF0aW9uUGFydGljaXBhbnRPbkNoYW5nZShrZXkpIHtcclxuICAgIGtleSA9IGtleT8udG9Mb3dlckNhc2UoKTtcclxuICAgIHN3aXRjaCAoa2V5KSB7XHJcbiAgICAgIGNhc2UgUGFydGljaXBhbnRUeXBlLlBlcm1pc3Npb25TZXQ6XHJcbiAgICAgICAgdGhpcy5BZGRTaG93RGVzdGluYXRpb25QZXJtaXNzaW9uTGlzdCA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5BZGRTaG93RGVzdGluYXRpb25Vc2VyQXV0b0NvbXBsZXRlID0gZmFsc2U7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgUGFydGljaXBhbnRUeXBlLlVzZXI6XHJcbiAgICAgICAgdGhpcy5BZGRTaG93RGVzdGluYXRpb25QZXJtaXNzaW9uTGlzdCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuQWRkU2hvd0Rlc3RpbmF0aW9uVXNlckF1dG9Db21wbGV0ZSA9IHRydWU7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG5cclxuICB9XHJcblxyXG4gIGFkZFNvdXJjZVBhcnRpY2lwYW50T25DaGFuZ2Uoa2V5KSB7XHJcbiAgICBrZXkgPSBrZXk/LnRvTG93ZXJDYXNlKCk7XHJcbiAgICBzd2l0Y2ggKGtleSkge1xyXG4gICAgICBjYXNlIFBhcnRpY2lwYW50VHlwZS5QZXJtaXNzaW9uU2V0OlxyXG4gICAgICAgIHRoaXMuQWRkU2hvd1NvdXJjZVBlcm1pc3Npb25MaXN0ID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLkFkZFNob3dTb3VyY2VVc2VyQXV0b0NvbXBsZXRlID0gZmFsc2U7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgUGFydGljaXBhbnRUeXBlLlVzZXI6XHJcbiAgICAgICAgdGhpcy5BZGRTaG93U291cmNlUGVybWlzc2lvbkxpc3QgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLkFkZFNob3dTb3VyY2VVc2VyQXV0b0NvbXBsZXRlID0gdHJ1ZTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvL0VkaXQgaW1wZXJzb25hdGlvbiBydWxlIGZ1bmN0aW9uc1xyXG4gIHNob3dFZGl0SW1wZXJzb25hdGlvbk1vZGFsKGltcGVyc29uYXRpb25JRDogc3RyaW5nLCBlZGl0SW1wZXJzb25hdGlvbk1vZGFsKSB7XHJcbiAgICB0aGlzLkltcGVyc29uYXRpb25JZCA9IGltcGVyc29uYXRpb25JRDtcclxuXHJcbiAgICB0aGlzLkltcGVyc29uYXRpb25SdWxlU2VydmljZS5nZXRFZGl0SW1wZXJzb25hdGlvblJ1bGUodGhpcy5JbXBlcnNvbmF0aW9uSWQpLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XHJcbiAgICAgIGxldCByZXN1bHRPYmogPSByZXN1bHQgYXMgYW55O1xyXG4gICAgICBsZXQgaW1wZXJzb25hdGlvbiA9IHJlc3VsdE9iai5tb2RlbDtcclxuICAgICAgbGV0IGxpc3RzID0gcmVzdWx0T2JqLmxpc3RzO1xyXG4gICAgICB0aGlzLlBlcm1pc3Npb25TZXRMaXN0ID0gbGlzdHMucGVybWlzc2lvbkxpc3Q7XHJcbiAgICAgIHRoaXMuUGFydGljaXBhbnRUeXBlTGlzdCA9IGxpc3RzLnBhcnRpY2lwYW50VHlwZUxpc3Q7XHJcblxyXG4gICAgICB0aGlzLkVkaXRJbXBlcnNvbmF0aW9uRm9ybSA9IG5ldyBGb3JtR3JvdXAoe30pXHJcblxyXG4gICAgICB0aGlzLkVkaXRJbXBlcnNvbmF0aW9uRm9ybU9wdGlvbnMgPSBuZXcgRm9ybU9wdGlvbnMoKTtcclxuICAgICAgdGhpcy5FZGl0SW1wZXJzb25hdGlvbkZvcm1PcHRpb25zLmZvcm1Hcm91cCA9IHRoaXMuRWRpdEltcGVyc29uYXRpb25Gb3JtXHJcbiAgICAgIHRoaXMuRWRpdEltcGVyc29uYXRpb25Gb3JtT3B0aW9ucy5nZXRNb2RlbEZ1bmN0aW9uID0gdGhpcy5nZXRFZGl0SW1wZXJzb25hdGlvblJ1bGVNb2RlbDtcclxuICAgICAgdGhpcy5FZGl0SW1wZXJzb25hdGlvbkZvcm1PcHRpb25zLnNlcnZpY2VTdWJtaXRGdW5jdGlvbiA9IHRoaXMuZ2V0RWRpdEltcGVyc29uYXRpb25SdWxlRnVuY3Rpb247XHJcbiAgICAgIHRoaXMuRWRpdEltcGVyc29uYXRpb25Gb3JtT3B0aW9ucy5wYWdpbmdSZWZlcmVuY2UgPSB0aGlzLnBhZ2luZ0VsZW1lbnRcclxuICAgICAgdGhpcy5FZGl0SW1wZXJzb25hdGlvbkZvcm1PcHRpb25zLnBhZ2luZ0FjdGlvbk1vZGUgPSBQYWdpbmdBY3Rpb25Nb2RlLlVwZGF0ZVxyXG5cclxuICAgICAgdGhpcy5FZGl0U2hvd0Rlc3RpbmF0aW9uUGVybWlzc2lvbkxpc3QgPSBmYWxzZTtcclxuICAgICAgdGhpcy5FZGl0U2hvd0Rlc3RpbmF0aW9uVXNlckF1dG9Db21wbGV0ZSA9IGZhbHNlO1xyXG4gICAgICB0aGlzLkVkaXRTaG93U291cmNlUGVybWlzc2lvbkxpc3QgPSBmYWxzZVxyXG4gICAgICB0aGlzLkVkaXRTaG93U291cmNlVXNlckF1dG9Db21wbGV0ZSA9IGZhbHNlXHJcblxyXG4gICAgICBpZiAoaW1wZXJzb25hdGlvbi5zb3VyY2VQYXJ0aWNpcGFudERUTy5wYXJ0aWNpcGFudFR5cGVJdGVtSURfR1VJRCAhPSBudWxsICYmIGltcGVyc29uYXRpb24uZGVzdGluYXRpb25QYXJ0aWNpcGFudERUTy5wYXJ0aWNpcGFudFR5cGVJdGVtSURfR1VJRCkge1xyXG4gICAgICAgIHRoaXMuZWRpdERlc3RpbmF0aW9uUGFydGljaXBhbnRPbkNoYW5nZShpbXBlcnNvbmF0aW9uLmRlc3RpbmF0aW9uUGFydGljaXBhbnREVE8ucGFydGljaXBhbnRUeXBlSXRlbUlEX0dVSUQpO1xyXG4gICAgICAgIHRoaXMuZWRpdFNvdXJjZVBhcnRpY2lwYW50T25DaGFuZ2UoaW1wZXJzb25hdGlvbi5zb3VyY2VQYXJ0aWNpcGFudERUTy5wYXJ0aWNpcGFudFR5cGVJdGVtSURfR1VJRCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMudXRpbGl0eVNlcnZpY2Uuc3RhcnRCbG9ja1VJKCk7XHJcblxyXG4gICAgICB0aGlzLlNvdXJjZVBhcnRpY2lwYW50SWQgPSBpbXBlcnNvbmF0aW9uLnNvdXJjZVBhcnRpY2lwYW50RFRPLmlEX0dVSUQ7XHJcbiAgICAgIHRoaXMuRGVzdGluYXRpb25QYXJ0aWNpcGFudElkID0gaW1wZXJzb25hdGlvbi5kZXN0aW5hdGlvblBhcnRpY2lwYW50RFRPLmlEX0dVSUQ7XHJcbiAgICAgIHRoaXMuRWRpdFNvdXJjZVBhcnRpY2lwYW50VHlwZSA9IG5ldyBEcm9wZG93bk9wdGlvbnMoKTtcclxuICAgICAgdGhpcy5FZGl0U291cmNlUGFydGljaXBhbnRUeXBlLm5hbWUgPSBcIlNvdXJjZVBhcnRpY2lwYW50RFRPLlBhcnRpY2lwYW50VHlwZUl0ZW1JRF9HVUlEXCJcclxuICAgICAgdGhpcy5FZGl0U291cmNlUGFydGljaXBhbnRUeXBlLmxhYmVsS2V5ID0gXCJTb3VyY2VQYXJ0aWNpcGFudFR5cGVcIlxyXG4gICAgICB0aGlzLkVkaXRTb3VyY2VQYXJ0aWNpcGFudFR5cGUuc2VsZWN0ZWRJdGVtcyA9IGltcGVyc29uYXRpb24uc291cmNlUGFydGljaXBhbnREVE8ucGFydGljaXBhbnRUeXBlSXRlbUlEX0dVSUQ/LnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgIHRoaXMuRWRpdFNvdXJjZVBhcnRpY2lwYW50VHlwZS5kYXRhU291cmNlID0gdGhpcy5QYXJ0aWNpcGFudFR5cGVMaXN0XHJcbiAgICAgIHRoaXMuRWRpdFNvdXJjZVBhcnRpY2lwYW50VHlwZS5zaW5nbGVTZWxlY3Rpb24gPSB0cnVlO1xyXG4gICAgICB0aGlzLkVkaXRTb3VyY2VQYXJ0aWNpcGFudFR5cGUuYWxsb3dTZWFyY2hGaWx0ZXIgPSB0cnVlO1xyXG4gICAgICB0aGlzLkVkaXRTb3VyY2VQYXJ0aWNpcGFudFR5cGUuaXNSZXF1aXJlZCA9IHRydWU7XHJcblxyXG4gICAgICB0aGlzLkVkaXREZXN0aW5hdGlvblBhcnRpY2lwYW50VHlwZSA9IG5ldyBEcm9wZG93bk9wdGlvbnMoKTtcclxuICAgICAgdGhpcy5FZGl0RGVzdGluYXRpb25QYXJ0aWNpcGFudFR5cGUubmFtZSA9IFwiRGVzdGluYXRpb25QYXJ0aWNpcGFudERUTy5QYXJ0aWNpcGFudFR5cGVJdGVtSURfR1VJRFwiXHJcbiAgICAgIHRoaXMuRWRpdERlc3RpbmF0aW9uUGFydGljaXBhbnRUeXBlLmxhYmVsS2V5ID0gXCJEZXN0aW5hdGlvblBhcnRpY2lwYW50VHlwZVwiXHJcbiAgICAgIHRoaXMuRWRpdERlc3RpbmF0aW9uUGFydGljaXBhbnRUeXBlLnNlbGVjdGVkSXRlbXMgPSBpbXBlcnNvbmF0aW9uLmRlc3RpbmF0aW9uUGFydGljaXBhbnREVE8ucGFydGljaXBhbnRUeXBlSXRlbUlEX0dVSUQ/LnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgIHRoaXMuRWRpdERlc3RpbmF0aW9uUGFydGljaXBhbnRUeXBlLmRhdGFTb3VyY2UgPSB0aGlzLlBhcnRpY2lwYW50VHlwZUxpc3RcclxuICAgICAgdGhpcy5FZGl0RGVzdGluYXRpb25QYXJ0aWNpcGFudFR5cGUuc2luZ2xlU2VsZWN0aW9uID0gdHJ1ZTtcclxuICAgICAgdGhpcy5FZGl0RGVzdGluYXRpb25QYXJ0aWNpcGFudFR5cGUuYWxsb3dTZWFyY2hGaWx0ZXIgPSB0cnVlO1xyXG4gICAgICB0aGlzLkVkaXREZXN0aW5hdGlvblBhcnRpY2lwYW50VHlwZS5pc1JlcXVpcmVkID0gdHJ1ZTtcclxuXHJcbiAgICAgIGxldCBzb3VyY2VQZXJtaXNzaW9uU2V0U2VsZWN0ZWRJdGVtO1xyXG4gICAgICBsZXQgc291cmNlVXNlck1vZGVsID0gbmV3IEF1dG9jb21wbGV0ZURUTygpO1xyXG4gICAgICBpZiAoaW1wZXJzb25hdGlvbi5zb3VyY2VQYXJ0aWNpcGFudERUTy5wYXJ0aWNpcGFudFR5cGVJdGVtSURfR1VJRD8udG9Mb3dlckNhc2UoKSA9PSBQYXJ0aWNpcGFudFR5cGUuVXNlcikge1xyXG4gICAgICAgIHNvdXJjZVVzZXJNb2RlbC5rZXkgPSBpbXBlcnNvbmF0aW9uLnNvdXJjZVBhcnRpY2lwYW50RFRPLnVzZXJJRF9HVUlEXHJcbiAgICAgICAgc291cmNlVXNlck1vZGVsLnZhbHVlID0gaW1wZXJzb25hdGlvbi5zb3VyY2VQYXJ0aWNpcGFudERUTy5wYXJ0aWNpcGFudE5hbWVTdHI7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgc291cmNlUGVybWlzc2lvblNldFNlbGVjdGVkSXRlbSA9IGltcGVyc29uYXRpb24uc291cmNlUGFydGljaXBhbnREVE8ucGVybWlzc2lvblNldElEX0dVSUQ/LnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5FZGl0U291cmNlUGVybWlzc2lvblNldExpc3QgPSBuZXcgRHJvcGRvd25PcHRpb25zKCk7XHJcbiAgICAgIHRoaXMuRWRpdFNvdXJjZVBlcm1pc3Npb25TZXRMaXN0Lm5hbWUgPSBcIlNvdXJjZVBhcnRpY2lwYW50RFRPLlBlcm1pc3Npb25TZXRJRF9HVUlEXCJcclxuICAgICAgdGhpcy5FZGl0U291cmNlUGVybWlzc2lvblNldExpc3QubGFiZWxLZXkgPSBcIlNvdXJjZVBlcm1pc3Npb25TZXRMaXN0XCJcclxuICAgICAgdGhpcy5FZGl0U291cmNlUGVybWlzc2lvblNldExpc3Quc2VsZWN0ZWRJdGVtcyA9IHNvdXJjZVBlcm1pc3Npb25TZXRTZWxlY3RlZEl0ZW07XHJcbiAgICAgIHRoaXMuRWRpdFNvdXJjZVBlcm1pc3Npb25TZXRMaXN0LmRhdGFTb3VyY2UgPSB0aGlzLlBlcm1pc3Npb25TZXRMaXN0XHJcbiAgICAgIHRoaXMuRWRpdFNvdXJjZVBlcm1pc3Npb25TZXRMaXN0LnNpbmdsZVNlbGVjdGlvbiA9IHRydWU7XHJcbiAgICAgIHRoaXMuRWRpdFNvdXJjZVBlcm1pc3Npb25TZXRMaXN0LmFsbG93U2VhcmNoRmlsdGVyID0gdHJ1ZTtcclxuICAgICAgdGhpcy5FZGl0U291cmNlUGVybWlzc2lvblNldExpc3QuaXNSZXF1aXJlZCA9IHRydWU7XHJcblxyXG4gICAgICB0aGlzLkVkaXRTb3VyY2VVc2VyQXV0b0NvbXBsZXRlID0gbmV3IEF1dG9jb21wbGV0ZU9wdGlvbnMoKTtcclxuICAgICAgdGhpcy5FZGl0U291cmNlVXNlckF1dG9Db21wbGV0ZS5uYW1lID0gXCJTb3VyY2VQYXJ0aWNpcGFudERUTy5Vc2VySURfR1VJRFwiO1xyXG4gICAgICB0aGlzLkVkaXRTb3VyY2VVc2VyQXV0b0NvbXBsZXRlLmxhYmVsS2V5ID0gXCJVc2VyXCI7XHJcbiAgICAgIHRoaXMuRWRpdFNvdXJjZVVzZXJBdXRvQ29tcGxldGUudHlwZSA9IElucHV0VHlwZS5UZXh0O1xyXG4gICAgICB0aGlzLkVkaXRTb3VyY2VVc2VyQXV0b0NvbXBsZXRlLmlzUmVxdWlyZWQgPSB0cnVlO1xyXG4gICAgICB0aGlzLkVkaXRTb3VyY2VVc2VyQXV0b0NvbXBsZXRlLnNlbGVjdGVkVmFsdWUgPSBzb3VyY2VVc2VyTW9kZWw7XHJcbiAgICAgIHRoaXMuRWRpdFNvdXJjZVVzZXJBdXRvQ29tcGxldGUuYWN0aW9uVVJMID0gdGhpcy5BcGlVcmwgKyBcIkF1dG9Db21wbGV0ZVVzZXJcIlxyXG4gICAgICB0aGlzLkVkaXRTb3VyY2VVc2VyQXV0b0NvbXBsZXRlLnZhbGlkYXRpb25Ub2tlbiA9IHRoaXMuYXV0aFNlcnZpY2UuYXV0aG9yaXphdGlvbkhlYWRlclZhbHVlKClcclxuXHJcbiAgICAgIGxldCBkZXN0aW5hdGlvblBlcm1pc3Npb25TZXRTZWxlY3RlZEl0ZW07XHJcbiAgICAgIGxldCBkZXN0aW5hdGlvblVzZXJNb2RlbCA9IG5ldyBBdXRvY29tcGxldGVEVE8oKTtcclxuICAgICAgaWYgKGltcGVyc29uYXRpb24uZGVzdGluYXRpb25QYXJ0aWNpcGFudERUTy5wYXJ0aWNpcGFudFR5cGVJdGVtSURfR1VJRCA9PSBQYXJ0aWNpcGFudFR5cGUuVXNlcikge1xyXG4gICAgICAgIGRlc3RpbmF0aW9uVXNlck1vZGVsLmtleSA9IGltcGVyc29uYXRpb24uZGVzdGluYXRpb25QYXJ0aWNpcGFudERUTy51c2VySURfR1VJRFxyXG4gICAgICAgIGRlc3RpbmF0aW9uVXNlck1vZGVsLnZhbHVlID0gaW1wZXJzb25hdGlvbi5kZXN0aW5hdGlvblBhcnRpY2lwYW50RFRPLnBhcnRpY2lwYW50TmFtZVN0cjtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICBkZXN0aW5hdGlvblBlcm1pc3Npb25TZXRTZWxlY3RlZEl0ZW0gPSBpbXBlcnNvbmF0aW9uLmRlc3RpbmF0aW9uUGFydGljaXBhbnREVE8ucGVybWlzc2lvblNldElEX0dVSUQ/LnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5FZGl0RGVzdGluYXRpb25QZXJtaXNzaW9uU2V0TGlzdCA9IG5ldyBEcm9wZG93bk9wdGlvbnMoKTtcclxuICAgICAgdGhpcy5FZGl0RGVzdGluYXRpb25QZXJtaXNzaW9uU2V0TGlzdC5uYW1lID0gXCJEZXN0aW5hdGlvblBhcnRpY2lwYW50RFRPLlBlcm1pc3Npb25TZXRJRF9HVUlEXCJcclxuICAgICAgdGhpcy5FZGl0RGVzdGluYXRpb25QZXJtaXNzaW9uU2V0TGlzdC5sYWJlbEtleSA9IFwiRGVzdGluYXRpb25QZXJtaXNzaW9uU2V0TGlzdFwiXHJcbiAgICAgIHRoaXMuRWRpdERlc3RpbmF0aW9uUGVybWlzc2lvblNldExpc3Quc2VsZWN0ZWRJdGVtcyA9IGRlc3RpbmF0aW9uUGVybWlzc2lvblNldFNlbGVjdGVkSXRlbVxyXG4gICAgICB0aGlzLkVkaXREZXN0aW5hdGlvblBlcm1pc3Npb25TZXRMaXN0LmRhdGFTb3VyY2UgPSB0aGlzLlBlcm1pc3Npb25TZXRMaXN0XHJcbiAgICAgIHRoaXMuRWRpdERlc3RpbmF0aW9uUGVybWlzc2lvblNldExpc3Quc2luZ2xlU2VsZWN0aW9uID0gdHJ1ZTtcclxuICAgICAgdGhpcy5FZGl0RGVzdGluYXRpb25QZXJtaXNzaW9uU2V0TGlzdC5hbGxvd1NlYXJjaEZpbHRlciA9IHRydWU7XHJcbiAgICAgIHRoaXMuRWRpdERlc3RpbmF0aW9uUGVybWlzc2lvblNldExpc3QuaXNSZXF1aXJlZCA9IHRydWU7XHJcblxyXG5cclxuICAgICAgdGhpcy5FZGl0RGVzdGluYXRpb25Vc2VyQXV0b0NvbXBsZXRlID0gbmV3IEF1dG9jb21wbGV0ZU9wdGlvbnMoKTtcclxuICAgICAgdGhpcy5FZGl0RGVzdGluYXRpb25Vc2VyQXV0b0NvbXBsZXRlLm5hbWUgPSBcIkRlc3RpbmF0aW9uUGFydGljaXBhbnREVE8uVXNlcklEX0dVSURcIjtcclxuICAgICAgdGhpcy5FZGl0RGVzdGluYXRpb25Vc2VyQXV0b0NvbXBsZXRlLmxhYmVsS2V5ID0gXCJVc2VyXCI7XHJcbiAgICAgIHRoaXMuRWRpdERlc3RpbmF0aW9uVXNlckF1dG9Db21wbGV0ZS50eXBlID0gSW5wdXRUeXBlLlRleHQ7XHJcbiAgICAgIHRoaXMuRWRpdERlc3RpbmF0aW9uVXNlckF1dG9Db21wbGV0ZS5pc1JlcXVpcmVkID0gdHJ1ZTtcclxuICAgICAgdGhpcy5FZGl0RGVzdGluYXRpb25Vc2VyQXV0b0NvbXBsZXRlLnNlbGVjdGVkVmFsdWUgPSBkZXN0aW5hdGlvblVzZXJNb2RlbFxyXG4gICAgICB0aGlzLkVkaXREZXN0aW5hdGlvblVzZXJBdXRvQ29tcGxldGUuYWN0aW9uVVJMID0gdGhpcy5BcGlVcmwgKyBcIkF1dG9Db21wbGV0ZVVzZXJcIlxyXG4gICAgICB0aGlzLkVkaXREZXN0aW5hdGlvblVzZXJBdXRvQ29tcGxldGUudmFsaWRhdGlvblRva2VuID0gdGhpcy5hdXRoU2VydmljZS5hdXRob3JpemF0aW9uSGVhZGVyVmFsdWUoKVxyXG5cclxuICAgICAgdGhpcy5FZGl0SXNBY3RpdmUgPSBuZXcgQ2hlY2tCb3hPcHRpb25zKCk7XHJcbiAgICAgIHRoaXMuRWRpdElzQWN0aXZlLm5hbWUgPSBcIklzQWN0aXZlXCJcclxuICAgICAgdGhpcy5FZGl0SXNBY3RpdmUubGFiZWxLZXkgPSBcIkFjdGl2ZVwiXHJcbiAgICAgIHRoaXMuRWRpdElzQWN0aXZlLnZhbHVlID0gaW1wZXJzb25hdGlvbi5pc0FjdGl2ZVxyXG5cclxuICAgICAgdGhpcy5FZGl0RXhwaXJlc0F0ID0gbmV3IERhdGVQaWNrZXJPcHRpb25zKCk7XHJcbiAgICAgIHRoaXMuRWRpdEV4cGlyZXNBdC5uYW1lID0gXCJFeHBpcmVzQXRcIlxyXG4gICAgICB0aGlzLkVkaXRFeHBpcmVzQXQubGFiZWxLZXkgPSBcIkV4cGlyZXNBdFwiXHJcbiAgICAgIHRoaXMuRWRpdEV4cGlyZXNBdC5pc1JlcXVpcmVkID0gdHJ1ZVxyXG4gICAgICB0aGlzLkVkaXRFeHBpcmVzQXQudmFsdWUgPSBpbXBlcnNvbmF0aW9uLmV4cGlyZXNBdFxyXG4gICAgICB0aGlzLkVkaXRFeHBpcmVzQXQuc3RhcnRWaWV3ID0gU3RhcnRWaWV3Lk1vbnRoXHJcbiAgICAgIHRoaXMuRWRpdEV4cGlyZXNBdC5waWNrZXJUeXBlID0gUGlja2VyVHlwZS5DYWxlbmRhclxyXG4gICAgICB0aGlzLkVkaXRFeHBpcmVzQXQuc2VsZWN0TW9kZSA9IFNlbGVjdE1vZGUuU2luZ2xlXHJcbiAgICAgIHRoaXMuRWRpdEV4cGlyZXNBdC5zdGFydERhdGUgPSBuZXcgRGF0ZSgpXHJcblxyXG5cclxuICAgICAgdGhpcy5tb2RhbFNlcnZpY2Uub3BlbihlZGl0SW1wZXJzb25hdGlvbk1vZGFsKTtcclxuICAgICAgdGhpcy51dGlsaXR5U2VydmljZS5zdG9wQmxvY2tVSSgpXHJcbiAgICB9KTtcclxuXHJcbiAgfVxyXG5cclxuICBnZXRFZGl0SW1wZXJzb25hdGlvblJ1bGVNb2RlbCA9ICgpID0+IHtcclxuICAgIGxldCBwYXJhbUFycmF5OiBhbnlbXSA9IFtdO1xyXG4gICAgbGV0IFJlc3VsdE1vZGVsID0gdGhpcy5FZGl0SW1wZXJzb25hdGlvbkZvcm0udmFsdWUgYXMgYW55O1xyXG5cclxuICAgIGxldCBFZGl0TW9kZWw6IEltcGVyc29uYXRpb25SdWxlTW9kZWwgPSBuZXcgSW1wZXJzb25hdGlvblJ1bGVNb2RlbCgpO1xyXG4gICAgRWRpdE1vZGVsLklEX0dVSUQgPSB0aGlzLkltcGVyc29uYXRpb25JZFxyXG4gICAgRWRpdE1vZGVsLkRlc3RpbmF0aW9uUGFydGljaXBhbnREVE8uSURfR1VJRCA9IHRoaXMuRGVzdGluYXRpb25QYXJ0aWNpcGFudElkXHJcbiAgICBFZGl0TW9kZWwuU291cmNlUGFydGljaXBhbnREVE8uSURfR1VJRCA9IHRoaXMuU291cmNlUGFydGljaXBhbnRJZFxyXG4gICAgRWRpdE1vZGVsLlNvdXJjZVBhcnRpY2lwYW50RFRPLlBhcnRpY2lwYW50VHlwZUl0ZW1JRF9HVUlEID0gUmVzdWx0TW9kZWxbXCJTb3VyY2VQYXJ0aWNpcGFudERUTy5QYXJ0aWNpcGFudFR5cGVJdGVtSURfR1VJRFwiXVxyXG4gICAgRWRpdE1vZGVsLkRlc3RpbmF0aW9uUGFydGljaXBhbnREVE8uUGFydGljaXBhbnRUeXBlSXRlbUlEX0dVSUQgPSBSZXN1bHRNb2RlbFtcIkRlc3RpbmF0aW9uUGFydGljaXBhbnREVE8uUGFydGljaXBhbnRUeXBlSXRlbUlEX0dVSURcIl1cclxuICAgIEVkaXRNb2RlbC5FeHBpcmVzQXQgPSBSZXN1bHRNb2RlbC5FeHBpcmVzQXRcclxuICAgIEVkaXRNb2RlbC5Jc0FjdGl2ZSA9IFJlc3VsdE1vZGVsLklzQWN0aXZlXHJcbiAgICBpZiAoRWRpdE1vZGVsLkRlc3RpbmF0aW9uUGFydGljaXBhbnREVE8uUGFydGljaXBhbnRUeXBlSXRlbUlEX0dVSUQgPT0gUGFydGljaXBhbnRUeXBlLlVzZXIpXHJcbiAgICAgIEVkaXRNb2RlbC5EZXN0aW5hdGlvblBhcnRpY2lwYW50RFRPLlVzZXJJRF9HVUlEID0gUmVzdWx0TW9kZWxbXCJEZXN0aW5hdGlvblBhcnRpY2lwYW50RFRPLlVzZXJJRF9HVUlEXCJdLmtleVxyXG4gICAgZWxzZVxyXG4gICAgICBFZGl0TW9kZWwuRGVzdGluYXRpb25QYXJ0aWNpcGFudERUTy5QZXJtaXNzaW9uU2V0SURfR1VJRCA9IFJlc3VsdE1vZGVsW1wiRGVzdGluYXRpb25QYXJ0aWNpcGFudERUTy5QZXJtaXNzaW9uU2V0SURfR1VJRFwiXVxyXG4gICAgaWYgKEVkaXRNb2RlbC5Tb3VyY2VQYXJ0aWNpcGFudERUTy5QYXJ0aWNpcGFudFR5cGVJdGVtSURfR1VJRCA9PSBQYXJ0aWNpcGFudFR5cGUuVXNlcilcclxuICAgICAgRWRpdE1vZGVsLlNvdXJjZVBhcnRpY2lwYW50RFRPLlVzZXJJRF9HVUlEID0gUmVzdWx0TW9kZWxbXCJTb3VyY2VQYXJ0aWNpcGFudERUTy5Vc2VySURfR1VJRFwiXS5rZXlcclxuICAgIGVsc2VcclxuICAgICAgRWRpdE1vZGVsLlNvdXJjZVBhcnRpY2lwYW50RFRPLlBlcm1pc3Npb25TZXRJRF9HVUlEID0gUmVzdWx0TW9kZWxbXCJTb3VyY2VQYXJ0aWNpcGFudERUTy5QZXJtaXNzaW9uU2V0SURfR1VJRFwiXVxyXG4gICAgcGFyYW1BcnJheS5wdXNoKEVkaXRNb2RlbCk7XHJcbiAgICByZXR1cm4gcGFyYW1BcnJheTtcclxuICB9XHJcblxyXG4gIGdldEVkaXRJbXBlcnNvbmF0aW9uUnVsZUZ1bmN0aW9uID0gKEVkaXRNb2RlbCk6IE9ic2VydmFibGU8YW55PiA9PiB7XHJcbiAgICByZXR1cm4gdGhpcy5JbXBlcnNvbmF0aW9uUnVsZVNlcnZpY2UuZWRpdEltcGVyc29uYXRpb25SdWxlKEVkaXRNb2RlbClcclxuICB9XHJcblxyXG4gIGVkaXREZXN0aW5hdGlvblBhcnRpY2lwYW50T25DaGFuZ2Uoa2V5KSB7XHJcbiAgICBrZXkgPSBrZXk/LnRvTG93ZXJDYXNlKCk7XHJcbiAgICBzd2l0Y2ggKGtleSkge1xyXG4gICAgICBjYXNlIFBhcnRpY2lwYW50VHlwZS5QZXJtaXNzaW9uU2V0OlxyXG4gICAgICAgIHRoaXMuRWRpdFNob3dEZXN0aW5hdGlvblBlcm1pc3Npb25MaXN0ID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLkVkaXRTaG93RGVzdGluYXRpb25Vc2VyQXV0b0NvbXBsZXRlID0gZmFsc2U7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgUGFydGljaXBhbnRUeXBlLlVzZXI6XHJcbiAgICAgICAgdGhpcy5FZGl0U2hvd0Rlc3RpbmF0aW9uUGVybWlzc2lvbkxpc3QgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLkVkaXRTaG93RGVzdGluYXRpb25Vc2VyQXV0b0NvbXBsZXRlID0gdHJ1ZTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGVkaXRTb3VyY2VQYXJ0aWNpcGFudE9uQ2hhbmdlKGtleSkge1xyXG4gICAga2V5ID0ga2V5Py50b0xvd2VyQ2FzZSgpO1xyXG4gICAgc3dpdGNoIChrZXkpIHtcclxuICAgICAgY2FzZSBQYXJ0aWNpcGFudFR5cGUuUGVybWlzc2lvblNldDpcclxuICAgICAgICB0aGlzLkVkaXRTaG93U291cmNlUGVybWlzc2lvbkxpc3QgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuRWRpdFNob3dTb3VyY2VVc2VyQXV0b0NvbXBsZXRlID0gZmFsc2U7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgUGFydGljaXBhbnRUeXBlLlVzZXI6XHJcbiAgICAgICAgdGhpcy5FZGl0U2hvd1NvdXJjZVBlcm1pc3Npb25MaXN0ID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5FZGl0U2hvd1NvdXJjZVVzZXJBdXRvQ29tcGxldGUgPSB0cnVlO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy9EZWxldGUgSW1wZXJzb25hdGlvblJ1bGVcclxuICBzaG93RGVsZXRlSW1wZXJzb25hdGlvbk1vZGFsKGltcGVyc29uYXRpb25SdWxlSUQ6IHN0cmluZykge1xyXG4gICAgdGhpcy5kZWxldGVJbXBlcnNvbmF0aW9uUnVsZUlkID0gaW1wZXJzb25hdGlvblJ1bGVJRDtcclxuXHJcbiAgICAvL2FycmF5IHNlbnQgdG8gc2VydmljZSBmdW5jdGlvblxyXG4gICAgbGV0IHBhcmFtQXJyYXk6IGFueVtdID0gW107XHJcbiAgICBwYXJhbUFycmF5LnB1c2godGhpcy5kZWxldGVJbXBlcnNvbmF0aW9uUnVsZUlkKTtcclxuXHJcbiAgICB0aGlzLkRlbGV0ZUNvbmZpcm1hdGlvbk9wdGlvbnMgPSBuZXcgQ29uZmlybWF0aW9uTW9kYWxPcHRpb25zKCk7XHJcbiAgICB0aGlzLkRlbGV0ZUNvbmZpcm1hdGlvbk9wdGlvbnMuc2VydmljZVN1Ym1pdEZ1bmN0aW9uID0gdGhpcy5kZWxldGVJbXBlcnNvbmF0aW9uO1xyXG4gICAgdGhpcy5EZWxldGVDb25maXJtYXRpb25PcHRpb25zLnNlcnZpY2VTdWJtaXRNb2RlbCA9IHBhcmFtQXJyYXk7XHJcbiAgICB0aGlzLkRlbGV0ZUNvbmZpcm1hdGlvbk9wdGlvbnMucGFnaW5nUmVmZXJlbmNlID0gdGhpcy5wYWdpbmdFbGVtZW50O1xyXG5cclxuICAgIHRoaXMuZGVsZXRlQ29udHJvbExvYWRlZCA9IHRydWU7XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy5Db25maXJtYXRpb25Nb2RhbENvbnRyb2wuc2hvd01vZGFsKCk7XHJcbiAgICB9LCAyMDApO1xyXG4gIH1cclxuXHJcbiAgZGVsZXRlSW1wZXJzb25hdGlvbiA9IChpZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxhbnk+ID0+IHtcclxuICAgIHJldHVybiB0aGlzLkltcGVyc29uYXRpb25SdWxlU2VydmljZS5kZWxldGVJbXBlcnNvbmF0aW9uUnVsZShpZCk7XHJcbiAgfVxyXG5cclxuICAvL09uIGRlc3Ryb3lcclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMucmVxdWVzdEhhbmRsZXJTZXJ2aWNlLmRlc3Ryb3lIYW5kbGVyKCk7XHJcbiAgfVxyXG5cclxufVxyXG4iLCI8YmxvY2stdWk+PC9ibG9jay11aT5cclxuPCEtLSBQYWdlIENvbnRlbnQgLS0+XHJcbjxkaXYgKm5nSWY9XCJTaG93UGFnZUNvbnRlbnRcIiBjbGFzcz1cImNvbnRhaW5lci1mbHVpZFwiPlxyXG4gIDxkaXYgY2xhc3M9XCJjYXJkIGNhcmQtY3VzdG9tLWhcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJjYXJkLWhlYWRlciBib3JkZXItMCBwdC01XCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLXRpdGxlIGFsaWduLWl0ZW1zLXN0YXJ0IGZsZXgtY29sdW1uXCIgKm5nSWY9XCJJc0ZpbHRlckxvYWRlZFwiPlxyXG4gICAgICAgIDxmb3JtIFtmb3JtR3JvdXBdPVwiSW1wZXJzb25hdGlvbkZvcm1cIj5cclxuICAgICAgICAgIDwhLS0oT25DaGFuZ2UpPVwic2VhcmNoQ2xpZW50U2lkZSgkZXZlbnQpXCIgLS0+XHJcbiAgICAgICAgICA8QkJTRi1UZXh0Qm94IFtvcHRpb25zXT1cInNlYXJjaFRleHRCb3hcIiBbZ3JvdXBdPVwiSW1wZXJzb25hdGlvbkZvcm1cIj48L0JCU0YtVGV4dEJveD5cclxuICAgICAgICA8L2Zvcm0+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiY2FyZC10b29sYmFyXCI+XHJcbiAgICAgICAgPCEtLSBiZWdpbjo6TWVudSAtLT5cclxuICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tc20gYnRuLXByaW1hcnlcIiB0aXRsZT1cIkFkZFwiIChjbGljayk9XCJzaG93QWRkSW1wZXJzb25hdGlvbk1vZGFsKEFkZEltcGVyc29uYXRpb25Nb2RhbClcIj5cclxuICAgICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLXBsdXMgbWUtMVwiPjwvaT5cclxuICAgICAgICAgIHt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkFkZFwiKX19XHJcbiAgICAgICAgPC9idXR0b24+XHJcblxyXG4gICAgICAgIDwhLS0gZW5kOjpNZW51IC0tPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cImNhcmQtYm9keSBweS0zXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1yZXNwb25zaXZlXCI+XHJcbiAgICAgICAgPCEtLWJlZ2luOjpQZXJtaXNzaW9uIGxpc3QtLT5cclxuICAgICAgICA8dGFibGUgY2xhc3M9XCJ0YWJsZSBhbGlnbi1taWRkbGUgdGFibGUtcm93LWRhc2hlZCBmcy02IGd5LTUgZGF0YVRhYmxlIG5vLWZvb3RlclwiPlxyXG4gICAgICAgICAgPHRoZWFkPlxyXG4gICAgICAgICAgICA8dHIgY2xhc3M9XCJ0ZXh0LXN0YXJ0IHRleHQtZ3JheS00MDAgZnctYm9sZGVyIGZzLTcgdGV4dC11cHBlcmNhc2UgZ3MtMFwiPlxyXG5cclxuICAgICAgICAgICAgICA8dGggY2xhc3M9XCJtaW4tdy0xNTBweFwiPiBbe3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiUGFydGljaXBhbnRUeXBlXCIpfX1dIHt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIlNvdXJjZVwiKX19PC90aD5cclxuICAgICAgICAgICAgICA8dGggY2xhc3M9XCJtaW4tdy0xNTBweFwiPiBbe3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiUGFydGljaXBhbnRUeXBlXCIpfX1dIHt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkRlc3RpbmF0aW9uXCIpfX08L3RoPlxyXG4gICAgICAgICAgICAgIDx0aCBjbGFzcz1cIm1pbi13LTE1MHB4XCI+e3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiRXhwaXJlc0F0XCIpfX08L3RoPlxyXG4gICAgICAgICAgICAgIDx0aCBjbGFzcz1cIm1pbi13LTE1MHB4XCI+e3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiQWN0aXZlXCIpfX08L3RoPlxyXG4gICAgICAgICAgICAgIDx0aCBjbGFzcz1cIm1pbi13LTUwcHhcIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJBY3Rpb25cIil9fTwvdGg+XHJcbiAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICA8L3RoZWFkPlxyXG4gICAgICAgICAgPHRib2R5IGlkPVwibGlzdGluZ0NvbnRhaW5lclwiIGNsYXNzPVwiZnctYm9sZCB0ZXh0LWdyYXktNjAwIGJvcmRlci0wXCI+XHJcblxyXG4gICAgICAgICAgICA8dHIgKm5nRm9yPVwibGV0IEltcGVyc29uYXRpb24gb2YgY2xpZW50U2lkZVBhZ2luZ1Jlc3VsdFwiPlxyXG5cclxuICAgICAgICAgICAgICA8dGQ+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtZGFya1wiPlxyXG4gICAgICAgICAgICAgICAgICBbe3tJbXBlcnNvbmF0aW9uLnNvdXJjZVBhcnRpY2lwYW50RFRPLnBhcnRpY2lwYW50VHlwZUl0ZW1OYW1lU3RyfX1dIHt7SW1wZXJzb25hdGlvbi5zb3VyY2VQYXJ0aWNpcGFudERUTy5wYXJ0aWNpcGFudE5hbWVTdHJ9fVxyXG4gICAgICAgICAgICAgICAgPC9zcGFuPlxyXG5cclxuICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgIDx0ZD4gIFt7e0ltcGVyc29uYXRpb24uZGVzdGluYXRpb25QYXJ0aWNpcGFudERUTy5wYXJ0aWNpcGFudFR5cGVJdGVtTmFtZVN0cn19XSB7e0ltcGVyc29uYXRpb24uZGVzdGluYXRpb25QYXJ0aWNpcGFudERUTy5wYXJ0aWNpcGFudE5hbWVTdHJ9fTwvdGQ+XHJcblxyXG4gICAgICAgICAgICAgIDx0ZD57e0ltcGVyc29uYXRpb24uZXhwaXJlc0F0fX08L3RkPlxyXG4gICAgICAgICAgICAgIDx0ZD57e0ltcGVyc29uYXRpb24uaXNBY3RpdmV9fTwvdGQ+XHJcblxyXG4gICAgICAgICAgICAgIDx0ZD5cclxuXHJcbiAgICAgICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1idXR0b24gW21hdE1lbnVUcmlnZ2VyRm9yXT1cIm1lbnVcIiBjbGFzcz1cImJ0biBidG4tc20gYnRuLWljb24gYnRuLWxpZ2h0IGJ0bi1hY3RpdmUtbGlnaHQtcHJpbWFyeVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtZWxsaXBzaXMtaFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cclxuICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgIDxtYXQtbWVudSAjbWVudT1cIm1hdE1lbnVcIj5cclxuICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz1cImRyb3AtaXRlbSBweC0zXCIgbmdiRHJvcGRvd25JdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInNob3dFZGl0SW1wZXJzb25hdGlvbk1vZGFsKEltcGVyc29uYXRpb24uaURfR1VJRCxFZGl0SW1wZXJzb25hdGlvbk1vZGFsKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkcm9wLWxpbmsgcHgtM1wiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkVkaXRcIil9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2E+XHJcbiAgICAgICAgICAgICAgICAgICAgPGEgbmdiRHJvcGRvd25JdGVtIGNsYXNzPVwiZHJvcC1pdGVtIHB4LTNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzaG93RGVsZXRlSW1wZXJzb25hdGlvbk1vZGFsKEltcGVyc29uYXRpb24uaURfR1VJRClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZHJvcC1saW5rIHB4LTNcIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJEZWxldGVcIil9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2E+XHJcbiAgICAgICAgICAgICAgICAgIDwvbWF0LW1lbnU+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICA8dHIgKm5nSWY9XCJjbGllbnRTaWRlUGFnaW5nUmVzdWx0Lmxlbmd0aCA9PSAwXCI+XHJcbiAgICAgICAgICAgICAgPHRkIGNvbHNwYW49XCI1XCI+XHJcbiAgICAgICAgICAgICAgICA8bGliLWVtcHR5LWRhdGE+PC9saWItZW1wdHktZGF0YT5cclxuICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgPC90Ym9keT5cclxuICAgICAgICA8L3RhYmxlPlxyXG5cclxuICAgICAgICA8IS0tZW5kOjpQZXJtaXNzaW9uIGxpc3QtLT5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY2FyZC1mb290ZXIgYm9yZGVyLTBcIj5cclxuICAgICAgPEJCU0YtUGFnaW5nIChJdGVtcyk9XCJzZXRJbXBlcnNvbmF0aW9uTGlzdFJlc3VsdCgkZXZlbnQpXCIgKm5nSWY9XCJJc0ZpbHRlckxvYWRlZFwiXHJcbiAgICAgICAgICAgICAgICAgICBbb3B0aW9uc109XCJJbXBlcnNvbmF0aW9uUGFnaW5nXCIgW2dyb3VwXT1cIkltcGVyc29uYXRpb25Gb3JtXCIgI0ltcGVyc29uYXRpb25QYWdpbmdWaWV3RWxlbWVudD5cclxuICAgICAgPC9CQlNGLVBhZ2luZz5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG5cclxuPC9kaXY+XHJcbjwhLS0gQWRkIE1vZGFsIC0tPlxyXG48bmctdGVtcGxhdGUgI0FkZEltcGVyc29uYXRpb25Nb2RhbCBsZXQtbW9kYWw+XHJcbiAgPGRpdiBjbGFzcz1cIm1vZGFsLWhlYWRlciBwYi0wIGJvcmRlci0wIGp1c3RpZnktY29udGVudC1lbmRcIj5cclxuICAgIDxoNSBjbGFzcz1cIm1vZGFsLXRpdGxlXCIgaWQ9XCJleGFtcGxlTW9kYWxMYWJlbFwiPjwvaDU+XHJcbiAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBkYXRhLWRpc21pc3M9XCJtb2RhbFwiIGFyaWEtbGFiZWw9XCJDbG9zZVwiIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4taWNvbiBidG4tYWN0aXZlLWNvbG9yLXByaW1hcnlcIiAoY2xpY2spPVwibW9kYWwuZGlzbWlzcygpXCI+XHJcbiAgICAgIDxzcGFuIGNsYXNzPVwic3ZnLWljb24gc3ZnLWljb24tMVwiPlxyXG4gICAgICAgIDxzcGFuIFtpbmxpbmVTVkddPVwiJy4vc3JjL2Fzc2V0cy9pbWFnZXMvYXJyMDYxLnN2ZydcIj48L3NwYW4+XHJcbiAgICAgIDwvc3Bhbj5cclxuICAgIDwvYnV0dG9uPlxyXG4gIDwvZGl2PlxyXG4gIDxkaXYgY2xhc3M9XCJtb2RhbC1ib2R5IHNjcm9sbC15IHB4LTEwIHB4LWxnLTE1IHB0LTAgcGItMTVcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJtYi0xMyB0ZXh0LWNlbnRlclwiPlxyXG4gICAgICA8aDEgY2xhc3M9XCJtYi0zXCI+e3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiQWRkXCIpfX0ge3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiSW1wZXJzb25hdGlvblJ1bGVcIil9fTwvaDE+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8QkJTRi1Gb3JtIFtvcHRpb25zXT1cIkFkZEltcGVyc29uYXRpb25Gb3JtT3B0aW9uc1wiPlxyXG5cclxuICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTJcIj5cclxuICAgICAgICAgIDxCQlNGLURyb3Bkb3duTGlzdCBbb3B0aW9uc109XCJBZGRTb3VyY2VQYXJ0aWNpcGFudFR5cGVcIiAoT25DaGFuZ2UpPVwiYWRkU291cmNlUGFydGljaXBhbnRPbkNoYW5nZSgkZXZlbnQpXCIgW2dyb3VwXT1cIkFkZEltcGVyc29uYXRpb25Gb3JtXCI+XHJcbiAgICAgICAgICA8L0JCU0YtRHJvcGRvd25MaXN0PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTJcIj5cclxuICAgICAgICAgIDxCQlNGLURyb3Bkb3duTGlzdCBbb3B0aW9uc109XCJBZGRTb3VyY2VQZXJtaXNzaW9uU2V0TGlzdFwiICpuZ0lmPVwiQWRkU2hvd1NvdXJjZVBlcm1pc3Npb25MaXN0XCIgW2dyb3VwXT1cIkFkZEltcGVyc29uYXRpb25Gb3JtXCI+XHJcbiAgICAgICAgICA8L0JCU0YtRHJvcGRvd25MaXN0PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTJcIj5cclxuICAgICAgICAgIDxCQlNGLUF1dG9jb21wbGV0ZVRleHRCb3ggW29wdGlvbnNdPVwiQWRkU291cmNlVXNlckF1dG9Db21wbGV0ZVwiICpuZ0lmPVwiQWRkU2hvd1NvdXJjZVVzZXJBdXRvQ29tcGxldGVcIiBbZ3JvdXBdPVwiQWRkSW1wZXJzb25hdGlvbkZvcm1cIj5cclxuICAgICAgICAgIDwvQkJTRi1BdXRvY29tcGxldGVUZXh0Qm94PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyXCI+XHJcbiAgICAgICAgICA8QkJTRi1Ecm9wZG93bkxpc3QgW29wdGlvbnNdPVwiQWRkRGVzdGluYXRpb25QYXJ0aWNpcGFudFR5cGVcIiAoT25DaGFuZ2UpPVwiYWRkRGVzdGluYXRpb25QYXJ0aWNpcGFudE9uQ2hhbmdlKCRldmVudClcIiBbZ3JvdXBdPVwiQWRkSW1wZXJzb25hdGlvbkZvcm1cIj5cclxuICAgICAgICAgIDwvQkJTRi1Ecm9wZG93bkxpc3Q+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMlwiPlxyXG4gICAgICAgICAgPEJCU0YtRHJvcGRvd25MaXN0IFtvcHRpb25zXT1cIkFkZERlc3RpbmF0aW9uUGVybWlzc2lvblNldExpc3RcIiAqbmdJZj1cIkFkZFNob3dEZXN0aW5hdGlvblBlcm1pc3Npb25MaXN0XCIgW2dyb3VwXT1cIkFkZEltcGVyc29uYXRpb25Gb3JtXCI+XHJcbiAgICAgICAgICA8L0JCU0YtRHJvcGRvd25MaXN0PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTJcIj5cclxuICAgICAgICAgIDxCQlNGLUF1dG9jb21wbGV0ZVRleHRCb3ggW29wdGlvbnNdPVwiQWRkRGVzdGluYXRpb25Vc2VyQXV0b0NvbXBsZXRlXCIgKm5nSWY9XCJBZGRTaG93RGVzdGluYXRpb25Vc2VyQXV0b0NvbXBsZXRlXCIgW2dyb3VwXT1cIkFkZEltcGVyc29uYXRpb25Gb3JtXCI+XHJcbiAgICAgICAgICA8L0JCU0YtQXV0b2NvbXBsZXRlVGV4dEJveD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyXCI+XHJcbiAgICAgICAgICA8QkJTRi1DaGVja0JveCBbb3B0aW9uc109XCJBZGRJc0FjdGl2ZVwiIFtncm91cF09XCJBZGRJbXBlcnNvbmF0aW9uRm9ybVwiPlxyXG4gICAgICAgICAgPC9CQlNGLUNoZWNrQm94PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyXCI+XHJcbiAgICAgICAgICA8QkJTRi1EYXRlVGltZVBpY2tlciBbb3B0aW9uc109XCJBZGRFeHBpcmVzQXRcIiBbZ3JvdXBdPVwiQWRkSW1wZXJzb25hdGlvbkZvcm1cIj5cclxuXHJcbiAgICAgICAgICA8L0JCU0YtRGF0ZVRpbWVQaWNrZXI+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwidGV4dC1jZW50ZXIgcHQtN1wiPlxyXG4gICAgICAgIDxidXR0b24gQ2xvc2VJbXBlcnNvbmF0aW9uTW9kYWwgaWQ9XCJDbG9zZUltcGVyc29uYXRpb25Nb2RhbFwiIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tbGlnaHQgbWUtMyBidG4tc21cIlxyXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIm1vZGFsLmRpc21pc3MoKVwiPlxyXG4gICAgICAgICAge3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiQ2FuY2VsTGFiZWxcIil9fVxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDxidXR0b24gdHlwZT1cInN1Ym1pdFwiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IGJ0bi1zbVwiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIlNhdmVMYWJlbFwiKX19PC9idXR0b24+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9CQlNGLUZvcm0+XHJcbiAgPC9kaXY+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48IS0tRWRpdCBNb2RhbC0tPlxyXG48bmctdGVtcGxhdGUgI0VkaXRJbXBlcnNvbmF0aW9uTW9kYWwgbGV0LW1vZGFsPlxyXG4gIDxkaXYgY2xhc3M9XCJtb2RhbC1oZWFkZXIgcGItMCBib3JkZXItMCBqdXN0aWZ5LWNvbnRlbnQtZW5kXCI+XHJcbiAgICA8aDUgY2xhc3M9XCJtb2RhbC10aXRsZVwiIGlkPVwiZXhhbXBsZU1vZGFsTGFiZWxcIj48L2g1PlxyXG4gICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgZGF0YS1kaXNtaXNzPVwibW9kYWxcIiBhcmlhLWxhYmVsPVwiQ2xvc2VcIiBjbGFzcz1cImJ0biBidG4tc20gYnRuLWljb24gYnRuLWFjdGl2ZS1jb2xvci1wcmltYXJ5XCIgKGNsaWNrKT1cIm1vZGFsLmRpc21pc3MoKVwiPlxyXG4gICAgICA8c3BhbiBjbGFzcz1cInN2Zy1pY29uIHN2Zy1pY29uLTFcIj5cclxuICAgICAgICA8c3BhbiBbaW5saW5lU1ZHXT1cIicuL3NyYy9hc3NldHMvaW1hZ2VzL2FycjA2MS5zdmcnXCI+PC9zcGFuPlxyXG4gICAgICA8L3NwYW4+XHJcbiAgICA8L2J1dHRvbj5cclxuICA8L2Rpdj5cclxuICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keSBzY3JvbGwteSBweC0xMCBweC1sZy0xNSBwdC0wIHBiLTE1XCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwibWItMTMgdGV4dC1jZW50ZXJcIj5cclxuICAgICAgPGgxIGNsYXNzPVwibWItM1wiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkVkaXRcIil9fSB7e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJJbXBlcnNvbmF0aW9uUnVsZVwiKX19PC9oMT5cclxuICAgIDwvZGl2PlxyXG4gICAgPEJCU0YtRm9ybSBbb3B0aW9uc109XCJFZGl0SW1wZXJzb25hdGlvbkZvcm1PcHRpb25zXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyXCI+XHJcbiAgICAgICAgICA8QkJTRi1Ecm9wZG93bkxpc3QgW29wdGlvbnNdPVwiRWRpdFNvdXJjZVBhcnRpY2lwYW50VHlwZVwiIChPbkNoYW5nZSk9XCJlZGl0U291cmNlUGFydGljaXBhbnRPbkNoYW5nZSgkZXZlbnQpXCIgW2dyb3VwXT1cIkVkaXRJbXBlcnNvbmF0aW9uRm9ybVwiPlxyXG4gICAgICAgICAgPC9CQlNGLURyb3Bkb3duTGlzdD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyXCI+XHJcbiAgICAgICAgICA8QkJTRi1Ecm9wZG93bkxpc3QgW29wdGlvbnNdPVwiRWRpdFNvdXJjZVBlcm1pc3Npb25TZXRMaXN0XCIgKm5nSWY9XCJFZGl0U2hvd1NvdXJjZVBlcm1pc3Npb25MaXN0XCIgW2dyb3VwXT1cIkVkaXRJbXBlcnNvbmF0aW9uRm9ybVwiPlxyXG4gICAgICAgICAgPC9CQlNGLURyb3Bkb3duTGlzdD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyXCI+XHJcbiAgICAgICAgICA8QkJTRi1BdXRvY29tcGxldGVUZXh0Qm94IFtvcHRpb25zXT1cIkVkaXRTb3VyY2VVc2VyQXV0b0NvbXBsZXRlXCIgKm5nSWY9XCJFZGl0U2hvd1NvdXJjZVVzZXJBdXRvQ29tcGxldGVcIiBbZ3JvdXBdPVwiRWRpdEltcGVyc29uYXRpb25Gb3JtXCI+XHJcbiAgICAgICAgICA8L0JCU0YtQXV0b2NvbXBsZXRlVGV4dEJveD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyXCI+XHJcbiAgICAgICAgICA8QkJTRi1Ecm9wZG93bkxpc3QgW29wdGlvbnNdPVwiRWRpdERlc3RpbmF0aW9uUGFydGljaXBhbnRUeXBlXCIgKE9uQ2hhbmdlKT1cImVkaXREZXN0aW5hdGlvblBhcnRpY2lwYW50T25DaGFuZ2UoJGV2ZW50KVwiIFtncm91cF09XCJFZGl0SW1wZXJzb25hdGlvbkZvcm1cIj5cclxuICAgICAgICAgIDwvQkJTRi1Ecm9wZG93bkxpc3Q+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMlwiPlxyXG4gICAgICAgICAgPEJCU0YtRHJvcGRvd25MaXN0IFtvcHRpb25zXT1cIkVkaXREZXN0aW5hdGlvblBlcm1pc3Npb25TZXRMaXN0XCIgKm5nSWY9XCJFZGl0U2hvd0Rlc3RpbmF0aW9uUGVybWlzc2lvbkxpc3RcIiBbZ3JvdXBdPVwiRWRpdEltcGVyc29uYXRpb25Gb3JtXCI+XHJcbiAgICAgICAgICA8L0JCU0YtRHJvcGRvd25MaXN0PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTJcIj5cclxuICAgICAgICAgIDxCQlNGLUF1dG9jb21wbGV0ZVRleHRCb3ggW29wdGlvbnNdPVwiRWRpdERlc3RpbmF0aW9uVXNlckF1dG9Db21wbGV0ZVwiICpuZ0lmPVwiRWRpdFNob3dEZXN0aW5hdGlvblVzZXJBdXRvQ29tcGxldGVcIiBbZ3JvdXBdPVwiRWRpdEltcGVyc29uYXRpb25Gb3JtXCI+XHJcbiAgICAgICAgICA8L0JCU0YtQXV0b2NvbXBsZXRlVGV4dEJveD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyXCI+XHJcbiAgICAgICAgICA8QkJTRi1DaGVja0JveCBbb3B0aW9uc109XCJFZGl0SXNBY3RpdmVcIiBbZ3JvdXBdPVwiRWRpdEltcGVyc29uYXRpb25Gb3JtXCI+XHJcbiAgICAgICAgICA8L0JCU0YtQ2hlY2tCb3g+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTJcIj5cclxuICAgICAgICAgIDxCQlNGLURhdGVUaW1lUGlja2VyIFtvcHRpb25zXT1cIkVkaXRFeHBpcmVzQXRcIiBbZ3JvdXBdPVwiRWRpdEltcGVyc29uYXRpb25Gb3JtXCI+XHJcblxyXG4gICAgICAgICAgPC9CQlNGLURhdGVUaW1lUGlja2VyPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cInRleHQtY2VudGVyIHB0LTdcIj5cclxuICAgICAgICA8YnV0dG9uICNDbG9zZUVkaXRJbXBlcnNvbmF0aW9uTW9kYWwgaWQ9XCJDbG9zZUVkaXRJbXBlcnNvbmF0aW9uTW9kYWxcIiB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1saWdodCBidG4tc20gIG1lLTNcIiBkYXRhLWRpc21pc3M9XCJtb2RhbFwiIChjbGljayk9XCJtb2RhbC5kaXNtaXNzKClcIj5cclxuICAgICAgICAgIHt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkNhbmNlbExhYmVsXCIpfX1cclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICA8YnV0dG9uIHR5cGU9XCJzdWJtaXRcIiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBidG4tc21cIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJTYXZlTGFiZWxcIil9fTwvYnV0dG9uPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvQkJTRi1Gb3JtPlxyXG4gIDwvZGl2PlxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuXHJcbjwhLS1kZWxldGUgTW9kYWwtLT5cclxuPEJCU0YtQ29uZmlybWF0aW9uTW9kYWwgKm5nSWY9XCJkZWxldGVDb250cm9sTG9hZGVkXCIgW29wdGlvbnNdPVwiRGVsZXRlQ29uZmlybWF0aW9uT3B0aW9uc1wiIGlkPVwiQ29uZmlybWF0aW9uTW9kYWxDb250cm9sXCIgI0NvbmZpcm1hdGlvbk1vZGFsQ29udHJvbD48L0JCU0YtQ29uZmlybWF0aW9uTW9kYWw+XHJcblxyXG4iXX0=
|