common-header-lib 0.0.1

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.
Files changed (195) hide show
  1. package/README.md +24 -0
  2. package/assets/.gitkeep +0 -0
  3. package/assets/i18n/ar.json +83 -0
  4. package/assets/i18n/de.json +83 -0
  5. package/assets/i18n/en.json +83 -0
  6. package/assets/i18n/es.json +83 -0
  7. package/assets/i18n/fr.json +83 -0
  8. package/assets/i18n/hi.json +83 -0
  9. package/assets/i18n/ja.json +83 -0
  10. package/assets/i18n/ko.json +83 -0
  11. package/assets/images/APP019.svg +6 -0
  12. package/assets/images/APP020.svg +4 -0
  13. package/assets/images/APP021.svg +6 -0
  14. package/assets/images/APP022.svg +6 -0
  15. package/assets/images/APP023.svg +11 -0
  16. package/assets/images/APP024.svg +9 -0
  17. package/assets/images/APP025.svg +8 -0
  18. package/assets/images/APP026.svg +4 -0
  19. package/assets/images/APP027.svg +5 -0
  20. package/assets/images/APP028.svg +6 -0
  21. package/assets/images/APP029.svg +12 -0
  22. package/assets/images/APP030.svg +20 -0
  23. package/assets/images/APP031.svg +14 -0
  24. package/assets/images/APP032.svg +17 -0
  25. package/assets/images/Frame.svg +104 -0
  26. package/assets/images/apps-1.svg +22 -0
  27. package/assets/images/bell-icon.svg +3 -0
  28. package/assets/images/check_circle.svg +3 -0
  29. package/assets/images/close copy.svg +5 -0
  30. package/assets/images/close.svg +5 -0
  31. package/assets/images/copy-img.svg +3 -0
  32. package/assets/images/cross-search.svg +4 -0
  33. package/assets/images/domain_img.svg +3 -0
  34. package/assets/images/east.svg +3 -0
  35. package/assets/images/error.svg +3 -0
  36. package/assets/images/filepath.svg +8 -0
  37. package/assets/images/flag1.svg +3 -0
  38. package/assets/images/gc-mail.svg +3 -0
  39. package/assets/images/grey-arrow.svg +3 -0
  40. package/assets/images/info.svg +3 -0
  41. package/assets/images/local.svg +3 -0
  42. package/assets/images/lock-pass.svg +3 -0
  43. package/assets/images/lock1.svg +3 -0
  44. package/assets/images/login-bg/default_bg.svg +448 -0
  45. package/assets/images/login-bg/visibility.svg +3 -0
  46. package/assets/images/login-bg/visibility_off.svg +3 -0
  47. package/assets/images/logo.png +0 -0
  48. package/assets/images/logout.svg +3 -0
  49. package/assets/images/mail-icon.svg +3 -0
  50. package/assets/images/marker-pin.svg +4 -0
  51. package/assets/images/noti_ticket.svg +3 -0
  52. package/assets/images/pass-img.svg +3 -0
  53. package/assets/images/refresh-1.svg +3 -0
  54. package/assets/images/schedule.svg +1 -0
  55. package/assets/images/search-filter.svg +3 -0
  56. package/assets/images/search-icon.svg +3 -0
  57. package/assets/images/settings.svg +3 -0
  58. package/assets/images/successful.svg +10 -0
  59. package/assets/images/user-name.svg +3 -0
  60. package/assets/scss/_sidebar.scss +267 -0
  61. package/assets/scss/styles.scss +577 -0
  62. package/esm2020/common-header-lib.mjs +5 -0
  63. package/esm2020/lib/Validators/noSpaceAllowed.mjs +16 -0
  64. package/esm2020/lib/common-header-lib.component.mjs +612 -0
  65. package/esm2020/lib/common-header-lib.module.mjs +208 -0
  66. package/esm2020/lib/common-header-lib.service.mjs +200 -0
  67. package/esm2020/lib/components/confirm-dialog/confirm-dialog.component.mjs +49 -0
  68. package/esm2020/lib/components/general-configuration/general-configuration.component.mjs +402 -0
  69. package/esm2020/lib/components/general-configuration/landingpg-config/landingpg-config.component.mjs +124 -0
  70. package/esm2020/lib/components/general-configuration/timezone-configuration/timezone-configuration.component.mjs +138 -0
  71. package/esm2020/lib/components/grid-pagination/grid-pagination.component.mjs +39 -0
  72. package/esm2020/lib/components/ng-translation/ng-translation.component.mjs +65 -0
  73. package/esm2020/lib/components/no-service-my-access-pg/no-service-my-access-pg.component.mjs +19 -0
  74. package/esm2020/lib/components/notification-sidebar/notification-sidebar.component.mjs +40 -0
  75. package/esm2020/lib/components/side-popup/side-popup.component.mjs +34 -0
  76. package/esm2020/lib/components/user-mailbox/user-mailbox.component.mjs +173 -0
  77. package/esm2020/lib/components/user-sidebar/user-sidebar.component.mjs +279 -0
  78. package/esm2020/lib/components/viewpassword-popup/viewpassword-popup.component.mjs +196 -0
  79. package/esm2020/lib/model/data_model.mjs +217 -0
  80. package/esm2020/lib/pipes/custome-dateformat.pipe.mjs +27 -0
  81. package/esm2020/lib/pipes/date-diff.pipe.mjs +56 -0
  82. package/esm2020/lib/pipes/slice-to-two.pipe.mjs +34 -0
  83. package/esm2020/lib/services/EncrypDecryp_RSA.service.mjs +100 -0
  84. package/esm2020/lib/services/async-passwordcheck.service.mjs +72 -0
  85. package/esm2020/lib/services/cookie-storage-manager.service.mjs +78 -0
  86. package/esm2020/lib/services/encrpdata.service.mjs +55 -0
  87. package/esm2020/lib/services/encrydecrydata.service.mjs +207 -0
  88. package/esm2020/lib/services/event.service.mjs +133 -0
  89. package/esm2020/lib/services/http/http-common.service.mjs +216 -0
  90. package/esm2020/lib/services/http/http-general-config.service.mjs +84 -0
  91. package/esm2020/lib/services/rest-login-form.service.mjs +296 -0
  92. package/esm2020/lib/services/rest-signalr.service.mjs +100 -0
  93. package/esm2020/lib/services/storage.service.mjs +33 -0
  94. package/esm2020/lib/services/toast-msg.service.mjs +95 -0
  95. package/esm2020/lib/services/vapt-validation.service.mjs +31 -0
  96. package/esm2020/public-api.mjs +13 -0
  97. package/fesm2015/common-header-lib.mjs +4165 -0
  98. package/fesm2015/common-header-lib.mjs.map +1 -0
  99. package/fesm2020/common-header-lib.mjs +4146 -0
  100. package/fesm2020/common-header-lib.mjs.map +1 -0
  101. package/index.d.ts +5 -0
  102. package/lib/Validators/noSpaceAllowed.d.ts +2 -0
  103. package/lib/common-header-lib.component.d.ts +148 -0
  104. package/lib/common-header-lib.module.d.ts +43 -0
  105. package/lib/common-header-lib.service.d.ts +25 -0
  106. package/lib/components/confirm-dialog/confirm-dialog.component.d.ts +13 -0
  107. package/lib/components/general-configuration/general-configuration.component.d.ts +86 -0
  108. package/lib/components/general-configuration/landingpg-config/landingpg-config.component.d.ts +37 -0
  109. package/lib/components/general-configuration/timezone-configuration/timezone-configuration.component.d.ts +38 -0
  110. package/lib/components/grid-pagination/grid-pagination.component.d.ts +20 -0
  111. package/lib/components/ng-translation/ng-translation.component.d.ts +22 -0
  112. package/lib/components/no-service-my-access-pg/no-service-my-access-pg.component.d.ts +8 -0
  113. package/lib/components/notification-sidebar/notification-sidebar.component.d.ts +16 -0
  114. package/lib/components/side-popup/side-popup.component.d.ts +14 -0
  115. package/lib/components/user-mailbox/user-mailbox.component.d.ts +40 -0
  116. package/lib/components/user-sidebar/user-sidebar.component.d.ts +61 -0
  117. package/lib/components/viewpassword-popup/viewpassword-popup.component.d.ts +47 -0
  118. package/lib/model/data_model.d.ts +184 -0
  119. package/lib/pipes/custome-dateformat.pipe.d.ts +8 -0
  120. package/lib/pipes/date-diff.pipe.d.ts +9 -0
  121. package/lib/pipes/slice-to-two.pipe.d.ts +7 -0
  122. package/lib/services/EncrypDecryp_RSA.service.d.ts +15 -0
  123. package/lib/services/async-passwordcheck.service.d.ts +18 -0
  124. package/lib/services/cookie-storage-manager.service.d.ts +16 -0
  125. package/lib/services/encrpdata.service.d.ts +12 -0
  126. package/lib/services/encrydecrydata.service.d.ts +33 -0
  127. package/lib/services/event.service.d.ts +30 -0
  128. package/lib/services/http/http-common.service.d.ts +30 -0
  129. package/lib/services/http/http-general-config.service.d.ts +15 -0
  130. package/lib/services/rest-login-form.service.d.ts +39 -0
  131. package/lib/services/rest-signalr.service.d.ts +23 -0
  132. package/lib/services/storage.service.d.ts +11 -0
  133. package/lib/services/toast-msg.service.d.ts +21 -0
  134. package/lib/services/vapt-validation.service.d.ts +7 -0
  135. package/package.json +49 -0
  136. package/public-api.d.ts +8 -0
  137. package/src/assets/i18n/ar.json +83 -0
  138. package/src/assets/i18n/de.json +83 -0
  139. package/src/assets/i18n/en.json +83 -0
  140. package/src/assets/i18n/es.json +83 -0
  141. package/src/assets/i18n/fr.json +83 -0
  142. package/src/assets/i18n/hi.json +83 -0
  143. package/src/assets/i18n/ja.json +83 -0
  144. package/src/assets/i18n/ko.json +83 -0
  145. package/src/assets/images/APP019.svg +6 -0
  146. package/src/assets/images/APP020.svg +4 -0
  147. package/src/assets/images/APP021.svg +6 -0
  148. package/src/assets/images/APP022.svg +6 -0
  149. package/src/assets/images/APP023.svg +11 -0
  150. package/src/assets/images/APP024.svg +9 -0
  151. package/src/assets/images/APP025.svg +8 -0
  152. package/src/assets/images/APP026.svg +4 -0
  153. package/src/assets/images/APP027.svg +5 -0
  154. package/src/assets/images/APP028.svg +6 -0
  155. package/src/assets/images/APP029.svg +12 -0
  156. package/src/assets/images/APP030.svg +20 -0
  157. package/src/assets/images/APP031.svg +14 -0
  158. package/src/assets/images/APP032.svg +17 -0
  159. package/src/assets/images/Frame.svg +104 -0
  160. package/src/assets/images/apps-1.svg +22 -0
  161. package/src/assets/images/bell-icon.svg +3 -0
  162. package/src/assets/images/check_circle.svg +3 -0
  163. package/src/assets/images/close copy.svg +5 -0
  164. package/src/assets/images/close.svg +5 -0
  165. package/src/assets/images/copy-img.svg +3 -0
  166. package/src/assets/images/cross-search.svg +4 -0
  167. package/src/assets/images/domain_img.svg +3 -0
  168. package/src/assets/images/east.svg +3 -0
  169. package/src/assets/images/error.svg +3 -0
  170. package/src/assets/images/filepath.svg +8 -0
  171. package/src/assets/images/flag1.svg +3 -0
  172. package/src/assets/images/gc-mail.svg +3 -0
  173. package/src/assets/images/grey-arrow.svg +3 -0
  174. package/src/assets/images/info.svg +3 -0
  175. package/src/assets/images/local.svg +3 -0
  176. package/src/assets/images/lock-pass.svg +3 -0
  177. package/src/assets/images/lock1.svg +3 -0
  178. package/src/assets/images/login-bg/default_bg.svg +448 -0
  179. package/src/assets/images/login-bg/visibility.svg +3 -0
  180. package/src/assets/images/login-bg/visibility_off.svg +3 -0
  181. package/src/assets/images/logo.png +0 -0
  182. package/src/assets/images/logout.svg +3 -0
  183. package/src/assets/images/mail-icon.svg +3 -0
  184. package/src/assets/images/marker-pin.svg +4 -0
  185. package/src/assets/images/noti_ticket.svg +3 -0
  186. package/src/assets/images/pass-img.svg +3 -0
  187. package/src/assets/images/refresh-1.svg +3 -0
  188. package/src/assets/images/schedule.svg +1 -0
  189. package/src/assets/images/search-filter.svg +3 -0
  190. package/src/assets/images/search-icon.svg +3 -0
  191. package/src/assets/images/settings.svg +3 -0
  192. package/src/assets/images/successful.svg +10 -0
  193. package/src/assets/images/user-name.svg +3 -0
  194. package/src/assets/scss/_sidebar.scss +267 -0
  195. package/src/assets/scss/styles.scss +577 -0
