@schneideress/dashboardframework 0.0.147 → 0.0.148

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.
@@ -7,17 +7,18 @@ import { Input, Component, NgZone, ViewChild, ElementRef, HostListener } from '@
7
7
  import { RaDashboardService } from '../ra.dashboard.service';
8
8
  import { RADashboardEventBus } from '../ra.dashbard.event.bus';
9
9
  import { RAEvent } from '../ra.event.enum';
10
- import { GridsterConfigDefaultSettings } from '../ra.gridster.config';
11
10
  import { NgxUiLoaderService } from 'ngx-ui-loader';
12
11
  import { NotifierService } from 'angular-notifier';
13
12
  import { RATranslateService } from '@schneideress/ra-common';
13
+ import { RADashboardResponsiveService } from '../ra.dashboard.responsive.service';
14
14
  var RADashboardArea = /** @class */ (function () {
15
- function RADashboardArea(dashboardService, ngZone, ngxService, translateService, notifier) {
15
+ function RADashboardArea(dashboardService, ngZone, ngxService, translateService, notifier, responsiveService) {
16
16
  this.dashboardService = dashboardService;
17
17
  this.ngZone = ngZone;
18
18
  this.ngxService = ngxService;
19
19
  this.translateService = translateService;
20
20
  this.notifier = notifier;
21
+ this.responsiveService = responsiveService;
21
22
  this.widgetList = Array();
22
23
  this.gridheight = 300;
23
24
  this.gridcellHeight = 0;
@@ -35,15 +36,23 @@ var RADashboardArea = /** @class */ (function () {
35
36
  * @return {?}
36
37
  */
37
38
  function (event) {
38
- /** @type {?} */
39
- var areaContext = this;
39
+ var _this = this;
40
+ this.widgetList = [];
40
41
  setTimeout((/**
41
42
  * @return {?}
42
43
  */
43
44
  function () {
44
- areaContext.setAreaHeight();
45
- areaContext.domResized = !areaContext.domResized;
46
- }), 1000);
45
+ _this.initiateGridsterConfig();
46
+ _this.options.api.optionsChanged();
47
+ if (_this.userWidgets) {
48
+ _this.widgetList = _this.mapObjectListToGridsterItemList(_this.userWidgets);
49
+ _this.setAreaHeight();
50
+ }
51
+ else {
52
+ _this.loadWidgets(_this.userDashboardId, _this.areaKey);
53
+ }
54
+ _this.domResized = !_this.domResized;
55
+ }));
47
56
  };
48
57
  /**
49
58
  * @return {?}
@@ -71,46 +80,30 @@ var RADashboardArea = /** @class */ (function () {
71
80
  this.inititateEventBusSubscritions();
72
81
  }
73
82
  };
74
- // public invokeResizeEvent() {
75
- // this.widgetContainers.forEach(function(container,i){
76
- // container.invokeWidgetResizedEvent();
77
- // });
78
- // }
79
83
  /**To set GridsterConfig */
80
- // public invokeResizeEvent() {
81
- // this.widgetContainers.forEach(function(container,i){
82
- // container.invokeWidgetResizedEvent();
83
- // });
84
- // }
85
84
  /**
86
85
  * To set GridsterConfig
87
86
  * @return {?}
88
87
  */
89
- RADashboardArea.prototype.initiateGridsterConfig =
90
- // public invokeResizeEvent() {
91
- // this.widgetContainers.forEach(function(container,i){
92
- // container.invokeWidgetResizedEvent();
93
- // });
94
- // }
95
- /**
88
+ RADashboardArea.prototype.initiateGridsterConfig = /**
96
89
  * To set GridsterConfig
97
90
  * @return {?}
98
91
  */
99
92
  function () {
100
- /** @type {?} */
101
- var areaContext = this;
93
+ var _this = this;
102
94
  /**To override default configuration values to the gridster control */
103
- this.options = GridsterConfigDefaultSettings;
95
+ this.options = this.responsiveService.GridsterConfig;
104
96
  this.options.itemChangeCallback = (/**
105
97
  * @param {?} item
106
98
  * @return {?}
107
99
  */
108
100
  function (item) {
109
- console.log('in item change clal back');
110
- if (item.widgetInfo && item.widgetInfo.widgetInstanceId) {
111
- areaContext.updateWidgetPosition(item.widgetInfo.widgetInstanceId);
101
+ if (_this.responsiveService.IsDesktopView) {
102
+ if (item.widgetInfo && item.widgetInfo.widgetInstanceId) {
103
+ _this.updateWidgetPosition(item.widgetInfo.widgetInstanceId);
104
+ }
112
105
  }
113
- areaContext.setAreaHeight();
106
+ _this.setAreaHeight();
114
107
  });
115
108
  };
116
109
  /** To initiate eventbus subsctiptions */
@@ -169,7 +162,6 @@ var RADashboardArea = /** @class */ (function () {
169
162
  * @return {?}
170
163
  */
171
164
  function () {
172
- console.log('rearrange event bus triggered');
173
165
  _this.rearrangeWidgets();
174
166
  }));
175
167
  }));
@@ -183,9 +175,6 @@ var RADashboardArea = /** @class */ (function () {
183
175
  */
184
176
  function () {
185
177
  if (widgetList) {
186
- // widgetList.forEach(widgetInfo => {
187
- // this.addWidget(widgetInfo);
188
- // });
189
178
  _this.addWidgetListToGridster(widgetList, 0);
190
179
  }
191
180
  }));
@@ -349,21 +338,36 @@ var RADashboardArea = /** @class */ (function () {
349
338
  function (userDashboarId, areaKey) {
350
339
  var _this = this;
351
340
  /** @type {?} */
352
- var areaContext = this;
353
- /** @type {?} */
354
341
  var widgetInfo = (/** @type {?} */ ({
355
342
  dashboardId: userDashboarId.toString(),
356
343
  dashboardAreaKey: areaKey
357
344
  }));
358
- areaContext.widgetList = [];
345
+ this.widgetList = [];
359
346
  this.dashboardService.getWidgetsByDashboardArea(widgetInfo, this.appConfig).subscribe((/**
360
347
  * @param {?} widgets
361
348
  * @return {?}
362
349
  */
363
350
  function (widgets) {
351
+ //sorting the widgets y, x
352
+ widgets = widgets.sort((/**
353
+ * @param {?} a
354
+ * @param {?} b
355
+ * @return {?}
356
+ */
357
+ function (a, b) {
358
+ if (a['position_y'] > b['position_y'])
359
+ return 1;
360
+ if (a['position_y'] < b['position_y'])
361
+ return -1;
362
+ if (a['position_x'] > b['position_x'])
363
+ return 1;
364
+ if (a['position_x'] < b['position_x'])
365
+ return -1;
366
+ }));
367
+ _this.userWidgets = widgets;
364
368
  if (widgets && widgets.length > 0) {
365
- areaContext.widgetList = _this.mapObjectListToGridsterItemList(widgets);
366
- areaContext.setAreaHeight();
369
+ _this.widgetList = _this.mapObjectListToGridsterItemList(widgets);
370
+ _this.setAreaHeight();
367
371
  }
368
372
  }));
369
373
  };
@@ -421,7 +425,6 @@ var RADashboardArea = /** @class */ (function () {
421
425
  areaHeight = 600;
422
426
  }
423
427
  this.gridheight = areaHeight;
424
- console.log('area height adjusted1');
425
428
  };
426
429
  /** To remove a widget instance from dashboard and to save info in database */
427
430
  /**
@@ -486,20 +489,11 @@ var RADashboardArea = /** @class */ (function () {
486
489
  */
487
490
  function (data) {
488
491
  var _this = this;
489
- /** @type {?} */
490
- var widgetid = data.widgetId;
491
492
  data.height = this.widgetHeight;
492
493
  data.width = this.widgetWidth;
493
494
  data.position_x = 0;
494
495
  data.position_y = 0;
495
- /** @type {?} */
496
- var gridsterItem = this.mapObjectsToGridsterItem(data);
497
496
  /** to find the available position in gridster, temp commenting the code-returning higher y value than normal */
498
- // if (this.options.api) {
499
- // gridsterItem = this.options.api.getFirstPossiblePosition(gridsterItem);
500
- // }
501
- // data.position_x = gridsterItem.x;
502
- // data.position_y = gridsterItem.y;
503
497
  data.dashboardAreaKey = this.areaKey;
504
498
  data.dashboardId = this.userDashboardId;
505
499
  this.ngxService.start();
@@ -508,7 +502,8 @@ var RADashboardArea = /** @class */ (function () {
508
502
  * @return {?}
509
503
  */
510
504
  function (widget) {
511
- gridsterItem = _this.mapObjectsToGridsterItem(widget);
505
+ /** @type {?} */
506
+ var gridsterItem = _this.responsiveService.getGridsterItem(widget);
512
507
  _this.widgetList.push(gridsterItem);
513
508
  _this.setAreaHeight();
514
509
  if (_this.options.api) {
@@ -546,39 +541,13 @@ var RADashboardArea = /** @class */ (function () {
546
541
  * @return {?}
547
542
  */
548
543
  function (data) {
544
+ data.position_x = 0;
545
+ data.position_y = 0;
549
546
  /** @type {?} */
550
- var gridsterItem = this.mapObjectsToGridsterItem(data);
551
- if (this.options.api) {
552
- gridsterItem = this.options.api.getFirstPossiblePosition(gridsterItem);
553
- }
554
- data.position_x = gridsterItem.x;
555
- data.position_y = gridsterItem.y;
556
- gridsterItem = this.mapObjectsToGridsterItem(data);
547
+ var gridsterItem = this.responsiveService.getGridsterItem(data);
557
548
  this.widgetList.push(gridsterItem);
558
549
  this.setAreaHeight();
559
550
  };
560
- /**To map IwidgetInfo object to gridsterItem */
561
- /**
562
- * To map IwidgetInfo object to gridsterItem
563
- * @param {?} widget
564
- * @return {?}
565
- */
566
- RADashboardArea.prototype.mapObjectsToGridsterItem = /**
567
- * To map IwidgetInfo object to gridsterItem
568
- * @param {?} widget
569
- * @return {?}
570
- */
571
- function (widget) {
572
- /** @type {?} */
573
- var gridsterItem = (/** @type {?} */ ({
574
- cols: widget.width,
575
- rows: widget.height,
576
- x: widget.position_x,
577
- y: widget.position_y,
578
- widgetInfo: widget
579
- }));
580
- return gridsterItem;
581
- };
582
551
  /**
583
552
  * @param {?} widgetList
584
553
  * @return {?}
@@ -596,7 +565,7 @@ var RADashboardArea = /** @class */ (function () {
596
565
  * @return {?}
597
566
  */
598
567
  function (widget) {
599
- widgetArray.push(_this.mapObjectsToGridsterItem(widget));
568
+ widgetArray.push(_this.responsiveService.getGridsterItem(widget));
600
569
  }));
601
570
  return widgetArray;
602
571
  };
@@ -653,7 +622,8 @@ var RADashboardArea = /** @class */ (function () {
653
622
  { type: NgZone },
654
623
  { type: NgxUiLoaderService },
655
624
  { type: RATranslateService },
656
- { type: NotifierService }
625
+ { type: NotifierService },
626
+ { type: RADashboardResponsiveService }
657
627
  ]; };
658
628
  RADashboardArea.propDecorators = {
659
629
  userDashboardId: [{ type: Input, args: ['user-dashboard-id',] }],
@@ -678,6 +648,11 @@ if (false) {
678
648
  RADashboardArea.prototype.gridheight;
679
649
  /** @type {?} */
680
650
  RADashboardArea.prototype.gridcellHeight;
651
+ /**
652
+ * @type {?}
653
+ * @private
654
+ */
655
+ RADashboardArea.prototype.userWidgets;
681
656
  /**
682
657
  * @type {?}
683
658
  * @private
@@ -751,5 +726,10 @@ if (false) {
751
726
  * @private
752
727
  */
753
728
  RADashboardArea.prototype.notifier;
729
+ /**
730
+ * @type {?}
731
+ * @private
732
+ */
733
+ RADashboardArea.prototype.responsiveService;
754
734
  }
755
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmEuZGFzaGJvYXJkLmFyZWEuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Ac2NobmVpZGVyZXNzL2Rhc2hib2FyZGZyYW1ld29yay8iLCJzb3VyY2VzIjpbImxpYi9yYS1kYXNoYm9hcmQtYXJlYS9yYS5kYXNoYm9hcmQuYXJlYS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLE9BQU8sRUFBRSxLQUFLLEVBQVUsU0FBUyxFQUE0QixNQUFNLEVBQWEsU0FBUyxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHM0ksT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDN0QsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDL0QsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQzNDLE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRXRFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDbkQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFJN0Q7SUEyQ0UseUJBQW9CLGdCQUFvQyxFQUM5QyxNQUFjLEVBQ2QsVUFBOEIsRUFDOUIsZ0JBQW9DLEVBQ3BDLFFBQXlCO1FBSmYscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFvQjtRQUM5QyxXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ2QsZUFBVSxHQUFWLFVBQVUsQ0FBb0I7UUFDOUIscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFvQjtRQUNwQyxhQUFRLEdBQVIsUUFBUSxDQUFpQjtRQXZDNUIsZUFBVSxHQUFHLEtBQUssRUFBZ0IsQ0FBQztRQUVuQyxlQUFVLEdBQVcsR0FBRyxDQUFDO1FBQ3pCLG1CQUFjLEdBQVcsQ0FBQyxDQUFDO1FBTzFCLG1CQUFjLEdBQVks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Q0FBcUU7Ozs7O0lBWXpELDJDQUE0Qzs7Ozs7SUFDdEQsaUNBQXNCOzs7OztJQUN0QixxQ0FBc0M7Ozs7O0lBQ3RDLDJDQUE0Qzs7Ozs7SUFDNUMsbUNBQWlDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5wdXQsIE9uSW5pdCwgQ29tcG9uZW50LCBPbkNoYW5nZXMsIFNpbXBsZUNoYW5nZXMsIE5nWm9uZSwgT25EZXN0cm95LCBWaWV3Q2hpbGQsIEVsZW1lbnRSZWYsIEhvc3RMaXN0ZW5lciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuaW1wb3J0IHsgR3JpZHN0ZXJDb25maWcsIEdyaWRzdGVySXRlbSB9IGZyb20gJy4uLy4uL2dyaWRzdGVyL2luZGV4JztcclxuaW1wb3J0IHsgUmFEYXNoYm9hcmRTZXJ2aWNlIH0gZnJvbSAnLi4vcmEuZGFzaGJvYXJkLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBSQURhc2hib2FyZEV2ZW50QnVzIH0gZnJvbSAnLi4vcmEuZGFzaGJhcmQuZXZlbnQuYnVzJztcclxuaW1wb3J0IHsgUkFFdmVudCB9IGZyb20gJy4uL3JhLmV2ZW50LmVudW0nO1xyXG5pbXBvcnQgeyBHcmlkc3RlckNvbmZpZ0RlZmF1bHRTZXR0aW5ncyB9IGZyb20gJy4uL3JhLmdyaWRzdGVyLmNvbmZpZyc7XHJcbmltcG9ydCB7IElXaWRnZXRJbmZvLCBJQXBwQ29uZmlnIH0gZnJvbSAnQHNjaG5laWRlcmVzcy93aWRnZXRmcmFtZXdvcmsnO1xyXG5pbXBvcnQgeyBOZ3hVaUxvYWRlclNlcnZpY2UgfSBmcm9tICduZ3gtdWktbG9hZGVyJztcclxuaW1wb3J0IHsgTm90aWZpZXJTZXJ2aWNlIH0gZnJvbSAnYW5ndWxhci1ub3RpZmllcic7XHJcbmltcG9ydCB7IFJBVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BzY2huZWlkZXJlc3MvcmEtY29tbW9uJztcclxuXHJcblxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdyYS1kYXNoYm9hcmQtYXJlYScsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3JhLmRhc2hib2FyZC5hcmVhLmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL3JhLmRhc2hib2FyZC5hcmVhLmNzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBSQURhc2hib2FyZEFyZWEgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcywgT25EZXN0cm95IHtcclxuXHJcblxyXG4gIHB1YmxpYyB3aWRnZXRMaXN0ID0gQXJyYXk8R3JpZHN0ZXJJdGVtPigpO1xyXG4gIHB1YmxpYyBvcHRpb25zOiBHcmlkc3RlckNvbmZpZztcclxuICBwdWJsaWMgZ3JpZGhlaWdodDogbnVtYmVyID0gMzAwO1xyXG4gIHB1YmxpYyBncmlkY2VsbEhlaWdodDogbnVtYmVyID0gMDtcclxuXHJcbiAgcHJpdmF0ZSBjb25pZmdBZGRDbGljazogYW55O1xyXG4gIHByaXZhdGUgcmVhcnJhbmdlV2lkZ2V0Q2xpY2s6IGFueTtcclxuICBwcml2YXRlIHdpZGdldERlbGV0ZUV2ZW50OiBhbnk7XHJcbiAgcHJpdmF0ZSB3aWRnZXRBZGRFdmVudDogYW55O1xyXG4gIHByaXZhdGUgd2lkZ2V0TGlicmFyeURvbmVDbGljazogYW55O1xyXG4gIHByaXZhdGUgaXNXaWRnZXRMb2FkZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgZG9tUmVzaXplZDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBASW5wdXQoJ3VzZXItZGFzaGJvYXJkLWlkJykgdXNlckRhc2hib2FyZElkOiBudW1iZXI7XHJcbiAgQElucHV0KCdhcmVhLWtleScpIGFyZWFLZXk6IHN0cmluZztcclxuICBASW5wdXQoJ2dsb2JhbC1maWx0ZXInKSBnbG9iYWxGaWx0ZXI6IGFueTtcclxuICBASW5wdXQoJ2V2ZW50LWJ1cycpIHJhRGFzaGJvYXJkRXZlbnRCdXM6IFJBRGFzaGJvYXJkRXZlbnRCdXM7XHJcbiAgQElucHV0KCd3aWRnZXQtaGVpZ2h0Jykgd2lkZ2V0SGVpZ2h0OiBudW1iZXIgPSAzO1xyXG4gIEBJbnB1dCgnd2lkZ2V0LXdpZHRoJykgd2lkZ2V0V2lkdGg6IG51bWJlciA9IDU7XHJcbiAgQElucHV0KCdhcHAtY29uZmlnJykgYXBwQ29uZmlnOiBJQXBwQ29uZmlnO1xyXG5cclxuXHJcblxyXG4gIEBWaWV3Q2hpbGQoJ2dyaWRXcmFwcGVyJywgeyBzdGF0aWM6IGZhbHNlIH0pIGdyaWRXcmFwcGVyOiBFbGVtZW50UmVmO1xyXG5cclxuICBASG9zdExpc3RlbmVyKCd3aW5kb3c6cmVzaXplJywgWyckZXZlbnQnXSlcclxuICBvblJlc2l6ZShldmVudCkge1xyXG4gICAgdmFyIGFyZWFDb250ZXh0ID0gdGhpcztcclxuICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xyXG4gICAgICBhcmVhQ29udGV4dC5zZXRBcmVhSGVpZ2h0KCk7XHJcbiAgICAgIGFyZWFDb250ZXh0LmRvbVJlc2l6ZWQgPSAhYXJlYUNvbnRleHQuZG9tUmVzaXplZDtcclxuICAgIH0sIDEwMDApO1xyXG5cclxuICB9XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZGFzaGJvYXJkU2VydmljZTogUmFEYXNoYm9hcmRTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBuZ1pvbmU6IE5nWm9uZSxcclxuICAgIHByaXZhdGUgbmd4U2VydmljZTogTmd4VWlMb2FkZXJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSB0cmFuc2xhdGVTZXJ2aWNlOiBSQVRyYW5zbGF0ZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIG5vdGlmaWVyOiBOb3RpZmllclNlcnZpY2UpIHtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5pbml0aWF0ZUdyaWRzdGVyQ29uZmlnKCk7XHJcbiAgfVxyXG5cclxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XHJcblxyXG4gICAgaWYgKHRoaXMucmFEYXNoYm9hcmRFdmVudEJ1cyAmJiB0aGlzLmFwcENvbmZpZyAmJiAhdGhpcy5pc1dpZGdldExvYWRlZCkge1xyXG4gICAgICB0aGlzLmlzV2lkZ2V0TG9hZGVkID0gdHJ1ZTtcclxuICAgICAgdGhpcy5sb2FkV2lkZ2V0cyh0aGlzLnVzZXJEYXNoYm9hcmRJZCwgdGhpcy5hcmVhS2V5KTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoY2hhbmdlcy5yYURhc2hib2FyZEV2ZW50QnVzICYmIGNoYW5nZXMucmFEYXNoYm9hcmRFdmVudEJ1cy5jdXJyZW50VmFsdWUgIT0gY2hhbmdlcy5yYURhc2hib2FyZEV2ZW50QnVzLnByZXZpb3VzVmFsdWUpIHtcclxuICAgICAgdGhpcy5pbml0aXRhdGVFdmVudEJ1c1N1YnNjcml0aW9ucygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gcHVibGljIGludm9rZVJlc2l6ZUV2ZW50KCkge1xyXG4gIC8vICAgdGhpcy53aWRnZXRDb250YWluZXJzLmZvckVhY2goZnVuY3Rpb24oY29udGFpbmVyLGkpe1xyXG4gIC8vICAgICBjb250YWluZXIuaW52b2tlV2lkZ2V0UmVzaXplZEV2ZW50KCk7XHJcbiAgLy8gICB9KTtcclxuICAvLyB9XHJcblxyXG4gIC8qKlRvIHNldCBHcmlkc3RlckNvbmZpZyAqL1xyXG4gIHB1YmxpYyBpbml0aWF0ZUdyaWRzdGVyQ29uZmlnKCkge1xyXG4gICAgbGV0IGFyZWFDb250ZXh0ID0gdGhpcztcclxuICAgIC8qKlRvIG92ZXJyaWRlIGRlZmF1bHQgY29uZmlndXJhdGlvbiB2YWx1ZXMgdG8gdGhlIGdyaWRzdGVyIGNvbnRyb2wgKi9cclxuICAgIHRoaXMub3B0aW9ucyA9IEdyaWRzdGVyQ29uZmlnRGVmYXVsdFNldHRpbmdzO1xyXG4gICAgdGhpcy5vcHRpb25zLml0ZW1DaGFuZ2VDYWxsYmFjayA9IGZ1bmN0aW9uIChpdGVtOiBhbnkpIHtcclxuICAgICAgY29uc29sZS5sb2coJ2luICBpdGVtIGNoYW5nZSBjbGFsIGJhY2snKTsgICAgXHJcbiAgICAgIGlmIChpdGVtLndpZGdldEluZm8gJiYgaXRlbS53aWRnZXRJbmZvLndpZGdldEluc3RhbmNlSWQpIHtcclxuICAgICAgICBhcmVhQ29udGV4dC51cGRhdGVXaWRnZXRQb3NpdGlvbihpdGVtLndpZGdldEluZm8ud2lkZ2V0SW5zdGFuY2VJZCk7XHJcbiAgICAgIH1cclxuICAgICAgYXJlYUNvbnRleHQuc2V0QXJlYUhlaWdodCgpO1xyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIC8qKiBUbyBpbml0aWF0ZSBldmVudGJ1cyBzdWJzY3RpcHRpb25zICovXHJcbiAgaW5pdGl0YXRlRXZlbnRCdXNTdWJzY3JpdGlvbnMoKSB7XHJcbiAgICB0aGlzLndpZGdldERlbGV0ZUV2ZW50ID0gdGhpcy5yYURhc2hib2FyZEV2ZW50QnVzLnN1YnNjcmliZShSQUV2ZW50LldpZGdldERlbGV0ZSkuc3Vic2NyaWJlKChpbnN0YW5jZUlkKSA9PiB7XHJcbiAgICAgIHRoaXMubmdab25lLnJ1bigoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5kZWxldGVXaWRnZXQoaW5zdGFuY2VJZCwgdHJ1ZSk7XHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy53aWRnZXRBZGRFdmVudCA9IHRoaXMucmFEYXNoYm9hcmRFdmVudEJ1cy5zdWJzY3JpYmUoUkFFdmVudC5BZGRXaWRnZXQpLnN1YnNjcmliZSgod2lkZ2V0SW5mbykgPT4ge1xyXG4gICAgICB0aGlzLm5nWm9uZS5ydW4oKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuY29weVdpZGdldCh3aWRnZXRJbmZvKTtcclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLmNvbmlmZ0FkZENsaWNrID0gdGhpcy5yYURhc2hib2FyZEV2ZW50QnVzLnN1YnNjcmliZShSQUV2ZW50LkNvbmZpZ0FkZENsaWNrKS5zdWJzY3JpYmUoKGUpID0+IHtcclxuICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcclxuICAgICAgICB0aGlzLmFkZFdpZGdldChlKTtcclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuXHJcblxyXG4gICAgdGhpcy5yZWFycmFuZ2VXaWRnZXRDbGljayA9IHRoaXMucmFEYXNoYm9hcmRFdmVudEJ1cy5zdWJzY3JpYmUoUkFFdmVudC5SZWFycmFuZ2VDbGlja2VkKS5zdWJzY3JpYmUoKGUpID0+IHtcclxuICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcclxuICAgICAgICBjb25zb2xlLmxvZygncmVhcnJhbmdlIGV2ZW50IGJ1cyB0cmlnZ2VyZWQnKTsgICAgICAgIFxyXG4gICAgICAgIHRoaXMucmVhcnJhbmdlV2lkZ2V0cygpO1xyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG5cclxuXHJcblxyXG4gICAgdGhpcy53aWRnZXRMaWJyYXJ5RG9uZUNsaWNrID0gdGhpcy5yYURhc2hib2FyZEV2ZW50QnVzLnN1YnNjcmliZShSQUV2ZW50LndpZGdldExpYnJhcnlEb25lQ2xpY2spLnN1YnNjcmliZSgod2lkZ2V0TGlzdCkgPT4ge1xyXG4gICAgICB0aGlzLm5nWm9uZS5ydW4oKCkgPT4ge1xyXG4gICAgICAgIGlmICh3aWRnZXRMaXN0KSB7XHJcbiAgICAgICAgICAvLyB3aWRnZXRMaXN0LmZvckVhY2god2lkZ2V0SW5mbyA9PiB7XHJcbiAgICAgICAgICAvLyAgIHRoaXMuYWRkV2lkZ2V0KHdpZGdldEluZm8pO1xyXG4gICAgICAgICAgLy8gfSk7XHJcbiAgICAgICAgICB0aGlzLmFkZFdpZGdldExpc3RUb0dyaWRzdGVyKHdpZGdldExpc3QsIDApO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIHRlbXAgZml4LSByZWN1cnNpdmUgbWV0aG9kIHRvIGl0ZXJhdGUgb3ZlciB0aGUgbGlzdCBvZiBpdGVtc1xyXG4gICAqIGFuZCBhZGQgdGhlbSB0byBncmlkc3RlciBpbiB0aGUgZ2l2ZW4gb3JkZXJcclxuICAgKiBAcGFyYW0gd2lkZ2V0TGlzdCAgLWxpc3Qgb2Ygd2lkZ2V0c1xyXG4gICAqIEBwYXJhbSBpbmRleCAtaW5kZXggb2YgdGhlIGN1cnJlbnQgdmFsdWUgdG8gYmUgYWRkZWRcclxuICAgKi9cclxuICBhZGRXaWRnZXRMaXN0VG9Hcmlkc3Rlcih3aWRnZXRMaXN0OiBhbnksIGluZGV4OiBudW1iZXIpIHtcclxuICAgIGxldCBhcmVhQ29udGV4dCA9IHRoaXM7XHJcbiAgICBsZXQgaW5kZXhWYWwgPSBpbmRleCArIDE7XHJcbiAgICBpZiAoaW5kZXggPiB3aWRnZXRMaXN0Lmxlbmd0aCAtIDEpXHJcbiAgICAgIHJldHVybjtcclxuICAgIGVsc2Uge1xyXG4gICAgICBpZiAoaW5kZXggPT0gMCkge1xyXG4gICAgICAgIGFyZWFDb250ZXh0LmFkZFdpZGdldCh3aWRnZXRMaXN0W2luZGV4XSk7XHJcbiAgICAgICAgYXJlYUNvbnRleHQuYWRkV2lkZ2V0TGlzdFRvR3JpZHN0ZXIod2lkZ2V0TGlzdCwgaW5kZXhWYWwpO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgYXJlYUNvbnRleHQuYWRkV2lkZ2V0KHdpZGdldExpc3RbaW5kZXhdKTtcclxuICAgICAgICAgIGFyZWFDb250ZXh0LmFkZFdpZGdldExpc3RUb0dyaWRzdGVyKHdpZGdldExpc3QsIGluZGV4VmFsKTtcclxuICAgICAgICB9LCAxMDAwKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5jb25pZmdBZGRDbGljaylcclxuICAgICAgdGhpcy5jb25pZmdBZGRDbGljay51bnN1YnNjcmliZSgpO1xyXG5cclxuICAgIGlmICh0aGlzLndpZGdldEFkZEV2ZW50KVxyXG4gICAgICB0aGlzLndpZGdldEFkZEV2ZW50LnVuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgaWYgKHRoaXMud2lkZ2V0RGVsZXRlRXZlbnQpXHJcbiAgICAgIHRoaXMud2lkZ2V0RGVsZXRlRXZlbnQudW5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICBpZiAodGhpcy53aWRnZXRMaWJyYXJ5RG9uZUNsaWNrKVxyXG4gICAgICB0aGlzLndpZGdldExpYnJhcnlEb25lQ2xpY2sudW5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICBpZiAodGhpcy5yZWFycmFuZ2VXaWRnZXRDbGljaylcclxuICAgICAgdGhpcy5yZWFycmFuZ2VXaWRnZXRDbGljay51bnN1YnNjcmliZSgpO1xyXG5cclxuICB9XHJcblxyXG4gIC8qKlRvIHVwZGF0ZSBwb3NpdGlvbi9kaW1lbnRpb24gb2YgYWxsIHdpZGdldHMgaW4gdGhlIGFyZWEgKi9cclxuICB1cGRhdGVXaWRnZXRzKCkge1xyXG4gICAgdGhpcy5kYXNoYm9hcmRTZXJ2aWNlLnVwZGF0ZVdpZGdldHModGhpcy5tYXBHcmlkc3Rlckxpc3RUb09iamVjdCh0aGlzLndpZGdldExpc3QpLCB0aGlzLmFwcENvbmZpZykuc3Vic2NyaWJlKHdpZGdldHMgPT4ge1xyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIC8qKlRvIHVwZGF0ZSB3aWRnZXQgZGltZW5zaW9ucyAqL1xyXG4gIHVwZGF0ZVdpZGdldFBvc2l0aW9uKHdpZGdldEluc3RhbmNlSWQ6IG51bWJlcikgeyAgICBcclxuXHJcbiAgICBsZXQgd2lkZ2V0RmlsdGVyZWRMaXN0ID0gW107XHJcbiAgICBsZXQgd2lkZ2V0ID0gdGhpcy53aWRnZXRMaXN0LmZpbHRlcihmaWx0ZXJlZCA9PiBmaWx0ZXJlZC53aWRnZXRJbmZvICYmIGZpbHRlcmVkLndpZGdldEluZm8ud2lkZ2V0SW5zdGFuY2VJZCA9PSB3aWRnZXRJbnN0YW5jZUlkKTsgICBcclxuICAgIGlmICh3aWRnZXQgJiYgd2lkZ2V0Lmxlbmd0aCA+IDApIHtcclxuICAgICAgd2lkZ2V0RmlsdGVyZWRMaXN0LnB1c2god2lkZ2V0WzBdKTtcclxuICAgICAgbGV0IHdpZGdldExpc3QgPSB0aGlzLm1hcEdyaWRzdGVyTGlzdFRvT2JqZWN0KHdpZGdldEZpbHRlcmVkTGlzdCk7XHJcbiAgICAgIHRoaXMuZGFzaGJvYXJkU2VydmljZS51cGRhdGVXaWRnZXRzKHRoaXMuZm9ybWF0V2lkZ2V0RGF0YUZvclBvc2l0aW9uRGV0YWlscyh3aWRnZXRMaXN0KSwgdGhpcy5hcHBDb25maWcpLnN1YnNjcmliZSh3aWRnZXRzID0+IHtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIC8qKlRvIHJlc3RyaWN0IHJlcXVlc3QgcGF5bG9hZCB0byBiZSBvZiBtaW4gc2l6ZSAocG9zaXRpb24gJiBzaXplIGRldGFpbHMpICovXHJcbiAgZm9ybWF0V2lkZ2V0RGF0YUZvclBvc2l0aW9uRGV0YWlscyh3aWRnZXRJdGVtTGlzdDogSVdpZGdldEluZm9bXSkge1xyXG4gICAgbGV0IGl0ZW1MaXN0OiBhbnkgPSBbXTtcclxuICAgIHdpZGdldEl0ZW1MaXN0LmZvckVhY2goZnVuY3Rpb24gKHdpZGdldEl0ZW0pIHtcclxuICAgICAgbGV0IGl0ZW0gPSB7fSBhcyBJV2lkZ2V0SW5mbztcclxuICAgICAgaXRlbS53aWRnZXRJbnN0YW5jZUlkID0gd2lkZ2V0SXRlbS53aWRnZXRJbnN0YW5jZUlkO1xyXG4gICAgICBpdGVtLnBvc2l0aW9uX3ggPSB3aWRnZXRJdGVtLnBvc2l0aW9uX3g7XHJcbiAgICAgIGl0ZW0ucG9zaXRpb25feSA9IHdpZGdldEl0ZW0ucG9zaXRpb25feTtcclxuICAgICAgaXRlbS53aWR0aCA9IHdpZGdldEl0ZW0ud2lkdGg7XHJcbiAgICAgIGl0ZW0uaGVpZ2h0ID0gd2lkZ2V0SXRlbS5oZWlnaHQ7XHJcbiAgICAgIGl0ZW1MaXN0LnB1c2goaXRlbSk7XHJcbiAgICB9KTtcclxuICAgIHJldHVybiBpdGVtTGlzdDtcclxuICB9XHJcblxyXG4gIC8qKiBUbyByZXRyaWV2ZSB3aWRnZXRzIGJhc2VkIG9uIHVzZXJEYXNoYm9hcmRpZCBhbmQgYXJlYSBuYW1lICovXHJcbiAgbG9hZFdpZGdldHModXNlckRhc2hib2FySWQ6IG51bWJlciwgYXJlYUtleTogc3RyaW5nKSB7XHJcbiAgICBsZXQgYXJlYUNvbnRleHQgPSB0aGlzO1xyXG5cclxuICAgIGxldCB3aWRnZXRJbmZvID0gPElXaWRnZXRJbmZvPntcclxuICAgICAgZGFzaGJvYXJkSWQ6IHVzZXJEYXNoYm9hcklkLnRvU3RyaW5nKCksXHJcbiAgICAgIGRhc2hib2FyZEFyZWFLZXk6IGFyZWFLZXlcclxuICAgIH1cclxuICAgIGFyZWFDb250ZXh0LndpZGdldExpc3QgPSBbXTtcclxuICAgIHRoaXMuZGFzaGJvYXJkU2VydmljZS5nZXRXaWRnZXRzQnlEYXNoYm9hcmRBcmVhKHdpZGdldEluZm8sIHRoaXMuYXBwQ29uZmlnKS5zdWJzY3JpYmUod2lkZ2V0cyA9PiB7XHJcbiAgICAgIGlmICh3aWRnZXRzICYmIHdpZGdldHMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIGFyZWFDb250ZXh0LndpZGdldExpc3QgPSB0aGlzLm1hcE9iamVjdExpc3RUb0dyaWRzdGVySXRlbUxpc3Qod2lkZ2V0cyk7XHJcbiAgICAgICAgYXJlYUNvbnRleHQuc2V0QXJlYUhlaWdodCgpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG5cclxuXHJcbiAgLyoqIFRvIHNldCBBcmVhKEdyaWRzdGVyKSBoZWlnaHQgZHluYW1pY2FsbHkgYXMgd2lkZ2V0cyBhcmUgYWRkZWQvcmVtb3ZlZCAqL1xyXG4gIHNldEFyZWFIZWlnaHQoKSB7XHJcbiAgICBsZXQgaXNNb2JpbGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIGlmICh0aGlzLm9wdGlvbnMubW9iaWxlQnJlYWtwb2ludCA+IHRoaXMuZ3JpZFdyYXBwZXIubmF0aXZlRWxlbWVudC5jbGllbnRXaWR0aCkge1xyXG4gICAgICBpc01vYmlsZSA9IHRydWU7XHJcbiAgICB9XHJcbiAgICBsZXQgYXJlYVNjcm9sbEhlaWdodCA9IDA7XHJcbiAgICBsZXQgYXJlYUhlaWdodCA9IDA7XHJcbiAgICBsZXQgY3VyUm93SGVpZ2h0ID0gMDtcclxuICAgIGlmICh0aGlzLm9wdGlvbnMuYXBpKSB7XHJcbiAgICAgIGN1clJvd0hlaWdodCA9IHRoaXMub3B0aW9ucy5hcGkuZ2V0Q3VycmVudFJvd0hlaWdodCgpO1xyXG4gICAgfVxyXG4gICAgdGhpcy53aWRnZXRMaXN0LmZvckVhY2goKHQpID0+IHtcclxuICAgICAgbGV0IGN1cnJlbnRIZWlnaHQgPSB0LnkgKyB0LnJvd3M7XHJcbiAgICAgIGlmIChjdXJyZW50SGVpZ2h0ID4gYXJlYVNjcm9sbEhlaWdodCkge1xyXG4gICAgICAgIGFyZWFTY3JvbGxIZWlnaHQgPSBjdXJyZW50SGVpZ2h0O1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChjdXJSb3dIZWlnaHQgPT0gMCkge1xyXG4gICAgICAgIGN1cnJlbnRIZWlnaHQgPSB0aGlzLndpZGdldExpc3RbMF0uY3VyUm93SGVpZ2h0O1xyXG4gICAgICB9XHJcbiAgICAgIHQud2lkZ2V0SW5mby5yb3dIZWlnaHQgPSBjdXJSb3dIZWlnaHQ7XHJcbiAgICB9KTtcclxuICAgIHRoaXMuZ3JpZGNlbGxIZWlnaHQgPSBjdXJSb3dIZWlnaHQ7XHJcbiAgICBpZiAodGhpcy5vcHRpb25zLmFwaSkge1xyXG4gICAgICBhcmVhSGVpZ2h0ID0gYXJlYVNjcm9sbEhlaWdodCAqIHRoaXMub3B0aW9ucy5hcGkuZ2V0Q3VycmVudFJvd0hlaWdodCgpICsgMTAwO1xyXG4gICAgfVxyXG4gICAgbGV0IGFyZWFTY3JvbGxIZWlnaHRNb2IgPSAwO1xyXG4gICAgaWYgKGlzTW9iaWxlKSB7XHJcbiAgICAgIGFyZWFTY3JvbGxIZWlnaHRNb2IgPSB0aGlzLndpZGdldExpc3QubGVuZ3RoICogMzAwICsgMjAwO1xyXG4gICAgICBhcmVhSGVpZ2h0ID0gYXJlYVNjcm9sbEhlaWdodE1vYjtcclxuICAgIH1cclxuICAgIGlmIChhcmVhSGVpZ2h0IDwgNjAwKSB7XHJcbiAgICAgIGFyZWFIZWlnaHQgPSA2MDA7XHJcbiAgICB9XHJcbiAgICB0aGlzLmdyaWRoZWlnaHQgPSBhcmVhSGVpZ2h0O1xyXG4gICAgY29uc29sZS5sb2coJ2FyZWEgaGVpZ2h0IGFkanVzdGVkMScpO1xyXG5cclxuICB9XHJcblxyXG5cclxuICAvKiogVG8gcmVtb3ZlIGEgd2lkZ2V0IGluc3RhbmNlIGZyb20gZGFzaGJvYXJkIGFuZCB0byBzYXZlIGluZm8gaW4gZGF0YWJhc2UgKi9cclxuICBkZWxldGVXaWRnZXQod2lkZ2V0SW5zdGFuY2VJZDogYW55LCBpc2FsZXJ0RGlzYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZSkge1xyXG4gICAgbGV0IHdpZGdldCA9IHRoaXMud2lkZ2V0TGlzdC5maWx0ZXIoZnVuY3Rpb24gKGl0ZW0pIHtcclxuICAgICAgcmV0dXJuIGl0ZW0ud2lkZ2V0SW5mby53aWRnZXRJbnN0YW5jZUlkID09PSB3aWRnZXRJbnN0YW5jZUlkO1xyXG4gICAgfSk7XHJcbiAgICBpZiAod2lkZ2V0Lmxlbmd0aCA+IDApIHtcclxuICAgICAgdGhpcy53aWRnZXRMaXN0LnNwbGljZSh0aGlzLndpZGdldExpc3QuaW5kZXhPZih3aWRnZXRbMF0pLCAxKTtcclxuICAgICAgdGhpcy5zZXRBcmVhSGVpZ2h0KCk7XHJcbiAgICAgIGlmICghaXNhbGVydERpc2FibGVkKSB7XHJcbiAgICAgICAgdGhpcy5ub3RpZmllci5ub3RpZnkoJ3N1Y2Nlc3MnLCBcIiBcIiArIHRoaXMudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGUoJ0NvbW1vbi5XaWRnZXR0ZXh0JykgKyBcIiBcIiArIHdpZGdldFswXS53aWRnZXRJbmZvLndpZGdldFRpdGxlICsgXCIgXCIgKyB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UudHJhbnNsYXRlKCdDb21tb24uZGVsZXRlZFN1Y2Nlc2Z1bGx5JykgKyBcIiBcIik7XHJcblxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipUbyByZWFycmFuZ2Ugd2lkZ2V0cyBwb3NpdGlvbiBpbiB0aGUgZGFzaGJvYXJkLCBjb21wYWN0TGVmdCZVcCxjb21wYWN0TGVmdCxjb21wYWN0VXAsZXRjKi9cclxuICByZWFycmFuZ2VXaWRnZXRzKCkgeyAgIFxyXG4gICAgdGhpcy5vcHRpb25zLmNvbXBhY3RUeXBlID0gJ2NvbXBhY3RVcCZMZWZ0JztcclxuICAgIHRoaXMub3B0aW9ucy5hcGkub3B0aW9uc0NoYW5nZWQoKTtcclxuICAgIHRoaXMub3B0aW9ucy5jb21wYWN0VHlwZSA9ICdub25lJztcclxuICAgIHRoaXMub3B0aW9ucy5hcGkub3B0aW9uc0NoYW5nZWQoKTtcclxuICB9XHJcblxyXG4gIC8qKlRvIGFkZCB3aWRnZXQgaW5zdGFuY2UgdG8gdGhlIGRhdGFiYXNlIHdpdGggdGhlIG5leHQgYXZhaWxhYmxlIHBvc2l0aW9uIGFuZCB0byBtYWtlIGNoYW5nZXMgaW5cclxuICAgKiBkYXNoYm9hcmQgYXJlYS5cclxuICAgKi9cclxuICBhZGRXaWRnZXQoZGF0YTogYW55KSB7XHJcbiAgICBsZXQgd2lkZ2V0aWQgPSBkYXRhLndpZGdldElkO1xyXG4gICAgZGF0YS5oZWlnaHQgPSB0aGlzLndpZGdldEhlaWdodDtcclxuICAgIGRhdGEud2lkdGggPSB0aGlzLndpZGdldFdpZHRoO1xyXG4gICAgZGF0YS5wb3NpdGlvbl94ID0gMDtcclxuICAgIGRhdGEucG9zaXRpb25feSA9IDA7XHJcbiAgICBsZXQgZ3JpZHN0ZXJJdGVtID0gdGhpcy5tYXBPYmplY3RzVG9Hcmlkc3Rlckl0ZW0oZGF0YSk7XHJcblxyXG4gICAgLyoqIHRvIGZpbmQgdGhlIGF2YWlsYWJsZSBwb3NpdGlvbiBpbiBncmlkc3RlciwgdGVtcCBjb21tZW50aW5nIHRoZSBjb2RlLXJldHVybmluZyBoaWdoZXIgeSB2YWx1ZSB0aGFuIG5vcm1hbCAqL1xyXG4gICAgLy8gaWYgKHRoaXMub3B0aW9ucy5hcGkpIHtcclxuICAgIC8vICAgZ3JpZHN0ZXJJdGVtID0gdGhpcy5vcHRpb25zLmFwaS5nZXRGaXJzdFBvc3NpYmxlUG9zaXRpb24oZ3JpZHN0ZXJJdGVtKTtcclxuICAgIC8vIH1cclxuICAgIC8vIGRhdGEucG9zaXRpb25feCA9IGdyaWRzdGVySXRlbS54O1xyXG4gICAgLy8gZGF0YS5wb3NpdGlvbl95ID0gZ3JpZHN0ZXJJdGVtLnk7XHJcbiAgICBkYXRhLmRhc2hib2FyZEFyZWFLZXkgPSB0aGlzLmFyZWFLZXk7XHJcbiAgICBkYXRhLmRhc2hib2FyZElkID0gdGhpcy51c2VyRGFzaGJvYXJkSWQ7XHJcbiAgICB0aGlzLm5neFNlcnZpY2Uuc3RhcnQoKTtcclxuICAgIHRoaXMuZGFzaGJvYXJkU2VydmljZS5hZGRXaWRnZXQoZGF0YSwgdGhpcy5hcHBDb25maWcpLnN1YnNjcmliZSh3aWRnZXQgPT4ge1xyXG4gICAgICBncmlkc3Rlckl0ZW0gPSB0aGlzLm1hcE9iamVjdHNUb0dyaWRzdGVySXRlbSh3aWRnZXQpO1xyXG4gICAgICB0aGlzLndpZGdldExpc3QucHVzaChncmlkc3Rlckl0ZW0pO1xyXG4gICAgICB0aGlzLnNldEFyZWFIZWlnaHQoKTtcclxuXHJcbiAgICAgIGlmICh0aGlzLm9wdGlvbnMuYXBpKSB7XHJcbiAgICAgICAgbGV0IGN1clJvd0hlaWdodDogbnVtYmVyID0gTnVtYmVyKHRoaXMub3B0aW9ucy5hcGkuZ2V0Q3VycmVudFJvd0hlaWdodCgpKTtcclxuICAgICAgICBpZiAoY3VyUm93SGVpZ2h0ID4gMCkge1xyXG4gICAgICAgICAgd2lkZ2V0LnJvd0hlaWdodCA9IGN1clJvd0hlaWdodDtcclxuICAgICAgICAgIHRoaXMuZ3JpZGNlbGxIZWlnaHQgPSBjdXJSb3dIZWlnaHQ7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHZhciB3aWRnZXRJbnN0YW5jZUlkID0gMDtcclxuICAgICAgaWYgKHdpZGdldCAmJiB3aWRnZXQud2lkZ2V0SW5zdGFuY2VJZCkge1xyXG4gICAgICAgIHdpZGdldEluc3RhbmNlSWQgPSB3aWRnZXQud2lkZ2V0SW5zdGFuY2VJZDtcclxuICAgICAgICAvKipUbyBzYXZlIGFkZGVkIHdpZGdldCBwb3NpdGlvbiBpbiBkYiAqL1xyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy51cGRhdGVXaWRnZXRQb3NpdGlvbih3aWRnZXRJbnN0YW5jZUlkKTtcclxuICAgICAgICB9LCAxMDAwKTtcclxuICAgICAgfVxyXG5cclxuXHJcbiAgICAgIHRoaXMucmFEYXNoYm9hcmRFdmVudEJ1cy5wdWJsaXNoKFJBRXZlbnQuV2lkZ2V0QWRkZWQsIHdpZGdldCk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKiBUbyBhZGQgd2lkZ2V0IHRvIGN1cnJlbnQgd2lkZ2V0IGxpc3QgLGludm9rZWQgZnJvbSBjb3B5IHdpZGdldCB3aW5kb3cqL1xyXG4gIGNvcHlXaWRnZXQoZGF0YTogYW55KSB7XHJcbiAgICBsZXQgZ3JpZHN0ZXJJdGVtID0gdGhpcy5tYXBPYmplY3RzVG9Hcmlkc3Rlckl0ZW0oZGF0YSk7XHJcbiAgICBpZiAodGhpcy5vcHRpb25zLmFwaSkge1xyXG4gICAgICBncmlkc3Rlckl0ZW0gPSB0aGlzLm9wdGlvbnMuYXBpLmdldEZpcnN0UG9zc2libGVQb3NpdGlvbihncmlkc3Rlckl0ZW0pO1xyXG4gICAgfVxyXG5cclxuICAgIGRhdGEucG9zaXRpb25feCA9IGdyaWRzdGVySXRlbS54O1xyXG4gICAgZGF0YS5wb3NpdGlvbl95ID0gZ3JpZHN0ZXJJdGVtLnk7XHJcbiAgICBncmlkc3Rlckl0ZW0gPSB0aGlzLm1hcE9iamVjdHNUb0dyaWRzdGVySXRlbShkYXRhKTtcclxuICAgIHRoaXMud2lkZ2V0TGlzdC5wdXNoKGdyaWRzdGVySXRlbSk7XHJcbiAgICB0aGlzLnNldEFyZWFIZWlnaHQoKTtcclxuICB9XHJcblxyXG4gIC8qKlRvIG1hcCBJd2lkZ2V0SW5mbyBvYmplY3QgdG8gZ3JpZHN0ZXJJdGVtICovXHJcbiAgbWFwT2JqZWN0c1RvR3JpZHN0ZXJJdGVtKHdpZGdldDogSVdpZGdldEluZm8pIHtcclxuICAgIGxldCBncmlkc3Rlckl0ZW0gPSA8R3JpZHN0ZXJJdGVtPntcclxuICAgICAgY29sczogd2lkZ2V0LndpZHRoLFxyXG4gICAgICByb3dzOiB3aWRnZXQuaGVpZ2h0LFxyXG4gICAgICB4OiB3aWRnZXQucG9zaXRpb25feCxcclxuICAgICAgeTogd2lkZ2V0LnBvc2l0aW9uX3ksXHJcbiAgICAgIHdpZGdldEluZm86IHdpZGdldFxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGdyaWRzdGVySXRlbTtcclxuICB9XHJcblxyXG4gIG1hcE9iamVjdExpc3RUb0dyaWRzdGVySXRlbUxpc3Qod2lkZ2V0TGlzdDogQXJyYXk8SVdpZGdldEluZm8+KSB7XHJcbiAgICBsZXQgd2lkZ2V0QXJyYXkgPSBBcnJheTxHcmlkc3Rlckl0ZW0+KCk7XHJcbiAgICB3aWRnZXRMaXN0LmZvckVhY2god2lkZ2V0ID0+IHtcclxuICAgICAgd2lkZ2V0QXJyYXkucHVzaCh0aGlzLm1hcE9iamVjdHNUb0dyaWRzdGVySXRlbSh3aWRnZXQpKTtcclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIHdpZGdldEFycmF5O1xyXG4gIH1cclxuXHJcbiAgbWFwR3JpZHN0ZXJJdGVtVG9PYmplY3Qod2lkZ2V0SXRlbTogR3JpZHN0ZXJJdGVtKSB7XHJcbiAgICBsZXQgd2lkZ2V0OiBJV2lkZ2V0SW5mbztcclxuICAgIHdpZGdldCA9IHdpZGdldEl0ZW0ud2lkZ2V0SW5mbztcclxuICAgIHdpZGdldC5oZWlnaHQgPSB3aWRnZXRJdGVtLnJvd3M7XHJcbiAgICB3aWRnZXQud2lkdGggPSB3aWRnZXRJdGVtLmNvbHM7XHJcbiAgICB3aWRnZXQucG9zaXRpb25feCA9IHdpZGdldEl0ZW0ueDtcclxuICAgIHdpZGdldC5wb3NpdGlvbl95ID0gd2lkZ2V0SXRlbS55O1xyXG4gICAgd2lkZ2V0LnJvd0hlaWdodCA9IHdpZGdldEl0ZW0uY3VyUm93SGVpZ2h0O1xyXG4gICAgcmV0dXJuIHdpZGdldDtcclxuICB9XHJcblxyXG4gIG1hcEdyaWRzdGVyTGlzdFRvT2JqZWN0KHdpZGdldEl0ZW1MaXN0OiBBcnJheTxHcmlkc3Rlckl0ZW0+KSB7XHJcbiAgICBsZXQgd2lkZ2V0TGlzdEFycmF5ID0gQXJyYXk8SVdpZGdldEluZm8+KCk7XHJcbiAgICB3aWRnZXRJdGVtTGlzdC5mb3JFYWNoKHdpZGdldCA9PiB7XHJcbiAgICAgIHdpZGdldExpc3RBcnJheS5wdXNoKHRoaXMubWFwR3JpZHN0ZXJJdGVtVG9PYmplY3Qod2lkZ2V0KSk7XHJcbiAgICB9KTtcclxuICAgIHJldHVybiB3aWRnZXRMaXN0QXJyYXk7XHJcbiAgfVxyXG5cclxufSJdfQ==
735
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmEuZGFzaGJvYXJkLmFyZWEuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Ac2NobmVpZGVyZXNzL2Rhc2hib2FyZGZyYW1ld29yay8iLCJzb3VyY2VzIjpbImxpYi9yYS1kYXNoYm9hcmQtYXJlYS9yYS5kYXNoYm9hcmQuYXJlYS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLE9BQU8sRUFBRSxLQUFLLEVBQVUsU0FBUyxFQUE0QixNQUFNLEVBQWEsU0FBUyxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHM0ksT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDN0QsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDL0QsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRTNDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDbkQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDN0QsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFFbEY7SUFpREUseUJBQW9CLGdCQUFvQyxFQUM5QyxNQUFjLEVBQ2QsVUFBOEIsRUFDOUIsZ0JBQW9DLEVBQ3BDLFFBQXlCLEVBQ3pCLGlCQUErQztRQUxyQyxxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQW9CO1FBQzlDLFdBQU0sR0FBTixNQUFNLENBQVE7UUFDZCxlQUFVLEdBQVYsVUFBVSxDQUFvQjtRQUM5QixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQW9CO1FBQ3BDLGFBQVEsR0FBUixRQUFRLENBQWlCO1FBQ3pCLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBOEI7UUE5Q2xELGVBQVUsR0FBRyxLQUFLLEVBQWdCLENBQUM7UUFFbkMsZUFBVSxHQUFXLEdBQUcsQ0FB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NkQ7O0lBQzdELHVDQUFpRDs7SUFDakQsc0NBQStDOztJQUMvQyxvQ0FBMkM7O0lBRTNDLHNDQUFxRTs7Ozs7SUFtQnpELDJDQUE0Qzs7Ozs7SUFDdEQsaUNBQXNCOzs7OztJQUN0QixxQ0FBc0M7Ozs7O0lBQ3RDLDJDQUE0Qzs7Ozs7SUFDNUMsbUNBQWlDOzs7OztJQUNqQyw0Q0FBdUQiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbnB1dCwgT25Jbml0LCBDb21wb25lbnQsIE9uQ2hhbmdlcywgU2ltcGxlQ2hhbmdlcywgTmdab25lLCBPbkRlc3Ryb3ksIFZpZXdDaGlsZCwgRWxlbWVudFJlZiwgSG9zdExpc3RlbmVyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcblxyXG5pbXBvcnQgeyBHcmlkc3RlckNvbmZpZywgR3JpZHN0ZXJJdGVtIH0gZnJvbSAnLi4vLi4vZ3JpZHN0ZXIvaW5kZXgnO1xyXG5pbXBvcnQgeyBSYURhc2hib2FyZFNlcnZpY2UgfSBmcm9tICcuLi9yYS5kYXNoYm9hcmQuc2VydmljZSc7XHJcbmltcG9ydCB7IFJBRGFzaGJvYXJkRXZlbnRCdXMgfSBmcm9tICcuLi9yYS5kYXNoYmFyZC5ldmVudC5idXMnO1xyXG5pbXBvcnQgeyBSQUV2ZW50IH0gZnJvbSAnLi4vcmEuZXZlbnQuZW51bSc7XHJcbmltcG9ydCB7IElXaWRnZXRJbmZvLCBJQXBwQ29uZmlnIH0gZnJvbSAnQHNjaG5laWRlcmVzcy93aWRnZXRmcmFtZXdvcmsnO1xyXG5pbXBvcnQgeyBOZ3hVaUxvYWRlclNlcnZpY2UgfSBmcm9tICduZ3gtdWktbG9hZGVyJztcclxuaW1wb3J0IHsgTm90aWZpZXJTZXJ2aWNlIH0gZnJvbSAnYW5ndWxhci1ub3RpZmllcic7XHJcbmltcG9ydCB7IFJBVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BzY2huZWlkZXJlc3MvcmEtY29tbW9uJztcclxuaW1wb3J0IHsgUkFEYXNoYm9hcmRSZXNwb25zaXZlU2VydmljZSB9IGZyb20gJy4uL3JhLmRhc2hib2FyZC5yZXNwb25zaXZlLnNlcnZpY2UnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdyYS1kYXNoYm9hcmQtYXJlYScsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3JhLmRhc2hib2FyZC5hcmVhLmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL3JhLmRhc2hib2FyZC5hcmVhLmNzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBSQURhc2hib2FyZEFyZWEgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcywgT25EZXN0cm95IHtcclxuXHJcblxyXG4gIHB1YmxpYyB3aWRnZXRMaXN0ID0gQXJyYXk8R3JpZHN0ZXJJdGVtPigpO1xyXG4gIHB1YmxpYyBvcHRpb25zOiBHcmlkc3RlckNvbmZpZztcclxuICBwdWJsaWMgZ3JpZGhlaWdodDogbnVtYmVyID0gMzAwO1xyXG4gIHB1YmxpYyBncmlkY2VsbEhlaWdodDogbnVtYmVyID0gMDtcclxuICBwcml2YXRlIHVzZXJXaWRnZXRzOiBhbnlbXTtcclxuXHJcbiAgcHJpdmF0ZSBjb25pZmdBZGRDbGljazogYW55O1xyXG4gIHByaXZhdGUgcmVhcnJhbmdlV2lkZ2V0Q2xpY2s6IGFueTtcclxuICBwcml2YXRlIHdpZGdldERlbGV0ZUV2ZW50OiBhbnk7XHJcbiAgcHJpdmF0ZSB3aWRnZXRBZGRFdmVudDogYW55O1xyXG4gIHByaXZhdGUgd2lkZ2V0TGlicmFyeURvbmVDbGljazogYW55O1xyXG4gIHByaXZhdGUgaXNXaWRnZXRMb2FkZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgZG9tUmVzaXplZDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBASW5wdXQoJ3VzZXItZGFzaGJvYXJkLWlkJykgdXNlckRhc2hib2FyZElkOiBudW1iZXI7XHJcbiAgQElucHV0KCdhcmVhLWtleScpIGFyZWFLZXk6IHN0cmluZztcclxuICBASW5wdXQoJ2dsb2JhbC1maWx0ZXInKSBnbG9iYWxGaWx0ZXI6IGFueTtcclxuICBASW5wdXQoJ2V2ZW50LWJ1cycpIHJhRGFzaGJvYXJkRXZlbnRCdXM6IFJBRGFzaGJvYXJkRXZlbnRCdXM7XHJcbiAgQElucHV0KCd3aWRnZXQtaGVpZ2h0Jykgd2lkZ2V0SGVpZ2h0OiBudW1iZXIgPSAzO1xyXG4gIEBJbnB1dCgnd2lkZ2V0LXdpZHRoJykgd2lkZ2V0V2lkdGg6IG51bWJlciA9IDU7XHJcbiAgQElucHV0KCdhcHAtY29uZmlnJykgYXBwQ29uZmlnOiBJQXBwQ29uZmlnO1xyXG5cclxuICBAVmlld0NoaWxkKCdncmlkV3JhcHBlcicsIHsgc3RhdGljOiBmYWxzZSB9KSBncmlkV3JhcHBlcjogRWxlbWVudFJlZjtcclxuXHJcbiAgQEhvc3RMaXN0ZW5lcignd2luZG93OnJlc2l6ZScsIFsnJGV2ZW50J10pXHJcbiAgb25SZXNpemUoZXZlbnQ6IGFueSkge1xyXG4gICAgdGhpcy53aWRnZXRMaXN0ID0gW107XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy5pbml0aWF0ZUdyaWRzdGVyQ29uZmlnKCk7XHJcbiAgICAgIHRoaXMub3B0aW9ucy5hcGkub3B0aW9uc0NoYW5nZWQoKTtcclxuICAgICAgaWYgKHRoaXMudXNlcldpZGdldHMpIHtcclxuICAgICAgICB0aGlzLndpZGdldExpc3QgPSB0aGlzLm1hcE9iamVjdExpc3RUb0dyaWRzdGVySXRlbUxpc3QodGhpcy51c2VyV2lkZ2V0cyk7XHJcbiAgICAgICAgdGhpcy5zZXRBcmVhSGVpZ2h0KCk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgdGhpcy5sb2FkV2lkZ2V0cyh0aGlzLnVzZXJEYXNoYm9hcmRJZCwgdGhpcy5hcmVhS2V5KTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmRvbVJlc2l6ZWQgPSAhdGhpcy5kb21SZXNpemVkO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGRhc2hib2FyZFNlcnZpY2U6IFJhRGFzaGJvYXJkU2VydmljZSxcclxuICAgIHByaXZhdGUgbmdab25lOiBOZ1pvbmUsXHJcbiAgICBwcml2YXRlIG5neFNlcnZpY2U6IE5neFVpTG9hZGVyU2VydmljZSxcclxuICAgIHByaXZhdGUgdHJhbnNsYXRlU2VydmljZTogUkFUcmFuc2xhdGVTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBub3RpZmllcjogTm90aWZpZXJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByZXNwb25zaXZlU2VydmljZTogUkFEYXNoYm9hcmRSZXNwb25zaXZlU2VydmljZSkge1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmluaXRpYXRlR3JpZHN0ZXJDb25maWcoKTtcclxuICB9XHJcblxyXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcclxuXHJcbiAgICBpZiAodGhpcy5yYURhc2hib2FyZEV2ZW50QnVzICYmIHRoaXMuYXBwQ29uZmlnICYmICF0aGlzLmlzV2lkZ2V0TG9hZGVkKSB7XHJcbiAgICAgIHRoaXMuaXNXaWRnZXRMb2FkZWQgPSB0cnVlO1xyXG4gICAgICB0aGlzLmxvYWRXaWRnZXRzKHRoaXMudXNlckRhc2hib2FyZElkLCB0aGlzLmFyZWFLZXkpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChjaGFuZ2VzLnJhRGFzaGJvYXJkRXZlbnRCdXMgJiYgY2hhbmdlcy5yYURhc2hib2FyZEV2ZW50QnVzLmN1cnJlbnRWYWx1ZSAhPSBjaGFuZ2VzLnJhRGFzaGJvYXJkRXZlbnRCdXMucHJldmlvdXNWYWx1ZSkge1xyXG4gICAgICB0aGlzLmluaXRpdGF0ZUV2ZW50QnVzU3Vic2NyaXRpb25zKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipUbyBzZXQgR3JpZHN0ZXJDb25maWcgKi9cclxuICBwdWJsaWMgaW5pdGlhdGVHcmlkc3RlckNvbmZpZygpIHtcclxuICAgIC8qKlRvIG92ZXJyaWRlIGRlZmF1bHQgY29uZmlndXJhdGlvbiB2YWx1ZXMgdG8gdGhlIGdyaWRzdGVyIGNvbnRyb2wgKi9cclxuICAgIHRoaXMub3B0aW9ucyA9IHRoaXMucmVzcG9uc2l2ZVNlcnZpY2UuR3JpZHN0ZXJDb25maWc7XHJcbiAgICB0aGlzLm9wdGlvbnMuaXRlbUNoYW5nZUNhbGxiYWNrID0gKGl0ZW06IGFueSkgPT4ge1xyXG4gICAgICBpZiAodGhpcy5yZXNwb25zaXZlU2VydmljZS5Jc0Rlc2t0b3BWaWV3KSB7XHJcbiAgICAgICAgaWYgKGl0ZW0ud2lkZ2V0SW5mbyAmJiBpdGVtLndpZGdldEluZm8ud2lkZ2V0SW5zdGFuY2VJZCkge1xyXG4gICAgICAgICAgdGhpcy51cGRhdGVXaWRnZXRQb3NpdGlvbihpdGVtLndpZGdldEluZm8ud2lkZ2V0SW5zdGFuY2VJZCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuc2V0QXJlYUhlaWdodCgpO1xyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIC8qKiBUbyBpbml0aWF0ZSBldmVudGJ1cyBzdWJzY3RpcHRpb25zICovXHJcbiAgaW5pdGl0YXRlRXZlbnRCdXNTdWJzY3JpdGlvbnMoKSB7XHJcbiAgICB0aGlzLndpZGdldERlbGV0ZUV2ZW50ID0gdGhpcy5yYURhc2hib2FyZEV2ZW50QnVzLnN1YnNjcmliZShSQUV2ZW50LldpZGdldERlbGV0ZSkuc3Vic2NyaWJlKChpbnN0YW5jZUlkKSA9PiB7XHJcbiAgICAgIHRoaXMubmdab25lLnJ1bigoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5kZWxldGVXaWRnZXQoaW5zdGFuY2VJZCwgdHJ1ZSk7XHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy53aWRnZXRBZGRFdmVudCA9IHRoaXMucmFEYXNoYm9hcmRFdmVudEJ1cy5zdWJzY3JpYmUoUkFFdmVudC5BZGRXaWRnZXQpLnN1YnNjcmliZSgod2lkZ2V0SW5mbykgPT4ge1xyXG4gICAgICB0aGlzLm5nWm9uZS5ydW4oKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuY29weVdpZGdldCh3aWRnZXRJbmZvKTtcclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLmNvbmlmZ0FkZENsaWNrID0gdGhpcy5yYURhc2hib2FyZEV2ZW50QnVzLnN1YnNjcmliZShSQUV2ZW50LkNvbmZpZ0FkZENsaWNrKS5zdWJzY3JpYmUoKGUpID0+IHtcclxuICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcclxuICAgICAgICB0aGlzLmFkZFdpZGdldChlKTtcclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLnJlYXJyYW5nZVdpZGdldENsaWNrID0gdGhpcy5yYURhc2hib2FyZEV2ZW50QnVzLnN1YnNjcmliZShSQUV2ZW50LlJlYXJyYW5nZUNsaWNrZWQpLnN1YnNjcmliZSgoZSkgPT4ge1xyXG4gICAgICB0aGlzLm5nWm9uZS5ydW4oKCkgPT4ge1xyXG4gICAgICAgIHRoaXMucmVhcnJhbmdlV2lkZ2V0cygpO1xyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMud2lkZ2V0TGlicmFyeURvbmVDbGljayA9IHRoaXMucmFEYXNoYm9hcmRFdmVudEJ1cy5zdWJzY3JpYmUoUkFFdmVudC53aWRnZXRMaWJyYXJ5RG9uZUNsaWNrKS5zdWJzY3JpYmUoKHdpZGdldExpc3QpID0+IHtcclxuICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcclxuICAgICAgICBpZiAod2lkZ2V0TGlzdCkge1xyXG4gICAgICAgICAgdGhpcy5hZGRXaWRnZXRMaXN0VG9Hcmlkc3Rlcih3aWRnZXRMaXN0LCAwKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiB0ZW1wIGZpeC0gcmVjdXJzaXZlIG1ldGhvZCB0byBpdGVyYXRlIG92ZXIgdGhlIGxpc3Qgb2YgaXRlbXNcclxuICAgKiBhbmQgYWRkIHRoZW0gdG8gZ3JpZHN0ZXIgaW4gdGhlIGdpdmVuIG9yZGVyXHJcbiAgICogQHBhcmFtIHdpZGdldExpc3QgIC1saXN0IG9mIHdpZGdldHNcclxuICAgKiBAcGFyYW0gaW5kZXggLWluZGV4IG9mIHRoZSBjdXJyZW50IHZhbHVlIHRvIGJlIGFkZGVkXHJcbiAgICovXHJcbiAgYWRkV2lkZ2V0TGlzdFRvR3JpZHN0ZXIod2lkZ2V0TGlzdDogYW55LCBpbmRleDogbnVtYmVyKSB7XHJcbiAgICBsZXQgYXJlYUNvbnRleHQgPSB0aGlzO1xyXG4gICAgbGV0IGluZGV4VmFsID0gaW5kZXggKyAxO1xyXG4gICAgaWYgKGluZGV4ID4gd2lkZ2V0TGlzdC5sZW5ndGggLSAxKVxyXG4gICAgICByZXR1cm47XHJcbiAgICBlbHNlIHtcclxuICAgICAgaWYgKGluZGV4ID09IDApIHtcclxuICAgICAgICBhcmVhQ29udGV4dC5hZGRXaWRnZXQod2lkZ2V0TGlzdFtpbmRleF0pO1xyXG4gICAgICAgIGFyZWFDb250ZXh0LmFkZFdpZGdldExpc3RUb0dyaWRzdGVyKHdpZGdldExpc3QsIGluZGV4VmFsKTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgIGFyZWFDb250ZXh0LmFkZFdpZGdldCh3aWRnZXRMaXN0W2luZGV4XSk7XHJcbiAgICAgICAgICBhcmVhQ29udGV4dC5hZGRXaWRnZXRMaXN0VG9Hcmlkc3Rlcih3aWRnZXRMaXN0LCBpbmRleFZhbCk7XHJcbiAgICAgICAgfSwgMTAwMCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuY29uaWZnQWRkQ2xpY2spXHJcbiAgICAgIHRoaXMuY29uaWZnQWRkQ2xpY2sudW5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICBpZiAodGhpcy53aWRnZXRBZGRFdmVudClcclxuICAgICAgdGhpcy53aWRnZXRBZGRFdmVudC51bnN1YnNjcmliZSgpO1xyXG5cclxuICAgIGlmICh0aGlzLndpZGdldERlbGV0ZUV2ZW50KVxyXG4gICAgICB0aGlzLndpZGdldERlbGV0ZUV2ZW50LnVuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgaWYgKHRoaXMud2lkZ2V0TGlicmFyeURvbmVDbGljaylcclxuICAgICAgdGhpcy53aWRnZXRMaWJyYXJ5RG9uZUNsaWNrLnVuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgaWYgKHRoaXMucmVhcnJhbmdlV2lkZ2V0Q2xpY2spXHJcbiAgICAgIHRoaXMucmVhcnJhbmdlV2lkZ2V0Q2xpY2sudW5zdWJzY3JpYmUoKTtcclxuXHJcbiAgfVxyXG5cclxuICAvKipUbyB1cGRhdGUgcG9zaXRpb24vZGltZW50aW9uIG9mIGFsbCB3aWRnZXRzIGluIHRoZSBhcmVhICovXHJcbiAgdXBkYXRlV2lkZ2V0cygpIHtcclxuICAgIHRoaXMuZGFzaGJvYXJkU2VydmljZS51cGRhdGVXaWRnZXRzKHRoaXMubWFwR3JpZHN0ZXJMaXN0VG9PYmplY3QodGhpcy53aWRnZXRMaXN0KSwgdGhpcy5hcHBDb25maWcpLnN1YnNjcmliZSh3aWRnZXRzID0+IHtcclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICAvKipUbyB1cGRhdGUgd2lkZ2V0IGRpbWVuc2lvbnMgKi9cclxuICB1cGRhdGVXaWRnZXRQb3NpdGlvbih3aWRnZXRJbnN0YW5jZUlkOiBudW1iZXIpIHtcclxuXHJcbiAgICBsZXQgd2lkZ2V0RmlsdGVyZWRMaXN0ID0gW107XHJcbiAgICBsZXQgd2lkZ2V0ID0gdGhpcy53aWRnZXRMaXN0LmZpbHRlcihmaWx0ZXJlZCA9PiBmaWx0ZXJlZC53aWRnZXRJbmZvICYmIGZpbHRlcmVkLndpZGdldEluZm8ud2lkZ2V0SW5zdGFuY2VJZCA9PSB3aWRnZXRJbnN0YW5jZUlkKTtcclxuICAgIGlmICh3aWRnZXQgJiYgd2lkZ2V0Lmxlbmd0aCA+IDApIHtcclxuICAgICAgd2lkZ2V0RmlsdGVyZWRMaXN0LnB1c2god2lkZ2V0WzBdKTtcclxuICAgICAgbGV0IHdpZGdldExpc3QgPSB0aGlzLm1hcEdyaWRzdGVyTGlzdFRvT2JqZWN0KHdpZGdldEZpbHRlcmVkTGlzdCk7XHJcbiAgICAgIHRoaXMuZGFzaGJvYXJkU2VydmljZS51cGRhdGVXaWRnZXRzKHRoaXMuZm9ybWF0V2lkZ2V0RGF0YUZvclBvc2l0aW9uRGV0YWlscyh3aWRnZXRMaXN0KSwgdGhpcy5hcHBDb25maWcpLnN1YnNjcmliZSh3aWRnZXRzID0+IHtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIC8qKlRvIHJlc3RyaWN0IHJlcXVlc3QgcGF5bG9hZCB0byBiZSBvZiBtaW4gc2l6ZSAocG9zaXRpb24gJiBzaXplIGRldGFpbHMpICovXHJcbiAgZm9ybWF0V2lkZ2V0RGF0YUZvclBvc2l0aW9uRGV0YWlscyh3aWRnZXRJdGVtTGlzdDogSVdpZGdldEluZm9bXSkge1xyXG4gICAgbGV0IGl0ZW1MaXN0OiBhbnkgPSBbXTtcclxuICAgIHdpZGdldEl0ZW1MaXN0LmZvckVhY2goZnVuY3Rpb24gKHdpZGdldEl0ZW0pIHtcclxuICAgICAgbGV0IGl0ZW0gPSB7fSBhcyBJV2lkZ2V0SW5mbztcclxuICAgICAgaXRlbS53aWRnZXRJbnN0YW5jZUlkID0gd2lkZ2V0SXRlbS53aWRnZXRJbnN0YW5jZUlkO1xyXG4gICAgICBpdGVtLnBvc2l0aW9uX3ggPSB3aWRnZXRJdGVtLnBvc2l0aW9uX3g7XHJcbiAgICAgIGl0ZW0ucG9zaXRpb25feSA9IHdpZGdldEl0ZW0ucG9zaXRpb25feTtcclxuICAgICAgaXRlbS53aWR0aCA9IHdpZGdldEl0ZW0ud2lkdGg7XHJcbiAgICAgIGl0ZW0uaGVpZ2h0ID0gd2lkZ2V0SXRlbS5oZWlnaHQ7XHJcbiAgICAgIGl0ZW1MaXN0LnB1c2goaXRlbSk7XHJcbiAgICB9KTtcclxuICAgIHJldHVybiBpdGVtTGlzdDtcclxuICB9XHJcblxyXG4gIC8qKiBUbyByZXRyaWV2ZSB3aWRnZXRzIGJhc2VkIG9uIHVzZXJEYXNoYm9hcmRpZCBhbmQgYXJlYSBuYW1lICovXHJcbiAgbG9hZFdpZGdldHModXNlckRhc2hib2FySWQ6IG51bWJlciwgYXJlYUtleTogc3RyaW5nKSB7XHJcblxyXG4gICAgbGV0IHdpZGdldEluZm8gPSA8SVdpZGdldEluZm8+e1xyXG4gICAgICBkYXNoYm9hcmRJZDogdXNlckRhc2hib2FySWQudG9TdHJpbmcoKSxcclxuICAgICAgZGFzaGJvYXJkQXJlYUtleTogYXJlYUtleVxyXG4gICAgfVxyXG4gICAgdGhpcy53aWRnZXRMaXN0ID0gW107XHJcbiAgICB0aGlzLmRhc2hib2FyZFNlcnZpY2UuZ2V0V2lkZ2V0c0J5RGFzaGJvYXJkQXJlYSh3aWRnZXRJbmZvLCB0aGlzLmFwcENvbmZpZykuc3Vic2NyaWJlKHdpZGdldHMgPT4ge1xyXG4gICAgICAvL3NvcnRpbmcgdGhlIHdpZGdldHMgeSwgeFxyXG4gICAgICB3aWRnZXRzID0gd2lkZ2V0cy5zb3J0KChhOiBhbnksIGI6IGFueSkgPT4ge1xyXG4gICAgICAgIGlmIChhWydwb3NpdGlvbl95J10gPiBiWydwb3NpdGlvbl95J10pIHJldHVybiAxO1xyXG4gICAgICAgIGlmIChhWydwb3NpdGlvbl95J10gPCBiWydwb3NpdGlvbl95J10pIHJldHVybiAtMTtcclxuICAgICAgICBpZiAoYVsncG9zaXRpb25feCddID4gYlsncG9zaXRpb25feCddKSByZXR1cm4gMTtcclxuICAgICAgICBpZiAoYVsncG9zaXRpb25feCddIDwgYlsncG9zaXRpb25feCddKSByZXR1cm4gLTE7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgdGhpcy51c2VyV2lkZ2V0cyA9IHdpZGdldHM7XHJcblxyXG4gICAgICBpZiAod2lkZ2V0cyAmJiB3aWRnZXRzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICB0aGlzLndpZGdldExpc3QgPSB0aGlzLm1hcE9iamVjdExpc3RUb0dyaWRzdGVySXRlbUxpc3Qod2lkZ2V0cyk7XHJcbiAgICAgICAgdGhpcy5zZXRBcmVhSGVpZ2h0KCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcblxyXG4gIC8qKiBUbyBzZXQgQXJlYShHcmlkc3RlcikgaGVpZ2h0IGR5bmFtaWNhbGx5IGFzIHdpZGdldHMgYXJlIGFkZGVkL3JlbW92ZWQgKi9cclxuICBzZXRBcmVhSGVpZ2h0KCkge1xyXG4gICAgbGV0IGlzTW9iaWxlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBpZiAodGhpcy5vcHRpb25zLm1vYmlsZUJyZWFrcG9pbnQgPiB0aGlzLmdyaWRXcmFwcGVyLm5hdGl2ZUVsZW1lbnQuY2xpZW50V2lkdGgpIHtcclxuICAgICAgaXNNb2JpbGUgPSB0cnVlO1xyXG4gICAgfVxyXG4gICAgbGV0IGFyZWFTY3JvbGxIZWlnaHQgPSAwO1xyXG4gICAgbGV0IGFyZWFIZWlnaHQgPSAwO1xyXG4gICAgbGV0IGN1clJvd0hlaWdodCA9IDA7XHJcbiAgICBpZiAodGhpcy5vcHRpb25zLmFwaSkge1xyXG4gICAgICBjdXJSb3dIZWlnaHQgPSB0aGlzLm9wdGlvbnMuYXBpLmdldEN1cnJlbnRSb3dIZWlnaHQoKTtcclxuICAgIH1cclxuICAgIHRoaXMud2lkZ2V0TGlzdC5mb3JFYWNoKCh0KSA9PiB7XHJcbiAgICAgIGxldCBjdXJyZW50SGVpZ2h0ID0gdC55ICsgdC5yb3dzO1xyXG4gICAgICBpZiAoY3VycmVudEhlaWdodCA+IGFyZWFTY3JvbGxIZWlnaHQpIHtcclxuICAgICAgICBhcmVhU2Nyb2xsSGVpZ2h0ID0gY3VycmVudEhlaWdodDtcclxuICAgICAgfVxyXG4gICAgICBpZiAoY3VyUm93SGVpZ2h0ID09IDApIHtcclxuICAgICAgICBjdXJyZW50SGVpZ2h0ID0gdGhpcy53aWRnZXRMaXN0WzBdLmN1clJvd0hlaWdodDtcclxuICAgICAgfVxyXG4gICAgICB0LndpZGdldEluZm8ucm93SGVpZ2h0ID0gY3VyUm93SGVpZ2h0O1xyXG4gICAgfSk7XHJcbiAgICB0aGlzLmdyaWRjZWxsSGVpZ2h0ID0gY3VyUm93SGVpZ2h0O1xyXG4gICAgaWYgKHRoaXMub3B0aW9ucy5hcGkpIHtcclxuICAgICAgYXJlYUhlaWdodCA9IGFyZWFTY3JvbGxIZWlnaHQgKiB0aGlzLm9wdGlvbnMuYXBpLmdldEN1cnJlbnRSb3dIZWlnaHQoKSArIDEwMDtcclxuICAgIH1cclxuICAgIGxldCBhcmVhU2Nyb2xsSGVpZ2h0TW9iID0gMDtcclxuICAgIGlmIChpc01vYmlsZSkge1xyXG4gICAgICBhcmVhU2Nyb2xsSGVpZ2h0TW9iID0gdGhpcy53aWRnZXRMaXN0Lmxlbmd0aCAqIDMwMCArIDIwMDtcclxuICAgICAgYXJlYUhlaWdodCA9IGFyZWFTY3JvbGxIZWlnaHRNb2I7XHJcbiAgICB9XHJcbiAgICBpZiAoYXJlYUhlaWdodCA8IDYwMCkge1xyXG4gICAgICBhcmVhSGVpZ2h0ID0gNjAwO1xyXG4gICAgfVxyXG4gICAgdGhpcy5ncmlkaGVpZ2h0ID0gYXJlYUhlaWdodDtcclxuICB9XHJcblxyXG5cclxuICAvKiogVG8gcmVtb3ZlIGEgd2lkZ2V0IGluc3RhbmNlIGZyb20gZGFzaGJvYXJkIGFuZCB0byBzYXZlIGluZm8gaW4gZGF0YWJhc2UgKi9cclxuICBkZWxldGVXaWRnZXQod2lkZ2V0SW5zdGFuY2VJZDogYW55LCBpc2FsZXJ0RGlzYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZSkge1xyXG4gICAgbGV0IHdpZGdldCA9IHRoaXMud2lkZ2V0TGlzdC5maWx0ZXIoZnVuY3Rpb24gKGl0ZW0pIHtcclxuICAgICAgcmV0dXJuIGl0ZW0ud2lkZ2V0SW5mby53aWRnZXRJbnN0YW5jZUlkID09PSB3aWRnZXRJbnN0YW5jZUlkO1xyXG4gICAgfSk7XHJcbiAgICBpZiAod2lkZ2V0Lmxlbmd0aCA+IDApIHtcclxuICAgICAgdGhpcy53aWRnZXRMaXN0LnNwbGljZSh0aGlzLndpZGdldExpc3QuaW5kZXhPZih3aWRnZXRbMF0pLCAxKTtcclxuICAgICAgdGhpcy5zZXRBcmVhSGVpZ2h0KCk7XHJcbiAgICAgIGlmICghaXNhbGVydERpc2FibGVkKSB7XHJcbiAgICAgICAgdGhpcy5ub3RpZmllci5ub3RpZnkoJ3N1Y2Nlc3MnLCBcIiBcIiArIHRoaXMudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGUoJ0NvbW1vbi5XaWRnZXR0ZXh0JykgKyBcIiBcIiArIHdpZGdldFswXS53aWRnZXRJbmZvLndpZGdldFRpdGxlICsgXCIgXCIgKyB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UudHJhbnNsYXRlKCdDb21tb24uZGVsZXRlZFN1Y2Nlc2Z1bGx5JykgKyBcIiBcIik7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlRvIHJlYXJyYW5nZSB3aWRnZXRzIHBvc2l0aW9uIGluIHRoZSBkYXNoYm9hcmQsIGNvbXBhY3RMZWZ0JlVwLGNvbXBhY3RMZWZ0LGNvbXBhY3RVcCxldGMqL1xyXG4gIHJlYXJyYW5nZVdpZGdldHMoKSB7XHJcbiAgICB0aGlzLm9wdGlvbnMuY29tcGFjdFR5cGUgPSAnY29tcGFjdFVwJkxlZnQnO1xyXG4gICAgdGhpcy5vcHRpb25zLmFwaS5vcHRpb25zQ2hhbmdlZCgpO1xyXG4gICAgdGhpcy5vcHRpb25zLmNvbXBhY3RUeXBlID0gJ25vbmUnO1xyXG4gICAgdGhpcy5vcHRpb25zLmFwaS5vcHRpb25zQ2hhbmdlZCgpO1xyXG4gIH1cclxuXHJcbiAgLyoqVG8gYWRkIHdpZGdldCBpbnN0YW5jZSB0byB0aGUgZGF0YWJhc2Ugd2l0aCB0aGUgbmV4dCBhdmFpbGFibGUgcG9zaXRpb24gYW5kIHRvIG1ha2UgY2hhbmdlcyBpblxyXG4gICAqIGRhc2hib2FyZCBhcmVhLlxyXG4gICAqL1xyXG4gIGFkZFdpZGdldChkYXRhOiBhbnkpIHtcclxuICAgIGRhdGEuaGVpZ2h0ID0gdGhpcy53aWRnZXRIZWlnaHQ7XHJcbiAgICBkYXRhLndpZHRoID0gdGhpcy53aWRnZXRXaWR0aDtcclxuICAgIGRhdGEucG9zaXRpb25feCA9IDA7XHJcbiAgICBkYXRhLnBvc2l0aW9uX3kgPSAwO1xyXG5cclxuICAgIC8qKiB0byBmaW5kIHRoZSBhdmFpbGFibGUgcG9zaXRpb24gaW4gZ3JpZHN0ZXIsIHRlbXAgY29tbWVudGluZyB0aGUgY29kZS1yZXR1cm5pbmcgaGlnaGVyIHkgdmFsdWUgdGhhbiBub3JtYWwgKi9cclxuICAgIGRhdGEuZGFzaGJvYXJkQXJlYUtleSA9IHRoaXMuYXJlYUtleTtcclxuICAgIGRhdGEuZGFzaGJvYXJkSWQgPSB0aGlzLnVzZXJEYXNoYm9hcmRJZDtcclxuICAgIHRoaXMubmd4U2VydmljZS5zdGFydCgpO1xyXG4gICAgdGhpcy5kYXNoYm9hcmRTZXJ2aWNlLmFkZFdpZGdldChkYXRhLCB0aGlzLmFwcENvbmZpZykuc3Vic2NyaWJlKHdpZGdldCA9PiB7XHJcbiAgICAgIGxldCBncmlkc3Rlckl0ZW0gPSB0aGlzLnJlc3BvbnNpdmVTZXJ2aWNlLmdldEdyaWRzdGVySXRlbSh3aWRnZXQpO1xyXG4gICAgICB0aGlzLndpZGdldExpc3QucHVzaChncmlkc3Rlckl0ZW0pO1xyXG4gICAgICB0aGlzLnNldEFyZWFIZWlnaHQoKTtcclxuXHJcbiAgICAgIGlmICh0aGlzLm9wdGlvbnMuYXBpKSB7XHJcbiAgICAgICAgbGV0IGN1clJvd0hlaWdodDogbnVtYmVyID0gTnVtYmVyKHRoaXMub3B0aW9ucy5hcGkuZ2V0Q3VycmVudFJvd0hlaWdodCgpKTtcclxuICAgICAgICBpZiAoY3VyUm93SGVpZ2h0ID4gMCkge1xyXG4gICAgICAgICAgd2lkZ2V0LnJvd0hlaWdodCA9IGN1clJvd0hlaWdodDtcclxuICAgICAgICAgIHRoaXMuZ3JpZGNlbGxIZWlnaHQgPSBjdXJSb3dIZWlnaHQ7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHZhciB3aWRnZXRJbnN0YW5jZUlkID0gMDtcclxuICAgICAgaWYgKHdpZGdldCAmJiB3aWRnZXQud2lkZ2V0SW5zdGFuY2VJZCkge1xyXG4gICAgICAgIHdpZGdldEluc3RhbmNlSWQgPSB3aWRnZXQud2lkZ2V0SW5zdGFuY2VJZDtcclxuICAgICAgICAvKipUbyBzYXZlIGFkZGVkIHdpZGdldCBwb3NpdGlvbiBpbiBkYiAqL1xyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy51cGRhdGVXaWRnZXRQb3NpdGlvbih3aWRnZXRJbnN0YW5jZUlkKTtcclxuICAgICAgICB9LCAxMDAwKTtcclxuICAgICAgfVxyXG5cclxuXHJcbiAgICAgIHRoaXMucmFEYXNoYm9hcmRFdmVudEJ1cy5wdWJsaXNoKFJBRXZlbnQuV2lkZ2V0QWRkZWQsIHdpZGdldCk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKiBUbyBhZGQgd2lkZ2V0IHRvIGN1cnJlbnQgd2lkZ2V0IGxpc3QgLGludm9rZWQgZnJvbSBjb3B5IHdpZGdldCB3aW5kb3cqL1xyXG4gIGNvcHlXaWRnZXQoZGF0YTogYW55KSB7XHJcblxyXG4gICAgZGF0YS5wb3NpdGlvbl94ID0gMDtcclxuICAgIGRhdGEucG9zaXRpb25feSA9IDA7XHJcbiAgICBsZXQgZ3JpZHN0ZXJJdGVtID0gdGhpcy5yZXNwb25zaXZlU2VydmljZS5nZXRHcmlkc3Rlckl0ZW0oZGF0YSk7XHJcbiAgICB0aGlzLndpZGdldExpc3QucHVzaChncmlkc3Rlckl0ZW0pO1xyXG4gICAgdGhpcy5zZXRBcmVhSGVpZ2h0KCk7XHJcbiAgfVxyXG5cclxuICBtYXBPYmplY3RMaXN0VG9Hcmlkc3Rlckl0ZW1MaXN0KHdpZGdldExpc3Q6IEFycmF5PElXaWRnZXRJbmZvPikge1xyXG4gICAgbGV0IHdpZGdldEFycmF5ID0gQXJyYXk8R3JpZHN0ZXJJdGVtPigpO1xyXG4gICAgd2lkZ2V0TGlzdC5mb3JFYWNoKHdpZGdldCA9PiB7XHJcbiAgICAgIHdpZGdldEFycmF5LnB1c2godGhpcy5yZXNwb25zaXZlU2VydmljZS5nZXRHcmlkc3Rlckl0ZW0od2lkZ2V0KSk7XHJcbiAgICB9KTtcclxuICAgIHJldHVybiB3aWRnZXRBcnJheTtcclxuICB9XHJcblxyXG4gIG1hcEdyaWRzdGVySXRlbVRvT2JqZWN0KHdpZGdldEl0ZW06IEdyaWRzdGVySXRlbSkge1xyXG4gICAgbGV0IHdpZGdldDogSVdpZGdldEluZm87XHJcbiAgICB3aWRnZXQgPSB3aWRnZXRJdGVtLndpZGdldEluZm87XHJcbiAgICB3aWRnZXQuaGVpZ2h0ID0gd2lkZ2V0SXRlbS5yb3dzO1xyXG4gICAgd2lkZ2V0LndpZHRoID0gd2lkZ2V0SXRlbS5jb2xzO1xyXG4gICAgd2lkZ2V0LnBvc2l0aW9uX3ggPSB3aWRnZXRJdGVtLng7XHJcbiAgICB3aWRnZXQucG9zaXRpb25feSA9IHdpZGdldEl0ZW0ueTtcclxuICAgIHdpZGdldC5yb3dIZWlnaHQgPSB3aWRnZXRJdGVtLmN1clJvd0hlaWdodDtcclxuICAgIHJldHVybiB3aWRnZXQ7XHJcbiAgfVxyXG5cclxuICBtYXBHcmlkc3Rlckxpc3RUb09iamVjdCh3aWRnZXRJdGVtTGlzdDogQXJyYXk8R3JpZHN0ZXJJdGVtPikge1xyXG4gICAgbGV0IHdpZGdldExpc3RBcnJheSA9IEFycmF5PElXaWRnZXRJbmZvPigpO1xyXG4gICAgd2lkZ2V0SXRlbUxpc3QuZm9yRWFjaCh3aWRnZXQgPT4ge1xyXG4gICAgICB3aWRnZXRMaXN0QXJyYXkucHVzaCh0aGlzLm1hcEdyaWRzdGVySXRlbVRvT2JqZWN0KHdpZGdldCkpO1xyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gd2lkZ2V0TGlzdEFycmF5O1xyXG4gIH1cclxuXHJcbn0iXX0=
@@ -0,0 +1,167 @@
1
+ /**
2
+ * @fileoverview added by tsickle
3
+ * Generated from: lib/ra.dashboard.responsive.service.ts
4
+ * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
5
+ */
6
+ import { Injectable } from '@angular/core';
7
+ import { GridsterConfigDefaultSettings } from './ra.gridster.config';
8
+ import * as i0 from "@angular/core";
9
+ /** @type {?} */
10
+ var DesktopViewStart = 1367;
11
+ var RADashboardResponsiveService = /** @class */ (function () {
12
+ function RADashboardResponsiveService() {
13
+ var _this = this;
14
+ this.resInfo = [
15
+ { 'start': 0, 'end': 767, 'minCols': 1, 'maxCols': 1 },
16
+ { 'start': 768, 'end': 1024, 'minCols': 1, 'maxCols': 2 },
17
+ { 'start': 1025, 'end': DesktopViewStart - 1, 'minCols': 2, 'maxCols': 6 },
18
+ { 'start': DesktopViewStart, 'end': 9999999999, 'minCols': 2, 'maxCols': 10 }
19
+ ];
20
+ this.setScreenWidth();
21
+ window.addEventListener('resize', (/**
22
+ * @return {?}
23
+ */
24
+ function () {
25
+ _this.setScreenWidth();
26
+ }));
27
+ }
28
+ /**
29
+ * @private
30
+ * @return {?}
31
+ */
32
+ RADashboardResponsiveService.prototype.setScreenWidth = /**
33
+ * @private
34
+ * @return {?}
35
+ */
36
+ function () {
37
+ var _this = this;
38
+ this.screenWidth = screen.width;
39
+ this.currentResInfo = this.resInfo.filter((/**
40
+ * @param {?} item
41
+ * @return {?}
42
+ */
43
+ function (item) {
44
+ return item.end >= _this.screenWidth && item.start <= _this.screenWidth;
45
+ }))[0];
46
+ };
47
+ Object.defineProperty(RADashboardResponsiveService.prototype, "IsDesktopView", {
48
+ get: /**
49
+ * @return {?}
50
+ */
51
+ function () {
52
+ return this.screenWidth >= DesktopViewStart;
53
+ },
54
+ enumerable: true,
55
+ configurable: true
56
+ });
57
+ Object.defineProperty(RADashboardResponsiveService.prototype, "GridsterConfig", {
58
+ get: /**
59
+ * @return {?}
60
+ */
61
+ function () {
62
+ /** @type {?} */
63
+ var config = GridsterConfigDefaultSettings;
64
+ config.minCols = this.currentResInfo.maxCols;
65
+ config.maxCols = this.currentResInfo.maxCols;
66
+ config.minRows = this.currentResInfo.minCols;
67
+ config.maxItemCols = this.currentResInfo.maxCols;
68
+ config.minItemCols = this.currentResInfo.minCols;
69
+ config.minItemRows = this.currentResInfo.minCols;
70
+ config.minItemArea = this.currentResInfo.minCols * this.currentResInfo.minCols;
71
+ config.defaultItemCols = this.currentResInfo.minCols;
72
+ config.defaultItemRows = this.currentResInfo.minCols;
73
+ if (!this.IsDesktopView) {
74
+ config.resizable.enabled = false;
75
+ config.swap = false;
76
+ config.draggable.enabled = false;
77
+ }
78
+ return config;
79
+ },
80
+ enumerable: true,
81
+ configurable: true
82
+ });
83
+ /**To map IwidgetInfo object to gridsterItem */
84
+ /**
85
+ * To map IwidgetInfo object to gridsterItem
86
+ * @param {?} widget
87
+ * @return {?}
88
+ */
89
+ RADashboardResponsiveService.prototype.getGridsterItem = /**
90
+ * To map IwidgetInfo object to gridsterItem
91
+ * @param {?} widget
92
+ * @return {?}
93
+ */
94
+ function (widget) {
95
+ /** @type {?} */
96
+ var gridsterItem = (/** @type {?} */ ({
97
+ cols: this.getWidth(widget.width),
98
+ rows: this.getHeight(widget.height),
99
+ x: this.IsDesktopView ? widget.position_x : 0,
100
+ y: this.IsDesktopView ? widget.position_y : 0,
101
+ widgetInfo: widget
102
+ }));
103
+ return gridsterItem;
104
+ };
105
+ /**
106
+ * @private
107
+ * @param {?} width
108
+ * @return {?}
109
+ */
110
+ RADashboardResponsiveService.prototype.getWidth = /**
111
+ * @private
112
+ * @param {?} width
113
+ * @return {?}
114
+ */
115
+ function (width) {
116
+ if (!this.IsDesktopView) {
117
+ width = Math.floor(width / 10 * this.currentResInfo.maxCols);
118
+ if (width < this.currentResInfo.minCols)
119
+ width = this.currentResInfo.minCols;
120
+ }
121
+ return width;
122
+ };
123
+ /**
124
+ * @private
125
+ * @param {?} height
126
+ * @return {?}
127
+ */
128
+ RADashboardResponsiveService.prototype.getHeight = /**
129
+ * @private
130
+ * @param {?} height
131
+ * @return {?}
132
+ */
133
+ function (height) {
134
+ if (!this.IsDesktopView) {
135
+ height = Math.floor(height / 10 * this.currentResInfo.maxCols);
136
+ if (height < this.currentResInfo.minCols)
137
+ height = this.currentResInfo.minCols;
138
+ }
139
+ return height;
140
+ };
141
+ RADashboardResponsiveService.decorators = [
142
+ { type: Injectable, args: [{ providedIn: 'root' },] }
143
+ ];
144
+ /** @nocollapse */
145
+ RADashboardResponsiveService.ctorParameters = function () { return []; };
146
+ /** @nocollapse */ RADashboardResponsiveService.ngInjectableDef = i0.ɵɵdefineInjectable({ factory: function RADashboardResponsiveService_Factory() { return new RADashboardResponsiveService(); }, token: RADashboardResponsiveService, providedIn: "root" });
147
+ return RADashboardResponsiveService;
148
+ }());
149
+ export { RADashboardResponsiveService };
150
+ if (false) {
151
+ /**
152
+ * @type {?}
153
+ * @private
154
+ */
155
+ RADashboardResponsiveService.prototype.screenWidth;
156
+ /**
157
+ * @type {?}
158
+ * @private
159
+ */
160
+ RADashboardResponsiveService.prototype.resInfo;
161
+ /**
162
+ * @type {?}
163
+ * @private
164
+ */
165
+ RADashboardResponsiveService.prototype.currentResInfo;
166
+ }
167
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmEuZGFzaGJvYXJkLnJlc3BvbnNpdmUuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BzY2huZWlkZXJlc3MvZGFzaGJvYXJkZnJhbWV3b3JrLyIsInNvdXJjZXMiOlsibGliL3JhLmRhc2hib2FyZC5yZXNwb25zaXZlLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTNDLE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLHNCQUFzQixDQUFDOzs7SUFHL0QsZ0JBQWdCLEdBQVcsSUFBSTtBQUVyQztJQVdJO1FBQUEsaUJBS0M7UUFiTyxZQUFPLEdBQUc7WUFDZCxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsQ0FBQyxFQUFFLFNBQVMsRUFBRSxDQUFDLEVBQUU7WUFDdEQsRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLENBQUMsRUFBRSxTQUFTLEVBQUUsQ0FBQyxFQUFFO1lBQ3pELEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsZ0JBQWdCLEdBQUcsQ0FBQyxFQUFFLFNBQVMsRUFBRSxDQUFDLEVBQUUsU0FBUyxFQUFFLENBQUMsRUFBRTtZQUMxRSxFQUFFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxDQUFDLEVBQUUsU0FBUyxFQUFFLEVBQUUsRUFBRTtTQUNoRixDQUFDO1FBSUUsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3RCLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFROzs7UUFBRTtZQUM5QixLQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDMUIsQ0FBQyxFQUFDLENBQUM7SUFDUCxDQUFDOzs7OztJQUVPLHFEQUFjOzs7O0lBQXRCO1FBQUEsaUJBS0M7UUFKRyxJ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O1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDakIsQ0FBQzs7Ozs7O0lBQ08sZ0RBQVM7Ozs7O0lBQWpCLFVBQWtCLE1BQWM7UUFDNUIsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUU7WUFDckIsTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQy9ELElBQUksTUFBTSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTztnQkFDcEMsTUFBTSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDO1NBQzVDO1FBQ0QsT0FBTyxNQUFNLENBQUM7SUFDbEIsQ0FBQzs7Z0JBN0VKLFVBQVUsU0FBQyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUU7Ozs7O3VDQVBsQztDQXFGQyxBQTlFRCxJQThFQztTQTdFWSw0QkFBNEI7Ozs7OztJQUNyQyxtREFBNEI7Ozs7O0lBQzVCLCtDQUtFOzs7OztJQUNGLHNEQUE0QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgR3JpZHN0ZXJDb25maWcsIEdyaWRzdGVySXRlbSB9IGZyb20gJy4uL2dyaWRzdGVyJztcclxuaW1wb3J0IHsgR3JpZHN0ZXJDb25maWdEZWZhdWx0U2V0dGluZ3MgfSBmcm9tICcuL3JhLmdyaWRzdGVyLmNvbmZpZyc7XHJcbmltcG9ydCB7IElXaWRnZXRJbmZvIH0gZnJvbSAnQHNjaG5laWRlcmVzcy93aWRnZXRmcmFtZXdvcmsnO1xyXG5cclxuY29uc3QgRGVza3RvcFZpZXdTdGFydDogbnVtYmVyID0gMTM2NztcclxuXHJcbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXHJcbmV4cG9ydCBjbGFzcyBSQURhc2hib2FyZFJlc3BvbnNpdmVTZXJ2aWNlIHtcclxuICAgIHByaXZhdGUgc2NyZWVuV2lkdGg6IG51bWJlcjtcclxuICAgIHByaXZhdGUgcmVzSW5mbyA9IFtcclxuICAgICAgICB7ICdzdGFydCc6IDAsICdlbmQnOiA3NjcsICdtaW5Db2xzJzogMSwgJ21heENvbHMnOiAxIH0sXHJcbiAgICAgICAgeyAnc3RhcnQnOiA3NjgsICdlbmQnOiAxMDI0LCAnbWluQ29scyc6IDEsICdtYXhDb2xzJzogMiB9LFxyXG4gICAgICAgIHsgJ3N0YXJ0JzogMTAyNSwgJ2VuZCc6IERlc2t0b3BWaWV3U3RhcnQgLSAxLCAnbWluQ29scyc6IDIsICdtYXhDb2xzJzogNiB9LFxyXG4gICAgICAgIHsgJ3N0YXJ0JzogRGVza3RvcFZpZXdTdGFydCwgJ2VuZCc6IDk5OTk5OTk5OTksICdtaW5Db2xzJzogMiwgJ21heENvbHMnOiAxMCB9XHJcbiAgICBdO1xyXG4gICAgcHJpdmF0ZSBjdXJyZW50UmVzSW5mbzogYW55O1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgICAgIHRoaXMuc2V0U2NyZWVuV2lkdGgoKTtcclxuICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnNldFNjcmVlbldpZHRoKCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBzZXRTY3JlZW5XaWR0aCgpIHtcclxuICAgICAgICB0aGlzLnNjcmVlbldpZHRoID0gc2NyZWVuLndpZHRoO1xyXG4gICAgICAgIHRoaXMuY3VycmVudFJlc0luZm8gPSB0aGlzLnJlc0luZm8uZmlsdGVyKChpdGVtKSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiBpdGVtLmVuZCA+PSB0aGlzLnNjcmVlbldpZHRoICYmIGl0ZW0uc3RhcnQgPD0gdGhpcy5zY3JlZW5XaWR0aDtcclxuICAgICAgICB9KVswXTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0IElzRGVza3RvcFZpZXcoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc2NyZWVuV2lkdGggPj0gRGVza3RvcFZpZXdTdGFydDtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0IEdyaWRzdGVyQ29uZmlnKCk6IEdyaWRzdGVyQ29uZmlnIHtcclxuICAgICAgICBsZXQgY29uZmlnOiBHcmlkc3RlckNvbmZpZyA9IEdyaWRzdGVyQ29uZmlnRGVmYXVsdFNldHRpbmdzO1xyXG5cclxuICAgICAgICBjb25maWcubWluQ29scyA9IHRoaXMuY3VycmVudFJlc0luZm8ubWF4Q29scztcclxuICAgICAgICBjb25maWcubWF4Q29scyA9IHRoaXMuY3VycmVudFJlc0luZm8ubWF4Q29scztcclxuICAgICAgICBjb25maWcubWluUm93cyA9IHRoaXMuY3VycmVudFJlc0luZm8ubWluQ29scztcclxuICAgICAgICBjb25maWcubWF4SXRlbUNvbHMgPSB0aGlzLmN1cnJlbnRSZXNJbmZvLm1heENvbHM7XHJcbiAgICAgICAgY29uZmlnLm1pbkl0ZW1Db2xzID0gdGhpcy5jdXJyZW50UmVzSW5mby5taW5Db2xzO1xyXG4gICAgICAgIGNvbmZpZy5taW5JdGVtUm93cyA9IHRoaXMuY3VycmVudFJlc0luZm8ubWluQ29scztcclxuICAgICAgICBjb25maWcubWluSXRlbUFyZWEgPSB0aGlzLmN1cnJlbnRSZXNJbmZvLm1pbkNvbHMgKiB0aGlzLmN1cnJlbnRSZXNJbmZvLm1pbkNvbHM7XHJcbiAgICAgICAgY29uZmlnLmRlZmF1bHRJdGVtQ29scyA9IHRoaXMuY3VycmVudFJlc0luZm8ubWluQ29scztcclxuICAgICAgICBjb25maWcuZGVmYXVsdEl0ZW1Sb3dzID0gdGhpcy5jdXJyZW50UmVzSW5mby5taW5Db2xzO1xyXG5cclxuICAgICAgICBpZiAoIXRoaXMuSXNEZXNrdG9wVmlldykge1xyXG4gICAgICAgICAgICBjb25maWcucmVzaXphYmxlLmVuYWJsZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgY29uZmlnLnN3YXAgPSBmYWxzZTtcclxuICAgICAgICAgICAgY29uZmlnLmRyYWdnYWJsZS5lbmFibGVkID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBjb25maWc7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqVG8gbWFwIEl3aWRnZXRJbmZvIG9iamVjdCB0byBncmlkc3Rlckl0ZW0gKi9cclxuICAgIHB1YmxpYyBnZXRHcmlkc3Rlckl0ZW0od2lkZ2V0OiBJV2lkZ2V0SW5mbykge1xyXG4gICAgICAgIGxldCBncmlkc3Rlckl0ZW0gPSA8R3JpZHN0ZXJJdGVtPntcclxuICAgICAgICAgICAgY29sczogdGhpcy5nZXRXaWR0aCh3aWRnZXQud2lkdGgpLFxyXG4gICAgICAgICAgICByb3dzOiB0aGlzLmdldEhlaWdodCh3aWRnZXQuaGVpZ2h0KSxcclxuICAgICAgICAgICAgeDogdGhpcy5Jc0Rlc2t0b3BWaWV3ID8gd2lkZ2V0LnBvc2l0aW9uX3ggOiAwLFxyXG4gICAgICAgICAgICB5OiB0aGlzLklzRGVza3RvcFZpZXcgPyB3aWRnZXQucG9zaXRpb25feSA6IDAsXHJcbiAgICAgICAgICAgIHdpZGdldEluZm86IHdpZGdldFxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZ3JpZHN0ZXJJdGVtO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZ2V0V2lkdGgod2lkdGg6IG51bWJlcik6IG51bWJlciB7XHJcbiAgICAgICAgaWYgKCF0aGlzLklzRGVza3RvcFZpZXcpIHtcclxuICAgICAgICAgICAgd2lkdGggPSBNYXRoLmZsb29yKHdpZHRoIC8gMTAgKiB0aGlzLmN1cnJlbnRSZXNJbmZvLm1heENvbHMpO1xyXG4gICAgICAgICAgICBpZiAod2lkdGggPCB0aGlzLmN1cnJlbnRSZXNJbmZvLm1pbkNvbHMpXHJcbiAgICAgICAgICAgICAgICB3aWR0aCA9IHRoaXMuY3VycmVudFJlc0luZm8ubWluQ29scztcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHdpZHRoO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBnZXRIZWlnaHQoaGVpZ2h0OiBudW1iZXIpIHtcclxuICAgICAgICBpZiAoIXRoaXMuSXNEZXNrdG9wVmlldykge1xyXG4gICAgICAgICAgICBoZWlnaHQgPSBNYXRoLmZsb29yKGhlaWdodCAvIDEwICogdGhpcy5jdXJyZW50UmVzSW5mby5tYXhDb2xzKTtcclxuICAgICAgICAgICAgaWYgKGhlaWdodCA8IHRoaXMuY3VycmVudFJlc0luZm8ubWluQ29scylcclxuICAgICAgICAgICAgICAgIGhlaWdodCA9IHRoaXMuY3VycmVudFJlc0luZm8ubWluQ29scztcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGhlaWdodDtcclxuICAgIH1cclxufSJdfQ==
@@ -14,4 +14,5 @@ export { RADashboardEventBus } from './lib/ra.dashbard.event.bus';
14
14
  export { RAEvent, RAEventKey } from './lib/ra.event.enum';
15
15
  export { RaBaseDashboardTemplate } from './lib/ra.base.dashboard.template';
16
16
  export { RaBaseDashboardFilter } from './lib/ra.base.dashboard.filter';
17
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BzY2huZWlkZXJlc3MvZGFzaGJvYXJkZnJhbWV3b3JrLyIsInNvdXJjZXMiOlsicHVibGljLWFwaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUlBLG1DQUFjLDRCQUE0QixDQUFDO0FBQzNDLGdDQUFjLDJDQUEyQyxDQUFDO0FBQzFELGtDQUFjLHlEQUF5RCxDQUFDO0FBQ3hFLHlDQUFjLDJCQUEyQixDQUFDO0FBQzFDLG9DQUFjLDZCQUE2QixDQUFDO0FBQzVDLG9DQUFjLHFCQUFxQixDQUFDO0FBQ3BDLHdDQUFjLGtDQUFrQyxDQUFDO0FBQ2pELHNDQUFjLGdDQUFnQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLypcclxuICogUHVibGljIEFQSSBTdXJmYWNlIG9mIHJhLWRhc2hib2FyZC1mcmFtZXdvcmtcclxuICovXHJcblxyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9yYS5kYXNoYm9hcmQuc2VydmljZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL3JhLWRhc2hib2FyZC1hcmVhL3JhLmRhc2hib2FyZC5hcmVhJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvcmEtd2lkZ2V0LWNvbnRhaW5lci9yYS53aWRnZXQuY29udGFpbmVyLmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL3JhLmRhc2hib2FyZC5tb2R1bGUnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9yYS5kYXNoYmFyZC5ldmVudC5idXMnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9yYS5ldmVudC5lbnVtJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvcmEuYmFzZS5kYXNoYm9hcmQudGVtcGxhdGUnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9yYS5iYXNlLmRhc2hib2FyZC5maWx0ZXInOyJdfQ==
17
+ export { RADashboardResponsiveService } from './lib/ra.dashboard.responsive.service';
18
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BzY2huZWlkZXJlc3MvZGFzaGJvYXJkZnJhbWV3b3JrLyIsInNvdXJjZXMiOlsicHVibGljLWFwaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUlBLG1DQUFjLDRCQUE0QixDQUFDO0FBQzNDLGdDQUFjLDJDQUEyQyxDQUFDO0FBQzFELGtDQUFjLHlEQUF5RCxDQUFDO0FBQ3hFLHlDQUFjLDJCQUEyQixDQUFDO0FBQzFDLG9DQUFjLDZCQUE2QixDQUFDO0FBQzVDLG9DQUFjLHFCQUFxQixDQUFDO0FBQ3BDLHdDQUFjLGtDQUFrQyxDQUFDO0FBQ2pELHNDQUFjLGdDQUFnQyxDQUFDO0FBQy9DLDZDQUFjLHVDQUF1QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLypcclxuICogUHVibGljIEFQSSBTdXJmYWNlIG9mIHJhLWRhc2hib2FyZC1mcmFtZXdvcmtcclxuICovXHJcblxyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9yYS5kYXNoYm9hcmQuc2VydmljZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL3JhLWRhc2hib2FyZC1hcmVhL3JhLmRhc2hib2FyZC5hcmVhJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvcmEtd2lkZ2V0LWNvbnRhaW5lci9yYS53aWRnZXQuY29udGFpbmVyLmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL3JhLmRhc2hib2FyZC5tb2R1bGUnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9yYS5kYXNoYmFyZC5ldmVudC5idXMnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9yYS5ldmVudC5lbnVtJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvcmEuYmFzZS5kYXNoYm9hcmQudGVtcGxhdGUnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9yYS5iYXNlLmRhc2hib2FyZC5maWx0ZXInO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9yYS5kYXNoYm9hcmQucmVzcG9uc2l2ZS5zZXJ2aWNlJztcclxuIl19