@schneideress/dashboardframework 17.0.47 → 20.0.1

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 (75) hide show
  1. package/fesm2022/schneideress-dashboardframework.mjs +47 -47
  2. package/fesm2022/schneideress-dashboardframework.mjs.map +1 -1
  3. package/index.d.ts +1255 -5
  4. package/package.json +11 -7
  5. package/esm2022/gridster/index.mjs +0 -12
  6. package/esm2022/gridster/lib/gridster.component.mjs +0 -627
  7. package/esm2022/gridster/lib/gridster.interface.mjs +0 -3
  8. package/esm2022/gridster/lib/gridster.module.mjs +0 -17
  9. package/esm2022/gridster/lib/gridsterCompact.service.mjs +0 -126
  10. package/esm2022/gridster/lib/gridsterConfig.constant.mjs +0 -118
  11. package/esm2022/gridster/lib/gridsterConfig.interface.mjs +0 -37
  12. package/esm2022/gridster/lib/gridsterConfigS.interface.mjs +0 -2
  13. package/esm2022/gridster/lib/gridsterDraggable.service.mjs +0 -405
  14. package/esm2022/gridster/lib/gridsterEmptyCell.service.mjs +0 -255
  15. package/esm2022/gridster/lib/gridsterItem.component.mjs +0 -231
  16. package/esm2022/gridster/lib/gridsterItem.interface.mjs +0 -3
  17. package/esm2022/gridster/lib/gridsterPreview.component.mjs +0 -36
  18. package/esm2022/gridster/lib/gridsterPush.service.mjs +0 -316
  19. package/esm2022/gridster/lib/gridsterPushResize.service.mjs +0 -225
  20. package/esm2022/gridster/lib/gridsterRenderer.interface.mjs +0 -2
  21. package/esm2022/gridster/lib/gridsterRenderer.service.mjs +0 -274
  22. package/esm2022/gridster/lib/gridsterResizable.service.mjs +0 -470
  23. package/esm2022/gridster/lib/gridsterResizeEventType.interface.mjs +0 -2
  24. package/esm2022/gridster/lib/gridsterScroll.service.mjs +0 -134
  25. package/esm2022/gridster/lib/gridsterSwap.service.mjs +0 -87
  26. package/esm2022/gridster/lib/gridsterUtils.service.mjs +0 -92
  27. package/esm2022/lib/custom.notifier.options.mjs +0 -41
  28. package/esm2022/lib/ra-dashboard-area/ra.dashboard.area.mjs +0 -639
  29. package/esm2022/lib/ra-widget-container/lock-tooltip/lock.tooltip.component.mjs +0 -43
  30. package/esm2022/lib/ra-widget-container/ra.widget.container.component.mjs +0 -964
  31. package/esm2022/lib/ra.base.dashboard.filter.mjs +0 -46
  32. package/esm2022/lib/ra.base.dashboard.template.mjs +0 -45
  33. package/esm2022/lib/ra.dashbard.event.bus.mjs +0 -46
  34. package/esm2022/lib/ra.dashboard.module.mjs +0 -55
  35. package/esm2022/lib/ra.dashboard.responsive.service.mjs +0 -149
  36. package/esm2022/lib/ra.dashboard.service.mjs +0 -84
  37. package/esm2022/lib/ra.event.enum.mjs +0 -75
  38. package/esm2022/lib/ra.gridster.config.mjs +0 -56
  39. package/esm2022/public-api.mjs +0 -13
  40. package/esm2022/schneideress-dashboardframework.mjs +0 -5
  41. package/gridster/index.d.ts +0 -9
  42. package/gridster/lib/gridster.component.d.ts +0 -79
  43. package/gridster/lib/gridster.interface.d.ts +0 -49
  44. package/gridster/lib/gridster.module.d.ts +0 -8
  45. package/gridster/lib/gridsterCompact.service.d.ts +0 -11
  46. package/gridster/lib/gridsterConfig.constant.d.ts +0 -2
  47. package/gridster/lib/gridsterConfig.interface.d.ts +0 -155
  48. package/gridster/lib/gridsterConfigS.interface.d.ts +0 -107
  49. package/gridster/lib/gridsterDraggable.service.d.ts +0 -68
  50. package/gridster/lib/gridsterEmptyCell.service.d.ts +0 -31
  51. package/gridster/lib/gridsterItem.component.d.ts +0 -61
  52. package/gridster/lib/gridsterItem.interface.d.ts +0 -67
  53. package/gridster/lib/gridsterPreview.component.d.ts +0 -17
  54. package/gridster/lib/gridsterPush.service.d.ts +0 -34
  55. package/gridster/lib/gridsterPushResize.service.d.ts +0 -26
  56. package/gridster/lib/gridsterRenderer.interface.d.ts +0 -14
  57. package/gridster/lib/gridsterRenderer.service.d.ts +0 -37
  58. package/gridster/lib/gridsterResizable.service.d.ts +0 -86
  59. package/gridster/lib/gridsterResizeEventType.interface.d.ts +0 -6
  60. package/gridster/lib/gridsterScroll.service.d.ts +0 -7
  61. package/gridster/lib/gridsterSwap.service.d.ts +0 -13
  62. package/gridster/lib/gridsterUtils.service.d.ts +0 -16
  63. package/lib/custom.notifier.options.d.ts +0 -2
  64. package/lib/ra-dashboard-area/ra.dashboard.area.d.ts +0 -132
  65. package/lib/ra-widget-container/lock-tooltip/lock.tooltip.component.d.ts +0 -20
  66. package/lib/ra-widget-container/ra.widget.container.component.d.ts +0 -154
  67. package/lib/ra.base.dashboard.filter.d.ts +0 -19
  68. package/lib/ra.base.dashboard.template.d.ts +0 -24
  69. package/lib/ra.dashbard.event.bus.d.ts +0 -23
  70. package/lib/ra.dashboard.module.d.ts +0 -16
  71. package/lib/ra.dashboard.responsive.service.d.ts +0 -24
  72. package/lib/ra.dashboard.service.d.ts +0 -26
  73. package/lib/ra.event.enum.d.ts +0 -72
  74. package/lib/ra.gridster.config.d.ts +0 -2
  75. package/public-api.d.ts +0 -9
