@rangertechnologies/ngnxt 2.1.242 → 2.1.243-beta

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 (90) hide show
  1. package/fesm2022/rangertechnologies-ngnxt.mjs +153 -185
  2. package/fesm2022/rangertechnologies-ngnxt.mjs.map +1 -1
  3. package/lib/components/image-cropper/component/image-cropper.component.d.ts +1 -1
  4. package/lib/components/pick-location/pick-location.component.d.ts +0 -1
  5. package/package.json +4 -6
  6. package/rangertechnologies-ngnxt-2.1.243-beta.tgz +0 -0
  7. package/esm2022/environments/version.mjs +0 -15
  8. package/esm2022/lib/ar.i18n.mjs +0 -29
  9. package/esm2022/lib/components/button/nxt-button.component.mjs +0 -165
  10. package/esm2022/lib/components/custom-calendar/custom-calendar.component.mjs +0 -371
  11. package/esm2022/lib/components/custom-dropdown/custom-dropdown.component.mjs +0 -274
  12. package/esm2022/lib/components/custom-model/custom-model.component.mjs +0 -51
  13. package/esm2022/lib/components/custom-radio/custom-radio.component.mjs +0 -156
  14. package/esm2022/lib/components/datatable/datatable.component.mjs +0 -1625
  15. package/esm2022/lib/components/file-upload/file-upload.component.mjs +0 -283
  16. package/esm2022/lib/components/icon-selector/icon-selector.component.mjs +0 -104
  17. package/esm2022/lib/components/image-cropper/component/cropper.state.mjs +0 -208
  18. package/esm2022/lib/components/image-cropper/component/image-cropper.component.mjs +0 -562
  19. package/esm2022/lib/components/image-cropper/interfaces/basic-event.interface.mjs +0 -2
  20. package/esm2022/lib/components/image-cropper/interfaces/cropper-options.interface.mjs +0 -2
  21. package/esm2022/lib/components/image-cropper/interfaces/cropper-position.interface.mjs +0 -2
  22. package/esm2022/lib/components/image-cropper/interfaces/dimensions.interface.mjs +0 -2
  23. package/esm2022/lib/components/image-cropper/interfaces/exif-transform.interface.mjs +0 -2
  24. package/esm2022/lib/components/image-cropper/interfaces/image-cropped-event.interface.mjs +0 -2
  25. package/esm2022/lib/components/image-cropper/interfaces/image-transform.interface.mjs +0 -2
  26. package/esm2022/lib/components/image-cropper/interfaces/index.mjs +0 -2
  27. package/esm2022/lib/components/image-cropper/interfaces/loaded-image.interface.mjs +0 -2
  28. package/esm2022/lib/components/image-cropper/interfaces/move-start.interface.mjs +0 -8
  29. package/esm2022/lib/components/image-cropper/services/crop.service.mjs +0 -139
  30. package/esm2022/lib/components/image-cropper/services/load-image.service.mjs +0 -194
  31. package/esm2022/lib/components/image-cropper/utils/cropper-position.utils.mjs +0 -239
  32. package/esm2022/lib/components/image-cropper/utils/exif.utils.mjs +0 -79
  33. package/esm2022/lib/components/image-cropper/utils/keyboard.utils.mjs +0 -40
  34. package/esm2022/lib/components/image-cropper/utils/percentage.utils.mjs +0 -4
  35. package/esm2022/lib/components/image-cropper/utils/resize.utils.mjs +0 -75
  36. package/esm2022/lib/components/list-view-filter/list-view-filter.component.mjs +0 -403
  37. package/esm2022/lib/components/nxt-input/nxt-input.component.mjs +0 -2925
  38. package/esm2022/lib/components/pagination/pagination.component.mjs +0 -101
  39. package/esm2022/lib/components/pick-location/pick-location.component.mjs +0 -234
  40. package/esm2022/lib/components/search-box/search-box.component.mjs +0 -413
  41. package/esm2022/lib/country.json +0 -43237
  42. package/esm2022/lib/en.i18n.mjs +0 -29
  43. package/esm2022/lib/i18n-config.service.mjs +0 -4
  44. package/esm2022/lib/i18n.component.mjs +0 -47
  45. package/esm2022/lib/i18n.module.mjs +0 -38
  46. package/esm2022/lib/i18n.pipe.mjs +0 -26
  47. package/esm2022/lib/i18n.service.mjs +0 -56
  48. package/esm2022/lib/interfaces/actionMeta.mjs +0 -2
  49. package/esm2022/lib/interfaces/apimeta.mjs +0 -2
  50. package/esm2022/lib/interfaces/dependencyMeta.mjs +0 -2
  51. package/esm2022/lib/model/bookletWrapper.mjs +0 -9
  52. package/esm2022/lib/model/changeWrapper.mjs +0 -11
  53. package/esm2022/lib/model/errorWrapper.mjs +0 -6
  54. package/esm2022/lib/nxt-app.component.mjs +0 -22
  55. package/esm2022/lib/nxt-app.module.mjs +0 -139
  56. package/esm2022/lib/nxt-app.service.mjs +0 -14
  57. package/esm2022/lib/pages/booklet/booklet.component.mjs +0 -675
  58. package/esm2022/lib/pages/builder/element/element.component.mjs +0 -466
  59. package/esm2022/lib/pages/builder/form/form.component.mjs +0 -45
  60. package/esm2022/lib/pages/builder/properties/common-fields.constants.mjs +0 -89
  61. package/esm2022/lib/pages/builder/properties/properties.component.mjs +0 -1021
  62. package/esm2022/lib/pages/builder/templates/templates.component.mjs +0 -34
  63. package/esm2022/lib/pages/pdfDesigner/pdf-designer/pdf-designer.component.mjs +0 -676
  64. package/esm2022/lib/pages/pdfDesigner/pdf-properties/pdf-properties.component.mjs +0 -1126
  65. package/esm2022/lib/pages/questionbook/questionbook.component.mjs +0 -841
  66. package/esm2022/lib/pages/questionnaire/questionnaire.component.mjs +0 -2405
  67. package/esm2022/lib/pipe/custom-translate.pipe.mjs +0 -27
  68. package/esm2022/lib/pipe/date/date.pipe.mjs +0 -28
  69. package/esm2022/lib/pipe/editColumnCheck/edit-column-check.pipe.mjs +0 -28
  70. package/esm2022/lib/pipe/editColumnDropdown/edit-column-dropdown.pipe.mjs +0 -20
  71. package/esm2022/lib/pipe/editColumnType/edit-column-type.pipe.mjs +0 -20
  72. package/esm2022/lib/pipe/get-value.pipe.mjs +0 -48
  73. package/esm2022/lib/pipe/search-filter/search-filter.pipe.mjs +0 -39
  74. package/esm2022/lib/pipe/time/time.pipe.mjs +0 -26
  75. package/esm2022/lib/sample.mjs +0 -3715
  76. package/esm2022/lib/services/change.service.mjs +0 -50
  77. package/esm2022/lib/services/country.service.mjs +0 -135
  78. package/esm2022/lib/services/data.service.mjs +0 -103
  79. package/esm2022/lib/services/form-builder.service.mjs +0 -375
  80. package/esm2022/lib/services/pdf-designer.service.mjs +0 -401
  81. package/esm2022/lib/services/salesforce.service.mjs +0 -46
  82. package/esm2022/lib/services/shared.service.mjs +0 -100
  83. package/esm2022/lib/services/storage.service.mjs +0 -44
  84. package/esm2022/lib/services/template.service.mjs +0 -351
  85. package/esm2022/lib/services/translation.service.mjs +0 -62
  86. package/esm2022/lib/tam.i18n.mjs +0 -29
  87. package/esm2022/lib/wrapper.mjs +0 -175
  88. package/esm2022/public-api.mjs +0 -25
  89. package/esm2022/rangertechnologies-ngnxt.mjs +0 -5
  90. package/rangertechnologies-ngnxt-2.1.242.tgz +0 -0
