@sapui5/sap.fe.base 1.132.0 → 1.134.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -2,7 +2,7 @@
2
2
  * SAP UI development toolkit for HTML5 (SAPUI5)
3
3
  * (c) Copyright 2009-2024 SAP SE. All rights reserved
4
4
  */
5
- sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/m/Text", "sap/ui/base/DataType", "sap/ui/base/ManagedObject", "sap/ui/core/mvc/EventHandlerResolver"], function (Log, BindingToolkit, Text, DataType, ManagedObject, EventHandlerResolver) {
5
+ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/m/Text", "sap/ui/base/BindingParser", "sap/ui/base/DataType", "sap/ui/base/ManagedObject", "sap/ui/core/mvc/EventHandlerResolver"], function (Log, BindingToolkit, Text, BindingParser, DataType, ManagedObject, EventHandlerResolver) {
6
6
  "use strict";
7
7
 
8
8
  var bindingParser = ManagedObject.bindingParser;
@@ -52,9 +52,17 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/m/Text", "sap/
52
52
  if (aggregationChildren[aggregationName] !== undefined) {
53
53
  if (mSettings.hasOwnProperty(aggregationName)) {
54
54
  if (typeof mSettings[aggregationName] === "string") {
55
- mSettings[aggregationName] = {
56
- path: mSettings[aggregationName]
57
- };
55
+ const resultingParse = BindingParser.complexParser(mSettings[aggregationName]);
56
+ if (resultingParse) {
57
+ mSettings[aggregationName] = {
58
+ path: resultingParse.path,
59
+ model: resultingParse.model
60
+ };
61
+ } else {
62
+ mSettings[aggregationName] = {
63
+ path: mSettings[aggregationName]
64
+ };
65
+ }
58
66
  }
59
67
  if (typeof aggregationChildren[aggregationName] === "function") {
60
68
  mSettings[aggregationName].factory = aggregationChildren[aggregationName];
@@ -68,6 +76,78 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/m/Text", "sap/
68
76
  });
69
77
  }
70
78
 
