@sapui5/sap.fe.core 1.141.2 → 1.143.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.
Files changed (217) 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 +78 -23
  4. package/src/sap/fe/core/ActionRuntime.ts +91 -35
  5. package/src/sap/fe/core/AppComponent.js +76 -6
  6. package/src/sap/fe/core/AppComponent.ts +91 -8
  7. package/src/sap/fe/core/AppStateHandler.js +7 -7
  8. package/src/sap/fe/core/AppStateHandler.ts +9 -8
  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 -11
  14. package/src/sap/fe/core/ExtensionAPI.ts +3 -16
  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 +12 -1
  18. package/src/sap/fe/core/TemplateComponent.ts +16 -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 +5 -3
  26. package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplatingBase.ts +5 -2
  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 -44
  30. package/src/sap/fe/core/controllerextensions/CollaborativeDraft.ts +92 -59
  31. package/src/sap/fe/core/controllerextensions/EditFlow.js +74 -48
  32. package/src/sap/fe/core/controllerextensions/EditFlow.ts +87 -50
  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 +10 -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 +4 -4
  48. package/src/sap/fe/core/controllerextensions/Routing.ts +3 -6
  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 +49 -21
  58. package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.ts +64 -24
  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 +6 -7
  64. package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataOperation.ts +5 -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/OperationMessage.js +2 -1
  68. package/src/sap/fe/core/controllerextensions/editFlow/operations/OperationMessage.ts +1 -0
  69. package/src/sap/fe/core/controllerextensions/editFlow/operations/OperationParameters.js +2 -1
  70. package/src/sap/fe/core/controllerextensions/editFlow/operations/OperationParameters.ts +1 -0
  71. package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.js +21 -15
  72. package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.ts +18 -15
  73. package/src/sap/fe/core/controllerextensions/routing/RouterProxy.js +7 -6
  74. package/src/sap/fe/core/controllerextensions/routing/RouterProxy.ts +8 -5
  75. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DraftDataLossDialog.js +9 -4
  76. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DraftDataLossDialog.tsx +10 -4
  77. package/src/sap/fe/core/controls/Recommendations/ConfirmRecommendationDialog.js +3 -2
  78. package/src/sap/fe/core/controls/Recommendations/ConfirmRecommendationDialog.tsx +2 -1
  79. package/src/sap/fe/core/converters/ManifestSettings.js +7 -1
  80. package/src/sap/fe/core/converters/ManifestSettings.ts +37 -0
  81. package/src/sap/fe/core/converters/ManifestWrapper.js +29 -9
  82. package/src/sap/fe/core/converters/ManifestWrapper.ts +29 -11
  83. package/src/sap/fe/core/converters/MetaModelConverter.js +1 -1
  84. package/src/sap/fe/core/converters/MetaModelConverter.ts +1 -1
  85. package/src/sap/fe/core/converters/annotations/DataField.js +46 -19
  86. package/src/sap/fe/core/converters/annotations/DataField.ts +93 -19
  87. package/src/sap/fe/core/converters/common/AnnotationConverter.js +118 -39
  88. package/src/sap/fe/core/converters/controls/Common/Action.js +58 -21
  89. package/src/sap/fe/core/converters/controls/Common/Action.ts +72 -22
  90. package/src/sap/fe/core/converters/controls/Common/Chart.js +13 -3
  91. package/src/sap/fe/core/converters/controls/Common/Chart.ts +20 -4
  92. package/src/sap/fe/core/converters/controls/Common/Form.js +18 -3
  93. package/src/sap/fe/core/converters/controls/Common/Form.ts +23 -1
  94. package/src/sap/fe/core/converters/controls/Common/Table.js +87 -22
  95. package/src/sap/fe/core/converters/controls/Common/Table.ts +112 -21
  96. package/src/sap/fe/core/converters/controls/Common/filter/FilterRestrictions.js +243 -0
  97. package/src/sap/fe/core/converters/controls/Common/filter/FilterRestrictions.ts +309 -0
  98. package/src/sap/fe/core/converters/controls/Common/table/Columns.js +142 -58
  99. package/src/sap/fe/core/converters/controls/Common/table/Columns.ts +174 -79
  100. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +7 -16
  101. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +6 -17
  102. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js +16 -5
  103. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +16 -5
  104. package/src/sap/fe/core/converters/helpers/Aggregation.js +12 -2
  105. package/src/sap/fe/core/converters/helpers/Aggregation.ts +11 -1
  106. package/src/sap/fe/core/converters/helpers/DataFieldHelper.js +27 -3
  107. package/src/sap/fe/core/converters/helpers/DataFieldHelper.ts +28 -1
  108. package/src/sap/fe/core/converters/helpers/ID.js +3 -1
  109. package/src/sap/fe/core/converters/helpers/ID.ts +1 -0
  110. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +10 -5
  111. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +13 -1
  112. package/src/sap/fe/core/converters/templates/ListReportConverter.js +11 -3
  113. package/src/sap/fe/core/converters/templates/ListReportConverter.ts +12 -4
  114. package/src/sap/fe/core/converters/templates/ObjectPageConverter.js +19 -8
  115. package/src/sap/fe/core/converters/templates/ObjectPageConverter.ts +18 -7
  116. package/src/sap/fe/core/designtime/AnnotationBasedChanges.js +8 -3
  117. package/src/sap/fe/core/designtime/AnnotationBasedChanges.ts +7 -2
  118. package/src/sap/fe/core/flexibility/AppComponent.flexibility.js +55 -0
  119. package/src/sap/fe/core/flexibility/AppComponent.flexibility.ts +65 -0
  120. package/src/sap/fe/core/flexibility/XMLTools.js +71 -0
  121. package/src/sap/fe/core/flexibility/XMLTools.ts +61 -0
  122. package/src/sap/fe/core/fpm/manifest.json +2 -2
  123. package/src/sap/fe/core/helpers/AppStartupHelper.js +79 -25
  124. package/src/sap/fe/core/helpers/AppStartupHelper.ts +92 -32
  125. package/src/sap/fe/core/helpers/DeleteHelper.js +13 -13
  126. package/src/sap/fe/core/helpers/DeleteHelper.ts +17 -15
  127. package/src/sap/fe/core/helpers/ManifestHelper.js +6 -3
  128. package/src/sap/fe/core/helpers/ManifestHelper.ts +3 -0
  129. package/src/sap/fe/core/helpers/MetaModelFunction.js +12 -3
  130. package/src/sap/fe/core/helpers/MetaModelFunction.ts +11 -3
  131. package/src/sap/fe/core/helpers/ModelHelper.js +47 -11
  132. package/src/sap/fe/core/helpers/ModelHelper.ts +62 -15
  133. package/src/sap/fe/core/helpers/PasteHelper.js +6 -2
  134. package/src/sap/fe/core/helpers/PasteHelper.ts +5 -7
  135. package/src/sap/fe/core/helpers/TypeGuards.js +12 -2
  136. package/src/sap/fe/core/helpers/TypeGuards.ts +10 -1
  137. package/src/sap/fe/core/helpers/WebSocket.js +6 -7
  138. package/src/sap/fe/core/helpers/WebSocket.ts +10 -6
  139. package/src/sap/fe/core/library.js +33 -3
  140. package/src/sap/fe/core/library.ts +31 -1
  141. package/src/sap/fe/core/messagebundle.properties +8 -1
  142. package/src/sap/fe/core/messagebundle_ar.properties +8 -1
  143. package/src/sap/fe/core/messagebundle_bg.properties +10 -3
  144. package/src/sap/fe/core/messagebundle_ca.properties +7 -0
  145. package/src/sap/fe/core/messagebundle_cnr.properties +7 -0
  146. package/src/sap/fe/core/messagebundle_cs.properties +7 -0
  147. package/src/sap/fe/core/messagebundle_cy.properties +8 -1
  148. package/src/sap/fe/core/messagebundle_da.properties +7 -0
  149. package/src/sap/fe/core/messagebundle_de.properties +7 -0
  150. package/src/sap/fe/core/messagebundle_el.properties +7 -0
  151. package/src/sap/fe/core/messagebundle_en.properties +8 -1
  152. package/src/sap/fe/core/messagebundle_en_GB.properties +7 -0
  153. package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +8 -1
  154. package/src/sap/fe/core/messagebundle_es.properties +8 -1
  155. package/src/sap/fe/core/messagebundle_es_MX.properties +7 -0
  156. package/src/sap/fe/core/messagebundle_et.properties +7 -0
  157. package/src/sap/fe/core/messagebundle_fi.properties +7 -0
  158. package/src/sap/fe/core/messagebundle_fr.properties +16 -9
  159. package/src/sap/fe/core/messagebundle_fr_CA.properties +7 -0
  160. package/src/sap/fe/core/messagebundle_hi.properties +8 -1
  161. package/src/sap/fe/core/messagebundle_hr.properties +7 -0
  162. package/src/sap/fe/core/messagebundle_hu.properties +7 -0
  163. package/src/sap/fe/core/messagebundle_id.properties +7 -0
  164. package/src/sap/fe/core/messagebundle_it.properties +7 -0
  165. package/src/sap/fe/core/messagebundle_iw.properties +7 -0
  166. package/src/sap/fe/core/messagebundle_ja.properties +8 -1
  167. package/src/sap/fe/core/messagebundle_kk.properties +7 -0
  168. package/src/sap/fe/core/messagebundle_ko.properties +7 -0
  169. package/src/sap/fe/core/messagebundle_lt.properties +7 -0
  170. package/src/sap/fe/core/messagebundle_lv.properties +7 -0
  171. package/src/sap/fe/core/messagebundle_mk.properties +7 -0
  172. package/src/sap/fe/core/messagebundle_ms.properties +7 -0
  173. package/src/sap/fe/core/messagebundle_nl.properties +7 -0
  174. package/src/sap/fe/core/messagebundle_no.properties +9 -2
  175. package/src/sap/fe/core/messagebundle_pl.properties +7 -0
  176. package/src/sap/fe/core/messagebundle_pt.properties +7 -0
  177. package/src/sap/fe/core/messagebundle_pt_PT.properties +7 -0
  178. package/src/sap/fe/core/messagebundle_ro.properties +7 -0
  179. package/src/sap/fe/core/messagebundle_ru.properties +7 -0
  180. package/src/sap/fe/core/messagebundle_sh.properties +7 -0
  181. package/src/sap/fe/core/messagebundle_sk.properties +7 -0
  182. package/src/sap/fe/core/messagebundle_sl.properties +7 -0
  183. package/src/sap/fe/core/messagebundle_sr.properties +7 -0
  184. package/src/sap/fe/core/messagebundle_sv.properties +7 -0
  185. package/src/sap/fe/core/messagebundle_th.properties +7 -0
  186. package/src/sap/fe/core/messagebundle_tr.properties +7 -0
  187. package/src/sap/fe/core/messagebundle_uk.properties +7 -0
  188. package/src/sap/fe/core/messagebundle_vi.properties +7 -0
  189. package/src/sap/fe/core/messagebundle_zh_CN.properties +8 -1
  190. package/src/sap/fe/core/messagebundle_zh_TW.properties +7 -0
  191. package/src/sap/fe/core/rootView/Fcl.controller.js +21 -7
  192. package/src/sap/fe/core/rootView/Fcl.controller.ts +22 -5
  193. package/src/sap/fe/core/rootView/NavContainer.controller.js +1 -1
  194. package/src/sap/fe/core/rootView/NavContainer.controller.ts +2 -1
  195. package/src/sap/fe/core/rootView/RootViewBaseController.js +96 -88
  196. package/src/sap/fe/core/rootView/RootViewBaseController.ts +106 -96
  197. package/src/sap/fe/core/services/CollaborativeToolsServiceFactory.js +1 -1
  198. package/src/sap/fe/core/services/CollaborativeToolsServiceFactory.ts +9 -9
  199. package/src/sap/fe/core/services/EnvironmentServiceFactory.js +14 -10
  200. package/src/sap/fe/core/services/EnvironmentServiceFactory.ts +15 -10
  201. package/src/sap/fe/core/services/RoutingServiceFactory.js +9 -4
  202. package/src/sap/fe/core/services/RoutingServiceFactory.ts +13 -6
  203. package/src/sap/fe/core/services/SideEffectsServiceFactory.js +9 -7
  204. package/src/sap/fe/core/services/SideEffectsServiceFactory.ts +13 -8
  205. package/src/sap/fe/core/services/TemplatedViewServiceFactory.js +57 -5
  206. package/src/sap/fe/core/services/TemplatedViewServiceFactory.ts +69 -10
  207. package/src/sap/fe/core/services/collaborativeDraftServiceFactory.js +33 -15
  208. package/src/sap/fe/core/services/collaborativeDraftServiceFactory.ts +31 -11
  209. package/src/sap/fe/core/templating/DisplayModeFormatter.js +4 -5
  210. package/src/sap/fe/core/templating/DisplayModeFormatter.ts +4 -6
  211. package/src/sap/fe/core/templating/UIFormatters.js +17 -2
  212. package/src/sap/fe/core/templating/UIFormatters.ts +25 -1
  213. package/src/sap/fe/core/types/sap.fe.core-auto-ext.d.js +10 -0
  214. package/src/sap/fe/core/types/sap.fe.core-auto-ext.d.ts +369 -0
  215. package/src/sap/fe/core/types/sap.fe.core-manual-ext.d.js +9 -0
  216. package/src/sap/fe/core/types/sap.fe.core-manual-ext.d.ts +49 -0
  217. package/ui5.yaml +2 -0
@@ -22,6 +22,7 @@ import MetaPath from "sap/fe/core/helpers/MetaPath";
22
22
  import PromiseKeeper from "sap/fe/core/helpers/PromiseKeeper";
23
23
  import { isEntitySet, isNavigationProperty, isPathAnnotationExpression } from "sap/fe/core/helpers/TypeGuards";
24
24
  import type { DataModelObjectPath } from "sap/fe/core/templating/DataModelPathHelper";
25
+ import type { PropertyBindingInfo } from "sap/ui/base/ManagedObject";
25
26
  import UI5Element from "sap/ui/core/Element";
26
27
  import type Message from "sap/ui/core/message/Message";
27
28
  import type View from "sap/ui/core/mvc/View";
