@qbs-origin/origin-form 0.5.0

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 (182) hide show
  1. package/README.md +24 -0
  2. package/esm2022/lib/action-step-handler.mjs +163 -0
  3. package/esm2022/lib/auth-client.service.mjs +69 -0
  4. package/esm2022/lib/enums/label.keys.mjs +721 -0
  5. package/esm2022/lib/form-css.helper.mjs +367 -0
  6. package/esm2022/lib/formly/baseFormlyControlComponent.mjs +52 -0
  7. package/esm2022/lib/formly/baseFormlyStepComponent.mjs +59 -0
  8. package/esm2022/lib/formly/custom-section-separator.component.mjs +32 -0
  9. package/esm2022/lib/formly/form-section-separator.component.mjs +36 -0
  10. package/esm2022/lib/formly/formly-action.mjs +56 -0
  11. package/esm2022/lib/formly/formly-checkbox/formly-checkbox.component.mjs +52 -0
  12. package/esm2022/lib/formly/formly-dictionary-dropdown-tree/formly-dictionary-dropdown-tree.component.mjs +261 -0
  13. package/esm2022/lib/formly/formly-download-documents/formly-download-documents.component.mjs +126 -0
  14. package/esm2022/lib/formly/formly-enrol-card/formly-enrol-card.component.mjs +120 -0
  15. package/esm2022/lib/formly/formly-field-stepper/formly-field-stepper.component.mjs +762 -0
  16. package/esm2022/lib/formly/formly-generate-documents/formly-generate-documents.component.mjs +57 -0
  17. package/esm2022/lib/formly/formly-identification.component.mjs +84 -0
  18. package/esm2022/lib/formly/formly-open-banking/formly-open-banking.component.mjs +590 -0
  19. package/esm2022/lib/formly/formly-paragraph/formly-paragraph.component.mjs +35 -0
  20. package/esm2022/lib/formly/formly-radio/formly-radio-component.mjs +49 -0
  21. package/esm2022/lib/formly/formly-row-fille.mjs +12 -0
  22. package/esm2022/lib/formly/formly-scan-id/formly-scan-id.component.mjs +284 -0
  23. package/esm2022/lib/formly/formly-sign/formly-sign.component.mjs +173 -0
  24. package/esm2022/lib/formly/formly-upload-documents/formly-upload-documents.component.mjs +198 -0
  25. package/esm2022/lib/formly/formly-validate-contact-info/formly-validate-contact-info.component.mjs +124 -0
  26. package/esm2022/lib/formly/formly-view-documents/formly-view-documents.component.mjs +245 -0
  27. package/esm2022/lib/formly/formly-view-offers/formly-view-offers.component.mjs +160 -0
  28. package/esm2022/lib/model-population.helper.mjs +265 -0
  29. package/esm2022/lib/models/application-type.model.mjs +12 -0
  30. package/esm2022/lib/models/application.model.mjs +30 -0
  31. package/esm2022/lib/models/auth/users.model.mjs +2 -0
  32. package/esm2022/lib/models/dictionary.model.mjs +20 -0
  33. package/esm2022/lib/models/flux.model.mjs +105 -0
  34. package/esm2022/lib/models/forms.model.mjs +572 -0
  35. package/esm2022/lib/models/label-info.model.mjs +2 -0
  36. package/esm2022/lib/models/label.model.mjs +2 -0
  37. package/esm2022/lib/models/language.model.mjs +3 -0
  38. package/esm2022/lib/models/list.model.mjs +2 -0
  39. package/esm2022/lib/models/partner.model.mjs +3 -0
  40. package/esm2022/lib/models/treeview.model.mjs +15 -0
  41. package/esm2022/lib/origin-form-auth.service.mjs +40 -0
  42. package/esm2022/lib/origin-form-config.model.mjs +2 -0
  43. package/esm2022/lib/origin-form-token.interceptor.mjs +35 -0
  44. package/esm2022/lib/origin-form.component.mjs +2391 -0
  45. package/esm2022/lib/origin-form.module.mjs +479 -0
  46. package/esm2022/lib/origin-form.service.mjs +14 -0
  47. package/esm2022/lib/others/check-list.database.mjs +55 -0
  48. package/esm2022/lib/others/config-service.mjs +42 -0
  49. package/esm2022/lib/others/dictionary-label-info.mjs +3 -0
  50. package/esm2022/lib/others/environment-type.mjs +21 -0
  51. package/esm2022/lib/others/external-link.directive.mjs +49 -0
  52. package/esm2022/lib/others/flux-helper.mjs +1397 -0
  53. package/esm2022/lib/others/picker.component.mjs +119 -0
  54. package/esm2022/lib/others/translation.pipe.mjs +21 -0
  55. package/esm2022/lib/others/translations-helper.mjs +258 -0
  56. package/esm2022/lib/others/utils.mjs +272 -0
  57. package/esm2022/lib/services/applicationData.service.mjs +145 -0
  58. package/esm2022/lib/services/auth-http.service.mjs +80 -0
  59. package/esm2022/lib/services/dialog.service.mjs +56 -0
  60. package/esm2022/lib/services/dictionary.service.mjs +198 -0
  61. package/esm2022/lib/services/forms.service.mjs +47 -0
  62. package/esm2022/lib/services/labels.service.mjs +29 -0
  63. package/esm2022/lib/services/language.service.mjs +24 -0
  64. package/esm2022/lib/services/open-banking.service.mjs +194 -0
  65. package/esm2022/lib/services/origin-form-signalr-handler.service.mjs +107 -0
  66. package/esm2022/lib/services/origin-form-signalr.service.mjs +105 -0
  67. package/esm2022/lib/services/otp.service.mjs +28 -0
  68. package/esm2022/lib/services/proxy.service.mjs +79 -0
  69. package/esm2022/lib/services/scroll-to-error.service.mjs +369 -0
  70. package/esm2022/lib/services/translation.service.mjs +27 -0
  71. package/esm2022/lib/shared-components/confirmation.component.mjs +34 -0
  72. package/esm2022/lib/shared-components/dictionaries-tree.component.mjs +301 -0
  73. package/esm2022/lib/shared-components/grid.component.mjs +241 -0
  74. package/esm2022/lib/shared-components/treeview/treeview.component.mjs +224 -0
  75. package/esm2022/lib/theme-css.mjs +2254 -0
  76. package/esm2022/lib/theme-injector.service.mjs +26 -0
  77. package/esm2022/public-api.mjs +4 -0
  78. package/esm2022/qbs-origin-origin-form.mjs +5 -0
  79. package/fesm2022/qbs-origin-origin-form.mjs +15215 -0
  80. package/fesm2022/qbs-origin-origin-form.mjs.map +1 -0
  81. package/index.d.ts +5 -0
  82. package/lib/action-step-handler.d.ts +49 -0
  83. package/lib/auth-client.service.d.ts +17 -0
  84. package/lib/enums/label.keys.d.ts +720 -0
  85. package/lib/form-css.helper.d.ts +28 -0
  86. package/lib/formly/baseFormlyControlComponent.d.ts +25 -0
  87. package/lib/formly/baseFormlyStepComponent.d.ts +29 -0
  88. package/lib/formly/custom-section-separator.component.d.ts +6 -0
  89. package/lib/formly/form-section-separator.component.d.ts +10 -0
  90. package/lib/formly/formly-action.d.ts +13 -0
  91. package/lib/formly/formly-checkbox/formly-checkbox.component.d.ts +15 -0
  92. package/lib/formly/formly-dictionary-dropdown-tree/formly-dictionary-dropdown-tree.component.d.ts +45 -0
  93. package/lib/formly/formly-download-documents/formly-download-documents.component.d.ts +22 -0
  94. package/lib/formly/formly-enrol-card/formly-enrol-card.component.d.ts +114 -0
  95. package/lib/formly/formly-field-stepper/formly-field-stepper.component.d.ts +79 -0
  96. package/lib/formly/formly-generate-documents/formly-generate-documents.component.d.ts +17 -0
  97. package/lib/formly/formly-identification.component.d.ts +19 -0
  98. package/lib/formly/formly-open-banking/formly-open-banking.component.d.ts +119 -0
  99. package/lib/formly/formly-paragraph/formly-paragraph.component.d.ts +10 -0
  100. package/lib/formly/formly-radio/formly-radio-component.d.ts +15 -0
  101. package/lib/formly/formly-row-fille.d.ts +6 -0
  102. package/lib/formly/formly-scan-id/formly-scan-id.component.d.ts +41 -0
  103. package/lib/formly/formly-sign/formly-sign.component.d.ts +36 -0
  104. package/lib/formly/formly-upload-documents/formly-upload-documents.component.d.ts +25 -0
  105. package/lib/formly/formly-validate-contact-info/formly-validate-contact-info.component.d.ts +79 -0
  106. package/lib/formly/formly-view-documents/formly-view-documents.component.d.ts +33 -0
  107. package/lib/formly/formly-view-offers/formly-view-offers.component.d.ts +23 -0
  108. package/lib/model-population.helper.d.ts +8 -0
  109. package/lib/models/application-type.model.d.ts +27 -0
  110. package/lib/models/application.model.d.ts +107 -0
  111. package/lib/models/auth/users.model.d.ts +20 -0
  112. package/lib/models/dictionary.model.d.ts +77 -0
  113. package/lib/models/flux.model.d.ts +101 -0
  114. package/lib/models/forms.model.d.ts +504 -0
  115. package/lib/models/label-info.model.d.ts +10 -0
  116. package/lib/models/label.model.d.ts +4 -0
  117. package/lib/models/language.model.d.ts +5 -0
  118. package/lib/models/list.model.d.ts +8 -0
  119. package/lib/models/partner.model.d.ts +12 -0
  120. package/lib/models/treeview.model.d.ts +17 -0
  121. package/lib/origin-form-auth.service.d.ts +15 -0
  122. package/lib/origin-form-config.model.d.ts +12 -0
  123. package/lib/origin-form-token.interceptor.d.ts +12 -0
  124. package/lib/origin-form.component.d.ts +231 -0
  125. package/lib/origin-form.module.d.ts +84 -0
  126. package/lib/origin-form.service.d.ts +6 -0
  127. package/lib/others/check-list.database.d.ts +16 -0
  128. package/lib/others/config-service.d.ts +22 -0
  129. package/lib/others/dictionary-label-info.d.ts +6 -0
  130. package/lib/others/environment-type.d.ts +8 -0
  131. package/lib/others/external-link.directive.d.ts +12 -0
  132. package/lib/others/flux-helper.d.ts +115 -0
  133. package/lib/others/picker.component.d.ts +36 -0
  134. package/lib/others/translation.pipe.d.ts +10 -0
  135. package/lib/others/translations-helper.d.ts +31 -0
  136. package/lib/others/utils.d.ts +37 -0
  137. package/lib/services/applicationData.service.d.ts +35 -0
  138. package/lib/services/auth-http.service.d.ts +21 -0
  139. package/lib/services/dialog.service.d.ts +20 -0
  140. package/lib/services/dictionary.service.d.ts +89 -0
  141. package/lib/services/forms.service.d.ts +17 -0
  142. package/lib/services/labels.service.d.ts +13 -0
  143. package/lib/services/language.service.d.ts +14 -0
  144. package/lib/services/open-banking.service.d.ts +137 -0
  145. package/lib/services/origin-form-signalr-handler.service.d.ts +29 -0
  146. package/lib/services/origin-form-signalr.service.d.ts +24 -0
  147. package/lib/services/otp.service.d.ts +22 -0
  148. package/lib/services/proxy.service.d.ts +29 -0
  149. package/lib/services/scroll-to-error.service.d.ts +54 -0
  150. package/lib/services/translation.service.d.ts +10 -0
  151. package/lib/shared-components/confirmation.component.d.ts +77 -0
  152. package/lib/shared-components/dictionaries-tree.component.d.ts +51 -0
  153. package/lib/shared-components/grid.component.d.ts +138 -0
  154. package/lib/shared-components/treeview/treeview.component.d.ts +121 -0
  155. package/lib/theme-css.d.ts +2 -0
  156. package/lib/theme-injector.service.d.ts +8 -0
  157. package/package.json +42 -0
  158. package/public-api.d.ts +3 -0
  159. package/schematics-compiled/collection.json +10 -0
  160. package/schematics-compiled/ng-add/index.d.ts +2 -0
  161. package/schematics-compiled/ng-add/index.js +67 -0
  162. package/schematics-compiled/ng-add/index.js.map +1 -0
  163. package/schematics-compiled/ng-add/schema.json +8 -0
  164. package/src/lib/assets/fonts/Figtree-Bold.ttf +0 -0
  165. package/src/lib/assets/fonts/Figtree-Light.ttf +0 -0
  166. package/src/lib/assets/fonts/Figtree-Regular.ttf +0 -0
  167. package/src/lib/assets/fonts/Sora-ExtraBold.ttf +0 -0
  168. package/src/lib/assets/fonts/Sora-Light.ttf +0 -0
  169. package/src/lib/assets/fonts/Sora-Regular.ttf +0 -0
  170. package/src/lib/assets/fonts/ttrounds-bold-webfont.woff +0 -0
  171. package/src/lib/assets/fonts/ttrounds-bold-webfont.woff2 +0 -0
  172. package/src/lib/assets/fonts/ttrounds-regular-webfont.woff +0 -0
  173. package/src/lib/assets/fonts/ttrounds-regular-webfont.woff2 +0 -0
  174. package/src/lib/assets/fonts/ttrounds-thin-webfont.woff +0 -0
  175. package/src/lib/assets/fonts/ttrounds-thin-webfont.woff2 +0 -0
  176. package/src/lib/assets/images/flag/icon-flag-de.svg +10 -0
  177. package/src/lib/assets/images/flag/icon-flag-en.svg +1 -0
  178. package/src/lib/assets/images/flag/icon-flag-es.svg +11 -0
  179. package/src/lib/assets/images/flag/icon-flag-fr.svg +1 -0
  180. package/src/lib/assets/images/flag/icon-flag-ro.svg +11 -0
  181. package/src/lib/assets/images/flag/origin-form/new-id-card.png +0 -0
  182. package/src/lib/assets/images/flag/origin-form/old-id-card.png +0 -0
