@worktile/gantt 12.2.1 → 12.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (45) hide show
  1. package/bundles/worktile-gantt.umd.js +305 -210
  2. package/bundles/worktile-gantt.umd.js.map +1 -1
  3. package/components/bar/bar-drag.d.ts +4 -2
  4. package/components/bar/bar.component.d.ts +4 -4
  5. package/components/calendar/calendar.component.d.ts +3 -5
  6. package/components/drag-backdrop/drag-backdrop.component.d.ts +1 -5
  7. package/components/icon/icon.component.d.ts +2 -4
  8. package/components/main/gantt-main.component.d.ts +2 -3
  9. package/components/range/range.component.d.ts +2 -5
  10. package/components/table/gantt-table.component.d.ts +2 -3
  11. package/esm2015/components/bar/bar-drag.js +24 -17
  12. package/esm2015/components/bar/bar.component.js +21 -14
  13. package/esm2015/components/calendar/calendar.component.js +16 -11
  14. package/esm2015/components/drag-backdrop/drag-backdrop.component.js +8 -12
  15. package/esm2015/components/icon/icon.component.js +1 -3
  16. package/esm2015/components/links/links.component.js +2 -2
  17. package/esm2015/components/main/gantt-main.component.js +1 -2
  18. package/esm2015/components/range/range.component.js +2 -11
  19. package/esm2015/components/table/gantt-table.component.js +7 -3
  20. package/esm2015/gantt-dom.service.js +39 -25
  21. package/esm2015/gantt-item-upper.js +5 -5
  22. package/esm2015/gantt-print.service.js +50 -47
  23. package/esm2015/gantt-upper.js +27 -18
  24. package/esm2015/gantt.component.js +17 -16
  25. package/esm2015/root.component.js +41 -29
  26. package/esm2015/table/gantt-column.component.js +1 -2
  27. package/esm2015/table/gantt-table.component.js +2 -3
  28. package/esm2015/utils/passive-listeners.js +30 -0
  29. package/esm2015/utils/set-style-with-vendor-prefix.js +15 -0
  30. package/esm2015/views/day.js +1 -1
  31. package/fesm2015/worktile-gantt.js +285 -205
  32. package/fesm2015/worktile-gantt.js.map +1 -1
  33. package/gantt-dom.service.d.ts +11 -4
  34. package/gantt-item-upper.d.ts +5 -5
  35. package/gantt-print.service.d.ts +1 -1
  36. package/gantt-upper.d.ts +5 -5
  37. package/gantt.component.d.ts +2 -4
  38. package/main.bundle.scss +3 -2
  39. package/package.json +1 -1
  40. package/root.component.d.ts +5 -3
  41. package/table/gantt-column.component.d.ts +2 -3
  42. package/table/gantt-table.component.d.ts +2 -4
  43. package/utils/passive-listeners.d.ts +13 -0
  44. package/utils/set-style-with-vendor-prefix.d.ts +12 -0
  45. package/README.md +0 -24
@@ -1,5 +1,5 @@
1
1
  import { Input, Output, EventEmitter, ContentChild, HostBinding, InjectionToken, Directive, Inject } from '@angular/core';
2
- import { Subject } from 'rxjs';
2
+ import { from, Subject } from 'rxjs';
3
3
  import { takeUntil, take, skip } from 'rxjs/operators';
4
4
  import { GanttViewType, GanttGroupInternal, GanttItemInternal } from './class';
5
5
  import { createViewFactory } from './views/factory';
