@sapui5/sap.fe.macros 1.140.0 → 1.141.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 (199) hide show
  1. package/package.json +1 -1
  2. package/src/sap/fe/macros/.library +1 -1
  3. package/src/sap/fe/macros/Chart.js +53 -2
  4. package/src/sap/fe/macros/Chart.tsx +55 -0
  5. package/src/sap/fe/macros/CollaborativeDraftHandler.js +230 -0
  6. package/src/sap/fe/macros/CollaborativeDraftHandler.tsx +218 -0
  7. package/src/sap/fe/macros/CommonHelper.js +59 -15
  8. package/src/sap/fe/macros/CommonHelper.ts +65 -14
  9. package/src/sap/fe/macros/ConditionalSwitch.js +174 -0
  10. package/src/sap/fe/macros/ConditionalSwitch.tsx +141 -0
  11. package/src/sap/fe/macros/ConditionalSwitchProperty.js +78 -0
  12. package/src/sap/fe/macros/ConditionalSwitchProperty.tsx +62 -0
  13. package/src/sap/fe/macros/Field.js +14 -10
  14. package/src/sap/fe/macros/Field.ts +15 -12
  15. package/src/sap/fe/macros/MacroAPI.js +9 -4
  16. package/src/sap/fe/macros/MacroAPI.ts +9 -4
  17. package/src/sap/fe/macros/MultiValueField.js +10 -5
  18. package/src/sap/fe/macros/MultiValueField.tsx +7 -1
  19. package/src/sap/fe/macros/Page.js +5 -7
  20. package/src/sap/fe/macros/Page.tsx +4 -6
  21. package/src/sap/fe/macros/Paginator.js +9 -4
  22. package/src/sap/fe/macros/Paginator.tsx +12 -3
  23. package/src/sap/fe/macros/RichTextEditor.js +3 -2
  24. package/src/sap/fe/macros/RichTextEditor.tsx +2 -1
  25. package/src/sap/fe/macros/Status.js +38 -13
  26. package/src/sap/fe/macros/Status.tsx +26 -6
  27. package/src/sap/fe/macros/ai/EasyFillDialog.js +11 -17
  28. package/src/sap/fe/macros/ai/EasyFillDialog.tsx +11 -16
  29. package/src/sap/fe/macros/ai/EasyFilterBar.js +195 -55
  30. package/src/sap/fe/macros/ai/EasyFilterBar.tsx +234 -57
  31. package/src/sap/fe/macros/ai/EasyFilterDataFetcher.js +76 -33
  32. package/src/sap/fe/macros/ai/EasyFilterDataFetcher.ts +89 -40
  33. package/src/sap/fe/macros/chart/Chart.js +2 -2
  34. package/src/sap/fe/macros/chart/Chart.tsx +1 -1
  35. package/src/sap/fe/macros/chart/MdcChartTemplate.js +4 -2
  36. package/src/sap/fe/macros/chart/MdcChartTemplate.tsx +4 -1
  37. package/src/sap/fe/macros/contentSwitcher/ContentSwitcher.js +9 -2
  38. package/src/sap/fe/macros/contentSwitcher/ContentSwitcher.tsx +8 -0
  39. package/src/sap/fe/macros/controls/BuildingBlockObjectProperty.js +5 -1
  40. package/src/sap/fe/macros/controls/BuildingBlockObjectProperty.ts +4 -0
  41. package/src/sap/fe/macros/controls/BuildingBlockWithTemplating.js +2 -2
  42. package/src/sap/fe/macros/controls/BuildingBlockWithTemplating.ts +1 -1
  43. package/src/sap/fe/macros/controls/FilterBar.js +14 -5
  44. package/src/sap/fe/macros/controls/FilterBar.ts +3 -0
  45. package/src/sap/fe/macros/controls/RadioButtons.js +61 -38
  46. package/src/sap/fe/macros/controls/RadioButtons.tsx +39 -18
  47. package/src/sap/fe/macros/controls/Section.js +4 -3
  48. package/src/sap/fe/macros/controls/Section.ts +3 -2
  49. package/src/sap/fe/macros/controls/section/SubSection.js +63 -8
  50. package/src/sap/fe/macros/controls/section/SubSection.ts +67 -1
  51. package/src/sap/fe/macros/field/Field.js +2 -2
  52. package/src/sap/fe/macros/field/Field.tsx +1 -1
  53. package/src/sap/fe/macros/field/FieldFormatOptions.js +25 -2
  54. package/src/sap/fe/macros/field/FieldFormatOptions.ts +13 -0
  55. package/src/sap/fe/macros/field/FieldHelper.js +2 -2
  56. package/src/sap/fe/macros/field/FieldHelper.ts +1 -4
  57. package/src/sap/fe/macros/field/FieldTemplating.js +3 -3
  58. package/src/sap/fe/macros/field/FieldTemplating.ts +4 -2
  59. package/src/sap/fe/macros/filter/FilterUtils.js +232 -2
  60. package/src/sap/fe/macros/filter/FilterUtils.ts +290 -4
  61. package/src/sap/fe/macros/filterBar/FilterBar.block.js +5 -3
  62. package/src/sap/fe/macros/filterBar/FilterBar.block.tsx +4 -2
  63. package/src/sap/fe/macros/filterBar/FilterBar.js +2 -2
  64. package/src/sap/fe/macros/filterBar/FilterBar.tsx +1 -1
  65. package/src/sap/fe/macros/filterBar/FilterBarAPI.js +63 -27
  66. package/src/sap/fe/macros/filterBar/FilterBarAPI.ts +49 -3
  67. package/src/sap/fe/macros/filterBar/FilterBarDelegate.js +5 -3
  68. package/src/sap/fe/macros/filterBar/FilterBarDelegate.ts +5 -2
  69. package/src/sap/fe/macros/filterBar/mixin/FilterBarAPIStateHandler.js +7 -2
  70. package/src/sap/fe/macros/filterBar/mixin/FilterBarAPIStateHandler.ts +6 -1
  71. package/src/sap/fe/macros/form/Form.block.js +7 -8
  72. package/src/sap/fe/macros/form/Form.block.ts +4 -6
  73. package/src/sap/fe/macros/form/FormContainer.block.js +555 -4
  74. package/src/sap/fe/macros/form/FormContainer.block.ts +665 -6
  75. package/src/sap/fe/macros/form/FormContainer.fragment.xml +1 -0
  76. package/src/sap/fe/macros/form/FormDelegate.js +6 -9
  77. package/src/sap/fe/macros/form/FormDelegate.ts +5 -8
  78. package/src/sap/fe/macros/internal/DataPoint.js +3 -2
  79. package/src/sap/fe/macros/internal/DataPoint.tsx +10 -1
  80. package/src/sap/fe/macros/internal/FilterField.block.js +16 -8
  81. package/src/sap/fe/macros/internal/FilterField.block.ts +11 -7
  82. package/src/sap/fe/macros/internal/field/DisplayStyle.js +7 -1
  83. package/src/sap/fe/macros/internal/field/DisplayStyle.tsx +8 -0
  84. package/src/sap/fe/macros/internal/field/EditStyle.js +21 -4
  85. package/src/sap/fe/macros/internal/field/EditStyle.tsx +18 -4
  86. package/src/sap/fe/macros/internal/field/FieldStructureHelper.js +3 -2
  87. package/src/sap/fe/macros/internal/field/FieldStructureHelper.ts +4 -1
  88. package/src/sap/fe/macros/internal/filterField/FilterFieldTemplate.fragment.xml +1 -0
  89. package/src/sap/fe/macros/internal/helpers/ActionHelper.js +36 -5
  90. package/src/sap/fe/macros/internal/helpers/ActionHelper.ts +34 -4
  91. package/src/sap/fe/macros/library.js +1 -1
  92. package/src/sap/fe/macros/mdc/adapter/StateFilterToSelectionVariant.js +2 -1
  93. package/src/sap/fe/macros/mdc/adapter/StateFilterToSelectionVariant.ts +1 -0
  94. package/src/sap/fe/macros/messagebundle.properties +20 -2
  95. package/src/sap/fe/macros/messagebundle_ar.properties +1 -1
  96. package/src/sap/fe/macros/messagebundle_bg.properties +1 -1
  97. package/src/sap/fe/macros/messagebundle_ca.properties +1 -1
  98. package/src/sap/fe/macros/messagebundle_cnr.properties +1 -1
  99. package/src/sap/fe/macros/messagebundle_cs.properties +1 -1
  100. package/src/sap/fe/macros/messagebundle_cy.properties +1 -1
  101. package/src/sap/fe/macros/messagebundle_da.properties +1 -1
  102. package/src/sap/fe/macros/messagebundle_de.properties +4 -4
  103. package/src/sap/fe/macros/messagebundle_el.properties +1 -1
  104. package/src/sap/fe/macros/messagebundle_en.properties +1 -1
  105. package/src/sap/fe/macros/messagebundle_en_GB.properties +1 -1
  106. package/src/sap/fe/macros/messagebundle_en_US_saprigi.properties +1 -1
  107. package/src/sap/fe/macros/messagebundle_es.properties +2 -2
  108. package/src/sap/fe/macros/messagebundle_es_MX.properties +1 -1
  109. package/src/sap/fe/macros/messagebundle_et.properties +1 -1
  110. package/src/sap/fe/macros/messagebundle_fi.properties +1 -1
  111. package/src/sap/fe/macros/messagebundle_fr.properties +1 -1
  112. package/src/sap/fe/macros/messagebundle_fr_CA.properties +1 -1
  113. package/src/sap/fe/macros/messagebundle_hi.properties +1 -1
  114. package/src/sap/fe/macros/messagebundle_hr.properties +1 -1
  115. package/src/sap/fe/macros/messagebundle_hu.properties +1 -1
  116. package/src/sap/fe/macros/messagebundle_id.properties +5 -5
  117. package/src/sap/fe/macros/messagebundle_it.properties +1 -1
  118. package/src/sap/fe/macros/messagebundle_iw.properties +1 -1
  119. package/src/sap/fe/macros/messagebundle_ja.properties +5 -5
  120. package/src/sap/fe/macros/messagebundle_kk.properties +1 -1
  121. package/src/sap/fe/macros/messagebundle_ko.properties +2 -2
  122. package/src/sap/fe/macros/messagebundle_lt.properties +2 -2
  123. package/src/sap/fe/macros/messagebundle_lv.properties +1 -1
  124. package/src/sap/fe/macros/messagebundle_mk.properties +2 -2
  125. package/src/sap/fe/macros/messagebundle_ms.properties +1 -1
  126. package/src/sap/fe/macros/messagebundle_nl.properties +1 -1
  127. package/src/sap/fe/macros/messagebundle_no.properties +1 -1
  128. package/src/sap/fe/macros/messagebundle_pl.properties +1 -1
  129. package/src/sap/fe/macros/messagebundle_pt.properties +1 -1
  130. package/src/sap/fe/macros/messagebundle_pt_PT.properties +1 -1
  131. package/src/sap/fe/macros/messagebundle_ro.properties +1 -1
  132. package/src/sap/fe/macros/messagebundle_ru.properties +1 -1
  133. package/src/sap/fe/macros/messagebundle_sh.properties +1 -1
  134. package/src/sap/fe/macros/messagebundle_sk.properties +1 -1
  135. package/src/sap/fe/macros/messagebundle_sl.properties +1 -1
  136. package/src/sap/fe/macros/messagebundle_sr.properties +1 -1
  137. package/src/sap/fe/macros/messagebundle_sv.properties +1 -1
  138. package/src/sap/fe/macros/messagebundle_th.properties +1 -1
  139. package/src/sap/fe/macros/messagebundle_tr.properties +1 -1
  140. package/src/sap/fe/macros/messagebundle_uk.properties +1 -1
  141. package/src/sap/fe/macros/messagebundle_vi.properties +2 -2
  142. package/src/sap/fe/macros/messagebundle_zh_CN.properties +1 -1
  143. package/src/sap/fe/macros/messagebundle_zh_TW.properties +1 -1
  144. package/src/sap/fe/macros/messages/MessageButton.js +1 -1
  145. package/src/sap/fe/macros/messages/MessageButton.ts +2 -2
  146. package/src/sap/fe/macros/messages/MessagePopover.js +3 -1
  147. package/src/sap/fe/macros/messages/MessagePopover.ts +2 -0
  148. package/src/sap/fe/macros/microchart/MicroChart.js +2 -2
  149. package/src/sap/fe/macros/microchart/MicroChart.tsx +1 -1
  150. package/src/sap/fe/macros/microchart/MicroChartHelper.js +2 -2
  151. package/src/sap/fe/macros/microchart/MicroChartHelper.tsx +1 -1
  152. package/src/sap/fe/macros/table/ActionsTemplating.js +4 -8
  153. package/src/sap/fe/macros/table/ActionsTemplating.tsx +5 -8
  154. package/src/sap/fe/macros/table/BasicSearch.js +1 -1
  155. package/src/sap/fe/macros/table/BasicSearch.ts +2 -1
  156. package/src/sap/fe/macros/table/Column.js +14 -2
  157. package/src/sap/fe/macros/table/Column.ts +7 -0
  158. package/src/sap/fe/macros/table/ColumnExportSettings.js +83 -15
  159. package/src/sap/fe/macros/table/ColumnExportSettings.ts +44 -0
  160. package/src/sap/fe/macros/table/ColumnOverride.js +14 -2
  161. package/src/sap/fe/macros/table/ColumnOverride.ts +7 -0
  162. package/src/sap/fe/macros/table/MdcTableTemplate.js +5 -5
  163. package/src/sap/fe/macros/table/MdcTableTemplate.tsx +15 -9
  164. package/src/sap/fe/macros/table/QuickFilterSelector.js +12 -3
  165. package/src/sap/fe/macros/table/QuickFilterSelector.tsx +15 -2
  166. package/src/sap/fe/macros/table/Table.block.js +188 -147
  167. package/src/sap/fe/macros/table/Table.block.tsx +41 -11
  168. package/src/sap/fe/macros/table/Table.js +16 -10
  169. package/src/sap/fe/macros/table/Table.tsx +16 -10
  170. package/src/sap/fe/macros/table/TableAPI.js +224 -184
  171. package/src/sap/fe/macros/table/TableAPI.ts +63 -19
  172. package/src/sap/fe/macros/table/TableEventHandlerProvider.js +6 -6
  173. package/src/sap/fe/macros/table/TableEventHandlerProvider.ts +5 -4
  174. package/src/sap/fe/macros/table/TableHelper.js +2 -2
  175. package/src/sap/fe/macros/table/TableHelper.ts +1 -1
  176. package/src/sap/fe/macros/table/TreeTable.js +16 -10
  177. package/src/sap/fe/macros/table/TreeTable.tsx +16 -10
  178. package/src/sap/fe/macros/table/Utils.js +3 -2
  179. package/src/sap/fe/macros/table/Utils.ts +7 -2
  180. package/src/sap/fe/macros/table/delegates/TableDelegate.js +69 -33
  181. package/src/sap/fe/macros/table/delegates/TableDelegate.ts +75 -32
  182. package/src/sap/fe/macros/table/massEdit/MassEditDialog.js +10 -10
  183. package/src/sap/fe/macros/table/massEdit/MassEditDialog.tsx +11 -9
  184. package/src/sap/fe/macros/table/massEdit/MassEditDialogHelper.js +14 -12
  185. package/src/sap/fe/macros/table/massEdit/MassEditDialogHelper.tsx +11 -10
  186. package/src/sap/fe/macros/table/mixin/ContextMenuHandler.js +34 -4
  187. package/src/sap/fe/macros/table/mixin/ContextMenuHandler.ts +45 -2
  188. package/src/sap/fe/macros/table/mixin/EmptyRowsHandler.js +55 -12
  189. package/src/sap/fe/macros/table/mixin/EmptyRowsHandler.ts +71 -9
  190. package/src/sap/fe/macros/table/mixin/TableAPIStateHandler.js +53 -2
  191. package/src/sap/fe/macros/table/mixin/TableAPIStateHandler.ts +55 -0
  192. package/src/sap/fe/macros/table/mixin/TableExport.js +22 -3
  193. package/src/sap/fe/macros/table/mixin/TableExport.ts +25 -4
  194. package/src/sap/fe/macros/table/mixin/TableSharing.js +3 -2
  195. package/src/sap/fe/macros/table/mixin/TableSharing.ts +4 -3
  196. package/src/sap/fe/macros/valuehelp/ValueHelpDelegate.js +27 -10
  197. package/src/sap/fe/macros/valuehelp/ValueHelpDelegate.ts +31 -13
  198. package/src/sap/fe/macros/visualfilters/VisualFilter.js +5 -3
  199. package/src/sap/fe/macros/visualfilters/VisualFilter.tsx +3 -1
@@ -251,6 +251,7 @@
251
251
  fieldEditStyle="{dataField>formatOptions/fieldEditStyle}"
252
252
  radioButtonsHorizontalLayout="{dataField>formatOptions/radioButtonsHorizontalLayout}"
253
253
  dateTimePattern="{dataField>formatOptions/pattern}"
254
+ useRadioButtonsForBoolean="{dataField>formatOptions/useRadioButtonsForBoolean}"
254
255
  />
255
256
  </macro:Field>
256
257
  </f:fields>
@@ -45,16 +45,13 @@ sap.ui.define(["sap/fe/macros/CommonHelper", "sap/fe/macros/DelegateUtil", "sap/
45
45
  return Promise.reject(new Error("FormDelegate.createLayout: field already exists"));
46
46
  }
47
47
  }
48
- let sEntitySet = await DelegateUtil.getCustomDataWithModifier(oForm, "entitySet", oModifier);
49
- if (!sEntitySet) {
50
- sEntitySet = await DelegateUtil.getCustomDataWithModifier(oForm, "navigationPath", oModifier);
51
- }
52
- const sPath = sEntitySet.startsWith("/") ? `${sEntitySet}` : `/${sEntitySet}`;
48
+ const metaPath = (await DelegateUtil.getCustomDataWithModifier(oForm, "metaPath", oModifier)) ?? "";
53
49
  const oFormContainer = mPropertyBag.parentSelector ? mPropertyBag.modifier.bySelector(mPropertyBag.parentSelector, mPropertyBag.appComponent, mPropertyBag.view) : undefined;
54
50
  const sNavigationPath = oFormContainer ? await DelegateUtil.getCustomDataWithModifier(oFormContainer, "navigationPath", oModifier) : "";
55
- const sBindingPath = sNavigationPath ? `${sPath}/${sNavigationPath}` : sPath;
56
- const oMetaModelContext = oMetaModel?.getMetaContext(sBindingPath);
57
- const oPropertyContext = oMetaModel?.createBindingContext(`${sBindingPath}/${mPropertyBag.bindingPath}`);
51
+ let sBindingPath = metaPath.substring(0, metaPath.indexOf("@"));
52
+ sBindingPath = sNavigationPath ? `${sBindingPath}${sNavigationPath}/` : sBindingPath;
53
+ const oMetaModelContext = oMetaModel?.getMetaContext(sBindingPath.substring(0, sBindingPath.length - 1));
54
+ const oPropertyContext = oMetaModel?.createBindingContext(`${sBindingPath}${mPropertyBag.bindingPath}`);
58
55
  async function fnTemplateFormElement(sFragmentName, oView, navigationPath) {
59
56
  const sOnChangeCustomData = await DelegateUtil.getCustomDataWithModifier(oForm, "onChange", oModifier);
60
57
  const sDisplayModeCustomData = await DelegateUtil.getCustomDataWithModifier(oForm, "displayMode", oModifier);
@@ -216,4 +213,4 @@ sap.ui.define(["sap/fe/macros/CommonHelper", "sap/fe/macros/DelegateUtil", "sap/
216
213
  };
217
214
  return Delegate;
218
215
  }, false);