@@ -1,283 +0,0 @@
1
- import { Component, Output, EventEmitter, Input } from '@angular/core';
2
- import { CommonModule } from '@angular/common';
3
- import { I18nPipe } from '../../i18n.pipe';
4
- import { catchError, of } from 'rxjs';
5
- import * as i0 from "@angular/core";
6
- import * as i1 from "../../services/shared.service";
7
- import * as i2 from "../../services/data.service";
8
- import * as i3 from "@angular/platform-browser";
9
- import * as i4 from "../../i18n.service";
10
- import * as i5 from "@angular/common";
11
- export class FileUploadComponent {
12
- SharedService;
13
- dataService;
14
- sanitizer;
15
- i18nService;
16
- selectedFileData = new EventEmitter();
17
- deletedFileData = new EventEmitter();
18
- allFiles;
19
- limitFileUploading;
20
- mode = 'edit'; // SKS11JUN25 New mode input
21
- isShowNoFileIcon;
22
- question;
23
- error;
24
- //RS 09JAN2025
25
- allowedFileTypes = [];
26
- maxFileSize = 0; // in bytes(Binary)
27
- maxFiles = 4; // default limit
28
- validationErrors = [];
29
- selectedFileNameArray = [];
30
- copyOfInputAllFiles;
31
- copyOfFileUploadingLimit;
32
- fileUrl;
33
- isImage = false;
34
- fileName = '';
35
- currentFile;
36
- showPopup = false; // SKS11JUN25 Add popup visibility control
37
- viewEdit = false;
38
- originalValue; // SKS13JUN25 To store the original value when entering view edit mode
39
- isSaveHovered = false;
40
- isDiscardHovered = false;
41
- isLoading = false;
42
- constructor(SharedService, dataService, sanitizer, i18nService) {
43
- this.SharedService = SharedService;
44
- this.dataService = dataService;
45
- this.sanitizer = sanitizer;
46
- this.i18nService = i18nService;
47
- }
48
- //RS 09JAN2025
49
- ngOnInit() {
50
- this.initializeFileConfigs();
51
- }
52
- ngOnChanges(simpleChanges) {
53
- if (simpleChanges['mode']) {
54
- this.mode = simpleChanges['mode'].currentValue;
55
- }
56
- if (simpleChanges.allFiles) { //SKS5NOV25
57
- this.copyOfInputAllFiles = simpleChanges.allFiles.currentValue || [];
58
- }
59
- if (simpleChanges.limitFileUploading) {
60
- this.copyOfFileUploadingLimit = simpleChanges.limitFileUploading?.currentValue;
61
- }
62
- }
63
- //RS 09JAN2025 Initializes file upload settings (allowed types, max size, and max files) by parsing metadata from fieldsMeta
64
- initializeFileConfigs() {
65
- if (this.question?.fieldsMeta) {
66
- try {
67
- // SKS20MAR25 check if question fieldsmeta is string
68
- const metaData = typeof this.question['fieldsMeta'] === 'object' ? this.question['fieldsMeta'] || [] : JSON.parse(this.question['fieldsMeta']);
69
- const fileConfig = metaData[0]; // Get first config object
70
- if (fileConfig) {
71
- this.allowedFileTypes = fileConfig.allowedTypes || [];
72
- this.maxFileSize = fileConfig.maxFileSize || 0;
73
- this.maxFiles = fileConfig.maxFiles || 5;
74
- }
75
- }
76
- catch (error) {
77
- // console.error('Error parsing fieldsMeta:', error);
78
- }
79
- }
80
- }
81
- // SKS11JUN25 Open the popup
82
- openPopup() {
83
- this.showPopup = true;
84
- this.viewFile(this.copyOfInputAllFiles[0]);
85
- }
86
- // SKS11JUN25 Close the popup
87
- closePopup() {
88
- this.showPopup = false;
89
- }
90
- uploadMultipleFiles(event) {
91
- console.log('File uploader initiated');
92
- this.validationErrors = []; // RS 17JAN2025 Clear previous errors
93
- let inputFiles = this.copyOfInputAllFiles ? this.copyOfInputAllFiles : [];
94
- const selectedFileData = [];
95
- const uploadedFiles = event.target.files;
96
- // RS 09JAN2025 Check file count limit
97
- if (uploadedFiles.length + inputFiles.length > this.maxFiles) {
98
- this.validationErrors.push(`Maximum ${this.maxFiles} files allowed`);
99
- event.target.value = '';
100
- return;
101
- }
102
- const readFilesPromises = [];
103
- for (const eachUploadedFile of uploadedFiles) {
104
- const file = eachUploadedFile;
105
- //RS 09JAN2025 Check file type
106
- const fileExt = '.' + file.name.split('.').pop().toLowerCase();
107
- if (this.allowedFileTypes.length > 0 && !this.allowedFileTypes.includes(fileExt)) {
108
- this.validationErrors.push(`File type ${fileExt} not allowed. Allowed types: ${this.allowedFileTypes.join(', ')}`);
109
- continue;
110
- }
111
- //RS 09JAN2025 Check file size
112
- if (this.maxFileSize > 0 && file.size > this.maxFileSize) {
113
- this.validationErrors.push(`File "${file.name}" exceeds size limit of ${this.maxFileSize / 1048576}MB`);
114
- continue;
115
- }
116
- if (!this.validationErrors.length) {
117
- const format = fileExt.substring(1);
118
- const fileReadPromise = new Promise((resolve, reject) => {
119
- const reader = new FileReader();
120
- reader.readAsDataURL(file);
121
- reader.onload = () => {
122
- const fileData = {
123
- doc: reader.result,
124
- name: file.name,
125
- type: file.type,
126
- format,
127
- size: file.size, // RS 17JAN2025
128
- id: null,
129
- };
130
- selectedFileData.push(fileData);
131
- inputFiles.push(fileData);
132
- resolve();
133
- };
134
- reader.onerror = () => {
135
- reject();
136
- this.validationErrors.push(`Error reading file "${file.name}"`); // RS 17JAN2025
137
- };
138
- });
139
- readFilesPromises.push(fileReadPromise);
140
- }
141
- }
142
- if (readFilesPromises.length > 0) {
143
- // Wait for all promises to resolve
144
- Promise.all(readFilesPromises).then(() => {
145
- this.copyOfInputAllFiles = inputFiles;
146
- console.log('uploadedFiles', inputFiles);
147
- this.selectedFileData.emit({ question: this.question, value: inputFiles });
148
- }).catch(() => {
149
- // console.error('Error reading files');
150
- });
151
- }
152
- else {
153
- console.warn('You can upload max 5 files');
154
- // this.toastr.warning(TOASTER_MESSAGES.MAX_FIVE_FILES, TOASTER_MESSAGES.WARNING_TITLE);
155
- }
156
- event.target.value = '';
157
- }
158
- deleteFile(currentFileIndex) {
159
- const deletedFileName = this.selectedFileNameArray.splice(currentFileIndex, 1);
160
- const deletedFile = this.copyOfInputAllFiles.splice(currentFileIndex, 1);
161
- this.copyOfInputAllFiles.length > 0 ? this.viewFile(this.copyOfInputAllFiles[0]) : this.viewFile(null);
162
- console.log('emit', deletedFile[0]);
163
- this.deletedFileData.emit(deletedFile[0]);
164
- this.selectedFileData.emit({ question: this.question, value: this.copyOfInputAllFiles });
165
- }
166
- // VD 20May24 - preview changes
167
- // RS 09DEC24 Changed keys
168
- viewFile(currentFile) {
169
- this.currentFile = currentFile;
170
- // AP-25MAR25 Ensure subText is parsed into an object if it's not already
171
- this.question['subText'] = typeof this.question?.subText === 'object' ? this.question?.subText : JSON.parse(this.question['subText']) || {};
172
- if (this.question.subText != undefined) {
173
- let fileMeta = this.question.subText;
174
- let endpoint = fileMeta.endpoint;
175
- let queryParameter = fileMeta.queryParameter;
176
- let file = currentFile;
177
- if (endpoint && file[queryParameter]) {
178
- this.isLoading = true;
179
- const fullEndPoint = endpoint + '?' + queryParameter + '=' + file[queryParameter];
180
- if (fullEndPoint) {
181
- this.dataService.apiResponse(fullEndPoint).pipe(catchError((error) => {
182
- this.viewLocalFile(); // Call fallback method
183
- return of(null); // Return a fallback value to keep observable chain alive
184
- })).subscribe((apiResponse) => {
185
- if (apiResponse) {
186
- this.isLoading = false;
187
- this.handleFileContent(apiResponse);
188
- }
189
- });
190
- }
191
- }
192
- else {
193
- this.viewLocalFile();
194
- }
195
- }
196
- else {
197
- this.viewLocalFile();
198
- }
199
- }
200
- // // VD 03Aug24 process local preview
201
- viewLocalFile() {
202
- if (this.currentFile) {
203
- this.setFileUrl(this.currentFile?.doc);
204
- this.fileName = this.currentFile.name;
205
- this.isImage = this.currentFile.type?.startsWith('image/');
206
- }
207
- }
208
- handleFileContent(fileResponse) {
209
- const byteArray = new Uint8Array(fileResponse.content.data);
210
- const blob = new Blob([byteArray], { type: fileResponse.type });
211
- const url = window.URL.createObjectURL(blob);
212
- this.setFileUrl(url);
213
- this.isImage = false;
214
- if (fileResponse.name) {
215
- this.fileName = fileResponse.name;
216
- const imageExtensions = ['jpg', 'jpeg', 'png', 'gif', 'bmp', 'webp'];
217
- const fileExtension = fileResponse.name.split('.').pop()?.toLowerCase();
218
- this.isImage = imageExtensions.includes(fileExtension || '');
219
- }
220
- }
221
- setFileUrl(url) {
222
- if (url) {
223
- this.fileUrl = this.sanitizer.bypassSecurityTrustResourceUrl(url);
224
- }
225
- else {
226
- this.fileUrl = null; // or handle gracefully
227
- }
228
- }
229
- getDocIcon(docName) {
230
- const ext = docName.split('.').pop(-1);
231
- return this.SharedService.docIcon(ext);
232
- }
233
- close() {
234
- this.fileName = '';
235
- this.fileUrl = '';
236
- this.isImage = false;
237
- if (this.fileUrl) {
238
- URL.revokeObjectURL(this.fileUrl);
239
- }
240
- }
241
- viewEditClick(ques) {
242
- this.originalValue = this.copyOfInputAllFiles; //SKS13JUN25 Store the original value
243
- this.viewEdit = true; // Enter view edit mode
244
- this.mode = 'edit';
245
- }
246
- saveChanges() {
247
- let ques = this.question;
248
- ques['singleFieldChange'] = true;
249
- this.selectedFileData.emit({ question: ques, value: this.copyOfInputAllFiles });
250
- this.viewEdit = false; // Exit view edit mode
251
- this.mode = 'view'; // Switch back to view mode
252
- }
253
- discardChanges() {
254
- this.copyOfInputAllFiles = this.originalValue; // Revert to original value
255
- this.viewEdit = false; // SKS13JUN25 Exit view edit mode
256
- this.mode = 'view'; // SKS13JUN25 Switch back to view mode
257
- }
258
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FileUploadComponent, deps: [{ token: i1.SharedService }, { token: i2.DataService }, { token: i3.DomSanitizer }, { token: i4.I18nService }], target: i0.ɵɵFactoryTarget.Component });
259
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: FileUploadComponent, isStandalone: true, selector: "app-file-upload", inputs: { allFiles: "allFiles", limitFileUploading: "limitFileUploading", mode: "mode", isShowNoFileIcon: "isShowNoFileIcon", question: "question", error: "error" }, outputs: { selectedFileData: "selectedFileData", deletedFileData: "deletedFileData" }, usesOnChanges: true, ngImport: i0, template: "<!-- SKS11JUN25 file-upload.component.html -->\n<div class=\"flex hover-wrapper\" style=\"align-items: center; gap: 10px;\">\n <div class=\"flex file-inner-div\">\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"\n xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n <rect width=\"24\" height=\"24\" fill=\"url(#pattern0_616_35125)\" />\n <defs>\n <pattern id=\"pattern0_616_35125\" patternContentUnits=\"objectBoundingBox\" width=\"1\" height=\"1\">\n <use xlink:href=\"#image0_616_35125\" transform=\"scale(0.00195312)\" />\n </pattern>\n <image id=\"image0_616_35125\" width=\"512\" height=\"512\" preserveAspectRatio=\"none\"\n xlink:href=\"data:image/png;base64,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\" />\n </defs>\n </svg>\n @if(copyOfInputAllFiles && copyOfInputAllFiles.length > 0){\n <span (click)=\"openPopup()\" style=\"text-decoration: underline; cursor: pointer;\">\n {{ copyOfInputAllFiles.length === 1 ? '1 File Attached' : '+' + copyOfInputAllFiles.length + ' Files Attached' }}\n </span>\n }\n @else if(mode === 'edit') {\n <div> Add files </div>\n }\n @else {\n <div> No files attached</div>\n }\n <button *ngIf=\"mode === 'edit' && !question.isReadOnly\" \n (click)=\"fileInput.click()\" \n class=\"add-btn-icon\"\n type=\"button\">\n <span class=\"plus-icon\">+</span>\n </button>\n\n <input #fileInput type=\"file\" name=\"fileUpload\" multiple=\"multiple\" [accept]=\"allowedFileTypes.join(',')\"\n style=\"display:none;\" (change)=\"uploadMultipleFiles($event)\" />\n </div>\n <!-- SKS13JUN25 edit icon -->\n <svg *ngIf=\"mode !== 'edit' && !viewEdit && !question.isReadOnly\" class=\"edit-icon\" (click)=\"viewEditClick(question)\"\n width=\"13\" height=\"14\" viewBox=\"0 0 13 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\"\n d=\"M1.99987 9.0017L4.39602 11.3979C4.50371 11.5055 4.66525 11.5055 4.77294 11.3979L10.7499 5.39401C10.8576 5.28631 10.8576 5.12477 10.7499 5.01708L8.38064 2.64785C8.27294 2.54016 8.11141 2.54016 8.00371 2.64785L1.99987 8.6517C1.89217 8.75939 1.89217 8.92093 1.99987 9.0017ZM9.1614 1.54401C9.05371 1.6517 9.05371 1.81324 9.1614 1.92093L11.5306 4.29016C11.6383 4.39785 11.7999 4.39785 11.9076 4.29016L12.5806 3.61708C13.0114 3.21324 13.0114 2.56708 12.5806 2.13631L11.3153 0.870928C10.8845 0.440159 10.2114 0.440159 9.78063 0.870928L9.1614 1.54401ZM0.00755862 12.9863C-0.0462875 13.2555 0.19602 13.4979 0.465251 13.444L3.39987 12.744C3.50756 12.7171 3.58833 12.6632 3.64217 12.6094L3.69602 12.5555C3.74987 12.5017 3.77679 12.3132 3.6691 12.2055L1.24602 9.78247C1.13833 9.67478 0.949866 9.7017 0.89602 9.75554L0.842174 9.80939C0.761405 9.89016 0.734482 9.97093 0.707559 10.0517L0.00755862 12.9863Z\"\n fill=\"#B0ADAB\" />\n </svg>\n <!-- SKS13JUN25 save and cancel icons -->\n <div *ngIf=\"viewEdit\" (mouseenter)=\"isSaveHovered = true\" (mouseleave)=\"isSaveHovered = false\"\n style=\"padding-right: 5px;\">\n <svg *ngIf=\"!isSaveHovered\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M5.9502 0.5C8.96006 0.500106 11.4004 2.94031 11.4004 5.9502C11.4003 8.95999 8.95999 11.4003 5.9502 11.4004C2.94031 11.4004 0.500106 8.96006 0.5 5.9502C0.5 2.94024 2.94024 0.5 5.9502 0.5Z\"\n stroke=\"#837F8E\" />\n <path\n d=\"M8.88111 3.84583C8.83269 3.7972 8.77513 3.7586 8.71176 3.73227C8.64838 3.70594 8.58043 3.69238 8.5118 3.69238C8.44317 3.69238 8.37521 3.70594 8.31184 3.73227C8.24846 3.7586 8.19091 3.7972 8.14249 3.84583L4.8269 7.16347L3.35253 5.6891C3.30403 5.6406 3.24646 5.60213 3.18309 5.57588C3.11972 5.54964 3.05181 5.53613 2.98322 5.53613C2.91463 5.53613 2.84672 5.54964 2.78335 5.57588C2.71999 5.60213 2.66241 5.6406 2.61391 5.6891C2.56541 5.7376 2.52694 5.79518 2.50069 5.85854C2.47445 5.92191 2.46094 5.98982 2.46094 6.05841C2.46094 6.127 2.47445 6.19491 2.50069 6.25828C2.52694 6.32165 2.56541 6.37922 2.61391 6.42772L4.45677 8.27058C4.50519 8.31922 4.56274 8.35781 4.62612 8.38414C4.6895 8.41047 4.75745 8.42403 4.82608 8.42403C4.89471 8.42403 4.96266 8.41047 5.02604 8.38414C5.08942 8.35781 5.14697 8.31922 5.19539 8.27058L8.88111 4.58445C8.92974 4.53603 8.96834 4.47848 8.99467 4.4151C9.021 4.35173 9.03456 4.28377 9.03456 4.21514C9.03456 4.14651 9.021 4.07856 8.99467 4.01518C8.96834 3.9518 8.92974 3.89425 8.88111 3.84583Z\"\n fill=\"#837F8E\" />\n </svg>\n\n <svg *ngIf=\"isSaveHovered\" (click)=\"saveChanges()\" width=\"12\" height=\"13\" viewBox=\"0 0 12 13\" fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M5.95 12.8004C9.23609 12.8004 11.9 10.1365 11.9 6.85039C11.9 3.5643 9.23609 0.900391 5.95 0.900391C2.66391 0.900391 0 3.5643 0 6.85039C0 10.1365 2.66391 12.8004 5.95 12.8004Z\"\n fill=\"#259566\" />\n <path\n d=\"M8.88111 4.74622C8.83269 4.69759 8.77513 4.65899 8.71176 4.63266C8.64838 4.60633 8.58043 4.59277 8.5118 4.59277C8.44317 4.59277 8.37521 4.60633 8.31184 4.63266C8.24846 4.65899 8.19091 4.69759 8.14249 4.74622L4.8269 8.06386L3.35253 6.58949C3.30403 6.54099 3.24646 6.50252 3.18309 6.47627C3.11972 6.45003 3.05181 6.43652 2.98322 6.43652C2.91463 6.43652 2.84672 6.45003 2.78335 6.47627C2.71999 6.50252 2.66241 6.54099 2.61391 6.58949C2.56541 6.63799 2.52694 6.69557 2.50069 6.75893C2.47445 6.8223 2.46094 6.89022 2.46094 6.9588C2.46094 7.02739 2.47445 7.09531 2.50069 7.15867C2.52694 7.22204 2.56541 7.27961 2.61391 7.32811L4.45677 9.17097C4.50519 9.21961 4.56274 9.2582 4.62612 9.28453C4.6895 9.31086 4.75745 9.32442 4.82608 9.32442C4.89471 9.32442 4.96266 9.31086 5.02604 9.28453C5.08942 9.2582 5.14697 9.21961 5.19539 9.17097L8.88111 5.48484C8.92974 5.43642 8.96834 5.37887 8.99467 5.31549C9.021 5.25212 9.03456 5.18416 9.03456 5.11553C9.03456 5.0469 9.021 4.97895 8.99467 4.91557C8.96834 4.8522 8.92974 4.79465 8.88111 4.74622Z\"\n fill=\"white\" />\n </svg>\n </div>\n <div *ngIf=\"viewEdit\" (mouseenter)=\"isDiscardHovered = true\" (mouseleave)=\"isDiscardHovered = false\">\n <svg *ngIf=\"!isDiscardHovered\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M7.05555 4.00883L5.94 5.12438L4.82445 4.00883C4.57861 3.76299 4.18191 3.76299 3.93607 4.00883C3.69023 4.25467 3.69023 4.65137 3.93607 4.89721L5.05162 6.01276L3.93607 7.12831C3.69023 7.37415 3.69023 7.77085 3.93607 8.01669C4.18191 8.26253 4.57861 8.26253 4.82445 8.01669L5.94 6.90114L7.05555 8.01669C7.30139 8.26253 7.69809 8.26253 7.94393 8.01669C8.18977 7.77085 8.18977 7.37415 7.94393 7.12831L6.82838 6.01276L7.94393 4.89721C8.18977 4.65137 8.18977 4.25467 7.94393 4.00883C7.69809 3.77285 7.30021 3.77285 7.05555 4.00883ZM5.94 0.0820312C2.70017 0.0820312 0.0808594 2.70134 0.0808594 5.94118C0.0808594 9.18101 2.70017 11.8003 5.94 11.8003C9.17983 11.8003 11.7991 9.18101 11.7991 5.94118C11.7991 2.70134 9.17983 0.0820312 5.94 0.0820312ZM5.94 10.6367C3.35426 10.6367 1.24422 8.52667 1.24422 5.94118C1.24422 3.35553 3.35426 1.24549 5.94 1.24549C8.52558 1.24549 10.6356 3.35553 10.6356 5.94118C10.6356 8.52667 8.52558 10.6367 5.94 10.6367Z\"\n fill=\"#B0ADAB\" />\n </svg>\n\n <svg *ngIf=\"isDiscardHovered\" (click)=\"discardChanges()\" width=\"12\" height=\"13\" viewBox=\"0 0 12 13\" fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M7.05555 4.97471L5.94 6.09026L4.82445 4.97471C4.57861 4.72887 4.18191 4.72887 3.93607 4.97471C3.69023 5.22055 3.69023 5.61725 3.93607 5.86309L5.05162 6.97864L3.93607 8.09419C3.69023 8.34003 3.69023 8.73673 3.93607 8.98257C4.18191 9.22841 4.57861 9.22841 4.82445 8.98257L5.94 7.86702L7.05555 8.98257C7.30139 9.22841 7.69809 9.22841 7.94393 8.98257C8.18977 8.73673 8.18977 8.34003 7.94393 8.09419L6.82838 6.97864L7.94393 5.86309C8.18977 5.61725 8.18977 5.22055 7.94393 4.97471C7.69809 4.73873 7.30021 4.73873 7.05555 4.97471ZM5.94 1.06062C2.70017 1.06062 0.0808594 3.67993 0.0808594 6.91977C0.0808594 10.1596 2.70017 12.7789 5.94 12.7789C9.17983 12.7789 11.7991 10.1596 11.7991 6.91977C11.7991 3.67993 9.17983 1.06062 5.94 1.06062ZM5.94 11.6153C3.35426 11.6153 1.24422 9.50525 1.24422 6.91977C1.24422 4.33412 3.35426 2.22408 5.94 2.22408C8.52558 2.22408 10.6356 4.33412 10.6356 6.91977C10.6356 9.50525 8.52558 11.6153 5.94 11.6153Z\"\n fill=\"#FF3636\" />\n </svg>\n </div>\n</div>\n\n<div class=\"col-lg-6\" style=\"padding:0;margin-top: 10px;\">\n <!-- Error messages section -->\n <div class=\"file-constraints\" *ngIf=\"validationErrors.length > 0\">\n <small class=\"text-danger\">\n <div *ngFor=\"let error of validationErrors\">{{ error }}</div>\n </small>\n </div>\n</div>\n\n<div *ngIf=\"error\" class=\"error-msg\" style=\"margin-top: 10px;\">{{question?.errorMessage}}</div>\n\n<!-- SKS11JUN25 File Selection Popup Modal -->\n<div class=\"file-popup-overlay\" *ngIf=\"showPopup\" (click)=\"closePopup()\">\n <div class=\"file-popup-modal\" (click)=\"$event.stopPropagation()\">\n <!-- Header -->\n <div class=\"file-popup-header\">\n <div class=\"popup-title\">{{question.questionText}}</div>\n <button class=\"close-btn\" (click)=\"closePopup()\">\n <span class=\"close-icon\">\u00D7</span>\n </button>\n </div>\n\n <!-- SKS11JUN25 Content -->\n <div class=\"file-popup-content\">\n <!-- SKS11JUN25 Left Panel - File List -->\n <div class=\"file-list-panel\">\n <div class=\"file-item\" *ngFor=\"let file of copyOfInputAllFiles; let i = index\"\n [class.selected]=\"currentFile === file\" (click)=\"viewFile(file)\">\n <div class=\"file-icon\">\n <img style=\"width: 28px;height: 28px;\" [src]=\"getDocIcon(file?.name)\">\n </div>\n <div class=\"file-details\">\n <div class=\"file-name\">{{ file.name }}</div>\n </div>\n <div *ngIf=\"!question.isReadOnly\" class=\"file-actions\">\n <button class=\"action-btn\" (click)=\"$event.stopPropagation(); deleteFile(i)\" title=\"Delete\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n <polyline points=\"3,6 5,6 21,6\"></polyline>\n <path d=\"m19,6v14a2,2 0 0,1 -2,2H7a2,2 0 0,1 -2,-2V6m3,0V4a2,2 0 0,1 2,-2h4a2,2 0 0,1 2,2v2\"></path>\n </svg>\n </button>\n </div>\n </div>\n\n <!-- Empty state -->\n <div class=\"empty-state\" *ngIf=\"!copyOfInputAllFiles || copyOfInputAllFiles.length === 0\">\n <div class=\"empty-icon\">\uD83D\uDCC4</div>\n <p>No files selected</p>\n </div>\n <!-- Add Button -->\n <button class=\"add-btn\" (click)=\"fileInput.click()\" title=\"Add file\">\n + Add More Files\n </button>\n </div>\n\n <!-- SKS11JUN25 Right Panel - Preview -->\n <div class=\"file-preview-panel\">\n @if(currentFile){\n <div class=\"preview-content\">\n @if(isImage && fileUrl){\n <img [src]=\"fileUrl\" class=\"preview-image\" alt=\"File Preview\" />\n }\n @else if(fileUrl){\n <iframe [src]=\"fileUrl\" width=\"100%\" height=\"500px\"></iframe>\n }\n @else if(isLoading){\n <div class=\"loading-indicator\">\n <p>Loading preview...</p>\n <div class=\"spinner\"></div>\n </div>\n }\n @else {\n <div>Unable to load the file preview.</div>\n }\n </div>\n }\n @else{\n <div class=\"no-preview\">\n <p>Select a file to preview</p>\n </div>\n }\n </div>\n </div>\n </div>\n</div>", styles: [".document-cnt{padding:10px;border:1px solid #ccc;border-radius:5px;background-color:#f9f9f9;margin-bottom:10px;cursor:pointer;transition:background-color .3s ease;position:relative}.document-cnt:hover{background-color:#e9ecef}.document_image img{width:30px;height:30px}.document_name{font-size:14px;font-weight:700;color:#333;line-height:30px}.label{margin-bottom:0}.document_delete img,.preview-icon img{width:20px;height:20px;cursor:pointer;transition:transform .3s ease}.document_delete img{filter:brightness(0) saturate(100%) invert(20%) sepia(97%) saturate(7481%) hue-rotate(357deg) brightness(98%) contrast(119%)}.document_delete img:hover,.preview-icon img:hover{transform:scale(1.1)}.document_delete,.preview-icon{position:absolute;top:50%;transform:translateY(-50%)}.document_delete{right:10px}.preview-icon{right:40px}@media (min-width: 992px){.document-cnt{margin-left:10px}}.form-control[disabled]{border-radius:5px}.btn-primary{background-color:#03a9f4!important;border:1px solid #03a9f4!important;color:#fff!important}.btn.btn-primary{border-radius:2px;padding:6px 14px;font-size:14px}.Invalid{border:1px solid red!important}.close-button{background:none;border:none;font-size:1.5em;cursor:pointer}.img-fluid{max-width:100%;height:auto;flex:1}iframe{border:none}.file-popup-overlay{position:fixed;top:0;left:0;width:100%;height:100%;background-color:#00000080;display:flex;justify-content:center;align-items:center;z-index:1001}.file-popup-modal{background:#fff;border-radius:12px;width:90%;max-width:1000px;height:80%;max-height:600px;display:flex;flex-direction:column;box-shadow:0 20px 40px #0000001a;overflow:hidden}.file-popup-header{display:flex;justify-content:space-between;align-items:center;padding:8px;border-bottom:1px solid #e5e7eb;background-color:#fafafa}.popup-title{font-size:16px;font-weight:600;color:#111827;margin:0}.close-btn{background:none;border:none;width:32px;height:32px;border-radius:6px;display:flex;align-items:center;justify-content:center;cursor:pointer;transition:background-color .2s}.close-btn:hover{background-color:#f3f4f6}.close-icon{font-size:24px;color:#6b7280;line-height:1}.file-popup-content{display:flex;flex:1;overflow:hidden}.file-list-panel{width:300px;border-right:1px solid #e5e7eb;background-color:#fff;overflow-y:auto;padding:16px 16px 60px;position:relative}.file-item{display:flex;align-items:center;padding:12px 16px;border-radius:8px;cursor:pointer;transition:background-color .2s;margin-bottom:8px;border:1px solid #dfe0e2;background-color:#fff}.file-item:hover{background-color:#f8fafc;border-color:#e2e8f0}.file-item.selected{background-color:#dbeafe;border-color:#3b82f6}.file-icon{margin-right:12px;flex-shrink:0}.file-details{flex:1;min-width:0}.file-name{font-size:14px;font-weight:500;color:#111827;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;margin-bottom:2px}.file-actions{margin-left:8px}.action-btn{background:none;border:none;padding:4px;border-radius:4px;cursor:pointer;color:#6b7280;transition:all .2s}.action-btn:hover{background-color:#fef2f2;color:#dc2626}.file-preview-panel{flex:1;background-color:#f9fafb;display:flex;align-items:center;justify-content:center;padding:32px}.preview-content{width:100%;height:100%;display:flex;align-items:center;justify-content:center}.preview-image{max-width:100%;max-height:100%;border-radius:8px;box-shadow:0 4px 6px #0000001a}.no-preview{text-align:center;color:#6b7280}.empty-state{text-align:center;padding:32px 16px;color:#6b7280}.empty-icon{font-size:48px;margin-bottom:16px;opacity:.5}.empty-state p{margin:0;font-size:14px}@media (max-width: 768px){.file-list-panel{padding-bottom:70px;width:100%}.add-btn{bottom:12px;left:12px;right:12px}.file-popup-modal{width:95%;height:85%}.file-popup-content{flex-direction:column}.file-preview-panel{flex:1;min-height:200px}}.edit-icon{display:none;cursor:pointer}.hover-wrapper:hover .edit-icon{display:block}.file-inner-div{width:100%;padding:10px 10px 10px 5px;border-radius:5px;border:none;font-size:14px;align-items:center;gap:5px}.loading-indicator{display:flex;flex-direction:column;align-items:center;justify-content:center;height:200px;color:#555}.spinner{margin-top:10px;border:4px solid #f3f3f3;border-top:4px solid #007bff;border-radius:50%;width:30px;height:30px;animation:spin 1s linear infinite}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.add-btn{position:absolute;bottom:16px;left:16px;right:16px;background-color:#007bff;color:#fff;border:none;padding:12px 16px;font-size:14px;border-radius:6px;cursor:pointer;box-shadow:0 2px 6px #0003;transition:background-color .2s;z-index:10}.add-btn:hover{background-color:#0056b3}.add-btn-icon{width:25px;height:25px;border-radius:50%;border:none;background:#007bff;color:#fff;cursor:pointer;display:flex;align-items:center;justify-content:center;transition:all .3s ease;position:relative;overflow:hidden}.add-btn-icon:focus{outline:none!important}.add-btn-icon:hover{transform:scale(1.1);border:none}.add-btn-icon:active{transform:scale(.95)}.plus-icon{font-size:15px;font-weight:700;line-height:1;transition:transform .2s ease}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
260
- }
261
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FileUploadComponent, decorators: [{
262
- type: Component,
263
- args: [{ selector: 'app-file-upload', standalone: true, imports: [
264
- CommonModule, I18nPipe
265
- ], template: "<!-- SKS11JUN25 file-upload.component.html -->\n<div class=\"flex hover-wrapper\" style=\"align-items: center; gap: 10px;\">\n <div class=\"flex file-inner-div\">\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"\n xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n <rect width=\"24\" height=\"24\" fill=\"url(#pattern0_616_35125)\" />\n <defs>\n <pattern id=\"pattern0_616_35125\" patternContentUnits=\"objectBoundingBox\" width=\"1\" height=\"1\">\n <use xlink:href=\"#image0_616_35125\" transform=\"scale(0.00195312)\" />\n </pattern>\n <image id=\"image0_616_35125\" width=\"512\" height=\"512\" preserveAspectRatio=\"none\"\n xlink:href=\"data:image/png;base64,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\" />\n </defs>\n </svg>\n @if(copyOfInputAllFiles && copyOfInputAllFiles.length > 0){\n <span (click)=\"openPopup()\" style=\"text-decoration: underline; cursor: pointer;\">\n {{ copyOfInputAllFiles.length === 1 ? '1 File Attached' : '+' + copyOfInputAllFiles.length + ' Files Attached' }}\n </span>\n }\n @else if(mode === 'edit') {\n <div> Add files </div>\n }\n @else {\n <div> No files attached</div>\n }\n <button *ngIf=\"mode === 'edit' && !question.isReadOnly\" \n (click)=\"fileInput.click()\" \n class=\"add-btn-icon\"\n type=\"button\">\n <span class=\"plus-icon\">+</span>\n </button>\n\n <input #fileInput type=\"file\" name=\"fileUpload\" multiple=\"multiple\" [accept]=\"allowedFileTypes.join(',')\"\n style=\"display:none;\" (change)=\"uploadMultipleFiles($event)\" />\n </div>\n <!-- SKS13JUN25 edit icon -->\n <svg *ngIf=\"mode !== 'edit' && !viewEdit && !question.isReadOnly\" class=\"edit-icon\" (click)=\"viewEditClick(question)\"\n width=\"13\" height=\"14\" viewBox=\"0 0 13 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\"\n d=\"M1.99987 9.0017L4.39602 11.3979C4.50371 11.5055 4.66525 11.5055 4.77294 11.3979L10.7499 5.39401C10.8576 5.28631 10.8576 5.12477 10.7499 5.01708L8.38064 2.64785C8.27294 2.54016 8.11141 2.54016 8.00371 2.64785L1.99987 8.6517C1.89217 8.75939 1.89217 8.92093 1.99987 9.0017ZM9.1614 1.54401C9.05371 1.6517 9.05371 1.81324 9.1614 1.92093L11.5306 4.29016C11.6383 4.39785 11.7999 4.39785 11.9076 4.29016L12.5806 3.61708C13.0114 3.21324 13.0114 2.56708 12.5806 2.13631L11.3153 0.870928C10.8845 0.440159 10.2114 0.440159 9.78063 0.870928L9.1614 1.54401ZM0.00755862 12.9863C-0.0462875 13.2555 0.19602 13.4979 0.465251 13.444L3.39987 12.744C3.50756 12.7171 3.58833 12.6632 3.64217 12.6094L3.69602 12.5555C3.74987 12.5017 3.77679 12.3132 3.6691 12.2055L1.24602 9.78247C1.13833 9.67478 0.949866 9.7017 0.89602 9.75554L0.842174 9.80939C0.761405 9.89016 0.734482 9.97093 0.707559 10.0517L0.00755862 12.9863Z\"\n fill=\"#B0ADAB\" />\n </svg>\n <!-- SKS13JUN25 save and cancel icons -->\n <div *ngIf=\"viewEdit\" (mouseenter)=\"isSaveHovered = true\" (mouseleave)=\"isSaveHovered = false\"\n style=\"padding-right: 5px;\">\n <svg *ngIf=\"!isSaveHovered\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M5.9502 0.5C8.96006 0.500106 11.4004 2.94031 11.4004 5.9502C11.4003 8.95999 8.95999 11.4003 5.9502 11.4004C2.94031 11.4004 0.500106 8.96006 0.5 5.9502C0.5 2.94024 2.94024 0.5 5.9502 0.5Z\"\n stroke=\"#837F8E\" />\n <path\n d=\"M8.88111 3.84583C8.83269 3.7972 8.77513 3.7586 8.71176 3.73227C8.64838 3.70594 8.58043 3.69238 8.5118 3.69238C8.44317 3.69238 8.37521 3.70594 8.31184 3.73227C8.24846 3.7586 8.19091 3.7972 8.14249 3.84583L4.8269 7.16347L3.35253 5.6891C3.30403 5.6406 3.24646 5.60213 3.18309 5.57588C3.11972 5.54964 3.05181 5.53613 2.98322 5.53613C2.91463 5.53613 2.84672 5.54964 2.78335 5.57588C2.71999 5.60213 2.66241 5.6406 2.61391 5.6891C2.56541 5.7376 2.52694 5.79518 2.50069 5.85854C2.47445 5.92191 2.46094 5.98982 2.46094 6.05841C2.46094 6.127 2.47445 6.19491 2.50069 6.25828C2.52694 6.32165 2.56541 6.37922 2.61391 6.42772L4.45677 8.27058C4.50519 8.31922 4.56274 8.35781 4.62612 8.38414C4.6895 8.41047 4.75745 8.42403 4.82608 8.42403C4.89471 8.42403 4.96266 8.41047 5.02604 8.38414C5.08942 8.35781 5.14697 8.31922 5.19539 8.27058L8.88111 4.58445C8.92974 4.53603 8.96834 4.47848 8.99467 4.4151C9.021 4.35173 9.03456 4.28377 9.03456 4.21514C9.03456 4.14651 9.021 4.07856 8.99467 4.01518C8.96834 3.9518 8.92974 3.89425 8.88111 3.84583Z\"\n fill=\"#837F8E\" />\n </svg>\n\n <svg *ngIf=\"isSaveHovered\" (click)=\"saveChanges()\" width=\"12\" height=\"13\" viewBox=\"0 0 12 13\" fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M5.95 12.8004C9.23609 12.8004 11.9 10.1365 11.9 6.85039C11.9 3.5643 9.23609 0.900391 5.95 0.900391C2.66391 0.900391 0 3.5643 0 6.85039C0 10.1365 2.66391 12.8004 5.95 12.8004Z\"\n fill=\"#259566\" />\n <path\n d=\"M8.88111 4.74622C8.83269 4.69759 8.77513 4.65899 8.71176 4.63266C8.64838 4.60633 8.58043 4.59277 8.5118 4.59277C8.44317 4.59277 8.37521 4.60633 8.31184 4.63266C8.24846 4.65899 8.19091 4.69759 8.14249 4.74622L4.8269 8.06386L3.35253 6.58949C3.30403 6.54099 3.24646 6.50252 3.18309 6.47627C3.11972 6.45003 3.05181 6.43652 2.98322 6.43652C2.91463 6.43652 2.84672 6.45003 2.78335 6.47627C2.71999 6.50252 2.66241 6.54099 2.61391 6.58949C2.56541 6.63799 2.52694 6.69557 2.50069 6.75893C2.47445 6.8223 2.46094 6.89022 2.46094 6.9588C2.46094 7.02739 2.47445 7.09531 2.50069 7.15867C2.52694 7.22204 2.56541 7.27961 2.61391 7.32811L4.45677 9.17097C4.50519 9.21961 4.56274 9.2582 4.62612 9.28453C4.6895 9.31086 4.75745 9.32442 4.82608 9.32442C4.89471 9.32442 4.96266 9.31086 5.02604 9.28453C5.08942 9.2582 5.14697 9.21961 5.19539 9.17097L8.88111 5.48484C8.92974 5.43642 8.96834 5.37887 8.99467 5.31549C9.021 5.25212 9.03456 5.18416 9.03456 5.11553C9.03456 5.0469 9.021 4.97895 8.99467 4.91557C8.96834 4.8522 8.92974 4.79465 8.88111 4.74622Z\"\n fill=\"white\" />\n </svg>\n </div>\n <div *ngIf=\"viewEdit\" (mouseenter)=\"isDiscardHovered = true\" (mouseleave)=\"isDiscardHovered = false\">\n <svg *ngIf=\"!isDiscardHovered\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M7.05555 4.00883L5.94 5.12438L4.82445 4.00883C4.57861 3.76299 4.18191 3.76299 3.93607 4.00883C3.69023 4.25467 3.69023 4.65137 3.93607 4.89721L5.05162 6.01276L3.93607 7.12831C3.69023 7.37415 3.69023 7.77085 3.93607 8.01669C4.18191 8.26253 4.57861 8.26253 4.82445 8.01669L5.94 6.90114L7.05555 8.01669C7.30139 8.26253 7.69809 8.26253 7.94393 8.01669C8.18977 7.77085 8.18977 7.37415 7.94393 7.12831L6.82838 6.01276L7.94393 4.89721C8.18977 4.65137 8.18977 4.25467 7.94393 4.00883C7.69809 3.77285 7.30021 3.77285 7.05555 4.00883ZM5.94 0.0820312C2.70017 0.0820312 0.0808594 2.70134 0.0808594 5.94118C0.0808594 9.18101 2.70017 11.8003 5.94 11.8003C9.17983 11.8003 11.7991 9.18101 11.7991 5.94118C11.7991 2.70134 9.17983 0.0820312 5.94 0.0820312ZM5.94 10.6367C3.35426 10.6367 1.24422 8.52667 1.24422 5.94118C1.24422 3.35553 3.35426 1.24549 5.94 1.24549C8.52558 1.24549 10.6356 3.35553 10.6356 5.94118C10.6356 8.52667 8.52558 10.6367 5.94 10.6367Z\"\n fill=\"#B0ADAB\" />\n </svg>\n\n <svg *ngIf=\"isDiscardHovered\" (click)=\"discardChanges()\" width=\"12\" height=\"13\" viewBox=\"0 0 12 13\" fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M7.05555 4.97471L5.94 6.09026L4.82445 4.97471C4.57861 4.72887 4.18191 4.72887 3.93607 4.97471C3.69023 5.22055 3.69023 5.61725 3.93607 5.86309L5.05162 6.97864L3.93607 8.09419C3.69023 8.34003 3.69023 8.73673 3.93607 8.98257C4.18191 9.22841 4.57861 9.22841 4.82445 8.98257L5.94 7.86702L7.05555 8.98257C7.30139 9.22841 7.69809 9.22841 7.94393 8.98257C8.18977 8.73673 8.18977 8.34003 7.94393 8.09419L6.82838 6.97864L7.94393 5.86309C8.18977 5.61725 8.18977 5.22055 7.94393 4.97471C7.69809 4.73873 7.30021 4.73873 7.05555 4.97471ZM5.94 1.06062C2.70017 1.06062 0.0808594 3.67993 0.0808594 6.91977C0.0808594 10.1596 2.70017 12.7789 5.94 12.7789C9.17983 12.7789 11.7991 10.1596 11.7991 6.91977C11.7991 3.67993 9.17983 1.06062 5.94 1.06062ZM5.94 11.6153C3.35426 11.6153 1.24422 9.50525 1.24422 6.91977C1.24422 4.33412 3.35426 2.22408 5.94 2.22408C8.52558 2.22408 10.6356 4.33412 10.6356 6.91977C10.6356 9.50525 8.52558 11.6153 5.94 11.6153Z\"\n fill=\"#FF3636\" />\n </svg>\n </div>\n</div>\n\n<div class=\"col-lg-6\" style=\"padding:0;margin-top: 10px;\">\n <!-- Error messages section -->\n <div class=\"file-constraints\" *ngIf=\"validationErrors.length > 0\">\n <small class=\"text-danger\">\n <div *ngFor=\"let error of validationErrors\">{{ error }}</div>\n </small>\n </div>\n</div>\n\n<div *ngIf=\"error\" class=\"error-msg\" style=\"margin-top: 10px;\">{{question?.errorMessage}}</div>\n\n<!-- SKS11JUN25 File Selection Popup Modal -->\n<div class=\"file-popup-overlay\" *ngIf=\"showPopup\" (click)=\"closePopup()\">\n <div class=\"file-popup-modal\" (click)=\"$event.stopPropagation()\">\n <!-- Header -->\n <div class=\"file-popup-header\">\n <div class=\"popup-title\">{{question.questionText}}</div>\n <button class=\"close-btn\" (click)=\"closePopup()\">\n <span class=\"close-icon\">\u00D7</span>\n </button>\n </div>\n\n <!-- SKS11JUN25 Content -->\n <div class=\"file-popup-content\">\n <!-- SKS11JUN25 Left Panel - File List -->\n <div class=\"file-list-panel\">\n <div class=\"file-item\" *ngFor=\"let file of copyOfInputAllFiles; let i = index\"\n [class.selected]=\"currentFile === file\" (click)=\"viewFile(file)\">\n <div class=\"file-icon\">\n <img style=\"width: 28px;height: 28px;\" [src]=\"getDocIcon(file?.name)\">\n </div>\n <div class=\"file-details\">\n <div class=\"file-name\">{{ file.name }}</div>\n </div>\n <div *ngIf=\"!question.isReadOnly\" class=\"file-actions\">\n <button class=\"action-btn\" (click)=\"$event.stopPropagation(); deleteFile(i)\" title=\"Delete\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n <polyline points=\"3,6 5,6 21,6\"></polyline>\n <path d=\"m19,6v14a2,2 0 0,1 -2,2H7a2,2 0 0,1 -2,-2V6m3,0V4a2,2 0 0,1 2,-2h4a2,2 0 0,1 2,2v2\"></path>\n </svg>\n </button>\n </div>\n </div>\n\n <!-- Empty state -->\n <div class=\"empty-state\" *ngIf=\"!copyOfInputAllFiles || copyOfInputAllFiles.length === 0\">\n <div class=\"empty-icon\">\uD83D\uDCC4</div>\n <p>No files selected</p>\n </div>\n <!-- Add Button -->\n <button class=\"add-btn\" (click)=\"fileInput.click()\" title=\"Add file\">\n + Add More Files\n </button>\n </div>\n\n <!-- SKS11JUN25 Right Panel - Preview -->\n <div class=\"file-preview-panel\">\n @if(currentFile){\n <div class=\"preview-content\">\n @if(isImage && fileUrl){\n <img [src]=\"fileUrl\" class=\"preview-image\" alt=\"File Preview\" />\n }\n @else if(fileUrl){\n <iframe [src]=\"fileUrl\" width=\"100%\" height=\"500px\"></iframe>\n }\n @else if(isLoading){\n <div class=\"loading-indicator\">\n <p>Loading preview...</p>\n <div class=\"spinner\"></div>\n </div>\n }\n @else {\n <div>Unable to load the file preview.</div>\n }\n </div>\n }\n @else{\n <div class=\"no-preview\">\n <p>Select a file to preview</p>\n </div>\n }\n </div>\n </div>\n </div>\n</div>", styles: [".document-cnt{padding:10px;border:1px solid #ccc;border-radius:5px;background-color:#f9f9f9;margin-bottom:10px;cursor:pointer;transition:background-color .3s ease;position:relative}.document-cnt:hover{background-color:#e9ecef}.document_image img{width:30px;height:30px}.document_name{font-size:14px;font-weight:700;color:#333;line-height:30px}.label{margin-bottom:0}.document_delete img,.preview-icon img{width:20px;height:20px;cursor:pointer;transition:transform .3s ease}.document_delete img{filter:brightness(0) saturate(100%) invert(20%) sepia(97%) saturate(7481%) hue-rotate(357deg) brightness(98%) contrast(119%)}.document_delete img:hover,.preview-icon img:hover{transform:scale(1.1)}.document_delete,.preview-icon{position:absolute;top:50%;transform:translateY(-50%)}.document_delete{right:10px}.preview-icon{right:40px}@media (min-width: 992px){.document-cnt{margin-left:10px}}.form-control[disabled]{border-radius:5px}.btn-primary{background-color:#03a9f4!important;border:1px solid #03a9f4!important;color:#fff!important}.btn.btn-primary{border-radius:2px;padding:6px 14px;font-size:14px}.Invalid{border:1px solid red!important}.close-button{background:none;border:none;font-size:1.5em;cursor:pointer}.img-fluid{max-width:100%;height:auto;flex:1}iframe{border:none}.file-popup-overlay{position:fixed;top:0;left:0;width:100%;height:100%;background-color:#00000080;display:flex;justify-content:center;align-items:center;z-index:1001}.file-popup-modal{background:#fff;border-radius:12px;width:90%;max-width:1000px;height:80%;max-height:600px;display:flex;flex-direction:column;box-shadow:0 20px 40px #0000001a;overflow:hidden}.file-popup-header{display:flex;justify-content:space-between;align-items:center;padding:8px;border-bottom:1px solid #e5e7eb;background-color:#fafafa}.popup-title{font-size:16px;font-weight:600;color:#111827;margin:0}.close-btn{background:none;border:none;width:32px;height:32px;border-radius:6px;display:flex;align-items:center;justify-content:center;cursor:pointer;transition:background-color .2s}.close-btn:hover{background-color:#f3f4f6}.close-icon{font-size:24px;color:#6b7280;line-height:1}.file-popup-content{display:flex;flex:1;overflow:hidden}.file-list-panel{width:300px;border-right:1px solid #e5e7eb;background-color:#fff;overflow-y:auto;padding:16px 16px 60px;position:relative}.file-item{display:flex;align-items:center;padding:12px 16px;border-radius:8px;cursor:pointer;transition:background-color .2s;margin-bottom:8px;border:1px solid #dfe0e2;background-color:#fff}.file-item:hover{background-color:#f8fafc;border-color:#e2e8f0}.file-item.selected{background-color:#dbeafe;border-color:#3b82f6}.file-icon{margin-right:12px;flex-shrink:0}.file-details{flex:1;min-width:0}.file-name{font-size:14px;font-weight:500;color:#111827;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;margin-bottom:2px}.file-actions{margin-left:8px}.action-btn{background:none;border:none;padding:4px;border-radius:4px;cursor:pointer;color:#6b7280;transition:all .2s}.action-btn:hover{background-color:#fef2f2;color:#dc2626}.file-preview-panel{flex:1;background-color:#f9fafb;display:flex;align-items:center;justify-content:center;padding:32px}.preview-content{width:100%;height:100%;display:flex;align-items:center;justify-content:center}.preview-image{max-width:100%;max-height:100%;border-radius:8px;box-shadow:0 4px 6px #0000001a}.no-preview{text-align:center;color:#6b7280}.empty-state{text-align:center;padding:32px 16px;color:#6b7280}.empty-icon{font-size:48px;margin-bottom:16px;opacity:.5}.empty-state p{margin:0;font-size:14px}@media (max-width: 768px){.file-list-panel{padding-bottom:70px;width:100%}.add-btn{bottom:12px;left:12px;right:12px}.file-popup-modal{width:95%;height:85%}.file-popup-content{flex-direction:column}.file-preview-panel{flex:1;min-height:200px}}.edit-icon{display:none;cursor:pointer}.hover-wrapper:hover .edit-icon{display:block}.file-inner-div{width:100%;padding:10px 10px 10px 5px;border-radius:5px;border:none;font-size:14px;align-items:center;gap:5px}.loading-indicator{display:flex;flex-direction:column;align-items:center;justify-content:center;height:200px;color:#555}.spinner{margin-top:10px;border:4px solid #f3f3f3;border-top:4px solid #007bff;border-radius:50%;width:30px;height:30px;animation:spin 1s linear infinite}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.add-btn{position:absolute;bottom:16px;left:16px;right:16px;background-color:#007bff;color:#fff;border:none;padding:12px 16px;font-size:14px;border-radius:6px;cursor:pointer;box-shadow:0 2px 6px #0003;transition:background-color .2s;z-index:10}.add-btn:hover{background-color:#0056b3}.add-btn-icon{width:25px;height:25px;border-radius:50%;border:none;background:#007bff;color:#fff;cursor:pointer;display:flex;align-items:center;justify-content:center;transition:all .3s ease;position:relative;overflow:hidden}.add-btn-icon:focus{outline:none!important}.add-btn-icon:hover{transform:scale(1.1);border:none}.add-btn-icon:active{transform:scale(.95)}.plus-icon{font-size:15px;font-weight:700;line-height:1;transition:transform .2s ease}\n"] }]
266
- }], ctorParameters: () => [{ type: i1.SharedService }, { type: i2.DataService }, { type: i3.DomSanitizer }, { type: i4.I18nService }], propDecorators: { selectedFileData: [{
267
- type: Output
268
- }], deletedFileData: [{
269
- type: Output
270
- }], allFiles: [{
271
- type: Input
272
- }], limitFileUploading: [{
273
- type: Input
274
- }], mode: [{
275
- type: Input
276
- }], isShowNoFileIcon: [{
277
- type: Input
278
- }], question: [{
279
- type: Input
280
- }], error: [{
281
- type: Input
282
- }] } });
283
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS11cGxvYWQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbnh0LWFwcC9zcmMvbGliL2NvbXBvbmVudHMvZmlsZS11cGxvYWQvZmlsZS11cGxvYWQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbnh0LWFwcC9zcmMvbGliL2NvbXBvbmVudHMvZmlsZS11cGxvYWQvZmlsZS11cGxvYWQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBVSxNQUFNLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBd0MsTUFBTSxlQUFlLENBQUM7QUFNckgsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzQyxPQUFPLEVBQUUsVUFBVSxFQUFFLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQzs7Ozs7OztBQVV0QyxNQUFNLE9BQU8sbUJBQW1CO0lBOEJWO0lBQXNDO0lBQWtDO0lBQ25GO0lBOUJDLGdCQUFnQixHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7SUFDM0MsZUFBZSxHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7SUFDM0MsUUFBUSxDQUFDO0lBQ1Qsa0JBQWtCLENBQUM7SUFDbkIsSUFBSSxHQUE4QixNQUFNLENBQUMsQ0FBQyw0QkFBNEI7SUFDdEUsZ0JBQWdCLENBQUM7SUFDakIsUUFBUSxDQUFDO0lBQ1QsS0FBSyxDQUFNO0lBQ3BCLGNBQWM7SUFDUCxnQkFBZ0IsR0FBYSxFQUFFLENBQUM7SUFDaEMsV0FBVyxHQUFXLENBQUMsQ0FBQyxDQUFFLG1CQUFtQjtJQUM3QyxRQUFRLEdBQVcsQ0FBQyxDQUFDLENBQUssZ0JBQWdCO0lBQzFDLGdCQUFnQixHQUFhLEVBQUUsQ0FBQztJQUdoQyxxQkFBcUIsR0FB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SUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxFQUFDLFFBQVEsRUFBRyxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxtQkFBbUIsRUFBQyxDQUFDLENBQUM7UUFDL0UsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUMsQ0FBQyxzQkFBc0I7UUFDN0MsSUFBSSxDQUFDLElBQUksR0FBRyxNQUFNLENBQUMsQ0FBQywyQkFBMkI7SUFDakQsQ0FBQztJQUNELGNBQWM7UUFDWixJQUFJLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLDJCQUEyQjtRQUMxRSxJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQyxDQUFDLGlDQUFpQztRQUN4RCxJQUFJLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQyxDQUFDLHNDQUFzQztJQUM1RCxDQUFDO3dHQXZRVSxtQkFBbUI7NEZBQW5CLG1CQUFtQiw2VkNsQmhDLDJtNEJBc0tNLHNpS0R6SkYsWUFBWTs7NEZBS0gsbUJBQW1CO2tCQVQvQixTQUFTOytCQUNFLGlCQUFpQixjQUNmLElBQUksV0FDUDt3QkFDUCxZQUFZLEVBQUUsUUFBUTtxQkFDdkI7aUtBS1MsZ0JBQWdCO3NCQUF6QixNQUFNO2dCQUNHLGVBQWU7c0JBQXhCLE1BQU07Z0JBQ0UsUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxrQkFBa0I7c0JBQTFCLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBPdXRwdXQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIEVsZW1lbnRSZWYsIE9uQ2hhbmdlcywgU2ltcGxlQ2hhbmdlcyB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuLy8gSEEgMTlERUMyMyBpbXBvcnRlZCB0cmFuc2xhdGlvbiBzZXJ2aWNlXG5pbXBvcnQgeyBJMThuU2VydmljZSB9IGZyb20gJy4uLy4uL2kxOG4uc2VydmljZSc7XG5pbXBvcnQgeyBTaGFyZWRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvc2hhcmVkLnNlcnZpY2UnO1xuaW1wb3J0IHsgRGF0YVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9kYXRhLnNlcnZpY2UnO1xuaW1wb3J0IHsgRG9tU2FuaXRpemVyIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgSTE4blBpcGUgfSBmcm9tICcuLi8uLi9pMThuLnBpcGUnO1xuaW1wb3J0IHsgY2F0Y2hFcnJvciwgb2YgfSBmcm9tICdyeGpzJztcbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FwcC1maWxlLXVwbG9hZCcsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBDb21tb25Nb2R1bGUsIEkxOG5QaXBlXG4gIF0sXG4gIHRlbXBsYXRlVXJsOiAnLi9maWxlLXVwbG9hZC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2ZpbGUtdXBsb2FkLmNvbXBvbmVudC5jc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBGaWxlVXBsb2FkQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMge1xuICBAT3V0cHV0KCkgc2VsZWN0ZWRGaWxlRGF0YSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCkgZGVsZXRlZEZpbGVEYXRhID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBJbnB1dCgpIGFsbEZpbGVzO1xuICBASW5wdXQoKSBsaW1pdEZpbGVVcGxvYWRpbmc7XG4gIEBJbnB1dCgpIG1vZGU6ICd2aWV3JyB8ICdlZGl0JyB8ICdwcmludCcgPSAnZWRpdCc7IC8vIFNLUzExSlVOMjUgTmV3IG1vZGUgaW5wdXRcbiAgQElucHV0KCkgaXNTaG93Tm9GaWxlSWNvbjtcbiAgQElucHV0KCkgcXVlc3Rpb247XG4gIEBJbnB1dCgpIGVycm9yOiBhbnk7XG4gIC8vUlMgMDlKQU4yMDI1XG4gIHB1YmxpYyBhbGxvd2VkRmlsZVR5cGVzOiBzdHJpbmdbXSA9IFtdO1xuICBwdWJsaWMgbWF4RmlsZVNpemU6IG51bWJlciA9IDA7ICAvLyBpbiBieXRlcyhCaW5hcnkpXG4gIHB1YmxpYyBtYXhGaWxlczogbnVtYmVyID0gNDsgICAgIC8vIGRlZmF1bHQgbGltaXRcbiAgcHVibGljIHZhbGlkYXRpb25FcnJvcnM6IHN0cmluZ1tdID0gW107XG5cblxuICBwdWJsaWMgc2VsZWN0ZWRGaWxlTmFtZUFycmF5OiBzdHJpbmdbXSA9IFtdO1xuICBwdWJsaWMgY29weU9mSW5wdXRBbGxGaWxlcztcbiAgcHVibGljIGNvcHlPZkZpbGVVcGxvYWRpbmdMaW1pdDtcbiAgcHVibGljIGZpbGVVcmw7XG4gIHB1YmxpYyBpc0ltYWdlID0gZmFsc2U7XG4gIHB1YmxpYyBmaWxlTmFtZSA9ICcnO1xuICBjdXJyZW50RmlsZTogYW55O1xuICBwdWJsaWMgc2hvd1BvcHVwID0gZmFsc2U7IC8vIFNLUzExSlVOMjUgQWRkIHBvcHVwIHZpc2liaWxpdHkgY29udHJvbFxuICB2aWV3RWRpdDogYm9vbGVhbiA9IGZhbHNlIFxuICBvcmlnaW5hbFZhbHVlOiBhbnk7IC8vIFNLUzEzSlVOMjUgVG8gc3RvcmUgdGhlIG9yaWdpbmFsIHZhbHVlIHdoZW4gZW50ZXJpbmcgdmlldyBlZGl0IG1vZGVcbiAgaXNTYXZlSG92ZXJlZCA9IGZhbHNlO1xuICBpc0Rpc2NhcmRIb3ZlcmVkID0gZmFsc2U7XG4gIGlzTG9hZGluZyA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgU2hhcmVkU2VydmljZTogU2hhcmVkU2VydmljZSwgcHJpdmF0ZSBkYXRhU2VydmljZTogRGF0YVNlcnZpY2UsIHByaXZhdGUgc2FuaXRpemVyOiBEb21TYW5pdGl6ZXIsXG4gICAgcHVibGljIGkxOG5TZXJ2aWNlOiBJMThuU2VydmljZVxuICApIHsgfVxuICAvL1JTIDA5SkFOMjAyNVxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLmluaXRpYWxpemVGaWxlQ29uZmlncygpO1xuICB9XG4gIG5nT25DaGFuZ2VzKHNpbXBsZUNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcbiAgICBpZiAoc2ltcGxlQ2hhbmdlc1snbW9kZSddKSB7XG4gICAgICB0aGlzLm1vZGUgPSBzaW1wbGVDaGFuZ2VzWydtb2RlJ10uY3VycmVudFZhbHVlO1xuICAgIH1cbiAgICBpZiAoc2ltcGxlQ2hhbmdlcy5hbGxGaWxlcykgeyAgLy9TS1M1Tk9WMjVcbiAgICAgIHRoaXMuY29weU9mSW5wdXRBbGxGaWxlcyA9IHNpbXBsZUNoYW5nZXMuYWxsRmlsZXMuY3VycmVudFZhbHVlIHx8IFtdO1xuICAgIH1cblxuICAgIGlmIChzaW1wbGVDaGFuZ2VzLmxpbWl0RmlsZVVwbG9hZGluZykge1xuICAgICAgdGhpcy5jb3B5T2ZGaWxlVXBsb2FkaW5nTGltaXQgPSBzaW1wbGVDaGFuZ2VzLmxpbWl0RmlsZVVwbG9hZGluZz8uY3VycmVudFZhbHVlO1xuICAgIH1cblxuICB9XG5cbiAgLy9SUyAwOUpBTjIwMjUgSW5pdGlhbGl6ZXMgZmlsZSB1cGxvYWQgc2V0dGluZ3MgKGFsbG93ZWQgdHlwZXMsIG1heCBzaXplLCBhbmQgbWF4IGZpbGVzKSBieSBwYXJzaW5nIG1ldGFkYXRhIGZyb20gZmllbGRzTWV0YVxuICBpbml0aWFsaXplRmlsZUNvbmZpZ3MoKSB7XG4gICAgaWYgKHRoaXMucXVlc3Rpb24/LmZpZWxkc01ldGEpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIC8vIFNLUzIwTUFSMjUgY2hlY2sgaWYgcXVlc3Rpb24gZmllbGRzbWV0YSBpcyBzdHJpbmdcbiAgICAgICAgY29uc3QgbWV0YURhdGEgPSB0eXBlb2YgdGhpcy5xdWVzdGlvblsnZmllbGRzTWV0YSddID09PSAnb2JqZWN0JyA/IHRoaXMucXVlc3Rpb25bJ2ZpZWxkc01ldGEnXSB8fCBbXSA6IEpTT04ucGFyc2UodGhpcy5xdWVzdGlvblsnZmllbGRzTWV0YSddKTtcbiAgICAgICAgY29uc3QgZmlsZUNvbmZpZyA9IG1ldGFEYXRhWzBdOyAgLy8gR2V0IGZpcnN0IGNvbmZpZyBvYmplY3RcbiAgICAgICAgaWYgKGZpbGVDb25maWcpIHtcbiAgICAgICAgICB0aGlzLmFsbG93ZWRGaWxlVHlwZXMgPSBmaWxlQ29uZmlnLmFsbG93ZWRUeXBlcyB8fCBbXTtcbiAgICAgICAgICB0aGlzLm1heEZpbGVTaXplID0gZmlsZUNvbmZpZy5tYXhGaWxlU2l6ZSB8fCAwO1xuICAgICAgICAgIHRoaXMubWF4RmlsZXMgPSBmaWxlQ29uZmlnLm1heEZpbGVzIHx8IDU7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIC8vIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHBhcnNpbmcgZmllbGRzTWV0YTonLCBlcnJvcik7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIC8vIFNLUzExSlVOMjUgT3BlbiB0aGUgcG9wdXBcbiAgb3BlblBvcHVwKCkge1xuICAgIHRoaXMuc2hvd1BvcHVwID0gdHJ1ZTtcbiAgICB0aGlzLnZpZXdGaWxlKHRoaXMuY29weU9mSW5wdXRBbGxGaWxlc1swXSlcbiAgfVxuXG4gIC8vIFNLUzExSlVOMjUgQ2xvc2UgdGhlIHBvcHVwXG4gIGNsb3NlUG9wdXAoKSB7XG4gICAgdGhpcy5zaG93UG9wdXAgPSBmYWxzZTtcbiAgfVxuICB1cGxvYWRNdWx0aXBsZUZpbGVzKGV2ZW50OiBhbnkpIHtcbiAgICBjb25zb2xlLmxvZygnRmlsZSB1cGxvYWRlciBpbml0aWF0ZWQnKTtcbiAgICB0aGlzLnZhbGlkYXRpb25FcnJvcnMgPSBbXTsgLy8gUlMgMTdKQU4yMDI1IENsZWFyIHByZXZpb3VzIGVycm9yc1xuICAgIGxldCBpbnB1dEZpbGVzOiBhbnlbXSA9IHRoaXMuY29weU9mSW5wdXRBbGxGaWxlcyA/IHRoaXMuY29weU9mSW5wdXRBbGxGaWxlcyA6IFtdO1xuICAgIGNvbnN0IHNlbGVjdGVkRmlsZURhdGEgPSBbXTtcbiAgICBjb25zdCB1cGxvYWRlZEZpbGVzID0gZXZlbnQudGFyZ2V0LmZpbGVzO1xuXG4gICAgLy8gUlMgMDlKQU4yMDI1IENoZWNrIGZpbGUgY291bnQgbGltaXRcbiAgICBpZiAodXBsb2FkZWRGaWxlcy5sZW5ndGggKyBpbnB1dEZpbGVzLmxlbmd0aCA+IHRoaXMubWF4RmlsZXMpIHtcbiAgICAgIHRoaXMudmFsaWRhdGlvbkVycm9ycy5wdXNoKGBNYXhpbXVtICR7dGhpcy5tYXhGaWxlc30gZmlsZXMgYWxsb3dlZGApO1xuICAgICAgZXZlbnQudGFyZ2V0LnZhbHVlID0gJyc7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgcmVhZEZpbGVzUHJvbWlzZXMgPSBbXTtcblxuICAgIGZvciAoY29uc3QgZWFjaFVwbG9hZGVkRmlsZSBvZiB1cGxvYWRlZEZpbGVzKSB7XG4gICAgICBjb25zdCBmaWxlOiBGaWxlID0gZWFjaFVwbG9hZGVkRmlsZTtcblxuICAgICAgLy9SUyAwOUpBTjIwMjUgQ2hlY2sgZmlsZSB0eXBlXG4gICAgICBjb25zdCBmaWxlRXh0ID0gJy4nICsgZmlsZS5uYW1lLnNwbGl0KCcuJykucG9wKCkudG9Mb3dlckNhc2UoKTtcbiAgICAgIGlmICh0aGlzLmFsbG93ZWRGaWxlVHlwZXMubGVuZ3RoID4gMCAmJiAhdGhpcy5hbGxvd2VkRmlsZVR5cGVzLmluY2x1ZGVzKGZpbGVFeHQpKSB7XG4gICAgICAgIHRoaXMudmFsaWRhdGlvbkVycm9ycy5wdXNoKGBGaWxlIHR5cGUgJHtmaWxlRXh0fSBub3QgYWxsb3dlZC4gQWxsb3dlZCB0eXBlczogJHt0aGlzLmFsbG93ZWRGaWxlVHlwZXMuam9pbignLCAnKX1gKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIC8vUlMgMDlKQU4yMDI1IENoZWNrIGZpbGUgc2l6ZVxuICAgICAgaWYgKHRoaXMubWF4RmlsZVNpemUgPiAwICYmIGZpbGUuc2l6ZSA+IHRoaXMubWF4RmlsZVNpemUpIHtcbiAgICAgICAgdGhpcy52YWxpZGF0aW9uRXJyb3JzLnB1c2goYEZpbGUgXCIke2ZpbGUubmFtZX1cIiBleGNlZWRzIHNpemUgbGltaXQgb2YgJHt0aGlzLm1heEZpbGVTaXplIC8gMTA0ODU3Nn1NQmApO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKCF0aGlzLnZhbGlkYXRpb25FcnJvcnMubGVuZ3RoKSB7XG4gICAgICAgIGNvbnN0IGZvcm1hdCA9IGZpbGVFeHQuc3Vic3RyaW5nKDEpO1xuICAgICAgICBjb25zdCBmaWxlUmVhZFByb21pc2UgPSBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgY29uc3QgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcbiAgICAgICAgICByZWFkZXIucmVhZEFzRGF0YVVSTChmaWxlKTtcblxuICAgICAgICAgIHJlYWRlci5vbmxvYWQgPSAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBmaWxlRGF0YSA9IHtcbiAgICAgICAgICAgICAgZG9jOiByZWFkZXIucmVzdWx0LFxuICAgICAgICAgICAgICBuYW1lOiBmaWxlLm5hbWUsXG4gICAgICAgICAgICAgIHR5cGU6IGZpbGUudHlwZSxcbiAgICAgICAgICAgICAgZm9ybWF0LFxuICAgICAgICAgICAgICBzaXplOiBmaWxlLnNpemUsIC8vIFJTIDE3SkFOMjAyNSBcbiAgICAgICAgICAgICAgaWQ6IG51bGwsXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBzZWxlY3RlZEZpbGVEYXRhLnB1c2goZmlsZURhdGEpO1xuICAgICAgICAgICAgaW5wdXRGaWxlcy5wdXNoKGZpbGVEYXRhKTtcbiAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgcmVhZGVyLm9uZXJyb3IgPSAoKSA9PiB7XG4gICAgICAgICAgICByZWplY3QoKTtcbiAgICAgICAgICAgIHRoaXMudmFsaWRhdGlvbkVycm9ycy5wdXNoKGBFcnJvciByZWFkaW5nIGZpbGUgXCIke2ZpbGUubmFtZX1cImApOy8vIFJTIDE3SkFOMjAyNSBcbiAgICAgICAgICB9O1xuICAgICAgICB9KTtcbiAgICAgICAgcmVhZEZpbGVzUHJvbWlzZXMucHVzaChmaWxlUmVhZFByb21pc2UpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAocmVhZEZpbGVzUHJvbWlzZXMubGVuZ3RoID4gMCkge1xuICAgICAgLy8gV2FpdCBmb3IgYWxsIHByb21pc2VzIHRvIHJlc29sdmVcbiAgICAgIFByb21pc2UuYWxsKHJlYWRGaWxlc1Byb21pc2VzKS50aGVuKCgpID0+IHtcbiAgICAgICAgdGhpcy5jb3B5T2ZJbnB1dEFsbEZpbGVzID0gaW5wdXRGaWxlcztcbiAgICAgICAgY29uc29sZS5sb2coJ3VwbG9hZGVkRmlsZXMnLCBpbnB1dEZpbGVzKTtcbiAgICAgICAgdGhpcy5zZWxlY3RlZEZpbGVEYXRhLmVtaXQoe3F1ZXN0aW9uIDogdGhpcy5xdWVzdGlvbiwgdmFsdWU6IGlucHV0RmlsZXN9KTtcbiAgICAgIH0pLmNhdGNoKCgpID0+IHtcbiAgICAgICAgLy8gY29uc29sZS5lcnJvcignRXJyb3IgcmVhZGluZyBmaWxlcycpO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnNvbGUud2FybignWW91IGNhbiB1cGxvYWQgbWF4IDUgZmlsZXMnKTtcbiAgICAgIC8vIHRoaXMudG9hc3RyLndhcm5pbmcoVE9BU1RFUl9NRVNTQUdFUy5NQVhfRklWRV9GSUxFUywgVE9BU1RFUl9NRVNTQUdFUy5XQVJOSU5HX1RJVExFKTtcbiAgICB9XG5cbiAgICBldmVudC50YXJnZXQudmFsdWUgPSAnJztcbiAgfVxuXG4gIGRlbGV0ZUZpbGUoY3VycmVudEZpbGVJbmRleCkge1xuICAgIGNvbnN0IGRlbGV0ZWRGaWxlTmFtZSA9IHRoaXMuc2VsZWN0ZWRGaWxlTmFtZUFycmF5LnNwbGljZShjdXJyZW50RmlsZUluZGV4LCAxKTtcbiAgICBjb25zdCBkZWxldGVkRmlsZSA9IHRoaXMuY29weU9mSW5wdXRBbGxGaWxlcy5zcGxpY2UoY3VycmVudEZpbGVJbmRleCwgMSk7XG4gICAgdGhpcy5jb3B5T2ZJbnB1dEFsbEZpbGVzLmxlbmd0aCA+IDAgPyB0aGlzLnZpZXdGaWxlKHRoaXMuY29weU9mSW5wdXRBbGxGaWxlc1swXSkgOiB0aGlzLnZpZXdGaWxlKG51bGwpO1xuICAgIGNvbnNvbGUubG9nKCdlbWl0JywgZGVsZXRlZEZpbGVbMF0pO1xuICAgIHRoaXMuZGVsZXRlZEZpbGVEYXRhLmVtaXQoZGVsZXRlZEZpbGVbMF0pO1xuICAgIHRoaXMuc2VsZWN0ZWRGaWxlRGF0YS5lbWl0KHtxdWVzdGlvbiA6IHRoaXMucXVlc3Rpb24sIHZhbHVlOiB0aGlzLmNvcHlPZklucHV0QWxsRmlsZXN9KTtcbiAgfVxuXG5cbiAgLy8gVkQgMjBNYXkyNCAtIHByZXZpZXcgY2hhbmdlc1xuICAvLyBSUyAwOURFQzI0IENoYW5nZWQga2V5c1xuICB2aWV3RmlsZShjdXJyZW50RmlsZSkge1xuICAgIHRoaXMuY3VycmVudEZpbGUgPSBjdXJyZW50RmlsZTtcbiAgICAvLyBBUC0yNU1BUjI1IEVuc3VyZSBzdWJUZXh0IGlzIHBhcnNlZCBpbnRvIGFuIG9iamVjdCBpZiBpdCdzIG5vdCBhbHJlYWR5XG4gICAgdGhpcy5xdWVzdGlvblsnc3ViVGV4dCddID0gdHlwZW9mIHRoaXMucXVlc3Rpb24/LnN1YlRleHQgPT09ICdvYmplY3QnID8gdGhpcy5xdWVzdGlvbj8uc3ViVGV4dCA6IEpTT04ucGFyc2UodGhpcy5xdWVzdGlvblsnc3ViVGV4dCddKSB8fCB7fTtcbiAgICBpZiAodGhpcy5xdWVzdGlvbi5zdWJUZXh0ICE9IHVuZGVmaW5lZCkge1xuICAgICAgbGV0IGZpbGVNZXRhID0gdGhpcy5xdWVzdGlvbi5zdWJUZXh0O1xuICAgICAgbGV0IGVuZHBvaW50ID0gZmlsZU1ldGEuZW5kcG9pbnQ7XG4gICAgICBsZXQgcXVlcnlQYXJhbWV0ZXIgPSBmaWxlTWV0YS5xdWVyeVBhcmFtZXRlcjtcbiAgICAgIGxldCBmaWxlID0gY3VycmVudEZpbGU7XG4gICAgICBpZiAoZW5kcG9pbnQgJiYgZmlsZVtxdWVyeVBhcmFtZXRlcl0pIHtcbiAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSB0cnVlXG4gICAgICAgIGNvbnN0IGZ1bGxFbmRQb2ludCA9IGVuZHBvaW50ICsgJz8nICsgcXVlcnlQYXJhbWV0ZXIgKyAnPScgKyBmaWxlW3F1ZXJ5UGFyYW1ldGVyXTtcbiAgICAgICAgaWYgKGZ1bGxFbmRQb2ludCkge1xuICAgICAgICAgIHRoaXMuZGF0YVNlcnZpY2UuYXBpUmVzcG9uc2UoZnVsbEVuZFBvaW50KS5waXBlKFxuICAgICAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgdGhpcy52aWV3TG9jYWxGaWxlKCk7IC8vIENhbGwgZmFsbGJhY2sgbWV0aG9kXG4gICAgICAgICAgICAgIHJldHVybiBvZihudWxsKTsgLy8gUmV0dXJuIGEgZmFsbGJhY2sgdmFsdWUgdG8ga2VlcCBvYnNlcnZhYmxlIGNoYWluIGFsaXZlXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICkuc3Vic2NyaWJlKChhcGlSZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgaWYgKGFwaVJlc3BvbnNlKSB7XG4gICAgICAgICAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2VcbiAgICAgICAgICAgICAgdGhpcy5oYW5kbGVGaWxlQ29udGVudChhcGlSZXNwb25zZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMudmlld0xvY2FsRmlsZSgpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnZpZXdMb2NhbEZpbGUoKVxuICAgIH1cbiAgfVxuXG4gIC8vIC8vIFZEIDAzQXVnMjQgcHJvY2VzcyBsb2NhbCBwcmV2aWV3IFxuICB2aWV3TG9jYWxGaWxlKCkge1xuICAgIGlmICh0aGlzLmN1cnJlbnRGaWxlKSB7XG4gICAgICB0aGlzLnNldEZpbGVVcmwodGhpcy5jdXJyZW50RmlsZT8uZG9jKTtcbiAgICAgIHRoaXMuZmlsZU5hbWUgPSB0aGlzLmN1cnJlbnRGaWxlLm5hbWU7XG4gICAgICB0aGlzLmlzSW1hZ2UgPSB0aGlzLmN1cnJlbnRGaWxlLnR5cGU/LnN0YXJ0c1dpdGgoJ2ltYWdlLycpO1xuICAgIH1cblxuICB9XG5cblxuICBoYW5kbGVGaWxlQ29udGVudChmaWxlUmVzcG9uc2U6IGFueSkge1xuICAgIGNvbnN0IGJ5dGVBcnJheSA9IG5ldyBVaW50OEFycmF5KGZpbGVSZXNwb25zZS5jb250ZW50LmRhdGEpO1xuICAgIGNvbnN0IGJsb2IgPSBuZXcgQmxvYihbYnl0ZUFycmF5XSwgeyB0eXBlOiBmaWxlUmVzcG9uc2UudHlwZSB9KTtcbiAgICBjb25zdCB1cmwgPSB3aW5kb3cuVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKTtcbiAgICB0aGlzLnNldEZpbGVVcmwodXJsKTtcbiAgICB0aGlzLmlzSW1hZ2UgPSBmYWxzZTtcbiAgICBpZiAoZmlsZVJlc3BvbnNlLm5hbWUpIHtcbiAgICAgIHRoaXMuZmlsZU5hbWUgPSBmaWxlUmVzcG9uc2UubmFtZTtcbiAgICAgIGNvbnN0IGltYWdlRXh0ZW5zaW9ucyA9IFsnanBnJywgJ2pwZWcnLCAncG5nJywgJ2dpZicsICdibXAnLCAnd2VicCddO1xuICAgICAgY29uc3QgZmlsZUV4dGVuc2lvbiA9IGZpbGVSZXNwb25zZS5uYW1lLnNwbGl0KCcuJykucG9wKCk/LnRvTG93ZXJDYXNlKCk7XG4gICAgICB0aGlzLmlzSW1hZ2UgPSBpbWFnZUV4dGVuc2lvbnMuaW5jbHVkZXMoZmlsZUV4dGVuc2lvbiB8fCAnJyk7XG4gICAgfVxuICB9XG5cbiAgc2V0RmlsZVVybCh1cmw6IGFueSkge1xuICAgIGlmICh1cmwpIHtcbiAgICAgIHRoaXMuZmlsZVVybCA9IHRoaXMuc2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RSZXNvdXJjZVVybCh1cmwpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmZpbGVVcmwgPSBudWxsOyAvLyBvciBoYW5kbGUgZ3JhY2VmdWxseVxuICAgIH1cbiAgfVxuXG4gIGdldERvY0ljb24oZG9jTmFtZSkge1xuICAgIGNvbnN0IGV4dCA9IGRvY05hbWUuc3BsaXQoJy4nKS5wb3AoLTEpO1xuICAgIHJldHVybiB0aGlzLlNoYXJlZFNlcnZpY2UuZG9jSWNvbihleHQpO1xuICB9XG5cbiAgY2xvc2UoKSB7XG4gICAgdGhpcy5maWxlTmFtZSA9ICcnO1xuICAgIHRoaXMuZmlsZVVybCA9ICcnO1xuICAgIHRoaXMuaXNJbWFnZSA9IGZhbHNlO1xuICAgIGlmICh0aGlzLmZpbGVVcmwpIHtcbiAgICAgIFVSTC5yZXZva2VPYmplY3RVUkwodGhpcy5maWxlVXJsKTtcbiAgICB9XG4gIH1cbiAgdmlld0VkaXRDbGljayhxdWVzOiBhbnkpIHtcbiAgICB0aGlzLm9yaWdpbmFsVmFsdWUgPSAgdGhpcy5jb3B5T2ZJbnB1dEFsbEZpbGVzOyAvL1NLUzEzSlVOMjUgU3RvcmUgdGhlIG9yaWdpbmFsIHZhbHVlXG4gICAgdGhpcy52aWV3RWRpdCA9IHRydWU7IC8vIEVudGVyIHZpZXcgZWRpdCBtb2RlXG4gICAgdGhpcy5tb2RlID0gJ2VkaXQnO1xuICB9XG4gIHNhdmVDaGFuZ2VzKCkge1xuICAgIGxldCBxdWVzID0gdGhpcy5xdWVzdGlvblxuICAgIHF1ZXNbJ3NpbmdsZUZpZWxkQ2hhbmdlJ10gPSB0cnVlXG4gICAgdGhpcy5zZWxlY3RlZEZpbGVEYXRhLmVtaXQoe3F1ZXN0aW9uIDogcXVlcywgdmFsdWU6IHRoaXMuY29weU9mSW5wdXRBbGxGaWxlc30pO1xuICAgIHRoaXMudmlld0VkaXQgPSBmYWxzZTsgLy8gRXhpdCB2aWV3IGVkaXQgbW9kZVxuICAgIHRoaXMubW9kZSA9ICd2aWV3JzsgLy8gU3dpdGNoIGJhY2sgdG8gdmlldyBtb2RlXG4gIH1cbiAgZGlzY2FyZENoYW5nZXMoKSB7XG4gICAgdGhpcy5jb3B5T2ZJbnB1dEFsbEZpbGVzID0gdGhpcy5vcmlnaW5hbFZhbHVlOyAvLyBSZXZlcnQgdG8gb3JpZ2luYWwgdmFsdWVcbiAgICB0aGlzLnZpZXdFZGl0ID0gZmFsc2U7IC8vIFNLUzEzSlVOMjUgRXhpdCB2aWV3IGVkaXQgbW9kZVxuICAgIHRoaXMubW9kZSA9ICd2aWV3JzsgLy8gU0tTMTNKVU4yNSBTd2l0Y2ggYmFjayB0byB2aWV3IG1vZGVcbiAgfVxufVxuIiwiPCEtLSBTS1MxMUpVTjI1IGZpbGUtdXBsb2FkLmNvbXBvbmVudC5odG1sIC0tPlxuPGRpdiBjbGFzcz1cImZsZXggaG92ZXItd3JhcHBlclwiIHN0eWxlPVwiYWxpZ24taXRlbXM6IGNlbnRlcjsgZ2FwOiAxMHB4O1wiPlxuICA8ZGl2IGNsYXNzPVwiZmxleCBmaWxlLWlubmVyLWRpdlwiPlxuICAgIDxzdmcgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXG4gICAgICB4bWxuczp4bGluaz1cImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmtcIj5cbiAgICAgIDxyZWN0IHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiIGZpbGw9XCJ1cmwoI3BhdHRlcm4wXzYxNl8zNTEyNSlcIiAvPlxuICAgICAgPGRlZnM+XG4gICAgICAgIDxwYXR0ZXJuIGlkPVwicGF0dGVybjBfNjE2XzM1MTI1XCIgcGF0dGVybkNvbnRlbnRVbml0cz1cIm9iamVjdEJvdW5kaW5nQm94XCIgd2lkdGg9XCIxXCIgaGVpZ2h0PVwiMVwiPlxuICAgICAgICAgIDx1c2UgeGxpbms6aHJlZj1cIiNpbWFnZTBfNjE2XzM1MTI1XCIgdHJhbnNmb3JtPVwic2NhbGUoMC4wMDE5NTMxMilcIiAvPlxuICAgICAgICA8L3BhdHRlcm4+XG4gICAgICAgIDxpbWFnZSBpZD1cImltYWdlMF82MTZfMzUxMjVcIiB3aWR0aD1cIjUxMlwiIGhlaWdodD1cIjUxMlwiIHByZXNlcnZlQXNwZWN0UmF0aW89XCJub25lXCJcbiAgICAgICAgICB4bGluazpocmVmPVwiZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFnQUFBQUlBQ0FZQUFBRDBlTlQ2QUFBQUNYQklXWE1BQUE3REFBQU93d0hIYjZoa0FBQUFHWFJGV0hSVGIyWjBkMkZ5WlFCM2QzY3VhVzVyYzJOaGNHVXViM0pubSs0OEdnQUFJQUJKUkVGVWVKenQzWGZZSDFXWi8vRjNTRS9vQ2FFVEFnb2lKWFRwZ2dpS2dpdFIxSlVWWGN1NitMT2cvaXpzV3FLcmE4ZTY2cUxpZ29vSUFpcFd5a2FVSmlBZ1JVVnFJTFNFaENTVTlHVC9PTjlISHBLbmZPdmNaMmJlcit1NnI0QVhWK2FUbWNlY2U4NmNPVE1DVmNVNFlCcXdmYU8yQVRZREpnT1RHcitPQnpadS9QZGpnSWxGaDVSNlpCV3d1UEhQVHdMTGdjZUJSNEI1d0tPTlh4OEU3Z0h1QXVZQWF3cFBLbVZpUkhRQXRXd01zQ3V3ZTZPbU4vNTlxOGhRVWdrdEpUVURkd0EzQXpjMGFuWmtLS2tvTmdENW13d2NCQnpjcUgyQnNhR0pwR3BiUUdvRXJnSitDMXdETElrTUpQV0NEVUIrUnBFRy9HT0FGNVB1OEwxT1VweWx3QitBV2NBbHBJWmdkV2dpcVFzY1dQSXdIbmdKOENyZ2FKNStUaThwUDQ4QVB3TitBbHdHTEl1Tkk3WEhCaURPR05JZC9xdUJsd0hyeDhhUjFJYkhnWjhEWjVGbUIxYkZ4cEdhWndOUXZHY0Jid2JlQUd3ZUcwVlNGejBJL0JqNERtbFJvWlExRzRCaWpBU09CMDRHanNEekxsWGRGY0NYZ1F0eFZrQ1pjaURxclhHazUvci9CdXdjbkVWUzhlNEZ2Z21jRGp3V0cwVjZKaHVBM3RnRWVBL3dObURUNEN5UzRpMG1OUUdmSlcxSUpJV3pBZWl1OVlIL0Izd1FWL0pMV3RlVHBEVUNud1RtQm1kUnpka0FkTWM0NEozQSswbmI3a3JTVUJZQlgyelU0bUgrVzZrbmJBQTZkeHp3SldDSDZDQ1NTbWMrOEIvQVYzRnpJUlhNQnFCOTAwa0QvK0hCT1NTVjN6WEFPNERybzRPb1B0YUxEbEJDNDBrTGVhN0h3VjlTZHh4QTJtNzRkTklpWXFubm5BRm96YUhBdC9DVlBrbTk4d2p3cjZTdGhxV2VjUWFnT2V1VE92UExjZkNYMUZ1Ymt6WVEraTYrVGFRZWNnWmdlUHNEUHlCdDRTdEpSWm9EdkpIMG5RR3BxMFpHQjhqWWVxUlgrMzRJYkJhY1JWSTliUWo4RTJudDBTeGdUV3djVllrekFBT2JBcHhEMnJkZmtuSndDWEFpN2lTb0xyRUJXTmYrcEM5NmJSc2RSSkxXTW9mMENmR3Jvb09vL0Z3RStFd25BYi9Gd1Y5U25yWWhQUXA0WFhRUWxaOXJBSktScEUxOVBnMk1EczRpU1VNWkNieWNOSU43ZVhBV2xaZ05BRXdFZmdTOFBqcUlKRFZwQkdranN1MkJYd0tySXNPb25PcStCbUFMNEdmQWZ0RkJKS2xObDVGbUJKNklEcUp5cVhNRE1CVzRGTi92bDFSK1Z3SXZ3UzhMcWdWMWJRQ21rYnJtYWRGQkpLbExyZ2RlQkN5SURxSnlxR01Ec0F2cHpuK3I2Q0NTMUdVM0FFZGhFNkFtMUswQjJJMzBDczNrNkNDUzFDUFhBUy9BTlFFYVJwMzJBWGdXY0RFTy9wS3FiVC9ncDhEWTZDREtXMTFlQTl5V2RPZnZCaitTNm1BYXNDTndRWFFRNWFzT0RjQVd3TytBSGFLRFNGS0JkZ2ZHa2RZOFNldW9lZ013RWZnTjZkbS9KTlhOSWNCYzBoc0Mwak5VZVJIZ2VxU1AraHdmSFVTU0FxMEFqZ1IrSHgxRWVhbnlJc0F2NHVBdlNhT0JjL0hWWjYybHFnM0FXNEYzUm9lUXBFeHNRWm9SSFJNZFJQbW80aHFBL1VuZDdxam9JSktVa1cyQkRZRmZSd2RSSHFyV0FFd2hiZkc3YVhRUVNjclFBY0Q5d0kzUlFSU3ZTb3NBUndLWEFFZEVCNUdrakMwQkRnWCtHQjFFc2FxMEJ1QlVIUHdsYVRqamdRdEpNNmFxc2FyTUFPd0RYRTFhN1NwSkd0NlZwRzhHTEk4T29oaFZXQU13a2JUSHY5MnNKRFZ2TzJBVDRGZlJRUlNqQ2czQWZ3RkhSNGVRcEJMYUg3Z1B1Q2s2aUlwWDlrY0Fod1AvUy9uL0hKSVVaUmx3R0hCdGRCQVZxOHdENTNqZ1p0Sm5maVZKN1hzSTJCZDRNRHFJaWxQbXR3QStqb08vSkhYRGxxU2RBc2RHQjFGeHlyb0dZRHB3QnVWdVlDUXBKOXNDazRGZlJBZFJNY3JhQUp3RDdCQWRRcElxWmwvUzR3QTNDYXFCTXE0QmVDVndYblFJU2Fvb1B4OWNFMlZyQU1ZQ3QrS3pmMG5xcFlkSnN3RVBSQWRSNzVUdEdmcTdjUENYcEY3ciszeXdpd0lyckV4ckFOWUhma1RhK1UrUzFGdmJrSFlML0VsMEVQVkdtUnFBVTRHWFJvZVFwQnFaRHN3RnJvOE9vdTRyeXhxQWpZRzdTZnRXUzVLS3N3STRDcmc4T29pNnF5eHJBTjZMZzc4a1JSaE5ldnk2VFhRUWRWY1paZ0Fta0Q1V01TazZpQ1RWMkkzQXdjQ1M2Q0RxampMTUFMd1pCMzlKaXJZWDhOL1JJZFE5dVM4Q0hBbDhIOWcwT29na2llbkFBdnh5WUNYa1BnTndQTEJqZEFoSjB0OTlnZlFwZHBWYzdnM0F5ZEVCSkVuUE1KcTBTZEMwNkNEcVRNNkxBSGNFN2lEdmpKSlVWemVSRmdVK0ZSMUU3Y2w1QnVCZmNQQ1hwRnp0Q1p3ZUhVTHR5M1VSNEdqZ2YwamIvMHFTOHJRSDhEaHdkWFFRdFM3WEdZQmpTQitqa0NUbDdUT2t6d2VyWkhKdEFGNFRIVUNTMUpSUndMbjR4bGJwNVBpTWZRTHdDRTcvUzFLWjNBd2NCRHdaSFVUTnlYRUc0Q1U0K0V0UzJld0JuRVdlTjVZYVFJNkxBRDhLN0JvZFFwTFVzbDFJcndWZUdSMUV3OHV0VXhzRnpDTjkvbGVTVkQ2cmdXT0JYMFVIMGRCeWV3UndFQTcra2xSbTZ3RS9BSjRWSFVSRHk2MEJPQ1k2Z0NTcFk1c0FQd00yakE2aXdka0FTSko2WVJmZ1RQSjcxS3lHbkJZQlRnWStqejhza2xRVnp3R1dBNytQRHFKMTVUUURjREFPL3BKVU5mOUJXaFNvek9UV0FFaVNxbVU5NEd6U0l3Rmx4QVpBa3RSckd3QVhBaHRGQjlIVGNwbHlId3NzYXZ3cVNhcW1ud0F6Z0RYUlFaVFBETUJ6Y2ZDWHBLcDdPZkRoNkJCS2Nta0E5b2dPSUVrcXhFemdGZEVoWkFNZ1NTcldDT0M3K00yWGNEWUFrcVNpYlFCY2dGdS9oOHFsQVhodWRBQkpVcUYySW4wK09KZHhxSFp5MkFsd1BQQXA4bmtqUVpKVWpKMUpEY0NzNkNCMWxFUG50VDBPL3BKVVZ4OENUb2dPVVVlNU5BQ1NwSG9hQVp3QjdCWWRwRzV5YUFDbVJRZVFKSVZhbi9UNTRFblJRZW9raHdaZ20rZ0FrcVJ3MDREdmtjZTRWQXM1bk9qTm9nTklrckp3RFBDSjZCQjFrVU1ENEpTUEpLblBCNEZYUjRlb2d4d2FnTW5SQVNSSjJlamJLWER2NkNCVlp3TWdTY3JOZU9COEhCOTZLb2NHWUlQb0FKS2s3R3dQL0lBOE5xeXJwQndhQUQ4RExFa2F5TkdrbldMVkF6azBBR09pQTBpU3N2VSs0UFhSSWFvb2h5MTRueUk5NzVFa2FTQkxnRU9CUDBZSHFaSWNHb0NWK0l4SGtqUzAyY0Ird0x6b0lGV1J3eU1BQjM5SjBuQ21BdWNBbzZLRFZFVU9EWUFrU2MxNEFmRFo2QkJWa2NNamdEWFJBU1JKcGZJbTBoY0UxUUViQUVsUzJTd0ZEZ091aXc1U1pqWUFrcVF5dWgvWUY1Z2JIYVNzWEFNZ1NTcWpiWUVMY0MrWnR0a0FTSkxLNm1EZ0M5RWh5c3BIQUpLa3Nuc0w4TzNvRUdWakF5QkpLcnRscEVXQjEwWUhLUk1iQUVsU0ZUeEVXaFQ0WUhTUXNuQU5nQ1NwQ3JZRWZveGZtRzJhRFlBa3FTb09CTDRVSGFJc2ZBUWdTYXFhdHdLblI0ZkluUTJBSktscVZnQkhBcitQRHBJekd3QkpVaFU5VEZvVStFQjBrRnk1QmtDU1ZFVmI0S0xBSWRrQVNKS3E2Z0JjQ3pBb0d3QkpVcFdkQkp3Y0hTSkhyZ0dRSkZYZEN1QW80UExvSURteEFaQWsxY0Vqd0g2a3p3Z0xId0ZJa3VwaGMrQ253UGpvSUxtd0FaQWsxY1Zld0g5SGg4aUZEWUFrcVU1ZUI3d2pPa1FPWEFNZ1NhcWJsY0RSd0t6b0lKRnNBQ1JKZFRTZnRDandudWdnVVh3RUlFbXFvMG5BQmNDRTZDQlJiQUFrU1hXMUp6WGVLZEFHUUpKVVp5Y0M3NGtPRWNFMUFKS2t1bHNGSEF2OE9qcElrV3dBSkVtQ0JjRCt3RjNSUVlyaUl3QkprbUJUMHFMQWlkRkJpbUlESUVsU3NnZHdGbm5NanZlY0RZQWtTVStiQWJ3dk9rUVJjdWh5WEFNZ1NjckphdUE0NEpmUlFYckpCa0NTcEhVOVJsb1VlR2Qwa0Y3eEVZQWtTZXZhQlBnWnNHRjBrRjZ4QVpBa2FXQzdBR2VTeDJ4NTE5a0FTSkkwdUpjRHAwYUg2SVVjdWhyWEFFaVNjcllhZUJGd2FYU1FicklCa0NScGVBOEF1NU1XQjFhQ2p3QWtTUnJlMXNCcDBTRzZ5UmtBU1pLYU53TzRNRHBFTjlnQVNKTFV2TG1rUndGem80TjB5a2NBa2lRMWJ3cnc1ZWdRM2VBTWdDUkpyWHNWY0Y1MGlFN1lBRWlTMUxxNXdFN0FvdWdnN2ZJUmdDUkpyWnNDZkRRNlJDZWNBWkFrcVQwcmdiMkFXNk9EdE1NWkFFbVMyak1LK0dKMGlIYlpBRWlTMUw0WEFzZEZoMmlIandBa1Nlck1YY0N1d0xMb0lLMXdCa0NTcE03c0NKd1NIYUpWemdCSWt0UzV4Y0EwWUVGMGtHWTVBeUJKVXVjMkJONFZIYUlWemdCSWt0UWRpMGl6QUtYNFpMQXpBSklrZGNkR3dEdWlRelRMR1FCSmtycG5JV2tXWUdGMGtPRTRBeUJKVXZkc0RKd2NIYUlaemdCSWt0UmQ4MG16QUk5SEJ4bUtNd0NTSkhYWEpPQXQwU0dHNHd5QUpFbmRONXUwUWRDcTZDQ0RzUUdRRkdFNWNDOXBDOVU3Z1llQkI0RkhTTjlaZndwNGtvR25VQ2NBNDBqUFdpY0JtelZxYTlLMDZ3Nk4ycWlYZndDcENTOERMb29PTVJnYkFFbTl0aGk0QnJpeFVUZVJCdjFlM3hsdEIremVxSDJBZzRDdGVueE1xYjlMZ0tPalF3ekdCa0JTdHowQlhBcjhML0I3NEJieW1RYWRDaHdNSEVuNmkzbWIyRGlxdURYQVRxU0dOenMyQUpLNllRNXdQdkJ6MHFCZmxxK2k3UUljQzh3QW5rY2VmeWVxV2o0SmZDZzZ4RUJ5K0dHM0FaREthUzV3RG5BdWNCWGwvLy95TnNBcmdKT0F2WU96cURybUFOdVR6eXpZMzlrQVNHckZhdUJpNE51a3hVM0xZK1Awek83QTY0RTNrQllhU3AwNEJ2aDFkSWkxMlFCSWFzWVR3Tm5BYWNEdHdWbUtOQlo0TmZCdVlNL2dMQ3F2NzVGbWxySmlBeUJwS0k4QW53ZStSZnJTV1owZENmd2I4SUxvSUNxZFJjQVd3TkxvSVAyNUU2Q2tnY3dGL2ovcGZmclA0K0FQY0JtcENUZ1ErR1Z3RnBYTFJzQ0xva09zelFaQVVuOVBBaDhsRGZ4ZklHM0lvMmU2Qm5ncDhIemc2dUFzS284VG9nT3N6VWNBa2lBdDd2c2Y0TU9rSGZuVXZCbWtabW43NEJ6SzJ3SmdjMkJsZEpBK3pnQkl1cG0wT2M2YmNQQnZ4d1hBYzRHUGtka3pYbVZsVTlMam8yellBRWoxOVNUcE9mOCtwR2x0dFc4Sk1CUFlEWmdWRzBVWmUybDBnUDU4QkNEVjAxV2s5OXl6M0tLMDVFWUFid1UrQzJ3UW5FVjV1Um1ZSGgyaWp3MkFWQy9MU1ZQVm55SERuY2txWmlyd2ZlQ1E2Q0RLeGhwZ0N2Qm9kQkR3RVlCVUovZVNCcVAveE1HL0NMT0JJNENQNC9sV01vTDA5a2dXYkFDa2V2Z0Y2Vm4vZGRGQmFtWWw2YlhLSTRHSGc3TW9ENGRIQitoakF5QlYyeHJnSThCeHBOZVFGT055WUYvZ0Q5RkJGTzdRNkFCOVhBTWdWZGNxMHY3alowY0gwZCtOQmY2TDlNcWw2bWtsYVdmQThFMjJuQUdRcXVzVUhQeHpzd3g0TTNBcTN2elUxU2d5K2JDVURZQlVUZWNDWDRzT29VRjlHamlSMUJDb2Z2YUxEZ0EyQUZJVkxRTGVHUjFDdy9vaDZUdnhUMFFIVWVHeTJBdkFCa0NxbnErU1B1T3IvTTBpdlNvNFB6cUlDclZMZEFCd0VhQlVOU3RKWC9LN1B6cUlXckkzOEJ0Z2NuUVFGV0lSc0hGMENHY0FwR3I1S1E3K1pYUUQ2WHZ4aTZLRHFCQWJBVnRIaDdBQmtLcmxwOUVCMUxZYmdCZmptb0M2MkNFNmdBMkFWQzFYUlFkUVI2NEJqc2UzQStwZ2FuUUFHd0NwT2g0Qjdvb09vWTVkU3ZwU28rdWpxbTNiNkFBMkFGSjEzQkVkUUYzekk5SkhoRlJkMjBVSHNBR1Fxc01GWk5YeU1lQUgwU0hVTTFPaUE5Z0FTTld4TURxQXVtb05hZHZnRzZLRHFDYzJqUTVnQXlCVmgvOS9ycDZsd0t1d3Vhc2lHd0JKWFJPK3FFZzljUmN1Q3F5aThBYkFuUUNsNnJpUERGNHRhc01JVXZPeVU2T21rSFpKNjZ2UndKT04vM1loc0FTWURjd2hiWHAwSnpDdjJNZ2h2Z3E4UFRxRXVtWSt3VHMvMmdCSTFiRUsyQVI0UERySU1DWURoelhxVU5LKzZPTTcvRDN2QTY0RC9nQmMzYWhWSGY2ZXVaa0EvQkY0VG5RUWRjWGp3SWFSQVd3QXBHbzVGdmhGZElnQlBKZjBMSHNHc0J1OS83dG5QdkJMNEdla1BmWnpiNHFhdFM5cHM2ZlIwVUhVc1dYQXVPZ1EwZFpZbHRXMU9vdDhiQTc4TzNBenNlZmtDZUJid0Y2OS9lTVc1aFBFLzV4Wm5kZnF0UzlzMFp3QmtLcmxLV0FhTURjd3crN0FLY0NKd05qQUhBTzVHdmd5Y0I0Wi9BWGNwdkdrcHVwWjBVSFVzZEF4MkxjQXBHcVpRTHJyanJBMzhHdmdUOEFieVcvd0J6Z1FPSWYwYnYxTGc3TzBhd253dHVnUVVqZEVUOE5ZVnRWcUpmQThpck1kNmRIRHFpNy9PWXFvM3dQN2RQK1VGT0ljNHMrZjFWbUY4aEdBVkUxelNFM0FnejA4eGxqZ1E4Qjc2WHdWZjZTVndHZEplKytYNlN0ODJ3Ti93WVZrWmVZakFFbGR0dzB3aTk3dEN6QWR1SmJVQUpSNThBY1lCZndiNlJXNy9ZS3p0T0plNEN2UklWUmV6Z0JJMVRZWE9JbjBLbHczakFMZUQzd1VHTk9sM3pNbks0QjNBZCtJRHRLa2pVZ2JJWVZ1S0tPMk9RTWdxV2VtQUw4Q3ZnZnMwT0h2TlozMER2b25xZWJnRCtuOStxOEQzNlFjNzlvdkFqNGZIVUxsNUF5QVZCK3JTYzNBMTRCTFNjKytoek9DdEZ2ZjI0QVRxTmROdys5SUd4Zk5qdzR5alBXQmUzQVdvSXhDeDJBYkFLbWVuaVJ0blhzRjZXTXppMGwzazVEV0Qwd2w3Y3YvQW1ETGlJQ1p1QWw0SWZrM0FSOEVQaFVkUWkyekFZZ09JRWxEK0JPcENYZzBPc2dRTmlCOUdHbWo2Q0JxaVdzQUpDbGowNEhMeUh1Sy9YSGdPOUVoVkM3T0FFaFNjNjRqUFJKNUlqcklJS2FTM2dnWUZSMUVUWE1HUUpKS1lEL1NOd1J5ZlR0Z051bnJoMUpUYkFBa3FYa3ZCczRrMzc4N3Z4MGRRT1hoSXdCSmF0Mm5nVk9qUXd4Z0pPbVZ3RzJqZzZncFBnS1FwSkw1QVBBUDBTRUdzSW8wUXlFTnl4a0FTV3JQbzhCZXBBOHY1V1FuNFBib0VHcUtNd0NTVkVLVGdiUEpiOVg5MzBoN0YwaERzZ0dRcFBZZFN2cVNZRzdPaXc2Zy9Qa0lRSkk2c3hUWWpiU2xjaTU4REZBT2JnVWNIVUFxMkVMZ0R0SlU3U0xTTG02TFNQdnpMd00ySm4zZ1pTSnBpOWVwd0xPQjdYRFdMbGMvQjQ2TERyR1d2NUYrYnBTdjBERTR0MmRYVXRVOFR2cXEzQ3pnV3RKZDJkdzJmNit4cEwvUWR5Vk5QUjhPUEpjOEd2bTZPN1pSUDQ4TzBzK3ZzUUhRRUhMNGk4TVpBRlhObmNBUFNIOEJYMDl6bjkxdDF4VGcrY0R4cE5mU0p2VHdXQnJhWGFTR2JIbDBrSWFYa2xkRG9uWDVDQ0E2Z05RRkM0RnpnYk9BcTRqNXVWNmYxQWljU1BwNjNjaUFESFgzUnVDNzBTRWFKZ0lMZ0RIUlFUUW9HNERvQUZJSDVnTGZBRTRERmdkbjZXOHE4QjdnelRnclVLVGJTYk1BcTZPRE5Gd05IQkFkUW9OeUh3Q3BoQjRCUGdoc0Q4d2tyOEVmMG9kaDNrVnFCRDVHdWhOVTcrME12RHc2UkQ5WFJBZFF2bXdBcE5Zc0J6NUJHdmcvQXl3SlRUTzhSMGtOeW83QTEwaGJ4YXEzUGhnZG9KOHJvd01vWHo0Q2tKcDNCZkJXNE0vUlFUb3duZFFJSEJJZHBPTDJBVzZJRGdGc0JUd1FIVUtEOGhHQWxMbWx3TW5BWVpSNzhJZTBSZXhod0J0SWV3K29OMDZNRHREd0lPMi9kcXFLc3dHUWhuWS82VFc3YjFLZDJhbzFwQy9HVFNjdEVsUDMvU1A1dklYaGR3RTBJQnNBYVhDWGtMNzJkbTEwa0I2WlRkcE02SXRVcDduSnhaYWtjNXNER3dBTnlBWkFHdGhYZ0dPQStkRkJlbXc1NlhYQjQwbGJFYXQ3VG9nTzBQRFg2QURLa3cyQXRLN1BrMTZocTlPSytaOENSd0R6b29OVXlCSFJBUnB5K2tpUk1tSURJRDNUWjRIM1JZY0ljaDFwZ2VCOTBVRXFZaWRnNitnUXBLMnBwWFhZQUVoUCt6andnZWdRd2Y0S0hBVGNGaDJrSWc2UERrQjZEWEJwZEFqbHh3WkFTajRHZkRRNlJDWWVBSTRDN29rT1VnR0hSd2NnTGZCOE1EcUU4bU1ESUtXZDhtWUdaOGpOUTZRbTRKSG9JQ1czUjNTQWhvZWpBeWcvTmdDcXU1bWt1Myt0Nnk3U04rNmZpQTVTWWp0SEIyaDRLRHFBOG1NRG9EcjdHQTcrdzdrZWVCM3VFOUN1allBcDBTRndOMEFOd0FaQWRUVVRwLzJiOVJQUzl3UFVubWRIQndBZWp3NmcvTmdBcUk2ODgyL2QrNENib2tPVTFBN1JBY2p2YzlYS2dBMkE2dVpqZU9mZmptWEFhM0Mzd0hac0ZCMEFHd0FOd0FaQWRUSVRCLzlPM0U3YUswR3RXVDg2QUttQms1N0JCa0IxTVJPbi9idmhTNlJHUU0zYklEb0FMdUxVQUd3QVZBY3pjZkR2bHVYQU82SkRsRXdPRGNEcTZBREtqdzJBcXM0RmY5MTNDWEJSZEFpMXhBWkE2N0FCVUpYTnhHZit2ZkpobkZadVZnNEw4TVpHQjFCK2JBQlVWVFB4enIrWC9nUmNGaDJpSkhMWVNYRjhkQURseHdaQVZUUVRCLzhpZkRZNlFFbmtzQW5QdU9nQXlvOE5nS3JHWi83RnVRUzRNVHBFQ1N5S0RnQk1pQTZnL05nQXFFcG00alAvb3AwUkhhQUU3b29PQUV5T0RxRDgyQUNvS21iaW5YK0VId0VybzBOazdtL1JBYkFCMEFCR1JRZVF1cURNMC82VGdRT0I1d0hUU2M5cTF5ZnQzSFpIbzY0Q3JnWldCV1VjeWp6Z1V1REYwVUV5dFFDWUh4MENHd0JsYW8xbGRWQXpLWi8xZ0dPQUM0RVZOUGZudkIvNElIayt5ejJKK0orRFhPdnFEczVyTi8yWitITmhyVnUxRjMwQnJQTFdUTXJuQU5JcmRPMyttZThIamlvODlkQW1remFhaWY1NXlMRnkrSXp5Q05KSG5LTFBoYlZ1MVY3MEJiREtXVE1wbDlIQVYwblQrSjMrMlZjQjd5dzIvckJ1SnY1bklzZDZSU2NudFVzMkkvNDhXQU5YN1VWZkFLdDhOWk55R1EyY1QvZlB3MXVML0VNTTR5dkUvMXprVnF1QVNaMmMxQzdaai9oellRMWNvWHdMUUdYek1jclZBSXdHemdGbTlPRDMvaHJ3a2g3OHZ1MjRQRHBBaG00bWp3V0FPMFVIVUo1c0FGUW1EdjdQTkFvNEQ5aTdSNzkvSzNKWjdKYVRTNklETk93YUhVQjVzZ0ZRV1RqNEQyd0NjQzZ3WVkrUE01d0h5ZU9qTnprNU96cEFndzJBQm1RRG9ESnc4Qi9hanVTeEQwSU9HOTdrNGhiZ3B1Z1FEYnRGQjFDZWJBQ1VPd2YvNXJ3ZG1GYndNZGQyZS9EeGMvSzk2QUFOazRqL3VWQ21iQUNVTXdmLzVvMEMzaHR3M1A3dUNENStMbFlDUDRnTzBiQWZhUjhBYVIwMkFNcVZnMy9yL2hFWUczajhSd09QblpNZmt0WkU1R0QvNkFES2x3MkFjdVRnMzU1TmdZTURqNzh3OE5pNVdBVjhNanBFUHdkRkIxQytiQUNVR3dmL3pod2FlR3diZ1BSYVppNXJJY1lBaDBTSFVMNXNBSlFUQi8vTzdSSjQ3RVdCeDg3QmF1QVQwU0g2ZVI0d01UcUU4bVVEb0Z3NCtIZkg1b0hIWGhsNDdCejhOM0JiZEloK1hoQWRRSG16QVZBT0hQeTdaM3pnc2NjRUhqdmFROENwMFNIV2tzczIwY3FVRFlDaU9maDMxeE9CeHg0WGVPeG83eUt2UnlCYmtWNEJsQVpsQTZCSUR2N2ROeWZ3MkpHdklFYjZPV254WDA2T3hmZi9OUXdiQUVWeDhPK05Xd09QWGNjRlovY0RiNG9PTVlEam93TW9mellBaXZBNUhQeDc1YmVCeDk0bThOZ1JsZ0d2Qk9aR0IxbkxGT0NGMFNHVXYxSFJBVlE3WndBZmlBN1JndEhBanlqSEhkVnM0SStCeDk4dThOZ1IzZzVjR3gxaUFQK0lmN2VyQ2M0QXFFamZBOTRDcklrTzBxUytPLzh5RFA0QTN5SDIzTlpwQnVBYndMZWpRd3ppeE9nQVVyUFdXTFdvUzBrRGFsbU1CczRuL3J3MVd3dUJUWHB5SnBwM1BmSG5vWWc2azN4dm52WWcvdnhZelZjb3A0bFVoTDhBSndBcm9vTTBxVXpUL24wK0Fqd1dlUHlSd0hNQ2oxK1VINU1XL2EyT0RqS0lrNk1EU0sySTdzQ3MzdGJEd0ZUS28yeDMvbXVBV2FRQk9OSjA0czlEcitzODhyNXAyZ0JZVFB4NXNwcXZVTGxPWTZrYVZwRHUvR2RIQjJsU21WYjc5N2tQZUMzcEszU1I5ZzArZnE5ZFFEclBPVzkzL0hwU0V5Q1ZSblFIWnZXdVRxRTh5bmpuUDQvWWovLzA5MDNpejBldjZuenlYNzh5Q3JpYitITmx0VmExRjMwQnJON1VEeW1Qc2c3K2UvVGlaTFRwVnVMUFNTK3FESU0vcEZmL29zK1YxWHJWWHZRRnNMcGZkMUtlcVVnSC84NU5JLzZjOUtMS012aVBBRzRpL254WnJWY28xd0NvMjFZQ3J3TWVqdzdTaEw3Vi9tVjY1ajhQT0JLNE9UcElQOGRGQitpQkM0RFhVSTQzVjE1QldvUXBsVTUwQjJaMXQyWlNEcU5KZjhsSG42OVdhaTU1M2ZuMytRM3g1NmFiVlpZN2YwaHZmOXhHL0RtejJxdmFpNzRBVnZmcU92SitUYXFQMC83ZHN4R3dsUGp6MDYwcTArQVBjQkx4NTh4cXYyb3YrZ0pZM2FrVndON2t6enYvN25vNzhlZW5XMVcyd1g4OGNDL3g1ODFxdjJvditnSlkzYWxQcjMxaE0rVGczMzAzRW4rT3VsRmxHL3dCUGs3OGViTTZxOXFMdmdCVzUzVVhNR0h0QzVzWnAvMjc3d0RpejFFM3FveUQvelRnS2VMUG5kVloxVjcwQmJBNnI5ejN6SGZ3NzQwemlEOVBuVllaQjMrQWk0Zy9kMWJuVlh2UkY4RHFyR2F0ZTBtejRyUi9iMndITENQK1hIVlNaUjM4WDB2OHViTzZVN1VYZlFHczltc1ZzTSs2bHpRYkR2NjljenJ4NTZxVEt1dmdQeGw0aFBqelozV25haS82QWxqdDE1a0RYTTljT08zZk85c0R5NGsvWCsxV1dRZC9nSE9KUDM5Vzk2cjJvaStBMVY2dEFKNDF3UFhNZ1lOL2IzMmIrUFBWYnBWNThIOFQ4ZWZQNm03Vlh2UUZzTnFyTXdhNm1CbHcyciszOWlOdDl4eDl6dHFwTWcvK3p3SVdFMzhPcmU1VzdVVmZBS3YxV2dIc09OREZERmJHTy84eURmNmpLTzk3LzJVZS9DZFEzdk51RFYyMUYzMEJyTmJybkFHdlpLeVJ3SStKUHpldFZKa0dmNEQzRW4vTzJxa3lELzRBM3lmK0hGcTlxZHFMdmdCVzYvVzhBYTlrck04VGYxNWFxYklOL3RPQUo0Zy9iNjFXMlFmL2R4Ti9EcTNlVmUxRlh3Q3J0YnB5NE1zWTZwK0pQeSt0Vk5rRy96SEFOY1NmdDFhcjdJUC9ETkxqdHVqemFQV3VhaS82QWxpdDFXc0d2b3hoRHFWY0c5S1ViZkFIK0JMeDU2M1Zxc0xnWCtaWExhM21xdmFpTDREVmZEMEtqQjM0TW9iWW5ISnRpbExHd1g4R3NKcjRjOWRLT2ZoYlphbmFpNzRBVnZQMXBVR3VZWlNmRUg5T21xMHlEdjU3QUF1SlAzZXRsSU8vVmFhcXZlZ0xZRFZmMHdlNWhoRk9JdjU4TkZ0emdkMTdjeHA2WmcvUzVrVFI1NjZWY3ZDM3lsYTFGMzBCck9icVQ0TmR3QUJiQWZPSlB5Zk5sSU4vTWVYZ2I1V3hRcTBYSFVDbDhlUG9BUDE4R2RnME9rUVQ1Z0V2Qkc2SkR0S0NQWURMU0IrZEtZc0xTSXRUVjBRSGFkTU0wdDRhWlc1Z3BMWkVkMkJXYzdYTFlCZXdZUHRUamtWcDN2a1hVOTc1VzJXdTJvdStBTmJ3ZGR1Z1Y2OTRzNGcvSDhOVldSZjhPZmdYeThIZnFyM29DMkFOWDU4YjlPb1Y2NlhFbjR2aHlqdi9Zc3JCMzZwQzFWNzBCYkNHcnhjT2V2V0tkUjN4NTJLbzhzNi9tSEx3dDZwU3RSZDlBYXloNnlsZy9LQlhyemdIRUg4dWhpcnYvSXNwQjMrclNoWEt0d0Ewbk44RFM2SkRBQ2RIQnhpQ3EvMkw0V3AvcVdLaU96QnI2UHJJNEpldU1KTkpUVWowdVJpb3ZQTXZwcnp6dDZwWW9ad0IwSEN1amc0QXZCNFlGeDFpQU43NUY4TTdmNm1pb2pzd2EvQmFCV3cwK0tVcnpGWEVuNHUxeXp2L1lzbzdmNnZLVlh2UkY4QWF2UDQ4eEhVcnl1YWtSaVQ2WFBRdkIvOWl5c0hmcW5xRjhoR0FocExEMVBaeDVQVnpPZzg0a2p6T1RiT2M5aStlMC83S1hrNS9zU28vT2V3QWVGeDBnSDRjL0l2aDRDOFZ3QVpBUTdrMStQZ2pnRU9DTS9RcDYrQi9LUTcrUlhMd1YybU1pZzZnclAwdCtQZzdrTWRYLzhvNitIdm5YeXdIZjVXS013QWF5dXpnNCs4WGZQdytiOExCdjljYy9LV0MyUUJvTVBPQng0TXo3Qk44ZklCemdZdWlRN1RBd2I5NER2NHFKUnNBRGVhKzZBREFyc0hIWHdLY0VweWhGVDd6TDU2RHYwckxOUUFhek1QUkFZQnRnNDkvSHZCUWNJWm1lZWRmUEFkL2xab3pBQnJNL09nQXdOYkJ4ejg5K1BqTmN2QXZub08vU3M4R1FJTjVMUGo0RTRCTkFvOC9HN2d5OFBqTmN0cS9lQTcrcWdRYkFBMW1RZkR4dHd3K2ZnNGZRUnBPMytDL1dYU1FGamo0UzVsd0RZQUdzelQ0K0dPRGozOU44UEdINDdSLzhSejhWU25PQUdnd3k0S1BILzJ6ZVdmdzhZZDVNNmgyQUFBUTJVbEVRVlRpdEgveEhQeFZPYzRBYURETGc0OGYvYlA1WlBEeEIrT2RmL0VjL0ZWSjBYZFp5dGZLNE9OSC8yd3VDVDcrUUx6ekw1NkR2eW9yK2k1TCtZcitDeTk2QU40dytQaHI4ODYvZUE3K3FyVG91eXpsSzNvUjNxUEJ4OThwK1BqOU9mZ1h6OEZmbFdjRG9NR01DVDcrQW1CMTRQRjNEangyZjA3N0Y4L0JYN1ZnQTZEQlRBZysvaXBpTnlNNkl2RFlmWHpQdjNnTy9xb05Hd0FOWmxKMEFHTDM0ZCtOTkFCSGNmQXZub08vYXNVR1FJUFpORG9BY0Z2dzhkOFRkRndILytJNStLdDJiQUEwbUJ4bUFHNE5QdjdyZ0gwS1B1YnVPUGdYemNGZnRXUURvTUZFNzhVUGNFdnc4ZGNEdmdlc1g5RHhkaWV0OW5md0w0NkR2MnJMQmtDRG1Sb2RnUGdHQUdBWDBpRFg2OWNpSGZ5TDUrQXZCVnRqWlZzNXZIcDJQL0huWVEzd2UzcDNQdllBNW1id1oyeWx6cWZjQStjTTBuYlgwZWZScW5lRmNnWkFRNWthSFFDNEpEcEF3eUhBRmNEMlhmNTlEd04raTNmK1JmTE9YOElHUUVON1RuUUE0T0xvQVAzc0RGd0hITk9GMzJzRThDNVNnN05KRjM2L29qajRTK3FhNkNrWWEvRDYxQkRYclNpYmtUWUZpajRYL1dzMWFYSGdObTMrbWZZaVBWS0kvbk8wV2s3N1cxWjNxL2FpTDRBMWVGMDB4SFVyMG0rSlB4Y0QxVExnRE5JMC9uQ3phZU9BNDRGZmtCcUk2T3l0bG9PL1pYVy9RbzJJRGtBR0owR0R1bzg4MWdHOEFmaHVkSWhoUEFaY0NmeUZ0S0J2TVdscWYydlNyb0lIQU9QRDBuWEdhWCtwTjBMSFlCc0FEV2NyWXJma0JaZ0lQRXh4NytQcmFRNytVdStFanNFdUF0UndEb3dPQUR4Sm1vSldzUno4cFFxekFkQndjbWdBQUw0UkhhQm1IUHlsaXJNQjBIQU9pUTdROEFmU0h2bnFQUWQvcVFaY0E2RGhyQUttQUF1aWd3Q0hBN09pUTFTY2c3OVVITmNBS0dzamdTT2lRelQ4bHZUK3ZIckR3VitxRVJzQU5lTkYwUUg2K1JET0d2V0NnNzlVTXpZQWFzWkx5T2RuNVhmQTk2TkRWSXlEdjFSRHJnRlFzdzRoYlhTVGc4MkJ2d0liUndlcEFBZC9LWTVyQUZRS0owUUg2T2NSNE1QUklTckF3VitxTVdjQTFLdzVwRzJCVjBjSGFSaEplaTN3OE9BY1plWGdMOFZ6QmtDbHNBMzV2QTBBNmZYRTE1QzJDRlpySFB3bDJRQ29KVytNRHJDV1I0RFhrcG9CTmNmQlh4SmdBNkRXekNCOTRTNG5zNEJQUlljb0NRZC9TWDluQTZCV2pBUCtLVHJFQUQ0S25CMGRJbk1PL3BLZXdVV0FhdFU5d0xQSmI5cDlOUEJUNEpqb0lCbHk4SmZ5NUNKQWxjbzA0TGpvRUFOWUFid1N1Q282U0dZYy9DVU55QVpBN1hoM2RJQkJQQVc4RExnMk9rZ21IUHdsRGNvR1FPMDRERGdvT3NRZzVnTkhBcitKRGhMc2ZCejhKUTNCQmtEdG1oa2RZQWhQQU1jQ1owUUhDZklWNE5VNCtFdkszQnFydEhYSUFOY3pKeU9BajVNV0xFYWZxeUpxS2ZENnJweTVPRE9BNWNTZlM4c3Fva0w1Rm9BNk1RdDRRWFNJSmh3RmZJLzBFYUdxZXBnMGVGNGRIYVFEM3ZtcmJud0xRS1YxQkhtK0ViQzJTNEE5Z0l1amcvVElqMGwvUGdkL1NhVVNQUVZqZFZhM1U1Ni90RWNDYndNZUkvNjhkYU1lSlMzMEt6dW4vYTI2VnUxRlh3Q3I4enBsbmF1YXQ4MkJNMGxmTm93K2QrM1VhdUNId0JiZFBqRUJIUHl0T2xmdFJWOEFxL042RE5oeTdRdGJBb2NDbHhOLy9scXBTNEI5ZW5FeUFqajRXM1d2Mm91K0FGWjM2cnkxTDJ5SkhFcmFOeUQ2SEE1VlY1RVdNMWFGZzc5bEtmd0NXTjJybDFGdSs1SDJEbGhNL0xsY1E5clo4RHRVNTQ2L2o0Ty9aYVVLNVd1QTZxYjdTYXZSRjBZSDZkQkUwaUQxQnVENXBNV0RSVmtGWEFsY0NKd0ZMQ2p3MkVWd3RiLzB0TkF4MkFaQTNYWTJjR0owaUM3YWhMUzE4TkdObXRxRFl6d01YQUZjQlB5Q3RKMXhGVG40Uzg5a0F4QWRRRjEzSXFrUnFLS3B3TzdBYm8xZmR5V3R4cC9NOERNRkR3TVBBbk9BMjREcmdPdEpNeWRWNStBdnJjc0dJRHFBdW00aHNDY3dPenBJd1NZM2FtTGozeDlyL0xvQ2VJVDAzTHVPSFB5bGdka0FSQWRRVDl4RSttTGdrdWdnQ3VYZ0x3M09yWUJWU1hzQ1g0NE9vVkFPL2xMR2JBRFVTMjhCM2hRZFFpRWMvS1hNK1FoQXZiWWNlREhweTRHcUJ3ZC9xVG11QVlnT29KNmJUMW9QOExmb0lPbzVCMytwZWE0QlVPVk5BbjRGVElrT29wNXk4SmRLeEFaQVJka0IrQ213UVhRUTlZU0R2MVF5TmdBcTBnR2ttWUNKdy8ySEtoVUhmNm1FYkFCVXRJT0JDNEN4MFVIVUZRNytVa25aQUNqQzBjQ1BzQWtvdTFmaDRDK1ZsbThCS05JczBpZUVuNGdPb3BiOUUvQmRZRlIwRUtuRWZBdEF0WFVFOEV0Z3crZ2dhc25Kd0prNCtFdWxaZ09nYUllU1pnSzJqQTZpWVkwQVBnNThIZi91a0VyUFJ3REt4WVBBc2NDTjBVRTBvREhBZDBoVC81SzZ3NTBBb3dNb0c0dUJFNENMbzRQb0dTYVIzdHc0TERxSVZER3VBWkFhTmlTdENaaUpQNXU1MkJPNEZnZC9xWEtjQVZDdUxnSk9BaFpHQjZteDF3SGZCQ1pFQjVFcXloa0FhUURIQWRjQWUwY0hxYUdKd0xlQnMzRHdseXJMQmtBNTJ4bjRBK21Sd01qWUtMV3hIM0FEOEtib0lKSjZ5MGNBS292TGdUY0E5OGJHcUt4UndBZUJqK0RPZmxKUmZBc2dPb0JLNHluU2UraWZCMVlGWjZtU3ZZRFRnWDJqZzBnMVl3TVFIVUNsY3ozd0w3aG5RS2MyQVA0RGVEcytZcEVpdUFoUWF0RytwQ2JnTEdDTDRDeGx0QjdwRFl2YmdYZmg0Qy9Wa2pNQUtydkZ3S2VBTHdGTGc3T1V3UkhBRjBqVC9wSmkrUWdnT29BcVlTNXdHdkFWWUVsd2xod2RCSnhLMm01WlVoNXNBS0lEcUZJZUFENU4rbFR0azhGWmN2Qjg0TitCbzZLRFNGcUhEVUIwQUZYU1l1Qi9TRzhNM0I4YnBYQ2pnWmNEN3dFT0NNNGlhWEEyQU5FQlZHa3JnQXVCTTRCTGdOV3hjWHBxQitDZkc3VjFjQlpKdzdNQmlBNmcycmlQOUdqZ0hPQ3Z3Vm02WlNQZ1phUk5rbzRnai85UFMycU9EVUIwQU5YU3JjQ1BTWis1dlNVNFM2c21rUmJ6dlpMMGJIOXNiQnhKYmJJQmlBNmcycHNEWEF6OEJwZ0Z6SXVOczQ0eHdQN0EwY0NMZ0gzdzNYMnBDbXdBb2dOSWEva2JjSFdqL2dqOG1iUU5jUkhXSXozTDN3TTRzRkg3QU9NS09yNms0dGdBUkFlUWhyRWF1SWYwcU9CdVlIYmozKzhESGdYbTAvd21ST3NCbTVLbThiY0dwalpxQjJBWDRMbjRDVjZwTG13QW9nTklYZkFVcVJGWVFXb1lGalgrOTNIQStNWS9iMHdhL0NVSmJBQnNBQ1JKdGVUSGdDUkpVckZzQUNSSnFpRWJBRW1TYXNnR1FKS2tHcklCa0NTcGhtd0FKRW1xSVJzQVNaSnF5QVpBa3FRYXNnR1FKS21HYkFBa1Nhb2hHd0JKa21vb2h3WmdWWFFBU1pJS0ZqNzI1ZEFBTEk4T0lFbFN3WlpGQjdBQmtDU3BlRFlBMkFCSWt1ckhCb0FNVG9Ja1NRVUx2L25Ob1FGWUhCMUFrcVNDTFlvT2tFTUQ4R2gwQUVtU0NoWSs5dGtBU0pKVXZQQ3h6d1pBa3FUaWhZOTlPVFFBODZNRFNKSlVzQVhSQVhKb0FPWkVCNUFrcVdEM1JRZklvUUc0SnpxQUpFa0ZDeC83YkFBa1NTcmV2ZEVCUmtRSEFNWUJUNUZIRmttU2VtMDFNSUhnamZCeW1BRllDandVSFVLU3BJSThRQWE3NE9iUUFBRGNHaDFBa3FTQzNCSWRBUEpwQUc2T0RpQkpVa0d5R1BOeWFRQ3k2SVlrU1NwQUZtTmVMZzFBRnQyUUpFa0Z5R0xNeTJYbC9SalNsNUhHUlFlUkpLbUhsZ0FiQVN1aWcrUXlBN0FjdUQ0NmhDUkpQZllITWhqOElaOEdBT0RLNkFDU0pQWFlGZEVCK3RnQVNKSlVuR3pHdWx6V0FBQk1BdWFSVnlaSmtycGxOV21zV3hnZEJQS2FBWmdQL0NrNmhDUkpQWEk5bVF6K2tGY0RBUERMNkFDU0pQWElyNklEOUpkYkE1RFZ5WkVrcVl1eUd1TnllOTQrRXBnTGJCb2RSSktrTG5vVTJBSllGUjJrVDI0ekFLdUFpNk5EU0pMVVpiOG1vOEVmOG1zQUFNNkxEaUJKVXBlZEd4MWdiYms5QW9DMEhmRERwSzBTSlVrcXU0V2s2ZjlsMFVINnkzRUdZQ2x3VVhRSVNaSzY1RUl5Ry93aHp3WUE0RWZSQVNSSjZwTHNwdjhoejBjQUFLT0ErNEF0bzROSWt0U0JoNER0Z0pYUlFkYVc2d3pBU3VETTZCQ1NKSFhvTzJRNCtFTytNd0FBT3dCM2tHK1RJa25TVU5ZQXp3YnVpZzR5a0p3SDE3dUJXZEVoSkVscTB5VmtPdmhEM2cwQXdOZWpBMGlTMUtadlJBY1lTczZQQUNBMUtMY0R6NG9PSWtsU0MvNEc3RUw2QkhDV2NwOEJXQTE4S1RxRUpFa3RPbzJNQjMvSWZ3WUFZQUl3RzVnY0hVU1NwQ2JNQmJZSGxnVG5HRkx1TXdBQVQrRmFBRWxTZVh5TnpBZC9LTWNNQUtUdkF0eU5ud21XSk9WdFB1azE5c1hSUVlaVGhoa0FnRVhBRjZORFNKSTBqTTlSZ3NFZnlqTURBTEErNlgzS0tkRkJKRWthd0R4Z1IrRHg2Q0ROR0JrZG9BWExHNzhlSFpwQ2txU0JmUWo0WFhTSVpwVnBCZ0JnREhBcmFXdEZTWkp5Y1Nld0d4bCs5bmN3WlZrRDBHYzU4UDdvRUpJa3JlVVVTalQ0US9sbUFQcjhCaDhGU0pMeWNDbHdWSFNJVnBXMUFkZ2R1QUVZRlIxRWtsUnJ5NEU5Z2I5RUIybFZtUllCOWpjWG1BZ2NFaDFFa2xSci93bWNGeDJpSFdXZEFRQVlDOXhJK3RpQ0pFbEZ1NTEwOTc4ME9rZzd5cllJc0w5bHdNbkFtdWdna3FUYVdRMjhtWklPL2xEZVJ3QjlaZ05iQXZ0R0I1RWsxY3JYZ1c5R2graEVtUjhCOUprSS9CSFlPVHFJSktrVy9rSzY4WHdxT2tnbnl2d0lvTStUd0d0NWVxZEFTWko2WlJsd0lpVWYvS0g4andENlBBU3NBbzZNRGlKSnFyUVBBQmRHaCtpR0tqd0M2TE1lYVlPZ0YwWUhrU1JWMHErQWwxS1J4ZWRWYWdBQU5nV3VCNlpGQjVFa1ZjcHNZQjlnZm5TUWJxbkNHb0QrRmdBemdDWFJRU1JKbGJHVU5MWlVadkNINnF3QjZPOWg0RUhnSDZLRFNKSXE0WTJrUjh5VlVzVUdBT0FtWUVQZ3dPZ2drcVJTK3d4d1duU0lYcWphR29EKzFpUHR6endqT29na3FaVE9BMTVEMnZXdmNxcmNBQUNNQnk3RG1RQkpVbXV1Qlk2Z0F1LzdENmJxRFFEQUZPQUs0Tm5SUVNSSnBmQlg0RkRnMGVnZ3ZWUzF0d0FHTWhkNEFYQlBkQkJKVXZidUExNU14UWQvcU1jTVFKOGRnZDhCVzBVSGtTUmw2UUhnTU9EdTZDQkZxTU1NUUorN2dLT0JlZEZCSkVuWm1Rc2NSVTBHZjZoWEF3QndHNm03ZXlBNmlDUXBHdytUdmlYemwrZ2dSYXJUSTREK3RpZTlIYkJEY0E1SlVxelpwRy9JM0JrZHBHaDFtd0hvY3kvcDlZNDdnbk5Ja3VMY0RoeENEUWQvcUc4REFHbWw1NEdrVndRbFNmVnlEZW1SOEp6b0lGSHEzQUJBK3JEREM0Rnpvb05Ja2dwelB1bjE4TG5SUVNKVjlWc0FyVmdGWE5ENDU4TURjMGlTZXU4cndKdUJGZEZCb3RrQVBPMjNwRmNGWHd5TWpvMGlTZXF5cGNCYmdVOEJhNEt6WktHdWJ3RU1aVS9Tak1DMDZDQ1NwSzY0RDNnbGNGMTBrSnpVZlEzQVFHNEM5Z011amc0aVNlcllyNEM5Y1BCZmg0OEFCcllFK0FId0dHbWhpT2RKa3NwbEJmQUowclIvWmIvbzF3a2ZBUXh2TitCc1lQZm9JSktrcHZ3VmVDMXdZM1NRbkhsbk83eTV3Rm5BSnNDKzJEUkpVcTVXQTE4SFRnRHVEODZTUFFlejFod01mQXZZSlRxSUpPa1o3Z1QrQlpnVkhhUXNuQUZvemYzQWQwaDdCeHlFNTArU29xMEVQZ2U4bXBwdTZkc3Vad0RhdHl2d1JkTG5JeVZKeGZzTjhHNXE5aFcvYnZFMXdQYmRCaHhOYWdEK0hKeEZrdXJrRHVCVnBJM2JIUHpiNUJSMjUrNG1QUlo0RE5nYm1CZ2JSNUlxYXk3d0llQ2ZnVnVDczVTZWp3QzZheUx3ZHVEOXdLYkJXU1NwS2hZQVh3Vk9BeFlIWjZrTUc0RGUyQWc0aGRRTVRBN09Ja2xsTlk4MDhIOFpCLzZ1c3dIb3JiR2tsYW1uQXM4SnppSkpaWEUzNmF0OTM4SmQvSHJHQnFBWTZ3RXZCLzRWT0JJWFgwclMybFlEbHdMZkFIN1crSGYxa0ExQThiWUJUZ1RlQm13WG5FV1NvajFFMm0zMWROS2R2d3BpQXhCbkZPazF3bGNELzBCYU55QkpkYkFRK0Fsd0xuQUphVE1mRmN3R0lBOWpTZSt6dmdwNEVUQXBObzRrZGQyandLK0I4MGdiK0N5TGpTTWJnUHlNQlBZSGptblUzcmhtUUZMNXJBYXVKdzM2djJ6ODg2clFSSG9HRzREOGJRQThEemlFOURHaWc0SHhvWWtrYVYwcmdKdUJLNEVyZ010STcrOHJVellBNVRPYTlEWEMzWUU5Z09uQWMwbUxDNzJla25wdE5UQ0h0QVg2bjBnNzh0MUMycEozUldBdXRjZ0JvenJHQWxPQmFjRDJwSVpnTXJCWjQ5ZEp3QVJnUTlKamh0SEEraEZCSldYbENkTEF2WXEwMmM1VHdIelNNL3Q1alYvbkFQY0E5d0t6OGZsOUpmd2ZzTFIyV2RGbTFYWUFBQUFBU1VWT1JLNUNZSUk9XCIgLz5cbiAgICAgIDwvZGVmcz5cbiAgICA8L3N2Zz5cbiAgICBAaWYoY29weU9mSW5wdXRBbGxGaWxlcyAmJiBjb3B5T2ZJbnB1dEFsbEZpbGVzLmxlbmd0aCA+IDApe1xuICAgIDxzcGFuIChjbGljayk9XCJvcGVuUG9wdXAoKVwiIHN0eWxlPVwidGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7IGN1cnNvcjogcG9pbnRlcjtcIj5cbiAgICAgIHt7IGNvcHlPZklucHV0QWxsRmlsZXMubGVuZ3RoID09PSAxID8gJzEgRmlsZSBBdHRhY2hlZCcgOiAnKycgKyBjb3B5T2ZJbnB1dEFsbEZpbGVzLmxlbmd0aCArICcgRmlsZXMgQXR0YWNoZWQnIH19XG4gICAgPC9zcGFuPlxuICAgIH1cbiAgICBAZWxzZSBpZihtb2RlID09PSAnZWRpdCcpIHtcbiAgICA8ZGl2PiBBZGQgZmlsZXMgPC9kaXY+XG4gICAgfVxuICAgIEBlbHNlIHtcbiAgICA8ZGl2PiBObyBmaWxlcyBhdHRhY2hlZDwvZGl2PlxuICAgIH1cbiAgICA8YnV0dG9uICpuZ0lmPVwibW9kZSA9PT0gJ2VkaXQnICYmICFxdWVzdGlvbi5pc1JlYWRPbmx5XCIgXG4gICAgICAgICAgICAoY2xpY2spPVwiZmlsZUlucHV0LmNsaWNrKClcIiBcbiAgICAgICAgICAgIGNsYXNzPVwiYWRkLWJ0bi1pY29uXCJcbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIj5cbiAgICAgIDxzcGFuIGNsYXNzPVwicGx1cy1pY29uXCI+Kzwvc3Bhbj5cbiAgICA8L2J1dHRvbj5cblxuICAgIDxpbnB1dCAjZmlsZUlucHV0IHR5cGU9XCJmaWxlXCIgbmFtZT1cImZpbGVVcGxvYWRcIiBtdWx0aXBsZT1cIm11bHRpcGxlXCIgW2FjY2VwdF09XCJhbGxvd2VkRmlsZVR5cGVzLmpvaW4oJywnKVwiXG4gICAgICAgICAgc3R5bGU9XCJkaXNwbGF5Om5vbmU7XCIgKGNoYW5nZSk9XCJ1cGxvYWRNdWx0aXBsZUZpbGVzKCRldmVudClcIiAvPlxuICA8L2Rpdj5cbiAgPCEtLSBTS1MxM0pVTjI1IGVkaXQgaWNvbiAtLT5cbiAgPHN2ZyAqbmdJZj1cIm1vZGUgIT09ICdlZGl0JyAmJiAhdmlld0VkaXQgJiYgIXF1ZXN0aW9uLmlzUmVhZE9ubHlcIiBjbGFzcz1cImVkaXQtaWNvblwiIChjbGljayk9XCJ2aWV3RWRpdENsaWNrKHF1ZXN0aW9uKVwiXG4gICAgd2lkdGg9XCIxM1wiIGhlaWdodD1cIjE0XCIgdmlld0JveD1cIjAgMCAxMyAxNFwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxuICAgIDxwYXRoIGZpbGwtcnVsZT1cImV2ZW5vZGRcIiBjbGlwLXJ1bGU9XCJldmVub2RkXCJcbiAgICAgIGQ9XCJNMS45OTk4NyA5LjAwMTdMNC4zOTYwMiAxMS4zOTc5QzQuNTAzNzEgMTEuNTA1NSA0LjY2NTI1IDExLjUwNTUgNC43NzI5NCAxMS4zOTc5TDEwLjc0OTkgNS4zOTQwMUMxMC44NTc2IDUuMjg2MzEgMTAuODU3NiA1LjEyNDc3IDEwLjc0OTkgNS4wMTcwOEw4LjM4MDY0IDIuNjQ3ODVDOC4yNzI5NCAyLjU0MDE2IDguMTExNDEgMi41NDAxNiA4LjAwMzcxIDIuNjQ3ODVMMS45OTk4NyA4LjY1MTdDMS44OTIxNyA4Ljc1OTM5IDEuODkyMTcgOC45MjA5MyAxLjk5OTg3IDkuMDAxN1pNOS4xNjE0IDEuNTQ0MDFDOS4wNTM3MSAxLjY1MTcgOS4wNTM3MSAxLjgxMzI0IDkuMTYxNCAxLjkyMDkzTDExLjUzMDYgNC4yOTAxNkMxMS42MzgzIDQuMzk3ODUgMTEuNzk5OSA0LjM5Nzg1IDExLjkwNzYgNC4yOTAxNkwxMi41ODA2IDMuNjE3MDhDMTMuMDExNCAzLjIxMzI0IDEzLjAxMTQgMi41NjcwOCAxMi41ODA2IDIuMTM2MzFMMTEuMzE1MyAwLjg3MDkyOEMxMC44ODQ1IDAuNDQwMTU5IDEwLjIxMTQgMC40NDAxNTkgOS43ODA2MyAwLjg3MDkyOEw5LjE2MTQgMS41NDQwMVpNMC4wMDc1NTg2MiAxMi45ODYzQy0wLjA0NjI4NzUgMTMuMjU1NSAwLjE5NjAyIDEzLjQ5NzkgMC40NjUyNTEgMTMuNDQ0TDMuMzk5ODcgMTIuNzQ0QzMuNTA3NTYgMTIuNzE3MSAzLjU4ODMzIDEyLjY2MzIgMy42NDIxNyAxMi42MDk0TDMuNjk2MDIgMTIuNTU1NUMzLjc0OTg3IDEyLjUwMTcgMy43NzY3OSAxMi4zMTMyIDMuNjY5MSAxMi4yMDU1TDEuMjQ2MDIgOS43ODI0N0MxLjEzODMzIDkuNjc0NzggMC45NDk4NjYgOS43MDE3IDAuODk2MDIgOS43NTU1NEwwLjg0MjE3NCA5LjgwOTM5QzAuNzYxNDA1IDkuODkwMTYgMC43MzQ0ODIgOS45NzA5MyAwLjcwNzU1OSAxMC4wNTE3TDAuMDA3NTU4NjIgMTIuOTg2M1pcIlxuICAgICAgZmlsbD1cIiNCMEFEQUJcIiAvPlxuICA8L3N2Zz5cbiAgPCEtLSBTS1MxM0pVTjI1IHNhdmUgYW5kIGNhbmNlbCBpY29ucyAtLT5cbiAgPGRpdiAqbmdJZj1cInZpZXdFZGl0XCIgKG1vdXNlZW50ZXIpPVwiaXNTYXZlSG92ZXJlZCA9IHRydWVcIiAobW91c2VsZWF2ZSk9XCJpc1NhdmVIb3ZlcmVkID0gZmFsc2VcIlxuICAgIHN0eWxlPVwicGFkZGluZy1yaWdodDogNXB4O1wiPlxuICAgIDxzdmcgKm5nSWY9XCIhaXNTYXZlSG92ZXJlZFwiIHdpZHRoPVwiMTJcIiBoZWlnaHQ9XCIxMlwiIHZpZXdCb3g9XCIwIDAgMTIgMTJcIiBmaWxsPVwibm9uZVwiXG4gICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XG4gICAgICA8cGF0aFxuICAgICAgICBkPVwiTTUuOTUwMiAwLjVDOC45NjAwNiAwLjUwMDEwNiAxMS40MDA0IDIuOTQwMzEgMTEuNDAwNCA1Ljk1MDJDMTEuNDAwMyA4Ljk1OTk5IDguOTU5OTkgMTEuNDAwMyA1Ljk1MDIgMTEuNDAwNEMyLjk0MDMxIDExLjQwMDQgMC41MDAxMDYgOC45NjAwNiAwLjUgNS45NTAyQzAuNSAyLjk0MDI0IDIuOTQwMjQgMC41IDUuOTUwMiAwLjVaXCJcbiAgICAgICAgc3Ryb2tlPVwiIzgzN0Y4RVwiIC8+XG4gICAgICA8cGF0aFxuICAgICAgICBkPVwiTTguODgxMTEgMy44NDU4M0M4LjgzMjY5IDMuNzk3MiA4Ljc3NTEzIDMuNzU4NiA4LjcxMTc2IDMuNzMyMjdDOC42NDgzOCAzLjcwNTk0IDguNTgwNDMgMy42OTIzOCA4LjUxMTggMy42OTIzOEM4LjQ0MzE3IDMuNjkyMzggOC4zNzUyMSAzLjcwNTk0IDguMzExODQgMy43MzIyN0M4LjI0ODQ2IDMuNzU4NiA4LjE5MDkxIDMuNzk3MiA4LjE0MjQ5IDMuODQ1ODNMNC44MjY5IDcuMTYzNDdMMy4zNTI1MyA1LjY4OTFDMy4zMDQwMyA1LjY0MDYgMy4yNDY0NiA1LjYwMjEzIDMuMTgzMDkgNS41NzU4OEMzLjExOTcyIDUuNTQ5NjQgMy4wNTE4MSA1LjUzNjEzIDIuOTgzMjIgNS41MzYxM0MyLjkxNDYzIDUuNTM2MTMgMi44NDY3MiA1LjU0OTY0IDIuNzgzMzUgNS41NzU4OEMyLjcxOTk5IDUuNjAyMTMgMi42NjI0MSA1LjY0MDYgMi42MTM5MSA1LjY4OTFDMi41NjU0MSA1LjczNzYgMi41MjY5NCA1Ljc5NTE4IDIuNTAwNjkgNS44NTg1NEMyLjQ3NDQ1IDUuOTIxOTEgMi40NjA5NCA1Ljk4OTgyIDIuNDYwOTQgNi4wNTg0MUMyLjQ2MDk0IDYuMTI3IDIuNDc0NDUgNi4xOTQ5MSAyLjUwMDY5IDYuMjU4MjhDMi41MjY5NCA2LjMyMTY1IDIuNTY1NDEgNi4zNzkyMiAyLjYxMzkxIDYuNDI3NzJMNC40NTY3NyA4LjI3MDU4QzQuNTA1MTkgOC4zMTkyMiA0LjU2Mjc0IDguMzU3ODEgNC42MjYxMiA4LjM4NDE0QzQuNjg5NSA4LjQxMDQ3IDQuNzU3NDUgOC40MjQwMyA0LjgyNjA4IDguNDI0MDNDNC44OTQ3MSA4LjQyNDAzIDQuOTYyNjYgOC40MTA0NyA1LjAyNjA0IDguMzg0MTRDNS4wODk0MiA4LjM1NzgxIDUuMTQ2OTcgOC4zMTkyMiA1LjE5NTM5IDguMjcwNThMOC44ODExMSA0LjU4NDQ1QzguOTI5NzQgNC41MzYwMyA4Ljk2ODM0IDQuNDc4NDggOC45OTQ2NyA0LjQxNTFDOS4wMjEgNC4zNTE3MyA5LjAzNDU2IDQuMjgzNzcgOS4wMzQ1NiA0LjIxNTE0QzkuMDM0NTYgNC4xNDY1MSA5LjAyMSA0LjA3ODU2IDguOTk0NjcgNC4wMTUxOEM4Ljk2ODM0IDMuOTUxOCA4LjkyOTc0IDMuODk0MjUgOC44ODExMSAzLjg0NTgzWlwiXG4gICAgICAgIGZpbGw9XCIjODM3RjhFXCIgLz5cbiAgICA8L3N2Zz5cblxuICAgIDxzdmcgKm5nSWY9XCJpc1NhdmVIb3ZlcmVkXCIgKGNsaWNrKT1cInNhdmVDaGFuZ2VzKClcIiB3aWR0aD1cIjEyXCIgaGVpZ2h0PVwiMTNcIiB2aWV3Qm94PVwiMCAwIDEyIDEzXCIgZmlsbD1cIm5vbmVcIlxuICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxuICAgICAgPHBhdGhcbiAgICAgICAgZD1cIk01Ljk1IDEyLjgwMDRDOS4yMzYwOSAxMi44MDA0IDExLjkgMTAuMTM2NSAxMS45IDYuODUwMzlDMTEuOSAzLjU2NDMgOS4yMzYwOSAwLjkwMDM5MSA1Ljk1IDAuOTAwMzkxQzIuNjYzOTEgMC45MDAzOTEgMCAzLjU2NDMgMCA2Ljg1MDM5QzAgMTAuMTM2NSAyLjY2MzkxIDEyLjgwMDQgNS45NSAxMi44MDA0WlwiXG4gICAgICAgIGZpbGw9XCIjMjU5NTY2XCIgLz5cbiAgICAgIDxwYXRoXG4gICAgICAgIGQ9XCJNOC44ODExMSA0Ljc0NjIyQzguODMyNjkgNC42OTc1OSA4Ljc3NTEzIDQuNjU4OTkgOC43MTE3NiA0LjYzMjY2QzguNjQ4MzggNC42MDYzMyA4LjU4MDQzIDQuNTkyNzcgOC41MTE4IDQuNTkyNzdDOC40NDMxNyA0LjU5Mjc3IDguMzc1MjEgNC42MDYzMyA4LjMxMTg0IDQuNjMyNjZDOC4yNDg0NiA0LjY1ODk5IDguMTkwOTEgNC42OTc1OSA4LjE0MjQ5IDQuNzQ2MjJMNC44MjY5IDguMDYzODZMMy4zNTI1MyA2LjU4OTQ5QzMuMzA0MDMgNi41NDA5OSAzLjI0NjQ2IDYuNTAyNTIgMy4xODMwOSA2LjQ3NjI3QzMuMTE5NzIgNi40NTAwMyAzLjA1MTgxIDYuNDM2NTIgMi45ODMyMiA2LjQzNjUyQzIuOTE0NjMgNi40MzY1MiAyLjg0NjcyIDYuNDUwMDMgMi43ODMzNSA2LjQ3NjI3QzIuNzE5OTkgNi41MDI1MiAyLjY2MjQxIDYuNTQwOTkgMi42MTM5MSA2LjU4OTQ5QzIuNTY1NDEgNi42Mzc5OSAyLjUyNjk0IDYuNjk1NTcgMi41MDA2OSA2Ljc1ODkzQzIuNDc0NDUgNi44MjIzIDIuNDYwOTQgNi44OTAyMiAyLjQ2MDk0IDYuOTU4OEMyLjQ2MDk0IDcuMDI3MzkgMi40NzQ0NSA3LjA5NTMxIDIuNTAwNjkgNy4xNTg2N0MyLjUyNjk0IDcuMjIyMDQgMi41NjU0MSA3LjI3OTYxIDIuNjEzOTEgNy4zMjgxMUw0LjQ1Njc3IDkuMTcwOTdDNC41MDUxOSA5LjIxOTYxIDQuNTYyNzQgOS4yNTgyIDQuNjI2MTIgOS4yODQ1M0M0LjY4OTUgOS4zMTA4NiA0Ljc1NzQ1IDkuMzI0NDIgNC44MjYwOCA5LjMyNDQyQzQuODk0NzEgOS4zMjQ0MiA0Ljk2MjY2IDkuMzEwODYgNS4wMjYwNCA5LjI4NDUzQzUuMDg5NDIgOS4yNTgyIDUuMTQ2OTcgOS4yMTk2MSA1LjE5NTM5IDkuMTcwOTdMOC44ODExMSA1LjQ4NDg0QzguOTI5NzQgNS40MzY0MiA4Ljk2ODM0IDUuMzc4ODcgOC45OTQ2NyA1LjMxNTQ5QzkuMDIxIDUuMjUyMTIgOS4wMzQ1NiA1LjE4NDE2IDkuMDM0NTYgNS4xMTU1M0M5LjAzNDU2IDUuMDQ2OSA5LjAyMSA0Ljk3ODk1IDguOTk0NjcgNC45MTU1N0M4Ljk2ODM0IDQuODUyMiA4LjkyOTc0IDQuNzk0NjUgOC44ODExMSA0Ljc0NjIyWlwiXG4gICAgICAgIGZpbGw9XCJ3aGl0ZVwiIC8+XG4gICAgPC9zdmc+XG4gIDwvZGl2PlxuICA8ZGl2ICpuZ0lmPVwidmlld0VkaXRcIiAobW91c2VlbnRlcik9XCJpc0Rpc2NhcmRIb3ZlcmVkID0gdHJ1ZVwiIChtb3VzZWxlYXZlKT1cImlzRGlzY2FyZEhvdmVyZWQgPSBmYWxzZVwiPlxuICAgIDxzdmcgKm5nSWY9XCIhaXNEaXNjYXJkSG92ZXJlZFwiIHdpZHRoPVwiMTJcIiBoZWlnaHQ9XCIxMlwiIHZpZXdCb3g9XCIwIDAgMTIgMTJcIiBmaWxsPVwibm9uZVwiXG4gICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XG4gICAgICA8cGF0aFxuICAgICAgICBkPVwiTTcuMDU1NTUgNC4wMDg4M0w1Ljk0IDUuMTI0MzhMNC44MjQ0NSA0LjAwODgzQzQuNTc4NjEgMy43NjI5OSA0LjE4MTkxIDMuNzYyOTkgMy45MzYwNyA0LjAwODgzQzMuNjkwMjMgNC4yNTQ2NyAzLjY5MDIzIDQuNjUxMzcgMy45MzYwNyA0Ljg5NzIxTDUuMDUxNjIgNi4wMTI3NkwzLjkzNjA3IDcuMTI4MzFDMy42OTAyMyA3LjM3NDE1IDMuNjkwMjMgNy43NzA4NSAzLjkzNjA3IDguMDE2NjlDNC4xODE5MSA4LjI2MjUzIDQuNTc4NjEgOC4yNjI1MyA0LjgyNDQ1IDguMDE2NjlMNS45NCA2LjkwMTE0TDcuMDU1NTUgOC4wMTY2OUM3LjMwMTM5IDguMjYyNTMgNy42OTgwOSA4LjI2MjUzIDcuOTQzOTMgOC4wMTY2OUM4LjE4OTc3IDcuNzcwODUgOC4xODk3NyA3LjM3NDE1IDcuOTQzOTMgNy4xMjgzMUw2LjgyODM4IDYuMDEyNzZMNy45NDM5MyA0Ljg5NzIxQzguMTg5NzcgNC42NTEzNyA4LjE4OTc3IDQuMjU0NjcgNy45NDM5MyA0LjAwODgzQzcuNjk4MDkgMy43NzI4NSA3LjMwMDIxIDMuNzcyODUgNy4wNTU1NSA0LjAwODgzWk01Ljk0IDAuMDgyMDMxMkMyLjcwMDE3IDAuMDgyMDMxMiAwLjA4MDg1OTQgMi43MDEzNCAwLjA4MDg1OTQgNS45NDExOEMwLjA4MDg1OTQgOS4xODEwMSAyLjcwMDE3IDExLjgwMDMgNS45NCAxMS44MDAzQzkuMTc5ODMgMTEuODAwMyAxMS43OTkxIDkuMTgxMDEgMTEuNzk5MSA1Ljk0MTE4QzExLjc5OTEgMi43MDEzNCA5LjE3OTgzIDAuMDgyMDMxMiA1Ljk0IDAuMDgyMDMxMlpNNS45NCAxMC42MzY3QzMuMzU0MjYgMTAuNjM2NyAxLjI0NDIyIDguNTI2NjcgMS4yNDQyMiA1Ljk0MTE4QzEuMjQ0MjIgMy4zNTU1MyAzLjM1NDI2IDEuMjQ1NDkgNS45NCAxLjI0NTQ5QzguNTI1NTggMS4yNDU0OSAxMC42MzU2IDMuMzU1NTMgMTAuNjM1NiA1Ljk0MTE4QzEwLjYzNTYgOC41MjY2NyA4LjUyNTU4IDEwLjYzNjcgNS45NCAxMC42MzY3WlwiXG4gICAgICAgIGZpbGw9XCIjQjBBREFCXCIgLz5cbiAgICA8L3N2Zz5cblxuICAgIDxzdmcgKm5nSWY9XCJpc0Rpc2NhcmRIb3ZlcmVkXCIgKGNsaWNrKT1cImRpc2NhcmRDaGFuZ2VzKClcIiB3aWR0aD1cIjEyXCIgaGVpZ2h0PVwiMTNcIiB2aWV3Qm94PVwiMCAwIDEyIDEzXCIgZmlsbD1cIm5vbmVcIlxuICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxuICAgICAgPHBhdGhcbiAgICAgICAgZD1cIk03LjA1NTU1IDQuOTc0NzFMNS45NCA2LjA5MDI2TDQuODI0NDUgNC45NzQ3MUM0LjU3ODYxIDQuNzI4ODcgNC4xODE5MSA0LjcyODg3IDMuOTM2MDcgNC45NzQ3MUMzLjY5MDIzIDUuMjIwNTUgMy42OTAyMyA1LjYxNzI1IDMuOTM2MDcgNS44NjMwOUw1LjA1MTYyIDYuOTc4NjRMMy45MzYwNyA4LjA5NDE5QzMuNjkwMjMgOC4zNDAwMyAzLjY5MDIzIDguNzM2NzMgMy45MzYwNyA4Ljk4MjU3QzQuMTgxOTEgOS4yMjg0MSA0LjU3ODYxIDkuMjI4NDEgNC44MjQ0NSA4Ljk4MjU3TDUuOTQgNy44NjcwMkw3LjA1NTU1IDguOTgyNTdDNy4zMDEzOSA5LjIyODQxIDcuNjk4MDkgOS4yMjg0MSA3Ljk0MzkzIDguOTgyNTdDOC4xODk3NyA4LjczNjczIDguMTg5NzcgOC4zNDAwMyA3Ljk0MzkzIDguMDk0MTlMNi44MjgzOCA2Ljk3ODY0TDcuOTQzOTMgNS44NjMwOUM4LjE4OTc3IDUuNjE3MjUgOC4xODk3NyA1LjIyMDU1IDcuOTQzOTMgNC45NzQ3MUM3LjY5ODA5IDQuNzM4NzMgNy4zMDAyMSA0LjczODczIDcuMDU1NTUgNC45NzQ3MVpNNS45NCAxLjA2MDYyQzIuNzAwMTcgMS4wNjA2MiAwLjA4MDg1OTQgMy42Nzk5MyAwLjA4MDg1OTQgNi45MTk3N0MwLjA4MDg1OTQgMTAuMTU5NiAyLjcwMDE3IDEyLjc3ODkgNS45NCAxMi43Nzg5QzkuMTc5ODMgMTIuNzc4OSAxMS43OTkxIDEwLjE1OTYgMTEuNzk5MSA2LjkxOTc3QzExLjc5OTEgMy42Nzk5MyA5LjE3OTgzIDEuMDYwNjIgNS45NCAxLjA2MDYyWk01Ljk0IDExLjYxNTNDMy4zNTQyNiAxMS42MTUzIDEuMjQ0MjIgOS41MDUyNSAxLjI0NDIyIDYuOTE5NzdDMS4yNDQyMiA0LjMzNDEyIDMuMzU0MjYgMi4yMjQwOCA1Ljk0IDIuMjI0MDhDOC41MjU1OCAyLjIyNDA4IDEwLjYzNTYgNC4zMzQxMiAxMC42MzU2IDYuOTE5NzdDMTAuNjM1NiA5LjUwNTI1IDguNTI1NTggMTEuNjE1MyA1Ljk0IDExLjYxNTNaXCJcbiAgICAgICAgZmlsbD1cIiNGRjM2MzZcIiAvPlxuICAgIDwvc3ZnPlxuICA8L2Rpdj5cbjwvZGl2PlxuXG48ZGl2IGNsYXNzPVwiY29sLWxnLTZcIiBzdHlsZT1cInBhZGRpbmc6MDttYXJnaW4tdG9wOiAxMHB4O1wiPlxuICA8IS0tIEVycm9yIG1lc3NhZ2VzIHNlY3Rpb24gLS0+XG4gIDxkaXYgY2xhc3M9XCJmaWxlLWNvbnN0cmFpbnRzXCIgKm5nSWY9XCJ2YWxpZGF0aW9uRXJyb3JzLmxlbmd0aCA+IDBcIj5cbiAgICA8c21hbGwgY2xhc3M9XCJ0ZXh0LWRhbmdlclwiPlxuICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgZXJyb3Igb2YgdmFsaWRhdGlvbkVycm9yc1wiPnt7IGVycm9yIH19PC9kaXY+XG4gICAgPC9zbWFsbD5cbiAgPC9kaXY+XG48L2Rpdj5cblxuPGRpdiAqbmdJZj1cImVycm9yXCIgY2xhc3M9XCJlcnJvci1tc2dcIiBzdHlsZT1cIm1hcmdpbi10b3A6IDEwcHg7XCI+e3txdWVzdGlvbj8uZXJyb3JNZXNzYWdlfX08L2Rpdj5cblxuPCEtLSBTS1MxMUpVTjI1IEZpbGUgU2VsZWN0aW9uIFBvcHVwIE1vZGFsIC0tPlxuPGRpdiBjbGFzcz1cImZpbGUtcG9wdXAtb3ZlcmxheVwiICpuZ0lmPVwic2hvd1BvcHVwXCIgKGNsaWNrKT1cImNsb3NlUG9wdXAoKVwiPlxuICA8ZGl2IGNsYXNzPVwiZmlsZS1wb3B1cC1tb2RhbFwiIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIj5cbiAgICA8IS0tIEhlYWRlciAtLT5cbiAgICA8ZGl2IGNsYXNzPVwiZmlsZS1wb3B1cC1oZWFkZXJcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJwb3B1cC10aXRsZVwiPnt7cXVlc3Rpb24ucXVlc3Rpb25UZXh0fX08L2Rpdj5cbiAgICAgIDxidXR0b24gY2xhc3M9XCJjbG9zZS1idG5cIiAoY2xpY2spPVwiY2xvc2VQb3B1cCgpXCI+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiY2xvc2UtaWNvblwiPsOXPC9zcGFuPlxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG5cbiAgICA8IS0tIFNLUzExSlVOMjUgQ29udGVudCAtLT5cbiAgICA8ZGl2IGNsYXNzPVwiZmlsZS1wb3B1cC1jb250ZW50XCI+XG4gICAgICA8IS0tIFNLUzExSlVOMjUgTGVmdCBQYW5lbCAtIEZpbGUgTGlzdCAtLT5cbiAgICAgIDxkaXYgY2xhc3M9XCJmaWxlLWxpc3QtcGFuZWxcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZpbGUtaXRlbVwiICpuZ0Zvcj1cImxldCBmaWxlIG9mIGNvcHlPZklucHV0QWxsRmlsZXM7IGxldCBpID0gaW5kZXhcIlxuICAgICAgICAgIFtjbGFzcy5zZWxlY3RlZF09XCJjdXJyZW50RmlsZSA9PT0gZmlsZVwiIChjbGljayk9XCJ2aWV3RmlsZShmaWxlKVwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmaWxlLWljb25cIj5cbiAgICAgICAgICAgIDxpbWcgc3R5bGU9XCJ3aWR0aDogMjhweDtoZWlnaHQ6IDI4cHg7XCIgW3NyY109XCJnZXREb2NJY29uKGZpbGU/Lm5hbWUpXCI+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImZpbGUtZGV0YWlsc1wiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZpbGUtbmFtZVwiPnt7IGZpbGUubmFtZSB9fTwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgKm5nSWY9XCIhcXVlc3Rpb24uaXNSZWFkT25seVwiIGNsYXNzPVwiZmlsZS1hY3Rpb25zXCI+XG4gICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYWN0aW9uLWJ0blwiIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7IGRlbGV0ZUZpbGUoaSlcIiB0aXRsZT1cIkRlbGV0ZVwiPlxuICAgICAgICAgICAgICA8c3ZnIHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBmaWxsPVwibm9uZVwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHN0cm9rZS13aWR0aD1cIjJcIj5cbiAgICAgICAgICAgICAgICA8cG9seWxpbmUgcG9pbnRzPVwiMyw2IDUsNiAyMSw2XCI+PC9wb2x5bGluZT5cbiAgICAgICAgICAgICAgICA8cGF0aCBkPVwibTE5LDZ2MTRhMiwyIDAgMCwxIC0yLDJIN2EyLDIgMCAwLDEgLTIsLTJWNm0zLDBWNGEyLDIgMCAwLDEgMiwtMmg0YTIsMiAwIDAsMSAyLDJ2MlwiPjwvcGF0aD5cbiAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPCEtLSBFbXB0eSBzdGF0ZSAtLT5cbiAgICAgICAgPGRpdiBjbGFzcz1cImVtcHR5LXN0YXRlXCIgKm5nSWY9XCIhY29weU9mSW5wdXRBbGxGaWxlcyB8fCBjb3B5T2ZJbnB1dEFsbEZpbGVzLmxlbmd0aCA9PT0gMFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJlbXB0eS1pY29uXCI+8J+ThDwvZGl2PlxuICAgICAgICAgIDxwPk5vIGZpbGVzIHNlbGVjdGVkPC9wPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPCEtLSBBZGQgQnV0dG9uIC0tPlxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYWRkLWJ0blwiIChjbGljayk9XCJmaWxlSW5wdXQuY2xpY2soKVwiIHRpdGxlPVwiQWRkIGZpbGVcIj5cbiAgICAgICAgICArIEFkZCBNb3JlIEZpbGVzXG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDwhLS0gU0tTMTFKVU4yNSBSaWdodCBQYW5lbCAtIFByZXZpZXcgLS0+XG4gICAgICA8ZGl2IGNsYXNzPVwiZmlsZS1wcmV2aWV3LXBhbmVsXCI+XG4gICAgICAgIEBpZihjdXJyZW50RmlsZSl7XG4gICAgICAgIDxkaXYgY2xhc3M9XCJwcmV2aWV3LWNvbnRlbnRcIj5cbiAgICAgICAgICBAaWYoaXNJbWFnZSAmJiBmaWxlVXJsKXtcbiAgICAgICAgICA8aW1nIFtzcmNdPVwiZmlsZVVybFwiIGNsYXNzPVwicHJldmlldy1pbWFnZVwiIGFsdD1cIkZpbGUgUHJldmlld1wiIC8+XG4gICAgICAgICAgfVxuICAgICAgICAgIEBlbHNlIGlmKGZpbGVVcmwpe1xuICAgICAgICAgIDxpZnJhbWUgW3NyY109XCJmaWxlVXJsXCIgd2lkdGg9XCIxMDAlXCIgaGVpZ2h0PVwiNTAwcHhcIj48L2lmcmFtZT5cbiAgICAgICAgICB9XG4gICAgICAgICAgQGVsc2UgaWYoaXNMb2FkaW5nKXtcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsb2FkaW5nLWluZGljYXRvclwiPlxuICAgICAgICAgICAgICA8cD5Mb2FkaW5nIHByZXZpZXcuLi48L3A+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzcGlubmVyXCI+PC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICB9XG4gICAgICAgICAgQGVsc2Uge1xuICAgICAgICAgIDxkaXY+VW5hYmxlIHRvIGxvYWQgdGhlIGZpbGUgcHJldmlldy48L2Rpdj5cbiAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuICAgICAgICB9XG4gICAgICAgIEBlbHNle1xuICAgICAgICA8ZGl2IGNsYXNzPVwibm8tcHJldmlld1wiPlxuICAgICAgICAgIDxwPlNlbGVjdCBhIGZpbGUgdG8gcHJldmlldzwvcD5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PiJdfQ==