@coolon/angular-ui-powerups 0.0.98 → 0.0.102

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 (83) hide show
  1. package/bundles/coolon-angular-ui-powerups.umd.js +2036 -1518
  2. package/bundles/coolon-angular-ui-powerups.umd.js.map +1 -1
  3. package/bundles/coolon-angular-ui-powerups.umd.min.js +1 -1
  4. package/bundles/coolon-angular-ui-powerups.umd.min.js.map +1 -1
  5. package/coolon-angular-ui-powerups.d.ts +19 -19
  6. package/coolon-angular-ui-powerups.metadata.json +1 -1
  7. package/esm2015/coolon-angular-ui-powerups.js +19 -19
  8. package/esm2015/index.js +2 -2
  9. package/esm2015/lib/interaction/components/activity-container/activity-container.component.js +20 -5
  10. package/esm2015/lib/interaction/components/inplace-interaction-context/inplace-interaction-context.component.js +13 -3
  11. package/esm2015/lib/interaction/index.js +5 -4
  12. package/esm2015/lib/interaction/interaction-context-base.js +21 -8
  13. package/esm2015/lib/interaction/interaction-context.js +53 -46
  14. package/esm2015/lib/interaction/interaction.module.js +3 -3
  15. package/esm2015/lib/interaction/services/interaction.service.js +232 -0
  16. package/esm2015/lib/interaction/services/mat-dialog-interaction/dialog-interaction-context-factory.js +62 -0
  17. package/esm2015/lib/interaction/services/mat-dialog-interaction/dialog-interaction-context.js +145 -0
  18. package/esm2015/lib/interaction/services/modal-interaction-context.factory.js +17 -0
  19. package/esm2015/lib/place/components/place-outlet/place-outlet.component.js +3 -3
  20. package/esm2015/lib/place/guards/navigation-state.js +406 -262
  21. package/esm2015/lib/place/guards/place-component-deactivation-handler.js +63 -28
  22. package/esm2015/lib/place/guards/place.guard.js +215 -0
  23. package/esm2015/lib/place/index.js +2 -3
  24. package/esm2015/lib/place/place-router.js +161 -118
  25. package/esm2015/lib/place/url-snapshot.js +124 -36
  26. package/esm2015/public_api.js +3 -3
  27. package/esm5/coolon-angular-ui-powerups.js +19 -19
  28. package/esm5/index.js +2 -2
  29. package/esm5/lib/interaction/components/activity-container/activity-container.component.js +24 -14
  30. package/esm5/lib/interaction/components/inplace-interaction-context/inplace-interaction-context.component.js +10 -3
  31. package/esm5/lib/interaction/index.js +5 -4
  32. package/esm5/lib/interaction/interaction-context-base.js +25 -8
  33. package/esm5/lib/interaction/interaction-context.js +81 -56
  34. package/esm5/lib/interaction/interaction.module.js +3 -3
  35. package/esm5/lib/interaction/services/interaction.service.js +280 -0
  36. package/esm5/lib/interaction/services/mat-dialog-interaction/dialog-interaction-context-factory.js +65 -0
  37. package/esm5/lib/interaction/services/mat-dialog-interaction/dialog-interaction-context.js +170 -0
  38. package/esm5/lib/interaction/services/modal-interaction-context.factory.js +27 -0
  39. package/esm5/lib/place/components/place-outlet/place-outlet.component.js +3 -3
  40. package/esm5/lib/place/guards/navigation-state.js +552 -304
  41. package/esm5/lib/place/guards/place-component-deactivation-handler.js +73 -27
  42. package/esm5/lib/place/guards/place.guard.js +300 -0
  43. package/esm5/lib/place/index.js +2 -3
  44. package/esm5/lib/place/place-router.js +199 -137
  45. package/esm5/lib/place/url-snapshot.js +153 -42
  46. package/esm5/public_api.js +3 -3
  47. package/fesm2015/coolon-angular-ui-powerups.js +1636 -1300
  48. package/fesm2015/coolon-angular-ui-powerups.js.map +1 -1
  49. package/fesm5/coolon-angular-ui-powerups.js +1985 -1466
  50. package/fesm5/coolon-angular-ui-powerups.js.map +1 -1
  51. package/lib/interaction/components/activity-container/activity-container.component.d.ts +1 -0
  52. package/lib/interaction/components/inplace-interaction-context/inplace-interaction-context.component.d.ts +3 -1
  53. package/lib/interaction/index.d.ts +4 -3
  54. package/lib/interaction/interaction-context-base.d.ts +3 -1
  55. package/lib/interaction/interaction-context.d.ts +11 -13
  56. package/lib/interaction/services/interaction.service.d.ts +46 -0
  57. package/lib/interaction/services/mat-dialog-interaction/dialog-interaction-context-factory.d.ts +15 -0
  58. package/lib/interaction/services/{dialog-interaction-context.d.ts → mat-dialog-interaction/dialog-interaction-context.d.ts} +2 -2
  59. package/lib/interaction/services/modal-interaction-context.factory.d.ts +4 -0
  60. package/lib/place/guards/navigation-state.d.ts +83 -49
  61. package/lib/place/guards/place-component-deactivation-handler.d.ts +7 -4
  62. package/lib/place/guards/{abstract-place.guard.d.ts → place.guard.d.ts} +9 -4
  63. package/lib/place/index.d.ts +1 -2
  64. package/lib/place/place-router.d.ts +17 -22
  65. package/lib/place/url-snapshot.d.ts +23 -6
  66. package/package.json +1 -1
  67. package/schematics/place-routes/place-def.js +1 -0
  68. package/schematics/place-routes/place-def.js.map +1 -1
  69. package/schematics/place-routes/templates/place-routes.ts.template +10 -11
  70. package/styles/styles.scss +1 -1
  71. package/esm2015/lib/interaction/services/dialog-interaction-context.js +0 -163
  72. package/esm2015/lib/interaction/services/dialog-interaction.service.js +0 -151
  73. package/esm2015/lib/interaction/services/modal-interaction.service.js +0 -109
  74. package/esm2015/lib/place/guards/abstract-place.guard.js +0 -165
  75. package/esm2015/lib/place/guards/interaction.guard.js +0 -113
  76. package/esm5/lib/interaction/services/dialog-interaction-context.js +0 -188
  77. package/esm5/lib/interaction/services/dialog-interaction.service.js +0 -179
  78. package/esm5/lib/interaction/services/modal-interaction.service.js +0 -153
  79. package/esm5/lib/place/guards/abstract-place.guard.js +0 -212
  80. package/esm5/lib/place/guards/interaction.guard.js +0 -125
  81. package/lib/interaction/services/dialog-interaction.service.d.ts +0 -24
  82. package/lib/interaction/services/modal-interaction.service.d.ts +0 -15
  83. package/lib/place/guards/interaction.guard.d.ts +0 -17
@@ -6,9 +6,9 @@ import * as tslib_1 from "tslib";
6
6
  import { Location } from '@angular/common';
7
7
  import { Injectable } from '@angular/core';
8
8
  import { NavigationCancel, NavigationEnd, NavigationError, NavigationStart, Router, UrlSerializer } from '@angular/router';
9
- import { assert, Dsl, GarbageCollector, lang, Logger, MutableListModel, MutableValueModel } from '@coolon/pectin';
9
+ import { assert, Dsl, GarbageCollector, lang, Logger, MutableListModel, MutableStream, MutableValueModel } from '@coolon/pectin';
10
10
  import _ from 'lodash';
11
- import { ModalInteractionService } from '../interaction/services/modal-interaction.service';
11
+ import { InteractionService } from '../interaction/services/interaction.service';
12
12
  import { NavigationState } from './guards/navigation-state';
13
13
  import { PlaceHistory } from './place-history';
14
14
  import { UrlSnapshot } from './url-snapshot';
@@ -16,30 +16,34 @@ import * as i0 from "@angular/core";
16
16
  import * as i1 from "@angular/router";
17
17
  import * as i2 from "@angular/common";
18
18
  import * as i3 from "./place-history";
19
- import * as i4 from "../interaction/services/modal-interaction.service";
19
+ import * as i4 from "../interaction/services/interaction.service";
20
20
  var PlaceRouter = /** @class */ (function (_super) {
21
21
  tslib_1.__extends(PlaceRouter, _super);
22
- function PlaceRouter(router, urlSerializer, angularLocation, placeHistory, modalInteractionService) {
22
+ function PlaceRouter(router, urlSerializer, angularLocation, placeHistory, interactionService) {
23
23
  var _this = _super.call(this) || this;
24
24
  _this.router = router;
25
25
  _this.urlSerializer = urlSerializer;
26
26
  _this.angularLocation = angularLocation;
27
27
  _this.placeHistory = placeHistory;
28
- _this.modalInteractionService = modalInteractionService;
29
- _this.firstRoute = true;
30
- _this._navigationSessionModel = new MutableValueModel();
28
+ _this.interactionService = interactionService;
29
+ _this._navigationStateModel = new MutableValueModel();
31
30
  _this._activeVisits = new MutableListModel();
32
31
  var _a = Dsl.disposeWith(_this), chain = _a.chain, valueOf = _a.valueOf, before = _a.before, when = _a.when, after = _a.after, observe = _a.observe, switchOn = _a.switchOn;
33
32
  _this.activeVisitIndex = chain(_this._activeVisits).indexBy('placeDefinition');
34
- _this.navigationSessionActive = chain(_this.navigationSessionModel).pluck('active');
35
- _this._navigationSessionContext = new NavigationState.Context(_this.router, _this.modalInteractionService, _this.angularLocation, (/**
33
+ _this.navigationInProgress = chain(_this.navigationStateModel).pluck('isTransitional');
34
+ _this._navigationSessionContext = new NavigationState.Context(_this, _this.interactionService, (/**
36
35
  * @param {?} session
37
36
  * @return {?}
38
37
  */
39
38
  function (session) {
40
39
  _this.processNavigationSuccess(session);
41
40
  }));
42
- _this._navigationSessionModel.value = new NavigationState.Idle(_this._navigationSessionContext);
41
+ _this._navigationStateModel.value = new NavigationState.Idle(_this._navigationSessionContext);
42
+ _this._navigationStateTypeModel = chain(_this._navigationStateModel).map((/**
43
+ * @param {?} state
44
+ * @return {?}
45
+ */
46
+ function (state) { return (/** @type {?} */ (state.constructor)); }));
43
47
  // TODO: make setup the callbacks in during module initiation to make this testable.
44
48
  _this.router.events.subscribe((/**
45
49
  * @param {?} event
@@ -53,53 +57,83 @@ var PlaceRouter = /** @class */ (function (_super) {
53
57
  // NavigationStart -> .... -> NavigationError --> navigation aborted, end session.
54
58
  // =======================
55
59
  if (event instanceof NavigationStart) {
56
- _this.runStateTransition((/**
57
- * @param {?} session
58
- * @return {?}
59
- */
60
- function (session) { return session.onStart(event); }));
60
+ if (event.navigationTrigger === 'popstate') {
61
+ _this.runStateTransition((/**
62
+ * @param {?} state
63
+ * @return {?}
64
+ */
65
+ function (state) { return state.onPopState(event); }));
66
+ }
67
+ else {
68
+ _this.runStateTransition((/**
69
+ * @param {?} state
70
+ * @return {?}
71
+ */
72
+ function (state) { return state.onRouterStarted(event); }));
73
+ }
61
74
  }
62
75
  if (event instanceof NavigationEnd) {
76
+ console.log(event);
63
77
  _this.runStateTransition((/**
64
- * @param {?} session
78
+ * @param {?} state
65
79
  * @return {?}
66
80
  */
67
- function (session) { return session.onEnd(event); }));
81
+ function (state) { return state.onRouterEnd(event); }));
68
82
  }
69
83
  if (event instanceof NavigationError) {
84
+ console.log(event);
70
85
  _this.runStateTransition((/**
71
- * @param {?} session
86
+ * @param {?} state
72
87
  * @return {?}
73
88
  */
74
- function (session) { return session.onError(event); }));
89
+ function (state) { return state.onRouterError(event); }));
75
90
  }
76
91
  if (event instanceof NavigationCancel) {
92
+ console.log(event);
77
93
  _this.runStateTransition((/**
78
- * @param {?} session
94
+ * @param {?} state
79
95
  * @return {?}
80
96
  */
81
- function (session) { return session.onCancel(event); }));
97
+ function (state) { return state.onRouterCancelled(event); }));
82
98
  }
83
99
  }));