@@ -0,0 +1,402 @@
1
+ import { EncrydecryRSAdataService } from './../../services/EncrypDecryp_RSA.service';
2
+ import { Component } from '@angular/core';
3
+ import { FormBuilder, FormGroup, Validators } from '@angular/forms';
4
+ import { TranslateService } from '@ngx-translate/core';
5
+ import { DialogService } from 'primeng/dynamicdialog';
6
+ import { Subject } from 'rxjs';
7
+ import { finalize, takeUntil } from 'rxjs/operators';
8
+ import { RESTLoginFormService } from '../../services/rest-login-form.service';
9
+ // import { RESTMyaccessService } from 'src/app/shared/Services/REST-Services/rest-myaccess.service';
10
+ import { ASYNCPasswordcheckService, ConfirmedValidator, } from '../../services/async-passwordcheck.service';
11
+ import { ToastMsgService } from '../../services/toast-msg.service';
12
+ import { VaptValidationService } from '../../services/vapt-validation.service';
13
+ import { noSpaceAllowed } from '../../Validators/noSpaceAllowed';
14
+ import { errorMsg, LoggedInUserInfo } from '../../model/data_model';
15
+ import { CommonHeaderLibService } from '../../common-header-lib.service';
16
+ import { DynamicDialogConfig } from 'primeng/dynamicdialog';
17
+ import { HttpCommonService } from '../../services/http/http-common.service';
18
+ import { HttpGeneralConfigurationService } from '../../services/http/http-general-config.service';
19
+ import * as i0 from "@angular/core";
20
+ import * as i1 from "../../common-header-lib.service";
21
+ import * as i2 from "@angular/forms";
22
+ import * as i3 from "../../services/toast-msg.service";
23
+ import * as i4 from "./../../services/EncrypDecryp_RSA.service";
24
+ import * as i5 from "../../services/rest-login-form.service";
25
+ import * as i6 from "../../services/async-passwordcheck.service";
26
+ import * as i7 from "@ngx-translate/core";
27
+ import * as i8 from "../../services/vapt-validation.service";
28
+ import * as i9 from "primeng/dynamicdialog";
29
+ import * as i10 from "../../services/http/http-common.service";
30
+ import * as i11 from "../../services/http/http-general-config.service";
31
+ import * as i12 from "@angular/common";
32
+ import * as i13 from "primeng/inputtext";
33
+ import * as i14 from "primeng/dropdown";
34
+ import * as i15 from "primeng/api";
35
+ import * as i16 from "primeng/button";
36
+ import * as i17 from "./timezone-configuration/timezone-configuration.component";
37
+ import * as i18 from "./landingpg-config/landingpg-config.component";
38
+ export class GeneralConfigurationComponent {
39
+ constructor(libService, fb, msgService, encryptService, loginService, _validatePwdService, translateService, _vaptService, config, httpCommonService, httpGeneralConfigService) {
40
+ this.libService = libService;
41
+ this.fb = fb;
42
+ this.msgService = msgService;
43
+ this.encryptService = encryptService;
44
+ this.loginService = loginService;
45
+ this._validatePwdService = _validatePwdService;
46
+ this.translateService = translateService;
47
+ this._vaptService = _vaptService;
48
+ this.config = config;
49
+ this.httpCommonService = httpCommonService;
50
+ this.httpGeneralConfigService = httpGeneralConfigService;
51
+ // export class GeneralConfigurationComponent {
52
+ this.ShowPreferencePathScreen = true;
53
+ this.ShowUserProfileScreen = false;
54
+ this.ShowChangePasswordScreen = false;
55
+ this.ShowTimeZoneScreen = false;
56
+ this.ShowLandinPgScreen = false;
57
+ this.ShowTimeZoneBtn = false;
58
+ this.showStatus = false;
59
+ this.userAssetTypeList = [];
60
+ this.userAssetNameList = [];
61
+ this.userServiceList = [];
62
+ this.userSelectedTimezone = '';
63
+ // private domainName: string = '';
64
+ // private domainID: number;
65
+ // private LoggedInUserID: number;
66
+ // private username: string;
67
+ this.filePathName = '';
68
+ this.lastUpdatedFileStatus = '';
69
+ this.appSettingForm = new FormGroup({}); // Define form group
70
+ this.userResetPasswordForm = new FormGroup({}); //user Reset Password Form
71
+ this.timeZoneForm = new FormGroup({}); //user Reset Password Form
72
+ this.unsubscribeAPIEventListenerData = new Subject();
73
+ this.makeNewPwdVisible = true;
74
+ this.makeOldPwdVisible = true;
75
+ this.makeCnfrmPwdVisible = true;
76
+ this.isAssetTypeLoading = false;
77
+ this.isAssetNameLoading = false;
78
+ this.isConnectionMethodLoading = false;
79
+ this.isPathUpdated = false;
80
+ this.pwderrorMsg = '';
81
+ this.AssetTypeEvent = 'AssetType';
82
+ this.AssetNameEvent = 'AssetName';
83
+ this.ConnectionMethodEvent = 'ConnectionMethod';
84
+ this.pathSuccessMsg = errorMsg.PATHSUCCESS;
85
+ this.pathErrorMsg = errorMsg.PATHERROR;
86
+ this.apiURL = '';
87
+ }
88
+ ngOnInit() {
89
+ //Get Initalize Form
90
+ this.getInitalizeForm();
91
+ this.OpenPreferencePathScreen();
92
+ }
93
+ ngAfterViewInit() {
94
+ this.getTranslateContent();
95
+ console.log('ViewInit');
96
+ // Get PWD Validation MSg From Validation Service
97
+ this._validatePwdService.listValidationMsg().subscribe((msg) => {
98
+ console.log('Msg:', msg);
99
+ this.pwderrorMsg = msg;
100
+ });
101
+ }
102
+ getInitalizeForm() {
103
+ this.appSettingForm = this.fb.group({
104
+ AssetType: ['', Validators.required],
105
+ AssetName: ['', Validators.required],
106
+ ServiceName: ['', Validators.required],
107
+ filePathName: ['', [Validators.required, noSpaceAllowed()]],
108
+ });
109
+ this.timeZoneForm = this.fb.group({
110
+ timezone: ['', Validators.required],
111
+ });
112
+ // Password Reset Form
113
+ this.userResetPasswordForm = this.fb.group({
114
+ oldUserARCXWD: ['', [Validators.required]],
115
+ newUserARCXWD: [
116
+ '',
117
+ [Validators.required],
118
+ [this._validatePwdService.createValidator()],
119
+ ],
120
+ crnmNewUserARCXWD: ['', [Validators.required]],
121
+ }, {
122
+ validator: ConfirmedValidator('newUserARCXWD', 'crnmNewUserARCXWD'),
123
+ });
124
+ }
125
+ // //Method: Convert text one Lang. to another
126
+ getTranslateContent() {
127
+ this.translateService
128
+ .get([
129
+ 'Generic_lib.PreferencePathSuccessMsg',
130
+ 'Generic_lib.PreferencePathErrorMsg',
131
+ ])
132
+ .pipe(takeUntil(this.unsubscribeAPIEventListenerData))
133
+ .subscribe((trans) => {
134
+ this.pathSuccessMsg = trans['Generic_lib.PreferencePathSuccessMsg'];
135
+ this.pathErrorMsg = trans['Generic_lib.PreferencePathErrorMsg'];
136
+ });
137
+ }
138
+ OpenPreferencePathScreen() {
139
+ this.closeAllScreen();
140
+ setTimeout(() => {
141
+ this.ShowPreferencePathScreen = true;
142
+ this.appSettingForm.reset();
143
+ this.userAssetTypeList = [];
144
+ this.userAssetNameList = [];
145
+ this.userServiceList = [];
146
+ this.getServiceAssetDetails();
147
+ }, 10);
148
+ }
149
+ OpenUserProfileScreen() {
150
+ this.closeAllScreen();
151
+ this.ShowUserProfileScreen = true;
152
+ }
153
+ OpenChangePasswordScreen() {
154
+ this.closeAllScreen();
155
+ this.ShowChangePasswordScreen = true;
156
+ this.userResetPasswordForm.reset();
157
+ // this.getEncryptKey();
158
+ }
159
+ OpenTimezoneScreen() {
160
+ this.closeAllScreen();
161
+ this.ShowTimeZoneScreen = true;
162
+ }
163
+ OpenLandingPgConfig() {
164
+ this.closeAllScreen();
165
+ this.ShowLandinPgScreen = true;
166
+ }
167
+ closeAllScreen() {
168
+ this.ShowPreferencePathScreen = false;
169
+ this.ShowUserProfileScreen = false;
170
+ this.ShowChangePasswordScreen = false;
171
+ this.ShowTimeZoneScreen = false;
172
+ this.ShowLandinPgScreen = false;
173
+ }
174
+ preferencePathValueChange(eventName) {
175
+ if (eventName === this.AssetTypeEvent) {
176
+ const assetType = this.appSettingForm.get('AssetType')?.value;
177
+ this.showStatus = false;
178
+ this.resetFormfields(['AssetName', 'ServiceName', 'filePathName']);
179
+ this.userAssetNameList = [];
180
+ this.userServiceList = [];
181
+ this.getServiceAssetName(assetType['assetTypeID']);
182
+ }
183
+ else if (eventName === this.AssetNameEvent) {
184
+ const assetName = this.appSettingForm.get('AssetName')?.value;
185
+ this.showStatus = false;
186
+ this.resetFormfields(['ServiceName', 'filePathName']);
187
+ this.userServiceList = [];
188
+ this.fetchServiceNameByAssetTypeEvent(assetName['assetName']);
189
+ }
190
+ else if (eventName === this.ConnectionMethodEvent) {
191
+ const ServiceDetails = this.appSettingForm.get('ServiceName')?.value;
192
+ this.showStatus = false;
193
+ this.resetFormfields(['filePathName']);
194
+ this.getFilePathDetails(ServiceDetails['serviceTypeId']);
195
+ }
196
+ }
197
+ // /*Action : Used to Get Asset Type to update Prefrence Path of Connectors */
198
+ getServiceAssetDetails() {
199
+ this.isAssetTypeLoading = true;
200
+ this.httpGeneralConfigService
201
+ .getUserPreferredAssetTypeDetails()
202
+ .pipe(takeUntil(this.unsubscribeAPIEventListenerData), finalize(() => {
203
+ this.isAssetTypeLoading = false;
204
+ }))
205
+ .subscribe((data) => {
206
+ this.userAssetTypeList = data;
207
+ });
208
+ }
209
+ // /*Action : Used to Get Asset Name to update Prefrence Path of that Asset's Connectors */
210
+ getServiceAssetName(assetTypeID) {
211
+ this.isAssetNameLoading = true;
212
+ let payload = {
213
+ assetTypeId: assetTypeID,
214
+ };
215
+ this.httpGeneralConfigService
216
+ .getUserPreferredAssetName(payload)
217
+ .pipe(takeUntil(this.unsubscribeAPIEventListenerData), finalize(() => {
218
+ this.isAssetNameLoading = false;
219
+ }))
220
+ .subscribe((data) => {
221
+ this.userAssetNameList = data;
222
+ });
223
+ }
224
+ // /*Method : GET
225
+ // Action : get User Assigned ServiceName By AssetTypeEvent */
226
+ fetchServiceNameByAssetTypeEvent(assetName) {
227
+ this.isConnectionMethodLoading = true;
228
+ let payload = {
229
+ assetName: assetName,
230
+ };
231
+ this.httpGeneralConfigService
232
+ .getServiceNameByAssetTypeEvent(payload)
233
+ .pipe(takeUntil(this.unsubscribeAPIEventListenerData), finalize(() => {
234
+ this.isConnectionMethodLoading = false;
235
+ }))
236
+ .subscribe((data) => {
237
+ this.userServiceList = data;
238
+ });
239
+ }
240
+ // /*Method : GET
241
+ // Action : Fetch User's File Path Details and Status already set or not */
242
+ getFilePathDetails(serviceID) {
243
+ let payload = {
244
+ // userId: this.LoggedInUserID,
245
+ serviceTypeId: serviceID,
246
+ };
247
+ this.httpGeneralConfigService
248
+ .getPreferencePathDetails(payload)
249
+ .pipe(takeUntil(this.unsubscribeAPIEventListenerData))
250
+ .subscribe((res) => {
251
+ this.preferencePathID = res['spmId'];
252
+ if (res && res['currentSetting'] && res['lastUpdate']) {
253
+ this.showStatus = true;
254
+ this.filePathName = res['currentSetting'];
255
+ this.lastUpdatedFileStatus = res['lastUpdate'];
256
+ }
257
+ else {
258
+ this.filePathName = '';
259
+ this.showStatus = false;
260
+ this.lastUpdatedFileStatus = '';
261
+ }
262
+ });
263
+ }
264
+ // /*Action : It saves or updates a preference path of user */
265
+ setUserPreferencePath(appSettingForm) {
266
+ this.toggleBtnLoadder(true);
267
+ const userpath = String(appSettingForm.value['filePathName']).trim();
268
+ let payload = {
269
+ // userId: this.LoggedInUserID,
270
+ // userLogTime: this._cookieService.getCookieValue(COOKIECONSTANT.SESSIONID),
271
+ serviceTypeId: appSettingForm.value['ServiceName']['serviceTypeId'],
272
+ supDescription: userpath,
273
+ spmId: this.preferencePathID,
274
+ };
275
+ this.httpGeneralConfigService
276
+ .updatePreferencePath(payload)
277
+ .pipe(takeUntil(this.unsubscribeAPIEventListenerData), finalize(() => {
278
+ this.toggleBtnLoadder(false);
279
+ }))
280
+ .subscribe((res) => {
281
+ if (res) {
282
+ this.resetForm();
283
+ this.showStatus = false;
284
+ this.msgService.success(this.pathSuccessMsg);
285
+ }
286
+ else {
287
+ this.msgService.error(this.pathErrorMsg);
288
+ }
289
+ });
290
+ }
291
+ // //Method : Used to perform password reset of User
292
+ resetLoggedInPwd() {
293
+ if (this._vaptService.hasUnsafeInput(this.userResetPasswordForm.value)) {
294
+ this.msgService.error(errorMsg.SCRIPTERROR);
295
+ return;
296
+ }
297
+ this.userResetPasswordForm.markAllAsTouched();
298
+ if (this.userResetPasswordForm.valid) {
299
+ this.changeLoggedInPwd();
300
+ }
301
+ }
302
+ // /*Method: will User New Password to API */
303
+ changeLoggedInPwd() {
304
+ //For Encrp/Dec
305
+ let oldUserARCXWD = this.encryptService.encryptViaRSA(this.userResetPasswordForm.value['oldUserARCXWD']);
306
+ //For Encrp/Dec
307
+ let newUserARCXWD = this.encryptService.encryptViaRSA(this.userResetPasswordForm.value['newUserARCXWD']);
308
+ let userPwdDetails = {
309
+ ipAddress: '',
310
+ oldUserARCXWD: oldUserARCXWD,
311
+ newUserARCXWD: newUserARCXWD,
312
+ authenticationType: 0,
313
+ };
314
+ console.log(userPwdDetails);
315
+ this.toggleBtnLoadder(true);
316
+ this.httpCommonService
317
+ .setNewpassword(userPwdDetails)
318
+ .pipe(takeUntil(this.unsubscribeAPIEventListenerData), finalize(() => {
319
+ this.toggleBtnLoadder(false);
320
+ }))
321
+ .subscribe((data) => {
322
+ if (data['success']) {
323
+ this.msgService.success(data['message']);
324
+ this.userResetPasswordForm.reset();
325
+ }
326
+ else if (!data['success']) {
327
+ this.msgService.error(data['errorMessage']);
328
+ }
329
+ });
330
+ }
331
+ // /*Method:
332
+ // Action : Get Public Key for encryption of User Details */
333
+ getEncryptKey() {
334
+ let params = {
335
+ type: 0,
336
+ };
337
+ this.loginService
338
+ .getPrivateKey(params)
339
+ .pipe(takeUntil(this.unsubscribeAPIEventListenerData))
340
+ .subscribe((data) => {
341
+ if (data['success'] === true) {
342
+ LoggedInUserInfo.privateKey = data['result'];
343
+ }
344
+ else if (data['success'] === false) {
345
+ this.msgService.error('Session Token Error !');
346
+ }
347
+ });
348
+ }
349
+ // /*Method : POST
350
+ // Action : Get configuration ID based on to show hide Time Zone*/
351
+ getglobalConfigDetails() {
352
+ this.loginService
353
+ .getglobalConfigDetails('1', [336])
354
+ .pipe(takeUntil(this.unsubscribeAPIEventListenerData))
355
+ .subscribe((data) => {
356
+ if (data && data.length > 0) {
357
+ data.forEach((element) => {
358
+ if (element && element['id'] === 336 && element['value'] === '0') {
359
+ this.ShowTimeZoneBtn = true;
360
+ }
361
+ else {
362
+ this.ShowTimeZoneBtn = false;
363
+ }
364
+ });
365
+ }
366
+ });
367
+ }
368
+ // // Show/Hide Password Fileds of Change Pwd form
369
+ togglePasswordVisibility(flag) {
370
+ if (flag === 1) {
371
+ this.makeOldPwdVisible = !this.makeOldPwdVisible;
372
+ }
373
+ else if (flag === 2) {
374
+ this.makeNewPwdVisible = !this.makeNewPwdVisible;
375
+ }
376
+ else if (flag === 3) {
377
+ this.makeCnfrmPwdVisible = !this.makeCnfrmPwdVisible;
378
+ }
379
+ }
380
+ resetForm() {
381
+ this.appSettingForm.reset();
382
+ }
383
+ resetFormfields(fields) {
384
+ fields.forEach((fieldsName) => {
385
+ this.appSettingForm.get(fieldsName)?.reset();
386
+ });
387
+ }
388
+ toggleBtnLoadder(flag) {
389
+ this.isPathUpdated = flag;
390
+ }
391
+ ngOnDestroy() {
392
+ this.unsubscribeAPIEventListenerData.next(true);
393
+ this.unsubscribeAPIEventListenerData.complete();
394
+ }
395
+ }
396
+ GeneralConfigurationComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: GeneralConfigurationComponent, deps: [{ token: i1.CommonHeaderLibService }, { token: i2.FormBuilder }, { token: i3.ToastMsgService }, { token: i4.EncrydecryRSAdataService }, { token: i5.RESTLoginFormService }, { token: i6.ASYNCPasswordcheckService }, { token: i7.TranslateService }, { token: i8.VaptValidationService }, { token: i9.DynamicDialogConfig }, { token: i10.HttpCommonService }, { token: i11.HttpGeneralConfigurationService }], target: i0.ɵɵFactoryTarget.Component });
397
+ GeneralConfigurationComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: GeneralConfigurationComponent, selector: "app-general-configuration", providers: [DialogService], ngImport: i0, template: "<div class=\"row my-3\">\r\n <!-- Left_Card_Started -->\r\n <div class=\"col-lg-4 pl-0\">\r\n <div class=\"left-card\">\r\n <div class=\"p-3\">\r\n <div\r\n class=\"profile-card\"\r\n [ngClass]=\"{ active: ShowPreferencePathScreen }\"\r\n (click)=\"OpenPreferencePathScreen()\"\r\n >\r\n <div class=\"p-2\">\r\n <div class=\"profile-label\">\r\n {{ \"Generic_lib.PreferencePath\" | translate }}\r\n </div>\r\n </div>\r\n </div>\r\n <div\r\n class=\"profile-card\"\r\n [ngClass]=\"{ active: ShowChangePasswordScreen }\"\r\n (click)=\"OpenChangePasswordScreen()\"\r\n >\r\n <div class=\"p-2\">\r\n <div class=\"profile-label\">\r\n {{ \"Generic_lib.ChangePassword\" | translate }}\r\n </div>\r\n </div>\r\n </div>\r\n <div\r\n class=\"profile-card\"\r\n [ngClass]=\"{ active: ShowTimeZoneScreen }\"\r\n (click)=\"OpenTimezoneScreen()\"\r\n >\r\n <div class=\"p-2\">\r\n <div class=\"profile-label\">\r\n {{ \"Generic_lib.PreferredTimezone\" | translate }}\r\n </div>\r\n </div>\r\n </div>\r\n <div\r\n class=\"profile-card\"\r\n [ngClass]=\"{ active: ShowLandinPgScreen }\"\r\n (click)=\"OpenLandingPgConfig()\"\r\n >\r\n <div class=\"p-2\">\r\n <div class=\"profile-label\">\r\n {{ \"Generic_lib.LandingPageConfig\" | translate }}\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <!-- Left_Card_Ended -->\r\n\r\n <!--User Profile -->\r\n <ng-container *ngIf=\"ShowUserProfileScreen\">\r\n <div class=\"col-lg-6\">\r\n <div class=\"initial-text\">\r\n {{ \"AK\" }}\r\n </div>\r\n <div class=\"preference-container\">\r\n <!--Card-->\r\n <div class=\"mt-3\">\r\n <div class=\"form-group\">\r\n <div class=\"label-name\">\r\n {{ \"Generic_lib.UserName\" | translate }}\r\n </div>\r\n <div class=\"input-dropdown d-flex align-items-center\">\r\n <input\r\n type=\"text\"\r\n pInputText\r\n formControlName=\"text\"\r\n placeholder=\"{{ 'Generic_lib.UserName' | translate }}\"\r\n autocomplete=\"off\"\r\n />\r\n <img\r\n src=\".../../../../../assets/common-header-lib/images/images/user-name.svg\"\r\n alt=\"Icon\"\r\n class=\"position-absolute px-2\"\r\n />\r\n </div>\r\n </div>\r\n\r\n <div class=\"form-group\">\r\n <div class=\"label-name\">{{ \"Generic_lib.Email\" | translate }}</div>\r\n <div class=\"input-dropdown d-flex align-items-center\">\r\n <input\r\n type=\"text\"\r\n pInputText\r\n formControlName=\"text\"\r\n placeholder=\"{{ 'Generic_lib.EmailAddress' | translate }}\"\r\n autocomplete=\"off\"\r\n />\r\n <img\r\n src=\".../../../../../assets/common-header-lib/images/gc-mail.svg\"\r\n alt=\"Icon\"\r\n class=\"position-absolute px-2\"\r\n />\r\n </div>\r\n </div>\r\n <div class=\"mt-4\">\r\n <p-button class=\"submit-btn\" label=\"Submit\"></p-button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n\r\n <!-- Preference PathScreen -->\r\n <ng-container>\r\n <!-- <ng-container *ngIf=\"ShowPreferencePathScreen\"> -->\r\n <div class=\"col-lg-6\" [hidden]=\"!ShowPreferencePathScreen\">\r\n <div class=\"preference-container\">\r\n <div class=\"mt-3\">\r\n <form [formGroup]=\"appSettingForm\">\r\n <div class=\"form-group\">\r\n <div class=\"d-flex\">\r\n <div class=\"label-name\">\r\n {{ \"Generic_lib.AssetType\" | translate }}\r\n </div>\r\n <span class=\"madontary-icon\">*</span>\r\n </div>\r\n <div class=\"assets-dropdown\">\r\n <p-dropdown\r\n [options]=\"userAssetTypeList\"\r\n formControlName=\"AssetType\"\r\n placeholder=\"{{\r\n 'Generic_lib.AssetTypePlaceholder' | translate\r\n }}\"\r\n filterPlaceholder=\"{{ 'Generic_lib.Search' | translate }}\"\r\n (onChange)=\"preferencePathValueChange(AssetTypeEvent)\"\r\n optionLabel=\"assetType\"\r\n [filter]=\"!isAssetTypeLoading ? true : false\"\r\n filterBy=\"assetType\"\r\n [showClear]=\"false\"\r\n [resetFilterOnHide]=\"true\"\r\n panelStyleClass=\"{'dropdown-loader': isAssetTypeLoading}\"\r\n >\r\n <ng-template pTemplate=\"header\">\r\n <div\r\n *ngIf=\"isAssetTypeLoading\"\r\n class=\"dropdown-loader-container\"\r\n >\r\n <i class=\"pi pi-spin pi-spinner\"></i>\r\n </div>\r\n </ng-template>\r\n </p-dropdown>\r\n </div>\r\n <ng-container\r\n *ngIf=\"\r\n appSettingForm.get('AssetType')?.invalid &&\r\n appSettingForm.get('AssetType')?.touched\r\n \"\r\n >\r\n <span class=\"error-msg mt-2\">{{\r\n \"Generic_lib.AssetTypeFieldValidation\" | translate\r\n }}</span>\r\n </ng-container>\r\n </div>\r\n <div class=\"form-group\">\r\n <div class=\"d-flex\">\r\n <div class=\"label-name\">\r\n {{ \"Generic_lib.AssetName\" | translate }}\r\n </div>\r\n <span class=\"madontary-icon\">*</span>\r\n </div>\r\n <div class=\"assets-dropdown\">\r\n <p-dropdown\r\n [options]=\"userAssetNameList\"\r\n formControlName=\"AssetName\"\r\n placeholder=\"{{\r\n 'Generic_lib.AssetNamePlaceholder' | translate\r\n }}\"\r\n filterPlaceholder=\"{{ 'Generic_lib.Search' | translate }}\"\r\n optionLabel=\"assetName\"\r\n [filter]=\"!isAssetNameLoading ? true : false\"\r\n filterBy=\"assetType\"\r\n (onChange)=\"preferencePathValueChange(AssetNameEvent)\"\r\n filterBy=\"assetName\"\r\n panelStyleClass=\"{'dropdown-loader': isAssetNameLoading}\"\r\n [showClear]=\"false\"\r\n >\r\n <ng-template pTemplate=\"header\">\r\n <div\r\n *ngIf=\"isAssetNameLoading\"\r\n class=\"dropdown-loader-container\"\r\n >\r\n <i class=\"pi pi-spin pi-spinner\"></i>\r\n </div>\r\n </ng-template>\r\n </p-dropdown>\r\n </div>\r\n <ng-container\r\n *ngIf=\"\r\n appSettingForm.get('AssetName')?.invalid &&\r\n appSettingForm.get('AssetName')?.touched\r\n \"\r\n >\r\n <span class=\"error-msg mt-2\">{{\r\n \"Generic_lib.AssetNameFieldValidation\" | translate\r\n }}</span>\r\n </ng-container>\r\n </div>\r\n <div class=\"form-group\">\r\n <div class=\"d-flex\">\r\n <div class=\"label-name\">\r\n {{ \"Generic_lib.ConnectionMethod\" | translate }}\r\n </div>\r\n <span class=\"madontary-icon\">*</span>\r\n </div>\r\n <div class=\"assets-dropdown\">\r\n <p-dropdown\r\n [options]=\"userServiceList\"\r\n formControlName=\"ServiceName\"\r\n filterPlaceholder=\"{{ 'Generic_lib.Search' | translate }}\"\r\n placeholder=\"{{\r\n 'Generic_lib.ConnectionMethodPlaceholder' | translate\r\n }}\"\r\n optionLabel=\"tbvDescrption\"\r\n [filter]=\"true\"\r\n filterBy=\"tbvDescrption\"\r\n (onChange)=\"preferencePathValueChange(ConnectionMethodEvent)\"\r\n [filter]=\"!isConnectionMethodLoading ? true : false\"\r\n [showClear]=\"false\"\r\n panelStyleClass=\"{'dropdown-loader': isConnectionMethodLoading}\"\r\n >\r\n <ng-template pTemplate=\"header\">\r\n <div\r\n *ngIf=\"isConnectionMethodLoading\"\r\n class=\"dropdown-loader-container\"\r\n >\r\n <i class=\"pi pi-spin pi-spinner\"></i>\r\n </div> </ng-template\r\n ></p-dropdown>\r\n </div>\r\n <ng-container\r\n *ngIf=\"\r\n appSettingForm.get('ServiceName')?.invalid &&\r\n appSettingForm.get('ServiceName')?.touched\r\n \"\r\n >\r\n <span class=\"error-msg mt-2\">{{\r\n \"Generic_lib.ConnectionMethodFieldValidation\" | translate\r\n }}</span>\r\n </ng-container>\r\n </div>\r\n <div class=\"form-group position-relative\">\r\n <div class=\"d-flex\">\r\n <div class=\"label-name\">\r\n {{ \"Generic_lib.PreferencePath\" | translate }}\r\n </div>\r\n <span class=\"madontary-icon\">*</span>\r\n </div>\r\n <div class=\"input-dropdown d-flex align-items-center\">\r\n <input\r\n type=\"text\"\r\n placeholder=\"{{ 'Generic_lib.PreferencePath' | translate }}\"\r\n pInputText\r\n formControlName=\"filePathName\"\r\n id=\"filepath\"\r\n name=\"filepath\"\r\n autocomplete=\"off\"\r\n />\r\n <img\r\n src=\".../../../../../assets/common-header-lib/images/filepath.svg\"\r\n alt=\"path Icon\"\r\n class=\"position-absolute mx-2 img-lock ext\"\r\n />\r\n </div>\r\n <ng-container\r\n *ngIf=\"\r\n appSettingForm.get('filePathName')?.invalid &&\r\n (appSettingForm.get('filePathName')?.touched ||\r\n appSettingForm.get('filePathName')?.dirty)\r\n \"\r\n >\r\n <ng-container\r\n *ngIf=\"\r\n appSettingForm.controls['filePathName'].errors?.['required']\r\n \"\r\n >\r\n <span class=\"error-msg mt-2\">{{\r\n \"Generic_lib.PreferencePathFieldValidation\" | translate\r\n }}</span>\r\n </ng-container>\r\n <ng-container\r\n *ngIf=\"\r\n appSettingForm.controls['filePathName'].errors?.['noSpace']\r\n \"\r\n >\r\n <span class=\"error-msg mt-2\">{{\r\n \"Generic_lib.PreferencePathFieldSpaceValidation\" | translate\r\n }}</span>\r\n </ng-container>\r\n </ng-container>\r\n </div>\r\n <ng-container *ngIf=\"showStatus\">\r\n <div class=\"form-group d-flex align-items-center\">\r\n <div class=\"label-name\">\r\n {{ \"Generic_lib.CurrentSetting\" | translate }} :\r\n </div>\r\n <div class=\"cur-text mx-2\">{{ filePathName }}</div>\r\n </div>\r\n <div class=\"form-group d-flex align-items-center\">\r\n <div class=\"label-name\">\r\n {{ \"Generic_lib.LastUpdated\" | translate }}\r\n </div>\r\n <div class=\"cur-text mx-2\">{{ lastUpdatedFileStatus }}</div>\r\n </div>\r\n </ng-container>\r\n <div class=\"mt-4\">\r\n <p-button\r\n class=\"submit-btn\"\r\n label=\"{{ 'Generic_lib.Update' | translate }}\"\r\n [disabled]=\"appSettingForm.invalid\"\r\n (onClick)=\"setUserPreferencePath(appSettingForm)\"\r\n iconPos=\"right\"\r\n [loading]=\"isPathUpdated\"\r\n ></p-button>\r\n </div>\r\n </form>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n\r\n <!-- TimeZone Screen -->\r\n <ng-container *ngIf=\"ShowTimeZoneScreen\">\r\n <div class=\"col-lg-6\">\r\n <app-timezone-configuration></app-timezone-configuration>\r\n </div>\r\n </ng-container>\r\n\r\n <!-- LandingPg Config Screen -->\r\n <ng-container *ngIf=\"ShowLandinPgScreen\">\r\n <div class=\"col-lg-6\">\r\n <app-landingpg-config></app-landingpg-config>\r\n </div>\r\n </ng-container>\r\n\r\n <!--Change Password Screen -->\r\n <!-- <ng-container *ngIf=\"ShowChangePasswordScreen\"> -->\r\n <ng-container>\r\n <div class=\"col-lg-6\" [hidden]=\"!ShowChangePasswordScreen\">\r\n <div class=\"preference-container\">\r\n <div class=\"mt-3\">\r\n <form [formGroup]=\"userResetPasswordForm\">\r\n <div class=\"form-group\">\r\n <div class=\"d-flex\">\r\n <div class=\"label-name\">\r\n {{ \"Generic_lib.CurrentPassword\" | translate }}\r\n </div>\r\n <span class=\"madontary-icon\">*</span>\r\n </div>\r\n <div\r\n class=\"input-dropdown d-flex align-items-center position-relative\"\r\n >\r\n <div class=\"password-checkbox-right\">\r\n <div class=\"checkbox-visibility-icon\">\r\n <input\r\n type=\"checkbox\"\r\n (click)=\"togglePasswordVisibility(1)\"\r\n autocomplete=\"off\"\r\n />\r\n <span></span>\r\n </div>\r\n </div>\r\n <input\r\n type=\"{{ makeOldPwdVisible ? 'password' : 'text' }}\"\r\n placeholder=\"{{\r\n 'Generic_lib.PasswordPlaceholder' | translate\r\n }}\"\r\n pInputText\r\n formControlName=\"oldUserARCXWD\"\r\n autocomplete=\"off\"\r\n id=\"oldpwd\"\r\n name=\"oldpwd\"\r\n autocomplete=\"off\"\r\n />\r\n\r\n <img\r\n src=\".../../../../../assets/common-header-lib/images/lock-pass.svg\"\r\n alt=\"lock Icon\"\r\n class=\"position-absolute mx-2 img-lock\"\r\n />\r\n </div>\r\n <ng-container\r\n *ngIf=\"\r\n userResetPasswordForm.get('oldUserARCXWD')?.invalid &&\r\n userResetPasswordForm.get('oldUserARCXWD')?.touched\r\n \"\r\n >\r\n <span class=\"error-msg mt-2\">{{\r\n \"Generic_lib.PasswordFieldValidation\" | translate\r\n }}</span>\r\n </ng-container>\r\n </div>\r\n <div class=\"form-group\">\r\n <div class=\"d-flex\">\r\n <div class=\"label-name\">\r\n {{ \"Generic_lib.NewPassword\" | translate }}\r\n </div>\r\n <span class=\"madontary-icon\">*</span>\r\n </div>\r\n <div\r\n class=\"input-dropdown d-flex align-items-center position-relative\"\r\n >\r\n <div class=\"password-checkbox-right\">\r\n <div class=\"checkbox-visibility-icon\">\r\n <input\r\n type=\"checkbox\"\r\n (click)=\"togglePasswordVisibility(2)\"\r\n autocomplete=\"off\"\r\n />\r\n <span></span>\r\n </div>\r\n </div>\r\n <input\r\n type=\"{{ makeNewPwdVisible ? 'password' : 'text' }}\"\r\n placeholder=\"{{\r\n 'Generic_lib.NewPasswordPlaceholder' | translate\r\n }}\"\r\n pInputText\r\n formControlName=\"newUserARCXWD\"\r\n id=\"newpwd\"\r\n autocomplete=\"off\"\r\n name=\"newpwd\"\r\n autocomplete=\"off\"\r\n />\r\n\r\n <img\r\n src=\".../../../../../assets/common-header-lib/images/lock-pass.svg\"\r\n alt=\"lock Icon\"\r\n class=\"position-absolute mx-2 img-lock\"\r\n />\r\n </div>\r\n <ng-container\r\n *ngIf=\"\r\n userResetPasswordForm\r\n .get('newUserARCXWD')\r\n ?.hasError('required') &&\r\n userResetPasswordForm.get('newUserARCXWD')?.touched\r\n \"\r\n >\r\n <span class=\"error-msg mt-2\">{{\r\n \"Generic_lib.NewPasswordFieldValidation\" | translate\r\n }}</span>\r\n </ng-container>\r\n <ng-container\r\n *ngIf=\"\r\n userResetPasswordForm\r\n .get('newUserARCXWD')\r\n ?.hasError('pwdInvalid') &&\r\n userResetPasswordForm.get('newUserARCXWD')?.touched\r\n \"\r\n >\r\n <span class=\"error-msg mt-2\">{{ pwderrorMsg }}</span>\r\n </ng-container>\r\n </div>\r\n <div class=\"form-group\">\r\n <div class=\"d-flex\">\r\n <div class=\"label-name\">\r\n {{ \"Generic_lib.ConfirmPassword\" | translate }}\r\n </div>\r\n <span class=\"madontary-icon\">*</span>\r\n </div>\r\n <div\r\n class=\"input-dropdown d-flex align-items-center position-relative\"\r\n >\r\n <div class=\"password-checkbox-right\">\r\n <div class=\"checkbox-visibility-icon\">\r\n <input\r\n type=\"checkbox\"\r\n (click)=\"togglePasswordVisibility(3)\"\r\n autocomplete=\"off\"\r\n />\r\n <span></span>\r\n </div>\r\n </div>\r\n <input\r\n type=\"{{ makeCnfrmPwdVisible ? 'password' : 'text' }}\"\r\n placeholder=\"{{\r\n 'Generic_lib.ConfirmPasswordPlaceholder' | translate\r\n }}\"\r\n pInputText\r\n formControlName=\"crnmNewUserARCXWD\"\r\n autocomplete=\"off\"\r\n id=\"crnmnewpwd\"\r\n name=\"crnmnewpwd\"\r\n />\r\n\r\n <img\r\n src=\".../../../../../assets/common-header-lib/images/lock-pass.svg\"\r\n alt=\"eye Icon\"\r\n class=\"position-absolute mx-2 img-lock\"\r\n />\r\n </div>\r\n <ng-container\r\n *ngIf=\"\r\n userResetPasswordForm\r\n .get('crnmNewUserARCXWD')\r\n ?.hasError('required') &&\r\n userResetPasswordForm.get('crnmNewUserARCXWD')?.touched\r\n \"\r\n >\r\n <span class=\"error-msg mt-2\">{{\r\n \"Generic_lib.ConfirmPasswordFieldValidation\" | translate\r\n }}</span>\r\n </ng-container>\r\n <span\r\n class=\"error-msg mt-2\"\r\n *ngIf=\"\r\n userResetPasswordForm\r\n .get('crnmNewUserARCXWD')\r\n ?.hasError('confirmedValidator')\r\n \"\r\n >\r\n {{\r\n \"Generic_lib.ConfirmPasswordFieldNewValidation\" | translate\r\n }}\r\n </span>\r\n </div>\r\n\r\n <div class=\"mt-4\">\r\n <p-button\r\n class=\"submit-btn\"\r\n label=\"{{ 'Generic_lib.Update' | translate }}\"\r\n iconPos=\"right\"\r\n [loading]=\"isPathUpdated\"\r\n label=\"Update\"\r\n (onClick)=\"resetLoggedInPwd()\"\r\n ></p-button>\r\n </div>\r\n </form>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n</div>\r\n", styles: [".pl{padding-left:0!important}.left-card{height:450px!important;background:#f6f7fb!important;border-radius:8px!important}.left-card .profile-label{font-size:13px!important;color:#292f4c!important;font-weight:600!important}.left-card .profile-text{color:#676879!important;font-size:12px!important;font-weight:400!important;line-height:20px!important}.initial-text{width:50px;height:50px;display:flex;align-items:center;justify-content:center;font-size:15px;border-radius:50%;color:#fff;background-color:#8e562e}.preference-container .path-title{font-size:20px;color:#292f4c}.preference-container .form-group{margin-bottom:15px}.preference-container .label-name{font-size:12px;color:#292f4c;line-height:26px;font-weight:600}.preference-container .cur-text{font-size:12px;color:#676879;line-height:26px;font-weight:600}.checkbox-visibility-icon{position:relative}.checkbox-visibility-icon input[type=checkbox]{opacity:0;position:absolute;top:4px;left:5px;transform:scale(1.7);z-index:2;cursor:pointer}.checkbox-visibility-icon input[type=checkbox]:checked+span{background:url(../../assets/common-header-lib/images/login-bg/visibility.svg);background-repeat:no-repeat;background-position:0px;height:12px;width:18px;display:block;background-size:17px}@media (min-width: 992px){.checkbox-visibility-icon input[type=checkbox]:checked+span{height:12px;width:18px;background-size:17px}}.checkbox-visibility-icon input[type=checkbox]+span{background:url(../../assets/common-header-lib/images/login-bg/visibility_off.svg);background-repeat:no-repeat;background-position:0px;height:12px;width:18px;display:block;background-size:17px}@media (min-width: 992px){.checkbox-visibility-icon input[type=checkbox]+span{height:24px;width:18px;background-size:17px}}.input-dropdown .p-inputtext{width:100%!important;border-radius:4px!important;font-size:12px!important;padding-left:28px!important;height:38px!important;border:1px solid #ced4da!important}.p-dropdown-filter-container input{border:1px solid #ced4da!important}.profile-card{cursor:pointer}.profile-card:hover{background:#dcdfec;color:#292f4c;border-radius:4px}.profile-card.active{border-radius:4px;cursor:pointer;background:#cce5ff url(../assets/common-header-lib/images/grey-arrow.svg) no-repeat 96%}\n"], dependencies: [{ kind: "directive", type: i12.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i12.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i13.InputText, selector: "[pInputText]" }, { kind: "component", type: i14.Dropdown, selector: "p-dropdown", inputs: ["scrollHeight", "filter", "name", "style", "panelStyle", "styleClass", "panelStyleClass", "readonly", "required", "editable", "appendTo", "tabindex", "placeholder", "filterPlaceholder", "filterLocale", "inputId", "selectId", "dataKey", "filterBy", "autofocus", "resetFilterOnHide", "dropdownIcon", "optionLabel", "optionValue", "optionDisabled", "optionGroupLabel", "optionGroupChildren", "autoDisplayFirst", "group", "showClear", "emptyFilterMessage", "emptyMessage", "lazy", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "overlayOptions", "ariaFilterLabel", "ariaLabel", "ariaLabelledBy", "filterMatchMode", "maxlength", "tooltip", "tooltipPosition", "tooltipPositionStyle", "tooltipStyleClass", "autofocusFilter", "overlayDirection", "disabled", "itemSize", "autoZIndex", "baseZIndex", "showTransitionOptions", "hideTransitionOptions", "options", "filterValue"], outputs: ["onChange", "onFilter", "onFocus", "onBlur", "onClick", "onShow", "onHide", "onClear", "onLazyLoad"] }, { kind: "directive", type: i15.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "component", type: i16.Button, selector: "p-button", inputs: ["type", "iconPos", "icon", "badge", "label", "disabled", "loading", "loadingIcon", "style", "styleClass", "badgeClass", "ariaLabel"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "component", type: i17.TimezoneConfigurationComponent, selector: "app-timezone-configuration", outputs: ["closepopup"] }, { kind: "component", type: i18.LandingpgConfigComponent, selector: "app-landingpg-config" }, { kind: "pipe", type: i7.TranslatePipe, name: "translate" }] });
398
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: GeneralConfigurationComponent, decorators: [{
399
+ type: Component,
400
+ args: [{ selector: 'app-general-configuration', providers: [DialogService], template: "<div class=\"row my-3\">\r\n <!-- Left_Card_Started -->\r\n <div class=\"col-lg-4 pl-0\">\r\n <div class=\"left-card\">\r\n <div class=\"p-3\">\r\n <div\r\n class=\"profile-card\"\r\n [ngClass]=\"{ active: ShowPreferencePathScreen }\"\r\n (click)=\"OpenPreferencePathScreen()\"\r\n >\r\n <div class=\"p-2\">\r\n <div class=\"profile-label\">\r\n {{ \"Generic_lib.PreferencePath\" | translate }}\r\n </div>\r\n </div>\r\n </div>\r\n <div\r\n class=\"profile-card\"\r\n [ngClass]=\"{ active: ShowChangePasswordScreen }\"\r\n (click)=\"OpenChangePasswordScreen()\"\r\n >\r\n <div class=\"p-2\">\r\n <div class=\"profile-label\">\r\n {{ \"Generic_lib.ChangePassword\" | translate }}\r\n </div>\r\n </div>\r\n </div>\r\n <div\r\n class=\"profile-card\"\r\n [ngClass]=\"{ active: ShowTimeZoneScreen }\"\r\n (click)=\"OpenTimezoneScreen()\"\r\n >\r\n <div class=\"p-2\">\r\n <div class=\"profile-label\">\r\n {{ \"Generic_lib.PreferredTimezone\" | translate }}\r\n </div>\r\n </div>\r\n </div>\r\n <div\r\n class=\"profile-card\"\r\n [ngClass]=\"{ active: ShowLandinPgScreen }\"\r\n (click)=\"OpenLandingPgConfig()\"\r\n >\r\n <div class=\"p-2\">\r\n <div class=\"profile-label\">\r\n {{ \"Generic_lib.LandingPageConfig\" | translate }}\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <!-- Left_Card_Ended -->\r\n\r\n <!--User Profile -->\r\n <ng-container *ngIf=\"ShowUserProfileScreen\">\r\n <div class=\"col-lg-6\">\r\n <div class=\"initial-text\">\r\n {{ \"AK\" }}\r\n </div>\r\n <div class=\"preference-container\">\r\n <!--Card-->\r\n <div class=\"mt-3\">\r\n <div class=\"form-group\">\r\n <div class=\"label-name\">\r\n {{ \"Generic_lib.UserName\" | translate }}\r\n </div>\r\n <div class=\"input-dropdown d-flex align-items-center\">\r\n <input\r\n type=\"text\"\r\n pInputText\r\n formControlName=\"text\"\r\n placeholder=\"{{ 'Generic_lib.UserName' | translate }}\"\r\n autocomplete=\"off\"\r\n />\r\n <img\r\n src=\".../../../../../assets/common-header-lib/images/images/user-name.svg\"\r\n alt=\"Icon\"\r\n class=\"position-absolute px-2\"\r\n />\r\n </div>\r\n </div>\r\n\r\n <div class=\"form-group\">\r\n <div class=\"label-name\">{{ \"Generic_lib.Email\" | translate }}</div>\r\n <div class=\"input-dropdown d-flex align-items-center\">\r\n <input\r\n type=\"text\"\r\n pInputText\r\n formControlName=\"text\"\r\n placeholder=\"{{ 'Generic_lib.EmailAddress' | translate }}\"\r\n autocomplete=\"off\"\r\n />\r\n <img\r\n src=\".../../../../../assets/common-header-lib/images/gc-mail.svg\"\r\n alt=\"Icon\"\r\n class=\"position-absolute px-2\"\r\n />\r\n </div>\r\n </div>\r\n <div class=\"mt-4\">\r\n <p-button class=\"submit-btn\" label=\"Submit\"></p-button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n\r\n <!-- Preference PathScreen -->\r\n <ng-container>\r\n <!-- <ng-container *ngIf=\"ShowPreferencePathScreen\"> -->\r\n <div class=\"col-lg-6\" [hidden]=\"!ShowPreferencePathScreen\">\r\n <div class=\"preference-container\">\r\n <div class=\"mt-3\">\r\n <form [formGroup]=\"appSettingForm\">\r\n <div class=\"form-group\">\r\n <div class=\"d-flex\">\r\n <div class=\"label-name\">\r\n {{ \"Generic_lib.AssetType\" | translate }}\r\n </div>\r\n <span class=\"madontary-icon\">*</span>\r\n </div>\r\n <div class=\"assets-dropdown\">\r\n <p-dropdown\r\n [options]=\"userAssetTypeList\"\r\n formControlName=\"AssetType\"\r\n placeholder=\"{{\r\n 'Generic_lib.AssetTypePlaceholder' | translate\r\n }}\"\r\n filterPlaceholder=\"{{ 'Generic_lib.Search' | translate }}\"\r\n (onChange)=\"preferencePathValueChange(AssetTypeEvent)\"\r\n optionLabel=\"assetType\"\r\n [filter]=\"!isAssetTypeLoading ? true : false\"\r\n filterBy=\"assetType\"\r\n [showClear]=\"false\"\r\n [resetFilterOnHide]=\"true\"\r\n panelStyleClass=\"{'dropdown-loader': isAssetTypeLoading}\"\r\n >\r\n <ng-template pTemplate=\"header\">\r\n <div\r\n *ngIf=\"isAssetTypeLoading\"\r\n class=\"dropdown-loader-container\"\r\n >\r\n <i class=\"pi pi-spin pi-spinner\"></i>\r\n </div>\r\n </ng-template>\r\n </p-dropdown>\r\n </div>\r\n <ng-container\r\n *ngIf=\"\r\n appSettingForm.get('AssetType')?.invalid &&\r\n appSettingForm.get('AssetType')?.touched\r\n \"\r\n >\r\n <span class=\"error-msg mt-2\">{{\r\n \"Generic_lib.AssetTypeFieldValidation\" | translate\r\n }}</span>\r\n </ng-container>\r\n </div>\r\n <div class=\"form-group\">\r\n <div class=\"d-flex\">\r\n <div class=\"label-name\">\r\n {{ \"Generic_lib.AssetName\" | translate }}\r\n </div>\r\n <span class=\"madontary-icon\">*</span>\r\n </div>\r\n <div class=\"assets-dropdown\">\r\n <p-dropdown\r\n [options]=\"userAssetNameList\"\r\n formControlName=\"AssetName\"\r\n placeholder=\"{{\r\n 'Generic_lib.AssetNamePlaceholder' | translate\r\n }}\"\r\n filterPlaceholder=\"{{ 'Generic_lib.Search' | translate }}\"\r\n optionLabel=\"assetName\"\r\n [filter]=\"!isAssetNameLoading ? true : false\"\r\n filterBy=\"assetType\"\r\n (onChange)=\"preferencePathValueChange(AssetNameEvent)\"\r\n filterBy=\"assetName\"\r\n panelStyleClass=\"{'dropdown-loader': isAssetNameLoading}\"\r\n [showClear]=\"false\"\r\n >\r\n <ng-template pTemplate=\"header\">\r\n <div\r\n *ngIf=\"isAssetNameLoading\"\r\n class=\"dropdown-loader-container\"\r\n >\r\n <i class=\"pi pi-spin pi-spinner\"></i>\r\n </div>\r\n </ng-template>\r\n </p-dropdown>\r\n </div>\r\n <ng-container\r\n *ngIf=\"\r\n appSettingForm.get('AssetName')?.invalid &&\r\n appSettingForm.get('AssetName')?.touched\r\n \"\r\n >\r\n <span class=\"error-msg mt-2\">{{\r\n \"Generic_lib.AssetNameFieldValidation\" | translate\r\n }}</span>\r\n </ng-container>\r\n </div>\r\n <div class=\"form-group\">\r\n <div class=\"d-flex\">\r\n <div class=\"label-name\">\r\n {{ \"Generic_lib.ConnectionMethod\" | translate }}\r\n </div>\r\n <span class=\"madontary-icon\">*</span>\r\n </div>\r\n <div class=\"assets-dropdown\">\r\n <p-dropdown\r\n [options]=\"userServiceList\"\r\n formControlName=\"ServiceName\"\r\n filterPlaceholder=\"{{ 'Generic_lib.Search' | translate }}\"\r\n placeholder=\"{{\r\n 'Generic_lib.ConnectionMethodPlaceholder' | translate\r\n }}\"\r\n optionLabel=\"tbvDescrption\"\r\n [filter]=\"true\"\r\n filterBy=\"tbvDescrption\"\r\n (onChange)=\"preferencePathValueChange(ConnectionMethodEvent)\"\r\n [filter]=\"!isConnectionMethodLoading ? true : false\"\r\n [showClear]=\"false\"\r\n panelStyleClass=\"{'dropdown-loader': isConnectionMethodLoading}\"\r\n >\r\n <ng-template pTemplate=\"header\">\r\n <div\r\n *ngIf=\"isConnectionMethodLoading\"\r\n class=\"dropdown-loader-container\"\r\n >\r\n <i class=\"pi pi-spin pi-spinner\"></i>\r\n </div> </ng-template\r\n ></p-dropdown>\r\n </div>\r\n <ng-container\r\n *ngIf=\"\r\n appSettingForm.get('ServiceName')?.invalid &&\r\n appSettingForm.get('ServiceName')?.touched\r\n \"\r\n >\r\n <span class=\"error-msg mt-2\">{{\r\n \"Generic_lib.ConnectionMethodFieldValidation\" | translate\r\n }}</span>\r\n </ng-container>\r\n </div>\r\n <div class=\"form-group position-relative\">\r\n <div class=\"d-flex\">\r\n <div class=\"label-name\">\r\n {{ \"Generic_lib.PreferencePath\" | translate }}\r\n </div>\r\n <span class=\"madontary-icon\">*</span>\r\n </div>\r\n <div class=\"input-dropdown d-flex align-items-center\">\r\n <input\r\n type=\"text\"\r\n placeholder=\"{{ 'Generic_lib.PreferencePath' | translate }}\"\r\n pInputText\r\n formControlName=\"filePathName\"\r\n id=\"filepath\"\r\n name=\"filepath\"\r\n autocomplete=\"off\"\r\n />\r\n <img\r\n src=\".../../../../../assets/common-header-lib/images/filepath.svg\"\r\n alt=\"path Icon\"\r\n class=\"position-absolute mx-2 img-lock ext\"\r\n />\r\n </div>\r\n <ng-container\r\n *ngIf=\"\r\n appSettingForm.get('filePathName')?.invalid &&\r\n (appSettingForm.get('filePathName')?.touched ||\r\n appSettingForm.get('filePathName')?.dirty)\r\n \"\r\n >\r\n <ng-container\r\n *ngIf=\"\r\n appSettingForm.controls['filePathName'].errors?.['required']\r\n \"\r\n >\r\n <span class=\"error-msg mt-2\">{{\r\n \"Generic_lib.PreferencePathFieldValidation\" | translate\r\n }}</span>\r\n </ng-container>\r\n <ng-container\r\n *ngIf=\"\r\n appSettingForm.controls['filePathName'].errors?.['noSpace']\r\n \"\r\n >\r\n <span class=\"error-msg mt-2\">{{\r\n \"Generic_lib.PreferencePathFieldSpaceValidation\" | translate\r\n }}</span>\r\n </ng-container>\r\n </ng-container>\r\n </div>\r\n <ng-container *ngIf=\"showStatus\">\r\n <div class=\"form-group d-flex align-items-center\">\r\n <div class=\"label-name\">\r\n {{ \"Generic_lib.CurrentSetting\" | translate }} :\r\n </div>\r\n <div class=\"cur-text mx-2\">{{ filePathName }}</div>\r\n </div>\r\n <div class=\"form-group d-flex align-items-center\">\r\n <div class=\"label-name\">\r\n {{ \"Generic_lib.LastUpdated\" | translate }}\r\n </div>\r\n <div class=\"cur-text mx-2\">{{ lastUpdatedFileStatus }}</div>\r\n </div>\r\n </ng-container>\r\n <div class=\"mt-4\">\r\n <p-button\r\n class=\"submit-btn\"\r\n label=\"{{ 'Generic_lib.Update' | translate }}\"\r\n [disabled]=\"appSettingForm.invalid\"\r\n (onClick)=\"setUserPreferencePath(appSettingForm)\"\r\n iconPos=\"right\"\r\n [loading]=\"isPathUpdated\"\r\n ></p-button>\r\n </div>\r\n </form>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n\r\n <!-- TimeZone Screen -->\r\n <ng-container *ngIf=\"ShowTimeZoneScreen\">\r\n <div class=\"col-lg-6\">\r\n <app-timezone-configuration></app-timezone-configuration>\r\n </div>\r\n </ng-container>\r\n\r\n <!-- LandingPg Config Screen -->\r\n <ng-container *ngIf=\"ShowLandinPgScreen\">\r\n <div class=\"col-lg-6\">\r\n <app-landingpg-config></app-landingpg-config>\r\n </div>\r\n </ng-container>\r\n\r\n <!--Change Password Screen -->\r\n <!-- <ng-container *ngIf=\"ShowChangePasswordScreen\"> -->\r\n <ng-container>\r\n <div class=\"col-lg-6\" [hidden]=\"!ShowChangePasswordScreen\">\r\n <div class=\"preference-container\">\r\n <div class=\"mt-3\">\r\n <form [formGroup]=\"userResetPasswordForm\">\r\n <div class=\"form-group\">\r\n <div class=\"d-flex\">\r\n <div class=\"label-name\">\r\n {{ \"Generic_lib.CurrentPassword\" | translate }}\r\n </div>\r\n <span class=\"madontary-icon\">*</span>\r\n </div>\r\n <div\r\n class=\"input-dropdown d-flex align-items-center position-relative\"\r\n >\r\n <div class=\"password-checkbox-right\">\r\n <div class=\"checkbox-visibility-icon\">\r\n <input\r\n type=\"checkbox\"\r\n (click)=\"togglePasswordVisibility(1)\"\r\n autocomplete=\"off\"\r\n />\r\n <span></span>\r\n </div>\r\n </div>\r\n <input\r\n type=\"{{ makeOldPwdVisible ? 'password' : 'text' }}\"\r\n placeholder=\"{{\r\n 'Generic_lib.PasswordPlaceholder' | translate\r\n }}\"\r\n pInputText\r\n formControlName=\"oldUserARCXWD\"\r\n autocomplete=\"off\"\r\n id=\"oldpwd\"\r\n name=\"oldpwd\"\r\n autocomplete=\"off\"\r\n />\r\n\r\n <img\r\n src=\".../../../../../assets/common-header-lib/images/lock-pass.svg\"\r\n alt=\"lock Icon\"\r\n class=\"position-absolute mx-2 img-lock\"\r\n />\r\n </div>\r\n <ng-container\r\n *ngIf=\"\r\n userResetPasswordForm.get('oldUserARCXWD')?.invalid &&\r\n userResetPasswordForm.get('oldUserARCXWD')?.touched\r\n \"\r\n >\r\n <span class=\"error-msg mt-2\">{{\r\n \"Generic_lib.PasswordFieldValidation\" | translate\r\n }}</span>\r\n </ng-container>\r\n </div>\r\n <div class=\"form-group\">\r\n <div class=\"d-flex\">\r\n <div class=\"label-name\">\r\n {{ \"Generic_lib.NewPassword\" | translate }}\r\n </div>\r\n <span class=\"madontary-icon\">*</span>\r\n </div>\r\n <div\r\n class=\"input-dropdown d-flex align-items-center position-relative\"\r\n >\r\n <div class=\"password-checkbox-right\">\r\n <div class=\"checkbox-visibility-icon\">\r\n <input\r\n type=\"checkbox\"\r\n (click)=\"togglePasswordVisibility(2)\"\r\n autocomplete=\"off\"\r\n />\r\n <span></span>\r\n </div>\r\n </div>\r\n <input\r\n type=\"{{ makeNewPwdVisible ? 'password' : 'text' }}\"\r\n placeholder=\"{{\r\n 'Generic_lib.NewPasswordPlaceholder' | translate\r\n }}\"\r\n pInputText\r\n formControlName=\"newUserARCXWD\"\r\n id=\"newpwd\"\r\n autocomplete=\"off\"\r\n name=\"newpwd\"\r\n autocomplete=\"off\"\r\n />\r\n\r\n <img\r\n src=\".../../../../../assets/common-header-lib/images/lock-pass.svg\"\r\n alt=\"lock Icon\"\r\n class=\"position-absolute mx-2 img-lock\"\r\n />\r\n </div>\r\n <ng-container\r\n *ngIf=\"\r\n userResetPasswordForm\r\n .get('newUserARCXWD')\r\n ?.hasError('required') &&\r\n userResetPasswordForm.get('newUserARCXWD')?.touched\r\n \"\r\n >\r\n <span class=\"error-msg mt-2\">{{\r\n \"Generic_lib.NewPasswordFieldValidation\" | translate\r\n }}</span>\r\n </ng-container>\r\n <ng-container\r\n *ngIf=\"\r\n userResetPasswordForm\r\n .get('newUserARCXWD')\r\n ?.hasError('pwdInvalid') &&\r\n userResetPasswordForm.get('newUserARCXWD')?.touched\r\n \"\r\n >\r\n <span class=\"error-msg mt-2\">{{ pwderrorMsg }}</span>\r\n </ng-container>\r\n </div>\r\n <div class=\"form-group\">\r\n <div class=\"d-flex\">\r\n <div class=\"label-name\">\r\n {{ \"Generic_lib.ConfirmPassword\" | translate }}\r\n </div>\r\n <span class=\"madontary-icon\">*</span>\r\n </div>\r\n <div\r\n class=\"input-dropdown d-flex align-items-center position-relative\"\r\n >\r\n <div class=\"password-checkbox-right\">\r\n <div class=\"checkbox-visibility-icon\">\r\n <input\r\n type=\"checkbox\"\r\n (click)=\"togglePasswordVisibility(3)\"\r\n autocomplete=\"off\"\r\n />\r\n <span></span>\r\n </div>\r\n </div>\r\n <input\r\n type=\"{{ makeCnfrmPwdVisible ? 'password' : 'text' }}\"\r\n placeholder=\"{{\r\n 'Generic_lib.ConfirmPasswordPlaceholder' | translate\r\n }}\"\r\n pInputText\r\n formControlName=\"crnmNewUserARCXWD\"\r\n autocomplete=\"off\"\r\n id=\"crnmnewpwd\"\r\n name=\"crnmnewpwd\"\r\n />\r\n\r\n <img\r\n src=\".../../../../../assets/common-header-lib/images/lock-pass.svg\"\r\n alt=\"eye Icon\"\r\n class=\"position-absolute mx-2 img-lock\"\r\n />\r\n </div>\r\n <ng-container\r\n *ngIf=\"\r\n userResetPasswordForm\r\n .get('crnmNewUserARCXWD')\r\n ?.hasError('required') &&\r\n userResetPasswordForm.get('crnmNewUserARCXWD')?.touched\r\n \"\r\n >\r\n <span class=\"error-msg mt-2\">{{\r\n \"Generic_lib.ConfirmPasswordFieldValidation\" | translate\r\n }}</span>\r\n </ng-container>\r\n <span\r\n class=\"error-msg mt-2\"\r\n *ngIf=\"\r\n userResetPasswordForm\r\n .get('crnmNewUserARCXWD')\r\n ?.hasError('confirmedValidator')\r\n \"\r\n >\r\n {{\r\n \"Generic_lib.ConfirmPasswordFieldNewValidation\" | translate\r\n }}\r\n </span>\r\n </div>\r\n\r\n <div class=\"mt-4\">\r\n <p-button\r\n class=\"submit-btn\"\r\n label=\"{{ 'Generic_lib.Update' | translate }}\"\r\n iconPos=\"right\"\r\n [loading]=\"isPathUpdated\"\r\n label=\"Update\"\r\n (onClick)=\"resetLoggedInPwd()\"\r\n ></p-button>\r\n </div>\r\n </form>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n</div>\r\n", styles: [".pl{padding-left:0!important}.left-card{height:450px!important;background:#f6f7fb!important;border-radius:8px!important}.left-card .profile-label{font-size:13px!important;color:#292f4c!important;font-weight:600!important}.left-card .profile-text{color:#676879!important;font-size:12px!important;font-weight:400!important;line-height:20px!important}.initial-text{width:50px;height:50px;display:flex;align-items:center;justify-content:center;font-size:15px;border-radius:50%;color:#fff;background-color:#8e562e}.preference-container .path-title{font-size:20px;color:#292f4c}.preference-container .form-group{margin-bottom:15px}.preference-container .label-name{font-size:12px;color:#292f4c;line-height:26px;font-weight:600}.preference-container .cur-text{font-size:12px;color:#676879;line-height:26px;font-weight:600}.checkbox-visibility-icon{position:relative}.checkbox-visibility-icon input[type=checkbox]{opacity:0;position:absolute;top:4px;left:5px;transform:scale(1.7);z-index:2;cursor:pointer}.checkbox-visibility-icon input[type=checkbox]:checked+span{background:url(../../assets/common-header-lib/images/login-bg/visibility.svg);background-repeat:no-repeat;background-position:0px;height:12px;width:18px;display:block;background-size:17px}@media (min-width: 992px){.checkbox-visibility-icon input[type=checkbox]:checked+span{height:12px;width:18px;background-size:17px}}.checkbox-visibility-icon input[type=checkbox]+span{background:url(../../assets/common-header-lib/images/login-bg/visibility_off.svg);background-repeat:no-repeat;background-position:0px;height:12px;width:18px;display:block;background-size:17px}@media (min-width: 992px){.checkbox-visibility-icon input[type=checkbox]+span{height:24px;width:18px;background-size:17px}}.input-dropdown .p-inputtext{width:100%!important;border-radius:4px!important;font-size:12px!important;padding-left:28px!important;height:38px!important;border:1px solid #ced4da!important}.p-dropdown-filter-container input{border:1px solid #ced4da!important}.profile-card{cursor:pointer}.profile-card:hover{background:#dcdfec;color:#292f4c;border-radius:4px}.profile-card.active{border-radius:4px;cursor:pointer;background:#cce5ff url(../assets/common-header-lib/images/grey-arrow.svg) no-repeat 96%}\n"] }]
401
+ }], ctorParameters: function () { return [{ type: i1.CommonHeaderLibService }, { type: i2.FormBuilder }, { type: i3.ToastMsgService }, { type: i4.EncrydecryRSAdataService }, { type: i5.RESTLoginFormService }, { type: i6.ASYNCPasswordcheckService }, { type: i7.TranslateService }, { type: i8.VaptValidationService }, { type: i9.DynamicDialogConfig }, { type: i10.HttpCommonService }, { type: i11.HttpGeneralConfigurationService }]; } });
402
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJhbC1jb25maWd1cmF0aW9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbW1vbi1oZWFkZXItbGliL3NyYy9saWIvY29tcG9uZW50cy9nZW5lcmFsLWNvbmZpZ3VyYXRpb24vZ2VuZXJhbC1jb25maWd1cmF0aW9uLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbW1vbi1oZWFkZXItbGliL3NyYy9saWIvY29tcG9uZW50cy9nZW5lcmFsLWNvbmZpZ3VyYXRpb24vZ2VuZXJhbC1jb25maWd1cmF0aW9uLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLDJDQUEyQyxDQUFDO0FBQ3JGLE9BQU8sRUFBaUIsU0FBUyxFQUFxQixNQUFNLGVBQWUsQ0FBQztBQUM1RSxPQUFPLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNwRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDdEQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQixPQUFPLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQzlFLHFHQUFxRztBQUNyRyxPQUFPLEVBQ0wseUJBQXlCLEVBQ3pCLGtCQUFrQixHQUNuQixNQUFNLDRDQUE0QyxDQUFDO0FBRXBELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUNuRSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUMvRSxP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QUFDO0lBQ0wsQ0FBQztJQUVELGdCQUFnQixDQUFDLElBQWE7UUFDNUIsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUM7SUFDNUIsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsK0JBQStCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2hELElBQUksQ0FBQywrQkFBK0IsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUNsRCxDQUFDOzswSEF4WlUsNkJBQTZCOzhHQUE3Qiw2QkFBNkIsb0RBRjdCLENBQUMsYUFBYSxDQUFDLDBCQzFCNUIsZzhxQkEyaEJBOzJGRC9mYSw2QkFBNkI7a0JBTnpDLFNBQVM7K0JBQ0UsMkJBQTJCLGFBRzFCLENBQUMsYUFBYSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRW5jcnlkZWNyeVJTQWRhdGFTZXJ2aWNlIH0gZnJvbSAnLi8uLi8uLi9zZXJ2aWNlcy9FbmNyeXBEZWNyeXBfUlNBLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBBZnRlclZpZXdJbml0LCBDb21wb25lbnQsIE9uRGVzdHJveSwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1CdWlsZGVyLCBGb3JtR3JvdXAsIFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcclxuaW1wb3J0IHsgRGlhbG9nU2VydmljZSB9IGZyb20gJ3ByaW1lbmcvZHluYW1pY2RpYWxvZyc7XHJcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgZmluYWxpemUsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgUkVTVExvZ2luRm9ybVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9yZXN0LWxvZ2luLWZvcm0uc2VydmljZSc7XHJcbi8vIGltcG9ydCB7IFJFU1RNeWFjY2Vzc1NlcnZpY2UgfSBmcm9tICdzcmMvYXBwL3NoYXJlZC9TZXJ2aWNlcy9SRVNULVNlcnZpY2VzL3Jlc3QtbXlhY2Nlc3Muc2VydmljZSc7XHJcbmltcG9ydCB7XHJcbiAgQVNZTkNQYXNzd29yZGNoZWNrU2VydmljZSxcclxuICBDb25maXJtZWRWYWxpZGF0b3IsXHJcbn0gZnJvbSAnLi4vLi4vc2VydmljZXMvYXN5bmMtcGFzc3dvcmRjaGVjay5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRW5jcnBkYXRhU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2VuY3JwZGF0YS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVG9hc3RNc2dTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdG9hc3QtbXNnLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBWYXB0VmFsaWRhdGlvblNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy92YXB0LXZhbGlkYXRpb24uc2VydmljZSc7XHJcbmltcG9ydCB7IG5vU3BhY2VBbGxvd2VkIH0gZnJvbSAnLi4vLi4vVmFsaWRhdG9ycy9ub1NwYWNlQWxsb3dlZCc7XHJcbmltcG9ydCB7IGVycm9yTXNnLCBMb2dnZWRJblVzZXJJbmZvIH0gZnJvbSAnLi4vLi4vbW9kZWwvZGF0YV9tb2RlbCc7XHJcbmltcG9ydCB7IENvbW1vbkhlYWRlckxpYlNlcnZpY2UgfSBmcm9tICcuLi8uLi9jb21tb24taGVhZGVyLWxpYi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRHluYW1pY0RpYWxvZ0NvbmZpZyB9IGZyb20gJ3ByaW1lbmcvZHluYW1pY2RpYWxvZyc7XHJcbmltcG9ydCB7IEh0dHBDb21tb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvaHR0cC9odHRwLWNvbW1vbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgSHR0cEdlbmVyYWxDb25maWd1cmF0aW9uU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2h0dHAvaHR0cC1nZW5lcmFsLWNvbmZpZy5zZXJ2aWNlJztcclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdhcHAtZ2VuZXJhbC1jb25maWd1cmF0aW9uJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vZ2VuZXJhbC1jb25maWd1cmF0aW9uLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9nZW5lcmFsLWNvbmZpZ3VyYXRpb24uY29tcG9uZW50LnNjc3MnXSxcclxuICBwcm92aWRlcnM6IFtEaWFsb2dTZXJ2aWNlXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIEdlbmVyYWxDb25maWd1cmF0aW9uQ29tcG9uZW50XHJcbiAgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveVxyXG57XHJcbiAgLy8gZXhwb3J0IGNsYXNzIEdlbmVyYWxDb25maWd1cmF0aW9uQ29tcG9uZW50ICB7XHJcbiAgcHVibGljIFNob3dQcmVmZXJlbmNlUGF0aFNjcmVlbjogYm9vbGVhbiA9IHRydWU7XHJcbiAgcHVibGljIFNob3dVc2VyUHJvZmlsZVNjcmVlbjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyBTaG93Q2hhbmdlUGFzc3dvcmRTY3JlZW46IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgU2hvd1RpbWVab25lU2NyZWVuOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIFNob3dMYW5kaW5QZ1NjcmVlbjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyBTaG93VGltZVpvbmVCdG46IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgc2hvd1N0YXR1czogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyB1c2VyQXNzZXRUeXBlTGlzdCA9IFtdO1xyXG4gIHB1YmxpYyB1c2VyQXNzZXROYW1lTGlzdCA9IFtdO1xyXG4gIHB1YmxpYyB1c2VyU2VydmljZUxpc3QgPSBbXTtcclxuICBwdWJsaWMgdXNlclNlbGVjdGVkVGltZXpvbmU6IHN0cmluZyA9ICcnO1xyXG4gIC8vIHByaXZhdGUgZG9tYWluTmFtZTogc3RyaW5nID0gJyc7XHJcbiAgLy8gcHJpdmF0ZSBkb21haW5JRDogbnVtYmVyO1xyXG4gIC8vIHByaXZhdGUgTG9nZ2VkSW5Vc2VySUQ6IG51bWJlcjtcclxuICAvLyBwcml2YXRlIHVzZXJuYW1lOiBzdHJpbmc7XHJcbiAgcHVibGljIGZpbGVQYXRoTmFtZTogc3RyaW5nID0gJyc7XHJcbiAgcHVibGljIGxhc3RVcGRhdGVkRmlsZVN0YXR1czogc3RyaW5nID0gJyc7XHJcbiAgcHJpdmF0ZSBwcmVmZXJlbmNlUGF0aElEOiBhbnk7XHJcbiAgcHVibGljIGFwcFNldHRpbmdGb3JtOiBGb3JtR3JvdXAgPSBuZXcgRm9ybUdyb3VwKHt9KTsgLy8gRGVmaW5lIGZvcm0gZ3JvdXBcclxuICBwdWJsaWMgdXNlclJlc2V0UGFzc3dvcmRGb3JtOiBGb3JtR3JvdXAgPSBuZXcgRm9ybUdyb3VwKHt9KTsgLy91c2VyIFJlc2V0IFBhc3N3b3JkIEZvcm1cclxuICBwdWJsaWMgdGltZVpvbmVGb3JtOiBGb3JtR3JvdXAgPSBuZXcgRm9ybUdyb3VwKHt9KTsgLy91c2VyIFJlc2V0IFBhc3N3b3JkIEZvcm1cclxuICBwcml2YXRlIHVuc3Vic2NyaWJlQVBJRXZlbnRMaXN0ZW5lckRhdGE6IFN1YmplY3Q8Ym9vbGVhbj4gPVxyXG4gICAgbmV3IFN1YmplY3Q8Ym9vbGVhbj4oKTtcclxuICBwdWJsaWMgbWFrZU5ld1B3ZFZpc2libGU6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIHB1YmxpYyBtYWtlT2xkUHdkVmlzaWJsZTogYm9vbGVhbiA9IHRydWU7XHJcbiAgcHVibGljIG1ha2VDbmZybVB3ZFZpc2libGU6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIHB1YmxpYyBpc0Fzc2V0VHlwZUxvYWRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgaXNBc3NldE5hbWVMb2FkaW5nOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIGlzQ29ubmVjdGlvbk1ldGhvZExvYWRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgaXNQYXRoVXBkYXRlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyBwd2RlcnJvck1zZzogc3RyaW5nID0gJyc7XHJcbiAgcHJvdGVjdGVkIEFzc2V0VHlwZUV2ZW50OiBzdHJpbmcgPSAnQXNzZXRUeXBlJztcclxuICBwcm90ZWN0ZWQgQXNzZXROYW1lRXZlbnQ6IHN0cmluZyA9ICdBc3NldE5hbWUnO1xyXG4gIHByb3RlY3RlZCBDb25uZWN0aW9uTWV0aG9kRXZlbnQ6IHN0cmluZyA9ICdDb25uZWN0aW9uTWV0aG9kJztcclxuICBwdWJsaWMgcGF0aFN1Y2Nlc3NNc2c6IHN0cmluZyA9IGVycm9yTXNnLlBBVEhTVUNDRVNTO1xyXG4gIHB1YmxpYyBwYXRoRXJyb3JNc2c6IHN0cmluZyA9IGVycm9yTXNnLlBBVEhFUlJPUjtcclxuICBhcGlVUkw6IHN0cmluZyA9ICcnO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgbGliU2VydmljZTogQ29tbW9uSGVhZGVyTGliU2VydmljZSxcclxuICAgIHByaXZhdGUgZmI6IEZvcm1CdWlsZGVyLFxyXG4gICAgcHJpdmF0ZSBtc2dTZXJ2aWNlOiBUb2FzdE1zZ1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIGVuY3J5cHRTZXJ2aWNlOiBFbmNyeWRlY3J5UlNBZGF0YVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGxvZ2luU2VydmljZTogUkVTVExvZ2luRm9ybVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF92YWxpZGF0ZVB3ZFNlcnZpY2U6IEFTWU5DUGFzc3dvcmRjaGVja1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIHRyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0ZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IF92YXB0U2VydmljZTogVmFwdFZhbGlkYXRpb25TZXJ2aWNlLFxyXG4gICAgcHVibGljIHJlYWRvbmx5IGNvbmZpZzogRHluYW1pY0RpYWxvZ0NvbmZpZyxcclxuICAgIHB1YmxpYyByZWFkb25seSBodHRwQ29tbW9uU2VydmljZTogSHR0cENvbW1vblNlcnZpY2UsXHJcbiAgICBwdWJsaWMgcmVhZG9ubHkgaHR0cEdlbmVyYWxDb25maWdTZXJ2aWNlOiBIdHRwR2VuZXJhbENvbmZpZ3VyYXRpb25TZXJ2aWNlLFxyXG4gICkge31cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICAvL0dldCBJbml0YWxpemUgRm9ybVxyXG4gICAgdGhpcy5nZXRJbml0YWxpemVGb3JtKCk7XHJcbiAgICB0aGlzLk9wZW5QcmVmZXJlbmNlUGF0aFNjcmVlbigpO1xyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5nZXRUcmFuc2xhdGVDb250ZW50KCk7XHJcbiAgICBjb25zb2xlLmxvZygnVmlld0luaXQnKTtcclxuXHJcbiAgICAvLyBHZXQgUFdEIFZhbGlkYXRpb24gTVNnIEZyb20gVmFsaWRhdGlvbiBTZXJ2aWNlXHJcbiAgICB0aGlzLl92YWxpZGF0ZVB3ZFNlcnZpY2UubGlzdFZhbGlkYXRpb25Nc2coKS5zdWJzY3JpYmUoKG1zZzogYW55KSA9PiB7XHJcbiAgICAgIGNvbnNvbGUubG9nKCdNc2c6JywgbXNnKTtcclxuICAgICAgdGhpcy5wd2RlcnJvck1zZyA9IG1zZztcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZ2V0SW5pdGFsaXplRm9ybSgpIHtcclxuICAgIHRoaXMuYXBwU2V0dGluZ0Zvcm0gPSB0aGlzLmZiLmdyb3VwKHtcclxuICAgICAgQXNzZXRUeXBlOiBbJycsIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxyXG4gICAgICBBc3NldE5hbWU6IFsnJywgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXHJcbiAgICAgIFNlcnZpY2VOYW1lOiBbJycsIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxyXG4gICAgICBmaWxlUGF0aE5hbWU6IFsnJywgW1ZhbGlkYXRvcnMucmVxdWlyZWQsIG5vU3BhY2VBbGxvd2VkKCldXSxcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMudGltZVpvbmVGb3JtID0gdGhpcy5mYi5ncm91cCh7XHJcbiAgICAgIHRpbWV6b25lOiBbJycsIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxyXG4gICAgfSk7XHJcblxyXG4gICAgLy8gUGFzc3dvcmQgUmVzZXQgRm9ybVxyXG4gICAgdGhpcy51c2VyUmVzZXRQYXNzd29yZEZvcm0gPSB0aGlzLmZiLmdyb3VwKFxyXG4gICAgICB7XHJcbiAgICAgICAgb2xkVXNlckFSQ1hXRDogWycnLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF1dLFxyXG4gICAgICAgIG5ld1VzZXJBUkNYV0Q6IFtcclxuICAgICAgICAgICcnLFxyXG4gICAgICAgICAgW1ZhbGlkYXRvcnMucmVxdWlyZWRdLFxyXG4gICAgICAgICAgW3RoaXMuX3ZhbGlkYXRlUHdkU2VydmljZS5jcmVhdGVWYWxpZGF0b3IoKV0sXHJcbiAgICAgICAgXSxcclxuICAgICAgICBjcm5tTmV3VXNlckFSQ1hXRDogWycnLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF1dLFxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgdmFsaWRhdG9yOiBDb25maXJtZWRWYWxpZGF0b3IoJ25ld1VzZXJBUkNYV0QnLCAnY3JubU5ld1VzZXJBUkNYV0QnKSxcclxuICAgICAgfSxcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvLyAgIC8vTWV0aG9kOiBDb252ZXJ0IHRleHQgb25lIExhbmcuIHRvIGFub3RoZXJcclxuICBwcml2YXRlIGdldFRyYW5zbGF0ZUNvbnRlbnQoKSB7XHJcbiAgICB0aGlzLnRyYW5zbGF0ZVNlcnZpY2VcclxuICAgICAgLmdldChbXHJcbiAgICAgICAgJ0dlbmVyaWNfbGliLlByZWZlcmVuY2VQYXRoU3VjY2Vzc01zZycsXHJcbiAgICAgICAgJ0dlbmVyaWNfbGliLlByZWZlcmVuY2VQYXRoRXJyb3JNc2cnLFxyXG4gICAgICBdKVxyXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy51bnN1YnNjcmliZUFQSUV2ZW50TGlzdGVuZXJEYXRhKSlcclxuICAgICAgLnN1YnNjcmliZSgodHJhbnM6IGFueSkgPT4ge1xyXG4gICAgICAgIHRoaXMucGF0aFN1Y2Nlc3NNc2cgPSB0cmFuc1snR2VuZXJpY19saWIuUHJlZmVyZW5jZVBhdGhTdWNjZXNzTXNnJ107XHJcbiAgICAgICAgdGhpcy5wYXRoRXJyb3JNc2cgPSB0cmFuc1snR2VuZXJpY19saWIuUHJlZmVyZW5jZVBhdGhFcnJvck1zZyddO1xyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBPcGVuUHJlZmVyZW5jZVBhdGhTY3JlZW4oKSB7XHJcbiAgICB0aGlzLmNsb3NlQWxsU2NyZWVuKCk7XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy5TaG93UHJlZmVyZW5jZVBhdGhTY3JlZW4gPSB0cnVlO1xyXG4gICAgICB0aGlzLmFwcFNldHRpbmdGb3JtLnJlc2V0KCk7XHJcbiAgICAgIHRoaXMudXNlckFzc2V0VHlwZUxpc3QgPSBbXTtcclxuICAgICAgdGhpcy51c2VyQXNzZXROYW1lTGlzdCA9IFtdO1xyXG4gICAgICB0aGlzLnVzZXJTZXJ2aWNlTGlzdCA9IFtdO1xyXG4gICAgICB0aGlzLmdldFNlcnZpY2VBc3NldERldGFpbHMoKTtcclxuICAgIH0sIDEwKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBPcGVuVXNlclByb2ZpbGVTY3JlZW4oKSB7XHJcbiAgICB0aGlzLmNsb3NlQWxsU2NyZWVuKCk7XHJcbiAgICB0aGlzLlNob3dVc2VyUHJvZmlsZVNjcmVlbiA9IHRydWU7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgT3BlbkNoYW5nZVBhc3N3b3JkU2NyZWVuKCkge1xyXG4gICAgdGhpcy5jbG9zZUFsbFNjcmVlbigpO1xyXG4gICAgdGhpcy5TaG93Q2hhbmdlUGFzc3dvcmRTY3JlZW4gPSB0cnVlO1xyXG4gICAgdGhpcy51c2VyUmVzZXRQYXNzd29yZEZvcm0ucmVzZXQoKTtcclxuICAgIC8vIHRoaXMuZ2V0RW5jcnlwdEtleSgpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIE9wZW5UaW1lem9uZVNjcmVlbigpIHtcclxuICAgIHRoaXMuY2xvc2VBbGxTY3JlZW4oKTtcclxuICAgIHRoaXMuU2hvd1RpbWVab25lU2NyZWVuID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBPcGVuTGFuZGluZ1BnQ29uZmlnKCkge1xyXG4gICAgdGhpcy5jbG9zZUFsbFNjcmVlbigpO1xyXG4gICAgdGhpcy5TaG93TGFuZGluUGdTY3JlZW4gPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGNsb3NlQWxsU2NyZWVuKCkge1xyXG4gICAgdGhpcy5TaG93UHJlZmVyZW5jZVBhdGhTY3JlZW4gPSBmYWxzZTtcclxuICAgIHRoaXMuU2hvd1VzZXJQcm9maWxlU2NyZWVuID0gZmFsc2U7XHJcbiAgICB0aGlzLlNob3dDaGFuZ2VQYXNzd29yZFNjcmVlbiA9IGZhbHNlO1xyXG4gICAgdGhpcy5TaG93VGltZVpvbmVTY3JlZW4gPSBmYWxzZTtcclxuICAgIHRoaXMuU2hvd0xhbmRpblBnU2NyZWVuID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgcHJlZmVyZW5jZVBhdGhWYWx1ZUNoYW5nZShldmVudE5hbWU6IHN0cmluZykge1xyXG4gICAgaWYgKGV2ZW50TmFtZSA9PT0gdGhpcy5Bc3NldFR5cGVFdmVudCkge1xyXG4gICAgICBjb25zdCBhc3NldFR5cGUgPSB0aGlzLmFwcFNldHRpbmdGb3JtLmdldCgnQXNzZXRUeXBlJyk/LnZhbHVlO1xyXG4gICAgICB0aGlzLnNob3dTdGF0dXMgPSBmYWxzZTtcclxuICAgICAgdGhpcy5yZXNldEZvcm1maWVsZHMoWydBc3NldE5hbWUnLCAnU2VydmljZU5hbWUnLCAnZmlsZVBhdGhOYW1lJ10pO1xyXG4gICAgICB0aGlzLnVzZXJBc3NldE5hbWVMaXN0ID0gW107XHJcbiAgICAgIHRoaXMudXNlclNlcnZpY2VMaXN0ID0gW107XHJcbiAgICAgIHRoaXMuZ2V0U2VydmljZUFzc2V0TmFtZShhc3NldFR5cGVbJ2Fzc2V0VHlwZUlEJ10pO1xyXG4gICAgfSBlbHNlIGlmIChldmVudE5hbWUgPT09IHRoaXMuQXNzZXROYW1lRXZlbnQpIHtcclxuICAgICAgY29uc3QgYXNzZXROYW1lID0gdGhpcy5hcHBTZXR0aW5nRm9ybS5nZXQoJ0Fzc2V0TmFtZScpPy52YWx1ZTtcclxuICAgICAgdGhpcy5zaG93U3RhdHVzID0gZmFsc2U7XHJcbiAgICAgIHRoaXMucmVzZXRGb3JtZmllbGRzKFsnU2VydmljZU5hbWUnLCAnZmlsZVBhdGhOYW1lJ10pO1xyXG4gICAgICB0aGlzLnVzZXJTZXJ2aWNlTGlzdCA9IFtdO1xyXG4gICAgICB0aGlzLmZldGNoU2VydmljZU5hbWVCeUFzc2V0VHlwZUV2ZW50KGFzc2V0TmFtZVsnYXNzZXROYW1lJ10pO1xyXG4gICAgfSBlbHNlIGlmIChldmVudE5hbWUgPT09IHRoaXMuQ29ubmVjdGlvbk1ldGhvZEV2ZW50KSB7XHJcbiAgICAgIGNvbnN0IFNlcnZpY2VEZXRhaWxzID0gdGhpcy5hcHBTZXR0aW5nRm9ybS5nZXQoJ1NlcnZpY2VOYW1lJyk/LnZhbHVlO1xyXG4gICAgICB0aGlzLnNob3dTdGF0dXMgPSBmYWxzZTtcclxuICAgICAgdGhpcy5yZXNldEZvcm1maWVsZHMoWydmaWxlUGF0aE5hbWUnXSk7XHJcbiAgICAgIHRoaXMuZ2V0RmlsZVBhdGhEZXRhaWxzKFNlcnZpY2VEZXRhaWxzWydzZXJ2aWNlVHlwZUlkJ10pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gICAvKkFjdGlvbiA6IFVzZWQgdG8gR2V0IEFzc2V0IFR5cGUgdG8gdXBkYXRlIFByZWZyZW5jZSBQYXRoIG9mIENvbm5lY3RvcnMgKi9cclxuICBnZXRTZXJ2aWNlQXNzZXREZXRhaWxzKCkge1xyXG4gICAgdGhpcy5pc0Fzc2V0VHlwZUxvYWRpbmcgPSB0cnVlO1xyXG4gICAgdGhpcy5odHRwR2VuZXJhbENvbmZpZ1NlcnZpY2VcclxuICAgICAgLmdldFVzZXJQcmVmZXJyZWRBc3NldFR5cGVEZXRhaWxzKClcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgdGFrZVVudGlsKHRoaXMudW5zdWJzY3JpYmVBUElFdmVudExpc3RlbmVyRGF0YSksXHJcbiAgICAgICAgZmluYWxpemUoKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5pc0Fzc2V0VHlwZUxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICB9KSxcclxuICAgICAgKVxyXG4gICAgICAuc3Vic2NyaWJlKChkYXRhOiBhbnkpID0+IHtcclxuICAgICAgICB0aGlzLnVzZXJBc3NldFR5cGVMaXN0ID0gZGF0YTtcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICAvLyAgIC8qQWN0aW9uIDogVXNlZCB0byBHZXQgQXNzZXQgTmFtZSB0byB1cGRhdGUgUHJlZnJlbmNlIFBhdGggb2YgdGhhdCBBc3NldCdzIENvbm5lY3RvcnMgKi9cclxuICBwcml2YXRlIGdldFNlcnZpY2VBc3NldE5hbWUoYXNzZXRUeXBlSUQ6IGFueSkge1xyXG4gICAgdGhpcy5pc0Fzc2V0TmFtZUxvYWRpbmcgPSB0cnVlO1xyXG4gICAgbGV0IHBheWxvYWQgPSB7XHJcbiAgICAgIGFzc2V0VHlwZUlkOiBhc3NldFR5cGVJRCxcclxuICAgIH07XHJcbiAgICB0aGlzLmh0dHBHZW5lcmFsQ29uZmlnU2VydmljZVxyXG4gICAgICAuZ2V0VXNlclByZWZlcnJlZEFzc2V0TmFtZShwYXlsb2FkKVxyXG4gICAgICAucGlwZShcclxuICAgICAgICB0YWtlVW50aWwodGhpcy51bnN1YnNjcmliZUFQSUV2ZW50TGlzdGVuZXJEYXRhKSxcclxuICAgICAgICBmaW5hbGl6ZSgoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmlzQXNzZXROYW1lTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgIH0pLFxyXG4gICAgICApXHJcbiAgICAgIC5zdWJzY3JpYmUoKGRhdGE6IGFueSkgPT4ge1xyXG4gICAgICAgIHRoaXMudXNlckFzc2V0TmFtZUxpc3QgPSBkYXRhO1xyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIC8vICAgLypNZXRob2QgOiBHRVRcclxuICAvLyAgICBBY3Rpb24gOiBnZXQgVXNlciBBc3NpZ25lZCBTZXJ2aWNlTmFtZSBCeSBBc3NldFR5cGVFdmVudCAqL1xyXG4gIHByaXZhdGUgZmV0Y2hTZXJ2aWNlTmFtZUJ5QXNzZXRUeXBlRXZlbnQoYXNzZXROYW1lOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuaXNDb25uZWN0aW9uTWV0aG9kTG9hZGluZyA9IHRydWU7XHJcbiAgICBsZXQgcGF5bG9hZCA9IHtcclxuICAgICAgYXNzZXROYW1lOiBhc3NldE5hbWUsXHJcbiAgICB9O1xyXG4gICAgdGhpcy5odHRwR2VuZXJhbENvbmZpZ1NlcnZpY2VcclxuICAgICAgLmdldFNlcnZpY2VOYW1lQnlBc3NldFR5cGVFdmVudChwYXlsb2FkKVxyXG4gICAgICAucGlwZShcclxuICAgICAgICB0YWtlVW50aWwodGhpcy51bnN1YnNjcmliZUFQSUV2ZW50TGlzdGVuZXJEYXRhKSxcclxuICAgICAgICBmaW5hbGl6ZSgoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmlzQ29ubmVjdGlvbk1ldGhvZExvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICB9KSxcclxuICAgICAgKVxyXG4gICAgICAuc3Vic2NyaWJlKChkYXRhOiBhbnkpID0+IHtcclxuICAgICAgICB0aGlzLnVzZXJTZXJ2aWNlTGlzdCA9IGRhdGE7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLy8gICAvKk1ldGhvZCA6IEdFVFxyXG4gIC8vICAgIEFjdGlvbiA6IEZldGNoIFVzZXIncyBGaWxlIFBhdGggRGV0YWlscyBhbmQgU3RhdHVzIGFscmVhZHkgc2V0IG9yIG5vdCAqL1xyXG4gIHByaXZhdGUgZ2V0RmlsZVBhdGhEZXRhaWxzKHNlcnZpY2VJRDogc3RyaW5nKSB7XHJcbiAgICBsZXQgcGF5bG9hZCA9IHtcclxuICAgICAgLy8gdXNlcklkOiB0aGlzLkxvZ2dlZEluVXNlcklELFxyXG4gICAgICBzZXJ2aWNlVHlwZUlkOiBzZXJ2aWNlSUQsXHJcbiAgICB9O1xyXG4gICAgdGhpcy5odHRwR2VuZXJhbENvbmZpZ1NlcnZpY2VcclxuICAgICAgLmdldFByZWZlcmVuY2VQYXRoRGV0YWlscyhwYXlsb2FkKVxyXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy51bnN1YnNjcmliZUFQSUV2ZW50TGlzdGVuZXJEYXRhKSlcclxuICAgICAgLnN1YnNjcmliZSgocmVzOiBhbnkpID0+IHtcclxuICAgICAgICB0aGlzLnByZWZlcmVuY2VQYXRoSUQgPSByZXNbJ3NwbUlkJ107XHJcbiAgICAgICAgaWYgKHJlcyAmJiByZXNbJ2N1cnJlbnRTZXR0aW5nJ10gJiYgcmVzWydsYXN0VXBkYXRlJ10pIHtcclxuICAgICAgICAgIHRoaXMuc2hvd1N0YXR1cyA9IHRydWU7XHJcbiAgICAgICAgICB0aGlzLmZpbGVQYXRoTmFtZSA9IHJlc1snY3VycmVudFNldHRpbmcnXTtcclxuICAgICAgICAgIHRoaXMubGFzdFVwZGF0ZWRGaWxlU3RhdHVzID0gcmVzWydsYXN0VXBkYXRlJ107XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuZmlsZVBhdGhOYW1lID0gJyc7XHJcbiAgICAgICAgICB0aGlzLnNob3dTdGF0dXMgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMubGFzdFVwZGF0ZWRGaWxlU3RhdHVzID0gJyc7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIC8vICAgLypBY3Rpb24gOiBJdCBzYXZlcyBvciB1cGRhdGVzIGEgcHJlZmVyZW5jZSBwYXRoIG9mIHVzZXIgKi9cclxuICBzZXRVc2VyUHJlZmVyZW5jZVBhdGgoYXBwU2V0dGluZ0Zvcm06IGFueSkge1xyXG4gICAgdGhpcy50b2dnbGVCdG5Mb2FkZGVyKHRydWUpO1xyXG4gICAgY29uc3QgdXNlcnBhdGg6IHN0cmluZyA9IFN0cmluZyhcclxuICAgICAgYXBwU2V0dGluZ0Zvcm0udmFsdWVbJ2ZpbGVQYXRoTmFtZSddLFxyXG4gICAgKS50cmltKCk7XHJcbiAgICBsZXQgcGF5bG9hZCA9IHtcclxuICAgICAgLy8gdXNlcklkOiB0aGlzLkxvZ2dlZEluVXNlcklELFxyXG4gICAgICAvLyB1c2VyTG9nVGltZTogdGhpcy5fY29va2llU2VydmljZS5nZXRDb29raWVWYWx1ZShDT09LSUVDT05TVEFOVC5TRVNTSU9OSUQpLFxyXG4gICAgICBzZXJ2aWNlVHlwZUlkOiBhcHBTZXR0aW5nRm9ybS52YWx1ZVsnU2VydmljZU5hbWUnXVsnc2VydmljZVR5cGVJZCddLFxyXG4gICAgICBzdXBEZXNjcmlwdGlvbjogdXNlcnBhdGgsXHJcbiAgICAgIHNwbUlkOiB0aGlzLnByZWZlcmVuY2VQYXRoSUQsXHJcbiAgICB9O1xyXG5cclxuICAgIHRoaXMuaHR0cEdlbmVyYWxDb25maWdTZXJ2aWNlXHJcbiAgICAgIC51cGRhdGVQcmVmZXJlbmNlUGF0aChwYXlsb2FkKVxyXG4gICAgICAucGlwZShcclxuICAgICAgICB0YWtlVW50aWwodGhpcy51bnN1YnNjcmliZUFQSUV2ZW50TGlzdGVuZXJEYXRhKSxcclxuICAgICAgICBmaW5hbGl6ZSgoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnRvZ2dsZUJ0bkxvYWRkZXIoZmFsc2UpO1xyXG4gICAgICAgIH0pLFxyXG4gICAgICApXHJcbiAgICAgIC5zdWJzY3JpYmUoKHJlczogYm9vbGVhbikgPT4ge1xyXG4gICAgICAgIGlmIChyZXMpIHtcclxuICAgICAgICAgIHRoaXMucmVzZXRGb3JtKCk7XHJcbiAgICAgICAgICB0aGlzLnNob3dTdGF0dXMgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMubXNnU2VydmljZS5zdWNjZXNzKHRoaXMucGF0aFN1Y2Nlc3NNc2cpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLm1zZ1NlcnZpY2UuZXJyb3IodGhpcy5wYXRoRXJyb3JNc2cpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICAvLyAgIC8vTWV0aG9kIDogVXNlZCB0byBwZXJmb3JtIHBhc3N3b3JkIHJlc2V0IG9mIFVzZXJcclxuICByZXNldExvZ2dlZEluUHdkKCkge1xyXG4gICAgaWYgKHRoaXMuX3ZhcHRTZXJ2aWNlLmhhc1Vuc2FmZUlucHV0KHRoaXMudXNlclJlc2V0UGFzc3dvcmRGb3JtLnZhbHVlKSkge1xyXG4gICAgICB0aGlzLm1zZ1NlcnZpY2UuZXJyb3IoZXJyb3JNc2cuU0NSSVBURVJST1IpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLnVzZXJSZXNldFBhc3N3b3JkRm9ybS5tYXJrQWxsQXNUb3VjaGVkKCk7XHJcbiAgICBpZiAodGhpcy51c2VyUmVzZXRQYXNzd29yZEZvcm0udmFsaWQpIHtcclxuICAgICAgdGhpcy5jaGFuZ2VMb2dnZWRJblB3ZCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gICAvKk1ldGhvZDogd2lsbCBVc2VyIE5ldyBQYXNzd29yZCB0byBBUEkgKi9cclxuICBjaGFuZ2VMb2dnZWRJblB3ZCgpIHtcclxuICAgIC8vRm9yIEVuY3JwL0RlY1xyXG4gICAgbGV0IG9sZFVzZXJBUkNYV0QgPSB0aGlzLmVuY3J5cHRTZXJ2aWNlLmVuY3J5cHRWaWFSU0EoXHJcbiAgICAgIHRoaXMudXNlclJlc2V0UGFzc3dvcmRGb3JtLnZhbHVlWydvbGRVc2VyQVJDWFdEJ10sXHJcbiAgICApO1xyXG5cclxuICAgIC8vRm9yIEVuY3JwL0RlY1xyXG4gICAgbGV0IG5ld1VzZXJBUkNYV0QgPSB0aGlzLmVuY3J5cHRTZXJ2aWNlLmVuY3J5cHRWaWFSU0EoXHJcbiAgICAgIHRoaXMudXNlclJlc2V0UGFzc3dvcmRGb3JtLnZhbHVlWyduZXdVc2VyQVJDWFdEJ10sXHJcbiAgICApO1xyXG5cclxuICAgIGxldCB1c2VyUHdkRGV0YWlscyA9IHtcclxuICAgICAgaXBBZGRyZXNzOiAnJyxcclxuICAgICAgb2xkVXNlckFSQ1hXRDogb2xkVXNlckFSQ1hXRCxcclxuICAgICAgbmV3VXNlckFSQ1hXRDogbmV3VXNlckFSQ1hXRCxcclxuICAgICAgYXV0aGVudGljYXRpb25UeXBlOiAwLFxyXG4gICAgfTtcclxuICAgIGNvbnNvbGUubG9nKHVzZXJQd2REZXRhaWxzKTtcclxuXHJcbiAgICB0aGlzLnRvZ2dsZUJ0bkxvYWRkZXIodHJ1ZSk7XHJcbiAgICB0aGlzLmh0dHBDb21tb25TZXJ2aWNlXHJcbiAgICAgIC5zZXROZXdwYXNzd29yZCh1c2VyUHdkRGV0YWlscylcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgdGFrZVVudGlsKHRoaXMudW5zdWJzY3JpYmVBUElFdmVudExpc3RlbmVyRGF0YSksXHJcbiAgICAgICAgZmluYWxpemUoKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy50b2dnbGVCdG5Mb2FkZGVyKGZhbHNlKTtcclxuICAgICAgICB9KSxcclxuICAgICAgKVxyXG4gICAgICAuc3Vic2NyaWJlKChkYXRhOiBhbnkpID0+IHtcclxuICAgICAgICBpZiAoZGF0YVsnc3VjY2VzcyddKSB7XHJcbiAgICAgICAgICB0aGlzLm1zZ1NlcnZpY2Uuc3VjY2VzcyhkYXRhWydtZXNzYWdlJ10pO1xyXG4gICAgICAgICAgdGhpcy51c2VyUmVzZXRQYXNzd29yZEZvcm0ucmVzZXQoKTtcclxuICAgICAgICB9IGVsc2UgaWYgKCFkYXRhWydzdWNjZXNzJ10pIHtcclxuICAgICAgICAgIHRoaXMubXNnU2VydmljZS5lcnJvcihkYXRhWydlcnJvck1lc3NhZ2UnXSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIC8vICAgLypNZXRob2Q6XHJcbiAgLy8gICAgIEFjdGlvbiA6IEdldCBQdWJsaWMgS2V5IGZvciBlbmNyeXB0aW9uIG9mIFVzZXIgRGV0YWlscyAgKi9cclxuICBnZXRFbmNyeXB0S2V5KCkge1xyXG4gICAgbGV0IHBhcmFtcyA9IHtcclxuICAgICAgdHlwZTogMCxcclxuICAgIH07XHJcbiAgICB0aGlzLmxvZ2luU2VydmljZVxyXG4gICAgICAuZ2V0UHJpdmF0ZUtleShwYXJhbXMpXHJcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLnVuc3Vic2NyaWJlQVBJRXZlbnRMaXN0ZW5lckRhdGEpKVxyXG4gICAgICAuc3Vic2NyaWJlKChkYXRhOiBhbnkpID0+IHtcclxuICAgICAgICBpZiAoZGF0YVsnc3VjY2VzcyddID09PSB0cnVlKSB7XHJcbiAgICAgICAgICBMb2dnZWRJblVzZXJJbmZvLnByaXZhdGVLZXkgPSBkYXRhWydyZXN1bHQnXTtcclxuICAgICAgICB9IGVsc2UgaWYgKGRhdGFbJ3N1Y2Nlc3MnXSA9PT0gZmFsc2UpIHtcclxuICAgICAgICAgIHRoaXMubXNnU2VydmljZS5lcnJvcignU2Vzc2lvbiBUb2tlbiBFcnJvciAhJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIC8vICAgLypNZXRob2QgOiBQT1NUXHJcbiAgLy8gICAgQWN0aW9uIDogR2V0IGNvbmZpZ3VyYXRpb24gSUQgYmFzZWQgb24gdG8gc2hvdyBoaWRlIFRpbWUgWm9uZSovXHJcbiAgZ2V0Z2xvYmFsQ29uZmlnRGV0YWlscygpIHtcclxuICAgIHRoaXMubG9naW5TZXJ2aWNlXHJcbiAgICAgIC5nZXRnbG9iYWxDb25maWdEZXRhaWxzKCcxJywgWzMzNl0pXHJcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLnVuc3Vic2NyaWJlQVBJRXZlbnRMaXN0ZW5lckRhdGEpKVxyXG4gICAgICAuc3Vic2NyaWJlKChkYXRhOiBhbnkpID0+IHtcclxuICAgICAgICBpZiAoZGF0YSAmJiBkYXRhLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgIGRhdGEuZm9yRWFjaCgoZWxlbWVudDogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChlbGVtZW50ICYmIGVsZW1lbnRbJ2lkJ10gPT09IDMzNiAmJiBlbGVtZW50Wyd2YWx1ZSddID09PSAnMCcpIHtcclxuICAgICAgICAgICAgICB0aGlzLlNob3dUaW1lWm9uZUJ0biA9IHRydWU7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5TaG93VGltZVpvbmVCdG4gPSBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIC8vICAgLy8gIFNob3cvSGlkZSBQYXNzd29yZCBGaWxlZHMgb2YgQ2hhbmdlIFB3ZCBmb3JtXHJcbiAgdG9nZ2xlUGFzc3dvcmRWaXNpYmlsaXR5KGZsYWc6IG51bWJlcikge1xyXG4gICAgaWYgKGZsYWcgPT09IDEpIHtcclxuICAgICAgdGhpcy5tYWtlT2xkUHdkVmlzaWJsZSA9ICF0aGlzLm1ha2VPbGRQd2RWaXNpYmxlO1xyXG4gICAgfSBlbHNlIGlmIChmbGFnID09PSAyKSB7XHJcbiAgICAgIHRoaXMubWFrZU5ld1B3ZFZpc2libGUgPSAhdGhpcy5tYWtlTmV3UHdkVmlzaWJsZTtcclxuICAgIH0gZWxzZSBpZiAoZmxhZyA9PT0gMykge1xyXG4gICAgICB0aGlzLm1ha2VDbmZybVB3ZFZpc2libGUgPSAhdGhpcy5tYWtlQ25mcm1Qd2RWaXNpYmxlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmVzZXRGb3JtKCkge1xyXG4gICAgdGhpcy5hcHBTZXR0aW5nRm9ybS5yZXNldCgpO1xyXG4gIH1cclxuXHJcbiAgcmVzZXRGb3JtZmllbGRzKGZpZWxkczogc3RyaW5nW10pIHtcclxuICAgIGZpZWxkcy5mb3JFYWNoKChmaWVsZHNOYW1lKSA9PiB7XHJcbiAgICAgIHRoaXMuYXBwU2V0dGluZ0Zvcm0uZ2V0KGZpZWxkc05hbWUpPy5yZXNldCgpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICB0b2dnbGVCdG5Mb2FkZGVyKGZsYWc6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuaXNQYXRoVXBkYXRlZCA9IGZsYWc7XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMudW5zdWJzY3JpYmVBUElFdmVudExpc3RlbmVyRGF0YS5uZXh0KHRydWUpO1xyXG4gICAgdGhpcy51bnN1YnNjcmliZUFQSUV2ZW50TGlzdGVuZXJEYXRhLmNvbXBsZXRlKCk7XHJcbiAgfVxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJyb3cgbXktM1wiPlxyXG4gIDwhLS0gTGVmdF9DYXJkX1N0YXJ0ZWQgLS0+XHJcbiAgPGRpdiBjbGFzcz1cImNvbC1sZy00IHBsLTBcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJsZWZ0LWNhcmRcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cInAtM1wiPlxyXG4gICAgICAgIDxkaXZcclxuICAgICAgICAgIGNsYXNzPVwicHJvZmlsZS1jYXJkXCJcclxuICAgICAgICAgIFtuZ0NsYXNzXT1cInsgYWN0aXZlOiBTaG93UHJlZmVyZW5jZVBhdGhTY3JlZW4gfVwiXHJcbiAgICAgICAgICAoY2xpY2spPVwiT3BlblByZWZlcmVuY2VQYXRoU2NyZWVuKClcIlxyXG4gICAgICAgID5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJwLTJcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInByb2ZpbGUtbGFiZWxcIj5cclxuICAgICAgICAgICAgICB7eyBcIkdlbmVyaWNfbGliLlByZWZlcmVuY2VQYXRoXCIgfCB0cmFuc2xhdGUgfX1cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2XHJcbiAgICAgICAgICBjbGFzcz1cInByb2ZpbGUtY2FyZFwiXHJcbiAgICAgICAgICBbbmdDbGFzc109XCJ7IGFjdGl2ZTogU2hvd0NoYW5nZVBhc3N3b3JkU2NyZWVuIH1cIlxyXG4gICAgICAgICAgKGNsaWNrKT1cIk9wZW5DaGFuZ2VQYXNzd29yZFNjcmVlbigpXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicC0yXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwcm9maWxlLWxhYmVsXCI+XHJcbiAgICAgICAgICAgICAge3sgXCJHZW5lcmljX2xpYi5DaGFuZ2VQYXNzd29yZFwiIHwgdHJhbnNsYXRlIH19XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdlxyXG4gICAgICAgICAgY2xhc3M9XCJwcm9maWxlLWNhcmRcIlxyXG4gICAgICAgICAgW25nQ2xhc3NdPVwieyBhY3RpdmU6IFNob3dUaW1lWm9uZVNjcmVlbiB9XCJcclxuICAgICAgICAgIChjbGljayk9XCJPcGVuVGltZXpvbmVTY3JlZW4oKVwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInAtMlwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHJvZmlsZS1sYWJlbFwiPlxyXG4gICAgICAgICAgICAgIHt7IFwiR2VuZXJpY19saWIuUHJlZmVycmVkVGltZXpvbmVcIiB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXZcclxuICAgICAgICAgIGNsYXNzPVwicHJvZmlsZS1jYXJkXCJcclxuICAgICAgICAgIFtuZ0NsYXNzXT1cInsgYWN0aXZlOiBTaG93TGFuZGluUGdTY3JlZW4gfVwiXHJcbiAgICAgICAgICAoY2xpY2spPVwiT3BlbkxhbmRpbmdQZ0NvbmZpZygpXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicC0yXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwcm9maWxlLWxhYmVsXCI+XHJcbiAgICAgICAgICAgICAge3sgXCJHZW5lcmljX2xpYi5MYW5kaW5nUGFnZUNvbmZpZ1wiIHwgdHJhbnNsYXRlIH19XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbiAgPCEtLSBMZWZ0X0NhcmRfRW5kZWQgLS0+XHJcblxyXG4gIDwhLS1Vc2VyIFByb2ZpbGUgLS0+XHJcbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIlNob3dVc2VyUHJvZmlsZVNjcmVlblwiPlxyXG4gICAgPGRpdiBjbGFzcz1cImNvbC1sZy02XCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJpbml0aWFsLXRleHRcIj5cclxuICAgICAgICB7eyBcIkFLXCIgfX1cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJwcmVmZXJlbmNlLWNvbnRhaW5lclwiPlxyXG4gICAgICAgIDwhLS1DYXJkLS0+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cIm10LTNcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsYWJlbC1uYW1lXCI+XHJcbiAgICAgICAgICAgICAge3sgXCJHZW5lcmljX2xpYi5Vc2VyTmFtZVwiIHwgdHJhbnNsYXRlIH19XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZHJvcGRvd24gZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxyXG4gICAgICAgICAgICAgICAgcElucHV0VGV4dFxyXG4gICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwidGV4dFwiXHJcbiAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cInt7ICdHZW5lcmljX2xpYi5Vc2VyTmFtZScgfCB0cmFuc2xhdGUgfX1cIlxyXG4gICAgICAgICAgICAgICAgYXV0b2NvbXBsZXRlPVwib2ZmXCJcclxuICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgIDxpbWdcclxuICAgICAgICAgICAgICAgIHNyYz1cIi4uLi8uLi8uLi8uLi8uLi9hc3NldHMvY29tbW9uLWhlYWRlci1saWIvaW1hZ2VzL2ltYWdlcy91c2VyLW5hbWUuc3ZnXCJcclxuICAgICAgICAgICAgICAgIGFsdD1cIkljb25cIlxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJwb3NpdGlvbi1hYnNvbHV0ZSBweC0yXCJcclxuICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsYWJlbC1uYW1lXCI+e3sgXCJHZW5lcmljX2xpYi5FbWFpbFwiIHwgdHJhbnNsYXRlIH19PC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1kcm9wZG93biBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXHJcbiAgICAgICAgICAgICAgICBwSW5wdXRUZXh0XHJcbiAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJ0ZXh0XCJcclxuICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwie3sgJ0dlbmVyaWNfbGliLkVtYWlsQWRkcmVzcycgfCB0cmFuc2xhdGUgfX1cIlxyXG4gICAgICAgICAgICAgICAgYXV0b2NvbXBsZXRlPVwib2ZmXCJcclxuICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgIDxpbWdcclxuICAgICAgICAgICAgICAgIHNyYz1cIi4uLi8uLi8uLi8uLi8uLi9hc3NldHMvY29tbW9uLWhlYWRlci1saWIvaW1hZ2VzL2djLW1haWwuc3ZnXCJcclxuICAgICAgICAgICAgICAgIGFsdD1cIkljb25cIlxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJwb3NpdGlvbi1hYnNvbHV0ZSBweC0yXCJcclxuICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTRcIj5cclxuICAgICAgICAgICAgPHAtYnV0dG9uIGNsYXNzPVwic3VibWl0LWJ0blwiIGxhYmVsPVwiU3VibWl0XCI+PC9wLWJ1dHRvbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIDwvbmctY29udGFpbmVyPlxyXG5cclxuICA8IS0tIFByZWZlcmVuY2UgUGF0aFNjcmVlbiAtLT5cclxuICA8bmctY29udGFpbmVyPlxyXG4gIDwhLS0gPG5nLWNvbnRhaW5lciAqbmdJZj1cIlNob3dQcmVmZXJlbmNlUGF0aFNjcmVlblwiPiAtLT5cclxuICAgIDxkaXYgY2xhc3M9XCJjb2wtbGctNlwiIFtoaWRkZW5dPVwiIVNob3dQcmVmZXJlbmNlUGF0aFNjcmVlblwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwicHJlZmVyZW5jZS1jb250YWluZXJcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwibXQtM1wiPlxyXG4gICAgICAgICAgPGZvcm0gW2Zvcm1Hcm91cF09XCJhcHBTZXR0aW5nRm9ybVwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXhcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsYWJlbC1uYW1lXCI+XHJcbiAgICAgICAgICAgICAgICAgIHt7IFwiR2VuZXJpY19saWIuQXNzZXRUeXBlXCIgfCB0cmFuc2xhdGUgfX1cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYWRvbnRhcnktaWNvblwiPio8L3NwYW4+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFzc2V0cy1kcm9wZG93blwiPlxyXG4gICAgICAgICAgICAgICAgPHAtZHJvcGRvd25cclxuICAgICAgICAgICAgICAgICAgW29wdGlvbnNdPVwidXNlckFzc2V0VHlwZUxpc3RcIlxyXG4gICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJBc3NldFR5cGVcIlxyXG4gICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cInt7XHJcbiAgICAgICAgICAgICAgICAgICAgJ0dlbmVyaWNfbGliLkFzc2V0VHlwZVBsYWNlaG9sZGVyJyB8IHRyYW5zbGF0ZVxyXG4gICAgICAgICAgICAgICAgICB9fVwiXHJcbiAgICAgICAgICAgICAgICAgIGZpbHRlclBsYWNlaG9sZGVyPVwie3sgJ0dlbmVyaWNfbGliLlNlYXJjaCcgfCB0cmFuc2xhdGUgfX1cIlxyXG4gICAgICAgICAgICAgICAgICAob25DaGFuZ2UpPVwicHJlZmVyZW5jZVBhdGhWYWx1ZUNoYW5nZShBc3NldFR5cGVFdmVudClcIlxyXG4gICAgICAgICAgICAgICAgICBvcHRpb25MYWJlbD1cImFzc2V0VHlwZVwiXHJcbiAgICAgICAgICAgICAgICAgIFtmaWx0ZXJdPVwiIWlzQXNzZXRUeXBlTG9hZGluZyA/IHRydWUgOiBmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICAgIGZpbHRlckJ5PVwiYXNzZXRUeXBlXCJcclxuICAgICAgICAgICAgICAgICAgW3Nob3dDbGVhcl09XCJmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICAgIFtyZXNldEZpbHRlck9uSGlkZV09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgcGFuZWxTdHlsZUNsYXNzPVwieydkcm9wZG93bi1sb2FkZXInOiBpc0Fzc2V0VHlwZUxvYWRpbmd9XCJcclxuICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImhlYWRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiaXNBc3NldFR5cGVMb2FkaW5nXCJcclxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZHJvcGRvd24tbG9hZGVyLWNvbnRhaW5lclwiXHJcbiAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJwaSBwaS1zcGluIHBpLXNwaW5uZXJcIj48L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICA8L3AtZHJvcGRvd24+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJcclxuICAgICAgICAgICAgICAgICAgYXBwU2V0dGluZ0Zvcm0uZ2V0KCdBc3NldFR5cGUnKT8uaW52YWxpZCAmJlxyXG4gICAgICAgICAgICAgICAgICBhcHBTZXR0aW5nRm9ybS5nZXQoJ0Fzc2V0VHlwZScpPy50b3VjaGVkXHJcbiAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZXJyb3ItbXNnIG10LTJcIj57e1xyXG4gICAgICAgICAgICAgICAgICBcIkdlbmVyaWNfbGliLkFzc2V0VHlwZUZpZWxkVmFsaWRhdGlvblwiIHwgdHJhbnNsYXRlXHJcbiAgICAgICAgICAgICAgICB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleFwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxhYmVsLW5hbWVcIj5cclxuICAgICAgICAgICAgICAgICAge3sgXCJHZW5lcmljX2xpYi5Bc3NldE5hbWVcIiB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hZG9udGFyeS1pY29uXCI+Kjwvc3Bhbj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXNzZXRzLWRyb3Bkb3duXCI+XHJcbiAgICAgICAgICAgICAgICA8cC1kcm9wZG93blxyXG4gICAgICAgICAgICAgICAgICBbb3B0aW9uc109XCJ1c2VyQXNzZXROYW1lTGlzdFwiXHJcbiAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cIkFzc2V0TmFtZVwiXHJcbiAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwie3tcclxuICAgICAgICAgICAgICAgICAgICAnR2VuZXJpY19saWIuQXNzZXROYW1lUGxhY2Vob2xkZXInIHwgdHJhbnNsYXRlXHJcbiAgICAgICAgICAgICAgICAgIH19XCJcclxuICAgICAgICAgICAgICAgICAgZmlsdGVyUGxhY2Vob2xkZXI9XCJ7eyAnR2VuZXJpY19saWIuU2VhcmNoJyB8IHRyYW5zbGF0ZSB9fVwiXHJcbiAgICAgICAgICAgICAgICAgIG9wdGlvbkxhYmVsPVwiYXNzZXROYW1lXCJcclxuICAgICAgICAgICAgICAgICAgW2ZpbHRlcl09XCIhaXNBc3NldE5hbWVMb2FkaW5nID8gdHJ1ZSA6IGZhbHNlXCJcclxuICAgICAgICAgICAgICAgICAgZmlsdGVyQnk9XCJhc3NldFR5cGVcIlxyXG4gICAgICAgICAgICAgICAgICAob25DaGFuZ2UpPVwicHJlZmVyZW5jZVBhdGhWYWx1ZUNoYW5nZShBc3NldE5hbWVFdmVudClcIlxyXG4gICAgICAgICAgICAgICAgICBmaWx0ZXJCeT1cImFzc2V0TmFtZVwiXHJcbiAgICAgICAgICAgICAgICAgIHBhbmVsU3R5bGVDbGFzcz1cInsnZHJvcGRvd24tbG9hZGVyJzogaXNBc3NldE5hbWVMb2FkaW5nfVwiXHJcbiAgICAgICAgICAgICAgICAgIFtzaG93Q2xlYXJdPVwiZmFsc2VcIlxyXG4gICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiaGVhZGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJpc0Fzc2V0TmFtZUxvYWRpbmdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkcm9wZG93bi1sb2FkZXItY29udGFpbmVyXCJcclxuICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cInBpIHBpLXNwaW4gcGktc3Bpbm5lclwiPjwvaT5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgIDwvcC1kcm9wZG93bj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgICAgICAgICAqbmdJZj1cIlxyXG4gICAgICAgICAgICAgICAgICBhcHBTZXR0aW5nRm9ybS5nZXQoJ0Fzc2V0TmFtZScpPy5pbnZhbGlkICYmXHJcbiAgICAgICAgICAgICAgICAgIGFwcFNldHRpbmdGb3JtLmdldCgnQXNzZXROYW1lJyk/LnRvdWNoZWRcclxuICAgICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJlcnJvci1tc2cgbXQtMlwiPnt7XHJcbiAgICAgICAgICAgICAgICAgIFwiR2VuZXJpY19saWIuQXNzZXROYW1lRmllbGRWYWxpZGF0aW9uXCIgfCB0cmFuc2xhdGVcclxuICAgICAgICAgICAgICAgIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4XCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGFiZWwtbmFtZVwiPlxyXG4gICAgICAgICAgICAgICAgICB7eyBcIkdlbmVyaWNfbGliLkNvbm5lY3Rpb25NZXRob2RcIiB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hZG9udGFyeS1pY29uXCI+Kjwvc3Bhbj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXNzZXRzLWRyb3Bkb3duXCI+XHJcbiAgICAgICAgICAgICAgICA8cC1kcm9wZG93blxyXG4gICAgICAgICAgICAgICAgICBbb3B0aW9uc109XCJ1c2VyU2VydmljZUxpc3RcIlxyXG4gICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJTZXJ2aWNlTmFtZVwiXHJcbiAgICAgICAgICAgICAgICAgIGZpbHRlclBsYWNlaG9sZGVyPVwie3sgJ0dlbmVyaWNfbGliLlNlYXJjaCcgfCB0cmFuc2xhdGUgfX1cIlxyXG4gICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cInt7XHJcbiAgICAgICAgICAgICAgICAgICAgJ0dlbmVyaWNfbGliLkNvbm5lY3Rpb25NZXRob2RQbGFjZWhvbGRlcicgfCB0cmFuc2xhdGVcclxuICAgICAgICAgICAgICAgICAgfX1cIlxyXG4gICAgICAgICAgICAgICAgICBvcHRpb25MYWJlbD1cInRidkRlc2NycHRpb25cIlxyXG4gICAgICAgICAgICAgICAgICBbZmlsdGVyXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICBmaWx0ZXJCeT1cInRidkRlc2NycHRpb25cIlxyXG4gICAgICAgICAgICAgICAgICAob25DaGFuZ2UpPVwicHJlZmVyZW5jZVBhdGhWYWx1ZUNoYW5nZShDb25uZWN0aW9uTWV0aG9kRXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgW2ZpbHRlcl09XCIhaXNDb25uZWN0aW9uTWV0aG9kTG9hZGluZyA/IHRydWUgOiBmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICAgIFtzaG93Q2xlYXJdPVwiZmFsc2VcIlxyXG4gICAgICAgICAgICAgICAgICBwYW5lbFN0eWxlQ2xhc3M9XCJ7J2Ryb3Bkb3duLWxvYWRlcic6IGlzQ29ubmVjdGlvbk1ldGhvZExvYWRpbmd9XCJcclxuICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImhlYWRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiaXNDb25uZWN0aW9uTWV0aG9kTG9hZGluZ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImRyb3Bkb3duLWxvYWRlci1jb250YWluZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwicGkgcGktc3BpbiBwaS1zcGlubmVyXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PiA8L25nLXRlbXBsYXRlXHJcbiAgICAgICAgICAgICAgICA+PC9wLWRyb3Bkb3duPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXJcclxuICAgICAgICAgICAgICAgICpuZ0lmPVwiXHJcbiAgICAgICAgICAgICAgICAgIGFwcFNldHRpbmdGb3JtLmdldCgnU2VydmljZU5hbWUnKT8uaW52YWxpZCAmJlxyXG4gICAgICAgICAgICAgICAgICBhcHBTZXR0aW5nRm9ybS5nZXQoJ1NlcnZpY2VOYW1lJyk/LnRvdWNoZWRcclxuICAgICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJlcnJvci1tc2cgbXQtMlwiPnt7XHJcbiAgICAgICAgICAgICAgICAgIFwiR2VuZXJpY19saWIuQ29ubmVjdGlvbk1ldGhvZEZpZWxkVmFsaWRhdGlvblwiIHwgdHJhbnNsYXRlXHJcbiAgICAgICAgICAgICAgICB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIHBvc2l0aW9uLXJlbGF0aXZlXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleFwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxhYmVsLW5hbWVcIj5cclxuICAgICAgICAgICAgICAgICAge3sgXCJHZW5lcmljX2xpYi5QcmVmZXJlbmNlUGF0aFwiIHwgdHJhbnNsYXRlIH19XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWFkb250YXJ5LWljb25cIj4qPC9zcGFuPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1kcm9wZG93biBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICA8aW5wdXRcclxuICAgICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxyXG4gICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cInt7ICdHZW5lcmljX2xpYi5QcmVmZXJlbmNlUGF0aCcgfCB0cmFuc2xhdGUgfX1cIlxyXG4gICAgICAgICAgICAgICAgICBwSW5wdXRUZXh0XHJcbiAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImZpbGVQYXRoTmFtZVwiXHJcbiAgICAgICAgICAgICAgICAgIGlkPVwiZmlsZXBhdGhcIlxyXG4gICAgICAgICAgICAgICAgICBuYW1lPVwiZmlsZXBhdGhcIlxyXG4gICAgICAgICAgICAgICAgICBhdXRvY29tcGxldGU9XCJvZmZcIlxyXG4gICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICAgIDxpbWdcclxuICAgICAgICAgICAgICAgICAgc3JjPVwiLi4uLy4uLy4uLy4uLy4uL2Fzc2V0cy9jb21tb24taGVhZGVyLWxpYi9pbWFnZXMvZmlsZXBhdGguc3ZnXCJcclxuICAgICAgICAgICAgICAgICAgYWx0PVwicGF0aCBJY29uXCJcclxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJwb3NpdGlvbi1hYnNvbHV0ZSBteC0yIGltZy1sb2NrIGV4dFwiXHJcbiAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXJcclxuICAgICAgICAgICAgICAgICpuZ0lmPVwiXHJcbiAgICAgICAgICAgICAgICAgIGFwcFNldHRpbmdGb3JtLmdldCgnZmlsZVBhdGhOYW1lJyk/LmludmFsaWQgJiZcclxuICAgICAgICAgICAgICAgICAgKGFwcFNldHRpbmdGb3JtLmdldCgnZmlsZVBhdGhOYW1lJyk/LnRvdWNoZWQgfHxcclxuICAgICAgICAgICAgICAgICAgICBhcHBTZXR0aW5nRm9ybS5nZXQoJ2ZpbGVQYXRoTmFtZScpPy5kaXJ0eSlcclxuICAgICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICAgICAgICAgICAqbmdJZj1cIlxyXG4gICAgICAgICAgICAgICAgICAgIGFwcFNldHRpbmdGb3JtLmNvbnRyb2xzWydmaWxlUGF0aE5hbWUnXS5lcnJvcnM/LlsncmVxdWlyZWQnXVxyXG4gICAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImVycm9yLW1zZyBtdC0yXCI+e3tcclxuICAgICAgICAgICAgICAgICAgICBcIkdlbmVyaWNfbGliLlByZWZlcmVuY2VQYXRoRmllbGRWYWxpZGF0aW9uXCIgfCB0cmFuc2xhdGVcclxuICAgICAgICAgICAgICAgICAgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcclxuICAgICAgICAgICAgICAgICAgKm5nSWY9XCJcclxuICAgICAgICAgICAgICAgICAgICBhcHBTZXR0aW5nRm9ybS5jb250cm9sc1snZmlsZVBhdGhOYW1lJ10uZXJyb3JzPy5bJ25vU3BhY2UnXVxyXG4gICAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImVycm9yLW1zZyBtdC0yXCI+e3tcclxuICAgICAgICAgICAgICAgICAgICBcIkdlbmVyaWNfbGliLlByZWZlcmVuY2VQYXRoRmllbGRTcGFjZVZhbGlkYXRpb25cIiB8IHRyYW5zbGF0ZVxyXG4gICAgICAgICAgICAgICAgICB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNob3dTdGF0dXNcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGFiZWwtbmFtZVwiPlxyXG4gICAgICAgICAgICAgICAgICB7eyBcIkdlbmVyaWNfbGliLkN1cnJlbnRTZXR0aW5nXCIgfCB0cmFuc2xhdGUgfX0gOlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3VyLXRleHQgbXgtMlwiPnt7IGZpbGVQYXRoTmFtZSB9fTwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsYWJlbC1uYW1lXCI+XHJcbiAgICAgICAgICAgICAgICAgIHt7IFwiR2VuZXJpY19saWIuTGFzdFVwZGF0ZWRcIiB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3VyLXRleHQgbXgtMlwiPnt7IGxhc3RVcGRhdGVkRmlsZVN0YXR1cyB9fTwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTRcIj5cclxuICAgICAgICAgICAgICA8cC1idXR0b25cclxuICAgICAgICAgICAgICAgIGNsYXNzPVwic3VibWl0LWJ0blwiXHJcbiAgICAgICAgICAgICAgICBsYWJlbD1cInt7ICdHZW5lcmljX2xpYi5VcGRhdGUnIHwgdHJhbnNsYXRlIH19XCJcclxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJhcHBTZXR0aW5nRm9ybS5pbnZhbGlkXCJcclxuICAgICAgICAgICAgICAgIChvbkNsaWNrKT1cInNldFVzZXJQcmVmZXJlbmNlUGF0aChhcHBTZXR0aW5nRm9ybSlcIlxyXG4gICAgICAgICAgICAgICAgaWNvblBvcz1cInJpZ2h0XCJcclxuICAgICAgICAgICAgICAgIFtsb2FkaW5nXT1cImlzUGF0aFVwZGF0ZWRcIlxyXG4gICAgICAgICAgICAgID48L3AtYnV0dG9uPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZm9ybT5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgPCEtLSBUaW1lWm9uZSBTY3JlZW4gLS0+XHJcbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIlNob3dUaW1lWm9uZVNjcmVlblwiPlxyXG4gICAgPGRpdiBjbGFzcz1cImNvbC1sZy02XCI+XHJcbiAgICAgIDxhcHAtdGltZXpvbmUtY29uZmlndXJhdGlvbj48L2FwcC10aW1lem9uZS1jb25maWd1cmF0aW9uPlxyXG4gICAgPC9kaXY+XHJcbiAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gIDwhLS0gTGFuZGluZ1BnIENvbmZpZyBTY3JlZW4gLS0+XHJcbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIlNob3dMYW5kaW5QZ1NjcmVlblwiPlxyXG4gICAgPGRpdiBjbGFzcz1cImNvbC1sZy02XCI+XHJcbiAgICAgIDxhcHAtbGFuZGluZ3BnLWNvbmZpZz48L2FwcC1sYW5kaW5ncGctY29uZmlnPlxyXG4gICAgPC9kaXY+XHJcbiAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gIDwhLS1DaGFuZ2UgUGFzc3dvcmQgU2NyZWVuIC0tPlxyXG4gIDwhLS0gPG5nLWNvbnRhaW5lciAqbmdJZj1cIlNob3dDaGFuZ2VQYXNzd29yZFNjcmVlblwiPiAtLT5cclxuICAgIDxuZy1jb250YWluZXI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY29sLWxnLTZcIiBbaGlkZGVuXT1cIiFTaG93Q2hhbmdlUGFzc3dvcmRTY3JlZW5cIj5cclxuICAgICAgPGRpdiBjbGFzcz1cInByZWZlcmVuY2UtY29udGFpbmVyXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cIm10LTNcIj5cclxuICAgICAgICAgIDxmb3JtIFtmb3JtR3JvdXBdPVwidXNlclJlc2V0UGFzc3dvcmRGb3JtXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleFwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxhYmVsLW5hbWVcIj5cclxuICAgICAgICAgICAgICAgICAge3sgXCJHZW5lcmljX2xpYi5DdXJyZW50UGFzc3dvcmRcIiB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hZG9udGFyeS1pY29uXCI+Kjwvc3Bhbj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImlucHV0LWRyb3Bkb3duIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgcG9zaXRpb24tcmVsYXRpdmVcIlxyXG4gICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwYXNzd29yZC1jaGVja2JveC1yaWdodFwiPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hlY2tib3gtdmlzaWJpbGl0eS1pY29uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZVBhc3N3b3JkVmlzaWJpbGl0eSgxKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBhdXRvY29tcGxldGU9XCJvZmZcIlxyXG4gICAgICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJ7eyBtYWtlT2xkUHdkVmlzaWJsZSA/ICdwYXNzd29yZCcgOiAndGV4dCcgfX1cIlxyXG4gICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cInt7XHJcbiAgICAgICAgICAgICAgICAgICAgJ0dlbmVyaWNfbGliLlBhc3N3b3JkUGxhY2Vob2xkZXInIHwgdHJhbnNsYXRlXHJcbiAgICAgICAgICAgICAgICAgIH19XCJcclxuICAgICAgICAgICAgICAgICAgcElucHV0VGV4dFxyXG4gICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJvbGRVc2VyQVJDWFdEXCJcclxuICAgICAgICAgICAgICAgICAgYXV0b2NvbXBsZXRlPVwib2ZmXCJcclxuICAgICAgICAgICAgICAgICAgaWQ9XCJvbGRwd2RcIlxyXG4gICAgICAgICAgICAgICAgICBuYW1lPVwib2xkcHdkXCJcclxuICAgICAgICAgICAgICAgICAgYXV0b2NvbXBsZXRlPVwib2ZmXCJcclxuICAgICAgICAgICAgICAgIC8+XHJcblxyXG4gICAgICAgICAgICAgICAgPGltZ1xyXG4gICAgICAgICAgICAgICAgICBzcmM9XCIuLi4vLi4vLi4vLi4vLi4vYXNzZXRzL2NvbW1vbi1oZWFkZXItbGliL2ltYWdlcy9sb2NrLXBhc3Muc3ZnXCJcclxuICAgICAgICAgICAgICAgICAgYWx0PVwibG9jayBJY29uXCJcclxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJwb3NpdGlvbi1hYnNvbHV0ZSBteC0yIGltZy1sb2NrXCJcclxuICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJcclxuICAgICAgICAgICAgICAgICAgdXNlclJlc2V0UGFzc3dvcmRGb3JtLmdldCgnb2xkVXNlckFSQ1hXRCcpPy5pbnZhbGlkICYmXHJcbiAgICAgICAgICAgICAgICAgIHVzZXJSZXNldFBhc3N3b3JkRm9ybS5nZXQoJ29sZFVzZXJBUkNYV0QnKT8udG91Y2hlZFxyXG4gICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImVycm9yLW1zZyBtdC0yXCI+e3tcclxuICAgICAgICAgICAgICAgICAgXCJHZW5lcmljX2xpYi5QYXNzd29yZEZpZWxkVmFsaWRhdGlvblwiIHwgdHJhbnNsYXRlXHJcbiAgICAgICAgICAgICAgICB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleFwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxhYmVsLW5hbWVcIj5cclxuICAgICAgICAgICAgICAgICAge3sgXCJHZW5lcmljX2xpYi5OZXdQYXNzd29yZFwiIHwgdHJhbnNsYXRlIH19XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWFkb250YXJ5LWljb25cIj4qPC9zcGFuPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgIGNsYXNzPVwiaW5wdXQtZHJvcGRvd24gZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBwb3NpdGlvbi1yZWxhdGl2ZVwiXHJcbiAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBhc3N3b3JkLWNoZWNrYm94LXJpZ2h0XCI+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGVja2JveC12aXNpYmlsaXR5LWljb25cIj5cclxuICAgICAgICAgICAgICAgICAgICA8aW5wdXRcclxuICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlUGFzc3dvcmRWaXNpYmlsaXR5KDIpXCJcclxuICAgICAgICAgICAgICAgICAgICAgIGF1dG9jb21wbGV0ZT1cIm9mZlwiXHJcbiAgICAgICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICAgICAgICA8c3Bhbj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8aW5wdXRcclxuICAgICAgICAgICAgICAgICAgdHlwZT1cInt7IG1ha2VOZXdQd2RWaXNpYmxlID8gJ3Bhc3N3b3JkJyA6ICd0ZXh0JyB9fVwiXHJcbiAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwie3tcclxuICAgICAgICAgICAgICAgICAgICAnR2VuZXJpY19saWIuTmV3UGFzc3dvcmRQbGFjZWhvbGRlcicgfCB0cmFuc2xhdGVcclxuICAgICAgICAgICAgICAgICAgfX1cIlxyXG4gICAgICAgICAgICAgICAgICBwSW5wdXRUZXh0XHJcbiAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cIm5ld1VzZXJBUkNYV0RcIlxyXG4gICAgICAgICAgICAgICAgICBpZD1cIm5ld3B3ZFwiXHJcbiAgICAgICAgICAgICAgICAgIGF1dG9jb21wbGV0ZT1cIm9mZlwiXHJcbiAgICAgICAgICAgICAgICAgIG5hbWU9XCJuZXdwd2RcIlxyXG4gICAgICAgICAgICAgICAgICBhdXRvY29tcGxldGU9XCJvZmZcIlxyXG4gICAgICAgICAgICAgICAgLz5cclxuXHJcbiAgICAgICAgICAgICAgICA8aW1nXHJcbiAgICAgICAgICAgICAgICAgIHNyYz1cIi4uLi8uLi8uLi8uLi8uLi9hc3NldHMvY29tbW9uLWhlYWRlci1saWIvaW1hZ2VzL2xvY2stcGFzcy5zdmdcIlxyXG4gICAgICAgICAgICAgICAgICBhbHQ9XCJsb2NrIEljb25cIlxyXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cInBvc2l0aW9uLWFic29sdXRlIG14LTIgaW1nLWxvY2tcIlxyXG4gICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgICAgICAgICAqbmdJZj1cIlxyXG4gICAgICAgICAgICAgICAgICB1c2VyUmVzZXRQYXNzd29yZEZvcm1cclxuICAgICAgICAgICAgICAgICAgICAuZ2V0KCduZXdVc2VyQVJDWFdEJylcclxuICAgICAgICAgICAgICAgICAgICA/Lmhhc0Vycm9yKCdyZXF1aXJlZCcpICYmXHJcbiAgICAgICAgICAgICAgICAgIHVzZXJSZXNldFBhc3N3b3JkRm9ybS5nZXQoJ25ld1VzZXJBUkNYV0QnKT8udG91Y2hlZFxyXG4gICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImVycm9yLW1zZyBtdC0yXCI+e3tcclxuICAgICAgICAgICAgICAgICAgXCJHZW5lcmljX2xpYi5OZXdQYXNzd29yZEZpZWxkVmFsaWRhdGlvblwiIHwgdHJhbnNsYXRlXHJcbiAgICAgICAgICAgICAgICB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgICAgICAgICAqbmdJZj1cIlxyXG4gICAgICAgICAgICAgICAgICB1c2VyUmVzZXRQYXNzd29yZEZvcm1cclxuICAgICAgICAgICAgICAgICAgICAuZ2V0KCduZXdVc2VyQVJDWFdEJylcclxuICAgICAgICAgICAgICAgICAgICA/Lmhhc0Vycm9yKCdwd2RJbnZhbGlkJykgJiZcclxuICAgICAgICAgICAgICAgICAgdXNlclJlc2V0UGFzc3dvcmRGb3JtLmdldCgnbmV3VXNlckFSQ1hXRCcpPy50b3VjaGVkXHJcbiAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZXJyb3ItbXNnIG10LTJcIj57eyBwd2RlcnJvck1zZyB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleFwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxhYmVsLW5hbWVcIj5cclxuICAgICAgICAgICAgICAgICAge3sgXCJHZW5lcmljX2xpYi5Db25maXJtUGFzc3dvcmRcIiB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hZG9udGFyeS1pY29uXCI+Kjwvc3Bhbj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImlucHV0LWRyb3Bkb3duIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgcG9zaXRpb24tcmVsYXRpdmVcIlxyXG4gICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwYXNzd29yZC1jaGVja2JveC1yaWdodFwiPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hlY2tib3gtdmlzaWJpbGl0eS1pY29uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZVBhc3N3b3JkVmlzaWJpbGl0eSgzKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBhdXRvY29tcGxldGU9XCJvZmZcIlxyXG4gICAgICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJ7eyBtYWtlQ25mcm1Qd2RWaXNpYmxlID8gJ3Bhc3N3b3JkJyA6ICd0ZXh0JyB9fVwiXHJcbiAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwie3tcclxuICAgICAgICAgICAgICAgICAgICAnR2VuZXJpY19saWIuQ29uZmlybVBhc3N3b3JkUGxhY2Vob2xkZXInIHwgdHJhbnNsYXRlXHJcbiAgICAgICAgICAgICAgICAgIH19XCJcclxuICAgICAgICAgICAgICAgICAgcElucHV0VGV4dFxyXG4gICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJjcm5tTmV3VXNlckFSQ1hXRFwiXHJcbiAgICAgICAgICAgICAgICAgIGF1dG9jb21wbGV0ZT1cIm9mZlwiXHJcbiAgICAgICAgICAgICAgICAgIGlkPVwiY3JubW5ld3B3ZFwiXHJcbiAgICAgICAgICAgICAgICAgIG5hbWU9XCJjcm5tbmV3cHdkXCJcclxuICAgICAgICAgICAgICAgIC8+XHJcblxyXG4gICAgICAgICAgICAgICAgPGltZ1xyXG4gICAgICAgICAgICAgICAgICBzcmM9XCIuLi4vLi4vLi4vLi4vLi4vYXNzZXRzL2NvbW1vbi1oZWFkZXItbGliL2ltYWdlcy9sb2NrLXBhc3Muc3ZnXCJcclxuICAgICAgICAgICAgICAgICAgYWx0PVwiZXllIEljb25cIlxyXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cInBvc2l0aW9uLWFic29sdXRlIG14LTIgaW1nLWxvY2tcIlxyXG4gICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgICAgICAgICAqbmdJZj1cIlxyXG4gICAgICAgICAgICAgICAgICB1c2VyUmVzZXRQYXNzd29yZEZvcm1cclxuICAgICAgICAgICAgICAgICAgICAuZ2V0KCdjcm5tTmV3VXNlckFSQ1hXRCcpXHJcbiAgICAgICAgICAgICAgICAgICAgPy5oYXNFcnJvcigncmVxdWlyZWQnKSAmJlxyXG4gICAgICAgICAgICAgICAgICB1c2VyUmVzZXRQYXNzd29yZEZvcm0uZ2V0KCdjcm5tTmV3VXNlckFSQ1hXRCcpPy50b3VjaGVkXHJcbiAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZXJyb3ItbXNnIG10LTJcIj57e1xyXG4gICAgICAgICAgICAgICAgICBcIkdlbmVyaWNfbGliLkNvbmZpcm1QYXNzd29yZEZpZWxkVmFsaWRhdGlvblwiIHwgdHJhbnNsYXRlXHJcbiAgICAgICAgICAgICAgICB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJlcnJvci1tc2cgbXQtMlwiXHJcbiAgICAgICAgICAgICAgICAqbmdJZj1cIlxyXG4gICAgICAgICAgICAgICAgICB1c2VyUmVzZXRQYXNzd29yZEZvcm1cclxuICAgICAgICAgICAgICAgICAgICAuZ2V0KCdjcm5tTmV3VXNlckFSQ1hXRCcpXHJcbiAgICAgICAgICAgICAgICAgICAgPy5oYXNFcnJvcignY29uZmlybWVkVmFsaWRhdG9yJylcclxuICAgICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAge3tcclxuICAgICAgICAgICAgICAgICAgXCJHZW5lcmljX2xpYi5Db25maXJtUGFzc3dvcmRGaWVsZE5ld1ZhbGlkYXRpb25cIiB8IHRyYW5zbGF0ZVxyXG4gICAgICAgICAgICAgICAgfX1cclxuICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTRcIj5cclxuICAgICAgICAgICAgICA8cC1idXR0b25cclxuICAgICAgICAgICAgICAgIGNsYXNzPVwic3VibWl0LWJ0blwiXHJcbiAgICAgICAgICAgICAgICBsYWJlbD1cInt7ICdHZW5lcmljX2xpYi5VcGRhdGUnIHwgdHJhbnNsYXRlIH19XCJcclxuICAgICAgICAgICAgICAgIGljb25Qb3M9XCJyaWdodFwiXHJcbiAgICAgICAgICAgICAgICBbbG9hZGluZ109XCJpc1BhdGhVcGRhdGVkXCJcclxuICAgICAgICAgICAgICAgIGxhYmVsPVwiVXBkYXRlXCJcclxuICAgICAgICAgICAgICAgIChvbkNsaWNrKT1cInJlc2V0TG9nZ2VkSW5Qd2QoKVwiXHJcbiAgICAgICAgICAgICAgPjwvcC1idXR0b24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9mb3JtPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIDwvbmctY29udGFpbmVyPlxyXG48L2Rpdj5cclxuIl19