@@ -1,470 +0,0 @@
1
- import { DirTypes } from './gridsterConfig.interface';
2
- import { GridsterPush } from './gridsterPush.service';
3
- import { GridsterPushResize } from './gridsterPushResize.service';
4
- import { cancelScroll, scroll } from './gridsterScroll.service';
5
- import { GridsterUtils } from './gridsterUtils.service';
6
- export class GridsterResizable {
7
- constructor(gridsterItem, gridster, zone) {
8
- this.zone = zone;
9
- /**
10
- * The direction function may reference any of the `GridsterResizable` class methods, that are
11
- * responsible for gridster resize when the `dragmove` event is being handled. E.g. it may reference
12
- * the `handleNorth` method when the north handle is pressed and moved by a mouse.
13
- */
14
- this.directionFunction = null;
15
- this.dragMove = (e) => {
16
- if (this.directionFunction === null) {
17
- throw new Error('The `directionFunction` has not been set before calling `dragMove`.');
18
- }
19
- e.stopPropagation();
20
- e.preventDefault();
21
- GridsterUtils.checkTouchEvent(e);
22
- this.offsetTop = this.gridster.el.scrollTop - this.gridster.el.offsetTop;
23
- this.offsetLeft = this.gridster.el.scrollLeft - this.gridster.el.offsetLeft;
24
- scroll(this.gridster, this.left, this.top, this.width, this.height, e, this.lastMouse, this.directionFunction, true, this.resizeEventScrollType);
25
- const scale = this.gridster.options.scale || 1;
26
- this.directionFunction({
27
- clientX: this.originalClientX + (e.clientX - this.originalClientX) / scale,
28
- clientY: this.originalClientY + (e.clientY - this.originalClientY) / scale
29
- });
30
- this.lastMouse.clientX = e.clientX;
31
- this.lastMouse.clientY = e.clientY;
32
- this.zone.run(() => {
33
- this.gridster.updateGrid();
34
- });
35
- };
36
- this.dragStop = (e) => {
37
- e.stopPropagation();
38
- e.preventDefault();
39
- cancelScroll();
40
- this.mousemove();
41
- this.mouseup();
42
- this.mouseleave();
43
- this.cancelOnBlur();
44
- this.touchmove();
45
- this.touchend();
46
- this.touchcancel();
47
- this.gridster.dragInProgress = false;
48
- this.gridster.updateGrid();
49
- if (this.gridster.options.resizable &&
50
- this.gridster.options.resizable.stop) {
51
- Promise.resolve(this.gridster.options.resizable.stop(this.gridsterItem.item, this.gridsterItem, e)).then(this.makeResize, this.cancelResize);
52
- }
53
- else {
54
- this.makeResize();
55
- }
56
- setTimeout(() => {
57
- this.gridsterItem.renderer.removeClass(this.gridsterItem.el, 'gridster-item-resizing');
58
- if (this.gridster) {
59
- this.gridster.movingItem = null;
60
- this.gridster.previewStyle();
61
- }
62
- });
63
- };
64
- this.cancelResize = () => {
65
- this.gridsterItem.$item.cols = this.gridsterItem.item.cols || 1;
66
- this.gridsterItem.$item.rows = this.gridsterItem.item.rows || 1;
67
- this.gridsterItem.$item.x = this.gridsterItem.item.x || 0;
68
- this.gridsterItem.$item.y = this.gridsterItem.item.y || 0;
69
- this.gridsterItem.setSize();
70
- this.push.restoreItems();
71
- this.pushResize.restoreItems();
72
- this.push.destroy();
73
- this.push = null;
74
- this.pushResize.destroy();
75
- this.pushResize = null;
76
- };
77
- this.makeResize = () => {
78
- this.gridsterItem.setSize();
79
- this.gridsterItem.checkItemChanges(this.gridsterItem.$item, this.gridsterItem.item);
80
- this.push.setPushedItems();
81
- this.pushResize.setPushedItems();
82
- this.push.destroy();
83
- this.push = null;
84
- this.pushResize.destroy();
85
- this.pushResize = null;
86
- };
87
- this.handleNorth = (e) => {
88
- this.top = e.clientY + this.offsetTop - this.diffTop;
89
- this.height = this.bottom - this.top;
90
- if (this.minHeight > this.height) {
91
- this.height = this.minHeight;
92
- this.top = this.bottom - this.minHeight;
93
- }
94
- else if (this.gridster.options.enableBoundaryControl) {
95
- this.top = Math.max(0, this.top);
96
- this.height = this.bottom - this.top;
97
- }
98
- const marginTop = this.gridster.options.pushItems ? this.margin : 0;
99
- this.newPosition = this.gridster.pixelsToPositionY(this.top + marginTop, Math.floor);
100
- if (this.gridsterItem.$item.y !== this.newPosition) {
101
- this.itemBackup[1] = this.gridsterItem.$item.y;
102
- this.itemBackup[3] = this.gridsterItem.$item.rows;
103
- this.gridsterItem.$item.rows +=
104
- this.gridsterItem.$item.y - this.newPosition;
105
- this.gridsterItem.$item.y = this.newPosition;
106
- this.pushResize.pushItems(this.pushResize.fromSouth);
107
- this.push.pushItems(this.push.fromSouth, this.gridster.$options.disablePushOnResize);
108
- if (this.gridster.checkCollision(this.gridsterItem.$item)) {
109
- this.gridsterItem.$item.y = this.itemBackup[1];
110
- this.gridsterItem.$item.rows = this.itemBackup[3];
111
- this.top = this.gridster.positionYToPixels(this.gridsterItem.$item.y);
112
- this.setItemTop(this.gridster.positionYToPixels(this.gridsterItem.$item.y));
113
- this.setItemHeight(this.gridster.positionYToPixels(this.gridsterItem.$item.rows) -
114
- this.margin);
115
- return;
116
- }
117
- else {
118
- this.gridster.previewStyle();
119
- }
120
- this.pushResize.checkPushBack();
121
- this.push.checkPushBack();
122
- }
123
- this.setItemTop(this.top);
124
- this.setItemHeight(this.height);
125
- };
126
- this.handleWest = (e) => {
127
- const clientX = this.gridster.$options.dirType === DirTypes.RTL
128
- ? this.originalClientX + (this.originalClientX - e.clientX)
129
- : e.clientX;
130
- this.left = clientX + this.offsetLeft - this.diffLeft;
131
- this.width = this.right - this.left;
132
- if (this.minWidth > this.width) {
133
- this.width = this.minWidth;
134
- this.left = this.right - this.minWidth;
135
- }
136
- else if (this.gridster.options.enableBoundaryControl) {
137
- this.left = Math.max(0, this.left);
138
- this.width = this.right - this.left;
139
- }
140
- const marginLeft = this.gridster.options.pushItems ? this.margin : 0;
141
- this.newPosition = this.gridster.pixelsToPositionX(this.left + marginLeft, Math.floor);
142
- if (this.gridsterItem.$item.x !== this.newPosition) {
143
- this.itemBackup[0] = this.gridsterItem.$item.x;
144
- this.itemBackup[2] = this.gridsterItem.$item.cols;
145
- this.gridsterItem.$item.cols +=
146
- this.gridsterItem.$item.x - this.newPosition;
147
- this.gridsterItem.$item.x = this.newPosition;
148
- this.pushResize.pushItems(this.pushResize.fromEast);
149
- this.push.pushItems(this.push.fromEast, this.gridster.$options.disablePushOnResize);
150
- if (this.gridster.checkCollision(this.gridsterItem.$item)) {
151
- this.gridsterItem.$item.x = this.itemBackup[0];
152
- this.gridsterItem.$item.cols = this.itemBackup[2];
153
- this.left = this.gridster.positionXToPixels(this.gridsterItem.$item.x);
154
- this.setItemLeft(this.gridster.positionXToPixels(this.gridsterItem.$item.x));
155
- this.setItemWidth(this.gridster.positionXToPixels(this.gridsterItem.$item.cols) -
156
- this.margin);
157
- return;
158
- }
159
- else {
160
- this.gridster.previewStyle();
161
- }
162
- this.pushResize.checkPushBack();
163
- this.push.checkPushBack();
164
- }
165
- this.setItemLeft(this.left);
166
- this.setItemWidth(this.width);
167
- };
168
- this.handleSouth = (e) => {
169
- this.height = e.clientY + this.offsetTop - this.diffBottom - this.top;
170
- if (this.minHeight > this.height) {
171
- this.height = this.minHeight;
172
- }
173
- this.bottom = this.top + this.height;
174
- if (this.gridster.options.enableBoundaryControl) {
175
- const margin = this.outerMarginBottom ?? this.margin;
176
- const box = this.gridster.el.getBoundingClientRect();
177
- this.bottom = Math.min(this.bottom, box.bottom - box.top - 2 * margin);
178
- this.height = this.bottom - this.top;
179
- }
180
- const marginBottom = this.gridster.options.pushItems ? 0 : this.margin;
181
- this.newPosition = this.gridster.pixelsToPositionY(this.bottom + marginBottom, Math.ceil);
182
- if (this.gridsterItem.$item.y + this.gridsterItem.$item.rows !==
183
- this.newPosition) {
184
- this.itemBackup[3] = this.gridsterItem.$item.rows;
185
- this.gridsterItem.$item.rows =
186
- this.newPosition - this.gridsterItem.$item.y;
187
- this.pushResize.pushItems(this.pushResize.fromNorth);
188
- this.push.pushItems(this.push.fromNorth, this.gridster.$options.disablePushOnResize);
189
- if (this.gridster.checkCollision(this.gridsterItem.$item)) {
190
- this.gridsterItem.$item.rows = this.itemBackup[3];
191
- this.setItemHeight(this.gridster.positionYToPixels(this.gridsterItem.$item.rows) -
192
- this.margin);
193
- return;
194
- }
195
- else {
196
- this.gridster.previewStyle();
197
- }
198
- this.pushResize.checkPushBack();
199
- this.push.checkPushBack();
200
- }
201
- this.setItemHeight(this.height);
202
- };
203
- this.handleEast = (e) => {
204
- const clientX = this.gridster.$options.dirType === DirTypes.RTL
205
- ? this.originalClientX + (this.originalClientX - e.clientX)
206
- : e.clientX;
207
- this.width = clientX + this.offsetLeft - this.diffRight - this.left;
208
- if (this.minWidth > this.width) {
209
- this.width = this.minWidth;
210
- }
211
- this.right = this.left + this.width;
212
- if (this.gridster.options.enableBoundaryControl) {
213
- const margin = this.outerMarginRight ?? this.margin;
214
- const box = this.gridster.el.getBoundingClientRect();
215
- this.right = Math.min(this.right, box.right - box.left - 2 * margin);
216
- this.width = this.right - this.left;
217
- }
218
- const marginRight = this.gridster.options.pushItems ? 0 : this.margin;
219
- this.newPosition = this.gridster.pixelsToPositionX(this.right + marginRight, Math.ceil);
220
- if (this.gridsterItem.$item.x + this.gridsterItem.$item.cols !==
221
- this.newPosition) {
222
- this.itemBackup[2] = this.gridsterItem.$item.cols;
223
- this.gridsterItem.$item.cols =
224
- this.newPosition - this.gridsterItem.$item.x;
225
- this.pushResize.pushItems(this.pushResize.fromWest);
226
- this.push.pushItems(this.push.fromWest, this.gridster.$options.disablePushOnResize);
227
- if (this.gridster.checkCollision(this.gridsterItem.$item)) {
228
- this.gridsterItem.$item.cols = this.itemBackup[2];
229
- this.setItemWidth(this.gridster.positionXToPixels(this.gridsterItem.$item.cols) -
230
- this.margin);
231
- return;
232
- }
233
- else {
234
- this.gridster.previewStyle();
235
- }
236
- this.pushResize.checkPushBack();
237
- this.push.checkPushBack();
238
- }
239
- this.setItemWidth(this.width);
240
- };
241
- this.handleNorthWest = (e) => {
242
- this.handleNorth(e);
243
- this.handleWest(e);
244
- };
245
- this.handleNorthEast = (e) => {
246
- this.handleNorth(e);
247
- this.handleEast(e);
248
- };
249
- this.handleSouthWest = (e) => {
250
- this.handleSouth(e);
251
- this.handleWest(e);
252
- };
253
- this.handleSouthEast = (e) => {
254
- this.handleSouth(e);
255
- this.handleEast(e);
256
- };
257
- this.gridsterItem = gridsterItem;
258
- this.gridster = gridster;
259
- this.lastMouse = {
260
- clientX: 0,
261
- clientY: 0
262
- };
263
- this.itemBackup = [0, 0, 0, 0];
264
- this.resizeEventScrollType = {
265
- west: false,
266
- east: false,
267
- north: false,
268
- south: false
269
- };
270
- }
271
- destroy() {
272
- this.gridster?.previewStyle();
273
- this.gridster = this.gridsterItem = null;
274
- }
275
- dragStart(e) {
276
- if (e.which && e.which !== 1) {
277
- return;
278
- }
279
- if (this.gridster.options.resizable &&
280
- this.gridster.options.resizable.start) {
281
- this.gridster.options.resizable.start(this.gridsterItem.item, this.gridsterItem, e);
282
- }
283
- e.stopPropagation();
284
- e.preventDefault();
285
- this.zone.runOutsideAngular(() => {
286
- this.mousemove = this.gridsterItem.renderer.listen('document', 'mousemove', this.dragMove);
287
- this.touchmove = this.gridster.renderer.listen(this.gridster.el, 'touchmove', this.dragMove);
288
- });
289
- this.mouseup = this.gridsterItem.renderer.listen('document', 'mouseup', this.dragStop);
290
- this.mouseleave = this.gridsterItem.renderer.listen('document', 'mouseleave', this.dragStop);
291
- this.cancelOnBlur = this.gridsterItem.renderer.listen('window', 'blur', this.dragStop);
292
- this.touchend = this.gridsterItem.renderer.listen('document', 'touchend', this.dragStop);
293
- this.touchcancel = this.gridsterItem.renderer.listen('document', 'touchcancel', this.dragStop);
294
- this.gridsterItem.renderer.addClass(this.gridsterItem.el, 'gridster-item-resizing');
295
- this.lastMouse.clientX = e.clientX;
296
- this.lastMouse.clientY = e.clientY;
297
- this.left = this.gridsterItem.left;
298
- this.top = this.gridsterItem.top;
299
- this.originalClientX = e.clientX;
300
- this.originalClientY = e.clientY;
301
- this.width = this.gridsterItem.width;
302
- this.height = this.gridsterItem.height;
303
- this.bottom = this.gridsterItem.top + this.gridsterItem.height;
304
- this.right = this.gridsterItem.left + this.gridsterItem.width;
305
- this.margin = this.gridster.$options.margin;
306
- this.outerMarginTop = this.gridster.$options.outerMarginTop;
307
- this.outerMarginRight = this.gridster.$options.outerMarginRight;
308
- this.outerMarginBottom = this.gridster.$options.outerMarginBottom;
309
- this.outerMarginLeft = this.gridster.$options.outerMarginLeft;
310
- this.offsetLeft = this.gridster.el.scrollLeft - this.gridster.el.offsetLeft;
311
- this.offsetTop = this.gridster.el.scrollTop - this.gridster.el.offsetTop;
312
- this.diffLeft = e.clientX + this.offsetLeft - this.left;
313
- this.diffRight = e.clientX + this.offsetLeft - this.right;
314
- this.diffTop = e.clientY + this.offsetTop - this.top;
315
- this.diffBottom = e.clientY + this.offsetTop - this.bottom;
316
- this.minHeight =
317
- this.gridster.positionYToPixels(this.gridsterItem.$item.minItemRows ||
318
- this.gridster.$options.minItemRows) - this.margin;
319
- this.minWidth =
320
- this.gridster.positionXToPixels(this.gridsterItem.$item.minItemCols ||
321
- this.gridster.$options.minItemCols) - this.margin;
322
- this.gridster.movingItem = this.gridsterItem.$item;
323
- this.gridster.previewStyle();
324
- this.push = new GridsterPush(this.gridsterItem);
325
- this.pushResize = new GridsterPushResize(this.gridsterItem);
326
- this.gridster.dragInProgress = true;
327
- this.gridster.updateGrid();
328
- const { classList } = e.target;
329
- if (classList.contains('handle-n')) {
330
- this.resizeEventScrollType.north = true;
331
- this.directionFunction = this.handleNorth;
332
- }
333
- else if (classList.contains('handle-w')) {
334
- if (this.gridster.$options.dirType === DirTypes.RTL) {
335
- this.resizeEventScrollType.east = true;
336
- this.directionFunction = this.handleEast;
337
- }
338
- else {
339
- this.resizeEventScrollType.west = true;
340
- this.directionFunction = this.handleWest;
341
- }
342
- }
343
- else if (classList.contains('handle-s')) {
344
- this.resizeEventScrollType.south = true;
345
- this.directionFunction = this.handleSouth;
346
- }
347
- else if (classList.contains('handle-e')) {
348
- if (this.gridster.$options.dirType === DirTypes.RTL) {
349
- this.resizeEventScrollType.west = true;
350
- this.directionFunction = this.handleWest;
351
- }
352
- else {
353
- this.resizeEventScrollType.east = true;
354
- this.directionFunction = this.handleEast;
355
- }
356
- }
357
- else if (classList.contains('handle-nw')) {
358
- if (this.gridster.$options.dirType === DirTypes.RTL) {
359
- this.resizeEventScrollType.north = true;
360
- this.resizeEventScrollType.east = true;
361
- this.directionFunction = this.handleNorthEast;
362
- }
363
- else {
364
- this.resizeEventScrollType.north = true;
365
- this.resizeEventScrollType.west = true;
366
- this.directionFunction = this.handleNorthWest;
367
- }
368
- }
369
- else if (classList.contains('handle-ne')) {
370
- if (this.gridster.$options.dirType === DirTypes.RTL) {
371
- this.resizeEventScrollType.north = true;
372
- this.resizeEventScrollType.west = true;
373
- this.directionFunction = this.handleNorthWest;
374
- }
375
- else {
376
- this.resizeEventScrollType.north = true;
377
- this.resizeEventScrollType.east = true;
378
- this.directionFunction = this.handleNorthEast;
379
- }
380
- }
381
- else if (classList.contains('handle-sw')) {
382
- if (this.gridster.$options.dirType === DirTypes.RTL) {
383
- this.resizeEventScrollType.south = true;
384
- this.resizeEventScrollType.east = true;
385
- this.directionFunction = this.handleSouthEast;
386
- }
387
- else {
388
- this.resizeEventScrollType.south = true;
389
- this.resizeEventScrollType.west = true;
390
- this.directionFunction = this.handleSouthWest;
391
- }
392
- }
393
- else if (classList.contains('handle-se')) {
394
- if (this.gridster.$options.dirType === DirTypes.RTL) {
395
- this.resizeEventScrollType.south = true;
396
- this.resizeEventScrollType.west = true;
397
- this.directionFunction = this.handleSouthWest;
398
- }
399
- else {
400
- this.resizeEventScrollType.south = true;
401
- this.resizeEventScrollType.east = true;
402
- this.directionFunction = this.handleSouthEast;
403
- }
404
- }
405
- }
406
- toggle() {
407
- this.resizeEnabled = this.gridsterItem.canBeResized();
408
- this.resizableHandles = this.gridsterItem.getResizableHandles();
409
- }
410
- dragStartDelay(e) {
411
- GridsterUtils.checkTouchEvent(e);
412
- if (!this.gridster.$options.resizable.delayStart) {
413
- this.dragStart(e);
414
- return;
415
- }
416
- const timeout = setTimeout(() => {
417
- this.dragStart(e);
418
- cancelDrag();
419
- }, this.gridster.$options.resizable.delayStart);
420
- const { cancelMouse, cancelMouseLeave, cancelOnBlur, cancelTouchMove, cancelTouchEnd, cancelTouchCancel } = this.zone.runOutsideAngular(() => {
421
- // Note: all of these events are being added within the `<root>` zone since they all
422
- // don't do any view updates and don't require Angular running change detection.
423
- // All event listeners call `cancelDrag` once the event is dispatched, the `cancelDrag`
424
- // is responsible only for removing event listeners.
425
- const cancelMouse = this.gridsterItem.renderer.listen('document', 'mouseup', cancelDrag);
426
- const cancelMouseLeave = this.gridsterItem.renderer.listen('document', 'mouseleave', cancelDrag);
427
- const cancelOnBlur = this.gridsterItem.renderer.listen('window', 'blur', cancelDrag);
428
- const cancelTouchMove = this.gridsterItem.renderer.listen('document', 'touchmove', cancelMove);
429
- const cancelTouchEnd = this.gridsterItem.renderer.listen('document', 'touchend', cancelDrag);
430
- const cancelTouchCancel = this.gridsterItem.renderer.listen('document', 'touchcancel', cancelDrag);
431
- return {
432
- cancelMouse,
433
- cancelMouseLeave,
434
- cancelOnBlur,
435
- cancelTouchMove,
436
- cancelTouchEnd,
437
- cancelTouchCancel
438
- };
439
- });
440
- function cancelMove(eventMove) {
441
- GridsterUtils.checkTouchEvent(eventMove);
442
- if (Math.abs(eventMove.clientX - e.clientX) > 9 ||
443
- Math.abs(eventMove.clientY - e.clientY) > 9) {
444
- cancelDrag();
445
- }
446
- }
447
- function cancelDrag() {
448
- clearTimeout(timeout);
449
- cancelOnBlur();
450
- cancelMouse();
451
- cancelMouseLeave();
452
- cancelTouchMove();
453
- cancelTouchEnd();
454
- cancelTouchCancel();
455
- }
456
- }
457
- setItemTop(top) {
458
- this.gridster.gridRenderer.setCellPosition(this.gridsterItem.renderer, this.gridsterItem.el, this.left, top);
459
- }
460
- setItemLeft(left) {
461
- this.gridster.gridRenderer.setCellPosition(this.gridsterItem.renderer, this.gridsterItem.el, left, this.top);
462
- }
463
- setItemHeight(height) {
464
- this.gridsterItem.renderer.setStyle(this.gridsterItem.el, 'height', height + 'px');
465
- }
466
- setItemWidth(width) {
467
- this.gridsterItem.renderer.setStyle(this.gridsterItem.el, 'width', width + 'px');
468
- }
469
- }
470
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZHN0ZXJSZXNpemFibGUuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3JhLWRhc2hib2FyZC1mcmFtZXdvcmsvc3JjL2dyaWRzdGVyL2xpYi9ncmlkc3RlclJlc2l6YWJsZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUV0RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdEQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFHbEUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFeEQsTUFBTSxPQUFPLGlCQUFpQjtJQThENUIsWUFDRSxZQUE0QyxFQUM1QyxRQUFvQyxFQUM1QixJQUFZO1FBQVosU0FBSSxHQUFKLElBQUksQ0FBUTtRQXZEdEI7Ozs7V0FJRztRQUNLLHNCQUFpQixHQUVkLElBQUksQ0FBQztRQTBPaEIsYUFBUSxHQUFHLENBQUMsQ0FBYSxFQUFRLEVBQUU7WUFDakMsSUFBSSxJQUFJLENBQUMsaUJBQWlCLEtBQUssSUFBSSxFQUFFLENBQUM7Z0JBQ3BDLE1BQU0sSUFBSSxLQUFLLENBQ2IscUVBQXFFLENBQ3RFLENBQUM7WUFDSixDQUFDO1lBRUQsQ0FBQyxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQ3BCLENBQUMsQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUNuQixhQUFhLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2pDLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FB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QUMsWUFBWSxDQUFDLFFBQVEsRUFDMUIsSUFBSSxDQUFDLFlBQVksQ0FBQyxFQUFFLEVBQ3BCLElBQUksRUFDSixJQUFJLENBQUMsR0FBRyxDQUNULENBQUM7SUFDSixDQUFDO0lBRUQsYUFBYSxDQUFDLE1BQWM7UUFDMUIsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUNqQyxJQUFJLENBQUMsWUFBWSxDQUFDLEVBQUUsRUFDcEIsUUFBUSxFQUNSLE1BQU0sR0FBRyxJQUFJLENBQ2QsQ0FBQztJQUNKLENBQUM7SUFFRCxZQUFZLENBQUMsS0FBYTtRQUN4QixJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQ2pDLElBQUksQ0FBQyxZQUFZLENBQUMsRUFBRSxFQUNwQixPQUFPLEVBQ1AsS0FBSyxHQUFHLElBQUksQ0FDYixDQUFDO0lBQ0osQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdab25lIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEdyaWRzdGVyQ29tcG9uZW50SW50ZXJmYWNlIH0gZnJvbSAnLi9ncmlkc3Rlci5pbnRlcmZhY2UnO1xyXG5pbXBvcnQgeyBEaXJUeXBlcyB9IGZyb20gJy4vZ3JpZHN0ZXJDb25maWcuaW50ZXJmYWNlJztcclxuaW1wb3J0IHsgR3JpZHN0ZXJJdGVtQ29tcG9uZW50SW50ZXJmYWNlIH0gZnJvbSAnLi9ncmlkc3Rlckl0ZW0uaW50ZXJmYWNlJztcclxuaW1wb3J0IHsgR3JpZHN0ZXJQdXNoIH0gZnJvbSAnLi9ncmlkc3RlclB1c2guc2VydmljZSc7XHJcbmltcG9ydCB7IEdyaWRzdGVyUHVzaFJlc2l6ZSB9IGZyb20gJy4vZ3JpZHN0ZXJQdXNoUmVzaXplLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBHcmlkc3RlclJlc2l6ZUV2ZW50VHlwZSB9IGZyb20gJy4vZ3JpZHN0ZXJSZXNpemVFdmVudFR5cGUuaW50ZXJmYWNlJztcclxuXHJcbmltcG9ydCB7IGNhbmNlbFNjcm9sbCwgc2Nyb2xsIH0gZnJvbSAnLi9ncmlkc3RlclNjcm9sbC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgR3JpZHN0ZXJVdGlscyB9IGZyb20gJy4vZ3JpZHN0ZXJVdGlscy5zZXJ2aWNlJztcclxuXHJcbmV4cG9ydCBjbGFzcyBHcmlkc3RlclJlc2l6YWJsZSB7XHJcbiAgZ3JpZHN0ZXJJdGVtOiBHcmlkc3Rlckl0ZW1Db21wb25lbnRJbnRlcmZhY2U7XHJcbiAgZ3JpZHN0ZXI6IEdyaWRzdGVyQ29tcG9uZW50SW50ZXJmYWNlO1xyXG4gIGxhc3RNb3VzZToge1xyXG4gICAgY2xpZW50WDogbnVtYmVyO1xyXG4gICAgY2xpZW50WTogbnVtYmVyO1xyXG4gIH07XHJcbiAgaXRlbUJhY2t1cDogbnVtYmVyW107XHJcbiAgcmVzaXplRXZlbnRTY3JvbGxUeXBlOiBHcmlkc3RlclJlc2l6ZUV2ZW50VHlwZTtcclxuXHJcbiAgLyoqXHJcbiAgICogVGhlIGRpcmVjdGlvbiBmdW5jdGlvbiBtYXkgcmVmZXJlbmNlIGFueSBvZiB0aGUgYEdyaWRzdGVyUmVzaXphYmxlYCBjbGFzcyBtZXRob2RzLCB0aGF0IGFyZVxyXG4gICAqIHJlc3BvbnNpYmxlIGZvciBncmlkc3RlciByZXNpemUgd2hlbiB0aGUgYGRyYWdtb3ZlYCBldmVudCBpcyBiZWluZyBoYW5kbGVkLiBFLmcuIGl0IG1heSByZWZlcmVuY2VcclxuICAgKiB0aGUgYGhhbmRsZU5vcnRoYCBtZXRob2Qgd2hlbiB0aGUgbm9ydGggaGFuZGxlIGlzIHByZXNzZWQgYW5kIG1vdmVkIGJ5IGEgbW91c2UuXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBkaXJlY3Rpb25GdW5jdGlvbjpcclxuICAgIHwgKChldmVudDogUGljazxNb3VzZUV2ZW50LCAnY2xpZW50WCcgfCAnY2xpZW50WSc+KSA9PiB2b2lkKVxyXG4gICAgfCBudWxsID0gbnVsbDtcclxuXHJcbiAgcmVzaXplRW5hYmxlZCE6IGJvb2xlYW47XHJcbiAgcmVzaXphYmxlSGFuZGxlcyE6IHtcclxuICAgIHM6IGJvb2xlYW47XHJcbiAgICBlOiBib29sZWFuO1xyXG4gICAgbjogYm9vbGVhbjtcclxuICAgIHc6IGJvb2xlYW47XHJcbiAgICBzZTogYm9vbGVhbjtcclxuICAgIG5lOiBib29sZWFuO1xyXG4gICAgc3c6IGJvb2xlYW47XHJcbiAgICBudzogYm9vbGVhbjtcclxuICB9O1xyXG4gIG1vdXNlbW92ZSE6ICgpID0+IHZvaWQ7XHJcbiAgbW91c2V1cCE6ICgpID0+IHZvaWQ7XHJcbiAgbW91c2VsZWF2ZSE6ICgpID0+IHZvaWQ7XHJcbiAgY2FuY2VsT25CbHVyITogKCkgPT4gdm9pZDtcclxuICB0b3VjaG1vdmUhOiAoKSA9PiB2b2lkO1xyXG4gIHRvdWNoZW5kITogKCkgPT4gdm9pZDtcclxuICB0b3VjaGNhbmNlbCE6ICgpID0+IHZvaWQ7XHJcbiAgcHVzaCE6IEdyaWRzdGVyUHVzaDtcclxuICBwdXNoUmVzaXplITogR3JpZHN0ZXJQdXNoUmVzaXplO1xyXG4gIG1pbkhlaWdodCE6IG51bWJlcjtcclxuICBtaW5XaWR0aCE6IG51bWJlcjtcclxuICBvZmZzZXRUb3AhOiBudW1iZXI7XHJcbiAgb2Zmc2V0TGVmdCE6IG51bWJlcjtcclxuICBkaWZmVG9wITogbnVtYmVyO1xyXG4gIGRpZmZMZWZ0ITogbnVtYmVyO1xyXG4gIGRpZmZSaWdodCE6IG51bWJlcjtcclxuICBkaWZmQm90dG9tITogbnVtYmVyO1xyXG4gIG1hcmdpbiE6IG51bWJlcjtcclxuICBvdXRlck1hcmdpblRvcCE6IG51bWJlciB8IG51bGw7XHJcbiAgb3V0ZXJNYXJnaW5SaWdodCE6IG51bWJlciB8IG51bGw7XHJcbiAgb3V0ZXJNYXJnaW5Cb3R0b20hOiBudW1iZXIgfCBudWxsO1xyXG4gIG91dGVyTWFyZ2luTGVmdCE6IG51bWJlciB8IG51bGw7XHJcbiAgb3JpZ2luYWxDbGllbnRYITogbnVtYmVyO1xyXG4gIG9yaWdpbmFsQ2xpZW50WSE6IG51bWJlcjtcclxuICB0b3AhOiBudW1iZXI7XHJcbiAgbGVmdCE6IG51bWJlcjtcclxuICBib3R0b20hOiBudW1iZXI7XHJcbiAgcmlnaHQhOiBudW1iZXI7XHJcbiAgd2lkdGghOiBudW1iZXI7XHJcbiAgaGVpZ2h0ITogbnVtYmVyO1xyXG4gIG5ld1Bvc2l0aW9uITogbnVtYmVyO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIGdyaWRzdGVySXRlbTogR3JpZHN0ZXJJdGVtQ29tcG9uZW50SW50ZXJmYWNlLFxyXG4gICAgZ3JpZHN0ZXI6IEdyaWRzdGVyQ29tcG9uZW50SW50ZXJmYWNlLFxyXG4gICAgcHJpdmF0ZSB6b25lOiBOZ1pvbmVcclxuICApIHtcclxuICAgIHRoaXMuZ3JpZHN0ZXJJdGVtID0gZ3JpZHN0ZXJJdGVtO1xyXG4gICAgdGhpcy5ncmlkc3RlciA9IGdyaWRzdGVyO1xyXG4gICAgdGhpcy5sYXN0TW91c2UgPSB7XHJcbiAgICAgIGNsaWVudFg6IDAsXHJcbiAgICAgIGNsaWVudFk6IDBcclxuICAgIH07XHJcbiAgICB0aGlzLml0ZW1CYWNrdXAgPSBbMCwgMCwgMCwgMF07XHJcbiAgICB0aGlzLnJlc2l6ZUV2ZW50U2Nyb2xsVHlwZSA9IHtcclxuICAgICAgd2VzdDogZmFsc2UsXHJcbiAgICAgIGVhc3Q6IGZhbHNlLFxyXG4gICAgICBub3J0aDogZmFsc2UsXHJcbiAgICAgIHNvdXRoOiBmYWxzZVxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIGRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLmdyaWRzdGVyPy5wcmV2aWV3U3R5bGUoKTtcclxuICAgIHRoaXMuZ3JpZHN0ZXIgPSB0aGlzLmdyaWRzdGVySXRlbSA9IG51bGwhO1xyXG4gIH1cclxuXHJcbiAgZHJhZ1N0YXJ0KGU6IE1vdXNlRXZlbnQpOiB2b2lkIHtcclxuICAgIGlmIChlLndoaWNoICYmIGUud2hpY2ggIT09IDEpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLmdyaWRzdGVyLm9wdGlvbnMucmVzaXphYmxlICYmXHJcbiAgICAgIHRoaXMuZ3JpZHN0ZXIub3B0aW9ucy5yZXNpemFibGUuc3RhcnRcclxuICAgICkge1xyXG4gICAgICB0aGlzLmdyaWRzdGVyLm9wdGlvbnMucmVzaXphYmxlLnN0YXJ0KFxyXG4gICAgICAgIHRoaXMuZ3JpZHN0ZXJJdGVtLml0ZW0sXHJcbiAgICAgICAgdGhpcy5ncmlkc3Rlckl0ZW0sXHJcbiAgICAgICAgZVxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuXHJcbiAgICB0aGlzLnpvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xyXG4gICAgICB0aGlzLm1vdXNlbW92ZSA9IHRoaXMuZ3JpZHN0ZXJJdGVtLnJlbmRlcmVyLmxpc3RlbihcclxuICAgICAgICAnZG9jdW1lbnQnLFxyXG4gICAgICAgICdtb3VzZW1vdmUnLFxyXG4gICAgICAgIHRoaXMuZHJhZ01vdmVcclxuICAgICAgKTtcclxuICAgICAgdGhpcy50b3VjaG1vdmUgPSB0aGlzLmdyaWRzdGVyLnJlbmRlcmVyLmxpc3RlbihcclxuICAgICAgICB0aGlzLmdyaWRzdGVyLmVsLFxyXG4gICAgICAgICd0b3VjaG1vdmUnLFxyXG4gICAgICAgIHRoaXMuZHJhZ01vdmVcclxuICAgICAgKTtcclxuICAgIH0pO1xyXG4gICAgdGhpcy5tb3VzZXVwID0gdGhpcy5ncmlkc3Rlckl0ZW0ucmVuZGVyZXIubGlzdGVuKFxyXG4gICAgICAnZG9jdW1lbnQnLFxyXG4gICAgICAnbW91c2V1cCcsXHJcbiAgICAgIHRoaXMuZHJhZ1N0b3BcclxuICAgICk7XHJcbiAgICB0aGlzLm1vdXNlbGVhdmUgPSB0aGlzLmdyaWRzdGVySXRlbS5yZW5kZXJlci5saXN0ZW4oXHJcbiAgICAgICdkb2N1bWVudCcsXHJcbiAgICAgICdtb3VzZWxlYXZlJyxcclxuICAgICAgdGhpcy5kcmFnU3RvcFxyXG4gICAgKTtcclxuICAgIHRoaXMuY2FuY2VsT25CbHVyID0gdGhpcy5ncmlkc3Rlckl0ZW0ucmVuZGVyZXIubGlzdGVuKFxyXG4gICAgICAnd2luZG93JyxcclxuICAgICAgJ2JsdXInLFxyXG4gICAgICB0aGlzLmRyYWdTdG9wXHJcbiAgICApO1xyXG4gICAgdGhpcy50b3VjaGVuZCA9IHRoaXMuZ3JpZHN0ZXJJdGVtLnJlbmRlcmVyLmxpc3RlbihcclxuICAgICAgJ2RvY3VtZW50JyxcclxuICAgICAgJ3RvdWNoZW5kJyxcclxuICAgICAgdGhpcy5kcmFnU3RvcFxyXG4gICAgKTtcclxuICAgIHRoaXMudG91Y2hjYW5jZWwgPSB0aGlzLmdyaWRzdGVySXRlbS5yZW5kZXJlci5saXN0ZW4oXHJcbiAgICAgICdkb2N1bWVudCcsXHJcbiAgICAgICd0b3VjaGNhbmNlbCcsXHJcbiAgICAgIHRoaXMuZHJhZ1N0b3BcclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5ncmlkc3Rlckl0ZW0ucmVuZGVyZXIuYWRkQ2xhc3MoXHJcbiAgICAgIHRoaXMuZ3JpZHN0ZXJJdGVtLmVsLFxyXG4gICAgICAnZ3JpZHN0ZXItaXRlbS1yZXNpemluZydcclxuICAgICk7XHJcbiAgICB0aGlzLmxhc3RNb3VzZS5jbGllbnRYID0gZS5jbGllbnRYO1xyXG4gICAgdGhpcy5sYXN0TW91c2UuY2xpZW50WSA9IGUuY2xpZW50WTtcclxuICAgIHRoaXMubGVmdCA9IHRoaXMuZ3JpZHN0ZXJJdGVtLmxlZnQ7XHJcbiAgICB0aGlzLnRvcCA9IHRoaXMuZ3JpZHN0ZXJJdGVtLnRvcDtcclxuICAgIHRoaXMub3JpZ2luYWxDbGllbnRYID0gZS5jbGllbnRYO1xyXG4gICAgdGhpcy5vcmlnaW5hbENsaWVudFkgPSBlLmNsaWVudFk7XHJcbiAgICB0aGlzLndpZHRoID0gdGhpcy5ncmlkc3Rlckl0ZW0ud2lkdGg7XHJcbiAgICB0aGlzLmhlaWdodCA9IHRoaXMuZ3JpZHN0ZXJJdGVtLmhlaWdodDtcclxuICAgIHRoaXMuYm90dG9tID0gdGhpcy5ncmlkc3Rlckl0ZW0udG9wICsgdGhpcy5ncmlkc3Rlckl0ZW0uaGVpZ2h0O1xyXG4gICAgdGhpcy5yaWdodCA9IHRoaXMuZ3JpZHN0ZXJJdGVtLmxlZnQgKyB0aGlzLmdyaWRzdGVySXRlbS53aWR0aDtcclxuICAgIHRoaXMubWFyZ2luID0gdGhpcy5ncmlkc3Rlci4kb3B0aW9ucy5tYXJnaW47XHJcbiAgICB0aGlzLm91dGVyTWFyZ2luVG9wID0gdGhpcy5ncmlkc3Rlci4kb3B0aW9ucy5vdXRlck1hcmdpblRvcDtcclxuICAgIHRoaXMub3V0ZXJNYXJnaW5SaWdodCA9IHRoaXMuZ3JpZHN0ZXIuJG9wdGlvbnMub3V0ZXJNYXJnaW5SaWdodDtcclxuICAgIHRoaXMub3V0ZXJNYXJnaW5Cb3R0b20gPSB0aGlzLmdyaWRzdGVyLiRvcHRpb25zLm91dGVyTWFyZ2luQm90dG9tO1xyXG4gICAgdGhpcy5vdXRlck1hcmdpbkxlZnQgPSB0aGlzLmdyaWRzdGVyLiRvcHRpb25zLm91dGVyTWFyZ2luTGVmdDtcclxuICAgIHRoaXMub2Zmc2V0TGVmdCA9IHRoaXMuZ3JpZHN0ZXIuZWwuc2Nyb2xsTGVmdCAtIHRoaXMuZ3JpZHN0ZXIuZWwub2Zmc2V0TGVmdDtcclxuICAgIHRoaXMub2Zmc2V0VG9wID0gdGhpcy5ncmlkc3Rlci5lbC5zY3JvbGxUb3AgLSB0aGlzLmdyaWRzdGVyLmVsLm9mZnNldFRvcDtcclxuICAgIHRoaXMuZGlmZkxlZnQgPSBlLmNsaWVudFggKyB0aGlzLm9mZnNldExlZnQgLSB0aGlzLmxlZnQ7XHJcbiAgICB0aGlzLmRpZmZSaWdodCA9IGUuY2xpZW50WCArIHRoaXMub2Zmc2V0TGVmdCAtIHRoaXMucmlnaHQ7XHJcbiAgICB0aGlzLmRpZmZUb3AgPSBlLmNsaWVudFkgKyB0aGlzLm9mZnNldFRvcCAtIHRoaXMudG9wO1xyXG4gICAgdGhpcy5kaWZmQm90dG9tID0gZS5jbGllbnRZICsgdGhpcy5vZmZzZXRUb3AgLSB0aGlzLmJvdHRvbTtcclxuICAgIHRoaXMubWluSGVpZ2h0ID1cclxuICAgICAgdGhpcy5ncmlkc3Rlci5wb3NpdGlvbllUb1BpeGVscyhcclxuICAgICAgICB0aGlzLmdyaWRzdGVySXRlbS4kaXRlbS5taW5JdGVtUm93cyB8fFxyXG4gICAgICAgICAgdGhpcy5ncmlkc3Rlci4kb3B0aW9ucy5taW5JdGVtUm93c1xyXG4gICAgICApIC0gdGhpcy5tYXJnaW47XHJcbiAgICB0aGlzLm1pbldpZHRoID1cclxuICAgICAgdGhpcy5ncmlkc3Rlci5wb3NpdGlvblhUb1BpeGVscyhcclxuICAgICAgICB0aGlzLmdyaWRzdGVySXRlbS4kaXRlbS5taW5JdGVtQ29scyB8fFxyXG4gICAgICAgICAgdGhpcy5ncmlkc3Rlci4kb3B0aW9ucy5taW5JdGVtQ29sc1xyXG4gICAgICApIC0gdGhpcy5tYXJnaW47XHJcbiAgICB0aGlzLmdyaWRzdGVyLm1vdmluZ0l0ZW0gPSB0aGlzLmdyaWRzdGVySXRlbS4kaXRlbTtcclxuICAgIHRoaXMuZ3JpZHN0ZXIucHJldmlld1N0eWxlKCk7XHJcbiAgICB0aGlzLnB1c2ggPSBuZXcgR3JpZHN0ZXJQdXNoKHRoaXMuZ3JpZHN0ZXJJdGVtKTtcclxuICAgIHRoaXMucHVzaFJlc2l6ZSA9IG5ldyBHcmlkc3RlclB1c2hSZXNpemUodGhpcy5ncmlkc3Rlckl0ZW0pO1xyXG4gICAgdGhpcy5ncmlkc3Rlci5kcmFnSW5Qcm9ncmVzcyA9IHRydWU7XHJcbiAgICB0aGlzLmdyaWRzdGVyLnVwZGF0ZUdyaWQoKTtcclxuXHJcbiAgICBjb25zdCB7IGNsYXNzTGlzdCB9ID0gZS50YXJnZXQgYXMgSFRNTEVsZW1lbnQ7XHJcblxyXG4gICAgaWYgKGNsYXNzTGlzdC5jb250YWlucygnaGFuZGxlLW4nKSkge1xyXG4gICAgICB0aGlzLnJlc2l6ZUV2ZW50U2Nyb2xsVHlwZS5ub3J0aCA9IHRydWU7XHJcbiAgICAgIHRoaXMuZGlyZWN0aW9uRnVuY3Rpb24gPSA8YW55PiB0aGlzLmhhbmRsZU5vcnRoO1xyXG4gICAgfSBlbHNlIGlmIChjbGFzc0xpc3QuY29udGFpbnMoJ2hhbmRsZS13JykpIHtcclxuICAgICAgaWYgKHRoaXMuZ3JpZHN0ZXIuJG9wdGlvbnMuZGlyVHlwZSA9PT0gRGlyVHlwZXMuUlRMKSB7XHJcbiAgICAgICAgdGhpcy5yZXNpemVFdmVudFNjcm9sbFR5cGUuZWFzdCA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5kaXJlY3Rpb25GdW5jdGlvbiA9PGFueT4gdGhpcy5oYW5kbGVFYXN0O1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMucmVzaXplRXZlbnRTY3JvbGxUeXBlLndlc3QgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuZGlyZWN0aW9uRnVuY3Rpb24gPTxhbnk+IHRoaXMuaGFuZGxlV2VzdDtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIGlmIChjbGFzc0xpc3QuY29udGFpbnMoJ2hhbmRsZS1zJykpIHtcclxuICAgICAgdGhpcy5yZXNpemVFdmVudFNjcm9sbFR5cGUuc291dGggPSB0cnVlO1xyXG4gICAgICB0aGlzLmRpcmVjdGlvbkZ1bmN0aW9uID08YW55PiB0aGlzLmhhbmRsZVNvdXRoO1xyXG4gICAgfSBlbHNlIGlmIChjbGFzc0xpc3QuY29udGFpbnMoJ2hhbmRsZS1lJykpIHtcclxuICAgICAgaWYgKHRoaXMuZ3JpZHN0ZXIuJG9wdGlvbnMuZGlyVHlwZSA9PT0gRGlyVHlwZXMuUlRMKSB7XHJcbiAgICAgICAgdGhpcy5yZXNpemVFdmVudFNjcm9sbFR5cGUud2VzdCA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5kaXJlY3Rpb25GdW5jdGlvbiA9PGFueT4gdGhpcy5oYW5kbGVXZXN0O1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMucmVzaXplRXZlbnRTY3JvbGxUeXBlLmVhc3QgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuZGlyZWN0aW9uRnVuY3Rpb24gPTxhbnk+IHRoaXMuaGFuZGxlRWFzdDtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIGlmIChjbGFzc0xpc3QuY29udGFpbnMoJ2hhbmRsZS1udycpKSB7XHJcbiAgICAgIGlmICh0aGlzLmdyaWRzdGVyLiRvcHRpb25zLmRpclR5cGUgPT09IERpclR5cGVzLlJUTCkge1xyXG4gICAgICAgIHRoaXMucmVzaXplRXZlbnRTY3JvbGxUeXBlLm5vcnRoID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnJlc2l6ZUV2ZW50U2Nyb2xsVHlwZS5lYXN0ID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmRpcmVjdGlvbkZ1bmN0aW9uID08YW55PiB0aGlzLmhhbmRsZU5vcnRoRWFzdDtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnJlc2l6ZUV2ZW50U2Nyb2xsVHlwZS5ub3J0aCA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5yZXNpemVFdmVudFNjcm9sbFR5cGUud2VzdCA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5kaXJlY3Rpb25GdW5jdGlvbiA9PGFueT4gdGhpcy5oYW5kbGVOb3J0aFdlc3Q7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSBpZiAoY2xhc3NMaXN0LmNvbnRhaW5zKCdoYW5kbGUtbmUnKSkge1xyXG4gICAgICBpZiAodGhpcy5ncmlkc3Rlci4kb3B0aW9ucy5kaXJUeXBlID09PSBEaXJUeXBlcy5SVEwpIHtcclxuICAgICAgICB0aGlzLnJlc2l6ZUV2ZW50U2Nyb2xsVHlwZS5ub3J0aCA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5yZXNpemVFdmVudFNjcm9sbFR5cGUud2VzdCA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5kaXJlY3Rpb25GdW5jdGlvbiA9PGFueT4gdGhpcy5oYW5kbGVOb3J0aFdlc3Q7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5yZXNpemVFdmVudFNjcm9sbFR5cGUubm9ydGggPSB0cnVlO1xyXG4gICAgICAgIHRoaXMucmVzaXplRXZlbnRTY3JvbGxUeXBlLmVhc3QgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuZGlyZWN0aW9uRnVuY3Rpb24gPTxhbnk+IHRoaXMuaGFuZGxlTm9ydGhFYXN0O1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2UgaWYgKGNsYXNzTGlzdC5jb250YWlucygnaGFuZGxlLXN3JykpIHtcclxuICAgICAgaWYgKHRoaXMuZ3JpZHN0ZXIuJG9wdGlvbnMuZGlyVHlwZSA9PT0gRGlyVHlwZXMuUlRMKSB7XHJcbiAgICAgICAgdGhpcy5yZXNpemVFdmVudFNjcm9sbFR5cGUuc291dGggPSB0cnVlO1xyXG4gICAgICAgIHRoaXMucmVzaXplRXZlbnRTY3JvbGxUeXBlLmVhc3QgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuZGlyZWN0aW9uRnVuY3Rpb24gPTxhbnk+IHRoaXMuaGFuZGxlU291dGhFYXN0O1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMucmVzaXplRXZlbnRTY3JvbGxUeXBlLnNvdXRoID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnJlc2l6ZUV2ZW50U2Nyb2xsVHlwZS53ZXN0ID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmRpcmVjdGlvbkZ1bmN0aW9uID08YW55PiB0aGlzLmhhbmRsZVNvdXRoV2VzdDtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIGlmIChjbGFzc0xpc3QuY29udGFpbnMoJ2hhbmRsZS1zZScpKSB7XHJcbiAgICAgIGlmICh0aGlzLmdyaWRzdGVyLiRvcHRpb25zLmRpclR5cGUgPT09IERpclR5cGVzLlJUTCkge1xyXG4gICAgICAgIHRoaXMucmVzaXplRXZlbnRTY3JvbGxUeXBlLnNvdXRoID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnJlc2l6ZUV2ZW50U2Nyb2xsVHlwZS53ZXN0ID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmRpcmVjdGlvbkZ1bmN0aW9uID08YW55PiB0aGlzLmhhbmRsZVNvdXRoV2VzdDtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnJlc2l6ZUV2ZW50U2Nyb2xsVHlwZS5zb3V0aCA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5yZXNpemVFdmVudFNjcm9sbFR5cGUuZWFzdCA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5kaXJlY3Rpb25GdW5jdGlvbiA9PGFueT4gdGhpcy5oYW5kbGVTb3V0aEVhc3Q7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGRyYWdNb3ZlID0gKGU6IE1vdXNlRXZlbnQpOiB2b2lkID0+IHtcclxuICAgIGlmICh0aGlzLmRpcmVjdGlvbkZ1bmN0aW9uID09PSBudWxsKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICAnVGhlIGBkaXJlY3Rpb25GdW5jdGlvbmAgaGFzIG5vdCBiZWVuIHNldCBiZWZvcmUgY2FsbGluZyBgZHJhZ01vdmVgLidcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgR3JpZHN0ZXJVdGlscy5jaGVja1RvdWNoRXZlbnQoZSk7XHJcbiAgICB0aGlzLm9mZnNldFRvcCA9IHRoaXMuZ3JpZHN0ZXIuZWwuc2Nyb2xsVG9wIC0gdGhpcy5ncmlkc3Rlci5lbC5vZmZzZXRUb3A7XHJcbiAgICB0aGlzLm9mZnNldExlZnQgPSB0aGlzLmdyaWRzdGVyLmVsLnNjcm9sbExlZnQgLSB0aGlzLmdyaWRzdGVyLmVsLm9mZnNldExlZnQ7XHJcbiAgICBzY3JvbGwoXHJcbiAgICAgIHRoaXMuZ3JpZHN0ZXIsXHJcbiAgICAgIHRoaXMubGVmdCxcclxuICAgICAgdGhpcy50b3AsXHJcbiAgICAgIHRoaXMud2lkdGgsXHJcbiAgICAgIHRoaXMuaGVpZ2h0LFxyXG4gICAgICBlLFxyXG4gICAgICB0aGlzLmxhc3RNb3VzZSxcclxuICAgICAgdGhpcy5kaXJlY3Rpb25GdW5jdGlvbixcclxuICAgICAgdHJ1ZSxcclxuICAgICAgdGhpcy5yZXNpemVFdmVudFNjcm9sbFR5cGVcclxuICAgICk7XHJcblxyXG4gICAgY29uc3Qgc2NhbGUgPSB0aGlzLmdyaWRzdGVyLm9wdGlvbnMuc2NhbGUgfHwgMTtcclxuICAgIHRoaXMuZGlyZWN0aW9uRnVuY3Rpb24oe1xyXG4gICAgICBjbGllbnRYOlxyXG4gICAgICAgIHRoaXMub3JpZ2luYWxDbGllbnRYICsgKGUuY2xpZW50WCAtIHRoaXMub3JpZ2luYWxDbGllbnRYKSAvIHNjYWxlLFxyXG4gICAgICBjbGllbnRZOiB0aGlzLm9yaWdpbmFsQ2xpZW50WSArIChlLmNsaWVudFkgLSB0aGlzLm9yaWdpbmFsQ2xpZW50WSkgLyBzY2FsZVxyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5sYXN0TW91c2UuY2xpZW50WCA9IGUuY2xpZW50WDtcclxuICAgIHRoaXMubGFzdE1vdXNlLmNsaWVudFkgPSBlLmNsaWVudFk7XHJcbiAgICB0aGlzLnpvbmUucnVuKCgpID0+IHtcclxuICAgICAgdGhpcy5ncmlkc3Rlci51cGRhdGVHcmlkKCk7XHJcbiAgICB9KTtcclxuICB9O1xyXG5cclxuICBkcmFnU3RvcCA9IChlOiBNb3VzZUV2ZW50KTogdm9pZCA9PiB7XHJcbiAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgY2FuY2VsU2Nyb2xsKCk7XHJcbiAgICB0aGlzLm1vdXNlbW92ZSgpO1xyXG4gICAgdGhpcy5tb3VzZXVwKCk7XHJcbiAgICB0aGlzLm1vdXNlbGVhdmUoKTtcclxuICAgIHRoaXMuY2FuY2VsT25CbHVyKCk7XHJcbiAgICB0aGlzLnRvdWNobW92ZSgpO1xyXG4gICAgdGhpcy50b3VjaGVuZCgpO1xyXG4gICAgdGhpcy50b3VjaGNhbmNlbCgpO1xyXG4gICAgdGhpcy5ncmlkc3Rlci5kcmFnSW5Qcm9ncmVzcyA9IGZhbHNlO1xyXG4gICAgdGhpcy5ncmlkc3Rlci51cGRhdGVHcmlkKCk7XHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMuZ3JpZHN0ZXIub3B0aW9ucy5yZXNpemFibGUgJiZcclxuICAgICAgdGhpcy5ncmlkc3Rlci5vcHRpb25zLnJlc2l6YWJsZS5zdG9wXHJcbiAgICApIHtcclxuICAgICAgUHJvbWlzZS5yZXNvbHZlKFxyXG4gICAgICAgIHRoaXMuZ3JpZHN0ZXIub3B0aW9ucy5yZXNpemFibGUuc3RvcChcclxuICAgICAgICAgIHRoaXMuZ3JpZHN0ZXJJdGVtLml0ZW0sXHJcbiAgICAgICAgICB0aGlzLmdyaWRzdGVySXRlbSxcclxuICAgICAgICAgIGVcclxuICAgICAgICApXHJcbiAgICAgICkudGhlbih0aGlzLm1ha2VSZXNpemUsIHRoaXMuY2FuY2VsUmVzaXplKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMubWFrZVJlc2l6ZSgpO1xyXG4gICAgfVxyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHRoaXMuZ3JpZHN0ZXJJdGVtLnJlbmRlcmVyLnJlbW92ZUNsYXNzKFxyXG4gICAgICAgIHRoaXMuZ3JpZHN0ZXJJdGVtLmVsLFxyXG4gICAgICAgICdncmlkc3Rlci1pdGVtLXJlc2l6aW5nJ1xyXG4gICAgICApO1xyXG4gICAgICBpZiAodGhpcy5ncmlkc3Rlcikge1xyXG4gICAgICAgIHRoaXMuZ3JpZHN0ZXIubW92aW5nSXRlbSA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5ncmlkc3Rlci5wcmV2aWV3U3R5bGUoKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfTtcclxuXHJcbiAgY2FuY2VsUmVzaXplID0gKCk6IHZvaWQgPT4ge1xyXG4gICAgdGhpcy5ncmlkc3Rlckl0ZW0uJGl0ZW0uY29scyA9IHRoaXMuZ3JpZHN0ZXJJdGVtLml0ZW0uY29scyB8fCAxO1xyXG4gICAgdGhpcy5ncmlkc3Rlckl0ZW0uJGl0ZW0ucm93cyA9IHRoaXMuZ3JpZHN0ZXJJdGVtLml0ZW0ucm93cyB8fCAxO1xyXG4gICAgdGhpcy5ncmlkc3Rlckl0ZW0uJGl0ZW0ueCA9IHRoaXMuZ3JpZHN0ZXJJdGVtLml0ZW0ueCB8fCAwO1xyXG4gICAgdGhpcy5ncmlkc3Rlckl0ZW0uJGl0ZW0ueSA9IHRoaXMuZ3JpZHN0ZXJJdGVtLml0ZW0ueSB8fCAwO1xyXG4gICAgdGhpcy5ncmlkc3Rlckl0ZW0uc2V0U2l6ZSgpO1xyXG4gICAgdGhpcy5wdXNoLnJlc3RvcmVJdGVtcygpO1xyXG4gICAgdGhpcy5wdXNoUmVzaXplLnJlc3RvcmVJdGVtcygpO1xyXG4gICAgdGhpcy5wdXNoLmRlc3Ryb3koKTtcclxuICAgIHRoaXMucHVzaCA9IG51bGwhO1xyXG4gICAgdGhpcy5wdXNoUmVzaXplLmRlc3Ryb3koKTtcclxuICAgIHRoaXMucHVzaFJlc2l6ZSA9IG51bGwhO1xyXG4gIH07XHJcblxyXG4gIG1ha2VSZXNpemUgPSAoKTogdm9pZCA9PiB7XHJcbiAgICB0aGlzLmdyaWRzdGVySXRlbS5zZXRTaXplKCk7XHJcbiAgICB0aGlzLmdyaWRzdGVySXRlbS5jaGVja0l0ZW1DaGFuZ2VzKFxyXG4gICAgICB0aGlzLmdyaWRzdGVySXRlbS4kaXRlbSxcclxuICAgICAgdGhpcy5ncmlkc3Rlckl0ZW0uaXRlbVxyXG4gICAgKTtcclxuICAgIHRoaXMucHVzaC5zZXRQdXNoZWRJdGVtcygpO1xyXG4gICAgdGhpcy5wdXNoUmVzaXplLnNldFB1c2hlZEl0ZW1zKCk7XHJcbiAgICB0aGlzLnB1c2guZGVzdHJveSgpO1xyXG4gICAgdGhpcy5wdXNoID0gbnVsbCE7XHJcbiAgICB0aGlzLnB1c2hSZXNpemUuZGVzdHJveSgpO1xyXG4gICAgdGhpcy5wdXNoUmVzaXplID0gbnVsbCE7XHJcbiAgfTtcclxuXHJcbiAgcHJpdmF0ZSBoYW5kbGVOb3J0aCA9IChlOiBNb3VzZUV2ZW50KTogdm9pZCA9PiB7XHJcbiAgICB0aGlzLnRvcCA9IGUuY2xpZW50WSArIHRoaXMub2Zmc2V0VG9wIC0gdGhpcy5kaWZmVG9wO1xyXG4gICAgdGhpcy5oZWlnaHQgPSB0aGlzLmJvdHRvbSAtIHRoaXMudG9wO1xyXG4gICAgaWYgKHRoaXMubWluSGVpZ2h0ID4gdGhpcy5oZWlnaHQpIHtcclxuICAgICAgdGhpcy5oZWlnaHQgPSB0aGlzLm1pbkhlaWdodDtcclxuICAgICAgdGhpcy50b3AgPSB0aGlzLmJvdHRvbSAtIHRoaXMubWluSGVpZ2h0O1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLmdyaWRzdGVyLm9wdGlvbnMuZW5hYmxlQm91bmRhcnlDb250cm9sKSB7XHJcbiAgICAgIHRoaXMudG9wID0gTWF0aC5tYXgoMCwgdGhpcy50b3ApO1xyXG4gICAgICB0aGlzLmhlaWdodCA9IHRoaXMuYm90dG9tIC0gdGhpcy50b3A7XHJcbiAgICB9XHJcbiAgICBjb25zdCBtYXJnaW5Ub3AgPSB0aGlzLmdyaWRzdGVyLm9wdGlvbnMucHVzaEl0ZW1zID8gdGhpcy5tYXJnaW4gOiAwO1xyXG4gICAgdGhpcy5uZXdQb3NpdGlvbiA9IHRoaXMuZ3JpZHN0ZXIucGl4ZWxzVG9Qb3NpdGlvblkoXHJcbiAgICAgIHRoaXMudG9wICsgbWFyZ2luVG9wLFxyXG4gICAgICBNYXRoLmZsb29yXHJcbiAgICApO1xyXG4gICAgaWYgKHRoaXMuZ3JpZHN0ZXJJdGVtLiRpdGVtLnkgIT09IHRoaXMubmV3UG9zaXRpb24pIHtcclxuICAgICAgdGhpcy5pdGVtQmFja3VwWzFdID0gdGhpcy5ncmlkc3Rlckl0ZW0uJGl0ZW0ueTtcclxuICAgICAgdGhpcy5pdGVtQmFja3VwWzNdID0gdGhpcy5ncmlkc3Rlckl0ZW0uJGl0ZW0ucm93cztcclxuICAgICAgdGhpcy5ncmlkc3Rlckl0ZW0uJGl0ZW0ucm93cyArPVxyXG4gICAgICAgIHRoaXMuZ3JpZHN0ZXJJdGVtLiRpdGVtLnkgLSB0aGlzLm5ld1Bvc2l0aW9uO1xyXG4gICAgICB0aGlzLmdyaWRzdGVySXRlbS4kaXRlbS55ID0gdGhpcy5uZXdQb3NpdGlvbjtcclxuICAgICAgdGhpcy5wdXNoUmVzaXplLnB1c2hJdGVtcyh0aGlzLnB1c2hSZXNpemUuZnJvbVNvdXRoKTtcclxuICAgICAgdGhpcy5wdXNoLnB1c2hJdGVtcyhcclxuICAgICAgICB0aGlzLnB1c2guZnJvbVNvdXRoLFxyXG4gICAgICAgIHRoaXMuZ3JpZHN0ZXIuJG9wdGlvbnMuZGlzYWJsZVB1c2hPblJlc2l6ZVxyXG4gICAgICApO1xyXG4gICAgICBpZiAodGhpcy5ncmlkc3Rlci5jaGVja0NvbGxpc2lvbih0aGlzLmdyaWRzdGVySXRlbS4kaXRlbSkpIHtcclxuICAgICAgICB0aGlzLmdyaWRzdGVySXRlbS4kaXRlbS55ID0gdGhpcy5pdGVtQmFja3VwWzFdO1xyXG4gICAgICAgIHRoaXMuZ3JpZHN0ZXJJdGVtLiRpdGVtLnJvd3MgPSB0aGlzLml0ZW1CYWNrdXBbM107XHJcbiAgICAgICAgdGhpcy50b3AgPSB0aGlzLmdyaWRzdGVyLnBvc2l0aW9uWVRvUGl4ZWxzKHRoaXMuZ3JpZHN0ZXJJdGVtLiRpdGVtLnkpO1xyXG4gICAgICAgIHRoaXMuc2V0SXRlbVRvcChcclxuICAgICAgICAgIHRoaXMuZ3JpZHN0ZXIucG9zaXRpb25ZVG9QaXhlbHModGhpcy5ncmlkc3Rlckl0ZW0uJGl0ZW0ueSlcclxuICAgICAgICApO1xyXG4gICAgICAgIHRoaXMuc2V0SXRlbUhlaWdodChcclxuICAgICAgICAgIHRoaXMuZ3JpZHN0ZXIucG9zaXRpb25ZVG9QaXhlbHModGhpcy5ncmlkc3Rlckl0ZW0uJGl0ZW0ucm93cykgLVxyXG4gICAgICAgICAgICB0aGlzLm1hcmdpblxyXG4gICAgICAgICk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuZ3JpZHN0ZXIucHJldmlld1N0eWxlKCk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5wdXNoUmVzaXplLmNoZWNrUHVzaEJhY2soKTtcclxuICAgICAgdGhpcy5wdXNoLmNoZWNrUHVzaEJhY2soKTtcclxuICAgIH1cclxuICAgIHRoaXMuc2V0SXRlbVRvcCh0aGlzLnRvcCk7XHJcbiAgICB0aGlzLnNldEl0ZW1IZWlnaHQodGhpcy5oZWlnaHQpO1xyXG4gIH07XHJcblxyXG4gIHByaXZhdGUgaGFuZGxlV2VzdCA9IChlOiBNb3VzZUV2ZW50KTogdm9pZCA9PiB7XHJcbiAgICBjb25zdCBjbGllbnRYID1cclxuICAgICAgdGhpcy5ncmlkc3Rlci4kb3B0aW9ucy5kaXJUeXBlID09PSBEaXJUeXBlcy5SVExcclxuICAgICAgICA/IHRoaXMub3JpZ2luYWxDbGllbnRYICsgKHRoaXMub3JpZ2luYWxDbGllbnRYIC0gZS5jbGllbnRYKVxyXG4gICAgICAgIDogZS5jbGllbnRYO1xyXG4gICAgdGhpcy5sZWZ0ID0gY2xpZW50WCArIHRoaXMub2Zmc2V0TGVmdCAtIHRoaXMuZGlmZkxlZnQ7XHJcblxyXG4gICAgdGhpcy53aWR0aCA9IHRoaXMucmlnaHQgLSB0aGlzLmxlZnQ7XHJcbiAgICBpZiAodGhpcy5taW5XaWR0aCA+IHRoaXMud2lkdGgpIHtcclxuICAgICAgdGhpcy53aWR0aCA9IHRoaXMubWluV2lkdGg7XHJcbiAgICAgIHRoaXMubGVmdCA9IHRoaXMucmlnaHQgLSB0aGlzLm1pbldpZHRoO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLmdyaWRzdGVyLm9wdGlvbnMuZW5hYmxlQm91bmRhcnlDb250cm9sKSB7XHJcbiAgICAgIHRoaXMubGVmdCA9IE1hdGgubWF4KDAsIHRoaXMubGVmdCk7XHJcbiAgICAgIHRoaXMud2lkdGggPSB0aGlzLnJpZ2h0IC0gdGhpcy5sZWZ0O1xyXG4gICAgfVxyXG4gICAgY29uc3QgbWFyZ2luTGVmdCA9IHRoaXMuZ3JpZHN0ZXIub3B0aW9ucy5wdXNoSXRlbXMgPyB0aGlzLm1hcmdpbiA6IDA7XHJcbiAgICB0aGlzLm5ld1Bvc2l0aW9uID0gdGhpcy5ncmlkc3Rlci5waXhlbHNUb1Bvc2l0aW9uWChcclxuICAgICAgdGhpcy5sZWZ0ICsgbWFyZ2luTGVmdCxcclxuICAgICAgTWF0aC5mbG9vclxyXG4gICAgKTtcclxuICAgIGlmICh0aGlzLmdyaWRzdGVySXRlbS4kaXRlbS54ICE9PSB0aGlzLm5ld1Bvc2l0aW9uKSB7XHJcbiAgICAgIHRoaXMuaXRlbUJhY2t1cFswXSA9IHRoaXMuZ3JpZHN0ZXJJdGVtLiRpdGVtLng7XHJcbiAgICAgIHRoaXMuaXRlbUJhY2t1cFsyXSA9IHRoaXMuZ3JpZHN0ZXJJdGVtLiRpdGVtLmNvbHM7XHJcbiAgICAgIHRoaXMuZ3JpZHN0ZXJJdGVtLiRpdGVtLmNvbHMgKz1cclxuICAgICAgICB0aGlzLmdyaWRzdGVySXRlbS4kaXRlbS54IC0gdGhpcy5uZXdQb3NpdGlvbjtcclxuICAgICAgdGhpcy5ncmlkc3Rlckl0ZW0uJGl0ZW0ueCA9IHRoaXMubmV3UG9zaXRpb247XHJcbiAgICAgIHRoaXMucHVzaFJlc2l6ZS5wdXNoSXRlbXModGhpcy5wdXNoUmVzaXplLmZyb21FYXN0KTtcclxuICAgICAgdGhpcy5wdXNoLnB1c2hJdGVtcyhcclxuICAgICAgICB0aGlzLnB1c2guZnJvbUVhc3QsXHJcbiAgICAgICAgdGhpcy5ncmlkc3Rlci4kb3B0aW9ucy5kaXNhYmxlUHVzaE9uUmVzaXplXHJcbiAgICAgICk7XHJcbiAgICAgIGlmICh0aGlzLmdyaWRzdGVyLmNoZWNrQ29sbGlzaW9uKHRoaXMuZ3JpZHN0ZXJJdGVtLiRpdGVtKSkge1xyXG4gICAgICAgIHRoaXMuZ3JpZHN0ZXJJdGVtLiRpdGVtLnggPSB0aGlzLml0ZW1CYWNrdXBbMF07XHJcbiAgICAgICAgdGhpcy5ncmlkc3Rlckl0ZW0uJGl0ZW0uY29scyA9IHRoaXMuaXRlbUJhY2t1cFsyXTtcclxuICAgICAgICB0aGlzLmxlZnQgPSB0aGlzLmdyaWRzdGVyLnBvc2l0aW9uWFRvUGl4ZWxzKHRoaXMuZ3JpZHN0ZXJJdGVtLiRpdGVtLngpO1xyXG4gICAgICAgIHRoaXMuc2V0SXRlbUxlZnQoXHJcbiAgICAgICAgICB0aGlzLmdyaWRzdGVyLnBvc2l0aW9uWFRvUGl4ZWxzKHRoaXMuZ3JpZHN0ZXJJdGVtLiRpdGVtLngpXHJcbiAgICAgICAgKTtcclxuICAgICAgICB0aGlzLnNldEl0ZW1XaWR0aChcclxuICAgICAgICAgIHRoaXMuZ3JpZHN0ZXIucG9zaXRpb25YVG9QaXhlbHModGhpcy5ncmlkc3Rlckl0ZW0uJGl0ZW0uY29scykgLVxyXG4gICAgICAgICAgICB0aGlzLm1hcmdpblxyXG4gICAgICAgICk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuZ3JpZHN0ZXIucHJldmlld1N0eWxlKCk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5wdXNoUmVzaXplLmNoZWNrUHVzaEJhY2soKTtcclxuICAgICAgdGhpcy5wdXNoLmNoZWNrUHVzaEJhY2soKTtcclxuICAgIH1cclxuICAgIHRoaXMuc2V0SXRlbUxlZnQodGhpcy5sZWZ0KTtcclxuICAgIHRoaXMuc2V0SXRlbVdpZHRoKHRoaXMud2lkdGgpO1xyXG4gIH07XHJcblxyXG4gIHByaXZhdGUgaGFuZGxlU291dGggPSAoZTogTW91c2VFdmVudCk6IHZvaWQgPT4ge1xyXG4gICAgdGhpcy5oZWlnaHQgPSBlLmNsaWVudFkgKyB0aGlzLm9mZnNldFRvcCAtIHRoaXMuZGlmZkJvdHRvbSAtIHRoaXMudG9wO1xyXG4gICAgaWYgKHRoaXMubWluSGVpZ2h0ID4gdGhpcy5oZWlnaHQpIHtcclxuICAgICAgdGhpcy5oZWlnaHQgPSB0aGlzLm1pbkhlaWdodDtcclxuICAgIH1cclxuICAgIHRoaXMuYm90dG9tID0gdGhpcy50b3AgKyB0aGlzLmhlaWdodDtcclxuICAgIGlmICh0aGlzLmdyaWRzdGVyLm9wdGlvbnMuZW5hYmxlQm91bmRhcnlDb250cm9sKSB7XHJcbiAgICAgIGNvbnN0IG1hcmdpbiA9IHRoaXMub3V0ZXJNYXJnaW5Cb3R0b20gPz8gdGhpcy5tYXJnaW47XHJcbiAgICAgIGNvbnN0IGJveCA9IHRoaXMuZ3JpZHN0ZXIuZWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XHJcbiAgICAgIHRoaXMuYm90dG9tID0gTWF0aC5taW4oXHJcbiAgICAgICAgdGhpcy5ib3R0b20sXHJcbiAgICAgICAgYm94LmJvdHRvbSAtIGJveC50b3AgLSAyICogbWFyZ2luXHJcbiAgICAgICk7XHJcbiAgICAgIHRoaXMuaGVpZ2h0ID0gdGhpcy5ib3R0b20gLSB0aGlzLnRvcDtcclxuICAgIH1cclxuICAgIGNvbnN0IG1hcmdpbkJvdHRvbSA9IHRoaXMuZ3JpZHN0ZXIub3B0aW9ucy5wdXNoSXRlbXMgPyAwIDogdGhpcy5tYXJnaW47XHJcbiAgICB0aGlzLm5ld1Bvc2l0aW9uID0gdGhpcy5ncmlkc3Rlci5waXhlbHNUb1Bvc2l0aW9uWShcclxuICAgICAgdGhpcy5ib3R0b20gKyBtYXJnaW5Cb3R0b20sXHJcbiAgICAgIE1hdGguY2VpbFxyXG4gICAgKTtcclxuICAgIGlmIChcclxuICAgICAgdGhpcy5ncmlkc3Rlckl0ZW0uJGl0ZW0ueSArIHRoaXMuZ3JpZHN0ZXJJdGVtLiRpdGVtLnJvd3MgIT09XHJcbiAgICAgIHRoaXMubmV3UG9zaXRpb25cclxuICAgICkge1xyXG4gICAgICB0aGlzLml0ZW1CYWNrdXBbM10gPSB0aGlzLmdyaWRzdGVySXRlbS4kaXRlbS5yb3dzO1xyXG4gICAgICB0aGlzLmdyaWRzdGVySXRlbS4kaXRlbS5yb3dzID1cclxuICAgICAgICB0aGlzLm5ld1Bvc2l0aW9uIC0gdGhpcy5ncmlkc3Rlckl0ZW0uJGl0ZW0ueTtcclxuICAgICAgdGhpcy5wdXNoUmVzaXplLnB1c2hJdGVtcyh0aGlzLnB1c2hSZXNpemUuZnJvbU5vcnRoKTtcclxuICAgICAgdGhpcy5wdXNoLnB1c2hJdGVtcyhcclxuICAgICAgICB0aGlzLnB1c2guZnJvbU5vcnRoLFxyXG4gICAgICAgIHRoaXMuZ3JpZHN0ZXIuJG9wdGlvbnMuZGlzYWJsZVB1c2hPblJlc2l6ZVxyXG4gICAgICApO1xyXG4gICAgICBpZiAodGhpcy5ncmlkc3Rlci5jaGVja0NvbGxpc2lvbih0aGlzLmdyaWRzdGVySXRlbS4kaXRlbSkpIHtcclxuICAgICAgICB0aGlzLmdyaWRzdGVySXRlbS4kaXRlbS5yb3dzID0gdGhpcy5pdGVtQmFja3VwWzNdO1xyXG4gICAgICAgIHRoaXMuc2V0SXRlbUhlaWdodChcclxuICAgICAgICAgIHRoaXMuZ3JpZHN0ZXIucG9zaXRpb25ZVG9QaXhlbHModGhpcy5ncmlkc3Rlckl0ZW0uJGl0ZW0ucm93cykgLVxyXG4gICAgICAgICAgICB0aGlzLm1hcmdpblxyXG4gICAgICAgICk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuZ3JpZHN0ZXIucHJldmlld1N0eWxlKCk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5wdXNoUmVzaXplLmNoZWNrUHVzaEJhY2soKTtcclxuICAgICAgdGhpcy5wdXNoLmNoZWNrUHVzaEJhY2soKTtcclxuICAgIH1cclxuICAgIHRoaXMuc2V0SXRlbUhlaWdodCh0aGlzLmhlaWdodCk7XHJcbiAgfTtcclxuXHJcbiAgcHJpdmF0ZSBoYW5kbGVFYXN0ID0gKGU6IE1vdXNlRXZlbnQpOiB2b2lkID0+IHtcclxuICAgIGNvbnN0IGNsaWVudFggPVxyXG4gICAgICB0aGlzLmdyaWRzdGVyLiRvcHRpb25zLmRpclR5cGUgPT09IERpclR5cGVzLlJUTFxyXG4gICAgICAgID8gdGhpcy5vcmlnaW5hbENsaWVudFggKyAodGhpcy5vcmlnaW5hbENsaWVudFggLSBlLmNsaWVudFgpXHJcbiAgICAgICAgOiBlLmNsaWVudFg7XHJcbiAgICB0aGlzLndpZHRoID0gY2xpZW50WCArIHRoaXMub2Zmc2V0TGVmdCAtIHRoaXMuZGlmZlJpZ2h0IC0gdGhpcy5sZWZ0O1xyXG5cclxuICAgIGlmICh0aGlzLm1pbldpZHRoID4gdGhpcy53aWR0aCkge1xyXG4gICAgICB0aGlzLndpZHRoID0gdGhpcy5taW5XaWR0aDtcclxuICAgIH1cclxuICAgIHRoaXMucmlnaHQgPSB0aGlzLmxlZnQgKyB0aGlzLndpZHRoO1xyXG4gICAgaWYgKHRoaXMuZ3JpZHN0ZXIub3B0aW9ucy5lbmFibGVCb3VuZGFyeUNvbnRyb2wpIHtcclxuICAgICAgY29uc3QgbWFyZ2luID0gdGhpcy5vdXRlck1hcmdpblJpZ2h0ID8/IHRoaXMubWFyZ2luO1xyXG4gICAgICBjb25zdCBib3ggPSB0aGlzLmdyaWRzdGVyLmVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xyXG4gICAgICB0aGlzLnJpZ2h0ID0gTWF0aC5taW4odGhpcy5yaWdodCwgYm94LnJpZ2h0IC0gYm94LmxlZnQgLSAyICogbWFyZ2luKTtcclxuICAgICAgdGhpcy53aWR0aCA9IHRoaXMucmlnaHQgLSB0aGlzLmxlZnQ7XHJcbiAgICB9XHJcbiAgICBjb25zdCBtYXJnaW5SaWdodCA9IHRoaXMuZ3JpZHN0ZXIub3B0aW9ucy5wdXNoSXRlbXMgPyAwIDogdGhpcy5tYXJnaW47XHJcbiAgICB0aGlzLm5ld1Bvc2l0aW9uID0gdGhpcy5ncmlkc3Rlci5waXhlbHNUb1Bvc2l0aW9uWChcclxuICAgICAgdGhpcy5yaWdodCArIG1hcmdpblJpZ2h0LFxyXG4gICAgICBNYXRoLmNlaWxcclxuICAgICk7XHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMuZ3JpZHN0ZXJJdGVtLiRpdGVtLnggKyB0aGlzLmdyaWRzdGVySXRlbS4kaXRlbS5jb2xzICE9PVxyXG4gICAgICB0aGlzLm5ld1Bvc2l0aW9uXHJcbiAgICApIHtcclxuICAgICAgdGhpcy5pdGVtQmFja3VwWzJdID0gdGhpcy5ncmlkc3Rlckl0ZW0uJGl0ZW0uY29scztcclxuICAgICAgdGhpcy5ncmlkc3Rlckl0ZW0uJGl0ZW0uY29scyA9XHJcbiAgICAgICAgdGhpcy5uZXdQb3NpdGlvbiAtIHRoaXMuZ3JpZHN0ZXJJdGVtLiRpdGVtLng7XHJcbiAgICAgIHRoaXMucHVzaFJlc2l6ZS5wdXNoSXRlbXModGhpcy5wdXNoUmVzaXplLmZyb21XZXN0KTtcclxuICAgICAgdGhpcy5wdXNoLnB1c2hJdGVtcyhcclxuICAgICAgICB0aGlzLnB1c2guZnJvbVdlc3QsXHJcbiAgICAgICAgdGhpcy5ncmlkc3Rlci4kb3B0aW9ucy5kaXNhYmxlUHVzaE9uUmVzaXplXHJcbiAgICAgICk7XHJcbiAgICAgIGlmICh0aGlzLmdyaWRzdGVyLmNoZWNrQ29sbGlzaW9uKHRoaXMuZ3JpZHN0ZXJJdGVtLiRpdGVtKSkge1xyXG4gICAgICAgIHRoaXMuZ3JpZHN0ZXJJdGVtLiRpdGVtLmNvbHMgPSB0aGlzLml0ZW1CYWNrdXBbMl07XHJcbiAgICAgICAgdGhpcy5zZXRJdGVtV2lkdGgoXHJcbiAgICAgICAgICB0aGlzLmdyaWRzdGVyLnBvc2l0aW9uWFRvUGl4ZWxzKHRoaXMuZ3JpZHN0ZXJJdGVtLiRpdGVtLmNvbHMpIC1cclxuICAgICAgICAgICAgdGhpcy5tYXJnaW5cclxuICAgICAgICApO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLmdyaWRzdGVyLnByZXZpZXdTdHlsZSgpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMucHVzaFJlc2l6ZS5jaGVja1B1c2hCYWNrKCk7XHJcbiAgICAgIHRoaXMucHVzaC5jaGVja1B1c2hCYWNrKCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLnNldEl0ZW1XaWR0aCh0aGlzLndpZHRoKTtcclxuICB9O1xyXG5cclxuICBwcml2YXRlIGhhbmRsZU5vcnRoV2VzdCA9IChlOiBNb3VzZUV2ZW50KTogdm9pZCA9PiB7XHJcbiAgICB0aGlzLmhhbmRsZU5vcnRoKGUpO1xyXG4gICAgdGhpcy5oYW5kbGVXZXN0KGUpO1xyXG4gIH07XHJcblxyXG4gIHByaXZhdGUgaGFuZGxlTm9ydGhFYXN0ID0gKGU6IE1vdXNlRXZlbnQpOiB2b2lkID0+IHtcclxuICAgIHRoaXMuaGFuZGxlTm9ydGgoZSk7XHJcbiAgICB0aGlzLmhhbmRsZUVhc3QoZSk7XHJcbiAgfTtcclxuXHJcbiAgcHJpdmF0ZSBoYW5kbGVTb3V0aFdlc3QgPSAoZTogTW91c2VFdmVudCk6IHZvaWQgPT4ge1xyXG4gICAgdGhpcy5oYW5kbGVTb3V0aChlKTtcclxuICAgIHRoaXMuaGFuZGxlV2VzdChlKTtcclxuICB9O1xyXG5cclxuICBwcml2YXRlIGhhbmRsZVNvdXRoRWFzdCA9IChlOiBNb3VzZUV2ZW50KTogdm9pZCA9PiB7XHJcbiAgICB0aGlzLmhhbmRsZVNvdXRoKGUpO1xyXG4gICAgdGhpcy5oYW5kbGVFYXN0KGUpO1xyXG4gIH07XHJcblxyXG4gIHRvZ2dsZSgpOiB2b2lkIHtcclxuICAgIHRoaXMucmVzaXplRW5hYmxlZCA9IHRoaXMuZ3JpZHN0ZXJJdGVtLmNhbkJlUmVzaXplZCgpO1xyXG4gICAgdGhpcy5yZXNpemFibGVIYW5kbGVzID0gdGhpcy5ncmlkc3Rlckl0ZW0uZ2V0UmVzaXphYmxlSGFuZGxlcygpO1xyXG4gIH1cclxuXHJcbiAgZHJhZ1N0YXJ0RGVsYXkoZTogTW91c2VFdmVudCB8IFRvdWNoRXZlbnQpOiB2b2lkIHtcclxuICAgIEdyaWRzdGVyVXRpbHMuY2hlY2tUb3VjaEV2ZW50KGUpO1xyXG5cclxuICAgIGlmICghdGhpcy5ncmlkc3Rlci4kb3B0aW9ucy5yZXNpemFibGUuZGVsYXlTdGFydCkge1xyXG4gICAgICB0aGlzLmRyYWdTdGFydChlIGFzIE1vdXNlRXZlbnQpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgdGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aGlzLmRyYWdTdGFydChlIGFzIE1vdXNlRXZlbnQpO1xyXG4gICAgICBjYW5jZWxEcmFnKCk7XHJcbiAgICB9LCB0aGlzLmdyaWRzdGVyLiRvcHRpb25zLnJlc2l6YWJsZS5kZWxheVN0YXJ0KTtcclxuXHJcbiAgICBjb25zdCB7XHJcbiAgICAgIGNhbmNlbE1vdXNlLFxyXG4gICAgICBjYW5jZWxNb3VzZUxlYXZlLFxyXG4gICAgICBjYW5jZWxPbkJsdXIsXHJcbiAgICAgIGNhbmNlbFRvdWNoTW92ZSxcclxuICAgICAgY2FuY2VsVG91Y2hFbmQsXHJcbiAgICAgIGNhbmNlbFRvdWNoQ2FuY2VsXHJcbiAgICB9ID0gdGhpcy56b25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcclxuICAgICAgLy8gTm90ZTogYWxsIG9mIHRoZXNlIGV2ZW50cyBhcmUgYmVpbmcgYWRkZWQgd2l0aGluIHRoZSBgPHJvb3Q+YCB6b25lIHNpbmNlIHRoZXkgYWxsXHJcbiAgICAgIC8vIGRvbid0IGRvIGFueSB2aWV3IHVwZGF0ZXMgYW5kIGRvbid0IHJlcXVpcmUgQW5ndWxhciBydW5uaW5nIGNoYW5nZSBkZXRlY3Rpb24uXHJcbiAgICAgIC8vIEFsbCBldmVudCBsaXN0ZW5lcnMgY2FsbCBgY2FuY2VsRHJhZ2Agb25jZSB0aGUgZXZlbnQgaXMgZGlzcGF0Y2hlZCwgdGhlIGBjYW5jZWxEcmFnYFxyXG4gICAgICAvLyBpcyByZXNwb25zaWJsZSBvbmx5IGZvciByZW1vdmluZyBldmVudCBsaXN0ZW5lcnMuXHJcblxyXG4gICAgICBjb25zdCBjYW5jZWxNb3VzZSA9IHRoaXMuZ3JpZHN0ZXJJdGVtLnJlbmRlcmVyLmxpc3RlbihcclxuICAgICAgICAnZG9jdW1lbnQnLFxyXG4gICAgICAgICdtb3VzZXVwJyxcclxuICAgICAgICBjYW5jZWxEcmFnXHJcbiAgICAgICk7XHJcbiAgICAgIGNvbnN0IGNhbmNlbE1vdXNlTGVhdmUgPSB0aGlzLmdyaWRzdGVySXRlbS5yZW5kZXJlci5saXN0ZW4oXHJcbiAgICAgICAgJ2RvY3VtZW50JyxcclxuICAgICAgICAnbW91c2VsZWF2ZScsXHJcbiAgICAgICAgY2FuY2VsRHJhZ1xyXG4gICAgICApO1xyXG4gICAgICBjb25zdCBjYW5jZWxPbkJsdXIgPSB0aGlzLmdyaWRzdGVySXRlbS5yZW5kZXJlci5saXN0ZW4oXHJcbiAgICAgICAgJ3dpbmRvdycsXHJcbiAgICAgICAgJ2JsdXInLFxyXG4gICAgICAgIGNhbmNlbERyYWdcclxuICAgICAgKTtcclxuICAgICAgY29uc3QgY2FuY2VsVG91Y2hNb3ZlID0gdGhpcy5ncmlkc3Rlckl0ZW0ucmVuZGVyZXIubGlzdGVuKFxyXG4gICAgICAgICdkb2N1bWVudCcsXHJcbiAgICAgICAgJ3RvdWNobW92ZScsXHJcbiAgICAgICAgY2FuY2VsTW92ZVxyXG4gICAgICApO1xyXG4gICAgICBjb25zdCBjYW5jZWxUb3VjaEVuZCA9IHRoaXMuZ3JpZHN0ZXJJdGVtLnJlbmRlcmVyLmxpc3RlbihcclxuICAgICAgICAnZG9jdW1lbnQnLFxyXG4gICAgICAgICd0b3VjaGVuZCcsXHJcbiAgICAgICAgY2FuY2VsRHJhZ1xyXG4gICAgICApO1xyXG4gICAgICBjb25zdCBjYW5jZWxUb3VjaENhbmNlbCA9IHRoaXMuZ3JpZHN0ZXJJdGVtLnJlbmRlcmVyLmxpc3RlbihcclxuICAgICAgICAnZG9jdW1lbnQnLFxyXG4gICAgICAgICd0b3VjaGNhbmNlbCcsXHJcbiAgICAgICAgY2FuY2VsRHJhZ1xyXG4gICAgICApO1xyXG4gICAgICByZXR1cm4ge1xyXG4gICAgICAgIGNhbmNlbE1vdXNlLFxyXG4gICAgICAgIGNhbmNlbE1vdXNlTGVhdmUsXHJcbiAgICAgICAgY2FuY2VsT25CbHVyLFxyXG4gICAgICAgIGNhbmNlbFRvdWNoTW92ZSxcclxuICAgICAgICBjYW5jZWxUb3VjaEVuZCxcclxuICAgICAgICBjYW5jZWxUb3VjaENhbmNlbFxyXG4gICAgICB9O1xyXG4gICAgfSk7XHJcblxyXG4gICAgZnVuY3Rpb24gY2FuY2VsTW92ZShldmVudE1vdmU6IE1vdXNlRXZlbnQpOiB2b2lkIHtcclxuICAgICAgR3JpZHN0ZXJVdGlscy5jaGVja1RvdWNoRXZlbnQoZXZlbnRNb3ZlKTtcclxuICAgICAgaWYgKFxyXG4gICAgICAgIE1hdGguYWJzKGV2ZW50TW92ZS5jbGllbnRYIC0gKGUgYXMgTW91c2VFdmVudCkuY2xpZW50WCkgPiA5IHx8XHJcbiAgICAgICAgTWF0aC5hYnMoZXZlbnRNb3ZlLmNsaWVudFkgLSAoZSBhcyBNb3VzZUV2ZW50KS5jbGllbnRZKSA+IDlcclxuICAgICAgKSB7XHJcbiAgICAgICAgY2FuY2VsRHJhZygpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gY2FuY2VsRHJhZygpOiB2b2lkIHtcclxuICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xyXG4gICAgICBjYW5jZWxPbkJsdXIoKTtcclxuICAgICAgY2FuY2VsTW91c2UoKTtcclxuICAgICAgY2FuY2VsTW91c2VMZWF2ZSgpO1xyXG4gICAgICBjYW5jZWxUb3VjaE1vdmUoKTtcclxuICAgICAgY2FuY2VsVG91Y2hFbmQoKTtcclxuICAgICAgY2FuY2VsVG91Y2hDYW5jZWwoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNldEl0ZW1Ub3AodG9wOiBudW1iZXIpOiB2b2lkIHtcclxuICAgIHRoaXMuZ3JpZHN0ZXIuZ3JpZFJlbmRlcmVyLnNldENlbGxQb3NpdGlvbihcclxuICAgICAgdGhpcy5ncmlkc3Rlckl0ZW0ucmVuZGVyZXIsXHJcbiAgICAgIHRoaXMuZ3JpZHN0ZXJJdGVtLmVsLFxyXG4gICAgICB0aGlzLmxlZnQsXHJcbiAgICAgIHRvcFxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHNldEl0ZW1MZWZ0KGxlZnQ6IG51bWJlcik6IHZvaWQge1xyXG4gICAgdGhpcy5ncmlkc3Rlci5ncmlkUmVuZGVyZXIuc2V0Q2VsbFBvc2l0aW9uKFxyXG4gICAgICB0aGlzLmdyaWRzdGVySXRlbS5yZW5kZXJlcixcclxuICAgICAgdGhpcy5ncmlkc3Rlckl0ZW0uZWwsXHJcbiAgICAgIGxlZnQsXHJcbiAgICAgIHRoaXMudG9wXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgc2V0SXRlbUhlaWdodChoZWlnaHQ6IG51bWJlcik6IHZvaWQge1xyXG4gICAgdGhpcy5ncmlkc3Rlckl0ZW0ucmVuZGVyZXIuc2V0U3R5bGUoXHJcbiAgICAgIHRoaXMuZ3JpZHN0ZXJJdGVtLmVsLFxyXG4gICAgICAnaGVpZ2h0JyxcclxuICAgICAgaGVpZ2h0ICsgJ3B4J1xyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHNldEl0ZW1XaWR0aCh3aWR0aDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICB0aGlzLmdyaWRzdGVySXRlbS5yZW5kZXJlci5zZXRTdHlsZShcclxuICAgICAgdGhpcy5ncmlkc3Rlckl0ZW0uZWwsXHJcbiAgICAgICd3aWR0aCcsXHJcbiAgICAgIHdpZHRoICsgJ3B4J1xyXG4gICAgKTtcclxuICB9XHJcbn1cclxuIl19
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZHN0ZXJSZXNpemVFdmVudFR5cGUuaW50ZXJmYWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcmEtZGFzaGJvYXJkLWZyYW1ld29yay9zcmMvZ3JpZHN0ZXIvbGliL2dyaWRzdGVyUmVzaXplRXZlbnRUeXBlLmludGVyZmFjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGludGVyZmFjZSBHcmlkc3RlclJlc2l6ZUV2ZW50VHlwZSB7XHJcbiAgbm9ydGg6IGJvb2xlYW47XHJcbiAgc291dGg6IGJvb2xlYW47XHJcbiAgd2VzdDogYm9vbGVhbjtcclxuICBlYXN0OiBib29sZWFuO1xyXG59XHJcbiJdfQ==