@@ -16,7 +16,9 @@ export class GanttUpper {
16
16
  this.cdr = cdr;
17
17
  this.ngZone = ngZone;
18
18
  this.config = config;
19
+ // eslint-disable-next-line @angular-eslint/no-input-rename
19
20
  this.originItems = [];
21
+ // eslint-disable-next-line @angular-eslint/no-input-rename
20
22
  this.originGroups = [];
21
23
  this.viewType = GanttViewType.month;
22
24
  this.showTodayLine = true;
@@ -165,7 +167,7 @@ export class GanttUpper {
165
167
  initSelectionModel() {
166
168
  return new SelectionModel(this.multiple, []);
167
169
  }
168
- onInit() {
170
+ ngOnInit() {
169
171
  this.styles = Object.assign({}, defaultStyles, this.styles);
170
172
  this.viewOptions.dateFormat = Object.assign({}, defaultConfig.dateFormat, this.config.dateFormat, this.viewOptions.dateFormat);
171
173
  this.createView();
@@ -174,25 +176,32 @@ export class GanttUpper {
174
176
  this.computeRefs();
175
177
  this.initSelectionModel();
176
178
  this.firstChange = false;
177
- this.ngZone.onStable.pipe(take(1)).subscribe(() => {
178
- this.element.style.opacity = '1';
179
- this.dragContainer.dragStarted.subscribe((event) => {
180
- this.dragStarted.emit(event);
181
- });
182
- this.dragContainer.dragMoved.subscribe((event) => {
183
- this.dragMoved.emit(event);
184
- });
185
- this.dragContainer.dragEnded.subscribe((event) => {
186
- this.dragEnded.emit(event);
187
- this.computeRefs();
188
- this.detectChanges();
179
+ // Note: the zone may be nooped through `BootstrapOptions` when bootstrapping the root module. This means
180
+ // the `onStable` will never emit any value.
181
+ const onStable$ = this.ngZone.isStable ? from(Promise.resolve()) : this.ngZone.onStable.pipe(take(1));
182
+ // Normally this isn't in the zone, but it can cause performance regressions for apps
183
+ // using `zone-patch-rxjs` because it'll trigger a change detection when it unsubscribes.
184
+ this.ngZone.runOutsideAngular(() => {
185
+ onStable$.pipe(takeUntil(this.unsubscribe$)).subscribe(() => {
186
+ this.element.style.opacity = '1';
187
+ this.dragContainer.dragStarted.pipe(takeUntil(this.unsubscribe$)).subscribe((event) => {
188
+ this.dragStarted.emit(event);
189
+ });
190
+ this.dragContainer.dragMoved.pipe(takeUntil(this.unsubscribe$)).subscribe((event) => {
191
+ this.dragMoved.emit(event);
192
+ });
193
+ this.dragContainer.dragEnded.pipe(takeUntil(this.unsubscribe$)).subscribe((event) => {
194
+ this.dragEnded.emit(event);
195
+ this.computeRefs();
196
+ this.detectChanges();
197
+ });
189
198
  });
190
199
  });
191
200
  this.view.start$.pipe(skip(1), takeUntil(this.unsubscribe$)).subscribe(() => {
192
201
  this.computeRefs();
193
202
  });
194
203
  }
195
- onChanges(changes) {
204
+ ngOnChanges(changes) {
196
205
  if (!this.firstChange) {
197
206
  if (changes.viewType && changes.viewType.currentValue) {
198
207
  this.createView();
@@ -209,7 +218,7 @@ export class GanttUpper {
209
218
  }
210
219
  }
211
220
  }
212
- onDestroy() {
221
+ ngOnDestroy() {
213
222
  this.unsubscribe$.next();
214
223
  this.unsubscribe$.complete();
215
224
  }
@@ -264,7 +273,7 @@ export class GanttUpper {
264
273
  }
265
274
  }
266
275
  GanttUpper.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.1.5", ngImport: i0, type: GanttUpper, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: i0.NgZone }, { token: GANTT_GLOBAL_CONFIG }], target: i0.ɵɵFactoryTarget.Directive });
267
- GanttUpper.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "12.1.5", type: GanttUpper, inputs: { originItems: ["items", "originItems"], originGroups: ["groups", "originGroups"], viewType: "viewType", start: "start", end: "end", showTodayLine: "showTodayLine", draggable: "draggable", styles: "styles", viewOptions: "viewOptions", linkOptions: "linkOptions", disabledLoadOnScroll: "disabledLoadOnScroll", selectable: "selectable", multiple: "multiple" }, outputs: { loadOnScroll: "loadOnScroll", dragStarted: "dragStarted", dragMoved: "dragMoved", dragEnded: "dragEnded", barClick: "barClick" }, host: { properties: { "class.gantt": "this.ganttClass" } }, queries: [{ propertyName: "barTemplate", first: true, predicate: ["bar"], descendants: true, static: true }, { propertyName: "rangeTemplate", first: true, predicate: ["range"], descendants: true, static: true }, { propertyName: "itemTemplate", first: true, predicate: ["item"], descendants: true, static: true }, { propertyName: "groupTemplate", first: true, predicate: ["group"], descendants: true, static: true }, { propertyName: "groupHeaderTemplate", first: true, predicate: ["groupHeader"], descendants: true, static: true }], ngImport: i0 });
276
+ GanttUpper.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "12.1.5", type: GanttUpper, inputs: { originItems: ["items", "originItems"], originGroups: ["groups", "originGroups"], viewType: "viewType", start: "start", end: "end", showTodayLine: "showTodayLine", draggable: "draggable", styles: "styles", viewOptions: "viewOptions", linkOptions: "linkOptions", disabledLoadOnScroll: "disabledLoadOnScroll", selectable: "selectable", multiple: "multiple" }, outputs: { loadOnScroll: "loadOnScroll", dragStarted: "dragStarted", dragMoved: "dragMoved", dragEnded: "dragEnded", barClick: "barClick" }, host: { properties: { "class.gantt": "this.ganttClass" } }, queries: [{ propertyName: "barTemplate", first: true, predicate: ["bar"], descendants: true, static: true }, { propertyName: "rangeTemplate", first: true, predicate: ["range"], descendants: true, static: true }, { propertyName: "itemTemplate", first: true, predicate: ["item"], descendants: true, static: true }, { propertyName: "groupTemplate", first: true, predicate: ["group"], descendants: true, static: true }, { propertyName: "groupHeaderTemplate", first: true, predicate: ["groupHeader"], descendants: true, static: true }], usesOnChanges: true, ngImport: i0 });
268
277
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.1.5", ngImport: i0, type: GanttUpper, decorators: [{
269
278
  type: Directive
270
279
  }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: i0.NgZone }, { type: undefined, decorators: [{
@@ -328,4 +337,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.1.5", ngImpor
328
337
  args: ['class.gantt']
329
338
  }] } });
330
339
  export const GANTT_UPPER_TOKEN = new InjectionToken('GANTT_UPPER_TOKEN');
331
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2FudHQtdXBwZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9wYWNrYWdlcy9nYW50dC9zcmMvZ2FudHQtdXBwZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILEtBQUssRUFFTCxNQUFNLEVBQ04sWUFBWSxFQUNaLFlBQVksRUFFWixXQUFXLEVBSVgsY0FBYyxFQUNkLFNBQVMsRUFDVCxNQUFNLEVBQ1QsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQixPQUFPLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN2RCxPQUFPLEVBR0gsYUFBYSxFQUdiLGtCQUFrQixFQUNsQixpQkFBaUIsRUFHcEIsTUFBTSxTQUFTLENBQUM7QUFFakIsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDcEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUN6QyxPQUFPLEVBQWUsYUFBYSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDNUQsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsY0FBYyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRWhGLE9BQU8sRUFBRSxtQkFBbUIsRUFBcUIsYUFBYSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFdkYsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzFELE9BQU8sRUFBZ0IscUJBQXFCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQzs7QUFHNUUsTUFBTSxPQUFnQixVQUFVO0lBK0c1QixZQUNjLFVBQW1DLEVBQ25DLEdBQXNCLEVBQ3RCLE1BQWMsRUFDWSxNQUF5QjtRQUhuRCxlQUFVLEdBQVYsVUFBVSxDQUF5QjtRQUNuQyxRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQUN0QixXQUFN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dXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgSW5wdXQsXG4gICAgVGVtcGxhdGVSZWYsXG4gICAgT3V0cHV0LFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBDb250ZW50Q2hpbGQsXG4gICAgRWxlbWVudFJlZixcbiAgICBIb3N0QmluZGluZyxcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBOZ1pvbmUsXG4gICAgU2ltcGxlQ2hhbmdlcyxcbiAgICBJbmplY3Rpb25Ub2tlbixcbiAgICBEaXJlY3RpdmUsXG4gICAgSW5qZWN0XG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgdGFrZVVudGlsLCB0YWtlLCBza2lwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtcbiAgICBHYW50dEl0ZW0sXG4gICAgR2FudHRHcm91cCxcbiAgICBHYW50dFZpZXdUeXBlLFxuICAgIEdhbnR0TG9hZE9uU2Nyb2xsRXZlbnQsXG4gICAgR2FudHREcmFnRXZlbnQsXG4gICAgR2FudHRHcm91cEludGVybmFsLFxuICAgIEdhbnR0SXRlbUludGVybmFsLFxuICAgIEdhbnR0QmFyQ2xpY2tFdmVudCxcbiAgICBHYW50dExpbmtEcmFnRXZlbnRcbn0gZnJvbSAnLi9jbGFzcyc7XG5pbXBvcnQgeyBHYW50dFZpZXcsIEdhbnR0Vmlld09wdGlvbnMgfSBmcm9tICcuL3ZpZXdzL3ZpZXcnO1xuaW1wb3J0IHsgY3JlYXRlVmlld0ZhY3RvcnkgfSBmcm9tICcuL3ZpZXdzL2ZhY3RvcnknO1xuaW1wb3J0IHsgR2FudHREYXRlIH0gZnJvbSAnLi91dGlscy9kYXRlJztcbmltcG9ydCB7IEdhbnR0U3R5bGVzLCBkZWZhdWx0U3R5bGVzIH0gZnJvbSAnLi9nYW50dC5zdHlsZXMnO1xuaW1wb3J0IHsgdW5pcUJ5LCBmbGF0dGVuLCByZWN1cnNpdmVJdGVtcywgZ2V0RmxhdEl0ZW1zIH0gZnJvbSAnLi91dGlscy9oZWxwZXJzJztcbmltcG9ydCB7IEdhbnR0RHJhZ0NvbnRhaW5lciB9IGZyb20gJy4vZ2FudHQtZHJhZy1jb250YWluZXInO1xuaW1wb3J0IHsgR0FOVFRfR0xPQkFMX0NPTkZJRywgR2FudHRHbG9iYWxDb25maWcsIGRlZmF1bHRDb25maWcgfSBmcm9tICcuL2dhbnR0LmNvbmZpZyc7XG5pbXBvcnQgeyBHYW50dExpbmtPcHRpb25zIH0gZnJvbSAnLi9jbGFzcy9saW5rJztcbmltcG9ydCB7IFNlbGVjdGlvbk1vZGVsIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvbGxlY3Rpb25zJztcbmltcG9ydCB7IEJvb2xlYW5JbnB1dCwgY29lcmNlQm9vbGVhblByb3BlcnR5IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvZXJjaW9uJztcblxuQERpcmVjdGl2ZSgpXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgR2FudHRVcHBlciB7XG4gICAgQElucHV0KCdpdGVtcycpIG9yaWdpbkl0ZW1zOiBHYW50dEl0ZW1bXSA9IFtdO1xuXG4gICAgQElucHV0KCdncm91cHMnKSBvcmlnaW5Hcm91cHM6IEdhbnR0R3JvdXBbXSA9IFtdO1xuXG4gICAgQElucHV0KCkgdmlld1R5cGU6IEdhbnR0Vmlld1R5cGUgPSBHYW50dFZpZXdUeXBlLm1vbnRoO1xuXG4gICAgQElucHV0KCkgc3RhcnQ6IG51bWJlcjtcblxuICAgIEBJbnB1dCgpIGVuZDogbnVtYmVyO1xuXG4gICAgQElucHV0KCkgc2hvd1RvZGF5TGluZSA9IHRydWU7XG5cbiAgICBASW5wdXQoKSBkcmFnZ2FibGU6IGJvb2xlYW47XG5cbiAgICBASW5wdXQoKSBzdHlsZXM6IEdhbnR0U3R5bGVzO1xuXG4gICAgQElucHV0KCkgdmlld09wdGlvbnM6IEdhbnR0Vmlld09wdGlvbnMgPSB7fTtcblxuICAgIEBJbnB1dCgpIHNldCBsaW5rT3B0aW9ucyhvcHRpb25zOiBHYW50dExpbmtPcHRpb25zKSB7XG4gICAgICAgIHRoaXMuX2xpbmtPcHRpb25zID0gb3B0aW9ucztcbiAgICB9XG5cbiAgICBnZXQgbGlua09wdGlvbnMoKSB7XG4gICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBkZWZhdWx0Q29uZmlnLmxpbmtPcHRpb25zLCB0aGlzLmNvbmZpZy5saW5rT3B0aW9ucywgdGhpcy5fbGlua09wdGlvbnMpO1xuICAgIH1cblxuICAgIEBJbnB1dCgpIGRpc2FibGVkTG9hZE9uU2Nyb2xsOiBib29sZWFuO1xuXG4gICAgQElucHV0KClcbiAgICBzZXQgc2VsZWN0YWJsZSh2YWx1ZTogQm9vbGVhbklucHV0KSB7XG4gICAgICAgIHRoaXMuX3NlbGVjdGFibGUgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpO1xuICAgICAgICBpZiAodGhpcy5fc2VsZWN0YWJsZSkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25Nb2RlbCA9IHRoaXMuaW5pdFNlbGVjdGlvbk1vZGVsKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbk1vZGVsPy5jbGVhcigpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0IHNlbGVjdGFibGUoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zZWxlY3RhYmxlO1xuICAgIH1cblxuICAgIEBJbnB1dCgpXG4gICAgc2V0IG11bHRpcGxlKHZhbHVlOiBCb29sZWFuSW5wdXQpIHtcbiAgICAgICAgdGhpcy5fbXVsdGlwbGUgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpO1xuICAgICAgICBpZiAodGhpcy5zZWxlY3RhYmxlKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbk1vZGVsID0gdGhpcy5pbml0U2VsZWN0aW9uTW9kZWwoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldCBtdWx0aXBsZSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX211bHRpcGxlO1xuICAgIH1cblxuICAgIEBPdXRwdXQoKSBsb2FkT25TY3JvbGwgPSBuZXcgRXZlbnRFbWl0dGVyPEdhbnR0TG9hZE9uU2Nyb2xsRXZlbnQ+KCk7XG5cbiAgICBAT3V0cHV0KCkgZHJhZ1N0YXJ0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPEdhbnR0RHJhZ0V2ZW50PigpO1xuXG4gICAgQE91dHB1dCgpIGRyYWdNb3ZlZCA9IG5ldyBFdmVudEVtaXR0ZXI8R2FudHREcmFnRXZlbnQ+KCk7XG5cbiAgICBAT3V0cHV0KCkgZHJhZ0VuZGVkID0gbmV3IEV2ZW50RW1pdHRlcjxHYW50dERyYWdFdmVudD4oKTtcblxuICAgIEBPdXRwdXQoKSBiYXJDbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8R2FudHRCYXJDbGlja0V2ZW50PigpO1xuXG4gICAgQENvbnRlbnRDaGlsZCgnYmFyJywgeyBzdGF0aWM6IHRydWUgfSkgYmFyVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgICBAQ29udGVudENoaWxkKCdyYW5nZScsIHsgc3RhdGljOiB0cnVlIH0pIHJhbmdlVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgICBAQ29udGVudENoaWxkKCdpdGVtJywgeyBzdGF0aWM6IHRydWUgfSkgaXRlbVRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gICAgQENvbnRlbnRDaGlsZCgnZ3JvdXAnLCB7IHN0YXRpYzogdHJ1ZSB9KSBncm91cFRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gICAgQENvbnRlbnRDaGlsZCgnZ3JvdXBIZWFkZXInLCB7IHN0YXRpYzogdHJ1ZSB9KSBncm91cEhlYWRlclRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gICAgcHVibGljIGxpbmthYmxlOiBib29sZWFuO1xuXG4gICAgcHVibGljIGxpbmtEcmFnRW5kZWQgPSBuZXcgRXZlbnRFbWl0dGVyPEdhbnR0TGlua0RyYWdFdmVudD4oKTtcblxuICAgIHB1YmxpYyB2aWV3OiBHYW50dFZpZXc7XG5cbiAgICBwdWJsaWMgaXRlbXM6IEdhbnR0SXRlbUludGVybmFsW10gPSBbXTtcblxuICAgIHB1YmxpYyBncm91cHM6IEdhbnR0R3JvdXBJbnRlcm5hbFtdID0gW107XG5cbiAgICBwdWJsaWMgdmlld0NoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8R2FudHRWaWV3PigpO1xuXG4gICAgcHVibGljIGV4cGFuZENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuICAgIHB1YmxpYyBnZXQgZWxlbWVudCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O1xuICAgIH1cblxuICAgIHB1YmxpYyBmaXJzdENoYW5nZSA9IHRydWU7XG5cbiAgICBwdWJsaWMgZHJhZ0NvbnRhaW5lcjogR2FudHREcmFnQ29udGFpbmVyO1xuXG4gICAgcHVibGljIHVuc3Vic2NyaWJlJCA9IG5ldyBTdWJqZWN0KCk7XG5cbiAgICBwdWJsaWMgc2VsZWN0aW9uTW9kZWw6IFNlbGVjdGlvbk1vZGVsPHN0cmluZz47XG5cbiAgICBwcml2YXRlIGdyb3Vwc01hcDogeyBba2V5OiBzdHJpbmddOiBHYW50dEdyb3VwSW50ZXJuYWwgfTtcblxuICAgIHByaXZhdGUgX3NlbGVjdGFibGUgPSBmYWxzZTtcblxuICAgIHByaXZhdGUgX211bHRpcGxlID0gZmFsc2U7XG5cbiAgICBwcml2YXRlIF9saW5rT3B0aW9uczogR2FudHRMaW5rT3B0aW9ucztcblxuICAgIEBIb3N0QmluZGluZygnY2xhc3MuZ2FudHQnKSBnYW50dENsYXNzID0gdHJ1ZTtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcm90ZWN0ZWQgZWxlbWVudFJlZjogRWxlbWVudFJlZjxIVE1MRWxlbWVudD4sXG4gICAgICAgIHByb3RlY3RlZCBjZHI6IENoYW5nZURldGVjdG9yUmVmLFxuICAgICAgICBwcm90ZWN0ZWQgbmdab25lOiBOZ1pvbmUsXG4gICAgICAgIEBJbmplY3QoR0FOVFRfR0xPQkFMX0NPTkZJRykgcHVibGljIGNvbmZpZzogR2FudHRHbG9iYWxDb25maWdcbiAgICApIHt9XG5cbiAgICBwcml2YXRlIGNyZWF0ZVZpZXcoKSB7XG4gICAgICAgIGNvbnN0IHZpZXdEYXRlID0gdGhpcy5nZXRWaWV3RGF0ZSgpO1xuICAgICAgICB0aGlzLnZpZXcgPSBjcmVhdGVWaWV3RmFjdG9yeSh0aGlzLnZpZXdUeXBlLCB2aWV3RGF0ZS5zdGFydCwgdmlld0RhdGUuZW5kLCB0aGlzLnZpZXdPcHRpb25zKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldHVwR3JvdXBzKCkge1xuICAgICAgICBjb25zdCBjb2xsYXBzZWRJZHMgPSB0aGlzLmdyb3Vwcy5maWx0ZXIoKGdyb3VwKSA9PiBncm91cC5leHBhbmRlZCA9PT0gZmFsc2UpLm1hcCgoZ3JvdXApID0+IGdyb3VwLmlkKTtcbiAgICAgICAgdGhpcy5ncm91cHNNYXAgPSB7fTtcbiAgICAgICAgdGhpcy5ncm91cHMgPSBbXTtcbiAgICAgICAgdGhpcy5vcmlnaW5Hcm91cHMuZm9yRWFjaCgob3JpZ2luKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBncm91cCA9IG5ldyBHYW50dEdyb3VwSW50ZXJuYWwob3JpZ2luKTtcbiAgICAgICAgICAgIGdyb3VwLmV4cGFuZGVkID0gIWNvbGxhcHNlZElkcy5pbmNsdWRlcyhncm91cC5pZCk7XG4gICAgICAgICAgICB0aGlzLmdyb3Vwc01hcFtncm91cC5pZF0gPSBncm91cDtcbiAgICAgICAgICAgIHRoaXMuZ3JvdXBzLnB1c2goZ3JvdXApO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldHVwSXRlbXMoKSB7XG4gICAgICAgIHRoaXMub3JpZ2luSXRlbXMgPSB1bmlxQnkodGhpcy5vcmlnaW5JdGVtcywgJ2lkJyk7XG4gICAgICAgIHRoaXMuaXRlbXMgPSBbXTtcbiAgICAgICAgaWYgKHRoaXMuZ3JvdXBzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRoaXMub3JpZ2luSXRlbXMuZm9yRWFjaCgob3JpZ2luKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgZ3JvdXAgPSB0aGlzLmdyb3Vwc01hcFtvcmlnaW4uZ3JvdXBfaWRdO1xuICAgICAgICAgICAgICAgIGlmIChncm91cCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBpdGVtID0gbmV3IEdhbnR0SXRlbUludGVybmFsKG9yaWdpbiwgeyB2aWV3VHlwZTogdGhpcy52aWV3VHlwZSB9KTtcbiAgICAgICAgICAgICAgICAgICAgZ3JvdXAuaXRlbXMucHVzaChpdGVtKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMub3JpZ2luSXRlbXMuZm9yRWFjaCgob3JpZ2luKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgaXRlbSA9IG5ldyBHYW50dEl0ZW1JbnRlcm5hbChvcmlnaW4sIHsgdmlld1R5cGU6IHRoaXMudmlld1R5cGUgfSk7XG4gICAgICAgICAgICAgICAgdGhpcy5pdGVtcy5wdXNoKGl0ZW0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHNldHVwRXhwYW5kZWRTdGF0ZSgpIHtcbiAgICAgICAgdGhpcy5vcmlnaW5JdGVtcyA9IHVuaXFCeSh0aGlzLm9yaWdpbkl0ZW1zLCAnaWQnKTtcbiAgICAgICAgbGV0IGl0ZW1zOiBHYW50dEl0ZW1JbnRlcm5hbFtdID0gW107XG4gICAgICAgIGNvbnN0IGZsYXRPcmlnaW5JdGVtcyA9IGdldEZsYXRJdGVtcyh0aGlzLm9yaWdpbkl0ZW1zKTtcblxuICAgICAgICBpZiAodGhpcy5pdGVtcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBpdGVtcyA9IHJlY3Vyc2l2ZUl0ZW1zKHRoaXMuaXRlbXMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaXRlbXMgPSBmbGF0dGVuKHRoaXMuZ3JvdXBzLm1hcCgoZ3JvdXApID0+IHJlY3Vyc2l2ZUl0ZW1zKGdyb3VwLml0ZW1zKSkpO1xuICAgICAgICB9XG4gICAgICAgIGl0ZW1zLmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgICAgICAgIGlmIChpdGVtLm9yaWdpbi5leHBhbmRlZCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG5ld0l0ZW0gPSBmbGF0T3JpZ2luSXRlbXMuZmluZCgob3JpZ2luSXRlbSkgPT4gb3JpZ2luSXRlbS5pZCA9PT0gaXRlbS5pZCk7XG4gICAgICAgICAgICAgICAgaWYgKG5ld0l0ZW0pIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG5ld0l0ZW0uZXhwYW5kZWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbmV3SXRlbS5leHBhbmRlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0Vmlld0RhdGUoKSB7XG4gICAgICAgIGxldCBzdGFydCA9IHRoaXMuc3RhcnQ7XG4gICAgICAgIGxldCBlbmQgPSB0aGlzLmVuZDtcbiAgICAgICAgaWYgKCF0aGlzLnN0YXJ0IHx8ICF0aGlzLmVuZCkge1xuICAgICAgICAgICAgdGhpcy5vcmlnaW5JdGVtcy5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGl0ZW0uc3RhcnQgJiYgIXRoaXMuc3RhcnQpIHtcbiAgICAgICAgICAgICAgICAgICAgc3RhcnQgPSBzdGFydCA/IE1hdGgubWluKHN0YXJ0LCBpdGVtLnN0YXJ0KSA6IGl0ZW0uc3RhcnQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChpdGVtLmVuZCAmJiAhdGhpcy5lbmQpIHtcbiAgICAgICAgICAgICAgICAgICAgZW5kID0gZW5kID8gTWF0aC5tYXgoZW5kLCBpdGVtLmVuZCkgOiBpdGVtLmVuZDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgc3RhcnQ6IHtcbiAgICAgICAgICAgICAgICBkYXRlOiBuZXcgR2FudHREYXRlKHN0YXJ0KSxcbiAgICAgICAgICAgICAgICBpc0N1c3RvbTogdGhpcy5zdGFydCA/IHRydWUgOiBmYWxzZVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVuZDoge1xuICAgICAgICAgICAgICAgIGRhdGU6IG5ldyBHYW50dERhdGUoZW5kKSxcbiAgICAgICAgICAgICAgICBpc0N1c3RvbTogdGhpcy5lbmQgPyB0cnVlIDogZmFsc2VcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBjb21wdXRlUmVmcygpIHtcbiAgICAgICAgdGhpcy5ncm91cHMuZm9yRWFjaCgoZ3JvdXApID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGdyb3VwSXRlbXMgPSByZWN1cnNpdmVJdGVtcyhncm91cC5pdGVtcyk7XG4gICAgICAgICAgICB0aGlzLmNvbXB1dGVJdGVtc1JlZnMoLi4uZ3JvdXBJdGVtcyk7XG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBpdGVtcyA9IHJlY3Vyc2l2ZUl0ZW1zKHRoaXMuaXRlbXMpO1xuICAgICAgICB0aGlzLmNvbXB1dGVJdGVtc1JlZnMoLi4uaXRlbXMpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZXhwYW5kR3JvdXBzKGV4cGFuZGVkOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuZ3JvdXBzLmZvckVhY2goKGdyb3VwKSA9PiB7XG4gICAgICAgICAgICBncm91cC5zZXRFeHBhbmQoZXhwYW5kZWQpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5leHBhbmRDaGFuZ2UubmV4dCgpO1xuICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpbml0U2VsZWN0aW9uTW9kZWwoKSB7XG4gICAgICAgIHJldHVybiBuZXcgU2VsZWN0aW9uTW9kZWwodGhpcy5tdWx0aXBsZSwgW10pO1xuICAgIH1cblxuICAgIG9uSW5pdCgpIHtcbiAgICAgICAgdGhpcy5zdHlsZXMgPSBPYmplY3QuYXNzaWduKHt9LCBkZWZhdWx0U3R5bGVzLCB0aGlzLnN0eWxlcyk7XG4gICAgICAgIHRoaXMudmlld09wdGlvbnMuZGF0ZUZvcm1hdCA9IE9iamVjdC5hc3NpZ24oe30sIGRlZmF1bHRDb25maWcuZGF0ZUZvcm1hdCwgdGhpcy5jb25maWcuZGF0ZUZvcm1hdCwgdGhpcy52aWV3T3B0aW9ucy5kYXRlRm9ybWF0KTtcbiAgICAgICAgdGhpcy5jcmVhdGVWaWV3KCk7XG4gICAgICAgIHRoaXMuc2V0dXBHcm91cHMoKTtcbiAgICAgICAgdGhpcy5zZXR1cEl0ZW1zKCk7XG4gICAgICAgIHRoaXMuY29tcHV0ZVJlZnMoKTtcbiAgICAgICAgdGhpcy5pbml0U2VsZWN0aW9uTW9kZWwoKTtcbiAgICAgICAgdGhpcy5maXJzdENoYW5nZSA9IGZhbHNlO1xuXG4gICAgICAgIHRoaXMubmdab25lLm9uU3RhYmxlLnBpcGUodGFrZSgxKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudC5zdHlsZS5vcGFjaXR5ID0gJzEnO1xuXG4gICAgICAgICAgICB0aGlzLmRyYWdDb250YWluZXIuZHJhZ1N0YXJ0ZWQuc3Vic2NyaWJlKChldmVudCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuZHJhZ1N0YXJ0ZWQuZW1pdChldmVudCk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgdGhpcy5kcmFnQ29udGFpbmVyLmRyYWdNb3ZlZC5zdWJzY3JpYmUoKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5kcmFnTW92ZWQuZW1pdChldmVudCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMuZHJhZ0NvbnRhaW5lci5kcmFnRW5kZWQuc3Vic2NyaWJlKChldmVudCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuZHJhZ0VuZGVkLmVtaXQoZXZlbnQpO1xuICAgICAgICAgICAgICAgIHRoaXMuY29tcHV0ZVJlZnMoKTtcbiAgICAgICAgICAgICAgICB0aGlzLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLnZpZXcuc3RhcnQkLnBpcGUoc2tpcCgxKSwgdGFrZVVudGlsKHRoaXMudW5zdWJzY3JpYmUkKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuY29tcHV0ZVJlZnMoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgb25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcbiAgICAgICAgaWYgKCF0aGlzLmZpcnN0Q2hhbmdlKSB7XG4gICAgICAgICAgICBpZiAoY2hhbmdlcy52aWV3VHlwZSAmJiBjaGFuZ2VzLnZpZXdUeXBlLmN1cnJlbnRWYWx1ZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuY3JlYXRlVmlldygpO1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0dXBHcm91cHMoKTtcbiAgICAgICAgICAgICAgICB0aGlzLnNldHVwSXRlbXMoKTtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbXB1dGVSZWZzKCk7XG4gICAgICAgICAgICAgICAgdGhpcy52aWV3Q2hhbmdlLmVtaXQodGhpcy52aWV3KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChjaGFuZ2VzLm9yaWdpbkl0ZW1zIHx8IGNoYW5nZXMub3JpZ2luR3JvdXBzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXR1cEV4cGFuZGVkU3RhdGUoKTtcbiAgICAgICAgICAgICAgICB0aGlzLnNldHVwR3JvdXBzKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXR1cEl0ZW1zKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5jb21wdXRlUmVmcygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25EZXN0cm95KCkge1xuICAgICAgICB0aGlzLnVuc3Vic2NyaWJlJC5uZXh0KCk7XG4gICAgICAgIHRoaXMudW5zdWJzY3JpYmUkLmNvbXBsZXRlKCk7XG4gICAgfVxuXG4gICAgY29tcHV0ZUl0ZW1zUmVmcyguLi5pdGVtczogR2FudHRJdGVtSW50ZXJuYWxbXSkge1xuICAgICAgICBpdGVtcy5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICAgICAgICBpdGVtLnVwZGF0ZVJlZnMoe1xuICAgICAgICAgICAgICAgIHdpZHRoOiBpdGVtLnN0YXJ0ICYmIGl0ZW0uZW5kID8gdGhpcy52aWV3LmdldERhdGVSYW5nZVdpZHRoKGl0ZW0uc3RhcnQuc3RhcnRPZkRheSgpLCBpdGVtLmVuZC5lbmRPZkRheSgpKSA6IDAsXG4gICAgICAgICAgICAgICAgeDogaXRlbS5zdGFydCA/IHRoaXMudmlldy5nZXRYUG9pbnRCeURhdGUoaXRlbS5zdGFydCkgOiAwLFxuICAgICAgICAgICAgICAgIHk6ICh0aGlzLnN0eWxlcy5saW5lSGVpZ2h0IC0gdGhpcy5zdHlsZXMuYmFySGVpZ2h0KSAvIDIgLSAxXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgdHJhY2tCeShpbmRleDogbnVtYmVyLCBpdGVtOiBHYW50dEdyb3VwSW50ZXJuYWwgfCBHYW50dEl0ZW1JbnRlcm5hbCkge1xuICAgICAgICByZXR1cm4gaXRlbS5pZCB8fCBpbmRleDtcbiAgICB9XG5cbiAgICBkZXRlY3RDaGFuZ2VzKCkge1xuICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuXG4gICAgZXhwYW5kR3JvdXAoZ3JvdXA6IEdhbnR0R3JvdXBJbnRlcm5hbCkge1xuICAgICAgICBncm91cC5zZXRFeHBhbmQoIWdyb3VwLmV4cGFuZGVkKTtcbiAgICAgICAgdGhpcy5leHBhbmRDaGFuZ2UuZW1pdCgpO1xuICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuXG4gICAgLy8gcHVibGljIGZ1bmN0aW9uc1xuXG4gICAgZXhwYW5kQWxsKCkge1xuICAgICAgICB0aGlzLmV4cGFuZEdyb3Vwcyh0cnVlKTtcbiAgICB9XG5cbiAgICBjb2xsYXBzZUFsbCgpIHtcbiAgICAgICAgdGhpcy5leHBhbmRHcm91cHMoZmFsc2UpO1xuICAgIH1cblxuICAgIGdldEdhbnR0SXRlbShpZDogc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldEdhbnR0SXRlbXMoW2lkXSlbMF0gfHwgbnVsbDtcbiAgICB9XG5cbiAgICBnZXRHYW50dEl0ZW1zKGlkczogc3RyaW5nW10pIHtcbiAgICAgICAgbGV0IGl0ZW1zOiBHYW50dEl0ZW1JbnRlcm5hbFtdID0gW107XG4gICAgICAgIGlmICh0aGlzLml0ZW1zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGl0ZW1zID0gcmVjdXJzaXZlSXRlbXModGhpcy5pdGVtcyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpdGVtcyA9IGZsYXR0ZW4odGhpcy5ncm91cHMubWFwKChncm91cCkgPT4gcmVjdXJzaXZlSXRlbXMoZ3JvdXAuaXRlbXMpKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGl0ZW1zLmZpbHRlcigoaXRlbSkgPT4gaWRzLmluY2x1ZGVzKGl0ZW0uaWQpKTtcbiAgICB9XG5cbiAgICBpc1NlbGVjdGVkKGlkOiBzdHJpbmcpIHtcbiAgICAgICAgaWYgKCF0aGlzLnNlbGVjdGFibGUpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMuc2VsZWN0aW9uTW9kZWwuaGFzVmFsdWUoKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLnNlbGVjdGlvbk1vZGVsLmlzU2VsZWN0ZWQoaWQpO1xuICAgIH1cbn1cblxuZXhwb3J0IGNvbnN0IEdBTlRUX1VQUEVSX1RPS0VOID0gbmV3IEluamVjdGlvblRva2VuPEdhbnR0VXBwZXI+KCdHQU5UVF9VUFBFUl9UT0tFTicpO1xuIl19
340
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2FudHQtdXBwZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9wYWNrYWdlcy9nYW50dC9zcmMvZ2FudHQtdXBwZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILEtBQUssRUFFTCxNQUFNLEVBQ04sWUFBWSxFQUNaLFlBQVksRUFFWixXQUFXLEVBSVgsY0FBYyxFQUNkLFNBQVMsRUFDVCxNQUFNLEVBSVQsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDckMsT0FBTyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDdkQsT0FBTyxFQUdILGFBQWEsRUFHYixrQkFBa0IsRUFDbEIsaUJBQWlCLEVBR3BCLE1BQU0sU0FBUyxDQUFDO0FBRWpCLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDekMsT0FBTyxFQUFlLGFBQWEsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzVELE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLGNBQWMsRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUVoRixPQUFPLEVBQUUsbUJBQW1CLEVBQXFCLGFBQWEsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXZGLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMxRCxPQUFPLEVBQWdCLHFCQUFxQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7O0FBRzVFLE1BQU0sT0FBZ0IsVUFBVTtJQWlINUIsWUFDYyxVQUFtQyxFQUNuQyxHQUFzQixFQUN0QixNQUFjLEVBQ1ksTUFBeUI7UUFIbkQsZUFBVSxHQUFWLFVBQVUsQ0FBeUI7UUFDbkMsUUFBRyxHQUFILEdBQUcsQ0FBbUI7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bEIsTUFBTTtnQkFFRyxTQUFTO3NCQUFsQixNQUFNO2dCQUVHLFFBQVE7c0JBQWpCLE1BQU07Z0JBRWdDLFdBQVc7c0JBQWpELFlBQVk7dUJBQUMsS0FBSyxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFFSSxhQUFhO3NCQUFyRCxZQUFZO3VCQUFDLE9BQU8sRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBRUMsWUFBWTtzQkFBbkQsWUFBWTt1QkFBQyxNQUFNLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQUVHLGFBQWE7c0JBQXJELFlBQVk7dUJBQUMsT0FBTyxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFFUSxtQkFBbUI7c0JBQWpFLFlBQVk7dUJBQUMsYUFBYSxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFvQ2pCLFVBQVU7c0JBQXJDLFdBQVc7dUJBQUMsYUFBYTs7QUEyTzlCLE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUFHLElBQUksY0FBYyxDQUFhLG1CQUFtQixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIElucHV0LFxuICAgIFRlbXBsYXRlUmVmLFxuICAgIE91dHB1dCxcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgQ29udGVudENoaWxkLFxuICAgIEVsZW1lbnRSZWYsXG4gICAgSG9zdEJpbmRpbmcsXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgTmdab25lLFxuICAgIFNpbXBsZUNoYW5nZXMsXG4gICAgSW5qZWN0aW9uVG9rZW4sXG4gICAgRGlyZWN0aXZlLFxuICAgIEluamVjdCxcbiAgICBPbkluaXQsXG4gICAgT25EZXN0cm95LFxuICAgIE9uQ2hhbmdlc1xufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGZyb20sIFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHRha2VVbnRpbCwgdGFrZSwgc2tpcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7XG4gICAgR2FudHRJdGVtLFxuICAgIEdhbnR0R3JvdXAsXG4gICAgR2FudHRWaWV3VHlwZSxcbiAgICBHYW50dExvYWRPblNjcm9sbEV2ZW50LFxuICAgIEdhbnR0RHJhZ0V2ZW50LFxuICAgIEdhbnR0R3JvdXBJbnRlcm5hbCxcbiAgICBHYW50dEl0ZW1JbnRlcm5hbCxcbiAgICBHYW50dEJhckNsaWNrRXZlbnQsXG4gICAgR2FudHRMaW5rRHJhZ0V2ZW50XG59IGZyb20gJy4vY2xhc3MnO1xuaW1wb3J0IHsgR2FudHRWaWV3LCBHYW50dFZpZXdPcHRpb25zIH0gZnJvbSAnLi92aWV3cy92aWV3JztcbmltcG9ydCB7IGNyZWF0ZVZpZXdGYWN0b3J5IH0gZnJvbSAnLi92aWV3cy9mYWN0b3J5JztcbmltcG9ydCB7IEdhbnR0RGF0ZSB9IGZyb20gJy4vdXRpbHMvZGF0ZSc7XG5pbXBvcnQgeyBHYW50dFN0eWxlcywgZGVmYXVsdFN0eWxlcyB9IGZyb20gJy4vZ2FudHQuc3R5bGVzJztcbmltcG9ydCB7IHVuaXFCeSwgZmxhdHRlbiwgcmVjdXJzaXZlSXRlbXMsIGdldEZsYXRJdGVtcyB9IGZyb20gJy4vdXRpbHMvaGVscGVycyc7XG5pbXBvcnQgeyBHYW50dERyYWdDb250YWluZXIgfSBmcm9tICcuL2dhbnR0LWRyYWctY29udGFpbmVyJztcbmltcG9ydCB7IEdBTlRUX0dMT0JBTF9DT05GSUcsIEdhbnR0R2xvYmFsQ29uZmlnLCBkZWZhdWx0Q29uZmlnIH0gZnJvbSAnLi9nYW50dC5jb25maWcnO1xuaW1wb3J0IHsgR2FudHRMaW5rT3B0aW9ucyB9IGZyb20gJy4vY2xhc3MvbGluayc7XG5pbXBvcnQgeyBTZWxlY3Rpb25Nb2RlbCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2xsZWN0aW9ucyc7XG5pbXBvcnQgeyBCb29sZWFuSW5wdXQsIGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2VyY2lvbic7XG5cbkBEaXJlY3RpdmUoKVxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEdhbnR0VXBwZXIgaW1wbGVtZW50cyBPbkNoYW5nZXMsIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L25vLWlucHV0LXJlbmFtZVxuICAgIEBJbnB1dCgnaXRlbXMnKSBvcmlnaW5JdGVtczogR2FudHRJdGVtW10gPSBbXTtcblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvbm8taW5wdXQtcmVuYW1lXG4gICAgQElucHV0KCdncm91cHMnKSBvcmlnaW5Hcm91cHM6IEdhbnR0R3JvdXBbXSA9IFtdO1xuXG4gICAgQElucHV0KCkgdmlld1R5cGU6IEdhbnR0Vmlld1R5cGUgPSBHYW50dFZpZXdUeXBlLm1vbnRoO1xuXG4gICAgQElucHV0KCkgc3RhcnQ6IG51bWJlcjtcblxuICAgIEBJbnB1dCgpIGVuZDogbnVtYmVyO1xuXG4gICAgQElucHV0KCkgc2hvd1RvZGF5TGluZSA9IHRydWU7XG5cbiAgICBASW5wdXQoKSBkcmFnZ2FibGU6IGJvb2xlYW47XG5cbiAgICBASW5wdXQoKSBzdHlsZXM6IEdhbnR0U3R5bGVzO1xuXG4gICAgQElucHV0KCkgdmlld09wdGlvbnM6IEdhbnR0Vmlld09wdGlvbnMgPSB7fTtcblxuICAgIEBJbnB1dCgpIHNldCBsaW5rT3B0aW9ucyhvcHRpb25zOiBHYW50dExpbmtPcHRpb25zKSB7XG4gICAgICAgIHRoaXMuX2xpbmtPcHRpb25zID0gb3B0aW9ucztcbiAgICB9XG5cbiAgICBnZXQgbGlua09wdGlvbnMoKSB7XG4gICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBkZWZhdWx0Q29uZmlnLmxpbmtPcHRpb25zLCB0aGlzLmNvbmZpZy5saW5rT3B0aW9ucywgdGhpcy5fbGlua09wdGlvbnMpO1xuICAgIH1cblxuICAgIEBJbnB1dCgpIGRpc2FibGVkTG9hZE9uU2Nyb2xsOiBib29sZWFuO1xuXG4gICAgQElucHV0KClcbiAgICBzZXQgc2VsZWN0YWJsZSh2YWx1ZTogQm9vbGVhbklucHV0KSB7XG4gICAgICAgIHRoaXMuX3NlbGVjdGFibGUgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpO1xuICAgICAgICBpZiAodGhpcy5fc2VsZWN0YWJsZSkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25Nb2RlbCA9IHRoaXMuaW5pdFNlbGVjdGlvbk1vZGVsKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbk1vZGVsPy5jbGVhcigpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0IHNlbGVjdGFibGUoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zZWxlY3RhYmxlO1xuICAgIH1cblxuICAgIEBJbnB1dCgpXG4gICAgc2V0IG11bHRpcGxlKHZhbHVlOiBCb29sZWFuSW5wdXQpIHtcbiAgICAgICAgdGhpcy5fbXVsdGlwbGUgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpO1xuICAgICAgICBpZiAodGhpcy5zZWxlY3RhYmxlKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbk1vZGVsID0gdGhpcy5pbml0U2VsZWN0aW9uTW9kZWwoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldCBtdWx0aXBsZSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX211bHRpcGxlO1xuICAgIH1cblxuICAgIEBPdXRwdXQoKSBsb2FkT25TY3JvbGwgPSBuZXcgRXZlbnRFbWl0dGVyPEdhbnR0TG9hZE9uU2Nyb2xsRXZlbnQ+KCk7XG5cbiAgICBAT3V0cHV0KCkgZHJhZ1N0YXJ0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPEdhbnR0RHJhZ0V2ZW50PigpO1xuXG4gICAgQE91dHB1dCgpIGRyYWdNb3ZlZCA9IG5ldyBFdmVudEVtaXR0ZXI8R2FudHREcmFnRXZlbnQ+KCk7XG5cbiAgICBAT3V0cHV0KCkgZHJhZ0VuZGVkID0gbmV3IEV2ZW50RW1pdHRlcjxHYW50dERyYWdFdmVudD4oKTtcblxuICAgIEBPdXRwdXQoKSBiYXJDbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8R2FudHRCYXJDbGlja0V2ZW50PigpO1xuXG4gICAgQENvbnRlbnRDaGlsZCgnYmFyJywgeyBzdGF0aWM6IHRydWUgfSkgYmFyVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgICBAQ29udGVudENoaWxkKCdyYW5nZScsIHsgc3RhdGljOiB0cnVlIH0pIHJhbmdlVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgICBAQ29udGVudENoaWxkKCdpdGVtJywgeyBzdGF0aWM6IHRydWUgfSkgaXRlbVRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gICAgQENvbnRlbnRDaGlsZCgnZ3JvdXAnLCB7IHN0YXRpYzogdHJ1ZSB9KSBncm91cFRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gICAgQENvbnRlbnRDaGlsZCgnZ3JvdXBIZWFkZXInLCB7IHN0YXRpYzogdHJ1ZSB9KSBncm91cEhlYWRlclRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gICAgcHVibGljIGxpbmthYmxlOiBib29sZWFuO1xuXG4gICAgcHVibGljIGxpbmtEcmFnRW5kZWQgPSBuZXcgRXZlbnRFbWl0dGVyPEdhbnR0TGlua0RyYWdFdmVudD4oKTtcblxuICAgIHB1YmxpYyB2aWV3OiBHYW50dFZpZXc7XG5cbiAgICBwdWJsaWMgaXRlbXM6IEdhbnR0SXRlbUludGVybmFsW10gPSBbXTtcblxuICAgIHB1YmxpYyBncm91cHM6IEdhbnR0R3JvdXBJbnRlcm5hbFtdID0gW107XG5cbiAgICBwdWJsaWMgdmlld0NoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8R2FudHRWaWV3PigpO1xuXG4gICAgcHVibGljIGV4cGFuZENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuICAgIHB1YmxpYyBnZXQgZWxlbWVudCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O1xuICAgIH1cblxuICAgIHB1YmxpYyBmaXJzdENoYW5nZSA9IHRydWU7XG5cbiAgICBwdWJsaWMgZHJhZ0NvbnRhaW5lcjogR2FudHREcmFnQ29udGFpbmVyO1xuXG4gICAgcHVibGljIHVuc3Vic2NyaWJlJCA9IG5ldyBTdWJqZWN0KCk7XG5cbiAgICBwdWJsaWMgc2VsZWN0aW9uTW9kZWw6IFNlbGVjdGlvbk1vZGVsPHN0cmluZz47XG5cbiAgICBwcml2YXRlIGdyb3Vwc01hcDogeyBba2V5OiBzdHJpbmddOiBHYW50dEdyb3VwSW50ZXJuYWwgfTtcblxuICAgIHByaXZhdGUgX3NlbGVjdGFibGUgPSBmYWxzZTtcblxuICAgIHByaXZhdGUgX211bHRpcGxlID0gZmFsc2U7XG5cbiAgICBwcml2YXRlIF9saW5rT3B0aW9uczogR2FudHRMaW5rT3B0aW9ucztcblxuICAgIEBIb3N0QmluZGluZygnY2xhc3MuZ2FudHQnKSBnYW50dENsYXNzID0gdHJ1ZTtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcm90ZWN0ZWQgZWxlbWVudFJlZjogRWxlbWVudFJlZjxIVE1MRWxlbWVudD4sXG4gICAgICAgIHByb3RlY3RlZCBjZHI6IENoYW5nZURldGVjdG9yUmVmLFxuICAgICAgICBwcm90ZWN0ZWQgbmdab25lOiBOZ1pvbmUsXG4gICAgICAgIEBJbmplY3QoR0FOVFRfR0xPQkFMX0NPTkZJRykgcHVibGljIGNvbmZpZzogR2FudHRHbG9iYWxDb25maWdcbiAgICApIHt9XG5cbiAgICBwcml2YXRlIGNyZWF0ZVZpZXcoKSB7XG4gICAgICAgIGNvbnN0IHZpZXdEYXRlID0gdGhpcy5nZXRWaWV3RGF0ZSgpO1xuICAgICAgICB0aGlzLnZpZXcgPSBjcmVhdGVWaWV3RmFjdG9yeSh0aGlzLnZpZXdUeXBlLCB2aWV3RGF0ZS5zdGFydCwgdmlld0RhdGUuZW5kLCB0aGlzLnZpZXdPcHRpb25zKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldHVwR3JvdXBzKCkge1xuICAgICAgICBjb25zdCBjb2xsYXBzZWRJZHMgPSB0aGlzLmdyb3Vwcy5maWx0ZXIoKGdyb3VwKSA9PiBncm91cC5leHBhbmRlZCA9PT0gZmFsc2UpLm1hcCgoZ3JvdXApID0+IGdyb3VwLmlkKTtcbiAgICAgICAgdGhpcy5ncm91cHNNYXAgPSB7fTtcbiAgICAgICAgdGhpcy5ncm91cHMgPSBbXTtcbiAgICAgICAgdGhpcy5vcmlnaW5Hcm91cHMuZm9yRWFjaCgob3JpZ2luKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBncm91cCA9IG5ldyBHYW50dEdyb3VwSW50ZXJuYWwob3JpZ2luKTtcbiAgICAgICAgICAgIGdyb3VwLmV4cGFuZGVkID0gIWNvbGxhcHNlZElkcy5pbmNsdWRlcyhncm91cC5pZCk7XG4gICAgICAgICAgICB0aGlzLmdyb3Vwc01hcFtncm91cC5pZF0gPSBncm91cDtcbiAgICAgICAgICAgIHRoaXMuZ3JvdXBzLnB1c2goZ3JvdXApO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldHVwSXRlbXMoKSB7XG4gICAgICAgIHRoaXMub3JpZ2luSXRlbXMgPSB1bmlxQnkodGhpcy5vcmlnaW5JdGVtcywgJ2lkJyk7XG4gICAgICAgIHRoaXMuaXRlbXMgPSBbXTtcbiAgICAgICAgaWYgKHRoaXMuZ3JvdXBzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRoaXMub3JpZ2luSXRlbXMuZm9yRWFjaCgob3JpZ2luKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgZ3JvdXAgPSB0aGlzLmdyb3Vwc01hcFtvcmlnaW4uZ3JvdXBfaWRdO1xuICAgICAgICAgICAgICAgIGlmIChncm91cCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBpdGVtID0gbmV3IEdhbnR0SXRlbUludGVybmFsKG9yaWdpbiwgeyB2aWV3VHlwZTogdGhpcy52aWV3VHlwZSB9KTtcbiAgICAgICAgICAgICAgICAgICAgZ3JvdXAuaXRlbXMucHVzaChpdGVtKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMub3JpZ2luSXRlbXMuZm9yRWFjaCgob3JpZ2luKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgaXRlbSA9IG5ldyBHYW50dEl0ZW1JbnRlcm5hbChvcmlnaW4sIHsgdmlld1R5cGU6IHRoaXMudmlld1R5cGUgfSk7XG4gICAgICAgICAgICAgICAgdGhpcy5pdGVtcy5wdXNoKGl0ZW0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHNldHVwRXhwYW5kZWRTdGF0ZSgpIHtcbiAgICAgICAgdGhpcy5vcmlnaW5JdGVtcyA9IHVuaXFCeSh0aGlzLm9yaWdpbkl0ZW1zLCAnaWQnKTtcbiAgICAgICAgbGV0IGl0ZW1zOiBHYW50dEl0ZW1JbnRlcm5hbFtdID0gW107XG4gICAgICAgIGNvbnN0IGZsYXRPcmlnaW5JdGVtcyA9IGdldEZsYXRJdGVtcyh0aGlzLm9yaWdpbkl0ZW1zKTtcblxuICAgICAgICBpZiAodGhpcy5pdGVtcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBpdGVtcyA9IHJlY3Vyc2l2ZUl0ZW1zKHRoaXMuaXRlbXMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaXRlbXMgPSBmbGF0dGVuKHRoaXMuZ3JvdXBzLm1hcCgoZ3JvdXApID0+IHJlY3Vyc2l2ZUl0ZW1zKGdyb3VwLml0ZW1zKSkpO1xuICAgICAgICB9XG4gICAgICAgIGl0ZW1zLmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgICAgICAgIGlmIChpdGVtLm9yaWdpbi5leHBhbmRlZCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG5ld0l0ZW0gPSBmbGF0T3JpZ2luSXRlbXMuZmluZCgob3JpZ2luSXRlbSkgPT4gb3JpZ2luSXRlbS5pZCA9PT0gaXRlbS5pZCk7XG4gICAgICAgICAgICAgICAgaWYgKG5ld0l0ZW0pIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG5ld0l0ZW0uZXhwYW5kZWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbmV3SXRlbS5leHBhbmRlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0Vmlld0RhdGUoKSB7XG4gICAgICAgIGxldCBzdGFydCA9IHRoaXMuc3RhcnQ7XG4gICAgICAgIGxldCBlbmQgPSB0aGlzLmVuZDtcbiAgICAgICAgaWYgKCF0aGlzLnN0YXJ0IHx8ICF0aGlzLmVuZCkge1xuICAgICAgICAgICAgdGhpcy5vcmlnaW5JdGVtcy5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGl0ZW0uc3RhcnQgJiYgIXRoaXMuc3RhcnQpIHtcbiAgICAgICAgICAgICAgICAgICAgc3RhcnQgPSBzdGFydCA/IE1hdGgubWluKHN0YXJ0LCBpdGVtLnN0YXJ0KSA6IGl0ZW0uc3RhcnQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChpdGVtLmVuZCAmJiAhdGhpcy5lbmQpIHtcbiAgICAgICAgICAgICAgICAgICAgZW5kID0gZW5kID8gTWF0aC5tYXgoZW5kLCBpdGVtLmVuZCkgOiBpdGVtLmVuZDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgc3RhcnQ6IHtcbiAgICAgICAgICAgICAgICBkYXRlOiBuZXcgR2FudHREYXRlKHN0YXJ0KSxcbiAgICAgICAgICAgICAgICBpc0N1c3RvbTogdGhpcy5zdGFydCA/IHRydWUgOiBmYWxzZVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVuZDoge1xuICAgICAgICAgICAgICAgIGRhdGU6IG5ldyBHYW50dERhdGUoZW5kKSxcbiAgICAgICAgICAgICAgICBpc0N1c3RvbTogdGhpcy5lbmQgPyB0cnVlIDogZmFsc2VcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBjb21wdXRlUmVmcygpIHtcbiAgICAgICAgdGhpcy5ncm91cHMuZm9yRWFjaCgoZ3JvdXApID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGdyb3VwSXRlbXMgPSByZWN1cnNpdmVJdGVtcyhncm91cC5pdGVtcyk7XG4gICAgICAgICAgICB0aGlzLmNvbXB1dGVJdGVtc1JlZnMoLi4uZ3JvdXBJdGVtcyk7XG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBpdGVtcyA9IHJlY3Vyc2l2ZUl0ZW1zKHRoaXMuaXRlbXMpO1xuICAgICAgICB0aGlzLmNvbXB1dGVJdGVtc1JlZnMoLi4uaXRlbXMpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZXhwYW5kR3JvdXBzKGV4cGFuZGVkOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuZ3JvdXBzLmZvckVhY2goKGdyb3VwKSA9PiB7XG4gICAgICAgICAgICBncm91cC5zZXRFeHBhbmQoZXhwYW5kZWQpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5leHBhbmRDaGFuZ2UubmV4dCgpO1xuICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpbml0U2VsZWN0aW9uTW9kZWwoKSB7XG4gICAgICAgIHJldHVybiBuZXcgU2VsZWN0aW9uTW9kZWwodGhpcy5tdWx0aXBsZSwgW10pO1xuICAgIH1cblxuICAgIG5nT25Jbml0KCkge1xuICAgICAgICB0aGlzLnN0eWxlcyA9IE9iamVjdC5hc3NpZ24oe30sIGRlZmF1bHRTdHlsZXMsIHRoaXMuc3R5bGVzKTtcbiAgICAgICAgdGhpcy52aWV3T3B0aW9ucy5kYXRlRm9ybWF0ID0gT2JqZWN0LmFzc2lnbih7fSwgZGVmYXVsdENvbmZpZy5kYXRlRm9ybWF0LCB0aGlzLmNvbmZpZy5kYXRlRm9ybWF0LCB0aGlzLnZpZXdPcHRpb25zLmRhdGVGb3JtYXQpO1xuICAgICAgICB0aGlzLmNyZWF0ZVZpZXcoKTtcbiAgICAgICAgdGhpcy5zZXR1cEdyb3VwcygpO1xuICAgICAgICB0aGlzLnNldHVwSXRlbXMoKTtcbiAgICAgICAgdGhpcy5jb21wdXRlUmVmcygpO1xuICAgICAgICB0aGlzLmluaXRTZWxlY3Rpb25Nb2RlbCgpO1xuICAgICAgICB0aGlzLmZpcnN0Q2hhbmdlID0gZmFsc2U7XG5cbiAgICAgICAgLy8gTm90ZTogdGhlIHpvbmUgbWF5IGJlIG5vb3BlZCB0aHJvdWdoIGBCb290c3RyYXBPcHRpb25zYCB3aGVuIGJvb3RzdHJhcHBpbmcgdGhlIHJvb3QgbW9kdWxlLiBUaGlzIG1lYW5zXG4gICAgICAgIC8vIHRoZSBgb25TdGFibGVgIHdpbGwgbmV2ZXIgZW1pdCBhbnkgdmFsdWUuXG4gICAgICAgIGNvbnN0IG9uU3RhYmxlJCA9IHRoaXMubmdab25lLmlzU3RhYmxlID8gZnJvbShQcm9taXNlLnJlc29sdmUoKSkgOiB0aGlzLm5nWm9uZS5vblN0YWJsZS5waXBlKHRha2UoMSkpO1xuICAgICAgICAvLyBOb3JtYWxseSB0aGlzIGlzbid0IGluIHRoZSB6b25lLCBidXQgaXQgY2FuIGNhdXNlIHBlcmZvcm1hbmNlIHJlZ3Jlc3Npb25zIGZvciBhcHBzXG4gICAgICAgIC8vIHVzaW5nIGB6b25lLXBhdGNoLXJ4anNgIGJlY2F1c2UgaXQnbGwgdHJpZ2dlciBhIGNoYW5nZSBkZXRlY3Rpb24gd2hlbiBpdCB1bnN1YnNjcmliZXMuXG4gICAgICAgIHRoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgICAgICAgIG9uU3RhYmxlJC5waXBlKHRha2VVbnRpbCh0aGlzLnVuc3Vic2NyaWJlJCkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5lbGVtZW50LnN0eWxlLm9wYWNpdHkgPSAnMSc7XG5cbiAgICAgICAgICAgICAgICB0aGlzLmRyYWdDb250YWluZXIuZHJhZ1N0YXJ0ZWQucGlwZSh0YWtlVW50aWwodGhpcy51bnN1YnNjcmliZSQpKS5zdWJzY3JpYmUoKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZHJhZ1N0YXJ0ZWQuZW1pdChldmVudCk7XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICB0aGlzLmRyYWdDb250YWluZXIuZHJhZ01vdmVkLnBpcGUodGFrZVVudGlsKHRoaXMudW5zdWJzY3JpYmUkKSkuc3Vic2NyaWJlKChldmVudCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRyYWdNb3ZlZC5lbWl0KGV2ZW50KTtcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIHRoaXMuZHJhZ0NvbnRhaW5lci5kcmFnRW5kZWQucGlwZSh0YWtlVW50aWwodGhpcy51bnN1YnNjcmliZSQpKS5zdWJzY3JpYmUoKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZHJhZ0VuZGVkLmVtaXQoZXZlbnQpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbXB1dGVSZWZzKCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMudmlldy5zdGFydCQucGlwZShza2lwKDEpLCB0YWtlVW50aWwodGhpcy51bnN1YnNjcmliZSQpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5jb21wdXRlUmVmcygpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XG4gICAgICAgIGlmICghdGhpcy5maXJzdENoYW5nZSkge1xuICAgICAgICAgICAgaWYgKGNoYW5nZXMudmlld1R5cGUgJiYgY2hhbmdlcy52aWV3VHlwZS5jdXJyZW50VmFsdWUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNyZWF0ZVZpZXcoKTtcbiAgICAgICAgICAgICAgICB0aGlzLnNldHVwR3JvdXBzKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXR1cEl0ZW1zKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5jb21wdXRlUmVmcygpO1xuICAgICAgICAgICAgICAgIHRoaXMudmlld0NoYW5nZS5lbWl0KHRoaXMudmlldyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoY2hhbmdlcy5vcmlnaW5JdGVtcyB8fCBjaGFuZ2VzLm9yaWdpbkdyb3Vwcykge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0dXBFeHBhbmRlZFN0YXRlKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXR1cEdyb3VwcygpO1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0dXBJdGVtcygpO1xuICAgICAgICAgICAgICAgIHRoaXMuY29tcHV0ZVJlZnMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCkge1xuICAgICAgICB0aGlzLnVuc3Vic2NyaWJlJC5uZXh0KCk7XG4gICAgICAgIHRoaXMudW5zdWJzY3JpYmUkLmNvbXBsZXRlKCk7XG4gICAgfVxuXG4gICAgY29tcHV0ZUl0ZW1zUmVmcyguLi5pdGVtczogR2FudHRJdGVtSW50ZXJuYWxbXSkge1xuICAgICAgICBpdGVtcy5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICAgICAgICBpdGVtLnVwZGF0ZVJlZnMoe1xuICAgICAgICAgICAgICAgIHdpZHRoOiBpdGVtLnN0YXJ0ICYmIGl0ZW0uZW5kID8gdGhpcy52aWV3LmdldERhdGVSYW5nZVdpZHRoKGl0ZW0uc3RhcnQuc3RhcnRPZkRheSgpLCBpdGVtLmVuZC5lbmRPZkRheSgpKSA6IDAsXG4gICAgICAgICAgICAgICAgeDogaXRlbS5zdGFydCA/IHRoaXMudmlldy5nZXRYUG9pbnRCeURhdGUoaXRlbS5zdGFydCkgOiAwLFxuICAgICAgICAgICAgICAgIHk6ICh0aGlzLnN0eWxlcy5saW5lSGVpZ2h0IC0gdGhpcy5zdHlsZXMuYmFySGVpZ2h0KSAvIDIgLSAxXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgdHJhY2tCeShpbmRleDogbnVtYmVyLCBpdGVtOiBHYW50dEdyb3VwSW50ZXJuYWwgfCBHYW50dEl0ZW1JbnRlcm5hbCkge1xuICAgICAgICByZXR1cm4gaXRlbS5pZCB8fCBpbmRleDtcbiAgICB9XG5cbiAgICBkZXRlY3RDaGFuZ2VzKCkge1xuICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuXG4gICAgZXhwYW5kR3JvdXAoZ3JvdXA6IEdhbnR0R3JvdXBJbnRlcm5hbCkge1xuICAgICAgICBncm91cC5zZXRFeHBhbmQoIWdyb3VwLmV4cGFuZGVkKTtcbiAgICAgICAgdGhpcy5leHBhbmRDaGFuZ2UuZW1pdCgpO1xuICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuXG4gICAgLy8gcHVibGljIGZ1bmN0aW9uc1xuXG4gICAgZXhwYW5kQWxsKCkge1xuICAgICAgICB0aGlzLmV4cGFuZEdyb3Vwcyh0cnVlKTtcbiAgICB9XG5cbiAgICBjb2xsYXBzZUFsbCgpIHtcbiAgICAgICAgdGhpcy5leHBhbmRHcm91cHMoZmFsc2UpO1xuICAgIH1cblxuICAgIGdldEdhbnR0SXRlbShpZDogc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldEdhbnR0SXRlbXMoW2lkXSlbMF0gfHwgbnVsbDtcbiAgICB9XG5cbiAgICBnZXRHYW50dEl0ZW1zKGlkczogc3RyaW5nW10pIHtcbiAgICAgICAgbGV0IGl0ZW1zOiBHYW50dEl0ZW1JbnRlcm5hbFtdID0gW107XG4gICAgICAgIGlmICh0aGlzLml0ZW1zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGl0ZW1zID0gcmVjdXJzaXZlSXRlbXModGhpcy5pdGVtcyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpdGVtcyA9IGZsYXR0ZW4odGhpcy5ncm91cHMubWFwKChncm91cCkgPT4gcmVjdXJzaXZlSXRlbXMoZ3JvdXAuaXRlbXMpKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGl0ZW1zLmZpbHRlcigoaXRlbSkgPT4gaWRzLmluY2x1ZGVzKGl0ZW0uaWQpKTtcbiAgICB9XG5cbiAgICBpc1NlbGVjdGVkKGlkOiBzdHJpbmcpIHtcbiAgICAgICAgaWYgKCF0aGlzLnNlbGVjdGFibGUpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMuc2VsZWN0aW9uTW9kZWwuaGFzVmFsdWUoKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLnNlbGVjdGlvbk1vZGVsLmlzU2VsZWN0ZWQoaWQpO1xuICAgIH1cbn1cblxuZXhwb3J0IGNvbnN0IEdBTlRUX1VQUEVSX1RPS0VOID0gbmV3IEluamVjdGlvblRva2VuPEdhbnR0VXBwZXI+KCdHQU5UVF9VUFBFUl9UT0tFTicpO1xuIl19
@@ -1,6 +1,6 @@
1
1
  import { Component, ChangeDetectionStrategy, Input, EventEmitter, Output, ContentChildren, ContentChild, forwardRef, Inject } from '@angular/core';
2
2
  import { startWith, takeUntil, take, finalize } from 'rxjs/operators';
3
- import { Subject } from 'rxjs';
3
+ import { Subject, from } from 'rxjs';
4
4
  import { GanttUpper, GANTT_UPPER_TOKEN } from './gantt-upper';
5
5
  import { NgxGanttTableColumnComponent } from './table/gantt-column.component';
6
6
  import { sideWidth } from './gantt.styles';
@@ -25,13 +25,20 @@ export class NgxGanttComponent extends GanttUpper {
25
25
  this.sideTableWidth = sideWidth;
26
26
  }
27
27
  ngOnInit() {
28
- super.onInit();
29
- this.ngZone.onStable.pipe(take(1)).subscribe(() => {
30
- this.dragContainer.linkDragStarted.pipe(takeUntil(this.ngUnsubscribe$)).subscribe((event) => {
31
- this.linkDragStarted.emit(event);
32
- });
33
- this.dragContainer.linkDragEnded.pipe(takeUntil(this.ngUnsubscribe$)).subscribe((event) => {
34
- this.linkDragEnded.emit(event);
28
+ super.ngOnInit();
29
+ // Note: the zone may be nooped through `BootstrapOptions` when bootstrapping the root module. This means
30
+ // the `onStable` will never emit any value.
31
+ const onStable$ = this.ngZone.isStable ? from(Promise.resolve()) : this.ngZone.onStable.pipe(take(1));
32
+ // Normally this isn't in the zone, but it can cause performance regressions for apps
33
+ // using `zone-patch-rxjs` because it'll trigger a change detection when it unsubscribes.
34
+ this.ngZone.runOutsideAngular(() => {
35
+ onStable$.pipe(takeUntil(this.unsubscribe$)).subscribe(() => {
36
+ this.dragContainer.linkDragStarted.pipe(takeUntil(this.ngUnsubscribe$)).subscribe((event) => {
37
+ this.linkDragStarted.emit(event);
38
+ });
39
+ this.dragContainer.linkDragEnded.pipe(takeUntil(this.ngUnsubscribe$)).subscribe((event) => {
40
+ this.linkDragEnded.emit(event);
41
+ });
35
42
  });
36
43
  });
37
44
  }
@@ -45,9 +52,6 @@ export class NgxGanttComponent extends GanttUpper {
45
52
  this.cdr.detectChanges();
46
53
  });
47
54
  }
48
- ngOnChanges(changes) {
49
- super.onChanges(changes);
50
- }
51
55
  expandChildren(item) {
52
56
  if (!item.expanded) {
53
57
  item.setExpand(true);
@@ -91,9 +95,6 @@ export class NgxGanttComponent extends GanttUpper {
91
95
  this.selectedChange.emit({ event, selectedValue: _selectedValue });
92
96
  }
93
97
  }
94
- ngOnDestroy() {
95
- super.onDestroy();
96
- }
97
98
  }
98
99
  NgxGanttComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.1.5", ngImport: i0, type: NgxGanttComponent, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: i0.NgZone }, { token: GANTT_GLOBAL_CONFIG }], target: i0.ɵɵFactoryTarget.Component });
99
100
  NgxGanttComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.1.5", type: NgxGanttComponent, selector: "ngx-gantt", inputs: { maxLevel: "maxLevel", async: "async", childrenResolve: "childrenResolve", linkable: "linkable" }, outputs: { linkDragStarted: "linkDragStarted", linkDragEnded: "linkDragEnded", lineClick: "lineClick", selectedChange: "selectedChange" }, providers: [
@@ -105,7 +106,7 @@ NgxGanttComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", vers
105
106
  provide: GANTT_ABSTRACT_TOKEN,
106
107
  useExisting: forwardRef(() => NgxGanttComponent)
107
108
  }
108
- ], queries: [{ propertyName: "table", first: true, predicate: NgxGanttTableComponent, descendants: true }, { propertyName: "tableEmptyTemplate", first: true, predicate: ["tableEmpty"], descendants: true, static: true }, { propertyName: "columns", predicate: NgxGanttTableColumnComponent, descendants: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<ngx-gantt-root>\n <ng-template #sideTemplate>\n <gantt-table\n [groups]=\"groups\"\n [items]=\"items\"\n [columns]=\"columns\"\n [groupTemplate]=\"groupTemplate\"\n [emptyTemplate]=\"tableEmptyTemplate\"\n [rowBeforeTemplate]=\"table?.rowBeforeTemplate\"\n [rowAfterTemplate]=\"table?.rowAfterTemplate\"\n (itemClick)=\"selectItem($event)\"\n ></gantt-table>\n </ng-template>\n <ng-template #mainTemplate>\n <gantt-main\n [groups]=\"groups\"\n [items]=\"items\"\n [groupHeaderTemplate]=\"groupHeaderTemplate\"\n [itemTemplate]=\"itemTemplate\"\n [barTemplate]=\"barTemplate\"\n [rangeTemplate]=\"rangeTemplate\"\n (barClick)=\"barClick.emit($event)\"\n (lineClick)=\"lineClick.emit($event)\"\n >\n </gantt-main>\n </ng-template>\n</ngx-gantt-root>\n", components: [{ type: i1.NgxGanttRootComponent, selector: "ngx-gantt-root", inputs: ["sideWidth"] }, { type: i2.GanttTableComponent, selector: "gantt-table", inputs: ["groups", "items", "columns", "groupTemplate", "emptyTemplate", "rowBeforeTemplate", "rowAfterTemplate"], outputs: ["itemClick"] }, { type: i3.GanttMainComponent, selector: "gantt-main", inputs: ["groups", "items", "groupHeaderTemplate", "itemTemplate", "barTemplate", "rangeTemplate"], outputs: ["barClick", "lineClick"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
109
+ ], queries: [{ propertyName: "table", first: true, predicate: NgxGanttTableComponent, descendants: true }, { propertyName: "tableEmptyTemplate", first: true, predicate: ["tableEmpty"], descendants: true, static: true }, { propertyName: "columns", predicate: NgxGanttTableColumnComponent, descendants: true }], usesInheritance: true, ngImport: i0, template: "<ngx-gantt-root>\n <ng-template #sideTemplate>\n <gantt-table\n [groups]=\"groups\"\n [items]=\"items\"\n [columns]=\"columns\"\n [groupTemplate]=\"groupTemplate\"\n [emptyTemplate]=\"tableEmptyTemplate\"\n [rowBeforeTemplate]=\"table?.rowBeforeTemplate\"\n [rowAfterTemplate]=\"table?.rowAfterTemplate\"\n (itemClick)=\"selectItem($event)\"\n ></gantt-table>\n </ng-template>\n <ng-template #mainTemplate>\n <gantt-main\n [groups]=\"groups\"\n [items]=\"items\"\n [groupHeaderTemplate]=\"groupHeaderTemplate\"\n [itemTemplate]=\"itemTemplate\"\n [barTemplate]=\"barTemplate\"\n [rangeTemplate]=\"rangeTemplate\"\n (barClick)=\"barClick.emit($event)\"\n (lineClick)=\"lineClick.emit($event)\"\n >\n </gantt-main>\n </ng-template>\n</ngx-gantt-root>\n", components: [{ type: i1.NgxGanttRootComponent, selector: "ngx-gantt-root", inputs: ["sideWidth"] }, { type: i2.GanttTableComponent, selector: "gantt-table", inputs: ["groups", "items", "columns", "groupTemplate", "emptyTemplate", "rowBeforeTemplate", "rowAfterTemplate"], outputs: ["itemClick"] }, { type: i3.GanttMainComponent, selector: "gantt-main", inputs: ["groups", "items", "groupHeaderTemplate", "itemTemplate", "barTemplate", "rangeTemplate"], outputs: ["barClick", "lineClick"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
109
110
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.1.5", ngImport: i0, type: NgxGanttComponent, decorators: [{
110
111
  type: Component,
111
112
  args: [{
@@ -152,4 +153,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.1.5", ngImpor
152
153
  type: ContentChild,
153
154
  args: ['tableEmpty', { static: true }]
154
155
  }] } });
155
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2FudHQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vcGFja2FnZXMvZ2FudHQvc3JjL2dhbnR0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uL3BhY2thZ2VzL2dhbnR0L3NyYy9nYW50dC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsU0FBUyxFQUdULHVCQUF1QixFQUN2QixLQUFLLEVBQ0wsWUFBWSxFQUNaLE1BQU0sRUFNTixlQUFlLEVBR2YsWUFBWSxFQUVaLFVBQVUsRUFDVixNQUFNLEVBQ1QsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3RFLE9BQU8sRUFBRSxPQUFPLEVBQWMsTUFBTSxNQUFNLENBQUM7QUFDM0MsT0FBTyxFQUFFLFVBQVUsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUU5RCxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUM5RSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0MsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDNUQsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDdkUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDeEQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDOUUsT0FBTyxFQUFxQixtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7OztBQWdCeEUsTUFBTSxPQUFPLGlCQUFrQixTQUFRLFVBQVU7SUEyQjdDLFlBQ0ksVUFBbUMsRUFDbkMsR0FBc0IsRUFDdEIsTUFBYyxFQUNlLE1BQXlCO1FBRXRELEtBQUssQ0FB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QUFNO2dCQUUrQixLQUFLO3NCQUExQyxZQUFZO3VCQUFDLHNCQUFzQjtnQkFFa0MsT0FBTztzQkFBNUUsZUFBZTt1QkFBQyw0QkFBNEIsRUFBRSxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUU7Z0JBRXRCLGtCQUFrQjtzQkFBL0QsWUFBWTt1QkFBQyxZQUFZLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBDb21wb25lbnQsXG4gICAgT25Jbml0LFxuICAgIEVsZW1lbnRSZWYsXG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgSW5wdXQsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIE91dHB1dCxcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBOZ1pvbmUsXG4gICAgT25DaGFuZ2VzLFxuICAgIE9uRGVzdHJveSxcbiAgICBTaW1wbGVDaGFuZ2VzLFxuICAgIENvbnRlbnRDaGlsZHJlbixcbiAgICBRdWVyeUxpc3QsXG4gICAgQWZ0ZXJWaWV3SW5pdCxcbiAgICBDb250ZW50Q2hpbGQsXG4gICAgVGVtcGxhdGVSZWYsXG4gICAgZm9yd2FyZFJlZixcbiAgICBJbmplY3Rcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBzdGFydFdpdGgsIHRha2VVbnRpbCwgdGFrZSwgZmluYWxpemUgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBTdWJqZWN0LCBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBHYW50dFVwcGVyLCBHQU5UVF9VUFBFUl9UT0tFTiB9IGZyb20gJy4vZ2FudHQtdXBwZXInO1xuaW1wb3J0IHsgR2FudHRMaW5rRHJhZ0V2ZW50LCBHYW50dExpbmVDbGlja0V2ZW50LCBHYW50dEl0ZW1JbnRlcm5hbCwgR2FudHRJdGVtLCBHYW50dFNlbGVjdGVkRXZlbnQgfSBmcm9tICcuL2NsYXNzJztcbmltcG9ydCB7IE5neEdhbnR0VGFibGVDb2x1bW5Db21wb25lbnQgfSBmcm9tICcuL3RhYmxlL2dhbnR0LWNvbHVtbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgc2lkZVdpZHRoIH0gZnJvbSAnLi9nYW50dC5zdHlsZXMnO1xuaW1wb3J0IHsgY29lcmNlQ3NzUGl4ZWxWYWx1ZSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2VyY2lvbic7XG5pbXBvcnQgeyBOZ3hHYW50dFRhYmxlQ29tcG9uZW50IH0gZnJvbSAnLi90YWJsZS9nYW50dC10YWJsZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgR0FOVFRfQUJTVFJBQ1RfVE9LRU4gfSBmcm9tICcuL2dhbnR0LWFic3RyYWN0JztcbmltcG9ydCB7IGRlZmF1bHRDb2x1bW5XaWR0aCB9IGZyb20gJy4vY29tcG9uZW50cy90YWJsZS9nYW50dC10YWJsZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgR2FudHRHbG9iYWxDb25maWcsIEdBTlRUX0dMT0JBTF9DT05GSUcgfSBmcm9tICcuL2dhbnR0LmNvbmZpZyc7XG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ25neC1nYW50dCcsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2dhbnR0LmNvbXBvbmVudC5odG1sJyxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgICBwcm92aWRlcnM6IFtcbiAgICAgICAge1xuICAgICAgICAgICAgcHJvdmlkZTogR0FOVFRfVVBQRVJfVE9LRU4sXG4gICAgICAgICAgICB1c2VFeGlzdGluZzogTmd4R2FudHRDb21wb25lbnRcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgcHJvdmlkZTogR0FOVFRfQUJTVFJBQ1RfVE9LRU4sXG4gICAgICAgICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBOZ3hHYW50dENvbXBvbmVudClcbiAgICAgICAgfVxuICAgIF1cbn0pXG5leHBvcnQgY2xhc3MgTmd4R2FudHRDb21wb25lbnQgZXh0ZW5kcyBHYW50dFVwcGVyIGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSB7XG4gICAgQElucHV0KCkgbWF4TGV2ZWwgPSAyO1xuXG4gICAgQElucHV0KCkgYXN5bmM6IGJvb2xlYW47XG5cbiAgICBASW5wdXQoKSBjaGlsZHJlblJlc29sdmU6IChHYW50dEl0ZW0pID0+IE9ic2VydmFibGU8R2FudHRJdGVtW10+O1xuXG4gICAgQElucHV0KCkgbGlua2FibGU6IGJvb2xlYW47XG5cbiAgICBAT3V0cHV0KCkgbGlua0RyYWdTdGFydGVkID0gbmV3IEV2ZW50RW1pdHRlcjxHYW50dExpbmtEcmFnRXZlbnQ+KCk7XG5cbiAgICBAT3V0cHV0KCkgbGlua0RyYWdFbmRlZCA9IG5ldyBFdmVudEVtaXR0ZXI8R2FudHRMaW5rRHJhZ0V2ZW50PigpO1xuXG4gICAgQE91dHB1dCgpIGxpbmVDbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8R2FudHRMaW5lQ2xpY2tFdmVudD4oKTtcblxuICAgIEBPdXRwdXQoKSBzZWxlY3RlZENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8R2FudHRTZWxlY3RlZEV2ZW50PigpO1xuXG4gICAgQENvbnRlbnRDaGlsZChOZ3hHYW50dFRhYmxlQ29tcG9uZW50KSB0YWJsZTogTmd4R2FudHRUYWJsZUNvbXBvbmVudDtcblxuICAgIEBDb250ZW50Q2hpbGRyZW4oTmd4R2FudHRUYWJsZUNvbHVtbkNvbXBvbmVudCwgeyBkZXNjZW5kYW50czogdHJ1ZSB9KSBjb2x1bW5zOiBRdWVyeUxpc3Q8Tmd4R2FudHRUYWJsZUNvbHVtbkNvbXBvbmVudD47XG5cbiAgICBAQ29udGVudENoaWxkKCd0YWJsZUVtcHR5JywgeyBzdGF0aWM6IHRydWUgfSkgdGFibGVFbXB0eVRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gICAgcHJpdmF0ZSBuZ1Vuc3Vic2NyaWJlJCA9IG5ldyBTdWJqZWN0KCk7XG5cbiAgICBwdWJsaWMgc2lkZVRhYmxlV2lkdGggPSBzaWRlV2lkdGg7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgZWxlbWVudFJlZjogRWxlbWVudFJlZjxIVE1MRWxlbWVudD4sXG4gICAgICAgIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgICAgIG5nWm9uZTogTmdab25lLFxuICAgICAgICBASW5qZWN0KEdBTlRUX0dMT0JBTF9DT05GSUcpIGNvbmZpZzogR2FudHRHbG9iYWxDb25maWdcbiAgICApIHtcbiAgICAgICAgc3VwZXIoZWxlbWVudFJlZiwgY2RyLCBuZ1pvbmUsIGNvbmZpZyk7XG4gICAgfVxuXG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIHN1cGVyLm9uSW5pdCgpO1xuICAgICAgICB0aGlzLm5nWm9uZS5vblN0YWJsZS5waXBlKHRha2UoMSkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmRyYWdDb250YWluZXIubGlua0RyYWdTdGFydGVkLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSQpKS5zdWJzY3JpYmUoKGV2ZW50OiBHYW50dExpbmtEcmFnRXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmxpbmtEcmFnU3RhcnRlZC5lbWl0KGV2ZW50KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5kcmFnQ29udGFpbmVyLmxpbmtEcmFnRW5kZWQucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlJCkpLnN1YnNjcmliZSgoZXZlbnQ6IEdhbnR0TGlua0RyYWdFdmVudCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMubGlua0RyYWdFbmRlZC5lbWl0KGV2ZW50KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgICAgIHRoaXMuY29sdW1ucy5jaGFuZ2VzLnBpcGUoc3RhcnRXaXRoKHRydWUpLCB0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlJCkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmNvbHVtbnMuZm9yRWFjaCgoY29sdW1uKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCFjb2x1bW4uY29sdW1uV2lkdGgpIHtcbiAgICAgICAgICAgICAgICAgICAgY29sdW1uLmNvbHVtbldpZHRoID0gY29lcmNlQ3NzUGl4ZWxWYWx1ZShkZWZhdWx0Q29sdW1uV2lkdGgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XG4gICAgICAgIHN1cGVyLm9uQ2hhbmdlcyhjaGFuZ2VzKTtcbiAgICB9XG5cbiAgICBleHBhbmRDaGlsZHJlbihpdGVtOiBHYW50dEl0ZW1JbnRlcm5hbCkge1xuICAgICAgICBpZiAoIWl0ZW0uZXhwYW5kZWQpIHtcbiAgICAgICAgICAgIGl0ZW0uc2V0RXhwYW5kKHRydWUpO1xuICAgICAgICAgICAgaWYgKHRoaXMuYXN5bmMgJiYgdGhpcy5jaGlsZHJlblJlc29sdmUgJiYgaXRlbS5jaGlsZHJlbi5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICBpdGVtLmxvYWRpbmcgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHRoaXMuY2hpbGRyZW5SZXNvbHZlKGl0ZW0ub3JpZ2luKVxuICAgICAgICAgICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICAgICAgICAgIHRha2UoMSksXG4gICAgICAgICAgICAgICAgICAgICAgICBmaW5hbGl6ZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS5sb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5leHBhbmRDaGFuZ2UuZW1pdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgLnN1YnNjcmliZSgoaXRlbXMpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0uYWRkQ2hpbGRyZW4oaXRlbXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb21wdXRlSXRlbXNSZWZzKC4uLml0ZW0uY2hpbGRyZW4pO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jb21wdXRlSXRlbXNSZWZzKC4uLml0ZW0uY2hpbGRyZW4pO1xuICAgICAgICAgICAgICAgIHRoaXMuZXhwYW5kQ2hhbmdlLmVtaXQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGl0ZW0uc2V0RXhwYW5kKGZhbHNlKTtcbiAgICAgICAgICAgIHRoaXMuZXhwYW5kQ2hhbmdlLmVtaXQoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHNlbGVjdEl0ZW0oc2VsZWN0RXZlbnQ6IEdhbnR0U2VsZWN0ZWRFdmVudCkge1xuICAgICAgICBpZiAoIXRoaXMuc2VsZWN0YWJsZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHsgZXZlbnQsIHNlbGVjdGVkVmFsdWUgfSA9IHNlbGVjdEV2ZW50O1xuICAgICAgICB0aGlzLnNlbGVjdGlvbk1vZGVsLnRvZ2dsZSgoc2VsZWN0ZWRWYWx1ZSBhcyBHYW50dEl0ZW0pLmlkKTtcblxuICAgICAgICBjb25zdCBzZWxlY3RlZElkcyA9IHRoaXMuc2VsZWN0aW9uTW9kZWwuc2VsZWN0ZWQ7XG4gICAgICAgIGlmICh0aGlzLm11bHRpcGxlKSB7XG4gICAgICAgICAgICBjb25zdCBfc2VsZWN0ZWRWYWx1ZSA9IHRoaXMuZ2V0R2FudHRJdGVtcyhzZWxlY3RlZElkcykubWFwKChpdGVtKSA9PiBpdGVtLm9yaWdpbik7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkQ2hhbmdlLmVtaXQoeyBldmVudCwgc2VsZWN0ZWRWYWx1ZTogX3NlbGVjdGVkVmFsdWUgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBfc2VsZWN0ZWRWYWx1ZSA9IHRoaXMuZ2V0R2FudHRJdGVtKHNlbGVjdGVkSWRzWzBdKT8ub3JpZ2luO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZENoYW5nZS5lbWl0KHsgZXZlbnQsIHNlbGVjdGVkVmFsdWU6IF9zZWxlY3RlZFZhbHVlIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIHN1cGVyLm9uRGVzdHJveSgpO1xuICAgIH1cbn1cbiIsIjxuZ3gtZ2FudHQtcm9vdD5cbiAgPG5nLXRlbXBsYXRlICNzaWRlVGVtcGxhdGU+XG4gICAgPGdhbnR0LXRhYmxlXG4gICAgICBbZ3JvdXBzXT1cImdyb3Vwc1wiXG4gICAgICBbaXRlbXNdPVwiaXRlbXNcIlxuICAgICAgW2NvbHVtbnNdPVwiY29sdW1uc1wiXG4gICAgICBbZ3JvdXBUZW1wbGF0ZV09XCJncm91cFRlbXBsYXRlXCJcbiAgICAgIFtlbXB0eVRlbXBsYXRlXT1cInRhYmxlRW1wdHlUZW1wbGF0ZVwiXG4gICAgICBbcm93QmVmb3JlVGVtcGxhdGVdPVwidGFibGU/LnJvd0JlZm9yZVRlbXBsYXRlXCJcbiAgICAgIFtyb3dBZnRlclRlbXBsYXRlXT1cInRhYmxlPy5yb3dBZnRlclRlbXBsYXRlXCJcbiAgICAgIChpdGVtQ2xpY2spPVwic2VsZWN0SXRlbSgkZXZlbnQpXCJcbiAgICA+PC9nYW50dC10YWJsZT5cbiAgPC9uZy10ZW1wbGF0ZT5cbiAgPG5nLXRlbXBsYXRlICNtYWluVGVtcGxhdGU+XG4gICAgPGdhbnR0LW1haW5cbiAgICAgIFtncm91cHNdPVwiZ3JvdXBzXCJcbiAgICAgIFtpdGVtc109XCJpdGVtc1wiXG4gICAgICBbZ3JvdXBIZWFkZXJUZW1wbGF0ZV09XCJncm91cEhlYWRlclRlbXBsYXRlXCJcbiAgICAgIFtpdGVtVGVtcGxhdGVdPVwiaXRlbVRlbXBsYXRlXCJcbiAgICAgIFtiYXJUZW1wbGF0ZV09XCJiYXJUZW1wbGF0ZVwiXG4gICAgICBbcmFuZ2VUZW1wbGF0ZV09XCJyYW5nZVRlbXBsYXRlXCJcbiAgICAgIChiYXJDbGljayk9XCJiYXJDbGljay5lbWl0KCRldmVudClcIlxuICAgICAgKGxpbmVDbGljayk9XCJsaW5lQ2xpY2suZW1pdCgkZXZlbnQpXCJcbiAgICA+XG4gICAgPC9nYW50dC1tYWluPlxuICA8L25nLXRlbXBsYXRlPlxuPC9uZ3gtZ2FudHQtcm9vdD5cbiJdfQ==
156
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2FudHQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vcGFja2FnZXMvZ2FudHQvc3JjL2dhbnR0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uL3BhY2thZ2VzL2dhbnR0L3NyYy9nYW50dC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsU0FBUyxFQUdULHVCQUF1QixFQUN2QixLQUFLLEVBQ0wsWUFBWSxFQUNaLE1BQU0sRUFHTixlQUFlLEVBR2YsWUFBWSxFQUVaLFVBQVUsRUFDVixNQUFNLEVBQ1QsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3RFLE9BQU8sRUFBRSxPQUFPLEVBQWMsSUFBSSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2pELE9BQU8sRUFBRSxVQUFVLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFOUQsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDOUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzVELE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBQzlFLE9BQU8sRUFBcUIsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7QUFnQnhFLE1BQU0sT0FBTyxpQkFBa0IsU0FBUSxVQUFVO0lBMkI3QyxZQUNJLFVBQW1DLEVBQ25DLEdBQXNCLEVBQ3RCLE1BQWMsRUFDZSxNQUF5QjtRQUV0RCxLQUFLLENBQUMsVUFBVSxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFoQ2xDLGFBQVEsR0FBRyxDQUFDLENBQUM7UUFRWixvQkFBZSxHQUFHLElBQUksWUFBWSxFQUFzQixDQUFDO1FBRWhELGtCQUFhLEdBQUcsSUFBSSxZQUFZLEVBQXNCLENBQUM7UUFFaEUsY0FBUyxHQUFHLElBQUksWUFBWSxFQUF1QixDQUFDO1FBRXBELG1CQUFjLEdBQUcsSUFBSSxZQUFZLEVBQXNCLENBQUM7UUFRMUQsbUJBQWMsR0FBRyxJQUFJLE9BQU8sRUFBRSxDQUFDO1FBRWhDLG1CQUFjLEdBQUcsU0FBUyxDQUFDO0lBU2xDLENBQUM7SUFFUSxRQUFRO1FBQ2IsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ2pCLHlHQUF5RztRQUN6Ryw0Q0FBNEM7UUFDNUMsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3RHLHFGQUFxRjtRQUNyRix5RkFBeUY7UUFDekYsSUFBSSxDQUFDLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLEVBQUU7WUFDL0IsU0FBUyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRTtnQkFDeEQsSUFBSSxDQUFDLGFBQWEsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxLQUF5QixFQUFFLEVBQUU7b0JBQzVHLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUNyQyxDQUFDLENBQUMsQ0FBQztnQkFDSCxJQUFJLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEtBQXlCLEVBQUUsRUFBRTtvQkFDMUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ25DLENBQUMsQ0FBQyxDQUFDO1lBQ1AsQ0FBQyxDQUFDLENBQUM7UUFDUCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxlQUFlO1FBQ1gsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxTQUFTLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRTtZQUN0RixJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFO2dCQUM1QixJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsRUFBRTtvQkFDckIsTUFBTSxDQUFDLFdBQVcsR0FBRyxtQkFBbUIsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO2lCQUNoRTtZQUNMLENBQUMsQ0FBQyxDQUFDO1lBQ0gsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUM3QixDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxjQUFjLENBQUMsSUFBdUI7UUFDbEMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDaEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNyQixJQUFJLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLGVBQWUsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7Z0JBQ2xFLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO2dCQUNwQixJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUM7cUJBQzVCLElBQUksQ0FDRCxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQ1AsUUFBUSxDQUFDLEdBQUcsRUFBRTtvQkFDVixJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztvQkFDckIsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsQ0FBQztvQkFDekIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztnQkFDN0IsQ0FBQyxDQUFDLENBQ0w7cUJBQ0EsU0FBUyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7b0JBQ2pCLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7b0JBQ3hCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFDNUMsQ0FBQyxDQUFDLENBQUM7YUFDVjtpQkFBTTtnQkFDSCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBQ3hDLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLENBQUM7YUFDNUI7U0FDSjthQUFNO1lBQ0gsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUN0QixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxDQUFDO1NBQzVCO0lBQ0wsQ0FBQztJQUVELFVBQVUsQ0FBQyxXQUErQjs7UUFDdEMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDbEIsT0FBTztTQUNWO1FBQ0QsTUFBTSxFQUFFLEtBQUssRUFBRSxhQUFhLEVBQUUsR0FBRyxXQUFXLENBQUM7UUFDN0MsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUUsYUFBMkIsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUU1RCxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQztRQUNqRCxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDZixNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ2xGLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxFQUFFLGFBQWEsRUFBRSxjQUFjLEVBQUUsQ0FBQyxDQUFDO1NBQ3RFO2FBQU07WUFDSCxNQUFNLGNBQWMsR0FBRyxNQUFBLElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLDBDQUFFLE1BQU0sQ0FBQztZQUNqRSxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssRUFBRSxhQUFhLEVBQUUsY0FBYyxFQUFFLENBQUMsQ0FBQztTQUN0RTtJQUNMLENBQUM7OzhHQTdHUSxpQkFBaUIsbUdBK0JkLG1CQUFtQjtrR0EvQnRCLGlCQUFpQiwyUkFYZjtRQUNQO1lBQ0ksT0FBTyxFQUFFLGlCQUFpQjtZQUMxQixXQUFXLEVBQUUsaUJBQWlCO1NBQ2pDO1FBQ0Q7WUFDSSxPQUFPLEVBQUUsb0JBQW9CO1lBQzdCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsaUJBQWlCLENBQUM7U0FDbkQ7S0FDSiw2REFtQmEsc0JBQXNCLDhLQUVuQiw0QkFBNEIsdUVDL0RqRCxtMUJBMkJBOzJGRGlCYSxpQkFBaUI7a0JBZjdCLFNBQVM7bUJBQUM7b0JBQ1AsUUFBUSxFQUFFLFdBQVc7b0JBQ3JCLFdBQVcsRUFBRSx3QkFBd0I7b0JBQ3JDLGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNO29CQUMvQyxTQUFTLEVBQUU7d0JBQ1A7NEJBQ0ksT0FBTyxFQUFFLGlCQUFpQjs0QkFDMUIsV0FBVyxtQkFBbUI7eUJBQ2pDO3dCQUNEOzRCQUNJLE9BQU8sRUFBRSxvQkFBb0I7NEJBQzdCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLGtCQUFrQixDQUFDO3lCQUNuRDtxQkFDSjtpQkFDSjs7MEJBZ0NRLE1BQU07MkJBQUMsbUJBQW1COzRDQTlCdEIsUUFBUTtzQkFBaEIsS0FBSztnQkFFRyxLQUFLO3NCQUFiLEtBQUs7Z0JBRUcsZUFBZTtzQkFBdkIsS0FBSztnQkFFWSxRQUFRO3NCQUF6QixLQUFLO2dCQUVJLGVBQWU7c0JBQXhCLE1BQU07Z0JBRVksYUFBYTtzQkFBL0IsTUFBTTtnQkFFRyxTQUFTO3NCQUFsQixNQUFNO2dCQUVHLGNBQWM7c0JBQXZCLE1BQU07Z0JBRStCLEtBQUs7c0JBQTFDLFlBQVk7dUJBQUMsc0JBQXNCO2dCQUVrQyxPQUFPO3NCQUE1RSxlQUFlO3VCQUFDLDRCQUE0QixFQUFFLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRTtnQkFFdEIsa0JBQWtCO3NCQUEvRCxZQUFZO3VCQUFDLFlBQVksRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIENvbXBvbmVudCxcbiAgICBPbkluaXQsXG4gICAgRWxlbWVudFJlZixcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBJbnB1dCxcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgT3V0cHV0LFxuICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgIE5nWm9uZSxcbiAgICBDb250ZW50Q2hpbGRyZW4sXG4gICAgUXVlcnlMaXN0LFxuICAgIEFmdGVyVmlld0luaXQsXG4gICAgQ29udGVudENoaWxkLFxuICAgIFRlbXBsYXRlUmVmLFxuICAgIGZvcndhcmRSZWYsXG4gICAgSW5qZWN0XG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgc3RhcnRXaXRoLCB0YWtlVW50aWwsIHRha2UsIGZpbmFsaXplIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgU3ViamVjdCwgT2JzZXJ2YWJsZSwgZnJvbSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgR2FudHRVcHBlciwgR0FOVFRfVVBQRVJfVE9LRU4gfSBmcm9tICcuL2dhbnR0LXVwcGVyJztcbmltcG9ydCB7IEdhbnR0TGlua0RyYWdFdmVudCwgR2FudHRMaW5lQ2xpY2tFdmVudCwgR2FudHRJdGVtSW50ZXJuYWwsIEdhbnR0SXRlbSwgR2FudHRTZWxlY3RlZEV2ZW50IH0gZnJvbSAnLi9jbGFzcyc7XG5pbXBvcnQgeyBOZ3hHYW50dFRhYmxlQ29sdW1uQ29tcG9uZW50IH0gZnJvbSAnLi90YWJsZS9nYW50dC1jb2x1bW4uY29tcG9uZW50JztcbmltcG9ydCB7IHNpZGVXaWR0aCB9IGZyb20gJy4vZ2FudHQuc3R5bGVzJztcbmltcG9ydCB7IGNvZXJjZUNzc1BpeGVsVmFsdWUgfSBmcm9tICdAYW5ndWxhci9jZGsvY29lcmNpb24nO1xuaW1wb3J0IHsgTmd4R2FudHRUYWJsZUNvbXBvbmVudCB9IGZyb20gJy4vdGFibGUvZ2FudHQtdGFibGUuY29tcG9uZW50JztcbmltcG9ydCB7IEdBTlRUX0FCU1RSQUNUX1RPS0VOIH0gZnJvbSAnLi9nYW50dC1hYnN0cmFjdCc7XG5pbXBvcnQgeyBkZWZhdWx0Q29sdW1uV2lkdGggfSBmcm9tICcuL2NvbXBvbmVudHMvdGFibGUvZ2FudHQtdGFibGUuY29tcG9uZW50JztcbmltcG9ydCB7IEdhbnR0R2xvYmFsQ29uZmlnLCBHQU5UVF9HTE9CQUxfQ09ORklHIH0gZnJvbSAnLi9nYW50dC5jb25maWcnO1xuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICduZ3gtZ2FudHQnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9nYW50dC5jb21wb25lbnQuaHRtbCcsXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIHByb3ZpZGU6IEdBTlRUX1VQUEVSX1RPS0VOLFxuICAgICAgICAgICAgdXNlRXhpc3Rpbmc6IE5neEdhbnR0Q29tcG9uZW50XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIHByb3ZpZGU6IEdBTlRUX0FCU1RSQUNUX1RPS0VOLFxuICAgICAgICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gTmd4R2FudHRDb21wb25lbnQpXG4gICAgICAgIH1cbiAgICBdXG59KVxuZXhwb3J0IGNsYXNzIE5neEdhbnR0Q29tcG9uZW50IGV4dGVuZHMgR2FudHRVcHBlciBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCB7XG4gICAgQElucHV0KCkgbWF4TGV2ZWwgPSAyO1xuXG4gICAgQElucHV0KCkgYXN5bmM6IGJvb2xlYW47XG5cbiAgICBASW5wdXQoKSBjaGlsZHJlblJlc29sdmU6IChHYW50dEl0ZW0pID0+IE9ic2VydmFibGU8R2FudHRJdGVtW10+O1xuXG4gICAgQElucHV0KCkgb3ZlcnJpZGUgbGlua2FibGU6IGJvb2xlYW47XG5cbiAgICBAT3V0cHV0KCkgbGlua0RyYWdTdGFydGVkID0gbmV3IEV2ZW50RW1pdHRlcjxHYW50dExpbmtEcmFnRXZlbnQ+KCk7XG5cbiAgICBAT3V0cHV0KCkgb3ZlcnJpZGUgbGlua0RyYWdFbmRlZCA9IG5ldyBFdmVudEVtaXR0ZXI8R2FudHRMaW5rRHJhZ0V2ZW50PigpO1xuXG4gICAgQE91dHB1dCgpIGxpbmVDbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8R2FudHRMaW5lQ2xpY2tFdmVudD4oKTtcblxuICAgIEBPdXRwdXQoKSBzZWxlY3RlZENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8R2FudHRTZWxlY3RlZEV2ZW50PigpO1xuXG4gICAgQENvbnRlbnRDaGlsZChOZ3hHYW50dFRhYmxlQ29tcG9uZW50KSB0YWJsZTogTmd4R2FudHRUYWJsZUNvbXBvbmVudDtcblxuICAgIEBDb250ZW50Q2hpbGRyZW4oTmd4R2FudHRUYWJsZUNvbHVtbkNvbXBvbmVudCwgeyBkZXNjZW5kYW50czogdHJ1ZSB9KSBjb2x1bW5zOiBRdWVyeUxpc3Q8Tmd4R2FudHRUYWJsZUNvbHVtbkNvbXBvbmVudD47XG5cbiAgICBAQ29udGVudENoaWxkKCd0YWJsZUVtcHR5JywgeyBzdGF0aWM6IHRydWUgfSkgdGFibGVFbXB0eVRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gICAgcHJpdmF0ZSBuZ1Vuc3Vic2NyaWJlJCA9IG5ldyBTdWJqZWN0KCk7XG5cbiAgICBwdWJsaWMgc2lkZVRhYmxlV2lkdGggPSBzaWRlV2lkdGg7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgZWxlbWVudFJlZjogRWxlbWVudFJlZjxIVE1MRWxlbWVudD4sXG4gICAgICAgIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgICAgIG5nWm9uZTogTmdab25lLFxuICAgICAgICBASW5qZWN0KEdBTlRUX0dMT0JBTF9DT05GSUcpIGNvbmZpZzogR2FudHRHbG9iYWxDb25maWdcbiAgICApIHtcbiAgICAgICAgc3VwZXIoZWxlbWVudFJlZiwgY2RyLCBuZ1pvbmUsIGNvbmZpZyk7XG4gICAgfVxuXG4gICAgb3ZlcnJpZGUgbmdPbkluaXQoKSB7XG4gICAgICAgIHN1cGVyLm5nT25Jbml0KCk7XG4gICAgICAgIC8vIE5vdGU6IHRoZSB6b25lIG1heSBiZSBub29wZWQgdGhyb3VnaCBgQm9vdHN0cmFwT3B0aW9uc2Agd2hlbiBib290c3RyYXBwaW5nIHRoZSByb290IG1vZHVsZS4gVGhpcyBtZWFuc1xuICAgICAgICAvLyB0aGUgYG9uU3RhYmxlYCB3aWxsIG5ldmVyIGVtaXQgYW55IHZhbHVlLlxuICAgICAgICBjb25zdCBvblN0YWJsZSQgPSB0aGlzLm5nWm9uZS5pc1N0YWJsZSA/IGZyb20oUHJvbWlzZS5yZXNvbHZlKCkpIDogdGhpcy5uZ1pvbmUub25TdGFibGUucGlwZSh0YWtlKDEpKTtcbiAgICAgICAgLy8gTm9ybWFsbHkgdGhpcyBpc24ndCBpbiB0aGUgem9uZSwgYnV0IGl0IGNhbiBjYXVzZSBwZXJmb3JtYW5jZSByZWdyZXNzaW9ucyBmb3IgYXBwc1xuICAgICAgICAvLyB1c2luZyBgem9uZS1wYXRjaC1yeGpzYCBiZWNhdXNlIGl0J2xsIHRyaWdnZXIgYSBjaGFuZ2UgZGV0ZWN0aW9uIHdoZW4gaXQgdW5zdWJzY3JpYmVzLlxuICAgICAgICB0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICAgICAgICBvblN0YWJsZSQucGlwZSh0YWtlVW50aWwodGhpcy51bnN1YnNjcmliZSQpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuZHJhZ0NvbnRhaW5lci5saW5rRHJhZ1N0YXJ0ZWQucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlJCkpLnN1YnNjcmliZSgoZXZlbnQ6IEdhbnR0TGlua0RyYWdFdmVudCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmxpbmtEcmFnU3RhcnRlZC5lbWl0KGV2ZW50KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB0aGlzLmRyYWdDb250YWluZXIubGlua0RyYWdFbmRlZC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUkKSkuc3Vic2NyaWJlKChldmVudDogR2FudHRMaW5rRHJhZ0V2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubGlua0RyYWdFbmRlZC5lbWl0KGV2ZW50KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgICAgIHRoaXMuY29sdW1ucy5jaGFuZ2VzLnBpcGUoc3RhcnRXaXRoKHRydWUpLCB0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlJCkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmNvbHVtbnMuZm9yRWFjaCgoY29sdW1uKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCFjb2x1bW4uY29sdW1uV2lkdGgpIHtcbiAgICAgICAgICAgICAgICAgICAgY29sdW1uLmNvbHVtbldpZHRoID0gY29lcmNlQ3NzUGl4ZWxWYWx1ZShkZWZhdWx0Q29sdW1uV2lkdGgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBleHBhbmRDaGlsZHJlbihpdGVtOiBHYW50dEl0ZW1JbnRlcm5hbCkge1xuICAgICAgICBpZiAoIWl0ZW0uZXhwYW5kZWQpIHtcbiAgICAgICAgICAgIGl0ZW0uc2V0RXhwYW5kKHRydWUpO1xuICAgICAgICAgICAgaWYgKHRoaXMuYXN5bmMgJiYgdGhpcy5jaGlsZHJlblJlc29sdmUgJiYgaXRlbS5jaGlsZHJlbi5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICBpdGVtLmxvYWRpbmcgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHRoaXMuY2hpbGRyZW5SZXNvbHZlKGl0ZW0ub3JpZ2luKVxuICAgICAgICAgICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICAgICAgICAgIHRha2UoMSksXG4gICAgICAgICAgICAgICAgICAgICAgICBmaW5hbGl6ZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS5sb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5leHBhbmRDaGFuZ2UuZW1pdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgLnN1YnNjcmliZSgoaXRlbXMpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0uYWRkQ2hpbGRyZW4oaXRlbXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb21wdXRlSXRlbXNSZWZzKC4uLml0ZW0uY2hpbGRyZW4pO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jb21wdXRlSXRlbXNSZWZzKC4uLml0ZW0uY2hpbGRyZW4pO1xuICAgICAgICAgICAgICAgIHRoaXMuZXhwYW5kQ2hhbmdlLmVtaXQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGl0ZW0uc2V0RXhwYW5kKGZhbHNlKTtcbiAgICAgICAgICAgIHRoaXMuZXhwYW5kQ2hhbmdlLmVtaXQoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHNlbGVjdEl0ZW0oc2VsZWN0RXZlbnQ6IEdhbnR0U2VsZWN0ZWRFdmVudCkge1xuICAgICAgICBpZiAoIXRoaXMuc2VsZWN0YWJsZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHsgZXZlbnQsIHNlbGVjdGVkVmFsdWUgfSA9IHNlbGVjdEV2ZW50O1xuICAgICAgICB0aGlzLnNlbGVjdGlvbk1vZGVsLnRvZ2dsZSgoc2VsZWN0ZWRWYWx1ZSBhcyBHYW50dEl0ZW0pLmlkKTtcblxuICAgICAgICBjb25zdCBzZWxlY3RlZElkcyA9IHRoaXMuc2VsZWN0aW9uTW9kZWwuc2VsZWN0ZWQ7XG4gICAgICAgIGlmICh0aGlzLm11bHRpcGxlKSB7XG4gICAgICAgICAgICBjb25zdCBfc2VsZWN0ZWRWYWx1ZSA9IHRoaXMuZ2V0R2FudHRJdGVtcyhzZWxlY3RlZElkcykubWFwKChpdGVtKSA9PiBpdGVtLm9yaWdpbik7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkQ2hhbmdlLmVtaXQoeyBldmVudCwgc2VsZWN0ZWRWYWx1ZTogX3NlbGVjdGVkVmFsdWUgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBfc2VsZWN0ZWRWYWx1ZSA9IHRoaXMuZ2V0R2FudHRJdGVtKHNlbGVjdGVkSWRzWzBdKT8ub3JpZ2luO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZENoYW5nZS5lbWl0KHsgZXZlbnQsIHNlbGVjdGVkVmFsdWU6IF9zZWxlY3RlZFZhbHVlIH0pO1xuICAgICAgICB9XG4gICAgfVxufVxuIiwiPG5neC1nYW50dC1yb290PlxuICA8bmctdGVtcGxhdGUgI3NpZGVUZW1wbGF0ZT5cbiAgICA8Z2FudHQtdGFibGVcbiAgICAgIFtncm91cHNdPVwiZ3JvdXBzXCJcbiAgICAgIFtpdGVtc109XCJpdGVtc1wiXG4gICAgICBbY29sdW1uc109XCJjb2x1bW5zXCJcbiAgICAgIFtncm91cFRlbXBsYXRlXT1cImdyb3VwVGVtcGxhdGVcIlxuICAgICAgW2VtcHR5VGVtcGxhdGVdPVwidGFibGVFbXB0eVRlbXBsYXRlXCJcbiAgICAgIFtyb3dCZWZvcmVUZW1wbGF0ZV09XCJ0YWJsZT8ucm93QmVmb3JlVGVtcGxhdGVcIlxuICAgICAgW3Jvd0FmdGVyVGVtcGxhdGVdPVwidGFibGU/LnJvd0FmdGVyVGVtcGxhdGVcIlxuICAgICAgKGl0ZW1DbGljayk9XCJzZWxlY3RJdGVtKCRldmVudClcIlxuICAgID48L2dhbnR0LXRhYmxlPlxuICA8L25nLXRlbXBsYXRlPlxuICA8bmctdGVtcGxhdGUgI21haW5UZW1wbGF0ZT5cbiAgICA8Z2FudHQtbWFpblxuICAgICAgW2dyb3Vwc109XCJncm91cHNcIlxuICAgICAgW2l0ZW1zXT1cIml0ZW1zXCJcbiAgICAgIFtncm91cEhlYWRlclRlbXBsYXRlXT1cImdyb3VwSGVhZGVyVGVtcGxhdGVcIlxuICAgICAgW2l0ZW1UZW1wbGF0ZV09XCJpdGVtVGVtcGxhdGVcIlxuICAgICAgW2JhclRlbXBsYXRlXT1cImJhclRlbXBsYXRlXCJcbiAgICAgIFtyYW5nZVRlbXBsYXRlXT1cInJhbmdlVGVtcGxhdGVcIlxuICAgICAgKGJhckNsaWNrKT1cImJhckNsaWNrLmVtaXQoJGV2ZW50KVwiXG4gICAgICAobGluZUNsaWNrKT1cImxpbmVDbGljay5lbWl0KCRldmVudClcIlxuICAgID5cbiAgICA8L2dhbnR0LW1haW4+XG4gIDwvbmctdGVtcGxhdGU+XG48L25neC1nYW50dC1yb290PlxuIl19
@@ -1,9 +1,11 @@
1
- import { Component, HostBinding, Inject, ContentChild, Input, Optional } from '@angular/core';
1
+ import { Component, ElementRef, Inject, ContentChild, Input, Optional, ViewChild } from '@angular/core';
2
2
  import { GanttDomService, ScrollDirection } from './gantt-dom.service';
3
3
  import { GanttDragContainer } from './gantt-drag-container';
4
4
  import { take, takeUntil, startWith } from 'rxjs/operators';
5
- import { Subject } from 'rxjs';
5
+ import { from, Subject } from 'rxjs';
6
6
  import { GANTT_UPPER_TOKEN } from './gantt-upper';
7
+ import { passiveListenerOptions } from './utils/passive-listeners';
8
+ import { GanttDragBackdropComponent } from './components/drag-backdrop/drag-backdrop.component';
7
9
  import * as i0 from "@angular/core";
8
10
  import * as i1 from "./gantt-dom.service";
9
11
  import * as i2 from "./gantt-drag-container";
@@ -20,7 +22,6 @@ export class NgxGanttRootComponent {
20
22
  this.dragContainer = dragContainer;
21
23
  this.ganttUpper = ganttUpper;
22
24
  this.printService = printService;
23
- this.ganttClass = true;
24
25
  this.unsubscribe$ = new Subject();
25
26
  this.ganttUpper.dragContainer = dragContainer;
26
27
  }
@@ -28,44 +29,52 @@ export class NgxGanttRootComponent {
28
29
  return this.ganttUpper.view;
29
30
  }
30
31
  ngOnInit() {
31
- this.ngZone.onStable.pipe(take(1)).subscribe(() => {
32
- this.dom.initialize(this.elementRef);
33
- if (this.printService) {
34
- this.printService.register(this.elementRef);
35
- }
36
- this.setupScrollClass();
37
- this.setupResize();
38
- this.setupViewScroll();
39
- // 优化初始化时Scroll滚动体验问题,通过透明度解决,默认透明度为0,滚动结束后恢复
40
- this.elementRef.nativeElement.style.opacity = '1';
41
- this.ganttUpper.viewChange.pipe(startWith(null)).subscribe(() => {
42
- this.scrollToToday();
32
+ // Note: the zone may be nooped through `BootstrapOptions` when bootstrapping the root module. This means
33
+ // the `onStable` will never emit any value.
34
+ const onStable$ = this.ngZone.isStable ? from(Promise.resolve()) : this.ngZone.onStable.pipe(take(1));
35
+ // Normally this isn't in the zone, but it can cause performance regressions for apps
36
+ // using `zone-patch-rxjs` because it'll trigger a change detection when it unsubscribes.
37
+ this.ngZone.runOutsideAngular(() => {
38
+ onStable$.pipe(takeUntil(this.unsubscribe$)).subscribe(() => {
39
+ this.dom.initialize(this.elementRef);
40
+ if (this.printService) {
41
+ this.printService.register(this.elementRef);
42
+ }
43
+ this.setupScrollClass();
44
+ this.setupResize();
45
+ this.setupViewScroll();
46
+ // 优化初始化时Scroll滚动体验问题,通过透明度解决,默认透明度为0,滚动结束后恢复
47
+ this.elementRef.nativeElement.style.opacity = '1';
48
+ this.ganttUpper.viewChange.pipe(startWith(null), takeUntil(this.unsubscribe$)).subscribe(() => {
49
+ this.scrollToToday();
50
+ });
43
51
  });
44
52
  });
45
53
  }
54
+ ngOnDestroy() {
55
+ this.unsubscribe$.next();
56
+ }
46
57
  setupViewScroll() {
47
58
  if (this.ganttUpper.disabledLoadOnScroll) {
48
59
  return;
49
60
  }
50
61
  this.dom
51
- .getViewerScroll()
62
+ .getViewerScroll(passiveListenerOptions)
52
63
  .pipe(takeUntil(this.unsubscribe$))
53
64
  .subscribe((event) => {
54
65
  if (event.direction === ScrollDirection.LEFT) {
55
66
  const dates = this.view.addStartDate();
56
67
  if (dates) {
57
68
  event.target.scrollLeft += this.view.getDateRangeWidth(dates.start, dates.end);
58
- this.ngZone.run(() => {
59
- this.ganttUpper.loadOnScroll.emit({ start: dates.start.getUnixTime(), end: dates.end.getUnixTime() });
60
- });
69
+ if (this.ganttUpper.loadOnScroll.observers) {
70
+ this.ngZone.run(() => this.ganttUpper.loadOnScroll.emit({ start: dates.start.getUnixTime(), end: dates.end.getUnixTime() }));
71
+ }
61
72
  }
62
73
  }
63
74
  if (event.direction === ScrollDirection.RIGHT) {
64
75
  const dates = this.view.addEndDate();
65
- if (dates) {
66
- this.ngZone.run(() => {
67
- this.ganttUpper.loadOnScroll.emit({ start: dates.start.getUnixTime(), end: dates.end.getUnixTime() });
68
- });
76
+ if (dates && this.ganttUpper.loadOnScroll.observers) {
77
+ this.ngZone.run(() => this.ganttUpper.loadOnScroll.emit({ start: dates.start.getUnixTime(), end: dates.end.getUnixTime() }));
69
78
  }
70
79
  }
71
80
  });
@@ -95,13 +104,16 @@ export class NgxGanttRootComponent {
95
104
  }
96
105
  }
97
106
  NgxGanttRootComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.1.5", ngImport: i0, type: NgxGanttRootComponent, deps: [{ token: i0.ElementRef }, { token: i0.NgZone }, { token: i1.GanttDomService }, { token: i2.GanttDragContainer }, { token: GANTT_UPPER_TOKEN }, { token: i3.GanttPrintService, optional: true }], target: i0.ɵɵFactoryTarget.Component });
98
- NgxGanttRootComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.1.5", type: NgxGanttRootComponent, selector: "ngx-gantt-root", inputs: { sideWidth: "sideWidth" }, host: { properties: { "class.gantt": "this.ganttClass" } }, providers: [GanttDomService, GanttDragContainer], queries: [{ propertyName: "sideTemplate", first: true, predicate: ["sideTemplate"], descendants: true, static: true }, { propertyName: "mainTemplate", first: true, predicate: ["mainTemplate"], descendants: true, static: true }], ngImport: i0, template: "<div class=\"gantt-side\" [style.width.px]=\"sideWidth\">\n <div class=\"gantt-side-container\">\n <ng-template [ngTemplateOutlet]=\"sideTemplate\"></ng-template>\n </div>\n</div>\n<div class=\"gantt-container\">\n <gantt-calendar-overlay></gantt-calendar-overlay>\n <gantt-drag-backdrop></gantt-drag-backdrop>\n <div class=\"gantt-main\">\n <ng-template [ngTemplateOutlet]=\"mainTemplate\"></ng-template>\n </div>\n</div>\n", components: [{ type: i4.GanttCalendarComponent, selector: "gantt-calendar-overlay" }, { type: i5.GanttDragBackdropComponent, selector: "gantt-drag-backdrop" }], directives: [{ type: i6.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }] });
107
+ NgxGanttRootComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.1.5", type: NgxGanttRootComponent, selector: "ngx-gantt-root", inputs: { sideWidth: "sideWidth" }, host: { classAttribute: "gantt" }, providers: [GanttDomService, GanttDragContainer], queries: [{ propertyName: "sideTemplate", first: true, predicate: ["sideTemplate"], descendants: true, static: true }, { propertyName: "mainTemplate", first: true, predicate: ["mainTemplate"], descendants: true, static: true }], viewQueries: [{ propertyName: "backdrop", first: true, predicate: GanttDragBackdropComponent, descendants: true, read: ElementRef, static: true }], ngImport: i0, template: "<div class=\"gantt-side\" [style.width.px]=\"sideWidth\">\n <div class=\"gantt-side-container\">\n <ng-template [ngTemplateOutlet]=\"sideTemplate\"></ng-template>\n </div>\n</div>\n<div class=\"gantt-container\">\n <gantt-calendar-overlay></gantt-calendar-overlay>\n <gantt-drag-backdrop></gantt-drag-backdrop>\n <div class=\"gantt-main\">\n <ng-template [ngTemplateOutlet]=\"mainTemplate\"></ng-template>\n </div>\n</div>\n", components: [{ type: i4.GanttCalendarComponent, selector: "gantt-calendar-overlay" }, { type: i5.GanttDragBackdropComponent, selector: "gantt-drag-backdrop" }], directives: [{ type: i6.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }] });
99
108
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.1.5", ngImport: i0, type: NgxGanttRootComponent, decorators: [{
100
109
  type: Component,
101
110
  args: [{
102
111
  selector: 'ngx-gantt-root',
103
112
  templateUrl: './root.component.html',
104
- providers: [GanttDomService, GanttDragContainer]
113
+ providers: [GanttDomService, GanttDragContainer],
114
+ host: {
115
+ class: 'gantt'
116
+ }
105
117
  }]
106
118
  }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.NgZone }, { type: i1.GanttDomService }, { type: i2.GanttDragContainer }, { type: i7.GanttUpper, decorators: [{
107
119
  type: Inject,
@@ -110,14 +122,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.1.5", ngImpor
110
122
  type: Optional
111
123
  }] }]; }, propDecorators: { sideWidth: [{
112
124
  type: Input
113
- }], ganttClass: [{
114
- type: HostBinding,
115
- args: ['class.gantt']
116
125
  }], sideTemplate: [{
117
126
  type: ContentChild,
118
127
  args: ['sideTemplate', { static: true }]
119
128
  }], mainTemplate: [{
120
129
  type: ContentChild,
121
130
  args: ['mainTemplate', { static: true }]
131
+ }], backdrop: [{
132
+ type: ViewChild,
133
+ args: [GanttDragBackdropComponent, { static: true, read: ElementRef }]
122
134
  }] } });
