barsa-develop-components 0.0.2

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 (108) hide show
  1. package/README.md +25 -0
  2. package/esm2020/barsa-develop-components.mjs +5 -0
  3. package/esm2020/lib/avatar/avatar.component.mjs +19 -0
  4. package/esm2020/lib/barcode-format-pipe.mjs +24 -0
  5. package/esm2020/lib/barcode-reader/barcode-reader.component.mjs +64 -0
  6. package/esm2020/lib/barcode-reader-dialog/barcode-reader-dialog.component.mjs +82 -0
  7. package/esm2020/lib/barcode-reader-video/barcode-reader-video.component.mjs +66 -0
  8. package/esm2020/lib/barcode.service.mjs +330 -0
  9. package/esm2020/lib/barsa-develop-components.module.mjs +224 -0
  10. package/esm2020/lib/card-content-image-and-title/card-content-image-and-title.component.mjs +50 -0
  11. package/esm2020/lib/card-content-line-chart/card-content-line-chart.component.mjs +38 -0
  12. package/esm2020/lib/card-header-big-image-title-and-subtitle/card-header-big-image-title-and-subtitle.component.mjs +20 -0
  13. package/esm2020/lib/card-header-kpi/card-header-kpi.component.mjs +36 -0
  14. package/esm2020/lib/card-header-logo-title-subtitle/card-header-logo-title-subtitle.component.mjs +46 -0
  15. package/esm2020/lib/checkbox-button/checkbox-button.component.mjs +23 -0
  16. package/esm2020/lib/enum-info-micro-proccess-flow/enum-info-micro-proccess-flow.component.mjs +17 -0
  17. package/esm2020/lib/form-chart-content/form-chart-content.component.mjs +38 -0
  18. package/esm2020/lib/form-content-quick-view/form-content-quick-view.component.mjs +51 -0
  19. package/esm2020/lib/g4b-details/g4b-details.component.mjs +28 -0
  20. package/esm2020/lib/g4b-estelam/g4b-estelam.component.mjs +30 -0
  21. package/esm2020/lib/login-form/login-form.component.mjs +49 -0
  22. package/esm2020/lib/login-social-conncetions/login-social-conncetions.component.mjs +30 -0
  23. package/esm2020/lib/micro-proccess-flow/micro-proccess-flow.component.mjs +48 -0
  24. package/esm2020/lib/micro-process-flow-view/micro-process-flow-view.component.mjs +24 -0
  25. package/esm2020/lib/mo-info-micro-proccess-flow/mo-info-micro-proccess-flow.component.mjs +23 -0
  26. package/esm2020/lib/models/models.mjs +2 -0
  27. package/esm2020/lib/models/person.mjs +2 -0
  28. package/esm2020/lib/pipes/datasource-to-flow-item.mjs +22 -0
  29. package/esm2020/lib/pipes/index.mjs +3 -0
  30. package/esm2020/lib/pipes/mo-list-to-flow-item.pipe.mjs +22 -0
  31. package/esm2020/lib/query-string-form-observable/query-string-form-observable.component.mjs +37 -0
  32. package/esm2020/lib/query-string-observable/query-string-observable.component.mjs +22 -0
  33. package/esm2020/lib/report-line-chart-view/report-line-chart-view.component.mjs +13 -0
  34. package/esm2020/lib/report-tab-view/report-tab-view.component.mjs +27 -0
  35. package/esm2020/lib/resend-verification-code/resend-verification-code.component.mjs +59 -0
  36. package/esm2020/lib/service-desk-card-content-mojavezhay-akhz-shode/service-desk-card-content-mojavezhay-akhz-shode.component.mjs +28 -0
  37. package/esm2020/lib/service-desk-form-layout-content-mojavez/service-desk-form-layout-content-mojavez.component.mjs +110 -0
  38. package/esm2020/lib/service-desk-header/service-desk-header.component.mjs +229 -0
  39. package/esm2020/lib/service-desk-servcie-detail/service-desk-servcie-detail.component.mjs +147 -0
  40. package/esm2020/lib/service-desk-view-of-services/service-desk-view-of-services.component.mjs +22 -0
  41. package/esm2020/lib/setting-form/setting-form.component.mjs +66 -0
  42. package/esm2020/lib/tab-process-view/tab-process-view.component.mjs +41 -0
  43. package/esm2020/lib/table-view-vertical-columns/table-view-vertical-columns.component.mjs +15 -0
  44. package/esm2020/lib/timer-count-down/timer-count-down.component.mjs +79 -0
  45. package/esm2020/lib/ui-enum-segmented-button/ui-enum-segmented-button.component.mjs +25 -0
  46. package/esm2020/lib/ui-num-rate/ui-num-rate.component.mjs +18 -0
  47. package/esm2020/lib/ui-person/ui-person.component.mjs +160 -0
  48. package/esm2020/lib/ui-person/ui-person.pipe.mjs +40 -0
  49. package/esm2020/lib/ui-pictures-carousel/ui-pictures-carousel.component.mjs +17 -0
  50. package/esm2020/lib/ui-text-field-search/ui-text-field-search.component.mjs +30 -0
  51. package/esm2020/lib/ulv-context-menu-item-show-file-content/ulv-context-menu-item-show-file-content.component.mjs +70 -0
  52. package/esm2020/public-api.mjs +47 -0
  53. package/fesm2015/barsa-develop-components.mjs +2368 -0
  54. package/fesm2015/barsa-develop-components.mjs.map +1 -0
  55. package/fesm2020/barsa-develop-components.mjs +2344 -0
  56. package/fesm2020/barsa-develop-components.mjs.map +1 -0
  57. package/index.d.ts +5 -0
  58. package/lib/avatar/avatar.component.d.ts +9 -0
  59. package/lib/barcode-format-pipe.d.ts +7 -0
  60. package/lib/barcode-reader/barcode-reader.component.d.ts +19 -0
  61. package/lib/barcode-reader-dialog/barcode-reader-dialog.component.d.ts +32 -0
  62. package/lib/barcode-reader-video/barcode-reader-video.component.d.ts +22 -0
  63. package/lib/barcode.service.d.ts +98 -0
  64. package/lib/barsa-develop-components.module.d.ts +94 -0
  65. package/lib/card-content-image-and-title/card-content-image-and-title.component.d.ts +21 -0
  66. package/lib/card-content-line-chart/card-content-line-chart.component.d.ts +9 -0
  67. package/lib/card-header-big-image-title-and-subtitle/card-header-big-image-title-and-subtitle.component.d.ts +6 -0
  68. package/lib/card-header-kpi/card-header-kpi.component.d.ts +14 -0
  69. package/lib/card-header-logo-title-subtitle/card-header-logo-title-subtitle.component.d.ts +23 -0
  70. package/lib/checkbox-button/checkbox-button.component.d.ts +13 -0
  71. package/lib/enum-info-micro-proccess-flow/enum-info-micro-proccess-flow.component.d.ts +8 -0
  72. package/lib/form-chart-content/form-chart-content.component.d.ts +9 -0
  73. package/lib/form-content-quick-view/form-content-quick-view.component.d.ts +13 -0
  74. package/lib/g4b-details/g4b-details.component.d.ts +9 -0
  75. package/lib/g4b-estelam/g4b-estelam.component.d.ts +11 -0
  76. package/lib/login-form/login-form.component.d.ts +15 -0
  77. package/lib/login-social-conncetions/login-social-conncetions.component.d.ts +12 -0
  78. package/lib/micro-proccess-flow/micro-proccess-flow.component.d.ts +22 -0
  79. package/lib/micro-process-flow-view/micro-process-flow-view.component.d.ts +14 -0
  80. package/lib/mo-info-micro-proccess-flow/mo-info-micro-proccess-flow.component.d.ts +9 -0
  81. package/lib/models/models.d.ts +19 -0
  82. package/lib/models/person.d.ts +10 -0
  83. package/lib/pipes/datasource-to-flow-item.d.ts +10 -0
  84. package/lib/pipes/index.d.ts +2 -0
  85. package/lib/pipes/mo-list-to-flow-item.pipe.d.ts +10 -0
  86. package/lib/query-string-form-observable/query-string-form-observable.component.d.ts +13 -0
  87. package/lib/query-string-observable/query-string-observable.component.d.ts +9 -0
  88. package/lib/report-line-chart-view/report-line-chart-view.component.d.ts +7 -0
  89. package/lib/report-tab-view/report-tab-view.component.d.ts +15 -0
  90. package/lib/resend-verification-code/resend-verification-code.component.d.ts +18 -0
  91. package/lib/service-desk-card-content-mojavezhay-akhz-shode/service-desk-card-content-mojavezhay-akhz-shode.component.d.ts +15 -0
  92. package/lib/service-desk-form-layout-content-mojavez/service-desk-form-layout-content-mojavez.component.d.ts +26 -0
  93. package/lib/service-desk-header/service-desk-header.component.d.ts +57 -0
  94. package/lib/service-desk-servcie-detail/service-desk-servcie-detail.component.d.ts +39 -0
  95. package/lib/service-desk-view-of-services/service-desk-view-of-services.component.d.ts +12 -0
  96. package/lib/setting-form/setting-form.component.d.ts +23 -0
  97. package/lib/tab-process-view/tab-process-view.component.d.ts +19 -0
  98. package/lib/table-view-vertical-columns/table-view-vertical-columns.component.d.ts +6 -0
  99. package/lib/timer-count-down/timer-count-down.component.d.ts +15 -0
  100. package/lib/ui-enum-segmented-button/ui-enum-segmented-button.component.d.ts +9 -0
  101. package/lib/ui-num-rate/ui-num-rate.component.d.ts +8 -0
  102. package/lib/ui-person/ui-person.component.d.ts +31 -0
  103. package/lib/ui-person/ui-person.pipe.d.ts +7 -0
  104. package/lib/ui-pictures-carousel/ui-pictures-carousel.component.d.ts +6 -0
  105. package/lib/ui-text-field-search/ui-text-field-search.component.d.ts +14 -0
  106. package/lib/ulv-context-menu-item-show-file-content/ulv-context-menu-item-show-file-content.component.d.ts +25 -0
  107. package/package.json +31 -0
  108. package/public-api.d.ts +43 -0
