@nstudio/ui-collectionview 5.1.9-alpha.5 → 5.1.10

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,525 +0,0 @@
1
- import { ChangeDetectionStrategy, Component, ContentChild, Directive, ElementRef, EventEmitter, Host, HostListener, Inject, Input, IterableDiffers, NgZone, Output, TemplateRef, ViewChild, ViewContainerRef } from '@angular/core';
2
- import { CLog, CLogTypes, CollectionView, ViewTemplateType } from '@nstudio/ui-collectionview';
3
- import { DetachedLoader, NativeScriptRendererFactory, extractSingleViewRecursive, isListLikeIterable, registerElement } from '@nativescript/angular';
4
- import { LayoutBase, ObservableArray, Trace } from '@nativescript/core';
5
- import * as i0 from "@angular/core";
6
- import * as i1 from "@nativescript/angular";
7
- registerElement('CollectionView', () => CollectionView);
8
- const NG_VIEW = '_ngViewRef';
9
- export class ItemContext {
10
- $implicit;
11
- item;
12
- index;
13
- even;
14
- odd;
15
- constructor($implicit, item, index, even, odd) {
16
- this.$implicit = $implicit;
17
- this.item = item;
18
- this.index = index;
19
- this.even = even;
20
- this.odd = odd;
21
- }
22
- }
23
- export class CollectionViewComponent {
24
- _elementRef;
25
- _iterableDiffers;
26
- _renderer;
27
- _ngZone;
28
- get nativeElement() {
29
- return this._collectionView;
30
- }
31
- get listView() {
32
- return this._collectionView;
33
- }
34
- loader;
35
- setupItemView = new EventEmitter();
36
- itemTemplateQuery;
37
- autoReuseViews = false;
38
- detachedLoaderFactory() {
39
- const ref = this.loader.createComponent(DetachedLoader, {
40
- index: 0,
41
- });
42
- this.loader.detach(0);
43
- this._loaders.push(ref);
44
- return ref;
45
- }
46
- get itemTemplate() {
47
- return this._itemTemplate;
48
- }
49
- set itemTemplate(value) {
50
- this._itemTemplate = value;
51
- // this._collectionView.refresh();
52
- }
53
- get headerItemTemplate() {
54
- return this._headerTemplate;
55
- }
56
- set headerItemTemplate(value) {
57
- this._headerTemplate = value;
58
- }
59
- get footerItemTemplate() {
60
- return this._footerTemplate;
61
- }
62
- set footerItemTemplate(value) {
63
- this._footerTemplate = value;
64
- }
65
- get items() {
66
- return this._items;
67
- }
68
- set items(value) {
69
- this._items = value;
70
- let needDiffer = true;
71
- if (value instanceof ObservableArray) {
72
- needDiffer = false;
73
- }
74
- if (needDiffer && !this._differ && isListLikeIterable(value)) {
75
- this._differ = this._iterableDiffers.find(this._items).create((_index, item) => item);
76
- }
77
- this._collectionView.items = this._items;
78
- }
79
- _collectionView;
80
- _items;
81
- _differ;
82
- _itemTemplate;
83
- _templateMap;
84
- _headerTemplate;
85
- _headerTemplateMap;
86
- _footerTemplate;
87
- _footerTemplateMap;
88
- _loaders;
89
- constructor(_elementRef, _iterableDiffers, _renderer, _ngZone) {
90
- this._elementRef = _elementRef;
91
- this._iterableDiffers = _iterableDiffers;
92
- this._renderer = _renderer;
93
- this._ngZone = _ngZone;
94
- this._collectionView = _elementRef.nativeElement;
95
- this._collectionView.on(CollectionView.itemLoadingEvent, this.onItemLoading, this);
96
- this._collectionView.itemViewLoader = this.itemViewLoader;
97
- this._loaders = [];
98
- }
99
- itemViewLoader = (viewType) => {
100
- this._ngZone.run(() => {
101
- switch (viewType) {
102
- case ViewTemplateType.Item:
103
- if (this._itemTemplate) {
104
- return this.getOrCreate(this._itemTemplate);
105
- }
106
- break;
107
- case ViewTemplateType.Header:
108
- if (this._headerTemplate) {
109
- return this.getOrCreate(this._headerTemplate);
110
- }
111
- break;
112
- case ViewTemplateType.Footer:
113
- if (this._footerTemplate) {
114
- return this.getOrCreate(this._footerTemplate);
115
- }
116
- break;
117
- }
118
- return null;
119
- });
120
- };
121
- ngAfterContentInit() {
122
- if (Trace.isEnabled()) {
123
- CLog(CLogTypes.info, 'CollectionView.ngAfterContentInit()');
124
- }
125
- this.setItemTemplates();
126
- }
127
- ngOnDestroy() {
128
- this._collectionView.off(CollectionView.itemLoadingEvent, this.onItemLoading, this);
129
- this._collectionView = null;
130
- this._loaders.forEach((l) => l.destroy());
131
- this._loaders = null;
132
- this.viewToLoader = null;
133
- this.viewToTemplate = null;
134
- this.viewPool = null;
135
- this._items = null;
136
- this._differ = null;
137
- this._itemTemplate = null;
138
- if (this._templateMap) {
139
- this._templateMap.clear();
140
- }
141
- if (this._headerTemplateMap) {
142
- this._headerTemplateMap.clear();
143
- }
144
- if (this._footerTemplateMap) {
145
- this._footerTemplateMap.clear();
146
- }
147
- this._templateMap = null;
148
- this._headerTemplateMap = null;
149
- this._footerTemplateMap = null;
150
- }
151
- ngDoCheck() {
152
- if (Trace.isEnabled()) {
153
- CLog(CLogTypes.info, 'ngDoCheck() - execute differ? ' + this._differ);
154
- }
155
- if (this._differ) {
156
- if (Trace.isEnabled()) {
157
- CLog(CLogTypes.info, 'ngDoCheck() - execute differ');
158
- }
159
- const changes = this._differ.diff(this._items);
160
- if (changes) {
161
- if (Trace.isEnabled()) {
162
- CLog(CLogTypes.info, 'ngDoCheck() - refresh');
163
- }
164
- this.refresh();
165
- }
166
- }
167
- }
168
- registerTemplate(key, template) {
169
- if (Trace.isEnabled()) {
170
- CLog(CLogTypes.info, 'registerTemplate for key: ' + key);
171
- }
172
- if (!this._templateMap) {
173
- this._templateMap = new Map();
174
- }
175
- const keyedTemplate = {
176
- key,
177
- createView: this.getItemTemplateViewFactory(template),
178
- };
179
- this._templateMap.set(key, keyedTemplate);
180
- }
181
- registerTemplateSupplemental(key, template, type) {
182
- if (Trace.isEnabled()) {
183
- CLog(CLogTypes.info, 'registerTemplate for key: ' + key);
184
- }
185
- switch (type) {
186
- case 'header':
187
- // if (!this._headerTemplateMap) {
188
- // this._headerTemplateMap = new Map<string, KeyedTemplate>();
189
- // }
190
- // this._headerTemplateMap.set(key, keyedTemplate);
191
- this._collectionView.headerKey = key;
192
- this.headerItemTemplate = template;
193
- this._collectionView.headerItemTemplate = this.getItemTemplateViewFactory(template);
194
- break;
195
- case 'footer':
196
- // if (!this._footerTemplateMap) {
197
- // this._footerTemplateMap = new Map<string, KeyedTemplate>();
198
- // }
199
- // this._footerTemplateMap.set(key, keyedTemplate);
200
- this._collectionView.footerKey = key;
201
- this.footerItemTemplate = template;
202
- this._collectionView.footerItemTemplate = this.getItemTemplateViewFactory(template);
203
- break;
204
- }
205
- }
206
- onItemLoading(args) {
207
- if (!args.view && !this.itemTemplate) {
208
- return;
209
- }
210
- if (!this.items)
211
- return;
212
- const index = args.index;
213
- const items = args.object.items;
214
- const currentItem = typeof items.getItem === 'function' ? items.getItem(index) : items[index];
215
- let viewRef;
216
- if (Trace.isEnabled()) {
217
- CLog(CLogTypes.info, `onItemLoading: ${index} - Reusing existing view`);
218
- }
219
- viewRef = this.getNgView(args.view);
220
- if (!viewRef && Trace.isEnabled()) {
221
- if (Trace.isEnabled()) {
222
- CLog(CLogTypes.info, `ViewReference not found for item ${index}. View recycling is not working`);
223
- }
224
- }
225
- if (!viewRef) {
226
- if (Trace.isEnabled()) {
227
- CLog(CLogTypes.info, `onItemLoading: ${index} - Creating view from template`);
228
- }
229
- viewRef = this.getOrCreate(this.itemTemplate);
230
- }
231
- this.setupViewRef(viewRef, currentItem, index);
232
- this.detectChangesOnChild(viewRef, index);
233
- }
234
- onItemRecyclingInternal(args) {
235
- if (!args.view) {
236
- return;
237
- }
238
- const ngView = this.getNgView(args.view);
239
- // console.log('recycling', args.view);
240
- if (ngView) {
241
- ngView.detach();
242
- }
243
- }
244
- onItemDisplayInternal(args) {
245
- if (!args.view) {
246
- return;
247
- }
248
- const ngView = this.getNgView(args.view);
249
- if (ngView) {
250
- ngView.reattach();
251
- }
252
- }
253
- onItemDisposingInternal(args) {
254
- if (!args.view) {
255
- return;
256
- }
257
- const ngView = this.getNgView(args.view);
258
- if (ngView) {
259
- ngView.detach();
260
- this.storeViewRef(ngView);
261
- }
262
- }
263
- getNgView(view) {
264
- const ngView = view[NG_VIEW];
265
- // Getting angular view from original element (in cases when ProxyViewContainer
266
- // is used NativeScript internally wraps it in a StackLayout)
267
- if (!ngView && view instanceof LayoutBase && view.getChildrenCount() > 0) {
268
- return view.getChildAt(0)[NG_VIEW];
269
- }
270
- return ngView;
271
- }
272
- setupViewRef(view, data, index) {
273
- const context = view.context;
274
- context.$implicit = data;
275
- context.item = data;
276
- context.index = index;
277
- context.even = index % 2 === 0;
278
- context.odd = !context.even;
279
- this.setupItemView.next({
280
- context,
281
- data,
282
- index,
283
- view,
284
- });
285
- }
286
- getItemTemplateViewFactory(template) {
287
- return () => {
288
- return this.getOrCreate(template);
289
- };
290
- }
291
- viewPool = new Map();
292
- storeViewRef(viewRef) {
293
- const templateRef = this.viewToTemplate.get(viewRef);
294
- if (templateRef) {
295
- const scrap = this.viewPool.get(templateRef);
296
- if (scrap) {
297
- if (scrap.scrapHead.size >= scrap.scrapSize) {
298
- viewRef.destroy();
299
- this.viewToLoader.get(viewRef)?.destroy();
300
- }
301
- else {
302
- scrap.scrapHead.add(viewRef);
303
- }
304
- }
305
- }
306
- }
307
- viewToTemplate = new WeakMap();
308
- viewToLoader = new WeakMap();
309
- getOrCreate(templateRef) {
310
- return this._ngZone.run(() => {
311
- let viewRef = this.getView(templateRef);
312
- if (!viewRef) {
313
- const loader = this.detachedLoaderFactory();
314
- viewRef = loader.instance.vc.createEmbeddedView(templateRef, new ItemContext(), 0);
315
- this.viewToLoader.set(viewRef, loader);
316
- this.viewToTemplate.set(viewRef, templateRef);
317
- }
318
- viewRef.detach();
319
- const resultView = getItemViewRoot(viewRef);
320
- resultView[NG_VIEW] = viewRef;
321
- resultView.reusable = this.autoReuseViews;
322
- return resultView;
323
- });
324
- }
325
- getView(templateRef) {
326
- const pool = this.getViewPool(templateRef);
327
- while (pool.scrapHead.size > 0) {
328
- const viewRef = pool.scrapHead.values().next().value;
329
- pool.scrapHead.delete(viewRef);
330
- if (!viewRef.destroyed) {
331
- return viewRef;
332
- }
333
- }
334
- return null;
335
- }
336
- getViewPool(templateRef) {
337
- if (!this.viewPool.has(templateRef)) {
338
- this.viewPool.set(templateRef, {
339
- scrapSize: this.autoReuseViews ? Infinity : 0,
340
- scrapHead: new Set(),
341
- });
342
- }
343
- return this.viewPool.get(templateRef);
344
- }
345
- setItemTemplates() {
346
- // The itemTemplateQuery may be changed after list items are added that contain <template> inside,
347
- // so cache and use only the original template to avoid errors.
348
- this.itemTemplate = this.itemTemplateQuery;
349
- if (this._templateMap) {
350
- if (Trace.isEnabled()) {
351
- CLog(CLogTypes.info, 'Setting templates');
352
- }
353
- const templates = [];
354
- this._templateMap.forEach((value) => {
355
- templates.push(value);
356
- });
357
- this._collectionView.itemTemplates = templates;
358
- }
359
- else {
360
- // If the map was not initialized this means that there are no named templates, so we register the default one.
361
- this._collectionView.itemTemplate = this.getItemTemplateViewFactory(this.itemTemplate);
362
- }
363
- }
364
- detectChangesOnChild(viewRef, index) {
365
- if (Trace.isEnabled()) {
366
- CLog(CLogTypes.info, 'Manually detect changes in child: ' + index);
367
- }
368
- viewRef.markForCheck();
369
- viewRef.detectChanges();
370
- }
371
- refresh() {
372
- if (this._collectionView) {
373
- this._collectionView.refresh();
374
- }
375
- }
376
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.9", ngImport: i0, type: CollectionViewComponent, deps: [{ token: ElementRef }, { token: IterableDiffers }, { token: NativeScriptRendererFactory }, { token: NgZone }], target: i0.ɵɵFactoryTarget.Component });
377
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.9", type: CollectionViewComponent, selector: "CollectionView", inputs: { autoReuseViews: "autoReuseViews", itemTemplate: "itemTemplate", headerItemTemplate: "headerItemTemplate", footerItemTemplate: "footerItemTemplate", items: "items" }, outputs: { setupItemView: "setupItemView" }, host: { listeners: { "itemLoading": "onItemLoading($event)", "itemRecycling": "onItemRecyclingInternal($event)", "displayItem": "onItemDisplayInternal($event)", "itemDisposing": "onItemDisposingInternal($event)" } }, queries: [{ propertyName: "itemTemplateQuery", first: true, predicate: TemplateRef, descendants: true, read: TemplateRef, static: true }], viewQueries: [{ propertyName: "loader", first: true, predicate: ["loader"], descendants: true, read: ViewContainerRef, static: true }], ngImport: i0, template: `
378
- <DetachedContainer>
379
- <Placeholder #loader></Placeholder>
380
- </DetachedContainer>
381
- `, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
382
- }
383
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.9", ngImport: i0, type: CollectionViewComponent, decorators: [{
384
- type: Component,
385
- args: [{
386
- selector: 'CollectionView',
387
- template: `
388
- <DetachedContainer>
389
- <Placeholder #loader></Placeholder>
390
- </DetachedContainer>
391
- `,
392
- changeDetection: ChangeDetectionStrategy.OnPush,
393
- }]
394
- }], ctorParameters: () => [{ type: i0.ElementRef, decorators: [{
395
- type: Inject,
396
- args: [ElementRef]
397
- }] }, { type: i0.IterableDiffers, decorators: [{
398
- type: Inject,
399
- args: [IterableDiffers]
400
- }] }, { type: i1.NativeScriptRendererFactory, decorators: [{
401
- type: Inject,
402
- args: [NativeScriptRendererFactory]
403
- }] }, { type: i0.NgZone, decorators: [{
404
- type: Inject,
405
- args: [NgZone]
406
- }] }], propDecorators: { loader: [{
407
- type: ViewChild,
408
- args: ['loader', { read: ViewContainerRef, static: true }]
409
- }], setupItemView: [{
410
- type: Output
411
- }], itemTemplateQuery: [{
412
- type: ContentChild,
413
- args: [TemplateRef, { read: TemplateRef, static: true }]
414
- }], autoReuseViews: [{
415
- type: Input
416
- }], itemTemplate: [{
417
- type: Input
418
- }], headerItemTemplate: [{
419
- type: Input
420
- }], footerItemTemplate: [{
421
- type: Input
422
- }], items: [{
423
- type: Input
424
- }], onItemLoading: [{
425
- type: HostListener,
426
- args: ['itemLoading', ['$event']]
427
- }], onItemRecyclingInternal: [{
428
- type: HostListener,
429
- args: ['itemRecycling', ['$event']]
430
- }], onItemDisplayInternal: [{
431
- type: HostListener,
432
- args: ['displayItem', ['$event']]
433
- }], onItemDisposingInternal: [{
434
- type: HostListener,
435
- args: ['itemDisposing', ['$event']]
436
- }] } });
437
- export function getItemViewRoot(viewRef, rootLocator = extractSingleViewRecursive) {
438
- const rootView = rootLocator(viewRef.rootNodes, 0);
439
- return rootView;
440
- }
441
- export class TemplateKeyDirective {
442
- templateRef;
443
- collectionView;
444
- constructor(templateRef, collectionView) {
445
- this.templateRef = templateRef;
446
- this.collectionView = collectionView;
447
- }
448
- set cvTemplateKey(value) {
449
- if (Trace.isEnabled()) {
450
- CLog(CLogTypes.info, 'cvTemplateKey: ' + value);
451
- }
452
- if (this.collectionView && this.templateRef) {
453
- this.collectionView.registerTemplate(value.toLowerCase(), this.templateRef);
454
- }
455
- }
456
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.9", ngImport: i0, type: TemplateKeyDirective, deps: [{ token: i0.TemplateRef }, { token: CollectionViewComponent, host: true }], target: i0.ɵɵFactoryTarget.Directive });
457
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.3.9", type: TemplateKeyDirective, selector: "[cvTemplateKey]", inputs: { cvTemplateKey: "cvTemplateKey" }, ngImport: i0 });
458
- }
459
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.9", ngImport: i0, type: TemplateKeyDirective, decorators: [{
460
- type: Directive,
461
- args: [{ selector: '[cvTemplateKey]' }]
462
- }], ctorParameters: () => [{ type: i0.TemplateRef }, { type: CollectionViewComponent, decorators: [{
463
- type: Host
464
- }] }], propDecorators: { cvTemplateKey: [{
465
- type: Input
466
- }] } });
467
- export class TemplateHeaderDirective {
468
- templateRef;
469
- collectionView;
470
- constructor(templateRef, collectionView) {
471
- this.templateRef = templateRef;
472
- this.collectionView = collectionView;
473
- }
474
- set cvTemplateHeader(value) {
475
- if (Trace.isEnabled()) {
476
- CLog(CLogTypes.info, 'cvTemplateHeader: ' + value);
477
- }
478
- if (this.collectionView && this.templateRef) {
479
- // TODO: allow keying of multiple headers per section
480
- this.collectionView.registerTemplateSupplemental(value || ViewTemplateType.Header, this.templateRef, 'header');
481
- }
482
- }
483
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.9", ngImport: i0, type: TemplateHeaderDirective, deps: [{ token: i0.TemplateRef }, { token: CollectionViewComponent, host: true }], target: i0.ɵɵFactoryTarget.Directive });
484
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.3.9", type: TemplateHeaderDirective, selector: "[cvTemplateHeader]", inputs: { cvTemplateHeader: "cvTemplateHeader" }, ngImport: i0 });
485
- }
486
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.9", ngImport: i0, type: TemplateHeaderDirective, decorators: [{
487
- type: Directive,
488
- args: [{
489
- selector: '[cvTemplateHeader]',
490
- }]
491
- }], ctorParameters: () => [{ type: i0.TemplateRef }, { type: CollectionViewComponent, decorators: [{
492
- type: Host
493
- }] }], propDecorators: { cvTemplateHeader: [{
494
- type: Input
495
- }] } });
496
- export class TemplateFooterDirective {
497
- templateRef;
498
- collectionView;
499
- constructor(templateRef, collectionView) {
500
- this.templateRef = templateRef;
501
- this.collectionView = collectionView;
502
- }
503
- set cvTemplateFooter(value) {
504
- if (Trace.isEnabled()) {
505
- CLog(CLogTypes.info, 'cvTemplateFooter: ' + value);
506
- }
507
- if (this.collectionView && this.templateRef) {
508
- // TODO: allow keying of multiple footers per section
509
- this.collectionView.registerTemplateSupplemental(value || ViewTemplateType.Footer, this.templateRef, 'footer');
510
- }
511
- }
512
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.9", ngImport: i0, type: TemplateFooterDirective, deps: [{ token: i0.TemplateRef }, { token: CollectionViewComponent, host: true }], target: i0.ɵɵFactoryTarget.Directive });
513
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.3.9", type: TemplateFooterDirective, selector: "[cvTemplateFooter]", inputs: { cvTemplateFooter: "cvTemplateFooter" }, ngImport: i0 });
514
- }
515
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.9", ngImport: i0, type: TemplateFooterDirective, decorators: [{
516
- type: Directive,
517
- args: [{
518
- selector: '[cvTemplateFooter]',
519
- }]
520
- }], ctorParameters: () => [{ type: i0.TemplateRef }, { type: CollectionViewComponent, decorators: [{
521
- type: Host
522
- }] }], propDecorators: { cvTemplateFooter: [{
523
- type: Input
524
- }] } });
525
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sbGVjdGlvbnZpZXcuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvdWktY29sbGVjdGlvbnZpZXcvYW5ndWxhci9jb2xsZWN0aW9udmlldy5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFvQix1QkFBdUIsRUFBRSxTQUFTLEVBQWdCLFlBQVksRUFBRSxTQUFTLEVBQVcsVUFBVSxFQUFtQixZQUFZLEVBQUUsSUFBSSxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFrQixlQUFlLEVBQUUsTUFBTSxFQUFhLE1BQU0sRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pULE9BQU8sRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLGNBQWMsRUFBK0IsZ0JBQWdCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUM1SCxPQUFPLEVBQUUsY0FBYyxFQUFFLDJCQUEyQixFQUFFLDBCQUEwQixFQUFFLGtCQUFrQixFQUFFLGVBQWUsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3JKLE9BQU8sRUFBaUIsVUFBVSxFQUFFLGVBQWUsRUFBRSxLQUFLLEVBQVEsTUFBTSxvQkFBb0IsQ0FBQzs7O0FBRTdGLGVBQWUsQ0FBQyxnQkFBZ0IsRUFBRSxHQUFHLEVBQUUsQ0FBQyxjQUFjLENBQUMsQ0FBQztBQUV4RCxNQUFNLE9BQU8sR0FBRyxZQUFZLENBQUM7QUFFN0IsTUFBTSxPQUFPLFdBQVc7SUFDSDtJQUF3QjtJQUFtQjtJQUF1QjtJQUF1QjtJQUE1RyxZQUFtQixTQUFlLEVBQVMsSUFBVSxFQUFTLEtBQWMsRUFBUyxJQUFjLEVBQVMsR0FBYTtRQUF0RyxjQUFTLEdBQVQsU0FBUyxDQUFNO1FBQVMsU0FBSSxHQUFKLElBQUksQ0FBTTtRQUFTLFVBQUssR0FBTCxLQUFLLENBQVM7UUFBUyxTQUFJLEdBQUosSUFB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LHVCQUF1Qjs7MkZBQXZCLHVCQUF1QjtrQkFIbkMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsb0JBQW9CO2lCQUMvQjs7MEJBRXFELElBQUk7eUNBR3BELGdCQUFnQjtzQkFEbkIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFmdGVyQ29udGVudEluaXQsIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIENvbXBvbmVudFJlZiwgQ29udGVudENoaWxkLCBEaXJlY3RpdmUsIERvQ2hlY2ssIEVsZW1lbnRSZWYsIEVtYmVkZGVkVmlld1JlZiwgRXZlbnRFbWl0dGVyLCBIb3N0LCBIb3N0TGlzdGVuZXIsIEluamVjdCwgSW5wdXQsIEl0ZXJhYmxlRGlmZmVyLCBJdGVyYWJsZURpZmZlcnMsIE5nWm9uZSwgT25EZXN0cm95LCBPdXRwdXQsIFRlbXBsYXRlUmVmLCBWaWV3Q2hpbGQsIFZpZXdDb250YWluZXJSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENMb2csIENMb2dUeXBlcywgQ29sbGVjdGlvblZpZXcsIENvbGxlY3Rpb25WaWV3SXRlbUV2ZW50RGF0YSwgVmlld1RlbXBsYXRlVHlwZSB9IGZyb20gJ0Buc3R1ZGlvL3VpLWNvbGxlY3Rpb252aWV3JztcbmltcG9ydCB7IERldGFjaGVkTG9hZGVyLCBOYXRpdmVTY3JpcHRSZW5kZXJlckZhY3RvcnksIGV4dHJhY3RTaW5nbGVWaWV3UmVjdXJzaXZlLCBpc0xpc3RMaWtlSXRlcmFibGUsIHJlZ2lzdGVyRWxlbWVudCB9IGZyb20gJ0BuYXRpdmVzY3JpcHQvYW5ndWxhcic7XG5pbXBvcnQgeyBLZXllZFRlbXBsYXRlLCBMYXlvdXRCYXNlLCBPYnNlcnZhYmxlQXJyYXksIFRyYWNlLCBWaWV3IH0gZnJvbSAnQG5hdGl2ZXNjcmlwdC9jb3JlJztcblxucmVnaXN0ZXJFbGVtZW50KCdDb2xsZWN0aW9uVmlldycsICgpID0+IENvbGxlY3Rpb25WaWV3KTtcblxuY29uc3QgTkdfVklFVyA9ICdfbmdWaWV3UmVmJztcblxuZXhwb3J0IGNsYXNzIEl0ZW1Db250ZXh0IHtcbiAgY29uc3RydWN0b3IocHVibGljICRpbXBsaWNpdD86IGFueSwgcHVibGljIGl0ZW0/OiBhbnksIHB1YmxpYyBpbmRleD86IG51bWJlciwgcHVibGljIGV2ZW4/OiBib29sZWFuLCBwdWJsaWMgb2RkPzogYm9vbGVhbikge31cbn1cblxuZXhwb3J0IGludGVyZmFjZSBTZXR1cEl0ZW1WaWV3QXJncyB7XG4gIHZpZXc6IEVtYmVkZGVkVmlld1JlZjxhbnk+O1xuICBkYXRhOiBhbnk7XG4gIGluZGV4OiBudW1iZXI7XG4gIGNvbnRleHQ6IEl0ZW1Db250ZXh0O1xufVxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdDb2xsZWN0aW9uVmlldycsXG4gIHRlbXBsYXRlOiBgXG4gICAgPERldGFjaGVkQ29udGFpbmVyPlxuICAgICAgPFBsYWNlaG9sZGVyICNsb2FkZXI+PC9QbGFjZWhvbGRlcj5cbiAgICA8L0RldGFjaGVkQ29udGFpbmVyPlxuICBgLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgQ29sbGVjdGlvblZpZXdDb21wb25lbnQgaW1wbGVtZW50cyBEb0NoZWNrLCBPbkRlc3Ryb3ksIEFmdGVyQ29udGVudEluaXQge1xuICBwdWJsaWMgZ2V0IG5hdGl2ZUVsZW1lbnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2NvbGxlY3Rpb25WaWV3O1xuICB9XG4gIHB1YmxpYyBnZXQgbGlzdFZpZXcoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2NvbGxlY3Rpb25WaWV3O1xuICB9XG5cbiAgQFZpZXdDaGlsZCgnbG9hZGVyJywgeyByZWFkOiBWaWV3Q29udGFpbmVyUmVmLCBzdGF0aWM6IHRydWUgfSkgcHVibGljIGxvYWRlcjogVmlld0NvbnRhaW5lclJlZjtcbiAgQE91dHB1dCgpIHB1YmxpYyBzZXR1cEl0ZW1WaWV3ID0gbmV3IEV2ZW50RW1pdHRlcjxTZXR1cEl0ZW1WaWV3QXJncz4oKTtcbiAgQENvbnRlbnRDaGlsZChUZW1wbGF0ZVJlZiwgeyByZWFkOiBUZW1wbGF0ZVJlZiwgc3RhdGljOiB0cnVlIH0pIHB1YmxpYyBpdGVtVGVtcGxhdGVRdWVyeTogVGVtcGxhdGVSZWY8SXRlbUNvbnRleHQ+O1xuXG4gIEBJbnB1dCgpIGF1dG9SZXVzZVZpZXdzID0gZmFsc2U7XG5cbiAgZGV0YWNoZWRMb2FkZXJGYWN0b3J5KCkge1xuICAgIGNvbnN0IHJlZiA9IHRoaXMubG9hZGVyLmNyZWF0ZUNvbXBvbmVudChEZXRhY2hlZExvYWRlciwge1xuICAgICAgaW5kZXg6IDAsXG4gICAgfSk7XG4gICAgdGhpcy5sb2FkZXIuZGV0YWNoKDApO1xuICAgIHRoaXMuX2xvYWRlcnMucHVzaChyZWYpO1xuICAgIHJldHVybiByZWY7XG4gIH1cblxuICBASW5wdXQoKVxuICBwdWJsaWMgZ2V0IGl0ZW1UZW1wbGF0ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5faXRlbVRlbXBsYXRlO1xuICB9XG4gIHB1YmxpYyBzZXQgaXRlbVRlbXBsYXRlKHZhbHVlOiBUZW1wbGF0ZVJlZjxJdGVtQ29udGV4dD4pIHtcbiAgICB0aGlzLl9pdGVtVGVtcGxhdGUgPSB2YWx1ZTtcbiAgICAvLyB0aGlzLl9jb2xsZWN0aW9uVmlldy5yZWZyZXNoKCk7XG4gIH1cbiAgQElucHV0KClcbiAgcHVibGljIGdldCBoZWFkZXJJdGVtVGVtcGxhdGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2hlYWRlclRlbXBsYXRlO1xuICB9XG4gIHB1YmxpYyBzZXQgaGVhZGVySXRlbVRlbXBsYXRlKHZhbHVlOiBUZW1wbGF0ZVJlZjxJdGVtQ29udGV4dD4pIHtcbiAgICB0aGlzLl9oZWFkZXJUZW1wbGF0ZSA9IHZhbHVlO1xuICB9XG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBnZXQgZm9vdGVySXRlbVRlbXBsYXRlKCkge1xuICAgIHJldHVybiB0aGlzLl9mb290ZXJUZW1wbGF0ZTtcbiAgfVxuICBwdWJsaWMgc2V0IGZvb3Rlckl0ZW1UZW1wbGF0ZSh2YWx1ZTogVGVtcGxhdGVSZWY8SXRlbUNvbnRleHQ+KSB7XG4gICAgdGhpcy5fZm9vdGVyVGVtcGxhdGUgPSB2YWx1ZTtcbiAgfVxuICBASW5wdXQoKVxuICBwdWJsaWMgZ2V0IGl0ZW1zKCkge1xuICAgIHJldHVybiB0aGlzLl9pdGVtcztcbiAgfVxuICBwdWJsaWMgc2V0IGl0ZW1zKHZhbHVlOiBhbnkpIHtcbiAgICB0aGlzLl9pdGVtcyA9IHZhbHVlO1xuICAgIGxldCBuZWVkRGlmZmVyID0gdHJ1ZTtcbiAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBPYnNlcnZhYmxlQXJyYXkpIHtcbiAgICAgIG5lZWREaWZmZXIgPSBmYWxzZTtcbiAgICB9XG4gICAgaWYgKG5lZWREaWZmZXIgJiYgIXRoaXMuX2RpZmZlciAmJiBpc0xpc3RMaWtlSXRlcmFibGUodmFsdWUpKSB7XG4gICAgICB0aGlzLl9kaWZmZXIgPSB0aGlzLl9pdGVyYWJsZURpZmZlcnMuZmluZCh0aGlzLl9pdGVtcykuY3JlYXRlKChfaW5kZXgsIGl0ZW0pID0+IGl0ZW0pO1xuICAgIH1cblxuICAgIHRoaXMuX2NvbGxlY3Rpb25WaWV3Lml0ZW1zID0gdGhpcy5faXRlbXM7XG4gIH1cblxuICBwcml2YXRlIF9jb2xsZWN0aW9uVmlldzogQ29sbGVjdGlvblZpZXc7XG4gIHByaXZhdGUgX2l0ZW1zOiBhbnk7XG4gIHByaXZhdGUgX2RpZmZlcjogSXRlcmFibGVEaWZmZXI8S2V5ZWRUZW1wbGF0ZT47XG4gIHByaXZhdGUgX2l0ZW1UZW1wbGF0ZTogVGVtcGxhdGVSZWY8SXRlbUNvbnRleHQ+O1xuICBwcml2YXRlIF90ZW1wbGF0ZU1hcDogTWFwPHN0cmluZywgS2V5ZWRUZW1wbGF0ZT47XG4gIHByaXZhdGUgX2hlYWRlclRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxJdGVtQ29udGV4dD47XG4gIHByaXZhdGUgX2hlYWRlclRlbXBsYXRlTWFwOiBNYXA8c3RyaW5nLCBLZXllZFRlbXBsYXRlPjtcbiAgcHJpdmF0ZSBfZm9vdGVyVGVtcGxhdGU6IFRlbXBsYXRlUmVmPEl0ZW1Db250ZXh0PjtcbiAgcHJpdmF0ZSBfZm9vdGVyVGVtcGxhdGVNYXA6IE1hcDxzdHJpbmcsIEtleWVkVGVtcGxhdGU+O1xuICBwcml2YXRlIF9sb2FkZXJzOiBDb21wb25lbnRSZWY8RGV0YWNoZWRMb2FkZXI+W107XG5cbiAgY29uc3RydWN0b3IoQEluamVjdChFbGVtZW50UmVmKSBwcml2YXRlIF9lbGVtZW50UmVmOiBFbGVtZW50UmVmLCBASW5qZWN0KEl0ZXJhYmxlRGlmZmVycykgcHJpdmF0ZSBfaXRlcmFibGVEaWZmZXJzOiBJdGVyYWJsZURpZmZlcnMsIEBJbmplY3QoTmF0aXZlU2NyaXB0UmVuZGVyZXJGYWN0b3J5KSBwcml2YXRlIF9yZW5kZXJlcjogTmF0aXZlU2NyaXB0UmVuZGVyZXJGYWN0b3J5LCBASW5qZWN0KE5nWm9uZSkgcHJpdmF0ZSBfbmdab25lOiBOZ1pvbmUpIHtcbiAgICB0aGlzLl9jb2xsZWN0aW9uVmlldyA9IF9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7XG5cbiAgICB0aGlzLl9jb2xsZWN0aW9uVmlldy5vbihDb2xsZWN0aW9uVmlldy5pdGVtTG9hZGluZ0V2ZW50LCB0aGlzLm9uSXRlbUxvYWRpbmcsIHRoaXMpO1xuICAgIHRoaXMuX2NvbGxlY3Rpb25WaWV3Lml0ZW1WaWV3TG9hZGVyID0gdGhpcy5pdGVtVmlld0xvYWRlcjtcbiAgICB0aGlzLl9sb2FkZXJzID0gW107XG4gIH1cblxuICBwcml2YXRlIGl0ZW1WaWV3TG9hZGVyID0gKHZpZXdUeXBlKSA9PiB7XG4gICAgdGhpcy5fbmdab25lLnJ1bigoKSA9PiB7XG4gICAgICBzd2l0Y2ggKHZpZXdUeXBlKSB7XG4gICAgICAgIGNhc2UgVmlld1RlbXBsYXRlVHlwZS5JdGVtOlxuICAgICAgICAgIGlmICh0aGlzLl9pdGVtVGVtcGxhdGUpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldE9yQ3JlYXRlKHRoaXMuX2l0ZW1UZW1wbGF0ZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFZpZXdUZW1wbGF0ZVR5cGUuSGVhZGVyOlxuICAgICAgICAgIGlmICh0aGlzLl9oZWFkZXJUZW1wbGF0ZSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0T3JDcmVhdGUodGhpcy5faGVhZGVyVGVtcGxhdGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBWaWV3VGVtcGxhdGVUeXBlLkZvb3RlcjpcbiAgICAgICAgICBpZiAodGhpcy5fZm9vdGVyVGVtcGxhdGUpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldE9yQ3JlYXRlKHRoaXMuX2Zvb3RlclRlbXBsYXRlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9KTtcbiAgfTtcblxuICBwdWJsaWMgbmdBZnRlckNvbnRlbnRJbml0KCkge1xuICAgIGlmIChUcmFjZS5pc0VuYWJsZWQoKSkge1xuICAgICAgQ0xvZyhDTG9nVHlwZXMuaW5mbywgJ0NvbGxlY3Rpb25WaWV3Lm5nQWZ0ZXJDb250ZW50SW5pdCgpJyk7XG4gICAgfVxuICAgIHRoaXMuc2V0SXRlbVRlbXBsYXRlcygpO1xuICB9XG5cbiAgcHVibGljIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMuX2NvbGxlY3Rpb25WaWV3Lm9mZihDb2xsZWN0aW9uVmlldy5pdGVtTG9hZGluZ0V2ZW50LCB0aGlzLm9uSXRlbUxvYWRpbmcsIHRoaXMpO1xuICAgIHRoaXMuX2NvbGxlY3Rpb25WaWV3ID0gbnVsbDtcbiAgICB0aGlzLl9sb2FkZXJzLmZvckVhY2goKGwpID0+IGwuZGVzdHJveSgpKTtcbiAgICB0aGlzLl9sb2FkZXJzID0gbnVsbDtcbiAgICB0aGlzLnZpZXdUb0xvYWRlciA9IG51bGw7XG4gICAgdGhpcy52aWV3VG9UZW1wbGF0ZSA9IG51bGw7XG4gICAgdGhpcy52aWV3UG9vbCA9IG51bGw7XG5cbiAgICB0aGlzLl9pdGVtcyA9IG51bGw7XG4gICAgdGhpcy5fZGlmZmVyID0gbnVsbDtcbiAgICB0aGlzLl9pdGVtVGVtcGxhdGUgPSBudWxsO1xuICAgIGlmICh0aGlzLl90ZW1wbGF0ZU1hcCkge1xuICAgICAgdGhpcy5fdGVtcGxhdGVNYXAuY2xlYXIoKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuX2hlYWRlclRlbXBsYXRlTWFwKSB7XG4gICAgICB0aGlzLl9oZWFkZXJUZW1wbGF0ZU1hcC5jbGVhcigpO1xuICAgIH1cbiAgICBpZiAodGhpcy5fZm9vdGVyVGVtcGxhdGVNYXApIHtcbiAgICAgIHRoaXMuX2Zvb3RlclRlbXBsYXRlTWFwLmNsZWFyKCk7XG4gICAgfVxuICAgIHRoaXMuX3RlbXBsYXRlTWFwID0gbnVsbDtcbiAgICB0aGlzLl9oZWFkZXJUZW1wbGF0ZU1hcCA9IG51bGw7XG4gICAgdGhpcy5fZm9vdGVyVGVtcGxhdGVNYXAgPSBudWxsO1xuICB9XG5cbiAgcHVibGljIG5nRG9DaGVjaygpIHtcbiAgICBpZiAoVHJhY2UuaXNFbmFibGVkKCkpIHtcbiAgICAgIENMb2coQ0xvZ1R5cGVzLmluZm8sICduZ0RvQ2hlY2soKSAtIGV4ZWN1dGUgZGlmZmVyPyAnICsgdGhpcy5fZGlmZmVyKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuX2RpZmZlcikge1xuICAgICAgaWYgKFRyYWNlLmlzRW5hYmxlZCgpKSB7XG4gICAgICAgIENMb2coQ0xvZ1R5cGVzLmluZm8sICduZ0RvQ2hlY2soKSAtIGV4ZWN1dGUgZGlmZmVyJyk7XG4gICAgICB9XG4gICAgICBjb25zdCBjaGFuZ2VzID0gdGhpcy5fZGlmZmVyLmRpZmYodGhpcy5faXRlbXMpO1xuICAgICAgaWYgKGNoYW5nZXMpIHtcbiAgICAgICAgaWYgKFRyYWNlLmlzRW5hYmxlZCgpKSB7XG4gICAgICAgICAgQ0xvZyhDTG9nVHlwZXMuaW5mbywgJ25nRG9DaGVjaygpIC0gcmVmcmVzaCcpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucmVmcmVzaCgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyByZWdpc3RlclRlbXBsYXRlKGtleTogc3RyaW5nLCB0ZW1wbGF0ZTogVGVtcGxhdGVSZWY8SXRlbUNvbnRleHQ+KSB7XG4gICAgaWYgKFRyYWNlLmlzRW5hYmxlZCgpKSB7XG4gICAgICBDTG9nKENMb2dUeXBlcy5pbmZvLCAncmVnaXN0ZXJUZW1wbGF0ZSBmb3Iga2V5OiAnICsga2V5KTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLl90ZW1wbGF0ZU1hcCkge1xuICAgICAgdGhpcy5fdGVtcGxhdGVNYXAgPSBuZXcgTWFwPHN0cmluZywgS2V5ZWRUZW1wbGF0ZT4oKTtcbiAgICB9XG5cbiAgICBjb25zdCBrZXllZFRlbXBsYXRlID0ge1xuICAgICAga2V5LFxuICAgICAgY3JlYXRlVmlldzogdGhpcy5nZXRJdGVtVGVtcGxhdGVWaWV3RmFjdG9yeSh0ZW1wbGF0ZSksXG4gICAgfTtcblxuICAgIHRoaXMuX3RlbXBsYXRlTWFwLnNldChrZXksIGtleWVkVGVtcGxhdGUpO1xuICB9XG5cbiAgcHVibGljIHJlZ2lzdGVyVGVtcGxhdGVTdXBwbGVtZW50YWwoa2V5OiBzdHJpbmcsIHRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxJdGVtQ29udGV4dD4sIHR5cGU6ICdoZWFkZXInIHwgJ2Zvb3RlcicpIHtcbiAgICBpZiAoVHJhY2UuaXNFbmFibGVkKCkpIHtcbiAgICAgIENMb2coQ0xvZ1R5cGVzLmluZm8sICdyZWdpc3RlclRlbXBsYXRlIGZvciBrZXk6ICcgKyBrZXkpO1xuICAgIH1cblxuICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgY2FzZSAnaGVhZGVyJzpcbiAgICAgICAgLy8gaWYgKCF0aGlzLl9oZWFkZXJUZW1wbGF0ZU1hcCkge1xuICAgICAgICAvLyAgIHRoaXMuX2hlYWRlclRlbXBsYXRlTWFwID0gbmV3IE1hcDxzdHJpbmcsIEtleWVkVGVtcGxhdGU+KCk7XG4gICAgICAgIC8vIH1cbiAgICAgICAgLy8gdGhpcy5faGVhZGVyVGVtcGxhdGVNYXAuc2V0KGtleSwga2V5ZWRUZW1wbGF0ZSk7XG4gICAgICAgIHRoaXMuX2NvbGxlY3Rpb25WaWV3LmhlYWRlcktleSA9IGtleTtcbiAgICAgICAgdGhpcy5oZWFkZXJJdGVtVGVtcGxhdGUgPSB0ZW1wbGF0ZTtcbiAgICAgICAgdGhpcy5fY29sbGVjdGlvblZpZXcuaGVhZGVySXRlbVRlbXBsYXRlID0gdGhpcy5nZXRJdGVtVGVtcGxhdGVWaWV3RmFjdG9yeSh0ZW1wbGF0ZSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnZm9vdGVyJzpcbiAgICAgICAgLy8gaWYgKCF0aGlzLl9mb290ZXJUZW1wbGF0ZU1hcCkge1xuICAgICAgICAvLyAgIHRoaXMuX2Zvb3RlclRlbXBsYXRlTWFwID0gbmV3IE1hcDxzdHJpbmcsIEtleWVkVGVtcGxhdGU+KCk7XG4gICAgICAgIC8vIH1cblxuICAgICAgICAvLyB0aGlzLl9mb290ZXJUZW1wbGF0ZU1hcC5zZXQoa2V5LCBrZXllZFRlbXBsYXRlKTtcblxuICAgICAgICB0aGlzLl9jb2xsZWN0aW9uVmlldy5mb290ZXJLZXkgPSBrZXk7XG4gICAgICAgIHRoaXMuZm9vdGVySXRlbVRlbXBsYXRlID0gdGVtcGxhdGU7XG4gICAgICAgIHRoaXMuX2NvbGxlY3Rpb25WaWV3LmZvb3Rlckl0ZW1UZW1wbGF0ZSA9IHRoaXMuZ2V0SXRlbVRlbXBsYXRlVmlld0ZhY3RvcnkodGVtcGxhdGUpO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdpdGVtTG9hZGluZycsIFsnJGV2ZW50J10pXG4gIHB1YmxpYyBvbkl0ZW1Mb2FkaW5nKGFyZ3M6IENvbGxlY3Rpb25WaWV3SXRlbUV2ZW50RGF0YSkge1xuICAgIGlmICghYXJncy52aWV3ICYmICF0aGlzLml0ZW1UZW1wbGF0ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoIXRoaXMuaXRlbXMpIHJldHVybjtcbiAgICBjb25zdCBpbmRleCA9IGFyZ3MuaW5kZXg7XG4gICAgY29uc3QgaXRlbXMgPSAoYXJncy5vYmplY3QgYXMgYW55KS5pdGVtcztcbiAgICBjb25zdCBjdXJyZW50SXRlbSA9IHR5cGVvZiBpdGVtcy5nZXRJdGVtID09PSAnZnVuY3Rpb24nID8gaXRlbXMuZ2V0SXRlbShpbmRleCkgOiBpdGVtc1tpbmRleF07XG4gICAgbGV0IHZpZXdSZWY6IEVtYmVkZGVkVmlld1JlZjxJdGVtQ29udGV4dD47XG5cbiAgICBpZiAoVHJhY2UuaXNFbmFibGVkKCkpIHtcbiAgICAgIENMb2coQ0xvZ1R5cGVzLmluZm8sIGBvbkl0ZW1Mb2FkaW5nOiAke2luZGV4fSAtIFJldXNpbmcgZXhpc3Rpbmcgdmlld2ApO1xuICAgIH1cblxuICAgIHZpZXdSZWYgPSB0aGlzLmdldE5nVmlldyhhcmdzLnZpZXcpO1xuXG4gICAgaWYgKCF2aWV3UmVmICYmIFRyYWNlLmlzRW5hYmxlZCgpKSB7XG4gICAgICBpZiAoVHJhY2UuaXNFbmFibGVkKCkpIHtcbiAgICAgICAgQ0xvZyhDTG9nVHlwZXMuaW5mbywgYFZpZXdSZWZlcmVuY2Ugbm90IGZvdW5kIGZvciBpdGVtICR7aW5kZXh9LiBWaWV3IHJlY3ljbGluZyBpcyBub3Qgd29ya2luZ2ApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghdmlld1JlZikge1xuICAgICAgaWYgKFRyYWNlLmlzRW5hYmxlZCgpKSB7XG4gICAgICAgIENMb2coQ0xvZ1R5cGVzLmluZm8sIGBvbkl0ZW1Mb2FkaW5nOiAke2luZGV4fSAtIENyZWF0aW5nIHZpZXcgZnJvbSB0ZW1wbGF0ZWApO1xuICAgICAgfVxuICAgICAgdmlld1JlZiA9IHRoaXMuZ2V0T3JDcmVhdGUodGhpcy5pdGVtVGVtcGxhdGUpIGFzIGFueTtcbiAgICB9XG4gICAgdGhpcy5zZXR1cFZpZXdSZWYodmlld1JlZiwgY3VycmVudEl0ZW0sIGluZGV4KTtcbiAgICB0aGlzLmRldGVjdENoYW5nZXNPbkNoaWxkKHZpZXdSZWYsIGluZGV4KTtcbiAgfVxuICBASG9zdExpc3RlbmVyKCdpdGVtUmVjeWNsaW5nJywgWyckZXZlbnQnXSlcbiAgcHVibGljIG9uSXRlbVJlY3ljbGluZ0ludGVybmFsKGFyZ3M6IGFueSkge1xuICAgIGlmICghYXJncy52aWV3KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IG5nVmlldyA9IHRoaXMuZ2V0TmdWaWV3KGFyZ3Mudmlldyk7XG4gICAgLy8gY29uc29sZS5sb2coJ3JlY3ljbGluZycsIGFyZ3Mudmlldyk7XG5cbiAgICBpZiAobmdWaWV3KSB7XG4gICAgICBuZ1ZpZXcuZGV0YWNoKCk7XG4gICAgfVxuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignZGlzcGxheUl0ZW0nLCBbJyRldmVudCddKVxuICBwdWJsaWMgb25JdGVtRGlzcGxheUludGVybmFsKGFyZ3M6IENvbGxlY3Rpb25WaWV3SXRlbUV2ZW50RGF0YSkge1xuICAgIGlmICghYXJncy52aWV3KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IG5nVmlldyA9IHRoaXMuZ2V0TmdWaWV3KGFyZ3Mudmlldyk7XG5cbiAgICBpZiAobmdWaWV3KSB7XG4gICAgICBuZ1ZpZXcucmVhdHRhY2goKTtcbiAgICB9XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdpdGVtRGlzcG9zaW5nJywgWyckZXZlbnQnXSlcbiAgcHVibGljIG9uSXRlbURpc3Bvc2luZ0ludGVybmFsKGFyZ3M6IGFueSkge1xuICAgIGlmICghYXJncy52aWV3KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IG5nVmlldyA9IHRoaXMuZ2V0TmdWaWV3KGFyZ3Mudmlldyk7XG5cbiAgICBpZiAobmdWaWV3KSB7XG4gICAgICBuZ1ZpZXcuZGV0YWNoKCk7XG4gICAgICB0aGlzLnN0b3JlVmlld1JlZihuZ1ZpZXcpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0TmdWaWV3KHZpZXc6IFZpZXcpOiBFbWJlZGRlZFZpZXdSZWY8dW5rbm93bj4ge1xuICAgIGNvbnN0IG5nVmlldyA9IHZpZXdbTkdfVklFV107XG4gICAgLy8gR2V0dGluZyBhbmd1bGFyIHZpZXcgZnJvbSBvcmlnaW5hbCBlbGVtZW50IChpbiBjYXNlcyB3aGVuIFByb3h5Vmlld0NvbnRhaW5lclxuICAgIC8vIGlzIHVzZWQgTmF0aXZlU2NyaXB0IGludGVybmFsbHkgd3JhcHMgaXQgaW4gYSBTdGFja0xheW91dClcbiAgICBpZiAoIW5nVmlldyAmJiB2aWV3IGluc3RhbmNlb2YgTGF5b3V0QmFzZSAmJiB2aWV3LmdldENoaWxkcmVuQ291bnQoKSA+IDApIHtcbiAgICAgIHJldHVybiB2aWV3LmdldENoaWxkQXQoMClbTkdfVklFV107XG4gICAgfVxuICAgIHJldHVybiBuZ1ZpZXc7XG4gIH1cblxuICBwdWJsaWMgc2V0dXBWaWV3UmVmKHZpZXc6IEVtYmVkZGVkVmlld1JlZjxJdGVtQ29udGV4dD4sIGRhdGE6IGFueSwgaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgIGNvbnN0IGNvbnRleHQgPSB2aWV3LmNvbnRleHQ7XG4gICAgY29udGV4dC4kaW1wbGljaXQgPSBkYXRhO1xuICAgIGNvbnRleHQuaXRlbSA9IGRhdGE7XG4gICAgY29udGV4dC5pbmRleCA9IGluZGV4O1xuICAgIGNvbnRleHQuZXZlbiA9IGluZGV4ICUgMiA9PT0gMDtcbiAgICBjb250ZXh0Lm9kZCA9ICFjb250ZXh0LmV2ZW47XG5cbiAgICB0aGlzLnNldHVwSXRlbVZpZXcubmV4dCh7XG4gICAgICBjb250ZXh0LFxuICAgICAgZGF0YSxcbiAgICAgIGluZGV4LFxuICAgICAgdmlldyxcbiAgICB9KTtcbiAgfVxuXG4gIGdldEl0ZW1UZW1wbGF0ZVZpZXdGYWN0b3J5KHRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxJdGVtQ29udGV4dD4pOiAoKSA9PiBWaWV3IHtcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0T3JDcmVhdGUodGVtcGxhdGUpO1xuICAgIH07XG4gIH1cbiAgdmlld1Bvb2wgPSBuZXcgTWFwPFxuICAgIFRlbXBsYXRlUmVmPEl0ZW1Db250ZXh0PixcbiAgICB7XG4gICAgICBzY3JhcFNpemU6IG51bWJlcjtcbiAgICAgIHNjcmFwSGVhZDogU2V0PEVtYmVkZGVkVmlld1JlZjxJdGVtQ29udGV4dD4+O1xuICAgIH1cbiAgPigpO1xuICBwcml2YXRlIHN0b3JlVmlld1JlZih2aWV3UmVmOiBFbWJlZGRlZFZpZXdSZWY8YW55Pikge1xuICAgIGNvbnN0IHRlbXBsYXRlUmVmID0gdGhpcy52aWV3VG9UZW1wbGF0ZS5nZXQodmlld1JlZik7XG4gICAgaWYgKHRlbXBsYXRlUmVmKSB7XG4gICAgICBjb25zdCBzY3JhcCA9IHRoaXMudmlld1Bvb2wuZ2V0KHRlbXBsYXRlUmVmKTtcbiAgICAgIGlmIChzY3JhcCkge1xuICAgICAgICBpZiAoc2NyYXAuc2NyYXBIZWFkLnNpemUgPj0gc2NyYXAuc2NyYXBTaXplKSB7XG4gICAgICAgICAgdmlld1JlZi5kZXN0cm95KCk7XG4gICAgICAgICAgdGhpcy52aWV3VG9Mb2FkZXIuZ2V0KHZpZXdSZWYpPy5kZXN0cm95KCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc2NyYXAuc2NyYXBIZWFkLmFkZCh2aWV3UmVmKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuICB2aWV3VG9UZW1wbGF0ZSA9IG5ldyBXZWFrTWFwPEVtYmVkZGVkVmlld1JlZjxhbnk+LCBUZW1wbGF0ZVJlZjxhbnk+PigpO1xuICB2aWV3VG9Mb2FkZXIgPSBuZXcgV2Vha01hcDxFbWJlZGRlZFZpZXdSZWY8YW55PiwgQ29tcG9uZW50UmVmPERldGFjaGVkTG9hZGVyPj4oKTtcblxuICBwcml2YXRlIGdldE9yQ3JlYXRlKHRlbXBsYXRlUmVmOiBUZW1wbGF0ZVJlZjxJdGVtQ29udGV4dD4pIHtcbiAgICByZXR1cm4gdGhpcy5fbmdab25lLnJ1bigoKSA9PiB7XG4gICAgICBsZXQgdmlld1JlZiA9IHRoaXMuZ2V0Vmlldyh0ZW1wbGF0ZVJlZik7XG4gICAgICBpZiAoIXZpZXdSZWYpIHtcbiAgICAgICAgY29uc3QgbG9hZGVyID0gdGhpcy5kZXRhY2hlZExvYWRlckZhY3RvcnkoKTtcbiAgICAgICAgdmlld1JlZiA9IGxvYWRlci5pbnN0YW5jZS52Yy5jcmVhdGVFbWJlZGRlZFZpZXcodGVtcGxhdGVSZWYsIG5ldyBJdGVtQ29udGV4dCgpLCAwKTtcbiAgICAgICAgdGhpcy52aWV3VG9Mb2FkZXIuc2V0KHZpZXdSZWYsIGxvYWRlcik7XG4gICAgICAgIHRoaXMudmlld1RvVGVtcGxhdGUuc2V0KHZpZXdSZWYsIHRlbXBsYXRlUmVmKTtcbiAgICAgIH1cbiAgICAgIHZpZXdSZWYuZGV0YWNoKCk7XG4gICAgICBjb25zdCByZXN1bHRWaWV3ID0gZ2V0SXRlbVZpZXdSb290KHZpZXdSZWYpO1xuICAgICAgcmVzdWx0Vmlld1tOR19WSUVXXSA9IHZpZXdSZWY7XG4gICAgICByZXN1bHRWaWV3LnJldXNhYmxlID0gdGhpcy5hdXRvUmV1c2VWaWV3cztcbiAgICAgIHJldHVybiByZXN1bHRWaWV3O1xuICAgIH0pO1xuICB9XG4gIHByaXZhdGUgZ2V0Vmlldyh0ZW1wbGF0ZVJlZjogVGVtcGxhdGVSZWY8SXRlbUNvbnRleHQ+KSB7XG4gICAgY29uc3QgcG9vbCA9IHRoaXMuZ2V0Vmlld1Bvb2wodGVtcGxhdGVSZWYpO1xuICAgIHdoaWxlIChwb29sLnNjcmFwSGVhZC5zaXplID4gMCkge1xuICAgICAgY29uc3Qgdmlld1JlZjogRW1iZWRkZWRWaWV3UmVmPEl0ZW1Db250ZXh0PiA9IHBvb2wuc2NyYXBIZWFkLnZhbHVlcygpLm5leHQoKS52YWx1ZTtcbiAgICAgIHBvb2wuc2NyYXBIZWFkLmRlbGV0ZSh2aWV3UmVmKTtcbiAgICAgIGlmICghdmlld1JlZi5kZXN0cm95ZWQpIHtcbiAgICAgICAgcmV0dXJuIHZpZXdSZWY7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRWaWV3UG9vbCh0ZW1wbGF0ZVJlZjogVGVtcGxhdGVSZWY8SXRlbUNvbnRleHQ+KSB7XG4gICAgaWYgKCF0aGlzLnZpZXdQb29sLmhhcyh0ZW1wbGF0ZVJlZikpIHtcbiAgICAgIHRoaXMudmlld1Bvb2wuc2V0KHRlbXBsYXRlUmVmLCB7XG4gICAgICAgIHNjcmFwU2l6ZTogdGhpcy5hdXRvUmV1c2VWaWV3cyA/IEluZmluaXR5IDogMCxcbiAgICAgICAgc2NyYXBIZWFkOiBuZXcgU2V0PEVtYmVkZGVkVmlld1JlZjxJdGVtQ29udGV4dD4+KCksXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMudmlld1Bvb2wuZ2V0KHRlbXBsYXRlUmVmKTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0SXRlbVRlbXBsYXRlcygpIHtcbiAgICAvLyBUaGUgaXRlbVRlbXBsYXRlUXVlcnkgbWF5IGJlIGNoYW5nZWQgYWZ0ZXIgbGlzdCBpdGVtcyBhcmUgYWRkZWQgdGhhdCBjb250YWluIDx0ZW1wbGF0ZT4gaW5zaWRlLFxuICAgIC8vIHNvIGNhY2hlIGFuZCB1c2Ugb25seSB0aGUgb3JpZ2luYWwgdGVtcGxhdGUgdG8gYXZvaWQgZXJyb3JzLlxuICAgIHRoaXMuaXRlbVRlbXBsYXRlID0gdGhpcy5pdGVtVGVtcGxhdGVRdWVyeTtcblxuICAgIGlmICh0aGlzLl90ZW1wbGF0ZU1hcCkge1xuICAgICAgaWYgKFRyYWNlLmlzRW5hYmxlZCgpKSB7XG4gICAgICAgIENMb2coQ0xvZ1R5cGVzLmluZm8sICdTZXR0aW5nIHRlbXBsYXRlcycpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB0ZW1wbGF0ZXM6IEtleWVkVGVtcGxhdGVbXSA9IFtdO1xuICAgICAgdGhpcy5fdGVtcGxhdGVNYXAuZm9yRWFjaCgodmFsdWUpID0+IHtcbiAgICAgICAgdGVtcGxhdGVzLnB1c2godmFsdWUpO1xuICAgICAgfSk7XG4gICAgICB0aGlzLl9jb2xsZWN0aW9uVmlldy5pdGVtVGVtcGxhdGVzID0gdGVtcGxhdGVzO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBJZiB0aGUgbWFwIHdhcyBub3QgaW5pdGlhbGl6ZWQgdGhpcyBtZWFucyB0aGF0IHRoZXJlIGFyZSBubyBuYW1lZCB0ZW1wbGF0ZXMsIHNvIHdlIHJlZ2lzdGVyIHRoZSBkZWZhdWx0IG9uZS5cbiAgICAgIHRoaXMuX2NvbGxlY3Rpb25WaWV3Lml0ZW1UZW1wbGF0ZSA9IHRoaXMuZ2V0SXRlbVRlbXBsYXRlVmlld0ZhY3RvcnkodGhpcy5pdGVtVGVtcGxhdGUpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZGV0ZWN0Q2hhbmdlc09uQ2hpbGQodmlld1JlZjogRW1iZWRkZWRWaWV3UmVmPEl0ZW1Db250ZXh0PiwgaW5kZXg6IG51bWJlcikge1xuICAgIGlmIChUcmFjZS5pc0VuYWJsZWQoKSkge1xuICAgICAgQ0xvZyhDTG9nVHlwZXMuaW5mbywgJ01hbnVhbGx5IGRldGVjdCBjaGFuZ2VzIGluIGNoaWxkOiAnICsgaW5kZXgpO1xuICAgIH1cbiAgICB2aWV3UmVmLm1hcmtGb3JDaGVjaygpO1xuICAgIHZpZXdSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgcHJpdmF0ZSByZWZyZXNoKCkge1xuICAgIGlmICh0aGlzLl9jb2xsZWN0aW9uVmlldykge1xuICAgICAgdGhpcy5fY29sbGVjdGlvblZpZXcucmVmcmVzaCgpO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIENvbXBvbmVudFZpZXcge1xuICByb290Tm9kZXM6IGFueVtdO1xuICBkZXN0cm95KCk6IHZvaWQ7XG59XG5cbmV4cG9ydCB0eXBlIFJvb3RMb2NhdG9yID0gKG5vZGVzOiBhbnlbXSwgbmVzdExldmVsOiBudW1iZXIpID0+IFZpZXc7XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRJdGVtVmlld1Jvb3Qodmlld1JlZjogQ29tcG9uZW50Vmlldywgcm9vdExvY2F0b3I6IFJvb3RMb2NhdG9yID0gZXh0cmFjdFNpbmdsZVZpZXdSZWN1cnNpdmUpOiBWaWV3IHtcbiAgY29uc3Qgcm9vdFZpZXcgPSByb290TG9jYXRvcih2aWV3UmVmLnJvb3ROb2RlcywgMCk7XG4gIHJldHVybiByb290Vmlldztcbn1cblxuQERpcmVjdGl2ZSh7IHNlbGVjdG9yOiAnW2N2VGVtcGxhdGVLZXldJyB9KVxuZXhwb3J0IGNsYXNzIFRlbXBsYXRlS2V5RGlyZWN0aXZlIHtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSB0ZW1wbGF0ZVJlZjogVGVtcGxhdGVSZWY8YW55PiwgQEhvc3QoKSBwcml2YXRlIGNvbGxlY3Rpb25WaWV3OiBDb2xsZWN0aW9uVmlld0NvbXBvbmVudCkge31cblxuICBASW5wdXQoKVxuICBzZXQgY3ZUZW1wbGF0ZUtleSh2YWx1ZTogYW55KSB7XG4gICAgaWYgKFRyYWNlLmlzRW5hYmxlZCgpKSB7XG4gICAgICBDTG9nKENMb2dUeXBlcy5pbmZvLCAnY3ZUZW1wbGF0ZUtleTogJyArIHZhbHVlKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuY29sbGVjdGlvblZpZXcgJiYgdGhpcy50ZW1wbGF0ZVJlZikge1xuICAgICAgdGhpcy5jb2xsZWN0aW9uVmlldy5yZWdpc3RlclRlbXBsYXRlKHZhbHVlLnRvTG93ZXJDYXNlKCksIHRoaXMudGVtcGxhdGVSZWYpO1xuICAgIH1cbiAgfVxufVxuXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdbY3ZUZW1wbGF0ZUhlYWRlcl0nLFxufSlcbmV4cG9ydCBjbGFzcyBUZW1wbGF0ZUhlYWRlckRpcmVjdGl2ZSB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgdGVtcGxhdGVSZWY6IFRlbXBsYXRlUmVmPGFueT4sIEBIb3N0KCkgcHJpdmF0ZSBjb2xsZWN0aW9uVmlldzogQ29sbGVjdGlvblZpZXdDb21wb25lbnQpIHt9XG5cbiAgQElucHV0KClcbiAgc2V0IGN2VGVtcGxhdGVIZWFkZXIodmFsdWU6IGFueSkge1xuICAgIGlmIChUcmFjZS5pc0VuYWJsZWQoKSkge1xuICAgICAgQ0xvZyhDTG9nVHlwZXMuaW5mbywgJ2N2VGVtcGxhdGVIZWFkZXI6ICcgKyB2YWx1ZSk7XG4gICAgfVxuICAgIGlmICh0aGlzLmNvbGxlY3Rpb25WaWV3ICYmIHRoaXMudGVtcGxhdGVSZWYpIHtcbiAgICAgIC8vIFRPRE86IGFsbG93IGtleWluZyBvZiBtdWx0aXBsZSBoZWFkZXJzIHBlciBzZWN0aW9uXG4gICAgICB0aGlzLmNvbGxlY3Rpb25WaWV3LnJlZ2lzdGVyVGVtcGxhdGVTdXBwbGVtZW50YWwodmFsdWUgfHwgVmlld1RlbXBsYXRlVHlwZS5IZWFkZXIsIHRoaXMudGVtcGxhdGVSZWYsICdoZWFkZXInKTtcbiAgICB9XG4gIH1cbn1cblxuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnW2N2VGVtcGxhdGVGb290ZXJdJyxcbn0pXG5leHBvcnQgY2xhc3MgVGVtcGxhdGVGb290ZXJEaXJlY3RpdmUge1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHRlbXBsYXRlUmVmOiBUZW1wbGF0ZVJlZjxhbnk+LCBASG9zdCgpIHByaXZhdGUgY29sbGVjdGlvblZpZXc6IENvbGxlY3Rpb25WaWV3Q29tcG9uZW50KSB7fVxuXG4gIEBJbnB1dCgpXG4gIHNldCBjdlRlbXBsYXRlRm9vdGVyKHZhbHVlOiBhbnkpIHtcbiAgICBpZiAoVHJhY2UuaXNFbmFibGVkKCkpIHtcbiAgICAgIENMb2coQ0xvZ1R5cGVzLmluZm8sICdjdlRlbXBsYXRlRm9vdGVyOiAnICsgdmFsdWUpO1xuICAgIH1cbiAgICBpZiAodGhpcy5jb2xsZWN0aW9uVmlldyAmJiB0aGlzLnRlbXBsYXRlUmVmKSB7XG4gICAgICAvLyBUT0RPOiBhbGxvdyBrZXlpbmcgb2YgbXVsdGlwbGUgZm9vdGVycyBwZXIgc2VjdGlvblxuICAgICAgdGhpcy5jb2xsZWN0aW9uVmlldy5yZWdpc3RlclRlbXBsYXRlU3VwcGxlbWVudGFsKHZhbHVlIHx8IFZpZXdUZW1wbGF0ZVR5cGUuRm9vdGVyLCB0aGlzLnRlbXBsYXRlUmVmLCAnZm9vdGVyJyk7XG4gICAgfVxuICB9XG59XG4iXX0=
@@ -1,19 +0,0 @@
1
- // External
2
- import { NO_ERRORS_SCHEMA, NgModule } from '@angular/core';
3
- import { CollectionViewComponent, TemplateKeyDirective, TemplateHeaderDirective, TemplateFooterDirective } from './collectionview.component';
4
- import * as i0 from "@angular/core";
5
- export { CollectionViewComponent, TemplateKeyDirective, TemplateHeaderDirective, TemplateFooterDirective } from './collectionview.component';
6
- export class CollectionViewModule {
7
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.9", ngImport: i0, type: CollectionViewModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
8
- static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.3.9", ngImport: i0, type: CollectionViewModule, declarations: [CollectionViewComponent, TemplateKeyDirective, TemplateHeaderDirective, TemplateFooterDirective], exports: [CollectionViewComponent, TemplateKeyDirective, TemplateHeaderDirective, TemplateFooterDirective] });
9
- static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.3.9", ngImport: i0, type: CollectionViewModule });
10
- }
11
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.9", ngImport: i0, type: CollectionViewModule, decorators: [{
12
- type: NgModule,
13
- args: [{
14
- declarations: [CollectionViewComponent, TemplateKeyDirective, TemplateHeaderDirective, TemplateFooterDirective],
15
- exports: [CollectionViewComponent, TemplateKeyDirective, TemplateHeaderDirective, TemplateFooterDirective],
16
- schemas: [NO_ERRORS_SCHEMA],
17
- }]
18
- }] });
19
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy91aS1jb2xsZWN0aW9udmlldy9hbmd1bGFyL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFdBQVc7QUFDWCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTNELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxvQkFBb0IsRUFBRSx1QkFBdUIsRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDRCQUE0QixDQUFDOztBQUM3SSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsb0JBQW9CLEVBQUUsdUJBQXVCLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQU83SSxNQUFNLE9BQU8sb0JBQW9CO3VHQUFwQixvQkFBb0I7d0dBQXBCLG9CQUFvQixpQkFKaEIsdUJBQXVCLEVBQUUsb0JBQW9CLEVBQUUsdUJBQXVCLEVBQUUsdUJBQXVCLGFBQ3BHLHVCQUF1QixFQUFFLG9CQUFvQixFQUFFLHVCQUF1QixFQUFFLHVCQUF1Qjt3R0FHOUYsb0JBQW9COzsyRkFBcEIsb0JBQW9CO2tCQUxoQyxRQUFRO21CQUFDO29CQUNSLFlBQVksRUFBRSxDQUFDLHVCQUF1QixFQUFFLG9CQUFvQixFQUFFLHVCQUF1QixFQUFFLHVCQUF1QixDQUFDO29CQUMvRyxPQUFPLEVBQUUsQ0FBQyx1QkFBdUIsRUFBRSxvQkFBb0IsRUFBRSx1QkFBdUIsRUFBRSx1QkFBdUIsQ0FBQztvQkFDMUcsT0FBTyxFQUFFLENBQUMsZ0JBQWdCLENBQUM7aUJBQzVCIiwic291cmNlc0NvbnRlbnQiOlsiLy8gRXh0ZXJuYWxcbmltcG9ydCB7IE5PX0VSUk9SU19TQ0hFTUEsIE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IENvbGxlY3Rpb25WaWV3Q29tcG9uZW50LCBUZW1wbGF0ZUtleURpcmVjdGl2ZSwgVGVtcGxhdGVIZWFkZXJEaXJlY3RpdmUsIFRlbXBsYXRlRm9vdGVyRGlyZWN0aXZlIH0gZnJvbSAnLi9jb2xsZWN0aW9udmlldy5jb21wb25lbnQnO1xuZXhwb3J0IHsgQ29sbGVjdGlvblZpZXdDb21wb25lbnQsIFRlbXBsYXRlS2V5RGlyZWN0aXZlLCBUZW1wbGF0ZUhlYWRlckRpcmVjdGl2ZSwgVGVtcGxhdGVGb290ZXJEaXJlY3RpdmUgfSBmcm9tICcuL2NvbGxlY3Rpb252aWV3LmNvbXBvbmVudCc7XG5cbkBOZ01vZHVsZSh7XG4gIGRlY2xhcmF0aW9uczogW0NvbGxlY3Rpb25WaWV3Q29tcG9uZW50LCBUZW1wbGF0ZUtleURpcmVjdGl2ZSwgVGVtcGxhdGVIZWFkZXJEaXJlY3RpdmUsIFRlbXBsYXRlRm9vdGVyRGlyZWN0aXZlXSxcbiAgZXhwb3J0czogW0NvbGxlY3Rpb25WaWV3Q29tcG9uZW50LCBUZW1wbGF0ZUtleURpcmVjdGl2ZSwgVGVtcGxhdGVIZWFkZXJEaXJlY3RpdmUsIFRlbXBsYXRlRm9vdGVyRGlyZWN0aXZlXSxcbiAgc2NoZW1hczogW05PX0VSUk9SU19TQ0hFTUFdLFxufSlcbmV4cG9ydCBjbGFzcyBDb2xsZWN0aW9uVmlld01vZHVsZSB7fVxuIl19
@@ -1,5 +0,0 @@
1
- /**
2
- * Generated bundle index. Do not edit.
3
- */
4
- export * from './index';
5
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibnN0dWRpby11aS1jb2xsZWN0aW9udmlldy1hbmd1bGFyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvdWktY29sbGVjdGlvbnZpZXcvYW5ndWxhci9uc3R1ZGlvLXVpLWNvbGxlY3Rpb252aWV3LWFuZ3VsYXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLFNBQVMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2VuZXJhdGVkIGJ1bmRsZSBpbmRleC4gRG8gbm90IGVkaXQuXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9pbmRleCc7XG4iXX0=