@sapui5/sap.fe.macros 1.138.0 → 1.140.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 (240) 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 +269 -0
  4. package/src/sap/fe/macros/Breadcrumbs.tsx +243 -0
  5. package/src/sap/fe/macros/CommonHelper.js +2 -2
  6. package/src/sap/fe/macros/CommonHelper.ts +1 -1
  7. package/src/sap/fe/macros/Field.js +85 -58
  8. package/src/sap/fe/macros/Field.ts +104 -60
  9. package/src/sap/fe/macros/FooterContent.js +44 -11
  10. package/src/sap/fe/macros/FooterContent.tsx +48 -9
  11. package/src/sap/fe/macros/FormElement.js +2 -2
  12. package/src/sap/fe/macros/FormElement.ts +1 -2
  13. package/src/sap/fe/macros/MessageButton.js +1 -2
  14. package/src/sap/fe/macros/MessageButton.tsx +0 -1
  15. package/src/sap/fe/macros/MultiValueField.js +17 -6
  16. package/src/sap/fe/macros/MultiValueField.tsx +7 -4
  17. package/src/sap/fe/macros/RichTextEditor.js +30 -5
  18. package/src/sap/fe/macros/RichTextEditor.tsx +34 -6
  19. package/src/sap/fe/macros/Share.js +85 -40
  20. package/src/sap/fe/macros/Share.tsx +42 -1
  21. package/src/sap/fe/macros/Status.js +226 -0
  22. package/src/sap/fe/macros/Status.tsx +192 -0
  23. package/src/sap/fe/macros/ValueHelp.js +4 -29
  24. package/src/sap/fe/macros/ValueHelp.tsx +2 -43
  25. package/src/sap/fe/macros/ai/EasyFillButton.js +10 -4
  26. package/src/sap/fe/macros/ai/EasyFillButton.tsx +8 -1
  27. package/src/sap/fe/macros/ai/EasyFillDialog.js +25 -10
  28. package/src/sap/fe/macros/ai/EasyFillDialog.tsx +32 -23
  29. package/src/sap/fe/macros/ai/EasyFilterBar.js +123 -114
  30. package/src/sap/fe/macros/ai/EasyFilterBar.tsx +140 -124
  31. package/src/sap/fe/macros/ai/EasyFilterDataFetcher.js +11 -5
  32. package/src/sap/fe/macros/ai/EasyFilterDataFetcher.ts +14 -5
  33. package/src/sap/fe/macros/ai/SummarizationButton.js +2 -2
  34. package/src/sap/fe/macros/ai/SummarizationButton.tsx +1 -1
  35. package/src/sap/fe/macros/chart/ChartDelegate.js +4 -4
  36. package/src/sap/fe/macros/chart/ChartDelegate.ts +3 -3
  37. package/src/sap/fe/macros/chart/ChartHelper.js +1 -2
  38. package/src/sap/fe/macros/chart/ChartHelper.ts +0 -1
  39. package/src/sap/fe/macros/chart/ChartRuntime.js +1 -2
  40. package/src/sap/fe/macros/chart/ChartRuntime.ts +0 -1
  41. package/src/sap/fe/macros/chart/MdcChartTemplate.js +20 -6
  42. package/src/sap/fe/macros/chart/MdcChartTemplate.tsx +16 -8
  43. package/src/sap/fe/macros/controls/BuildingBlockWithTemplating.js +3 -1
  44. package/src/sap/fe/macros/controls/BuildingBlockWithTemplating.ts +2 -0
  45. package/src/sap/fe/macros/controls/FieldWrapper.js +9 -3
  46. package/src/sap/fe/macros/controls/FieldWrapper.ts +11 -2
  47. package/src/sap/fe/macros/controls/FilterBar.js +49 -2
  48. package/src/sap/fe/macros/controls/FilterBar.ts +55 -1
  49. package/src/sap/fe/macros/controls/NumberWithUnitOrCurrency.js +2 -2
  50. package/src/sap/fe/macros/controls/NumberWithUnitOrCurrency.tsx +2 -2
  51. package/src/sap/fe/macros/controls/RequiredFlexBox.js +62 -0
  52. package/src/sap/fe/macros/controls/RequiredFlexBox.tsx +20 -0
  53. package/src/sap/fe/macros/controls/filterbar/VisualFilter.js +21 -11
  54. package/src/sap/fe/macros/controls/filterbar/VisualFilter.ts +25 -11
  55. package/src/sap/fe/macros/controls/filterbar/VisualFilterContainer.js +11 -2
  56. package/src/sap/fe/macros/controls/filterbar/VisualFilterContainer.ts +12 -1
  57. package/src/sap/fe/macros/controls/filterbar/utils/VisualFilterUtils.js +18 -1
  58. package/src/sap/fe/macros/controls/filterbar/utils/VisualFilterUtils.ts +20 -0
  59. package/src/sap/fe/macros/coreUI/CreateDialog.js +2 -2
  60. package/src/sap/fe/macros/coreUI/CreateDialog.tsx +1 -1
  61. package/src/sap/fe/macros/coreUI/OperationParameterDialog.js +43 -4
  62. package/src/sap/fe/macros/coreUI/OperationParameterDialog.tsx +48 -1
  63. package/src/sap/fe/macros/designtime/Designtime.helper.js +39 -2
  64. package/src/sap/fe/macros/designtime/Designtime.helper.ts +39 -0
  65. package/src/sap/fe/macros/draftIndicator/DraftIndicator.js +15 -4
  66. package/src/sap/fe/macros/draftIndicator/DraftIndicator.tsx +5 -0
  67. package/src/sap/fe/macros/field/FieldBaseDelegate.js +20 -8
  68. package/src/sap/fe/macros/field/FieldBaseDelegate.ts +34 -9
  69. package/src/sap/fe/macros/field/FieldFormatOptions.js +73 -44
  70. package/src/sap/fe/macros/field/FieldFormatOptions.ts +20 -2
  71. package/src/sap/fe/macros/field/FieldRuntime.js +1 -2
  72. package/src/sap/fe/macros/field/FieldRuntime.ts +0 -1
  73. package/src/sap/fe/macros/filter/FilterUtils.js +3 -5
  74. package/src/sap/fe/macros/filter/FilterUtils.ts +2 -4
  75. package/src/sap/fe/macros/filterBar/FilterBar.block.js +8 -2
  76. package/src/sap/fe/macros/filterBar/FilterBar.block.tsx +2 -5
  77. package/src/sap/fe/macros/filterBar/FilterBarAPI.js +8 -8
  78. package/src/sap/fe/macros/filterBar/FilterBarAPI.ts +8 -8
  79. package/src/sap/fe/macros/filterBar/designtime/FilterBar.designtime.js +3 -1
  80. package/src/sap/fe/macros/filterBar/designtime/FilterBar.designtime.ts +2 -0
  81. package/src/sap/fe/macros/filterBar/mixin/FilterBarAPIStateHandler.js +1 -1
  82. package/src/sap/fe/macros/filterBar/mixin/FilterBarAPIStateHandler.ts +1 -1
  83. package/src/sap/fe/macros/form/Form.js +1 -4
  84. package/src/sap/fe/macros/form/Form.tsx +0 -3
  85. package/src/sap/fe/macros/form/FormActionButtons.fragment.xml +13 -2
  86. package/src/sap/fe/macros/form/FormContainer.block.js +1 -2
  87. package/src/sap/fe/macros/form/FormContainer.block.ts +0 -1
  88. package/src/sap/fe/macros/form/FormContainer.fragment.xml +40 -0
  89. package/src/sap/fe/macros/form/FormContainerAPI.js +14 -16
  90. package/src/sap/fe/macros/form/FormContainerAPI.ts +13 -15
  91. package/src/sap/fe/macros/form/FormDelegate.js +20 -1
  92. package/src/sap/fe/macros/form/FormDelegate.ts +25 -0
  93. package/src/sap/fe/macros/form/FormHelper.js +1 -2
  94. package/src/sap/fe/macros/form/FormHelper.ts +0 -1
  95. package/src/sap/fe/macros/formatters/TableFormatter.js +10 -1
  96. package/src/sap/fe/macros/formatters/TableFormatter.ts +14 -5
  97. package/src/sap/fe/macros/fpm/CustomFragment.block.js +1 -2
  98. package/src/sap/fe/macros/fpm/CustomFragment.block.ts +0 -1
  99. package/src/sap/fe/macros/inlineEdit/InlineEdit.js +15 -3
  100. package/src/sap/fe/macros/inlineEdit/InlineEdit.ts +14 -2
  101. package/src/sap/fe/macros/internal/ActionCommand.block.js +1 -2
  102. package/src/sap/fe/macros/internal/ActionCommand.block.ts +0 -1
  103. package/src/sap/fe/macros/internal/DataPoint.js +2 -1
  104. package/src/sap/fe/macros/internal/DataPoint.tsx +1 -0
  105. package/src/sap/fe/macros/internal/DataPointFormatOptions.js +11 -2
  106. package/src/sap/fe/macros/internal/DataPointFormatOptions.ts +3 -0
  107. package/src/sap/fe/macros/internal/FilterField.block.js +10 -2
  108. package/src/sap/fe/macros/internal/FilterField.block.ts +11 -1
  109. package/src/sap/fe/macros/internal/field/CheckBoxGroup.fragment.xml +25 -0
  110. package/src/sap/fe/macros/internal/field/DisplayStyle.js +51 -13
  111. package/src/sap/fe/macros/internal/field/DisplayStyle.tsx +53 -6
  112. package/src/sap/fe/macros/internal/field/EditStyle.js +5 -1
  113. package/src/sap/fe/macros/internal/field/EditStyle.tsx +4 -0
  114. package/src/sap/fe/macros/internal/field/FieldStructureHelper.js +9 -2
  115. package/src/sap/fe/macros/internal/field/FieldStructureHelper.ts +11 -0
  116. package/src/sap/fe/macros/internal/field/FieldStyles.js +1 -1
  117. package/src/sap/fe/macros/internal/field/FieldStyles.tsx +2 -1
  118. package/src/sap/fe/macros/internal/valuehelp/AdditionalValueHelper.js +46 -8
  119. package/src/sap/fe/macros/internal/valuehelp/AdditionalValueHelper.ts +60 -6
  120. package/src/sap/fe/macros/internal/valuehelp/TableDelegate.js +38 -2
  121. package/src/sap/fe/macros/internal/valuehelp/TableDelegate.ts +37 -2
  122. package/src/sap/fe/macros/internal/valuehelp/ValueListDialogTable.fragment.xml +2 -1
  123. package/src/sap/fe/macros/internal/valuehelp/ValueListHelper.js +16 -5
  124. package/src/sap/fe/macros/internal/valuehelp/ValueListHelper.ts +21 -9
  125. package/src/sap/fe/macros/internal/valuehelp/ValueListTable.fragment.xml +1 -0
  126. package/src/sap/fe/macros/library.js +1 -1
  127. package/src/sap/fe/macros/mdc/adapter/StateHelper.js +7 -2
  128. package/src/sap/fe/macros/mdc/adapter/StateHelper.ts +7 -3
  129. package/src/sap/fe/macros/messagebundle.properties +42 -32
  130. package/src/sap/fe/macros/messagebundle_ar.properties +12 -4
  131. package/src/sap/fe/macros/messagebundle_bg.properties +11 -3
  132. package/src/sap/fe/macros/messagebundle_ca.properties +15 -7
  133. package/src/sap/fe/macros/messagebundle_cnr.properties +12 -4
  134. package/src/sap/fe/macros/messagebundle_cs.properties +10 -2
  135. package/src/sap/fe/macros/messagebundle_cy.properties +12 -4
  136. package/src/sap/fe/macros/messagebundle_da.properties +11 -3
  137. package/src/sap/fe/macros/messagebundle_de.properties +18 -10
  138. package/src/sap/fe/macros/messagebundle_el.properties +13 -5
  139. package/src/sap/fe/macros/messagebundle_en.properties +16 -8
  140. package/src/sap/fe/macros/messagebundle_en_GB.properties +16 -8
  141. package/src/sap/fe/macros/messagebundle_en_US_saprigi.properties +16 -8
  142. package/src/sap/fe/macros/messagebundle_es.properties +13 -5
  143. package/src/sap/fe/macros/messagebundle_es_MX.properties +14 -6
  144. package/src/sap/fe/macros/messagebundle_et.properties +13 -5
  145. package/src/sap/fe/macros/messagebundle_fi.properties +14 -6
  146. package/src/sap/fe/macros/messagebundle_fr.properties +14 -6
  147. package/src/sap/fe/macros/messagebundle_fr_CA.properties +15 -7
  148. package/src/sap/fe/macros/messagebundle_hi.properties +11 -3
  149. package/src/sap/fe/macros/messagebundle_hr.properties +11 -3
  150. package/src/sap/fe/macros/messagebundle_hu.properties +10 -2
  151. package/src/sap/fe/macros/messagebundle_id.properties +18 -10
  152. package/src/sap/fe/macros/messagebundle_it.properties +10 -2
  153. package/src/sap/fe/macros/messagebundle_iw.properties +10 -2
  154. package/src/sap/fe/macros/messagebundle_ja.properties +13 -5
  155. package/src/sap/fe/macros/messagebundle_kk.properties +15 -7
  156. package/src/sap/fe/macros/messagebundle_ko.properties +10 -2
  157. package/src/sap/fe/macros/messagebundle_lt.properties +11 -3
  158. package/src/sap/fe/macros/messagebundle_lv.properties +12 -4
  159. package/src/sap/fe/macros/messagebundle_mk.properties +12 -4
  160. package/src/sap/fe/macros/messagebundle_ms.properties +14 -6
  161. package/src/sap/fe/macros/messagebundle_nl.properties +13 -5
  162. package/src/sap/fe/macros/messagebundle_no.properties +12 -4
  163. package/src/sap/fe/macros/messagebundle_pl.properties +12 -4
  164. package/src/sap/fe/macros/messagebundle_pt.properties +13 -5
  165. package/src/sap/fe/macros/messagebundle_pt_PT.properties +12 -4
  166. package/src/sap/fe/macros/messagebundle_ro.properties +12 -4
  167. package/src/sap/fe/macros/messagebundle_ru.properties +13 -5
  168. package/src/sap/fe/macros/messagebundle_sh.properties +12 -4
  169. package/src/sap/fe/macros/messagebundle_sk.properties +11 -3
  170. package/src/sap/fe/macros/messagebundle_sl.properties +12 -4
  171. package/src/sap/fe/macros/messagebundle_sr.properties +12 -4
  172. package/src/sap/fe/macros/messagebundle_sv.properties +11 -3
  173. package/src/sap/fe/macros/messagebundle_th.properties +11 -3
  174. package/src/sap/fe/macros/messagebundle_tr.properties +10 -2
  175. package/src/sap/fe/macros/messagebundle_uk.properties +17 -9
  176. package/src/sap/fe/macros/messagebundle_vi.properties +12 -4
  177. package/src/sap/fe/macros/messagebundle_zh_CN.properties +11 -3
  178. package/src/sap/fe/macros/messagebundle_zh_TW.properties +12 -4
  179. package/src/sap/fe/macros/messages/MessageButton.js +55 -36
  180. package/src/sap/fe/macros/messages/MessageButton.ts +64 -39
  181. package/src/sap/fe/macros/messages/MessagePopover.js +2 -2
  182. package/src/sap/fe/macros/messages/MessagePopover.ts +4 -4
  183. package/src/sap/fe/macros/microchart/MicroChartContainer.js +1 -2
  184. package/src/sap/fe/macros/microchart/MicroChartContainer.ts +1 -2
  185. package/src/sap/fe/macros/microchart/MicroChartHelper.js +1 -2
  186. package/src/sap/fe/macros/microchart/MicroChartHelper.tsx +0 -1
  187. package/src/sap/fe/macros/share/ShareAPI.js +4 -29
  188. package/src/sap/fe/macros/share/ShareAPI.ts +1 -32
  189. package/src/sap/fe/macros/situations/SituationsPopover.js +3 -1
  190. package/src/sap/fe/macros/situations/SituationsPopover.ts +2 -0
  191. package/src/sap/fe/macros/table/Action.js +24 -2
  192. package/src/sap/fe/macros/table/Action.ts +13 -0
  193. package/src/sap/fe/macros/table/ActionGroup.js +24 -2
  194. package/src/sap/fe/macros/table/ActionGroup.ts +13 -0
  195. package/src/sap/fe/macros/table/ActionGroupOverride.js +24 -2
  196. package/src/sap/fe/macros/table/ActionGroupOverride.ts +13 -0
  197. package/src/sap/fe/macros/table/ActionOverride.js +24 -2
  198. package/src/sap/fe/macros/table/ActionOverride.ts +13 -0
  199. package/src/sap/fe/macros/table/ActionsTemplating.js +73 -12
  200. package/src/sap/fe/macros/table/ActionsTemplating.tsx +69 -13
  201. package/src/sap/fe/macros/table/Column.js +3 -3
  202. package/src/sap/fe/macros/table/Column.ts +2 -2
  203. package/src/sap/fe/macros/table/MdcTableTemplate.js +20 -8
  204. package/src/sap/fe/macros/table/MdcTableTemplate.tsx +36 -7
  205. package/src/sap/fe/macros/table/QuickFilterSelector.js +35 -14
  206. package/src/sap/fe/macros/table/QuickFilterSelector.tsx +22 -3
  207. package/src/sap/fe/macros/table/Table.block.js +137 -108
  208. package/src/sap/fe/macros/table/Table.block.tsx +29 -2
  209. package/src/sap/fe/macros/table/TableAPI.js +143 -133
  210. package/src/sap/fe/macros/table/TableAPI.ts +5 -1
  211. package/src/sap/fe/macros/table/TableDefinition.js +4 -2
  212. package/src/sap/fe/macros/table/TableDefinition.ts +3 -1
  213. package/src/sap/fe/macros/table/TableHelper.js +1 -2
  214. package/src/sap/fe/macros/table/TableHelper.ts +0 -1
  215. package/src/sap/fe/macros/table/TableRuntime.js +26 -7
  216. package/src/sap/fe/macros/table/TableRuntime.ts +33 -5
  217. package/src/sap/fe/macros/table/Utils.js +6 -2
  218. package/src/sap/fe/macros/table/Utils.ts +5 -1
  219. package/src/sap/fe/macros/table/delegates/ALPTableDelegate.js +1 -2
  220. package/src/sap/fe/macros/table/delegates/ALPTableDelegate.ts +0 -1
  221. package/src/sap/fe/macros/table/delegates/TableDelegate.js +25 -20
  222. package/src/sap/fe/macros/table/delegates/TableDelegate.ts +25 -24
  223. package/src/sap/fe/macros/table/delegates/TreeTableDelegate.js +1 -2
  224. package/src/sap/fe/macros/table/delegates/TreeTableDelegate.ts +0 -1
  225. package/src/sap/fe/macros/table/designtime/Table.designtime.js +3 -1
  226. package/src/sap/fe/macros/table/designtime/Table.designtime.ts +2 -0
  227. package/src/sap/fe/macros/table/massEdit/designtime/MassEdit.designtime.js +3 -1
  228. package/src/sap/fe/macros/table/massEdit/designtime/MassEdit.designtime.ts +2 -1
  229. package/src/sap/fe/macros/table/mixin/ContextMenuHandler.js +2 -1
  230. package/src/sap/fe/macros/table/mixin/ContextMenuHandler.ts +1 -0
  231. package/src/sap/fe/macros/table/mixin/TableHierarchy.js +8 -1
  232. package/src/sap/fe/macros/table/mixin/TableHierarchy.ts +10 -0
  233. package/src/sap/fe/macros/table/mixin/TableSharing.js +3 -2
  234. package/src/sap/fe/macros/table/mixin/TableSharing.ts +9 -1
  235. package/src/sap/fe/macros/valuehelp/ValueHelpDelegate.js +20 -6
  236. package/src/sap/fe/macros/valuehelp/ValueHelpDelegate.ts +36 -14
  237. package/src/sap/fe/macros/visualfilters/VisualFilter.js +95 -7
  238. package/src/sap/fe/macros/visualfilters/VisualFilter.tsx +93 -3
  239. package/src/sap/fe/macros/visualfilters/VisualFilterRuntime.js +16 -5
  240. package/src/sap/fe/macros/visualfilters/VisualFilterRuntime.ts +18 -4
@@ -30,6 +30,7 @@ import actionHelper from "sap/fe/core/controllerextensions/editFlow/operations/a
30
30
  import { convertTypes, getInvolvedDataModelObjects } from "sap/fe/core/converters/MetaModelConverter";
31
31
  import { hasFieldGroupTarget } from "sap/fe/core/converters/annotations/DataField";
32
32
  import FPMHelper from "sap/fe/core/helpers/FPMHelper";
33
+ import ModelHelper from "sap/fe/core/helpers/ModelHelper";
33
34
  import { getResourceModel } from "sap/fe/core/helpers/ResourceModelHelper";
34
35
  import { generate } from "sap/fe/core/helpers/StableIdHelper";
35
36
  import { isFulfilled, isPathAnnotationExpression } from "sap/fe/core/helpers/TypeGuards";
@@ -37,8 +38,10 @@ import FELibrary from "sap/fe/core/library";
37
38
  import { getTargetNavigationPath } from "sap/fe/core/templating/DataModelPathHelper";
38
39
  import { isActionParameterRequiredExpression, isDisabledExpression, isReadOnlyExpression } from "sap/fe/core/templating/FieldControlHelper";
39
40
  import { hasValueHelp, isMultiLineText } from "sap/fe/core/templating/PropertyHelper";
41
+ import type { ComputedAnnotationInterface } from "sap/fe/core/templating/UIFormatters";
40
42
  import FieldHelper from "sap/fe/macros/field/FieldHelper";
41
43
  import { requiresValidation, useCaseSensitiveFilterRequests } from "sap/fe/macros/internal/valuehelp/ValueHelpTemplating";
44
+ import type { AnnotationValueListParameter } from "sap/fe/macros/internal/valuehelp/ValueListHelper";
42
45
  import type ListReportExtensionAPI from "sap/fe/templates/ListReport/ExtensionAPI";
43
46
  import type ObjectPageExtensionAPI from "sap/fe/templates/ObjectPage/ExtensionAPI";
44
47
  import Button from "sap/m/Button";
