nxt-dropzone-wrapper 14.0.0 → 16.0.0-alpha.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,86 +1,178 @@
1
- import _dz from 'dropzone';
2
- import { PLATFORM_ID } from '@angular/core';
1
+ /* eslint-disable @angular-eslint/no-output-rename */
3
2
  import { isPlatformBrowser } from '@angular/common';
4
- import { Inject, Optional, Directive, Input, Output, EventEmitter } from '@angular/core';
5
- import { DROPZONE_CONFIG, DropzoneConfig, DropzoneEvents } from './dropzone.interfaces';
3
+ import { Directive, EventEmitter, HostBinding, Inject, Input, Optional, Output, PLATFORM_ID } from '@angular/core';
4
+ import Dropzone from 'dropzone';
5
+ import { _DropzoneConfig, DropzoneEvents, internalChanges, NXT_DROPZONE_CONFIG, NXT_DROPZONE_LISTENERS } from './dropzone.interfaces';
6
6
  import * as i0 from "@angular/core";
7
- // Fix until Dropzone types are updated
8
- const Dropzone = _dz.Dropzone;
9
7
  export class DropzoneDirective {
10
- constructor(zone, renderer, elementRef, differs, platformId, defaults) {
8
+ /** Disables / detaches Dropzone from the element */
9
+ set disabled(val) {
10
+ val = !!val;
11
+ if (val != this._disabled && this.instance) {
12
+ if (val)
13
+ this.zone.runOutsideAngular(() => {
14
+ this.instance.disable();
15
+ });
16
+ else
17
+ this.zone.runOutsideAngular(() => {
18
+ this.instance.enable();
19
+ });
20
+ }
21
+ this._disabled = val;
22
+ }
23
+ get disabled() {
24
+ return this._disabled;
25
+ }
26
+ get dropzone() {
27
+ return this.instance;
28
+ }
29
+ /** @internal */
30
+ get isSingle() {
31
+ return this._params.maxFiles === 1;
32
+ }
33
+ /** @internal */
34
+ get isMultiple() {
35
+ return this._params.maxFiles !== 1;
36
+ }
37
+ constructor(zone, elementRef, differs, platformId, defaults, component) {
11
38
  this.zone = zone;
12
- this.renderer = renderer;
13
39
  this.elementRef = elementRef;
14
40
  this.differs = differs;
15
41
  this.platformId = platformId;
16
42
  this.defaults = defaults;
17
- this.configDiff = null;
18
- this.disabled = false;
19
- this.DZ_INIT = new EventEmitter();
20
- this.DZ_ERROR = new EventEmitter();
21
- this.DZ_SUCCESS = new EventEmitter();
22
- this.DZ_SENDING = new EventEmitter();
23
- this.DZ_CANCELED = new EventEmitter();
24
- this.DZ_COMPLETE = new EventEmitter();
25
- this.DZ_PROCESSING = new EventEmitter();
26
- this.DZ_DROP = new EventEmitter();
27
- this.DZ_DRAGSTART = new EventEmitter();
28
- this.DZ_DRAGEND = new EventEmitter();
29
- this.DZ_DRAGENTER = new EventEmitter();
30
- this.DZ_DRAGOVER = new EventEmitter();
31
- this.DZ_DRAGLEAVE = new EventEmitter();
32
- this.DZ_THUMBNAIL = new EventEmitter();
33
- this.DZ_ADDEDFILE = new EventEmitter();
34
- this.DZ_ADDEDFILES = new EventEmitter();
35
- this.DZ_REMOVEDFILE = new EventEmitter();
36
- this.DZ_UPLOADPROGRESS = new EventEmitter();
37
- this.DZ_MAXFILESREACHED = new EventEmitter();
38
- this.DZ_MAXFILESEXCEEDED = new EventEmitter();
39
- this.DZ_ERRORMULTIPLE = new EventEmitter();
40
- this.DZ_SUCCESSMULTIPLE = new EventEmitter();
41
- this.DZ_SENDINGMULTIPLE = new EventEmitter();
42
- this.DZ_CANCELEDMULTIPLE = new EventEmitter();
43
- this.DZ_COMPLETEMULTIPLE = new EventEmitter();
44
- this.DZ_PROCESSINGMULTIPLE = new EventEmitter();
45
- this.DZ_RESET = new EventEmitter();
46
- this.DZ_QUEUECOMPLETE = new EventEmitter();
47
- this.DZ_TOTALUPLOADPROGRESS = new EventEmitter();
48
- const dz = Dropzone;
49
- dz.autoDiscover = false;
43
+ this.component = component;
44
+ this._disabled = false;
45
+ this._params = new _DropzoneConfig(this.defaults);
46
+ this.configDiff = this.differs.find(this.config || {}).create();
47
+ this.paramDiff = this.differs.find(this._params).create();
48
+ this.DZ_INIT = this.component?.DZ_INIT
49
+ ?? new EventEmitter();
50
+ this.DZ_DROP = this.component?.DZ_DROP
51
+ ?? new EventEmitter();
52
+ this.DZ_DRAGSTART = this.component?.DZ_DRAGSTART
53
+ ?? new EventEmitter();
54
+ this.DZ_DRAGEND = this.component?.DZ_DRAGEND
55
+ ?? new EventEmitter();
56
+ this.DZ_DRAGENTER = this.component?.DZ_DRAGENTER
57
+ ?? new EventEmitter();
58
+ this.DZ_DRAGOVER = this.component?.DZ_DRAGOVER
59
+ ?? new EventEmitter();
60
+ this.DZ_DRAGLEAVE = this.component?.DZ_DRAGLEAVE
61
+ ?? new EventEmitter();
62
+ this.DZ_PASTE = this.component?.DZ_PASTE
63
+ ?? new EventEmitter();
64
+ this.DZ_RESET = this.component?.DZ_RESET
65
+ ?? new EventEmitter();
66
+ this.DZ_ADDEDFILE = this.component?.DZ_ADDEDFILE
67
+ ?? new EventEmitter();
68
+ this.DZ_ADDEDFILES = this.component?.DZ_ADDEDFILES
69
+ ?? new EventEmitter();
70
+ this.DZ_REMOVEDFILE = this.component?.DZ_REMOVEDFILE
71
+ ?? new EventEmitter();
72
+ this.DZ_THUMBNAIL = this.component?.DZ_THUMBNAIL
73
+ ?? new EventEmitter();
74
+ this.DZ_ERROR = this.component?.DZ_ERROR
75
+ ?? new EventEmitter();
76
+ this.DZ_ERRORMULTIPLE = this.component?.DZ_ERRORMULTIPLE
77
+ ?? new EventEmitter();
78
+ this.DZ_PROCESSING = this.component?.DZ_PROCESSING
79
+ ?? new EventEmitter();
80
+ this.DZ_PROCESSINGMULTIPLE = this.component?.DZ_PROCESSINGMULTIPLE
81
+ ?? new EventEmitter();
82
+ this.DZ_UPLOADPROGRESS = this.component?.DZ_UPLOADPROGRESS
83
+ ?? new EventEmitter();
84
+ this.DZ_TOTALUPLOADPROGRESS = this.component?.DZ_TOTALUPLOADPROGRESS
85
+ ?? new EventEmitter();
86
+ this.DZ_SENDING = this.component?.DZ_SENDING
87
+ ?? new EventEmitter();
88
+ this.DZ_SENDINGMULTIPLE = this.component?.DZ_SENDINGMULTIPLE
89
+ ?? new EventEmitter();
90
+ this.DZ_SUCCESS = this.component?.DZ_SUCCESS
91
+ // eslint-disable-next-line @typescript-eslint/ban-types
92
+ ?? new EventEmitter();
93
+ this.DZ_SUCCESSMULTIPLE = this.component?.DZ_SUCCESSMULTIPLE
94
+ ?? new EventEmitter();
95
+ this.DZ_CANCELED = this.component?.DZ_CANCELED
96
+ ?? new EventEmitter();
97
+ this.DZ_CANCELEDMULTIPLE = this.component?.DZ_CANCELEDMULTIPLE
98
+ ?? new EventEmitter();
99
+ this.DZ_COMPLETE = this.component?.DZ_COMPLETE
100
+ ?? new EventEmitter();
101
+ this.DZ_COMPLETEMULTIPLE = this.component?.DZ_COMPLETEMULTIPLE
102
+ ?? new EventEmitter();
103
+ this.DZ_MAXFILESEXCEEDED = this.component?.DZ_MAXFILESEXCEEDED
104
+ ?? new EventEmitter();
105
+ this.DZ_MAXFILESREACHED = this.component?.DZ_MAXFILESREACHED
106
+ ?? new EventEmitter();
107
+ this.DZ_QUEUECOMPLETE = this.component?.DZ_QUEUECOMPLETE
108
+ ?? new EventEmitter();
50
109
  }
110
+ /** @internal */
51
111
  ngOnInit() {
112
+ this.initInstance();
113
+ }
114
+ /** @internal */
115
+ ngOnDestroy() {
116
+ this.destroyInstance();
117
+ }
118
+ /** @internal */
119
+ ngDoCheck() {
120
+ const changes = this.configDiff.diff(this.config || {});
121
+ if (changes) {
122
+ const newParams = new _DropzoneConfig(this.defaults);
123
+ newParams.assign(this.config);
124
+ const d = this.paramDiff.diff(newParams);
125
+ if (d) {
126
+ this._params = newParams;
127
+ let hasChanges = false;
128
+ d.forEachItem(r => {
129
+ if (!internalChanges.has(r.key) && r.currentValue !== r.previousValue)
130
+ hasChanges = true;
131
+ });
132
+ if (hasChanges && this.instance) {
133
+ this.destroyInstance();
134
+ this.initInstance();
135
+ }
136
+ }
137
+ }
138
+ }
139
+ /** @internal */
140
+ reset(cancel) {
141
+ if (this.instance) {
142
+ this.zone.runOutsideAngular(() => {
143
+ this.instance.removeAllFiles(cancel);
144
+ });
145
+ }
146
+ }
147
+ initInstance() {
52
148
  if (!isPlatformBrowser(this.platformId)) {
53
149
  return;
54
150
  }
55
- const params = new DropzoneConfig(this.defaults);
56
- params.assign(this.config); // Custom configuration
57
- this.renderer.addClass(this.elementRef.nativeElement, (params.maxFiles === 1) ? 'dz-single' : 'dz-multiple');
58
- this.renderer.removeClass(this.elementRef.nativeElement, (params.maxFiles === 1) ? 'dz-multiple' : 'dz-single');
59
151
  this.zone.runOutsideAngular(() => {
60
- this.instance = new Dropzone(this.elementRef.nativeElement, params);
152
+ this.instance = new Dropzone(this.elementRef.nativeElement, this._params);
61
153
  });
62
154
  if (this.disabled) {
63
155
  this.instance.disable();
64
156
  }
65
- if (this.DZ_INIT.observers.length) {
157
+ if (this.DZ_INIT.observed) {
66
158
  this.zone.run(() => {
67
159
  this.DZ_INIT.emit(this.instance);
68
160
  });
69
161
  }
70
162
  // Add auto reset handling for events
71
163
  this.instance.on('success', () => {
72
- if (params.autoReset != null) {
73
- setTimeout(() => this.reset(), params.autoReset);
164
+ if ((this._params.autoReset ?? -1) >= 0) {
165
+ setTimeout(() => this.reset(), this._params.autoReset);
74
166
  }
75
167
  });
76
168
  this.instance.on('error', () => {
77
- if (params.errorReset != null) {
78
- setTimeout(() => this.reset(), params.errorReset);
169
+ if ((this._params.errorReset ?? -1) >= 0) {
170
+ setTimeout(() => this.reset(), this._params.errorReset);
79
171
  }
80
172
  });
81
173
  this.instance.on('canceled', () => {
82
- if (params.cancelReset != null) {
83
- setTimeout(() => this.reset(), params.cancelReset);
174
+ if ((this._params.cancelReset ?? -1) >= 0) {
175
+ setTimeout(() => this.reset(), this._params.cancelReset);
84
176
  }
85
177
  });
86
178
  // Add native Dropzone event handling
@@ -89,104 +181,52 @@ export class DropzoneDirective {
89
181
  args = (args.length === 1) ? args[0] : args;
90
182
  const output = `DZ_${eventName.toUpperCase()}`;
91
183
  const emitter = this[output];
92
- if (emitter.observers.length > 0) {
184
+ if (emitter.observed) {
93
185
  this.zone.run(() => {
94
186
  emitter.emit(args);
95
187
  });
96
188
  }
97
189
  });
98
190
  });
99
- if (!this.configDiff) {
100
- this.configDiff = this.differs.find(this.config || {}).create();
101
- this.configDiff.diff(this.config || {});
102
- }
103
191
  }
104
- ngOnDestroy() {
192
+ destroyInstance() {
105
193
  if (this.instance) {
106
194
  this.zone.runOutsideAngular(() => {
107
195
  this.instance.destroy();
108
196
  });
109
- this.instance = null;
110
- }
111
- }
112
- ngDoCheck() {
113
- if (!this.disabled && this.configDiff) {
114
- const changes = this.configDiff.diff(this.config || {});
115
- if (changes && this.instance) {
116
- this.ngOnDestroy();
117
- this.ngOnInit();
118
- }
119
- }
120
- }
121
- ngOnChanges(changes) {
122
- if (this.instance && changes['disabled']) {
123
- if (changes['disabled'].currentValue !== changes['disabled'].previousValue) {
124
- if (changes['disabled'].currentValue === false) {
125
- this.zone.runOutsideAngular(() => {
126
- this.instance.enable();
127
- });
128
- }
129
- else if (changes['disabled'].currentValue === true) {
130
- this.zone.runOutsideAngular(() => {
131
- this.instance.disable();
132
- });
133
- }
134
- }
135
- }
136
- }
137
- dropzone() {
138
- return this.instance;
139
- }
140
- reset(cancel) {
141
- if (this.instance) {
142
- this.zone.runOutsideAngular(() => {
143
- this.instance.removeAllFiles(cancel);
144
- });
197
+ this.instance = undefined;
145
198
  }
146
199
  }
147
200
  }
148
- DropzoneDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: DropzoneDirective, deps: [{ token: i0.NgZone }, { token: i0.Renderer2 }, { token: i0.ElementRef }, { token: i0.KeyValueDiffers }, { token: PLATFORM_ID }, { token: DROPZONE_CONFIG, optional: true }], target: i0.ɵɵFactoryTarget.Directive });
149
- DropzoneDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.2.12", type: DropzoneDirective, selector: "[dropzone]", inputs: { disabled: "disabled", config: ["dropzone", "config"] }, outputs: { DZ_INIT: "init", DZ_ERROR: "error", DZ_SUCCESS: "success", DZ_SENDING: "sending", DZ_CANCELED: "canceled", DZ_COMPLETE: "complete", DZ_PROCESSING: "processing", DZ_DROP: "drop", DZ_DRAGSTART: "dragStart", DZ_DRAGEND: "dragEnd", DZ_DRAGENTER: "dragEnter", DZ_DRAGOVER: "dragOver", DZ_DRAGLEAVE: "dragLeave", DZ_THUMBNAIL: "thumbnail", DZ_ADDEDFILE: "addedFile", DZ_ADDEDFILES: "addedFiles", DZ_REMOVEDFILE: "removedFile", DZ_UPLOADPROGRESS: "uploadProgress", DZ_MAXFILESREACHED: "maxFilesReached", DZ_MAXFILESEXCEEDED: "maxFilesExceeded", DZ_ERRORMULTIPLE: "errorMultiple", DZ_SUCCESSMULTIPLE: "successMultiple", DZ_SENDINGMULTIPLE: "sendingMultiple", DZ_CANCELEDMULTIPLE: "canceledMultiple", DZ_COMPLETEMULTIPLE: "completeMultiple", DZ_PROCESSINGMULTIPLE: "processingMultiple", DZ_RESET: "reset", DZ_QUEUECOMPLETE: "queueComplete", DZ_TOTALUPLOADPROGRESS: "totalUploadProgress" }, exportAs: ["ngxDropzone"], usesOnChanges: true, ngImport: i0 });
150
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: DropzoneDirective, decorators: [{
201
+ DropzoneDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.3", ngImport: i0, type: DropzoneDirective, deps: [{ token: i0.NgZone }, { token: i0.ElementRef }, { token: i0.KeyValueDiffers }, { token: PLATFORM_ID }, { token: NXT_DROPZONE_CONFIG, optional: true }, { token: NXT_DROPZONE_LISTENERS, optional: true }], target: i0.ɵɵFactoryTarget.Directive });
202
+ DropzoneDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.3", type: DropzoneDirective, selector: "[nxtDropzone]", inputs: { disabled: "disabled", config: ["nxtDropzone", "config"] }, outputs: { DZ_INIT: "init", DZ_DROP: "drop", DZ_DRAGSTART: "dragStart", DZ_DRAGEND: "dragEnd", DZ_DRAGENTER: "dragEnter", DZ_DRAGOVER: "dragOver", DZ_DRAGLEAVE: "dragLeave", DZ_PASTE: "paste", DZ_RESET: "reset", DZ_ADDEDFILE: "addedFile", DZ_ADDEDFILES: "addedFiles", DZ_REMOVEDFILE: "removedFile", DZ_THUMBNAIL: "thumbnail", DZ_ERROR: "error", DZ_ERRORMULTIPLE: "errorMultiple", DZ_PROCESSING: "processing", DZ_PROCESSINGMULTIPLE: "processingMultiple", DZ_UPLOADPROGRESS: "uploadProgress", DZ_TOTALUPLOADPROGRESS: "totalUploadProgress", DZ_SENDING: "sending", DZ_SENDINGMULTIPLE: "sendingMultiple", DZ_SUCCESS: "success", DZ_SUCCESSMULTIPLE: "successMultiple", DZ_CANCELED: "canceled", DZ_CANCELEDMULTIPLE: "canceledMultiple", DZ_COMPLETE: "complete", DZ_COMPLETEMULTIPLE: "completeMultiple", DZ_MAXFILESEXCEEDED: "maxFilesExceeded", DZ_MAXFILESREACHED: "maxFilesReached", DZ_QUEUECOMPLETE: "queueComplete" }, host: { properties: { "class.dz-single": "this.isSingle", "class.dz-multiple": "this.isMultiple" } }, exportAs: ["nxtDropzone"], ngImport: i0 });
203
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.3", ngImport: i0, type: DropzoneDirective, decorators: [{
151
204
  type: Directive,
152
205
  args: [{
153
- selector: '[dropzone]',
154
- exportAs: 'ngxDropzone'
206
+ selector: '[nxtDropzone]',
207
+ exportAs: 'nxtDropzone'
155
208
  }]
156
- }], ctorParameters: function () { return [{ type: i0.NgZone }, { type: i0.Renderer2 }, { type: i0.ElementRef }, { type: i0.KeyValueDiffers }, { type: Object, decorators: [{
209
+ }], ctorParameters: function () { return [{ type: i0.NgZone }, { type: i0.ElementRef }, { type: i0.KeyValueDiffers }, { type: Object, decorators: [{
157
210
  type: Inject,
158
211
  args: [PLATFORM_ID]
159
212
  }] }, { type: undefined, decorators: [{
160
213
  type: Optional
161
214
  }, {
162
215
  type: Inject,
163
- args: [DROPZONE_CONFIG]
216
+ args: [NXT_DROPZONE_CONFIG]
217
+ }] }, { type: undefined, decorators: [{
218
+ type: Optional
219
+ }, {
220
+ type: Inject,
221
+ args: [NXT_DROPZONE_LISTENERS]
164
222
  }] }]; }, propDecorators: { disabled: [{
165
223
  type: Input
166
224
  }], config: [{
167
225
  type: Input,
168
- args: ['dropzone']
226
+ args: ['nxtDropzone']
169
227
  }], DZ_INIT: [{
170
228
  type: Output,
171
229
  args: ['init']
172
- }], DZ_ERROR: [{
173
- type: Output,
174
- args: ['error']
175
- }], DZ_SUCCESS: [{
176
- type: Output,
177
- args: ['success']
178
- }], DZ_SENDING: [{
179
- type: Output,
180
- args: ['sending']
181
- }], DZ_CANCELED: [{
182
- type: Output,
183
- args: ['canceled']
184
- }], DZ_COMPLETE: [{
185
- type: Output,
186
- args: ['complete']
187
- }], DZ_PROCESSING: [{
188
- type: Output,
189
- args: ['processing']
190
230
  }], DZ_DROP: [{
191
231
  type: Output,
192
232
  args: ['drop']
@@ -205,9 +245,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImpo
205
245
  }], DZ_DRAGLEAVE: [{
206
246
  type: Output,
207
247
  args: ['dragLeave']
208
- }], DZ_THUMBNAIL: [{
248
+ }], DZ_PASTE: [{
209
249
  type: Output,
210
- args: ['thumbnail']
250
+ args: ['paste']
251
+ }], DZ_RESET: [{
252
+ type: Output,
253
+ args: ['reset']
211
254
  }], DZ_ADDEDFILE: [{
212
255
  type: Output,
213
256
  args: ['addedFile']
@@ -217,41 +260,65 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImpo
217
260
  }], DZ_REMOVEDFILE: [{
218
261
  type: Output,
219
262
  args: ['removedFile']
263
+ }], DZ_THUMBNAIL: [{
264
+ type: Output,
265
+ args: ['thumbnail']
266
+ }], DZ_ERROR: [{
267
+ type: Output,
268
+ args: ['error']
269
+ }], DZ_ERRORMULTIPLE: [{
270
+ type: Output,
271
+ args: ['errorMultiple']
272
+ }], DZ_PROCESSING: [{
273
+ type: Output,
274
+ args: ['processing']
275
+ }], DZ_PROCESSINGMULTIPLE: [{
276
+ type: Output,
277
+ args: ['processingMultiple']
220
278
  }], DZ_UPLOADPROGRESS: [{
221
279
  type: Output,
222
280
  args: ['uploadProgress']
223
- }], DZ_MAXFILESREACHED: [{
281
+ }], DZ_TOTALUPLOADPROGRESS: [{
224
282
  type: Output,
225
- args: ['maxFilesReached']
226
- }], DZ_MAXFILESEXCEEDED: [{
283
+ args: ['totalUploadProgress']
284
+ }], DZ_SENDING: [{
227
285
  type: Output,
228
- args: ['maxFilesExceeded']
229
- }], DZ_ERRORMULTIPLE: [{
286
+ args: ['sending']
287
+ }], DZ_SENDINGMULTIPLE: [{
230
288
  type: Output,
231
- args: ['errorMultiple']
289
+ args: ['sendingMultiple']
290
+ }], DZ_SUCCESS: [{
291
+ type: Output,
292
+ args: ['success']
232
293
  }], DZ_SUCCESSMULTIPLE: [{
233
294
  type: Output,
234
295
  args: ['successMultiple']
235
- }], DZ_SENDINGMULTIPLE: [{
296
+ }], DZ_CANCELED: [{
236
297
  type: Output,
237
- args: ['sendingMultiple']
298
+ args: ['canceled']
238
299
  }], DZ_CANCELEDMULTIPLE: [{
239
300
  type: Output,
240
301
  args: ['canceledMultiple']
302
+ }], DZ_COMPLETE: [{
303
+ type: Output,
304
+ args: ['complete']
241
305
  }], DZ_COMPLETEMULTIPLE: [{
242
306
  type: Output,
243
307
  args: ['completeMultiple']
244
- }], DZ_PROCESSINGMULTIPLE: [{
308
+ }], DZ_MAXFILESEXCEEDED: [{
245
309
  type: Output,
246
- args: ['processingMultiple']
247
- }], DZ_RESET: [{
310
+ args: ['maxFilesExceeded']
311
+ }], DZ_MAXFILESREACHED: [{
248
312
  type: Output,
249
- args: ['reset']
313
+ args: ['maxFilesReached']
250
314
  }], DZ_QUEUECOMPLETE: [{
251
315
  type: Output,
252
316
  args: ['queueComplete']
253
- }], DZ_TOTALUPLOADPROGRESS: [{
254
- type: Output,
255
- args: ['totalUploadProgress']
317
+ }], isSingle: [{
318
+ type: HostBinding,
319
+ args: ['class.dz-single']
320
+ }], isMultiple: [{
321
+ type: HostBinding,
322
+ args: ['class.dz-multiple']
256
323
  }] } });
257
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJvcHpvbmUuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvbGliL3NyYy9saWIvZHJvcHpvbmUuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sR0FBRyxNQUFNLFVBQVUsQ0FBQztBQUkzQixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzVDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3BELE9BQU8sRUFBVSxNQUFNLEVBQUUsUUFBUSxFQUF5QixTQUFTLEVBQzFCLEtBQUssRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUNsQixNQUFNLGVBQWUsQ0FBQztBQUV4RSxPQUFPLEVBQUUsZUFBZSxFQUFFLGNBQWMsRUFDdkIsY0FBYyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7O0FBVi9ELHVDQUF1QztBQUN2QyxNQUFNLFFBQVEsR0FBZ0IsR0FBVyxDQUFDLFFBQVEsQ0FBQztBQWVuRCxNQUFNLE9BQU8saUJBQWlCO0lBNEM1QixZQUFvQixJQUFZLEVBQVUsUUFBbUIsRUFBVSxVQUFzQixFQUNuRixPQUF3QixFQUErQixVQUFrQixFQUNwQyxRQUFpQztRQUY1RCxTQUFJLEdBQUosSUFBSSxDQUFRO1FBQVUsYUFBUSxHQUFSLFFBQVEsQ0FBVztRQUFVLGVBQVUsR0FBVixVQUFVLENBQVk7UUFDbkYsWUFBTyxHQUFQLE9BQU8sQ0FBaUI7UUFBK0IsZUFBVSxHQUFWLFVBQVUsQ0FBUTtRQUNwQyxhQUFRLEdBQVIsUUFBUSxDQUF5QjtRQTNDeEUsZUFBVSxHQUF1QyxJQUFJLENBQUM7UUFFckQsYUFBUSxHQUFZLEtBQUssQ0FBQztRQUlELFlBQU8sR0FBdUIsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUV0RCxhQUFRLEdBQXNCLElBQUksWUFBWSxFQUFPLENBQUM7UUFDdEQsZUFBVSxHQUFvQixJQUFJLFlBQVksRUFBTyxDQUFD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QUNlLFlBQVk7c0JBQTdDLE1BQU07dUJBQUMsV0FBVztnQkFDZSxhQUFhO3NCQUE5QyxNQUFNO3VCQUFDLFlBQVk7Z0JBQ2MsY0FBYztzQkFBL0MsTUFBTTt1QkFBQyxhQUFhO2dCQUNhLGlCQUFpQjtzQkFBbEQsTUFBTTt1QkFBQyxnQkFBZ0I7Z0JBQ1Usa0JBQWtCO3NCQUFuRCxNQUFNO3VCQUFDLGlCQUFpQjtnQkFDUyxtQkFBbUI7c0JBQXBELE1BQU07dUJBQUMsa0JBQWtCO2dCQUVRLGdCQUFnQjtzQkFBakQsTUFBTTt1QkFBQyxlQUFlO2dCQUNXLGtCQUFrQjtzQkFBbkQsTUFBTTt1QkFBQyxpQkFBaUI7Z0JBQ1Msa0JBQWtCO3NCQUFuRCxNQUFNO3VCQUFDLGlCQUFpQjtnQkFDUyxtQkFBbUI7c0JBQXBELE1BQU07dUJBQUMsa0JBQWtCO2dCQUNRLG1CQUFtQjtzQkFBcEQsTUFBTTt1QkFBQyxrQkFBa0I7Z0JBQ1EscUJBQXFCO3NCQUF0RCxNQUFNO3VCQUFDLG9CQUFvQjtnQkFFTSxRQUFRO3NCQUF6QyxNQUFNO3VCQUFDLE9BQU87Z0JBQ21CLGdCQUFnQjtzQkFBakQsTUFBTTt1QkFBQyxlQUFlO2dCQUNXLHNCQUFzQjtzQkFBdkQsTUFBTTt1QkFBQyxxQkFBcUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgX2R6IGZyb20gJ2Ryb3B6b25lJztcbi8vIEZpeCB1bnRpbCBEcm9wem9uZSB0eXBlcyBhcmUgdXBkYXRlZFxuY29uc3QgRHJvcHpvbmU6IHR5cGVvZiBfZHogPSAoX2R6IGFzIGFueSkuRHJvcHpvbmU7XG5cbmltcG9ydCB7IFBMQVRGT1JNX0lEIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBpc1BsYXRmb3JtQnJvd3NlciB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBOZ1pvbmUsIEluamVjdCwgT3B0aW9uYWwsIEVsZW1lbnRSZWYsIFJlbmRlcmVyMiwgRGlyZWN0aXZlLFxuICBPbkluaXQsIE9uRGVzdHJveSwgRG9DaGVjaywgT25DaGFuZ2VzLCBJbnB1dCwgT3V0cHV0LCBFdmVudEVtaXR0ZXIsXG4gIFNpbXBsZUNoYW5nZXMsIEtleVZhbHVlRGlmZmVyLCBLZXlWYWx1ZURpZmZlcnMgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgRFJPUFpPTkVfQ09ORklHLCBEcm9wem9uZUNvbmZpZywgRHJvcHpvbmVDb25maWdJbnRlcmZhY2UsXG4gIERyb3B6b25lRXZlbnQsIERyb3B6b25lRXZlbnRzIH0gZnJvbSAnLi9kcm9wem9uZS5pbnRlcmZhY2VzJztcblxuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnW2Ryb3B6b25lXScsXG4gIGV4cG9ydEFzOiAnbmd4RHJvcHpvbmUnXG59KVxuZXhwb3J0IGNsYXNzIERyb3B6b25lRGlyZWN0aXZlIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3ksIERvQ2hlY2ssIE9uQ2hhbmdlcyB7XG4gIHByaXZhdGUgaW5zdGFuY2U6IGFueTtcblxuICBwcml2YXRlIGNvbmZpZ0RpZmY6IEtleVZhbHVlRGlmZmVyPHN0cmluZywgYW55PiB8IG51bGwgPSBudWxsO1xuXG4gIEBJbnB1dCgpIGRpc2FibGVkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgQElucHV0KCdkcm9wem9uZScpIGNvbmZpZz86IERyb3B6b25lQ29uZmlnSW50ZXJmYWNlO1xuXG4gIEBPdXRwdXQoJ2luaXQnICAgICAgICAgICAgICAgICAgKSBEWl9JTklUICAgICAgICAgICAgICAgICAgICAgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICBAT3V0cHV0KCdlcnJvcicgICAgICAgICAgICAgICAgICkgRFpfRVJST1IgICAgICAgICAgICAgICAgICAgID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoJ3N1Y2Nlc3MnICAgICAgICAgICAgICAgKSBEWl9TVUNDRVNTICAgICAgICAgICAgICAgICAgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgnc2VuZGluZycgICAgICAgICAgICAgICApIERaX1NFTkRJTkcgICAgICAgICAgICAgICAgICA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCdjYW5jZWxlZCcgICAgICAgICAgICAgICkgRFpfQ0FOQ0VMRUQgICAgICAgICAgICAgICAgID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoJ2NvbXBsZXRlJyAgICAgICAgICAgICAgKSBEWl9DT01QTEVURSAgICAgICAgICAgICAgICAgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgncHJvY2Vzc2luZycgICAgICAgICAgICApIERaX1BST0NFU1NJTkcgICAgICAgICAgICAgICA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gIEBPdXRwdXQoJ2Ryb3AnICAgICAgICAgICAgICAgICAgKSBEWl9EUk9QICAgICAgICAgICAgICAgICAgICAgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgnZHJhZ1N0YXJ0JyAgICAgICAgICAgICApIERaX0RSQUdTVEFSVCAgICAgICAgICAgICAgICA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCdkcmFnRW5kJyAgICAgICAgICAgICAgICkgRFpfRFJBR0VORCAgICAgICAgICAgICAgICAgID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoJ2RyYWdFbnRlcicgICAgICAgICAgICAgKSBEWl9EUkFHRU5URVIgICAgICAgICAgICAgICAgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgnZHJhZ092ZXInICAgICAgICAgICAgICApIERaX0RSQUdPVkVSICAgICAgICAgICAgICAgICA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCdkcmFnTGVhdmUnICAgICAgICAgICAgICkgRFpfRFJBR0xFQVZFICAgICAgICAgICAgICAgID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgQE91dHB1dCgndGh1bWJuYWlsJyAgICAgICAgICAgICApIERaX1RIVU1CTkFJTCAgICAgICAgICAgICAgICA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCdhZGRlZEZpbGUnICAgICAgICAgICAgICkgRFpfQURERURGSUxFICAgICAgICAgICAgICAgID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoJ2FkZGVkRmlsZXMnICAgICAgICAgICAgKSBEWl9BRERFREZJTEVTICAgICAgICAgICAgICAgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgncmVtb3ZlZEZpbGUnICAgICAgICAgICApIERaX1JFTU9WRURGSUxFICAgICAgICAgICAgICA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCd1cGxvYWRQcm9ncmVzcycgICAgICAgICkgRFpfVVBMT0FEUFJPR1JFU1MgICAgICAgICAgID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoJ21heEZpbGVzUmVhY2hlZCcgICAgICAgKSBEWl9NQVhGSUxFU1JFQUNIRUQgICAgICAgICAgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgnbWF4RmlsZXNFeGNlZWRlZCcgICAgICApIERaX01BWEZJTEVTRVhDRUVERUQgICAgICAgICA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gIEBPdXRwdXQoJ2Vycm9yTXVsdGlwbGUnICAgICAgICAgKSBEWl9FUlJPUk1VTFRJUExFICAgICAgICAgICAgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgnc3VjY2Vzc011bHRpcGxlJyAgICAgICApIERaX1NVQ0NFU1NNVUxUSVBMRSAgICAgICAgICA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCdzZW5kaW5nTXVsdGlwbGUnICAgICAgICkgRFpfU0VORElOR01VTFRJUExFICAgICAgICAgID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoJ2NhbmNlbGVkTXVsdGlwbGUnICAgICAgKSBEWl9DQU5DRUxFRE1VTFRJUExFICAgICAgICAgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgnY29tcGxldGVNdWx0aXBsZScgICAgICApIERaX0NPTVBMRVRFTVVMVElQTEUgICAgICAgICA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCdwcm9jZXNzaW5nTXVsdGlwbGUnICAgICkgRFpfUFJPQ0VTU0lOR01VTFRJUExFICAgICAgID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgQE91dHB1dCgncmVzZXQnICAgICAgICAgICAgICAgICApIERaX1JFU0VUICAgICAgICAgICAgICAgICAgICA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCdxdWV1ZUNvbXBsZXRlJyAgICAgICAgICkgRFpfUVVFVUVDT01QTEVURSAgICAgICAgICAgID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoJ3RvdGFsVXBsb2FkUHJvZ3Jlc3MnICAgKSBEWl9UT1RBTFVQTE9BRFBST0dSRVNTICAgICAgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHpvbmU6IE5nWm9uZSwgcHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyLCBwcml2YXRlIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsXG4gICAgcHJpdmF0ZSBkaWZmZXJzOiBLZXlWYWx1ZURpZmZlcnMsIEBJbmplY3QoUExBVEZPUk1fSUQpIHByaXZhdGUgcGxhdGZvcm1JZDogT2JqZWN0LFxuICAgIEBPcHRpb25hbCgpIEBJbmplY3QoRFJPUFpPTkVfQ09ORklHKSBwcml2YXRlIGRlZmF1bHRzOiBEcm9wem9uZUNvbmZpZ0ludGVyZmFjZSkge1xuICAgIGNvbnN0IGR6ID0gRHJvcHpvbmU7XG5cbiAgICBkei5hdXRvRGlzY292ZXIgPSBmYWxzZTtcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIGlmICghaXNQbGF0Zm9ybUJyb3dzZXIodGhpcy5wbGF0Zm9ybUlkKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHBhcmFtcyA9IG5ldyBEcm9wem9uZUNvbmZpZyh0aGlzLmRlZmF1bHRzKTtcblxuICAgIHBhcmFtcy5hc3NpZ24odGhpcy5jb25maWcpOyAvLyBDdXN0b20gY29uZmlndXJhdGlvblxuXG4gICAgdGhpcy5yZW5kZXJlci5hZGRDbGFzcyh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCxcbiAgICAgIChwYXJhbXMubWF4RmlsZXMgPT09IDEpID8gJ2R6LXNpbmdsZScgOiAnZHotbXVsdGlwbGUnKTtcblxuICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3ModGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsXG4gICAgICAocGFyYW1zLm1heEZpbGVzID09PSAxKSA/ICdkei1tdWx0aXBsZScgOiAnZHotc2luZ2xlJyk7XG5cbiAgICB0aGlzLnpvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgdGhpcy5pbnN0YW5jZSA9IG5ldyBEcm9wem9uZSh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgcGFyYW1zKTtcbiAgICB9KTtcblxuICAgIGlmICh0aGlzLmRpc2FibGVkKSB7XG4gICAgICB0aGlzLmluc3RhbmNlLmRpc2FibGUoKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5EWl9JTklULm9ic2VydmVycy5sZW5ndGgpIHtcbiAgICAgIHRoaXMuem9uZS5ydW4oKCkgPT4ge1xuICAgICAgICB0aGlzLkRaX0lOSVQuZW1pdCh0aGlzLmluc3RhbmNlKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIEFkZCBhdXRvIHJlc2V0IGhhbmRsaW5nIGZvciBldmVudHNcbiAgICB0aGlzLmluc3RhbmNlLm9uKCdzdWNjZXNzJywgKCkgPT4ge1xuICAgICAgaWYgKHBhcmFtcy5hdXRvUmVzZXQgIT0gbnVsbCkge1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMucmVzZXQoKSwgcGFyYW1zLmF1dG9SZXNldCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB0aGlzLmluc3RhbmNlLm9uKCdlcnJvcicsICgpID0+IHtcbiAgICAgIGlmIChwYXJhbXMuZXJyb3JSZXNldCAhPSBudWxsKSB7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5yZXNldCgpLCBwYXJhbXMuZXJyb3JSZXNldCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB0aGlzLmluc3RhbmNlLm9uKCdjYW5jZWxlZCcsICgpID0+IHtcbiAgICAgIGlmIChwYXJhbXMuY2FuY2VsUmVzZXQgIT0gbnVsbCkge1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMucmVzZXQoKSwgcGFyYW1zLmNhbmNlbFJlc2V0KTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIC8vIEFkZCBuYXRpdmUgRHJvcHpvbmUgZXZlbnQgaGFuZGxpbmdcbiAgICBEcm9wem9uZUV2ZW50cy5mb3JFYWNoKChldmVudE5hbWU6IERyb3B6b25lRXZlbnQpID0+IHtcbiAgICAgIHRoaXMuaW5zdGFuY2Uub24oZXZlbnROYW1lLnRvTG93ZXJDYXNlKCksICguLi5hcmdzOiBhbnlbXSkgPT4ge1xuICAgICAgICBhcmdzID0gKGFyZ3MubGVuZ3RoID09PSAxKSA/IGFyZ3NbMF0gOiBhcmdzO1xuXG4gICAgICAgIGNvbnN0IG91dHB1dCA9IGBEWl8ke2V2ZW50TmFtZS50b1VwcGVyQ2FzZSgpfWA7XG5cbiAgICAgICAgY29uc3QgZW1pdHRlciA9IHRoaXNbb3V0cHV0IGFzIGtleW9mIERyb3B6b25lRGlyZWN0aXZlXSBhcyBFdmVudEVtaXR0ZXI8YW55PjtcblxuICAgICAgICBpZiAoZW1pdHRlci5vYnNlcnZlcnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIHRoaXMuem9uZS5ydW4oKCkgPT4ge1xuICAgICAgICAgICAgZW1pdHRlci5lbWl0KGFyZ3MpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGlmICghdGhpcy5jb25maWdEaWZmKSB7XG4gICAgICB0aGlzLmNvbmZpZ0RpZmYgPSB0aGlzLmRpZmZlcnMuZmluZCh0aGlzLmNvbmZpZyB8fCB7fSkuY3JlYXRlKCk7XG5cbiAgICAgIHRoaXMuY29uZmlnRGlmZi5kaWZmKHRoaXMuY29uZmlnIHx8IHt9KTtcbiAgICB9XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pbnN0YW5jZSkge1xuICAgICAgdGhpcy56b25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgICAgdGhpcy5pbnN0YW5jZS5kZXN0cm95KCk7XG4gICAgICB9KTtcblxuICAgICAgdGhpcy5pbnN0YW5jZSA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgbmdEb0NoZWNrKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5kaXNhYmxlZCAmJiB0aGlzLmNvbmZpZ0RpZmYpIHtcbiAgICAgIGNvbnN0IGNoYW5nZXMgPSB0aGlzLmNvbmZpZ0RpZmYuZGlmZih0aGlzLmNvbmZpZyB8fCB7fSk7XG5cbiAgICAgIGlmIChjaGFuZ2VzICYmIHRoaXMuaW5zdGFuY2UpIHtcbiAgICAgICAgdGhpcy5uZ09uRGVzdHJveSgpO1xuXG4gICAgICAgIHRoaXMubmdPbkluaXQoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaW5zdGFuY2UgJiYgY2hhbmdlc1snZGlzYWJsZWQnXSkge1xuICAgICAgaWYgKGNoYW5nZXNbJ2Rpc2FibGVkJ10uY3VycmVudFZhbHVlICE9PSBjaGFuZ2VzWydkaXNhYmxlZCddLnByZXZpb3VzVmFsdWUpIHtcbiAgICAgICAgaWYgKGNoYW5nZXNbJ2Rpc2FibGVkJ10uY3VycmVudFZhbHVlID09PSBmYWxzZSkge1xuICAgICAgICAgIHRoaXMuem9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmluc3RhbmNlLmVuYWJsZSgpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2UgaWYgKGNoYW5nZXNbJ2Rpc2FibGVkJ10uY3VycmVudFZhbHVlID09PSB0cnVlKSB7XG4gICAgICAgICAgdGhpcy56b25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuaW5zdGFuY2UuZGlzYWJsZSgpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGRyb3B6b25lKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMuaW5zdGFuY2U7XG4gIH1cblxuICBwdWJsaWMgcmVzZXQoY2FuY2VsPzogYm9vbGVhbik6IHZvaWQge1xuICAgIGlmICh0aGlzLmluc3RhbmNlKSB7XG4gICAgICB0aGlzLnpvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgICB0aGlzLmluc3RhbmNlLnJlbW92ZUFsbEZpbGVzKGNhbmNlbCk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
324
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJvcHpvbmUuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvZHJvcHpvbmUtd3JhcHBlci9zcmMvbGliL2Ryb3B6b25lLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxxREFBcUQ7QUFDckQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0saUJBQWlCLENBQUE7QUFDbkQsT0FBTyxFQUFFLFNBQVMsRUFBdUIsWUFBWSxFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUE4QyxRQUFRLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBRSxNQUFNLGVBQWUsQ0FBQTtBQUNuTCxPQUFPLFFBQVEsTUFBTSxVQUFVLENBQUE7QUFDL0IsT0FBTyxFQUFFLGVBQWUsRUFBaUMsY0FBYyxFQUFxQixlQUFlLEVBQUUsbUJBQW1CLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQTs7QUFNdkwsTUFBTSxPQUFPLGlCQUFpQjtJQUsxQixvREFBb0Q7SUFDcEQsSUFBYSxRQUFRLENBQUMsR0FBWTtRQUM5QixHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQTtRQUNYLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQyxTQUFTLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUN4QyxJQUFJLEdBQUc7Z0JBQ0gsSUFBSSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLEVBQUU7b0JBQzdCLElBQUksQ0FBQyxRQUFTLENBQUMsT0FBTyxFQUFFLENBQUE7Z0JBQzVCLENBQUMsQ0FBQyxDQUFBOztnQkFFRixJQUFJLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsRUFBRTtvQkFDN0IsSUFBSSxDQUFDLFFBQVMsQ0FBQyxNQUFNLEVBQUUsQ0FBQTtnQkFDM0IsQ0FBQyxDQUFDLENBQUE7U0FDVDtRQUNELElBQUksQ0FBQyxTQUFTLEdBQUcsR0FBRyxDQUFBO0lBQ3hC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QUFNO3VCQUFDLGtCQUFrQjtnQkFHVyxtQkFBbUI7c0JBQXZELE1BQU07dUJBQUMsa0JBQWtCO2dCQUVVLGtCQUFrQjtzQkFBckQsTUFBTTt1QkFBQyxpQkFBaUI7Z0JBR1MsZ0JBQWdCO3NCQUFqRCxNQUFNO3VCQUFDLGVBQWU7Z0JBU25CLFFBQVE7c0JBRFgsV0FBVzt1QkFBQyxpQkFBaUI7Z0JBTzFCLFVBQVU7c0JBRGIsV0FBVzt1QkFBQyxtQkFBbUIiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBAYW5ndWxhci1lc2xpbnQvbm8tb3V0cHV0LXJlbmFtZSAqL1xuaW1wb3J0IHsgaXNQbGF0Zm9ybUJyb3dzZXIgfSBmcm9tICdAYW5ndWxhci9jb21tb24nXG5pbXBvcnQgeyBEaXJlY3RpdmUsIERvQ2hlY2ssIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlciwgSG9zdEJpbmRpbmcsIEluamVjdCwgSW5wdXQsIEtleVZhbHVlRGlmZmVycywgTmdab25lLCBPbkRlc3Ryb3ksIE9uSW5pdCwgT3B0aW9uYWwsIE91dHB1dCwgUExBVEZPUk1fSUQgfSBmcm9tICdAYW5ndWxhci9jb3JlJ1xuaW1wb3J0IERyb3B6b25lIGZyb20gJ2Ryb3B6b25lJ1xuaW1wb3J0IHsgX0Ryb3B6b25lQ29uZmlnLCBEcm9wem9uZUNvbmZpZywgRHJvcHpvbmVFdmVudCwgRHJvcHpvbmVFdmVudHMsIERyb3B6b25lTGlzdGVuZXJzLCBpbnRlcm5hbENoYW5nZXMsIE5YVF9EUk9QWk9ORV9DT05GSUcsIE5YVF9EUk9QWk9ORV9MSVNURU5FUlMgfSBmcm9tICcuL2Ryb3B6b25lLmludGVyZmFjZXMnXG5cbkBEaXJlY3RpdmUoe1xuICAgIHNlbGVjdG9yOiAnW254dERyb3B6b25lXScsXG4gICAgZXhwb3J0QXM6ICdueHREcm9wem9uZSdcbn0pXG5leHBvcnQgY2xhc3MgRHJvcHpvbmVEaXJlY3RpdmUgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSwgRG9DaGVjaywgRHJvcHpvbmVMaXN0ZW5lcnMge1xuXG4gICAgcHJpdmF0ZSBpbnN0YW5jZT86IERyb3B6b25lXG5cbiAgICBwcml2YXRlIF9kaXNhYmxlZCA9IGZhbHNlXG4gICAgLyoqIERpc2FibGVzIC8gZGV0YWNoZXMgRHJvcHpvbmUgZnJvbSB0aGUgZWxlbWVudCAqL1xuICAgIEBJbnB1dCgpIHNldCBkaXNhYmxlZCh2YWw6IGJvb2xlYW4pIHtcbiAgICAgICAgdmFsID0gISF2YWxcbiAgICAgICAgaWYgKHZhbCAhPSB0aGlzLl9kaXNhYmxlZCAmJiB0aGlzLmluc3RhbmNlKSB7XG4gICAgICAgICAgICBpZiAodmFsKVxuICAgICAgICAgICAgICAgIHRoaXMuem9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaW5zdGFuY2UhLmRpc2FibGUoKVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgdGhpcy56b25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbnN0YW5jZSEuZW5hYmxlKClcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2Rpc2FibGVkID0gdmFsXG4gICAgfVxuICAgIGdldCBkaXNhYmxlZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2Rpc2FibGVkXG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfcGFyYW1zID0gbmV3IF9Ecm9wem9uZUNvbmZpZyh0aGlzLmRlZmF1bHRzKVxuICAgIC8qKiBDYW4gYmUgdXNlZCB0byBwcm92aWRlIG9wdGlvbmFsIGN1c3RvbSBjb25maWcgKi9cbiAgICBASW5wdXQoJ254dERyb3B6b25lJykgY29uZmlnPzogRHJvcHpvbmVDb25maWdcblxuICAgIHByaXZhdGUgY29uZmlnRGlmZiA9IHRoaXMuZGlmZmVycy5maW5kKHRoaXMuY29uZmlnIHx8IHt9KS5jcmVhdGUoKVxuICAgIHByaXZhdGUgcGFyYW1EaWZmID0gdGhpcy5kaWZmZXJzLmZpbmQodGhpcy5fcGFyYW1zKS5jcmVhdGUoKVxuXG4gICAgQE91dHB1dCgnaW5pdCcpIHJlYWRvbmx5IERaX0lOSVQgPSB0aGlzLmNvbXBvbmVudD8uRFpfSU5JVFxuICAgICAgICA/PyBuZXcgRXZlbnRFbWl0dGVyPERyb3B6b25lPigpXG5cbiAgICBAT3V0cHV0KCdkcm9wJykgcmVhZG9ubHkgRFpfRFJPUCA9IHRoaXMuY29tcG9uZW50Py5EWl9EUk9QXG4gICAgICAgID8/IG5ldyBFdmVudEVtaXR0ZXI8RHJhZ0V2ZW50PigpXG4gICAgQE91dHB1dCgnZHJhZ1N0YXJ0JykgcmVhZG9ubHkgRFpfRFJBR1NUQVJUID0gdGhpcy5jb21wb25lbnQ/LkRaX0RSQUdTVEFSVFxuICAgICAgICA/PyBuZXcgRXZlbnRFbWl0dGVyPERyYWdFdmVudD4oKVxuICAgIEBPdXRwdXQoJ2RyYWdFbmQnKSByZWFkb25seSBEWl9EUkFHRU5EID0gdGhpcy5jb21wb25lbnQ/LkRaX0RSQUdFTkRcbiAgICAgICAgPz8gbmV3IEV2ZW50RW1pdHRlcjxEcmFnRXZlbnQ+KClcbiAgICBAT3V0cHV0KCdkcmFnRW50ZXInKSByZWFkb25seSBEWl9EUkFHRU5URVIgPSB0aGlzLmNvbXBvbmVudD8uRFpfRFJBR0VOVEVSXG4gICAgICAgID8/IG5ldyBFdmVudEVtaXR0ZXI8RHJhZ0V2ZW50PigpXG4gICAgQE91dHB1dCgnZHJhZ092ZXInKSByZWFkb25seSBEWl9EUkFHT1ZFUiA9IHRoaXMuY29tcG9uZW50Py5EWl9EUkFHT1ZFUlxuICAgICAgICA/PyBuZXcgRXZlbnRFbWl0dGVyPERyYWdFdmVudD4oKVxuICAgIEBPdXRwdXQoJ2RyYWdMZWF2ZScpIHJlYWRvbmx5IERaX0RSQUdMRUFWRSA9IHRoaXMuY29tcG9uZW50Py5EWl9EUkFHTEVBVkVcbiAgICAgICAgPz8gbmV3IEV2ZW50RW1pdHRlcjxEcmFnRXZlbnQ+KClcbiAgICBAT3V0cHV0KCdwYXN0ZScpIHJlYWRvbmx5IERaX1BBU1RFID0gdGhpcy5jb21wb25lbnQ/LkRaX1BBU1RFXG4gICAgICAgID8/IG5ldyBFdmVudEVtaXR0ZXI8RHJhZ0V2ZW50PigpXG5cbiAgICBAT3V0cHV0KCdyZXNldCcpIHJlYWRvbmx5IERaX1JFU0VUID0gdGhpcy5jb21wb25lbnQ/LkRaX1JFU0VUXG4gICAgICAgID8/IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKVxuXG4gICAgQE91dHB1dCgnYWRkZWRGaWxlJykgcmVhZG9ubHkgRFpfQURERURGSUxFID0gdGhpcy5jb21wb25lbnQ/LkRaX0FEREVERklMRVxuICAgICAgICA/PyBuZXcgRXZlbnRFbWl0dGVyPERyb3B6b25lLkRyb3B6b25lRmlsZT4oKVxuICAgIEBPdXRwdXQoJ2FkZGVkRmlsZXMnKSByZWFkb25seSBEWl9BRERFREZJTEVTID0gdGhpcy5jb21wb25lbnQ/LkRaX0FEREVERklMRVNcbiAgICAgICAgPz8gbmV3IEV2ZW50RW1pdHRlcjxEcm9wem9uZS5Ecm9wem9uZUZpbGU+KClcbiAgICBAT3V0cHV0KCdyZW1vdmVkRmlsZScpIHJlYWRvbmx5IERaX1JFTU9WRURGSUxFID0gdGhpcy5jb21wb25lbnQ/LkRaX1JFTU9WRURGSUxFXG4gICAgICAgID8/IG5ldyBFdmVudEVtaXR0ZXI8RHJvcHpvbmUuRHJvcHpvbmVGaWxlPigpXG4gICAgQE91dHB1dCgndGh1bWJuYWlsJykgcmVhZG9ubHkgRFpfVEhVTUJOQUlMID0gdGhpcy5jb21wb25lbnQ/LkRaX1RIVU1CTkFJTFxuICAgICAgICA/PyBuZXcgRXZlbnRFbWl0dGVyPFtEcm9wem9uZS5Ecm9wem9uZUZpbGUsIHN0cmluZ10+KClcblxuICAgIEBPdXRwdXQoJ2Vycm9yJykgcmVhZG9ubHkgRFpfRVJST1IgPSB0aGlzLmNvbXBvbmVudD8uRFpfRVJST1JcbiAgICAgICAgPz8gbmV3IEV2ZW50RW1pdHRlcjxbRHJvcHpvbmUuRHJvcHpvbmVGaWxlLCBzdHJpbmcgfCBFcnJvcl0+KClcbiAgICBAT3V0cHV0KCdlcnJvck11bHRpcGxlJykgcmVhZG9ubHkgRFpfRVJST1JNVUxUSVBMRSA9IHRoaXMuY29tcG9uZW50Py5EWl9FUlJPUk1VTFRJUExFXG4gICAgICAgID8/IG5ldyBFdmVudEVtaXR0ZXI8W0Ryb3B6b25lLkRyb3B6b25lRmlsZVtdLCBzdHJpbmcgfCBFcnJvcl0+KClcblxuICAgIEBPdXRwdXQoJ3Byb2Nlc3NpbmcnKSByZWFkb25seSBEWl9QUk9DRVNTSU5HID0gdGhpcy5jb21wb25lbnQ/LkRaX1BST0NFU1NJTkdcbiAgICAgICAgPz8gbmV3IEV2ZW50RW1pdHRlcjxEcm9wem9uZS5Ecm9wem9uZUZpbGU+KClcbiAgICBAT3V0cHV0KCdwcm9jZXNzaW5nTXVsdGlwbGUnKSByZWFkb25seSBEWl9QUk9DRVNTSU5HTVVMVElQTEUgPSB0aGlzLmNvbXBvbmVudD8uRFpfUFJPQ0VTU0lOR01VTFRJUExFXG4gICAgICAgID8/IG5ldyBFdmVudEVtaXR0ZXI8RHJvcHpvbmUuRHJvcHpvbmVGaWxlW10+KClcblxuICAgIEBPdXRwdXQoJ3VwbG9hZFByb2dyZXNzJykgcmVhZG9ubHkgRFpfVVBMT0FEUFJPR1JFU1MgPSB0aGlzLmNvbXBvbmVudD8uRFpfVVBMT0FEUFJPR1JFU1NcbiAgICAgICAgPz8gbmV3IEV2ZW50RW1pdHRlcjxbRHJvcHpvbmUuRHJvcHpvbmVGaWxlLCBudW1iZXIsIG51bWJlcl0+KClcbiAgICBAT3V0cHV0KCd0b3RhbFVwbG9hZFByb2dyZXNzJykgcmVhZG9ubHkgRFpfVE9UQUxVUExPQURQUk9HUkVTUyA9IHRoaXMuY29tcG9uZW50Py5EWl9UT1RBTFVQTE9BRFBST0dSRVNTXG4gICAgICAgID8/IG5ldyBFdmVudEVtaXR0ZXI8W251bWJlciwgbnVtYmVyLCBudW1iZXJdPigpXG5cbiAgICBAT3V0cHV0KCdzZW5kaW5nJykgcmVhZG9ubHkgRFpfU0VORElORyA9IHRoaXMuY29tcG9uZW50Py5EWl9TRU5ESU5HXG4gICAgICAgID8/IG5ldyBFdmVudEVtaXR0ZXI8W0Ryb3B6b25lLkRyb3B6b25lRmlsZSwgWE1MSHR0cFJlcXVlc3QsIEZvcm1EYXRhXT4oKVxuICAgIEBPdXRwdXQoJ3NlbmRpbmdNdWx0aXBsZScpIHJlYWRvbmx5IERaX1NFTkRJTkdNVUxUSVBMRSA9IHRoaXMuY29tcG9uZW50Py5EWl9TRU5ESU5HTVVMVElQTEVcbiAgICAgICAgPz8gbmV3IEV2ZW50RW1pdHRlcjxbRHJvcHpvbmUuRHJvcHpvbmVGaWxlW10sIFhNTEh0dHBSZXF1ZXN0LCBGb3JtRGF0YV0+KClcblxuICAgIEBPdXRwdXQoJ3N1Y2Nlc3MnKSByZWFkb25seSBEWl9TVUNDRVNTID0gdGhpcy5jb21wb25lbnQ/LkRaX1NVQ0NFU1NcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHlwZXNcbiAgICAgICAgPz8gbmV3IEV2ZW50RW1pdHRlcjxbRHJvcHpvbmUuRHJvcHpvbmVGaWxlLCBPYmplY3QgfCBzdHJpbmddPigpXG4gICAgQE91dHB1dCgnc3VjY2Vzc011bHRpcGxlJykgcmVhZG9ubHkgRFpfU1VDQ0VTU01VTFRJUExFID0gdGhpcy5jb21wb25lbnQ/LkRaX1NVQ0NFU1NNVUxUSVBMRVxuICAgICAgICA/PyBuZXcgRXZlbnRFbWl0dGVyPERyb3B6b25lLkRyb3B6b25lRmlsZVtdPigpXG5cbiAgICBAT3V0cHV0KCdjYW5jZWxlZCcpIHJlYWRvbmx5IERaX0NBTkNFTEVEID0gdGhpcy5jb21wb25lbnQ/LkRaX0NBTkNFTEVEXG4gICAgICAgID8/IG5ldyBFdmVudEVtaXR0ZXI8RHJvcHpvbmUuRHJvcHpvbmVGaWxlPigpXG4gICAgQE91dHB1dCgnY2FuY2VsZWRNdWx0aXBsZScpIHJlYWRvbmx5IERaX0NBTkNFTEVETVVMVElQTEUgPSB0aGlzLmNvbXBvbmVudD8uRFpfQ0FOQ0VMRURNVUxUSVBMRVxuICAgICAgICA/PyBuZXcgRXZlbnRFbWl0dGVyPERyb3B6b25lLkRyb3B6b25lRmlsZVtdPigpXG5cbiAgICBAT3V0cHV0KCdjb21wbGV0ZScpIHJlYWRvbmx5IERaX0NPTVBMRVRFID0gdGhpcy5jb21wb25lbnQ/LkRaX0NPTVBMRVRFXG4gICAgICAgID8/IG5ldyBFdmVudEVtaXR0ZXI8RHJvcHpvbmUuRHJvcHpvbmVGaWxlPigpXG4gICAgQE91dHB1dCgnY29tcGxldGVNdWx0aXBsZScpIHJlYWRvbmx5IERaX0NPTVBMRVRFTVVMVElQTEUgPSB0aGlzLmNvbXBvbmVudD8uRFpfQ09NUExFVEVNVUxUSVBMRVxuICAgICAgICA/PyBuZXcgRXZlbnRFbWl0dGVyPERyb3B6b25lLkRyb3B6b25lRmlsZVtdPigpXG5cbiAgICBAT3V0cHV0KCdtYXhGaWxlc0V4Y2VlZGVkJykgcmVhZG9ubHkgRFpfTUFYRklMRVNFWENFRURFRCA9IHRoaXMuY29tcG9uZW50Py5EWl9NQVhGSUxFU0VYQ0VFREVEXG4gICAgICAgID8/IG5ldyBFdmVudEVtaXR0ZXI8RHJvcHpvbmUuRHJvcHpvbmVGaWxlPigpXG4gICAgQE91dHB1dCgnbWF4RmlsZXNSZWFjaGVkJykgcmVhZG9ubHkgRFpfTUFYRklMRVNSRUFDSEVEID0gdGhpcy5jb21wb25lbnQ/LkRaX01BWEZJTEVTUkVBQ0hFRFxuICAgICAgICA/PyBuZXcgRXZlbnRFbWl0dGVyPERyb3B6b25lLkRyb3B6b25lRmlsZVtdPigpXG5cbiAgICBAT3V0cHV0KCdxdWV1ZUNvbXBsZXRlJykgcmVhZG9ubHkgRFpfUVVFVUVDT01QTEVURSA9IHRoaXMuY29tcG9uZW50Py5EWl9RVUVVRUNPTVBMRVRFXG4gICAgICAgID8/IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKVxuXG4gICAgZ2V0IGRyb3B6b25lKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5pbnN0YW5jZVxuICAgIH1cblxuICAgIC8qKiBAaW50ZXJuYWwgKi9cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmR6LXNpbmdsZScpXG4gICAgZ2V0IGlzU2luZ2xlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcGFyYW1zLm1heEZpbGVzID09PSAxXG4gICAgfVxuXG4gICAgLyoqIEBpbnRlcm5hbCAqL1xuICAgIEBIb3N0QmluZGluZygnY2xhc3MuZHotbXVsdGlwbGUnKVxuICAgIGdldCBpc011bHRpcGxlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcGFyYW1zLm1heEZpbGVzICE9PSAxXG4gICAgfVxuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgem9uZTogTmdab25lLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IGVsZW1lbnRSZWY6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+LFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IGRpZmZlcnM6IEtleVZhbHVlRGlmZmVycyxcbiAgICAgICAgQEluamVjdChQTEFURk9STV9JRClcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHlwZXNcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBwbGF0Zm9ybUlkOiBPYmplY3QsXG4gICAgICAgIEBPcHRpb25hbCgpXG4gICAgICAgIEBJbmplY3QoTlhUX0RST1BaT05FX0NPTkZJRylcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBkZWZhdWx0cz86IERyb3B6b25lQ29uZmlnLFxuICAgICAgICBAT3B0aW9uYWwoKVxuICAgICAgICBASW5qZWN0KE5YVF9EUk9QWk9ORV9MSVNURU5FUlMpXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgY29tcG9uZW50PzogRHJvcHpvbmVMaXN0ZW5lcnNcbiAgICApIHsgfVxuXG4gICAgLyoqIEBpbnRlcm5hbCAqL1xuICAgIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmluaXRJbnN0YW5jZSgpXG4gICAgfVxuXG4gICAgLyoqIEBpbnRlcm5hbCAqL1xuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmRlc3Ryb3lJbnN0YW5jZSgpXG4gICAgfVxuXG4gICAgLyoqIEBpbnRlcm5hbCAqL1xuICAgIG5nRG9DaGVjaygpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgY2hhbmdlcyA9IHRoaXMuY29uZmlnRGlmZi5kaWZmKHRoaXMuY29uZmlnIHx8IHt9IGFzIGFueSlcblxuICAgICAgICBpZiAoY2hhbmdlcykge1xuICAgICAgICAgICAgY29uc3QgbmV3UGFyYW1zID0gbmV3IF9Ecm9wem9uZUNvbmZpZyh0aGlzLmRlZmF1bHRzKVxuICAgICAgICAgICAgbmV3UGFyYW1zLmFzc2lnbih0aGlzLmNvbmZpZylcbiAgICAgICAgICAgIGNvbnN0IGQgPSB0aGlzLnBhcmFtRGlmZi5kaWZmKG5ld1BhcmFtcyBhcyBhbnkpXG4gICAgICAgICAgICBpZiAoZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3BhcmFtcyA9IG5ld1BhcmFtc1xuICAgICAgICAgICAgICAgIGxldCBoYXNDaGFuZ2VzID0gZmFsc2VcbiAgICAgICAgICAgICAgICBkLmZvckVhY2hJdGVtKHIgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWludGVybmFsQ2hhbmdlcy5oYXMoci5rZXkgYXMgYW55KSAmJiByLmN1cnJlbnRWYWx1ZSAhPT0gci5wcmV2aW91c1ZhbHVlKVxuICAgICAgICAgICAgICAgICAgICAgICAgaGFzQ2hhbmdlcyA9IHRydWVcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIGlmIChoYXNDaGFuZ2VzICYmIHRoaXMuaW5zdGFuY2UpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXN0cm95SW5zdGFuY2UoKVxuICAgICAgICAgICAgICAgICAgICB0aGlzLmluaXRJbnN0YW5jZSgpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBpbnRlcm5hbCAqL1xuICAgIHJlc2V0KGNhbmNlbD86IGJvb2xlYW4pIHtcbiAgICAgICAgaWYgKHRoaXMuaW5zdGFuY2UpIHtcbiAgICAgICAgICAgIHRoaXMuem9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5pbnN0YW5jZSEucmVtb3ZlQWxsRmlsZXMoY2FuY2VsKVxuICAgICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgaW5pdEluc3RhbmNlKCkge1xuICAgICAgICBpZiAoIWlzUGxhdGZvcm1Ccm93c2VyKHRoaXMucGxhdGZvcm1JZCkpIHtcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy56b25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuaW5zdGFuY2UgPSBuZXcgRHJvcHpvbmUodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsIHRoaXMuX3BhcmFtcylcbiAgICAgICAgfSlcblxuICAgICAgICBpZiAodGhpcy5kaXNhYmxlZCkge1xuICAgICAgICAgICAgdGhpcy5pbnN0YW5jZSEuZGlzYWJsZSgpXG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5EWl9JTklULm9ic2VydmVkKSB7XG4gICAgICAgICAgICB0aGlzLnpvbmUucnVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLkRaX0lOSVQuZW1pdCh0aGlzLmluc3RhbmNlKVxuICAgICAgICAgICAgfSlcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEFkZCBhdXRvIHJlc2V0IGhhbmRsaW5nIGZvciBldmVudHNcbiAgICAgICAgdGhpcy5pbnN0YW5jZSEub24oJ3N1Y2Nlc3MnLCAoKSA9PiB7XG4gICAgICAgICAgICBpZiAoKHRoaXMuX3BhcmFtcy5hdXRvUmVzZXQgPz8gLTEpID49IDApIHtcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMucmVzZXQoKSwgdGhpcy5fcGFyYW1zLmF1dG9SZXNldClcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSlcblxuICAgICAgICB0aGlzLmluc3RhbmNlIS5vbignZXJyb3InLCAoKSA9PiB7XG4gICAgICAgICAgICBpZiAoKHRoaXMuX3BhcmFtcy5lcnJvclJlc2V0ID8/IC0xKSA+PSAwKSB7XG4gICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLnJlc2V0KCksIHRoaXMuX3BhcmFtcy5lcnJvclJlc2V0KVxuICAgICAgICAgICAgfVxuICAgICAgICB9KVxuXG4gICAgICAgIHRoaXMuaW5zdGFuY2UhLm9uKCdjYW5jZWxlZCcsICgpID0+IHtcbiAgICAgICAgICAgIGlmICgodGhpcy5fcGFyYW1zLmNhbmNlbFJlc2V0ID8/IC0xKSA+PSAwKSB7XG4gICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLnJlc2V0KCksIHRoaXMuX3BhcmFtcy5jYW5jZWxSZXNldClcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSlcblxuICAgICAgICAvLyBBZGQgbmF0aXZlIERyb3B6b25lIGV2ZW50IGhhbmRsaW5nXG4gICAgICAgIERyb3B6b25lRXZlbnRzLmZvckVhY2goKGV2ZW50TmFtZTogRHJvcHpvbmVFdmVudCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5pbnN0YW5jZSEub24oZXZlbnROYW1lLnRvTG93ZXJDYXNlKCksICguLi5hcmdzOiBhbnlbXSkgPT4ge1xuICAgICAgICAgICAgICAgIGFyZ3MgPSAoYXJncy5sZW5ndGggPT09IDEpID8gYXJnc1swXSA6IGFyZ3NcblxuICAgICAgICAgICAgICAgIGNvbnN0IG91dHB1dCA9IGBEWl8ke2V2ZW50TmFtZS50b1VwcGVyQ2FzZSgpfWBcblxuICAgICAgICAgICAgICAgIGNvbnN0IGVtaXR0ZXIgPSB0aGlzW291dHB1dCBhcyBrZXlvZiBEcm9wem9uZURpcmVjdGl2ZV0gYXMgRXZlbnRFbWl0dGVyPGFueT5cblxuICAgICAgICAgICAgICAgIGlmIChlbWl0dGVyLm9ic2VydmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuem9uZS5ydW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgZW1pdHRlci5lbWl0KGFyZ3MpXG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgfSlcbiAgICB9XG5cbiAgICBwcml2YXRlIGRlc3Ryb3lJbnN0YW5jZSgpIHtcbiAgICAgICAgaWYgKHRoaXMuaW5zdGFuY2UpIHtcbiAgICAgICAgICAgIHRoaXMuem9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5pbnN0YW5jZSEuZGVzdHJveSgpXG4gICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICB0aGlzLmluc3RhbmNlID0gdW5kZWZpbmVkXG4gICAgICAgIH1cbiAgICB9XG59XG4iXX0=