@sapui5/sap.fe.core 1.136.1 → 1.138.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 (154) hide show
  1. package/package.json +1 -1
  2. package/src/sap/fe/core/.library +1 -1
  3. package/src/sap/fe/core/ActionRuntime.js +76 -28
  4. package/src/sap/fe/core/ActionRuntime.ts +106 -30
  5. package/src/sap/fe/core/AppComponent.js +11 -1
  6. package/src/sap/fe/core/AppComponent.ts +10 -0
  7. package/src/sap/fe/core/AppStateHandler.js +9 -2
  8. package/src/sap/fe/core/AppStateHandler.ts +8 -2
  9. package/src/sap/fe/core/CommonUtils.js +15 -3
  10. package/src/sap/fe/core/CommonUtils.ts +13 -2
  11. package/src/sap/fe/core/PageController.controller.js +10 -0
  12. package/src/sap/fe/core/PageController.controller.ts +3 -0
  13. package/src/sap/fe/core/buildingBlocks/TraceInfo.js +3 -4
  14. package/src/sap/fe/core/buildingBlocks/TraceInfo.ts +2 -2
  15. package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplateProcessor.js +3 -3
  16. package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplateProcessor.ts +2 -2
  17. package/src/sap/fe/core/controllerextensions/EditFlow.js +25 -12
  18. package/src/sap/fe/core/controllerextensions/EditFlow.ts +27 -16
  19. package/src/sap/fe/core/controllerextensions/InlineEditFlow.js +27 -41
  20. package/src/sap/fe/core/controllerextensions/InlineEditFlow.ts +27 -41
  21. package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js +2 -1
  22. package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.ts +2 -1
  23. package/src/sap/fe/core/controllerextensions/InternalRouting.js +2 -1
  24. package/src/sap/fe/core/controllerextensions/InternalRouting.ts +1 -0
  25. package/src/sap/fe/core/controllerextensions/MessageHandler.js +4 -4
  26. package/src/sap/fe/core/controllerextensions/MessageHandler.ts +22 -15
  27. package/src/sap/fe/core/controllerextensions/Paginator.js +20 -5
  28. package/src/sap/fe/core/controllerextensions/Paginator.ts +19 -0
  29. package/src/sap/fe/core/controllerextensions/SideEffects.js +3 -2
  30. package/src/sap/fe/core/controllerextensions/SideEffects.ts +2 -2
  31. package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.js +2 -1
  32. package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.ts +1 -0
  33. package/src/sap/fe/core/controllerextensions/dialog/ODataStrictDialog.js +9 -5
  34. package/src/sap/fe/core/controllerextensions/dialog/ODataStrictDialog.tsx +8 -3
  35. package/src/sap/fe/core/controllerextensions/editFlow/NotApplicableContextDialog.js +4 -2
  36. package/src/sap/fe/core/controllerextensions/editFlow/NotApplicableContextDialog.tsx +7 -2
  37. package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.js +178 -125
  38. package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.ts +222 -174
  39. package/src/sap/fe/core/controllerextensions/editFlow/draft.js +5 -3
  40. package/src/sap/fe/core/controllerextensions/editFlow/draft.ts +2 -3
  41. package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataOperation.js +39 -5
  42. package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataOperation.ts +51 -11
  43. package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataStrictHandling.js +16 -1
  44. package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataStrictHandling.ts +17 -2
  45. package/src/sap/fe/core/controllerextensions/editFlow/operations/Operation.js +88 -1
  46. package/src/sap/fe/core/controllerextensions/editFlow/operations/Operation.ts +106 -7
  47. package/src/sap/fe/core/controllerextensions/editFlow/operations/OperationMessage.js +16 -1
  48. package/src/sap/fe/core/controllerextensions/editFlow/operations/OperationMessage.ts +15 -0
  49. package/src/sap/fe/core/controllerextensions/editFlow/operations/OperationParameters.js +25 -1
  50. package/src/sap/fe/core/controllerextensions/editFlow/operations/OperationParameters.ts +24 -0
  51. package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.js +11 -8
  52. package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.ts +13 -10
  53. package/src/sap/fe/core/controllerextensions/routing/RouterProxy.js +7 -4
  54. package/src/sap/fe/core/controllerextensions/routing/RouterProxy.ts +7 -3
  55. package/src/sap/fe/core/controls/DataWatcher.js +2 -2
  56. package/src/sap/fe/core/controls/DataWatcher.tsx +1 -1
  57. package/src/sap/fe/core/controls/Recommendations/ConfirmRecommendationDialog.js +11 -6
  58. package/src/sap/fe/core/controls/Recommendations/ConfirmRecommendationDialog.tsx +13 -9
  59. package/src/sap/fe/core/controls/inlineEditFlow/InlineEditExitDialog.js +144 -0
  60. package/src/sap/fe/core/controls/inlineEditFlow/{BeforeNavigationDialog.tsx → InlineEditExitDialog.tsx} +1 -1
  61. package/src/sap/fe/core/converters/ManifestSettings.js +1 -1
  62. package/src/sap/fe/core/converters/ManifestSettings.ts +4 -0
  63. package/src/sap/fe/core/converters/MetaModelConverter.js +3 -2
  64. package/src/sap/fe/core/converters/MetaModelConverter.ts +12 -4
  65. package/src/sap/fe/core/converters/controls/Common/Action.js +42 -5
  66. package/src/sap/fe/core/converters/controls/Common/Action.ts +42 -5
  67. package/src/sap/fe/core/converters/controls/Common/Chart.js +4 -1
  68. package/src/sap/fe/core/converters/controls/Common/Chart.ts +2 -1
  69. package/src/sap/fe/core/converters/controls/Common/Table.js +46 -13
  70. package/src/sap/fe/core/converters/controls/Common/Table.ts +50 -11
  71. package/src/sap/fe/core/converters/controls/Common/table/Columns.js +11 -10
  72. package/src/sap/fe/core/converters/controls/Common/table/Columns.ts +13 -1
  73. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js +2 -2
  74. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +2 -1
  75. package/src/sap/fe/core/fpm/manifest.json +1 -1
  76. package/src/sap/fe/core/helpers/DeleteHelper.js +9 -9
  77. package/src/sap/fe/core/helpers/DeleteHelper.ts +8 -9
  78. package/src/sap/fe/core/helpers/FPMHelper.js +2 -2
  79. package/src/sap/fe/core/helpers/FPMHelper.ts +1 -1
  80. package/src/sap/fe/core/helpers/ModelHelper.js +4 -4
  81. package/src/sap/fe/core/helpers/ModelHelper.ts +8 -4
  82. package/src/sap/fe/core/helpers/PasteHelper.js +2 -2
  83. package/src/sap/fe/core/helpers/PasteHelper.ts +1 -1
  84. package/src/sap/fe/core/library.js +33 -4
  85. package/src/sap/fe/core/library.ts +33 -2
  86. package/src/sap/fe/core/messagebundle.properties +18 -2
  87. package/src/sap/fe/core/messagebundle_ar.properties +3 -2
  88. package/src/sap/fe/core/messagebundle_bg.properties +2 -1
  89. package/src/sap/fe/core/messagebundle_ca.properties +2 -1
  90. package/src/sap/fe/core/messagebundle_cnr.properties +2 -1
  91. package/src/sap/fe/core/messagebundle_cs.properties +4 -3
  92. package/src/sap/fe/core/messagebundle_cy.properties +2 -1
  93. package/src/sap/fe/core/messagebundle_da.properties +2 -1
  94. package/src/sap/fe/core/messagebundle_de.properties +8 -7
  95. package/src/sap/fe/core/messagebundle_el.properties +2 -1
  96. package/src/sap/fe/core/messagebundle_en.properties +2 -1
  97. package/src/sap/fe/core/messagebundle_en_GB.properties +2 -1
  98. package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +2 -1
  99. package/src/sap/fe/core/messagebundle_es.properties +5 -4
  100. package/src/sap/fe/core/messagebundle_es_MX.properties +2 -1
  101. package/src/sap/fe/core/messagebundle_et.properties +2 -1
  102. package/src/sap/fe/core/messagebundle_fi.properties +2 -1
  103. package/src/sap/fe/core/messagebundle_fr.properties +2 -1
  104. package/src/sap/fe/core/messagebundle_fr_CA.properties +2 -1
  105. package/src/sap/fe/core/messagebundle_hi.properties +2 -1
  106. package/src/sap/fe/core/messagebundle_hr.properties +2 -1
  107. package/src/sap/fe/core/messagebundle_hu.properties +2 -1
  108. package/src/sap/fe/core/messagebundle_id.properties +2 -1
  109. package/src/sap/fe/core/messagebundle_it.properties +2 -1
  110. package/src/sap/fe/core/messagebundle_iw.properties +2 -1
  111. package/src/sap/fe/core/messagebundle_ja.properties +3 -2
  112. package/src/sap/fe/core/messagebundle_kk.properties +2 -1
  113. package/src/sap/fe/core/messagebundle_ko.properties +2 -1
  114. package/src/sap/fe/core/messagebundle_lt.properties +2 -1
  115. package/src/sap/fe/core/messagebundle_lv.properties +2 -1
  116. package/src/sap/fe/core/messagebundle_mk.properties +2 -1
  117. package/src/sap/fe/core/messagebundle_ms.properties +2 -1
  118. package/src/sap/fe/core/messagebundle_nl.properties +2 -1
  119. package/src/sap/fe/core/messagebundle_no.properties +3 -2
  120. package/src/sap/fe/core/messagebundle_pl.properties +2 -1
  121. package/src/sap/fe/core/messagebundle_pt.properties +2 -1
  122. package/src/sap/fe/core/messagebundle_pt_PT.properties +2 -1
  123. package/src/sap/fe/core/messagebundle_ro.properties +2 -1
  124. package/src/sap/fe/core/messagebundle_ru.properties +2 -1
  125. package/src/sap/fe/core/messagebundle_sh.properties +2 -1
  126. package/src/sap/fe/core/messagebundle_sk.properties +2 -1
  127. package/src/sap/fe/core/messagebundle_sl.properties +2 -1
  128. package/src/sap/fe/core/messagebundle_sr.properties +2 -1
  129. package/src/sap/fe/core/messagebundle_sv.properties +2 -1
  130. package/src/sap/fe/core/messagebundle_th.properties +2 -1
  131. package/src/sap/fe/core/messagebundle_tr.properties +2 -1
  132. package/src/sap/fe/core/messagebundle_uk.properties +2 -1
  133. package/src/sap/fe/core/messagebundle_vi.properties +2 -1
  134. package/src/sap/fe/core/messagebundle_zh_CN.properties +2 -1
  135. package/src/sap/fe/core/messagebundle_zh_TW.properties +2 -1
  136. package/src/sap/fe/core/rootView/RootViewBaseController.js +6 -6
  137. package/src/sap/fe/core/rootView/RootViewBaseController.ts +5 -5
  138. package/src/sap/fe/core/services/RoutingServiceFactory.js +3 -3
  139. package/src/sap/fe/core/services/RoutingServiceFactory.ts +2 -2
  140. package/src/sap/fe/core/services/SideEffectsServiceFactory.js +4 -1
  141. package/src/sap/fe/core/services/SideEffectsServiceFactory.ts +3 -0
  142. package/src/sap/fe/core/services/collaborativeDraftServiceFactory.js +8 -2
  143. package/src/sap/fe/core/services/collaborativeDraftServiceFactory.ts +7 -1
  144. package/src/sap/fe/core/templating/EntitySetHelper.js +75 -90
  145. package/src/sap/fe/core/templating/EntitySetHelper.ts +92 -118
  146. package/src/sap/fe/core/templating/UIFormatters.js +3 -3
  147. package/src/sap/fe/core/templating/UIFormatters.ts +1 -2
  148. package/src/sap/fe/core/controllerextensions/editFlow/operations/facade.js +0 -81
  149. package/src/sap/fe/core/controllerextensions/editFlow/operations/facade.ts +0 -126
  150. package/src/sap/fe/core/controllerextensions/editFlow/operations.js +0 -10
  151. package/src/sap/fe/core/controllerextensions/editFlow/operations.ts +0 -2
  152. package/src/sap/fe/core/controls/inlineEditFlow/BeforeActionDialog.js +0 -68
  153. package/src/sap/fe/core/controls/inlineEditFlow/BeforeActionDialog.tsx +0 -52
  154. package/src/sap/fe/core/controls/inlineEditFlow/BeforeNavigationDialog.js +0 -144
@@ -46,7 +46,7 @@ export default class DataWatcher extends UI5Element {
46
46
  this._initialValue = propertyBinding;
47
47
  this._previousContextPath = this.getBindingContext()?.getPath();
48
48
  }
