@trudb/tru-common-lib 0.0.177 → 0.0.179

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 (99) hide show
  1. package/esm2020/lib/components/confirm-dialog/tru-confirm-dialog-module.mjs +19 -0
  2. package/esm2020/lib/components/confirm-dialog/tru-confirm-dialog.mjs +36 -0
  3. package/esm2020/lib/components/desktop/directives/resizable/tru-desktop-resizable-module.mjs +19 -0
  4. package/esm2020/lib/components/desktop/directives/resizable/tru-desktop-resizable.mjs +109 -0
  5. package/esm2020/lib/components/desktop/menubar/tru-desktop-menubar-module.mjs +44 -0
  6. package/esm2020/lib/components/desktop/menubar/tru-desktop-menubar.mjs +29 -0
  7. package/esm2020/lib/components/desktop/services/tru-desktop-service.mjs +136 -0
  8. package/esm2020/lib/components/desktop/statusbar/tru-desktop-statusbar-module.mjs +19 -0
  9. package/esm2020/lib/components/desktop/statusbar/tru-desktop-statusbar.mjs +18 -0
  10. package/esm2020/lib/components/desktop/taskbar/tru-desktop-taskbar-module.mjs +21 -0
  11. package/esm2020/lib/components/desktop/taskbar/tru-desktop-taskbar.mjs +40 -0
  12. package/esm2020/lib/components/desktop/tru-desktop-module.mjs +72 -0
  13. package/esm2020/lib/components/desktop/tru-desktop.mjs +703 -0
  14. package/esm2020/lib/components/desktop/view/tru-desktop-view-module.mjs +19 -0
  15. package/esm2020/lib/components/desktop/view/tru-desktop-view.mjs +25 -0
  16. package/esm2020/lib/components/desktop/viewport/tru-desktop-viewport-module.mjs +20 -0
  17. package/esm2020/lib/components/desktop/viewport/tru-desktop-viewport.mjs +109 -0
  18. package/esm2020/lib/components/desktop/window/tru-desktop-window-module.mjs +58 -0
  19. package/esm2020/lib/components/desktop/window/tru-desktop-window.mjs +449 -0
  20. package/esm2020/lib/components/export-dialog/tru-export-dialog-module.mjs +20 -0
  21. package/esm2020/lib/components/export-dialog/tru-export-dialog.mjs +57 -0
  22. package/esm2020/lib/components/toolbar/button/tru-toolbar-button-module.mjs +32 -0
  23. package/esm2020/lib/components/toolbar/button/tru-toolbar-button.mjs +35 -0
  24. package/esm2020/lib/components/toolbar/context-filter/tru-toolbar-context-filter-module.mjs +40 -0
  25. package/esm2020/lib/components/toolbar/context-filter/tru-toolbar-context-filter.mjs +24 -0
  26. package/esm2020/lib/components/toolbar/dropdown/tru-toolbar-dropdown-module.mjs +32 -0
  27. package/esm2020/lib/components/toolbar/dropdown/tru-toolbar-dropdown.mjs +42 -0
  28. package/esm2020/lib/components/toolbar/menu/menu-button/tru-toolbar-menu-button-module.mjs +19 -0
  29. package/esm2020/lib/components/toolbar/menu/menu-button/tru-toolbar-menu-button.mjs +16 -0
  30. package/esm2020/lib/components/toolbar/menu/menu-item/tru-toolbar-menu-item-module.mjs +19 -0
  31. package/esm2020/lib/components/toolbar/menu/menu-item/tru-toolbar-menu-item.mjs +26 -0
  32. package/esm2020/lib/components/toolbar/menu/tru-toolbar-menu-module.mjs +32 -0
  33. package/esm2020/lib/components/toolbar/menu/tru-toolbar-menu.mjs +33 -0
  34. package/esm2020/lib/components/toolbar/separator/tru-toolbar-separator-module.mjs +19 -0
  35. package/esm2020/lib/components/toolbar/separator/tru-toolbar-separator.mjs +12 -0
  36. package/esm2020/lib/components/toolbar/text/tru-toolbar-text-module.mjs +32 -0
  37. package/esm2020/lib/components/toolbar/text/tru-toolbar-text.mjs +28 -0
  38. package/esm2020/lib/components/toolbar/tru-toolbar-module.mjs +48 -0
  39. package/esm2020/lib/components/toolbar/tru-toolbar.mjs +21 -0
  40. package/esm2020/lib/material.module.mjs +192 -0
  41. package/esm2020/lib/services/tru-app-environment.mjs +75 -0
  42. package/esm2020/lib/services/tru-breeze-context-factory.mjs +71 -0
  43. package/esm2020/lib/services/tru-data-context.mjs +207 -0
  44. package/esm2020/lib/services/tru-entity-accessor.mjs +188 -0
  45. package/esm2020/lib/services/tru-search-group-event-handler.mjs +1 -1
  46. package/esm2020/lib/services/tru-ui-notification.mjs +90 -0
  47. package/esm2020/lib/tru-common-module.mjs +1 -1
  48. package/esm2020/public-api.mjs +12 -1
  49. package/fesm2015/trudb-tru-common-lib.mjs +2993 -65
  50. package/fesm2015/trudb-tru-common-lib.mjs.map +1 -1
  51. package/fesm2020/trudb-tru-common-lib.mjs +2987 -65
  52. package/fesm2020/trudb-tru-common-lib.mjs.map +1 -1
  53. package/lib/components/confirm-dialog/tru-confirm-dialog-module.d.ts +9 -0
  54. package/lib/components/confirm-dialog/tru-confirm-dialog.d.ts +20 -0
  55. package/lib/components/desktop/directives/resizable/tru-desktop-resizable-module.d.ts +9 -0
  56. package/lib/components/desktop/directives/resizable/tru-desktop-resizable.d.ts +32 -0
  57. package/lib/components/desktop/menubar/tru-desktop-menubar-module.d.ts +14 -0
  58. package/lib/components/desktop/menubar/tru-desktop-menubar.d.ts +12 -0
  59. package/lib/components/desktop/services/tru-desktop-service.d.ts +110 -0
  60. package/lib/components/desktop/statusbar/tru-desktop-statusbar-module.d.ts +9 -0
  61. package/lib/components/desktop/statusbar/tru-desktop-statusbar.d.ts +10 -0
  62. package/lib/components/desktop/taskbar/tru-desktop-taskbar-module.d.ts +11 -0
  63. package/lib/components/desktop/taskbar/tru-desktop-taskbar.d.ts +15 -0
  64. package/lib/components/desktop/tru-desktop-module.d.ts +20 -0
  65. package/lib/components/desktop/tru-desktop.d.ts +334 -0
  66. package/lib/components/desktop/view/tru-desktop-view-module.d.ts +9 -0
  67. package/lib/components/desktop/view/tru-desktop-view.d.ts +13 -0
  68. package/lib/components/desktop/viewport/tru-desktop-viewport-module.d.ts +10 -0
  69. package/lib/components/desktop/viewport/tru-desktop-viewport.d.ts +46 -0
  70. package/lib/components/desktop/window/tru-desktop-window-module.d.ts +17 -0
  71. package/lib/components/desktop/window/tru-desktop-window.d.ts +184 -0
  72. package/lib/components/export-dialog/tru-export-dialog-module.d.ts +10 -0
  73. package/lib/components/export-dialog/tru-export-dialog.d.ts +26 -0
  74. package/lib/components/toolbar/button/tru-toolbar-button-module.d.ts +11 -0
  75. package/lib/components/toolbar/button/tru-toolbar-button.d.ts +14 -0
  76. package/lib/components/toolbar/context-filter/tru-toolbar-context-filter-module.d.ts +13 -0
  77. package/lib/components/toolbar/context-filter/tru-toolbar-context-filter.d.ts +11 -0
  78. package/lib/components/toolbar/dropdown/tru-toolbar-dropdown-module.d.ts +11 -0
  79. package/lib/components/toolbar/dropdown/tru-toolbar-dropdown.d.ts +18 -0
  80. package/lib/components/toolbar/menu/menu-button/tru-toolbar-menu-button-module.d.ts +9 -0
  81. package/lib/components/toolbar/menu/menu-button/tru-toolbar-menu-button.d.ts +7 -0
  82. package/lib/components/toolbar/menu/menu-item/tru-toolbar-menu-item-module.d.ts +9 -0
  83. package/lib/components/toolbar/menu/menu-item/tru-toolbar-menu-item.d.ts +8 -0
  84. package/lib/components/toolbar/menu/tru-toolbar-menu-module.d.ts +11 -0
  85. package/lib/components/toolbar/menu/tru-toolbar-menu.d.ts +10 -0
  86. package/lib/components/toolbar/separator/tru-toolbar-separator-module.d.ts +9 -0
  87. package/lib/components/toolbar/separator/tru-toolbar-separator.d.ts +6 -0
  88. package/lib/components/toolbar/text/tru-toolbar-text-module.d.ts +11 -0
  89. package/lib/components/toolbar/text/tru-toolbar-text.d.ts +12 -0
  90. package/lib/components/toolbar/tru-toolbar-module.d.ts +15 -0
  91. package/lib/components/toolbar/tru-toolbar.d.ts +13 -0
  92. package/lib/material.module.d.ts +50 -0
  93. package/lib/services/tru-app-environment.d.ts +48 -0
  94. package/lib/services/tru-breeze-context-factory.d.ts +30 -0
  95. package/lib/services/tru-data-context.d.ts +32 -0
  96. package/lib/services/tru-entity-accessor.d.ts +41 -0
  97. package/lib/services/tru-ui-notification.d.ts +35 -0
  98. package/package.json +1 -1
  99. package/public-api.d.ts +8 -0
