@sapui5/sap.fe.macros 1.138.0 → 1.139.1

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 (210) hide show
  1. package/package.json +1 -1
  2. package/src/sap/fe/macros/.library +1 -1
  3. package/src/sap/fe/macros/Breadcrumbs.js +269 -0
  4. package/src/sap/fe/macros/Breadcrumbs.tsx +243 -0
  5. package/src/sap/fe/macros/Chart.js +1 -1
  6. package/src/sap/fe/macros/Chart.tsx +1 -1
  7. package/src/sap/fe/macros/CommonHelper.js +2 -2
  8. package/src/sap/fe/macros/CommonHelper.ts +1 -1
  9. package/src/sap/fe/macros/Field.js +21 -4
  10. package/src/sap/fe/macros/Field.ts +21 -3
  11. package/src/sap/fe/macros/FooterContent.js +40 -10
  12. package/src/sap/fe/macros/FooterContent.tsx +44 -8
  13. package/src/sap/fe/macros/FormElement.js +2 -2
  14. package/src/sap/fe/macros/FormElement.ts +1 -2
  15. package/src/sap/fe/macros/MultiValueField.js +17 -4
  16. package/src/sap/fe/macros/MultiValueField.tsx +7 -2
  17. package/src/sap/fe/macros/RichTextEditor.js +30 -6
  18. package/src/sap/fe/macros/RichTextEditor.tsx +34 -7
  19. package/src/sap/fe/macros/Share.js +73 -40
  20. package/src/sap/fe/macros/Share.tsx +29 -1
  21. package/src/sap/fe/macros/ValueHelp.js +4 -29
  22. package/src/sap/fe/macros/ValueHelp.tsx +2 -43
  23. package/src/sap/fe/macros/ai/EasyFillButton.js +10 -4
  24. package/src/sap/fe/macros/ai/EasyFillButton.tsx +8 -1
  25. package/src/sap/fe/macros/ai/EasyFillDialog.js +25 -10
  26. package/src/sap/fe/macros/ai/EasyFillDialog.tsx +32 -23
  27. package/src/sap/fe/macros/ai/EasyFilterBar.js +30 -30
  28. package/src/sap/fe/macros/ai/EasyFilterBar.tsx +40 -43
  29. package/src/sap/fe/macros/ai/EasyFilterDataFetcher.js +11 -5
  30. package/src/sap/fe/macros/ai/EasyFilterDataFetcher.ts +14 -5
  31. package/src/sap/fe/macros/chart/ChartDelegate.js +4 -4
  32. package/src/sap/fe/macros/chart/ChartDelegate.ts +3 -3
  33. package/src/sap/fe/macros/chart/MdcChartTemplate.js +20 -6
  34. package/src/sap/fe/macros/chart/MdcChartTemplate.tsx +16 -8
  35. package/src/sap/fe/macros/controls/BuildingBlockObjectProperty.js +5 -1
  36. package/src/sap/fe/macros/controls/BuildingBlockObjectProperty.ts +4 -0
  37. package/src/sap/fe/macros/controls/FieldWrapper.js +9 -3
  38. package/src/sap/fe/macros/controls/FieldWrapper.ts +11 -2
  39. package/src/sap/fe/macros/controls/FilterBar.js +86 -3
  40. package/src/sap/fe/macros/controls/FilterBar.ts +97 -2
  41. package/src/sap/fe/macros/controls/RequiredFlexBox.js +62 -0
  42. package/src/sap/fe/macros/controls/RequiredFlexBox.tsx +20 -0
  43. package/src/sap/fe/macros/controls/Section.js +3 -2
  44. package/src/sap/fe/macros/controls/Section.ts +2 -1
  45. package/src/sap/fe/macros/controls/filterbar/VisualFilter.js +21 -11
  46. package/src/sap/fe/macros/controls/filterbar/VisualFilter.ts +25 -11
  47. package/src/sap/fe/macros/controls/filterbar/VisualFilterContainer.js +11 -2
  48. package/src/sap/fe/macros/controls/filterbar/VisualFilterContainer.ts +12 -1
  49. package/src/sap/fe/macros/controls/filterbar/utils/VisualFilterUtils.js +18 -1
  50. package/src/sap/fe/macros/controls/filterbar/utils/VisualFilterUtils.ts +20 -0
  51. package/src/sap/fe/macros/coreUI/CreateDialog.js +2 -2
  52. package/src/sap/fe/macros/coreUI/CreateDialog.tsx +1 -1
  53. package/src/sap/fe/macros/designtime/Designtime.helper.js +12 -2
  54. package/src/sap/fe/macros/designtime/Designtime.helper.ts +12 -0
  55. package/src/sap/fe/macros/draftIndicator/DraftIndicator.js +16 -5
  56. package/src/sap/fe/macros/draftIndicator/DraftIndicator.tsx +6 -1
  57. package/src/sap/fe/macros/field/FieldBaseDelegate.js +20 -8
  58. package/src/sap/fe/macros/field/FieldBaseDelegate.ts +34 -9
  59. package/src/sap/fe/macros/field/FieldFormatOptions.js +73 -44
  60. package/src/sap/fe/macros/field/FieldFormatOptions.ts +20 -2
  61. package/src/sap/fe/macros/field/FieldRuntime.js +38 -8
  62. package/src/sap/fe/macros/field/FieldRuntime.ts +65 -7
  63. package/src/sap/fe/macros/filter/FilterUtils.js +7 -1
  64. package/src/sap/fe/macros/filter/FilterUtils.ts +7 -0
  65. package/src/sap/fe/macros/filterBar/FilterBar.block.js +8 -2
  66. package/src/sap/fe/macros/filterBar/FilterBar.block.tsx +2 -5
  67. package/src/sap/fe/macros/filterBar/FilterBarAPI.js +8 -8
  68. package/src/sap/fe/macros/filterBar/FilterBarAPI.ts +8 -8
  69. package/src/sap/fe/macros/filterBar/designtime/FilterBar.designtime.js +3 -1
  70. package/src/sap/fe/macros/filterBar/designtime/FilterBar.designtime.ts +2 -0
  71. package/src/sap/fe/macros/filterBar/mixin/FilterBarAPIStateHandler.js +1 -1
  72. package/src/sap/fe/macros/filterBar/mixin/FilterBarAPIStateHandler.ts +1 -1
  73. package/src/sap/fe/macros/form/Form.block.js +6 -2
  74. package/src/sap/fe/macros/form/Form.block.ts +4 -1
  75. package/src/sap/fe/macros/form/FormActionButtons.fragment.xml +13 -2
  76. package/src/sap/fe/macros/form/FormContainer.fragment.xml +40 -0
  77. package/src/sap/fe/macros/form/FormContainerAPI.js +14 -16
  78. package/src/sap/fe/macros/form/FormContainerAPI.ts +13 -15
  79. package/src/sap/fe/macros/form/FormDelegate.js +20 -1
  80. package/src/sap/fe/macros/form/FormDelegate.ts +25 -0
  81. package/src/sap/fe/macros/formatters/TableFormatter.js +10 -1
  82. package/src/sap/fe/macros/formatters/TableFormatter.ts +14 -5
  83. package/src/sap/fe/macros/inlineEdit/InlineEdit.js +15 -3
  84. package/src/sap/fe/macros/inlineEdit/InlineEdit.ts +14 -2
  85. package/src/sap/fe/macros/internal/DataPoint.js +2 -1
  86. package/src/sap/fe/macros/internal/DataPoint.tsx +1 -0
  87. package/src/sap/fe/macros/internal/DataPointFormatOptions.js +11 -2
  88. package/src/sap/fe/macros/internal/DataPointFormatOptions.ts +3 -0
  89. package/src/sap/fe/macros/internal/FilterField.block.js +4 -2
  90. package/src/sap/fe/macros/internal/FilterField.block.ts +3 -1
  91. package/src/sap/fe/macros/internal/field/CheckBoxGroup.fragment.xml +25 -0
  92. package/src/sap/fe/macros/internal/field/DisplayStyle.js +52 -12
  93. package/src/sap/fe/macros/internal/field/DisplayStyle.tsx +54 -5
  94. package/src/sap/fe/macros/internal/field/EditStyle.js +5 -1
  95. package/src/sap/fe/macros/internal/field/EditStyle.tsx +4 -0
  96. package/src/sap/fe/macros/internal/field/FieldStructureHelper.js +9 -2
  97. package/src/sap/fe/macros/internal/field/FieldStructureHelper.ts +10 -0
  98. package/src/sap/fe/macros/internal/field/FieldStyles.js +1 -1
  99. package/src/sap/fe/macros/internal/field/FieldStyles.tsx +2 -1
  100. package/src/sap/fe/macros/internal/valuehelp/TableDelegate.js +4 -4
  101. package/src/sap/fe/macros/internal/valuehelp/TableDelegate.ts +3 -3
  102. package/src/sap/fe/macros/internal/valuehelp/ValueListDialogTable.fragment.xml +1 -0
  103. package/src/sap/fe/macros/internal/valuehelp/ValueListHelper.js +11 -3
  104. package/src/sap/fe/macros/internal/valuehelp/ValueListHelper.ts +12 -7
  105. package/src/sap/fe/macros/internal/valuehelp/ValueListTable.fragment.xml +1 -0
  106. package/src/sap/fe/macros/library.js +1 -1
  107. package/src/sap/fe/macros/mdc/adapter/StateHelper.js +11 -6
  108. package/src/sap/fe/macros/mdc/adapter/StateHelper.ts +12 -7
  109. package/src/sap/fe/macros/messagebundle.properties +37 -29
  110. package/src/sap/fe/macros/messagebundle_ar.properties +5 -3
  111. package/src/sap/fe/macros/messagebundle_bg.properties +6 -4
  112. package/src/sap/fe/macros/messagebundle_ca.properties +8 -6
  113. package/src/sap/fe/macros/messagebundle_cnr.properties +5 -3
  114. package/src/sap/fe/macros/messagebundle_cs.properties +4 -2
  115. package/src/sap/fe/macros/messagebundle_cy.properties +7 -5
  116. package/src/sap/fe/macros/messagebundle_da.properties +6 -4
  117. package/src/sap/fe/macros/messagebundle_de.properties +11 -9
  118. package/src/sap/fe/macros/messagebundle_el.properties +7 -5
  119. package/src/sap/fe/macros/messagebundle_en.properties +8 -6
  120. package/src/sap/fe/macros/messagebundle_en_GB.properties +8 -6
  121. package/src/sap/fe/macros/messagebundle_en_US_saprigi.properties +8 -6
  122. package/src/sap/fe/macros/messagebundle_es.properties +6 -4
  123. package/src/sap/fe/macros/messagebundle_es_MX.properties +6 -4
  124. package/src/sap/fe/macros/messagebundle_et.properties +5 -3
  125. package/src/sap/fe/macros/messagebundle_fi.properties +8 -6
  126. package/src/sap/fe/macros/messagebundle_fr.properties +6 -4
  127. package/src/sap/fe/macros/messagebundle_fr_CA.properties +8 -6
  128. package/src/sap/fe/macros/messagebundle_hi.properties +6 -4
  129. package/src/sap/fe/macros/messagebundle_hr.properties +6 -4
  130. package/src/sap/fe/macros/messagebundle_hu.properties +4 -2
  131. package/src/sap/fe/macros/messagebundle_id.properties +8 -6
  132. package/src/sap/fe/macros/messagebundle_it.properties +4 -2
  133. package/src/sap/fe/macros/messagebundle_iw.properties +5 -3
  134. package/src/sap/fe/macros/messagebundle_ja.properties +5 -3
  135. package/src/sap/fe/macros/messagebundle_kk.properties +5 -3
  136. package/src/sap/fe/macros/messagebundle_ko.properties +4 -2
  137. package/src/sap/fe/macros/messagebundle_lt.properties +6 -4
  138. package/src/sap/fe/macros/messagebundle_lv.properties +5 -3
  139. package/src/sap/fe/macros/messagebundle_mk.properties +5 -3
  140. package/src/sap/fe/macros/messagebundle_ms.properties +8 -6
  141. package/src/sap/fe/macros/messagebundle_nl.properties +7 -5
  142. package/src/sap/fe/macros/messagebundle_no.properties +6 -4
  143. package/src/sap/fe/macros/messagebundle_pl.properties +6 -4
  144. package/src/sap/fe/macros/messagebundle_pt.properties +7 -5
  145. package/src/sap/fe/macros/messagebundle_pt_PT.properties +6 -4
  146. package/src/sap/fe/macros/messagebundle_ro.properties +7 -5
  147. package/src/sap/fe/macros/messagebundle_ru.properties +4 -2
  148. package/src/sap/fe/macros/messagebundle_sh.properties +5 -3
  149. package/src/sap/fe/macros/messagebundle_sk.properties +5 -3
  150. package/src/sap/fe/macros/messagebundle_sl.properties +6 -4
  151. package/src/sap/fe/macros/messagebundle_sr.properties +5 -3
  152. package/src/sap/fe/macros/messagebundle_sv.properties +5 -3
  153. package/src/sap/fe/macros/messagebundle_th.properties +4 -2
  154. package/src/sap/fe/macros/messagebundle_tr.properties +4 -2
  155. package/src/sap/fe/macros/messagebundle_uk.properties +10 -8
  156. package/src/sap/fe/macros/messagebundle_vi.properties +6 -4
  157. package/src/sap/fe/macros/messagebundle_zh_CN.properties +5 -3
  158. package/src/sap/fe/macros/messagebundle_zh_TW.properties +5 -3
  159. package/src/sap/fe/macros/messages/MessageButton.js +17 -19
  160. package/src/sap/fe/macros/messages/MessageButton.ts +24 -22
  161. package/src/sap/fe/macros/table/Action.js +24 -2
  162. package/src/sap/fe/macros/table/Action.ts +13 -0
  163. package/src/sap/fe/macros/table/ActionGroup.js +24 -2
  164. package/src/sap/fe/macros/table/ActionGroup.ts +13 -0
  165. package/src/sap/fe/macros/table/ActionGroupOverride.js +24 -2
  166. package/src/sap/fe/macros/table/ActionGroupOverride.ts +13 -0
  167. package/src/sap/fe/macros/table/ActionOverride.js +24 -2
  168. package/src/sap/fe/macros/table/ActionOverride.ts +13 -0
  169. package/src/sap/fe/macros/table/ActionsTemplating.js +73 -12
  170. package/src/sap/fe/macros/table/ActionsTemplating.tsx +69 -13
  171. package/src/sap/fe/macros/table/Column.js +3 -3
  172. package/src/sap/fe/macros/table/Column.ts +2 -2
  173. package/src/sap/fe/macros/table/MdcTableTemplate.js +20 -8
  174. package/src/sap/fe/macros/table/MdcTableTemplate.tsx +32 -6
  175. package/src/sap/fe/macros/table/QuickFilterSelector.js +35 -14
  176. package/src/sap/fe/macros/table/QuickFilterSelector.tsx +22 -3
  177. package/src/sap/fe/macros/table/Table.block.js +137 -108
  178. package/src/sap/fe/macros/table/Table.block.tsx +29 -2
  179. package/src/sap/fe/macros/table/Table.js +7 -1
  180. package/src/sap/fe/macros/table/Table.tsx +7 -1
  181. package/src/sap/fe/macros/table/TableAPI.js +150 -133
  182. package/src/sap/fe/macros/table/TableAPI.ts +20 -3
  183. package/src/sap/fe/macros/table/TableDefinition.js +4 -2
  184. package/src/sap/fe/macros/table/TableDefinition.ts +3 -1
  185. package/src/sap/fe/macros/table/TableRuntime.js +3 -3
  186. package/src/sap/fe/macros/table/TableRuntime.ts +2 -2
  187. package/src/sap/fe/macros/table/TableSizeHelper.js +3 -3
  188. package/src/sap/fe/macros/table/TableSizeHelper.ts +5 -2
  189. package/src/sap/fe/macros/table/TreeTable.js +7 -1
  190. package/src/sap/fe/macros/table/TreeTable.tsx +7 -1
  191. package/src/sap/fe/macros/table/delegates/TableDelegate.js +27 -20
  192. package/src/sap/fe/macros/table/delegates/TableDelegate.ts +35 -26
  193. package/src/sap/fe/macros/table/designtime/Table.designtime.js +3 -1
  194. package/src/sap/fe/macros/table/designtime/Table.designtime.ts +2 -0
  195. package/src/sap/fe/macros/table/massEdit/MassEditDialog.js +10 -10
  196. package/src/sap/fe/macros/table/massEdit/MassEditDialog.tsx +11 -9
  197. package/src/sap/fe/macros/table/massEdit/MassEditDialogHelper.js +8 -8
  198. package/src/sap/fe/macros/table/massEdit/MassEditDialogHelper.tsx +7 -6
  199. package/src/sap/fe/macros/table/massEdit/designtime/MassEdit.designtime.js +3 -1
  200. package/src/sap/fe/macros/table/massEdit/designtime/MassEdit.designtime.ts +2 -1
  201. package/src/sap/fe/macros/table/mixin/ContextMenuHandler.js +2 -1
  202. package/src/sap/fe/macros/table/mixin/ContextMenuHandler.ts +1 -0
  203. package/src/sap/fe/macros/table/mixin/TableHierarchy.js +4 -1
  204. package/src/sap/fe/macros/table/mixin/TableHierarchy.ts +3 -0
  205. package/src/sap/fe/macros/valuehelp/ValueHelpDelegate.js +37 -8
  206. package/src/sap/fe/macros/valuehelp/ValueHelpDelegate.ts +47 -16
  207. package/src/sap/fe/macros/visualfilters/VisualFilter.js +95 -6
  208. package/src/sap/fe/macros/visualfilters/VisualFilter.tsx +93 -2
  209. package/src/sap/fe/macros/visualfilters/VisualFilterRuntime.js +15 -3
  210. package/src/sap/fe/macros/visualfilters/VisualFilterRuntime.ts +17 -2
@@ -1,4 +1,9 @@
1
- import type { DataFieldAbstractTypes, DataFieldForAnnotation, FieldGroupType } from "@sap-ux/vocabularies-types/vocabularies/UI";
1
+ import type {
2
+ DataFieldAbstractTypes,
3
+ DataFieldForAnnotation,
4
+ DataPointType,
5
+ FieldGroupType
6
+ } from "@sap-ux/vocabularies-types/vocabularies/UI";
2
7
  import Log from "sap/base/Log";
3
8
  import deepEqual from "sap/base/util/deepEqual";
4
9
  import deepExtend from "sap/base/util/deepExtend";
@@ -15,7 +20,7 @@ import type { ListReportManifestSettings } from "sap/fe/core/converters/Manifest
15
20
  import { getInvolvedDataModelObjects } from "sap/fe/core/converters/MetaModelConverter";
16
21
  import type { WrappedCard } from "sap/fe/core/services/CollaborationManagerServiceFactory";
17
22
 
18
- import type { EntitySet, NavigationProperty } from "@sap-ux/vocabularies-types";
23
+ import type { EntitySet, NavigationProperty, Property } from "@sap-ux/vocabularies-types";
19
24
  import CollaborationManager from "sap/fe/core/controllerextensions/cards/CollaborationManager";
