@nstudio/ui-collectionview 5.1.9-alpha.5 → 5.1.9
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.
- package/angular/collectionview.component.d.ts +7 -34
- package/angular/fesm2022/nstudio-ui-collectionview-angular.mjs +54 -175
- package/angular/fesm2022/nstudio-ui-collectionview-angular.mjs.map +1 -1
- package/angular/index.d.ts +2 -2
- package/angular/package.json +0 -2
- package/common.d.ts +24 -62
- package/common.js +92 -134
- package/common.js.map +1 -1
- package/index.android.d.ts +38 -19
- package/index.android.js +448 -158
- package/index.android.js.map +1 -1
- package/index.d.ts +49 -16
- package/index.ios.d.ts +83 -31
- package/index.ios.js +594 -417
- package/index.ios.js.map +1 -1
- package/package.json +7 -3
- package/react/index.d.ts +1 -1
- package/svelte/index.js +11 -7
- package/svelte/index.js.map +1 -1
- package/vue3/component.d.ts +36 -0
- package/vue3/component.js +98 -0
- package/vue3/component.js.map +1 -0
- package/vue3/index.d.ts +11 -0
- package/vue3/index.js +14 -0
- package/vue3/index.js.map +1 -0
- package/angular/esm2022/collectionview.component.mjs +0 -525
- package/angular/esm2022/index.mjs +0 -19
- package/angular/esm2022/nstudio-ui-collectionview-angular.mjs +0 -5
- package/vue/component.d.ts +0 -38
- package/vue/component.js +0 -104
- package/vue/component.js.map +0 -1
- package/vue/index.d.ts +0 -4
- package/vue/index.js +0 -12
- package/vue/index.js.map +0 -1
@@ -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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sbGVjdGlvbnZpZXcuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvdWktY29sbGVjdGlvbnZpZXcvYW5ndWxhci9jb2xsZWN0aW9udmlldy5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFvQix1QkFBdUIsRUFBRSxTQUFTLEVBQWdCLFlBQVksRUFBRSxTQUFTLEVBQVcsVUFBVSxFQUFtQixZQUFZLEVBQUUsSUFBSSxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFrQixlQUFlLEVBQUUsTUFBTSxFQUFhLE1BQU0sRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pULE9BQU8sRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLGNBQWMsRUFBK0IsZ0JBQWdCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUM1SCxPQUFPLEVBQUUsY0FBYyxFQUFFLDJCQUEyQixFQUFFLDBCQUEwQixFQUFFLGtCQUFrQixFQUFFLGVBQWUsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3JKLE9BQU8sRUFBaUIsVUFBVSxFQUFFLGVBQWUsRUFBRSxLQUFLLEVBQVEsTUFBTSxvQkFBb0IsQ0FBQzs7O0FBRTdGLGVBQWUsQ0FBQyxnQkFBZ0IsRUFBRSxHQUFHLEVBQUUsQ0FBQyxjQUFjLENBQUMsQ0FBQztBQUV4RCxNQUFNLE9BQU8sR0FBRyxZQUFZLENBQUM7QUFFN0IsTUFBTSxPQUFPLFdBQVc7SUFDSDtJQUF3QjtJQUFtQjtJQUF1QjtJQUF1QjtJQUE1RyxZQUFtQixTQUFlLEVBQVMsSUFBVSxFQUFTLEtBQWMsRUFBUyxJQUFjLEVBQVMsR0FBYTtRQUF0RyxjQUFTLEdBQVQsU0FBUyxDQUFNO1FBQVMsU0FBSSxHQUFKLElBQUksQ0FBTTtRQUFTLFVBQUssR0FBTCxLQUFLLENBQVM7UUFBUyxTQUFJLEdBQUosSUFBSSxDQUFVO1FBQVMsUUFBRyxHQUFILEdBQUcsQ0FBVTtJQUFHLENBQUM7Q0FDOUg7QUFrQkQsTUFBTSxPQUFPLHVCQUF1QjtJQXlFTTtJQUEwRDtJQUFnRjtJQUFnRTtJQXhFbFAsSUFBVyxhQUFhO1FBQ3RCLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQztJQUM5QixDQUFDO0lBQ0QsSUFBVyxRQUFRO1FBQ2pCLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQztJQUM5QixDQUFDO0lBRXFFLE1BQU0sQ0FBbUI7SUFDOUUsYUFBYSxHQUFHLElBQUksWUFBWSxFQUFxQixDQUFDO0lBQ0EsaUJBQWlCLENBQTJCO0lBRTFHLGNBQWMsR0FBRyxLQUFLLENBQUM7SUFFaEMscUJBQXFCO1FBQ25CLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsZUFBZSxDQUFDLGNBQWMsRUFBRTtZQUN0RCxLQUFLLEVBQUUsQ0FBQztTQUNULENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3RCLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3hCLE9BQU8sR0FBRyxDQUFDO0lBQ2IsQ0FBQztJQUVELElBQ1csWUFBWTtRQUNyQixPQUFPLElBQUksQ0FBQyxhQUFhLENBQUM7SUFDNUIsQ0FBQztJQUNELElBQVcsWUFBWSxDQUFDLEtBQStCO1FBQ3JELElBQUksQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDO1FBQzNCLGtDQUFrQztJQUNwQyxDQUFDO0lBQ0QsSUFDVyxrQkFBa0I7UUFDM0IsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDO0lBQzlCLENBQUM7SUFDRCxJQUFXLGtCQUFrQixDQUFDLEtBQStCO1FBQzNELElBQUksQ0FBQyxlQUFlLEdBQUcsS0FBSyxDQUFDO0lBQy9CLENBQUM7SUFDRCxJQUNXLGtCQUFrQjtRQUMzQixPQUFPLElBQUksQ0FBQyxlQUFlLENBQUM7SUFDOUIsQ0FBQztJQUNELElBQVcsa0JBQWtCLENBQUMsS0FBK0I7UUFDM0QsSUFBSSxDQUFDLGVBQWUsR0FBRyxLQUFLLENBQUM7SUFDL0IsQ0FBQztJQUNELElBQ1csS0FBSztRQUNkLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQztJQUNyQixDQUFDO0lBQ0QsSUFBVyxLQUFLLENBQUMsS0FBVTtRQUN6QixJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztRQUNwQixJQUFJLFVBQVUsR0FBRyxJQUFJLENBQUM7UUFDdEIsSUFBSSxLQUFLLFlBQVksZUFBZSxFQUFFLENBQUM7WUFDckMsVUFBVSxHQUFHLEtBQUssQ0FBQztRQUNyQixDQUFDO1FBQ0QsSUFBSSxVQUFVLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxJQUFJLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDN0QsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN4RixDQUFDO1FBRUQsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztJQUMzQyxDQUFDO0lBRU8sZUFBZSxDQUFpQjtJQUNoQyxNQUFNLENBQU07SUFDWixPQUFPLENBQWdDO0lBQ3ZDLGFBQWEsQ0FBMkI7SUFDeEMsWUFBWSxDQUE2QjtJQUN6QyxlQUFlLENBQTJCO0lBQzFDLGtCQUFrQixDQUE2QjtJQUMvQyxlQUFlLENBQTJCO0lBQzFDLGtCQUFrQixDQUE2QjtJQUMvQyxRQUFRLENBQWlDO0lBRWpELFlBQXdDLFdBQXVCLEVBQW1DLGdCQUFpQyxFQUErQyxTQUFzQyxFQUEwQixPQUFlO1FBQXpOLGdCQUFXLEdBQVgsV0FBVyxDQUFZO1FBQW1DLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBaUI7UUFBK0MsY0FBUyxHQUFULFNBQVMsQ0FBNkI7UUFBMEIsWUFBTyxHQUFQLE9BQU8sQ0FBUTtRQUMvUCxJQUFJLENBQUMsZUFBZSxHQUFHLFdBQVcsQ0FBQyxhQUFhLENBQUM7UUFFakQsSUFBSSxDQUFDLGVBQWUsQ0FBQyxFQUFFLENBQUMsY0FBYyxDQUFDLGdCQUFnQixFQUFFLElBQUksQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDbkYsSUFBSSxDQUFDLGVBQWUsQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQztRQUMxRCxJQUFJLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQztJQUNyQixDQUFDO0lBRU8sY0FBYyxHQUFHLENBQUMsUUFBUSxFQUFFLEVBQUU7UUFDcEMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFO1lBQ3BCLFFBQVEsUUFBUSxFQUFFLENBQUM7Z0JBQ2pCLEtBQUssZ0JBQWdCLENBQUMsSUFBSTtvQkFDeEIsSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7d0JBQ3ZCLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7b0JBQzlDLENBQUM7b0JBQ0QsTUFBTTtnQkFDUixLQUFLLGdCQUFnQixDQUFDLE1BQU07b0JBQzFCLElBQUksSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO3dCQUN6QixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO29CQUNoRCxDQUFDO29CQUNELE1BQU07Z0JBQ1IsS0FBSyxnQkFBZ0IsQ0FBQyxNQUFNO29CQUMxQixJQUFJLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQzt3QkFDekIsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztvQkFDaEQsQ0FBQztvQkFDRCxNQUFNO1lBQ1YsQ0FBQztZQUNELE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUM7SUFFSyxrQkFBa0I7UUFDdkIsSUFBSSxLQUFLLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQztZQUN0QixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxxQ0FBcUMsQ0FBQyxDQUFDO1FBQzlELENBQUM7UUFDRCxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztJQUMxQixDQUFDO0lBRU0sV0FBVztRQUNoQixJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNwRixJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQztRQUM1QixJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7UUFDMUMsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7UUFDckIsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUM7UUFDekIsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUM7UUFDM0IsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7UUFFckIsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7UUFDbkIsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7UUFDcEIsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUM7UUFDMUIsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDdEIsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUM1QixDQUFDO1FBQ0QsSUFBSSxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztZQUM1QixJQUFJLENBQUMsa0JBQWtCLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDbEMsQ0FBQztRQUNELElBQUksSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7WUFDNUIsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ2xDLENBQUM7UUFDRCxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQztRQUN6QixJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDO1FBQy9CLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUM7SUFDakMsQ0FBQztJQUVNLFNBQVM7UUFDZCxJQUFJLEtBQUssQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDO1lBQ3RCLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLGdDQUFnQyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN4RSxDQUFDO1FBQ0QsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDakIsSUFBSSxLQUFLLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQztnQkFDdEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsOEJBQThCLENBQUMsQ0FBQztZQUN2RCxDQUFDO1lBQ0QsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQy9DLElBQUksT0FBTyxFQUFFLENBQUM7Z0JBQ1osSUFBSSxLQUFLLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQztvQkFDdEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsdUJBQXVCLENBQUMsQ0FBQztnQkFDaEQsQ0FBQztnQkFDRCxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDakIsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBRU0sZ0JBQWdCLENBQUMsR0FBVyxFQUFFLFFBQWtDO1FBQ3JFLElBQUksS0FBSyxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUM7WUFDdEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsNEJBQTRCLEdBQUcsR0FBRyxDQUFDLENBQUM7UUFDM0QsQ0FBQztRQUNELElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDdkIsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLEdBQUcsRUFBeUIsQ0FBQztRQUN2RCxDQUFDO1FBRUQsTUFBTSxhQUFhLEdBQUc7WUFDcEIsR0FBRztZQUNILFVBQVUsRUFBRSxJQUFJLENBQUMsMEJBQTBCLENBQUMsUUFBUSxDQUFDO1NBQ3RELENBQUM7UUFFRixJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsYUFBYSxDQUFDLENBQUM7SUFDNUMsQ0FBQztJQUVNLDRCQUE0QixDQUFDLEdBQVcsRUFBRSxRQUFrQyxFQUFFLElBQXlCO1FBQzVHLElBQUksS0FBSyxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUM7WUFDdEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsNEJBQTRCLEdBQUcsR0FBRyxDQUFDLENBQUM7UUFDM0QsQ0FBQztRQUVELFFBQVEsSUFBSSxFQUFFLENBQUM7WUFDYixLQUFLLFFBQVE7Z0JBQ1gsa0NBQWtDO2dCQUNsQyxnRUFBZ0U7Z0JBQ2hFLElBQUk7Z0JBQ0osbURBQW1EO2dCQUNuRCxJQUFJLENBQUMsZUFBZSxDQUFDLFNBQVMsR0FBRyxHQUFHLENBQUM7Z0JBQ3JDLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxRQUFRLENBQUM7Z0JBQ25DLElBQUksQ0FBQyxlQUFlLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDLDBCQUEwQixDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUNwRixNQUFNO1lBQ1IsS0FBSyxRQUFRO2dCQUNYLGtDQUFrQztnQkFDbEMsZ0VBQWdFO2dCQUNoRSxJQUFJO2dCQUVKLG1EQUFtRDtnQkFFbkQsSUFBSSxDQUFDLGVBQWUsQ0FBQyxTQUFTLEdBQUcsR0FBRyxDQUFDO2dCQUNyQyxJQUFJLENBQUMsa0JBQWtCLEdBQUcsUUFBUSxDQUFDO2dCQUNuQyxJQUFJLENBQUMsZUFBZSxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFDcEYsTUFBTTtRQUNWLENBQUM7SUFDSCxDQUFDO0lBR00sYUFBYSxDQUFDLElBQWlDO1FBQ3BELElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ3JDLE9BQU87UUFDVCxDQUFDO1FBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLO1lBQUUsT0FBTztRQUN4QixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO1FBQ3pCLE1BQU0sS0FBSyxHQUFJLElBQUksQ0FBQyxNQUFjLENBQUMsS0FBSyxDQUFDO1FBQ3pDLE1BQU0sV0FBVyxHQUFHLE9BQU8sS0FBSyxDQUFDLE9BQU8sS0FBSyxVQUFVLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM5RixJQUFJLE9BQXFDLENBQUM7UUFFMUMsSUFBSSxLQUFLLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQztZQUN0QixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxrQkFBa0IsS0FBSywwQkFBMEIsQ0FBQyxDQUFDO1FBQzFFLENBQUM7UUFFRCxPQUFPLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFcEMsSUFBSSxDQUFDLE9BQU8sSUFBSSxLQUFLLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQztZQUNsQyxJQUFJLEtBQUssQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDO2dCQUN0QixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxvQ0FBb0MsS0FBSyxpQ0FBaUMsQ0FBQyxDQUFDO1lBQ25HLENBQUM7UUFDSCxDQUFDO1FBRUQsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2IsSUFBSSxLQUFLLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQztnQkFDdEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsa0JBQWtCLEtBQUssZ0NBQWdDLENBQUMsQ0FBQztZQUNoRixDQUFDO1lBQ0QsT0FBTyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBUSxDQUFDO1FBQ3ZELENBQUM7UUFDRCxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxXQUFXLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDL0MsSUFBSSxDQUFDLG9CQUFvQixDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQztJQUM1QyxDQUFDO0lBRU0sdUJBQXVCLENBQUMsSUFBUztRQUN0QyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ2YsT0FBTztRQUNULENBQUM7UUFDRCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN6Qyx1Q0FBdUM7UUFFdkMsSUFBSSxNQUFNLEVBQUUsQ0FBQztZQUNYLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUNsQixDQUFDO0lBQ0gsQ0FBQztJQUdNLHFCQUFxQixDQUFDLElBQWlDO1FBQzVELElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDZixPQUFPO1FBQ1QsQ0FBQztRQUNELE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRXpDLElBQUksTUFBTSxFQUFFLENBQUM7WUFDWCxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDcEIsQ0FBQztJQUNILENBQUM7SUFHTSx1QkFBdUIsQ0FBQyxJQUFTO1FBQ3RDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDZixPQUFPO1FBQ1QsQ0FBQztRQUNELE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRXpDLElBQUksTUFBTSxFQUFFLENBQUM7WUFDWCxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDaEIsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUM1QixDQUFDO0lBQ0gsQ0FBQztJQUVPLFNBQVMsQ0FBQyxJQUFVO1FBQzFCLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUM3QiwrRUFBK0U7UUFDL0UsNkRBQTZEO1FBQzdELElBQUksQ0FBQyxNQUFNLElBQUksSUFBSSxZQUFZLFVBQVUsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUN6RSxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDckMsQ0FBQztRQUNELE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFFTSxZQUFZLENBQUMsSUFBa0MsRUFBRSxJQUFTLEVBQUUsS0FBYTtRQUM5RSxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDO1FBQzdCLE9BQU8sQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO1FBQ3pCLE9BQU8sQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBQ3BCLE9BQU8sQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ3RCLE9BQU8sQ0FBQyxJQUFJLEdBQUcsS0FBSyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDL0IsT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUM7UUFFNUIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUM7WUFDdEIsT0FBTztZQUNQLElBQUk7WUFDSixLQUFLO1lBQ0wsSUFBSTtTQUNMLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCwwQkFBMEIsQ0FBQyxRQUFrQztRQUMzRCxPQUFPLEdBQUcsRUFBRTtZQUNWLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNwQyxDQUFDLENBQUM7SUFDSixDQUFDO0lBQ0QsUUFBUSxHQUFHLElBQUksR0FBRyxFQU1mLENBQUM7SUFDSSxZQUFZLENBQUMsT0FBNkI7UUFDaEQsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDckQsSUFBSSxXQUFXLEVBQUUsQ0FBQztZQUNoQixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUM3QyxJQUFJLEtBQUssRUFBRSxDQUFDO2dCQUNWLElBQUksS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJLElBQUksS0FBSyxDQUFDLFNBQVMsRUFBRSxDQUFDO29CQUM1QyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7b0JBQ2xCLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDO2dCQUM1QyxDQUFDO3FCQUFNLENBQUM7b0JBQ04sS0FBSyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQy9CLENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFDRCxjQUFjLEdBQUcsSUFBSSxPQUFPLEVBQTBDLENBQUM7SUFDdkUsWUFBWSxHQUFHLElBQUksT0FBTyxFQUFzRCxDQUFDO0lBRXpFLFdBQVcsQ0FBQyxXQUFxQztRQUN2RCxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRTtZQUMzQixJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQ3hDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztnQkFDYixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQztnQkFDNUMsT0FBTyxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLGtCQUFrQixDQUFDLFdBQVcsRUFBRSxJQUFJLFdBQVcsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO2dCQUNuRixJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUM7Z0JBQ3ZDLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxXQUFXLENBQUMsQ0FBQztZQUNoRCxDQUFDO1lBQ0QsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ2pCLE1BQU0sVUFBVSxHQUFHLGVBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUM1QyxVQUFVLENBQUMsT0FBTyxDQUFDLEdBQUcsT0FBTyxDQUFDO1lBQzlCLFVBQVUsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQztZQUMxQyxPQUFPLFVBQVUsQ0FBQztRQUNwQixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFDTyxPQUFPLENBQUMsV0FBcUM7UUFDbkQsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUMzQyxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQy9CLE1BQU0sT0FBTyxHQUFpQyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLEtBQUssQ0FBQztZQUNuRixJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUMvQixJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxDQUFDO2dCQUN2QixPQUFPLE9BQU8sQ0FBQztZQUNqQixDQUFDO1FBQ0gsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVPLFdBQVcsQ0FBQyxXQUFxQztRQUN2RCxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQztZQUNwQyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxXQUFXLEVBQUU7Z0JBQzdCLFNBQVMsRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQzdDLFNBQVMsRUFBRSxJQUFJLEdBQUcsRUFBZ0M7YUFDbkQsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDeEMsQ0FBQztJQUVPLGdCQUFnQjtRQUN0QixrR0FBa0c7UUFDbEcsK0RBQStEO1FBQy9ELElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDO1FBRTNDLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ3RCLElBQUksS0FBSyxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUM7Z0JBQ3RCLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLG1CQUFtQixDQUFDLENBQUM7WUFDNUMsQ0FBQztZQUVELE1BQU0sU0FBUyxHQUFvQixFQUFFLENBQUM7WUFDdEMsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtnQkFDbEMsU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUN4QixDQUFDLENBQUMsQ0FBQztZQUNILElBQUksQ0FBQyxlQUFlLENBQUMsYUFBYSxHQUFHLFNBQVMsQ0FBQztRQUNqRCxDQUFDO2FBQU0sQ0FBQztZQUNOLCtHQUErRztZQUMvRyxJQUFJLENBQUMsZUFBZSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsMEJBQTBCLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ3pGLENBQUM7SUFDSCxDQUFDO0lBRU8sb0JBQW9CLENBQUMsT0FBcUMsRUFBRSxLQUFhO1FBQy9FLElBQUksS0FBSyxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUM7WUFDdEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsb0NBQW9DLEdBQUcsS0FBSyxDQUFDLENBQUM7UUFDckUsQ0FBQztRQUNELE9BQU8sQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUN2QixPQUFPLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDMUIsQ0FBQztJQUVPLE9BQU87UUFDYixJQUFJLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUN6QixJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ2pDLENBQUM7SUFDSCxDQUFDO3VHQTVZVSx1QkFBdUIsa0JBeUVkLFVBQVUsYUFBMkMsZUFBZSxhQUFxRCwyQkFBMkIsYUFBMEQsTUFBTTsyRkF6RTdOLHVCQUF1QiwyaEJBVXBCLFdBQVcsMkJBQVUsV0FBVyx3SEFGakIsZ0JBQWdCLDJDQWZuQzs7OztHQUlUOzsyRkFHVSx1QkFBdUI7a0JBVG5DLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLGdCQUFnQjtvQkFDMUIsUUFBUSxFQUFFOzs7O0dBSVQ7b0JBQ0QsZUFBZSxFQUFFLHVCQUF1QixDQUFDLE1BQU07aUJBQ2hEOzswQkEwRWMsTUFBTTsyQkFBQyxVQUFVOzswQkFBb0MsTUFBTTsyQkFBQyxlQUFlOzswQkFBOEMsTUFBTTsyQkFBQywyQkFBMkI7OzBCQUFtRCxNQUFNOzJCQUFDLE1BQU07eUNBakVsSyxNQUFNO3NCQUEzRSxTQUFTO3VCQUFDLFFBQVEsRUFBRSxFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQUM1QyxhQUFhO3NCQUE3QixNQUFNO2dCQUNnRSxpQkFBaUI7c0JBQXZGLFlBQVk7dUJBQUMsV0FBVyxFQUFFLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQUVyRCxjQUFjO3NCQUF0QixLQUFLO2dCQVlLLFlBQVk7c0JBRHRCLEtBQUs7Z0JBU0ssa0JBQWtCO3NCQUQ1QixLQUFLO2dCQVFLLGtCQUFrQjtzQkFENUIsS0FBSztnQkFRSyxLQUFLO3NCQURmLEtBQUs7Z0JBNEpDLGFBQWE7c0JBRG5CLFlBQVk7dUJBQUMsYUFBYSxFQUFFLENBQUMsUUFBUSxDQUFDO2dCQWlDaEMsdUJBQXVCO3NCQUQ3QixZQUFZO3VCQUFDLGVBQWUsRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkFjbEMscUJBQXFCO3NCQUQzQixZQUFZO3VCQUFDLGFBQWEsRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkFhaEMsdUJBQXVCO3NCQUQ3QixZQUFZO3VCQUFDLGVBQWUsRUFBRSxDQUFDLFFBQVEsQ0FBQzs7QUFxSjNDLE1BQU0sVUFBVSxlQUFlLENBQUMsT0FBc0IsRUFBRSxjQUEyQiwwQkFBMEI7SUFDM0csTUFBTSxRQUFRLEdBQUcsV0FBVyxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDbkQsT0FBTyxRQUFRLENBQUM7QUFDbEIsQ0FBQztBQUdELE1BQU0sT0FBTyxvQkFBb0I7SUFDWDtJQUErQztJQUFuRSxZQUFvQixXQUE2QixFQUFrQixjQUF1QztRQUF0RixnQkFBVyxHQUFYLFdBQVcsQ0FBa0I7UUFBa0IsbUJBQWMsR0FBZCxjQUFjLENBQXlCO0lBQUcsQ0FBQztJQUU5RyxJQUNJLGFBQWEsQ0FBQyxLQUFVO1FBQzFCLElBQUksS0FBSyxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUM7WUFDdEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsaUJBQWlCLEdBQUcsS0FBSyxDQUFDLENBQUM7UUFDbEQsQ0FBQztRQUNELElBQUksSUFBSSxDQUFDLGNBQWMsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDNUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsV0FBVyxFQUFFLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQzlFLENBQUM7SUFDSCxDQUFDO3VHQVhVLG9CQUFvQjsyRkFBcEIsb0JBQW9COzsyRkFBcEIsb0JBQW9CO2tCQURoQyxTQUFTO21CQUFDLEVBQUUsUUFBUSxFQUFFLGlCQUFpQixFQUFFOzswQkFFWSxJQUFJO3lDQUdwRCxhQUFhO3NCQURoQixLQUFLOztBQWNSLE1BQU0sT0FBTyx1QkFBdUI7SUFDZDtJQUErQztJQUFuRSxZQUFvQixXQUE2QixFQUFrQixjQUF1QztRQUF0RixnQkFBVyxHQUFYLFdBQVcsQ0FBa0I7UUFBa0IsbUJBQWMsR0FBZCxjQUFjLENBQXlCO0lBQUcsQ0FBQztJQUU5RyxJQUNJLGdCQUFnQixDQUFDLEtBQVU7UUFDN0IsSUFBSSxLQUFLLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQztZQUN0QixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxvQkFBb0IsR0FBRyxLQUFLLENBQUMsQ0FBQztRQUNyRCxDQUFDO1FBQ0QsSUFBSSxJQUFJLENBQUMsY0FBYyxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUM1QyxxREFBcUQ7WUFDckQsSUFBSSxDQUFDLGNBQWMsQ0FBQyw0QkFBNEIsQ0FBQyxLQUFLLElBQUksZ0JBQWdCLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxXQUFXLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDakgsQ0FBQztJQUNILENBQUM7dUdBWlUsdUJBQXVCOzJGQUF2Qix1QkFBdUI7OzJGQUF2Qix1QkFBdUI7a0JBSG5DLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLG9CQUFvQjtpQkFDL0I7OzBCQUVxRCxJQUFJO3lDQUdwRCxnQkFBZ0I7c0JBRG5CLEtBQUs7O0FBZVIsTUFBTSxPQUFPLHVCQUF1QjtJQUNkO0lBQStDO0lBQW5FLFlBQW9CLFdBQTZCLEVBQWtCLGNBQXVDO1FBQXRGLGdCQUFXLEdBQVgsV0FBVyxDQUFrQjtRQUFrQixtQkFBYyxHQUFkLGNBQWMsQ0FBeUI7SUFBRyxDQUFDO0lBRTlHLElBQ0ksZ0JBQWdCLENBQUMsS0FBVTtRQUM3QixJQUFJLEtBQUssQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDO1lBQ3RCLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLG9CQUFvQixHQUFHLEtBQUssQ0FBQyxDQUFDO1FBQ3JELENBQUM7UUFDRCxJQUFJLElBQUksQ0FBQyxjQUFjLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQzVDLHFEQUFxRDtZQUNyRCxJQUFJLENBQUMsY0FBYyxDQUFDLDRCQUE0QixDQUFDLEtBQUssSUFBSSxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLFdBQVcsRUFBRSxRQUFRLENBQUMsQ0FBQztRQUNqSCxDQUFDO0lBQ0gsQ0FBQzt1R0FaVSx1QkFBdUI7MkZBQXZCLHVCQUF1Qjs7MkZBQXZCLHVCQUF1QjtrQkFIbkMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsb0JBQW9CO2lCQUMvQjs7MEJBRXFELElBQUk7eUNBR3BELGdCQUFnQjtzQkFEbkIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFmdGVyQ29udGVudEluaXQsIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIENvbXBvbmVudFJlZiwgQ29udGVudENoaWxkLCBEaXJlY3RpdmUsIERvQ2hlY2ssIEVsZW1lbnRSZWYsIEVtYmVkZGVkVmlld1JlZiwgRXZlbnRFbWl0dGVyLCBIb3N0LCBIb3N0TGlzdGVuZXIsIEluamVjdCwgSW5wdXQsIEl0ZXJhYmxlRGlmZmVyLCBJdGVyYWJsZURpZmZlcnMsIE5nWm9uZSwgT25EZXN0cm95LCBPdXRwdXQsIFRlbXBsYXRlUmVmLCBWaWV3Q2hpbGQsIFZpZXdDb250YWluZXJSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENMb2csIENMb2dUeXBlcywgQ29sbGVjdGlvblZpZXcsIENvbGxlY3Rpb25WaWV3SXRlbUV2ZW50RGF0YSwgVmlld1RlbXBsYXRlVHlwZSB9IGZyb20gJ0Buc3R1ZGlvL3VpLWNvbGxlY3Rpb252aWV3JztcbmltcG9ydCB7IERldGFjaGVkTG9hZGVyLCBOYXRpdmVTY3JpcHRSZW5kZXJlckZhY3RvcnksIGV4dHJhY3RTaW5nbGVWaWV3UmVjdXJzaXZlLCBpc0xpc3RMaWtlSXRlcmFibGUsIHJlZ2lzdGVyRWxlbWVudCB9IGZyb20gJ0BuYXRpdmVzY3JpcHQvYW5ndWxhcic7XG5pbXBvcnQgeyBLZXllZFRlbXBsYXRlLCBMYXlvdXRCYXNlLCBPYnNlcnZhYmxlQXJyYXksIFRyYWNlLCBWaWV3IH0gZnJvbSAnQG5hdGl2ZXNjcmlwdC9jb3JlJztcblxucmVnaXN0ZXJFbGVtZW50KCdDb2xsZWN0aW9uVmlldycsICgpID0+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=
|