@@ -0,0 +1,449 @@
1
+ import { Component, Input } from '@angular/core';
2
+ import { TruDataContext } from '../../../services/tru-data-context';
3
+ import { TruEntityAccessor } from '../../../services/tru-entity-accessor';
4
+ import { TruWindowEventHandler } from '../../../services/tru-window-event-handler';
5
+ import * as i0 from "@angular/core";
6
+ import * as i1 from "../../../services/tru-data-context";
7
+ import * as i2 from "../../../services/tru-window-event-handler";
8
+ import * as i3 from "@angular/common";
9
+ import * as i4 from "../directives/resizable/tru-desktop-resizable";
10
+ import * as i5 from "../view/tru-desktop-view";
11
+ import * as i6 from "../statusbar/tru-desktop-statusbar";
12
+ import * as i7 from "../../toolbar/tru-toolbar";
13
+ import * as i8 from "../../toolbar/button/tru-toolbar-button";
14
+ import * as i9 from "../../toolbar/separator/tru-toolbar-separator";
15
+ export class TruDesktopWindow {
16
+ constructor(dataContext, truWindowEventHandler, elementRef, cd) {
17
+ this.dataContext = dataContext;
18
+ this.truWindowEventHandler = truWindowEventHandler;
19
+ this.elementRef = elementRef;
20
+ this.cd = cd;
21
+ this.x = 0;
22
+ this.y = 0;
23
+ this.lastX = 0;
24
+ this.lastY = 0;
25
+ this.startX = 0;
26
+ this.startY = 0;
27
+ this.titleBar = null;
28
+ this.canCloseFn = undefined;
29
+ this.cancelEditingOnNavigation = false;
30
+ this.viewportDimensions = undefined;
31
+ this.hasChanges = () => {
32
+ return this.dataContext.hasChanges().length;
33
+ };
34
+ this.mouseMove = (event) => {
35
+ this.viewportDimensions = this.viewportCtrl.getViewportDimensions();
36
+ if (event.pageX <= 0 ||
37
+ event.pageX >= this.viewportDimensions.width ||
38
+ this.window.maximized)
39
+ return;
40
+ if (this.titleBar == null)
41
+ return;
42
+ //this.elementRef.nativeElement.setAttribute('style', 'opacity: 0.5;');
43
+ this.x = event.screenX - this.startX;
44
+ this.y = event.screenY - this.startY;
45
+ //Top Containment
46
+ this.y = this.y >= 0 ? this.y : 0;
47
+ //Bottom Containment
48
+ this.y = this.y <= this.viewportDimensions.height - this.titleBar.offsetHeight ? this.y : this.viewportDimensions.height - this.titleBar.offsetHeight;
49
+ //Left Containment
50
+ this.x = this.x >= -(this.titleBar.offsetWidth + this.titleBar.offsetLeft) ? this.x : -(this.titleBar.offsetWidth + this.titleBar.offsetLeft);
51
+ //Right Containment
52
+ this.x = this.x <= this.viewportDimensions.width - this.titleBar.offsetLeft ? this.x : this.viewportDimensions.width - this.titleBar.offsetLeft;
53
+ this.window.top = this.y + 'px';
54
+ this.window.left = this.x + 'px';
55
+ };
56
+ this.mouseUp = (event) => {
57
+ if (event.pageY <= this.desktopCtrl.options.viewportTop) {
58
+ this.desktopCtrl.maximize(this.window);
59
+ }
60
+ if (event.pageX <= 0) {
61
+ this.desktopCtrl.maximizeLeft(this.window);
62
+ }
63
+ this.viewportDimensions = this.viewportCtrl.getViewportDimensions();
64
+ if (event.pageX >= this.viewportDimensions.width - 1) {
65
+ this.desktopCtrl.maximizeRight(this.window);
66
+ }
67
+ //this.elementRef.nativeElement.setAttribute('style', 'opacity: 1.0;');
68
+ document.removeEventListener('mousemove', this.mouseMove);
69
+ document.removeEventListener('mouseup', this.mouseUp);
70
+ };
71
+ /**
72
+ * @tru.doc function
73
+ * @name truDesktopWindowComponent.updateNavigationState
74
+ * @module tru.desktop.window
75
+ *
76
+ * @description
77
+ * Updates window navigation buttons based location of the active view in the views array.
78
+ *
79
+ */
80
+ this.updateNavigationState = () => {
81
+ if (this.window.views === undefined)
82
+ return;
83
+ var length = this.window.views.length;
84
+ this.disablePrevious = !!(this.window.views[0].active || length === 1);
85
+ this.disableNext = !!(this.window.views[length - 1].active || length === 1);
86
+ };
87
+ /**
88
+ * @tru.doc function
89
+ * @name truDesktopWindowComponent.isWindowInViewport
90
+ * @module tru.desktop.window
91
+ *
92
+ * @description
93
+ * Determines if the window is within the viewport boundaries.
94
+ *
95
+ */
96
+ this.isWindowInViewport = () => {
97
+ var windowTop = 0;
98
+ var windowLeft = 0;
99
+ if (!this.window.minimized) {
100
+ windowTop = this.elementRef.nativeElement.offsetTop;
101
+ windowLeft = this.elementRef.nativeElement.offsetLeft;
102
+ }
103
+ else {
104
+ windowTop = parseInt(this.window.savedPosition.top, 10);
105
+ windowLeft = parseInt(this.window.savedPosition.left, 10);
106
+ }
107
+ if ((windowTop + 10) >= this.viewportCtrl.getViewportDimensions().height ||
108
+ (windowLeft + 60) >= this.viewportCtrl.getViewportDimensions().width) {
109
+ this.window.outOfBounds = true;
110
+ this.window.active = false;
111
+ this.desktopCtrl.activateForemostWindow();
112
+ }
113
+ else {
114
+ this.window.outOfBounds = false;
115
+ }
116
+ };
117
+ /**
118
+ * @tru.doc function
119
+ * @name truDesktopWindowComponent.getWindow
120
+ * @module tru.desktop.window
121
+ *
122
+ * @description
123
+ * Gets the window object.
124
+ *
125
+ * @returns {object} window object.
126
+ */
127
+ this.getWindow = () => {
128
+ return this.window;
129
+ };
130
+ /**
131
+ * @tru.doc function
132
+ * @name truDesktopWindowComponent.setWindowTitle
133
+ * @module tru.desktop.window
134
+ *
135
+ * @description
136
+ * Sets the window title.
137
+ *
138
+ * @param {string} value to display in the window title bar.
139
+ */
140
+ this.setWindowTitle = (value) => {
141
+ this.window.title = value;
142
+ };
143
+ this.getWindowTitle = () => {
144
+ return this.window.title;
145
+ };
146
+ /**
147
+ * @tru.doc function
148
+ * @name truDesktopWindowComponent.goToPreviousView
149
+ * @module tru.desktop.window
150
+ *
151
+ * @description
152
+ * Public method for navigating to the previous view.
153
+ *
154
+ */
155
+ this.goToPreviousView = () => {
156
+ this.previousView();
157
+ };
158
+ /**
159
+ * @tru.doc function
160
+ * @name truDesktopWindowComponent.viewIsEditing
161
+ * @module tru.desktop.window
162
+ *
163
+ * @description
164
+ * Checks whether view is editing.
165
+ *
166
+ * @returns {boolean}.
167
+ */
168
+ this.viewIsEditing = () => {
169
+ var isEditing = false;
170
+ this.window.views.forEach((view) => {
171
+ if (view.isEditing === true) {
172
+ isEditing = true;
173
+ }
174
+ }, null);
175
+ return isEditing;
176
+ };
177
+ /**
178
+ * @tru.doc function
179
+ * @name truDesktopWindowComponent.canNavigate
180
+ * @module tru.desktop.window
181
+ *
182
+ * @description
183
+ * Checks whether navigation can occur..
184
+ *
185
+ * @returns {boolean}.
186
+ */
187
+ this.canNavigate = () => {
188
+ var canNavigate = true;
189
+ if (this.canNavigateFn !== null) {
190
+ if (this.viewIsEditing()) {
191
+ canNavigate = this.canNavigateFn();
192
+ }
193
+ }
194
+ return canNavigate;
195
+ };
196
+ /**
197
+ * @tru.doc function
198
+ * @name truDesktopWindowComponent.removeForwardViews
199
+ * @module tru.desktop.window
200
+ *
201
+ * @description
202
+ * Removes all view(s) forward of the active view.
203
+ *
204
+ */
205
+ this.removeForwardViews = () => {
206
+ var activeView = this.desktopCtrl.getActiveView(this.window);
207
+ var activeViewIndex = this.window.views.indexOf(activeView);
208
+ for (var i = this.window.views.length; i > activeViewIndex; i--) {
209
+ this.window.views.splice(i, 1);
210
+ }
211
+ this.updateNavigationState();
212
+ };
213
+ /**
214
+ * @tru.doc function
215
+ * @name truDesktopWindowComponent.addView
216
+ * @module tru.desktop.window
217
+ *
218
+ * @description
219
+ * Removes all inactive view(s) following the active view and inserts a new view.
220
+ *
221
+ */
222
+ this.addView = (viewConfigOverlay) => {
223
+ this.removeForwardViews();
224
+ var activeView = this.desktopCtrl.getActiveView(this.window);
225
+ activeView.active = false;
226
+ var viewConfig = this.desktopCtrl.getDesktop().viewConfig;
227
+ var viewConfigInstance = Object.assign({}, viewConfig);
228
+ var extended = Object.assign(viewConfigInstance, viewConfigOverlay);
229
+ extended.window = this;
230
+ this.window.views.push(extended);
231
+ this.updateNavigationState();
232
+ };
233
+ /**
234
+ * @tru.doc function
235
+ * @name truDesktopWindowComponent.getGlobals
236
+ * @module tru.desktop.window
237
+ *
238
+ * @description
239
+ * returns the global values.
240
+ *
241
+ */
242
+ this.getGlobals = () => {
243
+ return this.window.globals;
244
+ };
245
+ /**
246
+ * @tru.doc function
247
+ * @name truDesktopWindowComponent.firstView
248
+ * @module tru.desktop.window
249
+ *
250
+ * @description
251
+ *
252
+ */
253
+ this.firstView = () => {
254
+ if (!this.canNavigate() || this.disablePrevious)
255
+ return;
256
+ if (this.cancelEditingOnNavigation)
257
+ this.desktopCtrl.getActiveView(this.window).isEditing = false;
258
+ let activeView = this.desktopCtrl.getActiveView(this.window);
259
+ activeView.active = false;
260
+ this.window.views[0].active = true;
261
+ this.updateNavigationState();
262
+ };
263
+ /**
264
+ * @tru.doc function
265
+ * @name truDesktopWindowComponent.firstView
266
+ * @module tru.desktop.window
267
+ *
268
+ * @description
269
+ *
270
+ */
271
+ this.lastView = () => {
272
+ if (!this.canNavigate() || this.disableNext)
273
+ return;
274
+ if (this.cancelEditingOnNavigation)
275
+ this.desktopCtrl.getActiveView(this.window).isEditing = false;
276
+ let activeView = this.desktopCtrl.getActiveView(this.window);
277
+ activeView.active = false;
278
+ this.window.views[this.window.views.length - 1].active = true;
279
+ this.updateNavigationState();
280
+ };
281
+ this.resizeEventHandler = () => {
282
+ this.isWindowInViewport();
283
+ };
284
+ /**
285
+ * @tru.doc watch
286
+ * @module tru.desktop.window
287
+ *
288
+ * @description
289
+ * Monitors the window's minimized state
290
+ *
291
+ */
292
+ //$scope.$watch('window.minimized',
293
+ // function(value) {
294
+ // if (value && !$scope.window.maximized) {
295
+ // $scope.desktopCtrl.savePosition($scope.window);
296
+ // }
297
+ //}
298
+ // );
299
+ this.disablePrevious = true;
300
+ this.disableNext = true;
301
+ this.activate = () => {
302
+ if (this.window.outOfBounds)
303
+ return;
304
+ this.desktopCtrl.clearActive();
305
+ this.window.active = true;
306
+ this.window.zIndex = this.desktopCtrl.getNextMaxZIndex();
307
+ };
308
+ this.minimize = () => {
309
+ this.desktopCtrl.minimize(this.window);
310
+ };
311
+ this.maximize = () => {
312
+ if (this.window.maximized) {
313
+ this.desktopCtrl.restoreSavedPosition(this.window);
314
+ this.window.maximized = undefined;
315
+ }
316
+ else {
317
+ this.desktopCtrl.savePosition(this.window);
318
+ this.desktopCtrl.maximize(this.window);
319
+ }
320
+ };
321
+ this.close = () => {
322
+ this.desktopCtrl.closeWindow(this.window);
323
+ };
324
+ this.windowTitleMouseDown = (event) => {
325
+ if (this.window.maximized)
326
+ return;
327
+ event.preventDefault();
328
+ this.titleBar = event.srcElement || event.target;
329
+ this.x = this.elementRef.nativeElement.children[0].offsetLeft;
330
+ this.y = this.elementRef.nativeElement.children[0].offsetTop;
331
+ this.startX = event.screenX - this.x;
332
+ this.startY = event.screenY - this.y;
333
+ this.desktopCtrl.savePosition(this.window);
334
+ document.addEventListener('mousemove', this.mouseMove);
335
+ document.addEventListener('mouseup', this.mouseUp);
336
+ window.addEventListener('resize', this.resizeEventHandler);
337
+ };
338
+ this.previousView = () => {
339
+ if (!this.canNavigate() || this.disablePrevious)
340
+ return;
341
+ var activeView = this.desktopCtrl.getActiveView(this.window);
342
+ var activeViewIndex = this.window.views.indexOf(activeView);
343
+ if (this.cancelEditingOnNavigation)
344
+ activeView.isEditing = false;
345
+ activeView.active = false;
346
+ this.window.views[activeViewIndex - 1].active = true;
347
+ this.updateNavigationState();
348
+ };
349
+ this.nextView = () => {
350
+ if (!this.canNavigate() || this.disableNext)
351
+ return;
352
+ var activeView = this.desktopCtrl.getActiveView(this.window);
353
+ var activeViewIndex = this.window.views.indexOf(activeView);
354
+ if (this.cancelEditingOnNavigation)
355
+ activeView.isEditing = false;
356
+ activeView.active = false;
357
+ this.window.views[activeViewIndex + 1].active = true;
358
+ this.updateNavigationState();
359
+ };
360
+ this.save = () => {
361
+ this.dataContext.save();
362
+ };
363
+ this.revert = () => {
364
+ this.dataContext.revert();
365
+ };
366
+ }
367
+ ;
368
+ /**
369
+ * @tru.doc event
370
+ * @module tru.desktop.window
371
+ *
372
+ * @description
373
+ *
374
+ */
375
+ onKeydown(event) {
376
+ if (!this.window.active)
377
+ return;
378
+ var keySequence = this.desktopCtrl.getKeySequence(event);
379
+ if (keySequence === 'alt+left') { //Previous View
380
+ this.previousView();
381
+ event.preventDefault();
382
+ }
383
+ if (keySequence === 'alt+right') { //Next View
384
+ this.nextView();
385
+ event.preventDefault();
386
+ }
387
+ if (keySequence === 'alt+up') { //First View
388
+ this.firstView();
389
+ event.preventDefault();
390
+ }
391
+ if (keySequence === 'alt+down') { //Last View
392
+ this.lastView();
393
+ event.preventDefault();
394
+ }
395
+ if (keySequence === 'alt+l') { //Maximize left
396
+ if (!this.window.maximized) {
397
+ this.desktopCtrl.savePosition(this.window);
398
+ this.desktopCtrl.maximizeLeft(this.window);
399
+ }
400
+ else if (this.window.maximized === 'right' || this.window.maximized === 'fill')
401
+ this.desktopCtrl.maximizeLeft(this.window);
402
+ else
403
+ this.desktopCtrl.restoreSavedPosition(this.window);
404
+ event.preventDefault();
405
+ }
406
+ if (keySequence === 'alt+r') { //Maximize right
407
+ if (!this.window.maximized) {
408
+ this.desktopCtrl.savePosition(this.window);
409
+ this.desktopCtrl.maximizeRight(this.window);
410
+ }
411
+ else if (this.window.maximized === 'left' || this.window.maximized === 'fill')
412
+ this.desktopCtrl.maximizeRight(this.window);
413
+ else
414
+ this.desktopCtrl.restoreSavedPosition(this.window);
415
+ event.preventDefault();
416
+ }
417
+ }
418
+ ;
419
+ ngOnInit() {
420
+ this.canCloseFn = this.desktopCtrl.getOptions().canCloseFn;
421
+ this.canNavigateFn = this.desktopCtrl.getOptions().canNavigateFn;
422
+ this.cancelEditingOnNavigation = this.desktopCtrl.getOptions().cancelEditingOnNavigation;
423
+ this.updateNavigationState();
424
+ this.truWindowEventHandler.onAddView().subscribe((windiowAddViewEvent) => {
425
+ this.addView(windiowAddViewEvent);
426
+ });
427
+ }
428
+ ngAfterViewInit() {
429
+ this.cd.detectChanges();
430
+ }
431
+ ngOnDestroy() {
432
+ document.removeEventListener('mousemove', this.mouseMove);
433
+ document.removeEventListener('mouseup', this.mouseUp);
434
+ window.removeEventListener('resize', this.resizeEventHandler);
435
+ }
436
+ }
437
+ TruDesktopWindow.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.2", ngImport: i0, type: TruDesktopWindow, deps: [{ token: i1.TruDataContext }, { token: i2.TruWindowEventHandler }, { token: i0.ElementRef }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
438
+ TruDesktopWindow.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.1.2", type: TruDesktopWindow, selector: "tru-desktop-window", inputs: { window: "window", viewportCtrl: "viewportCtrl", desktopCtrl: "desktopCtrl" }, providers: [TruDataContext, TruEntityAccessor, TruWindowEventHandler], ngImport: i0, template: "<div class=\"desktop-window-container\"\r\n [ngClass]=\"{'desktop-window-active': window.active, 'desktop-window-maximized': window.maximized}\"\r\n [ngStyle]=\"{'z-index': window.zIndex, 'top': window.top, 'left': window.left, 'right': window.right, 'bottom': window.bottom, 'height': window.height, 'width': window.width, 'min-height': window.minHeight, 'minWidth': window.minWidth}\"\r\n [style.offsetLeft.px]=\"x\"\r\n [style.offsetTop.px]=\"y\"\r\n (mousedown)=\"activate()\"\r\n [hidden]=\"window.minimized\">\r\n <div class=\"desktop-window-header\" [ngClass]=\"{'desktop-window-maximized': window.maximized, 'desktop-window-opacity': !window.active}\">\r\n <div class=\"toolbar-window-navigation\">\r\n <tru-toolbar>\r\n <tru-toolbar-button [icon]=\"'tru-toolbar-previous-icon'\" [tooltip]=\"'Go Back One View - [Alt + Left]'\" (click)=\"previousView()\"></tru-toolbar-button>\r\n <tru-toolbar-button [icon]=\"'tru-toolbar-next-icon'\" [tooltip]=\"'Go Forward One View - [Alt + Right]'\" (click)=\"nextView()\"></tru-toolbar-button>\r\n <tru-toolbar-button [icon]=\"'tru-toolbar-save-icon'\" class=\"desktop-window-save-icon\" [ngClass]=\"{'desktop-window-save-icon-has-changes': hasChanges()}\" [tooltip]=\"'Save - [Ctrl + S]'\" (click)=\"save()\"></tru-toolbar-button>\r\n <tru-toolbar-button [icon]=\"'tru-toolbar-revert-icon'\" class=\"desktop-window-revert-icon\" [ngClass]=\"{'desktop-window-revert-icon-has-changes': hasChanges()}\" [tooltip]=\"'Revert - [Ctrl + Shift + R]'\" (click)=\"revert()\"></tru-toolbar-button>\r\n <tru-toolbar-separator></tru-toolbar-separator>\r\n </tru-toolbar>\r\n </div>\r\n <div class=\"desktop-window-title\" (dblclick)=\"maximize()\" (mousedown)=\"windowTitleMouseDown($event)\">\r\n <div class=\"desktop-click-through\">\r\n <div class=\"desktop-text\">{{window.title}}</div>\r\n </div>\r\n </div>\r\n <div class=\"desktop-window-action\">\r\n <tru-toolbar>\r\n <tru-toolbar-button [icon]=\"'tru-toolbar-minimize-icon'\" [tooltip]=\"'Minimize - [Alt + N]'\" (click)=\"minimize()\"></tru-toolbar-button>\r\n <tru-toolbar-button *ngIf=\"!window.maximized\" [icon]=\"'tru-toolbar-maximize-icon'\" [tooltip]=\"'Go Forward One View - [Alt + Right]'\" (click)=\"maximize()\" class=\"maximize\"></tru-toolbar-button>\r\n <tru-toolbar-button *ngIf=\"window.maximized\" [icon]=\"'tru-toolbar-restore-icon'\" [tooltip]=\"'Go Forward One View - [Alt + Right]'\" (click)=\"maximize()\" class=\"maximize\"></tru-toolbar-button>\r\n <tru-toolbar-button [icon]=\"'tru-toolbar-close-icon'\" [tooltip]=\"'Close Window - [Alt + SHIFT + X]'\" (click)=\"close()\"></tru-toolbar-button>\r\n </tru-toolbar>\r\n </div>\r\n </div>\r\n <fieldset ng-disabled=\"!window.active\" class=\"desktop-window-fieldset\" [ngClass]=\"{'desktop-window-opacity': !window.active}\">\r\n <div class=\"desktop-window-content\">\r\n <div *ngFor=\"let view of window.views\">\r\n <tru-desktop-view [view]=\"view\" [hidden]=\"!view.active\"><ng-template></ng-template></tru-desktop-view>\r\n </div>\r\n </div>\r\n </fieldset>\r\n <tru-desktop-statusbar></tru-desktop-statusbar>\r\n <span class=\"desktop-window-resizable-handle desktop-window-resizable-nw\" tru-desktop-resizable [window]=\"window\" *ngIf=\"!window.maximized\" [direction]=\"'nw'\"></span>\r\n <span class=\"desktop-window-resizable-handle desktop-window-resizable-ne\" tru-desktop-resizable [window]=\"window\" *ngIf=\"!window.maximized\" [direction]=\"'ne'\"></span>\r\n <span class=\"desktop-window-resizable-handle desktop-window-resizable-sw\" tru-desktop-resizable [window]=\"window\" *ngIf=\"!window.maximized\" [direction]=\"'sw'\"></span>\r\n <span class=\"desktop-window-resizable-handle desktop-window-resizable-se\" tru-desktop-resizable [window]=\"window\" *ngIf=\"!window.maximized\" [direction]=\"'se'\"></span>\r\n <span class=\"desktop-window-resizable-handle desktop-window-resizable-n\" tru-desktop-resizable [window]=\"window\" *ngIf=\"!window.maximized\" [direction]=\"'n'\"></span>\r\n <span class=\"desktop-window-resizable-handle desktop-window-resizable-s\" tru-desktop-resizable [window]=\"window\" *ngIf=\"!window.maximized\" [direction]=\"'s'\"></span>\r\n <span class=\"desktop-window-resizable-handle desktop-window-resizable-w\" tru-desktop-resizable [window]=\"window\" *ngIf=\"!window.maximized\" [direction]=\"'w'\"></span>\r\n <span class=\"desktop-window-resizable-handle desktop-window-resizable-e\" tru-desktop-resizable [window]=\"window\" *ngIf=\"!window.maximized\" [direction]=\"'e'\"></span>\r\n</div>\r\n", styles: ["body{-webkit-user-select:none;user-select:none}input,textarea{-moz-user-select:text}.desktop-text{-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%;-webkit-tap-highlight-color:rgba(0,0,0,0);font-size:14px;line-height:1;color:#333}.desktop-wrapper{position:absolute!important;inset:0;background:#ffffff;overflow:hidden}.desktop-relative{position:relative}.desktop-display-none{display:none}.desktop-click-through{pointer-events:none}.desktop-menubar-container{position:absolute!important;top:0;left:0;right:0;height:26px;background:#f8f8f8;border-bottom:1px solid #e7e7e7;padding-left:5px}\n", ".desktop-window-container{position:absolute!important;background-color:#fff;background-clip:padding-box;border-radius:0;box-shadow:0 5px 10px #0003;border:1px solid #e7e7e7}.desktop-window-header{position:absolute!important;top:0;left:0;right:0;height:27px;background:#ffffff;border-top-left-radius:0;border-top-right-radius:0;border-bottom:1px solid #e7e7e7}.desktop-window-content{position:absolute!important;inset:27px 0 23px;background:#ffffff;overflow:hidden}.desktop-window-busy-overlay{position:absolute!important;inset:27px 0 23px;background:#fff;overflow:hidden;z-index:1000;background-repeat:no-repeat;background-position:center center}.desktop-window-fieldset{padding:0;margin:0;border:0}.desktop-window-statusbar{position:absolute!important;left:0;right:0;bottom:0;height:23px;background:#fff;border-bottom-left-radius:0;border-bottom-right-radius:0;border-top:1px solid #e7e7e7}.desktop-window-statusbar-container{position:absolute;top:1px;left:2px;right:0}.desktop-window-navigation{position:absolute!important;top:0;left:0;bottom:0;width:105px;background:transparent}.desktop-window-navigation-button-group{position:absolute!important;left:0;padding:0;margin:0}.desktop-window-navigation-button-group button{margin-left:0!important}.desktop-window-navigation-button-group-split{position:absolute!important;top:2px;right:6px}.desktop-window-title{position:absolute!important;inset:0 80px 0 110px;height:27px;background:transparent;cursor:inherit;outline:0;margin-top:2px}.desktop-window-title-hidden-nav{left:5px!important}.desktop-window-title-hidden-nav-with-buttons{left:55px!important}.desktop-window-title>div{position:absolute!important;top:5px;left:3px;cursor:default}.desktop-window-title>div>div{font-size:14px;font-weight:700}.desktop-window-action{position:absolute!important;top:0;right:0;bottom:0;width:80px;background:transparent}.desktop-window-action-button-group{position:absolute!important;top:2px;right:6px}.desktop-window-action .desktop-window-navigation-button-group{left:unset!important;right:0!important}.desktop-window-opacity{opacity:.5}.desktop-window-close-button:hover{background-color:maroon;color:#fff}.desktop-window-active{border:1px solid #6b6b6b!important;box-shadow:0 5px 10px #0006}.desktop-window-maximized{border-radius:0;box-shadow:0 0 #0000;border-top-color:#f8f8f8!important;border-bottom-color:#f8f8f8!important}.desktop-window-is-dirty{display:block;float:left;height:15px;width:15px;font-size:15px;color:orange;margin-left:3px}.desktop-window-is-invalid{display:block;float:left;height:15px;width:15px;font-size:15px;color:red;margin-left:3px}.desktop-window-resizable-nw{position:absolute!important;overflow:hidden;width:10px;height:10px;left:-5px;top:-5px;z-index:103;cursor:nw-resize;opacity:0}.desktop-window-resizable-ne{position:absolute!important;overflow:hidden;width:10px;height:10px;right:-5px;top:-5px;z-index:103;cursor:ne-resize;opacity:0}.desktop-window-resizable-sw{position:absolute!important;overflow:hidden;width:10px;height:10px;left:-5px;bottom:-5px;z-index:103;cursor:sw-resize;opacity:0}.desktop-window-resizable-se{position:absolute!important;overflow:hidden;width:10px;height:10px;right:-5px;bottom:-5px;z-index:103;cursor:se-resize;opacity:0}.desktop-window-resizable-n{position:absolute!important;top:0;left:10px;right:10px;overflow:hidden;height:5px;z-index:102;cursor:s-resize;opacity:0;margin-top:-5px}.desktop-window-resizable-s{position:absolute!important;left:10px;right:10px;bottom:0;overflow:hidden;height:5px;z-index:102;cursor:s-resize;opacity:0;margin-bottom:-5px}.desktop-window-resizable-w{position:absolute!important;top:10px;left:0;bottom:10px;overflow:hidden;width:5px;z-index:102;cursor:w-resize;opacity:0;margin-left:-5px}.desktop-window-resizable-e{position:absolute!important;top:10px;right:0;bottom:10px;overflow:hidden;width:5px;z-index:102;cursor:e-resize;opacity:0;margin-right:-5px}div.desktop-window-resizable-handle{display:none!important;visibility:hidden!important}.desktop-window-save-icon,.desktop-window-revert-icon{opacity:.5}.desktop-window-save-icon-has-changes,.desktop-window-revert-icon-has-changes{opacity:1}\n"], dependencies: [{ kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i4.TruDesktopResizable, selector: "[tru-desktop-resizable]", inputs: ["window", "maximized", "direction"] }, { kind: "component", type: i5.TruDesktopView, selector: "tru-desktop-view", inputs: ["view"] }, { kind: "component", type: i6.TruDesktopStatusbar, selector: "tru-desktop-statusbar", inputs: ["desktopCtrl"] }, { kind: "component", type: i7.TruToolbar, selector: "tru-toolbar", inputs: ["config"] }, { kind: "component", type: i8.TruToolbarButton, selector: "tru-toolbar-button", inputs: ["config", "icon", "text", "disabled", "tooltip"], outputs: ["onClick"] }, { kind: "component", type: i9.TruToolbarSeparator, selector: "tru-toolbar-separator" }] });
439
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.2", ngImport: i0, type: TruDesktopWindow, decorators: [{
440
+ type: Component,
441
+ args: [{ selector: 'tru-desktop-window', providers: [TruDataContext, TruEntityAccessor, TruWindowEventHandler], template: "<div class=\"desktop-window-container\"\r\n [ngClass]=\"{'desktop-window-active': window.active, 'desktop-window-maximized': window.maximized}\"\r\n [ngStyle]=\"{'z-index': window.zIndex, 'top': window.top, 'left': window.left, 'right': window.right, 'bottom': window.bottom, 'height': window.height, 'width': window.width, 'min-height': window.minHeight, 'minWidth': window.minWidth}\"\r\n [style.offsetLeft.px]=\"x\"\r\n [style.offsetTop.px]=\"y\"\r\n (mousedown)=\"activate()\"\r\n [hidden]=\"window.minimized\">\r\n <div class=\"desktop-window-header\" [ngClass]=\"{'desktop-window-maximized': window.maximized, 'desktop-window-opacity': !window.active}\">\r\n <div class=\"toolbar-window-navigation\">\r\n <tru-toolbar>\r\n <tru-toolbar-button [icon]=\"'tru-toolbar-previous-icon'\" [tooltip]=\"'Go Back One View - [Alt + Left]'\" (click)=\"previousView()\"></tru-toolbar-button>\r\n <tru-toolbar-button [icon]=\"'tru-toolbar-next-icon'\" [tooltip]=\"'Go Forward One View - [Alt + Right]'\" (click)=\"nextView()\"></tru-toolbar-button>\r\n <tru-toolbar-button [icon]=\"'tru-toolbar-save-icon'\" class=\"desktop-window-save-icon\" [ngClass]=\"{'desktop-window-save-icon-has-changes': hasChanges()}\" [tooltip]=\"'Save - [Ctrl + S]'\" (click)=\"save()\"></tru-toolbar-button>\r\n <tru-toolbar-button [icon]=\"'tru-toolbar-revert-icon'\" class=\"desktop-window-revert-icon\" [ngClass]=\"{'desktop-window-revert-icon-has-changes': hasChanges()}\" [tooltip]=\"'Revert - [Ctrl + Shift + R]'\" (click)=\"revert()\"></tru-toolbar-button>\r\n <tru-toolbar-separator></tru-toolbar-separator>\r\n </tru-toolbar>\r\n </div>\r\n <div class=\"desktop-window-title\" (dblclick)=\"maximize()\" (mousedown)=\"windowTitleMouseDown($event)\">\r\n <div class=\"desktop-click-through\">\r\n <div class=\"desktop-text\">{{window.title}}</div>\r\n </div>\r\n </div>\r\n <div class=\"desktop-window-action\">\r\n <tru-toolbar>\r\n <tru-toolbar-button [icon]=\"'tru-toolbar-minimize-icon'\" [tooltip]=\"'Minimize - [Alt + N]'\" (click)=\"minimize()\"></tru-toolbar-button>\r\n <tru-toolbar-button *ngIf=\"!window.maximized\" [icon]=\"'tru-toolbar-maximize-icon'\" [tooltip]=\"'Go Forward One View - [Alt + Right]'\" (click)=\"maximize()\" class=\"maximize\"></tru-toolbar-button>\r\n <tru-toolbar-button *ngIf=\"window.maximized\" [icon]=\"'tru-toolbar-restore-icon'\" [tooltip]=\"'Go Forward One View - [Alt + Right]'\" (click)=\"maximize()\" class=\"maximize\"></tru-toolbar-button>\r\n <tru-toolbar-button [icon]=\"'tru-toolbar-close-icon'\" [tooltip]=\"'Close Window - [Alt + SHIFT + X]'\" (click)=\"close()\"></tru-toolbar-button>\r\n </tru-toolbar>\r\n </div>\r\n </div>\r\n <fieldset ng-disabled=\"!window.active\" class=\"desktop-window-fieldset\" [ngClass]=\"{'desktop-window-opacity': !window.active}\">\r\n <div class=\"desktop-window-content\">\r\n <div *ngFor=\"let view of window.views\">\r\n <tru-desktop-view [view]=\"view\" [hidden]=\"!view.active\"><ng-template></ng-template></tru-desktop-view>\r\n </div>\r\n </div>\r\n </fieldset>\r\n <tru-desktop-statusbar></tru-desktop-statusbar>\r\n <span class=\"desktop-window-resizable-handle desktop-window-resizable-nw\" tru-desktop-resizable [window]=\"window\" *ngIf=\"!window.maximized\" [direction]=\"'nw'\"></span>\r\n <span class=\"desktop-window-resizable-handle desktop-window-resizable-ne\" tru-desktop-resizable [window]=\"window\" *ngIf=\"!window.maximized\" [direction]=\"'ne'\"></span>\r\n <span class=\"desktop-window-resizable-handle desktop-window-resizable-sw\" tru-desktop-resizable [window]=\"window\" *ngIf=\"!window.maximized\" [direction]=\"'sw'\"></span>\r\n <span class=\"desktop-window-resizable-handle desktop-window-resizable-se\" tru-desktop-resizable [window]=\"window\" *ngIf=\"!window.maximized\" [direction]=\"'se'\"></span>\r\n <span class=\"desktop-window-resizable-handle desktop-window-resizable-n\" tru-desktop-resizable [window]=\"window\" *ngIf=\"!window.maximized\" [direction]=\"'n'\"></span>\r\n <span class=\"desktop-window-resizable-handle desktop-window-resizable-s\" tru-desktop-resizable [window]=\"window\" *ngIf=\"!window.maximized\" [direction]=\"'s'\"></span>\r\n <span class=\"desktop-window-resizable-handle desktop-window-resizable-w\" tru-desktop-resizable [window]=\"window\" *ngIf=\"!window.maximized\" [direction]=\"'w'\"></span>\r\n <span class=\"desktop-window-resizable-handle desktop-window-resizable-e\" tru-desktop-resizable [window]=\"window\" *ngIf=\"!window.maximized\" [direction]=\"'e'\"></span>\r\n</div>\r\n", styles: ["body{-webkit-user-select:none;user-select:none}input,textarea{-moz-user-select:text}.desktop-text{-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%;-webkit-tap-highlight-color:rgba(0,0,0,0);font-size:14px;line-height:1;color:#333}.desktop-wrapper{position:absolute!important;inset:0;background:#ffffff;overflow:hidden}.desktop-relative{position:relative}.desktop-display-none{display:none}.desktop-click-through{pointer-events:none}.desktop-menubar-container{position:absolute!important;top:0;left:0;right:0;height:26px;background:#f8f8f8;border-bottom:1px solid #e7e7e7;padding-left:5px}\n", ".desktop-window-container{position:absolute!important;background-color:#fff;background-clip:padding-box;border-radius:0;box-shadow:0 5px 10px #0003;border:1px solid #e7e7e7}.desktop-window-header{position:absolute!important;top:0;left:0;right:0;height:27px;background:#ffffff;border-top-left-radius:0;border-top-right-radius:0;border-bottom:1px solid #e7e7e7}.desktop-window-content{position:absolute!important;inset:27px 0 23px;background:#ffffff;overflow:hidden}.desktop-window-busy-overlay{position:absolute!important;inset:27px 0 23px;background:#fff;overflow:hidden;z-index:1000;background-repeat:no-repeat;background-position:center center}.desktop-window-fieldset{padding:0;margin:0;border:0}.desktop-window-statusbar{position:absolute!important;left:0;right:0;bottom:0;height:23px;background:#fff;border-bottom-left-radius:0;border-bottom-right-radius:0;border-top:1px solid #e7e7e7}.desktop-window-statusbar-container{position:absolute;top:1px;left:2px;right:0}.desktop-window-navigation{position:absolute!important;top:0;left:0;bottom:0;width:105px;background:transparent}.desktop-window-navigation-button-group{position:absolute!important;left:0;padding:0;margin:0}.desktop-window-navigation-button-group button{margin-left:0!important}.desktop-window-navigation-button-group-split{position:absolute!important;top:2px;right:6px}.desktop-window-title{position:absolute!important;inset:0 80px 0 110px;height:27px;background:transparent;cursor:inherit;outline:0;margin-top:2px}.desktop-window-title-hidden-nav{left:5px!important}.desktop-window-title-hidden-nav-with-buttons{left:55px!important}.desktop-window-title>div{position:absolute!important;top:5px;left:3px;cursor:default}.desktop-window-title>div>div{font-size:14px;font-weight:700}.desktop-window-action{position:absolute!important;top:0;right:0;bottom:0;width:80px;background:transparent}.desktop-window-action-button-group{position:absolute!important;top:2px;right:6px}.desktop-window-action .desktop-window-navigation-button-group{left:unset!important;right:0!important}.desktop-window-opacity{opacity:.5}.desktop-window-close-button:hover{background-color:maroon;color:#fff}.desktop-window-active{border:1px solid #6b6b6b!important;box-shadow:0 5px 10px #0006}.desktop-window-maximized{border-radius:0;box-shadow:0 0 #0000;border-top-color:#f8f8f8!important;border-bottom-color:#f8f8f8!important}.desktop-window-is-dirty{display:block;float:left;height:15px;width:15px;font-size:15px;color:orange;margin-left:3px}.desktop-window-is-invalid{display:block;float:left;height:15px;width:15px;font-size:15px;color:red;margin-left:3px}.desktop-window-resizable-nw{position:absolute!important;overflow:hidden;width:10px;height:10px;left:-5px;top:-5px;z-index:103;cursor:nw-resize;opacity:0}.desktop-window-resizable-ne{position:absolute!important;overflow:hidden;width:10px;height:10px;right:-5px;top:-5px;z-index:103;cursor:ne-resize;opacity:0}.desktop-window-resizable-sw{position:absolute!important;overflow:hidden;width:10px;height:10px;left:-5px;bottom:-5px;z-index:103;cursor:sw-resize;opacity:0}.desktop-window-resizable-se{position:absolute!important;overflow:hidden;width:10px;height:10px;right:-5px;bottom:-5px;z-index:103;cursor:se-resize;opacity:0}.desktop-window-resizable-n{position:absolute!important;top:0;left:10px;right:10px;overflow:hidden;height:5px;z-index:102;cursor:s-resize;opacity:0;margin-top:-5px}.desktop-window-resizable-s{position:absolute!important;left:10px;right:10px;bottom:0;overflow:hidden;height:5px;z-index:102;cursor:s-resize;opacity:0;margin-bottom:-5px}.desktop-window-resizable-w{position:absolute!important;top:10px;left:0;bottom:10px;overflow:hidden;width:5px;z-index:102;cursor:w-resize;opacity:0;margin-left:-5px}.desktop-window-resizable-e{position:absolute!important;top:10px;right:0;bottom:10px;overflow:hidden;width:5px;z-index:102;cursor:e-resize;opacity:0;margin-right:-5px}div.desktop-window-resizable-handle{display:none!important;visibility:hidden!important}.desktop-window-save-icon,.desktop-window-revert-icon{opacity:.5}.desktop-window-save-icon-has-changes,.desktop-window-revert-icon-has-changes{opacity:1}\n"] }]
442
+ }], ctorParameters: function () { return [{ type: i1.TruDataContext }, { type: i2.TruWindowEventHandler }, { type: i0.ElementRef }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { window: [{
443
+ type: Input
444
+ }], viewportCtrl: [{
445
+ type: Input
446
+ }], desktopCtrl: [{
447
+ type: Input
448
+ }] } });
449
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJ1LWRlc2t0b3Atd2luZG93LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdHJ1LWNvbW1vbi1saWIvc3JjL2xpYi9jb21wb25lbnRzL2Rlc2t0b3Avd2luZG93L3RydS1kZXNrdG9wLXdpbmRvdy50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RydS1jb21tb24tbGliL3NyYy9saWIvY29tcG9uZW50cy9kZXNrdG9wL3dpbmRvdy90cnUtZGVza3RvcC13aW5kb3cuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUF5QixLQUFLLEVBQWlDLE1BQU0sZUFBZSxDQUFDO0FBRXZHLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUNwRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUMxRSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQzs7Ozs7Ozs7Ozs7QUFRbkYsTUFBTSxPQUFPLGdCQUFnQjtJQUszQixZQUNVLFdBQTJCLEVBQzNCLHFCQUE0QyxFQUM1QyxVQUFzQixFQUN0QixFQUFxQjtRQUhyQixnQkFBVyxHQUFYLFdBQVcsQ0FBZ0I7UUFDM0IsMEJBQXFCLEdBQXJCLHFCQUFxQixDQUF1QjtRQUM1QyxlQUFVLEdBQVYsVUFBVSxDQUFZO1FBQ3RCLE9BQUUsR0FBRixFQUFFLENBQW1CO1FBRy9CLE1BQUMsR0FBRyxDQUFDLENBQUM7UUFDTixNQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ04sVUFBSyxHQUFHLENBQUMsQ0FBQztRQUNWLFVBQUssR0FBRyxDQUFDLENBQUM7UUFDVixXQUFNLEdBQUcsQ0FBQyxDQUFDO1FBQ1gsV0FBTSxHQUFHLENBQUMsQ0FBQztRQUNYLGFBQVEsR0FBdUIsSUFBSSxDQUFDO1FBQ3BDLGVBQVUsR0FBRyxTQUFTLENBQUM7UUFFdkIsOEJBQXlCLEdBQUcsS0FBSyxDQUFDO1FBQ2xDLHVCQUFrQixHQUFRLFNBQVMsQ0FBQztRQUVwQyxlQUFVLEdBQUcsR0FBRyxFQUFFO1lBQ2hCLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxNQUFNLENBQUM7UUFDOUMsQ0FBQyxDQUFBO1FBRUQsY0FBUyxHQUFHLENBQUMsS0FBaUIsRUFBRSxFQUFFO1lBRWhDLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLHFCQUFxQixFQUFFLENBQUM7WUFDcEUsSUFBSSxLQUFLLENBQUMsS0FBSyxJQUFJLENBQUM7Z0JBQ2xCLEtBQUssQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLGtCQUFrQixDQUFDLEtBQUs7Z0JBQzVDLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUztnQkFBRSxPQUFPO1lBRWhDLElBQUksSUFBSSxDQUFDLFFBQVEsSUFBSSxJQUFJO2dCQUFFLE9BQU87WUFFbEMsdUVBQXVFO1lBQ3ZFLElBQUksQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO1lBQ3JDLElBQUksQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO1lBRXJDLGlCQUFpQjtZQUNqQixJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDbEMsb0JBQW9CO1lBQ3BCLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsa0JBQWtCLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDO1lBRXRKLGtCQUFrQjtZQUNsQixJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQzlJLG1CQUFtQjtZQUNuQixJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLGtCQUFrQixDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQztZQUVoSixJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztZQUNoQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztRQUNuQyxDQUFDLENBQUM7UUFFRixZQUFPLEdBQUcsQ0FBQyxLQUFpQixFQUFFLEVBQUU7WUFDOUIsSUFBSSxLQUFLLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRTtnQkFDdkQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO2FBQ3hDO1lBQ0QsSUFBSSxLQUFLLENBQUMsS0FBSyxJQUFJLENBQUMsRUFBRTtnQkFDcEIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO2FBQzVDO1lBQ0QsSUFBSSxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMscUJBQXFCLEVBQUUsQ0FBQztZQUNwRSxJQUFJLEtBQUssQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLGtCQUFrQixDQUFDLEtBQUssR0FBRyxDQUFDLEVBQUU7Z0JBQ3BELElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQzthQUM3QztZQUVELHVFQUF1RTtZQUN2RSxRQUFRLENBQUMsbUJBQW1CLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUMxRCxRQUFRLENBQUMsbUJBQW1CLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN4RCxDQUFDLENBQUM7UUFFRjs7Ozs7Ozs7V0FRRztRQUNILDBCQUFxQixHQUFHLEdBQUcsRUFBRTtZQUMzQixJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxLQUFLLFNBQVM7Z0JBQUUsT0FBTztZQUM1QyxJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUM7WUFDdEMsSUFBSSxDQUFDLGVBQWUsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLElBQUksTUFBTSxLQUFLLENBQUMsQ0FBQyxDQUFDO1lBQ3ZFLElBQUksQ0FBQyxXQUFXLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLE1BQU0sSUFBSSxNQUFNLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDOUUsQ0FBQyxDQUFDO1FBRUY7Ozs7Ozs7O1dBUUc7UUFDSCx1QkFBa0IsR0FBRyxHQUFHLEVBQUU7WUFDeEIsSUFBSSxTQUFTLEdBQUcsQ0FBQyxDQUFDO1lBQ2xCLElBQUksVUFBVSxHQUFHLENBQUMsQ0FBQztZQUNuQixJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLEVBQUU7Z0JBQzFCLFNBQVMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUM7Z0JBQ3BELFVBQVUsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUM7YUFDdkQ7aUJBQU07Z0JBQ0wsU0FBUyxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUM7Z0JBQ3hELFVBQVUsR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDO2FBQzNEO1lBQ0QsSUFBSSxDQUFDLFNBQVMsR0FBRyxFQUFFLENBQUMsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLHFCQUFxQixFQUFFLENBQUMsTUFBTTtnQkFDdEUsQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDLEtBQUssRUFBRTtnQkFDdEUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO2dCQUMvQixJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7Z0JBQzNCLElBQUksQ0FBQyxXQUFXLENBQUMsc0JBQXNCLEVBQUUsQ0FBQzthQUMzQztpQkFBTTtnQkFDTCxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUM7YUFDakM7UUFDSCxDQUFDLENBQUM7UUFFRjs7Ozs7Ozs7O1dBU0c7UUFDSCxjQUFTLEdBQUcsR0FBRyxFQUFFO1lBQ2YsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDO1FBQ3JCLENBQUMsQ0FBQztRQUVGOzs7Ozs7Ozs7V0FTRztRQUNILG1CQUFjLEdBQUcsQ0FBQyxLQUFhLEVBQUUsRUFBRTtZQUNqQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFDNUIsQ0FBQyxDQUFDO1FBRUYsbUJBQWMsR0FBRyxHQUFHLEVBQUU7WUFDcEIsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQztRQUMzQixDQUFDLENBQUM7UUFFRjs7Ozs7Ozs7V0FRRztRQUNILHFCQUFnQixHQUFHLEdBQUcsRUFBRTtZQUN0QixJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDdEIsQ0FBQyxDQUFDO1FBRUY7Ozs7Ozs7OztXQVNHO1FBQ0gsa0JBQWEsR0FBRyxHQUFHLEVBQUU7WUFDbkIsSUFBSSxTQUFTLEdBQUcsS0FBSyxDQUFDO1lBQ3RCLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQVMsRUFBRSxFQUFFO2dCQUN0QyxJQUFJLElBQUksQ0FBQyxTQUFTLEtBQUssSUFBSSxFQUFFO29CQUMzQixTQUFTLEdBQUcsSUFBSSxDQUFDO2lCQUNsQjtZQUNILENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztZQUNULE9BQU8sU0FBUyxDQUFDO1FBQ25CLENBQUMsQ0FBQztRQUVGOzs7Ozs7Ozs7V0FTRztRQUNILGdCQUFXLEdBQUcsR0FBRyxFQUFFO1lBQ2pCLElBQUksV0FBVyxHQUFHLElBQUksQ0FBQztZQUN2QixJQUFJLElBQUksQ0FBQyxhQUFhLEtBQUssSUFBSSxFQUFFO2dCQUMvQixJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUUsRUFBRTtvQkFDeEIsV0FBVyxHQUFHLElBQUssQ0FBQyxhQUFhLEVBQUUsQ0FBQztpQkFDckM7YUFDRjtZQUNELE9BQU8sV0FBVyxDQUFDO1FBQ3JCLENBQUMsQ0FBQztRQUVGOzs7Ozs7OztXQVFHO1FBQ0gsdUJBQWtCLEdBQUcsR0FBRyxFQUFFO1lBQ3hCLElBQUksVUFBVSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUM3RCxJQUFJLGVBQWUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDNUQsS0FBSyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLGVBQWUsRUFBRSxDQUFDLEVBQUUsRUFBRTtnQkFDL0QsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQzthQUNoQztZQUNELElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1FBQy9CLENBQUMsQ0FBQztRQUVGOzs7Ozs7OztXQVFHO1FBQ0gsWUFBTyxHQUFHLENBQUMsaUJBQXNCLEVBQUUsRUFBRTtZQUNuQyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztZQUMxQixJQUFJLFVBQVUsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDN0QsVUFBVSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7WUFDMUIsSUFBSSxVQUFVLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxVQUFVLENBQUM7WUFDMUQsSUFBSSxrQkFBa0IsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxVQUFVLENBQUMsQ0FBQztZQUN2RCxJQUFJLFFBQVEsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLGtCQUFrQixFQUFFLGlCQUFpQixDQUFDLENBQUM7WUFDcEUsUUFBUSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7WUFDdkIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ2pDLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1FBQy9CLENBQUMsQ0FBQztRQUVGOzs7Ozs7OztXQVFHO1FBQ0gsZUFBVSxHQUFHLEdBQUcsRUFBRTtZQUNoQixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDO1FBQzdCLENBQUMsQ0FBQztRQUVGOzs7Ozs7O1dBT0c7UUFDSCxjQUFTLEdBQUcsR0FBRyxFQUFFO1lBQ2YsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsSUFBSSxJQUFJLENBQUMsZUFBZTtnQkFBRSxPQUFPO1lBQ3hELElBQUksSUFBSSxDQUFDLHlCQUF5QjtnQkFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztZQUNsRyxJQUFJLFVBQVUsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDN0QsVUFBVSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7WUFDMUIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztZQUNuQyxJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQztRQUMvQixDQUFDLENBQUM7UUFFRjs7Ozs7OztXQU9HO1FBQ0gsYUFBUSxHQUFHLEdBQUcsRUFBRTtZQUNkLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLElBQUksSUFBSSxDQUFDLFdBQVc7Z0JBQUUsT0FBTztZQUNwRCxJQUFJLElBQUksQ0FBQyx5QkFBeUI7Z0JBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7WUFDbEcsSUFBSSxVQUFVLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQzdELFVBQVUsQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO1lBQzFCLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO1lBQzlELElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1FBQy9CLENBQUMsQ0FBQztRQUVGLHVCQUFrQixHQUFHLEdBQUcsRUFBRTtZQUN4QixJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztRQUM1QixDQUFDLENBQUE7UUFrREQ7Ozs7Ozs7V0FPRztRQUNILG1DQUFtQztRQUNuQyxpQ0FBaUM7UUFDakMsNENBQTRDO1FBQzVDLHFEQUFxRDtRQUNyRCxLQUFLO1FBQ0wsR0FBRztRQUNILGNBQWM7UUFFZCxvQkFBZSxHQUFHLElBQUksQ0FBQztRQUN2QixnQkFBVyxHQUFHLElBQUksQ0FBQztRQUVuQixhQUFRLEdBQUcsR0FBRyxFQUFFO1lBQ2QsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVc7Z0JBQUUsT0FBTztZQUNwQyxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQy9CLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztZQUMxQixJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFDM0QsQ0FBQyxDQUFDO1FBRUYsYUFBUSxHQUFHLEdBQUcsRUFBRTtZQUNkLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN6QyxDQUFDLENBQUM7UUFFRixhQUFRLEdBQUcsR0FBRyxFQUFFO1lBQ2QsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRTtnQkFDekIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQ25ELElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQzthQUNuQztpQkFBTTtnQkFDTCxJQUFJLENBQUMsV0FBVyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQzNDLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQzthQUN4QztRQUNILENBQUMsQ0FBQztRQUVGLFVBQUssR0FBRyxHQUFHLEVBQUU7WUFDWCxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDNUMsQ0FBQyxDQUFDO1FBRUYseUJBQW9CLEdBQUcsQ0FBQyxLQUFpQixFQUFFLEVBQUU7WUFDM0MsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVM7Z0JBQUUsT0FBTztZQUNsQyxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDdkIsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUMsVUFBeUIsSUFBSSxLQUFLLENBQUMsTUFBcUIsQ0FBQztZQUMvRSxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUM7WUFDOUQsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO1lBQzdELElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO1lBQ3JDLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO1lBRXJDLElBQUksQ0FBQyxXQUFXLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUUzQyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUN2RCxRQUFRLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUVuRCxNQUFNLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1FBQzdELENBQUMsQ0FBQztRQUVGLGlCQUFZLEdBQUcsR0FBRyxFQUFFO1lBQ2xCLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLElBQUksSUFBSSxDQUFDLGVBQWU7Z0JBQUUsT0FBTztZQUN4RCxJQUFJLFVBQVUsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDN0QsSUFBSSxlQUFlLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQzVELElBQUksSUFBSSxDQUFDLHlCQUF5QjtnQkFBRSxVQUFVLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztZQUNqRSxVQUFVLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztZQUMxQixJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxlQUFlLEdBQUcsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztZQUNyRCxJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQztRQUMvQixDQUFDLENBQUM7UUFFRixhQUFRLEdBQUcsR0FBRyxFQUFFO1lBQ2QsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsSUFBSSxJQUFJLENBQUMsV0FBVztnQkFBRSxPQUFPO1lBQ3BELElBQUksVUFBVSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUM3RCxJQUFJLGVBQWUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDNUQsSUFBSSxJQUFJLENBQUMseUJBQXlCO2dCQUFFLFVBQVUsQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO1lBQ2pFLFVBQVUsQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO1lBQzFCLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLGVBQWUsR0FBRyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO1lBQ3JELElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1FBQy9CLENBQUMsQ0FBQztRQUVGLFNBQUksR0FBRyxHQUFHLEVBQUU7WUFDVixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQzFCLENBQUMsQ0FBQztRQUVGLFdBQU0sR0FBRyxHQUFHLEVBQUU7WUFDWixJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQzVCLENBQUMsQ0FBQztJQWphRixDQUFDO0lBb1JDLENBQUM7SUFNSDs7Ozs7O09BTUc7SUFDSCxTQUFTLENBQUMsS0FBaUI7UUFDekIsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTTtZQUFFLE9BQU87UUFDaEMsSUFBSSxXQUFXLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDekQsSUFBSSxXQUFXLEtBQUssVUFBVSxFQUFFLEVBQUUsZUFBZTtZQUMvQyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDcEIsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1NBQ3hCO1FBQ0QsSUFBSSxXQUFXLEtBQUssV0FBVyxFQUFFLEVBQUUsV0FBVztZQUM1QyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDaEIsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1NBQ3hCO1FBQ0QsSUFBSSxXQUFXLEtBQUssUUFBUSxFQUFFLEVBQUUsWUFBWTtZQUMxQyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDakIsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1NBQ3hCO1FBQ0QsSUFBSSxXQUFXLEtBQUssVUFBVSxFQUFFLEVBQUUsV0FBVztZQUMzQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDaEIsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1NBQ3hCO1FBQ0QsSUFBSSxXQUFXLEtBQUssT0FBTyxFQUFFLEVBQUUsZUFBZTtZQUM1QyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLEVBQUU7Z0JBQzFCLElBQUksQ0FBQyxXQUFXLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDM0MsSUFBSSxDQUFDLFdBQVcsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO2FBQzVDO2lCQUFNLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLEtBQUssT0FBTyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxLQUFLLE1BQU07Z0JBQzlFLElBQUksQ0FBQyxXQUFXLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQzs7Z0JBRTNDLElBQUksQ0FBQyxXQUFXLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ3JELEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztTQUN4QjtRQUNELElBQUksV0FBVyxLQUFLLE9BQU8sRUFBRSxFQUFFLGdCQUFnQjtZQUM3QyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLEVBQUU7Z0JBQzFCLElBQUksQ0FBQyxXQUFXLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDM0MsSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO2FBQzdDO2lCQUFNLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLEtBQUssTUFBTSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxLQUFLLE1BQU07Z0JBQzdFLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQzs7Z0JBRTVDLElBQUksQ0FBQyxXQUFXLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ3JELEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztTQUN4QjtJQUNILENBQUM7SUFBQSxDQUFDO0lBMkZGLFFBQVE7UUFDTixJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxFQUFFLENBQUMsVUFBVSxDQUFDO1FBQzNELElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxhQUFhLENBQUM7UUFDakUsSUFBSSxDQUFDLHlCQUF5QixHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxFQUFFLENBQUMseUJBQXlCLENBQUM7UUFDekYsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7UUFFN0IsSUFBSSxDQUFDLHFCQUFxQixDQUFDLFNBQVMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDLG1CQUEwQyxFQUFFLEVBQUU7WUFDOUYsSUFBSSxDQUFDLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1FBQ3BDLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELGVBQWU7UUFDYixJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFFRCxXQUFXO1FBQ1QsUUFBUSxDQUFDLG1CQUFtQixDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDMUQsUUFBUSxDQUFDLG1CQUFtQixDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFdEQsTUFBTSxDQUFDLG1CQUFtQixDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQztJQUNoRSxDQUFDOzs2R0FqY1UsZ0JBQWdCO2lHQUFoQixnQkFBZ0IscUlBRmhCLENBQUMsY0FBYyxFQUFFLGlCQUFpQixFQUFFLHFCQUFxQixDQUFDLDBCQ1Z2RSw2bEpBZ0RBOzJGRHBDYSxnQkFBZ0I7a0JBTjVCLFNBQVM7K0JBQ0Usb0JBQW9CLGFBR25CLENBQUMsY0FBYyxFQUFFLGlCQUFpQixFQUFFLHFCQUFxQixDQUFDO2tNQUc1RCxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIEFmdGVyVmlld0luaXQsIElucHV0LCBFbGVtZW50UmVmLCBDaGFuZ2VEZXRlY3RvclJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVHJ1V2luZG93QWRkVmlld0V2ZW50IH0gZnJvbSAnLi4vLi4vLi4vY2xhc3Nlcy90cnUtd2luZG93LWFkZC12aWV3LWV2ZW50JztcclxuaW1wb3J0IHsgVHJ1RGF0YUNvbnRleHQgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy90cnUtZGF0YS1jb250ZXh0JztcbmltcG9ydCB7IFRydUVudGl0eUFjY2Vzc29yIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvdHJ1LWVudGl0eS1hY2Nlc3Nvcic7XHJcbmltcG9ydCB7IFRydVdpbmRvd0V2ZW50SGFuZGxlciB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3RydS13aW5kb3ctZXZlbnQtaGFuZGxlcic7XHJcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndHJ1LWRlc2t0b3Atd2luZG93JyxcbiAgdGVtcGxhdGVVcmw6ICcuL3RydS1kZXNrdG9wLXdpbmRvdy5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4uL3RydS1kZXNrdG9wLmNzcycsICcuL3RydS1kZXNrdG9wLXdpbmRvdy5jc3MnXSxcbiAgcHJvdmlkZXJzOiBbVHJ1RGF0YUNvbnRleHQsIFRydUVudGl0eUFjY2Vzc29yLCBUcnVXaW5kb3dFdmVudEhhbmRsZXJdXG59KVxuZXhwb3J0IGNsYXNzIFRydURlc2t0b3BXaW5kb3cgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQge1xuICBASW5wdXQoKSB3aW5kb3c6IGFueTtcbiAgQElucHV0KCkgdmlld3BvcnRDdHJsOiBhbnk7XG4gIEBJbnB1dCgpIGRlc2t0b3BDdHJsOiBhbnk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBkYXRhQ29udGV4dDogVHJ1RGF0YUNvbnRleHQsXG4gICAgcHJpdmF0ZSB0cnVXaW5kb3dFdmVudEhhbmRsZXI6IFRydVdpbmRvd0V2ZW50SGFuZGxlcixcbiAgICBwcml2YXRlIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsXG4gICAgcHJpdmF0ZSBjZDogQ2hhbmdlRGV0ZWN0b3JSZWYpIHtcbiAgfVxuXG4gIHggPSAwO1xuICB5ID0gMDtcbiAgbGFzdFggPSAwO1xuICBsYXN0WSA9IDA7XG4gIHN0YXJ0WCA9IDA7XG4gIHN0YXJ0WSA9IDA7XG4gIHRpdGxlQmFyOiBIVE1MRWxlbWVudCB8IG51bGwgPSBudWxsO1xuICBjYW5DbG9zZUZuID0gdW5kZWZpbmVkO1xuICBjYW5OYXZpZ2F0ZUZuITogKCkgPT4gYm9vbGVhbjtcbiAgY2FuY2VsRWRpdGluZ09uTmF2aWdhdGlvbiA9IGZhbHNlO1xuICB2aWV3cG9ydERpbWVuc2lvbnM6IGFueSA9IHVuZGVmaW5lZDtcblxuICBoYXNDaGFuZ2VzID0gKCkgPT4ge1xuICAgIHJldHVybiB0aGlzLmRhdGFDb250ZXh0Lmhhc0NoYW5nZXMoKS5sZW5ndGg7XHJcbiAgfVxuXG4gIG1vdXNlTW92ZSA9IChldmVudDogTW91c2VFdmVudCkgPT4ge1xuXG4gICAgdGhpcy52aWV3cG9ydERpbWVuc2lvbnMgPSB0aGlzLnZpZXdwb3J0Q3RybC5nZXRWaWV3cG9ydERpbWVuc2lvbnMoKTtcbiAgICBpZiAoZXZlbnQucGFnZVggPD0gMCB8fFxuICAgICAgZXZlbnQucGFnZVggPj0gdGhpcy52aWV3cG9ydERpbWVuc2lvbnMud2lkdGggfHxcbiAgICAgIHRoaXMud2luZG93Lm1heGltaXplZCkgcmV0dXJuO1xuXG4gICAgaWYgKHRoaXMudGl0bGVCYXIgPT0gbnVsbCkgcmV0dXJuO1xuXG4gICAgLy90aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5zZXRBdHRyaWJ1dGUoJ3N0eWxlJywgJ29wYWNpdHk6IDAuNTsnKTtcbiAgICB0aGlzLnggPSBldmVudC5zY3JlZW5YIC0gdGhpcy5zdGFydFg7XG4gICAgdGhpcy55ID0gZXZlbnQuc2NyZWVuWSAtIHRoaXMuc3RhcnRZO1xuXG4gICAgLy9Ub3AgQ29udGFpbm1lbnRcbiAgICB0aGlzLnkgPSB0aGlzLnkgPj0gMCA/IHRoaXMueSA6IDA7XG4gICAgLy9Cb3R0b20gQ29udGFpbm1lbnRcbiAgICB0aGlzLnkgPSB0aGlzLnkgPD0gdGhpcy52aWV3cG9ydERpbWVuc2lvbnMuaGVpZ2h0IC0gdGhpcy50aXRsZUJhci5vZmZzZXRIZWlnaHQgPyB0aGlzLnkgOiB0aGlzLnZpZXdwb3J0RGltZW5zaW9ucy5oZWlnaHQgLSB0aGlzLnRpdGxlQmFyLm9mZnNldEhlaWdodDtcblxuICAgIC8vTGVmdCBDb250YWlubWVudFxuICAgIHRoaXMueCA9IHRoaXMueCA+PSAtKHRoaXMudGl0bGVCYXIub2Zmc2V0V2lkdGggKyB0aGlzLnRpdGxlQmFyLm9mZnNldExlZnQpID8gdGhpcy54IDogLSh0aGlzLnRpdGxlQmFyLm9mZnNldFdpZHRoICsgdGhpcy50aXRsZUJhci5vZmZzZXRMZWZ0KTtcbiAgICAvL1JpZ2h0IENvbnRhaW5tZW50XG4gICAgdGhpcy54ID0gdGhpcy54IDw9IHRoaXMudmlld3BvcnREaW1lbnNpb25zLndpZHRoIC0gdGhpcy50aXRsZUJhci5vZmZzZXRMZWZ0ID8gdGhpcy54IDogdGhpcy52aWV3cG9ydERpbWVuc2lvbnMud2lkdGggLSB0aGlzLnRpdGxlQmFyLm9mZnNldExlZnQ7XG5cbiAgICB0aGlzLndpbmRvdy50b3AgPSB0aGlzLnkgKyAncHgnO1xuICAgIHRoaXMud2luZG93LmxlZnQgPSB0aGlzLnggKyAncHgnO1xuICB9O1xuXG4gIG1vdXNlVXAgPSAoZXZlbnQ6IE1vdXNlRXZlbnQpID0+IHtcbiAgICBpZiAoZXZlbnQucGFnZVkgPD0gdGhpcy5kZXNrdG9wQ3RybC5vcHRpb25zLnZpZXdwb3J0VG9wKSB7XG4gICAgICB0aGlzLmRlc2t0b3BDdHJsLm1heGltaXplKHRoaXMud2luZG93KTtcbiAgICB9XG4gICAgaWYgKGV2ZW50LnBhZ2VYIDw9IDApIHtcbiAgICAgIHRoaXMuZGVza3RvcEN0cmwubWF4aW1pemVMZWZ0KHRoaXMud2luZG93KTtcbiAgICB9XG4gICAgdGhpcy52aWV3cG9ydERpbWVuc2lvbnMgPSB0aGlzLnZpZXdwb3J0Q3RybC5nZXRWaWV3cG9ydERpbWVuc2lvbnMoKTtcbiAgICBpZiAoZXZlbnQucGFnZVggPj0gdGhpcy52aWV3cG9ydERpbWVuc2lvbnMud2lkdGggLSAxKSB7XG4gICAgICB0aGlzLmRlc2t0b3BDdHJsLm1heGltaXplUmlnaHQodGhpcy53aW5kb3cpO1xuICAgIH1cblxuICAgIC8vdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuc2V0QXR0cmlidXRlKCdzdHlsZScsICdvcGFjaXR5OiAxLjA7Jyk7XG4gICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgdGhpcy5tb3VzZU1vdmUpO1xuICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCB0aGlzLm1vdXNlVXApO1xuICB9O1xuXG4gIC8qKlxuICAgKiBAdHJ1LmRvYyBmdW5jdGlvblxuICAgKiBAbmFtZSB0cnVEZXNrdG9wV2luZG93Q29tcG9uZW50LnVwZGF0ZU5hdmlnYXRpb25TdGF0ZVxuICAgKiBAbW9kdWxlIHRydS5kZXNrdG9wLndpbmRvd1xuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogVXBkYXRlcyB3aW5kb3cgbmF2aWdhdGlvbiBidXR0b25zIGJhc2VkIGxvY2F0aW9uIG9mIHRoZSBhY3RpdmUgdmlldyBpbiB0aGUgdmlld3MgYXJyYXkuXG4gICAqXG4gICAqL1xuICB1cGRhdGVOYXZpZ2F0aW9uU3RhdGUgPSAoKSA9PiB7XG4gICAgaWYgKHRoaXMud2luZG93LnZpZXdzID09PSB1bmRlZmluZWQpIHJldHVybjtcbiAgICB2YXIgbGVuZ3RoID0gdGhpcy53aW5kb3cudmlld3MubGVuZ3RoO1xuICAgIHRoaXMuZGlzYWJsZVByZXZpb3VzID0gISEodGhpcy53aW5kb3cudmlld3NbMF0uYWN0aXZlIHx8IGxlbmd0aCA9PT0gMSk7XG4gICAgdGhpcy5kaXNhYmxlTmV4dCA9ICEhKHRoaXMud2luZG93LnZpZXdzW2xlbmd0aCAtIDFdLmFjdGl2ZSB8fCBsZW5ndGggPT09IDEpO1xuICB9O1xuXG4gIC8qKlxuICAgKiBAdHJ1LmRvYyBmdW5jdGlvblxuICAgKiBAbmFtZSB0cnVEZXNrdG9wV2luZG93Q29tcG9uZW50LmlzV2luZG93SW5WaWV3cG9ydFxuICAgKiBAbW9kdWxlIHRydS5kZXNrdG9wLndpbmRvd1xuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogRGV0ZXJtaW5lcyBpZiB0aGUgd2luZG93IGlzIHdpdGhpbiB0aGUgdmlld3BvcnQgYm91bmRhcmllcy5cbiAgICpcbiAgICovXG4gIGlzV2luZG93SW5WaWV3cG9ydCA9ICgpID0+IHtcbiAgICB2YXIgd2luZG93VG9wID0gMDtcbiAgICB2YXIgd2luZG93TGVmdCA9IDA7XG4gICAgaWYgKCF0aGlzLndpbmRvdy5taW5pbWl6ZWQpIHtcbiAgICAgIHdpbmRvd1RvcCA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50Lm9mZnNldFRvcDtcbiAgICAgIHdpbmRvd0xlZnQgPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5vZmZzZXRMZWZ0O1xuICAgIH0gZWxzZSB7XG4gICAgICB3aW5kb3dUb3AgPSBwYXJzZUludCh0aGlzLndpbmRvdy5zYXZlZFBvc2l0aW9uLnRvcCwgMTApO1xuICAgICAgd2luZG93TGVmdCA9IHBhcnNlSW50KHRoaXMud2luZG93LnNhdmVkUG9zaXRpb24ubGVmdCwgMTApO1xuICAgIH1cbiAgICBpZiAoKHdpbmRvd1RvcCArIDEwKSA+PSB0aGlzLnZpZXdwb3J0Q3RybC5nZXRWaWV3cG9ydERpbWVuc2lvbnMoKS5oZWlnaHQgfHxcbiAgICAgICh3aW5kb3dMZWZ0ICsgNjApID49IHRoaXMudmlld3BvcnRDdHJsLmdldFZpZXdwb3J0RGltZW5zaW9ucygpLndpZHRoKSB7XG4gICAgICB0aGlzLndpbmRvdy5vdXRPZkJvdW5kcyA9IHRydWU7XG4gICAgICB0aGlzLndpbmRvdy5hY3RpdmUgPSBmYWxzZTtcbiAgICAgIHRoaXMuZGVza3RvcEN0cmwuYWN0aXZhdGVGb3JlbW9zdFdpbmRvdygpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLndpbmRvdy5vdXRPZkJvdW5kcyA9IGZhbHNlO1xuICAgIH1cbiAgfTtcblxuICAvKipcbiAgICogQHRydS5kb2MgZnVuY3Rpb25cbiAgICogQG5hbWUgdHJ1RGVza3RvcFdpbmRvd0NvbXBvbmVudC5nZXRXaW5kb3dcbiAgICogQG1vZHVsZSB0cnUuZGVza3RvcC53aW5kb3dcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIEdldHMgdGhlIHdpbmRvdyBvYmplY3QuXG4gICAqXG4gICAqIEByZXR1cm5zIHtvYmplY3R9IHdpbmRvdyBvYmplY3QuXG4gICAqL1xuICBnZXRXaW5kb3cgPSAoKSA9PiB7XG4gICAgcmV0dXJuIHRoaXMud2luZG93O1xuICB9O1xuXG4gIC8qKlxuICAgKiBAdHJ1LmRvYyBmdW5jdGlvblxuICAgKiBAbmFtZSB0cnVEZXNrdG9wV2luZG93Q29tcG9uZW50LnNldFdpbmRvd1RpdGxlXG4gICAqIEBtb2R1bGUgdHJ1LmRlc2t0b3Aud2luZG93XG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBTZXRzIHRoZSB3aW5kb3cgdGl0bGUuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZSB0byBkaXNwbGF5IGluIHRoZSB3aW5kb3cgdGl0bGUgYmFyLlxuICAgKi9cbiAgc2V0V2luZG93VGl0bGUgPSAodmFsdWU6IHN0cmluZykgPT4ge1xuICAgIHRoaXMud2luZG93LnRpdGxlID0gdmFsdWU7XG4gIH07XG5cbiAgZ2V0V2luZG93VGl0bGUgPSAoKSA9PiB7XG4gICAgcmV0dXJuIHRoaXMud2luZG93LnRpdGxlO1xuICB9O1xuXG4gIC8qKlxuICAgKiBAdHJ1LmRvYyBmdW5jdGlvblxuICAgKiBAbmFtZSB0cnVEZXNrdG9wV2luZG93Q29tcG9uZW50LmdvVG9QcmV2aW91c1ZpZXdcbiAgICogQG1vZHVsZSB0cnUuZGVza3RvcC53aW5kb3dcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIFB1YmxpYyBtZXRob2QgZm9yIG5hdmlnYXRpbmcgdG8gdGhlIHByZXZpb3VzIHZpZXcuXG4gICAqXG4gICAqL1xuICBnb1RvUHJldmlvdXNWaWV3ID0gKCkgPT4ge1xuICAgIHRoaXMucHJldmlvdXNWaWV3KCk7XG4gIH07XG5cbiAgLyoqXG4gICAqIEB0cnUuZG9jIGZ1bmN0aW9uXG4gICAqIEBuYW1lIHRydURlc2t0b3BXaW5kb3dDb21wb25lbnQudmlld0lzRWRpdGluZ1xuICAgKiBAbW9kdWxlIHRydS5kZXNrdG9wLndpbmRvd1xuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogQ2hlY2tzIHdoZXRoZXIgdmlldyBpcyBlZGl0aW5nLlxuICAgKlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0uXG4gICAqL1xuICB2aWV3SXNFZGl0aW5nID0gKCkgPT4ge1xuICAgIHZhciBpc0VkaXRpbmcgPSBmYWxzZTtcbiAgICB0aGlzLndpbmRvdy52aWV3cy5mb3JFYWNoKCh2aWV3OiBhbnkpID0+IHtcbiAgICAgIGlmICh2aWV3LmlzRWRpdGluZyA9PT0gdHJ1ZSkge1xuICAgICAgICBpc0VkaXRpbmcgPSB0cnVlO1xuICAgICAgfVxuICAgIH0sIG51bGwpO1xuICAgIHJldHVybiBpc0VkaXRpbmc7XG4gIH07XG5cbiAgLyoqXG4gICAqIEB0cnUuZG9jIGZ1bmN0aW9uXG4gICAqIEBuYW1lIHRydURlc2t0b3BXaW5kb3dDb21wb25lbnQuY2FuTmF2aWdhdGVcbiAgICogQG1vZHVsZSB0cnUuZGVza3RvcC53aW5kb3dcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIENoZWNrcyB3aGV0aGVyIG5hdmlnYXRpb24gY2FuIG9jY3VyLi5cbiAgICpcbiAgICogQHJldHVybnMge2Jvb2xlYW59LlxuICAgKi9cbiAgY2FuTmF2aWdhdGUgPSAoKSA9PiB7XG4gICAgdmFyIGNhbk5hdmlnYXRlID0gdHJ1ZTtcbiAgICBpZiAodGhpcy5jYW5OYXZpZ2F0ZUZuICE9PSBudWxsKSB7XG4gICAgICBpZiAodGhpcy52aWV3SXNFZGl0aW5nKCkpIHtcbiAgICAgICAgY2FuTmF2aWdhdGUgPSB0aGlzIS5jYW5OYXZpZ2F0ZUZuKCk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBjYW5OYXZpZ2F0ZTtcbiAgfTtcblxuICAvKipcbiAgICogQHRydS5kb2MgZnVuY3Rpb25cbiAgICogQG5hbWUgdHJ1RGVza3RvcFdpbmRvd0NvbXBvbmVudC5yZW1vdmVGb3J3YXJkVmlld3NcbiAgICogQG1vZHVsZSB0cnUuZGVza3RvcC53aW5kb3dcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIFJlbW92ZXMgYWxsIHZpZXcocykgZm9yd2FyZCBvZiB0aGUgYWN0aXZlIHZpZXcuXG4gICAqXG4gICAqL1xuICByZW1vdmVGb3J3YXJkVmlld3MgPSAoKSA9PiB7XG4gICAgdmFyIGFjdGl2ZVZpZXcgPSB0aGlzLmRlc2t0b3BDdHJsLmdldEFjdGl2ZVZpZXcodGhpcy53aW5kb3cpO1xuICAgIHZhciBhY3RpdmVWaWV3SW5kZXggPSB0aGlzLndpbmRvdy52aWV3cy5pbmRleE9mKGFjdGl2ZVZpZXcpO1xuICAgIGZvciAodmFyIGkgPSB0aGlzLndpbmRvdy52aWV3cy5sZW5ndGg7IGkgPiBhY3RpdmVWaWV3SW5kZXg7IGktLSkge1xuICAgICAgdGhpcy53aW5kb3cudmlld3Muc3BsaWNlKGksIDEpO1xuICAgIH1cbiAgICB0aGlzLnVwZGF0ZU5hdmlnYXRpb25TdGF0ZSgpO1xuICB9O1xuXG4gIC8qKlxuICAgKiBAdHJ1LmRvYyBmdW5jdGlvblxuICAgKiBAbmFtZSB0cnVEZXNrdG9wV2luZG93Q29tcG9uZW50LmFkZFZpZXdcbiAgICogQG1vZHVsZSB0cnUuZGVza3RvcC53aW5kb3dcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIFJlbW92ZXMgYWxsIGluYWN0aXZlIHZpZXcocykgZm9sbG93aW5nIHRoZSBhY3RpdmUgdmlldyBhbmQgaW5zZXJ0cyBhIG5ldyB2aWV3LlxuICAgKlxuICAgKi9cbiAgYWRkVmlldyA9ICh2aWV3Q29uZmlnT3ZlcmxheTogYW55KSA9PiB7XG4gICAgdGhpcy5yZW1vdmVGb3J3YXJkVmlld3MoKTtcbiAgICB2YXIgYWN0aXZlVmlldyA9IHRoaXMuZGVza3RvcEN0cmwuZ2V0QWN0aXZlVmlldyh0aGlzLndpbmRvdyk7XG4gICAgYWN0aXZlVmlldy5hY3RpdmUgPSBmYWxzZTtcbiAgICB2YXIgdmlld0NvbmZpZyA9IHRoaXMuZGVza3RvcEN0cmwuZ2V0RGVza3RvcCgpLnZpZXdDb25maWc7XG4gICAgdmFyIHZpZXdDb25maWdJbnN0YW5jZSA9IE9iamVjdC5hc3NpZ24oe30sIHZpZXdDb25maWcpO1xuICAgIHZhciBleHRlbmRlZCA9IE9iamVjdC5hc3NpZ24odmlld0NvbmZpZ0luc3RhbmNlLCB2aWV3Q29uZmlnT3ZlcmxheSk7XG4gICAgZXh0ZW5kZWQud2luZG93ID0gdGhpcztcbiAgICB0aGlzLndpbmRvdy52aWV3cy5wdXNoKGV4dGVuZGVkKTtcbiAgICB0aGlzLnVwZGF0ZU5hdmlnYXRpb25TdGF0ZSgpO1xuICB9O1xuXG4gIC8qKlxuICAgKiBAdHJ1LmRvYyBmdW5jdGlvblxuICAgKiBAbmFtZSB0cnVEZXNrdG9wV2luZG93Q29tcG9uZW50LmdldEdsb2JhbHNcbiAgICogQG1vZHVsZSB0cnUuZGVza3RvcC53aW5kb3dcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIHJldHVybnMgdGhlIGdsb2JhbCB2YWx1ZXMuXG4gICAqXG4gICAqL1xuICBnZXRHbG9iYWxzID0gKCkgPT4ge1xuICAgIHJldHVybiB0aGlzLndpbmRvdy5nbG9iYWxzO1xuICB9O1xuXG4gIC8qKlxuICAgKiBAdHJ1LmRvYyBmdW5jdGlvblxuICAgKiBAbmFtZSB0cnVEZXNrdG9wV2luZG93Q29tcG9uZW50LmZpcnN0Vmlld1xuICAgKiBAbW9kdWxlIHRydS5kZXNrdG9wLndpbmRvd1xuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICovXG4gIGZpcnN0VmlldyA9ICgpID0+IHtcbiAgICBpZiAoIXRoaXMuY2FuTmF2aWdhdGUoKSB8fCB0aGlzLmRpc2FibGVQcmV2aW91cykgcmV0dXJuO1xuICAgIGlmICh0aGlzLmNhbmNlbEVkaXRpbmdPbk5hdmlnYXRpb24pIHRoaXMuZGVza3RvcEN0cmwuZ2V0QWN0aXZlVmlldyh0aGlzLndpbmRvdykuaXNFZGl0aW5nID0gZmFsc2U7XG4gICAgbGV0IGFjdGl2ZVZpZXcgPSB0aGlzLmRlc2t0b3BDdHJsLmdldEFjdGl2ZVZpZXcodGhpcy53aW5kb3cpO1xuICAgIGFjdGl2ZVZpZXcuYWN0aXZlID0gZmFsc2U7XG4gICAgdGhpcy53aW5kb3cudmlld3NbMF0uYWN0aXZlID0gdHJ1ZTtcbiAgICB0aGlzLnVwZGF0ZU5hdmlnYXRpb25TdGF0ZSgpO1xuICB9O1xuXG4gIC8qKlxuICAgKiBAdHJ1LmRvYyBmdW5jdGlvblxuICAgKiBAbmFtZSB0cnVEZXNrdG9wV2luZG93Q29tcG9uZW50LmZpcnN0Vmlld1xuICAgKiBAbW9kdWxlIHRydS5kZXNrdG9wLndpbmRvd1xuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICovXG4gIGxhc3RWaWV3ID0gKCkgPT4ge1xuICAgIGlmICghdGhpcy5jYW5OYXZpZ2F0ZSgpIHx8IHRoaXMuZGlzYWJsZU5leHQpIHJldHVybjtcbiAgICBpZiAodGhpcy5jYW5jZWxFZGl0aW5nT25OYXZpZ2F0aW9uKSB0aGlzLmRlc2t0b3BDdHJsLmdldEFjdGl2ZVZpZXcodGhpcy53aW5kb3cpLmlzRWRpdGluZyA9IGZhbHNlO1xuICAgIGxldCBhY3RpdmVWaWV3ID0gdGhpcy5kZXNrdG9wQ3RybC5nZXRBY3RpdmVWaWV3KHRoaXMud2luZG93KTtcbiAgICBhY3RpdmVWaWV3LmFjdGl2ZSA9IGZhbHNlO1xuICAgIHRoaXMud2luZG93LnZpZXdzW3RoaXMud2luZG93LnZpZXdzLmxlbmd0aCAtIDFdLmFjdGl2ZSA9IHRydWU7XG4gICAgdGhpcy51cGRhdGVOYXZpZ2F0aW9uU3RhdGUoKTtcbiAgfTs7XG5cbiAgcmVzaXplRXZlbnRIYW5kbGVyID0gKCkgPT4ge1xuICAgIHRoaXMuaXNXaW5kb3dJblZpZXdwb3J0KCk7XG4gIH1cblxuICAvKipcbiAgICogQHRydS5kb2MgZXZlbnRcbiAgICogQG1vZHVsZSB0cnUuZGVza3RvcC53aW5kb3dcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqXG4gICAqL1xuICBvbktleWRvd24oZXZlbnQ6IE1vdXNlRXZlbnQpIHtcbiAgICBpZiAoIXRoaXMud2luZG93LmFjdGl2ZSkgcmV0dXJuO1xuICAgIHZhciBrZXlTZXF1ZW5jZSA9IHRoaXMuZGVza3RvcEN0cmwuZ2V0S2V5U2VxdWVuY2UoZXZlbnQpO1xuICAgIGlmIChrZXlTZXF1ZW5jZSA9PT0gJ2FsdCtsZWZ0JykgeyAvL1ByZXZpb3VzIFZpZXdcbiAgICAgIHRoaXMucHJldmlvdXNWaWV3KCk7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cbiAgICBpZiAoa2V5U2VxdWVuY2UgPT09ICdhbHQrcmlnaHQnKSB7IC8vTmV4dCBWaWV3XG4gICAgICB0aGlzLm5leHRWaWV3KCk7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cbiAgICBpZiAoa2V5U2VxdWVuY2UgPT09ICdhbHQrdXAnKSB7IC8vRmlyc3QgVmlld1xuICAgICAgdGhpcy5maXJzdFZpZXcoKTtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuICAgIGlmIChrZXlTZXF1ZW5jZSA9PT0gJ2FsdCtkb3duJykgeyAvL0xhc3QgVmlld1xuICAgICAgdGhpcy5sYXN0VmlldygpO1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG4gICAgaWYgKGtleVNlcXVlbmNlID09PSAnYWx0K2wnKSB7IC8vTWF4aW1pemUgbGVmdFxuICAgICAgaWYgKCF0aGlzLndpbmRvdy5tYXhpbWl6ZWQpIHtcbiAgICAgICAgdGhpcy5kZXNrdG9wQ3RybC5zYXZlUG9zaXRpb24odGhpcy53aW5kb3cpO1xuICAgICAgICB0aGlzLmRlc2t0b3BDdHJsLm1heGltaXplTGVmdCh0aGlzLndpbmRvdyk7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMud2luZG93Lm1heGltaXplZCA9PT0gJ3JpZ2h0JyB8fCB0aGlzLndpbmRvdy5tYXhpbWl6ZWQgPT09ICdmaWxsJylcbiAgICAgICAgdGhpcy5kZXNrdG9wQ3RybC5tYXhpbWl6ZUxlZnQodGhpcy53aW5kb3cpO1xuICAgICAgZWxzZVxuICAgICAgICB0aGlzLmRlc2t0b3BDdHJsLnJlc3RvcmVTYXZlZFBvc2l0aW9uKHRoaXMud2luZG93KTtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuICAgIGlmIChrZXlTZXF1ZW5jZSA9PT0gJ2FsdCtyJykgeyAvL01heGltaXplIHJpZ2h0XG4gICAgICBpZiAoIXRoaXMud2luZG93Lm1heGltaXplZCkge1xuICAgICAgICB0aGlzLmRlc2t0b3BDdHJsLnNhdmVQb3NpdGlvbih0aGlzLndpbmRvdyk7XG4gICAgICAgIHRoaXMuZGVza3RvcEN0cmwubWF4aW1pemVSaWdodCh0aGlzLndpbmRvdyk7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMud2luZG93Lm1heGltaXplZCA9PT0gJ2xlZnQnIHx8IHRoaXMud2luZG93Lm1heGltaXplZCA9PT0gJ2ZpbGwnKVxuICAgICAgICB0aGlzLmRlc2t0b3BDdHJsLm1heGltaXplUmlnaHQodGhpcy53aW5kb3cpO1xuICAgICAgZWxzZVxuICAgICAgICB0aGlzLmRlc2t0b3BDdHJsLnJlc3RvcmVTYXZlZFBvc2l0aW9uKHRoaXMud2luZG93KTtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuICB9O1xuXG4gIC8qKlxuICAgKiBAdHJ1LmRvYyB3YXRjaFxuICAgKiBAbW9kdWxlIHRydS5kZXNrdG9wLndpbmRvd1xuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogTW9uaXRvcnMgdGhlIHdpbmRvdydzIG1pbmltaXplZCBzdGF0ZVxuICAgKlxuICAgKi9cbiAgLy8kc2NvcGUuJHdhdGNoKCd3aW5kb3cubWluaW1pemVkJyxcbiAgLy8gICAgICAgICAgICAgIGZ1bmN0aW9uKHZhbHVlKSB7XG4gIC8vICBpZiAodmFsdWUgJiYgISRzY29wZS53aW5kb3cubWF4aW1pemVkKSB7XG4gIC8vICAgICRzY29wZS5kZXNrdG9wQ3RybC5zYXZlUG9zaXRpb24oJHNjb3BlLndpbmRvdyk7XG4gIC8vICB9XG4gIC8vfVxuICAvLyAgICAgICAgICApO1xuXG4gIGRpc2FibGVQcmV2aW91cyA9IHRydWU7XG4gIGRpc2FibGVOZXh0ID0gdHJ1ZTtcblxuICBhY3RpdmF0ZSA9ICgpID0+IHtcbiAgICBpZiAodGhpcy53aW5kb3cub3V0T2ZCb3VuZHMpIHJldHVybjtcbiAgICB0aGlzLmRlc2t0b3BDdHJsLmNsZWFyQWN0aXZlKCk7XG4gICAgdGhpcy53aW5kb3cuYWN0aXZlID0gdHJ1ZTtcbiAgICB0aGlzLndpbmRvdy56SW5kZXggPSB0aGlzLmRlc2t0b3BDdHJsLmdldE5leHRNYXhaSW5kZXgoKTtcbiAgfTtcblxuICBtaW5pbWl6ZSA9ICgpID0+IHtcbiAgICB0aGlzLmRlc2t0b3BDdHJsLm1pbmltaXplKHRoaXMud2luZG93KTtcbiAgfTtcblxuICBtYXhpbWl6ZSA9ICgpID0+IHtcbiAgICBpZiAodGhpcy53aW5kb3cubWF4aW1pemVkKSB7XG4gICAgICB0aGlzLmRlc2t0b3BDdHJsLnJlc3RvcmVTYXZlZFBvc2l0aW9uKHRoaXMud2luZG93KTtcbiAgICAgIHRoaXMud2luZG93Lm1heGltaXplZCA9IHVuZGVmaW5lZDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5kZXNrdG9wQ3RybC5zYXZlUG9zaXRpb24odGhpcy53aW5kb3cpO1xuICAgICAgdGhpcy5kZXNrdG9wQ3RybC5tYXhpbWl6ZSh0aGlzLndpbmRvdyk7XG4gICAgfVxuICB9O1xuXG4gIGNsb3NlID0gKCkgPT4ge1xuICAgIHRoaXMuZGVza3RvcEN0cmwuY2xvc2VXaW5kb3codGhpcy53aW5kb3cpO1xuICB9O1xuXG4gIHdpbmRvd1RpdGxlTW91c2VEb3duID0gKGV2ZW50OiBNb3VzZUV2ZW50KSA9PiB7XG4gICAgaWYgKHRoaXMud2luZG93Lm1heGltaXplZCkgcmV0dXJuO1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgdGhpcy50aXRsZUJhciA9IGV2ZW50LnNyY0VsZW1lbnQgYXMgSFRNTEVsZW1lbnQgfHwgZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50O1xuICAgIHRoaXMueCA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNoaWxkcmVuWzBdLm9mZnNldExlZnQ7XG4gICAgdGhpcy55ID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuY2hpbGRyZW5bMF0ub2Zmc2V0VG9wO1xuICAgIHRoaXMuc3RhcnRYID0gZXZlbnQuc2NyZWVuWCAtIHRoaXMueDtcbiAgICB0aGlzLnN0YXJ0WSA9IGV2ZW50LnNjcmVlblkgLSB0aGlzLnk7XG5cbiAgICB0aGlzLmRlc2t0b3BDdHJsLnNhdmVQb3NpdGlvbih0aGlzLndpbmRvdyk7XG5cbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCB0aGlzLm1vdXNlTW92ZSk7XG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsIHRoaXMubW91c2VVcCk7XG5cbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgdGhpcy5yZXNpemVFdmVudEhhbmRsZXIpO1xuICB9O1xuXG4gIHByZXZpb3VzVmlldyA9ICgpID0+IHtcbiAgICBpZiAoIXRoaXMuY2FuTmF2aWdhdGUoKSB8fCB0aGlzLmRpc2FibGVQcmV2aW91cykgcmV0dXJuO1xuICAgIHZhciBhY3RpdmVWaWV3ID0gdGhpcy5kZXNrdG9wQ3RybC5nZXRBY3RpdmVWaWV3KHRoaXMud2luZG93KTtcbiAgICB2YXIgYWN0aXZlVmlld0luZGV4ID0gdGhpcy53aW5kb3cudmlld3MuaW5kZXhPZihhY3RpdmVWaWV3KTtcbiAgICBpZiAodGhpcy5jYW5jZWxFZGl0aW5nT25OYXZpZ2F0aW9uKSBhY3RpdmVWaWV3LmlzRWRpdGluZyA9IGZhbHNlO1xuICAgIGFjdGl2ZVZpZXcuYWN0aXZlID0gZmFsc2U7XG4gICAgdGhpcy53aW5kb3cudmlld3NbYWN0aXZlVmlld0luZGV4IC0gMV0uYWN0aXZlID0gdHJ1ZTtcbiAgICB0aGlzLnVwZGF0ZU5hdmlnYXRpb25TdGF0ZSgpO1xuICB9O1xuXG4gIG5leHRWaWV3ID0gKCkgPT4ge1xuICAgIGlmICghdGhpcy5jYW5OYXZpZ2F0ZSgpIHx8IHRoaXMuZGlzYWJsZU5leHQpIHJldHVybjtcbiAgICB2YXIgYWN0aXZlVmlldyA9IHRoaXMuZGVza3RvcEN0cmwuZ2V0QWN0aXZlVmlldyh0aGlzLndpbmRvdyk7XG4gICAgdmFyIGFjdGl2ZVZpZXdJbmRleCA9IHRoaXMud2luZG93LnZpZXdzLmluZGV4T2YoYWN0aXZlVmlldyk7XG4gICAgaWYgKHRoaXMuY2FuY2VsRWRpdGluZ09uTmF2aWdhdGlvbikgYWN0aXZlVmlldy5pc0VkaXRpbmcgPSBmYWxzZTtcbiAgICBhY3RpdmVWaWV3LmFjdGl2ZSA9IGZhbHNlO1xuICAgIHRoaXMud2luZG93LnZpZXdzW2FjdGl2ZVZpZXdJbmRleCArIDFdLmFjdGl2ZSA9IHRydWU7XG4gICAgdGhpcy51cGRhdGVOYXZpZ2F0aW9uU3RhdGUoKTtcbiAgfTtcblxuICBzYXZlID0gKCkgPT4ge1xuICAgIHRoaXMuZGF0YUNvbnRleHQuc2F2ZSgpO1xuICB9O1xuXG4gIHJldmVydCA9ICgpID0+IHtcbiAgICB0aGlzLmRhdGFDb250ZXh0LnJldmVydCgpO1xuICB9O1xuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuY2FuQ2xvc2VGbiA9IHRoaXMuZGVza3RvcEN0cmwuZ2V0T3B0aW9ucygpLmNhbkNsb3NlRm47XG4gICAgdGhpcy5jYW5OYXZpZ2F0ZUZuID0gdGhpcy5kZXNrdG9wQ3RybC5nZXRPcHRpb25zKCkuY2FuTmF2aWdhdGVGbjtcbiAgICB0aGlzLmNhbmNlbEVkaXRpbmdPbk5hdmlnYXRpb24gPSB0aGlzLmRlc2t0b3BDdHJsLmdldE9wdGlvbnMoKS5jYW5jZWxFZGl0aW5nT25OYXZpZ2F0aW9uO1xuICAgIHRoaXMudXBkYXRlTmF2aWdhdGlvblN0YXRlKCk7XG5cbiAgICB0aGlzLnRydVdpbmRvd0V2ZW50SGFuZGxlci5vbkFkZFZpZXcoKS5zdWJzY3JpYmUoKHdpbmRpb3dBZGRWaWV3RXZlbnQ6IFRydVdpbmRvd0FkZFZpZXdFdmVudCkgPT4ge1xyXG4gICAgICB0aGlzLmFkZFZpZXcod2luZGlvd0FkZFZpZXdFdmVudCk7XHJcbiAgICB9KTtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcclxuICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCB0aGlzLm1vdXNlTW92ZSk7XG4gICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsIHRoaXMubW91c2VVcCk7XG5cbiAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigncmVzaXplJywgdGhpcy5yZXNpemVFdmVudEhhbmRsZXIpO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiZGVza3RvcC13aW5kb3ctY29udGFpbmVyXCJcclxuICAgICBbbmdDbGFzc109XCJ7J2Rlc2t0b3Atd2luZG93LWFjdGl2ZSc6IHdpbmRvdy5hY3RpdmUsICdkZXNrdG9wLXdpbmRvdy1tYXhpbWl6ZWQnOiB3aW5kb3cubWF4aW1pemVkfVwiXHJcbiAgICAgW25nU3R5bGVdPVwieyd6LWluZGV4Jzogd2luZG93LnpJbmRleCwgJ3RvcCc6IHdpbmRvdy50b3AsICdsZWZ0Jzogd2luZG93LmxlZnQsICdyaWdodCc6IHdpbmRvdy5yaWdodCwgJ2JvdHRvbSc6IHdpbmRvdy5ib3R0b20sICdoZWlnaHQnOiB3aW5kb3cuaGVpZ2h0LCAnd2lkdGgnOiB3aW5kb3cud2lkdGgsICdtaW4taGVpZ2h0Jzogd2luZG93Lm1pbkhlaWdodCwgJ21pbldpZHRoJzogd2luZG93Lm1pbldpZHRofVwiXHJcbiAgICAgW3N0eWxlLm9mZnNldExlZnQucHhdPVwieFwiXHJcbiAgICAgW3N0eWxlLm9mZnNldFRvcC5weF09XCJ5XCJcclxuICAgICAobW91c2Vkb3duKT1cImFjdGl2YXRlKClcIlxyXG4gICAgIFtoaWRkZW5dPVwid2luZG93Lm1pbmltaXplZFwiPlxyXG4gIDxkaXYgY2xhc3M9XCJkZXNrdG9wLXdpbmRvdy1oZWFkZXJcIiBbbmdDbGFzc109XCJ7J2Rlc2t0b3Atd2luZG93LW1heGltaXplZCc6IHdpbmRvdy5tYXhpbWl6ZWQsICdkZXNrdG9wLXdpbmRvdy1vcGFjaXR5JzogIXdpbmRvdy5hY3RpdmV9XCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwidG9vbGJhci13aW5kb3ctbmF2aWdhdGlvblwiPlxyXG4gICAgICA8dHJ1LXRvb2xiYXI+XHJcbiAgICAgICAgPHRydS10b29sYmFyLWJ1dHRvbiBbaWNvbl09XCIndHJ1LXRvb2xiYXItcHJldmlvdXMtaWNvbidcIiBbdG9vbHRpcF09XCInR28gQmFjayBPbmUgVmlldyAtIFtBbHQgKyBMZWZ0XSdcIiAoY2xpY2spPVwicHJldmlvdXNWaWV3KClcIj48L3RydS10b29sYmFyLWJ1dHRvbj5cclxuICAgICAgICA8dHJ1LXRvb2xiYXItYnV0dG9uIFtpY29uXT1cIid0cnUtdG9vbGJhci1uZXh0LWljb24nXCIgW3Rvb2x0aXBdPVwiJ0dvIEZvcndhcmQgT25lIFZpZXcgLSBbQWx0ICsgUmlnaHRdJ1wiIChjbGljayk9XCJuZXh0VmlldygpXCI+PC90cnUtdG9vbGJhci1idXR0b24+XHJcbiAgICAgICAgPHRydS10b29sYmFyLWJ1dHRvbiBbaWNvbl09XCIndHJ1LXRvb2xiYXItc2F2ZS1pY29uJ1wiIGNsYXNzPVwiZGVza3RvcC13aW5kb3ctc2F2ZS1pY29uXCIgW25nQ2xhc3NdPVwieydkZXNrdG9wLXdpbmRvdy1zYXZlLWljb24taGFzLWNoYW5nZXMnOiBoYXNDaGFuZ2VzKCl9XCIgW3Rvb2x0aXBdPVwiJ1NhdmUgLSBbQ3RybCArIFNdJ1wiIChjbGljayk9XCJzYXZlKClcIj48L3RydS10b29sYmFyLWJ1dHRvbj5cclxuICAgICAgICA8dHJ1LXRvb2xiYXItYnV0dG9uIFtpY29uXT1cIid0cnUtdG9vbGJhci1yZXZlcnQtaWNvbidcIiBjbGFzcz1cImRlc2t0b3Atd2luZG93LXJldmVydC1pY29uXCIgW25nQ2xhc3NdPVwieydkZXNrdG9wLXdpbmRvdy1yZXZlcnQtaWNvbi1oYXMtY2hhbmdlcyc6IGhhc0NoYW5nZXMoKX1cIiBbdG9vbHRpcF09XCInUmV2ZXJ0IC0gW0N0cmwgKyBTaGlmdCArIFJdJ1wiIChjbGljayk9XCJyZXZlcnQoKVwiPjwvdHJ1LXRvb2xiYXItYnV0dG9uPlxyXG4gICAgICAgIDx0cnUtdG9vbGJhci1zZXBhcmF0b3I+PC90cnUtdG9vbGJhci1zZXBhcmF0b3I+XHJcbiAgICAgIDwvdHJ1LXRvb2xiYXI+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJkZXNrdG9wLXdpbmRvdy10aXRsZVwiIChkYmxjbGljayk9XCJtYXhpbWl6ZSgpXCIgKG1vdXNlZG93bik9XCJ3aW5kb3dUaXRsZU1vdXNlRG93bigkZXZlbnQpXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJkZXNrdG9wLWNsaWNrLXRocm91Z2hcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZGVza3RvcC10ZXh0XCI+e3t3aW5kb3cudGl0bGV9fTwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cImRlc2t0b3Atd2luZG93LWFjdGlvblwiPlxyXG4gICAgICA8dHJ1LXRvb2xiYXI+XHJcbiAgICAgICAgPHRydS10b29sYmFyLWJ1dHRvbiBbaWNvbl09XCIndHJ1LXRvb2xiYXItbWluaW1pemUtaWNvbidcIiBbdG9vbHRpcF09XCInTWluaW1pemUgLSBbQWx0ICsgTl0nXCIgKGNsaWNrKT1cIm1pbmltaXplKClcIj48L3RydS10b29sYmFyLWJ1dHRvbj5cclxuICAgICAgICA8dHJ1LXRvb2xiYXItYnV0dG9uICpuZ0lmPVwiIXdpbmRvdy5tYXhpbWl6ZWRcIiBbaWNvbl09XCIndHJ1LXRvb2xiYXItbWF4aW1pemUtaWNvbidcIiBbdG9vbHRpcF09XCInR28gRm9yd2FyZCBPbmUgVmlldyAtIFtBbHQgKyBSaWdodF0nXCIgKGNsaWNrKT1cIm1heGltaXplKClcIiBjbGFzcz1cIm1heGltaXplXCI+PC90cnUtdG9vbGJhci1idXR0b24+XHJcbiAgICAgICAgPHRydS10b29sYmFyLWJ1dHRvbiAqbmdJZj1cIndpbmRvdy5tYXhpbWl6ZWRcIiBbaWNvbl09XCIndHJ1LXRvb2xiYXItcmVzdG9yZS1pY29uJ1wiIFt0b29sdGlwXT1cIidHbyBGb3J3YXJkIE9uZSBWaWV3IC0gW0FsdCArIFJpZ2h0XSdcIiAoY2xpY2spPVwibWF4aW1pemUoKVwiIGNsYXNzPVwibWF4aW1pemVcIj48L3RydS10b29sYmFyLWJ1dHRvbj5cclxuICAgICAgICA8dHJ1LXRvb2xiYXItYnV0dG9uIFtpY29uXT1cIid0cnUtdG9vbGJhci1jbG9zZS1pY29uJ1wiIFt0b29sdGlwXT1cIidDbG9zZSBXaW5kb3cgLSBbQWx0ICsgU0hJRlQgKyBYXSdcIiAoY2xpY2spPVwiY2xvc2UoKVwiPjwvdHJ1LXRvb2xiYXItYnV0dG9uPlxyXG4gICAgICA8L3RydS10b29sYmFyPlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbiAgPGZpZWxkc2V0IG5nLWRpc2FibGVkPVwiIXdpbmRvdy5hY3RpdmVcIiBjbGFzcz1cImRlc2t0b3Atd2luZG93LWZpZWxkc2V0XCIgW25nQ2xhc3NdPVwieydkZXNrdG9wLXdpbmRvdy1vcGFjaXR5JzogIXdpbmRvdy5hY3RpdmV9XCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiZGVza3RvcC13aW5kb3ctY29udGVudFwiPlxyXG4gICAgICA8ZGl2ICpuZ0Zvcj1cImxldCB2aWV3IG9mIHdpbmRvdy52aWV3c1wiPlxyXG4gICAgICAgIDx0cnUtZGVza3RvcC12aWV3IFt2aWV3XT1cInZpZXdcIiBbaGlkZGVuXT1cIiF2aWV3LmFjdGl2ZVwiPjxuZy10ZW1wbGF0ZT48L25nLXRlbXBsYXRlPjwvdHJ1LWRlc2t0b3Atdmlldz5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICA8L2ZpZWxkc2V0PlxyXG4gIDx0cnUtZGVza3RvcC1zdGF0dXNiYXI+PC90cnUtZGVza3RvcC1zdGF0dXNiYXI+XHJcbiAgPHNwYW4gY2xhc3M9XCJkZXNrdG9wLXdpbmRvdy1yZXNpemFibGUtaGFuZGxlIGRlc2t0b3Atd2luZG93LXJlc2l6YWJsZS1ud1wiIHRydS1kZXNrdG9wLXJlc2l6YWJsZSBbd2luZG93XT1cIndpbmRvd1wiICpuZ0lmPVwiIXdpbmRvdy5tYXhpbWl6ZWRcIiBbZGlyZWN0aW9uXT1cIidudydcIj48L3NwYW4+XHJcbiAgPHNwYW4gY2xhc3M9XCJkZXNrdG9wLXdpbmRvdy1yZXNpemFibGUtaGFuZGxlIGRlc2t0b3Atd2luZG93LXJlc2l6YWJsZS1uZVwiIHRydS1kZXNrdG9wLXJlc2l6YWJsZSBbd2luZG93XT1cIndpbmRvd1wiICpuZ0lmPVwiIXdpbmRvdy5tYXhpbWl6ZWRcIiBbZGlyZWN0aW9uXT1cIiduZSdcIj48L3NwYW4+XHJcbiAgPHNwYW4gY2xhc3M9XCJkZXNrdG9wLXdpbmRvdy1yZXNpemFibGUtaGFuZGxlIGRlc2t0b3Atd2luZG93LXJlc2l6YWJsZS1zd1wiIHRydS1kZXNrdG9wLXJlc2l6YWJsZSBbd2luZG93XT1cIndpbmRvd1wiICpuZ0lmPVwiIXdpbmRvdy5tYXhpbWl6ZWRcIiBbZGlyZWN0aW9uXT1cIidzdydcIj48L3NwYW4+XHJcbiAgPHNwYW4gY2xhc3M9XCJkZXNrdG9wLXdpbmRvdy1yZXNpemFibGUtaGFuZGxlIGRlc2t0b3Atd2luZG93LXJlc2l6YWJsZS1zZVwiIHRydS1kZXNrdG9wLXJlc2l6YWJsZSBbd2luZG93XT1cIndpbmRvd1wiICpuZ0lmPVwiIXdpbmRvdy5tYXhpbWl6ZWRcIiBbZGlyZWN0aW9uXT1cIidzZSdcIj48L3NwYW4+XHJcbiAgPHNwYW4gY2xhc3M9XCJkZXNrdG9wLXdpbmRvdy1yZXNpemFibGUtaGFuZGxlIGRlc2t0b3Atd2luZG93LXJlc2l6YWJsZS1uXCIgdHJ1LWRlc2t0b3AtcmVzaXphYmxlIFt3aW5kb3ddPVwid2luZG93XCIgKm5nSWY9XCIhd2luZG93Lm1heGltaXplZFwiIFtkaXJlY3Rpb25dPVwiJ24nXCI+PC9zcGFuPlxyXG4gIDxzcGFuIGNsYXNzPVwiZGVza3RvcC13aW5kb3ctcmVzaXphYmxlLWhhbmRsZSBkZXNrdG9wLXdpbmRvdy1yZXNpemFibGUtc1wiIHRydS1kZXNrdG9wLXJlc2l6YWJsZSBbd2luZG93XT1cIndpbmRvd1wiICpuZ0lmPVwiIXdpbmRvdy5tYXhpbWl6ZWRcIiBbZGlyZWN0aW9uXT1cIidzJ1wiPjwvc3Bhbj5cclxuICA8c3BhbiBjbGFzcz1cImRlc2t0b3Atd2luZG93LXJlc2l6YWJsZS1oYW5kbGUgZGVza3RvcC13aW5kb3ctcmVzaXphYmxlLXdcIiB0cnUtZGVza3RvcC1yZXNpemFibGUgW3dpbmRvd109XCJ3aW5kb3dcIiAqbmdJZj1cIiF3aW5kb3cubWF4aW1pemVkXCIgW2RpcmVjdGlvbl09XCIndydcIj48L3NwYW4+XHJcbiAgPHNwYW4gY2xhc3M9XCJkZXNrdG9wLXdpbmRvdy1yZXNpemFibGUtaGFuZGxlIGRlc2t0b3Atd2luZG93LXJlc2l6YWJsZS1lXCIgdHJ1LWRlc2t0b3AtcmVzaXphYmxlIFt3aW5kb3ddPVwid2luZG93XCIgKm5nSWY9XCIhd2luZG93Lm1heGltaXplZFwiIFtkaXJlY3Rpb25dPVwiJ2UnXCI+PC9zcGFuPlxyXG48L2Rpdj5cclxuIl19
@@ -0,0 +1,20 @@
1
+ import { NgModule } from "@angular/core";
2
+ import { CommonModule } from "@angular/common";
3
+ import { FormsModule } from "@angular/forms";
4
+ import { TruExportDialog } from "./tru-export-dialog";
5
+ import { MatCheckboxModule } from "@angular/material/checkbox";
6
+ import * as i0 from "@angular/core";
7
+ export class TruExportDialogModule {
8
+ }
9
+ TruExportDialogModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.2", ngImport: i0, type: TruExportDialogModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
10
+ TruExportDialogModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.1.2", ngImport: i0, type: TruExportDialogModule, declarations: [TruExportDialog], imports: [CommonModule, FormsModule, MatCheckboxModule], exports: [TruExportDialog] });
11
+ TruExportDialogModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.1.2", ngImport: i0, type: TruExportDialogModule, imports: [CommonModule, FormsModule, MatCheckboxModule] });
12
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.2", ngImport: i0, type: TruExportDialogModule, decorators: [{
13
+ type: NgModule,
14
+ args: [{
15
+ declarations: [TruExportDialog],
16
+ imports: [CommonModule, FormsModule, MatCheckboxModule],
17
+ exports: [TruExportDialog]
18
+ }]
19
+ }] });
20
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJ1LWV4cG9ydC1kaWFsb2ctbW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdHJ1LWNvbW1vbi1saWIvc3JjL2xpYi9jb21wb25lbnRzL2V4cG9ydC1kaWFsb2cvdHJ1LWV4cG9ydC1kaWFsb2ctbW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUU3QyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdEQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7O0FBTy9ELE1BQU0sT0FBTyxxQkFBcUI7O2tIQUFyQixxQkFBcUI7bUhBQXJCLHFCQUFxQixpQkFKakIsZUFBZSxhQUNwQixZQUFZLEVBQUUsV0FBVyxFQUFFLGlCQUFpQixhQUM1QyxlQUFlO21IQUVkLHFCQUFxQixZQUh0QixZQUFZLEVBQUUsV0FBVyxFQUFFLGlCQUFpQjsyRkFHM0MscUJBQXFCO2tCQUxqQyxRQUFRO21CQUFDO29CQUNSLFlBQVksRUFBRSxDQUFDLGVBQWUsQ0FBQztvQkFDL0IsT0FBTyxFQUFFLENBQUMsWUFBWSxFQUFFLFdBQVcsRUFBRSxpQkFBaUIsQ0FBQztvQkFDdkQsT0FBTyxFQUFFLENBQUMsZUFBZSxDQUFDO2lCQUMzQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSBcIkBhbmd1bGFyL2NvbW1vblwiO1xyXG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gXCJAYW5ndWxhci9mb3Jtc1wiO1xyXG5cclxuaW1wb3J0IHsgVHJ1RXhwb3J0RGlhbG9nIH0gZnJvbSBcIi4vdHJ1LWV4cG9ydC1kaWFsb2dcIjtcclxuaW1wb3J0IHsgTWF0Q2hlY2tib3hNb2R1bGUgfSBmcm9tIFwiQGFuZ3VsYXIvbWF0ZXJpYWwvY2hlY2tib3hcIjtcclxuXHJcbkBOZ01vZHVsZSh7XHJcbiAgZGVjbGFyYXRpb25zOiBbVHJ1RXhwb3J0RGlhbG9nXSxcclxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBGb3Jtc01vZHVsZSwgTWF0Q2hlY2tib3hNb2R1bGVdLFxyXG4gIGV4cG9ydHM6IFtUcnVFeHBvcnREaWFsb2ddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBUcnVFeHBvcnREaWFsb2dNb2R1bGUgeyB9XHJcbiJdfQ==