@sapui5/sap.fe.core 1.141.2 → 1.142.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (207) hide show
  1. package/package.json +1 -1
  2. package/src/sap/fe/core/.library +4 -1
  3. package/src/sap/fe/core/ActionRuntime.js +48 -23
  4. package/src/sap/fe/core/ActionRuntime.ts +61 -35
  5. package/src/sap/fe/core/AppComponent.js +76 -6
  6. package/src/sap/fe/core/AppComponent.ts +94 -8
  7. package/src/sap/fe/core/AppStateHandler.js +9 -8
  8. package/src/sap/fe/core/AppStateHandler.ts +13 -9
  9. package/src/sap/fe/core/BaseController.js +8 -5
  10. package/src/sap/fe/core/BaseController.ts +6 -1
  11. package/src/sap/fe/core/CommonUtils.js +4 -123
  12. package/src/sap/fe/core/CommonUtils.ts +3 -172
  13. package/src/sap/fe/core/ExtensionAPI.js +3 -10
  14. package/src/sap/fe/core/ExtensionAPI.ts +2 -14
  15. package/src/sap/fe/core/PageController.js +64 -43
  16. package/src/sap/fe/core/PageController.ts +62 -47
  17. package/src/sap/fe/core/TemplateComponent.js +20 -1
  18. package/src/sap/fe/core/TemplateComponent.ts +24 -2
  19. package/src/sap/fe/core/buildingBlocks/BuildingBlock.js +37 -24
  20. package/src/sap/fe/core/buildingBlocks/BuildingBlock.ts +47 -31
  21. package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockSupport.js +1 -1
  22. package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockSupport.ts +4 -0
  23. package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplateProcessor.js +4 -1
  24. package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplateProcessor.ts +3 -0
  25. package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplatingBase.js +4 -1
  26. package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplatingBase.ts +4 -0
  27. package/src/sap/fe/core/controllerextensions/BaseControllerExtension.js +7 -5
  28. package/src/sap/fe/core/controllerextensions/BaseControllerExtension.ts +22 -2
  29. package/src/sap/fe/core/controllerextensions/CollaborativeDraft.js +82 -39
  30. package/src/sap/fe/core/controllerextensions/CollaborativeDraft.ts +91 -54
  31. package/src/sap/fe/core/controllerextensions/EditFlow.js +25 -3
  32. package/src/sap/fe/core/controllerextensions/EditFlow.ts +27 -3
  33. package/src/sap/fe/core/controllerextensions/InlineEditFlow.js +9 -7
  34. package/src/sap/fe/core/controllerextensions/InlineEditFlow.ts +17 -5
  35. package/src/sap/fe/core/controllerextensions/InternalRouting.js +37 -18
  36. package/src/sap/fe/core/controllerextensions/InternalRouting.ts +49 -17
  37. package/src/sap/fe/core/controllerextensions/KPIManagement.js +30 -15
  38. package/src/sap/fe/core/controllerextensions/KPIManagement.ts +32 -14
  39. package/src/sap/fe/core/controllerextensions/MessageHandler.js +9 -10
  40. package/src/sap/fe/core/controllerextensions/MessageHandler.ts +8 -9
  41. package/src/sap/fe/core/controllerextensions/Paginator.js +2 -2
  42. package/src/sap/fe/core/controllerextensions/Paginator.ts +1 -1
  43. package/src/sap/fe/core/controllerextensions/Placeholder.js +10 -2
  44. package/src/sap/fe/core/controllerextensions/Placeholder.ts +5 -1
  45. package/src/sap/fe/core/controllerextensions/Recommendations.js +3 -3
  46. package/src/sap/fe/core/controllerextensions/Recommendations.ts +2 -2
  47. package/src/sap/fe/core/controllerextensions/Routing.js +9 -5
  48. package/src/sap/fe/core/controllerextensions/Routing.ts +7 -7
  49. package/src/sap/fe/core/controllerextensions/Share.js +5 -5
  50. package/src/sap/fe/core/controllerextensions/Share.ts +4 -4
  51. package/src/sap/fe/core/controllerextensions/SideEffects.js +1 -1
  52. package/src/sap/fe/core/controllerextensions/SideEffects.ts +17 -2
  53. package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.js +2 -2
  54. package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.ts +1 -1
  55. package/src/sap/fe/core/controllerextensions/editFlow/NotApplicableContextDialog.js +3 -3
  56. package/src/sap/fe/core/controllerextensions/editFlow/NotApplicableContextDialog.tsx +3 -2
  57. package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.js +33 -11
  58. package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.ts +45 -14
  59. package/src/sap/fe/core/controllerextensions/editFlow/draft.js +37 -3
  60. package/src/sap/fe/core/controllerextensions/editFlow/draft.ts +41 -8
  61. package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.js +10 -4
  62. package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.ts +6 -1
  63. package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataOperation.js +7 -7
  64. package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataOperation.ts +6 -5
  65. package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataStrictHandling.js +2 -2
  66. package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataStrictHandling.ts +1 -1
  67. package/src/sap/fe/core/controllerextensions/editFlow/operations/OperationParameters.js +2 -1
  68. package/src/sap/fe/core/controllerextensions/editFlow/operations/OperationParameters.ts +1 -0
  69. package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.js +10 -6
  70. package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.ts +6 -5
  71. package/src/sap/fe/core/controllerextensions/routing/RouterProxy.js +11 -9
  72. package/src/sap/fe/core/controllerextensions/routing/RouterProxy.ts +22 -9
  73. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DraftDataLossDialog.js +9 -4
  74. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DraftDataLossDialog.tsx +10 -4
  75. package/src/sap/fe/core/controls/Recommendations/ConfirmRecommendationDialog.js +31 -2
  76. package/src/sap/fe/core/controls/Recommendations/ConfirmRecommendationDialog.tsx +34 -1
  77. package/src/sap/fe/core/converters/ManifestSettings.js +7 -1
  78. package/src/sap/fe/core/converters/ManifestSettings.ts +37 -0
  79. package/src/sap/fe/core/converters/ManifestWrapper.js +29 -9
  80. package/src/sap/fe/core/converters/ManifestWrapper.ts +29 -11
  81. package/src/sap/fe/core/converters/annotations/DataField.js +46 -19
  82. package/src/sap/fe/core/converters/annotations/DataField.ts +93 -19
  83. package/src/sap/fe/core/converters/common/AnnotationConverter.js +88 -35
  84. package/src/sap/fe/core/converters/controls/Common/Action.js +57 -20
  85. package/src/sap/fe/core/converters/controls/Common/Action.ts +71 -21
  86. package/src/sap/fe/core/converters/controls/Common/Chart.js +13 -3
  87. package/src/sap/fe/core/converters/controls/Common/Chart.ts +20 -4
  88. package/src/sap/fe/core/converters/controls/Common/Form.js +18 -3
  89. package/src/sap/fe/core/converters/controls/Common/Form.ts +23 -1
  90. package/src/sap/fe/core/converters/controls/Common/Table.js +89 -57
  91. package/src/sap/fe/core/converters/controls/Common/Table.ts +110 -56
  92. package/src/sap/fe/core/converters/controls/Common/filter/FilterRestrictions.js +243 -0
  93. package/src/sap/fe/core/converters/controls/Common/filter/FilterRestrictions.ts +309 -0
  94. package/src/sap/fe/core/converters/controls/Common/table/Columns.js +142 -58
  95. package/src/sap/fe/core/converters/controls/Common/table/Columns.ts +172 -78
  96. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +12 -18
  97. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +13 -27
  98. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +7 -16
  99. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +6 -17
  100. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js +16 -5
  101. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +16 -5
  102. package/src/sap/fe/core/converters/helpers/Aggregation.js +12 -2
  103. package/src/sap/fe/core/converters/helpers/Aggregation.ts +11 -1
  104. package/src/sap/fe/core/converters/helpers/DataFieldHelper.js +27 -3
  105. package/src/sap/fe/core/converters/helpers/DataFieldHelper.ts +28 -1
  106. package/src/sap/fe/core/converters/helpers/ID.js +3 -1
  107. package/src/sap/fe/core/converters/helpers/ID.ts +1 -0
  108. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +5 -2
  109. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +7 -1
  110. package/src/sap/fe/core/converters/templates/ListReportConverter.js +11 -3
  111. package/src/sap/fe/core/converters/templates/ListReportConverter.ts +12 -4
  112. package/src/sap/fe/core/converters/templates/ObjectPageConverter.js +19 -8
  113. package/src/sap/fe/core/converters/templates/ObjectPageConverter.ts +18 -7
  114. package/src/sap/fe/core/designtime/AnnotationBasedChanges.js +8 -3
  115. package/src/sap/fe/core/designtime/AnnotationBasedChanges.ts +7 -2
  116. package/src/sap/fe/core/formatters/FPMFormatter.js +2 -2
  117. package/src/sap/fe/core/formatters/FPMFormatter.ts +1 -1
  118. package/src/sap/fe/core/fpm/Component.js +8 -1
  119. package/src/sap/fe/core/fpm/Component.ts +8 -0
  120. package/src/sap/fe/core/fpm/manifest.json +1 -1
  121. package/src/sap/fe/core/helpers/AppStartupHelper.js +79 -25
  122. package/src/sap/fe/core/helpers/AppStartupHelper.ts +91 -32
  123. package/src/sap/fe/core/helpers/ManifestHelper.js +6 -3
  124. package/src/sap/fe/core/helpers/ManifestHelper.ts +3 -0
  125. package/src/sap/fe/core/helpers/MetaModelFunction.js +12 -3
  126. package/src/sap/fe/core/helpers/MetaModelFunction.ts +11 -3
  127. package/src/sap/fe/core/helpers/ModelHelper.js +48 -9
  128. package/src/sap/fe/core/helpers/ModelHelper.ts +55 -10
  129. package/src/sap/fe/core/helpers/TypeGuards.js +12 -2
  130. package/src/sap/fe/core/helpers/TypeGuards.ts +10 -1
  131. package/src/sap/fe/core/helpers/WebSocket.js +6 -7
  132. package/src/sap/fe/core/helpers/WebSocket.ts +10 -6
  133. package/src/sap/fe/core/library.js +30 -3
  134. package/src/sap/fe/core/library.ts +28 -1
  135. package/src/sap/fe/core/messagebundle.properties +8 -1
  136. package/src/sap/fe/core/messagebundle_ar.properties +7 -0
  137. package/src/sap/fe/core/messagebundle_bg.properties +10 -3
  138. package/src/sap/fe/core/messagebundle_ca.properties +7 -0
  139. package/src/sap/fe/core/messagebundle_cnr.properties +7 -0
  140. package/src/sap/fe/core/messagebundle_cs.properties +7 -0
  141. package/src/sap/fe/core/messagebundle_cy.properties +8 -1
  142. package/src/sap/fe/core/messagebundle_da.properties +7 -0
  143. package/src/sap/fe/core/messagebundle_de.properties +7 -0
  144. package/src/sap/fe/core/messagebundle_el.properties +7 -0
  145. package/src/sap/fe/core/messagebundle_en.properties +8 -1
  146. package/src/sap/fe/core/messagebundle_en_GB.properties +7 -0
  147. package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +5 -0
  148. package/src/sap/fe/core/messagebundle_es.properties +8 -1
  149. package/src/sap/fe/core/messagebundle_es_MX.properties +7 -0
  150. package/src/sap/fe/core/messagebundle_et.properties +7 -0
  151. package/src/sap/fe/core/messagebundle_fi.properties +7 -0
  152. package/src/sap/fe/core/messagebundle_fr.properties +16 -9
  153. package/src/sap/fe/core/messagebundle_fr_CA.properties +7 -0
  154. package/src/sap/fe/core/messagebundle_hi.properties +8 -1
  155. package/src/sap/fe/core/messagebundle_hr.properties +7 -0
  156. package/src/sap/fe/core/messagebundle_hu.properties +7 -0
  157. package/src/sap/fe/core/messagebundle_id.properties +7 -0
  158. package/src/sap/fe/core/messagebundle_it.properties +7 -0
  159. package/src/sap/fe/core/messagebundle_iw.properties +7 -0
  160. package/src/sap/fe/core/messagebundle_ja.properties +8 -1
  161. package/src/sap/fe/core/messagebundle_kk.properties +7 -0
  162. package/src/sap/fe/core/messagebundle_ko.properties +7 -0
  163. package/src/sap/fe/core/messagebundle_lt.properties +7 -0
  164. package/src/sap/fe/core/messagebundle_lv.properties +7 -0
  165. package/src/sap/fe/core/messagebundle_mk.properties +7 -0
  166. package/src/sap/fe/core/messagebundle_ms.properties +7 -0
  167. package/src/sap/fe/core/messagebundle_nl.properties +7 -0
  168. package/src/sap/fe/core/messagebundle_no.properties +7 -0
  169. package/src/sap/fe/core/messagebundle_pl.properties +7 -0
  170. package/src/sap/fe/core/messagebundle_pt.properties +7 -0
  171. package/src/sap/fe/core/messagebundle_pt_PT.properties +7 -0
  172. package/src/sap/fe/core/messagebundle_ro.properties +7 -0
  173. package/src/sap/fe/core/messagebundle_ru.properties +7 -0
  174. package/src/sap/fe/core/messagebundle_sh.properties +7 -0
  175. package/src/sap/fe/core/messagebundle_sk.properties +7 -0
  176. package/src/sap/fe/core/messagebundle_sl.properties +7 -0
  177. package/src/sap/fe/core/messagebundle_sr.properties +7 -0
  178. package/src/sap/fe/core/messagebundle_sv.properties +7 -0
  179. package/src/sap/fe/core/messagebundle_th.properties +7 -0
  180. package/src/sap/fe/core/messagebundle_tr.properties +7 -0
  181. package/src/sap/fe/core/messagebundle_uk.properties +7 -0
  182. package/src/sap/fe/core/messagebundle_vi.properties +7 -0
  183. package/src/sap/fe/core/messagebundle_zh_CN.properties +8 -1
  184. package/src/sap/fe/core/messagebundle_zh_TW.properties +7 -0
  185. package/src/sap/fe/core/rootView/Fcl.controller.js +21 -7
  186. package/src/sap/fe/core/rootView/Fcl.controller.ts +28 -6
  187. package/src/sap/fe/core/rootView/RootViewBaseController.js +96 -88
  188. package/src/sap/fe/core/rootView/RootViewBaseController.ts +106 -96
  189. package/src/sap/fe/core/services/EnvironmentServiceFactory.js +14 -10
  190. package/src/sap/fe/core/services/EnvironmentServiceFactory.ts +15 -10
  191. package/src/sap/fe/core/services/RoutingServiceFactory.js +16 -7
  192. package/src/sap/fe/core/services/RoutingServiceFactory.ts +23 -10
  193. package/src/sap/fe/core/services/SideEffectsServiceFactory.js +9 -7
  194. package/src/sap/fe/core/services/SideEffectsServiceFactory.ts +13 -8
  195. package/src/sap/fe/core/services/TemplatedViewServiceFactory.js +62 -6
  196. package/src/sap/fe/core/services/TemplatedViewServiceFactory.ts +74 -11
  197. package/src/sap/fe/core/services/collaborativeDraftServiceFactory.js +33 -15
  198. package/src/sap/fe/core/services/collaborativeDraftServiceFactory.ts +31 -11
  199. package/src/sap/fe/core/templating/DisplayModeFormatter.js +4 -5
  200. package/src/sap/fe/core/templating/DisplayModeFormatter.ts +4 -6
  201. package/src/sap/fe/core/templating/UIFormatters.js +17 -2
  202. package/src/sap/fe/core/templating/UIFormatters.ts +25 -1
  203. package/src/sap/fe/core/types/sap.fe.core-auto-ext.d.js +10 -0
  204. package/src/sap/fe/core/types/sap.fe.core-auto-ext.d.ts +369 -0
  205. package/src/sap/fe/core/types/sap.fe.core-manual-ext.d.js +9 -0
  206. package/src/sap/fe/core/types/sap.fe.core-manual-ext.d.ts +49 -0
  207. package/ui5.yaml +2 -0