123
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm9vdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9wYWNrYWdlcy9nYW50dC9zcmMvcm9vdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi9wYWNrYWdlcy9nYW50dC9zcmMvcm9vdC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsU0FBUyxFQUVULFdBQVcsRUFHWCxNQUFNLEVBQ04sWUFBWSxFQUVaLEtBQUssRUFDTCxRQUFRLEVBRVgsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGVBQWUsRUFBRSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN2RSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUM1RCxPQUFPLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM1RCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9CLE9BQU8sRUFBYyxpQkFBaUIsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7Ozs7Ozs7O0FBUTlELE1BQU0sT0FBTyxxQkFBcUI7SUFlOUIsWUFDWSxVQUFtQyxFQUNuQyxNQUFjLEVBQ2QsR0FBb0IsRUFDckIsYUFBaUMsRUFDTCxVQUFzQixFQUNyQyxZQUErQjtRQUwzQyxlQUFVLEdBQVYsVUFBVSxDQUF5QjtRQUNuQyxXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ2QsUUFBRyxHQUFILEdBQUcsQ0FBaUI7UUFDckIsa0JBQWEsR0FBYixhQUFhLENBQW9CO1FBQ0wsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQUNyQyxpQkFBWSxHQUFaLFlBQVksQ0FBbUI7UUFsQjNCLGVBQVUsR0FBRyxJQUFJLENBQUM7UUFNdEMsaUJBQVksR0FBRyxJQUFJLE9BQU8sRUFBRSxDQUFDO1FBY2pDLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxHQUFHLGFBQWEsQ0FBQztJ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Z0JBRXNCLFlBQVk7c0JBQTNELFlBQVk7dUJBQUMsY0FBYyxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFFRSxZQUFZO3NCQUEzRCxZQUFZO3VCQUFDLGNBQWMsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIENvbXBvbmVudCxcbiAgICBPbkluaXQsXG4gICAgSG9zdEJpbmRpbmcsXG4gICAgTmdab25lLFxuICAgIEVsZW1lbnRSZWYsXG4gICAgSW5qZWN0LFxuICAgIENvbnRlbnRDaGlsZCxcbiAgICBUZW1wbGF0ZVJlZixcbiAgICBJbnB1dCxcbiAgICBPcHRpb25hbCxcbiAgICBBZnRlclZpZXdJbml0XG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgR2FudHREb21TZXJ2aWNlLCBTY3JvbGxEaXJlY3Rpb24gfSBmcm9tICcuL2dhbnR0LWRvbS5zZXJ2aWNlJztcbmltcG9ydCB7IEdhbnR0RHJhZ0NvbnRhaW5lciB9IGZyb20gJy4vZ2FudHQtZHJhZy1jb250YWluZXInO1xuaW1wb3J0IHsgdGFrZSwgdGFrZVVudGlsLCBzdGFydFdpdGggfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBHYW50dFVwcGVyLCBHQU5UVF9VUFBFUl9UT0tFTiB9IGZyb20gJy4vZ2FudHQtdXBwZXInO1xuaW1wb3J0IHsgR2FudHRQcmludFNlcnZpY2UgfSBmcm9tICcuL2dhbnR0LXByaW50LnNlcnZpY2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ25neC1nYW50dC1yb290JyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vcm9vdC5jb21wb25lbnQuaHRtbCcsXG4gICAgcHJvdmlkZXJzOiBbR2FudHREb21TZXJ2aWNlLCBHYW50dERyYWdDb250YWluZXJdXG59KVxuZXhwb3J0IGNsYXNzIE5neEdhbnR0Um9vdENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gICAgQElucHV0KCkgc2lkZVdpZHRoOiBudW1iZXI7XG5cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmdhbnR0JykgZ2FudHRDbGFzcyA9IHRydWU7XG5cbiAgICBAQ29udGVudENoaWxkKCdzaWRlVGVtcGxhdGUnLCB7IHN0YXRpYzogdHJ1ZSB9KSBzaWRlVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgICBAQ29udGVudENoaWxkKCdtYWluVGVtcGxhdGUnLCB7IHN0YXRpYzogdHJ1ZSB9KSBtYWluVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgICBwcml2YXRlIHVuc3Vic2NyaWJlJCA9IG5ldyBTdWJqZWN0KCk7XG5cbiAgICBwcml2YXRlIGdldCB2aWV3KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5nYW50dFVwcGVyLnZpZXc7XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgZWxlbWVudFJlZjogRWxlbWVudFJlZjxIVE1MRWxlbWVudD4sXG4gICAgICAgIHByaXZhdGUgbmdab25lOiBOZ1pvbmUsXG4gICAgICAgIHByaXZhdGUgZG9tOiBHYW50dERvbVNlcnZpY2UsXG4gICAgICAgIHB1YmxpYyBkcmFnQ29udGFpbmVyOiBHYW50dERyYWdDb250YWluZXIsXG4gICAgICAgIEBJbmplY3QoR0FOVFRfVVBQRVJfVE9LRU4pIHByaXZhdGUgZ2FudHRVcHBlcjogR2FudHRVcHBlcixcbiAgICAgICAgQE9wdGlvbmFsKCkgcHJpdmF0ZSBwcmludFNlcnZpY2U6IEdhbnR0UHJpbnRTZXJ2aWNlXG4gICAgKSB7XG4gICAgICAgIHRoaXMuZ2FudHRVcHBlci5kcmFnQ29udGFpbmVyID0gZHJhZ0NvbnRhaW5lcjtcbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpIHtcbiAgICAgICAgdGhpcy5uZ1pvbmUub25TdGFibGUucGlwZSh0YWtlKDEpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5kb20uaW5pdGlhbGl6ZSh0aGlzLmVsZW1lbnRSZWYpO1xuICAgICAgICAgICAgaWYgKHRoaXMucHJpbnRTZXJ2aWNlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wcmludFNlcnZpY2UucmVnaXN0ZXIodGhpcy5lbGVtZW50UmVmKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuc2V0dXBTY3JvbGxDbGFzcygpO1xuICAgICAgICAgICAgdGhpcy5zZXR1cFJlc2l6ZSgpO1xuICAgICAgICAgICAgdGhpcy5zZXR1cFZpZXdTY3JvbGwoKTtcbiAgICAgICAgICAgIC8vIOS8mOWMluWIneWni+WMluaXtlNjcm9sbOa7muWKqOS9k+mqjOmXrumimO+8jOmAmui/h+mAj+aYjuW6puino+WGs++8jOm7mOiupOmAj+aYjuW6puS4ujDvvIzmu5rliqjnu5PmnZ/lkI7mgaLlpI1cbiAgICAgICAgICAgIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnN0eWxlLm9wYWNpdHkgPSAnMSc7XG4gICAgICAgICAgICB0aGlzLmdhbnR0VXBwZXIudmlld0NoYW5nZS5waXBlKHN0YXJ0V2l0aChudWxsKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnNjcm9sbFRvVG9kYXkoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldHVwVmlld1Njcm9sbCgpIHtcbiAgICAgICAgaWYgKHRoaXMuZ2FudHRVcHBlci5kaXNhYmxlZExvYWRPblNjcm9sbCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZG9tXG4gICAgICAgICAgICAuZ2V0Vmlld2VyU2Nyb2xsKClcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLnVuc3Vic2NyaWJlJCkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChldmVudCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChldmVudC5kaXJlY3Rpb24gPT09IFNjcm9sbERpcmVjdGlvbi5MRUZUKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGRhdGVzID0gdGhpcy52aWV3LmFkZFN0YXJ0RGF0ZSgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZGF0ZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LnRhcmdldC5zY3JvbGxMZWZ0ICs9IHRoaXMudmlldy5nZXREYXRlUmFuZ2VXaWR0aChkYXRlcy5zdGFydCwgZGF0ZXMuZW5kKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmdab25lLnJ1bigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5nYW50dFVwcGVyLmxvYWRPblNjcm9sbC5lbWl0KHsgc3RhcnQ6IGRhdGVzLnN0YXJ0LmdldFVuaXhUaW1lKCksIGVuZDogZGF0ZXMuZW5kLmdldFVuaXhUaW1lKCkgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoZXZlbnQuZGlyZWN0aW9uID09PSBTY3JvbGxEaXJlY3Rpb24uUklHSFQpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZGF0ZXMgPSB0aGlzLnZpZXcuYWRkRW5kRGF0ZSgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZGF0ZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmdab25lLnJ1bigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5nYW50dFVwcGVyLmxvYWRPblNjcm9sbC5lbWl0KHsgc3RhcnQ6IGRhdGVzLnN0YXJ0LmdldFVuaXhUaW1lKCksIGVuZDogZGF0ZXMuZW5kLmdldFVuaXhUaW1lKCkgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0dXBSZXNpemUoKSB7XG4gICAgICAgIHRoaXMuZG9tXG4gICAgICAgICAgICAuZ2V0UmVzaXplKClcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLnVuc3Vic2NyaWJlJCkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldHVwU2Nyb2xsQ2xhc3MoKTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0dXBTY3JvbGxDbGFzcygpIHtcbiAgICAgICAgY29uc3QgbWFpbkNvbnRhaW5lciA9IHRoaXMuZG9tLm1haW5Db250YWluZXIgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICAgIGNvbnN0IGhlaWdodCA9IG1haW5Db250YWluZXIub2Zmc2V0SGVpZ2h0O1xuICAgICAgICBjb25zdCBzY3JvbGxIZWlnaHQgPSBtYWluQ29udGFpbmVyLnNjcm9sbEhlaWdodDtcbiAgICAgICAgaWYgKHNjcm9sbEhlaWdodCA+IGhlaWdodCkge1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuY2xhc3NOYW1lID0gJ2dhbnR0IGdhbnR0LXNjcm9sbCc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5jbGFzc05hbWUgPSAnZ2FudHQnO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzY3JvbGxUb1RvZGF5KCkge1xuICAgICAgICBjb25zdCB4ID0gdGhpcy52aWV3LmdldFRvZGF5WFBvaW50KCk7XG4gICAgICAgIHRoaXMuZG9tLnNjcm9sbE1haW5Db250YWluZXIoeCk7XG4gICAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImdhbnR0LXNpZGVcIiBbc3R5bGUud2lkdGgucHhdPVwic2lkZVdpZHRoXCI+XG4gIDxkaXYgY2xhc3M9XCJnYW50dC1zaWRlLWNvbnRhaW5lclwiPlxuICAgIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJzaWRlVGVtcGxhdGVcIj48L25nLXRlbXBsYXRlPlxuICA8L2Rpdj5cbjwvZGl2PlxuPGRpdiBjbGFzcz1cImdhbnR0LWNvbnRhaW5lclwiPlxuICA8Z2FudHQtY2FsZW5kYXItb3ZlcmxheT48L2dhbnR0LWNhbGVuZGFyLW92ZXJsYXk+XG4gIDxnYW50dC1kcmFnLWJhY2tkcm9wPjwvZ2FudHQtZHJhZy1iYWNrZHJvcD5cbiAgPGRpdiBjbGFzcz1cImdhbnR0LW1haW5cIj5cbiAgICA8bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRdPVwibWFpblRlbXBsYXRlXCI+PC9uZy10ZW1wbGF0ZT5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
135
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm9vdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9wYWNrYWdlcy9nYW50dC9zcmMvcm9vdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi9wYWNrYWdlcy9nYW50dC9zcmMvcm9vdC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsU0FBUyxFQUdULFVBQVUsRUFDVixNQUFNLEVBQ04sWUFBWSxFQUVaLEtBQUssRUFDTCxRQUFRLEVBRVIsU0FBUyxFQUNaLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxlQUFlLEVBQUUsZUFBZSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdkUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDNUQsT0FBTyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDNUQsT0FBTyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDckMsT0FBTyxFQUFjLGlCQUFpQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTlELE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ25FLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLG9EQUFvRCxDQUFDOzs7Ozs7Ozs7QUFVaEcsTUFBTSxPQUFPLHFCQUFxQjtJQWdCOUIsWUFDWSxVQUFtQyxFQUNuQyxNQUFjLEVBQ2QsR0FBb0IsRUFDckIsYUFBaUMsRUFDTCxVQUFzQixFQUNyQyxZQUErQjtRQUwzQyxlQUFVLEdBQVYsVUFBVSxDQUF5QjtRQUNuQyxXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ2QsUUFBRyxHQUFILEdBQUcsQ0FBaUI7UUFDckIsa0JBQWEsR0FBYixhQUFhLENBQW9CO1FBQ0wsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQUNyQyxpQkFBWSxHQUFaLFlBQVksQ0FBbUI7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QUFDLFNBQVMsR0FBRyxvQkFBb0IsQ0FBQztTQUNsRTthQUFNO1lBQ0gsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsU0FBUyxHQUFHLE9BQU8sQ0FBQztTQUNyRDtJQUNMLENBQUM7SUFFTyxhQUFhO1FBQ2pCLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDckMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNwQyxDQUFDOztrSEE1R1EscUJBQXFCLG1JQXFCbEIsaUJBQWlCO3NHQXJCcEIscUJBQXFCLGdIQUxuQixDQUFDLGVBQWUsRUFBRSxrQkFBa0IsQ0FBQyx5U0FhckMsMEJBQTBCLDJCQUF3QixVQUFVLDJDQ3RDM0Usc2JBWUE7MkZEa0JhLHFCQUFxQjtrQkFSakMsU0FBUzttQkFBQztvQkFDUCxRQUFRLEVBQUUsZ0JBQWdCO29CQUMxQixXQUFXLEVBQUUsdUJBQXVCO29CQUNwQyxTQUFTLEVBQUUsQ0FBQyxlQUFlLEVBQUUsa0JBQWtCLENBQUM7b0JBQ2hELElBQUksRUFBRTt3QkFDRixLQUFLLEVBQUUsT0FBTztxQkFDakI7aUJBQ0o7OzBCQXNCUSxNQUFNOzJCQUFDLGlCQUFpQjs7MEJBQ3hCLFFBQVE7NENBckJKLFNBQVM7c0JBQWpCLEtBQUs7Z0JBRTBDLFlBQVk7c0JBQTNELFlBQVk7dUJBQUMsY0FBYyxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFFRSxZQUFZO3NCQUEzRCxZQUFZO3VCQUFDLGNBQWMsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBRzZCLFFBQVE7c0JBQWxGLFNBQVM7dUJBQUMsMEJBQTBCLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIENvbXBvbmVudCxcbiAgICBPbkluaXQsXG4gICAgTmdab25lLFxuICAgIEVsZW1lbnRSZWYsXG4gICAgSW5qZWN0LFxuICAgIENvbnRlbnRDaGlsZCxcbiAgICBUZW1wbGF0ZVJlZixcbiAgICBJbnB1dCxcbiAgICBPcHRpb25hbCxcbiAgICBPbkRlc3Ryb3ksXG4gICAgVmlld0NoaWxkXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgR2FudHREb21TZXJ2aWNlLCBTY3JvbGxEaXJlY3Rpb24gfSBmcm9tICcuL2dhbnR0LWRvbS5zZXJ2aWNlJztcbmltcG9ydCB7IEdhbnR0RHJhZ0NvbnRhaW5lciB9IGZyb20gJy4vZ2FudHQtZHJhZy1jb250YWluZXInO1xuaW1wb3J0IHsgdGFrZSwgdGFrZVVudGlsLCBzdGFydFdpdGggfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBmcm9tLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBHYW50dFVwcGVyLCBHQU5UVF9VUFBFUl9UT0tFTiB9IGZyb20gJy4vZ2FudHQtdXBwZXInO1xuaW1wb3J0IHsgR2FudHRQcmludFNlcnZpY2UgfSBmcm9tICcuL2dhbnR0LXByaW50LnNlcnZpY2UnO1xuaW1wb3J0IHsgcGFzc2l2ZUxpc3RlbmVyT3B0aW9ucyB9IGZyb20gJy4vdXRpbHMvcGFzc2l2ZS1saXN0ZW5lcnMnO1xuaW1wb3J0IHsgR2FudHREcmFnQmFja2Ryb3BDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvZHJhZy1iYWNrZHJvcC9kcmFnLWJhY2tkcm9wLmNvbXBvbmVudCc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnbmd4LWdhbnR0LXJvb3QnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9yb290LmNvbXBvbmVudC5odG1sJyxcbiAgICBwcm92aWRlcnM6IFtHYW50dERvbVNlcnZpY2UsIEdhbnR0RHJhZ0NvbnRhaW5lcl0sXG4gICAgaG9zdDoge1xuICAgICAgICBjbGFzczogJ2dhbnR0J1xuICAgIH1cbn0pXG5leHBvcnQgY2xhc3MgTmd4R2FudHRSb290Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICAgIEBJbnB1dCgpIHNpZGVXaWR0aDogbnVtYmVyO1xuXG4gICAgQENvbnRlbnRDaGlsZCgnc2lkZVRlbXBsYXRlJywgeyBzdGF0aWM6IHRydWUgfSkgc2lkZVRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gICAgQENvbnRlbnRDaGlsZCgnbWFpblRlbXBsYXRlJywgeyBzdGF0aWM6IHRydWUgfSkgbWFpblRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gICAgLyoqIFRoZSBuYXRpdmUgYDxnYW50dC1kcmFnLWJhY2tkcm9wPjwvZ2FudHQtZHJhZy1iYWNrZHJvcD5gIGVsZW1lbnQuICovXG4gICAgQFZpZXdDaGlsZChHYW50dERyYWdCYWNrZHJvcENvbXBvbmVudCwgeyBzdGF0aWM6IHRydWUsIHJlYWQ6IEVsZW1lbnRSZWYgfSkgYmFja2Ryb3A6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+O1xuXG4gICAgcHJpdmF0ZSB1bnN1YnNjcmliZSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gICAgcHJpdmF0ZSBnZXQgdmlldygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2FudHRVcHBlci52aWV3O1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+LFxuICAgICAgICBwcml2YXRlIG5nWm9uZTogTmdab25lLFxuICAgICAgICBwcml2YXRlIGRvbTogR2FudHREb21TZXJ2aWNlLFxuICAgICAgICBwdWJsaWMgZHJhZ0NvbnRhaW5lcjogR2FudHREcmFnQ29udGFpbmVyLFxuICAgICAgICBASW5qZWN0KEdBTlRUX1VQUEVSX1RPS0VOKSBwcml2YXRlIGdhbnR0VXBwZXI6IEdhbnR0VXBwZXIsXG4gICAgICAgIEBPcHRpb25hbCgpIHByaXZhdGUgcHJpbnRTZXJ2aWNlOiBHYW50dFByaW50U2VydmljZVxuICAgICkge1xuICAgICAgICB0aGlzLmdhbnR0VXBwZXIuZHJhZ0NvbnRhaW5lciA9IGRyYWdDb250YWluZXI7XG4gICAgfVxuXG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIC8vIE5vdGU6IHRoZSB6b25lIG1heSBiZSBub29wZWQgdGhyb3VnaCBgQm9vdHN0cmFwT3B0aW9uc2Agd2hlbiBib290c3RyYXBwaW5nIHRoZSByb290IG1vZHVsZS4gVGhpcyBtZWFuc1xuICAgICAgICAvLyB0aGUgYG9uU3RhYmxlYCB3aWxsIG5ldmVyIGVtaXQgYW55IHZhbHVlLlxuICAgICAgICBjb25zdCBvblN0YWJsZSQgPSB0aGlzLm5nWm9uZS5pc1N0YWJsZSA/IGZyb20oUHJvbWlzZS5yZXNvbHZlKCkpIDogdGhpcy5uZ1pvbmUub25TdGFibGUucGlwZSh0YWtlKDEpKTtcbiAgICAgICAgLy8gTm9ybWFsbHkgdGhpcyBpc24ndCBpbiB0aGUgem9uZSwgYnV0IGl0IGNhbiBjYXVzZSBwZXJmb3JtYW5jZSByZWdyZXNzaW9ucyBmb3IgYXBwc1xuICAgICAgICAvLyB1c2luZyBgem9uZS1wYXRjaC1yeGpzYCBiZWNhdXNlIGl0J2xsIHRyaWdnZXIgYSBjaGFuZ2UgZGV0ZWN0aW9uIHdoZW4gaXQgdW5zdWJzY3JpYmVzLlxuICAgICAgICB0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICAgICAgICBvblN0YWJsZSQucGlwZSh0YWtlVW50aWwodGhpcy51bnN1YnNjcmliZSQpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuZG9tLmluaXRpYWxpemUodGhpcy5lbGVtZW50UmVmKTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5wcmludFNlcnZpY2UpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wcmludFNlcnZpY2UucmVnaXN0ZXIodGhpcy5lbGVtZW50UmVmKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5zZXR1cFNjcm9sbENsYXNzKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXR1cFJlc2l6ZSgpO1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0dXBWaWV3U2Nyb2xsKCk7XG4gICAgICAgICAgICAgICAgLy8g5LyY5YyW5Yid5aeL5YyW5pe2U2Nyb2xs5rua5Yqo5L2T6aqM6Zeu6aKY77yM6YCa6L+H6YCP5piO5bqm6Kej5Yaz77yM6buY6K6k6YCP5piO5bqm5Li6MO+8jOa7muWKqOe7k+adn+WQjuaBouWkjVxuICAgICAgICAgICAgICAgIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnN0eWxlLm9wYWNpdHkgPSAnMSc7XG4gICAgICAgICAgICAgICAgdGhpcy5nYW50dFVwcGVyLnZpZXdDaGFuZ2UucGlwZShzdGFydFdpdGg8bnVsbCwgbnVsbD4obnVsbCksIHRha2VVbnRpbCh0aGlzLnVuc3Vic2NyaWJlJCkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2Nyb2xsVG9Ub2RheSgpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICB0aGlzLnVuc3Vic2NyaWJlJC5uZXh0KCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXR1cFZpZXdTY3JvbGwoKSB7XG4gICAgICAgIGlmICh0aGlzLmdhbnR0VXBwZXIuZGlzYWJsZWRMb2FkT25TY3JvbGwpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmRvbVxuICAgICAgICAgICAgLmdldFZpZXdlclNjcm9sbChwYXNzaXZlTGlzdGVuZXJPcHRpb25zKVxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMudW5zdWJzY3JpYmUkKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGV2ZW50LmRpcmVjdGlvbiA9PT0gU2Nyb2xsRGlyZWN0aW9uLkxFRlQpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZGF0ZXMgPSB0aGlzLnZpZXcuYWRkU3RhcnREYXRlKCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChkYXRlcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQudGFyZ2V0LnNjcm9sbExlZnQgKz0gdGhpcy52aWV3LmdldERhdGVSYW5nZVdpZHRoKGRhdGVzLnN0YXJ0LCBkYXRlcy5lbmQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuZ2FudHRVcHBlci5sb2FkT25TY3JvbGwub2JzZXJ2ZXJzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZ2FudHRVcHBlci5sb2FkT25TY3JvbGwuZW1pdCh7IHN0YXJ0OiBkYXRlcy5zdGFydC5nZXRVbml4VGltZSgpLCBlbmQ6IGRhdGVzLmVuZC5nZXRVbml4VGltZSgpIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoZXZlbnQuZGlyZWN0aW9uID09PSBTY3JvbGxEaXJlY3Rpb24uUklHSFQpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZGF0ZXMgPSB0aGlzLnZpZXcuYWRkRW5kRGF0ZSgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZGF0ZXMgJiYgdGhpcy5nYW50dFVwcGVyLmxvYWRPblNjcm9sbC5vYnNlcnZlcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmdab25lLnJ1bigoKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZ2FudHRVcHBlci5sb2FkT25TY3JvbGwuZW1pdCh7IHN0YXJ0OiBkYXRlcy5zdGFydC5nZXRVbml4VGltZSgpLCBlbmQ6IGRhdGVzLmVuZC5nZXRVbml4VGltZSgpIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXR1cFJlc2l6ZSgpIHtcbiAgICAgICAgdGhpcy5kb21cbiAgICAgICAgICAgIC5nZXRSZXNpemUoKVxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMudW5zdWJzY3JpYmUkKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0dXBTY3JvbGxDbGFzcygpO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXR1cFNjcm9sbENsYXNzKCkge1xuICAgICAgICBjb25zdCBtYWluQ29udGFpbmVyID0gdGhpcy5kb20ubWFpbkNvbnRhaW5lciBhcyBIVE1MRWxlbWVudDtcbiAgICAgICAgY29uc3QgaGVpZ2h0ID0gbWFpbkNvbnRhaW5lci5vZmZzZXRIZWlnaHQ7XG4gICAgICAgIGNvbnN0IHNjcm9sbEhlaWdodCA9IG1haW5Db250YWluZXIuc2Nyb2xsSGVpZ2h0O1xuICAgICAgICBpZiAoc2Nyb2xsSGVpZ2h0ID4gaGVpZ2h0KSB7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5jbGFzc05hbWUgPSAnZ2FudHQgZ2FudHQtc2Nyb2xsJztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNsYXNzTmFtZSA9ICdnYW50dCc7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHNjcm9sbFRvVG9kYXkoKSB7XG4gICAgICAgIGNvbnN0IHggPSB0aGlzLnZpZXcuZ2V0VG9kYXlYUG9pbnQoKTtcbiAgICAgICAgdGhpcy5kb20uc2Nyb2xsTWFpbkNvbnRhaW5lcih4KTtcbiAgICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiZ2FudHQtc2lkZVwiIFtzdHlsZS53aWR0aC5weF09XCJzaWRlV2lkdGhcIj5cbiAgPGRpdiBjbGFzcz1cImdhbnR0LXNpZGUtY29udGFpbmVyXCI+XG4gICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInNpZGVUZW1wbGF0ZVwiPjwvbmctdGVtcGxhdGU+XG4gIDwvZGl2PlxuPC9kaXY+XG48ZGl2IGNsYXNzPVwiZ2FudHQtY29udGFpbmVyXCI+XG4gIDxnYW50dC1jYWxlbmRhci1vdmVybGF5PjwvZ2FudHQtY2FsZW5kYXItb3ZlcmxheT5cbiAgPGdhbnR0LWRyYWctYmFja2Ryb3A+PC9nYW50dC1kcmFnLWJhY2tkcm9wPlxuICA8ZGl2IGNsYXNzPVwiZ2FudHQtbWFpblwiPlxuICAgIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJtYWluVGVtcGxhdGVcIj48L25nLXRlbXBsYXRlPlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19
@@ -10,7 +10,6 @@ export class NgxGanttTableColumnComponent {
10
10
  set width(width) {
11
11
  this.columnWidth = coerceCssPixelValue(width);
12
12
  }
13
- ngOnInit() { }
14
13
  }