49
- super.setProperty("propertyBinding", propertyBinding);
49
+ super.setProperty("propertyBinding", propertyBinding, true);
50
50
  this.fireEvent("valueChanged", {
51
51
  value: propertyBinding,
52
52
  oldValue: oldValue,
@@ -53,16 +53,21 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/core/converte
53
53
  const recommendations = [];
54
54
  if (openRecommendations.length > 0) {
55
55
  openRecommendations.forEach(recommendation => {
56
- const context = this.view.getBindingContext();
57
- const propertyPath = recommendation.propertyPath ? recommendation.propertyPath : "";
58
- if (context?.getProperty(propertyPath) === null || context?.getProperty(propertyPath) === undefined || context?.getProperty(propertyPath) == "") {
56
+ const primaryContext = recommendation.context;
57
+ const fallbackContext = this.view.getBindingContext();
58
+ const propertyPath = recommendation.propertyPath ?? "";
59
+ const isEmpty = (ctx, path) => {
60
+ const value = ctx?.getProperty(path);
61
+ return value === null || value === undefined || value === "";
62
+ };
63
+
64
+ // push recommendation if property is empty in both contexts
65
+ if (isEmpty(primaryContext, propertyPath) && isEmpty(fallbackContext, propertyPath)) {
59
66
  recommendations.push(recommendation);
60
67
  }
61
68
  });
62
69
  }
63
70
  return recommendations;
64
- // check if we have recommendations from the current page in the localAnnotationModel
65
- // return open recommendations.
66
71
  }
67
72
 
68
73
  /**
@@ -451,4 +456,4 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/core/converte
451
456
  _exports.ConfirmRecommendationDialog = ConfirmRecommendationDialog;
452
457
  return _exports;
453
458
  }, false);
454
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSZWNvbW1lbmRhdGlvbkRpYWxvZ0RlY2lzaW9uIiwiX2V4cG9ydHMiLCJDb25maXJtUmVjb21tZW5kYXRpb25EaWFsb2ciLCJfZGVjIiwiZGVmaW5lVUk1Q2xhc3MiLCJfZGVjMiIsImRlZmluZVJlZmVyZW5jZSIsIl9jbGFzcyIsIl9jbGFzczIiLCJfTWFuYWdlZE9iamVjdCIsInByb3BzIiwiX3RoaXMiLCJjYWxsIiwiX2luaXRpYWxpemVyRGVmaW5lUHJvcGVydHkiLCJfZGVzY3JpcHRvciIsInZpZXciLCJjb25maXJtUmVjb21tZW5kYXRpb25EaWFsb2dSZXNvdXJjZU1vZGVsIiwiZ2V0UmVzb3VyY2VNb2RlbCIsIl9pbmhlcml0c0xvb3NlIiwiX3Byb3RvIiwicHJvdG90eXBlIiwiZ2V0T3BlblJlY29tbWVuZGF0aW9ucyIsInZpc2libGVDb250ZXh0UGF0aHMiLCJnZXRWaXNpYmxlUGFnZUNvbnRleHRQYXRocyIsIm9wZW5SZWNvbW1lbmRhdGlvbnMiLCJnZXRPcGVuUmVjb21tZW5kYXRpb25zRm9yVmlzaWJsZUNvbnRleHRQYXRocyIsInJlY29tbWVuZGF0aW9ucyIsImxlbmd0aCIsImZvckVhY2giLCJyZWNvbW1lbmRhdGlvbiIsImNvbnRleHQiLCJnZXRCaW5kaW5nQ29udGV4dCIsInByb3BlcnR5UGF0aCIsImdldFByb3BlcnR5IiwidW5kZWZpbmVkIiwicHVzaCIsInZpc2libGVQYWdlQ29udGV4dFBhdGhzIiwiZ2V0UGF0aCIsImNvbnRyb2xsZXIiLCJnZXRDb250cm9sbGVyIiwiZmNsQ29udHJvbGxlciIsImdldEFwcENvbXBvbmVudCIsImdldFJvb3RWaWV3Q29udHJvbGxlciIsImlzRmNsRW5hYmxlZCIsIl9pc0ZjbEVuYWJsZWQiLCJpc0Z1bGxTY3JlZW4iLCJnZXRIZWxwZXIiLCJnZXRDdXJyZW50VUlTdGF0ZSIsInJpZ2h0TW9zdENvbnRleHQiLCJnZXRSaWdodG1vc3RDb250ZXh0IiwiY29udGV4dFBhdGhzIiwibG9jYWxBbm5vdGF0aW9uTW9kZWwiLCJnZXRNb2RlbCIsImdldExvY2FsQW5ub3RhdGlvbk1vZGVsIiwiY29udGV4dFBhdGgiLCJsb2NhbEFubm90YXRpb25PYmplY3QiLCJnZXRPYmplY3QiLCJhbm5vdGF0aW9uT2JqZWN0IiwiZmV0Y2hMb2NhbEFubm90YXRpb25PYmplY3QiLCJyZWNvbW1lbmRhdGlvbk9iamVjdCIsImN1cnJlbnRLZXkiLCJjdXJyZW50VmFsdWUiLCJpbmNsdWRlcyIsImtleXMiLCJNZXRhTW9kZWxDb252ZXJ0ZXIiLCJnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdEVudGl0eUtleXMiLCJjb250ZXh0SWRlbnRpZmllciIsImdldE9wZW5SZWNvbW1lbmRhdGlvbnNGb3JDb250ZXh0IiwiY29udGV4dERhdGEiLCJyZWNvbW1lbmRhdGlvbkNvbnRleHQiLCJjb250ZXh0S2V5IiwiYXJndW1lbnRzIiwiY3VycmVudFZhbHVlSXNDb250ZXh0IiwiaXNBIiwic3BsaXQiLCJvcGVuUmVjb21tZW5kYXRpb24iLCJ2YWx1ZSIsImNvbnRleHRJZGVudGlmaWVyVGV4dCIsImRlc2NyaXB0aW9uIiwidGV4dCIsIkFycmF5IiwiaXNBcnJheSIsIm9wZW4iLCJpc1NhdmUiLCJzdGFuZGFyZFJlY29tbWVuZGF0aW9uSGVscGVyIiwiYWRkQ29udGV4dElkZW50aWZpZXJUZXh0IiwicmVjb21tZW5kYXRpb25EYXRhIiwiYWNjZXB0QWxsUGFyYW1zIiwibGVnYWN5UmVjb21tZW5kYXRpb25zRXhpc3QiLCJjaGVja0lmUmVjb21tZW5kYXRpb25zRXhpc3QiLCJmZXRjaEFjY2VwdEFsbFBhcmFtcyIsImFjY2VwdE1vZGVsIiwiZ2V0QWNjZXB0QWxsTW9kZWwiLCJzZXRNb2RlbCIsImdldERhdGEiLCJpdGVtcyIsIlNraXBwZWQiLCJkaWFsb2ciLCJnZXRDb250ZW50Iiwic2V0RXNjYXBlSGFuZGxlciIsIm9uQ29udGludWVFZGl0aW5nIiwiYmluZCIsImFkZERlcGVuZGVudCIsIlByb21pc2UiLCJyZXNvbHZlIiwicmVqZWN0IiwicHJvbWlzZVJlc29sdmUiLCJwcm9taXNlUmVqZWN0IiwiY2xvc2UiLCJjb25maXJtUmVjb21tZW5kYXRpb25EaWFsb2ciLCJjdXJyZW50IiwiZGVzdHJveSIsIm9uQWNjZXB0QW5kU2F2ZSIsImlzQWNjZXB0ZWQiLCJhY2NlcHRSZWNvbW1lbmRhdGlvbnMiLCJBY2NlcHQiLCJMb2ciLCJlcnJvciIsIm9uSWdub3JlQW5kU2F2ZSIsImlnbm9yZVJlY29tbWVuZGF0aW9uRm9yQ29udGV4dHMiLCJJZ25vcmUiLCJDb250aW51ZSIsImdldEZpZWxkTmFtZSIsInRhcmdldFBhdGgiLCJpbnZvbHZlZERhdGFNb2RlbE9iamVjdCIsImdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0c0ZvclRhcmdldFBhdGgiLCJnZXRNZXRhTW9kZWwiLCJ0YXJnZXRPYmplY3QiLCJhbm5vdGF0aW9ucyIsIkNvbW1vbiIsIkxhYmVsIiwidG9TdHJpbmciLCJnZXRUZXh0IiwiZGlzcGxheU1vZGUiLCJ2YWx1ZUZvcm1hdHRlcnMiLCJmb3JtYXRXaXRoQnJhY2tldHMiLCJnZXRCdXR0b24iLCJ0eXBlIiwicHJlc3NIYW5kbGVyIiwiX2pzeCIsIkJ1dHRvbiIsIndpZHRoIiwicHJlc3MiLCJjaGlsZHJlbiIsImxheW91dERhdGEiLCJfRnJhZ21lbnQiLCJGbGV4SXRlbURhdGEiLCJtaW5XaWR0aCIsImdldEZvb3RlciIsIlRvb2xiYXIiLCJjb250ZW50IiwiX2pzeHMiLCJUb29sYmFyU3BhY2VyIiwiX2dldERpYWxvZ0J1dHRvblRleHQiLCJzYXZlIiwicmVjb21tZW5kYXRpb25EaWFsb2dEZWNpc2lvbiIsImlzQWNjZXB0QnV0dG9uIiwiSGFzQWN0aXZlRW50aXR5IiwiSlNPTk1vZGVsIiwiZW50aXR5TmFtZUxhYmVsIiwiZ2V0RW50aXR5TmFtZSIsImlkZW50aWZpZXJUZXh0cyIsImdldERpc3BsYXlNb2RlRm9yVGFyZ2V0UGF0aCIsImxpc3REYXRhIiwiZmllbGROYW1lIiwidmFsdWVPZiIsImZpZWxkVmFsdWUiLCJzZXREYXRhIiwiZ2V0R3JvdXAiLCJnZXRNZXNzYWdlIiwiYWNjZXB0QWxsRGF0YSIsIm1lc3NhZ2VUZXh0IiwiVGV4dCIsImdldERpYWxvZ0NvbnRlbnQiLCJMaXN0IiwibW9kZWwiLCJwYXRoIiwic29ydGVyIiwiU29ydGVyIiwiQ3VzdG9tTGlzdEl0ZW0iLCJIQm94IiwiY2xhc3MiLCJEaWFsb2ciLCJ0aXRsZSIsInN0YXRlIiwiVmFsdWVTdGF0ZSIsIkluZm9ybWF0aW9uIiwicmVmIiwicmVzaXphYmxlIiwiY29udGVudFdpZHRoIiwiZm9vdGVyIiwiTWFuYWdlZE9iamVjdCIsIl9hcHBseURlY29yYXRlZERlc2NyaXB0b3IiLCJjb25maWd1cmFibGUiLCJlbnVtZXJhYmxlIiwid3JpdGFibGUiLCJpbml0aWFsaXplciJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiQ29uZmlybVJlY29tbWVuZGF0aW9uRGlhbG9nLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFByb3BlcnR5IH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzXCI7XG5pbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCB0eXBlIHsgUHJvcGVydGllc09mIH0gZnJvbSBcInNhcC9mZS9iYXNlL0NsYXNzU3VwcG9ydFwiO1xuaW1wb3J0IHsgZGVmaW5lUmVmZXJlbmNlLCBkZWZpbmVVSTVDbGFzcyB9IGZyb20gXCJzYXAvZmUvYmFzZS9DbGFzc1N1cHBvcnRcIjtcbmltcG9ydCB0eXBlIHsgUmVmIH0gZnJvbSBcInNhcC9mZS9iYXNlL2pzeC1ydW50aW1lL2pzeFwiO1xuaW1wb3J0ICogYXMgTWV0YU1vZGVsQ29udmVydGVyIGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL01ldGFNb2RlbENvbnZlcnRlclwiO1xuaW1wb3J0IHsgZ2V0UmVzb3VyY2VNb2RlbCB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1Jlc291cmNlTW9kZWxIZWxwZXJcIjtcbmltcG9ydCBCdXR0b24gZnJvbSBcInNhcC9tL0J1dHRvblwiO1xuaW1wb3J0IEN1c3RvbUxpc3RJdGVtIGZyb20gXCJzYXAvbS9DdXN0b21MaXN0SXRlbVwiO1xuaW1wb3J0IERpYWxvZyBmcm9tIFwic2FwL20vRGlhbG9nXCI7XG5pbXBvcnQgRmxleEl0ZW1EYXRhIGZyb20gXCJzYXAvbS9GbGV4SXRlbURhdGFcIjtcbmltcG9ydCBIQm94IGZyb20gXCJzYXAvbS9IQm94XCI7XG5pbXBvcnQgTGlzdCBmcm9tIFwic2FwL20vTGlzdFwiO1xuaW1wb3J0IFRleHQgZnJvbSBcInNhcC9tL1RleHRcIjtcbmltcG9ydCBUb29sYmFyIGZyb20gXCJzYXAvbS9Ub29sYmFyXCI7XG5pbXBvcnQgVG9vbGJhclNwYWNlciBmcm9tIFwic2FwL20vVG9vbGJhclNwYWNlclwiO1xuaW1wb3J0IE1hbmFnZWRPYmplY3QgZnJvbSBcInNhcC91aS9iYXNlL01hbmFnZWRPYmplY3RcIjtcbmltcG9ydCB0eXBlIFVJNUVsZW1lbnQgZnJvbSBcInNhcC91aS9jb3JlL0VsZW1lbnRcIjtcbmltcG9ydCB7IFZhbHVlU3RhdGUgfSBmcm9tIFwic2FwL3VpL2NvcmUvbGlicmFyeVwiO1xuaW1wb3J0IHR5cGUgVmlldyBmcm9tIFwic2FwL3VpL2NvcmUvbXZjL1ZpZXdcIjtcbmltcG9ydCBTb3J0ZXIgZnJvbSBcInNhcC91aS9tb2RlbC9Tb3J0ZXJcIjtcbmltcG9ydCBKU09OTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9qc29uL0pTT05Nb2RlbFwiO1xuaW1wb3J0IHR5cGUgeyBkZWZhdWx0IGFzIE9EYXRhVjRDb250ZXh0IH0gZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9Db250ZXh0XCI7XG5pbXBvcnQgdHlwZSBPRGF0YU1ldGFNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTWV0YU1vZGVsXCI7XG5pbXBvcnQgdHlwZSBPRGF0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNb2RlbFwiO1xuaW1wb3J0IHR5cGUgeyBFdmVudEhhbmRsZXIgfSBmcm9tIFwidHlwZXMvZXh0ZW5zaW9uX3R5cGVzXCI7XG5pbXBvcnQgdHlwZSBCYXNlQ29udHJvbGxlciBmcm9tIFwiLi4vLi4vQmFzZUNvbnRyb2xsZXJcIjtcbmltcG9ydCB0eXBlIFBhZ2VDb250cm9sbGVyIGZyb20gXCIuLi8uLi9QYWdlQ29udHJvbGxlclwiO1xuaW1wb3J0IHR5cGUgUmVzb3VyY2VNb2RlbCBmcm9tIFwiLi4vLi4vUmVzb3VyY2VNb2RlbFwiO1xuaW1wb3J0IHR5cGUgeyBBY2NlcHRBbGxQYXJhbXMsIFJlY29tbWVuZGF0aW9uRGF0YSB9IGZyb20gXCIuLi8uLi9jb250cm9sbGVyZXh0ZW5zaW9ucy9SZWNvbW1lbmRhdGlvbnNcIjtcbmltcG9ydCB2YWx1ZUZvcm1hdHRlcnMgZnJvbSBcIi4uLy4uL2Zvcm1hdHRlcnMvVmFsdWVGb3JtYXR0ZXJcIjtcbmltcG9ydCB0eXBlIHsgUmVjb21tZW5kYXRpb25Db250ZXh0c0luZm8gfSBmcm9tIFwiLi4vLi4vaGVscGVycy9TdGFuZGFyZFJlY29tbWVuZGF0aW9uSGVscGVyXCI7XG5pbXBvcnQgeyBzdGFuZGFyZFJlY29tbWVuZGF0aW9uSGVscGVyLCB0eXBlIFN0YW5kYXJkUmVjb21tZW5kYXRpb25EYXRhVHlwZSB9IGZyb20gXCIuLi8uLi9oZWxwZXJzL1N0YW5kYXJkUmVjb21tZW5kYXRpb25IZWxwZXJcIjtcbmltcG9ydCB0eXBlIEZjbENvbnRyb2xsZXIgZnJvbSBcIi4uLy4uL3Jvb3RWaWV3L0ZjbC5jb250cm9sbGVyXCI7XG5cbmV4cG9ydCBlbnVtIFJlY29tbWVuZGF0aW9uRGlhbG9nRGVjaXNpb24ge1xuXHRBY2NlcHQgPSBcIkFjY2VwdF9SZWNvbW1lbmRhdGlvbnNcIixcblx0SWdub3JlID0gXCJJZ25vcmVfUmVjb21tZW5kYXRpb25zXCIsXG5cdENvbnRpbnVlID0gXCJDb250aW51ZV9FZGl0aW5nXCIsXG5cdFNraXBwZWQgPSBcIlNraXBwZWRcIlxufVxuXG5AZGVmaW5lVUk1Q2xhc3MoXCJzYXAuZmUuY29yZS5jb250cm9scy5SZWNvbW1lbmRhdGlvbnMuQ29uZmlybVJlY29tbWVuZGF0aW9uRGlhbG9nXCIpXG5leHBvcnQgY2xhc3MgQ29uZmlybVJlY29tbWVuZGF0aW9uRGlhbG9nIGV4dGVuZHMgTWFuYWdlZE9iamVjdCB7XG5cdGNvbnN0cnVjdG9yKHByb3BzOiBQcm9wZXJ0aWVzT2Y8Q29uZmlybVJlY29tbWVuZGF0aW9uRGlhbG9nPikge1xuXHRcdHN1cGVyKHByb3BzKTtcblx0XHR0aGlzLnZpZXcgPSBwcm9wcy52aWV3IGFzIFZpZXc7XG5cdFx0dGhpcy5jb25maXJtUmVjb21tZW5kYXRpb25EaWFsb2dSZXNvdXJjZU1vZGVsID0gZ2V0UmVzb3VyY2VNb2RlbCh0aGlzLnZpZXcpO1xuXHR9XG5cblx0QGRlZmluZVJlZmVyZW5jZSgpXG5cdGNvbmZpcm1SZWNvbW1lbmRhdGlvbkRpYWxvZyE6IFJlZjxEaWFsb2c+O1xuXG5cdHB1YmxpYyB2aWV3ITogVmlldztcblxuXHRwcml2YXRlIGNvbmZpcm1SZWNvbW1lbmRhdGlvbkRpYWxvZ1Jlc291cmNlTW9kZWwhOiBSZXNvdXJjZU1vZGVsO1xuXG5cdHByb3RlY3RlZCBrZXkhOiBzdHJpbmc7XG5cblx0cHJpdmF0ZSBpc1NhdmUhOiBib29sZWFuO1xuXG5cdHByaXZhdGUgYWNjZXB0QWxsUGFyYW1zITogQWNjZXB0QWxsUGFyYW1zO1xuXG5cdC8qKlxuXHQgKiBSZXNvbHZlcyB0aGUgcHJvbWlzZSB3aXRoIHRoZSBzZWxlY3RlZCBkaWFsb2cgbGlzdCBvcHRpb25cblx0ICovXG5cdHByaXZhdGUgcHJvbWlzZVJlc29sdmUhOiBGdW5jdGlvbjtcblxuXHQvKipcblx0ICogUmVqZWN0cyB0aGUgcHJvbWlzZSBvZiBvcGVuIGRpYWxvZ1xuXHQgKi9cblx0cHVibGljIHByb21pc2VSZWplY3QhOiBGdW5jdGlvbjtcblxuXHQvKipcblx0ICpcblx0ICogQHJldHVybnMgUmVjb21tZW5kYXRpb24gRGF0YVxuXHQgKi9cblxuXHRwdWJsaWMgZ2V0T3BlblJlY29tbWVuZGF0aW9ucygpOiBSZWNvbW1lbmRhdGlvbkRhdGFbXSB7XG5cdFx0Y29uc3QgdmlzaWJsZUNvbnRleHRQYXRocyA9IHRoaXMuZ2V0VmlzaWJsZVBhZ2VDb250ZXh0UGF0aHMoKTtcblx0XHRjb25zdCBvcGVuUmVjb21tZW5kYXRpb25zID0gdGhpcy5nZXRPcGVuUmVjb21tZW5kYXRpb25zRm9yVmlzaWJsZUNvbnRleHRQYXRocyh2aXNpYmxlQ29udGV4dFBhdGhzKTtcblx0XHRjb25zdCByZWNvbW1lbmRhdGlvbnM6IFJlY29tbWVuZGF0aW9uRGF0YVtdID0gW107XG5cdFx0aWYgKG9wZW5SZWNvbW1lbmRhdGlvbnMubGVuZ3RoID4gMCkge1xuXHRcdFx0b3BlblJlY29tbWVuZGF0aW9ucy5mb3JFYWNoKChyZWNvbW1lbmRhdGlvbikgPT4ge1xuXHRcdFx0XHRjb25zdCBjb250ZXh0ID0gdGhpcy52aWV3LmdldEJpbmRpbmdDb250ZXh0KCk7XG5cdFx0XHRcdGNvbnN0IHByb3BlcnR5UGF0aDogc3RyaW5nID0gcmVjb21tZW5kYXRpb24ucHJvcGVydHlQYXRoID8gcmVjb21tZW5kYXRpb24ucHJvcGVydHlQYXRoIDogXCJcIjtcblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdGNvbnRleHQ/LmdldFByb3BlcnR5KHByb3BlcnR5UGF0aCkgPT09IG51bGwgfHxcblx0XHRcdFx0XHRjb250ZXh0Py5nZXRQcm9wZXJ0eShwcm9wZXJ0eVBhdGgpID09PSB1bmRlZmluZWQgfHxcblx0XHRcdFx0XHRjb250ZXh0Py5nZXRQcm9wZXJ0eShwcm9wZXJ0eVBhdGgpID09IFwiXCJcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0cmVjb21tZW5kYXRpb25zLnB1c2gocmVjb21tZW5kYXRpb24pO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0cmV0dXJuIHJlY29tbWVuZGF0aW9ucztcblx0XHQvLyBjaGVjayBpZiB3ZSBoYXZlIHJlY29tbWVuZGF0aW9ucyBmcm9tIHRoZSBjdXJyZW50IHBhZ2UgaW4gdGhlIGxvY2FsQW5ub3RhdGlvbk1vZGVsXG5cdFx0Ly8gcmV0dXJuIG9wZW4gcmVjb21tZW5kYXRpb25zLlxuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEByZXR1cm5zIENvbGxlY3Rpb24gb2YgY29udGV4dCBwYXRoc1xuXHQgKi9cblxuXHRwdWJsaWMgZ2V0VmlzaWJsZVBhZ2VDb250ZXh0UGF0aHMoKTogKHN0cmluZyB8IHVuZGVmaW5lZClbXSB7XG5cdFx0Y29uc3QgdmlzaWJsZVBhZ2VDb250ZXh0UGF0aHMgPSBbdGhpcy52aWV3LmdldEJpbmRpbmdDb250ZXh0KCk/LmdldFBhdGgoKV07XG5cdFx0Y29uc3QgY29udHJvbGxlciA9IHRoaXMudmlldy5nZXRDb250cm9sbGVyKCkgYXMgQmFzZUNvbnRyb2xsZXI7XG5cdFx0Y29uc3QgZmNsQ29udHJvbGxlciA9IGNvbnRyb2xsZXIuZ2V0QXBwQ29tcG9uZW50KCkuZ2V0Um9vdFZpZXdDb250cm9sbGVyKCkgYXMgRmNsQ29udHJvbGxlcjtcblx0XHRjb25zdCBpc0ZjbEVuYWJsZWQgPSBjb250cm9sbGVyLmdldEFwcENvbXBvbmVudCgpLl9pc0ZjbEVuYWJsZWQoKTtcblx0XHRjb25zdCBpc0Z1bGxTY3JlZW4gPSBpc0ZjbEVuYWJsZWQgPyBmY2xDb250cm9sbGVyLmdldEhlbHBlcigpLmdldEN1cnJlbnRVSVN0YXRlKCkuaXNGdWxsU2NyZWVuIDogdHJ1ZTtcblx0XHRpZiAoaXNGY2xFbmFibGVkICYmICFpc0Z1bGxTY3JlZW4pIHtcblx0XHRcdGNvbnN0IHJpZ2h0TW9zdENvbnRleHQgPSBmY2xDb250cm9sbGVyLmdldFJpZ2h0bW9zdENvbnRleHQoKTtcblx0XHRcdHZpc2libGVQYWdlQ29udGV4dFBhdGhzLnB1c2gocmlnaHRNb3N0Q29udGV4dD8uZ2V0UGF0aCgpKTtcblx0XHR9XG5cdFx0cmV0dXJuIHZpc2libGVQYWdlQ29udGV4dFBhdGhzO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEBwYXJhbSBjb250ZXh0UGF0aHMgUGF0aHMgb2YgdGhlIGNvbnRleHRzXG5cdCAqIEByZXR1cm5zIFJlY29tbWVuZGF0aW9uRGF0YSBmb3IgdmlzaWJsZSBjb250ZXh0c1xuXHQgKi9cblx0cHVibGljIGdldE9wZW5SZWNvbW1lbmRhdGlvbnNGb3JWaXNpYmxlQ29udGV4dFBhdGhzKGNvbnRleHRQYXRoczogKHN0cmluZyB8IHVuZGVmaW5lZClbXSk6IFJlY29tbWVuZGF0aW9uRGF0YVtdIHtcblx0XHRjb25zdCBvcGVuUmVjb21tZW5kYXRpb25zOiBSZWNvbW1lbmRhdGlvbkRhdGFbXSA9IFtdO1xuXHRcdGlmIChjb250ZXh0UGF0aHMubGVuZ3RoID4gMCkge1xuXHRcdFx0Y29uc3QgbG9jYWxBbm5vdGF0aW9uTW9kZWwgPSAodGhpcy52aWV3LmdldE1vZGVsKCkgYXMgT0RhdGFNb2RlbCkuZ2V0TG9jYWxBbm5vdGF0aW9uTW9kZWwoKTtcblx0XHRcdC8vIGNoZWNrIGNvbnRleHQgcGF0aHMgaW4gbG9jYWwgYW5ub3RhdGlvbiBtb2RlbHMgd2hpY2ggbWF0Y2ggdG9cblx0XHRcdC8vIDEuIGN1cnJlbnQgcGFnZSBhbmRcblx0XHRcdC8vIDIuIGltbWVkaWF0ZSBjaGlsZHJlbiBvZiB0aGUgY3VycmVudCBwYWdlXG5cdFx0XHQvLyBOZWVkIHRvIGNvbnNpZGVyIGFsc28gaW1tZWRpYXRlIGNoaWxkcmVuXG5cdFx0XHQvLyBpdGVyYXRlIG92ZXIgYWxsIGtleXNcblx0XHRcdGNvbnRleHRQYXRocy5mb3JFYWNoKChjb250ZXh0UGF0aCkgPT4ge1xuXHRcdFx0XHRpZiAoY29udGV4dFBhdGggIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdGNvbnN0IGxvY2FsQW5ub3RhdGlvbk9iamVjdCA9IGxvY2FsQW5ub3RhdGlvbk1vZGVsLmdldE9iamVjdChjb250ZXh0UGF0aCk7XG5cdFx0XHRcdFx0aWYgKGxvY2FsQW5ub3RhdGlvbk9iamVjdCkge1xuXHRcdFx0XHRcdFx0Y29uc3QgYW5ub3RhdGlvbk9iamVjdCA9IGxvY2FsQW5ub3RhdGlvbk9iamVjdDtcblx0XHRcdFx0XHRcdC8qKlxuXHRcdFx0XHRcdFx0ICogVGhlIGxvY2FsIGFubm90YXRpb24gb2JqZWN0IHdpbGwgYmUgb2YgdGhlIGZvbGxvd2luZyBzdHJ1Y3R1cmUgOlxuXHRcdFx0XHRcdFx0ICoge1xuXHRcdFx0XHRcdFx0ICogXCJQcm9wZXJ0eU5hbWVAJHVpNS5mZS5yZWNvbW1lbmRhdGlvbnMucGxhY2Vob2xkZXJEZXNjcmlwdGlvblwiOiBWYWx1ZVxuXHRcdFx0XHRcdFx0ICogXCJQcm9wZXJ0eU5hbWVAJHVpNS5mZS5yZWNvbW1lbmRhdGlvbnMucGxhY2Vob2xkZXJWYWx1ZVwiOiBWYWx1ZVxuXHRcdFx0XHRcdFx0ICogXCJQcm9wZXJ0eU5hbWVAJHVpNS5mZS5yZWNvbW1lbmRhdGlvbnMudHlwZUFoZWFkVmFsdWVzXCI6IFZhbHVlXG5cdFx0XHRcdFx0XHQgKiBQcm9wZXJ0eU5hbWU6IHtcblx0XHRcdFx0XHRcdCAqIFx0XHRcIlByb3BlcnR5TmFtZUAkdWk1LmZlLnJlY29tbWVuZGF0aW9ucy5wbGFjZWhvbGRlckRlc2NyaXB0aW9uXCI6IFZhbHVlXG5cdFx0XHRcdFx0XHQgKiBcdFx0XCJQcm9wZXJ0eU5hbWVAJHVpNS5mZS5yZWNvbW1lbmRhdGlvbnMucGxhY2Vob2xkZXJWYWx1ZVwiOiBWYWx1ZVxuXHRcdFx0XHRcdFx0ICogXHRcdFwiUHJvcGVydHlOYW1lQCR1aTUuZmUucmVjb21tZW5kYXRpb25zLnR5cGVBaGVhZFZhbHVlc1wiOiBWYWx1ZVxuXHRcdFx0XHRcdFx0ICogXHRcdHJlY29tbWVuZGF0aW9uQ29udGV4dDp7IGNvbnRleHQgfVxuXHRcdFx0XHRcdFx0ICogXHQgfVxuXHRcdFx0XHRcdFx0ICogcmVjb21tZW5kYXRpb25Db250ZXh0OnsgY29udGV4dCB9XG5cdFx0XHRcdFx0XHQgKiB9XG5cdFx0XHRcdFx0XHQgKlxuXHRcdFx0XHRcdFx0ICogc28gaW4gb3JkZXIgdG8gZ2V0IHRoZSByZWNvbW1lbmRhdGlvbnMgYXMgcGVyIGVhY2ggY29udGV4dCAtIGZvciBwYXJlbnQvY2hpbGQgZW50aXRpZXMgd2UgbmVlZCB0byBpdGVyYXRlIG92ZXIgZWFjaCBrZXlzIHJlY3Vyc2l2ZWx5IGluIHRoZSBmZXRjaExvY2FsQW5ub3RhdGlvbk9iamVjdCBmdW5jdGlvbixcblx0XHRcdFx0XHRcdCAqIGZvcm0gdGhlIGNvcnJlc3BvbmRpbmcgc3RydWN0dXJlIGFuZCB0aGVuIHNlbmQgaXQgZm9yIGdldHRpbmcgdGhlIHJlY29tbWVuZGF0aW9ucyBhY2NvcmRpbmdseS5cblx0XHRcdFx0XHRcdCAqL1xuXHRcdFx0XHRcdFx0dGhpcy5mZXRjaExvY2FsQW5ub3RhdGlvbk9iamVjdChhbm5vdGF0aW9uT2JqZWN0LCBvcGVuUmVjb21tZW5kYXRpb25zKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblx0XHRyZXR1cm4gb3BlblJlY29tbWVuZGF0aW9ucztcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcGFyYW0gYW5ub3RhdGlvbk9iamVjdFxuXHQgKiBAcGFyYW0gb3BlblJlY29tbWVuZGF0aW9ucyBSZWNvbW1lbmRhdGlvbiBEYXRhXG5cdCAqL1xuXG5cdHByaXZhdGUgZmV0Y2hMb2NhbEFubm90YXRpb25PYmplY3QoYW5ub3RhdGlvbk9iamVjdDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sIG9wZW5SZWNvbW1lbmRhdGlvbnM6IFJlY29tbWVuZGF0aW9uRGF0YVtdKTogdm9pZCB7XG5cdFx0aWYgKGFubm90YXRpb25PYmplY3RbXCJyZWNvbW1lbmRhdGlvbkNvbnRleHRcIl0pIHtcblx0XHRcdGNvbnN0IHJlY29tbWVuZGF0aW9uT2JqZWN0OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHt9O1xuXHRcdFx0cmVjb21tZW5kYXRpb25PYmplY3RbXCJyZWNvbW1lbmRhdGlvbkNvbnRleHRcIl0gPSBhbm5vdGF0aW9uT2JqZWN0W1wicmVjb21tZW5kYXRpb25Db250ZXh0XCJdIGFzIE9EYXRhVjRDb250ZXh0O1xuXHRcdFx0Zm9yIChjb25zdCBjdXJyZW50S2V5IGluIGFubm90YXRpb25PYmplY3QpIHtcblx0XHRcdFx0Y29uc3QgY3VycmVudFZhbHVlID0gYW5ub3RhdGlvbk9iamVjdFtjdXJyZW50S2V5XTtcblx0XHRcdFx0aWYgKGN1cnJlbnRWYWx1ZSkge1xuXHRcdFx0XHRcdGlmICgoY3VycmVudFZhbHVlIGFzIFJlY29yZDxzdHJpbmcsIE9EYXRhVjRDb250ZXh0PilbXCJyZWNvbW1lbmRhdGlvbkNvbnRleHRcIl0pIHtcblx0XHRcdFx0XHRcdHRoaXMuZmV0Y2hMb2NhbEFubm90YXRpb25PYmplY3QoYW5ub3RhdGlvbk9iamVjdFtjdXJyZW50S2V5XSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiwgb3BlblJlY29tbWVuZGF0aW9ucyk7XG5cdFx0XHRcdFx0fSBlbHNlIGlmIChcblx0XHRcdFx0XHRcdGN1cnJlbnRLZXkuaW5jbHVkZXMoXCJAJHVpNS5mZS5yZWNvbW1lbmRhdGlvbnMucGxhY2Vob2xkZXJWYWx1ZVwiKSB8fFxuXHRcdFx0XHRcdFx0Y3VycmVudEtleS5pbmNsdWRlcyhcIkAkdWk1LmZlLnJlY29tbWVuZGF0aW9ucy5wbGFjZWhvbGRlckRlc2NyaXB0aW9uXCIpIHx8XG5cdFx0XHRcdFx0XHRjdXJyZW50S2V5LmluY2x1ZGVzKFwiQCR1aTUuZmUucmVjb21tZW5kYXRpb25zLnR5cGVBaGVhZFZhbHVlc1wiKVxuXHRcdFx0XHRcdCkge1xuXHRcdFx0XHRcdFx0cmVjb21tZW5kYXRpb25PYmplY3RbY3VycmVudEtleV0gPSBjdXJyZW50VmFsdWU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBrZXlzID0gTWV0YU1vZGVsQ29udmVydGVyLmdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0RW50aXR5S2V5cyhcblx0XHRcdFx0cmVjb21tZW5kYXRpb25PYmplY3RbXCJyZWNvbW1lbmRhdGlvbkNvbnRleHRcIl0gYXMgT0RhdGFWNENvbnRleHRcblx0XHRcdCk7XG5cdFx0XHQocmVjb21tZW5kYXRpb25PYmplY3RbXCJyZWNvbW1lbmRhdGlvbkNvbnRleHRcIl0gYXMgUmVjb21tZW5kYXRpb25Db250ZXh0c0luZm8pLmNvbnRleHRJZGVudGlmaWVyID0ga2V5c1tcInNlbWFudGljS2V5c1wiXVxuXHRcdFx0XHQ/IGtleXNbXCJzZW1hbnRpY0tleXNcIl1cblx0XHRcdFx0OiBrZXlzW1widGVjaG5pY2FsS2V5c1wiXTtcblx0XHRcdHRoaXMuZ2V0T3BlblJlY29tbWVuZGF0aW9uc0ZvckNvbnRleHQoXG5cdFx0XHRcdHJlY29tbWVuZGF0aW9uT2JqZWN0LFxuXHRcdFx0XHRyZWNvbW1lbmRhdGlvbk9iamVjdFtcInJlY29tbWVuZGF0aW9uQ29udGV4dFwiXSBhcyBPRGF0YVY0Q29udGV4dCxcblx0XHRcdFx0b3BlblJlY29tbWVuZGF0aW9uc1xuXHRcdFx0KTtcblx0XHR9XG5cdH1cblx0LyoqXG5cdCAqXG5cdCAqIEBwYXJhbSBjb250ZXh0RGF0YSBUaGUgY29udGV4dCBkYXRhIG9iamVjdCBmb3IgcmVjb21tZW5kYXRpb25zXG5cdCAqIEBwYXJhbSByZWNvbW1lbmRhdGlvbkNvbnRleHQgVGhlIHJlY29tbWVuZGF0aW9uIGNvbnRleHRcblx0ICogQHBhcmFtIG9wZW5SZWNvbW1lbmRhdGlvbnMgUmVjb21tZW5kYXRpb25EYXRhXG5cdCAqIEBwYXJhbSBjb250ZXh0S2V5IENvbnRleHQgS2V5XG5cdCAqL1xuXG5cdHByaXZhdGUgZ2V0T3BlblJlY29tbWVuZGF0aW9uc0ZvckNvbnRleHQoXG5cdFx0Y29udGV4dERhdGE6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuXHRcdHJlY29tbWVuZGF0aW9uQ29udGV4dDogT0RhdGFWNENvbnRleHQsXG5cdFx0b3BlblJlY29tbWVuZGF0aW9uczogUmVjb21tZW5kYXRpb25EYXRhW10sXG5cdFx0Y29udGV4dEtleSA9IFwiXCJcblx0KTogdm9pZCB7XG5cdFx0Zm9yIChjb25zdCBjdXJyZW50S2V5IGluIGNvbnRleHREYXRhKSB7XG5cdFx0XHRjb25zdCBjdXJyZW50VmFsdWUgPSBjb250ZXh0RGF0YVtjdXJyZW50S2V5XTtcblx0XHRcdGlmIChjdXJyZW50VmFsdWUpIHtcblx0XHRcdFx0Y29uc3QgY3VycmVudFZhbHVlSXNDb250ZXh0ID1cblx0XHRcdFx0XHQoY3VycmVudFZhbHVlIGFzIE9EYXRhVjRDb250ZXh0KS5pc0EgJiYgKGN1cnJlbnRWYWx1ZSBhcyBPRGF0YVY0Q29udGV4dCkuaXNBKFwic2FwLnVpLm1vZGVsLm9kYXRhLnY0LkNvbnRleHRcIik7XG5cdFx0XHRcdGlmIChjdXJyZW50S2V5LmluY2x1ZGVzKFwiQCR1aTUuZmUucmVjb21tZW5kYXRpb25zLnBsYWNlaG9sZGVyVmFsdWVcIikpIHtcblx0XHRcdFx0XHRjb25zdCBwcm9wZXJ0eVBhdGggPSBjdXJyZW50S2V5LnNwbGl0KFwiQCR1aTUuZmUucmVjb21tZW5kYXRpb25zLnBsYWNlaG9sZGVyVmFsdWVcIilbMF07XG5cdFx0XHRcdFx0Y29uc3Qgb3BlblJlY29tbWVuZGF0aW9uOiBSZWNvbW1lbmRhdGlvbkRhdGEgPSB7XG5cdFx0XHRcdFx0XHRjb250ZXh0OiByZWNvbW1lbmRhdGlvbkNvbnRleHQsXG5cdFx0XHRcdFx0XHRwcm9wZXJ0eVBhdGg6IGNvbnRleHRLZXkgPyBgJHtjb250ZXh0S2V5fS8ke3Byb3BlcnR5UGF0aH1gIDogcHJvcGVydHlQYXRoLFxuXHRcdFx0XHRcdFx0dmFsdWU6IGN1cnJlbnRWYWx1ZSBhcyBzdHJpbmcsXG5cdFx0XHRcdFx0XHRjb250ZXh0SWRlbnRpZmllcjogKHJlY29tbWVuZGF0aW9uQ29udGV4dCBhcyBSZWNvbW1lbmRhdGlvbkNvbnRleHRzSW5mbykuY29udGV4dElkZW50aWZpZXIsXG5cdFx0XHRcdFx0XHRjb250ZXh0SWRlbnRpZmllclRleHQ6IFtdXG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRjb25zdCBkZXNjcmlwdGlvbiA9IGNvbnRleHREYXRhW2Ake3Byb3BlcnR5UGF0aH1AJHVpNS5mZS5yZWNvbW1lbmRhdGlvbnMucGxhY2Vob2xkZXJEZXNjcmlwdGlvbmBdO1xuXHRcdFx0XHRcdGlmIChkZXNjcmlwdGlvbikge1xuXHRcdFx0XHRcdFx0b3BlblJlY29tbWVuZGF0aW9uLnRleHQgPSBkZXNjcmlwdGlvbiBhcyBzdHJpbmc7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdG9wZW5SZWNvbW1lbmRhdGlvbnMucHVzaChvcGVuUmVjb21tZW5kYXRpb24pO1xuXHRcdFx0XHR9IGVsc2UgaWYgKHR5cGVvZiBjdXJyZW50VmFsdWUgPT09IFwib2JqZWN0XCIgJiYgIUFycmF5LmlzQXJyYXkoY3VycmVudFZhbHVlKSAmJiAhY3VycmVudFZhbHVlSXNDb250ZXh0KSB7XG5cdFx0XHRcdFx0dGhpcy5nZXRPcGVuUmVjb21tZW5kYXRpb25zRm9yQ29udGV4dChcblx0XHRcdFx0XHRcdGN1cnJlbnRWYWx1ZSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcblx0XHRcdFx0XHRcdHJlY29tbWVuZGF0aW9uQ29udGV4dCxcblx0XHRcdFx0XHRcdG9wZW5SZWNvbW1lbmRhdGlvbnMsXG5cdFx0XHRcdFx0XHRjdXJyZW50S2V5XG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBPcGVucyB0aGUgY29uZmlybSByZWNvbW1lbmRhdGlvbnMgZGlhbG9nLlxuXHQgKiBAcGFyYW0gaXNTYXZlIEJvb2xlYW4gZmxhZyB3aGljaCB3b3VsZCBiZSBzZXQgdG8gdHJ1ZSBpZiB3ZSBhcmUgc2F2aW5nIHRoZSBkb2N1bWVudCBhbmQgd291bGQgYmUgZmFsc2UgaWYgd2UgZG8gYXBwbHkgY2hhbmdlc1xuXHQgKiBAcmV0dXJucyBQcm9taXNlIHdoaWNoIHdvdWxkIHJlc29sdmUgd2l0aCBSZWNvbW1lbmRhdGlvbkRpYWxvZ0RlY2lzaW9uIChBY2NlcHQsIElnbm9yZSwgQ29udGludWUsIFNraXBwZWQpXG5cdCAqL1xuXHRwdWJsaWMgYXN5bmMgb3Blbihpc1NhdmU6IGJvb2xlYW4pOiBQcm9taXNlPFJlY29tbWVuZGF0aW9uRGlhbG9nRGVjaXNpb24gfCB1bmRlZmluZWQ+IHtcblx0XHQvLyBjaGVjayBmb3IgYnVpbHQtaW4gcmVjb21tZW5kYXRpb25zXG5cdFx0Y29uc3Qgb3BlblJlY29tbWVuZGF0aW9ucyA9IHRoaXMuZ2V0T3BlblJlY29tbWVuZGF0aW9ucygpO1xuXHRcdGlmIChvcGVuUmVjb21tZW5kYXRpb25zLmxlbmd0aCA+IDApIHtcblx0XHRcdHN0YW5kYXJkUmVjb21tZW5kYXRpb25IZWxwZXIuYWRkQ29udGV4dElkZW50aWZpZXJUZXh0KFxuXHRcdFx0XHR7IHJlY29tbWVuZGF0aW9uRGF0YTogb3BlblJlY29tbWVuZGF0aW9ucyB9LFxuXHRcdFx0XHR0aGlzLnZpZXcuZ2V0QmluZGluZ0NvbnRleHQoKT8uZ2V0UGF0aCgpXG5cdFx0XHQpO1xuXHRcdFx0dGhpcy5hY2NlcHRBbGxQYXJhbXMgPSB7XG5cdFx0XHRcdHJlY29tbWVuZGF0aW9uRGF0YTogb3BlblJlY29tbWVuZGF0aW9uc1xuXHRcdFx0fTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gaWYgYnVpbHQtaW4gcmVjb21tZW5kYXRpb25zIGFyZSBub3QgZm91bmQgdGhlbiBjaGVjayBmb3IgbGVnYWN5IHJlY29tbWVuZGF0aW9ucy5cblx0XHRcdGNvbnN0IGxlZ2FjeVJlY29tbWVuZGF0aW9uc0V4aXN0ID0gKHRoaXMudmlldz8uZ2V0Q29udHJvbGxlcigpIGFzIFBhZ2VDb250cm9sbGVyKS5yZWNvbW1lbmRhdGlvbnMuY2hlY2tJZlJlY29tbWVuZGF0aW9uc0V4aXN0KCk7XG5cdFx0XHRpZiAobGVnYWN5UmVjb21tZW5kYXRpb25zRXhpc3QpIHtcblx0XHRcdFx0dGhpcy5hY2NlcHRBbGxQYXJhbXMgPSBhd2FpdCAodGhpcy52aWV3Py5nZXRDb250cm9sbGVyKCkgYXMgUGFnZUNvbnRyb2xsZXIpLnJlY29tbWVuZGF0aW9ucy5mZXRjaEFjY2VwdEFsbFBhcmFtcygpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHRcdH1cblx0XHR9XG5cdFx0Y29uc3QgYWNjZXB0TW9kZWwgPSB0aGlzLmdldEFjY2VwdEFsbE1vZGVsKCk7XG5cdFx0dGhpcy52aWV3LnNldE1vZGVsKGFjY2VwdE1vZGVsLCBcIl9hY2NlcHREaWFsb2dNb2RlbFwiKTtcblx0XHRpZiAoIWFjY2VwdE1vZGVsLmdldERhdGEoKS5pdGVtcz8ubGVuZ3RoKSB7XG5cdFx0XHRyZXR1cm4gUmVjb21tZW5kYXRpb25EaWFsb2dEZWNpc2lvbi5Ta2lwcGVkO1xuXHRcdH1cblx0XHR0aGlzLmlzU2F2ZSA9IGlzU2F2ZTtcblx0XHRjb25zdCBkaWFsb2cgPSB0aGlzLmdldENvbnRlbnQoKTtcblx0XHRkaWFsb2c/LnNldEVzY2FwZUhhbmRsZXIodGhpcy5vbkNvbnRpbnVlRWRpdGluZy5iaW5kKHRoaXMpKTtcblx0XHR0aGlzLnZpZXcuYWRkRGVwZW5kZW50KGRpYWxvZyBhcyBVSTVFbGVtZW50KTtcblx0XHRkaWFsb2c/Lm9wZW4oKTtcblx0XHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXHRcdFx0dGhpcy5wcm9taXNlUmVzb2x2ZSA9IHJlc29sdmU7XG5cdFx0XHR0aGlzLnByb21pc2VSZWplY3QgPSByZWplY3Q7XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogSGFuZGxlciB0byBjbG9zZSB0aGUgY29uZmlybVJlY29tbWVuZGF0aW9uIGRpYWxvZy5cblx0ICpcblx0ICovXG5cdHB1YmxpYyBjbG9zZSgpOiB2b2lkIHtcblx0XHR0aGlzLmNvbmZpcm1SZWNvbW1lbmRhdGlvbkRpYWxvZy5jdXJyZW50Py5jbG9zZSgpO1xuXHRcdHRoaXMuY29uZmlybVJlY29tbWVuZGF0aW9uRGlhbG9nLmN1cnJlbnQ/LmRlc3Ryb3koKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBIYW5kbGVyIGZvciBBY2NlcHQgYW5kIFNhdmUgYnV0dG9uLlxuXHQgKi9cblx0cHJpdmF0ZSBhc3luYyBvbkFjY2VwdEFuZFNhdmUoKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0dHJ5IHtcblx0XHRcdGNvbnN0IGlzQWNjZXB0ZWQgPSBhd2FpdCAodGhpcy52aWV3Py5nZXRDb250cm9sbGVyKCkgYXMgUGFnZUNvbnRyb2xsZXIpLnJlY29tbWVuZGF0aW9ucy5hY2NlcHRSZWNvbW1lbmRhdGlvbnMoXG5cdFx0XHRcdHRoaXMuYWNjZXB0QWxsUGFyYW1zXG5cdFx0XHQpO1xuXHRcdFx0aWYgKCFpc0FjY2VwdGVkKSB7XG5cdFx0XHRcdHRoaXMucHJvbWlzZVJlamVjdChcIkFjY2VwdCBGYWlsZWRcIik7XG5cdFx0XHR9XG5cdFx0XHR0aGlzLnByb21pc2VSZXNvbHZlKFJlY29tbWVuZGF0aW9uRGlhbG9nRGVjaXNpb24uQWNjZXB0KTtcblx0XHR9IGNhdGNoIHtcblx0XHRcdExvZy5lcnJvcihcIkFjY2VwdCBSZWNvbW1lbmRhdGlvbnMgRmFpbGVkXCIpO1xuXHRcdFx0dGhpcy5wcm9taXNlUmVqZWN0KFwiQWNjZXB0IEZhaWxlZFwiKTtcblx0XHR9IGZpbmFsbHkge1xuXHRcdFx0dGhpcy5jbG9zZSgpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBIYW5kbGVyIGZvciBJZ25vcmUgYW5kIFNhdmUgYnV0dG9uLlxuXHQgKi9cblx0cHJpdmF0ZSBvbklnbm9yZUFuZFNhdmUoKTogdm9pZCB7XG5cdFx0KHRoaXMudmlldz8uZ2V0Q29udHJvbGxlcigpIGFzIFBhZ2VDb250cm9sbGVyKS5yZWNvbW1lbmRhdGlvbnMuaWdub3JlUmVjb21tZW5kYXRpb25Gb3JDb250ZXh0cygpO1xuXHRcdHRoaXMucHJvbWlzZVJlc29sdmUoUmVjb21tZW5kYXRpb25EaWFsb2dEZWNpc2lvbi5JZ25vcmUpO1xuXHRcdHRoaXMuY2xvc2UoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBIYW5kbGVyIGZvciBDb250aW51ZSBFZGl0aW5nIGJ1dHRvbi5cblx0ICovXG5cdHByaXZhdGUgb25Db250aW51ZUVkaXRpbmcoKTogdm9pZCB7XG5cdFx0dGhpcy5wcm9taXNlUmVzb2x2ZShSZWNvbW1lbmRhdGlvbkRpYWxvZ0RlY2lzaW9uLkNvbnRpbnVlKTtcblx0XHR0aGlzLmNsb3NlKCk7XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgbGFiZWwgb3IgbmFtZSBvZiB0aGUgRmllbGQgYmFzZWQgb24gaXRzIHByb3BlcnR5IHBhdGguXG5cdCAqIEBwYXJhbSB0YXJnZXRQYXRoXG5cdCAqIEByZXR1cm5zIFJldHVybnMgdGhlIGxhYmVsIG9mIHRoZSBGaWVsZC5cblx0ICovXG5cdHByaXZhdGUgZ2V0RmllbGROYW1lKHRhcmdldFBhdGg6IHN0cmluZyk6IHN0cmluZyB7XG5cdFx0Y29uc3QgaW52b2x2ZWREYXRhTW9kZWxPYmplY3QgPSBNZXRhTW9kZWxDb252ZXJ0ZXIuZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzRm9yVGFyZ2V0UGF0aDxQcm9wZXJ0eT4oXG5cdFx0XHR0YXJnZXRQYXRoLFxuXHRcdFx0dGhpcy52aWV3Py5nZXRCaW5kaW5nQ29udGV4dCgpPy5nZXRNb2RlbCgpPy5nZXRNZXRhTW9kZWwoKSBhcyBPRGF0YU1ldGFNb2RlbFxuXHRcdCk7XG5cdFx0cmV0dXJuIChcblx0XHRcdGludm9sdmVkRGF0YU1vZGVsT2JqZWN0Py50YXJnZXRPYmplY3Q/LmFubm90YXRpb25zPy5Db21tb24/LkxhYmVsPy50b1N0cmluZygpIHx8XG5cdFx0XHR0YXJnZXRQYXRoLnNwbGl0KFwiL1wiKVt0YXJnZXRQYXRoLnNwbGl0KFwiL1wiKS5sZW5ndGggLSAxXVxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICogRmV0Y2hlcyB0ZXh0IGZvciByZWNvbW1lbmRhdGlvbiBiYXNlZCBvbiBkaXNwbGF5IG1vZGUuXG5cdCAqIEBwYXJhbSByZWNvbW1lbmRhdGlvblxuXHQgKiBAcGFyYW0gZGlzcGxheU1vZGVcblx0ICogQHJldHVybnMgVGV4dCBmb3IgYSByZWNvbW1lbmRhdGlvblxuXHQgKi9cblx0cHJpdmF0ZSBnZXRUZXh0KHJlY29tbWVuZGF0aW9uOiBTdGFuZGFyZFJlY29tbWVuZGF0aW9uRGF0YVR5cGUsIGRpc3BsYXlNb2RlOiBzdHJpbmcpOiBzdHJpbmcge1xuXHRcdGlmIChyZWNvbW1lbmRhdGlvbi50ZXh0IHx8IHJlY29tbWVuZGF0aW9uLnZhbHVlKSB7XG5cdFx0XHRzd2l0Y2ggKGRpc3BsYXlNb2RlKSB7XG5cdFx0XHRcdGNhc2UgXCJEZXNjcmlwdGlvblwiOlxuXHRcdFx0XHRcdHJldHVybiByZWNvbW1lbmRhdGlvbi50ZXh0ITtcblx0XHRcdFx0Y2FzZSBcIkRlc2NyaXB0aW9uVmFsdWVcIjpcblx0XHRcdFx0XHRyZXR1cm4gdmFsdWVGb3JtYXR0ZXJzLmZvcm1hdFdpdGhCcmFja2V0cyhyZWNvbW1lbmRhdGlvbi50ZXh0LCByZWNvbW1lbmRhdGlvbi52YWx1ZSk7XG5cdFx0XHRcdGNhc2UgXCJWYWx1ZURlc2NyaXB0aW9uXCI6XG5cdFx0XHRcdFx0cmV0dXJuIHZhbHVlRm9ybWF0dGVycy5mb3JtYXRXaXRoQnJhY2tldHMocmVjb21tZW5kYXRpb24udmFsdWUsIHJlY29tbWVuZGF0aW9uLnRleHQpO1xuXHRcdFx0XHRjYXNlIFwiVmFsdWVcIjpcblx0XHRcdFx0XHRyZXR1cm4gcmVjb21tZW5kYXRpb24udmFsdWUhO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gcmVjb21tZW5kYXRpb24udmFsdWUgfHwgXCJcIjtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIEJ1dHRvbiB3aXRoIGdpdmVuIHRleHQsIHR5cGUgYW5kIHByZXNzSGFuZGxlci5cblx0ICogQHBhcmFtIHRleHQgVGV4dCBmb3IgdGhlIGJ1dHRvblxuXHQgKiBAcGFyYW0gdHlwZSBUeXBlIG9mIHRoZSBidXR0b25cblx0ICogQHBhcmFtIHByZXNzSGFuZGxlciBQcmVzcyBIYW5kbGVyIGZvciB0aGUgYnV0dG9uXG5cdCAqIEByZXR1cm5zIEJ1dHRvbiB3aXRoIHRoZSBnaXZlbiBzZXR0aW5nc1xuXHQgKi9cblx0cHJpdmF0ZSBnZXRCdXR0b24odGV4dDogc3RyaW5nLCB0eXBlOiBzdHJpbmcsIHByZXNzSGFuZGxlcjogRXZlbnRIYW5kbGVyKTogQnV0dG9uIHtcblx0XHRyZXR1cm4gKFxuXHRcdFx0PEJ1dHRvbiB0ZXh0PXt0ZXh0fSB0eXBlPXt0eXBlfSB3aWR0aD17XCJhdXRvXCJ9IHByZXNzPXtwcmVzc0hhbmRsZXJ9PlxuXHRcdFx0XHR7e1xuXHRcdFx0XHRcdGxheW91dERhdGE6IChcblx0XHRcdFx0XHRcdDw+XG5cdFx0XHRcdFx0XHRcdDxGbGV4SXRlbURhdGEgbWluV2lkdGg9e1wiMTAwJVwifT48L0ZsZXhJdGVtRGF0YT5cblx0XHRcdFx0XHRcdDwvPlxuXHRcdFx0XHRcdClcblx0XHRcdFx0fX1cblx0XHRcdDwvQnV0dG9uPlxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICogUmV0dXJucyBGb290ZXIgd2l0aCBCdXR0b25zLlxuXHQgKiBAcmV0dXJucyBGb290ZXJcblx0ICovXG5cblx0cHJpdmF0ZSBnZXRGb290ZXIoKTogVG9vbGJhciB7XG5cdFx0cmV0dXJuIChcblx0XHRcdDxUb29sYmFyPlxuXHRcdFx0XHR7e1xuXHRcdFx0XHRcdGNvbnRlbnQ6IChcblx0XHRcdFx0XHRcdDw+XG5cdFx0XHRcdFx0XHRcdDxUb29sYmFyU3BhY2VyIC8+XG5cdFx0XHRcdFx0XHRcdHt0aGlzLmdldEJ1dHRvbihcblx0XHRcdFx0XHRcdFx0XHR0aGlzLl9nZXREaWFsb2dCdXR0b25UZXh0KHRoaXMuaXNTYXZlLCBSZWNvbW1lbmRhdGlvbkRpYWxvZ0RlY2lzaW9uLkFjY2VwdCksXG5cdFx0XHRcdFx0XHRcdFx0XCJFbXBoYXNpemVkXCIsXG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5vbkFjY2VwdEFuZFNhdmUuYmluZCh0aGlzKVxuXHRcdFx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdFx0XHR7dGhpcy5nZXRCdXR0b24oXG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5fZ2V0RGlhbG9nQnV0dG9uVGV4dCh0aGlzLmlzU2F2ZSwgUmVjb21tZW5kYXRpb25EaWFsb2dEZWNpc2lvbi5JZ25vcmUpLFxuXHRcdFx0XHRcdFx0XHRcdFwiR2hvc3RcIixcblx0XHRcdFx0XHRcdFx0XHR0aGlzLm9uSWdub3JlQW5kU2F2ZS5iaW5kKHRoaXMpXG5cdFx0XHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0XHRcdHt0aGlzLmdldEJ1dHRvbihcblx0XHRcdFx0XHRcdFx0XHR0aGlzLmNvbmZpcm1SZWNvbW1lbmRhdGlvbkRpYWxvZ1Jlc291cmNlTW9kZWwuZ2V0VGV4dChcIkNfUkVDT01NRU5EQVRJT05fRElBTE9HX0NPTlRJTlVFX0VESVRJTkdcIiksXG5cdFx0XHRcdFx0XHRcdFx0XCJHaG9zdFwiLFxuXHRcdFx0XHRcdFx0XHRcdHRoaXMub25Db250aW51ZUVkaXRpbmcuYmluZCh0aGlzKVxuXHRcdFx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdFx0PC8+XG5cdFx0XHRcdFx0KVxuXHRcdFx0XHR9fVxuXHRcdFx0PC9Ub29sYmFyPlxuXHRcdCk7XG5cdH1cblxuXHRwcml2YXRlIF9nZXREaWFsb2dCdXR0b25UZXh0KHNhdmU6IGJvb2xlYW4sIHJlY29tbWVuZGF0aW9uRGlhbG9nRGVjaXNpb246IFJlY29tbWVuZGF0aW9uRGlhbG9nRGVjaXNpb24pOiBzdHJpbmcge1xuXHRcdGNvbnN0IGlzQWNjZXB0QnV0dG9uOiBib29sZWFuID0gcmVjb21tZW5kYXRpb25EaWFsb2dEZWNpc2lvbiA9PT0gUmVjb21tZW5kYXRpb25EaWFsb2dEZWNpc2lvbi5BY2NlcHQ7XG5cdFx0aWYgKHNhdmUpIHtcblx0XHRcdGlmICghdGhpcy52aWV3LmdldEJpbmRpbmdDb250ZXh0KCk/LmdldE9iamVjdCgpLkhhc0FjdGl2ZUVudGl0eSkge1xuXHRcdFx0XHRyZXR1cm4gaXNBY2NlcHRCdXR0b25cblx0XHRcdFx0XHQ/IHRoaXMuY29uZmlybVJlY29tbWVuZGF0aW9uRGlhbG9nUmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiQ19SRUNPTU1FTkRBVElPTl9ESUFMT0dfQUNDRVBUX0FORF9DUkVBVEVcIilcblx0XHRcdFx0XHQ6IHRoaXMuY29uZmlybVJlY29tbWVuZGF0aW9uRGlhbG9nUmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiQ19SRUNPTU1FTkRBVElPTl9ESUFMT0dfSUdOT1JFX0FORF9DUkVBVEVcIik7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gaXNBY2NlcHRCdXR0b25cblx0XHRcdFx0PyB0aGlzLmNvbmZpcm1SZWNvbW1lbmRhdGlvbkRpYWxvZ1Jlc291cmNlTW9kZWwuZ2V0VGV4dChcIkNfUkVDT01NRU5EQVRJT05fRElBTE9HX0FDQ0VQVF9BTkRfU0FWRVwiKVxuXHRcdFx0XHQ6IHRoaXMuY29uZmlybVJlY29tbWVuZGF0aW9uRGlhbG9nUmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiQ19SRUNPTU1FTkRBVElPTl9ESUFMT0dfSUdOT1JFX0FORF9TQVZFXCIpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gaXNBY2NlcHRCdXR0b25cblx0XHRcdFx0PyB0aGlzLmNvbmZpcm1SZWNvbW1lbmRhdGlvbkRpYWxvZ1Jlc291cmNlTW9kZWwuZ2V0VGV4dChcIkNfUkVDT01NRU5EQVRJT05fRElBTE9HX0FDQ0VQVFwiKVxuXHRcdFx0XHQ6IHRoaXMuY29uZmlybVJlY29tbWVuZGF0aW9uRGlhbG9nUmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiQ19SRUNPTU1FTkRBVElPTl9ESUFMT0dfSUdOT1JFXCIpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBjcmVhdGVkIGEgSlNPTiBNb2RlbCBmb3IgdGhlIGFjY2VwdCBhbGwgZGlhbG9nIGRhdGEuXG5cdCAqIEByZXR1cm5zIFRoZSBKU09OIE1vZGVsIGZvciBhY2NlcHQgYWxsIGRpYWxvZy5cblx0ICovXG5cdGdldEFjY2VwdEFsbE1vZGVsKCk6IEpTT05Nb2RlbCB7XG5cdFx0Y29uc3QgYWNjZXB0TW9kZWwgPSBuZXcgSlNPTk1vZGVsKCk7XG5cdFx0Y29uc3QgaXRlbXMgPSBbXTtcblx0XHRmb3IgKGNvbnN0IHJlY29tbWVuZGF0aW9uRGF0YSBvZiB0aGlzLmFjY2VwdEFsbFBhcmFtcz8ucmVjb21tZW5kYXRpb25EYXRhIHx8IFtdKSB7XG5cdFx0XHRjb25zdCBlbnRpdHlOYW1lTGFiZWwgPSBzdGFuZGFyZFJlY29tbWVuZGF0aW9uSGVscGVyLmdldEVudGl0eU5hbWUocmVjb21tZW5kYXRpb25EYXRhLmNvbnRleHQgYXMgT0RhdGFWNENvbnRleHQpIHx8IFwiXCI7XG5cblx0XHRcdGNvbnN0IGlkZW50aWZpZXJUZXh0cyA9XG5cdFx0XHRcdHJlY29tbWVuZGF0aW9uRGF0YS5jb250ZXh0SWRlbnRpZmllclRleHQgJiYgcmVjb21tZW5kYXRpb25EYXRhLmNvbnRleHRJZGVudGlmaWVyVGV4dC5sZW5ndGggPiAwXG5cdFx0XHRcdFx0PyBgJHtlbnRpdHlOYW1lTGFiZWx9ICgke3JlY29tbWVuZGF0aW9uRGF0YS5jb250ZXh0SWRlbnRpZmllclRleHR9KWBcblx0XHRcdFx0XHQ6IGVudGl0eU5hbWVMYWJlbDtcblxuXHRcdFx0aWYgKHJlY29tbWVuZGF0aW9uRGF0YS52YWx1ZSB8fCByZWNvbW1lbmRhdGlvbkRhdGEudGV4dCkge1xuXHRcdFx0XHRjb25zdCB0YXJnZXRQYXRoID0gcmVjb21tZW5kYXRpb25EYXRhLmNvbnRleHQ/LmdldFBhdGgoKSArIFwiL1wiICsgcmVjb21tZW5kYXRpb25EYXRhLnByb3BlcnR5UGF0aDtcblx0XHRcdFx0Y29uc3QgZGlzcGxheU1vZGUgPSBzdGFuZGFyZFJlY29tbWVuZGF0aW9uSGVscGVyLmdldERpc3BsYXlNb2RlRm9yVGFyZ2V0UGF0aChcblx0XHRcdFx0XHR0YXJnZXRQYXRoLFxuXHRcdFx0XHRcdHRoaXMudmlldz8uZ2V0QmluZGluZ0NvbnRleHQoKT8uZ2V0TW9kZWwoKT8uZ2V0TWV0YU1vZGVsKCkgYXMgT0RhdGFNZXRhTW9kZWxcblx0XHRcdFx0KTtcblx0XHRcdFx0Y29uc3QgbGlzdERhdGEgPSB7XG5cdFx0XHRcdFx0ZmllbGROYW1lOiB0aGlzLmdldEZpZWxkTmFtZSh0YXJnZXRQYXRoKS52YWx1ZU9mKCksXG5cdFx0XHRcdFx0ZmllbGRWYWx1ZTogdGhpcy5nZXRUZXh0KHJlY29tbWVuZGF0aW9uRGF0YSwgZGlzcGxheU1vZGUpLFxuXHRcdFx0XHRcdGlkZW50aWZpZXJUZXh0czogaWRlbnRpZmllclRleHRzXG5cdFx0XHRcdH07XG5cdFx0XHRcdGl0ZW1zLnB1c2gobGlzdERhdGEpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRhY2NlcHRNb2RlbC5zZXREYXRhKHsgaXRlbXM6IGl0ZW1zIH0pO1xuXHRcdHJldHVybiBhY2NlcHRNb2RlbDtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBncm91cHMgdGhlIGNvbnRleHRzIGFjY29yZGluZyB0byB0aGUgaWRlbnRpZmllciB0ZXh0cy5cblx0ICogQHBhcmFtIGNvbnRleHQgVGhlIGNvbnRleHQgb2YgdGhlIGl0ZW1cblx0ICogQHJldHVybnMgVGhlIHRleHQgb2YgdGhlIGdyb3VwXG5cdCAqL1xuXHRnZXRHcm91cChjb250ZXh0OiBPRGF0YVY0Q29udGV4dCk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIGNvbnRleHQuZ2V0UHJvcGVydHkoXCJpZGVudGlmaWVyVGV4dHNcIik7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBtZXNzYWdlIHRvIGJlIHNob3duIGluIHRoZSBhY2NlcHQgZGlhbG9nLlxuXHQgKiBAcmV0dXJucyBBIG1lc3NhZ2Ugd2l0aCB0aGUgZGVzaXJlZCB0ZXh0LlxuXHQgKi9cblx0Z2V0TWVzc2FnZSgpOiBUZXh0IHtcblx0XHRjb25zdCBhY2NlcHRBbGxEYXRhID0gKHRoaXMudmlldy5nZXRNb2RlbChcIl9hY2NlcHREaWFsb2dNb2RlbFwiKSBhcyBKU09OTW9kZWwpPy5nZXREYXRhKCk/Lml0ZW1zO1xuXHRcdGNvbnN0IG1lc3NhZ2VUZXh0ID1cblx0XHRcdGFjY2VwdEFsbERhdGEubGVuZ3RoID4gMVxuXHRcdFx0XHQ/IHRoaXMuY29uZmlybVJlY29tbWVuZGF0aW9uRGlhbG9nUmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiQ19SRUNPTU1FTkRBVElPTl9ESUFMT0dfVEVYVFwiLCBbYWNjZXB0QWxsRGF0YS5sZW5ndGhdKVxuXHRcdFx0XHQ6IHRoaXMuY29uZmlybVJlY29tbWVuZGF0aW9uRGlhbG9nUmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiQ19SRUNPTU1FTkRBVElPTl9ESUFMT0dfVEVYVF9TSU5HVUxBUlwiKTtcblx0XHRyZXR1cm4gPFRleHQgdGV4dD17bWVzc2FnZVRleHR9IC8+O1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGNyZWF0ZXMgdGhlIGNvbnRlbnQgZm9yIHRoZSBkaWFsb2cuXG5cdCAqIEByZXR1cm5zIEEgbGlzdCBhcyBjb250ZW50IG9mIHRoZSBkaWFsb2cuXG5cdCAqL1xuXHRnZXREaWFsb2dDb250ZW50KCk6IExpc3Qge1xuXHRcdHJldHVybiAoXG5cdFx0XHQ8TGlzdCBpdGVtcz17eyBtb2RlbDogXCJfYWNjZXB0RGlhbG9nTW9kZWxcIiwgcGF0aDogXCIvaXRlbXNcIiwgc29ydGVyOiBuZXcgU29ydGVyKFwiaWRlbnRpZmllclRleHRzXCIsIGZhbHNlLCB0aGlzLmdldEdyb3VwKSB9fT5cblx0XHRcdFx0PEN1c3RvbUxpc3RJdGVtPlxuXHRcdFx0XHRcdDxIQm94IGNsYXNzPVwic2FwVWlTbWFsbE1hcmdpbkJlZ2luIHNhcFVpVGlueU1hcmdpblwiPlxuXHRcdFx0XHRcdFx0PFRleHQgdGV4dD1cIntfYWNjZXB0RGlhbG9nTW9kZWw+ZmllbGROYW1lfToge19hY2NlcHREaWFsb2dNb2RlbD5maWVsZFZhbHVlfVwiIC8+XG5cdFx0XHRcdFx0PC9IQm94PlxuXHRcdFx0XHQ8L0N1c3RvbUxpc3RJdGVtPlxuXHRcdFx0PC9MaXN0PlxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICogVGhlIGJ1aWxkaW5nIGJsb2NrIHJlbmRlciBmdW5jdGlvbi5cblx0ICogQHJldHVybnMgQW4gWE1MLWJhc2VkIHN0cmluZ1xuXHQgKi9cblx0Z2V0Q29udGVudCgpOiBEaWFsb2cge1xuXHRcdHJldHVybiAoXG5cdFx0XHQ8RGlhbG9nXG5cdFx0XHRcdHRpdGxlPXt0aGlzLmNvbmZpcm1SZWNvbW1lbmRhdGlvbkRpYWxvZ1Jlc291cmNlTW9kZWwuZ2V0VGV4dChcIkNfUkVDT01NRU5EQVRJT05fRElBTE9HX1RJVExFXCIpfVxuXHRcdFx0XHRzdGF0ZT17VmFsdWVTdGF0ZS5JbmZvcm1hdGlvbn1cblx0XHRcdFx0dHlwZT17XCJNZXNzYWdlXCJ9XG5cdFx0XHRcdHJlZj17dGhpcy5jb25maXJtUmVjb21tZW5kYXRpb25EaWFsb2d9XG5cdFx0XHRcdHJlc2l6YWJsZT17XCJ0cnVlXCJ9XG5cdFx0XHRcdGNvbnRlbnRXaWR0aD17XCIzNXJlbVwifVxuXHRcdFx0PlxuXHRcdFx0XHR7e1xuXHRcdFx0XHRcdGNvbnRlbnQ6IChcblx0XHRcdFx0XHRcdDw+XG5cdFx0XHRcdFx0XHRcdHt0aGlzLmdldE1lc3NhZ2UoKX1cblx0XHRcdFx0XHRcdFx0e3RoaXMuZ2V0RGlhbG9nQ29udGVudCgpfVxuXHRcdFx0XHRcdFx0PC8+XG5cdFx0XHRcdFx0KSxcblx0XHRcdFx0XHRmb290ZXI6IDw+e3RoaXMuZ2V0Rm9vdGVyKCl9PC8+XG5cdFx0XHRcdH19XG5cdFx0XHQ8L0RpYWxvZz5cblx0XHQpIGFzIERpYWxvZztcblx0fVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O01BbUNZQSw0QkFBNEIsMEJBQTVCQSw0QkFBNEI7SUFBNUJBLDRCQUE0QjtJQUE1QkEsNEJBQTRCO0lBQTVCQSw0QkFBNEI7SUFBNUJBLDRCQUE0QjtJQUFBLE9BQTVCQSw0QkFBNEI7RUFBQTtFQUFBQyxRQUFBLENBQUFELDRCQUFBLEdBQUFBLDRCQUFBO0VBQUEsSUFRM0JFLDJCQUEyQixJQUFBQyxJQUFBLEdBRHZDQyxjQUFjLENBQUMsa0VBQWtFLENBQUMsRUFBQUMsS0FBQSxHQVFqRkMsZUFBZSxDQUFDLENBQUMsRUFBQUgsSUFBQSxD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
459
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSZWNvbW1lbmRhdGlvbkRpYWxvZ0RlY2lzaW9uIiwiX2V4cG9ydHMiLCJDb25maXJtUmVjb21tZW5kYXRpb25EaWFsb2ciLCJfZGVjIiwiZGVmaW5lVUk1Q2xhc3MiLCJfZGVjMiIsImRlZmluZVJlZmVyZW5jZSIsIl9jbGFzcyIsIl9jbGFzczIiLCJfTWFuYWdlZE9iamVjdCIsInByb3BzIiwiX3RoaXMiLCJjYWxsIiwiX2luaXRpYWxpemVyRGVmaW5lUHJvcGVydHkiLCJfZGVzY3JpcHRvciIsInZpZXciLCJjb25maXJtUmVjb21tZW5kYXRpb25EaWFsb2dSZXNvdXJjZU1vZGVsIiwiZ2V0UmVzb3VyY2VNb2RlbCIsIl9pbmhlcml0c0xvb3NlIiwiX3Byb3RvIiwicHJvdG90eXBlIiwiZ2V0T3BlblJlY29tbWVuZGF0aW9ucyIsInZpc2libGVDb250ZXh0UGF0aHMiLCJnZXRWaXNpYmxlUGFnZUNvbnRleHRQYXRocyIsIm9wZW5SZWNvbW1lbmRhdGlvbnMiLCJnZXRPcGVuUmVjb21tZW5kYXRpb25zRm9yVmlzaWJsZUNvbnRleHRQYXRocyIsInJlY29tbWVuZGF0aW9ucyIsImxlbmd0aCIsImZvckVhY2giLCJyZWNvbW1lbmRhdGlvbiIsInByaW1hcnlDb250ZXh0IiwiY29udGV4dCIsImZhbGxiYWNrQ29udGV4dCIsImdldEJpbmRpbmdDb250ZXh0IiwicHJvcGVydHlQYXRoIiwiaXNFbXB0eSIsImN0eCIsInBhdGgiLCJ2YWx1ZSIsImdldFByb3BlcnR5IiwidW5kZWZpbmVkIiwicHVzaCIsInZpc2libGVQYWdlQ29udGV4dFBhdGhzIiwiZ2V0UGF0aCIsImNvbnRyb2xsZXIiLCJnZXRDb250cm9sbGVyIiwiZmNsQ29udHJvbGxlciIsImdldEFwcENvbXBvbmVudCIsImdldFJvb3RWaWV3Q29udHJvbGxlciIsImlzRmNsRW5hYmxlZCIsIl9pc0ZjbEVuYWJsZWQiLCJpc0Z1bGxTY3JlZW4iLCJnZXRIZWxwZXIiLCJnZXRDdXJyZW50VUlTdGF0ZSIsInJpZ2h0TW9zdENvbnRleHQiLCJnZXRSaWdodG1vc3RDb250ZXh0IiwiY29udGV4dFBhdGhzIiwibG9jYWxBbm5vdGF0aW9uTW9kZWwiLCJnZXRNb2RlbCIsImdldExvY2FsQW5ub3RhdGlvbk1vZGVsIiwiY29udGV4dFBhdGgiLCJsb2NhbEFubm90YXRpb25PYmplY3QiLCJnZXRPYmplY3QiLCJhbm5vdGF0aW9uT2JqZWN0IiwiZmV0Y2hMb2NhbEFubm90YXRpb25PYmplY3QiLCJyZWNvbW1lbmRhdGlvbk9iamVjdCIsImN1cnJlbnRLZXkiLCJjdXJyZW50VmFsdWUiLCJpbmNsdWRlcyIsImtleXMiLCJNZXRhTW9kZWxDb252ZXJ0ZXIiLCJnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdEVudGl0eUtleXMiLCJjb250ZXh0SWRlbnRpZmllciIsImdldE9wZW5SZWNvbW1lbmRhdGlvbnNGb3JDb250ZXh0IiwiY29udGV4dERhdGEiLCJyZWNvbW1lbmRhdGlvbkNvbnRleHQiLCJjb250ZXh0S2V5IiwiYXJndW1lbnRzIiwiY3VycmVudFZhbHVlSXNDb250ZXh0IiwiaXNBIiwic3BsaXQiLCJvcGVuUmVjb21tZW5kYXRpb24iLCJjb250ZXh0SWRlbnRpZmllclRleHQiLCJkZXNjcmlwdGlvbiIsInRleHQiLCJBcnJheSIsImlzQXJyYXkiLCJvcGVuIiwiaXNTYXZlIiwic3RhbmRhcmRSZWNvbW1lbmRhdGlvbkhlbHBlciIsImFkZENvbnRleHRJZGVudGlmaWVyVGV4dCIsInJlY29tbWVuZGF0aW9uRGF0YSIsImFjY2VwdEFsbFBhcmFtcyIsImxlZ2FjeVJlY29tbWVuZGF0aW9uc0V4aXN0IiwiY2hlY2tJZlJlY29tbWVuZGF0aW9uc0V4aXN0IiwiZmV0Y2hBY2NlcHRBbGxQYXJhbXMiLCJhY2NlcHRNb2RlbCIsImdldEFjY2VwdEFsbE1vZGVsIiwic2V0TW9kZWwiLCJnZXREYXRhIiwiaXRlbXMiLCJTa2lwcGVkIiwiZGlhbG9nIiwiZ2V0Q29udGVudCIsInNldEVzY2FwZUhhbmRsZXIiLCJvbkNvbnRpbnVlRWRpdGluZyIsImJpbmQiLCJhZGREZXBlbmRlbnQiLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsInByb21pc2VSZXNvbHZlIiwicHJvbWlzZVJlamVjdCIsImNsb3NlIiwiY29uZmlybVJlY29tbWVuZGF0aW9uRGlhbG9nIiwiY3VycmVudCIsImRlc3Ryb3kiLCJvbkFjY2VwdEFuZFNhdmUiLCJpc0FjY2VwdGVkIiwiYWNjZXB0UmVjb21tZW5kYXRpb25zIiwiQWNjZXB0IiwiTG9nIiwiZXJyb3IiLCJvbklnbm9yZUFuZFNhdmUiLCJpZ25vcmVSZWNvbW1lbmRhdGlvbkZvckNvbnRleHRzIiwiSWdub3JlIiwiQ29udGludWUiLCJnZXRGaWVsZE5hbWUiLCJ0YXJnZXRQYXRoIiwiaW52b2x2ZWREYXRhTW9kZWxPYmplY3QiLCJnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHNGb3JUYXJnZXRQYXRoIiwiZ2V0TWV0YU1vZGVsIiwidGFyZ2V0T2JqZWN0IiwiYW5ub3RhdGlvbnMiLCJDb21tb24iLCJMYWJlbCIsInRvU3RyaW5nIiwiZ2V0VGV4dCIsImRpc3BsYXlNb2RlIiwidmFsdWVGb3JtYXR0ZXJzIiwiZm9ybWF0V2l0aEJyYWNrZXRzIiwiZ2V0QnV0dG9uIiwidHlwZSIsInByZXNzSGFuZGxlciIsIl9qc3giLCJCdXR0b24iLCJ3aWR0aCIsInByZXNzIiwiY2hpbGRyZW4iLCJsYXlvdXREYXRhIiwiX0ZyYWdtZW50IiwiRmxleEl0ZW1EYXRhIiwibWluV2lkdGgiLCJnZXRGb290ZXIiLCJUb29sYmFyIiwiY29udGVudCIsIl9qc3hzIiwiVG9vbGJhclNwYWNlciIsIl9nZXREaWFsb2dCdXR0b25UZXh0Iiwic2F2ZSIsInJlY29tbWVuZGF0aW9uRGlhbG9nRGVjaXNpb24iLCJpc0FjY2VwdEJ1dHRvbiIsIkhhc0FjdGl2ZUVudGl0eSIsIkpTT05Nb2RlbCIsImVudGl0eU5hbWVMYWJlbCIsImdldEVudGl0eU5hbWUiLCJpZGVudGlmaWVyVGV4dHMiLCJnZXREaXNwbGF5TW9kZUZvclRhcmdldFBhdGgiLCJsaXN0RGF0YSIsImZpZWxkTmFtZSIsInZhbHVlT2YiLCJmaWVsZFZhbHVlIiwic2V0RGF0YSIsImdldEdyb3VwIiwiZ2V0TWVzc2FnZSIsImFjY2VwdEFsbERhdGEiLCJtZXNzYWdlVGV4dCIsIlRleHQiLCJnZXREaWFsb2dDb250ZW50IiwiTGlzdCIsIm1vZGVsIiwic29ydGVyIiwiU29ydGVyIiwiQ3VzdG9tTGlzdEl0ZW0iLCJIQm94IiwiY2xhc3MiLCJEaWFsb2ciLCJ0aXRsZSIsInN0YXRlIiwiVmFsdWVTdGF0ZSIsIkluZm9ybWF0aW9uIiwicmVmIiwicmVzaXphYmxlIiwiY29udGVudFdpZHRoIiwiZm9vdGVyIiwiTWFuYWdlZE9iamVjdCIsIl9hcHBseURlY29yYXRlZERlc2NyaXB0b3IiLCJjb25maWd1cmFibGUiLCJlbnVtZXJhYmxlIiwid3JpdGFibGUiLCJpbml0aWFsaXplciJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiQ29uZmlybVJlY29tbWVuZGF0aW9uRGlhbG9nLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFByb3BlcnR5IH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzXCI7XG5pbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCB0eXBlIHsgUHJvcGVydGllc09mIH0gZnJvbSBcInNhcC9mZS9iYXNlL0NsYXNzU3VwcG9ydFwiO1xuaW1wb3J0IHsgZGVmaW5lUmVmZXJlbmNlLCBkZWZpbmVVSTVDbGFzcyB9IGZyb20gXCJzYXAvZmUvYmFzZS9DbGFzc1N1cHBvcnRcIjtcbmltcG9ydCB0eXBlIHsgUmVmIH0gZnJvbSBcInNhcC9mZS9iYXNlL2pzeC1ydW50aW1lL2pzeFwiO1xuaW1wb3J0ICogYXMgTWV0YU1vZGVsQ29udmVydGVyIGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL01ldGFNb2RlbENvbnZlcnRlclwiO1xuaW1wb3J0IHsgZ2V0UmVzb3VyY2VNb2RlbCB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1Jlc291cmNlTW9kZWxIZWxwZXJcIjtcbmltcG9ydCBCdXR0b24gZnJvbSBcInNhcC9tL0J1dHRvblwiO1xuaW1wb3J0IEN1c3RvbUxpc3RJdGVtIGZyb20gXCJzYXAvbS9DdXN0b21MaXN0SXRlbVwiO1xuaW1wb3J0IERpYWxvZyBmcm9tIFwic2FwL20vRGlhbG9nXCI7XG5pbXBvcnQgRmxleEl0ZW1EYXRhIGZyb20gXCJzYXAvbS9GbGV4SXRlbURhdGFcIjtcbmltcG9ydCBIQm94IGZyb20gXCJzYXAvbS9IQm94XCI7XG5pbXBvcnQgTGlzdCBmcm9tIFwic2FwL20vTGlzdFwiO1xuaW1wb3J0IFRleHQgZnJvbSBcInNhcC9tL1RleHRcIjtcbmltcG9ydCBUb29sYmFyIGZyb20gXCJzYXAvbS9Ub29sYmFyXCI7XG5pbXBvcnQgVG9vbGJhclNwYWNlciBmcm9tIFwic2FwL20vVG9vbGJhclNwYWNlclwiO1xuaW1wb3J0IE1hbmFnZWRPYmplY3QgZnJvbSBcInNhcC91aS9iYXNlL01hbmFnZWRPYmplY3RcIjtcbmltcG9ydCB0eXBlIFVJNUVsZW1lbnQgZnJvbSBcInNhcC91aS9jb3JlL0VsZW1lbnRcIjtcbmltcG9ydCB7IFZhbHVlU3RhdGUgfSBmcm9tIFwic2FwL3VpL2NvcmUvbGlicmFyeVwiO1xuaW1wb3J0IHR5cGUgVmlldyBmcm9tIFwic2FwL3VpL2NvcmUvbXZjL1ZpZXdcIjtcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9Db250ZXh0XCI7XG5pbXBvcnQgU29ydGVyIGZyb20gXCJzYXAvdWkvbW9kZWwvU29ydGVyXCI7XG5pbXBvcnQgSlNPTk1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvanNvbi9KU09OTW9kZWxcIjtcbmltcG9ydCB0eXBlIHsgZGVmYXVsdCBhcyBPRGF0YVY0Q29udGV4dCB9IGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvQ29udGV4dFwiO1xuaW1wb3J0IHR5cGUgT0RhdGFNZXRhTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YU1ldGFNb2RlbFwiO1xuaW1wb3J0IHR5cGUgT0RhdGFNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTW9kZWxcIjtcbmltcG9ydCB0eXBlIHsgRXZlbnRIYW5kbGVyIH0gZnJvbSBcInR5cGVzL2V4dGVuc2lvbl90eXBlc1wiO1xuaW1wb3J0IHR5cGUgQmFzZUNvbnRyb2xsZXIgZnJvbSBcIi4uLy4uL0Jhc2VDb250cm9sbGVyXCI7XG5pbXBvcnQgdHlwZSBQYWdlQ29udHJvbGxlciBmcm9tIFwiLi4vLi4vUGFnZUNvbnRyb2xsZXJcIjtcbmltcG9ydCB0eXBlIFJlc291cmNlTW9kZWwgZnJvbSBcIi4uLy4uL1Jlc291cmNlTW9kZWxcIjtcbmltcG9ydCB0eXBlIHsgQWNjZXB0QWxsUGFyYW1zLCBSZWNvbW1lbmRhdGlvbkRhdGEgfSBmcm9tIFwiLi4vLi4vY29udHJvbGxlcmV4dGVuc2lvbnMvUmVjb21tZW5kYXRpb25zXCI7XG5pbXBvcnQgdmFsdWVGb3JtYXR0ZXJzIGZyb20gXCIuLi8uLi9mb3JtYXR0ZXJzL1ZhbHVlRm9ybWF0dGVyXCI7XG5pbXBvcnQgdHlwZSB7IFJlY29tbWVuZGF0aW9uQ29udGV4dHNJbmZvIH0gZnJvbSBcIi4uLy4uL2hlbHBlcnMvU3RhbmRhcmRSZWNvbW1lbmRhdGlvbkhlbHBlclwiO1xuaW1wb3J0IHsgc3RhbmRhcmRSZWNvbW1lbmRhdGlvbkhlbHBlciwgdHlwZSBTdGFuZGFyZFJlY29tbWVuZGF0aW9uRGF0YVR5cGUgfSBmcm9tIFwiLi4vLi4vaGVscGVycy9TdGFuZGFyZFJlY29tbWVuZGF0aW9uSGVscGVyXCI7XG5pbXBvcnQgdHlwZSBGY2xDb250cm9sbGVyIGZyb20gXCIuLi8uLi9yb290Vmlldy9GY2wuY29udHJvbGxlclwiO1xuXG5leHBvcnQgZW51bSBSZWNvbW1lbmRhdGlvbkRpYWxvZ0RlY2lzaW9uIHtcblx0QWNjZXB0ID0gXCJBY2NlcHRfUmVjb21tZW5kYXRpb25zXCIsXG5cdElnbm9yZSA9IFwiSWdub3JlX1JlY29tbWVuZGF0aW9uc1wiLFxuXHRDb250aW51ZSA9IFwiQ29udGludWVfRWRpdGluZ1wiLFxuXHRTa2lwcGVkID0gXCJTa2lwcGVkXCJcbn1cblxuQGRlZmluZVVJNUNsYXNzKFwic2FwLmZlLmNvcmUuY29udHJvbHMuUmVjb21tZW5kYXRpb25zLkNvbmZpcm1SZWNvbW1lbmRhdGlvbkRpYWxvZ1wiKVxuZXhwb3J0IGNsYXNzIENvbmZpcm1SZWNvbW1lbmRhdGlvbkRpYWxvZyBleHRlbmRzIE1hbmFnZWRPYmplY3Qge1xuXHRjb25zdHJ1Y3Rvcihwcm9wczogUHJvcGVydGllc09mPENvbmZpcm1SZWNvbW1lbmRhdGlvbkRpYWxvZz4pIHtcblx0XHRzdXBlcihwcm9wcyk7XG5cdFx0dGhpcy52aWV3ID0gcHJvcHMudmlldyBhcyBWaWV3O1xuXHRcdHRoaXMuY29uZmlybVJlY29tbWVuZGF0aW9uRGlhbG9nUmVzb3VyY2VNb2RlbCA9IGdldFJlc291cmNlTW9kZWwodGhpcy52aWV3KTtcblx0fVxuXG5cdEBkZWZpbmVSZWZlcmVuY2UoKVxuXHRjb25maXJtUmVjb21tZW5kYXRpb25EaWFsb2chOiBSZWY8RGlhbG9nPjtcblxuXHRwdWJsaWMgdmlldyE6IFZpZXc7XG5cblx0cHJpdmF0ZSBjb25maXJtUmVjb21tZW5kYXRpb25EaWFsb2dSZXNvdXJjZU1vZGVsITogUmVzb3VyY2VNb2RlbDtcblxuXHRwcm90ZWN0ZWQga2V5ITogc3RyaW5nO1xuXG5cdHByaXZhdGUgaXNTYXZlITogYm9vbGVhbjtcblxuXHRwcml2YXRlIGFjY2VwdEFsbFBhcmFtcyE6IEFjY2VwdEFsbFBhcmFtcztcblxuXHQvKipcblx0ICogUmVzb2x2ZXMgdGhlIHByb21pc2Ugd2l0aCB0aGUgc2VsZWN0ZWQgZGlhbG9nIGxpc3Qgb3B0aW9uXG5cdCAqL1xuXHRwcml2YXRlIHByb21pc2VSZXNvbHZlITogRnVuY3Rpb247XG5cblx0LyoqXG5cdCAqIFJlamVjdHMgdGhlIHByb21pc2Ugb2Ygb3BlbiBkaWFsb2dcblx0ICovXG5cdHB1YmxpYyBwcm9taXNlUmVqZWN0ITogRnVuY3Rpb247XG5cblx0LyoqXG5cdCAqXG5cdCAqIEByZXR1cm5zIFJlY29tbWVuZGF0aW9uIERhdGFcblx0ICovXG5cblx0cHVibGljIGdldE9wZW5SZWNvbW1lbmRhdGlvbnMoKTogUmVjb21tZW5kYXRpb25EYXRhW10ge1xuXHRcdGNvbnN0IHZpc2libGVDb250ZXh0UGF0aHMgPSB0aGlzLmdldFZpc2libGVQYWdlQ29udGV4dFBhdGhzKCk7XG5cdFx0Y29uc3Qgb3BlblJlY29tbWVuZGF0aW9ucyA9IHRoaXMuZ2V0T3BlblJlY29tbWVuZGF0aW9uc0ZvclZpc2libGVDb250ZXh0UGF0aHModmlzaWJsZUNvbnRleHRQYXRocyk7XG5cdFx0Y29uc3QgcmVjb21tZW5kYXRpb25zOiBSZWNvbW1lbmRhdGlvbkRhdGFbXSA9IFtdO1xuXG5cdFx0aWYgKG9wZW5SZWNvbW1lbmRhdGlvbnMubGVuZ3RoID4gMCkge1xuXHRcdFx0b3BlblJlY29tbWVuZGF0aW9ucy5mb3JFYWNoKChyZWNvbW1lbmRhdGlvbikgPT4ge1xuXHRcdFx0XHRjb25zdCBwcmltYXJ5Q29udGV4dCA9IHJlY29tbWVuZGF0aW9uLmNvbnRleHQ7XG5cdFx0XHRcdGNvbnN0IGZhbGxiYWNrQ29udGV4dCA9IHRoaXMudmlldy5nZXRCaW5kaW5nQ29udGV4dCgpO1xuXHRcdFx0XHRjb25zdCBwcm9wZXJ0eVBhdGggPSByZWNvbW1lbmRhdGlvbi5wcm9wZXJ0eVBhdGggPz8gXCJcIjtcblxuXHRcdFx0XHRjb25zdCBpc0VtcHR5ID0gKGN0eDogQ29udGV4dCB8IHVuZGVmaW5lZCB8IG51bGwsIHBhdGg6IHN0cmluZyk6IGJvb2xlYW4gPT4ge1xuXHRcdFx0XHRcdGNvbnN0IHZhbHVlID0gY3R4Py5nZXRQcm9wZXJ0eShwYXRoKTtcblx0XHRcdFx0XHRyZXR1cm4gdmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHVuZGVmaW5lZCB8fCB2YWx1ZSA9PT0gXCJcIjtcblx0XHRcdFx0fTtcblxuXHRcdFx0XHQvLyBwdXNoIHJlY29tbWVuZGF0aW9uIGlmIHByb3BlcnR5IGlzIGVtcHR5IGluIGJvdGggY29udGV4dHNcblx0XHRcdFx0aWYgKGlzRW1wdHkocHJpbWFyeUNvbnRleHQsIHByb3BlcnR5UGF0aCkgJiYgaXNFbXB0eShmYWxsYmFja0NvbnRleHQsIHByb3BlcnR5UGF0aCkpIHtcblx0XHRcdFx0XHRyZWNvbW1lbmRhdGlvbnMucHVzaChyZWNvbW1lbmRhdGlvbik7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblx0XHRyZXR1cm4gcmVjb21tZW5kYXRpb25zO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEByZXR1cm5zIENvbGxlY3Rpb24gb2YgY29udGV4dCBwYXRoc1xuXHQgKi9cblxuXHRwdWJsaWMgZ2V0VmlzaWJsZVBhZ2VDb250ZXh0UGF0aHMoKTogKHN0cmluZyB8IHVuZGVmaW5lZClbXSB7XG5cdFx0Y29uc3QgdmlzaWJsZVBhZ2VDb250ZXh0UGF0aHMgPSBbdGhpcy52aWV3LmdldEJpbmRpbmdDb250ZXh0KCk/LmdldFBhdGgoKV07XG5cdFx0Y29uc3QgY29udHJvbGxlciA9IHRoaXMudmlldy5nZXRDb250cm9sbGVyKCkgYXMgQmFzZUNvbnRyb2xsZXI7XG5cdFx0Y29uc3QgZmNsQ29udHJvbGxlciA9IGNvbnRyb2xsZXIuZ2V0QXBwQ29tcG9uZW50KCkuZ2V0Um9vdFZpZXdDb250cm9sbGVyKCkgYXMgRmNsQ29udHJvbGxlcjtcblx0XHRjb25zdCBpc0ZjbEVuYWJsZWQgPSBjb250cm9sbGVyLmdldEFwcENvbXBvbmVudCgpLl9pc0ZjbEVuYWJsZWQoKTtcblx0XHRjb25zdCBpc0Z1bGxTY3JlZW4gPSBpc0ZjbEVuYWJsZWQgPyBmY2xDb250cm9sbGVyLmdldEhlbHBlcigpLmdldEN1cnJlbnRVSVN0YXRlKCkuaXNGdWxsU2NyZWVuIDogdHJ1ZTtcblx0XHRpZiAoaXNGY2xFbmFibGVkICYmICFpc0Z1bGxTY3JlZW4pIHtcblx0XHRcdGNvbnN0IHJpZ2h0TW9zdENvbnRleHQgPSBmY2xDb250cm9sbGVyLmdldFJpZ2h0bW9zdENvbnRleHQoKTtcblx0XHRcdHZpc2libGVQYWdlQ29udGV4dFBhdGhzLnB1c2gocmlnaHRNb3N0Q29udGV4dD8uZ2V0UGF0aCgpKTtcblx0XHR9XG5cdFx0cmV0dXJuIHZpc2libGVQYWdlQ29udGV4dFBhdGhzO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEBwYXJhbSBjb250ZXh0UGF0aHMgUGF0aHMgb2YgdGhlIGNvbnRleHRzXG5cdCAqIEByZXR1cm5zIFJlY29tbWVuZGF0aW9uRGF0YSBmb3IgdmlzaWJsZSBjb250ZXh0c1xuXHQgKi9cblx0cHVibGljIGdldE9wZW5SZWNvbW1lbmRhdGlvbnNGb3JWaXNpYmxlQ29udGV4dFBhdGhzKGNvbnRleHRQYXRoczogKHN0cmluZyB8IHVuZGVmaW5lZClbXSk6IFJlY29tbWVuZGF0aW9uRGF0YVtdIHtcblx0XHRjb25zdCBvcGVuUmVjb21tZW5kYXRpb25zOiBSZWNvbW1lbmRhdGlvbkRhdGFbXSA9IFtdO1xuXHRcdGlmIChjb250ZXh0UGF0aHMubGVuZ3RoID4gMCkge1xuXHRcdFx0Y29uc3QgbG9jYWxBbm5vdGF0aW9uTW9kZWwgPSAodGhpcy52aWV3LmdldE1vZGVsKCkgYXMgT0RhdGFNb2RlbCkuZ2V0TG9jYWxBbm5vdGF0aW9uTW9kZWwoKTtcblx0XHRcdC8vIGNoZWNrIGNvbnRleHQgcGF0aHMgaW4gbG9jYWwgYW5ub3RhdGlvbiBtb2RlbHMgd2hpY2ggbWF0Y2ggdG9cblx0XHRcdC8vIDEuIGN1cnJlbnQgcGFnZSBhbmRcblx0XHRcdC8vIDIuIGltbWVkaWF0ZSBjaGlsZHJlbiBvZiB0aGUgY3VycmVudCBwYWdlXG5cdFx0XHQvLyBOZWVkIHRvIGNvbnNpZGVyIGFsc28gaW1tZWRpYXRlIGNoaWxkcmVuXG5cdFx0XHQvLyBpdGVyYXRlIG92ZXIgYWxsIGtleXNcblx0XHRcdGNvbnRleHRQYXRocy5mb3JFYWNoKChjb250ZXh0UGF0aCkgPT4ge1xuXHRcdFx0XHRpZiAoY29udGV4dFBhdGggIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdGNvbnN0IGxvY2FsQW5ub3RhdGlvbk9iamVjdCA9IGxvY2FsQW5ub3RhdGlvbk1vZGVsLmdldE9iamVjdChjb250ZXh0UGF0aCk7XG5cdFx0XHRcdFx0aWYgKGxvY2FsQW5ub3RhdGlvbk9iamVjdCkge1xuXHRcdFx0XHRcdFx0Y29uc3QgYW5ub3RhdGlvbk9iamVjdCA9IGxvY2FsQW5ub3RhdGlvbk9iamVjdDtcblx0XHRcdFx0XHRcdC8qKlxuXHRcdFx0XHRcdFx0ICogVGhlIGxvY2FsIGFubm90YXRpb24gb2JqZWN0IHdpbGwgYmUgb2YgdGhlIGZvbGxvd2luZyBzdHJ1Y3R1cmUgOlxuXHRcdFx0XHRcdFx0ICoge1xuXHRcdFx0XHRcdFx0ICogXCJQcm9wZXJ0eU5hbWVAJHVpNS5mZS5yZWNvbW1lbmRhdGlvbnMucGxhY2Vob2xkZXJEZXNjcmlwdGlvblwiOiBWYWx1ZVxuXHRcdFx0XHRcdFx0ICogXCJQcm9wZXJ0eU5hbWVAJHVpNS5mZS5yZWNvbW1lbmRhdGlvbnMucGxhY2Vob2xkZXJWYWx1ZVwiOiBWYWx1ZVxuXHRcdFx0XHRcdFx0ICogXCJQcm9wZXJ0eU5hbWVAJHVpNS5mZS5yZWNvbW1lbmRhdGlvbnMudHlwZUFoZWFkVmFsdWVzXCI6IFZhbHVlXG5cdFx0XHRcdFx0XHQgKiBQcm9wZXJ0eU5hbWU6IHtcblx0XHRcdFx0XHRcdCAqIFx0XHRcIlByb3BlcnR5TmFtZUAkdWk1LmZlLnJlY29tbWVuZGF0aW9ucy5wbGFjZWhvbGRlckRlc2NyaXB0aW9uXCI6IFZhbHVlXG5cdFx0XHRcdFx0XHQgKiBcdFx0XCJQcm9wZXJ0eU5hbWVAJHVpNS5mZS5yZWNvbW1lbmRhdGlvbnMucGxhY2Vob2xkZXJWYWx1ZVwiOiBWYWx1ZVxuXHRcdFx0XHRcdFx0ICogXHRcdFwiUHJvcGVydHlOYW1lQCR1aTUuZmUucmVjb21tZW5kYXRpb25zLnR5cGVBaGVhZFZhbHVlc1wiOiBWYWx1ZVxuXHRcdFx0XHRcdFx0ICogXHRcdHJlY29tbWVuZGF0aW9uQ29udGV4dDp7IGNvbnRleHQgfVxuXHRcdFx0XHRcdFx0ICogXHQgfVxuXHRcdFx0XHRcdFx0ICogcmVjb21tZW5kYXRpb25Db250ZXh0OnsgY29udGV4dCB9XG5cdFx0XHRcdFx0XHQgKiB9XG5cdFx0XHRcdFx0XHQgKlxuXHRcdFx0XHRcdFx0ICogc28gaW4gb3JkZXIgdG8gZ2V0IHRoZSByZWNvbW1lbmRhdGlvbnMgYXMgcGVyIGVhY2ggY29udGV4dCAtIGZvciBwYXJlbnQvY2hpbGQgZW50aXRpZXMgd2UgbmVlZCB0byBpdGVyYXRlIG92ZXIgZWFjaCBrZXlzIHJlY3Vyc2l2ZWx5IGluIHRoZSBmZXRjaExvY2FsQW5ub3RhdGlvbk9iamVjdCBmdW5jdGlvbixcblx0XHRcdFx0XHRcdCAqIGZvcm0gdGhlIGNvcnJlc3BvbmRpbmcgc3RydWN0dXJlIGFuZCB0aGVuIHNlbmQgaXQgZm9yIGdldHRpbmcgdGhlIHJlY29tbWVuZGF0aW9ucyBhY2NvcmRpbmdseS5cblx0XHRcdFx0XHRcdCAqL1xuXHRcdFx0XHRcdFx0dGhpcy5mZXRjaExvY2FsQW5ub3RhdGlvbk9iamVjdChhbm5vdGF0aW9uT2JqZWN0LCBvcGVuUmVjb21tZW5kYXRpb25zKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblx0XHRyZXR1cm4gb3BlblJlY29tbWVuZGF0aW9ucztcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcGFyYW0gYW5ub3RhdGlvbk9iamVjdFxuXHQgKiBAcGFyYW0gb3BlblJlY29tbWVuZGF0aW9ucyBSZWNvbW1lbmRhdGlvbiBEYXRhXG5cdCAqL1xuXG5cdHByaXZhdGUgZmV0Y2hMb2NhbEFubm90YXRpb25PYmplY3QoYW5ub3RhdGlvbk9iamVjdDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sIG9wZW5SZWNvbW1lbmRhdGlvbnM6IFJlY29tbWVuZGF0aW9uRGF0YVtdKTogdm9pZCB7XG5cdFx0aWYgKGFubm90YXRpb25PYmplY3RbXCJyZWNvbW1lbmRhdGlvbkNvbnRleHRcIl0pIHtcblx0XHRcdGNvbnN0IHJlY29tbWVuZGF0aW9uT2JqZWN0OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHt9O1xuXHRcdFx0cmVjb21tZW5kYXRpb25PYmplY3RbXCJyZWNvbW1lbmRhdGlvbkNvbnRleHRcIl0gPSBhbm5vdGF0aW9uT2JqZWN0W1wicmVjb21tZW5kYXRpb25Db250ZXh0XCJdIGFzIE9EYXRhVjRDb250ZXh0O1xuXHRcdFx0Zm9yIChjb25zdCBjdXJyZW50S2V5IGluIGFubm90YXRpb25PYmplY3QpIHtcblx0XHRcdFx0Y29uc3QgY3VycmVudFZhbHVlID0gYW5ub3RhdGlvbk9iamVjdFtjdXJyZW50S2V5XTtcblx0XHRcdFx0aWYgKGN1cnJlbnRWYWx1ZSkge1xuXHRcdFx0XHRcdGlmICgoY3VycmVudFZhbHVlIGFzIFJlY29yZDxzdHJpbmcsIE9EYXRhVjRDb250ZXh0PilbXCJyZWNvbW1lbmRhdGlvbkNvbnRleHRcIl0pIHtcblx0XHRcdFx0XHRcdHRoaXMuZmV0Y2hMb2NhbEFubm90YXRpb25PYmplY3QoYW5ub3RhdGlvbk9iamVjdFtjdXJyZW50S2V5XSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiwgb3BlblJlY29tbWVuZGF0aW9ucyk7XG5cdFx0XHRcdFx0fSBlbHNlIGlmIChcblx0XHRcdFx0XHRcdGN1cnJlbnRLZXkuaW5jbHVkZXMoXCJAJHVpNS5mZS5yZWNvbW1lbmRhdGlvbnMucGxhY2Vob2xkZXJWYWx1ZVwiKSB8fFxuXHRcdFx0XHRcdFx0Y3VycmVudEtleS5pbmNsdWRlcyhcIkAkdWk1LmZlLnJlY29tbWVuZGF0aW9ucy5wbGFjZWhvbGRlckRlc2NyaXB0aW9uXCIpIHx8XG5cdFx0XHRcdFx0XHRjdXJyZW50S2V5LmluY2x1ZGVzKFwiQCR1aTUuZmUucmVjb21tZW5kYXRpb25zLnR5cGVBaGVhZFZhbHVlc1wiKVxuXHRcdFx0XHRcdCkge1xuXHRcdFx0XHRcdFx0cmVjb21tZW5kYXRpb25PYmplY3RbY3VycmVudEtleV0gPSBjdXJyZW50VmFsdWU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBrZXlzID0gTWV0YU1vZGVsQ29udmVydGVyLmdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0RW50aXR5S2V5cyhcblx0XHRcdFx0cmVjb21tZW5kYXRpb25PYmplY3RbXCJyZWNvbW1lbmRhdGlvbkNvbnRleHRcIl0gYXMgT0RhdGFWNENvbnRleHRcblx0XHRcdCk7XG5cdFx0XHQocmVjb21tZW5kYXRpb25PYmplY3RbXCJyZWNvbW1lbmRhdGlvbkNvbnRleHRcIl0gYXMgUmVjb21tZW5kYXRpb25Db250ZXh0c0luZm8pLmNvbnRleHRJZGVudGlmaWVyID0ga2V5c1tcInNlbWFudGljS2V5c1wiXVxuXHRcdFx0XHQ/IGtleXNbXCJzZW1hbnRpY0tleXNcIl1cblx0XHRcdFx0OiBrZXlzW1widGVjaG5pY2FsS2V5c1wiXTtcblx0XHRcdHRoaXMuZ2V0T3BlblJlY29tbWVuZGF0aW9uc0ZvckNvbnRleHQoXG5cdFx0XHRcdHJlY29tbWVuZGF0aW9uT2JqZWN0LFxuXHRcdFx0XHRyZWNvbW1lbmRhdGlvbk9iamVjdFtcInJlY29tbWVuZGF0aW9uQ29udGV4dFwiXSBhcyBPRGF0YVY0Q29udGV4dCxcblx0XHRcdFx0b3BlblJlY29tbWVuZGF0aW9uc1xuXHRcdFx0KTtcblx0XHR9XG5cdH1cblx0LyoqXG5cdCAqXG5cdCAqIEBwYXJhbSBjb250ZXh0RGF0YSBUaGUgY29udGV4dCBkYXRhIG9iamVjdCBmb3IgcmVjb21tZW5kYXRpb25zXG5cdCAqIEBwYXJhbSByZWNvbW1lbmRhdGlvbkNvbnRleHQgVGhlIHJlY29tbWVuZGF0aW9uIGNvbnRleHRcblx0ICogQHBhcmFtIG9wZW5SZWNvbW1lbmRhdGlvbnMgUmVjb21tZW5kYXRpb25EYXRhXG5cdCAqIEBwYXJhbSBjb250ZXh0S2V5IENvbnRleHQgS2V5XG5cdCAqL1xuXG5cdHByaXZhdGUgZ2V0T3BlblJlY29tbWVuZGF0aW9uc0ZvckNvbnRleHQoXG5cdFx0Y29udGV4dERhdGE6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuXHRcdHJlY29tbWVuZGF0aW9uQ29udGV4dDogT0RhdGFWNENvbnRleHQsXG5cdFx0b3BlblJlY29tbWVuZGF0aW9uczogUmVjb21tZW5kYXRpb25EYXRhW10sXG5cdFx0Y29udGV4dEtleSA9IFwiXCJcblx0KTogdm9pZCB7XG5cdFx0Zm9yIChjb25zdCBjdXJyZW50S2V5IGluIGNvbnRleHREYXRhKSB7XG5cdFx0XHRjb25zdCBjdXJyZW50VmFsdWUgPSBjb250ZXh0RGF0YVtjdXJyZW50S2V5XTtcblx0XHRcdGlmIChjdXJyZW50VmFsdWUpIHtcblx0XHRcdFx0Y29uc3QgY3VycmVudFZhbHVlSXNDb250ZXh0ID1cblx0XHRcdFx0XHQoY3VycmVudFZhbHVlIGFzIE9EYXRhVjRDb250ZXh0KS5pc0EgJiYgKGN1cnJlbnRWYWx1ZSBhcyBPRGF0YVY0Q29udGV4dCkuaXNBKFwic2FwLnVpLm1vZGVsLm9kYXRhLnY0LkNvbnRleHRcIik7XG5cdFx0XHRcdGlmIChjdXJyZW50S2V5LmluY2x1ZGVzKFwiQCR1aTUuZmUucmVjb21tZW5kYXRpb25zLnBsYWNlaG9sZGVyVmFsdWVcIikpIHtcblx0XHRcdFx0XHRjb25zdCBwcm9wZXJ0eVBhdGggPSBjdXJyZW50S2V5LnNwbGl0KFwiQCR1aTUuZmUucmVjb21tZW5kYXRpb25zLnBsYWNlaG9sZGVyVmFsdWVcIilbMF07XG5cdFx0XHRcdFx0Y29uc3Qgb3BlblJlY29tbWVuZGF0aW9uOiBSZWNvbW1lbmRhdGlvbkRhdGEgPSB7XG5cdFx0XHRcdFx0XHRjb250ZXh0OiByZWNvbW1lbmRhdGlvbkNvbnRleHQsXG5cdFx0XHRcdFx0XHRwcm9wZXJ0eVBhdGg6IGNvbnRleHRLZXkgPyBgJHtjb250ZXh0S2V5fS8ke3Byb3BlcnR5UGF0aH1gIDogcHJvcGVydHlQYXRoLFxuXHRcdFx0XHRcdFx0dmFsdWU6IGN1cnJlbnRWYWx1ZSBhcyBzdHJpbmcsXG5cdFx0XHRcdFx0XHRjb250ZXh0SWRlbnRpZmllcjogKHJlY29tbWVuZGF0aW9uQ29udGV4dCBhcyBSZWNvbW1lbmRhdGlvbkNvbnRleHRzSW5mbykuY29udGV4dElkZW50aWZpZXIsXG5cdFx0XHRcdFx0XHRjb250ZXh0SWRlbnRpZmllclRleHQ6IFtdXG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRjb25zdCBkZXNjcmlwdGlvbiA9IGNvbnRleHREYXRhW2Ake3Byb3BlcnR5UGF0aH1AJHVpNS5mZS5yZWNvbW1lbmRhdGlvbnMucGxhY2Vob2xkZXJEZXNjcmlwdGlvbmBdO1xuXHRcdFx0XHRcdGlmIChkZXNjcmlwdGlvbikge1xuXHRcdFx0XHRcdFx0b3BlblJlY29tbWVuZGF0aW9uLnRleHQgPSBkZXNjcmlwdGlvbiBhcyBzdHJpbmc7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdG9wZW5SZWNvbW1lbmRhdGlvbnMucHVzaChvcGVuUmVjb21tZW5kYXRpb24pO1xuXHRcdFx0XHR9IGVsc2UgaWYgKHR5cGVvZiBjdXJyZW50VmFsdWUgPT09IFwib2JqZWN0XCIgJiYgIUFycmF5LmlzQXJyYXkoY3VycmVudFZhbHVlKSAmJiAhY3VycmVudFZhbHVlSXNDb250ZXh0KSB7XG5cdFx0XHRcdFx0dGhpcy5nZXRPcGVuUmVjb21tZW5kYXRpb25zRm9yQ29udGV4dChcblx0XHRcdFx0XHRcdGN1cnJlbnRWYWx1ZSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcblx0XHRcdFx0XHRcdHJlY29tbWVuZGF0aW9uQ29udGV4dCxcblx0XHRcdFx0XHRcdG9wZW5SZWNvbW1lbmRhdGlvbnMsXG5cdFx0XHRcdFx0XHRjdXJyZW50S2V5XG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBPcGVucyB0aGUgY29uZmlybSByZWNvbW1lbmRhdGlvbnMgZGlhbG9nLlxuXHQgKiBAcGFyYW0gaXNTYXZlIEJvb2xlYW4gZmxhZyB3aGljaCB3b3VsZCBiZSBzZXQgdG8gdHJ1ZSBpZiB3ZSBhcmUgc2F2aW5nIHRoZSBkb2N1bWVudCBhbmQgd291bGQgYmUgZmFsc2UgaWYgd2UgZG8gYXBwbHkgY2hhbmdlc1xuXHQgKiBAcmV0dXJucyBQcm9taXNlIHdoaWNoIHdvdWxkIHJlc29sdmUgd2l0aCBSZWNvbW1lbmRhdGlvbkRpYWxvZ0RlY2lzaW9uIChBY2NlcHQsIElnbm9yZSwgQ29udGludWUsIFNraXBwZWQpXG5cdCAqL1xuXHRwdWJsaWMgYXN5bmMgb3Blbihpc1NhdmU6IGJvb2xlYW4pOiBQcm9taXNlPFJlY29tbWVuZGF0aW9uRGlhbG9nRGVjaXNpb24gfCB1bmRlZmluZWQ+IHtcblx0XHQvLyBjaGVjayBmb3IgYnVpbHQtaW4gcmVjb21tZW5kYXRpb25zXG5cdFx0Y29uc3Qgb3BlblJlY29tbWVuZGF0aW9ucyA9IHRoaXMuZ2V0T3BlblJlY29tbWVuZGF0aW9ucygpO1xuXHRcdGlmIChvcGVuUmVjb21tZW5kYXRpb25zLmxlbmd0aCA+IDApIHtcblx0XHRcdHN0YW5kYXJkUmVjb21tZW5kYXRpb25IZWxwZXIuYWRkQ29udGV4dElkZW50aWZpZXJUZXh0KFxuXHRcdFx0XHR7IHJlY29tbWVuZGF0aW9uRGF0YTogb3BlblJlY29tbWVuZGF0aW9ucyB9LFxuXHRcdFx0XHR0aGlzLnZpZXcuZ2V0QmluZGluZ0NvbnRleHQoKT8uZ2V0UGF0aCgpXG5cdFx0XHQpO1xuXHRcdFx0dGhpcy5hY2NlcHRBbGxQYXJhbXMgPSB7XG5cdFx0XHRcdHJlY29tbWVuZGF0aW9uRGF0YTogb3BlblJlY29tbWVuZGF0aW9uc1xuXHRcdFx0fTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gaWYgYnVpbHQtaW4gcmVjb21tZW5kYXRpb25zIGFyZSBub3QgZm91bmQgdGhlbiBjaGVjayBmb3IgbGVnYWN5IHJlY29tbWVuZGF0aW9ucy5cblx0XHRcdGNvbnN0IGxlZ2FjeVJlY29tbWVuZGF0aW9uc0V4aXN0ID0gKHRoaXMudmlldz8uZ2V0Q29udHJvbGxlcigpIGFzIFBhZ2VDb250cm9sbGVyKS5yZWNvbW1lbmRhdGlvbnMuY2hlY2tJZlJlY29tbWVuZGF0aW9uc0V4aXN0KCk7XG5cdFx0XHRpZiAobGVnYWN5UmVjb21tZW5kYXRpb25zRXhpc3QpIHtcblx0XHRcdFx0dGhpcy5hY2NlcHRBbGxQYXJhbXMgPSBhd2FpdCAodGhpcy52aWV3Py5nZXRDb250cm9sbGVyKCkgYXMgUGFnZUNvbnRyb2xsZXIpLnJlY29tbWVuZGF0aW9ucy5mZXRjaEFjY2VwdEFsbFBhcmFtcygpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHRcdH1cblx0XHR9XG5cdFx0Y29uc3QgYWNjZXB0TW9kZWwgPSB0aGlzLmdldEFjY2VwdEFsbE1vZGVsKCk7XG5cdFx0dGhpcy52aWV3LnNldE1vZGVsKGFjY2VwdE1vZGVsLCBcIl9hY2NlcHREaWFsb2dNb2RlbFwiKTtcblx0XHRpZiAoIWFjY2VwdE1vZGVsLmdldERhdGEoKS5pdGVtcz8ubGVuZ3RoKSB7XG5cdFx0XHRyZXR1cm4gUmVjb21tZW5kYXRpb25EaWFsb2dEZWNpc2lvbi5Ta2lwcGVkO1xuXHRcdH1cblx0XHR0aGlzLmlzU2F2ZSA9IGlzU2F2ZTtcblx0XHRjb25zdCBkaWFsb2cgPSB0aGlzLmdldENvbnRlbnQoKTtcblx0XHRkaWFsb2c/LnNldEVzY2FwZUhhbmRsZXIodGhpcy5vbkNvbnRpbnVlRWRpdGluZy5iaW5kKHRoaXMpKTtcblx0XHR0aGlzLnZpZXcuYWRkRGVwZW5kZW50KGRpYWxvZyBhcyBVSTVFbGVtZW50KTtcblx0XHRkaWFsb2c/Lm9wZW4oKTtcblx0XHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXHRcdFx0dGhpcy5wcm9taXNlUmVzb2x2ZSA9IHJlc29sdmU7XG5cdFx0XHR0aGlzLnByb21pc2VSZWplY3QgPSByZWplY3Q7XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogSGFuZGxlciB0byBjbG9zZSB0aGUgY29uZmlybVJlY29tbWVuZGF0aW9uIGRpYWxvZy5cblx0ICpcblx0ICovXG5cdHB1YmxpYyBjbG9zZSgpOiB2b2lkIHtcblx0XHR0aGlzLmNvbmZpcm1SZWNvbW1lbmRhdGlvbkRpYWxvZy5jdXJyZW50Py5jbG9zZSgpO1xuXHRcdHRoaXMuY29uZmlybVJlY29tbWVuZGF0aW9uRGlhbG9nLmN1cnJlbnQ/LmRlc3Ryb3koKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBIYW5kbGVyIGZvciBBY2NlcHQgYW5kIFNhdmUgYnV0dG9uLlxuXHQgKi9cblx0cHJpdmF0ZSBhc3luYyBvbkFjY2VwdEFuZFNhdmUoKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0dHJ5IHtcblx0XHRcdGNvbnN0IGlzQWNjZXB0ZWQgPSBhd2FpdCAodGhpcy52aWV3Py5nZXRDb250cm9sbGVyKCkgYXMgUGFnZUNvbnRyb2xsZXIpLnJlY29tbWVuZGF0aW9ucy5hY2NlcHRSZWNvbW1lbmRhdGlvbnMoXG5cdFx0XHRcdHRoaXMuYWNjZXB0QWxsUGFyYW1zXG5cdFx0XHQpO1xuXHRcdFx0aWYgKCFpc0FjY2VwdGVkKSB7XG5cdFx0XHRcdHRoaXMucHJvbWlzZVJlamVjdChcIkFjY2VwdCBGYWlsZWRcIik7XG5cdFx0XHR9XG5cdFx0XHR0aGlzLnByb21pc2VSZXNvbHZlKFJlY29tbWVuZGF0aW9uRGlhbG9nRGVjaXNpb24uQWNjZXB0KTtcblx0XHR9IGNhdGNoIHtcblx0XHRcdExvZy5lcnJvcihcIkFjY2VwdCBSZWNvbW1lbmRhdGlvbnMgRmFpbGVkXCIpO1xuXHRcdFx0dGhpcy5wcm9taXNlUmVqZWN0KFwiQWNjZXB0IEZhaWxlZFwiKTtcblx0XHR9IGZpbmFsbHkge1xuXHRcdFx0dGhpcy5jbG9zZSgpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBIYW5kbGVyIGZvciBJZ25vcmUgYW5kIFNhdmUgYnV0dG9uLlxuXHQgKi9cblx0cHJpdmF0ZSBvbklnbm9yZUFuZFNhdmUoKTogdm9pZCB7XG5cdFx0KHRoaXMudmlldz8uZ2V0Q29udHJvbGxlcigpIGFzIFBhZ2VDb250cm9sbGVyKS5yZWNvbW1lbmRhdGlvbnMuaWdub3JlUmVjb21tZW5kYXRpb25Gb3JDb250ZXh0cygpO1xuXHRcdHRoaXMucHJvbWlzZVJlc29sdmUoUmVjb21tZW5kYXRpb25EaWFsb2dEZWNpc2lvbi5JZ25vcmUpO1xuXHRcdHRoaXMuY2xvc2UoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBIYW5kbGVyIGZvciBDb250aW51ZSBFZGl0aW5nIGJ1dHRvbi5cblx0ICovXG5cdHByaXZhdGUgb25Db250aW51ZUVkaXRpbmcoKTogdm9pZCB7XG5cdFx0dGhpcy5wcm9taXNlUmVzb2x2ZShSZWNvbW1lbmRhdGlvbkRpYWxvZ0RlY2lzaW9uLkNvbnRpbnVlKTtcblx0XHR0aGlzLmNsb3NlKCk7XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgbGFiZWwgb3IgbmFtZSBvZiB0aGUgRmllbGQgYmFzZWQgb24gaXRzIHByb3BlcnR5IHBhdGguXG5cdCAqIEBwYXJhbSB0YXJnZXRQYXRoXG5cdCAqIEByZXR1cm5zIFJldHVybnMgdGhlIGxhYmVsIG9mIHRoZSBGaWVsZC5cblx0ICovXG5cdHByaXZhdGUgZ2V0RmllbGROYW1lKHRhcmdldFBhdGg6IHN0cmluZyk6IHN0cmluZyB7XG5cdFx0Y29uc3QgaW52b2x2ZWREYXRhTW9kZWxPYmplY3QgPSBNZXRhTW9kZWxDb252ZXJ0ZXIuZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzRm9yVGFyZ2V0UGF0aDxQcm9wZXJ0eT4oXG5cdFx0XHR0YXJnZXRQYXRoLFxuXHRcdFx0dGhpcy52aWV3Py5nZXRCaW5kaW5nQ29udGV4dCgpPy5nZXRNb2RlbCgpPy5nZXRNZXRhTW9kZWwoKSBhcyBPRGF0YU1ldGFNb2RlbFxuXHRcdCk7XG5cdFx0cmV0dXJuIChcblx0XHRcdGludm9sdmVkRGF0YU1vZGVsT2JqZWN0Py50YXJnZXRPYmplY3Q/LmFubm90YXRpb25zPy5Db21tb24/LkxhYmVsPy50b1N0cmluZygpIHx8XG5cdFx0XHR0YXJnZXRQYXRoLnNwbGl0KFwiL1wiKVt0YXJnZXRQYXRoLnNwbGl0KFwiL1wiKS5sZW5ndGggLSAxXVxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICogRmV0Y2hlcyB0ZXh0IGZvciByZWNvbW1lbmRhdGlvbiBiYXNlZCBvbiBkaXNwbGF5IG1vZGUuXG5cdCAqIEBwYXJhbSByZWNvbW1lbmRhdGlvblxuXHQgKiBAcGFyYW0gZGlzcGxheU1vZGVcblx0ICogQHJldHVybnMgVGV4dCBmb3IgYSByZWNvbW1lbmRhdGlvblxuXHQgKi9cblx0cHJpdmF0ZSBnZXRUZXh0KHJlY29tbWVuZGF0aW9uOiBTdGFuZGFyZFJlY29tbWVuZGF0aW9uRGF0YVR5cGUsIGRpc3BsYXlNb2RlOiBzdHJpbmcpOiBzdHJpbmcge1xuXHRcdGlmIChyZWNvbW1lbmRhdGlvbi50ZXh0IHx8IHJlY29tbWVuZGF0aW9uLnZhbHVlKSB7XG5cdFx0XHRzd2l0Y2ggKGRpc3BsYXlNb2RlKSB7XG5cdFx0XHRcdGNhc2UgXCJEZXNjcmlwdGlvblwiOlxuXHRcdFx0XHRcdHJldHVybiByZWNvbW1lbmRhdGlvbi50ZXh0ITtcblx0XHRcdFx0Y2FzZSBcIkRlc2NyaXB0aW9uVmFsdWVcIjpcblx0XHRcdFx0XHRyZXR1cm4gdmFsdWVGb3JtYXR0ZXJzLmZvcm1hdFdpdGhCcmFja2V0cyhyZWNvbW1lbmRhdGlvbi50ZXh0LCByZWNvbW1lbmRhdGlvbi52YWx1ZSk7XG5cdFx0XHRcdGNhc2UgXCJWYWx1ZURlc2NyaXB0aW9uXCI6XG5cdFx0XHRcdFx0cmV0dXJuIHZhbHVlRm9ybWF0dGVycy5mb3JtYXRXaXRoQnJhY2tldHMocmVjb21tZW5kYXRpb24udmFsdWUsIHJlY29tbWVuZGF0aW9uLnRleHQpO1xuXHRcdFx0XHRjYXNlIFwiVmFsdWVcIjpcblx0XHRcdFx0XHRyZXR1cm4gcmVjb21tZW5kYXRpb24udmFsdWUhO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gcmVjb21tZW5kYXRpb24udmFsdWUgfHwgXCJcIjtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIEJ1dHRvbiB3aXRoIGdpdmVuIHRleHQsIHR5cGUgYW5kIHByZXNzSGFuZGxlci5cblx0ICogQHBhcmFtIHRleHQgVGV4dCBmb3IgdGhlIGJ1dHRvblxuXHQgKiBAcGFyYW0gdHlwZSBUeXBlIG9mIHRoZSBidXR0b25cblx0ICogQHBhcmFtIHByZXNzSGFuZGxlciBQcmVzcyBIYW5kbGVyIGZvciB0aGUgYnV0dG9uXG5cdCAqIEByZXR1cm5zIEJ1dHRvbiB3aXRoIHRoZSBnaXZlbiBzZXR0aW5nc1xuXHQgKi9cblx0cHJpdmF0ZSBnZXRCdXR0b24odGV4dDogc3RyaW5nLCB0eXBlOiBzdHJpbmcsIHByZXNzSGFuZGxlcjogRXZlbnRIYW5kbGVyKTogQnV0dG9uIHtcblx0XHRyZXR1cm4gKFxuXHRcdFx0PEJ1dHRvbiB0ZXh0PXt0ZXh0fSB0eXBlPXt0eXBlfSB3aWR0aD17XCJhdXRvXCJ9IHByZXNzPXtwcmVzc0hhbmRsZXJ9PlxuXHRcdFx0XHR7e1xuXHRcdFx0XHRcdGxheW91dERhdGE6IChcblx0XHRcdFx0XHRcdDw+XG5cdFx0XHRcdFx0XHRcdDxGbGV4SXRlbURhdGEgbWluV2lkdGg9e1wiMTAwJVwifT48L0ZsZXhJdGVtRGF0YT5cblx0XHRcdFx0XHRcdDwvPlxuXHRcdFx0XHRcdClcblx0XHRcdFx0fX1cblx0XHRcdDwvQnV0dG9uPlxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICogUmV0dXJucyBGb290ZXIgd2l0aCBCdXR0b25zLlxuXHQgKiBAcmV0dXJucyBGb290ZXJcblx0ICovXG5cblx0cHJpdmF0ZSBnZXRGb290ZXIoKTogVG9vbGJhciB7XG5cdFx0cmV0dXJuIChcblx0XHRcdDxUb29sYmFyPlxuXHRcdFx0XHR7e1xuXHRcdFx0XHRcdGNvbnRlbnQ6IChcblx0XHRcdFx0XHRcdDw+XG5cdFx0XHRcdFx0XHRcdDxUb29sYmFyU3BhY2VyIC8+XG5cdFx0XHRcdFx0XHRcdHt0aGlzLmdldEJ1dHRvbihcblx0XHRcdFx0XHRcdFx0XHR0aGlzLl9nZXREaWFsb2dCdXR0b25UZXh0KHRoaXMuaXNTYXZlLCBSZWNvbW1lbmRhdGlvbkRpYWxvZ0RlY2lzaW9uLkFjY2VwdCksXG5cdFx0XHRcdFx0XHRcdFx0XCJFbXBoYXNpemVkXCIsXG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5vbkFjY2VwdEFuZFNhdmUuYmluZCh0aGlzKVxuXHRcdFx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdFx0XHR7dGhpcy5nZXRCdXR0b24oXG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5fZ2V0RGlhbG9nQnV0dG9uVGV4dCh0aGlzLmlzU2F2ZSwgUmVjb21tZW5kYXRpb25EaWFsb2dEZWNpc2lvbi5JZ25vcmUpLFxuXHRcdFx0XHRcdFx0XHRcdFwiR2hvc3RcIixcblx0XHRcdFx0XHRcdFx0XHR0aGlzLm9uSWdub3JlQW5kU2F2ZS5iaW5kKHRoaXMpXG5cdFx0XHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0XHRcdHt0aGlzLmdldEJ1dHRvbihcblx0XHRcdFx0XHRcdFx0XHR0aGlzLmNvbmZpcm1SZWNvbW1lbmRhdGlvbkRpYWxvZ1Jlc291cmNlTW9kZWwuZ2V0VGV4dChcIkNfUkVDT01NRU5EQVRJT05fRElBTE9HX0NPTlRJTlVFX0VESVRJTkdcIiksXG5cdFx0XHRcdFx0XHRcdFx0XCJHaG9zdFwiLFxuXHRcdFx0XHRcdFx0XHRcdHRoaXMub25Db250aW51ZUVkaXRpbmcuYmluZCh0aGlzKVxuXHRcdFx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdFx0PC8+XG5cdFx0XHRcdFx0KVxuXHRcdFx0XHR9fVxuXHRcdFx0PC9Ub29sYmFyPlxuXHRcdCk7XG5cdH1cblxuXHRwcml2YXRlIF9nZXREaWFsb2dCdXR0b25UZXh0KHNhdmU6IGJvb2xlYW4sIHJlY29tbWVuZGF0aW9uRGlhbG9nRGVjaXNpb246IFJlY29tbWVuZGF0aW9uRGlhbG9nRGVjaXNpb24pOiBzdHJpbmcge1xuXHRcdGNvbnN0IGlzQWNjZXB0QnV0dG9uOiBib29sZWFuID0gcmVjb21tZW5kYXRpb25EaWFsb2dEZWNpc2lvbiA9PT0gUmVjb21tZW5kYXRpb25EaWFsb2dEZWNpc2lvbi5BY2NlcHQ7XG5cdFx0aWYgKHNhdmUpIHtcblx0XHRcdGlmICghdGhpcy52aWV3LmdldEJpbmRpbmdDb250ZXh0KCk/LmdldE9iamVjdCgpLkhhc0FjdGl2ZUVudGl0eSkge1xuXHRcdFx0XHRyZXR1cm4gaXNBY2NlcHRCdXR0b25cblx0XHRcdFx0XHQ/IHRoaXMuY29uZmlybVJlY29tbWVuZGF0aW9uRGlhbG9nUmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiQ19SRUNPTU1FTkRBVElPTl9ESUFMT0dfQUNDRVBUX0FORF9DUkVBVEVcIilcblx0XHRcdFx0XHQ6IHRoaXMuY29uZmlybVJlY29tbWVuZGF0aW9uRGlhbG9nUmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiQ19SRUNPTU1FTkRBVElPTl9ESUFMT0dfSUdOT1JFX0FORF9DUkVBVEVcIik7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gaXNBY2NlcHRCdXR0b25cblx0XHRcdFx0PyB0aGlzLmNvbmZpcm1SZWNvbW1lbmRhdGlvbkRpYWxvZ1Jlc291cmNlTW9kZWwuZ2V0VGV4dChcIkNfUkVDT01NRU5EQVRJT05fRElBTE9HX0FDQ0VQVF9BTkRfU0FWRVwiKVxuXHRcdFx0XHQ6IHRoaXMuY29uZmlybVJlY29tbWVuZGF0aW9uRGlhbG9nUmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiQ19SRUNPTU1FTkRBVElPTl9ESUFMT0dfSUdOT1JFX0FORF9TQVZFXCIpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gaXNBY2NlcHRCdXR0b25cblx0XHRcdFx0PyB0aGlzLmNvbmZpcm1SZWNvbW1lbmRhdGlvbkRpYWxvZ1Jlc291cmNlTW9kZWwuZ2V0VGV4dChcIkNfUkVDT01NRU5EQVRJT05fRElBTE9HX0FDQ0VQVFwiKVxuXHRcdFx0XHQ6IHRoaXMuY29uZmlybVJlY29tbWVuZGF0aW9uRGlhbG9nUmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiQ19SRUNPTU1FTkRBVElPTl9ESUFMT0dfSUdOT1JFXCIpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBjcmVhdGVkIGEgSlNPTiBNb2RlbCBmb3IgdGhlIGFjY2VwdCBhbGwgZGlhbG9nIGRhdGEuXG5cdCAqIEByZXR1cm5zIFRoZSBKU09OIE1vZGVsIGZvciBhY2NlcHQgYWxsIGRpYWxvZy5cblx0ICovXG5cdGdldEFjY2VwdEFsbE1vZGVsKCk6IEpTT05Nb2RlbCB7XG5cdFx0Y29uc3QgYWNjZXB0TW9kZWwgPSBuZXcgSlNPTk1vZGVsKCk7XG5cdFx0Y29uc3QgaXRlbXMgPSBbXTtcblx0XHRmb3IgKGNvbnN0IHJlY29tbWVuZGF0aW9uRGF0YSBvZiB0aGlzLmFjY2VwdEFsbFBhcmFtcz8ucmVjb21tZW5kYXRpb25EYXRhIHx8IFtdKSB7XG5cdFx0XHRjb25zdCBlbnRpdHlOYW1lTGFiZWwgPSBzdGFuZGFyZFJlY29tbWVuZGF0aW9uSGVscGVyLmdldEVudGl0eU5hbWUocmVjb21tZW5kYXRpb25EYXRhLmNvbnRleHQgYXMgT0RhdGFWNENvbnRleHQpIHx8IFwiXCI7XG5cblx0XHRcdGNvbnN0IGlkZW50aWZpZXJUZXh0cyA9XG5cdFx0XHRcdHJlY29tbWVuZGF0aW9uRGF0YS5jb250ZXh0SWRlbnRpZmllclRleHQgJiYgcmVjb21tZW5kYXRpb25EYXRhLmNvbnRleHRJZGVudGlmaWVyVGV4dC5sZW5ndGggPiAwXG5cdFx0XHRcdFx0PyBgJHtlbnRpdHlOYW1lTGFiZWx9ICgke3JlY29tbWVuZGF0aW9uRGF0YS5jb250ZXh0SWRlbnRpZmllclRleHR9KWBcblx0XHRcdFx0XHQ6IGVudGl0eU5hbWVMYWJlbDtcblxuXHRcdFx0aWYgKHJlY29tbWVuZGF0aW9uRGF0YS52YWx1ZSB8fCByZWNvbW1lbmRhdGlvbkRhdGEudGV4dCkge1xuXHRcdFx0XHRjb25zdCB0YXJnZXRQYXRoID0gcmVjb21tZW5kYXRpb25EYXRhLmNvbnRleHQ/LmdldFBhdGgoKSArIFwiL1wiICsgcmVjb21tZW5kYXRpb25EYXRhLnByb3BlcnR5UGF0aDtcblx0XHRcdFx0Y29uc3QgZGlzcGxheU1vZGUgPSBzdGFuZGFyZFJlY29tbWVuZGF0aW9uSGVscGVyLmdldERpc3BsYXlNb2RlRm9yVGFyZ2V0UGF0aChcblx0XHRcdFx0XHR0YXJnZXRQYXRoLFxuXHRcdFx0XHRcdHRoaXMudmlldz8uZ2V0QmluZGluZ0NvbnRleHQoKT8uZ2V0TW9kZWwoKT8uZ2V0TWV0YU1vZGVsKCkgYXMgT0RhdGFNZXRhTW9kZWxcblx0XHRcdFx0KTtcblx0XHRcdFx0Y29uc3QgbGlzdERhdGEgPSB7XG5cdFx0XHRcdFx0ZmllbGROYW1lOiB0aGlzLmdldEZpZWxkTmFtZSh0YXJnZXRQYXRoKS52YWx1ZU9mKCksXG5cdFx0XHRcdFx0ZmllbGRWYWx1ZTogdGhpcy5nZXRUZXh0KHJlY29tbWVuZGF0aW9uRGF0YSwgZGlzcGxheU1vZGUpLFxuXHRcdFx0XHRcdGlkZW50aWZpZXJUZXh0czogaWRlbnRpZmllclRleHRzXG5cdFx0XHRcdH07XG5cdFx0XHRcdGl0ZW1zLnB1c2gobGlzdERhdGEpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRhY2NlcHRNb2RlbC5zZXREYXRhKHsgaXRlbXM6IGl0ZW1zIH0pO1xuXHRcdHJldHVybiBhY2NlcHRNb2RlbDtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBncm91cHMgdGhlIGNvbnRleHRzIGFjY29yZGluZyB0byB0aGUgaWRlbnRpZmllciB0ZXh0cy5cblx0ICogQHBhcmFtIGNvbnRleHQgVGhlIGNvbnRleHQgb2YgdGhlIGl0ZW1cblx0ICogQHJldHVybnMgVGhlIHRleHQgb2YgdGhlIGdyb3VwXG5cdCAqL1xuXHRnZXRHcm91cChjb250ZXh0OiBPRGF0YVY0Q29udGV4dCk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIGNvbnRleHQuZ2V0UHJvcGVydHkoXCJpZGVudGlmaWVyVGV4dHNcIik7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBtZXNzYWdlIHRvIGJlIHNob3duIGluIHRoZSBhY2NlcHQgZGlhbG9nLlxuXHQgKiBAcmV0dXJucyBBIG1lc3NhZ2Ugd2l0aCB0aGUgZGVzaXJlZCB0ZXh0LlxuXHQgKi9cblx0Z2V0TWVzc2FnZSgpOiBUZXh0IHtcblx0XHRjb25zdCBhY2NlcHRBbGxEYXRhID0gKHRoaXMudmlldy5nZXRNb2RlbChcIl9hY2NlcHREaWFsb2dNb2RlbFwiKSBhcyBKU09OTW9kZWwpPy5nZXREYXRhKCk/Lml0ZW1zO1xuXHRcdGNvbnN0IG1lc3NhZ2VUZXh0ID1cblx0XHRcdGFjY2VwdEFsbERhdGEubGVuZ3RoID4gMVxuXHRcdFx0XHQ/IHRoaXMuY29uZmlybVJlY29tbWVuZGF0aW9uRGlhbG9nUmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiQ19SRUNPTU1FTkRBVElPTl9ESUFMT0dfVEVYVFwiLCBbYWNjZXB0QWxsRGF0YS5sZW5ndGhdKVxuXHRcdFx0XHQ6IHRoaXMuY29uZmlybVJlY29tbWVuZGF0aW9uRGlhbG9nUmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiQ19SRUNPTU1FTkRBVElPTl9ESUFMT0dfVEVYVF9TSU5HVUxBUlwiKTtcblx0XHRyZXR1cm4gPFRleHQgdGV4dD17bWVzc2FnZVRleHR9IC8+O1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGNyZWF0ZXMgdGhlIGNvbnRlbnQgZm9yIHRoZSBkaWFsb2cuXG5cdCAqIEByZXR1cm5zIEEgbGlzdCBhcyBjb250ZW50IG9mIHRoZSBkaWFsb2cuXG5cdCAqL1xuXHRnZXREaWFsb2dDb250ZW50KCk6IExpc3Qge1xuXHRcdHJldHVybiAoXG5cdFx0XHQ8TGlzdCBpdGVtcz17eyBtb2RlbDogXCJfYWNjZXB0RGlhbG9nTW9kZWxcIiwgcGF0aDogXCIvaXRlbXNcIiwgc29ydGVyOiBuZXcgU29ydGVyKFwiaWRlbnRpZmllclRleHRzXCIsIGZhbHNlLCB0aGlzLmdldEdyb3VwKSB9fT5cblx0XHRcdFx0PEN1c3RvbUxpc3RJdGVtPlxuXHRcdFx0XHRcdDxIQm94IGNsYXNzPVwic2FwVWlTbWFsbE1hcmdpbkJlZ2luIHNhcFVpVGlueU1hcmdpblwiPlxuXHRcdFx0XHRcdFx0PFRleHQgdGV4dD1cIntfYWNjZXB0RGlhbG9nTW9kZWw+ZmllbGROYW1lfToge19hY2NlcHREaWFsb2dNb2RlbD5maWVsZFZhbHVlfVwiIC8+XG5cdFx0XHRcdFx0PC9IQm94PlxuXHRcdFx0XHQ8L0N1c3RvbUxpc3RJdGVtPlxuXHRcdFx0PC9MaXN0PlxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICogVGhlIGJ1aWxkaW5nIGJsb2NrIHJlbmRlciBmdW5jdGlvbi5cblx0ICogQHJldHVybnMgQW4gWE1MLWJhc2VkIHN0cmluZ1xuXHQgKi9cblx0Z2V0Q29udGVudCgpOiBEaWFsb2cge1xuXHRcdHJldHVybiAoXG5cdFx0XHQ8RGlhbG9nXG5cdFx0XHRcdHRpdGxlPXt0aGlzLmNvbmZpcm1SZWNvbW1lbmRhdGlvbkRpYWxvZ1Jlc291cmNlTW9kZWwuZ2V0VGV4dChcIkNfUkVDT01NRU5EQVRJT05fRElBTE9HX1RJVExFXCIpfVxuXHRcdFx0XHRzdGF0ZT17VmFsdWVTdGF0ZS5JbmZvcm1hdGlvbn1cblx0XHRcdFx0dHlwZT17XCJNZXNzYWdlXCJ9XG5cdFx0XHRcdHJlZj17dGhpcy5jb25maXJtUmVjb21tZW5kYXRpb25EaWFsb2d9XG5cdFx0XHRcdHJlc2l6YWJsZT17XCJ0cnVlXCJ9XG5cdFx0XHRcdGNvbnRlbnRXaWR0aD17XCIzNXJlbVwifVxuXHRcdFx0PlxuXHRcdFx0XHR7e1xuXHRcdFx0XHRcdGNvbnRlbnQ6IChcblx0XHRcdFx0XHRcdDw+XG5cdFx0XHRcdFx0XHRcdHt0aGlzLmdldE1lc3NhZ2UoKX1cblx0XHRcdFx0XHRcdFx0e3RoaXMuZ2V0RGlhbG9nQ29udGVudCgpfVxuXHRcdFx0XHRcdFx0PC8+XG5cdFx0XHRcdFx0KSxcblx0XHRcdFx0XHRmb290ZXI6IDw+e3RoaXMuZ2V0Rm9vdGVyKCl9PC8+XG5cdFx0XHRcdH19XG5cdFx0XHQ8L0RpYWxvZz5cblx0XHQpIGFzIERpYWxvZztcblx0fVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O01Bb0NZQSw0QkFBNEIsMEJBQTVCQSw0QkFBNEI7SUFBNUJBLDRCQUE0QjtJQUE1QkEsNEJB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
@@ -18,6 +18,7 @@ import ManagedObject from "sap/ui/base/ManagedObject";
18
18
  import type UI5Element from "sap/ui/core/Element";
19
19
  import { ValueState } from "sap/ui/core/library";
20
20
  import type View from "sap/ui/core/mvc/View";
21
+ import type Context from "sap/ui/model/Context";
21
22
  import Sorter from "sap/ui/model/Sorter";
22
23
  import JSONModel from "sap/ui/model/json/JSONModel";
23
24
  import type { default as ODataV4Context } from "sap/ui/model/odata/v4/Context";
@@ -80,22 +81,25 @@ export class ConfirmRecommendationDialog extends ManagedObject {
80
81
  const visibleContextPaths = this.getVisiblePageContextPaths();
81
82
  const openRecommendations = this.getOpenRecommendationsForVisibleContextPaths(visibleContextPaths);
82
83
  const recommendations: RecommendationData[] = [];
84
+
83
85
  if (openRecommendations.length > 0) {
84
86
  openRecommendations.forEach((recommendation) => {
85
- const context = this.view.getBindingContext();
86
- const propertyPath: string = recommendation.propertyPath ? recommendation.propertyPath : "";
87
- if (
88
- context?.getProperty(propertyPath) === null ||
89
- context?.getProperty(propertyPath) === undefined ||
90
- context?.getProperty(propertyPath) == ""
91
- ) {
87
+ const primaryContext = recommendation.context;
88
+ const fallbackContext = this.view.getBindingContext();
89
+ const propertyPath = recommendation.propertyPath ?? "";
90
+
91
+ const isEmpty = (ctx: Context | undefined | null, path: string): boolean => {
92
+ const value = ctx?.getProperty(path);
93
+ return value === null || value === undefined || value === "";
94
+ };
95
+
96
+ // push recommendation if property is empty in both contexts
97
+ if (isEmpty(primaryContext, propertyPath) && isEmpty(fallbackContext, propertyPath)) {
92
98
  recommendations.push(recommendation);
93
99
  }
94
100
  });
95
101
  }
96
102
  return recommendations;
97
- // check if we have recommendations from the current page in the localAnnotationModel
98
- // return open recommendations.
99
103
  }
100
104
 
101
105
  /**
@@ -0,0 +1,144 @@
1
+ /*!
2
+ * SAP UI development toolkit for HTML5 (SAPUI5)
3
+ * (c) Copyright 2009-2025 SAP SE. All rights reserved
4
+ */
5
+ sap.ui.define(["sap/m/Button", "sap/m/CustomListItem", "sap/m/Dialog", "sap/m/Label", "sap/m/List", "sap/m/Text", "sap/m/VBox", "sap/ui/core/CustomData", "sap/ui/core/library", "sap/fe/base/jsx-runtime/jsx", "sap/fe/base/jsx-runtime/jsxs"], function (Button, CustomListItem, Dialog, Label, List, Text, VBox, CustomData, library, _jsx, _jsxs) {
6
+ "use strict";
7
+
8
+ var _exports = {};
9
+ var ValueState = library.ValueState;
10
+ let DIALOGRESULT = /*#__PURE__*/function (DIALOGRESULT) {
11
+ DIALOGRESULT["SAVE"] = "Save";
12
+ DIALOGRESULT["DISCARD"] = "Discard";
13
+ DIALOGRESULT["CANCEL"] = "Cancel";
14
+ return DIALOGRESULT;
15
+ }({});
16
+ _exports.DIALOGRESULT = DIALOGRESULT;
17
+ let InlineEditExitDialog = /*#__PURE__*/function () {
18
+ function InlineEditExitDialog(view, dialogCallBack) {
19
+ this.containingView = view;
20
+ this.dialogCallBack = dialogCallBack;
21
+ this.optionsList = _jsx(List, {
22
+ mode: "SingleSelectLeft",
23
+ showSeparators: "None",
24
+ includeItemInSelection: "true",
25
+ backgroundDesign: "Transparent",
26
+ class: "sapUiNoContentPadding",
27
+ children: {
28
+ items: [_jsx(CustomListItem, {
29
+ customData: [new CustomData({
30
+ key: "itemKey",
31
+ value: "SAVE"
32
+ })],
33
+ children: _jsxs(VBox, {
34
+ class: "sapUiTinyMargin",
35
+ children: [_jsx(Label, {
36
+ text: "{sap.fe.i18n>C_INLINE_EDIT_BEFORENAVIGATION_SAVE_RBL}",
37
+ design: "Bold"
38
+ }), _jsx(Text, {
39
+ text: "{sap.fe.i18n>C_INLINE_EDIT_BEFORENAVIGATION_SAVE_TOL}"
40
+ })]
41
+ })
42
+ }), _jsx(CustomListItem, {
43
+ customData: [new CustomData({
44
+ key: "itemKey",
45
+ value: "DISCARD"
46
+ })],
47
+ children: _jsxs(VBox, {
48
+ class: "sapUiTinyMargin",
49
+ children: [_jsx(Label, {
50
+ text: "{sap.fe.i18n>C_INLINE_EDIT_BEFORENAVIGATION_DISCARD_RBL}",
51
+ design: "Bold"
52
+ }), _jsx(Text, {
53
+ text: "{sap.fe.i18n>C_INLINE_EDIT_BEFORENAVIGATION_DISCARD_TOL}"
54
+ })]
55
+ })
56
+ })]
57
+ }
58
+ });
59
+ this.dialog = _jsxs(Dialog, {
60
+ title: "{sap.fe.i18n>WARNING}",
61
+ type: "Message",
62
+ contentWidth: "22rem",
63
+ state: ValueState.Warning,
64
+ children: [{
65
+ content: [_jsx(Text, {
66
+ text: "{sap.fe.i18n>C_INLINE_EDIT_BEFORENAVIGATION_MESSAGE}",
67
+ class: "sapUiTinyMarginBegin sapUiTinyMarginTopBottom"
68
+ }), this.optionsList]
69
+ }, {
70
+ beginButton: _jsx(Button, {
71
+ type: "Emphasized",
72
+ text: "{sap.fe.i18n>C_COMMON_DIALOG_OK}",
73
+ press: () => this.closeAndOK()
74
+ })
75
+ }, {
76
+ endButton: _jsx(Button, {
77
+ text: "{sap.fe.i18n>C_COMMON_DIALOG_CANCEL}",
78
+ press: () => this.closeAndCancel()
79
+ })
80
+ }]
81
+ });
82
+ view.addDependent(this.dialog);
83
+ }
84
+
85
+ /**
86
+ * Open the dialog.
87
+ */
88
+ _exports = InlineEditExitDialog;
89
+ var _proto = InlineEditExitDialog.prototype;
90
+ _proto.open = function open() {
91
+ this.dialog.open();
92
+ this.selectAndFocusFirstEntry();
93
+ }
94
+
95
+ /**
96
+ * Gets the key of the selected item from the list of options that was set via customData.
97
+ * @returns The key of the currently selected item
98
+ */;
99
+ _proto.getSelectedKey = function getSelectedKey() {
100
+ const optionsList = this.optionsList;
101
+ return optionsList.getSelectedItem().data("itemKey");
102
+ }
103
+
104
+ /**
105
+ * Sets the focus on the first list item of the dialog.
106
+ *
107
+ */;
108
+ _proto.selectAndFocusFirstEntry = function selectAndFocusFirstEntry() {
109
+ const firstListItemOption = this.optionsList.getItems()[0];
110
+ this.optionsList.setSelectedItem(firstListItemOption);
111
+ // We do not set the focus on the button, but catch the ENTER key in the dialog
112
+ // and process it as Ok, since focusing the button was reported as an ACC issue
113
+ firstListItemOption?.focus();
114
+ }
115
+
116
+ /**
117
+ * Close the dialog and call the callBack with the selected key.
118
+ * @private
119
+ */;
120
+ _proto.closeAndOK = function closeAndOK() {
121
+ if (this.getSelectedKey() === "SAVE") {
122
+ this.dialogCallBack(DIALOGRESULT.SAVE);
123
+ } else {
124
+ this.dialogCallBack(DIALOGRESULT.DISCARD);
125
+ }
126
+ this.dialog.close();
127
+ this.dialog.destroy();
128
+ }
129
+
130
+ /**
131
+ * Close the dialog and call the callBack with 'CANCEL'.
132
+ * @private
133
+ */;
134
+ _proto.closeAndCancel = function closeAndCancel() {
135
+ this.dialogCallBack(DIALOGRESULT.CANCEL);
136
+ this.dialog.close();
137
+ this.dialog.destroy();
138
+ };
139
+ return InlineEditExitDialog;
140
+ }();
141
+ _exports = InlineEditExitDialog;
142
+ return _exports;
143
+ }, false);
144
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJESUFMT0dSRVNVTFQiLCJfZXhwb3J0cyIsIklubGluZUVkaXRFeGl0RGlhbG9nIiwidmlldyIsImRpYWxvZ0NhbGxCYWNrIiwiY29udGFpbmluZ1ZpZXciLCJvcHRpb25zTGlzdCIsIl9qc3giLCJMaXN0IiwibW9kZSIsInNob3dTZXBhcmF0b3JzIiwiaW5jbHVkZUl0ZW1JblNlbGVjdGlvbiIsImJhY2tncm91bmREZXNpZ24iLCJjbGFzcyIsImNoaWxkcmVuIiwiaXRlbXMiLCJDdXN0b21MaXN0SXRlbSIsImN1c3RvbURhdGEiLCJDdXN0b21EYXRhIiwia2V5IiwidmFsdWUiLCJfanN4cyIsIlZCb3giLCJMYWJlbCIsInRleHQiLCJkZXNpZ24iLCJUZXh0IiwiZGlhbG9nIiwiRGlhbG9nIiwidGl0bGUiLCJ0eXBlIiwiY29udGVudFdpZHRoIiwic3RhdGUiLCJWYWx1ZVN0YXRlIiwiV2FybmluZyIsImNvbnRlbnQiLCJiZWdpbkJ1dHRvbiIsIkJ1dHRvbiIsInByZXNzIiwiY2xvc2VBbmRPSyIsImVuZEJ1dHRvbiIsImNsb3NlQW5kQ2FuY2VsIiwiYWRkRGVwZW5kZW50IiwiX3Byb3RvIiwicHJvdG90eXBlIiwib3BlbiIsInNlbGVjdEFuZEZvY3VzRmlyc3RFbnRyeSIsImdldFNlbGVjdGVkS2V5IiwiZ2V0U2VsZWN0ZWRJdGVtIiwiZGF0YSIsImZpcnN0TGlzdEl0ZW1PcHRpb24iLCJnZXRJdGVtcyIsInNldFNlbGVjdGVkSXRlbSIsImZvY3VzIiwiU0FWRSIsIkRJU0NBUkQiLCJjbG9zZSIsImRlc3Ryb3kiLCJDQU5DRUwiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIklubGluZUVkaXRFeGl0RGlhbG9nLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEZFVmlldyB9IGZyb20gXCJzYXAvZmUvY29yZS9CYXNlQ29udHJvbGxlclwiO1xuaW1wb3J0IEJ1dHRvbiBmcm9tIFwic2FwL20vQnV0dG9uXCI7XG5pbXBvcnQgQ3VzdG9tTGlzdEl0ZW0gZnJvbSBcInNhcC9tL0N1c3RvbUxpc3RJdGVtXCI7XG5pbXBvcnQgRGlhbG9nIGZyb20gXCJzYXAvbS9EaWFsb2dcIjtcbmltcG9ydCBMYWJlbCBmcm9tIFwic2FwL20vTGFiZWxcIjtcbmltcG9ydCBMaXN0IGZyb20gXCJzYXAvbS9MaXN0XCI7XG5pbXBvcnQgVGV4dCBmcm9tIFwic2FwL20vVGV4dFwiO1xuaW1wb3J0IFZCb3ggZnJvbSBcInNhcC9tL1ZCb3hcIjtcbmltcG9ydCBDdXN0b21EYXRhIGZyb20gXCJzYXAvdWkvY29yZS9DdXN0b21EYXRhXCI7XG5pbXBvcnQgeyBWYWx1ZVN0YXRlIH0gZnJvbSBcInNhcC91aS9jb3JlL2xpYnJhcnlcIjtcblxuZXhwb3J0IGVudW0gRElBTE9HUkVTVUxUIHtcblx0U0FWRSA9IFwiU2F2ZVwiLFxuXHRESVNDQVJEID0gXCJEaXNjYXJkXCIsXG5cdENBTkNFTCA9IFwiQ2FuY2VsXCJcbn1cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIElubGluZUVkaXRFeGl0RGlhbG9nIHtcblx0cHVibGljIGNvbnRhaW5pbmdWaWV3ITogRkVWaWV3O1xuXG5cdHB1YmxpYyBkaWFsb2chOiBEaWFsb2c7XG5cblx0cHJpdmF0ZSBvcHRpb25zTGlzdCE6IExpc3Q7XG5cblx0cHJpdmF0ZSBkaWFsb2dDYWxsQmFjayE6IEZ1bmN0aW9uO1xuXG5cdGNvbnN0cnVjdG9yKHZpZXc6IEZFVmlldywgZGlhbG9nQ2FsbEJhY2s6IEZ1bmN0aW9uKSB7XG5cdFx0dGhpcy5jb250YWluaW5nVmlldyA9IHZpZXc7XG5cdFx0dGhpcy5kaWFsb2dDYWxsQmFjayA9IGRpYWxvZ0NhbGxCYWNrO1xuXHRcdHRoaXMub3B0aW9uc0xpc3QgPSAoXG5cdFx0XHQ8TGlzdFxuXHRcdFx0XHRtb2RlPVwiU2luZ2xlU2VsZWN0TGVmdFwiXG5cdFx0XHRcdHNob3dTZXBhcmF0b3JzPVwiTm9uZVwiXG5cdFx0XHRcdGluY2x1ZGVJdGVtSW5TZWxlY3Rpb249XCJ0cnVlXCJcblx0XHRcdFx0YmFja2dyb3VuZERlc2lnbj1cIlRyYW5zcGFyZW50XCJcblx0XHRcdFx0Y2xhc3M9XCJzYXBVaU5vQ29udGVudFBhZGRpbmdcIlxuXHRcdFx0PlxuXHRcdFx0XHR7e1xuXHRcdFx0XHRcdGl0ZW1zOiBbXG5cdFx0XHRcdFx0XHQ8Q3VzdG9tTGlzdEl0ZW0gY3VzdG9tRGF0YT17W25ldyBDdXN0b21EYXRhKHsga2V5OiBcIml0ZW1LZXlcIiwgdmFsdWU6IFwiU0FWRVwiIH0pXX0+XG5cdFx0XHRcdFx0XHRcdDxWQm94IGNsYXNzPVwic2FwVWlUaW55TWFyZ2luXCI+XG5cdFx0XHRcdFx0XHRcdFx0PExhYmVsIHRleHQ9XCJ7c2FwLmZlLmkxOG4+Q19JTkxJTkVfRURJVF9CRUZPUkVOQVZJR0FUSU9OX1NBVkVfUkJMfVwiIGRlc2lnbj1cIkJvbGRcIiAvPlxuXHRcdFx0XHRcdFx0XHRcdDxUZXh0IHRleHQ9XCJ7c2FwLmZlLmkxOG4+Q19JTkxJTkVfRURJVF9CRUZPUkVOQVZJR0FUSU9OX1NBVkVfVE9MfVwiIC8+XG5cdFx0XHRcdFx0XHRcdDwvVkJveD5cblx0XHRcdFx0XHRcdDwvQ3VzdG9tTGlzdEl0ZW0+LFxuXHRcdFx0XHRcdFx0PEN1c3RvbUxpc3RJdGVtIGN1c3RvbURhdGE9e1tuZXcgQ3VzdG9tRGF0YSh7IGtleTogXCJpdGVtS2V5XCIsIHZhbHVlOiBcIkRJU0NBUkRcIiB9KV19PlxuXHRcdFx0XHRcdFx0XHQ8VkJveCBjbGFzcz1cInNhcFVpVGlueU1hcmdpblwiPlxuXHRcdFx0XHRcdFx0XHRcdDxMYWJlbCB0ZXh0PVwie3NhcC5mZS5pMThuPkNfSU5MSU5FX0VESVRfQkVGT1JFTkFWSUdBVElPTl9ESVNDQVJEX1JCTH1cIiBkZXNpZ249XCJCb2xkXCIgLz5cblx0XHRcdFx0XHRcdFx0XHQ8VGV4dCB0ZXh0PVwie3NhcC5mZS5pMThuPkNfSU5MSU5FX0VESVRfQkVGT1JFTkFWSUdBVElPTl9ESVNDQVJEX1RPTH1cIiAvPlxuXHRcdFx0XHRcdFx0XHQ8L1ZCb3g+XG5cdFx0XHRcdFx0XHQ8L0N1c3RvbUxpc3RJdGVtPlxuXHRcdFx0XHRcdF1cblx0XHRcdFx0fX1cblx0XHRcdDwvTGlzdD5cblx0XHQpO1xuXG5cdFx0dGhpcy5kaWFsb2cgPSAoXG5cdFx0XHQ8RGlhbG9nIHRpdGxlPVwie3NhcC5mZS5pMThuPldBUk5JTkd9XCIgdHlwZT1cIk1lc3NhZ2VcIiBjb250ZW50V2lkdGg9e1wiMjJyZW1cIn0gc3RhdGU9e1ZhbHVlU3RhdGUuV2FybmluZ30+XG5cdFx0XHRcdHt7XG5cdFx0XHRcdFx0Y29udGVudDogW1xuXHRcdFx0XHRcdFx0PFRleHRcblx0XHRcdFx0XHRcdFx0dGV4dD1cIntzYXAuZmUuaTE4bj5DX0lOTElORV9FRElUX0JFRk9SRU5BVklHQVRJT05fTUVTU0FHRX1cIlxuXHRcdFx0XHRcdFx0XHRjbGFzcz1cInNhcFVpVGlueU1hcmdpbkJlZ2luIHNhcFVpVGlueU1hcmdpblRvcEJvdHRvbVwiXG5cdFx0XHRcdFx0XHQvPixcblx0XHRcdFx0XHRcdHRoaXMub3B0aW9uc0xpc3Rcblx0XHRcdFx0XHRdXG5cdFx0XHRcdH19XG5cdFx0XHRcdHt7XG5cdFx0XHRcdFx0YmVnaW5CdXR0b246IDxCdXR0b24gdHlwZT1cIkVtcGhhc2l6ZWRcIiB0ZXh0PVwie3NhcC5mZS5pMThuPkNfQ09NTU9OX0RJQUxPR19PS31cIiBwcmVzcz17KCk6IHZvaWQgPT4gdGhpcy5jbG9zZUFuZE9LKCl9IC8+XG5cdFx0XHRcdH19XG5cdFx0XHRcdHt7IGVuZEJ1dHRvbjogPEJ1dHRvbiB0ZXh0PVwie3NhcC5mZS5pMThuPkNfQ09NTU9OX0RJQUxPR19DQU5DRUx9XCIgcHJlc3M9eygpOiB2b2lkID0+IHRoaXMuY2xvc2VBbmRDYW5jZWwoKX0gLz4gfX1cblx0XHRcdDwvRGlhbG9nPlxuXHRcdCk7XG5cdFx0dmlldy5hZGREZXBlbmRlbnQodGhpcy5kaWFsb2cpO1xuXHR9XG5cblx0LyoqXG5cdCAqIE9wZW4gdGhlIGRpYWxvZy5cblx0ICovXG5cdHB1YmxpYyBvcGVuKCk6IHZvaWQge1xuXHRcdHRoaXMuZGlhbG9nLm9wZW4oKTtcblx0XHR0aGlzLnNlbGVjdEFuZEZvY3VzRmlyc3RFbnRyeSgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIGtleSBvZiB0aGUgc2VsZWN0ZWQgaXRlbSBmcm9tIHRoZSBsaXN0IG9mIG9wdGlvbnMgdGhhdCB3YXMgc2V0IHZpYSBjdXN0b21EYXRhLlxuXHQgKiBAcmV0dXJucyBUaGUga2V5IG9mIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgaXRlbVxuXHQgKi9cblx0cHJpdmF0ZSBnZXRTZWxlY3RlZEtleSgpOiBzdHJpbmcge1xuXHRcdGNvbnN0IG9wdGlvbnNMaXN0ID0gdGhpcy5vcHRpb25zTGlzdDtcblx0XHRyZXR1cm4gb3B0aW9uc0xpc3QuZ2V0U2VsZWN0ZWRJdGVtKCkuZGF0YShcIml0ZW1LZXlcIik7XG5cdH1cblxuXHQvKipcblx0ICogU2V0cyB0aGUgZm9jdXMgb24gdGhlIGZpcnN0IGxpc3QgaXRlbSBvZiB0aGUgZGlhbG9nLlxuXHQgKlxuXHQgKi9cblx0cHJpdmF0ZSBzZWxlY3RBbmRGb2N1c0ZpcnN0RW50cnkoKTogdm9pZCB7XG5cdFx0Y29uc3QgZmlyc3RMaXN0SXRlbU9wdGlvbjogQ3VzdG9tTGlzdEl0ZW0gPSB0aGlzLm9wdGlvbnNMaXN0LmdldEl0ZW1zKClbMF0gYXMgQ3VzdG9tTGlzdEl0ZW07XG5cdFx0dGhpcy5vcHRpb25zTGlzdC5zZXRTZWxlY3RlZEl0ZW0oZmlyc3RMaXN0SXRlbU9wdGlvbik7XG5cdFx0Ly8gV2UgZG8gbm90IHNldCB0aGUgZm9jdXMgb24gdGhlIGJ1dHRvbiwgYnV0IGNhdGNoIHRoZSBFTlRFUiBrZXkgaW4gdGhlIGRpYWxvZ1xuXHRcdC8vIGFuZCBwcm9jZXNzIGl0IGFzIE9rLCBzaW5jZSBmb2N1c2luZyB0aGUgYnV0dG9uIHdhcyByZXBvcnRlZCBhcyBhbiBBQ0MgaXNzdWVcblx0XHRmaXJzdExpc3RJdGVtT3B0aW9uPy5mb2N1cygpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENsb3NlIHRoZSBkaWFsb2cgYW5kIGNhbGwgdGhlIGNhbGxCYWNrIHdpdGggdGhlIHNlbGVjdGVkIGtleS5cblx0ICogQHByaXZhdGVcblx0ICovXG5cdHByaXZhdGUgY2xvc2VBbmRPSygpOiB2b2lkIHtcblx0XHRpZiAodGhpcy5nZXRTZWxlY3RlZEtleSgpID09PSBcIlNBVkVcIikge1xuXHRcdFx0dGhpcy5kaWFsb2dDYWxsQmFjayhESUFMT0dSRVNVTFQuU0FWRSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuZGlhbG9nQ2FsbEJhY2soRElBTE9HUkVTVUxULkRJU0NBUkQpO1xuXHRcdH1cblx0XHR0aGlzLmRpYWxvZy5jbG9zZSgpO1xuXHRcdHRoaXMuZGlhbG9nLmRlc3Ryb3koKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDbG9zZSB0aGUgZGlhbG9nIGFuZCBjYWxsIHRoZSBjYWxsQmFjayB3aXRoICdDQU5DRUwnLlxuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0cHJpdmF0ZSBjbG9zZUFuZENhbmNlbCgpOiB2b2lkIHtcblx0XHR0aGlzLmRpYWxvZ0NhbGxCYWNrKERJQUxPR1JFU1VMVC5DQU5DRUwpO1xuXHRcdHRoaXMuZGlhbG9nLmNsb3NlKCk7XG5cdFx0dGhpcy5kaWFsb2cuZGVzdHJveSgpO1xuXHR9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztNQVdZQSxZQUFZLDBCQUFaQSxZQUFZO0lBQVpBLFlBQVk7SUFBWkEsWUFBWTtJQUFaQSxZQUFZO0lBQUEsT0FBWkEsWUFBWTtFQUFBO0VBQUFDLFFBQUEsQ0FBQUQsWUFBQSxHQUFBQSxZQUFBO0VBQUEsSUFLSEUsb0JBQW9CO0lBU3hDLFNBQUFBLHFCQUFZQyxJQUFZLEVBQUVDLGNBQXdCLEVBQUU7TUFDbkQsSUFBSSxDQUFDQyxjQUFjLEdBQUdGLElBQUk7TUFDMUIsSUFBSSxDQUFDQyxjQUFjLEdBQUdBLGNBQWM7TUFDcEMsSUFBSSxDQUFDRSxXQUFXLEdBQ2ZDLElBQUEsQ0FBQ0MsSUFBSTtRQUNKQyxJQUFJLEVBQUMsa0JBQWtCO1FBQ3ZCQyxjQUFjLEVB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
@@ -14,7 +14,7 @@ export enum DIALOGRESULT {
14
14
  DISCARD = "Discard",
15
15
  CANCEL = "Cancel"
16
16
  }
17
- export default class BeforeNavigationDialog {
17
+ export default class InlineEditExitDialog {
18
18
  public containingView!: FEView;
19
19
 
20
20
  public dialog!: Dialog;