@@ -183,7 +184,7 @@ const ModelHelper = {
183
184
  const oMetaModel = oContext.getModel().getMetaModel();
184
185
  const getRootPath = function (sPath: string, model: ODataModel, firstIteration = true): string | undefined {
185
186
  const sIterationPath = firstIteration ? sPath : new RegExp(/.*(?=\/)/).exec(sPath)?.[0]; // *Regex to get the ancestor
186
- if (sIterationPath && sIterationPath !== "/") {
187
+ if (oMetaModel && sIterationPath && sIterationPath !== "/") {
187
188
  const sEntityPath = oMetaModel.getMetaPath(sIterationPath);
188
189
  const mDataModel = MetaModelConverter.getInvolvedDataModelObjects(oMetaModel.getContext(sEntityPath));
189
190
  if (
@@ -286,6 +287,30 @@ const ModelHelper = {
286
287
  */
287
288
 
288
289
  enhanceInternalJSONModel: function (oInternalModel: JSONModel): void {
290
+ const fnSetProperty = oInternalModel.setProperty.bind(oInternalModel);
291
+ oInternalModel.setProperty = function (
292
+ propertyPath: string,
293
+ value: unknown,
294
+ oContext: Context | undefined,
295
+ bAsyncUpdate: boolean
296
+ ): boolean {
297
+ if (oContext && oContext.getObject() === undefined) {
298
+ // initialize
299
+ fnSetProperty(oContext.getPath(), {});
300
+ }
301
+ const propertyPathSplit = propertyPath.split("/");
302
+ let path = oContext?.getPath().replace(/\/$/, "") ?? ""; // Remove slash if it is at the end
303
+ // let's ensure that sub objects are initialized
304
+ const startIndex = propertyPath.startsWith("/") ? 1 : 0;
305
+ for (let i = startIndex; i < propertyPathSplit.length - 1; i++) {
306
+ path = `${path}/${propertyPathSplit[i]}`;
307
+ if (this.getProperty(path, oContext) === undefined) {
308
+ // initialize
309
+ fnSetProperty(path, {});
310
+ }
311
+ }
312
+ return fnSetProperty(propertyPath, value, oContext, bAsyncUpdate);
313
+ };
289
314
  const fnBindContext = oInternalModel.bindContext;
290
315
  oInternalModel.bindContext = function (
291
316
  sPath: string,
@@ -573,7 +598,12 @@ const ModelHelper = {
573
598
  localAnnotationModel.getProperty = function (path, context: ODataV4Context): unknown {
574
599
  const [propertyName, annotationType] = path.split("@$ui5.fe.");
575
600
 
576
- if (context && context.isTransient() !== true && annotationType === "@Common/ExternalID") {
601
+ if (
602
+ context &&
603
+ context.isTransient() !== true &&
604
+ (context.getIndex() === undefined || context.getIndex()! >= 0) &&
605
+ annotationType === "@Common/ExternalID"
606
+ ) {
577
607
  const contextObject = context.getObject();
578
608
  if (contextObject) {
579
609
  const metaPath = new MetaPath<EntitySet>(
@@ -599,7 +629,7 @@ const ModelHelper = {
599
629
  return baseGetProperty.apply(this, [path, context]);
600
630
  };
601
631
 
602
- localAnnotationModel.setProperty = function (path, value, context, asyncUpdate): boolean {
632
+ localAnnotationModel.setProperty = function (path, value, context: ODataV4Context, asyncUpdate): boolean {
603
633
  let fullPath = path;
604
634
  if (context) {
605
635
  fullPath = context.getPath(path);
@@ -624,13 +654,16 @@ const ModelHelper = {
624
654
  const propertiesToRequest = [externalIdPropPath.substring(0, externalIdPropPath.lastIndexOf("/"))];
625
655
  const textProperty = metaPath.getMetaPathForPath<Property>(metaPath.getPath() + "/" + externalIdPropPath)?.getTarget()
626
656
  .annotations.Common?.Text;
657
+ if (value === null) {
658
+ context.setProperty(externalIdPropPath, null, null);
659
+ }
627
660
  if (isPathAnnotationExpression(textProperty)) {
628
661
  const textPropPath = textProperty.path;
629
662
  if (textPropPath.includes("/")) {
630
663
  propertiesToRequest.push(textPropPath);
631
664
  }
632
665
  }
633
- (context as ODataV4Context)
666
+ context
634
667
  .requestSideEffects(propertiesToRequest)
635
668
  .then(_refreshLocalModel)
636
669
  .catch((err) => {
@@ -844,10 +877,14 @@ const ModelHelper = {
844
877
  * @param metaModel
845
878
  * @returns The resolved text if possible, else the input value or an empty string if the path was undefined
846
879
  */
847
- fetchTextFromMetaModel(path: string | undefined, converterContext?: ConverterContext<unknown>, metaModel?: MetaModel): string {
880
+ fetchTextFromMetaModel(
881
+ path: string | PropertyBindingInfo | undefined,
882
+ converterContext?: ConverterContext<unknown>,
883
+ metaModel?: MetaModel
884
+ ): string {
848
885
  let text = path !== undefined ? path : "";
849
- if (path?.startsWith("{metaModel>")) {
850
- const metaModelPath = path.substring(11, path.length - 1);
886
+ if ((typeof path === "string" && path?.startsWith?.("{metaModel>")) || path?.model === "metaModel") {
887
+ const metaModelPath = typeof path === "string" ? path.substring(11, path.length - 1) : path?.path;
851
888
  try {
852
889
  if (converterContext) {
853
890
  text = converterContext.getEntityTypeAnnotation(metaModelPath).annotation?.toString() ?? "";
@@ -1015,14 +1052,13 @@ const ModelHelper = {
1015
1052
  const placeholderDescriptionKey = localModelPath + "@$ui5.fe.recommendations.placeholderDescription";
1016
1053
  const typeAheadValuesKey = localModelPath + "@$ui5.fe.recommendations.typeAheadValues";
1017
1054
 
1018
- recommendationObj[typeAheadValuesKey] = [];
1019
-
1020
1055
  for (const propertyRecommendation of propertyRecommendations) {
1021
1056
  if (propertyRecommendation.RecommendedFieldIsSuggestion) {
1022
1057
  recommendationObj[placeholderValueKey] = propertyRecommendation.RecommendedFieldValue;
1023
1058
  recommendationObj[placeholderDescriptionKey] = propertyRecommendation.RecommendedFieldDescription;
1024
1059
  }
1025
1060
  if (propertyRecommendation.RecommendedFieldValue) {
1061
+ recommendationObj[typeAheadValuesKey] = recommendationObj[typeAheadValuesKey] || [];
1026
1062
  (recommendationObj[typeAheadValuesKey] as string[]).push(propertyRecommendation.RecommendedFieldValue);
1027
1063
  }
1028
1064
  }
@@ -1033,11 +1069,22 @@ const ModelHelper = {
1033
1069
  }
1034
1070
  recommendationObj["recommendationContext"] = currentContext;
1035
1071
  if (!this._compareRecommendations(recommendationObj, rejectedRecommendations[currentContext.getPath()] || {})) {
1036
- Object.keys(recommendationObj).forEach((key) => {
1037
- const fullPath = currentContext.getPath(key);
1038
- // Set the final value at the last path
1039
- localAnnotationModel.setProperty(fullPath, recommendationObj[key], currentContext, false);
1040
- });
1072
+ // Get existing data from the local annotation model for the current context path
1073
+ const existingData = localAnnotationModel.getProperty(currentContext.getPath()) || {};
1074
+
1075
+ // Remove all keys that include "@$ui5.fe.recommendations" from existing data
1076
+ const cleanedExistingData: Record<string, unknown> = {};
1077
+ for (const key in existingData) {
1078
+ if (!key.includes("@$ui5.fe.recommendations")) {
1079
+ cleanedExistingData[key] = existingData[key];
1080
+ }
1081
+ }
1082
+
1083
+ // Merge cleaned existing data with new recommendation data
1084
+ const mergedData = { ...cleanedExistingData, ...recommendationObj };
1085
+
1086
+ // make sure to set the recommendations on the current context path so that old recommendations are overridden and some stale data is not shown.
1087
+ localAnnotationModel.setProperty(currentContext.getPath(), mergedData, currentContext, false);
1041
1088
  }
1042
1089
  }
1043
1090
  },
@@ -1111,7 +1158,7 @@ type RecommendationDetails = {
1111
1158
  };
1112
1159
 
1113
1160
  export type InternalModelContext = { getModel(): JSONModel } & BaseContext & {
1114
- setProperty(sPath: string, vValue: unknown): void;
1161
+ setProperty(sPath: string, vValue: unknown, context?: Context, asyncUpdate?: boolean): void;
1115
1162
  };
1116
1163
 
1117
1164
  export default ModelHelper;
@@ -404,7 +404,11 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/converters/MetaModelConverter", "sap
404
404
  const lastTransientContext = transientContexts.pop();
405
405
  //check if the last transient context has an error message
406
406
  const lastTransientContextHasErrorMessage = !!Messaging.getMessageModel().getData().find(message => lastTransientContext && message.getTargets()[0].includes(lastTransientContext.getPath()));
407
- const newContexts = aValidatedData.length > 0 ? await editFlow.createMultipleDocuments(table.getRowBinding(), aValidatedData, tableDefinition?.control?.createAtEnd, true, controller.editFlow.onBeforeCreate) : undefined;
407
+ const newContexts = aValidatedData.length > 0 ? await editFlow.createMultipleDocuments(table.getRowBinding(), aValidatedData, {
408
+ createAtEnd: tableDefinition?.control?.createAtEnd,
409
+ isFromCopyPaste: true,
410
+ beforeCreateCallBack: controller.editFlow.onBeforeCreate
411
+ }) : undefined;
408
412
  // if the last transient context has no error message, delete it and recreate a new one at the last position
409
413
  if (lastTransientContext && !lastTransientContextHasErrorMessage) {
410
414
  lastTransientContext?.delete();
@@ -419,4 +423,4 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/converters/MetaModelConverter", "sap
419
423
  };
420
424
  return PasteHelper;
421
425
  }, false);
422
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJnZXRJbmZvRm9yRW50aXR5UHJvcGVydHkiLCJwcm9wZXJ0eVBhdGgiLCJyb3dCaW5kaW5nUGF0aCIsIm1ldGFDb250ZXh0IiwibWV0YU1vZGVsIiwiZW5hYmxlUGFzdGluZ09mQ29tcHV0ZWRQcm9wZXJ0aWVzIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwidW5kZWZpbmVkIiwiZm9yY2VJZ25vcmUiLCJwcm9wZXJ0eSIsImdldFByb3BlcnR5IiwiZm9ybWF0T3B0aW9ucyIsInBhcnNlS2VlcHNFbXB0eVN0cmluZyIsInR5cGUiLCJnZXRVSTVUeXBlIiwiaXNJZ25vcmVkIiwiY29tcHV0ZWQiLCJpZ25vcmUiLCJkaXNwbGF5RXJyb3JNZXNzYWdlcyIsImVycm9yTWVzc2FnZXMiLCJtZXNzYWdlRGV0YWlscyIsInJlc291cmNlQnVuZGxlIiwiTGlicmFyeSIsImdldFJlc291cmNlQnVuZGxlRm9yIiwiZXJyb3JDb3JyZWN0aW9uTWVzc2FnZSIsImdldFRleHQiLCJub3RlTWVzc2FnZSIsInBhc3RlRXJyb3JNZXNzYWdlIiwidW5zaGlmdCIsIk1lc3NhZ2VCb3giLCJlcnJvciIsInRpdGxlIiwiZGV0YWlscyIsImpvaW4iLCJQYXN0ZUhlbHBlciIsImZvcm1hdEN1c3RvbU1lc3NhZ2UiLCJ2YWxpZGF0aW9uTWVzc2FnZXMiLCJpUm93TnVtYmVyIiwiZXJyb3JNZXNzYWdlIiwibnVtYmVyTWVzc2FnZXMiLCJpMThuUm93IiwiZm9yRWFjaCIsIm1lc3NhZ2UiLCJpbmRleE1lc3NhZ2UiLCJtZXNzYWdlVGV4dCIsImdldENvbHVtbkluZm8iLCJ0YWJsZSIsImNvbHVtbnMiLCJpZ25vcmVOYXZpZ2F0aW9uUHJvcGVydHkiLCJtb2RlbCIsImdldFJvd0JpbmRpbmciLCJnZXRNb2RlbCIsImdldE1ldGFNb2RlbCIsInJlc29sdmUiLCJnZXRQYXRoIiwiZ2V0Q29udGV4dCIsImdldE1ldGFDb250ZXh0IiwiZW50aXR5VHlwZVByb3BlcnRpZXMiLCJNZXRhTW9kZWxDb252ZXJ0ZXIiLCJnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMiLCJ0YXJnZXRFbnRpdHlUeXBlIiwiZW50aXR5UHJvcGVydGllcyIsImNvbHVtbkFycmFuZ2VtZW50UHJvcGVydHkiLCJ0YWJsZURlZmluaXRpb24iLCJnZXRQYXJlbnQiLCJnZXRUYWJsZURlZmluaXRpb24iLCJnZXRDb2x1bW5Gcm9tUHJvcGVydHlJbmZvcyIsImRhdGFQcm9wZXJ0eSIsImhhc1ZhbHVlSGVscCIsInRleHQiLCJwdXNoIiwiZXhwb3J0U2V0dGluZ3MiLCJpbmNsdWRlcyIsInBhdGgiLCJjb250cm9sIiwicHJvcGVydHlJbmZvIiwiZ2V0RW5oYW5jZWRGZXRjaGVkUHJvcGVydHlJbmZvcyIsInByb3BlcnR5SW5mb0RpY3QiLCJPYmplY3QiLCJhc3NpZ24iLCJtYXAiLCJrZXkiLCJjb2x1bW5JbmZvcyIsImdldENvbHVtbnMiLCJjb2x1bW4iLCJpbmZvUHJvcGVydHkiLCJnZXRQcm9wZXJ0eUtleSIsInByb3BlcnR5SW5mb3MiLCJoYXNWYWx1ZUhlbHBQcm9wZXJ0eSIsImNvbHVtblRvUHVzaCIsImV4cG9ydERhdGFQb2ludFRhcmdldFZhbHVlIiwiZmluZCIsInAiLCJuYW1lIiwiYW5ub3RhdGlvbnMiLCJDb21tb24iLCJWYWx1ZUxpc3QiLCJwYXJzZVBhc3RlZERhdGEiLCJyYXdEYXRhIiwicGFzdGVJbmZvcyIsInBhc3RlZENvbHVtbkNvdW50IiwiZmlyc3RFZGl0YWJsZUNvbHVtbkluZGV4IiwiSSIsImNvbXB1dGVkUHJvcGVydGllcyIsImZpbHRlciIsImluZm8iLCJjb21wdXRlZFByb3BlcnR5IiwiY29sdW1uUG9zaXRpb24iLCJpbmRleE9mIiwiaXNDb2xFbXB0eSIsImV2ZXJ5Iiwicm93IiwicGFyc2VSZXN1bHQiLCJwYXJzZWREYXRhIiwiZXJyb3JzIiwiQ29yZVBhc3RlSGVscGVyIiwicGFyc2UiLCJvRWxlbWVudCIsIl91cGRhdGVDb250ZXh0cyIsImNvbnRleHRzIiwiZGF0YSIsImluZGV4Iiwic2V0UHJvcGVydHlQcm9taXNlcyIsInJvd0NvbnRleHQiLCJnZXRQcm9wZXJ0eUVkaXRNb2RlIiwiRmllbGRFZGl0TW9kZSIsIkVkaXRhYmxlIiwic2V0UHJvcGVydHkiLCJMb2ciLCJ3YXJuaW5nIiwiZ2V0SW5kZXgiLCJQcm9taXNlIiwiYWxsU2V0dGxlZCIsImdldFBhc3RlSW5mb3JtYXRpb25Gb3JSZXBvbnNpdmVUYWJsZSIsImNlbGxTZWxlY3Rpb24iLCJwb3NGaXJzdFNlbGVjdGVkUm93IiwibnVtYmVyT2ZOZXdDcmVhdGlvblJvd3MiLCJwb3NGaXJzdElubGluZUNyZWF0aW9uUm93SW5UYWJsZSIsImdldEN1cnJlbnRDb250ZXh0cyIsImZpbmRJbmRleCIsImNvbnRleHQiLCJpc1RyYW5zaWVudCIsInJvd3MiLCJ1cGRhdGVkUm93Q291bnQiLCJzbGljZSIsImxhc3RJbmxpbmVDcmVhdGlvblJvd0luU2VsZWN0aW9uIiwicG9wIiwicG9zTGFzdElubGluZUNyZWF0aW9uUm93SW5TZWxlY3Rpb24iLCJNYXRoIiwibWluIiwiZ2V0UGFzdGVJbmZvcm1hdGlvbkZvckdyaWRUYWJsZSIsInRhYmxlUm93Y0NvdW50IiwiZ2V0TGVuZ3RoIiwiZ2V0UGFzdGVJbmZvcm1hdGlvbiIsInBhc3RlSW5mb3JtYXRpb24iLCJnZXRDcmVhdGlvbk1vZGUiLCJnZXROYW1lIiwiQ3JlYXRpb25Nb2RlIiwiSW5saW5lQ3JlYXRpb25Sb3dzIiwicGFzdGVSYW5nZURhdGEiLCJwYXN0ZUluZm8iLCJjcmVhdGVFbXB0eVJvd3MiLCJyZXF1ZXN0Q29udGV4dHMiLCJwb3NGaXJzdElubGluZUNyZWF0aW9uUm93IiwiZm9jdXNSb3ciLCJ1cGRhdGVkQ29sQ291bnQiLCJrZXlzIiwicGFzdGVEYXRhIiwiY29udHJvbGxlciIsImVkaXRGbG93IiwiYURhdGEiLCJ0aGVuIiwiYVBhcnNlZERhdGEiLCJhbGwiLCJtRGF0YSIsInZhbGlkYXRlRG9jdW1lbnQiLCJnZXRCaW5kaW5nQ29udGV4dCIsImN1c3RvbVZhbGlkYXRpb25GdW5jdGlvbiIsImFWYWxpZGF0aW9uTWVzc2FnZXMiLCJhRXJyb3JNZXNzYWdlcyIsInJlZHVjZSIsImFNZXNzYWdlcyIsImFDdXN0b21NZXNzYWdlcyIsIm1lc3NhZ2VzIiwiYVJvd01lc3NhZ2VzIiwibUVycm9yIiwiYVZhbGlkYXRlZERhdGEiLCJ0cmFuc2llbnRDb250ZXh0cyIsImxhc3RUcmFuc2llbnRDb250ZXh0IiwibGFzdFRyYW5zaWVudENvbnRleHRIYXNFcnJvck1lc3NhZ2UiLCJNZXNzYWdpbmciLCJnZXRNZXNzYWdlTW9kZWwiLCJnZXREYXRhIiwiZ2V0VGFyZ2V0cyIsIm5ld0NvbnRleHRzIiwiY3JlYXRlTXVsdGlwbGVEb2N1bWVudHMiLCJjcmVhdGVBdEVuZCIsIm9uQmVmb3JlQ3JlYXRlIiwiZGVsZXRlIiwiY2F0Y2giLCJvRXJyb3IiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIlBhc3RlSGVscGVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgQXJyYXlXaXRoSW5kZXgsIFByb3BlcnR5IH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzXCI7XG5pbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCB0eXBlIFBhZ2VDb250cm9sbGVyIGZyb20gXCJzYXAvZmUvY29yZS9QYWdlQ29udHJvbGxlclwiO1xuaW1wb3J0ICogYXMgTWV0YU1vZGVsQ29udmVydGVyIGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL01ldGFNb2RlbENvbnZlcnRlclwiO1xuaW1wb3J0IHR5cGUgVGFibGVBUEkgZnJvbSBcInNhcC9mZS9tYWNyb3MvdGFibGUvVGFibGVBUElcIjtcbmltcG9ydCB0eXBlIHsgRW5oYW5jZWRGRVByb3BlcnR5SW5mbyB9IGZyb20gXCJzYXAvZmUvbWFjcm9zL3RhYmxlL1RhYmxlQVBJXCI7XG5pbXBvcnQgTWVzc2FnZUJveCBmcm9tIFwic2FwL20vTWVzc2FnZUJveFwiO1xuaW1wb3J0IExpYnJhcnkgZnJvbSBcInNhcC91aS9jb3JlL0xpYlwiO1xuaW1wb3J0IE1lc3NhZ2luZyBmcm9tIFwic2FwL3VpL2NvcmUvTWVzc2FnaW5nXCI7XG5pbXBvcnQgdHlwZSBNZXNzYWdlIGZyb20gXCJzYXAvdWkvY29yZS9tZXNzYWdlL01lc3NhZ2VcIjtcbmltcG9ydCAqIGFzIENvcmVQYXN0ZUhlbHBlciBmcm9tIFwic2FwL3VpL2NvcmUvdXRpbC9QYXN0ZUhlbHBlclwiO1xuaW1wb3J0IHR5cGUgVGFibGUgZnJvbSBcInNhcC91aS9tZGMvVGFibGVcIjtcbmltcG9ydCB0eXBlIENvbHVtbiBmcm9tIFwic2FwL3VpL21kYy90YWJsZS9Db2x1bW5cIjtcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9Db250ZXh0XCI7XG5pbXBvcnQgdHlwZSBPRGF0YVR5cGUgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS90eXBlL09EYXRhVHlwZVwiO1xuaW1wb3J0IHR5cGUgT0RhdGFWNENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9Db250ZXh0XCI7XG5pbXBvcnQgdHlwZSBPRGF0YU1ldGFNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTWV0YU1vZGVsXCI7XG5pbXBvcnQgeyBDcmVhdGlvbk1vZGUgfSBmcm9tIFwiLi4vY29udmVydGVycy9NYW5pZmVzdFNldHRpbmdzXCI7XG5pbXBvcnQgeyBGaWVsZEVkaXRNb2RlIH0gZnJvbSBcIi4uL3RlbXBsYXRpbmcvVUlGb3JtYXR0ZXJzXCI7XG5cbmV4cG9ydCB0eXBlIGN1c3RvbVZhbGlkYXRpb25NZXNzYWdlID0ge1xuXHRtZXNzYWdlVGV4dD86IHN0cmluZztcblx0bWVzc2FnZVRhcmdldD86IHN0cmluZztcbn07XG5cbnR5cGUgUGFzdGVJbmZvcm1hdGlvbiA9IHtcblx0cm93czogT0RhdGFWNENvbnRleHRbXTtcblx0Y29sdW1uczogQ29sdW1uW107XG5cdHVwZGF0ZWRSb3dDb3VudDogbnVtYmVyO1xuXHRudW1iZXJPZk5ld0NyZWF0aW9uUm93czogbnVtYmVyO1xufTtcblxuY29uc3QgZ2V0SW5mb0ZvckVudGl0eVByb3BlcnR5ID0gZnVuY3Rpb24gKFxuXHRwcm9wZXJ0eVBhdGg6IHN0cmluZyxcblx0cm93QmluZGluZ1BhdGg6IHN0cmluZyxcblx0bWV0YUNvbnRleHQ6IENvbnRleHQsXG5cdG1ldGFNb2RlbDogT0RhdGFNZXRhTW9kZWwsXG5cdGVuYWJsZVBhc3RpbmdPZkNvbXB1dGVkUHJvcGVydGllcyA9IGZhbHNlLFxuXHRmb3JjZUlnbm9yZSA9IGZhbHNlXG4pOiBQYXN0ZUNvbHVtbkluZm8ge1xuXHRjb25zdCBwcm9wZXJ0eSA9IG1ldGFDb250ZXh0LmdldFByb3BlcnR5KHByb3BlcnR5UGF0aCksXG5cdFx0Zm9ybWF0T3B0aW9ucyA9IHsgcGFyc2VLZWVwc0VtcHR5U3RyaW5nOiB0cnVlIH0sXG5cdFx0dHlwZSA9IG1ldGFNb2RlbC5nZXRVSTVUeXBlKGAke3Jvd0JpbmRpbmdQYXRofS8ke3Byb3BlcnR5UGF0aH1gLCBmb3JtYXRPcHRpb25zKTtcblx0bGV0IGlzSWdub3JlZCwgY29tcHV0ZWQ7XG5cdGlmIChlbmFibGVQYXN0aW5nT2ZDb21wdXRlZFByb3BlcnRpZXMgPT09IHRydWUpIHtcblx0XHRpc0lnbm9yZWQgPSAhcHJvcGVydHk7XG5cdFx0Y29tcHV0ZWQgPSBtZXRhQ29udGV4dC5nZXRQcm9wZXJ0eShgJHtwcm9wZXJ0eVBhdGh9QE9yZy5PRGF0YS5Db3JlLlYxLkNvbXB1dGVkYCk7XG5cdH0gZWxzZSB7XG5cdFx0aXNJZ25vcmVkID0gIXByb3BlcnR5IHx8IG1ldGFDb250ZXh0LmdldFByb3BlcnR5KGAke3Byb3BlcnR5UGF0aH1AT3JnLk9EYXRhLkNvcmUuVjEuQ29tcHV0ZWRgKTtcblx0fVxuXG5cdHJldHVybiB7XG5cdFx0cHJvcGVydHk6IHByb3BlcnR5UGF0aCxcblx0XHRpZ25vcmU6IGZvcmNlSWdub3JlIHx8IGlzSWdub3JlZCxcblx0XHRjb21wdXRlZDogY29tcHV0ZWQsXG5cdFx0dHlwZTogdHlwZVxuXHR9O1xufTtcblxuY29uc3QgZGlzcGxheUVycm9yTWVzc2FnZXMgPSBmdW5jdGlvbiAoZXJyb3JNZXNzYWdlczogc3RyaW5nW10pOiB2b2lkIHtcblx0Y29uc3QgbWVzc2FnZURldGFpbHMgPSBbLi4uZXJyb3JNZXNzYWdlc107XG5cdGNvbnN0IHJlc291cmNlQnVuZGxlID0gTGlicmFyeS5nZXRSZXNvdXJjZUJ1bmRsZUZvcihcInNhcC5mZS5jb3JlXCIpISxcblx0XHRlcnJvckNvcnJlY3Rpb25NZXNzYWdlID0gcmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfUEFTVEVfSEVMUEVSX1NBUEZFX1BBU1RFX0VSUk9SX0NPUlJFQ1RJT05fTUVTU0FHRVwiKSxcblx0XHRub3RlTWVzc2FnZSA9IHJlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX1BBU1RFX0hFTFBFUl9TQVBGRV9QQVNURV9FUlJPUl9DT1JSRUNUSU9OX05PVEVcIik7XG5cdGxldCBwYXN0ZUVycm9yTWVzc2FnZTtcblxuXHRpZiAobWVzc2FnZURldGFpbHMubGVuZ3RoID4gMSkge1xuXHRcdHBhc3RlRXJyb3JNZXNzYWdlID0gcmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfUEFTVEVfSEVMUEVSX1NBUEZFX1BBU1RFX0VSUk9SX01FU1NBR0VfUExVUkFMXCIsIFttZXNzYWdlRGV0YWlscy5sZW5ndGhdKTtcblx0fSBlbHNlIHtcblx0XHRwYXN0ZUVycm9yTWVzc2FnZSA9IHJlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX1BBU1RFX0hFTFBFUl9TQVBGRV9QQVNURV9FUlJPUl9NRVNTQUdFX1NJTkdVTEFSXCIpO1xuXHR9XG5cdG1lc3NhZ2VEZXRhaWxzLnVuc2hpZnQoXCJcIik7IC8vIFRvIHNob3cgc3BhY2UgYmV0d2VlbiB0aGUgc2hvcnQgdGV4dCBhbmQgdGhlIGxpc3Qgb2YgZXJyb3JzXG5cdG1lc3NhZ2VEZXRhaWxzLnVuc2hpZnQobm90ZU1lc3NhZ2UpO1xuXHRtZXNzYWdlRGV0YWlscy51bnNoaWZ0KGVycm9yQ29ycmVjdGlvbk1lc3NhZ2UpO1xuXHRNZXNzYWdlQm94LmVycm9yKHBhc3RlRXJyb3JNZXNzYWdlLCB7XG5cdFx0dGl0bGU6IHJlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX0NPTU1PTl9TQVBGRV9FUlJPUl9NRVNTQUdFU19QQUdFX1RJVExFX0VSUk9SXCIpLFxuXHRcdGRldGFpbHM6IG1lc3NhZ2VEZXRhaWxzLmpvaW4oXCI8YnI+XCIpXG5cdH0pO1xufTtcblxudHlwZSBQYXN0ZUNvbHVtbkluZm8gPSB7XG5cdHByb3BlcnR5OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cdHR5cGU/OiBPRGF0YVR5cGUgfCBudWxsO1xuXHRpZ25vcmU6IGJvb2xlYW47XG5cdGNvbXB1dGVkPzogYm9vbGVhbjtcbn07XG5cbmNvbnN0IFBhc3RlSGVscGVyID0ge1xuXHRkaXNwbGF5RXJyb3JNZXNzYWdlczogZGlzcGxheUVycm9yTWVzc2FnZXMsXG5cdGZvcm1hdEN1c3RvbU1lc3NhZ2U6IGZ1bmN0aW9uICh2YWxpZGF0aW9uTWVzc2FnZXM6IGN1c3RvbVZhbGlkYXRpb25NZXNzYWdlW10sIGlSb3dOdW1iZXI6IG51bWJlcik6IHN0cmluZyB7XG5cdFx0bGV0IGVycm9yTWVzc2FnZSA9IFwiXCI7XG5cdFx0Y29uc3QgbnVtYmVyTWVzc2FnZXMgPSB2YWxpZGF0aW9uTWVzc2FnZXMubGVuZ3RoO1xuXHRcdGNvbnN0IHJlc291cmNlQnVuZGxlID0gTGlicmFyeS5nZXRSZXNvdXJjZUJ1bmRsZUZvcihcInNhcC5mZS5jb3JlXCIpISxcblx0XHRcdGkxOG5Sb3cgPSByZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiVF9NRVNTQUdFX0dST1VQX0RFU0NSSVBUSU9OX1RBQkxFX1JPV1wiKTtcblx0XHRpZiAobnVtYmVyTWVzc2FnZXMgPiAwKSB7XG5cdFx0XHRlcnJvck1lc3NhZ2UgKz0gYCR7aTE4blJvd30gJHtpUm93TnVtYmVyfTogYDtcblx0XHRcdHZhbGlkYXRpb25NZXNzYWdlcy5mb3JFYWNoKChtZXNzYWdlLCBpbmRleE1lc3NhZ2UpID0+IHtcblx0XHRcdFx0aWYgKG1lc3NhZ2UubWVzc2FnZVRleHQpIHtcblx0XHRcdFx0XHRlcnJvck1lc3NhZ2UgKz0gbWVzc2FnZS5tZXNzYWdlVGV4dCArIChpbmRleE1lc3NhZ2UgKyAxICE9PSBudW1iZXJNZXNzYWdlcyA/IFwiIFwiIDogXCJcIik7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblx0XHRyZXR1cm4gZXJyb3JNZXNzYWdlO1xuXHR9LFxuXHQvKipcblx0ICogR2V0IGRldGFpbHMgYWJvdXQgdGFibGUgY29sdW1ucy5cblx0ICogQHBhcmFtIHRhYmxlIFRoZSB0YWJsZSB3aGljaCBjb250YWlucyB0aGUgY29sdW1ucyB0byBiZSBhbmFseXplZFxuXHQgKiBAcGFyYW0gY29sdW1ucyBBIGxpc3Qgb2YgY29sdW1ucyB0byBiZSBhbmFseXplZC4gSWYgdW5kZWZpbmVkLCBhbGwgY29sdW1ucyBmcm9tIHRoZSB0YWJsZSBhcmUgYW5hbHl6ZWRcblx0ICogQHBhcmFtIGlnbm9yZU5hdmlnYXRpb25Qcm9wZXJ0eSBJZiB0cnVlLCBuYXZpZ2F0aW9uIHByb3BlcnRpZXMgYXJlIGlnbm9yZWRcblx0ICogQHJldHVybnMgQW4gYXJyYXkgb2Ygb2JqZWN0cyBwcm92aWRpbmcgZGV0YWlscyBhYm91dCBjb2x1bW5zLlxuXHQgKi9cblx0Z2V0Q29sdW1uSW5mbzogZnVuY3Rpb24gKHRhYmxlOiBUYWJsZSwgY29sdW1ucz86IENvbHVtbltdLCBpZ25vcmVOYXZpZ2F0aW9uUHJvcGVydHkgPSB0cnVlKTogUGFzdGVDb2x1bW5JbmZvW10ge1xuXHRcdGNvbnN0IG1vZGVsID0gdGFibGUuZ2V0Um93QmluZGluZygpLmdldE1vZGVsKCksXG5cdFx0XHRtZXRhTW9kZWwgPSBtb2RlbC5nZXRNZXRhTW9kZWwoKSxcblx0XHRcdHJvd0JpbmRpbmdQYXRoID0gbW9kZWwucmVzb2x2ZSh0YWJsZS5nZXRSb3dCaW5kaW5nKCkuZ2V0UGF0aCgpLCB0YWJsZS5nZXRSb3dCaW5kaW5nKCkuZ2V0Q29udGV4dCgpKSxcblx0XHRcdG1ldGFDb250ZXh0ID0gbWV0YU1vZGVsLmdldE1ldGFDb250ZXh0KHJvd0JpbmRpbmdQYXRoKSxcblx0XHRcdGVudGl0eVR5cGVQcm9wZXJ0aWVzID0gTWV0YU1vZGVsQ29udmVydGVyLmdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyhtZXRhQ29udGV4dCkudGFyZ2V0RW50aXR5VHlwZS5lbnRpdHlQcm9wZXJ0aWVzLFxuXHRcdFx0Y29sdW1uQXJyYW5nZW1lbnRQcm9wZXJ0eTogc3RyaW5nW10gPSBbXSxcblx0XHRcdHRhYmxlRGVmaW5pdGlvbiA9ICh0YWJsZS5nZXRQYXJlbnQoKSBhcyBUYWJsZUFQSSkuZ2V0VGFibGVEZWZpbml0aW9uKCk7XG5cdFx0ZnVuY3Rpb24gZ2V0Q29sdW1uRnJvbVByb3BlcnR5SW5mb3MoXG5cdFx0XHRkYXRhUHJvcGVydHk6IEVuaGFuY2VkRkVQcm9wZXJ0eUluZm8sXG5cdFx0XHRoYXNWYWx1ZUhlbHA6IGJvb2xlYW4sXG5cdFx0XHRwcm9wZXJ0eTogc3RyaW5nXG5cdFx0KTogUGFzdGVDb2x1bW5JbmZvIHwgdW5kZWZpbmVkIHtcblx0XHRcdC8vIElmIHdlIGhhdmUgYSB0ZXh0QXJyYW5nZW1lbnQsIHdlIHdhbnQgdG8gcmVtb3ZlIGl0IGlmIGl0IGhhcyBhIFZhbHVlTGlzdCBhc3NvY2lhdGVkLlxuXHRcdFx0aWYgKGRhdGFQcm9wZXJ0eS50ZXh0ICYmIGhhc1ZhbHVlSGVscCkge1xuXHRcdFx0XHRjb2x1bW5BcnJhbmdlbWVudFByb3BlcnR5LnB1c2goZGF0YVByb3BlcnR5LnRleHQpO1xuXHRcdFx0fVxuXHRcdFx0Ly8gTm9uIGV4cG9ydGVkIGNvbHVtbnMgc2hvdWxkIGJlIHBhcnQgb2YgdGhlIGNvbHVtbkluZm9zXG5cdFx0XHRpZiAoZGF0YVByb3BlcnR5LmV4cG9ydFNldHRpbmdzICE9PSBudWxsKSB7XG5cdFx0XHRcdC8vIENoZWNrIGEgbmF2aWdhdGlvbiBwcm9wZXJ0eSB3aXRoaW4gdGhlIGN1cnJlbnQgQ29tcGxleCBwcm9wZXJ0eSAtLT4gaWdub3JlXG5cdFx0XHRcdGlmIChpZ25vcmVOYXZpZ2F0aW9uUHJvcGVydHkgJiYgcHJvcGVydHkuaW5jbHVkZXMoXCIvXCIpKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0XHRcdHByb3BlcnR5OiBkYXRhUHJvcGVydHkucGF0aCxcblx0XHRcdFx0XHRcdGlnbm9yZTogdHJ1ZVxuXHRcdFx0XHRcdH07XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0bGV0IGZvcmNlSWdub3JlID0gZmFsc2U7XG5cdFx0XHRcdFx0aWYgKGRhdGFQcm9wZXJ0eS5wYXRoKSB7XG5cdFx0XHRcdFx0XHRmb3JjZUlnbm9yZSA9IGNvbHVtbkFycmFuZ2VtZW50UHJvcGVydHkuaW5jbHVkZXMoZGF0YVByb3BlcnR5LnBhdGgpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHQvLyBUaGUgb2JqZWN0IHRoaXMgaXMgd2VpcmQgaW4gYSBmdW5jdGlvbiwgc28gY2hhbmdpbmcgaXQgdG8gUGFzdGVIZWxwZXIgaW5zdGVhZC5cblx0XHRcdFx0XHRyZXR1cm4gUGFzdGVIZWxwZXIuZ2V0SW5mb0ZvckVudGl0eVByb3BlcnR5KFxuXHRcdFx0XHRcdFx0ZGF0YVByb3BlcnR5LnBhdGghLFxuXHRcdFx0XHRcdFx0cm93QmluZGluZ1BhdGgsXG5cdFx0XHRcdFx0XHRtZXRhQ29udGV4dCxcblx0XHRcdFx0XHRcdG1ldGFNb2RlbCxcblx0XHRcdFx0XHRcdHRhYmxlRGVmaW5pdGlvbi5jb250cm9sLmVuYWJsZVBhc3RpbmdPZkNvbXB1dGVkUHJvcGVydGllcyxcblx0XHRcdFx0XHRcdGZvcmNlSWdub3JlXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGNvbnN0IHByb3BlcnR5SW5mbyA9ICh0YWJsZS5nZXRQYXJlbnQoKSBhcyBUYWJsZUFQSSkuZ2V0RW5oYW5jZWRGZXRjaGVkUHJvcGVydHlJbmZvcygpO1xuXHRcdGNvbnN0IHByb3BlcnR5SW5mb0RpY3Q6IFJlY29yZDxzdHJpbmcsIEVuaGFuY2VkRkVQcm9wZXJ0eUluZm8+ID0gT2JqZWN0LmFzc2lnbihcblx0XHRcdHt9LFxuXHRcdFx0Li4ucHJvcGVydHlJbmZvLm1hcCgocHJvcGVydHkpID0+ICh7IFtwcm9wZXJ0eS5rZXldOiBwcm9wZXJ0eSB9KSlcblx0XHQpO1xuXHRcdGNvbnN0IGNvbHVtbkluZm9zOiBQYXN0ZUNvbHVtbkluZm9bXSA9IFtdO1xuXHRcdChjb2x1bW5zID8/IHRhYmxlLmdldENvbHVtbnMoKSkuZm9yRWFjaCgoY29sdW1uKSA9PiB7XG5cdFx0XHRjb25zdCBpbmZvUHJvcGVydHkgPSBwcm9wZXJ0eUluZm9EaWN0W2NvbHVtbi5nZXRQcm9wZXJ0eUtleSgpXTtcblx0XHRcdC8vIENoZWNrIGlmIGl0J3MgYSBjb21wbGV4IHByb3BlcnR5IChwcm9wZXJ0eSBhc3NvY2lhdGVkIHRvIG11bHRpcGxlIHNpbXBsZSBwcm9wZXJ0aWVzKVxuXHRcdFx0aWYgKGluZm9Qcm9wZXJ0eS5wcm9wZXJ0eUluZm9zKSB7XG5cdFx0XHRcdC8vIEdldCBkYXRhIGZyb20gc2ltcGxlIHByb3BlcnR5XG5cdFx0XHRcdGluZm9Qcm9wZXJ0eS5wcm9wZXJ0eUluZm9zLmZvckVhY2goKHByb3BlcnR5OiBzdHJpbmcpID0+IHtcblx0XHRcdFx0XHRjb25zdCBkYXRhUHJvcGVydHkgPSBwcm9wZXJ0eUluZm9EaWN0W3Byb3BlcnR5XSxcblx0XHRcdFx0XHRcdGhhc1ZhbHVlSGVscCA9IHRoaXMuaGFzVmFsdWVIZWxwUHJvcGVydHkoZW50aXR5VHlwZVByb3BlcnRpZXMsIGRhdGFQcm9wZXJ0eSksXG5cdFx0XHRcdFx0XHRjb2x1bW5Ub1B1c2ggPSBnZXRDb2x1bW5Gcm9tUHJvcGVydHlJbmZvcyhkYXRhUHJvcGVydHksIGhhc1ZhbHVlSGVscCwgcHJvcGVydHkpO1xuXHRcdFx0XHRcdGlmIChjb2x1bW5Ub1B1c2gpIHtcblx0XHRcdFx0XHRcdGNvbHVtbkluZm9zLnB1c2goY29sdW1uVG9QdXNoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRpZiAoaW5mb1Byb3BlcnR5LmV4cG9ydERhdGFQb2ludFRhcmdldFZhbHVlKSB7XG5cdFx0XHRcdFx0Y29sdW1uSW5mb3MucHVzaCh7XG5cdFx0XHRcdFx0XHRwcm9wZXJ0eTogXCJ0YXJnZXRWYWx1ZUZyb21EYXRhUG9pbnRcIixcblx0XHRcdFx0XHRcdGlnbm9yZTogdHJ1ZVxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cdFx0XHRcdC8vIE5vbiBleHBvcnRlZCBjb2x1bW5zIHNob3VsZCBiZSBwYXJ0IG9mIHRoZSBjb2x1bW5JbmZvc1xuXHRcdFx0fSBlbHNlIGlmIChpbmZvUHJvcGVydHkuZXhwb3J0U2V0dGluZ3MgIT09IG51bGwpIHtcblx0XHRcdFx0aWYgKGluZm9Qcm9wZXJ0eS5wYXRoKSB7XG5cdFx0XHRcdFx0Y29sdW1uSW5mb3MucHVzaChcblx0XHRcdFx0XHRcdFBhc3RlSGVscGVyLmdldEluZm9Gb3JFbnRpdHlQcm9wZXJ0eShcblx0XHRcdFx0XHRcdFx0aW5mb1Byb3BlcnR5LnBhdGgsXG5cdFx0XHRcdFx0XHRcdHJvd0JpbmRpbmdQYXRoLFxuXHRcdFx0XHRcdFx0XHRtZXRhQ29udGV4dCxcblx0XHRcdFx0XHRcdFx0bWV0YU1vZGVsLFxuXHRcdFx0XHRcdFx0XHR0YWJsZURlZmluaXRpb24uY29udHJvbC5lbmFibGVQYXN0aW5nT2ZDb21wdXRlZFByb3BlcnRpZXNcblx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdC8vIEVtcHR5IGNvbHVtbiAtLT4gaWdub3JlXG5cdFx0XHRcdFx0Y29sdW1uSW5mb3MucHVzaCh7XG5cdFx0XHRcdFx0XHRwcm9wZXJ0eTogXCJ1bnVzZWRcIixcblx0XHRcdFx0XHRcdHR5cGU6IG51bGwsXG5cdFx0XHRcdFx0XHRpZ25vcmU6IHRydWVcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdHJldHVybiBjb2x1bW5JbmZvcztcblx0fSxcblx0Z2V0SW5mb0ZvckVudGl0eVByb3BlcnR5OiBnZXRJbmZvRm9yRW50aXR5UHJvcGVydHksXG5cblx0LyoqXG5cdCAqIFJldHVybnMgd2hldGhlciBhIHByb3BlcnR5IGhhcyBhIHZhbHVlIGxpc3Qgb3Igbm90LlxuXHQgKiBAcGFyYW0gZW50aXR5VHlwZVByb3BlcnRpZXMgVGhlIGVudGl0eSBwcm9wZXJ0aWVzXG5cdCAqIEBwYXJhbSBkYXRhUHJvcGVydHkgVGhlIHByb3BlcnR5IHdlIHdhbnQgdG8gY2hlY2tcblx0ICogQHJldHVybnMgQm9vbGVhbiBgdHJ1ZWAgaWYgdGhlIHByb3BlcnR5IGhhcyBhIHZhbHVlIGxpc3QuXG5cdCAqL1xuXHRoYXNWYWx1ZUhlbHBQcm9wZXJ0eTogZnVuY3Rpb24gKFxuXHRcdGVudGl0eVR5cGVQcm9wZXJ0aWVzOiBBcnJheVdpdGhJbmRleDxQcm9wZXJ0eSwgXCJuYW1lXCIgfCBcImZ1bGx5UXVhbGlmaWVkTmFtZVwiPixcblx0XHRkYXRhUHJvcGVydHk6IEVuaGFuY2VkRkVQcm9wZXJ0eUluZm9cblx0KTogYm9vbGVhbiB7XG5cdFx0Y29uc3QgcHJvcGVydHkgPSBlbnRpdHlUeXBlUHJvcGVydGllcy5maW5kKChwKSA9PiBwLm5hbWUgPT09IGRhdGFQcm9wZXJ0eS5wYXRoKTtcblx0XHRpZiAocHJvcGVydHkpIHtcblx0XHRcdHJldHVybiAhIXByb3BlcnR5LmFubm90YXRpb25zPy5Db21tb24/LlZhbHVlTGlzdDtcblx0XHR9XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBUcmFuc2Zvcm0gYW4gYXJyYXkgb2YgZGF0YSBieSBwYXJzaW5nIGl0IGludG8gYW4gYXJyYXkgb2Ygb2JqZWN0cywgZmFjaWxpdGF0aW5nIHRoZSBtYXBwaW5nIG9mIGNvbHVtbnMgYW5kIGRhdGEuXG5cdCAqIEBwYXJhbSByYXdEYXRhIFRoZSB0YWJsZSB3aGljaCBjb250YWlucyB0aGUgY29sdW1ucyB0byBiZSBhbmFseXplZFxuXHQgKiBAcGFyYW0gdGFibGUgVGhlIHRhYmxlIHdoaWNoIHJlY2VpdmVzIHRoZSBkYXRhXG5cdCAqIEBwYXJhbSBjb2x1bW5zIEEgbGlzdCBvZiBjb2x1bW5zIHRvIGJlIHVzZWQgdG8gbWFwIHRoZSBkYXRhLiBJZiB1bmRlZmluZWQsIGFsbCB0YWJsZSBjb2x1bW5zIGFyZSB1c2VkXG5cdCAqIEBwYXJhbSBpZ25vcmVOYXZpZ2F0aW9uUHJvcGVydHkgSWYgdHJ1ZSwgbmF2aWdhdGlvbiBwcm9wZXJ0aWVzIGFyZSBpZ25vcmVkXG5cdCAqIEByZXR1cm5zIEEgY29sbGVjdGlvbiBvZiBvYmplY3RzIHRoYXQgYXNzb2NpYXRlcyBkYXRhIHdpdGggY29ycmVzcG9uZGluZyBjb2x1bW5zLlxuXHQgKi9cblx0cGFyc2VQYXN0ZWREYXRhOiBhc3luYyBmdW5jdGlvbiAoXG5cdFx0cmF3RGF0YTogdW5rbm93bltdW10sXG5cdFx0dGFibGU6IFRhYmxlLFxuXHRcdGNvbHVtbnM/OiBDb2x1bW5bXSxcblx0XHRpZ25vcmVOYXZpZ2F0aW9uUHJvcGVydHkgPSB0cnVlXG5cdCk6IFByb21pc2U8UmVjb3JkPHN0cmluZywgdW5rbm93bj5bXT4ge1xuXHRcdGNvbnN0IHBhc3RlSW5mb3MgPSB0aGlzLmdldENvbHVtbkluZm8odGFibGUsIGNvbHVtbnMsIGlnbm9yZU5hdmlnYXRpb25Qcm9wZXJ0eSk7XG5cdFx0Y29uc3QgdGFibGVEZWZpbml0aW9uID0gKHRhYmxlLmdldFBhcmVudCgpIGFzIFRhYmxlQVBJKS5nZXRUYWJsZURlZmluaXRpb24oKTtcblx0XHQvLyBDaGVjayBpZiB3ZSBoYXZlIGRhdGEgZm9yIGF0IGxlYXN0IHRoZSBmaXJzdCBlZGl0YWJsZSBjb2x1bW5cblx0XHRjb25zdCBwYXN0ZWRDb2x1bW5Db3VudCA9IHJhd0RhdGEubGVuZ3RoID8gcmF3RGF0YVswXS5sZW5ndGggOiAwO1xuXHRcdGxldCBmaXJzdEVkaXRhYmxlQ29sdW1uSW5kZXggPSAtMTtcblx0XHRmb3IgKGxldCBJID0gMDsgSSA8IHBhc3RlSW5mb3MubGVuZ3RoICYmIGZpcnN0RWRpdGFibGVDb2x1bW5JbmRleCA8IDA7IEkrKykge1xuXHRcdFx0aWYgKCFwYXN0ZUluZm9zW0ldLmlnbm9yZSAmJiAhcGFzdGVJbmZvc1tJXS5jb21wdXRlZCkge1xuXHRcdFx0XHRmaXJzdEVkaXRhYmxlQ29sdW1uSW5kZXggPSBJO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmICh0YWJsZURlZmluaXRpb24uY29udHJvbC5lbmFibGVQYXN0aW5nT2ZDb21wdXRlZFByb3BlcnRpZXMpIHtcblx0XHRcdGNvbnN0IGNvbXB1dGVkUHJvcGVydGllcyA9IHBhc3RlSW5mb3MuZmlsdGVyKGZ1bmN0aW9uIChpbmZvKSB7XG5cdFx0XHRcdHJldHVybiBpbmZvLmNvbXB1dGVkO1xuXHRcdFx0fSk7XG5cdFx0XHQvL2ZvciBlYWNoIGNvbXB1dGVkIHByb3BlcnR5LCBjaGVjayBpZiB0aGUgY29sdW1uIGlzIGVtcHR5IC4gSWYgeWVzLCBpZ25vcmUgaXRcblx0XHRcdGNvbXB1dGVkUHJvcGVydGllcy5mb3JFYWNoKGZ1bmN0aW9uIChjb21wdXRlZFByb3BlcnR5KSB7XG5cdFx0XHRcdGNvbnN0IGNvbHVtblBvc2l0aW9uID0gcGFzdGVJbmZvcy5pbmRleE9mKGNvbXB1dGVkUHJvcGVydHkpO1xuXHRcdFx0XHRjb25zdCBpc0NvbEVtcHR5ID0gcmF3RGF0YS5ldmVyeSgocm93KSA9PiByb3dbY29sdW1uUG9zaXRpb25dID09PSBcIlwiKTtcblx0XHRcdFx0aWYgKGlzQ29sRW1wdHkpIHtcblx0XHRcdFx0XHRjb21wdXRlZFByb3BlcnR5Lmlnbm9yZSA9IHRydWU7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblxuXHRcdGNvbnN0IHBhcnNlUmVzdWx0ID0gYXdhaXQgKGZpcnN0RWRpdGFibGVDb2x1bW5JbmRleCA8IDAgfHwgZmlyc3RFZGl0YWJsZUNvbHVtbkluZGV4ID4gcGFzdGVkQ29sdW1uQ291bnQgLSAxXG5cdFx0XHQ/IHsgcGFyc2VkRGF0YTogW10sIGVycm9yczogbnVsbCB9IC8vIFdlIGRvbid0IGhhdmUgZGF0YSBmb3IgYW4gZWRpdGFibGUgY29sdW1uIC0tPiByZXR1cm4gZW1wdHkgcGFyc2VkIGRhdGFcblx0XHRcdDogQ29yZVBhc3RlSGVscGVyLnBhcnNlKHJhd0RhdGEsIHBhc3RlSW5mb3MpKTtcblx0XHRpZiAocGFyc2VSZXN1bHQuZXJyb3JzKSB7XG5cdFx0XHRjb25zdCBlcnJvck1lc3NhZ2VzID0gcGFyc2VSZXN1bHQuZXJyb3JzLm1hcChmdW5jdGlvbiAob0VsZW1lbnQpIHtcblx0XHRcdFx0cmV0dXJuIG9FbGVtZW50Lm1lc3NhZ2U7XG5cdFx0XHR9KTtcblx0XHRcdHRoaXMuZGlzcGxheUVycm9yTWVzc2FnZXMoZXJyb3JNZXNzYWdlcyk7XG5cdFx0XHRyZXR1cm4gW107IC8vIEVycm9ycyAtLT4gcmV0dXJuIG5vdGhpbmdcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIHBhcnNlUmVzdWx0LnBhcnNlZERhdGE7XG5cdFx0fVxuXHR9LFxuXG5cdC8qKlxuXHQgKiBVcGRhdGUgYW4gYXJyYXkgb2YgY29udGV4dHMuXG5cdCAqIEBwYXJhbSB0YWJsZSBUaGUgdGFibGUgd2hpY2ggY29udGFpbnMgdGhlIGNvbnRleHRzIHRvIGJlIHVwZGF0ZWRcblx0ICogQHBhcmFtIGNvbnRleHRzIEFycmF5IG9mIGNvbnRleHRzIHRvIGJlIHVwZGF0ZWRcblx0ICogQHBhcmFtIGRhdGEgQXJyYXkgb2Ygb2JqZWN0IGNvbnRhaW5pbmcgdGhlIGRhdGEgdG8gYmUgdXNlZCB0byB1cGRhdGUgdGhlIGNvbnRleHRzXG5cdCAqIEByZXR1cm5zIFByb21pc2Vcblx0ICovXG5cdF91cGRhdGVDb250ZXh0czogYXN5bmMgZnVuY3Rpb24gKFxuXHRcdHRhYmxlOiBUYWJsZSxcblx0XHRjb250ZXh0czogKE9EYXRhVjRDb250ZXh0IHwgdW5kZWZpbmVkKVtdLFxuXHRcdGRhdGE6IFJlY29yZDxzdHJpbmcsIHVua25vd24+W11cblx0KTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0bGV0IGluZGV4ID0gMDtcblx0XHRjb25zdCBzZXRQcm9wZXJ0eVByb21pc2VzID0gW107XG5cdFx0Zm9yIChjb25zdCByb3cgb2YgZGF0YSkge1xuXHRcdFx0Y29uc3Qgcm93Q29udGV4dCA9IGNvbnRleHRzW2luZGV4KytdO1xuXHRcdFx0aWYgKHJvd0NvbnRleHQpIHtcblx0XHRcdFx0Zm9yIChjb25zdCBkYXRhUHJvcGVydHkgaW4gcm93KSB7XG5cdFx0XHRcdFx0aWYgKCh0YWJsZS5nZXRQYXJlbnQoKSBhcyBUYWJsZUFQSSkuZ2V0UHJvcGVydHlFZGl0TW9kZShkYXRhUHJvcGVydHksIHJvd0NvbnRleHQpID09PSBGaWVsZEVkaXRNb2RlLkVkaXRhYmxlKSB7XG5cdFx0XHRcdFx0XHRzZXRQcm9wZXJ0eVByb21pc2VzLnB1c2gocm93Q29udGV4dC5zZXRQcm9wZXJ0eShkYXRhUHJvcGVydHksIHJvd1tkYXRhUHJvcGVydHldKSk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdExvZy53YXJuaW5nKGBQcm9wZXJ0eSAke2RhdGFQcm9wZXJ0eX0gaXMgbm90IGVkaXRhYmxlIGZvciByb3cgJHtyb3dDb250ZXh0LmdldEluZGV4KCl9YCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGF3YWl0IFByb21pc2UuYWxsU2V0dGxlZChzZXRQcm9wZXJ0eVByb21pc2VzKTtcblx0fSxcblxuXHQvKipcblx0ICogIEdldCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgcGFzdGUgb3BlcmF0aW9uIG9uIFJlc3BvbnNpdmVUYWJsZS5cblx0ICogQHBhcmFtIHJhd0RhdGFcblx0ICogQHBhcmFtIGNlbGxTZWxlY3Rpb25cblx0ICogQHBhcmFtIGNlbGxTZWxlY3Rpb24uY29sdW1uc1xuXHQgKiBAcGFyYW0gY2VsbFNlbGVjdGlvbi5yb3dzXG5cdCAqIEBwYXJhbSBwb3NGaXJzdFNlbGVjdGVkUm93XG5cdCAqIEBwYXJhbSB0YWJsZVxuXHQgKiBAcmV0dXJucyBPYmpldCBjb250YWluaW5nIEluZm9ybWF0aW9uIGFib3V0IHRoZSBwYXN0aW5nIG9wZXJhdGlvblxuXHQgKi9cblx0Z2V0UGFzdGVJbmZvcm1hdGlvbkZvclJlcG9uc2l2ZVRhYmxlOiBmdW5jdGlvbiAoXG5cdFx0cmF3RGF0YTogc3RyaW5nW11bXSxcblx0XHRjZWxsU2VsZWN0aW9uOiB7IGNvbHVtbnM6IENvbHVtbltdOyByb3dzOiBPRGF0YVY0Q29udGV4dFtdIH0sXG5cdFx0cG9zRmlyc3RTZWxlY3RlZFJvdzogbnVtYmVyLFxuXHRcdHRhYmxlOiBUYWJsZVxuXHQpOiBQYXN0ZUluZm9ybWF0aW9uIHtcblx0XHRsZXQgbnVtYmVyT2ZOZXdDcmVhdGlvblJvd3MgPSAwO1xuXHRcdGNvbnN0IHBvc0ZpcnN0SW5saW5lQ3JlYXRpb25Sb3dJblRhYmxlID0gdGFibGVcblx0XHRcdC5nZXRSb3dCaW5kaW5nKClcblx0XHRcdC5nZXRDdXJyZW50Q29udGV4dHMoKVxuXHRcdFx0LmZpbmRJbmRleCgoY29udGV4dCkgPT4gY29udGV4dC5pc1RyYW5zaWVudCgpKTtcblx0XHRjb25zdCByb3dzID0gY2VsbFNlbGVjdGlvbi5yb3dzO1xuXHRcdGxldCB1cGRhdGVkUm93Q291bnQgPSAwO1xuXHRcdGNvbnN0IGNvbHVtbnMgPVxuXHRcdFx0Y2VsbFNlbGVjdGlvbi5jb2x1bW5zLmxlbmd0aCA+IDFcblx0XHRcdFx0PyBjZWxsU2VsZWN0aW9uLmNvbHVtbnNcblx0XHRcdFx0OiB0YWJsZS5nZXRDb2x1bW5zKCkuc2xpY2UodGFibGUuZ2V0Q29sdW1ucygpLmluZGV4T2YoY2VsbFNlbGVjdGlvbi5jb2x1bW5zWzBdKSk7XG5cblx0XHQvLyBvbmx5IG9uZSBjZWxsIGlzIHNlbGVjdGVkXG5cdFx0aWYgKGNlbGxTZWxlY3Rpb24uY29sdW1ucy5sZW5ndGggPT09IDEgJiYgY2VsbFNlbGVjdGlvbi5yb3dzLmxlbmd0aCA9PT0gMSkge1xuXHRcdFx0Ly8gY2hlY2sgaWYgdGhlIGlubGluZSBjcmVhdGlvbiByb3cgaXMgaW4gdGhlIHRhcmdldGVkIHJhbmdlXG5cdFx0XHRpZiAoXG5cdFx0XHRcdHBvc0ZpcnN0U2VsZWN0ZWRSb3cgPD0gcG9zRmlyc3RJbmxpbmVDcmVhdGlvblJvd0luVGFibGUgJiZcblx0XHRcdFx0cG9zRmlyc3RTZWxlY3RlZFJvdyArIHJhd0RhdGEubGVuZ3RoID4gcG9zRmlyc3RJbmxpbmVDcmVhdGlvblJvd0luVGFibGVcblx0XHRcdCkge1xuXHRcdFx0XHRudW1iZXJPZk5ld0NyZWF0aW9uUm93cyA9IHJhd0RhdGEubGVuZ3RoIC0gKHBvc0ZpcnN0SW5saW5lQ3JlYXRpb25Sb3dJblRhYmxlIC0gcG9zRmlyc3RTZWxlY3RlZFJvdykgLSAxO1xuXHRcdFx0XHR1cGRhdGVkUm93Q291bnQgPSByYXdEYXRhLmxlbmd0aDtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdC8vIHRoZSBpbmxpbmUgY3JlYXRpb24gcm93IGlzIG5vdCBpbiB0aGUgdGFyZ2V0ZWQgcmFuZ2Vcblx0XHRcdFx0bnVtYmVyT2ZOZXdDcmVhdGlvblJvd3MgPSAwO1xuXHRcdFx0XHR1cGRhdGVkUm93Q291bnQgPSByYXdEYXRhLmxlbmd0aDtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gbXVsdGlwbGUgY2VsbHMgYXJlIHNlbGVjdGVkXG5cdFx0XHRjb25zdCBsYXN0SW5saW5lQ3JlYXRpb25Sb3dJblNlbGVjdGlvbiA9IHJvd3MuZmlsdGVyKChjb250ZXh0KSA9PiBjb250ZXh0LmlzVHJhbnNpZW50KCkpPy5wb3AoKTtcblx0XHRcdGNvbnN0IHBvc0xhc3RJbmxpbmVDcmVhdGlvblJvd0luU2VsZWN0aW9uID0gbGFzdElubGluZUNyZWF0aW9uUm93SW5TZWxlY3Rpb25cblx0XHRcdFx0PyByb3dzLmluZGV4T2YobGFzdElubGluZUNyZWF0aW9uUm93SW5TZWxlY3Rpb24pXG5cdFx0XHRcdDogLTE7XG5cdFx0XHR1cGRhdGVkUm93Q291bnQgPSBNYXRoLm1pbihyYXdEYXRhLmxlbmd0aCwgY2VsbFNlbGVjdGlvbi5yb3dzLmxlbmd0aCk7XG5cdFx0XHQvLyBjaGVjayBpZiB0aGUgaW5saW5lIGNyZWF0aW9uIHJvdyBpcyBpbiB0aGUgc2VsZWN0ZWQgcmFuZ2Vcblx0XHRcdGlmIChwb3NMYXN0SW5saW5lQ3JlYXRpb25Sb3dJblNlbGVjdGlvbiA+IC0xKSB7XG5cdFx0XHRcdHVwZGF0ZWRSb3dDb3VudCA9IHBvc0xhc3RJbmxpbmVDcmVhdGlvblJvd0luU2VsZWN0aW9uID09PSBjZWxsU2VsZWN0aW9uLnJvd3MubGVuZ3RoIC0gMSA/IHJhd0RhdGEubGVuZ3RoIDogdXBkYXRlZFJvd0NvdW50O1xuXHRcdFx0XHRudW1iZXJPZk5ld0NyZWF0aW9uUm93cyA9XG5cdFx0XHRcdFx0cG9zTGFzdElubGluZUNyZWF0aW9uUm93SW5TZWxlY3Rpb24gPT09IGNlbGxTZWxlY3Rpb24ucm93cy5sZW5ndGggLSAxXG5cdFx0XHRcdFx0XHQ/IHJhd0RhdGEubGVuZ3RoIC0gcG9zTGFzdElubGluZUNyZWF0aW9uUm93SW5TZWxlY3Rpb24gLSAxXG5cdFx0XHRcdFx0XHQ6IDA7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiB7IHJvd3MsIGNvbHVtbnMsIHVwZGF0ZWRSb3dDb3VudCwgbnVtYmVyT2ZOZXdDcmVhdGlvblJvd3MgfTtcblx0fSxcblxuXHQvKipcblx0ICogIEdldCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgcGFzdGUgb3BlcmF0aW9uIG9uIEdyaWRUYWJsZS5cblx0ICogQHBhcmFtIHJhd0RhdGFcblx0ICogQHBhcmFtIGNlbGxTZWxlY3Rpb25cblx0ICogQHBhcmFtIGNlbGxTZWxlY3Rpb24uY29sdW1uc1xuXHQgKiBAcGFyYW0gY2VsbFNlbGVjdGlvbi5yb3dzXG5cdCAqIEBwYXJhbSBwb3NGaXJzdFNlbGVjdGVkUm93XG5cdCAqIEBwYXJhbSB0YWJsZVxuXHQgKiBAcmV0dXJucyBPYmpldCBjb250YWluaW5nIEluZm9ybWF0aW9uIGFib3V0IHRoZSBwYXN0aW5nIG9wZXJhdGlvblxuXHQgKi9cblx0Z2V0UGFzdGVJbmZvcm1hdGlvbkZvckdyaWRUYWJsZTogZnVuY3Rpb24gKFxuXHRcdHJhd0RhdGE6IHN0cmluZ1tdW10sXG5cdFx0Y2VsbFNlbGVjdGlvbjogeyBjb2x1bW5zOiBDb2x1bW5bXTsgcm93czogT0RhdGFWNENvbnRleHRbXSB9LFxuXHRcdHBvc0ZpcnN0U2VsZWN0ZWRSb3c6IG51bWJlcixcblx0XHR0YWJsZTogVGFibGVcblx0KTogUGFzdGVJbmZvcm1hdGlvbiB7XG5cdFx0bGV0IG51bWJlck9mTmV3Q3JlYXRpb25Sb3dzID0gMDtcblx0XHRjb25zdCByb3dzID0gY2VsbFNlbGVjdGlvbi5yb3dzO1xuXHRcdGxldCB1cGRhdGVkUm93Q291bnQgPSAwO1xuXHRcdGNvbnN0IHRhYmxlUm93Y0NvdW50ID0gdGFibGUuZ2V0Um93QmluZGluZygpLmdldExlbmd0aCgpO1xuXHRcdGxldCBjb2x1bW5zID1cblx0XHRcdGNlbGxTZWxlY3Rpb24uY29sdW1ucy5sZW5ndGggPiAxXG5cdFx0XHRcdD8gY2VsbFNlbGVjdGlvbi5jb2x1bW5zXG5cdFx0XHRcdDogdGFibGUuZ2V0Q29sdW1ucygpLnNsaWNlKHRhYmxlLmdldENvbHVtbnMoKS5pbmRleE9mKGNlbGxTZWxlY3Rpb24uY29sdW1uc1swXSkpO1xuXHRcdGlmIChjZWxsU2VsZWN0aW9uLmNvbHVtbnMubGVuZ3RoID09PSAxICYmIGNlbGxTZWxlY3Rpb24ucm93cy5sZW5ndGggPT09IDEpIHtcblx0XHRcdG51bWJlck9mTmV3Q3JlYXRpb25Sb3dzID1cblx0XHRcdFx0cG9zRmlyc3RTZWxlY3RlZFJvdyArIHJhd0RhdGEubGVuZ3RoID4gdGFibGVSb3djQ291bnQgPyBwb3NGaXJzdFNlbGVjdGVkUm93ICsgcmF3RGF0YS5sZW5ndGggLSB0YWJsZVJvd2NDb3VudCA6IDA7XG5cdFx0XHRjb2x1bW5zID0gdGFibGUuZ2V0Q29sdW1ucygpLnNsaWNlKHRhYmxlLmdldENvbHVtbnMoKS5pbmRleE9mKGNlbGxTZWxlY3Rpb24uY29sdW1uc1swXSkpO1xuXHRcdFx0dXBkYXRlZFJvd0NvdW50ID0gcmF3RGF0YS5sZW5ndGg7XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIG11bHRpcGxlIGNlbGxzIGFyZSBzZWxlY3RlZFxuXHRcdFx0bnVtYmVyT2ZOZXdDcmVhdGlvblJvd3MgPVxuXHRcdFx0XHRwb3NGaXJzdFNlbGVjdGVkUm93ICsgcm93cy5sZW5ndGggPj0gdGFibGVSb3djQ291bnQgPyBwb3NGaXJzdFNlbGVjdGVkUm93ICsgcmF3RGF0YS5sZW5ndGggLSB0YWJsZVJvd2NDb3VudCA6IDA7XG5cdFx0XHR1cGRhdGVkUm93Q291bnQgPSBudW1iZXJPZk5ld0NyZWF0aW9uUm93cyA9PT0gMCA/IE1hdGgubWluKHJhd0RhdGEubGVuZ3RoLCBjZWxsU2VsZWN0aW9uLnJvd3MubGVuZ3RoKSA6IHJhd0RhdGEubGVuZ3RoO1xuXHRcdH1cblx0XHRyZXR1cm4geyByb3dzLCBjb2x1bW5zLCB1cGRhdGVkUm93Q291bnQsIG51bWJlck9mTmV3Q3JlYXRpb25Sb3dzIH07XG5cdH0sXG5cblx0LyoqXG5cdCAqICBHZXQgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHBhc3RlIG9wZXJhdGlvbi5cblx0ICogQHBhcmFtIHJhd0RhdGFcblx0ICogQHBhcmFtIGNlbGxTZWxlY3Rpb25cblx0ICogQHBhcmFtIGNlbGxTZWxlY3Rpb24uY29sdW1uc1xuXHQgKiBAcGFyYW0gY2VsbFNlbGVjdGlvbi5yb3dzXG5cdCAqIEBwYXJhbSBwb3NGaXJzdFNlbGVjdGVkUm93XG5cdCAqIEBwYXJhbSB0YWJsZVxuXHQgKiBAcmV0dXJucyBPYmpldCBjb250YWluaW5nIEluZm9ybWF0aW9uIGFib3V0IHRoZSBwYXN0aW5nIG9wZXJhdGlvblxuXHQgKi9cblx0Z2V0UGFzdGVJbmZvcm1hdGlvbjogZnVuY3Rpb24gKFxuXHRcdHJhd0RhdGE6IHN0cmluZ1tdW10sXG5cdFx0Y2VsbFNlbGVjdGlvbjogeyBjb2x1bW5zOiBDb2x1bW5bXTsgcm93czogT0RhdGFWNENvbnRleHRbXSB9LFxuXHRcdHBvc0ZpcnN0U2VsZWN0ZWRSb3c6IG51bWJlcixcblx0XHR0YWJsZTogVGFibGVcblx0KTogUGFzdGVJbmZvcm1hdGlvbiB8IG51bGwge1xuXHRcdGxldCBwYXN0ZUluZm9ybWF0aW9uOiBQYXN0ZUluZm9ybWF0aW9uIHwgbnVsbCA9IG51bGw7XG5cblx0XHRzd2l0Y2ggKHRhYmxlLmRhdGEoXCJ0YWJsZVR5cGVcIikpIHtcblx0XHRcdGNhc2UgXCJHcmlkVGFibGVcIjpcblx0XHRcdFx0cGFzdGVJbmZvcm1hdGlvbiA9IHRoaXMuZ2V0UGFzdGVJbmZvcm1hdGlvbkZvckdyaWRUYWJsZShyYXdEYXRhLCBjZWxsU2VsZWN0aW9uLCBwb3NGaXJzdFNlbGVjdGVkUm93LCB0YWJsZSk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBcIlJlc3BvbnNpdmVUYWJsZVwiOlxuXHRcdFx0XHRwYXN0ZUluZm9ybWF0aW9uID0gdGhpcy5nZXRQYXN0ZUluZm9ybWF0aW9uRm9yUmVwb25zaXZlVGFibGUocmF3RGF0YSwgY2VsbFNlbGVjdGlvbiwgcG9zRmlyc3RTZWxlY3RlZFJvdywgdGFibGUpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdExvZy53YXJuaW5nKGBQYXN0ZSBvcGVyYXRpb24gaXMgbm90IHN1cHBvcnRlZCBmb3IgdGFibGUgdHlwZSAke3RhYmxlLmRhdGEoXCJ0YWJsZVR5cGVcIil9YCk7XG5cdFx0fVxuXG5cdFx0aWYgKFxuXHRcdFx0cGFzdGVJbmZvcm1hdGlvbiAmJlxuXHRcdFx0cGFzdGVJbmZvcm1hdGlvbj8ubnVtYmVyT2ZOZXdDcmVhdGlvblJvd3MgPiAwICYmXG5cdFx0XHQodGFibGUuZ2V0UGFyZW50KCkgYXMgVGFibGVBUEkgJiB7IGdldENyZWF0aW9uTW9kZTogRnVuY3Rpb24gfSkuZ2V0Q3JlYXRpb25Nb2RlKCkuZ2V0TmFtZSgpICE9PSBDcmVhdGlvbk1vZGUuSW5saW5lQ3JlYXRpb25Sb3dzXG5cdFx0KSB7XG5cdFx0XHRwYXN0ZUluZm9ybWF0aW9uLnVwZGF0ZWRSb3dDb3VudCAtPSBwYXN0ZUluZm9ybWF0aW9uLm51bWJlck9mTmV3Q3JlYXRpb25Sb3dzO1xuXHRcdFx0cGFzdGVJbmZvcm1hdGlvbi5udW1iZXJPZk5ld0NyZWF0aW9uUm93cyA9IDA7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHBhc3RlSW5mb3JtYXRpb247XG5cdH0sXG5cblx0LyoqXG5cdCAqIFBhc3RlIGRhdGEgaW50byBhIHRhYmxlIHVzaW5nIGEgc2VsZWN0aW9uIG9mIGNvbHVtbiBhbmQgcm93cy5cblx0ICogQHBhcmFtIHJhd0RhdGEgVGhlIGRhdGEgdG8gYmUgcGFzdGVkIGludG8gdGhlIHRhYmxlXG5cdCAqIEBwYXJhbSBjZWxsU2VsZWN0aW9uIFRoZSBjb2x1bW5zIGFuZCB0aGUgcm93cyB0byBiZSB1cGRhdGVkXG5cdCAqIEBwYXJhbSBjZWxsU2VsZWN0aW9uLmNvbHVtbnMgVGhlIGNvbHVtbnMgdG8gYmUgdXBkYXRlZFxuXHQgKiBAcGFyYW0gY2VsbFNlbGVjdGlvbi5yb3dzIFRoZSByb3dzIHRvIGJlIHVwZGF0ZWRcblx0ICogQHBhcmFtIHRhYmxlIFRoZSB0YWJsZVxuXHQgKiBAcmV0dXJucyBPYmplY3QgY29udGFpbmluZyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgcGFzdGVcblx0ICovXG5cdHBhc3RlUmFuZ2VEYXRhOiBhc3luYyBmdW5jdGlvbiAoXG5cdFx0cmF3RGF0YTogc3RyaW5nW11bXSxcblx0XHRjZWxsU2VsZWN0aW9uOiB7IGNvbHVtbnM6IENvbHVtbltdOyByb3dzOiBPRGF0YVY0Q29udGV4dFtdIH0sXG5cdFx0dGFibGU6IFRhYmxlXG5cdCk6IFByb21pc2U8XG5cdFx0fCB7XG5cdFx0XHRcdHVwZGF0ZWRSb3dDb3VudDogbnVtYmVyO1xuXHRcdFx0XHR1cGRhdGVkQ29sQ291bnQ6IG51bWJlcjtcblx0XHRcdFx0bnVtYmVyT2ZOZXdDcmVhdGlvblJvd3M6IG51bWJlcjtcblx0XHRcdFx0cG9zRmlyc3RJbmxpbmVDcmVhdGlvblJvdzogbnVtYmVyIHwgdW5kZWZpbmVkO1xuXHRcdCAgfVxuXHRcdHwgdW5kZWZpbmVkXG5cdD4ge1xuXHRcdGNvbnN0IHBvc0ZpcnN0U2VsZWN0ZWRSb3cgPSBjZWxsU2VsZWN0aW9uLnJvd3NbMF0uZ2V0SW5kZXgoKSE7XG5cblx0XHRjb25zdCBwYXN0ZUluZm8gPSB0aGlzLmdldFBhc3RlSW5mb3JtYXRpb24ocmF3RGF0YSwgY2VsbFNlbGVjdGlvbiwgcG9zRmlyc3RTZWxlY3RlZFJvdywgdGFibGUpO1xuXHRcdGlmICghcGFzdGVJbmZvKSByZXR1cm47XG5cblx0XHRjb25zdCBwYXJzZWREYXRhID0gYXdhaXQgdGhpcy5wYXJzZVBhc3RlZERhdGEocmF3RGF0YSwgdGFibGUsIHBhc3RlSW5mby5jb2x1bW5zLCBmYWxzZSk7XG5cdFx0aWYgKHBhcnNlZERhdGEubGVuZ3RoID4gMCkge1xuXHRcdFx0aWYgKHBhc3RlSW5mby5udW1iZXJPZk5ld0NyZWF0aW9uUm93cyA+IDApIHtcblx0XHRcdFx0YXdhaXQgKHRhYmxlLmdldFBhcmVudCgpIGFzIFRhYmxlQVBJKS5jcmVhdGVFbXB0eVJvd3MoXG5cdFx0XHRcdFx0dGFibGUuZ2V0Um93QmluZGluZygpLFxuXHRcdFx0XHRcdHRhYmxlLFxuXHRcdFx0XHRcdGZhbHNlLFxuXHRcdFx0XHRcdHBhc3RlSW5mby5udW1iZXJPZk5ld0NyZWF0aW9uUm93cyxcblx0XHRcdFx0XHR0cnVlXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cblx0XHRcdC8vbG9hZCBtaXNzaW5nIHJvd3MgaWYgbmVlZGVkIGluY2x1ZGluZyB0aGUgbmV3bHkgY3JlYXRlZCByb3dzXG5cdFx0XHRwYXN0ZUluZm8ucm93cyA9IGF3YWl0IHRhYmxlLmdldFJvd0JpbmRpbmcoKS5yZXF1ZXN0Q29udGV4dHMocG9zRmlyc3RTZWxlY3RlZFJvdywgcGFzdGVJbmZvLnVwZGF0ZWRSb3dDb3VudCk7XG5cdFx0XHRhd2FpdCB0aGlzLl91cGRhdGVDb250ZXh0cyh0YWJsZSwgcGFzdGVJbmZvLnJvd3MsIHBhcnNlZERhdGEpO1xuXG5cdFx0XHQvLyBmb2N1c2luZyBvbiB0aGUgZmlyc3QgYXZhaWxhYmxlIGNyZWF0aW9uIHJvd1xuXHRcdFx0Y29uc3QgcG9zRmlyc3RJbmxpbmVDcmVhdGlvblJvdyA9IHBhc3RlSW5mby5yb3dzLmZpbmQoKGNvbnRleHQpID0+IGNvbnRleHQuaXNUcmFuc2llbnQoKSk/LmdldEluZGV4KCk7XG5cdFx0XHRpZiAocG9zRmlyc3RJbmxpbmVDcmVhdGlvblJvdykge1xuXHRcdFx0XHR0YWJsZS5mb2N1c1Jvdyhwb3NGaXJzdElubGluZUNyZWF0aW9uUm93KTtcblx0XHRcdH1cblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdHVwZGF0ZWRSb3dDb3VudDogcGFzdGVJbmZvLnVwZGF0ZWRSb3dDb3VudCxcblx0XHRcdFx0dXBkYXRlZENvbENvdW50OiBPYmplY3Qua2V5cyhwYXJzZWREYXRhWzBdKS5sZW5ndGgsXG5cdFx0XHRcdG51bWJlck9mTmV3Q3JlYXRpb25Sb3dzOiBwYXN0ZUluZm8ubnVtYmVyT2ZOZXdDcmVhdGlvblJvd3MgPCAwID8gMCA6IHBhc3RlSW5mby5udW1iZXJPZk5ld0NyZWF0aW9uUm93cyxcblx0XHRcdFx0cG9zRmlyc3RJbmxpbmVDcmVhdGlvblJvd1xuXHRcdFx0fTtcblx0XHR9XG5cdH0sXG5cdHBhc3RlRGF0YTogYXN5bmMgZnVuY3Rpb24gKHJhd0RhdGE6IHN0cmluZ1tdW10sIHRhYmxlOiBUYWJsZSwgY29udHJvbGxlcjogUGFnZUNvbnRyb2xsZXIpOiBQcm9taXNlPENvbnRleHRbXSB8IHVuZGVmaW5lZD4ge1xuXHRcdGNvbnN0IGVkaXRGbG93ID0gY29udHJvbGxlci5lZGl0Rmxvdztcblx0XHRjb25zdCB0YWJsZURlZmluaXRpb24gPSAodGFibGUuZ2V0UGFyZW50KCkgYXMgVGFibGVBUEkpLmdldFRhYmxlRGVmaW5pdGlvbigpO1xuXHRcdGxldCBhRGF0YTogUmVjb3JkPHN0cmluZywgdW5rbm93bj5bXSA9IFtdO1xuXHRcdHJldHVybiB0aGlzLnBhcnNlUGFzdGVkRGF0YShyYXdEYXRhLCB0YWJsZSlcblx0XHRcdC50aGVuKGFzeW5jIChhUGFyc2VkRGF0YTogUmVjb3JkPHN0cmluZywgdW5rbm93bj5bXSkgPT4ge1xuXHRcdFx0XHRhRGF0YSA9IGFQYXJzZWREYXRhIHx8IFtdO1xuXHRcdFx0XHRyZXR1cm4gUHJvbWlzZS5hbGwoXG5cdFx0XHRcdFx0YURhdGEubWFwKGFzeW5jIChtRGF0YSkgPT5cblx0XHRcdFx0XHRcdGVkaXRGbG93LnZhbGlkYXRlRG9jdW1lbnQodGFibGUuZ2V0QmluZGluZ0NvbnRleHQoKSBhcyBPRGF0YVY0Q29udGV4dCwge1xuXHRcdFx0XHRcdFx0XHRkYXRhOiBtRGF0YSxcblx0XHRcdFx0XHRcdFx0Y3VzdG9tVmFsaWRhdGlvbkZ1bmN0aW9uOiB0YWJsZURlZmluaXRpb24/LmNvbnRyb2w/LmN1c3RvbVZhbGlkYXRpb25GdW5jdGlvblxuXHRcdFx0XHRcdFx0fSlcblx0XHRcdFx0XHQpXG5cdFx0XHRcdCk7XG5cdFx0XHR9KVxuXHRcdFx0LnRoZW4oKGFWYWxpZGF0aW9uTWVzc2FnZXMpID0+IHtcblx0XHRcdFx0Y29uc3QgYUVycm9yTWVzc2FnZXM6IHsgbWVzc2FnZXM6IHsgbWVzc2FnZVRhcmdldD86IHN0cmluZzsgbWVzc2FnZVRleHQ6IHN0cmluZyB9W107IHJvdzogbnVtYmVyIH1bXSA9XG5cdFx0XHRcdFx0YVZhbGlkYXRpb25NZXNzYWdlcy5yZWR1Y2UoXG5cdFx0XHRcdFx0XHRmdW5jdGlvbiAoYU1lc3NhZ2VzLCBhQ3VzdG9tTWVzc2FnZXMsIGluZGV4KSB7XG5cdFx0XHRcdFx0XHRcdGlmIChhQ3VzdG9tTWVzc2FnZXMubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRcdFx0XHRcdGFNZXNzYWdlcy5wdXNoKHsgbWVzc2FnZXM6IGFDdXN0b21NZXNzYWdlcywgcm93OiBpbmRleCArIDEgfSk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0cmV0dXJuIGFNZXNzYWdlcztcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRbXSBhcyB7IG1lc3NhZ2VzOiB7IG1lc3NhZ2VUYXJnZXQ/OiBzdHJpbmc7IG1lc3NhZ2VUZXh0OiBzdHJpbmcgfVtdOyByb3c6IG51bWJlciB9W11cblx0XHRcdFx0XHQpO1xuXHRcdFx0XHRpZiAoYUVycm9yTWVzc2FnZXMubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRcdGNvbnN0IGFSb3dNZXNzYWdlcyA9IGFFcnJvck1lc3NhZ2VzLm1hcCgobUVycm9yKSA9PiB0aGlzLmZvcm1hdEN1c3RvbU1lc3NhZ2UobUVycm9yLm1lc3NhZ2VzLCBtRXJyb3Iucm93KSk7XG5cdFx0XHRcdFx0dGhpcy5kaXNwbGF5RXJyb3JNZXNzYWdlcyhhUm93TWVzc2FnZXMpO1xuXHRcdFx0XHRcdHJldHVybiBbXTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gYURhdGE7XG5cdFx0XHR9KVxuXHRcdFx0LnRoZW4oYXN5bmMgKGFWYWxpZGF0ZWREYXRhKTogUHJvbWlzZTxDb250ZXh0W10gfCB1bmRlZmluZWQ+ID0+IHtcblx0XHRcdFx0Ly8gcmVtb3ZlIHRoZSBsYXN0IHRyYW5zaWVudCBjb250ZXh0IGlmIGl0IGV4aXN0c1xuXHRcdFx0XHRjb25zdCB0cmFuc2llbnRDb250ZXh0cyA9IHRhYmxlXG5cdFx0XHRcdFx0LmdldFJvd0JpbmRpbmcoKVxuXHRcdFx0XHRcdC5nZXRDdXJyZW50Q29udGV4dHMoKVxuXHRcdFx0XHRcdC5maWx0ZXIoKGNvbnRleHQpID0+IGNvbnRleHQuaXNUcmFuc2llbnQoKSk7XG5cdFx0XHRcdGNvbnN0IGxhc3RUcmFuc2llbnRDb250ZXh0ID0gdHJhbnNpZW50Q29udGV4dHMucG9wKCk7XG5cdFx0XHRcdC8vY2hlY2sgaWYgdGhlIGxhc3QgdHJhbnNpZW50IGNvbnRleHQgaGFzIGFuIGVycm9yIG1lc3NhZ2Vcblx0XHRcdFx0Y29uc3QgbGFzdFRyYW5zaWVudENvbnRleHRIYXNFcnJvck1lc3NhZ2UgPSAhIU1lc3NhZ2luZy5nZXRNZXNzYWdlTW9kZWwoKVxuXHRcdFx0XHRcdC5nZXREYXRhKClcblx0XHRcdFx0XHQuZmluZCgobWVzc2FnZTogTWVzc2FnZSkgPT4gbGFzdFRyYW5zaWVudENvbnRleHQgJiYgbWVzc2FnZS5nZXRUYXJnZXRzKClbMF0uaW5jbHVkZXMobGFzdFRyYW5zaWVudENvbnRleHQuZ2V0UGF0aCgpKSk7XG5cdFx0XHRcdGNvbnN0IG5ld0NvbnRleHRzID1cblx0XHRcdFx0XHRhVmFsaWRhdGVkRGF0YS5sZW5ndGggPiAwXG5cdFx0XHRcdFx0XHQ/IGF3YWl0IGVkaXRGbG93LmNyZWF0ZU11bHRpcGxlRG9jdW1lbnRzKFxuXHRcdFx0XHRcdFx0XHRcdHRhYmxlLmdldFJvd0JpbmRpbmcoKSxcblx0XHRcdFx0XHRcdFx0XHRhVmFsaWRhdGVkRGF0YSxcblx0XHRcdFx0XHRcdFx0XHR0YWJsZURlZmluaXRpb24/LmNvbnRyb2w/LmNyZWF0ZUF0RW5kLFxuXHRcdFx0XHRcdFx0XHRcdHRydWUsXG5cdFx0XHRcdFx0XHRcdFx0Y29udHJvbGxlci5lZGl0Rmxvdy5vbkJlZm9yZUNyZWF0ZVxuXHRcdFx0XHRcdFx0ICApXG5cdFx0XHRcdFx0XHQ6IHVuZGVmaW5lZDtcblx0XHRcdFx0Ly8gaWYgdGhlIGxhc3QgdHJhbnNpZW50IGNvbnRleHQgaGFzIG5vIGVycm9yIG1lc3NhZ2UsIGRlbGV0ZSBpdCBhbmQgcmVjcmVhdGUgYSBuZXcgb25lIGF0IHRoZSBsYXN0IHBvc2l0aW9uXG5cdFx0XHRcdGlmIChsYXN0VHJhbnNpZW50Q29udGV4dCAmJiAhbGFzdFRyYW5zaWVudENvbnRleHRIYXNFcnJvck1lc3NhZ2UpIHtcblx0XHRcdFx0XHRsYXN0VHJhbnNpZW50Q29udGV4dD8uZGVsZXRlKCk7XG5cdFx0XHRcdFx0YXdhaXQgKHRhYmxlLmdldFBhcmVudCgpIGFzIFRhYmxlQVBJKS5jcmVhdGVFbXB0eVJvd3ModGFibGUuZ2V0Um93QmluZGluZygpLCB0YWJsZSwgZmFsc2UsIDEpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBuZXdDb250ZXh0cztcblx0XHRcdH0pXG5cdFx0XHQuY2F0Y2goKG9FcnJvcikgPT4ge1xuXHRcdFx0XHRMb2cuZXJyb3IoXCJFcnJvciB3aGlsZSBwYXN0aW5nIGRhdGFcIiwgb0Vycm9yKTtcblx0XHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHRcdH0pO1xuXHR9XG59O1xuXG5leHBvcnQgZGVmYXVsdCBQYXN0ZUhlbHBlcjtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0VBZ0NBLE1BQU1BLHdCQUF3QixHQUFHLFNBQUFBLENBQ2hDQyxZQUFvQixFQUNwQkMsY0FBc0IsRUFDdEJDLFdBQW9CLEVBQ3BCQyxTQUF5QixFQUdQO0lBQUEsSUFGbEJDLGlDQUFpQyxHQUFBQyxTQUFBLENBQUFDLE1BQUEsUUFBQUQsU0FBQSxRQUFBRSxTQUFBLEdBQUFGLFNBQUEsTUFBRyxLQUFLO0lBQUEsSUFDekNHLFdBQVcsR0FBQUgsU0FBQSxDQUFBQyxNQUFBLFFBQUFELFNBQUEsUUFBQUUsU0FBQSxHQUFBRixTQUFBLE1BQUcsS0FBSztJQUVuQixNQUFNSSxRQUFRLEdBQUdQLFdBQVcsQ0FBQ1EsV0FBVyxDQUFDVixZQUFZLENBQUM7TUFDckRXLGFBQWEsR0FBRztRQUFFQyxxQkFBcUIsRUFBRTtNQUFLLENBQUM7TUFDL0NDLElBQUksR0FBR1YsU0FBUyxDQUFDVyxVQUFVLENBQUMsR0FBR2IsY0FBYyxJQUFJRCxZQUFZLEVBQUUsRUFBRVcsYUFBYSxDQUFDO0lBQ2hGLElBQUlJLFNBQVMsRUFBRUMsUUFBUTtJQUN2QixJQUFJWixpQ0FBaUMsS0FBSyxJQUFJLEVBQUU7TUFDL0NXLFNBQVMsR0FBRyxDQUFDTixRQUFRO01BQ3JCTyxRQUFRLEdBQUdkLFdBQVcsQ0FBQ1EsV0FBVyxDQUFDLEdBQUdWLFlBQVksNkJBQTZCLENBQUM7SUFDakYsQ0FBQyxNQUFNO01BQ05lLFNBQVMsR0FBRyxDQUFDTixRQUFRLElBQUlQLFdBQVcsQ0FBQ1EsV0FBVyxDQUFDLEdBQUdWLFlBQVksNkJBQTZCLENBQUM7SUFDL0Y7SUFFQSxPQUFPO01BQ05T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
426
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJnZXRJbmZvRm9yRW50aXR5UHJvcGVydHkiLCJwcm9wZXJ0eVBhdGgiLCJyb3dCaW5kaW5nUGF0aCIsIm1ldGFDb250ZXh0IiwibWV0YU1vZGVsIiwiZW5hYmxlUGFzdGluZ09mQ29tcHV0ZWRQcm9wZXJ0aWVzIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwidW5kZWZpbmVkIiwiZm9yY2VJZ25vcmUiLCJwcm9wZXJ0eSIsImdldFByb3BlcnR5IiwiZm9ybWF0T3B0aW9ucyIsInBhcnNlS2VlcHNFbXB0eVN0cmluZyIsInR5cGUiLCJnZXRVSTVUeXBlIiwiaXNJZ25vcmVkIiwiY29tcHV0ZWQiLCJpZ25vcmUiLCJkaXNwbGF5RXJyb3JNZXNzYWdlcyIsImVycm9yTWVzc2FnZXMiLCJtZXNzYWdlRGV0YWlscyIsInJlc291cmNlQnVuZGxlIiwiTGlicmFyeSIsImdldFJlc291cmNlQnVuZGxlRm9yIiwiZXJyb3JDb3JyZWN0aW9uTWVzc2FnZSIsImdldFRleHQiLCJub3RlTWVzc2FnZSIsInBhc3RlRXJyb3JNZXNzYWdlIiwidW5zaGlmdCIsIk1lc3NhZ2VCb3giLCJlcnJvciIsInRpdGxlIiwiZGV0YWlscyIsImpvaW4iLCJQYXN0ZUhlbHBlciIsImZvcm1hdEN1c3RvbU1lc3NhZ2UiLCJ2YWxpZGF0aW9uTWVzc2FnZXMiLCJpUm93TnVtYmVyIiwiZXJyb3JNZXNzYWdlIiwibnVtYmVyTWVzc2FnZXMiLCJpMThuUm93IiwiZm9yRWFjaCIsIm1lc3NhZ2UiLCJpbmRleE1lc3NhZ2UiLCJtZXNzYWdlVGV4dCIsImdldENvbHVtbkluZm8iLCJ0YWJsZSIsImNvbHVtbnMiLCJpZ25vcmVOYXZpZ2F0aW9uUHJvcGVydHkiLCJtb2RlbCIsImdldFJvd0JpbmRpbmciLCJnZXRNb2RlbCIsImdldE1ldGFNb2RlbCIsInJlc29sdmUiLCJnZXRQYXRoIiwiZ2V0Q29udGV4dCIsImdldE1ldGFDb250ZXh0IiwiZW50aXR5VHlwZVByb3BlcnRpZXMiLCJNZXRhTW9kZWxDb252ZXJ0ZXIiLCJnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMiLCJ0YXJnZXRFbnRpdHlUeXBlIiwiZW50aXR5UHJvcGVydGllcyIsImNvbHVtbkFycmFuZ2VtZW50UHJvcGVydHkiLCJ0YWJsZURlZmluaXRpb24iLCJnZXRQYXJlbnQiLCJnZXRUYWJsZURlZmluaXRpb24iLCJnZXRDb2x1bW5Gcm9tUHJvcGVydHlJbmZvcyIsImRhdGFQcm9wZXJ0eSIsImhhc1ZhbHVlSGVscCIsInRleHQiLCJwdXNoIiwiZXhwb3J0U2V0dGluZ3MiLCJpbmNsdWRlcyIsInBhdGgiLCJjb250cm9sIiwicHJvcGVydHlJbmZvIiwiZ2V0RW5oYW5jZWRGZXRjaGVkUHJvcGVydHlJbmZvcyIsInByb3BlcnR5SW5mb0RpY3QiLCJPYmplY3QiLCJhc3NpZ24iLCJtYXAiLCJrZXkiLCJjb2x1bW5JbmZvcyIsImdldENvbHVtbnMiLCJjb2x1bW4iLCJpbmZvUHJvcGVydHkiLCJnZXRQcm9wZXJ0eUtleSIsInByb3BlcnR5SW5mb3MiLCJoYXNWYWx1ZUhlbHBQcm9wZXJ0eSIsImNvbHVtblRvUHVzaCIsImV4cG9ydERhdGFQb2ludFRhcmdldFZhbHVlIiwiZmluZCIsInAiLCJuYW1lIiwiYW5ub3RhdGlvbnMiLCJDb21tb24iLCJWYWx1ZUxpc3QiLCJwYXJzZVBhc3RlZERhdGEiLCJyYXdEYXRhIiwicGFzdGVJbmZvcyIsInBhc3RlZENvbHVtbkNvdW50IiwiZmlyc3RFZGl0YWJsZUNvbHVtbkluZGV4IiwiSSIsImNvbXB1dGVkUHJvcGVydGllcyIsImZpbHRlciIsImluZm8iLCJjb21wdXRlZFByb3BlcnR5IiwiY29sdW1uUG9zaXRpb24iLCJpbmRleE9mIiwiaXNDb2xFbXB0eSIsImV2ZXJ5Iiwicm93IiwicGFyc2VSZXN1bHQiLCJwYXJzZWREYXRhIiwiZXJyb3JzIiwiQ29yZVBhc3RlSGVscGVyIiwicGFyc2UiLCJvRWxlbWVudCIsIl91cGRhdGVDb250ZXh0cyIsImNvbnRleHRzIiwiZGF0YSIsImluZGV4Iiwic2V0UHJvcGVydHlQcm9taXNlcyIsInJvd0NvbnRleHQiLCJnZXRQcm9wZXJ0eUVkaXRNb2RlIiwiRmllbGRFZGl0TW9kZSIsIkVkaXRhYmxlIiwic2V0UHJvcGVydHkiLCJMb2ciLCJ3YXJuaW5nIiwiZ2V0SW5kZXgiLCJQcm9taXNlIiwiYWxsU2V0dGxlZCIsImdldFBhc3RlSW5mb3JtYXRpb25Gb3JSZXBvbnNpdmVUYWJsZSIsImNlbGxTZWxlY3Rpb24iLCJwb3NGaXJzdFNlbGVjdGVkUm93IiwibnVtYmVyT2ZOZXdDcmVhdGlvblJvd3MiLCJwb3NGaXJzdElubGluZUNyZWF0aW9uUm93SW5UYWJsZSIsImdldEN1cnJlbnRDb250ZXh0cyIsImZpbmRJbmRleCIsImNvbnRleHQiLCJpc1RyYW5zaWVudCIsInJvd3MiLCJ1cGRhdGVkUm93Q291bnQiLCJzbGljZSIsImxhc3RJbmxpbmVDcmVhdGlvblJvd0luU2VsZWN0aW9uIiwicG9wIiwicG9zTGFzdElubGluZUNyZWF0aW9uUm93SW5TZWxlY3Rpb24iLCJNYXRoIiwibWluIiwiZ2V0UGFzdGVJbmZvcm1hdGlvbkZvckdyaWRUYWJsZSIsInRhYmxlUm93Y0NvdW50IiwiZ2V0TGVuZ3RoIiwiZ2V0UGFzdGVJbmZvcm1hdGlvbiIsInBhc3RlSW5mb3JtYXRpb24iLCJnZXRDcmVhdGlvbk1vZGUiLCJnZXROYW1lIiwiQ3JlYXRpb25Nb2RlIiwiSW5saW5lQ3JlYXRpb25Sb3dzIiwicGFzdGVSYW5nZURhdGEiLCJwYXN0ZUluZm8iLCJjcmVhdGVFbXB0eVJvd3MiLCJyZXF1ZXN0Q29udGV4dHMiLCJwb3NGaXJzdElubGluZUNyZWF0aW9uUm93IiwiZm9jdXNSb3ciLCJ1cGRhdGVkQ29sQ291bnQiLCJrZXlzIiwicGFzdGVEYXRhIiwiY29udHJvbGxlciIsImVkaXRGbG93IiwiYURhdGEiLCJ0aGVuIiwiYVBhcnNlZERhdGEiLCJhbGwiLCJtRGF0YSIsInZhbGlkYXRlRG9jdW1lbnQiLCJnZXRCaW5kaW5nQ29udGV4dCIsImN1c3RvbVZhbGlkYXRpb25GdW5jdGlvbiIsImFWYWxpZGF0aW9uTWVzc2FnZXMiLCJhRXJyb3JNZXNzYWdlcyIsInJlZHVjZSIsImFNZXNzYWdlcyIsImFDdXN0b21NZXNzYWdlcyIsIm1lc3NhZ2VzIiwiYVJvd01lc3NhZ2VzIiwibUVycm9yIiwiYVZhbGlkYXRlZERhdGEiLCJ0cmFuc2llbnRDb250ZXh0cyIsImxhc3RUcmFuc2llbnRDb250ZXh0IiwibGFzdFRyYW5zaWVudENvbnRleHRIYXNFcnJvck1lc3NhZ2UiLCJNZXNzYWdpbmciLCJnZXRNZXNzYWdlTW9kZWwiLCJnZXREYXRhIiwiZ2V0VGFyZ2V0cyIsIm5ld0NvbnRleHRzIiwiY3JlYXRlTXVsdGlwbGVEb2N1bWVudHMiLCJjcmVhdGVBdEVuZCIsImlzRnJvbUNvcHlQYXN0ZSIsImJlZm9yZUNyZWF0ZUNhbGxCYWNrIiwib25CZWZvcmVDcmVhdGUiLCJkZWxldGUiLCJjYXRjaCIsIm9FcnJvciJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiUGFzdGVIZWxwZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBBcnJheVdpdGhJbmRleCwgUHJvcGVydHkgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXNcIjtcbmltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IHR5cGUgUGFnZUNvbnRyb2xsZXIgZnJvbSBcInNhcC9mZS9jb3JlL1BhZ2VDb250cm9sbGVyXCI7XG5pbXBvcnQgKiBhcyBNZXRhTW9kZWxDb252ZXJ0ZXIgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWV0YU1vZGVsQ29udmVydGVyXCI7XG5pbXBvcnQgdHlwZSBUYWJsZUFQSSBmcm9tIFwic2FwL2ZlL21hY3Jvcy90YWJsZS9UYWJsZUFQSVwiO1xuaW1wb3J0IHR5cGUgeyBFbmhhbmNlZEZFUHJvcGVydHlJbmZvIH0gZnJvbSBcInNhcC9mZS9tYWNyb3MvdGFibGUvVGFibGVBUElcIjtcbmltcG9ydCBNZXNzYWdlQm94IGZyb20gXCJzYXAvbS9NZXNzYWdlQm94XCI7XG5pbXBvcnQgTGlicmFyeSBmcm9tIFwic2FwL3VpL2NvcmUvTGliXCI7XG5pbXBvcnQgTWVzc2FnaW5nIGZyb20gXCJzYXAvdWkvY29yZS9NZXNzYWdpbmdcIjtcbmltcG9ydCB0eXBlIE1lc3NhZ2UgZnJvbSBcInNhcC91aS9jb3JlL21lc3NhZ2UvTWVzc2FnZVwiO1xuaW1wb3J0ICogYXMgQ29yZVBhc3RlSGVscGVyIGZyb20gXCJzYXAvdWkvY29yZS91dGlsL1Bhc3RlSGVscGVyXCI7XG5pbXBvcnQgdHlwZSBUYWJsZSBmcm9tIFwic2FwL3VpL21kYy9UYWJsZVwiO1xuaW1wb3J0IHR5cGUgQ29sdW1uIGZyb20gXCJzYXAvdWkvbWRjL3RhYmxlL0NvbHVtblwiO1xuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL0NvbnRleHRcIjtcbmltcG9ydCB0eXBlIE9EYXRhVHlwZSBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3R5cGUvT0RhdGFUeXBlXCI7XG5pbXBvcnQgdHlwZSBPRGF0YVY0Q29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L0NvbnRleHRcIjtcbmltcG9ydCB0eXBlIE9EYXRhTWV0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNZXRhTW9kZWxcIjtcbmltcG9ydCB7IENyZWF0aW9uTW9kZSB9IGZyb20gXCIuLi9jb252ZXJ0ZXJzL01hbmlmZXN0U2V0dGluZ3NcIjtcbmltcG9ydCB7IEZpZWxkRWRpdE1vZGUgfSBmcm9tIFwiLi4vdGVtcGxhdGluZy9VSUZvcm1hdHRlcnNcIjtcblxuZXhwb3J0IHR5cGUgY3VzdG9tVmFsaWRhdGlvbk1lc3NhZ2UgPSB7XG5cdG1lc3NhZ2VUZXh0Pzogc3RyaW5nO1xuXHRtZXNzYWdlVGFyZ2V0Pzogc3RyaW5nO1xufTtcblxudHlwZSBQYXN0ZUluZm9ybWF0aW9uID0ge1xuXHRyb3dzOiBPRGF0YVY0Q29udGV4dFtdO1xuXHRjb2x1bW5zOiBDb2x1bW5bXTtcblx0dXBkYXRlZFJvd0NvdW50OiBudW1iZXI7XG5cdG51bWJlck9mTmV3Q3JlYXRpb25Sb3dzOiBudW1iZXI7XG59O1xuXG5jb25zdCBnZXRJbmZvRm9yRW50aXR5UHJvcGVydHkgPSBmdW5jdGlvbiAoXG5cdHByb3BlcnR5UGF0aDogc3RyaW5nLFxuXHRyb3dCaW5kaW5nUGF0aDogc3RyaW5nLFxuXHRtZXRhQ29udGV4dDogQ29udGV4dCxcblx0bWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbCxcblx0ZW5hYmxlUGFzdGluZ09mQ29tcHV0ZWRQcm9wZXJ0aWVzID0gZmFsc2UsXG5cdGZvcmNlSWdub3JlID0gZmFsc2Vcbik6IFBhc3RlQ29sdW1uSW5mbyB7XG5cdGNvbnN0IHByb3BlcnR5ID0gbWV0YUNvbnRleHQuZ2V0UHJvcGVydHkocHJvcGVydHlQYXRoKSxcblx0XHRmb3JtYXRPcHRpb25zID0geyBwYXJzZUtlZXBzRW1wdHlTdHJpbmc6IHRydWUgfSxcblx0XHR0eXBlID0gbWV0YU1vZGVsLmdldFVJNVR5cGUoYCR7cm93QmluZGluZ1BhdGh9LyR7cHJvcGVydHlQYXRofWAsIGZvcm1hdE9wdGlvbnMpO1xuXHRsZXQgaXNJZ25vcmVkLCBjb21wdXRlZDtcblx0aWYgKGVuYWJsZVBhc3RpbmdPZkNvbXB1dGVkUHJvcGVydGllcyA9PT0gdHJ1ZSkge1xuXHRcdGlzSWdub3JlZCA9ICFwcm9wZXJ0eTtcblx0XHRjb21wdXRlZCA9IG1ldGFDb250ZXh0LmdldFByb3BlcnR5KGAke3Byb3BlcnR5UGF0aH1AT3JnLk9EYXRhLkNvcmUuVjEuQ29tcHV0ZWRgKTtcblx0fSBlbHNlIHtcblx0XHRpc0lnbm9yZWQgPSAhcHJvcGVydHkgfHwgbWV0YUNvbnRleHQuZ2V0UHJvcGVydHkoYCR7cHJvcGVydHlQYXRofUBPcmcuT0RhdGEuQ29yZS5WMS5Db21wdXRlZGApO1xuXHR9XG5cblx0cmV0dXJuIHtcblx0XHRwcm9wZXJ0eTogcHJvcGVydHlQYXRoLFxuXHRcdGlnbm9yZTogZm9yY2VJZ25vcmUgfHwgaXNJZ25vcmVkLFxuXHRcdGNvbXB1dGVkOiBjb21wdXRlZCxcblx0XHR0eXBlOiB0eXBlXG5cdH07XG59O1xuXG5jb25zdCBkaXNwbGF5RXJyb3JNZXNzYWdlcyA9IGZ1bmN0aW9uIChlcnJvck1lc3NhZ2VzOiBzdHJpbmdbXSk6IHZvaWQge1xuXHRjb25zdCBtZXNzYWdlRGV0YWlscyA9IFsuLi5lcnJvck1lc3NhZ2VzXTtcblx0Y29uc3QgcmVzb3VyY2VCdW5kbGUgPSBMaWJyYXJ5LmdldFJlc291cmNlQnVuZGxlRm9yKFwic2FwLmZlLmNvcmVcIikhLFxuXHRcdGVycm9yQ29ycmVjdGlvbk1lc3NhZ2UgPSByZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19QQVNURV9IRUxQRVJfU0FQRkVfUEFTVEVfRVJST1JfQ09SUkVDVElPTl9NRVNTQUdFXCIpLFxuXHRcdG5vdGVNZXNzYWdlID0gcmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfUEFTVEVfSEVMUEVSX1NBUEZFX1BBU1RFX0VSUk9SX0NPUlJFQ1RJT05fTk9URVwiKTtcblx0bGV0IHBhc3RlRXJyb3JNZXNzYWdlO1xuXG5cdGlmIChtZXNzYWdlRGV0YWlscy5sZW5ndGggPiAxKSB7XG5cdFx0cGFzdGVFcnJvck1lc3NhZ2UgPSByZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19QQVNURV9IRUxQRVJfU0FQRkVfUEFTVEVfRVJST1JfTUVTU0FHRV9QTFVSQUxcIiwgW21lc3NhZ2VEZXRhaWxzLmxlbmd0aF0pO1xuXHR9IGVsc2Uge1xuXHRcdHBhc3RlRXJyb3JNZXNzYWdlID0gcmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfUEFTVEVfSEVMUEVSX1NBUEZFX1BBU1RFX0VSUk9SX01FU1NBR0VfU0lOR1VMQVJcIik7XG5cdH1cblx0bWVzc2FnZURldGFpbHMudW5zaGlmdChcIlwiKTsgLy8gVG8gc2hvdyBzcGFjZSBiZXR3ZWVuIHRoZSBzaG9ydCB0ZXh0IGFuZCB0aGUgbGlzdCBvZiBlcnJvcnNcblx0bWVzc2FnZURldGFpbHMudW5zaGlmdChub3RlTWVzc2FnZSk7XG5cdG1lc3NhZ2VEZXRhaWxzLnVuc2hpZnQoZXJyb3JDb3JyZWN0aW9uTWVzc2FnZSk7XG5cdE1lc3NhZ2VCb3guZXJyb3IocGFzdGVFcnJvck1lc3NhZ2UsIHtcblx0XHR0aXRsZTogcmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfQ09NTU9OX1NBUEZFX0VSUk9SX01FU1NBR0VTX1BBR0VfVElUTEVfRVJST1JcIiksXG5cdFx0ZGV0YWlsczogbWVzc2FnZURldGFpbHMuam9pbihcIjxicj5cIilcblx0fSk7XG59O1xuXG50eXBlIFBhc3RlQ29sdW1uSW5mbyA9IHtcblx0cHJvcGVydHk6IHN0cmluZyB8IHVuZGVmaW5lZDtcblx0dHlwZT86IE9EYXRhVHlwZSB8IG51bGw7XG5cdGlnbm9yZTogYm9vbGVhbjtcblx0Y29tcHV0ZWQ/OiBib29sZWFuO1xufTtcblxuY29uc3QgUGFzdGVIZWxwZXIgPSB7XG5cdGRpc3BsYXlFcnJvck1lc3NhZ2VzOiBkaXNwbGF5RXJyb3JNZXNzYWdlcyxcblx0Zm9ybWF0Q3VzdG9tTWVzc2FnZTogZnVuY3Rpb24gKHZhbGlkYXRpb25NZXNzYWdlczogY3VzdG9tVmFsaWRhdGlvbk1lc3NhZ2VbXSwgaVJvd051bWJlcjogbnVtYmVyKTogc3RyaW5nIHtcblx0XHRsZXQgZXJyb3JNZXNzYWdlID0gXCJcIjtcblx0XHRjb25zdCBudW1iZXJNZXNzYWdlcyA9IHZhbGlkYXRpb25NZXNzYWdlcy5sZW5ndGg7XG5cdFx0Y29uc3QgcmVzb3VyY2VCdW5kbGUgPSBMaWJyYXJ5LmdldFJlc291cmNlQnVuZGxlRm9yKFwic2FwLmZlLmNvcmVcIikhLFxuXHRcdFx0aTE4blJvdyA9IHJlc291cmNlQnVuZGxlLmdldFRleHQoXCJUX01FU1NBR0VfR1JPVVBfREVTQ1JJUFRJT05fVEFCTEVfUk9XXCIpO1xuXHRcdGlmIChudW1iZXJNZXNzYWdlcyA+IDApIHtcblx0XHRcdGVycm9yTWVzc2FnZSArPSBgJHtpMThuUm93fSAke2lSb3dOdW1iZXJ9OiBgO1xuXHRcdFx0dmFsaWRhdGlvbk1lc3NhZ2VzLmZvckVhY2goKG1lc3NhZ2UsIGluZGV4TWVzc2FnZSkgPT4ge1xuXHRcdFx0XHRpZiAobWVzc2FnZS5tZXNzYWdlVGV4dCkge1xuXHRcdFx0XHRcdGVycm9yTWVzc2FnZSArPSBtZXNzYWdlLm1lc3NhZ2VUZXh0ICsgKGluZGV4TWVzc2FnZSArIDEgIT09IG51bWJlck1lc3NhZ2VzID8gXCIgXCIgOiBcIlwiKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdHJldHVybiBlcnJvck1lc3NhZ2U7XG5cdH0sXG5cdC8qKlxuXHQgKiBHZXQgZGV0YWlscyBhYm91dCB0YWJsZSBjb2x1bW5zLlxuXHQgKiBAcGFyYW0gdGFibGUgVGhlIHRhYmxlIHdoaWNoIGNvbnRhaW5zIHRoZSBjb2x1bW5zIHRvIGJlIGFuYWx5emVkXG5cdCAqIEBwYXJhbSBjb2x1bW5zIEEgbGlzdCBvZiBjb2x1bW5zIHRvIGJlIGFuYWx5emVkLiBJZiB1bmRlZmluZWQsIGFsbCBjb2x1bW5zIGZyb20gdGhlIHRhYmxlIGFyZSBhbmFseXplZFxuXHQgKiBAcGFyYW0gaWdub3JlTmF2aWdhdGlvblByb3BlcnR5IElmIHRydWUsIG5hdmlnYXRpb24gcHJvcGVydGllcyBhcmUgaWdub3JlZFxuXHQgKiBAcmV0dXJucyBBbiBhcnJheSBvZiBvYmplY3RzIHByb3ZpZGluZyBkZXRhaWxzIGFib3V0IGNvbHVtbnMuXG5cdCAqL1xuXHRnZXRDb2x1bW5JbmZvOiBmdW5jdGlvbiAodGFibGU6IFRhYmxlLCBjb2x1bW5zPzogQ29sdW1uW10sIGlnbm9yZU5hdmlnYXRpb25Qcm9wZXJ0eSA9IHRydWUpOiBQYXN0ZUNvbHVtbkluZm9bXSB7XG5cdFx0Y29uc3QgbW9kZWwgPSB0YWJsZS5nZXRSb3dCaW5kaW5nKCkuZ2V0TW9kZWwoKSxcblx0XHRcdG1ldGFNb2RlbCA9IG1vZGVsLmdldE1ldGFNb2RlbCgpLFxuXHRcdFx0cm93QmluZGluZ1BhdGggPSBtb2RlbC5yZXNvbHZlKHRhYmxlLmdldFJvd0JpbmRpbmcoKS5nZXRQYXRoKCksIHRhYmxlLmdldFJvd0JpbmRpbmcoKS5nZXRDb250ZXh0KCkpLFxuXHRcdFx0bWV0YUNvbnRleHQgPSBtZXRhTW9kZWwuZ2V0TWV0YUNvbnRleHQocm93QmluZGluZ1BhdGgpLFxuXHRcdFx0ZW50aXR5VHlwZVByb3BlcnRpZXMgPSBNZXRhTW9kZWxDb252ZXJ0ZXIuZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzKG1ldGFDb250ZXh0KS50YXJnZXRFbnRpdHlUeXBlLmVudGl0eVByb3BlcnRpZXMsXG5cdFx0XHRjb2x1bW5BcnJhbmdlbWVudFByb3BlcnR5OiBzdHJpbmdbXSA9IFtdLFxuXHRcdFx0dGFibGVEZWZpbml0aW9uID0gKHRhYmxlLmdldFBhcmVudCgpIGFzIFRhYmxlQVBJKS5nZXRUYWJsZURlZmluaXRpb24oKTtcblx0XHRmdW5jdGlvbiBnZXRDb2x1bW5Gcm9tUHJvcGVydHlJbmZvcyhcblx0XHRcdGRhdGFQcm9wZXJ0eTogRW5oYW5jZWRGRVByb3BlcnR5SW5mbyxcblx0XHRcdGhhc1ZhbHVlSGVscDogYm9vbGVhbixcblx0XHRcdHByb3BlcnR5OiBzdHJpbmdcblx0XHQpOiBQYXN0ZUNvbHVtbkluZm8gfCB1bmRlZmluZWQge1xuXHRcdFx0Ly8gSWYgd2UgaGF2ZSBhIHRleHRBcnJhbmdlbWVudCwgd2Ugd2FudCB0byByZW1vdmUgaXQgaWYgaXQgaGFzIGEgVmFsdWVMaXN0IGFzc29jaWF0ZWQuXG5cdFx0XHRpZiAoZGF0YVByb3BlcnR5LnRleHQgJiYgaGFzVmFsdWVIZWxwKSB7XG5cdFx0XHRcdGNvbHVtbkFycmFuZ2VtZW50UHJvcGVydHkucHVzaChkYXRhUHJvcGVydHkudGV4dCk7XG5cdFx0XHR9XG5cdFx0XHQvLyBOb24gZXhwb3J0ZWQgY29sdW1ucyBzaG91bGQgYmUgcGFydCBvZiB0aGUgY29sdW1uSW5mb3Ncblx0XHRcdGlmIChkYXRhUHJvcGVydHkuZXhwb3J0U2V0dGluZ3MgIT09IG51bGwpIHtcblx0XHRcdFx0Ly8gQ2hlY2sgYSBuYXZpZ2F0aW9uIHByb3BlcnR5IHdpdGhpbiB0aGUgY3VycmVudCBDb21wbGV4IHByb3BlcnR5IC0tPiBpZ25vcmVcblx0XHRcdFx0aWYgKGlnbm9yZU5hdmlnYXRpb25Qcm9wZXJ0eSAmJiBwcm9wZXJ0eS5pbmNsdWRlcyhcIi9cIikpIHtcblx0XHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdFx0cHJvcGVydHk6IGRhdGFQcm9wZXJ0eS5wYXRoLFxuXHRcdFx0XHRcdFx0aWdub3JlOiB0cnVlXG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRsZXQgZm9yY2VJZ25vcmUgPSBmYWxzZTtcblx0XHRcdFx0XHRpZiAoZGF0YVByb3BlcnR5LnBhdGgpIHtcblx0XHRcdFx0XHRcdGZvcmNlSWdub3JlID0gY29sdW1uQXJyYW5nZW1lbnRQcm9wZXJ0eS5pbmNsdWRlcyhkYXRhUHJvcGVydHkucGF0aCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdC8vIFRoZSBvYmplY3QgdGhpcyBpcyB3ZWlyZCBpbiBhIGZ1bmN0aW9uLCBzbyBjaGFuZ2luZyBpdCB0byBQYXN0ZUhlbHBlciBpbnN0ZWFkLlxuXHRcdFx0XHRcdHJldHVybiBQYXN0ZUhlbHBlci5nZXRJbmZvRm9yRW50aXR5UHJvcGVydHkoXG5cdFx0XHRcdFx0XHRkYXRhUHJvcGVydHkucGF0aCEsXG5cdFx0XHRcdFx0XHRyb3dCaW5kaW5nUGF0aCxcblx0XHRcdFx0XHRcdG1ldGFDb250ZXh0LFxuXHRcdFx0XHRcdFx0bWV0YU1vZGVsLFxuXHRcdFx0XHRcdFx0dGFibGVEZWZpbml0aW9uLmNvbnRyb2wuZW5hYmxlUGFzdGluZ09mQ29tcHV0ZWRQcm9wZXJ0aWVzLFxuXHRcdFx0XHRcdFx0Zm9yY2VJZ25vcmVcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Y29uc3QgcHJvcGVydHlJbmZvID0gKHRhYmxlLmdldFBhcmVudCgpIGFzIFRhYmxlQVBJKS5nZXRFbmhhbmNlZEZldGNoZWRQcm9wZXJ0eUluZm9zKCk7XG5cdFx0Y29uc3QgcHJvcGVydHlJbmZvRGljdDogUmVjb3JkPHN0cmluZywgRW5oYW5jZWRGRVByb3BlcnR5SW5mbz4gPSBPYmplY3QuYXNzaWduKFxuXHRcdFx0e30sXG5cdFx0XHQuLi5wcm9wZXJ0eUluZm8ubWFwKChwcm9wZXJ0eSkgPT4gKHsgW3Byb3BlcnR5LmtleV06IHByb3BlcnR5IH0pKVxuXHRcdCk7XG5cdFx0Y29uc3QgY29sdW1uSW5mb3M6IFBhc3RlQ29sdW1uSW5mb1tdID0gW107XG5cdFx0KGNvbHVtbnMgPz8gdGFibGUuZ2V0Q29sdW1ucygpKS5mb3JFYWNoKChjb2x1bW4pID0+IHtcblx0XHRcdGNvbnN0IGluZm9Qcm9wZXJ0eSA9IHByb3BlcnR5SW5mb0RpY3RbY29sdW1uLmdldFByb3BlcnR5S2V5KCldO1xuXHRcdFx0Ly8gQ2hlY2sgaWYgaXQncyBhIGNvbXBsZXggcHJvcGVydHkgKHByb3BlcnR5IGFzc29jaWF0ZWQgdG8gbXVsdGlwbGUgc2ltcGxlIHByb3BlcnRpZXMpXG5cdFx0XHRpZiAoaW5mb1Byb3BlcnR5LnByb3BlcnR5SW5mb3MpIHtcblx0XHRcdFx0Ly8gR2V0IGRhdGEgZnJvbSBzaW1wbGUgcHJvcGVydHlcblx0XHRcdFx0aW5mb1Byb3BlcnR5LnByb3BlcnR5SW5mb3MuZm9yRWFjaCgocHJvcGVydHk6IHN0cmluZykgPT4ge1xuXHRcdFx0XHRcdGNvbnN0IGRhdGFQcm9wZXJ0eSA9IHByb3BlcnR5SW5mb0RpY3RbcHJvcGVydHldLFxuXHRcdFx0XHRcdFx0aGFzVmFsdWVIZWxwID0gdGhpcy5oYXNWYWx1ZUhlbHBQcm9wZXJ0eShlbnRpdHlUeXBlUHJvcGVydGllcywgZGF0YVByb3BlcnR5KSxcblx0XHRcdFx0XHRcdGNvbHVtblRvUHVzaCA9IGdldENvbHVtbkZyb21Qcm9wZXJ0eUluZm9zKGRhdGFQcm9wZXJ0eSwgaGFzVmFsdWVIZWxwLCBwcm9wZXJ0eSk7XG5cdFx0XHRcdFx0aWYgKGNvbHVtblRvUHVzaCkge1xuXHRcdFx0XHRcdFx0Y29sdW1uSW5mb3MucHVzaChjb2x1bW5Ub1B1c2gpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHRcdGlmIChpbmZvUHJvcGVydHkuZXhwb3J0RGF0YVBvaW50VGFyZ2V0VmFsdWUpIHtcblx0XHRcdFx0XHRjb2x1bW5JbmZvcy5wdXNoKHtcblx0XHRcdFx0XHRcdHByb3BlcnR5OiBcInRhcmdldFZhbHVlRnJvbURhdGFQb2ludFwiLFxuXHRcdFx0XHRcdFx0aWdub3JlOiB0cnVlXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0Ly8gTm9uIGV4cG9ydGVkIGNvbHVtbnMgc2hvdWxkIGJlIHBhcnQgb2YgdGhlIGNvbHVtbkluZm9zXG5cdFx0XHR9IGVsc2UgaWYgKGluZm9Qcm9wZXJ0eS5leHBvcnRTZXR0aW5ncyAhPT0gbnVsbCkge1xuXHRcdFx0XHRpZiAoaW5mb1Byb3BlcnR5LnBhdGgpIHtcblx0XHRcdFx0XHRjb2x1bW5JbmZvcy5wdXNoKFxuXHRcdFx0XHRcdFx0UGFzdGVIZWxwZXIuZ2V0SW5mb0ZvckVudGl0eVByb3BlcnR5KFxuXHRcdFx0XHRcdFx0XHRpbmZvUHJvcGVydHkucGF0aCxcblx0XHRcdFx0XHRcdFx0cm93QmluZGluZ1BhdGgsXG5cdFx0XHRcdFx0XHRcdG1ldGFDb250ZXh0LFxuXHRcdFx0XHRcdFx0XHRtZXRhTW9kZWwsXG5cdFx0XHRcdFx0XHRcdHRhYmxlRGVmaW5pdGlvbi5jb250cm9sLmVuYWJsZVBhc3RpbmdPZkNvbXB1dGVkUHJvcGVydGllc1xuXHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Ly8gRW1wdHkgY29sdW1uIC0tPiBpZ25vcmVcblx0XHRcdFx0XHRjb2x1bW5JbmZvcy5wdXNoKHtcblx0XHRcdFx0XHRcdHByb3BlcnR5OiBcInVudXNlZFwiLFxuXHRcdFx0XHRcdFx0dHlwZTogbnVsbCxcblx0XHRcdFx0XHRcdGlnbm9yZTogdHJ1ZVxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0cmV0dXJuIGNvbHVtbkluZm9zO1xuXHR9LFxuXHRnZXRJbmZvRm9yRW50aXR5UHJvcGVydHk6IGdldEluZm9Gb3JFbnRpdHlQcm9wZXJ0eSxcblxuXHQvKipcblx0ICogUmV0dXJucyB3aGV0aGVyIGEgcHJvcGVydHkgaGFzIGEgdmFsdWUgbGlzdCBvciBub3QuXG5cdCAqIEBwYXJhbSBlbnRpdHlUeXBlUHJvcGVydGllcyBUaGUgZW50aXR5IHByb3BlcnRpZXNcblx0ICogQHBhcmFtIGRhdGFQcm9wZXJ0eSBUaGUgcHJvcGVydHkgd2Ugd2FudCB0byBjaGVja1xuXHQgKiBAcmV0dXJucyBCb29sZWFuIGB0cnVlYCBpZiB0aGUgcHJvcGVydHkgaGFzIGEgdmFsdWUgbGlzdC5cblx0ICovXG5cdGhhc1ZhbHVlSGVscFByb3BlcnR5OiBmdW5jdGlvbiAoXG5cdFx0ZW50aXR5VHlwZVByb3BlcnRpZXM6IEFycmF5V2l0aEluZGV4PFByb3BlcnR5LCBcIm5hbWVcIiB8IFwiZnVsbHlRdWFsaWZpZWROYW1lXCI+LFxuXHRcdGRhdGFQcm9wZXJ0eTogRW5oYW5jZWRGRVByb3BlcnR5SW5mb1xuXHQpOiBib29sZWFuIHtcblx0XHRjb25zdCBwcm9wZXJ0eSA9IGVudGl0eVR5cGVQcm9wZXJ0aWVzLmZpbmQoKHApID0+IHAubmFtZSA9PT0gZGF0YVByb3BlcnR5LnBhdGgpO1xuXHRcdGlmIChwcm9wZXJ0eSkge1xuXHRcdFx0cmV0dXJuICEhcHJvcGVydHkuYW5ub3RhdGlvbnM/LkNvbW1vbj8uVmFsdWVMaXN0O1xuXHRcdH1cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH0sXG5cblx0LyoqXG5cdCAqIFRyYW5zZm9ybSBhbiBhcnJheSBvZiBkYXRhIGJ5IHBhcnNpbmcgaXQgaW50byBhbiBhcnJheSBvZiBvYmplY3RzLCBmYWNpbGl0YXRpbmcgdGhlIG1hcHBpbmcgb2YgY29sdW1ucyBhbmQgZGF0YS5cblx0ICogQHBhcmFtIHJhd0RhdGEgVGhlIHRhYmxlIHdoaWNoIGNvbnRhaW5zIHRoZSBjb2x1bW5zIHRvIGJlIGFuYWx5emVkXG5cdCAqIEBwYXJhbSB0YWJsZSBUaGUgdGFibGUgd2hpY2ggcmVjZWl2ZXMgdGhlIGRhdGFcblx0ICogQHBhcmFtIGNvbHVtbnMgQSBsaXN0IG9mIGNvbHVtbnMgdG8gYmUgdXNlZCB0byBtYXAgdGhlIGRhdGEuIElmIHVuZGVmaW5lZCwgYWxsIHRhYmxlIGNvbHVtbnMgYXJlIHVzZWRcblx0ICogQHBhcmFtIGlnbm9yZU5hdmlnYXRpb25Qcm9wZXJ0eSBJZiB0cnVlLCBuYXZpZ2F0aW9uIHByb3BlcnRpZXMgYXJlIGlnbm9yZWRcblx0ICogQHJldHVybnMgQSBjb2xsZWN0aW9uIG9mIG9iamVjdHMgdGhhdCBhc3NvY2lhdGVzIGRhdGEgd2l0aCBjb3JyZXNwb25kaW5nIGNvbHVtbnMuXG5cdCAqL1xuXHRwYXJzZVBhc3RlZERhdGE6IGFzeW5jIGZ1bmN0aW9uIChcblx0XHRyYXdEYXRhOiB1bmtub3duW11bXSxcblx0XHR0YWJsZTogVGFibGUsXG5cdFx0Y29sdW1ucz86IENvbHVtbltdLFxuXHRcdGlnbm9yZU5hdmlnYXRpb25Qcm9wZXJ0eSA9IHRydWVcblx0KTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPltdPiB7XG5cdFx0Y29uc3QgcGFzdGVJbmZvcyA9IHRoaXMuZ2V0Q29sdW1uSW5mbyh0YWJsZSwgY29sdW1ucywgaWdub3JlTmF2aWdhdGlvblByb3BlcnR5KTtcblx0XHRjb25zdCB0YWJsZURlZmluaXRpb24gPSAodGFibGUuZ2V0UGFyZW50KCkgYXMgVGFibGVBUEkpLmdldFRhYmxlRGVmaW5pdGlvbigpO1xuXHRcdC8vIENoZWNrIGlmIHdlIGhhdmUgZGF0YSBmb3IgYXQgbGVhc3QgdGhlIGZpcnN0IGVkaXRhYmxlIGNvbHVtblxuXHRcdGNvbnN0IHBhc3RlZENvbHVtbkNvdW50ID0gcmF3RGF0YS5sZW5ndGggPyByYXdEYXRhWzBdLmxlbmd0aCA6IDA7XG5cdFx0bGV0IGZpcnN0RWRpdGFibGVDb2x1bW5JbmRleCA9IC0xO1xuXHRcdGZvciAobGV0IEkgPSAwOyBJIDwgcGFzdGVJbmZvcy5sZW5ndGggJiYgZmlyc3RFZGl0YWJsZUNvbHVtbkluZGV4IDwgMDsgSSsrKSB7XG5cdFx0XHRpZiAoIXBhc3RlSW5mb3NbSV0uaWdub3JlICYmICFwYXN0ZUluZm9zW0ldLmNvbXB1dGVkKSB7XG5cdFx0XHRcdGZpcnN0RWRpdGFibGVDb2x1bW5JbmRleCA9IEk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKHRhYmxlRGVmaW5pdGlvbi5jb250cm9sLmVuYWJsZVBhc3RpbmdPZkNvbXB1dGVkUHJvcGVydGllcykge1xuXHRcdFx0Y29uc3QgY29tcHV0ZWRQcm9wZXJ0aWVzID0gcGFzdGVJbmZvcy5maWx0ZXIoZnVuY3Rpb24gKGluZm8pIHtcblx0XHRcdFx0cmV0dXJuIGluZm8uY29tcHV0ZWQ7XG5cdFx0XHR9KTtcblx0XHRcdC8vZm9yIGVhY2ggY29tcHV0ZWQgcHJvcGVydHksIGNoZWNrIGlmIHRoZSBjb2x1bW4gaXMgZW1wdHkgLiBJZiB5ZXMsIGlnbm9yZSBpdFxuXHRcdFx0Y29tcHV0ZWRQcm9wZXJ0aWVzLmZvckVhY2goZnVuY3Rpb24gKGNvbXB1dGVkUHJvcGVydHkpIHtcblx0XHRcdFx0Y29uc3QgY29sdW1uUG9zaXRpb24gPSBwYXN0ZUluZm9zLmluZGV4T2YoY29tcHV0ZWRQcm9wZXJ0eSk7XG5cdFx0XHRcdGNvbnN0IGlzQ29sRW1wdHkgPSByYXdEYXRhLmV2ZXJ5KChyb3cpID0+IHJvd1tjb2x1bW5Qb3NpdGlvbl0gPT09IFwiXCIpO1xuXHRcdFx0XHRpZiAoaXNDb2xFbXB0eSkge1xuXHRcdFx0XHRcdGNvbXB1dGVkUHJvcGVydHkuaWdub3JlID0gdHJ1ZTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXG5cdFx0Y29uc3QgcGFyc2VSZXN1bHQgPSBhd2FpdCAoZmlyc3RFZGl0YWJsZUNvbHVtbkluZGV4IDwgMCB8fCBmaXJzdEVkaXRhYmxlQ29sdW1uSW5kZXggPiBwYXN0ZWRDb2x1bW5Db3VudCAtIDFcblx0XHRcdD8geyBwYXJzZWREYXRhOiBbXSwgZXJyb3JzOiBudWxsIH0gLy8gV2UgZG9uJ3QgaGF2ZSBkYXRhIGZvciBhbiBlZGl0YWJsZSBjb2x1bW4gLS0+IHJldHVybiBlbXB0eSBwYXJzZWQgZGF0YVxuXHRcdFx0OiBDb3JlUGFzdGVIZWxwZXIucGFyc2UocmF3RGF0YSwgcGFzdGVJbmZvcykpO1xuXHRcdGlmIChwYXJzZVJlc3VsdC5lcnJvcnMpIHtcblx0XHRcdGNvbnN0IGVycm9yTWVzc2FnZXMgPSBwYXJzZVJlc3VsdC5lcnJvcnMubWFwKGZ1bmN0aW9uIChvRWxlbWVudCkge1xuXHRcdFx0XHRyZXR1cm4gb0VsZW1lbnQubWVzc2FnZTtcblx0XHRcdH0pO1xuXHRcdFx0dGhpcy5kaXNwbGF5RXJyb3JNZXNzYWdlcyhlcnJvck1lc3NhZ2VzKTtcblx0XHRcdHJldHVybiBbXTsgLy8gRXJyb3JzIC0tPiByZXR1cm4gbm90aGluZ1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gcGFyc2VSZXN1bHQucGFyc2VkRGF0YTtcblx0XHR9XG5cdH0sXG5cblx0LyoqXG5cdCAqIFVwZGF0ZSBhbiBhcnJheSBvZiBjb250ZXh0cy5cblx0ICogQHBhcmFtIHRhYmxlIFRoZSB0YWJsZSB3aGljaCBjb250YWlucyB0aGUgY29udGV4dHMgdG8gYmUgdXBkYXRlZFxuXHQgKiBAcGFyYW0gY29udGV4dHMgQXJyYXkgb2YgY29udGV4dHMgdG8gYmUgdXBkYXRlZFxuXHQgKiBAcGFyYW0gZGF0YSBBcnJheSBvZiBvYmplY3QgY29udGFpbmluZyB0aGUgZGF0YSB0byBiZSB1c2VkIHRvIHVwZGF0ZSB0aGUgY29udGV4dHNcblx0ICogQHJldHVybnMgUHJvbWlzZVxuXHQgKi9cblx0X3VwZGF0ZUNvbnRleHRzOiBhc3luYyBmdW5jdGlvbiAoXG5cdFx0dGFibGU6IFRhYmxlLFxuXHRcdGNvbnRleHRzOiAoT0RhdGFWNENvbnRleHQgfCB1bmRlZmluZWQpW10sXG5cdFx0ZGF0YTogUmVjb3JkPHN0cmluZywgdW5rbm93bj5bXVxuXHQpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRsZXQgaW5kZXggPSAwO1xuXHRcdGNvbnN0IHNldFByb3BlcnR5UHJvbWlzZXMgPSBbXTtcblx0XHRmb3IgKGNvbnN0IHJvdyBvZiBkYXRhKSB7XG5cdFx0XHRjb25zdCByb3dDb250ZXh0ID0gY29udGV4dHNbaW5kZXgrK107XG5cdFx0XHRpZiAocm93Q29udGV4dCkge1xuXHRcdFx0XHRmb3IgKGNvbnN0IGRhdGFQcm9wZXJ0eSBpbiByb3cpIHtcblx0XHRcdFx0XHRpZiAoKHRhYmxlLmdldFBhcmVudCgpIGFzIFRhYmxlQVBJKS5nZXRQcm9wZXJ0eUVkaXRNb2RlKGRhdGFQcm9wZXJ0eSwgcm93Q29udGV4dCkgPT09IEZpZWxkRWRpdE1vZGUuRWRpdGFibGUpIHtcblx0XHRcdFx0XHRcdHNldFByb3BlcnR5UHJvbWlzZXMucHVzaChyb3dDb250ZXh0LnNldFByb3BlcnR5KGRhdGFQcm9wZXJ0eSwgcm93W2RhdGFQcm9wZXJ0eV0pKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0TG9nLndhcm5pbmcoYFByb3BlcnR5ICR7ZGF0YVByb3BlcnR5fSBpcyBub3QgZWRpdGFibGUgZm9yIHJvdyAke3Jvd0NvbnRleHQuZ2V0SW5kZXgoKX1gKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0YXdhaXQgUHJvbWlzZS5hbGxTZXR0bGVkKHNldFByb3BlcnR5UHJvbWlzZXMpO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiAgR2V0IGluZm9ybWF0aW9uIGFib3V0IHRoZSBwYXN0ZSBvcGVyYXRpb24gb24gUmVzcG9uc2l2ZVRhYmxlLlxuXHQgKiBAcGFyYW0gcmF3RGF0YVxuXHQgKiBAcGFyYW0gY2VsbFNlbGVjdGlvblxuXHQgKiBAcGFyYW0gY2VsbFNlbGVjdGlvbi5jb2x1bW5zXG5cdCAqIEBwYXJhbSBjZWxsU2VsZWN0aW9uLnJvd3Ncblx0ICogQHBhcmFtIHBvc0ZpcnN0U2VsZWN0ZWRSb3dcblx0ICogQHBhcmFtIHRhYmxlXG5cdCAqIEByZXR1cm5zIE9iamV0IGNvbnRhaW5pbmcgSW5mb3JtYXRpb24gYWJvdXQgdGhlIHBhc3Rpbmcgb3BlcmF0aW9uXG5cdCAqL1xuXHRnZXRQYXN0ZUluZm9ybWF0aW9uRm9yUmVwb25zaXZlVGFibGU6IGZ1bmN0aW9uIChcblx0XHRyYXdEYXRhOiBzdHJpbmdbXVtdLFxuXHRcdGNlbGxTZWxlY3Rpb246IHsgY29sdW1uczogQ29sdW1uW107IHJvd3M6IE9EYXRhVjRDb250ZXh0W10gfSxcblx0XHRwb3NGaXJzdFNlbGVjdGVkUm93OiBudW1iZXIsXG5cdFx0dGFibGU6IFRhYmxlXG5cdCk6IFBhc3RlSW5mb3JtYXRpb24ge1xuXHRcdGxldCBudW1iZXJPZk5ld0NyZWF0aW9uUm93cyA9IDA7XG5cdFx0Y29uc3QgcG9zRmlyc3RJbmxpbmVDcmVhdGlvblJvd0luVGFibGUgPSB0YWJsZVxuXHRcdFx0LmdldFJvd0JpbmRpbmcoKVxuXHRcdFx0LmdldEN1cnJlbnRDb250ZXh0cygpXG5cdFx0XHQuZmluZEluZGV4KChjb250ZXh0KSA9PiBjb250ZXh0LmlzVHJhbnNpZW50KCkpO1xuXHRcdGNvbnN0IHJvd3MgPSBjZWxsU2VsZWN0aW9uLnJvd3M7XG5cdFx0bGV0IHVwZGF0ZWRSb3dDb3VudCA9IDA7XG5cdFx0Y29uc3QgY29sdW1ucyA9XG5cdFx0XHRjZWxsU2VsZWN0aW9uLmNvbHVtbnMubGVuZ3RoID4gMVxuXHRcdFx0XHQ/IGNlbGxTZWxlY3Rpb24uY29sdW1uc1xuXHRcdFx0XHQ6IHRhYmxlLmdldENvbHVtbnMoKS5zbGljZSh0YWJsZS5nZXRDb2x1bW5zKCkuaW5kZXhPZihjZWxsU2VsZWN0aW9uLmNvbHVtbnNbMF0pKTtcblxuXHRcdC8vIG9ubHkgb25lIGNlbGwgaXMgc2VsZWN0ZWRcblx0XHRpZiAoY2VsbFNlbGVjdGlvbi5jb2x1bW5zLmxlbmd0aCA9PT0gMSAmJiBjZWxsU2VsZWN0aW9uLnJvd3MubGVuZ3RoID09PSAxKSB7XG5cdFx0XHQvLyBjaGVjayBpZiB0aGUgaW5saW5lIGNyZWF0aW9uIHJvdyBpcyBpbiB0aGUgdGFyZ2V0ZWQgcmFuZ2Vcblx0XHRcdGlmIChcblx0XHRcdFx0cG9zRmlyc3RTZWxlY3RlZFJvdyA8PSBwb3NGaXJzdElubGluZUNyZWF0aW9uUm93SW5UYWJsZSAmJlxuXHRcdFx0XHRwb3NGaXJzdFNlbGVjdGVkUm93ICsgcmF3RGF0YS5sZW5ndGggPiBwb3NGaXJzdElubGluZUNyZWF0aW9uUm93SW5UYWJsZVxuXHRcdFx0KSB7XG5cdFx0XHRcdG51bWJlck9mTmV3Q3JlYXRpb25Sb3dzID0gcmF3RGF0YS5sZW5ndGggLSAocG9zRmlyc3RJbmxpbmVDcmVhdGlvblJvd0luVGFibGUgLSBwb3NGaXJzdFNlbGVjdGVkUm93KSAtIDE7XG5cdFx0XHRcdHVwZGF0ZWRSb3dDb3VudCA9IHJhd0RhdGEubGVuZ3RoO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Ly8gdGhlIGlubGluZSBjcmVhdGlvbiByb3cgaXMgbm90IGluIHRoZSB0YXJnZXRlZCByYW5nZVxuXHRcdFx0XHRudW1iZXJPZk5ld0NyZWF0aW9uUm93cyA9IDA7XG5cdFx0XHRcdHVwZGF0ZWRSb3dDb3VudCA9IHJhd0RhdGEubGVuZ3RoO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBtdWx0aXBsZSBjZWxscyBhcmUgc2VsZWN0ZWRcblx0XHRcdGNvbnN0IGxhc3RJbmxpbmVDcmVhdGlvblJvd0luU2VsZWN0aW9uID0gcm93cy5maWx0ZXIoKGNvbnRleHQpID0+IGNvbnRleHQuaXNUcmFuc2llbnQoKSk/LnBvcCgpO1xuXHRcdFx0Y29uc3QgcG9zTGFzdElubGluZUNyZWF0aW9uUm93SW5TZWxlY3Rpb24gPSBsYXN0SW5saW5lQ3JlYXRpb25Sb3dJblNlbGVjdGlvblxuXHRcdFx0XHQ/IHJvd3MuaW5kZXhPZihsYXN0SW5saW5lQ3JlYXRpb25Sb3dJblNlbGVjdGlvbilcblx0XHRcdFx0OiAtMTtcblx0XHRcdHVwZGF0ZWRSb3dDb3VudCA9IE1hdGgubWluKHJhd0RhdGEubGVuZ3RoLCBjZWxsU2VsZWN0aW9uLnJvd3MubGVuZ3RoKTtcblx0XHRcdC8vIGNoZWNrIGlmIHRoZSBpbmxpbmUgY3JlYXRpb24gcm93IGlzIGluIHRoZSBzZWxlY3RlZCByYW5nZVxuXHRcdFx0aWYgKHBvc0xhc3RJbmxpbmVDcmVhdGlvblJvd0luU2VsZWN0aW9uID4gLTEpIHtcblx0XHRcdFx0dXBkYXRlZFJvd0NvdW50ID0gcG9zTGFzdElubGluZUNyZWF0aW9uUm93SW5TZWxlY3Rpb24gPT09IGNlbGxTZWxlY3Rpb24ucm93cy5sZW5ndGggLSAxID8gcmF3RGF0YS5sZW5ndGggOiB1cGRhdGVkUm93Q291bnQ7XG5cdFx0XHRcdG51bWJlck9mTmV3Q3JlYXRpb25Sb3dzID1cblx0XHRcdFx0XHRwb3NMYXN0SW5saW5lQ3JlYXRpb25Sb3dJblNlbGVjdGlvbiA9PT0gY2VsbFNlbGVjdGlvbi5yb3dzLmxlbmd0aCAtIDFcblx0XHRcdFx0XHRcdD8gcmF3RGF0YS5sZW5ndGggLSBwb3NMYXN0SW5saW5lQ3JlYXRpb25Sb3dJblNlbGVjdGlvbiAtIDFcblx0XHRcdFx0XHRcdDogMDtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHsgcm93cywgY29sdW1ucywgdXBkYXRlZFJvd0NvdW50LCBudW1iZXJPZk5ld0NyZWF0aW9uUm93cyB9O1xuXHR9LFxuXG5cdC8qKlxuXHQgKiAgR2V0IGluZm9ybWF0aW9uIGFib3V0IHRoZSBwYXN0ZSBvcGVyYXRpb24gb24gR3JpZFRhYmxlLlxuXHQgKiBAcGFyYW0gcmF3RGF0YVxuXHQgKiBAcGFyYW0gY2VsbFNlbGVjdGlvblxuXHQgKiBAcGFyYW0gY2VsbFNlbGVjdGlvbi5jb2x1bW5zXG5cdCAqIEBwYXJhbSBjZWxsU2VsZWN0aW9uLnJvd3Ncblx0ICogQHBhcmFtIHBvc0ZpcnN0U2VsZWN0ZWRSb3dcblx0ICogQHBhcmFtIHRhYmxlXG5cdCAqIEByZXR1cm5zIE9iamV0IGNvbnRhaW5pbmcgSW5mb3JtYXRpb24gYWJvdXQgdGhlIHBhc3Rpbmcgb3BlcmF0aW9uXG5cdCAqL1xuXHRnZXRQYXN0ZUluZm9ybWF0aW9uRm9yR3JpZFRhYmxlOiBmdW5jdGlvbiAoXG5cdFx0cmF3RGF0YTogc3RyaW5nW11bXSxcblx0XHRjZWxsU2VsZWN0aW9uOiB7IGNvbHVtbnM6IENvbHVtbltdOyByb3dzOiBPRGF0YVY0Q29udGV4dFtdIH0sXG5cdFx0cG9zRmlyc3RTZWxlY3RlZFJvdzogbnVtYmVyLFxuXHRcdHRhYmxlOiBUYWJsZVxuXHQpOiBQYXN0ZUluZm9ybWF0aW9uIHtcblx0XHRsZXQgbnVtYmVyT2ZOZXdDcmVhdGlvblJvd3MgPSAwO1xuXHRcdGNvbnN0IHJvd3MgPSBjZWxsU2VsZWN0aW9uLnJvd3M7XG5cdFx0bGV0IHVwZGF0ZWRSb3dDb3VudCA9IDA7XG5cdFx0Y29uc3QgdGFibGVSb3djQ291bnQgPSB0YWJsZS5nZXRSb3dCaW5kaW5nKCkuZ2V0TGVuZ3RoKCk7XG5cdFx0bGV0IGNvbHVtbnMgPVxuXHRcdFx0Y2VsbFNlbGVjdGlvbi5jb2x1bW5zLmxlbmd0aCA+IDFcblx0XHRcdFx0PyBjZWxsU2VsZWN0aW9uLmNvbHVtbnNcblx0XHRcdFx0OiB0YWJsZS5nZXRDb2x1bW5zKCkuc2xpY2UodGFibGUuZ2V0Q29sdW1ucygpLmluZGV4T2YoY2VsbFNlbGVjdGlvbi5jb2x1bW5zWzBdKSk7XG5cdFx0aWYgKGNlbGxTZWxlY3Rpb24uY29sdW1ucy5sZW5ndGggPT09IDEgJiYgY2VsbFNlbGVjdGlvbi5yb3dzLmxlbmd0aCA9PT0gMSkge1xuXHRcdFx0bnVtYmVyT2ZOZXdDcmVhdGlvblJvd3MgPVxuXHRcdFx0XHRwb3NGaXJzdFNlbGVjdGVkUm93ICsgcmF3RGF0YS5sZW5ndGggPiB0YWJsZVJvd2NDb3VudCA/IHBvc0ZpcnN0U2VsZWN0ZWRSb3cgKyByYXdEYXRhLmxlbmd0aCAtIHRhYmxlUm93Y0NvdW50IDogMDtcblx0XHRcdGNvbHVtbnMgPSB0YWJsZS5nZXRDb2x1bW5zKCkuc2xpY2UodGFibGUuZ2V0Q29sdW1ucygpLmluZGV4T2YoY2VsbFNlbGVjdGlvbi5jb2x1bW5zWzBdKSk7XG5cdFx0XHR1cGRhdGVkUm93Q291bnQgPSByYXdEYXRhLmxlbmd0aDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gbXVsdGlwbGUgY2VsbHMgYXJlIHNlbGVjdGVkXG5cdFx0XHRudW1iZXJPZk5ld0NyZWF0aW9uUm93cyA9XG5cdFx0XHRcdHBvc0ZpcnN0U2VsZWN0ZWRSb3cgKyByb3dzLmxlbmd0aCA+PSB0YWJsZVJvd2NDb3VudCA/IHBvc0ZpcnN0U2VsZWN0ZWRSb3cgKyByYXdEYXRhLmxlbmd0aCAtIHRhYmxlUm93Y0NvdW50IDogMDtcblx0XHRcdHVwZGF0ZWRSb3dDb3VudCA9IG51bWJlck9mTmV3Q3JlYXRpb25Sb3dzID09PSAwID8gTWF0aC5taW4ocmF3RGF0YS5sZW5ndGgsIGNlbGxTZWxlY3Rpb24ucm93cy5sZW5ndGgpIDogcmF3RGF0YS5sZW5ndGg7XG5cdFx0fVxuXHRcdHJldHVybiB7IHJvd3MsIGNvbHVtbnMsIHVwZGF0ZWRSb3dDb3VudCwgbnVtYmVyT2ZOZXdDcmVhdGlvblJvd3MgfTtcblx0fSxcblxuXHQvKipcblx0ICogIEdldCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgcGFzdGUgb3BlcmF0aW9uLlxuXHQgKiBAcGFyYW0gcmF3RGF0YVxuXHQgKiBAcGFyYW0gY2VsbFNlbGVjdGlvblxuXHQgKiBAcGFyYW0gY2VsbFNlbGVjdGlvbi5jb2x1bW5zXG5cdCAqIEBwYXJhbSBjZWxsU2VsZWN0aW9uLnJvd3Ncblx0ICogQHBhcmFtIHBvc0ZpcnN0U2VsZWN0ZWRSb3dcblx0ICogQHBhcmFtIHRhYmxlXG5cdCAqIEByZXR1cm5zIE9iamV0IGNvbnRhaW5pbmcgSW5mb3JtYXRpb24gYWJvdXQgdGhlIHBhc3Rpbmcgb3BlcmF0aW9uXG5cdCAqL1xuXHRnZXRQYXN0ZUluZm9ybWF0aW9uOiBmdW5jdGlvbiAoXG5cdFx0cmF3RGF0YTogc3RyaW5nW11bXSxcblx0XHRjZWxsU2VsZWN0aW9uOiB7IGNvbHVtbnM6IENvbHVtbltdOyByb3dzOiBPRGF0YVY0Q29udGV4dFtdIH0sXG5cdFx0cG9zRmlyc3RTZWxlY3RlZFJvdzogbnVtYmVyLFxuXHRcdHRhYmxlOiBUYWJsZVxuXHQpOiBQYXN0ZUluZm9ybWF0aW9uIHwgbnVsbCB7XG5cdFx0bGV0IHBhc3RlSW5mb3JtYXRpb246IFBhc3RlSW5mb3JtYXRpb24gfCBudWxsID0gbnVsbDtcblxuXHRcdHN3aXRjaCAodGFibGUuZGF0YShcInRhYmxlVHlwZVwiKSkge1xuXHRcdFx0Y2FzZSBcIkdyaWRUYWJsZVwiOlxuXHRcdFx0XHRwYXN0ZUluZm9ybWF0aW9uID0gdGhpcy5nZXRQYXN0ZUluZm9ybWF0aW9uRm9yR3JpZFRhYmxlKHJhd0RhdGEsIGNlbGxTZWxlY3Rpb24sIHBvc0ZpcnN0U2VsZWN0ZWRSb3csIHRhYmxlKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwiUmVzcG9uc2l2ZVRhYmxlXCI6XG5cdFx0XHRcdHBhc3RlSW5mb3JtYXRpb24gPSB0aGlzLmdldFBhc3RlSW5mb3JtYXRpb25Gb3JSZXBvbnNpdmVUYWJsZShyYXdEYXRhLCBjZWxsU2VsZWN0aW9uLCBwb3NGaXJzdFNlbGVjdGVkUm93LCB0YWJsZSk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0TG9nLndhcm5pbmcoYFBhc3RlIG9wZXJhdGlvbiBpcyBub3Qgc3VwcG9ydGVkIGZvciB0YWJsZSB0eXBlICR7dGFibGUuZGF0YShcInRhYmxlVHlwZVwiKX1gKTtcblx0XHR9XG5cblx0XHRpZiAoXG5cdFx0XHRwYXN0ZUluZm9ybWF0aW9uICYmXG5cdFx0XHRwYXN0ZUluZm9ybWF0aW9uPy5udW1iZXJPZk5ld0NyZWF0aW9uUm93cyA+IDAgJiZcblx0XHRcdCh0YWJsZS5nZXRQYXJlbnQoKSBhcyBUYWJsZUFQSSAmIHsgZ2V0Q3JlYXRpb25Nb2RlOiBGdW5jdGlvbiB9KS5nZXRDcmVhdGlvbk1vZGUoKS5nZXROYW1lKCkgIT09IENyZWF0aW9uTW9kZS5JbmxpbmVDcmVhdGlvblJvd3Ncblx0XHQpIHtcblx0XHRcdHBhc3RlSW5mb3JtYXRpb24udXBkYXRlZFJvd0NvdW50IC09IHBhc3RlSW5mb3JtYXRpb24ubnVtYmVyT2ZOZXdDcmVhdGlvblJvd3M7XG5cdFx0XHRwYXN0ZUluZm9ybWF0aW9uLm51bWJlck9mTmV3Q3JlYXRpb25Sb3dzID0gMDtcblx0XHR9XG5cblx0XHRyZXR1cm4gcGFzdGVJbmZvcm1hdGlvbjtcblx0fSxcblxuXHQvKipcblx0ICogUGFzdGUgZGF0YSBpbnRvIGEgdGFibGUgdXNpbmcgYSBzZWxlY3Rpb24gb2YgY29sdW1uIGFuZCByb3dzLlxuXHQgKiBAcGFyYW0gcmF3RGF0YSBUaGUgZGF0YSB0byBiZSBwYXN0ZWQgaW50byB0aGUgdGFibGVcblx0ICogQHBhcmFtIGNlbGxTZWxlY3Rpb24gVGhlIGNvbHVtbnMgYW5kIHRoZSByb3dzIHRvIGJlIHVwZGF0ZWRcblx0ICogQHBhcmFtIGNlbGxTZWxlY3Rpb24uY29sdW1ucyBUaGUgY29sdW1ucyB0byBiZSB1cGRhdGVkXG5cdCAqIEBwYXJhbSBjZWxsU2VsZWN0aW9uLnJvd3MgVGhlIHJvd3MgdG8gYmUgdXBkYXRlZFxuXHQgKiBAcGFyYW0gdGFibGUgVGhlIHRhYmxlXG5cdCAqIEByZXR1cm5zIE9iamVjdCBjb250YWluaW5nIGluZm9ybWF0aW9uIGFib3V0IHRoZSBwYXN0ZVxuXHQgKi9cblx0cGFzdGVSYW5nZURhdGE6IGFzeW5jIGZ1bmN0aW9uIChcblx0XHRyYXdEYXRhOiBzdHJpbmdbXVtdLFxuXHRcdGNlbGxTZWxlY3Rpb246IHsgY29sdW1uczogQ29sdW1uW107IHJvd3M6IE9EYXRhVjRDb250ZXh0W10gfSxcblx0XHR0YWJsZTogVGFibGVcblx0KTogUHJvbWlzZTxcblx0XHR8IHtcblx0XHRcdFx0dXBkYXRlZFJvd0NvdW50OiBudW1iZXI7XG5cdFx0XHRcdHVwZGF0ZWRDb2xDb3VudDogbnVtYmVyO1xuXHRcdFx0XHRudW1iZXJPZk5ld0NyZWF0aW9uUm93czogbnVtYmVyO1xuXHRcdFx0XHRwb3NGaXJzdElubGluZUNyZWF0aW9uUm93OiBudW1iZXIgfCB1bmRlZmluZWQ7XG5cdFx0ICB9XG5cdFx0fCB1bmRlZmluZWRcblx0PiB7XG5cdFx0Y29uc3QgcG9zRmlyc3RTZWxlY3RlZFJvdyA9IGNlbGxTZWxlY3Rpb24ucm93c1swXS5nZXRJbmRleCgpITtcblxuXHRcdGNvbnN0IHBhc3RlSW5mbyA9IHRoaXMuZ2V0UGFzdGVJbmZvcm1hdGlvbihyYXdEYXRhLCBjZWxsU2VsZWN0aW9uLCBwb3NGaXJzdFNlbGVjdGVkUm93LCB0YWJsZSk7XG5cdFx0aWYgKCFwYXN0ZUluZm8pIHJldHVybjtcblxuXHRcdGNvbnN0IHBhcnNlZERhdGEgPSBhd2FpdCB0aGlzLnBhcnNlUGFzdGVkRGF0YShyYXdEYXRhLCB0YWJsZSwgcGFzdGVJbmZvLmNvbHVtbnMsIGZhbHNlKTtcblx0XHRpZiAocGFyc2VkRGF0YS5sZW5ndGggPiAwKSB7XG5cdFx0XHRpZiAocGFzdGVJbmZvLm51bWJlck9mTmV3Q3JlYXRpb25Sb3dzID4gMCkge1xuXHRcdFx0XHRhd2FpdCAodGFibGUuZ2V0UGFyZW50KCkgYXMgVGFibGVBUEkpLmNyZWF0ZUVtcHR5Um93cyhcblx0XHRcdFx0XHR0YWJsZS5nZXRSb3dCaW5kaW5nKCksXG5cdFx0XHRcdFx0dGFibGUsXG5cdFx0XHRcdFx0ZmFsc2UsXG5cdFx0XHRcdFx0cGFzdGVJbmZvLm51bWJlck9mTmV3Q3JlYXRpb25Sb3dzLFxuXHRcdFx0XHRcdHRydWVcblx0XHRcdFx0KTtcblx0XHRcdH1cblxuXHRcdFx0Ly9sb2FkIG1pc3Npbmcgcm93cyBpZiBuZWVkZWQgaW5jbHVkaW5nIHRoZSBuZXdseSBjcmVhdGVkIHJvd3Ncblx0XHRcdHBhc3RlSW5mby5yb3dzID0gYXdhaXQgdGFibGUuZ2V0Um93QmluZGluZygpLnJlcXVlc3RDb250ZXh0cyhwb3NGaXJzdFNlbGVjdGVkUm93LCBwYXN0ZUluZm8udXBkYXRlZFJvd0NvdW50KTtcblx0XHRcdGF3YWl0IHRoaXMuX3VwZGF0ZUNvbnRleHRzKHRhYmxlLCBwYXN0ZUluZm8ucm93cywgcGFyc2VkRGF0YSk7XG5cblx0XHRcdC8vIGZvY3VzaW5nIG9uIHRoZSBmaXJzdCBhdmFpbGFibGUgY3JlYXRpb24gcm93XG5cdFx0XHRjb25zdCBwb3NGaXJzdElubGluZUNyZWF0aW9uUm93ID0gcGFzdGVJbmZvLnJvd3MuZmluZCgoY29udGV4dCkgPT4gY29udGV4dC5pc1RyYW5zaWVudCgpKT8uZ2V0SW5kZXgoKTtcblx0XHRcdGlmIChwb3NGaXJzdElubGluZUNyZWF0aW9uUm93KSB7XG5cdFx0XHRcdHRhYmxlLmZvY3VzUm93KHBvc0ZpcnN0SW5saW5lQ3JlYXRpb25Sb3cpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0dXBkYXRlZFJvd0NvdW50OiBwYXN0ZUluZm8udXBkYXRlZFJvd0NvdW50LFxuXHRcdFx0XHR1cGRhdGVkQ29sQ291bnQ6IE9iamVjdC5rZXlzKHBhcnNlZERhdGFbMF0pLmxlbmd0aCxcblx0XHRcdFx0bnVtYmVyT2ZOZXdDcmVhdGlvblJvd3M6IHBhc3RlSW5mby5udW1iZXJPZk5ld0NyZWF0aW9uUm93cyA8IDAgPyAwIDogcGFzdGVJbmZvLm51bWJlck9mTmV3Q3JlYXRpb25Sb3dzLFxuXHRcdFx0XHRwb3NGaXJzdElubGluZUNyZWF0aW9uUm93XG5cdFx0XHR9O1xuXHRcdH1cblx0fSxcblx0cGFzdGVEYXRhOiBhc3luYyBmdW5jdGlvbiAocmF3RGF0YTogc3RyaW5nW11bXSwgdGFibGU6IFRhYmxlLCBjb250cm9sbGVyOiBQYWdlQ29udHJvbGxlcik6IFByb21pc2U8Q29udGV4dFtdIHwgdW5kZWZpbmVkPiB7XG5cdFx0Y29uc3QgZWRpdEZsb3cgPSBjb250cm9sbGVyLmVkaXRGbG93O1xuXHRcdGNvbnN0IHRhYmxlRGVmaW5pdGlvbiA9ICh0YWJsZS5nZXRQYXJlbnQoKSBhcyBUYWJsZUFQSSkuZ2V0VGFibGVEZWZpbml0aW9uKCk7XG5cdFx0bGV0IGFEYXRhOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPltdID0gW107XG5cdFx0cmV0dXJuIHRoaXMucGFyc2VQYXN0ZWREYXRhKHJhd0RhdGEsIHRhYmxlKVxuXHRcdFx0LnRoZW4oYXN5bmMgKGFQYXJzZWREYXRhOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPltdKSA9PiB7XG5cdFx0XHRcdGFEYXRhID0gYVBhcnNlZERhdGEgfHwgW107XG5cdFx0XHRcdHJldHVybiBQcm9taXNlLmFsbChcblx0XHRcdFx0XHRhRGF0YS5tYXAoYXN5bmMgKG1EYXRhKSA9PlxuXHRcdFx0XHRcdFx0ZWRpdEZsb3cudmFsaWRhdGVEb2N1bWVudCh0YWJsZS5nZXRCaW5kaW5nQ29udGV4dCgpIGFzIE9EYXRhVjRDb250ZXh0LCB7XG5cdFx0XHRcdFx0XHRcdGRhdGE6IG1EYXRhLFxuXHRcdFx0XHRcdFx0XHRjdXN0b21WYWxpZGF0aW9uRnVuY3Rpb246IHRhYmxlRGVmaW5pdGlvbj8uY29udHJvbD8uY3VzdG9tVmFsaWRhdGlvbkZ1bmN0aW9uXG5cdFx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdClcblx0XHRcdFx0KTtcblx0XHRcdH0pXG5cdFx0XHQudGhlbigoYVZhbGlkYXRpb25NZXNzYWdlcykgPT4ge1xuXHRcdFx0XHRjb25zdCBhRXJyb3JNZXNzYWdlczogeyBtZXNzYWdlczogeyBtZXNzYWdlVGFyZ2V0Pzogc3RyaW5nOyBtZXNzYWdlVGV4dDogc3RyaW5nIH1bXTsgcm93OiBudW1iZXIgfVtdID1cblx0XHRcdFx0XHRhVmFsaWRhdGlvbk1lc3NhZ2VzLnJlZHVjZShcblx0XHRcdFx0XHRcdGZ1bmN0aW9uIChhTWVzc2FnZXMsIGFDdXN0b21NZXNzYWdlcywgaW5kZXgpIHtcblx0XHRcdFx0XHRcdFx0aWYgKGFDdXN0b21NZXNzYWdlcy5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdFx0XHRcdFx0YU1lc3NhZ2VzLnB1c2goeyBtZXNzYWdlczogYUN1c3RvbU1lc3NhZ2VzLCByb3c6IGluZGV4ICsgMSB9KTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRyZXR1cm4gYU1lc3NhZ2VzO1xuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdFtdIGFzIHsgbWVzc2FnZXM6IHsgbWVzc2FnZVRhcmdldD86IHN0cmluZzsgbWVzc2FnZVRleHQ6IHN0cmluZyB9W107IHJvdzogbnVtYmVyIH1bXVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdGlmIChhRXJyb3JNZXNzYWdlcy5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdFx0Y29uc3QgYVJvd01lc3NhZ2VzID0gYUVycm9yTWVzc2FnZXMubWFwKChtRXJyb3IpID0+IHRoaXMuZm9ybWF0Q3VzdG9tTWVzc2FnZShtRXJyb3IubWVzc2FnZXMsIG1FcnJvci5yb3cpKTtcblx0XHRcdFx0XHR0aGlzLmRpc3BsYXlFcnJvck1lc3NhZ2VzKGFSb3dNZXNzYWdlcyk7XG5cdFx0XHRcdFx0cmV0dXJuIFtdO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBhRGF0YTtcblx0XHRcdH0pXG5cdFx0XHQudGhlbihhc3luYyAoYVZhbGlkYXRlZERhdGEpOiBQcm9taXNlPENvbnRleHRbXSB8IHVuZGVmaW5lZD4gPT4ge1xuXHRcdFx0XHQvLyByZW1vdmUgdGhlIGxhc3QgdHJhbnNpZW50IGNvbnRleHQgaWYgaXQgZXhpc3RzXG5cdFx0XHRcdGNvbnN0IHRyYW5zaWVudENvbnRleHRzID0gdGFibGVcblx0XHRcdFx0XHQuZ2V0Um93QmluZGluZygpXG5cdFx0XHRcdFx0LmdldEN1cnJlbnRDb250ZXh0cygpXG5cdFx0XHRcdFx0LmZpbHRlcigoY29udGV4dCkgPT4gY29udGV4dC5pc1RyYW5zaWVudCgpKTtcblx0XHRcdFx0Y29uc3QgbGFzdFRyYW5zaWVudENvbnRleHQgPSB0cmFuc2llbnRDb250ZXh0cy5wb3AoKTtcblx0XHRcdFx0Ly9jaGVjayBpZiB0aGUgbGFzdCB0cmFuc2llbnQgY29udGV4dCBoYXMgYW4gZXJyb3IgbWVzc2FnZVxuXHRcdFx0XHRjb25zdCBsYXN0VHJhbnNpZW50Q29udGV4dEhhc0Vycm9yTWVzc2FnZSA9ICEhTWVzc2FnaW5nLmdldE1lc3NhZ2VNb2RlbCgpXG5cdFx0XHRcdFx0LmdldERhdGEoKVxuXHRcdFx0XHRcdC5maW5kKChtZXNzYWdlOiBNZXNzYWdlKSA9PiBsYXN0VHJhbnNpZW50Q29udGV4dCAmJiBtZXNzYWdlLmdldFRhcmdldHMoKVswXS5pbmNsdWRlcyhsYXN0VHJhbnNpZW50Q29udGV4dC5nZXRQYXRoKCkpKTtcblx0XHRcdFx0Y29uc3QgbmV3Q29udGV4dHMgPVxuXHRcdFx0XHRcdGFWYWxpZGF0ZWREYXRhLmxlbmd0aCA+IDBcblx0XHRcdFx0XHRcdD8gYXdhaXQgZWRpdEZsb3cuY3JlYXRlTXVsdGlwbGVEb2N1bWVudHModGFibGUuZ2V0Um93QmluZGluZygpLCBhVmFsaWRhdGVkRGF0YSwge1xuXHRcdFx0XHRcdFx0XHRcdGNyZWF0ZUF0RW5kOiB0YWJsZURlZmluaXRpb24/LmNvbnRyb2w/LmNyZWF0ZUF0RW5kLFxuXHRcdFx0XHRcdFx0XHRcdGlzRnJvbUNvcHlQYXN0ZTogdHJ1ZSxcblx0XHRcdFx0XHRcdFx0XHRiZWZvcmVDcmVhdGVDYWxsQmFjazogY29udHJvbGxlci5lZGl0Rmxvdy5vbkJlZm9yZUNyZWF0ZVxuXHRcdFx0XHRcdFx0ICB9KVxuXHRcdFx0XHRcdFx0OiB1bmRlZmluZWQ7XG5cdFx0XHRcdC8vIGlmIHRoZSBsYXN0IHRyYW5zaWVudCBjb250ZXh0IGhhcyBubyBlcnJvciBtZXNzYWdlLCBkZWxldGUgaXQgYW5kIHJlY3JlYXRlIGEgbmV3IG9uZSBhdCB0aGUgbGFzdCBwb3NpdGlvblxuXHRcdFx0XHRpZiAobGFzdFRyYW5zaWVudENvbnRleHQgJiYgIWxhc3RUcmFuc2llbnRDb250ZXh0SGFzRXJyb3JNZXNzYWdlKSB7XG5cdFx0XHRcdFx0bGFzdFRyYW5zaWVudENvbnRleHQ/LmRlbGV0ZSgpO1xuXHRcdFx0XHRcdGF3YWl0ICh0YWJsZS5nZXRQYXJlbnQoKSBhcyBUYWJsZUFQSSkuY3JlYXRlRW1wdHlSb3dzKHRhYmxlLmdldFJvd0JpbmRpbmcoKSwgdGFibGUsIGZhbHNlLCAxKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gbmV3Q29udGV4dHM7XG5cdFx0XHR9KVxuXHRcdFx0LmNhdGNoKChvRXJyb3IpID0+IHtcblx0XHRcdFx0TG9nLmVycm9yKFwiRXJyb3Igd2hpbGUgcGFzdGluZyBkYXRhXCIsIG9FcnJvcik7XG5cdFx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0XHR9KTtcblx0fVxufTtcblxuZXhwb3J0IGRlZmF1bHQgUGFzdGVIZWxwZXI7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztFQWdDQSxNQUFNQSx3QkFBd0IsR0FBRyxTQUFBQSxDQUNoQ0MsWUFBb0IsRUFDcEJDLGNBQXNCLEVBQ3RCQyxXQUFvQixFQUNwQkMsU0FBeUIsRUFHUDtJQUFBLElBRmxCQyxpQ0FBaUMsR0FBQUMsU0FBQSxDQUFBQyxNQUFBLFFBQUFELFNBQUEsUUFBQUUsU0FBQSxHQUFBRixTQUFBLE1BQUcsS0FBSztJQUFBLElBQ3pDRyxXQUFXLEdBQUFILFNBQUEsQ0FBQUMsTUFBQSxRQUFBRCxTQUFBLFFBQUFFLFNBQUEsR0FBQUYsU0FBQSxNQUFHLEtBQUs7SUFFbkIsTUFBTUksUUFBUSxHQUFHUCxXQUFXLENBQUNRLFdBQVcsQ0FBQ1YsWUFBWSxDQUFDO01BQ3JEVyxhQUFhLEdBQUc7UUFBRUMscUJBQXFCLEVBQUU7TUFBSyxDQUFDO01BQy9DQyxJQUFJLEdBQUdWLFNBQVMsQ0FBQ1csVUFBVSxDQUFDLEdBQUdiLGNBQWMsSUFBSUQsWUFBWSxFQUFFLEVBQUVXLGFBQWEsQ0FBQztJQUNoRixJQUFJSSxTQUFTLEVBQUVDLFFBQVE7SUFDdkIsSUFBSVosaUNBQWlDLEtBQUssSUFBSSxFQUFFO01BQy9DVyxTQUFTLEdBQUcsQ0FBQ04sUUFBUTtNQUNyQk8sUUFBUSxHQUFHZCxXQUFXLENBQUNRLFdBQVcsQ0FBQyxHQUFHVixZQUFZLDZCQUE2QixDQUFDO0lBQ2pGLENBQUMsTUFBTTtNQUNOZSxTQUFTLEdBQUcsQ0FBQ04sUUFBUSxJQUFJUCxXQUFX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
@@ -545,13 +545,11 @@ const PasteHelper = {
545
545
  .find((message: Message) => lastTransientContext && message.getTargets()[0].includes(lastTransientContext.getPath()));
546
546
  const newContexts =
547
547
  aValidatedData.length > 0
548
- ? await editFlow.createMultipleDocuments(
549
- table.getRowBinding(),
550
- aValidatedData,
551
- tableDefinition?.control?.createAtEnd,
552
- true,
553
- controller.editFlow.onBeforeCreate
554
- )
548
+ ? await editFlow.createMultipleDocuments(table.getRowBinding(), aValidatedData, {
549
+ createAtEnd: tableDefinition?.control?.createAtEnd,
550
+ isFromCopyPaste: true,
551
+ beforeCreateCallBack: controller.editFlow.onBeforeCreate
552
+ })
555
553
  : undefined;
556
554
  // if the last transient context has no error message, delete it and recreate a new one at the last position
557
555
  if (lastTransientContext && !lastTransientContextHasErrorMessage) {
@@ -130,6 +130,16 @@ sap.ui.define([], function () {
130
130
  return serviceObject?._type === "Property";
131
131
  }
132
132
 
133
+ /**
134
+ * Checks whether the argument is an {@link ActionParameter}.
135
+ * @param serviceObject The object to be checked.
136
+ * @returns Whether the argument is a {@link ActionParameter}.
137
+ */
138
+ _exports.isProperty = isProperty;
139
+ function isActionParameter(serviceObject) {
140
+ return serviceObject?._type === "ActionParameter";
141
+ }
142
+
133
143
  /**
134
144
  * Checks whether the argument is a {@link NavigationProperty}.
135
145
  *
@@ -138,7 +148,7 @@ sap.ui.define([], function () {
138
148
  * @param serviceObject The object to be checked.
139
149
  * @returns Whether the argument is a {@link NavigationProperty}.
140
150
  */
141
- _exports.isProperty = isProperty;
151
+ _exports.isActionParameter = isActionParameter;
142
152
  function isNavigationProperty(serviceObject) {
143
153
  return serviceObject?._type === "NavigationProperty";
144
154
  }
@@ -205,4 +215,4 @@ sap.ui.define([], function () {
205
215
  _exports.isAction = isAction;
206
216
  return _exports;
207
217
  }, false);
208
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJpc0Z1bGZpbGxlZCIsInAiLCJzdGF0dXMiLCJfZXhwb3J0cyIsImlzUmVqZWN0ZWQiLCJpc0NvbnRleHQiLCJwb3RlbnRpYWxDb250ZXh0IiwiaXNBIiwiaXNGdW5jdGlvbkFycmF5IiwicG90ZW50aWFsRnVuY3Rpb25BcnJheSIsIkFycmF5IiwiaXNBcnJheSIsImxlbmd0aCIsImV2ZXJ5IiwiaXRlbSIsImlzQW5ub3RhdGlvbk9mVHlwZSIsInBvdGVudGlhbEFubm90YXRpb25UeXBlIiwidHlwZU5hbWUiLCJpbmNsdWRlcyIsIiRUeXBlIiwiaXNBbm5vdGF0aW9uT2ZUZXJtIiwicG90ZW50aWFsQW5ub3RhdGlvbiIsInRlcm1OYW1lIiwidGVybSIsImlzQW5ub3RhdGlvblRlcm0iLCJoYXNPd25Qcm9wZXJ0eSIsImlzU2VydmljZU9iamVjdCIsInNlcnZpY2VPYmplY3QiLCJpc0NvbXBsZXhUeXBlIiwiX3R5cGUiLCJpc1R5cGVEZWZpbml0aW9uIiwiaXNFbnRpdHlDb250YWluZXIiLCJpc0VudGl0eVNldCIsImlzU2luZ2xldG9uIiwiaXNFbnRpdHlUeXBlIiwiaXNQcm9wZXJ0eSIsImlzTmF2aWdhdGlvblByb3BlcnR5IiwiaXNTaW5nbGVOYXZpZ2F0aW9uUHJvcGVydHkiLCJpc0NvbGxlY3Rpb24iLCJpc011bHRpcGxlTmF2aWdhdGlvblByb3BlcnR5IiwiaXNQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24iLCJleHByZXNzaW9uIiwidHlwZSIsImlzQW5ub3RhdGlvblBhdGgiLCJpc1Byb3BlcnR5UGF0aEV4cHJlc3Npb24iLCJpc0FjdGlvbiJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiVHlwZUd1YXJkcy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7XG5cdEFubm90YXRpb25UZXJtLFxuXHRDb21wbGV4VHlwZSxcblx0RW50aXR5Q29udGFpbmVyLFxuXHRFbnRpdHlTZXQsXG5cdEVudGl0eVR5cGUsXG5cdE11bHRpcGxlTmF2aWdhdGlvblByb3BlcnR5LFxuXHROYXZpZ2F0aW9uUHJvcGVydHksXG5cdFBhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbixcblx0UHJvcGVydHksXG5cdFByb3BlcnR5UGF0aCxcblx0U2VydmljZU9iamVjdCxcblx0U2luZ2xlTmF2aWdhdGlvblByb3BlcnR5LFxuXHRTaW5nbGV0b24sXG5cdFR5cGVEZWZpbml0aW9uXG59IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlc1wiO1xuaW1wb3J0IHR5cGUgeyBBY3Rpb24sIEFubm90YXRpb25QYXRoIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL0VkbVwiO1xuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L0NvbnRleHRcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIGlzRnVsZmlsbGVkPFQ+KHA6IFByb21pc2VTZXR0bGVkUmVzdWx0PFQ+KTogcCBpcyBQcm9taXNlRnVsZmlsbGVkUmVzdWx0PFQ+IHtcblx0cmV0dXJuIHAuc3RhdHVzID09PSBcImZ1bGZpbGxlZFwiO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzUmVqZWN0ZWQ8VD4ocDogUHJvbWlzZVNldHRsZWRSZXN1bHQ8VD4pOiBwIGlzIFByb21pc2VSZWplY3RlZFJlc3VsdCB7XG5cdHJldHVybiBwLnN0YXR1cyA9PT0gXCJyZWplY3RlZFwiO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNDb250ZXh0KHBvdGVudGlhbENvbnRleHQ6IENvbnRleHQgfCB1bmtub3duIHwgdW5kZWZpbmVkKTogcG90ZW50aWFsQ29udGV4dCBpcyBDb250ZXh0IHtcblx0cmV0dXJuIChwb3RlbnRpYWxDb250ZXh0IGFzIENvbnRleHQpPy5pc0E/LjxDb250ZXh0PihcInNhcC51aS5tb2RlbC5Db250ZXh0XCIpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNGdW5jdGlvbkFycmF5KHBvdGVudGlhbEZ1bmN0aW9uQXJyYXk6IEZ1bmN0aW9uW10gfCB1bmtub3duKTogcG90ZW50aWFsRnVuY3Rpb25BcnJheSBpcyBGdW5jdGlvbltdIHtcblx0cmV0dXJuIChcblx0XHRBcnJheS5pc0FycmF5KHBvdGVudGlhbEZ1bmN0aW9uQXJyYXkpICYmXG5cdFx0cG90ZW50aWFsRnVuY3Rpb25BcnJheS5sZW5ndGggPiAwICYmXG5cdFx0cG90ZW50aWFsRnVuY3Rpb25BcnJheS5ldmVyeSgoaXRlbSkgPT4gdHlwZW9mIGl0ZW0gPT09IFwiZnVuY3Rpb25cIilcblx0KTtcbn1cblxudHlwZSBBbm5vdGF0aW9uVHlwZSA9IHtcblx0JFR5cGU/OiBzdHJpbmc7XG5cdGZ1bGx5UXVhbGlmaWVkTmFtZT86IHN0cmluZztcbn07XG5leHBvcnQgdHlwZSBfQW5ub3RhdGlvblRlcm0gPSB7XG5cdHRlcm06IHN0cmluZztcblx0cXVhbGlmaWVyPzogc3RyaW5nO1xufTtcblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciB0aGUgYXJndW1lbnQgaXMgYW4gYW5ub3RhdGlvbiBvZiB0aGUgZ2l2ZW4gdHlwZS5cbiAqIEBwYXJhbSBwb3RlbnRpYWxBbm5vdGF0aW9uVHlwZSBUaGUgYW5ub3RhdGlvbiB0byBjaGVja1xuICogQHBhcmFtIHR5cGVOYW1lIFRoZSB0eXBlIHRvIGNoZWNrIGZvclxuICogQHJldHVybnMgV2hldGhlciB0aGUgYXJndW1lbnQgaXMgYW4gYW5ub3RhdGlvbiBvZiB0aGUgZ2l2ZW4gdHlwZVxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNBbm5vdGF0aW9uT2ZUeXBlPFQgZXh0ZW5kcyBvYmplY3QgJiBBbm5vdGF0aW9uVHlwZT4oXG5cdHBvdGVudGlhbEFubm90YXRpb25UeXBlOiB1bmtub3duLFxuXHR0eXBlTmFtZTogVFtcIiRUeXBlXCJdIHwgVFtcIiRUeXBlXCJdW11cbik6IHBvdGVudGlhbEFubm90YXRpb25UeXBlIGlzIFQge1xuXHRpZiAoQXJyYXkuaXNBcnJheSh0eXBlTmFtZSkpIHtcblx0XHRyZXR1cm4gdHlwZU5hbWUuaW5jbHVkZXMoKHBvdGVudGlhbEFubm90YXRpb25UeXBlIGFzIEFubm90YXRpb25UeXBlKT8uJFR5cGUpO1xuXHR9XG5cdHJldHVybiAocG90ZW50aWFsQW5ub3RhdGlvblR5cGUgYXMgQW5ub3RhdGlvblR5cGUpPy4kVHlwZSA9PT0gdHlwZU5hbWU7XG59XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgdGhlIGFyZ3VtZW50IGlzIGFuIGFubm90YXRpb24gb2YgdGhlIGdpdmVuIHRlcm0uXG4gKiBAcGFyYW0gcG90ZW50aWFsQW5ub3RhdGlvbiBUaGUgYW5ub3RhdGlvbiB0byBjaGVja1xuICogQHBhcmFtIHRlcm1OYW1lIFRoZSB0ZXJtIHRvIGNoZWNrIGZvclxuICogQHJldHVybnMgV2hldGhlciB0aGUgYXJndW1lbnQgaXMgYW4gYW5ub3RhdGlvbiBvZiB0aGUgZ2l2ZW4gdGVybVxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNBbm5vdGF0aW9uT2ZUZXJtPFQgZXh0ZW5kcyBvYmplY3QgJiBfQW5ub3RhdGlvblRlcm0+KFxuXHRwb3RlbnRpYWxBbm5vdGF0aW9uOiB1bmtub3duLFxuXHR0ZXJtTmFtZTogVFtcInRlcm1cIl1cbik6IHBvdGVudGlhbEFubm90YXRpb24gaXMgQW5ub3RhdGlvblRlcm08VD4ge1xuXHRyZXR1cm4gKHBvdGVudGlhbEFubm90YXRpb24gYXMgX0Fubm90YXRpb25UZXJtKT8udGVybSA9PT0gdGVybU5hbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0Fubm90YXRpb25UZXJtKHBvdGVudGlhbEFubm90YXRpb246IHVua25vd24pOiBwb3RlbnRpYWxBbm5vdGF0aW9uIGlzIF9Bbm5vdGF0aW9uVGVybSB7XG5cdHJldHVybiAocG90ZW50aWFsQW5ub3RhdGlvbiBhcyBfQW5ub3RhdGlvblRlcm0pLmhhc093blByb3BlcnR5KFwidGVybVwiKTtcbn1cblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciB0aGUgYXJndW1lbnQgaXMgYSB7QGxpbmsgU2VydmljZU9iamVjdH0uXG4gKiBAcGFyYW0gc2VydmljZU9iamVjdCBUaGUgb2JqZWN0IHRvIGJlIGNoZWNrZWQuXG4gKiBAcmV0dXJucyBXaGV0aGVyIHRoZSBhcmd1bWVudCBpcyBhIHtAbGluayBTZXJ2aWNlT2JqZWN0fS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzU2VydmljZU9iamVjdChzZXJ2aWNlT2JqZWN0OiB1bmtub3duIHwgdW5kZWZpbmVkKTogc2VydmljZU9iamVjdCBpcyBTZXJ2aWNlT2JqZWN0IHtcblx0cmV0dXJuIHNlcnZpY2VPYmplY3Q/Lmhhc093blByb3BlcnR5KFwiX3R5cGVcIikgPz8gZmFsc2U7XG59XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgdGhlIGFyZ3VtZW50IGlzIGEge0BsaW5rIENvbXBsZXhUeXBlfS5cbiAqIEBwYXJhbSBzZXJ2aWNlT2JqZWN0IFRoZSBvYmplY3QgdG8gYmUgY2hlY2tlZC5cbiAqIEByZXR1cm5zIFdoZXRoZXIgdGhlIGFyZ3VtZW50IGlzIGEge0BsaW5rIENvbXBsZXhUeXBlfS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzQ29tcGxleFR5cGUoc2VydmljZU9iamVjdDogdW5rbm93bik6IHNlcnZpY2VPYmplY3QgaXMgQ29tcGxleFR5cGUge1xuXHRyZXR1cm4gKHNlcnZpY2VPYmplY3QgYXMgQ29tcGxleFR5cGUpPy5fdHlwZSA9PT0gXCJDb21wbGV4VHlwZVwiO1xufVxuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIHRoZSBhcmd1bWVudCBpcyBhIHtAbGluayBUeXBlRGVmaW5pdGlvbn0uXG4gKiBAcGFyYW0gc2VydmljZU9iamVjdCBUaGUgb2JqZWN0IHRvIGJlIGNoZWNrZWQuXG4gKiBAcmV0dXJucyBXaGV0aGVyIHRoZSBhcmd1bWVudCBpcyBhIHtAbGluayBUeXBlRGVmaW5pdGlvbn0uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1R5cGVEZWZpbml0aW9uKHNlcnZpY2VPYmplY3Q6IHVua25vd24pOiBzZXJ2aWNlT2JqZWN0IGlzIFR5cGVEZWZpbml0aW9uIHtcblx0cmV0dXJuIChzZXJ2aWNlT2JqZWN0IGFzIFR5cGVEZWZpbml0aW9uKT8uX3R5cGUgPT09IFwiVHlwZURlZmluaXRpb25cIjtcbn1cblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciB0aGUgYXJndW1lbnQgaXMgYW4ge0BsaW5rIEVudGl0eUNvbnRhaW5lcn0uXG4gKiBAcGFyYW0gc2VydmljZU9iamVjdCBUaGUgb2JqZWN0IHRvIGJlIGNoZWNrZWQuXG4gKiBAcmV0dXJucyBXaGV0aGVyIHRoZSBhcmd1bWVudCBpcyBhbiB7QGxpbmsgRW50aXR5Q29udGFpbmVyfS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzRW50aXR5Q29udGFpbmVyKHNlcnZpY2VPYmplY3Q6IHVua25vd24pOiBzZXJ2aWNlT2JqZWN0IGlzIEVudGl0eUNvbnRhaW5lciB7XG5cdHJldHVybiAoc2VydmljZU9iamVjdCBhcyBFbnRpdHlDb250YWluZXIpPy5fdHlwZSA9PT0gXCJFbnRpdHlDb250YWluZXJcIjtcbn1cblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciB0aGUgYXJndW1lbnQgaXMgYW4ge0BsaW5rIEVudGl0eVNldH0uXG4gKiBAcGFyYW0gc2VydmljZU9iamVjdCBUaGUgb2JqZWN0IHRvIGJlIGNoZWNrZWQuXG4gKiBAcmV0dXJucyBXaGV0aGVyIHRoZSBhcmd1bWVudCBpcyBhbiB7QGxpbmsgRW50aXR5U2V0fS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzRW50aXR5U2V0KHNlcnZpY2VPYmplY3Q6IHVua25vd24pOiBzZXJ2aWNlT2JqZWN0IGlzIEVudGl0eVNldCB7XG5cdHJldHVybiAoc2VydmljZU9iamVjdCBhcyBFbnRpdHlTZXQpPy5fdHlwZSA9PT0gXCJFbnRpdHlTZXRcIjtcbn1cblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciB0aGUgYXJndW1lbnQgaXMgYSB7QGxpbmsgU2luZ2xldG9ufS5cbiAqIEBwYXJhbSBzZXJ2aWNlT2JqZWN0IFRoZSBvYmplY3QgdG8gYmUgY2hlY2tlZC5cbiAqIEByZXR1cm5zIFdoZXRoZXIgdGhlIGFyZ3VtZW50IGlzIGEge0BsaW5rIFNpbmdsZXRvbn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzU2luZ2xldG9uKHNlcnZpY2VPYmplY3Q6IHVua25vd24pOiBzZXJ2aWNlT2JqZWN0IGlzIFNpbmdsZXRvbiB7XG5cdHJldHVybiAoc2VydmljZU9iamVjdCBhcyBTaW5nbGV0b24pPy5fdHlwZSA9PT0gXCJTaW5nbGV0b25cIjtcbn1cblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciB0aGUgYXJndW1lbnQgaXMgYW4ge0BsaW5rIEVudGl0eVR5cGV9LlxuICogQHBhcmFtIHNlcnZpY2VPYmplY3QgVGhlIG9iamVjdCB0byBiZSBjaGVja2VkLlxuICogQHJldHVybnMgV2hldGhlciB0aGUgYXJndW1lbnQgaXMgYW4ge0BsaW5rIEVudGl0eVR5cGV9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0VudGl0eVR5cGUoc2VydmljZU9iamVjdDogdW5rbm93bik6IHNlcnZpY2VPYmplY3QgaXMgRW50aXR5VHlwZSB7XG5cdHJldHVybiAoc2VydmljZU9iamVjdCBhcyBFbnRpdHlUeXBlKT8uX3R5cGUgPT09IFwiRW50aXR5VHlwZVwiO1xufVxuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIHRoZSBhcmd1bWVudCBpcyBhIHtAbGluayBQcm9wZXJ0eX0uXG4gKiBAcGFyYW0gc2VydmljZU9iamVjdCBUaGUgb2JqZWN0IHRvIGJlIGNoZWNrZWQuXG4gKiBAcmV0dXJucyBXaGV0aGVyIHRoZSBhcmd1bWVudCBpcyBhIHtAbGluayBQcm9wZXJ0eX0uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1Byb3BlcnR5KHNlcnZpY2VPYmplY3Q6IHVua25vd24pOiBzZXJ2aWNlT2JqZWN0IGlzIFByb3BlcnR5IHtcblx0cmV0dXJuIChzZXJ2aWNlT2JqZWN0IGFzIFByb3BlcnR5KT8uX3R5cGUgPT09IFwiUHJvcGVydHlcIjtcbn1cblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciB0aGUgYXJndW1lbnQgaXMgYSB7QGxpbmsgTmF2aWdhdGlvblByb3BlcnR5fS5cbiAqXG4gKiBIaW50OiBUaGVyZSBhcmUgYWxzbyB0aGUgbW9yZSBzcGVjaWZpYyBmdW5jdGlvbnMge0BsaW5rIGlzU2luZ2xlTmF2aWdhdGlvblByb3BlcnR5fSBhbmQge0BsaW5rIGlzTXVsdGlwbGVOYXZpZ2F0aW9uUHJvcGVydHl9LiBUaGVzZSBjYW4gYmVcbiAqIHVzZWQgdG8gY2hlY2sgZm9yIHRvLW9uZSBhbmQgdG8tbWFueSBuYXZpZ2F0aW9uIHByb3BlcnRpZXMsIHJlc3BlY3RpdmVseS5cbiAqIEBwYXJhbSBzZXJ2aWNlT2JqZWN0IFRoZSBvYmplY3QgdG8gYmUgY2hlY2tlZC5cbiAqIEByZXR1cm5zIFdoZXRoZXIgdGhlIGFyZ3VtZW50IGlzIGEge0BsaW5rIE5hdmlnYXRpb25Qcm9wZXJ0eX0uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc05hdmlnYXRpb25Qcm9wZXJ0eShzZXJ2aWNlT2JqZWN0OiB1bmtub3duKTogc2VydmljZU9iamVjdCBpcyBOYXZpZ2F0aW9uUHJvcGVydHkge1xuXHRyZXR1cm4gKHNlcnZpY2VPYmplY3QgYXMgTmF2aWdhdGlvblByb3BlcnR5KT8uX3R5cGUgPT09IFwiTmF2aWdhdGlvblByb3BlcnR5XCI7XG59XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgdGhlIGFyZ3VtZW50IGlzIGEge0BsaW5rIFNpbmdsZU5hdmlnYXRpb25Qcm9wZXJ0eX0uXG4gKiBAcGFyYW0gc2VydmljZU9iamVjdCBUaGUgb2JqZWN0IHRvIGJlIGNoZWNrZWQuXG4gKiBAcmV0dXJucyBXaGV0aGVyIHRoZSBhcmd1bWVudCBpcyBhIHtAbGluayBTaW5nbGVOYXZpZ2F0aW9uUHJvcGVydHl9LlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNTaW5nbGVOYXZpZ2F0aW9uUHJvcGVydHkoc2VydmljZU9iamVjdDogdW5rbm93bik6IHNlcnZpY2VPYmplY3QgaXMgU2luZ2xlTmF2aWdhdGlvblByb3BlcnR5IHtcblx0cmV0dXJuIGlzTmF2aWdhdGlvblByb3BlcnR5KHNlcnZpY2VPYmplY3QpICYmICFzZXJ2aWNlT2JqZWN0LmlzQ29sbGVjdGlvbjtcbn1cblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciB0aGUgYXJndW1lbnQgaXMgYSB7QGxpbmsgTXVsdGlwbGVOYXZpZ2F0aW9uUHJvcGVydHl9LlxuICogQHBhcmFtIHNlcnZpY2VPYmplY3QgVGhlIG9iamVjdCB0byBiZSBjaGVja2VkLlxuICogQHJldHVybnMgV2hldGhlciB0aGUgYXJndW1lbnQgaXMgYSB7QGxpbmsgTXVsdGlwbGVOYXZpZ2F0aW9uUHJvcGVydHl9LlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNNdWx0aXBsZU5hdmlnYXRpb25Qcm9wZXJ0eShzZXJ2aWNlT2JqZWN0OiB1bmtub3duKTogc2VydmljZU9iamVjdCBpcyBNdWx0aXBsZU5hdmlnYXRpb25Qcm9wZXJ0eSB7XG5cdHJldHVybiBpc05hdmlnYXRpb25Qcm9wZXJ0eShzZXJ2aWNlT2JqZWN0KSAmJiBzZXJ2aWNlT2JqZWN0LmlzQ29sbGVjdGlvbjtcbn1cblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciB0aGUgYXJndW1lbnQgaXMgYSB7QGxpbmsgUGF0aEFubm90YXRpb25FeHByZXNzaW9ufS5cbiAqIEBwYXJhbSBleHByZXNzaW9uIFRoZSBvYmplY3QgdG8gYmUgY2hlY2tlZC5cbiAqIEByZXR1cm5zIFdoZXRoZXIgdGhlIGFyZ3VtZW50IGlzIGEge0BsaW5rIFBhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbn0uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1BhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbjxUPihleHByZXNzaW9uOiB1bmtub3duKTogZXhwcmVzc2lvbiBpcyBQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb248VD4ge1xuXHRyZXR1cm4gKGV4cHJlc3Npb24gYXMgUGF0aEFubm90YXRpb25FeHByZXNzaW9uPFQ+KT8udHlwZSA9PT0gXCJQYXRoXCI7XG59XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgdGhlIGFyZ3VtZW50IGlzIGEge0BsaW5rIEFubm90YXRpb25QYXRoRXhwcmVzc2lvbn0uXG4gKiBAcGFyYW0gZXhwcmVzc2lvbiBUaGUgb2JqZWN0IHRvIGJlIGNoZWNrZWQuXG4gKiBAcmV0dXJucyBXaGV0aGVyIHRoZSBhcmd1bWVudCBpcyBhIHtAbGluayBBbm5vdGF0aW9uUGF0aEV4cHJlc3Npb259LlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNBbm5vdGF0aW9uUGF0aDxUPihleHByZXNzaW9uOiB1bmtub3duKTogZXhwcmVzc2lvbiBpcyBBbm5vdGF0aW9uUGF0aDxUPiB7XG5cdHJldHVybiAoZXhwcmVzc2lvbiBhcyBBbm5vdGF0aW9uUGF0aDxUPik/LnR5cGUgPT09IFwiQW5ub3RhdGlvblBhdGhcIjtcbn1cblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciB0aGUgYXJndW1lbnQgaXMgYSB7QGxpbmsgUHJvcGVydHlQYXRofS5cbiAqIEBwYXJhbSBleHByZXNzaW9uIFRoZSBvYmplY3QgdG8gYmUgY2hlY2tlZC5cbiAqIEByZXR1cm5zIFdoZXRoZXIgdGhlIGFyZ3VtZW50IGlzIGEge0BsaW5rIFByb3BlcnR5UGF0aH0uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1Byb3BlcnR5UGF0aEV4cHJlc3Npb24oZXhwcmVzc2lvbjogdW5rbm93bik6IGV4cHJlc3Npb24gaXMgUHJvcGVydHlQYXRoIHtcblx0cmV0dXJuIChleHByZXNzaW9uIGFzIFByb3BlcnR5UGF0aCk/LnR5cGUgPT09IFwiUHJvcGVydHlQYXRoXCI7XG59XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgdGhlIGFyZ3VtZW50IGlzIGFuIHtAbGluayBBY3Rpb259LlxuICogQHBhcmFtIHNlcnZpY2VPYmplY3QgVGhlIG9iamVjdCB0byBiZSBjaGVja2VkLlxuICogQHJldHVybnMgV2hldGhlciB0aGUgYXJndW1lbnQgaXMgYW4ge0BsaW5rIEFjdGlvbn0uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0FjdGlvbihzZXJ2aWNlT2JqZWN0OiB1bmtub3duKTogc2VydmljZU9iamVjdCBpcyBBY3Rpb24ge1xuXHRyZXR1cm4gKHNlcnZpY2VPYmplY3QgYXMgQWN0aW9uKT8uX3R5cGUgPT09IFwiQWN0aW9uXCI7XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0VBbUJPLFNBQVNBLFdBQVdBLENBQUlDLENBQTBCLEVBQWtDO0lBQzFGLE9BQU9BLENBQUMsQ0FBQ0MsTUFBTSxLQUFLLFdBQVc7RUFDaEM7RUFBQ0MsUUFBQSxDQUFBSCxXQUFBLEdBQUFBLFdBQUE7RUFDTSxTQUFTSSxVQUFVQSxDQUFJSCxDQUEwQixFQUE4QjtJQUNyRixPQUFPQSxDQUFDLENBQUNDLE1BQU0sS0FBSyxVQUFVO0VBQy9CO0VBQUNDLFFBQUEsQ0FBQUMsVUFBQSxHQUFBQSxVQUFBO0VBRU0sU0FBU0MsU0FBU0EsQ0FBQ0MsZ0JBQStDLEVBQStCO0lBQ3ZHLE9BQVFBLGdCQUFnQixFQUFjQyxHQUFHLEdBQVksc0JBQXNCLENBQUM7RUFDN0U7RUFBQ0osUUFBQSxDQUFBRSxTQUFBLEdBQUFBLFNBQUE7RUFFTSxTQUFTRyxlQUFlQSxDQUFDQyxzQkFBNEMsRUFBd0M7SUFDbkgsT0FDQ0MsS0FBSyxDQUFDQyxPQUFPLENBQUNGLHNCQUFzQixDQUFDLElBQ3JDQSxzQkFBc0IsQ0FBQ0csTUFBTSxHQUFHLENBQUMsSUFDakNILHNCQUFzQixDQUFDSSxLQUFLLENBQUVDLElBQUksSUFBSyxPQUFPQSxJQUFJLEtBQUssVUFBVSxDQUFDO0VBRXBFO0VBQUNYLFFBQUEsQ0FBQUssZUFBQSxHQUFBQSxlQUFBO0VBV0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBQ08sU0FBU08sa0JBQWtCQSxDQUNqQ0MsdUJBQWdDLEVBQ2hDQyxRQUFtQyxFQUNKO0lBQy9CLElBQUlQLEtBQUssQ0FBQ0MsT0FBTyxDQUFDTSxRQUFRLENBQUMsRUFBRTtNQUM1QixPQUFPQSxRQUFRLENBQUNDLFFBQVEsQ0FBRUYsdUJBQXVCLEVBQXFCRyxLQUFLLENBQUM7SUFDN0U7SUFDQSxPQUFRSCx1QkFBdUIsRUFBcUJHLEtBQUssS0FB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
218
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJpc0Z1bGZpbGxlZCIsInAiLCJzdGF0dXMiLCJfZXhwb3J0cyIsImlzUmVqZWN0ZWQiLCJpc0NvbnRleHQiLCJwb3RlbnRpYWxDb250ZXh0IiwiaXNBIiwiaXNGdW5jdGlvbkFycmF5IiwicG90ZW50aWFsRnVuY3Rpb25BcnJheSIsIkFycmF5IiwiaXNBcnJheSIsImxlbmd0aCIsImV2ZXJ5IiwiaXRlbSIsImlzQW5ub3RhdGlvbk9mVHlwZSIsInBvdGVudGlhbEFubm90YXRpb25UeXBlIiwidHlwZU5hbWUiLCJpbmNsdWRlcyIsIiRUeXBlIiwiaXNBbm5vdGF0aW9uT2ZUZXJtIiwicG90ZW50aWFsQW5ub3RhdGlvbiIsInRlcm1OYW1lIiwidGVybSIsImlzQW5ub3RhdGlvblRlcm0iLCJoYXNPd25Qcm9wZXJ0eSIsImlzU2VydmljZU9iamVjdCIsInNlcnZpY2VPYmplY3QiLCJpc0NvbXBsZXhUeXBlIiwiX3R5cGUiLCJpc1R5cGVEZWZpbml0aW9uIiwiaXNFbnRpdHlDb250YWluZXIiLCJpc0VudGl0eVNldCIsImlzU2luZ2xldG9uIiwiaXNFbnRpdHlUeXBlIiwiaXNQcm9wZXJ0eSIsImlzQWN0aW9uUGFyYW1ldGVyIiwiaXNOYXZpZ2F0aW9uUHJvcGVydHkiLCJpc1NpbmdsZU5hdmlnYXRpb25Qcm9wZXJ0eSIsImlzQ29sbGVjdGlvbiIsImlzTXVsdGlwbGVOYXZpZ2F0aW9uUHJvcGVydHkiLCJpc1BhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbiIsImV4cHJlc3Npb24iLCJ0eXBlIiwiaXNBbm5vdGF0aW9uUGF0aCIsImlzUHJvcGVydHlQYXRoRXhwcmVzc2lvbiIsImlzQWN0aW9uIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJUeXBlR3VhcmRzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHtcblx0QW5ub3RhdGlvblRlcm0sXG5cdENvbXBsZXhUeXBlLFxuXHRFbnRpdHlDb250YWluZXIsXG5cdEVudGl0eVNldCxcblx0RW50aXR5VHlwZSxcblx0TXVsdGlwbGVOYXZpZ2F0aW9uUHJvcGVydHksXG5cdE5hdmlnYXRpb25Qcm9wZXJ0eSxcblx0UGF0aEFubm90YXRpb25FeHByZXNzaW9uLFxuXHRQcm9wZXJ0eSxcblx0UHJvcGVydHlQYXRoLFxuXHRTZXJ2aWNlT2JqZWN0LFxuXHRTaW5nbGVOYXZpZ2F0aW9uUHJvcGVydHksXG5cdFNpbmdsZXRvbixcblx0VHlwZURlZmluaXRpb25cbn0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzXCI7XG5pbXBvcnQgdHlwZSB7IEFjdGlvbiwgQWN0aW9uUGFyYW1ldGVyLCBBbm5vdGF0aW9uUGF0aCB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy9FZG1cIjtcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9Db250ZXh0XCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0Z1bGZpbGxlZDxUPihwOiBQcm9taXNlU2V0dGxlZFJlc3VsdDxUPik6IHAgaXMgUHJvbWlzZUZ1bGZpbGxlZFJlc3VsdDxUPiB7XG5cdHJldHVybiBwLnN0YXR1cyA9PT0gXCJmdWxmaWxsZWRcIjtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc1JlamVjdGVkPFQ+KHA6IFByb21pc2VTZXR0bGVkUmVzdWx0PFQ+KTogcCBpcyBQcm9taXNlUmVqZWN0ZWRSZXN1bHQge1xuXHRyZXR1cm4gcC5zdGF0dXMgPT09IFwicmVqZWN0ZWRcIjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzQ29udGV4dChwb3RlbnRpYWxDb250ZXh0OiBDb250ZXh0IHwgdW5rbm93biB8IHVuZGVmaW5lZCk6IHBvdGVudGlhbENvbnRleHQgaXMgQ29udGV4dCB7XG5cdHJldHVybiAocG90ZW50aWFsQ29udGV4dCBhcyBDb250ZXh0KT8uaXNBPy48Q29udGV4dD4oXCJzYXAudWkubW9kZWwuQ29udGV4dFwiKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzRnVuY3Rpb25BcnJheShwb3RlbnRpYWxGdW5jdGlvbkFycmF5OiBGdW5jdGlvbltdIHwgdW5rbm93bik6IHBvdGVudGlhbEZ1bmN0aW9uQXJyYXkgaXMgRnVuY3Rpb25bXSB7XG5cdHJldHVybiAoXG5cdFx0QXJyYXkuaXNBcnJheShwb3RlbnRpYWxGdW5jdGlvbkFycmF5KSAmJlxuXHRcdHBvdGVudGlhbEZ1bmN0aW9uQXJyYXkubGVuZ3RoID4gMCAmJlxuXHRcdHBvdGVudGlhbEZ1bmN0aW9uQXJyYXkuZXZlcnkoKGl0ZW0pID0+IHR5cGVvZiBpdGVtID09PSBcImZ1bmN0aW9uXCIpXG5cdCk7XG59XG5cbnR5cGUgQW5ub3RhdGlvblR5cGUgPSB7XG5cdCRUeXBlPzogc3RyaW5nO1xuXHRmdWxseVF1YWxpZmllZE5hbWU/OiBzdHJpbmc7XG59O1xuZXhwb3J0IHR5cGUgX0Fubm90YXRpb25UZXJtID0ge1xuXHR0ZXJtOiBzdHJpbmc7XG5cdHF1YWxpZmllcj86IHN0cmluZztcbn07XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgdGhlIGFyZ3VtZW50IGlzIGFuIGFubm90YXRpb24gb2YgdGhlIGdpdmVuIHR5cGUuXG4gKiBAcGFyYW0gcG90ZW50aWFsQW5ub3RhdGlvblR5cGUgVGhlIGFubm90YXRpb24gdG8gY2hlY2tcbiAqIEBwYXJhbSB0eXBlTmFtZSBUaGUgdHlwZSB0byBjaGVjayBmb3JcbiAqIEByZXR1cm5zIFdoZXRoZXIgdGhlIGFyZ3VtZW50IGlzIGFuIGFubm90YXRpb24gb2YgdGhlIGdpdmVuIHR5cGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzQW5ub3RhdGlvbk9mVHlwZTxUIGV4dGVuZHMgb2JqZWN0ICYgQW5ub3RhdGlvblR5cGU+KFxuXHRwb3RlbnRpYWxBbm5vdGF0aW9uVHlwZTogdW5rbm93bixcblx0dHlwZU5hbWU6IFRbXCIkVHlwZVwiXSB8IFRbXCIkVHlwZVwiXVtdXG4pOiBwb3RlbnRpYWxBbm5vdGF0aW9uVHlwZSBpcyBUIHtcblx0aWYgKEFycmF5LmlzQXJyYXkodHlwZU5hbWUpKSB7XG5cdFx0cmV0dXJuIHR5cGVOYW1lLmluY2x1ZGVzKChwb3RlbnRpYWxBbm5vdGF0aW9uVHlwZSBhcyBBbm5vdGF0aW9uVHlwZSk/LiRUeXBlKTtcblx0fVxuXHRyZXR1cm4gKHBvdGVudGlhbEFubm90YXRpb25UeXBlIGFzIEFubm90YXRpb25UeXBlKT8uJFR5cGUgPT09IHR5cGVOYW1lO1xufVxuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIHRoZSBhcmd1bWVudCBpcyBhbiBhbm5vdGF0aW9uIG9mIHRoZSBnaXZlbiB0ZXJtLlxuICogQHBhcmFtIHBvdGVudGlhbEFubm90YXRpb24gVGhlIGFubm90YXRpb24gdG8gY2hlY2tcbiAqIEBwYXJhbSB0ZXJtTmFtZSBUaGUgdGVybSB0byBjaGVjayBmb3JcbiAqIEByZXR1cm5zIFdoZXRoZXIgdGhlIGFyZ3VtZW50IGlzIGFuIGFubm90YXRpb24gb2YgdGhlIGdpdmVuIHRlcm1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzQW5ub3RhdGlvbk9mVGVybTxUIGV4dGVuZHMgb2JqZWN0ICYgX0Fubm90YXRpb25UZXJtPihcblx0cG90ZW50aWFsQW5ub3RhdGlvbjogdW5rbm93bixcblx0dGVybU5hbWU6IFRbXCJ0ZXJtXCJdXG4pOiBwb3RlbnRpYWxBbm5vdGF0aW9uIGlzIEFubm90YXRpb25UZXJtPFQ+IHtcblx0cmV0dXJuIChwb3RlbnRpYWxBbm5vdGF0aW9uIGFzIF9Bbm5vdGF0aW9uVGVybSk/LnRlcm0gPT09IHRlcm1OYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNBbm5vdGF0aW9uVGVybShwb3RlbnRpYWxBbm5vdGF0aW9uOiB1bmtub3duKTogcG90ZW50aWFsQW5ub3RhdGlvbiBpcyBfQW5ub3RhdGlvblRlcm0ge1xuXHRyZXR1cm4gKHBvdGVudGlhbEFubm90YXRpb24gYXMgX0Fubm90YXRpb25UZXJtKS5oYXNPd25Qcm9wZXJ0eShcInRlcm1cIik7XG59XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgdGhlIGFyZ3VtZW50IGlzIGEge0BsaW5rIFNlcnZpY2VPYmplY3R9LlxuICogQHBhcmFtIHNlcnZpY2VPYmplY3QgVGhlIG9iamVjdCB0byBiZSBjaGVja2VkLlxuICogQHJldHVybnMgV2hldGhlciB0aGUgYXJndW1lbnQgaXMgYSB7QGxpbmsgU2VydmljZU9iamVjdH0uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1NlcnZpY2VPYmplY3Qoc2VydmljZU9iamVjdDogdW5rbm93biB8IHVuZGVmaW5lZCk6IHNlcnZpY2VPYmplY3QgaXMgU2VydmljZU9iamVjdCB7XG5cdHJldHVybiBzZXJ2aWNlT2JqZWN0Py5oYXNPd25Qcm9wZXJ0eShcIl90eXBlXCIpID8/IGZhbHNlO1xufVxuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIHRoZSBhcmd1bWVudCBpcyBhIHtAbGluayBDb21wbGV4VHlwZX0uXG4gKiBAcGFyYW0gc2VydmljZU9iamVjdCBUaGUgb2JqZWN0IHRvIGJlIGNoZWNrZWQuXG4gKiBAcmV0dXJucyBXaGV0aGVyIHRoZSBhcmd1bWVudCBpcyBhIHtAbGluayBDb21wbGV4VHlwZX0uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0NvbXBsZXhUeXBlKHNlcnZpY2VPYmplY3Q6IHVua25vd24pOiBzZXJ2aWNlT2JqZWN0IGlzIENvbXBsZXhUeXBlIHtcblx0cmV0dXJuIChzZXJ2aWNlT2JqZWN0IGFzIENvbXBsZXhUeXBlKT8uX3R5cGUgPT09IFwiQ29tcGxleFR5cGVcIjtcbn1cblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciB0aGUgYXJndW1lbnQgaXMgYSB7QGxpbmsgVHlwZURlZmluaXRpb259LlxuICogQHBhcmFtIHNlcnZpY2VPYmplY3QgVGhlIG9iamVjdCB0byBiZSBjaGVja2VkLlxuICogQHJldHVybnMgV2hldGhlciB0aGUgYXJndW1lbnQgaXMgYSB7QGxpbmsgVHlwZURlZmluaXRpb259LlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNUeXBlRGVmaW5pdGlvbihzZXJ2aWNlT2JqZWN0OiB1bmtub3duKTogc2VydmljZU9iamVjdCBpcyBUeXBlRGVmaW5pdGlvbiB7XG5cdHJldHVybiAoc2VydmljZU9iamVjdCBhcyBUeXBlRGVmaW5pdGlvbik/Ll90eXBlID09PSBcIlR5cGVEZWZpbml0aW9uXCI7XG59XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgdGhlIGFyZ3VtZW50IGlzIGFuIHtAbGluayBFbnRpdHlDb250YWluZXJ9LlxuICogQHBhcmFtIHNlcnZpY2VPYmplY3QgVGhlIG9iamVjdCB0byBiZSBjaGVja2VkLlxuICogQHJldHVybnMgV2hldGhlciB0aGUgYXJndW1lbnQgaXMgYW4ge0BsaW5rIEVudGl0eUNvbnRhaW5lcn0uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0VudGl0eUNvbnRhaW5lcihzZXJ2aWNlT2JqZWN0OiB1bmtub3duKTogc2VydmljZU9iamVjdCBpcyBFbnRpdHlDb250YWluZXIge1xuXHRyZXR1cm4gKHNlcnZpY2VPYmplY3QgYXMgRW50aXR5Q29udGFpbmVyKT8uX3R5cGUgPT09IFwiRW50aXR5Q29udGFpbmVyXCI7XG59XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgdGhlIGFyZ3VtZW50IGlzIGFuIHtAbGluayBFbnRpdHlTZXR9LlxuICogQHBhcmFtIHNlcnZpY2VPYmplY3QgVGhlIG9iamVjdCB0byBiZSBjaGVja2VkLlxuICogQHJldHVybnMgV2hldGhlciB0aGUgYXJndW1lbnQgaXMgYW4ge0BsaW5rIEVudGl0eVNldH0uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0VudGl0eVNldChzZXJ2aWNlT2JqZWN0OiB1bmtub3duKTogc2VydmljZU9iamVjdCBpcyBFbnRpdHlTZXQge1xuXHRyZXR1cm4gKHNlcnZpY2VPYmplY3QgYXMgRW50aXR5U2V0KT8uX3R5cGUgPT09IFwiRW50aXR5U2V0XCI7XG59XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgdGhlIGFyZ3VtZW50IGlzIGEge0BsaW5rIFNpbmdsZXRvbn0uXG4gKiBAcGFyYW0gc2VydmljZU9iamVjdCBUaGUgb2JqZWN0IHRvIGJlIGNoZWNrZWQuXG4gKiBAcmV0dXJucyBXaGV0aGVyIHRoZSBhcmd1bWVudCBpcyBhIHtAbGluayBTaW5nbGV0b259XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1NpbmdsZXRvbihzZXJ2aWNlT2JqZWN0OiB1bmtub3duKTogc2VydmljZU9iamVjdCBpcyBTaW5nbGV0b24ge1xuXHRyZXR1cm4gKHNlcnZpY2VPYmplY3QgYXMgU2luZ2xldG9uKT8uX3R5cGUgPT09IFwiU2luZ2xldG9uXCI7XG59XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgdGhlIGFyZ3VtZW50IGlzIGFuIHtAbGluayBFbnRpdHlUeXBlfS5cbiAqIEBwYXJhbSBzZXJ2aWNlT2JqZWN0IFRoZSBvYmplY3QgdG8gYmUgY2hlY2tlZC5cbiAqIEByZXR1cm5zIFdoZXRoZXIgdGhlIGFyZ3VtZW50IGlzIGFuIHtAbGluayBFbnRpdHlUeXBlfVxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNFbnRpdHlUeXBlKHNlcnZpY2VPYmplY3Q6IHVua25vd24pOiBzZXJ2aWNlT2JqZWN0IGlzIEVudGl0eVR5cGUge1xuXHRyZXR1cm4gKHNlcnZpY2VPYmplY3QgYXMgRW50aXR5VHlwZSk/Ll90eXBlID09PSBcIkVudGl0eVR5cGVcIjtcbn1cblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciB0aGUgYXJndW1lbnQgaXMgYSB7QGxpbmsgUHJvcGVydHl9LlxuICogQHBhcmFtIHNlcnZpY2VPYmplY3QgVGhlIG9iamVjdCB0byBiZSBjaGVja2VkLlxuICogQHJldHVybnMgV2hldGhlciB0aGUgYXJndW1lbnQgaXMgYSB7QGxpbmsgUHJvcGVydHl9LlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNQcm9wZXJ0eShzZXJ2aWNlT2JqZWN0OiB1bmtub3duKTogc2VydmljZU9iamVjdCBpcyBQcm9wZXJ0eSB7XG5cdHJldHVybiAoc2VydmljZU9iamVjdCBhcyBQcm9wZXJ0eSk/Ll90eXBlID09PSBcIlByb3BlcnR5XCI7XG59XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgdGhlIGFyZ3VtZW50IGlzIGFuIHtAbGluayBBY3Rpb25QYXJhbWV0ZXJ9LlxuICogQHBhcmFtIHNlcnZpY2VPYmplY3QgVGhlIG9iamVjdCB0byBiZSBjaGVja2VkLlxuICogQHJldHVybnMgV2hldGhlciB0aGUgYXJndW1lbnQgaXMgYSB7QGxpbmsgQWN0aW9uUGFyYW1ldGVyfS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzQWN0aW9uUGFyYW1ldGVyKHNlcnZpY2VPYmplY3Q6IHVua25vd24pOiBzZXJ2aWNlT2JqZWN0IGlzIEFjdGlvblBhcmFtZXRlciB7XG5cdHJldHVybiAoc2VydmljZU9iamVjdCBhcyBBY3Rpb25QYXJhbWV0ZXIpPy5fdHlwZSA9PT0gXCJBY3Rpb25QYXJhbWV0ZXJcIjtcbn1cblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciB0aGUgYXJndW1lbnQgaXMgYSB7QGxpbmsgTmF2aWdhdGlvblByb3BlcnR5fS5cbiAqXG4gKiBIaW50OiBUaGVyZSBhcmUgYWxzbyB0aGUgbW9yZSBzcGVjaWZpYyBmdW5jdGlvbnMge0BsaW5rIGlzU2luZ2xlTmF2aWdhdGlvblByb3BlcnR5fSBhbmQge0BsaW5rIGlzTXVsdGlwbGVOYXZpZ2F0aW9uUHJvcGVydHl9LiBUaGVzZSBjYW4gYmVcbiAqIHVzZWQgdG8gY2hlY2sgZm9yIHRvLW9uZSBhbmQgdG8tbWFueSBuYXZpZ2F0aW9uIHByb3BlcnRpZXMsIHJlc3BlY3RpdmVseS5cbiAqIEBwYXJhbSBzZXJ2aWNlT2JqZWN0IFRoZSBvYmplY3QgdG8gYmUgY2hlY2tlZC5cbiAqIEByZXR1cm5zIFdoZXRoZXIgdGhlIGFyZ3VtZW50IGlzIGEge0BsaW5rIE5hdmlnYXRpb25Qcm9wZXJ0eX0uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc05hdmlnYXRpb25Qcm9wZXJ0eShzZXJ2aWNlT2JqZWN0OiB1bmtub3duKTogc2VydmljZU9iamVjdCBpcyBOYXZpZ2F0aW9uUHJvcGVydHkge1xuXHRyZXR1cm4gKHNlcnZpY2VPYmplY3QgYXMgTmF2aWdhdGlvblByb3BlcnR5KT8uX3R5cGUgPT09IFwiTmF2aWdhdGlvblByb3BlcnR5XCI7XG59XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgdGhlIGFyZ3VtZW50IGlzIGEge0BsaW5rIFNpbmdsZU5hdmlnYXRpb25Qcm9wZXJ0eX0uXG4gKiBAcGFyYW0gc2VydmljZU9iamVjdCBUaGUgb2JqZWN0IHRvIGJlIGNoZWNrZWQuXG4gKiBAcmV0dXJucyBXaGV0aGVyIHRoZSBhcmd1bWVudCBpcyBhIHtAbGluayBTaW5nbGVOYXZpZ2F0aW9uUHJvcGVydHl9LlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNTaW5nbGVOYXZpZ2F0aW9uUHJvcGVydHkoc2VydmljZU9iamVjdDogdW5rbm93bik6IHNlcnZpY2VPYmplY3QgaXMgU2luZ2xlTmF2aWdhdGlvblByb3BlcnR5IHtcblx0cmV0dXJuIGlzTmF2aWdhdGlvblByb3BlcnR5KHNlcnZpY2VPYmplY3QpICYmICFzZXJ2aWNlT2JqZWN0LmlzQ29sbGVjdGlvbjtcbn1cblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciB0aGUgYXJndW1lbnQgaXMgYSB7QGxpbmsgTXVsdGlwbGVOYXZpZ2F0aW9uUHJvcGVydHl9LlxuICogQHBhcmFtIHNlcnZpY2VPYmplY3QgVGhlIG9iamVjdCB0byBiZSBjaGVja2VkLlxuICogQHJldHVybnMgV2hldGhlciB0aGUgYXJndW1lbnQgaXMgYSB7QGxpbmsgTXVsdGlwbGVOYXZpZ2F0aW9uUHJvcGVydHl9LlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNNdWx0aXBsZU5hdmlnYXRpb25Qcm9wZXJ0eShzZXJ2aWNlT2JqZWN0OiB1bmtub3duKTogc2VydmljZU9iamVjdCBpcyBNdWx0aXBsZU5hdmlnYXRpb25Qcm9wZXJ0eSB7XG5cdHJldHVybiBpc05hdmlnYXRpb25Qcm9wZXJ0eShzZXJ2aWNlT2JqZWN0KSAmJiBzZXJ2aWNlT2JqZWN0LmlzQ29sbGVjdGlvbjtcbn1cblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciB0aGUgYXJndW1lbnQgaXMgYSB7QGxpbmsgUGF0aEFubm90YXRpb25FeHByZXNzaW9ufS5cbiAqIEBwYXJhbSBleHByZXNzaW9uIFRoZSBvYmplY3QgdG8gYmUgY2hlY2tlZC5cbiAqIEByZXR1cm5zIFdoZXRoZXIgdGhlIGFyZ3VtZW50IGlzIGEge0BsaW5rIFBhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbn0uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1BhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbjxUPihleHByZXNzaW9uOiB1bmtub3duKTogZXhwcmVzc2lvbiBpcyBQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb248VD4ge1xuXHRyZXR1cm4gKGV4cHJlc3Npb24gYXMgUGF0aEFubm90YXRpb25FeHByZXNzaW9uPFQ+KT8udHlwZSA9PT0gXCJQYXRoXCI7XG59XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgdGhlIGFyZ3VtZW50IGlzIGEge0BsaW5rIEFubm90YXRpb25QYXRoRXhwcmVzc2lvbn0uXG4gKiBAcGFyYW0gZXhwcmVzc2lvbiBUaGUgb2JqZWN0IHRvIGJlIGNoZWNrZWQuXG4gKiBAcmV0dXJucyBXaGV0aGVyIHRoZSBhcmd1bWVudCBpcyBhIHtAbGluayBBbm5vdGF0aW9uUGF0aEV4cHJlc3Npb259LlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNBbm5vdGF0aW9uUGF0aDxUPihleHByZXNzaW9uOiB1bmtub3duKTogZXhwcmVzc2lvbiBpcyBBbm5vdGF0aW9uUGF0aDxUPiB7XG5cdHJldHVybiAoZXhwcmVzc2lvbiBhcyBBbm5vdGF0aW9uUGF0aDxUPik/LnR5cGUgPT09IFwiQW5ub3RhdGlvblBhdGhcIjtcbn1cblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciB0aGUgYXJndW1lbnQgaXMgYSB7QGxpbmsgUHJvcGVydHlQYXRofS5cbiAqIEBwYXJhbSBleHByZXNzaW9uIFRoZSBvYmplY3QgdG8gYmUgY2hlY2tlZC5cbiAqIEByZXR1cm5zIFdoZXRoZXIgdGhlIGFyZ3VtZW50IGlzIGEge0BsaW5rIFByb3BlcnR5UGF0aH0uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1Byb3BlcnR5UGF0aEV4cHJlc3Npb24oZXhwcmVzc2lvbjogdW5rbm93bik6IGV4cHJlc3Npb24gaXMgUHJvcGVydHlQYXRoIHtcblx0cmV0dXJuIChleHByZXNzaW9uIGFzIFByb3BlcnR5UGF0aCk/LnR5cGUgPT09IFwiUHJvcGVydHlQYXRoXCI7XG59XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgdGhlIGFyZ3VtZW50IGlzIGFuIHtAbGluayBBY3Rpb259LlxuICogQHBhcmFtIHNlcnZpY2VPYmplY3QgVGhlIG9iamVjdCB0byBiZSBjaGVja2VkLlxuICogQHJldHVybnMgV2hldGhlciB0aGUgYXJndW1lbnQgaXMgYW4ge0BsaW5rIEFjdGlvbn0uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0FjdGlvbihzZXJ2aWNlT2JqZWN0OiB1bmtub3duKTogc2VydmljZU9iamVjdCBpcyBBY3Rpb24ge1xuXHRyZXR1cm4gKHNlcnZpY2VPYmplY3QgYXMgQWN0aW9uKT8uX3R5cGUgPT09IFwiQWN0aW9uXCI7XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0VBbUJPLFNBQVNBLFdBQVdBLENBQUlDLENBQTBCLEVBQWtDO0lBQzFGLE9BQU9BLENBQUMsQ0FBQ0MsTUFBTSxLQUFLLFdBQVc7RUFDaEM7RUFBQ0MsUUFBQSxDQUFBSCxXQUFBLEdBQUFBLFdBQUE7RUFDTSxTQUFTSSxVQUFVQSxDQUFJSCxDQUEwQixFQUE4QjtJQUNyRixPQUFPQSxDQUFDLENBQUNDLE1BQU0sS0FBSyxVQUFVO0VBQy9CO0VBQUNDLFFBQUEsQ0FBQUMsVUFBQSxHQUFBQSxVQUFBO0VBRU0sU0FBU0MsU0FBU0EsQ0FBQ0MsZ0JBQStDLEVBQStCO0lBQ3ZHLE9BQVFBLGdCQUFnQixFQUFjQyxHQUFHLEdBQVksc0JBQXNCLENBQUM7RUFDN0U7RUFBQ0osUUFBQSxDQUFBRSxTQUFBLEdBQUFBLFNBQUE7RUFFTSxTQUFTRyxlQUFlQSxDQUFDQyxzQkFBNEMsRUFBd0M7SUFDbkgsT0FDQ0Ms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
@@ -14,7 +14,7 @@ import type {
14
14
  Singleton,
15
15
  TypeDefinition
16
16
  } from "@sap-ux/vocabularies-types";
17
- import type { Action, AnnotationPath } from "@sap-ux/vocabularies-types/Edm";
17
+ import type { Action, ActionParameter, AnnotationPath } from "@sap-ux/vocabularies-types/Edm";
18
18
  import type Context from "sap/ui/model/odata/v4/Context";
19
19
 
20
20
  export function isFulfilled<T>(p: PromiseSettledResult<T>): p is PromiseFulfilledResult<T> {
@@ -150,6 +150,15 @@ export function isProperty(serviceObject: unknown): serviceObject is Property {
150
150
  return (serviceObject as Property)?._type === "Property";
151
151
  }
152
152
 
153
+ /**
154
+ * Checks whether the argument is an {@link ActionParameter}.
155
+ * @param serviceObject The object to be checked.
156
+ * @returns Whether the argument is a {@link ActionParameter}.
157
+ */
158
+ export function isActionParameter(serviceObject: unknown): serviceObject is ActionParameter {
159
+ return (serviceObject as ActionParameter)?._type === "ActionParameter";
160
+ }
161
+
153
162
  /**
154
163
  * Checks whether the argument is a {@link NavigationProperty}.
155
164
  *