84
100
  // Push dialog state to the url so we can capture the back button.
85
- _this.modalInteractionService.addActivityListener(new PlaceRouter.InteractionRouteMediator(_this.navigationSessionActive, _this.router));
101
+ when.listOf(_this.interactionService.activeInteractionContextIds).changes((/**
102
+ * @param {?} ids
103
+ * @param {?} previous
104
+ * @return {?}
105
+ */
106
+ function (ids, previous) {
107
+ _this.syncInteractionIdsWithRouter();
108
+ }), { unless: _this.navigationInProgress }); // TODO: I think the exclusive interaction prevents interactions starting while it's active so we might not need this.
109
+ // TODO: I think the exclusive interaction prevents interactions starting while it's active so we might not need this.
110
+ /** @type {?} */
111
+ var urlChanges = new MutableStream();
86
112
  // The angular router doesn't always fire router events when the back button is pushed while a navigation
87
113
  // session is in progress. Sometimes we only know about it from the url change.
114
+ // IMPORTANT ORDER DEPENDENCY
115
+ // This only works because we're notified of the change after the router has started reacting to it. This
116
+ // we can can use our navigationState to determine things.
88
117
  angularLocation.onUrlChange((/**
89
118
  * @param {?} url
90
119
  * @return {?}
91
120
  */
92
121
  function (url) {
93
- console.log("#### url changed ->", { url: url, navIsActive: _this.navigationSessionActive.value });
94
122
  /** @type {?} */
95
- var interactionContext = _this.navigationSessionActive.value && _this.navigationSession.interactionContext;
96
- if (interactionContext && interactionContext.isActive()) {
97
- Logger.get(_this).info("back button pressed during navigation session interaction");
98
- _this.runStateTransition((/**
99
- * @param {?} navigationSession
100
- * @return {?}
101
- */
102
- function (navigationSession) { return navigationSession.onBackClickedDuringNavigationInteraction(url); }));
123
+ var navigationState = _this._navigationStateModel.value;
124
+ console.log("URLChange -> " + url, { state: navigationState });
125
+ urlChanges.publish({ url: url, state: navigationState });
126
+ // The url has changed while we're in a transitional state
127
+ if (navigationState.isTransitional) {
128
+ /** @type {?} */
129
+ var navigationInteraction = _this.navigationState.interactionContext;
130
+ if (navigationInteraction && navigationInteraction.isActive()) {
131
+ _this.runStateTransition((/**
132
+ * @param {?} state
133
+ * @return {?}
134
+ */
135
+ function (state) { return state.onBackClickedDuringNavigationInteraction(url); }));
136
+ }
103
137
  }
104
138
  }));
105
139
  return _this;
@@ -118,7 +152,7 @@ var PlaceRouter = /** @class */ (function (_super) {
118
152
  var _this = this;
119
153
  // We need to update the visits before the session finishes. This allows the placeOutets to ignore visit
120
154
  // changes that occur while routerNavigationActive is true.
121
- assert.isTruthy(this.navigationSessionActive.value);
155
+ assert.isTruthy(this.navigationInProgress.value);
122
156
  /** @type {?} */
123
157
  var visits = session.getVisits();
124
158
  visits.forEach((/**
@@ -128,22 +162,22 @@ var PlaceRouter = /** @class */ (function (_super) {
128
162
  function (v) { return _this.placeHistory.add(v); }));
129
163
  this._activeVisits.value = visits;
130
164
  };
131
- Object.defineProperty(PlaceRouter.prototype, "navigationSession", {
165
+ Object.defineProperty(PlaceRouter.prototype, "navigationState", {
132
166
  get: /**
133
167
  * @return {?}
134
168
  */
135
169
  function () {
136
- return this._navigationSessionModel.value;
170
+ return this._navigationStateModel.value;
137
171
  },
138
172
  enumerable: true,
139
173
  configurable: true
140
174
  });
141
- Object.defineProperty(PlaceRouter.prototype, "navigationSessionModel", {
175
+ Object.defineProperty(PlaceRouter.prototype, "navigationStateModel", {
142
176
  get: /**
143
177
  * @return {?}
144
178
  */
145
179
  function () {
146
- return this._navigationSessionModel.readonly;
180
+ return this._navigationStateModel.readonly;
147
181
  },
148
182
  enumerable: true,
149
183
  configurable: true
@@ -234,9 +268,9 @@ var PlaceRouter = /** @class */ (function (_super) {
234
268
  */
235
269
  function (router) {
236
270
  /** @type {?} */
237
- var commands = _this.parseUrl(_this.router.routerState.snapshot).createRedirectCommandsFor(next);
238
- console.log('### Push Changes to route Redirect', { commands: commands });
239
- return router.navigate(commands);
271
+ var urlSnapshot = _this.parseUrl(_this.router.routerState.snapshot.url).updateVisitSegments(next);
272
+ console.log('### Push Changes to route Redirect', { commands: urlSnapshot.url });
273
+ return _this.navigateByUrl(urlSnapshot);
240
274
  }))];
241
275
  }
242
276
  return [2 /*return*/];
@@ -259,7 +293,7 @@ var PlaceRouter = /** @class */ (function (_super) {
259
293
  return tslib_1.__generator(this, function (_a) {
260
294
  switch (_a.label) {
261
295
  case 0:
262
- if (this.navigationSessionActive.value) {
296
+ if (this.navigationInProgress.value) {
263
297
  lang.illegalState('Navigation already in progress');
264
298
  }
265
299
  this.runStateTransition((/**
@@ -268,7 +302,7 @@ var PlaceRouter = /** @class */ (function (_super) {
268
302
  */
269
303
  function (current) {
270
304
  /** @type {?} */
271
- var session = new NavigationState.Active(_this._navigationSessionContext, false, _this.router.routerState.snapshot.url);
305
+ var session = _this.navigationState.onPlaceNavigationStart(visit, _this.getCurrentRouterUrl());
272
306
  session.storeVisit(visit);
273
307
  return session;
274
308
  }));
@@ -282,12 +316,12 @@ var PlaceRouter = /** @class */ (function (_super) {
282
316
  case 3:
283
317
  // Router has finished (since there was no router change required) so we
284
318
  // need to end the navigation session.
285
- if (this.navigationSession.active && !this.router.getCurrentNavigation()) {
319
+ if (this.navigationState.isTransitional && !this.router.getCurrentNavigation()) {
286
320
  this.runStateTransition((/**
287
321
  * @param {?} session
288
322
  * @return {?}
289
323
  */
290
- function (session) { return session.onEnd(new NavigationEnd(-1, '', '')); }));
324
+ function (session) { return session.onRouterEnd(new NavigationEnd(-1, '', '')); }));
291
325
  }
292
326
  return [7 /*endfinally*/];
293
327
  case 4: return [2 /*return*/];
@@ -295,22 +329,26 @@ var PlaceRouter = /** @class */ (function (_super) {
295
329
  });
296
330
  });
297
331
  };
332
+ // @Trace()
333
+ // @Trace()
298
334
  /**
299
335
  * @protected
300
336
  * @param {?} transition
301
337
  * @return {?}
302
338
  */
303
- PlaceRouter.prototype.runStateTransition = /**
339
+ PlaceRouter.prototype.runStateTransition =
340
+ // @Trace()
341
+ /**
304
342
  * @protected
305
343
  * @param {?} transition
306
344
  * @return {?}
307
345
  */
308
346
  function (transition) {
309
347
  /** @type {?} */
310
- var previous = this._navigationSessionModel.value;
348
+ var previous = this._navigationStateModel.value;
311
349
  /** @type {?} */
312
- var next = transition(this.navigationSession);
313
- this._navigationSessionModel.value = next;
350
+ var next = transition(this.navigationState);
351
+ this._navigationStateModel.value = next;
314
352
  if (next !== previous) {
315
353
  previous.dispose();
316
354
  Logger.get(this).info("Router State Transition: " + previous.toString() + " -> " + next.toString());
@@ -349,15 +387,114 @@ var PlaceRouter = /** @class */ (function (_super) {
349
387
  function (child) { return child.url; })));
350
388
  };
351
389
  /**
352
- * @param {?} snapshot
390
+ * @param {?} url
353
391
  * @return {?}
354
392
  */
355
393
  PlaceRouter.prototype.parseUrl = /**
356
- * @param {?} snapshot
394
+ * @param {?} url
395
+ * @return {?}
396
+ */
397
+ function (url) {
398
+ return new UrlSnapshot(this.urlSerializer, url, {});
399
+ };
400
+ /**
401
+ * @param {?} url
402
+ * @return {?}
403
+ */
404
+ PlaceRouter.prototype.resetBrowserLocation = /**
405
+ * @param {?} url
406
+ * @return {?}
407
+ */
408
+ function (url) {
409
+ this.angularLocation.go(url);
410
+ };
411
+ /**
412
+ * @return {?}
413
+ */
414
+ PlaceRouter.prototype.getCurrentRouterUrl = /**
415
+ * @return {?}
416
+ */
417
+ function () {
418
+ return this.router.routerState ? this.router.routerState.snapshot.url : null;
419
+ };
420
+ /**
421
+ * @return {?}
422
+ */
423
+ PlaceRouter.prototype.getCurrentRouteSnapshot = /**
424
+ * @return {?}
425
+ */
426
+ function () {
427
+ return this.parseUrl(this.getCurrentRouterUrl());
428
+ };
429
+ /**
430
+ * @param {?} url
431
+ * @return {?}
432
+ */
433
+ PlaceRouter.prototype.getActiveInteractionIdsFromUrl = /**
434
+ * @param {?} url
435
+ * @return {?}
436
+ */
437
+ function (url) {
438
+ return this.parseUrl(url).getInteractionIds();
439
+ };
440
+ // @Trace()
441
+ // @Trace()
442
+ /**
443
+ * @param {?} url
444
+ * @return {?}
445
+ */
446
+ PlaceRouter.prototype.hasActiveInteractionIds =
447
+ // @Trace()
448
+ /**
449
+ * @param {?} url
450
+ * @return {?}
451
+ */
452
+ function (url) {
453
+ return this.getActiveInteractionIdsFromUrl(url).length > 0;
454
+ };
455
+ // @Trace()
456
+ // @Trace()
457
+ /**
458
+ * @param {?} urlSnapshot
459
+ * @return {?}
460
+ */
461
+ PlaceRouter.prototype.navigateByUrl =
462
+ // @Trace()
463
+ /**
464
+ * @param {?} urlSnapshot
465
+ * @return {?}
466
+ */
467
+ function (urlSnapshot) {
468
+ this.router.navigateByUrl(urlSnapshot.urlTree, urlSnapshot.getNavigationExtras());
469
+ };
470
+ // @Trace()
471
+ // @Trace()
472
+ /**
357
473
  * @return {?}
358
474
  */
359
- function (snapshot) {
360
- return new UrlSnapshot(this.urlSerializer.parse(snapshot.url));
475
+ PlaceRouter.prototype.syncInteractionIdsWithRouter =
476
+ // @Trace()
477
+ /**
478
+ * @return {?}
479
+ */
480
+ function () {
481
+ assert.isFalsey(this.navigationInProgress.value); // Updating interaction routes during an existing navigation breaks all the things.
482
+ // Updating interaction routes during an existing navigation breaks all the things.
483
+ /** @type {?} */
484
+ var currentIds = this.interactionService.activeInteractionContextIds.value;
485
+ if (_.isEqual(currentIds, this.getActiveInteractionIdsFromUrl(this.getCurrentRouterUrl()))) {
486
+ console.log('activity ids were the same, skipping');
487
+ }
488
+ else {
489
+ if (currentIds.length < 1) {
490
+ // no more interactions to remove from history.
491
+ this.navigateByUrl(this.getCurrentRouteSnapshot().removeInteractionIds());
492
+ }
493
+ else {
494
+ // todo was or is...
495
+ this.navigateByUrl(this.getCurrentRouteSnapshot().updateInteractionIds(currentIds));
496
+ }
497
+ }
361
498
  };
362
499
  PlaceRouter.decorators = [
363
500
  { type: Injectable, args: [{
@@ -370,9 +507,9 @@ var PlaceRouter = /** @class */ (function (_super) {
370
507
  { type: UrlSerializer },
371
508
  { type: Location },
372
509
  { type: PlaceHistory },
373
- { type: ModalInteractionService }
510
+ { type: InteractionService }
374
511
  ]; };
375
- /** @nocollapse */ PlaceRouter.ngInjectableDef = i0.ɵɵdefineInjectable({ factory: function PlaceRouter_Factory() { return new PlaceRouter(i0.ɵɵinject(i1.Router), i0.ɵɵinject(i1.UrlSerializer), i0.ɵɵinject(i2.Location), i0.ɵɵinject(i3.PlaceHistory), i0.ɵɵinject(i4.ModalInteractionService)); }, token: PlaceRouter, providedIn: "root" });
512
+ /** @nocollapse */ PlaceRouter.ngInjectableDef = i0.ɵɵdefineInjectable({ factory: function PlaceRouter_Factory() { return new PlaceRouter(i0.ɵɵinject(i1.Router), i0.ɵɵinject(i1.UrlSerializer), i0.ɵɵinject(i2.Location), i0.ɵɵinject(i3.PlaceHistory), i0.ɵɵinject(i4.InteractionService)); }, token: PlaceRouter, providedIn: "root" });
376
513
  return PlaceRouter;
377
514
  }(GarbageCollector));
378
515
  export { PlaceRouter };
@@ -381,19 +518,14 @@ if (false) {
381
518
  * @type {?}
382
519
  * @private
383
520
  */
384
- PlaceRouter.prototype.firstRoute;
385
- /**
386
- * @type {?}
387
- * @private
388
- */
389
- PlaceRouter.prototype._navigationSessionModel;
521
+ PlaceRouter.prototype._navigationStateModel;
390
522
  /**
391
523
  * @type {?}
392
524
  * @private
393
525
  */
394
526
  PlaceRouter.prototype._activeVisits;
395
527
  /** @type {?} */
396
- PlaceRouter.prototype.navigationSessionActive;
528
+ PlaceRouter.prototype.navigationInProgress;
397
529
  /** @type {?} */
398
530
  PlaceRouter.prototype.activeVisitIndex;
399
531
  /**
@@ -401,6 +533,11 @@ if (false) {
401
533
  * @private
402
534
  */
403
535
  PlaceRouter.prototype._navigationSessionContext;
536
+ /**
537
+ * @type {?}
538
+ * @private
539
+ */
540
+ PlaceRouter.prototype._navigationStateTypeModel;
404
541
  /**
405
542
  * @type {?}
406
543
  * @private
@@ -425,81 +562,6 @@ if (false) {
425
562
  * @type {?}
426
563
  * @private
427
564
  */
428
- PlaceRouter.prototype.modalInteractionService;
565
+ PlaceRouter.prototype.interactionService;
429
566
  }
430
- (function (PlaceRouter) {
431
- PlaceRouter.INTERACTION_ROUTER_OUTLET = 'aup-interaction';
432
- var InteractionRouteMediator = /** @class */ (function () {
433
- function InteractionRouteMediator(navigationSessionModelActive, router) {
434
- this.navigationSessionModelActive = navigationSessionModelActive;
435
- this.router = router;
436
- }
437
- Object.defineProperty(InteractionRouteMediator.prototype, "isNavigating", {
438
- get: /**
439
- * @return {?}
440
- */
441
- function () {
442
- return this.navigationSessionModelActive.value;
443
- },
444
- enumerable: true,
445
- configurable: true
446
- });
447
- // If we're not in a navigation we push
448
- // @Trace()
449
- // If we're not in a navigation we push
450
- // @Trace()
451
- /**
452
- * @return {?}
453
- */
454
- InteractionRouteMediator.prototype.onActivityStarted =
455
- // If we're not in a navigation we push
456
- // @Trace()
457
- /**
458
- * @return {?}
459
- */
460
- function () {
461
- var _a;
462
- if (!this.isNavigating) {
463
- this.router.navigate(['.', {
464
- outlets: (_a = {},
465
- _a[PlaceRouter.INTERACTION_ROUTER_OUTLET] = ['modal'] // "open" must be a valid route for this outlet.
466
- ,
467
- _a)
468
- }], {
469
- replaceUrl: false
470
- });
471
- }
472
- };
473
- // @Trace()
474
- // @Trace()
475
- /**
476
- * @return {?}
477
- */
478
- InteractionRouteMediator.prototype.onActivityFinished =
479
- // @Trace()
480
- /**
481
- * @return {?}
482
- */
483
- function () {
484
- var _a;
485
- if (!this.isNavigating) {
486
- this.router.navigate(['.', {
487
- outlets: (_a = {},
488
- _a[PlaceRouter.INTERACTION_ROUTER_OUTLET] = null,
489
- _a)
490
- }], {
491
- replaceUrl: true // remove the interaction from the history.
492
- });
493
- }
494
- };
495
- return InteractionRouteMediator;
496
- }());
497
- PlaceRouter.InteractionRouteMediator = InteractionRouteMediator;
498
- if (false) {
499
- /** @type {?} */
500
- InteractionRouteMediator.prototype.navigationSessionModelActive;
501
- /** @type {?} */
502
- InteractionRouteMediator.prototype.router;
503
- }
504
- })(PlaceRouter || (PlaceRouter = {}));
505
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGxhY2Utcm91dGVyLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGNvb2xvbi9hbmd1bGFyLXVpLXBvd2VydXBzLyIsInNvdXJjZXMiOlsibGliL3BsYWNlL3BsYWNlLXJvdXRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzQyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFHTCxnQkFBZ0IsRUFDaEIsYUFBYSxFQUNiLGVBQWUsRUFDZixlQUFlLEVBQ2YsTUFBTSxFQUVOLGFBQWEsRUFDZCxNQUFNLGlCQUFpQixDQUFDO0FBQ3pCLE9BQU8sRUFDTCxNQUFNLEVBQ04sR0FBRyxFQUNILGdCQUFnQixFQUVoQixJQUFJLEVBRUosTUFBTSxFQUNOLGdCQUFnQixFQUNoQixpQkFBaUIsRUFFbEIsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLENBQUMsTUFBTSxRQUFRLENBQUM7QUFFdkIsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sbURBQW1ELENBQUM7QUFDNUYsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzVELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7OztBQUk3QztJQUdpQyx1Q0FBZ0I7SUFXL0MscUJBQTZCLE1BQWMsRUFDZCxhQUE0QixFQUM1QixlQUF5QixFQUN6QixZQUEwQixFQUMxQix1QkFBZ0Q7UUFKN0UsWUFLRSxpQkFBTyxTQTRDUjtRQWpENEIsWUFBTSxHQUFOLE1BQU0sQ0FBUTtRQUNkLG1CQUFhLEdBQWIsYUFBYSxDQUFlO1FBQzVCLHFCQUFlLEdBQWYsZUFBZSxDQUFVO1FBQ3pCLGtCQUFZLEdBQVosWUFBWSxDQUFjO1FBQzFCLDZCQUF1QixHQUF2Qix1QkFBdUIsQ0FB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Q0FBQyx5QkFBeUIsSUFBRyxJQUFJOytCQUM5QztxQkFDRixDQUFDLEVBQUU7b0JBQ0YsVUFBVSxFQUFFLElBQUksQ0FBQywyQ0FBMkM7aUJBQzdELENBQUMsQ0FBQzthQUNKO1FBQ0gsQ0FBQztRQUVILCtCQUFDO0lBQUQsQ0FBQyxBQW5DRCxJQW1DQztJQW5DWSxvQ0FBd0IsMkJBbUNwQyxDQUFBOzs7UUFsQ2EsZ0VBQTBEOztRQUFFLDBDQUF1Qjs7QUFvQ25HLENBQUMsRUF6Q2dCLFdBQVcsS0FBWCxXQUFXLFFBeUMzQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IExvY2F0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIEFjdGl2YXRlZFJvdXRlLFxuICBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90LFxuICBOYXZpZ2F0aW9uQ2FuY2VsLFxuICBOYXZpZ2F0aW9uRW5kLFxuICBOYXZpZ2F0aW9uRXJyb3IsXG4gIE5hdmlnYXRpb25TdGFydCxcbiAgUm91dGVyLFxuICBSb3V0ZXJTdGF0ZVNuYXBzaG90LFxuICBVcmxTZXJpYWxpemVyXG59IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQge1xuICBhc3NlcnQsXG4gIERzbCxcbiAgR2FyYmFnZUNvbGxlY3RvcixcbiAgSGFzT25lSW5kZXhDaGFpbixcbiAgbGFuZyxcbiAgTGlzdE1vZGVsLFxuICBMb2dnZXIsXG4gIE11dGFibGVMaXN0TW9kZWwsXG4gIE11dGFibGVWYWx1ZU1vZGVsLFxuICBWYWx1ZU1vZGVsXG59IGZyb20gJ0Bjb29sb24vcGVjdGluJztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBJbnRlcmFjdGlvbkNvbnRleHQgfSBmcm9tICcuLi9pbnRlcmFjdGlvbi9pbnRlcmFjdGlvbi1jb250ZXh0JztcbmltcG9ydCB7IE1vZGFsSW50ZXJhY3Rpb25TZXJ2aWNlIH0gZnJvbSAnLi4vaW50ZXJhY3Rpb24vc2VydmljZXMvbW9kYWwtaW50ZXJhY3Rpb24uc2VydmljZSc7XG5pbXBvcnQgeyBOYXZpZ2F0aW9uU3RhdGUgfSBmcm9tICcuL2d1YXJkcy9uYXZpZ2F0aW9uLXN0YXRlJztcbmltcG9ydCB7IFBsYWNlSGlzdG9yeSB9IGZyb20gJy4vcGxhY2UtaGlzdG9yeSc7XG5pbXBvcnQgeyBVcmxTbmFwc2hvdCB9IGZyb20gJy4vdXJsLXNuYXBzaG90JztcbmltcG9ydCB7IFZpc2l0IH0gZnJvbSAnLi92aXNpdCc7XG5cblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgUGxhY2VSb3V0ZXIgZXh0ZW5kcyBHYXJiYWdlQ29sbGVjdG9yIHtcblxuICBwcml2YXRlIGZpcnN0Um91dGUgPSB0cnVlO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX25hdmlnYXRpb25TZXNzaW9uTW9kZWwgPSBuZXcgTXV0YWJsZVZhbHVlTW9kZWw8TmF2aWdhdGlvblN0YXRlPigpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9hY3RpdmVWaXNpdHMgPSBuZXcgTXV0YWJsZUxpc3RNb2RlbDxWaXNpdD4oKTtcblxuICByZWFkb25seSBuYXZpZ2F0aW9uU2Vzc2lvbkFjdGl2ZTogVmFsdWVNb2RlbDxib29sZWFuPjtcbiAgcmVhZG9ubHkgYWN0aXZlVmlzaXRJbmRleDogSGFzT25lSW5kZXhDaGFpbjwncGxhY2VEZWZpbml0aW9uJywgVmlzaXQ+O1xuICBwcml2YXRlIF9uYXZpZ2F0aW9uU2Vzc2lvbkNvbnRleHQ6IE5hdmlnYXRpb25TdGF0ZS5Db250ZXh0O1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgcm91dGVyOiBSb3V0ZXIsXG4gICAgICAgICAgICAgIHByaXZhdGUgcmVhZG9ubHkgdXJsU2VyaWFsaXplcjogVXJsU2VyaWFsaXplcixcbiAgICAgICAgICAgICAgcHJpdmF0ZSByZWFkb25seSBhbmd1bGFyTG9jYXRpb246IExvY2F0aW9uLFxuICAgICAgICAgICAgICBwcml2YXRlIHJlYWRvbmx5IHBsYWNlSGlzdG9yeTogUGxhY2VIaXN0b3J5LFxuICAgICAgICAgICAgICBwcml2YXRlIHJlYWRvbmx5IG1vZGFsSW50ZXJhY3Rpb25TZXJ2aWNlOiBNb2RhbEludGVyYWN0aW9uU2VydmljZSkge1xuICAgIHN1cGVyKCk7XG4gICAgY29uc3QgeyBjaGFpbiwgdmFsdWVPZiwgYmVmb3JlLCB3aGVuLCBhZnRlciwgb2JzZXJ2ZSwgc3dpdGNoT24gfSA9IERzbC5kaXNwb3NlV2l0aCh0aGlzKTtcbiAgICB0aGlzLmFjdGl2ZVZpc2l0SW5kZXggPSBjaGFpbih0aGlzLl9hY3RpdmVWaXNpdHMpLmluZGV4QnkoJ3BsYWNlRGVmaW5pdGlvbicpO1xuICAgIHRoaXMubmF2aWdhdGlvblNlc3Npb25BY3RpdmUgPSBjaGFpbih0aGlzLm5hdmlnYXRpb25TZXNzaW9uTW9kZWwpLnBsdWNrKCdhY3RpdmUnKTtcbiAgICB0aGlzLl9uYXZpZ2F0aW9uU2Vzc2lvbkNvbnRleHQgPSBuZXcgTmF2aWdhdGlvblN0YXRlLkNvbnRleHQodGhpcy5yb3V0ZXIsIHRoaXMubW9kYWxJbnRlcmFjdGlvblNlcnZpY2UsIHRoaXMuYW5ndWxhckxvY2F0aW9uLCBzZXNzaW9uID0+IHtcbiAgICAgIHRoaXMucHJvY2Vzc05hdmlnYXRpb25TdWNjZXNzKHNlc3Npb24pO1xuICAgIH0pO1xuICAgIHRoaXMuX25hdmlnYXRpb25TZXNzaW9uTW9kZWwudmFsdWUgPSBuZXcgTmF2aWdhdGlvblN0YXRlLklkbGUodGhpcy5fbmF2aWdhdGlvblNlc3Npb25Db250ZXh0KTtcblxuICAgIC8vIFRPRE86IG1ha2Ugc2V0dXAgdGhlIGNhbGxiYWNrcyBpbiBkdXJpbmcgbW9kdWxlIGluaXRpYXRpb24gdG8gbWFrZSB0aGlzIHRlc3RhYmxlLlxuICAgIHRoaXMucm91dGVyLmV2ZW50cy5zdWJzY3JpYmUoZXZlbnQgPT4ge1xuICAgICAgLy8gUm91dGluZyBldmVudCBzZXF1ZW5jZVxuICAgICAgLy8gPT09PT09PT09PT09PT09PT09PT09PVxuICAgICAgLy8gTmF2aWdhdGlvblN0YXJ0IC0+IC4uLi4gLT4gTmF2aWdhdGlvbkNhbmNlbCAtLT4gcmVkaXJlY3QsIGdvIGFyb3VuZCBhZ2FpbiBpbiB0aGUgc2FtZSBzZXNzaW9uXG4gICAgICAvLyBOYXZpZ2F0aW9uU3RhcnQgLT4gLi4uLiAtPiBOYXZpZ2F0aW9uRW5kIC0tPiBuYXZpZ2F0aW9uIGNvbXBsZXRlLCBlbmQgc2Vzc2lvbi5cbiAgICAgIC8vIE5hdmlnYXRpb25TdGFydCAtPiAuLi4uIC0+IE5hdmlnYXRpb25FcnJvciAtLT4gbmF2aWdhdGlvbiBhYm9ydGVkLCBlbmQgc2Vzc2lvbi5cbiAgICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09XG4gICAgICBpZiAoZXZlbnQgaW5zdGFuY2VvZiBOYXZpZ2F0aW9uU3RhcnQpIHtcbiAgICAgICAgdGhpcy5ydW5TdGF0ZVRyYW5zaXRpb24oc2Vzc2lvbiA9PiBzZXNzaW9uLm9uU3RhcnQoZXZlbnQpKTtcbiAgICAgIH1cbiAgICAgIGlmIChldmVudCBpbnN0YW5jZW9mIE5hdmlnYXRpb25FbmQpIHtcbiAgICAgICAgdGhpcy5ydW5TdGF0ZVRyYW5zaXRpb24oc2Vzc2lvbiA9PiBzZXNzaW9uLm9uRW5kKGV2ZW50KSk7XG4gICAgICB9XG4gICAgICBpZiAoZXZlbnQgaW5zdGFuY2VvZiBOYXZpZ2F0aW9uRXJyb3IpIHtcbiAgICAgICAgdGhpcy5ydW5TdGF0ZVRyYW5zaXRpb24oc2Vzc2lvbiA9PiBzZXNzaW9uLm9uRXJyb3IoZXZlbnQpKTtcbiAgICAgIH1cbiAgICAgIGlmIChldmVudCBpbnN0YW5jZW9mIE5hdmlnYXRpb25DYW5jZWwpIHtcbiAgICAgICAgdGhpcy5ydW5TdGF0ZVRyYW5zaXRpb24oc2Vzc2lvbiA9PiBzZXNzaW9uLm9uQ2FuY2VsKGV2ZW50KSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyBQdXNoIGRpYWxvZyBzdGF0ZSB0byB0aGUgdXJsIHNvIHdlIGNhbiBjYXB0dXJlIHRoZSBiYWNrIGJ1dHRvbi5cbiAgICB0aGlzLm1vZGFsSW50ZXJhY3Rpb25TZXJ2aWNlLmFkZEFjdGl2aXR5TGlzdGVuZXIobmV3IFBsYWNlUm91dGVyLkludGVyYWN0aW9uUm91dGVNZWRpYXRvcih0aGlzLm5hdmlnYXRpb25TZXNzaW9uQWN0aXZlLCB0aGlzLnJvdXRlcikpO1xuXG4gICAgLy8gVGhlIGFuZ3VsYXIgcm91dGVyIGRvZXNuJ3QgYWx3YXlzIGZpcmUgcm91dGVyIGV2ZW50cyB3aGVuIHRoZSBiYWNrIGJ1dHRvbiBpcyBwdXNoZWQgd2hpbGUgYSBuYXZpZ2F0aW9uXG4gICAgLy8gc2Vzc2lvbiBpcyBpbiBwcm9ncmVzcy4gIFNvbWV0aW1lcyB3ZSBvbmx5IGtub3cgYWJvdXQgaXQgZnJvbSB0aGUgdXJsIGNoYW5nZS5cbiAgICBhbmd1bGFyTG9jYXRpb24ub25VcmxDaGFuZ2UodXJsID0+IHtcbiAgICAgIGNvbnNvbGUubG9nKGAjIyMjIHVybCBjaGFuZ2VkIC0+YCwgeyB1cmwsIG5hdklzQWN0aXZlOiB0aGlzLm5hdmlnYXRpb25TZXNzaW9uQWN0aXZlLnZhbHVlIH0pO1xuICAgICAgY29uc3QgaW50ZXJhY3Rpb25Db250ZXh0ID0gdGhpcy5uYXZpZ2F0aW9uU2Vzc2lvbkFjdGl2ZS52YWx1ZSAmJiB0aGlzLm5hdmlnYXRpb25TZXNzaW9uLmludGVyYWN0aW9uQ29udGV4dDtcbiAgICAgIGlmIChpbnRlcmFjdGlvbkNvbnRleHQgJiYgaW50ZXJhY3Rpb25Db250ZXh0LmlzQWN0aXZlKCkpIHtcbiAgICAgICAgTG9nZ2VyLmdldCh0aGlzKS5pbmZvKGBiYWNrIGJ1dHRvbiBwcmVzc2VkIGR1cmluZyBuYXZpZ2F0aW9uIHNlc3Npb24gaW50ZXJhY3Rpb25gKTtcbiAgICAgICAgdGhpcy5ydW5TdGF0ZVRyYW5zaXRpb24obmF2aWdhdGlvblNlc3Npb24gPT4gbmF2aWdhdGlvblNlc3Npb24ub25CYWNrQ2xpY2tlZER1cmluZ05hdmlnYXRpb25JbnRlcmFjdGlvbih1cmwpKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgcHJvY2Vzc05hdmlnYXRpb25TdWNjZXNzKHNlc3Npb246IE5hdmlnYXRpb25TdGF0ZSkge1xuICAgIC8vIFdlIG5lZWQgdG8gdXBkYXRlIHRoZSB2aXNpdHMgYmVmb3JlIHRoZSBzZXNzaW9uIGZpbmlzaGVzLiAgVGhpcyBhbGxvd3MgdGhlIHBsYWNlT3V0ZXRzIHRvIGlnbm9yZSB2aXNpdFxuICAgIC8vIGNoYW5nZXMgdGhhdCBvY2N1ciB3aGlsZSByb3V0ZXJOYXZpZ2F0aW9uQWN0aXZlIGlzIHRydWUuXG4gICAgYXNzZXJ0LmlzVHJ1dGh5KHRoaXMubmF2aWdhdGlvblNlc3Npb25BY3RpdmUudmFsdWUpO1xuICAgIGNvbnN0IHZpc2l0cyA9IHNlc3Npb24uZ2V0VmlzaXRzKCk7XG4gICAgdmlzaXRzLmZvckVhY2godiA9PiB0aGlzLnBsYWNlSGlzdG9yeS5hZGQodikpO1xuICAgIHRoaXMuX2FjdGl2ZVZpc2l0cy52YWx1ZSA9IHZpc2l0cztcbiAgfVxuXG4gIGdldCBuYXZpZ2F0aW9uU2Vzc2lvbigpOiBOYXZpZ2F0aW9uU3RhdGUge1xuICAgIHJldHVybiB0aGlzLl9uYXZpZ2F0aW9uU2Vzc2lvbk1vZGVsLnZhbHVlO1xuICB9XG5cbiAgZ2V0IG5hdmlnYXRpb25TZXNzaW9uTW9kZWwoKTogVmFsdWVNb2RlbDxOYXZpZ2F0aW9uU3RhdGU+IHtcbiAgICByZXR1cm4gdGhpcy5fbmF2aWdhdGlvblNlc3Npb25Nb2RlbC5yZWFkb25seTtcbiAgfVxuXG4gIGdldCBhY3RpdmVWaXNpdHMoKTogTGlzdE1vZGVsPFZpc2l0PiB7XG4gICAgcmV0dXJuIHRoaXMuX2FjdGl2ZVZpc2l0cy5yZWFkb25seTtcbiAgfVxuXG4gIC8qKlxuICAgKiAgcGxhY2VSb3V0ZXIubmF2aWdhdGUocGxhY2VEZXN0aW5hdGlvbnMuc29tZVBsYWNlLmNyZWF0ZVZpc2l0KHJvdXRlSWQsIC4uLnZpc2l0UGFyYW1zKSk7XG4gICAqIEBwYXJhbSB2aXNpdFxuICAgKi9cbiAgYXN5bmMgbmF2aWdhdGUodmlzaXQ6IFZpc2l0LCBvcHRpb25zPzogeyByZWxhdGl2ZVRvOiBBY3RpdmF0ZWRSb3V0ZSB9KSB7XG4gICAgdGhpcy5kb05hdmlnYXRpb24odmlzaXQsIGFzeW5jIHJvdXRlciA9PiB7XG4gICAgICBjb25zdCBjb21tYW5kcyA9IFtcbiAgICAgICAgdmlzaXQucGxhY2VEZWZpbml0aW9uLnBhdGgsXG4gICAgICAgIC4uLnRoaXMuY3JlYXRlUm91dGVQYXJhbWV0ZXJzKHZpc2l0KVxuICAgICAgXTtcbiAgICAgIGF3YWl0IHRoaXMucm91dGVyLm5hdmlnYXRlKGNvbW1hbmRzLCB7XG4gICAgICAgIHJlbGF0aXZlVG86IG9wdGlvbnMgPyBvcHRpb25zLnJlbGF0aXZlVG8gOiBudWxsXG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIC8vIEBUcmFjZSgpXG4gIGFzeW5jIHB1c2hWaXNpdENoYW5nZXNUb1JvdXRlKGFjdGl2YXRlZFJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSwgcHJldmlvdXM6IFZpc2l0LCBuZXh0OiBWaXNpdCkge1xuICAgIC8vIHdlIGhhdmUgdG8gcHVzaCB0byBoaXN0b3J5IHNvIG91ciByZW1lbWJlciBzYW5pdGlzZXJzIGRvbid0IHBpY2sgdXAgdGhlIHByZXZpb3VzIHZhbHVlXG4gICAgLy8gd2hlbiBpdCdzIGJlZW4gY2xlYXJlZCBieSB0aGUgdXNlci5cbiAgICB0aGlzLnBsYWNlSGlzdG9yeS5hZGQobmV4dCk7XG5cbiAgICAvLyBGSVhNRTogbm8gcm91dGUgaWQgLT4gcm91dGUgaWQgZHVwbGljYXRlcyByb3V0ZSBwYXJhbWV0ZXJzXG4gICAgaWYgKG5leHQuaGFzUm91dGluZ0NoYW5nZWRGcm9tKHByZXZpb3VzKSkge1xuICAgICAgcmV0dXJuIHRoaXMuZG9OYXZpZ2F0aW9uKG5leHQsIHJvdXRlciA9PiB7XG4gICAgICAgIGNvbnN0IGNvbW1hbmRzID0gdGhpcy5wYXJzZVVybCh0aGlzLnJvdXRlci5yb3V0ZXJTdGF0ZS5zbmFwc2hvdCkuY3JlYXRlUmVkaXJlY3RDb21tYW5kc0ZvcihuZXh0KTtcbiAgICAgICAgY29uc29sZS5sb2coJyMjIyBQdXNoIENoYW5nZXMgdG8gcm91dGUgUmVkaXJlY3QnLCB7IGNvbW1hbmRzIH0pO1xuICAgICAgICByZXR1cm4gcm91dGVyLm5hdmlnYXRlKGNvbW1hbmRzKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGRvTmF2aWdhdGlvbih2aXNpdDogVmlzaXQsIHJ1bk5hdmlnYXRpb25Db21tYW5kczogKHJvdXRlcjogUm91dGVyKSA9PiBhbnkpIHtcbiAgICBpZiAodGhpcy5uYXZpZ2F0aW9uU2Vzc2lvbkFjdGl2ZS52YWx1ZSkge1xuICAgICAgbGFuZy5pbGxlZ2FsU3RhdGUoJ05hdmlnYXRpb24gYWxyZWFkeSBpbiBwcm9ncmVzcycpO1xuICAgIH1cblxuICAgIHRoaXMucnVuU3RhdGVUcmFuc2l0aW9uKGN1cnJlbnQgPT4ge1xuICAgICAgY29uc3Qgc2Vzc2lvbiA9IG5ldyBOYXZpZ2F0aW9uU3RhdGUuQWN0aXZlKHRoaXMuX25hdmlnYXRpb25TZXNzaW9uQ29udGV4dCwgZmFsc2UsIHRoaXMucm91dGVyLnJvdXRlclN0YXRlLnNuYXBzaG90LnVybCk7XG4gICAgICBzZXNzaW9uLnN0b3JlVmlzaXQodmlzaXQpO1xuICAgICAgcmV0dXJuIHNlc3Npb247XG4gICAgfSk7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHJ1bk5hdmlnYXRpb25Db21tYW5kcyh0aGlzLnJvdXRlcik7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIC8vIFJvdXRlciBoYXMgZmluaXNoZWQgKHNpbmNlIHRoZXJlIHdhcyBubyByb3V0ZXIgY2hhbmdlIHJlcXVpcmVkKSBzbyB3ZVxuICAgICAgLy8gbmVlZCB0byBlbmQgdGhlIG5hdmlnYXRpb24gc2Vzc2lvbi5cbiAgICAgIGlmICh0aGlzLm5hdmlnYXRpb25TZXNzaW9uLmFjdGl2ZSAmJiAhdGhpcy5yb3V0ZXIuZ2V0Q3VycmVudE5hdmlnYXRpb24oKSkge1xuICAgICAgICB0aGlzLnJ1blN0YXRlVHJhbnNpdGlvbihzZXNzaW9uID0+IHNlc3Npb24ub25FbmQobmV3IE5hdmlnYXRpb25FbmQoLTEsICcnLCAnJykpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgcnVuU3RhdGVUcmFuc2l0aW9uKHRyYW5zaXRpb246IChuYXZpZ2F0aW9uU2Vzc2lvbjogTmF2aWdhdGlvblN0YXRlKSA9PiBOYXZpZ2F0aW9uU3RhdGUpIHtcbiAgICBjb25zdCBwcmV2aW91cyA9IHRoaXMuX25hdmlnYXRpb25TZXNzaW9uTW9kZWwudmFsdWU7XG4gICAgY29uc3QgbmV4dCA9IHRyYW5zaXRpb24odGhpcy5uYXZpZ2F0aW9uU2Vzc2lvbik7XG4gICAgdGhpcy5fbmF2aWdhdGlvblNlc3Npb25Nb2RlbC52YWx1ZSA9IG5leHQ7XG4gICAgaWYgKG5leHQgIT09IHByZXZpb3VzKSB7XG4gICAgICBwcmV2aW91cy5kaXNwb3NlKCk7XG4gICAgICBMb2dnZXIuZ2V0KHRoaXMpLmluZm8oYFJvdXRlciBTdGF0ZSBUcmFuc2l0aW9uOiAke3ByZXZpb3VzLnRvU3RyaW5nKCl9IC0+ICR7bmV4dC50b1N0cmluZygpfWApO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlUm91dGVQYXJhbWV0ZXJzKHZpc2l0OiBWaXNpdCkge1xuICAgIGNvbnN0IGRlZiA9IHZpc2l0LnBsYWNlRGVmaW5pdGlvbjtcbiAgICByZXR1cm4gdmlzaXQuaGFzUm91dGVJZCgpID9cbiAgICAgIFtkZWYuZ2V0Rm9ybWF0dGVkUm91dGVJZCh2aXNpdCksIGRlZi5nZXRGb3JtYXR0ZWRSb3V0ZVBhcmFtZXRlcnModmlzaXQpXSA6XG4gICAgICBbZGVmLmdldEZvcm1hdHRlZFJvdXRlUGFyYW1ldGVycyh2aXNpdCldO1xuICB9XG5cbiAgZXh0cmFjdENoaWxkUGF0aChhY3RpdmF0ZWRSb3V0ZTogQWN0aXZhdGVkUm91dGVTbmFwc2hvdCk6IGFueVtdIHtcbiAgICByZXR1cm4gXy5mbGF0dGVuKGFjdGl2YXRlZFJvdXRlLmNoaWxkcmVuLm1hcChjaGlsZCA9PiBjaGlsZC51cmwpKTtcbiAgfVxuXG4gIHBhcnNlVXJsKHNuYXBzaG90OiBSb3V0ZXJTdGF0ZVNuYXBzaG90KTogVXJsU25hcHNob3Qge1xuICAgIHJldHVybiBuZXcgVXJsU25hcHNob3QodGhpcy51cmxTZXJpYWxpemVyLnBhcnNlKHNuYXBzaG90LnVybCkpO1xuICB9XG5cbn1cblxuZXhwb3J0IG5hbWVzcGFjZSBQbGFjZVJvdXRlciB7XG5cbiAgZXhwb3J0IGNvbnN0IElOVEVSQUNUSU9OX1JPVVRFUl9PVVRMRVQgPSAnYXVwLWludGVyYWN0aW9uJztcblxuICBleHBvcnQgY2xhc3MgSW50ZXJhY3Rpb25Sb3V0ZU1lZGlhdG9yIGltcGxlbWVudHMgSW50ZXJhY3Rpb25Db250ZXh0Lkxpc3RlbmVyIHtcbiAgICBjb25zdHJ1Y3RvcihyZWFkb25seSBuYXZpZ2F0aW9uU2Vzc2lvbk1vZGVsQWN0aXZlOiBWYWx1ZU1vZGVsPGJvb2xlYW4+LCByZWFkb25seSByb3V0ZXI6IFJvdXRlcikge1xuICAgIH1cblxuICAgIGdldCBpc05hdmlnYXRpbmcoKSB7XG4gICAgICByZXR1cm4gdGhpcy5uYXZpZ2F0aW9uU2Vzc2lvbk1vZGVsQWN0aXZlLnZhbHVlO1xuICAgIH1cblxuICAgIC8vIElmIHdlJ3JlIG5vdCBpbiBhIG5hdmlnYXRpb24gd2UgcHVzaFxuICAgIC8vIEBUcmFjZSgpXG4gICAgb25BY3Rpdml0eVN0YXJ0ZWQoKTogdm9pZCB7XG4gICAgICBpZiAoIXRoaXMuaXNOYXZpZ2F0aW5nKSB7XG4gICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnLicsIHtcbiAgICAgICAgICBvdXRsZXRzOiB7XG4gICAgICAgICAgICBbUGxhY2VSb3V0ZXIuSU5URVJBQ1RJT05fUk9VVEVSX09VVExFVF06IFsnbW9kYWwnXSAvLyBcIm9wZW5cIiBtdXN0IGJlIGEgdmFsaWQgcm91dGUgZm9yIHRoaXMgb3V0bGV0LlxuICAgICAgICAgIH1cbiAgICAgICAgfV0sIHtcbiAgICAgICAgICByZXBsYWNlVXJsOiBmYWxzZVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBAVHJhY2UoKVxuICAgIG9uQWN0aXZpdHlGaW5pc2hlZCgpOiB2b2lkIHtcbiAgICAgIGlmICghdGhpcy5pc05hdmlnYXRpbmcpIHtcbiAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycuJywge1xuICAgICAgICAgIG91dGxldHM6IHtcbiAgICAgICAgICAgIFtQbGFjZVJvdXRlci5JTlRFUkFDVElPTl9ST1VURVJfT1VUTEVUXTogbnVsbFxuICAgICAgICAgIH1cbiAgICAgICAgfV0sIHtcbiAgICAgICAgICByZXBsYWNlVXJsOiB0cnVlIC8vIHJlbW92ZSB0aGUgaW50ZXJhY3Rpb24gZnJvbSB0aGUgaGlzdG9yeS5cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gIH1cblxufVxuIl19
567
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGxhY2Utcm91dGVyLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGNvb2xvbi9hbmd1bGFyLXVpLXBvd2VydXBzLyIsInNvdXJjZXMiOlsibGliL3BsYWNlL3BsYWNlLXJvdXRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzQyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFHTCxnQkFBZ0IsRUFDaEIsYUFBYSxFQUNiLGVBQWUsRUFFZixlQUFlLEVBQ2YsTUFBTSxFQUNOLGFBQWEsRUFDZCxNQUFNLGlCQUFpQixDQUFDO0FBQ3pCLE9BQU8sRUFDTCxNQUFNLEVBRU4sR0FBRyxFQUNILGdCQUFnQixFQUVoQixJQUFJLEVBRUosTUFBTSxFQUNOLGdCQUFnQixFQUNoQixhQUFhLEVBQ2IsaUJBQWlCLEVBSWxCLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxDQUFDLE1BQU0sUUFBUSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDZDQUE2QyxDQUFDO0FBQ2pGLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7Ozs7QUFJN0M7SUFHaUMsdUNBQWdCO0lBVS9DLHFCQUE2QixNQUFjLEVBQ2QsYUFBNEIsRUFDNUIsZUFBeUIsRUFDekIsWUFBMEIsRUFDMUIsa0JBQXNDO1FBSm5FLFlBS0UsaUJBQU8sU0FnRVI7UUFyRTRCLFlBQU0sR0FBTixNQUFNLENBQVE7UUFDZCxtQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUM1QixxQkFBZSxHQUFmLGVBQWUsQ0FBVTtRQUN6QixrQkFBWSxHQUFaLFlBQVksQ0FBYztRQUMxQix3QkFBa0IsR0FBbEIs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Q25COzs7O2dCQTdCQyxNQUFNO2dCQUNOLGFBQWE7Z0JBWE4sUUFBUTtnQkFnQ1IsWUFBWTtnQkFGWixrQkFBa0I7OztzQkE5QjNCO0NBdVFDLEFBbE9ELENBR2lDLGdCQUFnQixHQStOaEQ7U0EvTlksV0FBVzs7Ozs7O0lBRXRCLDRDQUFrRjs7Ozs7SUFDbEYsb0NBQStEOztJQUUvRCwyQ0FBbUQ7O0lBQ25ELHVDQUFzRTs7Ozs7SUFDdEUsZ0RBQTJEOzs7OztJQUMzRCxnREFBbUY7Ozs7O0lBRXZFLDZCQUErQjs7Ozs7SUFDL0Isb0NBQTZDOzs7OztJQUM3QyxzQ0FBMEM7Ozs7O0lBQzFDLG1DQUEyQzs7Ozs7SUFDM0MseUNBQXVEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTG9jYXRpb24gfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgQWN0aXZhdGVkUm91dGUsXG4gIEFjdGl2YXRlZFJvdXRlU25hcHNob3QsXG4gIE5hdmlnYXRpb25DYW5jZWwsXG4gIE5hdmlnYXRpb25FbmQsXG4gIE5hdmlnYXRpb25FcnJvcixcbiAgTmF2aWdhdGlvbkV4dHJhcyxcbiAgTmF2aWdhdGlvblN0YXJ0LFxuICBSb3V0ZXIsXG4gIFVybFNlcmlhbGl6ZXJcbn0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7XG4gIGFzc2VydCxcbiAgQ29uc3RydWN0YWJsZSxcbiAgRHNsLFxuICBHYXJiYWdlQ29sbGVjdG9yLFxuICBIYXNPbmVJbmRleENoYWluLFxuICBsYW5nLFxuICBMaXN0TW9kZWwsXG4gIExvZ2dlcixcbiAgTXV0YWJsZUxpc3RNb2RlbCxcbiAgTXV0YWJsZVN0cmVhbSxcbiAgTXV0YWJsZVZhbHVlTW9kZWwsXG4gIFRyYWNlLFxuICBWYWx1ZU1vZGVsLFxuICBWYWx1ZU1vZGVsQ2hhaW5cbn0gZnJvbSAnQGNvb2xvbi9wZWN0aW4nO1xuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IEludGVyYWN0aW9uU2VydmljZSB9IGZyb20gJy4uL2ludGVyYWN0aW9uL3NlcnZpY2VzL2ludGVyYWN0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgTmF2aWdhdGlvblN0YXRlIH0gZnJvbSAnLi9ndWFyZHMvbmF2aWdhdGlvbi1zdGF0ZSc7XG5pbXBvcnQgeyBQbGFjZUhpc3RvcnkgfSBmcm9tICcuL3BsYWNlLWhpc3RvcnknO1xuaW1wb3J0IHsgVXJsU25hcHNob3QgfSBmcm9tICcuL3VybC1zbmFwc2hvdCc7XG5pbXBvcnQgeyBWaXNpdCB9IGZyb20gJy4vdmlzaXQnO1xuXG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIFBsYWNlUm91dGVyIGV4dGVuZHMgR2FyYmFnZUNvbGxlY3RvciB7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfbmF2aWdhdGlvblN0YXRlTW9kZWwgPSBuZXcgTXV0YWJsZVZhbHVlTW9kZWw8TmF2aWdhdGlvblN0YXRlPigpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9hY3RpdmVWaXNpdHMgPSBuZXcgTXV0YWJsZUxpc3RNb2RlbDxWaXNpdD4oKTtcblxuICByZWFkb25seSBuYXZpZ2F0aW9uSW5Qcm9ncmVzczogVmFsdWVNb2RlbDxib29sZWFuPjtcbiAgcmVhZG9ubHkgYWN0aXZlVmlzaXRJbmRleDogSGFzT25lSW5kZXhDaGFpbjwncGxhY2VEZWZpbml0aW9uJywgVmlzaXQ+O1xuICBwcml2YXRlIF9uYXZpZ2F0aW9uU2Vzc2lvbkNvbnRleHQ6IE5hdmlnYXRpb25TdGF0ZS5Db250ZXh0O1xuICBwcml2YXRlIF9uYXZpZ2F0aW9uU3RhdGVUeXBlTW9kZWw6IFZhbHVlTW9kZWxDaGFpbjxDb25zdHJ1Y3RhYmxlPE5hdmlnYXRpb25TdGF0ZT4+O1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgcm91dGVyOiBSb3V0ZXIsXG4gICAgICAgICAgICAgIHByaXZhdGUgcmVhZG9ubHkgdXJsU2VyaWFsaXplcjogVXJsU2VyaWFsaXplcixcbiAgICAgICAgICAgICAgcHJpdmF0ZSByZWFkb25seSBhbmd1bGFyTG9jYXRpb246IExvY2F0aW9uLFxuICAgICAgICAgICAgICBwcml2YXRlIHJlYWRvbmx5IHBsYWNlSGlzdG9yeTogUGxhY2VIaXN0b3J5LFxuICAgICAgICAgICAgICBwcml2YXRlIHJlYWRvbmx5IGludGVyYWN0aW9uU2VydmljZTogSW50ZXJhY3Rpb25TZXJ2aWNlKSB7XG4gICAgc3VwZXIoKTtcbiAgICBjb25zdCB7IGNoYWluLCB2YWx1ZU9mLCBiZWZvcmUsIHdoZW4sIGFmdGVyLCBvYnNlcnZlLCBzd2l0Y2hPbiB9ID0gRHNsLmRpc3Bvc2VXaXRoKHRoaXMpO1xuICAgIHRoaXMuYWN0aXZlVmlzaXRJbmRleCA9IGNoYWluKHRoaXMuX2FjdGl2ZVZpc2l0cykuaW5kZXhCeSgncGxhY2VEZWZpbml0aW9uJyk7XG4gICAgdGhpcy5uYXZpZ2F0aW9uSW5Qcm9ncmVzcyA9IGNoYWluKHRoaXMubmF2aWdhdGlvblN0YXRlTW9kZWwpLnBsdWNrKCdpc1RyYW5zaXRpb25hbCcpO1xuICAgIHRoaXMuX25hdmlnYXRpb25TZXNzaW9uQ29udGV4dCA9IG5ldyBOYXZpZ2F0aW9uU3RhdGUuQ29udGV4dCh0aGlzLCB0aGlzLmludGVyYWN0aW9uU2VydmljZSwgc2Vzc2lvbiA9PiB7XG4gICAgICB0aGlzLnByb2Nlc3NOYXZpZ2F0aW9uU3VjY2VzcyhzZXNzaW9uKTtcbiAgICB9KTtcbiAgICB0aGlzLl9uYXZpZ2F0aW9uU3RhdGVNb2RlbC52YWx1ZSA9IG5ldyBOYXZpZ2F0aW9uU3RhdGUuSWRsZSh0aGlzLl9uYXZpZ2F0aW9uU2Vzc2lvbkNvbnRleHQpO1xuICAgIHRoaXMuX25hdmlnYXRpb25TdGF0ZVR5cGVNb2RlbCA9IGNoYWluKHRoaXMuX25hdmlnYXRpb25TdGF0ZU1vZGVsKS5tYXAoc3RhdGUgPT4gc3RhdGUuY29uc3RydWN0b3IgYXMgQ29uc3RydWN0YWJsZTxOYXZpZ2F0aW9uU3RhdGU+KTtcblxuICAgIC8vIFRPRE86IG1ha2Ugc2V0dXAgdGhlIGNhbGxiYWNrcyBpbiBkdXJpbmcgbW9kdWxlIGluaXRpYXRpb24gdG8gbWFrZSB0aGlzIHRlc3RhYmxlLlxuICAgIHRoaXMucm91dGVyLmV2ZW50cy5zdWJzY3JpYmUoZXZlbnQgPT4ge1xuICAgICAgLy8gUm91dGluZyBldmVudCBzZXF1ZW5jZVxuICAgICAgLy8gPT09PT09PT09PT09PT09PT09PT09PVxuICAgICAgLy8gTmF2aWdhdGlvblN0YXJ0IC0+IC4uLi4gLT4gTmF2aWdhdGlvbkNhbmNlbCAtLT4gcmVkaXJlY3QsIGdvIGFyb3VuZCBhZ2FpbiBpbiB0aGUgc2FtZSBzZXNzaW9uXG4gICAgICAvLyBOYXZpZ2F0aW9uU3RhcnQgLT4gLi4uLiAtPiBOYXZpZ2F0aW9uRW5kIC0tPiBuYXZpZ2F0aW9uIGNvbXBsZXRlLCBlbmQgc2Vzc2lvbi5cbiAgICAgIC8vIE5hdmlnYXRpb25TdGFydCAtPiAuLi4uIC0+IE5hdmlnYXRpb25FcnJvciAtLT4gbmF2aWdhdGlvbiBhYm9ydGVkLCBlbmQgc2Vzc2lvbi5cbiAgICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09XG4gICAgICBpZiAoZXZlbnQgaW5zdGFuY2VvZiBOYXZpZ2F0aW9uU3RhcnQpIHtcbiAgICAgICAgaWYgKGV2ZW50Lm5hdmlnYXRpb25UcmlnZ2VyID09PSAncG9wc3RhdGUnKSB7XG4gICAgICAgICAgdGhpcy5ydW5TdGF0ZVRyYW5zaXRpb24oc3RhdGUgPT4gc3RhdGUub25Qb3BTdGF0ZShldmVudCkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMucnVuU3RhdGVUcmFuc2l0aW9uKHN0YXRlID0+IHN0YXRlLm9uUm91dGVyU3RhcnRlZChldmVudCkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoZXZlbnQgaW5zdGFuY2VvZiBOYXZpZ2F0aW9uRW5kKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGV2ZW50KTtcbiAgICAgICAgdGhpcy5ydW5TdGF0ZVRyYW5zaXRpb24oc3RhdGUgPT4gc3RhdGUub25Sb3V0ZXJFbmQoZXZlbnQpKTtcbiAgICAgIH1cbiAgICAgIGlmIChldmVudCBpbnN0YW5jZW9mIE5hdmlnYXRpb25FcnJvcikge1xuICAgICAgICBjb25zb2xlLmxvZyhldmVudCk7XG4gICAgICAgIHRoaXMucnVuU3RhdGVUcmFuc2l0aW9uKHN0YXRlID0+IHN0YXRlLm9uUm91dGVyRXJyb3IoZXZlbnQpKTtcbiAgICAgIH1cbiAgICAgIGlmIChldmVudCBpbnN0YW5jZW9mIE5hdmlnYXRpb25DYW5jZWwpIHtcbiAgICAgICAgY29uc29sZS5sb2coZXZlbnQpO1xuICAgICAgICB0aGlzLnJ1blN0YXRlVHJhbnNpdGlvbihzdGF0ZSA9PiBzdGF0ZS5vblJvdXRlckNhbmNlbGxlZChldmVudCkpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgLy8gUHVzaCBkaWFsb2cgc3RhdGUgdG8gdGhlIHVybCBzbyB3ZSBjYW4gY2FwdHVyZSB0aGUgYmFjayBidXR0b24uXG4gICAgd2hlbi5saXN0T2YodGhpcy5pbnRlcmFjdGlvblNlcnZpY2UuYWN0aXZlSW50ZXJhY3Rpb25Db250ZXh0SWRzKS5jaGFuZ2VzKChpZHMsIHByZXZpb3VzKSA9PiB7XG4gICAgICB0aGlzLnN5bmNJbnRlcmFjdGlvbklkc1dpdGhSb3V0ZXIoKTtcbiAgICB9LCB7IHVubGVzczogdGhpcy5uYXZpZ2F0aW9uSW5Qcm9ncmVzcyB9KTsgLy8gVE9ETzogSSB0aGluayB0aGUgZXhjbHVzaXZlIGludGVyYWN0aW9uIHByZXZlbnRzIGludGVyYWN0aW9ucyBzdGFydGluZyB3aGlsZSBpdCdzIGFjdGl2ZSBzbyB3ZSBtaWdodCBub3QgbmVlZCB0aGlzLlxuXG4gICAgY29uc3QgdXJsQ2hhbmdlcyA9IG5ldyBNdXRhYmxlU3RyZWFtPHsgdXJsOiBzdHJpbmcsIHN0YXRlOiBOYXZpZ2F0aW9uU3RhdGUgfT4oKTtcblxuICAgIC8vIFRoZSBhbmd1bGFyIHJvdXRlciBkb2Vzbid0IGFsd2F5cyBmaXJlIHJvdXRlciBldmVudHMgd2hlbiB0aGUgYmFjayBidXR0b24gaXMgcHVzaGVkIHdoaWxlIGEgbmF2aWdhdGlvblxuICAgIC8vIHNlc3Npb24gaXMgaW4gcHJvZ3Jlc3MuICBTb21ldGltZXMgd2Ugb25seSBrbm93IGFib3V0IGl0IGZyb20gdGhlIHVybCBjaGFuZ2UuXG4gICAgLy8gSU1QT1JUQU5UIE9SREVSIERFUEVOREVOQ1lcbiAgICAvLyBUaGlzIG9ubHkgd29ya3MgYmVjYXVzZSB3ZSdyZSBub3RpZmllZCBvZiB0aGUgY2hhbmdlIGFmdGVyIHRoZSByb3V0ZXIgaGFzIHN0YXJ0ZWQgcmVhY3RpbmcgdG8gaXQuICBUaGlzXG4gICAgLy8gd2UgY2FuIGNhbiB1c2Ugb3VyIG5hdmlnYXRpb25TdGF0ZSB0byBkZXRlcm1pbmUgdGhpbmdzLlxuICAgIGFuZ3VsYXJMb2NhdGlvbi5vblVybENoYW5nZSh1cmwgPT4ge1xuICAgICAgY29uc3QgbmF2aWdhdGlvblN0YXRlID0gdGhpcy5fbmF2aWdhdGlvblN0YXRlTW9kZWwudmFsdWU7XG4gICAgICBjb25zb2xlLmxvZyhgVVJMQ2hhbmdlIC0+ICR7dXJsfWAsIHsgc3RhdGU6IG5hdmlnYXRpb25TdGF0ZSB9KTtcbiAgICAgIHVybENoYW5nZXMucHVibGlzaCh7IHVybCwgc3RhdGU6IG5hdmlnYXRpb25TdGF0ZSB9KTtcblxuICAgICAgLy8gVGhlIHVybCBoYXMgY2hhbmdlZCB3aGlsZSB3ZSdyZSBpbiBhIHRyYW5zaXRpb25hbCBzdGF0ZVxuICAgICAgaWYgKG5hdmlnYXRpb25TdGF0ZS5pc1RyYW5zaXRpb25hbCkge1xuICAgICAgICBjb25zdCBuYXZpZ2F0aW9uSW50ZXJhY3Rpb24gPSB0aGlzLm5hdmlnYXRpb25TdGF0ZS5pbnRlcmFjdGlvbkNvbnRleHQ7XG4gICAgICAgIGlmIChuYXZpZ2F0aW9uSW50ZXJhY3Rpb24gJiYgbmF2aWdhdGlvbkludGVyYWN0aW9uLmlzQWN0aXZlKCkpIHtcbiAgICAgICAgICB0aGlzLnJ1blN0YXRlVHJhbnNpdGlvbihzdGF0ZSA9PiBzdGF0ZS5vbkJhY2tDbGlja2VkRHVyaW5nTmF2aWdhdGlvbkludGVyYWN0aW9uKHVybCkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHByb2Nlc3NOYXZpZ2F0aW9uU3VjY2VzcyhzZXNzaW9uOiBOYXZpZ2F0aW9uU3RhdGUpIHtcbiAgICAvLyBXZSBuZWVkIHRvIHVwZGF0ZSB0aGUgdmlzaXRzIGJlZm9yZSB0aGUgc2Vzc2lvbiBmaW5pc2hlcy4gIFRoaXMgYWxsb3dzIHRoZSBwbGFjZU91dGV0cyB0byBpZ25vcmUgdmlzaXRcbiAgICAvLyBjaGFuZ2VzIHRoYXQgb2NjdXIgd2hpbGUgcm91dGVyTmF2aWdhdGlvbkFjdGl2ZSBpcyB0cnVlLlxuICAgIGFzc2VydC5pc1RydXRoeSh0aGlzLm5hdmlnYXRpb25JblByb2dyZXNzLnZhbHVlKTtcbiAgICBjb25zdCB2aXNpdHMgPSBzZXNzaW9uLmdldFZpc2l0cygpO1xuICAgIHZpc2l0cy5mb3JFYWNoKHYgPT4gdGhpcy5wbGFjZUhpc3RvcnkuYWRkKHYpKTtcbiAgICB0aGlzLl9hY3RpdmVWaXNpdHMudmFsdWUgPSB2aXNpdHM7XG4gIH1cblxuICBnZXQgbmF2aWdhdGlvblN0YXRlKCk6IE5hdmlnYXRpb25TdGF0ZSB7XG4gICAgcmV0dXJuIHRoaXMuX25hdmlnYXRpb25TdGF0ZU1vZGVsLnZhbHVlO1xuICB9XG5cbiAgZ2V0IG5hdmlnYXRpb25TdGF0ZU1vZGVsKCk6IFZhbHVlTW9kZWw8TmF2aWdhdGlvblN0YXRlPiB7XG4gICAgcmV0dXJuIHRoaXMuX25hdmlnYXRpb25TdGF0ZU1vZGVsLnJlYWRvbmx5O1xuICB9XG5cbiAgZ2V0IGFjdGl2ZVZpc2l0cygpOiBMaXN0TW9kZWw8VmlzaXQ+IHtcbiAgICByZXR1cm4gdGhpcy5fYWN0aXZlVmlzaXRzLnJlYWRvbmx5O1xuICB9XG5cbiAgLyoqXG4gICAqICBwbGFjZVJvdXRlci5uYXZpZ2F0ZShwbGFjZURlc3RpbmF0aW9ucy5zb21lUGxhY2UuY3JlYXRlVmlzaXQocm91dGVJZCwgLi4udmlzaXRQYXJhbXMpKTtcbiAgICogQHBhcmFtIHZpc2l0XG4gICAqL1xuICBhc3luYyBuYXZpZ2F0ZSh2aXNpdDogVmlzaXQsIG9wdGlvbnM/OiB7IHJlbGF0aXZlVG86IEFjdGl2YXRlZFJvdXRlIH0pIHtcbiAgICB0aGlzLmRvTmF2aWdhdGlvbih2aXNpdCwgYXN5bmMgcm91dGVyID0+IHtcbiAgICAgIGNvbnN0IGNvbW1hbmRzID0gW1xuICAgICAgICB2aXNpdC5wbGFjZURlZmluaXRpb24ucGF0aCxcbiAgICAgICAgLi4udGhpcy5jcmVhdGVSb3V0ZVBhcmFtZXRlcnModmlzaXQpXG4gICAgICBdO1xuICAgICAgYXdhaXQgdGhpcy5yb3V0ZXIubmF2aWdhdGUoY29tbWFuZHMsIHtcbiAgICAgICAgcmVsYXRpdmVUbzogb3B0aW9ucyA/IG9wdGlvbnMucmVsYXRpdmVUbyA6IG51bGxcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgLy8gQFRyYWNlKClcbiAgYXN5bmMgcHVzaFZpc2l0Q2hhbmdlc1RvUm91dGUoYWN0aXZhdGVkUm91dGU6IEFjdGl2YXRlZFJvdXRlLCBwcmV2aW91czogVmlzaXQsIG5leHQ6IFZpc2l0KSB7XG4gICAgLy8gd2UgaGF2ZSB0byBwdXNoIHRvIGhpc3Rvcnkgc28gb3VyIHJlbWVtYmVyIHNhbml0aXNlcnMgZG9uJ3QgcGljayB1cCB0aGUgcHJldmlvdXMgdmFsdWVcbiAgICAvLyB3aGVuIGl0J3MgYmVlbiBjbGVhcmVkIGJ5IHRoZSB1c2VyLlxuICAgIHRoaXMucGxhY2VIaXN0b3J5LmFkZChuZXh0KTtcblxuICAgIC8vIEZJWE1FOiBubyByb3V0ZSBpZCAtPiByb3V0ZSBpZCBkdXBsaWNhdGVzIHJvdXRlIHBhcmFtZXRlcnNcbiAgICBpZiAobmV4dC5oYXNSb3V0aW5nQ2hhbmdlZEZyb20ocHJldmlvdXMpKSB7XG4gICAgICByZXR1cm4gdGhpcy5kb05hdmlnYXRpb24obmV4dCwgcm91dGVyID0+IHtcbiAgICAgICAgY29uc3QgdXJsU25hcHNob3QgPSB0aGlzLnBhcnNlVXJsKHRoaXMucm91dGVyLnJvdXRlclN0YXRlLnNuYXBzaG90LnVybCkudXBkYXRlVmlzaXRTZWdtZW50cyhuZXh0KTtcbiAgICAgICAgY29uc29sZS5sb2coJyMjIyBQdXNoIENoYW5nZXMgdG8gcm91dGUgUmVkaXJlY3QnLCB7IGNvbW1hbmRzOiB1cmxTbmFwc2hvdC51cmwgfSk7XG4gICAgICAgIHJldHVybiB0aGlzLm5hdmlnYXRlQnlVcmwodXJsU25hcHNob3QpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZG9OYXZpZ2F0aW9uKHZpc2l0OiBWaXNpdCwgcnVuTmF2aWdhdGlvbkNvbW1hbmRzOiAocm91dGVyOiBSb3V0ZXIpID0+IGFueSkge1xuICAgIGlmICh0aGlzLm5hdmlnYXRpb25JblByb2dyZXNzLnZhbHVlKSB7XG4gICAgICBsYW5nLmlsbGVnYWxTdGF0ZSgnTmF2aWdhdGlvbiBhbHJlYWR5IGluIHByb2dyZXNzJyk7XG4gICAgfVxuICAgIHRoaXMucnVuU3RhdGVUcmFuc2l0aW9uKGN1cnJlbnQgPT4ge1xuICAgICAgY29uc3Qgc2Vzc2lvbiA9IHRoaXMubmF2aWdhdGlvblN0YXRlLm9uUGxhY2VOYXZpZ2F0aW9uU3RhcnQodmlzaXQsIHRoaXMuZ2V0Q3VycmVudFJvdXRlclVybCgpKTtcbiAgICAgIHNlc3Npb24uc3RvcmVWaXNpdCh2aXNpdCk7XG4gICAgICByZXR1cm4gc2Vzc2lvbjtcbiAgICB9KTtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgcnVuTmF2aWdhdGlvbkNvbW1hbmRzKHRoaXMucm91dGVyKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgLy8gUm91dGVyIGhhcyBmaW5pc2hlZCAoc2luY2UgdGhlcmUgd2FzIG5vIHJvdXRlciBjaGFuZ2UgcmVxdWlyZWQpIHNvIHdlXG4gICAgICAvLyBuZWVkIHRvIGVuZCB0aGUgbmF2aWdhdGlvbiBzZXNzaW9uLlxuICAgICAgaWYgKHRoaXMubmF2aWdhdGlvblN0YXRlLmlzVHJhbnNpdGlvbmFsICYmICF0aGlzLnJvdXRlci5nZXRDdXJyZW50TmF2aWdhdGlvbigpKSB7XG4gICAgICAgIHRoaXMucnVuU3RhdGVUcmFuc2l0aW9uKHNlc3Npb24gPT4gc2Vzc2lvbi5vblJvdXRlckVuZChuZXcgTmF2aWdhdGlvbkVuZCgtMSwgJycsICcnKSkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIEBUcmFjZSgpXG4gIHByb3RlY3RlZCBydW5TdGF0ZVRyYW5zaXRpb24odHJhbnNpdGlvbjogKG5hdmlnYXRpb25TZXNzaW9uOiBOYXZpZ2F0aW9uU3RhdGUpID0+IE5hdmlnYXRpb25TdGF0ZSkge1xuICAgIGNvbnN0IHByZXZpb3VzID0gdGhpcy5fbmF2aWdhdGlvblN0YXRlTW9kZWwudmFsdWU7XG4gICAgY29uc3QgbmV4dCA9IHRyYW5zaXRpb24odGhpcy5uYXZpZ2F0aW9uU3RhdGUpO1xuICAgIHRoaXMuX25hdmlnYXRpb25TdGF0ZU1vZGVsLnZhbHVlID0gbmV4dDtcbiAgICBpZiAobmV4dCAhPT0gcHJldmlvdXMpIHtcbiAgICAgIHByZXZpb3VzLmRpc3Bvc2UoKTtcbiAgICAgIExvZ2dlci5nZXQodGhpcykuaW5mbyhgUm91dGVyIFN0YXRlIFRyYW5zaXRpb246ICR7cHJldmlvdXMudG9TdHJpbmcoKX0gLT4gJHtuZXh0LnRvU3RyaW5nKCl9YCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVSb3V0ZVBhcmFtZXRlcnModmlzaXQ6IFZpc2l0KSB7XG4gICAgY29uc3QgZGVmID0gdmlzaXQucGxhY2VEZWZpbml0aW9uO1xuICAgIHJldHVybiB2aXNpdC5oYXNSb3V0ZUlkKCkgP1xuICAgICAgW2RlZi5nZXRGb3JtYXR0ZWRSb3V0ZUlkKHZpc2l0KSwgZGVmLmdldEZvcm1hdHRlZFJvdXRlUGFyYW1ldGVycyh2aXNpdCldIDpcbiAgICAgIFtkZWYuZ2V0Rm9ybWF0dGVkUm91dGVQYXJhbWV0ZXJzKHZpc2l0KV07XG4gIH1cblxuICBleHRyYWN0Q2hpbGRQYXRoKGFjdGl2YXRlZFJvdXRlOiBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90KTogYW55W10ge1xuICAgIHJldHVybiBfLmZsYXR0ZW4oYWN0aXZhdGVkUm91dGUuY2hpbGRyZW4ubWFwKGNoaWxkID0+IGNoaWxkLnVybCkpO1xuICB9XG5cbiAgcGFyc2VVcmwodXJsOiBzdHJpbmcpOiBVcmxTbmFwc2hvdCB7XG4gICAgcmV0dXJuIG5ldyBVcmxTbmFwc2hvdCh0aGlzLnVybFNlcmlhbGl6ZXIsIHVybCwge30pO1xuICB9XG5cbiAgcmVzZXRCcm93c2VyTG9jYXRpb24odXJsOiBzdHJpbmcpIHtcbiAgICB0aGlzLmFuZ3VsYXJMb2NhdGlvbi5nbyh1cmwpO1xuICB9XG5cbiAgZ2V0Q3VycmVudFJvdXRlclVybCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnJvdXRlci5yb3V0ZXJTdGF0ZSA/IHRoaXMucm91dGVyLnJvdXRlclN0YXRlLnNuYXBzaG90LnVybCA6IG51bGw7XG4gIH1cblxuICBnZXRDdXJyZW50Um91dGVTbmFwc2hvdCgpOiBVcmxTbmFwc2hvdCB7XG4gICAgcmV0dXJuIHRoaXMucGFyc2VVcmwodGhpcy5nZXRDdXJyZW50Um91dGVyVXJsKCkpO1xuICB9XG5cbiAgZ2V0QWN0aXZlSW50ZXJhY3Rpb25JZHNGcm9tVXJsKHVybDogc3RyaW5nKTogc3RyaW5nW10ge1xuICAgIHJldHVybiB0aGlzLnBhcnNlVXJsKHVybCkuZ2V0SW50ZXJhY3Rpb25JZHMoKTtcbiAgfVxuXG5cbiAgLy8gQFRyYWNlKClcbiAgaGFzQWN0aXZlSW50ZXJhY3Rpb25JZHModXJsOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRBY3RpdmVJbnRlcmFjdGlvbklkc0Zyb21VcmwodXJsKS5sZW5ndGggPiAwO1xuICB9XG5cbiAgLy8gQFRyYWNlKClcbiAgbmF2aWdhdGVCeVVybCh1cmxTbmFwc2hvdDogVXJsU25hcHNob3QpIHtcbiAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKHVybFNuYXBzaG90LnVybFRyZWUsIHVybFNuYXBzaG90LmdldE5hdmlnYXRpb25FeHRyYXMoKSk7XG4gIH1cblxuICAvLyBAVHJhY2UoKVxuICBzeW5jSW50ZXJhY3Rpb25JZHNXaXRoUm91dGVyKCkge1xuICAgIGFzc2VydC5pc0ZhbHNleSh0aGlzLm5hdmlnYXRpb25JblByb2dyZXNzLnZhbHVlKTsgLy8gVXBkYXRpbmcgaW50ZXJhY3Rpb24gcm91dGVzIGR1cmluZyBhbiBleGlzdGluZyBuYXZpZ2F0aW9uIGJyZWFrcyBhbGwgdGhlIHRoaW5ncy5cbiAgICBjb25zdCBjdXJyZW50SWRzID0gdGhpcy5pbnRlcmFjdGlvblNlcnZpY2UuYWN0aXZlSW50ZXJhY3Rpb25Db250ZXh0SWRzLnZhbHVlO1xuICAgIGlmIChfLmlzRXF1YWwoY3VycmVudElkcywgdGhpcy5nZXRBY3RpdmVJbnRlcmFjdGlvbklkc0Zyb21VcmwodGhpcy5nZXRDdXJyZW50Um91dGVyVXJsKCkpKSkge1xuICAgICAgY29uc29sZS5sb2coJ2FjdGl2aXR5IGlkcyB3ZXJlIHRoZSBzYW1lLCBza2lwcGluZycpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoY3VycmVudElkcy5sZW5ndGggPCAxKSB7XG4gICAgICAgIC8vIG5vIG1vcmUgaW50ZXJhY3Rpb25zIHRvIHJlbW92ZSBmcm9tIGhpc3RvcnkuXG4gICAgICAgIHRoaXMubmF2aWdhdGVCeVVybCh0aGlzLmdldEN1cnJlbnRSb3V0ZVNuYXBzaG90KCkucmVtb3ZlSW50ZXJhY3Rpb25JZHMoKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyB0b2RvIHdhcyBvciBpcy4uLlxuICAgICAgICB0aGlzLm5hdmlnYXRlQnlVcmwodGhpcy5nZXRDdXJyZW50Um91dGVTbmFwc2hvdCgpLnVwZGF0ZUludGVyYWN0aW9uSWRzKGN1cnJlbnRJZHMpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiJdfQ==