@ctrl/ngx-rightclick 1.1.3 → 3.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.
- package/LICENSE +1 -1
- package/README.md +5 -16
- package/bundles/ctrl-ngx-rightclick.umd.js +622 -658
- package/bundles/ctrl-ngx-rightclick.umd.js.map +1 -1
- package/bundles/ctrl-ngx-rightclick.umd.min.js +15 -1
- package/bundles/ctrl-ngx-rightclick.umd.min.js.map +1 -1
- package/context-menu-injector.d.ts +4 -4
- package/context-menu-trigger.directive.d.ts +1 -0
- package/context-menu.service.d.ts +2 -2
- package/context-submenu-trigger.directive.d.ts +3 -3
- package/ctrl-ngx-rightclick.metadata.json +1 -1
- package/esm2015/context-menu-injector.js +7 -52
- package/esm2015/context-menu-trigger.directive.js +52 -77
- package/esm2015/context-menu.module.js +16 -18
- package/esm2015/context-menu.service.js +19 -121
- package/esm2015/context-submenu-trigger.directive.js +38 -67
- package/esm2015/ctrl-ngx-rightclick.js +2 -6
- package/esm2015/menu.component.js +26 -64
- package/esm2015/public_api.js +7 -11
- package/esm5/context-menu-injector.js +8 -51
- package/esm5/context-menu-trigger.directive.js +54 -94
- package/esm5/context-menu.module.js +13 -16
- package/esm5/context-menu.service.js +20 -164
- package/esm5/context-submenu-trigger.directive.js +39 -88
- package/esm5/ctrl-ngx-rightclick.js +2 -6
- package/esm5/menu.component.js +26 -77
- package/esm5/public_api.js +7 -11
- package/fesm2015/ctrl-ngx-rightclick.js +143 -246
- package/fesm2015/ctrl-ngx-rightclick.js.map +1 -1
- package/fesm5/ctrl-ngx-rightclick.js +149 -336
- package/fesm5/ctrl-ngx-rightclick.js.map +1 -1
- package/menu.component.d.ts +1 -1
- package/package.json +5 -9
@@ -1,80 +1,47 @@
|
|
1
|
+
import { __decorate } from 'tslib';
|
2
|
+
import { ElementRef, Injector, ɵɵdefineInjectable, ɵɵinject, INJECTOR, Injectable, EventEmitter, Input, Output, HostListener, Directive, Component, NgModule } from '@angular/core';
|
1
3
|
import { Overlay, ScrollStrategyOptions, OverlayModule } from '@angular/cdk/overlay';
|
2
4
|
import { ComponentPortal, PortalModule } from '@angular/cdk/portal';
|
3
|
-
import { ElementRef, Injectable, Injector, NgModule, Component, HostListener, Directive, Input, Output, EventEmitter, defineInjectable, inject, INJECTOR } from '@angular/core';
|
4
5
|
import { BehaviorSubject, Subject } from 'rxjs';
|
5
6
|
import { filter, take } from 'rxjs/operators';
|
6
7
|
|
7
|
-
/**
|
8
|
-
* @fileoverview added by tsickle
|
9
|
-
* @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
|
10
|
-
*/
|
11
8
|
class MenuPackage {
|
12
|
-
/**
|
13
|
-
* @param {?} menu
|
14
|
-
* @param {?} context
|
15
|
-
*/
|
16
9
|
constructor(menu, context) {
|
17
10
|
this.menu = menu;
|
18
11
|
this.context = context;
|
19
12
|
}
|
20
13
|
}
|
21
14
|
class MenuInjector {
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
* @param {?} context
|
26
|
-
*/
|
27
|
-
constructor(_activeContextMenu, _parentInjector, context) {
|
28
|
-
this._activeContextMenu = _activeContextMenu;
|
29
|
-
this._parentInjector = _parentInjector;
|
15
|
+
constructor(activeContextMenu, parentInjector, context) {
|
16
|
+
this.activeContextMenu = activeContextMenu;
|
17
|
+
this.parentInjector = parentInjector;
|
30
18
|
this.context = context;
|
31
|
-
this.
|
19
|
+
this.menuContext = new MenuPackage(activeContextMenu, context);
|
32
20
|
}
|
33
|
-
/**
|
34
|
-
* @template T
|
35
|
-
* @param {?} token
|
36
|
-
* @param {?=} notFoundValue
|
37
|
-
* @param {?=} flags
|
38
|
-
* @return {?}
|
39
|
-
*/
|
40
21
|
get(token, notFoundValue, flags) {
|
41
22
|
if (token === MenuPackage) {
|
42
|
-
return this.
|
23
|
+
return this.menuContext;
|
43
24
|
}
|
44
|
-
return this.
|
25
|
+
return this.parentInjector.get(token, notFoundValue, flags);
|
45
26
|
}
|
46
27
|
}
|
47
28
|
|
48
|
-
|
49
|
-
|
50
|
-
* @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
|
51
|
-
*/
|
52
|
-
class ContextMenuService {
|
53
|
-
/**
|
54
|
-
* @param {?} overlay
|
55
|
-
* @param {?} scrollStrategy
|
56
|
-
* @param {?} _injector
|
57
|
-
*/
|
58
|
-
constructor(overlay, scrollStrategy, _injector) {
|
29
|
+
let ContextMenuService = class ContextMenuService {
|
30
|
+
constructor(overlay, scrollStrategy, injector) {
|
59
31
|
this.overlay = overlay;
|
60
32
|
this.scrollStrategy = scrollStrategy;
|
61
|
-
this.
|
33
|
+
this.injector = injector;
|
62
34
|
this.menus = [];
|
63
35
|
this.id = 0;
|
64
36
|
}
|
65
37
|
/**
|
66
38
|
*
|
67
|
-
* @param
|
68
|
-
* @param
|
69
|
-
* @param
|
70
|
-
* @param
|
71
|
-
* @param {?} menuAction
|
72
|
-
* @param {?=} submenu is a menu within a menu
|
73
|
-
* @param {?=} level if submenu, what level
|
74
|
-
* @return {?}
|
39
|
+
* @param $event triggering event
|
40
|
+
* @param menuComponent the component to be shown
|
41
|
+
* @param submenu is a menu within a menu
|
42
|
+
* @param level if submenu, what level
|
75
43
|
*/
|
76
44
|
show($event, menuComponent, context, menuClose, menuAction, submenu = false, level) {
|
77
|
-
/** @type {?} */
|
78
45
|
let target;
|
79
46
|
if (!submenu) {
|
80
47
|
this.closeAll();
|
@@ -94,9 +61,7 @@ class ContextMenuService {
|
|
94
61
|
this.closeAll(undefined, level);
|
95
62
|
target = $event.target;
|
96
63
|
}
|
97
|
-
/** @type {?} */
|
98
64
|
const el = new ElementRef(target);
|
99
|
-
/** @type {?} */
|
100
65
|
const positionStrategy = this.overlay
|
101
66
|
.position()
|
102
67
|
.flexibleConnectedTo(el)
|
@@ -169,54 +134,34 @@ class ContextMenuService {
|
|
169
134
|
},
|
170
135
|
]);
|
171
136
|
}
|
172
|
-
/** @type {?} */
|
173
137
|
const t = {
|
174
138
|
submenu,
|
175
139
|
id: this.id++,
|
176
140
|
isMenuHovered: new BehaviorSubject(false),
|
177
141
|
isTriggerHovered: new BehaviorSubject(false),
|
178
142
|
};
|
179
|
-
|
180
|
-
const menuInjector = new MenuInjector(t, this._injector, context);
|
181
|
-
/** @type {?} */
|
143
|
+
const menuInjector = new MenuInjector(t, this.injector, context);
|
182
144
|
const componentPortal = new ComponentPortal(menuComponent, undefined, menuInjector);
|
183
|
-
/** @type {?} */
|
184
145
|
const overlayRef = this.overlay.create({
|
185
146
|
positionStrategy,
|
186
147
|
panelClass: 'ngx-contextmenu',
|
187
148
|
scrollStrategy: this.scrollStrategy.close(),
|
188
149
|
});
|
189
|
-
/** @type {?} */
|
190
150
|
const component = overlayRef.attach(componentPortal);
|
191
|
-
|
192
|
-
const res = Object.assign({ overlayRef, component }, t, { menuClose, menuAction });
|
151
|
+
const res = Object.assign(Object.assign({ overlayRef, component }, t), { menuClose, menuAction });
|
193
152
|
this.menus.push(res);
|
194
153
|
return res;
|
195
154
|
}
|
196
|
-
/**
|
197
|
-
* @return {?}
|
198
|
-
*/
|
199
155
|
getCurrentLevel() {
|
200
156
|
return this.menus.length;
|
201
157
|
}
|
202
|
-
/**
|
203
|
-
* @param {?=} context
|
204
|
-
* @param {?=} idx
|
205
|
-
* @return {?}
|
206
|
-
*/
|
207
158
|
closeAll(context, idx = 0) {
|
208
159
|
for (let index = idx; index < this.menus.length; index++) {
|
209
|
-
/** @type {?} */
|
210
160
|
const menu = this.menus[index];
|
211
161
|
this.destroyMenu(menu, context);
|
212
162
|
}
|
213
163
|
this.menus.splice(idx, this.menus.length);
|
214
164
|
}
|
215
|
-
/**
|
216
|
-
* @param {?} menu
|
217
|
-
* @param {?=} context
|
218
|
-
* @return {?}
|
219
|
-
*/
|
220
165
|
destroyMenu(menu, context) {
|
221
166
|
menu.component.instance._state = 'exit';
|
222
167
|
if (menu.component.instance.lazy) {
|
@@ -236,23 +181,12 @@ class ContextMenuService {
|
|
236
181
|
}
|
237
182
|
menu.menuClose.next();
|
238
183
|
}
|
239
|
-
/**
|
240
|
-
* @param {?} menu
|
241
|
-
* @param {?} menuIndex
|
242
|
-
* @param {?=} context
|
243
|
-
* @return {?}
|
244
|
-
*/
|
245
184
|
close(menu, menuIndex, context) {
|
246
185
|
this.destroyMenu(menu, context);
|
247
186
|
this.menus.splice(menuIndex, 1);
|
248
187
|
}
|
249
|
-
/**
|
250
|
-
* @param {?} $event
|
251
|
-
* @return {?}
|
252
|
-
*/
|
253
188
|
checkOutsideClick($event) {
|
254
189
|
for (const m of this.menus) {
|
255
|
-
/** @type {?} */
|
256
190
|
const clickedInside = m.component.location.nativeElement.contains($event.target);
|
257
191
|
if (clickedInside) {
|
258
192
|
$event.preventDefault();
|
@@ -262,25 +196,18 @@ class ContextMenuService {
|
|
262
196
|
}
|
263
197
|
this.closeAll();
|
264
198
|
}
|
265
|
-
/**
|
266
|
-
* @param {?} id
|
267
|
-
* @return {?}
|
268
|
-
*/
|
269
199
|
closeSubMenu(id) {
|
270
|
-
/** @type {?} */
|
271
200
|
const menuIndex = this.menus.findIndex(n => n.id === id);
|
272
201
|
if (menuIndex === -1 || menuIndex !== this.menus.length - 1) {
|
273
202
|
return;
|
274
203
|
}
|
275
204
|
// make sure we can close the current menu
|
276
|
-
/** @type {?} */
|
277
205
|
const menu = this.menus[menuIndex];
|
278
206
|
if (menu.isMenuHovered.getValue() || menu.isTriggerHovered.getValue()) {
|
279
207
|
return;
|
280
208
|
}
|
281
209
|
// close all menus up if possible
|
282
210
|
for (let index = this.menus.length - 1; index >= 1; index--) {
|
283
|
-
/** @type {?} */
|
284
211
|
const m = this.menus[index];
|
285
212
|
if (!m.isMenuHovered.getValue() && !m.isTriggerHovered.getValue()) {
|
286
213
|
this.close(m, index);
|
@@ -290,46 +217,42 @@ class ContextMenuService {
|
|
290
217
|
}
|
291
218
|
}
|
292
219
|
}
|
293
|
-
}
|
294
|
-
ContextMenuService.decorators = [
|
295
|
-
{ type: Injectable, args: [{ providedIn: 'root' },] }
|
296
|
-
];
|
297
|
-
/** @nocollapse */
|
220
|
+
};
|
298
221
|
ContextMenuService.ctorParameters = () => [
|
299
222
|
{ type: Overlay },
|
300
223
|
{ type: ScrollStrategyOptions },
|
301
224
|
{ type: Injector }
|
302
225
|
];
|
303
|
-
|
226
|
+
ContextMenuService.ɵprov = ɵɵdefineInjectable({ factory: function ContextMenuService_Factory() { return new ContextMenuService(ɵɵinject(Overlay), ɵɵinject(ScrollStrategyOptions), ɵɵinject(INJECTOR)); }, token: ContextMenuService, providedIn: "root" });
|
227
|
+
ContextMenuService = __decorate([
|
228
|
+
Injectable({ providedIn: 'root' })
|
229
|
+
], ContextMenuService);
|
304
230
|
|
305
|
-
|
306
|
-
* @fileoverview added by tsickle
|
307
|
-
* @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
|
308
|
-
*/
|
309
|
-
class ContextMenuTriggerDirective {
|
310
|
-
/**
|
311
|
-
* @param {?} contextMenuService
|
312
|
-
*/
|
231
|
+
let ContextMenuTriggerDirective = class ContextMenuTriggerDirective {
|
313
232
|
constructor(contextMenuService) {
|
314
233
|
this.contextMenuService = contextMenuService;
|
315
234
|
this.holdToDisplay = 1000;
|
316
235
|
this.menuAction = new EventEmitter();
|
317
236
|
this.menuClose = new EventEmitter();
|
237
|
+
this.beforeOpen = new EventEmitter();
|
318
238
|
this.visible = false;
|
319
239
|
}
|
320
|
-
/**
|
321
|
-
* @param {?} $event
|
322
|
-
* @return {?}
|
323
|
-
*/
|
324
240
|
handleMenu($event) {
|
241
|
+
let preventOpen = false;
|
242
|
+
this.beforeOpen.emit({
|
243
|
+
menuContext: this.menuContext,
|
244
|
+
event: $event,
|
245
|
+
preventOpen: () => {
|
246
|
+
preventOpen = true;
|
247
|
+
},
|
248
|
+
});
|
249
|
+
if (preventOpen) {
|
250
|
+
return;
|
251
|
+
}
|
325
252
|
$event.preventDefault();
|
326
253
|
this.menu = this.contextMenuService.show($event, this.contextMenuTrigger, this.menuContext, this.menuClose, this.menuAction);
|
327
254
|
this.visible = true;
|
328
255
|
}
|
329
|
-
/**
|
330
|
-
* @param {?} $event
|
331
|
-
* @return {?}
|
332
|
-
*/
|
333
256
|
handleMouseDown($event) {
|
334
257
|
if (this.holdToDisplay >= 0) {
|
335
258
|
$event.stopPropagation();
|
@@ -338,54 +261,54 @@ class ContextMenuTriggerDirective {
|
|
338
261
|
this.mouseDownTimeoutId = setTimeout(() => this.handleMenu($event), this.holdToDisplay);
|
339
262
|
}
|
340
263
|
}
|
341
|
-
/**
|
342
|
-
* @return {?}
|
343
|
-
*/
|
344
264
|
handleMouseUp() {
|
345
265
|
clearTimeout(this.mouseDownTimeoutId);
|
346
266
|
}
|
347
|
-
/**
|
348
|
-
* @return {?}
|
349
|
-
*/
|
350
267
|
ngOnInit() {
|
351
|
-
this.sub = this.menuClose.subscribe(() => this.visible = false);
|
268
|
+
this.sub = this.menuClose.subscribe(() => (this.visible = false));
|
352
269
|
}
|
353
|
-
/**
|
354
|
-
* @return {?}
|
355
|
-
*/
|
356
270
|
ngOnDestroy() {
|
357
271
|
this.sub.unsubscribe();
|
358
272
|
}
|
359
|
-
}
|
360
|
-
ContextMenuTriggerDirective.decorators = [
|
361
|
-
{ type: Directive, args: [{
|
362
|
-
selector: '[contextMenuTrigger]',
|
363
|
-
exportAs: 'contextMenuTrigger',
|
364
|
-
},] }
|
365
|
-
];
|
366
|
-
/** @nocollapse */
|
273
|
+
};
|
367
274
|
ContextMenuTriggerDirective.ctorParameters = () => [
|
368
275
|
{ type: ContextMenuService }
|
369
276
|
];
|
370
|
-
|
371
|
-
|
372
|
-
|
373
|
-
|
374
|
-
|
375
|
-
|
376
|
-
|
377
|
-
|
378
|
-
|
379
|
-
|
277
|
+
__decorate([
|
278
|
+
Input()
|
279
|
+
], ContextMenuTriggerDirective.prototype, "contextMenuTrigger", void 0);
|
280
|
+
__decorate([
|
281
|
+
Input()
|
282
|
+
], ContextMenuTriggerDirective.prototype, "menuContext", void 0);
|
283
|
+
__decorate([
|
284
|
+
Input()
|
285
|
+
], ContextMenuTriggerDirective.prototype, "holdToDisplay", void 0);
|
286
|
+
__decorate([
|
287
|
+
Output()
|
288
|
+
], ContextMenuTriggerDirective.prototype, "menuAction", void 0);
|
289
|
+
__decorate([
|
290
|
+
Output()
|
291
|
+
], ContextMenuTriggerDirective.prototype, "menuClose", void 0);
|
292
|
+
__decorate([
|
293
|
+
Output()
|
294
|
+
], ContextMenuTriggerDirective.prototype, "beforeOpen", void 0);
|
295
|
+
__decorate([
|
296
|
+
HostListener('contextmenu', ['$event'])
|
297
|
+
], ContextMenuTriggerDirective.prototype, "handleMenu", null);
|
298
|
+
__decorate([
|
299
|
+
HostListener('touchstart', ['$event'])
|
300
|
+
], ContextMenuTriggerDirective.prototype, "handleMouseDown", null);
|
301
|
+
__decorate([
|
302
|
+
HostListener('touchend')
|
303
|
+
], ContextMenuTriggerDirective.prototype, "handleMouseUp", null);
|
304
|
+
ContextMenuTriggerDirective = __decorate([
|
305
|
+
Directive({
|
306
|
+
selector: '[contextMenuTrigger]',
|
307
|
+
exportAs: 'contextMenuTrigger',
|
308
|
+
})
|
309
|
+
], ContextMenuTriggerDirective);
|
380
310
|
|
381
|
-
|
382
|
-
* @fileoverview added by tsickle
|
383
|
-
* @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
|
384
|
-
*/
|
385
|
-
class ContextSubmenuTriggerDirective {
|
386
|
-
/**
|
387
|
-
* @param {?} contextMenuService
|
388
|
-
*/
|
311
|
+
let ContextSubmenuTriggerDirective = class ContextSubmenuTriggerDirective {
|
389
312
|
constructor(contextMenuService) {
|
390
313
|
this.contextMenuService = contextMenuService;
|
391
314
|
this.hoverDelay = 500;
|
@@ -397,22 +320,14 @@ class ContextSubmenuTriggerDirective {
|
|
397
320
|
// get current level
|
398
321
|
setTimeout(() => (this.level = this.contextMenuService.getCurrentLevel()));
|
399
322
|
}
|
400
|
-
/**
|
401
|
-
* @param {?} $event
|
402
|
-
* @return {?}
|
403
|
-
*/
|
404
323
|
handleSubMenuClick($event) {
|
405
|
-
event.preventDefault();
|
406
|
-
event.stopPropagation();
|
324
|
+
$event.preventDefault();
|
325
|
+
$event.stopPropagation();
|
407
326
|
clearTimeout(this.opentimer);
|
408
327
|
clearTimeout(this.closetimer);
|
409
328
|
this.menu = this.contextMenuService.show($event, this.contextSubmenuTrigger, this.menuContext, this.menuClose, this.menuAction, true, this.level);
|
410
329
|
this.visible = true;
|
411
330
|
}
|
412
|
-
/**
|
413
|
-
* @param {?} $event
|
414
|
-
* @return {?}
|
415
|
-
*/
|
416
331
|
handleSubMenuEnter($event) {
|
417
332
|
if (this.menu) {
|
418
333
|
this.menu.isTriggerHovered.next(true);
|
@@ -426,7 +341,6 @@ class ContextSubmenuTriggerDirective {
|
|
426
341
|
}
|
427
342
|
/**
|
428
343
|
* submenu hides after cursor has exited for a period of time
|
429
|
-
* @return {?}
|
430
344
|
*/
|
431
345
|
handleSubMenuExit() {
|
432
346
|
clearTimeout(this.opentimer);
|
@@ -444,57 +358,56 @@ class ContextSubmenuTriggerDirective {
|
|
444
358
|
}
|
445
359
|
/**
|
446
360
|
* if overwritten make sure to clear timeouts
|
447
|
-
* @return {?}
|
448
361
|
*/
|
449
362
|
ngOnDestroy() {
|
450
363
|
clearTimeout(this.opentimer);
|
451
364
|
clearTimeout(this.closetimer);
|
452
365
|
}
|
453
|
-
}
|
454
|
-
ContextSubmenuTriggerDirective.decorators = [
|
455
|
-
{ type: Directive, args: [{ selector: '[contextSubmenuTrigger]' },] }
|
456
|
-
];
|
457
|
-
/** @nocollapse */
|
366
|
+
};
|
458
367
|
ContextSubmenuTriggerDirective.ctorParameters = () => [
|
459
368
|
{ type: ContextMenuService }
|
460
369
|
];
|
461
|
-
|
462
|
-
|
463
|
-
|
464
|
-
|
465
|
-
|
466
|
-
|
467
|
-
|
468
|
-
|
469
|
-
|
470
|
-
|
471
|
-
|
370
|
+
__decorate([
|
371
|
+
Input()
|
372
|
+
], ContextSubmenuTriggerDirective.prototype, "hoverDelay", void 0);
|
373
|
+
__decorate([
|
374
|
+
Input()
|
375
|
+
], ContextSubmenuTriggerDirective.prototype, "openDelay", void 0);
|
376
|
+
__decorate([
|
377
|
+
Input()
|
378
|
+
], ContextSubmenuTriggerDirective.prototype, "contextSubmenuTrigger", void 0);
|
379
|
+
__decorate([
|
380
|
+
Input()
|
381
|
+
], ContextSubmenuTriggerDirective.prototype, "menuContext", void 0);
|
382
|
+
__decorate([
|
383
|
+
Output()
|
384
|
+
], ContextSubmenuTriggerDirective.prototype, "menuAction", void 0);
|
385
|
+
__decorate([
|
386
|
+
Output()
|
387
|
+
], ContextSubmenuTriggerDirective.prototype, "menuClose", void 0);
|
388
|
+
__decorate([
|
389
|
+
HostListener('click', ['$event'])
|
390
|
+
], ContextSubmenuTriggerDirective.prototype, "handleSubMenuClick", null);
|
391
|
+
__decorate([
|
392
|
+
HostListener('mouseover', ['$event'])
|
393
|
+
], ContextSubmenuTriggerDirective.prototype, "handleSubMenuEnter", null);
|
394
|
+
__decorate([
|
395
|
+
HostListener('mouseout')
|
396
|
+
], ContextSubmenuTriggerDirective.prototype, "handleSubMenuExit", null);
|
397
|
+
ContextSubmenuTriggerDirective = __decorate([
|
398
|
+
Directive({ selector: '[contextSubmenuTrigger]' })
|
399
|
+
], ContextSubmenuTriggerDirective);
|
472
400
|
|
473
|
-
|
474
|
-
* @fileoverview added by tsickle
|
475
|
-
* @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
|
476
|
-
*/
|
477
|
-
class MenuComponent {
|
478
|
-
/**
|
479
|
-
* @param {?} menuPackage
|
480
|
-
* @param {?} contextMenuService
|
481
|
-
*/
|
401
|
+
let MenuComponent = class MenuComponent {
|
482
402
|
constructor(menuPackage, contextMenuService) {
|
483
403
|
this.menuPackage = menuPackage;
|
484
404
|
this.contextMenuService = contextMenuService;
|
485
|
-
/**
|
486
|
-
* State of the dialog animation.
|
487
|
-
*/
|
405
|
+
/** State of the dialog animation. */
|
488
406
|
this._state = 'enter';
|
489
407
|
this._animationDone = new Subject();
|
490
|
-
/**
|
491
|
-
* set lazy to False if you do not have animations
|
492
|
-
*/
|
408
|
+
/** set lazy to False if you do not have animations */
|
493
409
|
this.lazy = true;
|
494
410
|
}
|
495
|
-
/**
|
496
|
-
* @return {?}
|
497
|
-
*/
|
498
411
|
handleMouseover() {
|
499
412
|
if (!this.menuPackage.menu.submenu) {
|
500
413
|
return;
|
@@ -502,9 +415,6 @@ class MenuComponent {
|
|
502
415
|
this.menuPackage.menu.isMenuHovered.next(true);
|
503
416
|
clearTimeout(this.closetimer);
|
504
417
|
}
|
505
|
-
/**
|
506
|
-
* @return {?}
|
507
|
-
*/
|
508
418
|
handleMouseleave() {
|
509
419
|
if (!this.menuPackage.menu.submenu) {
|
510
420
|
return;
|
@@ -514,67 +424,54 @@ class MenuComponent {
|
|
514
424
|
this.contextMenuService.closeSubMenu(this.menuPackage.menu.id);
|
515
425
|
}, 500);
|
516
426
|
}
|
517
|
-
/**
|
518
|
-
* @param {?} $event
|
519
|
-
* @return {?}
|
520
|
-
*/
|
521
427
|
handleWindowClick($event) {
|
522
428
|
this.contextMenuService.checkOutsideClick($event);
|
523
429
|
}
|
524
|
-
/**
|
525
|
-
* Callback that is invoked when the menu animation completes.
|
526
|
-
* @param {?} event
|
527
|
-
* @return {?}
|
528
|
-
*/
|
430
|
+
/** Callback that is invoked when the menu animation completes. */
|
529
431
|
_onAnimationDone(event) {
|
530
432
|
this._animationDone.next(event);
|
531
433
|
}
|
532
|
-
}
|
533
|
-
MenuComponent.decorators = [
|
534
|
-
{ type: Component, args: [{
|
535
|
-
selector: 'app-menu',
|
536
|
-
template: ``
|
537
|
-
}] }
|
538
|
-
];
|
539
|
-
/** @nocollapse */
|
434
|
+
};
|
540
435
|
MenuComponent.ctorParameters = () => [
|
541
436
|
{ type: MenuPackage },
|
542
437
|
{ type: ContextMenuService }
|
543
438
|
];
|
544
|
-
|
545
|
-
|
546
|
-
|
547
|
-
|
548
|
-
|
549
|
-
|
550
|
-
|
551
|
-
|
552
|
-
|
553
|
-
|
554
|
-
|
555
|
-
|
556
|
-
|
557
|
-
{
|
558
|
-
|
559
|
-
|
560
|
-
|
561
|
-
|
562
|
-
],
|
563
|
-
exports: [ContextMenuTriggerDirective, ContextSubmenuTriggerDirective],
|
564
|
-
imports: [PortalModule, OverlayModule],
|
565
|
-
},] }
|
566
|
-
];
|
439
|
+
__decorate([
|
440
|
+
HostListener('mouseover')
|
441
|
+
], MenuComponent.prototype, "handleMouseover", null);
|
442
|
+
__decorate([
|
443
|
+
HostListener('mouseleave')
|
444
|
+
], MenuComponent.prototype, "handleMouseleave", null);
|
445
|
+
__decorate([
|
446
|
+
HostListener('document:click', ['$event'])
|
447
|
+
], MenuComponent.prototype, "handleWindowClick", null);
|
448
|
+
__decorate([
|
449
|
+
HostListener('@menu.done', ['$event'])
|
450
|
+
], MenuComponent.prototype, "_onAnimationDone", null);
|
451
|
+
MenuComponent = __decorate([
|
452
|
+
Component({
|
453
|
+
selector: 'app-menu',
|
454
|
+
template: ``
|
455
|
+
})
|
456
|
+
], MenuComponent);
|
567
457
|
|
568
|
-
|
569
|
-
|
570
|
-
|
571
|
-
|
458
|
+
let ContextMenuModule = class ContextMenuModule {
|
459
|
+
};
|
460
|
+
ContextMenuModule = __decorate([
|
461
|
+
NgModule({
|
462
|
+
declarations: [
|
463
|
+
ContextMenuTriggerDirective,
|
464
|
+
ContextSubmenuTriggerDirective,
|
465
|
+
MenuComponent,
|
466
|
+
],
|
467
|
+
exports: [ContextMenuTriggerDirective, ContextSubmenuTriggerDirective],
|
468
|
+
imports: [PortalModule, OverlayModule],
|
469
|
+
})
|
470
|
+
], ContextMenuModule);
|
572
471
|
|
573
472
|
/**
|
574
|
-
*
|
575
|
-
* @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
|
473
|
+
* Generated bundle index. Do not edit.
|
576
474
|
*/
|
577
475
|
|
578
|
-
export { ContextMenuModule,
|
579
|
-
|
580
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3RybC1uZ3gtcmlnaHRjbGljay5qcy5tYXAiLCJzb3VyY2VzIjpbIm5nOi8vQGN0cmwvbmd4LXJpZ2h0Y2xpY2svY29udGV4dC1tZW51LWluamVjdG9yLnRzIiwibmc6Ly9AY3RybC9uZ3gtcmlnaHRjbGljay9jb250ZXh0LW1lbnUuc2VydmljZS50cyIsIm5nOi8vQGN0cmwvbmd4LXJpZ2h0Y2xpY2svY29udGV4dC1tZW51LXRyaWdnZXIuZGlyZWN0aXZlLnRzIiwibmc6Ly9AY3RybC9uZ3gtcmlnaHRjbGljay9jb250ZXh0LXN1Ym1lbnUtdHJpZ2dlci5kaXJlY3RpdmUudHMiLCJuZzovL0BjdHJsL25neC1yaWdodGNsaWNrL21lbnUuY29tcG9uZW50LnRzIiwibmc6Ly9AY3RybC9uZ3gtcmlnaHRjbGljay9jb250ZXh0LW1lbnUubW9kdWxlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdG9yLCBUeXBlLCBJbmplY3Rpb25Ub2tlbiwgSW5qZWN0RmxhZ3MgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgQWN0aXZlQ29udGV4dE1lbnVTdWIgfSBmcm9tICcuL2NvbnRleHQtbWVudS5zZXJ2aWNlJztcblxuZXhwb3J0IGNsYXNzIE1lbnVQYWNrYWdlIHtcbiAgY29uc3RydWN0b3IocHVibGljIG1lbnU6IEFjdGl2ZUNvbnRleHRNZW51U3ViLCBwdWJsaWMgY29udGV4dDogYW55KSB7fVxufVxuXG5leHBvcnQgY2xhc3MgTWVudUluamVjdG9yIGltcGxlbWVudHMgSW5qZWN0b3Ige1xuICBfbWVudUNvbnRleHQ6IE1lbnVQYWNrYWdlO1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIF9hY3RpdmVDb250ZXh0TWVudTogQWN0aXZlQ29udGV4dE1lbnVTdWIsXG4gICAgcHJpdmF0ZSBfcGFyZW50SW5qZWN0b3I6IEluamVjdG9yLFxuICAgIHByaXZhdGUgY29udGV4dDogYW55LFxuICApIHtcbiAgICB0aGlzLl9tZW51Q29udGV4dCA9IG5ldyBNZW51UGFja2FnZShfYWN0aXZlQ29udGV4dE1lbnUsIGNvbnRleHQpO1xuICB9XG5cbiAgZ2V0PFQ+KHRva2VuOiBhbnksIG5vdEZvdW5kVmFsdWU/OiBULCBmbGFncz86IEluamVjdEZsYWdzKTogVCB8IE1lbnVQYWNrYWdlIHtcbiAgICBpZiAodG9rZW4gPT09IE1lbnVQYWNrYWdlKSB7XG4gICAgICByZXR1cm4gdGhpcy5fbWVudUNvbnRleHQ7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9wYXJlbnRJbmplY3Rvci5nZXQ8VD4odG9rZW4sIG5vdEZvdW5kVmFsdWUsIGZsYWdzKTtcbiAgfVxufVxuIiwiaW1wb3J0IHtcbiAgT3ZlcmxheSxcbiAgT3ZlcmxheVJlZixcbiAgU2Nyb2xsU3RyYXRlZ3lPcHRpb25zLFxufSBmcm9tICdAYW5ndWxhci9jZGsvb3ZlcmxheSc7XG5pbXBvcnQgeyBDb21wb25lbnRQb3J0YWwgfSBmcm9tICdAYW5ndWxhci9jZGsvcG9ydGFsJztcbmltcG9ydCB7IEVsZW1lbnRSZWYsIEluamVjdGFibGUsIEluamVjdG9yLCBFdmVudEVtaXR0ZXIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBmaWx0ZXIsIHRha2UgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IE1lbnVJbmplY3RvciB9IGZyb20gJy4vY29udGV4dC1tZW51LWluamVjdG9yJztcblxuZXhwb3J0IGludGVyZmFjZSBBY3RpdmVDb250ZXh0TWVudVN1YiB7XG4gIGlkOiBudW1iZXI7XG4gIGlzVHJpZ2dlckhvdmVyZWQ6IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPjtcbiAgaXNNZW51SG92ZXJlZDogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+O1xuICBzdWJtZW51OiBib29sZWFuO1xufVxuZXhwb3J0IGludGVyZmFjZSBBY3RpdmVDb250ZXh0TWVudSBleHRlbmRzIEFjdGl2ZUNvbnRleHRNZW51U3ViIHtcbiAgb3ZlcmxheVJlZjogT3ZlcmxheVJlZjtcbiAgY29tcG9uZW50OiBhbnk7XG4gIG1lbnVDbG9zZTogRXZlbnRFbWl0dGVyPHZvaWQ+O1xuICBtZW51QWN0aW9uOiBFdmVudEVtaXR0ZXI8YW55Pjtcbn1cblxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcbmV4cG9ydCBjbGFzcyBDb250ZXh0TWVudVNlcnZpY2Uge1xuICBtZW51czogQWN0aXZlQ29udGV4dE1lbnVbXSA9IFtdO1xuICBpZCA9IDA7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBvdmVybGF5OiBPdmVybGF5LFxuICAgIHByaXZhdGUgc2Nyb2xsU3RyYXRlZ3k6IFNjcm9sbFN0cmF0ZWd5T3B0aW9ucyxcbiAgICBwcml2YXRlIF9pbmplY3RvcjogSW5qZWN0b3IsXG4gICkge31cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtICRldmVudCB0cmlnZ2VyaW5nIGV2ZW50XG4gICAqIEBwYXJhbSBtZW51Q29tcG9uZW50IHRoZSBjb21wb25lbnQgdG8gYmUgc2hvd25cbiAgICogQHBhcmFtIHN1Ym1lbnUgaXMgYSBtZW51IHdpdGhpbiBhIG1lbnVcbiAgICogQHBhcmFtIGxldmVsIGlmIHN1Ym1lbnUsIHdoYXQgbGV2ZWxcbiAgICovXG4gIHNob3coXG4gICAgJGV2ZW50OiBNb3VzZUV2ZW50LFxuICAgIG1lbnVDb21wb25lbnQsXG4gICAgY29udGV4dDogYW55LFxuICAgIG1lbnVDbG9zZTogRXZlbnRFbWl0dGVyPGFueT4sXG4gICAgbWVudUFjdGlvbjogRXZlbnRFbWl0dGVyPGFueT4sXG4gICAgc3VibWVudSA9IGZhbHNlLFxuICAgIGxldmVsPzogbnVtYmVyLFxuICApOiBBY3RpdmVDb250ZXh0TWVudSB7XG4gICAgbGV0IHRhcmdldDogYW55O1xuICAgIGlmICghc3VibWVudSkge1xuICAgICAgdGhpcy5jbG9zZUFsbCgpO1xuICAgICAgdGFyZ2V0ID0ge1xuICAgICAgICBnZXRCb3VuZGluZ0NsaWVudFJlY3Q6ICgpOiBDbGllbnRSZWN0ID0+ICh7XG4gICAgICAgICAgYm90dG9tOiAkZXZlbnQuY2xpZW50WSxcbiAgICAgICAgICBoZWlnaHQ6IDAsXG4gICAgICAgICAgbGVmdDogJGV2ZW50LmNsaWVudFgsXG4gICAgICAgICAgcmlnaHQ6ICRldmVudC5jbGllbnRYLFxuICAgICAgICAgIHRvcDogJGV2ZW50LmNsaWVudFksXG4gICAgICAgICAgd2lkdGg6IDAsXG4gICAgICAgIH0pLFxuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gY2xvc2Ugb3RoZXIgc3VibWVudXNcbiAgICAgIHRoaXMuY2xvc2VBbGwodW5kZWZpbmVkLCBsZXZlbCk7XG4gICAgICB0YXJnZXQgPSAkZXZlbnQudGFyZ2V0O1xuICAgIH1cbiAgICBjb25zdCBlbCA9IG5ldyBFbGVtZW50UmVmKHRhcmdldCk7XG4gICAgY29uc3QgcG9zaXRpb25TdHJhdGVneSA9IHRoaXMub3ZlcmxheVxuICAgICAgLnBvc2l0aW9uKClcbiAgICAgIC5mbGV4aWJsZUNvbm5lY3RlZFRvKGVsKVxuICAgICAgLndpdGhGbGV4aWJsZURpbWVuc2lvbnMoZmFsc2UpO1xuXG4gICAgaWYgKCFzdWJtZW51KSB7XG4gICAgICBwb3NpdGlvblN0cmF0ZWd5LndpdGhQb3NpdGlvbnMoW1xuICAgICAgICB7XG4gICAgICAgICAgb3JpZ2luWDogJ3N0YXJ0JyxcbiAgICAgICAgICBvcmlnaW5ZOiAnYm90dG9tJyxcbiAgICAgICAgICBvdmVybGF5WDogJ3N0YXJ0JyxcbiAgICAgICAgICBvdmVybGF5WTogJ3RvcCcsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBvcmlnaW5YOiAnc3RhcnQnLFxuICAgICAgICAgIG9yaWdpblk6ICd0b3AnLFxuICAgICAgICAgIG92ZXJsYXlYOiAnc3RhcnQnLFxuICAgICAgICAgIG92ZXJsYXlZOiAnYm90dG9tJyxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG9yaWdpblg6ICdlbmQnLFxuICAgICAgICAgIG9yaWdpblk6ICd0b3AnLFxuICAgICAgICAgIG92ZXJsYXlYOiAnc3RhcnQnLFxuICAgICAgICAgIG92ZXJsYXlZOiAndG9wJyxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG9yaWdpblg6ICdzdGFydCcsXG4gICAgICAgICAgb3JpZ2luWTogJ3RvcCcsXG4gICAgICAgICAgb3ZlcmxheVg6ICdlbmQnLFxuICAgICAgICAgIG92ZXJsYXlZOiAndG9wJyxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG9yaWdpblg6ICdlbmQnLFxuICAgICAgICAgIG9yaWdpblk6ICdjZW50ZXInLFxuICAgICAgICAgIG92ZXJsYXlYOiAnc3RhcnQnLFxuICAgICAgICAgIG92ZXJsYXlZOiAnY2VudGVyJyxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG9yaWdpblg6ICdzdGFydCcsXG4gICAgICAgICAgb3JpZ2luWTogJ2NlbnRlcicsXG4gICAgICAgICAgb3ZlcmxheVg6ICdlbmQnLFxuICAgICAgICAgIG92ZXJsYXlZOiAnY2VudGVyJyxcbiAgICAgICAgfSxcbiAgICAgIF0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBwb3NpdGlvblN0cmF0ZWd5LndpdGhQb3NpdGlvbnMoW1xuICAgICAgICB7XG4gICAgICAgICAgb3JpZ2luWDogJ2VuZCcsXG4gICAgICAgICAgb3JpZ2luWTogJ3RvcCcsXG4gICAgICAgICAgb3ZlcmxheVg6ICdzdGFydCcsXG4gICAgICAgICAgb3ZlcmxheVk6ICd0b3AnLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgb3JpZ2luWDogJ3N0YXJ0JyxcbiAgICAgICAgICBvcmlnaW5ZOiAndG9wJyxcbiAgICAgICAgICBvdmVybGF5WDogJ2VuZCcsXG4gICAgICAgICAgb3ZlcmxheVk6ICd0b3AnLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgb3JpZ2luWDogJ2VuZCcsXG4gICAgICAgICAgb3JpZ2luWTogJ2JvdHRvbScsXG4gICAgICAgICAgb3ZlcmxheVg6ICdzdGFydCcsXG4gICAgICAgICAgb3ZlcmxheVk6ICdib3R0b20nLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgb3JpZ2luWDogJ3N0YXJ0JyxcbiAgICAgICAgICBvcmlnaW5ZOiAnYm90dG9tJyxcbiAgICAgICAgICBvdmVybGF5WDogJ2VuZCcsXG4gICAgICAgICAgb3ZlcmxheVk6ICdib3R0b20nLFxuICAgICAgICB9LFxuICAgICAgXSk7XG4gICAgfVxuICAgIGNvbnN0IHQ6IEFjdGl2ZUNvbnRleHRNZW51U3ViID0ge1xuICAgICAgc3VibWVudSxcbiAgICAgIGlkOiB0aGlzLmlkKyssXG4gICAgICBpc01lbnVIb3ZlcmVkOiBuZXcgQmVoYXZpb3JTdWJqZWN0KGZhbHNlKSxcbiAgICAgIGlzVHJpZ2dlckhvdmVyZWQ6IG5ldyBCZWhhdmlvclN1YmplY3QoZmFsc2UpLFxuICAgIH07XG4gICAgY29uc3QgbWVudUluamVjdG9yID0gbmV3IE1lbnVJbmplY3Rvcih0LCB0aGlzLl9pbmplY3RvciwgY29udGV4dCk7XG4gICAgY29uc3QgY29tcG9uZW50UG9ydGFsID0gbmV3IENvbXBvbmVudFBvcnRhbChcbiAgICAgIG1lbnVDb21wb25lbnQsXG4gICAgICB1bmRlZmluZWQsXG4gICAgICBtZW51SW5qZWN0b3IsXG4gICAgKTtcbiAgICBjb25zdCBvdmVybGF5UmVmID0gdGhpcy5vdmVybGF5LmNyZWF0ZSh7XG4gICAgICBwb3NpdGlvblN0cmF0ZWd5LFxuICAgICAgcGFuZWxDbGFzczogJ25neC1jb250ZXh0bWVudScsXG4gICAgICBzY3JvbGxTdHJhdGVneTogdGhpcy5zY3JvbGxTdHJhdGVneS5jbG9zZSgpLFxuICAgIH0pO1xuICAgIGNvbnN0IGNvbXBvbmVudCA9IG92ZXJsYXlSZWYuYXR0YWNoPGFueT4oY29tcG9uZW50UG9ydGFsKTtcbiAgICBjb25zdCByZXMgPSB7IG92ZXJsYXlSZWYsIGNvbXBvbmVudCwgLi4udCwgbWVudUNsb3NlLCBtZW51QWN0aW9uIH07XG4gICAgdGhpcy5tZW51cy5wdXNoKHJlcyk7XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuICBnZXRDdXJyZW50TGV2ZWwoKSB7XG4gICAgcmV0dXJuIHRoaXMubWVudXMubGVuZ3RoO1xuICB9XG4gIGNsb3NlQWxsKGNvbnRleHQ/OiBhbnksIGlkeCA9IDApIHtcbiAgICBmb3IgKGxldCBpbmRleCA9IGlkeDsgaW5kZXggPCB0aGlzLm1lbnVzLmxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgY29uc3QgbWVudSA9IHRoaXMubWVudXNbaW5kZXhdO1xuICAgICAgdGhpcy5kZXN0cm95TWVudShtZW51LCBjb250ZXh0KTtcbiAgICB9XG4gICAgdGhpcy5tZW51cy5zcGxpY2UoaWR4LCB0aGlzLm1lbnVzLmxlbmd0aCk7XG4gIH1cbiAgZGVzdHJveU1lbnUobWVudTogQWN0aXZlQ29udGV4dE1lbnUsIGNvbnRleHQ/OiBhbnkpIHtcbiAgICBtZW51LmNvbXBvbmVudC5pbnN0YW5jZS5fc3RhdGUgPSAnZXhpdCc7XG4gICAgaWYgKG1lbnUuY29tcG9uZW50Lmluc3RhbmNlLmxhenkpIHtcbiAgICAgIG1lbnUuY29tcG9uZW50Lmluc3RhbmNlLl9hbmltYXRpb25Eb25lXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIGZpbHRlcigoZXZlbnQ6IGFueSkgPT4gZXZlbnQudG9TdGF0ZSA9PT0gJ2V4aXQnKSxcbiAgICAgICAgICB0YWtlKDEpLFxuICAgICAgICApXG4gICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgIG1lbnUub3ZlcmxheVJlZi5kZXRhY2goKTtcbiAgICAgICAgICBtZW51Lm92ZXJsYXlSZWYuZGlzcG9zZSgpO1xuICAgICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgbWVudS5vdmVybGF5UmVmLmRldGFjaCgpO1xuICAgICAgbWVudS5vdmVybGF5UmVmLmRpc3Bvc2UoKTtcbiAgICB9XG4gICAgaWYgKGNvbnRleHQpIHtcbiAgICAgIG1lbnUubWVudUFjdGlvbi5uZXh0KGNvbnRleHQpO1xuICAgIH1cbiAgICBtZW51Lm1lbnVDbG9zZS5uZXh0KCk7XG4gIH1cbiAgY2xvc2UobWVudTogQWN0aXZlQ29udGV4dE1lbnUsIG1lbnVJbmRleDogbnVtYmVyLCBjb250ZXh0PzogYW55KSB7XG4gICAgdGhpcy5kZXN0cm95TWVudShtZW51LCBjb250ZXh0KTtcbiAgICB0aGlzLm1lbnVzLnNwbGljZShtZW51SW5kZXgsIDEpO1xuICB9XG4gIGNoZWNrT3V0c2lkZUNsaWNrKCRldmVudDogTW91c2VFdmVudCkge1xuICAgIGZvciAoY29uc3QgbSBvZiB0aGlzLm1lbnVzKSB7XG4gICAgICBjb25zdCBjbGlja2VkSW5zaWRlID0gbS5jb21wb25lbnQubG9jYXRpb24ubmF0aXZlRWxlbWVudC5jb250YWlucyhcbiAgICAgICAgJGV2ZW50LnRhcmdldCxcbiAgICAgICk7XG4gICAgICBpZiAoY2xpY2tlZEluc2lkZSkge1xuICAgICAgICAkZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuY2xvc2VBbGwoKTtcbiAgfVxuICBjbG9zZVN1Yk1lbnUoaWQ6IG51bWJlcik6IHZvaWQge1xuICAgIGNvbnN0IG1lbnVJbmRleCA9IHRoaXMubWVudXMuZmluZEluZGV4KG4gPT4gbi5pZCA9PT0gaWQpO1xuICAgIGlmIChtZW51SW5kZXggPT09IC0xIHx8IG1lbnVJbmRleCAhPT0gdGhpcy5tZW51cy5sZW5ndGggLSAxKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIC8vIG1ha2Ugc3VyZSB3ZSBjYW4gY2xvc2UgdGhlIGN1cnJlbnQgbWVudVxuICAgIGNvbnN0IG1lbnUgPSB0aGlzLm1lbnVzW21lbnVJbmRleF07XG4gICAgaWYgKG1lbnUuaXNNZW51SG92ZXJlZC5nZXRWYWx1ZSgpIHx8IG1lbnUuaXNUcmlnZ2VySG92ZXJlZC5nZXRWYWx1ZSgpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIC8vIGNsb3NlIGFsbCBtZW51cyB1cCBpZiBwb3NzaWJsZVxuICAgIGZvciAobGV0IGluZGV4ID0gdGhpcy5tZW51cy5sZW5ndGggLSAxOyBpbmRleCA+PSAxOyBpbmRleC0tKSB7XG4gICAgICBjb25zdCBtID0gdGhpcy5tZW51c1tpbmRleF07XG4gICAgICBpZiAoIW0uaXNNZW51SG92ZXJlZC5nZXRWYWx1ZSgpICYmICFtLmlzVHJpZ2dlckhvdmVyZWQuZ2V0VmFsdWUoKSkge1xuICAgICAgICB0aGlzLmNsb3NlKG0sIGluZGV4KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiIsImltcG9ydCB7XG4gIERpcmVjdGl2ZSxcbiAgSG9zdExpc3RlbmVyLFxuICBJbnB1dCxcbiAgT3V0cHV0LFxuICBFdmVudEVtaXR0ZXIsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IENvbnRleHRNZW51U2VydmljZSwgQWN0aXZlQ29udGV4dE1lbnUgfSBmcm9tICcuL2NvbnRleHQtbWVudS5zZXJ2aWNlJztcblxuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnW2NvbnRleHRNZW51VHJpZ2dlcl0nLFxuICBleHBvcnRBczogJ2NvbnRleHRNZW51VHJpZ2dlcicsXG59KVxuZXhwb3J0IGNsYXNzIENvbnRleHRNZW51VHJpZ2dlckRpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uRGVzdHJveSwgT25Jbml0IHtcbiAgQElucHV0KCkgY29udGV4dE1lbnVUcmlnZ2VyOiBhbnk7XG4gIEBJbnB1dCgpIG1lbnVDb250ZXh0OiBhbnk7XG4gIEBJbnB1dCgpIGhvbGRUb0Rpc3BsYXkgPSAxMDAwO1xuICBAT3V0cHV0KCkgbWVudUFjdGlvbiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCkgbWVudUNsb3NlID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICBtZW51OiBBY3RpdmVDb250ZXh0TWVudTtcbiAgdmlzaWJsZSA9IGZhbHNlO1xuICBwcml2YXRlIG1vdXNlRG93blRpbWVvdXRJZDogYW55O1xuICBwcml2YXRlIHN1YjogU3Vic2NyaXB0aW9uO1xuXG4gIEBIb3N0TGlzdGVuZXIoJ2NvbnRleHRtZW51JywgWyckZXZlbnQnXSlcbiAgaGFuZGxlTWVudSgkZXZlbnQ6IE1vdXNlRXZlbnQpIHtcbiAgICAkZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB0aGlzLm1lbnUgPSB0aGlzLmNvbnRleHRNZW51U2VydmljZS5zaG93KFxuICAgICAgJGV2ZW50LFxuICAgICAgdGhpcy5jb250ZXh0TWVudVRyaWdnZXIsXG4gICAgICB0aGlzLm1lbnVDb250ZXh0LFxuICAgICAgdGhpcy5tZW51Q2xvc2UsXG4gICAgICB0aGlzLm1lbnVBY3Rpb24sXG4gICAgKTtcbiAgICB0aGlzLnZpc2libGUgPSB0cnVlO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcigndG91Y2hzdGFydCcsIFsnJGV2ZW50J10pXG4gIGhhbmRsZU1vdXNlRG93bigkZXZlbnQ6IGFueSkge1xuICAgIGlmICh0aGlzLmhvbGRUb0Rpc3BsYXkgPj0gMCkge1xuICAgICAgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgJGV2ZW50LmNsaWVudFkgPSAkZXZlbnQudG91Y2hlc1swXS5jbGllbnRZO1xuICAgICAgJGV2ZW50LmNsaWVudFggPSAkZXZlbnQudG91Y2hlc1swXS5jbGllbnRYO1xuXG4gICAgICB0aGlzLm1vdXNlRG93blRpbWVvdXRJZCA9IHNldFRpbWVvdXQoXG4gICAgICAgICgpID0+IHRoaXMuaGFuZGxlTWVudSgkZXZlbnQpLFxuICAgICAgICB0aGlzLmhvbGRUb0Rpc3BsYXksXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ3RvdWNoZW5kJylcbiAgaGFuZGxlTW91c2VVcCgpIHtcbiAgICBjbGVhclRpbWVvdXQodGhpcy5tb3VzZURvd25UaW1lb3V0SWQpO1xuICB9XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBjb250ZXh0TWVudVNlcnZpY2U6IENvbnRleHRNZW51U2VydmljZSkge31cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLnN1YiA9IHRoaXMubWVudUNsb3NlLnN1YnNjcmliZSgoKSA9PiB0aGlzLnZpc2libGUgPSBmYWxzZSk7XG4gIH1cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5zdWIudW5zdWJzY3JpYmUoKTtcbiAgfVxufVxuIiwiaW1wb3J0IHtcbiAgRGlyZWN0aXZlLFxuICBIb3N0TGlzdGVuZXIsXG4gIElucHV0LFxuICBPbkRlc3Ryb3ksXG4gIE91dHB1dCxcbiAgRXZlbnRFbWl0dGVyLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHtcbiAgQWN0aXZlQ29udGV4dE1lbnUsXG4gIENvbnRleHRNZW51U2VydmljZSxcbn0gZnJvbSAnLi9jb250ZXh0LW1lbnUuc2VydmljZSc7XG5cbkBEaXJlY3RpdmUoeyBzZWxlY3RvcjogJ1tjb250ZXh0U3VibWVudVRyaWdnZXJdJyB9KVxuZXhwb3J0IGNsYXNzIENvbnRleHRTdWJtZW51VHJpZ2dlckRpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XG4gIEBJbnB1dCgpIGhvdmVyRGVsYXkgPSA1MDA7XG4gIEBJbnB1dCgpIG9wZW5EZWxheSA9IDIwMDtcbiAgQElucHV0KCkgY29udGV4dFN1Ym1lbnVUcmlnZ2VyOiBhbnk7XG4gIEBJbnB1dCgpIG1lbnVDb250ZXh0OiBhbnk7XG4gIEBPdXRwdXQoKSBtZW51QWN0aW9uID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKSBtZW51Q2xvc2UgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG4gIG1lbnU6IEFjdGl2ZUNvbnRleHRNZW51O1xuICBvcGVudGltZXI6IGFueTtcbiAgY2xvc2V0aW1lcjogYW55O1xuICB2aXNpYmxlID0gZmFsc2U7XG4gIGxldmVsID0gMTtcblxuICBASG9zdExpc3RlbmVyKCdjbGljaycsIFsnJGV2ZW50JywgJ3RydWUnXSlcbiAgaGFuZGxlU3ViTWVudUNsaWNrKCRldmVudDogTW91c2VFdmVudCkge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgY2xlYXJUaW1lb3V0KHRoaXMub3BlbnRpbWVyKTtcbiAgICBjbGVhclRpbWVvdXQodGhpcy5jbG9zZXRpbWVyKTtcbiAgICB0aGlzLm1lbnUgPSB0aGlzLmNvbnRleHRNZW51U2VydmljZS5zaG93KFxuICAgICAgJGV2ZW50LFxuICAgICAgdGhpcy5jb250ZXh0U3VibWVudVRyaWdnZXIsXG4gICAgICB0aGlzLm1lbnVDb250ZXh0LFxuICAgICAgdGhpcy5tZW51Q2xvc2UsXG4gICAgICB0aGlzLm1lbnVBY3Rpb24sXG4gICAgICB0cnVlLFxuICAgICAgdGhpcy5sZXZlbCxcbiAgICApO1xuICAgIHRoaXMudmlzaWJsZSA9IHRydWU7XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdtb3VzZW92ZXInLCBbJyRldmVudCddKVxuICBoYW5kbGVTdWJNZW51RW50ZXIoJGV2ZW50OiBNb3VzZUV2ZW50KSB7XG4gICAgaWYgKHRoaXMubWVudSkge1xuICAgICAgdGhpcy5tZW51LmlzVHJpZ2dlckhvdmVyZWQubmV4dCh0cnVlKTtcbiAgICB9XG4gICAgY2xlYXJUaW1lb3V0KHRoaXMuY2xvc2V0aW1lcik7XG4gICAgdGhpcy5vcGVudGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMubWVudSA9IHRoaXMuY29udGV4dE1lbnVTZXJ2aWNlLnNob3coXG4gICAgICAgICRldmVudCxcbiAgICAgICAgdGhpcy5jb250ZXh0U3VibWVudVRyaWdnZXIsXG4gICAgICAgIHRoaXMubWVudUNvbnRleHQsXG4gICAgICAgIHRoaXMubWVudUNsb3NlLFxuICAgICAgICB0aGlzLm1lbnVBY3Rpb24sXG4gICAgICAgIHRydWUsXG4gICAgICAgIHRoaXMubGV2ZWwsXG4gICAgICApO1xuICAgICAgdGhpcy52aXNpYmxlID0gdHJ1ZTtcbiAgICAgIHRoaXMub3BlbnRpbWVyID0gbnVsbDtcbiAgICB9LCB0aGlzLm9wZW5EZWxheSk7XG4gIH1cblxuICAvKipcbiAgICogc3VibWVudSBoaWRlcyBhZnRlciBjdXJzb3IgaGFzIGV4aXRlZCBmb3IgYSBwZXJpb2Qgb2YgdGltZVxuICAgKi9cbiAgQEhvc3RMaXN0ZW5lcignbW91c2VvdXQnLCBbJyRldmVudCddKVxuICBoYW5kbGVTdWJNZW51RXhpdCgpIHtcbiAgICBjbGVhclRpbWVvdXQodGhpcy5vcGVudGltZXIpO1xuICAgIGlmICh0aGlzLm1lbnUpIHtcbiAgICAgIHRoaXMubWVudS5pc1RyaWdnZXJIb3ZlcmVkLm5leHQoZmFsc2UpO1xuICAgIH1cbiAgICB0aGlzLmNsb3NldGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGlmICh0aGlzLm1lbnUpIHtcbiAgICAgICAgdGhpcy5tZW51LmlzVHJpZ2dlckhvdmVyZWQubmV4dChmYWxzZSk7XG4gICAgICAgIHRoaXMuY29udGV4dE1lbnVTZXJ2aWNlLmNsb3NlU3ViTWVudSh0aGlzLm1lbnUuaWQpO1xuICAgICAgICB0aGlzLm1lbnUgPSB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgICB0aGlzLnZpc2libGUgPSBmYWxzZTtcbiAgICB9LCB0aGlzLmhvdmVyRGVsYXkpO1xuICB9XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBjb250ZXh0TWVudVNlcnZpY2U6IENvbnRleHRNZW51U2VydmljZSkge1xuICAgIC8vIGdldCBjdXJyZW50IGxldmVsXG4gICAgc2V0VGltZW91dCgoKSA9PiAodGhpcy5sZXZlbCA9IHRoaXMuY29udGV4dE1lbnVTZXJ2aWNlLmdldEN1cnJlbnRMZXZlbCgpKSk7XG4gIH1cblxuICAvKipcbiAgICogaWYgb3ZlcndyaXR0ZW4gbWFrZSBzdXJlIHRvIGNsZWFyIHRpbWVvdXRzXG4gICAqL1xuICBuZ09uRGVzdHJveSgpIHtcbiAgICBjbGVhclRpbWVvdXQodGhpcy5vcGVudGltZXIpO1xuICAgIGNsZWFyVGltZW91dCh0aGlzLmNsb3NldGltZXIpO1xuICB9XG59XG4iLCJpbXBvcnQgeyBDb21wb25lbnQsIEhvc3RMaXN0ZW5lciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQW5pbWF0aW9uRXZlbnQgfSBmcm9tICdAYW5ndWxhci9hbmltYXRpb25zJztcblxuaW1wb3J0IHsgQ29udGV4dE1lbnVTZXJ2aWNlIH0gZnJvbSAnLi9jb250ZXh0LW1lbnUuc2VydmljZSc7XG5pbXBvcnQgeyBNZW51UGFja2FnZSB9IGZyb20gJy4vY29udGV4dC1tZW51LWluamVjdG9yJztcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLW1lbnUnLFxuICB0ZW1wbGF0ZTogYGAsXG59KVxuZXhwb3J0IGNsYXNzIE1lbnVDb21wb25lbnQge1xuICAvKiogU3RhdGUgb2YgdGhlIGRpYWxvZyBhbmltYXRpb24uICovXG4gIF9zdGF0ZTogJ3ZvaWQnIHwgJ2VudGVyJyB8ICdleGl0JyA9ICdlbnRlcic7XG4gIF9hbmltYXRpb25Eb25lID0gbmV3IFN1YmplY3Q8QW5pbWF0aW9uRXZlbnQ+KCk7XG4gIC8qKiBzZXQgbGF6eSB0byBGYWxzZSBpZiB5b3UgZG8gbm90IGhhdmUgYW5pbWF0aW9ucyAqL1xuICBsYXp5ID0gdHJ1ZTtcbiAgY2xvc2V0aW1lcjogYW55O1xuXG4gIEBIb3N0TGlzdGVuZXIoJ21vdXNlb3ZlcicpXG4gIGhhbmRsZU1vdXNlb3ZlcigpIHtcbiAgICBpZiAoIXRoaXMubWVudVBhY2thZ2UubWVudS5zdWJtZW51KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMubWVudVBhY2thZ2UubWVudS5pc01lbnVIb3ZlcmVkLm5leHQodHJ1ZSk7XG4gICAgY2xlYXJUaW1lb3V0KHRoaXMuY2xvc2V0aW1lcik7XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdtb3VzZWxlYXZlJylcbiAgaGFuZGxlTW91c2VsZWF2ZSgpIHtcbiAgICBpZiAoIXRoaXMubWVudVBhY2thZ2UubWVudS5zdWJtZW51KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMubWVudVBhY2thZ2UubWVudS5pc01lbnVIb3ZlcmVkLm5leHQoZmFsc2UpO1xuICAgIHRoaXMuY2xvc2V0aW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5jb250ZXh0TWVudVNlcnZpY2UuY2xvc2VTdWJNZW51KHRoaXMubWVudVBhY2thZ2UubWVudS5pZCk7XG4gICAgfSwgNTAwKTtcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50OmNsaWNrJywgWyckZXZlbnQnXSlcbiAgaGFuZGxlV2luZG93Q2xpY2soJGV2ZW50OiBNb3VzZUV2ZW50KSB7XG4gICAgdGhpcy5jb250ZXh0TWVudVNlcnZpY2UuY2hlY2tPdXRzaWRlQ2xpY2soJGV2ZW50KTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyBtZW51UGFja2FnZTogTWVudVBhY2thZ2UsXG4gICAgcHVibGljIGNvbnRleHRNZW51U2VydmljZTogQ29udGV4dE1lbnVTZXJ2aWNlLFxuICApIHt9XG5cbiAgLyoqIENhbGxiYWNrIHRoYXQgaXMgaW52b2tlZCB3aGVuIHRoZSBtZW51IGFuaW1hdGlvbiBjb21wbGV0ZXMuICovXG4gIF9vbkFuaW1hdGlvbkRvbmUoZXZlbnQ6IEFuaW1hdGlvbkV2ZW50KSB7XG4gICAgdGhpcy5fYW5pbWF0aW9uRG9uZS5uZXh0KGV2ZW50KTtcbiAgfVxufVxuIiwiaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE92ZXJsYXlNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jZGsvb3ZlcmxheSc7XG5pbXBvcnQgeyBQb3J0YWxNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jZGsvcG9ydGFsJztcblxuaW1wb3J0IHsgQ29udGV4dE1lbnVUcmlnZ2VyRGlyZWN0aXZlIH0gZnJvbSAnLi9jb250ZXh0LW1lbnUtdHJpZ2dlci5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgQ29udGV4dFN1Ym1lbnVUcmlnZ2VyRGlyZWN0aXZlIH0gZnJvbSAnLi9jb250ZXh0LXN1Ym1lbnUtdHJpZ2dlci5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgTWVudUNvbXBvbmVudCB9IGZyb20gJy4vbWVudS5jb21wb25lbnQnO1xuXG5ATmdNb2R1bGUoe1xuICBkZWNsYXJhdGlvbnM6IFtcbiAgICBDb250ZXh0TWVudVRyaWdnZXJEaXJlY3RpdmUsXG4gICAgQ29udGV4dFN1Ym1lbnVUcmlnZ2VyRGlyZWN0aXZlLFxuICAgIE1lbnVDb21wb25lbnQsXG4gIF0sXG4gIGV4cG9ydHM6IFtDb250ZXh0TWVudVRyaWdnZXJEaXJlY3RpdmUsIENvbnRleHRTdWJtZW51VHJpZ2dlckRpcmVjdGl2ZV0sXG4gIGltcG9ydHM6IFtQb3J0YWxNb2R1bGUsIE92ZXJsYXlNb2R1bGVdLFxufSlcbmV4cG9ydCBjbGFzcyBDb250ZXh0TWVudU1vZHVsZSB7fVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7QUFJQSxNQUFhLFdBQVc7Ozs7O0lBQ3RCLFlBQW1CLElBQTBCLEVBQVMsT0FBWTtRQUEvQyxTQUFJLEdBQUosSUFBSSxDQUFzQjtRQUFTLFlBQU8sR0FBUCxPQUFPLENBQUs7S0FBSTtDQUN2RTtNQUVZLFlBQVk7Ozs7OztJQUV2QixZQUNVLGtCQUF3QyxFQUN4QyxlQUF5QixFQUN6QixPQUFZO1FBRlosdUJBQWtCLEdBQWxCLGtCQUFrQixDQUFzQjtRQUN4QyxvQkFBZSxHQUFmLGVBQWUsQ0FBVTtRQUN6QixZQUFPLEdBQVAsT0FBTyxDQUFLO1FBRXBCLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxXQUFXLENBQUMsa0JBQWtCLEVBQUUsT0FBTyxDQUFDLENBQUM7S0FDbEU7Ozs7Ozs7O0lBRUQsR0FBRyxDQUFJLEtBQVUsRUFBRSxhQUFpQixFQUFFLEtBQW1CO1FBQ3ZELElBQUksS0FBSyxLQUFLLFdBQVcsRUFBRTtZQUN6QixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUM7U0FDMUI7UUFDRCxPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFJLEtBQUssRUFBRSxhQUFhLEVBQUUsS0FBSyxDQUFDLENBQUM7S0FDakU7Q0FDRjs7Ozs7O0FDeEJELE1BMkJhLGtCQUFrQjs7Ozs7O0lBSTdCLFlBQ1UsT0FBZ0IsRUFDaEIsY0FBcUMsRUFDckMsU0FBbUI7UUFGbkIsWUFBTyxHQUFQLE9BQU8sQ0FBUztRQUNoQixtQkFBYyxHQUFkLGNBQWMsQ0FBdUI7UUFDckMsY0FBUyxHQUFULFNBQVMsQ0FBVTtRQU43QixVQUFLLEdBQXdCLEVBQUUsQ0FBQztRQUNoQyxPQUFFLEdBQUcsQ0FBQyxDQUFDO0tBTUg7Ozs7Ozs7Ozs7OztJQVNKLElBQUksQ0FDRixNQUFrQixFQUNsQixhQUFhLEVBQ2IsT0FBWSxFQUNaLFNBQTRCLEVBQzVCLFVBQTZCLEVBQzdCLE9BQU8sR0FBRyxLQUFLLEVBQ2YsS0FBYzs7WUFFVixNQUFXO1FBQ2YsSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUNaLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNoQixNQUFNLEdBQUc7Z0JBQ1AscUJBQXFCLEVBQUUsT0FBbUI7b0JBQ3hDLE1BQU0sRUFBRSxNQUFNLENBQUMsT0FBTztvQkFDdEIsTUFBTSxFQUFFLENBQUM7b0JBQ1QsSUFBSSxFQUFFLE1BQU0sQ0FBQyxPQUFPO29CQUNwQixLQUFLLEVBQUUsTUFBTSxDQUFDLE9BQU87b0JBQ3JCLEdBQUcsRUFBRSxNQUFNLENBQUMsT0FBTztvQkFDbkIsS0FBSyxFQUFFLENBQUM7aUJBQ1QsQ0FBQzthQUNILENBQUM7U0FDSDthQUFNOztZQUVMLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ2hDLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDO1NBQ3hCOztjQUNLLEVBQUUsR0FBRyxJQUFJLFVBQVUsQ0FBQyxNQUFNLENBQUM7O2NBQzNCLGdCQUFnQixHQUFHLElBQUksQ0FBQyxPQUFPO2FBQ2xDLFFBQVEsRUFBRTthQUNWLG1CQUFtQixDQUFDLEVBQUUsQ0FBQzthQUN2QixzQkFBc0IsQ0FBQyxLQUFLLENBQUM7UUFFaEMsSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUNaLGdCQUFnQixDQUFDLGFBQWEsQ0FBQztnQkFDN0I7b0JBQ0UsT0FBTyxFQUFFLE9BQU87b0JBQ2hCLE9BQU8sRUFBRSxRQUFRO29CQUNqQixRQUFRLEVBQUUsT0FBTztvQkFDakIsUUFBUSxFQUFFLEtBQUs7aUJBQ2hCO2dCQUNEO29CQUNFLE9BQU8sRUFBRSxPQUFPO29CQUNoQixPQUFPLEVBQUUsS0FBSztvQkFDZCxRQUFRLEVBQUUsT0FBTztvQkFDakIsUUFBUSxFQUFFLFFBQVE7aUJBQ25CO2dCQUNEO29CQUNFLE9BQU8sRUFBRSxLQUFLO29CQUNkLE9BQU8sRUFBRSxLQUFLO29CQUNkLFFBQVEsRUFBRSxPQUFPO29CQUNqQixRQUFRLEVBQUUsS0FBSztpQkFDaEI7Z0JBQ0Q7b0JBQ0UsT0FBTyxFQUFFLE9BQU87b0JBQ2hCLE9BQU8sRUFBRSxLQUFLO29CQUNkLFFBQVEsRUFBRSxLQUFLO29CQUNmLFFBQVEsRUFBRSxLQUFLO2lCQUNoQjtnQkFDRDtvQkFDRSxPQUFPLEVBQUUsS0FBSztvQkFDZCxPQUFPLEVBQUUsUUFBUTtvQkFDakIsUUFBUSxFQUFFLE9BQU87b0JBQ2pCLFFBQVEsRUFBRSxRQUFRO2lCQUNuQjtnQkFDRDtvQkFDRSxPQUFPLEVBQUUsT0FBTztvQkFDaEIsT0FBTyxFQUFFLFFBQVE7b0JBQ2pCLFFBQVEsRUFBRSxLQUFLO29CQUNmLFFBQVEsRUFBRSxRQUFRO2lCQUNuQjthQUNGLENBQUMsQ0FBQztTQUNKO2FBQU07WUFDTCxnQkFBZ0IsQ0FBQyxhQUFhLENBQUM7Z0JBQzdCO29CQUNFLE9BQU8sRUFBRSxLQUFLO29CQUNkLE9BQU8sRUFBRSxLQUFLO29CQUNkLFFBQVEsRUFBRSxPQUFPO29CQUNqQixRQUFRLEVBQUUsS0FBSztpQkFDaEI7Z0JBQ0Q7b0JBQ0UsT0FBTyxFQUFFLE9BQU87b0JBQ2hCLE9BQU8sRUFBRSxLQUFLO29CQUNkLFFBQVEsRUFBRSxLQUFLO29CQUNmLFFBQVEsRUFBRSxLQUFLO2lCQUNoQjtnQkFDRDtvQkFDRSxPQUFPLEVBQUUsS0FBSztvQkFDZCxPQUFPLEVBQUUsUUFBUTtvQkFDakIsUUFBUSxFQUFFLE9BQU87b0JBQ2pCLFFBQVEsRUFBRSxRQUFRO2lCQUNuQjtnQkFDRDtvQkFDRSxPQUFPLEVBQUUsT0FBTztvQkFDaEIsT0FBTyxFQUFFLFFBQVE7b0JBQ2pCLFFBQVEsRUFBRSxLQUFLO29CQUNmLFFBQVEsRUFBRSxRQUFRO2lCQUNuQjthQUNGLENBQUMsQ0FBQztTQUNKOztjQUNLLENBQUMsR0FBeUI7WUFDOUIsT0FBTztZQUNQLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFO1lBQ2IsYUFBYSxFQUFFLElBQUksZUFBZSxDQUFDLEtBQUssQ0FBQztZQUN6QyxnQkFBZ0IsRUFBRSxJQUFJLGVBQWUsQ0FBQyxLQUFLLENBQUM7U0FDN0M7O2NBQ0ssWUFBWSxHQUFHLElBQUksWUFBWSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLE9BQU8sQ0FBQzs7Y0FDM0QsZUFBZSxHQUFHLElBQUksZUFBZSxDQUN6QyxhQUFhLEVBQ2IsU0FBUyxFQUNULFlBQVksQ0FDYjs7Y0FDSyxVQUFVLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUM7WUFDckMsZ0JBQWdCO1lBQ2hCLFVBQVUsRUFBRSxpQkFBaUI7WUFDN0IsY0FBYyxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxFQUFFO1NBQzVDLENBQUM7O2NBQ0ksU0FBUyxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQU0sZUFBZSxDQUFDOztjQUNuRCxHQUFHLG1CQUFLLFVBQVUsRUFBRSxTQUFTLElBQUssQ0FBQyxJQUFFLFNBQVMsRUFBRSxVQUFVLEdBQUU7UUFDbEUsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDckIsT0FBTyxHQUFHLENBQUM7S0FDWjs7OztJQUNELGVBQWU7UUFDYixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDO0tBQzFCOzs7Ozs7SUFDRCxRQUFRLENBQUMsT0FBYSxFQUFFLEdBQUcsR0FBRyxDQUFDO1FBQzdCLEtBQUssSUFBSSxLQUFLLEdBQUcsR0FBRyxFQUFFLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsRUFBRTs7a0JBQ2xELElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQztZQUM5QixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQztTQUNqQztRQUNELElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0tBQzNDOzs7Ozs7SUFDRCxXQUFXLENBQUMsSUFBdUIsRUFBRSxPQUFhO1FBQ2hELElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7UUFDeEMsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUU7WUFDaEMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsY0FBYztpQkFDbkMsSUFBSSxDQUNILE1BQU0sQ0FBQyxDQUFDLEtBQVUsS0FBSyxLQUFLLENBQUMsT0FBTyxLQUFLLE1BQU0sQ0FBQyxFQUNoRCxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQ1I7aUJBQ0EsU0FBUyxDQUFDO2dCQUNULElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFLENBQUM7Z0JBQ3pCLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxFQUFFLENBQUM7YUFDM0IsQ0FBQyxDQUFDO1NBQ047YUFBTTtZQUNMLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDekIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsQ0FBQztTQUMzQjtRQUNELElBQUksT0FBTyxFQUFFO1lBQ1gsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7U0FDL0I7UUFDRCxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxDQUFDO0tBQ3ZCOzs7Ozs7O0lBQ0QsS0FBSyxDQUFDLElBQXVCLEVBQUUsU0FBaUIsRUFBRSxPQUFhO1FBQzdELElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ2hDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQztLQUNqQzs7Ozs7SUFDRCxpQkFBaUIsQ0FBQyxNQUFrQjtRQUNsQyxLQUFLLE1BQU0sQ0FBQyxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUU7O2tCQUNwQixhQUFhLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FDL0QsTUFBTSxDQUFDLE1BQU0sQ0FDZDtZQUNELElBQUksYUFBYSxFQUFFO2dCQUNqQixNQUFNLENBQUMsY0FBYyxFQUFFLENBQUM7Z0JBQ3hCLE1BQU0sQ0FBQyxlQUFlLEVBQUUsQ0FBQztnQkFDekIsT0FBTzthQUNSO1NBQ0Y7UUFDRCxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7S0FDakI7Ozs7O0lBQ0QsWUFBWSxDQUFDLEVBQVU7O2NBQ2YsU0FBUyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQztRQUN4RCxJQUFJLFNBQVMsS0FBSyxDQUFDLENBQUMsSUFBSSxTQUFTLEtBQUssSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQzNELE9BQU87U0FDUjs7O2NBRUssSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDO1FBQ2xDLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLEVBQUUsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxFQUFFLEVBQUU7WUFDckUsT0FBTztTQUNSOztRQUVELEtBQUssSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLEtBQUssSUFBSSxDQUFDLEVBQUUsS0FBSyxFQUFFLEVBQUU7O2tCQUNyRCxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUM7WUFDM0IsSUFBSSxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxFQUFFLEVBQUU7Z0JBQ2pFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO2FBQ3RCO2lCQUFNO2dCQUNMLE9BQU87YUFDUjtTQUNGO0tBQ0Y7OztZQS9NRixVQUFVLFNBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFOzs7O1lBekJoQyxPQUFPO1lBRVAscUJBQXFCO1lBR1UsUUFBUTs7Ozs7Ozs7QUNOekMsTUFrQmEsMkJBQTJCOzs7O0lBMkN0QyxZQUFvQixrQkFBc0M7UUFBdEMsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUFvQjtRQXhDakQsa0JBQWEsR0FBRyxJQUFJLENBQUM7UUFDcEIsZUFBVSxHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7UUFDckMsY0FBUyxHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7UUFFL0MsWUFBTyxHQUFHLEtBQUssQ0FBQztLQW9DOEM7Ozs7O0lBL0I5RCxVQUFVLENBQUMsTUFBa0I7UUFDM0IsTUFBTSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FDdEMsTUFBTSxFQUNOLElBQUksQ0FBQyxrQkFBa0IsRUFDdkIsSUFBSSxDQUFDLFdBQVcsRUFDaEIsSUFBSSxDQUFDLFNBQVMsRUFDZCxJQUFJLENBQUMsVUFBVSxDQUNoQixDQUFDO1FBQ0YsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7S0FDckI7Ozs7O0lBR0QsZUFBZSxDQUFDLE1BQVc7UUFDekIsSUFBSSxJQUFJLENBQUMsYUFBYSxJQUFJLENBQUMsRUFBRTtZQUMzQixNQUFNLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDekIsTUFBTSxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQztZQUMzQyxNQUFNLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDO1lBRTNDLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxVQUFVLENBQ2xDLE1BQU0sSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsRUFDN0IsSUFBSSxDQUFDLGFBQWEsQ0FDbkIsQ0FBQztTQUNIO0tBQ0Y7Ozs7SUFHRCxhQUFhO1FBQ1gsWUFBWSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO0tBQ3ZDOzs7O0lBSUQsUUFBUTtRQUNOLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsTUFBTSxJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQyxDQUFDO0tBQ2pFOzs7O0lBQ0QsV0FBVztRQUNULElBQUksQ0FBQyxHQUFHLENBQUMsV0FBVyxFQUFFLENBQUM7S0FDeEI7OztZQXRERixTQUFTLFNBQUM7Z0JBQ1QsUUFBUSxFQUFFLHNCQUFzQjtnQkFDaEMsUUFBUSxFQUFFLG9CQUFvQjthQUMvQjs7OztZQUxRLGtCQUFrQjs7O2lDQU94QixLQUFLOzBCQUNMLEtBQUs7NEJBQ0wsS0FBSzt5QkFDTCxNQUFNO3dCQUNOLE1BQU07eUJBTU4sWUFBWSxTQUFDLGFBQWEsRUFBRSxDQUFDLFFBQVEsQ0FBQzs4QkFhdEMsWUFBWSxTQUFDLFlBQVksRUFBRSxDQUFDLFFBQVEsQ0FBQzs0QkFjckMsWUFBWSxTQUFDLFVBQVU7Ozs7Ozs7QUN4RDFCLE1BZWEsOEJBQThCOzs7O0lBdUV6QyxZQUFvQixrQkFBc0M7UUFBdEMsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUFvQjtRQXRFakQsZUFBVSxHQUFHLEdBQUcsQ0FBQztRQUNqQixjQUFTLEdBQUcsR0FBRyxDQUFDO1FBR2YsZUFBVSxHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7UUFDckMsY0FBUyxHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7UUFJL0MsWUFBTyxHQUFHLEtBQUssQ0FBQztRQUNoQixVQUFLLEdBQUcsQ0FBQyxDQUFDOztRQThEUixVQUFVLENBQUMsT0FBTyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxlQUFlLEVBQUUsQ0FBQyxDQUFDLENBQUM7S0FDNUU7Ozs7O0lBNURELGtCQUFrQixDQUFDLE1BQWtCO1FBQ25DLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUN2QixLQUFLLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDeEIsWUFBWSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUM3QixZQUFZLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQzlCLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FDdEMsTUFBTSxFQUNOLElBQUksQ0FBQyxxQkFBcUIsRUFDMUIsSUFBSSxDQUFDLFdBQVcsRUFDaEIsSUFBSSxDQUFDLFNBQVMsRUFDZCxJQUFJLENBQUMsVUFBVSxFQUNmLElBQUksRUFDSixJQUFJLENBQUMsS0FBSyxDQUNYLENBQUM7UUFDRixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztLQUNyQjs7Ozs7SUFHRCxrQkFBa0IsQ0FBQyxNQUFrQjtRQUNuQyxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUU7WUFDYixJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUN2QztRQUNELFlBQVksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDOUIsSUFBSSxDQUFDLFNBQVMsR0FBRyxVQUFVLENBQUM7WUFDMUIsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUN0QyxNQUFNLEVBQ04sSUFBSSxDQUFDLHFCQUFxQixFQUMxQixJQUFJLENBQUMsV0FBVyxFQUNoQixJQUFJLENBQUMsU0FBUyxFQUNkLElBQUksQ0FBQyxVQUFVLEVBQ2YsSUFBSSxFQUNKLElBQUksQ0FBQyxLQUFLLENBQ1gsQ0FBQztZQUNGLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO1lBQ3BCLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO1NBQ3ZCLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0tBQ3BCOzs7OztJQU1ELGlCQUFpQjtRQUNmLFlBQVksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDN0IsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFO1lBQ2IsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDeEM7UUFDRCxJQUFJLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQztZQUMzQixJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUU7Z0JBQ2IsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ3ZDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFDbkQsSUFBSSxDQUFDLElBQUksR0FBRyxTQUFTLENBQUM7YUFDdkI7WUFDRCxJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztTQUN0QixFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztLQUNyQjs7Ozs7SUFVRCxXQUFXO1FBQ1QsWUFBWSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUM3QixZQUFZLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0tBQy9COzs7WUFuRkYsU0FBUyxTQUFDLEVBQUUsUUFBUSxFQUFFLHlCQUF5QixFQUFFOzs7O1lBSGhELGtCQUFrQjs7O3lCQUtqQixLQUFLO3dCQUNMLEtBQUs7b0NBQ0wsS0FBSzswQkFDTCxLQUFLO3lCQUNMLE1BQU07d0JBQ04sTUFBTTtpQ0FPTixZQUFZLFNBQUMsT0FBTyxFQUFFLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQztpQ0FrQnhDLFlBQVksU0FBQyxXQUFXLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0NBd0JwQyxZQUFZLFNBQUMsVUFBVSxFQUFFLENBQUMsUUFBUSxDQUFDOzs7Ozs7O0FDdEV0QyxNQVdhLGFBQWE7Ozs7O0lBaUN4QixZQUNTLFdBQXdCLEVBQ3hCLGtCQUFzQztRQUR0QyxnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUN4Qix1QkFBa0IsR0FBbEIsa0JBQWtCLENBQW9COzs7O1FBakMvQyxXQUFNLEdBQThCLE9BQU8sQ0FBQztRQUM1QyxtQkFBYyxHQUFHLElBQUksT0FBTyxFQUFrQixDQUFDOzs7O1FBRS9DLFNBQUksR0FBRyxJQUFJLENBQUM7S0ErQlI7Ozs7SUEzQkosZUFBZTtRQUNiLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUU7WUFDbEMsT0FBTztTQUNSO1FBQ0QsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMvQyxZQUFZLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0tBQy9COzs7O0lBR0QsZ0JBQWdCO1FBQ2QsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUNsQyxPQUFPO1NBQ1I7UUFDRCxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2hELElBQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDO1lBQzNCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7U0FDaEUsRUFBRSxHQUFHLENBQUMsQ0FBQztLQUNUOzs7OztJQUdELGlCQUFpQixDQUFDLE1BQWtCO1FBQ2xDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztLQUNuRDs7Ozs7O0lBUUQsZ0JBQWdCLENBQUMsS0FBcUI7UUFDcEMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7S0FDakM7OztZQTdDRixTQUFTLFNBQUM7Z0JBQ1QsUUFBUSxFQUFFLFVBQVU7Z0JBQ3BCLFFBQVEsRUFBRSxFQUFFO2FBQ2I7Ozs7WUFOUSxXQUFXO1lBRFgsa0JBQWtCOzs7OEJBZ0J4QixZQUFZLFNBQUMsV0FBVzsrQkFTeEIsWUFBWSxTQUFDLFlBQVk7Z0NBV3pCLFlBQVksU0FBQyxnQkFBZ0IsRUFBRSxDQUFDLFFBQVEsQ0FBQzs7Ozs7OztBQ3ZDNUMsTUFpQmEsaUJBQWlCOzs7WUFUN0IsUUFBUSxTQUFDO2dCQUNSLFlBQVksRUFBRTtvQkFDWiwyQkFBMkI7b0JBQzNCLDhCQUE4QjtvQkFDOUIsYUFBYTtpQkFDZDtnQkFDRCxPQUFPLEVBQUUsQ0FBQywyQkFBMkIsRUFBRSw4QkFBOEIsQ0FBQztnQkFDdEUsT0FBTyxFQUFFLENBQUMsWUFBWSxFQUFFLGFBQWEsQ0FBQzthQUN2Qzs7Ozs7Ozs7Ozs7Ozs7OyJ9
|
476
|
+
export { ContextMenuModule, ContextMenuService, ContextMenuTriggerDirective, ContextSubmenuTriggerDirective, MenuComponent, MenuInjector, MenuPackage };
|
477
|
+
//# sourceMappingURL=ctrl-ngx-rightclick.js.map
|