219
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJEZWxlZ2F0ZSIsImNyZWF0ZUxheW91dCIsIm1Qcm9wZXJ0eUJhZyIsIm9Nb2RpZmllciIsIm1vZGlmaWVyIiwib01ldGFNb2RlbCIsImFwcENvbXBvbmVudCIsImdldE1ldGFNb2RlbCIsIm9Gb3JtIiwiZWxlbWVudCIsInRhcmdldHMiLCJmaWVsZHNJblZpZXciLCJ2aWV3IiwiZ2V0RWxlbWVudHNCeVRhZ05hbWVOUyIsImZpZWxkIiwiQXJyYXkiLCJmcm9tIiwiZ2V0QXR0cmlidXRlIiwiZmllbGRTZWxlY3RvciIsImlkIiwiUHJvbWlzZSIsInJlamVjdCIsIkVycm9yIiwiYnlJZCIsInNFbnRpdHlTZXQiLCJEZWxlZ2F0ZVV0aWwiLCJnZXRDdXN0b21EYXRhV2l0aE1vZGlmaWVyIiwic1BhdGgiLCJzdGFydHNXaXRoIiwib0Zvcm1Db250YWluZXIiLCJwYXJlbnRTZWxlY3RvciIsImJ5U2VsZWN0b3IiLCJ1bmRlZmluZWQiLCJzTmF2aWdhdGlvblBhdGgiLCJzQmluZGluZ1BhdGgiLCJvTWV0YU1vZGVsQ29udGV4dCIsImdldE1ldGFDb250ZXh0Iiwib1Byb3BlcnR5Q29udGV4dCIsImNyZWF0ZUJpbmRpbmdDb250ZXh0IiwiYmluZGluZ1BhdGgiLCJmblRlbXBsYXRlRm9ybUVsZW1lbnQiLCJzRnJhZ21lbnROYW1lIiwib1ZpZXciLCJuYXZpZ2F0aW9uUGF0aCIsInNPbkNoYW5nZUN1c3RvbURhdGEiLCJzRGlzcGxheU1vZGVDdXN0b21EYXRhIiwib1RoaXMiLCJKU09OTW9kZWwiLCJfZmxleElkIiwib25DaGFuZ2UiLCJDb21tb24iLCJyZW1vdmVFc2NhcGVDaGFyYWN0ZXJzIiwiZGlzcGxheU1vZGUiLCJvUHJlcHJvY2Vzc29yU2V0dGluZ3MiLCJiaW5kaW5nQ29udGV4dHMiLCJlbnRpdHlTZXQiLCJkYXRhRmllbGQiLCJ0aGlzIiwibW9kZWxzIiwibWV0YU1vZGVsIiwidGVtcGxhdGVDb250cm9sRnJhZ21lbnQiLCJvRmllbGQiLCJjb250cm9sIiwiZ2V0UHJvcGVydHlJbmZvIiwiX2lzQ29tcGxleFR5cGUiLCJtUHJvcGVydHkiLCIkVHlwZSIsInRvTG93ZXJDYXNlIiwiaW5kZXhPZiIsIl9zdGFydHNXaXRoTmF2aWdhdGlvblByb3BlcnR5Iiwic1Byb3BlcnR5UGF0aCIsImFOYXZpZ2F0aW9uUHJvcGVydGllcyIsInNvbWUiLCJzTmF2UHJvcCIsIl9lbnJpY2hQcm9wZXJ0eSIsIm1FbGVtZW50IiwibVByb3BlcnR5QW5ub3RhdGlvbnMiLCJzRW50aXR5VHlwZSIsIm9FbGVtZW50Iiwic0FnZ3JlZ2F0aW9uTmFtZSIsIm1Qcm9wIiwibmFtZSIsImVudGl0eVR5cGUiLCJtRGF0YUZpZWxkRGVmYXVsdEFubm90YXRpb24iLCJzTGFiZWwiLCJMYWJlbCIsImxhYmVsIiwibUhpZGRlbkFubm90YXRpb24iLCJoaWRlRnJvbVJldmVhbCIsIiRQYXRoIiwiZ2V0QmluZGluZ0NvbnRleHQiLCJnZXRQcm9wZXJ0eSIsIm1GaWVsZENvbnRyb2xBbm5vdGF0aW9uIiwiJEVudW1NZW1iZXIiLCJzRmllbGRDb250cm9sUGF0aCIsImJMaXN0QmluZGluZyIsImdldEJpbmRpbmciLCJMaXN0QmluZGluZyIsImlGaWVsZENvbnRyb2xWYWx1ZSIsInVuc3VwcG9ydGVkIiwiX2NvbnZlcnRNZXRhZGF0YVRvRGVsZWdhdGVGb3JtYXQiLCJtT0RhdGFFbnRpdHlUeXBlIiwiYVByb3BlcnRpZXMiLCJzRWxlbWVudE5hbWUiLCIka2luZCIsInB1c2giLCJtUHJvcEFubm90YXRpb25zIiwiZ2V0T2JqZWN0IiwiX2dldEJpbmRpbmdQYXRoIiwibVBheWxvYWQiLCJwYXRoIiwidkJpbmRpbmciLCJkYXRhIiwiZ2V0UGF0aCIsIl9nZXRPRGF0YVByb3BlcnRpZXNPZk1vZGVsIiwib01vZGVsIiwiZ2V0TW9kZWwiLCJtb2RlbE5hbWUiLCJpc0EiLCJzQmluZGluZ0NvbnRleHRQYXRoIiwib01ldGFNb2RlbENvbnRleHRPYmplY3QiLCJyZXNvbHZlIiwidGhlbiIsImFnZ3JlZ2F0aW9uTmFtZSIsInBheWxvYWQiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIkZvcm1EZWxlZ2F0ZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IERhdGFGaWVsZERlZmF1bHQgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL1VJXCI7XG5pbXBvcnQgdHlwZSBBcHBDb21wb25lbnQgZnJvbSBcInNhcC9mZS9jb3JlL0FwcENvbXBvbmVudFwiO1xuaW1wb3J0IHR5cGUgeyBGRVZpZXcgfSBmcm9tIFwic2FwL2ZlL2NvcmUvQmFzZUNvbnRyb2xsZXJcIjtcbmltcG9ydCB0eXBlIHsgQmFzZVRyZWVNb2RpZmllciB9IGZyb20gXCJzYXAvZmUvY29yZS9Db21tb25VdGlsc1wiO1xuaW1wb3J0IHR5cGUgeyBNZXRhTW9kZWxQcm9wZXJ0eUFubm90YXRpb25zIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWV0YU1vZGVsQ29udmVydGVyXCI7XG5pbXBvcnQgQ29tbW9uIGZyb20gXCJzYXAvZmUvbWFjcm9zL0NvbW1vbkhlbHBlclwiO1xuaW1wb3J0IERlbGVnYXRlVXRpbCBmcm9tIFwic2FwL2ZlL21hY3Jvcy9EZWxlZ2F0ZVV0aWxcIjtcbmltcG9ydCB0eXBlIENvbnRyb2wgZnJvbSBcInNhcC91aS9jb3JlL0NvbnRyb2xcIjtcbmltcG9ydCB0eXBlIFVJNUVsZW1lbnQgZnJvbSBcInNhcC91aS9jb3JlL0VsZW1lbnRcIjtcbmltcG9ydCB0eXBlIFhNTFZpZXcgZnJvbSBcInNhcC91aS9jb3JlL212Yy9YTUxWaWV3XCI7XG5pbXBvcnQgTGlzdEJpbmRpbmcgZnJvbSBcInNhcC91aS9tb2RlbC9MaXN0QmluZGluZ1wiO1xuaW1wb3J0IEpTT05Nb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL2pzb24vSlNPTk1vZGVsXCI7XG5pbXBvcnQgdHlwZSBPRGF0YU1ldGFNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTWV0YU1vZGVsXCI7XG5pbXBvcnQgdHlwZSB7IE1ldGFNb2RlbEVudGl0eVR5cGUsIE1ldGFNb2RlbFByb3BlcnR5LCBNZXRhTW9kZWxUeXBlIH0gZnJvbSBcIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3R5cGVzL21ldGFtb2RlbF90eXBlc1wiO1xuXG50eXBlIERlbGVnYXRlUHJvcGVydHkgPSB7XG5cdG5hbWU6IHN0cmluZztcblx0YmluZGluZ1BhdGg6IHN0cmluZztcblx0ZW50aXR5VHlwZTogc3RyaW5nO1xuXHRsYWJlbD86IHN0cmluZztcblx0aGlkZUZyb21SZXZlYWw/OiBib29sZWFuO1xuXHR1bnN1cHBvcnRlZD86IGJvb2xlYW47XG59O1xuXG5jb25zdCBEZWxlZ2F0ZSA9IHtcblx0LyoqXG5cdCAqIEBwYXJhbSBtUHJvcGVydHlCYWcgT2JqZWN0IHdpdGggcGFyYW1ldGVycyBhcyBwcm9wZXJ0aWVzXG5cdCAqIEBwYXJhbSBtUHJvcGVydHlCYWcubW9kaWZpZXIgTW9kaWZpZXIgdG8gaGFybW9uaXplIGFjY2VzcywgY3JlYXRpb24gYW5kIG1hbmlwdWxhdGlvbiB0byBjb250cm9scyBpbiBYTUwgVmlld3MgYW5kIEpTIENvbnRyb2xzXG5cdCAqIEBwYXJhbSBbbVByb3BlcnR5QmFnLmFwcENvbXBvbmVudF0gTmVlZGVkIHRvIGNhbGN1bGF0ZSB0aGUgY29ycmVjdCBJRCBpbiBjYXNlIHlvdSBwcm92aWRlIGEgc2VsZWN0b3Jcblx0ICogQHBhcmFtIFttUHJvcGVydHlCYWcudmlld10gWE1MIG5vZGUgb2YgdGhlIHZpZXcsIHJlcXVpcmVkIGZvciBYTUwgY2FzZSB0byBjcmVhdGUgbm9kZXMgYW5kIHRvIGZpbmQgZWxlbWVudHNcblx0ICogQHBhcmFtIFttUHJvcGVydHlCYWcuZmllbGRTZWxlY3Rvcl0gU2VsZWN0b3IgdG8gY2FsY3VsYXRlIHRoZSBJRCBmb3IgdGhlIGNvbnRyb2wgdGhhdCBpcyBjcmVhdGVkXG5cdCAqIEBwYXJhbSBbbVByb3BlcnR5QmFnLmZpZWxkU2VsZWN0b3IuaWRdXG5cdCAqIEBwYXJhbSBbbVByb3BlcnR5QmFnLmZpZWxkU2VsZWN0b3IuaXNMb2NhbElkXVxuXHQgKiBAcGFyYW0gbVByb3BlcnR5QmFnLmJpbmRpbmdQYXRoIFJ1bnRpbWUgYmluZGluZyBwYXRoIHRoZSBjb250cm9sIHNob3VsZCBiZSBib3VuZCB0b1xuXHQgKiBAcGFyYW0gbVByb3BlcnR5QmFnLnBheWxvYWQgUGF5bG9hZCBwYXJhbWV0ZXIgYXR0YWNoZWQgdG8gdGhlIGRlbGVnYXRlLCB1bmRlZmluZWQgaWYgbm8gcGF5bG9hZCB3YXMgYXNzaWduZWRcblx0ICogQHBhcmFtIG1Qcm9wZXJ0eUJhZy5jb250cm9sVHlwZSBDb250cm9sIHR5cGUgb2YgdGhlIGVsZW1lbnQgdGhlIGRlbGVnYXRlIGlzIGF0dGFjaGVkIHRvXG5cdCAqIEBwYXJhbSBtUHJvcGVydHlCYWcuYWdncmVnYXRpb25OYW1lIE5hbWUgb2YgdGhlIGFnZ3JlZ2F0aW9uIHRoZSBkZWxlZ2F0ZSBzaG91bGQgcHJvdmlkZSBhZGRpdGlvbmFsIGVsZW1lbnRzXG5cdCAqIEBwYXJhbSBtUHJvcGVydHlCYWcuZWxlbWVudFxuXHQgKiBAcGFyYW0gbVByb3BlcnR5QmFnLnBhcmVudFNlbGVjdG9yXG5cdCAqIEByZXR1cm5zIE1hcCBjb250YWluaW5nIHRoZSBjb250cm9scyB0byBhZGRcblx0ICovXG5cdGNyZWF0ZUxheW91dDogYXN5bmMgZnVuY3Rpb24gKG1Qcm9wZXJ0eUJhZzoge1xuXHRcdG1vZGlmaWVyOiBCYXNlVHJlZU1vZGlmaWVyO1xuXHRcdGFwcENvbXBvbmVudD86IEFwcENvbXBvbmVudDtcblx0XHR2aWV3PzogRWxlbWVudDtcblx0XHRmaWVsZFNlbGVjdG9yPzogeyBpZD86IHN0cmluZzsgaXNMb2NhbElkPzogYm9vbGVhbiB9O1xuXHRcdGJpbmRpbmdQYXRoOiBzdHJpbmc7XG5cdFx0cGF5bG9hZDogb2JqZWN0O1xuXHRcdGNvbnRyb2xUeXBlOiBzdHJpbmc7XG5cdFx0YWdncmVnYXRpb25OYW1lOiBzdHJpbmc7XG5cdFx0ZWxlbWVudDogVUk1RWxlbWVudCB8IEVsZW1lbnQ7XG5cdFx0cGFyZW50U2VsZWN0b3I/OiBvYmplY3Q7XG5cdH0pOiBQcm9taXNlPHtcblx0XHRjb250cm9sOiBFbGVtZW50IHwgVUk1RWxlbWVudCB8IEVsZW1lbnRbXSB8IFVJNUVsZW1lbnRbXTtcblx0fT4ge1xuXHRcdGNvbnN0IG9Nb2RpZmllciA9IG1Qcm9wZXJ0eUJhZy5tb2RpZmllcixcblx0XHRcdG9NZXRhTW9kZWwgPSBtUHJvcGVydHlCYWcuYXBwQ29tcG9uZW50Py5nZXRNZXRhTW9kZWwoKSxcblx0XHRcdG9Gb3JtID0gbVByb3BlcnR5QmFnLmVsZW1lbnQ7XG5cblx0XHQvLyBDaGVjayBmb3IgZXhpc3RpbmcgZmllbGRzIHdpdGggdGhlIHNhbWUgX2ZsZXhJZFxuXHRcdGlmIChvTW9kaWZpZXIudGFyZ2V0cyA9PT0gXCJ4bWxUcmVlXCIpIHtcblx0XHRcdC8vIGF0IHByZXByb2Nlc3NpbmcgdGltZVxuXHRcdFx0Y29uc3QgZmllbGRzSW5WaWV3ID0gbVByb3BlcnR5QmFnLnZpZXc/LmdldEVsZW1lbnRzQnlUYWdOYW1lTlMoXCJzYXAuZmUubWFjcm9zXCIsIFwiRmllbGRcIik7XG5cdFx0XHRpZiAoZmllbGRzSW5WaWV3KSB7XG5cdFx0XHRcdGZvciAoY29uc3QgZmllbGQgb2YgQXJyYXkuZnJvbShmaWVsZHNJblZpZXcpKSB7XG5cdFx0XHRcdFx0aWYgKGZpZWxkLmdldEF0dHJpYnV0ZShcIl9mbGV4SWRcIikgPT09IG1Qcm9wZXJ0eUJhZy5maWVsZFNlbGVjdG9yPy5pZCkge1xuXHRcdFx0XHRcdFx0Ly8gRmllbGQgd2l0aCBzYW1lIF9mbGV4SWQgYWxyZWFkeSBleGlzdHMsIHJlamVjdCBQcm9taXNlIHRvIGF2b2lkIGR1cGxpY2F0ZXNcblx0XHRcdFx0XHRcdHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJGb3JtRGVsZWdhdGUuY3JlYXRlTGF5b3V0OiBmaWVsZCBhbHJlYWR5IGV4aXN0c1wiKSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSBlbHNlIGlmIChvTW9kaWZpZXIudGFyZ2V0cyA9PT0gXCJqc0NvbnRyb2xUcmVlXCIpIHtcblx0XHRcdC8vIGF0IHJ1bnRpbWVcblx0XHRcdGlmIChcblx0XHRcdFx0bVByb3BlcnR5QmFnLmZpZWxkU2VsZWN0b3I/LmlkICYmXG5cdFx0XHRcdG1Qcm9wZXJ0eUJhZy52aWV3ICYmXG5cdFx0XHRcdChtUHJvcGVydHlCYWcudmlldyBhcyB1bmtub3duIGFzIFhNTFZpZXcpLmJ5SWQobVByb3BlcnR5QmFnLmZpZWxkU2VsZWN0b3I/LmlkKVxuXHRcdFx0KSB7XG5cdFx0XHRcdHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJGb3JtRGVsZWdhdGUuY3JlYXRlTGF5b3V0OiBmaWVsZCBhbHJlYWR5IGV4aXN0c1wiKSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0bGV0IHNFbnRpdHlTZXQgPSBhd2FpdCBEZWxlZ2F0ZVV0aWwuZ2V0Q3VzdG9tRGF0YVdpdGhNb2RpZmllcjxzdHJpbmc+KG9Gb3JtLCBcImVudGl0eVNldFwiLCBvTW9kaWZpZXIpO1xuXHRcdGlmICghc0VudGl0eVNldCkge1xuXHRcdFx0c0VudGl0eVNldCA9IGF3YWl0IERlbGVnYXRlVXRpbC5nZXRDdXN0b21EYXRhV2l0aE1vZGlmaWVyPHN0cmluZz4ob0Zvcm0sIFwibmF2aWdhdGlvblBhdGhcIiwgb01vZGlmaWVyKTtcblx0XHR9XG5cdFx0Y29uc3Qgc1BhdGggPSBzRW50aXR5U2V0IS5zdGFydHNXaXRoKFwiL1wiKSA/IGAke3NFbnRpdHlTZXR9YCA6IGAvJHtzRW50aXR5U2V0fWA7XG5cdFx0Y29uc3Qgb0Zvcm1Db250YWluZXIgPSBtUHJvcGVydHlCYWcucGFyZW50U2VsZWN0b3Jcblx0XHRcdD8gbVByb3BlcnR5QmFnLm1vZGlmaWVyLmJ5U2VsZWN0b3IobVByb3BlcnR5QmFnLnBhcmVudFNlbGVjdG9yLCBtUHJvcGVydHlCYWcuYXBwQ29tcG9uZW50LCBtUHJvcGVydHlCYWcudmlldylcblx0XHRcdDogdW5kZWZpbmVkO1xuXHRcdGNvbnN0IHNOYXZpZ2F0aW9uUGF0aCA9IG9Gb3JtQ29udGFpbmVyXG5cdFx0XHQ/IGF3YWl0IERlbGVnYXRlVXRpbC5nZXRDdXN0b21EYXRhV2l0aE1vZGlmaWVyPHN0cmluZz4ob0Zvcm1Db250YWluZXIgYXMgVUk1RWxlbWVudCB8IEVsZW1lbnQsIFwibmF2aWdhdGlvblBhdGhcIiwgb01vZGlmaWVyKVxuXHRcdFx0OiBcIlwiO1xuXHRcdGNvbnN0IHNCaW5kaW5nUGF0aCA9IHNOYXZpZ2F0aW9uUGF0aCA/IGAke3NQYXRofS8ke3NOYXZpZ2F0aW9uUGF0aH1gIDogc1BhdGg7XG5cdFx0Y29uc3Qgb01ldGFNb2RlbENvbnRleHQgPSBvTWV0YU1vZGVsPy5nZXRNZXRhQ29udGV4dChzQmluZGluZ1BhdGgpO1xuXHRcdGNvbnN0IG9Qcm9wZXJ0eUNvbnRleHQgPSBvTWV0YU1vZGVsPy5jcmVhdGVCaW5kaW5nQ29udGV4dChgJHtzQmluZGluZ1BhdGh9LyR7bVByb3BlcnR5QmFnLmJpbmRpbmdQYXRofWApO1xuXG5cdFx0YXN5bmMgZnVuY3Rpb24gZm5UZW1wbGF0ZUZvcm1FbGVtZW50KFxuXHRcdFx0c0ZyYWdtZW50TmFtZTogc3RyaW5nLFxuXHRcdFx0b1ZpZXc6IEZFVmlldyB8IHVuZGVmaW5lZCxcblx0XHRcdG5hdmlnYXRpb25QYXRoOiBzdHJpbmdcblx0XHQpOiBQcm9taXNlPEVsZW1lbnQgfCBVSTVFbGVtZW50IHwgRWxlbWVudFtdIHwgVUk1RWxlbWVudFtdPiB7XG5cdFx0XHRjb25zdCBzT25DaGFuZ2VDdXN0b21EYXRhID0gYXdhaXQgRGVsZWdhdGVVdGlsLmdldEN1c3RvbURhdGFXaXRoTW9kaWZpZXI8c3RyaW5nPihvRm9ybSwgXCJvbkNoYW5nZVwiLCBvTW9kaWZpZXIpO1xuXHRcdFx0Y29uc3Qgc0Rpc3BsYXlNb2RlQ3VzdG9tRGF0YSA9IGF3YWl0IERlbGVnYXRlVXRpbC5nZXRDdXN0b21EYXRhV2l0aE1vZGlmaWVyPHN0cmluZz4ob0Zvcm0sIFwiZGlzcGxheU1vZGVcIiwgb01vZGlmaWVyKTtcblx0XHRcdGNvbnN0IG9UaGlzID0gbmV3IEpTT05Nb2RlbCh7XG5cdFx0XHRcdC8vIHByb3BlcnRpZXMgYW5kIGV2ZW50cyBvZiBGaWVsZCBtYWNyb1xuXHRcdFx0XHRfZmxleElkOiBtUHJvcGVydHlCYWcuZmllbGRTZWxlY3Rvcj8uaWQsXG5cdFx0XHRcdG9uQ2hhbmdlOiBDb21tb24ucmVtb3ZlRXNjYXBlQ2hhcmFjdGVycyhzT25DaGFuZ2VDdXN0b21EYXRhKSxcblx0XHRcdFx0ZGlzcGxheU1vZGU6IENvbW1vbi5yZW1vdmVFc2NhcGVDaGFyYWN0ZXJzKHNEaXNwbGF5TW9kZUN1c3RvbURhdGEpLFxuXHRcdFx0XHRuYXZpZ2F0aW9uUGF0aDogbmF2aWdhdGlvblBhdGhcblx0XHRcdH0pO1xuXHRcdFx0Y29uc3Qgb1ByZXByb2Nlc3NvclNldHRpbmdzID0ge1xuXHRcdFx0XHRiaW5kaW5nQ29udGV4dHM6IHtcblx0XHRcdFx0XHRlbnRpdHlTZXQ6IG9NZXRhTW9kZWxDb250ZXh0LFxuXHRcdFx0XHRcdGRhdGFGaWVsZDogb1Byb3BlcnR5Q29udGV4dCxcblx0XHRcdFx0XHR0aGlzOiBvVGhpcy5jcmVhdGVCaW5kaW5nQ29udGV4dChcIi9cIilcblx0XHRcdFx0fSxcblx0XHRcdFx0bW9kZWxzOiB7XG5cdFx0XHRcdFx0dGhpczogb1RoaXMsXG5cdFx0XHRcdFx0ZW50aXR5U2V0OiBvTWV0YU1vZGVsLFxuXHRcdFx0XHRcdG1ldGFNb2RlbDogb01ldGFNb2RlbCxcblx0XHRcdFx0XHRkYXRhRmllbGQ6IG9NZXRhTW9kZWxcblx0XHRcdFx0fSxcblx0XHRcdFx0YXBwQ29tcG9uZW50OiBtUHJvcGVydHlCYWcuYXBwQ29tcG9uZW50XG5cdFx0XHR9O1xuXG5cdFx0XHRyZXR1cm4gRGVsZWdhdGVVdGlsLnRlbXBsYXRlQ29udHJvbEZyYWdtZW50KHNGcmFnbWVudE5hbWUsIG9QcmVwcm9jZXNzb3JTZXR0aW5ncywgeyB2aWV3OiBvVmlldyB9LCBvTW9kaWZpZXIpO1xuXHRcdH1cblxuXHRcdGNvbnN0IG9GaWVsZCA9IGF3YWl0IGZuVGVtcGxhdGVGb3JtRWxlbWVudChcblx0XHRcdFwic2FwLmZlLm1hY3Jvcy5mb3JtLkZvcm1FbGVtZW50RmxleGliaWxpdHlcIixcblx0XHRcdG1Qcm9wZXJ0eUJhZy52aWV3IGFzIHVua25vd24gYXMgRkVWaWV3LFxuXHRcdFx0c05hdmlnYXRpb25QYXRoIVxuXHRcdCk7XG5cdFx0cmV0dXJuIHtcblx0XHRcdGNvbnRyb2w6IG9GaWVsZFxuXHRcdH07XG5cdH0sXG5cdC8vIGdldFByb3BlcnR5SW5mbyBpcyBhIHBhdGNoZWQgdmVyc2lvbiBvZiBPRGF0YVY0UmVhZERlbGVnYXRlcyB0byBkZWxhIHdpdGggbmF2aWdhdGlvblBhdGhcblx0Z2V0UHJvcGVydHlJbmZvOiBhc3luYyBmdW5jdGlvbiAobVByb3BlcnR5QmFnOiB7XG5cdFx0ZWxlbWVudDogQ29udHJvbDtcblx0XHRhZ2dyZWdhdGlvbk5hbWU6IHN0cmluZztcblx0XHRwYXlsb2FkOiB7XG5cdFx0XHRtb2RlbE5hbWU/OiBzdHJpbmc7XG5cdFx0XHRwYXRoPzogc3RyaW5nO1xuXHRcdH07XG5cdH0pOiBQcm9taXNlPERlbGVnYXRlUHJvcGVydHlbXT4ge1xuXHRcdGZ1bmN0aW9uIF9pc0NvbXBsZXhUeXBlKG1Qcm9wZXJ0eTogTWV0YU1vZGVsUHJvcGVydHkpOiBib29sZWFuIHtcblx0XHRcdGlmIChtUHJvcGVydHkgJiYgbVByb3BlcnR5LiRUeXBlKSB7XG5cdFx0XHRcdGlmIChtUHJvcGVydHkuJFR5cGUudG9Mb3dlckNhc2UoKS5pbmRleE9mKFwiZWRtXCIpICE9PSAwKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHQvL0NoZWNrIGlmIGEgZ2l2ZW4gcHJvcGVydHkgcGF0aCBzdGFydHMgd2l0aCBhIG5hdmlnYXRpb24gcHJvcGVydHkuXG5cdFx0ZnVuY3Rpb24gX3N0YXJ0c1dpdGhOYXZpZ2F0aW9uUHJvcGVydHkoc1Byb3BlcnR5UGF0aDogc3RyaW5nLCBhTmF2aWdhdGlvblByb3BlcnRpZXM6IHN0cmluZ1tdKTogYm9vbGVhbiB7XG5cdFx0XHRyZXR1cm4gYU5hdmlnYXRpb25Qcm9wZXJ0aWVzLnNvbWUoZnVuY3Rpb24gKHNOYXZQcm9wKSB7XG5cdFx0XHRcdHJldHVybiBzUHJvcGVydHlQYXRoLnN0YXJ0c1dpdGgoc05hdlByb3ApO1xuXHRcdFx0fSk7XG5cdFx0fVxuXG5cdFx0ZnVuY3Rpb24gX2VucmljaFByb3BlcnR5KFxuXHRcdFx0c1Byb3BlcnR5UGF0aDogc3RyaW5nLFxuXHRcdFx0bUVsZW1lbnQ6IE1ldGFNb2RlbFByb3BlcnR5LFxuXHRcdFx0bVByb3BlcnR5QW5ub3RhdGlvbnM6IE1ldGFNb2RlbFByb3BlcnR5QW5ub3RhdGlvbnMsXG5cdFx0XHRzRW50aXR5VHlwZTogc3RyaW5nLFxuXHRcdFx0b0VsZW1lbnQ6IENvbnRyb2wsXG5cdFx0XHRzQWdncmVnYXRpb25OYW1lOiBzdHJpbmcsXG5cdFx0XHRhTmF2aWdhdGlvblByb3BlcnRpZXM6IHN0cmluZ1tdXG5cdFx0KTogRGVsZWdhdGVQcm9wZXJ0eSB7XG5cdFx0XHRjb25zdCBtUHJvcDogRGVsZWdhdGVQcm9wZXJ0eSA9IHtcblx0XHRcdFx0bmFtZTogc1Byb3BlcnR5UGF0aCxcblx0XHRcdFx0YmluZGluZ1BhdGg6IHNQcm9wZXJ0eVBhdGgsXG5cdFx0XHRcdGVudGl0eVR5cGU6IHNFbnRpdHlUeXBlXG5cdFx0XHR9O1xuXHRcdFx0Ly8gZ2V0IGxhYmVsIGluZm9ybWF0aW9uLCBlaXRoZXIgdmlhIERhdGFGaWVsZERlZmF1bHQgYW5ub3RhdGlvbiAoaWYgZXhpc3RzKSBvciBMYWJlbCBhbm5vdGF0aW9uXG5cdFx0XHRjb25zdCBtRGF0YUZpZWxkRGVmYXVsdEFubm90YXRpb24gPSBtUHJvcGVydHlBbm5vdGF0aW9uc1tcblx0XHRcdFx0XCJAY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YUZpZWxkRGVmYXVsdFwiXG5cdFx0XHRdIGFzIE1ldGFNb2RlbFR5cGU8RGF0YUZpZWxkRGVmYXVsdD47XG5cdFx0XHRjb25zdCBzTGFiZWwgPVxuXHRcdFx0XHQobURhdGFGaWVsZERlZmF1bHRBbm5vdGF0aW9uICYmIG1EYXRhRmllbGREZWZhdWx0QW5ub3RhdGlvbi5MYWJlbCkgfHxcblx0XHRcdFx0bVByb3BlcnR5QW5ub3RhdGlvbnNbXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkxhYmVsXCJdO1xuXHRcdFx0bVByb3AubGFiZWwgPSAoc0xhYmVsIGFzIHN0cmluZykgfHwgXCJbTEFCRUxfTUlTU0lORzogXCIgKyBzUHJvcGVydHlQYXRoICsgXCJdXCI7XG5cdFx0XHQvLyBldmFsdWF0ZSBIaWRkZW4gYW5ub3RhdGlvblxuXHRcdFx0Y29uc3QgbUhpZGRlbkFubm90YXRpb24gPSBtUHJvcGVydHlBbm5vdGF0aW9uc1tcIkBjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5IaWRkZW5cIl07XG5cdFx0XHRtUHJvcC5oaWRlRnJvbVJldmVhbCA9IG1IaWRkZW5Bbm5vdGF0aW9uIGFzIGJvb2xlYW47XG5cdFx0XHRpZiAobUhpZGRlbkFubm90YXRpb24gJiYgKG1IaWRkZW5Bbm5vdGF0aW9uIGFzIHsgJFBhdGg/OiBzdHJpbmcgfSkuJFBhdGgpIHtcblx0XHRcdFx0bVByb3AuaGlkZUZyb21SZXZlYWwgPSBvRWxlbWVudC5nZXRCaW5kaW5nQ29udGV4dCgpPy5nZXRQcm9wZXJ0eSgobUhpZGRlbkFubm90YXRpb24gYXMgeyAkUGF0aD86IHN0cmluZyB9KS4kUGF0aCEpO1xuXHRcdFx0fVxuXHRcdFx0Ly8gZXZhbHVhdGUgQWRhcHRhdGlvbkhpZGRlbiBhbm5vdGF0aW9uXG5cdFx0XHRpZiAoIW1Qcm9wLmhpZGVGcm9tUmV2ZWFsKSB7XG5cdFx0XHRcdG1Qcm9wLmhpZGVGcm9tUmV2ZWFsID0gbVByb3BlcnR5QW5ub3RhdGlvbnNbXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuQWRhcHRhdGlvbkhpZGRlblwiXSBhcyBib29sZWFuO1xuXHRcdFx0fVxuXHRcdFx0Ly8gZXZhbHVhdGUgRmllbGRDb250cm9sIGFubm90YXRpb25cblx0XHRcdGxldCBtRmllbGRDb250cm9sQW5ub3RhdGlvbjtcblx0XHRcdGlmICghbVByb3AuaGlkZUZyb21SZXZlYWwpIHtcblx0XHRcdFx0bUZpZWxkQ29udHJvbEFubm90YXRpb24gPSBtUHJvcGVydHlBbm5vdGF0aW9uc1tcIkBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuRmllbGRDb250cm9sXCJdO1xuXHRcdFx0XHRpZiAobUZpZWxkQ29udHJvbEFubm90YXRpb24pIHtcblx0XHRcdFx0XHRtUHJvcC5oaWRlRnJvbVJldmVhbCA9XG5cdFx0XHRcdFx0XHQobUZpZWxkQ29udHJvbEFubm90YXRpb24gYXMgeyAkRW51bU1lbWJlcj86IHN0cmluZyB9KS4kRW51bU1lbWJlciA9PT1cblx0XHRcdFx0XHRcdFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkZpZWxkQ29udHJvbFR5cGUvSGlkZGVuXCI7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdC8vIEBydW50aW1lIGhpZGRlbiBieSBmaWVsZCBjb250cm9sIHZhbHVlID0gMFxuXHRcdFx0bUZpZWxkQ29udHJvbEFubm90YXRpb24gPSBtUHJvcGVydHlBbm5vdGF0aW9uc1tcIkBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuRmllbGRDb250cm9sXCJdO1xuXHRcdFx0Y29uc3Qgc0ZpZWxkQ29udHJvbFBhdGggPSBtRmllbGRDb250cm9sQW5ub3RhdGlvbiAmJiAobUZpZWxkQ29udHJvbEFubm90YXRpb24gYXMgeyAkUGF0aD86IHN0cmluZyB9KS4kUGF0aDtcblx0XHRcdGlmIChzRmllbGRDb250cm9sUGF0aCAmJiAhbVByb3AuaGlkZUZyb21SZXZlYWwpIHtcblx0XHRcdFx0Ly8gaWYgdGhlIGJpbmRpbmcgaXMgYSBsaXN0IGJpbmRpbmcsIHNraXAgdGhlIGNoZWNrIGZvciBmaWVsZCBjb250cm9sXG5cdFx0XHRcdGNvbnN0IGJMaXN0QmluZGluZyA9IG9FbGVtZW50LmdldEJpbmRpbmcoc0FnZ3JlZ2F0aW9uTmFtZSkgaW5zdGFuY2VvZiBMaXN0QmluZGluZztcblx0XHRcdFx0aWYgKCFiTGlzdEJpbmRpbmcpIHtcblx0XHRcdFx0XHRjb25zdCBpRmllbGRDb250cm9sVmFsdWUgPSBvRWxlbWVudC5nZXRCaW5kaW5nQ29udGV4dCgpPy5nZXRQcm9wZXJ0eShzRmllbGRDb250cm9sUGF0aCk7XG5cdFx0XHRcdFx0bVByb3AuaGlkZUZyb21SZXZlYWwgPSBpRmllbGRDb250cm9sVmFsdWUgPT09IDA7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdC8vIG5vIHN1cHBvcnQgZm9yIERhdGFGaWVsZEZvci9XaXRoQWN0aW9uIGFuZCBEYXRhRmllbGRGb3IvV2l0aEludGVudEJhc2VkTmF2aWdhdGlvbiB3aXRoaW4gRGF0YUZpZWxkRGVmYXVsdCBhbm5vdGF0aW9uXG5cdFx0XHRpZiAoXG5cdFx0XHRcdG1EYXRhRmllbGREZWZhdWx0QW5ub3RhdGlvbiAmJlxuXHRcdFx0XHQobURhdGFGaWVsZERlZmF1bHRBbm5vdGF0aW9uLiRUeXBlID09PSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkRhdGFGaWVsZEZvckFjdGlvblwiIHx8XG5cdFx0XHRcdFx0bURhdGFGaWVsZERlZmF1bHRBbm5vdGF0aW9uLiRUeXBlID09PSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkRhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvblwiIHx8XG5cdFx0XHRcdFx0bURhdGFGaWVsZERlZmF1bHRBbm5vdGF0aW9uLiRUeXBlID09PSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkRhdGFGaWVsZFdpdGhBY3Rpb25cIiB8fFxuXHRcdFx0XHRcdG1EYXRhRmllbGREZWZhdWx0QW5ub3RhdGlvbi4kVHlwZSA9PT0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhRmllbGRXaXRoSW50ZW50QmFzZWROYXZpZ2F0aW9uXCIpXG5cdFx0XHQpIHtcblx0XHRcdFx0bVByb3AudW5zdXBwb3J0ZWQgPSB0cnVlO1xuXHRcdFx0fVxuXHRcdFx0Ly8gbm8gc3VwcG9ydCBmb3IgbmF2aWdhdGlvbiBwcm9wZXJ0aWVzIGFuZCBjb21wbGV4IHByb3BlcnRpZXNcblx0XHRcdGlmIChfc3RhcnRzV2l0aE5hdmlnYXRpb25Qcm9wZXJ0eShzUHJvcGVydHlQYXRoLCBhTmF2aWdhdGlvblByb3BlcnRpZXMpIHx8IF9pc0NvbXBsZXhUeXBlKG1FbGVtZW50KSkge1xuXHRcdFx0XHRtUHJvcC51bnN1cHBvcnRlZCA9IHRydWU7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gbVByb3A7XG5cdFx0fVxuXG5cdFx0Ly8gQ29udmVydCBtZXRhZGF0YSBmb3JtYXQgdG8gZGVsZWdhdGUgZm9ybWF0LlxuXHRcdGZ1bmN0aW9uIF9jb252ZXJ0TWV0YWRhdGFUb0RlbGVnYXRlRm9ybWF0KFxuXHRcdFx0bU9EYXRhRW50aXR5VHlwZTogTWV0YU1vZGVsRW50aXR5VHlwZSxcblx0XHRcdHNFbnRpdHlUeXBlOiBzdHJpbmcsXG5cdFx0XHRvTWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbCxcblx0XHRcdG9FbGVtZW50OiBDb250cm9sLFxuXHRcdFx0c0FnZ3JlZ2F0aW9uTmFtZTogc3RyaW5nXG5cdFx0KTogRGVsZWdhdGVQcm9wZXJ0eVtdIHtcblx0XHRcdGNvbnN0IGFQcm9wZXJ0aWVzID0gW107XG5cdFx0XHRsZXQgc0VsZW1lbnROYW1lID0gXCJcIjtcblx0XHRcdGNvbnN0IGFOYXZpZ2F0aW9uUHJvcGVydGllcyA9IFtdO1xuXHRcdFx0bGV0IG1FbGVtZW50O1xuXHRcdFx0Zm9yIChzRWxlbWVudE5hbWUgaW4gbU9EYXRhRW50aXR5VHlwZSkge1xuXHRcdFx0XHRtRWxlbWVudCA9IG1PRGF0YUVudGl0eVR5cGVbc0VsZW1lbnROYW1lXTtcblx0XHRcdFx0aWYgKG1FbGVtZW50LiRraW5kID09PSBcIk5hdmlnYXRpb25Qcm9wZXJ0eVwiKSB7XG5cdFx0XHRcdFx0YU5hdmlnYXRpb25Qcm9wZXJ0aWVzLnB1c2goc0VsZW1lbnROYW1lKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0Zm9yIChzRWxlbWVudE5hbWUgaW4gbU9EYXRhRW50aXR5VHlwZSkge1xuXHRcdFx0XHRtRWxlbWVudCA9IG1PRGF0YUVudGl0eVR5cGVbc0VsZW1lbnROYW1lXTtcblx0XHRcdFx0aWYgKG1FbGVtZW50LiRraW5kID09PSBcIlByb3BlcnR5XCIpIHtcblx0XHRcdFx0XHRjb25zdCBtUHJvcEFubm90YXRpb25zID0gb01ldGFNb2RlbC5nZXRPYmplY3QoXCIvXCIgKyBzRW50aXR5VHlwZSArIFwiL1wiICsgc0VsZW1lbnROYW1lICsgXCJAXCIpO1xuXHRcdFx0XHRcdGNvbnN0IG1Qcm9wID0gX2VucmljaFByb3BlcnR5KFxuXHRcdFx0XHRcdFx0c0VsZW1lbnROYW1lLFxuXHRcdFx0XHRcdFx0bUVsZW1lbnQgYXMgTWV0YU1vZGVsUHJvcGVydHksXG5cdFx0XHRcdFx0XHRtUHJvcEFubm90YXRpb25zLFxuXHRcdFx0XHRcdFx0c0VudGl0eVR5cGUsXG5cdFx0XHRcdFx0XHRvRWxlbWVudCxcblx0XHRcdFx0XHRcdHNBZ2dyZWdhdGlvbk5hbWUsXG5cdFx0XHRcdFx0XHRhTmF2aWdhdGlvblByb3BlcnRpZXNcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdGFQcm9wZXJ0aWVzLnB1c2gobVByb3ApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gYVByb3BlcnRpZXM7XG5cdFx0fVxuXG5cdFx0Ly9HZXQgYmluZGluZyBwYXRoIGVpdGhlciBmcm9tIHBheWxvYWQgKGlmIGF2YWlsYWJsZSkgb3IgdGhlIGVsZW1lbnQncyBiaW5kaW5nIGNvbnRleHQuXG5cdFx0ZnVuY3Rpb24gX2dldEJpbmRpbmdQYXRoKFxuXHRcdFx0b0VsZW1lbnQ6IENvbnRyb2wsXG5cdFx0XHRtUGF5bG9hZDoge1xuXHRcdFx0XHRwYXRoPzogc3RyaW5nO1xuXHRcdFx0fVxuXHRcdCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdFx0XHRpZiAobVBheWxvYWQucGF0aCkge1xuXHRcdFx0XHRyZXR1cm4gbVBheWxvYWQucGF0aDtcblx0XHRcdH1cblx0XHRcdGNvbnN0IHZCaW5kaW5nID0gb0VsZW1lbnQuZ2V0QmluZGluZ0NvbnRleHQoKTtcblx0XHRcdGlmICh2QmluZGluZykge1xuXHRcdFx0XHRpZiAob0VsZW1lbnQuZGF0YShcIm5hdmlnYXRpb25QYXRoXCIpKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHZCaW5kaW5nLmdldFBhdGgoKSArIFwiL1wiICsgb0VsZW1lbnQuZGF0YShcIm5hdmlnYXRpb25QYXRoXCIpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiB2QmluZGluZy5nZXRQYXRoKCk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly9HZXQgYWxsIHByb3BlcnRpZXMgb2YgdGhlIGVsZW1lbnQncyBtb2RlbC5cblx0XHRhc3luYyBmdW5jdGlvbiBfZ2V0T0RhdGFQcm9wZXJ0aWVzT2ZNb2RlbChcblx0XHRcdG9FbGVtZW50OiBDb250cm9sLFxuXHRcdFx0c0FnZ3JlZ2F0aW9uTmFtZTogc3RyaW5nLFxuXHRcdFx0bVBheWxvYWQ6IHtcblx0XHRcdFx0bW9kZWxOYW1lPzogc3RyaW5nO1xuXHRcdFx0XHRwYXRoPzogc3RyaW5nO1xuXHRcdFx0fVxuXHRcdCk6IFByb21pc2U8RGVsZWdhdGVQcm9wZXJ0eVtdPiB7XG5cdFx0XHRjb25zdCBvTW9kZWwgPSBvRWxlbWVudC5nZXRNb2RlbChtUGF5bG9hZC5tb2RlbE5hbWUpO1xuXHRcdFx0aWYgKG9Nb2RlbCkge1xuXHRcdFx0XHRpZiAob01vZGVsLmlzQShcInNhcC51aS5tb2RlbC5vZGF0YS52NC5PRGF0YU1vZGVsXCIpKSB7XG5cdFx0XHRcdFx0Y29uc3Qgb01ldGFNb2RlbCA9IG9Nb2RlbC5nZXRNZXRhTW9kZWwoKSBhcyBPRGF0YU1ldGFNb2RlbDtcblx0XHRcdFx0XHRjb25zdCBzQmluZGluZ0NvbnRleHRQYXRoID0gX2dldEJpbmRpbmdQYXRoKG9FbGVtZW50LCBtUGF5bG9hZCk7XG5cdFx0XHRcdFx0aWYgKHNCaW5kaW5nQ29udGV4dFBhdGgpIHtcblx0XHRcdFx0XHRcdGNvbnN0IG9NZXRhTW9kZWxDb250ZXh0ID0gb01ldGFNb2RlbC5nZXRNZXRhQ29udGV4dChzQmluZGluZ0NvbnRleHRQYXRoKTtcblx0XHRcdFx0XHRcdGNvbnN0IG9NZXRhTW9kZWxDb250ZXh0T2JqZWN0ID0gb01ldGFNb2RlbENvbnRleHQuZ2V0T2JqZWN0KCk7XG5cdFx0XHRcdFx0XHRjb25zdCBtT0RhdGFFbnRpdHlUeXBlID0gb01ldGFNb2RlbENvbnRleHQuZ2V0T2JqZWN0KG9NZXRhTW9kZWxDb250ZXh0T2JqZWN0LiRUeXBlKTtcblx0XHRcdFx0XHRcdHJldHVybiBfY29udmVydE1ldGFkYXRhVG9EZWxlZ2F0ZUZvcm1hdChcblx0XHRcdFx0XHRcdFx0bU9EYXRhRW50aXR5VHlwZSxcblx0XHRcdFx0XHRcdFx0b01ldGFNb2RlbENvbnRleHRPYmplY3QuJFR5cGUsXG5cdFx0XHRcdFx0XHRcdG9NZXRhTW9kZWwsXG5cdFx0XHRcdFx0XHRcdG9FbGVtZW50LFxuXHRcdFx0XHRcdFx0XHRzQWdncmVnYXRpb25OYW1lXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZShbXSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oYXN5bmMgZnVuY3Rpb24gKCkge1xuXHRcdFx0cmV0dXJuIF9nZXRPRGF0YVByb3BlcnRpZXNPZk1vZGVsKG1Qcm9wZXJ0eUJhZy5lbGVtZW50LCBtUHJvcGVydHlCYWcuYWdncmVnYXRpb25OYW1lLCBtUHJvcGVydHlCYWcucGF5bG9hZCk7XG5cdFx0fSk7XG5cdH1cbn07XG5cbmV4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
216
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJEZWxlZ2F0ZSIsImNyZWF0ZUxheW91dCIsIm1Qcm9wZXJ0eUJhZyIsIm9Nb2RpZmllciIsIm1vZGlmaWVyIiwib01ldGFNb2RlbCIsImFwcENvbXBvbmVudCIsImdldE1ldGFNb2RlbCIsIm9Gb3JtIiwiZWxlbWVudCIsInRhcmdldHMiLCJmaWVsZHNJblZpZXciLCJ2aWV3IiwiZ2V0RWxlbWVudHNCeVRhZ05hbWVOUyIsImZpZWxkIiwiQXJyYXkiLCJmcm9tIiwiZ2V0QXR0cmlidXRlIiwiZmllbGRTZWxlY3RvciIsImlkIiwiUHJvbWlzZSIsInJlamVjdCIsIkVycm9yIiwiYnlJZCIsIm1ldGFQYXRoIiwiRGVsZWdhdGVVdGlsIiwiZ2V0Q3VzdG9tRGF0YVdpdGhNb2RpZmllciIsIm9Gb3JtQ29udGFpbmVyIiwicGFyZW50U2VsZWN0b3IiLCJieVNlbGVjdG9yIiwidW5kZWZpbmVkIiwic05hdmlnYXRpb25QYXRoIiwic0JpbmRpbmdQYXRoIiwic3Vic3RyaW5nIiwiaW5kZXhPZiIsIm9NZXRhTW9kZWxDb250ZXh0IiwiZ2V0TWV0YUNvbnRleHQiLCJsZW5ndGgiLCJvUHJvcGVydHlDb250ZXh0IiwiY3JlYXRlQmluZGluZ0NvbnRleHQiLCJiaW5kaW5nUGF0aCIsImZuVGVtcGxhdGVGb3JtRWxlbWVudCIsInNGcmFnbWVudE5hbWUiLCJvVmlldyIsIm5hdmlnYXRpb25QYXRoIiwic09uQ2hhbmdlQ3VzdG9tRGF0YSIsInNEaXNwbGF5TW9kZUN1c3RvbURhdGEiLCJvVGhpcyIsIkpTT05Nb2RlbCIsIl9mbGV4SWQiLCJvbkNoYW5nZSIsIkNvbW1vbiIsInJlbW92ZUVzY2FwZUNoYXJhY3RlcnMiLCJkaXNwbGF5TW9kZSIsIm9QcmVwcm9jZXNzb3JTZXR0aW5ncyIsImJpbmRpbmdDb250ZXh0cyIsImVudGl0eVNldCIsImRhdGFGaWVsZCIsInRoaXMiLCJtb2RlbHMiLCJtZXRhTW9kZWwiLCJ0ZW1wbGF0ZUNvbnRyb2xGcmFnbWVudCIsIm9GaWVsZCIsImNvbnRyb2wiLCJnZXRQcm9wZXJ0eUluZm8iLCJfaXNDb21wbGV4VHlwZSIsIm1Qcm9wZXJ0eSIsIiRUeXBlIiwidG9Mb3dlckNhc2UiLCJfc3RhcnRzV2l0aE5hdmlnYXRpb25Qcm9wZXJ0eSIsInNQcm9wZXJ0eVBhdGgiLCJhTmF2aWdhdGlvblByb3BlcnRpZXMiLCJzb21lIiwic05hdlByb3AiLCJzdGFydHNXaXRoIiwiX2VucmljaFByb3BlcnR5IiwibUVsZW1lbnQiLCJtUHJvcGVydHlBbm5vdGF0aW9ucyIsInNFbnRpdHlUeXBlIiwib0VsZW1lbnQiLCJzQWdncmVnYXRpb25OYW1lIiwibVByb3AiLCJuYW1lIiwiZW50aXR5VHlwZSIsIm1EYXRhRmllbGREZWZhdWx0QW5ub3RhdGlvbiIsInNMYWJlbCIsIkxhYmVsIiwibGFiZWwiLCJtSGlkZGVuQW5ub3RhdGlvbiIsImhpZGVGcm9tUmV2ZWFsIiwiJFBhdGgiLCJnZXRCaW5kaW5nQ29udGV4dCIsImdldFByb3BlcnR5IiwibUZpZWxkQ29udHJvbEFubm90YXRpb24iLCIkRW51bU1lbWJlciIsInNGaWVsZENvbnRyb2xQYXRoIiwiYkxpc3RCaW5kaW5nIiwiZ2V0QmluZGluZyIsIkxpc3RCaW5kaW5nIiwiaUZpZWxkQ29udHJvbFZhbHVlIiwidW5zdXBwb3J0ZWQiLCJfY29udmVydE1ldGFkYXRhVG9EZWxlZ2F0ZUZvcm1hdCIsIm1PRGF0YUVudGl0eVR5cGUiLCJhUHJvcGVydGllcyIsInNFbGVtZW50TmFtZSIsIiRraW5kIiwicHVzaCIsIm1Qcm9wQW5ub3RhdGlvbnMiLCJnZXRPYmplY3QiLCJfZ2V0QmluZGluZ1BhdGgiLCJtUGF5bG9hZCIsInBhdGgiLCJ2QmluZGluZyIsImRhdGEiLCJnZXRQYXRoIiwiX2dldE9EYXRhUHJvcGVydGllc09mTW9kZWwiLCJvTW9kZWwiLCJnZXRNb2RlbCIsIm1vZGVsTmFtZSIsImlzQSIsInNCaW5kaW5nQ29udGV4dFBhdGgiLCJvTWV0YU1vZGVsQ29udGV4dE9iamVjdCIsInJlc29sdmUiLCJ0aGVuIiwiYWdncmVnYXRpb25OYW1lIiwicGF5bG9hZCJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiRm9ybURlbGVnYXRlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgRGF0YUZpZWxkRGVmYXVsdCB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvVUlcIjtcbmltcG9ydCB0eXBlIEFwcENvbXBvbmVudCBmcm9tIFwic2FwL2ZlL2NvcmUvQXBwQ29tcG9uZW50XCI7XG5pbXBvcnQgdHlwZSB7IEZFVmlldyB9IGZyb20gXCJzYXAvZmUvY29yZS9CYXNlQ29udHJvbGxlclwiO1xuaW1wb3J0IHR5cGUgeyBCYXNlVHJlZU1vZGlmaWVyIH0gZnJvbSBcInNhcC9mZS9jb3JlL0NvbW1vblV0aWxzXCI7XG5pbXBvcnQgdHlwZSB7IE1ldGFNb2RlbFByb3BlcnR5QW5ub3RhdGlvbnMgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9NZXRhTW9kZWxDb252ZXJ0ZXJcIjtcbmltcG9ydCBDb21tb24gZnJvbSBcInNhcC9mZS9tYWNyb3MvQ29tbW9uSGVscGVyXCI7XG5pbXBvcnQgRGVsZWdhdGVVdGlsIGZyb20gXCJzYXAvZmUvbWFjcm9zL0RlbGVnYXRlVXRpbFwiO1xuaW1wb3J0IHR5cGUgQ29udHJvbCBmcm9tIFwic2FwL3VpL2NvcmUvQ29udHJvbFwiO1xuaW1wb3J0IHR5cGUgVUk1RWxlbWVudCBmcm9tIFwic2FwL3VpL2NvcmUvRWxlbWVudFwiO1xuaW1wb3J0IHR5cGUgWE1MVmlldyBmcm9tIFwic2FwL3VpL2NvcmUvbXZjL1hNTFZpZXdcIjtcbmltcG9ydCBMaXN0QmluZGluZyBmcm9tIFwic2FwL3VpL21vZGVsL0xpc3RCaW5kaW5nXCI7XG5pbXBvcnQgSlNPTk1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvanNvbi9KU09OTW9kZWxcIjtcbmltcG9ydCB0eXBlIE9EYXRhTWV0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNZXRhTW9kZWxcIjtcbmltcG9ydCB0eXBlIHsgTWV0YU1vZGVsRW50aXR5VHlwZSwgTWV0YU1vZGVsUHJvcGVydHksIE1ldGFNb2RlbFR5cGUgfSBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vdHlwZXMvbWV0YW1vZGVsX3R5cGVzXCI7XG5cbnR5cGUgRGVsZWdhdGVQcm9wZXJ0eSA9IHtcblx0bmFtZTogc3RyaW5nO1xuXHRiaW5kaW5nUGF0aDogc3RyaW5nO1xuXHRlbnRpdHlUeXBlOiBzdHJpbmc7XG5cdGxhYmVsPzogc3RyaW5nO1xuXHRoaWRlRnJvbVJldmVhbD86IGJvb2xlYW47XG5cdHVuc3VwcG9ydGVkPzogYm9vbGVhbjtcbn07XG5cbmNvbnN0IERlbGVnYXRlID0ge1xuXHQvKipcblx0ICogQHBhcmFtIG1Qcm9wZXJ0eUJhZyBPYmplY3Qgd2l0aCBwYXJhbWV0ZXJzIGFzIHByb3BlcnRpZXNcblx0ICogQHBhcmFtIG1Qcm9wZXJ0eUJhZy5tb2RpZmllciBNb2RpZmllciB0byBoYXJtb25pemUgYWNjZXNzLCBjcmVhdGlvbiBhbmQgbWFuaXB1bGF0aW9uIHRvIGNvbnRyb2xzIGluIFhNTCBWaWV3cyBhbmQgSlMgQ29udHJvbHNcblx0ICogQHBhcmFtIFttUHJvcGVydHlCYWcuYXBwQ29tcG9uZW50XSBOZWVkZWQgdG8gY2FsY3VsYXRlIHRoZSBjb3JyZWN0IElEIGluIGNhc2UgeW91IHByb3ZpZGUgYSBzZWxlY3RvclxuXHQgKiBAcGFyYW0gW21Qcm9wZXJ0eUJhZy52aWV3XSBYTUwgbm9kZSBvZiB0aGUgdmlldywgcmVxdWlyZWQgZm9yIFhNTCBjYXNlIHRvIGNyZWF0ZSBub2RlcyBhbmQgdG8gZmluZCBlbGVtZW50c1xuXHQgKiBAcGFyYW0gW21Qcm9wZXJ0eUJhZy5maWVsZFNlbGVjdG9yXSBTZWxlY3RvciB0byBjYWxjdWxhdGUgdGhlIElEIGZvciB0aGUgY29udHJvbCB0aGF0IGlzIGNyZWF0ZWRcblx0ICogQHBhcmFtIFttUHJvcGVydHlCYWcuZmllbGRTZWxlY3Rvci5pZF1cblx0ICogQHBhcmFtIFttUHJvcGVydHlCYWcuZmllbGRTZWxlY3Rvci5pc0xvY2FsSWRdXG5cdCAqIEBwYXJhbSBtUHJvcGVydHlCYWcuYmluZGluZ1BhdGggUnVudGltZSBiaW5kaW5nIHBhdGggdGhlIGNvbnRyb2wgc2hvdWxkIGJlIGJvdW5kIHRvXG5cdCAqIEBwYXJhbSBtUHJvcGVydHlCYWcucGF5bG9hZCBQYXlsb2FkIHBhcmFtZXRlciBhdHRhY2hlZCB0byB0aGUgZGVsZWdhdGUsIHVuZGVmaW5lZCBpZiBubyBwYXlsb2FkIHdhcyBhc3NpZ25lZFxuXHQgKiBAcGFyYW0gbVByb3BlcnR5QmFnLmNvbnRyb2xUeXBlIENvbnRyb2wgdHlwZSBvZiB0aGUgZWxlbWVudCB0aGUgZGVsZWdhdGUgaXMgYXR0YWNoZWQgdG9cblx0ICogQHBhcmFtIG1Qcm9wZXJ0eUJhZy5hZ2dyZWdhdGlvbk5hbWUgTmFtZSBvZiB0aGUgYWdncmVnYXRpb24gdGhlIGRlbGVnYXRlIHNob3VsZCBwcm92aWRlIGFkZGl0aW9uYWwgZWxlbWVudHNcblx0ICogQHBhcmFtIG1Qcm9wZXJ0eUJhZy5lbGVtZW50XG5cdCAqIEBwYXJhbSBtUHJvcGVydHlCYWcucGFyZW50U2VsZWN0b3Jcblx0ICogQHJldHVybnMgTWFwIGNvbnRhaW5pbmcgdGhlIGNvbnRyb2xzIHRvIGFkZFxuXHQgKi9cblx0Y3JlYXRlTGF5b3V0OiBhc3luYyBmdW5jdGlvbiAobVByb3BlcnR5QmFnOiB7XG5cdFx0bW9kaWZpZXI6IEJhc2VUcmVlTW9kaWZpZXI7XG5cdFx0YXBwQ29tcG9uZW50PzogQXBwQ29tcG9uZW50O1xuXHRcdHZpZXc/OiBFbGVtZW50O1xuXHRcdGZpZWxkU2VsZWN0b3I/OiB7IGlkPzogc3RyaW5nOyBpc0xvY2FsSWQ/OiBib29sZWFuIH07XG5cdFx0YmluZGluZ1BhdGg6IHN0cmluZztcblx0XHRwYXlsb2FkOiBvYmplY3Q7XG5cdFx0Y29udHJvbFR5cGU6IHN0cmluZztcblx0XHRhZ2dyZWdhdGlvbk5hbWU6IHN0cmluZztcblx0XHRlbGVtZW50OiBVSTVFbGVtZW50IHwgRWxlbWVudDtcblx0XHRwYXJlbnRTZWxlY3Rvcj86IG9iamVjdDtcblx0fSk6IFByb21pc2U8e1xuXHRcdGNvbnRyb2w6IEVsZW1lbnQgfCBVSTVFbGVtZW50IHwgRWxlbWVudFtdIHwgVUk1RWxlbWVudFtdO1xuXHR9PiB7XG5cdFx0Y29uc3Qgb01vZGlmaWVyID0gbVByb3BlcnR5QmFnLm1vZGlmaWVyLFxuXHRcdFx0b01ldGFNb2RlbCA9IG1Qcm9wZXJ0eUJhZy5hcHBDb21wb25lbnQ/LmdldE1ldGFNb2RlbCgpLFxuXHRcdFx0b0Zvcm0gPSBtUHJvcGVydHlCYWcuZWxlbWVudDtcblxuXHRcdC8vIENoZWNrIGZvciBleGlzdGluZyBmaWVsZHMgd2l0aCB0aGUgc2FtZSBfZmxleElkXG5cdFx0aWYgKG9Nb2RpZmllci50YXJnZXRzID09PSBcInhtbFRyZWVcIikge1xuXHRcdFx0Ly8gYXQgcHJlcHJvY2Vzc2luZyB0aW1lXG5cdFx0XHRjb25zdCBmaWVsZHNJblZpZXcgPSBtUHJvcGVydHlCYWcudmlldz8uZ2V0RWxlbWVudHNCeVRhZ05hbWVOUyhcInNhcC5mZS5tYWNyb3NcIiwgXCJGaWVsZFwiKTtcblx0XHRcdGlmIChmaWVsZHNJblZpZXcpIHtcblx0XHRcdFx0Zm9yIChjb25zdCBmaWVsZCBvZiBBcnJheS5mcm9tKGZpZWxkc0luVmlldykpIHtcblx0XHRcdFx0XHRpZiAoZmllbGQuZ2V0QXR0cmlidXRlKFwiX2ZsZXhJZFwiKSA9PT0gbVByb3BlcnR5QmFnLmZpZWxkU2VsZWN0b3I/LmlkKSB7XG5cdFx0XHRcdFx0XHQvLyBGaWVsZCB3aXRoIHNhbWUgX2ZsZXhJZCBhbHJlYWR5IGV4aXN0cywgcmVqZWN0IFByb21pc2UgdG8gYXZvaWQgZHVwbGljYXRlc1xuXHRcdFx0XHRcdFx0cmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIkZvcm1EZWxlZ2F0ZS5jcmVhdGVMYXlvdXQ6IGZpZWxkIGFscmVhZHkgZXhpc3RzXCIpKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9IGVsc2UgaWYgKG9Nb2RpZmllci50YXJnZXRzID09PSBcImpzQ29udHJvbFRyZWVcIikge1xuXHRcdFx0Ly8gYXQgcnVudGltZVxuXHRcdFx0aWYgKFxuXHRcdFx0XHRtUHJvcGVydHlCYWcuZmllbGRTZWxlY3Rvcj8uaWQgJiZcblx0XHRcdFx0bVByb3BlcnR5QmFnLnZpZXcgJiZcblx0XHRcdFx0KG1Qcm9wZXJ0eUJhZy52aWV3IGFzIHVua25vd24gYXMgWE1MVmlldykuYnlJZChtUHJvcGVydHlCYWcuZmllbGRTZWxlY3Rvcj8uaWQpXG5cdFx0XHQpIHtcblx0XHRcdFx0cmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIkZvcm1EZWxlZ2F0ZS5jcmVhdGVMYXlvdXQ6IGZpZWxkIGFscmVhZHkgZXhpc3RzXCIpKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRjb25zdCBtZXRhUGF0aCA9IChhd2FpdCBEZWxlZ2F0ZVV0aWwuZ2V0Q3VzdG9tRGF0YVdpdGhNb2RpZmllcjxzdHJpbmc+KG9Gb3JtLCBcIm1ldGFQYXRoXCIsIG9Nb2RpZmllcikpID8/IFwiXCI7XG5cdFx0Y29uc3Qgb0Zvcm1Db250YWluZXIgPSBtUHJvcGVydHlCYWcucGFyZW50U2VsZWN0b3Jcblx0XHRcdD8gbVByb3BlcnR5QmFnLm1vZGlmaWVyLmJ5U2VsZWN0b3IobVByb3BlcnR5QmFnLnBhcmVudFNlbGVjdG9yLCBtUHJvcGVydHlCYWcuYXBwQ29tcG9uZW50LCBtUHJvcGVydHlCYWcudmlldylcblx0XHRcdDogdW5kZWZpbmVkO1xuXHRcdGNvbnN0IHNOYXZpZ2F0aW9uUGF0aCA9IG9Gb3JtQ29udGFpbmVyXG5cdFx0XHQ/IGF3YWl0IERlbGVnYXRlVXRpbC5nZXRDdXN0b21EYXRhV2l0aE1vZGlmaWVyPHN0cmluZz4ob0Zvcm1Db250YWluZXIgYXMgVUk1RWxlbWVudCB8IEVsZW1lbnQsIFwibmF2aWdhdGlvblBhdGhcIiwgb01vZGlmaWVyKVxuXHRcdFx0OiBcIlwiO1xuXHRcdGxldCBzQmluZGluZ1BhdGggPSBtZXRhUGF0aC5zdWJzdHJpbmcoMCwgbWV0YVBhdGguaW5kZXhPZihcIkBcIikpO1xuXHRcdHNCaW5kaW5nUGF0aCA9IHNOYXZpZ2F0aW9uUGF0aCA/IGAke3NCaW5kaW5nUGF0aH0ke3NOYXZpZ2F0aW9uUGF0aH0vYCA6IHNCaW5kaW5nUGF0aDtcblx0XHRjb25zdCBvTWV0YU1vZGVsQ29udGV4dCA9IG9NZXRhTW9kZWw/LmdldE1ldGFDb250ZXh0KHNCaW5kaW5nUGF0aC5zdWJzdHJpbmcoMCwgc0JpbmRpbmdQYXRoLmxlbmd0aCAtIDEpKTtcblx0XHRjb25zdCBvUHJvcGVydHlDb250ZXh0ID0gb01ldGFNb2RlbD8uY3JlYXRlQmluZGluZ0NvbnRleHQoYCR7c0JpbmRpbmdQYXRofSR7bVByb3BlcnR5QmFnLmJpbmRpbmdQYXRofWApO1xuXG5cdFx0YXN5bmMgZnVuY3Rpb24gZm5UZW1wbGF0ZUZvcm1FbGVtZW50KFxuXHRcdFx0c0ZyYWdtZW50TmFtZTogc3RyaW5nLFxuXHRcdFx0b1ZpZXc6IEZFVmlldyB8IHVuZGVmaW5lZCxcblx0XHRcdG5hdmlnYXRpb25QYXRoOiBzdHJpbmdcblx0XHQpOiBQcm9taXNlPEVsZW1lbnQgfCBVSTVFbGVtZW50IHwgRWxlbWVudFtdIHwgVUk1RWxlbWVudFtdPiB7XG5cdFx0XHRjb25zdCBzT25DaGFuZ2VDdXN0b21EYXRhID0gYXdhaXQgRGVsZWdhdGVVdGlsLmdldEN1c3RvbURhdGFXaXRoTW9kaWZpZXI8c3RyaW5nPihvRm9ybSwgXCJvbkNoYW5nZVwiLCBvTW9kaWZpZXIpO1xuXHRcdFx0Y29uc3Qgc0Rpc3BsYXlNb2RlQ3VzdG9tRGF0YSA9IGF3YWl0IERlbGVnYXRlVXRpbC5nZXRDdXN0b21EYXRhV2l0aE1vZGlmaWVyPHN0cmluZz4ob0Zvcm0sIFwiZGlzcGxheU1vZGVcIiwgb01vZGlmaWVyKTtcblx0XHRcdGNvbnN0IG9UaGlzID0gbmV3IEpTT05Nb2RlbCh7XG5cdFx0XHRcdC8vIHByb3BlcnRpZXMgYW5kIGV2ZW50cyBvZiBGaWVsZCBtYWNyb1xuXHRcdFx0XHRfZmxleElkOiBtUHJvcGVydHlCYWcuZmllbGRTZWxlY3Rvcj8uaWQsXG5cdFx0XHRcdG9uQ2hhbmdlOiBDb21tb24ucmVtb3ZlRXNjYXBlQ2hhcmFjdGVycyhzT25DaGFuZ2VDdXN0b21EYXRhKSxcblx0XHRcdFx0ZGlzcGxheU1vZGU6IENvbW1vbi5yZW1vdmVFc2NhcGVDaGFyYWN0ZXJzKHNEaXNwbGF5TW9kZUN1c3RvbURhdGEpLFxuXHRcdFx0XHRuYXZpZ2F0aW9uUGF0aDogbmF2aWdhdGlvblBhdGhcblx0XHRcdH0pO1xuXHRcdFx0Y29uc3Qgb1ByZXByb2Nlc3NvclNldHRpbmdzID0ge1xuXHRcdFx0XHRiaW5kaW5nQ29udGV4dHM6IHtcblx0XHRcdFx0XHRlbnRpdHlTZXQ6IG9NZXRhTW9kZWxDb250ZXh0LFxuXHRcdFx0XHRcdGRhdGFGaWVsZDogb1Byb3BlcnR5Q29udGV4dCxcblx0XHRcdFx0XHR0aGlzOiBvVGhpcy5jcmVhdGVCaW5kaW5nQ29udGV4dChcIi9cIilcblx0XHRcdFx0fSxcblx0XHRcdFx0bW9kZWxzOiB7XG5cdFx0XHRcdFx0dGhpczogb1RoaXMsXG5cdFx0XHRcdFx0ZW50aXR5U2V0OiBvTWV0YU1vZGVsLFxuXHRcdFx0XHRcdG1ldGFNb2RlbDogb01ldGFNb2RlbCxcblx0XHRcdFx0XHRkYXRhRmllbGQ6IG9NZXRhTW9kZWxcblx0XHRcdFx0fSxcblx0XHRcdFx0YXBwQ29tcG9uZW50OiBtUHJvcGVydHlCYWcuYXBwQ29tcG9uZW50XG5cdFx0XHR9O1xuXG5cdFx0XHRyZXR1cm4gRGVsZWdhdGVVdGlsLnRlbXBsYXRlQ29udHJvbEZyYWdtZW50KHNGcmFnbWVudE5hbWUsIG9QcmVwcm9jZXNzb3JTZXR0aW5ncywgeyB2aWV3OiBvVmlldyB9LCBvTW9kaWZpZXIpO1xuXHRcdH1cblxuXHRcdGNvbnN0IG9GaWVsZCA9IGF3YWl0IGZuVGVtcGxhdGVGb3JtRWxlbWVudChcblx0XHRcdFwic2FwLmZlLm1hY3Jvcy5mb3JtLkZvcm1FbGVtZW50RmxleGliaWxpdHlcIixcblx0XHRcdG1Qcm9wZXJ0eUJhZy52aWV3IGFzIHVua25vd24gYXMgRkVWaWV3LFxuXHRcdFx0c05hdmlnYXRpb25QYXRoIVxuXHRcdCk7XG5cdFx0cmV0dXJuIHtcblx0XHRcdGNvbnRyb2w6IG9GaWVsZFxuXHRcdH07XG5cdH0sXG5cdC8vIGdldFByb3BlcnR5SW5mbyBpcyBhIHBhdGNoZWQgdmVyc2lvbiBvZiBPRGF0YVY0UmVhZERlbGVnYXRlcyB0byBkZWxhIHdpdGggbmF2aWdhdGlvblBhdGhcblx0Z2V0UHJvcGVydHlJbmZvOiBhc3luYyBmdW5jdGlvbiAobVByb3BlcnR5QmFnOiB7XG5cdFx0ZWxlbWVudDogQ29udHJvbDtcblx0XHRhZ2dyZWdhdGlvbk5hbWU6IHN0cmluZztcblx0XHRwYXlsb2FkOiB7XG5cdFx0XHRtb2RlbE5hbWU/OiBzdHJpbmc7XG5cdFx0XHRwYXRoPzogc3RyaW5nO1xuXHRcdH07XG5cdH0pOiBQcm9taXNlPERlbGVnYXRlUHJvcGVydHlbXT4ge1xuXHRcdGZ1bmN0aW9uIF9pc0NvbXBsZXhUeXBlKG1Qcm9wZXJ0eTogTWV0YU1vZGVsUHJvcGVydHkpOiBib29sZWFuIHtcblx0XHRcdGlmIChtUHJvcGVydHkgJiYgbVByb3BlcnR5LiRUeXBlKSB7XG5cdFx0XHRcdGlmIChtUHJvcGVydHkuJFR5cGUudG9Mb3dlckNhc2UoKS5pbmRleE9mKFwiZWRtXCIpICE9PSAwKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHQvL0NoZWNrIGlmIGEgZ2l2ZW4gcHJvcGVydHkgcGF0aCBzdGFydHMgd2l0aCBhIG5hdmlnYXRpb24gcHJvcGVydHkuXG5cdFx0ZnVuY3Rpb24gX3N0YXJ0c1dpdGhOYXZpZ2F0aW9uUHJvcGVydHkoc1Byb3BlcnR5UGF0aDogc3RyaW5nLCBhTmF2aWdhdGlvblByb3BlcnRpZXM6IHN0cmluZ1tdKTogYm9vbGVhbiB7XG5cdFx0XHRyZXR1cm4gYU5hdmlnYXRpb25Qcm9wZXJ0aWVzLnNvbWUoZnVuY3Rpb24gKHNOYXZQcm9wKSB7XG5cdFx0XHRcdHJldHVybiBzUHJvcGVydHlQYXRoLnN0YXJ0c1dpdGgoc05hdlByb3ApO1xuXHRcdFx0fSk7XG5cdFx0fVxuXG5cdFx0ZnVuY3Rpb24gX2VucmljaFByb3BlcnR5KFxuXHRcdFx0c1Byb3BlcnR5UGF0aDogc3RyaW5nLFxuXHRcdFx0bUVsZW1lbnQ6IE1ldGFNb2RlbFByb3BlcnR5LFxuXHRcdFx0bVByb3BlcnR5QW5ub3RhdGlvbnM6IE1ldGFNb2RlbFByb3BlcnR5QW5ub3RhdGlvbnMsXG5cdFx0XHRzRW50aXR5VHlwZTogc3RyaW5nLFxuXHRcdFx0b0VsZW1lbnQ6IENvbnRyb2wsXG5cdFx0XHRzQWdncmVnYXRpb25OYW1lOiBzdHJpbmcsXG5cdFx0XHRhTmF2aWdhdGlvblByb3BlcnRpZXM6IHN0cmluZ1tdXG5cdFx0KTogRGVsZWdhdGVQcm9wZXJ0eSB7XG5cdFx0XHRjb25zdCBtUHJvcDogRGVsZWdhdGVQcm9wZXJ0eSA9IHtcblx0XHRcdFx0bmFtZTogc1Byb3BlcnR5UGF0aCxcblx0XHRcdFx0YmluZGluZ1BhdGg6IHNQcm9wZXJ0eVBhdGgsXG5cdFx0XHRcdGVudGl0eVR5cGU6IHNFbnRpdHlUeXBlXG5cdFx0XHR9O1xuXHRcdFx0Ly8gZ2V0IGxhYmVsIGluZm9ybWF0aW9uLCBlaXRoZXIgdmlhIERhdGFGaWVsZERlZmF1bHQgYW5ub3RhdGlvbiAoaWYgZXhpc3RzKSBvciBMYWJlbCBhbm5vdGF0aW9uXG5cdFx0XHRjb25zdCBtRGF0YUZpZWxkRGVmYXVsdEFubm90YXRpb24gPSBtUHJvcGVydHlBbm5vdGF0aW9uc1tcblx0XHRcdFx0XCJAY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YUZpZWxkRGVmYXVsdFwiXG5cdFx0XHRdIGFzIE1ldGFNb2RlbFR5cGU8RGF0YUZpZWxkRGVmYXVsdD47XG5cdFx0XHRjb25zdCBzTGFiZWwgPVxuXHRcdFx0XHQobURhdGFGaWVsZERlZmF1bHRBbm5vdGF0aW9uICYmIG1EYXRhRmllbGREZWZhdWx0QW5ub3RhdGlvbi5MYWJlbCkgfHxcblx0XHRcdFx0bVByb3BlcnR5QW5ub3RhdGlvbnNbXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkxhYmVsXCJdO1xuXHRcdFx0bVByb3AubGFiZWwgPSAoc0xhYmVsIGFzIHN0cmluZykgfHwgXCJbTEFCRUxfTUlTU0lORzogXCIgKyBzUHJvcGVydHlQYXRoICsgXCJdXCI7XG5cdFx0XHQvLyBldmFsdWF0ZSBIaWRkZW4gYW5ub3RhdGlvblxuXHRcdFx0Y29uc3QgbUhpZGRlbkFubm90YXRpb24gPSBtUHJvcGVydHlBbm5vdGF0aW9uc1tcIkBjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5IaWRkZW5cIl07XG5cdFx0XHRtUHJvcC5oaWRlRnJvbVJldmVhbCA9IG1IaWRkZW5Bbm5vdGF0aW9uIGFzIGJvb2xlYW47XG5cdFx0XHRpZiAobUhpZGRlbkFubm90YXRpb24gJiYgKG1IaWRkZW5Bbm5vdGF0aW9uIGFzIHsgJFBhdGg/OiBzdHJpbmcgfSkuJFBhdGgpIHtcblx0XHRcdFx0bVByb3AuaGlkZUZyb21SZXZlYWwgPSBvRWxlbWVudC5nZXRCaW5kaW5nQ29udGV4dCgpPy5nZXRQcm9wZXJ0eSgobUhpZGRlbkFubm90YXRpb24gYXMgeyAkUGF0aD86IHN0cmluZyB9KS4kUGF0aCEpO1xuXHRcdFx0fVxuXHRcdFx0Ly8gZXZhbHVhdGUgQWRhcHRhdGlvbkhpZGRlbiBhbm5vdGF0aW9uXG5cdFx0XHRpZiAoIW1Qcm9wLmhpZGVGcm9tUmV2ZWFsKSB7XG5cdFx0XHRcdG1Qcm9wLmhpZGVGcm9tUmV2ZWFsID0gbVByb3BlcnR5QW5ub3RhdGlvbnNbXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuQWRhcHRhdGlvbkhpZGRlblwiXSBhcyBib29sZWFuO1xuXHRcdFx0fVxuXHRcdFx0Ly8gZXZhbHVhdGUgRmllbGRDb250cm9sIGFubm90YXRpb25cblx0XHRcdGxldCBtRmllbGRDb250cm9sQW5ub3RhdGlvbjtcblx0XHRcdGlmICghbVByb3AuaGlkZUZyb21SZXZlYWwpIHtcblx0XHRcdFx0bUZpZWxkQ29udHJvbEFubm90YXRpb24gPSBtUHJvcGVydHlBbm5vdGF0aW9uc1tcIkBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuRmllbGRDb250cm9sXCJdO1xuXHRcdFx0XHRpZiAobUZpZWxkQ29udHJvbEFubm90YXRpb24pIHtcblx0XHRcdFx0XHRtUHJvcC5oaWRlRnJvbVJldmVhbCA9XG5cdFx0XHRcdFx0XHQobUZpZWxkQ29udHJvbEFubm90YXRpb24gYXMgeyAkRW51bU1lbWJlcj86IHN0cmluZyB9KS4kRW51bU1lbWJlciA9PT1cblx0XHRcdFx0XHRcdFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkZpZWxkQ29udHJvbFR5cGUvSGlkZGVuXCI7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdC8vIEBydW50aW1lIGhpZGRlbiBieSBmaWVsZCBjb250cm9sIHZhbHVlID0gMFxuXHRcdFx0bUZpZWxkQ29udHJvbEFubm90YXRpb24gPSBtUHJvcGVydHlBbm5vdGF0aW9uc1tcIkBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuRmllbGRDb250cm9sXCJdO1xuXHRcdFx0Y29uc3Qgc0ZpZWxkQ29udHJvbFBhdGggPSBtRmllbGRDb250cm9sQW5ub3RhdGlvbiAmJiAobUZpZWxkQ29udHJvbEFubm90YXRpb24gYXMgeyAkUGF0aD86IHN0cmluZyB9KS4kUGF0aDtcblx0XHRcdGlmIChzRmllbGRDb250cm9sUGF0aCAmJiAhbVByb3AuaGlkZUZyb21SZXZlYWwpIHtcblx0XHRcdFx0Ly8gaWYgdGhlIGJpbmRpbmcgaXMgYSBsaXN0IGJpbmRpbmcsIHNraXAgdGhlIGNoZWNrIGZvciBmaWVsZCBjb250cm9sXG5cdFx0XHRcdGNvbnN0IGJMaXN0QmluZGluZyA9IG9FbGVtZW50LmdldEJpbmRpbmcoc0FnZ3JlZ2F0aW9uTmFtZSkgaW5zdGFuY2VvZiBMaXN0QmluZGluZztcblx0XHRcdFx0aWYgKCFiTGlzdEJpbmRpbmcpIHtcblx0XHRcdFx0XHRjb25zdCBpRmllbGRDb250cm9sVmFsdWUgPSBvRWxlbWVudC5nZXRCaW5kaW5nQ29udGV4dCgpPy5nZXRQcm9wZXJ0eShzRmllbGRDb250cm9sUGF0aCk7XG5cdFx0XHRcdFx0bVByb3AuaGlkZUZyb21SZXZlYWwgPSBpRmllbGRDb250cm9sVmFsdWUgPT09IDA7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdC8vIG5vIHN1cHBvcnQgZm9yIERhdGFGaWVsZEZvci9XaXRoQWN0aW9uIGFuZCBEYXRhRmllbGRGb3IvV2l0aEludGVudEJhc2VkTmF2aWdhdGlvbiB3aXRoaW4gRGF0YUZpZWxkRGVmYXVsdCBhbm5vdGF0aW9uXG5cdFx0XHRpZiAoXG5cdFx0XHRcdG1EYXRhRmllbGREZWZhdWx0QW5ub3RhdGlvbiAmJlxuXHRcdFx0XHQobURhdGFGaWVsZERlZmF1bHRBbm5vdGF0aW9uLiRUeXBlID09PSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkRhdGFGaWVsZEZvckFjdGlvblwiIHx8XG5cdFx0XHRcdFx0bURhdGFGaWVsZERlZmF1bHRBbm5vdGF0aW9uLiRUeXBlID09PSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkRhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvblwiIHx8XG5cdFx0XHRcdFx0bURhdGFGaWVsZERlZmF1bHRBbm5vdGF0aW9uLiRUeXBlID09PSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkRhdGFGaWVsZFdpdGhBY3Rpb25cIiB8fFxuXHRcdFx0XHRcdG1EYXRhRmllbGREZWZhdWx0QW5ub3RhdGlvbi4kVHlwZSA9PT0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhRmllbGRXaXRoSW50ZW50QmFzZWROYXZpZ2F0aW9uXCIpXG5cdFx0XHQpIHtcblx0XHRcdFx0bVByb3AudW5zdXBwb3J0ZWQgPSB0cnVlO1xuXHRcdFx0fVxuXHRcdFx0Ly8gbm8gc3VwcG9ydCBmb3IgbmF2aWdhdGlvbiBwcm9wZXJ0aWVzIGFuZCBjb21wbGV4IHByb3BlcnRpZXNcblx0XHRcdGlmIChfc3RhcnRzV2l0aE5hdmlnYXRpb25Qcm9wZXJ0eShzUHJvcGVydHlQYXRoLCBhTmF2aWdhdGlvblByb3BlcnRpZXMpIHx8IF9pc0NvbXBsZXhUeXBlKG1FbGVtZW50KSkge1xuXHRcdFx0XHRtUHJvcC51bnN1cHBvcnRlZCA9IHRydWU7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gbVByb3A7XG5cdFx0fVxuXG5cdFx0Ly8gQ29udmVydCBtZXRhZGF0YSBmb3JtYXQgdG8gZGVsZWdhdGUgZm9ybWF0LlxuXHRcdGZ1bmN0aW9uIF9jb252ZXJ0TWV0YWRhdGFUb0RlbGVnYXRlRm9ybWF0KFxuXHRcdFx0bU9EYXRhRW50aXR5VHlwZTogTWV0YU1vZGVsRW50aXR5VHlwZSxcblx0XHRcdHNFbnRpdHlUeXBlOiBzdHJpbmcsXG5cdFx0XHRvTWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbCxcblx0XHRcdG9FbGVtZW50OiBDb250cm9sLFxuXHRcdFx0c0FnZ3JlZ2F0aW9uTmFtZTogc3RyaW5nXG5cdFx0KTogRGVsZWdhdGVQcm9wZXJ0eVtdIHtcblx0XHRcdGNvbnN0IGFQcm9wZXJ0aWVzID0gW107XG5cdFx0XHRsZXQgc0VsZW1lbnROYW1lID0gXCJcIjtcblx0XHRcdGNvbnN0IGFOYXZpZ2F0aW9uUHJvcGVydGllcyA9IFtdO1xuXHRcdFx0bGV0IG1FbGVtZW50O1xuXHRcdFx0Zm9yIChzRWxlbWVudE5hbWUgaW4gbU9EYXRhRW50aXR5VHlwZSkge1xuXHRcdFx0XHRtRWxlbWVudCA9IG1PRGF0YUVudGl0eVR5cGVbc0VsZW1lbnROYW1lXTtcblx0XHRcdFx0aWYgKG1FbGVtZW50LiRraW5kID09PSBcIk5hdmlnYXRpb25Qcm9wZXJ0eVwiKSB7XG5cdFx0XHRcdFx0YU5hdmlnYXRpb25Qcm9wZXJ0aWVzLnB1c2goc0VsZW1lbnROYW1lKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0Zm9yIChzRWxlbWVudE5hbWUgaW4gbU9EYXRhRW50aXR5VHlwZSkge1xuXHRcdFx0XHRtRWxlbWVudCA9IG1PRGF0YUVudGl0eVR5cGVbc0VsZW1lbnROYW1lXTtcblx0XHRcdFx0aWYgKG1FbGVtZW50LiRraW5kID09PSBcIlByb3BlcnR5XCIpIHtcblx0XHRcdFx0XHRjb25zdCBtUHJvcEFubm90YXRpb25zID0gb01ldGFNb2RlbC5nZXRPYmplY3QoXCIvXCIgKyBzRW50aXR5VHlwZSArIFwiL1wiICsgc0VsZW1lbnROYW1lICsgXCJAXCIpO1xuXHRcdFx0XHRcdGNvbnN0IG1Qcm9wID0gX2VucmljaFByb3BlcnR5KFxuXHRcdFx0XHRcdFx0c0VsZW1lbnROYW1lLFxuXHRcdFx0XHRcdFx0bUVsZW1lbnQgYXMgTWV0YU1vZGVsUHJvcGVydHksXG5cdFx0XHRcdFx0XHRtUHJvcEFubm90YXRpb25zLFxuXHRcdFx0XHRcdFx0c0VudGl0eVR5cGUsXG5cdFx0XHRcdFx0XHRvRWxlbWVudCxcblx0XHRcdFx0XHRcdHNBZ2dyZWdhdGlvbk5hbWUsXG5cdFx0XHRcdFx0XHRhTmF2aWdhdGlvblByb3BlcnRpZXNcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdGFQcm9wZXJ0aWVzLnB1c2gobVByb3ApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gYVByb3BlcnRpZXM7XG5cdFx0fVxuXG5cdFx0Ly9HZXQgYmluZGluZyBwYXRoIGVpdGhlciBmcm9tIHBheWxvYWQgKGlmIGF2YWlsYWJsZSkgb3IgdGhlIGVsZW1lbnQncyBiaW5kaW5nIGNvbnRleHQuXG5cdFx0ZnVuY3Rpb24gX2dldEJpbmRpbmdQYXRoKFxuXHRcdFx0b0VsZW1lbnQ6IENvbnRyb2wsXG5cdFx0XHRtUGF5bG9hZDoge1xuXHRcdFx0XHRwYXRoPzogc3RyaW5nO1xuXHRcdFx0fVxuXHRcdCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdFx0XHRpZiAobVBheWxvYWQucGF0aCkge1xuXHRcdFx0XHRyZXR1cm4gbVBheWxvYWQucGF0aDtcblx0XHRcdH1cblx0XHRcdGNvbnN0IHZCaW5kaW5nID0gb0VsZW1lbnQuZ2V0QmluZGluZ0NvbnRleHQoKTtcblx0XHRcdGlmICh2QmluZGluZykge1xuXHRcdFx0XHRpZiAob0VsZW1lbnQuZGF0YShcIm5hdmlnYXRpb25QYXRoXCIpKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHZCaW5kaW5nLmdldFBhdGgoKSArIFwiL1wiICsgb0VsZW1lbnQuZGF0YShcIm5hdmlnYXRpb25QYXRoXCIpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiB2QmluZGluZy5nZXRQYXRoKCk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly9HZXQgYWxsIHByb3BlcnRpZXMgb2YgdGhlIGVsZW1lbnQncyBtb2RlbC5cblx0XHRhc3luYyBmdW5jdGlvbiBfZ2V0T0RhdGFQcm9wZXJ0aWVzT2ZNb2RlbChcblx0XHRcdG9FbGVtZW50OiBDb250cm9sLFxuXHRcdFx0c0FnZ3JlZ2F0aW9uTmFtZTogc3RyaW5nLFxuXHRcdFx0bVBheWxvYWQ6IHtcblx0XHRcdFx0bW9kZWxOYW1lPzogc3RyaW5nO1xuXHRcdFx0XHRwYXRoPzogc3RyaW5nO1xuXHRcdFx0fVxuXHRcdCk6IFByb21pc2U8RGVsZWdhdGVQcm9wZXJ0eVtdPiB7XG5cdFx0XHRjb25zdCBvTW9kZWwgPSBvRWxlbWVudC5nZXRNb2RlbChtUGF5bG9hZC5tb2RlbE5hbWUpO1xuXHRcdFx0aWYgKG9Nb2RlbCkge1xuXHRcdFx0XHRpZiAob01vZGVsLmlzQShcInNhcC51aS5tb2RlbC5vZGF0YS52NC5PRGF0YU1vZGVsXCIpKSB7XG5cdFx0XHRcdFx0Y29uc3Qgb01ldGFNb2RlbCA9IG9Nb2RlbC5nZXRNZXRhTW9kZWwoKSBhcyBPRGF0YU1ldGFNb2RlbDtcblx0XHRcdFx0XHRjb25zdCBzQmluZGluZ0NvbnRleHRQYXRoID0gX2dldEJpbmRpbmdQYXRoKG9FbGVtZW50LCBtUGF5bG9hZCk7XG5cdFx0XHRcdFx0aWYgKHNCaW5kaW5nQ29udGV4dFBhdGgpIHtcblx0XHRcdFx0XHRcdGNvbnN0IG9NZXRhTW9kZWxDb250ZXh0ID0gb01ldGFNb2RlbC5nZXRNZXRhQ29udGV4dChzQmluZGluZ0NvbnRleHRQYXRoKTtcblx0XHRcdFx0XHRcdGNvbnN0IG9NZXRhTW9kZWxDb250ZXh0T2JqZWN0ID0gb01ldGFNb2RlbENvbnRleHQuZ2V0T2JqZWN0KCk7XG5cdFx0XHRcdFx0XHRjb25zdCBtT0RhdGFFbnRpdHlUeXBlID0gb01ldGFNb2RlbENvbnRleHQuZ2V0T2JqZWN0KG9NZXRhTW9kZWxDb250ZXh0T2JqZWN0LiRUeXBlKTtcblx0XHRcdFx0XHRcdHJldHVybiBfY29udmVydE1ldGFkYXRhVG9EZWxlZ2F0ZUZvcm1hdChcblx0XHRcdFx0XHRcdFx0bU9EYXRhRW50aXR5VHlwZSxcblx0XHRcdFx0XHRcdFx0b01ldGFNb2RlbENvbnRleHRPYmplY3QuJFR5cGUsXG5cdFx0XHRcdFx0XHRcdG9NZXRhTW9kZWwsXG5cdFx0XHRcdFx0XHRcdG9FbGVtZW50LFxuXHRcdFx0XHRcdFx0XHRzQWdncmVnYXRpb25OYW1lXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZShbXSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oYXN5bmMgZnVuY3Rpb24gKCkge1xuXHRcdFx0cmV0dXJuIF9nZXRPRGF0YVByb3BlcnRpZXNPZk1vZGVsKG1Qcm9wZXJ0eUJhZy5lbGVtZW50LCBtUHJvcGVydHlCYWcuYWdncmVnYXRpb25OYW1lLCBtUHJvcGVydHlCYWcucGF5bG9hZCk7XG5cdFx0fSk7XG5cdH1cbn07XG5cbmV4cG9ydCBkZWZhdWx0IERlbGVnYXRlO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0VBd0JBLE1BQU1BLFFBQVEsR0FBRztJQUNoQjtBQUNEO0FBQ0E7QUFDQTtBQUNB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
@@ -80,20 +80,17 @@ const Delegate = {
80
80
  }