@@ -0,0 +1,245 @@
1
+ import { Component } from '@angular/core';
2
+ import { Utils } from '../../others/utils';
3
+ import { firstValueFrom } from 'rxjs';
4
+ import { BaseFormlyControlComponent } from '../baseFormlyControlComponent';
5
+ import * as i0 from "@angular/core";
6
+ import * as i1 from "../../services/applicationData.service";
7
+ import * as i2 from "../../services/dialog.service";
8
+ import * as i3 from "@angular/common";
9
+ import * as i4 from "ng2-pdf-viewer";
10
+ import * as i5 from "@angular/material/progress-spinner";
11
+ export class FormlyViewDocumentsComponent extends BaseFormlyControlComponent {
12
+ constructor(appDataService, dialog, cdr) {
13
+ super(cdr);
14
+ this.appDataService = appDataService;
15
+ this.dialog = dialog;
16
+ this.documents = [];
17
+ this.currentIndex = 0;
18
+ this.currentPdf = '';
19
+ this.cachedDocuments = {};
20
+ }
21
+ onInit() {
22
+ if (this.isDisplayMode === true) {
23
+ this.getDocuments();
24
+ }
25
+ }
26
+ getDocuments() {
27
+ const configDocs = this.controlData?.specificControlData?.documents;
28
+ if (configDocs) {
29
+ this.isLoading = true;
30
+ let cmd = {
31
+ appDataId: this.appDataId,
32
+ controlId: this.controlData.identifier,
33
+ isDisplayMode: this.isDisplayMode,
34
+ appConfigurationUUID: this.appId,
35
+ environment: this.env,
36
+ };
37
+ this.appDataService.getGenerateDocuments(cmd).subscribe({
38
+ next: (result) => {
39
+ this.isLoading = false;
40
+ this.documents = this.orderDocumentsAsConfigured(result);
41
+ if (this.documents && this.documents.length > 0) {
42
+ this.showDocument(this.documents[0]);
43
+ }
44
+ this.checkCanGoBackNext();
45
+ this.cdr.detectChanges();
46
+ },
47
+ error: (err) => {
48
+ this.isLoading = false;
49
+ this.dialog.popErrorTranslation(this.controlData.errorsTranslations, this.langIso, 'failToView');
50
+ this.cdr.detectChanges();
51
+ },
52
+ });
53
+ }
54
+ this.cdr.detectChanges();
55
+ }
56
+ orderDocumentsAsConfigured(documents) {
57
+ let list = [];
58
+ if (documents) {
59
+ const configuradDocuments = this.controlData?.specificControlData?.documents;
60
+ if (configuradDocuments) {
61
+ configuradDocuments.forEach((d) => {
62
+ const found = documents.find((f) => f.documentId === d.id);
63
+ if (found) {
64
+ list.push(found);
65
+ }
66
+ });
67
+ }
68
+ }
69
+ return list;
70
+ }
71
+ retry() {
72
+ this.getDocuments();
73
+ }
74
+ onPageSelected() {
75
+ this.getDocuments();
76
+ }
77
+ async showDocument(doc) {
78
+ this.currentDocument = doc;
79
+ const cached = this.cachedDocuments[doc.documentId];
80
+ if (cached) {
81
+ this.currentPdf = cached;
82
+ }
83
+ else {
84
+ this.isLoading = true;
85
+ if (doc.isApiDocument === true) {
86
+ let apiRequest = {
87
+ appDataId: this.appDataId,
88
+ documentId: doc.documentId,
89
+ };
90
+ this.appDataService.doDocumentRequest(apiRequest).subscribe({
91
+ next: (docs) => {
92
+ if (docs && docs.length > 0) {
93
+ docs.forEach((d) => {
94
+ const b64 = Utils.base64toBlob(d.content);
95
+ this.blobToArrayBuffer(b64).then((r) => {
96
+ if (d.documentId === doc.documentId) {
97
+ this.setCurrentDocument(doc.documentId, r);
98
+ }
99
+ this.cachedDocuments[d.documentId] = r;
100
+ });
101
+ });
102
+ }
103
+ else {
104
+ this.dialog.popErrorTranslation(this.controlData.errorsTranslations, this.langIso, 'noDocumentsToShow');
105
+ }
106
+ },
107
+ error: (err) => {
108
+ this.dialog.popErrorTranslation(this.controlData.errorsTranslations, this.langIso, 'failToView');
109
+ this.isLoading = false;
110
+ this.cdr.detectChanges();
111
+ },
112
+ });
113
+ }
114
+ else if (doc.content) {
115
+ // Document has content directly available - convert to blob
116
+ let content = doc.content;
117
+ // Check if content is a data URL and extract the base64 part
118
+ if (content.startsWith('data:')) {
119
+ const base64Start = content.indexOf(',');
120
+ if (base64Start !== -1) {
121
+ content = content.substring(base64Start + 1);
122
+ }
123
+ }
124
+ // Check if document needs PDF conversion
125
+ const originalContent = doc.content;
126
+ const isPdf = originalContent.includes('data:application/pdf') ||
127
+ originalContent.includes('application/pdf');
128
+ if (!isPdf) {
129
+ // For non-PDF documents, we need to convert to PDF or handle differently
130
+ console.warn('Non-PDF document detected. Converting to PDF...', doc.name);
131
+ // Call backend conversion API
132
+ this.convertToPdf(content, doc).then((pdfContent) => {
133
+ if (pdfContent) {
134
+ this.setCurrentDocument(doc.documentId, pdfContent);
135
+ }
136
+ else {
137
+ this.isLoading = false;
138
+ this.cdr.detectChanges();
139
+ }
140
+ });
141
+ }
142
+ else {
143
+ const b64 = Utils.base64toBlob(content);
144
+ this.blobToArrayBuffer(b64).then((r) => {
145
+ this.setCurrentDocument(doc.documentId, r);
146
+ });
147
+ }
148
+ }
149
+ else {
150
+ // Download file case
151
+ this.appDataService
152
+ .downloadFile(this.props['appDataId'], doc.documentId, doc.fileName)
153
+ .subscribe({
154
+ next: (data) => {
155
+ this.blobToArrayBuffer(data).then((r) => {
156
+ this.setCurrentDocument(doc.documentId, r);
157
+ });
158
+ },
159
+ error: (err) => {
160
+ this.dialog.popErrorTranslation(this.controlData.errorsTranslations, this.langIso, 'failToView');
161
+ this.isLoading = false;
162
+ this.cdr.detectChanges();
163
+ },
164
+ });
165
+ }
166
+ }
167
+ }
168
+ setCurrentDocument(documentId, r) {
169
+ this.cachedDocuments[documentId] = r;
170
+ this.currentPdf = r;
171
+ this.isLoading = false;
172
+ this.cdr.detectChanges();
173
+ }
174
+ blobToArrayBuffer(blob) {
175
+ return new Promise((resolve, _) => {
176
+ const reader = new FileReader();
177
+ reader.onloadend = () => resolve(reader.result);
178
+ reader.readAsDataURL(blob);
179
+ });
180
+ }
181
+ nextDocument() {
182
+ if (this.currentIndex < this.documents.length) {
183
+ this.currentIndex++;
184
+ this.showDocument(this.documents[this.currentIndex]);
185
+ }
186
+ this.checkCanGoBackNext();
187
+ }
188
+ prevDocument() {
189
+ if (this.currentIndex >= 0) {
190
+ this.currentIndex--;
191
+ this.showDocument(this.documents[this.currentIndex]);
192
+ }
193
+ this.checkCanGoBackNext();
194
+ }
195
+ checkCanGoBackNext() {
196
+ if (this.currentIndex === 0) {
197
+ this.canGoBack = false;
198
+ }
199
+ else {
200
+ this.canGoBack = true;
201
+ }
202
+ if (this.currentIndex < this.documents.length - 1) {
203
+ this.canGoNext = true;
204
+ }
205
+ else {
206
+ this.canGoNext = false;
207
+ }
208
+ }
209
+ async convertToPdf(content, doc) {
210
+ // Call backend API to convert document to PDF
211
+ try {
212
+ const conversionRequest = {
213
+ content: content,
214
+ fileName: doc.name,
215
+ documentId: doc.documentId,
216
+ appDataId: this.appDataId,
217
+ appConfigurationUUID: this.appId,
218
+ environment: this.env,
219
+ };
220
+ const response = await firstValueFrom(this.appDataService.convertDocumentToPdf(conversionRequest));
221
+ if (response?.success && response.pdfContent) {
222
+ // Convert PDF base64 to blob and return
223
+ const pdfBlob = Utils.base64toBlob(response.pdfContent);
224
+ return this.blobToArrayBuffer(pdfBlob);
225
+ }
226
+ else {
227
+ console.error('PDF conversion failed:', response?.errorMessage);
228
+ this.dialog.popError(response?.errorMessage || 'Failed to convert document to PDF');
229
+ return null;
230
+ }
231
+ }
232
+ catch (error) {
233
+ console.error('PDF conversion failed:', error);
234
+ this.dialog.popError('Failed to convert document to PDF');
235
+ return null;
236
+ }
237
+ }
238
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FormlyViewDocumentsComponent, deps: [{ token: i1.ApplicationDataService }, { token: i2.DialogService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
239
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: FormlyViewDocumentsComponent, selector: "app-formly-view-documents", usesInheritance: true, ngImport: i0, template: "<p *ngIf=\"isLoading === false && (!documents || documents.length === 0)\">\n {{ getErrorTranslationMessage(\"noDocumentsToShow\") }}\n</p>\n\n<div class=\"buttons-container\">\n <button (click)=\"prevDocument()\"\n [disabled]=\"!canGoBack\"\n class=\"nav-button larger-width-nav-buttons\">\n &#8592;\n </button>\n\n <p class=\"file-info font-paragraph\" *ngIf=\"currentDocument\">\n {{ this.currentDocument.name }}\n </p>\n\n <button (click)=\"nextDocument()\"\n [disabled]=\"!canGoNext\"\n class=\"nav-button larger-width-nav-buttons\">\n &#8594;\n </button>\n</div>\n\n<mat-spinner *ngIf=\"isLoading === true\" class=\"m-x-auto\"></mat-spinner>\n<pdf-viewer *ngIf=\"isLoading === false\"\n [src]=\"currentPdf\"\n [render-text]=\"true\"\n [original-size]=\"false\"\n [external-link-target]=\"'blank'\"\n class=\"pdf-viewer\"></pdf-viewer>\n", styles: [".buttons-container button{margin-right:5px;margin-bottom:10px;margin-top:10px}ng2-pdf-viewer{display:block;margin:0 auto;width:80%;height:600px}.pdf-viewer-container{display:flex;flex-direction:column;align-items:center;margin:20px}.pdf-viewer{width:80vw;height:86.254vw;max-width:1000px;max-height:1414px;min-width:300px;min-height:424px;overflow:auto;margin:auto}.nav-button{width:60px;height:35px;background-color:#7f81ff;display:flex;justify-content:center;align-items:center;color:#fff;text-align:center;border:none;padding:5px 10px;border-radius:10px;cursor:pointer;font-size:1.4rem;font-weight:700;transition:background-color .3s ease-in}.smaller-width-nav-buttons-section{display:none}.nav-button:hover{background-color:#9091ff}.nav-button:disabled{background-color:#ccc;cursor:not-allowed}.file-info{margin:0 10px;font-weight:700;font-size:1.8rem}\n"], dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i4.PdfViewerComponent, selector: "pdf-viewer", inputs: ["src", "c-maps-url", "page", "render-text", "render-text-mode", "original-size", "show-all", "stick-to-page", "zoom", "zoom-scale", "rotation", "external-link-target", "autoresize", "fit-to-page", "show-borders"], outputs: ["after-load-complete", "page-rendered", "pages-initialized", "text-layer-rendered", "error", "on-progress", "pageChange"] }, { kind: "component", type: i5.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }] }); }
240
+ }
241
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FormlyViewDocumentsComponent, decorators: [{
242
+ type: Component,
243
+ args: [{ selector: 'app-formly-view-documents', template: "<p *ngIf=\"isLoading === false && (!documents || documents.length === 0)\">\n {{ getErrorTranslationMessage(\"noDocumentsToShow\") }}\n</p>\n\n<div class=\"buttons-container\">\n <button (click)=\"prevDocument()\"\n [disabled]=\"!canGoBack\"\n class=\"nav-button larger-width-nav-buttons\">\n &#8592;\n </button>\n\n <p class=\"file-info font-paragraph\" *ngIf=\"currentDocument\">\n {{ this.currentDocument.name }}\n </p>\n\n <button (click)=\"nextDocument()\"\n [disabled]=\"!canGoNext\"\n class=\"nav-button larger-width-nav-buttons\">\n &#8594;\n </button>\n</div>\n\n<mat-spinner *ngIf=\"isLoading === true\" class=\"m-x-auto\"></mat-spinner>\n<pdf-viewer *ngIf=\"isLoading === false\"\n [src]=\"currentPdf\"\n [render-text]=\"true\"\n [original-size]=\"false\"\n [external-link-target]=\"'blank'\"\n class=\"pdf-viewer\"></pdf-viewer>\n", styles: [".buttons-container button{margin-right:5px;margin-bottom:10px;margin-top:10px}ng2-pdf-viewer{display:block;margin:0 auto;width:80%;height:600px}.pdf-viewer-container{display:flex;flex-direction:column;align-items:center;margin:20px}.pdf-viewer{width:80vw;height:86.254vw;max-width:1000px;max-height:1414px;min-width:300px;min-height:424px;overflow:auto;margin:auto}.nav-button{width:60px;height:35px;background-color:#7f81ff;display:flex;justify-content:center;align-items:center;color:#fff;text-align:center;border:none;padding:5px 10px;border-radius:10px;cursor:pointer;font-size:1.4rem;font-weight:700;transition:background-color .3s ease-in}.smaller-width-nav-buttons-section{display:none}.nav-button:hover{background-color:#9091ff}.nav-button:disabled{background-color:#ccc;cursor:not-allowed}.file-info{margin:0 10px;font-weight:700;font-size:1.8rem}\n"] }]
244
+ }], ctorParameters: () => [{ type: i1.ApplicationDataService }, { type: i2.DialogService }, { type: i0.ChangeDetectorRef }] });
245
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybWx5LXZpZXctZG9jdW1lbnRzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL29yaWdpbi1mb3JtL3NyYy9saWIvZm9ybWx5L2Zvcm1seS12aWV3LWRvY3VtZW50cy9mb3JtbHktdmlldy1kb2N1bWVudHMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvb3JpZ2luLWZvcm0vc3JjL2xpYi9mb3JtbHkvZm9ybWx5LXZpZXctZG9jdW1lbnRzL2Zvcm1seS12aWV3LWRvY3VtZW50cy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQXFCLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUk3RCxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDM0MsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN0QyxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQzs7Ozs7OztBQU8zRSxNQUFNLE9BQU8sNEJBQTZCLFNBQVEsMEJBQTBCO0lBVzFFLFlBQ1UsY0FBc0MsRUFDdEMsTUFBcUIsRUFDN0IsR0FBc0I7UUFFdEIsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBSkgsbUJBQWMsR0FBZCxjQUFjLENBQXdCO1FBQ3RDLFdBQU0sR0FBTixNQUFNLENBQWU7UUFaL0IsY0FBUyxHQUF3QixFQUFFLENBQUM7UUFFcEMsaUJBQVksR0FBVyxDQUFDLENBQUM7UUFJekIsZUFBVSxHQUFRLEVBQUUsQ0FBQztRQUVyQixvQkFBZSxHQUFRLEVBQUUsQ0FBQztJQVExQixDQUFDO0lBRVEsTUFBTTtRQUNiLElBQUksSUFBSSxDQUFDLGFBQWEsS0FBSyxJQUFJLEVBQUUsQ0FBQztZQUNoQyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDdEIsQ0FBQztJQUNILENBQUM7SUFF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dCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBcHBsaWNhdGlvbkRhdGFTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvYXBwbGljYXRpb25EYXRhLnNlcnZpY2UnO1xuaW1wb3J0IHsgRGlhbG9nU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2RpYWxvZy5zZXJ2aWNlJztcbmltcG9ydCB7IEFwaURvY3VtZW50UmVxdWVzdCwgQXBwbGljYXRpb25HZXRHZW5lcmF0ZWREb2N1bWVudHNEdG8sIENvbnZlcnREb2N1bWVudFRvUGRmUmVxdWVzdCwgR2VuZXJhdGVkRG9jdW1lbnQgfSBmcm9tICcuLi8uLi9tb2RlbHMvYXBwbGljYXRpb24ubW9kZWwnO1xuaW1wb3J0IHsgVXRpbHMgfSBmcm9tICcuLi8uLi9vdGhlcnMvdXRpbHMnO1xuaW1wb3J0IHsgZmlyc3RWYWx1ZUZyb20gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEJhc2VGb3JtbHlDb250cm9sQ29tcG9uZW50IH0gZnJvbSAnLi4vYmFzZUZvcm1seUNvbnRyb2xDb21wb25lbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhcHAtZm9ybWx5LXZpZXctZG9jdW1lbnRzJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2Zvcm1seS12aWV3LWRvY3VtZW50cy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsOiAnLi9mb3JtbHktdmlldy1kb2N1bWVudHMuY29tcG9uZW50LnNjc3MnLFxufSlcbmV4cG9ydCBjbGFzcyBGb3JtbHlWaWV3RG9jdW1lbnRzQ29tcG9uZW50IGV4dGVuZHMgQmFzZUZvcm1seUNvbnRyb2xDb21wb25lbnQge1xuICBkb2N1bWVudHM6IEdlbmVyYXRlZERvY3VtZW50W10gPSBbXTtcbiAgaXNEb3dubG9hZGluZzogYm9vbGVhbjtcbiAgY3VycmVudEluZGV4OiBudW1iZXIgPSAwO1xuICBjYW5Hb0JhY2s6IGJvb2xlYW47XG4gIGNhbkdvTmV4dDogYm9vbGVhbjtcblxuICBjdXJyZW50UGRmOiBhbnkgPSAnJztcbiAgY3VycmVudERvY3VtZW50OiBHZW5lcmF0ZWREb2N1bWVudDtcbiAgY2FjaGVkRG9jdW1lbnRzOiBhbnkgPSB7fTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGFwcERhdGFTZXJ2aWNlOiBBcHBsaWNhdGlvbkRhdGFTZXJ2aWNlLFxuICAgIHByaXZhdGUgZGlhbG9nOiBEaWFsb2dTZXJ2aWNlLFxuICAgIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWZcbiAgKSB7XG4gICAgc3VwZXIoY2RyKTtcbiAgfVxuXG4gIG92ZXJyaWRlIG9uSW5pdCgpIHtcbiAgICBpZiAodGhpcy5pc0Rpc3BsYXlNb2RlID09PSB0cnVlKSB7XG4gICAgICB0aGlzLmdldERvY3VtZW50cygpO1xuICAgIH1cbiAgfVxuXG4gIGdldERvY3VtZW50cygpIHtcbiAgICBjb25zdCBjb25maWdEb2NzID0gdGhpcy5jb250cm9sRGF0YT8uc3BlY2lmaWNDb250cm9sRGF0YT8uZG9jdW1lbnRzO1xuICAgIGlmIChjb25maWdEb2NzKSB7XG4gICAgICB0aGlzLmlzTG9hZGluZyA9IHRydWU7XG4gICAgICBsZXQgY21kOiBBcHBsaWNhdGlvbkdldEdlbmVyYXRlZERvY3VtZW50c0R0byA9IHtcbiAgICAgICAgYXBwRGF0YUlkOiB0aGlzLmFwcERhdGFJZCxcbiAgICAgICAgY29udHJvbElkOiB0aGlzLmNvbnRyb2xEYXRhLmlkZW50aWZpZXIsXG4gICAgICAgIGlzRGlzcGxheU1vZGU6IHRoaXMuaXNEaXNwbGF5TW9kZSxcbiAgICAgICAgYXBwQ29uZmlndXJhdGlvblVVSUQ6IHRoaXMuYXBwSWQsXG4gICAgICAgIGVudmlyb25tZW50OiB0aGlzLmVudixcbiAgICAgIH07XG5cbiAgICAgIHRoaXMuYXBwRGF0YVNlcnZpY2UuZ2V0R2VuZXJhdGVEb2N1bWVudHMoY21kKS5zdWJzY3JpYmUoe1xuICAgICAgICBuZXh0OiAocmVzdWx0KSA9PiB7XG4gICAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLmRvY3VtZW50cyA9IHRoaXMub3JkZXJEb2N1bWVudHNBc0NvbmZpZ3VyZWQocmVzdWx0KTtcbiAgICAgICAgICBpZiAodGhpcy5kb2N1bWVudHMgJiYgdGhpcy5kb2N1bWVudHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdGhpcy5zaG93RG9jdW1lbnQodGhpcy5kb2N1bWVudHNbMF0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLmNoZWNrQ2FuR29CYWNrTmV4dCgpO1xuICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3I6IChlcnIpID0+IHtcbiAgICAgICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xuXG4gICAgICAgICAgdGhpcy5kaWFsb2cucG9wRXJyb3JUcmFuc2xhdGlvbihcbiAgICAgICAgICAgIHRoaXMuY29udHJvbERhdGEuZXJyb3JzVHJhbnNsYXRpb25zLFxuICAgICAgICAgICAgdGhpcy5sYW5nSXNvLFxuICAgICAgICAgICAgJ2ZhaWxUb1ZpZXcnXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgIH1cbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICBvcmRlckRvY3VtZW50c0FzQ29uZmlndXJlZChcbiAgICBkb2N1bWVudHM6IEdlbmVyYXRlZERvY3VtZW50W11cbiAgKTogR2VuZXJhdGVkRG9jdW1lbnRbXSB7XG4gICAgbGV0IGxpc3Q6IEdlbmVyYXRlZERvY3VtZW50W10gPSBbXTtcbiAgICBpZiAoZG9jdW1lbnRzKSB7XG4gICAgICBjb25zdCBjb25maWd1cmFkRG9jdW1lbnRzID1cbiAgICAgICAgdGhpcy5jb250cm9sRGF0YT8uc3BlY2lmaWNDb250cm9sRGF0YT8uZG9jdW1lbnRzO1xuICAgICAgaWYgKGNvbmZpZ3VyYWREb2N1bWVudHMpIHtcbiAgICAgICAgY29uZmlndXJhZERvY3VtZW50cy5mb3JFYWNoKChkOiBhbnkpID0+IHtcbiAgICAgICAgICBjb25zdCBmb3VuZCA9IGRvY3VtZW50cy5maW5kKChmOiBhbnkpID0+IGYuZG9jdW1lbnRJZCA9PT0gZC5pZCk7XG4gICAgICAgICAgaWYgKGZvdW5kKSB7XG4gICAgICAgICAgICBsaXN0LnB1c2goZm91bmQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBsaXN0O1xuICB9XG5cbiAgcmV0cnkoKSB7XG4gICAgdGhpcy5nZXREb2N1bWVudHMoKTtcbiAgfVxuXG4gIG92ZXJyaWRlIG9uUGFnZVNlbGVjdGVkKCkge1xuICAgIHRoaXMuZ2V0RG9jdW1lbnRzKCk7XG4gIH1cblxuICBhc3luYyBzaG93RG9jdW1lbnQoZG9jOiBHZW5lcmF0ZWREb2N1bWVudCkge1xuICAgIHRoaXMuY3VycmVudERvY3VtZW50ID0gZG9jO1xuICAgIGNvbnN0IGNhY2hlZCA9IHRoaXMuY2FjaGVkRG9jdW1lbnRzW2RvYy5kb2N1bWVudElkXTtcbiAgICBpZiAoY2FjaGVkKSB7XG4gICAgICB0aGlzLmN1cnJlbnRQZGYgPSBjYWNoZWQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaXNMb2FkaW5nID0gdHJ1ZTtcbiAgICAgIGlmIChkb2MuaXNBcGlEb2N1bWVudCA9PT0gdHJ1ZSkge1xuICAgICAgICBsZXQgYXBpUmVxdWVzdDogQXBpRG9jdW1lbnRSZXF1ZXN0ID0ge1xuICAgICAgICAgIGFwcERhdGFJZDogdGhpcy5hcHBEYXRhSWQsXG4gICAgICAgICAgZG9jdW1lbnRJZDogZG9jLmRvY3VtZW50SWQsXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuYXBwRGF0YVNlcnZpY2UuZG9Eb2N1bWVudFJlcXVlc3QoYXBpUmVxdWVzdCkuc3Vic2NyaWJlKHtcbiAgICAgICAgICBuZXh0OiAoZG9jcykgPT4ge1xuICAgICAgICAgICAgaWYgKGRvY3MgJiYgZG9jcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgIGRvY3MuZm9yRWFjaCgoZCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGI2NCA9IFV0aWxzLmJhc2U2NHRvQmxvYihkLmNvbnRlbnQpO1xuICAgICAgICAgICAgICAgIHRoaXMuYmxvYlRvQXJyYXlCdWZmZXIoYjY0KS50aGVuKChyKSA9PiB7XG4gICAgICAgICAgICAgICAgICBpZiAoZC5kb2N1bWVudElkID09PSBkb2MuZG9jdW1lbnRJZCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldEN1cnJlbnREb2N1bWVudChkb2MuZG9jdW1lbnRJZCwgcik7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB0aGlzLmNhY2hlZERvY3VtZW50c1tkLmRvY3VtZW50SWRdID0gcjtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB0aGlzLmRpYWxvZy5wb3BFcnJvclRyYW5zbGF0aW9uKFxuICAgICAgICAgICAgICAgIHRoaXMuY29udHJvbERhdGEuZXJyb3JzVHJhbnNsYXRpb25zLFxuICAgICAgICAgICAgICAgIHRoaXMubGFuZ0lzbyxcbiAgICAgICAgICAgICAgICAnbm9Eb2N1bWVudHNUb1Nob3cnXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBlcnJvcjogKGVycikgPT4ge1xuICAgICAgICAgICAgdGhpcy5kaWFsb2cucG9wRXJyb3JUcmFuc2xhdGlvbihcbiAgICAgICAgICAgICAgdGhpcy5jb250cm9sRGF0YS5lcnJvcnNUcmFuc2xhdGlvbnMsXG4gICAgICAgICAgICAgIHRoaXMubGFuZ0lzbyxcbiAgICAgICAgICAgICAgJ2ZhaWxUb1ZpZXcnXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSBpZiAoKGRvYyBhcyBhbnkpLmNvbnRlbnQpIHtcbiAgICAgICAgLy8gRG9jdW1lbnQgaGFzIGNvbnRlbnQgZGlyZWN0bHkgYXZhaWxhYmxlIC0gY29udmVydCB0byBibG9iXG4gICAgICAgIGxldCBjb250ZW50ID0gKGRvYyBhcyBhbnkpLmNvbnRlbnQ7XG5cbiAgICAgICAgLy8gQ2hlY2sgaWYgY29udGVudCBpcyBhIGRhdGEgVVJMIGFuZCBleHRyYWN0IHRoZSBiYXNlNjQgcGFydFxuICAgICAgICBpZiAoY29udGVudC5zdGFydHNXaXRoKCdkYXRhOicpKSB7XG4gICAgICAgICAgY29uc3QgYmFzZTY0U3RhcnQgPSBjb250ZW50LmluZGV4T2YoJywnKTtcbiAgICAgICAgICBpZiAoYmFzZTY0U3RhcnQgIT09IC0xKSB7XG4gICAgICAgICAgICBjb250ZW50ID0gY29udGVudC5zdWJzdHJpbmcoYmFzZTY0U3RhcnQgKyAxKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBDaGVjayBpZiBkb2N1bWVudCBuZWVkcyBQREYgY29udmVyc2lvblxuICAgICAgICBjb25zdCBvcmlnaW5hbENvbnRlbnQgPSAoZG9jIGFzIGFueSkuY29udGVudDtcbiAgICAgICAgY29uc3QgaXNQZGYgPVxuICAgICAgICAgIG9yaWdpbmFsQ29udGVudC5pbmNsdWRlcygnZGF0YTphcHBsaWNhdGlvbi9wZGYnKSB8fFxuICAgICAgICAgIG9yaWdpbmFsQ29udGVudC5pbmNsdWRlcygnYXBwbGljYXRpb24vcGRmJyk7XG5cbiAgICAgICAgaWYgKCFpc1BkZikge1xuICAgICAgICAgIC8vIEZvciBub24tUERGIGRvY3VtZW50cywgd2UgbmVlZCB0byBjb252ZXJ0IHRvIFBERiBvciBoYW5kbGUgZGlmZmVyZW50bHlcbiAgICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgICAnTm9uLVBERiBkb2N1bWVudCBkZXRlY3RlZC4gQ29udmVydGluZyB0byBQREYuLi4nLFxuICAgICAgICAgICAgZG9jLm5hbWVcbiAgICAgICAgICApO1xuICAgICAgICAgIC8vIENhbGwgYmFja2VuZCBjb252ZXJzaW9uIEFQSVxuICAgICAgICAgIHRoaXMuY29udmVydFRvUGRmKGNvbnRlbnQsIGRvYykudGhlbigocGRmQ29udGVudCkgPT4ge1xuICAgICAgICAgICAgaWYgKHBkZkNvbnRlbnQpIHtcbiAgICAgICAgICAgICAgdGhpcy5zZXRDdXJyZW50RG9jdW1lbnQoZG9jLmRvY3VtZW50SWQsIHBkZkNvbnRlbnQpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IGI2NCA9IFV0aWxzLmJhc2U2NHRvQmxvYihjb250ZW50KTtcbiAgICAgICAgICB0aGlzLmJsb2JUb0FycmF5QnVmZmVyKGI2NCkudGhlbigocikgPT4ge1xuICAgICAgICAgICAgdGhpcy5zZXRDdXJyZW50RG9jdW1lbnQoZG9jLmRvY3VtZW50SWQsIHIpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBEb3dubG9hZCBmaWxlIGNhc2VcbiAgICAgICAgdGhpcy5hcHBEYXRhU2VydmljZVxuICAgICAgICAgIC5kb3dubG9hZEZpbGUodGhpcy5wcm9wc1snYXBwRGF0YUlkJ10sIGRvYy5kb2N1bWVudElkLCBkb2MuZmlsZU5hbWUpXG4gICAgICAgICAgLnN1YnNjcmliZSh7XG4gICAgICAgICAgICBuZXh0OiAoZGF0YSkgPT4ge1xuICAgICAgICAgICAgICB0aGlzLmJsb2JUb0FycmF5QnVmZmVyKGRhdGEpLnRoZW4oKHIpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldEN1cnJlbnREb2N1bWVudChkb2MuZG9jdW1lbnRJZCwgcik7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVycm9yOiAoZXJyKSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMuZGlhbG9nLnBvcEVycm9yVHJhbnNsYXRpb24oXG4gICAgICAgICAgICAgICAgdGhpcy5jb250cm9sRGF0YS5lcnJvcnNUcmFuc2xhdGlvbnMsXG4gICAgICAgICAgICAgICAgdGhpcy5sYW5nSXNvLFxuICAgICAgICAgICAgICAgICdmYWlsVG9WaWV3J1xuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHNldEN1cnJlbnREb2N1bWVudChkb2N1bWVudElkOiBzdHJpbmcsIHI6IGFueSkge1xuICAgIHRoaXMuY2FjaGVkRG9jdW1lbnRzW2RvY3VtZW50SWRdID0gcjtcbiAgICB0aGlzLmN1cnJlbnRQZGYgPSByO1xuICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgYmxvYlRvQXJyYXlCdWZmZXIoYmxvYjogYW55KSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCBfKSA9PiB7XG4gICAgICBjb25zdCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xuICAgICAgcmVhZGVyLm9ubG9hZGVuZCA9ICgpID0+IHJlc29sdmUocmVhZGVyLnJlc3VsdCk7XG4gICAgICByZWFkZXIucmVhZEFzRGF0YVVSTChibG9iKTtcbiAgICB9KTtcbiAgfVxuXG4gIG5leHREb2N1bWVudCgpIHtcbiAgICBpZiAodGhpcy5jdXJyZW50SW5kZXggPCB0aGlzLmRvY3VtZW50cy5sZW5ndGgpIHtcbiAgICAgIHRoaXMuY3VycmVudEluZGV4Kys7XG4gICAgICB0aGlzLnNob3dEb2N1bWVudCh0aGlzLmRvY3VtZW50c1t0aGlzLmN1cnJlbnRJbmRleF0pO1xuICAgIH1cbiAgICB0aGlzLmNoZWNrQ2FuR29CYWNrTmV4dCgpO1xuICB9XG5cbiAgcHJldkRvY3VtZW50KCkge1xuICAgIGlmICh0aGlzLmN1cnJlbnRJbmRleCA+PSAwKSB7XG4gICAgICB0aGlzLmN1cnJlbnRJbmRleC0tO1xuICAgICAgdGhpcy5zaG93RG9jdW1lbnQodGhpcy5kb2N1bWVudHNbdGhpcy5jdXJyZW50SW5kZXhdKTtcbiAgICB9XG4gICAgdGhpcy5jaGVja0NhbkdvQmFja05leHQoKTtcbiAgfVxuXG4gIGNoZWNrQ2FuR29CYWNrTmV4dCgpIHtcbiAgICBpZiAodGhpcy5jdXJyZW50SW5kZXggPT09IDApIHtcbiAgICAgIHRoaXMuY2FuR29CYWNrID0gZmFsc2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY2FuR29CYWNrID0gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKHRoaXMuY3VycmVudEluZGV4IDwgdGhpcy5kb2N1bWVudHMubGVuZ3RoIC0gMSkge1xuICAgICAgdGhpcy5jYW5Hb05leHQgPSB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmNhbkdvTmV4dCA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgY29udmVydFRvUGRmKFxuICAgIGNvbnRlbnQ6IHN0cmluZyxcbiAgICBkb2M6IEdlbmVyYXRlZERvY3VtZW50XG4gICk6IFByb21pc2U8YW55PiB7XG4gICAgLy8gQ2FsbCBiYWNrZW5kIEFQSSB0byBjb252ZXJ0IGRvY3VtZW50IHRvIFBERlxuICAgIHRyeSB7XG4gICAgICBjb25zdCBjb252ZXJzaW9uUmVxdWVzdDogQ29udmVydERvY3VtZW50VG9QZGZSZXF1ZXN0ID0ge1xuICAgICAgICBjb250ZW50OiBjb250ZW50LFxuICAgICAgICBmaWxlTmFtZTogZG9jLm5hbWUsXG4gICAgICAgIGRvY3VtZW50SWQ6IGRvYy5kb2N1bWVudElkLFxuICAgICAgICBhcHBEYXRhSWQ6IHRoaXMuYXBwRGF0YUlkLFxuICAgICAgICBhcHBDb25maWd1cmF0aW9uVVVJRDogdGhpcy5hcHBJZCxcbiAgICAgICAgZW52aXJvbm1lbnQ6IHRoaXMuZW52LFxuICAgICAgfTtcblxuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmaXJzdFZhbHVlRnJvbShcbiAgICAgICAgdGhpcy5hcHBEYXRhU2VydmljZS5jb252ZXJ0RG9jdW1lbnRUb1BkZihjb252ZXJzaW9uUmVxdWVzdClcbiAgICAgICk7XG5cbiAgICAgIGlmIChyZXNwb25zZT8uc3VjY2VzcyAmJiByZXNwb25zZS5wZGZDb250ZW50KSB7XG4gICAgICAgIC8vIENvbnZlcnQgUERGIGJhc2U2NCB0byBibG9iIGFuZCByZXR1cm5cbiAgICAgICAgY29uc3QgcGRmQmxvYiA9IFV0aWxzLmJhc2U2NHRvQmxvYihyZXNwb25zZS5wZGZDb250ZW50KTtcbiAgICAgICAgcmV0dXJuIHRoaXMuYmxvYlRvQXJyYXlCdWZmZXIocGRmQmxvYik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdQREYgY29udmVyc2lvbiBmYWlsZWQ6JywgcmVzcG9uc2U/LmVycm9yTWVzc2FnZSk7XG4gICAgICAgIHRoaXMuZGlhbG9nLnBvcEVycm9yKFxuICAgICAgICAgIHJlc3BvbnNlPy5lcnJvck1lc3NhZ2UgfHwgJ0ZhaWxlZCB0byBjb252ZXJ0IGRvY3VtZW50IHRvIFBERidcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1BERiBjb252ZXJzaW9uIGZhaWxlZDonLCBlcnJvcik7XG4gICAgICB0aGlzLmRpYWxvZy5wb3BFcnJvcignRmFpbGVkIHRvIGNvbnZlcnQgZG9jdW1lbnQgdG8gUERGJyk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cbn1cbiIsIjxwICpuZ0lmPVwiaXNMb2FkaW5nID09PSBmYWxzZSAmJiAoIWRvY3VtZW50cyB8fCBkb2N1bWVudHMubGVuZ3RoID09PSAwKVwiPlxuICB7eyBnZXRFcnJvclRyYW5zbGF0aW9uTWVzc2FnZShcIm5vRG9jdW1lbnRzVG9TaG93XCIpIH19XG48L3A+XG5cbjxkaXYgY2xhc3M9XCJidXR0b25zLWNvbnRhaW5lclwiPlxuICA8YnV0dG9uIChjbGljayk9XCJwcmV2RG9jdW1lbnQoKVwiXG4gICAgICAgICAgW2Rpc2FibGVkXT1cIiFjYW5Hb0JhY2tcIlxuICAgICAgICAgIGNsYXNzPVwibmF2LWJ1dHRvbiBsYXJnZXItd2lkdGgtbmF2LWJ1dHRvbnNcIj5cbiAgICAmIzg1OTI7XG4gIDwvYnV0dG9uPlxuXG4gIDxwIGNsYXNzPVwiZmlsZS1pbmZvIGZvbnQtcGFyYWdyYXBoXCIgKm5nSWY9XCJjdXJyZW50RG9jdW1lbnRcIj5cbiAgICB7eyB0aGlzLmN1cnJlbnREb2N1bWVudC5uYW1lIH19XG4gIDwvcD5cblxuICA8YnV0dG9uIChjbGljayk9XCJuZXh0RG9jdW1lbnQoKVwiXG4gICAgICAgICAgW2Rpc2FibGVkXT1cIiFjYW5Hb05leHRcIlxuICAgICAgICAgIGNsYXNzPVwibmF2LWJ1dHRvbiBsYXJnZXItd2lkdGgtbmF2LWJ1dHRvbnNcIj5cbiAgICAmIzg1OTQ7XG4gIDwvYnV0dG9uPlxuPC9kaXY+XG5cbjxtYXQtc3Bpbm5lciAqbmdJZj1cImlzTG9hZGluZyA9PT0gdHJ1ZVwiIGNsYXNzPVwibS14LWF1dG9cIj48L21hdC1zcGlubmVyPlxuPHBkZi12aWV3ZXIgKm5nSWY9XCJpc0xvYWRpbmcgPT09IGZhbHNlXCJcbiAgICAgICAgICAgIFtzcmNdPVwiY3VycmVudFBkZlwiXG4gICAgICAgICAgICBbcmVuZGVyLXRleHRdPVwidHJ1ZVwiXG4gICAgICAgICAgICBbb3JpZ2luYWwtc2l6ZV09XCJmYWxzZVwiXG4gICAgICAgICAgICBbZXh0ZXJuYWwtbGluay10YXJnZXRdPVwiJ2JsYW5rJ1wiXG4gICAgICAgICAgICBjbGFzcz1cInBkZi12aWV3ZXJcIj48L3BkZi12aWV3ZXI+XG4iXX0=
@@ -0,0 +1,160 @@
1
+ import { Component } from '@angular/core';
2
+ import { DimensionType, SectionType, StepControlType, } from '../../models/forms.model';
3
+ import { FormControl } from '@angular/forms';
4
+ import { Utils } from '../../others/utils';
5
+ import { BaseFormlyStepComponent } from '../baseFormlyStepComponent';
6
+ import { DependentDictionaryData } from '../../models/flux.model';
7
+ import * as i0 from "@angular/core";
8
+ import * as i1 from "../../services/applicationData.service";
9
+ import * as i2 from "@angular/common";
10
+ import * as i3 from "@angular/material/card";
11
+ import * as i4 from "@angular/material/progress-spinner";
12
+ import * as i5 from "../../shared-components/grid.component";
13
+ export class FormlyViewOffersComponent extends BaseFormlyStepComponent {
14
+ constructor(appDataService, cdr) {
15
+ super(cdr);
16
+ this.appDataService = appDataService;
17
+ this.offers = [];
18
+ this.config = {
19
+ filter: false,
20
+ };
21
+ }
22
+ onInit() {
23
+ this.isLoading = true;
24
+ this.appModel = this.props['appModel'];
25
+ this.configureColumns();
26
+ }
27
+ onPageSelected() {
28
+ this.isLoading = true;
29
+ this.appDataService.getOffers(this.appDataId).subscribe({
30
+ next: (result) => {
31
+ this.offers = result;
32
+ this.configureDataSource();
33
+ this.isLoading = false;
34
+ this.cdr.detectChanges();
35
+ },
36
+ error: (err) => {
37
+ this.isLoading = false;
38
+ this.cdr.detectChanges();
39
+ },
40
+ });
41
+ }
42
+ configureColumns() {
43
+ const columns = this.stepData.config.columns;
44
+ columns.sort((a, b) => a.order - b.order);
45
+ const idMap = new Map();
46
+ const baseColumns = columns.map((col) => {
47
+ let id = col.field.replace(/[^a-zA-Z0-9]+/g, '_');
48
+ const count = idMap.get(id) || 0;
49
+ idMap.set(id, count + 1);
50
+ if (count > 0) {
51
+ id = `${id}_${count}`;
52
+ }
53
+ return {
54
+ id,
55
+ originalField: col.field,
56
+ label: col.name.find((n) => n.languageIso === this.langIso)?.value || 'N/A',
57
+ };
58
+ });
59
+ const actionColumns = [
60
+ {
61
+ id: 'open',
62
+ icon: 'eye',
63
+ route: '#',
64
+ },
65
+ ];
66
+ this.columns = [...baseColumns, ...actionColumns];
67
+ }
68
+ configureDataSource() {
69
+ const columns = this.columns.filter((c) => c.originalField);
70
+ let dataSource = [];
71
+ this.offers.forEach((o) => {
72
+ let dataSourceRow = {};
73
+ dataSourceRow['offerId'] = o.offerId;
74
+ columns.forEach((column) => {
75
+ const columnField = column.originalField;
76
+ if (columnField.startsWith('api')) {
77
+ const fieldId = columnField.split(' -> ').pop();
78
+ const offerField = o.fields.find((f) => f.fieldId === fieldId);
79
+ const value = offerField ? offerField.value : '';
80
+ dataSourceRow[column.id] = value;
81
+ }
82
+ else if (columnField.startsWith('metadata')) {
83
+ switch (columnField) {
84
+ case 'metadata.appDataId': {
85
+ dataSourceRow[column.id] = this.appDataId;
86
+ break;
87
+ }
88
+ case 'metadata.configurationId': {
89
+ dataSourceRow[column.id] = this.appModel.applicationUuid;
90
+ break;
91
+ }
92
+ default: {
93
+ }
94
+ }
95
+ }
96
+ else {
97
+ const value = this.form.value[columnField];
98
+ if (value !== undefined) {
99
+ dataSourceRow[column.id] = value;
100
+ }
101
+ }
102
+ });
103
+ dataSource.push(dataSourceRow);
104
+ });
105
+ this.datasource = dataSource;
106
+ }
107
+ offerSelected(offer) {
108
+ const formGroup = this.form;
109
+ const formValues = this.form.value || {};
110
+ const selectedOffer = this.offers.find((o) => o.offerId === offer.id.offerId);
111
+ if (!selectedOffer)
112
+ return;
113
+ selectedOffer.fields.forEach((f) => {
114
+ formValues[f.fieldId] = f.value;
115
+ if (!formGroup.controls[f.fieldId]) {
116
+ formGroup.addControl(f.fieldId, new FormControl(f.value));
117
+ }
118
+ });
119
+ this.form.patchValue(formValues);
120
+ this.stepData.config.offerId = selectedOffer.offerId;
121
+ const section = {
122
+ title: '',
123
+ titleStyle: '',
124
+ translations: [],
125
+ showSectionTitle: false,
126
+ showSectionSeparator: false,
127
+ isNavigationSection: false,
128
+ dependentDictionary: new DependentDictionaryData(),
129
+ presentationControls: [],
130
+ canDepend: false,
131
+ identifier: Utils.generateUUID(),
132
+ type: SectionType.Collect,
133
+ controls: selectedOffer.fields.map((f) => ({
134
+ identifier: f.fieldId,
135
+ title: '',
136
+ translations: [],
137
+ type: StepControlType.ManualInput,
138
+ dimension: 0,
139
+ dimensionType: DimensionType.Percentage,
140
+ autoDimension: false,
141
+ specificControlData: undefined,
142
+ dependentDictionary: new DependentDictionaryData(),
143
+ canDepend: false,
144
+ isMandatory: false,
145
+ })),
146
+ };
147
+ this.stepData.sections = [section];
148
+ if (this.props['event']) {
149
+ this.isLoading = true;
150
+ this.props['event'](selectedOffer.offerId);
151
+ }
152
+ }
153
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FormlyViewOffersComponent, deps: [{ token: i1.ApplicationDataService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
154
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: FormlyViewOffersComponent, selector: "app-formly-view-offers", usesInheritance: true, ngImport: i0, template: "<mat-spinner *ngIf=\"isLoading\" class=\"m-x-auto upload-spinner\"></mat-spinner>\n<ng-container class=\"d-flex flex-row\" *ngIf=\"!isLoading\">\n <mat-card class=\"cardWithShadow blue_theme theme-card align-items-stretch\">\n <mat-card-content class=\"p-24\">\n <shared-grid [data]=\"datasource\"\n [count]=\"datasource.length\"\n [columns]=\"columns\"\n [config]=\"config\"\n (open)=\"offerSelected($event)\"></shared-grid>\n </mat-card-content>\n </mat-card>\n</ng-container>\n", styles: [""], dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "directive", type: i3.MatCardContent, selector: "mat-card-content" }, { kind: "component", type: i4.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }, { kind: "component", type: i5.GridComponent, selector: "shared-grid", inputs: ["data", "count", "columns", "config"], outputs: ["reload", "delete", "duplicate", "open"] }] }); }
155
+ }
156
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FormlyViewOffersComponent, decorators: [{
157
+ type: Component,
158
+ args: [{ selector: 'app-formly-view-offers', template: "<mat-spinner *ngIf=\"isLoading\" class=\"m-x-auto upload-spinner\"></mat-spinner>\n<ng-container class=\"d-flex flex-row\" *ngIf=\"!isLoading\">\n <mat-card class=\"cardWithShadow blue_theme theme-card align-items-stretch\">\n <mat-card-content class=\"p-24\">\n <shared-grid [data]=\"datasource\"\n [count]=\"datasource.length\"\n [columns]=\"columns\"\n [config]=\"config\"\n (open)=\"offerSelected($event)\"></shared-grid>\n </mat-card-content>\n </mat-card>\n</ng-container>\n" }]
159
+ }], ctorParameters: () => [{ type: i1.ApplicationDataService }, { type: i0.ChangeDetectorRef }] });
160
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybWx5LXZpZXctb2ZmZXJzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL29yaWdpbi1mb3JtL3NyYy9saWIvZm9ybWx5L2Zvcm1seS12aWV3LW9mZmVycy9mb3JtbHktdmlldy1vZmZlcnMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvb3JpZ2luLWZvcm0vc3JjL2xpYi9mb3JtbHkvZm9ybWx5LXZpZXctb2ZmZXJzL2Zvcm1seS12aWV3LW9mZmVycy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQXFCLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUU3RCxPQUFPLEVBQ0wsYUFBYSxFQUViLFdBQVcsRUFDWCxlQUFlLEdBQ2hCLE1BQU0sMEJBQTBCLENBQUM7QUFDbEMsT0FBTyxFQUFFLFdBQVcsRUFBYSxNQUFNLGdCQUFnQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUMzQyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNyRSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQzs7Ozs7OztBQU9sRSxNQUFNLE9BQU8seUJBQTBCLFNBQVEsdUJBQXVCO0lBUXBFLFlBQ1UsY0FBc0MsRUFDOUMsR0FBc0I7UUFFdEIsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBSEgsbUJBQWMsR0FBZCxjQUFjLENBQXdCO1FBUGhELFdBQU0sR0FBUSxFQUFFLENBQUM7UUFHakIsV0FBTSxHQUFHO1lBQ1AsTUFBTSxFQUFFLEtBQUs7U0FDZCxDQUFDO0lBTUYsQ0FBQztJQUVRLE1BQU07UUFDYixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztRQUN0QixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDdkMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7SUFDMUIsQ0FBQztJQUVRLGNBQWM7UUFDckIsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7UUFFdEIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztZQUN0RCxJQUFJLEVBQUUsQ0FBQyxNQUFNLEVBQUUsRUFBRTtnQkFDZixJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztnQkFDckIsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7Z0JBQzNCLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO2dCQUN2QixJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQzNCLENBQUM7WUFDRCxLQUFLLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRTtnQkFDYixJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztnQkFDdkIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUMzQixDQUFDO1NBQ0YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELGdCQUFnQjtRQUNkLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQztRQUM3QyxPQUFPLENBQUMsSUFBSSxDQUNWLENBQUMsQ0FBb0IsRUFBRSxDQUFvQixFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQ2xFLENBQUM7UUFFRixNQUFNLEtBQUssR0FBRyxJQUFJLEdBQUcsRUFBa0IsQ0FBQztRQUN4QyxNQUFNLFdBQVcsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBZ0MsRUFBRSxFQUFFO1lBQ25FLElBQUksRUFBRSxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLGdCQUFnQixFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBQ2xELE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ2pDLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQztZQUN6QixJQUFJLEtBQUssR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDZCxFQUFFLEdBQUcsR0FBRyxFQUFFLElBQUksS0FBSyxFQUFFLENBQUM7WUFDeEIsQ0FBQztZQUNELE9BQU87Z0JBQ0wsRUFBRTtnQkFDRixhQUFhLEVBQUUsR0FBRyxDQUFDLEtBQUs7Z0JBQ3hCLEtBQUssRUFDSCxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFdBQVcsS0FBSyxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsS0FBSyxJQUFJLEtBQUs7YUFDdkUsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUFDO1FBRUgsTUFBTSxhQUFhLEdBQUc7WUFDcEI7Z0JBQ0UsRUFBRSxFQUFFLE1BQU07Z0JBQ1YsSUFBSSxFQUFFLEtBQUs7Z0JBQ1gsS0FBSyxFQUFFLEdBQUc7YUFDWDtTQUNGLENBQUM7UUFFRixJQUFJLENBQUMsT0FBTyxHQUFHLENBQUMsR0FBRyxXQUFXLEVBQUUsR0FBRyxhQUFhLENBQUMsQ0FBQztJQUNwRCxDQUFDO0lBRUQsbUJBQW1CO1FBQ2pCLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUM7UUFFakUsSUFBSSxVQUFVLEdBQVUsRUFBRSxDQUFDO1FBRTNCLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBTSxFQUFFLEVBQUU7WUFDN0IsSUFBSSxhQUFhLEdBQXdCLEVBQUUsQ0FBQztZQUM1QyxhQUFhLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQztZQUNyQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBVyxFQUFFLEVBQUU7Z0JBQzlCLE1BQU0sV0FBVyxHQUFHLE1BQU0sQ0FBQyxhQUFhLENBQUM7Z0JBQ3pDLElBQUksV0FBVyxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO29CQUNsQyxNQUFNLE9BQU8sR0FBRyxXQUFXLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO29CQUNoRCxNQUFNLFVBQVUsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQU0sRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sS0FBSyxPQUFPLENBQUMsQ0FBQztvQkFDcEUsTUFBTSxLQUFLLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7b0JBQ2pELGFBQWEsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDO2dCQUNuQyxDQUFDO3FCQUFNLElBQUksV0FBVyxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDO29CQUM5QyxRQUFRLFdBQVcsRUFBRSxDQUFDO3dCQUNwQixLQUFLLG9CQUFvQixDQUFDLENBQUMsQ0FBQzs0QkFDMUIsYUFBYSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDOzRCQUMxQyxNQUFNO3dCQUNSLENBQUM7d0JBQ0QsS0FBSywwQkFBMEIsQ0FBQyxDQUFDLENBQUM7NEJBQ2hDLGFBQWEsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQUM7NEJBQ3pELE1BQU07d0JBQ1IsQ0FBQzt3QkFDRCxPQUFPLENBQUMsQ0FBQyxDQUFDO3dCQUNWLENBQUM7b0JBQ0gsQ0FBQztnQkFDSCxDQUFDO3FCQUFNLENBQUM7b0JBQ04sTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUM7b0JBQzNDLElBQUksS0FBSyxLQUFLLFNBQVMsRUFBRSxDQUFDO3dCQUN4QixhQUFhLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQztvQkFDbkMsQ0FBQztnQkFDSCxDQUFDO1lBQ0gsQ0FBQyxDQUFDLENBQUM7WUFFSCxVQUFVLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ2pDLENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUM7SUFDL0IsQ0FBQztJQUVELGFBQWEsQ0FBQyxLQUFVO1FBQ3RCLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxJQUFpQixDQUFDO1FBQ3pDLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQztRQUV6QyxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FDcEMsQ0FBQyxDQUFNLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLEtBQUssS0FBSyxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQzNDLENBQUM7UUFDRixJQUFJLENBQUMsYUFBYTtZQUFFLE9BQU87UUFFM0IsYUFBYSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFNLEVBQUUsRUFBRTtZQUN0QyxVQUFVLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUM7WUFFaEMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7Z0JBQ25DLFNBQVMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxJQUFJLFdBQVcsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztZQUM1RCxDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNqQyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEdBQUcsYUFBYSxDQUFDLE9BQU8sQ0FBQztRQUVyRCxNQUFNLE9BQU8sR0FBRztZQUNkLEtBQUssRUFBRSxFQUFFO1lBQ1QsVUFBVSxFQUFFLEVBQUU7WUFDZCxZQUFZLEVBQUUsRUFBRTtZQUNoQixnQkFBZ0IsRUFBRSxLQUFLO1lBQ3ZCLG9CQUFvQixFQUFFLEtBQUs7WUFDM0IsbUJBQW1CLEVBQUUsS0FBSztZQUMxQixtQkFBbUIsRUFBRSxJQUFJLHVCQUF1QixFQUFFO1lBQ2xELG9CQUFvQixFQUFFLEVBQUU7WUFDeEIsU0FBUyxFQUFFLEtBQUs7WUFDaEIsVUFBVSxFQUFFLEtBQUssQ0FBQyxZQUFZLEVBQUU7WUFDaEMsSUFBSSxFQUFFLFdBQVcsQ0FBQyxPQUFPO1lBQ3pCLFFBQVEsRUFBRSxhQUFhLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQU0sRUFBRSxFQUFFLENBQUMsQ0FBQztnQkFDOUMsVUFBVSxFQUFFLENBQUMsQ0FBQyxPQUFPO2dCQUNyQixLQUFLLEVBQUUsRUFBRTtnQkFDVCxZQUFZLEVBQUUsRUFBRTtnQkFDaEIsSUFBSSxFQUFFLGVBQWUsQ0FBQyxXQUFXO2dCQUNqQyxTQUFTLEVBQUUsQ0FBQztnQkFDWixhQUFhLEVBQUUsYUFBYSxDQUFDLFVBQVU7Z0JBQ3ZDLGFBQWEsRUFBRSxLQUFLO2dCQUNwQixtQkFBbUIsRUFBRSxTQUFTO2dCQUM5QixtQkFBbUIsRUFBRSxJQUFJLHVCQUF1QixFQUFFO2dCQUNsRCxTQUFTLEVBQUUsS0FBSztnQkFDaEIsV0FBVyxFQUFFLEtBQUs7YUFDbkIsQ0FBQyxDQUFDO1NBQ0osQ0FBQztRQUVGLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDbkMsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDeEIsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7WUFDdEIsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDN0MsQ0FBQztJQUNILENBQUM7K0dBcEtVLHlCQUF5QjttR0FBekIseUJBQXlCLHFGQ2xCdEMsdWpCQVlBOzs0RkRNYSx5QkFBeUI7a0JBTHJDLFNBQVM7K0JBQ0Usd0JBQXdCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQXBwbGljYXRpb25EYXRhU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2FwcGxpY2F0aW9uRGF0YS5zZXJ2aWNlJztcbmltcG9ydCB7XG4gIERpbWVuc2lvblR5cGUsXG4gIEZvcm1Nb2RlbCxcbiAgU2VjdGlvblR5cGUsXG4gIFN0ZXBDb250cm9sVHlwZSxcbn0gZnJvbSAnLi4vLi4vbW9kZWxzL2Zvcm1zLm1vZGVsJztcbmltcG9ydCB7IEZvcm1Db250cm9sLCBGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBVdGlscyB9IGZyb20gJy4uLy4uL290aGVycy91dGlscyc7XG5pbXBvcnQgeyBCYXNlRm9ybWx5U3RlcENvbXBvbmVudCB9IGZyb20gJy4uL2Jhc2VGb3JtbHlTdGVwQ29tcG9uZW50JztcbmltcG9ydCB7IERlcGVuZGVudERpY3Rpb25hcnlEYXRhIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2ZsdXgubW9kZWwnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhcHAtZm9ybWx5LXZpZXctb2ZmZXJzJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2Zvcm1seS12aWV3LW9mZmVycy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsOiAnLi9mb3JtbHktdmlldy1vZmZlcnMuY29tcG9uZW50LnNjc3MnLFxufSlcbmV4cG9ydCBjbGFzcyBGb3JtbHlWaWV3T2ZmZXJzQ29tcG9uZW50IGV4dGVuZHMgQmFzZUZvcm1seVN0ZXBDb21wb25lbnQge1xuICBhcHBNb2RlbDogRm9ybU1vZGVsO1xuICBvZmZlcnM6IGFueSA9IFtdO1xuICBjb2x1bW5zOiBhbnk7XG4gIGRhdGFzb3VyY2U6IGFueVtdO1xuICBjb25maWcgPSB7XG4gICAgZmlsdGVyOiBmYWxzZSxcbiAgfTtcbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBhcHBEYXRhU2VydmljZTogQXBwbGljYXRpb25EYXRhU2VydmljZSxcbiAgICBjZHI6IENoYW5nZURldGVjdG9yUmVmXG4gICkge1xuICAgIHN1cGVyKGNkcik7XG4gIH1cblxuICBvdmVycmlkZSBvbkluaXQoKSB7XG4gICAgdGhpcy5pc0xvYWRpbmcgPSB0cnVlO1xuICAgIHRoaXMuYXBwTW9kZWwgPSB0aGlzLnByb3BzWydhcHBNb2RlbCddO1xuICAgIHRoaXMuY29uZmlndXJlQ29sdW1ucygpO1xuICB9XG5cbiAgb3ZlcnJpZGUgb25QYWdlU2VsZWN0ZWQoKSB7XG4gICAgdGhpcy5pc0xvYWRpbmcgPSB0cnVlO1xuXG4gICAgdGhpcy5hcHBEYXRhU2VydmljZS5nZXRPZmZlcnModGhpcy5hcHBEYXRhSWQpLnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiAocmVzdWx0KSA9PiB7XG4gICAgICAgIHRoaXMub2ZmZXJzID0gcmVzdWx0O1xuICAgICAgICB0aGlzLmNvbmZpZ3VyZURhdGFTb3VyY2UoKTtcbiAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgfSxcbiAgICAgIGVycm9yOiAoZXJyKSA9PiB7XG4gICAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XG4gICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICBjb25maWd1cmVDb2x1bW5zKCkge1xuICAgIGNvbnN0IGNvbHVtbnMgPSB0aGlzLnN0ZXBEYXRhLmNvbmZpZy5jb2x1bW5zO1xuICAgIGNvbHVtbnMuc29ydChcbiAgICAgIChhOiB7IG9yZGVyOiBudW1iZXIgfSwgYjogeyBvcmRlcjogbnVtYmVyIH0pID0+IGEub3JkZXIgLSBiLm9yZGVyXG4gICAgKTtcblxuICAgIGNvbnN0IGlkTWFwID0gbmV3IE1hcDxzdHJpbmcsIG51bWJlcj4oKTtcbiAgICBjb25zdCBiYXNlQ29sdW1ucyA9IGNvbHVtbnMubWFwKChjb2w6IHsgZmllbGQ6IGFueTsgbmFtZTogYW55W10gfSkgPT4ge1xuICAgICAgbGV0IGlkID0gY29sLmZpZWxkLnJlcGxhY2UoL1teYS16QS1aMC05XSsvZywgJ18nKTtcbiAgICAgIGNvbnN0IGNvdW50ID0gaWRNYXAuZ2V0KGlkKSB8fCAwO1xuICAgICAgaWRNYXAuc2V0KGlkLCBjb3VudCArIDEpO1xuICAgICAgaWYgKGNvdW50ID4gMCkge1xuICAgICAgICBpZCA9IGAke2lkfV8ke2NvdW50fWA7XG4gICAgICB9XG4gICAgICByZXR1cm4ge1xuICAgICAgICBpZCxcbiAgICAgICAgb3JpZ2luYWxGaWVsZDogY29sLmZpZWxkLFxuICAgICAgICBsYWJlbDpcbiAgICAgICAgICBjb2wubmFtZS5maW5kKChuKSA9PiBuLmxhbmd1YWdlSXNvID09PSB0aGlzLmxhbmdJc28pPy52YWx1ZSB8fCAnTi9BJyxcbiAgICAgIH07XG4gICAgfSk7XG5cbiAgICBjb25zdCBhY3Rpb25Db2x1bW5zID0gW1xuICAgICAge1xuICAgICAgICBpZDogJ29wZW4nLFxuICAgICAgICBpY29uOiAnZXllJyxcbiAgICAgICAgcm91dGU6ICcjJyxcbiAgICAgIH0sXG4gICAgXTtcblxuICAgIHRoaXMuY29sdW1ucyA9IFsuLi5iYXNlQ29sdW1ucywgLi4uYWN0aW9uQ29sdW1uc107XG4gIH1cblxuICBjb25maWd1cmVEYXRhU291cmNlKCkge1xuICAgIGNvbnN0IGNvbHVtbnMgPSB0aGlzLmNvbHVtbnMuZmlsdGVyKChjOiBhbnkpID0+IGMub3JpZ2luYWxGaWVsZCk7XG5cbiAgICBsZXQgZGF0YVNvdXJjZTogYW55W10gPSBbXTtcblxuICAgIHRoaXMub2ZmZXJzLmZvckVhY2goKG86IGFueSkgPT4ge1xuICAgICAgbGV0IGRhdGFTb3VyY2VSb3c6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fTtcbiAgICAgIGRhdGFTb3VyY2VSb3dbJ29mZmVySWQnXSA9IG8ub2ZmZXJJZDtcbiAgICAgIGNvbHVtbnMuZm9yRWFjaCgoY29sdW1uOiBhbnkpID0+IHtcbiAgICAgICAgY29uc3QgY29sdW1uRmllbGQgPSBjb2x1bW4ub3JpZ2luYWxGaWVsZDtcbiAgICAgICAgaWYgKGNvbHVtbkZpZWxkLnN0YXJ0c1dpdGgoJ2FwaScpKSB7XG4gICAgICAgICAgY29uc3QgZmllbGRJZCA9IGNvbHVtbkZpZWxkLnNwbGl0KCcgLT4gJykucG9wKCk7XG4gICAgICAgICAgY29uc3Qgb2ZmZXJGaWVsZCA9IG8uZmllbGRzLmZpbmQoKGY6IGFueSkgPT4gZi5maWVsZElkID09PSBmaWVsZElkKTtcbiAgICAgICAgICBjb25zdCB2YWx1ZSA9IG9mZmVyRmllbGQgPyBvZmZlckZpZWxkLnZhbHVlIDogJyc7XG4gICAgICAgICAgZGF0YVNvdXJjZVJvd1tjb2x1bW4uaWRdID0gdmFsdWU7XG4gICAgICAgIH0gZWxzZSBpZiAoY29sdW1uRmllbGQuc3RhcnRzV2l0aCgnbWV0YWRhdGEnKSkge1xuICAgICAgICAgIHN3aXRjaCAoY29sdW1uRmllbGQpIHtcbiAgICAgICAgICAgIGNhc2UgJ21ldGFkYXRhLmFwcERhdGFJZCc6IHtcbiAgICAgICAgICAgICAgZGF0YVNvdXJjZVJvd1tjb2x1bW4uaWRdID0gdGhpcy5hcHBEYXRhSWQ7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSAnbWV0YWRhdGEuY29uZmlndXJhdGlvbklkJzoge1xuICAgICAgICAgICAgICBkYXRhU291cmNlUm93W2NvbHVtbi5pZF0gPSB0aGlzLmFwcE1vZGVsLmFwcGxpY2F0aW9uVXVpZDtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5mb3JtLnZhbHVlW2NvbHVtbkZpZWxkXTtcbiAgICAgICAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgZGF0YVNvdXJjZVJvd1tjb2x1bW4uaWRdID0gdmFsdWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgZGF0YVNvdXJjZS5wdXNoKGRhdGFTb3VyY2VSb3cpO1xuICAgIH0pO1xuICAgIHRoaXMuZGF0YXNvdXJjZSA9IGRhdGFTb3VyY2U7XG4gIH1cblxuICBvZmZlclNlbGVjdGVkKG9mZmVyOiBhbnkpIHtcbiAgICBjb25zdCBmb3JtR3JvdXAgPSB0aGlzLmZvcm0gYXMgRm9ybUdyb3VwO1xuICAgIGNvbnN0IGZvcm1WYWx1ZXMgPSB0aGlzLmZvcm0udmFsdWUgfHwge307XG5cbiAgICBjb25zdCBzZWxlY3RlZE9mZmVyID0gdGhpcy5vZmZlcnMuZmluZChcbiAgICAgIChvOiBhbnkpID0+IG8ub2ZmZXJJZCA9PT0gb2ZmZXIuaWQub2ZmZXJJZFxuICAgICk7XG4gICAgaWYgKCFzZWxlY3RlZE9mZmVyKSByZXR1cm47XG5cbiAgICBzZWxlY3RlZE9mZmVyLmZpZWxkcy5mb3JFYWNoKChmOiBhbnkpID0+IHtcbiAgICAgIGZvcm1WYWx1ZXNbZi5maWVsZElkXSA9IGYudmFsdWU7XG5cbiAgICAgIGlmICghZm9ybUdyb3VwLmNvbnRyb2xzW2YuZmllbGRJZF0pIHtcbiAgICAgICAgZm9ybUdyb3VwLmFkZENvbnRyb2woZi5maWVsZElkLCBuZXcgRm9ybUNvbnRyb2woZi52YWx1ZSkpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdGhpcy5mb3JtLnBhdGNoVmFsdWUoZm9ybVZhbHVlcyk7XG4gICAgdGhpcy5zdGVwRGF0YS5jb25maWcub2ZmZXJJZCA9IHNlbGVjdGVkT2ZmZXIub2ZmZXJJZDtcblxuICAgIGNvbnN0IHNlY3Rpb24gPSB7XG4gICAgICB0aXRsZTogJycsXG4gICAgICB0aXRsZVN0eWxlOiAnJyxcbiAgICAgIHRyYW5zbGF0aW9uczogW10sXG4gICAgICBzaG93U2VjdGlvblRpdGxlOiBmYWxzZSxcbiAgICAgIHNob3dTZWN0aW9uU2VwYXJhdG9yOiBmYWxzZSxcbiAgICAgIGlzTmF2aWdhdGlvblNlY3Rpb246IGZhbHNlLFxuICAgICAgZGVwZW5kZW50RGljdGlvbmFyeTogbmV3IERlcGVuZGVudERpY3Rpb25hcnlEYXRhKCksXG4gICAgICBwcmVzZW50YXRpb25Db250cm9sczogW10sXG4gICAgICBjYW5EZXBlbmQ6IGZhbHNlLFxuICAgICAgaWRlbnRpZmllcjogVXRpbHMuZ2VuZXJhdGVVVUlEKCksXG4gICAgICB0eXBlOiBTZWN0aW9uVHlwZS5Db2xsZWN0LFxuICAgICAgY29udHJvbHM6IHNlbGVjdGVkT2ZmZXIuZmllbGRzLm1hcCgoZjogYW55KSA9PiAoe1xuICAgICAgICBpZGVudGlmaWVyOiBmLmZpZWxkSWQsXG4gICAgICAgIHRpdGxlOiAnJyxcbiAgICAgICAgdHJhbnNsYXRpb25zOiBbXSxcbiAgICAgICAgdHlwZTogU3RlcENvbnRyb2xUeXBlLk1hbnVhbElucHV0LFxuICAgICAgICBkaW1lbnNpb246IDAsXG4gICAgICAgIGRpbWVuc2lvblR5cGU6IERpbWVuc2lvblR5cGUuUGVyY2VudGFnZSxcbiAgICAgICAgYXV0b0RpbWVuc2lvbjogZmFsc2UsXG4gICAgICAgIHNwZWNpZmljQ29udHJvbERhdGE6IHVuZGVmaW5lZCxcbiAgICAgICAgZGVwZW5kZW50RGljdGlvbmFyeTogbmV3IERlcGVuZGVudERpY3Rpb25hcnlEYXRhKCksXG4gICAgICAgIGNhbkRlcGVuZDogZmFsc2UsXG4gICAgICAgIGlzTWFuZGF0b3J5OiBmYWxzZSxcbiAgICAgIH0pKSxcbiAgICB9O1xuXG4gICAgdGhpcy5zdGVwRGF0YS5zZWN0aW9ucyA9IFtzZWN0aW9uXTtcbiAgICBpZiAodGhpcy5wcm9wc1snZXZlbnQnXSkge1xuICAgICAgdGhpcy5pc0xvYWRpbmcgPSB0cnVlO1xuICAgICAgdGhpcy5wcm9wc1snZXZlbnQnXShzZWxlY3RlZE9mZmVyLm9mZmVySWQpO1xuICAgIH1cbiAgfVxufVxuIiwiPG1hdC1zcGlubmVyICpuZ0lmPVwiaXNMb2FkaW5nXCIgY2xhc3M9XCJtLXgtYXV0byB1cGxvYWQtc3Bpbm5lclwiPjwvbWF0LXNwaW5uZXI+XG48bmctY29udGFpbmVyIGNsYXNzPVwiZC1mbGV4IGZsZXgtcm93XCIgKm5nSWY9XCIhaXNMb2FkaW5nXCI+XG4gIDxtYXQtY2FyZCBjbGFzcz1cImNhcmRXaXRoU2hhZG93IGJsdWVfdGhlbWUgdGhlbWUtY2FyZCBhbGlnbi1pdGVtcy1zdHJldGNoXCI+XG4gICAgPG1hdC1jYXJkLWNvbnRlbnQgY2xhc3M9XCJwLTI0XCI+XG4gICAgICA8c2hhcmVkLWdyaWQgW2RhdGFdPVwiZGF0YXNvdXJjZVwiXG4gICAgICAgICAgICAgICAgICAgW2NvdW50XT1cImRhdGFzb3VyY2UubGVuZ3RoXCJcbiAgICAgICAgICAgICAgICAgICBbY29sdW1uc109XCJjb2x1bW5zXCJcbiAgICAgICAgICAgICAgICAgICBbY29uZmlnXT1cImNvbmZpZ1wiXG4gICAgICAgICAgICAgICAgICAgKG9wZW4pPVwib2ZmZXJTZWxlY3RlZCgkZXZlbnQpXCI+PC9zaGFyZWQtZ3JpZD5cbiAgICA8L21hdC1jYXJkLWNvbnRlbnQ+XG4gIDwvbWF0LWNhcmQ+XG48L25nLWNvbnRhaW5lcj5cbiJdfQ==