@@ -0,0 +1,330 @@
1
+ import { DecodeHintType, BarcodeFormat } from '@zxing/library';
2
+ import { ChecksumException, FormatException, NotFoundException } from '@zxing/library';
3
+ import { BrowserCodeReader, BrowserMultiFormatReader } from '@zxing/browser';
4
+ import { BehaviorSubject, Subject } from 'rxjs';
5
+ import { filter, map, shareReplay } from 'rxjs/operators';
6
+ import { Injectable } from '@angular/core';
7
+ import * as i0 from "@angular/core";
8
+ import * as i1 from "barsa-novin-ray-core";
9
+ /**
10
+ * Based on zxing-typescript BrowserCodeReader
11
+ */
12
+ export class BrowserMultiFormatContinuousReader extends BrowserMultiFormatReader {
13
+ /**
14
+ * Returns the code reader scanner controls.
15
+ */
16
+ getScannerControls() {
17
+ if (!this.scannerControls) {
18
+ throw new Error('No scanning is running at the time.');
19
+ }
20
+ return this.scannerControls;
21
+ }
22
+ /**
23
+ * Starts the decoding from the current or a new video element.
24
+ *
25
+ * @param deviceId The device's to be used Id
26
+ * @param previewEl A new video element
27
+ */
28
+ async scanFromDeviceObservable(deviceId, previewEl) {
29
+ const scan$ = new BehaviorSubject({});
30
+ let ctrls;
31
+ try {
32
+ ctrls = await this.decodeFromVideoDevice(deviceId, previewEl, (result, error) => {
33
+ if (!error) {
34
+ scan$.next({ result });
35
+ return;
36
+ }
37
+ console.error(error);
38
+ const errorName = error.name;
39
+ // stream cannot stop on fails.
40
+ if (
41
+ // scan Failure - found nothing, no error
42
+ errorName === NotFoundException.name ||
43
+ // scan Error - found the QR but got error on decoding
44
+ errorName === ChecksumException.name ||
45
+ errorName === FormatException.name ||
46
+ error.message.includes('No MultiFormat Readers were able to detect the code.')) {
47
+ scan$.next({ error });
48
+ return;
49
+ }
50
+ // probably fatal error
51
+ scan$.error(error);
52
+ this.scannerControls?.stop();
53
+ this.scannerControls = undefined;
54
+ return;
55
+ });
56
+ this.scannerControls = {
57
+ ...ctrls,
58
+ stop() {
59
+ ctrls.stop();
60
+ scan$.complete();
61
+ }
62
+ };
63
+ }
64
+ catch (e) {
65
+ scan$.error(e);
66
+ this.scannerControls?.stop();
67
+ this.scannerControls = undefined;
68
+ }
69
+ return scan$.asObservable();
70
+ }
71
+ }
72
+ export class UserMediaBaseService {
73
+ /**
74
+ *
75
+ */
76
+ constructor(_logService) {
77
+ this._logService = _logService;
78
+ this.hasNavigator = false;
79
+ this.isMediaDevicesSupported = false;
80
+ this._camerasSource = new BehaviorSubject([]);
81
+ this.cameras$ = this._camerasSource
82
+ .asObservable()
83
+ .pipe(shareReplay(1))
84
+ .pipe(filter((items) => items && items.length > 0));
85
+ this._permissionResponse = new Subject();
86
+ this.permissionResponse$ = this._permissionResponse.asObservable();
87
+ this._hasDevicesSource = new BehaviorSubject(false);
88
+ this.hasDevices$ = this._hasDevicesSource.asObservable().pipe(shareReplay(1));
89
+ this._permissionSource = new BehaviorSubject(false);
90
+ this.permission$ = this._permissionSource.asObservable().pipe();
91
+ this._camerasNotFoundSource = new Subject();
92
+ this.camerasNotFound$ = this._camerasNotFoundSource.asObservable().pipe(shareReplay(1));
93
+ this.hasNavigator = typeof navigator !== 'undefined';
94
+ this.isMediaDevicesSupported = this.hasNavigator && !!navigator.mediaDevices;
95
+ }
96
+ async updateVideoInputDevices() {
97
+ // permissions aren't needed to get devices, but to access them and their info
98
+ const devices = (await BrowserCodeReader.listVideoInputDevices()) || [];
99
+ const hasDevices = devices && devices.length > 0;
100
+ // stores discovered devices and updates information
101
+ this._hasDevicesSource.next(hasDevices);
102
+ this._camerasSource.next([...devices]);
103
+ if (!hasDevices) {
104
+ const err = {
105
+ code: DOMException.NOT_FOUND_ERR,
106
+ message: 'Device not found.'
107
+ };
108
+ this._camerasNotFoundSource.next(err);
109
+ }
110
+ return devices;
111
+ }
112
+ /**
113
+ * Gets and registers all cammeras.
114
+ */
115
+ async askForPermission() {
116
+ if (!this.hasNavigator) {
117
+ this._logService.error('user media', `Can't ask permission, navigator is not present.`);
118
+ this._setPermission(false);
119
+ }
120
+ if (!this.isMediaDevicesSupported) {
121
+ this._logService.error('user media', `Can't get user media, this is not supported.`);
122
+ this._setPermission(false);
123
+ }
124
+ let stream;
125
+ let permission = false;
126
+ try {
127
+ // Will try to ask for permission
128
+ stream = await this._getAnyVideoDevice();
129
+ permission = !!stream;
130
+ }
131
+ catch (err) {
132
+ this._handlePermissionException(err);
133
+ }
134
+ finally {
135
+ this.terminateStream(stream);
136
+ }
137
+ this._setPermission(permission);
138
+ return permission;
139
+ }
140
+ terminateStream(stream) {
141
+ if (stream) {
142
+ stream.getTracks().forEach((t) => t.stop());
143
+ }
144
+ stream = undefined;
145
+ }
146
+ _setPermission(permission) {
147
+ this._permissionSource.next(permission);
148
+ }
149
+ _getAnyVideoDevice() {
150
+ return navigator.mediaDevices.getUserMedia({ video: true });
151
+ }
152
+ _handlePermissionException(err) {
153
+ console.error('user media', 'Error when asking for permission.', err);
154
+ let permission = false;
155
+ switch (err.name) {
156
+ // usually caused by not secure origins
157
+ case 'NotSupportedError':
158
+ this._logService.warn('user media', err.message);
159
+ // could not claim
160
+ permission = false;
161
+ // can't check devices
162
+ this._hasDevicesSource.next(false);
163
+ break;
164
+ // user denied permission
165
+ case 'NotAllowedError':
166
+ this._logService.warn('user media', err.message);
167
+ // claimed and denied permission
168
+ permission = false;
169
+ // this means that input devices exists
170
+ this._hasDevicesSource.next(true);
171
+ break;
172
+ // the device has no attached input devices
173
+ case 'NotFoundError':
174
+ this._logService.warn('user media', err.message);
175
+ // no permissions claimed
176
+ permission = false;
177
+ // because there was no devices
178
+ this._hasDevicesSource.next(false);
179
+ // tells the listener about the error
180
+ this._camerasNotFoundSource.next(err);
181
+ break;
182
+ case 'NotReadableError':
183
+ this._logService.warn('user media', `Couldn't read the device(s)'s stream, it's probably in use by another app.`);
184
+ // no permissions claimed
185
+ permission = false;
186
+ // there are devices, which I couldn't use
187
+ this._hasDevicesSource.next(false);
188
+ // tells the listener about the error
189
+ this._camerasNotFoundSource.next(err);
190
+ break;
191
+ default:
192
+ this._logService.warn('user media', 'I was not able to define if I have permissions for camera or not.', err);
193
+ // unknown
194
+ permission = false;
195
+ // this.hasDevices.next(undefined;
196
+ break;
197
+ }
198
+ this._setPermission(permission);
199
+ // tells the listener about the error
200
+ this._permissionResponse.next(err);
201
+ return permission;
202
+ }
203
+ }
204
+ UserMediaBaseService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: UserMediaBaseService, deps: [{ token: i1.LogService }], target: i0.ɵɵFactoryTarget.Injectable });
205
+ UserMediaBaseService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: UserMediaBaseService });
206
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: UserMediaBaseService, decorators: [{
207
+ type: Injectable
208
+ }], ctorParameters: function () { return [{ type: i1.LogService }]; } });
209
+ export class WebBarcodeService {
210
+ constructor(userMediaService) {
211
+ this.userMediaService = userMediaService;
212
+ this._device = undefined;
213
+ this._codeReader = undefined;
214
+ this._hints = new Map();
215
+ this._scanErrorSource = new Subject();
216
+ this._scanFailureSource = new Subject();
217
+ this._scanCompleteSource = new Subject();
218
+ this._scanSuccessSource = new Subject();
219
+ this._options = {
220
+ delayBetweenScanAttempts: 50,
221
+ delayBetweenScanSuccess: 500
222
+ };
223
+ this.scanError$ = this._scanErrorSource.asObservable();
224
+ this.scanFailure$ = this._scanFailureSource.asObservable();
225
+ this.scanComplete$ = this._scanCompleteSource.asObservable();
226
+ this.scanSuccess$ = this._scanSuccessSource.asObservable().pipe(map((c) => c.getText()));
227
+ }
228
+ startScan(device, videoEl, options = this._options) {
229
+ // instantly stops the scan before changing devices
230
+ this.scanStop();
231
+ // correctly sets the new (or none) device
232
+ this._device = device || undefined;
233
+ this._videoEl = videoEl;
234
+ this._options = options;
235
+ if (!this._device) {
236
+ // cleans the video because user removed the device
237
+ BrowserCodeReader.cleanVideoSource(videoEl);
238
+ }
239
+ if (this._scanSubscription) {
240
+ throw new Error('There is already a scan proccess running.');
241
+ }
242
+ if (!this._device) {
243
+ throw new Error('No device defined, cannot start scan, please define a device.');
244
+ }
245
+ // if enabled, starts scanning
246
+ if (device) {
247
+ this.scanFromDevice(device.deviceId);
248
+ }
249
+ }
250
+ setFormat(input) {
251
+ if (typeof input === 'string') {
252
+ throw new Error('Invalid formats, make sure the [formats] input is a binding.');
253
+ }
254
+ // formats may be set from html template as BarcodeFormat or string array
255
+ const formats = input.map((f) => this.getBarcodeFormatOrFail(f));
256
+ const hints = this._hints;
257
+ // updates the hints
258
+ hints.set(DecodeHintType.POSSIBLE_FORMATS, formats);
259
+ // handles updating the codeReader
260
+ this._hints = hints;
261
+ }
262
+ scanStop() {
263
+ if (this._scanSubscription) {
264
+ this._codeReader?.getScannerControls().stop();
265
+ this._scanSubscription?.unsubscribe();
266
+ this._scanSubscription = undefined;
267
+ }
268
+ // this.torchCompatible.next(false);
269
+ }
270
+ destroy() {
271
+ // @note apenas necessario por enquanto causa da Torch
272
+ this.scanStop();
273
+ this._codeReader = undefined;
274
+ this._device = undefined;
275
+ }
276
+ getBarcodeFormatOrFail(format) {
277
+ return typeof format === 'string' ? BarcodeFormat[format.trim().toUpperCase()] : format;
278
+ }
279
+ async scanFromDevice(deviceId) {
280
+ const videoElement = this._videoEl;
281
+ const codeReader = this.getCodeReader();
282
+ const scanStream = await codeReader.scanFromDeviceObservable(deviceId, videoElement);
283
+ if (!scanStream) {
284
+ throw new Error('Undefined decoding stream, aborting.');
285
+ }
286
+ const next = (x) => this._onDecodeResult(x.result, x.error);
287
+ const error = (err) => this._onDecodeError(err);
288
+ const complete = () => { };
289
+ this._scanSubscription = scanStream.subscribe(next, error, complete);
290
+ if (this._scanSubscription.closed) {
291
+ return;
292
+ }
293
+ // const controls = codeReader.getScannerControls();
294
+ // const hasTorchControl = typeof controls.switchTorch !== 'undefined';
295
+ // this.torchCompatible.next(hasTorchControl);
296
+ }
297
+ /**
298
+ * Handles decode errors.
299
+ */
300
+ _onDecodeError(err) {
301
+ this._scanErrorSource.next(err);
302
+ // this.reset();
303
+ }
304
+ /**
305
+ * Handles decode results.
306
+ */
307
+ _onDecodeResult(result, error) {
308
+ if (result) {
309
+ this._scanSuccessSource.next(result);
310
+ }
311
+ else {
312
+ this._scanFailureSource.next(error);
313
+ }
314
+ if (result) {
315
+ this._scanCompleteSource.next(result);
316
+ }
317
+ }
318
+ getCodeReader() {
319
+ if (!this._codeReader) {
320
+ this._codeReader = new BrowserMultiFormatContinuousReader(this._hints, this._options);
321
+ }
322
+ return this._codeReader;
323
+ }
324
+ }
325
+ WebBarcodeService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: WebBarcodeService, deps: [{ token: UserMediaBaseService }], target: i0.ɵɵFactoryTarget.Injectable });
326
+ WebBarcodeService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: WebBarcodeService });
327
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: WebBarcodeService, decorators: [{
328
+ type: Injectable
329
+ }], ctorParameters: function () { return [{ type: UserMediaBaseService }]; } });
330
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFyY29kZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvYmFyc2EtZGV2ZWxvcC1jb21wb25lbnRzL3NyYy9saWIvYmFyY29kZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBcUIsY0FBYyxFQUFFLGFBQWEsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2xGLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxlQUFlLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN2RixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsd0JBQXdCLEVBQW9CLE1BQU0sZ0JBQWdCLENBQUM7QUFDL0YsT0FBTyxFQUFFLGVBQWUsRUFBYyxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFNUQsT0FBTyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDMUQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7O0FBTzNDOztHQUVHO0FBQ0gsTUFBTSxPQUFPLGtDQUFtQyxTQUFRLHdCQUF3QjtJQU81RTs7T0FFRztJQUNJLGtCQUFrQjtRQUNyQixJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRTtZQUN2QixNQUFNLElBQUksS0FBSyxDQUFDLHFDQUFxQyxDQUFDLENBQUM7U0FDMUQ7UUFDRCxPQUFPLElBQUksQ0FBQyxlQUFlLENBQUM7SUFDaEMsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0ksS0FBSyxDQUFDLHdCQUF3QixDQUNqQyxRQUFpQixFQUNqQixTQUE0QjtRQUU1QixNQUFNLEtBQUssR0FBRyxJQUFJLGVBQWUsQ0FBaUIsRUFBRSxDQUFDLENBQUM7UUFDdEQsSUFBSSxLQUFLLENBQUM7UUFFVixJQUFJO1lBQ0EsS0FBSyxHQUFHLE1BQU0sSUFBSSxDQUFDLHFCQUFxQixDQUFDLFFBQVEsRUFBRSxTQUFTLEVB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MEIsRUFBRSxLQUE0QjtRQUM1RSxJQUFJLE1BQU0sRUFBRTtZQUNSLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDeEM7YUFBTTtZQUNILElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsS0FBYyxDQUFDLENBQUM7U0FDaEQ7UUFDRCxJQUFJLE1BQU0sRUFBRTtZQUNSLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDekM7SUFDTCxDQUFDO0lBQ08sYUFBYTtRQUNqQixJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRTtZQUNuQixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksa0NBQWtDLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7U0FDekY7UUFFRCxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUM7SUFDNUIsQ0FBQzs7OEdBOUlRLGlCQUFpQjtrSEFBakIsaUJBQWlCOzJGQUFqQixpQkFBaUI7a0JBRDdCLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBSZXN1bHQsIEV4Y2VwdGlvbiwgRGVjb2RlSGludFR5cGUsIEJhcmNvZGVGb3JtYXQgfSBmcm9tICdAenhpbmcvbGlicmFyeSc7XHJcbmltcG9ydCB7IENoZWNrc3VtRXhjZXB0aW9uLCBGb3JtYXRFeGNlcHRpb24sIE5vdEZvdW5kRXhjZXB0aW9uIH0gZnJvbSAnQHp4aW5nL2xpYnJhcnknO1xyXG5pbXBvcnQgeyBCcm93c2VyQ29kZVJlYWRlciwgQnJvd3Nlck11bHRpRm9ybWF0UmVhZGVyLCBJU2Nhbm5lckNvbnRyb2xzIH0gZnJvbSAnQHp4aW5nL2Jyb3dzZXInO1xyXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgTG9nU2VydmljZSB9IGZyb20gJ2JhcnNhLW5vdmluLXJheS1jb3JlJztcclxuaW1wb3J0IHsgZmlsdGVyLCBtYXAsIHNoYXJlUmVwbGF5IH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFJlc3VsdEFuZEVycm9yIHtcclxuICAgIHJlc3VsdD86IFJlc3VsdDtcclxuICAgIGVycm9yPzogRXhjZXB0aW9uO1xyXG59XHJcblxyXG4vKipcclxuICogQmFzZWQgb24genhpbmctdHlwZXNjcmlwdCBCcm93c2VyQ29kZVJlYWRlclxyXG4gKi9cclxuZXhwb3J0IGNsYXNzIEJyb3dzZXJNdWx0aUZvcm1hdENvbnRpbnVvdXNSZWFkZXIgZXh0ZW5kcyBCcm93c2VyTXVsdGlGb3JtYXRSZWFkZXIge1xyXG4gICAgLyoqXHJcbiAgICAgKiBBbGxvd3MgdG8gY2FsbCBzY2FubmVyIGNvbnRyb2xzIEFQSSB3aGlsZSBzY2FubmluZy5cclxuICAgICAqIFdpbGwgYmUgdW5kZWZpbmVkIGlmIG5vIHNjYW5uaW5nIGlzIHJ1bm5pZy5cclxuICAgICAqL1xyXG4gICAgcHJvdGVjdGVkIHNjYW5uZXJDb250cm9sczogSVNjYW5uZXJDb250cm9scyB8IHVuZGVmaW5lZDtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgdGhlIGNvZGUgcmVhZGVyIHNjYW5uZXIgY29udHJvbHMuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXRTY2FubmVyQ29udHJvbHMoKTogSVNjYW5uZXJDb250cm9scyB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnNjYW5uZXJDb250cm9scykge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIHNjYW5uaW5nIGlzIHJ1bm5pbmcgYXQgdGhlIHRpbWUuJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzLnNjYW5uZXJDb250cm9scztcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFN0YXJ0cyB0aGUgZGVjb2RpbmcgZnJvbSB0aGUgY3VycmVudCBvciBhIG5ldyB2aWRlbyBlbGVtZW50LlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBkZXZpY2VJZCBUaGUgZGV2aWNlJ3MgdG8gYmUgdXNlZCBJZFxyXG4gICAgICogQHBhcmFtIHByZXZpZXdFbCBBIG5ldyB2aWRlbyBlbGVtZW50XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBhc3luYyBzY2FuRnJvbURldmljZU9ic2VydmFibGUoXHJcbiAgICAgICAgZGV2aWNlSWQ/OiBzdHJpbmcsXHJcbiAgICAgICAgcHJldmlld0VsPzogSFRNTFZpZGVvRWxlbWVudFxyXG4gICAgKTogUHJvbWlzZTxPYnNlcnZhYmxlPFJlc3VsdEFuZEVycm9yPj4ge1xyXG4gICAgICAgIGNvbnN0IHNjYW4kID0gbmV3IEJlaGF2aW9yU3ViamVjdDxSZXN1bHRBbmRFcnJvcj4oe30pO1xyXG4gICAgICAgIGxldCBjdHJscztcclxuXHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgY3RybHMgPSBhd2FpdCB0aGlzLmRlY29kZUZyb21WaWRlb0RldmljZShkZXZpY2VJZCwgcHJldmlld0VsLCAocmVzdWx0LCBlcnJvcikgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKCFlcnJvcikge1xyXG4gICAgICAgICAgICAgICAgICAgIHNjYW4kLm5leHQoeyByZXN1bHQgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBlcnJvck5hbWUgPSBlcnJvci5uYW1lO1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIHN0cmVhbSBjYW5ub3Qgc3RvcCBvbiBmYWlscy5cclxuICAgICAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgICAgICAvLyBzY2FuIEZhaWx1cmUgLSBmb3VuZCBub3RoaW5nLCBubyBlcnJvclxyXG4gICAgICAgICAgICAgICAgICAgIGVycm9yTmFtZSA9PT0gTm90Rm91bmRFeGNlcHRpb24ubmFtZSB8fFxyXG4gICAgICAgICAgICAgICAgICAgIC8vIHNjYW4gRXJyb3IgLSBmb3VuZCB0aGUgUVIgYnV0IGdvdCBlcnJvciBvbiBkZWNvZGluZ1xyXG4gICAgICAgICAgICAgICAgICAgIGVycm9yTmFtZSA9PT0gQ2hlY2tzdW1FeGNlcHRpb24ubmFtZSB8fFxyXG4gICAgICAgICAgICAgICAgICAgIGVycm9yTmFtZSA9PT0gRm9ybWF0RXhjZXB0aW9uLm5hbWUgfHxcclxuICAgICAgICAgICAgICAgICAgICBlcnJvci5tZXNzYWdlLmluY2x1ZGVzKCdObyBNdWx0aUZvcm1hdCBSZWFkZXJzIHdlcmUgYWJsZSB0byBkZXRlY3QgdGhlIGNvZGUuJylcclxuICAgICAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgICAgIHNjYW4kLm5leHQoeyBlcnJvciB9KTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gcHJvYmFibHkgZmF0YWwgZXJyb3JcclxuICAgICAgICAgICAgICAgIHNjYW4kLmVycm9yKGVycm9yKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2Nhbm5lckNvbnRyb2xzPy5zdG9wKCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNjYW5uZXJDb250cm9scyA9IHVuZGVmaW5lZDtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnNjYW5uZXJDb250cm9scyA9IHtcclxuICAgICAgICAgICAgICAgIC4uLmN0cmxzLFxyXG4gICAgICAgICAgICAgICAgc3RvcCgpOiB2b2lkIHtcclxuICAgICAgICAgICAgICAgICAgICBjdHJscy5zdG9wKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgc2NhbiQuY29tcGxldGUoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIHNjYW4kLmVycm9yKGUpO1xyXG4gICAgICAgICAgICB0aGlzLnNjYW5uZXJDb250cm9scz8uc3RvcCgpO1xyXG4gICAgICAgICAgICB0aGlzLnNjYW5uZXJDb250cm9scyA9IHVuZGVmaW5lZDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBzY2FuJC5hc09ic2VydmFibGUoKTtcclxuICAgIH1cclxufVxyXG5ASW5qZWN0YWJsZSgpXHJcbmV4cG9ydCBjbGFzcyBVc2VyTWVkaWFCYXNlU2VydmljZSB7XHJcbiAgICBoYXNOYXZpZ2F0b3IgPSBmYWxzZTtcclxuICAgIGlzTWVkaWFEZXZpY2VzU3VwcG9ydGVkID0gZmFsc2U7XHJcblxyXG4gICAgX2NhbWVyYXNTb3VyY2UgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PE1lZGlhRGV2aWNlSW5mb1tdPihbXSk7XHJcbiAgICBjYW1lcmFzJCA9IHRoaXMuX2NhbWVyYXNTb3VyY2VcclxuICAgICAgICAuYXNPYnNlcnZhYmxlKClcclxuICAgICAgICAucGlwZShzaGFyZVJlcGxheSgxKSlcclxuICAgICAgICAucGlwZShmaWx0ZXIoKGl0ZW1zKSA9PiBpdGVtcyAmJiBpdGVtcy5sZW5ndGggPiAwKSk7XHJcblxyXG4gICAgX3Blcm1pc3Npb25SZXNwb25zZSA9IG5ldyBTdWJqZWN0PERPTUV4Y2VwdGlvbj4oKTtcclxuICAgIHBlcm1pc3Npb25SZXNwb25zZSQgPSB0aGlzLl9wZXJtaXNzaW9uUmVzcG9uc2UuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gICAgX2hhc0RldmljZXNTb3VyY2UgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcclxuICAgIGhhc0RldmljZXMkID0gdGhpcy5faGFzRGV2aWNlc1NvdXJjZS5hc09ic2VydmFibGUoKS5waXBlKHNoYXJlUmVwbGF5KDEpKTtcclxuXHJcbiAgICBfcGVybWlzc2lvblNvdXJjZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xyXG4gICAgcGVybWlzc2lvbiQgPSB0aGlzLl9wZXJtaXNzaW9uU291cmNlLmFzT2JzZXJ2YWJsZSgpLnBpcGUoKTtcclxuXHJcbiAgICBfY2FtZXJhc05vdEZvdW5kU291cmNlID0gbmV3IFN1YmplY3Q8RE9NRXhjZXB0aW9uPigpO1xyXG4gICAgY2FtZXJhc05vdEZvdW5kJCA9IHRoaXMuX2NhbWVyYXNOb3RGb3VuZFNvdXJjZS5hc09ic2VydmFibGUoKS5waXBlKHNoYXJlUmVwbGF5KDEpKTtcclxuXHJcbiAgICAvKipcclxuICAgICAqXHJcbiAgICAgKi9cclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgX2xvZ1NlcnZpY2U6IExvZ1NlcnZpY2UpIHtcclxuICAgICAgICB0aGlzLmhhc05hdmlnYXRvciA9IHR5cGVvZiBuYXZpZ2F0b3IgIT09ICd1bmRlZmluZWQnO1xyXG4gICAgICAgIHRoaXMuaXNNZWRpYURldmljZXNTdXBwb3J0ZWQgPSB0aGlzLmhhc05hdmlnYXRvciAmJiAhIW5hdmlnYXRvci5tZWRpYURldmljZXM7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgdXBkYXRlVmlkZW9JbnB1dERldmljZXMoKTogUHJvbWlzZTxNZWRpYURldmljZUluZm9bXT4ge1xyXG4gICAgICAgIC8vIHBlcm1pc3Npb25zIGFyZW4ndCBuZWVkZWQgdG8gZ2V0IGRldmljZXMsIGJ1dCB0byBhY2Nlc3MgdGhlbSBhbmQgdGhlaXIgaW5mb1xyXG4gICAgICAgIGNvbnN0IGRldmljZXMgPSAoYXdhaXQgQnJvd3NlckNvZGVSZWFkZXIubGlzdFZpZGVvSW5wdXREZXZpY2VzKCkpIHx8IFtdO1xyXG4gICAgICAgIGNvbnN0IGhhc0RldmljZXMgPSBkZXZpY2VzICYmIGRldmljZXMubGVuZ3RoID4gMDtcclxuXHJcbiAgICAgICAgLy8gc3RvcmVzIGRpc2NvdmVyZWQgZGV2aWNlcyBhbmQgdXBkYXRlcyBpbmZvcm1hdGlvblxyXG4gICAgICAgIHRoaXMuX2hhc0RldmljZXNTb3VyY2UubmV4dChoYXNEZXZpY2VzKTtcclxuICAgICAgICB0aGlzLl9jYW1lcmFzU291cmNlLm5leHQoWy4uLmRldmljZXNdKTtcclxuXHJcbiAgICAgICAgaWYgKCFoYXNEZXZpY2VzKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGVyciA9IHtcclxuICAgICAgICAgICAgICAgIGNvZGU6IERPTUV4Y2VwdGlvbi5OT1RfRk9VTkRfRVJSLFxyXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogJ0RldmljZSBub3QgZm91bmQuJ1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB0aGlzLl9jYW1lcmFzTm90Rm91bmRTb3VyY2UubmV4dChlcnIgYXMgRE9NRXhjZXB0aW9uKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBkZXZpY2VzO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyBhbmQgcmVnaXN0ZXJzIGFsbCBjYW1tZXJhcy5cclxuICAgICAqL1xyXG4gICAgYXN5bmMgYXNrRm9yUGVybWlzc2lvbigpOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgICAgICBpZiAoIXRoaXMuaGFzTmF2aWdhdG9yKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2xvZ1NlcnZpY2UuZXJyb3IoJ3VzZXIgbWVkaWEnLCBgQ2FuJ3QgYXNrIHBlcm1pc3Npb24sIG5hdmlnYXRvciBpcyBub3QgcHJlc2VudC5gKTtcclxuICAgICAgICAgICAgdGhpcy5fc2V0UGVybWlzc2lvbihmYWxzZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIXRoaXMuaXNNZWRpYURldmljZXNTdXBwb3J0ZWQpIHtcclxuICAgICAgICAgICAgdGhpcy5fbG9nU2VydmljZS5lcnJvcigndXNlciBtZWRpYScsIGBDYW4ndCBnZXQgdXNlciBtZWRpYSwgdGhpcyBpcyBub3Qgc3VwcG9ydGVkLmApO1xyXG4gICAgICAgICAgICB0aGlzLl9zZXRQZXJtaXNzaW9uKGZhbHNlKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBzdHJlYW06IE1lZGlhU3RyZWFtIHwgdW5kZWZpbmVkO1xyXG4gICAgICAgIGxldCBwZXJtaXNzaW9uID0gZmFsc2U7XHJcblxyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIC8vIFdpbGwgdHJ5IHRvIGFzayBmb3IgcGVybWlzc2lvblxyXG4gICAgICAgICAgICBzdHJlYW0gPSBhd2FpdCB0aGlzLl9nZXRBbnlWaWRlb0RldmljZSgpO1xyXG4gICAgICAgICAgICBwZXJtaXNzaW9uID0gISFzdHJlYW07XHJcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2hhbmRsZVBlcm1pc3Npb25FeGNlcHRpb24oZXJyIGFzIERPTUV4Y2VwdGlvbik7XHJcbiAgICAgICAgfSBmaW5hbGx5IHtcclxuICAgICAgICAgICAgdGhpcy50ZXJtaW5hdGVTdHJlYW0oc3RyZWFtKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX3NldFBlcm1pc3Npb24ocGVybWlzc2lvbik7XHJcbiAgICAgICAgcmV0dXJuIHBlcm1pc3Npb247XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgdGVybWluYXRlU3RyZWFtKHN0cmVhbTogTWVkaWFTdHJlYW0gfCB1bmRlZmluZWQpOiB2b2lkIHtcclxuICAgICAgICBpZiAoc3RyZWFtKSB7XHJcbiAgICAgICAgICAgIHN0cmVhbS5nZXRUcmFja3MoKS5mb3JFYWNoKCh0KSA9PiB0LnN0b3AoKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBzdHJlYW0gPSB1bmRlZmluZWQ7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgX3NldFBlcm1pc3Npb24ocGVybWlzc2lvbjogYm9vbGVhbik6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuX3Blcm1pc3Npb25Tb3VyY2UubmV4dChwZXJtaXNzaW9uKTtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBfZ2V0QW55VmlkZW9EZXZpY2UoKTogUHJvbWlzZTxNZWRpYVN0cmVhbT4ge1xyXG4gICAgICAgIHJldHVybiBuYXZpZ2F0b3IubWVkaWFEZXZpY2VzLmdldFVzZXJNZWRpYSh7IHZpZGVvOiB0cnVlIH0pO1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIF9oYW5kbGVQZXJtaXNzaW9uRXhjZXB0aW9uKGVycjogRE9NRXhjZXB0aW9uKTogYm9vbGVhbiB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcigndXNlciBtZWRpYScsICdFcnJvciB3aGVuIGFza2luZyBmb3IgcGVybWlzc2lvbi4nLCBlcnIpO1xyXG4gICAgICAgIGxldCBwZXJtaXNzaW9uID0gZmFsc2U7XHJcblxyXG4gICAgICAgIHN3aXRjaCAoZXJyLm5hbWUpIHtcclxuICAgICAgICAgICAgLy8gdXN1YWxseSBjYXVzZWQgYnkgbm90IHNlY3VyZSBvcmlnaW5zXHJcbiAgICAgICAgICAgIGNhc2UgJ05vdFN1cHBvcnRlZEVycm9yJzpcclxuICAgICAgICAgICAgICAgIHRoaXMuX2xvZ1NlcnZpY2Uud2FybigndXNlciBtZWRpYScsIGVyci5tZXNzYWdlKTtcclxuICAgICAgICAgICAgICAgIC8vIGNvdWxkIG5vdCBjbGFpbVxyXG4gICAgICAgICAgICAgICAgcGVybWlzc2lvbiA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgLy8gY2FuJ3QgY2hlY2sgZGV2aWNlc1xyXG4gICAgICAgICAgICAgICAgdGhpcy5faGFzRGV2aWNlc1NvdXJjZS5uZXh0KGZhbHNlKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgLy8gdXNlciBkZW5pZWQgcGVybWlzc2lvblxyXG4gICAgICAgICAgICBjYXNlICdOb3RBbGxvd2VkRXJyb3InOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5fbG9nU2VydmljZS53YXJuKCd1c2VyIG1lZGlhJywgZXJyLm1lc3NhZ2UpO1xyXG4gICAgICAgICAgICAgICAgLy8gY2xhaW1lZCBhbmQgZGVuaWVkIHBlcm1pc3Npb25cclxuICAgICAgICAgICAgICAgIHBlcm1pc3Npb24gPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIC8vIHRoaXMgbWVhbnMgdGhhdCBpbnB1dCBkZXZpY2VzIGV4aXN0c1xyXG4gICAgICAgICAgICAgICAgdGhpcy5faGFzRGV2aWNlc1NvdXJjZS5uZXh0KHRydWUpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICAvLyB0aGUgZGV2aWNlIGhhcyBubyBhdHRhY2hlZCBpbnB1dCBkZXZpY2VzXHJcbiAgICAgICAgICAgIGNhc2UgJ05vdEZvdW5kRXJyb3InOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5fbG9nU2VydmljZS53YXJuKCd1c2VyIG1lZGlhJywgZXJyLm1lc3NhZ2UpO1xyXG4gICAgICAgICAgICAgICAgLy8gbm8gcGVybWlzc2lvbnMgY2xhaW1lZFxyXG4gICAgICAgICAgICAgICAgcGVybWlzc2lvbiA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgLy8gYmVjYXVzZSB0aGVyZSB3YXMgbm8gZGV2aWNlc1xyXG4gICAgICAgICAgICAgICAgdGhpcy5faGFzRGV2aWNlc1NvdXJjZS5uZXh0KGZhbHNlKTtcclxuICAgICAgICAgICAgICAgIC8vIHRlbGxzIHRoZSBsaXN0ZW5lciBhYm91dCB0aGUgZXJyb3JcclxuICAgICAgICAgICAgICAgIHRoaXMuX2NhbWVyYXNOb3RGb3VuZFNvdXJjZS5uZXh0KGVycik7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICAgIGNhc2UgJ05vdFJlYWRhYmxlRXJyb3InOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5fbG9nU2VydmljZS53YXJuKFxyXG4gICAgICAgICAgICAgICAgICAgICd1c2VyIG1lZGlhJyxcclxuICAgICAgICAgICAgICAgICAgICBgQ291bGRuJ3QgcmVhZCB0aGUgZGV2aWNlKHMpJ3Mgc3RyZWFtLCBpdCdzIHByb2JhYmx5IGluIHVzZSBieSBhbm90aGVyIGFwcC5gXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgLy8gbm8gcGVybWlzc2lvbnMgY2xhaW1lZFxyXG4gICAgICAgICAgICAgICAgcGVybWlzc2lvbiA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgLy8gdGhlcmUgYXJlIGRldmljZXMsIHdoaWNoIEkgY291bGRuJ3QgdXNlXHJcbiAgICAgICAgICAgICAgICB0aGlzLl9oYXNEZXZpY2VzU291cmNlLm5leHQoZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgLy8gdGVsbHMgdGhlIGxpc3RlbmVyIGFib3V0IHRoZSBlcnJvclxyXG4gICAgICAgICAgICAgICAgdGhpcy5fY2FtZXJhc05vdEZvdW5kU291cmNlLm5leHQoZXJyKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgIHRoaXMuX2xvZ1NlcnZpY2Uud2FybihcclxuICAgICAgICAgICAgICAgICAgICAndXNlciBtZWRpYScsXHJcbiAgICAgICAgICAgICAgICAgICAgJ0kgd2FzIG5vdCBhYmxlIHRvIGRlZmluZSBpZiBJIGhhdmUgcGVybWlzc2lvbnMgZm9yIGNhbWVyYSBvciBub3QuJyxcclxuICAgICAgICAgICAgICAgICAgICBlcnJcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAvLyB1bmtub3duXHJcbiAgICAgICAgICAgICAgICBwZXJtaXNzaW9uID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAvLyB0aGlzLmhhc0RldmljZXMubmV4dCh1bmRlZmluZWQ7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX3NldFBlcm1pc3Npb24ocGVybWlzc2lvbik7XHJcblxyXG4gICAgICAgIC8vIHRlbGxzIHRoZSBsaXN0ZW5lciBhYm91dCB0aGUgZXJyb3JcclxuICAgICAgICB0aGlzLl9wZXJtaXNzaW9uUmVzcG9uc2UubmV4dChlcnIpO1xyXG5cclxuICAgICAgICByZXR1cm4gcGVybWlzc2lvbjtcclxuICAgIH1cclxufVxyXG5ASW5qZWN0YWJsZSgpXHJcbmV4cG9ydCBjbGFzcyBXZWJCYXJjb2RlU2VydmljZSB7XHJcbiAgICBzY2FuRXJyb3IkOiBPYnNlcnZhYmxlPEVycm9yPjtcclxuICAgIHNjYW5GYWlsdXJlJDogT2JzZXJ2YWJsZTxFcnJvcj47XHJcbiAgICBzY2FuQ29tcGxldGUkOiBPYnNlcnZhYmxlPFJlc3VsdD47XHJcbiAgICBzY2FuU3VjY2VzcyQ6IE9ic2VydmFibGU8c3RyaW5nPjtcclxuXHJcbiAgICBwcml2YXRlIF9kZXZpY2U6IE1lZGlhRGV2aWNlSW5mbyB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcclxuICAgIHByaXZhdGUgX3ZpZGVvRWw6IEhUTUxWaWRlb0VsZW1lbnQ7XHJcbiAgICBwcml2YXRlIF9jb2RlUmVhZGVyOiBCcm93c2VyTXVsdGlGb3JtYXRDb250aW51b3VzUmVhZGVyIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xyXG4gICAgcHJpdmF0ZSBfaGludHM6IE1hcDxEZWNvZGVIaW50VHlwZSwgYW55PiA9IG5ldyBNYXA8RGVjb2RlSGludFR5cGUsIGFueT4oKTtcclxuICAgIHByaXZhdGUgX3NjYW5FcnJvclNvdXJjZSA9IG5ldyBTdWJqZWN0PEVycm9yPigpO1xyXG4gICAgcHJpdmF0ZSBfc2NhbkZhaWx1cmVTb3VyY2UgPSBuZXcgU3ViamVjdDxFcnJvcj4oKTtcclxuICAgIHByaXZhdGUgX3NjYW5TdWJzY3JpcHRpb246IGFueTtcclxuICAgIHByaXZhdGUgX3NjYW5Db21wbGV0ZVNvdXJjZSA9IG5ldyBTdWJqZWN0PFJlc3VsdD4oKTtcclxuICAgIHByaXZhdGUgX3NjYW5TdWNjZXNzU291cmNlID0gbmV3IFN1YmplY3Q8UmVzdWx0PigpO1xyXG4gICAgcHJpdmF0ZSBfb3B0aW9uczoge1xyXG4gICAgICAgIGRlbGF5QmV0d2VlblNjYW5BdHRlbXB0czogbnVtYmVyO1xyXG4gICAgICAgIGRlbGF5QmV0d2VlblNjYW5TdWNjZXNzOiBudW1iZXI7XHJcbiAgICB9ID0ge1xyXG4gICAgICAgIGRlbGF5QmV0d2VlblNjYW5BdHRlbXB0czogNTAsXHJcbiAgICAgICAgZGVsYXlCZXR3ZWVuU2NhblN1Y2Nlc3M6IDUwMFxyXG4gICAgfTtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgdXNlck1lZGlhU2VydmljZTogVXNlck1lZGlhQmFzZVNlcnZpY2UpIHtcclxuICAgICAgICB0aGlzLnNjYW5FcnJvciQgPSB0aGlzLl9zY2FuRXJyb3JTb3VyY2UuYXNPYnNlcnZhYmxlKCk7XHJcbiAgICAgICAgdGhpcy5zY2FuRmFpbHVyZSQgPSB0aGlzLl9zY2FuRmFpbHVyZVNvdXJjZS5hc09ic2VydmFibGUoKTtcclxuICAgICAgICB0aGlzLnNjYW5Db21wbGV0ZSQgPSB0aGlzLl9zY2FuQ29tcGxldGVTb3VyY2UuYXNPYnNlcnZhYmxlKCk7XHJcbiAgICAgICAgdGhpcy5zY2FuU3VjY2VzcyQgPSB0aGlzLl9zY2FuU3VjY2Vzc1NvdXJjZS5hc09ic2VydmFibGUoKS5waXBlKG1hcCgoYykgPT4gYy5nZXRUZXh0KCkpKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc3RhcnRTY2FuKGRldmljZTogTWVkaWFEZXZpY2VJbmZvLCB2aWRlb0VsOiBIVE1MVmlkZW9FbGVtZW50LCBvcHRpb25zID0gdGhpcy5fb3B0aW9ucyk6IHZvaWQge1xyXG4gICAgICAgIC8vIGluc3RhbnRseSBzdG9wcyB0aGUgc2NhbiBiZWZvcmUgY2hhbmdpbmcgZGV2aWNlc1xyXG4gICAgICAgIHRoaXMuc2NhblN0b3AoKTtcclxuXHJcbiAgICAgICAgLy8gY29ycmVjdGx5IHNldHMgdGhlIG5ldyAob3Igbm9uZSkgZGV2aWNlXHJcbiAgICAgICAgdGhpcy5fZGV2aWNlID0gZGV2aWNlIHx8IHVuZGVmaW5lZDtcclxuICAgICAgICB0aGlzLl92aWRlb0VsID0gdmlkZW9FbDtcclxuICAgICAgICB0aGlzLl9vcHRpb25zID0gb3B0aW9ucztcclxuICAgICAgICBpZiAoIXRoaXMuX2RldmljZSkge1xyXG4gICAgICAgICAgICAvLyBjbGVhbnMgdGhlIHZpZGVvIGJlY2F1c2UgdXNlciByZW1vdmVkIHRoZSBkZXZpY2VcclxuICAgICAgICAgICAgQnJvd3NlckNvZGVSZWFkZXIuY2xlYW5WaWRlb1NvdXJjZSh2aWRlb0VsKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuX3NjYW5TdWJzY3JpcHRpb24pIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGVyZSBpcyBhbHJlYWR5IGEgc2NhbiBwcm9jY2VzcyBydW5uaW5nLicpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLl9kZXZpY2UpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyBkZXZpY2UgZGVmaW5lZCwgY2Fubm90IHN0YXJ0IHNjYW4sIHBsZWFzZSBkZWZpbmUgYSBkZXZpY2UuJyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBpZiBlbmFibGVkLCBzdGFydHMgc2Nhbm5pbmdcclxuICAgICAgICBpZiAoZGV2aWNlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2NhbkZyb21EZXZpY2UoZGV2aWNlLmRldmljZUlkKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgc2V0Rm9ybWF0KGlucHV0OiBCYXJjb2RlRm9ybWF0W10pOiB2b2lkIHtcclxuICAgICAgICBpZiAodHlwZW9mIGlucHV0ID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgZm9ybWF0cywgbWFrZSBzdXJlIHRoZSBbZm9ybWF0c10gaW5wdXQgaXMgYSBiaW5kaW5nLicpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gZm9ybWF0cyBtYXkgYmUgc2V0IGZyb20gaHRtbCB0ZW1wbGF0ZSBhcyBCYXJjb2RlRm9ybWF0IG9yIHN0cmluZyBhcnJheVxyXG4gICAgICAgIGNvbnN0IGZvcm1hdHMgPSBpbnB1dC5tYXAoKGYpID0+IHRoaXMuZ2V0QmFyY29kZUZvcm1hdE9yRmFpbChmKSk7XHJcblxyXG4gICAgICAgIGNvbnN0IGhpbnRzID0gdGhpcy5faGludHM7XHJcblxyXG4gICAgICAgIC8vIHVwZGF0ZXMgdGhlIGhpbnRzXHJcbiAgICAgICAgaGludHMuc2V0KERlY29kZUhpbnRUeXBlLlBPU1NJQkxFX0ZPUk1BVFMsIGZvcm1hdHMpO1xyXG5cclxuICAgICAgICAvLyBoYW5kbGVzIHVwZGF0aW5nIHRoZSBjb2RlUmVhZGVyXHJcbiAgICAgICAgdGhpcy5faGludHMgPSBoaW50cztcclxuICAgIH1cclxuICAgIHB1YmxpYyBzY2FuU3RvcCgpOiB2b2lkIHtcclxuICAgICAgICBpZiAodGhpcy5fc2NhblN1YnNjcmlwdGlvbikge1xyXG4gICAgICAgICAgICB0aGlzLl9jb2RlUmVhZGVyPy5nZXRTY2FubmVyQ29udHJvbHMoKS5zdG9wKCk7XHJcbiAgICAgICAgICAgIHRoaXMuX3NjYW5TdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XHJcbiAgICAgICAgICAgIHRoaXMuX3NjYW5TdWJzY3JpcHRpb24gPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIHRoaXMudG9yY2hDb21wYXRpYmxlLm5leHQoZmFsc2UpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBkZXN0cm95KCk6IHZvaWQge1xyXG4gICAgICAgIC8vIEBub3RlIGFwZW5hcyBuZWNlc3NhcmlvIHBvciBlbnF1YW50byBjYXVzYSBkYSBUb3JjaFxyXG4gICAgICAgIHRoaXMuc2NhblN0b3AoKTtcclxuICAgICAgICB0aGlzLl9jb2RlUmVhZGVyID0gdW5kZWZpbmVkO1xyXG4gICAgICAgIHRoaXMuX2RldmljZSA9IHVuZGVmaW5lZDtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGdldEJhcmNvZGVGb3JtYXRPckZhaWwoZm9ybWF0OiBzdHJpbmcgfCBCYXJjb2RlRm9ybWF0KTogQmFyY29kZUZvcm1hdCB7XHJcbiAgICAgICAgcmV0dXJuIHR5cGVvZiBmb3JtYXQgPT09ICdzdHJpbmcnID8gQmFyY29kZUZvcm1hdFtmb3JtYXQudHJpbSgpLnRvVXBwZXJDYXNlKCldIDogZm9ybWF0O1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBhc3luYyBzY2FuRnJvbURldmljZShkZXZpY2VJZDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICAgICAgY29uc3QgdmlkZW9FbGVtZW50ID0gdGhpcy5fdmlkZW9FbDtcclxuXHJcbiAgICAgICAgY29uc3QgY29kZVJlYWRlciA9IHRoaXMuZ2V0Q29kZVJlYWRlcigpO1xyXG5cclxuICAgICAgICBjb25zdCBzY2FuU3RyZWFtID0gYXdhaXQgY29kZVJlYWRlci5zY2FuRnJvbURldmljZU9ic2VydmFibGUoZGV2aWNlSWQsIHZpZGVvRWxlbWVudCk7XHJcblxyXG4gICAgICAgIGlmICghc2NhblN0cmVhbSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VuZGVmaW5lZCBkZWNvZGluZyBzdHJlYW0sIGFib3J0aW5nLicpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgbmV4dCA9ICh4OiBSZXN1bHRBbmRFcnJvcik6IHZvaWQgPT4gdGhpcy5fb25EZWNvZGVSZXN1bHQoeC5yZXN1bHQsIHguZXJyb3IpO1xyXG4gICAgICAgIGNvbnN0IGVycm9yID0gKGVycjogYW55KTogdm9pZCA9PiB0aGlzLl9vbkRlY29kZUVycm9yKGVycik7XHJcbiAgICAgICAgY29uc3QgY29tcGxldGUgPSAoKTogdm9pZCA9PiB7fTtcclxuXHJcbiAgICAgICAgdGhpcy5fc2NhblN1YnNjcmlwdGlvbiA9IHNjYW5TdHJlYW0uc3Vic2NyaWJlKG5leHQsIGVycm9yLCBjb21wbGV0ZSk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLl9zY2FuU3Vic2NyaXB0aW9uLmNsb3NlZCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBjb25zdCBjb250cm9scyA9IGNvZGVSZWFkZXIuZ2V0U2Nhbm5lckNvbnRyb2xzKCk7XHJcbiAgICAgICAgLy8gY29uc3QgaGFzVG9yY2hDb250cm9sID0gdHlwZW9mIGNvbnRyb2xzLnN3aXRjaFRvcmNoICE9PSAndW5kZWZpbmVkJztcclxuXHJcbiAgICAgICAgLy8gdGhpcy50b3JjaENvbXBhdGlibGUubmV4dChoYXNUb3JjaENvbnRyb2wpO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBIYW5kbGVzIGRlY29kZSBlcnJvcnMuXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgX29uRGVjb2RlRXJyb3IoZXJyOiBhbnkpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLl9zY2FuRXJyb3JTb3VyY2UubmV4dChlcnIpO1xyXG4gICAgICAgIC8vIHRoaXMucmVzZXQoKTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogSGFuZGxlcyBkZWNvZGUgcmVzdWx0cy5cclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBfb25EZWNvZGVSZXN1bHQocmVzdWx0OiBSZXN1bHQgfCB1bmRlZmluZWQsIGVycm9yOiBFeGNlcHRpb24gfCB1bmRlZmluZWQpOiB2b2lkIHtcclxuICAgICAgICBpZiAocmVzdWx0KSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3NjYW5TdWNjZXNzU291cmNlLm5leHQocmVzdWx0KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLl9zY2FuRmFpbHVyZVNvdXJjZS5uZXh0KGVycm9yIGFzIEVycm9yKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHJlc3VsdCkge1xyXG4gICAgICAgICAgICB0aGlzLl9zY2FuQ29tcGxldGVTb3VyY2UubmV4dChyZXN1bHQpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHByaXZhdGUgZ2V0Q29kZVJlYWRlcigpOiBCcm93c2VyTXVsdGlGb3JtYXRDb250aW51b3VzUmVhZGVyIHtcclxuICAgICAgICBpZiAoIXRoaXMuX2NvZGVSZWFkZXIpIHtcclxuICAgICAgICAgICAgdGhpcy5fY29kZVJlYWRlciA9IG5ldyBCcm93c2VyTXVsdGlGb3JtYXRDb250aW51b3VzUmVhZGVyKHRoaXMuX2hpbnRzLCB0aGlzLl9vcHRpb25zKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLl9jb2RlUmVhZGVyO1xyXG4gICAgfVxyXG59XHJcbiJdfQ==
@@ -0,0 +1,224 @@
1
+ import { CUSTOM_ELEMENTS_SCHEMA, NgModule, NO_ERRORS_SCHEMA } from '@angular/core';
2
+ import { CommonModule } from '@angular/common';
3
+ import { FormsModule, ReactiveFormsModule } from '@angular/forms';
4
+ import { FundamentalNgxPlatformModule } from '@fundamental-ngx/platform';
5
+ import { FundamentalNgxCoreModule } from '@fundamental-ngx/core';
6
+ import { BarsaNovinRayCoreModule, BaseModule } from 'barsa-novin-ray-core';
7
+ import { BarsaSapUiModule } from 'barsa-sap-ui';
8
+ import { BarsaTilesModule } from 'barsa-tiles';
9
+ import { BarsaEchartsModule } from 'barsa-echarts';
10
+ import { LoginFormComponent } from './login-form/login-form.component';
11
+ import { LoginSocialConncetionsComponent } from './login-social-conncetions/login-social-conncetions.component';
12
+ import { UiPersonComponent } from './ui-person/ui-person.component';
13
+ import { UiPersonPipe } from './ui-person/ui-person.pipe';
14
+ import { BarcodeReaderComponent } from './barcode-reader/barcode-reader.component';
15
+ import { BarcodeReaderDialogComponent } from './barcode-reader-dialog/barcode-reader-dialog.component';
16
+ import { BarcodeReaderVideoComponent } from './barcode-reader-video/barcode-reader-video.component';
17
+ import { UserMediaBaseService, WebBarcodeService } from './barcode.service';
18
+ import { SettingFormComponent } from './setting-form/setting-form.component';
19
+ import { MicroProcessFlowViewComponent } from './micro-process-flow-view/micro-process-flow-view.component';
20
+ import { UiEnumSegmentedButtonComponent } from './ui-enum-segmented-button/ui-enum-segmented-button.component';
21
+ import { TabProcessViewComponent } from './tab-process-view/tab-process-view.component';
22
+ import { UiTextFieldSearchComponent } from './ui-text-field-search/ui-text-field-search.component';
23
+ import { BarcodeFormatPipe } from './barcode-format-pipe';
24
+ import { ServiceDeskHeaderComponent } from './service-desk-header/service-desk-header.component';
25
+ import { CardContentImageAndTitleComponent } from './card-content-image-and-title/card-content-image-and-title.component';
26
+ import { CardHeaderLogoTitleSubtitleComponent } from './card-header-logo-title-subtitle/card-header-logo-title-subtitle.component';
27
+ import { FormContentQuickViewComponent } from './form-content-quick-view/form-content-quick-view.component';
28
+ import { ServiceDeskServcieDetailComponent } from './service-desk-servcie-detail/service-desk-servcie-detail.component';
29
+ import { ServiceDeskViewOfServicesComponent } from './service-desk-view-of-services/service-desk-view-of-services.component';
30
+ import { ServiceDeskCardContentMojavezhayAkhzShodeComponent } from './service-desk-card-content-mojavezhay-akhz-shode/service-desk-card-content-mojavezhay-akhz-shode.component';
31
+ import { CardHeaderBigImageTitleAndSubtitleComponent } from './card-header-big-image-title-and-subtitle/card-header-big-image-title-and-subtitle.component';
32
+ import { ServiceDeskFormLayoutContentMojavezComponent } from './service-desk-form-layout-content-mojavez/service-desk-form-layout-content-mojavez.component';
33
+ import { UlvContextMenuItemShowFileContentComponent } from './ulv-context-menu-item-show-file-content/ulv-context-menu-item-show-file-content.component';
34
+ import { ResendVerificationCodeComponent } from './resend-verification-code/resend-verification-code.component';
35
+ import { CheckboxButtonComponent } from './checkbox-button/checkbox-button.component';
36
+ import { ReportTabViewComponent } from './report-tab-view/report-tab-view.component';
37
+ import { ReportLineChartViewComponent } from './report-line-chart-view/report-line-chart-view.component';
38
+ import { CardHeaderKpiComponent } from './card-header-kpi/card-header-kpi.component';
39
+ import { CardContentLineChartComponent } from './card-content-line-chart/card-content-line-chart.component';
40
+ import { FormChartContentComponent } from './form-chart-content/form-chart-content.component';
41
+ import { TableViewVerticalColumnsComponent } from './table-view-vertical-columns/table-view-vertical-columns.component';
42
+ import { QueryStringObservableComponent } from './query-string-observable/query-string-observable.component';
43
+ import { QueryStringFormObservableComponent } from './query-string-form-observable/query-string-form-observable.component';
44
+ import { G4bDetailsComponent } from './g4b-details/g4b-details.component';
45
+ import { AvatarComponent } from './avatar/avatar.component';
46
+ import { G4bEstelamComponent } from './g4b-estelam/g4b-estelam.component';
47
+ import { TimerCountDownComponent } from './timer-count-down/timer-count-down.component';
48
+ import { MoInfoMicroProccessFlowComponent } from './mo-info-micro-proccess-flow/mo-info-micro-proccess-flow.component';
49
+ import { MicroProccessFlowComponent } from './micro-proccess-flow/micro-proccess-flow.component';
50
+ import { EnumInfoMicroProccessFlowComponent } from './enum-info-micro-proccess-flow/enum-info-micro-proccess-flow.component';
51
+ import { DataSourceToFlowItemPipe, MoListToFlowItemPipe } from './pipes';
52
+ import { UiPicturesCarouselComponent } from './ui-pictures-carousel/ui-pictures-carousel.component';
53
+ import { UiNumRateComponent } from './ui-num-rate/ui-num-rate.component';
54
+ import * as i0 from "@angular/core";
55
+ import * as i1 from "barsa-novin-ray-core";
56
+ const components = [
57
+ LoginFormComponent,
58
+ LoginSocialConncetionsComponent,
59
+ UiPersonComponent,
60
+ BarcodeReaderComponent,
61
+ BarcodeReaderDialogComponent,
62
+ BarcodeReaderVideoComponent,
63
+ SettingFormComponent,
64
+ MicroProcessFlowViewComponent,
65
+ UiEnumSegmentedButtonComponent,
66
+ TabProcessViewComponent,
67
+ UiTextFieldSearchComponent,
68
+ ServiceDeskHeaderComponent,
69
+ CardContentImageAndTitleComponent,
70
+ CardHeaderLogoTitleSubtitleComponent,
71
+ FormContentQuickViewComponent,
72
+ ServiceDeskServcieDetailComponent,
73
+ ServiceDeskViewOfServicesComponent,
74
+ ServiceDeskCardContentMojavezhayAkhzShodeComponent,
75
+ CardHeaderBigImageTitleAndSubtitleComponent,
76
+ ServiceDeskFormLayoutContentMojavezComponent,
77
+ UlvContextMenuItemShowFileContentComponent,
78
+ ResendVerificationCodeComponent,
79
+ CheckboxButtonComponent,
80
+ ReportTabViewComponent,
81
+ ReportLineChartViewComponent,
82
+ CardHeaderKpiComponent,
83
+ CardContentLineChartComponent,
84
+ FormChartContentComponent,
85
+ TableViewVerticalColumnsComponent,
86
+ QueryStringObservableComponent,
87
+ QueryStringFormObservableComponent,
88
+ G4bDetailsComponent,
89
+ AvatarComponent,
90
+ G4bEstelamComponent,
91
+ TimerCountDownComponent,
92
+ MoInfoMicroProccessFlowComponent,
93
+ MicroProccessFlowComponent,
94
+ EnumInfoMicroProccessFlowComponent,
95
+ UiPicturesCarouselComponent,
96
+ UiNumRateComponent
97
+ ];
98
+ const pipes = [UiPersonPipe, BarcodeFormatPipe, MoListToFlowItemPipe, DataSourceToFlowItemPipe];
99
+ export class BarsaDevelopComponentsModule extends BaseModule {
100
+ constructor(dcm, cfr) {
101
+ super(dcm, cfr, 'BarsaDevelopComponentsModule');
102
+ this.dcm = dcm;
103
+ this.cfr = cfr;
104
+ this.dynamicComponents = [...components];
105
+ }
106
+ }
107
+ BarsaDevelopComponentsModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: BarsaDevelopComponentsModule, deps: [{ token: i1.DynamicComponentService }, { token: i0.ComponentFactoryResolver }], target: i0.ɵɵFactoryTarget.NgModule });
108
+ BarsaDevelopComponentsModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "14.2.7", ngImport: i0, type: BarsaDevelopComponentsModule, declarations: [LoginFormComponent,
109
+ LoginSocialConncetionsComponent,
110
+ UiPersonComponent,
111
+ BarcodeReaderComponent,
112
+ BarcodeReaderDialogComponent,
113
+ BarcodeReaderVideoComponent,
114
+ SettingFormComponent,
115
+ MicroProcessFlowViewComponent,
116
+ UiEnumSegmentedButtonComponent,
117
+ TabProcessViewComponent,
118
+ UiTextFieldSearchComponent,
119
+ ServiceDeskHeaderComponent,
120
+ CardContentImageAndTitleComponent,
121
+ CardHeaderLogoTitleSubtitleComponent,
122
+ FormContentQuickViewComponent,
123
+ ServiceDeskServcieDetailComponent,
124
+ ServiceDeskViewOfServicesComponent,
125
+ ServiceDeskCardContentMojavezhayAkhzShodeComponent,
126
+ CardHeaderBigImageTitleAndSubtitleComponent,
127
+ ServiceDeskFormLayoutContentMojavezComponent,
128
+ UlvContextMenuItemShowFileContentComponent,
129
+ ResendVerificationCodeComponent,
130
+ CheckboxButtonComponent,
131
+ ReportTabViewComponent,
132
+ ReportLineChartViewComponent,
133
+ CardHeaderKpiComponent,
134
+ CardContentLineChartComponent,
135
+ FormChartContentComponent,
136
+ TableViewVerticalColumnsComponent,
137
+ QueryStringObservableComponent,
138
+ QueryStringFormObservableComponent,
139
+ G4bDetailsComponent,
140
+ AvatarComponent,
141
+ G4bEstelamComponent,
142
+ TimerCountDownComponent,
143
+ MoInfoMicroProccessFlowComponent,
144
+ MicroProccessFlowComponent,
145
+ EnumInfoMicroProccessFlowComponent,
146
+ UiPicturesCarouselComponent,
147
+ UiNumRateComponent, UiPersonPipe, BarcodeFormatPipe, MoListToFlowItemPipe, DataSourceToFlowItemPipe], imports: [CommonModule,
148
+ BarsaNovinRayCoreModule,
149
+ ReactiveFormsModule,
150
+ BarsaSapUiModule,
151
+ BarsaEchartsModule,
152
+ BarsaTilesModule,
153
+ FundamentalNgxCoreModule,
154
+ FundamentalNgxPlatformModule,
155
+ FormsModule], exports: [LoginFormComponent,
156
+ LoginSocialConncetionsComponent,
157
+ UiPersonComponent,
158
+ BarcodeReaderComponent,
159
+ BarcodeReaderDialogComponent,
160
+ BarcodeReaderVideoComponent,
161
+ SettingFormComponent,
162
+ MicroProcessFlowViewComponent,
163
+ UiEnumSegmentedButtonComponent,
164
+ TabProcessViewComponent,
165
+ UiTextFieldSearchComponent,
166
+ ServiceDeskHeaderComponent,
167
+ CardContentImageAndTitleComponent,
168
+ CardHeaderLogoTitleSubtitleComponent,
169
+ FormContentQuickViewComponent,
170
+ ServiceDeskServcieDetailComponent,
171
+ ServiceDeskViewOfServicesComponent,
172
+ ServiceDeskCardContentMojavezhayAkhzShodeComponent,
173
+ CardHeaderBigImageTitleAndSubtitleComponent,
174
+ ServiceDeskFormLayoutContentMojavezComponent,
175
+ UlvContextMenuItemShowFileContentComponent,
176
+ ResendVerificationCodeComponent,
177
+ CheckboxButtonComponent,
178
+ ReportTabViewComponent,
179
+ ReportLineChartViewComponent,
180
+ CardHeaderKpiComponent,
181
+ CardContentLineChartComponent,
182
+ FormChartContentComponent,
183
+ TableViewVerticalColumnsComponent,
184
+ QueryStringObservableComponent,
185
+ QueryStringFormObservableComponent,
186
+ G4bDetailsComponent,
187
+ AvatarComponent,
188
+ G4bEstelamComponent,
189
+ TimerCountDownComponent,
190
+ MoInfoMicroProccessFlowComponent,
191
+ MicroProccessFlowComponent,
192
+ EnumInfoMicroProccessFlowComponent,
193
+ UiPicturesCarouselComponent,
194
+ UiNumRateComponent] });
195
+ BarsaDevelopComponentsModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: BarsaDevelopComponentsModule, providers: [UserMediaBaseService, WebBarcodeService], imports: [CommonModule,
196
+ BarsaNovinRayCoreModule,
197
+ ReactiveFormsModule,
198
+ BarsaSapUiModule,
199
+ BarsaEchartsModule,
200
+ BarsaTilesModule,
201
+ FundamentalNgxCoreModule,
202
+ FundamentalNgxPlatformModule,
203
+ FormsModule] });
204
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: BarsaDevelopComponentsModule, decorators: [{
205
+ type: NgModule,
206
+ args: [{
207
+ declarations: [...components, ...pipes],
208
+ schemas: [CUSTOM_ELEMENTS_SCHEMA, NO_ERRORS_SCHEMA],
209
+ imports: [
210
+ CommonModule,
211
+ BarsaNovinRayCoreModule,
212
+ ReactiveFormsModule,
213
+ BarsaSapUiModule,
214
+ BarsaEchartsModule,
215
+ BarsaTilesModule,
216
+ FundamentalNgxCoreModule,
217
+ FundamentalNgxPlatformModule,
218
+ FormsModule
219
+ ],
220
+ providers: [UserMediaBaseService, WebBarcodeService],
221
+ exports: [...components]
222
+ }]
223
+ }], ctorParameters: function () { return [{ type: i1.DynamicComponentService }, { type: i0.ComponentFactoryResolver }]; } });
224
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFyc2EtZGV2ZWxvcC1jb21wb25lbnRzLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2JhcnNhLWRldmVsb3AtY29tcG9uZW50cy9zcmMvbGliL2JhcnNhLWRldmVsb3AtY29tcG9uZW50cy5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUE0QixzQkFBc0IsRUFBRSxRQUFRLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDN0csT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxXQUFXLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNsRSxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUN6RSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUVqRSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsVUFBVSxFQUEyQixNQUFNLHNCQUFzQixDQUFDO0FBQ3BHLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUNoRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDL0MsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRW5ELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSwrQkFBK0IsRUFBRSxNQUFNLCtEQUErRCxDQUFDO0FBQ2hILE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ3BFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUNuRixPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSx5REFBeUQs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O1FBQ3RCLDRCQUE0QjtRQUM1QixzQkFBc0I7UUFDdEIsNkJBQTZCO1FBQzdCLHlCQUF5QjtRQUN6QixpQ0FBaUM7UUFDakMsOEJBQThCO1FBQzlCLGtDQUFrQztRQUNsQyxtQkFBbUI7UUFDbkIsZUFBZTtRQUNmLG1CQUFtQjtRQUNuQix1QkFBdUI7UUFDdkIsZ0NBQWdDO1FBQ2hDLDBCQUEwQjtRQUMxQixrQ0FBa0M7UUFDbEMsMkJBQTJCO1FBQzNCLGtCQUFrQjswSEFvQlQsNEJBQTRCLGFBSDFCLENBQUMsb0JBQW9CLEVBQUUsaUJBQWlCLENBQUMsWUFWaEQsWUFBWTtRQUNaLHVCQUF1QjtRQUN2QixtQkFBbUI7UUFDbkIsZ0JBQWdCO1FBQ2hCLGtCQUFrQjtRQUNsQixnQkFBZ0I7UUFDaEIsd0JBQXdCO1FBQ3hCLDRCQUE0QjtRQUM1QixXQUFXOzJGQUtOLDRCQUE0QjtrQkFqQnhDLFFBQVE7bUJBQUM7b0JBQ04sWUFBWSxFQUFFLENBQUMsR0FBRyxVQUFVLEVBQUUsR0FBRyxLQUFLLENBQUM7b0JBQ3ZDLE9BQU8sRUFBRSxDQUFDLHNCQUFzQixFQUFFLGdCQUFnQixDQUFDO29CQUNuRCxPQUFPLEVBQUU7d0JBQ0wsWUFBWTt3QkFDWix1QkFBdUI7d0JBQ3ZCLG1CQUFtQjt3QkFDbkIsZ0JBQWdCO3dCQUNoQixrQkFBa0I7d0JBQ2xCLGdCQUFnQjt3QkFDaEIsd0JBQXdCO3dCQUN4Qiw0QkFBNEI7d0JBQzVCLFdBQVc7cUJBQ2Q7b0JBQ0QsU0FBUyxFQUFFLENBQUMsb0JBQW9CLEVBQUUsaUJBQWlCLENBQUM7b0JBQ3BELE9BQU8sRUFBRSxDQUFDLEdBQUcsVUFBVSxDQUFDO2lCQUMzQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudEZhY3RvcnlSZXNvbHZlciwgQ1VTVE9NX0VMRU1FTlRTX1NDSEVNQSwgTmdNb2R1bGUsIE5PX0VSUk9SU19TQ0hFTUEgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBGb3Jtc01vZHVsZSwgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IEZ1bmRhbWVudGFsTmd4UGxhdGZvcm1Nb2R1bGUgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L3BsYXRmb3JtJztcbmltcG9ydCB7IEZ1bmRhbWVudGFsTmd4Q29yZU1vZHVsZSB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZSc7XG5cbmltcG9ydCB7IEJhcnNhTm92aW5SYXlDb3JlTW9kdWxlLCBCYXNlTW9kdWxlLCBEeW5hbWljQ29tcG9uZW50U2VydmljZSB9IGZyb20gJ2JhcnNhLW5vdmluLXJheS1jb3JlJztcbmltcG9ydCB7IEJhcnNhU2FwVWlNb2R1bGUgfSBmcm9tICdiYXJzYS1zYXAtdWknO1xuaW1wb3J0IHsgQmFyc2FUaWxlc01vZHVsZSB9IGZyb20gJ2JhcnNhLXRpbGVzJztcbmltcG9ydCB7IEJhcnNhRWNoYXJ0c01vZHVsZSB9IGZyb20gJ2JhcnNhLWVjaGFydHMnO1xuXG5pbXBvcnQgeyBMb2dpbkZvcm1Db21wb25lbnQgfSBmcm9tICcuL2xvZ2luLWZvcm0vbG9naW4tZm9ybS5jb21wb25lbnQnO1xuaW1wb3J0IHsgTG9naW5Tb2NpYWxDb25uY2V0aW9uc0NvbXBvbmVudCB9IGZyb20gJy4vbG9naW4tc29jaWFsLWNvbm5jZXRpb25zL2xvZ2luLXNvY2lhbC1jb25uY2V0aW9ucy5jb21wb25lbnQnO1xuaW1wb3J0IHsgVWlQZXJzb25Db21wb25lbnQgfSBmcm9tICcuL3VpLXBlcnNvbi91aS1wZXJzb24uY29tcG9uZW50JztcbmltcG9ydCB7IFVpUGVyc29uUGlwZSB9IGZyb20gJy4vdWktcGVyc29uL3VpLXBlcnNvbi5waXBlJztcbmltcG9ydCB7IEJhcmNvZGVSZWFkZXJDb21wb25lbnQgfSBmcm9tICcuL2JhcmNvZGUtcmVhZGVyL2JhcmNvZGUtcmVhZGVyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBCYXJjb2RlUmVhZGVyRGlhbG9nQ29tcG9uZW50IH0gZnJvbSAnLi9iYXJjb2RlLXJlYWRlci1kaWFsb2cvYmFyY29kZS1yZWFkZXItZGlhbG9nLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBCYXJjb2RlUmVhZGVyVmlkZW9Db21wb25lbnQgfSBmcm9tICcuL2JhcmNvZGUtcmVhZGVyLXZpZGVvL2JhcmNvZGUtcmVhZGVyLXZpZGVvLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBVc2VyTWVkaWFCYXNlU2VydmljZSwgV2ViQmFyY29kZVNlcnZpY2UgfSBmcm9tICcuL2JhcmNvZGUuc2VydmljZSc7XG5pbXBvcnQgeyBTZXR0aW5nRm9ybUNvbXBvbmVudCB9IGZyb20gJy4vc2V0dGluZy1mb3JtL3NldHRpbmctZm9ybS5jb21wb25lbnQnO1xuaW1wb3J0IHsgTWljcm9Qcm9jZXNzRmxvd1ZpZXdDb21wb25lbnQgfSBmcm9tICcuL21pY3JvLXByb2Nlc3MtZmxvdy12aWV3L21pY3JvLXByb2Nlc3MtZmxvdy12aWV3LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBVaUVudW1TZWdtZW50ZWRCdXR0b25Db21wb25lbnQgfSBmcm9tICcuL3VpLWVudW0tc2VnbWVudGVkLWJ1dHRvbi91aS1lbnVtLXNlZ21lbnRlZC1idXR0b24uY29tcG9uZW50JztcbmltcG9ydCB7IFRhYlByb2Nlc3NWaWV3Q29tcG9uZW50IH0gZnJvbSAnLi90YWItcHJvY2Vzcy12aWV3L3RhYi1wcm9jZXNzLXZpZXcuY29tcG9uZW50JztcbmltcG9ydCB7IFVpVGV4dEZpZWxkU2VhcmNoQ29tcG9uZW50IH0gZnJvbSAnLi91aS10ZXh0LWZpZWxkLXNlYXJjaC91aS10ZXh0LWZpZWxkLXNlYXJjaC5jb21wb25lbnQnO1xuaW1wb3J0IHsgQmFyY29kZUZvcm1hdFBpcGUgfSBmcm9tICcuL2JhcmNvZGUtZm9ybWF0LXBpcGUnO1xuaW1wb3J0IHsgU2VydmljZURlc2tIZWFkZXJDb21wb25lbnQgfSBmcm9tICcuL3NlcnZpY2UtZGVzay1oZWFkZXIvc2VydmljZS1kZXNrLWhlYWRlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ2FyZENvbnRlbnRJbWFnZUFuZFRpdGxlQ29tcG9uZW50IH0gZnJvbSAnLi9jYXJkLWNvbnRlbnQtaW1hZ2UtYW5kLXRpdGxlL2NhcmQtY29udGVudC1pbWFnZS1hbmQtdGl0bGUuY29tcG9uZW50JztcbmltcG9ydCB7IENhcmRIZWFkZXJMb2dvVGl0bGVTdWJ0aXRsZUNvbXBvbmVudCB9IGZyb20gJy4vY2FyZC1oZWFkZXItbG9nby10aXRsZS1zdWJ0aXRsZS9jYXJkLWhlYWRlci1sb2dvLXRpdGxlLXN1YnRpdGxlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBGb3JtQ29udGVudFF1aWNrVmlld0NvbXBvbmVudCB9IGZyb20gJy4vZm9ybS1jb250ZW50LXF1aWNrLXZpZXcvZm9ybS1jb250ZW50LXF1aWNrLXZpZXcuY29tcG9uZW50JztcbmltcG9ydCB7IFNlcnZpY2VEZXNrU2VydmNpZURldGFpbENvbXBvbmVudCB9IGZyb20gJy4vc2VydmljZS1kZXNrLXNlcnZjaWUtZGV0YWlsL3NlcnZpY2UtZGVzay1zZXJ2Y2llLWRldGFpbC5jb21wb25lbnQnO1xuaW1wb3J0IHsgU2VydmljZURlc2tWaWV3T2ZTZXJ2aWNlc0NvbXBvbmVudCB9IGZyb20gJy4vc2VydmljZS1kZXNrLXZpZXctb2Ytc2VydmljZXMvc2VydmljZS1kZXNrLXZpZXctb2Ytc2VydmljZXMuY29tcG9uZW50JztcbmltcG9ydCB7IFNlcnZpY2VEZXNrQ2FyZENvbnRlbnRNb2phdmV6aGF5QWtoelNob2RlQ29tcG9uZW50IH0gZnJvbSAnLi9zZXJ2aWNlLWRlc2stY2FyZC1jb250ZW50LW1vamF2ZXpoYXktYWtoei1zaG9kZS9zZXJ2aWNlLWRlc2stY2FyZC1jb250ZW50LW1vamF2ZXpoYXktYWtoei1zaG9kZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ2FyZEhlYWRlckJpZ0ltYWdlVGl0bGVBbmRTdWJ0aXRsZUNvbXBvbmVudCB9IGZyb20gJy4vY2FyZC1oZWFkZXItYmlnLWltYWdlLXRpdGxlLWFuZC1zdWJ0aXRsZS9jYXJkLWhlYWRlci1iaWctaW1hZ2UtdGl0bGUtYW5kLXN1YnRpdGxlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBTZXJ2aWNlRGVza0Zvcm1MYXlvdXRDb250ZW50TW9qYXZlekNvbXBvbmVudCB9IGZyb20gJy4vc2VydmljZS1kZXNrLWZvcm0tbGF5b3V0LWNvbnRlbnQtbW9qYXZlei9zZXJ2aWNlLWRlc2stZm9ybS1sYXlvdXQtY29udGVudC1tb2phdmV6LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBVbHZDb250ZXh0TWVudUl0ZW1TaG93RmlsZUNvbnRlbnRDb21wb25lbnQgfSBmcm9tICcuL3Vsdi1jb250ZXh0LW1lbnUtaXRlbS1zaG93LWZpbGUtY29udGVudC91bHYtY29udGV4dC1tZW51LWl0ZW0tc2hvdy1maWxlLWNvbnRlbnQuY29tcG9uZW50JztcbmltcG9ydCB7IFJlc2VuZFZlcmlmaWNhdGlvbkNvZGVDb21wb25lbnQgfSBmcm9tICcuL3Jlc2VuZC12ZXJpZmljYXRpb24tY29kZS9yZXNlbmQtdmVyaWZpY2F0aW9uLWNvZGUuY29tcG9uZW50JztcbmltcG9ydCB7IENoZWNrYm94QnV0dG9uQ29tcG9uZW50IH0gZnJvbSAnLi9jaGVja2JveC1idXR0b24vY2hlY2tib3gtYnV0dG9uLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBSZXBvcnRUYWJWaWV3Q29tcG9uZW50IH0gZnJvbSAnLi9yZXBvcnQtdGFiLXZpZXcvcmVwb3J0LXRhYi12aWV3LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBSZXBvcnRMaW5lQ2hhcnRWaWV3Q29tcG9uZW50IH0gZnJvbSAnLi9yZXBvcnQtbGluZS1jaGFydC12aWV3L3JlcG9ydC1saW5lLWNoYXJ0LXZpZXcuY29tcG9uZW50JztcbmltcG9ydCB7IENhcmRIZWFkZXJLcGlDb21wb25lbnQgfSBmcm9tICcuL2NhcmQtaGVhZGVyLWtwaS9jYXJkLWhlYWRlci1rcGkuY29tcG9uZW50JztcbmltcG9ydCB7IENhcmRDb250ZW50TGluZUNoYXJ0Q29tcG9uZW50IH0gZnJvbSAnLi9jYXJkLWNvbnRlbnQtbGluZS1jaGFydC9jYXJkLWNvbnRlbnQtbGluZS1jaGFydC5jb21wb25lbnQnO1xuaW1wb3J0IHsgRm9ybUNoYXJ0Q29udGVudENvbXBvbmVudCB9IGZyb20gJy4vZm9ybS1jaGFydC1jb250ZW50L2Zvcm0tY2hhcnQtY29udGVudC5jb21wb25lbnQnO1xuaW1wb3J0IHsgVGFibGVWaWV3VmVydGljYWxDb2x1bW5zQ29tcG9uZW50IH0gZnJvbSAnLi90YWJsZS12aWV3LXZlcnRpY2FsLWNvbHVtbnMvdGFibGUtdmlldy12ZXJ0aWNhbC1jb2x1bW5zLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBRdWVyeVN0cmluZ09ic2VydmFibGVDb21wb25lbnQgfSBmcm9tICcuL3F1ZXJ5LXN0cmluZy1vYnNlcnZhYmxlL3F1ZXJ5LXN0cmluZy1vYnNlcnZhYmxlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBRdWVyeVN0cmluZ0Zvcm1PYnNlcnZhYmxlQ29tcG9uZW50IH0gZnJvbSAnLi9xdWVyeS1zdHJpbmctZm9ybS1vYnNlcnZhYmxlL3F1ZXJ5LXN0cmluZy1mb3JtLW9ic2VydmFibGUuY29tcG9uZW50JztcbmltcG9ydCB7IEc0YkRldGFpbHNDb21wb25lbnQgfSBmcm9tICcuL2c0Yi1kZXRhaWxzL2c0Yi1kZXRhaWxzLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBBdmF0YXJDb21wb25lbnQgfSBmcm9tICcuL2F2YXRhci9hdmF0YXIuY29tcG9uZW50JztcbmltcG9ydCB7IEc0YkVzdGVsYW1Db21wb25lbnQgfSBmcm9tICcuL2c0Yi1lc3RlbGFtL2c0Yi1lc3RlbGFtLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBUaW1lckNvdW50RG93bkNvbXBvbmVudCB9IGZyb20gJy4vdGltZXItY291bnQtZG93bi90aW1lci1jb3VudC1kb3duLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBNb0luZm9NaWNyb1Byb2NjZXNzRmxvd0NvbXBvbmVudCB9IGZyb20gJy4vbW8taW5mby1taWNyby1wcm9jY2Vzcy1mbG93L21vLWluZm8tbWljcm8tcHJvY2Nlc3MtZmxvdy5jb21wb25lbnQnO1xuaW1wb3J0IHsgTWljcm9Qcm9jY2Vzc0Zsb3dDb21wb25lbnQgfSBmcm9tICcuL21pY3JvLXByb2NjZXNzLWZsb3cvbWljcm8tcHJvY2Nlc3MtZmxvdy5jb21wb25lbnQnO1xuaW1wb3J0IHsgRW51bUluZm9NaWNyb1Byb2NjZXNzRmxvd0NvbXBvbmVudCB9IGZyb20gJy4vZW51bS1pbmZvLW1pY3JvLXByb2NjZXNzLWZsb3cvZW51bS1pbmZvLW1pY3JvLXByb2NjZXNzLWZsb3cuY29tcG9uZW50JztcblxuaW1wb3J0IHsgRGF0YVNvdXJjZVRvRmxvd0l0ZW1QaXBlLCBNb0xpc3RUb0Zsb3dJdGVtUGlwZSB9IGZyb20gJy4vcGlwZXMnO1xuaW1wb3J0IHsgVWlQaWN0dXJlc0Nhcm91c2VsQ29tcG9uZW50IH0gZnJvbSAnLi91aS1waWN0dXJlcy1jYXJvdXNlbC91aS1waWN0dXJlcy1jYXJvdXNlbC5jb21wb25lbnQnO1xuaW1wb3J0IHsgVWlOdW1SYXRlQ29tcG9uZW50IH0gZnJvbSAnLi91aS1udW0tcmF0ZS91aS1udW0tcmF0ZS5jb21wb25lbnQnO1xuXG5jb25zdCBjb21wb25lbnRzID0gW1xuICAgIExvZ2luRm9ybUNvbXBvbmVudCxcbiAgICBMb2dpblNvY2lhbENvbm5jZXRpb25zQ29tcG9uZW50LFxuICAgIFVpUGVyc29uQ29tcG9uZW50LFxuICAgIEJhcmNvZGVSZWFkZXJDb21wb25lbnQsXG4gICAgQmFyY29kZVJlYWRlckRpYWxvZ0NvbXBvbmVudCxcbiAgICBCYXJjb2RlUmVhZGVyVmlkZW9Db21wb25lbnQsXG4gICAgU2V0dGluZ0Zvcm1Db21wb25lbnQsXG4gICAgTWljcm9Qcm9jZXNzRmxvd1ZpZXdDb21wb25lbnQsXG4gICAgVWlFbnVtU2VnbWVudGVkQnV0dG9uQ29tcG9uZW50LFxuICAgIFRhYlByb2Nlc3NWaWV3Q29tcG9uZW50LFxuICAgIFVpVGV4dEZpZWxkU2VhcmNoQ29tcG9uZW50LFxuICAgIFNlcnZpY2VEZXNrSGVhZGVyQ29tcG9uZW50LFxuICAgIENhcmRDb250ZW50SW1hZ2VBbmRUaXRsZUNvbXBvbmVudCxcbiAgICBDYXJkSGVhZGVyTG9nb1RpdGxlU3VidGl0bGVDb21wb25lbnQsXG4gICAgRm9ybUNvbnRlbnRRdWlja1ZpZXdDb21wb25lbnQsXG4gICAgU2VydmljZURlc2tTZXJ2Y2llRGV0YWlsQ29tcG9uZW50LFxuICAgIFNlcnZpY2VEZXNrVmlld09mU2VydmljZXNDb21wb25lbnQsXG4gICAgU2VydmljZURlc2tDYXJkQ29udGVudE1vamF2ZXpoYXlBa2h6U2hvZGVDb21wb25lbnQsXG4gICAgQ2FyZEhlYWRlckJpZ0ltYWdlVGl0bGVBbmRTdWJ0aXRsZUNvbXBvbmVudCxcbiAgICBTZXJ2aWNlRGVza0Zvcm1MYXlvdXRDb250ZW50TW9qYXZlekNvbXBvbmVudCxcbiAgICBVbHZDb250ZXh0TWVudUl0ZW1TaG93RmlsZUNvbnRlbnRDb21wb25lbnQsXG4gICAgUmVzZW5kVmVyaWZpY2F0aW9uQ29kZUNvbXBvbmVudCxcbiAgICBDaGVja2JveEJ1dHRvbkNvbXBvbmVudCxcbiAgICBSZXBvcnRUYWJWaWV3Q29tcG9uZW50LFxuICAgIFJlcG9ydExpbmVDaGFydFZpZXdDb21wb25lbnQsXG4gICAgQ2FyZEhlYWRlcktwaUNvbXBvbmVudCxcbiAgICBDYXJkQ29udGVudExpbmVDaGFydENvbXBvbmVudCxcbiAgICBGb3JtQ2hhcnRDb250ZW50Q29tcG9uZW50LFxuICAgIFRhYmxlVmlld1ZlcnRpY2FsQ29sdW1uc0NvbXBvbmVudCxcbiAgICBRdWVyeVN0cmluZ09ic2VydmFibGVDb21wb25lbnQsXG4gICAgUXVlcnlTdHJpbmdGb3JtT2JzZXJ2YWJsZUNvbXBvbmVudCxcbiAgICBHNGJEZXRhaWxzQ29tcG9uZW50LFxuICAgIEF2YXRhckNvbXBvbmVudCxcbiAgICBHNGJFc3RlbGFtQ29tcG9uZW50LFxuICAgIFRpbWVyQ291bnREb3duQ29tcG9uZW50LFxuICAgIE1vSW5mb01pY3JvUHJvY2Nlc3NGbG93Q29tcG9uZW50LFxuICAgIE1pY3JvUHJvY2Nlc3NGbG93Q29tcG9uZW50LFxuICAgIEVudW1JbmZvTWljcm9Qcm9jY2Vzc0Zsb3dDb21wb25lbnQsXG4gICAgVWlQaWN0dXJlc0Nhcm91c2VsQ29tcG9uZW50LFxuICAgIFVpTnVtUmF0ZUNvbXBvbmVudFxuXTtcbmNvbnN0IHBpcGVzID0gW1VpUGVyc29uUGlwZSwgQmFyY29kZUZvcm1hdFBpcGUsIE1vTGlzdFRvRmxvd0l0ZW1QaXBlLCBEYXRhU291cmNlVG9GbG93SXRlbVBpcGVdO1xuQE5nTW9kdWxlKHtcbiAgICBkZWNsYXJhdGlvbnM6IFsuLi5jb21wb25lbnRzLCAuLi5waXBlc10sXG4gICAgc2NoZW1hczogW0NVU1RPTV9FTEVNRU5UU19TQ0hFTUEsIE5PX0VSUk9SU19TQ0hFTUFdLFxuICAgIGltcG9ydHM6IFtcbiAgICAgICAgQ29tbW9uTW9kdWxlLFxuICAgICAgICBCYXJzYU5vdmluUmF5Q29yZU1vZHVsZSxcbiAgICAgICAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcbiAgICAgICAgQmFyc2FTYXBVaU1vZHVsZSxcbiAgICAgICAgQmFyc2FFY2hhcnRzTW9kdWxlLFxuICAgICAgICBCYXJzYVRpbGVzTW9kdWxlLFxuICAgICAgICBGdW5kYW1lbnRhbE5neENvcmVNb2R1bGUsXG4gICAgICAgIEZ1bmRhbWVudGFsTmd4UGxhdGZvcm1Nb2R1bGUsXG4gICAgICAgIEZvcm1zTW9kdWxlXG4gICAgXSxcbiAgICBwcm92aWRlcnM6IFtVc2VyTWVkaWFCYXNlU2VydmljZSwgV2ViQmFyY29kZVNlcnZpY2VdLFxuICAgIGV4cG9ydHM6IFsuLi5jb21wb25lbnRzXVxufSlcbmV4cG9ydCBjbGFzcyBCYXJzYURldmVsb3BDb21wb25lbnRzTW9kdWxlIGV4dGVuZHMgQmFzZU1vZHVsZSB7XG4gICAgcHJvdGVjdGVkIGR5bmFtaWNDb21wb25lbnRzID0gWy4uLmNvbXBvbmVudHNdO1xuICAgIGNvbnN0cnVjdG9yKHByb3RlY3RlZCBkY206IER5bmFtaWNDb21wb25lbnRTZXJ2aWNlLCBwcm90ZWN0ZWQgY2ZyOiBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIpIHtcbiAgICAgICAgc3VwZXIoZGNtLCBjZnIsICdCYXJzYURldmVsb3BDb21wb25lbnRzTW9kdWxlJyk7XG4gICAgfVxufVxuIl19