@@ -162,7 +162,7 @@ export const FieldEditMode = {
162
162
  export const getDisplayMode = function (
163
163
  oDataModelObjectPath: DataModelObjectPath<Property | DataFieldAbstractTypes | DataPointTypeTypes>
164
164
  ): DisplayMode {
165
- return DisplayModeFormatter.getDisplayMode(oDataModelObjectPath.targetObject, oDataModelObjectPath);
165
+ return DisplayModeFormatter.getDisplayMode(oDataModelObjectPath.targetObject, oDataModelObjectPath.targetEntityType);
166
166
  };
167
167
  export const getEditableExpressionAsObject = function (
168
168
  oPropertyPath: PropertyOrPath<Property>,
@@ -1010,3 +1010,27 @@ export const getVisibleExpressionForBreadcrumbs = function (viewData: ViewData):
1010
1010
  ? "{fclhelper>/breadCrumbIsVisible}"
1011
1011
  : !!viewData.breadcrumbsHierarchyMode;
1012
1012
  };
1013
+
1014
+ /**
1015
+ * Get the tooltip value from the data model path or property data model path.
1016
+ * @param dataModelPath
1017
+ * @param propertyDataModelPath
1018
+ * @returns The tooltip binding expression
1019
+ */
1020
+ export const getTooltipValue = function (
1021
+ dataModelPath: DataModelObjectPath<DataField | DataPointType> | undefined,
1022
+ propertyDataModelPath?: DataModelObjectPath<Property> | undefined
1023
+ ): BindingToolkitExpression<string> | undefined {
1024
+ let result = dataModelPath?.targetObject?.annotations?.Common?.QuickInfo
1025
+ ? getExpressionFromAnnotation(dataModelPath.targetObject?.annotations?.Common?.QuickInfo, getRelativePaths(dataModelPath))
1026
+ : undefined;
1027
+ if (result == undefined) {
1028
+ result = propertyDataModelPath?.targetObject?.annotations?.Common?.QuickInfo
1029
+ ? getExpressionFromAnnotation(
1030
+ propertyDataModelPath.targetObject?.annotations?.Common?.QuickInfo,
1031
+ getRelativePaths(propertyDataModelPath)
1032
+ )
1033
+ : undefined;
1034
+ }
1035
+ return result;
1036
+ };
@@ -0,0 +1,10 @@
1
+ /*!
2
+ * SAP UI development toolkit for HTML5 (SAPUI5)
3
+ * (c) Copyright 2009-2025 SAP SE. All rights reserved
4
+ */
5
+ sap.ui.define([], function () {
6
+ "use strict";
7
+
8
+ // This is autogenerated, do not edit
9
+ }, false);
10
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJzYXAuZmUuY29yZS1hdXRvLWV4dC5kLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIFRoaXMgaXMgYXV0b2dlbmVyYXRlZCwgZG8gbm90IGVkaXRcblxuZGVjbGFyZSBtb2R1bGUgXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9NZXNzYWdlSGFuZGxlck92ZXJyaWRlc1wiIHtcblx0LyoqXG5cdCAqIERlZmluZXMgdGhlIG1lc3NhZ2UgZGV0YWlscyByZWxldmFudCBmb3IgdGhlIE1lc3NhZ2VCdXR0b24gYnVpbGRpbmcgYmxvY2sgdG8gZGlzcGxheSBhIHBvcG92ZXIuXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdGV4cG9ydCB0eXBlIE1lc3NhZ2VEZXRhaWwgPSB7XG5cdFx0bWVzc2FnZTogTWVzc2FnZTtcblx0XHRncm91cE5hbWU/OiBzdHJpbmc7XG5cdFx0YWN0aXZlVGl0bGVIYW5kbGVyPzogRnVuY3Rpb247XG5cdH07XG5cdGltcG9ydCB0eXBlIE1lc3NhZ2UgZnJvbSBcInNhcC91aS9jb3JlL21lc3NhZ2UvTWVzc2FnZVwiO1xuXHRleHBvcnQgZGVmYXVsdCBpbnRlcmZhY2UgTWVzc2FnZUhhbmRsZXJPdmVycmlkZXMge1xuXHRcdC8qKlxuXHRcdCAqIEFsbG93cyB0aGUgY29uc3VtZXIgb2YgdGhlIE1lc3NhZ2VCdXR0b24gYnVpbGRpbmcgYmxvY2sgdG8gZGVjaWRlIHdoaWNoIGJvdW5kIG1lc3NhZ2VzIGFyZSBzaG93biBhbmQgaG93LlxuXHRcdCAqXG5cdFx0ICogVGhpcyBob29rIGlzIGNhbGxlZCB3aGVuIHRoZSBNZXNzYWdlQnV0dG9uIGJ1aWxkaW5nIGJsb2NrIGRldGVjdHMgYSBjaGFuZ2UgaW4gdGhlIG1lc3NhZ2UgbW9kZWwuXG5cdFx0ICogVGhlIGhvb2tzIGFsbG93IHlvdSB0byBkZWZpbmUgdGhlIGJlaGF2aW9yIGZvciBtZXNzYWdlcyBpbiB0aGUgTWVzc2FnZUJ1dHRvbiBidWlsZGluZyBibG9jay5cblx0XHQgKlxuXHRcdCAqIENvbnN1bWVycyBhcmUgYWJsZSB0byBkbyB0aGUgZm9sbG93aW5nIHdpdGggdGhpcyBob29rOlxuXHRcdCAqXG5cdFx0ICogMS4gRmlsdGVyIG91dCBtZXNzYWdlcyBzbyB0aGF0IHRoZXkgYXJlIG5vdCBzaG93biBvbiB0aGUgbWVzc2FnZSBidXR0b24uXG5cdFx0ICogMi4gR3JvdXAgbWVzc2FnZXMgYmFzZWQgb24gdGhlaXIgVUkuXG5cdFx0ICogMy4gUHJvdmlkZSBhIHByZXNzZXIgaGFuZGxlciBpZiB0aGUgbWVzc2FnZSBzaG91bGQgZGlzcGxheSBhcyBhIGxpbmsuXG5cdFx0ICogQHBhcmFtIF9tZXNzYWdlRGV0YWlscyBPYmplY3QgY29udGFpbmluZyB0aGUgZGV0YWlscyByZWxhdGVkIHRvIHRoZSBtZXNzYWdlLlxuXHRcdCAqIEBwYXJhbSBfbWVzc2FnZURldGFpbHMubWVzc2FnZSBUaGUgbWVzc2FnZSBmcm9tIHRoZSBtZXNzYWdlLiBJdCBtdXN0IG5vdCBiZSBtb2RpZmllZCBkaXJlY3RseS5cblx0XHQgKiBAcGFyYW0gX21lc3NhZ2VEZXRhaWxzLmdyb3VwTmFtZSBUaGUgZ3JvdXAgbmFtZSBhc3NvY2lhdGVkIHdpdGggdGhlIGN1cnJlbnQgbWVzc2FnZS5cblx0XHQgKiBAcGFyYW0gX21lc3NhZ2VEZXRhaWxzLmFjdGl2ZVRpdGxlSGFuZGxlciBGdW5jdGlvbiB0byBoYW5kbGUgdGhlIGNsaWNrIGV2ZW50IG9uIGEgbWVzc2FnZSBpbiB0aGUgTWVzc2FnZUJ1dHRvbiBidWlsZGluZyBibG9jay5cblx0XHQgKiBAcmV0dXJucyBBIHByb21pc2UgdGhhdCBtdXN0IGJlIHJldHVybmVkIGJ5IHRoZSBvdmVycmlkZGVuIG1ldGhvZC5cblx0XHQgKiBAcHVibGljXG5cdFx0ICovXG5cdFx0YmVmb3JlU2hvd01lc3NhZ2VCdXR0b24oX21lc3NhZ2VEZXRhaWxzOiBNZXNzYWdlRGV0YWlsW10pOiBQcm9taXNlPHZvaWQ+O1xuXHR9XG59XG5cbmRlY2xhcmUgbW9kdWxlIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvRWRpdEZsb3dPdmVycmlkZXNcIiB7XG5cdGltcG9ydCB0eXBlIHsgZGVmYXVsdCBhcyBDb250ZXh0IH0gZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9Db250ZXh0XCI7XG5cdGV4cG9ydCBkZWZhdWx0IGludGVyZmFjZSBFZGl0Rmxvd092ZXJyaWRlcyB7XG5cdFx0LyoqXG5cdFx0ICogVGhpcyBmdW5jdGlvbiBjYW4gYmUgdXNlZCB0byBpbnRlcmNlcHQgdGhlICdDcmVhdGUnIGFjdGlvbi4gWW91IGNhbiBleGVjdXRlIGN1c3RvbSBjb2RpbmcgaW4gdGhpcyBmdW5jdGlvbi5cblx0XHQgKiBUaGUgZnJhbWV3b3JrIHdhaXRzIGZvciB0aGUgcmV0dXJuZWQgcHJvbWlzZSB0byBiZSByZXNvbHZlZCBiZWZvcmUgY29udGludWluZyB0aGUgJ0NyZWF0ZScgYWN0aW9uLlxuXHRcdCAqIElmIHlvdSByZWplY3QgdGhlIHByb21pc2UsIHRoZSAnQ3JlYXRlJyBhY3Rpb24gaXMgc3RvcHBlZC5cblx0XHQgKlxuXHRcdCAqIFRoaXMgZnVuY3Rpb24gaXMgbWVhbnQgdG8gYmUgaW5kaXZpZHVhbGx5IG92ZXJyaWRkZW4gYnkgY29uc3VtaW5nIGNvbnRyb2xsZXJzLCBidXQgbm90IHRvIGJlIGNhbGxlZCBkaXJlY3RseS5cblx0XHQgKiBUaGUgb3ZlcnJpZGUgZXhlY3V0aW9uIGlzOiB7QGxpbmsgc2FwLnVpLmNvcmUubXZjLk92ZXJyaWRlRXhlY3V0aW9uLkFmdGVyfS5cblx0XHQgKiBAcGFyYW0gX21QYXJhbWV0ZXJzIE9iamVjdCBjb250YWluaW5nIHRoZSBwYXJhbWV0ZXJzIHBhc3NlZCB0byBvbkJlZm9yZUNyZWF0ZVxuXHRcdCAqIEBwYXJhbSBfbVBhcmFtZXRlcnMuY29udGV4dFBhdGggUGF0aCBwb2ludGluZyB0byB0aGUgY29udGV4dCBvbiB3aGljaCBDcmVhdGUgYWN0aW9uIGlzIHRyaWdnZXJlZFxuXHRcdCAqIEBwYXJhbSBfbVBhcmFtZXRlcnMuY3JlYXRlUGFyYW1ldGVycyBBcnJheSBvZiB2YWx1ZXMgdGhhdCBhcmUgZmlsbGVkIGluIHRoZSBBY3Rpb24gUGFyYW1ldGVyIERpYWxvZ1xuXHRcdCAqIEByZXR1cm5zIEEgcHJvbWlzZSB0byBiZSByZXR1cm5lZCBieSB0aGUgb3ZlcnJpZGRlbiBtZXRob2QuIElmIHJlc29sdmVkLCB0aGUgJ0NyZWF0ZScgYWN0aW9uIGlzIHRyaWdnZXJlZC4gSWYgcmVqZWN0ZWQsIHRoZSAnQ3JlYXRlJyBhY3Rpb24gaXMgbm90IHRyaWdnZXJlZC5cblx0XHQgKiBAcHVibGljXG5cdFx0ICogQHNpbmNlIDEuOTguMFxuXHRcdCAqL1xuXHRcdG9uQmVmb3JlQ3JlYXRlKF9tUGFyYW1ldGVycz86IHsgY29udGV4dFBhdGg/OiBzdHJpbmc7IGNyZWF0ZVBhcmFtZXRlcnM/OiB1bmtub3duW10gfSk6IFByb21pc2U8dm9pZD47XG5cdFx0LyoqXG5cdFx0ICogVGhpcyBmdW5jdGlvbiBjYW4gYmUgdXNlZCB0byBpbnRlcmNlcHQgdGhlICdFZGl0JyBhY3Rpb24uIFlvdSBjYW4gZXhlY3V0ZSBjdXN0b20gY29kaW5nIGluIHRoaXMgZnVuY3Rpb24uXG5cdFx0ICogVGhlIGZyYW1ld29yayB3YWl0cyBmb3IgdGhlIHJldHVybmVkIHByb21pc2UgdG8gYmUgcmVzb2x2ZWQgYmVmb3JlIGNvbnRpbnVpbmcgdGhlICdFZGl0JyBhY3Rpb24uXG5cdFx0ICogSWYgeW91IHJlamVjdCB0aGUgcHJvbWlzZSwgdGhlICdFZGl0JyBhY3Rpb24gaXMgc3RvcHBlZCBhbmQgdGhlIHVzZXIgc3RheXMgaW4gZGlzcGxheSBtb2RlLlxuXHRcdCAqXG5cdFx0ICogVGhpcyBmdW5jdGlvbiBpcyBtZWFudCB0byBiZSBpbmRpdmlkdWFsbHkgb3ZlcnJpZGRlbiBieSBjb25zdW1pbmcgY29udHJvbGxlcnMsIGJ1dCBub3QgdG8gYmUgY2FsbGVkIGRpcmVjdGx5LlxuXHRcdCAqIFRoZSBvdmVycmlkZSBleGVjdXRpb24gaXM6IHtAbGluayBzYXAudWkuY29yZS5tdmMuT3ZlcnJpZGVFeGVjdXRpb24uQWZ0ZXJ9LlxuXHRcdCAqIEBwYXJhbSBfbVBhcmFtZXRlcnMgT2JqZWN0IGNvbnRhaW5pbmcgdGhlIHBhcmFtZXRlcnMgcGFzc2VkIHRvIG9uQmVmb3JlRWRpdFxuXHRcdCAqIEBwYXJhbSBfbVBhcmFtZXRlcnMuY29udGV4dCBQYWdlIGNvbnRleHQgdGhhdCBpcyBnb2luZyB0byBiZSBlZGl0ZWQuXG5cdFx0ICogQHJldHVybnMgQSBwcm9taXNlIHRvIGJlIHJldHVybmVkIGJ5IHRoZSBvdmVycmlkZGVuIG1ldGhvZC4gSWYgcmVzb2x2ZWQsIHRoZSAnRWRpdCcgYWN0aW9uIGlzIHRyaWdnZXJlZC4gSWYgcmVqZWN0ZWQsIHRoZSAnRWRpdCcgYWN0aW9uIGlzIG5vdCB0cmlnZ2VyZWQgYW5kIHRoZSB1c2VyIHN0YXlzIGluIGRpc3BsYXkgbW9kZS5cblx0XHQgKiBAcHVibGljXG5cdFx0ICogQHNpbmNlIDEuOTguMFxuXHRcdCAqL1xuXHRcdG9uQmVmb3JlRWRpdChfbVBhcmFtZXRlcnM/OiB7IGNvbnRleHQ/OiBDb250ZXh0IH0pOiBQcm9taXNlPHZvaWQ+O1xuXHRcdC8qKlxuXHRcdCAqIFRoaXMgZnVuY3Rpb24gY2FuIGJlIHVzZWQgdG8gaW50ZXJjZXB0IHRoZSAnU2F2ZScgYWN0aW9uLiBZb3UgY2FuIGV4ZWN1dGUgY3VzdG9tIGNvZGluZyBpbiB0aGlzIGZ1bmN0aW9uLlxuXHRcdCAqIFRoZSBmcmFtZXdvcmsgd2FpdHMgZm9yIHRoZSByZXR1cm5lZCBwcm9taXNlIHRvIGJlIHJlc29sdmVkIGJlZm9yZSBjb250aW51aW5nIHRoZSAnU2F2ZScgYWN0aW9uLlxuXHRcdCAqIElmIHlvdSByZWplY3QgdGhlIHByb21pc2UsIHRoZSAnU2F2ZScgYWN0aW9uIGlzIHN0b3BwZWQgYW5kIHRoZSB1c2VyIHN0YXlzIGluIGVkaXQgbW9kZS5cblx0XHQgKlxuXHRcdCAqIFRoaXMgZnVuY3Rpb24gaXMgbWVhbnQgdG8gYmUgaW5kaXZpZHVhbGx5IG92ZXJyaWRkZW4gYnkgY29uc3VtaW5nIGNvbnRyb2xsZXJzLCBidXQgbm90IHRvIGJlIGNhbGxlZCBkaXJlY3RseS5cblx0XHQgKiBUaGUgb3ZlcnJpZGUgZXhlY3V0aW9uIGlzOiB7QGxpbmsgc2FwLnVpLmNvcmUubXZjLk92ZXJyaWRlRXhlY3V0aW9uLkFmdGVyfS5cblx0XHQgKiBAcGFyYW0gX21QYXJhbWV0ZXJzIE9iamVjdCBjb250YWluaW5nIHRoZSBwYXJhbWV0ZXJzIHBhc3NlZCB0byBvbkJlZm9yZVNhdmVcblx0XHQgKiBAcGFyYW0gX21QYXJhbWV0ZXJzLmNvbnRleHQgUGFnZSBjb250ZXh0IHRoYXQgaXMgZ29pbmcgdG8gYmUgc2F2ZWQuXG5cdFx0ICogQHJldHVybnMgQSBwcm9taXNlIHRvIGJlIHJldHVybmVkIGJ5IHRoZSBvdmVycmlkZGVuIG1ldGhvZC4gSWYgcmVzb2x2ZWQsIHRoZSAnU2F2ZScgYWN0aW9uIGlzIHRyaWdnZXJlZC4gSWYgcmVqZWN0ZWQsIHRoZSAnU2F2ZScgYWN0aW9uIGlzIG5vdCB0cmlnZ2VyZWQgYW5kIHRoZSB1c2VyIHN0YXlzIGluIGVkaXQgbW9kZS5cblx0XHQgKiBAcHVibGljXG5cdFx0ICogQHNpbmNlIDEuOTAuMFxuXHRcdCAqL1xuXHRcdG9uQmVmb3JlU2F2ZShfbVBhcmFtZXRlcnM/OiB7IGNvbnRleHQ/OiBDb250ZXh0IH0pOiBQcm9taXNlPHZvaWQ+O1xuXHRcdC8qKlxuXHRcdCAqIFRoaXMgZnVuY3Rpb24gY2FuIGJlIHVzZWQgdG8gaW50ZXJjZXB0IHRoZSAnRGlzY2FyZCcgYWN0aW9uLiBZb3UgY2FuIGV4ZWN1dGUgY3VzdG9tIGNvZGluZyBpbiB0aGlzIGZ1bmN0aW9uLlxuXHRcdCAqIFRoZSBmcmFtZXdvcmsgd2FpdHMgZm9yIHRoZSByZXR1cm5lZCBwcm9taXNlIHRvIGJlIHJlc29sdmVkIGJlZm9yZSBjb250aW51aW5nIHRoZSAnRGlzY2FyZCcgYWN0aW9uLlxuXHRcdCAqIElmIHlvdSByZWplY3QgdGhlIHByb21pc2UsIHRoZSAnRGlzY2FyZCcgYWN0aW9uIGlzIHN0b3BwZWQgYW5kIHRoZSB1c2VyIHN0YXlzIGluIGVkaXQgbW9kZS5cblx0XHQgKlxuXHRcdCAqIFRoaXMgZnVuY3Rpb24gaXMgbWVhbnQgdG8gYmUgaW5kaXZpZHVhbGx5IG92ZXJyaWRkZW4gYnkgY29uc3VtaW5nIGNvbnRyb2xsZXJzLCBidXQgbm90IHRvIGJlIGNhbGxlZCBkaXJlY3RseS5cblx0XHQgKiBUaGUgb3ZlcnJpZGUgZXhlY3V0aW9uIGlzOiB7QGxpbmsgc2FwLnVpLmNvcmUubXZjLk92ZXJyaWRlRXhlY3V0aW9uLkFmdGVyfS5cblx0XHQgKiBAcGFyYW0gX21QYXJhbWV0ZXJzIE9iamVjdCBjb250YWluaW5nIHRoZSBwYXJhbWV0ZXJzIHBhc3NlZCB0byBvbkJlZm9yZURpc2NhcmRcblx0XHQgKiBAcGFyYW0gX21QYXJhbWV0ZXJzLmNvbnRleHQgUGFnZSBjb250ZXh0IHRoYXQgaXMgZ29pbmcgdG8gYmUgZGlzY2FyZGVkLlxuXHRcdCAqIEByZXR1cm5zIEEgcHJvbWlzZSB0byBiZSByZXR1cm5lZCBieSB0aGUgb3ZlcnJpZGRlbiBtZXRob2QuIElmIHJlc29sdmVkLCB0aGUgJ0Rpc2NhcmQnIGFjdGlvbiBpcyB0cmlnZ2VyZWQuIElmIHJlamVjdGVkLCB0aGUgJ0Rpc2NhcmQnIGFjdGlvbiBpcyBub3QgdHJpZ2dlcmVkIGFuZCB0aGUgdXNlciBzdGF5cyBpbiBlZGl0IG1vZGUuXG5cdFx0ICogQHB1YmxpY1xuXHRcdCAqIEBzaW5jZSAxLjk4LjBcblx0XHQgKi9cblx0XHRvbkJlZm9yZURpc2NhcmQoX21QYXJhbWV0ZXJzPzogeyBjb250ZXh0PzogQ29udGV4dCB9KTogUHJvbWlzZTx2b2lkPjtcblx0XHQvKipcblx0XHQgKiBUaGlzIGZ1bmN0aW9uIGNhbiBiZSB1c2VkIHRvIGludGVyY2VwdCB0aGUgJ0RlbGV0ZScgYWN0aW9uLiBZb3UgY2FuIGV4ZWN1dGUgY3VzdG9tIGNvZGluZyBpbiB0aGlzIGZ1bmN0aW9uLlxuXHRcdCAqIFRoZSBmcmFtZXdvcmsgd2FpdHMgZm9yIHRoZSByZXR1cm5lZCBwcm9taXNlIHRvIGJlIHJlc29sdmVkIGJlZm9yZSBjb250aW51aW5nIHRoZSAnRGVsZXRlJyBhY3Rpb24uXG5cdFx0ICogSWYgeW91IHJlamVjdCB0aGUgcHJvbWlzZSwgdGhlICdEZWxldGUnIGFjdGlvbiBpcyBzdG9wcGVkLlxuXHRcdCAqXG5cdFx0ICogVGhpcyBmdW5jdGlvbiBpcyBtZWFudCB0byBiZSBpbmRpdmlkdWFsbHkgb3ZlcnJpZGRlbiBieSBjb25zdW1pbmcgY29udHJvbGxlcnMsIGJ1dCBub3QgdG8gYmUgY2FsbGVkIGRpcmVjdGx5LlxuXHRcdCAqIFRoZSBvdmVycmlkZSBleGVjdXRpb24gaXM6IHtAbGluayBzYXAudWkuY29yZS5tdmMuT3ZlcnJpZGVFeGVjdXRpb24uQWZ0ZXJ9LlxuXHRcdCAqIEBwYXJhbSBfbVBhcmFtZXRlcnMgT2JqZWN0IGNvbnRhaW5pbmcgdGhlIHBhcmFtZXRlcnMgcGFzc2VkIHRvIG9uQmVmb3JlRGVsZXRlXG5cdFx0ICogQHBhcmFtIF9tUGFyYW1ldGVycy5jb250ZXh0cyBBbiBhcnJheSBvZiBjb250ZXh0cyB0aGF0IGFyZSBnb2luZyB0byBiZSBkZWxldGVkXG5cdFx0ICogQHJldHVybnMgQSBwcm9taXNlIHRvIGJlIHJldHVybmVkIGJ5IHRoZSBvdmVycmlkZGVuIG1ldGhvZC4gSWYgcmVzb2x2ZWQsIHRoZSAnRGVsZXRlJyBhY3Rpb24gaXMgdHJpZ2dlcmVkLiBJZiByZWplY3RlZCwgdGhlICdEZWxldGUnIGFjdGlvbiBpcyBub3QgdHJpZ2dlcmVkLlxuXHRcdCAqIEBwdWJsaWNcblx0XHQgKiBAc2luY2UgMS45OC4wXG5cdFx0ICovXG5cdFx0b25CZWZvcmVEZWxldGUoX21QYXJhbWV0ZXJzPzogeyBjb250ZXh0cz86IENvbnRleHRbXSB9KTogUHJvbWlzZTx2b2lkPjtcblx0XHQvKipcblx0XHQgKiBUaGlzIGZ1bmN0aW9uIGNhbiBiZSB1c2VkIHRvIGV4ZWN1dGUgY29kZSBhZnRlciB0aGUgJ1NhdmUnIGFjdGlvbi5cblx0XHQgKiBZb3UgY2FuIGV4ZWN1dGUgY3VzdG9tIGNvZGluZyBpbiB0aGlzIGZ1bmN0aW9uLlxuXHRcdCAqXG5cdFx0ICogVGhpcyBmdW5jdGlvbiBpcyBtZWFudCB0byBiZSBpbmRpdmlkdWFsbHkgb3ZlcnJpZGRlbiBieSBjb25zdW1pbmcgY29udHJvbGxlcnMsIGJ1dCBub3QgdG8gYmUgY2FsbGVkIGRpcmVjdGx5LlxuXHRcdCAqIFRoZSBvdmVycmlkZSBleGVjdXRpb24gaXM6IHtAbGluayBzYXAudWkuY29yZS5tdmMuT3ZlcnJpZGVFeGVjdXRpb24uQWZ0ZXJ9LlxuXHRcdCAqIEBwYXJhbSBfbVBhcmFtZXRlcnMgT2JqZWN0IGNvbnRhaW5pbmcgdGhlIHBhcmFtZXRlcnMgcGFzc2VkIHRvIG9uQWZ0ZXJTYXZlXG5cdFx0ICogQHBhcmFtIF9tUGFyYW1ldGVycy5jb250ZXh0IFRoZSBjb250ZXh0IHdlIG9idGFpbmVkIGFmdGVyIHNhdmluZ1xuXHRcdCAqIEByZXR1cm5zIEEgcHJvbWlzZSB0byBiZSByZXR1cm5lZCBieSB0aGUgb3ZlcnJpZGRlbiBtZXRob2QuIElmIHJlamVjdGVkLCBhbnkgZnVydGhlciBwcm9jZXNzaW5nIGJ5IHRoZSBmcmFtZXdvcmsgaXMgc3RvcHBlZC5cblx0XHQgKiBAcHVibGljXG5cdFx0ICogQHNpbmNlIDEuMTE2LjBcblx0XHQgKi9cblx0XHRvbkFmdGVyU2F2ZShfbVBhcmFtZXRlcnM/OiB7IGNvbnRleHQ/OiBDb250ZXh0IH0pOiBQcm9taXNlPHZvaWQ+O1xuXHRcdC8qKlxuXHRcdCAqIFRoaXMgZnVuY3Rpb24gY2FuIGJlIHVzZWQgdG8gZXhlY3V0ZSBjb2RlIGFmdGVyIHRoZSAnQ3JlYXRlJyBhY3Rpb24uXG5cdFx0ICogWW91IGNhbiBleGVjdXRlIGN1c3RvbSBjb2RpbmcgaW4gdGhpcyBmdW5jdGlvbi5cblx0XHQgKlxuXHRcdCAqIFRoaXMgZnVuY3Rpb24gaXMgbWVhbnQgdG8gYmUgaW5kaXZpZHVhbGx5IG92ZXJyaWRkZW4gYnkgY29uc3VtaW5nIGNvbnRyb2xsZXJzLCBidXQgbm90IHRvIGJlIGNhbGxlZCBkaXJlY3RseS5cblx0XHQgKiBUaGUgb3ZlcnJpZGUgZXhlY3V0aW9uIGlzOiB7QGxpbmsgc2FwLnVpLmNvcmUubXZjLk92ZXJyaWRlRXhlY3V0aW9uLkFmdGVyfS5cblx0XHQgKiBAcGFyYW0gX21QYXJhbWV0ZXJzIE9iamVjdCBjb250YWluaW5nIHRoZSBwYXJhbWV0ZXJzIHBhc3NlZCB0byBvbkFmdGVyQ3JlYXRlXG5cdFx0ICogQHBhcmFtIF9tUGFyYW1ldGVycy5jb250ZXh0IFRoZSBuZXdseSBjcmVhdGVkIGNvbnRleHRcblx0XHQgKiBAcmV0dXJucyBBIHByb21pc2UgdG8gYmUgcmV0dXJuZWQgYnkgdGhlIG92ZXJyaWRkZW4gbWV0aG9kLiBJZiByZWplY3RlZCwgYW55IGZ1cnRoZXIgcHJvY2Vzc2luZyBieSB0aGUgZnJhbWV3b3JrIGlzIHN0b3BwZWQuXG5cdFx0ICogQHB1YmxpY1xuXHRcdCAqIEBzaW5jZSAxLjExNi4wXG5cdFx0ICovXG5cdFx0b25BZnRlckNyZWF0ZShfbVBhcmFtZXRlcnM/OiB7IGNvbnRleHQ/OiBDb250ZXh0IH0pOiBQcm9taXNlPHZvaWQ+O1xuXHRcdC8qKlxuXHRcdCAqIFRoaXMgZnVuY3Rpb24gY2FuIGJlIHVzZWQgdG8gZXhlY3V0ZSBjb2RlIGFmdGVyIHRoZSAnRWRpdCcgYWN0aW9uLlxuXHRcdCAqIFlvdSBjYW4gZXhlY3V0ZSBjdXN0b20gY29kaW5nIGluIHRoaXMgZnVuY3Rpb24uXG5cdFx0ICpcblx0XHQgKiBUaGlzIGZ1bmN0aW9uIGlzIG1lYW50IHRvIGJlIGluZGl2aWR1YWxseSBvdmVycmlkZGVuIGJ5IGNvbnN1bWluZyBjb250cm9sbGVycywgYnV0IG5vdCB0byBiZSBjYWxsZWQgZGlyZWN0bHkuXG5cdFx0ICogVGhlIG92ZXJyaWRlIGV4ZWN1dGlvbiBpczoge0BsaW5rIHNhcC51aS5jb3JlLm12Yy5PdmVycmlkZUV4ZWN1dGlvbi5BZnRlcn0uXG5cdFx0ICogQHBhcmFtIF9tUGFyYW1ldGVycyBPYmplY3QgY29udGFpbmluZyB0aGUgcGFyYW1ldGVycyBwYXNzZWQgdG8gb25BZnRlckVkaXRcblx0XHQgKiBAcGFyYW0gX21QYXJhbWV0ZXJzLmNvbnRleHQgUGFnZSBjb250ZXh0IHRoYXQgaXMgZ29pbmcgdG8gYmUgZWRpdGVkLlxuXHRcdCAqIEByZXR1cm5zIEEgcHJvbWlzZSB0byBiZSByZXR1cm5lZCBieSB0aGUgb3ZlcnJpZGRlbiBtZXRob2QuIElmIHJlamVjdGVkLCBhbnkgZnVydGhlciBwcm9jZXNzaW5nIGJ5IHRoZSBmcmFtZXdvcmsgaXMgc3RvcHBlZC5cblx0XHQgKiBAcHVibGljXG5cdFx0ICogQHNpbmNlIDEuMTE2LjBcblx0XHQgKi9cblx0XHRvbkFmdGVyRWRpdChfbVBhcmFtZXRlcnM/OiB7IGNvbnRleHQ/OiBDb250ZXh0IH0pOiBQcm9taXNlPHZvaWQ+O1xuXHRcdC8qKlxuXHRcdCAqIFRoaXMgZnVuY3Rpb24gY2FuIGJlIHVzZWQgdG8gZXhlY3V0ZSBjb2RlIGFmdGVyIHRoZSAnRGlzY2FyZCcgYWN0aW9uLlxuXHRcdCAqIFlvdSBjYW4gZXhlY3V0ZSBjdXN0b20gY29kaW5nIGluIHRoaXMgZnVuY3Rpb24uXG5cdFx0ICpcblx0XHQgKiBUaGlzIGZ1bmN0aW9uIGlzIG1lYW50IHRvIGJlIGluZGl2aWR1YWxseSBvdmVycmlkZGVuIGJ5IGNvbnN1bWluZyBjb250cm9sbGVycywgYnV0IG5vdCB0byBiZSBjYWxsZWQgZGlyZWN0bHkuXG5cdFx0ICogVGhlIG92ZXJyaWRlIGV4ZWN1dGlvbiBpczoge0BsaW5rIHNhcC51aS5jb3JlLm12Yy5PdmVycmlkZUV4ZWN1dGlvbi5BZnRlcn0uXG5cdFx0ICogQHBhcmFtIF9tUGFyYW1ldGVycyBPYmplY3QgY29udGFpbmluZyB0aGUgcGFyYW1ldGVycyBwYXNzZWQgdG8gb25BZnRlckRpc2NhcmRcblx0XHQgKiBAcGFyYW0gX21QYXJhbWV0ZXJzLmNvbnRleHQgVGhlIGNvbnRleHQgb2J0YWluZWQgYWZ0ZXIgZGlzY2FyZGluZyB0aGUgb2JqZWN0LCBvciB1bmRlZmluZWQgaWYgd2UgZGlzY2FyZGVkIGEgbmV3IG9iamVjdFxuXHRcdCAqIEByZXR1cm5zIEEgcHJvbWlzZSB0byBiZSByZXR1cm5lZCBieSB0aGUgb3ZlcnJpZGRlbiBtZXRob2QuIElmIHJlamVjdGVkLCBhbnkgZnVydGhlciBwcm9jZXNzaW5nIGJ5IHRoZSBmcmFtZXdvcmsgaXMgc3RvcHBlZC5cblx0XHQgKiBAcHVibGljXG5cdFx0ICogQHNpbmNlIDEuMTE2LjBcblx0XHQgKi9cblx0XHRvbkFmdGVyRGlzY2FyZChfbVBhcmFtZXRlcnM/OiB7IGNvbnRleHQ/OiBDb250ZXh0IH0pOiBQcm9taXNlPHZvaWQ+O1xuXHRcdC8qKlxuXHRcdCAqIFRoaXMgZnVuY3Rpb24gY2FuIGJlIHVzZWQgdG8gZXhlY3V0ZSBjb2RlIGFmdGVyIHRoZSAnRGVsZXRlJyBhY3Rpb24uXG5cdFx0ICogWW91IGNhbiBleGVjdXRlIGN1c3RvbSBjb2RpbmcgaW4gdGhpcyBmdW5jdGlvbi5cblx0XHQgKlxuXHRcdCAqIFRoaXMgZnVuY3Rpb24gaXMgbWVhbnQgdG8gYmUgaW5kaXZpZHVhbGx5IG92ZXJyaWRkZW4gYnkgY29uc3VtaW5nIGNvbnRyb2xsZXJzLCBidXQgbm90IHRvIGJlIGNhbGxlZCBkaXJlY3RseS5cblx0XHQgKiBUaGUgb3ZlcnJpZGUgZXhlY3V0aW9uIGlzOiB7QGxpbmsgc2FwLnVpLmNvcmUubXZjLk92ZXJyaWRlRXhlY3V0aW9uLkFmdGVyfS5cblx0XHQgKiBAcGFyYW0gX21QYXJhbWV0ZXJzIE9iamVjdCBjb250YWluaW5nIHRoZSBwYXJhbWV0ZXJzIHBhc3NlZCB0byBvbkFmdGVyRGVsZXRlXG5cdFx0ICogQHBhcmFtIF9tUGFyYW1ldGVycy5jb250ZXh0cyBBbiBhcnJheSBvZiBjb250ZXh0cyB0aGF0IGFyZSBnb2luZyB0byBiZSBkZWxldGVkXG5cdFx0ICogQHJldHVybnMgQSBwcm9taXNlIHRvIGJlIHJldHVybmVkIGJ5IHRoZSBvdmVycmlkZGVuIG1ldGhvZC4gSWYgcmVqZWN0ZWQsIGFueSBmdXJ0aGVyIHByb2Nlc3NpbmcgYnkgdGhlIGZyYW1ld29yayBpcyBzdG9wcGVkLlxuXHRcdCAqIEBwdWJsaWNcblx0XHQgKiBAc2luY2UgMS4xMTYuMFxuXHRcdCAqL1xuXHRcdG9uQWZ0ZXJEZWxldGUoX21QYXJhbWV0ZXJzPzogeyBjb250ZXh0cz86IENvbnRleHRbXSB9KTogUHJvbWlzZTx2b2lkPjtcblx0XHQvKipcblx0XHQgKiBUaGlzIGZ1bmN0aW9uIGNhbiBiZSB1c2VkIHRvIGV4ZWN1dGUgY29kZSBvbiB0aGUgbWFzcyBlZGl0IHNhdmUuXG5cdFx0ICogWW91IGNhbiBleGVjdXRlIGN1c3RvbSBjb2RpbmcgaW4gdGhpcyBmdW5jdGlvbi5cblx0XHQgKiBJZiB5b3UgZGVjaWRlIHRvIGRvIHlvdXIgb3duIHNhdmUgcHJvY2Vzc2luZywgeW91IGNhbiByZXR1cm4gYHRydWVgIHRvIHByZXZlbnQgdGhlIGRlZmF1bHQgc2F2ZSBiZWhhdmlvci5cblx0XHQgKlxuXHRcdCAqIFRoaXMgZnVuY3Rpb24gaXMgbWVhbnQgdG8gYmUgaW5kaXZpZHVhbGx5IG92ZXJyaWRkZW4gYnkgY29uc3VtaW5nIGNvbnRyb2xsZXJzIGJ1dCBub3QgdG8gYmUgY2FsbGVkIGRpcmVjdGx5LlxuXHRcdCAqIFRoZSBvdmVycmlkZSBleGVjdXRpb24gaXM6IHtAbGluayBzYXAudWkuY29yZS5tdmMuT3ZlcnJpZGVFeGVjdXRpb24uSW5zdGVhZH0uXG5cdFx0ICogQHBhcmFtIF9tUGFyYW1ldGVycyBPYmplY3QgY29udGFpbmluZyB0aGUgcGFyYW1ldGVycyBwYXNzZWQgdG8gY3VzdG9tTWFzc0VkaXRTYXZlXG5cdFx0ICogQHBhcmFtIF9tUGFyYW1ldGVycy5hQ29udGV4dHMgQXJyYXkgY29udGFpbmluZyB0aGUgc2VsZWN0ZWQgY29udGV4dHMgZm9yIHRoZSBtYXNzIGVkaXRcblx0XHQgKiBAcGFyYW0gX21QYXJhbWV0ZXJzLm9VcGRhdGVEYXRhIEEgZGljdGlvbmFyeSBjb250YWluaW5nIHRoZSBwcm9wZXJ0eVBhdGggYW5kIGl0cyB2YWx1ZVxuXHRcdCAqIEByZXR1cm5zIGB0cnVlYCB0byBwcmV2ZW50IHRoZSBkZWZhdWx0IGV4ZWN1dGlvbiwgYGZhbHNlYCB0byBrZWVwIHRoZSBzdGFuZGFyZCBiZWhhdmlvclxuXHRcdCAqIEBwdWJsaWNcblx0XHQgKiBAc2luY2UgMS4xMzAuMFxuXHRcdCAqL1xuXHRcdGN1c3RvbU1hc3NFZGl0U2F2ZShfbVBhcmFtZXRlcnM6IHsgYUNvbnRleHRzOiBDb250ZXh0W107IG9VcGRhdGVEYXRhOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB9KTogUHJvbWlzZTxib29sZWFuPjtcblx0fVxufVxuXG5kZWNsYXJlIG1vZHVsZSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL0ludGVudEJhc2VkTmF2aWdhdGlvbk92ZXJyaWRlc1wiIHtcblx0aW1wb3J0IHR5cGUgU2VsZWN0aW9uVmFyaWFudCBmcm9tIFwic2FwL2ZlL25hdmlnYXRpb24vU2VsZWN0aW9uVmFyaWFudFwiO1xuXHRleHBvcnQgZGVmYXVsdCBpbnRlcmZhY2UgSW50ZW50QmFzZWROYXZpZ2F0aW9uT3ZlcnJpZGVzIHtcblx0XHQvKipcblx0XHQgKiBQcm92aWRlcyBhIGhvb2sgdG8gY3VzdG9taXplIHRoZSB7QGxpbmsgc2FwLmZlLm5hdmlnYXRpb24uU2VsZWN0aW9uVmFyaWFudH0gcmVsYXRlZCB0byB0aGUgaW50ZW50LWJhc2VkIG5hdmlnYXRpb24uXG5cdFx0ICogQHBhcmFtIF9vU2VsZWN0aW9uVmFyaWFudCBTZWxlY3Rpb25WYXJpYW50IHByb3ZpZGVkIGJ5IFNBUCBGaW9yaSBlbGVtZW50cy5cblx0XHQgKiBAcGFyYW0gX29OYXZpZ2F0aW9uSW5mbyBPYmplY3QgY29udGFpbmluZyBpbnRlbnQtYmFzZWQgbmF2aWdhdGlvbi1yZWxhdGVkIGluZm9cblx0XHQgKiBAcGFyYW0gX29OYXZpZ2F0aW9uSW5mby5zZW1hbnRpY09iamVjdCBTZW1hbnRpYyBvYmplY3QgcmVsYXRlZCB0byB0aGUgaW50ZW50XG5cdFx0ICogQHBhcmFtIF9vTmF2aWdhdGlvbkluZm8uYWN0aW9uIEFjdGlvbiByZWxhdGVkIHRvIHRoZSBpbnRlbnRcblx0XHQgKiBAcHVibGljXG5cdFx0ICogQHNpbmNlIDEuODYuMFxuXHRcdCAqL1xuXHRcdGFkYXB0TmF2aWdhdGlvbkNvbnRleHQoXG5cdFx0XHRfb1NlbGVjdGlvblZhcmlhbnQ6IFNlbGVjdGlvblZhcmlhbnQsXG5cdFx0XHRfb05hdmlnYXRpb25JbmZvOiB7XG5cdFx0XHRcdHNlbWFudGljT2JqZWN0OiBzdHJpbmc7XG5cdFx0XHRcdGFjdGlvbjogc3RyaW5nO1xuXHRcdFx0fVxuXHRcdCk6IHZvaWQ7XG5cdH1cbn1cblxuZGVjbGFyZSBtb2R1bGUgXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9QYWdpbmF0b3JPdmVycmlkZXNcIiB7XG5cdGltcG9ydCB0eXBlIHsgQ29udGV4dE5hdmlnYXRpb25UeXBlIH0gZnJvbSBcInNhcC9mZS9jb3JlL2xpYnJhcnlcIjtcblx0aW1wb3J0IHR5cGUgeyBkZWZhdWx0IGFzIENvbnRleHQgfSBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L0NvbnRleHRcIjtcblx0ZXhwb3J0IGRlZmF1bHQgaW50ZXJmYWNlIFBhZ2luYXRvck92ZXJyaWRlcyB7XG5cdFx0LyoqXG5cdFx0ICogUmV0dXJucyB0aGUgdXBkYXRlZCBjb250ZXh0IGFmdGVyIHRoZSBwYWdpbmF0b3Igb3BlcmF0aW9uLlxuXHRcdCAqIEBwYXJhbSBvQ29udGV4dCBGaW5hbCBjb250ZXh0IHJldHVybmVkIGFmdGVyIHRoZSBwYWdpbmF0b3IgYWN0aW9uXG5cdFx0ICogQHB1YmxpY1xuXHRcdCAqIEBzaW5jZSAxLjk0LjBcblx0XHQgKi9cblx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG5cdFx0b25Db250ZXh0VXBkYXRlKG9Db250ZXh0OiBDb250ZXh0KTogdm9pZDtcblx0XHQvKipcblx0XHQgKiBUaGlzIG1ldGhvZCBpcyBpbnZva2VkIHdoZW5ldmVyIGEgY29udGV4dCBpcyBsb2FkZWQgdXNpbmcgdGhlIHBhZ2luYXRvciBidXR0b25zLiBJdCBkZXRlcm1pbmVzIHdoZXRoZXIgdGhlIGNvbnRleHQgc3VwcG9ydHMgbmF2aWdhdGlvbi4gVGhlIG1ldGhvZCBtdXN0IHJldHVybiBvbmUgb2YgdGhlIGZvbGxvd2luZzpcblx0XHQgKiBDb250ZXh0TmF2aWdhdGlvblR5cGUuTm9uZTogSWYgdGhlIGNvbnRleHQgaXMgbm90IG5hdmlnYWJsZS5cblx0XHQgKiBDb250ZXh0TmF2aWdhdGlvblR5cGUuSW50ZXJuYWw6IElmIHRoZSBjb250ZXh0IHN1cHBvcnRzIGludGVybmFsIG5hdmlnYXRpb24gd2l0aGluIHRoZSBzYW1lIGFwcGxpY2F0aW9uIHRvIGEgZGV0YWlsIHZpZXcsIHN1Y2ggYXMgYW4gb2JqZWN0IHBhZ2Ugb3IgYSBzdWJvYmplY3QgcGFnZS5cblx0XHQgKiBDb250ZXh0TmF2aWdhdGlvblR5cGUuRXh0ZXJuYWw6IElmIHRoZSBjb250ZXh0IG5hdmlnYXRlcyB0byBhbiBleHRlcm5hbCBhcHBsaWNhdGlvbi5cblx0XHQgKiBUaGUgcGFnaW5hdG9yIGJ1dHRvbnMgb25seSBhbGxvdyBuYXZpZ2F0aW9uIHRvIGNvbnRleHRzIHdpdGggaW50ZXJuYWwgbmF2aWdhdGlvbi4gQ29udGV4dHMgd2l0aCBOb25lIG9yIEV4dGVybmFsIG5hdmlnYXRpb24gYXJlIHNraXBwZWQuXG5cdFx0ICogQHBhcmFtIGNvbnRleHQgT2JqZWN0IGNvbnRhaW5pbmcgdGhlIGNvbnRleHQgdG8gYmUgbmF2aWdhdGVkLlxuXHRcdCAqIEByZXR1cm5zIEEgUHJvbWlzZSB3aGljaCBzaG91bGQgcmVzb2x2ZSB0byBDb250ZXh0TmF2aWdhdGlvblR5cGUgZW51bS5cblx0XHQgKiBAcHVibGljXG5cdFx0ICogQHNpbmNlIDEuMTM4LjBcblx0XHQgKi9cblx0XHRkZXRlcm1pbmVDb250ZXh0TmF2aWdhdGlvblR5cGUoY29udGV4dDogQ29udGV4dCk6IFByb21pc2U8Q29udGV4dE5hdmlnYXRpb25UeXBlPjtcblx0fVxufVxuXG5kZWNsYXJlIG1vZHVsZSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL1JvdXRpbmdPdmVycmlkZXNcIiB7XG5cdGltcG9ydCB0eXBlIENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9Db250ZXh0XCI7XG5cdGV4cG9ydCBkZWZhdWx0IGludGVyZmFjZSBSb3V0aW5nT3ZlcnJpZGVzIHtcblx0XHQvKipcblx0XHQgKiBUaGlzIGZ1bmN0aW9uIGNhbiBiZSB1c2VkIHRvIGludGVyY2VwdCB0aGUgcm91dGluZyBldmVudCBkdXJpbmcgdGhlIG5vcm1hbCBuYXZpZ2F0aW9uIHByb2Nlc3MsIHN1Y2ggYXMgd2hlbiBhIHRhYmxlIHJvdyBpcyBjbGlja2VkIHRvIG5hdmlnYXRlLCBwYWdpbmF0aW9uIGJ1dHRvbnMgYXJlIHVzZWQsIHRoZSBBcHBseSBidXR0b24gaW4gYW4gb2JqZWN0IHBhZ2UgaXMgY2xpY2tlZCwgb3IgYSBzdWItb2JqZWN0IHBhZ2UgaW4gYSBmbGV4aWJsZSBjb2x1bW4gbGF5b3V0IGlzIGNsb3NlZC5cblx0XHQgKlxuXHRcdCAqIFRoZSBmdW5jdGlvbiBpcyBub3QgY2FsbGVkIGR1cmluZyBvdGhlciBtZWFucyBvZiBleHRlcm5hbCBvdXRib3VuZCBuYXZpZ2F0aW9uIHN1Y2ggYXMgYSBuYXZpZ2F0aW9uIGNvbmZpZ3VyZWQgdXNpbmcgYSBsaW5rIG9yIGJ5IHVzaW5nIG5hdmlnYXRpb24gYnV0dG9ucy5cblx0XHQgKlxuXHRcdCAqIElmIGRlY2xhcmVkIGFzIGFuIGV4dGVuc2lvbiwgaXQgYWxsb3dzIHlvdSB0byBpbnRlcmNlcHQgYW5kIGNoYW5nZSB0aGUgbm9ybWFsIG5hdmlnYXRpb24gZmxvdy5cblx0XHQgKiBJZiB5b3UgZGVjaWRlIHRvIGltcGxlbWVudCB5b3VyIG93biBuYXZpZ2F0aW9uIHByb2Nlc3NpbmcsIHlvdSBjYW4gcmV0dXJuIGB0cnVlYCB0byBwcmV2ZW50IHRoZSBkZWZhdWx0IHJvdXRpbmcgYmVoYXZpb3IuXG5cdFx0ICpcblx0XHQgKiBUaGlzIGZ1bmN0aW9uIGlzIG1lYW50IHRvIGJlIGluZGl2aWR1YWxseSBvdmVycmlkZGVuIGJ5IGNvbnN1bWluZyBjb250cm9sbGVycyBhbmQgbm90IGNhbGxlZCBkaXJlY3RseS5cblx0XHQgKiBUaGUgb3ZlcnJpZGUgZXhlY3V0aW9uIGlzOiB7QGxpbmsgc2FwLnVpLmNvcmUubXZjLk92ZXJyaWRlRXhlY3V0aW9uLkFmdGVyfS5cblx0XHQgKiBAcGFyYW0gbU5hdmlnYXRpb25QYXJhbWV0ZXJzIE9iamVjdCBjb250YWluaW5nIHJvdyBjb250ZXh0IGFuZCBwYWdlIGNvbnRleHRcblx0XHQgKiBAcGFyYW0gbU5hdmlnYXRpb25QYXJhbWV0ZXJzLmJpbmRpbmdDb250ZXh0IFRoZSB0YXJnZXQgbmF2aWdhdGlvbiBjb250ZXh0XG5cdFx0ICogQHJldHVybnMgYHRydWVgIHRvIHByZXZlbnQgdGhlIGRlZmF1bHQgZXhlY3V0aW9uLCBmYWxzZSB0byBrZWVwIHRoZSBzdGFuZGFyZCBiZWhhdmlvclxuXHRcdCAqIEBwdWJsaWNcblx0XHQgKiBAc2luY2UgMS44Ni4wXG5cdFx0ICovXG5cdFx0b25CZWZvcmVOYXZpZ2F0aW9uKG1OYXZpZ2F0aW9uUGFyYW1ldGVyczogeyBiaW5kaW5nQ29udGV4dDogQ29udGV4dCB9KTogUHJvbWlzZTxib29sZWFuPjtcblx0XHQvKipcblx0XHQgKiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gaW50ZXJjZXB0IHRoZSByb3V0aW5nIGV2ZW50IGJlZm9yZSBiaW5kaW5nIGEgcGFnZS5cblx0XHQgKlxuXHRcdCAqIElmIGl0IGlzIGRlY2xhcmVkIGFzIGFuIGV4dGVuc2lvbiwgaXQgYWxsb3dzIHlvdSB0byBpbnRlcmNlcHQgYW5kIGNoYW5nZSB0aGUgbm9ybWFsIGZsb3cgb2YgYmluZGluZy5cblx0XHQgKlxuXHRcdCAqIFRoaXMgZnVuY3Rpb24gaXMgbm90IGNhbGxlZCBkaXJlY3RseSwgYnV0IG92ZXJyaWRkZW4gc2VwYXJhdGVseSBieSBjb25zdW1pbmcgY29udHJvbGxlcnMuXG5cdFx0ICogVGhlIG92ZXJyaWRlIGV4ZWN1dGlvbiBpczoge0BsaW5rIHNhcC51aS5jb3JlLm12Yy5PdmVycmlkZUV4ZWN1dGlvbi5BZnRlcn0uXG5cdFx0ICogQHBhcmFtIG9Db250ZXh0IE9iamVjdCBjb250YWluaW5nIHRoZSBjb250ZXh0IGZvciB0aGUgbmF2aWdhdGlvblxuXHRcdCAqIEBwdWJsaWNcblx0XHQgKiBAc2luY2UgMS45MC4wXG5cdFx0ICovXG5cdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuXHRcdG9uQmVmb3JlQmluZGluZyhvQ29udGV4dDogb2JqZWN0IHwgbnVsbCk6IHZvaWQ7XG5cdFx0LyoqXG5cdFx0ICogVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGludGVyY2VwdCB0aGUgcm91dGluZyBldmVudCBhZnRlciBiaW5kaW5nIGEgcGFnZS5cblx0XHQgKlxuXHRcdCAqIElmIGl0IGlzIGRlY2xhcmVkIGFzIGFuIGV4dGVuc2lvbiwgaXQgYWxsb3dzIHlvdSB0byBpbnRlcmNlcHQgYW5kIGNoYW5nZSB0aGUgbm9ybWFsIGZsb3cgb2YgYmluZGluZy5cblx0XHQgKlxuXHRcdCAqIFRoaXMgZnVuY3Rpb24gaXMgbm90IGNhbGxlZCBkaXJlY3RseSwgYnV0IG92ZXJyaWRkZW4gc2VwYXJhdGVseSBieSBjb25zdW1pbmcgY29udHJvbGxlcnMuXG5cdFx0ICogVGhlIG92ZXJyaWRlIGV4ZWN1dGlvbiBpczoge0BsaW5rIHNhcC51aS5jb3JlLm12Yy5PdmVycmlkZUV4ZWN1dGlvbi5BZnRlcn0uXG5cdFx0ICogQHBhcmFtIG9Db250ZXh0IE9iamVjdCBjb250YWluaW5nIHRoZSBjb250ZXh0IHRvIGJlIG5hdmlnYXRlZFxuXHRcdCAqIEBwdWJsaWNcblx0XHQgKiBAc2luY2UgMS45MC4wXG5cdFx0ICovXG5cdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuXHRcdG9uQWZ0ZXJCaW5kaW5nKG9Db250ZXh0OiBvYmplY3QgfCBudWxsKTogdm9pZDtcblx0fVxufVxuXG5kZWNsYXJlIG1vZHVsZSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL1NoYXJlT3ZlcnJpZGVzXCIge1xuXHRleHBvcnQgdHlwZSBTaGFyZU1ldGFkYXRhID0ge1xuXHRcdHVybDogc3RyaW5nO1xuXHRcdHRpdGxlOiBzdHJpbmc7XG5cdFx0ZW1haWw6IHtcblx0XHRcdHVybDogc3RyaW5nO1xuXHRcdFx0dGl0bGU6IHN0cmluZztcblx0XHR9O1xuXHRcdGphbToge1xuXHRcdFx0dXJsPzogc3RyaW5nO1xuXHRcdFx0dGl0bGU6IHN0cmluZztcblx0XHR9O1xuXHRcdHRpbGU6IHtcblx0XHRcdHVybD86IHN0cmluZztcblx0XHRcdHRpdGxlOiBzdHJpbmc7XG5cdFx0XHRzdWJ0aXRsZTogc3RyaW5nO1xuXHRcdFx0aWNvbj86IHN0cmluZztcblx0XHRcdHF1ZXJ5VXJsPzogc3RyaW5nO1xuXHRcdH07XG5cdH07XG5cdGV4cG9ydCBkZWZhdWx0IGludGVyZmFjZSBTaGFyZU92ZXJyaWRlcyB7XG5cdFx0LyoqXG5cdFx0ICogQWRhcHRzIHRoZSBtZXRhZGF0YSB1c2VkIHdoaWxlIHNoYXJpbmcgdGhlIHBhZ2UgVVJMIHVzaW5nICdTZW5kIEVtYWlsJywgJ1NoYXJlIGluIFNBUCBKYW0nLCBhbmQgJ1NhdmUgYXMgVGlsZScuXG5cdFx0ICogQHBhcmFtIG9TaGFyZU1ldGFkYXRhIE9iamVjdCBjb250YWluaW5nIHRoZSBzaGFyZSBtZXRhZGF0YS5cblx0XHQgKiBAcGFyYW0gb1NoYXJlTWV0YWRhdGEudXJsIERlZmF1bHQgVVJMIHRoYXQgd2lsbCBiZSB1c2VkIHdpdGggJ1NlbmQgRW1haWwnLCAnU2hhcmUgaW4gU0FQIEphbScsIGFuZCAnU2F2ZSBhcyBUaWxlJ1xuXHRcdCAqIEBwYXJhbSBvU2hhcmVNZXRhZGF0YS50aXRsZSBEZWZhdWx0IHRpdGxlIHRoYXQgd2lsbCBiZSB1c2VkIGFzIHRoZSAnZW1haWwgc3ViamVjdCcgaW4gJ1NlbmQgRW1haWwnLCAnc2hhcmUgdGV4dCcgaW4gJ1NoYXJlIGluIFNBUCBKYW0nIGFuZCAndGl0bGUnIGluICdTYXZlIGFzIFRpbGUnXG5cdFx0ICogQHBhcmFtIG9TaGFyZU1ldGFkYXRhLmVtYWlsIEVtYWlsLXNwZWNpZmljIG1ldGFkYXRhLlxuXHRcdCAqIEBwYXJhbSBvU2hhcmVNZXRhZGF0YS5lbWFpbC51cmwgVVJMIHRoYXQgd2lsbCBiZSB1c2VkIHNwZWNpZmljYWxseSBmb3IgJ1NlbmQgRW1haWwnLiBUaGlzIHRha2VzIHByZWNlZGVuY2Ugb3ZlciBvU2hhcmVNZXRhZGF0YS51cmwuXG5cdFx0ICogQHBhcmFtIG9TaGFyZU1ldGFkYXRhLmVtYWlsLnRpdGxlIFRpdGxlIHRoYXQgd2lsbCBiZSB1c2VkIGFzIFwiZW1haWwgc3ViamVjdFwiIGluICdTZW5kIEVtYWlsJy4gVGhpcyB0YWtlcyBwcmVjZWRlbmNlIG92ZXIgb1NoYXJlTWV0YWRhdGEudGl0bGUuXG5cdFx0ICogQHBhcmFtIG9TaGFyZU1ldGFkYXRhLmphbSBTQVAgSmFtLXNwZWNpZmljIG1ldGFkYXRhLlxuXHRcdCAqIEBwYXJhbSBvU2hhcmVNZXRhZGF0YS5qYW0udXJsIFVSTCB0aGF0IHdpbGwgYmUgdXNlZCBzcGVjaWZpY2FsbHkgZm9yICdTaGFyZSBpbiBTQVAgSmFtJy4gVGhpcyB0YWtlcyBwcmVjZWRlbmNlIG92ZXIgb1NoYXJlTWV0YWRhdGEudXJsLlxuXHRcdCAqIEBwYXJhbSBvU2hhcmVNZXRhZGF0YS5qYW0udGl0bGUgVGl0bGUgdGhhdCB3aWxsIGJlIHVzZWQgYXMgJ3NoYXJlIHRleHQnIGluICdTaGFyZSBpbiBTQVAgSmFtJy4gVGhpcyB0YWtlcyBwcmVjZWRlbmNlIG92ZXIgb1NoYXJlTWV0YWRhdGEudGl0bGUuXG5cdFx0ICogQHBhcmFtIG9TaGFyZU1ldGFkYXRhLnRpbGUgU2F2ZSBhcyBUaWxlLXNwZWNpZmljIG1ldGFkYXRhLlxuXHRcdCAqIEBwYXJhbSBvU2hhcmVNZXRhZGF0YS50aWxlLnVybCBVUkwgdGhhdCB3aWxsIGJlIHVzZWQgc3BlY2lmaWNhbGx5IGZvciAnU2F2ZSBhcyBUaWxlJy4gVGhpcyB0YWtlcyBwcmVjZWRlbmNlIG92ZXIgb1NoYXJlTWV0YWRhdGEudXJsLlxuXHRcdCAqIEBwYXJhbSBvU2hhcmVNZXRhZGF0YS50aWxlLnRpdGxlIFRpdGxlIHRvIGJlIHVzZWQgZm9yIHRoZSB0aWxlLiBUaGlzIHRha2VzIHByZWNlZGVuY2Ugb3ZlciBvU2hhcmVNZXRhZGF0YS50aXRsZS5cblx0XHQgKiBAcGFyYW0gb1NoYXJlTWV0YWRhdGEudGlsZS5zdWJ0aXRsZSBTdWJ0aXRsZSB0byBiZSB1c2VkIGZvciB0aGUgdGlsZS5cblx0XHQgKiBAcGFyYW0gb1NoYXJlTWV0YWRhdGEudGlsZS5pY29uIEljb24gdG8gYmUgdXNlZCBmb3IgdGhlIHRpbGUuXG5cdFx0ICogQHBhcmFtIG9TaGFyZU1ldGFkYXRhLnRpbGUucXVlcnlVcmwgUXVlcnkgVVJMIG9mIGFuIE9EYXRhIHNlcnZpY2UgZnJvbSB3aGljaCBkYXRhIGZvciBhIGR5bmFtaWMgdGlsZSBpcyByZWFkLlxuXHRcdCAqIEByZXR1cm5zIFNoYXJlIE1ldGFkYXRhIG9yIGEgUHJvbWlzZSByZXNvbHZpbmcgdGhlIFNoYXJlIE1ldGFkYXRhXG5cdFx0ICogQHB1YmxpY1xuXHRcdCAqIEBzaW5jZSAxLjkzLjBcblx0XHQgKi9cblx0XHRhZGFwdFNoYXJlTWV0YWRhdGEob1NoYXJlTWV0YWRhdGE6IHtcblx0XHRcdHVybDogc3RyaW5nO1xuXHRcdFx0dGl0bGU6IHN0cmluZztcblx0XHRcdGVtYWlsOiB7XG5cdFx0XHRcdHVybDogc3RyaW5nO1xuXHRcdFx0XHR0aXRsZTogc3RyaW5nO1xuXHRcdFx0fTtcblx0XHRcdGphbToge1xuXHRcdFx0XHR1cmw/OiBzdHJpbmc7XG5cdFx0XHRcdHRpdGxlOiBzdHJpbmc7XG5cdFx0XHR9O1xuXHRcdFx0dGlsZToge1xuXHRcdFx0XHR1cmw/OiBzdHJpbmc7XG5cdFx0XHRcdHRpdGxlOiBzdHJpbmc7XG5cdFx0XHRcdHN1YnRpdGxlOiBzdHJpbmc7XG5cdFx0XHRcdGljb24/OiBzdHJpbmc7XG5cdFx0XHRcdHF1ZXJ5VXJsPzogc3RyaW5nO1xuXHRcdFx0fTtcblx0XHR9KTogU2hhcmVNZXRhZGF0YSB8IFByb21pc2U8U2hhcmVNZXRhZGF0YT47XG5cdH1cbn1cblxuZGVjbGFyZSBtb2R1bGUgXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9WaWV3U3RhdGVPdmVycmlkZXNcIiB7XG5cdGV4cG9ydCBkZWZhdWx0IGludGVyZmFjZSBWaWV3U3RhdGVPdmVycmlkZXMge1xuXHRcdC8qKlxuXHRcdCAqIENhbGxlZCB3aGVuIHRoZSBhcHBsaWNhdGlvbiBpcyBzdXNwZW5kZWQgZHVlIHRvIGtlZXAtYWxpdmUgbW9kZS5cblx0XHQgKiBAcHVibGljXG5cdFx0ICovXG5cdFx0b25TdXNwZW5kKCk6IHZvaWQ7XG5cdFx0LyoqXG5cdFx0ICogQ2FsbGVkIHdoZW4gdGhlIGFwcGxpY2F0aW9uIGlzIHJlc3RvcmVkIGR1ZSB0byBrZWVwLWFsaXZlIG1vZGUuXG5cdFx0ICogQHB1YmxpY1xuXHRcdCAqL1xuXHRcdG9uUmVzdG9yZSgpOiB2b2lkO1xuXHR9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7RUFBQTtBQUFBIiwiaWdub3JlTGlzdCI6W119
@@ -0,0 +1,369 @@
1
+ // This is autogenerated, do not edit
2
+
3
+ declare module "sap/fe/core/controllerextensions/MessageHandlerOverrides" {
4
+ /**
5
+ * Defines the message details relevant for the MessageButton building block to display a popover.
6
+ * @public
7
+ */
8
+ export type MessageDetail = {
9
+ message: Message;
10
+ groupName?: string;
11
+ activeTitleHandler?: Function;
12
+ };
13
+ import type Message from "sap/ui/core/message/Message";
14
+ export default interface MessageHandlerOverrides {
15
+ /**
16
+ * Allows the consumer of the MessageButton building block to decide which bound messages are shown and how.
17
+ *
18
+ * This hook is called when the MessageButton building block detects a change in the message model.
19
+ * The hooks allow you to define the behavior for messages in the MessageButton building block.
20
+ *
21
+ * Consumers are able to do the following with this hook:
22
+ *
23
+ * 1. Filter out messages so that they are not shown on the message button.
24
+ * 2. Group messages based on their UI.
25
+ * 3. Provide a presser handler if the message should display as a link.
26
+ * @param _messageDetails Object containing the details related to the message.
27
+ * @param _messageDetails.message The message from the message. It must not be modified directly.
28
+ * @param _messageDetails.groupName The group name associated with the current message.
29
+ * @param _messageDetails.activeTitleHandler Function to handle the click event on a message in the MessageButton building block.
30
+ * @returns A promise that must be returned by the overridden method.
31
+ * @public
32
+ */
33
+ beforeShowMessageButton(_messageDetails: MessageDetail[]): Promise<void>;
34
+ }
35
+ }
36
+
37
+ declare module "sap/fe/core/controllerextensions/EditFlowOverrides" {
38
+ import type { default as Context } from "sap/ui/model/odata/v4/Context";
39
+ export default interface EditFlowOverrides {
40
+ /**
41
+ * This function can be used to intercept the 'Create' action. You can execute custom coding in this function.
42
+ * The framework waits for the returned promise to be resolved before continuing the 'Create' action.
43
+ * If you reject the promise, the 'Create' action is stopped.
44
+ *
45
+ * This function is meant to be individually overridden by consuming controllers, but not to be called directly.
46
+ * The override execution is: {@link sap.ui.core.mvc.OverrideExecution.After}.
47
+ * @param _mParameters Object containing the parameters passed to onBeforeCreate
48
+ * @param _mParameters.contextPath Path pointing to the context on which Create action is triggered
49
+ * @param _mParameters.createParameters Array of values that are filled in the Action Parameter Dialog
50
+ * @returns A promise to be returned by the overridden method. If resolved, the 'Create' action is triggered. If rejected, the 'Create' action is not triggered.
51
+ * @public
52
+ * @since 1.98.0
53
+ */
54
+ onBeforeCreate(_mParameters?: { contextPath?: string; createParameters?: unknown[] }): Promise<void>;
55
+ /**
56
+ * This function can be used to intercept the 'Edit' action. You can execute custom coding in this function.
57
+ * The framework waits for the returned promise to be resolved before continuing the 'Edit' action.
58
+ * If you reject the promise, the 'Edit' action is stopped and the user stays in display mode.
59
+ *
60
+ * This function is meant to be individually overridden by consuming controllers, but not to be called directly.
61
+ * The override execution is: {@link sap.ui.core.mvc.OverrideExecution.After}.
62
+ * @param _mParameters Object containing the parameters passed to onBeforeEdit
63
+ * @param _mParameters.context Page context that is going to be edited.
64
+ * @returns A promise to be returned by the overridden method. If resolved, the 'Edit' action is triggered. If rejected, the 'Edit' action is not triggered and the user stays in display mode.
65
+ * @public
66
+ * @since 1.98.0
67
+ */
68
+ onBeforeEdit(_mParameters?: { context?: Context }): Promise<void>;
69
+ /**
70
+ * This function can be used to intercept the 'Save' action. You can execute custom coding in this function.
71
+ * The framework waits for the returned promise to be resolved before continuing the 'Save' action.
72
+ * If you reject the promise, the 'Save' action is stopped and the user stays in edit mode.
73
+ *
74
+ * This function is meant to be individually overridden by consuming controllers, but not to be called directly.
75
+ * The override execution is: {@link sap.ui.core.mvc.OverrideExecution.After}.
76
+ * @param _mParameters Object containing the parameters passed to onBeforeSave
77
+ * @param _mParameters.context Page context that is going to be saved.
78
+ * @returns A promise to be returned by the overridden method. If resolved, the 'Save' action is triggered. If rejected, the 'Save' action is not triggered and the user stays in edit mode.
79
+ * @public
80
+ * @since 1.90.0
81
+ */
82
+ onBeforeSave(_mParameters?: { context?: Context }): Promise<void>;
83
+ /**
84
+ * This function can be used to intercept the 'Discard' action. You can execute custom coding in this function.
85
+ * The framework waits for the returned promise to be resolved before continuing the 'Discard' action.
86
+ * If you reject the promise, the 'Discard' action is stopped and the user stays in edit mode.
87
+ *
88
+ * This function is meant to be individually overridden by consuming controllers, but not to be called directly.
89
+ * The override execution is: {@link sap.ui.core.mvc.OverrideExecution.After}.
90
+ * @param _mParameters Object containing the parameters passed to onBeforeDiscard
91
+ * @param _mParameters.context Page context that is going to be discarded.
92
+ * @returns A promise to be returned by the overridden method. If resolved, the 'Discard' action is triggered. If rejected, the 'Discard' action is not triggered and the user stays in edit mode.
93
+ * @public
94
+ * @since 1.98.0
95
+ */
96
+ onBeforeDiscard(_mParameters?: { context?: Context }): Promise<void>;
97
+ /**
98
+ * This function can be used to intercept the 'Delete' action. You can execute custom coding in this function.
99
+ * The framework waits for the returned promise to be resolved before continuing the 'Delete' action.
100
+ * If you reject the promise, the 'Delete' action is stopped.
101
+ *
102
+ * This function is meant to be individually overridden by consuming controllers, but not to be called directly.
103
+ * The override execution is: {@link sap.ui.core.mvc.OverrideExecution.After}.
104
+ * @param _mParameters Object containing the parameters passed to onBeforeDelete
105
+ * @param _mParameters.contexts An array of contexts that are going to be deleted
106
+ * @returns A promise to be returned by the overridden method. If resolved, the 'Delete' action is triggered. If rejected, the 'Delete' action is not triggered.
107
+ * @public
108
+ * @since 1.98.0
109
+ */
110
+ onBeforeDelete(_mParameters?: { contexts?: Context[] }): Promise<void>;
111
+ /**
112
+ * This function can be used to execute code after the 'Save' action.
113
+ * You can execute custom coding in this function.
114
+ *
115
+ * This function is meant to be individually overridden by consuming controllers, but not to be called directly.
116
+ * The override execution is: {@link sap.ui.core.mvc.OverrideExecution.After}.
117
+ * @param _mParameters Object containing the parameters passed to onAfterSave
118
+ * @param _mParameters.context The context we obtained after saving
119
+ * @returns A promise to be returned by the overridden method. If rejected, any further processing by the framework is stopped.
120
+ * @public
121
+ * @since 1.116.0
122
+ */
123
+ onAfterSave(_mParameters?: { context?: Context }): Promise<void>;
124
+ /**
125
+ * This function can be used to execute code after the 'Create' action.
126
+ * You can execute custom coding in this function.
127
+ *
128
+ * This function is meant to be individually overridden by consuming controllers, but not to be called directly.
129
+ * The override execution is: {@link sap.ui.core.mvc.OverrideExecution.After}.
130
+ * @param _mParameters Object containing the parameters passed to onAfterCreate
131
+ * @param _mParameters.context The newly created context
132
+ * @returns A promise to be returned by the overridden method. If rejected, any further processing by the framework is stopped.
133
+ * @public
134
+ * @since 1.116.0
135
+ */
136
+ onAfterCreate(_mParameters?: { context?: Context }): Promise<void>;
137
+ /**
138
+ * This function can be used to execute code after the 'Edit' action.
139
+ * You can execute custom coding in this function.
140
+ *
141
+ * This function is meant to be individually overridden by consuming controllers, but not to be called directly.
142
+ * The override execution is: {@link sap.ui.core.mvc.OverrideExecution.After}.
143
+ * @param _mParameters Object containing the parameters passed to onAfterEdit
144
+ * @param _mParameters.context Page context that is going to be edited.
145
+ * @returns A promise to be returned by the overridden method. If rejected, any further processing by the framework is stopped.
146
+ * @public
147
+ * @since 1.116.0
148
+ */
149
+ onAfterEdit(_mParameters?: { context?: Context }): Promise<void>;
150
+ /**
151
+ * This function can be used to execute code after the 'Discard' action.
152
+ * You can execute custom coding in this function.
153
+ *
154
+ * This function is meant to be individually overridden by consuming controllers, but not to be called directly.
155
+ * The override execution is: {@link sap.ui.core.mvc.OverrideExecution.After}.
156
+ * @param _mParameters Object containing the parameters passed to onAfterDiscard
157
+ * @param _mParameters.context The context obtained after discarding the object, or undefined if we discarded a new object
158
+ * @returns A promise to be returned by the overridden method. If rejected, any further processing by the framework is stopped.
159
+ * @public
160
+ * @since 1.116.0
161
+ */
162
+ onAfterDiscard(_mParameters?: { context?: Context }): Promise<void>;
163
+ /**
164
+ * This function can be used to execute code after the 'Delete' action.
165
+ * You can execute custom coding in this function.
166
+ *
167
+ * This function is meant to be individually overridden by consuming controllers, but not to be called directly.
168
+ * The override execution is: {@link sap.ui.core.mvc.OverrideExecution.After}.
169
+ * @param _mParameters Object containing the parameters passed to onAfterDelete
170
+ * @param _mParameters.contexts An array of contexts that are going to be deleted
171
+ * @returns A promise to be returned by the overridden method. If rejected, any further processing by the framework is stopped.
172
+ * @public
173
+ * @since 1.116.0
174
+ */
175
+ onAfterDelete(_mParameters?: { contexts?: Context[] }): Promise<void>;
176
+ /**
177
+ * This function can be used to execute code on the mass edit save.
178
+ * You can execute custom coding in this function.
179
+ * If you decide to do your own save processing, you can return `true` to prevent the default save behavior.
180
+ *
181
+ * This function is meant to be individually overridden by consuming controllers but not to be called directly.
182
+ * The override execution is: {@link sap.ui.core.mvc.OverrideExecution.Instead}.
183
+ * @param _mParameters Object containing the parameters passed to customMassEditSave
184
+ * @param _mParameters.aContexts Array containing the selected contexts for the mass edit
185
+ * @param _mParameters.oUpdateData A dictionary containing the propertyPath and its value
186
+ * @returns `true` to prevent the default execution, `false` to keep the standard behavior
187
+ * @public
188
+ * @since 1.130.0
189
+ */
190
+ customMassEditSave(_mParameters: { aContexts: Context[]; oUpdateData: Record<string, unknown> }): Promise<boolean>;
191
+ }
192
+ }
193
+
194
+ declare module "sap/fe/core/controllerextensions/IntentBasedNavigationOverrides" {
195
+ import type SelectionVariant from "sap/fe/navigation/SelectionVariant";
196
+ export default interface IntentBasedNavigationOverrides {
197
+ /**
198
+ * Provides a hook to customize the {@link sap.fe.navigation.SelectionVariant} related to the intent-based navigation.
199
+ * @param _oSelectionVariant SelectionVariant provided by SAP Fiori elements.
200
+ * @param _oNavigationInfo Object containing intent-based navigation-related info
201
+ * @param _oNavigationInfo.semanticObject Semantic object related to the intent
202
+ * @param _oNavigationInfo.action Action related to the intent
203
+ * @public
204
+ * @since 1.86.0
205
+ */
206
+ adaptNavigationContext(
207
+ _oSelectionVariant: SelectionVariant,
208
+ _oNavigationInfo: {
209
+ semanticObject: string;
210
+ action: string;
211
+ }
212
+ ): void;
213
+ }
214
+ }
215
+
216
+ declare module "sap/fe/core/controllerextensions/PaginatorOverrides" {
217
+ import type { ContextNavigationType } from "sap/fe/core/library";
218
+ import type { default as Context } from "sap/ui/model/odata/v4/Context";
219
+ export default interface PaginatorOverrides {
220
+ /**
221
+ * Returns the updated context after the paginator operation.
222
+ * @param oContext Final context returned after the paginator action
223
+ * @public
224
+ * @since 1.94.0
225
+ */
226
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
227
+ onContextUpdate(oContext: Context): void;
228
+ /**
229
+ * This method is invoked whenever a context is loaded using the paginator buttons. It determines whether the context supports navigation. The method must return one of the following:
230
+ * ContextNavigationType.None: If the context is not navigable.
231
+ * ContextNavigationType.Internal: If the context supports internal navigation within the same application to a detail view, such as an object page or a subobject page.
232
+ * ContextNavigationType.External: If the context navigates to an external application.
233
+ * The paginator buttons only allow navigation to contexts with internal navigation. Contexts with None or External navigation are skipped.
234
+ * @param context Object containing the context to be navigated.
235
+ * @returns A Promise which should resolve to ContextNavigationType enum.
236
+ * @public
237
+ * @since 1.138.0
238
+ */
239
+ determineContextNavigationType(context: Context): Promise<ContextNavigationType>;
240
+ }
241
+ }
242
+
243
+ declare module "sap/fe/core/controllerextensions/RoutingOverrides" {
244
+ import type Context from "sap/ui/model/odata/v4/Context";
245
+ export default interface RoutingOverrides {
246
+ /**
247
+ * This function can be used to intercept the routing event during the normal navigation process, such as when a table row is clicked to navigate, pagination buttons are used, the Apply button in an object page is clicked, or a sub-object page in a flexible column layout is closed.
248
+ *
249
+ * The function is not called during other means of external outbound navigation such as a navigation configured using a link or by using navigation buttons.
250
+ *
251
+ * If declared as an extension, it allows you to intercept and change the normal navigation flow.
252
+ * If you decide to implement your own navigation processing, you can return `true` to prevent the default routing behavior.
253
+ *
254
+ * This function is meant to be individually overridden by consuming controllers and not called directly.
255
+ * The override execution is: {@link sap.ui.core.mvc.OverrideExecution.After}.
256
+ * @param mNavigationParameters Object containing row context and page context
257
+ * @param mNavigationParameters.bindingContext The target navigation context
258
+ * @returns `true` to prevent the default execution, false to keep the standard behavior
259
+ * @public
260
+ * @since 1.86.0
261
+ */
262
+ onBeforeNavigation(mNavigationParameters: { bindingContext: Context }): Promise<boolean>;
263
+ /**
264
+ * This function is used to intercept the routing event before binding a page.
265
+ *
266
+ * If it is declared as an extension, it allows you to intercept and change the normal flow of binding.
267
+ *
268
+ * This function is not called directly, but overridden separately by consuming controllers.
269
+ * The override execution is: {@link sap.ui.core.mvc.OverrideExecution.After}.
270
+ * @param oContext Object containing the context for the navigation
271
+ * @public
272
+ * @since 1.90.0
273
+ */
274
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
275
+ onBeforeBinding(oContext: object | null): void;
276
+ /**
277
+ * This function is used to intercept the routing event after binding a page.
278
+ *
279
+ * If it is declared as an extension, it allows you to intercept and change the normal flow of binding.
280
+ *
281
+ * This function is not called directly, but overridden separately by consuming controllers.
282
+ * The override execution is: {@link sap.ui.core.mvc.OverrideExecution.After}.
283
+ * @param oContext Object containing the context to be navigated
284
+ * @public
285
+ * @since 1.90.0
286
+ */
287
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
288
+ onAfterBinding(oContext: object | null): void;
289
+ }
290
+ }
291
+
292
+ declare module "sap/fe/core/controllerextensions/ShareOverrides" {
293
+ export type ShareMetadata = {
294
+ url: string;
295
+ title: string;
296
+ email: {
297
+ url: string;
298
+ title: string;
299
+ };
300
+ jam: {
301
+ url?: string;
302
+ title: string;
303
+ };
304
+ tile: {
305
+ url?: string;
306
+ title: string;
307
+ subtitle: string;
308
+ icon?: string;
309
+ queryUrl?: string;
310
+ };
311
+ };
312
+ export default interface ShareOverrides {
313
+ /**
314
+ * Adapts the metadata used while sharing the page URL using 'Send Email', 'Share in SAP Jam', and 'Save as Tile'.
315
+ * @param oShareMetadata Object containing the share metadata.
316
+ * @param oShareMetadata.url Default URL that will be used with 'Send Email', 'Share in SAP Jam', and 'Save as Tile'
317
+ * @param oShareMetadata.title Default title that will be used as the 'email subject' in 'Send Email', 'share text' in 'Share in SAP Jam' and 'title' in 'Save as Tile'
318
+ * @param oShareMetadata.email Email-specific metadata.
319
+ * @param oShareMetadata.email.url URL that will be used specifically for 'Send Email'. This takes precedence over oShareMetadata.url.
320
+ * @param oShareMetadata.email.title Title that will be used as "email subject" in 'Send Email'. This takes precedence over oShareMetadata.title.
321
+ * @param oShareMetadata.jam SAP Jam-specific metadata.
322
+ * @param oShareMetadata.jam.url URL that will be used specifically for 'Share in SAP Jam'. This takes precedence over oShareMetadata.url.
323
+ * @param oShareMetadata.jam.title Title that will be used as 'share text' in 'Share in SAP Jam'. This takes precedence over oShareMetadata.title.
324
+ * @param oShareMetadata.tile Save as Tile-specific metadata.
325
+ * @param oShareMetadata.tile.url URL that will be used specifically for 'Save as Tile'. This takes precedence over oShareMetadata.url.
326
+ * @param oShareMetadata.tile.title Title to be used for the tile. This takes precedence over oShareMetadata.title.
327
+ * @param oShareMetadata.tile.subtitle Subtitle to be used for the tile.
328
+ * @param oShareMetadata.tile.icon Icon to be used for the tile.
329
+ * @param oShareMetadata.tile.queryUrl Query URL of an OData service from which data for a dynamic tile is read.
330
+ * @returns Share Metadata or a Promise resolving the Share Metadata
331
+ * @public
332
+ * @since 1.93.0
333
+ */
334
+ adaptShareMetadata(oShareMetadata: {
335
+ url: string;
336
+ title: string;
337
+ email: {
338
+ url: string;
339
+ title: string;
340
+ };
341
+ jam: {
342
+ url?: string;
343
+ title: string;
344
+ };
345
+ tile: {
346
+ url?: string;
347
+ title: string;
348
+ subtitle: string;
349
+ icon?: string;
350
+ queryUrl?: string;
351
+ };
352
+ }): ShareMetadata | Promise<ShareMetadata>;
353
+ }
354
+ }
355
+
356
+ declare module "sap/fe/core/controllerextensions/ViewStateOverrides" {
357
+ export default interface ViewStateOverrides {
358
+ /**
359
+ * Called when the application is suspended due to keep-alive mode.
360
+ * @public
361
+ */
362
+ onSuspend(): void;
363
+ /**
364
+ * Called when the application is restored due to keep-alive mode.
365
+ * @public
366
+ */
367
+ onRestore(): void;
368
+ }
369
+ }
@@ -0,0 +1,9 @@
1
+ /*!
2
+ * SAP UI development toolkit for HTML5 (SAPUI5)
3
+ * (c) Copyright 2009-2025 SAP SE. All rights reserved
4
+ */
5
+ sap.ui.define([], function () {
6
+ "use strict";
7
+
8
+ }, false);
9
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJzYXAuZmUuY29yZS1tYW51YWwtZXh0LmQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiZGVjbGFyZSBtb2R1bGUgXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9CYXNlQ29udHJvbGxlckV4dGVuc2lvblwiIHtcblx0aW1wb3J0IHR5cGUgUGFnZUNvbnRyb2xsZXIgZnJvbSBcInNhcC9mZS9jb3JlL1BhZ2VDb250cm9sbGVyXCI7XG5cdGltcG9ydCB0eXBlIEVkaXRGbG93T3ZlcnJpZGVzIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9FZGl0Rmxvd092ZXJyaWRlc1wiO1xuXHRpbXBvcnQgdHlwZSBJbnRlbnRCYXNlZE5hdmlnYXRpb25PdmVycmlkZSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvSW50ZW50QmFzZWROYXZpZ2F0aW9uT3ZlcnJpZGVzXCI7XG5cdGltcG9ydCB0eXBlIE1lc3NhZ2VIYW5kbGVyT3ZlcnJpZGVzIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9NZXNzYWdlSGFuZGxlck92ZXJyaWRlc1wiO1xuXHRpbXBvcnQgdHlwZSBQYWdpbmF0b3JPdmVycmlkZXMgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL1BhZ2luYXRvck92ZXJyaWRlc1wiO1xuXHRpbXBvcnQgdHlwZSBSb3V0aW5nT3ZlcnJpZGVzIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9Sb3V0aW5nT3ZlcnJpZGVzXCI7XG5cdGltcG9ydCB0eXBlIFNoYXJlT3ZlcnJpZGVzIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9TaGFyZU92ZXJyaWRlc1wiO1xuXHRpbXBvcnQgdHlwZSBWaWV3U3RhdGVPdmVycmlkZXMgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL1ZpZXdTdGF0ZU92ZXJyaWRlc1wiO1xuXHRpbXBvcnQgQ29udHJvbGxlckV4dGVuc2lvbiBmcm9tIFwic2FwL3VpL2NvcmUvbXZjL0NvbnRyb2xsZXJFeHRlbnNpb25cIjtcblxuXHR0eXBlIE1hcFRoaXM8VCwgUz4gPSB7XG5cdFx0W1AgaW4ga2V5b2YgU10/OiBTW1BdIGV4dGVuZHMgKC4uLmFyZ3M6IGluZmVyIEEpID0+IGluZmVyIFIgPyAodGhpczogVCwgLi4uYXJnczogQSkgPT4gUiA6IFNbUF07XG5cdH07XG5cdGV4cG9ydCB0eXBlIENvbnRyb2xsZXJFeHRlbnNpb25PdmVycmlkZXM8VCwgQ29udHJvbGxlclR5cGU+ID0ge1xuXHRcdC8vIExpZmVjeWNsZSBob29rc1xuXHRcdG9uSW5pdD86ICh0aGlzOiBUKSA9PiB2b2lkO1xuXHRcdG9uQmVmb3JlUmVuZGVyaW5nPzogKHRoaXM6IFQpID0+IHZvaWQ7XG5cdFx0b25BZnRlclJlbmRlcmluZz86ICh0aGlzOiBUKSA9PiB2b2lkO1xuXHRcdG9uRXhpdD86ICh0aGlzOiBUKSA9PiB2b2lkO1xuXG5cdFx0Ly8gQ0V4dCBIb29rc1xuXHRcdHBhZ2luYXRvcj86IE1hcFRoaXM8VCwgUGFnaW5hdG9yT3ZlcnJpZGVzPjtcblx0XHRlZGl0Rmxvdz86IE1hcFRoaXM8VCwgRWRpdEZsb3dPdmVycmlkZXM+O1xuXHRcdHJvdXRpbmc/OiBNYXBUaGlzPFQsIFJvdXRpbmdPdmVycmlkZXM+O1xuXHRcdG1lc3NhZ2VIYW5kbGVyPzogTWFwVGhpczxULCBNZXNzYWdlSGFuZGxlck92ZXJyaWRlcz47XG5cdFx0aW50ZW50QmFzZWROYXZpZ2F0aW9uPzogTWFwVGhpczxULCBJbnRlbnRCYXNlZE5hdmlnYXRpb25PdmVycmlkZT47XG5cdFx0c2hhcmU/OiBNYXBUaGlzPFQsIFNoYXJlT3ZlcnJpZGVzPjtcblx0XHR2aWV3U3RhdGU/OiBNYXBUaGlzPFQsIFZpZXdTdGF0ZU92ZXJyaWRlcz47XG5cdH0gJiBNYXBUaGlzPFxuXHRcdFQsXG5cdFx0T21pdDxcblx0XHRcdENvbnRyb2xsZXJUeXBlLFxuXHRcdFx0XCJlZGl0Rmxvd1wiIHwgXCJwYWdpbmF0b3JcIiB8IFwicm91dGluZ1wiIHwgXCJtZXNzYWdlSGFuZGxlclwiIHwgXCJpbnRlbnRCYXNlZE5hdmlnYXRpb25cIiB8IFwicmVjb21tZW5kYXRpb25zXCIgfCBcInNoYXJlXCIgfCBcInZpZXdTdGF0ZVwiXG5cdFx0PlxuXHQ+O1xuXG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnRcblx0Ly8gQHRzLWlnbm9yZVxuXHRleHBvcnQgZGVmYXVsdCBjbGFzcyBCYXNlQ29udHJvbGxlckV4dGVuc2lvbjxUIGV4dGVuZHMgUGFnZUNvbnRyb2xsZXIgPSBQYWdlQ29udHJvbGxlcj4gZXh0ZW5kcyBDb250cm9sbGVyRXh0ZW5zaW9uIHtcblx0XHRwcm90ZWN0ZWQgYmFzZTogVDtcblxuXHRcdHB1YmxpYyBzdGF0aWMgY3JlYXRlRXh0ZW5zaW9uT3ZlcnJpZGVzPEssIEJhc2VDb250cm9sbGVyVHlwZSA9IFBhZ2VDb250cm9sbGVyPihcblx0XHRcdG92ZXJyaWRlczogQ29udHJvbGxlckV4dGVuc2lvbk92ZXJyaWRlczxLLCBCYXNlQ29udHJvbGxlclR5cGU+XG5cdFx0KTogQ29udHJvbGxlckV4dGVuc2lvbk92ZXJyaWRlczxLLCBCYXNlQ29udHJvbGxlclR5cGU+O1xuXG5cdFx0Y29uc3RydWN0b3IoKTtcblx0fVxufVxuIl0sIm1hcHBpbmdzIjoiIiwiaWdub3JlTGlzdCI6W119
@@ -0,0 +1,49 @@
1
+ declare module "sap/fe/core/controllerextensions/BaseControllerExtension" {
2
+ import type PageController from "sap/fe/core/PageController";
3
+ import type EditFlowOverrides from "sap/fe/core/controllerextensions/EditFlowOverrides";
4
+ import type IntentBasedNavigationOverride from "sap/fe/core/controllerextensions/IntentBasedNavigationOverrides";
5
+ import type MessageHandlerOverrides from "sap/fe/core/controllerextensions/MessageHandlerOverrides";
6
+ import type PaginatorOverrides from "sap/fe/core/controllerextensions/PaginatorOverrides";
7
+ import type RoutingOverrides from "sap/fe/core/controllerextensions/RoutingOverrides";
8
+ import type ShareOverrides from "sap/fe/core/controllerextensions/ShareOverrides";
9
+ import type ViewStateOverrides from "sap/fe/core/controllerextensions/ViewStateOverrides";
10
+ import ControllerExtension from "sap/ui/core/mvc/ControllerExtension";
11
+
12
+ type MapThis<T, S> = {
13
+ [P in keyof S]?: S[P] extends (...args: infer A) => infer R ? (this: T, ...args: A) => R : S[P];
14
+ };
15
+ export type ControllerExtensionOverrides<T, ControllerType> = {
16
+ // Lifecycle hooks
17
+ onInit?: (this: T) => void;
18
+ onBeforeRendering?: (this: T) => void;
19
+ onAfterRendering?: (this: T) => void;
20
+ onExit?: (this: T) => void;
21
+
22
+ // CExt Hooks
23
+ paginator?: MapThis<T, PaginatorOverrides>;
24
+ editFlow?: MapThis<T, EditFlowOverrides>;
25
+ routing?: MapThis<T, RoutingOverrides>;
26
+ messageHandler?: MapThis<T, MessageHandlerOverrides>;
27
+ intentBasedNavigation?: MapThis<T, IntentBasedNavigationOverride>;
28
+ share?: MapThis<T, ShareOverrides>;
29
+ viewState?: MapThis<T, ViewStateOverrides>;
30
+ } & MapThis<
31
+ T,
32
+ Omit<
33
+ ControllerType,
34
+ "editFlow" | "paginator" | "routing" | "messageHandler" | "intentBasedNavigation" | "recommendations" | "share" | "viewState"
35
+ >
36
+ >;
37
+
38
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
39
+ // @ts-ignore
40
+ export default class BaseControllerExtension<T extends PageController = PageController> extends ControllerExtension {
41
+ protected base: T;
42
+
43
+ public static createExtensionOverrides<K, BaseControllerType = PageController>(
44
+ overrides: ControllerExtensionOverrides<K, BaseControllerType>
45
+ ): ControllerExtensionOverrides<K, BaseControllerType>;
46
+
47
+ constructor();
48
+ }
49
+ }
package/ui5.yaml CHANGED
@@ -11,6 +11,7 @@ framework:
11
11
  - name: sap.fe.placeholder
12
12
  - name: sap.m
13
13
  - name: sap.ui.core
14
+ - name: sap.ui.fl
14
15
  - name: sap.ui.layout
15
16
  - name: themelib_sap_fiori_3
16
17
  optional: true
@@ -23,6 +24,7 @@ builder:
23
24
  name: sap/fe/core-lib-preload
24
25
  filters:
25
26
  - sap/fe/core/**/*
27
+ - sap/fe/core/manifest.json
26
28
  - sap/fe/base/**/*
27
29
  - "!sap/fe/**/*.designtime.js"
28
30
  - "!sap/fe/designtime/**/*"