nuxeo-development-framework 5.8.1 → 5.8.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 (30) hide show
  1. package/bundles/nuxeo-development-framework.umd.js +1273 -291
  2. package/bundles/nuxeo-development-framework.umd.js.map +1 -1
  3. package/esm2015/lib/components/documents/components/document-scan/document-scan.component.js +1 -1
  4. package/esm2015/lib/components/ndf-scanner/index.js +3 -0
  5. package/esm2015/lib/components/ndf-scanner/ndf-scanner.component.js +966 -0
  6. package/esm2015/lib/components/ndf-scanner/ndf-scanner.module.js +23 -0
  7. package/esm2015/lib/components/ndf-uploader/components/bottom-sheet/ndf-uploader-bottom-sheet.component.js +12 -11
  8. package/esm2015/lib/components/ndf-uploader/index.js +4 -4
  9. package/esm2015/lib/components/ndf-uploader/ndf-uploader-bottom-sheet.service.js +72 -0
  10. package/esm2015/lib/components/ndf-uploader/ndf-uploader.module.js +53 -0
  11. package/esm2015/lib/components/ndf-uploader/ndf-uploader.service.js +241 -0
  12. package/esm2015/lib/components/ndf-uploader/providers/nuxeo-provider.service.js +2 -2
  13. package/esm2015/lib/components/ndf-uploader/providers/s3-provider.service.js +2 -2
  14. package/esm2015/public-api.js +2 -1
  15. package/fesm2015/nuxeo-development-framework.js +1124 -158
  16. package/fesm2015/nuxeo-development-framework.js.map +1 -1
  17. package/lib/components/ndf-scanner/index.d.ts +2 -0
  18. package/lib/components/ndf-scanner/ndf-scanner.component.d.ts +104 -0
  19. package/lib/components/ndf-scanner/ndf-scanner.module.d.ts +13 -0
  20. package/lib/components/ndf-uploader/components/bottom-sheet/ndf-uploader-bottom-sheet.component.d.ts +4 -4
  21. package/lib/components/ndf-uploader/index.d.ts +3 -3
  22. package/lib/components/ndf-uploader/{uploader-bottom-sheet.service.d.ts → ndf-uploader-bottom-sheet.service.d.ts} +11 -11
  23. package/lib/components/ndf-uploader/ndf-uploader.module.d.ts +16 -0
  24. package/lib/components/ndf-uploader/{uploader.service.d.ts → ndf-uploader.service.d.ts} +3 -3
  25. package/package.json +1 -1
  26. package/public-api.d.ts +1 -0
  27. package/esm2015/lib/components/ndf-uploader/uploader-bottom-sheet.service.js +0 -72
  28. package/esm2015/lib/components/ndf-uploader/uploader.module.js +0 -53
  29. package/esm2015/lib/components/ndf-uploader/uploader.service.js +0 -241
  30. package/lib/components/ndf-uploader/uploader.module.d.ts +0 -16