79
+ /**
80
+ * Processes a binding toolkit expression property for function processProperties
81
+ *
82
+ * If the property is a constant, it compiles it as a constant. If the property is an aggregation,
83
+ * it compiles the expression as an object. Otherwise, it compiles the expression normally.
84
+ * @param settings The settings of the control
85
+ * @param settingsKey The key of the setting being processed
86
+ * @param bindingToolkitExpression The binding toolkit expression to process
87
+ * @param allProperties All properties of the control
88
+ */
89
+ function processBindingToolkitExpression(settings, settingsKey, bindingToolkitExpression, allProperties) {
90
+ if (isConstant(bindingToolkitExpression)) {
91
+ settings[settingsKey] = compileConstant(bindingToolkitExpression, false, true, true);
92
+ } else if (!Object.hasOwnProperty.call(allProperties, settingsKey)) {
93
+ // Aggregation case - we need to compile the expression but as an object
94
+ if (isPathInModelExpression(bindingToolkitExpression)) {
95
+ settings[settingsKey] = {
96
+ path: bindingToolkitExpression.path,
97
+ model: bindingToolkitExpression.modelName
98
+ };
99
+ }
100
+ } else {
101
+ settings[settingsKey] = compileExpression(bindingToolkitExpression);
102
+ }
103
+ }
104
+
105
+ /**
106
+ * Processes a string property for function processProperties
107
+ *
108
+ * If the property is not a binding expression and does not match the expected format,
109
+ * it parses the value to provide the expected format. If the property is an event handler,
110
+ * it logs an error.
111
+ * @param settings The settings of the control
112
+ * @param settingsKey The key of the setting being processed
113
+ * @param value The string value to process
114
+ * @param allEvents All events of the control
115
+ * @param allProperties All properties of the control
116
+ * @param metadata Metadata of the control
117
+ */
118
+ function processStringProperty(settings, settingsKey, value, allEvents, allProperties, metadata) {
119
+ if (!value.startsWith("{")) {
120
+ if (Object.hasOwnProperty.call(allEvents, settingsKey)) {
121
+ Log.error(`Event handlers cannot be set as string in JSX, ${settingsKey} in ${metadata.getName()}`);
122
+ }
123
+ const propertyType = allProperties[settingsKey]?.getType?.();
124
+ if (propertyType && propertyType instanceof DataType && ["boolean", "int", "float"].includes(propertyType.getName())) {
125
+ settings[settingsKey] = propertyType.parseValue(value);
126
+ }
127
+ } else {
128
+ settings[settingsKey] = value;
129
+ }
130
+ }
131
+
132
+ /**
133
+ * Processes an object property for function processProperties.
134
+ *
135
+ * If the property is a promise, it adds it to the late properties map. If the property is a binding info holder,
136
+ * it sets the binding info to the settings.
137
+ * @param settings The settings of the control
138
+ * @param settingsKey The key of the setting being processed
139
+ * @param value The object value to process
140
+ * @param lateProperties A map of the control's late properties
141
+ */
142
+ function processObjectProperty(settings, settingsKey, value, lateProperties) {
143
+ if (value.then) {
144
+ lateProperties[settingsKey] = value;
145
+ delete settings[settingsKey];
146
+ } else if (value.__bindingInfo) {
147
+ settings[settingsKey] = value.__bindingInfo;
148
+ }
149
+ }
150
+
71
151
  /**
72
152
  * Processes the properties.
73
153
  *
@@ -86,34 +166,13 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/m/Text", "sap/
86
166
  for (settingsKey in settings) {
87
167
  const value = settings[settingsKey];
88
168
  if (isBindingToolkitExpression(value)) {
89
- const bindingToolkitExpression = value;
90
- if (isConstant(bindingToolkitExpression)) {
91
- settings[settingsKey] = compileConstant(bindingToolkitExpression, false, true, true);
92
- } else if (!Object.hasOwnProperty.call(allProperties, settingsKey)) {
93
- // Aggregation case - we need to compile the expression but as an object
94
- if (isPathInModelExpression(bindingToolkitExpression)) {
95
- settings[settingsKey] = {
96
- path: bindingToolkitExpression.path,
97
- model: bindingToolkitExpression.modelName
98
- };
99
- }
100
- } else {
101
- settings[settingsKey] = compileExpression(bindingToolkitExpression);
102
- }
103
- } else if (value !== null && typeof value === "object" && value.then) {
104
- lateProperties[settingsKey] = value;
105
- delete settings[settingsKey];
106
- } else if (typeof value === "string" && !value.startsWith("{")) {
107
- const propertyType = allProperties[settingsKey]?.getType?.();
108
- if (propertyType && propertyType instanceof DataType && ["boolean", "int", "float"].includes(propertyType.getName())) {
109
- settings[settingsKey] = propertyType.parseValue(value);
110
- }
111
- } else if (typeof value === "object" && value.__bindingInfo) {
112
- settings[settingsKey] = value.__bindingInfo;
169
+ processBindingToolkitExpression(settings, settingsKey, value, allProperties);
170
+ } else if (value !== null && typeof value === "object") {
171
+ processObjectProperty(settings, settingsKey, value, lateProperties);
172
+ } else if (typeof value === "string") {
173
+ processStringProperty(settings, settingsKey, value, allEvents, allProperties, metadata);
113
174
  } else if (value === undefined) {
114
- if (Object.hasOwnProperty.call(allEvents, settingsKey)) {
115
- delete settings[settingsKey];
116
- }
175
+ delete settings[settingsKey];
117
176
  }
118
177
  }
119
178
  return lateProperties;
@@ -142,9 +201,6 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/m/Text", "sap/
142
201
  let targetControl;
143
202
  if (ControlType?.isFragment) {
144
203
  targetControl = settings.children;
145
- } else if (ControlType?.isRuntime) {
146
- const runtimeBuildingBlock = new ControlType(settings);
147
- targetControl = runtimeBuildingBlock.getContent?.(jsxContext.view, jsxContext.appComponent);
148
204
  } else if (isAControl(ControlType)) {
149
205
  const metadata = ControlType.getMetadata();
150
206
  if (key !== undefined) {
@@ -189,10 +245,12 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/m/Text", "sap/
189
245
  if (bindingInfo) {
190
246
  targetControlInstance.bindElement({
191
247
  model: bindingInfo.model ?? undefined,
192
- path: bindingInfo.path
248
+ path: bindingInfo.path,
249
+ parameters: bindingInfo.parameters ?? undefined
193
250
  });
251
+ } else {
252
+ targetControlInstance.bindElement(bindingDef);
194
253
  }
195
- targetControlInstance.bindElement(bindingDef);
196
254
  } else {
197
255
  // We consider it's an object
198
256
  Object.keys(bindingDef).forEach(bindingDefKey => {
@@ -223,4 +281,4 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/m/Text", "sap/
223
281
  };
224
282
  return jsxControl;
225
283
  }, false);
226
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJGTF9ERUxFR0FURSIsIkNPUkVfUkVRVUlSRSIsIkRUX0RFU0lHTlRJTUUiLCJhZGRDaGlsZEFnZ3JlZ2F0aW9uIiwiYWdncmVnYXRpb25DaGlsZHJlbiIsImFnZ3JlZ2F0aW9uTmFtZSIsImNoaWxkIiwidW5kZWZpbmVkIiwiaXNDaGlsZEFuRWxlbWVudCIsInB1c2giLCJBcnJheSIsImlzQXJyYXkiLCJmb3JFYWNoIiwic3ViQ2hpbGQiLCJPYmplY3QiLCJrZXlzIiwiY2hpbGRLZXkiLCJjaGlsZHJlbiIsImlzQSIsImlzQUNvbnRyb2wiLCJnZXRNZXRhZGF0YSIsInByb2Nlc3NBZ2dyZWdhdGlvbnMiLCJtZXRhZGF0YSIsIm1TZXR0aW5ncyIsIm1ldGFkYXRhQWdncmVnYXRpb25zIiwiZ2V0QWxsQWdncmVnYXRpb25zIiwiZGVmYXVsdEFnZ3JlZ2F0aW9uTmFtZSIsImdldERlZmF1bHRBZ2dyZWdhdGlvbk5hbWUiLCJoYXNPd25Qcm9wZXJ0eSIsInBhdGgiLCJmYWN0b3J5IiwidGVtcGxhdGUiLCJwcm9jZXNzUHJvcGVydGllcyIsInNldHRpbmdzIiwic2V0dGluZ3NLZXkiLCJsYXRlUHJvcGVydGllcyIsImFsbEV2ZW50cyIsImdldEFsbEV2ZW50cyIsImFsbFByb3BlcnRpZXMiLCJnZXRBbGxQcm9wZXJ0aWVzIiwidmFsdWUiLCJpc0JpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiIsImJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiIsImlzQ29uc3RhbnQiLCJjb21waWxlQ29uc3RhbnQiLCJjYWxsIiwiaXNQYXRoSW5Nb2RlbEV4cHJlc3Npb24iLCJtb2RlbCIsIm1vZGVsTmFtZSIsImNvbXBpbGVFeHByZXNzaW9uIiwidGhlbiIsInN0YXJ0c1dpdGgiLCJwcm9wZXJ0eVR5cGUiLCJnZXRUeXBlIiwiRGF0YVR5cGUiLCJpbmNsdWRlcyIsImdldE5hbWUiLCJwYXJzZVZhbHVlIiwiX19iaW5kaW5nSW5mbyIsInByb2Nlc3NDb21tYW5kIiwiY29tbWFuZFByb3BlcnR5IiwiY29tbWFuZCIsImV2ZW50TmFtZSIsInNwbGl0IiwiZXZlbnQiLCJuYW1lIiwiRXZlbnRIYW5kbGVyUmVzb2x2ZXIiLCJyZXNvbHZlRXZlbnRIYW5kbGVyIiwianN4Q29udHJvbCIsIkNvbnRyb2xUeXBlIiwia2V5IiwianN4Q29udGV4dCIsInRhcmdldENvbnRyb2wiLCJpc0ZyYWdtZW50IiwiaXNSdW50aW1lIiwicnVudGltZUJ1aWxkaW5nQmxvY2siLCJnZXRDb250ZW50IiwidmlldyIsImFwcENvbXBvbmVudCIsImNsYXNzRGVmIiwiY2xhc3MiLCJyZWZEZWYiLCJyZWYiLCJiaW5kaW5nRGVmIiwiYmluZGluZyIsImZsRGVsZWdhdGUiLCJkdERlc2lnbnRpbWUiLCJ0YXJnZXRDb250cm9sSW5zdGFuY2UiLCJhZGRTdHlsZUNsYXNzIiwic2V0Q3VycmVudCIsImN1c3RvbVNldHRpbmdzIiwiZGF0YSIsImRlbGVnYXRlIiwiZGVzaWdudGltZSIsImxlbmd0aCIsImJpbmRpbmdJbmZvIiwiYmluZGluZ1BhcnNlciIsImJpbmRFbGVtZW50IiwiYmluZGluZ0RlZktleSIsImxhdGVQcm9wZXJ0aWVzS2V5Iiwic2V0UHJvcGVydHkiLCJjYXRjaCIsImVycm9yIiwiTG9nIiwiY29udHJvbFR5cGVGbiIsIlRleHQiLCJ0ZXh0Il0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJqc3gtY29udHJvbC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCB0eXBlIHsgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIH0gZnJvbSBcInNhcC9mZS9iYXNlL0JpbmRpbmdUb29sa2l0XCI7XG5pbXBvcnQge1xuXHRjb21waWxlQ29uc3RhbnQsXG5cdGNvbXBpbGVFeHByZXNzaW9uLFxuXHRpc0JpbmRpbmdUb29sa2l0RXhwcmVzc2lvbixcblx0aXNDb25zdGFudCxcblx0aXNQYXRoSW5Nb2RlbEV4cHJlc3Npb25cbn0gZnJvbSBcInNhcC9mZS9iYXNlL0JpbmRpbmdUb29sa2l0XCI7XG5pbXBvcnQgdHlwZSB7IEJpbmRpbmdJbmZvSG9sZGVyLCBOb25BYnN0cmFjdENsYXNzIH0gZnJvbSBcInNhcC9mZS9iYXNlL0NsYXNzU3VwcG9ydFwiO1xuaW1wb3J0IHR5cGUgeyBDb250cm9sUHJvcGVydGllcywgSlNYQ29udGV4dCwgTm9uQ29udHJvbFByb3BlcnRpZXMsIFJlZiB9IGZyb20gXCJzYXAvZmUvYmFzZS9qc3gtcnVudGltZS9qc3hcIjtcbmltcG9ydCB0eXBlIEJ1aWxkaW5nQmxvY2tUZW1wbGF0aW5nQmFzZSBmcm9tIFwic2FwL2ZlL2NvcmUvYnVpbGRpbmdCbG9ja3MvdGVtcGxhdGluZy9CdWlsZGluZ0Jsb2NrVGVtcGxhdGluZ0Jhc2VcIjtcbmltcG9ydCB0eXBlIFJ1bnRpbWVCdWlsZGluZ0Jsb2NrIGZyb20gXCJzYXAvZmUvY29yZS9idWlsZGluZ0Jsb2Nrcy90ZW1wbGF0aW5nL1J1bnRpbWVCdWlsZGluZ0Jsb2NrXCI7XG5pbXBvcnQgVGV4dCBmcm9tIFwic2FwL20vVGV4dFwiO1xuaW1wb3J0IERhdGFUeXBlIGZyb20gXCJzYXAvdWkvYmFzZS9EYXRhVHlwZVwiO1xuaW1wb3J0IHsgYmluZGluZ1BhcnNlciB9IGZyb20gXCJzYXAvdWkvYmFzZS9NYW5hZ2VkT2JqZWN0XCI7XG5pbXBvcnQgdHlwZSBNYW5hZ2VkT2JqZWN0TWV0YWRhdGEgZnJvbSBcInNhcC91aS9iYXNlL01hbmFnZWRPYmplY3RNZXRhZGF0YVwiO1xuaW1wb3J0IHR5cGUgQ29udHJvbCBmcm9tIFwic2FwL3VpL2NvcmUvQ29udHJvbFwiO1xuaW1wb3J0IHR5cGUgeyAkQ29udHJvbFNldHRpbmdzIH0gZnJvbSBcInNhcC91aS9jb3JlL0NvbnRyb2xcIjtcbmltcG9ydCB0eXBlIHsgZGVmYXVsdCBhcyBFbGVtZW50LCBkZWZhdWx0IGFzIFVJNUVsZW1lbnQgfSBmcm9tIFwic2FwL3VpL2NvcmUvRWxlbWVudFwiO1xuaW1wb3J0IEV2ZW50SGFuZGxlclJlc29sdmVyIGZyb20gXCJzYXAvdWkvY29yZS9tdmMvRXZlbnRIYW5kbGVyUmVzb2x2ZXJcIjtcblxuY29uc3QgRkxfREVMRUdBVEUgPSBcImZsOmRlbGVnYXRlXCI7XG5jb25zdCBDT1JFX1JFUVVJUkUgPSBcImNvcmU6cmVxdWlyZVwiO1xuY29uc3QgRFRfREVTSUdOVElNRSA9IFwiZHQ6ZGVzaWdudGltZVwiO1xuY29uc3QgYWRkQ2hpbGRBZ2dyZWdhdGlvbiA9IGZ1bmN0aW9uIChcblx0YWdncmVnYXRpb25DaGlsZHJlbjogUmVjb3JkPHN0cmluZywgKHN0cmluZyB8IFVJNUVsZW1lbnQpW10+LFxuXHRhZ2dyZWdhdGlvbk5hbWU6IHN0cmluZyxcblx0Y2hpbGQ/OiBzdHJpbmcgfCBVSTVFbGVtZW50IHwgVUk1RWxlbWVudFtdXG4pOiB2b2lkIHtcblx0aWYgKGNoaWxkID09PSBudWxsIHx8IGNoaWxkID09PSB1bmRlZmluZWQgfHwgdHlwZW9mIGNoaWxkID09PSBcInN0cmluZ1wiKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cdGlmICghYWdncmVnYXRpb25DaGlsZHJlblthZ2dyZWdhdGlvbk5hbWVdKSB7XG5cdFx0YWdncmVnYXRpb25DaGlsZHJlblthZ2dyZWdhdGlvbk5hbWVdID0gW107XG5cdH1cblx0aWYgKGlzQ2hpbGRBbkVsZW1lbnQoY2hpbGQpKSB7XG5cdFx0YWdncmVnYXRpb25DaGlsZHJlblthZ2dyZWdhdGlvbk5hbWVdLnB1c2goY2hpbGQpO1xuXHR9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoY2hpbGQpKSB7XG5cdFx0Y2hpbGQuZm9yRWFjaCgoc3ViQ2hpbGQpID0+IHtcblx0XHRcdGFkZENoaWxkQWdncmVnYXRpb24oYWdncmVnYXRpb25DaGlsZHJlbiwgYWdncmVnYXRpb25OYW1lLCBzdWJDaGlsZCk7XG5cdFx0fSk7XG5cdH0gZWxzZSBpZiAodHlwZW9mIGNoaWxkID09PSBcImZ1bmN0aW9uXCIpIHtcblx0XHRhZ2dyZWdhdGlvbkNoaWxkcmVuW2FnZ3JlZ2F0aW9uTmFtZV0gPSBjaGlsZDtcblx0fSBlbHNlIHtcblx0XHRPYmplY3Qua2V5cyhjaGlsZCkuZm9yRWFjaCgoY2hpbGRLZXkpID0+IHtcblx0XHRcdGFkZENoaWxkQWdncmVnYXRpb24oYWdncmVnYXRpb25DaGlsZHJlbiwgY2hpbGRLZXksIGNoaWxkW2NoaWxkS2V5XSk7XG5cdFx0fSk7XG5cdH1cbn07XG5jb25zdCBpc0NoaWxkQW5FbGVtZW50ID0gZnVuY3Rpb24gKGNoaWxkcmVuPzogdW5rbm93bik6IGNoaWxkcmVuIGlzIEVsZW1lbnQge1xuXHRyZXR1cm4gKGNoaWxkcmVuIGFzIEVsZW1lbnQpPy5pc0E/LihcInNhcC51aS5jb3JlLkVsZW1lbnRcIik7XG59O1xuY29uc3QgaXNBQ29udHJvbCA9IGZ1bmN0aW9uIChjaGlsZHJlbj86IHR5cGVvZiBDb250cm9sIHwgRnVuY3Rpb24pOiBjaGlsZHJlbiBpcyBOb25BYnN0cmFjdENsYXNzPENvbnRyb2w+IHtcblx0cmV0dXJuICEhKGNoaWxkcmVuIGFzIHR5cGVvZiBDb250cm9sKT8uZ2V0TWV0YWRhdGE7XG59O1xuXG5mdW5jdGlvbiBwcm9jZXNzQWdncmVnYXRpb25zKG1ldGFkYXRhOiBNYW5hZ2VkT2JqZWN0TWV0YWRhdGEsIG1TZXR0aW5nczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiB2b2lkIHtcblx0Y29uc3QgbWV0YWRhdGFBZ2dyZWdhdGlvbnMgPSBtZXRhZGF0YS5nZXRBbGxBZ2dyZWdhdGlvbnMoKTtcblx0Y29uc3QgZGVmYXVsdEFnZ3JlZ2F0aW9uTmFtZSA9IG1ldGFkYXRhLmdldERlZmF1bHRBZ2dyZWdhdGlvbk5hbWUoKTtcblx0Y29uc3QgYWdncmVnYXRpb25DaGlsZHJlbjogUmVjb3JkPHN0cmluZywgKHN0cmluZyB8IFVJNUVsZW1lbnQpW10+ID0ge307XG5cdGFkZENoaWxkQWdncmVnYXRpb24oYWdncmVnYXRpb25DaGlsZHJlbiwgZGVmYXVsdEFnZ3JlZ2F0aW9uTmFtZSwgbVNldHRpbmdzLmNoaWxkcmVuIGFzIHN0cmluZyB8IFVJNUVsZW1lbnQgfCBVSTVFbGVtZW50W10pO1xuXHRkZWxldGUgbVNldHRpbmdzLmNoaWxkcmVuO1xuXHQvLyBmaW5kIG91dCB3aGljaCBhZ2dyZWdhdGlvbiBhcmUgYm91bmQgKGJvdGggaW4gY2hpbGRyZW4gYW5kIGRpcmVjdGx5IHVuZGVyIGl0KVxuXHRPYmplY3Qua2V5cyhtZXRhZGF0YUFnZ3JlZ2F0aW9ucykuZm9yRWFjaCgoYWdncmVnYXRpb25OYW1lKSA9PiB7XG5cdFx0aWYgKGFnZ3JlZ2F0aW9uQ2hpbGRyZW5bYWdncmVnYXRpb25OYW1lXSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRpZiAobVNldHRpbmdzLmhhc093blByb3BlcnR5KGFnZ3JlZ2F0aW9uTmFtZSkpIHtcblx0XHRcdFx0aWYgKHR5cGVvZiBtU2V0dGluZ3NbYWdncmVnYXRpb25OYW1lXSA9PT0gXCJzdHJpbmdcIikge1xuXHRcdFx0XHRcdG1TZXR0aW5nc1thZ2dyZWdhdGlvbk5hbWVdID0ge1xuXHRcdFx0XHRcdFx0cGF0aDogbVNldHRpbmdzW2FnZ3JlZ2F0aW9uTmFtZV1cblx0XHRcdFx0XHR9O1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmICh0eXBlb2YgYWdncmVnYXRpb25DaGlsZHJlblthZ2dyZWdhdGlvbk5hbWVdID09PSBcImZ1bmN0aW9uXCIpIHtcblx0XHRcdFx0XHQobVNldHRpbmdzW2FnZ3JlZ2F0aW9uTmFtZV0gYXMgeyBmYWN0b3J5OiBGdW5jdGlvbiB9KS5mYWN0b3J5ID0gYWdncmVnYXRpb25DaGlsZHJlbltcblx0XHRcdFx0XHRcdGFnZ3JlZ2F0aW9uTmFtZVxuXHRcdFx0XHRcdF0gYXMgdW5rbm93biBhcyBGdW5jdGlvbjtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHQobVNldHRpbmdzW2FnZ3JlZ2F0aW9uTmFtZV0gYXMgeyB0ZW1wbGF0ZTogc3RyaW5nIHwgVUk1RWxlbWVudCB9KS50ZW1wbGF0ZSA9IGFnZ3JlZ2F0aW9uQ2hpbGRyZW5bYWdncmVnYXRpb25OYW1lXVswXTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0bVNldHRpbmdzW2FnZ3JlZ2F0aW9uTmFtZV0gPSBhZ2dyZWdhdGlvbkNoaWxkcmVuW2FnZ3JlZ2F0aW9uTmFtZV07XG5cdFx0XHR9XG5cdFx0fVxuXHR9KTtcbn1cblxuLyoqXG4gKiBQcm9jZXNzZXMgdGhlIHByb3BlcnRpZXMuXG4gKlxuICogSWYgdGhlIHByb3BlcnR5IGlzIGEgYmluZGluZ1Rvb2xraXQgZXhwcmVzc2lvbiB3ZSBuZWVkIHRvIGNvbXBpbGUgaXQuXG4gKiBFbHNlIGlmIHRoZSBwcm9wZXJ0eSBpcyBzZXQgYXMgc3RyaW5nIChjb21waWxlZCBiaW5kaW5nIGV4cHJlc3Npb24gcmV0dXJucyBzdHJpbmcgYnkgZGVmYXVsdCBldmVuIGlmIGl0J3MgYSBib29sZWFuLCBpbnQsIGV0Yy4pIGFuZCBpdCBkb2Vzbid0IG1hdGNoIHdpdGggZXhwZWN0ZWRcbiAqIGZvcm1hdCB0aGUgdmFsdWUgaXMgcGFyc2VkIHRvIHByb3ZpZGUgZXhwZWN0ZWQgZm9ybWF0LlxuICogQHBhcmFtIG1ldGFkYXRhIE1ldGFkYXRhIG9mIHRoZSBjb250cm9sXG4gKiBAcGFyYW0gc2V0dGluZ3MgU2V0dGluZ3Mgb2YgdGhlIGNvbnRyb2xcbiAqIEByZXR1cm5zIEEgbWFwIG9mIGxhdGUgcHJvcGVydGllcyB0aGF0IG5lZWQgdG8gYmUgYXdhaXRlZCBhZnRlciB0aGUgY29udHJvbCBpcyBjcmVhdGVkXG4gKi9cbmZ1bmN0aW9uIHByb2Nlc3NQcm9wZXJ0aWVzKG1ldGFkYXRhOiBNYW5hZ2VkT2JqZWN0TWV0YWRhdGEsIHNldHRpbmdzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IFJlY29yZDxzdHJpbmcsIFByb21pc2U8dW5rbm93bj4+IHtcblx0bGV0IHNldHRpbmdzS2V5OiBrZXlvZiB0eXBlb2Ygc2V0dGluZ3M7XG5cdGNvbnN0IGxhdGVQcm9wZXJ0aWVzOiBSZWNvcmQ8c3RyaW5nLCBQcm9taXNlPHVua25vd24+PiA9IHt9O1xuXHRjb25zdCBhbGxFdmVudHMgPSBtZXRhZGF0YS5nZXRBbGxFdmVudHMoKTtcblx0Y29uc3QgYWxsUHJvcGVydGllcyA9IG1ldGFkYXRhLmdldEFsbFByb3BlcnRpZXMoKTtcblx0Zm9yIChzZXR0aW5nc0tleSBpbiBzZXR0aW5ncykge1xuXHRcdGNvbnN0IHZhbHVlID0gc2V0dGluZ3Nbc2V0dGluZ3NLZXldO1xuXHRcdGlmIChpc0JpbmRpbmdUb29sa2l0RXhwcmVzc2lvbih2YWx1ZSkpIHtcblx0XHRcdGNvbnN0IGJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHVua25vd24+ID0gdmFsdWU7XG5cdFx0XHRpZiAoaXNDb25zdGFudChiaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24pKSB7XG5cdFx0XHRcdHNldHRpbmdzW3NldHRpbmdzS2V5XSA9IGNvbXBpbGVDb25zdGFudChiaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24sIGZhbHNlLCB0cnVlLCB0cnVlKTtcblx0XHRcdH0gZWxzZSBpZiAoIU9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKGFsbFByb3BlcnRpZXMsIHNldHRpbmdzS2V5KSkge1xuXHRcdFx0XHQvLyBBZ2dyZWdhdGlvbiBjYXNlIC0gd2UgbmVlZCB0byBjb21waWxlIHRoZSBleHByZXNzaW9uIGJ1dCBhcyBhbiBvYmplY3Rcblx0XHRcdFx0aWYgKGlzUGF0aEluTW9kZWxFeHByZXNzaW9uKGJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbikpIHtcblx0XHRcdFx0XHRzZXR0aW5nc1tzZXR0aW5nc0tleV0gPSB7IHBhdGg6IGJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbi5wYXRoLCBtb2RlbDogYmluZGluZ1Rvb2xraXRFeHByZXNzaW9uLm1vZGVsTmFtZSB9O1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRzZXR0aW5nc1tzZXR0aW5nc0tleV0gPSBjb21waWxlRXhwcmVzc2lvbihiaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24pO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSBpZiAodmFsdWUgIT09IG51bGwgJiYgdHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiICYmICh2YWx1ZSBhcyBQcm9taXNlPHVua25vd24+KS50aGVuKSB7XG5cdFx0XHRsYXRlUHJvcGVydGllc1tzZXR0aW5nc0tleV0gPSB2YWx1ZSBhcyBQcm9taXNlPHVua25vd24+O1xuXHRcdFx0ZGVsZXRlIHNldHRpbmdzW3NldHRpbmdzS2V5XTtcblx0XHR9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIiAmJiAhdmFsdWUuc3RhcnRzV2l0aChcIntcIikpIHtcblx0XHRcdGNvbnN0IHByb3BlcnR5VHlwZSA9IChhbGxQcm9wZXJ0aWVzW3NldHRpbmdzS2V5XSBhcyB7IGdldFR5cGU/OiBGdW5jdGlvbiB9KT8uZ2V0VHlwZT8uKCk7XG5cdFx0XHRpZiAocHJvcGVydHlUeXBlICYmIHByb3BlcnR5VHlwZSBpbnN0YW5jZW9mIERhdGFUeXBlICYmIFtcImJvb2xlYW5cIiwgXCJpbnRcIiwgXCJmbG9hdFwiXS5pbmNsdWRlcyhwcm9wZXJ0eVR5cGUuZ2V0TmFtZSgpKSkge1xuXHRcdFx0XHRzZXR0aW5nc1tzZXR0aW5nc0tleV0gPSBwcm9wZXJ0eVR5cGUucGFyc2VWYWx1ZSh2YWx1ZSk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIGlmICh0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIgJiYgKHZhbHVlIGFzIEJpbmRpbmdJbmZvSG9sZGVyPHVua25vd24+KS5fX2JpbmRpbmdJbmZvKSB7XG5cdFx0XHRzZXR0aW5nc1tzZXR0aW5nc0tleV0gPSAodmFsdWUgYXMgQmluZGluZ0luZm9Ib2xkZXI8dW5rbm93bj4pLl9fYmluZGluZ0luZm87XG5cdFx0fSBlbHNlIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRpZiAoT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwoYWxsRXZlbnRzLCBzZXR0aW5nc0tleSkpIHtcblx0XHRcdFx0ZGVsZXRlIHNldHRpbmdzW3NldHRpbmdzS2V5XTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblx0cmV0dXJuIGxhdGVQcm9wZXJ0aWVzO1xufVxuXG4vKipcbiAqIFByb2Nlc3NlcyB0aGUgY29tbWFuZC5cbiAqXG4gKiBSZXNvbHZlcyB0aGUgY29tbWFuZCBzZXQgb24gdGhlIGNvbnRyb2wgdmlhIHRoZSBpbnRyaW5zaWMgY2xhc3MgYXR0cmlidXRlIFwianN4OmNvbW1hbmRcIi5cbiAqIElmIG5vIGNvbW1hbmQgaGFzIGJlZW4gc2V0IG9yIHRoZSB0YXJnZXRlZCBldmVudCBkb2Vzbid0IGV4aXN0LCBubyBjb25maWd1cmF0aW9uIGlzIHNldC5cbiAqIEBwYXJhbSBtZXRhZGF0YSBNZXRhZGF0YSBvZiB0aGUgY29udHJvbFxuICogQHBhcmFtIHNldHRpbmdzIFNldHRpbmdzIG9mIHRoZSBjb250cm9sXG4gKi9cbmZ1bmN0aW9uIHByb2Nlc3NDb21tYW5kKG1ldGFkYXRhOiBNYW5hZ2VkT2JqZWN0TWV0YWRhdGEsIHNldHRpbmdzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IHZvaWQge1xuXHRjb25zdCBjb21tYW5kUHJvcGVydHkgPSBzZXR0aW5nc1tcImpzeDpjb21tYW5kXCJdO1xuXHRpZiAoY29tbWFuZFByb3BlcnR5KSB7XG5cdFx0Y29uc3QgW2NvbW1hbmQsIGV2ZW50TmFtZV0gPSAoY29tbWFuZFByb3BlcnR5IGFzIHN0cmluZykuc3BsaXQoXCJ8XCIpO1xuXHRcdGNvbnN0IGV2ZW50ID0gbWV0YWRhdGEuZ2V0QWxsRXZlbnRzKClbZXZlbnROYW1lXTtcblx0XHRpZiAoZXZlbnQgJiYgY29tbWFuZC5zdGFydHNXaXRoKFwiY21kOlwiKSkge1xuXHRcdFx0c2V0dGluZ3NbZXZlbnQubmFtZV0gPSBFdmVudEhhbmRsZXJSZXNvbHZlci5yZXNvbHZlRXZlbnRIYW5kbGVyKGNvbW1hbmQpO1xuXHRcdH1cblx0fVxuXHRkZWxldGUgc2V0dGluZ3NbXCJqc3g6Y29tbWFuZFwiXTtcbn1cblxuY29uc3QganN4Q29udHJvbCA9IGZ1bmN0aW9uIDxUIGV4dGVuZHMgRWxlbWVudD4oXG5cdENvbnRyb2xUeXBlOiBOb25BYnN0cmFjdENsYXNzPENvbnRyb2w+IHwgRnVuY3Rpb24sXG5cdHNldHRpbmdzOiBOb25Db250cm9sUHJvcGVydGllczxUPiAmIHtcblx0XHRrZXk6IHN0cmluZztcblx0XHRjaGlsZHJlbj86IEVsZW1lbnQgfCBDb250cm9sUHJvcGVydGllczxUPjtcblx0XHRyZWY/OiBSZWY8VD47XG5cdFx0YmluZGluZz86IHN0cmluZztcblx0XHRjbGFzcz86IHN0cmluZztcblx0XHRbRkxfREVMRUdBVEVdPzogc3RyaW5nO1xuXHRcdFtEVF9ERVNJR05USU1FXT86IHN0cmluZztcblx0XHRbQ09SRV9SRVFVSVJFXT86IHN0cmluZztcblx0fSxcblx0a2V5OiBzdHJpbmcsXG5cdGpzeENvbnRleHQ6IEpTWENvbnRleHRcbik6IENvbnRyb2wgfCBDb250cm9sW10gfCB1bmRlZmluZWQge1xuXHRsZXQgdGFyZ2V0Q29udHJvbDogQ29udHJvbCB8IENvbnRyb2xbXSB8IHVuZGVmaW5lZDtcblxuXHRpZiAoKENvbnRyb2xUeXBlIGFzIHsgaXNGcmFnbWVudD86IGJvb2xlYW4gfSk/LmlzRnJhZ21lbnQpIHtcblx0XHR0YXJnZXRDb250cm9sID0gc2V0dGluZ3MuY2hpbGRyZW4gYXMgQ29udHJvbCB8IENvbnRyb2xbXTtcblx0fSBlbHNlIGlmICgoQ29udHJvbFR5cGUgYXMgdHlwZW9mIEJ1aWxkaW5nQmxvY2tUZW1wbGF0aW5nQmFzZSk/LmlzUnVudGltZSkge1xuXHRcdGNvbnN0IHJ1bnRpbWVCdWlsZGluZ0Jsb2NrID0gbmV3IChDb250cm9sVHlwZSBhcyB0eXBlb2YgUnVudGltZUJ1aWxkaW5nQmxvY2spKHNldHRpbmdzIGFzIHVua25vd24gYXMgJENvbnRyb2xTZXR0aW5ncyk7XG5cdFx0dGFyZ2V0Q29udHJvbCA9IHJ1bnRpbWVCdWlsZGluZ0Jsb2NrLmdldENvbnRlbnQ/Lihqc3hDb250ZXh0LnZpZXchLCBqc3hDb250ZXh0LmFwcENvbXBvbmVudCEpO1xuXHR9IGVsc2UgaWYgKGlzQUNvbnRyb2woQ29udHJvbFR5cGUpKSB7XG5cdFx0Y29uc3QgbWV0YWRhdGEgPSBDb250cm9sVHlwZS5nZXRNZXRhZGF0YSgpO1xuXHRcdGlmIChrZXkgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0c2V0dGluZ3NbXCJrZXlcIl0gPSBrZXk7XG5cdFx0fVxuXHRcdGNvbnN0IGxhdGVQcm9wZXJ0aWVzID0gcHJvY2Vzc1Byb3BlcnRpZXMobWV0YWRhdGEsIHNldHRpbmdzKTtcblx0XHRwcm9jZXNzQ29tbWFuZChtZXRhZGF0YSwgc2V0dGluZ3MpO1xuXHRcdHByb2Nlc3NBZ2dyZWdhdGlvbnMobWV0YWRhdGEsIHNldHRpbmdzKTtcblx0XHRjb25zdCBjbGFzc0RlZiA9IHNldHRpbmdzLmNsYXNzO1xuXHRcdGNvbnN0IHJlZkRlZiA9IHNldHRpbmdzLnJlZjtcblx0XHRjb25zdCBiaW5kaW5nRGVmID0gc2V0dGluZ3MuYmluZGluZztcblx0XHRjb25zdCBmbERlbGVnYXRlID0gc2V0dGluZ3NbRkxfREVMRUdBVEVdO1xuXHRcdGNvbnN0IGR0RGVzaWdudGltZSA9IHNldHRpbmdzW0RUX0RFU0lHTlRJTUVdO1xuXHRcdGRlbGV0ZSBzZXR0aW5ncy5yZWY7XG5cdFx0ZGVsZXRlIHNldHRpbmdzLmNsYXNzO1xuXHRcdGRlbGV0ZSBzZXR0aW5ncy5iaW5kaW5nO1xuXHRcdGRlbGV0ZSBzZXR0aW5nc1tGTF9ERUxFR0FURV07XG5cdFx0ZGVsZXRlIHNldHRpbmdzW0RUX0RFU0lHTlRJTUVdO1xuXHRcdGRlbGV0ZSBzZXR0aW5nc1tDT1JFX1JFUVVJUkVdOyAvLyBDb3JlIHJlcXVpcmUgaXMgbm90IHVzZWZ1bCBpbiBjb250cm9sIG1vZGVcblx0XHRjb25zdCB0YXJnZXRDb250cm9sSW5zdGFuY2UgPSBuZXcgQ29udHJvbFR5cGUoc2V0dGluZ3MgYXMgJENvbnRyb2xTZXR0aW5ncyk7XG5cdFx0aWYgKGNsYXNzRGVmKSB7XG5cdFx0XHR0YXJnZXRDb250cm9sSW5zdGFuY2UuYWRkU3R5bGVDbGFzcyhjbGFzc0RlZik7XG5cdFx0fVxuXHRcdGlmIChyZWZEZWYpIHtcblx0XHRcdHJlZkRlZi5zZXRDdXJyZW50KHRhcmdldENvbnRyb2xJbnN0YW5jZSBhcyB1bmtub3duIGFzIFQpO1xuXHRcdH1cblx0XHRjb25zdCBjdXN0b21TZXR0aW5ncyA9IHRhcmdldENvbnRyb2xJbnN0YW5jZS5kYXRhKFwic2FwLXVpLWN1c3RvbS1zZXR0aW5nc1wiKSA/PyB7fTtcblx0XHRpZiAoZmxEZWxlZ2F0ZSkge1xuXHRcdFx0Y3VzdG9tU2V0dGluZ3NbXCJzYXAudWkuZmxcIl0gPz89IHt9O1xuXHRcdFx0Y3VzdG9tU2V0dGluZ3NbXCJzYXAudWkuZmxcIl0uZGVsZWdhdGUgPSBmbERlbGVnYXRlO1xuXHRcdH1cblx0XHRpZiAoZHREZXNpZ250aW1lKSB7XG5cdFx0XHRjdXN0b21TZXR0aW5nc1tcInNhcC51aS5kdFwiXSA/Pz0ge307XG5cdFx0XHRjdXN0b21TZXR0aW5nc1tcInNhcC51aS5kdFwiXS5kZXNpZ250aW1lID0gZHREZXNpZ250aW1lO1xuXHRcdH1cblx0XHRpZiAoT2JqZWN0LmtleXMoY3VzdG9tU2V0dGluZ3MpLmxlbmd0aCA+IDApIHtcblx0XHRcdHRhcmdldENvbnRyb2xJbnN0YW5jZS5kYXRhKFwic2FwLXVpLWN1c3RvbS1zZXR0aW5nc1wiLCBjdXN0b21TZXR0aW5ncyk7XG5cdFx0fVxuXG5cdFx0aWYgKGJpbmRpbmdEZWYpIHtcblx0XHRcdGlmICh0eXBlb2YgYmluZGluZ0RlZiA9PT0gXCJzdHJpbmdcIikge1xuXHRcdFx0XHRjb25zdCBiaW5kaW5nSW5mbyA9IGJpbmRpbmdQYXJzZXIoYmluZGluZ0RlZik7XG5cdFx0XHRcdGlmIChiaW5kaW5nSW5mbykge1xuXHRcdFx0XHRcdHRhcmdldENvbnRyb2xJbnN0YW5jZS5iaW5kRWxlbWVudCh7IG1vZGVsOiBiaW5kaW5nSW5mby5tb2RlbCA/PyB1bmRlZmluZWQsIHBhdGg6IGJpbmRpbmdJbmZvLnBhdGggfSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0dGFyZ2V0Q29udHJvbEluc3RhbmNlLmJpbmRFbGVtZW50KGJpbmRpbmdEZWYpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Ly8gV2UgY29uc2lkZXIgaXQncyBhbiBvYmplY3Rcblx0XHRcdFx0T2JqZWN0LmtleXMoYmluZGluZ0RlZikuZm9yRWFjaCgoYmluZGluZ0RlZktleSkgPT4ge1xuXHRcdFx0XHRcdHRhcmdldENvbnRyb2xJbnN0YW5jZS5iaW5kRWxlbWVudCh7IG1vZGVsOiBiaW5kaW5nRGVmS2V5LCBwYXRoOiBiaW5kaW5nRGVmW2JpbmRpbmdEZWZLZXldIH0pO1xuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9XG5cdFx0Zm9yIChjb25zdCBsYXRlUHJvcGVydGllc0tleSBpbiBsYXRlUHJvcGVydGllcykge1xuXHRcdFx0bGF0ZVByb3BlcnRpZXNbbGF0ZVByb3BlcnRpZXNLZXldXG5cdFx0XHRcdC50aGVuKCh2YWx1ZSkgPT4ge1xuXHRcdFx0XHRcdHJldHVybiB0YXJnZXRDb250cm9sSW5zdGFuY2Uuc2V0UHJvcGVydHkobGF0ZVByb3BlcnRpZXNLZXksIHZhbHVlKTtcblx0XHRcdFx0fSlcblx0XHRcdFx0LmNhdGNoKChlcnJvcikgPT4ge1xuXHRcdFx0XHRcdExvZy5lcnJvcihgQ291bGRuJ3Qgc2V0IHByb3BlcnR5ICR7bGF0ZVByb3BlcnRpZXNLZXl9IG9uICR7Q29udHJvbFR5cGUuZ2V0TWV0YWRhdGEoKS5nZXROYW1lKCl9YCwgZXJyb3IsIFwianN4Q29udHJvbFwiKTtcblx0XHRcdFx0fSk7XG5cdFx0fVxuXHRcdHRhcmdldENvbnRyb2wgPSB0YXJnZXRDb250cm9sSW5zdGFuY2U7XG5cdH0gZWxzZSBpZiAodHlwZW9mIENvbnRyb2xUeXBlID09PSBcImZ1bmN0aW9uXCIpIHtcblx0XHRjb25zdCBjb250cm9sVHlwZUZuID0gQ29udHJvbFR5cGU7XG5cdFx0dGFyZ2V0Q29udHJvbCA9IGNvbnRyb2xUeXBlRm4oc2V0dGluZ3MgYXMgJENvbnRyb2xTZXR0aW5ncyk7XG5cdH0gZWxzZSB7XG5cdFx0dGFyZ2V0Q29udHJvbCA9IG5ldyBUZXh0KHsgdGV4dDogXCJNaXNzaW5nIGNvbXBvbmVudCBcIiArIChDb250cm9sVHlwZSBhcyBzdHJpbmcpIH0pO1xuXHR9XG5cblx0cmV0dXJuIHRhcmdldENvbnRyb2w7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBqc3hDb250cm9sO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7O0VBc0JBLE1BQU1BLFdBQVcsR0FBRyxhQUFhO0VBQ2pDLE1BQU1DLFlBQVksR0FBRyxjQUFjO0VBQ25DLE1BQU1DLGFBQWEsR0FBRyxlQUFlO0VBQ3JDLE1BQU1DLG1CQUFtQixHQUFHLFNBQUFBLENBQzNCQyxtQkFBNEQsRUFDNURDLGVBQXVCLEVBQ3ZCQyxLQUEwQyxFQUNuQztJQUNQLElBQUlBLEtBQUssS0FBSyxJQUFJLElBQUlBLEtBQUssS0FBS0MsU0FBUyxJQUFJLE9BQU9ELEtBQUssS0FBSyxRQUFRLEVBQUU7TUFDdkU7SUFDRDtJQUNBLElBQUksQ0FBQ0YsbUJBQW1CLENBQUNDLGVBQWUsQ0FBQyxFQUFFO01BQzFDRCxtQkFBbUIsQ0FBQ0MsZUFBZSxDQUFDLEdBQUcsRUFBRTtJQUMxQztJQUNBLElBQUlHLGdCQUFnQixDQUFDRixLQUFLLENBQUMsRUFBRTtNQUM1QkYsbUJBQW1CLENBQUNDLGVBQWUsQ0FBQyxDQUFDSSxJQUFJLENBQUNILEtBQUssQ0FBQztJQUNqRCxDQUFDLE1BQU0sSUFBSUksS0FBSyxDQUFDQyxPQUFPLENBQUNMLEtBQUssQ0FBQyxFQUFFO01BQ2hDQSxLQUFLLENBQUNNLE9BQU8sQ0FBRUMsUUFBUSxJQUFLO1FBQzNCVixtQkFBbUIsQ0FBQ0MsbUJBQW1CLEVBQUVDLGVBQWUsRUFBRVEsUUFBUSxDQUFDO01BQ3BFLENBQUMsQ0FBQztJQUNILENBQUMsTUFBTSxJQUFJLE9BQU9QLEtBQUssS0FBSyxVQUFVLEVBQUU7TUFDdkNGLG1CQUFtQixDQUFDQyxlQUFlLENBQUMsR0FBR0MsS0FBSztJQUM3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
284
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJGTF9ERUxFR0FURSIsIkNPUkVfUkVRVUlSRSIsIkRUX0RFU0lHTlRJTUUiLCJhZGRDaGlsZEFnZ3JlZ2F0aW9uIiwiYWdncmVnYXRpb25DaGlsZHJlbiIsImFnZ3JlZ2F0aW9uTmFtZSIsImNoaWxkIiwidW5kZWZpbmVkIiwiaXNDaGlsZEFuRWxlbWVudCIsInB1c2giLCJBcnJheSIsImlzQXJyYXkiLCJmb3JFYWNoIiwic3ViQ2hpbGQiLCJPYmplY3QiLCJrZXlzIiwiY2hpbGRLZXkiLCJjaGlsZHJlbiIsImlzQSIsImlzQUNvbnRyb2wiLCJnZXRNZXRhZGF0YSIsInByb2Nlc3NBZ2dyZWdhdGlvbnMiLCJtZXRhZGF0YSIsIm1TZXR0aW5ncyIsIm1ldGFkYXRhQWdncmVnYXRpb25zIiwiZ2V0QWxsQWdncmVnYXRpb25zIiwiZGVmYXVsdEFnZ3JlZ2F0aW9uTmFtZSIsImdldERlZmF1bHRBZ2dyZWdhdGlvbk5hbWUiLCJoYXNPd25Qcm9wZXJ0eSIsInJlc3VsdGluZ1BhcnNlIiwiQmluZGluZ1BhcnNlciIsImNvbXBsZXhQYXJzZXIiLCJwYXRoIiwibW9kZWwiLCJmYWN0b3J5IiwidGVtcGxhdGUiLCJwcm9jZXNzQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIiwic2V0dGluZ3MiLCJzZXR0aW5nc0tleSIsImJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiIsImFsbFByb3BlcnRpZXMiLCJpc0NvbnN0YW50IiwiY29tcGlsZUNvbnN0YW50IiwiY2FsbCIsImlzUGF0aEluTW9kZWxFeHByZXNzaW9uIiwibW9kZWxOYW1lIiwiY29tcGlsZUV4cHJlc3Npb24iLCJwcm9jZXNzU3RyaW5nUHJvcGVydHkiLCJ2YWx1ZSIsImFsbEV2ZW50cyIsInN0YXJ0c1dpdGgiLCJMb2ciLCJlcnJvciIsImdldE5hbWUiLCJwcm9wZXJ0eVR5cGUiLCJnZXRUeXBlIiwiRGF0YVR5cGUiLCJpbmNsdWRlcyIsInBhcnNlVmFsdWUiLCJwcm9jZXNzT2JqZWN0UHJvcGVydHkiLCJsYXRlUHJvcGVydGllcyIsInRoZW4iLCJfX2JpbmRpbmdJbmZvIiwicHJvY2Vzc1Byb3BlcnRpZXMiLCJnZXRBbGxFdmVudHMiLCJnZXRBbGxQcm9wZXJ0aWVzIiwiaXNCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24iLCJwcm9jZXNzQ29tbWFuZCIsImNvbW1hbmRQcm9wZXJ0eSIsImNvbW1hbmQiLCJldmVudE5hbWUiLCJzcGxpdCIsImV2ZW50IiwibmFtZSIsIkV2ZW50SGFuZGxlclJlc29sdmVyIiwicmVzb2x2ZUV2ZW50SGFuZGxlciIsImpzeENvbnRyb2wiLCJDb250cm9sVHlwZSIsImtleSIsImpzeENvbnRleHQiLCJ0YXJnZXRDb250cm9sIiwiaXNGcmFnbWVudCIsImNsYXNzRGVmIiwiY2xhc3MiLCJyZWZEZWYiLCJyZWYiLCJiaW5kaW5nRGVmIiwiYmluZGluZyIsImZsRGVsZWdhdGUiLCJkdERlc2lnbnRpbWUiLCJ0YXJnZXRDb250cm9sSW5zdGFuY2UiLCJhZGRTdHlsZUNsYXNzIiwic2V0Q3VycmVudCIsImN1c3RvbVNldHRpbmdzIiwiZGF0YSIsImRlbGVnYXRlIiwiZGVzaWdudGltZSIsImxlbmd0aCIsImJpbmRpbmdJbmZvIiwiYmluZGluZ1BhcnNlciIsImJpbmRFbGVtZW50IiwicGFyYW1ldGVycyIsImJpbmRpbmdEZWZLZXkiLCJsYXRlUHJvcGVydGllc0tleSIsInNldFByb3BlcnR5IiwiY2F0Y2giLCJjb250cm9sVHlwZUZuIiwiVGV4dCIsInRleHQiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbImpzeC1jb250cm9sLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IHR5cGUgeyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24gfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCB7XG5cdGNvbXBpbGVDb25zdGFudCxcblx0Y29tcGlsZUV4cHJlc3Npb24sXG5cdGlzQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uLFxuXHRpc0NvbnN0YW50LFxuXHRpc1BhdGhJbk1vZGVsRXhwcmVzc2lvblxufSBmcm9tIFwic2FwL2ZlL2Jhc2UvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCB0eXBlIHsgQmluZGluZ0luZm9Ib2xkZXIsIE5vbkFic3RyYWN0Q2xhc3MgfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQ2xhc3NTdXBwb3J0XCI7XG5pbXBvcnQgdHlwZSB7IENvbnRyb2xQcm9wZXJ0aWVzLCBKU1hDb250ZXh0LCBOb25Db250cm9sUHJvcGVydGllcywgUmVmIH0gZnJvbSBcInNhcC9mZS9iYXNlL2pzeC1ydW50aW1lL2pzeFwiO1xuaW1wb3J0IFRleHQgZnJvbSBcInNhcC9tL1RleHRcIjtcbmltcG9ydCBCaW5kaW5nUGFyc2VyIGZyb20gXCJzYXAvdWkvYmFzZS9CaW5kaW5nUGFyc2VyXCI7XG5pbXBvcnQgRGF0YVR5cGUgZnJvbSBcInNhcC91aS9iYXNlL0RhdGFUeXBlXCI7XG5pbXBvcnQgeyBiaW5kaW5nUGFyc2VyIH0gZnJvbSBcInNhcC91aS9iYXNlL01hbmFnZWRPYmplY3RcIjtcbmltcG9ydCB0eXBlIE1hbmFnZWRPYmplY3RNZXRhZGF0YSBmcm9tIFwic2FwL3VpL2Jhc2UvTWFuYWdlZE9iamVjdE1ldGFkYXRhXCI7XG5pbXBvcnQgdHlwZSBDb250cm9sIGZyb20gXCJzYXAvdWkvY29yZS9Db250cm9sXCI7XG5pbXBvcnQgdHlwZSB7ICRDb250cm9sU2V0dGluZ3MgfSBmcm9tIFwic2FwL3VpL2NvcmUvQ29udHJvbFwiO1xuaW1wb3J0IHR5cGUgeyBkZWZhdWx0IGFzIEVsZW1lbnQsIGRlZmF1bHQgYXMgVUk1RWxlbWVudCB9IGZyb20gXCJzYXAvdWkvY29yZS9FbGVtZW50XCI7XG5pbXBvcnQgRXZlbnRIYW5kbGVyUmVzb2x2ZXIgZnJvbSBcInNhcC91aS9jb3JlL212Yy9FdmVudEhhbmRsZXJSZXNvbHZlclwiO1xuXG5jb25zdCBGTF9ERUxFR0FURSA9IFwiZmw6ZGVsZWdhdGVcIjtcbmNvbnN0IENPUkVfUkVRVUlSRSA9IFwiY29yZTpyZXF1aXJlXCI7XG5jb25zdCBEVF9ERVNJR05USU1FID0gXCJkdDpkZXNpZ250aW1lXCI7XG5jb25zdCBhZGRDaGlsZEFnZ3JlZ2F0aW9uID0gZnVuY3Rpb24gKFxuXHRhZ2dyZWdhdGlvbkNoaWxkcmVuOiBSZWNvcmQ8c3RyaW5nLCAoc3RyaW5nIHwgVUk1RWxlbWVudClbXT4sXG5cdGFnZ3JlZ2F0aW9uTmFtZTogc3RyaW5nLFxuXHRjaGlsZD86IHN0cmluZyB8IFVJNUVsZW1lbnQgfCBVSTVFbGVtZW50W11cbik6IHZvaWQge1xuXHRpZiAoY2hpbGQgPT09IG51bGwgfHwgY2hpbGQgPT09IHVuZGVmaW5lZCB8fCB0eXBlb2YgY2hpbGQgPT09IFwic3RyaW5nXCIpIHtcblx0XHRyZXR1cm47XG5cdH1cblx0aWYgKCFhZ2dyZWdhdGlvbkNoaWxkcmVuW2FnZ3JlZ2F0aW9uTmFtZV0pIHtcblx0XHRhZ2dyZWdhdGlvbkNoaWxkcmVuW2FnZ3JlZ2F0aW9uTmFtZV0gPSBbXTtcblx0fVxuXHRpZiAoaXNDaGlsZEFuRWxlbWVudChjaGlsZCkpIHtcblx0XHRhZ2dyZWdhdGlvbkNoaWxkcmVuW2FnZ3JlZ2F0aW9uTmFtZV0ucHVzaChjaGlsZCk7XG5cdH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShjaGlsZCkpIHtcblx0XHRjaGlsZC5mb3JFYWNoKChzdWJDaGlsZCkgPT4ge1xuXHRcdFx0YWRkQ2hpbGRBZ2dyZWdhdGlvbihhZ2dyZWdhdGlvbkNoaWxkcmVuLCBhZ2dyZWdhdGlvbk5hbWUsIHN1YkNoaWxkKTtcblx0XHR9KTtcblx0fSBlbHNlIGlmICh0eXBlb2YgY2hpbGQgPT09IFwiZnVuY3Rpb25cIikge1xuXHRcdGFnZ3JlZ2F0aW9uQ2hpbGRyZW5bYWdncmVnYXRpb25OYW1lXSA9IGNoaWxkO1xuXHR9IGVsc2Uge1xuXHRcdE9iamVjdC5rZXlzKGNoaWxkKS5mb3JFYWNoKChjaGlsZEtleSkgPT4ge1xuXHRcdFx0YWRkQ2hpbGRBZ2dyZWdhdGlvbihhZ2dyZWdhdGlvbkNoaWxkcmVuLCBjaGlsZEtleSwgY2hpbGRbY2hpbGRLZXldKTtcblx0XHR9KTtcblx0fVxufTtcbmNvbnN0IGlzQ2hpbGRBbkVsZW1lbnQgPSBmdW5jdGlvbiAoY2hpbGRyZW4/OiB1bmtub3duKTogY2hpbGRyZW4gaXMgRWxlbWVudCB7XG5cdHJldHVybiAoY2hpbGRyZW4gYXMgRWxlbWVudCk/LmlzQT8uKFwic2FwLnVpLmNvcmUuRWxlbWVudFwiKTtcbn07XG5jb25zdCBpc0FDb250cm9sID0gZnVuY3Rpb24gKGNoaWxkcmVuPzogdHlwZW9mIENvbnRyb2wgfCBGdW5jdGlvbik6IGNoaWxkcmVuIGlzIE5vbkFic3RyYWN0Q2xhc3M8Q29udHJvbD4ge1xuXHRyZXR1cm4gISEoY2hpbGRyZW4gYXMgdHlwZW9mIENvbnRyb2wpPy5nZXRNZXRhZGF0YTtcbn07XG5cbmZ1bmN0aW9uIHByb2Nlc3NBZ2dyZWdhdGlvbnMobWV0YWRhdGE6IE1hbmFnZWRPYmplY3RNZXRhZGF0YSwgbVNldHRpbmdzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IHZvaWQge1xuXHRjb25zdCBtZXRhZGF0YUFnZ3JlZ2F0aW9ucyA9IG1ldGFkYXRhLmdldEFsbEFnZ3JlZ2F0aW9ucygpO1xuXHRjb25zdCBkZWZhdWx0QWdncmVnYXRpb25OYW1lID0gbWV0YWRhdGEuZ2V0RGVmYXVsdEFnZ3JlZ2F0aW9uTmFtZSgpO1xuXHRjb25zdCBhZ2dyZWdhdGlvbkNoaWxkcmVuOiBSZWNvcmQ8c3RyaW5nLCAoc3RyaW5nIHwgVUk1RWxlbWVudClbXT4gPSB7fTtcblx0YWRkQ2hpbGRBZ2dyZWdhdGlvbihhZ2dyZWdhdGlvbkNoaWxkcmVuLCBkZWZhdWx0QWdncmVnYXRpb25OYW1lLCBtU2V0dGluZ3MuY2hpbGRyZW4gYXMgc3RyaW5nIHwgVUk1RWxlbWVudCB8IFVJNUVsZW1lbnRbXSk7XG5cdGRlbGV0ZSBtU2V0dGluZ3MuY2hpbGRyZW47XG5cdC8vIGZpbmQgb3V0IHdoaWNoIGFnZ3JlZ2F0aW9uIGFyZSBib3VuZCAoYm90aCBpbiBjaGlsZHJlbiBhbmQgZGlyZWN0bHkgdW5kZXIgaXQpXG5cdE9iamVjdC5rZXlzKG1ldGFkYXRhQWdncmVnYXRpb25zKS5mb3JFYWNoKChhZ2dyZWdhdGlvbk5hbWUpID0+IHtcblx0XHRpZiAoYWdncmVnYXRpb25DaGlsZHJlblthZ2dyZWdhdGlvbk5hbWVdICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdGlmIChtU2V0dGluZ3MuaGFzT3duUHJvcGVydHkoYWdncmVnYXRpb25OYW1lKSkge1xuXHRcdFx0XHRpZiAodHlwZW9mIG1TZXR0aW5nc1thZ2dyZWdhdGlvbk5hbWVdID09PSBcInN0cmluZ1wiKSB7XG5cdFx0XHRcdFx0Y29uc3QgcmVzdWx0aW5nUGFyc2UgPSBCaW5kaW5nUGFyc2VyLmNvbXBsZXhQYXJzZXIobVNldHRpbmdzW2FnZ3JlZ2F0aW9uTmFtZV0pO1xuXHRcdFx0XHRcdGlmIChyZXN1bHRpbmdQYXJzZSkge1xuXHRcdFx0XHRcdFx0bVNldHRpbmdzW2FnZ3JlZ2F0aW9uTmFtZV0gPSB7XG5cdFx0XHRcdFx0XHRcdHBhdGg6IHJlc3VsdGluZ1BhcnNlLnBhdGgsXG5cdFx0XHRcdFx0XHRcdG1vZGVsOiByZXN1bHRpbmdQYXJzZS5tb2RlbFxuXHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0bVNldHRpbmdzW2FnZ3JlZ2F0aW9uTmFtZV0gPSB7XG5cdFx0XHRcdFx0XHRcdHBhdGg6IG1TZXR0aW5nc1thZ2dyZWdhdGlvbk5hbWVdXG5cdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAodHlwZW9mIGFnZ3JlZ2F0aW9uQ2hpbGRyZW5bYWdncmVnYXRpb25OYW1lXSA9PT0gXCJmdW5jdGlvblwiKSB7XG5cdFx0XHRcdFx0KG1TZXR0aW5nc1thZ2dyZWdhdGlvbk5hbWVdIGFzIHsgZmFjdG9yeTogRnVuY3Rpb24gfSkuZmFjdG9yeSA9IGFnZ3JlZ2F0aW9uQ2hpbGRyZW5bXG5cdFx0XHRcdFx0XHRhZ2dyZWdhdGlvbk5hbWVcblx0XHRcdFx0XHRdIGFzIHVua25vd24gYXMgRnVuY3Rpb247XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0KG1TZXR0aW5nc1thZ2dyZWdhdGlvbk5hbWVdIGFzIHsgdGVtcGxhdGU6IHN0cmluZyB8IFVJNUVsZW1lbnQgfSkudGVtcGxhdGUgPSBhZ2dyZWdhdGlvbkNoaWxkcmVuW2FnZ3JlZ2F0aW9uTmFtZV1bMF07XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdG1TZXR0aW5nc1thZ2dyZWdhdGlvbk5hbWVdID0gYWdncmVnYXRpb25DaGlsZHJlblthZ2dyZWdhdGlvbk5hbWVdO1xuXHRcdFx0fVxuXHRcdH1cblx0fSk7XG59XG5cbi8qKlxuICogUHJvY2Vzc2VzIGEgYmluZGluZyB0b29sa2l0IGV4cHJlc3Npb24gcHJvcGVydHkgZm9yIGZ1bmN0aW9uIHByb2Nlc3NQcm9wZXJ0aWVzXG4gKlxuICogSWYgdGhlIHByb3BlcnR5IGlzIGEgY29uc3RhbnQsIGl0IGNvbXBpbGVzIGl0IGFzIGEgY29uc3RhbnQuIElmIHRoZSBwcm9wZXJ0eSBpcyBhbiBhZ2dyZWdhdGlvbixcbiAqIGl0IGNvbXBpbGVzIHRoZSBleHByZXNzaW9uIGFzIGFuIG9iamVjdC4gT3RoZXJ3aXNlLCBpdCBjb21waWxlcyB0aGUgZXhwcmVzc2lvbiBub3JtYWxseS5cbiAqIEBwYXJhbSBzZXR0aW5ncyBUaGUgc2V0dGluZ3Mgb2YgdGhlIGNvbnRyb2xcbiAqIEBwYXJhbSBzZXR0aW5nc0tleSBUaGUga2V5IG9mIHRoZSBzZXR0aW5nIGJlaW5nIHByb2Nlc3NlZFxuICogQHBhcmFtIGJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiBUaGUgYmluZGluZyB0b29sa2l0IGV4cHJlc3Npb24gdG8gcHJvY2Vzc1xuICogQHBhcmFtIGFsbFByb3BlcnRpZXMgQWxsIHByb3BlcnRpZXMgb2YgdGhlIGNvbnRyb2xcbiAqL1xuZnVuY3Rpb24gcHJvY2Vzc0JpbmRpbmdUb29sa2l0RXhwcmVzc2lvbihcblx0c2V0dGluZ3M6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuXHRzZXR0aW5nc0tleToga2V5b2YgdHlwZW9mIHNldHRpbmdzLFxuXHRiaW5kaW5nVG9vbGtpdEV4cHJlc3Npb246IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjx1bmtub3duPixcblx0YWxsUHJvcGVydGllczogUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbik6IHZvaWQge1xuXHRpZiAoaXNDb25zdGFudChiaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24pKSB7XG5cdFx0c2V0dGluZ3Nbc2V0dGluZ3NLZXldID0gY29tcGlsZUNvbnN0YW50KGJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiwgZmFsc2UsIHRydWUsIHRydWUpO1xuXHR9IGVsc2UgaWYgKCFPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbChhbGxQcm9wZXJ0aWVzLCBzZXR0aW5nc0tleSkpIHtcblx0XHQvLyBBZ2dyZWdhdGlvbiBjYXNlIC0gd2UgbmVlZCB0byBjb21waWxlIHRoZSBleHByZXNzaW9uIGJ1dCBhcyBhbiBvYmplY3Rcblx0XHRpZiAoaXNQYXRoSW5Nb2RlbEV4cHJlc3Npb24oYmluZGluZ1Rvb2xraXRFeHByZXNzaW9uKSkge1xuXHRcdFx0c2V0dGluZ3Nbc2V0dGluZ3NLZXldID0geyBwYXRoOiBiaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24ucGF0aCwgbW9kZWw6IGJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbi5tb2RlbE5hbWUgfTtcblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0c2V0dGluZ3Nbc2V0dGluZ3NLZXldID0gY29tcGlsZUV4cHJlc3Npb24oYmluZGluZ1Rvb2xraXRFeHByZXNzaW9uKTtcblx0fVxufVxuXG4vKipcbiAqIFByb2Nlc3NlcyBhIHN0cmluZyBwcm9wZXJ0eSBmb3IgZnVuY3Rpb24gcHJvY2Vzc1Byb3BlcnRpZXNcbiAqXG4gKiBJZiB0aGUgcHJvcGVydHkgaXMgbm90IGEgYmluZGluZyBleHByZXNzaW9uIGFuZCBkb2VzIG5vdCBtYXRjaCB0aGUgZXhwZWN0ZWQgZm9ybWF0LFxuICogaXQgcGFyc2VzIHRoZSB2YWx1ZSB0byBwcm92aWRlIHRoZSBleHBlY3RlZCBmb3JtYXQuIElmIHRoZSBwcm9wZXJ0eSBpcyBhbiBldmVudCBoYW5kbGVyLFxuICogaXQgbG9ncyBhbiBlcnJvci5cbiAqIEBwYXJhbSBzZXR0aW5ncyBUaGUgc2V0dGluZ3Mgb2YgdGhlIGNvbnRyb2xcbiAqIEBwYXJhbSBzZXR0aW5nc0tleSBUaGUga2V5IG9mIHRoZSBzZXR0aW5nIGJlaW5nIHByb2Nlc3NlZFxuICogQHBhcmFtIHZhbHVlIFRoZSBzdHJpbmcgdmFsdWUgdG8gcHJvY2Vzc1xuICogQHBhcmFtIGFsbEV2ZW50cyBBbGwgZXZlbnRzIG9mIHRoZSBjb250cm9sXG4gKiBAcGFyYW0gYWxsUHJvcGVydGllcyBBbGwgcHJvcGVydGllcyBvZiB0aGUgY29udHJvbFxuICogQHBhcmFtIG1ldGFkYXRhIE1ldGFkYXRhIG9mIHRoZSBjb250cm9sXG4gKi9cbmZ1bmN0aW9uIHByb2Nlc3NTdHJpbmdQcm9wZXJ0eShcblx0c2V0dGluZ3M6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuXHRzZXR0aW5nc0tleToga2V5b2YgdHlwZW9mIHNldHRpbmdzLFxuXHR2YWx1ZTogc3RyaW5nLFxuXHRhbGxFdmVudHM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuXHRhbGxQcm9wZXJ0aWVzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcblx0bWV0YWRhdGE6IE1hbmFnZWRPYmplY3RNZXRhZGF0YVxuKTogdm9pZCB7XG5cdGlmICghdmFsdWUuc3RhcnRzV2l0aChcIntcIikpIHtcblx0XHRpZiAoT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwoYWxsRXZlbnRzLCBzZXR0aW5nc0tleSkpIHtcblx0XHRcdExvZy5lcnJvcihgRXZlbnQgaGFuZGxlcnMgY2Fubm90IGJlIHNldCBhcyBzdHJpbmcgaW4gSlNYLCAke3NldHRpbmdzS2V5fSBpbiAke21ldGFkYXRhLmdldE5hbWUoKX1gKTtcblx0XHR9XG5cdFx0Y29uc3QgcHJvcGVydHlUeXBlID0gKGFsbFByb3BlcnRpZXNbc2V0dGluZ3NLZXldIGFzIHsgZ2V0VHlwZT86IEZ1bmN0aW9uIH0pPy5nZXRUeXBlPy4oKTtcblx0XHRpZiAocHJvcGVydHlUeXBlICYmIHByb3BlcnR5VHlwZSBpbnN0YW5jZW9mIERhdGFUeXBlICYmIFtcImJvb2xlYW5cIiwgXCJpbnRcIiwgXCJmbG9hdFwiXS5pbmNsdWRlcyhwcm9wZXJ0eVR5cGUuZ2V0TmFtZSgpKSkge1xuXHRcdFx0c2V0dGluZ3Nbc2V0dGluZ3NLZXldID0gcHJvcGVydHlUeXBlLnBhcnNlVmFsdWUodmFsdWUpO1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHRzZXR0aW5nc1tzZXR0aW5nc0tleV0gPSB2YWx1ZTtcblx0fVxufVxuXG4vKipcbiAqIFByb2Nlc3NlcyBhbiBvYmplY3QgcHJvcGVydHkgZm9yIGZ1bmN0aW9uIHByb2Nlc3NQcm9wZXJ0aWVzLlxuICpcbiAqIElmIHRoZSBwcm9wZXJ0eSBpcyBhIHByb21pc2UsIGl0IGFkZHMgaXQgdG8gdGhlIGxhdGUgcHJvcGVydGllcyBtYXAuIElmIHRoZSBwcm9wZXJ0eSBpcyBhIGJpbmRpbmcgaW5mbyBob2xkZXIsXG4gKiBpdCBzZXRzIHRoZSBiaW5kaW5nIGluZm8gdG8gdGhlIHNldHRpbmdzLlxuICogQHBhcmFtIHNldHRpbmdzIFRoZSBzZXR0aW5ncyBvZiB0aGUgY29udHJvbFxuICogQHBhcmFtIHNldHRpbmdzS2V5IFRoZSBrZXkgb2YgdGhlIHNldHRpbmcgYmVpbmcgcHJvY2Vzc2VkXG4gKiBAcGFyYW0gdmFsdWUgVGhlIG9iamVjdCB2YWx1ZSB0byBwcm9jZXNzXG4gKiBAcGFyYW0gbGF0ZVByb3BlcnRpZXMgQSBtYXAgb2YgdGhlIGNvbnRyb2wncyBsYXRlIHByb3BlcnRpZXNcbiAqL1xuZnVuY3Rpb24gcHJvY2Vzc09iamVjdFByb3BlcnR5KFxuXHRzZXR0aW5nczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG5cdHNldHRpbmdzS2V5OiBrZXlvZiB0eXBlb2Ygc2V0dGluZ3MsXG5cdHZhbHVlOiB1bmtub3duLFxuXHRsYXRlUHJvcGVydGllczogUmVjb3JkPHN0cmluZywgUHJvbWlzZTx1bmtub3duPj5cbik6IHZvaWQge1xuXHRpZiAoKHZhbHVlIGFzIFByb21pc2U8dW5rbm93bj4pLnRoZW4pIHtcblx0XHRsYXRlUHJvcGVydGllc1tzZXR0aW5nc0tleV0gPSB2YWx1ZSBhcyBQcm9taXNlPHVua25vd24+O1xuXHRcdGRlbGV0ZSBzZXR0aW5nc1tzZXR0aW5nc0tleV07XG5cdH0gZWxzZSBpZiAoKHZhbHVlIGFzIEJpbmRpbmdJbmZvSG9sZGVyPHVua25vd24+KS5fX2JpbmRpbmdJbmZvKSB7XG5cdFx0c2V0dGluZ3Nbc2V0dGluZ3NLZXldID0gKHZhbHVlIGFzIEJpbmRpbmdJbmZvSG9sZGVyPHVua25vd24+KS5fX2JpbmRpbmdJbmZvO1xuXHR9XG59XG5cbi8qKlxuICogUHJvY2Vzc2VzIHRoZSBwcm9wZXJ0aWVzLlxuICpcbiAqIElmIHRoZSBwcm9wZXJ0eSBpcyBhIGJpbmRpbmdUb29sa2l0IGV4cHJlc3Npb24gd2UgbmVlZCB0byBjb21waWxlIGl0LlxuICogRWxzZSBpZiB0aGUgcHJvcGVydHkgaXMgc2V0IGFzIHN0cmluZyAoY29tcGlsZWQgYmluZGluZyBleHByZXNzaW9uIHJldHVybnMgc3RyaW5nIGJ5IGRlZmF1bHQgZXZlbiBpZiBpdCdzIGEgYm9vbGVhbiwgaW50LCBldGMuKSBhbmQgaXQgZG9lc24ndCBtYXRjaCB3aXRoIGV4cGVjdGVkXG4gKiBmb3JtYXQgdGhlIHZhbHVlIGlzIHBhcnNlZCB0byBwcm92aWRlIGV4cGVjdGVkIGZvcm1hdC5cbiAqIEBwYXJhbSBtZXRhZGF0YSBNZXRhZGF0YSBvZiB0aGUgY29udHJvbFxuICogQHBhcmFtIHNldHRpbmdzIFNldHRpbmdzIG9mIHRoZSBjb250cm9sXG4gKiBAcmV0dXJucyBBIG1hcCBvZiBsYXRlIHByb3BlcnRpZXMgdGhhdCBuZWVkIHRvIGJlIGF3YWl0ZWQgYWZ0ZXIgdGhlIGNvbnRyb2wgaXMgY3JlYXRlZFxuICovXG5mdW5jdGlvbiBwcm9jZXNzUHJvcGVydGllcyhtZXRhZGF0YTogTWFuYWdlZE9iamVjdE1ldGFkYXRhLCBzZXR0aW5nczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiBSZWNvcmQ8c3RyaW5nLCBQcm9taXNlPHVua25vd24+PiB7XG5cdGxldCBzZXR0aW5nc0tleToga2V5b2YgdHlwZW9mIHNldHRpbmdzO1xuXHRjb25zdCBsYXRlUHJvcGVydGllczogUmVjb3JkPHN0cmluZywgUHJvbWlzZTx1bmtub3duPj4gPSB7fTtcblx0Y29uc3QgYWxsRXZlbnRzID0gbWV0YWRhdGEuZ2V0QWxsRXZlbnRzKCk7XG5cdGNvbnN0IGFsbFByb3BlcnRpZXMgPSBtZXRhZGF0YS5nZXRBbGxQcm9wZXJ0aWVzKCk7XG5cblx0Zm9yIChzZXR0aW5nc0tleSBpbiBzZXR0aW5ncykge1xuXHRcdGNvbnN0IHZhbHVlID0gc2V0dGluZ3Nbc2V0dGluZ3NLZXldO1xuXHRcdGlmIChpc0JpbmRpbmdUb29sa2l0RXhwcmVzc2lvbih2YWx1ZSkpIHtcblx0XHRcdHByb2Nlc3NCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24oc2V0dGluZ3MsIHNldHRpbmdzS2V5LCB2YWx1ZSwgYWxsUHJvcGVydGllcyk7XG5cdFx0fSBlbHNlIGlmICh2YWx1ZSAhPT0gbnVsbCAmJiB0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIpIHtcblx0XHRcdHByb2Nlc3NPYmplY3RQcm9wZXJ0eShzZXR0aW5ncywgc2V0dGluZ3NLZXksIHZhbHVlLCBsYXRlUHJvcGVydGllcyk7XG5cdFx0fSBlbHNlIGlmICh0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIpIHtcblx0XHRcdHByb2Nlc3NTdHJpbmdQcm9wZXJ0eShzZXR0aW5ncywgc2V0dGluZ3NLZXksIHZhbHVlLCBhbGxFdmVudHMsIGFsbFByb3BlcnRpZXMsIG1ldGFkYXRhKTtcblx0XHR9IGVsc2UgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHtcblx0XHRcdGRlbGV0ZSBzZXR0aW5nc1tzZXR0aW5nc0tleV07XG5cdFx0fVxuXHR9XG5cdHJldHVybiBsYXRlUHJvcGVydGllcztcbn1cblxuLyoqXG4gKiBQcm9jZXNzZXMgdGhlIGNvbW1hbmQuXG4gKlxuICogUmVzb2x2ZXMgdGhlIGNvbW1hbmQgc2V0IG9uIHRoZSBjb250cm9sIHZpYSB0aGUgaW50cmluc2ljIGNsYXNzIGF0dHJpYnV0ZSBcImpzeDpjb21tYW5kXCIuXG4gKiBJZiBubyBjb21tYW5kIGhhcyBiZWVuIHNldCBvciB0aGUgdGFyZ2V0ZWQgZXZlbnQgZG9lc24ndCBleGlzdCwgbm8gY29uZmlndXJhdGlvbiBpcyBzZXQuXG4gKiBAcGFyYW0gbWV0YWRhdGEgTWV0YWRhdGEgb2YgdGhlIGNvbnRyb2xcbiAqIEBwYXJhbSBzZXR0aW5ncyBTZXR0aW5ncyBvZiB0aGUgY29udHJvbFxuICovXG5mdW5jdGlvbiBwcm9jZXNzQ29tbWFuZChtZXRhZGF0YTogTWFuYWdlZE9iamVjdE1ldGFkYXRhLCBzZXR0aW5nczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiB2b2lkIHtcblx0Y29uc3QgY29tbWFuZFByb3BlcnR5ID0gc2V0dGluZ3NbXCJqc3g6Y29tbWFuZFwiXTtcblx0aWYgKGNvbW1hbmRQcm9wZXJ0eSkge1xuXHRcdGNvbnN0IFtjb21tYW5kLCBldmVudE5hbWVdID0gKGNvbW1hbmRQcm9wZXJ0eSBhcyBzdHJpbmcpLnNwbGl0KFwifFwiKTtcblx0XHRjb25zdCBldmVudCA9IG1ldGFkYXRhLmdldEFsbEV2ZW50cygpW2V2ZW50TmFtZV07XG5cdFx0aWYgKGV2ZW50ICYmIGNvbW1hbmQuc3RhcnRzV2l0aChcImNtZDpcIikpIHtcblx0XHRcdHNldHRpbmdzW2V2ZW50Lm5hbWVdID0gRXZlbnRIYW5kbGVyUmVzb2x2ZXIucmVzb2x2ZUV2ZW50SGFuZGxlcihjb21tYW5kKTtcblx0XHR9XG5cdH1cblx0ZGVsZXRlIHNldHRpbmdzW1wianN4OmNvbW1hbmRcIl07XG59XG5cbmNvbnN0IGpzeENvbnRyb2wgPSBmdW5jdGlvbiA8VCBleHRlbmRzIEVsZW1lbnQ+KFxuXHRDb250cm9sVHlwZTogTm9uQWJzdHJhY3RDbGFzczxDb250cm9sPiB8IEZ1bmN0aW9uLFxuXHRzZXR0aW5nczogTm9uQ29udHJvbFByb3BlcnRpZXM8VD4gJiB7XG5cdFx0a2V5OiBzdHJpbmc7XG5cdFx0Y2hpbGRyZW4/OiBFbGVtZW50IHwgQ29udHJvbFByb3BlcnRpZXM8VD47XG5cdFx0cmVmPzogUmVmPFQ+O1xuXHRcdGJpbmRpbmc/OiBzdHJpbmc7XG5cdFx0Y2xhc3M/OiBzdHJpbmc7XG5cdFx0W0ZMX0RFTEVHQVRFXT86IHN0cmluZztcblx0XHRbRFRfREVTSUdOVElNRV0/OiBzdHJpbmc7XG5cdFx0W0NPUkVfUkVRVUlSRV0/OiBzdHJpbmc7XG5cdH0sXG5cdGtleTogc3RyaW5nLFxuXHRqc3hDb250ZXh0OiBKU1hDb250ZXh0XG4pOiBDb250cm9sIHwgQ29udHJvbFtdIHwgdW5kZWZpbmVkIHtcblx0bGV0IHRhcmdldENvbnRyb2w6IENvbnRyb2wgfCBDb250cm9sW10gfCB1bmRlZmluZWQ7XG5cblx0aWYgKChDb250cm9sVHlwZSBhcyB7IGlzRnJhZ21lbnQ/OiBib29sZWFuIH0pPy5pc0ZyYWdtZW50KSB7XG5cdFx0dGFyZ2V0Q29udHJvbCA9IHNldHRpbmdzLmNoaWxkcmVuIGFzIENvbnRyb2wgfCBDb250cm9sW107XG5cdH0gZWxzZSBpZiAoaXNBQ29udHJvbChDb250cm9sVHlwZSkpIHtcblx0XHRjb25zdCBtZXRhZGF0YSA9IENvbnRyb2xUeXBlLmdldE1ldGFkYXRhKCk7XG5cdFx0aWYgKGtleSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRzZXR0aW5nc1tcImtleVwiXSA9IGtleTtcblx0XHR9XG5cdFx0Y29uc3QgbGF0ZVByb3BlcnRpZXMgPSBwcm9jZXNzUHJvcGVydGllcyhtZXRhZGF0YSwgc2V0dGluZ3MpO1xuXHRcdHByb2Nlc3NDb21tYW5kKG1ldGFkYXRhLCBzZXR0aW5ncyk7XG5cdFx0cHJvY2Vzc0FnZ3JlZ2F0aW9ucyhtZXRhZGF0YSwgc2V0dGluZ3MpO1xuXHRcdGNvbnN0IGNsYXNzRGVmID0gc2V0dGluZ3MuY2xhc3M7XG5cdFx0Y29uc3QgcmVmRGVmID0gc2V0dGluZ3MucmVmO1xuXHRcdGNvbnN0IGJpbmRpbmdEZWYgPSBzZXR0aW5ncy5iaW5kaW5nO1xuXHRcdGNvbnN0IGZsRGVsZWdhdGUgPSBzZXR0aW5nc1tGTF9ERUxFR0FURV07XG5cdFx0Y29uc3QgZHREZXNpZ250aW1lID0gc2V0dGluZ3NbRFRfREVTSUdOVElNRV07XG5cdFx0ZGVsZXRlIHNldHRpbmdzLnJlZjtcblx0XHRkZWxldGUgc2V0dGluZ3MuY2xhc3M7XG5cdFx0ZGVsZXRlIHNldHRpbmdzLmJpbmRpbmc7XG5cdFx0ZGVsZXRlIHNldHRpbmdzW0ZMX0RFTEVHQVRFXTtcblx0XHRkZWxldGUgc2V0dGluZ3NbRFRfREVTSUdOVElNRV07XG5cdFx0ZGVsZXRlIHNldHRpbmdzW0NPUkVfUkVRVUlSRV07IC8vIENvcmUgcmVxdWlyZSBpcyBub3QgdXNlZnVsIGluIGNvbnRyb2wgbW9kZVxuXHRcdGNvbnN0IHRhcmdldENvbnRyb2xJbnN0YW5jZSA9IG5ldyBDb250cm9sVHlwZShzZXR0aW5ncyBhcyAkQ29udHJvbFNldHRpbmdzKTtcblx0XHRpZiAoY2xhc3NEZWYpIHtcblx0XHRcdHRhcmdldENvbnRyb2xJbnN0YW5jZS5hZGRTdHlsZUNsYXNzKGNsYXNzRGVmKTtcblx0XHR9XG5cdFx0aWYgKHJlZkRlZikge1xuXHRcdFx0cmVmRGVmLnNldEN1cnJlbnQodGFyZ2V0Q29udHJvbEluc3RhbmNlIGFzIHVua25vd24gYXMgVCk7XG5cdFx0fVxuXHRcdGNvbnN0IGN1c3RvbVNldHRpbmdzID0gdGFyZ2V0Q29udHJvbEluc3RhbmNlLmRhdGEoXCJzYXAtdWktY3VzdG9tLXNldHRpbmdzXCIpID8/IHt9O1xuXHRcdGlmIChmbERlbGVnYXRlKSB7XG5cdFx0XHRjdXN0b21TZXR0aW5nc1tcInNhcC51aS5mbFwiXSA/Pz0ge307XG5cdFx0XHRjdXN0b21TZXR0aW5nc1tcInNhcC51aS5mbFwiXS5kZWxlZ2F0ZSA9IGZsRGVsZWdhdGU7XG5cdFx0fVxuXHRcdGlmIChkdERlc2lnbnRpbWUpIHtcblx0XHRcdGN1c3RvbVNldHRpbmdzW1wic2FwLnVpLmR0XCJdID8/PSB7fTtcblx0XHRcdGN1c3RvbVNldHRpbmdzW1wic2FwLnVpLmR0XCJdLmRlc2lnbnRpbWUgPSBkdERlc2lnbnRpbWU7XG5cdFx0fVxuXHRcdGlmIChPYmplY3Qua2V5cyhjdXN0b21TZXR0aW5ncykubGVuZ3RoID4gMCkge1xuXHRcdFx0dGFyZ2V0Q29udHJvbEluc3RhbmNlLmRhdGEoXCJzYXAtdWktY3VzdG9tLXNldHRpbmdzXCIsIGN1c3RvbVNldHRpbmdzKTtcblx0XHR9XG5cblx0XHRpZiAoYmluZGluZ0RlZikge1xuXHRcdFx0aWYgKHR5cGVvZiBiaW5kaW5nRGVmID09PSBcInN0cmluZ1wiKSB7XG5cdFx0XHRcdGNvbnN0IGJpbmRpbmdJbmZvID0gYmluZGluZ1BhcnNlcihiaW5kaW5nRGVmKTtcblx0XHRcdFx0aWYgKGJpbmRpbmdJbmZvKSB7XG5cdFx0XHRcdFx0dGFyZ2V0Q29udHJvbEluc3RhbmNlLmJpbmRFbGVtZW50KHtcblx0XHRcdFx0XHRcdG1vZGVsOiBiaW5kaW5nSW5mby5tb2RlbCA/PyB1bmRlZmluZWQsXG5cdFx0XHRcdFx0XHRwYXRoOiBiaW5kaW5nSW5mby5wYXRoLFxuXHRcdFx0XHRcdFx0cGFyYW1ldGVyczogYmluZGluZ0luZm8ucGFyYW1ldGVycyA/PyB1bmRlZmluZWRcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR0YXJnZXRDb250cm9sSW5zdGFuY2UuYmluZEVsZW1lbnQoYmluZGluZ0RlZik7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdC8vIFdlIGNvbnNpZGVyIGl0J3MgYW4gb2JqZWN0XG5cdFx0XHRcdE9iamVjdC5rZXlzKGJpbmRpbmdEZWYpLmZvckVhY2goKGJpbmRpbmdEZWZLZXkpID0+IHtcblx0XHRcdFx0XHR0YXJnZXRDb250cm9sSW5zdGFuY2UuYmluZEVsZW1lbnQoeyBtb2RlbDogYmluZGluZ0RlZktleSwgcGF0aDogYmluZGluZ0RlZltiaW5kaW5nRGVmS2V5XSB9KTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGZvciAoY29uc3QgbGF0ZVByb3BlcnRpZXNLZXkgaW4gbGF0ZVByb3BlcnRpZXMpIHtcblx0XHRcdGxhdGVQcm9wZXJ0aWVzW2xhdGVQcm9wZXJ0aWVzS2V5XVxuXHRcdFx0XHQudGhlbigodmFsdWUpID0+IHtcblx0XHRcdFx0XHRyZXR1cm4gdGFyZ2V0Q29udHJvbEluc3RhbmNlLnNldFByb3BlcnR5KGxhdGVQcm9wZXJ0aWVzS2V5LCB2YWx1ZSk7XG5cdFx0XHRcdH0pXG5cdFx0XHRcdC5jYXRjaCgoZXJyb3IpID0+IHtcblx0XHRcdFx0XHRMb2cuZXJyb3IoYENvdWxkbid0IHNldCBwcm9wZXJ0eSAke2xhdGVQcm9wZXJ0aWVzS2V5fSBvbiAke0NvbnRyb2xUeXBlLmdldE1ldGFkYXRhKCkuZ2V0TmFtZSgpfWAsIGVycm9yLCBcImpzeENvbnRyb2xcIik7XG5cdFx0XHRcdH0pO1xuXHRcdH1cblx0XHR0YXJnZXRDb250cm9sID0gdGFyZ2V0Q29udHJvbEluc3RhbmNlO1xuXHR9IGVsc2UgaWYgKHR5cGVvZiBDb250cm9sVHlwZSA9PT0gXCJmdW5jdGlvblwiKSB7XG5cdFx0Y29uc3QgY29udHJvbFR5cGVGbiA9IENvbnRyb2xUeXBlO1xuXHRcdHRhcmdldENvbnRyb2wgPSBjb250cm9sVHlwZUZuKHNldHRpbmdzIGFzICRDb250cm9sU2V0dGluZ3MpO1xuXHR9IGVsc2Uge1xuXHRcdHRhcmdldENvbnRyb2wgPSBuZXcgVGV4dCh7IHRleHQ6IFwiTWlzc2luZyBjb21wb25lbnQgXCIgKyAoQ29udHJvbFR5cGUgYXMgc3RyaW5nKSB9KTtcblx0fVxuXG5cdHJldHVy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
@@ -9,9 +9,8 @@ import {
9
9
  } from "sap/fe/base/BindingToolkit";
10
10
  import type { BindingInfoHolder, NonAbstractClass } from "sap/fe/base/ClassSupport";
11
11
  import type { ControlProperties, JSXContext, NonControlProperties, Ref } from "sap/fe/base/jsx-runtime/jsx";
12
- import type BuildingBlockTemplatingBase from "sap/fe/core/buildingBlocks/templating/BuildingBlockTemplatingBase";
13
- import type RuntimeBuildingBlock from "sap/fe/core/buildingBlocks/templating/RuntimeBuildingBlock";
14
12
  import Text from "sap/m/Text";
13
+ import BindingParser from "sap/ui/base/BindingParser";
15
14
  import DataType from "sap/ui/base/DataType";
16
15
  import { bindingParser } from "sap/ui/base/ManagedObject";
17
16
  import type ManagedObjectMetadata from "sap/ui/base/ManagedObjectMetadata";
@@ -66,9 +65,17 @@ function processAggregations(metadata: ManagedObjectMetadata, mSettings: Record<
66
65
  if (aggregationChildren[aggregationName] !== undefined) {
67
66
  if (mSettings.hasOwnProperty(aggregationName)) {
68
67
  if (typeof mSettings[aggregationName] === "string") {
69
- mSettings[aggregationName] = {
70
- path: mSettings[aggregationName]
71
- };
68
+ const resultingParse = BindingParser.complexParser(mSettings[aggregationName]);
69
+ if (resultingParse) {
70
+ mSettings[aggregationName] = {
71
+ path: resultingParse.path,
72
+ model: resultingParse.model
73
+ };
74
+ } else {
75
+ mSettings[aggregationName] = {
76
+ path: mSettings[aggregationName]
77
+ };
78
+ }
72
79
  }
73
80
  if (typeof aggregationChildren[aggregationName] === "function") {
74
81
  (mSettings[aggregationName] as { factory: Function }).factory = aggregationChildren[
@@ -84,6 +91,92 @@ function processAggregations(metadata: ManagedObjectMetadata, mSettings: Record<
84
91
  });
85
92
  }
86
93
 
94
+ /**
95
+ * Processes a binding toolkit expression property for function processProperties
96
+ *
97
+ * If the property is a constant, it compiles it as a constant. If the property is an aggregation,
98
+ * it compiles the expression as an object. Otherwise, it compiles the expression normally.
99
+ * @param settings The settings of the control
100
+ * @param settingsKey The key of the setting being processed
101
+ * @param bindingToolkitExpression The binding toolkit expression to process
102
+ * @param allProperties All properties of the control
103
+ */
104
+ function processBindingToolkitExpression(
105
+ settings: Record<string, unknown>,
106
+ settingsKey: keyof typeof settings,
107
+ bindingToolkitExpression: BindingToolkitExpression<unknown>,
108
+ allProperties: Record<string, unknown>
109
+ ): void {
110
+ if (isConstant(bindingToolkitExpression)) {
111
+ settings[settingsKey] = compileConstant(bindingToolkitExpression, false, true, true);
112
+ } else if (!Object.hasOwnProperty.call(allProperties, settingsKey)) {
113
+ // Aggregation case - we need to compile the expression but as an object
114
+ if (isPathInModelExpression(bindingToolkitExpression)) {
115
+ settings[settingsKey] = { path: bindingToolkitExpression.path, model: bindingToolkitExpression.modelName };
116
+ }
117
+ } else {
118
+ settings[settingsKey] = compileExpression(bindingToolkitExpression);
119
+ }
120
+ }
121
+
122
+ /**
123
+ * Processes a string property for function processProperties
124
+ *
125
+ * If the property is not a binding expression and does not match the expected format,
126
+ * it parses the value to provide the expected format. If the property is an event handler,
127
+ * it logs an error.
128
+ * @param settings The settings of the control
129
+ * @param settingsKey The key of the setting being processed
130
+ * @param value The string value to process
131
+ * @param allEvents All events of the control
132
+ * @param allProperties All properties of the control
133
+ * @param metadata Metadata of the control
134
+ */
135
+ function processStringProperty(
136
+ settings: Record<string, unknown>,
137
+ settingsKey: keyof typeof settings,
138
+ value: string,
139
+ allEvents: Record<string, unknown>,
140
+ allProperties: Record<string, unknown>,
141
+ metadata: ManagedObjectMetadata
142
+ ): void {
143
+ if (!value.startsWith("{")) {
144
+ if (Object.hasOwnProperty.call(allEvents, settingsKey)) {
145
+ Log.error(`Event handlers cannot be set as string in JSX, ${settingsKey} in ${metadata.getName()}`);
146
+ }
147
+ const propertyType = (allProperties[settingsKey] as { getType?: Function })?.getType?.();
148
+ if (propertyType && propertyType instanceof DataType && ["boolean", "int", "float"].includes(propertyType.getName())) {
149
+ settings[settingsKey] = propertyType.parseValue(value);
150
+ }
151
+ } else {
152
+ settings[settingsKey] = value;
153
+ }
154
+ }
155
+
156
+ /**
157
+ * Processes an object property for function processProperties.
158
+ *
159
+ * If the property is a promise, it adds it to the late properties map. If the property is a binding info holder,
160
+ * it sets the binding info to the settings.
161
+ * @param settings The settings of the control
162
+ * @param settingsKey The key of the setting being processed
163
+ * @param value The object value to process
164
+ * @param lateProperties A map of the control's late properties
165
+ */
166
+ function processObjectProperty(
167
+ settings: Record<string, unknown>,
168
+ settingsKey: keyof typeof settings,
169
+ value: unknown,
170
+ lateProperties: Record<string, Promise<unknown>>
171
+ ): void {
172
+ if ((value as Promise<unknown>).then) {
173
+ lateProperties[settingsKey] = value as Promise<unknown>;
174
+ delete settings[settingsKey];
175
+ } else if ((value as BindingInfoHolder<unknown>).__bindingInfo) {
176
+ settings[settingsKey] = (value as BindingInfoHolder<unknown>).__bindingInfo;
177
+ }
178
+ }
179
+
87
180
  /**
88
181
  * Processes the properties.
89
182
  *
@@ -99,34 +192,17 @@ function processProperties(metadata: ManagedObjectMetadata, settings: Record<str
99
192
  const lateProperties: Record<string, Promise<unknown>> = {};
100
193
  const allEvents = metadata.getAllEvents();
101
194
  const allProperties = metadata.getAllProperties();
195
+
102
196
  for (settingsKey in settings) {
103
197
  const value = settings[settingsKey];
104
198
  if (isBindingToolkitExpression(value)) {
105
- const bindingToolkitExpression: BindingToolkitExpression<unknown> = value;
106
- if (isConstant(bindingToolkitExpression)) {
107
- settings[settingsKey] = compileConstant(bindingToolkitExpression, false, true, true);
108
- } else if (!Object.hasOwnProperty.call(allProperties, settingsKey)) {
109
- // Aggregation case - we need to compile the expression but as an object
110
- if (isPathInModelExpression(bindingToolkitExpression)) {
111
- settings[settingsKey] = { path: bindingToolkitExpression.path, model: bindingToolkitExpression.modelName };
112
- }
113
- } else {
114
- settings[settingsKey] = compileExpression(bindingToolkitExpression);
115
- }
116
- } else if (value !== null && typeof value === "object" && (value as Promise<unknown>).then) {
117
- lateProperties[settingsKey] = value as Promise<unknown>;
118
- delete settings[settingsKey];
119
- } else if (typeof value === "string" && !value.startsWith("{")) {
120
- const propertyType = (allProperties[settingsKey] as { getType?: Function })?.getType?.();
121
- if (propertyType && propertyType instanceof DataType && ["boolean", "int", "float"].includes(propertyType.getName())) {
122
- settings[settingsKey] = propertyType.parseValue(value);
123
- }
124
- } else if (typeof value === "object" && (value as BindingInfoHolder<unknown>).__bindingInfo) {
125
- settings[settingsKey] = (value as BindingInfoHolder<unknown>).__bindingInfo;
199
+ processBindingToolkitExpression(settings, settingsKey, value, allProperties);
200
+ } else if (value !== null && typeof value === "object") {
201
+ processObjectProperty(settings, settingsKey, value, lateProperties);
202
+ } else if (typeof value === "string") {
203
+ processStringProperty(settings, settingsKey, value, allEvents, allProperties, metadata);
126
204
  } else if (value === undefined) {
127
- if (Object.hasOwnProperty.call(allEvents, settingsKey)) {
128
- delete settings[settingsKey];
129
- }
205
+ delete settings[settingsKey];
130
206
  }
131
207
  }
132
208
  return lateProperties;
@@ -171,9 +247,6 @@ const jsxControl = function <T extends Element>(
171
247
 
172
248
  if ((ControlType as { isFragment?: boolean })?.isFragment) {
173
249
  targetControl = settings.children as Control | Control[];
174
- } else if ((ControlType as typeof BuildingBlockTemplatingBase)?.isRuntime) {
175
- const runtimeBuildingBlock = new (ControlType as typeof RuntimeBuildingBlock)(settings as unknown as $ControlSettings);
176
- targetControl = runtimeBuildingBlock.getContent?.(jsxContext.view!, jsxContext.appComponent!);
177
250
  } else if (isAControl(ControlType)) {
178
251
  const metadata = ControlType.getMetadata();
179
252
  if (key !== undefined) {
@@ -217,9 +290,14 @@ const jsxControl = function <T extends Element>(
217
290
  if (typeof bindingDef === "string") {
218
291
  const bindingInfo = bindingParser(bindingDef);
219
292
  if (bindingInfo) {
220
- targetControlInstance.bindElement({ model: bindingInfo.model ?? undefined, path: bindingInfo.path });
293
+ targetControlInstance.bindElement({
294
+ model: bindingInfo.model ?? undefined,
295
+ path: bindingInfo.path,
296
+ parameters: bindingInfo.parameters ?? undefined
297
+ });
298
+ } else {
299
+ targetControlInstance.bindElement(bindingDef);
221
300
  }
222
- targetControlInstance.bindElement(bindingDef);
223
301
  } else {
224
302
  // We consider it's an object
225
303
  Object.keys(bindingDef).forEach((bindingDefKey) => {
@@ -22,7 +22,7 @@ sap.ui.define(["sap/ui/core/Lib"], function (Library) {
22
22
  controls: [],
23
23
  elements: [],
24
24
  // eslint-disable-next-line no-template-curly-in-string
25
- version: "1.132.0",
25
+ version: "1.134.0",
26
26
  noLibraryCSS: true
27
27
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
28
28
  });