@@ -312,8 +315,12 @@ export default class ActionParameterDialog {
312
315
  */
313
316
  private async createField(parameter: ActionParameter, parameterContext: Context): Promise<Field> {
314
317
  let display = "Value";
318
+ let additionalValue;
315
319
  try {
316
320
  display = await FieldHelper.getAPDialogDisplayFormat(parameterContext.getObject(), { context: parameterContext });
321
+ if (hasValueHelp(parameter)) {
322
+ additionalValue = await this.getAdditionalValue({ context: parameterContext });
323
+ }
317
324
  } catch (err: unknown) {
318
325
  Log.warning(`Parameter dialog field: display format couldn't be calculated for parameter '${parameter.name}': ${err}`);
319
326
  }
@@ -341,6 +348,7 @@ export default class ActionParameterDialog {
341
348
  )
342
349
  )}
343
350
  ariaLabelledBy={[generate(["APD_", parameter.name, "Label"])]}
351
+ additionalValue={additionalValue}
344
352
  />
345
353
  );
346
354
  }
@@ -382,7 +390,7 @@ export default class ActionParameterDialog {
382
390
  (convertTypes(this.metaModel).entityContainer.annotations.Capabilities
383
391
  ?.FilterFunctions as unknown as string[]) ?? []
384
392
  )
385
- : false
393
+ : ModelHelper.isFilteringCaseSensitive(this.metaModel)
386
394
  }
387
395
  useAsValueHelp={!!parameter.annotations.Common?.ValueListWithFixedValues}
388
396
  />
@@ -1193,4 +1201,43 @@ export default class ActionParameterDialog {
1193
1201
  this.dialog?.destroy();
1194
1202
  this.buttonLock = false; //needed here, not in the press events finally clause. In case the UI is sluggish, begin button could be pressed again.
1195
1203
  }
1204
+
1205
+ /**
1206
+ * Gets the type of the property used for text annotation in the ValueHelp for the action parameter and provides the formatted binding.
1207
+ * @param oInterface The parameter
1208
+ * @returns The form element control.
1209
+ */
1210
+ private async getAdditionalValue(oInterface: ComputedAnnotationInterface): Promise<string | undefined> {
1211
+ let textContext;
1212
+
1213
+ const contextPath = oInterface.context.getPath();
1214
+ const localDataProperty = oInterface.context.getObject()?.$Name;
1215
+ const valueListByQualifier = await this.metaModel.requestValueListInfo(contextPath, true);
1216
+
1217
+ // Look for LocalDataProperty in ValueListParameterOut or ValueListParameterInOut where this is the parameter name
1218
+ // We only consider TextAnnotations for this action parameter
1219
+ const valueListParameter = valueListByQualifier[""].Parameters.find(
1220
+ (parameter: AnnotationValueListParameter) =>
1221
+ parameter.$Type === "com.sap.vocabularies.Common.v1.ValueListParameterInOut" ||
1222
+ (parameter.$Type === "com.sap.vocabularies.Common.v1.ValueListParameterOut" &&
1223
+ parameter.LocalDataProperty?.$PropertyPath === localDataProperty)
1224
+ );
1225
+
1226
+ if (valueListParameter && valueListParameter.ValueListProperty) {
1227
+ const textProperty = valueListParameter.ValueListProperty;
1228
+ // Now we have the name of the property that is the annotated text
1229
+ const propertyPath = `/${valueListByQualifier[""].CollectionPath}/${textProperty}`;
1230
+ const propAnnotations = this.metaModel.getObject(`${propertyPath}@`);
1231
+
1232
+ if (propAnnotations["@com.sap.vocabularies.Common.v1.Text@com.sap.vocabularies.UI.v1.TextArrangement"]) {
1233
+ const textProp = propAnnotations["@com.sap.vocabularies.Common.v1.Text"];
1234
+ const textPath = `/${valueListByQualifier[""].CollectionPath}/${textProp.$Path}`;
1235
+ textContext = this.metaModel.createBindingContext(textPath);
1236
+ }
1237
+
1238
+ if (textContext) {
1239
+ return AnnotationHelper.format(textContext.getObject(), { context: textContext });
1240
+ }
1241
+ }
1242
+ }
1196
1243
  }
@@ -2,7 +2,7 @@
2
2
  * SAP UI development toolkit for HTML5 (SAPUI5)
3
3
  * (c) Copyright 2009-2025 SAP SE. All rights reserved
4
4
  */