@@ -1,241 +0,0 @@
1
- var _UploaderService_instances, _UploaderService_cancelRequests, _UploaderService_filesInfo, _UploaderService_batchFiles, _UploaderService_startExecution, _UploaderService_generateBatch, _UploaderService_uploadChunk, _UploaderService_onUploadDone, _UploaderService_onUploadError, _UploaderService_complete, _UploaderService_getProvider, _UploaderService_updateFiles, _UploaderService_prepareEvent, _UploaderService_getFile, _UploaderService_getFiles, _UploaderService_createBatch, _UploaderService_deleteBatch, _UploaderService_deleteFile, _UploaderService_getFileInfo;
2
- import { __classPrivateFieldGet, __classPrivateFieldSet } from "tslib";
3
- import { Injectable } from '@angular/core';
4
- import { FileEventType, FileStatus, UploadProvider } from './models';
5
- import { UPLOADER_CONFIG } from './config';
6
- import { catchError, finalize, mergeMap, switchMap, tap, map, first, distinctUntilChanged, debounceTime, takeUntil } from 'rxjs/operators';
7
- import { BehaviorSubject, EMPTY, from, Subject } from 'rxjs';
8
- import { UploaderHelper } from './helpers';
9
- import _flatMap from 'lodash/flatMap';
10
- import { BaseService } from '../../shared';
11
- import { EnvManager } from '../../core/env';
12
- import * as i0 from "@angular/core";
13
- import * as i1 from "./providers";
14
- import * as i2 from "../display-suitable-icon/display-suitable-icon/icon.service";
15
- export function nuxeoBaseUrl() {
16
- return `${EnvManager.environment.nuxeo}/api/v1/`;
17
- }
18
- export class UploaderService extends BaseService {
19
- constructor(injector, nuxeoProvider, s3Provider, iconService) {
20
- super(injector);
21
- this.nuxeoProvider = nuxeoProvider;
22
- this.s3Provider = s3Provider;
23
- this.iconService = iconService;
24
- _UploaderService_instances.add(this);
25
- _UploaderService_cancelRequests.set(this, new Subject());
26
- _UploaderService_filesInfo.set(this, new Subject());
27
- _UploaderService_batchFiles.set(this, new BehaviorSubject([]));
28
- this.events$ = __classPrivateFieldGet(this, _UploaderService_filesInfo, "f").asObservable();
29
- UploaderHelper.prepareConfig();
30
- __classPrivateFieldGet(this, _UploaderService_instances, "m", _UploaderService_startExecution).call(this);
31
- }
32
- upload(filesOrOptions) {
33
- const options = Array.isArray(filesOrOptions) ? { files: filesOrOptions } : Object.assign({}, filesOrOptions);
34
- const batchsFile = UploaderHelper.prepareFiles(options, 0);
35
- __classPrivateFieldGet(this, _UploaderService_instances, "m", _UploaderService_updateFiles).call(this, [...__classPrivateFieldGet(this, _UploaderService_instances, "m", _UploaderService_getFiles).call(this), ...batchsFile]);
36
- return __classPrivateFieldGet(this, _UploaderService_filesInfo, "f").asObservable();
37
- }
38
- submit(options) {
39
- return this.customAutomation({
40
- operation: options.operation,
41
- context: options.context,
42
- headers: options.headers,
43
- input: options.input,
44
- params: options.params
45
- }).pipe(UploaderHelper.catchError(), UploaderHelper.retryWhen());
46
- }
47
- cancel(batchId) {
48
- return __classPrivateFieldGet(this, _UploaderService_instances, "m", _UploaderService_deleteBatch).call(this, batchId);
49
- }
50
- reset() {
51
- __classPrivateFieldSet(this, _UploaderService_batchFiles, new BehaviorSubject([]), "f");
52
- __classPrivateFieldGet(this, _UploaderService_filesInfo, "f").next({ data: [], type: FileEventType.Reset });
53
- __classPrivateFieldGet(this, _UploaderService_instances, "m", _UploaderService_startExecution).call(this);
54
- }
55
- stop(fileId) {
56
- const files = __classPrivateFieldGet(this, _UploaderService_instances, "m", _UploaderService_getFiles).call(this);
57
- const file = files.find((f) => f.id == fileId);
58
- if (file.status == FileStatus.InProgress) {
59
- __classPrivateFieldGet(this, _UploaderService_cancelRequests, "f").next();
60
- __classPrivateFieldGet(this, _UploaderService_instances, "m", _UploaderService_startExecution).call(this);
61
- }
62
- file.chunks.filter((c) => c.status != FileStatus.Completed).forEach((c) => (c.status = FileStatus.Canceled));
63
- file.status = FileStatus.Canceled;
64
- __classPrivateFieldGet(this, _UploaderService_instances, "m", _UploaderService_updateFiles).call(this, [...files]);
65
- }
66
- remove(fileId) {
67
- return __classPrivateFieldGet(this, _UploaderService_instances, "m", _UploaderService_deleteFile).call(this, fileId);
68
- }
69
- resume(fileId) {
70
- const files = __classPrivateFieldGet(this, _UploaderService_instances, "m", _UploaderService_getFiles).call(this);
71
- const file = __classPrivateFieldGet(this, _UploaderService_instances, "m", _UploaderService_getFile).call(this, fileId);
72
- if (file.status == FileStatus.Pending)
73
- return;
74
- file.status = FileStatus.Pending;
75
- __classPrivateFieldGet(this, _UploaderService_instances, "m", _UploaderService_updateFiles).call(this, [...files]);
76
- __classPrivateFieldGet(this, _UploaderService_instances, "m", _UploaderService_getFileInfo).call(this, fileId)
77
- .pipe(first())
78
- .subscribe((uploaded) => {
79
- file.chunks
80
- .filter((c) => !uploaded.uploadedChunkIds.includes(c.index))
81
- .forEach((c) => (c.status = FileStatus.Pending));
82
- __classPrivateFieldGet(this, _UploaderService_instances, "m", _UploaderService_updateFiles).call(this, [...files]);
83
- });
84
- }
85
- }
86
- _UploaderService_cancelRequests = new WeakMap(), _UploaderService_filesInfo = new WeakMap(), _UploaderService_batchFiles = new WeakMap(), _UploaderService_instances = new WeakSet(), _UploaderService_startExecution = function _UploaderService_startExecution() {
87
- __classPrivateFieldGet(this, _UploaderService_batchFiles, "f")
88
- .pipe(distinctUntilChanged(), debounceTime(100), switchMap((batchFiles) => {
89
- const filesWithBatchId = batchFiles.filter((file) => file.batchId);
90
- const filesWithoutBatchId = batchFiles.filter((file) => !file.batchId);
91
- const chunkRequests = _flatMap(filesWithBatchId, (file) => file.chunks).filter((chunk) => chunk.status === FileStatus.Pending);
92
- const fileRequests = filesWithoutBatchId.filter((file) => file.status === FileStatus.Pending);
93
- return from([...chunkRequests, ...fileRequests]);
94
- }), mergeMap((entity) => {
95
- const file = entity;
96
- if (file === null || file === void 0 ? void 0 : file.batchId) {
97
- return __classPrivateFieldGet(this, _UploaderService_instances, "m", _UploaderService_uploadChunk).call(this, entity);
98
- }
99
- else {
100
- return __classPrivateFieldGet(this, _UploaderService_instances, "m", _UploaderService_generateBatch).call(this, file === null || file === void 0 ? void 0 : file.id);
101
- }
102
- }, UPLOADER_CONFIG.MAX_CONCURRENT_REQUESTS), takeUntil(__classPrivateFieldGet(this, _UploaderService_cancelRequests, "f")), finalize(() => console.log('All requests processed')))
103
- .subscribe({
104
- complete: () => {
105
- console.log('Processing of requests completed');
106
- }
107
- });
108
- }, _UploaderService_generateBatch = function _UploaderService_generateBatch(fileId) {
109
- const files = __classPrivateFieldGet(this, _UploaderService_instances, "m", _UploaderService_getFiles).call(this);
110
- const file = __classPrivateFieldGet(this, _UploaderService_instances, "m", _UploaderService_getFile).call(this, fileId);
111
- if (file.status === FileStatus.Pending) {
112
- file.status = FileStatus.InProgress;
113
- __classPrivateFieldGet(this, _UploaderService_instances, "m", _UploaderService_updateFiles).call(this, [...files]);
114
- return __classPrivateFieldGet(this, _UploaderService_instances, "m", _UploaderService_createBatch).call(this).pipe(UploaderHelper.catchError(), tap((batchId) => {
115
- file.batchId = batchId;
116
- file.chunks.forEach((c) => (c.batchId = batchId));
117
- }), tap(() => __classPrivateFieldGet(this, _UploaderService_instances, "m", _UploaderService_updateFiles).call(this, [...files])), catchError((error) => {
118
- __classPrivateFieldGet(this, _UploaderService_instances, "m", _UploaderService_onUploadError).call(this, fileId);
119
- return EMPTY;
120
- }));
121
- }
122
- return EMPTY;
123
- }, _UploaderService_uploadChunk = function _UploaderService_uploadChunk(chunk) {
124
- if (chunk.status === FileStatus.Pending) {
125
- chunk.status = FileStatus.InProgress;
126
- const files = __classPrivateFieldGet(this, _UploaderService_instances, "m", _UploaderService_getFiles).call(this);
127
- const file = __classPrivateFieldGet(this, _UploaderService_instances, "m", _UploaderService_getFile).call(this, chunk.fileId);
128
- if (file.status != FileStatus.InProgress) {
129
- file.status = FileStatus.InProgress;
130
- __classPrivateFieldGet(this, _UploaderService_instances, "m", _UploaderService_updateFiles).call(this, [...files]);
131
- }
132
- return __classPrivateFieldGet(this, _UploaderService_instances, "m", _UploaderService_getProvider).call(this, file)
133
- .upload(file, chunk)
134
- .pipe(UploaderHelper.catchError(), tap(() => __classPrivateFieldGet(this, _UploaderService_instances, "m", _UploaderService_onUploadDone).call(this, chunk)), catchError((error) => {
135
- if (error.status === 308 /* PermanentRedirect */) {
136
- __classPrivateFieldGet(this, _UploaderService_instances, "m", _UploaderService_onUploadDone).call(this, chunk);
137
- }
138
- else {
139
- __classPrivateFieldGet(this, _UploaderService_instances, "m", _UploaderService_onUploadError).call(this, chunk.fileId);
140
- }
141
- return EMPTY;
142
- }));
143
- }
144
- return EMPTY;
145
- }, _UploaderService_onUploadDone = function _UploaderService_onUploadDone(chunk) {
146
- const files = __classPrivateFieldGet(this, _UploaderService_instances, "m", _UploaderService_getFiles).call(this);
147
- const file = __classPrivateFieldGet(this, _UploaderService_instances, "m", _UploaderService_getFile).call(this, chunk.fileId);
148
- file.chunks.find((c) => c.index == chunk.index).status = FileStatus.Completed;
149
- const totalChunks = file.chunks.length;
150
- const completedChunks = file.chunks.filter((c) => c.status === FileStatus.Completed).length;
151
- if (completedChunks === totalChunks) {
152
- file.status = FileStatus.Completed;
153
- file.progress = 100;
154
- __classPrivateFieldGet(this, _UploaderService_instances, "m", _UploaderService_complete).call(this, file);
155
- }
156
- else {
157
- const progress = (completedChunks / totalChunks) * 100;
158
- if (file.progress != progress) {
159
- file.progress = progress;
160
- __classPrivateFieldGet(this, _UploaderService_instances, "m", _UploaderService_updateFiles).call(this, [...files]);
161
- }
162
- }
163
- }, _UploaderService_onUploadError = function _UploaderService_onUploadError(fileId) {
164
- const files = __classPrivateFieldGet(this, _UploaderService_instances, "m", _UploaderService_getFiles).call(this);
165
- const file = __classPrivateFieldGet(this, _UploaderService_instances, "m", _UploaderService_getFile).call(this, fileId);
166
- file.chunks.forEach((c) => (c.status = FileStatus.Error));
167
- if (file.status != FileStatus.Error) {
168
- file.status = FileStatus.Error;
169
- __classPrivateFieldGet(this, _UploaderService_instances, "m", _UploaderService_updateFiles).call(this, [...files]);
170
- }
171
- }, _UploaderService_complete = function _UploaderService_complete(batchFile) {
172
- __classPrivateFieldGet(this, _UploaderService_instances, "m", _UploaderService_getProvider).call(this, batchFile)
173
- .complete(batchFile)
174
- .pipe(first())
175
- .subscribe(() => {
176
- const files = __classPrivateFieldGet(this, _UploaderService_instances, "m", _UploaderService_getFiles).call(this);
177
- __classPrivateFieldGet(this, _UploaderService_instances, "m", _UploaderService_updateFiles).call(this, [...files]);
178
- __classPrivateFieldGet(this, _UploaderService_instances, "m", _UploaderService_prepareEvent).call(this, files, batchFile.id);
179
- });
180
- }, _UploaderService_getProvider = function _UploaderService_getProvider(batchFile) {
181
- switch (batchFile.provider) {
182
- case UploadProvider.Nuxeo:
183
- return this.nuxeoProvider;
184
- case UploadProvider.S3:
185
- return this.s3Provider;
186
- default:
187
- throw new Error('Invalid upload provider. Please contact with NDF developers.');
188
- }
189
- }, _UploaderService_updateFiles = function _UploaderService_updateFiles(files) {
190
- __classPrivateFieldGet(this, _UploaderService_instances, "m", _UploaderService_prepareEvent).call(this, files);
191
- __classPrivateFieldGet(this, _UploaderService_batchFiles, "f").next([...files]);
192
- }, _UploaderService_prepareEvent = function _UploaderService_prepareEvent(files, fileId = null) {
193
- const filteredFiles = fileId ? files.filter((f) => f.id === fileId) : files;
194
- __classPrivateFieldGet(this, _UploaderService_filesInfo, "f").next({
195
- type: fileId ? FileEventType.Complete : FileEventType.Changes,
196
- data: filteredFiles.map(({ batchId, id, index, progress, status, provider, data, metadata }) => ({
197
- batchId,
198
- id,
199
- index,
200
- progress,
201
- status,
202
- provider,
203
- data,
204
- metadata,
205
- icon: this.iconService.getFileIcon(data)
206
- }))
207
- });
208
- }, _UploaderService_getFile = function _UploaderService_getFile(fileId) {
209
- const files = __classPrivateFieldGet(this, _UploaderService_instances, "m", _UploaderService_getFiles).call(this);
210
- return files.find((f) => f.id == fileId);
211
- }, _UploaderService_getFiles = function _UploaderService_getFiles() {
212
- return [...__classPrivateFieldGet(this, _UploaderService_batchFiles, "f").getValue()];
213
- }, _UploaderService_createBatch = function _UploaderService_createBatch() {
214
- return this.post(`${nuxeoBaseUrl()}upload`).pipe(UploaderHelper.catchError(), UploaderHelper.retryWhen(), map((batch) => {
215
- return batch.batchId;
216
- }));
217
- }, _UploaderService_deleteBatch = function _UploaderService_deleteBatch(batchId) {
218
- return this.delete(`${nuxeoBaseUrl()}upload/${batchId}`).pipe(UploaderHelper.catchError(), UploaderHelper.retryWhen(), finalize(() => {
219
- this.reset();
220
- }));
221
- }, _UploaderService_deleteFile = function _UploaderService_deleteFile(fileId) {
222
- const files = __classPrivateFieldGet(this, _UploaderService_instances, "m", _UploaderService_getFiles).call(this);
223
- const file = __classPrivateFieldGet(this, _UploaderService_instances, "m", _UploaderService_getFile).call(this, fileId);
224
- file.status = FileStatus.Pending;
225
- __classPrivateFieldGet(this, _UploaderService_instances, "m", _UploaderService_updateFiles).call(this, [...files]);
226
- return this.delete(`${nuxeoBaseUrl()}upload/${file.batchId}/${file.index}`).pipe(UploaderHelper.catchError(), UploaderHelper.retryWhen(), finalize(() => {
227
- __classPrivateFieldGet(this, _UploaderService_instances, "m", _UploaderService_updateFiles).call(this, [...files.filter((f) => f.id != fileId)]);
228
- }));
229
- }, _UploaderService_getFileInfo = function _UploaderService_getFileInfo(fileId) {
230
- const file = __classPrivateFieldGet(this, _UploaderService_instances, "m", _UploaderService_getFile).call(this, fileId);
231
- return this.get(`${nuxeoBaseUrl()}upload/${file.batchId}/${file.index}`).pipe(UploaderHelper.catchError(), UploaderHelper.retryWhen());
232
- };
233
- UploaderService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: UploaderService, deps: [{ token: i0.Injector }, { token: i1.NuxeoProvider }, { token: i1.S3Provider }, { token: i2.IconService }], target: i0.ɵɵFactoryTarget.Injectable });
234
- UploaderService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: UploaderService, providedIn: 'root' });
235
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: UploaderService, decorators: [{
236
- type: Injectable,
237
- args: [{
238
- providedIn: 'root'
239
- }]
240
- }], ctorParameters: function () { return [{ type: i0.Injector }, { type: i1.NuxeoProvider }, { type: i1.S3Provider }, { type: i2.IconService }]; } });
241
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBsb2FkZXIuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL251eGVvLWRldmVsb3BtZW50LWZyYW1ld29yay9zcmMvbGliL2NvbXBvbmVudHMvbmRmLXVwbG9hZGVyL3VwbG9hZGVyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFZLE1BQU0sZUFBZSxDQUFDO0FBRXJELE9BQU8sRUFLTixhQUFhLEVBRWIsVUFBVSxFQUVWLGNBQWMsRUFDZCxNQUFNLFVBQVUsQ0FBQztBQUNsQixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQzNDLE9BQU8sRUFDTixVQUFVLEVBQ1YsUUFBUSxFQUNSLFFBQVEsRUFDUixTQUFTLEVBQ1QsR0FBRyxFQUNILEdBQUcsRUFDSCxLQUFLLEVBQ0wsb0JBQW9CLEVBQ3BCLFlBQVksRUFDWixTQUFTLEVBQ1QsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBQUUsZUFBZSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQWMsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3pFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFFM0MsT0FBTyxRQUFRLE1BQU0sZ0JBQWdCLENBQUM7QUFDdEMsT0FBTyxFQUFFLFdBQVcsRUFBbUMsTUFBTSxjQUFjLENBQUM7QUFFNUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7O0FBRTVDLE1BQU0sVUFBVSxZQUFZO0lBQzNCLE9BQU8sR0FBRyxVQUFVLENBQUMsV0FBVyxDQUFDLEtBQUssVUFBVSxDQUFDO0FBQ2xELENBQUM7QUFLRCxNQUFNLE9BQU8sZUFBZ0IsU0FBUSxXQUFXO0lBTS9DLFlBQ0MsUUFBa0IsRUFDRCxhQUE0QixFQUM1QixVQUFzQixFQUN0QixXQUF3QjtRQUV6QyxLQUFLLENBQUMsUUFB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VSxJQUFJLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FDN0YsY0FBYyxDQUFDLFVBQVUsRUFBRSxFQUMzQixjQUFjLENBQUMsU0FBUyxFQUFFLENBQzFCLENBQUM7QUFDSCxDQUFDOzZHQTFSVyxlQUFlO2lIQUFmLGVBQWUsY0FGZixNQUFNOzRGQUVOLGVBQWU7a0JBSDNCLFVBQVU7bUJBQUM7b0JBQ1gsVUFBVSxFQUFFLE1BQU07aUJBQ2xCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgSW5qZWN0b3IgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTnV4ZW9Qcm92aWRlciwgUzNQcm92aWRlciB9IGZyb20gJy4vcHJvdmlkZXJzJztcclxuaW1wb3J0IHtcclxuXHRCYXRjaCxcclxuXHRCYXRjaEZpbGUsXHJcblx0Q2h1bmssXHJcblx0RmlsZUV2ZW50LFxyXG5cdEZpbGVFdmVudFR5cGUsXHJcblx0RmlsZU9wdGlvbixcclxuXHRGaWxlU3RhdHVzLFxyXG5cdFVwbG9hZGVSZXNwb25zZSxcclxuXHRVcGxvYWRQcm92aWRlclxyXG59IGZyb20gJy4vbW9kZWxzJztcclxuaW1wb3J0IHsgVVBMT0FERVJfQ09ORklHIH0gZnJvbSAnLi9jb25maWcnO1xyXG5pbXBvcnQge1xyXG5cdGNhdGNoRXJyb3IsXHJcblx0ZmluYWxpemUsXHJcblx0bWVyZ2VNYXAsXHJcblx0c3dpdGNoTWFwLFxyXG5cdHRhcCxcclxuXHRtYXAsXHJcblx0Zmlyc3QsXHJcblx0ZGlzdGluY3RVbnRpbENoYW5nZWQsXHJcblx0ZGVib3VuY2VUaW1lLFxyXG5cdHRha2VVbnRpbFxyXG59IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBFTVBUWSwgZnJvbSwgT2JzZXJ2YWJsZSwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBVcGxvYWRlckhlbHBlciB9IGZyb20gJy4vaGVscGVycyc7XHJcbmltcG9ydCB7IEh0dHBFcnJvclJlc3BvbnNlLCBIdHRwU3RhdHVzQ29kZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IF9mbGF0TWFwIGZyb20gJ2xvZGFzaC9mbGF0TWFwJztcclxuaW1wb3J0IHsgQmFzZVNlcnZpY2UsIE51eGVvUmVzcG9uc2UsIE9wZXJhdGlvbk9wdGlvbnMgfSBmcm9tICcuLi8uLi9zaGFyZWQnO1xyXG5pbXBvcnQgeyBJY29uU2VydmljZSB9IGZyb20gJy4uL2Rpc3BsYXktc3VpdGFibGUtaWNvbi9kaXNwbGF5LXN1aXRhYmxlLWljb24vaWNvbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRW52TWFuYWdlciB9IGZyb20gJy4uLy4uL2NvcmUvZW52JztcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBudXhlb0Jhc2VVcmwoKSB7XHJcblx0cmV0dXJuIGAke0Vudk1hbmFnZXIuZW52aXJvbm1lbnQubnV4ZW99L2FwaS92MS9gO1xyXG59XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcblx0cHJvdmlkZWRJbjogJ3Jvb3QnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBVcGxvYWRlclNlcnZpY2UgZXh0ZW5kcyBCYXNlU2VydmljZSB7XHJcblx0cmVhZG9ubHkgI2NhbmNlbFJlcXVlc3RzID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcclxuXHRyZWFkb25seSAjZmlsZXNJbmZvID0gbmV3IFN1YmplY3Q8RmlsZUV2ZW50PigpO1xyXG5cdCNiYXRjaEZpbGVzID0gbmV3IEJlaGF2aW9yU3ViamVjdDxBcnJheTxCYXRjaEZpbGU+PihbXSk7XHJcblx0cmVhZG9ubHkgZXZlbnRzJCA9IHRoaXMuI2ZpbGVzSW5mby5hc09ic2VydmFibGUoKTtcclxuXHJcblx0Y29uc3RydWN0b3IoXHJcblx0XHRpbmplY3RvcjogSW5qZWN0b3IsXHJcblx0XHRwcml2YXRlIHJlYWRvbmx5IG51eGVvUHJvdmlkZXI6IE51eGVvUHJvdmlkZXIsXHJcblx0XHRwcml2YXRlIHJlYWRvbmx5IHMzUHJvdmlkZXI6IFMzUHJvdmlkZXIsXHJcblx0XHRwcml2YXRlIHJlYWRvbmx5IGljb25TZXJ2aWNlOiBJY29uU2VydmljZVxyXG5cdCkge1xyXG5cdFx0c3VwZXIoaW5qZWN0b3IpO1xyXG5cdFx0VXBsb2FkZXJIZWxwZXIucHJlcGFyZUNvbmZpZygpO1xyXG5cdFx0dGhpcy4jc3RhcnRFeGVjdXRpb24oKTtcclxuXHR9XHJcblxyXG5cdHVwbG9hZChmaWxlc09yT3B0aW9uczogRmlsZVtdIHwgRmlsZU9wdGlvbik6IE9ic2VydmFibGU8RmlsZUV2ZW50PiB7XHJcblx0XHRjb25zdCBvcHRpb25zOiBGaWxlT3B0aW9uID0gQXJyYXkuaXNBcnJheShmaWxlc09yT3B0aW9ucykgPyB7IGZpbGVzOiBmaWxlc09yT3B0aW9ucyB9IDogeyAuLi5maWxlc09yT3B0aW9ucyB9O1xyXG5cclxuXHRcdGNvbnN0IGJhdGNoc0ZpbGUgPSBVcGxvYWRlckhlbHBlci5wcmVwYXJlRmlsZXMob3B0aW9ucywgMCk7XHJcblx0XHR0aGlzLiN1cGRhdGVGaWxlcyhbLi4udGhpcy4jZ2V0RmlsZXMoKSwgLi4uYmF0Y2hzRmlsZV0pO1xyXG5cdFx0cmV0dXJuIHRoaXMuI2ZpbGVzSW5mby5hc09ic2VydmFibGUoKTtcclxuXHR9XHJcblx0c3VibWl0KG9wdGlvbnM6IE9wZXJhdGlvbk9wdGlvbnMpOiBPYnNlcnZhYmxlPE51eGVvUmVzcG9uc2U+IHtcclxuXHRcdHJldHVybiB0aGlzLmN1c3RvbUF1dG9tYXRpb248TnV4ZW9SZXNwb25zZT4oe1xyXG5cdFx0XHRvcGVyYXRpb246IG9wdGlvbnMub3BlcmF0aW9uLFxyXG5cdFx0XHRjb250ZXh0OiBvcHRpb25zLmNvbnRleHQsXHJcblx0XHRcdGhlYWRlcnM6IG9wdGlvbnMuaGVhZGVycyxcclxuXHRcdFx0aW5wdXQ6IG9wdGlvbnMuaW5wdXQsXHJcblx0XHRcdHBhcmFtczogb3B0aW9ucy5wYXJhbXNcclxuXHRcdH0pLnBpcGUoVXBsb2FkZXJIZWxwZXIuY2F0Y2hFcnJvcigpLCBVcGxvYWRlckhlbHBlci5yZXRyeVdoZW4oKSk7XHJcblx0fVxyXG5cdGNhbmNlbChiYXRjaElkOiBzdHJpbmcpIHtcclxuXHRcdHJldHVybiB0aGlzLiNkZWxldGVCYXRjaChiYXRjaElkKTtcclxuXHR9XHJcblxyXG5cdHJlc2V0KCkge1xyXG5cdFx0dGhpcy4jYmF0Y2hGaWxlcyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8QXJyYXk8QmF0Y2hGaWxlPj4oW10pO1xyXG5cdFx0dGhpcy4jZmlsZXNJbmZvLm5leHQoeyBkYXRhOiBbXSwgdHlwZTogRmlsZUV2ZW50VHlwZS5SZXNldCB9KTtcclxuXHRcdHRoaXMuI3N0YXJ0RXhlY3V0aW9uKCk7XHJcblx0fVxyXG5cclxuXHRzdG9wKGZpbGVJZDogc3RyaW5nKSB7XHJcblx0XHRjb25zdCBmaWxlcyA9IHRoaXMuI2dldEZpbGVzKCk7XHJcblx0XHRjb25zdCBmaWxlID0gZmlsZXMuZmluZCgoZikgPT4gZi5pZCA9PSBmaWxlSWQpO1xyXG5cclxuXHRcdGlmIChmaWxlLnN0YXR1cyA9PSBGaWxlU3RhdHVzLkluUHJvZ3Jlc3MpIHtcclxuXHRcdFx0dGhpcy4jY2FuY2VsUmVxdWVzdHMubmV4dCgpO1xyXG5cdFx0XHR0aGlzLiNzdGFydEV4ZWN1dGlvbigpO1xyXG5cdFx0fVxyXG5cclxuXHRcdGZpbGUuY2h1bmtzLmZpbHRlcigoYykgPT4gYy5zdGF0dXMgIT0gRmlsZVN0YXR1cy5Db21wbGV0ZWQpLmZvckVhY2goKGMpID0+IChjLnN0YXR1cyA9IEZpbGVTdGF0dXMuQ2FuY2VsZWQpKTtcclxuXHRcdGZpbGUuc3RhdHVzID0gRmlsZVN0YXR1cy5DYW5jZWxlZDtcclxuXHJcblx0XHR0aGlzLiN1cGRhdGVGaWxlcyhbLi4uZmlsZXNdKTtcclxuXHR9XHJcblx0cmVtb3ZlKGZpbGVJZDogc3RyaW5nKSB7XHJcblx0XHRyZXR1cm4gdGhpcy4jZGVsZXRlRmlsZShmaWxlSWQpO1xyXG5cdH1cclxuXHRyZXN1bWUoZmlsZUlkOiBzdHJpbmcpIHtcclxuXHRcdGNvbnN0IGZpbGVzID0gdGhpcy4jZ2V0RmlsZXMoKTtcclxuXHRcdGNvbnN0IGZpbGUgPSB0aGlzLiNnZXRGaWxlKGZpbGVJZCk7XHJcblx0XHRpZiAoZmlsZS5zdGF0dXMgPT0gRmlsZVN0YXR1cy5QZW5kaW5nKSByZXR1cm47XHJcblxyXG5cdFx0ZmlsZS5zdGF0dXMgPSBGaWxlU3RhdHVzLlBlbmRpbmc7XHJcblx0XHR0aGlzLiN1cGRhdGVGaWxlcyhbLi4uZmlsZXNdKTtcclxuXHJcblx0XHR0aGlzLiNnZXRGaWxlSW5mbyhmaWxlSWQpXHJcblx0XHRcdC5waXBlKGZpcnN0KCkpXHJcblx0XHRcdC5zdWJzY3JpYmUoKHVwbG9hZGVkKSA9PiB7XHJcblx0XHRcdFx0ZmlsZS5jaHVua3NcclxuXHRcdFx0XHRcdC5maWx0ZXIoKGMpID0+ICF1cGxvYWRlZC51cGxvYWRlZENodW5rSWRzLmluY2x1ZGVzKGMuaW5kZXgpKVxyXG5cdFx0XHRcdFx0LmZvckVhY2goKGMpID0+IChjLnN0YXR1cyA9IEZpbGVTdGF0dXMuUGVuZGluZykpO1xyXG5cdFx0XHRcdHRoaXMuI3VwZGF0ZUZpbGVzKFsuLi5maWxlc10pO1xyXG5cdFx0XHR9KTtcclxuXHR9XHJcblxyXG5cdCNzdGFydEV4ZWN1dGlvbigpIHtcclxuXHRcdHRoaXMuI2JhdGNoRmlsZXNcclxuXHRcdFx0LnBpcGUoXHJcblx0XHRcdFx0ZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcclxuXHRcdFx0XHRkZWJvdW5jZVRpbWUoMTAwKSxcclxuXHRcdFx0XHRzd2l0Y2hNYXAoKGJhdGNoRmlsZXMpID0+IHtcclxuXHRcdFx0XHRcdGNvbnN0IGZpbGVzV2l0aEJhdGNoSWQgPSBiYXRjaEZpbGVzLmZpbHRlcigoZmlsZSkgPT4gZmlsZS5iYXRjaElkKTtcclxuXHRcdFx0XHRcdGNvbnN0IGZpbGVzV2l0aG91dEJhdGNoSWQgPSBiYXRjaEZpbGVzLmZpbHRlcigoZmlsZSkgPT4gIWZpbGUuYmF0Y2hJZCk7XHJcblxyXG5cdFx0XHRcdFx0Y29uc3QgY2h1bmtSZXF1ZXN0cyA9IF9mbGF0TWFwKGZpbGVzV2l0aEJhdGNoSWQsIChmaWxlKSA9PiBmaWxlLmNodW5rcykuZmlsdGVyKFxyXG5cdFx0XHRcdFx0XHQoY2h1bmspID0+IGNodW5rLnN0YXR1cyA9PT0gRmlsZVN0YXR1cy5QZW5kaW5nXHJcblx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0Y29uc3QgZmlsZVJlcXVlc3RzID0gZmlsZXNXaXRob3V0QmF0Y2hJZC5maWx0ZXIoKGZpbGUpID0+IGZpbGUuc3RhdHVzID09PSBGaWxlU3RhdHVzLlBlbmRpbmcpO1xyXG5cclxuXHRcdFx0XHRcdHJldHVybiBmcm9tKFsuLi5jaHVua1JlcXVlc3RzLCAuLi5maWxlUmVxdWVzdHNdKTtcclxuXHRcdFx0XHR9KSxcclxuXHRcdFx0XHRtZXJnZU1hcCgoZW50aXR5KSA9PiB7XHJcblx0XHRcdFx0XHRjb25zdCBmaWxlID0gZW50aXR5IGFzIEJhdGNoRmlsZTtcclxuXHRcdFx0XHRcdGlmIChmaWxlPy5iYXRjaElkKSB7XHJcblx0XHRcdFx0XHRcdHJldHVybiB0aGlzLiN1cGxvYWRDaHVuayhlbnRpdHkgYXMgQ2h1bmspO1xyXG5cdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0cmV0dXJuIHRoaXMuI2dlbmVyYXRlQmF0Y2goZmlsZT8uaWQpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0sIFVQTE9BREVSX0NPTkZJRy5NQVhfQ09OQ1VSUkVOVF9SRVFVRVNUUyksXHJcblx0XHRcdFx0dGFrZVVudGlsKHRoaXMuI2NhbmNlbFJlcXVlc3RzKSxcclxuXHRcdFx0XHRmaW5hbGl6ZSgoKSA9PiBjb25zb2xlLmxvZygnQWxsIHJlcXVlc3RzIHByb2Nlc3NlZCcpKVxyXG5cdFx0XHQpXHJcblx0XHRcdC5zdWJzY3JpYmUoe1xyXG5cdFx0XHRcdGNvbXBsZXRlOiAoKSA9PiB7XHJcblx0XHRcdFx0XHRjb25zb2xlLmxvZygnUHJvY2Vzc2luZyBvZiByZXF1ZXN0cyBjb21wbGV0ZWQnKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0pO1xyXG5cdH1cclxuXHJcblx0I2dlbmVyYXRlQmF0Y2goZmlsZUlkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPFVwbG9hZGVSZXNwb25zZT4ge1xyXG5cdFx0Y29uc3QgZmlsZXMgPSB0aGlzLiNnZXRGaWxlcygpO1xyXG5cdFx0Y29uc3QgZmlsZSA9IHRoaXMuI2dldEZpbGUoZmlsZUlkKTtcclxuXHJcblx0XHRpZiAoZmlsZS5zdGF0dXMgPT09IEZpbGVTdGF0dXMuUGVuZGluZykge1xyXG5cdFx0XHRmaWxlLnN0YXR1cyA9IEZpbGVTdGF0dXMuSW5Qcm9ncmVzcztcclxuXHRcdFx0dGhpcy4jdXBkYXRlRmlsZXMoWy4uLmZpbGVzXSk7XHJcblxyXG5cdFx0XHRyZXR1cm4gdGhpcy4jY3JlYXRlQmF0Y2goKS5waXBlKFxyXG5cdFx0XHRcdFVwbG9hZGVySGVscGVyLmNhdGNoRXJyb3IoKSxcclxuXHRcdFx0XHR0YXAoKGJhdGNoSWQpID0+IHtcclxuXHRcdFx0XHRcdGZpbGUuYmF0Y2hJZCA9IGJhdGNoSWQ7XHJcblx0XHRcdFx0XHRmaWxlLmNodW5rcy5mb3JFYWNoKChjKSA9PiAoYy5iYXRjaElkID0gYmF0Y2hJZCkpO1xyXG5cdFx0XHRcdH0pLFxyXG5cdFx0XHRcdHRhcCgoKSA9PiB0aGlzLiN1cGRhdGVGaWxlcyhbLi4uZmlsZXNdKSksXHJcblx0XHRcdFx0Y2F0Y2hFcnJvcigoZXJyb3I6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiB7XHJcblx0XHRcdFx0XHR0aGlzLiNvblVwbG9hZEVycm9yKGZpbGVJZCk7XHJcblx0XHRcdFx0XHRyZXR1cm4gRU1QVFk7XHJcblx0XHRcdFx0fSlcclxuXHRcdFx0KTtcclxuXHRcdH1cclxuXHRcdHJldHVybiBFTVBUWTtcclxuXHR9XHJcblxyXG5cdCN1cGxvYWRDaHVuayhjaHVuazogQ2h1bmspOiBPYnNlcnZhYmxlPFVwbG9hZGVSZXNwb25zZT4ge1xyXG5cdFx0aWYgKGNodW5rLnN0YXR1cyA9PT0gRmlsZVN0YXR1cy5QZW5kaW5nKSB7XHJcblx0XHRcdGNodW5rLnN0YXR1cyA9IEZpbGVTdGF0dXMuSW5Qcm9ncmVzcztcclxuXHJcblx0XHRcdGNvbnN0IGZpbGVzID0gdGhpcy4jZ2V0RmlsZXMoKTtcclxuXHRcdFx0Y29uc3QgZmlsZSA9IHRoaXMuI2dldEZpbGUoY2h1bmsuZmlsZUlkKTtcclxuXHRcdFx0aWYgKGZpbGUuc3RhdHVzICE9IEZpbGVTdGF0dXMuSW5Qcm9ncmVzcykge1xyXG5cdFx0XHRcdGZpbGUuc3RhdHVzID0gRmlsZVN0YXR1cy5JblByb2dyZXNzO1xyXG5cdFx0XHRcdHRoaXMuI3VwZGF0ZUZpbGVzKFsuLi5maWxlc10pO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRyZXR1cm4gdGhpcy4jZ2V0UHJvdmlkZXIoZmlsZSlcclxuXHRcdFx0XHQudXBsb2FkKGZpbGUsIGNodW5rKVxyXG5cdFx0XHRcdC5waXBlKFxyXG5cdFx0XHRcdFx0VXBsb2FkZXJIZWxwZXIuY2F0Y2hFcnJvcigpLFxyXG5cdFx0XHRcdFx0dGFwKCgpID0+IHRoaXMuI29uVXBsb2FkRG9uZShjaHVuaykpLFxyXG5cdFx0XHRcdFx0Y2F0Y2hFcnJvcigoZXJyb3I6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiB7XHJcblx0XHRcdFx0XHRcdGlmIChlcnJvci5zdGF0dXMgPT09IEh0dHBTdGF0dXNDb2RlLlBlcm1hbmVudFJlZGlyZWN0KSB7XHJcblx0XHRcdFx0XHRcdFx0dGhpcy4jb25VcGxvYWREb25lKGNodW5rKTtcclxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0XHR0aGlzLiNvblVwbG9hZEVycm9yKGNodW5rLmZpbGVJZCk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0cmV0dXJuIEVNUFRZO1xyXG5cdFx0XHRcdFx0fSlcclxuXHRcdFx0XHQpO1xyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIEVNUFRZO1xyXG5cdH1cclxuXHQjb25VcGxvYWREb25lKGNodW5rOiBDaHVuaykge1xyXG5cdFx0Y29uc3QgZmlsZXMgPSB0aGlzLiNnZXRGaWxlcygpO1xyXG5cdFx0Y29uc3QgZmlsZSA9IHRoaXMuI2dldEZpbGUoY2h1bmsuZmlsZUlkKTtcclxuXHRcdGZpbGUuY2h1bmtzLmZpbmQoKGMpID0+IGMuaW5kZXggPT0gY2h1bmsuaW5kZXgpLnN0YXR1cyA9IEZpbGVTdGF0dXMuQ29tcGxldGVkO1xyXG5cclxuXHRcdGNvbnN0IHRvdGFsQ2h1bmtzID0gZmlsZS5jaHVua3MubGVuZ3RoO1xyXG5cdFx0Y29uc3QgY29tcGxldGVkQ2h1bmtzID0gZmlsZS5jaHVua3MuZmlsdGVyKChjKSA9PiBjLnN0YXR1cyA9PT0gRmlsZVN0YXR1cy5Db21wbGV0ZWQpLmxlbmd0aDtcclxuXHJcblx0XHRpZiAoY29tcGxldGVkQ2h1bmtzID09PSB0b3RhbENodW5rcykge1xyXG5cdFx0XHRmaWxlLnN0YXR1cyA9IEZpbGVTdGF0dXMuQ29tcGxldGVkO1xyXG5cdFx0XHRmaWxlLnByb2dyZXNzID0gMTAwO1xyXG5cdFx0XHR0aGlzLiNjb21wbGV0ZShmaWxlKTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdGNvbnN0IHByb2dyZXNzID0gKGNvbXBsZXRlZENodW5rcyAvIHRvdGFsQ2h1bmtzKSAqIDEwMDtcclxuXHRcdFx0aWYgKGZpbGUucHJvZ3Jlc3MgIT0gcHJvZ3Jlc3MpIHtcclxuXHRcdFx0XHRmaWxlLnByb2dyZXNzID0gcHJvZ3Jlc3M7XHJcblx0XHRcdFx0dGhpcy4jdXBkYXRlRmlsZXMoWy4uLmZpbGVzXSk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHR9XHJcblx0I29uVXBsb2FkRXJyb3IoZmlsZUlkOiBzdHJpbmcpIHtcclxuXHRcdGNvbnN0IGZpbGVzID0gdGhpcy4jZ2V0RmlsZXMoKTtcclxuXHRcdGNvbnN0IGZpbGUgPSB0aGlzLiNnZXRGaWxlKGZpbGVJZCk7XHJcblx0XHRmaWxlLmNodW5rcy5mb3JFYWNoKChjKSA9PiAoYy5zdGF0dXMgPSBGaWxlU3RhdHVzLkVycm9yKSk7XHJcblx0XHRpZiAoZmlsZS5zdGF0dXMgIT0gRmlsZVN0YXR1cy5FcnJvcikge1xyXG5cdFx0XHRmaWxlLnN0YXR1cyA9IEZpbGVTdGF0dXMuRXJyb3I7XHJcblx0XHRcdHRoaXMuI3VwZGF0ZUZpbGVzKFsuLi5maWxlc10pO1xyXG5cdFx0fVxyXG5cdH1cclxuXHQjY29tcGxldGUoYmF0Y2hGaWxlOiBCYXRjaEZpbGUpIHtcclxuXHRcdHRoaXMuI2dldFByb3ZpZGVyKGJhdGNoRmlsZSlcclxuXHRcdFx0LmNvbXBsZXRlKGJhdGNoRmlsZSlcclxuXHRcdFx0LnBpcGUoZmlyc3QoKSlcclxuXHRcdFx0LnN1YnNjcmliZSgoKSA9PiB7XHJcblx0XHRcdFx0Y29uc3QgZmlsZXMgPSB0aGlzLiNnZXRGaWxlcygpO1xyXG5cdFx0XHRcdHRoaXMuI3VwZGF0ZUZpbGVzKFsuLi5maWxlc10pO1xyXG5cdFx0XHRcdHRoaXMuI3ByZXBhcmVFdmVudChmaWxlcywgYmF0Y2hGaWxlLmlkKTtcclxuXHRcdFx0fSk7XHJcblx0fVxyXG5cdCNnZXRQcm92aWRlcihiYXRjaEZpbGU6IEJhdGNoRmlsZSkge1xyXG5cdFx0c3dpdGNoIChiYXRjaEZpbGUucHJvdmlkZXIpIHtcclxuXHRcdFx0Y2FzZSBVcGxvYWRQcm92aWRlci5OdXhlbzpcclxuXHRcdFx0XHRyZXR1cm4gdGhpcy5udXhlb1Byb3ZpZGVyO1xyXG5cdFx0XHRjYXNlIFVwbG9hZFByb3ZpZGVyLlMzOlxyXG5cdFx0XHRcdHJldHVybiB0aGlzLnMzUHJvdmlkZXI7XHJcblx0XHRcdGRlZmF1bHQ6XHJcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIHVwbG9hZCBwcm92aWRlci4gUGxlYXNlIGNvbnRhY3Qgd2l0aCBOREYgZGV2ZWxvcGVycy4nKTtcclxuXHRcdH1cclxuXHR9XHJcblx0I3VwZGF0ZUZpbGVzKGZpbGVzOiBCYXRjaEZpbGVbXSkge1xyXG5cdFx0dGhpcy4jcHJlcGFyZUV2ZW50KGZpbGVzKTtcclxuXHRcdHRoaXMuI2JhdGNoRmlsZXMubmV4dChbLi4uZmlsZXNdKTtcclxuXHR9XHJcblx0I3ByZXBhcmVFdmVudChmaWxlczogQmF0Y2hGaWxlW10sIGZpbGVJZDogc3RyaW5nID0gbnVsbCkge1xyXG5cdFx0Y29uc3QgZmlsdGVyZWRGaWxlcyA9IGZpbGVJZCA/IGZpbGVzLmZpbHRlcigoZikgPT4gZi5pZCA9PT0gZmlsZUlkKSA6IGZpbGVzO1xyXG5cdFx0dGhpcy4jZmlsZXNJbmZvLm5leHQoe1xyXG5cdFx0XHR0eXBlOiBmaWxlSWQgPyBGaWxlRXZlbnRUeXBlLkNvbXBsZXRlIDogRmlsZUV2ZW50VHlwZS5DaGFuZ2VzLFxyXG5cdFx0XHRkYXRhOiBmaWx0ZXJlZEZpbGVzLm1hcCgoeyBiYXRjaElkLCBpZCwgaW5kZXgsIHByb2dyZXNzLCBzdGF0dXMsIHByb3ZpZGVyLCBkYXRhLCBtZXRhZGF0YSB9KSA9PiAoe1xyXG5cdFx0XHRcdGJhdGNoSWQsXHJcblx0XHRcdFx0aWQsXHJcblx0XHRcdFx0aW5kZXgsXHJcblx0XHRcdFx0cHJvZ3Jlc3MsXHJcblx0XHRcdFx0c3RhdHVzLFxyXG5cdFx0XHRcdHByb3ZpZGVyLFxyXG5cdFx0XHRcdGRhdGEsXHJcblx0XHRcdFx0bWV0YWRhdGEsXHJcblx0XHRcdFx0aWNvbjogdGhpcy5pY29uU2VydmljZS5nZXRGaWxlSWNvbihkYXRhKVxyXG5cdFx0XHR9KSlcclxuXHRcdH0pO1xyXG5cdH1cclxuXHQjZ2V0RmlsZShmaWxlSWQ6IHN0cmluZykge1xyXG5cdFx0Y29uc3QgZmlsZXMgPSB0aGlzLiNnZXRGaWxlcygpO1xyXG5cdFx0cmV0dXJuIGZpbGVzLmZpbmQoKGYpID0+IGYuaWQgPT0gZmlsZUlkKTtcclxuXHR9XHJcblx0I2dldEZpbGVzKCkge1xyXG5cdFx0cmV0dXJuIFsuLi50aGlzLiNiYXRjaEZpbGVzLmdldFZhbHVlKCldO1xyXG5cdH1cclxuXHJcblx0Ly8gbW92ZSBpdCB0byBudXhlbyBvdmVycmlkZSBzZXJ2aWNlXHJcblx0I2NyZWF0ZUJhdGNoKCk6IE9ic2VydmFibGU8c3RyaW5nPiB7XHJcblx0XHRyZXR1cm4gdGhpcy5wb3N0PEJhdGNoPihgJHtudXhlb0Jhc2VVcmwoKX11cGxvYWRgKS5waXBlKFxyXG5cdFx0XHRVcGxvYWRlckhlbHBlci5jYXRjaEVycm9yKCksXHJcblx0XHRcdFVwbG9hZGVySGVscGVyLnJldHJ5V2hlbigpLFxyXG5cdFx0XHRtYXAoKGJhdGNoOiBCYXRjaCkgPT4ge1xyXG5cdFx0XHRcdHJldHVybiBiYXRjaC5iYXRjaElkO1xyXG5cdFx0XHR9KVxyXG5cdFx0KTtcclxuXHR9XHJcblx0I2RlbGV0ZUJhdGNoKGJhdGNoSWQ6IHN0cmluZykge1xyXG5cdFx0cmV0dXJuIHRoaXMuZGVsZXRlKGAke251eGVvQmFzZVVybCgpfXVwbG9hZC8ke2JhdGNoSWR9YCkucGlwZShcclxuXHRcdFx0VXBsb2FkZXJIZWxwZXIuY2F0Y2hFcnJvcigpLFxyXG5cdFx0XHRVcGxvYWRlckhlbHBlci5yZXRyeVdoZW4oKSxcclxuXHRcdFx0ZmluYWxpemUoKCkgPT4ge1xyXG5cdFx0XHRcdHRoaXMucmVzZXQoKTtcclxuXHRcdFx0fSlcclxuXHRcdCk7XHJcblx0fVxyXG5cdCNkZWxldGVGaWxlKGZpbGVJZDogc3RyaW5nKSB7XHJcblx0XHRjb25zdCBmaWxlcyA9IHRoaXMuI2dldEZpbGVzKCk7XHJcblx0XHRjb25zdCBmaWxlID0gdGhpcy4jZ2V0RmlsZShmaWxlSWQpO1xyXG5cclxuXHRcdGZpbGUuc3RhdHVzID0gRmlsZVN0YXR1cy5QZW5kaW5nO1xyXG5cdFx0dGhpcy4jdXBkYXRlRmlsZXMoWy4uLmZpbGVzXSk7XHJcblxyXG5cdFx0cmV0dXJuIHRoaXMuZGVsZXRlKGAke251eGVvQmFzZVVybCgpfXVwbG9hZC8ke2ZpbGUuYmF0Y2hJZH0vJHtmaWxlLmluZGV4fWApLnBpcGUoXHJcblx0XHRcdFVwbG9hZGVySGVscGVyLmNhdGNoRXJyb3IoKSxcclxuXHRcdFx0VXBsb2FkZXJIZWxwZXIucmV0cnlXaGVuKCksXHJcblx0XHRcdGZpbmFsaXplKCgpID0+IHtcclxuXHRcdFx0XHR0aGlzLiN1cGRhdGVGaWxlcyhbLi4uZmlsZXMuZmlsdGVyKChmKSA9PiBmLmlkICE9IGZpbGVJZCldKTtcclxuXHRcdFx0fSlcclxuXHRcdCk7XHJcblx0fVxyXG5cdCNnZXRGaWxlSW5mbyhmaWxlSWQ6IHN0cmluZyk6IE9ic2VydmFibGU8VXBsb2FkZVJlc3BvbnNlPiB7XHJcblx0XHRjb25zdCBmaWxlID0gdGhpcy4jZ2V0RmlsZShmaWxlSWQpO1xyXG5cdFx0cmV0dXJuIHRoaXMuZ2V0PFVwbG9hZGVSZXNwb25zZT4oYCR7bnV4ZW9CYXNlVXJsKCl9dXBsb2FkLyR7ZmlsZS5iYXRjaElkfS8ke2ZpbGUuaW5kZXh9YCkucGlwZShcclxuXHRcdFx0VXBsb2FkZXJIZWxwZXIuY2F0Y2hFcnJvcigpLFxyXG5cdFx0XHRVcGxvYWRlckhlbHBlci5yZXRyeVdoZW4oKVxyXG5cdFx0KTtcclxuXHR9XHJcbn1cclxuIl19
@@ -1,16 +0,0 @@
1
- import * as i0 from "@angular/core";
2
- import * as i1 from "./components/bottom-sheet/ndf-uploader-bottom-sheet.component";
3
- import * as i2 from "@angular/common";
4
- import * as i3 from "@ngx-translate/core";
5
- import * as i4 from "@angular/material/dialog";
6
- import * as i5 from "@angular/material/icon";
7
- import * as i6 from "@angular/material/button";
8
- import * as i7 from "@angular/material/bottom-sheet";
9
- import * as i8 from "@angular/material/expansion";
10
- import * as i9 from "@angular/material/tooltip";
11
- import * as i10 from "@angular/material/progress-spinner";
12
- export declare class UploaderModule {
13
- static ɵfac: i0.ɵɵFactoryDeclaration<UploaderModule, never>;
14
- static ɵmod: i0.ɵɵNgModuleDeclaration<UploaderModule, [typeof i1.NdfUploaderBottomSheetComponent], [typeof i2.CommonModule, typeof i3.TranslateModule, typeof i4.MatDialogModule, typeof i5.MatIconModule, typeof i6.MatButtonModule, typeof i7.MatBottomSheetModule, typeof i8.MatExpansionModule, typeof i9.MatTooltipModule, typeof i10.MatProgressSpinnerModule], never>;
15
- static ɵinj: i0.ɵɵInjectorDeclaration<UploaderModule>;
16
- }