20
25
  import type {
21
26
  AnnotationTableColumn,
@@ -140,7 +145,8 @@ export default Object.assign({}, TableDelegateBase, {
140
145
  showDataFieldsLabel,
141
146
  propertyInfos,
142
147
  convertedMetaData,
143
- false
148
+ false,
149
+ involvedDataModelObjects as DataModelObjectPath<Property | DataFieldAbstractTypes | DataPointType>
144
150
  );
145
151
  break;
146
152
  case "com.sap.vocabularies.UI.v1.DataFieldForAction":
@@ -258,6 +264,7 @@ export default Object.assign({}, TableDelegateBase, {
258
264
  // Add the $editState property
259
265
  properties.push({
260
266
  key: "$editState",
267
+ name: "$editState",
261
268
  path: "$editState",
262
269
  groupLabel: "",
263
270
  group: "",
@@ -1052,6 +1059,20 @@ export default Object.assign({}, TableDelegateBase, {
1052
1059
  const tableAPI = table.getParent() as TableAPI;
1053
1060
  const bIsSuspended = tableAPI?.getProperty("bindingSuspended");
1054
1061
  if (!bIsSuspended) {
1062
+ // if the rowBindingInfo has a $$getKeepAliveContext parameter we need to check it is the only Table with such a
1063
+ // parameter for the collectionMetaPath
1064
+ if (bindingInfo.parameters?.$$getKeepAliveContext === true) {
1065
+ const collectionPath = DelegateUtil.getCustomData<string>(table, "targetCollectionPath") ?? "";
1066
+ const internalModel = table.getModel("internal") as JSONModel;
1067
+ const keptAliveLists = internalModel?.getObject("/keptAliveLists") ?? {};
1068
+ if (!keptAliveLists[collectionPath]) {
1069
+ keptAliveLists[collectionPath] = table.getId();
1070
+ internalModel?.setProperty("/keptAliveLists", keptAliveLists);
1071
+ } else if (keptAliveLists[collectionPath] !== table.getId()) {
1072
+ delete bindingInfo.parameters.$$getKeepAliveContext;
1073
+ }
1074
+ }
1075
+
1055
1076
  let needManualRefresh = false;
1056
1077
  const view = CommonUtils.getTargetView(table);
1057
1078
  const internalBindingContext = table.getBindingContext("internal");
@@ -1156,20 +1177,6 @@ export default Object.assign({}, TableDelegateBase, {
1156
1177
  rowBindingInfo.parameters.$$updateGroupId = CommonUtils.INLINEEDIT_UPDATEGROUPID;
1157
1178
  }
1158
1179
 
1159
- // if the rowBindingInfo has a $$getKeepAliveContext parameter we need to check it is the only Table with such a
1160
- // parameter for the collectionMetaPath
1161
- if (rowBindingInfo.parameters?.$$getKeepAliveContext === true) {
1162
- const collectionPath = DelegateUtil.getCustomData<string>(oTable, "targetCollectionPath") ?? "";
1163
- const internalModel = oTable.getModel("internal") as JSONModel;
1164
- const keptAliveLists = internalModel?.getObject("/keptAliveLists") ?? {};
1165
- if (!keptAliveLists[collectionPath]) {
1166
- keptAliveLists[collectionPath] = oTable.getId();
1167
- internalModel?.setProperty("/keptAliveLists", keptAliveLists);
1168
- } else if (keptAliveLists[collectionPath] !== oTable.getId()) {
1169
- delete rowBindingInfo.parameters.$$getKeepAliveContext;
1170
- }
1171
- }
1172
-
1173
1180
  return rowBindingInfo;
1174
1181
  },
1175
1182
  _internalUpdateBindingInfo: function (oTable: Table, oBindingInfo: CollectionBindingInfo) {
@@ -1204,11 +1211,7 @@ export default Object.assign({}, TableDelegateBase, {
1204
1211
  if (oDataStateIndicator && oDataStateIndicator.isFiltering()) {
1205
1212
  // Include filters on messageStrip
1206
1213
  if ((oBindingInfo.filters as unknown as Filter[]).length > 0) {
1207
- const bindingInfoFilters = (oBindingInfo.filters as unknown as Filter[]).filter((filter) => filter !== Filter.NONE);
1208
- oFilter = new Filter({
1209
- filters: bindingInfoFilters.concat(oFilterInfo.filters),
1210
- and: true
1211
- });
1214
+ oFilter = new Filter({ filters: (oBindingInfo.filters as unknown as Filter[]).concat(oFilterInfo.filters), and: true });
1212
1215
  this.updateBindingInfoWithSearchQuery(oBindingInfo, oFilterInfo, oFilter);
1213
1216
  }
1214
1217
  } else {
@@ -1450,7 +1453,8 @@ export default Object.assign({}, TableDelegateBase, {
1450
1453
  const oMetaModel = this._getMetaModel(mPropertyBag),
1451
1454
  oModifier = mPropertyBag.modifier,
1452
1455
  sTableId = oModifier.getId(table),
1453
- aColumns = (table as UI5Element).isA ? this.getColumnsFor(table as Table) : null;
1456
+ aColumns = (table as UI5Element).isA ? this.getColumnsFor(table as Table) : null,
1457
+ tableAPI = (table as Table).getParent() as TableAPI;
1454
1458
  if (!aColumns) {
1455
1459
  // We return null here because everything should apply at runtime
1456
1460
  return Promise.resolve(null);
@@ -1498,9 +1502,14 @@ export default Object.assign({}, TableDelegateBase, {
1498
1502
  return Promise.resolve(null);
1499
1503
  }
1500
1504
 
1501
- const propertyInfo = ((table as MDCTable).getParent() as TableAPI).getEnhancedFetchedPropertyInfos().find(function (
1502
- propInfo: EnhancedFEPropertyInfo
1503
- ) {
1505
+ let propertyInfos = tableAPI.getEnhancedFetchedPropertyInfos();
1506
+ if (!propertyInfos.length) {
1507
+ // If the propertyInfos are not fetched yet, we need to fetch them
1508
+ // This is the case when the table is not created yet
1509
+ await this.fetchProperties(table as MDCTable);
1510
+ propertyInfos = tableAPI.getEnhancedFetchedPropertyInfos();
1511
+ }
1512
+ const propertyInfo = propertyInfos.find(function (propInfo: EnhancedFEPropertyInfo) {
1504
1513
  return propInfo.name === propertyInfoName;
1505
1514
  });
1506
1515
 
@@ -12,6 +12,7 @@ sap.ui.define(["sap/fe/core/CommonUtils", "sap/fe/core/designtime/AnnotationBase
12
12
  var prepareConfigModel = Designtime_helper.prepareConfigModel;
13
13
  var openAdaptionDialog = Designtime_helper.openAdaptionDialog;
14
14
  var noChanges = Designtime_helper.noChanges;
15
+ var isManifestChangesEnabled = Designtime_helper.isManifestChangesEnabled;
15
16
  var isConfigModelPrepared = Designtime_helper.isConfigModelPrepared;
16
17
  var getSettingsIfKeyUser = Designtime_helper.getSettingsIfKeyUser;
17
18
  var getPropertyNamesAndDescriptions = Designtime_helper.getPropertyNamesAndDescriptions;
@@ -182,6 +183,7 @@ sap.ui.define(["sap/fe/core/CommonUtils", "sap/fe/core/designtime/AnnotationBase
182
183
  fe: {
183
184
  name: getText("RTA_CONTEXT_ACTIONMENU_CONFIG"),
184
185
  icon: "sap-icon://developer-settings",
186
+ isEnabled: isManifestChangesEnabled,
185
187
  handler: async function (control) {
186
188
  const tableAPI = control.getParent();
187
189
  const designtimeSettings = getDesigntimeSettings(tableAPI);
@@ -282,4 +284,4 @@ sap.ui.define(["sap/fe/core/CommonUtils", "sap/fe/core/designtime/AnnotationBase
282
284
  };
283
285
  return designTime;
284
286
  }, false);
285
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJpdGVtc1RvUmVtb3ZlIiwiZ2V0QWRhcHRhdGlvblByb3BlcnRpZXMiLCJkZXNpZ250aW1lU2V0dGluZ3MiLCJjb250cm9sIiwicHJvcGVydHlWYWx1ZXMiLCJmb3JFYWNoIiwic2V0dGluZyIsImlkIiwiZ2V0QWRhcHRhdGlvblByb3BlcnR5VmFsdWUiLCJfZXhwb3J0cyIsInRhYmxlIiwiZ2V0UGFyZW50IiwidGFibGVEZWZpbml0aW9uIiwiZ2V0UHJvcGVydHkiLCJyZXR1cm5WYWx1ZSIsImhlYWRlclZpc2libGUiLCJoZWFkZXIiLCJlbmFibGVGdWxsU2NyZWVuIiwiZW5hYmxlRXhwb3J0IiwiZGF0YSIsImNyZWF0aW9uTW9kZSIsImNyZWF0ZUF0RW5kIiwiZnJvemVuQ29sdW1uQ291bnQiLCJmaWx0ZXJzIiwicXVpY2tGaWx0ZXJzIiwic2hvd0NvdW50cyIsImdldFAxM25Nb2RlIiwibGVuZ3RoIiwiaW5jbHVkZXMiLCJyb3dDb3VudCIsInJvd0NvdW50TW9kZSIsInVzZUNvbmRlbnNlZFRhYmxlTGF5b3V0Iiwid2lkdGhJbmNsdWRpbmdDb2x1bW5IZWFkZXIiLCJhbm5vdGF0aW9uIiwic2VsZWN0aW9uTW9kZSIsInNlbGVjdGlvbkxpbWl0IiwidGhyZXNob2xkIiwic2Nyb2xsVGhyZXNob2xkIiwiaGllcmFyY2h5UXVhbGlmaWVyIiwibWFzc0VkaXQiLCJlbmFibGVkIiwidmlzaWJsZUZpZWxkcyIsImlnbm9yZUZpZWxkcyIsImVuYWJsZUFkZENhcmRUb0luc2lnaHRzIiwiYmVmb3JlUmViaW5kVGFibGUiLCJzZWxlY3Rpb25DaGFuZ2UiLCJnZXRTZXR0aW5ncyIsInRhYmxlQVBJIiwiaXRlbXMiLCJnZXREZXNpZ250aW1lU2V0dGluZ3MiLCJtYW5pZmVzdFNldHRpbmciLCJzZXR0aW5nc0RhdGEiLCJsYWJlbCIsIm5hbWUiLCJ0b29sdGlwIiwiZGVzY3JpcHRpb24iLCJrZXlVc2VyIiwiY29udHJvbERhdGEiLCJ0eXBlIiwiZW51bSIsImVudW1zIiwidmFsdWUiLCJwdXNoIiwiY29uZmlnUGF0aCIsImRlc2lnblRpbWUiLCJhY3Rpb25zIiwidGV4dEFycmFuZ2VtZW50IiwiZ2V0VGV4dEFycmFuZ2VtZW50Q2hhbmdlQWN0aW9uIiwicmVuYW1lIiwiZ2V0UmVuYW1lQWN0aW9uIiwic2V0dGluZ3MiLCJmZSIsImdldFRleHQiLCJpY29uIiwiaGFuZGxlciIsInVuY2hhbmdlZERhdGEiLCJjb25maWdDb250ZXh0IiwiZ2V0QmluZGluZ0NvbnRleHQiLCJpc0NvbmZpZ01vZGVsUHJlcGFyZWQiLCJnZXRTZXR0aW5nc0lmS2V5VXNlciIsIkNvbW1vblV0aWxzIiwiZ2V0QXBwQ29tcG9uZW50IiwicHJlcGFyZUNvbmZpZ01vZGVsIiwicGVyc29uYWxpemF0aW9uIiwiZ2V0UGVyc29uYWxpemF0aW9uU2V0dGluZyIsInJlc291cmNlTW9kZWwiLCJnZXRNb2RlbCIsIm9wZW5BZGFwdGlvbkRpYWxvZyIsIndpZHRoIiwiaGVpZ2h0IiwidGhlbiIsInByb3BlcnR5VmFsdWVzRW50ZXJlZCIsInByb3BlcnR5UGF0aCIsImdldFByb3BlcnR5UGF0aCIsImV4dHJhY3RDaGFuZ2VzIiwibm9DaGFuZ2VzIiwicHJvcGVydGllcyIsImJ1c3lJbmRpY2F0b3JEZWxheSIsImlnbm9yZSIsImVuYWJsZUNvbHVtblJlc2l6ZSIsImhlYWRlckxldmVsIiwibXVsdGlTZWxlY3RNb2RlIiwic2hvd1Bhc3RlQnV0dG9uIiwic2hvd1Jvd0NvdW50IiwiYWdncmVnYXRpb25zIiwibWFuaWZlc3RTZXR0aW5ncyIsImZpbHRlciIsIml0ZW0iLCJnZXRQcm9wZXJ0eU5hbWVzQW5kRGVzY3JpcHRpb25zIiwibWFuaWZlc3RTZXR0aW5nc1ZhbHVlcyIsInJldHVyblZhbHVlcyIsInByb3BlcnR5SW5kZXgiLCJwYXRoIiwibWFuaWZlc3RQcm9wZXJ0eVBhdGgiLCJtYW5pZmVzdFByb3BlcnR5Q2hhbmdlIiwicHJvcGVydHlDaGFuZ2VzIiwic2VwYXJhdGVDaGFuZ2VzIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJUYWJsZS5kZXNpZ250aW1lLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qIVxuICogRmluZCB0aGUgY3VycmVudCB2YWx1ZXMgb2YgdGhlIHRhYmxlIGNvbmZpZ3VyYXRpb24gdGhhdCBpcyBwcm92aWRlZCBpbiB0aGUgdGFibGUgYWRhcHQgZGlhbG9nXG4gKi9cblxuaW1wb3J0IENvbW1vblV0aWxzIGZyb20gXCJzYXAvZmUvY29yZS9Db21tb25VdGlsc1wiO1xuaW1wb3J0IHR5cGUgUmVzb3VyY2VNb2RlbCBmcm9tIFwic2FwL2ZlL2NvcmUvUmVzb3VyY2VNb2RlbFwiO1xuXG5pbXBvcnQgeyBnZXRSZW5hbWVBY3Rpb24sIGdldFRleHQsIGdldFRleHRBcnJhbmdlbWVudENoYW5nZUFjdGlvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9kZXNpZ250aW1lL0Fubm90YXRpb25CYXNlZENoYW5nZXNcIjtcbmltcG9ydCB0eXBlIHtcblx0RGVzaWdudGltZVNldHRpbmcsXG5cdERlc2lnbnRpbWVTZXR0aW5nRW51bXMsXG5cdFByb3BlcnR5VmFsdWUsXG5cdFNldHRpbmdzRGF0YSxcblx0YWRhcHRpb25DaGFuZ2Vcbn0gZnJvbSBcInNhcC9mZS9tYWNyb3MvZGVzaWdudGltZS9EZXNpZ250aW1lLmhlbHBlclwiO1xuaW1wb3J0IHtcblx0ZXh0cmFjdENoYW5nZXMsXG5cdGdldFBlcnNvbmFsaXphdGlvblNldHRpbmcsXG5cdGdldFByb3BlcnR5TmFtZXNBbmREZXNjcmlwdGlvbnMsXG5cdGdldFNldHRpbmdzSWZLZXlVc2VyLFxuXHRpc0NvbmZpZ01vZGVsUHJlcGFyZWQsXG5cdG5vQ2hhbmdlcyxcblx0b3BlbkFkYXB0aW9uRGlhbG9nLFxuXHRwcmVwYXJlQ29uZmlnTW9kZWwsXG5cdHNlcGFyYXRlQ2hhbmdlc1xufSBmcm9tIFwic2FwL2ZlL21hY3Jvcy9kZXNpZ250aW1lL0Rlc2lnbnRpbWUuaGVscGVyXCI7XG5pbXBvcnQgdHlwZSBUYWJsZUFQSSBmcm9tIFwic2FwL2ZlL21hY3Jvcy90YWJsZS9UYWJsZUFQSVwiO1xuaW1wb3J0IHsgZ2V0RGVzaWdudGltZVNldHRpbmdzLCBnZXRQcm9wZXJ0eVBhdGggfSBmcm9tIFwic2FwL2ZlL21hY3Jvcy90YWJsZS9kZXNpZ250aW1lL1RhYmxlLmRlc2lnbnRpbWUuaGVscGVyXCI7XG5pbXBvcnQgdHlwZSBNRENUYWJsZSBmcm9tIFwic2FwL3VpL21kYy9UYWJsZVwiO1xuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL0NvbnRleHRcIjtcblxudHlwZSBDb250cm9sRGF0YSA9IHtcblx0dHlwZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXHRlbnVtOiBEZXNpZ250aW1lU2V0dGluZ0VudW1zW10gfCB1bmRlZmluZWQ7XG5cdHZhbHVlOiB1bmtub3duO1xuXHRpZDogc3RyaW5nO1xufTtcbi8vIERvbid0IHBhc3MgdGhlc2UgcHJvcGVydGllcyB0byBmaW9yaSB0b29scyBwcm9jZXNzaW5nIGZvciB0aGUgY29udHJvbCBwYW5lbCBmb3IgdGFibGUuIEN1cnJlbnRseSB0aGUgY29tYmluYXRpb25cbi8vIG9mIGJvb2xlYW4gcHJvcGVydHkgcGx1cyBmdXJ0aGVyIG9wdGlvbiBvZiBmaXhlZCBsaXN0IGlzIG5vdCBzdXBwb3J0ZWRcbmNvbnN0IGl0ZW1zVG9SZW1vdmUgPSBbXG5cdFwicGVyc29uYWxpemF0aW9uXCIsXG5cdFwicGVyc29uYWxpemF0aW9uU29ydFwiLFxuXHRcInBlcnNvbmFsaXphdGlvbkNvbHVtblwiLFxuXHRcInBlcnNvbmFsaXphdGlvbkZpbHRlclwiLFxuXHRcInBlcnNvbmFsaXphdGlvbkdyb3VwXCIsXG5cdFwicGVyc29uYWxpemF0aW9uQWdncmVnYXRlXCJcbl07XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRBZGFwdGF0aW9uUHJvcGVydGllcyhkZXNpZ250aW1lU2V0dGluZ3M6IERlc2lnbnRpbWVTZXR0aW5nW10sIGNvbnRyb2w6IE1EQ1RhYmxlKTogUHJvcGVydHlWYWx1ZSB7XG5cdGNvbnN0IHByb3BlcnR5VmFsdWVzOiBQcm9wZXJ0eVZhbHVlID0ge307XG5cdGRlc2lnbnRpbWVTZXR0aW5ncy5mb3JFYWNoKGZ1bmN0aW9uIChzZXR0aW5nKSB7XG5cdFx0cHJvcGVydHlWYWx1ZXNbc2V0dGluZy5pZF0gPSBnZXRBZGFwdGF0aW9uUHJvcGVydHlWYWx1ZShjb250cm9sLCBzZXR0aW5nKTtcblx0fSk7XG5cdHJldHVybiBwcm9wZXJ0eVZhbHVlcztcbn1cbi8qKlxuICogUmV0dXJucyB0aGUgdmFsdWUgb2Ygb25lIG9mIHRoZSBzZXR0aW5ncyB0aGF0IGhhdmUgYmVlbiBkZWZpbmVkIGZvciB0YWJsZSBhZGFwdGF0aW9uLlxuICogQHBhcmFtIGNvbnRyb2wgUmVmZXJlbmNlIHRvIHNlbGVjdGVkIHRhYmxlXG4gKiBAcGFyYW0gc2V0dGluZyBUaGUgZGVmaW5pdGlvbiBvZiB0aGUgc2V0dGluZyByZXF1aXJlZCBmb3IgYWRhcHRhdGlvblxuICogQHJldHVybnMgU2V0dGluZyBkZWZpbml0aW9uIHdpdGggYSB2YWx1ZSBmb3Igc2VsZWN0ZWQgY29udHJvbFxuICovXG5mdW5jdGlvbiBnZXRBZGFwdGF0aW9uUHJvcGVydHlWYWx1ZShjb250cm9sOiBNRENUYWJsZSwgc2V0dGluZzogRGVzaWdudGltZVNldHRpbmcpOiBib29sZWFuIHwgc3RyaW5nIHwgbnVtYmVyIHtcblx0Y29uc3QgdGFibGUgPSBjb250cm9sLmdldFBhcmVudCgpIGFzIFRhYmxlQVBJO1xuXHRjb25zdCB0YWJsZURlZmluaXRpb24gPSB0YWJsZS5nZXRQcm9wZXJ0eShcInRhYmxlRGVmaW5pdGlvblwiKTtcblx0bGV0IHJldHVyblZhbHVlOiBib29sZWFuIHwgc3RyaW5nIHwgbnVtYmVyID0gXCJcIjtcblxuXHRzd2l0Y2ggKHNldHRpbmcuaWQpIHtcblx0XHRjYXNlIFwiaGVhZGVyVmlzaWJsZVwiOlxuXHRcdFx0cmV0dXJuVmFsdWUgPSB0YWJsZURlZmluaXRpb24uaGVhZGVyVmlzaWJsZTtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgXCJoZWFkZXJcIjpcblx0XHRcdHJldHVyblZhbHVlID0gdGFibGVEZWZpbml0aW9uLmhlYWRlcjtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgXCJlbmFibGVGdWxsU2NyZWVuXCI6XG5cdFx0XHRyZXR1cm5WYWx1ZSA9IHRhYmxlRGVmaW5pdGlvbi5jb250cm9sLmVuYWJsZUZ1bGxTY3JlZW47XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFwiZW5hYmxlRXhwb3J0XCI6XG5cdFx0XHRyZXR1cm5WYWx1ZSA9IHRhYmxlRGVmaW5pdGlvbi5jb250cm9sLmVuYWJsZUV4cG9ydDtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgXCJ0eXBlXCI6XG5cdFx0XHRyZXR1cm5WYWx1ZSA9IGNvbnRyb2wuZGF0YShcInRhYmxlVHlwZVwiKTtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgXCJjcmVhdGlvbk1vZGVOYW1lXCI6XG5cdFx0XHRyZXR1cm5WYWx1ZSA9IHRhYmxlRGVmaW5pdGlvbi5jb250cm9sLmNyZWF0aW9uTW9kZTtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgXCJjcmVhdGlvbk1vZGVDcmVhdGVBdEVuZFwiOlxuXHRcdFx0cmV0dXJuVmFsdWUgPSB0YWJsZURlZmluaXRpb24uY29udHJvbC5jcmVhdGVBdEVuZDtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgXCJmcm96ZW5Db2x1bW5Db3VudFwiOlxuXHRcdFx0cmV0dXJuVmFsdWUgPSB0YWJsZURlZmluaXRpb24uY29udHJvbC5mcm96ZW5Db2x1bW5Db3VudDtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgXCJzaG93Q291bnRzXCI6XG5cdFx0XHRyZXR1cm5WYWx1ZSA9IHRhYmxlRGVmaW5pdGlvbi5jb250cm9sLmZpbHRlcnM/LnF1aWNrRmlsdGVycz8uc2hvd0NvdW50cztcblx0XHRcdGJyZWFrO1xuXHRcdC8qIGNhc2UgXCJoaWRlVGFibGVUaXRsZVwiOlxuXHRcdFx0cHJvcGVydHlWYWx1ZXMuaGlkZVRhYmxlVGl0bGUgPSB0YWJsZURlZmluaXRpb24uY29udHJvbC5maWx0ZXJzPy5xdWlja0ZpbHRlcnMgJiYgIXRhYmxlRGVmaW5pdGlvbi5jb250cm9sLmhlYWRlclZpc2libGU7XG5cdFx0XHRicmVhazsgKi9cblx0XHRjYXNlIFwicGVyc29uYWxpemF0aW9uXCI6XG5cdFx0XHRyZXR1cm5WYWx1ZSA9IGNvbnRyb2wuZ2V0UDEzbk1vZGUoKS5sZW5ndGggPT09IDAgPyBcIkZhbHNlXCIgOiBcIlRydWVcIjtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgXCJwZXJzb25hbGl6YXRpb25Tb3J0XCI6XG5cdFx0XHRyZXR1cm5WYWx1ZSA9IGNvbnRyb2wuZ2V0UDEzbk1vZGUoKS5pbmNsdWRlcyhcIlNvcnRcIik7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFwicGVyc29uYWxpemF0aW9uQ29sdW1uXCI6XG5cdFx0XHRyZXR1cm5WYWx1ZSA9IGNvbnRyb2wuZ2V0UDEzbk1vZGUoKS5pbmNsdWRlcyhcIkNvbHVtblwiKTtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgXCJwZXJzb25hbGl6YXRpb25GaWx0ZXJcIjpcblx0XHRcdHJldHVyblZhbHVlID0gY29udHJvbC5nZXRQMTNuTW9kZSgpLmluY2x1ZGVzKFwiRmlsdGVyXCIpO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBcInBlcnNvbmFsaXphdGlvbkdyb3VwXCI6XG5cdFx0XHRyZXR1cm5WYWx1ZSA9IGNvbnRyb2wuZ2V0UDEzbk1vZGUoKS5pbmNsdWRlcyhcIkdyb3VwXCIpO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBcInBlcnNvbmFsaXphdGlvbkFnZ3JlZ2F0ZVwiOlxuXHRcdFx0cmV0dXJuVmFsdWUgPSBjb250cm9sLmdldFAxM25Nb2RlKCkuaW5jbHVkZXMoXCJBZ2dyZWdhdGVcIik7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFwicm93Q291bnRcIjpcblx0XHRcdHJldHVyblZhbHVlID0gdGFibGVEZWZpbml0aW9uLmNvbnRyb2wucm93Q291bnQ7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFwicm93Q291bnRNb2RlXCI6XG5cdFx0XHRyZXR1cm5WYWx1ZSA9IHRhYmxlRGVmaW5pdGlvbi5jb250cm9sLnJvd0NvdW50TW9kZTtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgXCJjb25kZW5zZWRUYWJsZUxheW91dFwiOlxuXHRcdFx0cmV0dXJuVmFsdWUgPSB0YWJsZURlZmluaXRpb24uY29udHJvbC51c2VDb25kZW5zZWRUYWJsZUxheW91dDtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgXCJ3aWR0aEluY2x1ZGluZ0NvbHVtbkhlYWRlclwiOlxuXHRcdFx0cmV0dXJuVmFsdWUgPSB0YWJsZURlZmluaXRpb24uY29udHJvbC53aWR0aEluY2x1ZGluZ0NvbHVtbkhlYWRlcjtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgXCJzZWxlY3Rpb25Nb2RlXCI6XG5cdFx0XHRyZXR1cm5WYWx1ZSA9IHRhYmxlRGVmaW5pdGlvbi5hbm5vdGF0aW9uLnNlbGVjdGlvbk1vZGU7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFwic2VsZWN0QWxsXCI6XG5cdFx0XHRyZXR1cm5WYWx1ZSA9IHRhYmxlRGVmaW5pdGlvbi5jb250cm9sLnNlbGVjdGlvbkxpbWl0ID09PSAwO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBcInRocmVzaG9sZFwiOlxuXHRcdFx0cmV0dXJuVmFsdWUgPSB0YWJsZURlZmluaXRpb24uY29udHJvbC50aHJlc2hvbGQgPz8gdGFibGVEZWZpbml0aW9uLmFubm90YXRpb24udGhyZXNob2xkO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBcInNjcm9sbFRocmVzaG9sZFwiOlxuXHRcdFx0cmV0dXJuVmFsdWUgPSB0YWJsZURlZmluaXRpb24uY29udHJvbC5zY3JvbGxUaHJlc2hvbGQ7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFwic2VsZWN0aW9uTGltaXRcIjpcblx0XHRcdHJldHVyblZhbHVlID0gdGFibGVEZWZpbml0aW9uLmNvbnRyb2wuc2VsZWN0aW9uTGltaXQ7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFwiaGllcmFyY2h5UXVhbGlmaWVyXCI6XG5cdFx0XHRyZXR1cm5WYWx1ZSA9IHRhYmxlRGVmaW5pdGlvbi5jb250cm9sLmhpZXJhcmNoeVF1YWxpZmllcjtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgXCJlbmFibGVNYXNzRWRpdFwiOlxuXHRcdFx0cmV0dXJuVmFsdWUgPSB0YWJsZURlZmluaXRpb24uY29udHJvbC5tYXNzRWRpdC5lbmFibGVkO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBcImVuYWJsZU1hc3NFZGl0VmlzaWJsZUZpZWxkc1wiOlxuXHRcdFx0cmV0dXJuVmFsdWUgPSB0YWJsZURlZmluaXRpb24uY29udHJvbC5tYXNzRWRpdC52aXNpYmxlRmllbGRzO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBcImVuYWJsZU1hc3NFZGl0SWdub3JlZEZpZWxkc1wiOlxuXHRcdFx0cmV0dXJuVmFsdWUgPSB0YWJsZURlZmluaXRpb24uY29udHJvbC5tYXNzRWRpdC5pZ25vcmVGaWVsZHM7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFwiZW5hYmxlQWRkQ2FyZFRvSW5zaWdodHNcIjpcblx0XHRcdHJldHVyblZhbHVlID0gdGFibGVEZWZpbml0aW9uLmNvbnRyb2wuZW5hYmxlQWRkQ2FyZFRvSW5zaWdodHM7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFwiYmVmb3JlUmViaW5kVGFibGVcIjpcblx0XHRcdHJldHVyblZhbHVlID0gdGFibGVEZWZpbml0aW9uLmNvbnRyb2wuYmVmb3JlUmViaW5kVGFibGU7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFwic2VsZWN0aW9uQ2hhbmdlXCI6XG5cdFx0XHRyZXR1cm5WYWx1ZSA9IHRhYmxlRGVmaW5pdGlvbi5jb250cm9sLnNlbGVjdGlvbkNoYW5nZTtcblx0XHRcdGJyZWFrO1xuXHR9XG5cdHJldHVybiByZXR1cm5WYWx1ZTtcbn1cbi8qKlxuICogUmV0dXJucyB0aGUgc2V0dGluZ3MgYW5kIHZhbHVlcyBmb3IgYSB0YWJsZSBmb3JtYXR0ZWQgZm9yIHRoZSBhZGFwdGF0aW9uIGRpYWxvZyBjb250ZW50LlxuICogQHBhcmFtIHRhYmxlQVBJIFJlZmVyZW5jZSB0byBzZWxlY3RlZCB0YWJsZVxuICogQHBhcmFtIHByb3BlcnR5VmFsdWVzIFRoZSBsaXN0IG9mIHByb3BlcnRpZXMgYW5kIHZhbHVlcyBmb3IgdGhlIHNlbGVjdGVkIHRhYmxlXG4gKiBAcmV0dXJucyBGb3JtYXR0ZWQgbGlzdCBmb3IgdGhlIGFkYXB0YXRpb24gZGlhbG9nXG4gKi9cbmZ1bmN0aW9uIGdldFNldHRpbmdzKHRhYmxlQVBJOiBUYWJsZUFQSSwgcHJvcGVydHlWYWx1ZXM6IFByb3BlcnR5VmFsdWUpOiBTZXR0aW5nc0RhdGFbXSB7XG5cdGNvbnN0IGl0ZW1zOiBTZXR0aW5nc0RhdGFbXSA9IFtdO1xuXG5cdGdldERlc2lnbnRpbWVTZXR0aW5ncyh0YWJsZUFQSSkuZm9yRWFjaChmdW5jdGlvbiAobWFuaWZlc3RTZXR0aW5nKSB7XG5cdFx0Ly9GaWxsIG1vZGVsIGZvciBhZGFwdGF0aW9uIHNldHRpbmdzIGRhdGFcblx0XHRjb25zdCBzZXR0aW5nc0RhdGE6IFNldHRpbmdzRGF0YSA9IHtcblx0XHRcdGxhYmVsOiBtYW5pZmVzdFNldHRpbmcubmFtZSxcblx0XHRcdHRvb2x0aXA6IG1hbmlmZXN0U2V0dGluZy5kZXNjcmlwdGlvbixcblx0XHRcdGNvbnRyb2w6IFtdLFxuXHRcdFx0a2V5VXNlcjogbWFuaWZlc3RTZXR0aW5nLmtleVVzZXJcblx0XHR9O1xuXG5cdFx0Y29uc3QgY29udHJvbERhdGE6IENvbnRyb2xEYXRhID0ge1xuXHRcdFx0dHlwZTogbWFuaWZlc3RTZXR0aW5nLnR5cGUsXG5cdFx0XHRlbnVtOiBtYW5pZmVzdFNldHRpbmcuZW51bXMsXG5cdFx0XHR2YWx1ZTogcHJvcGVydHlWYWx1ZXNbbWFuaWZlc3RTZXR0aW5nLmlkXSxcblx0XHRcdGlkOiBtYW5pZmVzdFNldHRpbmcuaWRcblx0XHR9O1xuXG5cdFx0c2V0dGluZ3NEYXRhLmNvbnRyb2wucHVzaChjb250cm9sRGF0YSk7XG5cdFx0aXRlbXMucHVzaChzZXR0aW5nc0RhdGEpO1xuXHR9KTtcblx0cmV0dXJuIGl0ZW1zO1xufVxuXG5jb25zdCBjb25maWdQYXRoID0gXCJydGEvY29uZmlnU2V0dGluZ3NcIjtcblxuY29uc3QgZGVzaWduVGltZSA9IHtcblx0YWN0aW9uczoge1xuXHRcdGFubm90YXRpb246IHtcblx0XHRcdHRleHRBcnJhbmdlbWVudDogZ2V0VGV4dEFycmFuZ2VtZW50Q2hhbmdlQWN0aW9uKCksXG5cdFx0XHRyZW5hbWU6IGdldFJlbmFtZUFjdGlvbigpXG5cdFx0fSxcblx0XHRzZXR0aW5nczoge1xuXHRcdFx0ZmU6IHtcblx0XHRcdFx0bmFtZTogZ2V0VGV4dChcIlJUQV9DT05URVhUX0FDVElPTk1FTlVfQ09ORklHXCIpLFxuXHRcdFx0XHRpY29uOiBcInNhcC1pY29uOi8vZGV2ZWxvcGVyLXNldHRpbmdzXCIsXG5cdFx0XHRcdGhhbmRsZXI6IGFzeW5jIGZ1bmN0aW9uIChjb250cm9sOiBNRENUYWJsZSk6IFByb21pc2U8YWRhcHRpb25DaGFuZ2VbXT4ge1xuXHRcdFx0XHRcdGNvbnN0IHRhYmxlQVBJID0gY29udHJvbC5nZXRQYXJlbnQoKSBhcyBUYWJsZUFQSTtcblx0XHRcdFx0XHRjb25zdCBkZXNpZ250aW1lU2V0dGluZ3MgPSBnZXREZXNpZ250aW1lU2V0dGluZ3ModGFibGVBUEkpO1xuXHRcdFx0XHRcdGNvbnN0IHByb3BlcnR5VmFsdWVzID0gZ2V0QWRhcHRhdGlvblByb3BlcnRpZXMoZGVzaWdudGltZVNldHRpbmdzLCBjb250cm9sKTtcblx0XHRcdFx0XHRjb25zdCB1bmNoYW5nZWREYXRhID0geyAuLi5wcm9wZXJ0eVZhbHVlcyB9O1xuXHRcdFx0XHRcdGNvbnN0IGNvbmZpZ0NvbnRleHQgPSBjb250cm9sLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikgYXMgQ29udGV4dDtcblx0XHRcdFx0XHRpZiAoIWlzQ29uZmlnTW9kZWxQcmVwYXJlZChjb25maWdDb250ZXh0LCBjb25maWdQYXRoKSkge1xuXHRcdFx0XHRcdFx0Ly8gZmlyc3QgdGltZSB0aGlzIHNlc3Npb25cblx0XHRcdFx0XHRcdGxldCBpdGVtcyA9IGdldFNldHRpbmdzKHRhYmxlQVBJLCBwcm9wZXJ0eVZhbHVlcyk7XG5cdFx0XHRcdFx0XHRpdGVtcyA9IGdldFNldHRpbmdzSWZLZXlVc2VyKENvbW1vblV0aWxzLmdldEFwcENvbXBvbmVudChjb250cm9sKSwgaXRlbXMpO1xuXHRcdFx0XHRcdFx0Ly8gdXNlIGludGVybmFsIG1vZGVsIHRvIHBlcnNpc3QgYWRhcHRhdGlvbiBjb25maWd1cmF0aW9uIHZhbHVlc1xuXHRcdFx0XHRcdFx0cHJlcGFyZUNvbmZpZ01vZGVsKGl0ZW1zLCBjb25maWdDb250ZXh0LCBjb25maWdQYXRoKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0Ly8gc2V0IHBlcnNvbmFsaXphdGlvbiB0byAnT3duIFNldHRpbmdzJyBpZiB0aGF0IHdhcyBjaG9zZW4gcHJldmlvdXNseVxuXHRcdFx0XHRcdFx0Ly8gYXMgdGhpcyBzZXR0aW5nIGNhbm5vdCBiZSByZXRyaXZlZCBmcm9tIHRoZSBjb250cm9sLCBhbmQgd2lsbCBiZSBhbHdheXMgdHJ1ZSBpZiBwZXJzb25hbGl6YXRpb24gaXMgZW5hYmxlZFxuXHRcdFx0XHRcdFx0cHJvcGVydHlWYWx1ZXMucGVyc29uYWxpemF0aW9uID0gZ2V0UGVyc29uYWxpemF0aW9uU2V0dGluZyhjb25maWdDb250ZXh0KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Y29uc3QgcmVzb3VyY2VNb2RlbCA9IGNvbnRyb2wuZ2V0TW9kZWwoXCJzYXAuZmUuaTE4blwiKSBhcyBSZXNvdXJjZU1vZGVsO1xuXHRcdFx0XHRcdHJldHVybiBvcGVuQWRhcHRpb25EaWFsb2coXG5cdFx0XHRcdFx0XHRjb25maWdDb250ZXh0LFxuXHRcdFx0XHRcdFx0cHJvcGVydHlWYWx1ZXMsXG5cdFx0XHRcdFx0XHRcIntzYXAuZmUuaTE4bj5SVEFfQ09ORklHVVJBVElPTl9USVRMRV9UQUJMRX1cIixcblx0XHRcdFx0XHRcdHJlc291cmNlTW9kZWwsXG5cdFx0XHRcdFx0XHRjb25maWdQYXRoLFxuXHRcdFx0XHRcdFx0XCJ7c2FwLmZlLmkxOG4+UlRBX0NPTkZJR1VSQVRJT05fSU5GT19NRVNTQUdFX1RBQkxFfVwiLFxuXHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHR3aWR0aDogXCI2NTBweFwiLFxuXHRcdFx0XHRcdFx0XHRoZWlnaHQ6IFwiODAwcHhcIlxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdCkudGhlbihmdW5jdGlvbiAocHJvcGVydHlWYWx1ZXNFbnRlcmVkOiBQcm9wZXJ0eVZhbHVlKTogYWRhcHRpb25DaGFuZ2VbXSB8IFtdIHtcblx0XHRcdFx0XHRcdGNvbnN0IHByb3BlcnR5UGF0aCA9IGdldFByb3BlcnR5UGF0aChjb250cm9sLmdldFBhcmVudCgpIGFzIFRhYmxlQVBJKTtcblx0XHRcdFx0XHRcdHJldHVybiBleHRyYWN0Q2hhbmdlcyhkZXNpZ250aW1lU2V0dGluZ3MsIHVuY2hhbmdlZERhdGEsIHByb3BlcnR5VmFsdWVzRW50ZXJlZCwgcHJvcGVydHlQYXRoLCBjb250cm9sKTtcblx0XHRcdFx0XHR9LCBub0NoYW5nZXMpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9LFxuXHQvLyBXZSBkaXNhYmxlIG1kYyB0YWJsZSBwcm9wZXJ0aWVzIGluIHRoZSBwcm9wZXJ0eSBwYW5lbCBvZiBGaW9yaSBUb29sc1xuXHRwcm9wZXJ0aWVzOiB7XG5cdFx0YnVzeUluZGljYXRvckRlbGF5OiB7IGlnbm9yZTogdHJ1ZSB9LFxuXHRcdGVuYWJsZUNvbHVtblJlc2l6ZTogeyBpZ25vcmU6IHRydWUgfSxcblx0XHRlbmFibGVFeHBvcnQ6IHsgaWdub3JlOiB0cnVlIH0sXG5cdFx0aGVhZGVyOiB7IGlnbm9yZTogdHJ1ZSB9LFxuXHRcdGhlYWRlckxldmVsOiB7IGlnbm9yZTogdHJ1ZSB9LFxuXHRcdGhlYWRlclZpc2libGU6IHsgaWdub3JlOiB0cnVlIH0sXG5cdFx0bXVsdGlTZWxlY3RNb2RlOiB7IGlnbm9yZTogdHJ1ZSB9LFxuXHRcdHNob3dQYXN0ZUJ1dHRvbjogeyBpZ25vcmU6IHRydWUgfSxcblx0XHRzaG93Um93Q291bnQ6IHsgaWdub3JlOiB0cnVlIH0sXG5cdFx0dGhyZXNob2xkOiB7IGlnbm9yZTogdHJ1ZSB9LFxuXHRcdHdpZHRoOiB7IGlnbm9yZTogdHJ1ZSB9XG5cdH0sXG5cdGFnZ3JlZ2F0aW9uczoge30sXG5cblx0Ly8gVGhlc2UgZnVuY3Rpb25zIHByb3ZpZGUgdGhlIHByb3BlcnRpZXMgdXNlZCBpbiB0YWJsZSBhZGFwdGlvbiB0byBGaW9yaSB0b29scy5cblx0bWFuaWZlc3RTZXR0aW5nczogZnVuY3Rpb24gKGNvbnRyb2w6IE1EQ1RhYmxlKTogRGVzaWdudGltZVNldHRpbmdbXSB7XG5cdFx0Y29uc3QgdGFibGUgPSBjb250cm9sLmdldFBhcmVudCgpIGFzIFRhYmxlQVBJO1xuXHRcdGNvbnN0IGRlc2lnbnRpbWVTZXR0aW5ncyA9IGdldERlc2lnbnRpbWVTZXR0aW5ncyh0YWJsZSkuZmlsdGVyKChpdGVtKSA9PiAhaXRlbXNUb1JlbW92ZS5pbmNsdWRlcyhpdGVtLmlkKSk7XG5cdFx0cmV0dXJuIGdldFByb3BlcnR5TmFtZXNBbmREZXNjcmlwdGlvbnMoZGVzaWdudGltZVNldHRpbmdzLCBjb250cm9sLmdldE1vZGVsKFwic2FwLmZlLmkxOG5cIikgYXMgUmVzb3VyY2VNb2RlbCk7XG5cdH0sXG5cdC8vIGdldEFkYXB0aW9uUHJvcGVydHlWYWx1ZVxuXHRtYW5pZmVzdFNldHRpbmdzVmFsdWVzOiBmdW5jdGlvbiAoZGVzaWdudGltZVNldHRpbmdzOiBEZXNpZ250aW1lU2V0dGluZ1tdLCBjb250cm9sOiBNRENUYWJsZSk6IFByb3BlcnR5VmFsdWUge1xuXHRcdGNvbnN0IHJldHVyblZhbHVlczogUHJvcGVydHlWYWx1ZSA9IHt9O1xuXHRcdGRlc2lnbnRpbWVTZXR0aW5ncy5mb3JFYWNoKGZ1bmN0aW9uIChzZXR0aW5nKSB7XG5cdFx0XHRsZXQgcHJvcGVydHlJbmRleDtcblx0XHRcdGlmIChzZXR0aW5nLnBhdGgpIHtcblx0XHRcdFx0cHJvcGVydHlJbmRleCA9IHNldHRpbmcucGF0aDtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHByb3BlcnR5SW5kZXggPSBzZXR0aW5nLmlkO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuVmFsdWVzW3Byb3BlcnR5SW5kZXhdID0gZ2V0QWRhcHRhdGlvblByb3BlcnR5VmFsdWUoY29udHJvbCwgc2V0dGluZyk7XG5cdFx0fSk7XG5cdFx0cmV0dXJuIHJldHVyblZhbHVlcztcblx0fSxcblx0Ly8gZ2V0IHBhdGggZm9yIGNvbnRyb2wgY29uZmlndXJhdGlvbi4gUGFzcyByZWZlcmVuY2UgdG8gdGhlIGNvbnRyb2xcblx0bWFuaWZlc3RQcm9wZXJ0eVBhdGg6IGZ1bmN0aW9uIChjb250cm9sOiBNRENUYWJsZSk6IHN0cmluZyB7XG5cdFx0Y29uc3QgdGFibGUgPSBjb250cm9sLmdldFBhcmVudCgpIGFzIFRhYmxlQVBJO1xuXHRcdHJldHVybiBnZXRQcm9wZXJ0eVBhdGgodGFibGUpO1xuXHR9LFxuXHQvLyBjcmVhdGUgY2hhbmdlIHN0cnVjdHVlLiBQYXNzIGFycmF5IG9mIG1hbmlmZXN0IHNldHRpbmcgYW5kIG5ldyB2YWx1ZSwgdGhlIHByb3BlcnR5IHBhdGggYW5kIHRoZSBjb250cm9sXG5cdG1hbmlmZXN0UHJvcGVydHlDaGFuZ2U6IGZ1bmN0aW9uIChwcm9wZXJ0eUNoYW5nZXM6IFByb3BlcnR5VmFsdWUsIHByb3BlcnR5UGF0aDogc3RyaW5nLCBjb250cm9sOiBNRENUYWJsZSk6IGFkYXB0aW9uQ2hhbmdlW10ge1xuXHRcdHJldHVybiBzZXBhcmF0ZUNoYW5nZXMocHJvcGVydHlDaGFuZ2VzLCBwcm9wZXJ0eVBhdGgsIGNvbnRyb2wpO1xuXHR9XG59O1xuXG5leHBvcnQgZGVmYXVsdCBkZXNpZ25UaW1lO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0VBQUE7QUFDQTtBQUNBO0VBbUNBO0VBQ0E7RUFDQSxNQUFNQSxhQUFhLEdBQUcsQ0FDckIsaUJBQWlCLEVBQ2pCLHFCQUFxQixFQUNyQix1QkFBdUIsRUFDdkIsdUJBQXVCLEVBQ3ZCLHNCQUFzQixFQUN0QiwwQkFBMEIsQ0FDMUI7RUFFTSxTQUFTQyx1QkFBdUJBLENBQUNDLGtCQUF1QyxFQUFFQyxPQUFpQixFQUFpQjtJQUNsSCxNQUFNQyxjQUE2QixHQUFHLENBQUMsQ0FBQztJQUN4Q0Ysa0JBQWtCLENBQUNHLE9BQU8sQ0FBQyxVQUFVQyxPQUFPLEVBQUU7TUFDN0NGLGNBQWMsQ0FBQ0UsT0FBTyxDQUFDQyxFQUFFLENBQUMsR0FBR0MsMEJBQTBCLENBQUNMLE9BQU8sRUFBRUcsT0FBTyxDQUFDO0lBQzFFLENBQUMsQ0FBQztJQUNGLE9BQU9GLGNBQWM7RUFDdEI7RUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFMQUssUUFBQSxDQUFBUix1QkFBQSxHQUFBQSx1QkFBQTtFQU1BLFNBQVNPLDBCQUEwQkEsQ0FBQ0wsT0FBaUIsRUFBRUcsT0FBMEIsRUFBNkI7SUFDN0csTUFBTUksS0FBSyxHQUFHUCxPQUFPLENBQUNRLFNBQVMsQ0FBQyxDQUFhO0lBQzdDLE1BQU1DLGVBQWUsR0FBR0YsS0FBSyxDQUFDRyxXQUFXLENBQUMsaUJBQWlCLENBQUM7SUFDNUQsSUFBSUMsV0FBc0MsR0FBRyxFQUFFO0lBRS9DLFFBQVFSLE9BQU8sQ0FBQ0MsRUFBRTtNQUNqQixLQUFLLGVBQWU7UUFDbkJPLFdBQVcsR0FBR0YsZUFBZSxDQUFDRyxhQUFhO1FBQzNDO01BQ0QsS0FBSyxRQUFRO1FBQ1pELFdBQVcsR0FBR0YsZUFBZSxDQUFDSSxNQUFNO1FBQ3BDO01BQ0QsS0FBSyxrQkFBa0I7UUFDdEJGLFdBQVcsR0FBR0YsZUFBZSxDQUFDVCxPQUFPLENBQUNjLGdCQUFnQjtRQUN0RDtNQUNELEtBQUssY0FBYztRQUNsQkgsV0FBVyxHQUFHRixlQUFlLENBQUNULE9BQU8sQ0FBQ2UsWUFBWTtRQUNsRDtNQUNELEtBQUssTUFBTTtRQUNWSixXQUFXLEdBQUdYLE9BQU8sQ0FBQ2dCLElBQUksQ0FBQyxXQUFXLENBQUM7UUFDdkM7TUFDRCxLQUFLLGtCQUFrQjtRQUN0QkwsV0FBVyxHQUFHRixlQUFlLENBQUNULE9BQU8sQ0FBQ2lCLFlBQVk7UUFDbEQ7TUFDRCxLQUFLLHlCQUF5QjtRQUM3Qk4sV0FBVyxHQUFHRixlQUFlLENBQUNULE9BQU8sQ0FBQ2tCLFdBQVc7UUFDakQ7TUFDRCxLQUFLLG1CQUFtQjtRQUN2QlAsV0FBVyxHQUFHRixlQUFlLENBQUNULE9BQU8sQ0FBQ21CLGlCQUFpQjtRQUN2RDtNQUNELEtBQUssWUFBWTtRQUNoQlIsV0FBVyxHQUFHRixlQUFlLENBQUNULE9BQU8sQ0FBQ29CLE9BQU8sRUFBRUMsWUFBWSxFQUFFQyxVQUFVO1FBQ3ZFO01BQ0Q7QUFDRjtBQUNBO01BQ0UsS0FBSyxpQkFBaUI7UUFDckJYLFdBQVcsR0FBR1gsT0FBTyxDQUFDdUIsV0FBVyxDQUFDLENBQUMsQ0FBQ0MsTUFBTSxLQUFLLENBQUMsR0FBRyxPQUFPLEdBQUcsTUFBTTtRQUNuRTtNQUNELEtBQUsscUJBQXFCO1FBQ3pCYixXQUFXLEdBQUdYLE9BQU8sQ0FBQ3VCLFdBQVcsQ0FBQyxDQUFDLENBQUNFLFFBQVEsQ0FBQyxNQUFNLENBQUM7UUFDcEQ7TUFDRCxLQUFLLHVCQUF1QjtRQUMzQmQsV0FBVyxHQUFHWCxPQUFPLENBQUN1QixXQUFXLENBQUMsQ0FBQyxDQUFDRSxRQUFRLENBQUMsUUFBUSxDQUFDO1FBQ3REO01BQ0QsS0FBSyx1QkFBdUI7UUFDM0JkLFdBQVcsR0FBR1gsT0FBTyxDQUFDdUIsV0FBVyxDQUFDLENBQUMsQ0FBQ0UsUUFBUSxDQUFDLFFBQVEsQ0FBQztRQUN0RDtNQUNELEtBQUssc0JBQXNCO1FBQzFCZCxXQUFXLEdBQUdYLE9BQU8sQ0FBQ3VCLFdBQVcsQ0FBQyxDQUFDLENBQUNFLFFBQVEsQ0FBQyxPQUFPLENBQUM7UUFDckQ7TUFDRCxLQUFLLDBCQUEwQjtRQUM5QmQsV0FBVyxHQUFHWCxPQUFPLENBQUN1QixXQUFXLENBQUMsQ0FBQyxDQUFDRSxRQUFRLENBQUMsV0FBVyxDQUFDO1FBQ3pEO01BQ0QsS0FBSyxVQUFVO1FBQ2RkLFdBQVcsR0FBR0YsZUFBZSxDQUFDVCxPQUFPLENBQUMwQixRQUFRO1FBQzlDO01BQ0QsS0FBSyxjQUFjO1FBQ2xCZixXQUFXLEdBQUdGLGVBQWUsQ0FBQ1QsT0FBTyxDQUFDMkIsWUFBWTtRQUNsRDtNQUNELEtBQUssc0JBQXNCO1FBQzFCaEIsV0FBVyxHQUFHRixlQUFlLENBQUNULE9BQU8sQ0FBQzRCLHVCQUF1QjtRQUM3RDtNQUNELEtBQUssNEJBQTRCO1FBQ2hDakIsV0FBVyxHQUFHRixlQUFlLENBQUNULE9BQU8sQ0FBQzZCLDBCQUEwQjtRQUNoRTtNQUNELEtBQUssZUFBZTtRQUNuQmxCLFdBQVcsR0FBR0YsZUFBZSxDQUFDcUIsVUFBVSxDQUFDQyxhQUFhO1FBQ3REO01BQ0QsS0FBSyxXQUFXO1FBQ2ZwQixXQUFXLEdBQUdGLGVBQWUsQ0FBQ1QsT0FBTyxDQUFDZ0MsY0FBYyxLQUFLLENBQUM7UUFDMUQ7TUFDRCxLQUFLLFdBQVc7UUFDZnJCLFdBQVcsR0FBR0YsZUFBZSxDQUFDVCxPQUFPLENBQUNpQyxTQUFTLElBQUl4QixlQUFlLENBQUNxQixVQUFVLENBQUNHLFNBQVM7UUFDdkY7TUFDRCxLQUFLLGlCQUFpQjtRQUNyQnRCLFdBQVcsR0FBR0YsZUFBZSxDQUFDVCxPQUFPLENBQUNrQyxlQUFlO1FBQ3JEO01BQ0QsS0FBSyxnQkFBZ0I7UUFDcEJ2QixXQUFXLEdBQUdGLGVBQWUsQ0FBQ1QsT0FBTyxDQUFDZ0MsY0FBYztRQUNwRDtNQUNELEtBQUssb0JBQW9CO1FBQ3hCckIsV0FBVyxHQUFHRixlQUFlLENBQUNULE9BQU8sQ0FBQ21DLGtCQUFrQjtRQUN4RDtNQUNELEtBQUssZ0JBQWdCO1FBQ3BCeEIsV0FBVyxHQUFHRixlQUFlLENBQUNULE9BQU8sQ0FBQ29DLFFBQVEsQ0FBQ0MsT0FBTztRQUN0RDtNQUNELEtBQUssNkJBQTZCO1FBQ2pDMUIsV0FBVyxHQUFHRixlQUFlLENBQUNULE9BQU8sQ0FBQ29DLFFBQVEsQ0FBQ0UsYUFBYTtRQUM1RDtNQUNELEtBQUssNkJBQTZCO1FBQ2pDM0IsV0FBVyxHQUFHRixlQUFlLENBQUNULE9BQU8sQ0FBQ29DLFFBQVEsQ0FBQ0csWUFBWTtRQUMzRDtNQUNELEtBQUsseUJBQXlCO1FBQzdCNUIsV0FBVyxHQUFHRixlQUFlLENBQUNULE9BQU8sQ0FBQ3dDLHVCQUF1QjtRQUM3RDtNQUNELEtBQUssbUJBQW1CO1FBQ3ZCN0IsV0FBVyxHQUFHRixlQUFlLENBQUNULE9BQU8sQ0FBQ3lDLGlCQUFpQjtRQUN2RDtNQUNELEtBQUssaUJBQWlCO1FBQ3JCOUIsV0FBVyxHQUFHRixlQUFlLENBQUNULE9BQU8sQ0FBQzBDLGVBQWU7UUFDckQ7SUFDRjtJQUNBLE9BQU8vQixXQUFXO0VBQ25CO0VBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBQ0EsU0FBU2dDLFdBQVdBLENBQUNDLFFBQWtCLEVBQUUzQyxjQUE2QixFQUFrQjtJQUN2RixNQUFNNEMsS0FBcUIsR0FBRyxFQUFFO0lBRWhDQyxxQkFBcUIsQ0FBQ0YsUUFBUSxDQUFDLENBQUMxQyxPQUFPLENBQUMsVUFBVTZDLGVBQWUsRUFBRTtNQUNsRTtNQUNBLE1BQU1DLFlBQTBCLEdBQUc7UUFDbENDLEtBQUssRUFBRUYsZUFBZSxDQUFDRyxJQUFJO1FBQzNCQyxPQUFPLEVBQUVKLGVBQWUsQ0FBQ0ssV0FBVztRQUNwQ3BELE9BQU8sRUFBRSxFQUFFO1FBQ1hxRCxPQUFPLEVBQUVOLGVBQWUsQ0FBQ007TUFDMUIsQ0FBQztNQUVELE1BQU1DLFdBQXdCLEdBQUc7UUFDaENDLElBQUksRUFBRVIsZUFBZSxDQUFDUSxJQUFJO1FBQzFCQyxJQUFJLEVBQUVULGVBQWUsQ0FBQ1UsS0FBSztRQUMzQkMsS0FBSyxFQUFFekQsY0FBYyxDQUFDOEMsZUFBZSxDQUFDM0MsRUFBRSxDQUFDO1FBQ3pDQSxFQUFFLEVBQUUyQyxlQUFlLENBQUMzQztNQUNyQixDQUFDO01BRUQ0QyxZQUFZLENBQUNoRCxPQUFPLENBQUMyRCxJQUFJLENBQUNMLFdBQVcsQ0FBQztNQUN0Q1QsS0FBSyxDQUFDYyxJQUFJLENBQUNYLFlBQVksQ0FBQztJQUN6QixDQUFDLENBQUM7SUFDRixPQUFPSCxLQUFLO0VBQ2I7RUFFQSxNQUFNZSxVQUFVLEdBQUcsb0JBQW9CO0VBRXZDLE1BQU1DLFVBQVUsR0FBRztJQUNsQkMsT0FBTyxFQUFFO01BQ1JoQyxVQUFVLEVBQUU7UUFDWGlDLGVBQWUsRUFBRUMsOEJBQThCLENBQUMsQ0FBQztRQUNqREMsTUFBTSxFQUFFQyxlQUFlLENBQUM7TUFDekIsQ0FBQztNQUNEQyxRQUFRLEVBQUU7UUFDVEMsRUFBRSxFQUFFO1VBQ0hsQixJQUFJLEVBQUVtQixPQUFPLENBQUMsK0JBQStCLENBQUM7VUFDOUNDLElBQUksRUFBRSwrQkFBK0I7VUFDckNDLE9BQU8sRUFBRSxlQUFBQSxDQUFnQnZFLE9BQWlCLEVBQTZCO1lBQ3RFLE1BQU00QyxRQUFRLEdBQUc1QyxPQUFPLENBQUNRLFNBQVMsQ0FBQyxDQUFhO1lBQ2hELE1BQU1ULGtCQUFrQixHQUFHK0MscUJBQXFCLENBQUNGLFFBQVEsQ0FBQztZQUMxRCxNQUFNM0MsY0FBYyxHQUFHSCx1QkFBdUIsQ0FBQ0Msa0JBQWtCLEVBQUVDLE9BQU8sQ0FBQztZQUMzRSxNQUFNd0UsYUFBYSxHQUFHO2NBQUUsR0FBR3ZFO1lBQWUsQ0FBQztZQUMzQyxNQUFNd0UsYUFBYSxHQUFHekUsT0FBTyxDQUFDMEUsaUJBQWlCLENBQUMsVUFBVSxDQUFZO1lBQ3RFLElBQUksQ0FBQ0MscUJBQXFCLENBQUNGLGFBQWEsRUFBRWIsVUFBVSxDQUFDLEVBQUU7Y0FDdEQ7Y0FDQSxJQUFJZixLQUFLLEdBQUdGLFdBQVcsQ0FBQ0MsUUFBUSxFQUFFM0MsY0FBYyxDQUFDO2NBQ2pENEMsS0FBSyxHQUFHK0Isb0JBQW9CLENBQUNDLFdBQVcsQ0FBQ0MsZUFBZSxDQUFDOUUsT0FBTyxDQUFDLEVBQUU2QyxLQUFLLENBQUM7Y0FDekU7Y0FDQWtDLGtCQUFrQixDQUFDbEMsS0FBSyxFQUFFNEIsYUFBYSxFQUFFYixVQUFVLENBQUM7WUFDckQsQ0FBQyxNQUFNO2NBQ047Y0FDQTtjQUNBM0QsY0FBYyxDQUFDK0UsZUFBZSxHQUFHQyx5QkFBeUIsQ0FBQ1IsYUFBYSxDQUFDO1lBQzFFO1lBQ0EsTUFBTVMsYUFBYSxHQUFHbEYsT0FBTyxDQUFDbUYsUUFBUSxDQUFDLGFBQWEsQ0FBa0I7WUFDdEUsT0FBT0Msa0JBQWtCLENBQ3hCWCxhQUFhLEVBQ2J4RSxjQUFjLEVBQ2QsNkNBQTZDLEVBQzdDaUYsYUFBYSxFQUNidEIsVUFBVSxFQUNWLG9EQUFvRCxFQUNwRDtjQUNDeUIsS0FBSyxFQUFFLE9BQU87Y0FDZEMsTUFBTSxFQUFFO1lBQ1QsQ0FDRCxDQUFDLENBQUNDLElBQUksQ0FBQyxVQUFVQyxxQkFBb0MsRUFBeUI7Y0FDN0UsTUFBTUMsWUFBWSxHQUFHQyxlQUFlLENBQUMxRixPQUFPLENBQUNRLFNBQVMsQ0FBQyxDQUFhLENBQUM7Y0FDckUsT0FBT21GLGNBQWMsQ0FBQzVGLGtCQUFrQixFQUFFeUUsYUFBYSxFQUFFZ0IscUJBQXFCLEVBQUVDLFlBQVksRUFBRXpGLE9BQU8sQ0FBQztZQUN2RyxDQUFDLEVBQUU0RixTQUFTLENBQUM7VUFDZDtRQUNEO01BQ0Q7SUFDRCxDQUFDO0lBQ0Q7SUFDQUMsVUFBVSxFQUFFO01BQ1hDLGtCQUFrQixFQUFFO1FBQUVDLE1BQU0sRUFBRTtNQUFLLENBQUM7TUFDcENDLGtCQUFrQixFQUFFO1FBQUVELE1BQU0sRUFBRTtNQUFLLENBQUM7TUFDcENoRixZQUFZLEVBQUU7UUFBRWdGLE1BQU0sRUFBRTtNQUFLLENBQUM7TUFDOUJsRixNQUFNLEVBQUU7UUFBRWtGLE1BQU0sRUFBRTtNQUFLLENBQUM7TUFDeEJFLFdBQVcsRUFBRTtRQUFFRixNQUFNLEVBQUU7TUFBSyxDQUFDO01BQzdCbkYsYUFBYSxFQUFFO1FBQUVtRixNQUFNLEVBQUU7TUFBSyxDQUFDO01BQy9CRyxlQUFlLEVBQUU7UUFBRUgsTUFBTSxFQUFFO01BQUssQ0FBQztNQUNqQ0ksZUFBZSxFQUFFO1FBQUVKLE1BQU0sRUFBRTtNQUFLLENBQUM7TUFDakNLLFlBQVksRUFBRTtRQUFFTCxNQUFNLEVBQUU7TUFBSyxDQUFDO01BQzlCOUQsU0FBUyxFQUFFO1FBQUU4RCxNQUFNLEVBQUU7TUFBSyxDQUFDO01BQzNCVixLQUFLLEVBQUU7UUFBRVUsTUFBTSxFQUFFO01BQUs7SUFDdkIsQ0FBQztJQUNETSxZQUFZLEVBQUUsQ0FBQyxDQUFDO0lBRWhCO0lBQ0FDLGdCQUFnQixFQUFFLFNBQUFBLENBQVV0RyxPQUFpQixFQUF1QjtNQUNuRSxNQUFNTyxLQUFLLEdBQUdQLE9BQU8sQ0FBQ1EsU0FBUyxDQUFDLENBQWE7TUFDN0MsTUFBTVQsa0JBQWtCLEdBQUcrQyxxQkFBcUIsQ0FBQ3ZDLEtBQUssQ0FBQyxDQUFDZ0csTUFBTSxDQUFFQyxJQUFJLElBQUssQ0FBQzNHLGFBQWEsQ0FBQzRCLFFBQVEsQ0FBQytFLElBQUksQ0FBQ3BHLEVBQUUsQ0FBQyxDQUFDO01BQzFHLE9BQU9xRywrQkFBK0IsQ0FBQzFHLGtCQUFrQixFQUFFQyxPQUFPLENBQUNtRixRQUFRLENBQUMsYUFBYSxDQUFrQixDQUFDO0lBQzdHLENBQUM7SUFDRDtJQUNBdUIsc0JBQXNCLEVBQUUsU0FBQUEsQ0FBVTNHLGtCQUF1QyxFQUFFQyxPQUFpQixFQUFpQjtNQUM1RyxNQUFNMkcsWUFBMkIsR0FBRyxDQUFDLENBQUM7TUFDdEM1RyxrQkFBa0IsQ0FBQ0csT0FBTyxDQUFDLFVBQVVDLE9BQU8sRUFBRTtRQUM3QyxJQUFJeUcsYUFBYTtRQUNqQixJQUFJekcsT0FBTyxDQUFDMEcsSUFBSSxFQUFFO1VBQ2pCRCxhQUFhLEdBQUd6RyxPQUFPLENBQUMwRyxJQUFJO1FBQzdCLENBQUMsTUFBTTtVQUNORCxhQUFhLEdBQUd6RyxPQUFPLENBQUNDLEVBQUU7UUFDM0I7UUFDQXVHLFlBQVksQ0FBQ0MsYUFBYSxDQUFDLEdBQUd2RywwQkFBMEIsQ0FBQ0wsT0FBTyxFQUFFRyxPQUFPLENBQUM7TUFDM0UsQ0FBQyxDQUFDO01BQ0YsT0FBT3dHLFlBQVk7SUFDcEIsQ0FBQztJQUNEO0lBQ0FHLG9CQUFvQixFQUFFLFNBQUFBLENBQVU5RyxPQUFpQixFQUFVO01BQzFELE1BQU1PLEtBQUssR0FBR1AsT0FBTyxDQUFDUSxTQUFTLENBQUMsQ0FBYTtNQUM3QyxPQUFPa0YsZUFBZSxDQUFDbkYsS0FBSyxDQUFDO0lBQzlCLENBQUM7SUFDRDtJQUNBd0csc0JBQXNCLEVBQUUsU0FBQUEsQ0FBVUMsZUFBOEIsRUFBRXZCLFlBQW9CLEVBQUV6RixPQUFpQixFQUFvQjtNQUM1SCxPQUFPaUgsZUFBZSxDQUFDRCxlQUFlLEVBQUV2QixZQUFZLEVBQUV6RixPQUFPLENBQUM7SUFDL0Q7RUFDRCxDQUFDO0VBQUMsT0FFYTZELFVBQVU7QUFBQSIsImlnbm9yZUxpc3QiOltdfQ==
287
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJpdGVtc1RvUmVtb3ZlIiwiZ2V0QWRhcHRhdGlvblByb3BlcnRpZXMiLCJkZXNpZ250aW1lU2V0dGluZ3MiLCJjb250cm9sIiwicHJvcGVydHlWYWx1ZXMiLCJmb3JFYWNoIiwic2V0dGluZyIsImlkIiwiZ2V0QWRhcHRhdGlvblByb3BlcnR5VmFsdWUiLCJfZXhwb3J0cyIsInRhYmxlIiwiZ2V0UGFyZW50IiwidGFibGVEZWZpbml0aW9uIiwiZ2V0UHJvcGVydHkiLCJyZXR1cm5WYWx1ZSIsImhlYWRlclZpc2libGUiLCJoZWFkZXIiLCJlbmFibGVGdWxsU2NyZWVuIiwiZW5hYmxlRXhwb3J0IiwiZGF0YSIsImNyZWF0aW9uTW9kZSIsImNyZWF0ZUF0RW5kIiwiZnJvemVuQ29sdW1uQ291bnQiLCJmaWx0ZXJzIiwicXVpY2tGaWx0ZXJzIiwic2hvd0NvdW50cyIsImdldFAxM25Nb2RlIiwibGVuZ3RoIiwiaW5jbHVkZXMiLCJyb3dDb3VudCIsInJvd0NvdW50TW9kZSIsInVzZUNvbmRlbnNlZFRhYmxlTGF5b3V0Iiwid2lkdGhJbmNsdWRpbmdDb2x1bW5IZWFkZXIiLCJhbm5vdGF0aW9uIiwic2VsZWN0aW9uTW9kZSIsInNlbGVjdGlvbkxpbWl0IiwidGhyZXNob2xkIiwic2Nyb2xsVGhyZXNob2xkIiwiaGllcmFyY2h5UXVhbGlmaWVyIiwibWFzc0VkaXQiLCJlbmFibGVkIiwidmlzaWJsZUZpZWxkcyIsImlnbm9yZUZpZWxkcyIsImVuYWJsZUFkZENhcmRUb0luc2lnaHRzIiwiYmVmb3JlUmViaW5kVGFibGUiLCJzZWxlY3Rpb25DaGFuZ2UiLCJnZXRTZXR0aW5ncyIsInRhYmxlQVBJIiwiaXRlbXMiLCJnZXREZXNpZ250aW1lU2V0dGluZ3MiLCJtYW5pZmVzdFNldHRpbmciLCJzZXR0aW5nc0RhdGEiLCJsYWJlbCIsIm5hbWUiLCJ0b29sdGlwIiwiZGVzY3JpcHRpb24iLCJrZXlVc2VyIiwiY29udHJvbERhdGEiLCJ0eXBlIiwiZW51bSIsImVudW1zIiwidmFsdWUiLCJwdXNoIiwiY29uZmlnUGF0aCIsImRlc2lnblRpbWUiLCJhY3Rpb25zIiwidGV4dEFycmFuZ2VtZW50IiwiZ2V0VGV4dEFycmFuZ2VtZW50Q2hhbmdlQWN0aW9uIiwicmVuYW1lIiwiZ2V0UmVuYW1lQWN0aW9uIiwic2V0dGluZ3MiLCJmZSIsImdldFRleHQiLCJpY29uIiwiaXNFbmFibGVkIiwiaXNNYW5pZmVzdENoYW5nZXNFbmFibGVkIiwiaGFuZGxlciIsInVuY2hhbmdlZERhdGEiLCJjb25maWdDb250ZXh0IiwiZ2V0QmluZGluZ0NvbnRleHQiLCJpc0NvbmZpZ01vZGVsUHJlcGFyZWQiLCJnZXRTZXR0aW5nc0lmS2V5VXNlciIsIkNvbW1vblV0aWxzIiwiZ2V0QXBwQ29tcG9uZW50IiwicHJlcGFyZUNvbmZpZ01vZGVsIiwicGVyc29uYWxpemF0aW9uIiwiZ2V0UGVyc29uYWxpemF0aW9uU2V0dGluZyIsInJlc291cmNlTW9kZWwiLCJnZXRNb2RlbCIsIm9wZW5BZGFwdGlvbkRpYWxvZyIsIndpZHRoIiwiaGVpZ2h0IiwidGhlbiIsInByb3BlcnR5VmFsdWVzRW50ZXJlZCIsInByb3BlcnR5UGF0aCIsImdldFByb3BlcnR5UGF0aCIsImV4dHJhY3RDaGFuZ2VzIiwibm9DaGFuZ2VzIiwicHJvcGVydGllcyIsImJ1c3lJbmRpY2F0b3JEZWxheSIsImlnbm9yZSIsImVuYWJsZUNvbHVtblJlc2l6ZSIsImhlYWRlckxldmVsIiwibXVsdGlTZWxlY3RNb2RlIiwic2hvd1Bhc3RlQnV0dG9uIiwic2hvd1Jvd0NvdW50IiwiYWdncmVnYXRpb25zIiwibWFuaWZlc3RTZXR0aW5ncyIsImZpbHRlciIsIml0ZW0iLCJnZXRQcm9wZXJ0eU5hbWVzQW5kRGVzY3JpcHRpb25zIiwibWFuaWZlc3RTZXR0aW5nc1ZhbHVlcyIsInJldHVyblZhbHVlcyIsInByb3BlcnR5SW5kZXgiLCJwYXRoIiwibWFuaWZlc3RQcm9wZXJ0eVBhdGgiLCJtYW5pZmVzdFByb3BlcnR5Q2hhbmdlIiwicHJvcGVydHlDaGFuZ2VzIiwic2VwYXJhdGVDaGFuZ2VzIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJUYWJsZS5kZXNpZ250aW1lLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qIVxuICogRmluZCB0aGUgY3VycmVudCB2YWx1ZXMgb2YgdGhlIHRhYmxlIGNvbmZpZ3VyYXRpb24gdGhhdCBpcyBwcm92aWRlZCBpbiB0aGUgdGFibGUgYWRhcHQgZGlhbG9nXG4gKi9cblxuaW1wb3J0IENvbW1vblV0aWxzIGZyb20gXCJzYXAvZmUvY29yZS9Db21tb25VdGlsc1wiO1xuaW1wb3J0IHR5cGUgUmVzb3VyY2VNb2RlbCBmcm9tIFwic2FwL2ZlL2NvcmUvUmVzb3VyY2VNb2RlbFwiO1xuXG5pbXBvcnQgeyBnZXRSZW5hbWVBY3Rpb24sIGdldFRleHQsIGdldFRleHRBcnJhbmdlbWVudENoYW5nZUFjdGlvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9kZXNpZ250aW1lL0Fubm90YXRpb25CYXNlZENoYW5nZXNcIjtcbmltcG9ydCB0eXBlIHtcblx0RGVzaWdudGltZVNldHRpbmcsXG5cdERlc2lnbnRpbWVTZXR0aW5nRW51bXMsXG5cdFByb3BlcnR5VmFsdWUsXG5cdFNldHRpbmdzRGF0YSxcblx0YWRhcHRpb25DaGFuZ2Vcbn0gZnJvbSBcInNhcC9mZS9tYWNyb3MvZGVzaWdudGltZS9EZXNpZ250aW1lLmhlbHBlclwiO1xuaW1wb3J0IHtcblx0ZXh0cmFjdENoYW5nZXMsXG5cdGdldFBlcnNvbmFsaXphdGlvblNldHRpbmcsXG5cdGdldFByb3BlcnR5TmFtZXNBbmREZXNjcmlwdGlvbnMsXG5cdGdldFNldHRpbmdzSWZLZXlVc2VyLFxuXHRpc0NvbmZpZ01vZGVsUHJlcGFyZWQsXG5cdGlzTWFuaWZlc3RDaGFuZ2VzRW5hYmxlZCxcblx0bm9DaGFuZ2VzLFxuXHRvcGVuQWRhcHRpb25EaWFsb2csXG5cdHByZXBhcmVDb25maWdNb2RlbCxcblx0c2VwYXJhdGVDaGFuZ2VzXG59IGZyb20gXCJzYXAvZmUvbWFjcm9zL2Rlc2lnbnRpbWUvRGVzaWdudGltZS5oZWxwZXJcIjtcbmltcG9ydCB0eXBlIFRhYmxlQVBJIGZyb20gXCJzYXAvZmUvbWFjcm9zL3RhYmxlL1RhYmxlQVBJXCI7XG5pbXBvcnQgeyBnZXREZXNpZ250aW1lU2V0dGluZ3MsIGdldFByb3BlcnR5UGF0aCB9IGZyb20gXCJzYXAvZmUvbWFjcm9zL3RhYmxlL2Rlc2lnbnRpbWUvVGFibGUuZGVzaWdudGltZS5oZWxwZXJcIjtcbmltcG9ydCB0eXBlIE1EQ1RhYmxlIGZyb20gXCJzYXAvdWkvbWRjL1RhYmxlXCI7XG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvQ29udGV4dFwiO1xuXG50eXBlIENvbnRyb2xEYXRhID0ge1xuXHR0eXBlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cdGVudW06IERlc2lnbnRpbWVTZXR0aW5nRW51bXNbXSB8IHVuZGVmaW5lZDtcblx0dmFsdWU6IHVua25vd247XG5cdGlkOiBzdHJpbmc7XG59O1xuLy8gRG9uJ3QgcGFzcyB0aGVzZSBwcm9wZXJ0aWVzIHRvIGZpb3JpIHRvb2xzIHByb2Nlc3NpbmcgZm9yIHRoZSBjb250cm9sIHBhbmVsIGZvciB0YWJsZS4gQ3VycmVudGx5IHRoZSBjb21iaW5hdGlvblxuLy8gb2YgYm9vbGVhbiBwcm9wZXJ0eSBwbHVzIGZ1cnRoZXIgb3B0aW9uIG9mIGZpeGVkIGxpc3QgaXMgbm90IHN1cHBvcnRlZFxuY29uc3QgaXRlbXNUb1JlbW92ZSA9IFtcblx0XCJwZXJzb25hbGl6YXRpb25cIixcblx0XCJwZXJzb25hbGl6YXRpb25Tb3J0XCIsXG5cdFwicGVyc29uYWxpemF0aW9uQ29sdW1uXCIsXG5cdFwicGVyc29uYWxpemF0aW9uRmlsdGVyXCIsXG5cdFwicGVyc29uYWxpemF0aW9uR3JvdXBcIixcblx0XCJwZXJzb25hbGl6YXRpb25BZ2dyZWdhdGVcIlxuXTtcblxuZXhwb3J0IGZ1bmN0aW9uIGdldEFkYXB0YXRpb25Qcm9wZXJ0aWVzKGRlc2lnbnRpbWVTZXR0aW5nczogRGVzaWdudGltZVNldHRpbmdbXSwgY29udHJvbDogTURDVGFibGUpOiBQcm9wZXJ0eVZhbHVlIHtcblx0Y29uc3QgcHJvcGVydHlWYWx1ZXM6IFByb3BlcnR5VmFsdWUgPSB7fTtcblx0ZGVzaWdudGltZVNldHRpbmdzLmZvckVhY2goZnVuY3Rpb24gKHNldHRpbmcpIHtcblx0XHRwcm9wZXJ0eVZhbHVlc1tzZXR0aW5nLmlkXSA9IGdldEFkYXB0YXRpb25Qcm9wZXJ0eVZhbHVlKGNvbnRyb2wsIHNldHRpbmcpO1xuXHR9KTtcblx0cmV0dXJuIHByb3BlcnR5VmFsdWVzO1xufVxuLyoqXG4gKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiBvbmUgb2YgdGhlIHNldHRpbmdzIHRoYXQgaGF2ZSBiZWVuIGRlZmluZWQgZm9yIHRhYmxlIGFkYXB0YXRpb24uXG4gKiBAcGFyYW0gY29udHJvbCBSZWZlcmVuY2UgdG8gc2VsZWN0ZWQgdGFibGVcbiAqIEBwYXJhbSBzZXR0aW5nIFRoZSBkZWZpbml0aW9uIG9mIHRoZSBzZXR0aW5nIHJlcXVpcmVkIGZvciBhZGFwdGF0aW9uXG4gKiBAcmV0dXJucyBTZXR0aW5nIGRlZmluaXRpb24gd2l0aCBhIHZhbHVlIGZvciBzZWxlY3RlZCBjb250cm9sXG4gKi9cbmZ1bmN0aW9uIGdldEFkYXB0YXRpb25Qcm9wZXJ0eVZhbHVlKGNvbnRyb2w6IE1EQ1RhYmxlLCBzZXR0aW5nOiBEZXNpZ250aW1lU2V0dGluZyk6IGJvb2xlYW4gfCBzdHJpbmcgfCBudW1iZXIge1xuXHRjb25zdCB0YWJsZSA9IGNvbnRyb2wuZ2V0UGFyZW50KCkgYXMgVGFibGVBUEk7XG5cdGNvbnN0IHRhYmxlRGVmaW5pdGlvbiA9IHRhYmxlLmdldFByb3BlcnR5KFwidGFibGVEZWZpbml0aW9uXCIpO1xuXHRsZXQgcmV0dXJuVmFsdWU6IGJvb2xlYW4gfCBzdHJpbmcgfCBudW1iZXIgPSBcIlwiO1xuXG5cdHN3aXRjaCAoc2V0dGluZy5pZCkge1xuXHRcdGNhc2UgXCJoZWFkZXJWaXNpYmxlXCI6XG5cdFx0XHRyZXR1cm5WYWx1ZSA9IHRhYmxlRGVmaW5pdGlvbi5oZWFkZXJWaXNpYmxlO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBcImhlYWRlclwiOlxuXHRcdFx0cmV0dXJuVmFsdWUgPSB0YWJsZURlZmluaXRpb24uaGVhZGVyO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBcImVuYWJsZUZ1bGxTY3JlZW5cIjpcblx0XHRcdHJldHVyblZhbHVlID0gdGFibGVEZWZpbml0aW9uLmNvbnRyb2wuZW5hYmxlRnVsbFNjcmVlbjtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgXCJlbmFibGVFeHBvcnRcIjpcblx0XHRcdHJldHVyblZhbHVlID0gdGFibGVEZWZpbml0aW9uLmNvbnRyb2wuZW5hYmxlRXhwb3J0O1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBcInR5cGVcIjpcblx0XHRcdHJldHVyblZhbHVlID0gY29udHJvbC5kYXRhKFwidGFibGVUeXBlXCIpO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBcImNyZWF0aW9uTW9kZU5hbWVcIjpcblx0XHRcdHJldHVyblZhbHVlID0gdGFibGVEZWZpbml0aW9uLmNvbnRyb2wuY3JlYXRpb25Nb2RlO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBcImNyZWF0aW9uTW9kZUNyZWF0ZUF0RW5kXCI6XG5cdFx0XHRyZXR1cm5WYWx1ZSA9IHRhYmxlRGVmaW5pdGlvbi5jb250cm9sLmNyZWF0ZUF0RW5kO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBcImZyb3plbkNvbHVtbkNvdW50XCI6XG5cdFx0XHRyZXR1cm5WYWx1ZSA9IHRhYmxlRGVmaW5pdGlvbi5jb250cm9sLmZyb3plbkNvbHVtbkNvdW50O1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBcInNob3dDb3VudHNcIjpcblx0XHRcdHJldHVyblZhbHVlID0gdGFibGVEZWZpbml0aW9uLmNvbnRyb2wuZmlsdGVycz8ucXVpY2tGaWx0ZXJzPy5zaG93Q291bnRzO1xuXHRcdFx0YnJlYWs7XG5cdFx0LyogY2FzZSBcImhpZGVUYWJsZVRpdGxlXCI6XG5cdFx0XHRwcm9wZXJ0eVZhbHVlcy5oaWRlVGFibGVUaXRsZSA9IHRhYmxlRGVmaW5pdGlvbi5jb250cm9sLmZpbHRlcnM/LnF1aWNrRmlsdGVycyAmJiAhdGFibGVEZWZpbml0aW9uLmNvbnRyb2wuaGVhZGVyVmlzaWJsZTtcblx0XHRcdGJyZWFrOyAqL1xuXHRcdGNhc2UgXCJwZXJzb25hbGl6YXRpb25cIjpcblx0XHRcdHJldHVyblZhbHVlID0gY29udHJvbC5nZXRQMTNuTW9kZSgpLmxlbmd0aCA9PT0gMCA/IFwiRmFsc2VcIiA6IFwiVHJ1ZVwiO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBcInBlcnNvbmFsaXphdGlvblNvcnRcIjpcblx0XHRcdHJldHVyblZhbHVlID0gY29udHJvbC5nZXRQMTNuTW9kZSgpLmluY2x1ZGVzKFwiU29ydFwiKTtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgXCJwZXJzb25hbGl6YXRpb25Db2x1bW5cIjpcblx0XHRcdHJldHVyblZhbHVlID0gY29udHJvbC5nZXRQMTNuTW9kZSgpLmluY2x1ZGVzKFwiQ29sdW1uXCIpO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBcInBlcnNvbmFsaXphdGlvbkZpbHRlclwiOlxuXHRcdFx0cmV0dXJuVmFsdWUgPSBjb250cm9sLmdldFAxM25Nb2RlKCkuaW5jbHVkZXMoXCJGaWx0ZXJcIik7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFwicGVyc29uYWxpemF0aW9uR3JvdXBcIjpcblx0XHRcdHJldHVyblZhbHVlID0gY29udHJvbC5nZXRQMTNuTW9kZSgpLmluY2x1ZGVzKFwiR3JvdXBcIik7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFwicGVyc29uYWxpemF0aW9uQWdncmVnYXRlXCI6XG5cdFx0XHRyZXR1cm5WYWx1ZSA9IGNvbnRyb2wuZ2V0UDEzbk1vZGUoKS5pbmNsdWRlcyhcIkFnZ3JlZ2F0ZVwiKTtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgXCJyb3dDb3VudFwiOlxuXHRcdFx0cmV0dXJuVmFsdWUgPSB0YWJsZURlZmluaXRpb24uY29udHJvbC5yb3dDb3VudDtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgXCJyb3dDb3VudE1vZGVcIjpcblx0XHRcdHJldHVyblZhbHVlID0gdGFibGVEZWZpbml0aW9uLmNvbnRyb2wucm93Q291bnRNb2RlO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBcImNvbmRlbnNlZFRhYmxlTGF5b3V0XCI6XG5cdFx0XHRyZXR1cm5WYWx1ZSA9IHRhYmxlRGVmaW5pdGlvbi5jb250cm9sLnVzZUNvbmRlbnNlZFRhYmxlTGF5b3V0O1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBcIndpZHRoSW5jbHVkaW5nQ29sdW1uSGVhZGVyXCI6XG5cdFx0XHRyZXR1cm5WYWx1ZSA9IHRhYmxlRGVmaW5pdGlvbi5jb250cm9sLndpZHRoSW5jbHVkaW5nQ29sdW1uSGVhZGVyO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBcInNlbGVjdGlvbk1vZGVcIjpcblx0XHRcdHJldHVyblZhbHVlID0gdGFibGVEZWZpbml0aW9uLmFubm90YXRpb24uc2VsZWN0aW9uTW9kZTtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgXCJzZWxlY3RBbGxcIjpcblx0XHRcdHJldHVyblZhbHVlID0gdGFibGVEZWZpbml0aW9uLmNvbnRyb2wuc2VsZWN0aW9uTGltaXQgPT09IDA7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFwidGhyZXNob2xkXCI6XG5cdFx0XHRyZXR1cm5WYWx1ZSA9IHRhYmxlRGVmaW5pdGlvbi5jb250cm9sLnRocmVzaG9sZCA/PyB0YWJsZURlZmluaXRpb24uYW5ub3RhdGlvbi50aHJlc2hvbGQ7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFwic2Nyb2xsVGhyZXNob2xkXCI6XG5cdFx0XHRyZXR1cm5WYWx1ZSA9IHRhYmxlRGVmaW5pdGlvbi5jb250cm9sLnNjcm9sbFRocmVzaG9sZDtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgXCJzZWxlY3Rpb25MaW1pdFwiOlxuXHRcdFx0cmV0dXJuVmFsdWUgPSB0YWJsZURlZmluaXRpb24uY29udHJvbC5zZWxlY3Rpb25MaW1pdDtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgXCJoaWVyYXJjaHlRdWFsaWZpZXJcIjpcblx0XHRcdHJldHVyblZhbHVlID0gdGFibGVEZWZpbml0aW9uLmNvbnRyb2wuaGllcmFyY2h5UXVhbGlmaWVyO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBcImVuYWJsZU1hc3NFZGl0XCI6XG5cdFx0XHRyZXR1cm5WYWx1ZSA9IHRhYmxlRGVmaW5pdGlvbi5jb250cm9sLm1hc3NFZGl0LmVuYWJsZWQ7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFwiZW5hYmxlTWFzc0VkaXRWaXNpYmxlRmllbGRzXCI6XG5cdFx0XHRyZXR1cm5WYWx1ZSA9IHRhYmxlRGVmaW5pdGlvbi5jb250cm9sLm1hc3NFZGl0LnZpc2libGVGaWVsZHM7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFwiZW5hYmxlTWFzc0VkaXRJZ25vcmVkRmllbGRzXCI6XG5cdFx0XHRyZXR1cm5WYWx1ZSA9IHRhYmxlRGVmaW5pdGlvbi5jb250cm9sLm1hc3NFZGl0Lmlnbm9yZUZpZWxkcztcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgXCJlbmFibGVBZGRDYXJkVG9JbnNpZ2h0c1wiOlxuXHRcdFx0cmV0dXJuVmFsdWUgPSB0YWJsZURlZmluaXRpb24uY29udHJvbC5lbmFibGVBZGRDYXJkVG9JbnNpZ2h0cztcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgXCJiZWZvcmVSZWJpbmRUYWJsZVwiOlxuXHRcdFx0cmV0dXJuVmFsdWUgPSB0YWJsZURlZmluaXRpb24uY29udHJvbC5iZWZvcmVSZWJpbmRUYWJsZTtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgXCJzZWxlY3Rpb25DaGFuZ2VcIjpcblx0XHRcdHJldHVyblZhbHVlID0gdGFibGVEZWZpbml0aW9uLmNvbnRyb2wuc2VsZWN0aW9uQ2hhbmdlO1xuXHRcdFx0YnJlYWs7XG5cdH1cblx0cmV0dXJuIHJldHVyblZhbHVlO1xufVxuLyoqXG4gKiBSZXR1cm5zIHRoZSBzZXR0aW5ncyBhbmQgdmFsdWVzIGZvciBhIHRhYmxlIGZvcm1hdHRlZCBmb3IgdGhlIGFkYXB0YXRpb24gZGlhbG9nIGNvbnRlbnQuXG4gKiBAcGFyYW0gdGFibGVBUEkgUmVmZXJlbmNlIHRvIHNlbGVjdGVkIHRhYmxlXG4gKiBAcGFyYW0gcHJvcGVydHlWYWx1ZXMgVGhlIGxpc3Qgb2YgcHJvcGVydGllcyBhbmQgdmFsdWVzIGZvciB0aGUgc2VsZWN0ZWQgdGFibGVcbiAqIEByZXR1cm5zIEZvcm1hdHRlZCBsaXN0IGZvciB0aGUgYWRhcHRhdGlvbiBkaWFsb2dcbiAqL1xuZnVuY3Rpb24gZ2V0U2V0dGluZ3ModGFibGVBUEk6IFRhYmxlQVBJLCBwcm9wZXJ0eVZhbHVlczogUHJvcGVydHlWYWx1ZSk6IFNldHRpbmdzRGF0YVtdIHtcblx0Y29uc3QgaXRlbXM6IFNldHRpbmdzRGF0YVtdID0gW107XG5cblx0Z2V0RGVzaWdudGltZVNldHRpbmdzKHRhYmxlQVBJKS5mb3JFYWNoKGZ1bmN0aW9uIChtYW5pZmVzdFNldHRpbmcpIHtcblx0XHQvL0ZpbGwgbW9kZWwgZm9yIGFkYXB0YXRpb24gc2V0dGluZ3MgZGF0YVxuXHRcdGNvbnN0IHNldHRpbmdzRGF0YTogU2V0dGluZ3NEYXRhID0ge1xuXHRcdFx0bGFiZWw6IG1hbmlmZXN0U2V0dGluZy5uYW1lLFxuXHRcdFx0dG9vbHRpcDogbWFuaWZlc3RTZXR0aW5nLmRlc2NyaXB0aW9uLFxuXHRcdFx0Y29udHJvbDogW10sXG5cdFx0XHRrZXlVc2VyOiBtYW5pZmVzdFNldHRpbmcua2V5VXNlclxuXHRcdH07XG5cblx0XHRjb25zdCBjb250cm9sRGF0YTogQ29udHJvbERhdGEgPSB7XG5cdFx0XHR0eXBlOiBtYW5pZmVzdFNldHRpbmcudHlwZSxcblx0XHRcdGVudW06IG1hbmlmZXN0U2V0dGluZy5lbnVtcyxcblx0XHRcdHZhbHVlOiBwcm9wZXJ0eVZhbHVlc1ttYW5pZmVzdFNldHRpbmcuaWRdLFxuXHRcdFx0aWQ6IG1hbmlmZXN0U2V0dGluZy5pZFxuXHRcdH07XG5cblx0XHRzZXR0aW5nc0RhdGEuY29udHJvbC5wdXNoKGNvbnRyb2xEYXRhKTtcblx0XHRpdGVtcy5wdXNoKHNldHRpbmdzRGF0YSk7XG5cdH0pO1xuXHRyZXR1cm4gaXRlbXM7XG59XG5cbmNvbnN0IGNvbmZpZ1BhdGggPSBcInJ0YS9jb25maWdTZXR0aW5nc1wiO1xuXG5jb25zdCBkZXNpZ25UaW1lID0ge1xuXHRhY3Rpb25zOiB7XG5cdFx0YW5ub3RhdGlvbjoge1xuXHRcdFx0dGV4dEFycmFuZ2VtZW50OiBnZXRUZXh0QXJyYW5nZW1lbnRDaGFuZ2VBY3Rpb24oKSxcblx0XHRcdHJlbmFtZTogZ2V0UmVuYW1lQWN0aW9uKClcblx0XHR9LFxuXHRcdHNldHRpbmdzOiB7XG5cdFx0XHRmZToge1xuXHRcdFx0XHRuYW1lOiBnZXRUZXh0KFwiUlRBX0NPTlRFWFRfQUNUSU9OTUVOVV9DT05GSUdcIiksXG5cdFx0XHRcdGljb246IFwic2FwLWljb246Ly9kZXZlbG9wZXItc2V0dGluZ3NcIixcblx0XHRcdFx0aXNFbmFibGVkOiBpc01hbmlmZXN0Q2hhbmdlc0VuYWJsZWQsXG5cdFx0XHRcdGhhbmRsZXI6IGFzeW5jIGZ1bmN0aW9uIChjb250cm9sOiBNRENUYWJsZSk6IFByb21pc2U8YWRhcHRpb25DaGFuZ2VbXT4ge1xuXHRcdFx0XHRcdGNvbnN0IHRhYmxlQVBJID0gY29udHJvbC5nZXRQYXJlbnQoKSBhcyBUYWJsZUFQSTtcblx0XHRcdFx0XHRjb25zdCBkZXNpZ250aW1lU2V0dGluZ3MgPSBnZXREZXNpZ250aW1lU2V0dGluZ3ModGFibGVBUEkpO1xuXHRcdFx0XHRcdGNvbnN0IHByb3BlcnR5VmFsdWVzID0gZ2V0QWRhcHRhdGlvblByb3BlcnRpZXMoZGVzaWdudGltZVNldHRpbmdzLCBjb250cm9sKTtcblx0XHRcdFx0XHRjb25zdCB1bmNoYW5nZWREYXRhID0geyAuLi5wcm9wZXJ0eVZhbHVlcyB9O1xuXHRcdFx0XHRcdGNvbnN0IGNvbmZpZ0NvbnRleHQgPSBjb250cm9sLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikgYXMgQ29udGV4dDtcblx0XHRcdFx0XHRpZiAoIWlzQ29uZmlnTW9kZWxQcmVwYXJlZChjb25maWdDb250ZXh0LCBjb25maWdQYXRoKSkge1xuXHRcdFx0XHRcdFx0Ly8gZmlyc3QgdGltZSB0aGlzIHNlc3Npb25cblx0XHRcdFx0XHRcdGxldCBpdGVtcyA9IGdldFNldHRpbmdzKHRhYmxlQVBJLCBwcm9wZXJ0eVZhbHVlcyk7XG5cdFx0XHRcdFx0XHRpdGVtcyA9IGdldFNldHRpbmdzSWZLZXlVc2VyKENvbW1vblV0aWxzLmdldEFwcENvbXBvbmVudChjb250cm9sKSwgaXRlbXMpO1xuXHRcdFx0XHRcdFx0Ly8gdXNlIGludGVybmFsIG1vZGVsIHRvIHBlcnNpc3QgYWRhcHRhdGlvbiBjb25maWd1cmF0aW9uIHZhbHVlc1xuXHRcdFx0XHRcdFx0cHJlcGFyZUNvbmZpZ01vZGVsKGl0ZW1zLCBjb25maWdDb250ZXh0LCBjb25maWdQYXRoKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0Ly8gc2V0IHBlcnNvbmFsaXphdGlvbiB0byAnT3duIFNldHRpbmdzJyBpZiB0aGF0IHdhcyBjaG9zZW4gcHJldmlvdXNseVxuXHRcdFx0XHRcdFx0Ly8gYXMgdGhpcyBzZXR0aW5nIGNhbm5vdCBiZSByZXRyaXZlZCBmcm9tIHRoZSBjb250cm9sLCBhbmQgd2lsbCBiZSBhbHdheXMgdHJ1ZSBpZiBwZXJzb25hbGl6YXRpb24gaXMgZW5hYmxlZFxuXHRcdFx0XHRcdFx0cHJvcGVydHlWYWx1ZXMucGVyc29uYWxpemF0aW9uID0gZ2V0UGVyc29uYWxpemF0aW9uU2V0dGluZyhjb25maWdDb250ZXh0KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Y29uc3QgcmVzb3VyY2VNb2RlbCA9IGNvbnRyb2wuZ2V0TW9kZWwoXCJzYXAuZmUuaTE4blwiKSBhcyBSZXNvdXJjZU1vZGVsO1xuXHRcdFx0XHRcdHJldHVybiBvcGVuQWRhcHRpb25EaWFsb2coXG5cdFx0XHRcdFx0XHRjb25maWdDb250ZXh0LFxuXHRcdFx0XHRcdFx0cHJvcGVydHlWYWx1ZXMsXG5cdFx0XHRcdFx0XHRcIntzYXAuZmUuaTE4bj5SVEFfQ09ORklHVVJBVElPTl9USVRMRV9UQUJMRX1cIixcblx0XHRcdFx0XHRcdHJlc291cmNlTW9kZWwsXG5cdFx0XHRcdFx0XHRjb25maWdQYXRoLFxuXHRcdFx0XHRcdFx0XCJ7c2FwLmZlLmkxOG4+UlRBX0NPTkZJR1VSQVRJT05fSU5GT19NRVNTQUdFX1RBQkxFfVwiLFxuXHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHR3aWR0aDogXCI2NTBweFwiLFxuXHRcdFx0XHRcdFx0XHRoZWlnaHQ6IFwiODAwcHhcIlxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdCkudGhlbihmdW5jdGlvbiAocHJvcGVydHlWYWx1ZXNFbnRlcmVkOiBQcm9wZXJ0eVZhbHVlKTogYWRhcHRpb25DaGFuZ2VbXSB8IFtdIHtcblx0XHRcdFx0XHRcdGNvbnN0IHByb3BlcnR5UGF0aCA9IGdldFByb3BlcnR5UGF0aChjb250cm9sLmdldFBhcmVudCgpIGFzIFRhYmxlQVBJKTtcblx0XHRcdFx0XHRcdHJldHVybiBleHRyYWN0Q2hhbmdlcyhkZXNpZ250aW1lU2V0dGluZ3MsIHVuY2hhbmdlZERhdGEsIHByb3BlcnR5VmFsdWVzRW50ZXJlZCwgcHJvcGVydHlQYXRoLCBjb250cm9sKTtcblx0XHRcdFx0XHR9LCBub0NoYW5nZXMpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9LFxuXHQvLyBXZSBkaXNhYmxlIG1kYyB0YWJsZSBwcm9wZXJ0aWVzIGluIHRoZSBwcm9wZXJ0eSBwYW5lbCBvZiBGaW9yaSBUb29sc1xuXHRwcm9wZXJ0aWVzOiB7XG5cdFx0YnVzeUluZGljYXRvckRlbGF5OiB7IGlnbm9yZTogdHJ1ZSB9LFxuXHRcdGVuYWJsZUNvbHVtblJlc2l6ZTogeyBpZ25vcmU6IHRydWUgfSxcblx0XHRlbmFibGVFeHBvcnQ6IHsgaWdub3JlOiB0cnVlIH0sXG5cdFx0aGVhZGVyOiB7IGlnbm9yZTogdHJ1ZSB9LFxuXHRcdGhlYWRlckxldmVsOiB7IGlnbm9yZTogdHJ1ZSB9LFxuXHRcdGhlYWRlclZpc2libGU6IHsgaWdub3JlOiB0cnVlIH0sXG5cdFx0bXVsdGlTZWxlY3RNb2RlOiB7IGlnbm9yZTogdHJ1ZSB9LFxuXHRcdHNob3dQYXN0ZUJ1dHRvbjogeyBpZ25vcmU6IHRydWUgfSxcblx0XHRzaG93Um93Q291bnQ6IHsgaWdub3JlOiB0cnVlIH0sXG5cdFx0dGhyZXNob2xkOiB7IGlnbm9yZTogdHJ1ZSB9LFxuXHRcdHdpZHRoOiB7IGlnbm9yZTogdHJ1ZSB9XG5cdH0sXG5cdGFnZ3JlZ2F0aW9uczoge30sXG5cblx0Ly8gVGhlc2UgZnVuY3Rpb25zIHByb3ZpZGUgdGhlIHByb3BlcnRpZXMgdXNlZCBpbiB0YWJsZSBhZGFwdGlvbiB0byBGaW9yaSB0b29scy5cblx0bWFuaWZlc3RTZXR0aW5nczogZnVuY3Rpb24gKGNvbnRyb2w6IE1EQ1RhYmxlKTogRGVzaWdudGltZVNldHRpbmdbXSB7XG5cdFx0Y29uc3QgdGFibGUgPSBjb250cm9sLmdldFBhcmVudCgpIGFzIFRhYmxlQVBJO1xuXHRcdGNvbnN0IGRlc2lnbnRpbWVTZXR0aW5ncyA9IGdldERlc2lnbnRpbWVTZXR0aW5ncyh0YWJsZSkuZmlsdGVyKChpdGVtKSA9PiAhaXRlbXNUb1JlbW92ZS5pbmNsdWRlcyhpdGVtLmlkKSk7XG5cdFx0cmV0dXJuIGdldFByb3BlcnR5TmFtZXNBbmREZXNjcmlwdGlvbnMoZGVzaWdudGltZVNldHRpbmdzLCBjb250cm9sLmdldE1vZGVsKFwic2FwLmZlLmkxOG5cIikgYXMgUmVzb3VyY2VNb2RlbCk7XG5cdH0sXG5cdC8vIGdldEFkYXB0aW9uUHJvcGVydHlWYWx1ZVxuXHRtYW5pZmVzdFNldHRpbmdzVmFsdWVzOiBmdW5jdGlvbiAoZGVzaWdudGltZVNldHRpbmdzOiBEZXNpZ250aW1lU2V0dGluZ1tdLCBjb250cm9sOiBNRENUYWJsZSk6IFByb3BlcnR5VmFsdWUge1xuXHRcdGNvbnN0IHJldHVyblZhbHVlczogUHJvcGVydHlWYWx1ZSA9IHt9O1xuXHRcdGRlc2lnbnRpbWVTZXR0aW5ncy5mb3JFYWNoKGZ1bmN0aW9uIChzZXR0aW5nKSB7XG5cdFx0XHRsZXQgcHJvcGVydHlJbmRleDtcblx0XHRcdGlmIChzZXR0aW5nLnBhdGgpIHtcblx0XHRcdFx0cHJvcGVydHlJbmRleCA9IHNldHRpbmcucGF0aDtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHByb3BlcnR5SW5kZXggPSBzZXR0aW5nLmlkO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuVmFsdWVzW3Byb3BlcnR5SW5kZXhdID0gZ2V0QWRhcHRhdGlvblByb3BlcnR5VmFsdWUoY29udHJvbCwgc2V0dGluZyk7XG5cdFx0fSk7XG5cdFx0cmV0dXJuIHJldHVyblZhbHVlcztcblx0fSxcblx0Ly8gZ2V0IHBhdGggZm9yIGNvbnRyb2wgY29uZmlndXJhdGlvbi4gUGFzcyByZWZlcmVuY2UgdG8gdGhlIGNvbnRyb2xcblx0bWFuaWZlc3RQcm9wZXJ0eVBhdGg6IGZ1bmN0aW9uIChjb250cm9sOiBNRENUYWJsZSk6IHN0cmluZyB7XG5cdFx0Y29uc3QgdGFibGUgPSBjb250cm9sLmdldFBhcmVudCgpIGFzIFRhYmxlQVBJO1xuXHRcdHJldHVybiBnZXRQcm9wZXJ0eVBhdGgodGFibGUpO1xuXHR9LFxuXHQvLyBjcmVhdGUgY2hhbmdlIHN0cnVjdHVlLiBQYXNzIGFycmF5IG9mIG1hbmlmZXN0IHNldHRpbmcgYW5kIG5ldyB2YWx1ZSwgdGhlIHByb3BlcnR5IHBhdGggYW5kIHRoZSBjb250cm9sXG5cdG1hbmlmZXN0UHJvcGVydHlDaGFuZ2U6IGZ1bmN0aW9uIChwcm9wZXJ0eUNoYW5nZXM6IFByb3BlcnR5VmFsdWUsIHByb3BlcnR5UGF0aDogc3RyaW5nLCBjb250cm9sOiBNRENUYWJsZSk6IGFkYXB0aW9uQ2hhbmdlW10ge1xuXHRcdHJldHVybiBzZXBhcmF0ZUNoYW5nZXMocHJvcGVydHlDaGFuZ2VzLCBwcm9wZXJ0eVBhdGgsIGNvbnRyb2wpO1xuXHR9XG59O1xuXG5leHBvcnQgZGVmYXVsdCBkZXNpZ25UaW1lO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztFQUFBO0FBQ0E7QUFDQTtFQW9DQTtFQUNBO0VBQ0EsTUFBTUEsYUFBYSxHQUFHLENBQ3JCLGlCQUFpQixFQUNqQixxQkFBcUIsRUFDckIsdUJBQXVCLEVBQ3ZCLHVCQUF1QixFQUN2QixzQkFBc0IsRUFDdEIsMEJBQTBCLENBQzFCO0VBRU0sU0FBU0MsdUJBQXVCQSxDQUFDQyxrQkFBdUMsRUFBRUMsT0FBaUIsRUFBaUI7SUFDbEgsTUFBTUMsY0FBNkIsR0FBRyxDQUFDLENBQUM7SUFDeENGLGtCQUFrQixDQUFDRyxPQUFPLENBQUMsVUFBVUMsT0FBTyxFQUFFO01BQzdDRixjQUFjLENBQUNFLE9BQU8sQ0FBQ0MsRUFBRSxDQUFDLEdBQUdDLDBCQUEwQixDQUFDTCxPQUFPLEVBQUVHLE9BQU8sQ0FBQztJQUMxRSxDQUFDLENBQUM7SUFDRixPQUFPRixjQUFjO0VBQ3RCO0VBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBTEFLLFFBQUEsQ0FBQVIsdUJBQUEsR0FBQUEsdUJBQUE7RUFNQSxTQUFTTywwQkFBMEJBLENBQUNMLE9BQWlCLEVBQUVHLE9BQTBCLEVBQTZCO0lBQzdHLE1BQU1JLEtBQUssR0FBR1AsT0FBTyxDQUFDUSxTQUFTLENBQUMsQ0FBYTtJQUM3QyxNQUFNQyxlQUFlLEdBQUdGLEtBQUssQ0FBQ0csV0FBVyxDQUFDLGlCQUFpQixDQUFDO0lBQzVELElBQUlDLFdBQXNDLEdBQUcsRUFBRTtJQUUvQyxRQUFRUixPQUFPLENBQUNDLEVBQUU7TUFDakIsS0FBSyxlQUFlO1FBQ25CTyxXQUFXLEdBQUdGLGVBQWUsQ0FBQ0csYUFBYTtRQUMzQztNQUNELEtBQUssUUFBUTtRQUNaRCxXQUFXLEdBQUdGLGVBQWUsQ0FBQ0ksTUFBTTtRQUNwQztN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
@@ -19,6 +19,7 @@ import {
19
19
  getPropertyNamesAndDescriptions,
20
20
  getSettingsIfKeyUser,
21
21
  isConfigModelPrepared,
22
+ isManifestChangesEnabled,
22
23
  noChanges,
23
24
  openAdaptionDialog,
24
25
  prepareConfigModel,
@@ -207,6 +208,7 @@ const designTime = {
207
208
  fe: {
208
209
  name: getText("RTA_CONTEXT_ACTIONMENU_CONFIG"),
209
210
  icon: "sap-icon://developer-settings",
211
+ isEnabled: isManifestChangesEnabled,
210
212
  handler: async function (control: MDCTable): Promise<adaptionChange[]> {
211
213
  const tableAPI = control.getParent() as TableAPI;
212
214
  const designtimeSettings = getDesigntimeSettings(tableAPI);
@@ -2,7 +2,7 @@
2
2
  * SAP UI development toolkit for HTML5 (SAPUI5)
3
3
  * (c) Copyright 2009-2025 SAP SE. All rights reserved
4
4
  */
5
- sap.ui.define(["sap/base/Log", "sap/fe/core/CommonUtils", "sap/fe/core/controllerextensions/messageHandler/messageHandling", "sap/fe/core/converters/ManifestSettings", "sap/fe/core/helpers/PromiseKeeper", "sap/fe/core/helpers/StableIdHelper", "sap/fe/core/library", "sap/m/Button", "sap/m/Dialog", "sap/m/Label", "sap/m/MessageBox", "sap/m/MessageStrip", "sap/m/MessageToast", "sap/ui/core/Fragment", "sap/ui/core/Lib", "sap/ui/core/util/XMLPreprocessor", "sap/ui/layout/form/Form", "sap/ui/layout/form/FormContainer", "sap/ui/layout/form/FormElement", "sap/ui/layout/form/ResponsiveGridLayout", "sap/ui/model/json/JSONModel", "./MassEditField", "./MassEditSideEffects", "sap/fe/base/jsx-runtime/jsx", "sap/fe/base/jsx-runtime/Fragment", "sap/fe/base/jsx-runtime/jsxs"], function (Log, CommonUtils, messageHandling, ManifestSettings, PromiseKeeper, ID, FELibrary, Button, Dialog, Label, MessageBox, MessageStrip, MessageToast, Fragment, Library, XMLPreprocessor, Form, FormContainer, FormElement, ResponsiveGridLayout, JSONModel, MassEditField, MassEditSideEffects, _jsx, _Fragment, _jsxs) {
5
+ sap.ui.define(["sap/base/Log", "sap/fe/core/CommonUtils", "sap/fe/core/controllerextensions/messageHandler/messageHandling", "sap/fe/core/converters/ManifestSettings", "sap/fe/core/helpers/PromiseKeeper", "sap/fe/core/helpers/ResourceModelHelper", "sap/fe/core/helpers/StableIdHelper", "sap/fe/core/library", "sap/m/Button", "sap/m/Dialog", "sap/m/Label", "sap/m/MessageBox", "sap/m/MessageStrip", "sap/m/MessageToast", "sap/ui/core/Fragment", "sap/ui/core/Lib", "sap/ui/core/util/XMLPreprocessor", "sap/ui/layout/form/Form", "sap/ui/layout/form/FormContainer", "sap/ui/layout/form/FormElement", "sap/ui/layout/form/ResponsiveGridLayout", "sap/ui/model/json/JSONModel", "./MassEditField", "./MassEditSideEffects", "sap/fe/base/jsx-runtime/jsx", "sap/fe/base/jsx-runtime/Fragment", "sap/fe/base/jsx-runtime/jsxs"], function (Log, CommonUtils, messageHandling, ManifestSettings, PromiseKeeper, ResourceModelHelper, ID, FELibrary, Button, Dialog, Label, MessageBox, MessageStrip, MessageToast, Fragment, Library, XMLPreprocessor, Form, FormContainer, FormElement, ResponsiveGridLayout, JSONModel, MassEditField, MassEditSideEffects, _jsx, _Fragment, _jsxs) {
6
6
  "use strict";
7
7
 
8
8
  var _exports = {};
@@ -26,7 +26,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/CommonUtils", "sap/fe/core/controlle
26
26
  this.view = CommonUtils.getTargetView(this.table);
27
27
  this.transientListBinding = this.generateListBinding();
28
28
  this.bindingContext = this.transientListBinding.create({}, true);
29
- this.resourceBundle = Library.getResourceBundleFor("sap.fe.macros");
29
+ this.resourceModel = ResourceModelHelper.getResourceModel(this.table);
30
30
  this.contextsOnError = [];
31
31
  this.fieldControls = [];
32
32
  }
@@ -55,7 +55,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/CommonUtils", "sap/fe/core/controlle
55
55
  _proto.create = async function create() {
56
56
  if (!this.dialog) {
57
57
  const coreResourceBundle = Library.getResourceBundleFor("sap.fe.core");
58
- const applyButtonText = this.view.getViewData().converterType === "ListReport" ? this.resourceBundle.getText("C_MASS_EDIT_SAVE_BUTTON_TEXT") : coreResourceBundle.getText("C_COMMON_DIALOG_OK");
58
+ const applyButtonText = this.view.getViewData().converterType === "ListReport" ? this.resourceModel.getText("C_MASS_EDIT_SAVE_BUTTON_TEXT") : coreResourceBundle.getText("C_COMMON_DIALOG_OK");
59
59
  const dialogContent = await this.createContent();
60
60
  const dialog = _jsx(Dialog, {
61
61
  "dt:designtime": "sap/fe/macros/table/massEdit/designtime/MassEdit.designtime",
@@ -63,7 +63,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/CommonUtils", "sap/fe/core/controlle
63
63
  contentWidth: "27rem",
64
64
  class: "sapUiContentPadding",
65
65
  horizontalScrolling: "false",
66
- title: this.resourceBundle.getText("C_MASS_EDIT_DIALOG_TITLE", [this.contexts.length.toString()]),
66
+ title: this.resourceModel.getText("C_MASS_EDIT_DIALOG_TITLE", [this.contexts.length.toString()]),
67
67
  content: dialogContent,
68
68
  escapeHandler: this.onClose.bind(this),
69
69
  beforeOpen: this.beforeOpen.bind(this),
@@ -144,12 +144,12 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/CommonUtils", "sap/fe/core/controlle
144
144
  //There is at least one new value set
145
145
  controller.editFlow.setDraftStatus(DraftStatus.Saved);
146
146
  if (this.view.getViewData().converterType === "ListReport") {
147
- MessageToast.show(this.resourceBundle.getText("C_MASS_EDIT_SUCCESS_TOAST"));
147
+ MessageToast.show(this.resourceModel.getText("C_MASS_EDIT_SUCCESS_TOAST"));
148
148
  } else {
149
- MessageToast.show(this.resourceBundle.getText("C_OBJECT_PAGE_MASS_EDIT_SUCCESS_TOAST"));
149
+ MessageToast.show(this.resourceModel.getText("C_OBJECT_PAGE_MASS_EDIT_SUCCESS_TOAST"));
150
150
  }
151
151
  } else {
152
- MessageToast.show(this.resourceBundle.getText("C_MASS_EDIT_NO_CHANGE"));
152
+ MessageToast.show(this.resourceModel.getText("C_MASS_EDIT_NO_CHANGE"));
153
153
  }
154
154
  } else if (this.contextsOnError.length < this.contexts.length) {
155
155
  controller.editFlow.setDraftStatus(DraftStatus.Saved);
@@ -165,7 +165,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/CommonUtils", "sap/fe/core/controlle
165
165
  });
166
166
  if (!!this.contextsOnError.length && this.contextsOnError.length < this.contexts.length) {
167
167
  const confirmButtonTxt = coreResourceBundle.getText("C_COMMON_DIALOG_OK");
168
- MessageBox.success(this.resourceBundle.getText("C_MASS_EDIT_CHANGES_WITH_ERROR", [this.contexts.length - this.contextsOnError.length, this.contexts.length]), {
168
+ MessageBox.success(this.resourceModel.getText("C_MASS_EDIT_CHANGES_WITH_ERROR", [this.contexts.length - this.contextsOnError.length, this.contexts.length]), {
169
169
  actions: [confirmButtonTxt],
170
170
  emphasizedAction: confirmButtonTxt
171
171
  });
@@ -332,7 +332,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/CommonUtils", "sap/fe/core/controlle
332
332
  _proto.getAdaptationMessage = function getAdaptationMessage() {
333
333
  if (this.isAdaptation) {
334
334
  return _jsx(MessageStrip, {
335
- text: this.resourceBundle.getText("C_MASS_EDIT_ADAPTATION_MODE")
335
+ text: this.resourceModel.getText("C_MASS_EDIT_ADAPTATION_MODE")
336
336
  });
337
337
  }
338
338
  return undefined;
@@ -413,4 +413,4 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/CommonUtils", "sap/fe/core/controlle
413
413
  _exports = MassEditDialog;
414
414
  return _exports;
415
415
  }, false);
416
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJNYXNzRWRpdERpYWxvZyIsInByb3BzIiwicmVxdWlyZWREYXRhUHJvbWlzZSIsIlByb21pc2VLZWVwZXIiLCJ1cGRhdGVkUHJvcGVydGllcyIsIlNldCIsImRpYWxvZyIsInVuZGVmaW5lZCIsInRhYmxlIiwiY29udGV4dHMiLCJpc0FkYXB0YXRpb24iLCJDb21tb25VdGlscyIsImdldEFwcENvbXBvbmVudCIsImlzQWRhcHRhdGlvbk1vZGUiLCJmaWVsZFByb3BlcnRpZXMiLCJ2aWV3IiwiZ2V0VGFyZ2V0VmlldyIsInRyYW5zaWVudExpc3RCaW5kaW5nIiwiZ2VuZXJhdGVMaXN0QmluZGluZyIsImJpbmRpbmdDb250ZXh0IiwiY3JlYXRlIiwicmVzb3VyY2VCdW5kbGUiLCJMaWJyYXJ5IiwiZ2V0UmVzb3VyY2VCdW5kbGVGb3IiLCJjb250ZXh0c09uRXJyb3IiLCJmaWVsZENvbnRyb2xzIiwiX2V4cG9ydHMiLCJfcHJvdG8iLCJwcm90b3R5cGUiLCJsaXN0QmluZGluZyIsImdldFJvd0JpbmRpbmciLCJnZXRNb2RlbCIsImJpbmRMaXN0IiwiZ2V0UGF0aCIsImdldENvbnRleHQiLCIkJHVwZGF0ZUdyb3VwSWQiLCJyZWZyZXNoSW50ZXJuYWwiLCJjb3JlUmVzb3VyY2VCdW5kbGUiLCJhcHBseUJ1dHRvblRleHQiLCJnZXRWaWV3RGF0YSIsImNvbnZlcnRlclR5cGUiLCJnZXRUZXh0IiwiZGlhbG9nQ29udGVudCIsImNyZWF0ZUNvbnRlbnQiLCJfanN4IiwiRGlhbG9nIiwiaWQiLCJJRCIsImdlbmVyYXRlIiwiZ2V0SWQiLCJjb250ZW50V2lkdGgiLCJjbGFzcyIsImhvcml6b250YWxTY3JvbGxpbmciLCJ0aXRsZSIsImxlbmd0aCIsInRvU3RyaW5nIiwiY29udGVudCIsImVzY2FwZUhhbmRsZXIiLCJvbkNsb3NlIiwiYmluZCIsImJlZm9yZU9wZW4iLCJiZWdpbkJ1dHRvbiIsIkJ1dHRvbiIsInRleHQiLCJ0eXBlIiwicHJlc3MiLCJvbkFwcGx5IiwiZW5kQnV0dG9uIiwic2V0TW9kZWwiLCJKU09OTW9kZWwiLCJpc0VkaXRhYmxlIiwiYmluZEVsZW1lbnQiLCJwYXRoIiwibW9kZWwiLCJldmVudCIsImdldFNvdXJjZSIsInNldEJpbmRpbmdDb250ZXh0IiwiYWRkRGVwZW5kZW50IiwiZGVzdHJveSIsImNsb3NlIiwiZ2V0UmVxdWlyZWREYXRhUHJvbWlzZSIsIm1hbmFnZU1lc3NhZ2UiLCJjb250cm9sbGVyIiwiZ2V0Q29udHJvbGxlciIsIkRyYWZ0U3RhdHVzIiwiRkVMaWJyYXJ5IiwiaW50ZXJuYWxNb2RlbENvbnRleHQiLCJnZXRCaW5kaW5nQ29udGV4dCIsInNldFByb3BlcnR5IiwibWVzc2FnZUhhbmRsZXIiLCJzaG93TWVzc2FnZXMiLCJvbkJlZm9yZVNob3dNZXNzYWdlIiwibWVzc2FnZXMiLCJzaG93TWVzc2FnZVBhcmFtZXRlcnMiLCJmbkdldE1lc3NhZ2VTdWJ0aXRsZSIsIm1lc3NhZ2VIYW5kbGluZyIsInNldE1lc3NhZ2VTdWJ0aXRsZSIsInNpemUiLCJlZGl0RmxvdyIsInNldERyYWZ0U3RhdHVzIiwiU2F2ZWQiLCJNZXNzYWdlVG9hc3QiLCJzaG93IiwiQ2xlYXIiLCJnZXRJc0VkaXRhYmxlIiwic29tZSIsIm1lc3NhZ2UiLCJnZXRUYXJnZXRzIiwic2hvd01lc3NhZ2VCb3giLCJzaG93TWVzc2FnZURpYWxvZyIsImNvbmZpcm1CdXR0b25UeHQiLCJNZXNzYWdlQm94Iiwic3VjY2VzcyIsImFjdGlvbnMiLCJlbXBoYXNpemVkQWN0aW9uIiwic2F2ZUNoYW5nZXMiLCJmaWVsZFZhbHVlc0luZm8iLCJtYW5pZmVzdFNldHRpbmdzIiwiZ2V0UGFyZW50IiwiZ2V0VGFibGVEZWZpbml0aW9uIiwiY29udHJvbCIsIm1hc3NFZGl0IiwiaXNJc29sYXRlZCIsIm9wZXJhdGlvbkdyb3VwaW5nTW9kZSIsIk9wZXJhdGlvbkdyb3VwaW5nTW9kZSIsIklzb2xhdGVkIiwiaXNvbGF0ZWRHcm91cElkIiwibWFzc0VkaXRTaWRlRWZmZWN0cyIsIk1hc3NFZGl0U2lkZUVmZmVjdHMiLCJmaWVsZFByb21pc2VzIiwic2V0Q29udGludWVPbkVycm9yIiwiZm9yRWFjaCIsInNlbGVjdGVkQ29udGV4dCIsImltbWVkaWF0ZVNpZGVFZmZlY3RzIiwicmVmcmVzaERlc2NyaXB0aW9ucyIsInZhbHVlcyIsImZpZWxkQ29udHJvbFJlZmVyZW5jZSIsInZhbHVlSGFzQ2hhbmdlZCIsImlzUmVhZE9ubHlPbkNvbnRleHQiLCJncm91cElkIiwicHJvcGVydHlQYXRoIiwiZ2V0UHJvcGVydHkiLCJwdXNoIiwidGhlbiIsImFkZCIsImNhdGNoIiwiZXJyb3IiLCJMb2ciLCJtYXAiLCJpbW1lZGlhdGVTaWRlRWZmZWN0IiwiZXhlY3V0ZUltbWVkaWF0ZVNpZGVFZmZlY3RzIiwicmVmcmVzaERlc2NyaXB0aW9uIiwic3VibWl0QmF0Y2giLCJQcm9taXNlIiwiYWxsU2V0dGxlZCIsImV4ZWN1dGVEZWZlcnJlZFNpZGVFZmZlY3RzIiwiQXJyYXkiLCJmcm9tIiwiZ2V0RmllbGRWYWx1ZXNJbmZvcyIsInJlc3VsdCIsImZpZWxkQ29udHJvbCIsImZpZWxkVmFsdWVzIiwiZ2V0RmllbGRWYWx1ZXMiLCJhcHBseUNoYW5nZXMiLCJwcm9taXNlIiwiZmllbGRzVmFsdWVzSW5mbyIsImN1c3RvbVNhdmUiLCJjdXN0b21NYXNzRWRpdFNhdmUiLCJhQ29udGV4dHMiLCJvVXBkYXRlRGF0YSIsImlzRmllbGRWYWxpZCIsInJlbW92ZUJvdW5kVHJhbnNpdGlvbk1lc3NhZ2VzIiwicmVtb3ZlVW5ib3VuZFRyYW5zaXRpb25NZXNzYWdlcyIsImlzQ3VzdG9tU2F2ZSIsImN1c3RvbUZvcm1Db250YWluZXIiLCJjcmVhdGVDdXN0b21Db250YWluZXIiLCJfanN4cyIsIl9GcmFnbWVudCIsImNoaWxkcmVuIiwiZ2V0QWRhcHRhdGlvbk1lc3NhZ2UiLCJGb3JtIiwibGF5b3V0IiwiUmVzcG9uc2l2ZUdyaWRMYXlvdXQiLCJsYWJlbFNwYW5NIiwibGFiZWxTcGFuTCIsImxhYmVsU3BhblhMIiwiZm9ybUNvbnRhaW5lcnMiLCJGb3JtQ29udGFpbmVyIiwiZm9ybUVsZW1lbnRzIiwiY3JlYXRlRm9ybUVsZW1lbnRzIiwiTWVzc2FnZVN0cmlwIiwiY3VzdG9tRnJhZ21lbnQiLCJmcm9tSW5saW5lIiwicmVzdWx0WE1MIiwiWE1MUHJlcHJvY2Vzc29yIiwicHJvY2VzcyIsIkRPTVBhcnNlciIsInBhcnNlRnJvbVN0cmluZyIsImZpcnN0RWxlbWVudENoaWxkIiwibW9kZWxzIiwiZ2V0T3duZXJDb21wb25lbnQiLCJnZXRQcmVwcm9jZXNzb3JDb250ZXh0IiwiRnJhZ21lbnQiLCJsb2FkIiwiZGVmaW5pdGlvbiIsImNsb25lIiwiZ2V0RXh0ZW5zaW9uQVBJIiwibG9hZEZyYWdtZW50IiwibmFtZSIsImNvbnRleHRQYXRoIiwiZ2V0TWV0YU1vZGVsIiwiZ2V0TWV0YVBhdGgiLCJnZXRSZXNvbHZlZFBhdGgiLCJjcmVhdGVGb3JtRWxlbWVudCIsImZpZWxkSW5mbyIsIkZvcm1FbGVtZW50IiwidmlzaWJsZSIsImxhYmVsIiwiTGFiZWwiLCJwcm9wZXJ0eUluZm8iLCJrZXkiLCJmaWVsZHMiLCJjcmVhdGVGaWVsZHMiLCJtZXRhTW9kZWwiLCJjb250ZXh0IiwiY3JlYXRlQmluZGluZ0NvbnRleHQiLCJtYXNzRWRpdEZpZWxkIiwiTWFzc0VkaXRGaWVsZCIsImdldENvbnRyb2xzIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJNYXNzRWRpdERpYWxvZy50c3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBQcmltaXRpdmVUeXBlIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzXCI7XG5pbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCB0eXBlIFJlc291cmNlQnVuZGxlIGZyb20gXCJzYXAvYmFzZS9pMThuL1Jlc291cmNlQnVuZGxlXCI7XG5pbXBvcnQgdHlwZSB7IEVuaGFuY2VXaXRoVUk1IH0gZnJvbSBcInNhcC9mZS9iYXNlL0NsYXNzU3VwcG9ydFwiO1xuaW1wb3J0IHR5cGUgeyBGRVZpZXcgfSBmcm9tIFwic2FwL2ZlL2NvcmUvQmFzZUNvbnRyb2xsZXJcIjtcbmltcG9ydCBDb21tb25VdGlscyBmcm9tIFwic2FwL2ZlL2NvcmUvQ29tbW9uVXRpbHNcIjtcbmltcG9ydCB0eXBlIFRlbXBsYXRlQ29tcG9uZW50IGZyb20gXCJzYXAvZmUvY29yZS9UZW1wbGF0ZUNvbXBvbmVudFwiO1xuaW1wb3J0IG1lc3NhZ2VIYW5kbGluZyBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvbWVzc2FnZUhhbmRsZXIvbWVzc2FnZUhhbmRsaW5nXCI7XG5pbXBvcnQgeyBPcGVyYXRpb25Hcm91cGluZ01vZGUgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9NYW5pZmVzdFNldHRpbmdzXCI7XG5pbXBvcnQgUHJvbWlzZUtlZXBlciBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9Qcm9taXNlS2VlcGVyXCI7XG5pbXBvcnQgKiBhcyBJRCBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9TdGFibGVJZEhlbHBlclwiO1xuaW1wb3J0IEZFTGlicmFyeSBmcm9tIFwic2FwL2ZlL2NvcmUvbGlicmFyeVwiO1xuaW1wb3J0IHR5cGUgeyBTaWRlRWZmZWN0c0VudGl0eVR5cGUsIFNpZGVFZmZlY3RzVGFyZ2V0LCBTaWRlRWZmZWN0c1R5cGUgfSBmcm9tIFwic2FwL2ZlL2NvcmUvc2VydmljZXMvU2lkZUVmZmVjdHNTZXJ2aWNlRmFjdG9yeVwiO1xuaW1wb3J0IHR5cGUgVGFibGVBUEkgZnJvbSBcInNhcC9mZS9tYWNyb3MvdGFibGUvVGFibGVBUElcIjtcbmltcG9ydCBCdXR0b24gZnJvbSBcInNhcC9tL0J1dHRvblwiO1xuaW1wb3J0IERpYWxvZyBmcm9tIFwic2FwL20vRGlhbG9nXCI7XG5pbXBvcnQgTGFiZWwgZnJvbSBcInNhcC9tL0xhYmVsXCI7XG5pbXBvcnQgTWVzc2FnZUJveCBmcm9tIFwic2FwL20vTWVzc2FnZUJveFwiO1xuaW1wb3J0IE1lc3NhZ2VTdHJpcCBmcm9tIFwic2FwL20vTWVzc2FnZVN0cmlwXCI7XG5pbXBvcnQgTWVzc2FnZVRvYXN0IGZyb20gXCJzYXAvbS9NZXNzYWdlVG9hc3RcIjtcbmltcG9ydCB0eXBlIFVJNUV2ZW50IGZyb20gXCJzYXAvdWkvYmFzZS9FdmVudFwiO1xuaW1wb3J0IHR5cGUgQ29udHJvbCBmcm9tIFwic2FwL3VpL2NvcmUvQ29udHJvbFwiO1xuaW1wb3J0IEZyYWdtZW50IGZyb20gXCJzYXAvdWkvY29yZS9GcmFnbWVudFwiO1xuaW1wb3J0IExpYnJhcnkgZnJvbSBcInNhcC91aS9jb3JlL0xpYlwiO1xuaW1wb3J0IHR5cGUgTWVzc2FnZSBmcm9tIFwic2FwL3VpL2NvcmUvbWVzc2FnZS9NZXNzYWdlXCI7XG5pbXBvcnQgWE1MUHJlcHJvY2Vzc29yIGZyb20gXCJzYXAvdWkvY29yZS91dGlsL1hNTFByZXByb2Nlc3NvclwiO1xuaW1wb3J0IEZvcm0gZnJvbSBcInNhcC91aS9sYXlvdXQvZm9ybS9Gb3JtXCI7XG5pbXBvcnQgRm9ybUNvbnRhaW5lciBmcm9tIFwic2FwL3VpL2xheW91dC9mb3JtL0Zvcm1Db250YWluZXJcIjtcbmltcG9ydCBGb3JtRWxlbWVudCBmcm9tIFwic2FwL3VpL2xheW91dC9mb3JtL0Zvcm1FbGVtZW50XCI7XG5pbXBvcnQgUmVzcG9uc2l2ZUdyaWRMYXlvdXQgZnJvbSBcInNhcC91aS9sYXlvdXQvZm9ybS9SZXNwb25zaXZlR3JpZExheW91dFwiO1xuaW1wb3J0IHR5cGUgVGFibGUgZnJvbSBcInNhcC91aS9tZGMvVGFibGVcIjtcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9Db250ZXh0XCI7XG5pbXBvcnQgSlNPTk1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvanNvbi9KU09OTW9kZWxcIjtcbmltcG9ydCB0eXBlIE9EYXRhVjRDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvQ29udGV4dFwiO1xuaW1wb3J0IHR5cGUgT0RhdGFMaXN0QmluZGluZyBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTGlzdEJpbmRpbmdcIjtcbmltcG9ydCB0eXBlIE9EYXRhTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YU1vZGVsXCI7XG5pbXBvcnQgTWFzc0VkaXRGaWVsZCBmcm9tIFwiLi9NYXNzRWRpdEZpZWxkXCI7XG5pbXBvcnQgTWFzc0VkaXRTaWRlRWZmZWN0cyBmcm9tIFwiLi9NYXNzRWRpdFNpZGVFZmZlY3RzXCI7XG5pbXBvcnQgdHlwZSB7IE1hc3NGaWVsZFByb3BlcnRpZXMgfSBmcm9tIFwiLi9saWJyYXJ5XCI7XG5cbnR5cGUgTWFzc0VkaXRTaWRlRWZmZWN0c1Byb3BlcnRpZXMgPSB7XG5cdHNpZGVFZmZlY3RzOiBTaWRlRWZmZWN0c1R5cGU7XG5cdHRhYmxlUmVmcmVzaDoge1xuXHRcdGlzUmVxdWVzdGVkOiBib29sZWFuO1xuXHRcdHRhcmdldEVudGl0eT86IFNpZGVFZmZlY3RzRW50aXR5VHlwZTtcblx0fTtcblx0aW1tZWRpYXRlOiB7IHRhcmdldHM6IFNpZGVFZmZlY3RzVGFyZ2V0W107IHRyaWdnZXJBY3Rpb246IHN0cmluZyB8IHVuZGVmaW5lZCB9O1xuXHRkZWZlcnJlZDogeyB0YXJnZXRzOiBTaWRlRWZmZWN0c1RhcmdldFtdOyB0cmlnZ2VyQWN0aW9uOiBzdHJpbmcgfCB1bmRlZmluZWQgfTtcbn07XG5cbnR5cGUgRmllbGRWYWx1ZXNJbmZvID0ge1xuXHR2YWx1ZXM6IFJlY29yZDxzdHJpbmcsIFByaW1pdGl2ZVR5cGU+O1xuXHRmaWVsZENvbnRyb2xSZWZlcmVuY2U6IHsgY29udHJvbDogTWFzc0VkaXRGaWVsZDsgdmFsdWVzOiBSZWNvcmQ8c3RyaW5nLCBQcmltaXRpdmVUeXBlPiB9W107XG59O1xuXG5leHBvcnQgdHlwZSBNYXNzRWRpdFNpZGVFZmZlY3RzRXhlY3V0aW9uUHJvcGVydGllcyA9IE1hc3NFZGl0U2lkZUVmZmVjdHNQcm9wZXJ0aWVzICYgeyBvblJvd0NvbnRleHQ6IGJvb2xlYW4gfTtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTWFzc0VkaXREaWFsb2cge1xuXHRwcml2YXRlIHJlYWRvbmx5IHJlcXVpcmVkRGF0YVByb21pc2UgPSBuZXcgUHJvbWlzZUtlZXBlcjx2b2lkPigpO1xuXG5cdHByaXZhdGUgZGlhbG9nOiBEaWFsb2cgfCB1bmRlZmluZWQ7XG5cblx0cHVibGljIHJlYWRvbmx5IHRhYmxlOiBUYWJsZTtcblxuXHRwdWJsaWMgcmVhZG9ubHkgZmllbGRQcm9wZXJ0aWVzOiBNYXNzRmllbGRQcm9wZXJ0aWVzW107XG5cblx0cHJpdmF0ZSByZWFkb25seSB2aWV3OiBGRVZpZXc7XG5cblx0cHVibGljIHJlYWRvbmx5IGNvbnRleHRzOiBPRGF0YVY0Q29udGV4dFtdO1xuXG5cdHByaXZhdGUgcmVhZG9ubHkgY29udGV4dHNPbkVycm9yOiBPRGF0YVY0Q29udGV4dFtdO1xuXG5cdHByaXZhdGUgcmVhZG9ubHkgdXBkYXRlZFByb3BlcnRpZXM6IFNldDxzdHJpbmc+ID0gbmV3IFNldCgpO1xuXG5cdHByaXZhdGUgcmVhZG9ubHkgcmVzb3VyY2VCdW5kbGU6IFJlc291cmNlQnVuZGxlO1xuXG5cdHB1YmxpYyByZWFkb25seSBiaW5kaW5nQ29udGV4dDogT0RhdGFWNENvbnRleHQ7XG5cblx0cHVibGljIHJlYWRvbmx5IHRyYW5zaWVudExpc3RCaW5kaW5nOiBPRGF0YUxpc3RCaW5kaW5nO1xuXG5cdHByaXZhdGUgcmVhZG9ubHkgZmllbGRDb250cm9sczogTWFzc0VkaXRGaWVsZFtdO1xuXG5cdHByaXZhdGUgcmVhZG9ubHkgaXNBZGFwdGF0aW9uOiBib29sZWFuO1xuXG5cdC8qKlxuXHQgKiBDb25zdHJ1Y3RvciBvZiB0aGUgTWFzc0VkaXQgZGlhbG9nLlxuXHQgKiBAcGFyYW0gcHJvcHMgQ29udGFpbnMgdGhlIGZvbGxvd2luZyBhdHRyaWJ1dGVzXG5cdCAqIEBwYXJhbSBwcm9wcy50YWJsZSBUaGUgdGFibGUgd2hlcmUgdGhlIGNoYW5nZXMgbmVlZCB0byBiZSBhcHBsaWVkXG5cdCAqIEBwYXJhbSBwcm9wcy5jb250ZXh0cyBUaGUgcm93IGNvbnRleHRzIHdoZXJlIHRoZSBjaGFuZ2VzIG5lZWQgdG8gYmUgYXBwbGllZFxuXHQgKiBAcGFyYW0gcHJvcHMuZmllbGRQcm9wZXJ0aWVzIFRoZSBwcm9wZXJ0aWVzIG90IHRoZSBmaWVsZHNcblx0ICovXG5cdGNvbnN0cnVjdG9yKHByb3BzOiB7IHRhYmxlOiBUYWJsZTsgY29udGV4dHM6IE9EYXRhVjRDb250ZXh0W107IGZpZWxkUHJvcGVydGllczogTWFzc0ZpZWxkUHJvcGVydGllc1tdIH0pIHtcblx0XHR0aGlzLmRpYWxvZyA9IHVuZGVmaW5lZDtcblx0XHR0aGlzLnRhYmxlID0gcHJvcHMudGFibGU7XG5cdFx0dGhpcy5jb250ZXh0cyA9IHByb3BzLmNvbnRleHRzO1xuXHRcdHRoaXMuaXNBZGFwdGF0aW9uID0gQ29tbW9uVXRpbHMuZ2V0QXBwQ29tcG9uZW50KHRoaXMudGFibGUpLmlzQWRhcHRhdGlvbk1vZGUoKTtcblx0XHR0aGlzLmZpZWxkUHJvcGVydGllcyA9IHByb3BzLmZpZWxkUHJvcGVydGllcztcblx0XHR0aGlzLnZpZXcgPSBDb21tb25VdGlscy5nZXRUYXJnZXRWaWV3KHRoaXMudGFibGUpO1xuXHRcdHRoaXMudHJhbnNpZW50TGlzdEJpbmRpbmcgPSB0aGlzLmdlbmVyYXRlTGlzdEJpbmRpbmcoKTtcblx0XHR0aGlzLmJpbmRpbmdDb250ZXh0ID0gdGhpcy50cmFuc2llbnRMaXN0QmluZGluZy5jcmVhdGUoe30sIHRydWUpO1xuXG5cdFx0dGhpcy5yZXNvdXJjZUJ1bmRsZSA9IExpYnJhcnkuZ2V0UmVzb3VyY2VCdW5kbGVGb3IoXCJzYXAuZmUubWFjcm9zXCIpIGFzIFJlc291cmNlQnVuZGxlO1xuXHRcdHRoaXMuY29udGV4dHNPbkVycm9yID0gW107XG5cdFx0dGhpcy5maWVsZENvbnRyb2xzID0gW107XG5cdH1cblxuXHQvKipcblx0ICogQ3JlYXRlcyB0aGUgY29udGV4dCBmb3IgdGhlIGRpYWxvZy5cblx0ICogQHJldHVybnMgVGhlIGNvbnRleHQuXG5cdCAqL1xuXHRwcml2YXRlIGdlbmVyYXRlTGlzdEJpbmRpbmcoKTogT0RhdGFMaXN0QmluZGluZyB7XG5cdFx0Y29uc3QgbGlzdEJpbmRpbmcgPSB0aGlzLnRhYmxlLmdldFJvd0JpbmRpbmcoKTtcblx0XHRjb25zdCB0cmFuc2llbnRMaXN0QmluZGluZyA9ICh0aGlzLnRhYmxlLmdldE1vZGVsKCkgYXMgT0RhdGFNb2RlbCkuYmluZExpc3QoXG5cdFx0XHRsaXN0QmluZGluZy5nZXRQYXRoKCksXG5cdFx0XHRsaXN0QmluZGluZy5nZXRDb250ZXh0KCksXG5cdFx0XHRbXSxcblx0XHRcdFtdLFxuXHRcdFx0e1xuXHRcdFx0XHQkJHVwZGF0ZUdyb3VwSWQ6IFwic3VibWl0TGF0ZXJcIlxuXHRcdFx0fVxuXHRcdCk7XG5cdFx0dHJhbnNpZW50TGlzdEJpbmRpbmcucmVmcmVzaEludGVybmFsID0gKCk6IHZvaWQgPT4ge1xuXHRcdFx0LyogKi9cblx0XHR9O1xuXHRcdHJldHVybiB0cmFuc2llbnRMaXN0QmluZGluZztcblx0fVxuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIHRoZSBkaWFsb2cuXG5cdCAqIEByZXR1cm5zIFRoZSBpbnN0YW5jZSBvZiBkaWFsb2cuXG5cdCAqL1xuXHRhc3luYyBjcmVhdGUoKTogUHJvbWlzZTxEaWFsb2c+IHtcblx0XHRpZiAoIXRoaXMuZGlhbG9nKSB7XG5cdFx0XHRjb25zdCBjb3JlUmVzb3VyY2VCdW5kbGUgPSBMaWJyYXJ5LmdldFJlc291cmNlQnVuZGxlRm9yKFwic2FwLmZlLmNvcmVcIikgYXMgUmVzb3VyY2VCdW5kbGU7XG5cdFx0XHRjb25zdCBhcHBseUJ1dHRvblRleHQgPVxuXHRcdFx0XHR0aGlzLnZpZXcuZ2V0Vmlld0RhdGEoKS5jb252ZXJ0ZXJUeXBlID09PSBcIkxpc3RSZXBvcnRcIlxuXHRcdFx0XHRcdD8gdGhpcy5yZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19NQVNTX0VESVRfU0FWRV9CVVRUT05fVEVYVFwiKVxuXHRcdFx0XHRcdDogY29yZVJlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX0NPTU1PTl9ESUFMT0dfT0tcIik7XG5cdFx0XHRjb25zdCBkaWFsb2dDb250ZW50ID0gYXdhaXQgdGhpcy5jcmVhdGVDb250ZW50KCk7XG5cdFx0XHRjb25zdCBkaWFsb2cgPSAoXG5cdFx0XHRcdDxEaWFsb2dcblx0XHRcdFx0XHRkdDpkZXNpZ250aW1lPVwic2FwL2ZlL21hY3Jvcy90YWJsZS9tYXNzRWRpdC9kZXNpZ250aW1lL01hc3NFZGl0LmRlc2lnbnRpbWVcIlxuXHRcdFx0XHRcdGlkPXtJRC5nZW5lcmF0ZShbdGhpcy50YWJsZS5nZXRJZCgpLCBcIk1FRF9cIiwgXCJEaWFsb2dcIl0pfVxuXHRcdFx0XHRcdGNvbnRlbnRXaWR0aD1cIjI3cmVtXCJcblx0XHRcdFx0XHRjbGFzcz1cInNhcFVpQ29udGVudFBhZGRpbmdcIlxuXHRcdFx0XHRcdGhvcml6b250YWxTY3JvbGxpbmc9XCJmYWxzZVwiXG5cdFx0XHRcdFx0dGl0bGU9e3RoaXMucmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfTUFTU19FRElUX0RJQUxPR19USVRMRVwiLCBbdGhpcy5jb250ZXh0cy5sZW5ndGgudG9TdHJpbmcoKV0pfVxuXHRcdFx0XHRcdGNvbnRlbnQ9e2RpYWxvZ0NvbnRlbnR9XG5cdFx0XHRcdFx0ZXNjYXBlSGFuZGxlcj17dGhpcy5vbkNsb3NlLmJpbmQodGhpcyl9XG5cdFx0XHRcdFx0YmVmb3JlT3Blbj17dGhpcy5iZWZvcmVPcGVuLmJpbmQodGhpcyl9XG5cdFx0XHRcdFx0YmVnaW5CdXR0b249ezxCdXR0b24gdGV4dD17YXBwbHlCdXR0b25UZXh0fSB0eXBlPVwiRW1waGFzaXplZFwiIHByZXNzPXt0aGlzLm9uQXBwbHkuYmluZCh0aGlzKX0gLz59XG5cdFx0XHRcdFx0ZW5kQnV0dG9uPXs8QnV0dG9uIHRleHQ9e2NvcmVSZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19DT01NT05fT0JKRUNUX1BBR0VfQ0FOQ0VMXCIpfSBwcmVzcz17dGhpcy5vbkNsb3NlLmJpbmQodGhpcyl9IC8+fVxuXHRcdFx0XHQvPlxuXHRcdFx0KTtcblx0XHRcdHRoaXMuZGlhbG9nID0gZGlhbG9nO1xuXHRcdFx0Ly8gV2UgZG9uJ3Qgd2FudCB0byBpbmhlcml0IGZyb20gdGhlIFBhZ2VDb21wb25lbnQgZm9yIHRoZSB1aSBtb2RlbCAtPiBpbnRvIHRoaXMgZGlhbG9nLCBmaWVsZHMgYXJlIGVkaXRhYmxlXG5cdFx0XHRkaWFsb2cuc2V0TW9kZWwobmV3IEpTT05Nb2RlbCh7IGlzRWRpdGFibGU6IHRydWUgfSksIFwidWlcIik7XG5cdFx0XHRkaWFsb2cuYmluZEVsZW1lbnQoe1xuXHRcdFx0XHRwYXRoOiBcIi9cIixcblx0XHRcdFx0bW9kZWw6IFwidWlcIlxuXHRcdFx0fSk7XG5cdFx0XHRyZXR1cm4gZGlhbG9nO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcy5kaWFsb2c7XG5cdH1cblxuXHQvKipcblx0ICogU2V0cyB0aGUgbGFzdCBjb25maWd1cmF0aW9uIGJlZm9yZSBvcGVuaW5nIHRoZSBkaWFsb2c6XG5cdCAqICAtIHNldCB0aGUgcnVudGltZSBtb2RlbFxuXHQgKiAgLSBzZXQgdGhlIE9kYXRhTW9kZWxcblx0ICogIC0gYWRkIHRoZSBkaWFsb2cgYXMgZGVwZW5kZW50IG9mIHRoZSB0YWJsZS5cblx0ICogQHBhcmFtIGV2ZW50IFRoZSB1aTUgZXZlbnRcblx0ICovXG5cdHByaXZhdGUgYmVmb3JlT3BlbihldmVudDogVUk1RXZlbnQ8e30sIERpYWxvZz4pOiB2b2lkIHtcblx0XHRjb25zdCBkaWFsb2cgPSBldmVudC5nZXRTb3VyY2UoKTtcblx0XHRkaWFsb2cuc2V0TW9kZWwodGhpcy50YWJsZS5nZXRNb2RlbCgpKTtcblx0XHRkaWFsb2cuc2V0QmluZGluZ0NvbnRleHQodGhpcy5iaW5kaW5nQ29udGV4dCk7XG5cdFx0dGhpcy50YWJsZS5hZGREZXBlbmRlbnQoZGlhbG9nKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDbG9zZXMgYW5kIGRlc3Ryb3lzIHRoZSBkaWFsb2cuXG5cdCAqL1xuXHRwcml2YXRlIG9uQ2xvc2UoKTogdm9pZCB7XG5cdFx0dGhpcy50cmFuc2llbnRMaXN0QmluZGluZy5kZXN0cm95KCk7XG5cdFx0aWYgKHRoaXMuZGlhbG9nKSB7XG5cdFx0XHR0aGlzLmRpYWxvZy5jbG9zZSgpO1xuXHRcdFx0dGhpcy5kaWFsb2cuZGVzdHJveSgpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSBwcm9taXNlIG9mIHRoZSByZXF1aXJlZCBkYXRhLlxuXHQgKiBUaGlzIHByb21pc2UgaXMgcmVzb2x2ZWQgd2hlbiB0aGUgcmVxdWlyZWQgZGF0YSBpcyBsb2FkZWQuXG5cdCAqIFRoaXMgZGF0YSBhcmUgdXNlZCBvbiB0aGUgc2F2ZSB3b3JrZmxvdyB0byBkZXRlcm1pbmUgaWYgdGhlIG5ldyBkYXRhIGhhcyB0byBiZSBzYXZlZCBvciBub3QuXG5cdCAqIFRoZSBzYXZlIHdvcmtmbG93IGlzIGV4ZWN1dGVkIG9ubHkgaWYgdGhpcyBwcm9taXNlIGlzIHJlc29sdmVkLlxuXHQgKiBAcmV0dXJucyBUaGUgcHJvbWlzZSBvZiB0aGUgcmVxdWlyZWQgZGF0YS5cblx0ICovXG5cdGdldFJlcXVpcmVkRGF0YVByb21pc2UoKTogUHJvbWlzZUtlZXBlcjx2b2lkPiB7XG5cdFx0cmV0dXJuIHRoaXMucmVxdWlyZWREYXRhUHJvbWlzZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBNYW5hZ2VzIHRoZSBtZXNzYWdlcyBhY2NvcmRpbmcgdG8gdGhlIGNvbnRleHRzIG9uIGVycm9yLlxuXHQgKi9cblx0YXN5bmMgbWFuYWdlTWVzc2FnZSgpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRjb25zdCBjb3JlUmVzb3VyY2VCdW5kbGUgPSBMaWJyYXJ5LmdldFJlc291cmNlQnVuZGxlRm9yKFwic2FwLmZlLmNvcmVcIikgYXMgUmVzb3VyY2VCdW5kbGU7XG5cdFx0Y29uc3QgY29udHJvbGxlciA9IHRoaXMudmlldy5nZXRDb250cm9sbGVyKCk7XG5cdFx0Y29uc3QgRHJhZnRTdGF0dXMgPSBGRUxpYnJhcnkuRHJhZnRTdGF0dXM7XG5cdFx0Y29uc3QgaW50ZXJuYWxNb2RlbENvbnRleHQgPSB0aGlzLnZpZXcuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKTtcblx0XHRpbnRlcm5hbE1vZGVsQ29udGV4dD8uc2V0UHJvcGVydHkoXCJnZXRCb3VuZE1lc3NhZ2VzRm9yTWFzc0VkaXRcIiwgdHJ1ZSk7XG5cdFx0YXdhaXQgY29udHJvbGxlci5tZXNzYWdlSGFuZGxlci5zaG93TWVzc2FnZXMoe1xuXHRcdFx0b25CZWZvcmVTaG93TWVzc2FnZTogKFxuXHRcdFx0XHRtZXNzYWdlczogTWVzc2FnZVtdLFxuXHRcdFx0XHRzaG93TWVzc2FnZVBhcmFtZXRlcnM6IHtcblx0XHRcdFx0XHRmbkdldE1lc3NhZ2VTdWJ0aXRsZT86IEZ1bmN0aW9uO1xuXHRcdFx0XHRcdHNob3dNZXNzYWdlQm94PzogYm9vbGVhbjtcblx0XHRcdFx0XHRzaG93TWVzc2FnZURpYWxvZz86IGJvb2xlYW47XG5cdFx0XHRcdFx0ZmlsdGVyZWRNZXNzYWdlcz86IE1lc3NhZ2VbXTtcblx0XHRcdFx0XHRzaG93Q2hhbmdlU2V0RXJyb3JEaWFsb2c/OiBib29sZWFuO1xuXHRcdFx0XHR9XG5cdFx0XHQpID0+IHtcblx0XHRcdFx0c2hvd01lc3NhZ2VQYXJhbWV0ZXJzLmZuR2V0TWVzc2FnZVN1YnRpdGxlID0gbWVzc2FnZUhhbmRsaW5nLnNldE1lc3NhZ2VTdWJ0aXRsZS5iaW5kKHt9LCB0aGlzLnRhYmxlLCB0aGlzLmNvbnRleHRzKTtcblxuXHRcdFx0XHRpZiAoIXRoaXMuY29udGV4dHNPbkVycm9yLmxlbmd0aCkge1xuXHRcdFx0XHRcdGlmICh0aGlzLnVwZGF0ZWRQcm9wZXJ0aWVzLnNpemUgPiAwKSB7XG5cdFx0XHRcdFx0XHQvL1RoZXJlIGlzIGF0IGxlYXN0IG9uZSBuZXcgdmFsdWUgc2V0XG5cdFx0XHRcdFx0XHRjb250cm9sbGVyLmVkaXRGbG93LnNldERyYWZ0U3RhdHVzKERyYWZ0U3RhdHVzLlNhdmVkKTtcblx0XHRcdFx0XHRcdGlmICh0aGlzLnZpZXcuZ2V0Vmlld0RhdGEoKS5jb252ZXJ0ZXJUeXBlID09PSBcIkxpc3RSZXBvcnRcIikge1xuXHRcdFx0XHRcdFx0XHRNZXNzYWdlVG9hc3Quc2hvdyh0aGlzLnJlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX01BU1NfRURJVF9TVUNDRVNTX1RPQVNUXCIpKTtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdE1lc3NhZ2VUb2FzdC5zaG93KHRoaXMucmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfT0JKRUNUX1BBR0VfTUFTU19FRElUX1NVQ0NFU1NfVE9BU1RcIikpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRNZXNzYWdlVG9hc3Quc2hvdyh0aGlzLnJlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX01BU1NfRURJVF9OT19DSEFOR0VcIikpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIGlmICh0aGlzLmNvbnRleHRzT25FcnJvci5sZW5ndGggPCB0aGlzLmNvbnRleHRzLmxlbmd0aCkge1xuXHRcdFx0XHRcdGNvbnRyb2xsZXIuZWRpdEZsb3cuc2V0RHJhZnRTdGF0dXMoRHJhZnRTdGF0dXMuU2F2ZWQpO1xuXHRcdFx0XHR9IGVsc2UgaWYgKHRoaXMuY29udGV4dHNPbkVycm9yLmxlbmd0aCA9PT0gdGhpcy5jb250ZXh0cy5sZW5ndGgpIHtcblx0XHRcdFx0XHRjb250cm9sbGVyLmVkaXRGbG93LnNldERyYWZ0U3RhdHVzKERyYWZ0U3RhdHVzLkNsZWFyKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChDb21tb25VdGlscy5nZXRJc0VkaXRhYmxlKGNvbnRyb2xsZXIpICYmICFtZXNzYWdlcy5zb21lKChtZXNzYWdlKSA9PiAhbWVzc2FnZS5nZXRUYXJnZXRzKCkpKSB7XG5cdFx0XHRcdFx0c2hvd01lc3NhZ2VQYXJhbWV0ZXJzLnNob3dNZXNzYWdlQm94ID0gZmFsc2U7XG5cdFx0XHRcdFx0c2hvd01lc3NhZ2VQYXJhbWV0ZXJzLnNob3dNZXNzYWdlRGlhbG9nID0gZmFsc2U7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIHNob3dNZXNzYWdlUGFyYW1ldGVycztcblx0XHRcdH1cblx0XHR9KTtcblxuXHRcdGlmICghIXRoaXMuY29udGV4dHNPbkVycm9yLmxlbmd0aCAmJiB0aGlzLmNvbnRleHRzT25FcnJvci5sZW5ndGggPCB0aGlzLmNvbnRleHRzLmxlbmd0aCkge1xuXHRcdFx0Y29uc3QgY29uZmlybUJ1dHRvblR4dCA9IGNvcmVSZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19DT01NT05fRElBTE9HX09LXCIpO1xuXHRcdFx0TWVzc2FnZUJveC5zdWNjZXNzKFxuXHRcdFx0XHR0aGlzLnJlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX01BU1NfRURJVF9DSEFOR0VTX1dJVEhfRVJST1JcIiwgW1xuXHRcdFx0XHRcdHRoaXMuY29udGV4dHMubGVuZ3RoIC0gdGhpcy5jb250ZXh0c09uRXJyb3IubGVuZ3RoLFxuXHRcdFx0XHRcdHRoaXMuY29udGV4dHMubGVuZ3RoXG5cdFx0XHRcdF0pLFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0YWN0aW9uczogW2NvbmZpcm1CdXR0b25UeHRdLFxuXHRcdFx0XHRcdGVtcGhhc2l6ZWRBY3Rpb246IGNvbmZpcm1CdXR0b25UeHRcblx0XHRcdFx0fVxuXHRcdFx0KTtcblx0XHR9XG5cdFx0aW50ZXJuYWxNb2RlbENvbnRleHQ/LnNldFByb3BlcnR5KFwiZ2V0Qm91bmRNZXNzYWdlc0Zvck1hc3NFZGl0XCIsIGZhbHNlKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBTYXZlcyB0aGUgcmVsZXZhbnQgY29udGV4dHMgYW5kIHJlZnJlc2hlcyB0aGUgYXNzb2NpYXRlZCBwcm9wZXJ0aWVzLlxuXHQgKiBAcGFyYW0gZmllbGRWYWx1ZXNJbmZvIFRoZSBpbmZvcm1hdGlvbiBvZiB0aGUgdmFsdWVzIGZvciBhbGwgbWFzcyBlZGl0IGZpZWxkcy5cblx0ICogQHJldHVybnMgQSBQcm9taXNlLlxuXHQgKi9cblx0cHJpdmF0ZSBhc3luYyBzYXZlQ2hhbmdlcyhmaWVsZFZhbHVlc0luZm86IEZpZWxkVmFsdWVzSW5mbyk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGNvbnN0IG1hbmlmZXN0U2V0dGluZ3MgPSAodGhpcy50YWJsZS5nZXRQYXJlbnQoKSBhcyBUYWJsZUFQSSkuZ2V0VGFibGVEZWZpbml0aW9uKCkuY29udHJvbC5tYXNzRWRpdDtcblx0XHRjb25zdCBpc0lzb2xhdGVkID0gbWFuaWZlc3RTZXR0aW5ncy5vcGVyYXRpb25Hcm91cGluZ01vZGUgPT09IE9wZXJhdGlvbkdyb3VwaW5nTW9kZS5Jc29sYXRlZDtcblx0XHRjb25zdCBpc29sYXRlZEdyb3VwSWQgPSBcIiRhdXRvLklzb2xhdGVkXCI7XG5cdFx0Y29uc3QgbWFzc0VkaXRTaWRlRWZmZWN0cyA9IG5ldyBNYXNzRWRpdFNpZGVFZmZlY3RzKHRoaXMpOyAvLyBVc2UgdGhlIGZpcnN0IGxpbmUgYXMgcmVmZXJlbmNlIGNvbnRleHQgdG8gY2FsY3VsYXRlIHRoZSBtYXAgb2Ygc2lkZSBlZmZlY3RzXG5cdFx0Y29uc3QgZmllbGRQcm9taXNlczogUHJvbWlzZTx1bmtub3duPltdID0gW107XG5cdFx0Y29uc3QgbW9kZWwgPSB0aGlzLnRhYmxlLmdldE1vZGVsKCkgYXMgT0RhdGFNb2RlbDtcblxuXHRcdGlmIChpc0lzb2xhdGVkKSB7XG5cdFx0XHRtb2RlbC5zZXRDb250aW51ZU9uRXJyb3IoaXNvbGF0ZWRHcm91cElkKTtcblx0XHR9XG5cdFx0dGhpcy5jb250ZXh0cy5mb3JFYWNoKChzZWxlY3RlZENvbnRleHQ6IE9EYXRhVjRDb250ZXh0KSA9PiB7XG5cdFx0XHRjb25zdCBpbW1lZGlhdGVTaWRlRWZmZWN0czogeyBwcm9wZXJ0eVBhdGg6IHN0cmluZzsgZ3JvdXBJZDogc3RyaW5nIH1bXSA9IFtdO1xuXHRcdFx0Y29uc3QgcmVmcmVzaERlc2NyaXB0aW9uczogeyBjb250cm9sOiBNYXNzRWRpdEZpZWxkOyBncm91cElkOiBzdHJpbmcgfVtdID0gW107XG5cdFx0XHRmb3IgKGNvbnN0IHsgY29udHJvbCwgdmFsdWVzIH0gb2YgZmllbGRWYWx1ZXNJbmZvLmZpZWxkQ29udHJvbFJlZmVyZW5jZSkge1xuXHRcdFx0XHRsZXQgdmFsdWVIYXNDaGFuZ2VkID0gZmFsc2U7XG5cdFx0XHRcdGlmICghY29udHJvbC5pc1JlYWRPbmx5T25Db250ZXh0KHNlbGVjdGVkQ29udGV4dCkpIHtcblx0XHRcdFx0XHRjb25zdCBncm91cElkID0gaXNJc29sYXRlZCA/IGlzb2xhdGVkR3JvdXBJZCA6IFwiJGF1dG9cIjtcblx0XHRcdFx0XHRmb3IgKGNvbnN0IHByb3BlcnR5UGF0aCBpbiB2YWx1ZXMpIHtcblx0XHRcdFx0XHRcdGlmIChzZWxlY3RlZENvbnRleHQuZ2V0UHJvcGVydHkocHJvcGVydHlQYXRoKSAhPT0gdmFsdWVzW3Byb3BlcnR5UGF0aF0pIHtcblx0XHRcdFx0XHRcdFx0dmFsdWVIYXNDaGFuZ2VkID0gdHJ1ZTtcblx0XHRcdFx0XHRcdFx0ZmllbGRQcm9taXNlcy5wdXNoKFxuXHRcdFx0XHRcdFx0XHRcdHNlbGVjdGVkQ29udGV4dFxuXHRcdFx0XHRcdFx0XHRcdFx0LnNldFByb3BlcnR5KHByb3BlcnR5UGF0aCwgdmFsdWVzW3Byb3BlcnR5UGF0aF0sIGdyb3VwSWQpXG5cdFx0XHRcdFx0XHRcdFx0XHQudGhlbigoKSA9PiB0aGlzLnVwZGF0ZWRQcm9wZXJ0aWVzLmFkZChwcm9wZXJ0eVBhdGgpKVxuXHRcdFx0XHRcdFx0XHRcdFx0LmNhdGNoKChlcnJvcjogdW5rbm93bikgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR0aGlzLmNvbnRleHRzT25FcnJvci5wdXNoKHNlbGVjdGVkQ29udGV4dCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdExvZy5lcnJvcihcIk1hc3MgRWRpdDogU29tZXRoaW5nIHdlbnQgd3JvbmcgaW4gdXBkYXRpbmcgZW50cmllcy5cIiwgZXJyb3IgYXMgc3RyaW5nKTtcblx0XHRcdFx0XHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRcdGltbWVkaWF0ZVNpZGVFZmZlY3RzLnB1c2goe1xuXHRcdFx0XHRcdFx0XHRcdHByb3BlcnR5UGF0aCxcblx0XHRcdFx0XHRcdFx0XHRncm91cElkXG5cdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRpZiAodmFsdWVIYXNDaGFuZ2VkKSB7XG5cdFx0XHRcdFx0XHRyZWZyZXNoRGVzY3JpcHRpb25zLnB1c2goeyBjb250cm9sLCBncm91cElkIH0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0ZmllbGRQcm9taXNlcy5wdXNoKFxuXHRcdFx0XHQuLi5pbW1lZGlhdGVTaWRlRWZmZWN0cy5tYXAoYXN5bmMgKGltbWVkaWF0ZVNpZGVFZmZlY3QpID0+XG5cdFx0XHRcdFx0bWFzc0VkaXRTaWRlRWZmZWN0cy5leGVjdXRlSW1tZWRpYXRlU2lkZUVmZmVjdHMoXG5cdFx0XHRcdFx0XHRzZWxlY3RlZENvbnRleHQsXG5cdFx0XHRcdFx0XHRpbW1lZGlhdGVTaWRlRWZmZWN0LnByb3BlcnR5UGF0aCxcblx0XHRcdFx0XHRcdGltbWVkaWF0ZVNpZGVFZmZlY3QuZ3JvdXBJZFxuXHRcdFx0XHRcdClcblx0XHRcdFx0KVxuXHRcdFx0KTtcblx0XHRcdGZpZWxkUHJvbWlzZXMucHVzaChcblx0XHRcdFx0Li4ucmVmcmVzaERlc2NyaXB0aW9ucy5tYXAoYXN5bmMgKHJlZnJlc2hEZXNjcmlwdGlvbikgPT5cblx0XHRcdFx0XHRtYXNzRWRpdFNpZGVFZmZlY3RzLnJlZnJlc2hEZXNjcmlwdGlvbihyZWZyZXNoRGVzY3JpcHRpb24uY29udHJvbCwgc2VsZWN0ZWRDb250ZXh0LCByZWZyZXNoRGVzY3JpcHRpb24uZ3JvdXBJZClcblx0XHRcdFx0KVxuXHRcdFx0KTtcblx0XHRcdGlmIChpc0lzb2xhdGVkKSB7XG5cdFx0XHRcdC8vQ3JlYXRlIGEgbmV3IENoYW5nZVNldCBmb3IgdGhlIG5leHQgcmVxdWVzdHNcblx0XHRcdFx0bW9kZWwuc3VibWl0QmF0Y2goaXNvbGF0ZWRHcm91cElkKTtcblx0XHRcdH1cblx0XHR9KTtcblxuXHRcdGF3YWl0IFByb21pc2UuYWxsU2V0dGxlZChmaWVsZFByb21pc2VzKTtcblx0XHRpZiAodGhpcy51cGRhdGVkUHJvcGVydGllcy5zaXplKSB7XG5cdFx0XHRtYXNzRWRpdFNpZGVFZmZlY3RzLmV4ZWN1dGVEZWZlcnJlZFNpZGVFZmZlY3RzKG5ldyBTZXQoW1wiZ2VuZXJpY0ZpZWxkXCIsIC4uLkFycmF5LmZyb20odGhpcy51cGRhdGVkUHJvcGVydGllcyldKSk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIGluZm9ybWF0aW9uIG9mIHRoZSB2YWx1ZXMgZm9yIGFsbCBtYXNzIGVkaXQgZmllbGRzLlxuXHQgKiBAcmV0dXJucyBUaGUgaW5mb3JtYXRpb24uXG5cdCAqL1xuXHRwcml2YXRlIGdldEZpZWxkVmFsdWVzSW5mb3MoKTogRmllbGRWYWx1ZXNJbmZvIHtcblx0XHRjb25zdCByZXN1bHQgPSB7XG5cdFx0XHR2YWx1ZXM6IHt9LFxuXHRcdFx0ZmllbGRDb250cm9sUmVmZXJlbmNlOiBbXVxuXHRcdH0gYXMgRmllbGRWYWx1ZXNJbmZvO1xuXHRcdGZvciAoY29uc3QgZmllbGRDb250cm9sIG9mIHRoaXMuZmllbGRDb250cm9scykge1xuXHRcdFx0Y29uc3QgZmllbGRWYWx1ZXMgPSBmaWVsZENvbnRyb2wuZ2V0RmllbGRWYWx1ZXMoKTtcblx0XHRcdHJlc3VsdC52YWx1ZXMgPSB7IC4uLnJlc3VsdC52YWx1ZXMsIC4uLmZpZWxkVmFsdWVzIH07XG5cdFx0XHRyZXN1bHQuZmllbGRDb250cm9sUmVmZXJlbmNlLnB1c2goeyBjb250cm9sOiBmaWVsZENvbnRyb2wsIHZhbHVlczogZmllbGRWYWx1ZXMgfSk7XG5cdFx0fVxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHQvKipcblx0ICogVXBkYXRlcyB0aGUgdGFibGUgZmllbGRzIGFjY29yZGluZyB0byB0aGUgZGlhbG9nIGVudHJpZXMuXG5cdCAqIEByZXR1cm5zIGB0cnVlYCBpZiB0aGUgY3VzdG9tIHNhdmUgaXMgZXhlY3V0ZWQsIGBmYWxzZWAgb3RoZXJ3aXNlLlxuXHQgKi9cblx0YXN5bmMgYXBwbHlDaGFuZ2VzKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuXHRcdGF3YWl0IHRoaXMucmVxdWlyZWREYXRhUHJvbWlzZS5wcm9taXNlOyAvLyBXZSBuZWVkIHRvIHdhaXQgZm9yIHRoZSByZXF1aXJlZCBkYXRhIHRvIGJlIGxvYWRlZCBiZWZvcmUgc2F2aW5nLlxuXHRcdC8vV2Ugd2FudCB0byBza2lwIHRoZSBwYXRjaCBoYW5kbGVyKHNwZWNpZmljIHdvcmtmbG93IGRvbmUgaW50byB0aGUgRWRpdEZsb3cpIHNpbmNlIHRoZSBwYXRjaCBpcyBtYW5hZ2VkIGhlcmVcblx0XHR0aGlzLnZpZXcuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKT8uc2V0UHJvcGVydHkoXCJza2lwUGF0Y2hIYW5kbGVyc1wiLCB0cnVlKTtcblxuXHRcdGNvbnN0IGZpZWxkc1ZhbHVlc0luZm8gPSB0aGlzLmdldEZpZWxkVmFsdWVzSW5mb3MoKTtcblx0XHRsZXQgY3VzdG9tU2F2ZSA9IGZhbHNlO1xuXHRcdHRyeSB7XG5cdFx0XHRjdXN0b21TYXZlID0gYXdhaXQgdGhpcy52aWV3XG5cdFx0XHRcdC5nZXRDb250cm9sbGVyKClcblx0XHRcdFx0LmVkaXRGbG93LmN1c3RvbU1hc3NFZGl0U2F2ZSh7IGFDb250ZXh0czogdGhpcy5jb250ZXh0cywgb1VwZGF0ZURhdGE6IGZpZWxkc1ZhbHVlc0luZm8udmFsdWVzIH0pO1xuXHRcdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0XHRMb2cuZXJyb3IoXCJNYXNzIEVkaXQ6IFNvbWV0aGluZyB3ZW50IHdyb25nIGluIHVwZGF0aW5nIGVudHJpZXMuXCIsIGVycm9yIGFzIHN0cmluZyk7XG5cdFx0fVxuXHRcdGlmICghY3VzdG9tU2F2ZSkge1xuXHRcdFx0YXdhaXQgdGhpcy5zYXZlQ2hhbmdlcyhmaWVsZHNWYWx1ZXNJbmZvKTtcblx0XHR9XG5cdFx0dGhpcy52aWV3LmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIik/LnNldFByb3BlcnR5KFwic2tpcFBhdGNoSGFuZGxlcnNcIiwgZmFsc2UpO1xuXHRcdHJldHVybiBjdXN0b21TYXZlO1xuXHR9XG5cblx0LyoqXG5cdCAqIE1hbmFnZXMgdGhlIHByZXNzIG9uIHRoZSBBcHBseSBCdXR0b24uXG5cdCAqIEByZXR1cm5zIEEgcHJvbWlzZS5cblx0ICovXG5cdHByaXZhdGUgYXN5bmMgb25BcHBseSgpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRpZiAodGhpcy5maWVsZENvbnRyb2xzLnNvbWUoKGZpZWxkQ29udHJvbCkgPT4gIWZpZWxkQ29udHJvbC5pc0ZpZWxkVmFsaWQoKSkpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0aWYgKCF0aGlzLmlzQWRhcHRhdGlvbikge1xuXHRcdFx0bWVzc2FnZUhhbmRsaW5nLnJlbW92ZUJvdW5kVHJhbnNpdGlvbk1lc3NhZ2VzKCk7XG5cdFx0XHRtZXNzYWdlSGFuZGxpbmcucmVtb3ZlVW5ib3VuZFRyYW5zaXRpb25NZXNzYWdlcygpO1xuXHRcdFx0Y29uc3QgaXNDdXN0b21TYXZlID0gYXdhaXQgdGhpcy5hcHBseUNoYW5nZXMoKTtcblx0XHRcdGlmICghaXNDdXN0b21TYXZlKSB7XG5cdFx0XHRcdHRoaXMubWFuYWdlTWVzc2FnZSgpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHR0aGlzLm9uQ2xvc2UoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIHRoZSBkaWFsb2cgY29udGVudC5cblx0ICogQHJldHVybnMgUHJvbWlzZSByZXR1cm5pbmcgaW5zdGFuY2Ugb2YgZnJhZ21lbnQuXG5cdCAqL1xuXG5cdHByaXZhdGUgYXN5bmMgY3JlYXRlQ29udGVudCgpOiBQcm9taXNlPEZvcm0+IHtcblx0XHRjb25zdCBjdXN0b21Gb3JtQ29udGFpbmVyID0gYXdhaXQgdGhpcy5jcmVhdGVDdXN0b21Db250YWluZXIoKTtcblx0XHRyZXR1cm4gKFxuXHRcdFx0PD5cblx0XHRcdFx0e3RoaXMuZ2V0QWRhcHRhdGlvbk1lc3NhZ2UoKX1cblx0XHRcdFx0PEZvcm0+XG5cdFx0XHRcdFx0e3tcblx0XHRcdFx0XHRcdGxheW91dDogPFJlc3BvbnNpdmVHcmlkTGF5b3V0IGxhYmVsU3Bhbk09XCIxMlwiIGxhYmVsU3Bhbkw9XCIxMlwiIGxhYmVsU3BhblhMPVwiMTJcIiAvPixcblx0XHRcdFx0XHRcdGZvcm1Db250YWluZXJzOiAoXG5cdFx0XHRcdFx0XHRcdDw+XG5cdFx0XHRcdFx0XHRcdFx0e2N1c3RvbUZvcm1Db250YWluZXJ9XG5cdFx0XHRcdFx0XHRcdFx0PEZvcm1Db250YWluZXI+XG5cdFx0XHRcdFx0XHRcdFx0XHR7e1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRmb3JtRWxlbWVudHM6IHRoaXMuY3JlYXRlRm9ybUVsZW1lbnRzKClcblx0XHRcdFx0XHRcdFx0XHRcdH19XG5cdFx0XHRcdFx0XHRcdFx0PC9Gb3JtQ29udGFpbmVyPlxuXHRcdFx0XHRcdFx0XHQ8Lz5cblx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHR9fVxuXHRcdFx0XHQ8L0Zvcm0+XG5cdFx0XHQ8Lz5cblx0XHQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIGFkYXB0YXRpb24gbWVzc2FnZS5cblx0ICogQHJldHVybnMgVGhlIG1lc3NhZ2Ugc3RyaXAgaWYgdGhlIGRpYWxvZyBpcyBkaXNwbGF5ZWQgaW4gYWRhcHRhdGlvbiBtb2RlLlxuXHQgKi9cblx0cHJpdmF0ZSBnZXRBZGFwdGF0aW9uTWVzc2FnZSgpOiBNZXNzYWdlU3RyaXAgfCB1bmRlZmluZWQge1xuXHRcdGlmICh0aGlzLmlzQWRhcHRhdGlvbikge1xuXHRcdFx0cmV0dXJuIDxNZXNzYWdlU3RyaXAgdGV4dD17dGhpcy5yZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19NQVNTX0VESVRfQURBUFRBVElPTl9NT0RFXCIpfSAvPjtcblx0XHR9XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIHRoZSBjdXN0b20gZm9ybSBjb250YWluZXIgYWNjb3JkaW5nIHRvIHRoZSBtYW5pZmVzdCBzZXR0aW5ncy5cblx0ICogQHJldHVybnMgVGhlIGN1c3RvbSBmb3JtIGNvbnRhaW5lci5cblx0ICovXG5cdHByaXZhdGUgYXN5bmMgY3JlYXRlQ3VzdG9tQ29udGFpbmVyKCk6IFByb21pc2U8Rm9ybUNvbnRhaW5lciB8IHVuZGVmaW5lZD4ge1xuXHRcdGNvbnN0IG1hbmlmZXN0U2V0dGluZ3MgPSAodGhpcy50YWJsZS5nZXRQYXJlbnQoKSBhcyBUYWJsZUFQSSkuZ2V0VGFibGVEZWZpbml0aW9uKCkuY29udHJvbC5tYXNzRWRpdDtcblx0XHRpZiAobWFuaWZlc3RTZXR0aW5ncy5jdXN0b21GcmFnbWVudCkge1xuXHRcdFx0aWYgKG1hbmlmZXN0U2V0dGluZ3MuZnJvbUlubGluZSA9PT0gdHJ1ZSkge1xuXHRcdFx0XHQvLyBJbmxpbmUgY29uZmlndXJhdGlvbiBmcm9tIGEgVjIgYmxvY2s6IHRoZSBmcmFnbWVudCBpcyBhIHN0cmluZ1xuXHRcdFx0XHRpZiAodHlwZW9mIG1hbmlmZXN0U2V0dGluZ3MuY3VzdG9tRnJhZ21lbnQgPT09IFwic3RyaW5nXCIpIHtcblx0XHRcdFx0XHRjb25zdCByZXN1bHRYTUwgPSBhd2FpdCBYTUxQcmVwcm9jZXNzb3IucHJvY2Vzcyhcblx0XHRcdFx0XHRcdG5ldyBET01QYXJzZXIoKS5wYXJzZUZyb21TdHJpbmcobWFuaWZlc3RTZXR0aW5ncy5jdXN0b21GcmFnbWVudCwgXCJ0ZXh0L3htbFwiKS5maXJzdEVsZW1lbnRDaGlsZCxcblx0XHRcdFx0XHRcdHsgbW9kZWxzOiB7fSB9LFxuXHRcdFx0XHRcdFx0KHRoaXMudmlldy5nZXRDb250cm9sbGVyKCkuZ2V0T3duZXJDb21wb25lbnQoKSBhcyBFbmhhbmNlV2l0aFVJNTxUZW1wbGF0ZUNvbXBvbmVudD4pLmdldFByZXByb2Nlc3NvckNvbnRleHQoKVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0cmV0dXJuIChhd2FpdCBGcmFnbWVudC5sb2FkKHtcblx0XHRcdFx0XHRcdHR5cGU6IFwiWE1MXCIsXG5cdFx0XHRcdFx0XHRkZWZpbml0aW9uOiByZXN1bHRYTUwsXG5cdFx0XHRcdFx0XHRjb250cm9sbGVyOiB0aGlzLnZpZXcuZ2V0Q29udHJvbGxlcigpXG5cdFx0XHRcdFx0fSkpIGFzIHVua25vd24gYXMgRm9ybUNvbnRhaW5lcjtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHQvLyBJbmxpbmUgY29uZmlndXJhdGlvbiBmcm9tIGEgVjQgYmxvY2s6IHRoZSBmcmFnbWVudCBpcyBhbHJlYWR5IGEgRm9ybUNvbnRhaW5lclxuXHRcdFx0XHRcdHJldHVybiBtYW5pZmVzdFNldHRpbmdzLmN1c3RvbUZyYWdtZW50LmNsb25lKCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybiAoYXdhaXQgdGhpcy52aWV3XG5cdFx0XHRcdC5nZXRDb250cm9sbGVyKClcblx0XHRcdFx0LmdldEV4dGVuc2lvbkFQSSgpXG5cdFx0XHRcdC5sb2FkRnJhZ21lbnQoe1xuXHRcdFx0XHRcdGlkOiBcImN1c3RvbU1hc3NFZGl0XCIsXG5cdFx0XHRcdFx0bmFtZTogbWFuaWZlc3RTZXR0aW5ncy5jdXN0b21GcmFnbWVudCBhcyBzdHJpbmcsXG5cdFx0XHRcdFx0Y29udGV4dFBhdGg6IHRoaXMudHJhbnNpZW50TGlzdEJpbmRpbmdcblx0XHRcdFx0XHRcdC5nZXRNb2RlbCgpXG5cdFx0XHRcdFx0XHQuZ2V0TWV0YU1vZGVsKClcblx0XHRcdFx0XHRcdC5nZXRNZXRhUGF0aCh0aGlzLnRyYW5zaWVudExpc3RCaW5kaW5nLmdldFJlc29sdmVkUGF0aCgpKVxuXHRcdFx0XHR9KSkgYXMgRm9ybUNvbnRhaW5lcjtcblx0XHR9XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIHRoZSBmb3JtIGVsZW1lbnRzIG9mIHRoZSBkaWFsb2cuXG5cdCAqIEByZXR1cm5zIFRoZSBmb3JtIGVsZW1lbnRzLlxuXHQgKi9cblx0cHJpdmF0ZSBjcmVhdGVGb3JtRWxlbWVudHMoKTogRm9ybUVsZW1lbnRbXSB7XG5cdFx0cmV0dXJuIHRoaXMuZmllbGRQcm9wZXJ0aWVzLm1hcCh0aGlzLmNyZWF0ZUZvcm1FbGVtZW50LmJpbmQodGhpcykpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENyZWF0ZXMgdGhlIGZvcm0gZWxlbWVudHMgb2YgYSBGaWVsZC5cblx0ICogQHBhcmFtIGZpZWxkSW5mbyBUaGUgZmllbGQgcHJvcGVydGllc1xuXHQgKiBAcmV0dXJucyBUaGUgZm9ybSBlbGVtZW50LlxuXHQgKi9cblx0cHJpdmF0ZSBjcmVhdGVGb3JtRWxlbWVudChmaWVsZEluZm86IE1hc3NGaWVsZFByb3BlcnRpZXMpOiBGb3JtRWxlbWVudCB7XG5cdFx0cmV0dXJuIChcblx0XHRcdDxGb3JtRWxlbWVudCB2aXNpYmxlPXtmaWVsZEluZm8udmlzaWJsZX0+XG5cdFx0XHRcdHt7XG5cdFx0XHRcdFx0bGFiZWw6IDxMYWJlbCB0ZXh0PXtmaWVsZEluZm8ubGFiZWx9IGlkPXtJRC5nZW5lcmF0ZShbXCJNRURfXCIsIGZpZWxkSW5mby5wcm9wZXJ0eUluZm8ua2V5LCBcIkxhYmVsXCJdKX0gLz4sXG5cdFx0XHRcdFx0ZmllbGRzOiB0aGlzLmNyZWF0ZUZpZWxkcyhmaWVsZEluZm8pXG5cdFx0XHRcdH19XG5cdFx0XHQ8L0Zvcm1FbGVtZW50PlxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICogQ3JlYXRlcyB0aGUgZmllbGRzIG9mIHRoZSBkaWFsb2cuXG5cdCAqIEBwYXJhbSBmaWVsZEluZm8gVGhlIGZpZWxkIHByb3BlcnRpZXNcblx0ICogQHJldHVybnMgVGhlIGZpZWxkcy5cblx0ICovXG5cdHByaXZhdGUgY3JlYXRlRmllbGRzKGZpZWxkSW5mbzogTWFzc0ZpZWxkUHJvcGVydGllcyk6IENvbnRyb2xbXSB7XG5cdFx0Y29uc3QgbWV0YU1vZGVsID0gKHRoaXMudGFibGUuZ2V0TW9kZWwoKSBhcyBPRGF0YU1vZGVsKS5nZXRNZXRhTW9kZWwoKTtcblx0XHRjb25zdCBjb250ZXh0ID0gbWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KG1ldGFNb2RlbC5nZXRNZXRhUGF0aCh0aGlzLmJpbmRpbmdDb250ZXh0LmdldFBhdGgoKSkpIGFzIENvbnRleHQ7XG5cdFx0Y29uc3QgbWFzc0VkaXRGaWVsZCA9IG5ldyBNYXNzRWRpdEZpZWxkKGZpZWxkSW5mbywgY29udGV4dCk7XG5cdFx0dGhpcy5maWVsZENvbnRyb2xzLnB1c2gobWFzc0VkaXRGaWVsZCk7XG5cdFx0cmV0dXJuIG1hc3NFZGl0RmllbGQuZ2V0Q29udHJvbHMoKTtcblx0fVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7TUF5RHFCQSxjQUFjO0lBMkJsQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtJQUNDLFNBQUFBLGVBQVlDLEtBQTJGLEVBQUU7TUFBQSxLQWpDeEZDLG1CQUFtQixHQUFHLElBQUlDLGFBQWEsQ0FBTyxDQUFDO01BQUEsS0FjL0NDLGlCQUFpQixHQUFnQixJQUFJQyxHQUFHLENBQUMsQ0FBQztNQW9CMUQsSUFBSSxDQUFDQyxNQUFNLEdBQUdDLFNBQVM7TUFDdkIsSUFBSSxDQUFDQyxLQUFLLEdBQUdQLEtBQUssQ0FBQ08sS0FBSztNQUN4QixJQUFJLENBQUNDLFFBQVEsR0FBR1IsS0FBSyxDQUFDUSxRQUFRO01BQzlCLElBQUksQ0FBQ0MsWUFBWSxHQUFHQyxXQUFXLENBQUNDLGVBQWUsQ0FBQyxJQUFJLENBQUNKLEtBQUssQ0FBQyxDQUFDSyxnQkFBZ0IsQ0FBQyxDQUFDO01BQzlFLElBQUksQ0FBQ0MsZUFBZSxHQUFHYixLQUFLLENBQUNhLGVBQWU7TUFDNUMsSUFBSSxDQUFDQyxJQUFJLEdBQUdK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
416
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJNYXNzRWRpdERpYWxvZyIsInByb3BzIiwicmVxdWlyZWREYXRhUHJvbWlzZSIsIlByb21pc2VLZWVwZXIiLCJ1cGRhdGVkUHJvcGVydGllcyIsIlNldCIsImRpYWxvZyIsInVuZGVmaW5lZCIsInRhYmxlIiwiY29udGV4dHMiLCJpc0FkYXB0YXRpb24iLCJDb21tb25VdGlscyIsImdldEFwcENvbXBvbmVudCIsImlzQWRhcHRhdGlvbk1vZGUiLCJmaWVsZFByb3BlcnRpZXMiLCJ2aWV3IiwiZ2V0VGFyZ2V0VmlldyIsInRyYW5zaWVudExpc3RCaW5kaW5nIiwiZ2VuZXJhdGVMaXN0QmluZGluZyIsImJpbmRpbmdDb250ZXh0IiwiY3JlYXRlIiwicmVzb3VyY2VNb2RlbCIsIlJlc291cmNlTW9kZWxIZWxwZXIiLCJnZXRSZXNvdXJjZU1vZGVsIiwiY29udGV4dHNPbkVycm9yIiwiZmllbGRDb250cm9scyIsIl9leHBvcnRzIiwiX3Byb3RvIiwicHJvdG90eXBlIiwibGlzdEJpbmRpbmciLCJnZXRSb3dCaW5kaW5nIiwiZ2V0TW9kZWwiLCJiaW5kTGlzdCIsImdldFBhdGgiLCJnZXRDb250ZXh0IiwiJCR1cGRhdGVHcm91cElkIiwicmVmcmVzaEludGVybmFsIiwiY29yZVJlc291cmNlQnVuZGxlIiwiTGlicmFyeSIsImdldFJlc291cmNlQnVuZGxlRm9yIiwiYXBwbHlCdXR0b25UZXh0IiwiZ2V0Vmlld0RhdGEiLCJjb252ZXJ0ZXJUeXBlIiwiZ2V0VGV4dCIsImRpYWxvZ0NvbnRlbnQiLCJjcmVhdGVDb250ZW50IiwiX2pzeCIsIkRpYWxvZyIsImlkIiwiSUQiLCJnZW5lcmF0ZSIsImdldElkIiwiY29udGVudFdpZHRoIiwiY2xhc3MiLCJob3Jpem9udGFsU2Nyb2xsaW5nIiwidGl0bGUiLCJsZW5ndGgiLCJ0b1N0cmluZyIsImNvbnRlbnQiLCJlc2NhcGVIYW5kbGVyIiwib25DbG9zZSIsImJpbmQiLCJiZWZvcmVPcGVuIiwiYmVnaW5CdXR0b24iLCJCdXR0b24iLCJ0ZXh0IiwidHlwZSIsInByZXNzIiwib25BcHBseSIsImVuZEJ1dHRvbiIsInNldE1vZGVsIiwiSlNPTk1vZGVsIiwiaXNFZGl0YWJsZSIsImJpbmRFbGVtZW50IiwicGF0aCIsIm1vZGVsIiwiZXZlbnQiLCJnZXRTb3VyY2UiLCJzZXRCaW5kaW5nQ29udGV4dCIsImFkZERlcGVuZGVudCIsImRlc3Ryb3kiLCJjbG9zZSIsImdldFJlcXVpcmVkRGF0YVByb21pc2UiLCJtYW5hZ2VNZXNzYWdlIiwiY29udHJvbGxlciIsImdldENvbnRyb2xsZXIiLCJEcmFmdFN0YXR1cyIsIkZFTGlicmFyeSIsImludGVybmFsTW9kZWxDb250ZXh0IiwiZ2V0QmluZGluZ0NvbnRleHQiLCJzZXRQcm9wZXJ0eSIsIm1lc3NhZ2VIYW5kbGVyIiwic2hvd01lc3NhZ2VzIiwib25CZWZvcmVTaG93TWVzc2FnZSIsIm1lc3NhZ2VzIiwic2hvd01lc3NhZ2VQYXJhbWV0ZXJzIiwiZm5HZXRNZXNzYWdlU3VidGl0bGUiLCJtZXNzYWdlSGFuZGxpbmciLCJzZXRNZXNzYWdlU3VidGl0bGUiLCJzaXplIiwiZWRpdEZsb3ciLCJzZXREcmFmdFN0YXR1cyIsIlNhdmVkIiwiTWVzc2FnZVRvYXN0Iiwic2hvdyIsIkNsZWFyIiwiZ2V0SXNFZGl0YWJsZSIsInNvbWUiLCJtZXNzYWdlIiwiZ2V0VGFyZ2V0cyIsInNob3dNZXNzYWdlQm94Iiwic2hvd01lc3NhZ2VEaWFsb2ciLCJjb25maXJtQnV0dG9uVHh0IiwiTWVzc2FnZUJveCIsInN1Y2Nlc3MiLCJhY3Rpb25zIiwiZW1waGFzaXplZEFjdGlvbiIsInNhdmVDaGFuZ2VzIiwiZmllbGRWYWx1ZXNJbmZvIiwibWFuaWZlc3RTZXR0aW5ncyIsImdldFBhcmVudCIsImdldFRhYmxlRGVmaW5pdGlvbiIsImNvbnRyb2wiLCJtYXNzRWRpdCIsImlzSXNvbGF0ZWQiLCJvcGVyYXRpb25Hcm91cGluZ01vZGUiLCJPcGVyYXRpb25Hcm91cGluZ01vZGUiLCJJc29sYXRlZCIsImlzb2xhdGVkR3JvdXBJZCIsIm1hc3NFZGl0U2lkZUVmZmVjdHMiLCJNYXNzRWRpdFNpZGVFZmZlY3RzIiwiZmllbGRQcm9taXNlcyIsInNldENvbnRpbnVlT25FcnJvciIsImZvckVhY2giLCJzZWxlY3RlZENvbnRleHQiLCJpbW1lZGlhdGVTaWRlRWZmZWN0cyIsInJlZnJlc2hEZXNjcmlwdGlvbnMiLCJ2YWx1ZXMiLCJmaWVsZENvbnRyb2xSZWZlcmVuY2UiLCJ2YWx1ZUhhc0NoYW5nZWQiLCJpc1JlYWRPbmx5T25Db250ZXh0IiwiZ3JvdXBJZCIsInByb3BlcnR5UGF0aCIsImdldFByb3BlcnR5IiwicHVzaCIsInRoZW4iLCJhZGQiLCJjYXRjaCIsImVycm9yIiwiTG9nIiwibWFwIiwiaW1tZWRpYXRlU2lkZUVmZmVjdCIsImV4ZWN1dGVJbW1lZGlhdGVTaWRlRWZmZWN0cyIsInJlZnJlc2hEZXNjcmlwdGlvbiIsInN1Ym1pdEJhdGNoIiwiUHJvbWlzZSIsImFsbFNldHRsZWQiLCJleGVjdXRlRGVmZXJyZWRTaWRlRWZmZWN0cyIsIkFycmF5IiwiZnJvbSIsImdldEZpZWxkVmFsdWVzSW5mb3MiLCJyZXN1bHQiLCJmaWVsZENvbnRyb2wiLCJmaWVsZFZhbHVlcyIsImdldEZpZWxkVmFsdWVzIiwiYXBwbHlDaGFuZ2VzIiwicHJvbWlzZSIsImZpZWxkc1ZhbHVlc0luZm8iLCJjdXN0b21TYXZlIiwiY3VzdG9tTWFzc0VkaXRTYXZlIiwiYUNvbnRleHRzIiwib1VwZGF0ZURhdGEiLCJpc0ZpZWxkVmFsaWQiLCJyZW1vdmVCb3VuZFRyYW5zaXRpb25NZXNzYWdlcyIsInJlbW92ZVVuYm91bmRUcmFuc2l0aW9uTWVzc2FnZXMiLCJpc0N1c3RvbVNhdmUiLCJjdXN0b21Gb3JtQ29udGFpbmVyIiwiY3JlYXRlQ3VzdG9tQ29udGFpbmVyIiwiX2pzeHMiLCJfRnJhZ21lbnQiLCJjaGlsZHJlbiIsImdldEFkYXB0YXRpb25NZXNzYWdlIiwiRm9ybSIsImxheW91dCIsIlJlc3BvbnNpdmVHcmlkTGF5b3V0IiwibGFiZWxTcGFuTSIsImxhYmVsU3BhbkwiLCJsYWJlbFNwYW5YTCIsImZvcm1Db250YWluZXJzIiwiRm9ybUNvbnRhaW5lciIsImZvcm1FbGVtZW50cyIsImNyZWF0ZUZvcm1FbGVtZW50cyIsIk1lc3NhZ2VTdHJpcCIsImN1c3RvbUZyYWdtZW50IiwiZnJvbUlubGluZSIsInJlc3VsdFhNTCIsIlhNTFByZXByb2Nlc3NvciIsInByb2Nlc3MiLCJET01QYXJzZXIiLCJwYXJzZUZyb21TdHJpbmciLCJmaXJzdEVsZW1lbnRDaGlsZCIsIm1vZGVscyIsImdldE93bmVyQ29tcG9uZW50IiwiZ2V0UHJlcHJvY2Vzc29yQ29udGV4dCIsIkZyYWdtZW50IiwibG9hZCIsImRlZmluaXRpb24iLCJjbG9uZSIsImdldEV4dGVuc2lvbkFQSSIsImxvYWRGcmFnbWVudCIsIm5hbWUiLCJjb250ZXh0UGF0aCIsImdldE1ldGFNb2RlbCIsImdldE1ldGFQYXRoIiwiZ2V0UmVzb2x2ZWRQYXRoIiwiY3JlYXRlRm9ybUVsZW1lbnQiLCJmaWVsZEluZm8iLCJGb3JtRWxlbWVudCIsInZpc2libGUiLCJsYWJlbCIsIkxhYmVsIiwicHJvcGVydHlJbmZvIiwia2V5IiwiZmllbGRzIiwiY3JlYXRlRmllbGRzIiwibWV0YU1vZGVsIiwiY29udGV4dCIsImNyZWF0ZUJpbmRpbmdDb250ZXh0IiwibWFzc0VkaXRGaWVsZCIsIk1hc3NFZGl0RmllbGQiLCJnZXRDb250cm9scyJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiTWFzc0VkaXREaWFsb2cudHN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgUHJpbWl0aXZlVHlwZSB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlc1wiO1xuaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgdHlwZSBSZXNvdXJjZUJ1bmRsZSBmcm9tIFwic2FwL2Jhc2UvaTE4bi9SZXNvdXJjZUJ1bmRsZVwiO1xuaW1wb3J0IHR5cGUgeyBFbmhhbmNlV2l0aFVJNSB9IGZyb20gXCJzYXAvZmUvYmFzZS9DbGFzc1N1cHBvcnRcIjtcbmltcG9ydCB0eXBlIHsgRkVWaWV3IH0gZnJvbSBcInNhcC9mZS9jb3JlL0Jhc2VDb250cm9sbGVyXCI7XG5pbXBvcnQgQ29tbW9uVXRpbHMgZnJvbSBcInNhcC9mZS9jb3JlL0NvbW1vblV0aWxzXCI7XG5pbXBvcnQgdHlwZSBSZXNvdXJjZU1vZGVsIGZyb20gXCJzYXAvZmUvY29yZS9SZXNvdXJjZU1vZGVsXCI7XG5pbXBvcnQgdHlwZSBUZW1wbGF0ZUNvbXBvbmVudCBmcm9tIFwic2FwL2ZlL2NvcmUvVGVtcGxhdGVDb21wb25lbnRcIjtcbmltcG9ydCBtZXNzYWdlSGFuZGxpbmcgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL21lc3NhZ2VIYW5kbGVyL21lc3NhZ2VIYW5kbGluZ1wiO1xuaW1wb3J0IHsgT3BlcmF0aW9uR3JvdXBpbmdNb2RlIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWFuaWZlc3RTZXR0aW5nc1wiO1xuaW1wb3J0IFByb21pc2VLZWVwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvUHJvbWlzZUtlZXBlclwiO1xuaW1wb3J0IFJlc291cmNlTW9kZWxIZWxwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvUmVzb3VyY2VNb2RlbEhlbHBlclwiO1xuaW1wb3J0ICogYXMgSUQgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvU3RhYmxlSWRIZWxwZXJcIjtcbmltcG9ydCBGRUxpYnJhcnkgZnJvbSBcInNhcC9mZS9jb3JlL2xpYnJhcnlcIjtcbmltcG9ydCB0eXBlIHsgU2lkZUVmZmVjdHNFbnRpdHlUeXBlLCBTaWRlRWZmZWN0c1RhcmdldCwgU2lkZUVmZmVjdHNUeXBlIH0gZnJvbSBcInNhcC9mZS9jb3JlL3NlcnZpY2VzL1NpZGVFZmZlY3RzU2VydmljZUZhY3RvcnlcIjtcbmltcG9ydCB0eXBlIFRhYmxlQVBJIGZyb20gXCJzYXAvZmUvbWFjcm9zL3RhYmxlL1RhYmxlQVBJXCI7XG5pbXBvcnQgQnV0dG9uIGZyb20gXCJzYXAvbS9CdXR0b25cIjtcbmltcG9ydCBEaWFsb2cgZnJvbSBcInNhcC9tL0RpYWxvZ1wiO1xuaW1wb3J0IExhYmVsIGZyb20gXCJzYXAvbS9MYWJlbFwiO1xuaW1wb3J0IE1lc3NhZ2VCb3ggZnJvbSBcInNhcC9tL01lc3NhZ2VCb3hcIjtcbmltcG9ydCBNZXNzYWdlU3RyaXAgZnJvbSBcInNhcC9tL01lc3NhZ2VTdHJpcFwiO1xuaW1wb3J0IE1lc3NhZ2VUb2FzdCBmcm9tIFwic2FwL20vTWVzc2FnZVRvYXN0XCI7XG5pbXBvcnQgdHlwZSBVSTVFdmVudCBmcm9tIFwic2FwL3VpL2Jhc2UvRXZlbnRcIjtcbmltcG9ydCB0eXBlIENvbnRyb2wgZnJvbSBcInNhcC91aS9jb3JlL0NvbnRyb2xcIjtcbmltcG9ydCBGcmFnbWVudCBmcm9tIFwic2FwL3VpL2NvcmUvRnJhZ21lbnRcIjtcbmltcG9ydCBMaWJyYXJ5IGZyb20gXCJzYXAvdWkvY29yZS9MaWJcIjtcbmltcG9ydCB0eXBlIE1lc3NhZ2UgZnJvbSBcInNhcC91aS9jb3JlL21lc3NhZ2UvTWVzc2FnZVwiO1xuaW1wb3J0IFhNTFByZXByb2Nlc3NvciBmcm9tIFwic2FwL3VpL2NvcmUvdXRpbC9YTUxQcmVwcm9jZXNzb3JcIjtcbmltcG9ydCBGb3JtIGZyb20gXCJzYXAvdWkvbGF5b3V0L2Zvcm0vRm9ybVwiO1xuaW1wb3J0IEZvcm1Db250YWluZXIgZnJvbSBcInNhcC91aS9sYXlvdXQvZm9ybS9Gb3JtQ29udGFpbmVyXCI7XG5pbXBvcnQgRm9ybUVsZW1lbnQgZnJvbSBcInNhcC91aS9sYXlvdXQvZm9ybS9Gb3JtRWxlbWVudFwiO1xuaW1wb3J0IFJlc3BvbnNpdmVHcmlkTGF5b3V0IGZyb20gXCJzYXAvdWkvbGF5b3V0L2Zvcm0vUmVzcG9uc2l2ZUdyaWRMYXlvdXRcIjtcbmltcG9ydCB0eXBlIFRhYmxlIGZyb20gXCJzYXAvdWkvbWRjL1RhYmxlXCI7XG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvQ29udGV4dFwiO1xuaW1wb3J0IEpTT05Nb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL2pzb24vSlNPTk1vZGVsXCI7XG5pbXBvcnQgdHlwZSBPRGF0YVY0Q29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L0NvbnRleHRcIjtcbmltcG9ydCB0eXBlIE9EYXRhTGlzdEJpbmRpbmcgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YUxpc3RCaW5kaW5nXCI7XG5pbXBvcnQgdHlwZSBPRGF0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNb2RlbFwiO1xuaW1wb3J0IE1hc3NFZGl0RmllbGQgZnJvbSBcIi4vTWFzc0VkaXRGaWVsZFwiO1xuaW1wb3J0IE1hc3NFZGl0U2lkZUVmZmVjdHMgZnJvbSBcIi4vTWFzc0VkaXRTaWRlRWZmZWN0c1wiO1xuaW1wb3J0IHR5cGUgeyBNYXNzRmllbGRQcm9wZXJ0aWVzIH0gZnJvbSBcIi4vbGlicmFyeVwiO1xuXG50eXBlIE1hc3NFZGl0U2lkZUVmZmVjdHNQcm9wZXJ0aWVzID0ge1xuXHRzaWRlRWZmZWN0czogU2lkZUVmZmVjdHNUeXBlO1xuXHR0YWJsZVJlZnJlc2g6IHtcblx0XHRpc1JlcXVlc3RlZDogYm9vbGVhbjtcblx0XHR0YXJnZXRFbnRpdHk/OiBTaWRlRWZmZWN0c0VudGl0eVR5cGU7XG5cdH07XG5cdGltbWVkaWF0ZTogeyB0YXJnZXRzOiBTaWRlRWZmZWN0c1RhcmdldFtdOyB0cmlnZ2VyQWN0aW9uOiBzdHJpbmcgfCB1bmRlZmluZWQgfTtcblx0ZGVmZXJyZWQ6IHsgdGFyZ2V0czogU2lkZUVmZmVjdHNUYXJnZXRbXTsgdHJpZ2dlckFjdGlvbjogc3RyaW5nIHwgdW5kZWZpbmVkIH07XG59O1xuXG50eXBlIEZpZWxkVmFsdWVzSW5mbyA9IHtcblx0dmFsdWVzOiBSZWNvcmQ8c3RyaW5nLCBQcmltaXRpdmVUeXBlPjtcblx0ZmllbGRDb250cm9sUmVmZXJlbmNlOiB7IGNvbnRyb2w6IE1hc3NFZGl0RmllbGQ7IHZhbHVlczogUmVjb3JkPHN0cmluZywgUHJpbWl0aXZlVHlwZT4gfVtdO1xufTtcblxuZXhwb3J0IHR5cGUgTWFzc0VkaXRTaWRlRWZmZWN0c0V4ZWN1dGlvblByb3BlcnRpZXMgPSBNYXNzRWRpdFNpZGVFZmZlY3RzUHJvcGVydGllcyAmIHsgb25Sb3dDb250ZXh0OiBib29sZWFuIH07XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE1hc3NFZGl0RGlhbG9nIHtcblx0cHJpdmF0ZSByZWFkb25seSByZXF1aXJlZERhdGFQcm9taXNlID0gbmV3IFByb21pc2VLZWVwZXI8dm9pZD4oKTtcblxuXHRwcml2YXRlIGRpYWxvZzogRGlhbG9nIHwgdW5kZWZpbmVkO1xuXG5cdHB1YmxpYyByZWFkb25seSB0YWJsZTogVGFibGU7XG5cblx0cHVibGljIHJlYWRvbmx5IGZpZWxkUHJvcGVydGllczogTWFzc0ZpZWxkUHJvcGVydGllc1tdO1xuXG5cdHByaXZhdGUgcmVhZG9ubHkgdmlldzogRkVWaWV3O1xuXG5cdHB1YmxpYyByZWFkb25seSBjb250ZXh0czogT0RhdGFWNENvbnRleHRbXTtcblxuXHRwcml2YXRlIHJlYWRvbmx5IGNvbnRleHRzT25FcnJvcjogT0RhdGFWNENvbnRleHRbXTtcblxuXHRwcml2YXRlIHJlYWRvbmx5IHVwZGF0ZWRQcm9wZXJ0aWVzOiBTZXQ8c3RyaW5nPiA9IG5ldyBTZXQoKTtcblxuXHRwcml2YXRlIHJlYWRvbmx5IHJlc291cmNlTW9kZWw6IFJlc291cmNlTW9kZWw7XG5cblx0cHVibGljIHJlYWRvbmx5IGJpbmRpbmdDb250ZXh0OiBPRGF0YVY0Q29udGV4dDtcblxuXHRwdWJsaWMgcmVhZG9ubHkgdHJhbnNpZW50TGlzdEJpbmRpbmc6IE9EYXRhTGlzdEJpbmRpbmc7XG5cblx0cHJpdmF0ZSByZWFkb25seSBmaWVsZENvbnRyb2xzOiBNYXNzRWRpdEZpZWxkW107XG5cblx0cHJpdmF0ZSByZWFkb25seSBpc0FkYXB0YXRpb246IGJvb2xlYW47XG5cblx0LyoqXG5cdCAqIENvbnN0cnVjdG9yIG9mIHRoZSBNYXNzRWRpdCBkaWFsb2cuXG5cdCAqIEBwYXJhbSBwcm9wcyBDb250YWlucyB0aGUgZm9sbG93aW5nIGF0dHJpYnV0ZXNcblx0ICogQHBhcmFtIHByb3BzLnRhYmxlIFRoZSB0YWJsZSB3aGVyZSB0aGUgY2hhbmdlcyBuZWVkIHRvIGJlIGFwcGxpZWRcblx0ICogQHBhcmFtIHByb3BzLmNvbnRleHRzIFRoZSByb3cgY29udGV4dHMgd2hlcmUgdGhlIGNoYW5nZXMgbmVlZCB0byBiZSBhcHBsaWVkXG5cdCAqIEBwYXJhbSBwcm9wcy5maWVsZFByb3BlcnRpZXMgVGhlIHByb3BlcnRpZXMgb3QgdGhlIGZpZWxkc1xuXHQgKi9cblx0Y29uc3RydWN0b3IocHJvcHM6IHsgdGFibGU6IFRhYmxlOyBjb250ZXh0czogT0RhdGFWNENvbnRleHRbXTsgZmllbGRQcm9wZXJ0aWVzOiBNYXNzRmllbGRQcm9wZXJ0aWVzW10gfSkge1xuXHRcdHRoaXMuZGlhbG9nID0gdW5kZWZpbmVkO1xuXHRcdHRoaXMudGFibGUgPSBwcm9wcy50YWJsZTtcblx0XHR0aGlzLmNvbnRleHRzID0gcHJvcHMuY29udGV4dHM7XG5cdFx0dGhpcy5pc0FkYXB0YXRpb24gPSBDb21tb25VdGlscy5nZXRBcHBDb21wb25lbnQodGhpcy50YWJsZSkuaXNBZGFwdGF0aW9uTW9kZSgpO1xuXHRcdHRoaXMuZmllbGRQcm9wZXJ0aWVzID0gcHJvcHMuZmllbGRQcm9wZXJ0aWVzO1xuXHRcdHRoaXMudmlldyA9IENvbW1vblV0aWxzLmdldFRhcmdldFZpZXcodGhpcy50YWJsZSk7XG5cdFx0dGhpcy50cmFuc2llbnRMaXN0QmluZGluZyA9IHRoaXMuZ2VuZXJhdGVMaXN0QmluZGluZygpO1xuXHRcdHRoaXMuYmluZGluZ0NvbnRleHQgPSB0aGlzLnRyYW5zaWVudExpc3RCaW5kaW5nLmNyZWF0ZSh7fSwgdHJ1ZSk7XG5cblx0XHR0aGlzLnJlc291cmNlTW9kZWwgPSBSZXNvdXJjZU1vZGVsSGVscGVyLmdldFJlc291cmNlTW9kZWwodGhpcy50YWJsZSk7XG5cdFx0dGhpcy5jb250ZXh0c09uRXJyb3IgPSBbXTtcblx0XHR0aGlzLmZpZWxkQ29udHJvbHMgPSBbXTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIHRoZSBjb250ZXh0IGZvciB0aGUgZGlhbG9nLlxuXHQgKiBAcmV0dXJucyBUaGUgY29udGV4dC5cblx0ICovXG5cdHByaXZhdGUgZ2VuZXJhdGVMaXN0QmluZGluZygpOiBPRGF0YUxpc3RCaW5kaW5nIHtcblx0XHRjb25zdCBsaXN0QmluZGluZyA9IHRoaXMudGFibGUuZ2V0Um93QmluZGluZygpO1xuXHRcdGNvbnN0IHRyYW5zaWVudExpc3RCaW5kaW5nID0gKHRoaXMudGFibGUuZ2V0TW9kZWwoKSBhcyBPRGF0YU1vZGVsKS5iaW5kTGlzdChcblx0XHRcdGxpc3RCaW5kaW5nLmdldFBhdGgoKSxcblx0XHRcdGxpc3RCaW5kaW5nLmdldENvbnRleHQoKSxcblx0XHRcdFtdLFxuXHRcdFx0W10sXG5cdFx0XHR7XG5cdFx0XHRcdCQkdXBkYXRlR3JvdXBJZDogXCJzdWJtaXRMYXRlclwiXG5cdFx0XHR9XG5cdFx0KTtcblx0XHR0cmFuc2llbnRMaXN0QmluZGluZy5yZWZyZXNoSW50ZXJuYWwgPSAoKTogdm9pZCA9PiB7XG5cdFx0XHQvKiAqL1xuXHRcdH07XG5cdFx0cmV0dXJuIHRyYW5zaWVudExpc3RCaW5kaW5nO1xuXHR9XG5cblx0LyoqXG5cdCAqIENyZWF0ZXMgdGhlIGRpYWxvZy5cblx0ICogQHJldHVybnMgVGhlIGluc3RhbmNlIG9mIGRpYWxvZy5cblx0ICovXG5cdGFzeW5jIGNyZWF0ZSgpOiBQcm9taXNlPERpYWxvZz4ge1xuXHRcdGlmICghdGhpcy5kaWFsb2cpIHtcblx0XHRcdGNvbnN0IGNvcmVSZXNvdXJjZUJ1bmRsZSA9IExpYnJhcnkuZ2V0UmVzb3VyY2VCdW5kbGVGb3IoXCJzYXAuZmUuY29yZVwiKSBhcyBSZXNvdXJjZUJ1bmRsZTtcblx0XHRcdGNvbnN0IGFwcGx5QnV0dG9uVGV4dCA9XG5cdFx0XHRcdHRoaXMudmlldy5nZXRWaWV3RGF0YSgpLmNvbnZlcnRlclR5cGUgPT09IFwiTGlzdFJlcG9ydFwiXG5cdFx0XHRcdFx0PyB0aGlzLnJlc291cmNlTW9kZWwuZ2V0VGV4dChcIkNfTUFTU19FRElUX1NBVkVfQlVUVE9OX1RFWFRcIilcblx0XHRcdFx0XHQ6IGNvcmVSZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19DT01NT05fRElBTE9HX09LXCIpO1xuXHRcdFx0Y29uc3QgZGlhbG9nQ29udGVudCA9IGF3YWl0IHRoaXMuY3JlYXRlQ29udGVudCgpO1xuXHRcdFx0Y29uc3QgZGlhbG9nID0gKFxuXHRcdFx0XHQ8RGlhbG9nXG5cdFx0XHRcdFx0ZHQ6ZGVzaWdudGltZT1cInNhcC9mZS9tYWNyb3MvdGFibGUvbWFzc0VkaXQvZGVzaWdudGltZS9NYXNzRWRpdC5kZXNpZ250aW1lXCJcblx0XHRcdFx0XHRpZD17SUQuZ2VuZXJhdGUoW3RoaXMudGFibGUuZ2V0SWQoKSwgXCJNRURfXCIsIFwiRGlhbG9nXCJdKX1cblx0XHRcdFx0XHRjb250ZW50V2lkdGg9XCIyN3JlbVwiXG5cdFx0XHRcdFx0Y2xhc3M9XCJzYXBVaUNvbnRlbnRQYWRkaW5nXCJcblx0XHRcdFx0XHRob3Jpem9udGFsU2Nyb2xsaW5nPVwiZmFsc2VcIlxuXHRcdFx0XHRcdHRpdGxlPXt0aGlzLnJlc291cmNlTW9kZWwuZ2V0VGV4dChcIkNfTUFTU19FRElUX0RJQUxPR19USVRMRVwiLCBbdGhpcy5jb250ZXh0cy5sZW5ndGgudG9TdHJpbmcoKV0pfVxuXHRcdFx0XHRcdGNvbnRlbnQ9e2RpYWxvZ0NvbnRlbnR9XG5cdFx0XHRcdFx0ZXNjYXBlSGFuZGxlcj17dGhpcy5vbkNsb3NlLmJpbmQodGhpcyl9XG5cdFx0XHRcdFx0YmVmb3JlT3Blbj17dGhpcy5iZWZvcmVPcGVuLmJpbmQodGhpcyl9XG5cdFx0XHRcdFx0YmVnaW5CdXR0b249ezxCdXR0b24gdGV4dD17YXBwbHlCdXR0b25UZXh0fSB0eXBlPVwiRW1waGFzaXplZFwiIHByZXNzPXt0aGlzLm9uQXBwbHkuYmluZCh0aGlzKX0gLz59XG5cdFx0XHRcdFx0ZW5kQnV0dG9uPXs8QnV0dG9uIHRleHQ9e2NvcmVSZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19DT01NT05fT0JKRUNUX1BBR0VfQ0FOQ0VMXCIpfSBwcmVzcz17dGhpcy5vbkNsb3NlLmJpbmQodGhpcyl9IC8+fVxuXHRcdFx0XHQvPlxuXHRcdFx0KTtcblx0XHRcdHRoaXMuZGlhbG9nID0gZGlhbG9nO1xuXHRcdFx0Ly8gV2UgZG9uJ3Qgd2FudCB0byBpbmhlcml0IGZyb20gdGhlIFBhZ2VDb21wb25lbnQgZm9yIHRoZSB1aSBtb2RlbCAtPiBpbnRvIHRoaXMgZGlhbG9nLCBmaWVsZHMgYXJlIGVkaXRhYmxlXG5cdFx0XHRkaWFsb2cuc2V0TW9kZWwobmV3IEpTT05Nb2RlbCh7IGlzRWRpdGFibGU6IHRydWUgfSksIFwidWlcIik7XG5cdFx0XHRkaWFsb2cuYmluZEVsZW1lbnQoe1xuXHRcdFx0XHRwYXRoOiBcIi9cIixcblx0XHRcdFx0bW9kZWw6IFwidWlcIlxuXHRcdFx0fSk7XG5cdFx0XHRyZXR1cm4gZGlhbG9nO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcy5kaWFsb2c7XG5cdH1cblxuXHQvKipcblx0ICogU2V0cyB0aGUgbGFzdCBjb25maWd1cmF0aW9uIGJlZm9yZSBvcGVuaW5nIHRoZSBkaWFsb2c6XG5cdCAqICAtIHNldCB0aGUgcnVudGltZSBtb2RlbFxuXHQgKiAgLSBzZXQgdGhlIE9kYXRhTW9kZWxcblx0ICogIC0gYWRkIHRoZSBkaWFsb2cgYXMgZGVwZW5kZW50IG9mIHRoZSB0YWJsZS5cblx0ICogQHBhcmFtIGV2ZW50IFRoZSB1aTUgZXZlbnRcblx0ICovXG5cdHByaXZhdGUgYmVmb3JlT3BlbihldmVudDogVUk1RXZlbnQ8e30sIERpYWxvZz4pOiB2b2lkIHtcblx0XHRjb25zdCBkaWFsb2cgPSBldmVudC5nZXRTb3VyY2UoKTtcblx0XHRkaWFsb2cuc2V0TW9kZWwodGhpcy50YWJsZS5nZXRNb2RlbCgpKTtcblx0XHRkaWFsb2cuc2V0QmluZGluZ0NvbnRleHQodGhpcy5iaW5kaW5nQ29udGV4dCk7XG5cdFx0dGhpcy50YWJsZS5hZGREZXBlbmRlbnQoZGlhbG9nKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDbG9zZXMgYW5kIGRlc3Ryb3lzIHRoZSBkaWFsb2cuXG5cdCAqL1xuXHRwcml2YXRlIG9uQ2xvc2UoKTogdm9pZCB7XG5cdFx0dGhpcy50cmFuc2llbnRMaXN0QmluZGluZy5kZXN0cm95KCk7XG5cdFx0aWYgKHRoaXMuZGlhbG9nKSB7XG5cdFx0XHR0aGlzLmRpYWxvZy5jbG9zZSgpO1xuXHRcdFx0dGhpcy5kaWFsb2cuZGVzdHJveSgpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSBwcm9taXNlIG9mIHRoZSByZXF1aXJlZCBkYXRhLlxuXHQgKiBUaGlzIHByb21pc2UgaXMgcmVzb2x2ZWQgd2hlbiB0aGUgcmVxdWlyZWQgZGF0YSBpcyBsb2FkZWQuXG5cdCAqIFRoaXMgZGF0YSBhcmUgdXNlZCBvbiB0aGUgc2F2ZSB3b3JrZmxvdyB0byBkZXRlcm1pbmUgaWYgdGhlIG5ldyBkYXRhIGhhcyB0byBiZSBzYXZlZCBvciBub3QuXG5cdCAqIFRoZSBzYXZlIHdvcmtmbG93IGlzIGV4ZWN1dGVkIG9ubHkgaWYgdGhpcyBwcm9taXNlIGlzIHJlc29sdmVkLlxuXHQgKiBAcmV0dXJucyBUaGUgcHJvbWlzZSBvZiB0aGUgcmVxdWlyZWQgZGF0YS5cblx0ICovXG5cdGdldFJlcXVpcmVkRGF0YVByb21pc2UoKTogUHJvbWlzZUtlZXBlcjx2b2lkPiB7XG5cdFx0cmV0dXJuIHRoaXMucmVxdWlyZWREYXRhUHJvbWlzZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBNYW5hZ2VzIHRoZSBtZXNzYWdlcyBhY2NvcmRpbmcgdG8gdGhlIGNvbnRleHRzIG9uIGVycm9yLlxuXHQgKi9cblx0YXN5bmMgbWFuYWdlTWVzc2FnZSgpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRjb25zdCBjb3JlUmVzb3VyY2VCdW5kbGUgPSBMaWJyYXJ5LmdldFJlc291cmNlQnVuZGxlRm9yKFwic2FwLmZlLmNvcmVcIikgYXMgUmVzb3VyY2VCdW5kbGU7XG5cdFx0Y29uc3QgY29udHJvbGxlciA9IHRoaXMudmlldy5nZXRDb250cm9sbGVyKCk7XG5cdFx0Y29uc3QgRHJhZnRTdGF0dXMgPSBGRUxpYnJhcnkuRHJhZnRTdGF0dXM7XG5cdFx0Y29uc3QgaW50ZXJuYWxNb2RlbENvbnRleHQgPSB0aGlzLnZpZXcuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKTtcblx0XHRpbnRlcm5hbE1vZGVsQ29udGV4dD8uc2V0UHJvcGVydHkoXCJnZXRCb3VuZE1lc3NhZ2VzRm9yTWFzc0VkaXRcIiwgdHJ1ZSk7XG5cdFx0YXdhaXQgY29udHJvbGxlci5tZXNzYWdlSGFuZGxlci5zaG93TWVzc2FnZXMoe1xuXHRcdFx0b25CZWZvcmVTaG93TWVzc2FnZTogKFxuXHRcdFx0XHRtZXNzYWdlczogTWVzc2FnZVtdLFxuXHRcdFx0XHRzaG93TWVzc2FnZVBhcmFtZXRlcnM6IHtcblx0XHRcdFx0XHRmbkdldE1lc3NhZ2VTdWJ0aXRsZT86IEZ1bmN0aW9uO1xuXHRcdFx0XHRcdHNob3dNZXNzYWdlQm94PzogYm9vbGVhbjtcblx0XHRcdFx0XHRzaG93TWVzc2FnZURpYWxvZz86IGJvb2xlYW47XG5cdFx0XHRcdFx0ZmlsdGVyZWRNZXNzYWdlcz86IE1lc3NhZ2VbXTtcblx0XHRcdFx0XHRzaG93Q2hhbmdlU2V0RXJyb3JEaWFsb2c/OiBib29sZWFuO1xuXHRcdFx0XHR9XG5cdFx0XHQpID0+IHtcblx0XHRcdFx0c2hvd01lc3NhZ2VQYXJhbWV0ZXJzLmZuR2V0TWVzc2FnZVN1YnRpdGxlID0gbWVzc2FnZUhhbmRsaW5nLnNldE1lc3NhZ2VTdWJ0aXRsZS5iaW5kKHt9LCB0aGlzLnRhYmxlLCB0aGlzLmNvbnRleHRzKTtcblxuXHRcdFx0XHRpZiAoIXRoaXMuY29udGV4dHNPbkVycm9yLmxlbmd0aCkge1xuXHRcdFx0XHRcdGlmICh0aGlzLnVwZGF0ZWRQcm9wZXJ0aWVzLnNpemUgPiAwKSB7XG5cdFx0XHRcdFx0XHQvL1RoZXJlIGlzIGF0IGxlYXN0IG9uZSBuZXcgdmFsdWUgc2V0XG5cdFx0XHRcdFx0XHRjb250cm9sbGVyLmVkaXRGbG93LnNldERyYWZ0U3RhdHVzKERyYWZ0U3RhdHVzLlNhdmVkKTtcblx0XHRcdFx0XHRcdGlmICh0aGlzLnZpZXcuZ2V0Vmlld0RhdGEoKS5jb252ZXJ0ZXJUeXBlID09PSBcIkxpc3RSZXBvcnRcIikge1xuXHRcdFx0XHRcdFx0XHRNZXNzYWdlVG9hc3Quc2hvdyh0aGlzLnJlc291cmNlTW9kZWwuZ2V0VGV4dChcIkNfTUFTU19FRElUX1NVQ0NFU1NfVE9BU1RcIikpO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0TWVzc2FnZVRvYXN0LnNob3codGhpcy5yZXNvdXJjZU1vZGVsLmdldFRleHQoXCJDX09CSkVDVF9QQUdFX01BU1NfRURJVF9TVUNDRVNTX1RPQVNUXCIpKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0TWVzc2FnZVRvYXN0LnNob3codGhpcy5yZXNvdXJjZU1vZGVsLmdldFRleHQoXCJDX01BU1NfRURJVF9OT19DSEFOR0VcIikpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIGlmICh0aGlzLmNvbnRleHRzT25FcnJvci5sZW5ndGggPCB0aGlzLmNvbnRleHRzLmxlbmd0aCkge1xuXHRcdFx0XHRcdGNvbnRyb2xsZXIuZWRpdEZsb3cuc2V0RHJhZnRTdGF0dXMoRHJhZnRTdGF0dXMuU2F2ZWQpO1xuXHRcdFx0XHR9IGVsc2UgaWYgKHRoaXMuY29udGV4dHNPbkVycm9yLmxlbmd0aCA9PT0gdGhpcy5jb250ZXh0cy5sZW5ndGgpIHtcblx0XHRcdFx0XHRjb250cm9sbGVyLmVkaXRGbG93LnNldERyYWZ0U3RhdHVzKERyYWZ0U3RhdHVzLkNsZWFyKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChDb21tb25VdGlscy5nZXRJc0VkaXRhYmxlKGNvbnRyb2xsZXIpICYmICFtZXNzYWdlcy5zb21lKChtZXNzYWdlKSA9PiAhbWVzc2FnZS5nZXRUYXJnZXRzKCkpKSB7XG5cdFx0XHRcdFx0c2hvd01lc3NhZ2VQYXJhbWV0ZXJzLnNob3dNZXNzYWdlQm94ID0gZmFsc2U7XG5cdFx0XHRcdFx0c2hvd01lc3NhZ2VQYXJhbWV0ZXJzLnNob3dNZXNzYWdlRGlhbG9nID0gZmFsc2U7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIHNob3dNZXNzYWdlUGFyYW1ldGVycztcblx0XHRcdH1cblx0XHR9KTtcblxuXHRcdGlmICghIXRoaXMuY29udGV4dHNPbkVycm9yLmxlbmd0aCAmJiB0aGlzLmNvbnRleHRzT25FcnJvci5sZW5ndGggPCB0aGlzLmNvbnRleHRzLmxlbmd0aCkge1xuXHRcdFx0Y29uc3QgY29uZmlybUJ1dHRvblR4dCA9IGNvcmVSZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19DT01NT05fRElBTE9HX09LXCIpO1xuXHRcdFx0TWVzc2FnZUJveC5zdWNjZXNzKFxuXHRcdFx0XHR0aGlzLnJlc291cmNlTW9kZWwuZ2V0VGV4dChcIkNfTUFTU19FRElUX0NIQU5HRVNfV0lUSF9FUlJPUlwiLCBbXG5cdFx0XHRcdFx0dGhpcy5jb250ZXh0cy5sZW5ndGggLSB0aGlzLmNvbnRleHRzT25FcnJvci5sZW5ndGgsXG5cdFx0XHRcdFx0dGhpcy5jb250ZXh0cy5sZW5ndGhcblx0XHRcdFx0XSksXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRhY3Rpb25zOiBbY29uZmlybUJ1dHRvblR4dF0sXG5cdFx0XHRcdFx0ZW1waGFzaXplZEFjdGlvbjogY29uZmlybUJ1dHRvblR4dFxuXHRcdFx0XHR9XG5cdFx0XHQpO1xuXHRcdH1cblx0XHRpbnRlcm5hbE1vZGVsQ29udGV4dD8uc2V0UHJvcGVydHkoXCJnZXRCb3VuZE1lc3NhZ2VzRm9yTWFzc0VkaXRcIiwgZmFsc2UpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNhdmVzIHRoZSByZWxldmFudCBjb250ZXh0cyBhbmQgcmVmcmVzaGVzIHRoZSBhc3NvY2lhdGVkIHByb3BlcnRpZXMuXG5cdCAqIEBwYXJhbSBmaWVsZFZhbHVlc0luZm8gVGhlIGluZm9ybWF0aW9uIG9mIHRoZSB2YWx1ZXMgZm9yIGFsbCBtYXNzIGVkaXQgZmllbGRzLlxuXHQgKiBAcmV0dXJucyBBIFByb21pc2UuXG5cdCAqL1xuXHRwcml2YXRlIGFzeW5jIHNhdmVDaGFuZ2VzKGZpZWxkVmFsdWVzSW5mbzogRmllbGRWYWx1ZXNJbmZvKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0Y29uc3QgbWFuaWZlc3RTZXR0aW5ncyA9ICh0aGlzLnRhYmxlLmdldFBhcmVudCgpIGFzIFRhYmxlQVBJKS5nZXRUYWJsZURlZmluaXRpb24oKS5jb250cm9sLm1hc3NFZGl0O1xuXHRcdGNvbnN0IGlzSXNvbGF0ZWQgPSBtYW5pZmVzdFNldHRpbmdzLm9wZXJhdGlvbkdyb3VwaW5nTW9kZSA9PT0gT3BlcmF0aW9uR3JvdXBpbmdNb2RlLklzb2xhdGVkO1xuXHRcdGNvbnN0IGlzb2xhdGVkR3JvdXBJZCA9IFwiJGF1dG8uSXNvbGF0ZWRcIjtcblx0XHRjb25zdCBtYXNzRWRpdFNpZGVFZmZlY3RzID0gbmV3IE1hc3NFZGl0U2lkZUVmZmVjdHModGhpcyk7IC8vIFVzZSB0aGUgZmlyc3QgbGluZSBhcyByZWZlcmVuY2UgY29udGV4dCB0byBjYWxjdWxhdGUgdGhlIG1hcCBvZiBzaWRlIGVmZmVjdHNcblx0XHRjb25zdCBmaWVsZFByb21pc2VzOiBQcm9taXNlPHVua25vd24+W10gPSBbXTtcblx0XHRjb25zdCBtb2RlbCA9IHRoaXMudGFibGUuZ2V0TW9kZWwoKSBhcyBPRGF0YU1vZGVsO1xuXG5cdFx0aWYgKGlzSXNvbGF0ZWQpIHtcblx0XHRcdG1vZGVsLnNldENvbnRpbnVlT25FcnJvcihpc29sYXRlZEdyb3VwSWQpO1xuXHRcdH1cblx0XHR0aGlzLmNvbnRleHRzLmZvckVhY2goKHNlbGVjdGVkQ29udGV4dDogT0RhdGFWNENvbnRleHQpID0+IHtcblx0XHRcdGNvbnN0IGltbWVkaWF0ZVNpZGVFZmZlY3RzOiB7IHByb3BlcnR5UGF0aDogc3RyaW5nOyBncm91cElkOiBzdHJpbmcgfVtdID0gW107XG5cdFx0XHRjb25zdCByZWZyZXNoRGVzY3JpcHRpb25zOiB7IGNvbnRyb2w6IE1hc3NFZGl0RmllbGQ7IGdyb3VwSWQ6IHN0cmluZyB9W10gPSBbXTtcblx0XHRcdGZvciAoY29uc3QgeyBjb250cm9sLCB2YWx1ZXMgfSBvZiBmaWVsZFZhbHVlc0luZm8uZmllbGRDb250cm9sUmVmZXJlbmNlKSB7XG5cdFx0XHRcdGxldCB2YWx1ZUhhc0NoYW5nZWQgPSBmYWxzZTtcblx0XHRcdFx0aWYgKCFjb250cm9sLmlzUmVhZE9ubHlPbkNvbnRleHQoc2VsZWN0ZWRDb250ZXh0KSkge1xuXHRcdFx0XHRcdGNvbnN0IGdyb3VwSWQgPSBpc0lzb2xhdGVkID8gaXNvbGF0ZWRHcm91cElkIDogXCIkYXV0b1wiO1xuXHRcdFx0XHRcdGZvciAoY29uc3QgcHJvcGVydHlQYXRoIGluIHZhbHVlcykge1xuXHRcdFx0XHRcdFx0aWYgKHNlbGVjdGVkQ29udGV4dC5nZXRQcm9wZXJ0eShwcm9wZXJ0eVBhdGgpICE9PSB2YWx1ZXNbcHJvcGVydHlQYXRoXSkge1xuXHRcdFx0XHRcdFx0XHR2YWx1ZUhhc0NoYW5nZWQgPSB0cnVlO1xuXHRcdFx0XHRcdFx0XHRmaWVsZFByb21pc2VzLnB1c2goXG5cdFx0XHRcdFx0XHRcdFx0c2VsZWN0ZWRDb250ZXh0XG5cdFx0XHRcdFx0XHRcdFx0XHQuc2V0UHJvcGVydHkocHJvcGVydHlQYXRoLCB2YWx1ZXNbcHJvcGVydHlQYXRoXSwgZ3JvdXBJZClcblx0XHRcdFx0XHRcdFx0XHRcdC50aGVuKCgpID0+IHRoaXMudXBkYXRlZFByb3BlcnRpZXMuYWRkKHByb3BlcnR5UGF0aCkpXG5cdFx0XHRcdFx0XHRcdFx0XHQuY2F0Y2goKGVycm9yOiB1bmtub3duKSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRoaXMuY29udGV4dHNPbkVycm9yLnB1c2goc2VsZWN0ZWRDb250ZXh0KTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0TG9nLmVycm9yKFwiTWFzcyBFZGl0OiBTb21ldGhpbmcgd2VudCB3cm9uZyBpbiB1cGRhdGluZyBlbnRyaWVzLlwiLCBlcnJvciBhcyBzdHJpbmcpO1xuXHRcdFx0XHRcdFx0XHRcdFx0fSlcblx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0aW1tZWRpYXRlU2lkZUVmZmVjdHMucHVzaCh7XG5cdFx0XHRcdFx0XHRcdFx0cHJvcGVydHlQYXRoLFxuXHRcdFx0XHRcdFx0XHRcdGdyb3VwSWRcblx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGlmICh2YWx1ZUhhc0NoYW5nZWQpIHtcblx0XHRcdFx0XHRcdHJlZnJlc2hEZXNjcmlwdGlvbnMucHVzaCh7IGNvbnRyb2wsIGdyb3VwSWQgfSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRmaWVsZFByb21pc2VzLnB1c2goXG5cdFx0XHRcdC4uLmltbWVkaWF0ZVNpZGVFZmZlY3RzLm1hcChhc3luYyAoaW1tZWRpYXRlU2lkZUVmZmVjdCkgPT5cblx0XHRcdFx0XHRtYXNzRWRpdFNpZGVFZmZlY3RzLmV4ZWN1dGVJbW1lZGlhdGVTaWRlRWZmZWN0cyhcblx0XHRcdFx0XHRcdHNlbGVjdGVkQ29udGV4dCxcblx0XHRcdFx0XHRcdGltbWVkaWF0ZVNpZGVFZmZlY3QucHJvcGVydHlQYXRoLFxuXHRcdFx0XHRcdFx0aW1tZWRpYXRlU2lkZUVmZmVjdC5ncm91cElkXG5cdFx0XHRcdFx0KVxuXHRcdFx0XHQpXG5cdFx0XHQpO1xuXHRcdFx0ZmllbGRQcm9taXNlcy5wdXNoKFxuXHRcdFx0XHQuLi5yZWZyZXNoRGVzY3JpcHRpb25zLm1hcChhc3luYyAocmVmcmVzaERlc2NyaXB0aW9uKSA9PlxuXHRcdFx0XHRcdG1hc3NFZGl0U2lkZUVmZmVjdHMucmVmcmVzaERlc2NyaXB0aW9uKHJlZnJlc2hEZXNjcmlwdGlvbi5jb250cm9sLCBzZWxlY3RlZENvbnRleHQsIHJlZnJlc2hEZXNjcmlwdGlvbi5ncm91cElkKVxuXHRcdFx0XHQpXG5cdFx0XHQpO1xuXHRcdFx0aWYgKGlzSXNvbGF0ZWQpIHtcblx0XHRcdFx0Ly9DcmVhdGUgYSBuZXcgQ2hhbmdlU2V0IGZvciB0aGUgbmV4dCByZXF1ZXN0c1xuXHRcdFx0XHRtb2RlbC5zdWJtaXRCYXRjaChpc29sYXRlZEdyb3VwSWQpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0YXdhaXQgUHJvbWlzZS5hbGxTZXR0bGVkKGZpZWxkUHJvbWlzZXMpO1xuXHRcdGlmICh0aGlzLnVwZGF0ZWRQcm9wZXJ0aWVzLnNpemUpIHtcblx0XHRcdG1hc3NFZGl0U2lkZUVmZmVjdHMuZXhlY3V0ZURlZmVycmVkU2lkZUVmZmVjdHMobmV3IFNldChbXCJnZW5lcmljRmllbGRcIiwgLi4uQXJyYXkuZnJvbSh0aGlzLnVwZGF0ZWRQcm9wZXJ0aWVzKV0pKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgaW5mb3JtYXRpb24gb2YgdGhlIHZhbHVlcyBmb3IgYWxsIG1hc3MgZWRpdCBmaWVsZHMuXG5cdCAqIEByZXR1cm5zIFRoZSBpbmZvcm1hdGlvbi5cblx0ICovXG5cdHByaXZhdGUgZ2V0RmllbGRWYWx1ZXNJbmZvcygpOiBGaWVsZFZhbHVlc0luZm8ge1xuXHRcdGNvbnN0IHJlc3VsdCA9IHtcblx0XHRcdHZhbHVlczoge30sXG5cdFx0XHRmaWVsZENvbnRyb2xSZWZlcmVuY2U6IFtdXG5cdFx0fSBhcyBGaWVsZFZhbHVlc0luZm87XG5cdFx0Zm9yIChjb25zdCBmaWVsZENvbnRyb2wgb2YgdGhpcy5maWVsZENvbnRyb2xzKSB7XG5cdFx0XHRjb25zdCBmaWVsZFZhbHVlcyA9IGZpZWxkQ29udHJvbC5nZXRGaWVsZFZhbHVlcygpO1xuXHRcdFx0cmVzdWx0LnZhbHVlcyA9IHsgLi4ucmVzdWx0LnZhbHVlcywgLi4uZmllbGRWYWx1ZXMgfTtcblx0XHRcdHJlc3VsdC5maWVsZENvbnRyb2xSZWZlcmVuY2UucHVzaCh7IGNvbnRyb2w6IGZpZWxkQ29udHJvbCwgdmFsdWVzOiBmaWVsZFZhbHVlcyB9KTtcblx0XHR9XG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdC8qKlxuXHQgKiBVcGRhdGVzIHRoZSB0YWJsZSBmaWVsZHMgYWNjb3JkaW5nIHRvIHRoZSBkaWFsb2cgZW50cmllcy5cblx0ICogQHJldHVybnMgYHRydWVgIGlmIHRoZSBjdXN0b20gc2F2ZSBpcyBleGVjdXRlZCwgYGZhbHNlYCBvdGhlcndpc2UuXG5cdCAqL1xuXHRhc3luYyBhcHBseUNoYW5nZXMoKTogUHJvbWlzZTxib29sZWFuPiB7XG5cdFx0YXdhaXQgdGhpcy5yZXF1aXJlZERhdGFQcm9taXNlLnByb21pc2U7IC8vIFdlIG5lZWQgdG8gd2FpdCBmb3IgdGhlIHJlcXVpcmVkIGRhdGEgdG8gYmUgbG9hZGVkIGJlZm9yZSBzYXZpbmcuXG5cdFx0Ly9XZSB3YW50IHRvIHNraXAgdGhlIHBhdGNoIGhhbmRsZXIoc3BlY2lmaWMgd29ya2Zsb3cgZG9uZSBpbnRvIHRoZSBFZGl0Rmxvdykgc2luY2UgdGhlIHBhdGNoIGlzIG1hbmFnZWQgaGVyZVxuXHRcdHRoaXMudmlldy5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpPy5zZXRQcm9wZXJ0eShcInNraXBQYXRjaEhhbmRsZXJzXCIsIHRydWUpO1xuXG5cdFx0Y29uc3QgZmllbGRzVmFsdWVzSW5mbyA9IHRoaXMuZ2V0RmllbGRWYWx1ZXNJbmZvcygpO1xuXHRcdGxldCBjdXN0b21TYXZlID0gZmFsc2U7XG5cdFx0dHJ5IHtcblx0XHRcdGN1c3RvbVNhdmUgPSBhd2FpdCB0aGlzLnZpZXdcblx0XHRcdFx0LmdldENvbnRyb2xsZXIoKVxuXHRcdFx0XHQuZWRpdEZsb3cuY3VzdG9tTWFzc0VkaXRTYXZlKHsgYUNvbnRleHRzOiB0aGlzLmNvbnRleHRzLCBvVXBkYXRlRGF0YTogZmllbGRzVmFsdWVzSW5mby52YWx1ZXMgfSk7XG5cdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdExvZy5lcnJvcihcIk1hc3MgRWRpdDogU29tZXRoaW5nIHdlbnQgd3JvbmcgaW4gdXBkYXRpbmcgZW50cmllcy5cIiwgZXJyb3IgYXMgc3RyaW5nKTtcblx0XHR9XG5cdFx0aWYgKCFjdXN0b21TYXZlKSB7XG5cdFx0XHRhd2FpdCB0aGlzLnNhdmVDaGFuZ2VzKGZpZWxkc1ZhbHVlc0luZm8pO1xuXHRcdH1cblx0XHR0aGlzLnZpZXcuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKT8uc2V0UHJvcGVydHkoXCJza2lwUGF0Y2hIYW5kbGVyc1wiLCBmYWxzZSk7XG5cdFx0cmV0dXJuIGN1c3RvbVNhdmU7XG5cdH1cblxuXHQvKipcblx0ICogTWFuYWdlcyB0aGUgcHJlc3Mgb24gdGhlIEFwcGx5IEJ1dHRvbi5cblx0ICogQHJldHVybnMgQSBwcm9taXNlLlxuXHQgKi9cblx0cHJpdmF0ZSBhc3luYyBvbkFwcGx5KCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGlmICh0aGlzLmZpZWxkQ29udHJvbHMuc29tZSgoZmllbGRDb250cm9sKSA9PiAhZmllbGRDb250cm9sLmlzRmllbGRWYWxpZCgpKSkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRpZiAoIXRoaXMuaXNBZGFwdGF0aW9uKSB7XG5cdFx0XHRtZXNzYWdlSGFuZGxpbmcucmVtb3ZlQm91bmRUcmFuc2l0aW9uTWVzc2FnZXMoKTtcblx0XHRcdG1lc3NhZ2VIYW5kbGluZy5yZW1vdmVVbmJvdW5kVHJhbnNpdGlvbk1lc3NhZ2VzKCk7XG5cdFx0XHRjb25zdCBpc0N1c3RvbVNhdmUgPSBhd2FpdCB0aGlzLmFwcGx5Q2hhbmdlcygpO1xuXHRcdFx0aWYgKCFpc0N1c3RvbVNhdmUpIHtcblx0XHRcdFx0dGhpcy5tYW5hZ2VNZXNzYWdlKCk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHRoaXMub25DbG9zZSgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENyZWF0ZXMgdGhlIGRpYWxvZyBjb250ZW50LlxuXHQgKiBAcmV0dXJucyBQcm9taXNlIHJldHVybmluZyBpbnN0YW5jZSBvZiBmcmFnbWVudC5cblx0ICovXG5cblx0cHJpdmF0ZSBhc3luYyBjcmVhdGVDb250ZW50KCk6IFByb21pc2U8Rm9ybT4ge1xuXHRcdGNvbnN0IGN1c3RvbUZvcm1Db250YWluZXIgPSBhd2FpdCB0aGlzLmNyZWF0ZUN1c3RvbUNvbnRhaW5lcigpO1xuXHRcdHJldHVybiAoXG5cdFx0XHQ8PlxuXHRcdFx0XHR7dGhpcy5nZXRBZGFwdGF0aW9uTWVzc2FnZSgpfVxuXHRcdFx0XHQ8Rm9ybT5cblx0XHRcdFx0XHR7e1xuXHRcdFx0XHRcdFx0bGF5b3V0OiA8UmVzcG9uc2l2ZUdyaWRMYXlvdXQgbGFiZWxTcGFuTT1cIjEyXCIgbGFiZWxTcGFuTD1cIjEyXCIgbGFiZWxTcGFuWEw9XCIxMlwiIC8+LFxuXHRcdFx0XHRcdFx0Zm9ybUNvbnRhaW5lcnM6IChcblx0XHRcdFx0XHRcdFx0PD5cblx0XHRcdFx0XHRcdFx0XHR7Y3VzdG9tRm9ybUNvbnRhaW5lcn1cblx0XHRcdFx0XHRcdFx0XHQ8Rm9ybUNvbnRhaW5lcj5cblx0XHRcdFx0XHRcdFx0XHRcdHt7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGZvcm1FbGVtZW50czogdGhpcy5jcmVhdGVGb3JtRWxlbWVudHMoKVxuXHRcdFx0XHRcdFx0XHRcdFx0fX1cblx0XHRcdFx0XHRcdFx0XHQ8L0Zvcm1Db250YWluZXI+XG5cdFx0XHRcdFx0XHRcdDwvPlxuXHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdH19XG5cdFx0XHRcdDwvRm9ybT5cblx0XHRcdDwvPlxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgYWRhcHRhdGlvbiBtZXNzYWdlLlxuXHQgKiBAcmV0dXJucyBUaGUgbWVzc2FnZSBzdHJpcCBpZiB0aGUgZGlhbG9nIGlzIGRpc3BsYXllZCBpbiBhZGFwdGF0aW9uIG1vZGUuXG5cdCAqL1xuXHRwcml2YXRlIGdldEFkYXB0YXRpb25NZXNzYWdlKCk6IE1lc3NhZ2VTdHJpcCB8IHVuZGVmaW5lZCB7XG5cdFx0aWYgKHRoaXMuaXNBZGFwdGF0aW9uKSB7XG5cdFx0XHRyZXR1cm4gPE1lc3NhZ2VTdHJpcCB0ZXh0PXt0aGlzLnJlc291cmNlTW9kZWwuZ2V0VGV4dChcIkNfTUFTU19FRElUX0FEQVBUQVRJT05fTU9ERVwiKX0gLz47XG5cdFx0fVxuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cblxuXHQvKipcblx0ICogQ3JlYXRlcyB0aGUgY3VzdG9tIGZvcm0gY29udGFpbmVyIGFjY29yZGluZyB0byB0aGUgbWFuaWZlc3Qgc2V0dGluZ3MuXG5cdCAqIEByZXR1cm5zIFRoZSBjdXN0b20gZm9ybSBjb250YWluZXIuXG5cdCAqL1xuXHRwcml2YXRlIGFzeW5jIGNyZWF0ZUN1c3RvbUNvbnRhaW5lcigpOiBQcm9taXNlPEZvcm1Db250YWluZXIgfCB1bmRlZmluZWQ+IHtcblx0XHRjb25zdCBtYW5pZmVzdFNldHRpbmdzID0gKHRoaXMudGFibGUuZ2V0UGFyZW50KCkgYXMgVGFibGVBUEkpLmdldFRhYmxlRGVmaW5pdGlvbigpLmNvbnRyb2wubWFzc0VkaXQ7XG5cdFx0aWYgKG1hbmlmZXN0U2V0dGluZ3MuY3VzdG9tRnJhZ21lbnQpIHtcblx0XHRcdGlmIChtYW5pZmVzdFNldHRpbmdzLmZyb21JbmxpbmUgPT09IHRydWUpIHtcblx0XHRcdFx0Ly8gSW5saW5lIGNvbmZpZ3VyYXRpb24gZnJvbSBhIFYyIGJsb2NrOiB0aGUgZnJhZ21lbnQgaXMgYSBzdHJpbmdcblx0XHRcdFx0aWYgKHR5cGVvZiBtYW5pZmVzdFNldHRpbmdzLmN1c3RvbUZyYWdtZW50ID09PSBcInN0cmluZ1wiKSB7XG5cdFx0XHRcdFx0Y29uc3QgcmVzdWx0WE1MID0gYXdhaXQgWE1MUHJlcHJvY2Vzc29yLnByb2Nlc3MoXG5cdFx0XHRcdFx0XHRuZXcgRE9NUGFyc2VyKCkucGFyc2VGcm9tU3RyaW5nKG1hbmlmZXN0U2V0dGluZ3MuY3VzdG9tRnJhZ21lbnQsIFwidGV4dC94bWxcIikuZmlyc3RFbGVtZW50Q2hpbGQsXG5cdFx0XHRcdFx0XHR7IG1vZGVsczoge30gfSxcblx0XHRcdFx0XHRcdCh0aGlzLnZpZXcuZ2V0Q29udHJvbGxlcigpLmdldE93bmVyQ29tcG9uZW50KCkgYXMgRW5oYW5jZVdpdGhVSTU8VGVtcGxhdGVDb21wb25lbnQ+KS5nZXRQcmVwcm9jZXNzb3JDb250ZXh0KClcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdHJldHVybiAoYXdhaXQgRnJhZ21lbnQubG9hZCh7XG5cdFx0XHRcdFx0XHR0eXBlOiBcIlhNTFwiLFxuXHRcdFx0XHRcdFx0ZGVmaW5pdGlvbjogcmVzdWx0WE1MLFxuXHRcdFx0XHRcdFx0Y29udHJvbGxlcjogdGhpcy52aWV3LmdldENvbnRyb2xsZXIoKVxuXHRcdFx0XHRcdH0pKSBhcyB1bmtub3duIGFzIEZvcm1Db250YWluZXI7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Ly8gSW5saW5lIGNvbmZpZ3VyYXRpb24gZnJvbSBhIFY0IGJsb2NrOiB0aGUgZnJhZ21lbnQgaXMgYWxyZWFkeSBhIEZvcm1Db250YWluZXJcblx0XHRcdFx0XHRyZXR1cm4gbWFuaWZlc3RTZXR0aW5ncy5jdXN0b21GcmFnbWVudC5jbG9uZSgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gKGF3YWl0IHRoaXMudmlld1xuXHRcdFx0XHQuZ2V0Q29udHJvbGxlcigpXG5cdFx0XHRcdC5nZXRFeHRlbnNpb25BUEkoKVxuXHRcdFx0XHQubG9hZEZyYWdtZW50KHtcblx0XHRcdFx0XHRpZDogXCJjdXN0b21NYXNzRWRpdFwiLFxuXHRcdFx0XHRcdG5hbWU6IG1hbmlmZXN0U2V0dGluZ3MuY3VzdG9tRnJhZ21lbnQgYXMgc3RyaW5nLFxuXHRcdFx0XHRcdGNvbnRleHRQYXRoOiB0aGlzLnRyYW5zaWVudExpc3RCaW5kaW5nXG5cdFx0XHRcdFx0XHQuZ2V0TW9kZWwoKVxuXHRcdFx0XHRcdFx0LmdldE1ldGFNb2RlbCgpXG5cdFx0XHRcdFx0XHQuZ2V0TWV0YVBhdGgodGhpcy50cmFuc2llbnRMaXN0QmluZGluZy5nZXRSZXNvbHZlZFBhdGgoKSlcblx0XHRcdFx0fSkpIGFzIEZvcm1Db250YWluZXI7XG5cdFx0fVxuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cblxuXHQvKipcblx0ICogQ3JlYXRlcyB0aGUgZm9ybSBlbGVtZW50cyBvZiB0aGUgZGlhbG9nLlxuXHQgKiBAcmV0dXJucyBUaGUgZm9ybSBlbGVtZW50cy5cblx0ICovXG5cdHByaXZhdGUgY3JlYXRlRm9ybUVsZW1lbnRzKCk6IEZvcm1FbGVtZW50W10ge1xuXHRcdHJldHVybiB0aGlzLmZpZWxkUHJvcGVydGllcy5tYXAodGhpcy5jcmVhdGVGb3JtRWxlbWVudC5iaW5kKHRoaXMpKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIHRoZSBmb3JtIGVsZW1lbnRzIG9mIGEgRmllbGQuXG5cdCAqIEBwYXJhbSBmaWVsZEluZm8gVGhlIGZpZWxkIHByb3BlcnRpZXNcblx0ICogQHJldHVybnMgVGhlIGZvcm0gZWxlbWVudC5cblx0ICovXG5cdHByaXZhdGUgY3JlYXRlRm9ybUVsZW1lbnQoZmllbGRJbmZvOiBNYXNzRmllbGRQcm9wZXJ0aWVzKTogRm9ybUVsZW1lbnQge1xuXHRcdHJldHVybiAoXG5cdFx0XHQ8Rm9ybUVsZW1lbnQgdmlzaWJsZT17ZmllbGRJbmZvLnZpc2libGV9PlxuXHRcdFx0XHR7e1xuXHRcdFx0XHRcdGxhYmVsOiA8TGFiZWwgdGV4dD17ZmllbGRJbmZvLmxhYmVsfSBpZD17SUQuZ2VuZXJhdGUoW1wiTUVEX1wiLCBmaWVsZEluZm8ucHJvcGVydHlJbmZvLmtleSwgXCJMYWJlbFwiXSl9IC8+LFxuXHRcdFx0XHRcdGZpZWxkczogdGhpcy5jcmVhdGVGaWVsZHMoZmllbGRJbmZvKVxuXHRcdFx0XHR9fVxuXHRcdFx0PC9Gb3JtRWxlbWVudD5cblx0XHQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENyZWF0ZXMgdGhlIGZpZWxkcyBvZiB0aGUgZGlhbG9nLlxuXHQgKiBAcGFyYW0gZmllbGRJbmZvIFRoZSBmaWVsZCBwcm9wZXJ0aWVzXG5cdCAqIEByZXR1cm5zIFRoZSBmaWVsZHMuXG5cdCAqL1xuXHRwcml2YXRlIGNyZWF0ZUZpZWxkcyhmaWVsZEluZm86IE1hc3NGaWVsZFByb3BlcnRpZXMpOiBDb250cm9sW10ge1xuXHRcdGNvbnN0IG1ldGFNb2RlbCA9ICh0aGlzLnRhYmxlLmdldE1vZGVsKCkgYXMgT0RhdGFNb2RlbCkuZ2V0TWV0YU1vZGVsKCk7XG5cdFx0Y29uc3QgY29udGV4dCA9IG1ldGFNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChtZXRhTW9kZWwuZ2V0TWV0YVBhdGgodGhpcy5iaW5kaW5nQ29udGV4dC5nZXRQYXRoKCkpKSBhcyBDb250ZXh0O1xuXHRcdGNvbnN0IG1hc3NFZGl0RmllbGQgPSBuZXcgTWFzc0VkaXRGaWVsZChmaWVsZEluZm8sIGNvbnRleHQpO1xuXHRcdHRoaXMuZmllbGRDb250cm9scy5wdXNoKG1hc3NFZGl0RmllbGQpO1xuXHRcdHJldHVybiBtYXNzRWRpdEZpZWxkLmdldENvbnRyb2xzKCk7XG5cdH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O01BMkRxQkEsY0FBYztJQTJCbEM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7SUFDQyxTQUFBQSxlQUFZQyxLQUEyRixFQUFFO01BQUEsS0FqQ3hGQyxtQkFBbUIsR0FBRyxJQUFJQyxhQUFhLENBQU8sQ0FBQztNQUFBLEtBYy9DQyxpQkFBaUIsR0FBZ0IsSUFBSUMsR0FBRyxDQUFDLENBQUM7TUFvQjFELElBQUksQ0FBQ0MsTUFBTSxHQUFHQyxTQUFTO01BQ3ZCLElBQUksQ0FBQ0MsS0FBSyxHQUFHUCxLQUFLLENBQUNPLEtBQUs7TUFDeEIsSUFBSSxDQUFDQyxRQUFRLEdBQUdSLEtBQUssQ0FBQ1EsUUFBUTtNQUM5QixJQUFJ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