15
14
  NgxGanttTableColumnComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.1.5", ngImport: i0, type: NgxGanttTableColumnComponent, deps: [{ token: GANTT_UPPER_TOKEN }], target: i0.ɵɵFactoryTarget.Component });
16
15
  NgxGanttTableColumnComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.1.5", type: NgxGanttTableColumnComponent, selector: "ngx-gantt-column", inputs: { width: "width", name: "name" }, queries: [{ propertyName: "templateRef", first: true, predicate: ["cell"], descendants: true, static: true }, { propertyName: "headerTemplateRef", first: true, predicate: ["header"], descendants: true, static: true }], ngImport: i0, template: '', isInline: true });
@@ -34,4 +33,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.1.5", ngImpor
34
33
  type: ContentChild,
35
34
  args: ['header', { static: true }]
36
35
  }] } });
37
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2FudHQtY29sdW1uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL2dhbnR0L3NyYy90YWJsZS9nYW50dC1jb2x1bW4uY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsWUFBWSxFQUFlLEtBQUssRUFBZ0IsTUFBTSxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBQ2xILE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzVELE9BQU8sRUFBYyxpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7QUFLL0QsTUFBTSxPQUFPLDRCQUE0QjtJQWNyQyxZQUE4QyxVQUFzQjtRQUF0QixlQUFVLEdBQVYsVUFBVSxDQUFZO0lBQUcsQ0FBQztJQVh4RSxJQUNJLEtBQUssQ0FBQyxLQUFzQjtRQUM1QixJQUFJLENBQUMsV0FBVyxHQUFHLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2xELENBQUM7SUFVRCxRQUFRLEtBQUksQ0FBQzs7eUhBaEJKLDRCQUE0QixrQkFjakIsaUJBQWlCOzZHQWQ1Qiw0QkFBNEIsNlRBRjNCLEVBQUU7MkZBRUgsNEJBQTRCO2tCQUp4QyxTQUFTO21CQUFDO29CQUNQLFFBQVEsRUFBRSxrQkFBa0I7b0JBQzVCLFFBQVEsRUFBRSxFQUFFO2lCQUNmOzswQkFlZ0IsTUFBTTsyQkFBQyxpQkFBaUI7NENBVmpDLEtBQUs7c0JBRFIsS0FBSztnQkFLRyxJQUFJO3NCQUFaLEtBQUs7Z0JBRWtDLFdBQVc7c0JBQWxELFlBQVk7dUJBQUMsTUFBTSxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFFSSxpQkFBaUI7c0JBQTFELFlBQVk7dUJBQUMsUUFBUSxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBDb250ZW50Q2hpbGQsIFRlbXBsYXRlUmVmLCBJbnB1dCwgRXZlbnRFbWl0dGVyLCBJbmplY3QsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgY29lcmNlQ3NzUGl4ZWxWYWx1ZSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2VyY2lvbic7XG5pbXBvcnQgeyBHYW50dFVwcGVyLCBHQU5UVF9VUFBFUl9UT0tFTiB9IGZyb20gJy4uL2dhbnR0LXVwcGVyJztcbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnbmd4LWdhbnR0LWNvbHVtbicsXG4gICAgdGVtcGxhdGU6ICcnXG59KVxuZXhwb3J0IGNsYXNzIE5neEdhbnR0VGFibGVDb2x1bW5Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICAgIHB1YmxpYyBjb2x1bW5XaWR0aDogc3RyaW5nO1xuXG4gICAgQElucHV0KClcbiAgICBzZXQgd2lkdGgod2lkdGg6IG51bWJlciB8IHN0cmluZykge1xuICAgICAgICB0aGlzLmNvbHVtbldpZHRoID0gY29lcmNlQ3NzUGl4ZWxWYWx1ZSh3aWR0aCk7XG4gICAgfVxuXG4gICAgQElucHV0KCkgbmFtZTogc3RyaW5nO1xuXG4gICAgQENvbnRlbnRDaGlsZCgnY2VsbCcsIHsgc3RhdGljOiB0cnVlIH0pIHRlbXBsYXRlUmVmOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gICAgQENvbnRlbnRDaGlsZCgnaGVhZGVyJywgeyBzdGF0aWM6IHRydWUgfSkgaGVhZGVyVGVtcGxhdGVSZWY6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgICBjb25zdHJ1Y3RvcihASW5qZWN0KEdBTlRUX1VQUEVSX1RPS0VOKSBwdWJsaWMgZ2FudHRVcHBlcjogR2FudHRVcHBlcikge31cblxuICAgIG5nT25Jbml0KCkge31cbn1cbiJdfQ==
36
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2FudHQtY29sdW1uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL2dhbnR0L3NyYy90YWJsZS9nYW50dC1jb2x1bW4uY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFlLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDcEYsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDNUQsT0FBTyxFQUFjLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7OztBQUsvRCxNQUFNLE9BQU8sNEJBQTRCO0lBY3JDLFlBQThDLFVBQXNCO1FBQXRCLGVBQVUsR0FBVixVQUFVLENBQVk7SUFBRyxDQUFDO0lBWHhFLElBQ0ksS0FBSyxDQUFDLEtBQXNCO1FBQzVCLElBQUksQ0FBQyxXQUFXLEdBQUcsbUJBQW1CLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDbEQsQ0FBQzs7eUhBTlEsNEJBQTRCLGtCQWNqQixpQkFBaUI7NkdBZDVCLDRCQUE0Qiw2VEFGM0IsRUFBRTsyRkFFSCw0QkFBNEI7a0JBSnhDLFNBQVM7bUJBQUM7b0JBQ1AsUUFBUSxFQUFFLGtCQUFrQjtvQkFDNUIsUUFBUSxFQUFFLEVBQUU7aUJBQ2Y7OzBCQWVnQixNQUFNOzJCQUFDLGlCQUFpQjs0Q0FWakMsS0FBSztzQkFEUixLQUFLO2dCQUtHLElBQUk7c0JBQVosS0FBSztnQkFFa0MsV0FBVztzQkFBbEQsWUFBWTt1QkFBQyxNQUFNLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQUVJLGlCQUFpQjtzQkFBMUQsWUFBWTt1QkFBQyxRQUFRLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBDb250ZW50Q2hpbGQsIFRlbXBsYXRlUmVmLCBJbnB1dCwgSW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBjb2VyY2VDc3NQaXhlbFZhbHVlIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvZXJjaW9uJztcbmltcG9ydCB7IEdhbnR0VXBwZXIsIEdBTlRUX1VQUEVSX1RPS0VOIH0gZnJvbSAnLi4vZ2FudHQtdXBwZXInO1xuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICduZ3gtZ2FudHQtY29sdW1uJyxcbiAgICB0ZW1wbGF0ZTogJydcbn0pXG5leHBvcnQgY2xhc3MgTmd4R2FudHRUYWJsZUNvbHVtbkNvbXBvbmVudCB7XG4gICAgcHVibGljIGNvbHVtbldpZHRoOiBzdHJpbmc7XG5cbiAgICBASW5wdXQoKVxuICAgIHNldCB3aWR0aCh3aWR0aDogbnVtYmVyIHwgc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuY29sdW1uV2lkdGggPSBjb2VyY2VDc3NQaXhlbFZhbHVlKHdpZHRoKTtcbiAgICB9XG5cbiAgICBASW5wdXQoKSBuYW1lOiBzdHJpbmc7XG5cbiAgICBAQ29udGVudENoaWxkKCdjZWxsJywgeyBzdGF0aWM6IHRydWUgfSkgdGVtcGxhdGVSZWY6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgICBAQ29udGVudENoaWxkKCdoZWFkZXInLCB7IHN0YXRpYzogdHJ1ZSB9KSBoZWFkZXJUZW1wbGF0ZVJlZjogVGVtcGxhdGVSZWY8YW55PjtcblxuICAgIGNvbnN0cnVjdG9yKEBJbmplY3QoR0FOVFRfVVBQRVJfVE9LRU4pIHB1YmxpYyBnYW50dFVwcGVyOiBHYW50dFVwcGVyKSB7fVxufVxuIl19