81
81
  }
82
82
 
83
- let sEntitySet = await DelegateUtil.getCustomDataWithModifier<string>(oForm, "entitySet", oModifier);
84
- if (!sEntitySet) {
85
- sEntitySet = await DelegateUtil.getCustomDataWithModifier<string>(oForm, "navigationPath", oModifier);
86
- }
87
- const sPath = sEntitySet!.startsWith("/") ? `${sEntitySet}` : `/${sEntitySet}`;
83
+ const metaPath = (await DelegateUtil.getCustomDataWithModifier<string>(oForm, "metaPath", oModifier)) ?? "";
88
84
  const oFormContainer = mPropertyBag.parentSelector
89
85
  ? mPropertyBag.modifier.bySelector(mPropertyBag.parentSelector, mPropertyBag.appComponent, mPropertyBag.view)
90
86
  : undefined;
91
87
  const sNavigationPath = oFormContainer
92
88
  ? await DelegateUtil.getCustomDataWithModifier<string>(oFormContainer as UI5Element | Element, "navigationPath", oModifier)
93
89
  : "";
94
- const sBindingPath = sNavigationPath ? `${sPath}/${sNavigationPath}` : sPath;
95
- const oMetaModelContext = oMetaModel?.getMetaContext(sBindingPath);
96
- const oPropertyContext = oMetaModel?.createBindingContext(`${sBindingPath}/${mPropertyBag.bindingPath}`);
90
+ let sBindingPath = metaPath.substring(0, metaPath.indexOf("@"));
91
+ sBindingPath = sNavigationPath ? `${sBindingPath}${sNavigationPath}/` : sBindingPath;
92
+ const oMetaModelContext = oMetaModel?.getMetaContext(sBindingPath.substring(0, sBindingPath.length - 1));
93
+ const oPropertyContext = oMetaModel?.createBindingContext(`${sBindingPath}${mPropertyBag.bindingPath}`);
97
94
 
