@coolon/angular-ui-powerups 0.0.98 → 0.0.101
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/bundles/coolon-angular-ui-powerups.umd.js +1351 -1109
- package/bundles/coolon-angular-ui-powerups.umd.js.map +1 -1
- package/bundles/coolon-angular-ui-powerups.umd.min.js +1 -1
- package/bundles/coolon-angular-ui-powerups.umd.min.js.map +1 -1
- package/coolon-angular-ui-powerups.d.ts +19 -19
- package/coolon-angular-ui-powerups.metadata.json +1 -1
- package/esm2015/coolon-angular-ui-powerups.js +19 -19
- package/esm2015/index.js +2 -2
- package/esm2015/lib/interaction/components/activity-container/activity-container.component.js +19 -5
- package/esm2015/lib/interaction/components/inplace-interaction-context/inplace-interaction-context.component.js +13 -3
- package/esm2015/lib/interaction/index.js +5 -4
- package/esm2015/lib/interaction/interaction-context.js +7 -53
- package/esm2015/lib/interaction/interaction.module.js +3 -3
- package/esm2015/lib/interaction/services/interaction.service.js +228 -0
- package/esm2015/lib/interaction/services/mat-dialog-interaction/dialog-interaction-context-factory.js +62 -0
- package/esm2015/lib/interaction/services/mat-dialog-interaction/dialog-interaction-context.js +145 -0
- package/esm2015/lib/interaction/services/modal-interaction-context.factory.js +17 -0
- package/esm2015/lib/place/components/place-outlet/place-outlet.component.js +3 -3
- package/esm2015/lib/place/guards/abstract-place.guard.js +13 -12
- package/esm2015/lib/place/guards/interaction.guard.js +27 -19
- package/esm2015/lib/place/guards/navigation-state.js +309 -246
- package/esm2015/lib/place/place-router.js +160 -115
- package/esm2015/lib/place/url-snapshot.js +91 -19
- package/esm2015/public_api.js +2 -2
- package/esm5/coolon-angular-ui-powerups.js +19 -19
- package/esm5/index.js +2 -2
- package/esm5/lib/interaction/components/activity-container/activity-container.component.js +23 -14
- package/esm5/lib/interaction/components/inplace-interaction-context/inplace-interaction-context.component.js +10 -3
- package/esm5/lib/interaction/index.js +5 -4
- package/esm5/lib/interaction/interaction-context.js +8 -61
- package/esm5/lib/interaction/interaction.module.js +3 -3
- package/esm5/lib/interaction/services/interaction.service.js +271 -0
- package/esm5/lib/interaction/services/mat-dialog-interaction/dialog-interaction-context-factory.js +65 -0
- package/esm5/lib/interaction/services/mat-dialog-interaction/dialog-interaction-context.js +170 -0
- package/esm5/lib/interaction/services/modal-interaction-context.factory.js +27 -0
- package/esm5/lib/place/components/place-outlet/place-outlet.component.js +3 -3
- package/esm5/lib/place/guards/abstract-place.guard.js +15 -14
- package/esm5/lib/place/guards/interaction.guard.js +25 -17
- package/esm5/lib/place/guards/navigation-state.js +422 -292
- package/esm5/lib/place/place-router.js +182 -133
- package/esm5/lib/place/url-snapshot.js +105 -21
- package/esm5/public_api.js +2 -2
- package/fesm2015/coolon-angular-ui-powerups.js +1112 -918
- package/fesm2015/coolon-angular-ui-powerups.js.map +1 -1
- package/fesm5/coolon-angular-ui-powerups.js +1302 -1060
- package/fesm5/coolon-angular-ui-powerups.js.map +1 -1
- package/lib/interaction/components/activity-container/activity-container.component.d.ts +1 -0
- package/lib/interaction/components/inplace-interaction-context/inplace-interaction-context.component.d.ts +3 -1
- package/lib/interaction/index.d.ts +4 -3
- package/lib/interaction/interaction-context.d.ts +2 -11
- package/lib/interaction/services/interaction.service.d.ts +46 -0
- package/lib/interaction/services/mat-dialog-interaction/dialog-interaction-context-factory.d.ts +15 -0
- package/lib/interaction/services/{dialog-interaction-context.d.ts → mat-dialog-interaction/dialog-interaction-context.d.ts} +2 -2
- package/lib/interaction/services/modal-interaction-context.factory.d.ts +4 -0
- package/lib/place/guards/abstract-place.guard.d.ts +1 -1
- package/lib/place/guards/interaction.guard.d.ts +3 -3
- package/lib/place/guards/navigation-state.d.ts +65 -37
- package/lib/place/place-router.d.ts +15 -22
- package/lib/place/url-snapshot.d.ts +18 -6
- package/package.json +1 -1
- package/schematics/place-routes/templates/place-routes.ts.template +3 -3
- package/styles/styles.scss +1 -1
- package/esm2015/lib/interaction/services/dialog-interaction-context.js +0 -163
- package/esm2015/lib/interaction/services/dialog-interaction.service.js +0 -151
- package/esm2015/lib/interaction/services/modal-interaction.service.js +0 -109
- package/esm5/lib/interaction/services/dialog-interaction-context.js +0 -188
- package/esm5/lib/interaction/services/dialog-interaction.service.js +0 -179
- package/esm5/lib/interaction/services/modal-interaction.service.js +0 -153
- package/lib/interaction/services/dialog-interaction.service.d.ts +0 -24
- package/lib/interaction/services/modal-interaction.service.d.ts +0 -15
|
@@ -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, Trace } from '@coolon/pectin';
|
|
10
10
|
import _ from 'lodash';
|
|
11
|
-
import {
|
|
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/
|
|
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,
|
|
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.
|
|
29
|
-
_this.
|
|
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.
|
|
35
|
-
_this._navigationSessionContext = new NavigationState.Context(_this
|
|
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.
|
|
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,85 @@ var PlaceRouter = /** @class */ (function (_super) {
|
|
|
53
57
|
// NavigationStart -> .... -> NavigationError --> navigation aborted, end session.
|
|
54
58
|
// =======================
|
|
55
59
|
if (event instanceof NavigationStart) {
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
60
|
+
console.log(event);
|
|
61
|
+
if (event.navigationTrigger === 'popstate') {
|
|
62
|
+
_this.runStateTransition((/**
|
|
63
|
+
* @param {?} state
|
|
64
|
+
* @return {?}
|
|
65
|
+
*/
|
|
66
|
+
function (state) { return state.onPopState(event); }));
|
|
67
|
+
}
|
|
68
|
+
else {
|
|
69
|
+
_this.runStateTransition((/**
|
|
70
|
+
* @param {?} state
|
|
71
|
+
* @return {?}
|
|
72
|
+
*/
|
|
73
|
+
function (state) { return state.onStart(event); }));
|
|
74
|
+
}
|
|
61
75
|
}
|
|
62
76
|
if (event instanceof NavigationEnd) {
|
|
77
|
+
console.log(event);
|
|
63
78
|
_this.runStateTransition((/**
|
|
64
|
-
* @param {?}
|
|
79
|
+
* @param {?} state
|
|
65
80
|
* @return {?}
|
|
66
81
|
*/
|
|
67
|
-
function (
|
|
82
|
+
function (state) { return state.onEnd(event); }));
|
|
68
83
|
}
|
|
69
84
|
if (event instanceof NavigationError) {
|
|
85
|
+
console.log(event);
|
|
70
86
|
_this.runStateTransition((/**
|
|
71
|
-
* @param {?}
|
|
87
|
+
* @param {?} state
|
|
72
88
|
* @return {?}
|
|
73
89
|
*/
|
|
74
|
-
function (
|
|
90
|
+
function (state) { return state.onError(event); }));
|
|
75
91
|
}
|
|
76
92
|
if (event instanceof NavigationCancel) {
|
|
93
|
+
console.log(event);
|
|
77
94
|
_this.runStateTransition((/**
|
|
78
|
-
* @param {?}
|
|
95
|
+
* @param {?} state
|
|
79
96
|
* @return {?}
|
|
80
97
|
*/
|
|
81
|
-
function (
|
|
98
|
+
function (state) { return state.onCancel(event); }));
|
|
82
99
|
}
|
|
83
100
|
}));
|
|
84
101
|
// Push dialog state to the url so we can capture the back button.
|
|
85
|
-
|
|
102
|
+
when.listOf(_this.interactionService.activeInteractionContextIds).changes((/**
|
|
103
|
+
* @param {?} ids
|
|
104
|
+
* @param {?} previous
|
|
105
|
+
* @return {?}
|
|
106
|
+
*/
|
|
107
|
+
function (ids, previous) {
|
|
108
|
+
_this.syncInteractionIdsWithRouter();
|
|
109
|
+
}), { unless: _this.navigationInProgress }); // TODO: I think the exclusive interaction prevents interactions starting while it's active so we might not need this.
|
|
110
|
+
// TODO: I think the exclusive interaction prevents interactions starting while it's active so we might not need this.
|
|
111
|
+
/** @type {?} */
|
|
112
|
+
var urlChanges = new MutableStream();
|
|
86
113
|
// The angular router doesn't always fire router events when the back button is pushed while a navigation
|
|
87
114
|
// session is in progress. Sometimes we only know about it from the url change.
|
|
115
|
+
// IMPORTANT ORDER DEPENDENCY
|
|
116
|
+
// This only works because we're notified of the change after the router has started reacting to it. This
|
|
117
|
+
// we can can use our navigationState to determine things.
|
|
88
118
|
angularLocation.onUrlChange((/**
|
|
89
119
|
* @param {?} url
|
|
90
120
|
* @return {?}
|
|
91
121
|
*/
|
|
92
122
|
function (url) {
|
|
93
|
-
console.log("#### url changed ->", { url: url, navIsActive: _this.navigationSessionActive.value });
|
|
94
123
|
/** @type {?} */
|
|
95
|
-
var
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
124
|
+
var navigationState = _this._navigationStateModel.value;
|
|
125
|
+
console.log("URLChange -> " + url, { state: navigationState });
|
|
126
|
+
urlChanges.publish({ url: url, state: navigationState });
|
|
127
|
+
// We've entered a navigation transition
|
|
128
|
+
if (navigationState instanceof NavigationState.NavigationTransition) {
|
|
129
|
+
/** @type {?} */
|
|
130
|
+
var navigationInteraction = _this.navigationState.interactionContext;
|
|
131
|
+
if (navigationInteraction && navigationInteraction.isActive()) {
|
|
132
|
+
Logger.get(_this).info("back button pressed during navigation session interaction promise");
|
|
133
|
+
_this.runStateTransition((/**
|
|
134
|
+
* @param {?} state
|
|
135
|
+
* @return {?}
|
|
136
|
+
*/
|
|
137
|
+
function (state) { return state.onBackClickedDuringNavigationInteraction(url); }));
|
|
138
|
+
}
|
|
103
139
|
}
|
|
104
140
|
}));
|
|
105
141
|
return _this;
|
|
@@ -118,7 +154,7 @@ var PlaceRouter = /** @class */ (function (_super) {
|
|
|
118
154
|
var _this = this;
|
|
119
155
|
// We need to update the visits before the session finishes. This allows the placeOutets to ignore visit
|
|
120
156
|
// changes that occur while routerNavigationActive is true.
|
|
121
|
-
assert.isTruthy(this.
|
|
157
|
+
assert.isTruthy(this.navigationInProgress.value);
|
|
122
158
|
/** @type {?} */
|
|
123
159
|
var visits = session.getVisits();
|
|
124
160
|
visits.forEach((/**
|
|
@@ -128,22 +164,22 @@ var PlaceRouter = /** @class */ (function (_super) {
|
|
|
128
164
|
function (v) { return _this.placeHistory.add(v); }));
|
|
129
165
|
this._activeVisits.value = visits;
|
|
130
166
|
};
|
|
131
|
-
Object.defineProperty(PlaceRouter.prototype, "
|
|
167
|
+
Object.defineProperty(PlaceRouter.prototype, "navigationState", {
|
|
132
168
|
get: /**
|
|
133
169
|
* @return {?}
|
|
134
170
|
*/
|
|
135
171
|
function () {
|
|
136
|
-
return this.
|
|
172
|
+
return this._navigationStateModel.value;
|
|
137
173
|
},
|
|
138
174
|
enumerable: true,
|
|
139
175
|
configurable: true
|
|
140
176
|
});
|
|
141
|
-
Object.defineProperty(PlaceRouter.prototype, "
|
|
177
|
+
Object.defineProperty(PlaceRouter.prototype, "navigationStateModel", {
|
|
142
178
|
get: /**
|
|
143
179
|
* @return {?}
|
|
144
180
|
*/
|
|
145
181
|
function () {
|
|
146
|
-
return this.
|
|
182
|
+
return this._navigationStateModel.readonly;
|
|
147
183
|
},
|
|
148
184
|
enumerable: true,
|
|
149
185
|
configurable: true
|
|
@@ -234,7 +270,7 @@ var PlaceRouter = /** @class */ (function (_super) {
|
|
|
234
270
|
*/
|
|
235
271
|
function (router) {
|
|
236
272
|
/** @type {?} */
|
|
237
|
-
var commands = _this.parseUrl(_this.router.routerState.snapshot).createRedirectCommandsFor(next);
|
|
273
|
+
var commands = _this.parseUrl(_this.router.routerState.snapshot.url).createRedirectCommandsFor(next);
|
|
238
274
|
console.log('### Push Changes to route Redirect', { commands: commands });
|
|
239
275
|
return router.navigate(commands);
|
|
240
276
|
}))];
|
|
@@ -259,7 +295,7 @@ var PlaceRouter = /** @class */ (function (_super) {
|
|
|
259
295
|
return tslib_1.__generator(this, function (_a) {
|
|
260
296
|
switch (_a.label) {
|
|
261
297
|
case 0:
|
|
262
|
-
if (this.
|
|
298
|
+
if (this.navigationInProgress.value) {
|
|
263
299
|
lang.illegalState('Navigation already in progress');
|
|
264
300
|
}
|
|
265
301
|
this.runStateTransition((/**
|
|
@@ -268,7 +304,7 @@ var PlaceRouter = /** @class */ (function (_super) {
|
|
|
268
304
|
*/
|
|
269
305
|
function (current) {
|
|
270
306
|
/** @type {?} */
|
|
271
|
-
var session = new NavigationState.
|
|
307
|
+
var session = new NavigationState.NavigationTransition(_this._navigationSessionContext, false, _this.router.routerState.snapshot.url);
|
|
272
308
|
session.storeVisit(visit);
|
|
273
309
|
return session;
|
|
274
310
|
}));
|
|
@@ -282,7 +318,7 @@ var PlaceRouter = /** @class */ (function (_super) {
|
|
|
282
318
|
case 3:
|
|
283
319
|
// Router has finished (since there was no router change required) so we
|
|
284
320
|
// need to end the navigation session.
|
|
285
|
-
if (this.
|
|
321
|
+
if (this.navigationState.isTransitional && !this.router.getCurrentNavigation()) {
|
|
286
322
|
this.runStateTransition((/**
|
|
287
323
|
* @param {?} session
|
|
288
324
|
* @return {?}
|
|
@@ -307,10 +343,10 @@ var PlaceRouter = /** @class */ (function (_super) {
|
|
|
307
343
|
*/
|
|
308
344
|
function (transition) {
|
|
309
345
|
/** @type {?} */
|
|
310
|
-
var previous = this.
|
|
346
|
+
var previous = this._navigationStateModel.value;
|
|
311
347
|
/** @type {?} */
|
|
312
|
-
var next = transition(this.
|
|
313
|
-
this.
|
|
348
|
+
var next = transition(this.navigationState);
|
|
349
|
+
this._navigationStateModel.value = next;
|
|
314
350
|
if (next !== previous) {
|
|
315
351
|
previous.dispose();
|
|
316
352
|
Logger.get(this).info("Router State Transition: " + previous.toString() + " -> " + next.toString());
|
|
@@ -349,15 +385,97 @@ var PlaceRouter = /** @class */ (function (_super) {
|
|
|
349
385
|
function (child) { return child.url; })));
|
|
350
386
|
};
|
|
351
387
|
/**
|
|
352
|
-
* @param {?}
|
|
388
|
+
* @param {?} url
|
|
353
389
|
* @return {?}
|
|
354
390
|
*/
|
|
355
391
|
PlaceRouter.prototype.parseUrl = /**
|
|
356
|
-
* @param {?}
|
|
392
|
+
* @param {?} url
|
|
393
|
+
* @return {?}
|
|
394
|
+
*/
|
|
395
|
+
function (url) {
|
|
396
|
+
return new UrlSnapshot(this.urlSerializer, url);
|
|
397
|
+
};
|
|
398
|
+
/**
|
|
399
|
+
* @param {?} url
|
|
400
|
+
* @return {?}
|
|
401
|
+
*/
|
|
402
|
+
PlaceRouter.prototype.resetBrowserLocation = /**
|
|
403
|
+
* @param {?} url
|
|
404
|
+
* @return {?}
|
|
405
|
+
*/
|
|
406
|
+
function (url) {
|
|
407
|
+
this.angularLocation.go(url);
|
|
408
|
+
};
|
|
409
|
+
/**
|
|
410
|
+
* @return {?}
|
|
411
|
+
*/
|
|
412
|
+
PlaceRouter.prototype.getCurrentRouterUrl = /**
|
|
413
|
+
* @return {?}
|
|
414
|
+
*/
|
|
415
|
+
function () {
|
|
416
|
+
return this.router.routerState ? this.router.routerState.snapshot.url : null;
|
|
417
|
+
};
|
|
418
|
+
/**
|
|
419
|
+
* @param {?} url
|
|
420
|
+
* @return {?}
|
|
421
|
+
*/
|
|
422
|
+
PlaceRouter.prototype.getActiveInteractionIdsFromUrl = /**
|
|
423
|
+
* @param {?} url
|
|
424
|
+
* @return {?}
|
|
425
|
+
*/
|
|
426
|
+
function (url) {
|
|
427
|
+
return this.parseUrl(url).getInteractionIds();
|
|
428
|
+
};
|
|
429
|
+
// @Trace()
|
|
430
|
+
// @Trace()
|
|
431
|
+
/**
|
|
432
|
+
* @param {?} url
|
|
433
|
+
* @return {?}
|
|
434
|
+
*/
|
|
435
|
+
PlaceRouter.prototype.hasActiveInteractionIds =
|
|
436
|
+
// @Trace()
|
|
437
|
+
/**
|
|
438
|
+
* @param {?} url
|
|
439
|
+
* @return {?}
|
|
440
|
+
*/
|
|
441
|
+
function (url) {
|
|
442
|
+
return this.getActiveInteractionIdsFromUrl(url).length > 0;
|
|
443
|
+
};
|
|
444
|
+
/**
|
|
445
|
+
* @return {?}
|
|
446
|
+
*/
|
|
447
|
+
PlaceRouter.prototype.syncInteractionIdsWithRouter = /**
|
|
357
448
|
* @return {?}
|
|
358
449
|
*/
|
|
359
|
-
function (
|
|
360
|
-
|
|
450
|
+
function () {
|
|
451
|
+
var _a, _b;
|
|
452
|
+
assert.isFalsey(this.navigationInProgress.value); // Updating interaction routes during an existing navigation breaks all the things.
|
|
453
|
+
// Updating interaction routes during an existing navigation breaks all the things.
|
|
454
|
+
/** @type {?} */
|
|
455
|
+
var currentIds = this.interactionService.activeInteractionContextIds.value;
|
|
456
|
+
if (_.isEqual(currentIds, this.getActiveInteractionIdsFromUrl(this.getCurrentRouterUrl()))) {
|
|
457
|
+
console.log('activity ids were the same, skipping');
|
|
458
|
+
}
|
|
459
|
+
else {
|
|
460
|
+
if (currentIds.length < 1) {
|
|
461
|
+
this.router.navigate(['.', {
|
|
462
|
+
outlets: (_a = {},
|
|
463
|
+
_a[UrlSnapshot.INTERACTION_ROUTER_OUTLET] = null,
|
|
464
|
+
_a)
|
|
465
|
+
}], {
|
|
466
|
+
replaceUrl: true // remove the interaction from the history.
|
|
467
|
+
});
|
|
468
|
+
}
|
|
469
|
+
else {
|
|
470
|
+
/** @type {?} */
|
|
471
|
+
var urlSnapshot = this.parseUrl(this.getCurrentRouterUrl());
|
|
472
|
+
this.router.navigate(['.', {
|
|
473
|
+
outlets: (_b = {},
|
|
474
|
+
_b[UrlSnapshot.INTERACTION_ROUTER_OUTLET] = UrlSnapshot.createInteractionOutletRouterCommands(currentIds),
|
|
475
|
+
_b)
|
|
476
|
+
}]);
|
|
477
|
+
}
|
|
478
|
+
}
|
|
361
479
|
};
|
|
362
480
|
PlaceRouter.decorators = [
|
|
363
481
|
{ type: Injectable, args: [{
|
|
@@ -370,9 +488,15 @@ var PlaceRouter = /** @class */ (function (_super) {
|
|
|
370
488
|
{ type: UrlSerializer },
|
|
371
489
|
{ type: Location },
|
|
372
490
|
{ type: PlaceHistory },
|
|
373
|
-
{ type:
|
|
491
|
+
{ type: InteractionService }
|
|
374
492
|
]; };
|
|
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.
|
|
493
|
+
/** @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" });
|
|
494
|
+
tslib_1.__decorate([
|
|
495
|
+
Trace(),
|
|
496
|
+
tslib_1.__metadata("design:type", Function),
|
|
497
|
+
tslib_1.__metadata("design:paramtypes", []),
|
|
498
|
+
tslib_1.__metadata("design:returntype", void 0)
|
|
499
|
+
], PlaceRouter.prototype, "syncInteractionIdsWithRouter", null);
|
|
376
500
|
return PlaceRouter;
|
|
377
501
|
}(GarbageCollector));
|
|
378
502
|
export { PlaceRouter };
|
|
@@ -381,19 +505,14 @@ if (false) {
|
|
|
381
505
|
* @type {?}
|
|
382
506
|
* @private
|
|
383
507
|
*/
|
|
384
|
-
PlaceRouter.prototype.
|
|
385
|
-
/**
|
|
386
|
-
* @type {?}
|
|
387
|
-
* @private
|
|
388
|
-
*/
|
|
389
|
-
PlaceRouter.prototype._navigationSessionModel;
|
|
508
|
+
PlaceRouter.prototype._navigationStateModel;
|
|
390
509
|
/**
|
|
391
510
|
* @type {?}
|
|
392
511
|
* @private
|
|
393
512
|
*/
|
|
394
513
|
PlaceRouter.prototype._activeVisits;
|
|
395
514
|
/** @type {?} */
|
|
396
|
-
PlaceRouter.prototype.
|
|
515
|
+
PlaceRouter.prototype.navigationInProgress;
|
|
397
516
|
/** @type {?} */
|
|
398
517
|
PlaceRouter.prototype.activeVisitIndex;
|
|
399
518
|
/**
|
|
@@ -401,6 +520,11 @@ if (false) {
|
|
|
401
520
|
* @private
|
|
402
521
|
*/
|
|
403
522
|
PlaceRouter.prototype._navigationSessionContext;
|
|
523
|
+
/**
|
|
524
|
+
* @type {?}
|
|
525
|
+
* @private
|
|
526
|
+
*/
|
|
527
|
+
PlaceRouter.prototype._navigationStateTypeModel;
|
|
404
528
|
/**
|
|
405
529
|
* @type {?}
|
|
406
530
|
* @private
|
|
@@ -425,81 +549,6 @@ if (false) {
|
|
|
425
549
|
* @type {?}
|
|
426
550
|
* @private
|
|
427
551
|
*/
|
|
428
|
-
PlaceRouter.prototype.
|
|
552
|
+
PlaceRouter.prototype.interactionService;
|
|
429
553
|
}
|
|
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
|
|
554
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGxhY2Utcm91dGVyLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGNvb2xvbi9hbmd1bGFyLXVpLXBvd2VydXBzLyIsInNvdXJjZXMiOlsibGliL3BsYWNlL3BsYWNlLXJvdXRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzQyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFHTCxnQkFBZ0IsRUFDaEIsYUFBYSxFQUNiLGVBQWUsRUFDZixlQUFlLEVBQ2YsTUFBTSxFQUNOLGFBQWEsRUFDZCxNQUFNLGlCQUFpQixDQUFDO0FBQ3pCLE9BQU8sRUFDTCxNQUFNLEVBRU4sR0FBRyxFQUNILGdCQUFnQixFQUVoQixJQUFJLEVBRUosTUFBTSxFQUNOLGdCQUFnQixFQUNoQixhQUFhLEVBQ2IsaUJBQWlCLEVBQ2pCLEtBQUssRUFHTixNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sQ0FBQyxNQUFNLFFBQVEsQ0FBQztBQUN2QixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQUNqRixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDNUQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7O0FBSTdDO0lBR2lDLHVDQUFnQjtJQVUvQyxxQkFBNkIsTUFBYyxFQUNkLGFBQTRCLEVBQzVCLGVBQXlCLEVBQ3pCLFlBQTBCLEVBQzFCLGtCQUFzQztRQUpuRSxZQUtFLGlCQUFPLFNBa0VSO1FBdkU0QixZQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ2QsbUJBQWEsR0FBYixhQUFhLENBQWU7UUFDNUIscUJBQWUsR0FBZixlQUFlLENBQVU7UUFDekIsa0JBQVksR0FBWixZQUFZLENBQWM7UUFDMUIsd0JB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O3FCQUNGLENBQUMsQ0FBQyxDQUFDO2FBQ0w7U0FDRjtJQUNILENBQUM7O2dCQXBPRixVQUFVLFNBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25COzs7O2dCQTdCQyxNQUFNO2dCQUNOLGFBQWE7Z0JBVk4sUUFBUTtnQkErQlIsWUFBWTtnQkFGWixrQkFBa0I7OztJQW1OekI7UUFEQyxLQUFLLEVBQUU7Ozs7bUVBeUJQO3NCQXhRSDtDQXlRQyxBQXJPRCxDQUdpQyxnQkFBZ0IsR0FrT2hEO1NBbE9ZLFdBQVc7Ozs7OztJQUV0Qiw0Q0FBa0Y7Ozs7O0lBQ2xGLG9DQUErRDs7SUFFL0QsMkNBQW1EOztJQUNuRCx1Q0FBc0U7Ozs7O0lBQ3RFLGdEQUEyRDs7Ozs7SUFDM0QsZ0RBQW1GOzs7OztJQUV2RSw2QkFBK0I7Ozs7O0lBQy9CLG9DQUE2Qzs7Ozs7SUFDN0Msc0NBQTBDOzs7OztJQUMxQyxtQ0FBMkM7Ozs7O0lBQzNDLHlDQUF1RCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IExvY2F0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIEFjdGl2YXRlZFJvdXRlLFxuICBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90LFxuICBOYXZpZ2F0aW9uQ2FuY2VsLFxuICBOYXZpZ2F0aW9uRW5kLFxuICBOYXZpZ2F0aW9uRXJyb3IsXG4gIE5hdmlnYXRpb25TdGFydCxcbiAgUm91dGVyLFxuICBVcmxTZXJpYWxpemVyXG59IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQge1xuICBhc3NlcnQsXG4gIENvbnN0cnVjdGFibGUsXG4gIERzbCxcbiAgR2FyYmFnZUNvbGxlY3RvcixcbiAgSGFzT25lSW5kZXhDaGFpbixcbiAgbGFuZyxcbiAgTGlzdE1vZGVsLFxuICBMb2dnZXIsXG4gIE11dGFibGVMaXN0TW9kZWwsXG4gIE11dGFibGVTdHJlYW0sXG4gIE11dGFibGVWYWx1ZU1vZGVsLFxuICBUcmFjZSxcbiAgVmFsdWVNb2RlbCxcbiAgVmFsdWVNb2RlbENoYWluXG59IGZyb20gJ0Bjb29sb24vcGVjdGluJztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBJbnRlcmFjdGlvblNlcnZpY2UgfSBmcm9tICcuLi9pbnRlcmFjdGlvbi9zZXJ2aWNlcy9pbnRlcmFjdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IE5hdmlnYXRpb25TdGF0ZSB9IGZyb20gJy4vZ3VhcmRzL25hdmlnYXRpb24tc3RhdGUnO1xuaW1wb3J0IHsgUGxhY2VIaXN0b3J5IH0gZnJvbSAnLi9wbGFjZS1oaXN0b3J5JztcbmltcG9ydCB7IFVybFNuYXBzaG90IH0gZnJvbSAnLi91cmwtc25hcHNob3QnO1xuaW1wb3J0IHsgVmlzaXQgfSBmcm9tICcuL3Zpc2l0JztcblxuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBQbGFjZVJvdXRlciBleHRlbmRzIEdhcmJhZ2VDb2xsZWN0b3Ige1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX25hdmlnYXRpb25TdGF0ZU1vZGVsID0gbmV3IE11dGFibGVWYWx1ZU1vZGVsPE5hdmlnYXRpb25TdGF0ZT4oKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfYWN0aXZlVmlzaXRzID0gbmV3IE11dGFibGVMaXN0TW9kZWw8VmlzaXQ+KCk7XG5cbiAgcmVhZG9ubHkgbmF2aWdhdGlvbkluUHJvZ3Jlc3M6IFZhbHVlTW9kZWw8Ym9vbGVhbj47XG4gIHJlYWRvbmx5IGFjdGl2ZVZpc2l0SW5kZXg6IEhhc09uZUluZGV4Q2hhaW48J3BsYWNlRGVmaW5pdGlvbicsIFZpc2l0PjtcbiAgcHJpdmF0ZSBfbmF2aWdhdGlvblNlc3Npb25Db250ZXh0OiBOYXZpZ2F0aW9uU3RhdGUuQ29udGV4dDtcbiAgcHJpdmF0ZSBfbmF2aWdhdGlvblN0YXRlVHlwZU1vZGVsOiBWYWx1ZU1vZGVsQ2hhaW48Q29uc3RydWN0YWJsZTxOYXZpZ2F0aW9uU3RhdGU+PjtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IHJvdXRlcjogUm91dGVyLFxuICAgICAgICAgICAgICBwcml2YXRlIHJlYWRvbmx5IHVybFNlcmlhbGl6ZXI6IFVybFNlcmlhbGl6ZXIsXG4gICAgICAgICAgICAgIHByaXZhdGUgcmVhZG9ubHkgYW5ndWxhckxvY2F0aW9uOiBMb2NhdGlvbixcbiAgICAgICAgICAgICAgcHJpdmF0ZSByZWFkb25seSBwbGFjZUhpc3Rvcnk6IFBsYWNlSGlzdG9yeSxcbiAgICAgICAgICAgICAgcHJpdmF0ZSByZWFkb25seSBpbnRlcmFjdGlvblNlcnZpY2U6IEludGVyYWN0aW9uU2VydmljZSkge1xuICAgIHN1cGVyKCk7XG4gICAgY29uc3QgeyBjaGFpbiwgdmFsdWVPZiwgYmVmb3JlLCB3aGVuLCBhZnRlciwgb2JzZXJ2ZSwgc3dpdGNoT24gfSA9IERzbC5kaXNwb3NlV2l0aCh0aGlzKTtcbiAgICB0aGlzLmFjdGl2ZVZpc2l0SW5kZXggPSBjaGFpbih0aGlzLl9hY3RpdmVWaXNpdHMpLmluZGV4QnkoJ3BsYWNlRGVmaW5pdGlvbicpO1xuICAgIHRoaXMubmF2aWdhdGlvbkluUHJvZ3Jlc3MgPSBjaGFpbih0aGlzLm5hdmlnYXRpb25TdGF0ZU1vZGVsKS5wbHVjaygnaXNUcmFuc2l0aW9uYWwnKTtcbiAgICB0aGlzLl9uYXZpZ2F0aW9uU2Vzc2lvbkNvbnRleHQgPSBuZXcgTmF2aWdhdGlvblN0YXRlLkNvbnRleHQodGhpcywgdGhpcy5pbnRlcmFjdGlvblNlcnZpY2UsIHNlc3Npb24gPT4ge1xuICAgICAgdGhpcy5wcm9jZXNzTmF2aWdhdGlvblN1Y2Nlc3Moc2Vzc2lvbik7XG4gICAgfSk7XG4gICAgdGhpcy5fbmF2aWdhdGlvblN0YXRlTW9kZWwudmFsdWUgPSBuZXcgTmF2aWdhdGlvblN0YXRlLklkbGUodGhpcy5fbmF2aWdhdGlvblNlc3Npb25Db250ZXh0KTtcbiAgICB0aGlzLl9uYXZpZ2F0aW9uU3RhdGVUeXBlTW9kZWwgPSBjaGFpbih0aGlzLl9uYXZpZ2F0aW9uU3RhdGVNb2RlbCkubWFwKHN0YXRlID0+IHN0YXRlLmNvbnN0cnVjdG9yIGFzIENvbnN0cnVjdGFibGU8TmF2aWdhdGlvblN0YXRlPik7XG5cbiAgICAvLyBUT0RPOiBtYWtlIHNldHVwIHRoZSBjYWxsYmFja3MgaW4gZHVyaW5nIG1vZHVsZSBpbml0aWF0aW9uIHRvIG1ha2UgdGhpcyB0ZXN0YWJsZS5cbiAgICB0aGlzLnJvdXRlci5ldmVudHMuc3Vic2NyaWJlKGV2ZW50ID0+IHtcbiAgICAgIC8vIFJvdXRpbmcgZXZlbnQgc2VxdWVuY2VcbiAgICAgIC8vID09PT09PT09PT09PT09PT09PT09PT1cbiAgICAgIC8vIE5hdmlnYXRpb25TdGFydCAtPiAuLi4uIC0+IE5hdmlnYXRpb25DYW5jZWwgLS0+IHJlZGlyZWN0LCBnbyBhcm91bmQgYWdhaW4gaW4gdGhlIHNhbWUgc2Vzc2lvblxuICAgICAgLy8gTmF2aWdhdGlvblN0YXJ0IC0+IC4uLi4gLT4gTmF2aWdhdGlvbkVuZCAtLT4gbmF2aWdhdGlvbiBjb21wbGV0ZSwgZW5kIHNlc3Npb24uXG4gICAgICAvLyBOYXZpZ2F0aW9uU3RhcnQgLT4gLi4uLiAtPiBOYXZpZ2F0aW9uRXJyb3IgLS0+IG5hdmlnYXRpb24gYWJvcnRlZCwgZW5kIHNlc3Npb24uXG4gICAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PVxuICAgICAgaWYgKGV2ZW50IGluc3RhbmNlb2YgTmF2aWdhdGlvblN0YXJ0KSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGV2ZW50KTtcbiAgICAgICAgaWYgKGV2ZW50Lm5hdmlnYXRpb25UcmlnZ2VyID09PSAncG9wc3RhdGUnKSB7XG4gICAgICAgICAgdGhpcy5ydW5TdGF0ZVRyYW5zaXRpb24oc3RhdGUgPT4gc3RhdGUub25Qb3BTdGF0ZShldmVudCkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMucnVuU3RhdGVUcmFuc2l0aW9uKHN0YXRlID0+IHN0YXRlLm9uU3RhcnQoZXZlbnQpKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGV2ZW50IGluc3RhbmNlb2YgTmF2aWdhdGlvbkVuZCkge1xuICAgICAgICBjb25zb2xlLmxvZyhldmVudCk7XG4gICAgICAgIHRoaXMucnVuU3RhdGVUcmFuc2l0aW9uKHN0YXRlID0+IHN0YXRlLm9uRW5kKGV2ZW50KSk7XG4gICAgICB9XG4gICAgICBpZiAoZXZlbnQgaW5zdGFuY2VvZiBOYXZpZ2F0aW9uRXJyb3IpIHtcbiAgICAgICAgY29uc29sZS5sb2coZXZlbnQpO1xuICAgICAgICB0aGlzLnJ1blN0YXRlVHJhbnNpdGlvbihzdGF0ZSA9PiBzdGF0ZS5vbkVycm9yKGV2ZW50KSk7XG4gICAgICB9XG4gICAgICBpZiAoZXZlbnQgaW5zdGFuY2VvZiBOYXZpZ2F0aW9uQ2FuY2VsKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGV2ZW50KTtcbiAgICAgICAgdGhpcy5ydW5TdGF0ZVRyYW5zaXRpb24oc3RhdGUgPT4gc3RhdGUub25DYW5jZWwoZXZlbnQpKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIC8vIFB1c2ggZGlhbG9nIHN0YXRlIHRvIHRoZSB1cmwgc28gd2UgY2FuIGNhcHR1cmUgdGhlIGJhY2sgYnV0dG9uLlxuICAgIHdoZW4ubGlzdE9mKHRoaXMuaW50ZXJhY3Rpb25TZXJ2aWNlLmFjdGl2ZUludGVyYWN0aW9uQ29udGV4dElkcykuY2hhbmdlcygoaWRzLCBwcmV2aW91cykgPT4ge1xuICAgICAgdGhpcy5zeW5jSW50ZXJhY3Rpb25JZHNXaXRoUm91dGVyKCk7XG4gICAgfSwgeyB1bmxlc3M6IHRoaXMubmF2aWdhdGlvbkluUHJvZ3Jlc3MgfSk7IC8vIFRPRE86IEkgdGhpbmsgdGhlIGV4Y2x1c2l2ZSBpbnRlcmFjdGlvbiBwcmV2ZW50cyBpbnRlcmFjdGlvbnMgc3RhcnRpbmcgd2hpbGUgaXQncyBhY3RpdmUgc28gd2UgbWlnaHQgbm90IG5lZWQgdGhpcy5cblxuICAgIGNvbnN0IHVybENoYW5nZXMgPSBuZXcgTXV0YWJsZVN0cmVhbTx7IHVybDogc3RyaW5nLCBzdGF0ZTogTmF2aWdhdGlvblN0YXRlIH0+KCk7XG5cbiAgICAvLyBUaGUgYW5ndWxhciByb3V0ZXIgZG9lc24ndCBhbHdheXMgZmlyZSByb3V0ZXIgZXZlbnRzIHdoZW4gdGhlIGJhY2sgYnV0dG9uIGlzIHB1c2hlZCB3aGlsZSBhIG5hdmlnYXRpb25cbiAgICAvLyBzZXNzaW9uIGlzIGluIHByb2dyZXNzLiAgU29tZXRpbWVzIHdlIG9ubHkga25vdyBhYm91dCBpdCBmcm9tIHRoZSB1cmwgY2hhbmdlLlxuICAgIC8vIElNUE9SVEFOVCBPUkRFUiBERVBFTkRFTkNZXG4gICAgLy8gVGhpcyBvbmx5IHdvcmtzIGJlY2F1c2Ugd2UncmUgbm90aWZpZWQgb2YgdGhlIGNoYW5nZSBhZnRlciB0aGUgcm91dGVyIGhhcyBzdGFydGVkIHJlYWN0aW5nIHRvIGl0LiAgVGhpc1xuICAgIC8vIHdlIGNhbiBjYW4gdXNlIG91ciBuYXZpZ2F0aW9uU3RhdGUgdG8gZGV0ZXJtaW5lIHRoaW5ncy5cbiAgICBhbmd1bGFyTG9jYXRpb24ub25VcmxDaGFuZ2UodXJsID0+IHtcbiAgICAgIGNvbnN0IG5hdmlnYXRpb25TdGF0ZSA9IHRoaXMuX25hdmlnYXRpb25TdGF0ZU1vZGVsLnZhbHVlO1xuICAgICAgY29uc29sZS5sb2coYFVSTENoYW5nZSAtPiAke3VybH1gLCB7IHN0YXRlOiBuYXZpZ2F0aW9uU3RhdGUgfSk7XG4gICAgICB1cmxDaGFuZ2VzLnB1Ymxpc2goeyB1cmwsIHN0YXRlOiBuYXZpZ2F0aW9uU3RhdGUgfSk7XG5cbiAgICAgIC8vIFdlJ3ZlIGVudGVyZWQgYSBuYXZpZ2F0aW9uIHRyYW5zaXRpb25cbiAgICAgIGlmIChuYXZpZ2F0aW9uU3RhdGUgaW5zdGFuY2VvZiBOYXZpZ2F0aW9uU3RhdGUuTmF2aWdhdGlvblRyYW5zaXRpb24pIHtcbiAgICAgICAgY29uc3QgbmF2aWdhdGlvbkludGVyYWN0aW9uID0gdGhpcy5uYXZpZ2F0aW9uU3RhdGUuaW50ZXJhY3Rpb25Db250ZXh0O1xuICAgICAgICBpZiAobmF2aWdhdGlvbkludGVyYWN0aW9uICYmIG5hdmlnYXRpb25JbnRlcmFjdGlvbi5pc0FjdGl2ZSgpKSB7XG4gICAgICAgICAgTG9nZ2VyLmdldCh0aGlzKS5pbmZvKGBiYWNrIGJ1dHRvbiBwcmVzc2VkIGR1cmluZyBuYXZpZ2F0aW9uIHNlc3Npb24gaW50ZXJhY3Rpb24gcHJvbWlzZWApO1xuICAgICAgICAgIHRoaXMucnVuU3RhdGVUcmFuc2l0aW9uKHN0YXRlID0+IHN0YXRlLm9uQmFja0NsaWNrZWREdXJpbmdOYXZpZ2F0aW9uSW50ZXJhY3Rpb24odXJsKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgcHJvY2Vzc05hdmlnYXRpb25TdWNjZXNzKHNlc3Npb246IE5hdmlnYXRpb25TdGF0ZSkge1xuICAgIC8vIFdlIG5lZWQgdG8gdXBkYXRlIHRoZSB2aXNpdHMgYmVmb3JlIHRoZSBzZXNzaW9uIGZpbmlzaGVzLiAgVGhpcyBhbGxvd3MgdGhlIHBsYWNlT3V0ZXRzIHRvIGlnbm9yZSB2aXNpdFxuICAgIC8vIGNoYW5nZXMgdGhhdCBvY2N1ciB3aGlsZSByb3V0ZXJOYXZpZ2F0aW9uQWN0aXZlIGlzIHRydWUuXG4gICAgYXNzZXJ0LmlzVHJ1dGh5KHRoaXMubmF2aWdhdGlvbkluUHJvZ3Jlc3MudmFsdWUpO1xuICAgIGNvbnN0IHZpc2l0cyA9IHNlc3Npb24uZ2V0VmlzaXRzKCk7XG4gICAgdmlzaXRzLmZvckVhY2godiA9PiB0aGlzLnBsYWNlSGlzdG9yeS5hZGQodikpO1xuICAgIHRoaXMuX2FjdGl2ZVZpc2l0cy52YWx1ZSA9IHZpc2l0cztcbiAgfVxuXG4gIGdldCBuYXZpZ2F0aW9uU3RhdGUoKTogTmF2aWdhdGlvblN0YXRlIHtcbiAgICByZXR1cm4gdGhpcy5fbmF2aWdhdGlvblN0YXRlTW9kZWwudmFsdWU7XG4gIH1cblxuICBnZXQgbmF2aWdhdGlvblN0YXRlTW9kZWwoKTogVmFsdWVNb2RlbDxOYXZpZ2F0aW9uU3RhdGU+IHtcbiAgICByZXR1cm4gdGhpcy5fbmF2aWdhdGlvblN0YXRlTW9kZWwucmVhZG9ubHk7XG4gIH1cblxuICBnZXQgYWN0aXZlVmlzaXRzKCk6IExpc3RNb2RlbDxWaXNpdD4ge1xuICAgIHJldHVybiB0aGlzLl9hY3RpdmVWaXNpdHMucmVhZG9ubHk7XG4gIH1cblxuICAvKipcbiAgICogIHBsYWNlUm91dGVyLm5hdmlnYXRlKHBsYWNlRGVzdGluYXRpb25zLnNvbWVQbGFjZS5jcmVhdGVWaXNpdChyb3V0ZUlkLCAuLi52aXNpdFBhcmFtcykpO1xuICAgKiBAcGFyYW0gdmlzaXRcbiAgICovXG4gIGFzeW5jIG5hdmlnYXRlKHZpc2l0OiBWaXNpdCwgb3B0aW9ucz86IHsgcmVsYXRpdmVUbzogQWN0aXZhdGVkUm91dGUgfSkge1xuICAgIHRoaXMuZG9OYXZpZ2F0aW9uKHZpc2l0LCBhc3luYyByb3V0ZXIgPT4ge1xuICAgICAgY29uc3QgY29tbWFuZHMgPSBbXG4gICAgICAgIHZpc2l0LnBsYWNlRGVmaW5pdGlvbi5wYXRoLFxuICAgICAgICAuLi50aGlzLmNyZWF0ZVJvdXRlUGFyYW1ldGVycyh2aXNpdClcbiAgICAgIF07XG4gICAgICBhd2FpdCB0aGlzLnJvdXRlci5uYXZpZ2F0ZShjb21tYW5kcywge1xuICAgICAgICByZWxhdGl2ZVRvOiBvcHRpb25zID8gb3B0aW9ucy5yZWxhdGl2ZVRvIDogbnVsbFxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICAvLyBAVHJhY2UoKVxuICBhc3luYyBwdXNoVmlzaXRDaGFuZ2VzVG9Sb3V0ZShhY3RpdmF0ZWRSb3V0ZTogQWN0aXZhdGVkUm91dGUsIHByZXZpb3VzOiBWaXNpdCwgbmV4dDogVmlzaXQpIHtcbiAgICAvLyB3ZSBoYXZlIHRvIHB1c2ggdG8gaGlzdG9yeSBzbyBvdXIgcmVtZW1iZXIgc2FuaXRpc2VycyBkb24ndCBwaWNrIHVwIHRoZSBwcmV2aW91cyB2YWx1ZVxuICAgIC8vIHdoZW4gaXQncyBiZWVuIGNsZWFyZWQgYnkgdGhlIHVzZXIuXG4gICAgdGhpcy5wbGFjZUhpc3RvcnkuYWRkKG5leHQpO1xuXG4gICAgLy8gRklYTUU6IG5vIHJvdXRlIGlkIC0+IHJvdXRlIGlkIGR1cGxpY2F0ZXMgcm91dGUgcGFyYW1ldGVyc1xuICAgIGlmIChuZXh0Lmhhc1JvdXRpbmdDaGFuZ2VkRnJvbShwcmV2aW91cykpIHtcbiAgICAgIHJldHVybiB0aGlzLmRvTmF2aWdhdGlvbihuZXh0LCByb3V0ZXIgPT4ge1xuICAgICAgICBjb25zdCBjb21tYW5kcyA9IHRoaXMucGFyc2VVcmwodGhpcy5yb3V0ZXIucm91dGVyU3RhdGUuc25hcHNob3QudXJsKS5jcmVhdGVSZWRpcmVjdENvbW1hbmRzRm9yKG5leHQpO1xuICAgICAgICBjb25zb2xlLmxvZygnIyMjIFB1c2ggQ2hhbmdlcyB0byByb3V0ZSBSZWRpcmVjdCcsIHsgY29tbWFuZHMgfSk7XG4gICAgICAgIHJldHVybiByb3V0ZXIubmF2aWdhdGUoY29tbWFuZHMpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZG9OYXZpZ2F0aW9uKHZpc2l0OiBWaXNpdCwgcnVuTmF2aWdhdGlvbkNvbW1hbmRzOiAocm91dGVyOiBSb3V0ZXIpID0+IGFueSkge1xuICAgIGlmICh0aGlzLm5hdmlnYXRpb25JblByb2dyZXNzLnZhbHVlKSB7XG4gICAgICBsYW5nLmlsbGVnYWxTdGF0ZSgnTmF2aWdhdGlvbiBhbHJlYWR5IGluIHByb2dyZXNzJyk7XG4gICAgfVxuXG4gICAgdGhpcy5ydW5TdGF0ZVRyYW5zaXRpb24oY3VycmVudCA9PiB7XG4gICAgICBjb25zdCBzZXNzaW9uID0gbmV3IE5hdmlnYXRpb25TdGF0ZS5OYXZpZ2F0aW9uVHJhbnNpdGlvbih0aGlzLl9uYXZpZ2F0aW9uU2Vzc2lvbkNvbnRleHQsIGZhbHNlLCB0aGlzLnJvdXRlci5yb3V0ZXJTdGF0ZS5zbmFwc2hvdC51cmwpO1xuICAgICAgc2Vzc2lvbi5zdG9yZVZpc2l0KHZpc2l0KTtcbiAgICAgIHJldHVybiBzZXNzaW9uO1xuICAgIH0pO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBydW5OYXZpZ2F0aW9uQ29tbWFuZHModGhpcy5yb3V0ZXIpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICAvLyBSb3V0ZXIgaGFzIGZpbmlzaGVkIChzaW5jZSB0aGVyZSB3YXMgbm8gcm91dGVyIGNoYW5nZSByZXF1aXJlZCkgc28gd2VcbiAgICAgIC8vIG5lZWQgdG8gZW5kIHRoZSBuYXZpZ2F0aW9uIHNlc3Npb24uXG4gICAgICBpZiAodGhpcy5uYXZpZ2F0aW9uU3RhdGUuaXNUcmFuc2l0aW9uYWwgJiYgIXRoaXMucm91dGVyLmdldEN1cnJlbnROYXZpZ2F0aW9uKCkpIHtcbiAgICAgICAgdGhpcy5ydW5TdGF0ZVRyYW5zaXRpb24oc2Vzc2lvbiA9PiBzZXNzaW9uLm9uRW5kKG5ldyBOYXZpZ2F0aW9uRW5kKC0xLCAnJywgJycpKSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIHJ1blN0YXRlVHJhbnNpdGlvbih0cmFuc2l0aW9uOiAobmF2aWdhdGlvblNlc3Npb246IE5hdmlnYXRpb25TdGF0ZSkgPT4gTmF2aWdhdGlvblN0YXRlKSB7XG4gICAgY29uc3QgcHJldmlvdXMgPSB0aGlzLl9uYXZpZ2F0aW9uU3RhdGVNb2RlbC52YWx1ZTtcbiAgICBjb25zdCBuZXh0ID0gdHJhbnNpdGlvbih0aGlzLm5hdmlnYXRpb25TdGF0ZSk7XG4gICAgdGhpcy5fbmF2aWdhdGlvblN0YXRlTW9kZWwudmFsdWUgPSBuZXh0O1xuICAgIGlmIChuZXh0ICE9PSBwcmV2aW91cykge1xuICAgICAgcHJldmlvdXMuZGlzcG9zZSgpO1xuICAgICAgTG9nZ2VyLmdldCh0aGlzKS5pbmZvKGBSb3V0ZXIgU3RhdGUgVHJhbnNpdGlvbjogJHtwcmV2aW91cy50b1N0cmluZygpfSAtPiAke25leHQudG9TdHJpbmcoKX1gKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZVJvdXRlUGFyYW1ldGVycyh2aXNpdDogVmlzaXQpIHtcbiAgICBjb25zdCBkZWYgPSB2aXNpdC5wbGFjZURlZmluaXRpb247XG4gICAgcmV0dXJuIHZpc2l0Lmhhc1JvdXRlSWQoKSA/XG4gICAgICBbZGVmLmdldEZvcm1hdHRlZFJvdXRlSWQodmlzaXQpLCBkZWYuZ2V0Rm9ybWF0dGVkUm91dGVQYXJhbWV0ZXJzKHZpc2l0KV0gOlxuICAgICAgW2RlZi5nZXRGb3JtYXR0ZWRSb3V0ZVBhcmFtZXRlcnModmlzaXQpXTtcbiAgfVxuXG4gIGV4dHJhY3RDaGlsZFBhdGgoYWN0aXZhdGVkUm91dGU6IEFjdGl2YXRlZFJvdXRlU25hcHNob3QpOiBhbnlbXSB7XG4gICAgcmV0dXJuIF8uZmxhdHRlbihhY3RpdmF0ZWRSb3V0ZS5jaGlsZHJlbi5tYXAoY2hpbGQgPT4gY2hpbGQudXJsKSk7XG4gIH1cblxuICBwYXJzZVVybCh1cmw6IHN0cmluZyk6IFVybFNuYXBzaG90IHtcbiAgICByZXR1cm4gbmV3IFVybFNuYXBzaG90KHRoaXMudXJsU2VyaWFsaXplciwgdXJsKTtcbiAgfVxuXG4gIHJlc2V0QnJvd3NlckxvY2F0aW9uKHVybDogc3RyaW5nKSB7XG4gICAgdGhpcy5hbmd1bGFyTG9jYXRpb24uZ28odXJsKTtcbiAgfVxuXG4gIGdldEN1cnJlbnRSb3V0ZXJVcmwoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5yb3V0ZXIucm91dGVyU3RhdGUgPyB0aGlzLnJvdXRlci5yb3V0ZXJTdGF0ZS5zbmFwc2hvdC51cmwgOiBudWxsO1xuICB9XG5cbiAgZ2V0QWN0aXZlSW50ZXJhY3Rpb25JZHNGcm9tVXJsKHVybDogc3RyaW5nKTogc3RyaW5nW10ge1xuICAgIHJldHVybiB0aGlzLnBhcnNlVXJsKHVybCkuZ2V0SW50ZXJhY3Rpb25JZHMoKTtcbiAgfVxuXG4gIC8vIEBUcmFjZSgpXG4gIGhhc0FjdGl2ZUludGVyYWN0aW9uSWRzKHVybDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0QWN0aXZlSW50ZXJhY3Rpb25JZHNGcm9tVXJsKHVybCkubGVuZ3RoID4gMDtcbiAgfVxuXG5cbiAgQFRyYWNlKClcbiAgc3luY0ludGVyYWN0aW9uSWRzV2l0aFJvdXRlcigpIHtcbiAgICBhc3NlcnQuaXNGYWxzZXkodGhpcy5uYXZpZ2F0aW9uSW5Qcm9ncmVzcy52YWx1ZSk7IC8vIFVwZGF0aW5nIGludGVyYWN0aW9uIHJvdXRlcyBkdXJpbmcgYW4gZXhpc3RpbmcgbmF2aWdhdGlvbiBicmVha3MgYWxsIHRoZSB0aGluZ3MuXG4gICAgY29uc3QgY3VycmVudElkcyA9IHRoaXMuaW50ZXJhY3Rpb25TZXJ2aWNlLmFjdGl2ZUludGVyYWN0aW9uQ29udGV4dElkcy52YWx1ZTtcbiAgICBpZiAoXy5pc0VxdWFsKGN1cnJlbnRJZHMsIHRoaXMuZ2V0QWN0aXZlSW50ZXJhY3Rpb25JZHNGcm9tVXJsKHRoaXMuZ2V0Q3VycmVudFJvdXRlclVybCgpKSkpIHtcbiAgICAgIGNvbnNvbGUubG9nKCdhY3Rpdml0eSBpZHMgd2VyZSB0aGUgc2FtZSwgc2tpcHBpbmcnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGN1cnJlbnRJZHMubGVuZ3RoIDwgMSkge1xuICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy4nLCB7XG4gICAgICAgICAgb3V0bGV0czoge1xuICAgICAgICAgICAgW1VybFNuYXBzaG90LklOVEVSQUNUSU9OX1JPVVRFUl9PVVRMRVRdOiBudWxsXG4gICAgICAgICAgfVxuICAgICAgICB9XSwge1xuICAgICAgICAgIHJlcGxhY2VVcmw6IHRydWUgLy8gcmVtb3ZlIHRoZSBpbnRlcmFjdGlvbiBmcm9tIHRoZSBoaXN0b3J5LlxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHVybFNuYXBzaG90ID0gdGhpcy5wYXJzZVVybCh0aGlzLmdldEN1cnJlbnRSb3V0ZXJVcmwoKSk7XG5cbiAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycuJywge1xuICAgICAgICAgIG91dGxldHM6IHtcbiAgICAgICAgICAgIFtVcmxTbmFwc2hvdC5JTlRFUkFDVElPTl9ST1VURVJfT1VUTEVUXTogVXJsU25hcHNob3QuY3JlYXRlSW50ZXJhY3Rpb25PdXRsZXRSb3V0ZXJDb21tYW5kcyhjdXJyZW50SWRzKVxuICAgICAgICAgIH1cbiAgICAgICAgfV0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIl19
|