@sapui5/sap.fe.core 1.130.0 → 1.131.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 (158) 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 +3 -3
  4. package/src/sap/fe/core/ActionRuntime.ts +1 -1
  5. package/src/sap/fe/core/CommonUtils.js +38 -14
  6. package/src/sap/fe/core/CommonUtils.ts +39 -15
  7. package/src/sap/fe/core/TemplateComponent.js +4 -1
  8. package/src/sap/fe/core/TemplateComponent.ts +2 -0
  9. package/src/sap/fe/core/buildingBlocks/BuildingBlock.js +248 -0
  10. package/src/sap/fe/core/buildingBlocks/{BuildingBlockBase.ts → BuildingBlock.ts} +73 -132
  11. package/src/sap/fe/core/controllerextensions/EditFlow.js +17 -7
  12. package/src/sap/fe/core/controllerextensions/EditFlow.ts +17 -6
  13. package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js +4 -2
  14. package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.ts +3 -1
  15. package/src/sap/fe/core/controllerextensions/InternalRouting.js +5 -2
  16. package/src/sap/fe/core/controllerextensions/InternalRouting.ts +4 -0
  17. package/src/sap/fe/core/controllerextensions/KPIManagement.js +47 -19
  18. package/src/sap/fe/core/controllerextensions/KPIManagement.ts +57 -19
  19. package/src/sap/fe/core/controllerextensions/PageReady.js +20 -18
  20. package/src/sap/fe/core/controllerextensions/PageReady.ts +19 -18
  21. package/src/sap/fe/core/controllerextensions/Placeholder.js +5 -1
  22. package/src/sap/fe/core/controllerextensions/Placeholder.ts +5 -0
  23. package/src/sap/fe/core/controllerextensions/Routing.js +2 -2
  24. package/src/sap/fe/core/controllerextensions/Routing.ts +1 -1
  25. package/src/sap/fe/core/controllerextensions/Share.js +3 -2
  26. package/src/sap/fe/core/controllerextensions/Share.ts +2 -1
  27. package/src/sap/fe/core/controllerextensions/ViewState.js +5 -1
  28. package/src/sap/fe/core/controllerextensions/ViewState.ts +4 -0
  29. package/src/sap/fe/core/controllerextensions/editFlow/NotApplicableContextDialog.js +9 -5
  30. package/src/sap/fe/core/controllerextensions/editFlow/NotApplicableContextDialog.tsx +17 -6
  31. package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.js +4 -3
  32. package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.ts +3 -2
  33. package/src/sap/fe/core/controllerextensions/editFlow/draft.js +4 -4
  34. package/src/sap/fe/core/controllerextensions/editFlow/draft.ts +3 -0
  35. package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.js +3 -4
  36. package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.ts +2 -2
  37. package/src/sap/fe/core/controllerextensions/editFlow/operations/facade.js +17 -20
  38. package/src/sap/fe/core/controllerextensions/editFlow/operations/facade.ts +30 -29
  39. package/src/sap/fe/core/controllerextensions/editFlow/sticky.js +5 -5
  40. package/src/sap/fe/core/controllerextensions/editFlow/sticky.ts +4 -1
  41. package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.js +77 -35
  42. package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.ts +88 -43
  43. package/src/sap/fe/core/controllerextensions/viewState/IViewStateContributor.js +3 -7
  44. package/src/sap/fe/core/controllerextensions/viewState/IViewStateContributor.ts +0 -4
  45. package/src/sap/fe/core/controllerextensions/viewState/IViewStateContributorMixin.js +70 -0
  46. package/src/sap/fe/core/controllerextensions/viewState/IViewStateContributorMixin.ts +99 -0
  47. package/src/sap/fe/core/controls/FormElementWrapper.js +1 -1
  48. package/src/sap/fe/core/controls/FormElementWrapper.ts +1 -1
  49. package/src/sap/fe/core/controls/Recommendations/ConfirmRecommendationDialog.block.js +14 -2
  50. package/src/sap/fe/core/controls/Recommendations/ConfirmRecommendationDialog.block.tsx +20 -6
  51. package/src/sap/fe/core/converters/ConverterContext.js +10 -3
  52. package/src/sap/fe/core/converters/ConverterContext.ts +8 -1
  53. package/src/sap/fe/core/converters/ManifestSettings.js +1 -1
  54. package/src/sap/fe/core/converters/ManifestSettings.ts +2 -1
  55. package/src/sap/fe/core/converters/controls/Common/Action.js +2 -2
  56. package/src/sap/fe/core/converters/controls/Common/Action.ts +5 -1
  57. package/src/sap/fe/core/converters/controls/Common/Chart.js +1 -1
  58. package/src/sap/fe/core/converters/controls/Common/Chart.ts +10 -5
  59. package/src/sap/fe/core/converters/controls/Common/KPI.js +26 -9
  60. package/src/sap/fe/core/converters/controls/Common/KPI.ts +48 -5
  61. package/src/sap/fe/core/converters/controls/Common/Table.js +63 -67
  62. package/src/sap/fe/core/converters/controls/Common/Table.ts +87 -81
  63. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +2 -1
  64. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +1 -0
  65. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +2 -3
  66. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +2 -2
  67. package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.js +12 -8
  68. package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.ts +10 -6
  69. package/src/sap/fe/core/formatters/StandardFormatter.js +4 -1
  70. package/src/sap/fe/core/formatters/StandardFormatter.ts +4 -1
  71. package/src/sap/fe/core/fpm/manifest.json +1 -1
  72. package/src/sap/fe/core/helpers/AppStartupHelper.js +37 -10
  73. package/src/sap/fe/core/helpers/AppStartupHelper.ts +38 -14
  74. package/src/sap/fe/core/helpers/BindingHelper.js +2 -2
  75. package/src/sap/fe/core/helpers/BindingHelper.ts +1 -1
  76. package/src/sap/fe/core/helpers/DeleteHelper.js +3 -2
  77. package/src/sap/fe/core/helpers/DeleteHelper.ts +2 -1
  78. package/src/sap/fe/core/helpers/MetaPath.js +17 -2
  79. package/src/sap/fe/core/helpers/MetaPath.ts +27 -6
  80. package/src/sap/fe/core/helpers/RecommendationHelper.js +2 -2
  81. package/src/sap/fe/core/helpers/RecommendationHelper.ts +1 -1
  82. package/src/sap/fe/core/helpers/ResourceModelHelper.js +8 -3
  83. package/src/sap/fe/core/helpers/ResourceModelHelper.ts +9 -2
  84. package/src/sap/fe/core/library.js +5 -2
  85. package/src/sap/fe/core/library.support.js +3 -3
  86. package/src/sap/fe/core/library.support.ts +2 -1
  87. package/src/sap/fe/core/library.ts +4 -0
  88. package/src/sap/fe/core/messagebundle.properties +6 -0
  89. package/src/sap/fe/core/messagebundle_ar.properties +11 -3
  90. package/src/sap/fe/core/messagebundle_bg.properties +14 -6
  91. package/src/sap/fe/core/messagebundle_ca.properties +10 -2
  92. package/src/sap/fe/core/messagebundle_cnr.properties +10 -2
  93. package/src/sap/fe/core/messagebundle_cs.properties +10 -2
  94. package/src/sap/fe/core/messagebundle_cy.properties +10 -2
  95. package/src/sap/fe/core/messagebundle_da.properties +10 -2
  96. package/src/sap/fe/core/messagebundle_de.properties +12 -4
  97. package/src/sap/fe/core/messagebundle_el.properties +10 -2
  98. package/src/sap/fe/core/messagebundle_en.properties +9 -1
  99. package/src/sap/fe/core/messagebundle_en_GB.properties +10 -2
  100. package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +10 -2
  101. package/src/sap/fe/core/messagebundle_es.properties +12 -4
  102. package/src/sap/fe/core/messagebundle_es_MX.properties +10 -2
  103. package/src/sap/fe/core/messagebundle_et.properties +10 -2
  104. package/src/sap/fe/core/messagebundle_fi.properties +10 -2
  105. package/src/sap/fe/core/messagebundle_fr.properties +10 -2
  106. package/src/sap/fe/core/messagebundle_fr_CA.properties +11 -3
  107. package/src/sap/fe/core/messagebundle_hi.properties +10 -2
  108. package/src/sap/fe/core/messagebundle_hr.properties +11 -3
  109. package/src/sap/fe/core/messagebundle_hu.properties +11 -3
  110. package/src/sap/fe/core/messagebundle_id.properties +10 -2
  111. package/src/sap/fe/core/messagebundle_it.properties +10 -2
  112. package/src/sap/fe/core/messagebundle_iw.properties +11 -3
  113. package/src/sap/fe/core/messagebundle_ja.properties +10 -2
  114. package/src/sap/fe/core/messagebundle_kk.properties +10 -2
  115. package/src/sap/fe/core/messagebundle_ko.properties +10 -2
  116. package/src/sap/fe/core/messagebundle_lt.properties +10 -2
  117. package/src/sap/fe/core/messagebundle_lv.properties +10 -2
  118. package/src/sap/fe/core/messagebundle_mk.properties +10 -2
  119. package/src/sap/fe/core/messagebundle_ms.properties +10 -2
  120. package/src/sap/fe/core/messagebundle_nl.properties +12 -4
  121. package/src/sap/fe/core/messagebundle_no.properties +11 -3
  122. package/src/sap/fe/core/messagebundle_pl.properties +10 -2
  123. package/src/sap/fe/core/messagebundle_pt.properties +10 -2
  124. package/src/sap/fe/core/messagebundle_pt_PT.properties +10 -2
  125. package/src/sap/fe/core/messagebundle_ro.properties +10 -2
  126. package/src/sap/fe/core/messagebundle_ru.properties +10 -2
  127. package/src/sap/fe/core/messagebundle_sh.properties +10 -2
  128. package/src/sap/fe/core/messagebundle_sk.properties +10 -2
  129. package/src/sap/fe/core/messagebundle_sl.properties +10 -2
  130. package/src/sap/fe/core/messagebundle_sr.properties +10 -2
  131. package/src/sap/fe/core/messagebundle_sv.properties +10 -2
  132. package/src/sap/fe/core/messagebundle_th.properties +12 -4
  133. package/src/sap/fe/core/messagebundle_tr.properties +12 -4
  134. package/src/sap/fe/core/messagebundle_uk.properties +10 -2
  135. package/src/sap/fe/core/messagebundle_vi.properties +11 -3
  136. package/src/sap/fe/core/messagebundle_zh_CN.properties +10 -2
  137. package/src/sap/fe/core/messagebundle_zh_TW.properties +10 -2
  138. package/src/sap/fe/core/operationsHelper.js +4 -4
  139. package/src/sap/fe/core/operationsHelper.ts +4 -4
  140. package/src/sap/fe/core/rootView/Fcl.controller.js +2 -2
  141. package/src/sap/fe/core/rootView/Fcl.controller.ts +4 -1
  142. package/src/sap/fe/core/services/EnvironmentServiceFactory.js +5 -5
  143. package/src/sap/fe/core/services/EnvironmentServiceFactory.ts +4 -3
  144. package/src/sap/fe/core/services/NavigationServiceFactory.js +1 -28
  145. package/src/sap/fe/core/services/NavigationServiceFactory.ts +3 -35
  146. package/src/sap/fe/core/services/RoutingServiceFactory.js +2 -4
  147. package/src/sap/fe/core/services/RoutingServiceFactory.ts +1 -3
  148. package/src/sap/fe/core/services/ShellServicesFactory.js +2 -13
  149. package/src/sap/fe/core/services/ShellServicesFactory.ts +1 -17
  150. package/src/sap/fe/core/services/TemplatedViewServiceFactory.js +5 -3
  151. package/src/sap/fe/core/services/TemplatedViewServiceFactory.ts +3 -1
  152. package/src/sap/fe/core/services/collaborativeDraftServiceFactory.js +3 -4
  153. package/src/sap/fe/core/services/collaborativeDraftServiceFactory.ts +2 -2
  154. package/src/sap/fe/core/templating/DataFieldFormatters.js +13 -6
  155. package/src/sap/fe/core/templating/DataFieldFormatters.ts +13 -6
  156. package/src/sap/fe/core/templating/UIFormatters.js +3 -3
  157. package/src/sap/fe/core/templating/UIFormatters.ts +4 -3
  158. package/src/sap/fe/core/buildingBlocks/BuildingBlockBase.js +0 -326
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sapui5/sap.fe.core",
3
- "version": "1.130.0",
3
+ "version": "1.131.0",
4
4
  "description": "SAPUI5 Library sap.fe.core",
5
5
  "keywords": [
6
6
  "sapui5",
@@ -6,7 +6,7 @@
6
6
  SAP UI development toolkit for HTML5 (SAPUI5)
7
7
  (c) Copyright 2009-2021 SAP SE. All rights reserved
8
8
  </copyright>
9
- <version>1.130.0</version>
9
+ <version>1.131.0</version>
10
10
 
11
11
  <documentation>UI5 library: sap.fe.core</documentation>
12
12
 
@@ -157,9 +157,9 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/base/BindingToolki
157
157
  }
158
158
  },
159
159
  updateEditButtonVisibilityAndEnablement(oView) {
160
- var _oView$getViewData, _oView$getModel;
160
+ var _oView$getViewData;
161
161
  const iViewLevel = (_oView$getViewData = oView.getViewData()) === null || _oView$getViewData === void 0 ? void 0 : _oView$getViewData.viewLevel,
162
- isEditable = (_oView$getModel = oView.getModel("ui")) === null || _oView$getModel === void 0 ? void 0 : _oView$getModel.getProperty("/isEditable");
162
+ isEditable = CommonUtils.getIsEditable(oView);
163
163
  if (iViewLevel > 1 && isEditable !== true) {
164
164
  var _oContext$getModel$ge, _entitySet$annotation, _entitySet$annotation2;
165
165
  const oContext = oView.getBindingContext();
@@ -324,4 +324,4 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/base/BindingToolki
324
324
  };
325
325
  return ActionRuntime;
326
326
  }, false);
