@sapui5/sap.fe.macros 1.141.0 → 1.142.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (217) hide show
  1. package/package.json +1 -1
  2. package/src/sap/fe/macros/.library +1 -1
  3. package/src/sap/fe/macros/Breadcrumbs.js +4 -10
  4. package/src/sap/fe/macros/Breadcrumbs.tsx +2 -8
  5. package/src/sap/fe/macros/Chart.js +34 -23
  6. package/src/sap/fe/macros/Chart.tsx +25 -11
  7. package/src/sap/fe/macros/CollaborativeDraftHandler.js +48 -31
  8. package/src/sap/fe/macros/CollaborativeDraftHandler.tsx +51 -26
  9. package/src/sap/fe/macros/CollectionBindingInfo.js +8 -2
  10. package/src/sap/fe/macros/CollectionBindingInfo.ts +11 -6
  11. package/src/sap/fe/macros/CommonHelper.js +14 -24
  12. package/src/sap/fe/macros/CommonHelper.ts +18 -25
  13. package/src/sap/fe/macros/Field.js +30 -13
  14. package/src/sap/fe/macros/Field.ts +60 -30
  15. package/src/sap/fe/macros/FooterContent.js +5 -2
  16. package/src/sap/fe/macros/FooterContent.tsx +6 -3
  17. package/src/sap/fe/macros/KPITag.js +1 -1
  18. package/src/sap/fe/macros/KPITag.tsx +3 -1
  19. package/src/sap/fe/macros/MacroAPI.js +3 -2
  20. package/src/sap/fe/macros/MacroAPI.ts +2 -2
  21. package/src/sap/fe/macros/MessageButton.js +3 -2
  22. package/src/sap/fe/macros/MessageButton.tsx +5 -2
  23. package/src/sap/fe/macros/MicroChart.js +10 -6
  24. package/src/sap/fe/macros/MicroChart.tsx +8 -2
  25. package/src/sap/fe/macros/MultiValueField.js +22 -36
  26. package/src/sap/fe/macros/MultiValueField.tsx +34 -66
  27. package/src/sap/fe/macros/RichTextEditor.js +3 -4
  28. package/src/sap/fe/macros/RichTextEditor.tsx +2 -3
  29. package/src/sap/fe/macros/Status.js +35 -8
  30. package/src/sap/fe/macros/Status.tsx +23 -2
  31. package/src/sap/fe/macros/ValueHelp.js +5 -2
  32. package/src/sap/fe/macros/ValueHelp.tsx +5 -0
  33. package/src/sap/fe/macros/ai/EasyFilterBar.js +7 -34
  34. package/src/sap/fe/macros/ai/EasyFilterBar.tsx +6 -35
  35. package/src/sap/fe/macros/ai/EasyFilterDataFetcher.js +31 -7
  36. package/src/sap/fe/macros/ai/EasyFilterDataFetcher.ts +33 -6
  37. package/src/sap/fe/macros/chart/Action.js +25 -2
  38. package/src/sap/fe/macros/chart/Action.ts +13 -0
  39. package/src/sap/fe/macros/chart/ActionGroup.js +25 -2
  40. package/src/sap/fe/macros/chart/ActionGroup.ts +13 -0
  41. package/src/sap/fe/macros/chart/ChartDelegate.js +8 -8
  42. package/src/sap/fe/macros/chart/ChartDelegate.ts +17 -12
  43. package/src/sap/fe/macros/chart/MdcChartTemplate.js +54 -11
  44. package/src/sap/fe/macros/chart/MdcChartTemplate.tsx +70 -11
  45. package/src/sap/fe/macros/chart/OverflowGroup.js +62 -0
  46. package/src/sap/fe/macros/chart/OverflowGroup.ts +22 -0
  47. package/src/sap/fe/macros/controls/FilterBar.js +39 -3
  48. package/src/sap/fe/macros/controls/FilterBar.ts +42 -1
  49. package/src/sap/fe/macros/controls/RadioButtons.js +18 -5
  50. package/src/sap/fe/macros/controls/RadioButtons.tsx +10 -1
  51. package/src/sap/fe/macros/coreUI/CreateDialog.js +2 -2
  52. package/src/sap/fe/macros/coreUI/CreateDialog.tsx +1 -1
  53. package/src/sap/fe/macros/coreUI/OperationParameterDialog.js +37 -9
  54. package/src/sap/fe/macros/coreUI/OperationParameterDialog.tsx +45 -6
  55. package/src/sap/fe/macros/draftIndicator/DraftIndicator.js +4 -2
  56. package/src/sap/fe/macros/draftIndicator/DraftIndicator.tsx +3 -1
  57. package/src/sap/fe/macros/field/FieldFormatOptions.js +3 -3
  58. package/src/sap/fe/macros/field/FieldFormatOptions.ts +1 -1
  59. package/src/sap/fe/macros/field/FieldHelper.js +4 -3
  60. package/src/sap/fe/macros/field/FieldHelper.ts +7 -1
  61. package/src/sap/fe/macros/field/FieldRuntime.js +38 -8
  62. package/src/sap/fe/macros/field/FieldRuntime.ts +65 -7
  63. package/src/sap/fe/macros/field/FieldRuntimeHelper.js +3 -34
  64. package/src/sap/fe/macros/field/FieldRuntimeHelper.ts +28 -53
  65. package/src/sap/fe/macros/field/FieldTemplating.js +5 -4
  66. package/src/sap/fe/macros/field/FieldTemplating.ts +6 -4
  67. package/src/sap/fe/macros/filter/FilterFieldHelper.js +6 -4
  68. package/src/sap/fe/macros/filter/FilterFieldHelper.ts +7 -2
  69. package/src/sap/fe/macros/filter/FilterUtils.js +100 -36
  70. package/src/sap/fe/macros/filter/FilterUtils.ts +127 -39
  71. package/src/sap/fe/macros/filterBar/ExtendedSemanticDateOperators.js +2 -2
  72. package/src/sap/fe/macros/filterBar/ExtendedSemanticDateOperators.ts +1 -1
  73. package/src/sap/fe/macros/filterBar/FilterBar.block.js +4 -3
  74. package/src/sap/fe/macros/filterBar/FilterBar.block.tsx +19 -8
  75. package/src/sap/fe/macros/filterBar/FilterBarAPI.js +10 -7
  76. package/src/sap/fe/macros/filterBar/FilterBarAPI.ts +31 -16
  77. package/src/sap/fe/macros/filterBar/FilterBarDelegate.js +4 -3
  78. package/src/sap/fe/macros/filterBar/FilterBarDelegate.ts +5 -2
  79. package/src/sap/fe/macros/filterBar/mixin/FilterBarAPIStateHandler.js +4 -3
  80. package/src/sap/fe/macros/filterBar/mixin/FilterBarAPIStateHandler.ts +3 -2
  81. package/src/sap/fe/macros/form/Form.block.js +27 -2
  82. package/src/sap/fe/macros/form/Form.block.ts +31 -11
  83. package/src/sap/fe/macros/form/FormActionButtons.fragment.xml +13 -3
  84. package/src/sap/fe/macros/form/FormContainer.block.js +96 -65
  85. package/src/sap/fe/macros/form/FormContainer.block.ts +104 -65
  86. package/src/sap/fe/macros/formatters/TableFormatter.js +13 -10
  87. package/src/sap/fe/macros/formatters/TableFormatter.ts +11 -9
  88. package/src/sap/fe/macros/formatters/VisualFilterFormatter.js +6 -4
  89. package/src/sap/fe/macros/formatters/VisualFilterFormatter.ts +5 -5
  90. package/src/sap/fe/macros/inlineEdit/InlineEdit.js +5 -5
  91. package/src/sap/fe/macros/inlineEdit/InlineEdit.ts +4 -4
  92. package/src/sap/fe/macros/insights/InsightsService.js +3 -2
  93. package/src/sap/fe/macros/insights/InsightsService.ts +2 -1
  94. package/src/sap/fe/macros/internal/DataPoint.js +7 -8
  95. package/src/sap/fe/macros/internal/DataPoint.tsx +6 -9
  96. package/src/sap/fe/macros/internal/field/DisplayStyle.js +8 -6
  97. package/src/sap/fe/macros/internal/field/DisplayStyle.tsx +7 -8
  98. package/src/sap/fe/macros/internal/field/EditStyle.js +9 -20
  99. package/src/sap/fe/macros/internal/field/EditStyle.tsx +17 -41
  100. package/src/sap/fe/macros/internal/field/FieldBlockStructure.js +2 -2
  101. package/src/sap/fe/macros/internal/field/FieldBlockStructure.tsx +1 -1
  102. package/src/sap/fe/macros/internal/field/FieldStructure.js +1 -2
  103. package/src/sap/fe/macros/internal/field/FieldStructure.tsx +0 -2
  104. package/src/sap/fe/macros/internal/field/FieldStructureHelper.js +7 -7
  105. package/src/sap/fe/macros/internal/field/FieldStructureHelper.ts +17 -11
  106. package/src/sap/fe/macros/internal/helpers/DataPointTemplating.js +6 -2
  107. package/src/sap/fe/macros/internal/helpers/DataPointTemplating.ts +5 -1
  108. package/src/sap/fe/macros/internal/valuehelp/AdditionalValueFormatter.js +9 -6
  109. package/src/sap/fe/macros/internal/valuehelp/AdditionalValueFormatter.ts +7 -5
  110. package/src/sap/fe/macros/internal/valuehelp/TableDelegate.js +4 -4
  111. package/src/sap/fe/macros/internal/valuehelp/TableDelegate.ts +6 -6
  112. package/src/sap/fe/macros/internal/valuehelp/ValueListDialogTable.fragment.xml +5 -2
  113. package/src/sap/fe/macros/library.js +3 -3
  114. package/src/sap/fe/macros/library.ts +2 -0
  115. package/src/sap/fe/macros/mdc/adapter/StateHelper.js +15 -5
  116. package/src/sap/fe/macros/mdc/adapter/StateHelper.ts +21 -5
  117. package/src/sap/fe/macros/messagebundle.properties +7 -5
  118. package/src/sap/fe/macros/messagebundle_ar.properties +12 -3
  119. package/src/sap/fe/macros/messagebundle_bg.properties +13 -4
  120. package/src/sap/fe/macros/messagebundle_ca.properties +12 -3
  121. package/src/sap/fe/macros/messagebundle_cnr.properties +12 -3
  122. package/src/sap/fe/macros/messagebundle_cs.properties +11 -2
  123. package/src/sap/fe/macros/messagebundle_cy.properties +12 -3
  124. package/src/sap/fe/macros/messagebundle_da.properties +12 -3
  125. package/src/sap/fe/macros/messagebundle_de.properties +16 -7
  126. package/src/sap/fe/macros/messagebundle_el.properties +13 -4
  127. package/src/sap/fe/macros/messagebundle_en.properties +13 -4
  128. package/src/sap/fe/macros/messagebundle_en_GB.properties +13 -4
  129. package/src/sap/fe/macros/messagebundle_en_US_saprigi.properties +12 -3
  130. package/src/sap/fe/macros/messagebundle_es.properties +12 -3
  131. package/src/sap/fe/macros/messagebundle_es_MX.properties +12 -3
  132. package/src/sap/fe/macros/messagebundle_et.properties +12 -3
  133. package/src/sap/fe/macros/messagebundle_fi.properties +12 -3
  134. package/src/sap/fe/macros/messagebundle_fr.properties +12 -3
  135. package/src/sap/fe/macros/messagebundle_fr_CA.properties +12 -3
  136. package/src/sap/fe/macros/messagebundle_hi.properties +12 -3
  137. package/src/sap/fe/macros/messagebundle_hr.properties +13 -4
  138. package/src/sap/fe/macros/messagebundle_hu.properties +12 -3
  139. package/src/sap/fe/macros/messagebundle_id.properties +18 -9
  140. package/src/sap/fe/macros/messagebundle_it.properties +12 -3
  141. package/src/sap/fe/macros/messagebundle_iw.properties +12 -3
  142. package/src/sap/fe/macros/messagebundle_ja.properties +12 -3
  143. package/src/sap/fe/macros/messagebundle_kk.properties +11 -2
  144. package/src/sap/fe/macros/messagebundle_ko.properties +13 -4
  145. package/src/sap/fe/macros/messagebundle_lt.properties +12 -3
  146. package/src/sap/fe/macros/messagebundle_lv.properties +12 -3
  147. package/src/sap/fe/macros/messagebundle_mk.properties +12 -3
  148. package/src/sap/fe/macros/messagebundle_ms.properties +12 -3
  149. package/src/sap/fe/macros/messagebundle_nl.properties +12 -3
  150. package/src/sap/fe/macros/messagebundle_no.properties +12 -3
  151. package/src/sap/fe/macros/messagebundle_pl.properties +12 -3
  152. package/src/sap/fe/macros/messagebundle_pt.properties +12 -3
  153. package/src/sap/fe/macros/messagebundle_pt_PT.properties +12 -3
  154. package/src/sap/fe/macros/messagebundle_ro.properties +13 -4
  155. package/src/sap/fe/macros/messagebundle_ru.properties +12 -3
  156. package/src/sap/fe/macros/messagebundle_sh.properties +12 -3
  157. package/src/sap/fe/macros/messagebundle_sk.properties +12 -3
  158. package/src/sap/fe/macros/messagebundle_sl.properties +13 -4
  159. package/src/sap/fe/macros/messagebundle_sr.properties +12 -3
  160. package/src/sap/fe/macros/messagebundle_sv.properties +12 -3
  161. package/src/sap/fe/macros/messagebundle_th.properties +11 -2
  162. package/src/sap/fe/macros/messagebundle_tr.properties +12 -3
  163. package/src/sap/fe/macros/messagebundle_uk.properties +12 -3
  164. package/src/sap/fe/macros/messagebundle_vi.properties +13 -4
  165. package/src/sap/fe/macros/messagebundle_zh_CN.properties +12 -3
  166. package/src/sap/fe/macros/messagebundle_zh_TW.properties +12 -3
  167. package/src/sap/fe/macros/richtexteditor/ButtonGroup.js +2 -2
  168. package/src/sap/fe/macros/richtexteditor/ButtonGroup.ts +2 -2
  169. package/src/sap/fe/macros/table/Action.js +15 -2
  170. package/src/sap/fe/macros/table/Action.ts +11 -1
  171. package/src/sap/fe/macros/table/ActionGroup.js +15 -2
  172. package/src/sap/fe/macros/table/ActionGroup.ts +8 -0
  173. package/src/sap/fe/macros/table/ActionGroupOverride.js +14 -2
  174. package/src/sap/fe/macros/table/ActionGroupOverride.ts +7 -0
  175. package/src/sap/fe/macros/table/ActionOverride.js +14 -2
  176. package/src/sap/fe/macros/table/ActionOverride.ts +7 -0
  177. package/src/sap/fe/macros/table/ActionsTemplating.js +16 -2
  178. package/src/sap/fe/macros/table/ActionsTemplating.tsx +15 -0
  179. package/src/sap/fe/macros/table/MdcTableTemplate.js +91 -10
  180. package/src/sap/fe/macros/table/MdcTableTemplate.tsx +131 -10
  181. package/src/sap/fe/macros/table/OverflowGroups.js +59 -0
  182. package/src/sap/fe/macros/table/OverflowGroups.ts +27 -0
  183. package/src/sap/fe/macros/table/Table.block.js +70 -29
  184. package/src/sap/fe/macros/table/Table.block.tsx +65 -12
  185. package/src/sap/fe/macros/table/TableAPI.js +169 -131
  186. package/src/sap/fe/macros/table/TableAPI.ts +58 -28
  187. package/src/sap/fe/macros/table/TableDefinition.js +19 -2
  188. package/src/sap/fe/macros/table/TableDefinition.ts +17 -1
  189. package/src/sap/fe/macros/table/TableEventHandlerProvider.js +4 -3
  190. package/src/sap/fe/macros/table/TableEventHandlerProvider.ts +8 -9
  191. package/src/sap/fe/macros/table/TableHelper.js +5 -2
  192. package/src/sap/fe/macros/table/TableHelper.ts +5 -2
  193. package/src/sap/fe/macros/table/TableRuntime.js +2 -2
  194. package/src/sap/fe/macros/table/TableRuntime.ts +4 -6
  195. package/src/sap/fe/macros/table/TableSizeHelper.js +4 -4
  196. package/src/sap/fe/macros/table/TableSizeHelper.ts +6 -11
  197. package/src/sap/fe/macros/table/delegates/TableDelegate.js +67 -26
  198. package/src/sap/fe/macros/table/delegates/TableDelegate.ts +108 -118
  199. package/src/sap/fe/macros/table/massEdit/MassEditDialogHelper.js +2 -2
  200. package/src/sap/fe/macros/table/massEdit/MassEditDialogHelper.tsx +1 -1
  201. package/src/sap/fe/macros/table/massEdit/MassEditField.js +1 -1
  202. package/src/sap/fe/macros/table/massEdit/MassEditField.tsx +3 -6
  203. package/src/sap/fe/macros/table/mixin/EmptyRowsHandler.js +6 -5
  204. package/src/sap/fe/macros/table/mixin/EmptyRowsHandler.ts +10 -4
  205. package/src/sap/fe/macros/table/mixin/TableAPIStateHandler.js +7 -9
  206. package/src/sap/fe/macros/table/mixin/TableAPIStateHandler.ts +7 -8
  207. package/src/sap/fe/macros/table/mixin/TableExport.js +1 -1
  208. package/src/sap/fe/macros/table/mixin/TableExport.ts +3 -3
  209. package/src/sap/fe/macros/visualfilters/InteractiveChartHelper.js +4 -4
  210. package/src/sap/fe/macros/visualfilters/InteractiveChartHelper.ts +3 -3
  211. package/src/sap/fe/macros/visualfilters/VisualFilter.js +20 -2
  212. package/src/sap/fe/macros/visualfilters/VisualFilter.tsx +28 -6
  213. package/src/sap/fe/macros/visualfilters/VisualFilterRuntime.js +6 -3
  214. package/src/sap/fe/macros/visualfilters/VisualFilterRuntime.ts +4 -3
  215. package/src/sap/fe/macros/visualfilters/fragments/InteractiveCharts.js +3 -3
  216. package/src/sap/fe/macros/visualfilters/fragments/InteractiveCharts.tsx +10 -4
  217. package/src/sap/fe/macros/visualfilters/fragments/InteractiveDonutChart.fragment.xml +1 -1
@@ -44,6 +44,9 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/CommonUtils", "sap/fe/core/controlle
44
44
  // we start by asking to recreate an empty row (if live change has already done it this won't have any effect)
45
45
  // but we do not wait
46
46
  this.createEmptyRows(activateEvent.getSource(), this.getContent(), true);