98
95
  async function fnTemplateFormElement(
99
96
  sFragmentName: string,
@@ -217,7 +217,8 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/base/ClassS
217
217
  const emptyIndicatorMode = this.formatOptions?.showEmptyIndicator ?? false ? "On" : undefined;
218
218
  const objectStatusNumber = buildFieldBindingExpression(dataModelPath, this.formatOptions, true);
219
219
  const limitShowDecimals = this.getManifestWrapper()?.getSapFeManifestConfiguration()?.app?.showOnlyUnitDecimals === true;
220
- const unit = this.formatOptions?.measureDisplayMode === "Hidden" ? undefined : compileExpression(UIFormatters.getBindingForUnitOrCurrency(this.valueDataModelPath, true, limitShowDecimals));
220
+ const preserveDecimalsForCurrency = this.getManifestWrapper()?.getSapFeManifestConfiguration()?.app?.preserveDecimalsForCurrency === true;
221
+ const unit = this.formatOptions?.measureDisplayMode === "Hidden" ? undefined : compileExpression(UIFormatters.getBindingForUnitOrCurrency(this.valueDataModelPath, true, limitShowDecimals, preserveDecimalsForCurrency));
221
222
  return _jsx(ObjectNumber, {
222
223
  id: this.idPrefix ? generate([this.idPrefix, "ObjectNumber-Field-display"]) : undefined,
223
224
  state: criticalityColorExpression,
@@ -381,4 +382,4 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/base/ClassS
381
382
  _exports = DataPoint;
382
383
  return _exports;
383
384
  }, false);
384
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJEYXRhUG9pbnQiLCJfZGVjIiwiZGVmaW5lVUk1Q2xhc3MiLCJfZGVjMiIsImFzc29jaWF0aW9uIiwidHlwZSIsIl9kZWMzIiwicHJvcGVydHkiLCJyZXF1aXJlZCIsIl9kZWM0IiwiX2RlYzUiLCJhZ2dyZWdhdGlvbiIsIm11bHRpcGxlIiwiZGVmYXVsdENsYXNzIiwiRGF0YVBvaW50Rm9ybWF0T3B0aW9ucyIsIl9kZWM2IiwiaXNCaW5kaW5nSW5mbyIsIl9jbGFzcyIsIl9jbGFzczIiLCJfQnVpbGRpbmdCbG9jayIsInByb3BlcnRpZXMiLCJvdGhlcnMiLCJfdGhpcyIsImNhbGwiLCJfaW5pdGlhbGl6ZXJEZWZpbmVQcm9wZXJ0eSIsIl9kZXNjcmlwdG9yIiwiX2Rlc2NyaXB0b3IyIiwiX2Rlc2NyaXB0b3IzIiwiX2Rlc2NyaXB0b3I0IiwiX2Rlc2NyaXB0b3I1IiwiaGFzUXVpY2tWaWV3IiwiX2V4cG9ydHMiLCJfaW5oZXJpdHNMb29zZSIsIl9wcm90byIsInByb3RvdHlwZSIsIm9uTWV0YWRhdGFBdmFpbGFibGUiLCJnZXRUZW1wbGF0aW5nT2JqZWN0cyIsImNvbnRlbnQiLCJjcmVhdGVDb250ZW50IiwiaW50ZXJuYWxEYXRhTW9kZWxQYXRoIiwiZ2V0RGF0YU1vZGVsT2JqZWN0Rm9yTWV0YVBhdGgiLCJtZXRhUGF0aCIsImNvbnRleHRQYXRoIiwiaW50ZXJuYWxWYWx1ZURhdGFNb2RlbFBhdGgiLCJ2aXNpYmxlIiwiZ2V0VmlzaWJsZUV4cHJlc3Npb24iLCJ0YXJnZXRPYmplY3QiLCJWYWx1ZSIsInBhdGgiLCJlbmhhbmNlRGF0YU1vZGVsUGF0aCIsImRhdGFNb2RlbFBhdGgiLCJ2YWx1ZURhdGFNb2RlbFBhdGgiLCJnZXREYXRhUG9pbnRWaXN1YWxpemF0aW9uIiwiVmlzdWFsaXphdGlvbiIsInZpc3VhbGl6YXRpb24iLCJ2YWx1ZVByb3BlcnR5IiwiaXNVc2VkSW5OYXZpZ2F0aW9uV2l0aFF1aWNrVmlld0ZhY2V0cyIsImdldFByb3BlcnR5V2l0aFNlbWFudGljT2JqZWN0IiwiaXNQcm9wZXJ0eSIsImhhc1VuaXQiLCJoYXNDdXJyZW5jeSIsImdldEVuYWJsZWQiLCJpc0EiLCJnZXRBY3RpdmUiLCJzZXRFbmFibGVkIiwiZW5hYmxlZCIsInNldFByb3BlcnR5IiwiY3JlYXRlUmF0aW5nSW5kaWNhdG9yIiwiZGF0YVBvaW50VGFyZ2V0IiwidGFyZ2V0VmFsdWUiLCJnZXRUYXJnZXRWYWx1ZUJpbmRpbmciLCJkYXRhUG9pbnRWYWx1ZSIsInByb3BlcnR5VHlwZSIsIiR0YXJnZXQiLCJudW1iZXJPZkZyYWN0aW9uYWxEaWdpdHMiLCJWYWx1ZUZvcm1hdCIsIk51bWJlck9mRnJhY3Rpb25hbERpZ2l0cyIsInZhbHVlIiwiZ2V0VmFsdWVGb3JtYXR0ZWQiLCJfanN4IiwiUmF0aW5nSW5kaWNhdG9yIiwiaWQiLCJpZFByZWZpeCIsImdlbmVyYXRlIiwidW5kZWZpbmVkIiwibWF4VmFsdWUiLCJjb21waWxlRXhwcmVzc2lvbiIsInRvb2x0aXAiLCJnZXRUb29sdGlwVmFsdWUiLCJpY29uU2l6ZSIsImZvcm1hdE9wdGlvbnMiLCJjbGFzcyIsInNob3dMYWJlbHMiLCJlZGl0YWJsZSIsImFyaWFMYWJlbGxlZEJ5IiwiY3JlYXRlUHJvZ3Jlc3NJbmRpY2F0b3IiLCJjcml0aWNhbGl0eUNvbG9yRXhwcmVzc2lvbiIsImJ1aWxkRXhwcmVzc2lvbkZvckNyaXRpY2FsaXR5Q29sb3IiLCJkaXNwbGF5VmFsdWUiLCJidWlsZEV4cHJlc3Npb25Gb3JQcm9ncmVzc0luZGljYXRvckRpc3BsYXlWYWx1ZSIsInBlcmNlbnRWYWx1ZSIsImJ1aWxkRXhwcmVzc2lvbkZvclByb2dyZXNzSW5kaWNhdG9yUGVyY2VudFZhbHVlIiwiUHJvZ3Jlc3NJbmRpY2F0b3IiLCJzdGF0ZSIsImNyZWF0ZU9iamVjdE51bWJlciIsImVtcHR5SW5kaWNhdG9yTW9kZSIsInNob3dFbXB0eUluZGljYXRvciIsIm9iamVjdFN0YXR1c051bWJlciIsImJ1aWxkRmllbGRCaW5kaW5nRXhwcmVzc2lvbiIsImxpbWl0U2hvd0RlY2ltYWxzIiwiZ2V0TWFuaWZlc3RXcmFwcGVyIiwiZ2V0U2FwRmVNYW5pZmVzdENvbmZpZ3VyYXRpb24iLCJhcHAiLCJzaG93T25seVVuaXREZWNpbWFscyIsInVuaXQiLCJtZWFzdXJlRGlzcGxheU1vZGUiLCJVSUZvcm1hdHRlcnMiLCJnZXRCaW5kaW5nRm9yVW5pdE9yQ3VycmVuY3kiLCJPYmplY3ROdW1iZXIiLCJudW1iZXIiLCJlbXBoYXNpemVkIiwiZGF0YVBvaW50U3R5bGUiLCJjcmVhdGVEZXBlbmRlbnRzIiwiUXVpY2tWaWV3IiwiY3JlYXRlT2JqZWN0U3RhdHVzIiwib2JqZWN0U3RhdHVzVGV4dCIsImljb25FeHByZXNzaW9uIiwiYnVpbGRFeHByZXNzaW9uRm9yQ3JpdGljYWxpdHlJY29uIiwiT2JqZWN0U3RhdHVzIiwiaWNvbiIsInRleHQiLCJhY3RpdmUiLCJwcmVzcyIsIkZpZWxkUnVudGltZUhlbHBlciIsInByZXNzTGluayIsInJlYWN0aXZlQXJlYU1vZGUiLCJjaGlsZHJlbiIsImRlcGVuZGVudHMiLCJhbm5vdGF0aW9ucyIsIkNvbW1vbiIsIlF1aWNrSW5mbyIsImdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbiIsImdldFJlbGF0aXZlUGF0aHMiLCJUYXJnZXRWYWx1ZSIsImdldFZhbHVlIiwiZ2V0VGV4dCIsImdldE51bWJlciIsImdldERpc3BsYXlWYWx1ZSIsInRvU3RyaW5nIiwiZ2V0UHJvcGVydHkiLCJzZXRWYWx1ZSIsInNldFRleHQiLCJzZXROdW1iZXIiLCJMb2ciLCJlcnJvciIsIkJ1aWxkaW5nQmxvY2siLCJfYXBwbHlEZWNvcmF0ZWREZXNjcmlwdG9yIiwiY29uZmlndXJhYmxlIiwiZW51bWVyYWJsZSIsIndyaXRhYmxlIiwiaW5pdGlhbGl6ZXIiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIkRhdGFQb2ludC50c3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBQcm9wZXJ0eSB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlc1wiO1xuaW1wb3J0IHsgVmlzdWFsaXphdGlvblR5cGUsIHR5cGUgRGF0YVBvaW50VHlwZSB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvVUlcIjtcbmltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IHR5cGUgeyBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB9IGZyb20gXCJzYXAvZmUvYmFzZS9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0IHsgY29tcGlsZUV4cHJlc3Npb24sIGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbiwgdHlwZSBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24gfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCB7IGFnZ3JlZ2F0aW9uLCBhc3NvY2lhdGlvbiwgZGVmaW5lVUk1Q2xhc3MsIHByb3BlcnR5LCB0eXBlIFByb3BlcnRpZXNPZiB9IGZyb20gXCJzYXAvZmUvYmFzZS9DbGFzc1N1cHBvcnRcIjtcbmltcG9ydCBCdWlsZGluZ0Jsb2NrIGZyb20gXCJzYXAvZmUvY29yZS9idWlsZGluZ0Jsb2Nrcy9CdWlsZGluZ0Jsb2NrXCI7XG5pbXBvcnQgeyBnZW5lcmF0ZSB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1N0YWJsZUlkSGVscGVyXCI7XG5pbXBvcnQgeyBpc1Byb3BlcnR5IH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvVHlwZUd1YXJkc1wiO1xuaW1wb3J0IHsgYnVpbGRFeHByZXNzaW9uRm9yQ3JpdGljYWxpdHlDb2xvciwgYnVpbGRFeHByZXNzaW9uRm9yQ3JpdGljYWxpdHlJY29uIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvQ3JpdGljYWxpdHlGb3JtYXR0ZXJzXCI7XG5pbXBvcnQgdHlwZSB7IERhdGFNb2RlbE9iamVjdFBhdGggfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9EYXRhTW9kZWxQYXRoSGVscGVyXCI7XG5pbXBvcnQgeyBlbmhhbmNlRGF0YU1vZGVsUGF0aCwgZ2V0UmVsYXRpdmVQYXRocyB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0RhdGFNb2RlbFBhdGhIZWxwZXJcIjtcbmltcG9ydCB7IGhhc0N1cnJlbmN5LCBoYXNVbml0IH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvUHJvcGVydHlIZWxwZXJcIjtcbmltcG9ydCB7IGdldFByb3BlcnR5V2l0aFNlbWFudGljT2JqZWN0IH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvU2VtYW50aWNPYmplY3RIZWxwZXJcIjtcbmltcG9ydCAqIGFzIFVJRm9ybWF0dGVycyBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9VSUZvcm1hdHRlcnNcIjtcbmltcG9ydCB7IGdldFZpc2libGVFeHByZXNzaW9uLCBpc1VzZWRJbk5hdmlnYXRpb25XaXRoUXVpY2tWaWV3RmFjZXRzIH0gZnJvbSBcInNhcC9mZS9tYWNyb3MvZmllbGQvRmllbGRUZW1wbGF0aW5nXCI7XG5pbXBvcnQge1xuXHRidWlsZEV4cHJlc3Npb25Gb3JQcm9ncmVzc0luZGljYXRvckRpc3BsYXlWYWx1ZSxcblx0YnVpbGRFeHByZXNzaW9uRm9yUHJvZ3Jlc3NJbmRpY2F0b3JQZXJjZW50VmFsdWUsXG5cdGJ1aWxkRmllbGRCaW5kaW5nRXhwcmVzc2lvbixcblx0Z2V0VmFsdWVGb3JtYXR0ZWRcbn0gZnJvbSBcInNhcC9mZS9tYWNyb3MvaW50ZXJuYWwvaGVscGVycy9EYXRhUG9pbnRUZW1wbGF0aW5nXCI7XG5pbXBvcnQgUXVpY2tWaWV3IGZyb20gXCJzYXAvZmUvbWFjcm9zL3F1aWNrVmlldy9RdWlja1ZpZXdcIjtcbmltcG9ydCBPYmplY3ROdW1iZXIgZnJvbSBcInNhcC9tL09iamVjdE51bWJlclwiO1xuaW1wb3J0IHR5cGUgeyBPYmplY3RTdGF0dXMkUHJlc3NFdmVudCB9IGZyb20gXCJzYXAvbS9PYmplY3RTdGF0dXNcIjtcbmltcG9ydCBPYmplY3RTdGF0dXMgZnJvbSBcInNhcC9tL09iamVjdFN0YXR1c1wiO1xuaW1wb3J0IFByb2dyZXNzSW5kaWNhdG9yIGZyb20gXCJzYXAvbS9Qcm9ncmVzc0luZGljYXRvclwiO1xuaW1wb3J0IFJhdGluZ0luZGljYXRvciBmcm9tIFwic2FwL20vUmF0aW5nSW5kaWNhdG9yXCI7XG5pbXBvcnQgdHlwZSBDb250cm9sIGZyb20gXCJzYXAvdWkvY29yZS9Db250cm9sXCI7XG5pbXBvcnQgdHlwZSB7ICRDb250cm9sU2V0dGluZ3MgfSBmcm9tIFwic2FwL3VpL2NvcmUvQ29udHJvbFwiO1xuaW1wb3J0IHR5cGUgTWRjTGluayBmcm9tIFwic2FwL3VpL21kYy9MaW5rXCI7XG5pbXBvcnQgRmllbGRSdW50aW1lSGVscGVyIGZyb20gXCIuLi9maWVsZC9GaWVsZFJ1bnRpbWVIZWxwZXJcIjtcbmltcG9ydCBEYXRhUG9pbnRGb3JtYXRPcHRpb25zIGZyb20gXCIuL0RhdGFQb2ludEZvcm1hdE9wdGlvbnNcIjtcblxuQGRlZmluZVVJNUNsYXNzKFwic2FwLmZlLm1hY3Jvcy5pbnRlcm5hbC5EYXRhUG9pbnRcIilcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERhdGFQb2ludCBleHRlbmRzIEJ1aWxkaW5nQmxvY2s8Q29udHJvbD4ge1xuXHQvKipcblx0ICogUHJlZml4IGFkZGVkIHRvIHRoZSBnZW5lcmF0ZWQgSUQgb2YgdGhlIGZpZWxkXG5cdCAqL1xuXHRAYXNzb2NpYXRpb24oe1xuXHRcdHR5cGU6IFwic3RyaW5nXCJcblx0fSlcblx0cHVibGljIGlkUHJlZml4Pzogc3RyaW5nO1xuXG5cdC8qKlxuXHQgKiBNZXRhZGF0YSBwYXRoIHRvIHRoZSBkYXRhUG9pbnQuXG5cdCAqL1xuXHRAcHJvcGVydHkoe1xuXHRcdHR5cGU6IFwic3RyaW5nXCIsXG5cdFx0cmVxdWlyZWQ6IHRydWVcblx0fSlcblx0cHVibGljIG1ldGFQYXRoITogc3RyaW5nO1xuXG5cdEBwcm9wZXJ0eSh7XG5cdFx0dHlwZTogXCJzdHJpbmdcIlxuXHR9KVxuXHRwdWJsaWMgY29udGV4dFBhdGg/OiBzdHJpbmc7XG5cblx0QGFnZ3JlZ2F0aW9uKHsgdHlwZTogXCJzYXAuZmUubWFjcm9zLmludGVybmFsLkRhdGFQb2ludEZvcm1hdE9wdGlvbnNcIiwgbXVsdGlwbGU6IGZhbHNlLCBkZWZhdWx0Q2xhc3M6IERhdGFQb2ludEZvcm1hdE9wdGlvbnMgfSlcblx0Zm9ybWF0T3B0aW9ucyE6IERhdGFQb2ludEZvcm1hdE9wdGlvbnM7XG5cblx0LyoqXG5cdCAqIFByb3BlcnR5IHRvIHNldCBhbiBleHRlcm5hbCB2YWx1ZSB0aGF0IGNvbWVzIGZyb20gYSBkaWZmZXJlbnQgbW9kZWwgdGhhbiB0aGUgb0RhdGEgbW9kZWxcblx0ICovXG5cdEBwcm9wZXJ0eSh7XG5cdFx0dHlwZTogXCJzdHJpbmdcIixcblx0XHRpc0JpbmRpbmdJbmZvOiB0cnVlXG5cdH0pXG5cdHB1YmxpYyB2YWx1ZT86IHN0cmluZztcblxuXHQvKipcblx0ICogUHJvcGVydHkgdG8gc2V0IHRoZSB2aXN1YWxpemF0aW9uIHR5cGVcblx0ICovXG5cdHByaXZhdGUgdmlzdWFsaXphdGlvbj86IHN0cmluZztcblxuXHQvKipcblx0ICogUHJvcGVydHkgdG8gc2V0IHRoZSB2aXNpYmlsaXR5XG5cdCAqL1xuXHRwcml2YXRlIHZpc2libGU6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uO1xuXG5cdC8qKlxuXHQgKiBQcm9wZXJ0eSB0byBzZXQgcHJvcGVydHkgaWYgdGhlIHByb3BlcnR5IGhhcyBhIFF1aWNrdmlld1xuXHQgKi9cblx0cHJpdmF0ZSBoYXNRdWlja1ZpZXcgPSBmYWxzZTtcblxuXHRwcml2YXRlIGRhdGFNb2RlbFBhdGg/OiBEYXRhTW9kZWxPYmplY3RQYXRoPERhdGFQb2ludFR5cGU+O1xuXG5cdHByaXZhdGUgdmFsdWVEYXRhTW9kZWxQYXRoPzogRGF0YU1vZGVsT2JqZWN0UGF0aDxQcm9wZXJ0eT47XG5cblx0Y29uc3RydWN0b3IocHJvcGVydGllczogJENvbnRyb2xTZXR0aW5ncyAmIFByb3BlcnRpZXNPZjxEYXRhUG9pbnQ+LCBvdGhlcnM/OiAkQ29udHJvbFNldHRpbmdzKSB7XG5cdFx0c3VwZXIocHJvcGVydGllcywgb3RoZXJzKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBIYW5kbGVyIGZvciB0aGUgb25NZXRhZGF0YUF2YWlsYWJsZSBldmVudC5cblx0ICovXG5cdG9uTWV0YWRhdGFBdmFpbGFibGUoKTogdm9pZCB7XG5cdFx0dGhpcy5nZXRUZW1wbGF0aW5nT2JqZWN0cygpO1xuXHRcdGlmICghdGhpcy5jb250ZW50KSB7XG5cdFx0XHR0aGlzLmNvbnRlbnQgPSB0aGlzLmNyZWF0ZUNvbnRlbnQoKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogRnVuY3Rpb24gdG8gZ2V0IHRoZSB0ZW1wbGF0aW5nIG9iamVjdHMuXG5cdCAqL1xuXHRwcml2YXRlIGdldFRlbXBsYXRpbmdPYmplY3RzKCk6IHZvaWQge1xuXHRcdGNvbnN0IGludGVybmFsRGF0YU1vZGVsUGF0aCA9IHRoaXMuZ2V0RGF0YU1vZGVsT2JqZWN0Rm9yTWV0YVBhdGg8RGF0YVBvaW50VHlwZT4odGhpcy5tZXRhUGF0aCwgdGhpcy5jb250ZXh0UGF0aCk7XG5cdFx0aWYgKCFpbnRlcm5hbERhdGFNb2RlbFBhdGgpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0bGV0IGludGVybmFsVmFsdWVEYXRhTW9kZWxQYXRoO1xuXHRcdHRoaXMudmlzaWJsZSA9IGdldFZpc2libGVFeHByZXNzaW9uKGludGVybmFsRGF0YU1vZGVsUGF0aCk7XG5cdFx0aWYgKGludGVybmFsRGF0YU1vZGVsUGF0aD8udGFyZ2V0T2JqZWN0Py5WYWx1ZT8ucGF0aCkge1xuXHRcdFx0aW50ZXJuYWxWYWx1ZURhdGFNb2RlbFBhdGggPSBlbmhhbmNlRGF0YU1vZGVsUGF0aDxQcm9wZXJ0eT4oXG5cdFx0XHRcdGludGVybmFsRGF0YU1vZGVsUGF0aCxcblx0XHRcdFx0aW50ZXJuYWxEYXRhTW9kZWxQYXRoLnRhcmdldE9iamVjdC5WYWx1ZS5wYXRoXG5cdFx0XHQpO1xuXHRcdH1cblxuXHRcdHRoaXMuZGF0YU1vZGVsUGF0aCA9IGludGVybmFsRGF0YU1vZGVsUGF0aDtcblx0XHR0aGlzLnZhbHVlRGF0YU1vZGVsUGF0aCA9IGludGVybmFsVmFsdWVEYXRhTW9kZWxQYXRoO1xuXHR9XG5cblx0LyoqXG5cdCAqIEZ1bmN0aW9uIHRoYXQgY2FsY3VsYXRlcyB0aGUgdmlzdWFsaXphdGlvbiB0eXBlIGZvciB0aGlzIERhdGFQb2ludC5cblx0ICogQHBhcmFtIGRhdGFNb2RlbFBhdGhcblx0ICovXG5cdHByaXZhdGUgZ2V0RGF0YVBvaW50VmlzdWFsaXphdGlvbihkYXRhTW9kZWxQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPERhdGFQb2ludFR5cGU+KTogdm9pZCB7XG5cdFx0aWYgKGRhdGFNb2RlbFBhdGgudGFyZ2V0T2JqZWN0Py5WaXN1YWxpemF0aW9uID09PSBWaXN1YWxpemF0aW9uVHlwZS5SYXRpbmcpIHtcblx0XHRcdHRoaXMudmlzdWFsaXphdGlvbiA9IFwiUmF0aW5nXCI7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGlmIChkYXRhTW9kZWxQYXRoLnRhcmdldE9iamVjdD8uVmlzdWFsaXphdGlvbiA9PT0gVmlzdWFsaXphdGlvblR5cGUuUHJvZ3Jlc3MpIHtcblx0XHRcdHRoaXMudmlzdWFsaXphdGlvbiA9IFwiUHJvZ3Jlc3NcIjtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0Y29uc3QgdmFsdWVQcm9wZXJ0eSA9IHRoaXMudmFsdWVEYXRhTW9kZWxQYXRoICYmIHRoaXMudmFsdWVEYXRhTW9kZWxQYXRoLnRhcmdldE9iamVjdDtcblx0XHQvL2NoZWNrIHdoZXRoZXIgdGhlIHZpc3VhbGl6YXRpb24gdHlwZSBzaG91bGQgYmUgYW4gb2JqZWN0IG51bWJlciBpbiBjYXNlIG9uZSBvZiB0aGUgaWYgY29uZGl0aW9ucyBtZXRcblx0XHR0aGlzLmhhc1F1aWNrVmlldyA9ICh2YWx1ZVByb3BlcnR5ICYmIGlzVXNlZEluTmF2aWdhdGlvbldpdGhRdWlja1ZpZXdGYWNldHMoZGF0YU1vZGVsUGF0aCwgdmFsdWVQcm9wZXJ0eSkpID8/IGZhbHNlO1xuXHRcdGlmICh0aGlzLnZhbHVlRGF0YU1vZGVsUGF0aCAmJiBnZXRQcm9wZXJ0eVdpdGhTZW1hbnRpY09iamVjdCh0aGlzLnZhbHVlRGF0YU1vZGVsUGF0aCkpIHtcblx0XHRcdHRoaXMuaGFzUXVpY2tWaWV3ID0gdHJ1ZTtcblx0XHR9XG5cdFx0aWYgKHRoaXMuaGFzUXVpY2tWaWV3ICE9PSB0cnVlKSB7XG5cdFx0XHRpZiAoaXNQcm9wZXJ0eSh2YWx1ZVByb3BlcnR5KSAmJiAoaGFzVW5pdCh2YWx1ZVByb3BlcnR5KSB8fCBoYXNDdXJyZW5jeSh2YWx1ZVByb3BlcnR5KSkpIHtcblx0XHRcdFx0Ly8gd2Ugb25seSBzaG93IGFuIG9iamVjdE51bWJlciBpZiB0aGVyZSBpcyBubyBxdWlja3ZpZXcgYW5kIGEgdW5pdCBvciBhIGN1cnJlbmN5XG5cdFx0XHRcdHRoaXMudmlzdWFsaXphdGlvbiA9IFwiT2JqZWN0TnVtYmVyXCI7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvL2RlZmF1bHQgY2FzZSB0byBoYW5kbGUgdGhpcyBhcyBvYmplY3RTdGF0dXMgdHlwZVxuXHRcdHRoaXMudmlzdWFsaXphdGlvbiA9IFwiT2JqZWN0U3RhdHVzXCI7XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgY3VycmVudCBlbmFibGVtZW50IHN0YXRlIG9mIHRoZSBkYXRhUG9pbnQuXG5cdCAqIEByZXR1cm5zIEJvb2xlYW4gdmFsdWUgd2l0aCB0aGUgZW5hYmxlbWVudCBzdGF0ZVxuXHQgKi9cblx0Z2V0RW5hYmxlZCgpOiBib29sZWFuIHtcblx0XHRpZiAodGhpcy5jb250ZW50Py5pc0E8T2JqZWN0U3RhdHVzPihcInNhcC5tLk9iamVjdFN0YXR1c1wiKSkge1xuXHRcdFx0cmV0dXJuIHRoaXMuY29udGVudC5nZXRBY3RpdmUoKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFNldHMgdGhlIGN1cnJlbnQgZW5hYmxlbWVudCBzdGF0ZSBvZiB0aGUgZGF0YXBvaW50LlxuXHQgKiBAcGFyYW0gZW5hYmxlZFxuXHQgKiBAcmV0dXJucyBUaGUgY3VycmVudCBkYXRhcG9pbnQgcmVmZXJlbmNlXG5cdCAqL1xuXHRzZXRFbmFibGVkKGVuYWJsZWQ6IGJvb2xlYW4pOiBDb250cm9sIHtcblx0XHRpZiAodGhpcy5jb250ZW50Py5pc0E8T2JqZWN0U3RhdHVzPihcInNhcC5tLk9iamVjdFN0YXR1c1wiKSkge1xuXHRcdFx0dGhpcy5jb250ZW50LnNldFByb3BlcnR5KFwiYWN0aXZlXCIsIGVuYWJsZWQpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aHJvdyBcInNldEVuYWJsZWQgaXNuJ3QgaW1wbGVtZW50ZWQgZm9yIHRoaXMgZmllbGQgdHlwZVwiO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIGEgUmF0aW5nSW5kaWNhdG9yIGNvbnRyb2wuXG5cdCAqIEBwYXJhbSBkYXRhTW9kZWxQYXRoXG5cdCAqIEByZXR1cm5zIFJhdGluZ0luZGljYXRvclxuXHQgKi9cblx0Y3JlYXRlUmF0aW5nSW5kaWNhdG9yKGRhdGFNb2RlbFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8RGF0YVBvaW50VHlwZT4pOiBSYXRpbmdJbmRpY2F0b3Ige1xuXHRcdGNvbnN0IGRhdGFQb2ludFRhcmdldCA9IGRhdGFNb2RlbFBhdGgudGFyZ2V0T2JqZWN0O1xuXHRcdGNvbnN0IHRhcmdldFZhbHVlID0gdGhpcy5nZXRUYXJnZXRWYWx1ZUJpbmRpbmcoZGF0YU1vZGVsUGF0aCk7XG5cblx0XHRjb25zdCBkYXRhUG9pbnRWYWx1ZSA9IGRhdGFQb2ludFRhcmdldD8uVmFsdWUgfHwgXCJcIjtcblx0XHRjb25zdCBwcm9wZXJ0eVR5cGUgPSBkYXRhUG9pbnRWYWx1ZT8uJHRhcmdldD8udHlwZTtcblxuXHRcdGxldCBudW1iZXJPZkZyYWN0aW9uYWxEaWdpdHM7XG5cdFx0aWYgKHByb3BlcnR5VHlwZSA9PT0gXCJFZG0uRGVjaW1hbFwiICYmIGRhdGFQb2ludFRhcmdldD8uVmFsdWVGb3JtYXQpIHtcblx0XHRcdGlmIChkYXRhUG9pbnRUYXJnZXQuVmFsdWVGb3JtYXQuTnVtYmVyT2ZGcmFjdGlvbmFsRGlnaXRzKSB7XG5cdFx0XHRcdG51bWJlck9mRnJhY3Rpb25hbERpZ2l0cyA9IGRhdGFQb2ludFRhcmdldC5WYWx1ZUZvcm1hdC5OdW1iZXJPZkZyYWN0aW9uYWxEaWdpdHM7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGNvbnN0IHZhbHVlID0gZ2V0VmFsdWVGb3JtYXR0ZWQodGhpcy52YWx1ZURhdGFNb2RlbFBhdGgsIGRhdGFQb2ludFZhbHVlLCBwcm9wZXJ0eVR5cGUsIG51bWJlck9mRnJhY3Rpb25hbERpZ2l0cyk7XG5cblx0XHRyZXR1cm4gKFxuXHRcdFx0PFJhdGluZ0luZGljYXRvclxuXHRcdFx0XHRpZD17dGhpcy5pZFByZWZpeCA/IGdlbmVyYXRlKFt0aGlzLmlkUHJlZml4LCBcIlJhdGluZ0luZGljYXRvci1GaWVsZC1kaXNwbGF5XCJdKSA6IHVuZGVmaW5lZH1cblx0XHRcdFx0bWF4VmFsdWU9e3RhcmdldFZhbHVlfVxuXHRcdFx0XHR2YWx1ZT17dGhpcy52YWx1ZSA/PyBjb21waWxlRXhwcmVzc2lvbih2YWx1ZSl9XG5cdFx0XHRcdHRvb2x0aXA9e3RoaXMuZ2V0VG9vbHRpcFZhbHVlKGRhdGFNb2RlbFBhdGgpfVxuXHRcdFx0XHRpY29uU2l6ZT17dGhpcy5mb3JtYXRPcHRpb25zPy5pY29uU2l6ZX1cblx0XHRcdFx0Y2xhc3M9e3RoaXMuZm9ybWF0T3B0aW9ucz8uc2hvd0xhYmVscyA/PyBmYWxzZSA/IFwic2FwVWlUaW55TWFyZ2luVG9wQm90dG9tXCIgOiB1bmRlZmluZWR9XG5cdFx0XHRcdGVkaXRhYmxlPVwiZmFsc2VcIlxuXHRcdFx0XHRhcmlhTGFiZWxsZWRCeT17dGhpcy5hcmlhTGFiZWxsZWRCeX1cblx0XHRcdC8+XG5cdFx0KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIGEgUHJvZ3Jlc3NJbmRpY2F0b3IgY29udHJvbC5cblx0ICogQHBhcmFtIGRhdGFNb2RlbFBhdGhcblx0ICogQHJldHVybnMgUHJvZ3Jlc3NJbmRpY2F0b3Jcblx0ICovXG5cdGNyZWF0ZVByb2dyZXNzSW5kaWNhdG9yKGRhdGFNb2RlbFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8RGF0YVBvaW50VHlwZT4pOiBQcm9ncmVzc0luZGljYXRvciB7XG5cdFx0Y29uc3QgY3JpdGljYWxpdHlDb2xvckV4cHJlc3Npb24gPSBkYXRhTW9kZWxQYXRoLnRhcmdldE9iamVjdFxuXHRcdFx0PyBidWlsZEV4cHJlc3Npb25Gb3JDcml0aWNhbGl0eUNvbG9yKGRhdGFNb2RlbFBhdGgudGFyZ2V0T2JqZWN0LCBkYXRhTW9kZWxQYXRoKVxuXHRcdFx0OiB1bmRlZmluZWQ7XG5cdFx0Y29uc3QgZGlzcGxheVZhbHVlID0gYnVpbGRFeHByZXNzaW9uRm9yUHJvZ3Jlc3NJbmRpY2F0b3JEaXNwbGF5VmFsdWUoZGF0YU1vZGVsUGF0aCk7XG5cdFx0Y29uc3QgcGVyY2VudFZhbHVlID0gYnVpbGRFeHByZXNzaW9uRm9yUHJvZ3Jlc3NJbmRpY2F0b3JQZXJjZW50VmFsdWUoZGF0YU1vZGVsUGF0aCk7XG5cblx0XHRyZXR1cm4gKFxuXHRcdFx0PFByb2dyZXNzSW5kaWNhdG9yXG5cdFx0XHRcdGlkPXt0aGlzLmlkUHJlZml4ID8gZ2VuZXJhdGUoW3RoaXMuaWRQcmVmaXgsIFwiUHJvZ3Jlc3NJbmRpY2F0b3ItRmllbGQtZGlzcGxheVwiXSkgOiB1bmRlZmluZWR9XG5cdFx0XHRcdGRpc3BsYXlWYWx1ZT17ZGlzcGxheVZhbHVlfVxuXHRcdFx0XHRwZXJjZW50VmFsdWU9e3BlcmNlbnRWYWx1ZX1cblx0XHRcdFx0c3RhdGU9e2NyaXRpY2FsaXR5Q29sb3JFeHByZXNzaW9ufVxuXHRcdFx0XHR0b29sdGlwPXt0aGlzLmdldFRvb2x0aXBWYWx1ZShkYXRhTW9kZWxQYXRoKX1cblx0XHRcdFx0YXJpYUxhYmVsbGVkQnk9e3RoaXMuYXJpYUxhYmVsbGVkQnl9XG5cdFx0XHQvPlxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICogQ3JlYXRlcyBhbiBPYmplY3ROdW1iZXIgY29udHJvbC5cblx0ICogQHBhcmFtIGRhdGFNb2RlbFBhdGhcblx0ICogQHJldHVybnMgT2JqZWN0TnVtYmVyXG5cdCAqL1xuXHRjcmVhdGVPYmplY3ROdW1iZXIoZGF0YU1vZGVsUGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aDxEYXRhUG9pbnRUeXBlPik6IE9iamVjdE51bWJlciB7XG5cdFx0Y29uc3QgY3JpdGljYWxpdHlDb2xvckV4cHJlc3Npb24gPSBkYXRhTW9kZWxQYXRoLnRhcmdldE9iamVjdFxuXHRcdFx0PyBidWlsZEV4cHJlc3Npb25Gb3JDcml0aWNhbGl0eUNvbG9yKGRhdGFNb2RlbFBhdGgudGFyZ2V0T2JqZWN0LCBkYXRhTW9kZWxQYXRoKVxuXHRcdFx0OiB1bmRlZmluZWQ7XG5cdFx0Y29uc3QgZW1wdHlJbmRpY2F0b3JNb2RlID0gdGhpcy5mb3JtYXRPcHRpb25zPy5zaG93RW1wdHlJbmRpY2F0b3IgPz8gZmFsc2UgPyBcIk9uXCIgOiB1bmRlZmluZWQ7XG5cdFx0Y29uc3Qgb2JqZWN0U3RhdHVzTnVtYmVyID0gYnVpbGRGaWVsZEJpbmRpbmdFeHByZXNzaW9uKGRhdGFNb2RlbFBhdGgsIHRoaXMuZm9ybWF0T3B0aW9ucywgdHJ1ZSk7XG5cdFx0Y29uc3QgbGltaXRTaG93RGVjaW1hbHMgPSB0aGlzLmdldE1hbmlmZXN0V3JhcHBlcigpPy5nZXRTYXBGZU1hbmlmZXN0Q29uZmlndXJhdGlvbigpPy5hcHA/LnNob3dPbmx5VW5pdERlY2ltYWxzID09PSB0cnVlO1xuXHRcdGNvbnN0IHVuaXQgPVxuXHRcdFx0dGhpcy5mb3JtYXRPcHRpb25zPy5tZWFzdXJlRGlzcGxheU1vZGUgPT09IFwiSGlkZGVuXCJcblx0XHRcdFx0PyB1bmRlZmluZWRcblx0XHRcdFx0OiBjb21waWxlRXhwcmVzc2lvbihVSUZvcm1hdHRlcnMuZ2V0QmluZGluZ0ZvclVuaXRPckN1cnJlbmN5KHRoaXMudmFsdWVEYXRhTW9kZWxQYXRoLCB0cnVlLCBsaW1pdFNob3dEZWNpbWFscykpO1xuXG5cdFx0cmV0dXJuIChcblx0XHRcdDxPYmplY3ROdW1iZXJcblx0XHRcdFx0aWQ9e3RoaXMuaWRQcmVmaXggPyBnZW5lcmF0ZShbdGhpcy5pZFByZWZpeCwgXCJPYmplY3ROdW1iZXItRmllbGQtZGlzcGxheVwiXSkgOiB1bmRlZmluZWR9XG5cdFx0XHRcdHN0YXRlPXtjcml0aWNhbGl0eUNvbG9yRXhwcmVzc2lvbn1cblx0XHRcdFx0bnVtYmVyPXt0aGlzLnZhbHVlID8/IG9iamVjdFN0YXR1c051bWJlcn1cblx0XHRcdFx0dW5pdD17dW5pdH1cblx0XHRcdFx0dmlzaWJsZT17dGhpcy52aXNpYmxlfVxuXHRcdFx0XHRlbXBoYXNpemVkPVwiZmFsc2VcIlxuXHRcdFx0XHRjbGFzcz17dGhpcy5mb3JtYXRPcHRpb25zPy5kYXRhUG9pbnRTdHlsZSA9PT0gXCJsYXJnZVwiID8gXCJzYXBNT2JqZWN0TnVtYmVyTGFyZ2VcIiA6IHVuZGVmaW5lZH1cblx0XHRcdFx0dG9vbHRpcD17dGhpcy5nZXRUb29sdGlwVmFsdWUoZGF0YU1vZGVsUGF0aCl9XG5cdFx0XHRcdGVtcHR5SW5kaWNhdG9yTW9kZT17ZW1wdHlJbmRpY2F0b3JNb2RlfVxuXHRcdFx0Lz5cblx0XHQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHVybnMgdGhlIGRlcGVuZGVudC5cblx0ICogQHJldHVybnMgRGVwZW5kZW50IGVpdGhlciB3aXRoIHRoZSBRdWlja1ZpZXcgb3IgYW4gZW1wdHkgc3RyaW5nLlxuXHQgKi9cblx0cHJpdmF0ZSBjcmVhdGVEZXBlbmRlbnRzKCk6IE1kY0xpbmsgfCB1bmRlZmluZWQge1xuXHRcdGlmICh0aGlzLmhhc1F1aWNrVmlldykge1xuXHRcdFx0cmV0dXJuIG5ldyBRdWlja1ZpZXcoXG5cdFx0XHRcdHRoaXMudmFsdWVEYXRhTW9kZWxQYXRoIGFzIERhdGFNb2RlbE9iamVjdFBhdGg8UHJvcGVydHk+LFxuXHRcdFx0XHR0aGlzLm1ldGFQYXRoLFxuXHRcdFx0XHR0aGlzLmNvbnRleHRQYXRoID8/IFwiXCJcblx0XHRcdCkuY3JlYXRlQ29udGVudCgpIGFzIE1kY0xpbms7XG5cdFx0fVxuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cblxuXHQvKipcblx0ICogQ3JlYXRlcyBhbiBPYmplY3RTdGF0dXMgY29udHJvbC5cblx0ICogQHBhcmFtIGRhdGFNb2RlbFBhdGhcblx0ICogQHJldHVybnMgT2JqZWN0U3RhdHVzXG5cdCAqL1xuXHRjcmVhdGVPYmplY3RTdGF0dXMoZGF0YU1vZGVsUGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aDxEYXRhUG9pbnRUeXBlPik6IE9iamVjdFN0YXR1cyB7XG5cdFx0bGV0IGNyaXRpY2FsaXR5Q29sb3JFeHByZXNzaW9uID0gZGF0YU1vZGVsUGF0aC50YXJnZXRPYmplY3Rcblx0XHRcdD8gYnVpbGRFeHByZXNzaW9uRm9yQ3JpdGljYWxpdHlDb2xvcihkYXRhTW9kZWxQYXRoLnRhcmdldE9iamVjdCwgZGF0YU1vZGVsUGF0aClcblx0XHRcdDogdW5kZWZpbmVkO1xuXHRcdGlmIChjcml0aWNhbGl0eUNvbG9yRXhwcmVzc2lvbiA9PT0gXCJOb25lXCIgJiYgdGhpcy52YWx1ZURhdGFNb2RlbFBhdGgpIHtcblx0XHRcdGNyaXRpY2FsaXR5Q29sb3JFeHByZXNzaW9uID0gdGhpcy5oYXNRdWlja1ZpZXcgPyBcIkluZm9ybWF0aW9uXCIgOiBcIk5vbmVcIjtcblx0XHR9XG5cdFx0Y29uc3QgZW1wdHlJbmRpY2F0b3JNb2RlID0gdGhpcy5mb3JtYXRPcHRpb25zPy5zaG93RW1wdHlJbmRpY2F0b3IgPz8gZmFsc2UgPyBcIk9uXCIgOiB1bmRlZmluZWQ7XG5cdFx0Y29uc3Qgb2JqZWN0U3RhdHVzVGV4dCA9IGJ1aWxkRmllbGRCaW5kaW5nRXhwcmVzc2lvbihkYXRhTW9kZWxQYXRoLCB0aGlzLmZvcm1hdE9wdGlvbnMsIGZhbHNlKTtcblx0XHRjb25zdCBpY29uRXhwcmVzc2lvbiA9XG5cdFx0XHR0aGlzLmZvcm1hdE9wdGlvbnM/LmRhdGFQb2ludFN0eWxlID09PSBcImxhcmdlXCIgfHwgIWRhdGFNb2RlbFBhdGgudGFyZ2V0T2JqZWN0XG5cdFx0XHRcdD8gdW5kZWZpbmVkXG5cdFx0XHRcdDogYnVpbGRFeHByZXNzaW9uRm9yQ3JpdGljYWxpdHlJY29uKGRhdGFNb2RlbFBhdGgudGFyZ2V0T2JqZWN0LCBkYXRhTW9kZWxQYXRoKTtcblxuXHRcdHJldHVybiAoXG5cdFx0XHQ8T2JqZWN0U3RhdHVzXG5cdFx0XHRcdGlkPXt0aGlzLmlkUHJlZml4ID8gZ2VuZXJhdGUoW3RoaXMuaWRQcmVmaXgsIFwiT2JqZWN0U3RhdHVzLUZpZWxkLWRpc3BsYXlcIl0pIDogdW5kZWZpbmVkfVxuXHRcdFx0XHRjbGFzcz17dGhpcy5mb3JtYXRPcHRpb25zPy5kYXRhUG9pbnRTdHlsZSA9PT0gXCJsYXJnZVwiID8gXCJzYXBNT2JqZWN0U3RhdHVzTGFyZ2Ugc2FwTU9iamVjdFN0YXR1c0xvbmdUZXh0XCIgOiB1bmRlZmluZWR9XG5cdFx0XHRcdGljb249e2ljb25FeHByZXNzaW9ufVxuXHRcdFx0XHR0b29sdGlwPXt0aGlzLmdldFRvb2x0aXBWYWx1ZShkYXRhTW9kZWxQYXRoKX1cblx0XHRcdFx0c3RhdGU9e2NyaXRpY2FsaXR5Q29sb3JFeHByZXNzaW9ufVxuXHRcdFx0XHR0ZXh0PXt0aGlzLnZhbHVlID8/IG9iamVjdFN0YXR1c1RleHR9XG5cdFx0XHRcdGVtcHR5SW5kaWNhdG9yTW9kZT17ZW1wdHlJbmRpY2F0b3JNb2RlfVxuXHRcdFx0XHRhY3RpdmU9e3RoaXMuaGFzUXVpY2tWaWV3fVxuXHRcdFx0XHRwcmVzcz17RmllbGRSdW50aW1lSGVscGVyLnByZXNzTGluayBhcyB1bmtub3duIGFzIChvRXZlbnQ6IE9iamVjdFN0YXR1cyRQcmVzc0V2ZW50KSA9PiB2b2lkfVxuXHRcdFx0XHRhcmlhTGFiZWxsZWRCeT17dGhpcy5hcmlhTGFiZWxsZWRCeX1cblx0XHRcdFx0cmVhY3RpdmVBcmVhTW9kZT17dGhpcy5mb3JtYXRPcHRpb25zPy5yZWFjdGl2ZUFyZWFNb2RlfVxuXHRcdFx0PlxuXHRcdFx0XHR7e1xuXHRcdFx0XHRcdGRlcGVuZGVudHM6IHRoaXMuY3JlYXRlRGVwZW5kZW50cygpXG5cdFx0XHRcdH19XG5cdFx0XHQ8L09iamVjdFN0YXR1cz5cblx0XHQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoZSBoZWxwZXIgbWV0aG9kIHRvIGdldCBhIHBvc3NpYmxlIHRvb2x0aXAgdGV4dC5cblx0ICogQHBhcmFtIGRhdGFNb2RlbFBhdGhcblx0ICogQHJldHVybnMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uXG5cdCAqL1xuXHRwcml2YXRlIGdldFRvb2x0aXBWYWx1ZShkYXRhTW9kZWxQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPERhdGFQb2ludFR5cGU+KTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHN0cmluZz4gfCB1bmRlZmluZWQge1xuXHRcdHJldHVybiBkYXRhTW9kZWxQYXRoLnRhcmdldE9iamVjdD8uYW5ub3RhdGlvbnM/LkNvbW1vbj8uUXVpY2tJbmZvXG5cdFx0XHQ/IGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihkYXRhTW9kZWxQYXRoLnRhcmdldE9iamVjdD8uYW5ub3RhdGlvbnM/LkNvbW1vbj8uUXVpY2tJbmZvLCBnZXRSZWxhdGl2ZVBhdGhzKGRhdGFNb2RlbFBhdGgpKVxuXHRcdFx0OiB1bmRlZmluZWQ7XG5cdH1cblxuXHQvKipcblx0ICogVGhlIGhlbHBlciBtZXRob2QgdG8gZ2V0IGEgcG9zc2libGUgdGFyZ2V0IHZhbHVlIGJpbmRpbmcuXG5cdCAqIEBwYXJhbSBkYXRhTW9kZWxQYXRoXG5cdCAqIEByZXR1cm5zIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvblxuXHQgKi9cblx0cHJpdmF0ZSBnZXRUYXJnZXRWYWx1ZUJpbmRpbmcoXG5cdFx0ZGF0YU1vZGVsUGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aDxEYXRhUG9pbnRUeXBlPlxuXHQpOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248c3RyaW5nIHwgbnVtYmVyPiB8IHVuZGVmaW5lZCB7XG5cdFx0cmV0dXJuIGRhdGFNb2RlbFBhdGgudGFyZ2V0T2JqZWN0Py5UYXJnZXRWYWx1ZVxuXHRcdFx0PyBnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24oZGF0YU1vZGVsUGF0aC50YXJnZXRPYmplY3Q/LlRhcmdldFZhbHVlLCBnZXRSZWxhdGl2ZVBhdGhzKGRhdGFNb2RlbFBhdGgpKVxuXHRcdFx0OiB1bmRlZmluZWQ7XG5cdH1cblxuXHRjcmVhdGVDb250ZW50KCk6IE9iamVjdFN0YXR1cyB8IE9iamVjdE51bWJlciB8IFJhdGluZ0luZGljYXRvciB8IFByb2dyZXNzSW5kaWNhdG9yIHwgdW5kZWZpbmVkIHtcblx0XHRpZiAoIXRoaXMuZGF0YU1vZGVsUGF0aCkge1xuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHR9XG5cdFx0dGhpcy5nZXREYXRhUG9pbnRWaXN1YWxpemF0aW9uKHRoaXMuZGF0YU1vZGVsUGF0aCk7XG5cdFx0c3dpdGNoICh0aGlzLnZpc3VhbGl6YXRpb24pIHtcblx0XHRcdGNhc2UgXCJSYXRpbmdcIjoge1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5jcmVhdGVSYXRpbmdJbmRpY2F0b3IodGhpcy5kYXRhTW9kZWxQYXRoKTtcblx0XHRcdH1cblx0XHRcdGNhc2UgXCJQcm9ncmVzc1wiOiB7XG5cdFx0XHRcdHJldHVybiB0aGlzLmNyZWF0ZVByb2dyZXNzSW5kaWNhdG9yKHRoaXMuZGF0YU1vZGVsUGF0aCk7XG5cdFx0XHR9XG5cdFx0XHRjYXNlIFwiT2JqZWN0TnVtYmVyXCI6IHtcblx0XHRcdFx0cmV0dXJuIHRoaXMuY3JlYXRlT2JqZWN0TnVtYmVyKHRoaXMuZGF0YU1vZGVsUGF0aCk7XG5cdFx0XHR9XG5cdFx0XHRkZWZhdWx0OiB7XG5cdFx0XHRcdHJldHVybiB0aGlzLmNyZWF0ZU9iamVjdFN0YXR1cyh0aGlzLmRhdGFNb2RlbFBhdGgpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBSZXRyaWV2ZXMgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGRhdGFwb2ludC5cblx0ICogQHJldHVybnMgVGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGRhdGFwb2ludFxuXHQgKi9cblx0Z2V0VmFsdWUoKTogYm9vbGVhbiB8IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdFx0aWYgKHRoaXMuY29udGVudD8uaXNBPE9iamVjdFN0YXR1cz4oXCJzYXAubS5PYmplY3RTdGF0dXNcIikpIHtcblx0XHRcdHJldHVybiB0aGlzLmNvbnRlbnQuZ2V0VGV4dCgpO1xuXHRcdH0gZWxzZSBpZiAodGhpcy5jb250ZW50Py5pc0E8T2JqZWN0TnVtYmVyPihcInNhcC5tLk9iamVjdE51bWJlclwiKSkge1xuXHRcdFx0cmV0dXJuIHRoaXMuY29udGVudC5nZXROdW1iZXIoKTtcblx0XHR9IGVsc2UgaWYgKHRoaXMuY29udGVudD8uaXNBPFByb2dyZXNzSW5kaWNhdG9yPihcInNhcC5tLlByb2dyZXNzSW5kaWNhdG9yXCIpKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5jb250ZW50LmdldERpc3BsYXlWYWx1ZSgpO1xuXHRcdH0gZWxzZSBpZiAodGhpcy5jb250ZW50Py5pc0E8UmF0aW5nSW5kaWNhdG9yPihcInNhcC5tLlJhdGluZ0luZGljYXRvclwiKSkge1xuXHRcdFx0cmV0dXJuIHRoaXMuY29udGVudC5nZXRWYWx1ZSgpLnRvU3RyaW5nKCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuZ2V0UHJvcGVydHkoXCJ2YWx1ZVwiKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogU2V0cyB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgZmllbGQuXG5cdCAqIEBwYXJhbSB2YWx1ZVxuXHQgKiBAcmV0dXJucyBUaGUgY3VycmVudCBmaWVsZCByZWZlcmVuY2Vcblx0ICovXG5cdHNldFZhbHVlKHZhbHVlOiBib29sZWFuIHwgc3RyaW5nIHwgbnVtYmVyIHwgdW5kZWZpbmVkKTogQ29udHJvbCB7XG5cdFx0dGhpcy5zZXRQcm9wZXJ0eShcInZhbHVlXCIsIHZhbHVlKTtcblx0XHRpZiAodGhpcy5jb250ZW50Py5pc0E8T2JqZWN0U3RhdHVzPihcInNhcC5tLk9iamVjdFN0YXR1c1wiKSkge1xuXHRcdFx0dGhpcy5jb250ZW50LnNldFRleHQodmFsdWUgYXMgc3RyaW5nIHwgdW5kZWZpbmVkKTtcblx0XHR9IGVsc2UgaWYgKHRoaXMuY29udGVudD8uaXNBPE9iamVjdE51bWJlcj4oXCJzYXAubS5PYmplY3ROdW1iZXJcIikpIHtcblx0XHRcdHRoaXMuY29udGVudC5zZXROdW1iZXIodmFsdWUgYXMgc3RyaW5nKTtcblx0XHR9IGVsc2UgaWYgKHRoaXMuY29udGVudD8uaXNBPFByb2dyZXNzSW5kaWNhdG9yPihcInNhcC5tLlByb2dyZXNzSW5kaWNhdG9yXCIpKSB7XG5cdFx0XHRMb2cuZXJyb3IoXCJzZXRWYWx1ZSBpc24ndCBpbXBsZW1lbnRlZCBmb3IgdGhpcyBmaWVsZCB0eXBlIHlldFwiKTtcblx0XHR9IGVsc2UgaWYgKHRoaXMuY29udGVudD8uaXNBPFJhdGluZ0luZGljYXRvcj4oXCJzYXAubS5SYXRpbmdJbmRpY2F0b3JcIikpIHtcblx0XHRcdHRoaXMuY29udGVudC5zZXRWYWx1ZSh2YWx1ZSBhcyBudW1iZXIpO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcztcblx0fVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztNQW1DcUJBLFNBQVMsSUFBQUMsSUFBQSxHQUQ3QkMsY0FBYyxDQUFDLGtDQUFrQyxDQUFDLEVBQUFDLEtBQUEsR0FLakRDLFdBQVcsQ0FBQztJQUNaQyxJQUFJLEVBQUU7RUFDUCxDQUFDLENBQUMsRUFBQUMsS0FBQSxHQU1EQyxRQUFRLENBQUM7SUFDVEYsSUFBSSxFQUFF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
385
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJEYXRhUG9pbnQiLCJfZGVjIiwiZGVmaW5lVUk1Q2xhc3MiLCJfZGVjMiIsImFzc29jaWF0aW9uIiwidHlwZSIsIl9kZWMzIiwicHJvcGVydHkiLCJyZXF1aXJlZCIsIl9kZWM0IiwiX2RlYzUiLCJhZ2dyZWdhdGlvbiIsIm11bHRpcGxlIiwiZGVmYXVsdENsYXNzIiwiRGF0YVBvaW50Rm9ybWF0T3B0aW9ucyIsIl9kZWM2IiwiaXNCaW5kaW5nSW5mbyIsIl9jbGFzcyIsIl9jbGFzczIiLCJfQnVpbGRpbmdCbG9jayIsInByb3BlcnRpZXMiLCJvdGhlcnMiLCJfdGhpcyIsImNhbGwiLCJfaW5pdGlhbGl6ZXJEZWZpbmVQcm9wZXJ0eSIsIl9kZXNjcmlwdG9yIiwiX2Rlc2NyaXB0b3IyIiwiX2Rlc2NyaXB0b3IzIiwiX2Rlc2NyaXB0b3I0IiwiX2Rlc2NyaXB0b3I1IiwiaGFzUXVpY2tWaWV3IiwiX2V4cG9ydHMiLCJfaW5oZXJpdHNMb29zZSIsIl9wcm90byIsInByb3RvdHlwZSIsIm9uTWV0YWRhdGFBdmFpbGFibGUiLCJnZXRUZW1wbGF0aW5nT2JqZWN0cyIsImNvbnRlbnQiLCJjcmVhdGVDb250ZW50IiwiaW50ZXJuYWxEYXRhTW9kZWxQYXRoIiwiZ2V0RGF0YU1vZGVsT2JqZWN0Rm9yTWV0YVBhdGgiLCJtZXRhUGF0aCIsImNvbnRleHRQYXRoIiwiaW50ZXJuYWxWYWx1ZURhdGFNb2RlbFBhdGgiLCJ2aXNpYmxlIiwiZ2V0VmlzaWJsZUV4cHJlc3Npb24iLCJ0YXJnZXRPYmplY3QiLCJWYWx1ZSIsInBhdGgiLCJlbmhhbmNlRGF0YU1vZGVsUGF0aCIsImRhdGFNb2RlbFBhdGgiLCJ2YWx1ZURhdGFNb2RlbFBhdGgiLCJnZXREYXRhUG9pbnRWaXN1YWxpemF0aW9uIiwiVmlzdWFsaXphdGlvbiIsInZpc3VhbGl6YXRpb24iLCJ2YWx1ZVByb3BlcnR5IiwiaXNVc2VkSW5OYXZpZ2F0aW9uV2l0aFF1aWNrVmlld0ZhY2V0cyIsImdldFByb3BlcnR5V2l0aFNlbWFudGljT2JqZWN0IiwiaXNQcm9wZXJ0eSIsImhhc1VuaXQiLCJoYXNDdXJyZW5jeSIsImdldEVuYWJsZWQiLCJpc0EiLCJnZXRBY3RpdmUiLCJzZXRFbmFibGVkIiwiZW5hYmxlZCIsInNldFByb3BlcnR5IiwiY3JlYXRlUmF0aW5nSW5kaWNhdG9yIiwiZGF0YVBvaW50VGFyZ2V0IiwidGFyZ2V0VmFsdWUiLCJnZXRUYXJnZXRWYWx1ZUJpbmRpbmciLCJkYXRhUG9pbnRWYWx1ZSIsInByb3BlcnR5VHlwZSIsIiR0YXJnZXQiLCJudW1iZXJPZkZyYWN0aW9uYWxEaWdpdHMiLCJWYWx1ZUZvcm1hdCIsIk51bWJlck9mRnJhY3Rpb25hbERpZ2l0cyIsInZhbHVlIiwiZ2V0VmFsdWVGb3JtYXR0ZWQiLCJfanN4IiwiUmF0aW5nSW5kaWNhdG9yIiwiaWQiLCJpZFByZWZpeCIsImdlbmVyYXRlIiwidW5kZWZpbmVkIiwibWF4VmFsdWUiLCJjb21waWxlRXhwcmVzc2lvbiIsInRvb2x0aXAiLCJnZXRUb29sdGlwVmFsdWUiLCJpY29uU2l6ZSIsImZvcm1hdE9wdGlvbnMiLCJjbGFzcyIsInNob3dMYWJlbHMiLCJlZGl0YWJsZSIsImFyaWFMYWJlbGxlZEJ5IiwiY3JlYXRlUHJvZ3Jlc3NJbmRpY2F0b3IiLCJjcml0aWNhbGl0eUNvbG9yRXhwcmVzc2lvbiIsImJ1aWxkRXhwcmVzc2lvbkZvckNyaXRpY2FsaXR5Q29sb3IiLCJkaXNwbGF5VmFsdWUiLCJidWlsZEV4cHJlc3Npb25Gb3JQcm9ncmVzc0luZGljYXRvckRpc3BsYXlWYWx1ZSIsInBlcmNlbnRWYWx1ZSIsImJ1aWxkRXhwcmVzc2lvbkZvclByb2dyZXNzSW5kaWNhdG9yUGVyY2VudFZhbHVlIiwiUHJvZ3Jlc3NJbmRpY2F0b3IiLCJzdGF0ZSIsImNyZWF0ZU9iamVjdE51bWJlciIsImVtcHR5SW5kaWNhdG9yTW9kZSIsInNob3dFbXB0eUluZGljYXRvciIsIm9iamVjdFN0YXR1c051bWJlciIsImJ1aWxkRmllbGRCaW5kaW5nRXhwcmVzc2lvbiIsImxpbWl0U2hvd0RlY2ltYWxzIiwiZ2V0TWFuaWZlc3RXcmFwcGVyIiwiZ2V0U2FwRmVNYW5pZmVzdENvbmZpZ3VyYXRpb24iLCJhcHAiLCJzaG93T25seVVuaXREZWNpbWFscyIsInByZXNlcnZlRGVjaW1hbHNGb3JDdXJyZW5jeSIsInVuaXQiLCJtZWFzdXJlRGlzcGxheU1vZGUiLCJVSUZvcm1hdHRlcnMiLCJnZXRCaW5kaW5nRm9yVW5pdE9yQ3VycmVuY3kiLCJPYmplY3ROdW1iZXIiLCJudW1iZXIiLCJlbXBoYXNpemVkIiwiZGF0YVBvaW50U3R5bGUiLCJjcmVhdGVEZXBlbmRlbnRzIiwiUXVpY2tWaWV3IiwiY3JlYXRlT2JqZWN0U3RhdHVzIiwib2JqZWN0U3RhdHVzVGV4dCIsImljb25FeHByZXNzaW9uIiwiYnVpbGRFeHByZXNzaW9uRm9yQ3JpdGljYWxpdHlJY29uIiwiT2JqZWN0U3RhdHVzIiwiaWNvbiIsInRleHQiLCJhY3RpdmUiLCJwcmVzcyIsIkZpZWxkUnVudGltZUhlbHBlciIsInByZXNzTGluayIsInJlYWN0aXZlQXJlYU1vZGUiLCJjaGlsZHJlbiIsImRlcGVuZGVudHMiLCJhbm5vdGF0aW9ucyIsIkNvbW1vbiIsIlF1aWNrSW5mbyIsImdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbiIsImdldFJlbGF0aXZlUGF0aHMiLCJUYXJnZXRWYWx1ZSIsImdldFZhbHVlIiwiZ2V0VGV4dCIsImdldE51bWJlciIsImdldERpc3BsYXlWYWx1ZSIsInRvU3RyaW5nIiwiZ2V0UHJvcGVydHkiLCJzZXRWYWx1ZSIsInNldFRleHQiLCJzZXROdW1iZXIiLCJMb2ciLCJlcnJvciIsIkJ1aWxkaW5nQmxvY2siLCJfYXBwbHlEZWNvcmF0ZWREZXNjcmlwdG9yIiwiY29uZmlndXJhYmxlIiwiZW51bWVyYWJsZSIsIndyaXRhYmxlIiwiaW5pdGlhbGl6ZXIiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIkRhdGFQb2ludC50c3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBQcm9wZXJ0eSB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlc1wiO1xuaW1wb3J0IHsgVmlzdWFsaXphdGlvblR5cGUsIHR5cGUgRGF0YVBvaW50VHlwZSB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvVUlcIjtcbmltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IHR5cGUgeyBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB9IGZyb20gXCJzYXAvZmUvYmFzZS9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0IHsgY29tcGlsZUV4cHJlc3Npb24sIGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbiwgdHlwZSBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24gfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCB7IGFnZ3JlZ2F0aW9uLCBhc3NvY2lhdGlvbiwgZGVmaW5lVUk1Q2xhc3MsIHByb3BlcnR5LCB0eXBlIFByb3BlcnRpZXNPZiB9IGZyb20gXCJzYXAvZmUvYmFzZS9DbGFzc1N1cHBvcnRcIjtcbmltcG9ydCBCdWlsZGluZ0Jsb2NrIGZyb20gXCJzYXAvZmUvY29yZS9idWlsZGluZ0Jsb2Nrcy9CdWlsZGluZ0Jsb2NrXCI7XG5pbXBvcnQgeyBnZW5lcmF0ZSB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1N0YWJsZUlkSGVscGVyXCI7XG5pbXBvcnQgeyBpc1Byb3BlcnR5IH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvVHlwZUd1YXJkc1wiO1xuaW1wb3J0IHsgYnVpbGRFeHByZXNzaW9uRm9yQ3JpdGljYWxpdHlDb2xvciwgYnVpbGRFeHByZXNzaW9uRm9yQ3JpdGljYWxpdHlJY29uIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvQ3JpdGljYWxpdHlGb3JtYXR0ZXJzXCI7XG5pbXBvcnQgdHlwZSB7IERhdGFNb2RlbE9iamVjdFBhdGggfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9EYXRhTW9kZWxQYXRoSGVscGVyXCI7XG5pbXBvcnQgeyBlbmhhbmNlRGF0YU1vZGVsUGF0aCwgZ2V0UmVsYXRpdmVQYXRocyB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0RhdGFNb2RlbFBhdGhIZWxwZXJcIjtcbmltcG9ydCB7IGhhc0N1cnJlbmN5LCBoYXNVbml0IH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvUHJvcGVydHlIZWxwZXJcIjtcbmltcG9ydCB7IGdldFByb3BlcnR5V2l0aFNlbWFudGljT2JqZWN0IH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvU2VtYW50aWNPYmplY3RIZWxwZXJcIjtcbmltcG9ydCAqIGFzIFVJRm9ybWF0dGVycyBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9VSUZvcm1hdHRlcnNcIjtcbmltcG9ydCB7IGdldFZpc2libGVFeHByZXNzaW9uLCBpc1VzZWRJbk5hdmlnYXRpb25XaXRoUXVpY2tWaWV3RmFjZXRzIH0gZnJvbSBcInNhcC9mZS9tYWNyb3MvZmllbGQvRmllbGRUZW1wbGF0aW5nXCI7XG5pbXBvcnQge1xuXHRidWlsZEV4cHJlc3Npb25Gb3JQcm9ncmVzc0luZGljYXRvckRpc3BsYXlWYWx1ZSxcblx0YnVpbGRFeHByZXNzaW9uRm9yUHJvZ3Jlc3NJbmRpY2F0b3JQZXJjZW50VmFsdWUsXG5cdGJ1aWxkRmllbGRCaW5kaW5nRXhwcmVzc2lvbixcblx0Z2V0VmFsdWVGb3JtYXR0ZWRcbn0gZnJvbSBcInNhcC9mZS9tYWNyb3MvaW50ZXJuYWwvaGVscGVycy9EYXRhUG9pbnRUZW1wbGF0aW5nXCI7XG5pbXBvcnQgUXVpY2tWaWV3IGZyb20gXCJzYXAvZmUvbWFjcm9zL3F1aWNrVmlldy9RdWlja1ZpZXdcIjtcbmltcG9ydCBPYmplY3ROdW1iZXIgZnJvbSBcInNhcC9tL09iamVjdE51bWJlclwiO1xuaW1wb3J0IHR5cGUgeyBPYmplY3RTdGF0dXMkUHJlc3NFdmVudCB9IGZyb20gXCJzYXAvbS9PYmplY3RTdGF0dXNcIjtcbmltcG9ydCBPYmplY3RTdGF0dXMgZnJvbSBcInNhcC9tL09iamVjdFN0YXR1c1wiO1xuaW1wb3J0IFByb2dyZXNzSW5kaWNhdG9yIGZyb20gXCJzYXAvbS9Qcm9ncmVzc0luZGljYXRvclwiO1xuaW1wb3J0IFJhdGluZ0luZGljYXRvciBmcm9tIFwic2FwL20vUmF0aW5nSW5kaWNhdG9yXCI7XG5pbXBvcnQgdHlwZSBDb250cm9sIGZyb20gXCJzYXAvdWkvY29yZS9Db250cm9sXCI7XG5pbXBvcnQgdHlwZSB7ICRDb250cm9sU2V0dGluZ3MgfSBmcm9tIFwic2FwL3VpL2NvcmUvQ29udHJvbFwiO1xuaW1wb3J0IHR5cGUgTWRjTGluayBmcm9tIFwic2FwL3VpL21kYy9MaW5rXCI7XG5pbXBvcnQgRmllbGRSdW50aW1lSGVscGVyIGZyb20gXCIuLi9maWVsZC9GaWVsZFJ1bnRpbWVIZWxwZXJcIjtcbmltcG9ydCBEYXRhUG9pbnRGb3JtYXRPcHRpb25zIGZyb20gXCIuL0RhdGFQb2ludEZvcm1hdE9wdGlvbnNcIjtcblxuQGRlZmluZVVJNUNsYXNzKFwic2FwLmZlLm1hY3Jvcy5pbnRlcm5hbC5EYXRhUG9pbnRcIilcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERhdGFQb2ludCBleHRlbmRzIEJ1aWxkaW5nQmxvY2s8Q29udHJvbD4ge1xuXHQvKipcblx0ICogUHJlZml4IGFkZGVkIHRvIHRoZSBnZW5lcmF0ZWQgSUQgb2YgdGhlIGZpZWxkXG5cdCAqL1xuXHRAYXNzb2NpYXRpb24oe1xuXHRcdHR5cGU6IFwic3RyaW5nXCJcblx0fSlcblx0cHVibGljIGlkUHJlZml4Pzogc3RyaW5nO1xuXG5cdC8qKlxuXHQgKiBNZXRhZGF0YSBwYXRoIHRvIHRoZSBkYXRhUG9pbnQuXG5cdCAqL1xuXHRAcHJvcGVydHkoe1xuXHRcdHR5cGU6IFwic3RyaW5nXCIsXG5cdFx0cmVxdWlyZWQ6IHRydWVcblx0fSlcblx0cHVibGljIG1ldGFQYXRoITogc3RyaW5nO1xuXG5cdEBwcm9wZXJ0eSh7XG5cdFx0dHlwZTogXCJzdHJpbmdcIlxuXHR9KVxuXHRwdWJsaWMgY29udGV4dFBhdGg/OiBzdHJpbmc7XG5cblx0QGFnZ3JlZ2F0aW9uKHsgdHlwZTogXCJzYXAuZmUubWFjcm9zLmludGVybmFsLkRhdGFQb2ludEZvcm1hdE9wdGlvbnNcIiwgbXVsdGlwbGU6IGZhbHNlLCBkZWZhdWx0Q2xhc3M6IERhdGFQb2ludEZvcm1hdE9wdGlvbnMgfSlcblx0Zm9ybWF0T3B0aW9ucyE6IERhdGFQb2ludEZvcm1hdE9wdGlvbnM7XG5cblx0LyoqXG5cdCAqIFByb3BlcnR5IHRvIHNldCBhbiBleHRlcm5hbCB2YWx1ZSB0aGF0IGNvbWVzIGZyb20gYSBkaWZmZXJlbnQgbW9kZWwgdGhhbiB0aGUgb0RhdGEgbW9kZWxcblx0ICovXG5cdEBwcm9wZXJ0eSh7XG5cdFx0dHlwZTogXCJzdHJpbmdcIixcblx0XHRpc0JpbmRpbmdJbmZvOiB0cnVlXG5cdH0pXG5cdHB1YmxpYyB2YWx1ZT86IHN0cmluZztcblxuXHQvKipcblx0ICogUHJvcGVydHkgdG8gc2V0IHRoZSB2aXN1YWxpemF0aW9uIHR5cGVcblx0ICovXG5cdHByaXZhdGUgdmlzdWFsaXphdGlvbj86IHN0cmluZztcblxuXHQvKipcblx0ICogUHJvcGVydHkgdG8gc2V0IHRoZSB2aXNpYmlsaXR5XG5cdCAqL1xuXHRwcml2YXRlIHZpc2libGU6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uO1xuXG5cdC8qKlxuXHQgKiBQcm9wZXJ0eSB0byBzZXQgcHJvcGVydHkgaWYgdGhlIHByb3BlcnR5IGhhcyBhIFF1aWNrdmlld1xuXHQgKi9cblx0cHJpdmF0ZSBoYXNRdWlja1ZpZXcgPSBmYWxzZTtcblxuXHRwcml2YXRlIGRhdGFNb2RlbFBhdGg/OiBEYXRhTW9kZWxPYmplY3RQYXRoPERhdGFQb2ludFR5cGU+O1xuXG5cdHByaXZhdGUgdmFsdWVEYXRhTW9kZWxQYXRoPzogRGF0YU1vZGVsT2JqZWN0UGF0aDxQcm9wZXJ0eT47XG5cblx0Y29uc3RydWN0b3IocHJvcGVydGllczogJENvbnRyb2xTZXR0aW5ncyAmIFByb3BlcnRpZXNPZjxEYXRhUG9pbnQ+LCBvdGhlcnM/OiAkQ29udHJvbFNldHRpbmdzKSB7XG5cdFx0c3VwZXIocHJvcGVydGllcywgb3RoZXJzKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBIYW5kbGVyIGZvciB0aGUgb25NZXRhZGF0YUF2YWlsYWJsZSBldmVudC5cblx0ICovXG5cdG9uTWV0YWRhdGFBdmFpbGFibGUoKTogdm9pZCB7XG5cdFx0dGhpcy5nZXRUZW1wbGF0aW5nT2JqZWN0cygpO1xuXHRcdGlmICghdGhpcy5jb250ZW50KSB7XG5cdFx0XHR0aGlzLmNvbnRlbnQgPSB0aGlzLmNyZWF0ZUNvbnRlbnQoKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogRnVuY3Rpb24gdG8gZ2V0IHRoZSB0ZW1wbGF0aW5nIG9iamVjdHMuXG5cdCAqL1xuXHRwcml2YXRlIGdldFRlbXBsYXRpbmdPYmplY3RzKCk6IHZvaWQge1xuXHRcdGNvbnN0IGludGVybmFsRGF0YU1vZGVsUGF0aCA9IHRoaXMuZ2V0RGF0YU1vZGVsT2JqZWN0Rm9yTWV0YVBhdGg8RGF0YVBvaW50VHlwZT4odGhpcy5tZXRhUGF0aCwgdGhpcy5jb250ZXh0UGF0aCk7XG5cdFx0aWYgKCFpbnRlcm5hbERhdGFNb2RlbFBhdGgpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0bGV0IGludGVybmFsVmFsdWVEYXRhTW9kZWxQYXRoO1xuXHRcdHRoaXMudmlzaWJsZSA9IGdldFZpc2libGVFeHByZXNzaW9uKGludGVybmFsRGF0YU1vZGVsUGF0aCk7XG5cdFx0aWYgKGludGVybmFsRGF0YU1vZGVsUGF0aD8udGFyZ2V0T2JqZWN0Py5WYWx1ZT8ucGF0aCkge1xuXHRcdFx0aW50ZXJuYWxWYWx1ZURhdGFNb2RlbFBhdGggPSBlbmhhbmNlRGF0YU1vZGVsUGF0aDxQcm9wZXJ0eT4oXG5cdFx0XHRcdGludGVybmFsRGF0YU1vZGVsUGF0aCxcblx0XHRcdFx0aW50ZXJuYWxEYXRhTW9kZWxQYXRoLnRhcmdldE9iamVjdC5WYWx1ZS5wYXRoXG5cdFx0XHQpO1xuXHRcdH1cblxuXHRcdHRoaXMuZGF0YU1vZGVsUGF0aCA9IGludGVybmFsRGF0YU1vZGVsUGF0aDtcblx0XHR0aGlzLnZhbHVlRGF0YU1vZGVsUGF0aCA9IGludGVybmFsVmFsdWVEYXRhTW9kZWxQYXRoO1xuXHR9XG5cblx0LyoqXG5cdCAqIEZ1bmN0aW9uIHRoYXQgY2FsY3VsYXRlcyB0aGUgdmlzdWFsaXphdGlvbiB0eXBlIGZvciB0aGlzIERhdGFQb2ludC5cblx0ICogQHBhcmFtIGRhdGFNb2RlbFBhdGhcblx0ICovXG5cdHByaXZhdGUgZ2V0RGF0YVBvaW50VmlzdWFsaXphdGlvbihkYXRhTW9kZWxQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPERhdGFQb2ludFR5cGU+KTogdm9pZCB7XG5cdFx0aWYgKGRhdGFNb2RlbFBhdGgudGFyZ2V0T2JqZWN0Py5WaXN1YWxpemF0aW9uID09PSBWaXN1YWxpemF0aW9uVHlwZS5SYXRpbmcpIHtcblx0XHRcdHRoaXMudmlzdWFsaXphdGlvbiA9IFwiUmF0aW5nXCI7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGlmIChkYXRhTW9kZWxQYXRoLnRhcmdldE9iamVjdD8uVmlzdWFsaXphdGlvbiA9PT0gVmlzdWFsaXphdGlvblR5cGUuUHJvZ3Jlc3MpIHtcblx0XHRcdHRoaXMudmlzdWFsaXphdGlvbiA9IFwiUHJvZ3Jlc3NcIjtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0Y29uc3QgdmFsdWVQcm9wZXJ0eSA9IHRoaXMudmFsdWVEYXRhTW9kZWxQYXRoICYmIHRoaXMudmFsdWVEYXRhTW9kZWxQYXRoLnRhcmdldE9iamVjdDtcblx0XHQvL2NoZWNrIHdoZXRoZXIgdGhlIHZpc3VhbGl6YXRpb24gdHlwZSBzaG91bGQgYmUgYW4gb2JqZWN0IG51bWJlciBpbiBjYXNlIG9uZSBvZiB0aGUgaWYgY29uZGl0aW9ucyBtZXRcblx0XHR0aGlzLmhhc1F1aWNrVmlldyA9ICh2YWx1ZVByb3BlcnR5ICYmIGlzVXNlZEluTmF2aWdhdGlvbldpdGhRdWlja1ZpZXdGYWNldHMoZGF0YU1vZGVsUGF0aCwgdmFsdWVQcm9wZXJ0eSkpID8/IGZhbHNlO1xuXHRcdGlmICh0aGlzLnZhbHVlRGF0YU1vZGVsUGF0aCAmJiBnZXRQcm9wZXJ0eVdpdGhTZW1hbnRpY09iamVjdCh0aGlzLnZhbHVlRGF0YU1vZGVsUGF0aCkpIHtcblx0XHRcdHRoaXMuaGFzUXVpY2tWaWV3ID0gdHJ1ZTtcblx0XHR9XG5cdFx0aWYgKHRoaXMuaGFzUXVpY2tWaWV3ICE9PSB0cnVlKSB7XG5cdFx0XHRpZiAoaXNQcm9wZXJ0eSh2YWx1ZVByb3BlcnR5KSAmJiAoaGFzVW5pdCh2YWx1ZVByb3BlcnR5KSB8fCBoYXNDdXJyZW5jeSh2YWx1ZVByb3BlcnR5KSkpIHtcblx0XHRcdFx0Ly8gd2Ugb25seSBzaG93IGFuIG9iamVjdE51bWJlciBpZiB0aGVyZSBpcyBubyBxdWlja3ZpZXcgYW5kIGEgdW5pdCBvciBhIGN1cnJlbmN5XG5cdFx0XHRcdHRoaXMudmlzdWFsaXphdGlvbiA9IFwiT2JqZWN0TnVtYmVyXCI7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvL2RlZmF1bHQgY2FzZSB0byBoYW5kbGUgdGhpcyBhcyBvYmplY3RTdGF0dXMgdHlwZVxuXHRcdHRoaXMudmlzdWFsaXphdGlvbiA9IFwiT2JqZWN0U3RhdHVzXCI7XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgY3VycmVudCBlbmFibGVtZW50IHN0YXRlIG9mIHRoZSBkYXRhUG9pbnQuXG5cdCAqIEByZXR1cm5zIEJvb2xlYW4gdmFsdWUgd2l0aCB0aGUgZW5hYmxlbWVudCBzdGF0ZVxuXHQgKi9cblx0Z2V0RW5hYmxlZCgpOiBib29sZWFuIHtcblx0XHRpZiAodGhpcy5jb250ZW50Py5pc0E8T2JqZWN0U3RhdHVzPihcInNhcC5tLk9iamVjdFN0YXR1c1wiKSkge1xuXHRcdFx0cmV0dXJuIHRoaXMuY29udGVudC5nZXRBY3RpdmUoKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFNldHMgdGhlIGN1cnJlbnQgZW5hYmxlbWVudCBzdGF0ZSBvZiB0aGUgZGF0YXBvaW50LlxuXHQgKiBAcGFyYW0gZW5hYmxlZFxuXHQgKiBAcmV0dXJucyBUaGUgY3VycmVudCBkYXRhcG9pbnQgcmVmZXJlbmNlXG5cdCAqL1xuXHRzZXRFbmFibGVkKGVuYWJsZWQ6IGJvb2xlYW4pOiBDb250cm9sIHtcblx0XHRpZiAodGhpcy5jb250ZW50Py5pc0E8T2JqZWN0U3RhdHVzPihcInNhcC5tLk9iamVjdFN0YXR1c1wiKSkge1xuXHRcdFx0dGhpcy5jb250ZW50LnNldFByb3BlcnR5KFwiYWN0aXZlXCIsIGVuYWJsZWQpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aHJvdyBcInNldEVuYWJsZWQgaXNuJ3QgaW1wbGVtZW50ZWQgZm9yIHRoaXMgZmllbGQgdHlwZVwiO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIGEgUmF0aW5nSW5kaWNhdG9yIGNvbnRyb2wuXG5cdCAqIEBwYXJhbSBkYXRhTW9kZWxQYXRoXG5cdCAqIEByZXR1cm5zIFJhdGluZ0luZGljYXRvclxuXHQgKi9cblx0Y3JlYXRlUmF0aW5nSW5kaWNhdG9yKGRhdGFNb2RlbFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8RGF0YVBvaW50VHlwZT4pOiBSYXRpbmdJbmRpY2F0b3Ige1xuXHRcdGNvbnN0IGRhdGFQb2ludFRhcmdldCA9IGRhdGFNb2RlbFBhdGgudGFyZ2V0T2JqZWN0O1xuXHRcdGNvbnN0IHRhcmdldFZhbHVlID0gdGhpcy5nZXRUYXJnZXRWYWx1ZUJpbmRpbmcoZGF0YU1vZGVsUGF0aCk7XG5cblx0XHRjb25zdCBkYXRhUG9pbnRWYWx1ZSA9IGRhdGFQb2ludFRhcmdldD8uVmFsdWUgfHwgXCJcIjtcblx0XHRjb25zdCBwcm9wZXJ0eVR5cGUgPSBkYXRhUG9pbnRWYWx1ZT8uJHRhcmdldD8udHlwZTtcblxuXHRcdGxldCBudW1iZXJPZkZyYWN0aW9uYWxEaWdpdHM7XG5cdFx0aWYgKHByb3BlcnR5VHlwZSA9PT0gXCJFZG0uRGVjaW1hbFwiICYmIGRhdGFQb2ludFRhcmdldD8uVmFsdWVGb3JtYXQpIHtcblx0XHRcdGlmIChkYXRhUG9pbnRUYXJnZXQuVmFsdWVGb3JtYXQuTnVtYmVyT2ZGcmFjdGlvbmFsRGlnaXRzKSB7XG5cdFx0XHRcdG51bWJlck9mRnJhY3Rpb25hbERpZ2l0cyA9IGRhdGFQb2ludFRhcmdldC5WYWx1ZUZvcm1hdC5OdW1iZXJPZkZyYWN0aW9uYWxEaWdpdHM7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGNvbnN0IHZhbHVlID0gZ2V0VmFsdWVGb3JtYXR0ZWQodGhpcy52YWx1ZURhdGFNb2RlbFBhdGgsIGRhdGFQb2ludFZhbHVlLCBwcm9wZXJ0eVR5cGUsIG51bWJlck9mRnJhY3Rpb25hbERpZ2l0cyk7XG5cblx0XHRyZXR1cm4gKFxuXHRcdFx0PFJhdGluZ0luZGljYXRvclxuXHRcdFx0XHRpZD17dGhpcy5pZFByZWZpeCA/IGdlbmVyYXRlKFt0aGlzLmlkUHJlZml4LCBcIlJhdGluZ0luZGljYXRvci1GaWVsZC1kaXNwbGF5XCJdKSA6IHVuZGVmaW5lZH1cblx0XHRcdFx0bWF4VmFsdWU9e3RhcmdldFZhbHVlfVxuXHRcdFx0XHR2YWx1ZT17dGhpcy52YWx1ZSA/PyBjb21waWxlRXhwcmVzc2lvbih2YWx1ZSl9XG5cdFx0XHRcdHRvb2x0aXA9e3RoaXMuZ2V0VG9vbHRpcFZhbHVlKGRhdGFNb2RlbFBhdGgpfVxuXHRcdFx0XHRpY29uU2l6ZT17dGhpcy5mb3JtYXRPcHRpb25zPy5pY29uU2l6ZX1cblx0XHRcdFx0Y2xhc3M9e3RoaXMuZm9ybWF0T3B0aW9ucz8uc2hvd0xhYmVscyA/PyBmYWxzZSA/IFwic2FwVWlUaW55TWFyZ2luVG9wQm90dG9tXCIgOiB1bmRlZmluZWR9XG5cdFx0XHRcdGVkaXRhYmxlPVwiZmFsc2VcIlxuXHRcdFx0XHRhcmlhTGFiZWxsZWRCeT17dGhpcy5hcmlhTGFiZWxsZWRCeX1cblx0XHRcdC8+XG5cdFx0KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIGEgUHJvZ3Jlc3NJbmRpY2F0b3IgY29udHJvbC5cblx0ICogQHBhcmFtIGRhdGFNb2RlbFBhdGhcblx0ICogQHJldHVybnMgUHJvZ3Jlc3NJbmRpY2F0b3Jcblx0ICovXG5cdGNyZWF0ZVByb2dyZXNzSW5kaWNhdG9yKGRhdGFNb2RlbFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8RGF0YVBvaW50VHlwZT4pOiBQcm9ncmVzc0luZGljYXRvciB7XG5cdFx0Y29uc3QgY3JpdGljYWxpdHlDb2xvckV4cHJlc3Npb24gPSBkYXRhTW9kZWxQYXRoLnRhcmdldE9iamVjdFxuXHRcdFx0PyBidWlsZEV4cHJlc3Npb25Gb3JDcml0aWNhbGl0eUNvbG9yKGRhdGFNb2RlbFBhdGgudGFyZ2V0T2JqZWN0LCBkYXRhTW9kZWxQYXRoKVxuXHRcdFx0OiB1bmRlZmluZWQ7XG5cdFx0Y29uc3QgZGlzcGxheVZhbHVlID0gYnVpbGRFeHByZXNzaW9uRm9yUHJvZ3Jlc3NJbmRpY2F0b3JEaXNwbGF5VmFsdWUoZGF0YU1vZGVsUGF0aCk7XG5cdFx0Y29uc3QgcGVyY2VudFZhbHVlID0gYnVpbGRFeHByZXNzaW9uRm9yUHJvZ3Jlc3NJbmRpY2F0b3JQZXJjZW50VmFsdWUoZGF0YU1vZGVsUGF0aCk7XG5cblx0XHRyZXR1cm4gKFxuXHRcdFx0PFByb2dyZXNzSW5kaWNhdG9yXG5cdFx0XHRcdGlkPXt0aGlzLmlkUHJlZml4ID8gZ2VuZXJhdGUoW3RoaXMuaWRQcmVmaXgsIFwiUHJvZ3Jlc3NJbmRpY2F0b3ItRmllbGQtZGlzcGxheVwiXSkgOiB1bmRlZmluZWR9XG5cdFx0XHRcdGRpc3BsYXlWYWx1ZT17ZGlzcGxheVZhbHVlfVxuXHRcdFx0XHRwZXJjZW50VmFsdWU9e3BlcmNlbnRWYWx1ZX1cblx0XHRcdFx0c3RhdGU9e2NyaXRpY2FsaXR5Q29sb3JFeHByZXNzaW9ufVxuXHRcdFx0XHR0b29sdGlwPXt0aGlzLmdldFRvb2x0aXBWYWx1ZShkYXRhTW9kZWxQYXRoKX1cblx0XHRcdFx0YXJpYUxhYmVsbGVkQnk9e3RoaXMuYXJpYUxhYmVsbGVkQnl9XG5cdFx0XHQvPlxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICogQ3JlYXRlcyBhbiBPYmplY3ROdW1iZXIgY29udHJvbC5cblx0ICogQHBhcmFtIGRhdGFNb2RlbFBhdGhcblx0ICogQHJldHVybnMgT2JqZWN0TnVtYmVyXG5cdCAqL1xuXHRjcmVhdGVPYmplY3ROdW1iZXIoZGF0YU1vZGVsUGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aDxEYXRhUG9pbnRUeXBlPik6IE9iamVjdE51bWJlciB7XG5cdFx0Y29uc3QgY3JpdGljYWxpdHlDb2xvckV4cHJlc3Npb24gPSBkYXRhTW9kZWxQYXRoLnRhcmdldE9iamVjdFxuXHRcdFx0PyBidWlsZEV4cHJlc3Npb25Gb3JDcml0aWNhbGl0eUNvbG9yKGRhdGFNb2RlbFBhdGgudGFyZ2V0T2JqZWN0LCBkYXRhTW9kZWxQYXRoKVxuXHRcdFx0OiB1bmRlZmluZWQ7XG5cdFx0Y29uc3QgZW1wdHlJbmRpY2F0b3JNb2RlID0gdGhpcy5mb3JtYXRPcHRpb25zPy5zaG93RW1wdHlJbmRpY2F0b3IgPz8gZmFsc2UgPyBcIk9uXCIgOiB1bmRlZmluZWQ7XG5cdFx0Y29uc3Qgb2JqZWN0U3RhdHVzTnVtYmVyID0gYnVpbGRGaWVsZEJpbmRpbmdFeHByZXNzaW9uKGRhdGFNb2RlbFBhdGgsIHRoaXMuZm9ybWF0T3B0aW9ucywgdHJ1ZSk7XG5cdFx0Y29uc3QgbGltaXRTaG93RGVjaW1hbHMgPSB0aGlzLmdldE1hbmlmZXN0V3JhcHBlcigpPy5nZXRTYXBGZU1hbmlmZXN0Q29uZmlndXJhdGlvbigpPy5hcHA/LnNob3dPbmx5VW5pdERlY2ltYWxzID09PSB0cnVlO1xuXHRcdGNvbnN0IHByZXNlcnZlRGVjaW1hbHNGb3JDdXJyZW5jeSA9XG5cdFx0XHR0aGlzLmdldE1hbmlmZXN0V3JhcHBlcigpPy5nZXRTYXBGZU1hbmlmZXN0Q29uZmlndXJhdGlvbigpPy5hcHA/LnByZXNlcnZlRGVjaW1hbHNGb3JDdXJyZW5jeSA9PT0gdHJ1ZTtcblx0XHRjb25zdCB1bml0ID1cblx0XHRcdHRoaXMuZm9ybWF0T3B0aW9ucz8ubWVhc3VyZURpc3BsYXlNb2RlID09PSBcIkhpZGRlblwiXG5cdFx0XHRcdD8gdW5kZWZpbmVkXG5cdFx0XHRcdDogY29tcGlsZUV4cHJlc3Npb24oXG5cdFx0XHRcdFx0XHRVSUZvcm1hdHRlcnMuZ2V0QmluZGluZ0ZvclVuaXRPckN1cnJlbmN5KFxuXHRcdFx0XHRcdFx0XHR0aGlzLnZhbHVlRGF0YU1vZGVsUGF0aCxcblx0XHRcdFx0XHRcdFx0dHJ1ZSxcblx0XHRcdFx0XHRcdFx0bGltaXRTaG93RGVjaW1hbHMsXG5cdFx0XHRcdFx0XHRcdHByZXNlcnZlRGVjaW1hbHNGb3JDdXJyZW5jeVxuXHRcdFx0XHRcdFx0KVxuXHRcdFx0XHQgICk7XG5cblx0XHRyZXR1cm4gKFxuXHRcdFx0PE9iamVjdE51bWJlclxuXHRcdFx0XHRpZD17dGhpcy5pZFByZWZpeCA/IGdlbmVyYXRlKFt0aGlzLmlkUHJlZml4LCBcIk9iamVjdE51bWJlci1GaWVsZC1kaXNwbGF5XCJdKSA6IHVuZGVmaW5lZH1cblx0XHRcdFx0c3RhdGU9e2NyaXRpY2FsaXR5Q29sb3JFeHByZXNzaW9ufVxuXHRcdFx0XHRudW1iZXI9e3RoaXMudmFsdWUgPz8gb2JqZWN0U3RhdHVzTnVtYmVyfVxuXHRcdFx0XHR1bml0PXt1bml0fVxuXHRcdFx0XHR2aXNpYmxlPXt0aGlzLnZpc2libGV9XG5cdFx0XHRcdGVtcGhhc2l6ZWQ9XCJmYWxzZVwiXG5cdFx0XHRcdGNsYXNzPXt0aGlzLmZvcm1hdE9wdGlvbnM/LmRhdGFQb2ludFN0eWxlID09PSBcImxhcmdlXCIgPyBcInNhcE1PYmplY3ROdW1iZXJMYXJnZVwiIDogdW5kZWZpbmVkfVxuXHRcdFx0XHR0b29sdGlwPXt0aGlzLmdldFRvb2x0aXBWYWx1ZShkYXRhTW9kZWxQYXRoKX1cblx0XHRcdFx0ZW1wdHlJbmRpY2F0b3JNb2RlPXtlbXB0eUluZGljYXRvck1vZGV9XG5cdFx0XHQvPlxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICogUmV0dXJucyB0aGUgZGVwZW5kZW50LlxuXHQgKiBAcmV0dXJucyBEZXBlbmRlbnQgZWl0aGVyIHdpdGggdGhlIFF1aWNrVmlldyBvciBhbiBlbXB0eSBzdHJpbmcuXG5cdCAqL1xuXHRwcml2YXRlIGNyZWF0ZURlcGVuZGVudHMoKTogTWRjTGluayB8IHVuZGVmaW5lZCB7XG5cdFx0aWYgKHRoaXMuaGFzUXVpY2tWaWV3KSB7XG5cdFx0XHRyZXR1cm4gbmV3IFF1aWNrVmlldyhcblx0XHRcdFx0dGhpcy52YWx1ZURhdGFNb2RlbFBhdGggYXMgRGF0YU1vZGVsT2JqZWN0UGF0aDxQcm9wZXJ0eT4sXG5cdFx0XHRcdHRoaXMubWV0YVBhdGgsXG5cdFx0XHRcdHRoaXMuY29udGV4dFBhdGggPz8gXCJcIlxuXHRcdFx0KS5jcmVhdGVDb250ZW50KCkgYXMgTWRjTGluaztcblx0XHR9XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIGFuIE9iamVjdFN0YXR1cyBjb250cm9sLlxuXHQgKiBAcGFyYW0gZGF0YU1vZGVsUGF0aFxuXHQgKiBAcmV0dXJucyBPYmplY3RTdGF0dXNcblx0ICovXG5cdGNyZWF0ZU9iamVjdFN0YXR1cyhkYXRhTW9kZWxQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPERhdGFQb2ludFR5cGU+KTogT2JqZWN0U3RhdHVzIHtcblx0XHRsZXQgY3JpdGljYWxpdHlDb2xvckV4cHJlc3Npb24gPSBkYXRhTW9kZWxQYXRoLnRhcmdldE9iamVjdFxuXHRcdFx0PyBidWlsZEV4cHJlc3Npb25Gb3JDcml0aWNhbGl0eUNvbG9yKGRhdGFNb2RlbFBhdGgudGFyZ2V0T2JqZWN0LCBkYXRhTW9kZWxQYXRoKVxuXHRcdFx0OiB1bmRlZmluZWQ7XG5cdFx0aWYgKGNyaXRpY2FsaXR5Q29sb3JFeHByZXNzaW9uID09PSBcIk5vbmVcIiAmJiB0aGlzLnZhbHVlRGF0YU1vZGVsUGF0aCkge1xuXHRcdFx0Y3JpdGljYWxpdHlDb2xvckV4cHJlc3Npb24gPSB0aGlzLmhhc1F1aWNrVmlldyA/IFwiSW5mb3JtYXRpb25cIiA6IFwiTm9uZVwiO1xuXHRcdH1cblx0XHRjb25zdCBlbXB0eUluZGljYXRvck1vZGUgPSB0aGlzLmZvcm1hdE9wdGlvbnM/LnNob3dFbXB0eUluZGljYXRvciA/PyBmYWxzZSA/IFwiT25cIiA6IHVuZGVmaW5lZDtcblx0XHRjb25zdCBvYmplY3RTdGF0dXNUZXh0ID0gYnVpbGRGaWVsZEJpbmRpbmdFeHByZXNzaW9uKGRhdGFNb2RlbFBhdGgsIHRoaXMuZm9ybWF0T3B0aW9ucywgZmFsc2UpO1xuXHRcdGNvbnN0IGljb25FeHByZXNzaW9uID1cblx0XHRcdHRoaXMuZm9ybWF0T3B0aW9ucz8uZGF0YVBvaW50U3R5bGUgPT09IFwibGFyZ2VcIiB8fCAhZGF0YU1vZGVsUGF0aC50YXJnZXRPYmplY3Rcblx0XHRcdFx0PyB1bmRlZmluZWRcblx0XHRcdFx0OiBidWlsZEV4cHJlc3Npb25Gb3JDcml0aWNhbGl0eUljb24oZGF0YU1vZGVsUGF0aC50YXJnZXRPYmplY3QsIGRhdGFNb2RlbFBhdGgpO1xuXG5cdFx0cmV0dXJuIChcblx0XHRcdDxPYmplY3RTdGF0dXNcblx0XHRcdFx0aWQ9e3RoaXMuaWRQcmVmaXggPyBnZW5lcmF0ZShbdGhpcy5pZFByZWZpeCwgXCJPYmplY3RTdGF0dXMtRmllbGQtZGlzcGxheVwiXSkgOiB1bmRlZmluZWR9XG5cdFx0XHRcdGNsYXNzPXt0aGlzLmZvcm1hdE9wdGlvbnM/LmRhdGFQb2ludFN0eWxlID09PSBcImxhcmdlXCIgPyBcInNhcE1PYmplY3RTdGF0dXNMYXJnZSBzYXBNT2JqZWN0U3RhdHVzTG9uZ1RleHRcIiA6IHVuZGVmaW5lZH1cblx0XHRcdFx0aWNvbj17aWNvbkV4cHJlc3Npb259XG5cdFx0XHRcdHRvb2x0aXA9e3RoaXMuZ2V0VG9vbHRpcFZhbHVlKGRhdGFNb2RlbFBhdGgpfVxuXHRcdFx0XHRzdGF0ZT17Y3JpdGljYWxpdHlDb2xvckV4cHJlc3Npb259XG5cdFx0XHRcdHRleHQ9e3RoaXMudmFsdWUgPz8gb2JqZWN0U3RhdHVzVGV4dH1cblx0XHRcdFx0ZW1wdHlJbmRpY2F0b3JNb2RlPXtlbXB0eUluZGljYXRvck1vZGV9XG5cdFx0XHRcdGFjdGl2ZT17dGhpcy5oYXNRdWlja1ZpZXd9XG5cdFx0XHRcdHByZXNzPXtGaWVsZFJ1bnRpbWVIZWxwZXIucHJlc3NMaW5rIGFzIHVua25vd24gYXMgKG9FdmVudDogT2JqZWN0U3RhdHVzJFByZXNzRXZlbnQpID0+IHZvaWR9XG5cdFx0XHRcdGFyaWFMYWJlbGxlZEJ5PXt0aGlzLmFyaWFMYWJlbGxlZEJ5fVxuXHRcdFx0XHRyZWFjdGl2ZUFyZWFNb2RlPXt0aGlzLmZvcm1hdE9wdGlvbnM/LnJlYWN0aXZlQXJlYU1vZGV9XG5cdFx0XHQ+XG5cdFx0XHRcdHt7XG5cdFx0XHRcdFx0ZGVwZW5kZW50czogdGhpcy5jcmVhdGVEZXBlbmRlbnRzKClcblx0XHRcdFx0fX1cblx0XHRcdDwvT2JqZWN0U3RhdHVzPlxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICogVGhlIGhlbHBlciBtZXRob2QgdG8gZ2V0IGEgcG9zc2libGUgdG9vbHRpcCB0ZXh0LlxuXHQgKiBAcGFyYW0gZGF0YU1vZGVsUGF0aFxuXHQgKiBAcmV0dXJucyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb25cblx0ICovXG5cdHByaXZhdGUgZ2V0VG9vbHRpcFZhbHVlKGRhdGFNb2RlbFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8RGF0YVBvaW50VHlwZT4pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248c3RyaW5nPiB8IHVuZGVmaW5lZCB7XG5cdFx0cmV0dXJuIGRhdGFNb2RlbFBhdGgudGFyZ2V0T2JqZWN0Py5hbm5vdGF0aW9ucz8uQ29tbW9uPy5RdWlja0luZm9cblx0XHRcdD8gZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKGRhdGFNb2RlbFBhdGgudGFyZ2V0T2JqZWN0Py5hbm5vdGF0aW9ucz8uQ29tbW9uPy5RdWlja0luZm8sIGdldFJlbGF0aXZlUGF0aHMoZGF0YU1vZGVsUGF0aCkpXG5cdFx0XHQ6IHVuZGVmaW5lZDtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGUgaGVscGVyIG1ldGhvZCB0byBnZXQgYSBwb3NzaWJsZSB0YXJnZXQgdmFsdWUgYmluZGluZy5cblx0ICogQHBhcmFtIGRhdGFNb2RlbFBhdGhcblx0ICogQHJldHVybnMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uXG5cdCAqL1xuXHRwcml2YXRlIGdldFRhcmdldFZhbHVlQmluZGluZyhcblx0XHRkYXRhTW9kZWxQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPERhdGFQb2ludFR5cGU+XG5cdCk6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxzdHJpbmcgfCBudW1iZXI+IHwgdW5kZWZpbmVkIHtcblx0XHRyZXR1cm4gZGF0YU1vZGVsUGF0aC50YXJnZXRPYmplY3Q/LlRhcmdldFZhbHVlXG5cdFx0XHQ/IGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihkYXRhTW9kZWxQYXRoLnRhcmdldE9iamVjdD8uVGFyZ2V0VmFsdWUsIGdldFJlbGF0aXZlUGF0aHMoZGF0YU1vZGVsUGF0aCkpXG5cdFx0XHQ6IHVuZGVmaW5lZDtcblx0fVxuXG5cdGNyZWF0ZUNvbnRlbnQoKTogT2JqZWN0U3RhdHVzIHwgT2JqZWN0TnVtYmVyIHwgUmF0aW5nSW5kaWNhdG9yIHwgUHJvZ3Jlc3NJbmRpY2F0b3IgfCB1bmRlZmluZWQge1xuXHRcdGlmICghdGhpcy5kYXRhTW9kZWxQYXRoKSB7XG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdH1cblx0XHR0aGlzLmdldERhdGFQb2ludFZpc3VhbGl6YXRpb24odGhpcy5kYXRhTW9kZWxQYXRoKTtcblx0XHRzd2l0Y2ggKHRoaXMudmlzdWFsaXphdGlvbikge1xuXHRcdFx0Y2FzZSBcIlJhdGluZ1wiOiB7XG5cdFx0XHRcdHJldHVybiB0aGlzLmNyZWF0ZVJhdGluZ0luZGljYXRvcih0aGlzLmRhdGFNb2RlbFBhdGgpO1xuXHRcdFx0fVxuXHRcdFx0Y2FzZSBcIlByb2dyZXNzXCI6IHtcblx0XHRcdFx0cmV0dXJuIHRoaXMuY3JlYXRlUHJvZ3Jlc3NJbmRpY2F0b3IodGhpcy5kYXRhTW9kZWxQYXRoKTtcblx0XHRcdH1cblx0XHRcdGNhc2UgXCJPYmplY3ROdW1iZXJcIjoge1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5jcmVhdGVPYmplY3ROdW1iZXIodGhpcy5kYXRhTW9kZWxQYXRoKTtcblx0XHRcdH1cblx0XHRcdGRlZmF1bHQ6IHtcblx0XHRcdFx0cmV0dXJuIHRoaXMuY3JlYXRlT2JqZWN0U3RhdHVzKHRoaXMuZGF0YU1vZGVsUGF0aCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFJldHJpZXZlcyB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgZGF0YXBvaW50LlxuXHQgKiBAcmV0dXJucyBUaGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgZGF0YXBvaW50XG5cdCAqL1xuXHRnZXRWYWx1ZSgpOiBib29sZWFuIHwgc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0XHRpZiAodGhpcy5jb250ZW50Py5pc0E8T2JqZWN0U3RhdHVzPihcInNhcC5tLk9iamVjdFN0YXR1c1wiKSkge1xuXHRcdFx0cmV0dXJuIHRoaXMuY29udGVudC5nZXRUZXh0KCk7XG5cdFx0fSBlbHNlIGlmICh0aGlzLmNvbnRlbnQ/LmlzQTxPYmplY3ROdW1iZXI+KFwic2FwLm0uT2JqZWN0TnVtYmVyXCIpKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5jb250ZW50LmdldE51bWJlcigpO1xuXHRcdH0gZWxzZSBpZiAodGhpcy5jb250ZW50Py5pc0E8UHJvZ3Jlc3NJbmRpY2F0b3I+KFwic2FwLm0uUHJvZ3Jlc3NJbmRpY2F0b3JcIikpIHtcblx0XHRcdHJldHVybiB0aGlzLmNvbnRlbnQuZ2V0RGlzcGxheVZhbHVlKCk7XG5cdFx0fSBlbHNlIGlmICh0aGlzLmNvbnRlbnQ/LmlzQTxSYXRpbmdJbmRpY2F0b3I+KFwic2FwLm0uUmF0aW5nSW5kaWNhdG9yXCIpKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5jb250ZW50LmdldFZhbHVlKCkudG9TdHJpbmcoKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5nZXRQcm9wZXJ0eShcInZhbHVlXCIpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBTZXRzIHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBmaWVsZC5cblx0ICogQHBhcmFtIHZhbHVlXG5cdCAqIEByZXR1cm5zIFRoZSBjdXJyZW50IGZpZWxkIHJlZmVyZW5jZVxuXHQgKi9cblx0c2V0VmFsdWUodmFsdWU6IGJvb2xlYW4gfCBzdHJpbmcgfCBudW1iZXIgfCB1bmRlZmluZWQpOiBDb250cm9sIHtcblx0XHR0aGlzLnNldFByb3BlcnR5KFwidmFsdWVcIiwgdmFsdWUpO1xuXHRcdGlmICh0aGlzLmNvbnRlbnQ/LmlzQTxPYmplY3RTdGF0dXM+KFwic2FwLm0uT2JqZWN0U3RhdHVzXCIpKSB7XG5cdFx0XHR0aGlzLmNvbnRlbnQuc2V0VGV4dCh2YWx1ZSBhcyBzdHJpbmcgfCB1bmRlZmluZWQpO1xuXHRcdH0gZWxzZSBpZiAodGhpcy5jb250ZW50Py5pc0E8T2JqZWN0TnVtYmVyPihcInNhcC5tLk9iamVjdE51bWJlclwiKSkge1xuXHRcdFx0dGhpcy5jb250ZW50LnNldE51bWJlcih2YWx1ZSBhcyBzdHJpbmcpO1xuXHRcdH0gZWxzZSBpZiAodGhpcy5jb250ZW50Py5pc0E8UHJvZ3Jlc3NJbmRpY2F0b3I+KFwic2FwLm0uUHJvZ3Jlc3NJbmRpY2F0b3JcIikpIHtcblx0XHRcdExvZy5lcnJvcihcInNldFZhbHVlIGlzbid0IGltcGxlbWVudGVkIGZvciB0aGlzIGZpZWxkIHR5cGUgeWV0XCIpO1xuXHRcdH0gZWxzZSBpZiAodGhpcy5jb250ZW50Py5pc0E8UmF0aW5nSW5kaWNhdG9yPihcInNhcC5tLlJhdGluZ0luZGljYXRvclwiKSkge1xuXHRcdFx0dGhpcy5jb250ZW50LnNldFZhbHVlKHZhbHVlIGFzIG51bWJlcik7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O01BbUNxQkEsU0FBUyxJQUFBQyxJQUFBLEdBRDdCQyxjQUFjLENBQUMsa0NBQWtDLENBQUMsRUFBQUMsS0FBQSxHQUtqREMsV0FBVyxDQUFDO0lBQ1pDLElBQUksRUFBRTtFQUNQLENBQUMsQ0FBQyxFQUFBQyxLQUFBLEdBTURDLFFBQVEsQ0FBQztJQUNURixJQUFJLEVBQUUsUUFBUTtJQUNkRyxRQUFRLEVBQUU7RUFDWCxDQUFDLENBQUMsRUFBQUMsS0FBQSxHQUdERixRQUFRLENBQUM7SUFDVEYsSUFBSSxFQUFFO0VBQ1AsQ0FBQyxDQUFDLEVBQUFLLEtBQUEsR0FHREMsV0FBVyxDQUFDO0lBQUVOLElBQUksRUFBRSwrQ0FBK0M7SUFBRU8sUUFBUSxFQUFFLEtBQUs7SUFBRUMsWUFBWSxFQUFFQztFQUF1QixDQUFDLENBQUMsRUFBQUMsS0FBQSxHQU03SFIsUUFBUSxDQUFDO0lBQ1RGLElBQUksRUFBRSxRQUFRO0lBQ2RXLGFBQWEsRUFBRTtFQUNoQixDQUFDLENBQUMsRUFBQWYsSUFBQSxDQUFBZ0IsTUFBQSxJQUFBQyxPQUFBLDBCQUFBQyxjQUFBO0lBc0JGLFNBQUFuQixVQUFZb0IsVUFBc0QsRUFBRUMsTUFBeUIsRUFBRTtNQUFBLElBQUFDLEtBQUE7TUFDOUZBLEtBQUEsR0FBQUgsY0FBQSxDQUFBSSxJQUFBLE9BQU1ILFVBQVUsRUFBRUMsTUFBTSxDQUFDO01BdEQxQjtBQUNEO0FBQ0E7TUFGQ0csMEJBQUEsQ0FBQUYsS0FBQSxjQUFBRyxXQUFBLEVBQUFILEtBQUE7TUFRQTtBQUNEO0FBQ0E7TUFGQ0UsMEJBQUEsQ0FBQUYsS0FBQSxjQUFBSSxZQUFBLEVBQUFKLEtBQUE7TUFBQUUsMEJBQUEsQ0FBQUYsS0FB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
@@ -249,10 +249,19 @@ export default class DataPoint extends BuildingBlock<Control> {
249
249
  const emptyIndicatorMode = this.formatOptions?.showEmptyIndicator ?? false ? "On" : undefined;
250
250
  const objectStatusNumber = buildFieldBindingExpression(dataModelPath, this.formatOptions, true);
251
251
  const limitShowDecimals = this.getManifestWrapper()?.getSapFeManifestConfiguration()?.app?.showOnlyUnitDecimals === true;
252
+ const preserveDecimalsForCurrency =
253
+ this.getManifestWrapper()?.getSapFeManifestConfiguration()?.app?.preserveDecimalsForCurrency === true;
252
254
  const unit =
253
255
  this.formatOptions?.measureDisplayMode === "Hidden"
254
256
  ? undefined
255
- : compileExpression(UIFormatters.getBindingForUnitOrCurrency(this.valueDataModelPath, true, limitShowDecimals));
257
+ : compileExpression(
258
+ UIFormatters.getBindingForUnitOrCurrency(
259
+ this.valueDataModelPath,
260
+ true,
261
+ limitShowDecimals,
262
+ preserveDecimalsForCurrency
263
+ )
264
+ );
256
265
 
257
266
  return (
258
267
  <ObjectNumber