@schneideress/dashboardframework 17.0.46 → 20.0.0

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 +52 -59
  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 -971
  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,225 +0,0 @@
1
- export class GridsterPushResize {
2
- constructor(gridsterItem) {
3
- this.pushedItems = [];
4
- this.pushedItemsPath = [];
5
- this.gridsterItem = gridsterItem;
6
- this.gridster = gridsterItem.gridster;
7
- this.tryPattern = {
8
- fromEast: this.tryWest,
9
- fromWest: this.tryEast,
10
- fromNorth: this.trySouth,
11
- fromSouth: this.tryNorth
12
- };
13
- this.fromSouth = 'fromSouth';
14
- this.fromNorth = 'fromNorth';
15
- this.fromEast = 'fromEast';
16
- this.fromWest = 'fromWest';
17
- }
18
- destroy() {
19
- this.gridster = this.gridsterItem = null;
20
- }
21
- pushItems(direction) {
22
- if (this.gridster.$options.pushResizeItems) {
23
- return this.push(this.gridsterItem, direction);
24
- }
25
- else {
26
- return false;
27
- }
28
- }
29
- restoreItems() {
30
- let i = 0;
31
- const l = this.pushedItems.length;
32
- let pushedItem;
33
- for (; i < l; i++) {
34
- pushedItem = this.pushedItems[i];
35
- pushedItem.$item.x = pushedItem.item.x || 0;
36
- pushedItem.$item.y = pushedItem.item.y || 0;
37
- pushedItem.$item.cols = pushedItem.item.cols || 1;
38
- pushedItem.$item.row = pushedItem.item.row || 1;
39
- pushedItem.setSize();
40
- }
41
- this.pushedItems = [];
42
- this.pushedItemsPath = [];
43
- }
44
- setPushedItems() {
45
- let i = 0;
46
- const l = this.pushedItems.length;
47
- let pushedItem;
48
- for (; i < l; i++) {
49
- pushedItem = this.pushedItems[i];
50
- pushedItem.checkItemChanges(pushedItem.$item, pushedItem.item);
51
- }
52
- this.pushedItems = [];
53
- this.pushedItemsPath = [];
54
- }
55
- checkPushBack() {
56
- let i = this.pushedItems.length - 1;
57
- let change = false;
58
- for (; i > -1; i--) {
59
- if (this.checkPushedItem(this.pushedItems[i], i)) {
60
- change = true;
61
- }
62
- }
63
- if (change) {
64
- this.checkPushBack();
65
- }
66
- }
67
- push(gridsterItem, direction) {
68
- const gridsterItemCollision = this.gridster.checkCollision(gridsterItem.$item);
69
- if (gridsterItemCollision &&
70
- gridsterItemCollision !== true &&
71
- gridsterItemCollision !== this.gridsterItem &&
72
- gridsterItemCollision.canBeResized()) {
73
- let tryPattern = this.tryPattern;
74
- if (tryPattern[direction].call(this, gridsterItemCollision, gridsterItem, direction)) {
75
- return true;
76
- }
77
- }
78
- else if (gridsterItemCollision === false) {
79
- return true;
80
- }
81
- return false;
82
- }
83
- trySouth(gridsterItemCollide, gridsterItem, direction) {
84
- const backUpY = gridsterItemCollide.$item.y;
85
- const backUpRows = gridsterItemCollide.$item.rows;
86
- gridsterItemCollide.$item.y =
87
- gridsterItem.$item.y + gridsterItem.$item.rows;
88
- gridsterItemCollide.$item.rows =
89
- backUpRows + backUpY - gridsterItemCollide.$item.y;
90
- if (!this.gridster.checkCollisionTwoItems(gridsterItemCollide.$item, gridsterItem.$item) &&
91
- !this.gridster.checkGridCollision(gridsterItemCollide.$item)) {
92
- gridsterItemCollide.setSize();
93
- this.addToPushed(gridsterItemCollide);
94
- this.push(gridsterItem, direction);
95
- return true;
96
- }
97
- else {
98
- gridsterItemCollide.$item.y = backUpY;
99
- gridsterItemCollide.$item.rows = backUpRows;
100
- }
101
- return false;
102
- }
103
- tryNorth(gridsterItemCollide, gridsterItem, direction) {
104
- const backUpRows = gridsterItemCollide.$item.rows;
105
- gridsterItemCollide.$item.rows =
106
- gridsterItem.$item.y - gridsterItemCollide.$item.y;
107
- if (!this.gridster.checkCollisionTwoItems(gridsterItemCollide.$item, gridsterItem.$item) &&
108
- !this.gridster.checkGridCollision(gridsterItemCollide.$item)) {
109
- gridsterItemCollide.setSize();
110
- this.addToPushed(gridsterItemCollide);
111
- this.push(gridsterItem, direction);
112
- return true;
113
- }
114
- else {
115
- gridsterItemCollide.$item.rows = backUpRows;
116
- }
117
- return false;
118
- }
119
- tryEast(gridsterItemCollide, gridsterItem, direction) {
120
- const backUpX = gridsterItemCollide.$item.x;
121
- const backUpCols = gridsterItemCollide.$item.cols;
122
- gridsterItemCollide.$item.x =
123
- gridsterItem.$item.x + gridsterItem.$item.cols;
124
- gridsterItemCollide.$item.cols =
125
- backUpCols + backUpX - gridsterItemCollide.$item.x;
126
- if (!this.gridster.checkCollisionTwoItems(gridsterItemCollide.$item, gridsterItem.$item) &&
127
- !this.gridster.checkGridCollision(gridsterItemCollide.$item)) {
128
- gridsterItemCollide.setSize();
129
- this.addToPushed(gridsterItemCollide);
130
- this.push(gridsterItem, direction);
131
- return true;
132
- }
133
- else {
134
- gridsterItemCollide.$item.x = backUpX;
135
- gridsterItemCollide.$item.cols = backUpCols;
136
- }
137
- return false;
138
- }
139
- tryWest(gridsterItemCollide, gridsterItem, direction) {
140
- const backUpCols = gridsterItemCollide.$item.cols;
141
- gridsterItemCollide.$item.cols =
142
- gridsterItem.$item.x - gridsterItemCollide.$item.x;
143
- if (!this.gridster.checkCollisionTwoItems(gridsterItemCollide.$item, gridsterItem.$item) &&
144
- !this.gridster.checkGridCollision(gridsterItemCollide.$item)) {
145
- gridsterItemCollide.setSize();
146
- this.addToPushed(gridsterItemCollide);
147
- this.push(gridsterItem, direction);
148
- return true;
149
- }
150
- else {
151
- gridsterItemCollide.$item.cols = backUpCols;
152
- }
153
- return false;
154
- }
155
- addToPushed(gridsterItem) {
156
- if (this.pushedItems.indexOf(gridsterItem) < 0) {
157
- this.pushedItems.push(gridsterItem);
158
- this.pushedItemsPath.push([
159
- {
160
- x: gridsterItem.item.x || 0,
161
- y: gridsterItem.item.y || 0,
162
- cols: gridsterItem.item.cols || 0,
163
- rows: gridsterItem.item.rows || 0
164
- },
165
- {
166
- x: gridsterItem.$item.x,
167
- y: gridsterItem.$item.y,
168
- cols: gridsterItem.$item.cols,
169
- rows: gridsterItem.$item.rows
170
- }
171
- ]);
172
- }
173
- else {
174
- const i = this.pushedItems.indexOf(gridsterItem);
175
- this.pushedItemsPath[i].push({
176
- x: gridsterItem.$item.x,
177
- y: gridsterItem.$item.y,
178
- cols: gridsterItem.$item.cols,
179
- rows: gridsterItem.$item.rows
180
- });
181
- }
182
- }
183
- removeFromPushed(i) {
184
- if (i > -1) {
185
- this.pushedItems.splice(i, 1);
186
- this.pushedItemsPath.splice(i, 1);
187
- }
188
- }
189
- checkPushedItem(pushedItem, i) {
190
- const path = this.pushedItemsPath[i];
191
- let j = path.length - 2;
192
- let lastPosition;
193
- let x;
194
- let y;
195
- let cols;
196
- let rows;
197
- for (; j > -1; j--) {
198
- lastPosition = path[j];
199
- x = pushedItem.$item.x;
200
- y = pushedItem.$item.y;
201
- cols = pushedItem.$item.cols;
202
- rows = pushedItem.$item.rows;
203
- pushedItem.$item.x = lastPosition.x;
204
- pushedItem.$item.y = lastPosition.y;
205
- pushedItem.$item.cols = lastPosition.cols;
206
- pushedItem.$item.rows = lastPosition.rows;
207
- if (!this.gridster.findItemWithItem(pushedItem.$item)) {
208
- pushedItem.setSize();
209
- path.splice(j + 1, path.length - 1 - j);
210
- }
211
- else {
212
- pushedItem.$item.x = x;
213
- pushedItem.$item.y = y;
214
- pushedItem.$item.cols = cols;
215
- pushedItem.$item.rows = rows;
216
- }
217
- }
218
- if (path.length < 2) {
219
- this.removeFromPushed(i);
220
- return true;
221
- }
222
- return false;
223
- }
224
- }
225
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZHN0ZXJQdXNoUmVzaXplLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9yYS1kYXNoYm9hcmQtZnJhbWV3b3JrL3NyYy9ncmlkc3Rlci9saWIvZ3JpZHN0ZXJQdXNoUmVzaXplLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBTUEsTUFBTSxPQUFPLGtCQUFrQjtJQWdDN0IsWUFBWSxZQUE0QztRQUN0RCxJQUFJLENBQUMsV0FBVyxHQUFHLEVBQUUsQ0FBQztRQUN0QixJQUFJLENBQUMsZUFBZSxHQUFHLEVBQUUsQ0FBQztRQUMxQixJQUFJLENBQUMsWUFBWSxHQUFHLFlBQVksQ0FBQztRQUNqQyxJQUFJLENBQUMsUUFBUSxHQUFHLFlBQVksQ0FBQyxRQUFRLENBQUM7UUFDdEMsSUFBSSxDQUFDLFVBQVUsR0FBRztZQUNoQixRQUFRLEVBQUUsSUFBSSxDQUFDLE9BQU87WUFDdEIsUUFBUSxFQUFFLElBQUksQ0FBQyxPQUFPO1lBQ3RCLFNBQVMsRUFBRSxJQUFJLENBQUMsUUFBUTtZQUN4QixTQUFTLEVBQUUsSUFBSSxDQUFDLFFBQVE7U0FDekIsQ0FBQztRQUNGLElBQUksQ0FBQyxTQUFTLEdBQUcsV0FBVyxDQUFDO1FBQzdCLElBQUksQ0FBQyxTQUFTLEdBQUcsV0FBVyxDQUFDO1FBQzdCLElBQUksQ0FBQyxRQUFRLEdBQUcsVUFBVSxDQUFDO1FBQzNCLElBQUksQ0FBQyxRQUFRLEdBQUcsVUFBVSxDQUFDO0lBQzdCLENBQUM7SUFFRCxPQUFPO1FBQ0wsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUssQ0FBQztJQUM1QyxDQUFDO0lBRUQsU0FBUyxDQUFDLFNBQWlCO1FBQ3pCLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDM0MsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FB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LEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3ZCLENBQUMsR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztZQUN2QixDQUFDLEdBQUcsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7WUFDdkIsSUFBSSxHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDO1lBQzdCLElBQUksR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQztZQUM3QixVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxZQUFZLENBQUMsQ0FBQyxDQUFDO1lBQ3BDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLFlBQVksQ0FBQyxDQUFDLENBQUM7WUFDcEMsVUFBVSxDQUFDLEtBQUssQ0FBQyxJQUFJLEdBQUcsWUFBWSxDQUFDLElBQUksQ0FBQztZQUMxQyxVQUFVLENBQUMsS0FBSyxDQUFDLElBQUksR0FBRyxZQUFZLENBQUMsSUFBSSxDQUFDO1lBQzFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLGdCQUFnQixDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO2dCQUN0RCxVQUFVLENBQUMsT0FBTyxFQUFFLENBQUM7Z0JBQ3JCLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztZQUMxQyxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUN2QixVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ3ZCLFVBQVUsQ0FBQyxLQUFLLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztnQkFDN0IsVUFBVSxDQUFDLEtBQUssQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO1lBQy9CLENBQUM7UUFDSCxDQUFDO1FBQ0QsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ3BCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN6QixPQUFPLElBQUksQ0FBQztRQUNkLENBQUM7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgR3JpZHN0ZXJJdGVtLFxyXG4gIEdyaWRzdGVySXRlbUNvbXBvbmVudEludGVyZmFjZVxyXG59IGZyb20gJy4vZ3JpZHN0ZXJJdGVtLmludGVyZmFjZSc7XHJcbmltcG9ydCB7IEdyaWRzdGVyQ29tcG9uZW50SW50ZXJmYWNlIH0gZnJvbSAnLi9ncmlkc3Rlci5pbnRlcmZhY2UnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEdyaWRzdGVyUHVzaFJlc2l6ZSB7XHJcbiAgcHVibGljIGZyb21Tb3V0aDogc3RyaW5nO1xyXG4gIHB1YmxpYyBmcm9tTm9ydGg6IHN0cmluZztcclxuICBwdWJsaWMgZnJvbUVhc3Q6IHN0cmluZztcclxuICBwdWJsaWMgZnJvbVdlc3Q6IHN0cmluZztcclxuICBwcml2YXRlIHB1c2hlZEl0ZW1zOiBBcnJheTxHcmlkc3Rlckl0ZW1Db21wb25lbnRJbnRlcmZhY2U+O1xyXG4gIHByaXZhdGUgcHVzaGVkSXRlbXNQYXRoOiBBcnJheTxBcnJheTxHcmlkc3Rlckl0ZW0+PjtcclxuICBwcml2YXRlIGdyaWRzdGVySXRlbTogR3JpZHN0ZXJJdGVtQ29tcG9uZW50SW50ZXJmYWNlO1xyXG4gIHByaXZhdGUgZ3JpZHN0ZXI6IEdyaWRzdGVyQ29tcG9uZW50SW50ZXJmYWNlO1xyXG4gIHByaXZhdGUgdHJ5UGF0dGVybjoge1xyXG4gICAgZnJvbUVhc3Q6IChcclxuICAgICAgZ3JpZHN0ZXJJdGVtQ29sbGlkZTogR3JpZHN0ZXJJdGVtQ29tcG9uZW50SW50ZXJmYWNlLFxyXG4gICAgICBncmlkc3Rlckl0ZW06IEdyaWRzdGVySXRlbUNvbXBvbmVudEludGVyZmFjZSxcclxuICAgICAgZGlyZWN0aW9uOiBzdHJpbmdcclxuICAgICkgPT4gYm9vbGVhbjtcclxuICAgIGZyb21XZXN0OiAoXHJcbiAgICAgIGdyaWRzdGVySXRlbUNvbGxpZGU6IEdyaWRzdGVySXRlbUNvbXBvbmVudEludGVyZmFjZSxcclxuICAgICAgZ3JpZHN0ZXJJdGVtOiBHcmlkc3Rlckl0ZW1Db21wb25lbnRJbnRlcmZhY2UsXHJcbiAgICAgIGRpcmVjdGlvbjogc3RyaW5nXHJcbiAgICApID0+IGJvb2xlYW47XHJcbiAgICBmcm9tTm9ydGg6IChcclxuICAgICAgZ3JpZHN0ZXJJdGVtQ29sbGlkZTogR3JpZHN0ZXJJdGVtQ29tcG9uZW50SW50ZXJmYWNlLFxyXG4gICAgICBncmlkc3Rlckl0ZW06IEdyaWRzdGVySXRlbUNvbXBvbmVudEludGVyZmFjZSxcclxuICAgICAgZGlyZWN0aW9uOiBzdHJpbmdcclxuICAgICkgPT4gYm9vbGVhbjtcclxuICAgIGZyb21Tb3V0aDogKFxyXG4gICAgICBncmlkc3Rlckl0ZW1Db2xsaWRlOiBHcmlkc3Rlckl0ZW1Db21wb25lbnRJbnRlcmZhY2UsXHJcbiAgICAgIGdyaWRzdGVySXRlbTogR3JpZHN0ZXJJdGVtQ29tcG9uZW50SW50ZXJmYWNlLFxyXG4gICAgICBkaXJlY3Rpb246IHN0cmluZ1xyXG4gICAgKSA9PiBib29sZWFuO1xyXG4gIH07XHJcblxyXG4gIGNvbnN0cnVjdG9yKGdyaWRzdGVySXRlbTogR3JpZHN0ZXJJdGVtQ29tcG9uZW50SW50ZXJmYWNlKSB7XHJcbiAgICB0aGlzLnB1c2hlZEl0ZW1zID0gW107XHJcbiAgICB0aGlzLnB1c2hlZEl0ZW1zUGF0aCA9IFtdO1xyXG4gICAgdGhpcy5ncmlkc3Rlckl0ZW0gPSBncmlkc3Rlckl0ZW07XHJcbiAgICB0aGlzLmdyaWRzdGVyID0gZ3JpZHN0ZXJJdGVtLmdyaWRzdGVyO1xyXG4gICAgdGhpcy50cnlQYXR0ZXJuID0ge1xyXG4gICAgICBmcm9tRWFzdDogdGhpcy50cnlXZXN0LFxyXG4gICAgICBmcm9tV2VzdDogdGhpcy50cnlFYXN0LFxyXG4gICAgICBmcm9tTm9ydGg6IHRoaXMudHJ5U291dGgsXHJcbiAgICAgIGZyb21Tb3V0aDogdGhpcy50cnlOb3J0aFxyXG4gICAgfTtcclxuICAgIHRoaXMuZnJvbVNvdXRoID0gJ2Zyb21Tb3V0aCc7XHJcbiAgICB0aGlzLmZyb21Ob3J0aCA9ICdmcm9tTm9ydGgnO1xyXG4gICAgdGhpcy5mcm9tRWFzdCA9ICdmcm9tRWFzdCc7XHJcbiAgICB0aGlzLmZyb21XZXN0ID0gJ2Zyb21XZXN0JztcclxuICB9XHJcblxyXG4gIGRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLmdyaWRzdGVyID0gdGhpcy5ncmlkc3Rlckl0ZW0gPSBudWxsITtcclxuICB9XHJcblxyXG4gIHB1c2hJdGVtcyhkaXJlY3Rpb246IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKHRoaXMuZ3JpZHN0ZXIuJG9wdGlvbnMucHVzaFJlc2l6ZUl0ZW1zKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLnB1c2godGhpcy5ncmlkc3Rlckl0ZW0sIGRpcmVjdGlvbik7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZXN0b3JlSXRlbXMoKTogdm9pZCB7XHJcbiAgICBsZXQgaSA9IDA7XHJcbiAgICBjb25zdCBsOiBudW1iZXIgPSB0aGlzLnB1c2hlZEl0ZW1zLmxlbmd0aDtcclxuICAgIGxldCBwdXNoZWRJdGVtOiBHcmlkc3Rlckl0ZW1Db21wb25lbnRJbnRlcmZhY2U7XHJcbiAgICBmb3IgKDsgaSA8IGw7IGkrKykge1xyXG4gICAgICBwdXNoZWRJdGVtID0gdGhpcy5wdXNoZWRJdGVtc1tpXTtcclxuICAgICAgcHVzaGVkSXRlbS4kaXRlbS54ID0gcHVzaGVkSXRlbS5pdGVtLnggfHwgMDtcclxuICAgICAgcHVzaGVkSXRlbS4kaXRlbS55ID0gcHVzaGVkSXRlbS5pdGVtLnkgfHwgMDtcclxuICAgICAgcHVzaGVkSXRlbS4kaXRlbS5jb2xzID0gcHVzaGVkSXRlbS5pdGVtLmNvbHMgfHwgMTtcclxuICAgICAgcHVzaGVkSXRlbS4kaXRlbS5yb3cgPSBwdXNoZWRJdGVtLml0ZW0ucm93IHx8IDE7XHJcbiAgICAgIHB1c2hlZEl0ZW0uc2V0U2l6ZSgpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5wdXNoZWRJdGVtcyA9IFtdO1xyXG4gICAgdGhpcy5wdXNoZWRJdGVtc1BhdGggPSBbXTtcclxuICB9XHJcblxyXG4gIHNldFB1c2hlZEl0ZW1zKCk6IHZvaWQge1xyXG4gICAgbGV0IGkgPSAwO1xyXG4gICAgY29uc3QgbDogbnVtYmVyID0gdGhpcy5wdXNoZWRJdGVtcy5sZW5ndGg7XHJcbiAgICBsZXQgcHVzaGVkSXRlbTogR3JpZHN0ZXJJdGVtQ29tcG9uZW50SW50ZXJmYWNlO1xyXG4gICAgZm9yICg7IGkgPCBsOyBpKyspIHtcclxuICAgICAgcHVzaGVkSXRlbSA9IHRoaXMucHVzaGVkSXRlbXNbaV07XHJcbiAgICAgIHB1c2hlZEl0ZW0uY2hlY2tJdGVtQ2hhbmdlcyhwdXNoZWRJdGVtLiRpdGVtLCBwdXNoZWRJdGVtLml0ZW0pO1xyXG4gICAgfVxyXG4gICAgdGhpcy5wdXNoZWRJdGVtcyA9IFtdO1xyXG4gICAgdGhpcy5wdXNoZWRJdGVtc1BhdGggPSBbXTtcclxuICB9XHJcblxyXG4gIGNoZWNrUHVzaEJhY2soKTogdm9pZCB7XHJcbiAgICBsZXQgaTogbnVtYmVyID0gdGhpcy5wdXNoZWRJdGVtcy5sZW5ndGggLSAxO1xyXG4gICAgbGV0IGNoYW5nZSA9IGZhbHNlO1xyXG4gICAgZm9yICg7IGkgPiAtMTsgaS0tKSB7XHJcbiAgICAgIGlmICh0aGlzLmNoZWNrUHVzaGVkSXRlbSh0aGlzLnB1c2hlZEl0ZW1zW2ldLCBpKSkge1xyXG4gICAgICAgIGNoYW5nZSA9IHRydWU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmIChjaGFuZ2UpIHtcclxuICAgICAgdGhpcy5jaGVja1B1c2hCYWNrKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHB1c2goXHJcbiAgICBncmlkc3Rlckl0ZW06IEdyaWRzdGVySXRlbUNvbXBvbmVudEludGVyZmFjZSxcclxuICAgIGRpcmVjdGlvbjogc3RyaW5nXHJcbiAgKTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCBncmlkc3Rlckl0ZW1Db2xsaXNpb246IEdyaWRzdGVySXRlbUNvbXBvbmVudEludGVyZmFjZSB8IGJvb2xlYW4gPVxyXG4gICAgICB0aGlzLmdyaWRzdGVyLmNoZWNrQ29sbGlzaW9uKGdyaWRzdGVySXRlbS4kaXRlbSk7XHJcbiAgICBpZiAoXHJcbiAgICAgIGdyaWRzdGVySXRlbUNvbGxpc2lvbiAmJlxyXG4gICAgICBncmlkc3Rlckl0ZW1Db2xsaXNpb24gIT09IHRydWUgJiZcclxuICAgICAgZ3JpZHN0ZXJJdGVtQ29sbGlzaW9uICE9PSB0aGlzLmdyaWRzdGVySXRlbSAmJlxyXG4gICAgICBncmlkc3Rlckl0ZW1Db2xsaXNpb24uY2FuQmVSZXNpemVkKClcclxuICAgICkge1xyXG4gICAgICBsZXQgdHJ5UGF0dGVybjogYW55ID0gdGhpcy50cnlQYXR0ZXJuO1xyXG4gICAgICBpZiAoXHJcbiAgICAgICAgdHJ5UGF0dGVybltkaXJlY3Rpb25dLmNhbGwoXHJcbiAgICAgICAgICB0aGlzLFxyXG4gICAgICAgICAgZ3JpZHN0ZXJJdGVtQ29sbGlzaW9uLFxyXG4gICAgICAgICAgZ3JpZHN0ZXJJdGVtLFxyXG4gICAgICAgICAgZGlyZWN0aW9uXHJcbiAgICAgICAgKVxyXG4gICAgICApIHtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIGlmIChncmlkc3Rlckl0ZW1Db2xsaXNpb24gPT09IGZhbHNlKSB7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB0cnlTb3V0aChcclxuICAgIGdyaWRzdGVySXRlbUNvbGxpZGU6IEdyaWRzdGVySXRlbUNvbXBvbmVudEludGVyZmFjZSxcclxuICAgIGdyaWRzdGVySXRlbTogR3JpZHN0ZXJJdGVtQ29tcG9uZW50SW50ZXJmYWNlLFxyXG4gICAgZGlyZWN0aW9uOiBzdHJpbmdcclxuICApOiBib29sZWFuIHtcclxuICAgIGNvbnN0IGJhY2tVcFkgPSBncmlkc3Rlckl0ZW1Db2xsaWRlLiRpdGVtLnk7XHJcbiAgICBjb25zdCBiYWNrVXBSb3dzID0gZ3JpZHN0ZXJJdGVtQ29sbGlkZS4kaXRlbS5yb3dzO1xyXG4gICAgZ3JpZHN0ZXJJdGVtQ29sbGlkZS4kaXRlbS55ID1cclxuICAgICAgZ3JpZHN0ZXJJdGVtLiRpdGVtLnkgKyBncmlkc3Rlckl0ZW0uJGl0ZW0ucm93cztcclxuICAgIGdyaWRzdGVySXRlbUNvbGxpZGUuJGl0ZW0ucm93cyA9XHJcbiAgICAgIGJhY2tVcFJvd3MgKyBiYWNrVXBZIC0gZ3JpZHN0ZXJJdGVtQ29sbGlkZS4kaXRlbS55O1xyXG4gICAgaWYgKFxyXG4gICAgICAhdGhpcy5ncmlkc3Rlci5jaGVja0NvbGxpc2lvblR3b0l0ZW1zKFxyXG4gICAgICAgIGdyaWRzdGVySXRlbUNvbGxpZGUuJGl0ZW0sXHJcbiAgICAgICAgZ3JpZHN0ZXJJdGVtLiRpdGVtXHJcbiAgICAgICkgJiZcclxuICAgICAgIXRoaXMuZ3JpZHN0ZXIuY2hlY2tHcmlkQ29sbGlzaW9uKGdyaWRzdGVySXRlbUNvbGxpZGUuJGl0ZW0pXHJcbiAgICApIHtcclxuICAgICAgZ3JpZHN0ZXJJdGVtQ29sbGlkZS5zZXRTaXplKCk7XHJcbiAgICAgIHRoaXMuYWRkVG9QdXNoZWQoZ3JpZHN0ZXJJdGVtQ29sbGlkZSk7XHJcbiAgICAgIHRoaXMucHVzaChncmlkc3Rlckl0ZW0sIGRpcmVjdGlvbik7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgZ3JpZHN0ZXJJdGVtQ29sbGlkZS4kaXRlbS55ID0gYmFja1VwWTtcclxuICAgICAgZ3JpZHN0ZXJJdGVtQ29sbGlkZS4kaXRlbS5yb3dzID0gYmFja1VwUm93cztcclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgdHJ5Tm9ydGgoXHJcbiAgICBncmlkc3Rlckl0ZW1Db2xsaWRlOiBHcmlkc3Rlckl0ZW1Db21wb25lbnRJbnRlcmZhY2UsXHJcbiAgICBncmlkc3Rlckl0ZW06IEdyaWRzdGVySXRlbUNvbXBvbmVudEludGVyZmFjZSxcclxuICAgIGRpcmVjdGlvbjogc3RyaW5nXHJcbiAgKTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCBiYWNrVXBSb3dzID0gZ3JpZHN0ZXJJdGVtQ29sbGlkZS4kaXRlbS5yb3dzO1xyXG4gICAgZ3JpZHN0ZXJJdGVtQ29sbGlkZS4kaXRlbS5yb3dzID1cclxuICAgICAgZ3JpZHN0ZXJJdGVtLiRpdGVtLnkgLSBncmlkc3Rlckl0ZW1Db2xsaWRlLiRpdGVtLnk7XHJcbiAgICBpZiAoXHJcbiAgICAgICF0aGlzLmdyaWRzdGVyLmNoZWNrQ29sbGlzaW9uVHdvSXRlbXMoXHJcbiAgICAgICAgZ3JpZHN0ZXJJdGVtQ29sbGlkZS4kaXRlbSxcclxuICAgICAgICBncmlkc3Rlckl0ZW0uJGl0ZW1cclxuICAgICAgKSAmJlxyXG4gICAgICAhdGhpcy5ncmlkc3Rlci5jaGVja0dyaWRDb2xsaXNpb24oZ3JpZHN0ZXJJdGVtQ29sbGlkZS4kaXRlbSlcclxuICAgICkge1xyXG4gICAgICBncmlkc3Rlckl0ZW1Db2xsaWRlLnNldFNpemUoKTtcclxuICAgICAgdGhpcy5hZGRUb1B1c2hlZChncmlkc3Rlckl0ZW1Db2xsaWRlKTtcclxuICAgICAgdGhpcy5wdXNoKGdyaWRzdGVySXRlbSwgZGlyZWN0aW9uKTtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBncmlkc3Rlckl0ZW1Db2xsaWRlLiRpdGVtLnJvd3MgPSBiYWNrVXBSb3dzO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB0cnlFYXN0KFxyXG4gICAgZ3JpZHN0ZXJJdGVtQ29sbGlkZTogR3JpZHN0ZXJJdGVtQ29tcG9uZW50SW50ZXJmYWNlLFxyXG4gICAgZ3JpZHN0ZXJJdGVtOiBHcmlkc3Rlckl0ZW1Db21wb25lbnRJbnRlcmZhY2UsXHJcbiAgICBkaXJlY3Rpb246IHN0cmluZ1xyXG4gICk6IGJvb2xlYW4ge1xyXG4gICAgY29uc3QgYmFja1VwWCA9IGdyaWRzdGVySXRlbUNvbGxpZGUuJGl0ZW0ueDtcclxuICAgIGNvbnN0IGJhY2tVcENvbHMgPSBncmlkc3Rlckl0ZW1Db2xsaWRlLiRpdGVtLmNvbHM7XHJcbiAgICBncmlkc3Rlckl0ZW1Db2xsaWRlLiRpdGVtLnggPVxyXG4gICAgICBncmlkc3Rlckl0ZW0uJGl0ZW0ueCArIGdyaWRzdGVySXRlbS4kaXRlbS5jb2xzO1xyXG4gICAgZ3JpZHN0ZXJJdGVtQ29sbGlkZS4kaXRlbS5jb2xzID1cclxuICAgICAgYmFja1VwQ29scyArIGJhY2tVcFggLSBncmlkc3Rlckl0ZW1Db2xsaWRlLiRpdGVtLng7XHJcbiAgICBpZiAoXHJcbiAgICAgICF0aGlzLmdyaWRzdGVyLmNoZWNrQ29sbGlzaW9uVHdvSXRlbXMoXHJcbiAgICAgICAgZ3JpZHN0ZXJJdGVtQ29sbGlkZS4kaXRlbSxcclxuICAgICAgICBncmlkc3Rlckl0ZW0uJGl0ZW1cclxuICAgICAgKSAmJlxyXG4gICAgICAhdGhpcy5ncmlkc3Rlci5jaGVja0dyaWRDb2xsaXNpb24oZ3JpZHN0ZXJJdGVtQ29sbGlkZS4kaXRlbSlcclxuICAgICkge1xyXG4gICAgICBncmlkc3Rlckl0ZW1Db2xsaWRlLnNldFNpemUoKTtcclxuICAgICAgdGhpcy5hZGRUb1B1c2hlZChncmlkc3Rlckl0ZW1Db2xsaWRlKTtcclxuICAgICAgdGhpcy5wdXNoKGdyaWRzdGVySXRlbSwgZGlyZWN0aW9uKTtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBncmlkc3Rlckl0ZW1Db2xsaWRlLiRpdGVtLnggPSBiYWNrVXBYO1xyXG4gICAgICBncmlkc3Rlckl0ZW1Db2xsaWRlLiRpdGVtLmNvbHMgPSBiYWNrVXBDb2xzO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB0cnlXZXN0KFxyXG4gICAgZ3JpZHN0ZXJJdGVtQ29sbGlkZTogR3JpZHN0ZXJJdGVtQ29tcG9uZW50SW50ZXJmYWNlLFxyXG4gICAgZ3JpZHN0ZXJJdGVtOiBHcmlkc3Rlckl0ZW1Db21wb25lbnRJbnRlcmZhY2UsXHJcbiAgICBkaXJlY3Rpb246IHN0cmluZ1xyXG4gICk6IGJvb2xlYW4ge1xyXG4gICAgY29uc3QgYmFja1VwQ29scyA9IGdyaWRzdGVySXRlbUNvbGxpZGUuJGl0ZW0uY29scztcclxuICAgIGdyaWRzdGVySXRlbUNvbGxpZGUuJGl0ZW0uY29scyA9XHJcbiAgICAgIGdyaWRzdGVySXRlbS4kaXRlbS54IC0gZ3JpZHN0ZXJJdGVtQ29sbGlkZS4kaXRlbS54O1xyXG4gICAgaWYgKFxyXG4gICAgICAhdGhpcy5ncmlkc3Rlci5jaGVja0NvbGxpc2lvblR3b0l0ZW1zKFxyXG4gICAgICAgIGdyaWRzdGVySXRlbUNvbGxpZGUuJGl0ZW0sXHJcbiAgICAgICAgZ3JpZHN0ZXJJdGVtLiRpdGVtXHJcbiAgICAgICkgJiZcclxuICAgICAgIXRoaXMuZ3JpZHN0ZXIuY2hlY2tHcmlkQ29sbGlzaW9uKGdyaWRzdGVySXRlbUNvbGxpZGUuJGl0ZW0pXHJcbiAgICApIHtcclxuICAgICAgZ3JpZHN0ZXJJdGVtQ29sbGlkZS5zZXRTaXplKCk7XHJcbiAgICAgIHRoaXMuYWRkVG9QdXNoZWQoZ3JpZHN0ZXJJdGVtQ29sbGlkZSk7XHJcbiAgICAgIHRoaXMucHVzaChncmlkc3Rlckl0ZW0sIGRpcmVjdGlvbik7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgZ3JpZHN0ZXJJdGVtQ29sbGlkZS4kaXRlbS5jb2xzID0gYmFja1VwQ29scztcclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYWRkVG9QdXNoZWQoZ3JpZHN0ZXJJdGVtOiBHcmlkc3Rlckl0ZW1Db21wb25lbnRJbnRlcmZhY2UpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLnB1c2hlZEl0ZW1zLmluZGV4T2YoZ3JpZHN0ZXJJdGVtKSA8IDApIHtcclxuICAgICAgdGhpcy5wdXNoZWRJdGVtcy5wdXNoKGdyaWRzdGVySXRlbSk7XHJcbiAgICAgIHRoaXMucHVzaGVkSXRlbXNQYXRoLnB1c2goW1xyXG4gICAgICAgIHtcclxuICAgICAgICAgIHg6IGdyaWRzdGVySXRlbS5pdGVtLnggfHwgMCxcclxuICAgICAgICAgIHk6IGdyaWRzdGVySXRlbS5pdGVtLnkgfHwgMCxcclxuICAgICAgICAgIGNvbHM6IGdyaWRzdGVySXRlbS5pdGVtLmNvbHMgfHwgMCxcclxuICAgICAgICAgIHJvd3M6IGdyaWRzdGVySXRlbS5pdGVtLnJvd3MgfHwgMFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgeDogZ3JpZHN0ZXJJdGVtLiRpdGVtLngsXHJcbiAgICAgICAgICB5OiBncmlkc3Rlckl0ZW0uJGl0ZW0ueSxcclxuICAgICAgICAgIGNvbHM6IGdyaWRzdGVySXRlbS4kaXRlbS5jb2xzLFxyXG4gICAgICAgICAgcm93czogZ3JpZHN0ZXJJdGVtLiRpdGVtLnJvd3NcclxuICAgICAgICB9XHJcbiAgICAgIF0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc3QgaSA9IHRoaXMucHVzaGVkSXRlbXMuaW5kZXhPZihncmlkc3Rlckl0ZW0pO1xyXG4gICAgICB0aGlzLnB1c2hlZEl0ZW1zUGF0aFtpXS5wdXNoKHtcclxuICAgICAgICB4OiBncmlkc3Rlckl0ZW0uJGl0ZW0ueCxcclxuICAgICAgICB5OiBncmlkc3Rlckl0ZW0uJGl0ZW0ueSxcclxuICAgICAgICBjb2xzOiBncmlkc3Rlckl0ZW0uJGl0ZW0uY29scyxcclxuICAgICAgICByb3dzOiBncmlkc3Rlckl0ZW0uJGl0ZW0ucm93c1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVtb3ZlRnJvbVB1c2hlZChpOiBudW1iZXIpOiB2b2lkIHtcclxuICAgIGlmIChpID4gLTEpIHtcclxuICAgICAgdGhpcy5wdXNoZWRJdGVtcy5zcGxpY2UoaSwgMSk7XHJcbiAgICAgIHRoaXMucHVzaGVkSXRlbXNQYXRoLnNwbGljZShpLCAxKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgY2hlY2tQdXNoZWRJdGVtKFxyXG4gICAgcHVzaGVkSXRlbTogR3JpZHN0ZXJJdGVtQ29tcG9uZW50SW50ZXJmYWNlLFxyXG4gICAgaTogbnVtYmVyXHJcbiAgKTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCBwYXRoID0gdGhpcy5wdXNoZWRJdGVtc1BhdGhbaV07XHJcbiAgICBsZXQgaiA9IHBhdGgubGVuZ3RoIC0gMjtcclxuICAgIGxldCBsYXN0UG9zaXRpb246IHsgeDogbnVtYmVyOyB5OiBudW1iZXI7IGNvbHM6IG51bWJlcjsgcm93czogbnVtYmVyIH07XHJcbiAgICBsZXQgeDtcclxuICAgIGxldCB5O1xyXG4gICAgbGV0IGNvbHM7XHJcbiAgICBsZXQgcm93cztcclxuICAgIGZvciAoOyBqID4gLTE7IGotLSkge1xyXG4gICAgICBsYXN0UG9zaXRpb24gPSBwYXRoW2pdO1xyXG4gICAgICB4ID0gcHVzaGVkSXRlbS4kaXRlbS54O1xyXG4gICAgICB5ID0gcHVzaGVkSXRlbS4kaXRlbS55O1xyXG4gICAgICBjb2xzID0gcHVzaGVkSXRlbS4kaXRlbS5jb2xzO1xyXG4gICAgICByb3dzID0gcHVzaGVkSXRlbS4kaXRlbS5yb3dzO1xyXG4gICAgICBwdXNoZWRJdGVtLiRpdGVtLnggPSBsYXN0UG9zaXRpb24ueDtcclxuICAgICAgcHVzaGVkSXRlbS4kaXRlbS55ID0gbGFzdFBvc2l0aW9uLnk7XHJcbiAgICAgIHB1c2hlZEl0ZW0uJGl0ZW0uY29scyA9IGxhc3RQb3NpdGlvbi5jb2xzO1xyXG4gICAgICBwdXNoZWRJdGVtLiRpdGVtLnJvd3MgPSBsYXN0UG9zaXRpb24ucm93cztcclxuICAgICAgaWYgKCF0aGlzLmdyaWRzdGVyLmZpbmRJdGVtV2l0aEl0ZW0ocHVzaGVkSXRlbS4kaXRlbSkpIHtcclxuICAgICAgICBwdXNoZWRJdGVtLnNldFNpemUoKTtcclxuICAgICAgICBwYXRoLnNwbGljZShqICsgMSwgcGF0aC5sZW5ndGggLSAxIC0gaik7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcHVzaGVkSXRlbS4kaXRlbS54ID0geDtcclxuICAgICAgICBwdXNoZWRJdGVtLiRpdGVtLnkgPSB5O1xyXG4gICAgICAgIHB1c2hlZEl0ZW0uJGl0ZW0uY29scyA9IGNvbHM7XHJcbiAgICAgICAgcHVzaGVkSXRlbS4kaXRlbS5yb3dzID0gcm93cztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKHBhdGgubGVuZ3RoIDwgMikge1xyXG4gICAgICB0aGlzLnJlbW92ZUZyb21QdXNoZWQoaSk7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxufVxyXG4iXX0=
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZHN0ZXJSZW5kZXJlci5pbnRlcmZhY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9yYS1kYXNoYm9hcmQtZnJhbWV3b3JrL3NyYy9ncmlkc3Rlci9saWIvZ3JpZHN0ZXJSZW5kZXJlci5pbnRlcmZhY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBpbnRlcmZhY2UgQ29tbW9uR3JpZFN0eWxlIHtcclxuICBba2V5OiBzdHJpbmddOiBzdHJpbmc7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgQ29tbW9uR3JpZENhY2hlZFN0eWxlIHtcclxuICB3aWR0aDogbnVtYmVyO1xyXG4gIGhlaWdodDogbnVtYmVyO1xyXG4gIHN0eWxlOiBDb21tb25HcmlkU3R5bGU7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgR3JpZENvbHVtbkNhY2hlZFN0eWxlIGV4dGVuZHMgQ29tbW9uR3JpZENhY2hlZFN0eWxlIHtcclxuICBsZWZ0OiBudW1iZXI7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgR3JpZFJvd0NhY2hlZFN0eWxlIGV4dGVuZHMgQ29tbW9uR3JpZENhY2hlZFN0eWxlIHtcclxuICB0b3A6IG51bWJlcjtcclxufVxyXG4iXX0=
@@ -1,274 +0,0 @@
1
- import { DirTypes, GridType } from './gridsterConfig.interface';
2
- export class GridsterRenderer {
3
- constructor(gridster) {
4
- this.gridster = gridster;
5
- /**
6
- * Caches the last grid column styles.
7
- * This improves the grid responsiveness by caching and reusing the last style object instead of creating a new one.
8
- */
9
- this.lastGridColumnStyles = {};
10
- /**
11
- * Caches the last grid column styles.
12
- * This improves the grid responsiveness by caching and reusing the last style object instead of creating a new one.
13
- */
14
- this.lastGridRowStyles = {};
15
- }
16
- destroy() {
17
- this.gridster = null;
18
- }
19
- updateItem(el, item, renderer) {
20
- if (this.gridster.mobile) {
21
- this.clearCellPosition(renderer, el);
22
- if (this.gridster.$options.keepFixedHeightInMobile) {
23
- renderer.setStyle(el, 'height', (item.rows - 1) * this.gridster.$options.margin +
24
- item.rows * this.gridster.$options.fixedRowHeight +
25
- 'px');
26
- }
27
- else {
28
- renderer.setStyle(el, 'height', (item.rows * this.gridster.curWidth) / item.cols + 'px');
29
- }
30
- if (this.gridster.$options.keepFixedWidthInMobile) {
31
- renderer.setStyle(el, 'width', this.gridster.$options.fixedColWidth + 'px');
32
- }
33
- else {
34
- renderer.setStyle(el, 'width', '');
35
- }
36
- renderer.setStyle(el, 'margin-bottom', this.gridster.$options.margin + 'px');
37
- renderer.setStyle(el, DirTypes.LTR ? 'margin-right' : 'margin-left', '');
38
- }
39
- else {
40
- const x = Math.round(this.gridster.curColWidth * item.x);
41
- const y = Math.round(this.gridster.curRowHeight * item.y);
42
- const width = this.gridster.curColWidth * item.cols - this.gridster.$options.margin - 1; // added -1 to avoid the right side of widgets not showing borders
43
- const height = this.gridster.curRowHeight * item.rows - this.gridster.$options.margin;
44
- // set the cell style
45
- this.setCellPosition(renderer, el, x, y);
46
- renderer.setStyle(el, 'width', width + 'px');
47
- renderer.setStyle(el, 'height', height + 'px');
48
- let marginBottom = null;
49
- let marginRight = null;
50
- if (this.gridster.$options.outerMargin) {
51
- if (this.gridster.rows === item.rows + item.y) {
52
- if (this.gridster.$options.outerMarginBottom !== null) {
53
- marginBottom = this.gridster.$options.outerMarginBottom + 'px';
54
- }
55
- else {
56
- marginBottom = this.gridster.$options.margin + 'px';
57
- }
58
- }
59
- if (this.gridster.columns === item.cols + item.x) {
60
- if (this.gridster.$options.outerMarginBottom !== null) {
61
- marginRight = this.gridster.$options.outerMarginRight + 'px';
62
- }
63
- else {
64
- marginRight = this.gridster.$options.margin + 'px';
65
- }
66
- }
67
- }
68
- renderer.setStyle(el, 'margin-bottom', marginBottom);
69
- renderer.setStyle(el, DirTypes.LTR ? 'margin-right' : 'margin-left', marginRight);
70
- }
71
- }
72
- updateGridster() {
73
- let addClass = '';
74
- let removeClass1 = '';
75
- let removeClass2 = '';
76
- let removeClass3 = '';
77
- if (this.gridster.$options.gridType === GridType.Fit) {
78
- addClass = GridType.Fit;
79
- removeClass1 = GridType.ScrollVertical;
80
- removeClass2 = GridType.ScrollHorizontal;
81
- removeClass3 = GridType.Fixed;
82
- }
83
- else if (this.gridster.$options.gridType === GridType.ScrollVertical) {
84
- this.gridster.curRowHeight =
85
- this.gridster.curColWidth * this.gridster.$options.rowHeightRatio;
86
- addClass = GridType.ScrollVertical;
87
- removeClass1 = GridType.Fit;
88
- removeClass2 = GridType.ScrollHorizontal;
89
- removeClass3 = GridType.Fixed;
90
- }
91
- else if (this.gridster.$options.gridType === GridType.ScrollHorizontal) {
92
- const widthRatio = this.gridster.$options.rowHeightRatio;
93
- const calWidthRatio = widthRatio >= 1 ? widthRatio : widthRatio + 1;
94
- this.gridster.curColWidth = this.gridster.curRowHeight * calWidthRatio;
95
- addClass = GridType.ScrollHorizontal;
96
- removeClass1 = GridType.Fit;
97
- removeClass2 = GridType.ScrollVertical;
98
- removeClass3 = GridType.Fixed;
99
- }
100
- else if (this.gridster.$options.gridType === GridType.Fixed) {
101
- this.gridster.curColWidth =
102
- this.gridster.$options.fixedColWidth +
103
- (this.gridster.$options.ignoreMarginInRow
104
- ? 0
105
- : this.gridster.$options.margin);
106
- this.gridster.curRowHeight =
107
- this.gridster.$options.fixedRowHeight +
108
- (this.gridster.$options.ignoreMarginInRow
109
- ? 0
110
- : this.gridster.$options.margin);
111
- addClass = GridType.Fixed;
112
- removeClass1 = GridType.Fit;
113
- removeClass2 = GridType.ScrollVertical;
114
- removeClass3 = GridType.ScrollHorizontal;
115
- }
116
- else if (this.gridster.$options.gridType === GridType.VerticalFixed) {
117
- this.gridster.curRowHeight =
118
- this.gridster.$options.fixedRowHeight +
119
- (this.gridster.$options.ignoreMarginInRow
120
- ? 0
121
- : this.gridster.$options.margin);
122
- addClass = GridType.ScrollVertical;
123
- removeClass1 = GridType.Fit;
124
- removeClass2 = GridType.ScrollHorizontal;
125
- removeClass3 = GridType.Fixed;
126
- }
127
- else if (this.gridster.$options.gridType === GridType.HorizontalFixed) {
128
- this.gridster.curColWidth =
129
- this.gridster.$options.fixedColWidth +
130
- (this.gridster.$options.ignoreMarginInRow
131
- ? 0
132
- : this.gridster.$options.margin);
133
- addClass = GridType.ScrollHorizontal;
134
- removeClass1 = GridType.Fit;
135
- removeClass2 = GridType.ScrollVertical;
136
- removeClass3 = GridType.Fixed;
137
- }
138
- if (this.gridster.mobile ||
139
- (this.gridster.$options.setGridSize &&
140
- this.gridster.$options.gridType !== GridType.Fit)) {
141
- this.gridster.renderer.removeClass(this.gridster.el, addClass);
142
- }
143
- else {
144
- this.gridster.renderer.addClass(this.gridster.el, addClass);
145
- }
146
- this.gridster.renderer.removeClass(this.gridster.el, removeClass1);
147
- this.gridster.renderer.removeClass(this.gridster.el, removeClass2);
148
- this.gridster.renderer.removeClass(this.gridster.el, removeClass3);
149
- }
150
- getGridColumnStyle(i) {
151
- // generates the new style
152
- const newPos = {
153
- left: this.gridster.curColWidth * i,
154
- width: this.gridster.curColWidth - this.gridster.$options.margin,
155
- height: this.gridster.gridRows.length * this.gridster.curRowHeight -
156
- this.gridster.$options.margin,
157
- style: {}
158
- };
159
- newPos.style = {
160
- ...this.getLeftPosition(newPos.left),
161
- width: newPos.width + 'px',
162
- height: newPos.height + 'px'
163
- };
164
- // use the last cached style if it has same values as the generated one
165
- const last = this.lastGridColumnStyles[i];
166
- if (last &&
167
- last.left === newPos.left &&
168
- last.width === newPos.width &&
169
- last.height === newPos.height) {
170
- return last.style;
171
- }
172
- // cache and set new style
173
- this.lastGridColumnStyles[i] = newPos;
174
- return newPos.style;
175
- }
176
- getGridRowStyle(i) {
177
- // generates the new style
178
- const newPos = {
179
- top: this.gridster.curRowHeight * i,
180
- width: this.gridster.gridColumns.length * this.gridster.curColWidth +
181
- this.gridster.$options.margin,
182
- height: this.gridster.curRowHeight - this.gridster.$options.margin,
183
- style: {}
184
- };
185
- newPos.style = {
186
- ...this.getTopPosition(newPos.top),
187
- width: newPos.width + 'px',
188
- height: newPos.height + 'px'
189
- };
190
- // use the last cached style if it has same values as the generated one
191
- const last = this.lastGridRowStyles[i];
192
- if (last &&
193
- last.top === newPos.top &&
194
- last.width === newPos.width &&
195
- last.height === newPos.height) {
196
- return last.style;
197
- }
198
- // cache and set new style
199
- this.lastGridRowStyles[i] = newPos;
200
- return newPos.style;
201
- }
202
- getLeftPosition(d) {
203
- const dPosition = this.gridster.$options.dirType === DirTypes.RTL ? -d : d;
204
- if (this.gridster.$options.useTransformPositioning) {
205
- return {
206
- transform: 'translateX(' + dPosition + 'px)'
207
- };
208
- }
209
- else {
210
- return {
211
- left: this.getLeftMargin() + dPosition + 'px'
212
- };
213
- }
214
- }
215
- getTopPosition(d) {
216
- if (this.gridster.$options.useTransformPositioning) {
217
- return {
218
- transform: 'translateY(' + d + 'px)'
219
- };
220
- }
221
- else {
222
- return {
223
- top: this.getTopMargin() + d + 'px'
224
- };
225
- }
226
- }
227
- clearCellPosition(renderer, el) {
228
- if (this.gridster.$options.useTransformPositioning) {
229
- renderer.setStyle(el, 'transform', '');
230
- }
231
- else {
232
- renderer.setStyle(el, 'top', '');
233
- renderer.setStyle(el, 'left', '');
234
- }
235
- }
236
- setCellPosition(renderer, el, x, y) {
237
- const xPosition = this.gridster.$options.dirType === DirTypes.RTL ? -x : x;
238
- if (this.gridster.$options.useTransformPositioning) {
239
- const transform = 'translate3d(' + xPosition + 'px, ' + y + 'px, 0)';
240
- renderer.setStyle(el, 'transform', transform);
241
- }
242
- else {
243
- renderer.setStyle(el, 'left', this.getLeftMargin() + xPosition + 'px');
244
- renderer.setStyle(el, 'top', this.getTopMargin() + y + 'px');
245
- }
246
- }
247
- getLeftMargin() {
248
- if (this.gridster.$options.outerMargin) {
249
- if (this.gridster.$options.outerMarginLeft !== null) {
250
- return this.gridster.$options.outerMarginLeft;
251
- }
252
- else {
253
- return this.gridster.$options.margin;
254
- }
255
- }
256
- else {
257
- return 0;
258
- }
259
- }
260
- getTopMargin() {
261
- if (this.gridster.$options.outerMargin) {
262
- if (this.gridster.$options.outerMarginTop !== null) {
263
- return this.gridster.$options.outerMarginTop;
264
- }
265
- else {
266
- return this.gridster.$options.margin;
267
- }
268
- }
269
- else {
270
- return 0;
271
- }
272
- }
273
- }
274
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZHN0ZXJSZW5kZXJlci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcmEtZGFzaGJvYXJkLWZyYW1ld29yay9zcmMvZ3JpZHN0ZXIvbGliL2dyaWRzdGVyUmVuZGVyZXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFHQSxPQUFPLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBUWhFLE1BQU0sT0FBTyxnQkFBZ0I7SUFhM0IsWUFBb0IsUUFBb0M7UUFBcEMsYUFBUSxHQUFSLFFBQVEsQ0FBNEI7UUFaeEQ7OztXQUdHO1FBQ0sseUJBQW9CLEdBQTBDLEVBQUUsQ0FBQztRQUV6RTs7O1dBR0c7UUFDSyxzQkFBaUIsR0FBdUMsRUFBRSxDQUFDO0lBRVIsQ0FBQztJQUU1RCxPQUFPO1FBQ0wsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFLLENBQUM7SUFDeEIsQ0FBQztJQUVELFVBQVUsQ0FBQyxFQUFXLEVBQUUsSUFBa0IsRUFBRSxRQUFtQjtRQUM3RCxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDekIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUNyQyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLHVCQUF1QixFQUFFLENBQUM7Z0JBQ25ELFFBQVEsQ0FBQyxRQUFRLENBQ2YsRUFBRSxFQUNGLFFBQVEsRUFDUixDQUFDLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsTUFBTTtvQkFDN0MsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxjQUFjO29CQUNqRCxJQUFJLENBQ1AsQ0FBQztZQUNKLENBQUM7aUJBQU0sQ0FBQztnQkFDTixRQUFR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dkMsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxlQUFlLEtBQUssSUFBSSxFQUFFLENBQUM7Z0JBQ3BELE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUFDO1lBQ2hELENBQUM7aUJBQU0sQ0FBQztnQkFDTixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQztZQUN2QyxDQUFDO1FBQ0gsQ0FBQzthQUFNLENBQUM7WUFDTixPQUFPLENBQUMsQ0FBQztRQUNYLENBQUM7SUFDSCxDQUFDO0lBRUQsWUFBWTtRQUNWLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDdkMsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxjQUFjLEtBQUssSUFBSSxFQUFFLENBQUM7Z0JBQ25ELE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUFDO1lBQy9DLENBQUM7aUJBQU0sQ0FBQztnQkFDTixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQztZQUN2QyxDQUFDO1FBQ0gsQ0FBQzthQUFNLENBQUM7WUFDTixPQUFPLENBQUMsQ0FBQztRQUNYLENBQUM7SUFDSCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBSZW5kZXJlcjIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbmltcG9ydCB7IEdyaWRzdGVyQ29tcG9uZW50SW50ZXJmYWNlIH0gZnJvbSAnLi9ncmlkc3Rlci5pbnRlcmZhY2UnO1xyXG5pbXBvcnQgeyBEaXJUeXBlcywgR3JpZFR5cGUgfSBmcm9tICcuL2dyaWRzdGVyQ29uZmlnLmludGVyZmFjZSc7XHJcbmltcG9ydCB7IEdyaWRzdGVySXRlbSB9IGZyb20gJy4vZ3JpZHN0ZXJJdGVtLmludGVyZmFjZSc7XHJcbmltcG9ydCB7XHJcbiAgQ29tbW9uR3JpZFN0eWxlLFxyXG4gIEdyaWRDb2x1bW5DYWNoZWRTdHlsZSxcclxuICBHcmlkUm93Q2FjaGVkU3R5bGVcclxufSBmcm9tICcuL2dyaWRzdGVyUmVuZGVyZXIuaW50ZXJmYWNlJztcclxuXHJcbmV4cG9ydCBjbGFzcyBHcmlkc3RlclJlbmRlcmVyIHtcclxuICAvKipcclxuICAgKiBDYWNoZXMgdGhlIGxhc3QgZ3JpZCBjb2x1bW4gc3R5bGVzLlxyXG4gICAqIFRoaXMgaW1wcm92ZXMgdGhlIGdyaWQgcmVzcG9uc2l2ZW5lc3MgYnkgY2FjaGluZyBhbmQgcmV1c2luZyB0aGUgbGFzdCBzdHlsZSBvYmplY3QgaW5zdGVhZCBvZiBjcmVhdGluZyBhIG5ldyBvbmUuXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBsYXN0R3JpZENvbHVtblN0eWxlczogUmVjb3JkPG51bWJlciwgR3JpZENvbHVtbkNhY2hlZFN0eWxlPiA9IHt9O1xyXG5cclxuICAvKipcclxuICAgKiBDYWNoZXMgdGhlIGxhc3QgZ3JpZCBjb2x1bW4gc3R5bGVzLlxyXG4gICAqIFRoaXMgaW1wcm92ZXMgdGhlIGdyaWQgcmVzcG9uc2l2ZW5lc3MgYnkgY2FjaGluZyBhbmQgcmV1c2luZyB0aGUgbGFzdCBzdHlsZSBvYmplY3QgaW5zdGVhZCBvZiBjcmVhdGluZyBhIG5ldyBvbmUuXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBsYXN0R3JpZFJvd1N0eWxlczogUmVjb3JkPG51bWJlciwgR3JpZFJvd0NhY2hlZFN0eWxlPiA9IHt9O1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGdyaWRzdGVyOiBHcmlkc3RlckNvbXBvbmVudEludGVyZmFjZSkge31cclxuXHJcbiAgZGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMuZ3JpZHN0ZXIgPSBudWxsITtcclxuICB9XHJcblxyXG4gIHVwZGF0ZUl0ZW0oZWw6IEVsZW1lbnQsIGl0ZW06IEdyaWRzdGVySXRlbSwgcmVuZGVyZXI6IFJlbmRlcmVyMik6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuZ3JpZHN0ZXIubW9iaWxlKSB7XHJcbiAgICAgIHRoaXMuY2xlYXJDZWxsUG9zaXRpb24ocmVuZGVyZXIsIGVsKTtcclxuICAgICAgaWYgKHRoaXMuZ3JpZHN0ZXIuJG9wdGlvbnMua2VlcEZpeGVkSGVpZ2h0SW5Nb2JpbGUpIHtcclxuICAgICAgICByZW5kZXJlci5zZXRTdHlsZShcclxuICAgICAgICAgIGVsLFxyXG4gICAgICAgICAgJ2hlaWdodCcsXHJcbiAgICAgICAgICAoaXRlbS5yb3dzIC0gMSkgKiB0aGlzLmdyaWRzdGVyLiRvcHRpb25zLm1hcmdpbiArXHJcbiAgICAgICAgICAgIGl0ZW0ucm93cyAqIHRoaXMuZ3JpZHN0ZXIuJG9wdGlvbnMuZml4ZWRSb3dIZWlnaHQgK1xyXG4gICAgICAgICAgICAncHgnXHJcbiAgICAgICAgKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZW5kZXJlci5zZXRTdHlsZShcclxuICAgICAgICAgIGVsLFxyXG4gICAgICAgICAgJ2hlaWdodCcsXHJcbiAgICAgICAgICAoaXRlbS5yb3dzICogdGhpcy5ncmlkc3Rlci5jdXJXaWR0aCkgLyBpdGVtLmNvbHMgKyAncHgnXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy5ncmlkc3Rlci4kb3B0aW9ucy5rZWVwRml4ZWRXaWR0aEluTW9iaWxlKSB7XHJcbiAgICAgICAgcmVuZGVyZXIuc2V0U3R5bGUoXHJcbiAgICAgICAgICBlbCxcclxuICAgICAgICAgICd3aWR0aCcsXHJcbiAgICAgICAgICB0aGlzLmdyaWRzdGVyLiRvcHRpb25zLmZpeGVkQ29sV2lkdGggKyAncHgnXHJcbiAgICAgICAgKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZW5kZXJlci5zZXRTdHlsZShlbCwgJ3dpZHRoJywgJycpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICByZW5kZXJlci5zZXRTdHlsZShcclxuICAgICAgICBlbCxcclxuICAgICAgICAnbWFyZ2luLWJvdHRvbScsXHJcbiAgICAgICAgdGhpcy5ncmlkc3Rlci4kb3B0aW9ucy5tYXJnaW4gKyAncHgnXHJcbiAgICAgICk7XHJcbiAgICAgIHJlbmRlcmVyLnNldFN0eWxlKGVsLCBEaXJUeXBlcy5MVFIgPyAnbWFyZ2luLXJpZ2h0JyA6ICdtYXJnaW4tbGVmdCcsICcnKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnN0IHggPSBNYXRoLnJvdW5kKHRoaXMuZ3JpZHN0ZXIuY3VyQ29sV2lkdGggKiBpdGVtLngpO1xyXG4gICAgICBjb25zdCB5ID0gTWF0aC5yb3VuZCh0aGlzLmdyaWRzdGVyLmN1clJvd0hlaWdodCAqIGl0ZW0ueSk7XHJcbiAgICAgIGNvbnN0IHdpZHRoID1cclxuICAgICAgICB0aGlzLmdyaWRzdGVyLmN1ckNvbFdpZHRoICogaXRlbS5jb2xzIC0gdGhpcy5ncmlkc3Rlci4kb3B0aW9ucy5tYXJnaW4gLSAxOyAgLy8gYWRkZWQgLTEgdG8gYXZvaWQgdGhlIHJpZ2h0IHNpZGUgb2Ygd2lkZ2V0cyBub3Qgc2hvd2luZyBib3JkZXJzXHJcbiAgICAgIGNvbnN0IGhlaWdodCA9XHJcbiAgICAgICAgdGhpcy5ncmlkc3Rlci5jdXJSb3dIZWlnaHQgKiBpdGVtLnJvd3MgLSB0aGlzLmdyaWRzdGVyLiRvcHRpb25zLm1hcmdpbjtcclxuICAgICAgLy8gc2V0IHRoZSBjZWxsIHN0eWxlXHJcbiAgICAgIHRoaXMuc2V0Q2VsbFBvc2l0aW9uKHJlbmRlcmVyLCBlbCwgeCwgeSk7XHJcbiAgICAgIHJlbmRlcmVyLnNldFN0eWxlKGVsLCAnd2lkdGgnLCB3aWR0aCArICdweCcpO1xyXG4gICAgICByZW5kZXJlci5zZXRTdHlsZShlbCwgJ2hlaWdodCcsIGhlaWdodCArICdweCcpO1xyXG4gICAgICBsZXQgbWFyZ2luQm90dG9tOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcclxuICAgICAgbGV0IG1hcmdpblJpZ2h0OiBzdHJpbmcgfCBudWxsID0gbnVsbDtcclxuICAgICAgaWYgKHRoaXMuZ3JpZHN0ZXIuJG9wdGlvbnMub3V0ZXJNYXJnaW4pIHtcclxuICAgICAgICBpZiAodGhpcy5ncmlkc3Rlci5yb3dzID09PSBpdGVtLnJvd3MgKyBpdGVtLnkpIHtcclxuICAgICAgICAgIGlmICh0aGlzLmdyaWRzdGVyLiRvcHRpb25zLm91dGVyTWFyZ2luQm90dG9tICE9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIG1hcmdpbkJvdHRvbSA9IHRoaXMuZ3JpZHN0ZXIuJG9wdGlvbnMub3V0ZXJNYXJnaW5Cb3R0b20gKyAncHgnO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgbWFyZ2luQm90dG9tID0gdGhpcy5ncmlkc3Rlci4kb3B0aW9ucy5tYXJnaW4gKyAncHgnO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5ncmlkc3Rlci5jb2x1bW5zID09PSBpdGVtLmNvbHMgKyBpdGVtLngpIHtcclxuICAgICAgICAgIGlmICh0aGlzLmdyaWRzdGVyLiRvcHRpb25zLm91dGVyTWFyZ2luQm90dG9tICE9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIG1hcmdpblJpZ2h0ID0gdGhpcy5ncmlkc3Rlci4kb3B0aW9ucy5vdXRlck1hcmdpblJpZ2h0ICsgJ3B4JztcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIG1hcmdpblJpZ2h0ID0gdGhpcy5ncmlkc3Rlci4kb3B0aW9ucy5tYXJnaW4gKyAncHgnO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgcmVuZGVyZXIuc2V0U3R5bGUoZWwsICdtYXJnaW4tYm90dG9tJywgbWFyZ2luQm90dG9tKTtcclxuICAgICAgcmVuZGVyZXIuc2V0U3R5bGUoXHJcbiAgICAgICAgZWwsXHJcbiAgICAgICAgRGlyVHlwZXMuTFRSID8gJ21hcmdpbi1yaWdodCcgOiAnbWFyZ2luLWxlZnQnLFxyXG4gICAgICAgIG1hcmdpblJpZ2h0XHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB1cGRhdGVHcmlkc3RlcigpOiB2b2lkIHtcclxuICAgIGxldCBhZGRDbGFzcyA9ICcnO1xyXG4gICAgbGV0IHJlbW92ZUNsYXNzMSA9ICcnO1xyXG4gICAgbGV0IHJlbW92ZUNsYXNzMiA9ICcnO1xyXG4gICAgbGV0IHJlbW92ZUNsYXNzMyA9ICcnO1xyXG4gICAgaWYgKHRoaXMuZ3JpZHN0ZXIuJG9wdGlvbnMuZ3JpZFR5cGUgPT09IEdyaWRUeXBlLkZpdCkge1xyXG4gICAgICBhZGRDbGFzcyA9IEdyaWRUeXBlLkZpdDtcclxuICAgICAgcmVtb3ZlQ2xhc3MxID0gR3JpZFR5cGUuU2Nyb2xsVmVydGljYWw7XHJcbiAgICAgIHJlbW92ZUNsYXNzMiA9IEdyaWRUeXBlLlNjcm9sbEhvcml6b250YWw7XHJcbiAgICAgIHJlbW92ZUNsYXNzMyA9IEdyaWRUeXBlLkZpeGVkO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLmdyaWRzdGVyLiRvcHRpb25zLmdyaWRUeXBlID09PSBHcmlkVHlwZS5TY3JvbGxWZXJ0aWNhbCkge1xyXG4gICAgICB0aGlzLmdyaWRzdGVyLmN1clJvd0hlaWdodCA9XHJcbiAgICAgICAgdGhpcy5ncmlkc3Rlci5jdXJDb2xXaWR0aCAqIHRoaXMuZ3JpZHN0ZXIuJG9wdGlvbnMucm93SGVpZ2h0UmF0aW87XHJcbiAgICAgIGFkZENsYXNzID0gR3JpZFR5cGUuU2Nyb2xsVmVydGljYWw7XHJcbiAgICAgIHJlbW92ZUNsYXNzMSA9IEdyaWRUeXBlLkZpdDtcclxuICAgICAgcmVtb3ZlQ2xhc3MyID0gR3JpZFR5cGUuU2Nyb2xsSG9yaXpvbnRhbDtcclxuICAgICAgcmVtb3ZlQ2xhc3MzID0gR3JpZFR5cGUuRml4ZWQ7XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuZ3JpZHN0ZXIuJG9wdGlvbnMuZ3JpZFR5cGUgPT09IEdyaWRUeXBlLlNjcm9sbEhvcml6b250YWwpIHtcclxuICAgICAgY29uc3Qgd2lkdGhSYXRpbyA9IHRoaXMuZ3JpZHN0ZXIuJG9wdGlvbnMucm93SGVpZ2h0UmF0aW87XHJcbiAgICAgIGNvbnN0IGNhbFdpZHRoUmF0aW8gPSB3aWR0aFJhdGlvID49IDEgPyB3aWR0aFJhdGlvIDogd2lkdGhSYXRpbyArIDE7XHJcbiAgICAgIHRoaXMuZ3JpZHN0ZXIuY3VyQ29sV2lkdGggPSB0aGlzLmdyaWRzdGVyLmN1clJvd0hlaWdodCAqIGNhbFdpZHRoUmF0aW87XHJcbiAgICAgIGFkZENsYXNzID0gR3JpZFR5cGUuU2Nyb2xsSG9yaXpvbnRhbDtcclxuICAgICAgcmVtb3ZlQ2xhc3MxID0gR3JpZFR5cGUuRml0O1xyXG4gICAgICByZW1vdmVDbGFzczIgPSBHcmlkVHlwZS5TY3JvbGxWZXJ0aWNhbDtcclxuICAgICAgcmVtb3ZlQ2xhc3MzID0gR3JpZFR5cGUuRml4ZWQ7XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuZ3JpZHN0ZXIuJG9wdGlvbnMuZ3JpZFR5cGUgPT09IEdyaWRUeXBlLkZpeGVkKSB7XHJcbiAgICAgIHRoaXMuZ3JpZHN0ZXIuY3VyQ29sV2lkdGggPVxyXG4gICAgICAgIHRoaXMuZ3JpZHN0ZXIuJG9wdGlvbnMuZml4ZWRDb2xXaWR0aCArXHJcbiAgICAgICAgKHRoaXMuZ3JpZHN0ZXIuJG9wdGlvbnMuaWdub3JlTWFyZ2luSW5Sb3dcclxuICAgICAgICAgID8gMFxyXG4gICAgICAgICAgOiB0aGlzLmdyaWRzdGVyLiRvcHRpb25zLm1hcmdpbik7XHJcbiAgICAgIHRoaXMuZ3JpZHN0ZXIuY3VyUm93SGVpZ2h0ID1cclxuICAgICAgICB0aGlzLmdyaWRzdGVyLiRvcHRpb25zLmZpeGVkUm93SGVpZ2h0ICtcclxuICAgICAgICAodGhpcy5ncmlkc3Rlci4kb3B0aW9ucy5pZ25vcmVNYXJnaW5JblJvd1xyXG4gICAgICAgICAgPyAwXHJcbiAgICAgICAgICA6IHRoaXMuZ3JpZHN0ZXIuJG9wdGlvbnMubWFyZ2luKTtcclxuICAgICAgYWRkQ2xhc3MgPSBHcmlkVHlwZS5GaXhlZDtcclxuICAgICAgcmVtb3ZlQ2xhc3MxID0gR3JpZFR5cGUuRml0O1xyXG4gICAgICByZW1vdmVDbGFzczIgPSBHcmlkVHlwZS5TY3JvbGxWZXJ0aWNhbDtcclxuICAgICAgcmVtb3ZlQ2xhc3MzID0gR3JpZFR5cGUuU2Nyb2xsSG9yaXpvbnRhbDtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5ncmlkc3Rlci4kb3B0aW9ucy5ncmlkVHlwZSA9PT0gR3JpZFR5cGUuVmVydGljYWxGaXhlZCkge1xyXG4gICAgICB0aGlzLmdyaWRzdGVyLmN1clJvd0hlaWdodCA9XHJcbiAgICAgICAgdGhpcy5ncmlkc3Rlci4kb3B0aW9ucy5maXhlZFJvd0hlaWdodCArXHJcbiAgICAgICAgKHRoaXMuZ3JpZHN0ZXIuJG9wdGlvbnMuaWdub3JlTWFyZ2luSW5Sb3dcclxuICAgICAgICAgID8gMFxyXG4gICAgICAgICAgOiB0aGlzLmdyaWRzdGVyLiRvcHRpb25zLm1hcmdpbik7XHJcbiAgICAgIGFkZENsYXNzID0gR3JpZFR5cGUuU2Nyb2xsVmVydGljYWw7XHJcbiAgICAgIHJlbW92ZUNsYXNzMSA9IEdyaWRUeXBlLkZpdDtcclxuICAgICAgcmVtb3ZlQ2xhc3MyID0gR3JpZFR5cGUuU2Nyb2xsSG9yaXpvbnRhbDtcclxuICAgICAgcmVtb3ZlQ2xhc3MzID0gR3JpZFR5cGUuRml4ZWQ7XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuZ3JpZHN0ZXIuJG9wdGlvbnMuZ3JpZFR5cGUgPT09IEdyaWRUeXBlLkhvcml6b250YWxGaXhlZCkge1xyXG4gICAgICB0aGlzLmdyaWRzdGVyLmN1ckNvbFdpZHRoID1cclxuICAgICAgICB0aGlzLmdyaWRzdGVyLiRvcHRpb25zLmZpeGVkQ29sV2lkdGggK1xyXG4gICAgICAgICh0aGlzLmdyaWRzdGVyLiRvcHRpb25zLmlnbm9yZU1hcmdpbkluUm93XHJcbiAgICAgICAgICA/IDBcclxuICAgICAgICAgIDogdGhpcy5ncmlkc3Rlci4kb3B0aW9ucy5tYXJnaW4pO1xyXG4gICAgICBhZGRDbGFzcyA9IEdyaWRUeXBlLlNjcm9sbEhvcml6b250YWw7XHJcbiAgICAgIHJlbW92ZUNsYXNzMSA9IEdyaWRUeXBlLkZpdDtcclxuICAgICAgcmVtb3ZlQ2xhc3MyID0gR3JpZFR5cGUuU2Nyb2xsVmVydGljYWw7XHJcbiAgICAgIHJlbW92ZUNsYXNzMyA9IEdyaWRUeXBlLkZpeGVkO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChcclxuICAgICAgdGhpcy5ncmlkc3Rlci5tb2JpbGUgfHxcclxuICAgICAgKHRoaXMuZ3JpZHN0ZXIuJG9wdGlvbnMuc2V0R3JpZFNpemUgJiZcclxuICAgICAgICB0aGlzLmdyaWRzdGVyLiRvcHRpb25zLmdyaWRUeXBlICE9PSBHcmlkVHlwZS5GaXQpXHJcbiAgICApIHtcclxuICAgICAgdGhpcy5ncmlkc3Rlci5yZW5kZXJlci5yZW1vdmVDbGFzcyh0aGlzLmdyaWRzdGVyLmVsLCBhZGRDbGFzcyk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmdyaWRzdGVyLnJlbmRlcmVyLmFkZENsYXNzKHRoaXMuZ3JpZHN0ZXIuZWwsIGFkZENsYXNzKTtcclxuICAgIH1cclxuICAgIHRoaXMuZ3JpZHN0ZXIucmVuZGVyZXIucmVtb3ZlQ2xhc3ModGhpcy5ncmlkc3Rlci5lbCwgcmVtb3ZlQ2xhc3MxKTtcclxuICAgIHRoaXMuZ3JpZHN0ZXIucmVuZGVyZXIucmVtb3ZlQ2xhc3ModGhpcy5ncmlkc3Rlci5lbCwgcmVtb3ZlQ2xhc3MyKTtcclxuICAgIHRoaXMuZ3JpZHN0ZXIucmVuZGVyZXIucmVtb3ZlQ2xhc3ModGhpcy5ncmlkc3Rlci5lbCwgcmVtb3ZlQ2xhc3MzKTtcclxuICB9XHJcblxyXG4gIGdldEdyaWRDb2x1bW5TdHlsZShpOiBudW1iZXIpOiBDb21tb25HcmlkU3R5bGUge1xyXG4gICAgLy8gZ2VuZXJhdGVzIHRoZSBuZXcgc3R5bGVcclxuICAgIGNvbnN0IG5ld1BvczogR3JpZENvbHVtbkNhY2hlZFN0eWxlID0ge1xyXG4gICAgICBsZWZ0OiB0aGlzLmdyaWRzdGVyLmN1ckNvbFdpZHRoICogaSxcclxuICAgICAgd2lkdGg6IHRoaXMuZ3JpZHN0ZXIuY3VyQ29sV2lkdGggLSB0aGlzLmdyaWRzdGVyLiRvcHRpb25zLm1hcmdpbixcclxuICAgICAgaGVpZ2h0OlxyXG4gICAgICAgIHRoaXMuZ3JpZHN0ZXIuZ3JpZFJvd3MubGVuZ3RoICogdGhpcy5ncmlkc3Rlci5jdXJSb3dIZWlnaHQgLVxyXG4gICAgICAgIHRoaXMuZ3JpZHN0ZXIuJG9wdGlvbnMubWFyZ2luLFxyXG4gICAgICBzdHlsZToge31cclxuICAgIH07XHJcbiAgICBuZXdQb3Muc3R5bGUgPSB7XHJcbiAgICAgIC4uLnRoaXMuZ2V0TGVmdFBvc2l0aW9uKG5ld1Bvcy5sZWZ0KSxcclxuICAgICAgd2lkdGg6IG5ld1Bvcy53aWR0aCArICdweCcsXHJcbiAgICAgIGhlaWdodDogbmV3UG9zLmhlaWdodCArICdweCdcclxuICAgIH07XHJcblxyXG4gICAgLy8gdXNlIHRoZSBsYXN0IGNhY2hlZCBzdHlsZSBpZiBpdCBoYXMgc2FtZSB2YWx1ZXMgYXMgdGhlIGdlbmVyYXRlZCBvbmVcclxuICAgIGNvbnN0IGxhc3QgPSB0aGlzLmxhc3RHcmlkQ29sdW1uU3R5bGVzW2ldO1xyXG4gICAgaWYgKFxyXG4gICAgICBsYXN0ICYmXHJcbiAgICAgIGxhc3QubGVmdCA9PT0gbmV3UG9zLmxlZnQgJiZcclxuICAgICAgbGFzdC53aWR0aCA9PT0gbmV3UG9zLndpZHRoICYmXHJcbiAgICAgIGxhc3QuaGVpZ2h0ID09PSBuZXdQb3MuaGVpZ2h0XHJcbiAgICApIHtcclxuICAgICAgcmV0dXJuIGxhc3Quc3R5bGU7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gY2FjaGUgYW5kIHNldCBuZXcgc3R5bGVcclxuICAgIHRoaXMubGFzdEdyaWRDb2x1bW5TdHlsZXNbaV0gPSBuZXdQb3M7XHJcbiAgICByZXR1cm4gbmV3UG9zLnN0eWxlO1xyXG4gIH1cclxuXHJcbiAgZ2V0R3JpZFJvd1N0eWxlKGk6IG51bWJlcik6IENvbW1vbkdyaWRTdHlsZSB7XHJcbiAgICAvLyBnZW5lcmF0ZXMgdGhlIG5ldyBzdHlsZVxyXG4gICAgY29uc3QgbmV3UG9zOiBHcmlkUm93Q2FjaGVkU3R5bGUgPSB7XHJcbiAgICAgIHRvcDogdGhpcy5ncmlkc3Rlci5jdXJSb3dIZWlnaHQgKiBpLFxyXG4gICAgICB3aWR0aDpcclxuICAgICAgICB0aGlzLmdyaWRzdGVyLmdyaWRDb2x1bW5zLmxlbmd0aCAqIHRoaXMuZ3JpZHN0ZXIuY3VyQ29sV2lkdGggK1xyXG4gICAgICAgIHRoaXMuZ3JpZHN0ZXIuJG9wdGlvbnMubWFyZ2luLFxyXG4gICAgICBoZWlnaHQ6IHRoaXMuZ3JpZHN0ZXIuY3VyUm93SGVpZ2h0IC0gdGhpcy5ncmlkc3Rlci4kb3B0aW9ucy5tYXJnaW4sXHJcbiAgICAgIHN0eWxlOiB7fVxyXG4gICAgfTtcclxuICAgIG5ld1Bvcy5zdHlsZSA9IHtcclxuICAgICAgLi4udGhpcy5nZXRUb3BQb3NpdGlvbihuZXdQb3MudG9wKSxcclxuICAgICAgd2lkdGg6IG5ld1Bvcy53aWR0aCArICdweCcsXHJcbiAgICAgIGhlaWdodDogbmV3UG9zLmhlaWdodCArICdweCdcclxuICAgIH07XHJcblxyXG4gICAgLy8gdXNlIHRoZSBsYXN0IGNhY2hlZCBzdHlsZSBpZiBpdCBoYXMgc2FtZSB2YWx1ZXMgYXMgdGhlIGdlbmVyYXRlZCBvbmVcclxuICAgIGNvbnN0IGxhc3QgPSB0aGlzLmxhc3RHcmlkUm93U3R5bGVzW2ldO1xyXG4gICAgaWYgKFxyXG4gICAgICBsYXN0ICYmXHJcbiAgICAgIGxhc3QudG9wID09PSBuZXdQb3MudG9wICYmXHJcbiAgICAgIGxhc3Qud2lkdGggPT09IG5ld1Bvcy53aWR0aCAmJlxyXG4gICAgICBsYXN0LmhlaWdodCA9PT0gbmV3UG9zLmhlaWdodFxyXG4gICAgKSB7XHJcbiAgICAgIHJldHVybiBsYXN0LnN0eWxlO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGNhY2hlIGFuZCBzZXQgbmV3IHN0eWxlXHJcbiAgICB0aGlzLmxhc3RHcmlkUm93U3R5bGVzW2ldID0gbmV3UG9zO1xyXG4gICAgcmV0dXJuIG5ld1Bvcy5zdHlsZTtcclxuICB9XHJcblxyXG4gIGdldExlZnRQb3NpdGlvbihkOiBudW1iZXIpOiB7IGxlZnQ6IHN0cmluZyB9IHwgeyB0cmFuc2Zvcm06IHN0cmluZyB9IHtcclxuICAgIGNvbnN0IGRQb3NpdGlvbiA9IHRoaXMuZ3JpZHN0ZXIuJG9wdGlvbnMuZGlyVHlwZSA9PT0gRGlyVHlwZXMuUlRMID8gLWQgOiBkO1xyXG4gICAgaWYgKHRoaXMuZ3JpZHN0ZXIuJG9wdGlvbnMudXNlVHJhbnNmb3JtUG9zaXRpb25pbmcpIHtcclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICB0cmFuc2Zvcm06ICd0cmFuc2xhdGVYKCcgKyBkUG9zaXRpb24gKyAncHgpJ1xyXG4gICAgICB9O1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICBsZWZ0OiB0aGlzLmdldExlZnRNYXJnaW4oKSArIGRQb3NpdGlvbiArICdweCdcclxuICAgICAgfTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldFRvcFBvc2l0aW9uKGQ6IG51bWJlcik6IHsgdG9wOiBzdHJpbmcgfSB8IHsgdHJhbnNmb3JtOiBzdHJpbmcgfSB7XHJcbiAgICBpZiAodGhpcy5ncmlkc3Rlci4kb3B0aW9ucy51c2VUcmFuc2Zvcm1Qb3NpdGlvbmluZykge1xyXG4gICAgICByZXR1cm4ge1xyXG4gICAgICAgIHRyYW5zZm9ybTogJ3RyYW5zbGF0ZVkoJyArIGQgKyAncHgpJ1xyXG4gICAgICB9O1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICB0b3A6IHRoaXMuZ2V0VG9wTWFyZ2luKCkgKyBkICsgJ3B4J1xyXG4gICAgICB9O1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY2xlYXJDZWxsUG9zaXRpb24ocmVuZGVyZXI6IFJlbmRlcmVyMiwgZWw6IEVsZW1lbnQpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmdyaWRzdGVyLiRvcHRpb25zLnVzZVRyYW5zZm9ybVBvc2l0aW9uaW5nKSB7XHJcbiAgICAgIHJlbmRlcmVyLnNldFN0eWxlKGVsLCAndHJhbnNmb3JtJywgJycpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmVuZGVyZXIuc2V0U3R5bGUoZWwsICd0b3AnLCAnJyk7XHJcbiAgICAgIHJlbmRlcmVyLnNldFN0eWxlKGVsLCAnbGVmdCcsICcnKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNldENlbGxQb3NpdGlvbihcclxuICAgIHJlbmRlcmVyOiBSZW5kZXJlcjIsXHJcbiAgICBlbDogRWxlbWVudCxcclxuICAgIHg6IG51bWJlcixcclxuICAgIHk6IG51bWJlclxyXG4gICk6IHZvaWQge1xyXG4gICAgY29uc3QgeFBvc2l0aW9uID0gdGhpcy5ncmlkc3Rlci4kb3B0aW9ucy5kaXJUeXBlID09PSBEaXJUeXBlcy5SVEwgPyAteCA6IHg7XHJcbiAgICBpZiAodGhpcy5ncmlkc3Rlci4kb3B0aW9ucy51c2VUcmFuc2Zvcm1Qb3NpdGlvbmluZykge1xyXG4gICAgICBjb25zdCB0cmFuc2Zvcm0gPSAndHJhbnNsYXRlM2QoJyArIHhQb3NpdGlvbiArICdweCwgJyArIHkgKyAncHgsIDApJztcclxuICAgICAgcmVuZGVyZXIuc2V0U3R5bGUoZWwsICd0cmFuc2Zvcm0nLCB0cmFuc2Zvcm0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmVuZGVyZXIuc2V0U3R5bGUoZWwsICdsZWZ0JywgdGhpcy5nZXRMZWZ0TWFyZ2luKCkgKyB4UG9zaXRpb24gKyAncHgnKTtcclxuICAgICAgcmVuZGVyZXIuc2V0U3R5bGUoZWwsICd0b3AnLCB0aGlzLmdldFRvcE1hcmdpbigpICsgeSArICdweCcpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0TGVmdE1hcmdpbigpOiBudW1iZXIge1xyXG4gICAgaWYgKHRoaXMuZ3JpZHN0ZXIuJG9wdGlvbnMub3V0ZXJNYXJnaW4pIHtcclxuICAgICAgaWYgKHRoaXMuZ3JpZHN0ZXIuJG9wdGlvbnMub3V0ZXJNYXJnaW5MZWZ0ICE9PSBudWxsKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZ3JpZHN0ZXIuJG9wdGlvbnMub3V0ZXJNYXJnaW5MZWZ0O1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmdyaWRzdGVyLiRvcHRpb25zLm1hcmdpbjtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIDA7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRUb3BNYXJnaW4oKTogbnVtYmVyIHtcclxuICAgIGlmICh0aGlzLmdyaWRzdGVyLiRvcHRpb25zLm91dGVyTWFyZ2luKSB7XHJcbiAgICAgIGlmICh0aGlzLmdyaWRzdGVyLiRvcHRpb25zLm91dGVyTWFyZ2luVG9wICE9PSBudWxsKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZ3JpZHN0ZXIuJG9wdGlvbnMub3V0ZXJNYXJnaW5Ub3A7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZ3JpZHN0ZXIuJG9wdGlvbnMubWFyZ2luO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gMDtcclxuICAgIH1cclxuICB9XHJcbn1cclxuIl19