327
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJBY3Rpb25SdW50aW1lIiwiX2FkZE1lc3NhZ2VGb3JBY3Rpb25QYXJhbWV0ZXIiLCJtZXNzYWdlUGFyYW1ldGVycyIsIk1lc3NhZ2luZyIsImFkZE1lc3NhZ2VzIiwibWFwIiwibWVzc2FnZVBhcmFtZXRlciIsImJpbmRpbmciLCJhY3Rpb25QYXJhbWV0ZXJJbmZvIiwiZmllbGQiLCJnZXRCaW5kaW5nIiwiaXNNdWx0aVZhbHVlIiwiTWVzc2FnZSIsIm1lc3NhZ2UiLCJ0eXBlIiwiTWVzc2FnZVR5cGUiLCJFcnJvciIsInByb2Nlc3NvciIsImdldE1vZGVsIiwidW5kZWZpbmVkIiwicGVyc2lzdGVudCIsInRhcmdldCIsImdldFJlc29sdmVkUGF0aCIsInZhbGlkYXRlUHJvcGVydGllcyIsImFjdGlvblBhcmFtZXRlckluZm9zIiwicmVzb3VyY2VNb2RlbCIsIlByb21pc2UiLCJhbGxTZXR0bGVkIiwidmFsaWRhdGlvblByb21pc2UiLCJyZXF1aXJlZFBhcmFtZXRlckluZm9zIiwiZmlsdGVyIiwicGFyYW1ldGVySW5mbyIsImdldFJlcXVpcmVkIiwiYWxsTWVzc2FnZXMiLCJnZXRNZXNzYWdlTW9kZWwiLCJnZXREYXRhIiwiZW1wdHlSZXF1aXJlZEZpZWxkcyIsInJlcXVpcmVkUGFyYW1ldGVySW5mbyIsImZpZWxkSWQiLCJnZXRJZCIsInJlbGV2YW50TWVzc2FnZXMiLCJtc2ciLCJnZXRDb250cm9sSWRzIiwic29tZSIsImNvbnRyb2xJZCIsImluY2x1ZGVzIiwibGVuZ3RoIiwidmFsdWUiLCJmaWVsZFZhbHVlIiwiZ2V0VmFsdWUiLCJpc0ZpZWxkQXJyYXkiLCJBcnJheSIsImlzQXJyYXkiLCJfYWN0aW9uUGFyYW1ldGVySW5mbyQiLCJnZXRUZXh0IiwiZ2V0UGFyZW50IiwiZ2V0QWdncmVnYXRpb24iLCJmaXJzdEludmFsaWRQYXJhbWV0ZXIiLCJmaW5kIiwiZ2V0VmlzaWJsZSIsImhhc0Vycm9yIiwiZ2V0VmFsdWVTdGF0ZSIsInNldFZpc2libGUiLCJmb2N1cyIsInNldEFjdGlvbkVuYWJsZW1lbnQiLCJvSW50ZXJuYWxNb2RlbENvbnRleHQiLCJvQWN0aW9uT3BlcmF0aW9uQXZhaWxhYmxlTWFwIiwiYVNlbGVjdGVkQ29udGV4dHMiLCJzQ29udHJvbCIsImZvckNvbnRleHRNZW51IiwiYXJndW1lbnRzIiwiYVByb21pc2VzIiwic0FjdGlvbiIsImFSZXF1ZXN0UHJvbWlzZXMiLCJzZXRQcm9wZXJ0eSIsInNQcm9wZXJ0eSIsImVsZW1lbnQiLCJvU2VsZWN0ZWRDb250ZXh0Iiwib0NvbnRleHREYXRhIiwiZ2V0T2JqZWN0IiwiX3NldEFjdGlvbkVuYWJsZW1lbnRGb3JUYWJsZSIsImJFbmFibGVkIiwiYUFwcGxpY2FibGUiLCJhTm90QXBwbGljYWJsZSIsInB1c2giLCJDb21tb25VdGlscyIsInNldENvbnRleHRzQmFzZWRPbk9wZXJhdGlvbkF2YWlsYWJsZSIsImFsbCIsInNldEFjdGlvbkVuYWJsZW1lbnRBZnRlclBhdGNoIiwib1ZpZXciLCJvTGlzdEJpbmRpbmciLCJvSW50ZXJuYWxNb2RlbENvbnRleHREYXRhIiwib0NvbnRyb2xzIiwiY29udHJvbHMiLCJzS2V5Iiwib1RhYmxlIiwiYnlJZCIsImlzQSIsIm9Sb3dCaW5kaW5nIiwiZ2V0Um93QmluZGluZyIsImdldEJpbmRpbmdDb250ZXh0IiwiSlNPTiIsInBhcnNlIiwiZGF0YSIsImN1c3RvbURhdGEiLCJnZXRTZWxlY3RlZENvbnRleHRzIiwidXBkYXRlRWRpdEJ1dHRvblZpc2liaWxpdHlBbmRFbmFibGVtZW50IiwiX29WaWV3JGdldFZpZXdEYXRhIiwiX29WaWV3JGdldE1vZGVsIiwiaVZpZXdMZXZlbCIsImdldFZpZXdEYXRhIiwidmlld0xldmVsIiwiaXNFZGl0YWJsZSIsImdldFByb3BlcnR5IiwiX29Db250ZXh0JGdldE1vZGVsJGdlIiwiX2VudGl0eVNldCRhbm5vdGF0aW9uIiwiX2VudGl0eVNldCRhbm5vdGF0aW9uMiIsIm9Db250ZXh0Iiwib0FwcENvbXBvbmVudCIsImdldEFwcENvbXBvbmVudCIsInNNZXRhUGF0aCIsIk1vZGVsSGVscGVyIiwiZ2V0TWV0YVBhdGhGb3JDb250ZXh0Iiwic0VudGl0eVNldCIsImdldFJvb3RFbnRpdHlTZXRQYXRoIiwibWV0YUNvbnRleHQiLCJnZXRNZXRhTW9kZWwiLCJnZXRDb250ZXh0IiwiZ2V0UGF0aCIsImNvbnZlcnRlckNvbnRleHQiLCJDb252ZXJ0ZXJDb250ZXh0IiwiY3JlYXRlQ29udmVydGVyQ29udGV4dEZvck1hY3JvIiwiZ2V0RGlhZ25vc3RpY3MiLCJtZXJnZSIsImVudGl0eVNldCIsImdldEVudGl0eVNldCIsImVudGl0eVR5cGUiLCJnZXRFbnRpdHlUeXBlIiwidXBkYXRlSGlkZGVuIiwiYlVwZGF0ZUhpZGRlbiIsImlzRW50aXR5U2V0IiwiYW5ub3RhdGlvbnMiLCJVSSIsIlVwZGF0ZUhpZGRlbiIsInZhbHVlT2YiLCJpc1VwZGF0ZUhpZGRlbiIsInNFZGl0RW5hYmxlQmluZGluZyIsImdldEVkaXRCdXR0b25FbmFibGVkIiwiZHJhZnRSb290UGF0aCIsImdldERyYWZ0Um9vdFBhdGgiLCJzU3RpY2t5Um9vdFBhdGgiLCJnZXRTdGlja3lSb290UGF0aCIsInNQYXRoIiwib1Jvb3RDb250ZXh0IiwiYmluZENvbnRleHQiLCJnZXRCb3VuZENvbnRleHQiLCJzSGlkZGVuRXhwcmVzc2lvbiIsImNvbXBpbGVFeHByZXNzaW9uIiwiZXF1YWwiLCJnZXRIaWRkZW5FeHByZXNzaW9uIiwidXBkYXRlRWRpdE1vZGVsQ29udGV4dCIsInNCaW5kaW5nRXhwcmVzc2lvbiIsIl9vSGlkZGVuRWxlbWVudCRnZXRNbyIsIl9vSGlkZGVuRWxlbWVudCRnZXRNbzIiLCJfb0hpZGRlbkVsZW1lbnQkZ2V0QmkiLCJvSGlkZGVuRWxlbWVudCIsIkFueUVsZW1lbnQiLCJhbnlUZXh0Iiwic2V0QmluZGluZ0NvbnRleHQiLCJhZGREZXBlbmRlbnQiLCIkJGdyb3VwSWQiLCJhdHRhY2hDaGFuZ2UiLCJvRXZlbnQiLCJvTmV3VmFsdWUiLCJnZXRTb3VyY2UiLCJnZXRFeHRlcm5hbFZhbHVlIiwic0VuYWJsZW1lbnRGaWVsZE5hbWUiLCJiQWN0aW9uRW5hYmxlZCIsImJFbmFibGVkRm9yQ29udGV4dE1lbnUiLCJhQXBwbGljYWJsZUZvckNvbnRleHRNZW51IiwiYU5vdEFwcGxpY2FibGVGb3JDb250ZXh0TWVudSIsInNEeW5hbWljQWN0aW9uRW5hYmxlZFBhdGgiLCJvVHJhbnNmb3JtZWRCaW5kaW5nIiwidHJhbnNmb3JtUmVjdXJzaXZlbHkiLCJvQmluZGluZ0V4cHJlc3Npb24iLCJjb25zdGFudCIsInBhdGgiLCJzUmVzdWx0Iiwic2V0RHluYW1pY0FjdGlvbkNvbnRleHRzIiwicmVxdWVzdFByb3BlcnR5IiwiZ2V0SXNBY3Rpb25Dcml0aWNhbCIsIm1ldGFNb2RlbCIsImNvbnRleHRzIiwiaXNBY3Rpb25Dcml0aWNhbFZhbHVlIiwiY29udmVydGVkVHlwZXMiLCJjb252ZXJ0VHlwZXMiLCJhY3Rpb25UYXJnZXRSZXNvbHV0aW9uIiwicmVzb2x2ZVBhdGgiLCJhY3Rpb25UYXJnZXQiLCJpc0FjdGlvbkNyaXRpY2FsQmluZGluZ0V4cCIsImdldElzQWN0aW9uQ3JpdGljYWxFeHByZXNzaW9uIiwiaXNDb25zdGFudCIsImNvbXBpbGVDb25zdGFudCIsInJlc29sdmUiLCJhbnlPYmplY3QiLCJBbnkiLCJhbnlCb29sZWFuIiwic2V0TW9kZWwiLCJib29sZWFuQmluZGluZyIsImZuQ2hhbmdlIiwidmFsdWVFeHQiLCJkZXN0cm95IiwiYXR0YWNoRXZlbnRPbmNlIiwiZXJyIiwiU3RyaW5nIiwiTG9nIiwiZXJyb3IiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIkFjdGlvblJ1bnRpbWUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBBY3Rpb24gYXMgRWRtQWN0aW9uLCBBY3Rpb25QYXJhbWV0ZXIgYXMgRWRtQWN0aW9uUGFyYW1ldGVyLCBQcmltaXRpdmVUeXBlIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzXCI7XG5pbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCBtZXJnZSBmcm9tIFwic2FwL2Jhc2UvdXRpbC9tZXJnZVwiO1xuaW1wb3J0IHR5cGUgeyBQYXRoSW5Nb2RlbEV4cHJlc3Npb24gfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCB7IGNvbXBpbGVDb25zdGFudCwgY29tcGlsZUV4cHJlc3Npb24sIGNvbnN0YW50LCBlcXVhbCwgaXNDb25zdGFudCwgdHJhbnNmb3JtUmVjdXJzaXZlbHkgfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCB0eXBlIHsgRkVWaWV3IH0gZnJvbSBcInNhcC9mZS9jb3JlL0Jhc2VDb250cm9sbGVyXCI7XG5pbXBvcnQgdHlwZSB7IF9SZXF1ZXN0ZWRQcm9wZXJ0eSB9IGZyb20gXCJzYXAvZmUvY29yZS9Db21tb25VdGlsc1wiO1xuaW1wb3J0IENvbW1vblV0aWxzIGZyb20gXCJzYXAvZmUvY29yZS9Db21tb25VdGlsc1wiO1xuaW1wb3J0IHR5cGUgUmVzb3VyY2VNb2RlbCBmcm9tIFwic2FwL2ZlL2NvcmUvUmVzb3VyY2VNb2RlbFwiO1xuaW1wb3J0IEFueSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbHMvQW55XCI7XG5pbXBvcnQgdHlwZSB7IEludGVybmFsTW9kZWxDb250ZXh0IH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvTW9kZWxIZWxwZXJcIjtcbmltcG9ydCBNb2RlbEhlbHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9Nb2RlbEhlbHBlclwiO1xuaW1wb3J0IHsgaXNFbnRpdHlTZXQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9UeXBlR3VhcmRzXCI7XG5pbXBvcnQgeyBnZXRJc0FjdGlvbkNyaXRpY2FsRXhwcmVzc2lvbiB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0FjdGlvbkhlbHBlclwiO1xuaW1wb3J0IHR5cGUgTGFiZWwgZnJvbSBcInNhcC9tL0xhYmVsXCI7XG5pbXBvcnQgdHlwZSBFdmVudCBmcm9tIFwic2FwL3VpL2Jhc2UvRXZlbnRcIjtcbmltcG9ydCBNZXNzYWdpbmcgZnJvbSBcInNhcC91aS9jb3JlL01lc3NhZ2luZ1wiO1xuaW1wb3J0IE1lc3NhZ2UgZnJvbSBcInNhcC91aS9jb3JlL21lc3NhZ2UvTWVzc2FnZVwiO1xuaW1wb3J0IE1lc3NhZ2VUeXBlIGZyb20gXCJzYXAvdWkvY29yZS9tZXNzYWdlL01lc3NhZ2VUeXBlXCI7XG5pbXBvcnQgdHlwZSBWaWV3IGZyb20gXCJzYXAvdWkvY29yZS9tdmMvVmlld1wiO1xuaW1wb3J0IHR5cGUgRmllbGQgZnJvbSBcInNhcC91aS9tZGMvRmllbGRcIjtcbmltcG9ydCB0eXBlIE11bHRpVmFsdWVGaWVsZCBmcm9tIFwic2FwL3VpL21kYy9NdWx0aVZhbHVlRmllbGRcIjtcbmltcG9ydCB0eXBlIFRhYmxlIGZyb20gXCJzYXAvdWkvbWRjL1RhYmxlXCI7XG5pbXBvcnQgdHlwZSBNdWx0aVZhbHVlRmllbGRJdGVtIGZyb20gXCJzYXAvdWkvbWRjL2ZpZWxkL011bHRpVmFsdWVGaWVsZEl0ZW1cIjtcbmltcG9ydCB0eXBlIFByb3BlcnR5QmluZGluZyBmcm9tIFwic2FwL3VpL21vZGVsL1Byb3BlcnR5QmluZGluZ1wiO1xuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L0NvbnRleHRcIjtcbmltcG9ydCB0eXBlIE9EYXRhTGlzdEJpbmRpbmcgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YUxpc3RCaW5kaW5nXCI7XG5pbXBvcnQgdHlwZSBPRGF0YU1ldGFNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTWV0YU1vZGVsXCI7XG5pbXBvcnQgQW55RWxlbWVudCBmcm9tIFwiLi9jb250cm9scy9BbnlFbGVtZW50XCI7XG5pbXBvcnQgQ29udmVydGVyQ29udGV4dCBmcm9tIFwiLi9jb252ZXJ0ZXJzL0NvbnZlcnRlckNvbnRleHRcIjtcbmltcG9ydCB0eXBlIHsgQmFzZU1hbmlmZXN0U2V0dGluZ3MgfSBmcm9tIFwiLi9jb252ZXJ0ZXJzL01hbmlmZXN0U2V0dGluZ3NcIjtcbmltcG9ydCB7IGNvbnZlcnRUeXBlcyB9IGZyb20gXCIuL2NvbnZlcnRlcnMvTWV0YU1vZGVsQ29udmVydGVyXCI7XG5pbXBvcnQgeyBnZXRFZGl0QnV0dG9uRW5hYmxlZCwgZ2V0SGlkZGVuRXhwcmVzc2lvbiB9IGZyb20gXCIuL2NvbnZlcnRlcnMvb2JqZWN0UGFnZS9IZWFkZXJBbmRGb290ZXJBY3Rpb25cIjtcblxuZXhwb3J0IHR5cGUgQWN0aW9uUGFyYW1ldGVySW5mbyA9IHtcblx0cGFyYW1ldGVyPzogRWRtQWN0aW9uUGFyYW1ldGVyO1xuXHRmaWVsZDogRmllbGQgfCBNdWx0aVZhbHVlRmllbGQ7XG5cdGlzTXVsdGlWYWx1ZTogYm9vbGVhbjtcblx0dmFsdWU/OiBzdHJpbmcgfCBNdWx0aVZhbHVlRmllbGRJdGVtW107XG5cdHZhbGlkYXRpb25Qcm9taXNlPzogUHJvbWlzZTxzdHJpbmcgfCBNdWx0aVZhbHVlRmllbGRJdGVtW10+O1xuXHRoYXNFcnJvcjogYm9vbGVhbjtcblx0cHJvcGVydHlQYXRoPzogc3RyaW5nO1xufTtcblxuY29uc3QgQWN0aW9uUnVudGltZSA9IHtcblx0LyoqXG5cdCAqIEFkZHMgZXJyb3IgbWVzc2FnZXMgZm9yIGFuIGFjdGlvbiBwYXJhbWV0ZXIgZmllbGQgdG8gdGhlIG1lc3NhZ2UgbWFuYWdlci5cblx0ICogQHBhcmFtIG1lc3NhZ2VQYXJhbWV0ZXJzIEluZm9ybWF0aW9uIGlkZW50aWZ5aW5nIGFuIGFjdGlvbiBwYXJhbWV0ZXIgYW5kIG1lc3NhZ2VzIHJlZmVycmluZyB0byB0aGlzIHBhcmFtZXRlclxuXHQgKi9cblx0X2FkZE1lc3NhZ2VGb3JBY3Rpb25QYXJhbWV0ZXI6IGZ1bmN0aW9uIChtZXNzYWdlUGFyYW1ldGVyczogeyBhY3Rpb25QYXJhbWV0ZXJJbmZvOiBBY3Rpb25QYXJhbWV0ZXJJbmZvOyBtZXNzYWdlOiBzdHJpbmcgfVtdKTogdm9pZCB7XG5cdFx0TWVzc2FnaW5nLmFkZE1lc3NhZ2VzKFxuXHRcdFx0bWVzc2FnZVBhcmFtZXRlcnMubWFwKChtZXNzYWdlUGFyYW1ldGVyKSA9PiB7XG5cdFx0XHRcdGNvbnN0IGJpbmRpbmcgPSBtZXNzYWdlUGFyYW1ldGVyLmFjdGlvblBhcmFtZXRlckluZm8uZmllbGQuZ2V0QmluZGluZyhcblx0XHRcdFx0XHRtZXNzYWdlUGFyYW1ldGVyLmFjdGlvblBhcmFtZXRlckluZm8uaXNNdWx0aVZhbHVlID8gXCJpdGVtc1wiIDogXCJ2YWx1ZVwiXG5cdFx0XHRcdCk7XG5cdFx0XHRcdHJldHVybiBuZXcgTWVzc2FnZSh7XG5cdFx0XHRcdFx0bWVzc2FnZTogbWVzc2FnZVBhcmFtZXRlci5tZXNzYWdlLFxuXHRcdFx0XHRcdHR5cGU6IE1lc3NhZ2VUeXBlLkVycm9yLFxuXHRcdFx0XHRcdHByb2Nlc3NvcjogYmluZGluZz8uZ2V0TW9kZWwoKSA/PyB1bmRlZmluZWQsIC8vIGdldE1vZGVsKCk6IG51bGwgfCBNb2RlbCB+fj4gcHJvY2Vzc29yPzogTWVzc2FnZVByb2Nlc3NvclxuXHRcdFx0XHRcdHBlcnNpc3RlbnQ6IHRydWUsXG5cdFx0XHRcdFx0dGFyZ2V0OiBiaW5kaW5nPy5nZXRSZXNvbHZlZFBhdGgoKVxuXHRcdFx0XHR9KTtcblx0XHRcdH0pXG5cdFx0KTtcblx0fSxcblxuXHQvKipcblx0ICogQ2hlY2tzIGlmIGFsbCByZXF1aXJlZCBhY3Rpb24gcGFyYW1ldGVycyBjb250YWluIGRhdGEgYW5kIGNoZWNrcyBmb3IgYWxsIGFjdGlvbiBwYXJhbWV0ZXJzIGlmIHRoZVxuXHQgKiBjb250YWluZWQgZGF0YSBpcyB2YWxpZC5cblx0ICogQHBhcmFtIGFjdGlvblBhcmFtZXRlckluZm9zIEluZm9ybWF0aW9uIGlkZW50aWZ5aW5nIGFuIGFjdGlvbiBwYXJhbWV0ZXJcblx0ICogQHBhcmFtIHJlc291cmNlTW9kZWwgVGhlIG1vZGVsIHRvIGxvYWQgdGV4dCByZXNvdXJjZXNcblx0ICogQHJldHVybnMgVGhlIHZhbGlkYXRpb24gcmVzdWx0IGNhbiBiZSB0cnVlIG9yIGZhbHNlXG5cdCAqL1xuXHR2YWxpZGF0ZVByb3BlcnRpZXM6IGFzeW5jIGZ1bmN0aW9uIChhY3Rpb25QYXJhbWV0ZXJJbmZvczogQWN0aW9uUGFyYW1ldGVySW5mb1tdLCByZXNvdXJjZU1vZGVsOiBSZXNvdXJjZU1vZGVsKTogUHJvbWlzZTxib29sZWFuPiB7XG5cdFx0YXdhaXQgUHJvbWlzZS5hbGxTZXR0bGVkKFxuXHRcdFx0YWN0aW9uUGFyYW1ldGVySW5mb3MubWFwKFxuXHRcdFx0XHQoYWN0aW9uUGFyYW1ldGVySW5mbyk6IFByb21pc2U8c3RyaW5nIHwgTXVsdGlWYWx1ZUZpZWxkSXRlbVtdPiB8IHVuZGVmaW5lZCA9PiBhY3Rpb25QYXJhbWV0ZXJJbmZvLnZhbGlkYXRpb25Qcm9taXNlXG5cdFx0XHQpXG5cdFx0KTtcblxuXHRcdGNvbnN0IHJlcXVpcmVkUGFyYW1ldGVySW5mb3MgPSBhY3Rpb25QYXJhbWV0ZXJJbmZvcy5maWx0ZXIoKHBhcmFtZXRlckluZm8pID0+IHBhcmFtZXRlckluZm8uZmllbGQuZ2V0UmVxdWlyZWQoKSk7XG5cdFx0Y29uc3QgYWxsTWVzc2FnZXMgPSBNZXNzYWdpbmcuZ2V0TWVzc2FnZU1vZGVsKCkuZ2V0RGF0YSgpO1xuXHRcdGNvbnN0IGVtcHR5UmVxdWlyZWRGaWVsZHMgPSByZXF1aXJlZFBhcmFtZXRlckluZm9zLmZpbHRlcigocmVxdWlyZWRQYXJhbWV0ZXJJbmZvKSA9PiB7XG5cdFx0XHRjb25zdCBmaWVsZElkID0gcmVxdWlyZWRQYXJhbWV0ZXJJbmZvLmZpZWxkLmdldElkKCk7XG5cdFx0XHRjb25zdCByZWxldmFudE1lc3NhZ2VzID0gYWxsTWVzc2FnZXMuZmlsdGVyKChtc2c6IE1lc3NhZ2UpID0+XG5cdFx0XHRcdG1zZy5nZXRDb250cm9sSWRzKCkuc29tZSgoY29udHJvbElkOiBzdHJpbmcpID0+IGNvbnRyb2xJZC5pbmNsdWRlcyhmaWVsZElkKSlcblx0XHRcdCk7XG5cdFx0XHRpZiAocmVsZXZhbnRNZXNzYWdlcy5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH0gZWxzZSBpZiAocmVxdWlyZWRQYXJhbWV0ZXJJbmZvLmlzTXVsdGlWYWx1ZSkge1xuXHRcdFx0XHRyZXR1cm4gcmVxdWlyZWRQYXJhbWV0ZXJJbmZvLnZhbHVlID09PSB1bmRlZmluZWQgfHwgIXJlcXVpcmVkUGFyYW1ldGVySW5mby52YWx1ZS5sZW5ndGg7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjb25zdCBmaWVsZFZhbHVlID0gKHJlcXVpcmVkUGFyYW1ldGVySW5mby5maWVsZCBhcyBGaWVsZCkuZ2V0VmFsdWUoKTtcblx0XHRcdFx0Y29uc3QgaXNGaWVsZEFycmF5ID0gQXJyYXkuaXNBcnJheSgocmVxdWlyZWRQYXJhbWV0ZXJJbmZvLmZpZWxkIGFzIEZpZWxkKS5nZXRWYWx1ZSgpKTtcblx0XHRcdFx0aWYgKGlzRmllbGRBcnJheSkge1xuXHRcdFx0XHRcdC8vIG9ubHkgZmlyc3QgdmFsdWUgY2hlY2sgaXMgZW5vdWdoIGFzIHRoZSBmaWVsZCB2YWx1ZSBjb21lcyBvbiBbMF0gcmVzdCBvZiB0aGUgYXJyYXkgaW5jbHVkZXMgY3VycmVuY3kgYW5kIGN1cnJlbmN5IGNvZGVcblx0XHRcdFx0XHQvLyBib3RoIG9mIHdoaWNoIGNhbiBvciBjYW5ub3QgYmUgbnVsbCwgc28gd2Ugc2hhbGwgY2hlY2sgb25seSB0aGUgZmllbGQgdmFsdWVcblx0XHRcdFx0XHRyZXR1cm4gZmllbGRWYWx1ZVswXSA9PT0gbnVsbCB8fCBmaWVsZFZhbHVlWzBdID09PSBcIlwiO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBmaWVsZFZhbHVlID09PSB1bmRlZmluZWQgfHwgZmllbGRWYWx1ZSA9PT0gbnVsbCB8fCBmaWVsZFZhbHVlID09PSBcIlwiO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdC8qIE1lc3NhZ2UgZm9yIG1pc3NpbmcgbWFuZGF0b3J5IHZhbHVlIG9mIHRoZSBhY3Rpb24gcGFyYW1ldGVyICovXG5cdFx0aWYgKGVtcHR5UmVxdWlyZWRGaWVsZHMubGVuZ3RoKSB7XG5cdFx0XHR0aGlzLl9hZGRNZXNzYWdlRm9yQWN0aW9uUGFyYW1ldGVyKFxuXHRcdFx0XHRlbXB0eVJlcXVpcmVkRmllbGRzLm1hcCgoYWN0aW9uUGFyYW1ldGVySW5mbykgPT4gKHtcblx0XHRcdFx0XHRhY3Rpb25QYXJhbWV0ZXJJbmZvOiBhY3Rpb25QYXJhbWV0ZXJJbmZvLFxuXHRcdFx0XHRcdG1lc3NhZ2U6IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcIkNfT1BFUkFUSU9OU19BQ1RJT05fUEFSQU1FVEVSX0RJQUxPR19NSVNTSU5HX01BTkRBVE9SWV9NU0dcIiwgW1xuXHRcdFx0XHRcdFx0KGFjdGlvblBhcmFtZXRlckluZm8uZmllbGQuZ2V0UGFyZW50KCk/LmdldEFnZ3JlZ2F0aW9uKFwibGFiZWxcIikgYXMgTGFiZWwpLmdldFRleHQoKVxuXHRcdFx0XHRcdF0pXG5cdFx0XHRcdH0pKVxuXHRcdFx0KTtcblx0XHR9XG5cdFx0LyogQ2hlY2sgdmFsdWUgc3RhdGUgb2YgYWxsIHBhcmFtZXRlcnMgKi9cblx0XHRjb25zdCBmaXJzdEludmFsaWRQYXJhbWV0ZXIgPSBhY3Rpb25QYXJhbWV0ZXJJbmZvcy5maW5kKFxuXHRcdFx0KHBhcmFtZXRlckluZm8pID0+XG5cdFx0XHRcdHBhcmFtZXRlckluZm8uZmllbGQuZ2V0VmlzaWJsZSgpICYmXG5cdFx0XHRcdChwYXJhbWV0ZXJJbmZvLmhhc0Vycm9yIHx8IHBhcmFtZXRlckluZm8uZmllbGQuZ2V0VmFsdWVTdGF0ZSgpID09PSBcIkVycm9yXCIgfHwgZW1wdHlSZXF1aXJlZEZpZWxkcy5pbmNsdWRlcyhwYXJhbWV0ZXJJbmZvKSlcblx0XHQpO1xuXHRcdGlmIChmaXJzdEludmFsaWRQYXJhbWV0ZXIpIHtcblx0XHRcdGZpcnN0SW52YWxpZFBhcmFtZXRlci5maWVsZC5zZXRWaXNpYmxlKHRydWUpO1xuXHRcdFx0Zmlyc3RJbnZhbGlkUGFyYW1ldGVyLmZpZWxkLmZvY3VzKCk7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblx0fSxcblxuXHQvKipcblx0ICogU2V0cyB0aGUgYWN0aW9uIGVuYWJsZW1lbnQuXG5cdCAqIEBwYXJhbSBvSW50ZXJuYWxNb2RlbENvbnRleHQgT2JqZWN0IGNvbnRhaW5pbmcgdGhlIGNvbnRleHQgbW9kZWxcblx0ICogQHBhcmFtIG9BY3Rpb25PcGVyYXRpb25BdmFpbGFibGVNYXAgTWFwIGNvbnRhaW5pbmcgdGhlIG9wZXJhdGlvbiBhdmFpbGFiaWxpdHkgb2YgYWN0aW9uc1xuXHQgKiBAcGFyYW0gYVNlbGVjdGVkQ29udGV4dHMgQXJyYXkgY29udGFpbmluZyBzZWxlY3RlZCBjb250ZXh0cyBvZiB0aGUgY2hhcnRcblx0ICogQHBhcmFtIHNDb250cm9sIENvbnRyb2wgbmFtZVxuXHQgKiBAcGFyYW0gZm9yQ29udGV4dE1lbnUgSW5kaWNhdGVzIGlmIHRoZSBhY3Rpb24gYXBwZWFycyBpbiB0aGUgY29udGV4dCBtZW51LiBJZiBmYWxzZSwgdGhlIGFjdGlvbiBhcHBlYXJzIGluIHRoZSB0YWJsZSB0b29sYmFyXG5cdCAqIEByZXR1cm5zIFRoZSBhY3Rpb24gZW5hYmxlbWVudCBwcm9taXNlc1xuXHQgKi9cblx0c2V0QWN0aW9uRW5hYmxlbWVudDogYXN5bmMgZnVuY3Rpb24gKFxuXHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dDogSW50ZXJuYWxNb2RlbENvbnRleHQsXG5cdFx0b0FjdGlvbk9wZXJhdGlvbkF2YWlsYWJsZU1hcDogUmVjb3JkPHN0cmluZywgc3RyaW5nPixcblx0XHRhU2VsZWN0ZWRDb250ZXh0czogQ29udGV4dFtdLFxuXHRcdHNDb250cm9sOiBzdHJpbmcsXG5cdFx0Zm9yQ29udGV4dE1lbnUgPSBmYWxzZVxuXHQpOiBQcm9taXNlPHZvaWRbXT4ge1xuXHRcdGNvbnN0IGFQcm9taXNlcyA9IFtdO1xuXHRcdGZvciAoY29uc3Qgc0FjdGlvbiBpbiBvQWN0aW9uT3BlcmF0aW9uQXZhaWxhYmxlTWFwKSB7XG5cdFx0XHRsZXQgYVJlcXVlc3RQcm9taXNlczogUHJvbWlzZTxfUmVxdWVzdGVkUHJvcGVydHk+W10gPSBbXTtcblx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShzQWN0aW9uLCBmYWxzZSk7XG5cdFx0XHRpZiAoc0NvbnRyb2wgPT09IFwidGFibGVcIikge1xuXHRcdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoYGR5bmFtaWNBY3Rpb25zLyR7c0FjdGlvbn0vYUFwcGxpY2FibGVgLCBbXSk7XG5cdFx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShgZHluYW1pY0FjdGlvbnMvJHtzQWN0aW9ufS9hTm90QXBwbGljYWJsZWAsIFtdKTtcblx0XHRcdFx0aWYgKGZvckNvbnRleHRNZW51KSB7XG5cdFx0XHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KGBkeW5hbWljQWN0aW9ucy8ke3NBY3Rpb259L2JFbmFibGVkRm9yQ29udGV4dE1lbnVgLCBmYWxzZSk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KGBkeW5hbWljQWN0aW9ucy8ke3NBY3Rpb259L2JFbmFibGVkYCwgZmFsc2UpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBzUHJvcGVydHkgPSBvQWN0aW9uT3BlcmF0aW9uQXZhaWxhYmxlTWFwW3NBY3Rpb25dO1xuXHRcdFx0Zm9yIChjb25zdCBlbGVtZW50IG9mIGFTZWxlY3RlZENvbnRleHRzKSB7XG5cdFx0XHRcdGNvbnN0IG9TZWxlY3RlZENvbnRleHQgPSBlbGVtZW50O1xuXHRcdFx0XHRpZiAob1NlbGVjdGVkQ29udGV4dCkge1xuXHRcdFx0XHRcdGNvbnN0IG9Db250ZXh0RGF0YSA9IG9TZWxlY3RlZENvbnRleHQuZ2V0T2JqZWN0KCkgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG5cdFx0XHRcdFx0aWYgKHNDb250cm9sID09PSBcImNoYXJ0XCIpIHtcblx0XHRcdFx0XHRcdGlmICgoc1Byb3BlcnR5ID09PSBudWxsICYmICEhb0NvbnRleHREYXRhW2AjJHtzQWN0aW9ufWBdKSB8fCBvU2VsZWN0ZWRDb250ZXh0LmdldE9iamVjdChzUHJvcGVydHkpKSB7XG5cdFx0XHRcdFx0XHRcdC8vbG9vayBmb3IgYWN0aW9uIGFkdmVydGlzZW1lbnQgaWYgcHJlc2VudCBhbmQgaXRzIHZhbHVlIGlzIG5vdCBudWxsXG5cdFx0XHRcdFx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShzQWN0aW9uLCB0cnVlKTtcblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSBlbHNlIGlmIChzQ29udHJvbCA9PT0gXCJ0YWJsZVwiKSB7XG5cdFx0XHRcdFx0XHRhUmVxdWVzdFByb21pc2VzID0gdGhpcy5fc2V0QWN0aW9uRW5hYmxlbWVudEZvclRhYmxlKFxuXHRcdFx0XHRcdFx0XHRvU2VsZWN0ZWRDb250ZXh0LFxuXHRcdFx0XHRcdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQsXG5cdFx0XHRcdFx0XHRcdHNBY3Rpb24sXG5cdFx0XHRcdFx0XHRcdHNQcm9wZXJ0eSxcblx0XHRcdFx0XHRcdFx0YVJlcXVlc3RQcm9taXNlcyxcblx0XHRcdFx0XHRcdFx0Zm9yQ29udGV4dE1lbnVcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRpZiAoc0NvbnRyb2wgPT09IFwidGFibGVcIikge1xuXHRcdFx0XHRpZiAoIWFTZWxlY3RlZENvbnRleHRzLmxlbmd0aCkge1xuXHRcdFx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShgZHluYW1pY0FjdGlvbnMvJHtzQWN0aW9ufWAsIHtcblx0XHRcdFx0XHRcdGJFbmFibGVkOiBmYWxzZSxcblx0XHRcdFx0XHRcdGFBcHBsaWNhYmxlOiBbXSxcblx0XHRcdFx0XHRcdGFOb3RBcHBsaWNhYmxlOiBbXVxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdGFQcm9taXNlcy5wdXNoKENvbW1vblV0aWxzLnNldENvbnRleHRzQmFzZWRPbk9wZXJhdGlvbkF2YWlsYWJsZShvSW50ZXJuYWxNb2RlbENvbnRleHQsIFtdLCBmb3JDb250ZXh0TWVudSkpO1xuXHRcdFx0XHR9IGVsc2UgaWYgKGFTZWxlY3RlZENvbnRleHRzLmxlbmd0aCAmJiB0eXBlb2Ygc1Byb3BlcnR5ID09PSBcInN0cmluZ1wiKSB7XG5cdFx0XHRcdFx0Ly8gV2hlbiBhbGwgcHJvcGVydHkgdmFsdWVzIGhhdmUgYmVlbiByZXRyaWV2ZWQsIHNldFxuXHRcdFx0XHRcdC8vIFRoZSBhcHBsaWNhYmxlIGFuZCBub3QtYXBwbGljYWJsZSBzZWxlY3RlZCBjb250ZXh0cyBmb3IgZWFjaCBhY3Rpb24gYW5kXG5cdFx0XHRcdFx0Ly8gVGhlIGVuYWJsZWQgcHJvcGVydHkgb2YgdGhlIGR5bmFtaWMgYWN0aW9uIGluIGludGVybmFsIG1vZGVsIGNvbnRleHQuXG5cdFx0XHRcdFx0YVByb21pc2VzLnB1c2goXG5cdFx0XHRcdFx0XHRDb21tb25VdGlscy5zZXRDb250ZXh0c0Jhc2VkT25PcGVyYXRpb25BdmFpbGFibGUob0ludGVybmFsTW9kZWxDb250ZXh0LCBhUmVxdWVzdFByb21pc2VzLCBmb3JDb250ZXh0TWVudSlcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBQcm9taXNlLmFsbChhUHJvbWlzZXMpO1xuXHR9LFxuXHRzZXRBY3Rpb25FbmFibGVtZW50QWZ0ZXJQYXRjaDogZnVuY3Rpb24gKFxuXHRcdG9WaWV3OiBWaWV3LFxuXHRcdG9MaXN0QmluZGluZzogT0RhdGFMaXN0QmluZGluZyxcblx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQ6IEludGVybmFsTW9kZWxDb250ZXh0XG5cdCk6IHZvaWQge1xuXHRcdGNvbnN0IG9JbnRlcm5hbE1vZGVsQ29udGV4dERhdGEgPSBvSW50ZXJuYWxNb2RlbENvbnRleHQ/LmdldE9iamVjdCgpIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXHRcdGNvbnN0IG9Db250cm9scyA9IChvSW50ZXJuYWxNb2RlbENvbnRleHREYXRhPy5jb250cm9scyB8fCB7fSkgYXMgUmVjb3JkPHN0cmluZywgeyBjb250cm9sSWQ/OiBzdHJpbmcgfT47XG5cdFx0Zm9yIChjb25zdCBzS2V5IGluIG9Db250cm9scykge1xuXHRcdFx0aWYgKG9Db250cm9sc1tzS2V5XSAmJiBvQ29udHJvbHNbc0tleV0uY29udHJvbElkKSB7XG5cdFx0XHRcdGNvbnN0IG9UYWJsZSA9IG9WaWV3LmJ5SWQoc0tleSk7XG5cdFx0XHRcdGlmIChvVGFibGUgJiYgb1RhYmxlLmlzQTxUYWJsZT4oXCJzYXAudWkubWRjLlRhYmxlXCIpKSB7XG5cdFx0XHRcdFx0Y29uc3Qgb1Jvd0JpbmRpbmcgPSBvVGFibGUuZ2V0Um93QmluZGluZygpO1xuXHRcdFx0XHRcdGlmIChvUm93QmluZGluZyA9PSBvTGlzdEJpbmRpbmcpIHtcblx0XHRcdFx0XHRcdEFjdGlvblJ1bnRpbWUuc2V0QWN0aW9uRW5hYmxlbWVudChcblx0XHRcdFx0XHRcdFx0b1RhYmxlLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikgYXMgSW50ZXJuYWxNb2RlbENvbnRleHQsXG5cdFx0XHRcdFx0XHRcdEpTT04ucGFyc2Uob1RhYmxlLmRhdGEoXCJvcGVyYXRpb25BdmFpbGFibGVNYXBcIikuY3VzdG9tRGF0YSksXG5cdFx0XHRcdFx0XHRcdG9UYWJsZS5nZXRTZWxlY3RlZENvbnRleHRzKCkgYXMgQ29udGV4dFtdLFxuXHRcdFx0XHRcdFx0XHRcInRhYmxlXCJcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9LFxuXG5cdHVwZGF0ZUVkaXRCdXR0b25WaXNpYmlsaXR5QW5kRW5hYmxlbWVudChvVmlldzogRkVWaWV3KTogdm9pZCB7XG5cdFx0Y29uc3QgaVZpZXdMZXZlbCA9IChvVmlldy5nZXRWaWV3RGF0YSgpIGFzIEJhc2VNYW5pZmVzdFNldHRpbmdzKT8udmlld0xldmVsLFxuXHRcdFx0aXNFZGl0YWJsZSA9IG9WaWV3LmdldE1vZGVsKFwidWlcIik/LmdldFByb3BlcnR5KFwiL2lzRWRpdGFibGVcIik7XG5cdFx0aWYgKChpVmlld0xldmVsIGFzIG51bWJlcikgPiAxICYmIGlzRWRpdGFibGUgIT09IHRydWUpIHtcblx0XHRcdGNvbnN0IG9Db250ZXh0ID0gb1ZpZXcuZ2V0QmluZGluZ0NvbnRleHQoKTtcblx0XHRcdGNvbnN0IG9BcHBDb21wb25lbnQgPSBDb21tb25VdGlscy5nZXRBcHBDb21wb25lbnQob1ZpZXcpO1xuXHRcdFx0Y29uc3Qgc01ldGFQYXRoID0gTW9kZWxIZWxwZXIuZ2V0TWV0YVBhdGhGb3JDb250ZXh0KG9Db250ZXh0KTtcblx0XHRcdGNvbnN0IHNFbnRpdHlTZXQgPSBNb2RlbEhlbHBlci5nZXRSb290RW50aXR5U2V0UGF0aChzTWV0YVBhdGgpO1xuXHRcdFx0Y29uc3QgbWV0YUNvbnRleHQgPSBvQ29udGV4dFxuXHRcdFx0XHQ/LmdldE1vZGVsKClcblx0XHRcdFx0LmdldE1ldGFNb2RlbCgpXG5cdFx0XHRcdD8uZ2V0Q29udGV4dChvQ29udGV4dD8uZ2V0UGF0aCgpKTtcblx0XHRcdGNvbnN0IGNvbnZlcnRlckNvbnRleHQgPSBDb252ZXJ0ZXJDb250ZXh0Py5jcmVhdGVDb252ZXJ0ZXJDb250ZXh0Rm9yTWFjcm8oXG5cdFx0XHRcdHNFbnRpdHlTZXQsXG5cdFx0XHRcdG1ldGFDb250ZXh0LFxuXHRcdFx0XHRvQXBwQ29tcG9uZW50LmdldERpYWdub3N0aWNzKCksXG5cdFx0XHRcdG1lcmdlXG5cdFx0XHQpO1xuXHRcdFx0Y29uc3QgZW50aXR5U2V0ID0gY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXQoKTtcblx0XHRcdGNvbnN0IGVudGl0eVR5cGUgPSBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGUoKTtcblx0XHRcdGxldCB1cGRhdGVIaWRkZW47XG5cdFx0XHQvL0ZpbmQgdGhlIFVwZGF0ZSBIaWRkZW4gb2YgdGhlIHJvb3QgZW50aXR5IHNldCBhbmQgYmluZCB0aGUgcHJvcGVydHkgdG8gQW55RWxlbWVudCwgYW55IGNoYW5nZXMgaW4gdGhlIHBhdGggb2YgdGhlIHJvb3QgVXBkYXRlSGlkZGVuIHdpbGwgYmUgdXBkYXRlZCB2aWEgdGhlIHByb3BlcnR5LCBpbnRlcm5hbCBtb2RlbCBjb250ZXh0IGlzIHVwZGF0ZWQgYmFzZWQgb24gdGhlIHByb3BlcnR5XG5cdFx0XHRjb25zdCBiVXBkYXRlSGlkZGVuID0gaXNFbnRpdHlTZXQoZW50aXR5U2V0KSAmJiBlbnRpdHlTZXQuYW5ub3RhdGlvbnMuVUk/LlVwZGF0ZUhpZGRlbj8udmFsdWVPZigpO1xuXHRcdFx0aWYgKGJVcGRhdGVIaWRkZW4gIT09IHRydWUpIHtcblx0XHRcdFx0dXBkYXRlSGlkZGVuID0gTW9kZWxIZWxwZXIuaXNVcGRhdGVIaWRkZW4oZW50aXR5U2V0LCBlbnRpdHlUeXBlKTtcblx0XHRcdH1cblx0XHRcdC8vRmluZCB0aGUgb3BlcmF0aW9uIGF2YWlsYWJsZSBwcm9wZXJ0eSBvZiB0aGUgcm9vdCBlZGl0IGNvbmZpZ3VyYXRpb24gYW5kIGZldGNoIHRoZSBwcm9wZXJ0eSB1c2luZyBBbnlFbGVtZW50XG5cdFx0XHRjb25zdCBzRWRpdEVuYWJsZUJpbmRpbmcgPSBnZXRFZGl0QnV0dG9uRW5hYmxlZChjb252ZXJ0ZXJDb250ZXh0KTtcblx0XHRcdGNvbnN0IGRyYWZ0Um9vdFBhdGggPSBNb2RlbEhlbHBlci5nZXREcmFmdFJvb3RQYXRoKG9Db250ZXh0KTtcblx0XHRcdGNvbnN0IHNTdGlja3lSb290UGF0aCA9IE1vZGVsSGVscGVyLmdldFN0aWNreVJvb3RQYXRoKG9Db250ZXh0KTtcblx0XHRcdGNvbnN0IHNQYXRoID0gZHJhZnRSb290UGF0aCB8fCBzU3RpY2t5Um9vdFBhdGg7XG5cdFx0XHRjb25zdCBvSW50ZXJuYWxNb2RlbENvbnRleHQgPSBvVmlldy5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpIGFzIEludGVybmFsTW9kZWxDb250ZXh0O1xuXHRcdFx0aWYgKHNQYXRoKSB7XG5cdFx0XHRcdGNvbnN0IG9Sb290Q29udGV4dCA9IG9WaWV3LmdldE1vZGVsKCkuYmluZENvbnRleHQoc1BhdGgpLmdldEJvdW5kQ29udGV4dCgpO1xuXHRcdFx0XHRpZiAodXBkYXRlSGlkZGVuICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRjb25zdCBzSGlkZGVuRXhwcmVzc2lvbiA9IGNvbXBpbGVFeHByZXNzaW9uKGVxdWFsKGdldEhpZGRlbkV4cHJlc3Npb24oY29udmVydGVyQ29udGV4dCwgdXBkYXRlSGlkZGVuKSwgZmFsc2UpKTtcblx0XHRcdFx0XHR0aGlzLnVwZGF0ZUVkaXRNb2RlbENvbnRleHQoc0hpZGRlbkV4cHJlc3Npb24sIG9WaWV3LCBvUm9vdENvbnRleHQsIFwicm9vdEVkaXRWaXNpYmxlXCIsIG9JbnRlcm5hbE1vZGVsQ29udGV4dCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKHNFZGl0RW5hYmxlQmluZGluZykge1xuXHRcdFx0XHRcdHRoaXMudXBkYXRlRWRpdE1vZGVsQ29udGV4dChzRWRpdEVuYWJsZUJpbmRpbmcsIG9WaWV3LCBvUm9vdENvbnRleHQsIFwicm9vdEVkaXRFbmFibGVkXCIsIG9JbnRlcm5hbE1vZGVsQ29udGV4dCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH0sXG5cblx0dXBkYXRlRWRpdE1vZGVsQ29udGV4dDogZnVuY3Rpb24gKFxuXHRcdHNCaW5kaW5nRXhwcmVzc2lvbjogc3RyaW5nIHwgdW5kZWZpbmVkLFxuXHRcdG9WaWV3OiBWaWV3LFxuXHRcdG9Sb290Q29udGV4dDogQ29udGV4dCxcblx0XHRzUHJvcGVydHk6IHN0cmluZyxcblx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQ6IEludGVybmFsTW9kZWxDb250ZXh0XG5cdCk6IHZvaWQge1xuXHRcdGlmIChzQmluZGluZ0V4cHJlc3Npb24pIHtcblx0XHRcdGNvbnN0IG9IaWRkZW5FbGVtZW50ID0gbmV3IEFueUVsZW1lbnQoeyBhbnlUZXh0OiBzQmluZGluZ0V4cHJlc3Npb24gfSk7XG5cdFx0XHRvSGlkZGVuRWxlbWVudC5zZXRCaW5kaW5nQ29udGV4dChudWxsKTtcblx0XHRcdG9WaWV3LmFkZERlcGVuZGVudChvSGlkZGVuRWxlbWVudCk7XG5cdFx0XHRvSGlkZGVuRWxlbWVudC5nZXRCaW5kaW5nKFwiYW55VGV4dFwiKTtcblx0XHRcdGNvbnN0IG9Db250ZXh0ID0gb0hpZGRlbkVsZW1lbnRcblx0XHRcdFx0LmdldE1vZGVsKClcblx0XHRcdFx0Py5iaW5kQ29udGV4dChvUm9vdENvbnRleHQuZ2V0UGF0aCgpLCBvUm9vdENvbnRleHQsIHsgJCRncm91cElkOiBcIiRhdXRvLkhlcm9lc1wiIH0pXG5cdFx0XHRcdD8uZ2V0Qm91bmRDb250ZXh0KCk7XG5cdFx0XHRvSGlkZGVuRWxlbWVudC5zZXRCaW5kaW5nQ29udGV4dChvQ29udGV4dCk7XG5cdFx0XHRvSGlkZGVuRWxlbWVudD8uZ2V0QmluZGluZyhcImFueVRleHRcIik/LmF0dGFjaENoYW5nZSgob0V2ZW50OiBFdmVudDx7fSwgUHJvcGVydHlCaW5kaW5nPikgPT4ge1xuXHRcdFx0XHRjb25zdCBvTmV3VmFsdWUgPSBvRXZlbnQuZ2V0U291cmNlKCkuZ2V0RXh0ZXJuYWxWYWx1ZSgpO1xuXHRcdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoc1Byb3BlcnR5LCBvTmV3VmFsdWUpO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHR9LFxuXG5cdF9zZXRBY3Rpb25FbmFibGVtZW50Rm9yVGFibGU6IGZ1bmN0aW9uIChcblx0XHRvU2VsZWN0ZWRDb250ZXh0OiBDb250ZXh0IHwgdW5kZWZpbmVkLFxuXHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dDogSW50ZXJuYWxNb2RlbENvbnRleHQsXG5cdFx0c0FjdGlvbjogc3RyaW5nLFxuXHRcdHNQcm9wZXJ0eTogc3RyaW5nLFxuXHRcdGFSZXF1ZXN0UHJvbWlzZXM6IFByb21pc2U8X1JlcXVlc3RlZFByb3BlcnR5PltdLFxuXHRcdGZvckNvbnRleHRNZW51ID0gZmFsc2Vcblx0KTogUHJvbWlzZTxfUmVxdWVzdGVkUHJvcGVydHk+W10ge1xuXHRcdC8vIFJldHJpZXZlIHByZXZpb3VzbHkgY2hlY2tlZCBjb250ZXh0cyBpbiBjYXNlIG9mICFmb3JDb250ZXh0TWVudVxuXHRcdGNvbnN0IHNFbmFibGVtZW50RmllbGROYW1lID0gZm9yQ29udGV4dE1lbnUgPyBcImJFbmFibGVkRm9yQ29udGV4dE1lbnVcIiA6IFwiYkVuYWJsZWRcIixcblx0XHRcdGFBcHBsaWNhYmxlOiBbQ29udGV4dCB8IHVuZGVmaW5lZF0gPSBvSW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0UHJvcGVydHkoYGR5bmFtaWNBY3Rpb25zLyR7c0FjdGlvbn0vYUFwcGxpY2FibGVgKSB8fCBbXSxcblx0XHRcdGFOb3RBcHBsaWNhYmxlOiBbQ29udGV4dCB8IHVuZGVmaW5lZF0gPSBvSW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0UHJvcGVydHkoYGR5bmFtaWNBY3Rpb25zLyR7c0FjdGlvbn0vYU5vdEFwcGxpY2FibGVgKSB8fCBbXTtcblx0XHRsZXQgYkFjdGlvbkVuYWJsZWQ6IGJvb2xlYW4gPSBvSW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0UHJvcGVydHkoYGR5bmFtaWNBY3Rpb25zLyR7c0FjdGlvbn0vJHtzRW5hYmxlbWVudEZpZWxkTmFtZX1gKSB8fCBmYWxzZTtcblxuXHRcdGlmICghZm9yQ29udGV4dE1lbnUpIHtcblx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShgZHluYW1pY0FjdGlvbnMvJHtzQWN0aW9ufWAsIHtcblx0XHRcdFx0YkVuYWJsZWQ6IGZhbHNlLFxuXHRcdFx0XHRhQXBwbGljYWJsZTogW10sXG5cdFx0XHRcdGFOb3RBcHBsaWNhYmxlOiBbXVxuXHRcdFx0fSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShgZHluYW1pY0FjdGlvbnMvJHtzQWN0aW9ufWAsIHtcblx0XHRcdFx0Ly8gRG8gbm90IGNoYW5nZSBlbmFibGVkLCBhQXBwbGljYWJsZSBhbmQgYU5vdEFwcGxpY2FibGUgcHJvcGVydHkgaW4gY2FzZSBvZiBjb250ZXh0IG1lbnUgY2FsY3VsYXRpb25cblx0XHRcdFx0Ly8gaW4gY2FzZSBvZiBjb250ZXh0IG1lbnUsIG9ubHkgdGhlIGNsaWNrZWQgY29udGV4dCBnb2VzIGludG8gdGhlIHByb2Nlc3NpbmcgLSBvdGhlciBzZWxlY3RlZCBjb250ZXh0cyBtdXN0IGJlIGtlcHQgaW4gdGhlIG1vZGVsXG5cdFx0XHRcdGJFbmFibGVkOiBvSW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0UHJvcGVydHkoYGR5bmFtaWNBY3Rpb25zLyR7c0FjdGlvbn0vYkVuYWJsZWRgKSxcblx0XHRcdFx0YUFwcGxpY2FibGU6IG9JbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRQcm9wZXJ0eShgZHluYW1pY0FjdGlvbnMvJHtzQWN0aW9ufS9hQXBwbGljYWJsZWApLFxuXHRcdFx0XHRhTm90QXBwbGljYWJsZTogb0ludGVybmFsTW9kZWxDb250ZXh0LmdldFByb3BlcnR5KGBkeW5hbWljQWN0aW9ucy8ke3NBY3Rpb259L2FOb3RBcHBsaWNhYmxlYCksXG5cdFx0XHRcdGJFbmFibGVkRm9yQ29udGV4dE1lbnU6IGZhbHNlLFxuXHRcdFx0XHRhQXBwbGljYWJsZUZvckNvbnRleHRNZW51OiBbXSxcblx0XHRcdFx0YU5vdEFwcGxpY2FibGVGb3JDb250ZXh0TWVudTogW11cblx0XHRcdH0pO1xuXHRcdH1cblx0XHQvLyBOb3RlIHRoYXQgbm9uIGR5bmFtaWMgYWN0aW9ucyBhcmUgbm90IHByb2Nlc3NlZCBoZXJlLiBUaGV5IGFyZSBlbmFibGVkIGJlY2F1c2Vcblx0XHQvLyBvbmUgb3IgbW9yZSBhcmUgc2VsZWN0ZWQgYW5kIHRoZSBzZWNvbmQgcGFydCBvZiB0aGUgY29uZGl0aW9uIGluIHRoZSB0ZW1wbGF0aW5nXG5cdFx0Ly8gaXMgdGhlbiB1bmRlZmluZWQgYW5kIHRodXMgdGhlIGJ1dHRvbiB0YWtlcyB0aGUgZGVmYXVsdCBlbmFibGluZywgd2hpY2ggaXMgdHJ1ZSFcblx0XHRjb25zdCBzRHluYW1pY0FjdGlvbkVuYWJsZWRQYXRoID0gYCR7b0ludGVybmFsTW9kZWxDb250ZXh0LmdldFBhdGgoKX0vZHluYW1pY0FjdGlvbnMvJHtzQWN0aW9ufS8ke3NFbmFibGVtZW50RmllbGROYW1lfWA7XG5cblx0XHRpZiAodHlwZW9mIHNQcm9wZXJ0eSA9PT0gXCJvYmplY3RcIiAmJiBzUHJvcGVydHkgIT09IG51bGwgJiYgc1Byb3BlcnR5ICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdGlmIChvU2VsZWN0ZWRDb250ZXh0KSB7XG5cdFx0XHRcdGNvbnN0IG9Db250ZXh0RGF0YSA9IG9TZWxlY3RlZENvbnRleHQuZ2V0T2JqZWN0KCkgYXMgUmVjb3JkPHN0cmluZywgUHJpbWl0aXZlVHlwZT47XG5cdFx0XHRcdGNvbnN0IG9UcmFuc2Zvcm1lZEJpbmRpbmcgPSB0cmFuc2Zvcm1SZWN1cnNpdmVseShcblx0XHRcdFx0XHRzUHJvcGVydHksXG5cdFx0XHRcdFx0XCJQYXRoSW5Nb2RlbFwiLFxuXHRcdFx0XHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1sb29wLWZ1bmNcblx0XHRcdFx0XHRmdW5jdGlvbiAob0JpbmRpbmdFeHByZXNzaW9uOiBQYXRoSW5Nb2RlbEV4cHJlc3Npb248UHJpbWl0aXZlVHlwZT4pIHtcblx0XHRcdFx0XHRcdHJldHVybiBvQ29udGV4dERhdGEgPyBjb25zdGFudChvQ29udGV4dERhdGFbb0JpbmRpbmdFeHByZXNzaW9uLnBhdGhdKSA6IGNvbnN0YW50KGZhbHNlKTtcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdHRydWVcblx0XHRcdFx0KTtcblx0XHRcdFx0Y29uc3Qgc1Jlc3VsdCA9IGNvbXBpbGVFeHByZXNzaW9uKG9UcmFuc2Zvcm1lZEJpbmRpbmcpO1xuXHRcdFx0XHRiQWN0aW9uRW5hYmxlZCA9IGJBY3Rpb25FbmFibGVkIHx8IHNSZXN1bHQgPT09IFwidHJ1ZVwiO1xuXHRcdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0TW9kZWwoKS5zZXRQcm9wZXJ0eShzRHluYW1pY0FjdGlvbkVuYWJsZWRQYXRoLCBiQWN0aW9uRW5hYmxlZCk7XG5cdFx0XHRcdChzUmVzdWx0ID09PSBcInRydWVcIiA/IGFBcHBsaWNhYmxlIDogYU5vdEFwcGxpY2FibGUpLnB1c2gob1NlbGVjdGVkQ29udGV4dCk7XG5cdFx0XHR9XG5cdFx0XHRDb21tb25VdGlscy5zZXREeW5hbWljQWN0aW9uQ29udGV4dHMob0ludGVybmFsTW9kZWxDb250ZXh0LCBzQWN0aW9uLCBhQXBwbGljYWJsZSwgYU5vdEFwcGxpY2FibGUsIGZvckNvbnRleHRNZW51KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Y29uc3Qgb0NvbnRleHREYXRhID0gb1NlbGVjdGVkQ29udGV4dD8uZ2V0T2JqZWN0KCkgYXMgUmVjb3JkPHN0cmluZywgUHJpbWl0aXZlVHlwZT47XG5cdFx0XHRpZiAoc1Byb3BlcnR5ID09PSBudWxsICYmICEhb0NvbnRleHREYXRhW2AjJHtzQWN0aW9ufWBdKSB7XG5cdFx0XHRcdC8vbG9vayBmb3IgYWN0aW9uIGFkdmVydGlzZW1lbnQgaWYgcHJlc2VudCBhbmQgaXRzIHZhbHVlIGlzIG5vdCBudWxsXG5cdFx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRNb2RlbCgpLnNldFByb3BlcnR5KHNEeW5hbWljQWN0aW9uRW5hYmxlZFBhdGgsIHRydWUpO1xuXHRcdFx0fSBlbHNlIGlmIChvU2VsZWN0ZWRDb250ZXh0ICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0Ly8gQ29sbGVjdCBwcm9taXNlcyB0byByZXRyaWV2ZSBzaW5nbGV0b24gb3Igbm9ybWFsIHByb3BlcnR5IHZhbHVlIGFzeW5jaHJvbm91c2x5XG5cdFx0XHRcdGFSZXF1ZXN0UHJvbWlzZXMucHVzaChDb21tb25VdGlscy5yZXF1ZXN0UHJvcGVydHkob1NlbGVjdGVkQ29udGV4dCwgc0FjdGlvbiwgc1Byb3BlcnR5LCBzRHluYW1pY0FjdGlvbkVuYWJsZWRQYXRoKSk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBhUmVxdWVzdFByb21pc2VzO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBDaGVjayBpZiBhY3Rpb24gaXMgY3JpdGljYWwuXG5cdCAqIEBwYXJhbSBtZXRhTW9kZWwgTWV0YU1vZGVsXG5cdCAqIEBwYXJhbSBwYXRoIFBhdGggdG8gdGhlIGFjdGlvblxuXHQgKiBAcGFyYW0gY29udGV4dHMgQ29udGV4dHMgaW4gY2FzZSBvZiBib3VuZCBhY3Rpb25zLlxuXHQgKiBAcmV0dXJucyBCb29sZWFuIGluZGljYXRpbmcgYWN0aW9uIGlzIGNyaXRpY2FsXG5cdCAqL1xuXHRnZXRJc0FjdGlvbkNyaXRpY2FsOiBhc3luYyBmdW5jdGlvbiAobWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbCwgcGF0aDogc3RyaW5nLCBjb250ZXh0czogQ29udGV4dFtdID0gW10pOiBQcm9taXNlPGJvb2xlYW4+IHtcblx0XHQvLyBkZWZhdWx0IGlzIHRydWUuXG5cdFx0bGV0IGlzQWN0aW9uQ3JpdGljYWxWYWx1ZTogYm9vbGVhbiB8IFByb21pc2U8Ym9vbGVhbj4gPSB0cnVlO1xuXHRcdGNvbnN0IGNvbnZlcnRlZFR5cGVzID0gY29udmVydFR5cGVzKG1ldGFNb2RlbCk7XG5cdFx0Y29uc3QgYWN0aW9uVGFyZ2V0UmVzb2x1dGlvbiA9IGNvbnZlcnRlZFR5cGVzLnJlc29sdmVQYXRoPEVkbUFjdGlvbj4ocGF0aCk7XG5cdFx0Y29uc3QgYWN0aW9uVGFyZ2V0ID0gYWN0aW9uVGFyZ2V0UmVzb2x1dGlvbi50YXJnZXQ7XG5cdFx0aWYgKCFhY3Rpb25UYXJnZXQpIHtcblx0XHRcdHJldHVybiBpc0FjdGlvbkNyaXRpY2FsVmFsdWU7XG5cdFx0fVxuXG5cdFx0Y29uc3QgaXNBY3Rpb25Dcml0aWNhbEJpbmRpbmdFeHAgPSBnZXRJc0FjdGlvbkNyaXRpY2FsRXhwcmVzc2lvbihhY3Rpb25UYXJnZXQsIGNvbnZlcnRlZFR5cGVzKTtcblxuXHRcdGlmIChpc0NvbnN0YW50KGlzQWN0aW9uQ3JpdGljYWxCaW5kaW5nRXhwKSkge1xuXHRcdFx0Ly8gQ29uc3RhbnQgZXhwcmVzc2lvbiByZXNvbHZlcyB0byBcInRydWVcIiBvciBcImZhbHNlXCIuIEJ1dCwgd2UgbmVlZCBib29sZWFuLlxuXHRcdFx0aXNBY3Rpb25Dcml0aWNhbFZhbHVlID0gY29tcGlsZUNvbnN0YW50KGlzQWN0aW9uQ3JpdGljYWxCaW5kaW5nRXhwLCBmYWxzZSwgdW5kZWZpbmVkLCB0cnVlKSBhcyBib29sZWFuO1xuXHRcdH0gZWxzZSBpZiAoY29udGV4dHMubGVuZ3RoID4gMCkge1xuXHRcdFx0Ly8gV2UgZXZhbHVhdGUgdGhlIHZhbHVlIG9mIHRoZSBleHByZXNzaW9uIHZpYSBhIFVJNSBtYW5hZ2VkIG9iamVjdCBpbnN0YW5jZS5cblx0XHRcdGlzQWN0aW9uQ3JpdGljYWxWYWx1ZSA9IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG5cdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0Ly8gQ3JlYXRpbmcgQmluZGluZyB0byByZXNvbHZlXG5cdFx0XHRcdFx0Y29uc3QgYW55T2JqZWN0ID0gbmV3IEFueSh7IGFueUJvb2xlYW46IGNvbXBpbGVFeHByZXNzaW9uKGlzQWN0aW9uQ3JpdGljYWxCaW5kaW5nRXhwKSB9KTtcblx0XHRcdFx0XHRhbnlPYmplY3Quc2V0TW9kZWwoY29udGV4dHNbMF0uZ2V0TW9kZWwoKSk7XG5cblx0XHRcdFx0XHQvLyBBdHRhY2hpbmcgY2hhbmdlIGV2ZW50c1xuXHRcdFx0XHRcdGNvbnN0IGJvb2xlYW5CaW5kaW5nID0gYW55T2JqZWN0LmdldEJpbmRpbmcoXCJhbnlCb29sZWFuXCIpIGFzIFByb3BlcnR5QmluZGluZztcblx0XHRcdFx0XHRjb25zdCBmbkNoYW5nZSA9IGZ1bmN0aW9uICgpOiB2b2lkIHtcblx0XHRcdFx0XHRcdGNvbnN0IHZhbHVlRXh0ID0gYm9vbGVhbkJpbmRpbmcuZ2V0RXh0ZXJuYWxWYWx1ZSgpO1xuXHRcdFx0XHRcdFx0YW55T2JqZWN0LmRlc3Ryb3koKTtcblx0XHRcdFx0XHRcdHJlc29sdmUodmFsdWVFeHQpO1xuXHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0Ym9vbGVhbkJpbmRpbmcuYXR0YWNoRXZlbnRPbmNlKFwiY2hhbmdlXCIsIGZuQ2hhbmdlKTtcblxuXHRcdFx0XHRcdC8vIHNldHRpbmcgYmluZGluZyBjb250ZXh0IHRvIHRyaWdnZXIgdGhlIGJpbmRpbmcgcmVzb2x1dGlvblxuXHRcdFx0XHRcdGFueU9iamVjdC5zZXRCaW5kaW5nQ29udGV4dChjb250ZXh0c1swXSk7XG5cdFx0XHRcdH0gY2F0Y2ggKGVycjogdW5rbm93bikge1xuXHRcdFx0XHRcdC8vIGVycm9yIHdoaWxlIGNyZWF0aW5nIG9yIHJlc29sdmluZyB0aGUgYmluZGluZ1xuXHRcdFx0XHRcdGNvbnN0IG1lc3NhZ2UgPSBlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyci5tZXNzYWdlIDogU3RyaW5nKGVycik7XG5cdFx0XHRcdFx0TG9nLmVycm9yKGBGRSA6IEFjdGlvbnMgOiBFcnJvciB3aGlsZSByZXNvbHZpbmcgSXNBY3Rpb25Dcml0aWNhbCBmb3IgJHtwYXRofSA6ICR7bWVzc2FnZX1gKTtcblx0XHRcdFx0XHQvLyBPbiB0aGUgc2FmZSBzaWRlLCB3ZSBzaGFsbCByZXR1cm4gYWN0aW9uIGlzIGNyaXRpY2FsIGlmIHZhbHVlIGNvdWxkbid0IGJlIGRldGVybWluZWQuXG5cdFx0XHRcdFx0cmVzb2x2ZSh0cnVlKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGlzQWN0aW9uQ3JpdGljYWxWYWx1ZTtcblx0fVxufTtcbmV4cG9ydCBk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
327
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJBY3Rpb25SdW50aW1lIiwiX2FkZE1lc3NhZ2VGb3JBY3Rpb25QYXJhbWV0ZXIiLCJtZXNzYWdlUGFyYW1ldGVycyIsIk1lc3NhZ2luZyIsImFkZE1lc3NhZ2VzIiwibWFwIiwibWVzc2FnZVBhcmFtZXRlciIsImJpbmRpbmciLCJhY3Rpb25QYXJhbWV0ZXJJbmZvIiwiZmllbGQiLCJnZXRCaW5kaW5nIiwiaXNNdWx0aVZhbHVlIiwiTWVzc2FnZSIsIm1lc3NhZ2UiLCJ0eXBlIiwiTWVzc2FnZVR5cGUiLCJFcnJvciIsInByb2Nlc3NvciIsImdldE1vZGVsIiwidW5kZWZpbmVkIiwicGVyc2lzdGVudCIsInRhcmdldCIsImdldFJlc29sdmVkUGF0aCIsInZhbGlkYXRlUHJvcGVydGllcyIsImFjdGlvblBhcmFtZXRlckluZm9zIiwicmVzb3VyY2VNb2RlbCIsIlByb21pc2UiLCJhbGxTZXR0bGVkIiwidmFsaWRhdGlvblByb21pc2UiLCJyZXF1aXJlZFBhcmFtZXRlckluZm9zIiwiZmlsdGVyIiwicGFyYW1ldGVySW5mbyIsImdldFJlcXVpcmVkIiwiYWxsTWVzc2FnZXMiLCJnZXRNZXNzYWdlTW9kZWwiLCJnZXREYXRhIiwiZW1wdHlSZXF1aXJlZEZpZWxkcyIsInJlcXVpcmVkUGFyYW1ldGVySW5mbyIsImZpZWxkSWQiLCJnZXRJZCIsInJlbGV2YW50TWVzc2FnZXMiLCJtc2ciLCJnZXRDb250cm9sSWRzIiwic29tZSIsImNvbnRyb2xJZCIsImluY2x1ZGVzIiwibGVuZ3RoIiwidmFsdWUiLCJmaWVsZFZhbHVlIiwiZ2V0VmFsdWUiLCJpc0ZpZWxkQXJyYXkiLCJBcnJheSIsImlzQXJyYXkiLCJfYWN0aW9uUGFyYW1ldGVySW5mbyQiLCJnZXRUZXh0IiwiZ2V0UGFyZW50IiwiZ2V0QWdncmVnYXRpb24iLCJmaXJzdEludmFsaWRQYXJhbWV0ZXIiLCJmaW5kIiwiZ2V0VmlzaWJsZSIsImhhc0Vycm9yIiwiZ2V0VmFsdWVTdGF0ZSIsInNldFZpc2libGUiLCJmb2N1cyIsInNldEFjdGlvbkVuYWJsZW1lbnQiLCJvSW50ZXJuYWxNb2RlbENvbnRleHQiLCJvQWN0aW9uT3BlcmF0aW9uQXZhaWxhYmxlTWFwIiwiYVNlbGVjdGVkQ29udGV4dHMiLCJzQ29udHJvbCIsImZvckNvbnRleHRNZW51IiwiYXJndW1lbnRzIiwiYVByb21pc2VzIiwic0FjdGlvbiIsImFSZXF1ZXN0UHJvbWlzZXMiLCJzZXRQcm9wZXJ0eSIsInNQcm9wZXJ0eSIsImVsZW1lbnQiLCJvU2VsZWN0ZWRDb250ZXh0Iiwib0NvbnRleHREYXRhIiwiZ2V0T2JqZWN0IiwiX3NldEFjdGlvbkVuYWJsZW1lbnRGb3JUYWJsZSIsImJFbmFibGVkIiwiYUFwcGxpY2FibGUiLCJhTm90QXBwbGljYWJsZSIsInB1c2giLCJDb21tb25VdGlscyIsInNldENvbnRleHRzQmFzZWRPbk9wZXJhdGlvbkF2YWlsYWJsZSIsImFsbCIsInNldEFjdGlvbkVuYWJsZW1lbnRBZnRlclBhdGNoIiwib1ZpZXciLCJvTGlzdEJpbmRpbmciLCJvSW50ZXJuYWxNb2RlbENvbnRleHREYXRhIiwib0NvbnRyb2xzIiwiY29udHJvbHMiLCJzS2V5Iiwib1RhYmxlIiwiYnlJZCIsImlzQSIsIm9Sb3dCaW5kaW5nIiwiZ2V0Um93QmluZGluZyIsImdldEJpbmRpbmdDb250ZXh0IiwiSlNPTiIsInBhcnNlIiwiZGF0YSIsImN1c3RvbURhdGEiLCJnZXRTZWxlY3RlZENvbnRleHRzIiwidXBkYXRlRWRpdEJ1dHRvblZpc2liaWxpdHlBbmRFbmFibGVtZW50IiwiX29WaWV3JGdldFZpZXdEYXRhIiwiaVZpZXdMZXZlbCIsImdldFZpZXdEYXRhIiwidmlld0xldmVsIiwiaXNFZGl0YWJsZSIsImdldElzRWRpdGFibGUiLCJfb0NvbnRleHQkZ2V0TW9kZWwkZ2UiLCJfZW50aXR5U2V0JGFubm90YXRpb24iLCJfZW50aXR5U2V0JGFubm90YXRpb24yIiwib0NvbnRleHQiLCJvQXBwQ29tcG9uZW50IiwiZ2V0QXBwQ29tcG9uZW50Iiwic01ldGFQYXRoIiwiTW9kZWxIZWxwZXIiLCJnZXRNZXRhUGF0aEZvckNvbnRleHQiLCJzRW50aXR5U2V0IiwiZ2V0Um9vdEVudGl0eVNldFBhdGgiLCJtZXRhQ29udGV4dCIsImdldE1ldGFNb2RlbCIsImdldENvbnRleHQiLCJnZXRQYXRoIiwiY29udmVydGVyQ29udGV4dCIsIkNvbnZlcnRlckNvbnRleHQiLCJjcmVhdGVDb252ZXJ0ZXJDb250ZXh0Rm9yTWFjcm8iLCJnZXREaWFnbm9zdGljcyIsIm1lcmdlIiwiZW50aXR5U2V0IiwiZ2V0RW50aXR5U2V0IiwiZW50aXR5VHlwZSIsImdldEVudGl0eVR5cGUiLCJ1cGRhdGVIaWRkZW4iLCJiVXBkYXRlSGlkZGVuIiwiaXNFbnRpdHlTZXQiLCJhbm5vdGF0aW9ucyIsIlVJIiwiVXBkYXRlSGlkZGVuIiwidmFsdWVPZiIsImlzVXBkYXRlSGlkZGVuIiwic0VkaXRFbmFibGVCaW5kaW5nIiwiZ2V0RWRpdEJ1dHRvbkVuYWJsZWQiLCJkcmFmdFJvb3RQYXRoIiwiZ2V0RHJhZnRSb290UGF0aCIsInNTdGlja3lSb290UGF0aCIsImdldFN0aWNreVJvb3RQYXRoIiwic1BhdGgiLCJvUm9vdENvbnRleHQiLCJiaW5kQ29udGV4dCIsImdldEJvdW5kQ29udGV4dCIsInNIaWRkZW5FeHByZXNzaW9uIiwiY29tcGlsZUV4cHJlc3Npb24iLCJlcXVhbCIsImdldEhpZGRlbkV4cHJlc3Npb24iLCJ1cGRhdGVFZGl0TW9kZWxDb250ZXh0Iiwic0JpbmRpbmdFeHByZXNzaW9uIiwiX29IaWRkZW5FbGVtZW50JGdldE1vIiwiX29IaWRkZW5FbGVtZW50JGdldE1vMiIsIl9vSGlkZGVuRWxlbWVudCRnZXRCaSIsIm9IaWRkZW5FbGVtZW50IiwiQW55RWxlbWVudCIsImFueVRleHQiLCJzZXRCaW5kaW5nQ29udGV4dCIsImFkZERlcGVuZGVudCIsIiQkZ3JvdXBJZCIsImF0dGFjaENoYW5nZSIsIm9FdmVudCIsIm9OZXdWYWx1ZSIsImdldFNvdXJjZSIsImdldEV4dGVybmFsVmFsdWUiLCJzRW5hYmxlbWVudEZpZWxkTmFtZSIsImdldFByb3BlcnR5IiwiYkFjdGlvbkVuYWJsZWQiLCJiRW5hYmxlZEZvckNvbnRleHRNZW51IiwiYUFwcGxpY2FibGVGb3JDb250ZXh0TWVudSIsImFOb3RBcHBsaWNhYmxlRm9yQ29udGV4dE1lbnUiLCJzRHluYW1pY0FjdGlvbkVuYWJsZWRQYXRoIiwib1RyYW5zZm9ybWVkQmluZGluZyIsInRyYW5zZm9ybVJlY3Vyc2l2ZWx5Iiwib0JpbmRpbmdFeHByZXNzaW9uIiwiY29uc3RhbnQiLCJwYXRoIiwic1Jlc3VsdCIsInNldER5bmFtaWNBY3Rpb25Db250ZXh0cyIsInJlcXVlc3RQcm9wZXJ0eSIsImdldElzQWN0aW9uQ3JpdGljYWwiLCJtZXRhTW9kZWwiLCJjb250ZXh0cyIsImlzQWN0aW9uQ3JpdGljYWxWYWx1ZSIsImNvbnZlcnRlZFR5cGVzIiwiY29udmVydFR5cGVzIiwiYWN0aW9uVGFyZ2V0UmVzb2x1dGlvbiIsInJlc29sdmVQYXRoIiwiYWN0aW9uVGFyZ2V0IiwiaXNBY3Rpb25Dcml0aWNhbEJpbmRpbmdFeHAiLCJnZXRJc0FjdGlvbkNyaXRpY2FsRXhwcmVzc2lvbiIsImlzQ29uc3RhbnQiLCJjb21waWxlQ29uc3RhbnQiLCJyZXNvbHZlIiwiYW55T2JqZWN0IiwiQW55IiwiYW55Qm9vbGVhbiIsInNldE1vZGVsIiwiYm9vbGVhbkJpbmRpbmciLCJmbkNoYW5nZSIsInZhbHVlRXh0IiwiZGVzdHJveSIsImF0dGFjaEV2ZW50T25jZSIsImVyciIsIlN0cmluZyIsIkxvZyIsImVycm9yIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJBY3Rpb25SdW50aW1lLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgQWN0aW9uIGFzIEVkbUFjdGlvbiwgQWN0aW9uUGFyYW1ldGVyIGFzIEVkbUFjdGlvblBhcmFtZXRlciwgUHJpbWl0aXZlVHlwZSB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlc1wiO1xuaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgbWVyZ2UgZnJvbSBcInNhcC9iYXNlL3V0aWwvbWVyZ2VcIjtcbmltcG9ydCB0eXBlIHsgUGF0aEluTW9kZWxFeHByZXNzaW9uIH0gZnJvbSBcInNhcC9mZS9iYXNlL0JpbmRpbmdUb29sa2l0XCI7XG5pbXBvcnQgeyBjb21waWxlQ29uc3RhbnQsIGNvbXBpbGVFeHByZXNzaW9uLCBjb25zdGFudCwgZXF1YWwsIGlzQ29uc3RhbnQsIHRyYW5zZm9ybVJlY3Vyc2l2ZWx5IH0gZnJvbSBcInNhcC9mZS9iYXNlL0JpbmRpbmdUb29sa2l0XCI7XG5pbXBvcnQgdHlwZSB7IEZFVmlldyB9IGZyb20gXCJzYXAvZmUvY29yZS9CYXNlQ29udHJvbGxlclwiO1xuaW1wb3J0IHR5cGUgeyBfUmVxdWVzdGVkUHJvcGVydHkgfSBmcm9tIFwic2FwL2ZlL2NvcmUvQ29tbW9uVXRpbHNcIjtcbmltcG9ydCBDb21tb25VdGlscyBmcm9tIFwic2FwL2ZlL2NvcmUvQ29tbW9uVXRpbHNcIjtcbmltcG9ydCB0eXBlIFJlc291cmNlTW9kZWwgZnJvbSBcInNhcC9mZS9jb3JlL1Jlc291cmNlTW9kZWxcIjtcbmltcG9ydCBBbnkgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xzL0FueVwiO1xuaW1wb3J0IHR5cGUgeyBJbnRlcm5hbE1vZGVsQ29udGV4dCB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01vZGVsSGVscGVyXCI7XG5pbXBvcnQgTW9kZWxIZWxwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvTW9kZWxIZWxwZXJcIjtcbmltcG9ydCB7IGlzRW50aXR5U2V0IH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvVHlwZUd1YXJkc1wiO1xuaW1wb3J0IHsgZ2V0SXNBY3Rpb25Dcml0aWNhbEV4cHJlc3Npb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9BY3Rpb25IZWxwZXJcIjtcbmltcG9ydCB0eXBlIExhYmVsIGZyb20gXCJzYXAvbS9MYWJlbFwiO1xuaW1wb3J0IHR5cGUgRXZlbnQgZnJvbSBcInNhcC91aS9iYXNlL0V2ZW50XCI7XG5pbXBvcnQgTWVzc2FnaW5nIGZyb20gXCJzYXAvdWkvY29yZS9NZXNzYWdpbmdcIjtcbmltcG9ydCBNZXNzYWdlIGZyb20gXCJzYXAvdWkvY29yZS9tZXNzYWdlL01lc3NhZ2VcIjtcbmltcG9ydCBNZXNzYWdlVHlwZSBmcm9tIFwic2FwL3VpL2NvcmUvbWVzc2FnZS9NZXNzYWdlVHlwZVwiO1xuaW1wb3J0IHR5cGUgVmlldyBmcm9tIFwic2FwL3VpL2NvcmUvbXZjL1ZpZXdcIjtcbmltcG9ydCB0eXBlIEZpZWxkIGZyb20gXCJzYXAvdWkvbWRjL0ZpZWxkXCI7XG5pbXBvcnQgdHlwZSBNdWx0aVZhbHVlRmllbGQgZnJvbSBcInNhcC91aS9tZGMvTXVsdGlWYWx1ZUZpZWxkXCI7XG5pbXBvcnQgdHlwZSBUYWJsZSBmcm9tIFwic2FwL3VpL21kYy9UYWJsZVwiO1xuaW1wb3J0IHR5cGUgTXVsdGlWYWx1ZUZpZWxkSXRlbSBmcm9tIFwic2FwL3VpL21kYy9maWVsZC9NdWx0aVZhbHVlRmllbGRJdGVtXCI7XG5pbXBvcnQgdHlwZSBQcm9wZXJ0eUJpbmRpbmcgZnJvbSBcInNhcC91aS9tb2RlbC9Qcm9wZXJ0eUJpbmRpbmdcIjtcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9Db250ZXh0XCI7XG5pbXBvcnQgdHlwZSBPRGF0YUxpc3RCaW5kaW5nIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFMaXN0QmluZGluZ1wiO1xuaW1wb3J0IHR5cGUgT0RhdGFNZXRhTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YU1ldGFNb2RlbFwiO1xuaW1wb3J0IEFueUVsZW1lbnQgZnJvbSBcIi4vY29udHJvbHMvQW55RWxlbWVudFwiO1xuaW1wb3J0IENvbnZlcnRlckNvbnRleHQgZnJvbSBcIi4vY29udmVydGVycy9Db252ZXJ0ZXJDb250ZXh0XCI7XG5pbXBvcnQgdHlwZSB7IEJhc2VNYW5pZmVzdFNldHRpbmdzIH0gZnJvbSBcIi4vY29udmVydGVycy9NYW5pZmVzdFNldHRpbmdzXCI7XG5pbXBvcnQgeyBjb252ZXJ0VHlwZXMgfSBmcm9tIFwiLi9jb252ZXJ0ZXJzL01ldGFNb2RlbENvbnZlcnRlclwiO1xuaW1wb3J0IHsgZ2V0RWRpdEJ1dHRvbkVuYWJsZWQsIGdldEhpZGRlbkV4cHJlc3Npb24gfSBmcm9tIFwiLi9jb252ZXJ0ZXJzL29iamVjdFBhZ2UvSGVhZGVyQW5kRm9vdGVyQWN0aW9uXCI7XG5cbmV4cG9ydCB0eXBlIEFjdGlvblBhcmFtZXRlckluZm8gPSB7XG5cdHBhcmFtZXRlcj86IEVkbUFjdGlvblBhcmFtZXRlcjtcblx0ZmllbGQ6IEZpZWxkIHwgTXVsdGlWYWx1ZUZpZWxkO1xuXHRpc011bHRpVmFsdWU6IGJvb2xlYW47XG5cdHZhbHVlPzogc3RyaW5nIHwgTXVsdGlWYWx1ZUZpZWxkSXRlbVtdO1xuXHR2YWxpZGF0aW9uUHJvbWlzZT86IFByb21pc2U8c3RyaW5nIHwgTXVsdGlWYWx1ZUZpZWxkSXRlbVtdPjtcblx0aGFzRXJyb3I6IGJvb2xlYW47XG5cdHByb3BlcnR5UGF0aD86IHN0cmluZztcbn07XG5cbmNvbnN0IEFjdGlvblJ1bnRpbWUgPSB7XG5cdC8qKlxuXHQgKiBBZGRzIGVycm9yIG1lc3NhZ2VzIGZvciBhbiBhY3Rpb24gcGFyYW1ldGVyIGZpZWxkIHRvIHRoZSBtZXNzYWdlIG1hbmFnZXIuXG5cdCAqIEBwYXJhbSBtZXNzYWdlUGFyYW1ldGVycyBJbmZvcm1hdGlvbiBpZGVudGlmeWluZyBhbiBhY3Rpb24gcGFyYW1ldGVyIGFuZCBtZXNzYWdlcyByZWZlcnJpbmcgdG8gdGhpcyBwYXJhbWV0ZXJcblx0ICovXG5cdF9hZGRNZXNzYWdlRm9yQWN0aW9uUGFyYW1ldGVyOiBmdW5jdGlvbiAobWVzc2FnZVBhcmFtZXRlcnM6IHsgYWN0aW9uUGFyYW1ldGVySW5mbzogQWN0aW9uUGFyYW1ldGVySW5mbzsgbWVzc2FnZTogc3RyaW5nIH1bXSk6IHZvaWQge1xuXHRcdE1lc3NhZ2luZy5hZGRNZXNzYWdlcyhcblx0XHRcdG1lc3NhZ2VQYXJhbWV0ZXJzLm1hcCgobWVzc2FnZVBhcmFtZXRlcikgPT4ge1xuXHRcdFx0XHRjb25zdCBiaW5kaW5nID0gbWVzc2FnZVBhcmFtZXRlci5hY3Rpb25QYXJhbWV0ZXJJbmZvLmZpZWxkLmdldEJpbmRpbmcoXG5cdFx0XHRcdFx0bWVzc2FnZVBhcmFtZXRlci5hY3Rpb25QYXJhbWV0ZXJJbmZvLmlzTXVsdGlWYWx1ZSA/IFwiaXRlbXNcIiA6IFwidmFsdWVcIlxuXHRcdFx0XHQpO1xuXHRcdFx0XHRyZXR1cm4gbmV3IE1lc3NhZ2Uoe1xuXHRcdFx0XHRcdG1lc3NhZ2U6IG1lc3NhZ2VQYXJhbWV0ZXIubWVzc2FnZSxcblx0XHRcdFx0XHR0eXBlOiBNZXNzYWdlVHlwZS5FcnJvcixcblx0XHRcdFx0XHRwcm9jZXNzb3I6IGJpbmRpbmc/LmdldE1vZGVsKCkgPz8gdW5kZWZpbmVkLCAvLyBnZXRNb2RlbCgpOiBudWxsIHwgTW9kZWwgfn4+IHByb2Nlc3Nvcj86IE1lc3NhZ2VQcm9jZXNzb3Jcblx0XHRcdFx0XHRwZXJzaXN0ZW50OiB0cnVlLFxuXHRcdFx0XHRcdHRhcmdldDogYmluZGluZz8uZ2V0UmVzb2x2ZWRQYXRoKClcblx0XHRcdFx0fSk7XG5cdFx0XHR9KVxuXHRcdCk7XG5cdH0sXG5cblx0LyoqXG5cdCAqIENoZWNrcyBpZiBhbGwgcmVxdWlyZWQgYWN0aW9uIHBhcmFtZXRlcnMgY29udGFpbiBkYXRhIGFuZCBjaGVja3MgZm9yIGFsbCBhY3Rpb24gcGFyYW1ldGVycyBpZiB0aGVcblx0ICogY29udGFpbmVkIGRhdGEgaXMgdmFsaWQuXG5cdCAqIEBwYXJhbSBhY3Rpb25QYXJhbWV0ZXJJbmZvcyBJbmZvcm1hdGlvbiBpZGVudGlmeWluZyBhbiBhY3Rpb24gcGFyYW1ldGVyXG5cdCAqIEBwYXJhbSByZXNvdXJjZU1vZGVsIFRoZSBtb2RlbCB0byBsb2FkIHRleHQgcmVzb3VyY2VzXG5cdCAqIEByZXR1cm5zIFRoZSB2YWxpZGF0aW9uIHJlc3VsdCBjYW4gYmUgdHJ1ZSBvciBmYWxzZVxuXHQgKi9cblx0dmFsaWRhdGVQcm9wZXJ0aWVzOiBhc3luYyBmdW5jdGlvbiAoYWN0aW9uUGFyYW1ldGVySW5mb3M6IEFjdGlvblBhcmFtZXRlckluZm9bXSwgcmVzb3VyY2VNb2RlbDogUmVzb3VyY2VNb2RlbCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuXHRcdGF3YWl0IFByb21pc2UuYWxsU2V0dGxlZChcblx0XHRcdGFjdGlvblBhcmFtZXRlckluZm9zLm1hcChcblx0XHRcdFx0KGFjdGlvblBhcmFtZXRlckluZm8pOiBQcm9taXNlPHN0cmluZyB8IE11bHRpVmFsdWVGaWVsZEl0ZW1bXT4gfCB1bmRlZmluZWQgPT4gYWN0aW9uUGFyYW1ldGVySW5mby52YWxpZGF0aW9uUHJvbWlzZVxuXHRcdFx0KVxuXHRcdCk7XG5cblx0XHRjb25zdCByZXF1aXJlZFBhcmFtZXRlckluZm9zID0gYWN0aW9uUGFyYW1ldGVySW5mb3MuZmlsdGVyKChwYXJhbWV0ZXJJbmZvKSA9PiBwYXJhbWV0ZXJJbmZvLmZpZWxkLmdldFJlcXVpcmVkKCkpO1xuXHRcdGNvbnN0IGFsbE1lc3NhZ2VzID0gTWVzc2FnaW5nLmdldE1lc3NhZ2VNb2RlbCgpLmdldERhdGEoKTtcblx0XHRjb25zdCBlbXB0eVJlcXVpcmVkRmllbGRzID0gcmVxdWlyZWRQYXJhbWV0ZXJJbmZvcy5maWx0ZXIoKHJlcXVpcmVkUGFyYW1ldGVySW5mbykgPT4ge1xuXHRcdFx0Y29uc3QgZmllbGRJZCA9IHJlcXVpcmVkUGFyYW1ldGVySW5mby5maWVsZC5nZXRJZCgpO1xuXHRcdFx0Y29uc3QgcmVsZXZhbnRNZXNzYWdlcyA9IGFsbE1lc3NhZ2VzLmZpbHRlcigobXNnOiBNZXNzYWdlKSA9PlxuXHRcdFx0XHRtc2cuZ2V0Q29udHJvbElkcygpLnNvbWUoKGNvbnRyb2xJZDogc3RyaW5nKSA9PiBjb250cm9sSWQuaW5jbHVkZXMoZmllbGRJZCkpXG5cdFx0XHQpO1xuXHRcdFx0aWYgKHJlbGV2YW50TWVzc2FnZXMubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9IGVsc2UgaWYgKHJlcXVpcmVkUGFyYW1ldGVySW5mby5pc011bHRpVmFsdWUpIHtcblx0XHRcdFx0cmV0dXJuIHJlcXVpcmVkUGFyYW1ldGVySW5mby52YWx1ZSA9PT0gdW5kZWZpbmVkIHx8ICFyZXF1aXJlZFBhcmFtZXRlckluZm8udmFsdWUubGVuZ3RoO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y29uc3QgZmllbGRWYWx1ZSA9IChyZXF1aXJlZFBhcmFtZXRlckluZm8uZmllbGQgYXMgRmllbGQpLmdldFZhbHVlKCk7XG5cdFx0XHRcdGNvbnN0IGlzRmllbGRBcnJheSA9IEFycmF5LmlzQXJyYXkoKHJlcXVpcmVkUGFyYW1ldGVySW5mby5maWVsZCBhcyBGaWVsZCkuZ2V0VmFsdWUoKSk7XG5cdFx0XHRcdGlmIChpc0ZpZWxkQXJyYXkpIHtcblx0XHRcdFx0XHQvLyBvbmx5IGZpcnN0IHZhbHVlIGNoZWNrIGlzIGVub3VnaCBhcyB0aGUgZmllbGQgdmFsdWUgY29tZXMgb24gWzBdIHJlc3Qgb2YgdGhlIGFycmF5IGluY2x1ZGVzIGN1cnJlbmN5IGFuZCBjdXJyZW5jeSBjb2RlXG5cdFx0XHRcdFx0Ly8gYm90aCBvZiB3aGljaCBjYW4gb3IgY2Fubm90IGJlIG51bGwsIHNvIHdlIHNoYWxsIGNoZWNrIG9ubHkgdGhlIGZpZWxkIHZhbHVlXG5cdFx0XHRcdFx0cmV0dXJuIGZpZWxkVmFsdWVbMF0gPT09IG51bGwgfHwgZmllbGRWYWx1ZVswXSA9PT0gXCJcIjtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gZmllbGRWYWx1ZSA9PT0gdW5kZWZpbmVkIHx8IGZpZWxkVmFsdWUgPT09IG51bGwgfHwgZmllbGRWYWx1ZSA9PT0gXCJcIjtcblx0XHRcdH1cblx0XHR9KTtcblx0XHQvKiBNZXNzYWdlIGZvciBtaXNzaW5nIG1hbmRhdG9yeSB2YWx1ZSBvZiB0aGUgYWN0aW9uIHBhcmFtZXRlciAqL1xuXHRcdGlmIChlbXB0eVJlcXVpcmVkRmllbGRzLmxlbmd0aCkge1xuXHRcdFx0dGhpcy5fYWRkTWVzc2FnZUZvckFjdGlvblBhcmFtZXRlcihcblx0XHRcdFx0ZW1wdHlSZXF1aXJlZEZpZWxkcy5tYXAoKGFjdGlvblBhcmFtZXRlckluZm8pID0+ICh7XG5cdFx0XHRcdFx0YWN0aW9uUGFyYW1ldGVySW5mbzogYWN0aW9uUGFyYW1ldGVySW5mbyxcblx0XHRcdFx0XHRtZXNzYWdlOiByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJDX09QRVJBVElPTlNfQUNUSU9OX1BBUkFNRVRFUl9ESUFMT0dfTUlTU0lOR19NQU5EQVRPUllfTVNHXCIsIFtcblx0XHRcdFx0XHRcdChhY3Rpb25QYXJhbWV0ZXJJbmZvLmZpZWxkLmdldFBhcmVudCgpPy5nZXRBZ2dyZWdhdGlvbihcImxhYmVsXCIpIGFzIExhYmVsKS5nZXRUZXh0KClcblx0XHRcdFx0XHRdKVxuXHRcdFx0XHR9KSlcblx0XHRcdCk7XG5cdFx0fVxuXHRcdC8qIENoZWNrIHZhbHVlIHN0YXRlIG9mIGFsbCBwYXJhbWV0ZXJzICovXG5cdFx0Y29uc3QgZmlyc3RJbnZhbGlkUGFyYW1ldGVyID0gYWN0aW9uUGFyYW1ldGVySW5mb3MuZmluZChcblx0XHRcdChwYXJhbWV0ZXJJbmZvKSA9PlxuXHRcdFx0XHRwYXJhbWV0ZXJJbmZvLmZpZWxkLmdldFZpc2libGUoKSAmJlxuXHRcdFx0XHQocGFyYW1ldGVySW5mby5oYXNFcnJvciB8fCBwYXJhbWV0ZXJJbmZvLmZpZWxkLmdldFZhbHVlU3RhdGUoKSA9PT0gXCJFcnJvclwiIHx8IGVtcHR5UmVxdWlyZWRGaWVsZHMuaW5jbHVkZXMocGFyYW1ldGVySW5mbykpXG5cdFx0KTtcblx0XHRpZiAoZmlyc3RJbnZhbGlkUGFyYW1ldGVyKSB7XG5cdFx0XHRmaXJzdEludmFsaWRQYXJhbWV0ZXIuZmllbGQuc2V0VmlzaWJsZSh0cnVlKTtcblx0XHRcdGZpcnN0SW52YWxpZFBhcmFtZXRlci5maWVsZC5mb2N1cygpO1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cdH0sXG5cblx0LyoqXG5cdCAqIFNldHMgdGhlIGFjdGlvbiBlbmFibGVtZW50LlxuXHQgKiBAcGFyYW0gb0ludGVybmFsTW9kZWxDb250ZXh0IE9iamVjdCBjb250YWluaW5nIHRoZSBjb250ZXh0IG1vZGVsXG5cdCAqIEBwYXJhbSBvQWN0aW9uT3BlcmF0aW9uQXZhaWxhYmxlTWFwIE1hcCBjb250YWluaW5nIHRoZSBvcGVyYXRpb24gYXZhaWxhYmlsaXR5IG9mIGFjdGlvbnNcblx0ICogQHBhcmFtIGFTZWxlY3RlZENvbnRleHRzIEFycmF5IGNvbnRhaW5pbmcgc2VsZWN0ZWQgY29udGV4dHMgb2YgdGhlIGNoYXJ0XG5cdCAqIEBwYXJhbSBzQ29udHJvbCBDb250cm9sIG5hbWVcblx0ICogQHBhcmFtIGZvckNvbnRleHRNZW51IEluZGljYXRlcyBpZiB0aGUgYWN0aW9uIGFwcGVhcnMgaW4gdGhlIGNvbnRleHQgbWVudS4gSWYgZmFsc2UsIHRoZSBhY3Rpb24gYXBwZWFycyBpbiB0aGUgdGFibGUgdG9vbGJhclxuXHQgKiBAcmV0dXJucyBUaGUgYWN0aW9uIGVuYWJsZW1lbnQgcHJvbWlzZXNcblx0ICovXG5cdHNldEFjdGlvbkVuYWJsZW1lbnQ6IGFzeW5jIGZ1bmN0aW9uIChcblx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQ6IEludGVybmFsTW9kZWxDb250ZXh0LFxuXHRcdG9BY3Rpb25PcGVyYXRpb25BdmFpbGFibGVNYXA6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4sXG5cdFx0YVNlbGVjdGVkQ29udGV4dHM6IENvbnRleHRbXSxcblx0XHRzQ29udHJvbDogc3RyaW5nLFxuXHRcdGZvckNvbnRleHRNZW51ID0gZmFsc2Vcblx0KTogUHJvbWlzZTx2b2lkW10+IHtcblx0XHRjb25zdCBhUHJvbWlzZXMgPSBbXTtcblx0XHRmb3IgKGNvbnN0IHNBY3Rpb24gaW4gb0FjdGlvbk9wZXJhdGlvbkF2YWlsYWJsZU1hcCkge1xuXHRcdFx0bGV0IGFSZXF1ZXN0UHJvbWlzZXM6IFByb21pc2U8X1JlcXVlc3RlZFByb3BlcnR5PltdID0gW107XG5cdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoc0FjdGlvbiwgZmFsc2UpO1xuXHRcdFx0aWYgKHNDb250cm9sID09PSBcInRhYmxlXCIpIHtcblx0XHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KGBkeW5hbWljQWN0aW9ucy8ke3NBY3Rpb259L2FBcHBsaWNhYmxlYCwgW10pO1xuXHRcdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoYGR5bmFtaWNBY3Rpb25zLyR7c0FjdGlvbn0vYU5vdEFwcGxpY2FibGVgLCBbXSk7XG5cdFx0XHRcdGlmIChmb3JDb250ZXh0TWVudSkge1xuXHRcdFx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShgZHluYW1pY0FjdGlvbnMvJHtzQWN0aW9ufS9iRW5hYmxlZEZvckNvbnRleHRNZW51YCwgZmFsc2UpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShgZHluYW1pY0FjdGlvbnMvJHtzQWN0aW9ufS9iRW5hYmxlZGAsIGZhbHNlKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0Y29uc3Qgc1Byb3BlcnR5ID0gb0FjdGlvbk9wZXJhdGlvbkF2YWlsYWJsZU1hcFtzQWN0aW9uXTtcblx0XHRcdGZvciAoY29uc3QgZWxlbWVudCBvZiBhU2VsZWN0ZWRDb250ZXh0cykge1xuXHRcdFx0XHRjb25zdCBvU2VsZWN0ZWRDb250ZXh0ID0gZWxlbWVudDtcblx0XHRcdFx0aWYgKG9TZWxlY3RlZENvbnRleHQpIHtcblx0XHRcdFx0XHRjb25zdCBvQ29udGV4dERhdGEgPSBvU2VsZWN0ZWRDb250ZXh0LmdldE9iamVjdCgpIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXHRcdFx0XHRcdGlmIChzQ29udHJvbCA9PT0gXCJjaGFydFwiKSB7XG5cdFx0XHRcdFx0XHRpZiAoKHNQcm9wZXJ0eSA9PT0gbnVsbCAmJiAhIW9Db250ZXh0RGF0YVtgIyR7c0FjdGlvbn1gXSkgfHwgb1NlbGVjdGVkQ29udGV4dC5nZXRPYmplY3Qoc1Byb3BlcnR5KSkge1xuXHRcdFx0XHRcdFx0XHQvL2xvb2sgZm9yIGFjdGlvbiBhZHZlcnRpc2VtZW50IGlmIHByZXNlbnQgYW5kIGl0cyB2YWx1ZSBpcyBub3QgbnVsbFxuXHRcdFx0XHRcdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoc0FjdGlvbiwgdHJ1ZSk7XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0gZWxzZSBpZiAoc0NvbnRyb2wgPT09IFwidGFibGVcIikge1xuXHRcdFx0XHRcdFx0YVJlcXVlc3RQcm9taXNlcyA9IHRoaXMuX3NldEFjdGlvbkVuYWJsZW1lbnRGb3JUYWJsZShcblx0XHRcdFx0XHRcdFx0b1NlbGVjdGVkQ29udGV4dCxcblx0XHRcdFx0XHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LFxuXHRcdFx0XHRcdFx0XHRzQWN0aW9uLFxuXHRcdFx0XHRcdFx0XHRzUHJvcGVydHksXG5cdFx0XHRcdFx0XHRcdGFSZXF1ZXN0UHJvbWlzZXMsXG5cdFx0XHRcdFx0XHRcdGZvckNvbnRleHRNZW51XG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0aWYgKHNDb250cm9sID09PSBcInRhYmxlXCIpIHtcblx0XHRcdFx0aWYgKCFhU2VsZWN0ZWRDb250ZXh0cy5sZW5ndGgpIHtcblx0XHRcdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoYGR5bmFtaWNBY3Rpb25zLyR7c0FjdGlvbn1gLCB7XG5cdFx0XHRcdFx0XHRiRW5hYmxlZDogZmFsc2UsXG5cdFx0XHRcdFx0XHRhQXBwbGljYWJsZTogW10sXG5cdFx0XHRcdFx0XHRhTm90QXBwbGljYWJsZTogW11cblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRhUHJvbWlzZXMucHVzaChDb21tb25VdGlscy5zZXRDb250ZXh0c0Jhc2VkT25PcGVyYXRpb25BdmFpbGFibGUob0ludGVybmFsTW9kZWxDb250ZXh0LCBbXSwgZm9yQ29udGV4dE1lbnUpKTtcblx0XHRcdFx0fSBlbHNlIGlmIChhU2VsZWN0ZWRDb250ZXh0cy5sZW5ndGggJiYgdHlwZW9mIHNQcm9wZXJ0eSA9PT0gXCJzdHJpbmdcIikge1xuXHRcdFx0XHRcdC8vIFdoZW4gYWxsIHByb3BlcnR5IHZhbHVlcyBoYXZlIGJlZW4gcmV0cmlldmVkLCBzZXRcblx0XHRcdFx0XHQvLyBUaGUgYXBwbGljYWJsZSBhbmQgbm90LWFwcGxpY2FibGUgc2VsZWN0ZWQgY29udGV4dHMgZm9yIGVhY2ggYWN0aW9uIGFuZFxuXHRcdFx0XHRcdC8vIFRoZSBlbmFibGVkIHByb3BlcnR5IG9mIHRoZSBkeW5hbWljIGFjdGlvbiBpbiBpbnRlcm5hbCBtb2RlbCBjb250ZXh0LlxuXHRcdFx0XHRcdGFQcm9taXNlcy5wdXNoKFxuXHRcdFx0XHRcdFx0Q29tbW9uVXRpbHMuc2V0Q29udGV4dHNCYXNlZE9uT3BlcmF0aW9uQXZhaWxhYmxlKG9JbnRlcm5hbE1vZGVsQ29udGV4dCwgYVJlcXVlc3RQcm9taXNlcywgZm9yQ29udGV4dE1lbnUpXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gUHJvbWlzZS5hbGwoYVByb21pc2VzKTtcblx0fSxcblx0c2V0QWN0aW9uRW5hYmxlbWVudEFmdGVyUGF0Y2g6IGZ1bmN0aW9uIChcblx0XHRvVmlldzogVmlldyxcblx0XHRvTGlzdEJpbmRpbmc6IE9EYXRhTGlzdEJpbmRpbmcsXG5cdFx0b0ludGVybmFsTW9kZWxDb250ZXh0OiBJbnRlcm5hbE1vZGVsQ29udGV4dFxuXHQpOiB2b2lkIHtcblx0XHRjb25zdCBvSW50ZXJuYWxNb2RlbENvbnRleHREYXRhID0gb0ludGVybmFsTW9kZWxDb250ZXh0Py5nZXRPYmplY3QoKSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcblx0XHRjb25zdCBvQ29udHJvbHMgPSAob0ludGVybmFsTW9kZWxDb250ZXh0RGF0YT8uY29udHJvbHMgfHwge30pIGFzIFJlY29yZDxzdHJpbmcsIHsgY29udHJvbElkPzogc3RyaW5nIH0+O1xuXHRcdGZvciAoY29uc3Qgc0tleSBpbiBvQ29udHJvbHMpIHtcblx0XHRcdGlmIChvQ29udHJvbHNbc0tleV0gJiYgb0NvbnRyb2xzW3NLZXldLmNvbnRyb2xJZCkge1xuXHRcdFx0XHRjb25zdCBvVGFibGUgPSBvVmlldy5ieUlkKHNLZXkpO1xuXHRcdFx0XHRpZiAob1RhYmxlICYmIG9UYWJsZS5pc0E8VGFibGU+KFwic2FwLnVpLm1kYy5UYWJsZVwiKSkge1xuXHRcdFx0XHRcdGNvbnN0IG9Sb3dCaW5kaW5nID0gb1RhYmxlLmdldFJvd0JpbmRpbmcoKTtcblx0XHRcdFx0XHRpZiAob1Jvd0JpbmRpbmcgPT0gb0xpc3RCaW5kaW5nKSB7XG5cdFx0XHRcdFx0XHRBY3Rpb25SdW50aW1lLnNldEFjdGlvbkVuYWJsZW1lbnQoXG5cdFx0XHRcdFx0XHRcdG9UYWJsZS5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpIGFzIEludGVybmFsTW9kZWxDb250ZXh0LFxuXHRcdFx0XHRcdFx0XHRKU09OLnBhcnNlKG9UYWJsZS5kYXRhKFwib3BlcmF0aW9uQXZhaWxhYmxlTWFwXCIpLmN1c3RvbURhdGEpLFxuXHRcdFx0XHRcdFx0XHRvVGFibGUuZ2V0U2VsZWN0ZWRDb250ZXh0cygpIGFzIENvbnRleHRbXSxcblx0XHRcdFx0XHRcdFx0XCJ0YWJsZVwiXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fSxcblxuXHR1cGRhdGVFZGl0QnV0dG9uVmlzaWJpbGl0eUFuZEVuYWJsZW1lbnQob1ZpZXc6IEZFVmlldyk6IHZvaWQge1xuXHRcdGNvbnN0IGlWaWV3TGV2ZWwgPSAob1ZpZXcuZ2V0Vmlld0RhdGEoKSBhcyBCYXNlTWFuaWZlc3RTZXR0aW5ncyk/LnZpZXdMZXZlbCxcblx0XHRcdGlzRWRpdGFibGUgPSBDb21tb25VdGlscy5nZXRJc0VkaXRhYmxlKG9WaWV3KTtcblx0XHRpZiAoKGlWaWV3TGV2ZWwgYXMgbnVtYmVyKSA+IDEgJiYgaXNFZGl0YWJsZSAhPT0gdHJ1ZSkge1xuXHRcdFx0Y29uc3Qgb0NvbnRleHQgPSBvVmlldy5nZXRCaW5kaW5nQ29udGV4dCgpO1xuXHRcdFx0Y29uc3Qgb0FwcENvbXBvbmVudCA9IENvbW1vblV0aWxzLmdldEFwcENvbXBvbmVudChvVmlldyk7XG5cdFx0XHRjb25zdCBzTWV0YVBhdGggPSBNb2RlbEhlbHBlci5nZXRNZXRhUGF0aEZvckNvbnRleHQob0NvbnRleHQpO1xuXHRcdFx0Y29uc3Qgc0VudGl0eVNldCA9IE1vZGVsSGVscGVyLmdldFJvb3RFbnRpdHlTZXRQYXRoKHNNZXRhUGF0aCk7XG5cdFx0XHRjb25zdCBtZXRhQ29udGV4dCA9IG9Db250ZXh0XG5cdFx0XHRcdD8uZ2V0TW9kZWwoKVxuXHRcdFx0XHQuZ2V0TWV0YU1vZGVsKClcblx0XHRcdFx0Py5nZXRDb250ZXh0KG9Db250ZXh0Py5nZXRQYXRoKCkpO1xuXHRcdFx0Y29uc3QgY29udmVydGVyQ29udGV4dCA9IENvbnZlcnRlckNvbnRleHQ/LmNyZWF0ZUNvbnZlcnRlckNvbnRleHRGb3JNYWNybyhcblx0XHRcdFx0c0VudGl0eVNldCxcblx0XHRcdFx0bWV0YUNvbnRleHQsXG5cdFx0XHRcdG9BcHBDb21wb25lbnQuZ2V0RGlhZ25vc3RpY3MoKSxcblx0XHRcdFx0bWVyZ2Vcblx0XHRcdCk7XG5cdFx0XHRjb25zdCBlbnRpdHlTZXQgPSBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVNldCgpO1xuXHRcdFx0Y29uc3QgZW50aXR5VHlwZSA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZSgpO1xuXHRcdFx0bGV0IHVwZGF0ZUhpZGRlbjtcblx0XHRcdC8vRmluZCB0aGUgVXBkYXRlIEhpZGRlbiBvZiB0aGUgcm9vdCBlbnRpdHkgc2V0IGFuZCBiaW5kIHRoZSBwcm9wZXJ0eSB0byBBbnlFbGVtZW50LCBhbnkgY2hhbmdlcyBpbiB0aGUgcGF0aCBvZiB0aGUgcm9vdCBVcGRhdGVIaWRkZW4gd2lsbCBiZSB1cGRhdGVkIHZpYSB0aGUgcHJvcGVydHksIGludGVybmFsIG1vZGVsIGNvbnRleHQgaXMgdXBkYXRlZCBiYXNlZCBvbiB0aGUgcHJvcGVydHlcblx0XHRcdGNvbnN0IGJVcGRhdGVIaWRkZW4gPSBpc0VudGl0eVNldChlbnRpdHlTZXQpICYmIGVudGl0eVNldC5hbm5vdGF0aW9ucy5VST8uVXBkYXRlSGlkZGVuPy52YWx1ZU9mKCk7XG5cdFx0XHRpZiAoYlVwZGF0ZUhpZGRlbiAhPT0gdHJ1ZSkge1xuXHRcdFx0XHR1cGRhdGVIaWRkZW4gPSBNb2RlbEhlbHBlci5pc1VwZGF0ZUhpZGRlbihlbnRpdHlTZXQsIGVudGl0eVR5cGUpO1xuXHRcdFx0fVxuXHRcdFx0Ly9GaW5kIHRoZSBvcGVyYXRpb24gYXZhaWxhYmxlIHByb3BlcnR5IG9mIHRoZSByb290IGVkaXQgY29uZmlndXJhdGlvbiBhbmQgZmV0Y2ggdGhlIHByb3BlcnR5IHVzaW5nIEFueUVsZW1lbnRcblx0XHRcdGNvbnN0IHNFZGl0RW5hYmxlQmluZGluZyA9IGdldEVkaXRCdXR0b25FbmFibGVkKGNvbnZlcnRlckNvbnRleHQpO1xuXHRcdFx0Y29uc3QgZHJhZnRSb290UGF0aCA9IE1vZGVsSGVscGVyLmdldERyYWZ0Um9vdFBhdGgob0NvbnRleHQpO1xuXHRcdFx0Y29uc3Qgc1N0aWNreVJvb3RQYXRoID0gTW9kZWxIZWxwZXIuZ2V0U3RpY2t5Um9vdFBhdGgob0NvbnRleHQpO1xuXHRcdFx0Y29uc3Qgc1BhdGggPSBkcmFmdFJvb3RQYXRoIHx8IHNTdGlja3lSb290UGF0aDtcblx0XHRcdGNvbnN0IG9JbnRlcm5hbE1vZGVsQ29udGV4dCA9IG9WaWV3LmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikgYXMgSW50ZXJuYWxNb2RlbENvbnRleHQ7XG5cdFx0XHRpZiAoc1BhdGgpIHtcblx0XHRcdFx0Y29uc3Qgb1Jvb3RDb250ZXh0ID0gb1ZpZXcuZ2V0TW9kZWwoKS5iaW5kQ29udGV4dChzUGF0aCkuZ2V0Qm91bmRDb250ZXh0KCk7XG5cdFx0XHRcdGlmICh1cGRhdGVIaWRkZW4gIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdGNvbnN0IHNIaWRkZW5FeHByZXNzaW9uID0gY29tcGlsZUV4cHJlc3Npb24oZXF1YWwoZ2V0SGlkZGVuRXhwcmVzc2lvbihjb252ZXJ0ZXJDb250ZXh0LCB1cGRhdGVIaWRkZW4pLCBmYWxzZSkpO1xuXHRcdFx0XHRcdHRoaXMudXBkYXRlRWRpdE1vZGVsQ29udGV4dChzSGlkZGVuRXhwcmVzc2lvbiwgb1ZpZXcsIG9Sb290Q29udGV4dCwgXCJyb290RWRpdFZpc2libGVcIiwgb0ludGVybmFsTW9kZWxDb250ZXh0KTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoc0VkaXRFbmFibGVCaW5kaW5nKSB7XG5cdFx0XHRcdFx0dGhpcy51cGRhdGVFZGl0TW9kZWxDb250ZXh0KHNFZGl0RW5hYmxlQmluZGluZywgb1ZpZXcsIG9Sb290Q29udGV4dCwgXCJyb290RWRpdEVuYWJsZWRcIiwgb0ludGVybmFsTW9kZWxDb250ZXh0KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fSxcblxuXHR1cGRhdGVFZGl0TW9kZWxDb250ZXh0OiBmdW5jdGlvbiAoXG5cdFx0c0JpbmRpbmdFeHByZXNzaW9uOiBzdHJpbmcgfCB1bmRlZmluZWQsXG5cdFx0b1ZpZXc6IFZpZXcsXG5cdFx0b1Jvb3RDb250ZXh0OiBDb250ZXh0LFxuXHRcdHNQcm9wZXJ0eTogc3RyaW5nLFxuXHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dDogSW50ZXJuYWxNb2RlbENvbnRleHRcblx0KTogdm9pZCB7XG5cdFx0aWYgKHNCaW5kaW5nRXhwcmVzc2lvbikge1xuXHRcdFx0Y29uc3Qgb0hpZGRlbkVsZW1lbnQgPSBuZXcgQW55RWxlbWVudCh7IGFueVRleHQ6IHNCaW5kaW5nRXhwcmVzc2lvbiB9KTtcblx0XHRcdG9IaWRkZW5FbGVtZW50LnNldEJpbmRpbmdDb250ZXh0KG51bGwpO1xuXHRcdFx0b1ZpZXcuYWRkRGVwZW5kZW50KG9IaWRkZW5FbGVtZW50KTtcblx0XHRcdG9IaWRkZW5FbGVtZW50LmdldEJpbmRpbmcoXCJhbnlUZXh0XCIpO1xuXHRcdFx0Y29uc3Qgb0NvbnRleHQgPSBvSGlkZGVuRWxlbWVudFxuXHRcdFx0XHQuZ2V0TW9kZWwoKVxuXHRcdFx0XHQ/LmJpbmRDb250ZXh0KG9Sb290Q29udGV4dC5nZXRQYXRoKCksIG9Sb290Q29udGV4dCwgeyAkJGdyb3VwSWQ6IFwiJGF1dG8uSGVyb2VzXCIgfSlcblx0XHRcdFx0Py5nZXRCb3VuZENvbnRleHQoKTtcblx0XHRcdG9IaWRkZW5FbGVtZW50LnNldEJpbmRpbmdDb250ZXh0KG9Db250ZXh0KTtcblx0XHRcdG9IaWRkZW5FbGVtZW50Py5nZXRCaW5kaW5nKFwiYW55VGV4dFwiKT8uYXR0YWNoQ2hhbmdlKChvRXZlbnQ6IEV2ZW50PHt9LCBQcm9wZXJ0eUJpbmRpbmc+KSA9PiB7XG5cdFx0XHRcdGNvbnN0IG9OZXdWYWx1ZSA9IG9FdmVudC5nZXRTb3VyY2UoKS5nZXRFeHRlcm5hbFZhbHVlKCk7XG5cdFx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShzUHJvcGVydHksIG9OZXdWYWx1ZSk7XG5cdFx0XHR9KTtcblx0XHR9XG5cdH0sXG5cblx0X3NldEFjdGlvbkVuYWJsZW1lbnRGb3JUYWJsZTogZnVuY3Rpb24gKFxuXHRcdG9TZWxlY3RlZENvbnRleHQ6IENvbnRleHQgfCB1bmRlZmluZWQsXG5cdFx0b0ludGVybmFsTW9kZWxDb250ZXh0OiBJbnRlcm5hbE1vZGVsQ29udGV4dCxcblx0XHRzQWN0aW9uOiBzdHJpbmcsXG5cdFx0c1Byb3BlcnR5OiBzdHJpbmcsXG5cdFx0YVJlcXVlc3RQcm9taXNlczogUHJvbWlzZTxfUmVxdWVzdGVkUHJvcGVydHk+W10sXG5cdFx0Zm9yQ29udGV4dE1lbnUgPSBmYWxzZVxuXHQpOiBQcm9taXNlPF9SZXF1ZXN0ZWRQcm9wZXJ0eT5bXSB7XG5cdFx0Ly8gUmV0cmlldmUgcHJldmlvdXNseSBjaGVja2VkIGNvbnRleHRzIGluIGNhc2Ugb2YgIWZvckNvbnRleHRNZW51XG5cdFx0Y29uc3Qgc0VuYWJsZW1lbnRGaWVsZE5hbWUgPSBmb3JDb250ZXh0TWVudSA/IFwiYkVuYWJsZWRGb3JDb250ZXh0TWVudVwiIDogXCJiRW5hYmxlZFwiLFxuXHRcdFx0YUFwcGxpY2FibGU6IFtDb250ZXh0IHwgdW5kZWZpbmVkXSA9IG9JbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRQcm9wZXJ0eShgZHluYW1pY0FjdGlvbnMvJHtzQWN0aW9ufS9hQXBwbGljYWJsZWApIHx8IFtdLFxuXHRcdFx0YU5vdEFwcGxpY2FibGU6IFtDb250ZXh0IHwgdW5kZWZpbmVkXSA9IG9JbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRQcm9wZXJ0eShgZHluYW1pY0FjdGlvbnMvJHtzQWN0aW9ufS9hTm90QXBwbGljYWJsZWApIHx8IFtdO1xuXHRcdGxldCBiQWN0aW9uRW5hYmxlZDogYm9vbGVhbiA9IG9JbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRQcm9wZXJ0eShgZHluYW1pY0FjdGlvbnMvJHtzQWN0aW9ufS8ke3NFbmFibGVtZW50RmllbGROYW1lfWApIHx8IGZhbHNlO1xuXG5cdFx0aWYgKCFmb3JDb250ZXh0TWVudSkge1xuXHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KGBkeW5hbWljQWN0aW9ucy8ke3NBY3Rpb259YCwge1xuXHRcdFx0XHRiRW5hYmxlZDogZmFsc2UsXG5cdFx0XHRcdGFBcHBsaWNhYmxlOiBbXSxcblx0XHRcdFx0YU5vdEFwcGxpY2FibGU6IFtdXG5cdFx0XHR9KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KGBkeW5hbWljQWN0aW9ucy8ke3NBY3Rpb259YCwge1xuXHRcdFx0XHQvLyBEbyBub3QgY2hhbmdlIGVuYWJsZWQsIGFBcHBsaWNhYmxlIGFuZCBhTm90QXBwbGljYWJsZSBwcm9wZXJ0eSBpbiBjYXNlIG9mIGNvbnRleHQgbWVudSBjYWxjdWxhdGlvblxuXHRcdFx0XHQvLyBpbiBjYXNlIG9mIGNvbnRleHQgbWVudSwgb25seSB0aGUgY2xpY2tlZCBjb250ZXh0IGdvZXMgaW50byB0aGUgcHJvY2Vzc2luZyAtIG90aGVyIHNlbGVjdGVkIGNvbnRleHRzIG11c3QgYmUga2VwdCBpbiB0aGUgbW9kZWxcblx0XHRcdFx0YkVuYWJsZWQ6IG9JbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRQcm9wZXJ0eShgZHluYW1pY0FjdGlvbnMvJHtzQWN0aW9ufS9iRW5hYmxlZGApLFxuXHRcdFx0XHRhQXBwbGljYWJsZTogb0ludGVybmFsTW9kZWxDb250ZXh0LmdldFByb3BlcnR5KGBkeW5hbWljQWN0aW9ucy8ke3NBY3Rpb259L2FBcHBsaWNhYmxlYCksXG5cdFx0XHRcdGFOb3RBcHBsaWNhYmxlOiBvSW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0UHJvcGVydHkoYGR5bmFtaWNBY3Rpb25zLyR7c0FjdGlvbn0vYU5vdEFwcGxpY2FibGVgKSxcblx0XHRcdFx0YkVuYWJsZWRGb3JDb250ZXh0TWVudTogZmFsc2UsXG5cdFx0XHRcdGFBcHBsaWNhYmxlRm9yQ29udGV4dE1lbnU6IFtdLFxuXHRcdFx0XHRhTm90QXBwbGljYWJsZUZvckNvbnRleHRNZW51OiBbXVxuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdC8vIE5vdGUgdGhhdCBub24gZHluYW1pYyBhY3Rpb25zIGFyZSBub3QgcHJvY2Vzc2VkIGhlcmUuIFRoZXkgYXJlIGVuYWJsZWQgYmVjYXVzZVxuXHRcdC8vIG9uZSBvciBtb3JlIGFyZSBzZWxlY3RlZCBhbmQgdGhlIHNlY29uZCBwYXJ0IG9mIHRoZSBjb25kaXRpb24gaW4gdGhlIHRlbXBsYXRpbmdcblx0XHQvLyBpcyB0aGVuIHVuZGVmaW5lZCBhbmQgdGh1cyB0aGUgYnV0dG9uIHRha2VzIHRoZSBkZWZhdWx0IGVuYWJsaW5nLCB3aGljaCBpcyB0cnVlIVxuXHRcdGNvbnN0IHNEeW5hbWljQWN0aW9uRW5hYmxlZFBhdGggPSBgJHtvSW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0UGF0aCgpfS9keW5hbWljQWN0aW9ucy8ke3NBY3Rpb259LyR7c0VuYWJsZW1lbnRGaWVsZE5hbWV9YDtcblxuXHRcdGlmICh0eXBlb2Ygc1Byb3BlcnR5ID09PSBcIm9iamVjdFwiICYmIHNQcm9wZXJ0eSAhPT0gbnVsbCAmJiBzUHJvcGVydHkgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0aWYgKG9TZWxlY3RlZENvbnRleHQpIHtcblx0XHRcdFx0Y29uc3Qgb0NvbnRleHREYXRhID0gb1NlbGVjdGVkQ29udGV4dC5nZXRPYmplY3QoKSBhcyBSZWNvcmQ8c3RyaW5nLCBQcmltaXRpdmVUeXBlPjtcblx0XHRcdFx0Y29uc3Qgb1RyYW5zZm9ybWVkQmluZGluZyA9IHRyYW5zZm9ybVJlY3Vyc2l2ZWx5KFxuXHRcdFx0XHRcdHNQcm9wZXJ0eSxcblx0XHRcdFx0XHRcIlBhdGhJbk1vZGVsXCIsXG5cdFx0XHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWxvb3AtZnVuY1xuXHRcdFx0XHRcdGZ1bmN0aW9uIChvQmluZGluZ0V4cHJlc3Npb246IFBhdGhJbk1vZGVsRXhwcmVzc2lvbjxQcmltaXRpdmVUeXBlPikge1xuXHRcdFx0XHRcdFx0cmV0dXJuIG9Db250ZXh0RGF0YSA/IGNvbnN0YW50KG9Db250ZXh0RGF0YVtvQmluZGluZ0V4cHJlc3Npb24ucGF0aF0pIDogY29uc3RhbnQoZmFsc2UpO1xuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0dHJ1ZVxuXHRcdFx0XHQpO1xuXHRcdFx0XHRjb25zdCBzUmVzdWx0ID0gY29tcGlsZUV4cHJlc3Npb24ob1RyYW5zZm9ybWVkQmluZGluZyk7XG5cdFx0XHRcdGJBY3Rpb25FbmFibGVkID0gYkFjdGlvbkVuYWJsZWQgfHwgc1Jlc3VsdCA9PT0gXCJ0cnVlXCI7XG5cdFx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRNb2RlbCgpLnNldFByb3BlcnR5KHNEeW5hbWljQWN0aW9uRW5hYmxlZFBhdGgsIGJBY3Rpb25FbmFibGVkKTtcblx0XHRcdFx0KHNSZXN1bHQgPT09IFwidHJ1ZVwiID8gYUFwcGxpY2FibGUgOiBhTm90QXBwbGljYWJsZSkucHVzaChvU2VsZWN0ZWRDb250ZXh0KTtcblx0XHRcdH1cblx0XHRcdENvbW1vblV0aWxzLnNldER5bmFtaWNBY3Rpb25Db250ZXh0cyhvSW50ZXJuYWxNb2RlbENvbnRleHQsIHNBY3Rpb24sIGFBcHBsaWNhYmxlLCBhTm90QXBwbGljYWJsZSwgZm9yQ29udGV4dE1lbnUpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRjb25zdCBvQ29udGV4dERhdGEgPSBvU2VsZWN0ZWRDb250ZXh0Py5nZXRPYmplY3QoKSBhcyBSZWNvcmQ8c3RyaW5nLCBQcmltaXRpdmVUeXBlPjtcblx0XHRcdGlmIChzUHJvcGVydHkgPT09IG51bGwgJiYgISFvQ29udGV4dERhdGFbYCMke3NBY3Rpb259YF0pIHtcblx0XHRcdFx0Ly9sb29rIGZvciBhY3Rpb24gYWR2ZXJ0aXNlbWVudCBpZiBwcmVzZW50IGFuZCBpdHMgdmFsdWUgaXMgbm90IG51bGxcblx0XHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LmdldE1vZGVsKCkuc2V0UHJvcGVydHkoc0R5bmFtaWNBY3Rpb25FbmFibGVkUGF0aCwgdHJ1ZSk7XG5cdFx0XHR9IGVsc2UgaWYgKG9TZWxlY3RlZENvbnRleHQgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHQvLyBDb2xsZWN0IHByb21pc2VzIHRvIHJldHJpZXZlIHNpbmdsZXRvbiBvciBub3JtYWwgcHJvcGVydHkgdmFsdWUgYXN5bmNocm9ub3VzbHlcblx0XHRcdFx0YVJlcXVlc3RQcm9taXNlcy5wdXNoKENvbW1vblV0aWxzLnJlcXVlc3RQcm9wZXJ0eShvU2VsZWN0ZWRDb250ZXh0LCBzQWN0aW9uLCBzUHJvcGVydHksIHNEeW5hbWljQWN0aW9uRW5hYmxlZFBhdGgpKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIGFSZXF1ZXN0UHJvbWlzZXM7XG5cdH0sXG5cblx0LyoqXG5cdCAqIENoZWNrIGlmIGFjdGlvbiBpcyBjcml0aWNhbC5cblx0ICogQHBhcmFtIG1ldGFNb2RlbCBNZXRhTW9kZWxcblx0ICogQHBhcmFtIHBhdGggUGF0aCB0byB0aGUgYWN0aW9uXG5cdCAqIEBwYXJhbSBjb250ZXh0cyBDb250ZXh0cyBpbiBjYXNlIG9mIGJvdW5kIGFjdGlvbnMuXG5cdCAqIEByZXR1cm5zIEJvb2xlYW4gaW5kaWNhdGluZyBhY3Rpb24gaXMgY3JpdGljYWxcblx0ICovXG5cdGdldElzQWN0aW9uQ3JpdGljYWw6IGFzeW5jIGZ1bmN0aW9uIChtZXRhTW9kZWw6IE9EYXRhTWV0YU1vZGVsLCBwYXRoOiBzdHJpbmcsIGNvbnRleHRzOiBDb250ZXh0W10gPSBbXSk6IFByb21pc2U8Ym9vbGVhbj4ge1xuXHRcdC8vIGRlZmF1bHQgaXMgdHJ1ZS5cblx0XHRsZXQgaXNBY3Rpb25Dcml0aWNhbFZhbHVlOiBib29sZWFuIHwgUHJvbWlzZTxib29sZWFuPiA9IHRydWU7XG5cdFx0Y29uc3QgY29udmVydGVkVHlwZXMgPSBjb252ZXJ0VHlwZXMobWV0YU1vZGVsKTtcblx0XHRjb25zdCBhY3Rpb25UYXJnZXRSZXNvbHV0aW9uID0gY29udmVydGVkVHlwZXMucmVzb2x2ZVBhdGg8RWRtQWN0aW9uPihwYXRoKTtcblx0XHRjb25zdCBhY3Rpb25UYXJnZXQgPSBhY3Rpb25UYXJnZXRSZXNvbHV0aW9uLnRhcmdldDtcblx0XHRpZiAoIWFjdGlvblRhcmdldCkge1xuXHRcdFx0cmV0dXJuIGlzQWN0aW9uQ3JpdGljYWxWYWx1ZTtcblx0XHR9XG5cblx0XHRjb25zdCBpc0FjdGlvbkNyaXRpY2FsQmluZGluZ0V4cCA9IGdldElzQWN0aW9uQ3JpdGljYWxFeHByZXNzaW9uKGFjdGlvblRhcmdldCwgY29udmVydGVkVHlwZXMpO1xuXG5cdFx0aWYgKGlzQ29uc3RhbnQoaXNBY3Rpb25Dcml0aWNhbEJpbmRpbmdFeHApKSB7XG5cdFx0XHQvLyBDb25zdGFudCBleHByZXNzaW9uIHJlc29sdmVzIHRvIFwidHJ1ZVwiIG9yIFwiZmFsc2VcIi4gQnV0LCB3ZSBuZWVkIGJvb2xlYW4uXG5cdFx0XHRpc0FjdGlvbkNyaXRpY2FsVmFsdWUgPSBjb21waWxlQ29uc3RhbnQoaXNBY3Rpb25Dcml0aWNhbEJpbmRpbmdFeHAsIGZhbHNlLCB1bmRlZmluZWQsIHRydWUpIGFzIGJvb2xlYW47XG5cdFx0fSBlbHNlIGlmIChjb250ZXh0cy5sZW5ndGggPiAwKSB7XG5cdFx0XHQvLyBXZSBldmFsdWF0ZSB0aGUgdmFsdWUgb2YgdGhlIGV4cHJlc3Npb24gdmlhIGEgVUk1IG1hbmFnZWQgb2JqZWN0IGluc3RhbmNlLlxuXHRcdFx0aXNBY3Rpb25Dcml0aWNhbFZhbHVlID0gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcblx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHQvLyBDcmVhdGluZyBCaW5kaW5nIHRvIHJlc29sdmVcblx0XHRcdFx0XHRjb25zdCBhbnlPYmplY3QgPSBuZXcgQW55KHsgYW55Qm9vbGVhbjogY29tcGlsZUV4cHJlc3Npb24oaXNBY3Rpb25Dcml0aWNhbEJpbmRpbmdFeHApIH0pO1xuXHRcdFx0XHRcdGFueU9iamVjdC5zZXRNb2RlbChjb250ZXh0c1swXS5nZXRNb2RlbCgpKTtcblxuXHRcdFx0XHRcdC8vIEF0dGFjaGluZyBjaGFuZ2UgZXZlbnRzXG5cdFx0XHRcdFx0Y29uc3QgYm9vbGVhbkJpbmRpbmcgPSBhbnlPYmplY3QuZ2V0QmluZGluZyhcImFueUJvb2xlYW5cIikgYXMgUHJvcGVydHlCaW5kaW5nO1xuXHRcdFx0XHRcdGNvbnN0IGZuQ2hhbmdlID0gZnVuY3Rpb24gKCk6IHZvaWQge1xuXHRcdFx0XHRcdFx0Y29uc3QgdmFsdWVFeHQgPSBib29sZWFuQmluZGluZy5nZXRFeHRlcm5hbFZhbHVlKCk7XG5cdFx0XHRcdFx0XHRhbnlPYmplY3QuZGVzdHJveSgpO1xuXHRcdFx0XHRcdFx0cmVzb2x2ZSh2YWx1ZUV4dCk7XG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRib29sZWFuQmluZGluZy5hdHRhY2hFdmVudE9uY2UoXCJjaGFuZ2VcIiwgZm5DaGFuZ2UpO1xuXG5cdFx0XHRcdFx0Ly8gc2V0dGluZyBiaW5kaW5nIGNvbnRleHQgdG8gdHJpZ2dlciB0aGUgYmluZGluZyByZXNvbHV0aW9uXG5cdFx0XHRcdFx0YW55T2JqZWN0LnNldEJpbmRpbmdDb250ZXh0KGNvbnRleHRzWzBdKTtcblx0XHRcdFx0fSBjYXRjaCAoZXJyOiB1bmtub3duKSB7XG5cdFx0XHRcdFx0Ly8gZXJyb3Igd2hpbGUgY3JlYXRpbmcgb3IgcmVzb2x2aW5nIHRoZSBiaW5kaW5nXG5cdFx0XHRcdFx0Y29uc3QgbWVzc2FnZSA9IGVyciBpbnN0YW5jZW9mIEVycm9yID8gZXJyLm1lc3NhZ2UgOiBTdHJpbmcoZXJyKTtcblx0XHRcdFx0XHRMb2cuZXJyb3IoYEZFIDogQWN0aW9ucyA6IEVycm9yIHdoaWxlIHJlc29sdmluZyBJc0FjdGlvbkNyaXRpY2FsIGZvciAke3BhdGh9IDogJHttZXNzYWdlfWApO1xuXHRcdFx0XHRcdC8vIE9uIHRoZSBzYWZlIHNpZGUsIHdlIHNoYWxsIHJldHVybiBhY3Rpb24gaXMgY3JpdGljYWwgaWYgdmFsdWUgY291bGRuJ3QgYmUgZGV0ZXJtaW5lZC5cblx0XHRcdFx0XHRyZXNvbHZlKHRydWUpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9XG5cblx0XHRyZXR1cm4gaXNBY3Rpb25Dcml0aWNhbFZhbHVlO1xuXHR9XG59O1xuZXhwb3J0IGRlZmF1bHQgQWN0aW9uUnVudGltZTtc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
@@ -225,7 +225,7 @@ const ActionRuntime = {
225
225
 
226
226
  updateEditButtonVisibilityAndEnablement(oView: FEView): void {
227
227
  const iViewLevel = (oView.getViewData() as BaseManifestSettings)?.viewLevel,
228
- isEditable = oView.getModel("ui")?.getProperty("/isEditable");
228
+ isEditable = CommonUtils.getIsEditable(oView);
229
229
  if ((iViewLevel as number) > 1 && isEditable !== true) {
230
230
  const oContext = oView.getBindingContext();
231
231
  const oAppComponent = CommonUtils.getAppComponent(oView);