5
- sap.ui.define(["sap/base/util/deepClone", "sap/fe/core/CommonUtils", "sap/m/Button", "sap/m/CheckBox", "sap/m/Dialog", "sap/m/Input", "sap/m/InputListItem", "sap/m/List", "sap/m/MessageStrip", "sap/m/MultiInput", "sap/m/Select", "sap/m/Token", "sap/ui/core/Item", "sap/ui/model/json/JSONModel"], function (deepClone, CommonUtils, Button, CheckBox, Dialog, Input, InputListItem, List, MessageStrip, MultiInput, Select, Token, Item, JSONModel) {
5
+ sap.ui.define(["sap/base/util/deepClone", "sap/fe/core/CommonUtils", "sap/m/Button", "sap/m/CheckBox", "sap/m/Dialog", "sap/m/Input", "sap/m/InputListItem", "sap/m/List", "sap/m/MessageStrip", "sap/m/MultiInput", "sap/m/Select", "sap/m/Token", "sap/ui/core/Component", "sap/ui/core/Item", "sap/ui/model/json/JSONModel"], function (deepClone, CommonUtils, Button, CheckBox, Dialog, Input, InputListItem, List, MessageStrip, MultiInput, Select, Token, Component, Item, JSONModel) {
6
6
  "use strict";
7
7
 
8
8
  var _exports = {};
@@ -91,6 +91,29 @@ sap.ui.define(["sap/base/util/deepClone", "sap/fe/core/CommonUtils", "sap/m/Butt
91
91
  setLocalTexts(settingsModel, resourceModel);
92
92
  const list = new List();
93
93
  list.setModel(settingsModel);
94
+
95
+ // Function to clear personalization dependent controls when "Own Settings" is selected
96
+ const updatePersonalizationDependentControls = selectedValue => {
97
+ const dependentControls = ["personalizationSort", "personalizationColumn", "personalizationFilter", "personalizationGroup"];
98
+ const isOwnSettings = selectedValue === "Own Settings";
99
+ if (isOwnSettings) {
100
+ dependentControls.forEach(controlId => {
101
+ const listItems = list.getItems();
102
+ for (const item of listItems) {
103
+ const content = item.getContent();
104
+ for (const control of content) {
105
+ if (control.data("id") === controlId) {
106
+ if (control.setSelected) {
107
+ control.setSelected(false);
108
+ propertyValues[controlId] = false;
109
+ }
110
+ break;
111
+ }
112
+ }
113
+ }
114
+ });
115
+ }
116
+ };
94
117
  const listItem = new InputListItem({
95
118
  label: "{label}"
96
119
  });
@@ -191,6 +214,10 @@ sap.ui.define(["sap/base/util/deepClone", "sap/fe/core/CommonUtils", "sap/m/Butt
191
214
  value = JSON.parse(value.toLowerCase());
192
215
  }
193
216
  propertyValues[this.data("id")] = value;
217
+ // Special handling for personalization setting
218
+ if (this.data("id") === "personalization") {
219
+ updatePersonalizationDependentControls(value);
220
+ }
194
221
  }
195
222
  }).data("id", id);
196
223
  select.bindItems({
@@ -438,6 +465,16 @@ sap.ui.define(["sap/base/util/deepClone", "sap/fe/core/CommonUtils", "sap/m/Butt
438
465
  return props;
439
466
  }
440
467
  _exports.getPropertyNamesAndDescriptions = getPropertyNamesAndDescriptions;
468
+ function isManifestChangesEnabled(control) {
469
+ let owner = Component.getOwnerComponentFor(control);
470
+ if (owner === undefined && control.getParent()) {
471
+ // In case of MassEdit, control is a sap.m.Dialog for which there is now OwnerComponent, so we need to consider its parent control
472
+ owner = Component.getOwnerComponentFor(control.getParent());
473
+ }
474
+ const sapFeManifest = owner?.getAppComponent().getManifestEntry("sap.fe");
475
+ return sapFeManifest?.app?.disableManifestChanges !== true;
476
+ }
477
+ _exports.isManifestChangesEnabled = isManifestChangesEnabled;
441
478
  return _exports;
442
479
  }, false);
443
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJnZXRDaGFuZ2VkUHJvcGVydHlWYWx1ZXMiLCJkZXNpZ250aW1lU2V0dGluZ3MiLCJ1bmNoYW5nZWREYXRhIiwicHJvcGVydHlWYWx1ZXMiLCJwcm9wZXJ0eUNoYW5nZXMiLCJmb3JFYWNoIiwic2V0dGluZyIsImlkIiwiSlNPTiIsInN0cmluZ2lmeSIsIndyaXRlT2JqZWN0Iiwid3JpdGVPYmplY3RGb3IiLCJjaGFuZ2VPYmplY3QiLCJsZW5ndGgiLCJzZXR0aW5nc1RvZ2V0aGVyIiwicGF0aCIsInNraXBDaGFuZ2UiLCJfZXhwb3J0cyIsImdldENoYW5nZVN0cnVjdHVyZSIsImFwcENvbXBvbmVudCIsInBhZ2UiLCJwcm9wZXJ0eVBhdGgiLCJzZWxlY3RvciIsImNoYW5nZVNwZWNpZmljRGF0YSIsImFwcERlc2NyaXB0b3JDaGFuZ2VUeXBlIiwiY29udGVudCIsInBhcmFtZXRlcnMiLCJlbnRpdHlQcm9wZXJ0eUNoYW5nZSIsIm9wZXJhdGlvbiIsInByb3BlcnR5VmFsdWUiLCJzZXRMb2NhbFRleHQiLCJpdGVtIiwicmVzb3VyY2VNb2RlbCIsImtleSIsImdldFRleHQiLCJzZXRMb2NhbFRleHRzIiwibW9kZWwiLCJzZXR0aW5nc0RhdGEiLCJnZXREYXRhIiwiY29udHJvbCIsImNvbnRyb2xEYXRhIiwiZW51bSIsImVudW1EYXRhIiwiY3JlYXRlQWRhcHRpb25EaWFsb2dDb250ZW50IiwiY29uZmlnQ29udGV4dCIsImNvbmZpZ1BhdGgiLCJhcmd1bWVudHMiLCJ1bmRlZmluZWQiLCJzZXR0aW5nc01vZGVsIiwiSlNPTk1vZGVsIiwic2V0RGF0YSIsImRlZXBDbG9uZSIsImdldFByb3BlcnR5IiwibGlzdCIsIkxpc3QiLCJzZXRNb2RlbCIsImxpc3RJdGVtIiwiSW5wdXRMaXN0SXRlbSIsImxhYmVsIiwiYmluZENvbnRlbnQiLCJmYWN0b3J5IiwiY29udGV4dCIsInR5cGUiLCJJdGVtIiwidGV4dCIsInNlbGVjdCIsIlNlbGVjdCIsInNlbGVjdGVkS2V5IiwiY2hhbmdlIiwiZXZlbnQiLCJkYXRhIiwiZ2V0UGFyYW1ldGVyIiwiZ2V0S2V5IiwiYmluZEl0ZW1zIiwidGVtcGxhdGUiLCJJbnB1dCIsInZhbHVlIiwib011bHRpSW5wdXQiLCJNdWx0aUlucHV0Iiwid2lkdGgiLCJzaG93VmFsdWVIZWxwIiwic2hvd0NsZWFySWNvbiIsInRva2VucyIsIm5hdmlnYXRpb25Qcm9wZXJ0aWVzIiwibWFwIiwibmF2aWdhdGlvblByb3BlcnR5IiwiVG9rZW4iLCJ0b2tlblVwZGF0ZSIsImFycmF5IiwicHVzaCIsInNwbGljZSIsImluZGV4T2YiLCJhZGRWYWxpZGF0b3IiLCJhcmdzIiwiQ2hlY2tCb3giLCJzZWxlY3RlZCIsInRvTG93ZXJDYXNlIiwicGFyc2UiLCJ0b1N0cmluZyIsIm9wZW5BZGFwdGlvbkRpYWxvZyIsInRpdGxlIiwiaW5mb1RleHQiLCJzaXplIiwiaW5mb3JtYXRpb25NZXNzYWdlIiwiTWVzc2FnZVN0cmlwIiwic2hvd0ljb24iLCJhZGRTdHlsZUNsYXNzIiwibGlzdEluZGV4IiwiUHJvbWlzZSIsInJlc29sdmUiLCJyZWplY3QiLCJkaWFsb2ciLCJEaWFsb2ciLCJjb250ZW50V2lkdGgiLCJjb250ZW50SGVpZ2h0IiwiaGVpZ2h0IiwiYnV0dG9ucyIsIkJ1dHRvbiIsInByZXNzIiwidXBkYXRlQ29uZmlnTW9kZWwiLCJnZXRDb250ZW50IiwiZ2V0TW9kZWwiLCJjbG9zZSIsIm9wZW4iLCJwcm9jZXNzQ2hhbmdlcyIsInNpbmdsZUNoYW5nZSIsImNoYW5nZXMiLCJPYmplY3QiLCJlbnRyaWVzIiwiZ2V0Q2hhbmdlIiwicHJvY2Vzc0dsb2JhbENoYW5nZXMiLCJrZXlzIiwic2VwYXJhdGVDaGFuZ2VzIiwiQ29tbW9uVXRpbHMiLCJnZXRBcHBDb21wb25lbnQiLCJnZXRQYWdlIiwiZ2V0UGFyZW50Iiwic2VwYXJhdGVHbG9iYWxDaGFuZ2VzIiwidmlld0lkIiwiZ2V0VGFyZ2V0VmlldyIsImdldElkIiwic3BsaXQiLCJleHRyYWN0Q2hhbmdlcyIsInByb3BlcnR5VmFsdWVzRW50ZXJlZCIsImdsb2JhbFNldHRpbmdzIiwiZ2xvYmFsQ2hhbmdlcyIsImdsb2JhbCIsImNvbmNhdCIsIm5vQ2hhbmdlcyIsImlzRmlvcmlUb29sc1J0YU1vZGUiLCJ1cmxQYXJhbXMiLCJzaGVsbFNlcnZpY2UiLCJnZXRTaGVsbFNlcnZpY2VzIiwicGFyc2VQYXJhbWV0ZXJzIiwid2luZG93IiwibG9jYXRpb24iLCJzZWFyY2giLCJpc1JUQU1vZGUiLCJnZXRTZXR0aW5nc0lmS2V5VXNlciIsIml0ZW1zIiwiZmlsdGVyIiwia2V5VXNlciIsImlzQ29uZmlnTW9kZWxQcmVwYXJlZCIsInByZXBhcmVDb25maWdNb2RlbCIsInNldFByb3BlcnR5IiwiZ2V0UGVyc29uYWxpemF0aW9uU2V0dGluZyIsInNldHRpbmdzIiwiZ2V0T2JqZWN0IiwicGVyc29uYWxpemF0aW9uU2V0dGluZyIsImZpbmQiLCJ1cGRhdGVkU2V0dGluZ3MiLCJnZXRQcm9wZXJ0eU5hbWVzQW5kRGVzY3JpcHRpb25zIiwicHJvcHMiLCJwcm9wIiwibmFtZSIsImRlc2NyaXB0aW9uIiwiZW51bXMiLCJlbnVtbSJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiRGVzaWdudGltZS5oZWxwZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyohXG4gKiBSZXVzZSBmdW5jdGlvbnMgZm9yIGRlc2lnbnRpbWUgYWRhcHRpb25cbiAqL1xuXG5pbXBvcnQgZGVlcENsb25lIGZyb20gXCJzYXAvYmFzZS91dGlsL2RlZXBDbG9uZVwiO1xuaW1wb3J0IHR5cGUgQXBwQ29tcG9uZW50IGZyb20gXCJzYXAvZmUvY29yZS9BcHBDb21wb25lbnRcIjtcbmltcG9ydCBDb21tb25VdGlscyBmcm9tIFwic2FwL2ZlL2NvcmUvQ29tbW9uVXRpbHNcIjtcbmltcG9ydCB0eXBlIFJlc291cmNlTW9kZWwgZnJvbSBcInNhcC9mZS9jb3JlL1Jlc291cmNlTW9kZWxcIjtcbmltcG9ydCB0eXBlIHsgVGVtcGxhdGVUeXBlIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWFuaWZlc3RTZXR0aW5nc1wiO1xuaW1wb3J0IEJ1dHRvbiBmcm9tIFwic2FwL20vQnV0dG9uXCI7XG5pbXBvcnQgQ2hlY2tCb3ggZnJvbSBcInNhcC9tL0NoZWNrQm94XCI7XG5pbXBvcnQgRGlhbG9nIGZyb20gXCJzYXAvbS9EaWFsb2dcIjtcbmltcG9ydCBJbnB1dCBmcm9tIFwic2FwL20vSW5wdXRcIjtcbmltcG9ydCBJbnB1dExpc3RJdGVtIGZyb20gXCJzYXAvbS9JbnB1dExpc3RJdGVtXCI7XG5pbXBvcnQgTGlzdCBmcm9tIFwic2FwL20vTGlzdFwiO1xuaW1wb3J0IE1lc3NhZ2VTdHJpcCBmcm9tIFwic2FwL20vTWVzc2FnZVN0cmlwXCI7XG5pbXBvcnQgdHlwZSB7IE11bHRpSW5wdXQkVG9rZW5VcGRhdGVFdmVudCB9IGZyb20gXCJzYXAvbS9NdWx0aUlucHV0XCI7XG5pbXBvcnQgTXVsdGlJbnB1dCBmcm9tIFwic2FwL20vTXVsdGlJbnB1dFwiO1xuaW1wb3J0IFNlbGVjdCBmcm9tIFwic2FwL20vU2VsZWN0XCI7XG5pbXBvcnQgVG9rZW4gZnJvbSBcInNhcC9tL1Rva2VuXCI7XG5pbXBvcnQgdHlwZSBDb250cm9sIGZyb20gXCJzYXAvdWkvY29yZS9Db250cm9sXCI7XG5pbXBvcnQgSXRlbSBmcm9tIFwic2FwL3VpL2NvcmUvSXRlbVwiO1xuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL0NvbnRleHRcIjtcbmltcG9ydCBKU09OTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9qc29uL0pTT05Nb2RlbFwiO1xuXG5leHBvcnQgdHlwZSBhZGFwdGlvbkNoYW5nZSA9IHtcblx0YXBwQ29tcG9uZW50OiBBcHBDb21wb25lbnQ7XG5cdHNlbGVjdG9yOiBBcHBDb21wb25lbnQ7XG5cdGNoYW5nZVNwZWNpZmljRGF0YToge1xuXHRcdGFwcERlc2NyaXB0b3JDaGFuZ2VUeXBlOiBcImFwcGRlc2NyX2ZlX2NoYW5nZVBhZ2VDb25maWd1cmF0aW9uXCI7XG5cdFx0Y29udGVudDoge1xuXHRcdFx0cGFyYW1ldGVyczoge1xuXHRcdFx0XHRwYWdlOiBzdHJpbmc7XG5cdFx0XHRcdGVudGl0eVByb3BlcnR5Q2hhbmdlOiB7XG5cdFx0XHRcdFx0cHJvcGVydHlQYXRoOiBzdHJpbmc7XG5cdFx0XHRcdFx0b3BlcmF0aW9uOiBzdHJpbmc7XG5cdFx0XHRcdFx0cHJvcGVydHlWYWx1ZTogc3RyaW5nIHwgc3RyaW5nW10gfCBib29sZWFuIHwgbnVtYmVyIHwgb2JqZWN0IHwgdW5kZWZpbmVkO1xuXHRcdFx0XHR9O1xuXHRcdFx0fTtcblx0XHR9O1xuXHR9O1xufTtcblxuZXhwb3J0IHR5cGUgRGVzaWdudGltZVNldHRpbmdFbnVtcyA9IHtcblx0aWQ6IHN0cmluZztcblx0bmFtZTogc3RyaW5nO1xuXHRkZXNjcmlwdGlvbj86IHN0cmluZztcbn07XG5cbmV4cG9ydCB0eXBlIERlc2lnbnRpbWVTZXR0aW5nID0ge1xuXHRpZDogc3RyaW5nO1xuXHRwYXRoPzogc3RyaW5nO1xuXHRuYW1lOiBzdHJpbmc7XG5cdGRlc2NyaXB0aW9uOiBzdHJpbmc7XG5cdHJlc3RyaWN0ZWRUbz86IFRlbXBsYXRlVHlwZVtdO1xuXHR2YWx1ZTogdW5rbm93bjtcblx0dHlwZT86IHN0cmluZztcblx0ZW51bXM/OiBEZXNpZ250aW1lU2V0dGluZ0VudW1zW107XG5cdHNraXBDaGFuZ2U/OiBib29sZWFuO1xuXHR3cml0ZU9iamVjdEZvcj86IHN0cmluZztcblx0d3JpdGVPYmplY3Q/OiB7IGlkOiBzdHJpbmc7IHBhdGg/OiBzdHJpbmcgfVtdO1xuXHRrZXlVc2VyPzogYm9vbGVhbjtcbn07XG5cbmV4cG9ydCB0eXBlIFByb3BlcnR5VmFsdWUgPSBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCBzdHJpbmdbXSB8IGJvb2xlYW4gfCBudW1iZXIgfCBvYmplY3QgfCB1bmRlZmluZWQ+O1xuXG5leHBvcnQgdHlwZSBTZXR0aW5nc0RhdGEgPSB7XG5cdGxhYmVsOiBzdHJpbmc7XG5cdHRvb2x0aXA6IHN0cmluZztcblx0Y29udHJvbDogQ29udHJvbERhdGFbXTtcblx0a2V5VXNlcj86IGJvb2xlYW47XG59O1xuXG50eXBlIENvbnRyb2xEYXRhID0ge1xuXHR0eXBlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cdGVudW06IERlc2lnbnRpbWVTZXR0aW5nRW51bXNbXSB8IHVuZGVmaW5lZDtcblx0dmFsdWU6IHVua25vd247XG5cdGlkOiBzdHJpbmc7XG59O1xuXG50eXBlIHByb3BLZXlBbmRWYWx1ZSA9IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIHwgc3RyaW5nW10gfCBib29sZWFuIHwgbnVtYmVyIHwgb2JqZWN0IHwgdW5kZWZpbmVkIH07XG5cbi8qKlxuICogSWRlbnRpZnkgd2hpY2ggc2V0dGluZ3MgaGF2ZSBjaGFuZ2VkLlxuICogQHBhcmFtIGRlc2lnbnRpbWVTZXR0aW5nc1xuICogQHBhcmFtIHVuY2hhbmdlZERhdGFcbiAqIEBwYXJhbSBwcm9wZXJ0eVZhbHVlc1xuICogIEByZXR1cm5zIFRoZSBjb25maWd1cmF0aW9uIHByb3BlcnRpZXMgd2hlcmUgdGhlIHZhbHVlcyBoYXZlIGJlZW4gY2hhbmdlZCBjb21wYXJlZCB0byB0aGUgc3RhcnRpbmcgdmFsdWVzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRDaGFuZ2VkUHJvcGVydHlWYWx1ZXMoXG5cdGRlc2lnbnRpbWVTZXR0aW5nczogRGVzaWdudGltZVNldHRpbmdbXSxcblx0dW5jaGFuZ2VkRGF0YTogUHJvcGVydHlWYWx1ZSxcblx0cHJvcGVydHlWYWx1ZXM6IFByb3BlcnR5VmFsdWVcbik6IFByb3BlcnR5VmFsdWUge1xuXHRjb25zdCBwcm9wZXJ0eUNoYW5nZXM6IFByb3BlcnR5VmFsdWUgPSB7fTtcblxuXHRkZXNpZ250aW1lU2V0dGluZ3MuZm9yRWFjaChmdW5jdGlvbiAoc2V0dGluZykge1xuXHRcdGlmIChcblx0XHRcdCh0eXBlb2YgdW5jaGFuZ2VkRGF0YVtzZXR0aW5nLmlkXSAhPT0gXCJvYmplY3RcIiAmJiB1bmNoYW5nZWREYXRhW3NldHRpbmcuaWRdICE9PSBwcm9wZXJ0eVZhbHVlc1tzZXR0aW5nLmlkXSkgfHxcblx0XHRcdCh0eXBlb2YgdW5jaGFuZ2VkRGF0YVtzZXR0aW5nLmlkXSA9PT0gXCJvYmplY3RcIiAmJlxuXHRcdFx0XHRKU09OLnN0cmluZ2lmeSh1bmNoYW5nZWREYXRhW3NldHRpbmcuaWRdKSAhPT0gSlNPTi5zdHJpbmdpZnkocHJvcGVydHlWYWx1ZXNbc2V0dGluZy5pZF0pKVxuXHRcdCkge1xuXHRcdFx0aWYgKHNldHRpbmcud3JpdGVPYmplY3QgJiYgcHJvcGVydHlWYWx1ZXNbc2V0dGluZy5pZF0gPT09IHNldHRpbmcud3JpdGVPYmplY3RGb3IpIHtcblx0XHRcdFx0Ly8gV2Ugd3JpdGUgYW4gb2JqZWN0IGZvciB0aGlzIHNldHRpbmdcblx0XHRcdFx0Y29uc3QgY2hhbmdlT2JqZWN0OiBQcm9wZXJ0eVZhbHVlID0ge307XG5cdFx0XHRcdGlmIChzZXR0aW5nLndyaXRlT2JqZWN0ICYmIHNldHRpbmcud3JpdGVPYmplY3Q/Lmxlbmd0aCA+IDApIHtcblx0XHRcdFx0XHRzZXR0aW5nLndyaXRlT2JqZWN0LmZvckVhY2goZnVuY3Rpb24gKHNldHRpbmdzVG9nZXRoZXIpIHtcblx0XHRcdFx0XHRcdGNoYW5nZU9iamVjdFtzZXR0aW5nc1RvZ2V0aGVyLnBhdGggPyBzZXR0aW5nc1RvZ2V0aGVyLnBhdGggOiBzZXR0aW5nc1RvZ2V0aGVyLmlkXSA9XG5cdFx0XHRcdFx0XHRcdHByb3BlcnR5VmFsdWVzW3NldHRpbmdzVG9nZXRoZXIuaWRdO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHByb3BlcnR5Q2hhbmdlc1tzZXR0aW5nLnBhdGggPyBzZXR0aW5nLnBhdGggOiBzZXR0aW5nLmlkXSA9IGNoYW5nZU9iamVjdDtcblx0XHRcdH0gZWxzZSBpZiAoIXNldHRpbmcuc2tpcENoYW5nZSkge1xuXHRcdFx0XHRwcm9wZXJ0eUNoYW5nZXNbc2V0dGluZy5wYXRoID8gc2V0dGluZy5wYXRoIDogc2V0dGluZy5pZF0gPSBwcm9wZXJ0eVZhbHVlc1tzZXR0aW5nLmlkXTtcblx0XHRcdH1cblx0XHR9XG5cdH0pO1xuXHRyZXR1cm4gcHJvcGVydHlDaGFuZ2VzO1xufVxuLyoqXG4gKiBDb252ZXJ0IHNhcC5mZSBjaGFuZ2UgaW50byBhIHN0cnVjdHVyZSByZXF1aXJlZCBieSB0aGUgZmxleGliaWxpdHkgdG9vbHMuXG4gKiBAcGFyYW0gYXBwQ29tcG9uZW50XG4gKiBAcGFyYW0gcGFnZVxuICogQHBhcmFtIHByb3BlcnR5UGF0aFxuICogQHBhcmFtIHByb3BlcnR5Q2hhbmdlc1xuICogQHJldHVybnMgVGhlIGNoYW5nZSBzdHJ1Y3R1cmUgdXNlZCBieSBmbGV4aWJpbGl0eSB0b29sc1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q2hhbmdlU3RydWN0dXJlKFxuXHRhcHBDb21wb25lbnQ6IEFwcENvbXBvbmVudCxcblx0cGFnZTogc3RyaW5nLFxuXHRwcm9wZXJ0eVBhdGg6IHN0cmluZyxcblx0cHJvcGVydHlDaGFuZ2VzOiBzdHJpbmcgfCBzdHJpbmdbXSB8IGJvb2xlYW4gfCBudW1iZXIgfCBvYmplY3QgfCB1bmRlZmluZWRcbik6IGFkYXB0aW9uQ2hhbmdlIHtcblx0cmV0dXJuIHtcblx0XHRhcHBDb21wb25lbnQ6IGFwcENvbXBvbmVudCxcblx0XHRzZWxlY3RvcjogYXBwQ29tcG9uZW50LFxuXHRcdGNoYW5nZVNwZWNpZmljRGF0YToge1xuXHRcdFx0YXBwRGVzY3JpcHRvckNoYW5nZVR5cGU6IFwiYXBwZGVzY3JfZmVfY2hhbmdlUGFnZUNvbmZpZ3VyYXRpb25cIixcblx0XHRcdGNvbnRlbnQ6IHtcblx0XHRcdFx0cGFyYW1ldGVyczoge1xuXHRcdFx0XHRcdHBhZ2U6IHBhZ2UsXG5cdFx0XHRcdFx0ZW50aXR5UHJvcGVydHlDaGFuZ2U6IHtcblx0XHRcdFx0XHRcdHByb3BlcnR5UGF0aDogcHJvcGVydHlQYXRoLFxuXHRcdFx0XHRcdFx0b3BlcmF0aW9uOiBcIlVQU0VSVFwiLFxuXHRcdFx0XHRcdFx0cHJvcGVydHlWYWx1ZTogcHJvcGVydHlDaGFuZ2VzXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9O1xufVxuXG5mdW5jdGlvbiBzZXRMb2NhbFRleHQoaXRlbTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sIHJlc291cmNlTW9kZWw6IFJlc291cmNlTW9kZWwpOiB2b2lkIHtcblx0Zm9yIChjb25zdCBrZXkgaW4gaXRlbSkge1xuXHRcdGlmIChrZXkgIT09IFwiaWRcIiAmJiB0eXBlb2YgaXRlbVtrZXldID09PSBcInN0cmluZ1wiKSB7XG5cdFx0XHRpdGVtW2tleV0gPSByZXNvdXJjZU1vZGVsLmdldFRleHQoaXRlbVtrZXldIGFzIHN0cmluZyk7XG5cdFx0fVxuXHR9XG59XG5cbmZ1bmN0aW9uIHNldExvY2FsVGV4dHMobW9kZWw6IEpTT05Nb2RlbCwgcmVzb3VyY2VNb2RlbDogUmVzb3VyY2VNb2RlbCk6IHZvaWQge1xuXHRjb25zdCBzZXR0aW5nc0RhdGEgPSBtb2RlbC5nZXREYXRhKCkgYXMgU2V0dGluZ3NEYXRhW107XG5cdHNldHRpbmdzRGF0YS5mb3JFYWNoKChzZXR0aW5nKSA9PiB7XG5cdFx0c2V0TG9jYWxUZXh0KHNldHRpbmcsIHJlc291cmNlTW9kZWwpO1xuXHRcdHNldHRpbmcuY29udHJvbC5mb3JFYWNoKChjb250cm9sRGF0YSkgPT4ge1xuXHRcdFx0c2V0TG9jYWxUZXh0KGNvbnRyb2xEYXRhLCByZXNvdXJjZU1vZGVsKTtcblx0XHRcdGNvbnRyb2xEYXRhLmVudW0/LmZvckVhY2goKGVudW1EYXRhKSA9PiB7XG5cdFx0XHRcdHNldExvY2FsVGV4dChlbnVtRGF0YSwgcmVzb3VyY2VNb2RlbCk7XG5cdFx0XHR9KTtcblx0XHR9KTtcblx0fSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVBZGFwdGlvbkRpYWxvZ0NvbnRlbnQoXG5cdGNvbmZpZ0NvbnRleHQ6IENvbnRleHQsXG5cdHByb3BlcnR5VmFsdWVzOiBQcm9wZXJ0eVZhbHVlLFxuXHRyZXNvdXJjZU1vZGVsOiBSZXNvdXJjZU1vZGVsLFxuXHRjb25maWdQYXRoID0gXCJydGEvY29uZmlnU2V0dGluZ3NcIlxuKTogTGlzdCB7XG5cdGNvbnN0IHNldHRpbmdzTW9kZWwgPSBuZXcgSlNPTk1vZGVsKCk7XG5cdHNldHRpbmdzTW9kZWwuc2V0RGF0YShkZWVwQ2xvbmUoY29uZmlnQ29udGV4dC5nZXRQcm9wZXJ0eShjb25maWdQYXRoKSkpO1xuXHRzZXRMb2NhbFRleHRzKHNldHRpbmdzTW9kZWwsIHJlc291cmNlTW9kZWwpO1xuXHRjb25zdCBsaXN0ID0gbmV3IExpc3QoKTtcblx0bGlzdC5zZXRNb2RlbChzZXR0aW5nc01vZGVsKTtcblxuXHRjb25zdCBsaXN0SXRlbSA9IG5ldyBJbnB1dExpc3RJdGVtKHtcblx0XHRsYWJlbDogXCJ7bGFiZWx9XCJcblx0fSk7XG5cblx0bGlzdEl0ZW0uYmluZENvbnRlbnQoe1xuXHRcdHBhdGg6IFwiY29udHJvbFwiLFxuXHRcdGZhY3Rvcnk6IGZ1bmN0aW9uIChwYXRoOiBzdHJpbmcsIGNvbnRleHQ6IHsgZ2V0UHJvcGVydHkobmFtZTogc3RyaW5nKTogc3RyaW5nIH0gLyogc2FwLnVpLm1vZGVsLkNvbnRleHQgKi8pIHtcblx0XHRcdGNvbnN0IHR5cGUgPSBjb250ZXh0LmdldFByb3BlcnR5KFwidHlwZVwiKTtcblx0XHRcdGNvbnN0IGlkID0gY29udGV4dC5nZXRQcm9wZXJ0eShcImlkXCIpO1xuXG5cdFx0XHRzd2l0Y2ggKHR5cGUpIHtcblx0XHRcdFx0Y2FzZSBcInN0cmluZ1wiOlxuXHRcdFx0XHRcdGlmIChjb250ZXh0LmdldFByb3BlcnR5KFwiZW51bVwiKSkge1xuXHRcdFx0XHRcdFx0Ly8gQ3JlYXRlIGEgc2VsZWN0IGxpc3QgZm9yIG11bHRpcGxlIG9wdGlvbnMgdG8gc2VsZWN0XG5cdFx0XHRcdFx0XHRjb25zdCBpdGVtID0gbmV3IEl0ZW0oe1xuXHRcdFx0XHRcdFx0XHR0ZXh0OiBcIntuYW1lfVwiLFxuXHRcdFx0XHRcdFx0XHRrZXk6IFwie2lkfVwiXG5cdFx0XHRcdFx0XHR9KTtcblxuXHRcdFx0XHRcdFx0Y29uc3Qgc2VsZWN0ID0gbmV3IFNlbGVjdCh7XG5cdFx0XHRcdFx0XHRcdHNlbGVjdGVkS2V5OiBcInt2YWx1ZX1cIixcblx0XHRcdFx0XHRcdFx0Y2hhbmdlOiBmdW5jdGlvbiAoZXZlbnQpOiB2b2lkIHtcblx0XHRcdFx0XHRcdFx0XHRwcm9wZXJ0eVZhbHVlc1sodGhpcyBhcyBTZWxlY3QpLmRhdGEoXCJpZFwiKSBhcyBrZXlvZiBQcm9wZXJ0eVZhbHVlXSA9IChcblx0XHRcdFx0XHRcdFx0XHRcdGV2ZW50LmdldFBhcmFtZXRlcihcInNlbGVjdGVkSXRlbVwiKSBhcyBJdGVtXG5cdFx0XHRcdFx0XHRcdFx0KS5nZXRLZXkoKSBhcyBzdHJpbmcgJiBib29sZWFuO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9KS5kYXRhKFwiaWRcIiwgaWQpO1xuXG5cdFx0XHRcdFx0XHRzZWxlY3QuYmluZEl0ZW1zKHtcblx0XHRcdFx0XHRcdFx0cGF0aDogXCJlbnVtXCIsXG5cdFx0XHRcdFx0XHRcdHRlbXBsYXRlOiBpdGVtXG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdHJldHVybiBzZWxlY3Q7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdC8vIENyZWF0ZSBhbiBJbnB1dCBmb3IgdGV4dCBjaGFuZ2VzXG5cdFx0XHRcdFx0XHRyZXR1cm4gbmV3IElucHV0KHtcblx0XHRcdFx0XHRcdFx0dmFsdWU6IFwie3ZhbHVlfVwiLFxuXHRcdFx0XHRcdFx0XHRjaGFuZ2U6IGZ1bmN0aW9uIChldmVudCk6IHZvaWQge1xuXHRcdFx0XHRcdFx0XHRcdHByb3BlcnR5VmFsdWVzWyh0aGlzIGFzIElucHV0KS5kYXRhKFwiaWRcIikgYXMga2V5b2YgUHJvcGVydHlWYWx1ZV0gPSBldmVudC5nZXRQYXJhbWV0ZXIoXCJ2YWx1ZVwiKSBhcyBzdHJpbmcgJlxuXHRcdFx0XHRcdFx0XHRcdFx0Ym9vbGVhbjtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fSkuZGF0YShcImlkXCIsIGlkKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdGNhc2UgXCJzdHJpbmdbXVwiOlxuXHRcdFx0XHRcdC8vIENyZWF0ZSBhbiBtdWx0aSBpbnB1dCBmaWVsZCBmb3IgdGhlIG5hdmlnYXRpb24gcHJvcGVydGllc1xuXHRcdFx0XHRcdGNvbnN0IG9NdWx0aUlucHV0ID0gbmV3IE11bHRpSW5wdXQoe1xuXHRcdFx0XHRcdFx0d2lkdGg6IFwiNzAlXCIsXG5cdFx0XHRcdFx0XHRzaG93VmFsdWVIZWxwOiBmYWxzZSxcblx0XHRcdFx0XHRcdHNob3dDbGVhckljb246IHRydWUsXG5cdFx0XHRcdFx0XHR0b2tlbnM6IChwcm9wZXJ0eVZhbHVlcz8ubmF2aWdhdGlvblByb3BlcnRpZXMgYXMgc3RyaW5nW10pLm1hcCgobmF2aWdhdGlvblByb3BlcnR5KSA9PiB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiBuZXcgVG9rZW4oeyB0ZXh0OiBuYXZpZ2F0aW9uUHJvcGVydHksIGtleTogbmF2aWdhdGlvblByb3BlcnR5IH0pO1xuXHRcdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0XHR0b2tlblVwZGF0ZTogZnVuY3Rpb24gKGV2ZW50OiBNdWx0aUlucHV0JFRva2VuVXBkYXRlRXZlbnQpOiB2b2lkIHtcblx0XHRcdFx0XHRcdFx0Y29uc3QgYXJyYXkgPSBwcm9wZXJ0eVZhbHVlc1sodGhpcyBhcyBNdWx0aUlucHV0KS5kYXRhKFwiaWRcIildIGFzIHN0cmluZ1tdO1xuXHRcdFx0XHRcdFx0XHRpZiAoKGV2ZW50LmdldFBhcmFtZXRlcihcImFkZGVkVG9rZW5zXCIpIGFzIFRva2VuW10pPy5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdFx0XHRcdFx0YXJyYXkucHVzaCgoZXZlbnQ/LmdldFBhcmFtZXRlcihcImFkZGVkVG9rZW5zXCIpIGFzIFRva2VuW10pWzBdPy5nZXRQcm9wZXJ0eShcImtleVwiKSk7XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoKGV2ZW50LmdldFBhcmFtZXRlcihcInJlbW92ZWRUb2tlbnNcIikgYXMgVG9rZW5bXSk/Lmxlbmd0aCA+IDApIHtcblx0XHRcdFx0XHRcdFx0XHRhcnJheS5zcGxpY2UoYXJyYXkuaW5kZXhPZigoZXZlbnQ/LmdldFBhcmFtZXRlcihcInJlbW92ZWRUb2tlbnNcIikgYXMgVG9rZW5bXSlbMF0/LmdldFByb3BlcnR5KFwia2V5XCIpKSwgMSk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9KS5kYXRhKFwiaWRcIiwgaWQpO1xuXHRcdFx0XHRcdG9NdWx0aUlucHV0LmFkZFZhbGlkYXRvcihmdW5jdGlvbiAoYXJnczogeyB0ZXh0OiBzdHJpbmcgfSkge1xuXHRcdFx0XHRcdFx0Y29uc3QgdGV4dCA9IGFyZ3MudGV4dDtcblx0XHRcdFx0XHRcdHJldHVybiBuZXcgVG9rZW4oe1xuXHRcdFx0XHRcdFx0XHRrZXk6IHRleHQsXG5cdFx0XHRcdFx0XHRcdHRleHQ6IHRleHRcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdHJldHVybiBvTXVsdGlJbnB1dDtcblx0XHRcdFx0Y2FzZSBcIm51bWJlclwiOlxuXHRcdFx0XHRcdC8vIENyZWF0ZSBhbiBJbnB1dCBmb3IgbnVtYmVyIGNoYW5nZXNcblx0XHRcdFx0XHRyZXR1cm4gbmV3IElucHV0KHtcblx0XHRcdFx0XHRcdHZhbHVlOiBcInt2YWx1ZX1cIixcblx0XHRcdFx0XHRcdHR5cGU6IFwiTnVtYmVyXCIsXG5cdFx0XHRcdFx0XHRjaGFuZ2U6IGZ1bmN0aW9uIChldmVudCk6IHZvaWQge1xuXHRcdFx0XHRcdFx0XHRwcm9wZXJ0eVZhbHVlc1sodGhpcyBhcyBJbnB1dCkuZGF0YShcImlkXCIpIGFzIGtleW9mIFByb3BlcnR5VmFsdWVdID0gZXZlbnQuZ2V0UGFyYW1ldGVyKFwidmFsdWVcIikgYXMgc3RyaW5nICZcblx0XHRcdFx0XHRcdFx0XHRib29sZWFuO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0pLmRhdGEoXCJpZFwiLCBpZCk7XG5cdFx0XHRcdGNhc2UgXCJib29sZWFuXCI6XG5cdFx0XHRcdFx0Ly8gQ3JlYXRlIGEgY2hlY2tib3ggZm9yIHRydWUvZmFsc2UgdmFsdWVzXG5cdFx0XHRcdFx0cmV0dXJuIG5ldyBDaGVja0JveCh7XG5cdFx0XHRcdFx0XHRzZWxlY3RlZDogXCJ7dmFsdWV9XCIsXG5cdFx0XHRcdFx0XHRzZWxlY3Q6IGZ1bmN0aW9uIChldmVudCk6IHZvaWQge1xuXHRcdFx0XHRcdFx0XHRwcm9wZXJ0eVZhbHVlc1sodGhpcyBhcyBDaGVja0JveCkuZGF0YShcImlkXCIpIGFzIGtleW9mIFByb3BlcnR5VmFsdWVdID0gZXZlbnQuZ2V0UGFyYW1ldGVyKFxuXHRcdFx0XHRcdFx0XHRcdFwic2VsZWN0ZWRcIlxuXHRcdFx0XHRcdFx0XHQpIGFzIHN0cmluZyAmIGJvb2xlYW47XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSkuZGF0YShcImlkXCIsIGlkKTtcblx0XHRcdFx0Y2FzZSBcImJvb2xlYW5PclN0cmluZ1wiOlxuXHRcdFx0XHRcdC8vIENyZWF0ZSBhIHNlbGVjdCBsaXN0IGZvciBib29sZWFuIGFuZCBzdHJpbmcgb3B0aW9ucyB0byBzZWxlY3Rcblx0XHRcdFx0XHQvLyBUaGlzIHR5cGUgaXMgYXQgdGhlIG1vbWVudCBvbmx5IHVzZWQgZm9yIHBlcnNvbmFsaXphdGlvbiBzZXR0aW5ncyB3aGljaCBjYW4gYmUgdW5kZWZpbmVkLCB0cnVlLCBmYWxzZSBvciBhbiBvYmplY3Rcblx0XHRcdFx0XHQvLyBUaGUgc2VsZWN0IGxpc3QgaXMgdXNlZCB0byBzZWxlY3QgYmV0d2VlbiB0cnVlLCBmYWxzZSBhbmQgXCJPd24gU2V0dGluZ3NcIlxuXHRcdFx0XHRcdC8vIElmIFwiT3duIFNldHRpbmdzXCIgaXMgc2VsZWN0ZWQsIHRoZSBwZXJzb25hbGl6YXRpb24gb2JqZWN0IGlzIHdyaXR0ZW4sIG90aGVyd2lzZSB0aGUgYm9vbGVhbiBpcyB3cml0dGVuICh1bmRlZmluZWQgY2Fubm90IGJlIHdyaXR0ZW4gaW4gYSBtYW5pZmVzdCBjaGFuZ2UpXG5cdFx0XHRcdFx0Y29uc3QgaXRlbSA9IG5ldyBJdGVtKHtcblx0XHRcdFx0XHRcdHRleHQ6IFwie25hbWV9XCIsXG5cdFx0XHRcdFx0XHRrZXk6IFwie2lkfVwiXG5cdFx0XHRcdFx0fSk7XG5cblx0XHRcdFx0XHRjb25zdCBzZWxlY3QgPSBuZXcgU2VsZWN0KHtcblx0XHRcdFx0XHRcdHNlbGVjdGVkS2V5OiBcInt2YWx1ZX1cIixcblx0XHRcdFx0XHRcdGNoYW5nZTogZnVuY3Rpb24gKGV2ZW50KTogdm9pZCB7XG5cdFx0XHRcdFx0XHRcdGxldCB2YWx1ZSA9IChldmVudC5nZXRQYXJhbWV0ZXIoXCJzZWxlY3RlZEl0ZW1cIikgYXMgSXRlbSkuZ2V0S2V5KCk7XG5cdFx0XHRcdFx0XHRcdC8vIENvbnZlcnQgc3RyaW5nIHRvIGJvb2xlYW4gaWYgbmVjZXNzYXJ5XG5cdFx0XHRcdFx0XHRcdGlmICh2YWx1ZS50b0xvd2VyQ2FzZSgpID09PSBcImZhbHNlXCIgfHwgdmFsdWUudG9Mb3dlckNhc2UoKSA9PT0gXCJ0cnVlXCIpIHtcblx0XHRcdFx0XHRcdFx0XHR2YWx1ZSA9IEpTT04ucGFyc2UodmFsdWUudG9Mb3dlckNhc2UoKSk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0cHJvcGVydHlWYWx1ZXNbKHRoaXMgYXMgU2VsZWN0KS5kYXRhKFwiaWRcIikgYXMga2V5b2YgUHJvcGVydHlWYWx1ZV0gPSB2YWx1ZTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9KS5kYXRhKFwiaWRcIiwgaWQpO1xuXG5cdFx0XHRcdFx0c2VsZWN0LmJpbmRJdGVtcyh7XG5cdFx0XHRcdFx0XHRwYXRoOiBcImVudW1cIixcblx0XHRcdFx0XHRcdHRlbXBsYXRlOiBpdGVtXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0cmV0dXJuIHNlbGVjdDtcblx0XHRcdFx0Y2FzZSBcImpzb25cIjpcblx0XHRcdFx0XHQvLyBDcmVhdGUgYW4gaW5wdXQgZm9yIGpzb24gb2JqZWN0IGRlc2NyaXB0aW9uc1xuXHRcdFx0XHRcdC8vIEEgdGV4dCBhcmVhIHdvdWxkIGhhdmUgYmVlbiBiZXR0ZXIgYnV0IHRoaXMgZG9lcyBub3Qgd29yayB3aXRoIHRoZSBJbnB1dExpc3RJdGVtXG5cdFx0XHRcdFx0Ly8gd2Ugd291bGQgaGF2ZSBuZWVkZWQgYSBDdXN0b21MaXN0SXRlbSBpbnN0ZWFkXG5cdFx0XHRcdFx0Ly8gd2hpY2ggd291bGQgaGF2ZSBiZWVuIHRvbyBtdWNoIGVmZm9ydCBhcyB3ZSB3b3VsZCBoYXZlIG5lZWRlZCB0byBjaGFuZ2UgdGhlIHdob2xlIHN0cnVjdHVyZVxuXHRcdFx0XHRcdHJldHVybiBuZXcgSW5wdXQoe1xuXHRcdFx0XHRcdFx0dmFsdWU6IFwie3ZhbHVlfVwiLFxuXHRcdFx0XHRcdFx0Y2hhbmdlOiBmdW5jdGlvbiAoZXZlbnQpOiB2b2lkIHtcblx0XHRcdFx0XHRcdFx0cHJvcGVydHlWYWx1ZXNbKHRoaXMgYXMgSW5wdXQpLmRhdGEoXCJpZFwiKSBhcyBrZXlvZiBQcm9wZXJ0eVZhbHVlXSA9IEpTT04ucGFyc2UoXG5cdFx0XHRcdFx0XHRcdFx0ZXZlbnQuZ2V0UGFyYW1ldGVyKFwidmFsdWVcIik/LnRvU3RyaW5nKCkgYXMgc3RyaW5nXG5cdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSkuZGF0YShcImlkXCIsIGlkKTtcblx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHR9XG5cdH0pO1xuXG5cdGxpc3QuYmluZEl0ZW1zKHtcblx0XHRwYXRoOiBcIi9cIixcblx0XHR0ZW1wbGF0ZTogbGlzdEl0ZW1cblx0fSk7XG5cblx0cmV0dXJuIGxpc3Q7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBvcGVuQWRhcHRpb25EaWFsb2coXG5cdGNvbmZpZ0NvbnRleHQ6IENvbnRleHQsXG5cdHByb3BlcnR5VmFsdWVzOiBQcm9wZXJ0eVZhbHVlLFxuXHR0aXRsZTogc3RyaW5nLFxuXHRyZXNvdXJjZU1vZGVsOiBSZXNvdXJjZU1vZGVsLFxuXHRjb25maWdQYXRoID0gXCJydGEvY29uZmlnU2V0dGluZ3NcIixcblx0aW5mb1RleHQgPSBcIntzYXAuZmUuaTE4bj5SVEFfQ09ORklHVVJBVElPTl9JTkZPX01FU1NBR0V9XCIsXG5cdHNpemU/OiB7IHdpZHRoOiBzdHJpbmc7IGhlaWdodDogc3RyaW5nIH1cbik6IFByb21pc2U8UHJvcGVydHlWYWx1ZT4ge1xuXHRjb25zdCBsaXN0ID0gY3JlYXRlQWRhcHRpb25EaWFsb2dDb250ZW50KGNvbmZpZ0NvbnRleHQsIHByb3BlcnR5VmFsdWVzLCByZXNvdXJjZU1vZGVsLCBjb25maWdQYXRoKTtcblx0Y29uc3QgY29udGVudDogKExpc3QgfCBNZXNzYWdlU3RyaXApW10gPSBbXTtcblx0Y29uc3QgaW5mb3JtYXRpb25NZXNzYWdlID0gbmV3IE1lc3NhZ2VTdHJpcCh7XG5cdFx0c2hvd0ljb246IHRydWUsXG5cdFx0dHlwZTogXCJJbmZvcm1hdGlvblwiLFxuXHRcdHRleHQ6IGluZm9UZXh0XG5cdH0pO1xuXHRpbmZvcm1hdGlvbk1lc3NhZ2UuYWRkU3R5bGVDbGFzcyhcInNhcFVpU21hbGxNYXJnaW5Cb3R0b21cIik7XG5cdGNvbnRlbnQucHVzaChpbmZvcm1hdGlvbk1lc3NhZ2UpO1xuXHRjb250ZW50LnB1c2gobGlzdCk7XG5cdGNvbnN0IGxpc3RJbmRleCA9IGNvbnRlbnQuaW5kZXhPZihsaXN0KTtcblx0cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcblx0XHRjb25zdCBkaWFsb2cgPSBuZXcgRGlhbG9nKHtcblx0XHRcdHRpdGxlOiB0aXRsZSxcblx0XHRcdGNvbnRlbnRXaWR0aDogc2l6ZSA/IHNpemUud2lkdGggOiBcIjU1MHB4XCIsXG5cdFx0XHRjb250ZW50SGVpZ2h0OiBzaXplID8gc2l6ZS5oZWlnaHQgOiBcIjMwMHB4XCIsXG5cdFx0XHRjb250ZW50OiBjb250ZW50LFxuXHRcdFx0YnV0dG9uczogW1xuXHRcdFx0XHRuZXcgQnV0dG9uKHtcblx0XHRcdFx0XHR0ZXh0OiBcIntzYXAuZmUuaTE4bj5SVEFfQ09ORklHVVJBVElPTl9BUFBMWX1cIixcblx0XHRcdFx0XHR0eXBlOiBcIkVtcGhhc2l6ZWRcIixcblx0XHRcdFx0XHRwcmVzczogZnVuY3Rpb24gKCk6IHZvaWQge1xuXHRcdFx0XHRcdFx0Ly8gcGVyc2lzdCBjaGFuZ2VzIGRvbmVcblx0XHRcdFx0XHRcdHVwZGF0ZUNvbmZpZ01vZGVsKGNvbmZpZ0NvbnRleHQsIGRpYWxvZy5nZXRDb250ZW50KClbbGlzdEluZGV4XS5nZXRNb2RlbCgpIGFzIEpTT05Nb2RlbCwgY29uZmlnUGF0aCk7XG5cdFx0XHRcdFx0XHRkaWFsb2cuY2xvc2UoKTtcblx0XHRcdFx0XHRcdHJlc29sdmUocHJvcGVydHlWYWx1ZXMpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSksXG5cdFx0XHRcdG5ldyBCdXR0b24oe1xuXHRcdFx0XHRcdHRleHQ6IFwie3NhcC5mZS5pMThuPlJUQV9DT05GSUdVUkFUSU9OX0NBTkNFTH1cIixcblx0XHRcdFx0XHRwcmVzczogZnVuY3Rpb24gKCk6IHZvaWQge1xuXHRcdFx0XHRcdFx0ZGlhbG9nLmNsb3NlKCk7XG5cdFx0XHRcdFx0XHRyZWplY3QoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pXG5cdFx0XHRdXG5cdFx0fSk7XG5cdFx0ZGlhbG9nLnNldE1vZGVsKHJlc291cmNlTW9kZWwsIFwic2FwLmZlLmkxOG5cIik7XG5cdFx0ZGlhbG9nLmFkZFN0eWxlQ2xhc3MoXCJzYXBVaUNvbnRlbnRQYWRkaW5nXCIpO1xuXHRcdGRpYWxvZy5hZGRTdHlsZUNsYXNzKFwic2FwVWlSVEFCb3JkZXJcIik7XG5cdFx0ZGlhbG9nLm9wZW4oKTtcblx0XHRyZXR1cm47XG5cdH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvY2Vzc0NoYW5nZXMoXG5cdHByb3BlcnR5Q2hhbmdlczogcHJvcEtleUFuZFZhbHVlLFxuXHRhcHBDb21wb25lbnQ6IEFwcENvbXBvbmVudCxcblx0cGFnZTogc3RyaW5nLFxuXHRwcm9wZXJ0eVBhdGg6IHN0cmluZ1xuKTogYWRhcHRpb25DaGFuZ2VbXSB7XG5cdGxldCBzaW5nbGVDaGFuZ2U6IHByb3BLZXlBbmRWYWx1ZSA9IHt9O1xuXHRjb25zdCBjaGFuZ2VzID0gW107XG5cdGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHByb3BlcnR5Q2hhbmdlcykpIHtcblx0XHRzaW5nbGVDaGFuZ2UgPSB7fTtcblx0XHRzaW5nbGVDaGFuZ2Vba2V5XSA9IHZhbHVlO1xuXHRcdGNoYW5nZXMucHVzaChnZXRDaGFuZ2Uoc2luZ2xlQ2hhbmdlLCBhcHBDb21wb25lbnQsIHBhZ2UsIHByb3BlcnR5UGF0aCkpO1xuXHR9XG5cdHJldHVybiBjaGFuZ2VzO1xufVxuXG4vKipcbiAqIEZvcm1hdCBlYWNoIGNoYW5nZSBtYWRlIHRvIGdsb2JhbCBzZXR0aW5ncyBcInNhcC5mZVwiXG4gKiBUaGUgc2V0IG9mIGNoYW5nZXMgYXJlIHB1dCBpbnRvIGluZGl2aWR1YWwgY2hhbmdlcyB0byBlbnN1cmVcbiAqIHRoYXQgZWFybGllciBjaGFuZ2VzIGFyZSBub3QgbG9zdCB3aGVuIHRoZXNlIGFyZSBsb2FkZWQgYXQgcnVudGltZS5cbiAqIEBwYXJhbSBwcm9wZXJ0eUNoYW5nZXNcbiAqIEBwYXJhbSBhcHBDb21wb25lbnRcbiAqIEBwYXJhbSBwYWdlXG4gKiBAcGFyYW0gcHJvcGVydHlQYXRoXG4gKiBAcmV0dXJucyBUaGUgY2hhbmdlIHN0cnVjdHVyZSB1c2VkIGJ5IGZsZXhpYmlsaXR5IHRvb2xzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcm9jZXNzR2xvYmFsQ2hhbmdlcyhcblx0cHJvcGVydHlDaGFuZ2VzOiBwcm9wS2V5QW5kVmFsdWUsXG5cdGFwcENvbXBvbmVudDogQXBwQ29tcG9uZW50LFxuXHRwYWdlOiBzdHJpbmcsXG5cdHByb3BlcnR5UGF0aDogc3RyaW5nXG4pOiBhZGFwdGlvbkNoYW5nZVtdIHtcblx0bGV0IHNpbmdsZUNoYW5nZTogcHJvcEtleUFuZFZhbHVlID0ge307XG5cdGNvbnN0IGNoYW5nZXMgPSBbXTtcblx0Zm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMocHJvcGVydHlDaGFuZ2VzKSkge1xuXHRcdHNpbmdsZUNoYW5nZSA9IHt9O1xuXHRcdHNpbmdsZUNoYW5nZVtrZXldID0gdmFsdWU7XG5cdFx0Y2hhbmdlcy5wdXNoKGdldENoYW5nZShzaW5nbGVDaGFuZ2UsIGFwcENvbXBvbmVudCwgcGFnZSwgcHJvcGVydHlQYXRoKSk7XG5cdH1cblx0cmV0dXJuIGNoYW5nZXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDaGFuZ2UoXG5cdHByb3BlcnR5Q2hhbmdlczogcHJvcEtleUFuZFZhbHVlLFxuXHRhcHBDb21wb25lbnQ6IEFwcENvbXBvbmVudCxcblx0cGFnZTogc3RyaW5nLFxuXHRwcm9wZXJ0eVBhdGg6IHN0cmluZ1xuKTogYWRhcHRpb25DaGFuZ2Uge1xuXHQvLyBDaGFuZ2VzIGZvciBjb250cm9scyBoYXZlIGEgcGF0aCBzdGFydGluZyB3aXRoIGNvbnRyb2xDb25maWd1cmF0aW9uLCBmb2xsb3dlZCBieSBhbiBhbm5vdGF0aW9uIHBhdGhcblx0Ly8gRm9yIHRoZSBsaXN0IHJlcG9ydCBjaGFuZ2VzLCB0aGVyZSBpcyBubyBwYXRoIGJlY2F1c2UgdGhlIHByb3BlcnRpZXMgYXJlIGRpcmVjdGx5IHVuZGVyIFNldHRpbmdzXG5cdC8vIGZvciB0aGUgXCJzYXAuZmUudGVtcGxhdGVzLkxpc3RSZXBvcnRcIiBpbiB0aGUgbWFuaWZlc3QuXG5cdGlmIChwcm9wZXJ0eVBhdGggPT09IFwiXCIpIHtcblx0XHRwcm9wZXJ0eVBhdGggPSBPYmplY3Qua2V5cyhwcm9wZXJ0eUNoYW5nZXMpWzBdO1xuXHR9IGVsc2Uge1xuXHRcdHByb3BlcnR5UGF0aCA9IHByb3BlcnR5UGF0aCArIFwiL1wiICsgT2JqZWN0LmtleXMocHJvcGVydHlDaGFuZ2VzKVswXTtcblx0fVxuXHRjb25zdCB2YWx1ZSA9IHByb3BlcnR5Q2hhbmdlc1tPYmplY3Qua2V5cyhwcm9wZXJ0eUNoYW5nZXMpWzBdXTtcblxuXHRyZXR1cm4gZ2V0Q2hhbmdlU3RydWN0dXJlKGFwcENvbXBvbmVudCwgcGFnZSwgcHJvcGVydHlQYXRoLCB2YWx1ZSk7XG59XG5cbi8qKlxuICogR2V0IHRoZSBwYXJhbWV0ZXJzIG90aGVyIHRoYW4gdGhlIGNvbnRyb2wgc2V0dGluZ3MgdGhhdCBhcmUgbmVlZGVkXG4gKiBmb3IgdGhlIGNoYW5nZSBzdHJ1Y3R1cmUuXG4gKiBAcGFyYW0gcHJvcGVydHlDaGFuZ2VzXG4gKiBAcGFyYW0gcHJvcGVydHlQYXRoXG4gKiBAcGFyYW0gY29udHJvbFxuICogQHJldHVybnMgVGhlIGNoYW5nZXMgaW4gYSBzdHJ1Y3R1cmUgdXNlZCBieSBmbGV4aWJpbGl0eSB0b29sc1xuICovXG5leHBvcnQgZnVuY3Rpb24gc2VwYXJhdGVDaGFuZ2VzKHByb3BlcnR5Q2hhbmdlczogUHJvcGVydHlWYWx1ZSwgcHJvcGVydHlQYXRoOiBzdHJpbmcsIGNvbnRyb2w6IENvbnRyb2wpOiBhZGFwdGlvbkNoYW5nZVtdIHtcblx0Y29uc3QgYXBwQ29tcG9uZW50ID0gQ29tbW9uVXRpbHMuZ2V0QXBwQ29tcG9uZW50KGNvbnRyb2wpO1xuXHRjb25zdCBwYWdlID0gZ2V0UGFnZShjb250cm9sLmdldFBhcmVudCgpIGFzIENvbnRyb2wpO1xuXHRyZXR1cm4gcHJvY2Vzc0NoYW5nZXMocHJvcGVydHlDaGFuZ2VzLCBhcHBDb21wb25lbnQsIHBhZ2UsIHByb3BlcnR5UGF0aCk7XG59XG5cbi8qKlxuICogR2V0IHRoZSBwYXJhbWV0ZXJzIG90aGVyIHRoYW4gdGhlIGdsb2JhbCBzZXR0aW5ncyB0aGF0IGFyZSBuZWVkZWRcbiAqIGZvciB0aGUgY2hhbmdlIHN0cnVjdHVyZS5cbiAqIEBwYXJhbSBwcm9wZXJ0eUNoYW5nZXNcbiAqIEBwYXJhbSBwcm9wZXJ0eVBhdGhcbiAqIEBwYXJhbSBjb250cm9sXG4gKiBAcmV0dXJucyBUaGUgY2hhbmdlcyBpbiBhIHN0cnVjdHVyZSB1c2VkIGJ5IGZsZXhpYmlsaXR5IHRvb2xzXG4gKi9cbmZ1bmN0aW9uIHNlcGFyYXRlR2xvYmFsQ2hhbmdlcyhwcm9wZXJ0eUNoYW5nZXM6IFByb3BlcnR5VmFsdWUsIHByb3BlcnR5UGF0aDogc3RyaW5nLCBjb250cm9sOiBDb250cm9sKTogYWRhcHRpb25DaGFuZ2VbXSB7XG5cdGNvbnN0IGFwcENvbXBvbmVudCA9IENvbW1vblV0aWxzLmdldEFwcENvbXBvbmVudChjb250cm9sKTtcblx0Y29uc3QgcGFnZSA9IFwic2FwLmZlXCI7XG5cdHJldHVybiBwcm9jZXNzR2xvYmFsQ2hhbmdlcyhwcm9wZXJ0eUNoYW5nZXMsIGFwcENvbXBvbmVudCwgcGFnZSwgcHJvcGVydHlQYXRoKTtcbn1cblxuZnVuY3Rpb24gZ2V0UGFnZShjb250cm9sOiBDb250cm9sKTogc3RyaW5nIHtcblx0Y29uc3Qgdmlld0lkID0gQ29tbW9uVXRpbHMuZ2V0VGFyZ2V0Vmlldyhjb250cm9sKS5nZXRJZCgpLnNwbGl0KFwiOjpcIik7XG5cdHJldHVybiB2aWV3SWRbdmlld0lkLmxlbmd0aCAtIDFdO1xufVxuXG5leHBvcnQgY29uc3QgZXh0cmFjdENoYW5nZXMgPSBmdW5jdGlvbiAoXG5cdGRlc2lnbnRpbWVTZXR0aW5nczogRGVzaWdudGltZVNldHRpbmdbXSxcblx0dW5jaGFuZ2VkRGF0YTogUHJvcGVydHlWYWx1ZSxcblx0cHJvcGVydHlWYWx1ZXNFbnRlcmVkOiBQcm9wZXJ0eVZhbHVlLFxuXHRwcm9wZXJ0eVBhdGg6IHN0cmluZyxcblx0Y29udHJvbDogQ29udHJvbCxcblx0Z2xvYmFsU2V0dGluZ3M/OiBEZXNpZ250aW1lU2V0dGluZ1tdXG4pOiBhZGFwdGlvbkNoYW5nZVtdIHtcblx0Y29uc3QgcHJvcGVydHlDaGFuZ2VzID0gZ2V0Q2hhbmdlZFByb3BlcnR5VmFsdWVzKGRlc2lnbnRpbWVTZXR0aW5ncywgdW5jaGFuZ2VkRGF0YSwgcHJvcGVydHlWYWx1ZXNFbnRlcmVkKTtcblx0Ly8gUHV0IGVhY2ggcHJvcGVydHkgaW50byBpdHMgb3duIGNoYW5nZS4gVGhpcyBlbnN1cmVzIHRoYXQgd2UgZG9uJ3QgbG9zZSBwcmV2aW91cyBjaGFuZ2VzLlxuXHRsZXQgY2hhbmdlcyA9IHNlcGFyYXRlQ2hhbmdlcyhwcm9wZXJ0eUNoYW5nZXMsIHByb3BlcnR5UGF0aCwgY29udHJvbCk7XG5cdGlmIChnbG9iYWxTZXR0aW5ncykge1xuXHRcdGNvbnN0IGdsb2JhbENoYW5nZXMgPSBnZXRDaGFuZ2VkUHJvcGVydHlWYWx1ZXMoZ2xvYmFsU2V0dGluZ3MsIHVuY2hhbmdlZERhdGEsIHByb3BlcnR5VmFsdWVzRW50ZXJlZCk7XG5cdFx0Y29uc3QgZ2xvYmFsID0gc2VwYXJhdGVHbG9iYWxDaGFuZ2VzKGdsb2JhbENoYW5nZXMsIHByb3BlcnR5UGF0aCwgY29udHJvbCk7XG5cdFx0Y2hhbmdlcyA9IGNoYW5nZXMuY29uY2F0KGdsb2JhbCk7XG5cdH1cblx0aWYgKGNoYW5nZXMubGVuZ3RoID4gMCkge1xuXHRcdHJldHVybiBjaGFuZ2VzO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiBbXTtcblx0fVxufTtcblxuZXhwb3J0IGNvbnN0IG5vQ2hhbmdlcyA9IGZ1bmN0aW9uICgpOiBbXSB7XG5cdHJldHVybiBbXTtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0Zpb3JpVG9vbHNSdGFNb2RlKGFwcENvbXBvbmVudDogQXBwQ29tcG9uZW50KTogYm9vbGVhbiB7XG5cdC8vIENoZWNrIGlmIHJ0YSBtb2RlIGhhcyBiZWVuIHNwZWNpZmllZCBvbiB1cmwgKGZvciBsb2NhbCB0ZXN0aW5nKVxuXHRsZXQgdXJsUGFyYW1zOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmdbXT4gPSB7fTtcblx0Y29uc3Qgc2hlbGxTZXJ2aWNlID0gYXBwQ29tcG9uZW50LmdldFNoZWxsU2VydmljZXMoKTtcblx0dXJsUGFyYW1zID0gc2hlbGxTZXJ2aWNlPy5wYXJzZVBhcmFtZXRlcnM/Lih3aW5kb3cubG9jYXRpb24uc2VhcmNoKTtcblx0cmV0dXJuICEhdXJsUGFyYW1zICYmIHVybFBhcmFtc1tcImZpb3JpLXRvb2xzLXJ0YS1tb2RlXCJdPy5bMF0gPT09IFwiZm9yQWRhcHRhdGlvblwiO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNSVEFNb2RlKGFwcENvbXBvbmVudDogQXBwQ29tcG9uZW50KTogYm9vbGVhbiB7XG5cdC8vIENoZWNrIGlmIHJ0YSBtb2RlIGhhcyBiZWVuIHNwZWNpZmllZCBvbiB1cmwgKGZvciBsb2NhbCB0ZXN0aW5nKVxuXHRsZXQgdXJsUGFyYW1zOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmdbXT4gPSB7fTtcblx0Y29uc3Qgc2hlbGxTZXJ2aWNlID0gYXBwQ29tcG9uZW50LmdldFNoZWxsU2VydmljZXMoKTtcblx0dXJsUGFyYW1zID0gc2hlbGxTZXJ2aWNlPy5wYXJzZVBhcmFtZXRlcnM/Lih3aW5kb3cubG9jYXRpb24uc2VhcmNoKTtcblx0cmV0dXJuICEhdXJsUGFyYW1zICYmIHVybFBhcmFtc1tcInNhcC1mZS1ydGEtbW9kZVwiXT8uWzBdID09PSBcInRydWVcIjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFNldHRpbmdzSWZLZXlVc2VyKGFwcENvbXBvbmVudDogQXBwQ29tcG9uZW50LCBpdGVtczogU2V0dGluZ3NEYXRhW10pOiBTZXR0aW5nc0RhdGFbXSB7XG5cdGlmICghaXNGaW9yaVRvb2xzUnRhTW9kZShhcHBDb21wb25lbnQpKSB7XG5cdFx0Ly8gbm90IHRvb2xzID0+IGtleSB1c2VyXG5cdFx0cmV0dXJuIGl0ZW1zLmZpbHRlcigoc2V0dGluZykgPT4ge1xuXHRcdFx0cmV0dXJuIHNldHRpbmcua2V5VXNlcjtcblx0XHR9KTtcblx0fVxuXHRyZXR1cm4gaXRlbXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0NvbmZpZ01vZGVsUHJlcGFyZWQoY29uZmlnQ29udGV4dDogQ29udGV4dCwgcGF0aCA9IFwicnRhL2NvbmZpZ1NldHRpbmdzXCIpOiBib29sZWFuIHtcblx0aWYgKGNvbmZpZ0NvbnRleHQuZ2V0UHJvcGVydHkocGF0aCkpIHtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXHRyZXR1cm4gZmFsc2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcmVwYXJlQ29uZmlnTW9kZWwoaXRlbXM6IFNldHRpbmdzRGF0YVtdLCBjb25maWdDb250ZXh0OiBDb250ZXh0LCBwYXRoID0gXCJydGEvY29uZmlnU2V0dGluZ3NcIik6IHZvaWQge1xuXHRpZiAoIWNvbmZpZ0NvbnRleHQuZ2V0UHJvcGVydHkocGF0aCkpIHtcblx0XHRjb25maWdDb250ZXh0LnNldFByb3BlcnR5KHBhdGgsIGl0ZW1zKTtcblx0fVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UGVyc29uYWxpemF0aW9uU2V0dGluZyhjb25maWdDb250ZXh0OiBDb250ZXh0LCBwYXRoID0gXCJydGEvY29uZmlnU2V0dGluZ3NcIik6IGJvb2xlYW4gfCBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRjb25zdCBzZXR0aW5ncyA9IGNvbmZpZ0NvbnRleHQuZ2V0T2JqZWN0KHBhdGgpO1xuXHRjb25zdCBwZXJzb25hbGl6YXRpb25TZXR0aW5nID0gc2V0dGluZ3MuZmluZCgoc2V0dGluZzogU2V0dGluZ3NEYXRhKSA9PiB7XG5cdFx0cmV0dXJuIHNldHRpbmc/LmNvbnRyb2xbMF0/LmlkID09PSBcInBlcnNvbmFsaXphdGlvblwiO1xuXHR9KTtcblx0aWYgKHBlcnNvbmFsaXphdGlvblNldHRpbmcpIHtcblx0XHRyZXR1cm4gcGVyc29uYWxpemF0aW9uU2V0dGluZy5jb250cm9sWzBdLnZhbHVlO1xuXHR9XG5cdHJldHVybiB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1cGRhdGVDb25maWdNb2RlbChjb25maWdDb250ZXh0OiBDb250ZXh0LCBzZXR0aW5nc01vZGVsOiBKU09OTW9kZWwsIHBhdGggPSBcInJ0YS9jb25maWdTZXR0aW5nc1wiKTogdm9pZCB7XG5cdGNvbnN0IHVwZGF0ZWRTZXR0aW5ncyA9IGRlZXBDbG9uZShzZXR0aW5nc01vZGVsLmdldERhdGEoKSk7XG5cdGNvbmZpZ0NvbnRleHQuc2V0UHJvcGVydHkocGF0aCwgdXBkYXRlZFNldHRpbmdzKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFByb3BlcnR5TmFtZXNBbmREZXNjcmlwdGlvbnMocHJvcHM6IERlc2lnbnRpbWVTZXR0aW5nW10sIHJlc291cmNlTW9kZWw6IFJlc291cmNlTW9kZWwpOiBEZXNpZ250aW1lU2V0dGluZ1tdIHtcblx0cHJvcHMuZm9yRWFjaChmdW5jdGlvbiAocHJvcCkge1xuXHRcdHByb3AubmFtZSA9IHJlc291cmNlTW9kZWwuZ2V0VGV4dChwcm9wLm5hbWUpO1xuXHRcdHByb3AuZGVzY3JpcHRpb24gPSByZXNvdXJjZU1vZGVsLmdldFRleHQocHJvcC5kZXNjcmlwdGlvbik7XG5cdFx0aWYgKHByb3AuZW51bXMpIHtcblx0XHRcdHByb3AuZW51bXMuZm9yRWFjaChmdW5jdGlvbiAoZW51bW0pIHtcblx0XHRcdFx0ZW51bW0ubmFtZSA9IHJlc291cmNlTW9kZWwuZ2V0VGV4dChlbnVtbS5uYW1lKTtcblx0XHRcdH0pO1xuXHRcdH1cblx0fSk7XG5cblx0cmV0dXJuIHByb3BzO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7OztFQUFBO0FBQ0E7QUFDQTtFQWdGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNPLFNBQVNBLHdCQUF3QkEsQ0FDdkNDLGtCQUF1QyxFQUN2Q0MsYUFBNEIsRUFDNUJDLGNBQTZCLEVBQ2I7SUFDaEIsTUFBTUMsZUFBOEIsR0FBRyxDQUFDLENBQUM7SUFFekNILGtCQUFrQixDQUFDSSxPQUFPLENBQUMsVUFBVUMsT0FBTyxFQUFFO01BQzdDLElBQ0UsT0FBT0osYUFBYSxDQUFDSSxPQUFPLENBQUNDLEVBQUUsQ0FBQyxLQUFLLFFBQVEsSUFBSUwsYUFBYSxDQUFDSSxPQUFPLENBQUNDLEVBQUUsQ0FB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
480
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJnZXRDaGFuZ2VkUHJvcGVydHlWYWx1ZXMiLCJkZXNpZ250aW1lU2V0dGluZ3MiLCJ1bmNoYW5nZWREYXRhIiwicHJvcGVydHlWYWx1ZXMiLCJwcm9wZXJ0eUNoYW5nZXMiLCJmb3JFYWNoIiwic2V0dGluZyIsImlkIiwiSlNPTiIsInN0cmluZ2lmeSIsIndyaXRlT2JqZWN0Iiwid3JpdGVPYmplY3RGb3IiLCJjaGFuZ2VPYmplY3QiLCJsZW5ndGgiLCJzZXR0aW5nc1RvZ2V0aGVyIiwicGF0aCIsInNraXBDaGFuZ2UiLCJfZXhwb3J0cyIsImdldENoYW5nZVN0cnVjdHVyZSIsImFwcENvbXBvbmVudCIsInBhZ2UiLCJwcm9wZXJ0eVBhdGgiLCJzZWxlY3RvciIsImNoYW5nZVNwZWNpZmljRGF0YSIsImFwcERlc2NyaXB0b3JDaGFuZ2VUeXBlIiwiY29udGVudCIsInBhcmFtZXRlcnMiLCJlbnRpdHlQcm9wZXJ0eUNoYW5nZSIsIm9wZXJhdGlvbiIsInByb3BlcnR5VmFsdWUiLCJzZXRMb2NhbFRleHQiLCJpdGVtIiwicmVzb3VyY2VNb2RlbCIsImtleSIsImdldFRleHQiLCJzZXRMb2NhbFRleHRzIiwibW9kZWwiLCJzZXR0aW5nc0RhdGEiLCJnZXREYXRhIiwiY29udHJvbCIsImNvbnRyb2xEYXRhIiwiZW51bSIsImVudW1EYXRhIiwiY3JlYXRlQWRhcHRpb25EaWFsb2dDb250ZW50IiwiY29uZmlnQ29udGV4dCIsImNvbmZpZ1BhdGgiLCJhcmd1bWVudHMiLCJ1bmRlZmluZWQiLCJzZXR0aW5nc01vZGVsIiwiSlNPTk1vZGVsIiwic2V0RGF0YSIsImRlZXBDbG9uZSIsImdldFByb3BlcnR5IiwibGlzdCIsIkxpc3QiLCJzZXRNb2RlbCIsInVwZGF0ZVBlcnNvbmFsaXphdGlvbkRlcGVuZGVudENvbnRyb2xzIiwic2VsZWN0ZWRWYWx1ZSIsImRlcGVuZGVudENvbnRyb2xzIiwiaXNPd25TZXR0aW5ncyIsImNvbnRyb2xJZCIsImxpc3RJdGVtcyIsImdldEl0ZW1zIiwiZ2V0Q29udGVudCIsImRhdGEiLCJzZXRTZWxlY3RlZCIsImxpc3RJdGVtIiwiSW5wdXRMaXN0SXRlbSIsImxhYmVsIiwiYmluZENvbnRlbnQiLCJmYWN0b3J5IiwiY29udGV4dCIsInR5cGUiLCJJdGVtIiwidGV4dCIsInNlbGVjdCIsIlNlbGVjdCIsInNlbGVjdGVkS2V5IiwiY2hhbmdlIiwiZXZlbnQiLCJnZXRQYXJhbWV0ZXIiLCJnZXRLZXkiLCJiaW5kSXRlbXMiLCJ0ZW1wbGF0ZSIsIklucHV0IiwidmFsdWUiLCJvTXVsdGlJbnB1dCIsIk11bHRpSW5wdXQiLCJ3aWR0aCIsInNob3dWYWx1ZUhlbHAiLCJzaG93Q2xlYXJJY29uIiwidG9rZW5zIiwibmF2aWdhdGlvblByb3BlcnRpZXMiLCJtYXAiLCJuYXZpZ2F0aW9uUHJvcGVydHkiLCJUb2tlbiIsInRva2VuVXBkYXRlIiwiYXJyYXkiLCJwdXNoIiwic3BsaWNlIiwiaW5kZXhPZiIsImFkZFZhbGlkYXRvciIsImFyZ3MiLCJDaGVja0JveCIsInNlbGVjdGVkIiwidG9Mb3dlckNhc2UiLCJwYXJzZSIsInRvU3RyaW5nIiwib3BlbkFkYXB0aW9uRGlhbG9nIiwidGl0bGUiLCJpbmZvVGV4dCIsInNpemUiLCJpbmZvcm1hdGlvbk1lc3NhZ2UiLCJNZXNzYWdlU3RyaXAiLCJzaG93SWNvbiIsImFkZFN0eWxlQ2xhc3MiLCJsaXN0SW5kZXgiLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsImRpYWxvZyIsIkRpYWxvZyIsImNvbnRlbnRXaWR0aCIsImNvbnRlbnRIZWlnaHQiLCJoZWlnaHQiLCJidXR0b25zIiwiQnV0dG9uIiwicHJlc3MiLCJ1cGRhdGVDb25maWdNb2RlbCIsImdldE1vZGVsIiwiY2xvc2UiLCJvcGVuIiwicHJvY2Vzc0NoYW5nZXMiLCJzaW5nbGVDaGFuZ2UiLCJjaGFuZ2VzIiwiT2JqZWN0IiwiZW50cmllcyIsImdldENoYW5nZSIsInByb2Nlc3NHbG9iYWxDaGFuZ2VzIiwia2V5cyIsInNlcGFyYXRlQ2hhbmdlcyIsIkNvbW1vblV0aWxzIiwiZ2V0QXBwQ29tcG9uZW50IiwiZ2V0UGFnZSIsImdldFBhcmVudCIsInNlcGFyYXRlR2xvYmFsQ2hhbmdlcyIsInZpZXdJZCIsImdldFRhcmdldFZpZXciLCJnZXRJZCIsInNwbGl0IiwiZXh0cmFjdENoYW5nZXMiLCJwcm9wZXJ0eVZhbHVlc0VudGVyZWQiLCJnbG9iYWxTZXR0aW5ncyIsImdsb2JhbENoYW5nZXMiLCJnbG9iYWwiLCJjb25jYXQiLCJub0NoYW5nZXMiLCJpc0Zpb3JpVG9vbHNSdGFNb2RlIiwidXJsUGFyYW1zIiwic2hlbGxTZXJ2aWNlIiwiZ2V0U2hlbGxTZXJ2aWNlcyIsInBhcnNlUGFyYW1ldGVycyIsIndpbmRvdyIsImxvY2F0aW9uIiwic2VhcmNoIiwiaXNSVEFNb2RlIiwiZ2V0U2V0dGluZ3NJZktleVVzZXIiLCJpdGVtcyIsImZpbHRlciIsImtleVVzZXIiLCJpc0NvbmZpZ01vZGVsUHJlcGFyZWQiLCJwcmVwYXJlQ29uZmlnTW9kZWwiLCJzZXRQcm9wZXJ0eSIsImdldFBlcnNvbmFsaXphdGlvblNldHRpbmciLCJzZXR0aW5ncyIsImdldE9iamVjdCIsInBlcnNvbmFsaXphdGlvblNldHRpbmciLCJmaW5kIiwidXBkYXRlZFNldHRpbmdzIiwiZ2V0UHJvcGVydHlOYW1lc0FuZERlc2NyaXB0aW9ucyIsInByb3BzIiwicHJvcCIsIm5hbWUiLCJkZXNjcmlwdGlvbiIsImVudW1zIiwiZW51bW0iLCJpc01hbmlmZXN0Q2hhbmdlc0VuYWJsZWQiLCJvd25lciIsIkNvbXBvbmVudCIsImdldE93bmVyQ29tcG9uZW50Rm9yIiwic2FwRmVNYW5pZmVzdCIsImdldE1hbmlmZXN0RW50cnkiLCJhcHAiLCJkaXNhYmxlTWFuaWZlc3RDaGFuZ2VzIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJEZXNpZ250aW1lLmhlbHBlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiFcbiAqIFJldXNlIGZ1bmN0aW9ucyBmb3IgZGVzaWdudGltZSBhZGFwdGlvblxuICovXG5cbmltcG9ydCBkZWVwQ2xvbmUgZnJvbSBcInNhcC9iYXNlL3V0aWwvZGVlcENsb25lXCI7XG5pbXBvcnQgdHlwZSBBcHBDb21wb25lbnQgZnJvbSBcInNhcC9mZS9jb3JlL0FwcENvbXBvbmVudFwiO1xuaW1wb3J0IENvbW1vblV0aWxzIGZyb20gXCJzYXAvZmUvY29yZS9Db21tb25VdGlsc1wiO1xuaW1wb3J0IHR5cGUgUmVzb3VyY2VNb2RlbCBmcm9tIFwic2FwL2ZlL2NvcmUvUmVzb3VyY2VNb2RlbFwiO1xuaW1wb3J0IHR5cGUgVGVtcGxhdGVDb21wb25lbnQgZnJvbSBcInNhcC9mZS9jb3JlL1RlbXBsYXRlQ29tcG9uZW50XCI7XG5pbXBvcnQgdHlwZSB7IFRlbXBsYXRlVHlwZSB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL01hbmlmZXN0U2V0dGluZ3NcIjtcbmltcG9ydCBCdXR0b24gZnJvbSBcInNhcC9tL0J1dHRvblwiO1xuaW1wb3J0IENoZWNrQm94IGZyb20gXCJzYXAvbS9DaGVja0JveFwiO1xuaW1wb3J0IERpYWxvZyBmcm9tIFwic2FwL20vRGlhbG9nXCI7XG5pbXBvcnQgSW5wdXQgZnJvbSBcInNhcC9tL0lucHV0XCI7XG5pbXBvcnQgSW5wdXRMaXN0SXRlbSBmcm9tIFwic2FwL20vSW5wdXRMaXN0SXRlbVwiO1xuaW1wb3J0IExpc3QgZnJvbSBcInNhcC9tL0xpc3RcIjtcbmltcG9ydCBNZXNzYWdlU3RyaXAgZnJvbSBcInNhcC9tL01lc3NhZ2VTdHJpcFwiO1xuaW1wb3J0IHR5cGUgeyBNdWx0aUlucHV0JFRva2VuVXBkYXRlRXZlbnQgfSBmcm9tIFwic2FwL20vTXVsdGlJbnB1dFwiO1xuaW1wb3J0IE11bHRpSW5wdXQgZnJvbSBcInNhcC9tL011bHRpSW5wdXRcIjtcbmltcG9ydCBTZWxlY3QgZnJvbSBcInNhcC9tL1NlbGVjdFwiO1xuaW1wb3J0IFRva2VuIGZyb20gXCJzYXAvbS9Ub2tlblwiO1xuaW1wb3J0IENvbXBvbmVudCBmcm9tIFwic2FwL3VpL2NvcmUvQ29tcG9uZW50XCI7XG5pbXBvcnQgdHlwZSBDb250cm9sIGZyb20gXCJzYXAvdWkvY29yZS9Db250cm9sXCI7XG5pbXBvcnQgSXRlbSBmcm9tIFwic2FwL3VpL2NvcmUvSXRlbVwiO1xuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL0NvbnRleHRcIjtcbmltcG9ydCBKU09OTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9qc29uL0pTT05Nb2RlbFwiO1xuXG5leHBvcnQgdHlwZSBhZGFwdGlvbkNoYW5nZSA9IHtcblx0YXBwQ29tcG9uZW50OiBBcHBDb21wb25lbnQ7XG5cdHNlbGVjdG9yOiBBcHBDb21wb25lbnQ7XG5cdGNoYW5nZVNwZWNpZmljRGF0YToge1xuXHRcdGFwcERlc2NyaXB0b3JDaGFuZ2VUeXBlOiBcImFwcGRlc2NyX2ZlX2NoYW5nZVBhZ2VDb25maWd1cmF0aW9uXCI7XG5cdFx0Y29udGVudDoge1xuXHRcdFx0cGFyYW1ldGVyczoge1xuXHRcdFx0XHRwYWdlOiBzdHJpbmc7XG5cdFx0XHRcdGVudGl0eVByb3BlcnR5Q2hhbmdlOiB7XG5cdFx0XHRcdFx0cHJvcGVydHlQYXRoOiBzdHJpbmc7XG5cdFx0XHRcdFx0b3BlcmF0aW9uOiBzdHJpbmc7XG5cdFx0XHRcdFx0cHJvcGVydHlWYWx1ZTogc3RyaW5nIHwgc3RyaW5nW10gfCBib29sZWFuIHwgbnVtYmVyIHwgb2JqZWN0IHwgdW5kZWZpbmVkO1xuXHRcdFx0XHR9O1xuXHRcdFx0fTtcblx0XHR9O1xuXHR9O1xufTtcblxuZXhwb3J0IHR5cGUgRGVzaWdudGltZVNldHRpbmdFbnVtcyA9IHtcblx0aWQ6IHN0cmluZztcblx0bmFtZTogc3RyaW5nO1xuXHRkZXNjcmlwdGlvbj86IHN0cmluZztcbn07XG5cbmV4cG9ydCB0eXBlIERlc2lnbnRpbWVTZXR0aW5nID0ge1xuXHRpZDogc3RyaW5nO1xuXHRwYXRoPzogc3RyaW5nO1xuXHRuYW1lOiBzdHJpbmc7XG5cdGRlc2NyaXB0aW9uOiBzdHJpbmc7XG5cdHJlc3RyaWN0ZWRUbz86IFRlbXBsYXRlVHlwZVtdO1xuXHR2YWx1ZTogdW5rbm93bjtcblx0dHlwZT86IHN0cmluZztcblx0ZW51bXM/OiBEZXNpZ250aW1lU2V0dGluZ0VudW1zW107XG5cdHNraXBDaGFuZ2U/OiBib29sZWFuO1xuXHR3cml0ZU9iamVjdEZvcj86IHN0cmluZztcblx0d3JpdGVPYmplY3Q/OiB7IGlkOiBzdHJpbmc7IHBhdGg/OiBzdHJpbmcgfVtdO1xuXHRrZXlVc2VyPzogYm9vbGVhbjtcbn07XG5cbmV4cG9ydCB0eXBlIFByb3BlcnR5VmFsdWUgPSBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCBzdHJpbmdbXSB8IGJvb2xlYW4gfCBudW1iZXIgfCBvYmplY3QgfCB1bmRlZmluZWQ+O1xuXG5leHBvcnQgdHlwZSBTZXR0aW5nc0RhdGEgPSB7XG5cdGxhYmVsOiBzdHJpbmc7XG5cdHRvb2x0aXA6IHN0cmluZztcblx0Y29udHJvbDogQ29udHJvbERhdGFbXTtcblx0a2V5VXNlcj86IGJvb2xlYW47XG59O1xuXG50eXBlIENvbnRyb2xEYXRhID0ge1xuXHR0eXBlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cdGVudW06IERlc2lnbnRpbWVTZXR0aW5nRW51bXNbXSB8IHVuZGVmaW5lZDtcblx0dmFsdWU6IHVua25vd247XG5cdGlkOiBzdHJpbmc7XG59O1xuXG50eXBlIHByb3BLZXlBbmRWYWx1ZSA9IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIHwgc3RyaW5nW10gfCBib29sZWFuIHwgbnVtYmVyIHwgb2JqZWN0IHwgdW5kZWZpbmVkIH07XG5cbi8qKlxuICogSWRlbnRpZnkgd2hpY2ggc2V0dGluZ3MgaGF2ZSBjaGFuZ2VkLlxuICogQHBhcmFtIGRlc2lnbnRpbWVTZXR0aW5nc1xuICogQHBhcmFtIHVuY2hhbmdlZERhdGFcbiAqIEBwYXJhbSBwcm9wZXJ0eVZhbHVlc1xuICogIEByZXR1cm5zIFRoZSBjb25maWd1cmF0aW9uIHByb3BlcnRpZXMgd2hlcmUgdGhlIHZhbHVlcyBoYXZlIGJlZW4gY2hhbmdlZCBjb21wYXJlZCB0byB0aGUgc3RhcnRpbmcgdmFsdWVzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRDaGFuZ2VkUHJvcGVydHlWYWx1ZXMoXG5cdGRlc2lnbnRpbWVTZXR0aW5nczogRGVzaWdudGltZVNldHRpbmdbXSxcblx0dW5jaGFuZ2VkRGF0YTogUHJvcGVydHlWYWx1ZSxcblx0cHJvcGVydHlWYWx1ZXM6IFByb3BlcnR5VmFsdWVcbik6IFByb3BlcnR5VmFsdWUge1xuXHRjb25zdCBwcm9wZXJ0eUNoYW5nZXM6IFByb3BlcnR5VmFsdWUgPSB7fTtcblxuXHRkZXNpZ250aW1lU2V0dGluZ3MuZm9yRWFjaChmdW5jdGlvbiAoc2V0dGluZykge1xuXHRcdGlmIChcblx0XHRcdCh0eXBlb2YgdW5jaGFuZ2VkRGF0YVtzZXR0aW5nLmlkXSAhPT0gXCJvYmplY3RcIiAmJiB1bmNoYW5nZWREYXRhW3NldHRpbmcuaWRdICE9PSBwcm9wZXJ0eVZhbHVlc1tzZXR0aW5nLmlkXSkgfHxcblx0XHRcdCh0eXBlb2YgdW5jaGFuZ2VkRGF0YVtzZXR0aW5nLmlkXSA9PT0gXCJvYmplY3RcIiAmJlxuXHRcdFx0XHRKU09OLnN0cmluZ2lmeSh1bmNoYW5nZWREYXRhW3NldHRpbmcuaWRdKSAhPT0gSlNPTi5zdHJpbmdpZnkocHJvcGVydHlWYWx1ZXNbc2V0dGluZy5pZF0pKVxuXHRcdCkge1xuXHRcdFx0aWYgKHNldHRpbmcud3JpdGVPYmplY3QgJiYgcHJvcGVydHlWYWx1ZXNbc2V0dGluZy5pZF0gPT09IHNldHRpbmcud3JpdGVPYmplY3RGb3IpIHtcblx0XHRcdFx0Ly8gV2Ugd3JpdGUgYW4gb2JqZWN0IGZvciB0aGlzIHNldHRpbmdcblx0XHRcdFx0Y29uc3QgY2hhbmdlT2JqZWN0OiBQcm9wZXJ0eVZhbHVlID0ge307XG5cdFx0XHRcdGlmIChzZXR0aW5nLndyaXRlT2JqZWN0ICYmIHNldHRpbmcud3JpdGVPYmplY3Q/Lmxlbmd0aCA+IDApIHtcblx0XHRcdFx0XHRzZXR0aW5nLndyaXRlT2JqZWN0LmZvckVhY2goZnVuY3Rpb24gKHNldHRpbmdzVG9nZXRoZXIpIHtcblx0XHRcdFx0XHRcdGNoYW5nZU9iamVjdFtzZXR0aW5nc1RvZ2V0aGVyLnBhdGggPyBzZXR0aW5nc1RvZ2V0aGVyLnBhdGggOiBzZXR0aW5nc1RvZ2V0aGVyLmlkXSA9XG5cdFx0XHRcdFx0XHRcdHByb3BlcnR5VmFsdWVzW3NldHRpbmdzVG9nZXRoZXIuaWRdO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHByb3BlcnR5Q2hhbmdlc1tzZXR0aW5nLnBhdGggPyBzZXR0aW5nLnBhdGggOiBzZXR0aW5nLmlkXSA9IGNoYW5nZU9iamVjdDtcblx0XHRcdH0gZWxzZSBpZiAoIXNldHRpbmcuc2tpcENoYW5nZSkge1xuXHRcdFx0XHRwcm9wZXJ0eUNoYW5nZXNbc2V0dGluZy5wYXRoID8gc2V0dGluZy5wYXRoIDogc2V0dGluZy5pZF0gPSBwcm9wZXJ0eVZhbHVlc1tzZXR0aW5nLmlkXTtcblx0XHRcdH1cblx0XHR9XG5cdH0pO1xuXHRyZXR1cm4gcHJvcGVydHlDaGFuZ2VzO1xufVxuLyoqXG4gKiBDb252ZXJ0IHNhcC5mZSBjaGFuZ2UgaW50byBhIHN0cnVjdHVyZSByZXF1aXJlZCBieSB0aGUgZmxleGliaWxpdHkgdG9vbHMuXG4gKiBAcGFyYW0gYXBwQ29tcG9uZW50XG4gKiBAcGFyYW0gcGFnZVxuICogQHBhcmFtIHByb3BlcnR5UGF0aFxuICogQHBhcmFtIHByb3BlcnR5Q2hhbmdlc1xuICogQHJldHVybnMgVGhlIGNoYW5nZSBzdHJ1Y3R1cmUgdXNlZCBieSBmbGV4aWJpbGl0eSB0b29sc1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q2hhbmdlU3RydWN0dXJlKFxuXHRhcHBDb21wb25lbnQ6IEFwcENvbXBvbmVudCxcblx0cGFnZTogc3RyaW5nLFxuXHRwcm9wZXJ0eVBhdGg6IHN0cmluZyxcblx0cHJvcGVydHlDaGFuZ2VzOiBzdHJpbmcgfCBzdHJpbmdbXSB8IGJvb2xlYW4gfCBudW1iZXIgfCBvYmplY3QgfCB1bmRlZmluZWRcbik6IGFkYXB0aW9uQ2hhbmdlIHtcblx0cmV0dXJuIHtcblx0XHRhcHBDb21wb25lbnQ6IGFwcENvbXBvbmVudCxcblx0XHRzZWxlY3RvcjogYXBwQ29tcG9uZW50LFxuXHRcdGNoYW5nZVNwZWNpZmljRGF0YToge1xuXHRcdFx0YXBwRGVzY3JpcHRvckNoYW5nZVR5cGU6IFwiYXBwZGVzY3JfZmVfY2hhbmdlUGFnZUNvbmZpZ3VyYXRpb25cIixcblx0XHRcdGNvbnRlbnQ6IHtcblx0XHRcdFx0cGFyYW1ldGVyczoge1xuXHRcdFx0XHRcdHBhZ2U6IHBhZ2UsXG5cdFx0XHRcdFx0ZW50aXR5UHJvcGVydHlDaGFuZ2U6IHtcblx0XHRcdFx0XHRcdHByb3BlcnR5UGF0aDogcHJvcGVydHlQYXRoLFxuXHRcdFx0XHRcdFx0b3BlcmF0aW9uOiBcIlVQU0VSVFwiLFxuXHRcdFx0XHRcdFx0cHJvcGVydHlWYWx1ZTogcHJvcGVydHlDaGFuZ2VzXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9O1xufVxuXG5mdW5jdGlvbiBzZXRMb2NhbFRleHQoaXRlbTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sIHJlc291cmNlTW9kZWw6IFJlc291cmNlTW9kZWwpOiB2b2lkIHtcblx0Zm9yIChjb25zdCBrZXkgaW4gaXRlbSkge1xuXHRcdGlmIChrZXkgIT09IFwiaWRcIiAmJiB0eXBlb2YgaXRlbVtrZXldID09PSBcInN0cmluZ1wiKSB7XG5cdFx0XHRpdGVtW2tleV0gPSByZXNvdXJjZU1vZGVsLmdldFRleHQoaXRlbVtrZXldIGFzIHN0cmluZyk7XG5cdFx0fVxuXHR9XG59XG5cbmZ1bmN0aW9uIHNldExvY2FsVGV4dHMobW9kZWw6IEpTT05Nb2RlbCwgcmVzb3VyY2VNb2RlbDogUmVzb3VyY2VNb2RlbCk6IHZvaWQge1xuXHRjb25zdCBzZXR0aW5nc0RhdGEgPSBtb2RlbC5nZXREYXRhKCkgYXMgU2V0dGluZ3NEYXRhW107XG5cdHNldHRpbmdzRGF0YS5mb3JFYWNoKChzZXR0aW5nKSA9PiB7XG5cdFx0c2V0TG9jYWxUZXh0KHNldHRpbmcsIHJlc291cmNlTW9kZWwpO1xuXHRcdHNldHRpbmcuY29udHJvbC5mb3JFYWNoKChjb250cm9sRGF0YSkgPT4ge1xuXHRcdFx0c2V0TG9jYWxUZXh0KGNvbnRyb2xEYXRhLCByZXNvdXJjZU1vZGVsKTtcblx0XHRcdGNvbnRyb2xEYXRhLmVudW0/LmZvckVhY2goKGVudW1EYXRhKSA9PiB7XG5cdFx0XHRcdHNldExvY2FsVGV4dChlbnVtRGF0YSwgcmVzb3VyY2VNb2RlbCk7XG5cdFx0XHR9KTtcblx0XHR9KTtcblx0fSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVBZGFwdGlvbkRpYWxvZ0NvbnRlbnQoXG5cdGNvbmZpZ0NvbnRleHQ6IENvbnRleHQsXG5cdHByb3BlcnR5VmFsdWVzOiBQcm9wZXJ0eVZhbHVlLFxuXHRyZXNvdXJjZU1vZGVsOiBSZXNvdXJjZU1vZGVsLFxuXHRjb25maWdQYXRoID0gXCJydGEvY29uZmlnU2V0dGluZ3NcIlxuKTogTGlzdCB7XG5cdGNvbnN0IHNldHRpbmdzTW9kZWwgPSBuZXcgSlNPTk1vZGVsKCk7XG5cdHNldHRpbmdzTW9kZWwuc2V0RGF0YShkZWVwQ2xvbmUoY29uZmlnQ29udGV4dC5nZXRQcm9wZXJ0eShjb25maWdQYXRoKSkpO1xuXHRzZXRMb2NhbFRleHRzKHNldHRpbmdzTW9kZWwsIHJlc291cmNlTW9kZWwpO1xuXHRjb25zdCBsaXN0ID0gbmV3IExpc3QoKTtcblx0bGlzdC5zZXRNb2RlbChzZXR0aW5nc01vZGVsKTtcblxuXHQvLyBGdW5jdGlvbiB0byBjbGVhciBwZXJzb25hbGl6YXRpb24gZGVwZW5kZW50IGNvbnRyb2xzIHdoZW4gXCJPd24gU2V0dGluZ3NcIiBpcyBzZWxlY3RlZFxuXHRjb25zdCB1cGRhdGVQZXJzb25hbGl6YXRpb25EZXBlbmRlbnRDb250cm9scyA9IChzZWxlY3RlZFZhbHVlOiBzdHJpbmcpOiB2b2lkID0+IHtcblx0XHRjb25zdCBkZXBlbmRlbnRDb250cm9scyA9IFtcInBlcnNvbmFsaXphdGlvblNvcnRcIiwgXCJwZXJzb25hbGl6YXRpb25Db2x1bW5cIiwgXCJwZXJzb25hbGl6YXRpb25GaWx0ZXJcIiwgXCJwZXJzb25hbGl6YXRpb25Hcm91cFwiXTtcblx0XHRjb25zdCBpc093blNldHRpbmdzID0gc2VsZWN0ZWRWYWx1ZSA9PT0gXCJPd24gU2V0dGluZ3NcIjtcblx0XHRpZiAoaXNPd25TZXR0aW5ncykge1xuXHRcdFx0ZGVwZW5kZW50Q29udHJvbHMuZm9yRWFjaCgoY29udHJvbElkKSA9PiB7XG5cdFx0XHRcdGNvbnN0IGxpc3RJdGVtcyA9IGxpc3QuZ2V0SXRlbXMoKTtcblx0XHRcdFx0Zm9yIChjb25zdCBpdGVtIG9mIGxpc3RJdGVtcykge1xuXHRcdFx0XHRcdGNvbnN0IGNvbnRlbnQgPSAoaXRlbSBhcyBJbnB1dExpc3RJdGVtKS5nZXRDb250ZW50KCk7XG5cdFx0XHRcdFx0Zm9yIChjb25zdCBjb250cm9sIG9mIGNvbnRlbnQpIHtcblx0XHRcdFx0XHRcdGlmIChjb250cm9sLmRhdGEoXCJpZFwiKSA9PT0gY29udHJvbElkKSB7XG5cdFx0XHRcdFx0XHRcdGlmICgoY29udHJvbCBhcyBDaGVja0JveCkuc2V0U2VsZWN0ZWQpIHtcblx0XHRcdFx0XHRcdFx0XHQoY29udHJvbCBhcyBDaGVja0JveCkuc2V0U2VsZWN0ZWQoZmFsc2UpO1xuXHRcdFx0XHRcdFx0XHRcdHByb3BlcnR5VmFsdWVzW2NvbnRyb2xJZF0gPSBmYWxzZTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblx0fTtcblxuXHRjb25zdCBsaXN0SXRlbSA9IG5ldyBJbnB1dExpc3RJdGVtKHtcblx0XHRsYWJlbDogXCJ7bGFiZWx9XCJcblx0fSk7XG5cblx0bGlzdEl0ZW0uYmluZENvbnRlbnQoe1xuXHRcdHBhdGg6IFwiY29udHJvbFwiLFxuXHRcdGZhY3Rvcnk6IGZ1bmN0aW9uIChwYXRoOiBzdHJpbmcsIGNvbnRleHQ6IHsgZ2V0UHJvcGVydHkobmFtZTogc3RyaW5nKTogc3RyaW5nIH0gLyogc2FwLnVpLm1vZGVsLkNvbnRleHQgKi8pIHtcblx0XHRcdGNvbnN0IHR5cGUgPSBjb250ZXh0LmdldFByb3BlcnR5KFwidHlwZVwiKTtcblx0XHRcdGNvbnN0IGlkID0gY29udGV4dC5nZXRQcm9wZXJ0eShcImlkXCIpO1xuXG5cdFx0XHRzd2l0Y2ggKHR5cGUpIHtcblx0XHRcdFx0Y2FzZSBcInN0cmluZ1wiOlxuXHRcdFx0XHRcdGlmIChjb250ZXh0LmdldFByb3BlcnR5KFwiZW51bVwiKSkge1xuXHRcdFx0XHRcdFx0Ly8gQ3JlYXRlIGEgc2VsZWN0IGxpc3QgZm9yIG11bHRpcGxlIG9wdGlvbnMgdG8gc2VsZWN0XG5cdFx0XHRcdFx0XHRjb25zdCBpdGVtID0gbmV3IEl0ZW0oe1xuXHRcdFx0XHRcdFx0XHR0ZXh0OiBcIntuYW1lfVwiLFxuXHRcdFx0XHRcdFx0XHRrZXk6IFwie2lkfVwiXG5cdFx0XHRcdFx0XHR9KTtcblxuXHRcdFx0XHRcdFx0Y29uc3Qgc2VsZWN0ID0gbmV3IFNlbGVjdCh7XG5cdFx0XHRcdFx0XHRcdHNlbGVjdGVkS2V5OiBcInt2YWx1ZX1cIixcblx0XHRcdFx0XHRcdFx0Y2hhbmdlOiBmdW5jdGlvbiAoZXZlbnQpOiB2b2lkIHtcblx0XHRcdFx0XHRcdFx0XHRwcm9wZXJ0eVZhbHVlc1sodGhpcyBhcyBTZWxlY3QpLmRhdGEoXCJpZFwiKSBhcyBrZXlvZiBQcm9wZXJ0eVZhbHVlXSA9IChcblx0XHRcdFx0XHRcdFx0XHRcdGV2ZW50LmdldFBhcmFtZXRlcihcInNlbGVjdGVkSXRlbVwiKSBhcyBJdGVtXG5cdFx0XHRcdFx0XHRcdFx0KS5nZXRLZXkoKSBhcyBzdHJpbmcgJiBib29sZWFuO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9KS5kYXRhKFwiaWRcIiwgaWQpO1xuXG5cdFx0XHRcdFx0XHRzZWxlY3QuYmluZEl0ZW1zKHtcblx0XHRcdFx0XHRcdFx0cGF0aDogXCJlbnVtXCIsXG5cdFx0XHRcdFx0XHRcdHRlbXBsYXRlOiBpdGVtXG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdHJldHVybiBzZWxlY3Q7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdC8vIENyZWF0ZSBhbiBJbnB1dCBmb3IgdGV4dCBjaGFuZ2VzXG5cdFx0XHRcdFx0XHRyZXR1cm4gbmV3IElucHV0KHtcblx0XHRcdFx0XHRcdFx0dmFsdWU6IFwie3ZhbHVlfVwiLFxuXHRcdFx0XHRcdFx0XHRjaGFuZ2U6IGZ1bmN0aW9uIChldmVudCk6IHZvaWQge1xuXHRcdFx0XHRcdFx0XHRcdHByb3BlcnR5VmFsdWVzWyh0aGlzIGFzIElucHV0KS5kYXRhKFwiaWRcIikgYXMga2V5b2YgUHJvcGVydHlWYWx1ZV0gPSBldmVudC5nZXRQYXJhbWV0ZXIoXCJ2YWx1ZVwiKSBhcyBzdHJpbmcgJlxuXHRcdFx0XHRcdFx0XHRcdFx0Ym9vbGVhbjtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fSkuZGF0YShcImlkXCIsIGlkKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdGNhc2UgXCJzdHJpbmdbXVwiOlxuXHRcdFx0XHRcdC8vIENyZWF0ZSBhbiBtdWx0aSBpbnB1dCBmaWVsZCBmb3IgdGhlIG5hdmlnYXRpb24gcHJvcGVydGllc1xuXHRcdFx0XHRcdGNvbnN0IG9NdWx0aUlucHV0ID0gbmV3IE11bHRpSW5wdXQoe1xuXHRcdFx0XHRcdFx0d2lkdGg6IFwiNzAlXCIsXG5cdFx0XHRcdFx0XHRzaG93VmFsdWVIZWxwOiBmYWxzZSxcblx0XHRcdFx0XHRcdHNob3dDbGVhckljb246IHRydWUsXG5cdFx0XHRcdFx0XHR0b2tlbnM6IChwcm9wZXJ0eVZhbHVlcz8ubmF2aWdhdGlvblByb3BlcnRpZXMgYXMgc3RyaW5nW10pLm1hcCgobmF2aWdhdGlvblByb3BlcnR5KSA9PiB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiBuZXcgVG9rZW4oeyB0ZXh0OiBuYXZpZ2F0aW9uUHJvcGVydHksIGtleTogbmF2aWdhdGlvblByb3BlcnR5IH0pO1xuXHRcdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0XHR0b2tlblVwZGF0ZTogZnVuY3Rpb24gKGV2ZW50OiBNdWx0aUlucHV0JFRva2VuVXBkYXRlRXZlbnQpOiB2b2lkIHtcblx0XHRcdFx0XHRcdFx0Y29uc3QgYXJyYXkgPSBwcm9wZXJ0eVZhbHVlc1sodGhpcyBhcyBNdWx0aUlucHV0KS5kYXRhKFwiaWRcIildIGFzIHN0cmluZ1tdO1xuXHRcdFx0XHRcdFx0XHRpZiAoKGV2ZW50LmdldFBhcmFtZXRlcihcImFkZGVkVG9rZW5zXCIpIGFzIFRva2VuW10pPy5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdFx0XHRcdFx0YXJyYXkucHVzaCgoZXZlbnQ/LmdldFBhcmFtZXRlcihcImFkZGVkVG9rZW5zXCIpIGFzIFRva2VuW10pWzBdPy5nZXRQcm9wZXJ0eShcImtleVwiKSk7XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoKGV2ZW50LmdldFBhcmFtZXRlcihcInJlbW92ZWRUb2tlbnNcIikgYXMgVG9rZW5bXSk/Lmxlbmd0aCA+IDApIHtcblx0XHRcdFx0XHRcdFx0XHRhcnJheS5zcGxpY2UoYXJyYXkuaW5kZXhPZigoZXZlbnQ/LmdldFBhcmFtZXRlcihcInJlbW92ZWRUb2tlbnNcIikgYXMgVG9rZW5bXSlbMF0/LmdldFByb3BlcnR5KFwia2V5XCIpKSwgMSk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9KS5kYXRhKFwiaWRcIiwgaWQpO1xuXHRcdFx0XHRcdG9NdWx0aUlucHV0LmFkZFZhbGlkYXRvcihmdW5jdGlvbiAoYXJnczogeyB0ZXh0OiBzdHJpbmcgfSkge1xuXHRcdFx0XHRcdFx0Y29uc3QgdGV4dCA9IGFyZ3MudGV4dDtcblx0XHRcdFx0XHRcdHJldHVybiBuZXcgVG9rZW4oe1xuXHRcdFx0XHRcdFx0XHRrZXk6IHRleHQsXG5cdFx0XHRcdFx0XHRcdHRleHQ6IHRleHRcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdHJldHVybiBvTXVsdGlJbnB1dDtcblx0XHRcdFx0Y2FzZSBcIm51bWJlclwiOlxuXHRcdFx0XHRcdC8vIENyZWF0ZSBhbiBJbnB1dCBmb3IgbnVtYmVyIGNoYW5nZXNcblx0XHRcdFx0XHRyZXR1cm4gbmV3IElucHV0KHtcblx0XHRcdFx0XHRcdHZhbHVlOiBcInt2YWx1ZX1cIixcblx0XHRcdFx0XHRcdHR5cGU6IFwiTnVtYmVyXCIsXG5cdFx0XHRcdFx0XHRjaGFuZ2U6IGZ1bmN0aW9uIChldmVudCk6IHZvaWQge1xuXHRcdFx0XHRcdFx0XHRwcm9wZXJ0eVZhbHVlc1sodGhpcyBhcyBJbnB1dCkuZGF0YShcImlkXCIpIGFzIGtleW9mIFByb3BlcnR5VmFsdWVdID0gZXZlbnQuZ2V0UGFyYW1ldGVyKFwidmFsdWVcIikgYXMgc3RyaW5nICZcblx0XHRcdFx0XHRcdFx0XHRib29sZWFuO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0pLmRhdGEoXCJpZFwiLCBpZCk7XG5cdFx0XHRcdGNhc2UgXCJib29sZWFuXCI6XG5cdFx0XHRcdFx0Ly8gQ3JlYXRlIGEgY2hlY2tib3ggZm9yIHRydWUvZmFsc2UgdmFsdWVzXG5cdFx0XHRcdFx0cmV0dXJuIG5ldyBDaGVja0JveCh7XG5cdFx0XHRcdFx0XHRzZWxlY3RlZDogXCJ7dmFsdWV9XCIsXG5cdFx0XHRcdFx0XHRzZWxlY3Q6IGZ1bmN0aW9uIChldmVudCk6IHZvaWQge1xuXHRcdFx0XHRcdFx0XHRwcm9wZXJ0eVZhbHVlc1sodGhpcyBhcyBDaGVja0JveCkuZGF0YShcImlkXCIpIGFzIGtleW9mIFByb3BlcnR5VmFsdWVdID0gZXZlbnQuZ2V0UGFyYW1ldGVyKFxuXHRcdFx0XHRcdFx0XHRcdFwic2VsZWN0ZWRcIlxuXHRcdFx0XHRcdFx0XHQpIGFzIHN0cmluZyAmIGJvb2xlYW47XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSkuZGF0YShcImlkXCIsIGlkKTtcblx0XHRcdFx0Y2FzZSBcImJvb2xlYW5PclN0cmluZ1wiOlxuXHRcdFx0XHRcdC8vIENyZWF0ZSBhIHNlbGVjdCBsaXN0IGZvciBib29sZWFuIGFuZCBzdHJpbmcgb3B0aW9ucyB0byBzZWxlY3Rcblx0XHRcdFx0XHQvLyBUaGlzIHR5cGUgaXMgYXQgdGhlIG1vbWVudCBvbmx5IHVzZWQgZm9yIHBlcnNvbmFsaXphdGlvbiBzZXR0aW5ncyB3aGljaCBjYW4gYmUgdW5kZWZpbmVkLCB0cnVlLCBmYWxzZSBvciBhbiBvYmplY3Rcblx0XHRcdFx0XHQvLyBUaGUgc2VsZWN0IGxpc3QgaXMgdXNlZCB0byBzZWxlY3QgYmV0d2VlbiB0cnVlLCBmYWxzZSBhbmQgXCJPd24gU2V0dGluZ3NcIlxuXHRcdFx0XHRcdC8vIElmIFwiT3duIFNldHRpbmdzXCIgaXMgc2VsZWN0ZWQsIHRoZSBwZXJzb25hbGl6YXRpb24gb2JqZWN0IGlzIHdyaXR0ZW4sIG90aGVyd2lzZSB0aGUgYm9vbGVhbiBpcyB3cml0dGVuICh1bmRlZmluZWQgY2Fubm90IGJlIHdyaXR0ZW4gaW4gYSBtYW5pZmVzdCBjaGFuZ2UpXG5cdFx0XHRcdFx0Y29uc3QgaXRlbSA9IG5ldyBJdGVtKHtcblx0XHRcdFx0XHRcdHRleHQ6IFwie25hbWV9XCIsXG5cdFx0XHRcdFx0XHRrZXk6IFwie2lkfVwiXG5cdFx0XHRcdFx0fSk7XG5cblx0XHRcdFx0XHRjb25zdCBzZWxlY3QgPSBuZXcgU2VsZWN0KHtcblx0XHRcdFx0XHRcdHNlbGVjdGVkS2V5OiBcInt2YWx1ZX1cIixcblx0XHRcdFx0XHRcdGNoYW5nZTogZnVuY3Rpb24gKGV2ZW50KTogdm9pZCB7XG5cdFx0XHRcdFx0XHRcdGxldCB2YWx1ZSA9IChldmVudC5nZXRQYXJhbWV0ZXIoXCJzZWxlY3RlZEl0ZW1cIikgYXMgSXRlbSkuZ2V0S2V5KCk7XG5cdFx0XHRcdFx0XHRcdC8vIENvbnZlcnQgc3RyaW5nIHRvIGJvb2xlYW4gaWYgbmVjZXNzYXJ5XG5cdFx0XHRcdFx0XHRcdGlmICh2YWx1ZS50b0xvd2VyQ2FzZSgpID09PSBcImZhbHNlXCIgfHwgdmFsdWUudG9Mb3dlckNhc2UoKSA9PT0gXCJ0cnVlXCIpIHtcblx0XHRcdFx0XHRcdFx0XHR2YWx1ZSA9IEpTT04ucGFyc2UodmFsdWUudG9Mb3dlckNhc2UoKSk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0cHJvcGVydHlWYWx1ZXNbKHRoaXMgYXMgU2VsZWN0KS5kYXRhKFwiaWRcIikgYXMga2V5b2YgUHJvcGVydHlWYWx1ZV0gPSB2YWx1ZTtcblx0XHRcdFx0XHRcdFx0Ly8gU3BlY2lhbCBoYW5kbGluZyBmb3IgcGVyc29uYWxpemF0aW9uIHNldHRpbmdcblx0XHRcdFx0XHRcdFx0aWYgKCh0aGlzIGFzIFNlbGVjdCkuZGF0YShcImlkXCIpID09PSBcInBlcnNvbmFsaXphdGlvblwiKSB7XG5cdFx0XHRcdFx0XHRcdFx0dXBkYXRlUGVyc29uYWxpemF0aW9uRGVwZW5kZW50Q29udHJvbHModmFsdWUpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSkuZGF0YShcImlkXCIsIGlkKTtcblxuXHRcdFx0XHRcdHNlbGVjdC5iaW5kSXRlbXMoe1xuXHRcdFx0XHRcdFx0cGF0aDogXCJlbnVtXCIsXG5cdFx0XHRcdFx0XHR0ZW1wbGF0ZTogaXRlbVxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdHJldHVybiBzZWxlY3Q7XG5cdFx0XHRcdGNhc2UgXCJqc29uXCI6XG5cdFx0XHRcdFx0Ly8gQ3JlYXRlIGFuIGlucHV0IGZvciBqc29uIG9iamVjdCBkZXNjcmlwdGlvbnNcblx0XHRcdFx0XHQvLyBBIHRleHQgYXJlYSB3b3VsZCBoYXZlIGJlZW4gYmV0dGVyIGJ1dCB0aGlzIGRvZXMgbm90IHdvcmsgd2l0aCB0aGUgSW5wdXRMaXN0SXRlbVxuXHRcdFx0XHRcdC8vIHdlIHdvdWxkIGhhdmUgbmVlZGVkIGEgQ3VzdG9tTGlzdEl0ZW0gaW5zdGVhZFxuXHRcdFx0XHRcdC8vIHdoaWNoIHdvdWxkIGhhdmUgYmVlbiB0b28gbXVjaCBlZmZvcnQgYXMgd2Ugd291bGQgaGF2ZSBuZWVkZWQgdG8gY2hhbmdlIHRoZSB3aG9sZSBzdHJ1Y3R1cmVcblx0XHRcdFx0XHRyZXR1cm4gbmV3IElucHV0KHtcblx0XHRcdFx0XHRcdHZhbHVlOiBcInt2YWx1ZX1cIixcblx0XHRcdFx0XHRcdGNoYW5nZTogZnVuY3Rpb24gKGV2ZW50KTogdm9pZCB7XG5cdFx0XHRcdFx0XHRcdHByb3BlcnR5VmFsdWVzWyh0aGlzIGFzIElucHV0KS5kYXRhKFwiaWRcIikgYXMga2V5b2YgUHJvcGVydHlWYWx1ZV0gPSBKU09OLnBhcnNlKFxuXHRcdFx0XHRcdFx0XHRcdGV2ZW50LmdldFBhcmFtZXRlcihcInZhbHVlXCIpPy50b1N0cmluZygpIGFzIHN0cmluZ1xuXHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0pLmRhdGEoXCJpZFwiLCBpZCk7XG5cdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0fVxuXHR9KTtcblxuXHRsaXN0LmJpbmRJdGVtcyh7XG5cdFx0cGF0aDogXCIvXCIsXG5cdFx0dGVtcGxhdGU6IGxpc3RJdGVtXG5cdH0pO1xuXG5cdHJldHVybiBsaXN0O1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gb3BlbkFkYXB0aW9uRGlhbG9nKFxuXHRjb25maWdDb250ZXh0OiBDb250ZXh0LFxuXHRwcm9wZXJ0eVZhbHVlczogUHJvcGVydHlWYWx1ZSxcblx0dGl0bGU6IHN0cmluZyxcblx0cmVzb3VyY2VNb2RlbDogUmVzb3VyY2VNb2RlbCxcblx0Y29uZmlnUGF0aCA9IFwicnRhL2NvbmZpZ1NldHRpbmdzXCIsXG5cdGluZm9UZXh0ID0gXCJ7c2FwLmZlLmkxOG4+UlRBX0NPTkZJR1VSQVRJT05fSU5GT19NRVNTQUdFfVwiLFxuXHRzaXplPzogeyB3aWR0aDogc3RyaW5nOyBoZWlnaHQ6IHN0cmluZyB9XG4pOiBQcm9taXNlPFByb3BlcnR5VmFsdWU+IHtcblx0Y29uc3QgbGlzdCA9IGNyZWF0ZUFkYXB0aW9uRGlhbG9nQ29udGVudChjb25maWdDb250ZXh0LCBwcm9wZXJ0eVZhbHVlcywgcmVzb3VyY2VNb2RlbCwgY29uZmlnUGF0aCk7XG5cdGNvbnN0IGNvbnRlbnQ6IChMaXN0IHwgTWVzc2FnZVN0cmlwKVtdID0gW107XG5cdGNvbnN0IGluZm9ybWF0aW9uTWVzc2FnZSA9IG5ldyBNZXNzYWdlU3RyaXAoe1xuXHRcdHNob3dJY29uOiB0cnVlLFxuXHRcdHR5cGU6IFwiSW5mb3JtYXRpb25cIixcblx0XHR0ZXh0OiBpbmZvVGV4dFxuXHR9KTtcblx0aW5mb3JtYXRpb25NZXNzYWdlLmFkZFN0eWxlQ2xhc3MoXCJzYXBVaVNtYWxsTWFyZ2luQm90dG9tXCIpO1xuXHRjb250ZW50LnB1c2goaW5mb3JtYXRpb25NZXNzYWdlKTtcblx0Y29udGVudC5wdXNoKGxpc3QpO1xuXHRjb25zdCBsaXN0SW5kZXggPSBjb250ZW50LmluZGV4T2YobGlzdCk7XG5cdHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG5cdFx0Y29uc3QgZGlhbG9nID0gbmV3IERpYWxvZyh7XG5cdFx0XHR0aXRsZTogdGl0bGUsXG5cdFx0XHRjb250ZW50V2lkdGg6IHNpemUgPyBzaXplLndpZHRoIDogXCI1NTBweFwiLFxuXHRcdFx0Y29udGVudEhlaWdodDogc2l6ZSA/IHNpemUuaGVpZ2h0IDogXCIzMDBweFwiLFxuXHRcdFx0Y29udGVudDogY29udGVudCxcblx0XHRcdGJ1dHRvbnM6IFtcblx0XHRcdFx0bmV3IEJ1dHRvbih7XG5cdFx0XHRcdFx0dGV4dDogXCJ7c2FwLmZlLmkxOG4+UlRBX0NPTkZJR1VSQVRJT05fQVBQTFl9XCIsXG5cdFx0XHRcdFx0dHlwZTogXCJFbXBoYXNpemVkXCIsXG5cdFx0XHRcdFx0cHJlc3M6IGZ1bmN0aW9uICgpOiB2b2lkIHtcblx0XHRcdFx0XHRcdC8vIHBlcnNpc3QgY2hhbmdlcyBkb25lXG5cdFx0XHRcdFx0XHR1cGRhdGVDb25maWdNb2RlbChjb25maWdDb250ZXh0LCBkaWFsb2cuZ2V0Q29udGVudCgpW2xpc3RJbmRleF0uZ2V0TW9kZWwoKSBhcyBKU09OTW9kZWwsIGNvbmZpZ1BhdGgpO1xuXHRcdFx0XHRcdFx0ZGlhbG9nLmNsb3NlKCk7XG5cdFx0XHRcdFx0XHRyZXNvbHZlKHByb3BlcnR5VmFsdWVzKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pLFxuXHRcdFx0XHRuZXcgQnV0dG9uKHtcblx0XHRcdFx0XHR0ZXh0OiBcIntzYXAuZmUuaTE4bj5SVEFfQ09ORklHVVJBVElPTl9DQU5DRUx9XCIsXG5cdFx0XHRcdFx0cHJlc3M6IGZ1bmN0aW9uICgpOiB2b2lkIHtcblx0XHRcdFx0XHRcdGRpYWxvZy5jbG9zZSgpO1xuXHRcdFx0XHRcdFx0cmVqZWN0KCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KVxuXHRcdFx0XVxuXHRcdH0pO1xuXHRcdGRpYWxvZy5zZXRNb2RlbChyZXNvdXJjZU1vZGVsLCBcInNhcC5mZS5pMThuXCIpO1xuXHRcdGRpYWxvZy5hZGRTdHlsZUNsYXNzKFwic2FwVWlDb250ZW50UGFkZGluZ1wiKTtcblx0XHRkaWFsb2cuYWRkU3R5bGVDbGFzcyhcInNhcFVpUlRBQm9yZGVyXCIpO1xuXHRcdGRpYWxvZy5vcGVuKCk7XG5cdFx0cmV0dXJuO1xuXHR9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb2Nlc3NDaGFuZ2VzKFxuXHRwcm9wZXJ0eUNoYW5nZXM6IHByb3BLZXlBbmRWYWx1ZSxcblx0YXBwQ29tcG9uZW50OiBBcHBDb21wb25lbnQsXG5cdHBhZ2U6IHN0cmluZyxcblx0cHJvcGVydHlQYXRoOiBzdHJpbmdcbik6IGFkYXB0aW9uQ2hhbmdlW10ge1xuXHRsZXQgc2luZ2xlQ2hhbmdlOiBwcm9wS2V5QW5kVmFsdWUgPSB7fTtcblx0Y29uc3QgY2hhbmdlcyA9IFtdO1xuXHRmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhwcm9wZXJ0eUNoYW5nZXMpKSB7XG5cdFx0c2luZ2xlQ2hhbmdlID0ge307XG5cdFx0c2luZ2xlQ2hhbmdlW2tleV0gPSB2YWx1ZTtcblx0XHRjaGFuZ2VzLnB1c2goZ2V0Q2hhbmdlKHNpbmdsZUNoYW5nZSwgYXBwQ29tcG9uZW50LCBwYWdlLCBwcm9wZXJ0eVBhdGgpKTtcblx0fVxuXHRyZXR1cm4gY2hhbmdlcztcbn1cblxuLyoqXG4gKiBGb3JtYXQgZWFjaCBjaGFuZ2UgbWFkZSB0byBnbG9iYWwgc2V0dGluZ3MgXCJzYXAuZmVcIlxuICogVGhlIHNldCBvZiBjaGFuZ2VzIGFyZSBwdXQgaW50byBpbmRpdmlkdWFsIGNoYW5nZXMgdG8gZW5zdXJlXG4gKiB0aGF0IGVhcmxpZXIgY2hhbmdlcyBhcmUgbm90IGxvc3Qgd2hlbiB0aGVzZSBhcmUgbG9hZGVkIGF0IHJ1bnRpbWUuXG4gKiBAcGFyYW0gcHJvcGVydHlDaGFuZ2VzXG4gKiBAcGFyYW0gYXBwQ29tcG9uZW50XG4gKiBAcGFyYW0gcGFnZVxuICogQHBhcmFtIHByb3BlcnR5UGF0aFxuICogQHJldHVybnMgVGhlIGNoYW5nZSBzdHJ1Y3R1cmUgdXNlZCBieSBmbGV4aWJpbGl0eSB0b29sc1xuICovXG5leHBvcnQgZnVuY3Rpb24gcHJvY2Vzc0dsb2JhbENoYW5nZXMoXG5cdHByb3BlcnR5Q2hhbmdlczogcHJvcEtleUFuZFZhbHVlLFxuXHRhcHBDb21wb25lbnQ6IEFwcENvbXBvbmVudCxcblx0cGFnZTogc3RyaW5nLFxuXHRwcm9wZXJ0eVBhdGg6IHN0cmluZ1xuKTogYWRhcHRpb25DaGFuZ2VbXSB7XG5cdGxldCBzaW5nbGVDaGFuZ2U6IHByb3BLZXlBbmRWYWx1ZSA9IHt9O1xuXHRjb25zdCBjaGFuZ2VzID0gW107XG5cdGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHByb3BlcnR5Q2hhbmdlcykpIHtcblx0XHRzaW5nbGVDaGFuZ2UgPSB7fTtcblx0XHRzaW5nbGVDaGFuZ2Vba2V5XSA9IHZhbHVlO1xuXHRcdGNoYW5nZXMucHVzaChnZXRDaGFuZ2Uoc2luZ2xlQ2hhbmdlLCBhcHBDb21wb25lbnQsIHBhZ2UsIHByb3BlcnR5UGF0aCkpO1xuXHR9XG5cdHJldHVybiBjaGFuZ2VzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q2hhbmdlKFxuXHRwcm9wZXJ0eUNoYW5nZXM6IHByb3BLZXlBbmRWYWx1ZSxcblx0YXBwQ29tcG9uZW50OiBBcHBDb21wb25lbnQsXG5cdHBhZ2U6IHN0cmluZyxcblx0cHJvcGVydHlQYXRoOiBzdHJpbmdcbik6IGFkYXB0aW9uQ2hhbmdlIHtcblx0Ly8gQ2hhbmdlcyBmb3IgY29udHJvbHMgaGF2ZSBhIHBhdGggc3RhcnRpbmcgd2l0aCBjb250cm9sQ29uZmlndXJhdGlvbiwgZm9sbG93ZWQgYnkgYW4gYW5ub3RhdGlvbiBwYXRoXG5cdC8vIEZvciB0aGUgbGlzdCByZXBvcnQgY2hhbmdlcywgdGhlcmUgaXMgbm8gcGF0aCBiZWNhdXNlIHRoZSBwcm9wZXJ0aWVzIGFyZSBkaXJlY3RseSB1bmRlciBTZXR0aW5nc1xuXHQvLyBmb3IgdGhlIFwic2FwLmZlLnRlbXBsYXRlcy5MaXN0UmVwb3J0XCIgaW4gdGhlIG1hbmlmZXN0LlxuXHRpZiAocHJvcGVydHlQYXRoID09PSBcIlwiKSB7XG5cdFx0cHJvcGVydHlQYXRoID0gT2JqZWN0LmtleXMocHJvcGVydHlDaGFuZ2VzKVswXTtcblx0fSBlbHNlIHtcblx0XHRwcm9wZXJ0eVBhdGggPSBwcm9wZXJ0eVBhdGggKyBcIi9cIiArIE9iamVjdC5rZXlzKHByb3BlcnR5Q2hhbmdlcylbMF07XG5cdH1cblx0Y29uc3QgdmFsdWUgPSBwcm9wZXJ0eUNoYW5nZXNbT2JqZWN0LmtleXMocHJvcGVydHlDaGFuZ2VzKVswXV07XG5cblx0cmV0dXJuIGdldENoYW5nZVN0cnVjdHVyZShhcHBDb21wb25lbnQsIHBhZ2UsIHByb3BlcnR5UGF0aCwgdmFsdWUpO1xufVxuXG4vKipcbiAqIEdldCB0aGUgcGFyYW1ldGVycyBvdGhlciB0aGFuIHRoZSBjb250cm9sIHNldHRpbmdzIHRoYXQgYXJlIG5lZWRlZFxuICogZm9yIHRoZSBjaGFuZ2Ugc3RydWN0dXJlLlxuICogQHBhcmFtIHByb3BlcnR5Q2hhbmdlc1xuICogQHBhcmFtIHByb3BlcnR5UGF0aFxuICogQHBhcmFtIGNvbnRyb2xcbiAqIEByZXR1cm5zIFRoZSBjaGFuZ2VzIGluIGEgc3RydWN0dXJlIHVzZWQgYnkgZmxleGliaWxpdHkgdG9vbHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNlcGFyYXRlQ2hhbmdlcyhwcm9wZXJ0eUNoYW5nZXM6IFByb3BlcnR5VmFsdWUsIHByb3BlcnR5UGF0aDogc3RyaW5nLCBjb250cm9sOiBDb250cm9sKTogYWRhcHRpb25DaGFuZ2VbXSB7XG5cdGNvbnN0IGFwcENvbXBvbmVudCA9IENvbW1vblV0aWxzLmdldEFwcENvbXBvbmVudChjb250cm9sKTtcblx0Y29uc3QgcGFnZSA9IGdldFBhZ2UoY29udHJvbC5nZXRQYXJlbnQoKSBhcyBDb250cm9sKTtcblx0cmV0dXJuIHByb2Nlc3NDaGFuZ2VzKHByb3BlcnR5Q2hhbmdlcywgYXBwQ29tcG9uZW50LCBwYWdlLCBwcm9wZXJ0eVBhdGgpO1xufVxuXG4vKipcbiAqIEdldCB0aGUgcGFyYW1ldGVycyBvdGhlciB0aGFuIHRoZSBnbG9iYWwgc2V0dGluZ3MgdGhhdCBhcmUgbmVlZGVkXG4gKiBmb3IgdGhlIGNoYW5nZSBzdHJ1Y3R1cmUuXG4gKiBAcGFyYW0gcHJvcGVydHlDaGFuZ2VzXG4gKiBAcGFyYW0gcHJvcGVydHlQYXRoXG4gKiBAcGFyYW0gY29udHJvbFxuICogQHJldHVybnMgVGhlIGNoYW5nZXMgaW4gYSBzdHJ1Y3R1cmUgdXNlZCBieSBmbGV4aWJpbGl0eSB0b29sc1xuICovXG5mdW5jdGlvbiBzZXBhcmF0ZUdsb2JhbENoYW5nZXMocHJvcGVydHlDaGFuZ2VzOiBQcm9wZXJ0eVZhbHVlLCBwcm9wZXJ0eVBhdGg6IHN0cmluZywgY29udHJvbDogQ29udHJvbCk6IGFkYXB0aW9uQ2hhbmdlW10ge1xuXHRjb25zdCBhcHBDb21wb25lbnQgPSBDb21tb25VdGlscy5nZXRBcHBDb21wb25lbnQoY29udHJvbCk7XG5cdGNvbnN0IHBhZ2UgPSBcInNhcC5mZVwiO1xuXHRyZXR1cm4gcHJvY2Vzc0dsb2JhbENoYW5nZXMocHJvcGVydHlDaGFuZ2VzLCBhcHBDb21wb25lbnQsIHBhZ2UsIHByb3BlcnR5UGF0aCk7XG59XG5cbmZ1bmN0aW9uIGdldFBhZ2UoY29udHJvbDogQ29udHJvbCk6IHN0cmluZyB7XG5cdGNvbnN0IHZpZXdJZCA9IENvbW1vblV0aWxzLmdldFRhcmdldFZpZXcoY29udHJvbCkuZ2V0SWQoKS5zcGxpdChcIjo6XCIpO1xuXHRyZXR1cm4gdmlld0lkW3ZpZXdJZC5sZW5ndGggLSAxXTtcbn1cblxuZXhwb3J0IGNvbnN0IGV4dHJhY3RDaGFuZ2VzID0gZnVuY3Rpb24gKFxuXHRkZXNpZ250aW1lU2V0dGluZ3M6IERlc2lnbnRpbWVTZXR0aW5nW10sXG5cdHVuY2hhbmdlZERhdGE6IFByb3BlcnR5VmFsdWUsXG5cdHByb3BlcnR5VmFsdWVzRW50ZXJlZDogUHJvcGVydHlWYWx1ZSxcblx0cHJvcGVydHlQYXRoOiBzdHJpbmcsXG5cdGNvbnRyb2w6IENvbnRyb2wsXG5cdGdsb2JhbFNldHRpbmdzPzogRGVzaWdudGltZVNldHRpbmdbXVxuKTogYWRhcHRpb25DaGFuZ2VbXSB7XG5cdGNvbnN0IHByb3BlcnR5Q2hhbmdlcyA9IGdldENoYW5nZWRQcm9wZXJ0eVZhbHVlcyhkZXNpZ250aW1lU2V0dGluZ3MsIHVuY2hhbmdlZERhdGEsIHByb3BlcnR5VmFsdWVzRW50ZXJlZCk7XG5cdC8vIFB1dCBlYWNoIHByb3BlcnR5IGludG8gaXRzIG93biBjaGFuZ2UuIFRoaXMgZW5zdXJlcyB0aGF0IHdlIGRvbid0IGxvc2UgcHJldmlvdXMgY2hhbmdlcy5cblx0bGV0IGNoYW5nZXMgPSBzZXBhcmF0ZUNoYW5nZXMocHJvcGVydHlDaGFuZ2VzLCBwcm9wZXJ0eVBhdGgsIGNvbnRyb2wpO1xuXHRpZiAoZ2xvYmFsU2V0dGluZ3MpIHtcblx0XHRjb25zdCBnbG9iYWxDaGFuZ2VzID0gZ2V0Q2hhbmdlZFByb3BlcnR5VmFsdWVzKGdsb2JhbFNldHRpbmdzLCB1bmNoYW5nZWREYXRhLCBwcm9wZXJ0eVZhbHVlc0VudGVyZWQpO1xuXHRcdGNvbnN0IGdsb2JhbCA9IHNlcGFyYXRlR2xvYmFsQ2hhbmdlcyhnbG9iYWxDaGFuZ2VzLCBwcm9wZXJ0eVBhdGgsIGNvbnRyb2wpO1xuXHRcdGNoYW5nZXMgPSBjaGFuZ2VzLmNvbmNhdChnbG9iYWwpO1xuXHR9XG5cdGlmIChjaGFuZ2VzLmxlbmd0aCA+IDApIHtcblx0XHRyZXR1cm4gY2hhbmdlcztcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gW107XG5cdH1cbn07XG5cbmV4cG9ydCBjb25zdCBub0NoYW5nZXMgPSBmdW5jdGlvbiAoKTogW10ge1xuXHRyZXR1cm4gW107XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gaXNGaW9yaVRvb2xzUnRhTW9kZShhcHBDb21wb25lbnQ6IEFwcENvbXBvbmVudCk6IGJvb2xlYW4ge1xuXHQvLyBDaGVjayBpZiBydGEgbW9kZSBoYXMgYmVlbiBzcGVjaWZpZWQgb24gdXJsIChmb3IgbG9jYWwgdGVzdGluZylcblx0bGV0IHVybFBhcmFtczogUmVjb3JkPHN0cmluZywgc3RyaW5nW10+ID0ge307XG5cdGNvbnN0IHNoZWxsU2VydmljZSA9IGFwcENvbXBvbmVudC5nZXRTaGVsbFNlcnZpY2VzKCk7XG5cdHVybFBhcmFtcyA9IHNoZWxsU2VydmljZT8ucGFyc2VQYXJhbWV0ZXJzPy4od2luZG93LmxvY2F0aW9uLnNlYXJjaCk7XG5cdHJldHVybiAhIXVybFBhcmFtcyAmJiB1cmxQYXJhbXNbXCJmaW9yaS10b29scy1ydGEtbW9kZVwiXT8uWzBdID09PSBcImZvckFkYXB0YXRpb25cIjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzUlRBTW9kZShhcHBDb21wb25lbnQ6IEFwcENvbXBvbmVudCk6IGJvb2xlYW4ge1xuXHQvLyBDaGVjayBpZiBydGEgbW9kZSBoYXMgYmVlbiBzcGVjaWZpZWQgb24gdXJsIChmb3IgbG9jYWwgdGVzdGluZylcblx0bGV0IHVybFBhcmFtczogUmVjb3JkPHN0cmluZywgc3RyaW5nW10+ID0ge307XG5cdGNvbnN0IHNoZWxsU2VydmljZSA9IGFwcENvbXBvbmVudC5nZXRTaGVsbFNlcnZpY2VzKCk7XG5cdHVybFBhcmFtcyA9IHNoZWxsU2VydmljZT8ucGFyc2VQYXJhbWV0ZXJzPy4od2luZG93LmxvY2F0aW9uLnNlYXJjaCk7XG5cdHJldHVybiAhIXVybFBhcmFtcyAmJiB1cmxQYXJhbXNbXCJzYXAtZmUtcnRhLW1vZGVcIl0/LlswXSA9PT0gXCJ0cnVlXCI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRTZXR0aW5nc0lmS2V5VXNlcihhcHBDb21wb25lbnQ6IEFwcENvbXBvbmVudCwgaXRlbXM6IFNldHRpbmdzRGF0YVtdKTogU2V0dGluZ3NEYXRhW10ge1xuXHRpZiAoIWlzRmlvcmlUb29sc1J0YU1vZGUoYXBwQ29tcG9uZW50KSkge1xuXHRcdC8vIG5vdCB0b29scyA9PiBrZXkgdXNlclxuXHRcdHJldHVybiBpdGVtcy5maWx0ZXIoKHNldHRpbmcpID0+IHtcblx0XHRcdHJldHVybiBzZXR0aW5nLmtleVVzZXI7XG5cdFx0fSk7XG5cdH1cblx0cmV0dXJuIGl0ZW1zO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNDb25maWdNb2RlbFByZXBhcmVkKGNvbmZpZ0NvbnRleHQ6IENvbnRleHQsIHBhdGggPSBcInJ0YS9jb25maWdTZXR0aW5nc1wiKTogYm9vbGVhbiB7XG5cdGlmIChjb25maWdDb250ZXh0LmdldFByb3BlcnR5KHBhdGgpKSB7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblx0cmV0dXJuIGZhbHNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJlcGFyZUNvbmZpZ01vZGVsKGl0ZW1zOiBTZXR0aW5nc0RhdGFbXSwgY29uZmlnQ29udGV4dDogQ29udGV4dCwgcGF0aCA9IFwicnRhL2NvbmZpZ1NldHRpbmdzXCIpOiB2b2lkIHtcblx0aWYgKCFjb25maWdDb250ZXh0LmdldFByb3BlcnR5KHBhdGgpKSB7XG5cdFx0Y29uZmlnQ29udGV4dC5zZXRQcm9wZXJ0eShwYXRoLCBpdGVtcyk7XG5cdH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFBlcnNvbmFsaXphdGlvblNldHRpbmcoY29uZmlnQ29udGV4dDogQ29udGV4dCwgcGF0aCA9IFwicnRhL2NvbmZpZ1NldHRpbmdzXCIpOiBib29sZWFuIHwgc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0Y29uc3Qgc2V0dGluZ3MgPSBjb25maWdDb250ZXh0LmdldE9iamVjdChwYXRoKTtcblx0Y29uc3QgcGVyc29uYWxpemF0aW9uU2V0dGluZyA9IHNldHRpbmdzLmZpbmQoKHNldHRpbmc6IFNldHRpbmdzRGF0YSkgPT4ge1xuXHRcdHJldHVybiBzZXR0aW5nPy5jb250cm9sWzBdPy5pZCA9PT0gXCJwZXJzb25hbGl6YXRpb25cIjtcblx0fSk7XG5cdGlmIChwZXJzb25hbGl6YXRpb25TZXR0aW5nKSB7XG5cdFx0cmV0dXJuIHBlcnNvbmFsaXphdGlvblNldHRpbmcuY29udHJvbFswXS52YWx1ZTtcblx0fVxuXHRyZXR1cm4gdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdXBkYXRlQ29uZmlnTW9kZWwoY29uZmlnQ29udGV4dDogQ29udGV4dCwgc2V0dGluZ3NNb2RlbDogSlNPTk1vZGVsLCBwYXRoID0gXCJydGEvY29uZmlnU2V0dGluZ3NcIik6IHZvaWQge1xuXHRjb25zdCB1cGRhdGVkU2V0dGluZ3MgPSBkZWVwQ2xvbmUoc2V0dGluZ3NNb2RlbC5nZXREYXRhKCkpO1xuXHRjb25maWdDb250ZXh0LnNldFByb3BlcnR5KHBhdGgsIHVwZGF0ZWRTZXR0aW5ncyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRQcm9wZXJ0eU5hbWVzQW5kRGVzY3JpcHRpb25zKHByb3BzOiBEZXNpZ250aW1lU2V0dGluZ1tdLCByZXNvdXJjZU1vZGVsOiBSZXNvdXJjZU1vZGVsKTogRGVzaWdudGltZVNldHRpbmdbXSB7XG5cdHByb3BzLmZvckVhY2goZnVuY3Rpb24gKHByb3ApIHtcblx0XHRwcm9wLm5hbWUgPSByZXNvdXJjZU1vZGVsLmdldFRleHQocHJvcC5uYW1lKTtcblx0XHRwcm9wLmRlc2NyaXB0aW9uID0gcmVzb3VyY2VNb2RlbC5nZXRUZXh0KHByb3AuZGVzY3JpcHRpb24pO1xuXHRcdGlmIChwcm9wLmVudW1zKSB7XG5cdFx0XHRwcm9wLmVudW1zLmZvckVhY2goZnVuY3Rpb24gKGVudW1tKSB7XG5cdFx0XHRcdGVudW1tLm5hbWUgPSByZXNvdXJjZU1vZGVsLmdldFRleHQoZW51bW0ubmFtZSk7XG5cdFx0XHR9KTtcblx0XHR9XG5cdH0pO1xuXG5cdHJldHVybiBwcm9wcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzTWFuaWZlc3RDaGFuZ2VzRW5hYmxlZChjb250cm9sOiBDb250cm9sKTogYm9vbGVhbiB7XG5cdGxldCBvd25lciA9IENvbXBvbmVudC5nZXRPd25lckNvbXBvbmVudEZvcihjb250cm9sKSBhcyBUZW1wbGF0ZUNvbXBvbmVudDtcblx0aWYgKG93bmVyID09PSB1bmRlZmluZWQgJiYgY29udHJvbC5nZXRQYXJlbnQoKSkge1xuXHRcdC8vIEluIGNhc2Ugb2YgTWFzc0VkaXQsIGNvbnRyb2wgaXMgYSBzYXAubS5EaWFsb2cgZm9yIHdoaWNoIHRoZXJlIGlzIG5vdyBPd25lckNvbXBvbmVudCwgc28gd2UgbmVlZCB0byBjb25zaWRlciBpdHMgcGFyZW50IGNvbnRyb2xcblx0XHRvd25lciA9IENvbXBvbmVudC5nZXRPd25lckNvbXBvbmVudEZvcihjb250cm9sLmdldFBhcmVudCgpISkgYXMgVGVtcGxhdGVDb21wb25lbnQ7XG5cdH1cblx0Y29uc3Qgc2FwRmVNYW5pZmVzdCA9IG93bmVyPy5nZXRBcHBDb21wb25lbnQoKS5nZXRNYW5pZmVzdEVudHJ5KFwic2FwLmZlXCIpO1xuXHRyZXR1cm4gc2FwRmVNYW5pZmVzdD8uYXBwPy5kaXNhYmxlTWFuaWZlc3RDaGFuZ2VzICE9PSB0cnVlO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7OztFQUFBO0FBQ0E7QUFDQTtFQWtGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNPLFNBQVNBLHdCQUF3QkEsQ0FDdkNDLGtCQUF1QyxFQUN2Q0MsYUFBNEIsRUFDNUJDLGNBQTZCLEVBQ2I7SUFDaEIsTUFBTUMsZUFBOEIsR0FBRyxDQUFDLENBQUM7SUFFekNILGtCQUFrQixDQUFDSSxPQUFPLENBQUMsVUFBVUMsT0FBTyxFQUFFO01BQzdDLElBQ0UsT0FBT0osYUFBYSxDQUFDSSxPQUFPLENBQUNDLEVBQUUsQ0FBQyxLQUFLLFFBQVEsSUFBSUwsYUFBYSxDQUFDSSxPQUFPLENBQUNDLEVBQUUsQ0FBQyxLQUFLSixjQUFjLENBQUNHLE9BQU8sQ0FBQ0MsRUFBRSxDQUFDLElBQ3pHLE9BQU9MLGFBQWEsQ0FBQ0ksT0FBTyxDQUFDQyxFQUFFLENBQUMsS0FBSyxRQUFRLElBQzdDQyxJQUFJLENBQUNDLFNBQVMsQ0FBQ1AsYUFBYSxDQUFDSSxPQUFPLENBQUNDLEVBQUUsQ0FBQyxDQUFDLEtBQUtDLElBQUksQ0FBQ0MsU0FBUyxDQUFDTixjQUFjLENBQUNHLE9BQU8sQ0FBQ0MsRUFBRSxDQUFDLENBQUUsRUFDekY7UUFDRCxJQUFJRCxPQUFPLENBQUNJLFdBQVcsSUFBSVAsY0FBYyxDQUFDRyxPQUFPLENBQUNDLEVBQUUsQ0FBQyxLQUFLRCxPQUFPLENBQUNLLGNBQWMsRUFBRTtVQUNqRjtVQUNBLE1BQU1DLFlBQTJCLEdBQUcsQ0FBQyxDQUFDO1VBQ3RDLElBQUlOLE9BQU8sQ0FBQ0ksV0FBVyxJQUFJSixPQUFPLENBQUNJLFdBQVcsRUFBRUcsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUMzRFAsT0FBTyxDQUFDSSxXQUFXLENBQUNMLE9BQU8sQ0FBQyxVQUFVUyxnQkFBZ0IsRUFBRTtjQUN2REYsWUFBWSxDQUFDRSxnQkFBZ0IsQ0FBQ0MsSUFB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QUFDSCxhQUFhLENBQUNWLE9BQU8sQ0FBQyxDQUFDLENBQUM7SUFDMURNLGFBQWEsQ0FBQ2dJLFdBQVcsQ0FBQzdKLElBQUksRUFBRW1LLGVBQWUsQ0FBQztFQUNqRDtFQUFDakssUUFBQSxDQUFBK0csaUJBQUEsR0FBQUEsaUJBQUE7RUFFTSxTQUFTbUQsK0JBQStCQSxDQUFDQyxLQUEwQixFQUFFcEosYUFBNEIsRUFBdUI7SUFDOUhvSixLQUFLLENBQUMvSyxPQUFPLENBQUMsVUFBVWdMLElBQUksRUFBRTtNQUM3QkEsSUFBSSxDQUFDQyxJQUFJLEdBQUd0SixhQUFhLENBQUNFLE9BQU8sQ0FBQ21KLElBQUksQ0FBQ0MsSUFBSSxDQUFDO01BQzVDRCxJQUFJLENBQUNFLFdBQVcsR0FBR3ZKLGFBQWEsQ0FBQ0UsT0FBTyxDQUFDbUosSUFBSSxDQUFDRSxXQUFXLENBQUM7TUFDMUQsSUFBSUYsSUFBSSxDQUFDRyxLQUFLLEVBQUU7UUFDZkgsSUFBSSxDQUFDRyxLQUFLLENBQUNuTCxPQUFPLENBQUMsVUFBVW9MLEtBQUssRUFBRTtVQUNuQ0EsS0FBSyxDQUFDSCxJQUFJLEdBQUd0SixhQUFhLENBQUNFLE9BQU8sQ0FBQ3VKLEtBQUssQ0FBQ0gsSUFBSSxDQUFDO1FBQy9DLENBQUMsQ0FBQztNQUNIO0lBQ0QsQ0FBQyxDQUFDO0lBRUYsT0FBT0YsS0FBSztFQUNiO0VBQUNuSyxRQUFBLENBQUFrSywrQkFBQSxHQUFBQSwrQkFBQTtFQUVNLFNBQVNPLHdCQUF3QkEsQ0FBQ25KLE9BQWdCLEVBQVc7SUFDbkUsSUFBSW9KLEtBQUssR0FBR0MsU0FBUyxDQUFDQyxvQkFBb0IsQ0FBQ3RKLE9BQU8sQ0FBc0I7SUFDeEUsSUFBSW9KLEtBQUssS0FBSzVJLFNBQVMsSUFBSVIsT0FBTyxDQUFDeUcsU0FBUyxDQUFDLENBQUMsRUFBRTtNQUMvQztNQUNBMkMsS0FBSyxHQUFHQyxTQUFTLENBQUNDLG9CQUFvQixDQUFDdEosT0FBTyxDQUFDeUcsU0FBUyxDQUFDLENBQUUsQ0FBc0I7SUFDbEY7SUFDQSxNQUFNOEMsYUFBYSxHQUFHSCxLQUFLLEVBQUU3QyxlQUFlLENBQUMsQ0FBQyxDQUFDaUQsZ0JBQWdCLENBQUMsUUFBUSxDQUFDO0lBQ3pFLE9BQU9ELGFBQWEsRUFBRUUsR0FBRyxFQUFFQyxzQkFBc0IsS0FBSyxJQUFJO0VBQzNEO0VBQUNoTCxRQUFBLENBQUF5Syx3QkFBQSxHQUFBQSx3QkFBQTtFQUFBLE9BQUF6SyxRQUFBO0FBQUEiLCJpZ25vcmVMaXN0IjpbXX0=
@@ -6,6 +6,7 @@ import deepClone from "sap/base/util/deepClone";
6
6
  import type AppComponent from "sap/fe/core/AppComponent";
7
7
  import CommonUtils from "sap/fe/core/CommonUtils";
8
8
  import type ResourceModel from "sap/fe/core/ResourceModel";
9
+ import type TemplateComponent from "sap/fe/core/TemplateComponent";
9
10
  import type { TemplateType } from "sap/fe/core/converters/ManifestSettings";
10
11
  import Button from "sap/m/Button";
11
12
  import CheckBox from "sap/m/CheckBox";
@@ -18,6 +19,7 @@ import type { MultiInput$TokenUpdateEvent } from "sap/m/MultiInput";
18
19
  import MultiInput from "sap/m/MultiInput";
19
20
  import Select from "sap/m/Select";
20
21
  import Token from "sap/m/Token";
22
+ import Component from "sap/ui/core/Component";
21
23
  import type Control from "sap/ui/core/Control";
22
24
  import Item from "sap/ui/core/Item";
23
25
  import type Context from "sap/ui/model/Context";
@@ -183,6 +185,29 @@ export function createAdaptionDialogContent(
183
185
  const list = new List();
184
186
  list.setModel(settingsModel);
185
187
 
188
+ // Function to clear personalization dependent controls when "Own Settings" is selected
189
+ const updatePersonalizationDependentControls = (selectedValue: string): void => {
190
+ const dependentControls = ["personalizationSort", "personalizationColumn", "personalizationFilter", "personalizationGroup"];
191
+ const isOwnSettings = selectedValue === "Own Settings";
192
+ if (isOwnSettings) {
193
+ dependentControls.forEach((controlId) => {
194
+ const listItems = list.getItems();
195
+ for (const item of listItems) {
196
+ const content = (item as InputListItem).getContent();
197
+ for (const control of content) {
198
+ if (control.data("id") === controlId) {
199
+ if ((control as CheckBox).setSelected) {
200
+ (control as CheckBox).setSelected(false);
201
+ propertyValues[controlId] = false;
202
+ }
203
+ break;
204
+ }
205
+ }
206
+ }
207
+ });
208
+ }
209
+ };
210
+
186
211
  const listItem = new InputListItem({
187
212
  label: "{label}"
188
213
  });
@@ -291,6 +316,10 @@ export function createAdaptionDialogContent(
291
316
  value = JSON.parse(value.toLowerCase());
292
317
  }
293
318
  propertyValues[(this as Select).data("id") as keyof PropertyValue] = value;
319
+ // Special handling for personalization setting
320
+ if ((this as Select).data("id") === "personalization") {
321
+ updatePersonalizationDependentControls(value);
322
+ }
294
323
  }
295
324
  }).data("id", id);
296
325
 
@@ -569,3 +598,13 @@ export function getPropertyNamesAndDescriptions(props: DesigntimeSetting[], reso
569
598
 
570
599
  return props;
571
600
  }
601
+
602
+ export function isManifestChangesEnabled(control: Control): boolean {
603
+ let owner = Component.getOwnerComponentFor(control) as TemplateComponent;
604
+ if (owner === undefined && control.getParent()) {
605
+ // In case of MassEdit, control is a sap.m.Dialog for which there is now OwnerComponent, so we need to consider its parent control
606
+ owner = Component.getOwnerComponentFor(control.getParent()!) as TemplateComponent;
607
+ }
608
+ const sapFeManifest = owner?.getAppComponent().getManifestEntry("sap.fe");
609
+ return sapFeManifest?.app?.disableManifestChanges !== true;
610
+ }