@sapui5/sap.fe.macros 1.99.0 → 1.99.3

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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sapui5/sap.fe.macros",
3
- "version": "1.99.0",
3
+ "version": "1.99.3",
4
4
  "description": "SAPUI5 Library sap.fe.macros",
5
5
  "license": "SEE LICENSE IN LICENSE.txt",
6
6
  "author": "SAP SE (https://www.sap.com)",
@@ -6,7 +6,7 @@
6
6
  <copyright>SAP UI development toolkit for HTML5 (SAPUI5)
7
7
  (c) Copyright 2009-2021 SAP SE. All rights reserved
8
8
  </copyright>
9
- <version>1.99.0</version>
9
+ <version>1.99.3</version>
10
10
 
11
11
  <documentation>UI5 library: sap.fe.macros</documentation>
12
12
 
@@ -16,7 +16,7 @@ sap.ui.define(
16
16
  "sap/ui/Device",
17
17
  "sap/m/library"
18
18
  ],
19
- function(
19
+ function (
20
20
  ResourceModel,
21
21
  ODataModelAnnotationHelper,
22
22
  Log,
@@ -31,7 +31,7 @@ sap.ui.define(
31
31
  "use strict";
32
32
  var ValueColor = mobilelibrary.ValueColor;
33
33
  var Helper = {
34
- getPathToKey: function(oCtx) {
34
+ getPathToKey: function (oCtx) {
35
35
  return oCtx.getObject();
36
36
  },
37
37
 
@@ -42,7 +42,7 @@ sap.ui.define(
42
42
  * @param {object} oInterface Interface instance
43
43
  * @returns {string|boolean} Returns true, false, or expression with path, for example "{= !${IsActiveEntity} }"
44
44
  */
45
- isVisible: function(target, oInterface) {
45
+ isVisible: function (target, oInterface) {
46
46
  var oModel = oInterface.context.getModel(),
47
47
  sPropertyPath = oInterface.context.getPath(),
48
48
  oAnnotations = oModel.getObject(sPropertyPath + "@"),
@@ -58,7 +58,7 @@ sap.ui.define(
58
58
  * @param oInterface
59
59
  * @returns {boolean} `true` if a dialog is needed
60
60
  */
61
- isDialog: function(oActionContext, oInterface) {
61
+ isDialog: function (oActionContext, oInterface) {
62
62
  var oModel = oInterface.context.getModel(),
63
63
  sPropertyPath = oInterface.context.getPath(),
64
64
  isCritical = oModel.getObject(sPropertyPath + "/@$ui5.overload@com.sap.vocabularies.Common.v1.IsActionCritical");
@@ -80,7 +80,7 @@ sap.ui.define(
80
80
  * @param {object} oInterface Interface instance
81
81
  * @returns {string} A Binding Expression to determine if a field should be editable or not.
82
82
  */
83
- getParameterEditMode: function(target, oInterface) {
83
+ getParameterEditMode: function (target, oInterface) {
84
84
  var oModel = oInterface.context.getModel(),
85
85
  sPropertyPath = oInterface.context.getPath(),
86
86
  oAnnotations = oModel.getObject(sPropertyPath + "@"),
@@ -129,13 +129,13 @@ sap.ui.define(
129
129
  * @param oInterface
130
130
  * @returns {string | undefined}
131
131
  */
132
- getMetaPath: function(target, oInterface) {
132
+ getMetaPath: function (target, oInterface) {
133
133
  return (oInterface && oInterface.context && oInterface.context.getPath()) || undefined;
134
134
  },
135
- isDesktop: function() {
135
+ isDesktop: function () {
136
136
  return Device.system.desktop === true;
137
137
  },
138
- getTargetCollection: function(oContext, navCollection) {
138
+ getTargetCollection: function (oContext, navCollection) {
139
139
  var sPath = oContext.getPath(),
140
140
  aParts,
141
141
  entitySet,
@@ -149,13 +149,10 @@ sap.ui.define(
149
149
  if (oContext.getModel) {
150
150
  sPath =
151
151
  (oContext.getModel().getMetaPath && oContext.getModel().getMetaPath(sPath)) ||
152
- oContext
153
- .getModel()
154
- .getMetaModel()
155
- .getMetaPath(sPath);
152
+ oContext.getModel().getMetaModel().getMetaPath(sPath);
156
153
  }
157
154
  //Supporting sPath of any format, either '/<entitySet>/<navigationCollection>' <OR> '/<entitySet>/$Type/<navigationCollection>'
158
- aParts = sPath.split("/").filter(function(sPart) {
155
+ aParts = sPath.split("/").filter(function (sPart) {
159
156
  return sPart && sPart != "$Type";
160
157
  }); //filter out empty strings and parts referring to '$Type'
161
158
  entitySet = "/" + aParts[0];
@@ -166,7 +163,7 @@ sap.ui.define(
166
163
  return entitySet + "/$NavigationPropertyBinding/" + navigationCollection; // used in gotoTargetEntitySet method in the same file
167
164
  },
168
165
 
169
- isPropertyFilterable: function(property, oInterface, oDataField) {
166
+ isPropertyFilterable: function (property, oInterface, oDataField) {
170
167
  var oModel = oInterface.context.getModel(),
171
168
  sPropertyPath = oInterface.context.getPath(),
172
169
  // LoacationPath would be the prefix of sPropertyPath, example: sPropertyPath = '/Customer/Set/Name' -> sPropertyLocationPath = '/Customer/Set'
@@ -184,7 +181,7 @@ sap.ui.define(
184
181
  return CommonUtils.isPropertyFilterable(oModel, sPropertyLocationPath, sProperty);
185
182
  },
186
183
 
187
- getLocationForPropertyPath: function(oModel, sPropertyPath) {
184
+ getLocationForPropertyPath: function (oModel, sPropertyPath) {
188
185
  var iLength;
189
186
  var sCollectionPath = sPropertyPath.slice(0, sPropertyPath.lastIndexOf("/"));
190
187
  if (oModel.getObject(sCollectionPath + "/$kind") === "EntityContainer") {
@@ -193,7 +190,7 @@ sap.ui.define(
193
190
  }
194
191
  return sCollectionPath;
195
192
  },
196
- gotoActionParameter: function(oContext) {
193
+ gotoActionParameter: function (oContext) {
197
194
  var sPath = oContext.getPath(),
198
195
  sPropertyName = oContext.getObject(sPath + "/$Name");
199
196
  var sContext;
@@ -216,7 +213,7 @@ sap.ui.define(
216
213
  * @private
217
214
  * @ui5-restricted
218
215
  */
219
- getEntitySetName: function(oMetaModel, sEntityType) {
216
+ getEntitySetName: function (oMetaModel, sEntityType) {
220
217
  var oEntityContainer = oMetaModel.getObject("/");
221
218
  for (var key in oEntityContainer) {
222
219
  if (typeof oEntityContainer[key] === "object" && oEntityContainer[key].$Type === sEntityType) {
@@ -240,7 +237,7 @@ sap.ui.define(
240
237
  * @private
241
238
  * @ui5-restricted
242
239
  */
243
- getActionPath: function(oAction, bReturnOnlyPath, sActionName, bCheckStaticValue) {
240
+ getActionPath: function (oAction, bReturnOnlyPath, sActionName, bCheckStaticValue) {
244
241
  var sContextPath = oAction.getPath().split("/@")[0];
245
242
 
246
243
  sActionName = !sActionName ? oAction.getObject(oAction.getPath()) : sActionName;
@@ -286,7 +283,7 @@ sap.ui.define(
286
283
  * @param {string} sPropertyPath The property path
287
284
  * @returns {string|boolean} A runtime binding or fixed string value for Field true/false for Rating Indicator
288
285
  */
289
- getEditMode: function(
286
+ getEditMode: function (
290
287
  oAnnotations,
291
288
  sDataFieldType,
292
289
  oFieldControl,
@@ -488,7 +485,7 @@ sap.ui.define(
488
485
  return sExpression;
489
486
  },
490
487
 
491
- getNavigationContext: function(oContext) {
488
+ getNavigationContext: function (oContext) {
492
489
  return ODataModelAnnotationHelper.getNavigationPath(oContext.getPath());
493
490
  },
494
491
 
@@ -503,9 +500,9 @@ sap.ui.define(
503
500
  * @param bKeepProperty
504
501
  * @returns {string} The navigation path
505
502
  */
506
- getNavigationPath: function(sPropertyPath, bKeepProperty) {
503
+ getNavigationPath: function (sPropertyPath, bKeepProperty) {
507
504
  var bStartsWithEntityType = sPropertyPath.startsWith("/");
508
- var aParts = sPropertyPath.split("/").filter(function(part) {
505
+ var aParts = sPropertyPath.split("/").filter(function (part) {
509
506
  return !!part;
510
507
  });
511
508
  if (bStartsWithEntityType) {
@@ -534,7 +531,7 @@ sap.ui.define(
534
531
  * @private
535
532
  * @ui5-restricted
536
533
  **/
537
- getActionContext: function(oAction) {
534
+ getActionContext: function (oAction) {
538
535
  return Helper.getActionPath(oAction, true);
539
536
  },
540
537
  /**
@@ -551,7 +548,7 @@ sap.ui.define(
551
548
  * @private
552
549
  * @ui5-restricted
553
550
  **/
554
- getPathToBoundActionOverload: function(oAction) {
551
+ getPathToBoundActionOverload: function (oAction) {
555
552
  var sPath = Helper.getActionPath(oAction, true);
556
553
  return sPath + "/@$ui5.overload/0";
557
554
  },
@@ -565,7 +562,7 @@ sap.ui.define(
565
562
  * @param {boolean} bEscape Should the string be escaped beforehand
566
563
  * @returns {string} - String with single quotes
567
564
  **/
568
- addSingleQuotes: function(sValue, bEscape) {
565
+ addSingleQuotes: function (sValue, bEscape) {
569
566
  if (bEscape && sValue) {
570
567
  sValue = this.escapeSingleQuotes(sValue);
571
568
  }
@@ -580,7 +577,7 @@ sap.ui.define(
580
577
  * @param {string} sValue Some string that needs escaping of single quotes
581
578
  * @returns {string} - String with escaped single quotes
582
579
  **/
583
- escapeSingleQuotes: function(sValue) {
580
+ escapeSingleQuotes: function (sValue) {
584
581
  return sValue.replace(/[']/g, "\\'");
585
582
  },
586
583
 
@@ -593,7 +590,7 @@ sap.ui.define(
593
590
  * @param {string} sFuncName Some string for the function name
594
591
  * @returns {string} - Function string depends on arguments passed
595
592
  **/
596
- generateFunction: function(sFuncName) {
593
+ generateFunction: function (sFuncName) {
597
594
  var sParams = "";
598
595
  for (var i = 1; i < arguments.length; i++) {
599
596
  sParams += arguments[i];
@@ -619,7 +616,7 @@ sap.ui.define(
619
616
  *
620
617
  */
621
618
 
622
- getHeaderDataPointLinkVisibility: function(sPath, bLink, bFieldVisibility) {
619
+ getHeaderDataPointLinkVisibility: function (sPath, bLink, bFieldVisibility) {
623
620
  var sVisibilityExp;
624
621
  if (bFieldVisibility) {
625
622
  sVisibilityExp = bLink
@@ -641,7 +638,7 @@ sap.ui.define(
641
638
  * @param {string} oParams Some object
642
639
  * @returns {string} - Object string
643
640
  **/
644
- objectToString: function(oParams) {
641
+ objectToString: function (oParams) {
645
642
  var iNumberOfKeys = Object.keys(oParams).length,
646
643
  sParams = "";
647
644
 
@@ -669,7 +666,7 @@ sap.ui.define(
669
666
  * @param {string} sExpression An expression with escape characters
670
667
  * @returns {string} Expression string without escape characters or undefined
671
668
  **/
672
- removeEscapeCharacters: function(sExpression) {
669
+ removeEscapeCharacters: function (sExpression) {
673
670
  return sExpression ? sExpression.replace(/\\?\\([{}])/g, "$1") : undefined;
674
671
  },
675
672
 
@@ -679,7 +676,7 @@ sap.ui.define(
679
676
  * @param {string} sStringified
680
677
  * @returns {string} The updated string representation of the object
681
678
  */
682
- stringifyObject: function(sStringified) {
679
+ stringifyObject: function (sStringified) {
683
680
  if (!sStringified) {
684
681
  return undefined;
685
682
  } else {
@@ -704,7 +701,7 @@ sap.ui.define(
704
701
  * @param {object} vData The data to stringify
705
702
  * @returns {string} The string representation of the data.
706
703
  */
707
- stringifyCustomData: function(vData) {
704
+ stringifyCustomData: function (vData) {
708
705
  var oObject = {
709
706
  ui5object: true
710
707
  };
@@ -718,7 +715,7 @@ sap.ui.define(
718
715
  * @param {object | string} vData The data to parse
719
716
  * @returns {object} The result of the data parsing
720
717
  */
721
- parseCustomData: function(vData) {
718
+ parseCustomData: function (vData) {
722
719
  var vData = typeof vData === "string" ? JSON.parse(vData) : vData;
723
720
  if ("customData" in vData) {
724
721
  return vData["customData"];
@@ -732,7 +729,7 @@ sap.ui.define(
732
729
  * @param {string} sEntityType The EntityType name
733
730
  * @returns {object} The DraftAdministrativeData
734
731
  */
735
- _getDraftAdministrativeDataType: function(oMetaModel, sEntityType) {
732
+ _getDraftAdministrativeDataType: function (oMetaModel, sEntityType) {
736
733
  return oMetaModel.requestObject("/" + sEntityType + "/DraftAdministrativeData/");
737
734
  },
738
735
  /**
@@ -742,8 +739,8 @@ sap.ui.define(
742
739
  * @param {string} sEntityType The EntityType name
743
740
  * @returns {string} The Binding Expression for the draft popover
744
741
  */
745
- getPopoverText: function(iContext, sEntityType) {
746
- return Helper._getDraftAdministrativeDataType(iContext.getModel(), sEntityType).then(function(oDADEntityType) {
742
+ getPopoverText: function (iContext, sEntityType) {
743
+ return Helper._getDraftAdministrativeDataType(iContext.getModel(), sEntityType).then(function (oDADEntityType) {
747
744
  var sBinding =
748
745
  "{parts: [{path: 'HasDraftEntity', targetType: 'any'}, " +
749
746
  //"{path: 'DraftAdministrativeData/LastChangeDateTime'}, " +
@@ -760,7 +757,7 @@ sap.ui.define(
760
757
  return sBinding;
761
758
  });
762
759
  },
763
- getContextPath: function(oValue, oInterface) {
760
+ getContextPath: function (oValue, oInterface) {
764
761
  var sPath = oInterface && oInterface.context && oInterface.context.getPath();
765
762
  return sPath[sPath.length - 1] === "/" ? sPath.slice(0, -1) : sPath;
766
763
  },
@@ -770,7 +767,7 @@ sap.ui.define(
770
767
  * @param sPresentationVariantPath
771
768
  * @returns {string} Stringified JSON object
772
769
  */
773
- getSortConditions: function(oPresentationVariant, sPresentationVariantPath) {
770
+ getSortConditions: function (oPresentationVariant, sPresentationVariantPath) {
774
771
  if (
775
772
  oPresentationVariant &&
776
773
  this._isPresentationVariantAnnotation(sPresentationVariantPath) &&
@@ -779,7 +776,7 @@ sap.ui.define(
779
776
  var aSortConditions = {
780
777
  sorters: []
781
778
  };
782
- oPresentationVariant.SortOrder.forEach(function(oCondition) {
779
+ oPresentationVariant.SortOrder.forEach(function (oCondition) {
783
780
  var oSorter = {};
784
781
  oSorter.name = oCondition.Property.$PropertyPath;
785
782
  oSorter.descending = !!oCondition.Descending;
@@ -789,13 +786,13 @@ sap.ui.define(
789
786
  }
790
787
  return undefined;
791
788
  },
792
- _isPresentationVariantAnnotation: function(sAnnotationPath) {
789
+ _isPresentationVariantAnnotation: function (sAnnotationPath) {
793
790
  return (
794
791
  sAnnotationPath.indexOf("@com.sap.vocabularies.UI.v1.PresentationVariant") > -1 ||
795
792
  sAnnotationPath.indexOf("@com.sap.vocabularies.UI.v1.SelectionPresentationVariant") > -1
796
793
  );
797
794
  },
798
- createPresentationPathContext: function(oPresentationContext) {
795
+ createPresentationPathContext: function (oPresentationContext) {
799
796
  var aPaths = oPresentationContext.sPath.split("@") || [];
800
797
  var oModel = oPresentationContext.getModel();
801
798
  if (aPaths.length && aPaths[aPaths.length - 1].indexOf("com.sap.vocabularies.UI.v1.SelectionPresentationVariant") > -1) {
@@ -804,7 +801,7 @@ sap.ui.define(
804
801
  }
805
802
  return oModel.createBindingContext(oPresentationContext.sPath + "@sapui.name");
806
803
  },
807
- getPressHandlerForDataFieldForIBN: function(oDataField, sContext, bNavigateWithConfirmationDialog) {
804
+ getPressHandlerForDataFieldForIBN: function (oDataField, sContext, bNavigateWithConfirmationDialog) {
808
805
  var mNavigationParameters = {
809
806
  navigationContexts: sContext ? sContext : "${$source>/}.getBindingContext()"
810
807
  };
@@ -827,11 +824,11 @@ sap.ui.define(
827
824
  this.objectToString(mNavigationParameters)
828
825
  );
829
826
  },
830
- getEntitySet: function(oContext) {
827
+ getEntitySet: function (oContext) {
831
828
  var sPath = oContext.getPath();
832
829
  return ModelHelper.getEntitySetPath(sPath);
833
830
  },
834
- _isRatingIndicator: function(oControl) {
831
+ _isRatingIndicator: function (oControl) {
835
832
  if (oControl.isA("sap.fe.core.controls.FieldWrapper")) {
836
833
  var vContentDisplay = Array.isArray(oControl.getContentDisplay())
837
834
  ? oControl.getContentDisplay()[0]
@@ -842,7 +839,7 @@ sap.ui.define(
842
839
  }
843
840
  return false;
844
841
  },
845
- _updateStyleClassForRatingIndicator: function(oFieldWrapper, bLast) {
842
+ _updateStyleClassForRatingIndicator: function (oFieldWrapper, bLast) {
846
843
  var vContentDisplay = Array.isArray(oFieldWrapper.getContentDisplay())
847
844
  ? oFieldWrapper.getContentDisplay()[0]
848
845
  : oFieldWrapper.getContentDisplay();
@@ -869,7 +866,7 @@ sap.ui.define(
869
866
  * @param {*} sVisibleValue Either static boolean values or Array of path expressions for visibility of menu button.
870
867
  * @returns {*} The binding expression determining the visibility of menu actions.
871
868
  **/
872
- handleVisibilityOfMenuActions: function(sVisibleValue) {
869
+ handleVisibilityOfMenuActions: function (sVisibleValue) {
873
870
  var combinedConditions = [];
874
871
  if (Array.isArray(sVisibleValue)) {
875
872
  for (var i = 0; i < sVisibleValue.length; i++) {
@@ -921,7 +918,7 @@ sap.ui.define(
921
918
  * @param {string} sDeviationHigh ExpressionBinding for Higher Deviation level
922
919
  * @returns {string} Returns criticality calculation as expression binding
923
920
  */
924
- getCriticalityCalculationBinding: function(
921
+ getCriticalityCalculationBinding: function (
925
922
  sImprovementDirection,
926
923
  sValue,
927
924
  sDeviationLow,
@@ -1074,7 +1071,7 @@ sap.ui.define(
1074
1071
  * @returns {sIndicator} Return the indicator for criticality
1075
1072
  * @private
1076
1073
  */
1077
- _getCriticalityFromEnum: function(sCriticality) {
1074
+ _getCriticalityFromEnum: function (sCriticality) {
1078
1075
  var sIndicator;
1079
1076
  if (sCriticality === "com.sap.vocabularies.UI.v1.CriticalityType/Negative") {
1080
1077
  sIndicator = ValueColor.Error;
@@ -1087,11 +1084,11 @@ sap.ui.define(
1087
1084
  }
1088
1085
  return sIndicator;
1089
1086
  },
1090
- getValueCriticality: function(sDimension, aValueCriticality) {
1087
+ getValueCriticality: function (sDimension, aValueCriticality) {
1091
1088
  var sResult,
1092
1089
  aValues = [];
1093
1090
  if (aValueCriticality && aValueCriticality.length > 0) {
1094
- aValueCriticality.forEach(function(oVC) {
1091
+ aValueCriticality.forEach(function (oVC) {
1095
1092
  if (oVC.Value && oVC.Criticality.$EnumMember) {
1096
1093
  var sValue =
1097
1094
  "${" +
@@ -1116,13 +1113,13 @@ sap.ui.define(
1116
1113
  * @returns {string} MeasureAttribute index.
1117
1114
  * @private
1118
1115
  */
1119
- getMeasureAttributeIndex: function(iMeasure, oChartAnnotations) {
1116
+ getMeasureAttributeIndex: function (iMeasure, oChartAnnotations) {
1120
1117
  var aMeasures = oChartAnnotations.Measures,
1121
1118
  bMeasureAttributeExists,
1122
1119
  aMeasureAttributes = oChartAnnotations.MeasureAttributes,
1123
1120
  sMeasurePropertyPath = aMeasures && aMeasures[iMeasure] && aMeasures[iMeasure].$PropertyPath,
1124
1121
  iMeasureAttribute = -1,
1125
- fnCheckMeasure = function(sMeasure, oMeasureAttribute, index) {
1122
+ fnCheckMeasure = function (sMeasure, oMeasureAttribute, index) {
1126
1123
  if ((oMeasureAttribute && oMeasureAttribute.Measure && oMeasureAttribute.Measure.$PropertyPath) === sMeasure) {
1127
1124
  iMeasureAttribute = index;
1128
1125
  return true;
@@ -1139,13 +1136,13 @@ sap.ui.define(
1139
1136
  * @param {object} oContext Context to the measure annotation
1140
1137
  * @returns {string} Path to the measureAttribute of the measure
1141
1138
  */
1142
- getMeasureAttributeForMeasure: function(oContext) {
1139
+ getMeasureAttributeForMeasure: function (oContext) {
1143
1140
  var oMetaModel = oContext.getModel(),
1144
1141
  sMeasurePath = oContext.getPath(),
1145
1142
  sChartAnnotationPath = sMeasurePath.substring(0, sMeasurePath.lastIndexOf("Measure")),
1146
1143
  iMeasure = sMeasurePath.replace(/.*\//, "");
1147
1144
 
1148
- return oMetaModel.requestObject(sChartAnnotationPath).then(function(oChartAnnotations) {
1145
+ return oMetaModel.requestObject(sChartAnnotationPath).then(function (oChartAnnotations) {
1149
1146
  var aMeasureAttributes = oChartAnnotations.MeasureAttributes,
1150
1147
  iMeasureAttribute = Helper.getMeasureAttributeIndex(iMeasure, oChartAnnotations);
1151
1148
  var sMeasureAttributePath =
@@ -1164,7 +1161,7 @@ sap.ui.define(
1164
1161
  * @param {object} oTableMetadata Table metadata for which draft support shall be checked
1165
1162
  * @returns {boolean} Returns true if draft
1166
1163
  */
1167
- isDraftParentEntityForContainment: function(oTargetCollectionContainsTarget, oTableMetadata) {
1164
+ isDraftParentEntityForContainment: function (oTargetCollectionContainsTarget, oTableMetadata) {
1168
1165
  if (oTargetCollectionContainsTarget) {
1169
1166
  if (oTableMetadata && oTableMetadata.parentEntitySet && oTableMetadata.parentEntitySet.sPath) {
1170
1167
  var sParentEntitySetPath = oTableMetadata.parentEntitySet.sPath;
@@ -1194,7 +1191,7 @@ sap.ui.define(
1194
1191
  * @param {object} dataElement The data that is currently being processed.
1195
1192
  * @returns {string} The correct path according to the template.
1196
1193
  **/
1197
- getDataFromTemplate: function(dataElement) {
1194
+ getDataFromTemplate: function (dataElement) {
1198
1195
  var splitPath = dataElement.getPath().split("/");
1199
1196
  var dataKey = splitPath[splitPath.length - 1];
1200
1197
  var connectedDataPath = "/" + splitPath.slice(1, -2).join("/") + "/@";
@@ -1206,7 +1203,12 @@ sap.ui.define(
1206
1203
  var key = splitTemp[i].split("{")[1].trim();
1207
1204
  tempArray.push(key);
1208
1205
  }
1209
- var index = Object.keys(connectedObject.Data).indexOf(dataKey) - 1;
1206
+ Object.keys(connectedObject.Data).forEach(function (sKey) {
1207
+ if (sKey.startsWith("$")) {
1208
+ delete connectedObject.Data[sKey];
1209
+ }
1210
+ });
1211
+ var index = Object.keys(connectedObject.Data).indexOf(dataKey);
1210
1212
  return "/" + splitPath.slice(1, -2).join("/") + "/Data/" + tempArray[index];
1211
1213
  },
1212
1214
 
@@ -1219,7 +1221,7 @@ sap.ui.define(
1219
1221
  * @param {object} element The element that is currently being processed.
1220
1222
  * @returns {boolean} True or False (depending on the template index).
1221
1223
  **/
1222
- notLastIndex: function(target, element) {
1224
+ notLastIndex: function (target, element) {
1223
1225
  var template = target.Template;
1224
1226
  var splitTemp = template.split("}");
1225
1227
  var tempArray = [];
@@ -1229,7 +1231,7 @@ sap.ui.define(
1229
1231
  tempArray.push(dataKey);
1230
1232
  }
1231
1233
 
1232
- tempArray.forEach(function(template) {
1234
+ tempArray.forEach(function (template) {
1233
1235
  if (target.Data[template] === element && tempArray.indexOf(template) !== tempArray.length - 1) {
1234
1236
  isLastIndex = true;
1235
1237
  }
@@ -1245,18 +1247,15 @@ sap.ui.define(
1245
1247
  * @param {string} template The template string.
1246
1248
  * @returns {string} The delimiter in the template string.
1247
1249
  **/
1248
- getDelimiter: function(template) {
1249
- return template
1250
- .split("}")[1]
1251
- .split("{")[0]
1252
- .trim();
1250
+ getDelimiter: function (template) {
1251
+ return template.split("}")[1].split("{")[0].trim();
1253
1252
  },
1254
1253
 
1255
- setMetaModel: function(oMetaModel) {
1254
+ setMetaModel: function (oMetaModel) {
1256
1255
  this.oMetaModel = oMetaModel;
1257
1256
  },
1258
1257
 
1259
- getMetaModel: function(oContext, oInterface) {
1258
+ getMetaModel: function (oContext, oInterface) {
1260
1259
  if (oContext) {
1261
1260
  var oMetaModel = oInterface.context.getModel();
1262
1261
  return oMetaModel;
@@ -1264,7 +1263,7 @@ sap.ui.define(
1264
1263
  return this.oMetaModel;
1265
1264
  },
1266
1265
 
1267
- getParameters: function(oContext, oInterface) {
1266
+ getParameters: function (oContext, oInterface) {
1268
1267
  if (oContext) {
1269
1268
  var oMetaModel = oInterface.context.getModel();
1270
1269
  var sPath = oInterface.context.getPath();
@@ -110,6 +110,13 @@ sap.ui.define(
110
110
  );
111
111
  }
112
112
  },
113
+ isDraftIndicatorVisible: function(sPropertyPath, sSemanticKeyHasDraftIndicator, HasDraftEntity, IsActiveEntity, hideDraftInfo) {
114
+ if (IsActiveEntity !== undefined && HasDraftEntity !== undefined && (!IsActiveEntity || HasDraftEntity) && !hideDraftInfo) {
115
+ return sPropertyPath === sSemanticKeyHasDraftIndicator;
116
+ } else {
117
+ return false;
118
+ }
119
+ },
113
120
  hasTargets: function(bSemanticObjectHasTargets, sSemanticObjectPathValue) {
114
121
  return bSemanticObjectHasTargets ? bSemanticObjectHasTargets : false;
115
122
  },
@@ -123,13 +123,7 @@ sap.ui.define(["sap/fe/core/templating/UIFormatters", "sap/fe/core/templating/Da
123
123
  }
124
124
 
125
125
  if (isPathExpression(oPropertyDataModelObjectPath.targetObject) && oPropertyDataModelObjectPath.targetObject.$target) {
126
- var oNavPath = oPropertyDataModelObjectPath.targetEntityType.resolvePath(oPropertyDataModelObjectPath.targetObject.path, true);
127
- oPropertyDataModelObjectPath.targetObject = oNavPath.target;
128
- oNavPath.visitedObjects.forEach(function (oNavObj) {
129
- if ((oNavObj === null || oNavObj === void 0 ? void 0 : oNavObj._type) === "NavigationProperty") {
130
- oPropertyDataModelObjectPath.navigationProperties.push(oNavObj);
131
- }
132
- });
126
+ oPropertyDataModelObjectPath = enhanceDataModelPath(oPropertyDataModelObjectPath, oPropertyDataModelObjectPath.targetObject.path);
133
127
  }
134
128
 
135
129
  var oBindingExpression = bindingExpression(getContextRelativeTargetObjectPath(oPropertyDataModelObjectPath));
@@ -640,4 +634,4 @@ sap.ui.define(["sap/fe/core/templating/UIFormatters", "sap/fe/core/templating/Da
640
634
  _exports.getSemanticObjects = getSemanticObjects;
641
635
  return _exports;
642
636
  }, false);
643
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkZpZWxkVGVtcGxhdGluZy50cyJdLCJuYW1lcyI6WyJhZGRUZXh0QXJyYW5nZW1lbnRUb0JpbmRpbmdFeHByZXNzaW9uIiwiYmluZGluZ0V4cHJlc3Npb24iLCJmdWxsQ29udGV4dFBhdGgiLCJ0cmFuc2Zvcm1SZWN1cnNpdmVseSIsImV4cHJlc3Npb24iLCJvdXRFeHByZXNzaW9uIiwibW9kZWxOYW1lIiwidW5kZWZpbmVkIiwib1Byb3BlcnR5RGF0YU1vZGVsUGF0aCIsImVuaGFuY2VEYXRhTW9kZWxQYXRoIiwicGF0aCIsImdldEJpbmRpbmdXaXRoVGV4dEFycmFuZ2VtZW50IiwicHJvcGVydHlCaW5kaW5nRXhwcmVzc2lvbiIsImZpZWxkRm9ybWF0T3B0aW9ucyIsInRhcmdldERpc3BsYXlNb2RlT3ZlcnJpZGUiLCJkaXNwbGF5TW9kZSIsIm9Qcm9wZXJ0eURlZmluaXRpb24iLCJ0YXJnZXRPYmplY3QiLCJ0eXBlIiwiJHRhcmdldCIsInRhcmdldERpc3BsYXlNb2RlIiwiZ2V0RGlzcGxheU1vZGUiLCJjb21tb25UZXh0IiwiYW5ub3RhdGlvbnMiLCJDb21tb24iLCJUZXh0IiwicmVsYXRpdmVMb2NhdGlvbiIsImdldFBhdGhSZWxhdGl2ZUxvY2F0aW9uIiwiY29udGV4dExvY2F0aW9uIiwibmF2aWdhdGlvblByb3BlcnRpZXMiLCJtYXAiLCJucCIsIm5hbWUiLCJmb3JtYXRXaXRoVHlwZUluZm9ybWF0aW9uIiwiYW5ub3RhdGlvbkV4cHJlc3Npb24iLCJmb3JtYXRSZXN1bHQiLCJ2YWx1ZUZvcm1hdHRlcnMiLCJmb3JtYXRXaXRoQnJhY2tldHMiLCJmb3JtYXRWYWx1ZVJlY3Vyc2l2ZWx5IiwiZ2V0VGV4dEJpbmRpbmciLCJvUHJvcGVydHlEYXRhTW9kZWxPYmplY3RQYXRoIiwiYXNPYmplY3QiLCIkVHlwZSIsImZpZWxkVmFsdWUiLCJWYWx1ZSIsImNvbXBpbGVCaW5kaW5nIiwiY29uc3RhbnQiLCJpc1BhdGhFeHByZXNzaW9uIiwib05hdlBhdGgiLCJ0YXJnZXRFbnRpdHlUeXBlIiwicmVzb2x2ZVBhdGgiLCJ0YXJnZXQiLCJ2aXNpdGVkT2JqZWN0cyIsImZvckVhY2giLCJvTmF2T2JqIiwiX3R5cGUiLCJwdXNoIiwib0JpbmRpbmdFeHByZXNzaW9uIiwiZ2V0Q29udGV4dFJlbGF0aXZlVGFyZ2V0T2JqZWN0UGF0aCIsIm9UYXJnZXRCaW5kaW5nIiwiTWVhc3VyZXMiLCJVbml0IiwiSVNPQ3VycmVuY3kiLCJnZXRCaW5kaW5nV2l0aFVuaXRPckN1cnJlbmN5IiwibWVhc3VyZURpc3BsYXlNb2RlIiwiZm9ybWF0T3B0aW9ucyIsInNob3dNZWFzdXJlIiwiZ2V0VmFsdWVCaW5kaW5nIiwiaWdub3JlVW5pdCIsImlnbm9yZUZvcm1hdHRpbmciLCJiaW5kaW5nUGFyYW1ldGVycyIsInRhcmdldFR5cGVBbnkiLCJzaG93TWVhc3VyZU9ubHkiLCJpc1Byb3BlcnR5IiwiQ29tbXVuaWNhdGlvbiIsIklzRW1haWxBZGRyZXNzIiwib1Byb3BlcnR5VW5pdCIsImdldEFzc29jaWF0ZWRVbml0UHJvcGVydHkiLCJvUHJvcGVydHlDdXJyZW5jeSIsImdldEFzc29jaWF0ZWRDdXJyZW5jeVByb3BlcnR5IiwiaGFzVmFsdWVIZWxwIiwic2hvd051bWJlciIsInBhcnNlS2VlcHNFbXB0eVN0cmluZyIsImNvbnN0cmFpbnRzIiwicGFyYW1ldGVycyIsInRhcmdldFR5cGUiLCJnZXRVbml0QmluZGluZyIsInVuaXQiLCJnZXRBc3NvY2lhdGVkVGV4dEJpbmRpbmciLCJ0ZXh0UHJvcGVydHlQYXRoIiwiZ2V0QXNzb2NpYXRlZFRleHRQcm9wZXJ0eVBhdGgiLCJvVGV4dFByb3BlcnR5UGF0aCIsIm9WYWx1ZUJpbmRpbmciLCIkJG5vUGF0Y2giLCJpc1VzZWRJbk5hdmlnYXRpb25XaXRoUXVpY2tWaWV3RmFjZXRzIiwib0RhdGFNb2RlbFBhdGgiLCJvUHJvcGVydHkiLCJhTmF2aWdhdGlvblByb3BlcnRpZXMiLCJiSXNVc2VkSW5OYXZpZ2F0aW9uV2l0aFF1aWNrVmlld0ZhY2V0cyIsIm9OYXZQcm9wIiwicmVmZXJlbnRpYWxDb25zdHJhaW50IiwibGVuZ3RoIiwib1JlZkNvbnN0cmFpbnQiLCJzb3VyY2VQcm9wZXJ0eSIsIlVJIiwiUXVpY2tWaWV3RmFjZXRzIiwiaXNSZXRyaWV2ZVRleHRGcm9tVmFsdWVMaXN0RW5hYmxlZCIsIm9Qcm9wZXJ0eVBhdGgiLCJQcm9wZXJ0eUhlbHBlciIsInRleHRBbGlnbk1vZGUiLCJnZXREaXNwbGF5U3R5bGUiLCJvRGF0YUZpZWxkIiwic2VtYW50aWNPYmplY3QiLCJJc0ltYWdlVVJMIiwiSXNQaG9uZU51bWJlciIsIlRhcmdldCIsIlNlbWFudGljS2V5IiwiYVNlbWFudGljS2V5cyIsImJJc1NlbWFudGljS2V5IiwiZXZlcnkiLCJvS2V5Iiwic2VtYW50aWNLZXlTdHlsZSIsInRhcmdldEVudGl0eVNldCIsIkRyYWZ0Um9vdCIsIkNyaXRpY2FsaXR5IiwiU3RyaW5nIiwiaXNDdXJyZW5jeUFsaWduZWQiLCJNdWx0aUxpbmVUZXh0IiwiU2VtYW50aWNPYmplY3QiLCJyZXRyaWV2ZVRleHRGcm9tVmFsdWVMaXN0IiwiZ2V0RWRpdFN0eWxlIiwib0ZpZWxkRm9ybWF0T3B0aW9ucyIsIlZpc3VhbGl6YXRpb24iLCJ2YWx1ZU9mIiwiZ2V0VmlzaWJsZUV4cHJlc3Npb24iLCJkYXRhRmllbGRNb2RlbFBhdGgiLCJwcm9wZXJ0eVZhbHVlIiwiaXNBbmFseXRpY2FsR3JvdXBIZWFkZXJFeHBhbmRlZCIsImlzQW5hbHl0aWNzIiwiSXNFeHBhbmRlZCIsImlzQW5hbHl0aWNhbExlYWYiLCJlcXVhbCIsIk5vZGVMZXZlbCIsImFuZCIsIm5vdCIsIkhpZGRlbiIsImlmRWxzZSIsIm9yIiwiZ2V0SW5wdXREZXNjcmlwdGlvbiIsImRlc2NyaXB0aW9uQmluZGluZ0V4cHJlc3Npb24iLCJ1bml0UHJvcGVydHkiLCJlZGl0YWJsZUV4cHJlc3Npb24iLCJpc1JlYWRPbmx5RXhwcmVzc2lvbiIsImlzQ29tcHV0ZWQiLCJRVlRleHRCaW5kaW5nIiwib1Byb3BlcnR5VmFsdWVEYXRhTW9kZWxPYmplY3RQYXRoIiwicmV0dXJuVmFsdWUiLCJnZXRRdWlja1ZpZXdUeXBlIiwiZ2V0U2VtYW50aWNPYmplY3RFeHByZXNzaW9uVG9SZXNvbHZlIiwib0Fubm90YXRpb25zIiwiYVNlbU9iakV4cHJUb1Jlc29sdmUiLCJhU2VtT2Jqa2V5cyIsIk9iamVjdCIsImtleXMiLCJmaWx0ZXIiLCJlbGVtZW50Iiwic3RhcnRzV2l0aCIsImlTZW1PYmpDb3VudCIsInNTZW1PYmpFeHByZXNzaW9uIiwia2V5IiwiaW5kZXhPZiIsInNwbGl0IiwidmFsdWUiLCJnZXRTZW1hbnRpY09iamVjdHMiLCJzQ3VzdG9tRGF0YUtleSIsInNDdXN0b21EYXRhVmFsdWUiLCJhU2VtT2JqQ3VzdG9tRGF0YSIsIm9TZW1hbnRpY09iamVjdHNNb2RlbCIsIkpTT05Nb2RlbCIsIiQkdmFsdWVBc1Byb21pc2UiLCJvU2VtT2JqQmluZGluZ0NvbnRleHQiLCJjcmVhdGVCaW5kaW5nQ29udGV4dCJdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQTJGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLE1BQU1BLHFDQUFxQyxHQUFHLFVBQ3BEQyxpQkFEb0QsRUFFcERDLGVBRm9ELEVBR2xDO0FBQ2xCLFdBQU9DLG9CQUFvQixDQUFDRixpQkFBRCxFQUFvQixTQUFwQixFQUErQixVQUFDRyxVQUFELEVBQWtEO0FBQzNHLFVBQUlDLGFBQThCLEdBQUdELFVBQXJDOztBQUNBLFVBQUlBLFVBQVUsQ0FBQ0UsU0FBWCxLQUF5QkMsU0FBN0IsRUFBd0M7QUFDdkM7QUFDQSxZQUFNQyxzQkFBc0IsR0FBR0Msb0JBQW9CLENBQUNQLGVBQUQsRUFBa0JFLFVBQVUsQ0FBQ00sSUFBN0IsQ0FBbkQ7QUFDQUwsUUFBQUEsYUFBYSxHQUFHTSw2QkFBNkIsQ0FBQ0gsc0JBQUQsRUFBeUJKLFVBQXpCLENBQTdDO0FBQ0E7O0FBQ0QsYUFB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QXBCLENBQW1DRSxHQUFwRDtBQUNBTSxRQUFBQSxnQkFBZ0IsR0FBR2xJLGNBQWMsQ0FBQ1gsb0JBQW9CLENBQUM4SCxvQkFBb0IsQ0FBQ08sWUFBRCxDQUFwQixDQUFtQ0ssS0FBcEMsQ0FBckIsQ0FBakM7QUFDQUksUUFBQUEsaUJBQWlCLENBQUN4SCxJQUFsQixDQUF1QjtBQUN0QmlILFVBQUFBLEdBQUcsRUFBRUssY0FEaUI7QUFFdEJGLFVBQUFBLEtBQUssRUFBRUc7QUFGZSxTQUF2QjtBQUlBOztBQUNELFVBQU1FLHFCQUEwQixHQUFHLElBQUlDLFNBQUosQ0FBY0YsaUJBQWQsQ0FBbkM7QUFDQUMsTUFBQUEscUJBQXFCLENBQUNFLGdCQUF0QixHQUF5QyxJQUF6QztBQUNBLFVBQU1DLHFCQUEwQixHQUFHSCxxQkFBcUIsQ0FBQ0ksb0JBQXRCLENBQTJDLEdBQTNDLENBQW5DO0FBQ0EsYUFBT0QscUJBQVA7QUFDQSxLQWhCRCxNQWdCTztBQUNOLGFBQU8sSUFBSUYsU0FBSixDQUFjLEVBQWQsRUFBa0JHLG9CQUFsQixDQUF1QyxHQUF2QyxDQUFQO0FBQ0E7QUFDRCxHQXBCTSIsInNvdXJjZVJvb3QiOiIuIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcblx0Z2V0RGlzcGxheU1vZGUsXG5cdFByb3BlcnR5T3JQYXRoLFxuXHREaXNwbGF5TW9kZSxcblx0Z2V0QmluZGluZ1dpdGhVbml0T3JDdXJyZW5jeSxcblx0Zm9ybWF0V2l0aFR5cGVJbmZvcm1hdGlvblxufSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9VSUZvcm1hdHRlcnNcIjtcbmltcG9ydCB7XG5cdERhdGFNb2RlbE9iamVjdFBhdGgsXG5cdGVuaGFuY2VEYXRhTW9kZWxQYXRoLFxuXHRnZXRQYXRoUmVsYXRpdmVMb2NhdGlvbixcblx0Z2V0Q29udGV4dFJlbGF0aXZlVGFyZ2V0T2JqZWN0UGF0aFxufSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9EYXRhTW9kZWxQYXRoSGVscGVyXCI7XG5pbXBvcnQgeyBQcm9wZXJ0eSB9IGZyb20gXCJAc2FwLXV4L2Fubm90YXRpb24tY29udmVydGVyXCI7XG5pbXBvcnQge1xuXHRFeHByZXNzaW9uLFxuXHRhbm5vdGF0aW9uRXhwcmVzc2lvbixcblx0Zm9ybWF0UmVzdWx0LFxuXHR0cmFuc2Zvcm1SZWN1cnNpdmVseSxcblx0QmluZGluZ0V4cHJlc3Npb25FeHByZXNzaW9uLFxuXHRCaW5kaW5nRXhwcmVzc2lvbixcblx0Y29tcGlsZUJpbmRpbmcsXG5cdGNvbnN0YW50LFxuXHRiaW5kaW5nRXhwcmVzc2lvbixcblx0YW5kLFxuXHRpZkVsc2UsXG5cdG5vdCxcblx0Q29tcGxleFR5cGVFeHByZXNzaW9uLFxuXHRlcXVhbCxcblx0b3Jcbn0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvQmluZGluZ0V4cHJlc3Npb25cIjtcbmltcG9ydCB7XG5cdGlzUGF0aEV4cHJlc3Npb24sXG5cdGdldEFzc29jaWF0ZWRVbml0UHJvcGVydHksXG5cdGdldEFzc29jaWF0ZWRDdXJyZW5jeVByb3BlcnR5LFxuXHRpc1Byb3BlcnR5LFxuXHRoYXNWYWx1ZUhlbHAsXG5cdGdldEFzc29jaWF0ZWRUZXh0UHJvcGVydHlQYXRoXG59IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL1Byb3BlcnR5SGVscGVyXCI7XG5pbXBvcnQgdmFsdWVGb3JtYXR0ZXJzIGZyb20gXCJzYXAvZmUvY29yZS9mb3JtYXR0ZXJzL1ZhbHVlRm9ybWF0dGVyXCI7XG5pbXBvcnQgKiBhcyBQcm9wZXJ0eUhlbHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9Qcm9wZXJ0eUhlbHBlclwiO1xuaW1wb3J0IHsgaXNSZWFkT25seUV4cHJlc3Npb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9GaWVsZENvbnRyb2xIZWxwZXJcIjtcbmltcG9ydCB7IERhdGFGaWVsZEFic3RyYWN0VHlwZXMsIERhdGFGaWVsZFdpdGhVcmwsIERhdGFQb2ludFR5cGVUeXBlcywgVUlBbm5vdGF0aW9uVHlwZXMgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXNcIjtcbmltcG9ydCB7IFVJIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvaGVscGVycy9CaW5kaW5nSGVscGVyXCI7XG5pbXBvcnQgSlNPTk1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvanNvbi9KU09OTW9kZWxcIjtcblxuZXhwb3J0IHR5cGUgRmllbGRGb3JtYXRPcHRpb25zID0gUGFydGlhbDx7XG5cdHZhbHVlRm9ybWF0OiBTdHJpbmc7XG5cdHRleHRBbGlnbk1vZGU6IFN0cmluZztcblx0ZGlzcGxheU1vZGU6IERpc3BsYXlNb2RlO1xuXHRtZWFzdXJlRGlzcGxheU1vZGU6IFN0cmluZztcblx0dGV4dExpbmVzRWRpdDogU3RyaW5nO1xuXHR0ZXh0TWF4TGluZXM6IFN0cmluZztcblx0c2hvd0VtcHR5SW5kaWNhdG9yOiBib29sZWFuO1xuXHRzZW1hbnRpY0tleVN0eWxlOiBTdHJpbmc7XG5cdHNob3dJY29uVXJsOiBib29sZWFuO1xuXHRpc0FuYWx5dGljczogYm9vbGVhbjtcblx0aGFzRHJhZnRJbmRpY2F0b3I6IGJvb2xlYW47XG5cdHNlbWFudGlja2V5czogc3RyaW5nW107XG5cdHJldHJpZXZlVGV4dEZyb21WYWx1ZUxpc3Q6IGJvb2xlYW47XG5cdGlzQ3VycmVuY3lBbGlnbmVkOiBib29sZWFuO1xufT47XG5cbmV4cG9ydCB0eXBlIEVkaXRTdHlsZSA9XG5cdHwgXCJJbnB1dFdpdGhWYWx1ZUhlbHBcIlxuXHR8IFwiVGV4dEFyZWFcIlxuXHR8IFwiRmlsZVwiXG5cdHwgXCJEYXRlUGlja2VyXCJcblx0fCBcIlRpbWVQaWNrZXJcIlxuXHR8IFwiRGF0ZVRpbWVQaWNrZXJcIlxuXHR8IFwiQ2hlY2tCb3hcIlxuXHR8IFwiSW5wdXRXaXRoVW5pdFwiXG5cdHwgXCJJbnB1dFwiXG5cdHwgXCJSYXRpbmdJbmRpY2F0b3JcIjtcblxuZXhwb3J0IHR5cGUgRGlzcGxheVN0eWxlID1cblx0fCBcIlRleHRcIlxuXHR8IFwiTWRjRmllbGRXaXRoVmFsdWVIZWxwXCJcblx0fCBcIkF2YXRhclwiXG5cdHwgXCJGaWxlXCJcblx0fCBcIkRhdGFQb2ludFwiXG5cdHwgXCJDb250YWN0XCJcblx0fCBcIkJ1dHRvblwiXG5cdHwgXCJMaW5rXCJcblx0fCBcIk9iamVjdFN0YXR1c1wiXG5cdHwgXCJBbW91bnRXaXRoQ3VycmVuY3lcIlxuXHR8IFwiU2VtYW50aWNLZXlXaXRoRHJhZnRJbmRpY2F0b3JcIlxuXHR8IFwiT2JqZWN0SWRlbnRpZmllclwiXG5cdHwgXCJMYWJlbFNlbWFudGljS2V5XCJcblx0fCBcIkxpbmtXaXRoUXVpY2tWaWV3Rm9ybVwiXG5cdHwgXCJMaW5rV3JhcHBlclwiXG5cdHwgXCJFeHBhbmRhYmxlVGV4dFwiO1xuXG4vKipcbiAqIFJlY3Vyc2l2ZWx5IGFkZCB0aGUgdGV4dCBhcnJhbmdlbWVudCB0byBhIGJpbmRpbmcgZXhwcmVzc2lvbi5cbiAqXG4gKiBAcGFyYW0gYmluZGluZ0V4cHJlc3Npb24gVGhlIGJpbmRpbmcgZXhwcmVzc2lvbiB0byBiZSBlbmhhbmNlZFxuICogQHBhcmFtIGZ1bGxDb250ZXh0UGF0aCBUaGUgY3VycmVudCBjb250ZXh0IHBhdGggd2UncmUgb24gKHRvIHByb3Blcmx5IHJlc29sdmUgdGhlIHRleHQgYXJyYW5nZW1lbnQgcHJvcGVydGllcylcbiAqIEByZXR1cm5zIEFuIHVwZGF0ZWQgZXhwcmVzc2lvbiBjb250YWluaW5nIHRoZSB0ZXh0IGFycmFuZ2VtZW50IGJpbmRpbmcuXG4gKi9cbmV4cG9ydCBjb25zdCBhZGRUZXh0QXJyYW5nZW1lbnRUb0JpbmRpbmdFeHByZXNzaW9uID0gZnVuY3Rpb24oXG5cdGJpbmRpbmdFeHByZXNzaW9uOiBFeHByZXNzaW9uPGFueT4sXG5cdGZ1bGxDb250ZXh0UGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aFxuKTogRXhwcmVzc2lvbjxhbnk+IHtcblx0cmV0dXJuIHRyYW5zZm9ybVJlY3Vyc2l2ZWx5KGJpbmRpbmdFeHByZXNzaW9uLCBcIkJpbmRpbmdcIiwgKGV4cHJlc3Npb246IEJpbmRpbmdFeHByZXNzaW9uRXhwcmVzc2lvbjxhbnk+KSA9PiB7XG5cdFx0bGV0IG91dEV4cHJlc3Npb246IEV4cHJlc3Npb248YW55PiA9IGV4cHJlc3Npb247XG5cdFx0aWYgKGV4cHJlc3Npb24ubW9kZWxOYW1lID09PSB1bmRlZmluZWQpIHtcblx0XHRcdC8vIEluIGNhc2Ugb2YgZGVmYXVsdCBtb2RlbCB3ZSB0aGVuIG5lZWQgdG8gcmVzb2x2ZSB0aGUgdGV4dCBhcnJhbmdlbWVudCBwcm9wZXJ0eVxuXHRcdFx0Y29uc3Qgb1Byb3BlcnR5RGF0YU1vZGVsUGF0aCA9IGVuaGFuY2VEYXRhTW9kZWxQYXRoKGZ1bGxDb250ZXh0UGF0aCwgZXhwcmVzc2lvbi5wYXRoKTtcblx0XHRcdG91dEV4cHJlc3Npb24gPSBnZXRCaW5kaW5nV2l0aFRleHRBcnJhbmdlbWVudChvUHJvcGVydHlEYXRhTW9kZWxQYXRoLCBleHByZXNzaW9uKTtcblx0XHR9XG5cdFx0cmV0dXJuIG91dEV4cHJlc3Npb247XG5cdH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEJpbmRpbmdXaXRoVGV4dEFycmFuZ2VtZW50ID0gZnVuY3Rpb24oXG5cdG9Qcm9wZXJ0eURhdGFNb2RlbFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGgsXG5cdHByb3BlcnR5QmluZGluZ0V4cHJlc3Npb246IEV4cHJlc3Npb248c3RyaW5nPixcblx0ZmllbGRGb3JtYXRPcHRpb25zPzogRmllbGRGb3JtYXRPcHRpb25zXG4pOiBFeHByZXNzaW9uPHN0cmluZz4ge1xuXHRjb25zdCB0YXJnZXREaXNwbGF5TW9kZU92ZXJyaWRlID0gZmllbGRGb3JtYXRPcHRpb25zPy5kaXNwbGF5TW9kZTtcblx0bGV0IG91dEV4cHJlc3Npb24gPSBwcm9wZXJ0eUJpbmRpbmdFeHByZXNzaW9uO1xuXHRjb25zdCBvUHJvcGVydHlEZWZpbml0aW9uID1cblx0XHRvUHJvcGVydHlEYXRhTW9kZWxQYXRoLnRhcmdldE9iamVjdC50eXBlID09PSBcIlByb3BlcnR5UGF0aFwiXG5cdFx0XHQ/IChvUHJvcGVydHlEYXRhTW9kZWxQYXRoLnRhcmdldE9iamVjdC4kdGFyZ2V0IGFzIFByb3BlcnR5KVxuXHRcdFx0OiAob1Byb3BlcnR5RGF0YU1vZGVsUGF0aC50YXJnZXRPYmplY3QgYXMgUHJvcGVydHkpO1xuXHRjb25zdCB0YXJnZXREaXNwbGF5TW9kZSA9IHRhcmdldERpc3BsYXlNb2RlT3ZlcnJpZGUgfHwgZ2V0RGlzcGxheU1vZGUob1Byb3BlcnR5RGVmaW5pdGlvbiwgb1Byb3BlcnR5RGF0YU1vZGVsUGF0aCk7XG5cdGNvbnN0IGNvbW1vblRleHQgPSBvUHJvcGVydHlEZWZpbml0aW9uLmFubm90YXRpb25zPy5Db21tb24/LlRleHQ7XG5cdGNvbnN0IHJlbGF0aXZlTG9jYXRpb24gPSBnZXRQYXRoUmVsYXRpdmVMb2NhdGlvbihcblx0XHRvUHJvcGVydHlEYXRhTW9kZWxQYXRoLmNvbnRleHRMb2NhdGlvbixcblx0XHRvUHJvcGVydHlEYXRhTW9kZWxQYXRoLm5hdmlnYXRpb25Qcm9wZXJ0aWVzXG5cdCkubWFwKG5wID0+IG5wLm5hbWUpO1xuXHRwcm9wZXJ0eUJpbmRpbmdFeHByZXNzaW9uID0gZm9ybWF0V2l0aFR5cGVJbmZvcm1hdGlvbihvUHJvcGVydHlEZWZpbml0aW9uLCBwcm9wZXJ0eUJpbmRpbmdFeHByZXNzaW9uKTtcblx0aWYgKHRhcmdldERpc3BsYXlNb2RlICE9PSBcIlZhbHVlXCIgJiYgY29tbW9uVGV4dCkge1xuXHRcdHN3aXRjaCAodGFyZ2V0RGlzcGxheU1vZGUpIHtcblx0XHRcdGNhc2UgXCJEZXNjcmlwdGlvblwiOlxuXHRcdFx0XHRvdXRFeHByZXNzaW9uID0gYW5ub3RhdGlvbkV4cHJlc3Npb24oY29tbW9uVGV4dCwgcmVsYXRpdmVMb2NhdGlvbikgYXMgRXhwcmVzc2lvbjxzdHJpbmc+O1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJEZXNjcmlwdGlvblZhbHVlXCI6XG5cdFx0XHRcdG91dEV4cHJlc3Npb24gPSBmb3JtYXRSZXN1bHQoXG5cdFx0XHRcdFx0W2Fubm90YXRpb25FeHByZXNzaW9uKGNvbW1vblRleHQsIHJlbGF0aXZlTG9jYXRpb24pIGFzIEV4cHJlc3Npb248c3RyaW5nPiwgcHJvcGVydHlCaW5kaW5nRXhwcmVzc2lvbl0sXG5cdFx0XHRcdFx0dmFsdWVGb3JtYXR0ZXJzLmZvcm1hdFdpdGhCcmFja2V0c1xuXHRcdFx0XHQpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJWYWx1ZURlc2NyaXB0aW9uXCI6XG5cdFx0XHRcdG91dEV4cHJlc3Npb24gPSBmb3JtYXRSZXN1bHQoXG5cdFx0XHRcdFx0W3Byb3BlcnR5QmluZGluZ0V4cHJlc3Npb24sIGFubm90YXRpb25FeHByZXNzaW9uKGNvbW1vblRleHQsIHJlbGF0aXZlTG9jYXRpb24pIGFzIEV4cHJlc3Npb248c3RyaW5nPl0sXG5cdFx0XHRcdFx0dmFsdWVGb3JtYXR0ZXJzLmZvcm1hdFdpdGhCcmFja2V0c1xuXHRcdFx0XHQpO1xuXHRcdFx0XHRicmVhaztcblx0XHR9XG5cdH1cblx0cmV0dXJuIG91dEV4cHJlc3Npb247XG59O1xuXG5leHBvcnQgY29uc3QgZm9ybWF0VmFsdWVSZWN1cnNpdmVseSA9IGZ1bmN0aW9uKGJpbmRpbmdFeHByZXNzaW9uOiBFeHByZXNzaW9uPGFueT4sIGZ1bGxDb250ZXh0UGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aCk6IEV4cHJlc3Npb248YW55PiB7XG5cdHJldHVybiB0cmFuc2Zvcm1SZWN1cnNpdmVseShiaW5kaW5nRXhwcmVzc2lvbiwgXCJCaW5kaW5nXCIsIChleHByZXNzaW9uOiBCaW5kaW5nRXhwcmVzc2lvbkV4cHJlc3Npb248YW55PikgPT4ge1xuXHRcdGxldCBvdXRFeHByZXNzaW9uOiBFeHByZXNzaW9uPGFueT4gPSBleHByZXNzaW9uO1xuXHRcdGlmIChleHByZXNzaW9uLm1vZGVsTmFtZSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHQvLyBJbiBjYXNlIG9mIGRlZmF1bHQgbW9kZWwgd2UgdGhlbiBuZWVkIHRvIHJlc29sdmUgdGhlIHRleHQgYXJyYW5nZW1lbnQgcHJvcGVydHlcblx0XHRcdGNvbnN0IG9Qcm9wZXJ0eURhdGFNb2RlbFBhdGggPSBlbmhhbmNlRGF0YU1vZGVsUGF0aChmdWxsQ29udGV4dFBhdGgsIGV4cHJlc3Npb24ucGF0aCk7XG5cdFx0XHRvdXRFeHByZXNzaW9uID0gZm9ybWF0V2l0aFR5cGVJbmZvcm1hdGlvbihvUHJvcGVydHlEYXRhTW9kZWxQYXRoLnRhcmdldE9iamVjdCwgZXhwcmVzc2lvbik7XG5cdFx0fVxuXHRcdHJldHVybiBvdXRFeHByZXNzaW9uO1xuXHR9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRUZXh0QmluZGluZyA9IGZ1bmN0aW9uKFxuXHRvUHJvcGVydHlEYXRhTW9kZWxPYmplY3RQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoLFxuXHRmaWVsZEZvcm1hdE9wdGlvbnM6IEZpZWxkRm9ybWF0T3B0aW9ucyxcblx0YXNPYmplY3Q6IGJvb2xlYW4gPSBmYWxzZVxuKTogRXhwcmVzc2lvbjxzdHJpbmc+IHwgQmluZGluZ0V4cHJlc3Npb248c3RyaW5nPiB7XG5cdGlmIChcblx0XHRvUHJvcGVydHlEYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldE9iamVjdD8uJFR5cGUgPT09IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YUZpZWxkXCIgfHxcblx0XHRvUHJvcGVydHlEYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldE9iamVjdD8uJFR5cGUgPT09IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YVBvaW50VHlwZVwiIHx8XG5cdFx0b1Byb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aC50YXJnZXRPYmplY3Q/LiRUeXBlID09PSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkRhdGFGaWVsZFdpdGhOYXZpZ2F0aW9uUGF0aFwiIHx8XG5cdFx0b1Byb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aC50YXJnZXRPYmplY3Q/LiRUeXBlID09PSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkRhdGFGaWVsZFdpdGhVcmxcIlxuXHQpIHtcblx0XHQvLyBJZiB0aGVyZSBpcyBubyByZXNvbHZlZCBwcm9wZXJ0eSwgdGhlIHZhbHVlIGlzIHJldHVybmVkIGFzIGEgY29uc3RhbnRcblx0XHRjb25zdCBmaWVsZFZhbHVlID0gb1Byb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aC50YXJnZXRPYmplY3QuVmFsdWUgfHwgXCJcIjtcblx0XHRyZXR1cm4gY29tcGlsZUJpbmRpbmcoY29uc3RhbnQoZmllbGRWYWx1ZSkpO1xuXHR9XG5cdGlmIChpc1BhdGhFeHByZXNzaW9uKG9Qcm9wZXJ0eURhdGFNb2RlbE9iamVjdFBhdGgudGFyZ2V0T2JqZWN0KSAmJiBvUHJvcGVydHlEYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldE9iamVjdC4kdGFyZ2V0KSB7XG5cdFx0Y29uc3Qgb05hdlBhdGggPSBvUHJvcGVydHlEYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldEVudGl0eVR5cGUucmVzb2x2ZVBhdGgob1Byb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aC50YXJnZXRPYmplY3QucGF0aCwgdHJ1ZSk7XG5cdFx0b1Byb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aC50YXJnZXRPYmplY3QgPSBvTmF2UGF0aC50YXJnZXQ7XG5cdFx0b05hdlBhdGgudmlzaXRlZE9iamVjdHMuZm9yRWFjaCgob05hdk9iajogYW55KSA9PiB7XG5cdFx0XHRpZiAob05hdk9iaj8uX3R5cGUgPT09IFwiTmF2aWdhdGlvblByb3BlcnR5XCIpIHtcblx0XHRcdFx0b1Byb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aC5uYXZpZ2F0aW9uUHJvcGVydGllcy5wdXNoKG9OYXZPYmopO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cdGNvbnN0IG9CaW5kaW5nRXhwcmVzc2lvbiA9IGJpbmRpbmdFeHByZXNzaW9uKGdldENvbnRleHRSZWxhdGl2ZVRhcmdldE9iamVjdFBhdGgob1Byb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aCkpO1xuXHRsZXQgb1RhcmdldEJpbmRpbmc7XG5cdGlmIChcblx0XHRvUHJvcGVydHlEYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldE9iamVjdD8uYW5ub3RhdGlvbnM/Lk1lYXN1cmVzPy5Vbml0IHx8XG5cdFx0b1Byb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aC50YXJnZXRPYmplY3Q/LmFubm90YXRpb25zPy5NZWFzdXJlcz8uSVNPQ3VycmVuY3lcblx0KSB7XG5cdFx0b1RhcmdldEJpbmRpbmcgPSBnZXRCaW5kaW5nV2l0aFVuaXRPckN1cnJlbmN5KG9Qcm9wZXJ0eURhdGFNb2RlbE9iamVjdFBhdGgsIG9CaW5kaW5nRXhwcmVzc2lvbik7XG5cdFx0aWYgKGZpZWxkRm9ybWF0T3B0aW9ucz8ubWVhc3VyZURpc3BsYXlNb2RlID09PSBcIkhpZGRlblwiKSB7XG5cdFx0XHQvLyBUT0RPOiBSZWZhY3RvciBvbmNlIHR5cGVzIGFyZSBsZXNzIGdlbmVyaWMgaGVyZVxuXHRcdFx0KG9UYXJnZXRCaW5kaW5nIGFzIENvbXBsZXhUeXBlRXhwcmVzc2lvbjxTdHJpbmc+KS5mb3JtYXRPcHRpb25zID0ge1xuXHRcdFx0XHQuLi4ob1RhcmdldEJpbmRpbmcgYXMgQ29tcGxleFR5cGVFeHByZXNzaW9uPFN0cmluZz4pLmZvcm1hdE9wdGlvbnMsXG5cdFx0XHRcdHNob3dNZWFzdXJlOiBmYWxzZVxuXHRcdFx0fTtcblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0b1RhcmdldEJpbmRpbmcgPSBnZXRCaW5kaW5nV2l0aFRleHRBcnJhbmdlbWVudChvUHJvcGVydHlEYXRhTW9kZWxPYmplY3RQYXRoLCBvQmluZGluZ0V4cHJlc3Npb24sIGZpZWxkRm9ybWF0T3B0aW9ucyk7XG5cdH1cblx0aWYgKGFzT2JqZWN0KSB7XG5cdFx0cmV0dXJuIG9UYXJnZXRCaW5kaW5nO1xuXHR9XG5cdC8vIFdlIGRvbid0IGluY2x1ZGUgJCRub3BhdGNoIGFuZCBwYXJzZUtlZXBFbXB0eVN0cmluZyBhcyB0aGV5IG1ha2Ugbm8gc2Vuc2UgaW4gdGhlIHRleHQgYmluZGluZyBjYXNlXG5cdHJldHVybiBjb21waWxlQmluZGluZyhvVGFyZ2V0QmluZGluZyk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0VmFsdWVCaW5kaW5nID0gZnVuY3Rpb24oXG5cdG9Qcm9wZXJ0eURhdGFNb2RlbE9iamVjdFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGgsXG5cdGZpZWxkRm9ybWF0T3B0aW9uczogRmllbGRGb3JtYXRPcHRpb25zLFxuXHRpZ25vcmVVbml0OiBib29sZWFuID0gZmFsc2UsXG5cdGlnbm9yZUZvcm1hdHRpbmc6IGJvb2xlYW4gPSBmYWxzZSxcblx0YmluZGluZ1BhcmFtZXRlcnM/OiBvYmplY3QsXG5cdHRhcmdldFR5cGVBbnk/OiBib29sZWFuLFxuXHRzaG93TWVhc3VyZU9ubHk6IGJvb2xlYW4gPSBmYWxzZVxuKTogQmluZGluZ0V4cHJlc3Npb248c3RyaW5nPiB7XG5cdGlmIChpc1BhdGhFeHByZXNzaW9uKG9Qcm9wZXJ0eURhdGFNb2RlbE9iamVjdFBhdGgudGFyZ2V0T2JqZWN0KSAmJiBvUHJvcGVydHlEYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldE9iamVjdC4kdGFyZ2V0KSB7XG5cdFx0Y29uc3Qgb05hdlBhdGggPSBvUHJvcGVydHlEYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldEVudGl0eVR5cGUucmVzb2x2ZVBhdGgob1Byb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aC50YXJnZXRPYmplY3QucGF0aCwgdHJ1ZSk7XG5cdFx0b1Byb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aC50YXJnZXRPYmplY3QgPSBvTmF2UGF0aC50YXJnZXQ7XG5cdFx0b05hdlBhdGgudmlzaXRlZE9iamVjdHMuZm9yRWFjaCgob05hdk9iajogYW55KSA9PiB7XG5cdFx0XHRpZiAob05hdk9iaiAmJiBvTmF2T2JqLl90eXBlID09PSBcIk5hdmlnYXRpb25Qcm9wZXJ0eVwiKSB7XG5cdFx0XHRcdG9Qcm9wZXJ0eURhdGFNb2RlbE9iamVjdFBhdGgubmF2aWdhdGlvblByb3BlcnRpZXMucHVzaChvTmF2T2JqKTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXG5cdGNvbnN0IHRhcmdldE9iamVjdCA9IG9Qcm9wZXJ0eURhdGFNb2RlbE9iamVjdFBhdGgudGFyZ2V0T2JqZWN0O1xuXHRpZiAoaXNQcm9wZXJ0eSh0YXJnZXRPYmplY3QpKSB7XG5cdFx0bGV0IG9CaW5kaW5nRXhwcmVzc2lvbjogQmluZGluZ0V4cHJlc3Npb25FeHByZXNzaW9uPHN0cmluZz4gPSBiaW5kaW5nRXhwcmVzc2lvbihcblx0XHRcdGdldENvbnRleHRSZWxhdGl2ZVRhcmdldE9iamVjdFBhdGgob1Byb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aClcblx0XHQpIGFzIEJpbmRpbmdFeHByZXNzaW9uRXhwcmVzc2lvbjxzdHJpbmc+O1xuXHRcdGlmICh0YXJnZXRPYmplY3QuYW5ub3RhdGlvbnM/LkNvbW11bmljYXRpb24/LklzRW1haWxBZGRyZXNzKSB7XG5cdFx0XHRvQmluZGluZ0V4cHJlc3Npb24udHlwZSA9IFwic2FwLmZlLmNvcmUudHlwZS5FbWFpbFwiO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRjb25zdCBvUHJvcGVydHlVbml0ID0gZ2V0QXNzb2NpYXRlZFVuaXRQcm9wZXJ0eShvUHJvcGVydHlEYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldE9iamVjdCk7XG5cdFx0XHRjb25zdCBvUHJvcGVydHlDdXJyZW5jeSA9IGdldEFzc29jaWF0ZWRDdXJyZW5jeVByb3BlcnR5KG9Qcm9wZXJ0eURhdGFNb2RlbE9iamVjdFBhdGgudGFyZ2V0T2JqZWN0KTtcblx0XHRcdGlmICghaWdub3JlVW5pdCAmJiAob1Byb3BlcnR5VW5pdCB8fCBvUHJvcGVydHlDdXJyZW5jeSkpIHtcblx0XHRcdFx0b0JpbmRpbmdFeHByZXNzaW9uID0gZ2V0QmluZGluZ1dpdGhVbml0T3JDdXJyZW5jeShvUHJvcGVydHlEYXRhTW9kZWxPYmplY3RQYXRoLCBvQmluZGluZ0V4cHJlc3Npb24pIGFzIGFueTtcblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdChvUHJvcGVydHlVbml0ICYmICFoYXNWYWx1ZUhlbHAob1Byb3BlcnR5VW5pdCkpIHx8XG5cdFx0XHRcdFx0KG9Qcm9wZXJ0eUN1cnJlbmN5ICYmICFoYXNWYWx1ZUhlbHAob1Byb3BlcnR5Q3VycmVuY3kpKSB8fFxuXHRcdFx0XHRcdGZpZWxkRm9ybWF0T3B0aW9ucz8ubWVhc3VyZURpc3BsYXlNb2RlID09PSBcIkhpZGRlblwiXG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdC8vIElmIHRoZXJlIGlzIGEgdW5pdCBvciBjdXJyZW5jeSB3aXRob3V0IGEgdmFsdWUgaGVscCwgb3IgaW4gY2FzZSB0aGUgY3VycmVuY3kgc2hvdWxkIGJlIGV4cGxpY2l0bHkgaGlkZGVuLFxuXHRcdFx0XHRcdC8vIHdlIG5lZWQgdG8gY29uZmlndXJlIHRoZSBiaW5kaW5nIHRvIG5vdCBzaG93IHRoZSBtZWFzdXJlLCBvdGhlcndpc2UgaXQncyBuZWVkZWQgZm9yIHRoZSBtZGMgZmllbGRcblx0XHRcdFx0XHRpZiAoIW9CaW5kaW5nRXhwcmVzc2lvbi5mb3JtYXRPcHRpb25zKSB7XG5cdFx0XHRcdFx0XHRvQmluZGluZ0V4cHJlc3Npb24uZm9ybWF0T3B0aW9ucyA9IHt9O1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRpZiAoc2hvd01lYXN1cmVPbmx5KSB7XG5cdFx0XHRcdFx0XHRvQmluZGluZ0V4cHJlc3Npb24uZm9ybWF0T3B0aW9ucy5zaG93TnVtYmVyID0gZmFsc2U7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdG9CaW5kaW5nRXhwcmVzc2lvbi5mb3JtYXRPcHRpb25zLnNob3dNZWFzdXJlID0gZmFsc2U7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRvQmluZGluZ0V4cHJlc3Npb24gPSBmb3JtYXRXaXRoVHlwZUluZm9ybWF0aW9uKHRhcmdldE9iamVjdCwgb0JpbmRpbmdFeHByZXNzaW9uKSBhcyBCaW5kaW5nRXhwcmVzc2lvbkV4cHJlc3Npb248c3RyaW5nPjtcblx0XHRcdFx0aWYgKG9CaW5kaW5nRXhwcmVzc2lvbi50eXBlID09PSBcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLlN0cmluZ1wiKSB7XG5cdFx0XHRcdFx0b0JpbmRpbmdFeHByZXNzaW9uLmZvcm1hdE9wdGlvbnMgPSB7XG5cdFx0XHRcdFx0XHRwYXJzZUtlZXBzRW1wdHlTdHJpbmc6IHRydWVcblx0XHRcdFx0XHR9O1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGlmIChpZ25vcmVGb3JtYXR0aW5nKSB7XG5cdFx0XHRkZWxldGUgb0JpbmRpbmdFeHByZXNzaW9uLmZvcm1hdE9wdGlvbnM7XG5cdFx0XHRkZWxldGUgb0JpbmRpbmdFeHByZXNzaW9uLmNvbnN0cmFpbnRzO1xuXHRcdFx0ZGVsZXRlIG9CaW5kaW5nRXhwcmVzc2lvbi50eXBlO1xuXHRcdH1cblx0XHRpZiAoYmluZGluZ1BhcmFtZXRlcnMpIHtcblx0XHRcdG9CaW5kaW5nRXhwcmVzc2lvbi5wYXJhbWV0ZXJzID0gYmluZGluZ1BhcmFtZXRlcnM7XG5cdFx0fVxuXHRcdGlmICh0YXJnZXRUeXBlQW55KSB7XG5cdFx0XHRvQmluZGluZ0V4cHJlc3Npb24udGFyZ2V0VHlwZSA9IFwiYW55XCI7XG5cdFx0fVxuXHRcdHJldHVybiBjb21waWxlQmluZGluZyhvQmluZGluZ0V4cHJlc3Npb24pO1xuXHR9IGVsc2Uge1xuXHRcdGlmIChcblx0XHRcdHRhcmdldE9iamVjdD8uJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZFdpdGhVcmwgfHxcblx0XHRcdHRhcmdldE9iamVjdD8uJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZFdpdGhOYXZpZ2F0aW9uUGF0aFxuXHRcdCkge1xuXHRcdFx0cmV0dXJuIGNvbXBpbGVCaW5kaW5nKGFubm90YXRpb25FeHByZXNzaW9uKCh0YXJnZXRPYmplY3QgYXMgRGF0YUZpZWxkV2l0aFVybCkuVmFsdWUpKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIFwiXCI7XG5cdFx0fVxuXHR9XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0VW5pdEJpbmRpbmcgPSBmdW5jdGlvbihvUHJvcGVydHlEYXRhTW9kZWxPYmplY3RQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoKTogQmluZGluZ0V4cHJlc3Npb248c3RyaW5nPiB7XG5cdGNvbnN0IG9Qcm9wZXJ0eURlZmluaXRpb24gPSBvUHJvcGVydHlEYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldE9iamVjdCBhcyBQcm9wZXJ0eTtcblx0bGV0IHVuaXQgPSBvUHJvcGVydHlEZWZpbml0aW9uLmFubm90YXRpb25zPy5NZWFzdXJlcz8uVW5pdDtcblx0Y29uc3QgcmVsYXRpdmVMb2NhdGlvbiA9IGdldFBhdGhSZWxhdGl2ZUxvY2F0aW9uKFxuXHRcdG9Qcm9wZXJ0eURhdGFNb2RlbE9iamVjdFBhdGguY29udGV4dExvY2F0aW9uLFxuXHRcdG9Qcm9wZXJ0eURhdGFNb2RlbE9iamVjdFBhdGgubmF2aWdhdGlvblByb3BlcnRpZXNcblx0KS5tYXAobnAgPT4gbnAubmFtZSk7XG5cdHVuaXQgPSB1bml0ID8gdW5pdCA6IG9Qcm9wZXJ0eURlZmluaXRpb24uYW5ub3RhdGlvbnM/Lk1lYXN1cmVzPy5JU09DdXJyZW5jeTtcblx0cmV0dXJuIHVuaXQgPyBjb21waWxlQmluZGluZyhhbm5vdGF0aW9uRXhwcmVzc2lvbih1bml0LCByZWxhdGl2ZUxvY2F0aW9uKSkgOiB1bmRlZmluZWQ7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0QXNzb2NpYXRlZFRleHRCaW5kaW5nID0gZnVuY3Rpb24oXG5cdG9Qcm9wZXJ0eURhdGFNb2RlbE9iamVjdFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGgsXG5cdGZpZWxkRm9ybWF0T3B0aW9uczogRmllbGRGb3JtYXRPcHRpb25zXG4pOiBCaW5kaW5nRXhwcmVzc2lvbjxzdHJpbmc+IHtcblx0Y29uc3QgdGV4dFByb3BlcnR5UGF0aCA9IGdldEFzc29jaWF0ZWRUZXh0UHJvcGVydHlQYXRoKG9Qcm9wZXJ0eURhdGFNb2RlbE9iamVjdFBhdGgudGFyZ2V0T2JqZWN0KTtcblx0aWYgKHRleHRQcm9wZXJ0eVBhdGgpIHtcblx0XHRjb25zdCBvVGV4dFByb3BlcnR5UGF0aCA9IGVuaGFuY2VEYXRhTW9kZWxQYXRoKG9Qcm9wZXJ0eURhdGFNb2RlbE9iamVjdFBhdGgsIHRleHRQcm9wZXJ0eVBhdGgpO1xuXHRcdGNvbnN0IG9WYWx1ZUJpbmRpbmcgPSBnZXRWYWx1ZUJpbmRpbmcob1RleHRQcm9wZXJ0eVBhdGgsIGZpZWxkRm9ybWF0T3B0aW9ucywgdHJ1ZSwgdHJ1ZSwgeyAkJG5vUGF0Y2g6IHRydWUgfSk7XG5cdFx0cmV0dXJuIG9WYWx1ZUJpbmRpbmc7XG5cdH1cblx0cmV0dXJuIHVuZGVmaW5lZDtcbn07XG5cbmV4cG9ydCBjb25zdCBpc1VzZWRJbk5hdmlnYXRpb25XaXRoUXVpY2tWaWV3RmFjZXRzID0gZnVuY3Rpb24ob0RhdGFNb2RlbFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGgsIG9Qcm9wZXJ0eTogUHJvcGVydHkpOiBib29sZWFuIHtcblx0Y29uc3QgYU5hdmlnYXRpb25Qcm9wZXJ0aWVzID0gb0RhdGFNb2RlbFBhdGg/LnRhcmdldEVudGl0eVR5cGU/Lm5hdmlnYXRpb25Qcm9wZXJ0aWVzIHx8IFtdO1xuXHRsZXQgYklzVXNlZEluTmF2aWdhdGlvbldpdGhRdWlja1ZpZXdGYWNldHMgPSBmYWxzZTtcblx0YU5hdmlnYXRpb25Qcm9wZXJ0aWVzLmZvckVhY2gob05hdlByb3AgPT4ge1xuXHRcdGlmIChvTmF2UHJvcC5yZWZlcmVudGlhbENvbnN0cmFpbnQgJiYgb05hdlByb3AucmVmZXJlbnRpYWxDb25zdHJhaW50Lmxlbmd0aCkge1xuXHRcdFx0b05hdlByb3AucmVmZXJlbnRpYWxDb25zdHJhaW50LmZvckVhY2gob1JlZkNvbnN0cmFpbnQgPT4ge1xuXHRcdFx0XHRpZiAob1JlZkNvbnN0cmFpbnQ/LnNvdXJjZVByb3BlcnR5ID09PSBvUHJvcGVydHkubmFtZSkge1xuXHRcdFx0XHRcdGlmIChvTmF2UHJvcD8udGFyZ2V0VHlwZT8uYW5ub3RhdGlvbnM/LlVJPy5RdWlja1ZpZXdGYWNldHMpIHtcblx0XHRcdFx0XHRcdGJJc1VzZWRJbk5hdmlnYXRpb25XaXRoUXVpY2tWaWV3RmFjZXRzID0gdHJ1ZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblx0fSk7XG5cdHJldHVybiBiSXNVc2VkSW5OYXZpZ2F0aW9uV2l0aFF1aWNrVmlld0ZhY2V0cztcbn07XG5cbmV4cG9ydCBjb25zdCBpc1JldHJpZXZlVGV4dEZyb21WYWx1ZUxpc3RFbmFibGVkID0gZnVuY3Rpb24oXG5cdG9Qcm9wZXJ0eVBhdGg6IFByb3BlcnR5T3JQYXRoPFByb3BlcnR5Pixcblx0ZmllbGRGb3JtYXRPcHRpb25zOiBGaWVsZEZvcm1hdE9wdGlvbnNcbik6IGJvb2xlYW4ge1xuXHRjb25zdCBvUHJvcGVydHk6IFByb3BlcnR5ID0gKGlzUGF0aEV4cHJlc3Npb24ob1Byb3BlcnR5UGF0aCkgJiYgb1Byb3BlcnR5UGF0aC4kdGFyZ2V0KSB8fCAob1Byb3BlcnR5UGF0aCBhcyBQcm9wZXJ0eSk7XG5cdGlmIChcblx0XHQhKGZpZWxkRm9ybWF0T3B0aW9ucy5kaXNwbGF5TW9kZSA9PT0gXCJWYWx1ZVwiKSAmJlxuXHRcdCFvUHJvcGVydHkuYW5ub3RhdGlvbnM/LkNvbW1vbj8uVGV4dCAmJlxuXHRcdCFvUHJvcGVydHkuYW5ub3RhdGlvbnM/Lk1lYXN1cmVzICYmXG5cdFx0UHJvcGVydHlIZWxwZXIuaGFzVmFsdWVIZWxwKG9Qcm9wZXJ0eSkgJiZcblx0XHRmaWVsZEZvcm1hdE9wdGlvbnMudGV4dEFsaWduTW9kZSA9PT0gXCJGb3JtXCJcblx0KSB7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblx0cmV0dXJuIGZhbHNlO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldERpc3BsYXlTdHlsZSA9IGZ1bmN0aW9uKFxuXHRvUHJvcGVydHlQYXRoOiBQcm9wZXJ0eU9yUGF0aDxQcm9wZXJ0eT4sXG5cdG9EYXRhRmllbGQ6IGFueSxcblx0b0RhdGFNb2RlbFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGgsXG5cdGZpZWxkRm9ybWF0T3B0aW9uczogRmllbGRGb3JtYXRPcHRpb25zLFxuXHRzZW1hbnRpY09iamVjdDogc3RyaW5nXG4pOiBEaXNwbGF5U3R5bGUge1xuXHQvLyBhbGdvcml0aG0gdG8gZGV0ZXJtaW5lIHRoZSBmaWVsZCBmcmFnbWVudCB0byB1c2Vcblx0Y29uc3Qgb1Byb3BlcnR5OiBQcm9wZXJ0eSA9IChpc1BhdGhFeHByZXNzaW9uKG9Qcm9wZXJ0eVBhdGgpICYmIG9Qcm9wZXJ0eVBhdGguJHRhcmdldCkgfHwgKG9Qcm9wZXJ0eVBhdGggYXMgUHJvcGVydHkpO1xuXHRpZiAoXG5cdFx0c2VtYW50aWNPYmplY3QgJiZcblx0XHQhb1Byb3BlcnR5LmFubm90YXRpb25zPy5VST8uSXNJbWFnZVVSTCAmJlxuXHRcdCEob1Byb3BlcnR5LnR5cGUgPT09IFwiRWRtLlN0cmVhbVwiKSAmJlxuXHRcdCEob1Byb3BlcnR5LmFubm90YXRpb25zPy5Db21tdW5pY2F0aW9uPy5Jc0VtYWlsQWRkcmVzcyB8fCBvUHJvcGVydHkuYW5ub3RhdGlvbnM/LkNvbW11bmljYXRpb24/LklzUGhvbmVOdW1iZXIpXG5cdCkge1xuXHRcdHJldHVybiBcIkxpbmtXaXRoUXVpY2tWaWV3Rm9ybVwiO1xuXHR9XG5cdGlmICghb1Byb3BlcnR5UGF0aCB8fCB0eXBlb2Ygb1Byb3BlcnR5UGF0aCA9PT0gXCJzdHJpbmdcIikge1xuXHRcdHJldHVybiBcIlRleHRcIjtcblx0fVxuXHRpZiAob1Byb3BlcnR5LnR5cGUgPT09IFwiRWRtLlN0cmVhbVwiKSB7XG5cdFx0cmV0dXJuIFwiRmlsZVwiO1xuXHR9XG5cdGlmIChvUHJvcGVydHkuYW5ub3RhdGlvbnM/LlVJPy5Jc0ltYWdlVVJMKSB7XG5cdFx0cmV0dXJuIFwiQXZhdGFyXCI7XG5cdH1cblx0c3dpdGNoIChvRGF0YUZpZWxkLiRUeXBlKSB7XG5cdFx0Y2FzZSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkRhdGFQb2ludFR5cGVcIjpcblx0XHRcdHJldHVybiBcIkRhdGFQb2ludFwiO1xuXHRcdGNhc2UgXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhRmllbGRGb3JBbm5vdGF0aW9uXCI6XG5cdFx0XHRpZiAob0RhdGFGaWVsZC5UYXJnZXQ/LiR0YXJnZXQ/LiRUeXBlID09PSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkRhdGFQb2ludFR5cGVcIikge1xuXHRcdFx0XHRyZXR1cm4gXCJEYXRhUG9pbnRcIjtcblx0XHRcdH0gZWxzZSBpZiAob0RhdGFGaWVsZC5UYXJnZXQ/LiR0YXJnZXQ/LiRUeXBlID09PSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW11bmljYXRpb24udjEuQ29udGFjdFR5cGVcIikge1xuXHRcdFx0XHRyZXR1cm4gXCJDb250YWN0XCI7XG5cdFx0XHR9XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YUZpZWxkRm9yQWN0aW9uXCI6XG5cdFx0Y2FzZSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkRhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvblwiOlxuXHRcdFx0cmV0dXJuIFwiQnV0dG9uXCI7XG5cdFx0Y2FzZSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkRhdGFGaWVsZFdpdGhOYXZpZ2F0aW9uUGF0aFwiOlxuXHRcdFx0cmV0dXJuIFwiTGlua1wiO1xuXHR9XG5cdGlmIChvRGF0YU1vZGVsUGF0aD8udGFyZ2V0RW50aXR5VHlwZT8uYW5ub3RhdGlvbnM/LkNvbW1vbj8uU2VtYW50aWNLZXkpIHtcblx0XHRjb25zdCBhU2VtYW50aWNLZXlzID0gb0RhdGFNb2RlbFBhdGgudGFyZ2V0RW50aXR5VHlwZS5hbm5vdGF0aW9ucy5Db21tb24uU2VtYW50aWNLZXk7XG5cdFx0Y29uc3QgYklzU2VtYW50aWNLZXkgPSAhYVNlbWFudGljS2V5cy5ldmVyeShmdW5jdGlvbihvS2V5KSB7XG5cdFx0XHRyZXR1cm4gb0tleT8uJHRhcmdldD8ubmFtZSAhPT0gb1Byb3BlcnR5Lm5hbWU7XG5cdFx0fSk7XG5cdFx0aWYgKGJJc1NlbWFudGljS2V5ICYmIGZpZWxkRm9ybWF0T3B0aW9ucy5zZW1hbnRpY0tleVN0eWxlKSB7XG5cdFx0XHRpZiAob0RhdGFNb2RlbFBhdGgudGFyZ2V0RW50aXR5U2V0Py5hbm5vdGF0aW9ucz8uQ29tbW9uPy5EcmFmdFJvb3QpIHtcblx0XHRcdFx0Ly8gJiYgZmllbGRGb3JtYXRPcHRpb25zLmhhc0RyYWZ0SW5kaWNhdG9yKSB7XG5cdFx0XHRcdC8vIHdlIHRoZW4gc3RpbGwgY2hlY2sgd2hldGhlciB0aGlzIGlzIGF2YWlsYWJsZSBhdCBkZXNpZ250aW1lIG9uIHRoZSBlbnRpdHlzZXRcblx0XHRcdFx0cmV0dXJuIFwiU2VtYW50aWNLZXlXaXRoRHJhZnRJbmRpY2F0b3JcIjtcblx0XHRcdH1cblx0XHRcdHJldHVybiBmaWVsZEZvcm1hdE9wdGlvbnMuc2VtYW50aWNLZXlTdHlsZSA9PT0gXCJPYmplY3RJZGVudGlmaWVyXCIgPyBcIk9iamVjdElkZW50aWZpZXJcIiA6IFwiTGFiZWxTZW1hbnRpY0tleVwiO1xuXHRcdH1cblx0fVxuXHRpZiAob0RhdGFGaWVsZC5Dcml0aWNhbGl0eSkge1xuXHRcdHJldHVybiBcIk9iamVjdFN0YXR1c1wiO1xuXHR9XG5cdGlmIChvUHJvcGVydHkuYW5ub3RhdGlvbnM/Lk1lYXN1cmVzPy5JU09DdXJyZW5jeSAmJiBTdHJpbmcoZmllbGRGb3JtYXRPcHRpb25zLmlzQ3VycmVuY3lBbGlnbmVkKSA9PT0gXCJ0cnVlXCIpIHtcblx0XHRpZiAoZmllbGRGb3JtYXRPcHRpb25zLm1lYXN1cmVEaXNwbGF5TW9kZSA9PT0gXCJIaWRkZW5cIikge1xuXHRcdFx0cmV0dXJuIFwiVGV4dFwiO1xuXHRcdH1cblx0XHRyZXR1cm4gXCJBbW91bnRXaXRoQ3VycmVuY3lcIjtcblx0fVxuXHRpZiAob1Byb3BlcnR5LmFubm90YXRpb25zPy5Db21tdW5pY2F0aW9uPy5Jc0VtYWlsQWRkcmVzcyB8fCBvUHJvcGVydHkuYW5ub3RhdGlvbnM/LkNvbW11bmljYXRpb24/LklzUGhvbmVOdW1iZXIpIHtcblx0XHRyZXR1cm4gXCJMaW5rXCI7XG5cdH1cblx0aWYgKG9Qcm9wZXJ0eS5hbm5vdGF0aW9ucz8uVUk/Lk11bHRpTGluZVRleHQpIHtcblx0XHRyZXR1cm4gXCJFeHBhbmRhYmxlVGV4dFwiO1xuXHR9XG5cblx0aWYgKGlzVXNlZEluTmF2aWdhdGlvbldpdGhRdWlja1ZpZXdGYWNldHMob0RhdGFNb2RlbFBhdGgsIG9Qcm9wZXJ0eSkpIHtcblx0XHRyZXR1cm4gXCJMaW5rV2l0aFF1aWNrVmlld0Zvcm1cIjtcblx0fVxuXHRpZiAob1Byb3BlcnR5LmFubm90YXRpb25zPy5Db21tb24/LlNlbWFudGljT2JqZWN0KSB7XG5cdFx0cmV0dXJuIFwiTGlua1dyYXBwZXJcIjtcblx0fVxuXHRpZiAob0RhdGFGaWVsZC4kVHlwZSA9PT0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhRmllbGRXaXRoVXJsXCIpIHtcblx0XHRyZXR1cm4gXCJMaW5rXCI7XG5cdH1cblx0aWYgKGZpZWxkRm9ybWF0T3B0aW9ucy5yZXRyaWV2ZVRleHRGcm9tVmFsdWVMaXN0ID09PSB0cnVlKSB7XG5cdFx0cmV0dXJuIFwiTWRjRmllbGRXaXRoVmFsdWVIZWxwXCI7XG5cdH1cblx0cmV0dXJuIFwiVGV4dFwiO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEVkaXRTdHlsZSA9IGZ1bmN0aW9uKFxuXHRvUHJvcGVydHlQYXRoOiBQcm9wZXJ0eU9yUGF0aDxQcm9wZXJ0eT4sXG5cdG9EYXRhRmllbGQ6IGFueSxcblx0b0ZpZWxkRm9ybWF0T3B0aW9uczogRmllbGRGb3JtYXRPcHRpb25zXG4pOiBFZGl0U3R5bGUgfCBudWxsIHtcblx0Ly8gYWxnb3JpdGhtIHRvIGRldGVybWluZSB0aGUgZmllbGQgZnJhZ21lbnQgdG8gdXNlXG5cdGlmICghb1Byb3BlcnR5UGF0aCB8fCB0eXBlb2Ygb1Byb3BlcnR5UGF0aCA9PT0gXCJzdHJpbmdcIikge1xuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cdGNvbnN0IG9Qcm9wZXJ0eTogUHJvcGVydHkgPSAoaXNQYXRoRXhwcmVzc2lvbihvUHJvcGVydHlQYXRoKSAmJiBvUHJvcGVydHlQYXRoLiR0YXJnZXQpIHx8IChvUHJvcGVydHlQYXRoIGFzIFByb3BlcnR5KTtcblx0aWYgKG9Qcm9wZXJ0eS50eXBlID09PSBcIkVkbS5TdHJlYW1cIikge1xuXHRcdHJldHVybiBcIkZpbGVcIjtcblx0fVxuXHRzd2l0Y2ggKG9EYXRhRmllbGQuJFR5cGUpIHtcblx0XHRjYXNlIFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YUZpZWxkRm9yQW5ub3RhdGlvblwiOlxuXHRcdFx0aWYgKG9EYXRhRmllbGQuVGFyZ2V0Py4kdGFyZ2V0Py4kVHlwZSA9PT0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tdW5pY2F0aW9uLnYxLkNvbnRhY3RUeXBlXCIpIHtcblx0XHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0XHR9IGVsc2UgaWYgKG9EYXRhRmllbGQuVGFyZ2V0Py4kdGFyZ2V0Py5WaXN1YWxpemF0aW9uID09PSBcIlVJLlZpc3VhbGl6YXRpb25UeXBlL1JhdGluZ1wiKSB7XG5cdFx0XHRcdHJldHVybiBcIlJhdGluZ0luZGljYXRvclwiO1xuXHRcdFx0fVxuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkRhdGFQb2ludFR5cGVcIjpcblx0XHRcdGlmIChvRGF0YUZpZWxkPy5WaXN1YWxpemF0aW9uID09PSBcIlVJLlZpc3VhbGl6YXRpb25UeXBlL1JhdGluZ1wiKSB7XG5cdFx0XHRcdHJldHVybiBcIlJhdGluZ0luZGljYXRvclwiO1xuXHRcdFx0fVxuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkRhdGFGaWVsZEZvckFjdGlvblwiOlxuXHRcdGNhc2UgXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhRmllbGRXaXRoTmF2aWdhdGlvblBhdGhcIjpcblx0XHRjYXNlIFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uXCI6XG5cdFx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXHRjb25zdCBvUHJvcGVydHlVbml0ID0gZ2V0QXNzb2NpYXRlZFVuaXRQcm9wZXJ0eShvUHJvcGVydHkpO1xuXHRjb25zdCBvUHJvcGVydHlDdXJyZW5jeSA9IGdldEFzc29jaWF0ZWRDdXJyZW5jeVByb3BlcnR5KG9Qcm9wZXJ0eSk7XG5cdGlmIChcblx0XHQoUHJvcGVydHlIZWxwZXIuaGFzVmFsdWVIZWxwKG9Qcm9wZXJ0eSkgJiYgb1Byb3BlcnR5LnR5cGUgIT09IFwiRWRtLkJvb2xlYW5cIikgfHxcblx0XHQob1Byb3BlcnR5VW5pdCAmJiBQcm9wZXJ0eUhlbHBlci5oYXNWYWx1ZUhlbHAob1Byb3BlcnR5VW5pdCkpIHx8XG5cdFx0KG9Qcm9wZXJ0eUN1cnJlbmN5ICYmIFByb3BlcnR5SGVscGVyLmhhc1ZhbHVlSGVscChvUHJvcGVydHlDdXJyZW5jeSkpXG5cdCkge1xuXHRcdGlmIChvRmllbGRGb3JtYXRPcHRpb25zPy5tZWFzdXJlRGlzcGxheU1vZGUgPT09IFwiSGlkZGVuXCIpIHtcblx0XHRcdHJldHVybiBcIklucHV0XCI7XG5cdFx0fVxuXHRcdHJldHVybiBcIklucHV0V2l0aFZhbHVlSGVscFwiO1xuXHR9XG5cdGlmIChvUHJvcGVydHkuYW5ub3RhdGlvbnM/LlVJPy5NdWx0aUxpbmVUZXh0Py52YWx1ZU9mKCkgJiYgb1Byb3BlcnR5LnR5cGUgPT09IFwiRWRtLlN0cmluZ1wiKSB7XG5cdFx0cmV0dXJuIFwiVGV4dEFyZWFcIjtcblx0fVxuXHRzd2l0Y2ggKG9Qcm9wZXJ0eS50eXBlKSB7XG5cdFx0Y2FzZSBcIkVkbS5EYXRlXCI6XG5cdFx0XHRyZXR1cm4gXCJEYXRlUGlja2VyXCI7XG5cdFx0Y2FzZSBcIkVkbS5UaW1lXCI6XG5cdFx0Y2FzZSBcIkVkbS5UaW1lT2ZEYXlcIjpcblx0XHRcdHJldHVybiBcIlRpbWVQaWNrZXJcIjtcblx0XHRjYXNlIFwiRWRtLkRhdGVUaW1lXCI6XG5cdFx0Y2FzZSBcIkVkbS5EYXRlVGltZU9mZnNldFwiOlxuXHRcdFx0cmV0dXJuIFwiRGF0ZVRpbWVQaWNrZXJcIjtcblx0XHRjYXNlIFwiRWRtLkJvb2xlYW5cIjpcblx0XHRcdHJldHVybiBcIkNoZWNrQm94XCI7XG5cdH1cblx0aWYgKG9Qcm9wZXJ0eS5hbm5vdGF0aW9ucz8uTWVhc3VyZXM/LklTT0N1cnJlbmN5IHx8IG9Qcm9wZXJ0eS5hbm5vdGF0aW9ucz8uTWVhc3VyZXM/LlVuaXQpIHtcblx0XHRyZXR1cm4gXCJJbnB1dFdpdGhVbml0XCI7XG5cdH1cblx0cmV0dXJuIFwiSW5wdXRcIjtcbn07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgYmluZGluZyBleHByZXNzaW9uIHRvIGV2YWx1YXRlIHRoZSB2aXNpYmlsaXR5IG9mIGEgRGF0YUZpZWxkIG9yIERhdGFQb2ludCBhbm5vdGF0aW9uLlxuICpcbiAqIFNBUCBGaW9yaSBlbGVtZW50cyB3aWxsIGV2YWx1YXRlIGVpdGhlciB0aGUgVUkuSGlkZGVuIGFubm90YXRpb24gZGVmaW5lZCBvbiB0aGUgYW5ub3RhdGlvbiBpdHNlbGYgb3Igb24gdGhlIHRhcmdldCBwcm9wZXJ0eS5cbiAqXG4gKiBAcGFyYW0ge0RhdGFNb2RlbE9iamVjdFBhdGh9IGRhdGFGaWVsZE1vZGVsUGF0aCBUaGUgbWV0YXBhdGggcmVmZXJyaW5nIHRvIHRoZSBhbm5vdGF0aW9uIHdlIGFyZSBldmFsdWF0aW5nLlxuICogQHBhcmFtIHtGaWVsZEZvcm1hdE9wdGlvbnN9IFtmb3JtYXRPcHRpb25zXSBGb3JtYXRPcHRpb25zIG9wdGlvbmFsLlxuICogQHJldHVybnMge0JpbmRpbmdFeHByZXNzaW9uPHN0cmluZz59IEFuIGV4cHJlc3Npb24gdGhhdCB5b3UgY2FuIGJpbmQgdG8gdGhlIFVJLlxuICovXG5leHBvcnQgY29uc3QgZ2V0VmlzaWJsZUV4cHJlc3Npb24gPSBmdW5jdGlvbihcblx0ZGF0YUZpZWxkTW9kZWxQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoLFxuXHRmb3JtYXRPcHRpb25zPzogRmllbGRGb3JtYXRPcHRpb25zXG4pOiBCaW5kaW5nRXhwcmVzc2lvbjxzdHJpbmc+IHtcblx0Y29uc3QgdGFyZ2V0T2JqZWN0OiBEYXRhRmllbGRBYnN0cmFjdFR5cGVzIHwgRGF0YVBvaW50VHlwZVR5cGVzID0gZGF0YUZpZWxkTW9kZWxQYXRoLnRhcmdldE9iamVjdDtcblx0bGV0IHByb3BlcnR5VmFsdWU7XG5cdGlmICh0YXJnZXRPYmplY3QpIHtcblx0XHRzd2l0Y2ggKHRhcmdldE9iamVjdC4kVHlwZSkge1xuXHRcdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGQ6XG5cdFx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZFdpdGhVcmw6XG5cdFx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZFdpdGhOYXZpZ2F0aW9uUGF0aDpcblx0XHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkV2l0aEludGVudEJhc2VkTmF2aWdhdGlvbjpcblx0XHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkV2l0aEFjdGlvbjpcblx0XHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YVBvaW50VHlwZTpcblx0XHRcdFx0cHJvcGVydHlWYWx1ZSA9IHRhcmdldE9iamVjdC5WYWx1ZS4kdGFyZ2V0O1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQW5ub3RhdGlvbjpcblx0XHRcdFx0Ly8gaWYgaXQgaXMgYSBEYXRhRmllbGRGb3JBbm5vdGF0aW9uIHBvaW50aW5nIHRvIGEgRGF0YVBvaW50IHdlIGxvb2sgYXQgdGhlIGRhdGFQb2ludCdzIHZhbHVlXG5cdFx0XHRcdGlmICh0YXJnZXRPYmplY3Q/LlRhcmdldD8uJHRhcmdldD8uJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFQb2ludFR5cGUpIHtcblx0XHRcdFx0XHRwcm9wZXJ0eVZhbHVlID0gdGFyZ2V0T2JqZWN0LlRhcmdldC4kdGFyZ2V0Py5WYWx1ZS4kdGFyZ2V0O1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZmFsbHRocm91Z2hcblx0XHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uOlxuXHRcdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JBY3Rpb246XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRwcm9wZXJ0eVZhbHVlID0gdW5kZWZpbmVkO1xuXHRcdH1cblx0fVxuXHRjb25zdCBpc0FuYWx5dGljYWxHcm91cEhlYWRlckV4cGFuZGVkID0gZm9ybWF0T3B0aW9ucz8uaXNBbmFseXRpY3MgPyBVSS5Jc0V4cGFuZGVkIDogY29uc3RhbnQoZmFsc2UpO1xuXHRjb25zdCBpc0FuYWx5dGljYWxMZWFmID0gZm9ybWF0T3B0aW9ucz8uaXNBbmFseXRpY3MgPyBlcXVhbChVSS5Ob2RlTGV2ZWwsIDApIDogY29uc3RhbnQoZmFsc2UpO1xuXG5cdC8vIEEgZGF0YSBmaWVsZCBpcyB2aXNpYmxlIGlmOlxuXHQvLyAtIHRoZSBVSS5IaWRkZW4gZXhwcmVzc2lvbiBpbiB0aGUgb3JpZ2luYWwgYW5ub3RhdGlvbiBkb2VzIG5vdCBldmFsdWF0ZSB0byAndHJ1ZSdcblx0Ly8gLSB0aGUgVUkuSGlkZGVuIGV4cHJlc3Npb24gaW4gdGhlIHRhcmdldCBwcm9wZXJ0eSBkb2VzIG5vdCBldmFsdWF0ZSB0byAndHJ1ZSdcblx0Ly8gLSBpbiBjYXNlIG9mIEFuYWx5dGljcyBpdCdzIG5vdCB2aXNpYmxlIGZvciBhbiBleHBhbmRlZCBHcm91cEhlYWRlclxuXHRyZXR1cm4gY29tcGlsZUJpbmRpbmcoXG5cdFx0YW5kKFxuXHRcdFx0Li4uW1xuXHRcdFx0XHRub3QoZXF1YWwoYW5ub3RhdGlvbkV4cHJlc3Npb24odGFyZ2V0T2JqZWN0Py5hbm5vdGF0aW9ucz8uVUk/LkhpZGRlbiksIHRydWUpKSxcblx0XHRcdFx0aWZFbHNlKFxuXHRcdFx0XHRcdCEhcHJvcGVydHlWYWx1ZSxcblx0XHRcdFx0XHRwcm9wZXJ0eVZhbHVlICYmIG5vdChlcXVhbChhbm5vdGF0aW9uRXhwcmVzc2lvbihwcm9wZXJ0eVZhbHVlLmFubm90YXRpb25zPy5VST8uSGlkZGVuKSwgdHJ1ZSkpLFxuXHRcdFx0XHRcdHRydWVcblx0XHRcdFx0KSxcblx0XHRcdFx0b3Iobm90KGlzQW5hbHl0aWNhbEdyb3VwSGVhZGVyRXhwYW5kZWQpLCBpc0FuYWx5dGljYWxMZWFmKVxuXHRcdFx0XVxuXHRcdClcblx0KTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRJbnB1dERlc2NyaXB0aW9uID0gZnVuY3Rpb24oXG5cdG9Qcm9wZXJ0eVBhdGg6IFByb3BlcnR5T3JQYXRoPFByb3BlcnR5Pixcblx0ZGVzY3JpcHRpb25CaW5kaW5nRXhwcmVzc2lvbjogQmluZGluZ0V4cHJlc3Npb248c3RyaW5nPlxuKTogQmluZGluZ0V4cHJlc3Npb248c3RyaW5nPiB7XG5cdGNvbnN0IG9Qcm9wZXJ0eSA9IChpc1BhdGhFeHByZXNzaW9uKG9Qcm9wZXJ0eVBhdGgpICYmIG9Qcm9wZXJ0eVBhdGguJHRhcmdldCkgfHwgKG9Qcm9wZXJ0eVBhdGggYXMgUHJvcGVydHkpO1xuXHRjb25zdCB1bml0UHJvcGVydHkgPSBnZXRBc3NvY2lhdGVkQ3VycmVuY3lQcm9wZXJ0eShvUHJvcGVydHkpIHx8IGdldEFzc29jaWF0ZWRVbml0UHJvcGVydHkob1Byb3BlcnR5KTtcblx0aWYgKCF1bml0UHJvcGVydHkpIHtcblx0XHRyZXR1cm4gY29tcGlsZUJpbmRpbmcoXCJcIik7XG5cdH1cblx0Y29uc3QgZWRpdGFibGVFeHByZXNzaW9uID0gYW5kKG5vdChpc1JlYWRPbmx5RXhwcmVzc2lvbih1bml0UHJvcGVydHkpKSwgbm90KFByb3BlcnR5SGVscGVyLmlzQ29tcHV0ZWQodW5pdFByb3BlcnR5KSkpO1xuXHRyZXR1cm4gY29tcGlsZUJpbmRpbmcoaWZFbHNlKGVkaXRhYmxlRXhwcmVzc2lvbiwgXCJcIiwgZGVzY3JpcHRpb25CaW5kaW5nRXhwcmVzc2lvbikpO1xufTtcblxuZXhwb3J0IGNvbnN0IFFWVGV4dEJpbmRpbmcgPSBmdW5jdGlvbihcblx0b1Byb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aCxcblx0b1Byb3BlcnR5VmFsdWVEYXRhTW9kZWxPYmplY3RQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoLFxuXHRmaWVsZEZvcm1hdE9wdGlvbnM6IEZpZWxkRm9ybWF0T3B0aW9ucyxcblx0YXNPYmplY3Q6IGJvb2xlYW4gPSBmYWxzZVxuKSB7XG5cdGxldCByZXR1cm5WYWx1ZTogYW55ID0gZ2V0VmFsdWVCaW5kaW5nKG9Qcm9wZXJ0eURhdGFNb2RlbE9iamVjdFBhdGgsIGZpZWxkRm9ybWF0T3B0aW9ucywgYXNPYmplY3QpO1xuXHRpZiAocmV0dXJuVmFsdWUgPT09IFwiXCIpIHtcblx0XHRyZXR1cm5WYWx1ZSA9IGdldFRleHRCaW5kaW5nKG9Qcm9wZXJ0eVZhbHVlRGF0YU1vZGVsT2JqZWN0UGF0aCwgZmllbGRGb3JtYXRPcHRpb25zLCBhc09iamVjdCk7XG5cdH1cblx0cmV0dXJuIHJldHVyblZhbHVlO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFF1aWNrVmlld1R5cGUgPSBmdW5jdGlvbihvUHJvcGVydHlEYXRhTW9kZWxPYmplY3RQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoKTogc3RyaW5nIHtcblx0Y29uc3QgdGFyZ2V0T2JqZWN0ID0gb1Byb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aC50YXJnZXRPYmplY3Q7XG5cdGlmICh0YXJnZXRPYmplY3Q/LiR0YXJnZXQ/LmFubm90YXRpb25zPy5Db21tdW5pY2F0aW9uPy5Jc0VtYWlsQWRkcmVzcykge1xuXHRcdHJldHVybiBcImVtYWlsXCI7XG5cdH1cblx0aWYgKHRhcmdldE9iamVjdD8uJHRhcmdldD8uYW5ub3RhdGlvbnM/LkNvbW11bmljYXRpb24/LklzUGhvbmVOdW1iZXIpIHtcblx0XHRyZXR1cm4gXCJwaG9uZVwiO1xuXHR9XG5cdHJldHVybiBcInRleHRcIjtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRTZW1hbnRpY09iamVjdEV4cHJlc3Npb25Ub1Jlc29sdmUgPSBmdW5jdGlvbihvQW5ub3RhdGlvbnM6IGFueSk6IGFueVtdIHtcblx0Y29uc3QgYVNlbU9iakV4cHJUb1Jlc29sdmU6IGFueVtdID0gW107XG5cdGlmIChvQW5ub3RhdGlvbnMpIHtcblx0XHRjb25zdCBhU2VtT2Jqa2V5cyA9IE9iamVjdC5rZXlzKG9Bbm5vdGF0aW9ucykuZmlsdGVyKGZ1bmN0aW9uKGVsZW1lbnQpIHtcblx0XHRcdHJldHVybiBlbGVtZW50ID09PSBcIlNlbWFudGljT2JqZWN0XCIgfHwgZWxlbWVudC5zdGFydHNXaXRoKFwiU2VtYW50aWNPYmplY3QjXCIpO1xuXHRcdH0pO1xuXHRcdGZvciAobGV0IGlTZW1PYmpDb3VudCA9IDA7IGlTZW1PYmpDb3VudCA8IGFTZW1PYmprZXlzLmxlbmd0aDsgaVNlbU9iakNvdW50KyspIHtcblx0XHRcdGNvbnN0IHNTZW1PYmpFeHByZXNzaW9uID0gY29tcGlsZUJpbmRpbmcoYW5ub3RhdGlvbkV4cHJlc3Npb24ob0Fubm90YXRpb25zW2FTZW1PYmprZXlzW2lTZW1PYmpDb3VudF1dKSk7XG5cdFx0XHRhU2VtT2JqRXhwclRvUmVzb2x2ZS5wdXNoKHtcblx0XHRcdFx0a2V5OiBzU2VtT2JqRXhwcmVzc2lvbj8uaW5kZXhPZihcIntcIikgPT09IC0xID8gc1NlbU9iakV4cHJlc3Npb24gOiBzU2VtT2JqRXhwcmVzc2lvbj8uc3BsaXQoXCJ7XCIpWzFdLnNwbGl0KFwifVwiKVswXSxcblx0XHRcdFx0dmFsdWU6IHNTZW1PYmpFeHByZXNzaW9uXG5cdFx0XHR9KTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIGFTZW1PYmpFeHByVG9SZXNvbHZlO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFNlbWFudGljT2JqZWN0cyA9IGZ1bmN0aW9uKGFTZW1PYmpFeHByVG9SZXNvbHZlOiBhbnlbXSk6IGFueSB7XG5cdGlmIChhU2VtT2JqRXhwclRvUmVzb2x2ZS5sZW5ndGggPiAwKSB7XG5cdFx0bGV0IHNDdXN0b21EYXRhS2V5OiBzdHJpbmcgPSBcIlwiO1xuXHRcdGxldCBzQ3VzdG9tRGF0YVZhbHVlOiBhbnkgPSBcIlwiO1xuXHRcdGNvbnN0IGFTZW1PYmpDdXN0b21EYXRhOiBhbnlbXSA9IFtdO1xuXHRcdGZvciAobGV0IGlTZW1PYmpDb3VudCA9IDA7IGlTZW1PYmpDb3VudCA8IGFTZW1PYmpFeHByVG9SZXNvbHZlLmxlbmd0aDsgaVNlbU9iakNvdW50KyspIHtcblx0XHRcdHNDdXN0b21EYXRhS2V5ID0gYVNlbU9iakV4cHJUb1Jlc29sdmVbaVNlbU9iakNvdW50XS5rZXk7XG5cdFx0XHRzQ3VzdG9tRGF0YVZhbHVlID0gY29tcGlsZUJpbmRpbmcoYW5ub3RhdGlvbkV4cHJlc3Npb24oYVNlbU9iakV4cHJUb1Jlc29sdmVbaVNlbU9iakNvdW50XS52YWx1ZSkpO1xuXHRcdFx0YVNlbU9iakN1c3RvbURhdGEucHVzaCh7XG5cdFx0XHRcdGtleTogc0N1c3RvbURhdGFLZXksXG5cdFx0XHRcdHZhbHVlOiBzQ3VzdG9tRGF0YVZhbHVlXG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0Y29uc3Qgb1NlbWFudGljT2JqZWN0c01vZGVsOiBhbnkgPSBuZXcgSlNPTk1vZGVsKGFTZW1PYmpDdXN0b21EYXRhKTtcblx0XHRvU2VtYW50aWNPYmplY3RzTW9kZWwuJCR2YWx1ZUFzUHJvbWlzZSA9IHRydWU7XG5cdFx0Y29uc3Qgb1NlbU9iakJpbmRpbmdDb250ZXh0OiBhbnkgPSBvU2VtYW50aWNPYmplY3RzTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoXCIvXCIpO1xuXHRcdHJldHVybiBvU2VtT2JqQmluZGluZ0NvbnRleHQ7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIG5ldyBKU09OTW9kZWwoW10pLmNyZWF0ZUJpbmRpbmdDb250ZXh0KFwiL1wiKTtcblx0fVxufTtcbiJdfQ==
637
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkZpZWxkVGVtcGxhdGluZy50cyJdLCJuYW1lcyI6WyJhZGRUZXh0QXJyYW5nZW1lbnRUb0JpbmRpbmdFeHByZXNzaW9uIiwiYmluZGluZ0V4cHJlc3Npb24iLCJmdWxsQ29udGV4dFBhdGgiLCJ0cmFuc2Zvcm1SZWN1cnNpdmVseSIsImV4cHJlc3Npb24iLCJvdXRFeHByZXNzaW9uIiwibW9kZWxOYW1lIiwidW5kZWZpbmVkIiwib1Byb3BlcnR5RGF0YU1vZGVsUGF0aCIsImVuaGFuY2VEYXRhTW9kZWxQYXRoIiwicGF0aCIsImdldEJpbmRpbmdXaXRoVGV4dEFycmFuZ2VtZW50IiwicHJvcGVydHlCaW5kaW5nRXhwcmVzc2lvbiIsImZpZWxkRm9ybWF0T3B0aW9ucyIsInRhcmdldERpc3BsYXlNb2RlT3ZlcnJpZGUiLCJkaXNwbGF5TW9kZSIsIm9Qcm9wZXJ0eURlZmluaXRpb24iLCJ0YXJnZXRPYmplY3QiLCJ0eXBlIiwiJHRhcmdldCIsInRhcmdldERpc3BsYXlNb2RlIiwiZ2V0RGlzcGxheU1vZGUiLCJjb21tb25UZXh0IiwiYW5ub3RhdGlvbnMiLCJDb21tb24iLCJUZXh0IiwicmVsYXRpdmVMb2NhdGlvbiIsImdldFBhdGhSZWxhdGl2ZUxvY2F0aW9uIiwiY29udGV4dExvY2F0aW9uIiwibmF2aWdhdGlvblByb3BlcnRpZXMiLCJtYXAiLCJucCIsIm5hbWUiLCJmb3JtYXRXaXRoVHlwZUluZm9ybWF0aW9uIiwiYW5ub3RhdGlvbkV4cHJlc3Npb24iLCJmb3JtYXRSZXN1bHQiLCJ2YWx1ZUZvcm1hdHRlcnMiLCJmb3JtYXRXaXRoQnJhY2tldHMiLCJmb3JtYXRWYWx1ZVJlY3Vyc2l2ZWx5IiwiZ2V0VGV4dEJpbmRpbmciLCJvUHJvcGVydHlEYXRhTW9kZWxPYmplY3RQYXRoIiwiYXNPYmplY3QiLCIkVHlwZSIsImZpZWxkVmFsdWUiLCJWYWx1ZSIsImNvbXBpbGVCaW5kaW5nIiwiY29uc3RhbnQiLCJpc1BhdGhFeHByZXNzaW9uIiwib0JpbmRpbmdFeHByZXNzaW9uIiwiZ2V0Q29udGV4dFJlbGF0aXZlVGFyZ2V0T2JqZWN0UGF0aCIsIm9UYXJnZXRCaW5kaW5nIiwiTWVhc3VyZXMiLCJVbml0IiwiSVNPQ3VycmVuY3kiLCJnZXRCaW5kaW5nV2l0aFVuaXRPckN1cnJlbmN5IiwibWVhc3VyZURpc3BsYXlNb2RlIiwiZm9ybWF0T3B0aW9ucyIsInNob3dNZWFzdXJlIiwiZ2V0VmFsdWVCaW5kaW5nIiwiaWdub3JlVW5pdCIsImlnbm9yZUZvcm1hdHRpbmciLCJiaW5kaW5nUGFyYW1ldGVycyIsInRhcmdldFR5cGVBbnkiLCJzaG93TWVhc3VyZU9ubHkiLCJvTmF2UGF0aCIsInRhcmdldEVudGl0eVR5cGUiLCJyZXNvbHZlUGF0aCIsInRhcmdldCIsInZpc2l0ZWRPYmplY3RzIiwiZm9yRWFjaCIsIm9OYXZPYmoiLCJfdHlwZSIsInB1c2giLCJpc1Byb3BlcnR5IiwiQ29tbXVuaWNhdGlvbiIsIklzRW1haWxBZGRyZXNzIiwib1Byb3BlcnR5VW5pdCIsImdldEFzc29jaWF0ZWRVbml0UHJvcGVydHkiLCJvUHJvcGVydHlDdXJyZW5jeSIsImdldEFzc29jaWF0ZWRDdXJyZW5jeVByb3BlcnR5IiwiaGFzVmFsdWVIZWxwIiwic2hvd051bWJlciIsInBhcnNlS2VlcHNFbXB0eVN0cmluZyIsImNvbnN0cmFpbnRzIiwicGFyYW1ldGVycyIsInRhcmdldFR5cGUiLCJnZXRVbml0QmluZGluZyIsInVuaXQiLCJnZXRBc3NvY2lhdGVkVGV4dEJpbmRpbmciLCJ0ZXh0UHJvcGVydHlQYXRoIiwiZ2V0QXNzb2NpYXRlZFRleHRQcm9wZXJ0eVBhdGgiLCJvVGV4dFByb3BlcnR5UGF0aCIsIm9WYWx1ZUJpbmRpbmciLCIkJG5vUGF0Y2giLCJpc1VzZWRJbk5hdmlnYXRpb25XaXRoUXVpY2tWaWV3RmFjZXRzIiwib0RhdGFNb2RlbFBhdGgiLCJvUHJvcGVydHkiLCJhTmF2aWdhdGlvblByb3BlcnRpZXMiLCJiSXNVc2VkSW5OYXZpZ2F0aW9uV2l0aFF1aWNrVmlld0ZhY2V0cyIsIm9OYXZQcm9wIiwicmVmZXJlbnRpYWxDb25zdHJhaW50IiwibGVuZ3RoIiwib1JlZkNvbnN0cmFpbnQiLCJzb3VyY2VQcm9wZXJ0eSIsIlVJIiwiUXVpY2tWaWV3RmFjZXRzIiwiaXNSZXRyaWV2ZVRleHRGcm9tVmFsdWVMaXN0RW5hYmxlZCIsIm9Qcm9wZXJ0eVBhdGgiLCJQcm9wZXJ0eUhlbHBlciIsInRleHRBbGlnbk1vZGUiLCJnZXREaXNwbGF5U3R5bGUiLCJvRGF0YUZpZWxkIiwic2VtYW50aWNPYmplY3QiLCJJc0ltYWdlVVJMIiwiSXNQaG9uZU51bWJlciIsIlRhcmdldCIsIlNlbWFudGljS2V5IiwiYVNlbWFudGljS2V5cyIsImJJc1NlbWFudGljS2V5IiwiZXZlcnkiLCJvS2V5Iiwic2VtYW50aWNLZXlTdHlsZSIsInRhcmdldEVudGl0eVNldCIsIkRyYWZ0Um9vdCIsIkNyaXRpY2FsaXR5IiwiU3RyaW5nIiwiaXNDdXJyZW5jeUFsaWduZWQiLCJNdWx0aUxpbmVUZXh0IiwiU2VtYW50aWNPYmplY3QiLCJyZXRyaWV2ZVRleHRGcm9tVmFsdWVMaXN0IiwiZ2V0RWRpdFN0eWxlIiwib0ZpZWxkRm9ybWF0T3B0aW9ucyIsIlZpc3VhbGl6YXRpb24iLCJ2YWx1ZU9mIiwiZ2V0VmlzaWJsZUV4cHJlc3Npb24iLCJkYXRhRmllbGRNb2RlbFBhdGgiLCJwcm9wZXJ0eVZhbHVlIiwiaXNBbmFseXRpY2FsR3JvdXBIZWFkZXJFeHBhbmRlZCIsImlzQW5hbHl0aWNzIiwiSXNFeHBhbmRlZCIsImlzQW5hbHl0aWNhbExlYWYiLCJlcXVhbCIsIk5vZGVMZXZlbCIsImFuZCIsIm5vdCIsIkhpZGRlbiIsImlmRWxzZSIsIm9yIiwiZ2V0SW5wdXREZXNjcmlwdGlvbiIsImRlc2NyaXB0aW9uQmluZGluZ0V4cHJlc3Npb24iLCJ1bml0UHJvcGVydHkiLCJlZGl0YWJsZUV4cHJlc3Npb24iLCJpc1JlYWRPbmx5RXhwcmVzc2lvbiIsImlzQ29tcHV0ZWQiLCJRVlRleHRCaW5kaW5nIiwib1Byb3BlcnR5VmFsdWVEYXRhTW9kZWxPYmplY3RQYXRoIiwicmV0dXJuVmFsdWUiLCJnZXRRdWlja1ZpZXdUeXBlIiwiZ2V0U2VtYW50aWNPYmplY3RFeHByZXNzaW9uVG9SZXNvbHZlIiwib0Fubm90YXRpb25zIiwiYVNlbU9iakV4cHJUb1Jlc29sdmUiLCJhU2VtT2Jqa2V5cyIsIk9iamVjdCIsImtleXMiLCJmaWx0ZXIiLCJlbGVtZW50Iiwic3RhcnRzV2l0aCIsImlTZW1PYmpDb3VudCIsInNTZW1PYmpFeHByZXNzaW9uIiwia2V5IiwiaW5kZXhPZiIsInNwbGl0IiwidmFsdWUiLCJnZXRTZW1hbnRpY09iamVjdHMiLCJzQ3VzdG9tRGF0YUtleSIsInNDdXN0b21EYXRhVmFsdWUiLCJhU2VtT2JqQ3VzdG9tRGF0YSIsIm9TZW1hbnRpY09iamVjdHNNb2RlbCIsIkpTT05Nb2RlbCIsIiQkdmFsdWVBc1Byb21pc2UiLCJvU2VtT2JqQmluZGluZ0NvbnRleHQiLCJjcmVhdGVCaW5kaW5nQ29udGV4dCJdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQTJGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLE1BQU1BLHFDQUFxQyxHQUFHLFVBQ3BEQyxpQkFEb0QsRUFFcERDLGVBRm9ELEVBR2xDO0FBQ2xCLFdBQU9DLG9CQUFvQixDQUFDRixpQkFBRCxFQUFvQixTQUFwQixFQUErQixVQUFDRyxVQUFELEVBQWtEO0FBQzNHLFVBQUlDLGFBQThCLEdBQUdELFVBQXJDOztBQUNBLFVBQUlBLFVBQVUsQ0FBQ0UsU0FBWCxLQUF5QkMsU0FBN0IsRUFBd0M7QUFDdkM7QUFDQSxZQUFNQyxzQkFBc0IsR0FBR0Msb0JBQW9CLENBQUNQLGVBQUQsRUFBa0JFLFVBQVUsQ0FBQ00sSUFBN0IsQ0FBbkQ7QUFDQUwsUUFBQUEsYUFBYSxHQUFHTSw2QkFBNkIsQ0FBQ0gsc0JBQUQsRUFBeUJKLFVBQXpCLENBQTdDO0FBQ0E7O0FBQ0QsYUFB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QUF0QixHQUF5QyxJQUF6QztBQUNBLFVBQU1DLHFCQUEwQixHQUFHSCxxQkFBcUIsQ0FBQ0ksb0JBQXRCLENBQTJDLEdBQTNDLENBQW5DO0FBQ0EsYUFBT0QscUJBQVA7QUFDQSxLQWhCRCxNQWdCTztBQUNOLGFBQU8sSUFBSUYsU0FBSixDQUFjLEVBQWQsRUFBa0JHLG9CQUFsQixDQUF1QyxHQUF2QyxDQUFQO0FBQ0E7QUFDRCxHQXBCTSIsInNvdXJjZVJvb3QiOiIuIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcblx0Z2V0RGlzcGxheU1vZGUsXG5cdFByb3BlcnR5T3JQYXRoLFxuXHREaXNwbGF5TW9kZSxcblx0Z2V0QmluZGluZ1dpdGhVbml0T3JDdXJyZW5jeSxcblx0Zm9ybWF0V2l0aFR5cGVJbmZvcm1hdGlvblxufSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9VSUZvcm1hdHRlcnNcIjtcbmltcG9ydCB7XG5cdERhdGFNb2RlbE9iamVjdFBhdGgsXG5cdGVuaGFuY2VEYXRhTW9kZWxQYXRoLFxuXHRnZXRQYXRoUmVsYXRpdmVMb2NhdGlvbixcblx0Z2V0Q29udGV4dFJlbGF0aXZlVGFyZ2V0T2JqZWN0UGF0aFxufSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9EYXRhTW9kZWxQYXRoSGVscGVyXCI7XG5pbXBvcnQgeyBQcm9wZXJ0eSB9IGZyb20gXCJAc2FwLXV4L2Fubm90YXRpb24tY29udmVydGVyXCI7XG5pbXBvcnQge1xuXHRFeHByZXNzaW9uLFxuXHRhbm5vdGF0aW9uRXhwcmVzc2lvbixcblx0Zm9ybWF0UmVzdWx0LFxuXHR0cmFuc2Zvcm1SZWN1cnNpdmVseSxcblx0QmluZGluZ0V4cHJlc3Npb25FeHByZXNzaW9uLFxuXHRCaW5kaW5nRXhwcmVzc2lvbixcblx0Y29tcGlsZUJpbmRpbmcsXG5cdGNvbnN0YW50LFxuXHRiaW5kaW5nRXhwcmVzc2lvbixcblx0YW5kLFxuXHRpZkVsc2UsXG5cdG5vdCxcblx0Q29tcGxleFR5cGVFeHByZXNzaW9uLFxuXHRlcXVhbCxcblx0b3Jcbn0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvQmluZGluZ0V4cHJlc3Npb25cIjtcbmltcG9ydCB7XG5cdGlzUGF0aEV4cHJlc3Npb24sXG5cdGdldEFzc29jaWF0ZWRVbml0UHJvcGVydHksXG5cdGdldEFzc29jaWF0ZWRDdXJyZW5jeVByb3BlcnR5LFxuXHRpc1Byb3BlcnR5LFxuXHRoYXNWYWx1ZUhlbHAsXG5cdGdldEFzc29jaWF0ZWRUZXh0UHJvcGVydHlQYXRoXG59IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL1Byb3BlcnR5SGVscGVyXCI7XG5pbXBvcnQgdmFsdWVGb3JtYXR0ZXJzIGZyb20gXCJzYXAvZmUvY29yZS9mb3JtYXR0ZXJzL1ZhbHVlRm9ybWF0dGVyXCI7XG5pbXBvcnQgKiBhcyBQcm9wZXJ0eUhlbHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9Qcm9wZXJ0eUhlbHBlclwiO1xuaW1wb3J0IHsgaXNSZWFkT25seUV4cHJlc3Npb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9GaWVsZENvbnRyb2xIZWxwZXJcIjtcbmltcG9ydCB7IERhdGFGaWVsZEFic3RyYWN0VHlwZXMsIERhdGFGaWVsZFdpdGhVcmwsIERhdGFQb2ludFR5cGVUeXBlcywgVUlBbm5vdGF0aW9uVHlwZXMgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXNcIjtcbmltcG9ydCB7IFVJIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvaGVscGVycy9CaW5kaW5nSGVscGVyXCI7XG5pbXBvcnQgSlNPTk1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvanNvbi9KU09OTW9kZWxcIjtcblxuZXhwb3J0IHR5cGUgRmllbGRGb3JtYXRPcHRpb25zID0gUGFydGlhbDx7XG5cdHZhbHVlRm9ybWF0OiBTdHJpbmc7XG5cdHRleHRBbGlnbk1vZGU6IFN0cmluZztcblx0ZGlzcGxheU1vZGU6IERpc3BsYXlNb2RlO1xuXHRtZWFzdXJlRGlzcGxheU1vZGU6IFN0cmluZztcblx0dGV4dExpbmVzRWRpdDogU3RyaW5nO1xuXHR0ZXh0TWF4TGluZXM6IFN0cmluZztcblx0c2hvd0VtcHR5SW5kaWNhdG9yOiBib29sZWFuO1xuXHRzZW1hbnRpY0tleVN0eWxlOiBTdHJpbmc7XG5cdHNob3dJY29uVXJsOiBib29sZWFuO1xuXHRpc0FuYWx5dGljczogYm9vbGVhbjtcblx0aGFzRHJhZnRJbmRpY2F0b3I6IGJvb2xlYW47XG5cdHNlbWFudGlja2V5czogc3RyaW5nW107XG5cdHJldHJpZXZlVGV4dEZyb21WYWx1ZUxpc3Q6IGJvb2xlYW47XG5cdGlzQ3VycmVuY3lBbGlnbmVkOiBib29sZWFuO1xufT47XG5cbmV4cG9ydCB0eXBlIEVkaXRTdHlsZSA9XG5cdHwgXCJJbnB1dFdpdGhWYWx1ZUhlbHBcIlxuXHR8IFwiVGV4dEFyZWFcIlxuXHR8IFwiRmlsZVwiXG5cdHwgXCJEYXRlUGlja2VyXCJcblx0fCBcIlRpbWVQaWNrZXJcIlxuXHR8IFwiRGF0ZVRpbWVQaWNrZXJcIlxuXHR8IFwiQ2hlY2tCb3hcIlxuXHR8IFwiSW5wdXRXaXRoVW5pdFwiXG5cdHwgXCJJbnB1dFwiXG5cdHwgXCJSYXRpbmdJbmRpY2F0b3JcIjtcblxuZXhwb3J0IHR5cGUgRGlzcGxheVN0eWxlID1cblx0fCBcIlRleHRcIlxuXHR8IFwiTWRjRmllbGRXaXRoVmFsdWVIZWxwXCJcblx0fCBcIkF2YXRhclwiXG5cdHwgXCJGaWxlXCJcblx0fCBcIkRhdGFQb2ludFwiXG5cdHwgXCJDb250YWN0XCJcblx0fCBcIkJ1dHRvblwiXG5cdHwgXCJMaW5rXCJcblx0fCBcIk9iamVjdFN0YXR1c1wiXG5cdHwgXCJBbW91bnRXaXRoQ3VycmVuY3lcIlxuXHR8IFwiU2VtYW50aWNLZXlXaXRoRHJhZnRJbmRpY2F0b3JcIlxuXHR8IFwiT2JqZWN0SWRlbnRpZmllclwiXG5cdHwgXCJMYWJlbFNlbWFudGljS2V5XCJcblx0fCBcIkxpbmtXaXRoUXVpY2tWaWV3Rm9ybVwiXG5cdHwgXCJMaW5rV3JhcHBlclwiXG5cdHwgXCJFeHBhbmRhYmxlVGV4dFwiO1xuXG4vKipcbiAqIFJlY3Vyc2l2ZWx5IGFkZCB0aGUgdGV4dCBhcnJhbmdlbWVudCB0byBhIGJpbmRpbmcgZXhwcmVzc2lvbi5cbiAqXG4gKiBAcGFyYW0gYmluZGluZ0V4cHJlc3Npb24gVGhlIGJpbmRpbmcgZXhwcmVzc2lvbiB0byBiZSBlbmhhbmNlZFxuICogQHBhcmFtIGZ1bGxDb250ZXh0UGF0aCBUaGUgY3VycmVudCBjb250ZXh0IHBhdGggd2UncmUgb24gKHRvIHByb3Blcmx5IHJlc29sdmUgdGhlIHRleHQgYXJyYW5nZW1lbnQgcHJvcGVydGllcylcbiAqIEByZXR1cm5zIEFuIHVwZGF0ZWQgZXhwcmVzc2lvbiBjb250YWluaW5nIHRoZSB0ZXh0IGFycmFuZ2VtZW50IGJpbmRpbmcuXG4gKi9cbmV4cG9ydCBjb25zdCBhZGRUZXh0QXJyYW5nZW1lbnRUb0JpbmRpbmdFeHByZXNzaW9uID0gZnVuY3Rpb24oXG5cdGJpbmRpbmdFeHByZXNzaW9uOiBFeHByZXNzaW9uPGFueT4sXG5cdGZ1bGxDb250ZXh0UGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aFxuKTogRXhwcmVzc2lvbjxhbnk+IHtcblx0cmV0dXJuIHRyYW5zZm9ybVJlY3Vyc2l2ZWx5KGJpbmRpbmdFeHByZXNzaW9uLCBcIkJpbmRpbmdcIiwgKGV4cHJlc3Npb246IEJpbmRpbmdFeHByZXNzaW9uRXhwcmVzc2lvbjxhbnk+KSA9PiB7XG5cdFx0bGV0IG91dEV4cHJlc3Npb246IEV4cHJlc3Npb248YW55PiA9IGV4cHJlc3Npb247XG5cdFx0aWYgKGV4cHJlc3Npb24ubW9kZWxOYW1lID09PSB1bmRlZmluZWQpIHtcblx0XHRcdC8vIEluIGNhc2Ugb2YgZGVmYXVsdCBtb2RlbCB3ZSB0aGVuIG5lZWQgdG8gcmVzb2x2ZSB0aGUgdGV4dCBhcnJhbmdlbWVudCBwcm9wZXJ0eVxuXHRcdFx0Y29uc3Qgb1Byb3BlcnR5RGF0YU1vZGVsUGF0aCA9IGVuaGFuY2VEYXRhTW9kZWxQYXRoKGZ1bGxDb250ZXh0UGF0aCwgZXhwcmVzc2lvbi5wYXRoKTtcblx0XHRcdG91dEV4cHJlc3Npb24gPSBnZXRCaW5kaW5nV2l0aFRleHRBcnJhbmdlbWVudChvUHJvcGVydHlEYXRhTW9kZWxQYXRoLCBleHByZXNzaW9uKTtcblx0XHR9XG5cdFx0cmV0dXJuIG91dEV4cHJlc3Npb247XG5cdH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEJpbmRpbmdXaXRoVGV4dEFycmFuZ2VtZW50ID0gZnVuY3Rpb24oXG5cdG9Qcm9wZXJ0eURhdGFNb2RlbFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGgsXG5cdHByb3BlcnR5QmluZGluZ0V4cHJlc3Npb246IEV4cHJlc3Npb248c3RyaW5nPixcblx0ZmllbGRGb3JtYXRPcHRpb25zPzogRmllbGRGb3JtYXRPcHRpb25zXG4pOiBFeHByZXNzaW9uPHN0cmluZz4ge1xuXHRjb25zdCB0YXJnZXREaXNwbGF5TW9kZU92ZXJyaWRlID0gZmllbGRGb3JtYXRPcHRpb25zPy5kaXNwbGF5TW9kZTtcblx0bGV0IG91dEV4cHJlc3Npb24gPSBwcm9wZXJ0eUJpbmRpbmdFeHByZXNzaW9uO1xuXHRjb25zdCBvUHJvcGVydHlEZWZpbml0aW9uID1cblx0XHRvUHJvcGVydHlEYXRhTW9kZWxQYXRoLnRhcmdldE9iamVjdC50eXBlID09PSBcIlByb3BlcnR5UGF0aFwiXG5cdFx0XHQ/IChvUHJvcGVydHlEYXRhTW9kZWxQYXRoLnRhcmdldE9iamVjdC4kdGFyZ2V0IGFzIFByb3BlcnR5KVxuXHRcdFx0OiAob1Byb3BlcnR5RGF0YU1vZGVsUGF0aC50YXJnZXRPYmplY3QgYXMgUHJvcGVydHkpO1xuXHRjb25zdCB0YXJnZXREaXNwbGF5TW9kZSA9IHRhcmdldERpc3BsYXlNb2RlT3ZlcnJpZGUgfHwgZ2V0RGlzcGxheU1vZGUob1Byb3BlcnR5RGVmaW5pdGlvbiwgb1Byb3BlcnR5RGF0YU1vZGVsUGF0aCk7XG5cdGNvbnN0IGNvbW1vblRleHQgPSBvUHJvcGVydHlEZWZpbml0aW9uLmFubm90YXRpb25zPy5Db21tb24/LlRleHQ7XG5cdGNvbnN0IHJlbGF0aXZlTG9jYXRpb24gPSBnZXRQYXRoUmVsYXRpdmVMb2NhdGlvbihcblx0XHRvUHJvcGVydHlEYXRhTW9kZWxQYXRoLmNvbnRleHRMb2NhdGlvbixcblx0XHRvUHJvcGVydHlEYXRhTW9kZWxQYXRoLm5hdmlnYXRpb25Qcm9wZXJ0aWVzXG5cdCkubWFwKG5wID0+IG5wLm5hbWUpO1xuXHRwcm9wZXJ0eUJpbmRpbmdFeHByZXNzaW9uID0gZm9ybWF0V2l0aFR5cGVJbmZvcm1hdGlvbihvUHJvcGVydHlEZWZpbml0aW9uLCBwcm9wZXJ0eUJpbmRpbmdFeHByZXNzaW9uKTtcblx0aWYgKHRhcmdldERpc3BsYXlNb2RlICE9PSBcIlZhbHVlXCIgJiYgY29tbW9uVGV4dCkge1xuXHRcdHN3aXRjaCAodGFyZ2V0RGlzcGxheU1vZGUpIHtcblx0XHRcdGNhc2UgXCJEZXNjcmlwdGlvblwiOlxuXHRcdFx0XHRvdXRFeHByZXNzaW9uID0gYW5ub3RhdGlvbkV4cHJlc3Npb24oY29tbW9uVGV4dCwgcmVsYXRpdmVMb2NhdGlvbikgYXMgRXhwcmVzc2lvbjxzdHJpbmc+O1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJEZXNjcmlwdGlvblZhbHVlXCI6XG5cdFx0XHRcdG91dEV4cHJlc3Npb24gPSBmb3JtYXRSZXN1bHQoXG5cdFx0XHRcdFx0W2Fubm90YXRpb25FeHByZXNzaW9uKGNvbW1vblRleHQsIHJlbGF0aXZlTG9jYXRpb24pIGFzIEV4cHJlc3Npb248c3RyaW5nPiwgcHJvcGVydHlCaW5kaW5nRXhwcmVzc2lvbl0sXG5cdFx0XHRcdFx0dmFsdWVGb3JtYXR0ZXJzLmZvcm1hdFdpdGhCcmFja2V0c1xuXHRcdFx0XHQpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJWYWx1ZURlc2NyaXB0aW9uXCI6XG5cdFx0XHRcdG91dEV4cHJlc3Npb24gPSBmb3JtYXRSZXN1bHQoXG5cdFx0XHRcdFx0W3Byb3BlcnR5QmluZGluZ0V4cHJlc3Npb24sIGFubm90YXRpb25FeHByZXNzaW9uKGNvbW1vblRleHQsIHJlbGF0aXZlTG9jYXRpb24pIGFzIEV4cHJlc3Npb248c3RyaW5nPl0sXG5cdFx0XHRcdFx0dmFsdWVGb3JtYXR0ZXJzLmZvcm1hdFdpdGhCcmFja2V0c1xuXHRcdFx0XHQpO1xuXHRcdFx0XHRicmVhaztcblx0XHR9XG5cdH1cblx0cmV0dXJuIG91dEV4cHJlc3Npb247XG59O1xuXG5leHBvcnQgY29uc3QgZm9ybWF0VmFsdWVSZWN1cnNpdmVseSA9IGZ1bmN0aW9uKGJpbmRpbmdFeHByZXNzaW9uOiBFeHByZXNzaW9uPGFueT4sIGZ1bGxDb250ZXh0UGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aCk6IEV4cHJlc3Npb248YW55PiB7XG5cdHJldHVybiB0cmFuc2Zvcm1SZWN1cnNpdmVseShiaW5kaW5nRXhwcmVzc2lvbiwgXCJCaW5kaW5nXCIsIChleHByZXNzaW9uOiBCaW5kaW5nRXhwcmVzc2lvbkV4cHJlc3Npb248YW55PikgPT4ge1xuXHRcdGxldCBvdXRFeHByZXNzaW9uOiBFeHByZXNzaW9uPGFueT4gPSBleHByZXNzaW9uO1xuXHRcdGlmIChleHByZXNzaW9uLm1vZGVsTmFtZSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHQvLyBJbiBjYXNlIG9mIGRlZmF1bHQgbW9kZWwgd2UgdGhlbiBuZWVkIHRvIHJlc29sdmUgdGhlIHRleHQgYXJyYW5nZW1lbnQgcHJvcGVydHlcblx0XHRcdGNvbnN0IG9Qcm9wZXJ0eURhdGFNb2RlbFBhdGggPSBlbmhhbmNlRGF0YU1vZGVsUGF0aChmdWxsQ29udGV4dFBhdGgsIGV4cHJlc3Npb24ucGF0aCk7XG5cdFx0XHRvdXRFeHByZXNzaW9uID0gZm9ybWF0V2l0aFR5cGVJbmZvcm1hdGlvbihvUHJvcGVydHlEYXRhTW9kZWxQYXRoLnRhcmdldE9iamVjdCwgZXhwcmVzc2lvbik7XG5cdFx0fVxuXHRcdHJldHVybiBvdXRFeHByZXNzaW9uO1xuXHR9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRUZXh0QmluZGluZyA9IGZ1bmN0aW9uKFxuXHRvUHJvcGVydHlEYXRhTW9kZWxPYmplY3RQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoLFxuXHRmaWVsZEZvcm1hdE9wdGlvbnM6IEZpZWxkRm9ybWF0T3B0aW9ucyxcblx0YXNPYmplY3Q6IGJvb2xlYW4gPSBmYWxzZVxuKTogRXhwcmVzc2lvbjxzdHJpbmc+IHwgQmluZGluZ0V4cHJlc3Npb248c3RyaW5nPiB7XG5cdGlmIChcblx0XHRvUHJvcGVydHlEYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldE9iamVjdD8uJFR5cGUgPT09IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YUZpZWxkXCIgfHxcblx0XHRvUHJvcGVydHlEYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldE9iamVjdD8uJFR5cGUgPT09IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YVBvaW50VHlwZVwiIHx8XG5cdFx0b1Byb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aC50YXJnZXRPYmplY3Q/LiRUeXBlID09PSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkRhdGFGaWVsZFdpdGhOYXZpZ2F0aW9uUGF0aFwiIHx8XG5cdFx0b1Byb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aC50YXJnZXRPYmplY3Q/LiRUeXBlID09PSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkRhdGFGaWVsZFdpdGhVcmxcIlxuXHQpIHtcblx0XHQvLyBJZiB0aGVyZSBpcyBubyByZXNvbHZlZCBwcm9wZXJ0eSwgdGhlIHZhbHVlIGlzIHJldHVybmVkIGFzIGEgY29uc3RhbnRcblx0XHRjb25zdCBmaWVsZFZhbHVlID0gb1Byb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aC50YXJnZXRPYmplY3QuVmFsdWUgfHwgXCJcIjtcblx0XHRyZXR1cm4gY29tcGlsZUJpbmRpbmcoY29uc3RhbnQoZmllbGRWYWx1ZSkpO1xuXHR9XG5cdGlmIChpc1BhdGhFeHByZXNzaW9uKG9Qcm9wZXJ0eURhdGFNb2RlbE9iamVjdFBhdGgudGFyZ2V0T2JqZWN0KSAmJiBvUHJvcGVydHlEYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldE9iamVjdC4kdGFyZ2V0KSB7XG5cdFx0b1Byb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aCA9IGVuaGFuY2VEYXRhTW9kZWxQYXRoKG9Qcm9wZXJ0eURhdGFNb2RlbE9iamVjdFBhdGgsIG9Qcm9wZXJ0eURhdGFNb2RlbE9iamVjdFBhdGgudGFyZ2V0T2JqZWN0LnBhdGgpO1xuXHR9XG5cdGNvbnN0IG9CaW5kaW5nRXhwcmVzc2lvbiA9IGJpbmRpbmdFeHByZXNzaW9uKGdldENvbnRleHRSZWxhdGl2ZVRhcmdldE9iamVjdFBhdGgob1Byb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aCkpO1xuXHRsZXQgb1RhcmdldEJpbmRpbmc7XG5cdGlmIChcblx0XHRvUHJvcGVydHlEYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldE9iamVjdD8uYW5ub3RhdGlvbnM/Lk1lYXN1cmVzPy5Vbml0IHx8XG5cdFx0b1Byb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aC50YXJnZXRPYmplY3Q/LmFubm90YXRpb25zPy5NZWFzdXJlcz8uSVNPQ3VycmVuY3lcblx0KSB7XG5cdFx0b1RhcmdldEJpbmRpbmcgPSBnZXRCaW5kaW5nV2l0aFVuaXRPckN1cnJlbmN5KG9Qcm9wZXJ0eURhdGFNb2RlbE9iamVjdFBhdGgsIG9CaW5kaW5nRXhwcmVzc2lvbik7XG5cdFx0aWYgKGZpZWxkRm9ybWF0T3B0aW9ucz8ubWVhc3VyZURpc3BsYXlNb2RlID09PSBcIkhpZGRlblwiKSB7XG5cdFx0XHQvLyBUT0RPOiBSZWZhY3RvciBvbmNlIHR5cGVzIGFyZSBsZXNzIGdlbmVyaWMgaGVyZVxuXHRcdFx0KG9UYXJnZXRCaW5kaW5nIGFzIENvbXBsZXhUeXBlRXhwcmVzc2lvbjxTdHJpbmc+KS5mb3JtYXRPcHRpb25zID0ge1xuXHRcdFx0XHQuLi4ob1RhcmdldEJpbmRpbmcgYXMgQ29tcGxleFR5cGVFeHByZXNzaW9uPFN0cmluZz4pLmZvcm1hdE9wdGlvbnMsXG5cdFx0XHRcdHNob3dNZWFzdXJlOiBmYWxzZVxuXHRcdFx0fTtcblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0b1RhcmdldEJpbmRpbmcgPSBnZXRCaW5kaW5nV2l0aFRleHRBcnJhbmdlbWVudChvUHJvcGVydHlEYXRhTW9kZWxPYmplY3RQYXRoLCBvQmluZGluZ0V4cHJlc3Npb24sIGZpZWxkRm9ybWF0T3B0aW9ucyk7XG5cdH1cblx0aWYgKGFzT2JqZWN0KSB7XG5cdFx0cmV0dXJuIG9UYXJnZXRCaW5kaW5nO1xuXHR9XG5cdC8vIFdlIGRvbid0IGluY2x1ZGUgJCRub3BhdGNoIGFuZCBwYXJzZUtlZXBFbXB0eVN0cmluZyBhcyB0aGV5IG1ha2Ugbm8gc2Vuc2UgaW4gdGhlIHRleHQgYmluZGluZyBjYXNlXG5cdHJldHVybiBjb21waWxlQmluZGluZyhvVGFyZ2V0QmluZGluZyk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0VmFsdWVCaW5kaW5nID0gZnVuY3Rpb24oXG5cdG9Qcm9wZXJ0eURhdGFNb2RlbE9iamVjdFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGgsXG5cdGZpZWxkRm9ybWF0T3B0aW9uczogRmllbGRGb3JtYXRPcHRpb25zLFxuXHRpZ25vcmVVbml0OiBib29sZWFuID0gZmFsc2UsXG5cdGlnbm9yZUZvcm1hdHRpbmc6IGJvb2xlYW4gPSBmYWxzZSxcblx0YmluZGluZ1BhcmFtZXRlcnM/OiBvYmplY3QsXG5cdHRhcmdldFR5cGVBbnk/OiBib29sZWFuLFxuXHRzaG93TWVhc3VyZU9ubHk6IGJvb2xlYW4gPSBmYWxzZVxuKTogQmluZGluZ0V4cHJlc3Npb248c3RyaW5nPiB7XG5cdGlmIChpc1BhdGhFeHByZXNzaW9uKG9Qcm9wZXJ0eURhdGFNb2RlbE9iamVjdFBhdGgudGFyZ2V0T2JqZWN0KSAmJiBvUHJvcGVydHlEYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldE9iamVjdC4kdGFyZ2V0KSB7XG5cdFx0Y29uc3Qgb05hdlBhdGggPSBvUHJvcGVydHlEYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldEVudGl0eVR5cGUucmVzb2x2ZVBhdGgob1Byb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aC50YXJnZXRPYmplY3QucGF0aCwgdHJ1ZSk7XG5cdFx0b1Byb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aC50YXJnZXRPYmplY3QgPSBvTmF2UGF0aC50YXJnZXQ7XG5cdFx0b05hdlBhdGgudmlzaXRlZE9iamVjdHMuZm9yRWFjaCgob05hdk9iajogYW55KSA9PiB7XG5cdFx0XHRpZiAob05hdk9iaiAmJiBvTmF2T2JqLl90eXBlID09PSBcIk5hdmlnYXRpb25Qcm9wZXJ0eVwiKSB7XG5cdFx0XHRcdG9Qcm9wZXJ0eURhdGFNb2RlbE9iamVjdFBhdGgubmF2aWdhdGlvblByb3BlcnRpZXMucHVzaChvTmF2T2JqKTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXG5cdGNvbnN0IHRhcmdldE9iamVjdCA9IG9Qcm9wZXJ0eURhdGFNb2RlbE9iamVjdFBhdGgudGFyZ2V0T2JqZWN0O1xuXHRpZiAoaXNQcm9wZXJ0eSh0YXJnZXRPYmplY3QpKSB7XG5cdFx0bGV0IG9CaW5kaW5nRXhwcmVzc2lvbjogQmluZGluZ0V4cHJlc3Npb25FeHByZXNzaW9uPHN0cmluZz4gPSBiaW5kaW5nRXhwcmVzc2lvbihcblx0XHRcdGdldENvbnRleHRSZWxhdGl2ZVRhcmdldE9iamVjdFBhdGgob1Byb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aClcblx0XHQpIGFzIEJpbmRpbmdFeHByZXNzaW9uRXhwcmVzc2lvbjxzdHJpbmc+O1xuXHRcdGlmICh0YXJnZXRPYmplY3QuYW5ub3RhdGlvbnM/LkNvbW11bmljYXRpb24/LklzRW1haWxBZGRyZXNzKSB7XG5cdFx0XHRvQmluZGluZ0V4cHJlc3Npb24udHlwZSA9IFwic2FwLmZlLmNvcmUudHlwZS5FbWFpbFwiO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRjb25zdCBvUHJvcGVydHlVbml0ID0gZ2V0QXNzb2NpYXRlZFVuaXRQcm9wZXJ0eShvUHJvcGVydHlEYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldE9iamVjdCk7XG5cdFx0XHRjb25zdCBvUHJvcGVydHlDdXJyZW5jeSA9IGdldEFzc29jaWF0ZWRDdXJyZW5jeVByb3BlcnR5KG9Qcm9wZXJ0eURhdGFNb2RlbE9iamVjdFBhdGgudGFyZ2V0T2JqZWN0KTtcblx0XHRcdGlmICghaWdub3JlVW5pdCAmJiAob1Byb3BlcnR5VW5pdCB8fCBvUHJvcGVydHlDdXJyZW5jeSkpIHtcblx0XHRcdFx0b0JpbmRpbmdFeHByZXNzaW9uID0gZ2V0QmluZGluZ1dpdGhVbml0T3JDdXJyZW5jeShvUHJvcGVydHlEYXRhTW9kZWxPYmplY3RQYXRoLCBvQmluZGluZ0V4cHJlc3Npb24pIGFzIGFueTtcblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdChvUHJvcGVydHlVbml0ICYmICFoYXNWYWx1ZUhlbHAob1Byb3BlcnR5VW5pdCkpIHx8XG5cdFx0XHRcdFx0KG9Qcm9wZXJ0eUN1cnJlbmN5ICYmICFoYXNWYWx1ZUhlbHAob1Byb3BlcnR5Q3VycmVuY3kpKSB8fFxuXHRcdFx0XHRcdGZpZWxkRm9ybWF0T3B0aW9ucz8ubWVhc3VyZURpc3BsYXlNb2RlID09PSBcIkhpZGRlblwiXG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdC8vIElmIHRoZXJlIGlzIGEgdW5pdCBvciBjdXJyZW5jeSB3aXRob3V0IGEgdmFsdWUgaGVscCwgb3IgaW4gY2FzZSB0aGUgY3VycmVuY3kgc2hvdWxkIGJlIGV4cGxpY2l0bHkgaGlkZGVuLFxuXHRcdFx0XHRcdC8vIHdlIG5lZWQgdG8gY29uZmlndXJlIHRoZSBiaW5kaW5nIHRvIG5vdCBzaG93IHRoZSBtZWFzdXJlLCBvdGhlcndpc2UgaXQncyBuZWVkZWQgZm9yIHRoZSBtZGMgZmllbGRcblx0XHRcdFx0XHRpZiAoIW9CaW5kaW5nRXhwcmVzc2lvbi5mb3JtYXRPcHRpb25zKSB7XG5cdFx0XHRcdFx0XHRvQmluZGluZ0V4cHJlc3Npb24uZm9ybWF0T3B0aW9ucyA9IHt9O1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRpZiAoc2hvd01lYXN1cmVPbmx5KSB7XG5cdFx0XHRcdFx0XHRvQmluZGluZ0V4cHJlc3Npb24uZm9ybWF0T3B0aW9ucy5zaG93TnVtYmVyID0gZmFsc2U7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdG9CaW5kaW5nRXhwcmVzc2lvbi5mb3JtYXRPcHRpb25zLnNob3dNZWFzdXJlID0gZmFsc2U7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRvQmluZGluZ0V4cHJlc3Npb24gPSBmb3JtYXRXaXRoVHlwZUluZm9ybWF0aW9uKHRhcmdldE9iamVjdCwgb0JpbmRpbmdFeHByZXNzaW9uKSBhcyBCaW5kaW5nRXhwcmVzc2lvbkV4cHJlc3Npb248c3RyaW5nPjtcblx0XHRcdFx0aWYgKG9CaW5kaW5nRXhwcmVzc2lvbi50eXBlID09PSBcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLlN0cmluZ1wiKSB7XG5cdFx0XHRcdFx0b0JpbmRpbmdFeHByZXNzaW9uLmZvcm1hdE9wdGlvbnMgPSB7XG5cdFx0XHRcdFx0XHRwYXJzZUtlZXBzRW1wdHlTdHJpbmc6IHRydWVcblx0XHRcdFx0XHR9O1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGlmIChpZ25vcmVGb3JtYXR0aW5nKSB7XG5cdFx0XHRkZWxldGUgb0JpbmRpbmdFeHByZXNzaW9uLmZvcm1hdE9wdGlvbnM7XG5cdFx0XHRkZWxldGUgb0JpbmRpbmdFeHByZXNzaW9uLmNvbnN0cmFpbnRzO1xuXHRcdFx0ZGVsZXRlIG9CaW5kaW5nRXhwcmVzc2lvbi50eXBlO1xuXHRcdH1cblx0XHRpZiAoYmluZGluZ1BhcmFtZXRlcnMpIHtcblx0XHRcdG9CaW5kaW5nRXhwcmVzc2lvbi5wYXJhbWV0ZXJzID0gYmluZGluZ1BhcmFtZXRlcnM7XG5cdFx0fVxuXHRcdGlmICh0YXJnZXRUeXBlQW55KSB7XG5cdFx0XHRvQmluZGluZ0V4cHJlc3Npb24udGFyZ2V0VHlwZSA9IFwiYW55XCI7XG5cdFx0fVxuXHRcdHJldHVybiBjb21waWxlQmluZGluZyhvQmluZGluZ0V4cHJlc3Npb24pO1xuXHR9IGVsc2Uge1xuXHRcdGlmIChcblx0XHRcdHRhcmdldE9iamVjdD8uJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZFdpdGhVcmwgfHxcblx0XHRcdHRhcmdldE9iamVjdD8uJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZFdpdGhOYXZpZ2F0aW9uUGF0aFxuXHRcdCkge1xuXHRcdFx0cmV0dXJuIGNvbXBpbGVCaW5kaW5nKGFubm90YXRpb25FeHByZXNzaW9uKCh0YXJnZXRPYmplY3QgYXMgRGF0YUZpZWxkV2l0aFVybCkuVmFsdWUpKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIFwiXCI7XG5cdFx0fVxuXHR9XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0VW5pdEJpbmRpbmcgPSBmdW5jdGlvbihvUHJvcGVydHlEYXRhTW9kZWxPYmplY3RQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoKTogQmluZGluZ0V4cHJlc3Npb248c3RyaW5nPiB7XG5cdGNvbnN0IG9Qcm9wZXJ0eURlZmluaXRpb24gPSBvUHJvcGVydHlEYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldE9iamVjdCBhcyBQcm9wZXJ0eTtcblx0bGV0IHVuaXQgPSBvUHJvcGVydHlEZWZpbml0aW9uLmFubm90YXRpb25zPy5NZWFzdXJlcz8uVW5pdDtcblx0Y29uc3QgcmVsYXRpdmVMb2NhdGlvbiA9IGdldFBhdGhSZWxhdGl2ZUxvY2F0aW9uKFxuXHRcdG9Qcm9wZXJ0eURhdGFNb2RlbE9iamVjdFBhdGguY29udGV4dExvY2F0aW9uLFxuXHRcdG9Qcm9wZXJ0eURhdGFNb2RlbE9iamVjdFBhdGgubmF2aWdhdGlvblByb3BlcnRpZXNcblx0KS5tYXAobnAgPT4gbnAubmFtZSk7XG5cdHVuaXQgPSB1bml0ID8gdW5pdCA6IG9Qcm9wZXJ0eURlZmluaXRpb24uYW5ub3RhdGlvbnM/Lk1lYXN1cmVzPy5JU09DdXJyZW5jeTtcblx0cmV0dXJuIHVuaXQgPyBjb21waWxlQmluZGluZyhhbm5vdGF0aW9uRXhwcmVzc2lvbih1bml0LCByZWxhdGl2ZUxvY2F0aW9uKSkgOiB1bmRlZmluZWQ7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0QXNzb2NpYXRlZFRleHRCaW5kaW5nID0gZnVuY3Rpb24oXG5cdG9Qcm9wZXJ0eURhdGFNb2RlbE9iamVjdFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGgsXG5cdGZpZWxkRm9ybWF0T3B0aW9uczogRmllbGRGb3JtYXRPcHRpb25zXG4pOiBCaW5kaW5nRXhwcmVzc2lvbjxzdHJpbmc+IHtcblx0Y29uc3QgdGV4dFByb3BlcnR5UGF0aCA9IGdldEFzc29jaWF0ZWRUZXh0UHJvcGVydHlQYXRoKG9Qcm9wZXJ0eURhdGFNb2RlbE9iamVjdFBhdGgudGFyZ2V0T2JqZWN0KTtcblx0aWYgKHRleHRQcm9wZXJ0eVBhdGgpIHtcblx0XHRjb25zdCBvVGV4dFByb3BlcnR5UGF0aCA9IGVuaGFuY2VEYXRhTW9kZWxQYXRoKG9Qcm9wZXJ0eURhdGFNb2RlbE9iamVjdFBhdGgsIHRleHRQcm9wZXJ0eVBhdGgpO1xuXHRcdGNvbnN0IG9WYWx1ZUJpbmRpbmcgPSBnZXRWYWx1ZUJpbmRpbmcob1RleHRQcm9wZXJ0eVBhdGgsIGZpZWxkRm9ybWF0T3B0aW9ucywgdHJ1ZSwgdHJ1ZSwgeyAkJG5vUGF0Y2g6IHRydWUgfSk7XG5cdFx0cmV0dXJuIG9WYWx1ZUJpbmRpbmc7XG5cdH1cblx0cmV0dXJuIHVuZGVmaW5lZDtcbn07XG5cbmV4cG9ydCBjb25zdCBpc1VzZWRJbk5hdmlnYXRpb25XaXRoUXVpY2tWaWV3RmFjZXRzID0gZnVuY3Rpb24ob0RhdGFNb2RlbFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGgsIG9Qcm9wZXJ0eTogUHJvcGVydHkpOiBib29sZWFuIHtcblx0Y29uc3QgYU5hdmlnYXRpb25Qcm9wZXJ0aWVzID0gb0RhdGFNb2RlbFBhdGg/LnRhcmdldEVudGl0eVR5cGU/Lm5hdmlnYXRpb25Qcm9wZXJ0aWVzIHx8IFtdO1xuXHRsZXQgYklzVXNlZEluTmF2aWdhdGlvbldpdGhRdWlja1ZpZXdGYWNldHMgPSBmYWxzZTtcblx0YU5hdmlnYXRpb25Qcm9wZXJ0aWVzLmZvckVhY2gob05hdlByb3AgPT4ge1xuXHRcdGlmIChvTmF2UHJvcC5yZWZlcmVudGlhbENvbnN0cmFpbnQgJiYgb05hdlByb3AucmVmZXJlbnRpYWxDb25zdHJhaW50Lmxlbmd0aCkge1xuXHRcdFx0b05hdlByb3AucmVmZXJlbnRpYWxDb25zdHJhaW50LmZvckVhY2gob1JlZkNvbnN0cmFpbnQgPT4ge1xuXHRcdFx0XHRpZiAob1JlZkNvbnN0cmFpbnQ/LnNvdXJjZVByb3BlcnR5ID09PSBvUHJvcGVydHkubmFtZSkge1xuXHRcdFx0XHRcdGlmIChvTmF2UHJvcD8udGFyZ2V0VHlwZT8uYW5ub3RhdGlvbnM/LlVJPy5RdWlja1ZpZXdGYWNldHMpIHtcblx0XHRcdFx0XHRcdGJJc1VzZWRJbk5hdmlnYXRpb25XaXRoUXVpY2tWaWV3RmFjZXRzID0gdHJ1ZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblx0fSk7XG5cdHJldHVybiBiSXNVc2VkSW5OYXZpZ2F0aW9uV2l0aFF1aWNrVmlld0ZhY2V0cztcbn07XG5cbmV4cG9ydCBjb25zdCBpc1JldHJpZXZlVGV4dEZyb21WYWx1ZUxpc3RFbmFibGVkID0gZnVuY3Rpb24oXG5cdG9Qcm9wZXJ0eVBhdGg6IFByb3BlcnR5T3JQYXRoPFByb3BlcnR5Pixcblx0ZmllbGRGb3JtYXRPcHRpb25zOiBGaWVsZEZvcm1hdE9wdGlvbnNcbik6IGJvb2xlYW4ge1xuXHRjb25zdCBvUHJvcGVydHk6IFByb3BlcnR5ID0gKGlzUGF0aEV4cHJlc3Npb24ob1Byb3BlcnR5UGF0aCkgJiYgb1Byb3BlcnR5UGF0aC4kdGFyZ2V0KSB8fCAob1Byb3BlcnR5UGF0aCBhcyBQcm9wZXJ0eSk7XG5cdGlmIChcblx0XHQhKGZpZWxkRm9ybWF0T3B0aW9ucy5kaXNwbGF5TW9kZSA9PT0gXCJWYWx1ZVwiKSAmJlxuXHRcdCFvUHJvcGVydHkuYW5ub3RhdGlvbnM/LkNvbW1vbj8uVGV4dCAmJlxuXHRcdCFvUHJvcGVydHkuYW5ub3RhdGlvbnM/Lk1lYXN1cmVzICYmXG5cdFx0UHJvcGVydHlIZWxwZXIuaGFzVmFsdWVIZWxwKG9Qcm9wZXJ0eSkgJiZcblx0XHRmaWVsZEZvcm1hdE9wdGlvbnMudGV4dEFsaWduTW9kZSA9PT0gXCJGb3JtXCJcblx0KSB7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblx0cmV0dXJuIGZhbHNlO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldERpc3BsYXlTdHlsZSA9IGZ1bmN0aW9uKFxuXHRvUHJvcGVydHlQYXRoOiBQcm9wZXJ0eU9yUGF0aDxQcm9wZXJ0eT4sXG5cdG9EYXRhRmllbGQ6IGFueSxcblx0b0RhdGFNb2RlbFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGgsXG5cdGZpZWxkRm9ybWF0T3B0aW9uczogRmllbGRGb3JtYXRPcHRpb25zLFxuXHRzZW1hbnRpY09iamVjdDogc3RyaW5nXG4pOiBEaXNwbGF5U3R5bGUge1xuXHQvLyBhbGdvcml0aG0gdG8gZGV0ZXJtaW5lIHRoZSBmaWVsZCBmcmFnbWVudCB0byB1c2Vcblx0Y29uc3Qgb1Byb3BlcnR5OiBQcm9wZXJ0eSA9IChpc1BhdGhFeHByZXNzaW9uKG9Qcm9wZXJ0eVBhdGgpICYmIG9Qcm9wZXJ0eVBhdGguJHRhcmdldCkgfHwgKG9Qcm9wZXJ0eVBhdGggYXMgUHJvcGVydHkpO1xuXHRpZiAoXG5cdFx0c2VtYW50aWNPYmplY3QgJiZcblx0XHQhb1Byb3BlcnR5LmFubm90YXRpb25zPy5VST8uSXNJbWFnZVVSTCAmJlxuXHRcdCEob1Byb3BlcnR5LnR5cGUgPT09IFwiRWRtLlN0cmVhbVwiKSAmJlxuXHRcdCEob1Byb3BlcnR5LmFubm90YXRpb25zPy5Db21tdW5pY2F0aW9uPy5Jc0VtYWlsQWRkcmVzcyB8fCBvUHJvcGVydHkuYW5ub3RhdGlvbnM/LkNvbW11bmljYXRpb24/LklzUGhvbmVOdW1iZXIpXG5cdCkge1xuXHRcdHJldHVybiBcIkxpbmtXaXRoUXVpY2tWaWV3Rm9ybVwiO1xuXHR9XG5cdGlmICghb1Byb3BlcnR5UGF0aCB8fCB0eXBlb2Ygb1Byb3BlcnR5UGF0aCA9PT0gXCJzdHJpbmdcIikge1xuXHRcdHJldHVybiBcIlRleHRcIjtcblx0fVxuXHRpZiAob1Byb3BlcnR5LnR5cGUgPT09IFwiRWRtLlN0cmVhbVwiKSB7XG5cdFx0cmV0dXJuIFwiRmlsZVwiO1xuXHR9XG5cdGlmIChvUHJvcGVydHkuYW5ub3RhdGlvbnM/LlVJPy5Jc0ltYWdlVVJMKSB7XG5cdFx0cmV0dXJuIFwiQXZhdGFyXCI7XG5cdH1cblx0c3dpdGNoIChvRGF0YUZpZWxkLiRUeXBlKSB7XG5cdFx0Y2FzZSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkRhdGFQb2ludFR5cGVcIjpcblx0XHRcdHJldHVybiBcIkRhdGFQb2ludFwiO1xuXHRcdGNhc2UgXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhRmllbGRGb3JBbm5vdGF0aW9uXCI6XG5cdFx0XHRpZiAob0RhdGFGaWVsZC5UYXJnZXQ/LiR0YXJnZXQ/LiRUeXBlID09PSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkRhdGFQb2ludFR5cGVcIikge1xuXHRcdFx0XHRyZXR1cm4gXCJEYXRhUG9pbnRcIjtcblx0XHRcdH0gZWxzZSBpZiAob0RhdGFGaWVsZC5UYXJnZXQ/LiR0YXJnZXQ/LiRUeXBlID09PSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW11bmljYXRpb24udjEuQ29udGFjdFR5cGVcIikge1xuXHRcdFx0XHRyZXR1cm4gXCJDb250YWN0XCI7XG5cdFx0XHR9XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YUZpZWxkRm9yQWN0aW9uXCI6XG5cdFx0Y2FzZSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkRhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvblwiOlxuXHRcdFx0cmV0dXJuIFwiQnV0dG9uXCI7XG5cdFx0Y2FzZSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkRhdGFGaWVsZFdpdGhOYXZpZ2F0aW9uUGF0aFwiOlxuXHRcdFx0cmV0dXJuIFwiTGlua1wiO1xuXHR9XG5cdGlmIChvRGF0YU1vZGVsUGF0aD8udGFyZ2V0RW50aXR5VHlwZT8uYW5ub3RhdGlvbnM/LkNvbW1vbj8uU2VtYW50aWNLZXkpIHtcblx0XHRjb25zdCBhU2VtYW50aWNLZXlzID0gb0RhdGFNb2RlbFBhdGgudGFyZ2V0RW50aXR5VHlwZS5hbm5vdGF0aW9ucy5Db21tb24uU2VtYW50aWNLZXk7XG5cdFx0Y29uc3QgYklzU2VtYW50aWNLZXkgPSAhYVNlbWFudGljS2V5cy5ldmVyeShmdW5jdGlvbihvS2V5KSB7XG5cdFx0XHRyZXR1cm4gb0tleT8uJHRhcmdldD8ubmFtZSAhPT0gb1Byb3BlcnR5Lm5hbWU7XG5cdFx0fSk7XG5cdFx0aWYgKGJJc1NlbWFudGljS2V5ICYmIGZpZWxkRm9ybWF0T3B0aW9ucy5zZW1hbnRpY0tleVN0eWxlKSB7XG5cdFx0XHRpZiAob0RhdGFNb2RlbFBhdGgudGFyZ2V0RW50aXR5U2V0Py5hbm5vdGF0aW9ucz8uQ29tbW9uPy5EcmFmdFJvb3QpIHtcblx0XHRcdFx0Ly8gJiYgZmllbGRGb3JtYXRPcHRpb25zLmhhc0RyYWZ0SW5kaWNhdG9yKSB7XG5cdFx0XHRcdC8vIHdlIHRoZW4gc3RpbGwgY2hlY2sgd2hldGhlciB0aGlzIGlzIGF2YWlsYWJsZSBhdCBkZXNpZ250aW1lIG9uIHRoZSBlbnRpdHlzZXRcblx0XHRcdFx0cmV0dXJuIFwiU2VtYW50aWNLZXlXaXRoRHJhZnRJbmRpY2F0b3JcIjtcblx0XHRcdH1cblx0XHRcdHJldHVybiBmaWVsZEZvcm1hdE9wdGlvbnMuc2VtYW50aWNLZXlTdHlsZSA9PT0gXCJPYmplY3RJZGVudGlmaWVyXCIgPyBcIk9iamVjdElkZW50aWZpZXJcIiA6IFwiTGFiZWxTZW1hbnRpY0tleVwiO1xuXHRcdH1cblx0fVxuXHRpZiAob0RhdGFGaWVsZC5Dcml0aWNhbGl0eSkge1xuXHRcdHJldHVybiBcIk9iamVjdFN0YXR1c1wiO1xuXHR9XG5cdGlmIChvUHJvcGVydHkuYW5ub3RhdGlvbnM/Lk1lYXN1cmVzPy5JU09DdXJyZW5jeSAmJiBTdHJpbmcoZmllbGRGb3JtYXRPcHRpb25zLmlzQ3VycmVuY3lBbGlnbmVkKSA9PT0gXCJ0cnVlXCIpIHtcblx0XHRpZiAoZmllbGRGb3JtYXRPcHRpb25zLm1lYXN1cmVEaXNwbGF5TW9kZSA9PT0gXCJIaWRkZW5cIikge1xuXHRcdFx0cmV0dXJuIFwiVGV4dFwiO1xuXHRcdH1cblx0XHRyZXR1cm4gXCJBbW91bnRXaXRoQ3VycmVuY3lcIjtcblx0fVxuXHRpZiAob1Byb3BlcnR5LmFubm90YXRpb25zPy5Db21tdW5pY2F0aW9uPy5Jc0VtYWlsQWRkcmVzcyB8fCBvUHJvcGVydHkuYW5ub3RhdGlvbnM/LkNvbW11bmljYXRpb24/LklzUGhvbmVOdW1iZXIpIHtcblx0XHRyZXR1cm4gXCJMaW5rXCI7XG5cdH1cblx0aWYgKG9Qcm9wZXJ0eS5hbm5vdGF0aW9ucz8uVUk/Lk11bHRpTGluZVRleHQpIHtcblx0XHRyZXR1cm4gXCJFeHBhbmRhYmxlVGV4dFwiO1xuXHR9XG5cblx0aWYgKGlzVXNlZEluTmF2aWdhdGlvbldpdGhRdWlja1ZpZXdGYWNldHMob0RhdGFNb2RlbFBhdGgsIG9Qcm9wZXJ0eSkpIHtcblx0XHRyZXR1cm4gXCJMaW5rV2l0aFF1aWNrVmlld0Zvcm1cIjtcblx0fVxuXHRpZiAob1Byb3BlcnR5LmFubm90YXRpb25zPy5Db21tb24/LlNlbWFudGljT2JqZWN0KSB7XG5cdFx0cmV0dXJuIFwiTGlua1dyYXBwZXJcIjtcblx0fVxuXHRpZiAob0RhdGFGaWVsZC4kVHlwZSA9PT0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhRmllbGRXaXRoVXJsXCIpIHtcblx0XHRyZXR1cm4gXCJMaW5rXCI7XG5cdH1cblx0aWYgKGZpZWxkRm9ybWF0T3B0aW9ucy5yZXRyaWV2ZVRleHRGcm9tVmFsdWVMaXN0ID09PSB0cnVlKSB7XG5cdFx0cmV0dXJuIFwiTWRjRmllbGRXaXRoVmFsdWVIZWxwXCI7XG5cdH1cblx0cmV0dXJuIFwiVGV4dFwiO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEVkaXRTdHlsZSA9IGZ1bmN0aW9uKFxuXHRvUHJvcGVydHlQYXRoOiBQcm9wZXJ0eU9yUGF0aDxQcm9wZXJ0eT4sXG5cdG9EYXRhRmllbGQ6IGFueSxcblx0b0ZpZWxkRm9ybWF0T3B0aW9uczogRmllbGRGb3JtYXRPcHRpb25zXG4pOiBFZGl0U3R5bGUgfCBudWxsIHtcblx0Ly8gYWxnb3JpdGhtIHRvIGRldGVybWluZSB0aGUgZmllbGQgZnJhZ21lbnQgdG8gdXNlXG5cdGlmICghb1Byb3BlcnR5UGF0aCB8fCB0eXBlb2Ygb1Byb3BlcnR5UGF0aCA9PT0gXCJzdHJpbmdcIikge1xuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cdGNvbnN0IG9Qcm9wZXJ0eTogUHJvcGVydHkgPSAoaXNQYXRoRXhwcmVzc2lvbihvUHJvcGVydHlQYXRoKSAmJiBvUHJvcGVydHlQYXRoLiR0YXJnZXQpIHx8IChvUHJvcGVydHlQYXRoIGFzIFByb3BlcnR5KTtcblx0aWYgKG9Qcm9wZXJ0eS50eXBlID09PSBcIkVkbS5TdHJlYW1cIikge1xuXHRcdHJldHVybiBcIkZpbGVcIjtcblx0fVxuXHRzd2l0Y2ggKG9EYXRhRmllbGQuJFR5cGUpIHtcblx0XHRjYXNlIFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YUZpZWxkRm9yQW5ub3RhdGlvblwiOlxuXHRcdFx0aWYgKG9EYXRhRmllbGQuVGFyZ2V0Py4kdGFyZ2V0Py4kVHlwZSA9PT0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tdW5pY2F0aW9uLnYxLkNvbnRhY3RUeXBlXCIpIHtcblx0XHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0XHR9IGVsc2UgaWYgKG9EYXRhRmllbGQuVGFyZ2V0Py4kdGFyZ2V0Py5WaXN1YWxpemF0aW9uID09PSBcIlVJLlZpc3VhbGl6YXRpb25UeXBlL1JhdGluZ1wiKSB7XG5cdFx0XHRcdHJldHVybiBcIlJhdGluZ0luZGljYXRvclwiO1xuXHRcdFx0fVxuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkRhdGFQb2ludFR5cGVcIjpcblx0XHRcdGlmIChvRGF0YUZpZWxkPy5WaXN1YWxpemF0aW9uID09PSBcIlVJLlZpc3VhbGl6YXRpb25UeXBlL1JhdGluZ1wiKSB7XG5cdFx0XHRcdHJldHVybiBcIlJhdGluZ0luZGljYXRvclwiO1xuXHRcdFx0fVxuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkRhdGFGaWVsZEZvckFjdGlvblwiOlxuXHRcdGNhc2UgXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhRmllbGRXaXRoTmF2aWdhdGlvblBhdGhcIjpcblx0XHRjYXNlIFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uXCI6XG5cdFx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXHRjb25zdCBvUHJvcGVydHlVbml0ID0gZ2V0QXNzb2NpYXRlZFVuaXRQcm9wZXJ0eShvUHJvcGVydHkpO1xuXHRjb25zdCBvUHJvcGVydHlDdXJyZW5jeSA9IGdldEFzc29jaWF0ZWRDdXJyZW5jeVByb3BlcnR5KG9Qcm9wZXJ0eSk7XG5cdGlmIChcblx0XHQoUHJvcGVydHlIZWxwZXIuaGFzVmFsdWVIZWxwKG9Qcm9wZXJ0eSkgJiYgb1Byb3BlcnR5LnR5cGUgIT09IFwiRWRtLkJvb2xlYW5cIikgfHxcblx0XHQob1Byb3BlcnR5VW5pdCAmJiBQcm9wZXJ0eUhlbHBlci5oYXNWYWx1ZUhlbHAob1Byb3BlcnR5VW5pdCkpIHx8XG5cdFx0KG9Qcm9wZXJ0eUN1cnJlbmN5ICYmIFByb3BlcnR5SGVscGVyLmhhc1ZhbHVlSGVscChvUHJvcGVydHlDdXJyZW5jeSkpXG5cdCkge1xuXHRcdGlmIChvRmllbGRGb3JtYXRPcHRpb25zPy5tZWFzdXJlRGlzcGxheU1vZGUgPT09IFwiSGlkZGVuXCIpIHtcblx0XHRcdHJldHVybiBcIklucHV0XCI7XG5cdFx0fVxuXHRcdHJldHVybiBcIklucHV0V2l0aFZhbHVlSGVscFwiO1xuXHR9XG5cdGlmIChvUHJvcGVydHkuYW5ub3RhdGlvbnM/LlVJPy5NdWx0aUxpbmVUZXh0Py52YWx1ZU9mKCkgJiYgb1Byb3BlcnR5LnR5cGUgPT09IFwiRWRtLlN0cmluZ1wiKSB7XG5cdFx0cmV0dXJuIFwiVGV4dEFyZWFcIjtcblx0fVxuXHRzd2l0Y2ggKG9Qcm9wZXJ0eS50eXBlKSB7XG5cdFx0Y2FzZSBcIkVkbS5EYXRlXCI6XG5cdFx0XHRyZXR1cm4gXCJEYXRlUGlja2VyXCI7XG5cdFx0Y2FzZSBcIkVkbS5UaW1lXCI6XG5cdFx0Y2FzZSBcIkVkbS5UaW1lT2ZEYXlcIjpcblx0XHRcdHJldHVybiBcIlRpbWVQaWNrZXJcIjtcblx0XHRjYXNlIFwiRWRtLkRhdGVUaW1lXCI6XG5cdFx0Y2FzZSBcIkVkbS5EYXRlVGltZU9mZnNldFwiOlxuXHRcdFx0cmV0dXJuIFwiRGF0ZVRpbWVQaWNrZXJcIjtcblx0XHRjYXNlIFwiRWRtLkJvb2xlYW5cIjpcblx0XHRcdHJldHVybiBcIkNoZWNrQm94XCI7XG5cdH1cblx0aWYgKG9Qcm9wZXJ0eS5hbm5vdGF0aW9ucz8uTWVhc3VyZXM/LklTT0N1cnJlbmN5IHx8IG9Qcm9wZXJ0eS5hbm5vdGF0aW9ucz8uTWVhc3VyZXM/LlVuaXQpIHtcblx0XHRyZXR1cm4gXCJJbnB1dFdpdGhVbml0XCI7XG5cdH1cblx0cmV0dXJuIFwiSW5wdXRcIjtcbn07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgYmluZGluZyBleHByZXNzaW9uIHRvIGV2YWx1YXRlIHRoZSB2aXNpYmlsaXR5IG9mIGEgRGF0YUZpZWxkIG9yIERhdGFQb2ludCBhbm5vdGF0aW9uLlxuICpcbiAqIFNBUCBGaW9yaSBlbGVtZW50cyB3aWxsIGV2YWx1YXRlIGVpdGhlciB0aGUgVUkuSGlkZGVuIGFubm90YXRpb24gZGVmaW5lZCBvbiB0aGUgYW5ub3RhdGlvbiBpdHNlbGYgb3Igb24gdGhlIHRhcmdldCBwcm9wZXJ0eS5cbiAqXG4gKiBAcGFyYW0ge0RhdGFNb2RlbE9iamVjdFBhdGh9IGRhdGFGaWVsZE1vZGVsUGF0aCBUaGUgbWV0YXBhdGggcmVmZXJyaW5nIHRvIHRoZSBhbm5vdGF0aW9uIHdlIGFyZSBldmFsdWF0aW5nLlxuICogQHBhcmFtIHtGaWVsZEZvcm1hdE9wdGlvbnN9IFtmb3JtYXRPcHRpb25zXSBGb3JtYXRPcHRpb25zIG9wdGlvbmFsLlxuICogQHJldHVybnMge0JpbmRpbmdFeHByZXNzaW9uPHN0cmluZz59IEFuIGV4cHJlc3Npb24gdGhhdCB5b3UgY2FuIGJpbmQgdG8gdGhlIFVJLlxuICovXG5leHBvcnQgY29uc3QgZ2V0VmlzaWJsZUV4cHJlc3Npb24gPSBmdW5jdGlvbihcblx0ZGF0YUZpZWxkTW9kZWxQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoLFxuXHRmb3JtYXRPcHRpb25zPzogRmllbGRGb3JtYXRPcHRpb25zXG4pOiBCaW5kaW5nRXhwcmVzc2lvbjxzdHJpbmc+IHtcblx0Y29uc3QgdGFyZ2V0T2JqZWN0OiBEYXRhRmllbGRBYnN0cmFjdFR5cGVzIHwgRGF0YVBvaW50VHlwZVR5cGVzID0gZGF0YUZpZWxkTW9kZWxQYXRoLnRhcmdldE9iamVjdDtcblx0bGV0IHByb3BlcnR5VmFsdWU7XG5cdGlmICh0YXJnZXRPYmplY3QpIHtcblx0XHRzd2l0Y2ggKHRhcmdldE9iamVjdC4kVHlwZSkge1xuXHRcdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGQ6XG5cdFx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZFdpdGhVcmw6XG5cdFx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZFdpdGhOYXZpZ2F0aW9uUGF0aDpcblx0XHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkV2l0aEludGVudEJhc2VkTmF2aWdhdGlvbjpcblx0XHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkV2l0aEFjdGlvbjpcblx0XHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YVBvaW50VHlwZTpcblx0XHRcdFx0cHJvcGVydHlWYWx1ZSA9IHRhcmdldE9iamVjdC5WYWx1ZS4kdGFyZ2V0O1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQW5ub3RhdGlvbjpcblx0XHRcdFx0Ly8gaWYgaXQgaXMgYSBEYXRhRmllbGRGb3JBbm5vdGF0aW9uIHBvaW50aW5nIHRvIGEgRGF0YVBvaW50IHdlIGxvb2sgYXQgdGhlIGRhdGFQb2ludCdzIHZhbHVlXG5cdFx0XHRcdGlmICh0YXJnZXRPYmplY3Q/LlRhcmdldD8uJHRhcmdldD8uJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFQb2ludFR5cGUpIHtcblx0XHRcdFx0XHRwcm9wZXJ0eVZhbHVlID0gdGFyZ2V0T2JqZWN0LlRhcmdldC4kdGFyZ2V0Py5WYWx1ZS4kdGFyZ2V0O1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZmFsbHRocm91Z2hcblx0XHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uOlxuXHRcdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JBY3Rpb246XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRwcm9wZXJ0eVZhbHVlID0gdW5kZWZpbmVkO1xuXHRcdH1cblx0fVxuXHRjb25zdCBpc0FuYWx5dGljYWxHcm91cEhlYWRlckV4cGFuZGVkID0gZm9ybWF0T3B0aW9ucz8uaXNBbmFseXRpY3MgPyBVSS5Jc0V4cGFuZGVkIDogY29uc3RhbnQoZmFsc2UpO1xuXHRjb25zdCBpc0FuYWx5dGljYWxMZWFmID0gZm9ybWF0T3B0aW9ucz8uaXNBbmFseXRpY3MgPyBlcXVhbChVSS5Ob2RlTGV2ZWwsIDApIDogY29uc3RhbnQoZmFsc2UpO1xuXG5cdC8vIEEgZGF0YSBmaWVsZCBpcyB2aXNpYmxlIGlmOlxuXHQvLyAtIHRoZSBVSS5IaWRkZW4gZXhwcmVzc2lvbiBpbiB0aGUgb3JpZ2luYWwgYW5ub3RhdGlvbiBkb2VzIG5vdCBldmFsdWF0ZSB0byAndHJ1ZSdcblx0Ly8gLSB0aGUgVUkuSGlkZGVuIGV4cHJlc3Npb24gaW4gdGhlIHRhcmdldCBwcm9wZXJ0eSBkb2VzIG5vdCBldmFsdWF0ZSB0byAndHJ1ZSdcblx0Ly8gLSBpbiBjYXNlIG9mIEFuYWx5dGljcyBpdCdzIG5vdCB2aXNpYmxlIGZvciBhbiBleHBhbmRlZCBHcm91cEhlYWRlclxuXHRyZXR1cm4gY29tcGlsZUJpbmRpbmcoXG5cdFx0YW5kKFxuXHRcdFx0Li4uW1xuXHRcdFx0XHRub3QoZXF1YWwoYW5ub3RhdGlvbkV4cHJlc3Npb24odGFyZ2V0T2JqZWN0Py5hbm5vdGF0aW9ucz8uVUk/LkhpZGRlbiksIHRydWUpKSxcblx0XHRcdFx0aWZFbHNlKFxuXHRcdFx0XHRcdCEhcHJvcGVydHlWYWx1ZSxcblx0XHRcdFx0XHRwcm9wZXJ0eVZhbHVlICYmIG5vdChlcXVhbChhbm5vdGF0aW9uRXhwcmVzc2lvbihwcm9wZXJ0eVZhbHVlLmFubm90YXRpb25zPy5VST8uSGlkZGVuKSwgdHJ1ZSkpLFxuXHRcdFx0XHRcdHRydWVcblx0XHRcdFx0KSxcblx0XHRcdFx0b3Iobm90KGlzQW5hbHl0aWNhbEdyb3VwSGVhZGVyRXhwYW5kZWQpLCBpc0FuYWx5dGljYWxMZWFmKVxuXHRcdFx0XVxuXHRcdClcblx0KTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRJbnB1dERlc2NyaXB0aW9uID0gZnVuY3Rpb24oXG5cdG9Qcm9wZXJ0eVBhdGg6IFByb3BlcnR5T3JQYXRoPFByb3BlcnR5Pixcblx0ZGVzY3JpcHRpb25CaW5kaW5nRXhwcmVzc2lvbjogQmluZGluZ0V4cHJlc3Npb248c3RyaW5nPlxuKTogQmluZGluZ0V4cHJlc3Npb248c3RyaW5nPiB7XG5cdGNvbnN0IG9Qcm9wZXJ0eSA9IChpc1BhdGhFeHByZXNzaW9uKG9Qcm9wZXJ0eVBhdGgpICYmIG9Qcm9wZXJ0eVBhdGguJHRhcmdldCkgfHwgKG9Qcm9wZXJ0eVBhdGggYXMgUHJvcGVydHkpO1xuXHRjb25zdCB1bml0UHJvcGVydHkgPSBnZXRBc3NvY2lhdGVkQ3VycmVuY3lQcm9wZXJ0eShvUHJvcGVydHkpIHx8IGdldEFzc29jaWF0ZWRVbml0UHJvcGVydHkob1Byb3BlcnR5KTtcblx0aWYgKCF1bml0UHJvcGVydHkpIHtcblx0XHRyZXR1cm4gY29tcGlsZUJpbmRpbmcoXCJcIik7XG5cdH1cblx0Y29uc3QgZWRpdGFibGVFeHByZXNzaW9uID0gYW5kKG5vdChpc1JlYWRPbmx5RXhwcmVzc2lvbih1bml0UHJvcGVydHkpKSwgbm90KFByb3BlcnR5SGVscGVyLmlzQ29tcHV0ZWQodW5pdFByb3BlcnR5KSkpO1xuXHRyZXR1cm4gY29tcGlsZUJpbmRpbmcoaWZFbHNlKGVkaXRhYmxlRXhwcmVzc2lvbiwgXCJcIiwgZGVzY3JpcHRpb25CaW5kaW5nRXhwcmVzc2lvbikpO1xufTtcblxuZXhwb3J0IGNvbnN0IFFWVGV4dEJpbmRpbmcgPSBmdW5jdGlvbihcblx0b1Byb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aCxcblx0b1Byb3BlcnR5VmFsdWVEYXRhTW9kZWxPYmplY3RQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoLFxuXHRmaWVsZEZvcm1hdE9wdGlvbnM6IEZpZWxkRm9ybWF0T3B0aW9ucyxcblx0YXNPYmplY3Q6IGJvb2xlYW4gPSBmYWxzZVxuKSB7XG5cdGxldCByZXR1cm5WYWx1ZTogYW55ID0gZ2V0VmFsdWVCaW5kaW5nKG9Qcm9wZXJ0eURhdGFNb2RlbE9iamVjdFBhdGgsIGZpZWxkRm9ybWF0T3B0aW9ucywgYXNPYmplY3QpO1xuXHRpZiAocmV0dXJuVmFsdWUgPT09IFwiXCIpIHtcblx0XHRyZXR1cm5WYWx1ZSA9IGdldFRleHRCaW5kaW5nKG9Qcm9wZXJ0eVZhbHVlRGF0YU1vZGVsT2JqZWN0UGF0aCwgZmllbGRGb3JtYXRPcHRpb25zLCBhc09iamVjdCk7XG5cdH1cblx0cmV0dXJuIHJldHVyblZhbHVlO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFF1aWNrVmlld1R5cGUgPSBmdW5jdGlvbihvUHJvcGVydHlEYXRhTW9kZWxPYmplY3RQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoKTogc3RyaW5nIHtcblx0Y29uc3QgdGFyZ2V0T2JqZWN0ID0gb1Byb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aC50YXJnZXRPYmplY3Q7XG5cdGlmICh0YXJnZXRPYmplY3Q/LiR0YXJnZXQ/LmFubm90YXRpb25zPy5Db21tdW5pY2F0aW9uPy5Jc0VtYWlsQWRkcmVzcykge1xuXHRcdHJldHVybiBcImVtYWlsXCI7XG5cdH1cblx0aWYgKHRhcmdldE9iamVjdD8uJHRhcmdldD8uYW5ub3RhdGlvbnM/LkNvbW11bmljYXRpb24/LklzUGhvbmVOdW1iZXIpIHtcblx0XHRyZXR1cm4gXCJwaG9uZVwiO1xuXHR9XG5cdHJldHVybiBcInRleHRcIjtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRTZW1hbnRpY09iamVjdEV4cHJlc3Npb25Ub1Jlc29sdmUgPSBmdW5jdGlvbihvQW5ub3RhdGlvbnM6IGFueSk6IGFueVtdIHtcblx0Y29uc3QgYVNlbU9iakV4cHJUb1Jlc29sdmU6IGFueVtdID0gW107XG5cdGlmIChvQW5ub3RhdGlvbnMpIHtcblx0XHRjb25zdCBhU2VtT2Jqa2V5cyA9IE9iamVjdC5rZXlzKG9Bbm5vdGF0aW9ucykuZmlsdGVyKGZ1bmN0aW9uKGVsZW1lbnQpIHtcblx0XHRcdHJldHVybiBlbGVtZW50ID09PSBcIlNlbWFudGljT2JqZWN0XCIgfHwgZWxlbWVudC5zdGFydHNXaXRoKFwiU2VtYW50aWNPYmplY3QjXCIpO1xuXHRcdH0pO1xuXHRcdGZvciAobGV0IGlTZW1PYmpDb3VudCA9IDA7IGlTZW1PYmpDb3VudCA8IGFTZW1PYmprZXlzLmxlbmd0aDsgaVNlbU9iakNvdW50KyspIHtcblx0XHRcdGNvbnN0IHNTZW1PYmpFeHByZXNzaW9uID0gY29tcGlsZUJpbmRpbmcoYW5ub3RhdGlvbkV4cHJlc3Npb24ob0Fubm90YXRpb25zW2FTZW1PYmprZXlzW2lTZW1PYmpDb3VudF1dKSk7XG5cdFx0XHRhU2VtT2JqRXhwclRvUmVzb2x2ZS5wdXNoKHtcblx0XHRcdFx0a2V5OiBzU2VtT2JqRXhwcmVzc2lvbj8uaW5kZXhPZihcIntcIikgPT09IC0xID8gc1NlbU9iakV4cHJlc3Npb24gOiBzU2VtT2JqRXhwcmVzc2lvbj8uc3BsaXQoXCJ7XCIpWzFdLnNwbGl0KFwifVwiKVswXSxcblx0XHRcdFx0dmFsdWU6IHNTZW1PYmpFeHByZXNzaW9uXG5cdFx0XHR9KTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIGFTZW1PYmpFeHByVG9SZXNvbHZlO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFNlbWFudGljT2JqZWN0cyA9IGZ1bmN0aW9uKGFTZW1PYmpFeHByVG9SZXNvbHZlOiBhbnlbXSk6IGFueSB7XG5cdGlmIChhU2VtT2JqRXhwclRvUmVzb2x2ZS5sZW5ndGggPiAwKSB7XG5cdFx0bGV0IHNDdXN0b21EYXRhS2V5OiBzdHJpbmcgPSBcIlwiO1xuXHRcdGxldCBzQ3VzdG9tRGF0YVZhbHVlOiBhbnkgPSBcIlwiO1xuXHRcdGNvbnN0IGFTZW1PYmpDdXN0b21EYXRhOiBhbnlbXSA9IFtdO1xuXHRcdGZvciAobGV0IGlTZW1PYmpDb3VudCA9IDA7IGlTZW1PYmpDb3VudCA8IGFTZW1PYmpFeHByVG9SZXNvbHZlLmxlbmd0aDsgaVNlbU9iakNvdW50KyspIHtcblx0XHRcdHNDdXN0b21EYXRhS2V5ID0gYVNlbU9iakV4cHJUb1Jlc29sdmVbaVNlbU9iakNvdW50XS5rZXk7XG5cdFx0XHRzQ3VzdG9tRGF0YVZhbHVlID0gY29tcGlsZUJpbmRpbmcoYW5ub3RhdGlvbkV4cHJlc3Npb24oYVNlbU9iakV4cHJUb1Jlc29sdmVbaVNlbU9iakNvdW50XS52YWx1ZSkpO1xuXHRcdFx0YVNlbU9iakN1c3RvbURhdGEucHVzaCh7XG5cdFx0XHRcdGtleTogc0N1c3RvbURhdGFLZXksXG5cdFx0XHRcdHZhbHVlOiBzQ3VzdG9tRGF0YVZhbHVlXG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0Y29uc3Qgb1NlbWFudGljT2JqZWN0c01vZGVsOiBhbnkgPSBuZXcgSlNPTk1vZGVsKGFTZW1PYmpDdXN0b21EYXRhKTtcblx0XHRvU2VtYW50aWNPYmplY3RzTW9kZWwuJCR2YWx1ZUFzUHJvbWlzZSA9IHRydWU7XG5cdFx0Y29uc3Qgb1NlbU9iakJpbmRpbmdDb250ZXh0OiBhbnkgPSBvU2VtYW50aWNPYmplY3RzTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoXCIvXCIpO1xuXHRcdHJldHVybiBvU2VtT2JqQmluZGluZ0NvbnRleHQ7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIG5ldyBKU09OTW9kZWwoW10pLmNyZWF0ZUJpbmRpbmdDb250ZXh0KFwiL1wiKTtcblx0fVxufTtcbiJdfQ==
@@ -181,13 +181,7 @@ export const getTextBinding = function(
181
181
  return compileBinding(constant(fieldValue));
182
182
  }
183
183
  if (isPathExpression(oPropertyDataModelObjectPath.targetObject) && oPropertyDataModelObjectPath.targetObject.$target) {
184
- const oNavPath = oPropertyDataModelObjectPath.targetEntityType.resolvePath(oPropertyDataModelObjectPath.targetObject.path, true);
185
- oPropertyDataModelObjectPath.targetObject = oNavPath.target;
186
- oNavPath.visitedObjects.forEach((oNavObj: any) => {
187
- if (oNavObj?._type === "NavigationProperty") {
188
- oPropertyDataModelObjectPath.navigationProperties.push(oNavObj);
189
- }
190
- });
184
+ oPropertyDataModelObjectPath = enhanceDataModelPath(oPropertyDataModelObjectPath, oPropertyDataModelObjectPath.targetObject.path);
191
185
  }
192
186
  const oBindingExpression = bindingExpression(getContextRelativeTargetObjectPath(oPropertyDataModelObjectPath));
193
187
  let oTargetBinding;
@@ -23,7 +23,7 @@
23
23
  <macro:DraftIndicator
24
24
  DraftIndicatorType="IconAndText"
25
25
  entitySet="{entitySet>}"
26
- isDraftIndicatorVisible="{= '{parts: [{value: \'' + ${propertyPath>} + '\'}, {path: \'internal>semanticKeyHasDraftIndicator\'} , {path: \'HasDraftEntity\', targetType: \'any\'}, {path: \'IsActiveEntity\', targetType: \'any\'}, {path: \'pageInternal>hideDraftInfo\', targetType: \'any\'}] , formatter: \'.formatters.isDraftIndicatorVisible\'}' }"
26
+ isDraftIndicatorVisible="{='{parts: [{value: \'' + ${propertyPath>} + '\'}, {path: \'internal>semanticKeyHasDraftIndicator\'} , {path: \'HasDraftEntity\'}, {path: \'IsActiveEntity\'}, {path: \'pageInternal>hideDraftInfo\'}] , formatter: \'sap.fe.macros.field.FieldRuntime.isDraftIndicatorVisible\'}'}"
27
27
  ariaLabelledBy="{this>ariaLabelledBy}"
28
28
  />
29
29
  </VBox>
@@ -94,87 +94,28 @@ sap.ui.define(
94
94
  });
95
95
  }
96
96
 
97
- function _redundantDescription(oValueList, oVLParameter, bIsDropDownListe) {
98
- var oMetaModel = oValueList.$model.getMetaModel(),
99
- oPropertyAnnotations,
100
- sDescriptionPath,
101
- sTextArrangement,
102
- bIsTextArrangement,
103
- aRelevantColumn,
104
- sRedundantColumn;
105
- var bFindRedundantColumn =
106
- oMetaModel.getObject(
107
- "/" + oValueList.CollectionPath + "/" + oVLParameter.ValueListProperty + "@com.sap.vocabularies.UI.v1.Hidden"
108
- ) === true
109
- ? false
110
- : true;
111
- var bConsiderImportanceHigh =
112
- bFindRedundantColumn &&
113
- !bIsDropDownListe &&
114
- _hasImportanceHigh(oValueList) &&
115
- oVLParameter["@com.sap.vocabularies.UI.v1.Importance"] &&
116
- oVLParameter["@com.sap.vocabularies.UI.v1.Importance"].$EnumMember === "com.sap.vocabularies.UI.v1.ImportanceType/High"
117
- ? true
118
- : false;
119
- // Check some conditions for hidding redundant columns
120
- if (bFindRedundantColumn) {
121
- aRelevantColumn = oValueList.Parameters.filter(function(oParameter) {
122
- if (
123
- oParameter.ValueListProperty !== oVLParameter.ValueListProperty &&
124
- oVLParameter.$Type !== "com.sap.vocabularies.Common.v1.ValueListParameterInOut"
125
- ) {
126
- oPropertyAnnotations = oMetaModel.getObject(
127
- "/" + oValueList.CollectionPath + "/" + oParameter.ValueListProperty + "@"
128
- );
129
- sDescriptionPath =
130
- oPropertyAnnotations &&
131
- oPropertyAnnotations["@com.sap.vocabularies.Common.v1.Text"] &&
132
- oPropertyAnnotations["@com.sap.vocabularies.Common.v1.Text"].$Path;
133
- }
134
- return sDescriptionPath && sDescriptionPath === oVLParameter.ValueListProperty;
135
- });
136
- aRelevantColumn.forEach(function(oParameter) {
137
- if (oParameter.ValueListProperty !== oVLParameter.ValueListProperty) {
138
- oPropertyAnnotations = oMetaModel.getObject(
139
- "/" + oValueList.CollectionPath + "/" + oParameter.ValueListProperty + "@"
140
- );
141
- sTextArrangement =
142
- oPropertyAnnotations["@com.sap.vocabularies.Common.v1.Text@com.sap.vocabularies.UI.v1.TextArrangement"];
143
- // DropDownListe use default #TextFirst whether no TextArrangement for the Text is annotated
144
- if (
145
- (sTextArrangement &&
146
- (sTextArrangement.$EnumMember === "com.sap.vocabularies.UI.v1.TextArrangementType/TextOnly" ||
147
- sTextArrangement.$EnumMember === "com.sap.vocabularies.UI.v1.TextArrangementType/TextFirst" ||
148
- sTextArrangement.$EnumMember === "com.sap.vocabularies.UI.v1.TextArrangementType/TextLast")) ||
149
- (bIsDropDownListe &&
150
- oPropertyAnnotations["@com.sap.vocabularies.Common.v1.Text"] &&
151
- sTextArrangement === undefined) ||
152
- (sTextArrangement &&
153
- !sTextArrangement.$EnumMember === "com.sap.vocabularies.UI.v1.TextArrangementType/TextSeparate")
154
- ) {
155
- bIsTextArrangement = true;
156
- sRedundantColumn =
157
- oMetaModel.getObject(
158
- "/" +
159
- oValueList.CollectionPath +
160
- "/" +
161
- oParameter.ValueListProperty +
162
- "@com.sap.vocabularies.UI.v1.Hidden"
163
- ) !== true
164
- ? "{_VHUI>/hideColumn}"
165
- : undefined;
166
- }
167
- if (!oParameter["@com.sap.vocabularies.UI.v1.Importance"]) {
168
- if (!bIsTextArrangement) {
169
- sRedundantColumn = undefined;
170
- } else {
171
- sRedundantColumn = bConsiderImportanceHigh ? "{_VHUI>/showColumnInTypeAhead}" : "{_VHUI>/hideColumn}";
172
- }
173
- }
174
- }
175
- });
176
- return sRedundantColumn;
97
+ function _getValueHelpColumnDisplayFormat(oPropertyAnnotations, isValueHelpWithFixedValues) {
98
+ var sDisplayMode = CommonUtils.computeDisplayMode(oPropertyAnnotations, undefined);
99
+ var oTextAnnotation = oPropertyAnnotations && oPropertyAnnotations["@com.sap.vocabularies.Common.v1.Text"];
100
+ var oTextArrangementAnnotation =
101
+ oTextAnnotation && oPropertyAnnotations["@com.sap.vocabularies.Common.v1.Text@com.sap.vocabularies.UI.v1.TextArrangement"];
102
+ if (isValueHelpWithFixedValues) {
103
+ return oTextAnnotation && typeof oTextAnnotation !== "string" && oTextAnnotation.$Path ? sDisplayMode : "Value";
104
+ } else {
105
+ // Only explicit defined TextArrangements in a Value Help with Dialog are considered
106
+ return oTextArrangementAnnotation ? sDisplayMode : "Value";
107
+ }
108
+ }
109
+
110
+ function _redundantDescription(oVLParameter, oColumnInfo) {
111
+ if (
112
+ oVLParameter.ValueListProperty === oColumnInfo.textColumnName &&
113
+ !oColumnInfo.keyColumnHidden &&
114
+ oColumnInfo.keyColumnDisplayFormat !== "Value"
115
+ ) {
116
+ return true;
177
117
  }
118
+ return undefined;
178
119
  }
179
120
 
180
121
  function _getDefaultSortPropertyName(oValueList) {
@@ -318,25 +259,50 @@ sap.ui.define(
318
259
  aSuggestCachedValueHelp = [];
319
260
  },
320
261
 
262
+ getColumnVisibilityInfo: function(oValueList, sPropertyFullPath, bIsDropDownListe) {
263
+ var columnInfo;
264
+ var oMetaModel = oValueList.$model.getMetaModel(),
265
+ oPropertyAnnotations,
266
+ sPropertyName = sPropertyFullPath && sPropertyFullPath.split("/").pop();
267
+
268
+ var oParamWithKey = oValueList.Parameters.find(function(oParameter) {
269
+ return oParameter.LocalDataProperty && oParameter.LocalDataProperty.$PropertyPath === sPropertyName;
270
+ });
271
+ oPropertyAnnotations =
272
+ oParamWithKey &&
273
+ oParamWithKey.ValueListProperty &&
274
+ oMetaModel.getObject("/" + oValueList.CollectionPath + "/" + oParamWithKey.ValueListProperty + "@");
275
+ columnInfo = {
276
+ keyColumnHidden: oPropertyAnnotations && oPropertyAnnotations["@com.sap.vocabularies.UI.v1.Hidden"] ? true : false,
277
+ keyColumnDisplayFormat:
278
+ oPropertyAnnotations && _getValueHelpColumnDisplayFormat(oPropertyAnnotations, bIsDropDownListe),
279
+ textColumnName:
280
+ oPropertyAnnotations &&
281
+ oPropertyAnnotations["@com.sap.vocabularies.Common.v1.Text"] &&
282
+ oPropertyAnnotations["@com.sap.vocabularies.Common.v1.Text"].$Path
283
+ };
284
+ return columnInfo;
285
+ },
286
+
321
287
  getColumnVisibility: function(oValueList, oVLParameter, oSource) {
322
- var bIsDropDownListe = oSource && !!oSource.valueHelpWithFixedValues,
323
- sRedundantColumn = _redundantDescription(oValueList, oVLParameter, bIsDropDownListe);
324
- // Hide redundant column dependent on annotation (Text, TextArrangement, Importance, Hide)
325
- if (sRedundantColumn) {
326
- return sRedundantColumn;
327
- }
328
- if (bIsDropDownListe || !_hasImportanceHigh(oValueList)) {
329
- return undefined;
330
- } else if (
331
- oVLParameter &&
332
- oVLParameter["@com.sap.vocabularies.UI.v1.Importance"] &&
333
- oVLParameter["@com.sap.vocabularies.UI.v1.Importance"].$EnumMember === "com.sap.vocabularies.UI.v1.ImportanceType/High"
334
- ) {
335
- return undefined;
336
- } else {
337
- return "{_VHUI>/showAllColumns}";
288
+ var bIsDropDownList = oSource && !!oSource.valueHelpWithFixedValues,
289
+ oColumnInfo = oSource && oSource.columnInfo,
290
+ bRedundantColumn = _redundantDescription(oVLParameter, oColumnInfo);
291
+ if (bIsDropDownList) {
292
+ return bRedundantColumn ? false : undefined;
293
+ } else if (!bIsDropDownList && !_hasImportanceHigh(oValueList)) {
294
+ return bRedundantColumn ? false : undefined;
295
+ } else if (!bIsDropDownList && _hasImportanceHigh(oValueList)) {
296
+ return oVLParameter &&
297
+ oVLParameter["@com.sap.vocabularies.UI.v1.Importance"] &&
298
+ oVLParameter["@com.sap.vocabularies.UI.v1.Importance"].$EnumMember ===
299
+ "com.sap.vocabularies.UI.v1.ImportanceType/High"
300
+ ? true
301
+ : false;
338
302
  }
303
+ return undefined;
339
304
  },
305
+
340
306
  getDialogTableColumnVisibility: function(oValueList, oVLParameter) {
341
307
  var oMetaModel = oValueList.$model.getMetaModel(),
342
308
  oPropertyAnnotations,
@@ -1035,14 +1001,22 @@ sap.ui.define(
1035
1001
  oFVH.setDescriptionPath(oValueListInfo.descriptionValue);
1036
1002
  oFVH.setFilterFields(_entityIsSearchable(oValueListInfo, oPropertyAnnotations) ? "$search" : "");
1037
1003
  }
1004
+ var bValueHelpWithFixedValues = oFVH
1005
+ .getModel()
1006
+ .getMetaModel()
1007
+ .getObject(propertyPath + "@")["@com.sap.vocabularies.Common.v1.ValueListWithFixedValues"];
1008
+ var oColumnInfo = ValueListHelper.getColumnVisibilityInfo(
1009
+ oValueListInfo.valueListInfo,
1010
+ propertyPath,
1011
+ bValueHelpWithFixedValues
1012
+ );
1038
1013
  var oSourceModel = new JSONModel({
1039
1014
  id: sValueHelpId || oFVH.getId(),
1040
1015
  groupId: oFVH.data("requestGroupId") || undefined,
1041
1016
  bSuggestion: bSuggestion,
1042
- valueHelpWithFixedValues: oFVH
1043
- .getModel()
1044
- .getMetaModel()
1045
- .getObject(propertyPath + "@")["@com.sap.vocabularies.Common.v1.ValueListWithFixedValues"]
1017
+ propertyPath: propertyPath,
1018
+ columnInfo: oColumnInfo,
1019
+ valueHelpWithFixedValues: bValueHelpWithFixedValues
1046
1020
  });
1047
1021
  oTable =
1048
1022
  oTable ||
@@ -1176,7 +1150,6 @@ sap.ui.define(
1176
1150
  oFilterBar,
1177
1151
  oSuggestTable,
1178
1152
  bExists,
1179
- bIsDropDownList = oFVH.getProperty("noDialog"),
1180
1153
  oVHUIModel,
1181
1154
  sValueHelpId;
1182
1155
  if (bSuggestion) {
@@ -1203,9 +1176,6 @@ sap.ui.define(
1203
1176
  );
1204
1177
  }
1205
1178
  oVHUIModel.setProperty("/isSuggestion", bSuggestion);
1206
- oVHUIModel.setProperty("/showAllColumns", bIsDropDownList ? true : !bSuggestion);
1207
- oVHUIModel.setProperty("/hideColumn", false);
1208
- oVHUIModel.setProperty("/showColumnInTypeAhead", bSuggestion);
1209
1179
  oVHUIModel.setProperty("/minScreenWidth", !bSuggestion ? "418px" : undefined);
1210
1180
  sValueHelpId = oFVH.getModel("_VHUI").getProperty("/valueHelpId");
1211
1181
  if (oDialogTable) {
@@ -60,7 +60,7 @@ sap.ui.define(
60
60
  interfaces: [],
61
61
  controls: [],
62
62
  elements: [],
63
- version: "1.99.0",
63
+ version: "1.99.3",
64
64
  noLibraryCSS: true
65
65
  });
66
66