47
+ const table = this.getContent();
48
+ const appComponent = CommonUtils.getAppComponent(table);
49
+ const binding = table.getRowBinding();
47
50
  if (!this.validateEmptyRow(activatedContext)) {
48
51
  activateEvent.preventDefault();
49
52
  return;
@@ -54,7 +57,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/CommonUtils", "sap/fe/core/controlle
54
57
  controller = view.getController(),
55
58
  editFlow = controller.editFlow;
56
59
  try {
57
- await (activatedContext.created() ?? Promise.resolve());
60
+ await Promise.all([appComponent.getSideEffectsService().requestSideEffectsForNavigationProperty(binding.getPath(), view.getBindingContext()), activatedContext.created?.() ?? Promise.resolve()]);
58
61
  await editFlow.onAfterCreate({
59
62
  context: activatedContext
60
63
  });
@@ -318,8 +321,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/CommonUtils", "sap/fe/core/controlle
318
321
  inactive = true,
319
322
  view = CommonUtils.getTargetView(table),
320
323
  controller = view.getController(),
321
- editFlow = controller.editFlow,
322
- appComponent = CommonUtils.getAppComponent(table);
324
+ editFlow = controller.editFlow;
323
325
  this.creatingEmptyRows = true;
324
326
  try {
325
327
  const dataForCreate = recreateOneRow ? [{}] : data;
@@ -328,7 +330,6 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/CommonUtils", "sap/fe/core/controlle
328
330
  dataForCreate,
329
331
  // When editing an empty row, the new empty row is to be created just below and not above
330
332
  recreateOneRow || forceCreateatEnd ? true : atEnd, false, controller.editFlow.onBeforeCreate, inactive, undefined, defaultValueFunctionData);
331
- appComponent.getSideEffectsService().requestSideEffectsForNavigationProperty(binding.getPath(), view.getBindingContext());
332
333
  contexts?.forEach(async function (context) {
333
334
  try {
334
335
  await context.created();
@@ -350,4 +351,4 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/CommonUtils", "sap/fe/core/controlle
350
351
  _exports = EmptyRowsHandler;
351
352
  return _exports;
352
353
  }, false);
353
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJFbXB0eVJvd3NIYW5kbGVyIiwiX2V4cG9ydHMiLCJfcHJvdG8iLCJwcm90b3R5cGUiLCJzZXR1cE1peGluIiwiX2Jhc2VDbGFzcyIsIl9vbkZpZWxkTGl2ZUNoYW5nZSIsInVpNUV2ZW50IiwiZmllbGQiLCJnZXRTb3VyY2UiLCJiaW5kaW5nQ29udGV4dCIsImdldEJpbmRpbmdDb250ZXh0IiwiYmluZGluZyIsImdldEJpbmRpbmciLCJpc0luYWN0aXZlIiwidGFibGUiLCJnZXRDb250ZW50IiwiY3JlYXRlRW1wdHlSb3dzIiwiX2hhbmRsZUNyZWF0ZUFjdGl2YXRlIiwiYWN0aXZhdGVFdmVudCIsImFjdGl2YXRlZENvbnRleHQiLCJnZXRQYXJhbWV0ZXIiLCJ2YWxpZGF0ZUVtcHR5Um93IiwicHJldmVudERlZmF1bHQiLCJ0cmFuc2llbnRQYXRoIiwiZ2V0UGF0aCIsInZpZXciLCJDb21tb25VdGlscyIsImdldFRhcmdldFZpZXciLCJjb250cm9sbGVyIiwiZ2V0Q29udHJvbGxlciIsImVkaXRGbG93IiwiY3JlYXRlZCIsIlByb21pc2UiLCJyZXNvbHZlIiwib25BZnRlckNyZWF0ZSIsImNvbnRleHQiLCJlIiwiTG9nIiwid2FybmluZyIsImNvbnRlbnQiLCJjb2xsYWJvcmF0aXZlRHJhZnQiLCJzZW5kIiwiYWN0aW9uIiwiQWN0aXZpdHkiLCJDcmVhdGUiLCJ1cGRhdGVMb2Nrc0ZvckNvbnRleHRQYXRoIiwiZXJyb3IiLCJnZXREZWZhdWx0VmFsdWVzRnVuY3Rpb24iLCJsaXN0QmluZGluZyIsIm1vZGVsIiwiZ2V0TW9kZWwiLCJtZXRhTW9kZWwiLCJnZXRNZXRhTW9kZWwiLCJtZXRhQ29udGV4dCIsImdldE1ldGFDb250ZXh0IiwiZ2V0UmVzb2x2ZWRQYXRoIiwibGlzdEJpbmRpbmdPYmplY3RQYXRoIiwiZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzIiwiZGVmYXVsdEZ1bmNPblRhcmdldE9iamVjdCIsInRhcmdldE9iamVjdCIsImFubm90YXRpb25zIiwiQ29tbW9uIiwiRGVmYXVsdFZhbHVlc0Z1bmN0aW9uIiwiZGVmYXVsdEZ1bmNPblRhcmdldEVudGl0eVNldCIsInRhcmdldEVudGl0eVNldCIsInNldEVtcHR5Um93c0VuYWJsZWQiLCJlbmFibGVtZW50Iiwic2V0UHJvcGVydHkiLCJuYXZpZ2F0aW9uUGF0aCIsImRhdGEiLCJhcHBDb21wb25lbnQiLCJnZXRBcHBDb21wb25lbnQiLCJnZXRSb3dCaW5kaW5nIiwiZGVmYXVsdFZhbHVlc0Z1bmN0aW9uIiwidW5kZWZpbmVkIiwiZ2V0U2lkZUVmZmVjdHNTZXJ2aWNlIiwicmVnaXN0ZXJUYXJnZXRDYWxsYmFjayIsInVwZGF0ZUVtcHR5Um93cyIsImJpbmQiLCJkZXJlZ2lzdGVyVGFyZ2V0Q2FsbGJhY2siLCJ0YWJsZURlZmF1bHRzUHJvbWlzZSIsInRoZW4iLCJ0YWJsZURlZmF1bHREYXRhIiwic2V0VXBFbXB0eVJvd3MiLCJjYXRjaCIsImJpbmRpbmdIZWFkZXJDb250ZXh0IiwiZ2V0SGVhZGVyQ29udGV4dCIsImlzUmVzb2x2ZWQiLCJpc0xlbmd0aEZpbmFsIiwiY29udGV4dFBhdGgiLCJfZGVsZXRlRW1wdHlSb3dzIiwiX3ZhbGlkYXRlQW5kUmV0cmlldmVCaW5kaW5nIiwiZ2V0VGFibGVEZWZpbml0aW9uIiwiY29udHJvbCIsImNyZWF0aW9uTW9kZSIsIkNyZWF0aW9uTW9kZSIsIklubGluZUNyZWF0aW9uUm93cyIsInVpTW9kZWwiLCJnZXRQcm9wZXJ0eSIsIndhdGNoQmluZGluZyIsImJpbmRQcm9wZXJ0eSIsImZuSGFuZGxlciIsImRldGFjaENoYW5nZSIsImRlc3Ryb3kiLCJhdHRhY2hDaGFuZ2UiLCJnZXRUYWJsZURlZmF1bHRzIiwiVHJhbnNhY3Rpb25IZWxwZXIiLCJnZXREYXRhRnJvbURlZmF1bHRWYWx1ZUZ1bmN0aW9uIiwiY3JlYXRlQnV0dG9uV2FzUHJlc3NlZCIsImFyZ3VtZW50cyIsImxlbmd0aCIsImVtcHR5Um93c0VuYWJsZWQiLCJyZW1vdmVFbXB0eVJvd3NNZXNzYWdlcyIsImdldElzRWRpdGFibGUiLCJpbmxpbmVDcmVhdGlvblJvd3NIaWRkZW5JbkVkaXRNb2RlIiwiaW5hY3RpdmVDb250ZXh0IiwiZ2V0QWxsQ3VycmVudENvbnRleHRzIiwiZmluZCIsInN0YXJ0c1dpdGgiLCJkZWxldGUiLCJnZXRJbmFjdGl2ZUNvbnRleHROdW1iZXIiLCJmaWx0ZXIiLCJyZXF1aXJlZFByb3BlcnRpZXMiLCJhbm5vdGF0aW9uIiwibWlzc2luZ1Byb3BlcnRpZXMiLCJyZXF1aXJlZFByb3BlcnR5IiwiZ2V0T2JqZWN0IiwicmVzb3VyY2VCdW5kbGUiLCJMaWJyYXJ5IiwiZ2V0UmVzb3VyY2VCdW5kbGVGb3IiLCJtZXNzYWdlcyIsImRpc3BsYXllZENvbHVtbiIsIm1pc3NpbmdQcm9wZXJ0eSIsImVycm9yTWVzc2FnZSIsIm1pc3NpbmdDb2x1bW4iLCJjb2x1bW5zIiwidGFibGVDb2x1bW4iLCJyZWxhdGl2ZVBhdGgiLCJwcm9wZXJ0eUluZm9zIiwiaW5jbHVkZXMiLCJnZXRUZXh0IiwiZ2V0Q29sdW1ucyIsIm1kY0NvbHVtbiIsImdldFByb3BlcnR5S2V5IiwibmFtZSIsImdldEhlYWRlciIsImxhYmVsIiwicHVzaCIsIk1lc3NhZ2UiLCJtZXNzYWdlIiwicHJvY2Vzc29yIiwidHlwZSIsIk1lc3NhZ2VUeXBlIiwiRXJyb3IiLCJ0ZWNobmljYWwiLCJwZXJzaXN0ZW50IiwidGVjaG5pY2FsRGV0YWlscyIsInRhYmxlSWQiLCJnZXRJZCIsImVtcHR5Um93TWVzc2FnZSIsInRhcmdldCIsIk1lc3NhZ2luZyIsImFkZE1lc3NhZ2VzIiwiaW5hY3RpdmVDb250ZXh0cyIsInJlbW92ZU1lc3NhZ2VzIiwiZ2V0TWVzc2FnZU1vZGVsIiwiZ2V0RGF0YSIsIm1zZyIsImdldFRlY2huaWNhbERldGFpbHMiLCJjb250ZXh0TWF0Y2hlcyIsIkFycmF5IiwiaXNBcnJheSIsInNvbWUiLCJnZXRUYXJnZXRzIiwidmFsdWUiLCJyZWNyZWF0ZU9uZVJvdyIsIm5ld0lubGluZUNyZWF0aW9uUm93RnJvbVBhc3RlIiwiZm9yY2VDcmVhdGVhdEVuZCIsImRlZmF1bHRWYWx1ZUZ1bmN0aW9uRGF0YSIsImlubGluZUNyZWF0aW9uUm93Q291bnQiLCJjcmVhdGluZ0VtcHR5Um93cyIsImZyb20iLCJhdEVuZCIsImluYWN0aXZlIiwiZGF0YUZvckNyZWF0ZSIsImNvbnRleHRzIiwiY3JlYXRlTXVsdGlwbGVEb2N1bWVudHMiLCJvbkJlZm9yZUNyZWF0ZSIsInJlcXVlc3RTaWRlRWZmZWN0c0Zvck5hdmlnYXRpb25Qcm9wZXJ0eSIsImZvckVhY2giLCJjYW5jZWxlZCJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiRW1wdHlSb3dzSGFuZGxlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEVudGl0eVNldCwgTmF2aWdhdGlvblByb3BlcnR5IH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzXCI7XG5pbXBvcnQgdHlwZSB7IERlZmF1bHRWYWx1ZXNGdW5jdGlvbiB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvQ29tbW9uXCI7XG5pbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCB7IHR5cGUgSUludGVyZmFjZVdpdGhNaXhpbiB9IGZyb20gXCJzYXAvZmUvYmFzZS9DbGFzc1N1cHBvcnRcIjtcbmltcG9ydCBDb21tb25VdGlscyBmcm9tIFwic2FwL2ZlL2NvcmUvQ29tbW9uVXRpbHNcIjtcbmltcG9ydCB7IEFjdGl2aXR5IH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL2NvbGxhYm9yYXRpb24vQ29sbGFib3JhdGlvbkNvbW1vblwiO1xuaW1wb3J0IFRyYW5zYWN0aW9uSGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9lZGl0Rmxvdy9UcmFuc2FjdGlvbkhlbHBlclwiO1xuaW1wb3J0IHsgQ3JlYXRpb25Nb2RlIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWFuaWZlc3RTZXR0aW5nc1wiO1xuaW1wb3J0IHsgZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWV0YU1vZGVsQ29udmVydGVyXCI7XG5pbXBvcnQgdHlwZSB7IEFubm90YXRpb25UYWJsZUNvbHVtbiB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0NvbW1vbi90YWJsZS9Db2x1bW5zXCI7XG5pbXBvcnQgdHlwZSBVSTVFdmVudCBmcm9tIFwic2FwL3VpL2Jhc2UvRXZlbnRcIjtcbmltcG9ydCB0eXBlIENvbnRyb2wgZnJvbSBcInNhcC91aS9jb3JlL0NvbnRyb2xcIjtcbmltcG9ydCBMaWJyYXJ5IGZyb20gXCJzYXAvdWkvY29yZS9MaWJcIjtcbmltcG9ydCBNZXNzYWdpbmcgZnJvbSBcInNhcC91aS9jb3JlL01lc3NhZ2luZ1wiO1xuaW1wb3J0IE1lc3NhZ2UgZnJvbSBcInNhcC91aS9jb3JlL21lc3NhZ2UvTWVzc2FnZVwiO1xuaW1wb3J0IE1lc3NhZ2VUeXBlIGZyb20gXCJzYXAvdWkvY29yZS9tZXNzYWdlL01lc3NhZ2VUeXBlXCI7XG5pbXBvcnQgdHlwZSBNRENUYWJsZSBmcm9tIFwic2FwL3VpL21kYy9UYWJsZVwiO1xuaW1wb3J0IHR5cGUgTURDQ29sdW1uIGZyb20gXCJzYXAvdWkvbWRjL3RhYmxlL0NvbHVtblwiO1xuaW1wb3J0IHR5cGUgSlNPTk1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvanNvbi9KU09OTW9kZWxcIjtcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9Db250ZXh0XCI7XG5pbXBvcnQgdHlwZSB7IENvbnRleHRFcnJvclR5cGUgfSBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L0NvbnRleHRcIjtcbmltcG9ydCB0eXBlIE9EYXRhTGlzdEJpbmRpbmcgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YUxpc3RCaW5kaW5nXCI7XG5pbXBvcnQgeyB0eXBlIElUYWJsZUJsb2NrIH0gZnJvbSBcIi4uL1RhYmxlQVBJXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVtcHR5Um93c0hhbmRsZXIgaW1wbGVtZW50cyBJSW50ZXJmYWNlV2l0aE1peGluIHtcblx0Y3JlYXRpbmdFbXB0eVJvd3M/OiBib29sZWFuO1xuXG5cdC8qKlxuXHQgKiBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gdGhlIHRhYmxlJ3MgZGVmYXVsdCB2YWx1ZXMuXG5cdCAqL1xuXHRwdWJsaWMgdGFibGVEZWZhdWx0c1Byb21pc2U/OiBQcm9taXNlPG9iamVjdD47XG5cblx0c2V0dXBNaXhpbihfYmFzZUNsYXNzOiBGdW5jdGlvbik6IHZvaWQge1xuXHRcdC8vIFRoaXMgbWV0aG9kIGlzIG5lZWRlZCB0byBpbXBsZW1lbnQgaW50ZXJmYWNlIElJbnRlcmZhY2VXaXRoTWl4aW5cblx0fVxuXG5cdC8qKlxuXHQgKiBIYW5kbGVyIGZvciB0aGUgb25GaWVsZExpdmVDaGFuZ2UgZXZlbnQuXG5cdCAqIEBwYXJhbSB1aTVFdmVudCBUaGUgZXZlbnQgb2JqZWN0IHBhc3NlZCBieSB0aGUgb25GaWVsZExpdmVDaGFuZ2UgZXZlbnRcblx0ICovXG5cdF9vbkZpZWxkTGl2ZUNoYW5nZSh0aGlzOiBJVGFibGVCbG9jayAmIEVtcHR5Um93c0hhbmRsZXIsIHVpNUV2ZW50OiBVSTVFdmVudDx7fSwgQ29udHJvbD4pOiB2b2lkIHtcblx0XHRjb25zdCBmaWVsZCA9IHVpNUV2ZW50LmdldFNvdXJjZSgpLFxuXHRcdFx0YmluZGluZ0NvbnRleHQgPSBmaWVsZC5nZXRCaW5kaW5nQ29udGV4dCgpIGFzIENvbnRleHQsXG5cdFx0XHRiaW5kaW5nID0gYmluZGluZ0NvbnRleHQuZ2V0QmluZGluZygpO1xuXHRcdC8vIGNyZWF0aW9uIG9mIGEgbmV3IGluYWN0aXZlIHJvdyBpZiByZWxldmFudFxuXHRcdGlmIChiaW5kaW5nQ29udGV4dC5pc0luYWN0aXZlKCkpIHtcblx0XHRcdGNvbnN0IHRhYmxlID0gdGhpcz8uZ2V0Q29udGVudCgpO1xuXHRcdFx0dGhpcz8uY3JlYXRlRW1wdHlSb3dzKGJpbmRpbmcgYXMgT0RhdGFMaXN0QmluZGluZywgdGFibGUsIHRydWUpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBIYW5kbGVzIHRoZSBDcmVhdGVBY3RpdmF0ZSBldmVudCBmcm9tIHRoZSBPRGF0YUxpc3RCaW5kaW5nLlxuXHQgKiBAcGFyYW0gYWN0aXZhdGVFdmVudCBUaGUgZXZlbnQgc2VudCBieSB0aGUgYmluZGluZ1xuXHQgKi9cblx0YXN5bmMgX2hhbmRsZUNyZWF0ZUFjdGl2YXRlKFxuXHRcdHRoaXM6IElUYWJsZUJsb2NrICYgRW1wdHlSb3dzSGFuZGxlcixcblx0XHRhY3RpdmF0ZUV2ZW50OiBVSTVFdmVudDx7IGNvbnRleHQ6IENvbnRleHQgfSwgT0RhdGFMaXN0QmluZGluZz5cblx0KTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0Y29uc3QgYWN0aXZhdGVkQ29udGV4dCA9IGFjdGl2YXRlRXZlbnQuZ2V0UGFyYW1ldGVyKFwiY29udGV4dFwiKTtcblx0XHQvLyB3ZSBzdGFydCBieSBhc2tpbmcgdG8gcmVjcmVhdGUgYW4gZW1wdHkgcm93IChpZiBsaXZlIGNoYW5nZSBoYXMgYWxyZWFkeSBkb25lIGl0IHRoaXMgd29uJ3QgaGF2ZSBhbnkgZWZmZWN0KVxuXHRcdC8vIGJ1dCB3ZSBkbyBub3Qgd2FpdFxuXHRcdHRoaXMuY3JlYXRlRW1wdHlSb3dzKGFjdGl2YXRlRXZlbnQuZ2V0U291cmNlKCksIHRoaXMuZ2V0Q29udGVudCgpLCB0cnVlKTtcblx0XHRpZiAoIXRoaXMudmFsaWRhdGVFbXB0eVJvdyhhY3RpdmF0ZWRDb250ZXh0KSkge1xuXHRcdFx0YWN0aXZhdGVFdmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHR0cnkge1xuXHRcdFx0Y29uc3QgdHJhbnNpZW50UGF0aCA9IGFjdGl2YXRlZENvbnRleHQuZ2V0UGF0aCgpLFxuXHRcdFx0XHR2aWV3ID0gQ29tbW9uVXRpbHMuZ2V0VGFyZ2V0Vmlldyh0aGlzKSxcblx0XHRcdFx0Y29udHJvbGxlciA9IHZpZXcuZ2V0Q29udHJvbGxlcigpLFxuXHRcdFx0XHRlZGl0RmxvdyA9IGNvbnRyb2xsZXIuZWRpdEZsb3c7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRhd2FpdCAoYWN0aXZhdGVkQ29udGV4dC5jcmVhdGVkKCkgPz8gUHJvbWlzZS5yZXNvbHZlKCkpO1xuXHRcdFx0XHRhd2FpdCBlZGl0Rmxvdy5vbkFmdGVyQ3JlYXRlKHsgY29udGV4dDogYWN0aXZhdGVkQ29udGV4dCB9KTtcblx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0TG9nLndhcm5pbmcoYEZhaWxlZCB0byBhY3RpdmF0ZSBjb250ZXh0ICR7YWN0aXZhdGVkQ29udGV4dC5nZXRQYXRoKCl9YCk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdGNvbnN0IGNvbnRlbnQgPSBhY3RpdmF0ZWRDb250ZXh0LmdldFBhdGgoKTtcblx0XHRcdGNvbnN0IGNvbGxhYm9yYXRpdmVEcmFmdCA9IHZpZXcuZ2V0Q29udHJvbGxlcigpLmNvbGxhYm9yYXRpdmVEcmFmdDtcblx0XHRcdC8vIFNlbmQgbm90aWZpY2F0aW9uIHRvIG90aGVyIHVzZXJzIG9ubHkgYWZ0ZXIgdGhlIGNyZWF0aW9uIGhhcyBiZWVuIGZpbmFsaXplZFxuXHRcdFx0Y29sbGFib3JhdGl2ZURyYWZ0LnNlbmQoeyBhY3Rpb246IEFjdGl2aXR5LkNyZWF0ZSwgY29udGVudCB9KTtcblx0XHRcdC8vIFNpbmNlIHRoZSBwYXRoIG9mIHRoZSBjb250ZXh0IGhhcyBjaGFuZ2VkIGR1cmluZyBhY3RpdmF0aW9uLCB3ZSBuZWVkIHRvIHVwZGF0ZSBhbGwgY29sbGFib3JhdGlvbiBsb2Nrc1xuXHRcdFx0Ly8gdGhhdCB3ZXJlIHVzaW5nIHRoZSB0cmFuc2llbnQgcGF0aFxuXHRcdFx0Y29sbGFib3JhdGl2ZURyYWZ0LnVwZGF0ZUxvY2tzRm9yQ29udGV4dFBhdGgodHJhbnNpZW50UGF0aCwgYWN0aXZhdGVkQ29udGV4dC5nZXRQYXRoKCkpO1xuXHRcdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0XHRMb2cuZXJyb3IoXCJGYWlsZWQgdG8gYWN0aXZhdGUgbmV3IHJvdyAtXCIsIGVycm9yIGFzIEVycm9yKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogR2V0IHRoZSBkZWZhdWx0IHZhbHVlcyBmcm9tIHRoZSBEZWZhdWx0VmFsdWVzIGZ1bmN0aW9uLlxuXHQgKiBAcGFyYW0gbGlzdEJpbmRpbmcgVGhlIGN1cnJlbnQgbGlzdCBiaW5kaW5nXG5cdCAqIEByZXR1cm5zIFRoZSBEZWZhdWx0VmFsdWVzIGZ1bmN0aW9uIChvciB1bmRlZmluZWQgaWYgbm8gZnVuY3Rpb24gaXMgZm91bmQpXG5cdCAqL1xuXHRnZXREZWZhdWx0VmFsdWVzRnVuY3Rpb24obGlzdEJpbmRpbmc6IE9EYXRhTGlzdEJpbmRpbmcpOiBEZWZhdWx0VmFsdWVzRnVuY3Rpb24gfCB1bmRlZmluZWQge1xuXHRcdGNvbnN0IG1vZGVsID0gbGlzdEJpbmRpbmcuZ2V0TW9kZWwoKTtcblx0XHRjb25zdCBtZXRhTW9kZWwgPSBtb2RlbC5nZXRNZXRhTW9kZWwoKTtcblx0XHRjb25zdCBtZXRhQ29udGV4dCA9IG1ldGFNb2RlbC5nZXRNZXRhQ29udGV4dChsaXN0QmluZGluZy5nZXRSZXNvbHZlZFBhdGgoKSBhcyBzdHJpbmcpO1xuXHRcdGNvbnN0IGxpc3RCaW5kaW5nT2JqZWN0UGF0aCA9IGdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyhtZXRhQ29udGV4dCk7XG5cblx0XHRjb25zdCBkZWZhdWx0RnVuY09uVGFyZ2V0T2JqZWN0ID0gKGxpc3RCaW5kaW5nT2JqZWN0UGF0aC50YXJnZXRPYmplY3QgYXMgTmF2aWdhdGlvblByb3BlcnR5IHwgRW50aXR5U2V0KS5hbm5vdGF0aW9ucy5Db21tb25cblx0XHRcdD8uRGVmYXVsdFZhbHVlc0Z1bmN0aW9uO1xuXHRcdGNvbnN0IGRlZmF1bHRGdW5jT25UYXJnZXRFbnRpdHlTZXQgPSAobGlzdEJpbmRpbmdPYmplY3RQYXRoLnRhcmdldEVudGl0eVNldCBhcyBFbnRpdHlTZXQgfCB1bmRlZmluZWQpPy5hbm5vdGF0aW9ucy5Db21tb25cblx0XHRcdD8uRGVmYXVsdFZhbHVlc0Z1bmN0aW9uO1xuXG5cdFx0cmV0dXJuIGRlZmF1bHRGdW5jT25UYXJnZXRPYmplY3QgPz8gZGVmYXVsdEZ1bmNPblRhcmdldEVudGl0eVNldDtcblx0fVxuXG5cdC8qKlxuXHQgKiBFbXB0eVJvd3NFbmFibGVkIHNldHRlci5cblx0ICogQHBhcmFtIGVuYWJsZW1lbnRcblx0ICovXG5cdHNldEVtcHR5Um93c0VuYWJsZWQodGhpczogSVRhYmxlQmxvY2sgJiBFbXB0eVJvd3NIYW5kbGVyLCBlbmFibGVtZW50OiBib29sZWFuKTogdm9pZCB7XG5cdFx0dGhpcy5zZXRQcm9wZXJ0eShcImVtcHR5Um93c0VuYWJsZWRcIiwgZW5hYmxlbWVudCk7XG5cdFx0Y29uc3QgbmF2aWdhdGlvblBhdGggPSB0aGlzLmdldENvbnRlbnQoKS5kYXRhKCkubmF2aWdhdGlvblBhdGgsXG5cdFx0XHRhcHBDb21wb25lbnQgPSBDb21tb25VdGlscy5nZXRBcHBDb21wb25lbnQodGhpcy5nZXRDb250ZW50KCkpO1xuXHRcdGlmIChlbmFibGVtZW50KSB7XG5cdFx0XHRjb25zdCBsaXN0QmluZGluZyA9IHRoaXMuZ2V0Q29udGVudCgpLmdldFJvd0JpbmRpbmcoKTtcblx0XHRcdGNvbnN0IGRlZmF1bHRWYWx1ZXNGdW5jdGlvbiA9IGxpc3RCaW5kaW5nPy5nZXRSZXNvbHZlZFBhdGgoKSA/IHRoaXMuZ2V0RGVmYXVsdFZhbHVlc0Z1bmN0aW9uKGxpc3RCaW5kaW5nKSA6IHVuZGVmaW5lZDtcblx0XHRcdGlmIChkZWZhdWx0VmFsdWVzRnVuY3Rpb24pIHtcblx0XHRcdFx0YXBwQ29tcG9uZW50LmdldFNpZGVFZmZlY3RzU2VydmljZSgpLnJlZ2lzdGVyVGFyZ2V0Q2FsbGJhY2sobmF2aWdhdGlvblBhdGgsIHRoaXMudXBkYXRlRW1wdHlSb3dzLmJpbmQodGhpcykpO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRhcHBDb21wb25lbnQuZ2V0U2lkZUVmZmVjdHNTZXJ2aWNlKCkuZGVyZWdpc3RlclRhcmdldENhbGxiYWNrKG5hdmlnYXRpb25QYXRoKTtcblx0XHR9XG5cblx0XHRpZiAodGhpcy50YWJsZURlZmF1bHRzUHJvbWlzZSkge1xuXHRcdFx0dGhpcy50YWJsZURlZmF1bHRzUHJvbWlzZVxuXHRcdFx0XHQudGhlbigodGFibGVEZWZhdWx0RGF0YSkgPT4ge1xuXHRcdFx0XHRcdHRoaXMuc2V0VXBFbXB0eVJvd3ModGhpcy5nZXRDb250ZW50KCksIGZhbHNlLCB0YWJsZURlZmF1bHREYXRhKTtcblx0XHRcdFx0XHRyZXR1cm4gdGFibGVEZWZhdWx0RGF0YTtcblx0XHRcdFx0fSlcblx0XHRcdFx0LmNhdGNoKChlcnJvcikgPT4ge1xuXHRcdFx0XHRcdExvZy5lcnJvcihcIkVycm9yIHdoaWxlIHNldHRpbmcgdXAgZW1wdHkgcm93czpcIiwgZXJyb3IpO1xuXHRcdFx0XHR9KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5zZXRVcEVtcHR5Um93cyh0aGlzLmdldENvbnRlbnQoKSk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFJlbW92ZSBhbmQgcmVjcmVhdGUgdGhlIGVtcHR5IHJvd3MgaW4gb3JkZXIgdG8gZ2V0IGFueSB1cGRhdGVkIGRlZmF1bHQgdmFsdWVzLlxuXHQgKlxuXHQgKi9cblx0YXN5bmMgdXBkYXRlRW1wdHlSb3dzKHRoaXM6IElUYWJsZUJsb2NrICYgRW1wdHlSb3dzSGFuZGxlcik6IFByb21pc2U8dm9pZD4ge1xuXHRcdGNvbnN0IHRhYmxlID0gdGhpcy5nZXRDb250ZW50KCk7XG5cdFx0Y29uc3QgYmluZGluZyA9IHRhYmxlLmdldFJvd0JpbmRpbmcoKTtcblx0XHRjb25zdCBiaW5kaW5nSGVhZGVyQ29udGV4dCA9IGJpbmRpbmcuZ2V0SGVhZGVyQ29udGV4dCgpO1xuXHRcdGlmIChiaW5kaW5nICYmIGJpbmRpbmcuaXNSZXNvbHZlZCgpICYmIGJpbmRpbmcuaXNMZW5ndGhGaW5hbCgpICYmIGJpbmRpbmdIZWFkZXJDb250ZXh0KSB7XG5cdFx0XHRjb25zdCBjb250ZXh0UGF0aCA9IGJpbmRpbmdIZWFkZXJDb250ZXh0LmdldFBhdGgoKTtcblx0XHRcdHRoaXMuX2RlbGV0ZUVtcHR5Um93cyhiaW5kaW5nLCBjb250ZXh0UGF0aCk7XG5cdFx0XHRhd2FpdCB0aGlzLmNyZWF0ZUVtcHR5Um93cyhiaW5kaW5nLCB0YWJsZSk7XG5cdFx0fVxuXHRcdHJldHVybjtcblx0fVxuXG5cdC8qKlxuXHQgKiBIZWxwZXIgZnVuY3Rpb24gdG8gcGVyZm9ybSBjb21tb24gY2hlY2tzIGZvciB0YWJsZSBkZWZhdWx0cyBhbmQgZW1wdHkgcm93cyBzZXR1cC5cblx0ICogQHBhcmFtIHRhYmxlIFRoZSB0YWJsZSBiZWluZyBwcm9jZXNzZWRcblx0ICogQHJldHVybnMgVGhlIGJpbmRpbmcgb2JqZWN0IGlmIGNoZWNrcyBwYXNzLCBvciB1bmRlZmluZWQgaWYgY2hlY2tzIGZhaWxcblx0ICovXG5cdHByaXZhdGUgYXN5bmMgX3ZhbGlkYXRlQW5kUmV0cmlldmVCaW5kaW5nKFxuXHRcdHRoaXM6IElUYWJsZUJsb2NrICYgRW1wdHlSb3dzSGFuZGxlcixcblx0XHR0YWJsZTogTURDVGFibGVcblx0KTogUHJvbWlzZTxPRGF0YUxpc3RCaW5kaW5nIHwgdW5kZWZpbmVkPiB7XG5cdFx0aWYgKHRoaXMuZ2V0VGFibGVEZWZpbml0aW9uKCkuY29udHJvbD8uY3JlYXRpb25Nb2RlICE9PSBDcmVhdGlvbk1vZGUuSW5saW5lQ3JlYXRpb25Sb3dzKSB7XG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdH1cblxuXHRcdGNvbnN0IHVpTW9kZWwgPSB0YWJsZS5nZXRNb2RlbChcInVpXCIpIGFzIEpTT05Nb2RlbCB8IHVuZGVmaW5lZDtcblx0XHRpZiAoIXVpTW9kZWwpIHtcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0fVxuXG5cdFx0aWYgKHVpTW9kZWwuZ2V0UHJvcGVydHkoXCIvaXNFZGl0YWJsZVBlbmRpbmdcIikpIHtcblx0XHRcdC8vIFdhaXQgdW50aWwgdGhlIGVkaXQgbW9kZSBjb21wdXRhdGlvbiBpcyBjb21wbGV0ZVxuXHRcdFx0Y29uc3Qgd2F0Y2hCaW5kaW5nID0gdWlNb2RlbC5iaW5kUHJvcGVydHkoXCIvaXNFZGl0YWJsZVBlbmRpbmdcIik7XG5cdFx0XHRhd2FpdCBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSkgPT4ge1xuXHRcdFx0XHRjb25zdCBmbkhhbmRsZXIgPSAoKTogdm9pZCA9PiB7XG5cdFx0XHRcdFx0d2F0Y2hCaW5kaW5nLmRldGFjaENoYW5nZShmbkhhbmRsZXIpO1xuXHRcdFx0XHRcdHdhdGNoQmluZGluZy5kZXN0cm95KCk7XG5cdFx0XHRcdFx0cmVzb2x2ZSgpO1xuXHRcdFx0XHR9O1xuXHRcdFx0XHR3YXRjaEJpbmRpbmcuYXR0YWNoQ2hhbmdlKGZuSGFuZGxlcik7XG5cdFx0XHR9KTtcblx0XHR9XG5cblx0XHRjb25zdCBiaW5kaW5nID0gdGFibGUuZ2V0Um93QmluZGluZygpIGFzIE9EYXRhTGlzdEJpbmRpbmcgfCB1bmRlZmluZWQ7XG5cblx0XHRpZiAoIWJpbmRpbmcpIHtcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0fVxuXHRcdHJldHVybiBiaW5kaW5nO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIHRhYmxlIGRlZmF1bHRzIGJ5IHZhbGlkYXRpbmcgYW5kIHJldHJpZXZpbmcgdGhlIGJpbmRpbmcsIHRoZW4gZmV0Y2hpbmcgZGF0YSBmcm9tIHRoZSBEZWZhdWx0VmFsdWVGdW5jdGlvbi5cblx0ICogQHBhcmFtIHRhYmxlIFRoZSB0YWJsZSBiZWluZyBwcm9jZXNzZWRcblx0ICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gYW4gb2JqZWN0IGNvbnRhaW5pbmcgdGhlIGRlZmF1bHQgdmFsdWVzLCBvciB1bmRlZmluZWQgaWYgbm8gYmluZGluZyBpcyBhdmFpbGFibGUgb3IgdGhlIERlZmF1bHRWYWx1ZUZ1bmN0aW9uIHJldHVybnMgbm8gZGF0YVxuXHQgKi9cblx0YXN5bmMgZ2V0VGFibGVEZWZhdWx0cyh0aGlzOiBJVGFibGVCbG9jayAmIEVtcHR5Um93c0hhbmRsZXIsIHRhYmxlOiBNRENUYWJsZSk6IFByb21pc2U8b2JqZWN0IHwgdW5kZWZpbmVkPiB7XG5cdFx0Y29uc3QgYmluZGluZyA9IGF3YWl0IHRoaXMuX3ZhbGlkYXRlQW5kUmV0cmlldmVCaW5kaW5nKHRhYmxlKTtcblx0XHRpZiAoIWJpbmRpbmcpIHJldHVybiB1bmRlZmluZWQ7XG5cblx0XHRjb25zdCBhcHBDb21wb25lbnQgPSBDb21tb25VdGlscy5nZXRBcHBDb21wb25lbnQoQ29tbW9uVXRpbHMuZ2V0VGFyZ2V0Vmlldyh0YWJsZSkpO1xuXHRcdHJldHVybiBhcHBDb21wb25lbnQgPyBUcmFuc2FjdGlvbkhlbHBlci5nZXREYXRhRnJvbURlZmF1bHRWYWx1ZUZ1bmN0aW9uKGJpbmRpbmcsIGFwcENvbXBvbmVudCkgOiB1bmRlZmluZWQ7XG5cdH1cblxuXHRhc3luYyBzZXRVcEVtcHR5Um93cyhcblx0XHR0aGlzOiBJVGFibGVCbG9jayAmIEVtcHR5Um93c0hhbmRsZXIsXG5cdFx0dGFibGU6IE1EQ1RhYmxlLFxuXHRcdGNyZWF0ZUJ1dHRvbldhc1ByZXNzZWQgPSBmYWxzZSxcblx0XHR0YWJsZURlZmF1bHREYXRhID0ge31cblx0KTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0Y29uc3QgYmluZGluZyA9IGF3YWl0IHRoaXMuX3ZhbGlkYXRlQW5kUmV0cmlldmVCaW5kaW5nKHRhYmxlKTtcblx0XHRpZiAoIWJpbmRpbmcpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0Y29uc3QgYmluZGluZ0hlYWRlckNvbnRleHQgPSBiaW5kaW5nLmdldEhlYWRlckNvbnRleHQoKTtcblx0XHRpZiAoYmluZGluZyAmJiBiaW5kaW5nLmlzUmVzb2x2ZWQoKSAmJiBiaW5kaW5nLmlzTGVuZ3RoRmluYWwoKSAmJiBiaW5kaW5nSGVhZGVyQ29udGV4dCkge1xuXHRcdFx0Y29uc3QgY29udGV4dFBhdGggPSBiaW5kaW5nSGVhZGVyQ29udGV4dC5nZXRQYXRoKCk7XG5cdFx0XHRpZiAoIXRoaXMuZW1wdHlSb3dzRW5hYmxlZCkge1xuXHRcdFx0XHR0aGlzLnJlbW92ZUVtcHR5Um93c01lc3NhZ2VzKCk7XG5cdFx0XHRcdHJldHVybiB0aGlzLl9kZWxldGVFbXB0eVJvd3MoYmluZGluZywgY29udGV4dFBhdGgpO1xuXHRcdFx0fVxuXHRcdFx0aWYgKCFDb21tb25VdGlscy5nZXRJc0VkaXRhYmxlKHRhYmxlKSkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHRpZiAoXG5cdFx0XHRcdHRoaXMuZ2V0VGFibGVEZWZpbml0aW9uKCkuY29udHJvbD8uaW5saW5lQ3JlYXRpb25Sb3dzSGlkZGVuSW5FZGl0TW9kZSAmJlxuXHRcdFx0XHQhdGFibGUuZ2V0QmluZGluZ0NvbnRleHQoXCJwYWdlSW50ZXJuYWxcIik/LmdldFByb3BlcnR5KFwiY3JlYXRlTW9kZVwiKSAmJlxuXHRcdFx0XHQhY3JlYXRlQnV0dG9uV2FzUHJlc3NlZFxuXHRcdFx0KSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdGNvbnN0IGluYWN0aXZlQ29udGV4dCA9IGJpbmRpbmcuZ2V0QWxsQ3VycmVudENvbnRleHRzKCkuZmluZChmdW5jdGlvbiAoY29udGV4dCkge1xuXHRcdFx0XHQvLyB3aGVuIHRoaXMgaXMgY2FsbGVkIGZyb20gY29udHJvbGxlciBjb2RlIHdlIG5lZWQgdG8gY2hlY2sgdGhhdCBpbmFjdGl2ZSBjb250ZXh0cyBhcmUgc3RpbGwgcmVsYXRpdmUgdG8gdGhlIGN1cnJlbnQgdGFibGUgY29udGV4dFxuXHRcdFx0XHRyZXR1cm4gY29udGV4dC5pc0luYWN0aXZlKCkgJiYgY29udGV4dC5nZXRQYXRoKCkuc3RhcnRzV2l0aChjb250ZXh0UGF0aCk7XG5cdFx0XHR9KTtcblx0XHRcdGlmICghaW5hY3RpdmVDb250ZXh0KSB7XG5cdFx0XHRcdHRoaXMucmVtb3ZlRW1wdHlSb3dzTWVzc2FnZXMoKTtcblx0XHRcdFx0YXdhaXQgdGhpcy5jcmVhdGVFbXB0eVJvd3MoYmluZGluZywgdGFibGUsIGZhbHNlLCB1bmRlZmluZWQsIGZhbHNlLCB0YWJsZURlZmF1bHREYXRhKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogRGVsZXRlcyBpbmFjdGl2ZSByb3dzIGZyb20gdGhlIHRhYmxlIGxpc3RCaW5kaW5nLlxuXHQgKiBAcGFyYW0gYmluZGluZ1xuXHQgKiBAcGFyYW0gY29udGV4dFBhdGhcblx0ICovXG5cdF9kZWxldGVFbXB0eVJvd3MoYmluZGluZzogT0RhdGFMaXN0QmluZGluZywgY29udGV4dFBhdGg6IHN0cmluZyk6IHZvaWQge1xuXHRcdGZvciAoY29uc3QgY29udGV4dCBvZiBiaW5kaW5nLmdldEFsbEN1cnJlbnRDb250ZXh0cygpKSB7XG5cdFx0XHRpZiAoY29udGV4dC5pc0luYWN0aXZlKCkgJiYgY29udGV4dC5nZXRQYXRoKCkuc3RhcnRzV2l0aChjb250ZXh0UGF0aCkpIHtcblx0XHRcdFx0Y29udGV4dC5kZWxldGUoKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogUmV0dXJucyB0aGUgY3VycmVudCBudW1iZXIgb2YgaW5hY3RpdmUgY29udGV4dHMgd2l0aGluIHRoZSBsaXN0IGJpbmRpbmcuXG5cdCAqIEBwYXJhbSBiaW5kaW5nIERhdGEgbGlzdCBiaW5kaW5nXG5cdCAqIEByZXR1cm5zIFRoZSBudW1iZXIgb2YgaW5hY3RpdmUgY29udGV4dHNcblx0ICovXG5cdGdldEluYWN0aXZlQ29udGV4dE51bWJlcihiaW5kaW5nOiBPRGF0YUxpc3RCaW5kaW5nKTogbnVtYmVyIHtcblx0XHRyZXR1cm4gYmluZGluZy5nZXRBbGxDdXJyZW50Q29udGV4dHMoKS5maWx0ZXIoKGNvbnRleHQpID0+IGNvbnRleHQuaXNJbmFjdGl2ZSgpKS5sZW5ndGg7XG5cdH1cblxuXHQvKipcblx0ICogSGFuZGxlcyB0aGUgdmFsaWRhdGlvbiBvZiB0aGUgZW1wdHkgcm93LlxuXHQgKiBAcGFyYW0gY29udGV4dCBUaGUgY29udGV4dCBvZiB0aGUgZW1wdHkgcm93XG5cdCAqIEByZXR1cm5zIFRoZSB2YWxpZGF0aW9uIHN0YXR1c1xuXHQgKi9cblx0dmFsaWRhdGVFbXB0eVJvdyh0aGlzOiBJVGFibGVCbG9jayAmIEVtcHR5Um93c0hhbmRsZXIsIGNvbnRleHQ6IENvbnRleHQpOiBib29sZWFuIHtcblx0XHRjb25zdCByZXF1aXJlZFByb3BlcnRpZXMgPSB0aGlzLmdldFRhYmxlRGVmaW5pdGlvbigpLmFubm90YXRpb24ucmVxdWlyZWRQcm9wZXJ0aWVzO1xuXHRcdGlmIChyZXF1aXJlZFByb3BlcnRpZXM/Lmxlbmd0aCkge1xuXHRcdFx0dGhpcy5yZW1vdmVFbXB0eVJvd3NNZXNzYWdlcyhjb250ZXh0KTtcblx0XHRcdGNvbnN0IG1pc3NpbmdQcm9wZXJ0aWVzID0gcmVxdWlyZWRQcm9wZXJ0aWVzLmZpbHRlcigocmVxdWlyZWRQcm9wZXJ0eSkgPT4gIWNvbnRleHQuZ2V0T2JqZWN0KHJlcXVpcmVkUHJvcGVydHkpKTtcblx0XHRcdGlmIChtaXNzaW5nUHJvcGVydGllcy5sZW5ndGgpIHtcblx0XHRcdFx0Y29uc3QgcmVzb3VyY2VCdW5kbGUgPSBMaWJyYXJ5LmdldFJlc291cmNlQnVuZGxlRm9yKFwic2FwLmZlLm1hY3Jvc1wiKSE7XG5cdFx0XHRcdGNvbnN0IG1lc3NhZ2VzOiBNZXNzYWdlW10gPSBbXTtcblx0XHRcdFx0bGV0IGRpc3BsYXllZENvbHVtbjogTURDQ29sdW1uIHwgdW5kZWZpbmVkO1xuXHRcdFx0XHRmb3IgKGNvbnN0IG1pc3NpbmdQcm9wZXJ0eSBvZiBtaXNzaW5nUHJvcGVydGllcykge1xuXHRcdFx0XHRcdGxldCBlcnJvck1lc3NhZ2U6IHN0cmluZztcblx0XHRcdFx0XHRjb25zdCBtaXNzaW5nQ29sdW1uID0gdGhpcy5nZXRUYWJsZURlZmluaXRpb24oKS5jb2x1bW5zLmZpbmQoXG5cdFx0XHRcdFx0XHQodGFibGVDb2x1bW4pID0+XG5cdFx0XHRcdFx0XHRcdCh0YWJsZUNvbHVtbiBhcyBBbm5vdGF0aW9uVGFibGVDb2x1bW4pLnJlbGF0aXZlUGF0aCA9PT0gbWlzc2luZ1Byb3BlcnR5IHx8XG5cdFx0XHRcdFx0XHRcdCh0YWJsZUNvbHVtbi5wcm9wZXJ0eUluZm9zICYmIHRhYmxlQ29sdW1uLnByb3BlcnR5SW5mb3MuaW5jbHVkZXMobWlzc2luZ1Byb3BlcnR5KSlcblx0XHRcdFx0XHQpO1xuXG5cdFx0XHRcdFx0aWYgKCFtaXNzaW5nQ29sdW1uKSB7XG5cdFx0XHRcdFx0XHRlcnJvck1lc3NhZ2UgPSByZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiTV9UQUJMRV9FTVBUWVJPV19NQU5EQVRPUllcIiwgW21pc3NpbmdQcm9wZXJ0eV0pO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRkaXNwbGF5ZWRDb2x1bW4gPSB0aGlzLmdldENvbnRlbnQoKVxuXHRcdFx0XHRcdFx0XHQuZ2V0Q29sdW1ucygpXG5cdFx0XHRcdFx0XHRcdC5maW5kKChtZGNDb2x1bW4pID0+IG1kY0NvbHVtbi5nZXRQcm9wZXJ0eUtleSgpID09PSBtaXNzaW5nQ29sdW1uLm5hbWUpO1xuXHRcdFx0XHRcdFx0ZXJyb3JNZXNzYWdlID0gcmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcblx0XHRcdFx0XHRcdFx0ZGlzcGxheWVkQ29sdW1uID8gXCJNX1RBQkxFX0VNUFRZUk9XX01BTkRBVE9SWVwiIDogXCJNX1RBQkxFX0VNUFRZUk9XX01BTkRBVE9SWV9ISURERU5cIixcblx0XHRcdFx0XHRcdFx0W2Rpc3BsYXllZENvbHVtbj8uZ2V0SGVhZGVyKCkgfHwgbWlzc2luZ0NvbHVtbi5sYWJlbF1cblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0bWVzc2FnZXMucHVzaChcblx0XHRcdFx0XHRcdG5ldyBNZXNzYWdlKHtcblx0XHRcdFx0XHRcdFx0bWVzc2FnZTogZXJyb3JNZXNzYWdlLFxuXHRcdFx0XHRcdFx0XHRwcm9jZXNzb3I6IHRoaXMuZ2V0TW9kZWwoKSxcblx0XHRcdFx0XHRcdFx0dHlwZTogTWVzc2FnZVR5cGUuRXJyb3IsXG5cdFx0XHRcdFx0XHRcdHRlY2huaWNhbDogZmFsc2UsXG5cdFx0XHRcdFx0XHRcdHBlcnNpc3RlbnQ6IHRydWUsXG5cdFx0XHRcdFx0XHRcdHRlY2huaWNhbERldGFpbHM6IHtcblx0XHRcdFx0XHRcdFx0XHR0YWJsZUlkOiB0aGlzLmdldENvbnRlbnQoKS5nZXRJZCgpLCAvLyBOZWVkIHRvIGRvIGl0IHNpbmNlIGhhbmRsZUNyZWF0ZUFjdGl2YXRlIGNhbiBiZSB0cmlnZ2VyZWQgbXVsdGlwbGUgdGltZXMgKGV4dHJhIHByb3BlcnRpZXMgc2V0IGJ5IHZhbHVlIGhlbHApIGJlZm9yZSBjb250cm9sSWRzIGFyZSBzZXQgb24gdGhlIG1lc3NhZ2Vcblx0XHRcdFx0XHRcdFx0XHRlbXB0eVJvd01lc3NhZ2U6IHRydWUsXG5cdFx0XHRcdFx0XHRcdFx0bWlzc2luZ0NvbHVtbjogZGlzcGxheWVkQ29sdW1uID8gdW5kZWZpbmVkIDogbWlzc2luZ1Byb3BlcnR5IC8vIG5lZWRlZCB0byBjaGFuZ2UgdGhlIG1lc3NhZ2VTdHJpcCBtZXNzYWdlXG5cdFx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRcdHRhcmdldDogYCR7Y29udGV4dD8uZ2V0UGF0aCgpfS8ke21pc3NpbmdQcm9wZXJ0eX1gXG5cdFx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0TWVzc2FnaW5nLmFkZE1lc3NhZ2VzKG1lc3NhZ2VzKTtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZW1vdmVzIHRoZSBtZXNzYWdlcyByZWxhdGVkIHRvIHRoZSBlbXB0eSByb3dzLlxuXHQgKiBAcGFyYW0gaW5hY3RpdmVDb250ZXh0cyBUaGUgY29udGV4dHMgb2YgdGhlIGVtcHR5IHJvd3MsIGlmIG5vdCBwcm92aWRlZCwgdGhlIG1lc3NhZ2VzIG9mIGFsbCBlbXB0eSByb3dzIGFyZSByZW1vdmVkXG5cdCAqL1xuXHRyZW1vdmVFbXB0eVJvd3NNZXNzYWdlcyh0aGlzOiBJVGFibGVCbG9jayAmIEVtcHR5Um93c0hhbmRsZXIsIGluYWN0aXZlQ29udGV4dHM/OiBDb250ZXh0IHwgQ29udGV4dFtdKTogdm9pZCB7XG5cdFx0TWVzc2FnaW5nLnJlbW92ZU1lc3NhZ2VzKFxuXHRcdFx0KE1lc3NhZ2luZy5nZXRNZXNzYWdlTW9kZWwoKS5nZXREYXRhKCkgYXMgTWVzc2FnZVtdKS5maWx0ZXIoKG1zZykgPT4ge1xuXHRcdFx0XHRjb25zdCB0ZWNobmljYWxEZXRhaWxzID0gKG1zZy5nZXRUZWNobmljYWxEZXRhaWxzKCkgfHwge30pIGFzIHsgdGFibGVJZD86IHN0cmluZzsgZW1wdHlSb3dNZXNzYWdlPzogYm9vbGVhbiB9O1xuXG5cdFx0XHRcdC8vIENoZWNrIGlmIG1zZyB0YXJnZXQgc3RhcnRzIHdpdGggYW55IHBhdGggaW4gdGhlIGluYWN0aXZlQ29udGV4dCBhcnJheVxuXHRcdFx0XHRjb25zdCBjb250ZXh0TWF0Y2hlcyA9IEFycmF5LmlzQXJyYXkoaW5hY3RpdmVDb250ZXh0cylcblx0XHRcdFx0XHQ/IGluYWN0aXZlQ29udGV4dHMuc29tZSgoY29udGV4dCkgPT4gbXNnLmdldFRhcmdldHMoKS5zb21lKCh2YWx1ZSkgPT4gdmFsdWUuc3RhcnRzV2l0aChjb250ZXh0LmdldFBhdGgoKSkpKVxuXHRcdFx0XHRcdDogIWluYWN0aXZlQ29udGV4dHMgfHwgbXNnLmdldFRhcmdldHMoKS5zb21lKCh2YWx1ZSkgPT4gdmFsdWUuc3RhcnRzV2l0aChpbmFjdGl2ZUNvbnRleHRzLmdldFBhdGgoKSkpO1xuXG5cdFx0XHRcdHJldHVybiBjb250ZXh0TWF0Y2hlcyAmJiB0ZWNobmljYWxEZXRhaWxzLmVtcHR5Um93TWVzc2FnZSAmJiB0ZWNobmljYWxEZXRhaWxzLnRhYmxlSWQgPT09IHRoaXMuZ2V0Q29udGVudCgpLmdldElkKCk7XG5cdFx0XHR9KVxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICogQ3JlYXRpb24gb2YgaW5hY3RpdmUgcm93cyBmb3IgdGhlIHRhYmxlIGluIGNyZWF0aW9uIG1vZGUgXCJJbmxpbmVDcmVhdGlvblJvd3NcIi5cblx0ICogQHBhcmFtIGJpbmRpbmcgRGF0YSBsaXN0IGJpbmRpbmdcblx0ICogQHBhcmFtIHRhYmxlIFRoZSB0YWJsZSBiZWluZyBlZGl0ZWRcblx0ICogQHBhcmFtIHJlY3JlYXRlT25lUm93IGB0cnVlYCBpZiB0aGUgY2FsbCBpcyB0byByZWNyZWF0ZSBhbiBlbXB0eUxpbmVcblx0ICogQHBhcmFtIG5ld0lubGluZUNyZWF0aW9uUm93RnJvbVBhc3RlIE51bWJlciBvZiBuZXcgaW5hY3RpdmUgcm93cyB0byBiZSBjcmVhdGVkXG5cdCAqIEBwYXJhbSBmb3JjZUNyZWF0ZWF0RW5kIGB0cnVlYCBpZiB0aGUgbmV3IHJvdyBpcyB0byBiZSBjcmVhdGVkIGF0IHRoZSBlbmQgb2YgdGhlIHRhYmxlXG5cdCAqIEBwYXJhbSBkZWZhdWx0VmFsdWVGdW5jdGlvbkRhdGEgRGVmYXVsdCB2YWx1ZXMgcmV0cmlldmVkIGZyb20gdGhlIERlZmF1bHRWYWx1ZXNGdW5jdGlvbiB0byBiZSBhcHBsaWVkIHRvIHRoZSBuZXcgcm93c1xuXHQgKiBAcmV0dXJucyBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB0byB0aGUgY3JlYXRlZCBjb250ZXh0cyBvciB2b2lkIGlmIHRoZSBjcmVhdGlvbiBmYWlsZWRcblx0ICovXG5cdGFzeW5jIGNyZWF0ZUVtcHR5Um93cyhcblx0XHR0aGlzOiBJVGFibGVCbG9jayAmIEVtcHR5Um93c0hhbmRsZXIsXG5cdFx0YmluZGluZzogT0RhdGFMaXN0QmluZGluZyxcblx0XHR0YWJsZTogTURDVGFibGUsXG5cdFx0cmVjcmVhdGVPbmVSb3cgPSBmYWxzZSxcblx0XHRuZXdJbmxpbmVDcmVhdGlvblJvd0Zyb21QYXN0ZT86IG51bWJlcixcblx0XHRmb3JjZUNyZWF0ZWF0RW5kID0gZmFsc2UsXG5cdFx0ZGVmYXVsdFZhbHVlRnVuY3Rpb25EYXRhPzogb2JqZWN0IHwgdW5kZWZpbmVkXG5cdCk6IFByb21pc2U8dm9pZCB8IENvbnRleHRbXT4ge1xuXHRcdGNvbnN0IGlubGluZUNyZWF0aW9uUm93Q291bnQgPSBuZXdJbmxpbmVDcmVhdGlvblJvd0Zyb21QYXN0ZSA/PyAodGhpcy5nZXRUYWJsZURlZmluaXRpb24oKS5jb250cm9sPy5pbmxpbmVDcmVhdGlvblJvd0NvdW50IHx8IDEpO1xuXHRcdGlmICh0aGlzLmNyZWF0aW5nRW1wdHlSb3dzIHx8IHRoaXMuZ2V0SW5hY3RpdmVDb250ZXh0TnVtYmVyKGJpbmRpbmcpID4gaW5saW5lQ3JlYXRpb25Sb3dDb3VudCkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRjb25zdCBkYXRhID0gQXJyYXkuZnJvbSh7IGxlbmd0aDogaW5saW5lQ3JlYXRpb25Sb3dDb3VudCB9LCAoKSA9PiAoe30pKSxcblx0XHRcdGF0RW5kID0gdGFibGUuZGF0YShcInRhYmxlVHlwZVwiKSAhPT0gXCJSZXNwb25zaXZlVGFibGVcIixcblx0XHRcdGluYWN0aXZlID0gdHJ1ZSxcblx0XHRcdHZpZXcgPSBDb21tb25VdGlscy5nZXRUYXJnZXRWaWV3KHRhYmxlKSxcblx0XHRcdGNvbnRyb2xsZXIgPSB2aWV3LmdldENvbnRyb2xsZXIoKSxcblx0XHRcdGVkaXRGbG93ID0gY29udHJvbGxlci5lZGl0Rmxvdyxcblx0XHRcdGFwcENvbXBvbmVudCA9IENvbW1vblV0aWxzLmdldEFwcENvbXBvbmVudCh0YWJsZSk7XG5cblx0XHR0aGlzLmNyZWF0aW5nRW1wdHlSb3dzID0gdHJ1ZTtcblx0XHR0cnkge1xuXHRcdFx0Y29uc3QgZGF0YUZvckNyZWF0ZSA9IHJlY3JlYXRlT25lUm93ID8gW3t9XSA6IGRhdGE7XG5cdFx0XHRjb25zdCBjb250ZXh0cyA9IGF3YWl0IGVkaXRGbG93LmNyZWF0ZU11bHRpcGxlRG9jdW1lbnRzKFxuXHRcdFx0XHRiaW5kaW5nLFxuXHRcdFx0XHQvLyBkdXJpbmcgYSBsaXZlIGNoYW5nZSwgb25seSAxIG5ldyBkb2N1bWVudCBpcyBjcmVhdGVkXG5cdFx0XHRcdGRhdGFGb3JDcmVhdGUsXG5cdFx0XHRcdC8vIFdoZW4gZWRpdGluZyBhbiBlbXB0eSByb3csIHRoZSBuZXcgZW1wdHkgcm93IGlzIHRvIGJlIGNyZWF0ZWQganVzdCBiZWxvdyBhbmQgbm90IGFib3ZlXG5cdFx0XHRcdHJlY3JlYXRlT25lUm93IHx8IGZvcmNlQ3JlYXRlYXRFbmQgPyB0cnVlIDogYXRFbmQsXG5cdFx0XHRcdGZhbHNlLFxuXHRcdFx0XHRjb250cm9sbGVyLmVkaXRGbG93Lm9uQmVmb3JlQ3JlYXRlLFxuXHRcdFx0XHRpbmFjdGl2ZSxcblx0XHRcdFx0dW5kZWZpbmVkLFxuXHRcdFx0XHRkZWZhdWx0VmFsdWVGdW5jdGlvbkRhdGFcblx0XHRcdCk7XG5cdFx0XHRhcHBDb21wb25lbnQuZ2V0U2lkZUVmZmVjdHNTZXJ2aWNlKCkucmVxdWVzdFNpZGVFZmZlY3RzRm9yTmF2aWdhdGlvblByb3BlcnR5KGJpbmRpbmcuZ2V0UGF0aCgpLCB2aWV3LmdldEJpbmRpbmdDb250ZXh0KCkpO1xuXHRcdFx0Y29udGV4dHM/LmZvckVhY2goYXN5bmMgZnVuY3Rpb24gKGNvbnRleHQ6IENvbnRleHQpIHtcblx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRhd2FpdCBjb250ZXh0LmNyZWF0ZWQoKTtcblx0XHRcdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdFx0XHRpZiAoIShlcnJvciBhcyBDb250ZXh0RXJyb3JUeXBlKS5jYW5jZWxlZCkge1xuXHRcdFx0XHRcdFx0dGhyb3cgZXJyb3I7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHRcdHJldHVybiBjb250ZXh0cztcblx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRMb2cuZXJyb3IoZSBhcyBzdHJpbmcpO1xuXHRcdH0gZmluYWxseSB7XG5cdFx0XHR0aGlzLmNyZWF0aW5nRW1wdHlSb3dzID0gZmFsc2U7XG5cdFx0fVxuXHR9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O01Bd0JxQkEsZ0JBQWdCO0lBQUEsU0FBQUEsaUJBQUE7SUFBQUMsUUFBQSxHQUFBRCxnQkFBQTtJQUFBLElBQUFFLE1BQUEsR0FBQUYsZ0JBQUEsQ0FBQUcsU0FBQTtJQUdwQztBQUNEO0FBQ0E7SUFGQ0QsTUFBQSxDQUtBRSxVQUFVLEdBQVYsU0FBQUEsVUFBVUEsQ0FBQ0MsVUFBb0IsRUFBUTtNQUN0QztJQUFBOztJQUdEO0FBQ0Q7QUFDQTtBQUNBLE9BSEM7SUFBQUgsTUFBQSxDQUlBSSxrQkFBa0IsR0FBbEIsU0FBQUEsa0JBQWtCQSxDQUF1Q0MsUUFBK0IsRUFBUTtNQUMvRixNQUFNQyxLQUFLLEdBQUdELFFBQVEsQ0FBQ0UsU0FBUyxDQUFDLENBQUM7UUFDakNDLGNBQWMsR0FBR0YsS0FBSyxDQUFDRyxpQkFBaUIsQ0FBQyxDQUFZO1FBQ3JEQyxPQUFPLEdBQUdGLGNBQWMsQ0FBQ0csVUFBVSxDQUFDLENBQUM7TUFDdEM7TUFDQSxJQUFJSCxjQUFjLENBQUNJLFVBQVUsQ0FBQyxDQUFDLEVBQUU7UUFDaEMsTUFBTUMsS0FBSyxHQUFHLElBQUksRUFBRUMsVUFBVSxDQUFDLENBQUM7UUFDaEMsSUFBSSxFQUFFQyxlQUFlLENBQUNMLE9BQU8sRUFBc0JHLEtBQUssRUFBRSxJQUFJLENBQUM7TUFDaEU7SUFDRDs7SUFFQTtBQUNEO0FBQ0E7QUFDQSxPQUhDO0lBQUFiLE1BQUEsQ0FJTWdCLHFCQUFxQixHQUEzQixlQUFNQSxxQkFBcUJBLENBRTFCQyxhQUErRCxFQUMvQztNQUNoQixNQUFNQyxnQkFBZ0IsR0FBR0QsYUFBYSxDQUFDRSxZQUFZLENBQUMsU0FBUyxDQUFDO01BQzlEO01BQ0E7TUFDQSxJQUFJLENBQUNKLGVBQWUsQ0FBQ0UsYUFBYSxD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
354
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJFbXB0eVJvd3NIYW5kbGVyIiwiX2V4cG9ydHMiLCJfcHJvdG8iLCJwcm90b3R5cGUiLCJzZXR1cE1peGluIiwiX2Jhc2VDbGFzcyIsIl9vbkZpZWxkTGl2ZUNoYW5nZSIsInVpNUV2ZW50IiwiZmllbGQiLCJnZXRTb3VyY2UiLCJiaW5kaW5nQ29udGV4dCIsImdldEJpbmRpbmdDb250ZXh0IiwiYmluZGluZyIsImdldEJpbmRpbmciLCJpc0luYWN0aXZlIiwidGFibGUiLCJnZXRDb250ZW50IiwiY3JlYXRlRW1wdHlSb3dzIiwiX2hhbmRsZUNyZWF0ZUFjdGl2YXRlIiwiYWN0aXZhdGVFdmVudCIsImFjdGl2YXRlZENvbnRleHQiLCJnZXRQYXJhbWV0ZXIiLCJhcHBDb21wb25lbnQiLCJDb21tb25VdGlscyIsImdldEFwcENvbXBvbmVudCIsImdldFJvd0JpbmRpbmciLCJ2YWxpZGF0ZUVtcHR5Um93IiwicHJldmVudERlZmF1bHQiLCJ0cmFuc2llbnRQYXRoIiwiZ2V0UGF0aCIsInZpZXciLCJnZXRUYXJnZXRWaWV3IiwiY29udHJvbGxlciIsImdldENvbnRyb2xsZXIiLCJlZGl0RmxvdyIsIlByb21pc2UiLCJhbGwiLCJnZXRTaWRlRWZmZWN0c1NlcnZpY2UiLCJyZXF1ZXN0U2lkZUVmZmVjdHNGb3JOYXZpZ2F0aW9uUHJvcGVydHkiLCJjcmVhdGVkIiwicmVzb2x2ZSIsIm9uQWZ0ZXJDcmVhdGUiLCJjb250ZXh0IiwiZSIsIkxvZyIsIndhcm5pbmciLCJjb250ZW50IiwiY29sbGFib3JhdGl2ZURyYWZ0Iiwic2VuZCIsImFjdGlvbiIsIkFjdGl2aXR5IiwiQ3JlYXRlIiwidXBkYXRlTG9ja3NGb3JDb250ZXh0UGF0aCIsImVycm9yIiwiZ2V0RGVmYXVsdFZhbHVlc0Z1bmN0aW9uIiwibGlzdEJpbmRpbmciLCJtb2RlbCIsImdldE1vZGVsIiwibWV0YU1vZGVsIiwiZ2V0TWV0YU1vZGVsIiwibWV0YUNvbnRleHQiLCJnZXRNZXRhQ29udGV4dCIsImdldFJlc29sdmVkUGF0aCIsImxpc3RCaW5kaW5nT2JqZWN0UGF0aCIsImdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyIsImRlZmF1bHRGdW5jT25UYXJnZXRPYmplY3QiLCJ0YXJnZXRPYmplY3QiLCJhbm5vdGF0aW9ucyIsIkNvbW1vbiIsIkRlZmF1bHRWYWx1ZXNGdW5jdGlvbiIsImRlZmF1bHRGdW5jT25UYXJnZXRFbnRpdHlTZXQiLCJ0YXJnZXRFbnRpdHlTZXQiLCJzZXRFbXB0eVJvd3NFbmFibGVkIiwiZW5hYmxlbWVudCIsInNldFByb3BlcnR5IiwibmF2aWdhdGlvblBhdGgiLCJkYXRhIiwiZGVmYXVsdFZhbHVlc0Z1bmN0aW9uIiwidW5kZWZpbmVkIiwicmVnaXN0ZXJUYXJnZXRDYWxsYmFjayIsInVwZGF0ZUVtcHR5Um93cyIsImJpbmQiLCJkZXJlZ2lzdGVyVGFyZ2V0Q2FsbGJhY2siLCJ0YWJsZURlZmF1bHRzUHJvbWlzZSIsInRoZW4iLCJ0YWJsZURlZmF1bHREYXRhIiwic2V0VXBFbXB0eVJvd3MiLCJjYXRjaCIsImJpbmRpbmdIZWFkZXJDb250ZXh0IiwiZ2V0SGVhZGVyQ29udGV4dCIsImlzUmVzb2x2ZWQiLCJpc0xlbmd0aEZpbmFsIiwiY29udGV4dFBhdGgiLCJfZGVsZXRlRW1wdHlSb3dzIiwiX3ZhbGlkYXRlQW5kUmV0cmlldmVCaW5kaW5nIiwiZ2V0VGFibGVEZWZpbml0aW9uIiwiY29udHJvbCIsImNyZWF0aW9uTW9kZSIsIkNyZWF0aW9uTW9kZSIsIklubGluZUNyZWF0aW9uUm93cyIsInVpTW9kZWwiLCJnZXRQcm9wZXJ0eSIsIndhdGNoQmluZGluZyIsImJpbmRQcm9wZXJ0eSIsImZuSGFuZGxlciIsImRldGFjaENoYW5nZSIsImRlc3Ryb3kiLCJhdHRhY2hDaGFuZ2UiLCJnZXRUYWJsZURlZmF1bHRzIiwiVHJhbnNhY3Rpb25IZWxwZXIiLCJnZXREYXRhRnJvbURlZmF1bHRWYWx1ZUZ1bmN0aW9uIiwiY3JlYXRlQnV0dG9uV2FzUHJlc3NlZCIsImFyZ3VtZW50cyIsImxlbmd0aCIsImVtcHR5Um93c0VuYWJsZWQiLCJyZW1vdmVFbXB0eVJvd3NNZXNzYWdlcyIsImdldElzRWRpdGFibGUiLCJpbmxpbmVDcmVhdGlvblJvd3NIaWRkZW5JbkVkaXRNb2RlIiwiaW5hY3RpdmVDb250ZXh0IiwiZ2V0QWxsQ3VycmVudENvbnRleHRzIiwiZmluZCIsInN0YXJ0c1dpdGgiLCJkZWxldGUiLCJnZXRJbmFjdGl2ZUNvbnRleHROdW1iZXIiLCJmaWx0ZXIiLCJyZXF1aXJlZFByb3BlcnRpZXMiLCJhbm5vdGF0aW9uIiwibWlzc2luZ1Byb3BlcnRpZXMiLCJyZXF1aXJlZFByb3BlcnR5IiwiZ2V0T2JqZWN0IiwicmVzb3VyY2VCdW5kbGUiLCJMaWJyYXJ5IiwiZ2V0UmVzb3VyY2VCdW5kbGVGb3IiLCJtZXNzYWdlcyIsImRpc3BsYXllZENvbHVtbiIsIm1pc3NpbmdQcm9wZXJ0eSIsImVycm9yTWVzc2FnZSIsIm1pc3NpbmdDb2x1bW4iLCJjb2x1bW5zIiwidGFibGVDb2x1bW4iLCJyZWxhdGl2ZVBhdGgiLCJwcm9wZXJ0eUluZm9zIiwiaW5jbHVkZXMiLCJnZXRUZXh0IiwiZ2V0Q29sdW1ucyIsIm1kY0NvbHVtbiIsImdldFByb3BlcnR5S2V5IiwibmFtZSIsImdldEhlYWRlciIsImxhYmVsIiwicHVzaCIsIk1lc3NhZ2UiLCJtZXNzYWdlIiwicHJvY2Vzc29yIiwidHlwZSIsIk1lc3NhZ2VUeXBlIiwiRXJyb3IiLCJ0ZWNobmljYWwiLCJwZXJzaXN0ZW50IiwidGVjaG5pY2FsRGV0YWlscyIsInRhYmxlSWQiLCJnZXRJZCIsImVtcHR5Um93TWVzc2FnZSIsInRhcmdldCIsIk1lc3NhZ2luZyIsImFkZE1lc3NhZ2VzIiwiaW5hY3RpdmVDb250ZXh0cyIsInJlbW92ZU1lc3NhZ2VzIiwiZ2V0TWVzc2FnZU1vZGVsIiwiZ2V0RGF0YSIsIm1zZyIsImdldFRlY2huaWNhbERldGFpbHMiLCJjb250ZXh0TWF0Y2hlcyIsIkFycmF5IiwiaXNBcnJheSIsInNvbWUiLCJnZXRUYXJnZXRzIiwidmFsdWUiLCJyZWNyZWF0ZU9uZVJvdyIsIm5ld0lubGluZUNyZWF0aW9uUm93RnJvbVBhc3RlIiwiZm9yY2VDcmVhdGVhdEVuZCIsImRlZmF1bHRWYWx1ZUZ1bmN0aW9uRGF0YSIsImlubGluZUNyZWF0aW9uUm93Q291bnQiLCJjcmVhdGluZ0VtcHR5Um93cyIsImZyb20iLCJhdEVuZCIsImluYWN0aXZlIiwiZGF0YUZvckNyZWF0ZSIsImNvbnRleHRzIiwiY3JlYXRlTXVsdGlwbGVEb2N1bWVudHMiLCJvbkJlZm9yZUNyZWF0ZSIsImZvckVhY2giLCJjYW5jZWxlZCJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiRW1wdHlSb3dzSGFuZGxlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEVudGl0eVNldCwgTmF2aWdhdGlvblByb3BlcnR5IH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzXCI7XG5pbXBvcnQgdHlwZSB7IERlZmF1bHRWYWx1ZXNGdW5jdGlvbiB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvQ29tbW9uXCI7XG5pbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCB7IHR5cGUgSUludGVyZmFjZVdpdGhNaXhpbiB9IGZyb20gXCJzYXAvZmUvYmFzZS9DbGFzc1N1cHBvcnRcIjtcbmltcG9ydCBDb21tb25VdGlscyBmcm9tIFwic2FwL2ZlL2NvcmUvQ29tbW9uVXRpbHNcIjtcbmltcG9ydCB7IEFjdGl2aXR5IH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL2NvbGxhYm9yYXRpb24vQ29sbGFib3JhdGlvbkNvbW1vblwiO1xuaW1wb3J0IFRyYW5zYWN0aW9uSGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9lZGl0Rmxvdy9UcmFuc2FjdGlvbkhlbHBlclwiO1xuaW1wb3J0IHsgQ3JlYXRpb25Nb2RlIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWFuaWZlc3RTZXR0aW5nc1wiO1xuaW1wb3J0IHsgZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWV0YU1vZGVsQ29udmVydGVyXCI7XG5pbXBvcnQgdHlwZSB7IEFubm90YXRpb25UYWJsZUNvbHVtbiB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0NvbW1vbi90YWJsZS9Db2x1bW5zXCI7XG5pbXBvcnQgdHlwZSBVSTVFdmVudCBmcm9tIFwic2FwL3VpL2Jhc2UvRXZlbnRcIjtcbmltcG9ydCB0eXBlIENvbnRyb2wgZnJvbSBcInNhcC91aS9jb3JlL0NvbnRyb2xcIjtcbmltcG9ydCBMaWJyYXJ5IGZyb20gXCJzYXAvdWkvY29yZS9MaWJcIjtcbmltcG9ydCBNZXNzYWdpbmcgZnJvbSBcInNhcC91aS9jb3JlL01lc3NhZ2luZ1wiO1xuaW1wb3J0IE1lc3NhZ2UgZnJvbSBcInNhcC91aS9jb3JlL21lc3NhZ2UvTWVzc2FnZVwiO1xuaW1wb3J0IE1lc3NhZ2VUeXBlIGZyb20gXCJzYXAvdWkvY29yZS9tZXNzYWdlL01lc3NhZ2VUeXBlXCI7XG5pbXBvcnQgdHlwZSBNRENUYWJsZSBmcm9tIFwic2FwL3VpL21kYy9UYWJsZVwiO1xuaW1wb3J0IHR5cGUgTURDQ29sdW1uIGZyb20gXCJzYXAvdWkvbWRjL3RhYmxlL0NvbHVtblwiO1xuaW1wb3J0IHR5cGUgSlNPTk1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvanNvbi9KU09OTW9kZWxcIjtcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9Db250ZXh0XCI7XG5pbXBvcnQgdHlwZSB7IENvbnRleHRFcnJvclR5cGUgfSBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L0NvbnRleHRcIjtcbmltcG9ydCB0eXBlIE9EYXRhTGlzdEJpbmRpbmcgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YUxpc3RCaW5kaW5nXCI7XG5pbXBvcnQgeyB0eXBlIElUYWJsZUJsb2NrIH0gZnJvbSBcIi4uL1RhYmxlQVBJXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVtcHR5Um93c0hhbmRsZXIgaW1wbGVtZW50cyBJSW50ZXJmYWNlV2l0aE1peGluIHtcblx0Y3JlYXRpbmdFbXB0eVJvd3M/OiBib29sZWFuO1xuXG5cdC8qKlxuXHQgKiBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gdGhlIHRhYmxlJ3MgZGVmYXVsdCB2YWx1ZXMuXG5cdCAqL1xuXHRwdWJsaWMgdGFibGVEZWZhdWx0c1Byb21pc2U/OiBQcm9taXNlPG9iamVjdD47XG5cblx0c2V0dXBNaXhpbihfYmFzZUNsYXNzOiBGdW5jdGlvbik6IHZvaWQge1xuXHRcdC8vIFRoaXMgbWV0aG9kIGlzIG5lZWRlZCB0byBpbXBsZW1lbnQgaW50ZXJmYWNlIElJbnRlcmZhY2VXaXRoTWl4aW5cblx0fVxuXG5cdC8qKlxuXHQgKiBIYW5kbGVyIGZvciB0aGUgb25GaWVsZExpdmVDaGFuZ2UgZXZlbnQuXG5cdCAqIEBwYXJhbSB1aTVFdmVudCBUaGUgZXZlbnQgb2JqZWN0IHBhc3NlZCBieSB0aGUgb25GaWVsZExpdmVDaGFuZ2UgZXZlbnRcblx0ICovXG5cdF9vbkZpZWxkTGl2ZUNoYW5nZSh0aGlzOiBJVGFibGVCbG9jayAmIEVtcHR5Um93c0hhbmRsZXIsIHVpNUV2ZW50OiBVSTVFdmVudDx7fSwgQ29udHJvbD4pOiB2b2lkIHtcblx0XHRjb25zdCBmaWVsZCA9IHVpNUV2ZW50LmdldFNvdXJjZSgpLFxuXHRcdFx0YmluZGluZ0NvbnRleHQgPSBmaWVsZC5nZXRCaW5kaW5nQ29udGV4dCgpIGFzIENvbnRleHQsXG5cdFx0XHRiaW5kaW5nID0gYmluZGluZ0NvbnRleHQuZ2V0QmluZGluZygpO1xuXHRcdC8vIGNyZWF0aW9uIG9mIGEgbmV3IGluYWN0aXZlIHJvdyBpZiByZWxldmFudFxuXHRcdGlmIChiaW5kaW5nQ29udGV4dC5pc0luYWN0aXZlKCkpIHtcblx0XHRcdGNvbnN0IHRhYmxlID0gdGhpcz8uZ2V0Q29udGVudCgpO1xuXHRcdFx0dGhpcz8uY3JlYXRlRW1wdHlSb3dzKGJpbmRpbmcgYXMgT0RhdGFMaXN0QmluZGluZywgdGFibGUsIHRydWUpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBIYW5kbGVzIHRoZSBDcmVhdGVBY3RpdmF0ZSBldmVudCBmcm9tIHRoZSBPRGF0YUxpc3RCaW5kaW5nLlxuXHQgKiBAcGFyYW0gYWN0aXZhdGVFdmVudCBUaGUgZXZlbnQgc2VudCBieSB0aGUgYmluZGluZ1xuXHQgKi9cblx0YXN5bmMgX2hhbmRsZUNyZWF0ZUFjdGl2YXRlKFxuXHRcdHRoaXM6IElUYWJsZUJsb2NrICYgRW1wdHlSb3dzSGFuZGxlcixcblx0XHRhY3RpdmF0ZUV2ZW50OiBVSTVFdmVudDx7IGNvbnRleHQ6IENvbnRleHQgfSwgT0RhdGFMaXN0QmluZGluZz5cblx0KTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0Y29uc3QgYWN0aXZhdGVkQ29udGV4dCA9IGFjdGl2YXRlRXZlbnQuZ2V0UGFyYW1ldGVyKFwiY29udGV4dFwiKTtcblx0XHQvLyB3ZSBzdGFydCBieSBhc2tpbmcgdG8gcmVjcmVhdGUgYW4gZW1wdHkgcm93IChpZiBsaXZlIGNoYW5nZSBoYXMgYWxyZWFkeSBkb25lIGl0IHRoaXMgd29uJ3QgaGF2ZSBhbnkgZWZmZWN0KVxuXHRcdC8vIGJ1dCB3ZSBkbyBub3Qgd2FpdFxuXHRcdHRoaXMuY3JlYXRlRW1wdHlSb3dzKGFjdGl2YXRlRXZlbnQuZ2V0U291cmNlKCksIHRoaXMuZ2V0Q29udGVudCgpLCB0cnVlKTtcblx0XHRjb25zdCB0YWJsZSA9IHRoaXMuZ2V0Q29udGVudCgpO1xuXHRcdGNvbnN0IGFwcENvbXBvbmVudCA9IENvbW1vblV0aWxzLmdldEFwcENvbXBvbmVudCh0YWJsZSk7XG5cdFx0Y29uc3QgYmluZGluZyA9IHRhYmxlLmdldFJvd0JpbmRpbmcoKTtcblx0XHRpZiAoIXRoaXMudmFsaWRhdGVFbXB0eVJvdyhhY3RpdmF0ZWRDb250ZXh0KSkge1xuXHRcdFx0YWN0aXZhdGVFdmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHR0cnkge1xuXHRcdFx0Y29uc3QgdHJhbnNpZW50UGF0aCA9IGFjdGl2YXRlZENvbnRleHQuZ2V0UGF0aCgpLFxuXHRcdFx0XHR2aWV3ID0gQ29tbW9uVXRpbHMuZ2V0VGFyZ2V0Vmlldyh0aGlzKSxcblx0XHRcdFx0Y29udHJvbGxlciA9IHZpZXcuZ2V0Q29udHJvbGxlcigpLFxuXHRcdFx0XHRlZGl0RmxvdyA9IGNvbnRyb2xsZXIuZWRpdEZsb3c7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRhd2FpdCBQcm9taXNlLmFsbChbXG5cdFx0XHRcdFx0YXBwQ29tcG9uZW50XG5cdFx0XHRcdFx0XHQuZ2V0U2lkZUVmZmVjdHNTZXJ2aWNlKClcblx0XHRcdFx0XHRcdC5yZXF1ZXN0U2lkZUVmZmVjdHNGb3JOYXZpZ2F0aW9uUHJvcGVydHkoYmluZGluZy5nZXRQYXRoKCksIHZpZXcuZ2V0QmluZGluZ0NvbnRleHQoKSksXG5cdFx0XHRcdFx0YWN0aXZhdGVkQ29udGV4dC5jcmVhdGVkPy4oKSA/PyBQcm9taXNlLnJlc29sdmUoKVxuXHRcdFx0XHRdKTtcblx0XHRcdFx0YXdhaXQgZWRpdEZsb3cub25BZnRlckNyZWF0ZSh7IGNvbnRleHQ6IGFjdGl2YXRlZENvbnRleHQgfSk7XG5cdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdExvZy53YXJuaW5nKGBGYWlsZWQgdG8gYWN0aXZhdGUgY29udGV4dCAke2FjdGl2YXRlZENvbnRleHQuZ2V0UGF0aCgpfWApO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBjb250ZW50ID0gYWN0aXZhdGVkQ29udGV4dC5nZXRQYXRoKCk7XG5cdFx0XHRjb25zdCBjb2xsYWJvcmF0aXZlRHJhZnQgPSB2aWV3LmdldENvbnRyb2xsZXIoKS5jb2xsYWJvcmF0aXZlRHJhZnQ7XG5cdFx0XHQvLyBTZW5kIG5vdGlmaWNhdGlvbiB0byBvdGhlciB1c2VycyBvbmx5IGFmdGVyIHRoZSBjcmVhdGlvbiBoYXMgYmVlbiBmaW5hbGl6ZWRcblx0XHRcdGNvbGxhYm9yYXRpdmVEcmFmdC5zZW5kKHsgYWN0aW9uOiBBY3Rpdml0eS5DcmVhdGUsIGNvbnRlbnQgfSk7XG5cdFx0XHQvLyBTaW5jZSB0aGUgcGF0aCBvZiB0aGUgY29udGV4dCBoYXMgY2hhbmdlZCBkdXJpbmcgYWN0aXZhdGlvbiwgd2UgbmVlZCB0byB1cGRhdGUgYWxsIGNvbGxhYm9yYXRpb24gbG9ja3Ncblx0XHRcdC8vIHRoYXQgd2VyZSB1c2luZyB0aGUgdHJhbnNpZW50IHBhdGhcblx0XHRcdGNvbGxhYm9yYXRpdmVEcmFmdC51cGRhdGVMb2Nrc0ZvckNvbnRleHRQYXRoKHRyYW5zaWVudFBhdGgsIGFjdGl2YXRlZENvbnRleHQuZ2V0UGF0aCgpKTtcblx0XHR9IGNhdGNoIChlcnJvcikge1xuXHRcdFx0TG9nLmVycm9yKFwiRmFpbGVkIHRvIGFjdGl2YXRlIG5ldyByb3cgLVwiLCBlcnJvciBhcyBFcnJvcik7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEdldCB0aGUgZGVmYXVsdCB2YWx1ZXMgZnJvbSB0aGUgRGVmYXVsdFZhbHVlcyBmdW5jdGlvbi5cblx0ICogQHBhcmFtIGxpc3RCaW5kaW5nIFRoZSBjdXJyZW50IGxpc3QgYmluZGluZ1xuXHQgKiBAcmV0dXJucyBUaGUgRGVmYXVsdFZhbHVlcyBmdW5jdGlvbiAob3IgdW5kZWZpbmVkIGlmIG5vIGZ1bmN0aW9uIGlzIGZvdW5kKVxuXHQgKi9cblx0Z2V0RGVmYXVsdFZhbHVlc0Z1bmN0aW9uKGxpc3RCaW5kaW5nOiBPRGF0YUxpc3RCaW5kaW5nKTogRGVmYXVsdFZhbHVlc0Z1bmN0aW9uIHwgdW5kZWZpbmVkIHtcblx0XHRjb25zdCBtb2RlbCA9IGxpc3RCaW5kaW5nLmdldE1vZGVsKCk7XG5cdFx0Y29uc3QgbWV0YU1vZGVsID0gbW9kZWwuZ2V0TWV0YU1vZGVsKCk7XG5cdFx0Y29uc3QgbWV0YUNvbnRleHQgPSBtZXRhTW9kZWwuZ2V0TWV0YUNvbnRleHQobGlzdEJpbmRpbmcuZ2V0UmVzb2x2ZWRQYXRoKCkgYXMgc3RyaW5nKTtcblx0XHRjb25zdCBsaXN0QmluZGluZ09iamVjdFBhdGggPSBnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMobWV0YUNvbnRleHQpO1xuXG5cdFx0Y29uc3QgZGVmYXVsdEZ1bmNPblRhcmdldE9iamVjdCA9IChsaXN0QmluZGluZ09iamVjdFBhdGgudGFyZ2V0T2JqZWN0IGFzIE5hdmlnYXRpb25Qcm9wZXJ0eSB8IEVudGl0eVNldCkuYW5ub3RhdGlvbnMuQ29tbW9uXG5cdFx0XHQ/LkRlZmF1bHRWYWx1ZXNGdW5jdGlvbjtcblx0XHRjb25zdCBkZWZhdWx0RnVuY09uVGFyZ2V0RW50aXR5U2V0ID0gKGxpc3RCaW5kaW5nT2JqZWN0UGF0aC50YXJnZXRFbnRpdHlTZXQgYXMgRW50aXR5U2V0IHwgdW5kZWZpbmVkKT8uYW5ub3RhdGlvbnMuQ29tbW9uXG5cdFx0XHQ/LkRlZmF1bHRWYWx1ZXNGdW5jdGlvbjtcblxuXHRcdHJldHVybiBkZWZhdWx0RnVuY09uVGFyZ2V0T2JqZWN0ID8/IGRlZmF1bHRGdW5jT25UYXJnZXRFbnRpdHlTZXQ7XG5cdH1cblxuXHQvKipcblx0ICogRW1wdHlSb3dzRW5hYmxlZCBzZXR0ZXIuXG5cdCAqIEBwYXJhbSBlbmFibGVtZW50XG5cdCAqL1xuXHRzZXRFbXB0eVJvd3NFbmFibGVkKHRoaXM6IElUYWJsZUJsb2NrICYgRW1wdHlSb3dzSGFuZGxlciwgZW5hYmxlbWVudDogYm9vbGVhbik6IHZvaWQge1xuXHRcdHRoaXMuc2V0UHJvcGVydHkoXCJlbXB0eVJvd3NFbmFibGVkXCIsIGVuYWJsZW1lbnQpO1xuXHRcdGNvbnN0IG5hdmlnYXRpb25QYXRoID0gdGhpcy5nZXRDb250ZW50KCkuZGF0YSgpLm5hdmlnYXRpb25QYXRoLFxuXHRcdFx0YXBwQ29tcG9uZW50ID0gQ29tbW9uVXRpbHMuZ2V0QXBwQ29tcG9uZW50KHRoaXMuZ2V0Q29udGVudCgpKTtcblx0XHRpZiAoZW5hYmxlbWVudCkge1xuXHRcdFx0Y29uc3QgbGlzdEJpbmRpbmcgPSB0aGlzLmdldENvbnRlbnQoKS5nZXRSb3dCaW5kaW5nKCk7XG5cdFx0XHRjb25zdCBkZWZhdWx0VmFsdWVzRnVuY3Rpb24gPSBsaXN0QmluZGluZz8uZ2V0UmVzb2x2ZWRQYXRoKCkgPyB0aGlzLmdldERlZmF1bHRWYWx1ZXNGdW5jdGlvbihsaXN0QmluZGluZykgOiB1bmRlZmluZWQ7XG5cdFx0XHRpZiAoZGVmYXVsdFZhbHVlc0Z1bmN0aW9uKSB7XG5cdFx0XHRcdGFwcENvbXBvbmVudC5nZXRTaWRlRWZmZWN0c1NlcnZpY2UoKS5yZWdpc3RlclRhcmdldENhbGxiYWNrKG5hdmlnYXRpb25QYXRoLCB0aGlzLnVwZGF0ZUVtcHR5Um93cy5iaW5kKHRoaXMpKTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0YXBwQ29tcG9uZW50LmdldFNpZGVFZmZlY3RzU2VydmljZSgpLmRlcmVnaXN0ZXJUYXJnZXRDYWxsYmFjayhuYXZpZ2F0aW9uUGF0aCk7XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXMudGFibGVEZWZhdWx0c1Byb21pc2UpIHtcblx0XHRcdHRoaXMudGFibGVEZWZhdWx0c1Byb21pc2Vcblx0XHRcdFx0LnRoZW4oKHRhYmxlRGVmYXVsdERhdGEpID0+IHtcblx0XHRcdFx0XHR0aGlzLnNldFVwRW1wdHlSb3dzKHRoaXMuZ2V0Q29udGVudCgpLCBmYWxzZSwgdGFibGVEZWZhdWx0RGF0YSk7XG5cdFx0XHRcdFx0cmV0dXJuIHRhYmxlRGVmYXVsdERhdGE7XG5cdFx0XHRcdH0pXG5cdFx0XHRcdC5jYXRjaCgoZXJyb3IpID0+IHtcblx0XHRcdFx0XHRMb2cuZXJyb3IoXCJFcnJvciB3aGlsZSBzZXR0aW5nIHVwIGVtcHR5IHJvd3M6XCIsIGVycm9yKTtcblx0XHRcdFx0fSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuc2V0VXBFbXB0eVJvd3ModGhpcy5nZXRDb250ZW50KCkpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBSZW1vdmUgYW5kIHJlY3JlYXRlIHRoZSBlbXB0eSByb3dzIGluIG9yZGVyIHRvIGdldCBhbnkgdXBkYXRlZCBkZWZhdWx0IHZhbHVlcy5cblx0ICpcblx0ICovXG5cdGFzeW5jIHVwZGF0ZUVtcHR5Um93cyh0aGlzOiBJVGFibGVCbG9jayAmIEVtcHR5Um93c0hhbmRsZXIpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRjb25zdCB0YWJsZSA9IHRoaXMuZ2V0Q29udGVudCgpO1xuXHRcdGNvbnN0IGJpbmRpbmcgPSB0YWJsZS5nZXRSb3dCaW5kaW5nKCk7XG5cdFx0Y29uc3QgYmluZGluZ0hlYWRlckNvbnRleHQgPSBiaW5kaW5nLmdldEhlYWRlckNvbnRleHQoKTtcblx0XHRpZiAoYmluZGluZyAmJiBiaW5kaW5nLmlzUmVzb2x2ZWQoKSAmJiBiaW5kaW5nLmlzTGVuZ3RoRmluYWwoKSAmJiBiaW5kaW5nSGVhZGVyQ29udGV4dCkge1xuXHRcdFx0Y29uc3QgY29udGV4dFBhdGggPSBiaW5kaW5nSGVhZGVyQ29udGV4dC5nZXRQYXRoKCk7XG5cdFx0XHR0aGlzLl9kZWxldGVFbXB0eVJvd3MoYmluZGluZywgY29udGV4dFBhdGgpO1xuXHRcdFx0YXdhaXQgdGhpcy5jcmVhdGVFbXB0eVJvd3MoYmluZGluZywgdGFibGUpO1xuXHRcdH1cblx0XHRyZXR1cm47XG5cdH1cblxuXHQvKipcblx0ICogSGVscGVyIGZ1bmN0aW9uIHRvIHBlcmZvcm0gY29tbW9uIGNoZWNrcyBmb3IgdGFibGUgZGVmYXVsdHMgYW5kIGVtcHR5IHJvd3Mgc2V0dXAuXG5cdCAqIEBwYXJhbSB0YWJsZSBUaGUgdGFibGUgYmVpbmcgcHJvY2Vzc2VkXG5cdCAqIEByZXR1cm5zIFRoZSBiaW5kaW5nIG9iamVjdCBpZiBjaGVja3MgcGFzcywgb3IgdW5kZWZpbmVkIGlmIGNoZWNrcyBmYWlsXG5cdCAqL1xuXHRwcml2YXRlIGFzeW5jIF92YWxpZGF0ZUFuZFJldHJpZXZlQmluZGluZyhcblx0XHR0aGlzOiBJVGFibGVCbG9jayAmIEVtcHR5Um93c0hhbmRsZXIsXG5cdFx0dGFibGU6IE1EQ1RhYmxlXG5cdCk6IFByb21pc2U8T0RhdGFMaXN0QmluZGluZyB8IHVuZGVmaW5lZD4ge1xuXHRcdGlmICh0aGlzLmdldFRhYmxlRGVmaW5pdGlvbigpLmNvbnRyb2w/LmNyZWF0aW9uTW9kZSAhPT0gQ3JlYXRpb25Nb2RlLklubGluZUNyZWF0aW9uUm93cykge1xuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHR9XG5cblx0XHRjb25zdCB1aU1vZGVsID0gdGFibGUuZ2V0TW9kZWwoXCJ1aVwiKSBhcyBKU09OTW9kZWwgfCB1bmRlZmluZWQ7XG5cdFx0aWYgKCF1aU1vZGVsKSB7XG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdH1cblxuXHRcdGlmICh1aU1vZGVsLmdldFByb3BlcnR5KFwiL2lzRWRpdGFibGVQZW5kaW5nXCIpKSB7XG5cdFx0XHQvLyBXYWl0IHVudGlsIHRoZSBlZGl0IG1vZGUgY29tcHV0YXRpb24gaXMgY29tcGxldGVcblx0XHRcdGNvbnN0IHdhdGNoQmluZGluZyA9IHVpTW9kZWwuYmluZFByb3BlcnR5KFwiL2lzRWRpdGFibGVQZW5kaW5nXCIpO1xuXHRcdFx0YXdhaXQgbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUpID0+IHtcblx0XHRcdFx0Y29uc3QgZm5IYW5kbGVyID0gKCk6IHZvaWQgPT4ge1xuXHRcdFx0XHRcdHdhdGNoQmluZGluZy5kZXRhY2hDaGFuZ2UoZm5IYW5kbGVyKTtcblx0XHRcdFx0XHR3YXRjaEJpbmRpbmcuZGVzdHJveSgpO1xuXHRcdFx0XHRcdHJlc29sdmUoKTtcblx0XHRcdFx0fTtcblx0XHRcdFx0d2F0Y2hCaW5kaW5nLmF0dGFjaENoYW5nZShmbkhhbmRsZXIpO1xuXHRcdFx0fSk7XG5cdFx0fVxuXG5cdFx0Y29uc3QgYmluZGluZyA9IHRhYmxlLmdldFJvd0JpbmRpbmcoKSBhcyBPRGF0YUxpc3RCaW5kaW5nIHwgdW5kZWZpbmVkO1xuXG5cdFx0aWYgKCFiaW5kaW5nKSB7XG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdH1cblx0XHRyZXR1cm4gYmluZGluZztcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSB0YWJsZSBkZWZhdWx0cyBieSB2YWxpZGF0aW5nIGFuZCByZXRyaWV2aW5nIHRoZSBiaW5kaW5nLCB0aGVuIGZldGNoaW5nIGRhdGEgZnJvbSB0aGUgRGVmYXVsdFZhbHVlRnVuY3Rpb24uXG5cdCAqIEBwYXJhbSB0YWJsZSBUaGUgdGFibGUgYmVpbmcgcHJvY2Vzc2VkXG5cdCAqIEByZXR1cm5zIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHRvIGFuIG9iamVjdCBjb250YWluaW5nIHRoZSBkZWZhdWx0IHZhbHVlcywgb3IgdW5kZWZpbmVkIGlmIG5vIGJpbmRpbmcgaXMgYXZhaWxhYmxlIG9yIHRoZSBEZWZhdWx0VmFsdWVGdW5jdGlvbiByZXR1cm5zIG5vIGRhdGFcblx0ICovXG5cdGFzeW5jIGdldFRhYmxlRGVmYXVsdHModGhpczogSVRhYmxlQmxvY2sgJiBFbXB0eVJvd3NIYW5kbGVyLCB0YWJsZTogTURDVGFibGUpOiBQcm9taXNlPG9iamVjdCB8IHVuZGVmaW5lZD4ge1xuXHRcdGNvbnN0IGJpbmRpbmcgPSBhd2FpdCB0aGlzLl92YWxpZGF0ZUFuZFJldHJpZXZlQmluZGluZyh0YWJsZSk7XG5cdFx0aWYgKCFiaW5kaW5nKSByZXR1cm4gdW5kZWZpbmVkO1xuXG5cdFx0Y29uc3QgYXBwQ29tcG9uZW50ID0gQ29tbW9uVXRpbHMuZ2V0QXBwQ29tcG9uZW50KENvbW1vblV0aWxzLmdldFRhcmdldFZpZXcodGFibGUpKTtcblx0XHRyZXR1cm4gYXBwQ29tcG9uZW50ID8gVHJhbnNhY3Rpb25IZWxwZXIuZ2V0RGF0YUZyb21EZWZhdWx0VmFsdWVGdW5jdGlvbihiaW5kaW5nLCBhcHBDb21wb25lbnQpIDogdW5kZWZpbmVkO1xuXHR9XG5cblx0YXN5bmMgc2V0VXBFbXB0eVJvd3MoXG5cdFx0dGhpczogSVRhYmxlQmxvY2sgJiBFbXB0eVJvd3NIYW5kbGVyLFxuXHRcdHRhYmxlOiBNRENUYWJsZSxcblx0XHRjcmVhdGVCdXR0b25XYXNQcmVzc2VkID0gZmFsc2UsXG5cdFx0dGFibGVEZWZhdWx0RGF0YSA9IHt9XG5cdCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGNvbnN0IGJpbmRpbmcgPSBhd2FpdCB0aGlzLl92YWxpZGF0ZUFuZFJldHJpZXZlQmluZGluZyh0YWJsZSk7XG5cdFx0aWYgKCFiaW5kaW5nKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGNvbnN0IGJpbmRpbmdIZWFkZXJDb250ZXh0ID0gYmluZGluZy5nZXRIZWFkZXJDb250ZXh0KCk7XG5cdFx0aWYgKGJpbmRpbmcgJiYgYmluZGluZy5pc1Jlc29sdmVkKCkgJiYgYmluZGluZy5pc0xlbmd0aEZpbmFsKCkgJiYgYmluZGluZ0hlYWRlckNvbnRleHQpIHtcblx0XHRcdGNvbnN0IGNvbnRleHRQYXRoID0gYmluZGluZ0hlYWRlckNvbnRleHQuZ2V0UGF0aCgpO1xuXHRcdFx0aWYgKCF0aGlzLmVtcHR5Um93c0VuYWJsZWQpIHtcblx0XHRcdFx0dGhpcy5yZW1vdmVFbXB0eVJvd3NNZXNzYWdlcygpO1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5fZGVsZXRlRW1wdHlSb3dzKGJpbmRpbmcsIGNvbnRleHRQYXRoKTtcblx0XHRcdH1cblx0XHRcdGlmICghQ29tbW9uVXRpbHMuZ2V0SXNFZGl0YWJsZSh0YWJsZSkpIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0aWYgKFxuXHRcdFx0XHR0aGlzLmdldFRhYmxlRGVmaW5pdGlvbigpLmNvbnRyb2w/LmlubGluZUNyZWF0aW9uUm93c0hpZGRlbkluRWRpdE1vZGUgJiZcblx0XHRcdFx0IXRhYmxlLmdldEJpbmRpbmdDb250ZXh0KFwicGFnZUludGVybmFsXCIpPy5nZXRQcm9wZXJ0eShcImNyZWF0ZU1vZGVcIikgJiZcblx0XHRcdFx0IWNyZWF0ZUJ1dHRvbldhc1ByZXNzZWRcblx0XHRcdCkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBpbmFjdGl2ZUNvbnRleHQgPSBiaW5kaW5nLmdldEFsbEN1cnJlbnRDb250ZXh0cygpLmZpbmQoZnVuY3Rpb24gKGNvbnRleHQpIHtcblx0XHRcdFx0Ly8gd2hlbiB0aGlzIGlzIGNhbGxlZCBmcm9tIGNvbnRyb2xsZXIgY29kZSB3ZSBuZWVkIHRvIGNoZWNrIHRoYXQgaW5hY3RpdmUgY29udGV4dHMgYXJlIHN0aWxsIHJlbGF0aXZlIHRvIHRoZSBjdXJyZW50IHRhYmxlIGNvbnRleHRcblx0XHRcdFx0cmV0dXJuIGNvbnRleHQuaXNJbmFjdGl2ZSgpICYmIGNvbnRleHQuZ2V0UGF0aCgpLnN0YXJ0c1dpdGgoY29udGV4dFBhdGgpO1xuXHRcdFx0fSk7XG5cdFx0XHRpZiAoIWluYWN0aXZlQ29udGV4dCkge1xuXHRcdFx0XHR0aGlzLnJlbW92ZUVtcHR5Um93c01lc3NhZ2VzKCk7XG5cdFx0XHRcdGF3YWl0IHRoaXMuY3JlYXRlRW1wdHlSb3dzKGJpbmRpbmcsIHRhYmxlLCBmYWxzZSwgdW5kZWZpbmVkLCBmYWxzZSwgdGFibGVEZWZhdWx0RGF0YSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIERlbGV0ZXMgaW5hY3RpdmUgcm93cyBmcm9tIHRoZSB0YWJsZSBsaXN0QmluZGluZy5cblx0ICogQHBhcmFtIGJpbmRpbmdcblx0ICogQHBhcmFtIGNvbnRleHRQYXRoXG5cdCAqL1xuXHRfZGVsZXRlRW1wdHlSb3dzKGJpbmRpbmc6IE9EYXRhTGlzdEJpbmRpbmcsIGNvbnRleHRQYXRoOiBzdHJpbmcpOiB2b2lkIHtcblx0XHRmb3IgKGNvbnN0IGNvbnRleHQgb2YgYmluZGluZy5nZXRBbGxDdXJyZW50Q29udGV4dHMoKSkge1xuXHRcdFx0aWYgKGNvbnRleHQuaXNJbmFjdGl2ZSgpICYmIGNvbnRleHQuZ2V0UGF0aCgpLnN0YXJ0c1dpdGgoY29udGV4dFBhdGgpKSB7XG5cdFx0XHRcdGNvbnRleHQuZGVsZXRlKCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFJldHVybnMgdGhlIGN1cnJlbnQgbnVtYmVyIG9mIGluYWN0aXZlIGNvbnRleHRzIHdpdGhpbiB0aGUgbGlzdCBiaW5kaW5nLlxuXHQgKiBAcGFyYW0gYmluZGluZyBEYXRhIGxpc3QgYmluZGluZ1xuXHQgKiBAcmV0dXJucyBUaGUgbnVtYmVyIG9mIGluYWN0aXZlIGNvbnRleHRzXG5cdCAqL1xuXHRnZXRJbmFjdGl2ZUNvbnRleHROdW1iZXIoYmluZGluZzogT0RhdGFMaXN0QmluZGluZyk6IG51bWJlciB7XG5cdFx0cmV0dXJuIGJpbmRpbmcuZ2V0QWxsQ3VycmVudENvbnRleHRzKCkuZmlsdGVyKChjb250ZXh0KSA9PiBjb250ZXh0LmlzSW5hY3RpdmUoKSkubGVuZ3RoO1xuXHR9XG5cblx0LyoqXG5cdCAqIEhhbmRsZXMgdGhlIHZhbGlkYXRpb24gb2YgdGhlIGVtcHR5IHJvdy5cblx0ICogQHBhcmFtIGNvbnRleHQgVGhlIGNvbnRleHQgb2YgdGhlIGVtcHR5IHJvd1xuXHQgKiBAcmV0dXJucyBUaGUgdmFsaWRhdGlvbiBzdGF0dXNcblx0ICovXG5cdHZhbGlkYXRlRW1wdHlSb3codGhpczogSVRhYmxlQmxvY2sgJiBFbXB0eVJvd3NIYW5kbGVyLCBjb250ZXh0OiBDb250ZXh0KTogYm9vbGVhbiB7XG5cdFx0Y29uc3QgcmVxdWlyZWRQcm9wZXJ0aWVzID0gdGhpcy5nZXRUYWJsZURlZmluaXRpb24oKS5hbm5vdGF0aW9uLnJlcXVpcmVkUHJvcGVydGllcztcblx0XHRpZiAocmVxdWlyZWRQcm9wZXJ0aWVzPy5sZW5ndGgpIHtcblx0XHRcdHRoaXMucmVtb3ZlRW1wdHlSb3dzTWVzc2FnZXMoY29udGV4dCk7XG5cdFx0XHRjb25zdCBtaXNzaW5nUHJvcGVydGllcyA9IHJlcXVpcmVkUHJvcGVydGllcy5maWx0ZXIoKHJlcXVpcmVkUHJvcGVydHkpID0+ICFjb250ZXh0LmdldE9iamVjdChyZXF1aXJlZFByb3BlcnR5KSk7XG5cdFx0XHRpZiAobWlzc2luZ1Byb3BlcnRpZXMubGVuZ3RoKSB7XG5cdFx0XHRcdGNvbnN0IHJlc291cmNlQnVuZGxlID0gTGlicmFyeS5nZXRSZXNvdXJjZUJ1bmRsZUZvcihcInNhcC5mZS5tYWNyb3NcIikhO1xuXHRcdFx0XHRjb25zdCBtZXNzYWdlczogTWVzc2FnZVtdID0gW107XG5cdFx0XHRcdGxldCBkaXNwbGF5ZWRDb2x1bW46IE1EQ0NvbHVtbiB8IHVuZGVmaW5lZDtcblx0XHRcdFx0Zm9yIChjb25zdCBtaXNzaW5nUHJvcGVydHkgb2YgbWlzc2luZ1Byb3BlcnRpZXMpIHtcblx0XHRcdFx0XHRsZXQgZXJyb3JNZXNzYWdlOiBzdHJpbmc7XG5cdFx0XHRcdFx0Y29uc3QgbWlzc2luZ0NvbHVtbiA9IHRoaXMuZ2V0VGFibGVEZWZpbml0aW9uKCkuY29sdW1ucy5maW5kKFxuXHRcdFx0XHRcdFx0KHRhYmxlQ29sdW1uKSA9PlxuXHRcdFx0XHRcdFx0XHQodGFibGVDb2x1bW4gYXMgQW5ub3RhdGlvblRhYmxlQ29sdW1uKS5yZWxhdGl2ZVBhdGggPT09IG1pc3NpbmdQcm9wZXJ0eSB8fFxuXHRcdFx0XHRcdFx0XHQodGFibGVDb2x1bW4ucHJvcGVydHlJbmZvcyAmJiB0YWJsZUNvbHVtbi5wcm9wZXJ0eUluZm9zLmluY2x1ZGVzKG1pc3NpbmdQcm9wZXJ0eSkpXG5cdFx0XHRcdFx0KTtcblxuXHRcdFx0XHRcdGlmICghbWlzc2luZ0NvbHVtbikge1xuXHRcdFx0XHRcdFx0ZXJyb3JNZXNzYWdlID0gcmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIk1fVEFCTEVfRU1QVFlST1dfTUFOREFUT1JZXCIsIFttaXNzaW5nUHJvcGVydHldKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0ZGlzcGxheWVkQ29sdW1uID0gdGhpcy5nZXRDb250ZW50KClcblx0XHRcdFx0XHRcdFx0LmdldENvbHVtbnMoKVxuXHRcdFx0XHRcdFx0XHQuZmluZCgobWRjQ29sdW1uKSA9PiBtZGNDb2x1bW4uZ2V0UHJvcGVydHlLZXkoKSA9PT0gbWlzc2luZ0NvbHVtbi5uYW1lKTtcblx0XHRcdFx0XHRcdGVycm9yTWVzc2FnZSA9IHJlc291cmNlQnVuZGxlLmdldFRleHQoXG5cdFx0XHRcdFx0XHRcdGRpc3BsYXllZENvbHVtbiA/IFwiTV9UQUJMRV9FTVBUWVJPV19NQU5EQVRPUllcIiA6IFwiTV9UQUJMRV9FTVBUWVJPV19NQU5EQVRPUllfSElEREVOXCIsXG5cdFx0XHRcdFx0XHRcdFtkaXNwbGF5ZWRDb2x1bW4/LmdldEhlYWRlcigpIHx8IG1pc3NpbmdDb2x1bW4ubGFiZWxdXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdG1lc3NhZ2VzLnB1c2goXG5cdFx0XHRcdFx0XHRuZXcgTWVzc2FnZSh7XG5cdFx0XHRcdFx0XHRcdG1lc3NhZ2U6IGVycm9yTWVzc2FnZSxcblx0XHRcdFx0XHRcdFx0cHJvY2Vzc29yOiB0aGlzLmdldE1vZGVsKCksXG5cdFx0XHRcdFx0XHRcdHR5cGU6IE1lc3NhZ2VUeXBlLkVycm9yLFxuXHRcdFx0XHRcdFx0XHR0ZWNobmljYWw6IGZhbHNlLFxuXHRcdFx0XHRcdFx0XHRwZXJzaXN0ZW50OiB0cnVlLFxuXHRcdFx0XHRcdFx0XHR0ZWNobmljYWxEZXRhaWxzOiB7XG5cdFx0XHRcdFx0XHRcdFx0dGFibGVJZDogdGhpcy5nZXRDb250ZW50KCkuZ2V0SWQoKSwgLy8gTmVlZCB0byBkbyBpdCBzaW5jZSBoYW5kbGVDcmVhdGVBY3RpdmF0ZSBjYW4gYmUgdHJpZ2dlcmVkIG11bHRpcGxlIHRpbWVzIChleHRyYSBwcm9wZXJ0aWVzIHNldCBieSB2YWx1ZSBoZWxwKSBiZWZvcmUgY29udHJvbElkcyBhcmUgc2V0IG9uIHRoZSBtZXNzYWdlXG5cdFx0XHRcdFx0XHRcdFx0ZW1wdHlSb3dNZXNzYWdlOiB0cnVlLFxuXHRcdFx0XHRcdFx0XHRcdG1pc3NpbmdDb2x1bW46IGRpc3BsYXllZENvbHVtbiA/IHVuZGVmaW5lZCA6IG1pc3NpbmdQcm9wZXJ0eSAvLyBuZWVkZWQgdG8gY2hhbmdlIHRoZSBtZXNzYWdlU3RyaXAgbWVzc2FnZVxuXHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0XHR0YXJnZXQ6IGAke2NvbnRleHQ/LmdldFBhdGgoKX0vJHttaXNzaW5nUHJvcGVydHl9YFxuXHRcdFx0XHRcdFx0fSlcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdE1lc3NhZ2luZy5hZGRNZXNzYWdlcyhtZXNzYWdlcyk7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblxuXHQvKipcblx0ICogUmVtb3ZlcyB0aGUgbWVzc2FnZXMgcmVsYXRlZCB0byB0aGUgZW1wdHkgcm93cy5cblx0ICogQHBhcmFtIGluYWN0aXZlQ29udGV4dHMgVGhlIGNvbnRleHRzIG9mIHRoZSBlbXB0eSByb3dzLCBpZiBub3QgcHJvdmlkZWQsIHRoZSBtZXNzYWdlcyBvZiBhbGwgZW1wdHkgcm93cyBhcmUgcmVtb3ZlZFxuXHQgKi9cblx0cmVtb3ZlRW1wdHlSb3dzTWVzc2FnZXModGhpczogSVRhYmxlQmxvY2sgJiBFbXB0eVJvd3NIYW5kbGVyLCBpbmFjdGl2ZUNvbnRleHRzPzogQ29udGV4dCB8IENvbnRleHRbXSk6IHZvaWQge1xuXHRcdE1lc3NhZ2luZy5yZW1vdmVNZXNzYWdlcyhcblx0XHRcdChNZXNzYWdpbmcuZ2V0TWVzc2FnZU1vZGVsKCkuZ2V0RGF0YSgpIGFzIE1lc3NhZ2VbXSkuZmlsdGVyKChtc2cpID0+IHtcblx0XHRcdFx0Y29uc3QgdGVjaG5pY2FsRGV0YWlscyA9IChtc2cuZ2V0VGVjaG5pY2FsRGV0YWlscygpIHx8IHt9KSBhcyB7IHRhYmxlSWQ/OiBzdHJpbmc7IGVtcHR5Um93TWVzc2FnZT86IGJvb2xlYW4gfTtcblxuXHRcdFx0XHQvLyBDaGVjayBpZiBtc2cgdGFyZ2V0IHN0YXJ0cyB3aXRoIGFueSBwYXRoIGluIHRoZSBpbmFjdGl2ZUNvbnRleHQgYXJyYXlcblx0XHRcdFx0Y29uc3QgY29udGV4dE1hdGNoZXMgPSBBcnJheS5pc0FycmF5KGluYWN0aXZlQ29udGV4dHMpXG5cdFx0XHRcdFx0PyBpbmFjdGl2ZUNvbnRleHRzLnNvbWUoKGNvbnRleHQpID0+IG1zZy5nZXRUYXJnZXRzKCkuc29tZSgodmFsdWUpID0+IHZhbHVlLnN0YXJ0c1dpdGgoY29udGV4dC5nZXRQYXRoKCkpKSlcblx0XHRcdFx0XHQ6ICFpbmFjdGl2ZUNvbnRleHRzIHx8IG1zZy5nZXRUYXJnZXRzKCkuc29tZSgodmFsdWUpID0+IHZhbHVlLnN0YXJ0c1dpdGgoaW5hY3RpdmVDb250ZXh0cy5nZXRQYXRoKCkpKTtcblxuXHRcdFx0XHRyZXR1cm4gY29udGV4dE1hdGNoZXMgJiYgdGVjaG5pY2FsRGV0YWlscy5lbXB0eVJvd01lc3NhZ2UgJiYgdGVjaG5pY2FsRGV0YWlscy50YWJsZUlkID09PSB0aGlzLmdldENvbnRlbnQoKS5nZXRJZCgpO1xuXHRcdFx0fSlcblx0XHQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENyZWF0aW9uIG9mIGluYWN0aXZlIHJvd3MgZm9yIHRoZSB0YWJsZSBpbiBjcmVhdGlvbiBtb2RlIFwiSW5saW5lQ3JlYXRpb25Sb3dzXCIuXG5cdCAqIEBwYXJhbSBiaW5kaW5nIERhdGEgbGlzdCBiaW5kaW5nXG5cdCAqIEBwYXJhbSB0YWJsZSBUaGUgdGFibGUgYmVpbmcgZWRpdGVkXG5cdCAqIEBwYXJhbSByZWNyZWF0ZU9uZVJvdyBgdHJ1ZWAgaWYgdGhlIGNhbGwgaXMgdG8gcmVjcmVhdGUgYW4gZW1wdHlMaW5lXG5cdCAqIEBwYXJhbSBuZXdJbmxpbmVDcmVhdGlvblJvd0Zyb21QYXN0ZSBOdW1iZXIgb2YgbmV3IGluYWN0aXZlIHJvd3MgdG8gYmUgY3JlYXRlZFxuXHQgKiBAcGFyYW0gZm9yY2VDcmVhdGVhdEVuZCBgdHJ1ZWAgaWYgdGhlIG5ldyByb3cgaXMgdG8gYmUgY3JlYXRlZCBhdCB0aGUgZW5kIG9mIHRoZSB0YWJsZVxuXHQgKiBAcGFyYW0gZGVmYXVsdFZhbHVlRnVuY3Rpb25EYXRhIERlZmF1bHQgdmFsdWVzIHJldHJpZXZlZCBmcm9tIHRoZSBEZWZhdWx0VmFsdWVzRnVuY3Rpb24gdG8gYmUgYXBwbGllZCB0byB0aGUgbmV3IHJvd3Ncblx0ICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gdGhlIGNyZWF0ZWQgY29udGV4dHMgb3Igdm9pZCBpZiB0aGUgY3JlYXRpb24gZmFpbGVkXG5cdCAqL1xuXHRhc3luYyBjcmVhdGVFbXB0eVJvd3MoXG5cdFx0dGhpczogSVRhYmxlQmxvY2sgJiBFbXB0eVJvd3NIYW5kbGVyLFxuXHRcdGJpbmRpbmc6IE9EYXRhTGlzdEJpbmRpbmcsXG5cdFx0dGFibGU6IE1EQ1RhYmxlLFxuXHRcdHJlY3JlYXRlT25lUm93ID0gZmFsc2UsXG5cdFx0bmV3SW5saW5lQ3JlYXRpb25Sb3dGcm9tUGFzdGU/OiBudW1iZXIsXG5cdFx0Zm9yY2VDcmVhdGVhdEVuZCA9IGZhbHNlLFxuXHRcdGRlZmF1bHRWYWx1ZUZ1bmN0aW9uRGF0YT86IG9iamVjdCB8IHVuZGVmaW5lZFxuXHQpOiBQcm9taXNlPHZvaWQgfCBDb250ZXh0W10+IHtcblx0XHRjb25zdCBpbmxpbmVDcmVhdGlvblJvd0NvdW50ID0gbmV3SW5saW5lQ3JlYXRpb25Sb3dGcm9tUGFzdGUgPz8gKHRoaXMuZ2V0VGFibGVEZWZpbml0aW9uKCkuY29udHJvbD8uaW5saW5lQ3JlYXRpb25Sb3dDb3VudCB8fCAxKTtcblx0XHRpZiAodGhpcy5jcmVhdGluZ0VtcHR5Um93cyB8fCB0aGlzLmdldEluYWN0aXZlQ29udGV4dE51bWJlcihiaW5kaW5nKSA+IGlubGluZUNyZWF0aW9uUm93Q291bnQpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0Y29uc3QgZGF0YSA9IEFycmF5LmZyb20oeyBsZW5ndGg6IGlubGluZUNyZWF0aW9uUm93Q291bnQgfSwgKCkgPT4gKHt9KSksXG5cdFx0XHRhdEVuZCA9IHRhYmxlLmRhdGEoXCJ0YWJsZVR5cGVcIikgIT09IFwiUmVzcG9uc2l2ZVRhYmxlXCIsXG5cdFx0XHRpbmFjdGl2ZSA9IHRydWUsXG5cdFx0XHR2aWV3ID0gQ29tbW9uVXRpbHMuZ2V0VGFyZ2V0Vmlldyh0YWJsZSksXG5cdFx0XHRjb250cm9sbGVyID0gdmlldy5nZXRDb250cm9sbGVyKCksXG5cdFx0XHRlZGl0RmxvdyA9IGNvbnRyb2xsZXIuZWRpdEZsb3c7XG5cblx0XHR0aGlzLmNyZWF0aW5nRW1wdHlSb3dzID0gdHJ1ZTtcblx0XHR0cnkge1xuXHRcdFx0Y29uc3QgZGF0YUZvckNyZWF0ZSA9IHJlY3JlYXRlT25lUm93ID8gW3t9XSA6IGRhdGE7XG5cdFx0XHRjb25zdCBjb250ZXh0cyA9IGF3YWl0IGVkaXRGbG93LmNyZWF0ZU11bHRpcGxlRG9jdW1lbnRzKFxuXHRcdFx0XHRiaW5kaW5nLFxuXHRcdFx0XHQvLyBkdXJpbmcgYSBsaXZlIGNoYW5nZSwgb25seSAxIG5ldyBkb2N1bWVudCBpcyBjcmVhdGVkXG5cdFx0XHRcdGRhdGFGb3JDcmVhdGUsXG5cdFx0XHRcdC8vIFdoZW4gZWRpdGluZyBhbiBlbXB0eSByb3csIHRoZSBuZXcgZW1wdHkgcm93IGlzIHRvIGJlIGNyZWF0ZWQganVzdCBiZWxvdyBhbmQgbm90IGFib3ZlXG5cdFx0XHRcdHJlY3JlYXRlT25lUm93IHx8IGZvcmNlQ3JlYXRlYXRFbmQgPyB0cnVlIDogYXRFbmQsXG5cdFx0XHRcdGZhbHNlLFxuXHRcdFx0XHRjb250cm9sbGVyLmVkaXRGbG93Lm9uQmVmb3JlQ3JlYXRlLFxuXHRcdFx0XHRpbmFjdGl2ZSxcblx0XHRcdFx0dW5kZWZpbmVkLFxuXHRcdFx0XHRkZWZhdWx0VmFsdWVGdW5jdGlvbkRhdGFcblx0XHRcdCk7XG5cdFx0XHRjb250ZXh0cz8uZm9yRWFjaChhc3luYyBmdW5jdGlvbiAoY29udGV4dDogQ29udGV4dCkge1xuXHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdGF3YWl0IGNvbnRleHQuY3JlYXRlZCgpO1xuXHRcdFx0XHR9IGNhdGNoIChlcnJvcikge1xuXHRcdFx0XHRcdGlmICghKGVycm9yIGFzIENvbnRleHRFcnJvclR5cGUpLmNhbmNlbGVkKSB7XG5cdFx0XHRcdFx0XHR0aHJvdyBlcnJvcjtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdFx0cmV0dXJuIGNvbnRleHRzO1xuXHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdExvZy5lcnJvcihlIGFzIHN0cmluZyk7XG5cdFx0fSBmaW5hbGx5IHtcblx0XHRcdHRoaXMuY3JlYXRpbmdFbXB0eVJvd3MgPSBmYWxzZTtcblx0XHR9XG5cdH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7TUF3QnFCQSxnQkFBZ0I7SUFBQSxTQUFBQSxpQkFBQTtJQUFBQyxRQUFBLEdBQUFELGdCQUFBO0lBQUEsSUFBQUUsTUFBQSxHQUFBRixnQkFBQSxDQUFBRyxTQUFBO0lBR3BDO0FBQ0Q7QUFDQTtJQUZDRCxNQUFBLENBS0FFLFVBQVUsR0FBVixTQUFBQSxVQUFVQSxDQUFDQyxVQUFvQixFQUFRO01BQ3RDO0lBQUE7O0lBR0Q7QUFDRDtBQUNBO0FBQ0EsT0FIQztJQUFBSCxNQUFBLENBSUFJLGtCQUFrQixHQUFsQixTQUFBQSxrQkFBa0JBLENBQXVDQyxRQUErQixFQUFRO01BQy9GLE1BQU1DLEtBQUssR0FBR0QsUUFBUSxDQUFDRSxTQUFTLENBQUMsQ0FBQztRQUNqQ0MsY0FBYyxHQUFHRixLQUFLLENBQUNHLGlCQUFpQixDQUFDLENBQVk7UUFDckRDLE9BQU8sR0FBR0YsY0FBYyxDQUFDRyxVQUFVLENBQUMsQ0FBQztNQUN0QztNQUNBLElBQUlILGNBQWMsQ0FBQ0ksVUFBVSxDQUFDLENBQUMsRUFBRTtRQUNoQyxNQUFNQyxLQUFLLEdBQUcsSUFBSSxFQUFFQyxVQUFVLENBQUMsQ0FBQztRQUNoQyxJQUFJLEVBQUVDLGVBQWUsQ0FBQ0wsT0FBTyxFQUFzQkcsS0FBSyxFQUFFLElBQUksQ0FBQztNQUNoRTtJQUNEOztJQUVBO0FBQ0Q7QUFDQTtBQUNBLE9BSEM7SUFB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
@@ -61,6 +61,9 @@ export default class EmptyRowsHandler implements IInterfaceWithMixin {
61
61
  // we start by asking to recreate an empty row (if live change has already done it this won't have any effect)
62
62
  // but we do not wait
63
63
  this.createEmptyRows(activateEvent.getSource(), this.getContent(), true);
64
+ const table = this.getContent();
65
+ const appComponent = CommonUtils.getAppComponent(table);
66
+ const binding = table.getRowBinding();
64
67
  if (!this.validateEmptyRow(activatedContext)) {
65
68
  activateEvent.preventDefault();
66
69
  return;
@@ -71,7 +74,12 @@ export default class EmptyRowsHandler implements IInterfaceWithMixin {
71
74
  controller = view.getController(),
72
75
  editFlow = controller.editFlow;
73
76
  try {
74
- await (activatedContext.created() ?? Promise.resolve());
77
+ await Promise.all([
78
+ appComponent
79
+ .getSideEffectsService()
80
+ .requestSideEffectsForNavigationProperty(binding.getPath(), view.getBindingContext()),
81
+ activatedContext.created?.() ?? Promise.resolve()
82
+ ]);
75
83
  await editFlow.onAfterCreate({ context: activatedContext });
76
84
  } catch (e) {
77
85
  Log.warning(`Failed to activate context ${activatedContext.getPath()}`);
@@ -372,8 +380,7 @@ export default class EmptyRowsHandler implements IInterfaceWithMixin {
372
380
  inactive = true,
373
381
  view = CommonUtils.getTargetView(table),
374
382
  controller = view.getController(),
375
- editFlow = controller.editFlow,
376
- appComponent = CommonUtils.getAppComponent(table);
383
+ editFlow = controller.editFlow;
377
384
 
378
385
  this.creatingEmptyRows = true;
379
386
  try {
@@ -390,7 +397,6 @@ export default class EmptyRowsHandler implements IInterfaceWithMixin {
390
397
  undefined,
391
398
  defaultValueFunctionData
392
399
  );
393
- appComponent.getSideEffectsService().requestSideEffectsForNavigationProperty(binding.getPath(), view.getBindingContext());
394
400
  contexts?.forEach(async function (context: Context) {
395
401
  try {
396
402
  await context.created();
@@ -125,18 +125,18 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/CommonUtils", "sap/fe/core/controlle
125
125
  * @returns A promise that resolves when the variant has been applied.
126
126
  */;
127
127
  _proto.handleVariantIdPassedViaURLParams = async function handleVariantIdPassedViaURLParams() {
128
- const urlParams = this.getStartupParameters();
128
+ const urlParams = await this.getStartupParameters();
129
129
  const tableVariantId = urlParams["sap-ui-fe-table-variant-id"]?.[0];
130
130
  const view = CommonUtils.getTargetView(this);
131
131
  const viewData = view.getViewData();
132
132
  const vmType = viewData.variantManagement;
133
133
  const vm = this.content.getVariant();
134
- if (vm && tableVariantId && vmType === "Control") {
134
+ if (vm && tableVariantId && typeof tableVariantId === "string" && vmType === "Control") {
135
135
  const variantToApply = vm.getVariants().find(variant => variant.getKey() === tableVariantId);
136
136
  const ControlVariantApplyAPI = (await __ui5_require_async("sap/ui/fl/apply/api/ControlVariantApplyAPI")).default;
137
137
  return ControlVariantApplyAPI.activateVariant({
138
138
  element: vm,
139
- variantReference: variantToApply.getKey()
139
+ variantReference: variantToApply?.getKey()
140
140
  });
141
141
  }
142
142
  }
@@ -144,14 +144,12 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/CommonUtils", "sap/fe/core/controlle
144
144
  /**
145
145
  * Retrieves the startup parameters from the application component data.
146
146
  * These parameters contain URL query parameters that were passed when the application was started.
147
- * @returns The startup parameters as a key-value mapping where each key can have multiple values,
148
- * or undefined if no parameters are available or if the component chain is not accessible.
147
+ * @returns The startup parameters.
149
148
  */;
150
- _proto.getStartupParameters = function getStartupParameters() {
149
+ _proto.getStartupParameters = async function getStartupParameters() {
151
150
  const controller = this.getPageController();
152
151
  const appComponent = controller.getAppComponent();
153
- const componentData = appComponent.getComponentData();
154
- return componentData.startupParameters;
152
+ return appComponent.getStartupParameters();
155
153
  }
156
154
 
157
155
  /**
@@ -251,4 +249,4 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/CommonUtils", "sap/fe/core/controlle
251
249
  _exports = TableAPIStateHandler;
252
250
  return _exports;
253
251
  }, false);
254
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJUYWJsZUFQSVN0YXRlSGFuZGxlciIsIl9JVmlld1N0YXRlQ29udHJpYnV0byIsImFwcGx5IiwiYXJndW1lbnRzIiwiX2V4cG9ydHMiLCJfaW5oZXJpdHNMb29zZSIsIl9wcm90byIsInByb3RvdHlwZSIsInJldHJpZXZlU3RhdGUiLCJ0YWJsZVN0YXRlIiwiaW5uZXJUYWJsZSIsImdldENvbnRyb2xTdGF0ZSIsIlN0YXRlVXRpbCIsInJldHJpZXZlRXh0ZXJuYWxTdGF0ZSIsImNvbnRlbnQiLCJxdWlja0ZpbHRlciIsImdldFF1aWNrRmlsdGVyIiwicXVpY2tGaWx0ZXJTdGF0ZSIsImdldFNlbGVjdGVkS2V5Iiwic2VsZWN0ZWRLZXkiLCJ2YXJpYW50VG9SZXRyaWV2ZSIsImdldFZhcmlhbnQiLCJnZXRJZCIsInZhcmlhbnRNYW5hZ2VtZW50Q29udHJvbCIsInZhcmlhbnRNYW5hZ2VtZW50IiwidmFyaWFudElkIiwiZ2V0Q3VycmVudFZhcmlhbnRLZXkiLCJzZXRJbml0aWFsU3RhdGUiLCJpbml0aWFsQ29udHJvbFN0YXRlIiwiZSIsIkxvZyIsImVycm9yIiwiYXBwbHlMZWdhY3lTdGF0ZSIsIl9uYXZQYXJhbWV0ZXJzIiwic2hvdWxkQXBwbHlEaWZmU3RhdGUiLCJ0YWJsZSIsInZtIiwidm1TdGF0ZSIsImNvbnRyb2xTdGF0ZSIsImZ1bGxTdGF0ZSIsImluaXRpYWxTdGF0ZSIsInRvU3RyaW5nIiwiT2JqZWN0Iiwia2V5cyIsImxlbmd0aCIsImFwcGx5U3RhdGUiLCJoYW5kbGVWYXJpYW50SWRQYXNzZWRWaWFVUkxQYXJhbXMiLCJ1cmxQYXJhbXMiLCJnZXRTdGFydHVwUGFyYW1ldGVycyIsInRhYmxlVmFyaWFudElkIiwidmlldyIsIkNvbW1vblV0aWxzIiwiZ2V0VGFyZ2V0VmlldyIsInZpZXdEYXRhIiwiZ2V0Vmlld0RhdGEiLCJ2bVR5cGUiLCJ2YXJpYW50VG9BcHBseSIsImdldFZhcmlhbnRzIiwiZmluZCIsInZhcmlhbnQiLCJnZXRLZXkiLCJDb250cm9sVmFyaWFudEFwcGx5QVBJIiwiX191aTVfcmVxdWlyZV9hc3luYyIsImRlZmF1bHQiLCJhY3RpdmF0ZVZhcmlhbnQiLCJlbGVtZW50IiwidmFyaWFudFJlZmVyZW5jZSIsImNvbnRyb2xsZXIiLCJnZXRQYWdlQ29udHJvbGxlciIsImFwcENvbXBvbmVudCIsImdldEFwcENvbXBvbmVudCIsImNvbXBvbmVudERhdGEiLCJnZXRDb21wb25lbnREYXRhIiwic3RhcnR1cFBhcmFtZXRlcnMiLCJhcHBseU5hdmlnYXRpb25QYXJhbWV0ZXJzIiwibmF2aWdhdGlvblBhcmFtZXRlciIsImFwcGx5VmFyaWFudEZyb21VUkxQYXJhbXMiLCJnZXRNZXRhZGF0YSIsImdldE5hbWUiLCJQcm9taXNlIiwicmVzb2x2ZSIsImluaXRpYWxpemVkIiwiaW5uZXJUYWJsZVN0YXRlIiwiY3VycmVudFZhcmlhbnQiLCJxdWlja0ZpbHRlcktleSIsInVuZGVmaW5lZCIsIm92TSIsImFWYXJpYW50cyIsInNWYXJpYW50UmVmZXJlbmNlIiwic29tZSIsIm9WYXJpYW50IiwiZ2V0U3RhbmRhcmRWYXJpYW50S2V5IiwiZmluYWxTdGF0ZSIsInN1cHBsZW1lbnRhcnlDb25maWciLCJkaWZmU3RhdGUiLCJhcHBseUV4dGVybmFsU3RhdGUiLCJzZXRTZWxlY3RlZEtleSIsIm9uUXVpY2tGaWx0ZXJTZWxlY3Rpb25DaGFuZ2UiLCJpbml0aWFsTG9hZCIsImZpbHRlckJhciIsImdldEZpbHRlckJhckNvbnRyb2wiLCJpc0EiLCJ3YWl0Rm9ySW5pdGlhbFN0YXRlIiwidGhlbiIsInJlYmluZCIsImNhdGNoIiwiSVZpZXdTdGF0ZUNvbnRyaWJ1dG9yTWl4aW4iXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIlRhYmxlQVBJU3RhdGVIYW5kbGVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IENvbW1vblV0aWxzIGZyb20gXCJzYXAvZmUvY29yZS9Db21tb25VdGlsc1wiO1xuaW1wb3J0IHR5cGUgeyBOYXZpZ2F0aW9uUGFyYW1ldGVyIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL1ZpZXdTdGF0ZVwiO1xuaW1wb3J0IElWaWV3U3RhdGVDb250cmlidXRvck1peGluIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy92aWV3U3RhdGUvSVZpZXdTdGF0ZUNvbnRyaWJ1dG9yTWl4aW5cIjtcbmltcG9ydCB0eXBlIEZpbHRlckJhckFQSSBmcm9tIFwic2FwL2ZlL21hY3Jvcy9maWx0ZXJCYXIvRmlsdGVyQmFyQVBJXCI7XG5pbXBvcnQgdHlwZSB7IENvbnRyb2xTdGF0ZSB9IGZyb20gXCJzYXAvZmUvbWFjcm9zL2luc2lnaHRzL0NvbW1vbkluc2lnaHRzSGVscGVyXCI7XG5pbXBvcnQgdHlwZSBUYWJsZUFQSSBmcm9tIFwic2FwL2ZlL21hY3Jvcy90YWJsZS9UYWJsZUFQSVwiO1xuaW1wb3J0IHR5cGUgeyBUYWJsZVN0YXRlIH0gZnJvbSBcInNhcC9mZS9tYWNyb3MvdGFibGUvVGFibGVBUElcIjtcbmltcG9ydCB0eXBlIE1hbmFnZWRPYmplY3QgZnJvbSBcInNhcC91aS9iYXNlL01hbmFnZWRPYmplY3RcIjtcbmltcG9ydCBTdGF0ZVV0aWwgZnJvbSBcInNhcC91aS9tZGMvcDEzbi9TdGF0ZVV0aWxcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGFibGVBUElTdGF0ZUhhbmRsZXIgZXh0ZW5kcyBJVmlld1N0YXRlQ29udHJpYnV0b3JNaXhpbjxUYWJsZVN0YXRlPiB7XG5cdC8qKlxuXHQgKiBBc3luY2hyb25vdXNseSByZXRyaWV2ZXMgdGhlIHN0YXRlIG9mIHRoZSB0YWJsZSBiYXNlZCBvbiB0aGUgcHJvdmlkZWQgdmlld3N0YXRlLlxuXHQgKiBAcmV0dXJucyBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB0byB0aGUgdGFibGUgc3RhdGUgb3IgbnVsbCBpZiBub3QgZm91bmQuXG5cdCAqL1xuXHRhc3luYyByZXRyaWV2ZVN0YXRlKHRoaXM6IFRhYmxlQVBJKTogUHJvbWlzZTxUYWJsZVN0YXRlIHwgbnVsbD4ge1xuXHRcdGNvbnN0IHRhYmxlU3RhdGU6IFRhYmxlU3RhdGUgPSB7fTtcblx0XHR0YWJsZVN0YXRlLmlubmVyVGFibGUgPSB0aGlzLmdldENvbnRyb2xTdGF0ZShhd2FpdCBTdGF0ZVV0aWwucmV0cmlldmVFeHRlcm5hbFN0YXRlKHRoaXMuY29udGVudCkpIGFzIG9iamVjdDtcblx0XHRjb25zdCBxdWlja0ZpbHRlciA9IHRoaXMuZ2V0UXVpY2tGaWx0ZXIoKTtcblx0XHRpZiAocXVpY2tGaWx0ZXIpIHtcblx0XHRcdGNvbnN0IHF1aWNrRmlsdGVyU3RhdGUgPSBxdWlja0ZpbHRlci5nZXRTZWxlY3RlZEtleSgpO1xuXHRcdFx0aWYgKCF0YWJsZVN0YXRlLnF1aWNrRmlsdGVyKSB7XG5cdFx0XHRcdHRhYmxlU3RhdGUucXVpY2tGaWx0ZXIgPSB7fTtcblx0XHRcdH1cblx0XHRcdHRhYmxlU3RhdGUucXVpY2tGaWx0ZXIuc2VsZWN0ZWRLZXkgPSBxdWlja0ZpbHRlclN0YXRlO1xuXHRcdH1cblx0XHRjb25zdCB2YXJpYW50VG9SZXRyaWV2ZSA9IHRoaXMuY29udGVudC5nZXRWYXJpYW50KCk/LmdldElkKCk7XG5cdFx0aWYgKHZhcmlhbnRUb1JldHJpZXZlKSB7XG5cdFx0XHRjb25zdCB2YXJpYW50TWFuYWdlbWVudENvbnRyb2wgPSB0aGlzLmNvbnRlbnQuZ2V0VmFyaWFudCgpO1xuXHRcdFx0aWYgKCF0YWJsZVN0YXRlLnZhcmlhbnRNYW5hZ2VtZW50KSB7XG5cdFx0XHRcdHRhYmxlU3RhdGUudmFyaWFudE1hbmFnZW1lbnQgPSB7IHZhcmlhbnRJZDogdmFyaWFudE1hbmFnZW1lbnRDb250cm9sPy5nZXRDdXJyZW50VmFyaWFudEtleSgpIH07XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0YWJsZVN0YXRlLnZhcmlhbnRNYW5hZ2VtZW50LnZhcmlhbnRJZCA9IHZhcmlhbnRNYW5hZ2VtZW50Q29udHJvbD8uZ2V0Q3VycmVudFZhcmlhbnRLZXkoKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHRhYmxlU3RhdGU7XG5cdH1cblxuXHQvKipcblx0ICogU2V0cyB0aGUgaW5pdGlhbCBzdGF0ZSBvZiB0aGUgY29udHJvbCBieSByZXRyaWV2aW5nIHRoZSBleHRlcm5hbCBzdGF0ZS5cblx0ICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgaW5pdGlhbCBzdGF0ZSBpcyBzZXQuXG5cdCAqL1xuXHRhc3luYyBzZXRJbml0aWFsU3RhdGUodGhpczogVGFibGVBUEkpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHR0cnkge1xuXHRcdFx0Y29uc3QgaW5pdGlhbENvbnRyb2xTdGF0ZSA9IGF3YWl0IFN0YXRlVXRpbC5yZXRyaWV2ZUV4dGVybmFsU3RhdGUodGhpcy5jb250ZW50KTtcblx0XHRcdHRoaXMuaW5pdGlhbENvbnRyb2xTdGF0ZSA9IGluaXRpYWxDb250cm9sU3RhdGU7XG5cdFx0fSBjYXRjaCAoZTogdW5rbm93bikge1xuXHRcdFx0TG9nLmVycm9yKGUgYXMgc3RyaW5nKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQXBwbGllcyB0aGUgbGVnYWN5IHN0YXRlIHRvIHRoZSB0YWJsZSBiYXNlZCBvbiB0aGUgcHJvdmlkZWQgY29udHJvbCBzdGF0ZSByZXRyaWV2YWwgZnVuY3Rpb24uXG5cdCAqIEBwYXJhbSBnZXRDb250cm9sU3RhdGUgRnVuY3Rpb24gdG8gcmV0cmlldmUgdGhlIGNvbnRyb2wgc3RhdGUuXG5cdCAqIEBwYXJhbSBbX25hdlBhcmFtZXRlcnNdIE9wdGlvbmFsIG5hdmlnYXRpb24gcGFyYW1ldGVycy5cblx0ICogQHBhcmFtIFtzaG91bGRBcHBseURpZmZTdGF0ZV0gRmxhZyBpbmRpY2F0aW5nIHdoZXRoZXIgdG8gYXBwbHkgdGhlIGRpZmYgc3RhdGUuXG5cdCAqIEByZXR1cm5zIC0gQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgc3RhdGUgaGFzIGJlZW4gYXBwbGllZC5cblx0ICovXG5cdGFzeW5jIGFwcGx5TGVnYWN5U3RhdGUoXG5cdFx0dGhpczogVGFibGVBUEksXG5cdFx0Z2V0Q29udHJvbFN0YXRlOiAoY29udHJvbDogTWFuYWdlZE9iamVjdCkgPT4gQ29udHJvbFN0YXRlLFxuXHRcdF9uYXZQYXJhbWV0ZXJzPzogTmF2aWdhdGlvblBhcmFtZXRlcixcblx0XHRzaG91bGRBcHBseURpZmZTdGF0ZT86IGJvb2xlYW5cblx0KTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0Y29uc3QgdGFibGUgPSB0aGlzLmNvbnRlbnQ7XG5cdFx0Y29uc3Qgdm0gPSB0YWJsZS5nZXRWYXJpYW50KCk7XG5cdFx0Y29uc3QgcXVpY2tGaWx0ZXIgPSB0aGlzLmdldFF1aWNrRmlsdGVyKCk7XG5cblx0XHRjb25zdCB0YWJsZVN0YXRlID0gZ2V0Q29udHJvbFN0YXRlKHRhYmxlKSBhcyB7IGluaXRpYWxTdGF0ZT86IFRhYmxlU3RhdGU7IGZ1bGxTdGF0ZT86IFRhYmxlU3RhdGUgfTtcblx0XHRjb25zdCB2bVN0YXRlID0gdm0gPyBnZXRDb250cm9sU3RhdGUodm0pIDogbnVsbDtcblx0XHRjb25zdCBxdWlja0ZpbHRlclN0YXRlID0gcXVpY2tGaWx0ZXI/LmNvbnRlbnQgPyBnZXRDb250cm9sU3RhdGUocXVpY2tGaWx0ZXIuY29udGVudCkgOiBudWxsO1xuXG5cdFx0Y29uc3QgY29udHJvbFN0YXRlOiBUYWJsZVN0YXRlID0ge307XG5cblx0XHRpZiAodGFibGVTdGF0ZSkge1xuXHRcdFx0Y29udHJvbFN0YXRlLmlubmVyVGFibGUgPSB7XG5cdFx0XHRcdC4uLmNvbnRyb2xTdGF0ZS5pbm5lclRhYmxlLFxuXHRcdFx0XHQuLi50YWJsZVN0YXRlLFxuXHRcdFx0XHRmdWxsU3RhdGU6IHtcblx0XHRcdFx0XHQuLi5jb250cm9sU3RhdGUuaW5uZXJUYWJsZT8uZnVsbFN0YXRlLFxuXHRcdFx0XHRcdC4uLnRhYmxlU3RhdGUuZnVsbFN0YXRlXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGluaXRpYWxTdGF0ZToge1xuXHRcdFx0XHRcdC4uLmNvbnRyb2xTdGF0ZS5pbm5lclRhYmxlPy5pbml0aWFsU3RhdGUsXG5cdFx0XHRcdFx0Li4udGFibGVTdGF0ZS5pbml0aWFsU3RhdGVcblx0XHRcdFx0fVxuXHRcdFx0fTtcblx0XHR9XG5cblx0XHRpZiAodm1TdGF0ZT8udmFyaWFudElkKSB7XG5cdFx0XHRjb250cm9sU3RhdGUudmFyaWFudE1hbmFnZW1lbnQgPSB7XG5cdFx0XHRcdC4uLmNvbnRyb2xTdGF0ZS52YXJpYW50TWFuYWdlbWVudCxcblx0XHRcdFx0dmFyaWFudElkOiB2bVN0YXRlLnZhcmlhbnRJZC50b1N0cmluZygpXG5cdFx0XHR9O1xuXHRcdH1cblxuXHRcdGlmIChxdWlja0ZpbHRlclN0YXRlPy5zZWxlY3RlZEtleSkge1xuXHRcdFx0Y29udHJvbFN0YXRlLnF1aWNrRmlsdGVyID0ge1xuXHRcdFx0XHQuLi5jb250cm9sU3RhdGUucXVpY2tGaWx0ZXIsXG5cdFx0XHRcdHNlbGVjdGVkS2V5OiBxdWlja0ZpbHRlclN0YXRlLnNlbGVjdGVkS2V5LnRvU3RyaW5nKClcblx0XHRcdH07XG5cdFx0fVxuXHRcdGlmIChjb250cm9sU3RhdGUgJiYgT2JqZWN0LmtleXMoY29udHJvbFN0YXRlKS5sZW5ndGggPiAwKSB7XG5cdFx0XHRhd2FpdCB0aGlzLmFwcGx5U3RhdGUoY29udHJvbFN0YXRlIGFzIG9iamVjdCwgX25hdlBhcmFtZXRlcnMsIHNob3VsZEFwcGx5RGlmZlN0YXRlKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogSGFuZGxlcyB0aGUgYXBwbGljYXRpb24gb2YgYSB2YXJpYW50IElEIHBhc3NlZCB2aWEgVVJMIHBhcmFtZXRlcnMuXG5cdCAqIEByZXR1cm5zIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIHZhcmlhbnQgaGFzIGJlZW4gYXBwbGllZC5cblx0ICovXG5cdGFzeW5jIGhhbmRsZVZhcmlhbnRJZFBhc3NlZFZpYVVSTFBhcmFtcyh0aGlzOiBUYWJsZUFQSSAmIFRhYmxlQVBJU3RhdGVIYW5kbGVyKTogUHJvbWlzZTx1bmtub3duPiB7XG5cdFx0Y29uc3QgdXJsUGFyYW1zID0gdGhpcy5nZXRTdGFydHVwUGFyYW1ldGVycygpIGFzIHVua25vd24gYXMgUmVjb3JkPHN0cmluZywgc3RyaW5nW10+O1xuXHRcdGNvbnN0IHRhYmxlVmFyaWFudElkID0gdXJsUGFyYW1zW1wic2FwLXVpLWZlLXRhYmxlLXZhcmlhbnQtaWRcIl0/LlswXTtcblx0XHRjb25zdCB2aWV3ID0gQ29tbW9uVXRpbHMuZ2V0VGFyZ2V0Vmlldyh0aGlzKTtcblx0XHRjb25zdCB2aWV3RGF0YSA9IHZpZXcuZ2V0Vmlld0RhdGEoKTtcblx0XHRjb25zdCB2bVR5cGUgPSB2aWV3RGF0YS52YXJpYW50TWFuYWdlbWVudDtcblx0XHRjb25zdCB2bSA9IHRoaXMuY29udGVudC5nZXRWYXJpYW50KCk7XG5cdFx0aWYgKHZtICYmIHRhYmxlVmFyaWFudElkICYmIHZtVHlwZSA9PT0gXCJDb250cm9sXCIpIHtcblx0XHRcdGNvbnN0IHZhcmlhbnRUb0FwcGx5ID0gdm0uZ2V0VmFyaWFudHMoKS5maW5kKCh2YXJpYW50KSA9PiB2YXJpYW50LmdldEtleSgpID09PSB0YWJsZVZhcmlhbnRJZCk7XG5cdFx0XHRjb25zdCBDb250cm9sVmFyaWFudEFwcGx5QVBJID0gKGF3YWl0IGltcG9ydChcInNhcC91aS9mbC9hcHBseS9hcGkvQ29udHJvbFZhcmlhbnRBcHBseUFQSVwiKSkuZGVmYXVsdDtcblx0XHRcdHJldHVybiBDb250cm9sVmFyaWFudEFwcGx5QVBJLmFjdGl2YXRlVmFyaWFudCh7XG5cdFx0XHRcdGVsZW1lbnQ6IHZtLFxuXHRcdFx0XHR2YXJpYW50UmVmZXJlbmNlOiB2YXJpYW50VG9BcHBseS5nZXRLZXkoKVxuXHRcdFx0fSk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFJldHJpZXZlcyB0aGUgc3RhcnR1cCBwYXJhbWV0ZXJzIGZyb20gdGhlIGFwcGxpY2F0aW9uIGNvbXBvbmVudCBkYXRhLlxuXHQgKiBUaGVzZSBwYXJhbWV0ZXJzIGNvbnRhaW4gVVJMIHF1ZXJ5IHBhcmFtZXRlcnMgdGhhdCB3ZXJlIHBhc3NlZCB3aGVuIHRoZSBhcHBsaWNhdGlvbiB3YXMgc3RhcnRlZC5cblx0ICogQHJldHVybnMgVGhlIHN0YXJ0dXAgcGFyYW1ldGVycyBhcyBhIGtleS12YWx1ZSBtYXBwaW5nIHdoZXJlIGVhY2gga2V5IGNhbiBoYXZlIG11bHRpcGxlIHZhbHVlcyxcblx0ICogICAgICAgICAgb3IgdW5kZWZpbmVkIGlmIG5vIHBhcmFtZXRlcnMgYXJlIGF2YWlsYWJsZSBvciBpZiB0aGUgY29tcG9uZW50IGNoYWluIGlzIG5vdCBhY2Nlc3NpYmxlLlxuXHQgKi9cblx0Z2V0U3RhcnR1cFBhcmFtZXRlcnModGhpczogVGFibGVBUEkpOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IHwgdW5kZWZpbmVkIHtcblx0XHRjb25zdCBjb250cm9sbGVyID0gdGhpcy5nZXRQYWdlQ29udHJvbGxlcigpO1xuXHRcdGNvbnN0IGFwcENvbXBvbmVudCA9IGNvbnRyb2xsZXIuZ2V0QXBwQ29tcG9uZW50KCk7XG5cdFx0Y29uc3QgY29tcG9uZW50RGF0YSA9IGFwcENvbXBvbmVudC5nZXRDb21wb25lbnREYXRhKCk7XG5cdFx0cmV0dXJuIGNvbXBvbmVudERhdGEuc3RhcnR1cFBhcmFtZXRlcnMgYXMgdW5rbm93biBhcyBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuXHR9XG5cblx0LyoqXG5cdCAqIEFzeW5jaHJvbm91c2x5IGFwcGxpZXMgbmF2aWdhdGlvbiBwYXJhbWV0ZXJzIHRvIHRoZSBmaWx0ZXIgYmFyLlxuXHQgKiBAcGFyYW0gbmF2aWdhdGlvblBhcmFtZXRlciBUaGUgbmF2aWdhdGlvbiBwYXJhbWV0ZXJzIHRvIGJlIGFwcGxpZWQuXG5cdCAqIEByZXR1cm5zIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIHBhcmFtZXRlcnMgaGF2ZSBiZWVuIGFwcGxpZWQuXG5cdCAqL1xuXHRhc3luYyBhcHBseU5hdmlnYXRpb25QYXJhbWV0ZXJzKHRoaXM6IFRhYmxlQVBJICYgVGFibGVBUElTdGF0ZUhhbmRsZXIsIG5hdmlnYXRpb25QYXJhbWV0ZXI6IE5hdmlnYXRpb25QYXJhbWV0ZXIpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHR0cnkge1xuXHRcdFx0Ly8gT25seSBoYW5kbGUgdmFyaWFudCBJRCBmcm9tIFVSTCBwYXJhbWV0ZXJzIGlmIGFwcGx5VmFyaWFudEZyb21VUkxQYXJhbXMgaXMgdHJ1ZVxuXHRcdFx0aWYgKG5hdmlnYXRpb25QYXJhbWV0ZXIuYXBwbHlWYXJpYW50RnJvbVVSTFBhcmFtcyA/PyBmYWxzZSkge1xuXHRcdFx0XHRhd2FpdCB0aGlzLmhhbmRsZVZhcmlhbnRJZFBhc3NlZFZpYVVSTFBhcmFtcygpO1xuXHRcdFx0fVxuXHRcdH0gY2F0Y2ggKGVycm9yOiB1bmtub3duKSB7XG5cdFx0XHRMb2cuZXJyb3IoXG5cdFx0XHRcdGBFcnJvciB0eWluZyB0byBhcHBseSBuYXZpZ2F0aW9uIHBhcmFtZXRlcnMgdG8gJHt0aGlzLmdldE1ldGFkYXRhKCkuZ2V0TmFtZSgpfX0gY29udHJvbCB3aXRoIElEOiAke3RoaXMuZ2V0SWQoKX1gLFxuXHRcdFx0XHRlcnJvciBhcyBFcnJvclxuXHRcdFx0KTtcblx0XHR9XG5cdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEFzeW5jaHJvbm91c2x5IGFwcGxpZXMgdGhlIHByb3ZpZGVkIGNvbnRyb2wgc3RhdGUgdG8gdGhlIHZpZXdzdGF0ZS5cblx0ICogQHBhcmFtIGNvbnRyb2xTdGF0ZSBUaGUgc3RhdGUgdG8gYmUgYXBwbGllZCB0byB0aGUgY29udHJvbC5cblx0ICogQHBhcmFtIFtfbmF2UGFyYW1ldGVyc10gT3B0aW9uYWwgbmF2aWdhdGlvbiBwYXJhbWV0ZXJzLlxuXHQgKiBAcGFyYW0gW3Nob3VsZEFwcGx5RGlmZlN0YXRlXSBPcHRpb25hbCBmbGFnIHRvIHNraXAgbWVyZ2luZyBzdGF0ZXMuXG5cdCAqIEByZXR1cm5zIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIHN0YXRlIGhhcyBiZWVuIGFwcGxpZWQuXG5cdCAqL1xuXHRhc3luYyBhcHBseVN0YXRlKFxuXHRcdHRoaXM6IFRhYmxlQVBJLFxuXHRcdGNvbnRyb2xTdGF0ZTogVGFibGVTdGF0ZSxcblx0XHRfbmF2UGFyYW1ldGVycz86IE5hdmlnYXRpb25QYXJhbWV0ZXIsXG5cdFx0c2hvdWxkQXBwbHlEaWZmU3RhdGU/OiBib29sZWFuXG5cdCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGlmICghY29udHJvbFN0YXRlKSByZXR1cm47XG5cblx0XHQvLyBUYWJsZSBwcm9wZXJ0aWVzIG5lZWQgdG8gYmUgYXZhaWxhYmxlIGJlZm9yZSBjYWxsaW5nIGRpZmZTdGF0ZS9yZXRyaWV2ZVN0YXRlLiBIb3dldmVyLCBhcHBseVN0YXRlXG5cdFx0Ly8gZ2V0cyBjYWxsZWQgdG9vIGVhcmx5IGluIHRoZSB0YWJsZSdzIGxpZmVjeWNsZSwgc28gdGhlIGRlbGVnYXRlIGFuZCBwcm9wZXJ0aWVzIGFyZSBub3QgeWV0IGF2YWlsYWJsZS5cblx0XHRhd2FpdCB0aGlzLmNvbnRlbnQuaW5pdGlhbGl6ZWQoKTtcblxuXHRcdGNvbnN0IGlubmVyVGFibGVTdGF0ZSA9IGNvbnRyb2xTdGF0ZT8uaW5uZXJUYWJsZTtcblx0XHRjb25zdCB2YXJpYW50SWQgPSBjb250cm9sU3RhdGU/LnZhcmlhbnRNYW5hZ2VtZW50Py52YXJpYW50SWQ7XG5cdFx0Y29uc3QgY3VycmVudFZhcmlhbnQgPSB0aGlzLmNvbnRlbnQ/LmdldFZhcmlhbnQoKTtcblx0XHRjb25zdCBxdWlja0ZpbHRlcktleSA9IGNvbnRyb2xTdGF0ZT8ucXVpY2tGaWx0ZXI/LnNlbGVjdGVkS2V5O1xuXHRcdGNvbnN0IHF1aWNrRmlsdGVyID0gdGhpcy5nZXRRdWlja0ZpbHRlcigpO1xuXG5cdFx0Ly8gSGFuZGxlIFZhcmlhbnQgTWFuYWdlbWVudFxuXHRcdGlmICh2YXJpYW50SWQgIT09IHVuZGVmaW5lZCAmJiB2YXJpYW50SWQgIT09IGN1cnJlbnRWYXJpYW50LmdldEN1cnJlbnRWYXJpYW50S2V5KCkpIHtcblx0XHRcdGNvbnN0IG92TSA9IHRoaXMuY29udGVudD8uZ2V0VmFyaWFudCgpO1xuXHRcdFx0Y29uc3QgYVZhcmlhbnRzID0gb3ZNPy5nZXRWYXJpYW50cygpO1xuXHRcdFx0Y29uc3Qgc1ZhcmlhbnRSZWZlcmVuY2UgPSBhVmFyaWFudHM/LnNvbWUoKG9WYXJpYW50KSA9PiBvVmFyaWFudC5nZXRLZXkoKSA9PT0gdmFyaWFudElkKVxuXHRcdFx0XHQ/IHZhcmlhbnRJZFxuXHRcdFx0XHQ6IG92TT8uZ2V0U3RhbmRhcmRWYXJpYW50S2V5O1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0Y29uc3QgQ29udHJvbFZhcmlhbnRBcHBseUFQSSA9IChhd2FpdCBpbXBvcnQoXCJzYXAvdWkvZmwvYXBwbHkvYXBpL0NvbnRyb2xWYXJpYW50QXBwbHlBUElcIikpLmRlZmF1bHQ7XG5cdFx0XHRcdGF3YWl0IENvbnRyb2xWYXJpYW50QXBwbHlBUEkuYWN0aXZhdGVWYXJpYW50KHtcblx0XHRcdFx0XHRlbGVtZW50OiBvdk0sXG5cdFx0XHRcdFx0dmFyaWFudFJlZmVyZW5jZTogc1ZhcmlhbnRSZWZlcmVuY2UgYXMgc3RyaW5nXG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRhd2FpdCB0aGlzLnNldEluaXRpYWxTdGF0ZSgpO1xuXHRcdFx0fSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcblx0XHRcdFx0TG9nLmVycm9yKGVycm9yIGFzIHN0cmluZyk7XG5cdFx0XHRcdGF3YWl0IHRoaXMuc2V0SW5pdGlhbFN0YXRlKCk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIHdlIG5lZWQgdG8gdXBkYXRlIGluaXRpYWwgc3RhdGUgZXZlbiBpZiBhYm92ZSBjb25kaXRpb24gbm90IHNhdGllc2ZpZWRcblx0XHRcdGF3YWl0IHRoaXMuc2V0SW5pdGlhbFN0YXRlKCk7XG5cdFx0fVxuXG5cdFx0Ly8gSGFuZGxlIElubmVyIFRhYmxlIFN0YXRlXG5cblx0XHRsZXQgZmluYWxTdGF0ZTtcblxuXHRcdGlmIChpbm5lclRhYmxlU3RhdGUpIHtcblx0XHRcdGlmIChzaG91bGRBcHBseURpZmZTdGF0ZSAmJiBpbm5lclRhYmxlU3RhdGUuaW5pdGlhbFN0YXRlKSB7XG5cdFx0XHRcdGlmICghaW5uZXJUYWJsZVN0YXRlLmluaXRpYWxTdGF0ZS5zdXBwbGVtZW50YXJ5Q29uZmlnKSB7XG5cdFx0XHRcdFx0aW5uZXJUYWJsZVN0YXRlLmluaXRpYWxTdGF0ZS5zdXBwbGVtZW50YXJ5Q29uZmlnID0ge307XG5cdFx0XHRcdH1cblx0XHRcdFx0ZmluYWxTdGF0ZSA9IGF3YWl0IFN0YXRlVXRpbC5kaWZmU3RhdGUoXG5cdFx0XHRcdFx0dGhpcy5jb250ZW50LFxuXHRcdFx0XHRcdGlubmVyVGFibGVTdGF0ZS5pbml0aWFsU3RhdGUgYXMgb2JqZWN0LFxuXHRcdFx0XHRcdGlubmVyVGFibGVTdGF0ZS5mdWxsU3RhdGUgYXMgb2JqZWN0XG5cdFx0XHRcdCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRpZiAoY29udHJvbFN0YXRlICYmICFjb250cm9sU3RhdGU/LnN1cHBsZW1lbnRhcnlDb25maWcpIHtcblx0XHRcdFx0XHRjb250cm9sU3RhdGUuc3VwcGxlbWVudGFyeUNvbmZpZyA9IHt9O1xuXHRcdFx0XHR9XG5cdFx0XHRcdGZpbmFsU3RhdGUgPSBpbm5lclRhYmxlU3RhdGUuZnVsbFN0YXRlO1xuXHRcdFx0fVxuXHRcdFx0YXdhaXQgU3RhdGVVdGlsLmFwcGx5RXh0ZXJuYWxTdGF0ZSh0aGlzLmNvbnRlbnQsIGZpbmFsU3RhdGUpO1xuXHRcdH1cblxuXHRcdC8vIEhhbmRsZSBRdWljayBGaWx0ZXIgU3RhdGVcblx0XHRpZiAocXVpY2tGaWx0ZXJLZXkgJiYgcXVpY2tGaWx0ZXJLZXkgIT09IHF1aWNrRmlsdGVyPy5nZXRTZWxlY3RlZEtleSgpKSB7XG5cdFx0XHRxdWlja0ZpbHRlcj8uc2V0U2VsZWN0ZWRLZXkocXVpY2tGaWx0ZXJLZXkpO1xuXHRcdFx0dGhpcy5vblF1aWNrRmlsdGVyU2VsZWN0aW9uQ2hhbmdlKCk7XG5cdFx0fVxuXHRcdGlmICh0aGlzLmluaXRpYWxMb2FkICYmIHRoaXMuZmlsdGVyQmFyKSB7XG5cdFx0XHRjb25zdCBmaWx0ZXJCYXIgPSB0aGlzLmdldEZpbHRlckJhckNvbnRyb2wodGhpcy5maWx0ZXJCYXIpO1xuXHRcdFx0aWYgKGZpbHRlckJhciAmJiBmaWx0ZXJCYXIuaXNBPEZpbHRlckJhckFQST4oXCJzYXAuZmUubWFjcm9zLmZpbHRlckJhci5GaWx0ZXJCYXJBUElcIikpIHtcblx0XHRcdFx0ZmlsdGVyQmFyXG5cdFx0XHRcdFx0LndhaXRGb3JJbml0aWFsU3RhdGUoKVxuXHRcdFx0XHRcdC50aGVuKCgpOiB2b2lkID0+IHtcblx0XHRcdFx0XHRcdHRoaXMuY29udGVudC5yZWJpbmQoKTtcblx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdC5jYXRjaCgoKTogdm9pZCA9PiB7XG5cdFx0XHRcdFx0XHRMb2cuZXJyb3IoXCJFcnJvciB3aGlsZSB3YWl0aW5nIGZvciBpbml0aWFsIHN0YXRlIG9mIGZpbHRlciBiYXJcIik7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztNQVdxQkEsb0JBQW9CLDBCQUFBQyxxQkFBQTtJQUFBLFNBQUFELHFCQUFBO01BQUEsT0FBQUMscUJBQUEsQ0FBQUMsS0FBQSxPQUFBQyxTQUFBO0lBQUE7SUFBQUMsUUFBQSxHQUFBSixvQkFBQTtJQUFBSyxjQUFBLENBQUFMLG9CQUFBLEVBQUFDLHFCQUFBO0lBQUEsSUFBQUssTUFBQSxHQUFBTixvQkFBQSxDQUFBTyxTQUFBO0lBQ3hDO0FBQ0Q7QUFDQTtBQUNBO0lBSENELE1BQUEsQ0FJTUUsYUFBYSxHQUFuQixlQUFNQSxhQUFhQSxDQUFBLEVBQTZDO01BQy9ELE1B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
252
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJUYWJsZUFQSVN0YXRlSGFuZGxlciIsIl9JVmlld1N0YXRlQ29udHJpYnV0byIsImFwcGx5IiwiYXJndW1lbnRzIiwiX2V4cG9ydHMiLCJfaW5oZXJpdHNMb29zZSIsIl9wcm90byIsInByb3RvdHlwZSIsInJldHJpZXZlU3RhdGUiLCJ0YWJsZVN0YXRlIiwiaW5uZXJUYWJsZSIsImdldENvbnRyb2xTdGF0ZSIsIlN0YXRlVXRpbCIsInJldHJpZXZlRXh0ZXJuYWxTdGF0ZSIsImNvbnRlbnQiLCJxdWlja0ZpbHRlciIsImdldFF1aWNrRmlsdGVyIiwicXVpY2tGaWx0ZXJTdGF0ZSIsImdldFNlbGVjdGVkS2V5Iiwic2VsZWN0ZWRLZXkiLCJ2YXJpYW50VG9SZXRyaWV2ZSIsImdldFZhcmlhbnQiLCJnZXRJZCIsInZhcmlhbnRNYW5hZ2VtZW50Q29udHJvbCIsInZhcmlhbnRNYW5hZ2VtZW50IiwidmFyaWFudElkIiwiZ2V0Q3VycmVudFZhcmlhbnRLZXkiLCJzZXRJbml0aWFsU3RhdGUiLCJpbml0aWFsQ29udHJvbFN0YXRlIiwiZSIsIkxvZyIsImVycm9yIiwiYXBwbHlMZWdhY3lTdGF0ZSIsIl9uYXZQYXJhbWV0ZXJzIiwic2hvdWxkQXBwbHlEaWZmU3RhdGUiLCJ0YWJsZSIsInZtIiwidm1TdGF0ZSIsImNvbnRyb2xTdGF0ZSIsImZ1bGxTdGF0ZSIsImluaXRpYWxTdGF0ZSIsInRvU3RyaW5nIiwiT2JqZWN0Iiwia2V5cyIsImxlbmd0aCIsImFwcGx5U3RhdGUiLCJoYW5kbGVWYXJpYW50SWRQYXNzZWRWaWFVUkxQYXJhbXMiLCJ1cmxQYXJhbXMiLCJnZXRTdGFydHVwUGFyYW1ldGVycyIsInRhYmxlVmFyaWFudElkIiwidmlldyIsIkNvbW1vblV0aWxzIiwiZ2V0VGFyZ2V0VmlldyIsInZpZXdEYXRhIiwiZ2V0Vmlld0RhdGEiLCJ2bVR5cGUiLCJ2YXJpYW50VG9BcHBseSIsImdldFZhcmlhbnRzIiwiZmluZCIsInZhcmlhbnQiLCJnZXRLZXkiLCJDb250cm9sVmFyaWFudEFwcGx5QVBJIiwiX191aTVfcmVxdWlyZV9hc3luYyIsImRlZmF1bHQiLCJhY3RpdmF0ZVZhcmlhbnQiLCJlbGVtZW50IiwidmFyaWFudFJlZmVyZW5jZSIsImNvbnRyb2xsZXIiLCJnZXRQYWdlQ29udHJvbGxlciIsImFwcENvbXBvbmVudCIsImdldEFwcENvbXBvbmVudCIsImFwcGx5TmF2aWdhdGlvblBhcmFtZXRlcnMiLCJuYXZpZ2F0aW9uUGFyYW1ldGVyIiwiYXBwbHlWYXJpYW50RnJvbVVSTFBhcmFtcyIsImdldE1ldGFkYXRhIiwiZ2V0TmFtZSIsIlByb21pc2UiLCJyZXNvbHZlIiwiaW5pdGlhbGl6ZWQiLCJpbm5lclRhYmxlU3RhdGUiLCJjdXJyZW50VmFyaWFudCIsInF1aWNrRmlsdGVyS2V5IiwidW5kZWZpbmVkIiwib3ZNIiwiYVZhcmlhbnRzIiwic1ZhcmlhbnRSZWZlcmVuY2UiLCJzb21lIiwib1ZhcmlhbnQiLCJnZXRTdGFuZGFyZFZhcmlhbnRLZXkiLCJmaW5hbFN0YXRlIiwic3VwcGxlbWVudGFyeUNvbmZpZyIsImRpZmZTdGF0ZSIsImFwcGx5RXh0ZXJuYWxTdGF0ZSIsInNldFNlbGVjdGVkS2V5Iiwib25RdWlja0ZpbHRlclNlbGVjdGlvbkNoYW5nZSIsImluaXRpYWxMb2FkIiwiZmlsdGVyQmFyIiwiZ2V0RmlsdGVyQmFyQ29udHJvbCIsImlzQSIsIndhaXRGb3JJbml0aWFsU3RhdGUiLCJ0aGVuIiwicmViaW5kIiwiY2F0Y2giLCJJVmlld1N0YXRlQ29udHJpYnV0b3JNaXhpbiJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiVGFibGVBUElTdGF0ZUhhbmRsZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgdHlwZSB7IFN0YXJ0dXBQYXJhbWV0ZXJzIH0gZnJvbSBcInNhcC9mZS9jb3JlL0FwcENvbXBvbmVudFwiO1xuaW1wb3J0IENvbW1vblV0aWxzIGZyb20gXCJzYXAvZmUvY29yZS9Db21tb25VdGlsc1wiO1xuaW1wb3J0IHR5cGUgeyBOYXZpZ2F0aW9uUGFyYW1ldGVyIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL1ZpZXdTdGF0ZVwiO1xuaW1wb3J0IElWaWV3U3RhdGVDb250cmlidXRvck1peGluIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy92aWV3U3RhdGUvSVZpZXdTdGF0ZUNvbnRyaWJ1dG9yTWl4aW5cIjtcbmltcG9ydCB0eXBlIEZpbHRlckJhckFQSSBmcm9tIFwic2FwL2ZlL21hY3Jvcy9maWx0ZXJCYXIvRmlsdGVyQmFyQVBJXCI7XG5pbXBvcnQgdHlwZSB7IENvbnRyb2xTdGF0ZSB9IGZyb20gXCJzYXAvZmUvbWFjcm9zL2luc2lnaHRzL0NvbW1vbkluc2lnaHRzSGVscGVyXCI7XG5pbXBvcnQgdHlwZSBUYWJsZUFQSSBmcm9tIFwic2FwL2ZlL21hY3Jvcy90YWJsZS9UYWJsZUFQSVwiO1xuaW1wb3J0IHR5cGUgeyBUYWJsZVN0YXRlIH0gZnJvbSBcInNhcC9mZS9tYWNyb3MvdGFibGUvVGFibGVBUElcIjtcbmltcG9ydCB0eXBlIE1hbmFnZWRPYmplY3QgZnJvbSBcInNhcC91aS9iYXNlL01hbmFnZWRPYmplY3RcIjtcbmltcG9ydCBTdGF0ZVV0aWwgZnJvbSBcInNhcC91aS9tZGMvcDEzbi9TdGF0ZVV0aWxcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGFibGVBUElTdGF0ZUhhbmRsZXIgZXh0ZW5kcyBJVmlld1N0YXRlQ29udHJpYnV0b3JNaXhpbjxUYWJsZVN0YXRlPiB7XG5cdC8qKlxuXHQgKiBBc3luY2hyb25vdXNseSByZXRyaWV2ZXMgdGhlIHN0YXRlIG9mIHRoZSB0YWJsZSBiYXNlZCBvbiB0aGUgcHJvdmlkZWQgdmlld3N0YXRlLlxuXHQgKiBAcmV0dXJucyBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB0byB0aGUgdGFibGUgc3RhdGUgb3IgbnVsbCBpZiBub3QgZm91bmQuXG5cdCAqL1xuXHRhc3luYyByZXRyaWV2ZVN0YXRlKHRoaXM6IFRhYmxlQVBJKTogUHJvbWlzZTxUYWJsZVN0YXRlIHwgbnVsbD4ge1xuXHRcdGNvbnN0IHRhYmxlU3RhdGU6IFRhYmxlU3RhdGUgPSB7fTtcblx0XHR0YWJsZVN0YXRlLmlubmVyVGFibGUgPSB0aGlzLmdldENvbnRyb2xTdGF0ZShhd2FpdCBTdGF0ZVV0aWwucmV0cmlldmVFeHRlcm5hbFN0YXRlKHRoaXMuY29udGVudCkpIGFzIG9iamVjdDtcblx0XHRjb25zdCBxdWlja0ZpbHRlciA9IHRoaXMuZ2V0UXVpY2tGaWx0ZXIoKTtcblx0XHRpZiAocXVpY2tGaWx0ZXIpIHtcblx0XHRcdGNvbnN0IHF1aWNrRmlsdGVyU3RhdGUgPSBxdWlja0ZpbHRlci5nZXRTZWxlY3RlZEtleSgpO1xuXHRcdFx0aWYgKCF0YWJsZVN0YXRlLnF1aWNrRmlsdGVyKSB7XG5cdFx0XHRcdHRhYmxlU3RhdGUucXVpY2tGaWx0ZXIgPSB7fTtcblx0XHRcdH1cblx0XHRcdHRhYmxlU3RhdGUucXVpY2tGaWx0ZXIuc2VsZWN0ZWRLZXkgPSBxdWlja0ZpbHRlclN0YXRlO1xuXHRcdH1cblx0XHRjb25zdCB2YXJpYW50VG9SZXRyaWV2ZSA9IHRoaXMuY29udGVudC5nZXRWYXJpYW50KCk/LmdldElkKCk7XG5cdFx0aWYgKHZhcmlhbnRUb1JldHJpZXZlKSB7XG5cdFx0XHRjb25zdCB2YXJpYW50TWFuYWdlbWVudENvbnRyb2wgPSB0aGlzLmNvbnRlbnQuZ2V0VmFyaWFudCgpO1xuXHRcdFx0aWYgKCF0YWJsZVN0YXRlLnZhcmlhbnRNYW5hZ2VtZW50KSB7XG5cdFx0XHRcdHRhYmxlU3RhdGUudmFyaWFudE1hbmFnZW1lbnQgPSB7IHZhcmlhbnRJZDogdmFyaWFudE1hbmFnZW1lbnRDb250cm9sPy5nZXRDdXJyZW50VmFyaWFudEtleSgpIH07XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0YWJsZVN0YXRlLnZhcmlhbnRNYW5hZ2VtZW50LnZhcmlhbnRJZCA9IHZhcmlhbnRNYW5hZ2VtZW50Q29udHJvbD8uZ2V0Q3VycmVudFZhcmlhbnRLZXkoKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHRhYmxlU3RhdGU7XG5cdH1cblxuXHQvKipcblx0ICogU2V0cyB0aGUgaW5pdGlhbCBzdGF0ZSBvZiB0aGUgY29udHJvbCBieSByZXRyaWV2aW5nIHRoZSBleHRlcm5hbCBzdGF0ZS5cblx0ICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgaW5pdGlhbCBzdGF0ZSBpcyBzZXQuXG5cdCAqL1xuXHRhc3luYyBzZXRJbml0aWFsU3RhdGUodGhpczogVGFibGVBUEkpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHR0cnkge1xuXHRcdFx0Y29uc3QgaW5pdGlhbENvbnRyb2xTdGF0ZSA9IGF3YWl0IFN0YXRlVXRpbC5yZXRyaWV2ZUV4dGVybmFsU3RhdGUodGhpcy5jb250ZW50KTtcblx0XHRcdHRoaXMuaW5pdGlhbENvbnRyb2xTdGF0ZSA9IGluaXRpYWxDb250cm9sU3RhdGU7XG5cdFx0fSBjYXRjaCAoZTogdW5rbm93bikge1xuXHRcdFx0TG9nLmVycm9yKGUgYXMgc3RyaW5nKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQXBwbGllcyB0aGUgbGVnYWN5IHN0YXRlIHRvIHRoZSB0YWJsZSBiYXNlZCBvbiB0aGUgcHJvdmlkZWQgY29udHJvbCBzdGF0ZSByZXRyaWV2YWwgZnVuY3Rpb24uXG5cdCAqIEBwYXJhbSBnZXRDb250cm9sU3RhdGUgRnVuY3Rpb24gdG8gcmV0cmlldmUgdGhlIGNvbnRyb2wgc3RhdGUuXG5cdCAqIEBwYXJhbSBbX25hdlBhcmFtZXRlcnNdIE9wdGlvbmFsIG5hdmlnYXRpb24gcGFyYW1ldGVycy5cblx0ICogQHBhcmFtIFtzaG91bGRBcHBseURpZmZTdGF0ZV0gRmxhZyBpbmRpY2F0aW5nIHdoZXRoZXIgdG8gYXBwbHkgdGhlIGRpZmYgc3RhdGUuXG5cdCAqIEByZXR1cm5zIC0gQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgc3RhdGUgaGFzIGJlZW4gYXBwbGllZC5cblx0ICovXG5cdGFzeW5jIGFwcGx5TGVnYWN5U3RhdGUoXG5cdFx0dGhpczogVGFibGVBUEksXG5cdFx0Z2V0Q29udHJvbFN0YXRlOiAoY29udHJvbDogTWFuYWdlZE9iamVjdCkgPT4gQ29udHJvbFN0YXRlLFxuXHRcdF9uYXZQYXJhbWV0ZXJzPzogTmF2aWdhdGlvblBhcmFtZXRlcixcblx0XHRzaG91bGRBcHBseURpZmZTdGF0ZT86IGJvb2xlYW5cblx0KTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0Y29uc3QgdGFibGUgPSB0aGlzLmNvbnRlbnQ7XG5cdFx0Y29uc3Qgdm0gPSB0YWJsZS5nZXRWYXJpYW50KCk7XG5cdFx0Y29uc3QgcXVpY2tGaWx0ZXIgPSB0aGlzLmdldFF1aWNrRmlsdGVyKCk7XG5cblx0XHRjb25zdCB0YWJsZVN0YXRlID0gZ2V0Q29udHJvbFN0YXRlKHRhYmxlKSBhcyB7IGluaXRpYWxTdGF0ZT86IFRhYmxlU3RhdGU7IGZ1bGxTdGF0ZT86IFRhYmxlU3RhdGUgfTtcblx0XHRjb25zdCB2bVN0YXRlID0gdm0gPyBnZXRDb250cm9sU3RhdGUodm0pIDogbnVsbDtcblx0XHRjb25zdCBxdWlja0ZpbHRlclN0YXRlID0gcXVpY2tGaWx0ZXI/LmNvbnRlbnQgPyBnZXRDb250cm9sU3RhdGUocXVpY2tGaWx0ZXIuY29udGVudCkgOiBudWxsO1xuXG5cdFx0Y29uc3QgY29udHJvbFN0YXRlOiBUYWJsZVN0YXRlID0ge307XG5cblx0XHRpZiAodGFibGVTdGF0ZSkge1xuXHRcdFx0Y29udHJvbFN0YXRlLmlubmVyVGFibGUgPSB7XG5cdFx0XHRcdC4uLmNvbnRyb2xTdGF0ZS5pbm5lclRhYmxlLFxuXHRcdFx0XHQuLi50YWJsZVN0YXRlLFxuXHRcdFx0XHRmdWxsU3RhdGU6IHtcblx0XHRcdFx0XHQuLi5jb250cm9sU3RhdGUuaW5uZXJUYWJsZT8uZnVsbFN0YXRlLFxuXHRcdFx0XHRcdC4uLnRhYmxlU3RhdGUuZnVsbFN0YXRlXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGluaXRpYWxTdGF0ZToge1xuXHRcdFx0XHRcdC4uLmNvbnRyb2xTdGF0ZS5pbm5lclRhYmxlPy5pbml0aWFsU3RhdGUsXG5cdFx0XHRcdFx0Li4udGFibGVTdGF0ZS5pbml0aWFsU3RhdGVcblx0XHRcdFx0fVxuXHRcdFx0fTtcblx0XHR9XG5cblx0XHRpZiAodm1TdGF0ZT8udmFyaWFudElkKSB7XG5cdFx0XHRjb250cm9sU3RhdGUudmFyaWFudE1hbmFnZW1lbnQgPSB7XG5cdFx0XHRcdC4uLmNvbnRyb2xTdGF0ZS52YXJpYW50TWFuYWdlbWVudCxcblx0XHRcdFx0dmFyaWFudElkOiB2bVN0YXRlLnZhcmlhbnRJZC50b1N0cmluZygpXG5cdFx0XHR9O1xuXHRcdH1cblxuXHRcdGlmIChxdWlja0ZpbHRlclN0YXRlPy5zZWxlY3RlZEtleSkge1xuXHRcdFx0Y29udHJvbFN0YXRlLnF1aWNrRmlsdGVyID0ge1xuXHRcdFx0XHQuLi5jb250cm9sU3RhdGUucXVpY2tGaWx0ZXIsXG5cdFx0XHRcdHNlbGVjdGVkS2V5OiBxdWlja0ZpbHRlclN0YXRlLnNlbGVjdGVkS2V5LnRvU3RyaW5nKClcblx0XHRcdH07XG5cdFx0fVxuXHRcdGlmIChjb250cm9sU3RhdGUgJiYgT2JqZWN0LmtleXMoY29udHJvbFN0YXRlKS5sZW5ndGggPiAwKSB7XG5cdFx0XHRhd2FpdCB0aGlzLmFwcGx5U3RhdGUoY29udHJvbFN0YXRlIGFzIG9iamVjdCwgX25hdlBhcmFtZXRlcnMsIHNob3VsZEFwcGx5RGlmZlN0YXRlKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogSGFuZGxlcyB0aGUgYXBwbGljYXRpb24gb2YgYSB2YXJpYW50IElEIHBhc3NlZCB2aWEgVVJMIHBhcmFtZXRlcnMuXG5cdCAqIEByZXR1cm5zIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIHZhcmlhbnQgaGFzIGJlZW4gYXBwbGllZC5cblx0ICovXG5cdGFzeW5jIGhhbmRsZVZhcmlhbnRJZFBhc3NlZFZpYVVSTFBhcmFtcyh0aGlzOiBUYWJsZUFQSSAmIFRhYmxlQVBJU3RhdGVIYW5kbGVyKTogUHJvbWlzZTx1bmtub3duPiB7XG5cdFx0Y29uc3QgdXJsUGFyYW1zID0gYXdhaXQgdGhpcy5nZXRTdGFydHVwUGFyYW1ldGVycygpO1xuXHRcdGNvbnN0IHRhYmxlVmFyaWFudElkID0gdXJsUGFyYW1zW1wic2FwLXVpLWZlLXRhYmxlLXZhcmlhbnQtaWRcIl0/LlswXTtcblx0XHRjb25zdCB2aWV3ID0gQ29tbW9uVXRpbHMuZ2V0VGFyZ2V0Vmlldyh0aGlzKTtcblx0XHRjb25zdCB2aWV3RGF0YSA9IHZpZXcuZ2V0Vmlld0RhdGEoKTtcblx0XHRjb25zdCB2bVR5cGUgPSB2aWV3RGF0YS52YXJpYW50TWFuYWdlbWVudDtcblx0XHRjb25zdCB2bSA9IHRoaXMuY29udGVudC5nZXRWYXJpYW50KCk7XG5cdFx0aWYgKHZtICYmIHRhYmxlVmFyaWFudElkICYmIHR5cGVvZiB0YWJsZVZhcmlhbnRJZCA9PT0gXCJzdHJpbmdcIiAmJiB2bVR5cGUgPT09IFwiQ29udHJvbFwiKSB7XG5cdFx0XHRjb25zdCB2YXJpYW50VG9BcHBseSA9IHZtLmdldFZhcmlhbnRzKCkuZmluZCgodmFyaWFudCkgPT4gdmFyaWFudC5nZXRLZXkoKSA9PT0gdGFibGVWYXJpYW50SWQpO1xuXHRcdFx0Y29uc3QgQ29udHJvbFZhcmlhbnRBcHBseUFQSSA9IChhd2FpdCBpbXBvcnQoXCJzYXAvdWkvZmwvYXBwbHkvYXBpL0NvbnRyb2xWYXJpYW50QXBwbHlBUElcIikpLmRlZmF1bHQ7XG5cdFx0XHRyZXR1cm4gQ29udHJvbFZhcmlhbnRBcHBseUFQSS5hY3RpdmF0ZVZhcmlhbnQoe1xuXHRcdFx0XHRlbGVtZW50OiB2bSxcblx0XHRcdFx0dmFyaWFudFJlZmVyZW5jZTogdmFyaWFudFRvQXBwbHk/LmdldEtleSgpXG5cdFx0XHR9KTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogUmV0cmlldmVzIHRoZSBzdGFydHVwIHBhcmFtZXRlcnMgZnJvbSB0aGUgYXBwbGljYXRpb24gY29tcG9uZW50IGRhdGEuXG5cdCAqIFRoZXNlIHBhcmFtZXRlcnMgY29udGFpbiBVUkwgcXVlcnkgcGFyYW1ldGVycyB0aGF0IHdlcmUgcGFzc2VkIHdoZW4gdGhlIGFwcGxpY2F0aW9uIHdhcyBzdGFydGVkLlxuXHQgKiBAcmV0dXJucyBUaGUgc3RhcnR1cCBwYXJhbWV0ZXJzLlxuXHQgKi9cblx0YXN5bmMgZ2V0U3RhcnR1cFBhcmFtZXRlcnModGhpczogVGFibGVBUEkpOiBQcm9taXNlPFN0YXJ0dXBQYXJhbWV0ZXJzPiB7XG5cdFx0Y29uc3QgY29udHJvbGxlciA9IHRoaXMuZ2V0UGFnZUNvbnRyb2xsZXIoKTtcblx0XHRjb25zdCBhcHBDb21wb25lbnQgPSBjb250cm9sbGVyLmdldEFwcENvbXBvbmVudCgpO1xuXHRcdHJldHVybiBhcHBDb21wb25lbnQuZ2V0U3RhcnR1cFBhcmFtZXRlcnMoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBBc3luY2hyb25vdXNseSBhcHBsaWVzIG5hdmlnYXRpb24gcGFyYW1ldGVycyB0byB0aGUgZmlsdGVyIGJhci5cblx0ICogQHBhcmFtIG5hdmlnYXRpb25QYXJhbWV0ZXIgVGhlIG5hdmlnYXRpb24gcGFyYW1ldGVycyB0byBiZSBhcHBsaWVkLlxuXHQgKiBAcmV0dXJucyBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBwYXJhbWV0ZXJzIGhhdmUgYmVlbiBhcHBsaWVkLlxuXHQgKi9cblx0YXN5bmMgYXBwbHlOYXZpZ2F0aW9uUGFyYW1ldGVycyh0aGlzOiBUYWJsZUFQSSAmIFRhYmxlQVBJU3RhdGVIYW5kbGVyLCBuYXZpZ2F0aW9uUGFyYW1ldGVyOiBOYXZpZ2F0aW9uUGFyYW1ldGVyKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0dHJ5IHtcblx0XHRcdC8vIE9ubHkgaGFuZGxlIHZhcmlhbnQgSUQgZnJvbSBVUkwgcGFyYW1ldGVycyBpZiBhcHBseVZhcmlhbnRGcm9tVVJMUGFyYW1zIGlzIHRydWVcblx0XHRcdGlmIChuYXZpZ2F0aW9uUGFyYW1ldGVyLmFwcGx5VmFyaWFudEZyb21VUkxQYXJhbXMgPz8gZmFsc2UpIHtcblx0XHRcdFx0YXdhaXQgdGhpcy5oYW5kbGVWYXJpYW50SWRQYXNzZWRWaWFVUkxQYXJhbXMoKTtcblx0XHRcdH1cblx0XHR9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuXHRcdFx0TG9nLmVycm9yKFxuXHRcdFx0XHRgRXJyb3IgdHlpbmcgdG8gYXBwbHkgbmF2aWdhdGlvbiBwYXJhbWV0ZXJzIHRvICR7dGhpcy5nZXRNZXRhZGF0YSgpLmdldE5hbWUoKX19IGNvbnRyb2wgd2l0aCBJRDogJHt0aGlzLmdldElkKCl9YCxcblx0XHRcdFx0ZXJyb3IgYXMgRXJyb3Jcblx0XHRcdCk7XG5cdFx0fVxuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBBc3luY2hyb25vdXNseSBhcHBsaWVzIHRoZSBwcm92aWRlZCBjb250cm9sIHN0YXRlIHRvIHRoZSB2aWV3c3RhdGUuXG5cdCAqIEBwYXJhbSBjb250cm9sU3RhdGUgVGhlIHN0YXRlIHRvIGJlIGFwcGxpZWQgdG8gdGhlIGNvbnRyb2wuXG5cdCAqIEBwYXJhbSBbX25hdlBhcmFtZXRlcnNdIE9wdGlvbmFsIG5hdmlnYXRpb24gcGFyYW1ldGVycy5cblx0ICogQHBhcmFtIFtzaG91bGRBcHBseURpZmZTdGF0ZV0gT3B0aW9uYWwgZmxhZyB0byBza2lwIG1lcmdpbmcgc3RhdGVzLlxuXHQgKiBAcmV0dXJucyBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBzdGF0ZSBoYXMgYmVlbiBhcHBsaWVkLlxuXHQgKi9cblx0YXN5bmMgYXBwbHlTdGF0ZShcblx0XHR0aGlzOiBUYWJsZUFQSSxcblx0XHRjb250cm9sU3RhdGU6IFRhYmxlU3RhdGUsXG5cdFx0X25hdlBhcmFtZXRlcnM/OiBOYXZpZ2F0aW9uUGFyYW1ldGVyLFxuXHRcdHNob3VsZEFwcGx5RGlmZlN0YXRlPzogYm9vbGVhblxuXHQpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRpZiAoIWNvbnRyb2xTdGF0ZSkgcmV0dXJuO1xuXG5cdFx0Ly8gVGFibGUgcHJvcGVydGllcyBuZWVkIHRvIGJlIGF2YWlsYWJsZSBiZWZvcmUgY2FsbGluZyBkaWZmU3RhdGUvcmV0cmlldmVTdGF0ZS4gSG93ZXZlciwgYXBwbHlTdGF0ZVxuXHRcdC8vIGdldHMgY2FsbGVkIHRvbyBlYXJseSBpbiB0aGUgdGFibGUncyBsaWZlY3ljbGUsIHNvIHRoZSBkZWxlZ2F0ZSBhbmQgcHJvcGVydGllcyBhcmUgbm90IHlldCBhdmFpbGFibGUuXG5cdFx0YXdhaXQgdGhpcy5jb250ZW50LmluaXRpYWxpemVkKCk7XG5cblx0XHRjb25zdCBpbm5lclRhYmxlU3RhdGUgPSBjb250cm9sU3RhdGU/LmlubmVyVGFibGU7XG5cdFx0Y29uc3QgdmFyaWFudElkID0gY29udHJvbFN0YXRlPy52YXJpYW50TWFuYWdlbWVudD8udmFyaWFudElkO1xuXHRcdGNvbnN0IGN1cnJlbnRWYXJpYW50ID0gdGhpcy5jb250ZW50Py5nZXRWYXJpYW50KCk7XG5cdFx0Y29uc3QgcXVpY2tGaWx0ZXJLZXkgPSBjb250cm9sU3RhdGU/LnF1aWNrRmlsdGVyPy5zZWxlY3RlZEtleTtcblx0XHRjb25zdCBxdWlja0ZpbHRlciA9IHRoaXMuZ2V0UXVpY2tGaWx0ZXIoKTtcblxuXHRcdC8vIEhhbmRsZSBWYXJpYW50IE1hbmFnZW1lbnRcblx0XHRpZiAodmFyaWFudElkICE9PSB1bmRlZmluZWQgJiYgdmFyaWFudElkICE9PSBjdXJyZW50VmFyaWFudC5nZXRDdXJyZW50VmFyaWFudEtleSgpKSB7XG5cdFx0XHRjb25zdCBvdk0gPSB0aGlzLmNvbnRlbnQ/LmdldFZhcmlhbnQoKTtcblx0XHRcdGNvbnN0IGFWYXJpYW50cyA9IG92TT8uZ2V0VmFyaWFudHMoKTtcblx0XHRcdGNvbnN0IHNWYXJpYW50UmVmZXJlbmNlID0gYVZhcmlhbnRzPy5zb21lKChvVmFyaWFudCkgPT4gb1ZhcmlhbnQuZ2V0S2V5KCkgPT09IHZhcmlhbnRJZClcblx0XHRcdFx0PyB2YXJpYW50SWRcblx0XHRcdFx0OiBvdk0/LmdldFN0YW5kYXJkVmFyaWFudEtleTtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdGNvbnN0IENvbnRyb2xWYXJpYW50QXBwbHlBUEkgPSAoYXdhaXQgaW1wb3J0KFwic2FwL3VpL2ZsL2FwcGx5L2FwaS9Db250cm9sVmFyaWFudEFwcGx5QVBJXCIpKS5kZWZhdWx0O1xuXHRcdFx0XHRhd2FpdCBDb250cm9sVmFyaWFudEFwcGx5QVBJLmFjdGl2YXRlVmFyaWFudCh7XG5cdFx0XHRcdFx0ZWxlbWVudDogb3ZNLFxuXHRcdFx0XHRcdHZhcmlhbnRSZWZlcmVuY2U6IHNWYXJpYW50UmVmZXJlbmNlIGFzIHN0cmluZ1xuXHRcdFx0XHR9KTtcblx0XHRcdFx0YXdhaXQgdGhpcy5zZXRJbml0aWFsU3RhdGUoKTtcblx0XHRcdH0gY2F0Y2ggKGVycm9yOiB1bmtub3duKSB7XG5cdFx0XHRcdExvZy5lcnJvcihlcnJvciBhcyBzdHJpbmcpO1xuXHRcdFx0XHRhd2FpdCB0aGlzLnNldEluaXRpYWxTdGF0ZSgpO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyB3ZSBuZWVkIHRvIHVwZGF0ZSBpbml0aWFsIHN0YXRlIGV2ZW4gaWYgYWJvdmUgY29uZGl0aW9uIG5vdCBzYXRpZXNmaWVkXG5cdFx0XHRhd2FpdCB0aGlzLnNldEluaXRpYWxTdGF0ZSgpO1xuXHRcdH1cblxuXHRcdC8vIEhhbmRsZSBJbm5lciBUYWJsZSBTdGF0ZVxuXG5cdFx0bGV0IGZpbmFsU3RhdGU7XG5cblx0XHRpZiAoaW5uZXJUYWJsZVN0YXRlKSB7XG5cdFx0XHRpZiAoc2hvdWxkQXBwbHlEaWZmU3RhdGUgJiYgaW5uZXJUYWJsZVN0YXRlLmluaXRpYWxTdGF0ZSkge1xuXHRcdFx0XHRpZiAoIWlubmVyVGFibGVTdGF0ZS5pbml0aWFsU3RhdGUuc3VwcGxlbWVudGFyeUNvbmZpZykge1xuXHRcdFx0XHRcdGlubmVyVGFibGVTdGF0ZS5pbml0aWFsU3RhdGUuc3VwcGxlbWVudGFyeUNvbmZpZyA9IHt9O1xuXHRcdFx0XHR9XG5cdFx0XHRcdGZpbmFsU3RhdGUgPSBhd2FpdCBTdGF0ZVV0aWwuZGlmZlN0YXRlKFxuXHRcdFx0XHRcdHRoaXMuY29udGVudCxcblx0XHRcdFx0XHRpbm5lclRhYmxlU3RhdGUuaW5pdGlhbFN0YXRlIGFzIG9iamVjdCxcblx0XHRcdFx0XHRpbm5lclRhYmxlU3RhdGUuZnVsbFN0YXRlIGFzIG9iamVjdFxuXHRcdFx0XHQpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0aWYgKGNvbnRyb2xTdGF0ZSAmJiAhY29udHJvbFN0YXRlPy5zdXBwbGVtZW50YXJ5Q29uZmlnKSB7XG5cdFx0XHRcdFx0Y29udHJvbFN0YXRlLnN1cHBsZW1lbnRhcnlDb25maWcgPSB7fTtcblx0XHRcdFx0fVxuXHRcdFx0XHRmaW5hbFN0YXRlID0gaW5uZXJUYWJsZVN0YXRlLmZ1bGxTdGF0ZTtcblx0XHRcdH1cblx0XHRcdGF3YWl0IFN0YXRlVXRpbC5hcHBseUV4dGVybmFsU3RhdGUodGhpcy5jb250ZW50LCBmaW5hbFN0YXRlKTtcblx0XHR9XG5cblx0XHQvLyBIYW5kbGUgUXVpY2sgRmlsdGVyIFN0YXRlXG5cdFx0aWYgKHF1aWNrRmlsdGVyS2V5ICYmIHF1aWNrRmlsdGVyS2V5ICE9PSBxdWlja0ZpbHRlcj8uZ2V0U2VsZWN0ZWRLZXkoKSkge1xuXHRcdFx0cXVpY2tGaWx0ZXI/LnNldFNlbGVjdGVkS2V5KHF1aWNrRmlsdGVyS2V5KTtcblx0XHRcdHRoaXMub25RdWlja0ZpbHRlclNlbGVjdGlvbkNoYW5nZSgpO1xuXHRcdH1cblx0XHRpZiAodGhpcy5pbml0aWFsTG9hZCAmJiB0aGlzLmZpbHRlckJhcikge1xuXHRcdFx0Y29uc3QgZmlsdGVyQmFyID0gdGhpcy5nZXRGaWx0ZXJCYXJDb250cm9sKHRoaXMuZmlsdGVyQmFyKTtcblx0XHRcdGlmIChmaWx0ZXJCYXIgJiYgZmlsdGVyQmFyLmlzQTxGaWx0ZXJCYXJBUEk+KFwic2FwLmZlLm1hY3Jvcy5maWx0ZXJCYXIuRmlsdGVyQmFyQVBJXCIpKSB7XG5cdFx0XHRcdGZpbHRlckJhclxuXHRcdFx0XHRcdC53YWl0Rm9ySW5pdGlhbFN0YXRlKClcblx0XHRcdFx0XHQudGhlbigoKTogdm9pZCA9PiB7XG5cdFx0XHRcdFx0XHR0aGlzLmNvbnRlbnQucmViaW5kKCk7XG5cdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0XHQuY2F0Y2goKCk6IHZvaWQgPT4ge1xuXHRcdFx0XHRcdFx0TG9nLmVycm9yKFwiRXJyb3Igd2hpbGUgd2FpdGluZyBmb3IgaW5pdGlhbCBzdGF0ZSBvZiBmaWx0ZXIgYmFyXCIpO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7TUFZcUJBLG9CQUFvQiwwQkFBQUMscUJBQUE7SUFBQSxTQUFBRCxxQkFBQTtNQUFBLE9BQUFDLHFCQUFBLENBQUFDLEtBQUEsT0FBQUMsU0FBQTtJQUFBO0lBQUFDLFFBQUEsR0FBQUosb0JBQUE7SUFBQUssY0FBQSxDQUFBTCxvQkFBQSxFQUFBQyxxQkFBQTtJQUFBLElBQUFLLE1BQUEsR0FBQU4sb0JBQUEsQ0FBQU8sU0FBQTtJQUN4QztBQUNEO0FBQ0E7QUFDQTtJQUhDRCxNQUFBLENBSU1FLGFBQWEsR0FBbkIsZUFBTUEsYUFBYUEsQ0FBQSxFQUE2QztNQUMvRCxNQUFNQyxVQUFzQixHQUFHLENBQUMsQ0FBQztNQUNqQ0EsVUFBVSxDQUFDQyxVQUFVLEdBQUcsSUFBSSxDQUFDQyxlQUFlLENBQUMsTUFBTUMsU0FBUyxDQUFDQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUNDLE9BQU8sQ0FBQyxDQUFXO01BQzNHLE1BQU1DLFdBQVcsR0FBRyxJQUFJLENBQUNDLGNBQWMsQ0FBQyxDQUFDO01BQ3pDLElBQUlELFdBQVcsRUFBRTtRQUNoQixNQUFNRSxnQkFBZ0IsR0FBR0YsV0FBVyxDQUFDRyxjQUFj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
@@ -1,4 +1,5 @@
1
1
  import Log from "sap/base/Log";
2
+ import type { StartupParameters } from "sap/fe/core/AppComponent";
2
3
  import CommonUtils from "sap/fe/core/CommonUtils";
3
4
  import type { NavigationParameter } from "sap/fe/core/controllerextensions/ViewState";
4
5
  import IViewStateContributorMixin from "sap/fe/core/controllerextensions/viewState/IViewStateContributorMixin";
@@ -111,18 +112,18 @@ export default class TableAPIStateHandler extends IViewStateContributorMixin<Tab
111
112
  * @returns A promise that resolves when the variant has been applied.
112
113
  */
113
114
  async handleVariantIdPassedViaURLParams(this: TableAPI & TableAPIStateHandler): Promise<unknown> {
114
- const urlParams = this.getStartupParameters() as unknown as Record<string, string[]>;
115
+ const urlParams = await this.getStartupParameters();
115
116
  const tableVariantId = urlParams["sap-ui-fe-table-variant-id"]?.[0];
116
117
  const view = CommonUtils.getTargetView(this);
117
118
  const viewData = view.getViewData();
118
119
  const vmType = viewData.variantManagement;
119
120
  const vm = this.content.getVariant();
120
- if (vm && tableVariantId && vmType === "Control") {
121
+ if (vm && tableVariantId && typeof tableVariantId === "string" && vmType === "Control") {
121
122
  const variantToApply = vm.getVariants().find((variant) => variant.getKey() === tableVariantId);
122
123
  const ControlVariantApplyAPI = (await import("sap/ui/fl/apply/api/ControlVariantApplyAPI")).default;
123
124
  return ControlVariantApplyAPI.activateVariant({
124
125
  element: vm,
125
- variantReference: variantToApply.getKey()
126
+ variantReference: variantToApply?.getKey()
126
127
  });
127
128
  }
128
129
  }
@@ -130,14 +131,12 @@ export default class TableAPIStateHandler extends IViewStateContributorMixin<Tab
130
131
  /**
131
132
  * Retrieves the startup parameters from the application component data.
132
133
  * These parameters contain URL query parameters that were passed when the application was started.
133
- * @returns The startup parameters as a key-value mapping where each key can have multiple values,
134
- * or undefined if no parameters are available or if the component chain is not accessible.
134
+ * @returns The startup parameters.
135
135
  */
136
- getStartupParameters(this: TableAPI): Record<string, string> | undefined {
136
+ async getStartupParameters(this: TableAPI): Promise<StartupParameters> {
137
137
  const controller = this.getPageController();
138
138
  const appComponent = controller.getAppComponent();
139
- const componentData = appComponent.getComponentData();
140
- return componentData.startupParameters as unknown as Record<string, string>;
139
+ return appComponent.getStartupParameters();
141
140
  }
142
141
 
143
142
  /**