@sapui5/sap.fe.core 1.96.6 → 1.96.7
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/package.json
CHANGED
package/src/sap/fe/core/.library
CHANGED
|
@@ -19,7 +19,7 @@ sap.ui.define(
|
|
|
19
19
|
"sap/fe/core/actions/messageHandling",
|
|
20
20
|
"sap/fe/core/controllerextensions/Placeholder"
|
|
21
21
|
],
|
|
22
|
-
function(
|
|
22
|
+
function (
|
|
23
23
|
Service,
|
|
24
24
|
ServiceFactory,
|
|
25
25
|
Component,
|
|
@@ -50,7 +50,7 @@ sap.ui.define(
|
|
|
50
50
|
/**
|
|
51
51
|
* Initialize the routing service.
|
|
52
52
|
*/
|
|
53
|
-
init: function() {
|
|
53
|
+
init: function () {
|
|
54
54
|
var that = this;
|
|
55
55
|
var oContext = this.getContext();
|
|
56
56
|
if (oContext.scopeType === "component") {
|
|
@@ -71,11 +71,11 @@ sap.ui.define(
|
|
|
71
71
|
|
|
72
72
|
this.initPromise = Promise.resolve(that);
|
|
73
73
|
},
|
|
74
|
-
beforeExit: function() {
|
|
74
|
+
beforeExit: function () {
|
|
75
75
|
this.oRouter.detachRouteMatched(this._fnOnRouteMatched);
|
|
76
76
|
this.eventProvider.fireEvent("routeMatched", {});
|
|
77
77
|
},
|
|
78
|
-
exit: function() {
|
|
78
|
+
exit: function () {
|
|
79
79
|
this.eventProvider.destroy();
|
|
80
80
|
},
|
|
81
81
|
|
|
@@ -86,13 +86,13 @@ sap.ui.define(
|
|
|
86
86
|
* @param {object} oRootViewConfig The root view configuration from the manifest
|
|
87
87
|
* @private
|
|
88
88
|
*/
|
|
89
|
-
_parseRoutingConfiguration: function(oRoutingConfig, oRootViewConfig) {
|
|
89
|
+
_parseRoutingConfiguration: function (oRoutingConfig, oRootViewConfig) {
|
|
90
90
|
var that = this,
|
|
91
91
|
isFCL = oRootViewConfig && oRootViewConfig.viewName === "sap.fe.templates.RootContainer.view.Fcl";
|
|
92
92
|
|
|
93
93
|
// Information of targets
|
|
94
94
|
this._mTargets = {};
|
|
95
|
-
Object.keys(oRoutingConfig.targets).forEach(function(sTargetName) {
|
|
95
|
+
Object.keys(oRoutingConfig.targets).forEach(function (sTargetName) {
|
|
96
96
|
that._mTargets[sTargetName] = Object.assign({ targetName: sTargetName }, oRoutingConfig.targets[sTargetName]);
|
|
97
97
|
|
|
98
98
|
// View level for FCL cases is calculated from the target pattern
|
|
@@ -151,7 +151,7 @@ sap.ui.define(
|
|
|
151
151
|
that._mTargets[aRouteTargets[0]].FCLLevel = 3;
|
|
152
152
|
} else {
|
|
153
153
|
// Other FCL cases
|
|
154
|
-
aRouteTargets.forEach(function(sTargetName) {
|
|
154
|
+
aRouteTargets.forEach(function (sTargetName) {
|
|
155
155
|
switch (that._mTargets[sTargetName].controlAggregation) {
|
|
156
156
|
case "beginColumnPages":
|
|
157
157
|
that._mTargets[sTargetName].FCLLevel = 0;
|
|
@@ -169,7 +169,7 @@ sap.ui.define(
|
|
|
169
169
|
}
|
|
170
170
|
|
|
171
171
|
// Propagate viewLevel, contextPattern, FCLLevel and controlAggregation to parent targets
|
|
172
|
-
Object.keys(that._mTargets).forEach(function(sTargetName) {
|
|
172
|
+
Object.keys(that._mTargets).forEach(function (sTargetName) {
|
|
173
173
|
while (that._mTargets[sTargetName].parent) {
|
|
174
174
|
var sParentTargetName = that._mTargets[sTargetName].parent;
|
|
175
175
|
that._mTargets[sParentTargetName].viewLevel =
|
|
@@ -223,13 +223,13 @@ sap.ui.define(
|
|
|
223
223
|
|
|
224
224
|
// We need to establish the correct path to the different pages, including the navigation properties
|
|
225
225
|
Object.keys(that._mTargets)
|
|
226
|
-
.map(function(sTargetKey) {
|
|
226
|
+
.map(function (sTargetKey) {
|
|
227
227
|
return that._mTargets[sTargetKey];
|
|
228
228
|
})
|
|
229
|
-
.sort(function(a, b) {
|
|
229
|
+
.sort(function (a, b) {
|
|
230
230
|
return a.viewLevel < b.viewLevel ? -1 : 1;
|
|
231
231
|
})
|
|
232
|
-
.forEach(function(target) {
|
|
232
|
+
.forEach(function (target) {
|
|
233
233
|
// After sorting the targets per level we can then go through their navigation object and update the paths accordingly.
|
|
234
234
|
if (target.options) {
|
|
235
235
|
var settings = target.options.settings;
|
|
@@ -241,11 +241,11 @@ sap.ui.define(
|
|
|
241
241
|
settings.fullContextPath = sContextPath + "/";
|
|
242
242
|
}
|
|
243
243
|
}
|
|
244
|
-
Object.keys(settings.navigation || {}).forEach(function(sNavName) {
|
|
244
|
+
Object.keys(settings.navigation || {}).forEach(function (sNavName) {
|
|
245
245
|
// Check if it's a navigation property
|
|
246
246
|
var targetRoute = that._mRoutes[settings.navigation[sNavName].detail.route];
|
|
247
247
|
if (targetRoute && targetRoute.targets) {
|
|
248
|
-
targetRoute.targets.forEach(function(sTargetName) {
|
|
248
|
+
targetRoute.targets.forEach(function (sTargetName) {
|
|
249
249
|
if (
|
|
250
250
|
that._mTargets[sTargetName].options &&
|
|
251
251
|
that._mTargets[sTargetName].options.settings &&
|
|
@@ -273,7 +273,7 @@ sap.ui.define(
|
|
|
273
273
|
* @param {number} viewLevel The current level of view
|
|
274
274
|
* @returns {number} The level
|
|
275
275
|
*/
|
|
276
|
-
_getViewLevelFromPattern: function(sPattern, viewLevel) {
|
|
276
|
+
_getViewLevelFromPattern: function (sPattern, viewLevel) {
|
|
277
277
|
sPattern = sPattern.replace(":?query:", "");
|
|
278
278
|
var regex = new RegExp("/[^/]*$");
|
|
279
279
|
if (sPattern && sPattern[0] !== "/" && sPattern[0] !== "?") {
|
|
@@ -291,15 +291,15 @@ sap.ui.define(
|
|
|
291
291
|
}
|
|
292
292
|
},
|
|
293
293
|
|
|
294
|
-
_getRouteInformation: function(sRouteName) {
|
|
294
|
+
_getRouteInformation: function (sRouteName) {
|
|
295
295
|
return this._mRoutes[sRouteName];
|
|
296
296
|
},
|
|
297
297
|
|
|
298
|
-
_getTargetInformation: function(sTargetName) {
|
|
298
|
+
_getTargetInformation: function (sTargetName) {
|
|
299
299
|
return this._mTargets[sTargetName];
|
|
300
300
|
},
|
|
301
301
|
|
|
302
|
-
_getComponentId: function(sOwnerId, sComponentId) {
|
|
302
|
+
_getComponentId: function (sOwnerId, sComponentId) {
|
|
303
303
|
if (sComponentId.indexOf(sOwnerId + "---") === 0) {
|
|
304
304
|
return sComponentId.substr(sOwnerId.length + 3);
|
|
305
305
|
}
|
|
@@ -312,11 +312,11 @@ sap.ui.define(
|
|
|
312
312
|
* @param {object} oComponentInstance Instance of the component
|
|
313
313
|
* @returns {object} The configuration for the target
|
|
314
314
|
*/
|
|
315
|
-
getTargetInformationFor: function(oComponentInstance) {
|
|
315
|
+
getTargetInformationFor: function (oComponentInstance) {
|
|
316
316
|
var sTargetComponentId = this._getComponentId(oComponentInstance._sOwnerId, oComponentInstance.getId());
|
|
317
317
|
var that = this;
|
|
318
318
|
var sCorrectTargetName = null;
|
|
319
|
-
Object.keys(this._mTargets).forEach(function(sTargetName) {
|
|
319
|
+
Object.keys(this._mTargets).forEach(function (sTargetName) {
|
|
320
320
|
if (
|
|
321
321
|
that._mTargets[sTargetName].id === sTargetComponentId ||
|
|
322
322
|
that._mTargets[sTargetName].viewId === sTargetComponentId
|
|
@@ -327,17 +327,17 @@ sap.ui.define(
|
|
|
327
327
|
return this._getTargetInformation(sCorrectTargetName);
|
|
328
328
|
},
|
|
329
329
|
|
|
330
|
-
getLastSemanticMapping: function() {
|
|
330
|
+
getLastSemanticMapping: function () {
|
|
331
331
|
return this.oLastSemanticMapping;
|
|
332
332
|
},
|
|
333
333
|
|
|
334
|
-
setLastSemanticMapping: function(oMapping) {
|
|
334
|
+
setLastSemanticMapping: function (oMapping) {
|
|
335
335
|
this.oLastSemanticMapping = oMapping;
|
|
336
336
|
},
|
|
337
337
|
|
|
338
|
-
navigateTo: function(oContext, sRouteName, mParameterMapping, bPreserveHistory) {
|
|
338
|
+
navigateTo: function (oContext, sRouteName, mParameterMapping, bPreserveHistory) {
|
|
339
339
|
var sTargetURLPromise, bIsStickyMode;
|
|
340
|
-
if (oContext.getModel() && oContext.getModel().getMetaModel) {
|
|
340
|
+
if (oContext.getModel() && oContext.getModel().getMetaModel && oContext.getModel().getMetaModel()) {
|
|
341
341
|
bIsStickyMode = ModelHelper.isStickySessionSupported(oContext.getModel().getMetaModel());
|
|
342
342
|
}
|
|
343
343
|
if (!mParameterMapping) {
|
|
@@ -345,13 +345,13 @@ sap.ui.define(
|
|
|
345
345
|
sTargetURLPromise = Promise.resolve(SemanticKeyHelper.getSemanticPath(oContext));
|
|
346
346
|
} else {
|
|
347
347
|
sTargetURLPromise = this.prepareParameters(mParameterMapping, sRouteName, oContext).then(
|
|
348
|
-
function(mParameters) {
|
|
348
|
+
function (mParameters) {
|
|
349
349
|
return this.oRouter.getURL(sRouteName, mParameters);
|
|
350
350
|
}.bind(this)
|
|
351
351
|
);
|
|
352
352
|
}
|
|
353
353
|
return sTargetURLPromise.then(
|
|
354
|
-
function(sTargetURL) {
|
|
354
|
+
function (sTargetURL) {
|
|
355
355
|
this.oRouterProxy.navToHash(sTargetURL, bPreserveHistory, null, null, !bIsStickyMode);
|
|
356
356
|
}.bind(this)
|
|
357
357
|
);
|
|
@@ -365,18 +365,18 @@ sap.ui.define(
|
|
|
365
365
|
* @param {object} oContext The instance of the binding context
|
|
366
366
|
* @returns {Promise} A promise which resolves to the routing target parameters
|
|
367
367
|
*/
|
|
368
|
-
prepareParameters: function(mParameters, sTargetRoute, oContext) {
|
|
368
|
+
prepareParameters: function (mParameters, sTargetRoute, oContext) {
|
|
369
369
|
var oParametersPromise;
|
|
370
370
|
try {
|
|
371
371
|
var sContextPath = oContext.getPath();
|
|
372
372
|
var aContextPathParts = sContextPath.split("/");
|
|
373
373
|
var aAllResolvedParameterPromises = Object.keys(mParameters).map(
|
|
374
|
-
function(sParameterKey) {
|
|
374
|
+
function (sParameterKey) {
|
|
375
375
|
var sParameterMappingExpression = mParameters[sParameterKey];
|
|
376
376
|
// We assume the defined parameters will be compatible with a binding expression
|
|
377
377
|
var oParsedExpression = BindingParser.complexParser(sParameterMappingExpression);
|
|
378
378
|
var aParts = oParsedExpression.parts || [oParsedExpression];
|
|
379
|
-
var aResolvedParameterPromises = aParts.map(function(oPathPart) {
|
|
379
|
+
var aResolvedParameterPromises = aParts.map(function (oPathPart) {
|
|
380
380
|
var aRelativeParts = oPathPart.path.split("../");
|
|
381
381
|
// We go up the current context path as many times as necessary
|
|
382
382
|
var aLocalParts = aContextPathParts.slice(0, aContextPathParts.length - aRelativeParts.length + 1);
|
|
@@ -385,7 +385,7 @@ sap.ui.define(
|
|
|
385
385
|
});
|
|
386
386
|
|
|
387
387
|
return Promise.all(aResolvedParameterPromises).then(
|
|
388
|
-
function(aResolvedParameters) {
|
|
388
|
+
function (aResolvedParameters) {
|
|
389
389
|
var value = oParsedExpression.formatter
|
|
390
390
|
? oParsedExpression.formatter.apply(this, aResolvedParameters)
|
|
391
391
|
: aResolvedParameters.join("");
|
|
@@ -395,9 +395,9 @@ sap.ui.define(
|
|
|
395
395
|
}.bind(this)
|
|
396
396
|
);
|
|
397
397
|
|
|
398
|
-
oParametersPromise = Promise.all(aAllResolvedParameterPromises).then(function(aAllResolvedParameters) {
|
|
398
|
+
oParametersPromise = Promise.all(aAllResolvedParameterPromises).then(function (aAllResolvedParameters) {
|
|
399
399
|
var oParameters = {};
|
|
400
|
-
aAllResolvedParameters.forEach(function(oResolvedParameter) {
|
|
400
|
+
aAllResolvedParameters.forEach(function (oResolvedParameter) {
|
|
401
401
|
oParameters[oResolvedParameter.key] = oResolvedParameter.value;
|
|
402
402
|
});
|
|
403
403
|
return oParameters;
|
|
@@ -409,7 +409,7 @@ sap.ui.define(
|
|
|
409
409
|
return oParametersPromise;
|
|
410
410
|
},
|
|
411
411
|
|
|
412
|
-
_fireRouteMatchEvents: function(mParameters) {
|
|
412
|
+
_fireRouteMatchEvents: function (mParameters) {
|
|
413
413
|
this.eventProvider.fireEvent("routeMatched", mParameters);
|
|
414
414
|
this.eventProvider.fireEvent("afterRouteMatched", mParameters);
|
|
415
415
|
|
|
@@ -438,7 +438,7 @@ sap.ui.define(
|
|
|
438
438
|
* @ui5-restricted
|
|
439
439
|
* @final
|
|
440
440
|
*/
|
|
441
|
-
navigateToContext: function(oContext, mParameters, oViewData, oCurrentTargetInfo) {
|
|
441
|
+
navigateToContext: function (oContext, mParameters, oViewData, oCurrentTargetInfo) {
|
|
442
442
|
var sTargetRoute, oRouteParametersPromise, bIsStickyMode;
|
|
443
443
|
|
|
444
444
|
if (oContext.getModel() && oContext.getModel().getMetaModel) {
|
|
@@ -530,7 +530,7 @@ sap.ui.define(
|
|
|
530
530
|
|
|
531
531
|
if (sTargetRoute && oRouteParametersPromise) {
|
|
532
532
|
return oRouteParametersPromise.then(
|
|
533
|
-
function(oRouteParameters) {
|
|
533
|
+
function (oRouteParameters) {
|
|
534
534
|
oRouteParameters.bIsStickyMode = bIsStickyMode;
|
|
535
535
|
this.oRouter.navTo(sTargetRoute, oRouteParameters);
|
|
536
536
|
return Promise.resolve();
|
|
@@ -552,7 +552,7 @@ sap.ui.define(
|
|
|
552
552
|
* @param {sap.ui.model.odata.v4.Context} oContext The context
|
|
553
553
|
* @returns {boolean} `true` or `false` if the current state is impacted or not
|
|
554
554
|
*/
|
|
555
|
-
isCurrentStateImpactedBy: function(oContext) {
|
|
555
|
+
isCurrentStateImpactedBy: function (oContext) {
|
|
556
556
|
var sPath = oContext.getPath();
|
|
557
557
|
|
|
558
558
|
// First, check with the technical path. We have to try it, because for level > 1, we
|
|
@@ -576,7 +576,7 @@ sap.ui.define(
|
|
|
576
576
|
}
|
|
577
577
|
},
|
|
578
578
|
|
|
579
|
-
_findPathToNavigate: function(sPath) {
|
|
579
|
+
_findPathToNavigate: function (sPath) {
|
|
580
580
|
var regex = new RegExp("/[^/]*$");
|
|
581
581
|
sPath = sPath.replace(regex, "");
|
|
582
582
|
if (this.oRouter.match(sPath) || sPath === "") {
|
|
@@ -586,7 +586,7 @@ sap.ui.define(
|
|
|
586
586
|
}
|
|
587
587
|
},
|
|
588
588
|
|
|
589
|
-
_checkContextForSemanticPath: function(oContext) {
|
|
589
|
+
_checkContextForSemanticPath: function (oContext) {
|
|
590
590
|
var sPath = oContext.getPath();
|
|
591
591
|
|
|
592
592
|
// First, check if this is a level-1 object (path = /aaa(bbb))
|
|
@@ -605,7 +605,7 @@ sap.ui.define(
|
|
|
605
605
|
return ModelHelper.isDraftSupported(oMetaModel, sPath);
|
|
606
606
|
},
|
|
607
607
|
|
|
608
|
-
_getPathFromContext: function(oContext, mParameters) {
|
|
608
|
+
_getPathFromContext: function (oContext, mParameters) {
|
|
609
609
|
var sPath;
|
|
610
610
|
|
|
611
611
|
if (oContext.isA("sap.ui.model.odata.v4.ODataListBinding") && oContext.isRelative()) {
|
|
@@ -647,7 +647,7 @@ sap.ui.define(
|
|
|
647
647
|
return sPath;
|
|
648
648
|
},
|
|
649
649
|
|
|
650
|
-
_calculateLayout: function(sPath, mParameters) {
|
|
650
|
+
_calculateLayout: function (sPath, mParameters) {
|
|
651
651
|
var FCLLevel = mParameters.FCLLevel;
|
|
652
652
|
if (mParameters.updateFCLLevel) {
|
|
653
653
|
FCLLevel += mParameters.updateFCLLevel;
|
|
@@ -665,7 +665,7 @@ sap.ui.define(
|
|
|
665
665
|
*
|
|
666
666
|
* @param {object} oEvent The event
|
|
667
667
|
*/
|
|
668
|
-
_beforeRouteMatched: function(oEvent) {
|
|
668
|
+
_beforeRouteMatched: function (oEvent) {
|
|
669
669
|
var bPlaceholderEnabled = new Placeholder().isPlaceholderEnabled();
|
|
670
670
|
if (!bPlaceholderEnabled) {
|
|
671
671
|
var oRootView = this.oAppComponent.getRootControl();
|
|
@@ -679,7 +679,7 @@ sap.ui.define(
|
|
|
679
679
|
*
|
|
680
680
|
* @param {object} oEvent The event
|
|
681
681
|
*/
|
|
682
|
-
_onRouteMatched: function(oEvent) {
|
|
682
|
+
_onRouteMatched: function (oEvent) {
|
|
683
683
|
var oAppStateHandler = this.oAppComponent.getAppStateHandler(),
|
|
684
684
|
oRootView = this.oAppComponent.getRootControl(),
|
|
685
685
|
that = this;
|
|
@@ -713,10 +713,10 @@ sap.ui.define(
|
|
|
713
713
|
if (!history.state || history.state.feLevel === undefined) {
|
|
714
714
|
this.oRouterProxy
|
|
715
715
|
.restoreHistory()
|
|
716
|
-
.then(function() {
|
|
716
|
+
.then(function () {
|
|
717
717
|
that.oRouterProxy.resolveRouteMatch();
|
|
718
718
|
})
|
|
719
|
-
.catch(function(oError) {
|
|
719
|
+
.catch(function (oError) {
|
|
720
720
|
Log.error("Error while restoring history", oError);
|
|
721
721
|
});
|
|
722
722
|
} else {
|
|
@@ -724,44 +724,44 @@ sap.ui.define(
|
|
|
724
724
|
}
|
|
725
725
|
},
|
|
726
726
|
|
|
727
|
-
attachRouteMatched: function(oData, fnFunction, oListener) {
|
|
727
|
+
attachRouteMatched: function (oData, fnFunction, oListener) {
|
|
728
728
|
this.eventProvider.attachEvent("routeMatched", oData, fnFunction, oListener);
|
|
729
729
|
},
|
|
730
|
-
detachRouteMatched: function(fnFunction, oListener) {
|
|
730
|
+
detachRouteMatched: function (fnFunction, oListener) {
|
|
731
731
|
this.eventProvider.detachEvent("routeMatched", fnFunction, oListener);
|
|
732
732
|
},
|
|
733
|
-
attachAfterRouteMatched: function(oData, fnFunction, oListener) {
|
|
733
|
+
attachAfterRouteMatched: function (oData, fnFunction, oListener) {
|
|
734
734
|
this.eventProvider.attachEvent("afterRouteMatched", oData, fnFunction, oListener);
|
|
735
735
|
},
|
|
736
|
-
detachAfterRouteMatched: function(fnFunction, oListener) {
|
|
736
|
+
detachAfterRouteMatched: function (fnFunction, oListener) {
|
|
737
737
|
this.eventProvider.detachEvent("afterRouteMatched", fnFunction, oListener);
|
|
738
738
|
},
|
|
739
739
|
|
|
740
|
-
getRouteFromHash: function(oRouter, oAppComponent) {
|
|
740
|
+
getRouteFromHash: function (oRouter, oAppComponent) {
|
|
741
741
|
var sHash = oRouter.getHashChanger().hash;
|
|
742
742
|
var oRouteInfo = oRouter.getRouteInfoByHash(sHash);
|
|
743
743
|
return oAppComponent
|
|
744
744
|
.getMetadata()
|
|
745
745
|
.getManifestEntry("/sap.ui5/routing/routes")
|
|
746
|
-
.filter(function(oRoute) {
|
|
746
|
+
.filter(function (oRoute) {
|
|
747
747
|
return oRoute.name === oRouteInfo.name;
|
|
748
748
|
})[0];
|
|
749
749
|
},
|
|
750
|
-
getTargetsFromRoute: function(oRoute, oAppComponent) {
|
|
750
|
+
getTargetsFromRoute: function (oRoute, oAppComponent) {
|
|
751
751
|
var oTarget = oRoute.target;
|
|
752
752
|
var that = this;
|
|
753
753
|
if (typeof oTarget === "string") {
|
|
754
754
|
return [this._mTargets[oTarget]];
|
|
755
755
|
} else {
|
|
756
756
|
var aTarget = [];
|
|
757
|
-
oTarget.forEach(function(sTarget) {
|
|
757
|
+
oTarget.forEach(function (sTarget) {
|
|
758
758
|
aTarget.push(that._mTargets[sTarget]);
|
|
759
759
|
});
|
|
760
760
|
return aTarget;
|
|
761
761
|
}
|
|
762
762
|
},
|
|
763
763
|
|
|
764
|
-
initializeRouting: function() {
|
|
764
|
+
initializeRouting: function () {
|
|
765
765
|
var that = this;
|
|
766
766
|
|
|
767
767
|
// Attach router handlers
|
|
@@ -776,14 +776,10 @@ sap.ui.define(
|
|
|
776
776
|
EditState.resetEditState();
|
|
777
777
|
this.bExitOnNavigateBackToRoot = !this.oRouter.match("");
|
|
778
778
|
|
|
779
|
-
var bIsIappState =
|
|
780
|
-
that.oRouter
|
|
781
|
-
.getHashChanger()
|
|
782
|
-
.getHash()
|
|
783
|
-
.indexOf("sap-iapp-state") !== -1;
|
|
779
|
+
var bIsIappState = that.oRouter.getHashChanger().getHash().indexOf("sap-iapp-state") !== -1;
|
|
784
780
|
var initPromise = that.oAppComponent
|
|
785
781
|
.getStartupParameters()
|
|
786
|
-
.then(function(oStartupParameters) {
|
|
782
|
+
.then(function (oStartupParameters) {
|
|
787
783
|
var bHasStartUpParameters = oStartupParameters !== undefined && Object.keys(oStartupParameters).length !== 0;
|
|
788
784
|
// Manage startup parameters (in case of no iapp-state)
|
|
789
785
|
if (!bIsIappState && bHasStartUpParameters) {
|
|
@@ -800,14 +796,14 @@ sap.ui.define(
|
|
|
800
796
|
}
|
|
801
797
|
}
|
|
802
798
|
})
|
|
803
|
-
.catch(function(oError) {
|
|
799
|
+
.catch(function (oError) {
|
|
804
800
|
Log.error("Error during routing initialization", oError);
|
|
805
801
|
});
|
|
806
802
|
|
|
807
803
|
return initPromise;
|
|
808
804
|
},
|
|
809
805
|
|
|
810
|
-
getDefaultCreateHash: function(oStartupParameters) {
|
|
806
|
+
getDefaultCreateHash: function (oStartupParameters) {
|
|
811
807
|
var sContextPath = this.getContextPath(),
|
|
812
808
|
sDefaultCreateHash =
|
|
813
809
|
oStartupParameters && oStartupParameters.preferredMode ? oStartupParameters.preferredMode[0] : "create",
|
|
@@ -825,11 +821,11 @@ sap.ui.define(
|
|
|
825
821
|
}
|
|
826
822
|
},
|
|
827
823
|
|
|
828
|
-
_managePreferredModeCreateStartup: function(oStartupParameters) {
|
|
824
|
+
_managePreferredModeCreateStartup: function (oStartupParameters) {
|
|
829
825
|
var that = this;
|
|
830
826
|
return this.oMetaModel
|
|
831
827
|
.requestObject(this.getContextPath() + "@")
|
|
832
|
-
.then(function(oEntitySetAnnotations) {
|
|
828
|
+
.then(function (oEntitySetAnnotations) {
|
|
833
829
|
var sMetaPath,
|
|
834
830
|
bCreatable = true;
|
|
835
831
|
if (
|
|
@@ -864,16 +860,16 @@ sap.ui.define(
|
|
|
864
860
|
that.bExitOnNavigateBackToRoot = true;
|
|
865
861
|
}
|
|
866
862
|
})
|
|
867
|
-
.catch(function() {
|
|
863
|
+
.catch(function () {
|
|
868
864
|
Log.error("Cannot fetch the Annotations");
|
|
869
865
|
});
|
|
870
866
|
},
|
|
871
867
|
|
|
872
|
-
_requestObjectsFromParameters: function(oStartUpParameters, aExternallyNavigablePages) {
|
|
868
|
+
_requestObjectsFromParameters: function (oStartUpParameters, aExternallyNavigablePages) {
|
|
873
869
|
var that = this;
|
|
874
870
|
|
|
875
871
|
// Load the respective objects for all object pages found in aExternallyNavigablePages
|
|
876
|
-
var aContextPromises = aExternallyNavigablePages.map(function(oPage) {
|
|
872
|
+
var aContextPromises = aExternallyNavigablePages.map(function (oPage) {
|
|
877
873
|
var oCompleteFilter, oListBind;
|
|
878
874
|
if (oPage.isSemanticKeyNavigation) {
|
|
879
875
|
oCompleteFilter = that._createFilter(oPage.draft, oPage.semanticKeys, oStartUpParameters);
|
|
@@ -883,7 +879,7 @@ sap.ui.define(
|
|
|
883
879
|
// only request a minimum of fields to boost backend performance since this is only used to check if an object exists
|
|
884
880
|
oListBind = that.oModel.bindList(oPage.contextPath, undefined, undefined, oCompleteFilter, {
|
|
885
881
|
"$select": oPage.isSemanticKeyNavigation
|
|
886
|
-
? oPage.semanticKeys.map(function(key) {
|
|
882
|
+
? oPage.semanticKeys.map(function (key) {
|
|
887
883
|
return key.$PropertyPath;
|
|
888
884
|
})
|
|
889
885
|
: oPage.technicalKeys
|
|
@@ -894,14 +890,14 @@ sap.ui.define(
|
|
|
894
890
|
return Promise.all(aContextPromises);
|
|
895
891
|
},
|
|
896
892
|
|
|
897
|
-
_manageDeeplinkStartup: function(oStartUpParameters) {
|
|
893
|
+
_manageDeeplinkStartup: function (oStartUpParameters) {
|
|
898
894
|
var that = this,
|
|
899
895
|
aExternallyNavigablePages;
|
|
900
896
|
|
|
901
897
|
// Need to preload the entity set informations in the metamodel
|
|
902
898
|
return this.oMetaModel
|
|
903
899
|
.requestObject("/$EntityContainer/")
|
|
904
|
-
.then(function() {
|
|
900
|
+
.then(function () {
|
|
905
901
|
// Check if semantic keys are present in url parameters for every object page at each level
|
|
906
902
|
var oLevelOfObjectPages = that._getNavigablePages(that.oAppComponent.getManifest()["sap.ui5"].routing);
|
|
907
903
|
|
|
@@ -909,11 +905,11 @@ sap.ui.define(
|
|
|
909
905
|
|
|
910
906
|
return that._requestObjectsFromParameters(oStartUpParameters, aExternallyNavigablePages);
|
|
911
907
|
})
|
|
912
|
-
.then(function(aValues) {
|
|
908
|
+
.then(function (aValues) {
|
|
913
909
|
if (aValues.length) {
|
|
914
910
|
// Make sure we only get 1 context per promise, and flatten the array
|
|
915
911
|
var aContexts = [];
|
|
916
|
-
aValues.forEach(function(aFoundContexts) {
|
|
912
|
+
aValues.forEach(function (aFoundContexts) {
|
|
917
913
|
if (aFoundContexts.length === 1) {
|
|
918
914
|
aContexts.push(aFoundContexts[0]);
|
|
919
915
|
}
|
|
@@ -929,12 +925,12 @@ sap.ui.define(
|
|
|
929
925
|
}
|
|
930
926
|
}
|
|
931
927
|
})
|
|
932
|
-
.catch(function(error) {
|
|
928
|
+
.catch(function (error) {
|
|
933
929
|
Log.info("Could not find results for list bind: " + error);
|
|
934
930
|
});
|
|
935
931
|
},
|
|
936
932
|
|
|
937
|
-
_getNavigablePages: function(oRouting) {
|
|
933
|
+
_getNavigablePages: function (oRouting) {
|
|
938
934
|
var aRoutes = oRouting.routes,
|
|
939
935
|
oTargets = oRouting.targets,
|
|
940
936
|
mPageMap = {};
|
|
@@ -983,7 +979,7 @@ sap.ui.define(
|
|
|
983
979
|
* @param {object} oStartupParameters The startup parameters of the application
|
|
984
980
|
* @returns {Array} Array of all pages that can be reached with the provided parameters
|
|
985
981
|
*/
|
|
986
|
-
_findTargetPagesFromStartupParams: function(mPagesByLevel, oStartupParameters) {
|
|
982
|
+
_findTargetPagesFromStartupParams: function (mPagesByLevel, oStartupParameters) {
|
|
987
983
|
var iLevel = 0,
|
|
988
984
|
aReachablePages = [],
|
|
989
985
|
bFound = true;
|
|
@@ -1045,7 +1041,7 @@ sap.ui.define(
|
|
|
1045
1041
|
* @param {object} oStartUpParameters URL parameters
|
|
1046
1042
|
* @returns {object} Filters for the entity set
|
|
1047
1043
|
*/
|
|
1048
|
-
_createFilter: function(oDraftDetail, aKeys, oStartUpParameters) {
|
|
1044
|
+
_createFilter: function (oDraftDetail, aKeys, oStartUpParameters) {
|
|
1049
1045
|
var aFilters = [],
|
|
1050
1046
|
bFilteringCaseSensitive = ModelHelper.isFilteringCaseSensitive(this.oMetaModel);
|
|
1051
1047
|
|
|
@@ -1090,7 +1086,7 @@ sap.ui.define(
|
|
|
1090
1086
|
* @param {object} oParameters URL parameters
|
|
1091
1087
|
* @returns {boolean} True if Semantic Keys are available in URL
|
|
1092
1088
|
*/
|
|
1093
|
-
_checkForKeys: function(aKeys, oParameters) {
|
|
1089
|
+
_checkForKeys: function (aKeys, oParameters) {
|
|
1094
1090
|
if (aKeys && aKeys.length) {
|
|
1095
1091
|
for (var j = 0; j < aKeys.length; j++) {
|
|
1096
1092
|
var sPropertyPath = aKeys[j].$PropertyPath;
|
|
@@ -1108,7 +1104,7 @@ sap.ui.define(
|
|
|
1108
1104
|
return false;
|
|
1109
1105
|
},
|
|
1110
1106
|
|
|
1111
|
-
_buildStartupHash: function(aReachablePages, aContexts) {
|
|
1107
|
+
_buildStartupHash: function (aReachablePages, aContexts) {
|
|
1112
1108
|
var sHash;
|
|
1113
1109
|
|
|
1114
1110
|
if (aContexts.length === 1) {
|
|
@@ -1130,7 +1126,7 @@ sap.ui.define(
|
|
|
1130
1126
|
var aParts = aReachablePages[aReachablePages.length - 1].pattern.split("/");
|
|
1131
1127
|
|
|
1132
1128
|
sHash = aParts
|
|
1133
|
-
.map(function(sPart, iIndex) {
|
|
1129
|
+
.map(function (sPart, iIndex) {
|
|
1134
1130
|
var sKey = sPart.split("(")[0];
|
|
1135
1131
|
var sValue = aContexts[iIndex].getPath().split("(")[1];
|
|
1136
1132
|
return sKey + "(" + sValue; // sValue contains the closing ')'
|
|
@@ -1141,7 +1137,7 @@ sap.ui.define(
|
|
|
1141
1137
|
return sHash;
|
|
1142
1138
|
},
|
|
1143
1139
|
|
|
1144
|
-
getOutbounds: function() {
|
|
1140
|
+
getOutbounds: function () {
|
|
1145
1141
|
return this.outbounds;
|
|
1146
1142
|
},
|
|
1147
1143
|
|
|
@@ -1152,13 +1148,13 @@ sap.ui.define(
|
|
|
1152
1148
|
*
|
|
1153
1149
|
* @ui5-restricted
|
|
1154
1150
|
*/
|
|
1155
|
-
getContextPath: function() {
|
|
1151
|
+
getContextPath: function () {
|
|
1156
1152
|
return this.sContextPath;
|
|
1157
1153
|
}
|
|
1158
1154
|
});
|
|
1159
1155
|
|
|
1160
1156
|
return ServiceFactory.extend("sap.fe.core.services.RoutingServiceFactory", {
|
|
1161
|
-
createInstance: function(oServiceContext) {
|
|
1157
|
+
createInstance: function (oServiceContext) {
|
|
1162
1158
|
var oRoutingService = new RoutingService(oServiceContext);
|
|
1163
1159
|
return oRoutingService.initPromise;
|
|
1164
1160
|
}
|
|
@@ -177,7 +177,7 @@ sap.ui.define(["sap/ui/mdc/condition/Condition", "sap/ui/mdc/enum/ConditionValid
|
|
|
177
177
|
_exports.getOperator = getOperator;
|
|
178
178
|
|
|
179
179
|
function getFiltersConditionsFromSelectionVariant(entityTypeProperties, selectionVariant, getCustomConditions) {
|
|
180
|
-
var
|
|
180
|
+
var oFilterConditions = {};
|
|
181
181
|
|
|
182
182
|
if (selectionVariant) {
|
|
183
183
|
var aSelectOptions = selectionVariant.SelectOptions;
|
|
@@ -196,11 +196,11 @@ sap.ui.define(["sap/ui/mdc/condition/Condition", "sap/ui/mdc/enum/ConditionValid
|
|
|
196
196
|
Ranges === null || Ranges === void 0 ? void 0 : Ranges.forEach(function (Range) {
|
|
197
197
|
var oCondition = getCustomConditions ? getCustomConditions(Range, oValidProperty, sPropertyName) : getConditions(Range, oValidProperty);
|
|
198
198
|
aConditions.push(oCondition);
|
|
199
|
-
|
|
200
|
-
if (aConditions.length) {
|
|
201
|
-
ofilterConditions[sPropertyName] = (ofilterConditions[sPropertyName] || []).concat(aConditions);
|
|
202
|
-
}
|
|
203
199
|
});
|
|
200
|
+
|
|
201
|
+
if (aConditions.length) {
|
|
202
|
+
oFilterConditions[sPropertyName] = (oFilterConditions[sPropertyName] || []).concat(aConditions);
|
|
203
|
+
}
|
|
204
204
|
})();
|
|
205
205
|
}
|
|
206
206
|
}
|
|
@@ -220,11 +220,11 @@ sap.ui.define(["sap/ui/mdc/condition/Condition", "sap/ui/mdc/enum/ConditionValid
|
|
|
220
220
|
validated: ConditionValidated.Validated,
|
|
221
221
|
isParameter: true
|
|
222
222
|
};
|
|
223
|
-
|
|
223
|
+
oFilterConditions[sPropertyPath] = [oCondition];
|
|
224
224
|
});
|
|
225
225
|
}
|
|
226
226
|
|
|
227
|
-
return
|
|
227
|
+
return oFilterConditions;
|
|
228
228
|
}
|
|
229
229
|
|
|
230
230
|
_exports.getFiltersConditionsFromSelectionVariant = getFiltersConditionsFromSelectionVariant;
|
|
@@ -328,4 +328,4 @@ sap.ui.define(["sap/ui/mdc/condition/Condition", "sap/ui/mdc/enum/ConditionValid
|
|
|
328
328
|
getFilterConditions.requiresIContext = true;
|
|
329
329
|
return _exports;
|
|
330
330
|
}, false);
|
|
331
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkZpbHRlckhlbHBlci50cyJdLCJuYW1lcyI6WyJhVmFsaWRUeXBlcyIsIm9FeGNsdWRlTWFwIiwiZ2V0VHlwZUNvbXBsaWFudFZhbHVlIiwic1ZhbHVlIiwic1R5cGUiLCJvVmFsdWUiLCJpbmRleE9mIiwidW5kZWZpbmVkIiwiaXNOYU4iLCJwYXJzZUZsb2F0IiwicGFyc2VJbnQiLCJtYXRjaCIsImxlbmd0aCIsInNwbGl0IiwicmVzb2x2ZUNvbmRpdGlvblZhbHVlcyIsInNPcHRpb24iLCJvVjEiLCJvVjIiLCJzU2lnbiIsIm9WYWx1ZTIiLCJzSW50ZXJuYWxPcGVyYXRpb24iLCJvQ29uZGl0aW9uIiwidmFsdWVzIiwiaXNFbXB0eSIsIm5JbmRleE9mIiwibkxhc3RJbmRleCIsImxhc3RJbmRleE9mIiwic3Vic3RyaW5nIiwib3BlcmF0b3IiLCJwdXNoIiwiZ2V0T3BlcmF0b3IiLCJzT3BlcmF0b3IiLCJnZXRGaWx0ZXJzQ29uZGl0aW9uc0Zyb21TZWxlY3Rpb25WYXJpYW50IiwiZW50aXR5VHlwZVByb3BlcnRpZXMiLCJzZWxlY3Rpb25WYXJpYW50IiwiZ2V0Q3VzdG9tQ29uZGl0aW9ucyIsIm9maWx0ZXJDb25kaXRpb25zIiwiYVNlbGVjdE9wdGlvbnMiLCJTZWxlY3RPcHRpb25zIiwiYVBhcmFtZXRlcnMiLCJQYXJhbWV0ZXJzIiwiYVZhbGlkUHJvcGVydGllcyIsImZvckVhY2giLCJzZWxlY3RPcHRpb24iLCJwcm9wZXJ0eU5hbWUiLCJQcm9wZXJ0eU5hbWUiLCJzUHJvcGVydHlOYW1lIiwidmFsdWUiLCIkUHJvcGVydHlQYXRoIiwiUmFuZ2VzIiwia2V5Iiwib1ZhbGlkUHJvcGVydHkiLCJhQ29uZGl0aW9ucyIsIlJhbmdlIiwiZ2V0Q29uZGl0aW9ucyIsImNvbmNhdCIsInBhcmFtZXRlciIsInNQcm9wZXJ0eVBhdGgiLCJ2YWx1ZTEiLCJQcm9wZXJ0eVZhbHVlIiwidmFsdWUyIiwicGF0aCIsImlzUGFyYW1ldGVyIiwidmFsaWRhdGVkIiwiQ29uZGl0aW9uVmFsaWRhdGVkIiwiVmFsaWRhdGVkIiwic2lnbiIsIlNpZ24iLCJPcHRpb24iLCJvVmFsdWUxIiwiTG93IiwiJFR5cGUiLCJIaWdoIiwib0NvbmRpdGlvblZhbHVlcyIsImNyZWF0ZUNvbmRpdGlvbiIsImdldERlZmF1bHRWYWx1ZUZpbHRlcnMiLCJvQ29udGV4dCIsInByb3BlcnRpZXMiLCJmaWx0ZXJDb25kaXRpb25zIiwiZW50aXR5U2V0UGF0aCIsImdldEludGVyZmFjZSIsImdldFBhdGgiLCJvTWV0YU1vZGVsIiwiZ2V0TW9kZWwiLCJkZWZhdWx0RmlsdGVyVmFsdWUiLCJnZXRPYmplY3QiLCJnZXREZWZhdWx0U2VtYW50aWNEYXRlRmlsdGVycyIsImRlZmF1bHRTZW1hbnRpY0RhdGVzIiwiZ2V0RWRpdFN0YXR1c0ZpbHRlciIsImdldEZpbHRlckNvbmRpdGlvbnMiLCJlZGl0U3RhdGVGaWx0ZXIiLCJlbnRpdHlUeXBlQW5ub3RhdGlvbnMiLCJkZWZhdWx0RmlsdGVycyIsImRlZmF1bHRTZW1hbnRpY0RhdGVGaWx0ZXJzIiwiT2JqZWN0Iiwia2V5cyIsIkpTT04iLCJzdHJpbmdpZnkiLCJyZXF1aXJlc0lDb250ZXh0Il0sIm1hcHBpbmdzIjoiO0FBQUE7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7O0FBU0EsTUFBTUEsV0FBVyxHQUFHLENBQ25CLGFBRG1CLEVBRW5CLFVBRm1CLEVBR25CLFVBSG1CLEVBSW5CLGNBSm1CLEVBS25CLG9CQUxtQixFQU1uQixhQU5tQixFQU9uQixZQVBtQixFQVFuQixXQVJtQixFQVNuQixVQVRtQixFQVVuQixXQVZtQixFQVduQixXQVhtQixFQVluQixXQVptQixFQWFuQixXQWJtQixFQWNuQixZQWRtQixFQWVuQixZQWZtQixFQWdCbkIsVUFoQm1CLEVBaUJuQixlQWpCbUIsQ0FBcEI7QUFvQkEsTUFBTUMsV0FBZ0MsR0FBRztBQUN4QyxnQkFBWSxhQUQ0QjtBQUV4QyxrQkFBYyxlQUYwQjtBQUd4QyxnQkFBWSxhQUg0QjtBQUl4QyxhQUFTLFVBSitCO0FB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R0FBdUMsSUFBdkMiLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFNlbGVjdE9wdGlvblR5cGUsIFNlbGVjdGlvblZhcmlhbnRUeXBlVHlwZXMgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvZGlzdC9nZW5lcmF0ZWQvVUlcIjtcbmltcG9ydCB7IGNyZWF0ZUNvbmRpdGlvbiB9IGZyb20gXCJzYXAvdWkvbWRjL2NvbmRpdGlvbi9Db25kaXRpb25cIjtcbmltcG9ydCB7IENvbmRpdGlvblZhbGlkYXRlZCB9IGZyb20gXCJzYXAvdWkvbWRjL2VudW1cIjtcblxuZXhwb3J0IHR5cGUgRmlsdGVyQ29uZGl0aW9ucyA9IHtcblx0b3BlcmF0b3I6IHN0cmluZztcblx0dmFsdWVzOiBBcnJheTxzdHJpbmc+O1xuXHRpc0VtcHR5PzogYm9vbGVhbiB8IG51bGw7XG5cdHZhbGlkYXRlZD86IHN0cmluZztcbn07XG5cbmNvbnN0IGFWYWxpZFR5cGVzID0gW1xuXHRcIkVkbS5Cb29sZWFuXCIsXG5cdFwiRWRtLkJ5dGVcIixcblx0XCJFZG0uRGF0ZVwiLFxuXHRcIkVkbS5EYXRlVGltZVwiLFxuXHRcIkVkbS5EYXRlVGltZU9mZnNldFwiLFxuXHRcIkVkbS5EZWNpbWFsXCIsXG5cdFwiRWRtLkRvdWJsZVwiLFxuXHRcIkVkbS5GbG9hdFwiLFxuXHRcIkVkbS5HdWlkXCIsXG5cdFwiRWRtLkludDE2XCIsXG5cdFwiRWRtLkludDMyXCIsXG5cdFwiRWRtLkludDY0XCIsXG5cdFwiRWRtLlNCeXRlXCIsXG5cdFwiRWRtLlNpbmdsZVwiLFxuXHRcIkVkbS5TdHJpbmdcIixcblx0XCJFZG0uVGltZVwiLFxuXHRcIkVkbS5UaW1lT2ZEYXlcIlxuXTtcblxuY29uc3Qgb0V4Y2x1ZGVNYXA6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7XG5cdFwiQ29udGFpbnNcIjogXCJOb3RDb250YWluc1wiLFxuXHRcIlN0YXJ0c1dpdGhcIjogXCJOb3RTdGFydHNXaXRoXCIsXG5cdFwiRW5kc1dpdGhcIjogXCJOb3RFbmRzV2l0aFwiLFxuXHRcIkVtcHR5XCI6IFwiTm90RW1wdHlcIixcblx0XCJOb3RFbXB0eVwiOiBcIkVtcHR5XCIsXG5cdFwiTEVcIjogXCJOT1RMRVwiLFxuXHRcIkdFXCI6IFwiTk9UR0VcIixcblx0XCJMVFwiOiBcIk5PVExUXCIsXG5cdFwiR1RcIjogXCJOT1RHVFwiLFxuXHRcIkJUXCI6IFwiTk9UQlRcIixcblx0XCJORVwiOiBcIkVRXCIsXG5cdFwiRVFcIjogXCJORVwiXG59O1xuXG4vKipcbiAqIE1ldGhvZCB0byBnZXQgdGhlIGNvbXBsaWFudCB2YWx1ZSB0eXBlIGJhc2VkIG9uIHRoZSBkYXRhIHR5cGUuXG4gKlxuICogQHBhcmFtICBzVmFsdWUgUmF3IHZhbHVlXG4gKiBAcGFyYW0gIHNUeXBlIFRoZSBwcm9wZXJ0eSB0eXBlXG4gKiBAcmV0dXJucyBWYWx1ZSB0byBiZSBwcm9wYWdhdGVkIHRvIHRoZSBjb25kaXRpb24uXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFR5cGVDb21wbGlhbnRWYWx1ZShzVmFsdWU6IGFueSwgc1R5cGU6IHN0cmluZykge1xuXHRsZXQgb1ZhbHVlO1xuXHRpZiAoYVZhbGlkVHlwZXMuaW5kZXhPZihzVHlwZSkgPiAtMSkge1xuXHRcdG9WYWx1ZSA9IHNWYWx1ZTtcblx0XHRpZiAoc1R5cGUgPT09IFwiRWRtLkJvb2xlYW5cIikge1xuXHRcdFx0b1ZhbHVlID0gc1ZhbHVlID09PSBcInRydWVcIiB8fCAoc1ZhbHVlID09PSBcImZhbHNlXCIgPyBmYWxzZSA6IHVuZGVmaW5lZCk7XG5cdFx0fSBlbHNlIGlmIChzVHlwZSA9PT0gXCJFZG0uRG91YmxlXCIgfHwgc1R5cGUgPT09IFwiRWRtLlNpbmdsZVwiKSB7XG5cdFx0XHRvVmFsdWUgPSBpc05hTihzVmFsdWUpID8gdW5kZWZpbmVkIDogcGFyc2VGbG9hdChzVmFsdWUpO1xuXHRcdH0gZWxzZSBpZiAoc1R5cGUgPT09IFwiRWRtLkJ5dGVcIiB8fCBzVHlwZSA9PT0gXCJFZG0uSW50MTZcIiB8fCBzVHlwZSA9PT0gXCJFZG0uSW50MzJcIiB8fCBzVHlwZSA9PT0gXCJFZG0uU0J5dGVcIikge1xuXHRcdFx0b1ZhbHVlID0gaXNOYU4oc1ZhbHVlKSA/IHVuZGVmaW5lZCA6IHBhcnNlSW50KHNWYWx1ZSwgMTApO1xuXHRcdH0gZWxzZSBpZiAoc1R5cGUgPT09IFwiRWRtLkRhdGVcIikge1xuXHRcdFx0b1ZhbHVlID0gc1ZhbHVlLm1hdGNoKC9eKFxcZHs0fSktKFxcZHsxLDJ9KS0oXFxkezEsMn0pLylcblx0XHRcdFx0PyBzVmFsdWUubWF0Y2goL14oXFxkezR9KS0oXFxkezEsMn0pLShcXGR7MSwyfSkvKVswXVxuXHRcdFx0XHQ6IHNWYWx1ZS5tYXRjaCgvXihcXGR7OH0pLykgJiYgc1ZhbHVlLm1hdGNoKC9eKFxcZHs4fSkvKVswXTtcblx0XHR9IGVsc2UgaWYgKHNUeXBlID09PSBcIkVkbS5EYXRlVGltZU9mZnNldFwiKSB7XG5cdFx0XHRpZiAoc1ZhbHVlLm1hdGNoKC9eKFxcZHs0fSktKFxcZHsxLDJ9KS0oXFxkezEsMn0pVChcXGR7MSwyfSk6KFxcZHsxLDJ9KTooXFxkezEsMn0pXFwrKFxcZHsxLDR9KS8pKSB7XG5cdFx0XHRcdG9WYWx1ZSA9IHNWYWx1ZS5tYXRjaCgvXihcXGR7NH0pLShcXGR7MSwyfSktKFxcZHsxLDJ9KVQoXFxkezEsMn0pOihcXGR7MSwyfSk6KFxcZHsxLDJ9KVxcKyhcXGR7MSw0fSkvKVswXTtcblx0XHRcdH0gZWxzZSBpZiAoc1ZhbHVlLm1hdGNoKC9eKFxcZHs0fSktKFxcZHsxLDJ9KS0oXFxkezEsMn0pVChcXGR7MSwyfSk6KFxcZHsxLDJ9KTooXFxkezEsMn0pLykpIHtcblx0XHRcdFx0b1ZhbHVlID0gc1ZhbHVlLm1hdGNoKC9eKFxcZHs0fSktKFxcZHsxLDJ9KS0oXFxkezEsMn0pVChcXGR7MSwyfSk6KFxcZHsxLDJ9KTooXFxkezEsMn0pLylbMF0gKyBcIiswMDAwXCI7XG5cdFx0XHR9IGVsc2UgaWYgKHNWYWx1ZS5tYXRjaCgvXihcXGR7NH0pLShcXGR7MSwyfSktKFxcZHsxLDJ9KS8pKSB7XG5cdFx0XHRcdG9WYWx1ZSA9IHNWYWx1ZS5tYXRjaCgvXihcXGR7NH0pLShcXGR7MSwyfSktKFxcZHsxLDJ9KS8pWzBdICsgXCJUMDA6MDA6MDArMDAwMFwiO1xuXHRcdFx0fSBlbHNlIGlmIChzVmFsdWUuaW5kZXhPZihcIlpcIikgPT09IHNWYWx1ZS5sZW5ndGggLSAxKSB7XG5cdFx0XHRcdG9WYWx1ZSA9IHNWYWx1ZS5zcGxpdChcIlpcIilbMF0gKyBcIiswMTAwXCI7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRvVmFsdWUgPSB1bmRlZmluZWQ7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIGlmIChzVHlwZSA9PT0gXCJFZG0uVGltZU9mRGF5XCIpIHtcblx0XHRcdG9WYWx1ZSA9IHNWYWx1ZS5tYXRjaCgvKFxcZHsxLDJ9KTooXFxkezEsMn0pOihcXGR7MSwyfSkvKSA/IHNWYWx1ZS5tYXRjaCgvKFxcZHsxLDJ9KTooXFxkezEsMn0pOihcXGR7MSwyfSkvKVswXSA6IHVuZGVmaW5lZDtcblx0XHR9XG5cdH1cblx0cmV0dXJuIG9WYWx1ZTtcbn1cblxuLyoqXG4gKiBNZXRob2QgdG8gY3JlYXRlIGEgY29uZGl0aW9uLlxuICogQHBhcmFtICBzT3B0aW9uIE9wZXJhdG9yIHRvIGJlIHVzZWQuXG4gKiBAcGFyYW0gIG9WMSBMb3dlciB2YWx1ZVxuICogQHBhcmFtICBvVjIgSGlnaGVyIHZhbHVlXG4gKiBAcGFyYW0gc1NpZ25cbiAqIEByZXR1cm5zIENvbmRpdGlvbiB0byBiZSBjcmVhdGVkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlQ29uZGl0aW9uVmFsdWVzKHNPcHRpb246IHN0cmluZyB8IHVuZGVmaW5lZCwgb1YxOiBhbnksIG9WMjogYW55LCBzU2lnbjogc3RyaW5nIHwgdW5kZWZpbmVkKSB7XG5cdGxldCBvVmFsdWUgPSBvVjEsXG5cdFx0b1ZhbHVlMixcblx0XHRzSW50ZXJuYWxPcGVyYXRpb246IGFueTtcblx0Y29uc3Qgb0NvbmRpdGlvbjogUmVjb3JkPHN0cmluZywgRmlsdGVyQ29uZGl0aW9uc1tdPiA9IHt9O1xuXHRvQ29uZGl0aW9uLnZhbHVlcyA9IFtdO1xuXHRvQ29uZGl0aW9uLmlzRW1wdHkgPSBudWxsIGFzIGFueTtcblx0aWYgKG9WMSA9PT0gdW5kZWZpbmVkIHx8IG9WMSA9PT0gbnVsbCkge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdHN3aXRjaCAoc09wdGlvbikge1xuXHRcdGNhc2UgXCJDUFwiOlxuXHRcdFx0c0ludGVybmFsT3BlcmF0aW9uID0gXCJDb250YWluc1wiO1xuXHRcdFx0aWYgKG9WYWx1ZSkge1xuXHRcdFx0XHRjb25zdCBuSW5kZXhPZiA9IG9WYWx1ZS5pbmRleE9mKFwiKlwiKTtcblx0XHRcdFx0Y29uc3Qgbkxhc3RJbmRleCA9IG9WYWx1ZS5sYXN0SW5kZXhPZihcIipcIik7XG5cblx0XHRcdFx0Ly8gb25seSB3aGVuIHRoZXJlIGFyZSAnKicgYXQgYWxsXG5cdFx0XHRcdGlmIChuSW5kZXhPZiA+IC0xKSB7XG5cdFx0XHRcdFx0aWYgKG5JbmRleE9mID09PSAwICYmIG5MYXN0SW5kZXggIT09IG9WYWx1ZS5sZW5ndGggLSAxKSB7XG5cdFx0XHRcdFx0XHRzSW50ZXJuYWxPcGVyYXRpb24gPSBcIkVuZHNXaXRoXCI7XG5cdFx0XHRcdFx0XHRvVmFsdWUgPSBvVmFsdWUuc3Vic3RyaW5nKDEsIG9WYWx1ZS5sZW5ndGgpO1xuXHRcdFx0XHRcdH0gZWxzZSBpZiAobkluZGV4T2YgIT09IDAgJiYgbkxhc3RJbmRleCA9PT0gb1ZhbHVlLmxlbmd0aCAtIDEpIHtcblx0XHRcdFx0XHRcdHNJbnRlcm5hbE9wZXJhdGlvbiA9IFwiU3RhcnRzV2l0aFwiO1xuXHRcdFx0XHRcdFx0b1ZhbHVlID0gb1ZhbHVlLnN1YnN0cmluZygwLCBvVmFsdWUubGVuZ3RoIC0gMSk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdG9WYWx1ZSA9IG9WYWx1ZS5zdWJzdHJpbmcoMSwgb1ZhbHVlLmxlbmd0aCAtIDEpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHQvKiBUT0RPIEFkZCBkaWFnb25vc3RpY3MgTG9nLndhcm5pbmcoXCJDb250YWlucyBPcHRpb24gY2Fubm90IGJlIHVzZWQgd2l0aG91dCAnKicuXCIpICovXG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFwiRVFcIjpcblx0XHRcdHNJbnRlcm5hbE9wZXJhdGlvbiA9IG9WMSA9PT0gXCJcIiA/IFwiRW1wdHlcIiA6IHNPcHRpb247XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFwiTkVcIjpcblx0XHRcdHNJbnRlcm5hbE9wZXJhdGlvbiA9IG9WMSA9PT0gXCJcIiA/IFwiTm90RW1wdHlcIiA6IHNPcHRpb247XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFwiQlRcIjpcblx0XHRcdGlmIChvVjIgPT09IHVuZGVmaW5lZCB8fCBvVjIgPT09IG51bGwpIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0b1ZhbHVlMiA9IG9WMjtcblx0XHRcdHNJbnRlcm5hbE9wZXJhdGlvbiA9IHNPcHRpb247XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFwiTEVcIjpcblx0XHRjYXNlIFwiR0VcIjpcblx0XHRjYXNlIFwiR1RcIjpcblx0XHRjYXNlIFwiTFRcIjpcblx0XHRcdHNJbnRlcm5hbE9wZXJhdGlvbiA9IHNPcHRpb247XG5cdFx0XHRicmVhaztcblx0XHRkZWZhdWx0OlxuXHRcdFx0LyogVE9ETyBBZGQgZGlhZ29ub3N0aWNzIExvZy53YXJuaW5nKFwiU2VsZWN0aW9uIE9wdGlvbiBpcyBub3Qgc3VwcG9ydGVkIDogJ1wiICsgc09wdGlvbiArIFwiJ1wiKTsgKi9cblx0XHRcdHJldHVybjtcblx0fVxuXHRpZiAoc1NpZ24gPT09IFwiRVwiKSB7XG5cdFx0c0ludGVybmFsT3BlcmF0aW9uID0gb0V4Y2x1ZGVNYXBbc0ludGVybmFsT3BlcmF0aW9uXTtcblx0fVxuXHRvQ29uZGl0aW9uLm9wZXJhdG9yID0gc0ludGVybmFsT3BlcmF0aW9uO1xuXHRpZiAoc0ludGVybmFsT3BlcmF0aW9uICE9PSBcIkVtcHR5XCIpIHtcblx0XHRvQ29uZGl0aW9uLnZhbHVlcy5wdXNoKG9WYWx1ZSk7XG5cdFx0aWYgKG9WYWx1ZTIpIHtcblx0XHRcdG9Db25kaXRpb24udmFsdWVzLnB1c2gob1ZhbHVlMik7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBvQ29uZGl0aW9uO1xufVxuXG4vKiBNZXRob2QgdG8gZ2V0IHRoZSBvcGVyYXRvciBmcm9tIHRoZSBTZWxlY3Rpb24gT3B0aW9uICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0T3BlcmF0b3Ioc09wZXJhdG9yOiBzdHJpbmcpOiBzdHJpbmcge1xuXHRyZXR1cm4gc09wZXJhdG9yLmluZGV4T2YoXCIvXCIpID4gMCA/IHNPcGVyYXRvci5zcGxpdChcIi9cIilbMV0gOiBzT3BlcmF0b3I7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRGaWx0ZXJzQ29uZGl0aW9uc0Zyb21TZWxlY3Rpb25WYXJpYW50KFxuXHRlbnRpdHlUeXBlUHJvcGVydGllczogUmVjb3JkPHN0cmluZywgb2JqZWN0Pixcblx0c2VsZWN0aW9uVmFyaWFudDogU2VsZWN0aW9uVmFyaWFudFR5cGVUeXBlcyxcblx0Z2V0Q3VzdG9tQ29uZGl0aW9ucz86IEZ1bmN0aW9uXG4pOiBSZWNvcmQ8c3RyaW5nLCBGaWx0ZXJDb25kaXRpb25zW10+IHtcblx0Y29uc3Qgb2ZpbHRlckNvbmRpdGlvbnM6IFJlY29yZDxzdHJpbmcsIEZpbHRlckNvbmRpdGlvbnNbXT4gPSB7fTtcblx0aWYgKHNlbGVjdGlvblZhcmlhbnQpIHtcblx0XHRjb25zdCBhU2VsZWN0T3B0aW9ucyA9IHNlbGVjdGlvblZhcmlhbnQuU2VsZWN0T3B0aW9ucztcblx0XHRjb25zdCBhUGFyYW1ldGVycyA9IHNlbGVjdGlvblZhcmlhbnQuUGFyYW1ldGVycztcblx0XHRjb25zdCBhVmFsaWRQcm9wZXJ0aWVzID0gZW50aXR5VHlwZVByb3BlcnRpZXM7XG5cdFx0YVNlbGVjdE9wdGlvbnM/LmZvckVhY2goKHNlbGVjdE9wdGlvbjogU2VsZWN0T3B0aW9uVHlwZSkgPT4ge1xuXHRcdFx0Y29uc3QgcHJvcGVydHlOYW1lOiBhbnkgPSBzZWxlY3RPcHRpb24uUHJvcGVydHlOYW1lO1xuXHRcdFx0Y29uc3Qgc1Byb3BlcnR5TmFtZTogc3RyaW5nID0gcHJvcGVydHlOYW1lLnZhbHVlIHx8IHByb3BlcnR5TmFtZS4kUHJvcGVydHlQYXRoO1xuXHRcdFx0Y29uc3QgUmFuZ2VzOiBhbnkgPSBzZWxlY3RPcHRpb24uUmFuZ2VzO1xuXHRcdFx0Zm9yIChjb25zdCBrZXkgaW4gYVZhbGlkUHJvcGVydGllcykge1xuXHRcdFx0XHRpZiAoc1Byb3BlcnR5TmFtZSA9PT0ga2V5KSB7XG5cdFx0XHRcdFx0Y29uc3Qgb1ZhbGlkUHJvcGVydHkgPSBhVmFsaWRQcm9wZXJ0aWVzW2tleV0gYXMgYW55O1xuXHRcdFx0XHRcdGNvbnN0IGFDb25kaXRpb25zOiBhbnlbXSA9IFtdO1xuXHRcdFx0XHRcdFJhbmdlcz8uZm9yRWFjaCgoUmFuZ2U6IGFueSkgPT4ge1xuXHRcdFx0XHRcdFx0Y29uc3Qgb0NvbmRpdGlvbiA9IGdldEN1c3RvbUNvbmRpdGlvbnNcblx0XHRcdFx0XHRcdFx0PyBnZXRDdXN0b21Db25kaXRpb25zKFJhbmdlLCBvVmFsaWRQcm9wZXJ0eSwgc1Byb3BlcnR5TmFtZSlcblx0XHRcdFx0XHRcdFx0OiBnZXRDb25kaXRpb25zKFJhbmdlLCBvVmFsaWRQcm9wZXJ0eSk7XG5cdFx0XHRcdFx0XHRhQ29uZGl0aW9ucy5wdXNoKG9Db25kaXRpb24pO1xuXHRcdFx0XHRcdFx0aWYgKGFDb25kaXRpb25zLmxlbmd0aCkge1xuXHRcdFx0XHRcdFx0XHRvZmlsdGVyQ29uZGl0aW9uc1tzUHJvcGVydHlOYW1lXSA9IChvZmlsdGVyQ29uZGl0aW9uc1tzUHJvcGVydHlOYW1lXSB8fCBbXSkuY29uY2F0KGFDb25kaXRpb25zKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdGFQYXJhbWV0ZXJzPy5mb3JFYWNoKChwYXJhbWV0ZXI6IGFueSkgPT4ge1xuXHRcdFx0Y29uc3Qgc1Byb3BlcnR5UGF0aCA9IHBhcmFtZXRlci5Qcm9wZXJ0eU5hbWUudmFsdWUgfHwgcGFyYW1ldGVyLlByb3BlcnR5TmFtZS4kUHJvcGVydHlQYXRoO1xuXHRcdFx0Y29uc3Qgb0NvbmRpdGlvbjogYW55ID0gZ2V0Q3VzdG9tQ29uZGl0aW9uc1xuXHRcdFx0XHQ/IHsgb3BlcmF0b3I6IFwiRVFcIiwgdmFsdWUxOiBwYXJhbWV0ZXIuUHJvcGVydHlWYWx1ZSwgdmFsdWUyOiBudWxsLCBwYXRoOiBzUHJvcGVydHlQYXRoLCBpc1BhcmFtZXRlcjogdHJ1ZSB9XG5cdFx0XHRcdDoge1xuXHRcdFx0XHRcdFx0b3BlcmF0b3I6IFwiRVFcIixcblx0XHRcdFx0XHRcdHZhbHVlczogW3BhcmFtZXRlci5Qcm9wZXJ0eVZhbHVlXSxcblx0XHRcdFx0XHRcdGlzRW1wdHk6IG51bGwsXG5cdFx0XHRcdFx0XHR2YWxpZGF0ZWQ6IENvbmRpdGlvblZhbGlkYXRlZC5WYWxpZGF0ZWQsXG5cdFx0XHRcdFx0XHRpc1BhcmFtZXRlcjogdHJ1ZVxuXHRcdFx0XHQgIH07XG5cdFx0XHRvZmlsdGVyQ29uZGl0aW9uc1tzUHJvcGVydHlQYXRoXSA9IFtvQ29uZGl0aW9uXTtcblx0XHR9KTtcblx0fVxuXHRyZXR1cm4gb2ZpbHRlckNvbmRpdGlvbnM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDb25kaXRpb25zKFJhbmdlOiBhbnksIG9WYWxpZFByb3BlcnR5OiBhbnkpIHtcblx0bGV0IG9Db25kaXRpb247XG5cdGNvbnN0IHNpZ246IHN0cmluZyB8IHVuZGVmaW5lZCA9IFJhbmdlLlNpZ247XG5cdGNvbnN0IHNPcHRpb246IHN0cmluZyB8IHVuZGVmaW5lZCA9IFJhbmdlLk9wdGlvbiA/IGdldE9wZXJhdG9yKFJhbmdlLk9wdGlvbikgOiB1bmRlZmluZWQ7XG5cdGNvbnN0IG9WYWx1ZTE6IGFueSA9IGdldFR5cGVDb21wbGlhbnRWYWx1ZShSYW5nZS5Mb3csIG9WYWxpZFByb3BlcnR5LiRUeXBlKTtcblx0Y29uc3Qgb1ZhbHVlMjogYW55ID0gUmFuZ2UuSGlnaCA/IGdldFR5cGVDb21wbGlhbnRWYWx1ZShSYW5nZS5IaWdoLCBvVmFsaWRQcm9wZXJ0eS4kVHlwZSkgOiB1bmRlZmluZWQ7XG5cdGNvbnN0IG9Db25kaXRpb25WYWx1ZXMgPSByZXNvbHZlQ29uZGl0aW9uVmFsdWVzKHNPcHRpb24sIG9WYWx1ZTEsIG9WYWx1ZTIsIHNpZ24pIGFzIGFueTtcblx0aWYgKG9Db25kaXRpb25WYWx1ZXMpIHtcblx0XHRvQ29uZGl0aW9uID0gY3JlYXRlQ29uZGl0aW9uKG9Db25kaXRpb25WYWx1ZXMub3BlcmF0b3IsIG9Db25kaXRpb25WYWx1ZXMudmFsdWVzLCBudWxsLCBudWxsLCBDb25kaXRpb25WYWxpZGF0ZWQuVmFsaWRhdGVkKTtcblx0fVxuXHRyZXR1cm4gb0NvbmRpdGlvbjtcbn1cblxuY29uc3QgZ2V0RGVmYXVsdFZhbHVlRmlsdGVycyA9IGZ1bmN0aW9uKG9Db250ZXh0OiBhbnksIHByb3BlcnRpZXM6IGFueSk6IFJlY29yZDxzdHJpbmcsIEZpbHRlckNvbmRpdGlvbnNbXT4ge1xuXHRjb25zdCBmaWx0ZXJDb25kaXRpb25zOiBSZWNvcmQ8c3RyaW5nLCBGaWx0ZXJDb25kaXRpb25zW10+ID0ge307XG5cdGNvbnN0IGVudGl0eVNldFBhdGggPSBvQ29udGV4dC5nZXRJbnRlcmZhY2UoMSkuZ2V0UGF0aCgpLFxuXHRcdG9NZXRhTW9kZWwgPSBvQ29udGV4dC5nZXRJbnRlcmZhY2UoMSkuZ2V0TW9kZWwoKTtcblx0aWYgKHByb3BlcnRpZXMpIHtcblx0XHRmb3IgKGNvbnN0IGtleSBpbiBwcm9wZXJ0aWVzKSB7XG5cdFx0XHRjb25zdCBkZWZhdWx0RmlsdGVyVmFsdWUgPSBvTWV0YU1vZGVsLmdldE9iamVjdChcblx0XHRcdFx0ZW50aXR5U2V0UGF0aCArIFwiL1wiICsga2V5ICsgXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkZpbHRlckRlZmF1bHRWYWx1ZVwiXG5cdFx0XHQpO1xuXHRcdFx0aWYgKGRlZmF1bHRGaWx0ZXJWYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdGNvbnN0IFByb3BlcnR5TmFtZSA9IGtleTtcblx0XHRcdFx0ZmlsdGVyQ29uZGl0aW9uc1tQcm9wZXJ0eU5hbWVdID0gW1xuXHRcdFx0XHRcdGNyZWF0ZUNvbmRpdGlvbihcIkVRXCIsIFtkZWZhdWx0RmlsdGVyVmFsdWVdLCBudWxsLCBudWxsLCBDb25kaXRpb25WYWxpZGF0ZWQuVmFsaWRhdGVkKSBhcyBGaWx0ZXJDb25kaXRpb25zXG5cdFx0XHRcdF07XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cdHJldHVybiBmaWx0ZXJDb25kaXRpb25zO1xufTtcblxuY29uc3QgZ2V0RGVmYXVsdFNlbWFudGljRGF0ZUZpbHRlcnMgPSBmdW5jdGlvbihcblx0b0NvbnRleHQ6IGFueSxcblx0cHJvcGVydGllczogYW55LFxuXHRkZWZhdWx0U2VtYW50aWNEYXRlczogYW55XG4pOiBSZWNvcmQ8c3RyaW5nLCBGaWx0ZXJDb25kaXRpb25zW10+IHtcblx0Y29uc3QgZmlsdGVyQ29uZGl0aW9uczogUmVjb3JkPHN0cmluZywgRmlsdGVyQ29uZGl0aW9uc1tdPiA9IHt9O1xuXHRpZiAocHJvcGVydGllcykge1xuXHRcdGZvciAoY29uc3Qga2V5IGluIHByb3BlcnRpZXMpIHtcblx0XHRcdC8vIGN1cnJlbnRseSBkZWZhdWx0U2VtYW50aWNEYXRlcyBjYW4gc3VwcG9ydCBvbmx5IG9uZSBlbnRyeSwgd2UgcGljayB0aGUgZmlyc3Qgb25lIGRpcmVjdGx5IHVzaW5nIDAgaW5kZXhcblx0XHRcdGlmIChkZWZhdWx0U2VtYW50aWNEYXRlc1trZXldICYmIGRlZmF1bHRTZW1hbnRpY0RhdGVzW2tleV1bMF0pIHtcblx0XHRcdFx0ZmlsdGVyQ29uZGl0aW9uc1trZXldID0gW2NyZWF0ZUNvbmRpdGlvbihkZWZhdWx0U2VtYW50aWNEYXRlc1trZXldWzBdLm9wZXJhdG9yLCBbXSwgbnVsbCwgbnVsbCwgbnVsbCkgYXMgRmlsdGVyQ29uZGl0aW9uc107XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cdHJldHVybiBmaWx0ZXJDb25kaXRpb25zO1xufTtcblxuZnVuY3Rpb24gZ2V0RWRpdFN0YXR1c0ZpbHRlcigpOiBSZWNvcmQ8c3RyaW5nLCBGaWx0ZXJDb25kaXRpb25zW10+IHtcblx0Y29uc3Qgb2ZpbHRlckNvbmRpdGlvbnM6IFJlY29yZDxzdHJpbmcsIEZpbHRlckNvbmRpdGlvbnNbXT4gPSB7fTtcblx0b2ZpbHRlckNvbmRpdGlvbnNbXCIkZWRpdFN0YXRlXCJdID0gW1xuXHRcdGNyZWF0ZUNvbmRpdGlvbihcIkRSQUZUX0VESVRfU1RBVEVcIiwgW1wiQUxMXCJdLCBudWxsLCBudWxsLCBDb25kaXRpb25WYWxpZGF0ZWQuVmFsaWRhdGVkKSBhcyBGaWx0ZXJDb25kaXRpb25zXG5cdF07XG5cdHJldHVybiBvZmlsdGVyQ29uZGl0aW9ucztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEZpbHRlckNvbmRpdGlvbnMob0NvbnRleHQ6IGFueSwgZmlsdGVyQ29uZGl0aW9uczogYW55KTogUmVjb3JkPHN0cmluZywgRmlsdGVyQ29uZGl0aW9uc1tdPiB7XG5cdGxldCBlZGl0U3RhdGVGaWx0ZXI7XG5cdGNvbnN0IGVudGl0eVNldFBhdGggPSBvQ29udGV4dC5nZXRJbnRlcmZhY2UoMSkuZ2V0UGF0aCgpLFxuXHRcdG9NZXRhTW9kZWwgPSBvQ29udGV4dC5nZXRJbnRlcmZhY2UoMSkuZ2V0TW9kZWwoKSxcblx0XHRlbnRpdHlUeXBlQW5ub3RhdGlvbnMgPSBvTWV0YU1vZGVsLmdldE9iamVjdChlbnRpdHlTZXRQYXRoICsgXCJAXCIpLFxuXHRcdGVudGl0eVR5cGVQcm9wZXJ0aWVzID0gb01ldGFNb2RlbC5nZXRPYmplY3QoZW50aXR5U2V0UGF0aCArIFwiL1wiKTtcblx0aWYgKFxuXHRcdGVudGl0eVR5cGVBbm5vdGF0aW9uc1tcIkBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuRHJhZnRSb290XCJdIHx8XG5cdFx0ZW50aXR5VHlwZUFubm90YXRpb25zW1wiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5EcmFmdE5vZGVcIl1cblx0KSB7XG5cdFx0ZWRpdFN0YXRlRmlsdGVyID0gZ2V0RWRpdFN0YXR1c0ZpbHRlcigpO1xuXHR9XG5cdGNvbnN0IHNlbGVjdGlvblZhcmlhbnQgPSBmaWx0ZXJDb25kaXRpb25zPy5zZWxlY3Rpb25WYXJpYW50O1xuXHRjb25zdCBkZWZhdWx0U2VtYW50aWNEYXRlcyA9IGZpbHRlckNvbmRpdGlvbnM/LmRlZmF1bHRTZW1hbnRpY0RhdGVzIHx8IHt9O1xuXHRjb25zdCBkZWZhdWx0RmlsdGVycyA9IGdldERlZmF1bHRWYWx1ZUZpbHRlcnMob0NvbnRleHQsIGVudGl0eVR5cGVQcm9wZXJ0aWVzKTtcblx0Y29uc3QgZGVmYXVsdFNlbWFudGljRGF0ZUZpbHRlcnMgPSBnZXREZWZhdWx0U2VtYW50aWNEYXRlRmlsdGVycyhvQ29udGV4dCwgZW50aXR5VHlwZVByb3BlcnRpZXMsIGRlZmF1bHRTZW1hbnRpY0RhdGVzKTtcblx0aWYgKHNlbGVjdGlvblZhcmlhbnQpIHtcblx0XHRmaWx0ZXJDb25kaXRpb25zID0gZ2V0RmlsdGVyc0NvbmRpdGlvbnNGcm9tU2VsZWN0aW9uVmFyaWFudChlbnRpdHlUeXBlUHJvcGVydGllcywgc2VsZWN0aW9uVmFyaWFudCk7XG5cdH0gZWxzZSBpZiAoZGVmYXVsdEZpbHRlcnMpIHtcblx0XHRmaWx0ZXJDb25kaXRpb25zID0gZGVmYXVsdEZpbHRlcnM7XG5cdH1cblx0aWYgKGRlZmF1bHRTZW1hbnRpY0RhdGVGaWx0ZXJzKSB7XG5cdFx0Ly8gb25seSBmb3Igc2VtYW50aWMgZGF0ZTpcblx0XHQvLyAxLiB2YWx1ZSBmcm9tIG1hbmlmZXN0IGdldCBtZXJnZWQgd2l0aCBTVlxuXHRcdC8vIDIuIG1hbmlmZXN0IHZhbHVlIGlzIGdpdmVuIHByZWZlcmVuY2Ugd2hlbiB0aGVyZSBpcyBzYW1lIHNlbWFudGljIGRhdGUgcHJvcGVydHkgaW4gU1YgYW5kIG1hbmlmZXN0XG5cdFx0ZmlsdGVyQ29uZGl0aW9ucyA9IHsgLi4uZmlsdGVyQ29uZGl0aW9ucywgLi4uZGVmYXVsdFNlbWFudGljRGF0ZUZpbHRlcnMgfTtcblx0fVxuXHRpZiAoZWRpdFN0YXRlRmlsdGVyKSB7XG5cdFx0ZmlsdGVyQ29uZGl0aW9ucyA9IHsgLi4uZmlsdGVyQ29uZGl0aW9ucywgLi4uZWRpdFN0YXRlRmlsdGVyIH07XG5cdH1cblx0cmV0dXJuIChPYmplY3Qua2V5cyhmaWx0ZXJDb25kaXRpb25zKS5sZW5ndGggPiAwID8gSlNPTi5zdHJpbmdpZnkoZmlsdGVyQ29uZGl0aW9ucykgOiB1bmRlZmluZWQpIGFzIGFueTtcbn1cblxuZ2V0RmlsdGVyQ29uZGl0aW9ucy5yZXF1aXJlc0lDb250ZXh0ID0gdHJ1ZTtcbiJdfQ==
|
|
331
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkZpbHRlckhlbHBlci50cyJdLCJuYW1lcyI6WyJhVmFsaWRUeXBlcyIsIm9FeGNsdWRlTWFwIiwiZ2V0VHlwZUNvbXBsaWFudFZhbHVlIiwic1ZhbHVlIiwic1R5cGUiLCJvVmFsdWUiLCJpbmRleE9mIiwidW5kZWZpbmVkIiwiaXNOYU4iLCJwYXJzZUZsb2F0IiwicGFyc2VJbnQiLCJtYXRjaCIsImxlbmd0aCIsInNwbGl0IiwicmVzb2x2ZUNvbmRpdGlvblZhbHVlcyIsInNPcHRpb24iLCJvVjEiLCJvVjIiLCJzU2lnbiIsIm9WYWx1ZTIiLCJzSW50ZXJuYWxPcGVyYXRpb24iLCJvQ29uZGl0aW9uIiwidmFsdWVzIiwiaXNFbXB0eSIsIm5JbmRleE9mIiwibkxhc3RJbmRleCIsImxhc3RJbmRleE9mIiwic3Vic3RyaW5nIiwib3BlcmF0b3IiLCJwdXNoIiwiZ2V0T3BlcmF0b3IiLCJzT3BlcmF0b3IiLCJnZXRGaWx0ZXJzQ29uZGl0aW9uc0Zyb21TZWxlY3Rpb25WYXJpYW50IiwiZW50aXR5VHlwZVByb3BlcnRpZXMiLCJzZWxlY3Rpb25WYXJpYW50IiwiZ2V0Q3VzdG9tQ29uZGl0aW9ucyIsIm9GaWx0ZXJDb25kaXRpb25zIiwiYVNlbGVjdE9wdGlvbnMiLCJTZWxlY3RPcHRpb25zIiwiYVBhcmFtZXRlcnMiLCJQYXJhbWV0ZXJzIiwiYVZhbGlkUHJvcGVydGllcyIsImZvckVhY2giLCJzZWxlY3RPcHRpb24iLCJwcm9wZXJ0eU5hbWUiLCJQcm9wZXJ0eU5hbWUiLCJzUHJvcGVydHlOYW1lIiwidmFsdWUiLCIkUHJvcGVydHlQYXRoIiwiUmFuZ2VzIiwia2V5Iiwib1ZhbGlkUHJvcGVydHkiLCJhQ29uZGl0aW9ucyIsIlJhbmdlIiwiZ2V0Q29uZGl0aW9ucyIsImNvbmNhdCIsInBhcmFtZXRlciIsInNQcm9wZXJ0eVBhdGgiLCJ2YWx1ZTEiLCJQcm9wZXJ0eVZhbHVlIiwidmFsdWUyIiwicGF0aCIsImlzUGFyYW1ldGVyIiwidmFsaWRhdGVkIiwiQ29uZGl0aW9uVmFsaWRhdGVkIiwiVmFsaWRhdGVkIiwic2lnbiIsIlNpZ24iLCJPcHRpb24iLCJvVmFsdWUxIiwiTG93IiwiJFR5cGUiLCJIaWdoIiwib0NvbmRpdGlvblZhbHVlcyIsImNyZWF0ZUNvbmRpdGlvbiIsImdldERlZmF1bHRWYWx1ZUZpbHRlcnMiLCJvQ29udGV4dCIsInByb3BlcnRpZXMiLCJmaWx0ZXJDb25kaXRpb25zIiwiZW50aXR5U2V0UGF0aCIsImdldEludGVyZmFjZSIsImdldFBhdGgiLCJvTWV0YU1vZGVsIiwiZ2V0TW9kZWwiLCJkZWZhdWx0RmlsdGVyVmFsdWUiLCJnZXRPYmplY3QiLCJnZXREZWZhdWx0U2VtYW50aWNEYXRlRmlsdGVycyIsImRlZmF1bHRTZW1hbnRpY0RhdGVzIiwiZ2V0RWRpdFN0YXR1c0ZpbHRlciIsIm9maWx0ZXJDb25kaXRpb25zIiwiZ2V0RmlsdGVyQ29uZGl0aW9ucyIsImVkaXRTdGF0ZUZpbHRlciIsImVudGl0eVR5cGVBbm5vdGF0aW9ucyIsImRlZmF1bHRGaWx0ZXJzIiwiZGVmYXVsdFNlbWFudGljRGF0ZUZpbHRlcnMiLCJPYmplY3QiLCJrZXlzIiwiSlNPTiIsInN0cmluZ2lmeSIsInJlcXVpcmVzSUNvbnRleHQiXSwibWFwcGluZ3MiOiI7QUFBQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7QUFTQSxNQUFNQSxXQUFXLEdBQUcsQ0FDbkIsYUFEbUIsRUFFbkIsVUFGbUIsRUFHbkIsVUFIbUIsRUFJbkIsY0FKbUIsRUFLbkIsb0JBTG1CLEVBTW5CLGFBTm1CLEVBT25CLFlBUG1CLEVBUW5CLFdBUm1CLEVBU25CLFVBVG1CLEVBVW5CLFdBVm1CLEVBV25CLFdBWG1CLEVBWW5CLFdBWm1CLEVBYW5CLFdBYm1CLEVBY25CLFlBZG1CLEVBZW5CLFlBZm1CLEVBZ0JuQixVQWhCbUIsRUFpQm5CLGVBakJtQixDQUFwQjtBQW9CQSxNQUFNQyxXQUFnQyxHQUFHO0FBQ3hDLGdCQUFZLGFBRDRCO0FBRXhDLGtCQUFjLGVBRjBCO0FBR3hDLGdCQUFZLGFBSDRC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QkFBbUIsQ0FBQ1MsZ0JBQXBCLEdBQXVDLElBQXZDIiwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTZWxlY3RPcHRpb25UeXBlLCBTZWxlY3Rpb25WYXJpYW50VHlwZVR5cGVzIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL2Rpc3QvZ2VuZXJhdGVkL1VJXCI7XG5pbXBvcnQgeyBjcmVhdGVDb25kaXRpb24gfSBmcm9tIFwic2FwL3VpL21kYy9jb25kaXRpb24vQ29uZGl0aW9uXCI7XG5pbXBvcnQgeyBDb25kaXRpb25WYWxpZGF0ZWQgfSBmcm9tIFwic2FwL3VpL21kYy9lbnVtXCI7XG5cbmV4cG9ydCB0eXBlIEZpbHRlckNvbmRpdGlvbnMgPSB7XG5cdG9wZXJhdG9yOiBzdHJpbmc7XG5cdHZhbHVlczogQXJyYXk8c3RyaW5nPjtcblx0aXNFbXB0eT86IGJvb2xlYW4gfCBudWxsO1xuXHR2YWxpZGF0ZWQ/OiBzdHJpbmc7XG59O1xuXG5jb25zdCBhVmFsaWRUeXBlcyA9IFtcblx0XCJFZG0uQm9vbGVhblwiLFxuXHRcIkVkbS5CeXRlXCIsXG5cdFwiRWRtLkRhdGVcIixcblx0XCJFZG0uRGF0ZVRpbWVcIixcblx0XCJFZG0uRGF0ZVRpbWVPZmZzZXRcIixcblx0XCJFZG0uRGVjaW1hbFwiLFxuXHRcIkVkbS5Eb3VibGVcIixcblx0XCJFZG0uRmxvYXRcIixcblx0XCJFZG0uR3VpZFwiLFxuXHRcIkVkbS5JbnQxNlwiLFxuXHRcIkVkbS5JbnQzMlwiLFxuXHRcIkVkbS5JbnQ2NFwiLFxuXHRcIkVkbS5TQnl0ZVwiLFxuXHRcIkVkbS5TaW5nbGVcIixcblx0XCJFZG0uU3RyaW5nXCIsXG5cdFwiRWRtLlRpbWVcIixcblx0XCJFZG0uVGltZU9mRGF5XCJcbl07XG5cbmNvbnN0IG9FeGNsdWRlTWFwOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge1xuXHRcIkNvbnRhaW5zXCI6IFwiTm90Q29udGFpbnNcIixcblx0XCJTdGFydHNXaXRoXCI6IFwiTm90U3RhcnRzV2l0aFwiLFxuXHRcIkVuZHNXaXRoXCI6IFwiTm90RW5kc1dpdGhcIixcblx0XCJFbXB0eVwiOiBcIk5vdEVtcHR5XCIsXG5cdFwiTm90RW1wdHlcIjogXCJFbXB0eVwiLFxuXHRcIkxFXCI6IFwiTk9UTEVcIixcblx0XCJHRVwiOiBcIk5PVEdFXCIsXG5cdFwiTFRcIjogXCJOT1RMVFwiLFxuXHRcIkdUXCI6IFwiTk9UR1RcIixcblx0XCJCVFwiOiBcIk5PVEJUXCIsXG5cdFwiTkVcIjogXCJFUVwiLFxuXHRcIkVRXCI6IFwiTkVcIlxufTtcblxuLyoqXG4gKiBNZXRob2QgdG8gZ2V0IHRoZSBjb21wbGlhbnQgdmFsdWUgdHlwZSBiYXNlZCBvbiB0aGUgZGF0YSB0eXBlLlxuICpcbiAqIEBwYXJhbSAgc1ZhbHVlIFJhdyB2YWx1ZVxuICogQHBhcmFtICBzVHlwZSBUaGUgcHJvcGVydHkgdHlwZVxuICogQHJldHVybnMgVmFsdWUgdG8gYmUgcHJvcGFnYXRlZCB0byB0aGUgY29uZGl0aW9uLlxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRUeXBlQ29tcGxpYW50VmFsdWUoc1ZhbHVlOiBhbnksIHNUeXBlOiBzdHJpbmcpIHtcblx0bGV0IG9WYWx1ZTtcblx0aWYgKGFWYWxpZFR5cGVzLmluZGV4T2Yoc1R5cGUpID4gLTEpIHtcblx0XHRvVmFsdWUgPSBzVmFsdWU7XG5cdFx0aWYgKHNUeXBlID09PSBcIkVkbS5Cb29sZWFuXCIpIHtcblx0XHRcdG9WYWx1ZSA9IHNWYWx1ZSA9PT0gXCJ0cnVlXCIgfHwgKHNWYWx1ZSA9PT0gXCJmYWxzZVwiID8gZmFsc2UgOiB1bmRlZmluZWQpO1xuXHRcdH0gZWxzZSBpZiAoc1R5cGUgPT09IFwiRWRtLkRvdWJsZVwiIHx8IHNUeXBlID09PSBcIkVkbS5TaW5nbGVcIikge1xuXHRcdFx0b1ZhbHVlID0gaXNOYU4oc1ZhbHVlKSA/IHVuZGVmaW5lZCA6IHBhcnNlRmxvYXQoc1ZhbHVlKTtcblx0XHR9IGVsc2UgaWYgKHNUeXBlID09PSBcIkVkbS5CeXRlXCIgfHwgc1R5cGUgPT09IFwiRWRtLkludDE2XCIgfHwgc1R5cGUgPT09IFwiRWRtLkludDMyXCIgfHwgc1R5cGUgPT09IFwiRWRtLlNCeXRlXCIpIHtcblx0XHRcdG9WYWx1ZSA9IGlzTmFOKHNWYWx1ZSkgPyB1bmRlZmluZWQgOiBwYXJzZUludChzVmFsdWUsIDEwKTtcblx0XHR9IGVsc2UgaWYgKHNUeXBlID09PSBcIkVkbS5EYXRlXCIpIHtcblx0XHRcdG9WYWx1ZSA9IHNWYWx1ZS5tYXRjaCgvXihcXGR7NH0pLShcXGR7MSwyfSktKFxcZHsxLDJ9KS8pXG5cdFx0XHRcdD8gc1ZhbHVlLm1hdGNoKC9eKFxcZHs0fSktKFxcZHsxLDJ9KS0oXFxkezEsMn0pLylbMF1cblx0XHRcdFx0OiBzVmFsdWUubWF0Y2goL14oXFxkezh9KS8pICYmIHNWYWx1ZS5tYXRjaCgvXihcXGR7OH0pLylbMF07XG5cdFx0fSBlbHNlIGlmIChzVHlwZSA9PT0gXCJFZG0uRGF0ZVRpbWVPZmZzZXRcIikge1xuXHRcdFx0aWYgKHNWYWx1ZS5tYXRjaCgvXihcXGR7NH0pLShcXGR7MSwyfSktKFxcZHsxLDJ9KVQoXFxkezEsMn0pOihcXGR7MSwyfSk6KFxcZHsxLDJ9KVxcKyhcXGR7MSw0fSkvKSkge1xuXHRcdFx0XHRvVmFsdWUgPSBzVmFsdWUubWF0Y2goL14oXFxkezR9KS0oXFxkezEsMn0pLShcXGR7MSwyfSlUKFxcZHsxLDJ9KTooXFxkezEsMn0pOihcXGR7MSwyfSlcXCsoXFxkezEsNH0pLylbMF07XG5cdFx0XHR9IGVsc2UgaWYgKHNWYWx1ZS5tYXRjaCgvXihcXGR7NH0pLShcXGR7MSwyfSktKFxcZHsxLDJ9KVQoXFxkezEsMn0pOihcXGR7MSwyfSk6KFxcZHsxLDJ9KS8pKSB7XG5cdFx0XHRcdG9WYWx1ZSA9IHNWYWx1ZS5tYXRjaCgvXihcXGR7NH0pLShcXGR7MSwyfSktKFxcZHsxLDJ9KVQoXFxkezEsMn0pOihcXGR7MSwyfSk6KFxcZHsxLDJ9KS8pWzBdICsgXCIrMDAwMFwiO1xuXHRcdFx0fSBlbHNlIGlmIChzVmFsdWUubWF0Y2goL14oXFxkezR9KS0oXFxkezEsMn0pLShcXGR7MSwyfSkvKSkge1xuXHRcdFx0XHRvVmFsdWUgPSBzVmFsdWUubWF0Y2goL14oXFxkezR9KS0oXFxkezEsMn0pLShcXGR7MSwyfSkvKVswXSArIFwiVDAwOjAwOjAwKzAwMDBcIjtcblx0XHRcdH0gZWxzZSBpZiAoc1ZhbHVlLmluZGV4T2YoXCJaXCIpID09PSBzVmFsdWUubGVuZ3RoIC0gMSkge1xuXHRcdFx0XHRvVmFsdWUgPSBzVmFsdWUuc3BsaXQoXCJaXCIpWzBdICsgXCIrMDEwMFwiO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0b1ZhbHVlID0gdW5kZWZpbmVkO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSBpZiAoc1R5cGUgPT09IFwiRWRtLlRpbWVPZkRheVwiKSB7XG5cdFx0XHRvVmFsdWUgPSBzVmFsdWUubWF0Y2goLyhcXGR7MSwyfSk6KFxcZHsxLDJ9KTooXFxkezEsMn0pLykgPyBzVmFsdWUubWF0Y2goLyhcXGR7MSwyfSk6KFxcZHsxLDJ9KTooXFxkezEsMn0pLylbMF0gOiB1bmRlZmluZWQ7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBvVmFsdWU7XG59XG5cbi8qKlxuICogTWV0aG9kIHRvIGNyZWF0ZSBhIGNvbmRpdGlvbi5cbiAqIEBwYXJhbSAgc09wdGlvbiBPcGVyYXRvciB0byBiZSB1c2VkLlxuICogQHBhcmFtICBvVjEgTG93ZXIgdmFsdWVcbiAqIEBwYXJhbSAgb1YyIEhpZ2hlciB2YWx1ZVxuICogQHBhcmFtIHNTaWduXG4gKiBAcmV0dXJucyBDb25kaXRpb24gdG8gYmUgY3JlYXRlZFxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZUNvbmRpdGlvblZhbHVlcyhzT3B0aW9uOiBzdHJpbmcgfCB1bmRlZmluZWQsIG9WMTogYW55LCBvVjI6IGFueSwgc1NpZ246IHN0cmluZyB8IHVuZGVmaW5lZCkge1xuXHRsZXQgb1ZhbHVlID0gb1YxLFxuXHRcdG9WYWx1ZTIsXG5cdFx0c0ludGVybmFsT3BlcmF0aW9uOiBhbnk7XG5cdGNvbnN0IG9Db25kaXRpb246IFJlY29yZDxzdHJpbmcsIEZpbHRlckNvbmRpdGlvbnNbXT4gPSB7fTtcblx0b0NvbmRpdGlvbi52YWx1ZXMgPSBbXTtcblx0b0NvbmRpdGlvbi5pc0VtcHR5ID0gbnVsbCBhcyBhbnk7XG5cdGlmIChvVjEgPT09IHVuZGVmaW5lZCB8fCBvVjEgPT09IG51bGwpIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHRzd2l0Y2ggKHNPcHRpb24pIHtcblx0XHRjYXNlIFwiQ1BcIjpcblx0XHRcdHNJbnRlcm5hbE9wZXJhdGlvbiA9IFwiQ29udGFpbnNcIjtcblx0XHRcdGlmIChvVmFsdWUpIHtcblx0XHRcdFx0Y29uc3QgbkluZGV4T2YgPSBvVmFsdWUuaW5kZXhPZihcIipcIik7XG5cdFx0XHRcdGNvbnN0IG5MYXN0SW5kZXggPSBvVmFsdWUubGFzdEluZGV4T2YoXCIqXCIpO1xuXG5cdFx0XHRcdC8vIG9ubHkgd2hlbiB0aGVyZSBhcmUgJyonIGF0IGFsbFxuXHRcdFx0XHRpZiAobkluZGV4T2YgPiAtMSkge1xuXHRcdFx0XHRcdGlmIChuSW5kZXhPZiA9PT0gMCAmJiBuTGFzdEluZGV4ICE9PSBvVmFsdWUubGVuZ3RoIC0gMSkge1xuXHRcdFx0XHRcdFx0c0ludGVybmFsT3BlcmF0aW9uID0gXCJFbmRzV2l0aFwiO1xuXHRcdFx0XHRcdFx0b1ZhbHVlID0gb1ZhbHVlLnN1YnN0cmluZygxLCBvVmFsdWUubGVuZ3RoKTtcblx0XHRcdFx0XHR9IGVsc2UgaWYgKG5JbmRleE9mICE9PSAwICYmIG5MYXN0SW5kZXggPT09IG9WYWx1ZS5sZW5ndGggLSAxKSB7XG5cdFx0XHRcdFx0XHRzSW50ZXJuYWxPcGVyYXRpb24gPSBcIlN0YXJ0c1dpdGhcIjtcblx0XHRcdFx0XHRcdG9WYWx1ZSA9IG9WYWx1ZS5zdWJzdHJpbmcoMCwgb1ZhbHVlLmxlbmd0aCAtIDEpO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRvVmFsdWUgPSBvVmFsdWUuc3Vic3RyaW5nKDEsIG9WYWx1ZS5sZW5ndGggLSAxKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0LyogVE9ETyBBZGQgZGlhZ29ub3N0aWNzIExvZy53YXJuaW5nKFwiQ29udGFpbnMgT3B0aW9uIGNhbm5vdCBiZSB1c2VkIHdpdGhvdXQgJyonLlwiKSAqL1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBcIkVRXCI6XG5cdFx0XHRzSW50ZXJuYWxPcGVyYXRpb24gPSBvVjEgPT09IFwiXCIgPyBcIkVtcHR5XCIgOiBzT3B0aW9uO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBcIk5FXCI6XG5cdFx0XHRzSW50ZXJuYWxPcGVyYXRpb24gPSBvVjEgPT09IFwiXCIgPyBcIk5vdEVtcHR5XCIgOiBzT3B0aW9uO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBcIkJUXCI6XG5cdFx0XHRpZiAob1YyID09PSB1bmRlZmluZWQgfHwgb1YyID09PSBudWxsKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdG9WYWx1ZTIgPSBvVjI7XG5cdFx0XHRzSW50ZXJuYWxPcGVyYXRpb24gPSBzT3B0aW9uO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBcIkxFXCI6XG5cdFx0Y2FzZSBcIkdFXCI6XG5cdFx0Y2FzZSBcIkdUXCI6XG5cdFx0Y2FzZSBcIkxUXCI6XG5cdFx0XHRzSW50ZXJuYWxPcGVyYXRpb24gPSBzT3B0aW9uO1xuXHRcdFx0YnJlYWs7XG5cdFx0ZGVmYXVsdDpcblx0XHRcdC8qIFRPRE8gQWRkIGRpYWdvbm9zdGljcyBMb2cud2FybmluZyhcIlNlbGVjdGlvbiBPcHRpb24gaXMgbm90IHN1cHBvcnRlZCA6ICdcIiArIHNPcHRpb24gKyBcIidcIik7ICovXG5cdFx0XHRyZXR1cm47XG5cdH1cblx0aWYgKHNTaWduID09PSBcIkVcIikge1xuXHRcdHNJbnRlcm5hbE9wZXJhdGlvbiA9IG9FeGNsdWRlTWFwW3NJbnRlcm5hbE9wZXJhdGlvbl07XG5cdH1cblx0b0NvbmRpdGlvbi5vcGVyYXRvciA9IHNJbnRlcm5hbE9wZXJhdGlvbjtcblx0aWYgKHNJbnRlcm5hbE9wZXJhdGlvbiAhPT0gXCJFbXB0eVwiKSB7XG5cdFx0b0NvbmRpdGlvbi52YWx1ZXMucHVzaChvVmFsdWUpO1xuXHRcdGlmIChvVmFsdWUyKSB7XG5cdFx0XHRvQ29uZGl0aW9uLnZhbHVlcy5wdXNoKG9WYWx1ZTIpO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gb0NvbmRpdGlvbjtcbn1cblxuLyogTWV0aG9kIHRvIGdldCB0aGUgb3BlcmF0b3IgZnJvbSB0aGUgU2VsZWN0aW9uIE9wdGlvbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldE9wZXJhdG9yKHNPcGVyYXRvcjogc3RyaW5nKTogc3RyaW5nIHtcblx0cmV0dXJuIHNPcGVyYXRvci5pbmRleE9mKFwiL1wiKSA+IDAgPyBzT3BlcmF0b3Iuc3BsaXQoXCIvXCIpWzFdIDogc09wZXJhdG9yO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RmlsdGVyc0NvbmRpdGlvbnNGcm9tU2VsZWN0aW9uVmFyaWFudChcblx0ZW50aXR5VHlwZVByb3BlcnRpZXM6IFJlY29yZDxzdHJpbmcsIG9iamVjdD4sXG5cdHNlbGVjdGlvblZhcmlhbnQ6IFNlbGVjdGlvblZhcmlhbnRUeXBlVHlwZXMsXG5cdGdldEN1c3RvbUNvbmRpdGlvbnM/OiBGdW5jdGlvblxuKTogUmVjb3JkPHN0cmluZywgRmlsdGVyQ29uZGl0aW9uc1tdPiB7XG5cdGNvbnN0IG9GaWx0ZXJDb25kaXRpb25zOiBSZWNvcmQ8c3RyaW5nLCBGaWx0ZXJDb25kaXRpb25zW10+ID0ge307XG5cdGlmIChzZWxlY3Rpb25WYXJpYW50KSB7XG5cdFx0Y29uc3QgYVNlbGVjdE9wdGlvbnMgPSBzZWxlY3Rpb25WYXJpYW50LlNlbGVjdE9wdGlvbnM7XG5cdFx0Y29uc3QgYVBhcmFtZXRlcnMgPSBzZWxlY3Rpb25WYXJpYW50LlBhcmFtZXRlcnM7XG5cdFx0Y29uc3QgYVZhbGlkUHJvcGVydGllcyA9IGVudGl0eVR5cGVQcm9wZXJ0aWVzO1xuXHRcdGFTZWxlY3RPcHRpb25zPy5mb3JFYWNoKChzZWxlY3RPcHRpb246IFNlbGVjdE9wdGlvblR5cGUpID0+IHtcblx0XHRcdGNvbnN0IHByb3BlcnR5TmFtZTogYW55ID0gc2VsZWN0T3B0aW9uLlByb3BlcnR5TmFtZTtcblx0XHRcdGNvbnN0IHNQcm9wZXJ0eU5hbWU6IHN0cmluZyA9IHByb3BlcnR5TmFtZS52YWx1ZSB8fCBwcm9wZXJ0eU5hbWUuJFByb3BlcnR5UGF0aDtcblx0XHRcdGNvbnN0IFJhbmdlczogYW55ID0gc2VsZWN0T3B0aW9uLlJhbmdlcztcblx0XHRcdGZvciAoY29uc3Qga2V5IGluIGFWYWxpZFByb3BlcnRpZXMpIHtcblx0XHRcdFx0aWYgKHNQcm9wZXJ0eU5hbWUgPT09IGtleSkge1xuXHRcdFx0XHRcdGNvbnN0IG9WYWxpZFByb3BlcnR5ID0gYVZhbGlkUHJvcGVydGllc1trZXldIGFzIGFueTtcblx0XHRcdFx0XHRjb25zdCBhQ29uZGl0aW9uczogYW55W10gPSBbXTtcblx0XHRcdFx0XHRSYW5nZXM/LmZvckVhY2goKFJhbmdlOiBhbnkpID0+IHtcblx0XHRcdFx0XHRcdGNvbnN0IG9Db25kaXRpb24gPSBnZXRDdXN0b21Db25kaXRpb25zXG5cdFx0XHRcdFx0XHRcdD8gZ2V0Q3VzdG9tQ29uZGl0aW9ucyhSYW5nZSwgb1ZhbGlkUHJvcGVydHksIHNQcm9wZXJ0eU5hbWUpXG5cdFx0XHRcdFx0XHRcdDogZ2V0Q29uZGl0aW9ucyhSYW5nZSwgb1ZhbGlkUHJvcGVydHkpO1xuXHRcdFx0XHRcdFx0YUNvbmRpdGlvbnMucHVzaChvQ29uZGl0aW9uKTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRpZiAoYUNvbmRpdGlvbnMubGVuZ3RoKSB7XG5cdFx0XHRcdFx0XHRvRmlsdGVyQ29uZGl0aW9uc1tzUHJvcGVydHlOYW1lXSA9IChvRmlsdGVyQ29uZGl0aW9uc1tzUHJvcGVydHlOYW1lXSB8fCBbXSkuY29uY2F0KGFDb25kaXRpb25zKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KTtcblx0XHRhUGFyYW1ldGVycz8uZm9yRWFjaCgocGFyYW1ldGVyOiBhbnkpID0+IHtcblx0XHRcdGNvbnN0IHNQcm9wZXJ0eVBhdGggPSBwYXJhbWV0ZXIuUHJvcGVydHlOYW1lLnZhbHVlIHx8IHBhcmFtZXRlci5Qcm9wZXJ0eU5hbWUuJFByb3BlcnR5UGF0aDtcblx0XHRcdGNvbnN0IG9Db25kaXRpb246IGFueSA9IGdldEN1c3RvbUNvbmRpdGlvbnNcblx0XHRcdFx0PyB7IG9wZXJhdG9yOiBcIkVRXCIsIHZhbHVlMTogcGFyYW1ldGVyLlByb3BlcnR5VmFsdWUsIHZhbHVlMjogbnVsbCwgcGF0aDogc1Byb3BlcnR5UGF0aCwgaXNQYXJhbWV0ZXI6IHRydWUgfVxuXHRcdFx0XHQ6IHtcblx0XHRcdFx0XHRcdG9wZXJhdG9yOiBcIkVRXCIsXG5cdFx0XHRcdFx0XHR2YWx1ZXM6IFtwYXJhbWV0ZXIuUHJvcGVydHlWYWx1ZV0sXG5cdFx0XHRcdFx0XHRpc0VtcHR5OiBudWxsLFxuXHRcdFx0XHRcdFx0dmFsaWRhdGVkOiBDb25kaXRpb25WYWxpZGF0ZWQuVmFsaWRhdGVkLFxuXHRcdFx0XHRcdFx0aXNQYXJhbWV0ZXI6IHRydWVcblx0XHRcdFx0ICB9O1xuXHRcdFx0b0ZpbHRlckNvbmRpdGlvbnNbc1Byb3BlcnR5UGF0aF0gPSBbb0NvbmRpdGlvbl07XG5cdFx0fSk7XG5cdH1cblx0cmV0dXJuIG9GaWx0ZXJDb25kaXRpb25zO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q29uZGl0aW9ucyhSYW5nZTogYW55LCBvVmFsaWRQcm9wZXJ0eTogYW55KSB7XG5cdGxldCBvQ29uZGl0aW9uO1xuXHRjb25zdCBzaWduOiBzdHJpbmcgfCB1bmRlZmluZWQgPSBSYW5nZS5TaWduO1xuXHRjb25zdCBzT3B0aW9uOiBzdHJpbmcgfCB1bmRlZmluZWQgPSBSYW5nZS5PcHRpb24gPyBnZXRPcGVyYXRvcihSYW5nZS5PcHRpb24pIDogdW5kZWZpbmVkO1xuXHRjb25zdCBvVmFsdWUxOiBhbnkgPSBnZXRUeXBlQ29tcGxpYW50VmFsdWUoUmFuZ2UuTG93LCBvVmFsaWRQcm9wZXJ0eS4kVHlwZSk7XG5cdGNvbnN0IG9WYWx1ZTI6IGFueSA9IFJhbmdlLkhpZ2ggPyBnZXRUeXBlQ29tcGxpYW50VmFsdWUoUmFuZ2UuSGlnaCwgb1ZhbGlkUHJvcGVydHkuJFR5cGUpIDogdW5kZWZpbmVkO1xuXHRjb25zdCBvQ29uZGl0aW9uVmFsdWVzID0gcmVzb2x2ZUNvbmRpdGlvblZhbHVlcyhzT3B0aW9uLCBvVmFsdWUxLCBvVmFsdWUyLCBzaWduKSBhcyBhbnk7XG5cdGlmIChvQ29uZGl0aW9uVmFsdWVzKSB7XG5cdFx0b0NvbmRpdGlvbiA9IGNyZWF0ZUNvbmRpdGlvbihvQ29uZGl0aW9uVmFsdWVzLm9wZXJhdG9yLCBvQ29uZGl0aW9uVmFsdWVzLnZhbHVlcywgbnVsbCwgbnVsbCwgQ29uZGl0aW9uVmFsaWRhdGVkLlZhbGlkYXRlZCk7XG5cdH1cblx0cmV0dXJuIG9Db25kaXRpb247XG59XG5cbmNvbnN0IGdldERlZmF1bHRWYWx1ZUZpbHRlcnMgPSBmdW5jdGlvbihvQ29udGV4dDogYW55LCBwcm9wZXJ0aWVzOiBhbnkpOiBSZWNvcmQ8c3RyaW5nLCBGaWx0ZXJDb25kaXRpb25zW10+IHtcblx0Y29uc3QgZmlsdGVyQ29uZGl0aW9uczogUmVjb3JkPHN0cmluZywgRmlsdGVyQ29uZGl0aW9uc1tdPiA9IHt9O1xuXHRjb25zdCBlbnRpdHlTZXRQYXRoID0gb0NvbnRleHQuZ2V0SW50ZXJmYWNlKDEpLmdldFBhdGgoKSxcblx0XHRvTWV0YU1vZGVsID0gb0NvbnRleHQuZ2V0SW50ZXJmYWNlKDEpLmdldE1vZGVsKCk7XG5cdGlmIChwcm9wZXJ0aWVzKSB7XG5cdFx0Zm9yIChjb25zdCBrZXkgaW4gcHJvcGVydGllcykge1xuXHRcdFx0Y29uc3QgZGVmYXVsdEZpbHRlclZhbHVlID0gb01ldGFNb2RlbC5nZXRPYmplY3QoXG5cdFx0XHRcdGVudGl0eVNldFBhdGggKyBcIi9cIiArIGtleSArIFwiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5GaWx0ZXJEZWZhdWx0VmFsdWVcIlxuXHRcdFx0KTtcblx0XHRcdGlmIChkZWZhdWx0RmlsdGVyVmFsdWUgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRjb25zdCBQcm9wZXJ0eU5hbWUgPSBrZXk7XG5cdFx0XHRcdGZpbHRlckNvbmRpdGlvbnNbUHJvcGVydHlOYW1lXSA9IFtcblx0XHRcdFx0XHRjcmVhdGVDb25kaXRpb24oXCJFUVwiLCBbZGVmYXVsdEZpbHRlclZhbHVlXSwgbnVsbCwgbnVsbCwgQ29uZGl0aW9uVmFsaWRhdGVkLlZhbGlkYXRlZCkgYXMgRmlsdGVyQ29uZGl0aW9uc1xuXHRcdFx0XHRdO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHRyZXR1cm4gZmlsdGVyQ29uZGl0aW9ucztcbn07XG5cbmNvbnN0IGdldERlZmF1bHRTZW1hbnRpY0RhdGVGaWx0ZXJzID0gZnVuY3Rpb24oXG5cdG9Db250ZXh0OiBhbnksXG5cdHByb3BlcnRpZXM6IGFueSxcblx0ZGVmYXVsdFNlbWFudGljRGF0ZXM6IGFueVxuKTogUmVjb3JkPHN0cmluZywgRmlsdGVyQ29uZGl0aW9uc1tdPiB7XG5cdGNvbnN0IGZpbHRlckNvbmRpdGlvbnM6IFJlY29yZDxzdHJpbmcsIEZpbHRlckNvbmRpdGlvbnNbXT4gPSB7fTtcblx0aWYgKHByb3BlcnRpZXMpIHtcblx0XHRmb3IgKGNvbnN0IGtleSBpbiBwcm9wZXJ0aWVzKSB7XG5cdFx0XHQvLyBjdXJyZW50bHkgZGVmYXVsdFNlbWFudGljRGF0ZXMgY2FuIHN1cHBvcnQgb25seSBvbmUgZW50cnksIHdlIHBpY2sgdGhlIGZpcnN0IG9uZSBkaXJlY3RseSB1c2luZyAwIGluZGV4XG5cdFx0XHRpZiAoZGVmYXVsdFNlbWFudGljRGF0ZXNba2V5XSAmJiBkZWZhdWx0U2VtYW50aWNEYXRlc1trZXldWzBdKSB7XG5cdFx0XHRcdGZpbHRlckNvbmRpdGlvbnNba2V5XSA9IFtjcmVhdGVDb25kaXRpb24oZGVmYXVsdFNlbWFudGljRGF0ZXNba2V5XVswXS5vcGVyYXRvciwgW10sIG51bGwsIG51bGwsIG51bGwpIGFzIEZpbHRlckNvbmRpdGlvbnNdO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHRyZXR1cm4gZmlsdGVyQ29uZGl0aW9ucztcbn07XG5cbmZ1bmN0aW9uIGdldEVkaXRTdGF0dXNGaWx0ZXIoKTogUmVjb3JkPHN0cmluZywgRmlsdGVyQ29uZGl0aW9uc1tdPiB7XG5cdGNvbnN0IG9maWx0ZXJDb25kaXRpb25zOiBSZWNvcmQ8c3RyaW5nLCBGaWx0ZXJDb25kaXRpb25zW10+ID0ge307XG5cdG9maWx0ZXJDb25kaXRpb25zW1wiJGVkaXRTdGF0ZVwiXSA9IFtcblx0XHRjcmVhdGVDb25kaXRpb24oXCJEUkFGVF9FRElUX1NUQVRFXCIsIFtcIkFMTFwiXSwgbnVsbCwgbnVsbCwgQ29uZGl0aW9uVmFsaWRhdGVkLlZhbGlkYXRlZCkgYXMgRmlsdGVyQ29uZGl0aW9uc1xuXHRdO1xuXHRyZXR1cm4gb2ZpbHRlckNvbmRpdGlvbnM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRGaWx0ZXJDb25kaXRpb25zKG9Db250ZXh0OiBhbnksIGZpbHRlckNvbmRpdGlvbnM6IGFueSk6IFJlY29yZDxzdHJpbmcsIEZpbHRlckNvbmRpdGlvbnNbXT4ge1xuXHRsZXQgZWRpdFN0YXRlRmlsdGVyO1xuXHRjb25zdCBlbnRpdHlTZXRQYXRoID0gb0NvbnRleHQuZ2V0SW50ZXJmYWNlKDEpLmdldFBhdGgoKSxcblx0XHRvTWV0YU1vZGVsID0gb0NvbnRleHQuZ2V0SW50ZXJmYWNlKDEpLmdldE1vZGVsKCksXG5cdFx0ZW50aXR5VHlwZUFubm90YXRpb25zID0gb01ldGFNb2RlbC5nZXRPYmplY3QoZW50aXR5U2V0UGF0aCArIFwiQFwiKSxcblx0XHRlbnRpdHlUeXBlUHJvcGVydGllcyA9IG9NZXRhTW9kZWwuZ2V0T2JqZWN0KGVudGl0eVNldFBhdGggKyBcIi9cIik7XG5cdGlmIChcblx0XHRlbnRpdHlUeXBlQW5ub3RhdGlvbnNbXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkRyYWZ0Um9vdFwiXSB8fFxuXHRcdGVudGl0eVR5cGVBbm5vdGF0aW9uc1tcIkBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuRHJhZnROb2RlXCJdXG5cdCkge1xuXHRcdGVkaXRTdGF0ZUZpbHRlciA9IGdldEVkaXRTdGF0dXNGaWx0ZXIoKTtcblx0fVxuXHRjb25zdCBzZWxlY3Rpb25WYXJpYW50ID0gZmlsdGVyQ29uZGl0aW9ucz8uc2VsZWN0aW9uVmFyaWFudDtcblx0Y29uc3QgZGVmYXVsdFNlbWFudGljRGF0ZXMgPSBmaWx0ZXJDb25kaXRpb25zPy5kZWZhdWx0U2VtYW50aWNEYXRlcyB8fCB7fTtcblx0Y29uc3QgZGVmYXVsdEZpbHRlcnMgPSBnZXREZWZhdWx0VmFsdWVGaWx0ZXJzKG9Db250ZXh0LCBlbnRpdHlUeXBlUHJvcGVydGllcyk7XG5cdGNvbnN0IGRlZmF1bHRTZW1hbnRpY0RhdGVGaWx0ZXJzID0gZ2V0RGVmYXVsdFNlbWFudGljRGF0ZUZpbHRlcnMob0NvbnRleHQsIGVudGl0eVR5cGVQcm9wZXJ0aWVzLCBkZWZhdWx0U2VtYW50aWNEYXRlcyk7XG5cdGlmIChzZWxlY3Rpb25WYXJpYW50KSB7XG5cdFx0ZmlsdGVyQ29uZGl0aW9ucyA9IGdldEZpbHRlcnNDb25kaXRpb25zRnJvbVNlbGVjdGlvblZhcmlhbnQoZW50aXR5VHlwZVByb3BlcnRpZXMsIHNlbGVjdGlvblZhcmlhbnQpO1xuXHR9IGVsc2UgaWYgKGRlZmF1bHRGaWx0ZXJzKSB7XG5cdFx0ZmlsdGVyQ29uZGl0aW9ucyA9IGRlZmF1bHRGaWx0ZXJzO1xuXHR9XG5cdGlmIChkZWZhdWx0U2VtYW50aWNEYXRlRmlsdGVycykge1xuXHRcdC8vIG9ubHkgZm9yIHNlbWFudGljIGRhdGU6XG5cdFx0Ly8gMS4gdmFsdWUgZnJvbSBtYW5pZmVzdCBnZXQgbWVyZ2VkIHdpdGggU1Zcblx0XHQvLyAyLiBtYW5pZmVzdCB2YWx1ZSBpcyBnaXZlbiBwcmVmZXJlbmNlIHdoZW4gdGhlcmUgaXMgc2FtZSBzZW1hbnRpYyBkYXRlIHByb3BlcnR5IGluIFNWIGFuZCBtYW5pZmVzdFxuXHRcdGZpbHRlckNvbmRpdGlvbnMgPSB7IC4uLmZpbHRlckNvbmRpdGlvbnMsIC4uLmRlZmF1bHRTZW1hbnRpY0RhdGVGaWx0ZXJzIH07XG5cdH1cblx0aWYgKGVkaXRTdGF0ZUZpbHRlcikge1xuXHRcdGZpbHRlckNvbmRpdGlvbnMgPSB7IC4uLmZpbHRlckNvbmRpdGlvbnMsIC4uLmVkaXRTdGF0ZUZpbHRlciB9O1xuXHR9XG5cdHJldHVybiAoT2JqZWN0LmtleXMoZmlsdGVyQ29uZGl0aW9ucykubGVuZ3RoID4gMCA/IEpTT04uc3RyaW5naWZ5KGZpbHRlckNvbmRpdGlvbnMpIDogdW5kZWZpbmVkKSBhcyBhbnk7XG59XG5cbmdldEZpbHRlckNvbmRpdGlvbnMucmVxdWlyZXNJQ29udGV4dCA9IHRydWU7XG4iXX0=
|
|
@@ -174,7 +174,7 @@ export function getFiltersConditionsFromSelectionVariant(
|
|
|
174
174
|
selectionVariant: SelectionVariantTypeTypes,
|
|
175
175
|
getCustomConditions?: Function
|
|
176
176
|
): Record<string, FilterConditions[]> {
|
|
177
|
-
const
|
|
177
|
+
const oFilterConditions: Record<string, FilterConditions[]> = {};
|
|
178
178
|
if (selectionVariant) {
|
|
179
179
|
const aSelectOptions = selectionVariant.SelectOptions;
|
|
180
180
|
const aParameters = selectionVariant.Parameters;
|
|
@@ -192,10 +192,10 @@ export function getFiltersConditionsFromSelectionVariant(
|
|
|
192
192
|
? getCustomConditions(Range, oValidProperty, sPropertyName)
|
|
193
193
|
: getConditions(Range, oValidProperty);
|
|
194
194
|
aConditions.push(oCondition);
|
|
195
|
-
if (aConditions.length) {
|
|
196
|
-
ofilterConditions[sPropertyName] = (ofilterConditions[sPropertyName] || []).concat(aConditions);
|
|
197
|
-
}
|
|
198
195
|
});
|
|
196
|
+
if (aConditions.length) {
|
|
197
|
+
oFilterConditions[sPropertyName] = (oFilterConditions[sPropertyName] || []).concat(aConditions);
|
|
198
|
+
}
|
|
199
199
|
}
|
|
200
200
|
}
|
|
201
201
|
});
|
|
@@ -210,10 +210,10 @@ export function getFiltersConditionsFromSelectionVariant(
|
|
|
210
210
|
validated: ConditionValidated.Validated,
|
|
211
211
|
isParameter: true
|
|
212
212
|
};
|
|
213
|
-
|
|
213
|
+
oFilterConditions[sPropertyPath] = [oCondition];
|
|
214
214
|
});
|
|
215
215
|
}
|
|
216
|
-
return
|
|
216
|
+
return oFilterConditions;
|
|
217
217
|
}
|
|
218
218
|
|
|
219
219
|
export function getConditions(Range: any, oValidProperty: any) {
|