@sapui5/sap.fe.macros 1.141.0 → 1.142.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (217) hide show
  1. package/package.json +1 -1
  2. package/src/sap/fe/macros/.library +1 -1
  3. package/src/sap/fe/macros/Breadcrumbs.js +4 -10
  4. package/src/sap/fe/macros/Breadcrumbs.tsx +2 -8
  5. package/src/sap/fe/macros/Chart.js +34 -23
  6. package/src/sap/fe/macros/Chart.tsx +25 -11
  7. package/src/sap/fe/macros/CollaborativeDraftHandler.js +48 -31
  8. package/src/sap/fe/macros/CollaborativeDraftHandler.tsx +51 -26
  9. package/src/sap/fe/macros/CollectionBindingInfo.js +8 -2
  10. package/src/sap/fe/macros/CollectionBindingInfo.ts +11 -6
  11. package/src/sap/fe/macros/CommonHelper.js +14 -24
  12. package/src/sap/fe/macros/CommonHelper.ts +18 -25
  13. package/src/sap/fe/macros/Field.js +30 -13
  14. package/src/sap/fe/macros/Field.ts +60 -30
  15. package/src/sap/fe/macros/FooterContent.js +5 -2
  16. package/src/sap/fe/macros/FooterContent.tsx +6 -3
  17. package/src/sap/fe/macros/KPITag.js +1 -1
  18. package/src/sap/fe/macros/KPITag.tsx +3 -1
  19. package/src/sap/fe/macros/MacroAPI.js +3 -2
  20. package/src/sap/fe/macros/MacroAPI.ts +2 -2
  21. package/src/sap/fe/macros/MessageButton.js +3 -2
  22. package/src/sap/fe/macros/MessageButton.tsx +5 -2
  23. package/src/sap/fe/macros/MicroChart.js +10 -6
  24. package/src/sap/fe/macros/MicroChart.tsx +8 -2
  25. package/src/sap/fe/macros/MultiValueField.js +22 -36
  26. package/src/sap/fe/macros/MultiValueField.tsx +34 -66
  27. package/src/sap/fe/macros/RichTextEditor.js +3 -4
  28. package/src/sap/fe/macros/RichTextEditor.tsx +2 -3
  29. package/src/sap/fe/macros/Status.js +35 -8
  30. package/src/sap/fe/macros/Status.tsx +23 -2
  31. package/src/sap/fe/macros/ValueHelp.js +5 -2
  32. package/src/sap/fe/macros/ValueHelp.tsx +5 -0
  33. package/src/sap/fe/macros/ai/EasyFilterBar.js +7 -34
  34. package/src/sap/fe/macros/ai/EasyFilterBar.tsx +6 -35
  35. package/src/sap/fe/macros/ai/EasyFilterDataFetcher.js +31 -7
  36. package/src/sap/fe/macros/ai/EasyFilterDataFetcher.ts +33 -6
  37. package/src/sap/fe/macros/chart/Action.js +25 -2
  38. package/src/sap/fe/macros/chart/Action.ts +13 -0
  39. package/src/sap/fe/macros/chart/ActionGroup.js +25 -2
  40. package/src/sap/fe/macros/chart/ActionGroup.ts +13 -0
  41. package/src/sap/fe/macros/chart/ChartDelegate.js +8 -8
  42. package/src/sap/fe/macros/chart/ChartDelegate.ts +17 -12
  43. package/src/sap/fe/macros/chart/MdcChartTemplate.js +54 -11
  44. package/src/sap/fe/macros/chart/MdcChartTemplate.tsx +70 -11
  45. package/src/sap/fe/macros/chart/OverflowGroup.js +62 -0
  46. package/src/sap/fe/macros/chart/OverflowGroup.ts +22 -0
  47. package/src/sap/fe/macros/controls/FilterBar.js +39 -3
  48. package/src/sap/fe/macros/controls/FilterBar.ts +42 -1
  49. package/src/sap/fe/macros/controls/RadioButtons.js +18 -5
  50. package/src/sap/fe/macros/controls/RadioButtons.tsx +10 -1
  51. package/src/sap/fe/macros/coreUI/CreateDialog.js +2 -2
  52. package/src/sap/fe/macros/coreUI/CreateDialog.tsx +1 -1
  53. package/src/sap/fe/macros/coreUI/OperationParameterDialog.js +37 -9
  54. package/src/sap/fe/macros/coreUI/OperationParameterDialog.tsx +45 -6
  55. package/src/sap/fe/macros/draftIndicator/DraftIndicator.js +4 -2
  56. package/src/sap/fe/macros/draftIndicator/DraftIndicator.tsx +3 -1
  57. package/src/sap/fe/macros/field/FieldFormatOptions.js +3 -3
  58. package/src/sap/fe/macros/field/FieldFormatOptions.ts +1 -1
  59. package/src/sap/fe/macros/field/FieldHelper.js +4 -3
  60. package/src/sap/fe/macros/field/FieldHelper.ts +7 -1
  61. package/src/sap/fe/macros/field/FieldRuntime.js +38 -8
  62. package/src/sap/fe/macros/field/FieldRuntime.ts +65 -7
  63. package/src/sap/fe/macros/field/FieldRuntimeHelper.js +3 -34
  64. package/src/sap/fe/macros/field/FieldRuntimeHelper.ts +28 -53
  65. package/src/sap/fe/macros/field/FieldTemplating.js +5 -4
  66. package/src/sap/fe/macros/field/FieldTemplating.ts +6 -4
  67. package/src/sap/fe/macros/filter/FilterFieldHelper.js +6 -4
  68. package/src/sap/fe/macros/filter/FilterFieldHelper.ts +7 -2
  69. package/src/sap/fe/macros/filter/FilterUtils.js +100 -36
  70. package/src/sap/fe/macros/filter/FilterUtils.ts +127 -39
  71. package/src/sap/fe/macros/filterBar/ExtendedSemanticDateOperators.js +2 -2
  72. package/src/sap/fe/macros/filterBar/ExtendedSemanticDateOperators.ts +1 -1
  73. package/src/sap/fe/macros/filterBar/FilterBar.block.js +4 -3
  74. package/src/sap/fe/macros/filterBar/FilterBar.block.tsx +19 -8
  75. package/src/sap/fe/macros/filterBar/FilterBarAPI.js +10 -7
  76. package/src/sap/fe/macros/filterBar/FilterBarAPI.ts +31 -16
  77. package/src/sap/fe/macros/filterBar/FilterBarDelegate.js +4 -3
  78. package/src/sap/fe/macros/filterBar/FilterBarDelegate.ts +5 -2
  79. package/src/sap/fe/macros/filterBar/mixin/FilterBarAPIStateHandler.js +4 -3
  80. package/src/sap/fe/macros/filterBar/mixin/FilterBarAPIStateHandler.ts +3 -2
  81. package/src/sap/fe/macros/form/Form.block.js +27 -2
  82. package/src/sap/fe/macros/form/Form.block.ts +31 -11
  83. package/src/sap/fe/macros/form/FormActionButtons.fragment.xml +13 -3
  84. package/src/sap/fe/macros/form/FormContainer.block.js +96 -65
  85. package/src/sap/fe/macros/form/FormContainer.block.ts +104 -65
  86. package/src/sap/fe/macros/formatters/TableFormatter.js +13 -10
  87. package/src/sap/fe/macros/formatters/TableFormatter.ts +11 -9
  88. package/src/sap/fe/macros/formatters/VisualFilterFormatter.js +6 -4
  89. package/src/sap/fe/macros/formatters/VisualFilterFormatter.ts +5 -5
  90. package/src/sap/fe/macros/inlineEdit/InlineEdit.js +5 -5
  91. package/src/sap/fe/macros/inlineEdit/InlineEdit.ts +4 -4
  92. package/src/sap/fe/macros/insights/InsightsService.js +3 -2
  93. package/src/sap/fe/macros/insights/InsightsService.ts +2 -1
  94. package/src/sap/fe/macros/internal/DataPoint.js +7 -8
  95. package/src/sap/fe/macros/internal/DataPoint.tsx +6 -9
  96. package/src/sap/fe/macros/internal/field/DisplayStyle.js +8 -6
  97. package/src/sap/fe/macros/internal/field/DisplayStyle.tsx +7 -8
  98. package/src/sap/fe/macros/internal/field/EditStyle.js +9 -20
  99. package/src/sap/fe/macros/internal/field/EditStyle.tsx +17 -41
  100. package/src/sap/fe/macros/internal/field/FieldBlockStructure.js +2 -2
  101. package/src/sap/fe/macros/internal/field/FieldBlockStructure.tsx +1 -1
  102. package/src/sap/fe/macros/internal/field/FieldStructure.js +1 -2
  103. package/src/sap/fe/macros/internal/field/FieldStructure.tsx +0 -2
  104. package/src/sap/fe/macros/internal/field/FieldStructureHelper.js +7 -7
  105. package/src/sap/fe/macros/internal/field/FieldStructureHelper.ts +17 -11
  106. package/src/sap/fe/macros/internal/helpers/DataPointTemplating.js +6 -2
  107. package/src/sap/fe/macros/internal/helpers/DataPointTemplating.ts +5 -1
  108. package/src/sap/fe/macros/internal/valuehelp/AdditionalValueFormatter.js +9 -6
  109. package/src/sap/fe/macros/internal/valuehelp/AdditionalValueFormatter.ts +7 -5
  110. package/src/sap/fe/macros/internal/valuehelp/TableDelegate.js +4 -4
  111. package/src/sap/fe/macros/internal/valuehelp/TableDelegate.ts +6 -6
  112. package/src/sap/fe/macros/internal/valuehelp/ValueListDialogTable.fragment.xml +5 -2
  113. package/src/sap/fe/macros/library.js +3 -3
  114. package/src/sap/fe/macros/library.ts +2 -0
  115. package/src/sap/fe/macros/mdc/adapter/StateHelper.js +15 -5
  116. package/src/sap/fe/macros/mdc/adapter/StateHelper.ts +21 -5
  117. package/src/sap/fe/macros/messagebundle.properties +7 -5
  118. package/src/sap/fe/macros/messagebundle_ar.properties +12 -3
  119. package/src/sap/fe/macros/messagebundle_bg.properties +13 -4
  120. package/src/sap/fe/macros/messagebundle_ca.properties +12 -3
  121. package/src/sap/fe/macros/messagebundle_cnr.properties +12 -3
  122. package/src/sap/fe/macros/messagebundle_cs.properties +11 -2
  123. package/src/sap/fe/macros/messagebundle_cy.properties +12 -3
  124. package/src/sap/fe/macros/messagebundle_da.properties +12 -3
  125. package/src/sap/fe/macros/messagebundle_de.properties +16 -7
  126. package/src/sap/fe/macros/messagebundle_el.properties +13 -4
  127. package/src/sap/fe/macros/messagebundle_en.properties +13 -4
  128. package/src/sap/fe/macros/messagebundle_en_GB.properties +13 -4
  129. package/src/sap/fe/macros/messagebundle_en_US_saprigi.properties +12 -3
  130. package/src/sap/fe/macros/messagebundle_es.properties +12 -3
  131. package/src/sap/fe/macros/messagebundle_es_MX.properties +12 -3
  132. package/src/sap/fe/macros/messagebundle_et.properties +12 -3
  133. package/src/sap/fe/macros/messagebundle_fi.properties +12 -3
  134. package/src/sap/fe/macros/messagebundle_fr.properties +12 -3
  135. package/src/sap/fe/macros/messagebundle_fr_CA.properties +12 -3
  136. package/src/sap/fe/macros/messagebundle_hi.properties +12 -3
  137. package/src/sap/fe/macros/messagebundle_hr.properties +13 -4
  138. package/src/sap/fe/macros/messagebundle_hu.properties +12 -3
  139. package/src/sap/fe/macros/messagebundle_id.properties +18 -9
  140. package/src/sap/fe/macros/messagebundle_it.properties +12 -3
  141. package/src/sap/fe/macros/messagebundle_iw.properties +12 -3
  142. package/src/sap/fe/macros/messagebundle_ja.properties +12 -3
  143. package/src/sap/fe/macros/messagebundle_kk.properties +11 -2
  144. package/src/sap/fe/macros/messagebundle_ko.properties +13 -4
  145. package/src/sap/fe/macros/messagebundle_lt.properties +12 -3
  146. package/src/sap/fe/macros/messagebundle_lv.properties +12 -3
  147. package/src/sap/fe/macros/messagebundle_mk.properties +12 -3
  148. package/src/sap/fe/macros/messagebundle_ms.properties +12 -3
  149. package/src/sap/fe/macros/messagebundle_nl.properties +12 -3
  150. package/src/sap/fe/macros/messagebundle_no.properties +12 -3
  151. package/src/sap/fe/macros/messagebundle_pl.properties +12 -3
  152. package/src/sap/fe/macros/messagebundle_pt.properties +12 -3
  153. package/src/sap/fe/macros/messagebundle_pt_PT.properties +12 -3
  154. package/src/sap/fe/macros/messagebundle_ro.properties +13 -4
  155. package/src/sap/fe/macros/messagebundle_ru.properties +12 -3
  156. package/src/sap/fe/macros/messagebundle_sh.properties +12 -3
  157. package/src/sap/fe/macros/messagebundle_sk.properties +12 -3
  158. package/src/sap/fe/macros/messagebundle_sl.properties +13 -4
  159. package/src/sap/fe/macros/messagebundle_sr.properties +12 -3
  160. package/src/sap/fe/macros/messagebundle_sv.properties +12 -3
  161. package/src/sap/fe/macros/messagebundle_th.properties +11 -2
  162. package/src/sap/fe/macros/messagebundle_tr.properties +12 -3
  163. package/src/sap/fe/macros/messagebundle_uk.properties +12 -3
  164. package/src/sap/fe/macros/messagebundle_vi.properties +13 -4
  165. package/src/sap/fe/macros/messagebundle_zh_CN.properties +12 -3
  166. package/src/sap/fe/macros/messagebundle_zh_TW.properties +12 -3
  167. package/src/sap/fe/macros/richtexteditor/ButtonGroup.js +2 -2
  168. package/src/sap/fe/macros/richtexteditor/ButtonGroup.ts +2 -2
  169. package/src/sap/fe/macros/table/Action.js +15 -2
  170. package/src/sap/fe/macros/table/Action.ts +11 -1
  171. package/src/sap/fe/macros/table/ActionGroup.js +15 -2
  172. package/src/sap/fe/macros/table/ActionGroup.ts +8 -0
  173. package/src/sap/fe/macros/table/ActionGroupOverride.js +14 -2
  174. package/src/sap/fe/macros/table/ActionGroupOverride.ts +7 -0
  175. package/src/sap/fe/macros/table/ActionOverride.js +14 -2
  176. package/src/sap/fe/macros/table/ActionOverride.ts +7 -0
  177. package/src/sap/fe/macros/table/ActionsTemplating.js +16 -2
  178. package/src/sap/fe/macros/table/ActionsTemplating.tsx +15 -0
  179. package/src/sap/fe/macros/table/MdcTableTemplate.js +91 -10
  180. package/src/sap/fe/macros/table/MdcTableTemplate.tsx +131 -10
  181. package/src/sap/fe/macros/table/OverflowGroups.js +59 -0
  182. package/src/sap/fe/macros/table/OverflowGroups.ts +27 -0
  183. package/src/sap/fe/macros/table/Table.block.js +70 -29
  184. package/src/sap/fe/macros/table/Table.block.tsx +65 -12
  185. package/src/sap/fe/macros/table/TableAPI.js +169 -131
  186. package/src/sap/fe/macros/table/TableAPI.ts +58 -28
  187. package/src/sap/fe/macros/table/TableDefinition.js +19 -2
  188. package/src/sap/fe/macros/table/TableDefinition.ts +17 -1
  189. package/src/sap/fe/macros/table/TableEventHandlerProvider.js +4 -3
  190. package/src/sap/fe/macros/table/TableEventHandlerProvider.ts +8 -9
  191. package/src/sap/fe/macros/table/TableHelper.js +5 -2
  192. package/src/sap/fe/macros/table/TableHelper.ts +5 -2
  193. package/src/sap/fe/macros/table/TableRuntime.js +2 -2
  194. package/src/sap/fe/macros/table/TableRuntime.ts +4 -6
  195. package/src/sap/fe/macros/table/TableSizeHelper.js +4 -4
  196. package/src/sap/fe/macros/table/TableSizeHelper.ts +6 -11
  197. package/src/sap/fe/macros/table/delegates/TableDelegate.js +67 -26
  198. package/src/sap/fe/macros/table/delegates/TableDelegate.ts +108 -118
  199. package/src/sap/fe/macros/table/massEdit/MassEditDialogHelper.js +2 -2
  200. package/src/sap/fe/macros/table/massEdit/MassEditDialogHelper.tsx +1 -1
  201. package/src/sap/fe/macros/table/massEdit/MassEditField.js +1 -1
  202. package/src/sap/fe/macros/table/massEdit/MassEditField.tsx +3 -6
  203. package/src/sap/fe/macros/table/mixin/EmptyRowsHandler.js +6 -5
  204. package/src/sap/fe/macros/table/mixin/EmptyRowsHandler.ts +10 -4
  205. package/src/sap/fe/macros/table/mixin/TableAPIStateHandler.js +7 -9
  206. package/src/sap/fe/macros/table/mixin/TableAPIStateHandler.ts +7 -8
  207. package/src/sap/fe/macros/table/mixin/TableExport.js +1 -1
  208. package/src/sap/fe/macros/table/mixin/TableExport.ts +3 -3
  209. package/src/sap/fe/macros/visualfilters/InteractiveChartHelper.js +4 -4
  210. package/src/sap/fe/macros/visualfilters/InteractiveChartHelper.ts +3 -3
  211. package/src/sap/fe/macros/visualfilters/VisualFilter.js +20 -2
  212. package/src/sap/fe/macros/visualfilters/VisualFilter.tsx +28 -6
  213. package/src/sap/fe/macros/visualfilters/VisualFilterRuntime.js +6 -3
  214. package/src/sap/fe/macros/visualfilters/VisualFilterRuntime.ts +4 -3
  215. package/src/sap/fe/macros/visualfilters/fragments/InteractiveCharts.js +3 -3
  216. package/src/sap/fe/macros/visualfilters/fragments/InteractiveCharts.tsx +10 -4
  217. package/src/sap/fe/macros/visualfilters/fragments/InteractiveDonutChart.fragment.xml +1 -1
@@ -7,7 +7,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/ActionRuntime", "sap/fe/core/CommonU
7
7
 
8
8
  const CreationMode = FELibrary.CreationMode;
9
9
  /**
10
- * Static class used by Table building block during runtime
10
+ * Static class used by the Table building block during runtime
11
11
  * @private
12
12
  */
13
13
  const TableRuntime = {
@@ -566,4 +566,4 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/ActionRuntime", "sap/fe/core/CommonU
566
566
  };
567
567
  return TableRuntime;
568
568
  }, false);
569
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJDcmVhdGlvbk1vZGUiLCJGRUxpYnJhcnkiLCJUYWJsZVJ1bnRpbWUiLCJleGVjdXRlQ29uZGl0aW9uYWxBY3Rpb25TaG9ydGN1dCIsInNCdXR0b25NYXRjaGVyIiwib1NvdXJjZSIsIm9NZGNUYWJsZSIsImdldFBhcmVudCIsIkNyZWF0aW9uUm93Iiwib0J1dHRvbiIsImdldEFjdGlvbnMiLCJyZWR1Y2UiLCJhQWN0aW9uQnV0dG9ucyIsIm9BY3Rpb25Ub29sYmFyQWN0aW9uIiwiY29uY2F0IiwiZ2V0QWN0aW9uIiwiZmluZCIsIm9BY3Rpb25CdXR0b24iLCJnZXRJZCIsImVuZHNXaXRoIiwiQ29tbW9uVXRpbHMiLCJmaXJlQnV0dG9uUHJlc3MiLCJvQ3JlYXRpb25Sb3ciLCJnZXRBZ2dyZWdhdGlvbiIsImdldEFwcGx5RW5hYmxlZCIsImdldFZpc2libGUiLCJmaXJlQXBwbHkiLCJzZXRDb250ZXh0cyIsImV2ZW50Iiwic291cmNlIiwiZ2V0U291cmNlIiwidGFibGUiLCJCdXN5TG9ja2VyIiwibG9jayIsInNldENvbnRleHRzQXN5bmMiLCJlcnJvciIsIkxvZyIsInVubG9jayIsIm1ldGFNb2RlbCIsImdldE1vZGVsIiwiZ2V0TWV0YU1vZGVsIiwidGFibGVBUEkiLCJ0YWJsZURlZmluaXRpb24iLCJjb2xsZWN0aW9uRW50aXR5IiwiTWV0YU1vZGVsQ29udmVydGVyIiwiY29udmVydFR5cGVzIiwicmVzb2x2ZVBhdGgiLCJhbm5vdGF0aW9uIiwiY29sbGVjdGlvbiIsInRhcmdldCIsInNVcGRhdGFibGVQYXRoIiwidXBkYXRhYmxlUHJvcGVydHlQYXRoIiwiYUFjdGlvbnNNdWx0aXNlbGVjdERpc2FibGVkIiwiZGF0YSIsInNwbGl0Iiwib0FjdGlvbk9wZXJhdGlvbkF2YWlsYWJsZU1hcCIsIkpTT04iLCJwYXJzZSIsIm9wZXJhdGlvbkF2YWlsYWJsZU1hcCIsIm9OYXZpZ2F0aW9uQXZhaWxhYmxlTWFwIiwiYVNlbGVjdGVkQ29udGV4dHMiLCJnZXRTZWxlY3RlZENvbnRleHRzIiwiYURlbGV0YWJsZUNvbnRleHRzIiwiYlJlYWRPbmx5RHJhZnRFbmFibGVkIiwiYW5ub3RhdGlvbnMiLCJDb21tb24iLCJEcmFmdFJvb3QiLCJhVXBkYXRhYmxlQ29udGV4dHMiLCJvRHluYW1pY0FjdGlvbnMiLCJvSUJOIiwib0ludGVybmFsTW9kZWxDb250ZXh0IiwiZ2V0QmluZGluZ0NvbnRleHQiLCJkZWxldGVIZWxwZXIiLCJ1cGRhdGVEZWxldGVJbmZvRm9yU2VsZWN0ZWRDb250ZXh0cyIsImFjdGl2ZVNlbGVjdGVkQ29udGV4dHMiLCJmaWx0ZXIiLCJvQ29udGV4dCIsImlzSW5hY3RpdmUiLCJvTW9kZWxPYmplY3QiLCJPYmplY3QiLCJhc3NpZ24iLCJnZXRPYmplY3QiLCJzZWxlY3RlZENvbnRleHRzIiwic2VsZWN0ZWRDb250ZXh0c0luY2x1ZGluZ0luYWN0aXZlIiwibnVtYmVyT2ZTZWxlY3RlZENvbnRleHRzIiwibGVuZ3RoIiwiZHluYW1pY0FjdGlvbnMiLCJpYm4iLCJkZWxldGVFbmFibGVkIiwiZGVsZXRhYmxlQ29udGV4dHMiLCJ1blNhdmVkQ29udGV4dHMiLCJsb2NrZWRDb250ZXh0cyIsImRyYWZ0c1dpdGhOb25EZWxldGFibGVBY3RpdmUiLCJkcmFmdHNXaXRoRGVsZXRhYmxlQWN0aXZlIiwiY29udHJvbElkIiwidXBkYXRhYmxlQ29udGV4dHMiLCJwYXN0ZUF1dGhvcml6ZWQiLCJwYXN0ZUZyb21Db3B5QXV0b3JpemVkIiwic2VtYW50aWNLZXlIYXNEcmFmdEluZGljYXRvciIsImdldFByb3BlcnR5IiwidW5kZWZpbmVkIiwibm9kZVVwZGF0ZXNJbmZvIiwib1NlbGVjdGVkQ29udGV4dCIsIm9Db250ZXh0RGF0YSIsImtleSIsImluZGV4T2YiLCJzQWN0aW9uUGF0aCIsInN1YnN0cmluZyIsImVuYWJsZWQiLCJzZXRQcm9wZXJ0eSIsImlzVXBkYXRhYmxlQ29udGV4dCIsInB1c2giLCJzZXRJbnRlbnRCYXNlZE5hdmlnYXRpb25FbmFibGVtZW50IiwiZGlzYWJsZUFjdGlvbiIsImNvbnRyb2wiLCJjcmVhdGVFbmFibGVtZW50IiwicGFyZW50Q29udGV4dCIsIl91cGRhdGVDcmVhdGVFbmFibGVtZW50Iiwibm9kZVR5cGUiLCJ1cGRhdGVDdXRDb3B5UGFzdGVFbmFibGVtZW50IiwidXBkYXRlTW92ZVVwRG93bkVuYWJsZW1lbnQiLCJBY3Rpb25SdW50aW1lIiwic2V0QWN0aW9uRW5hYmxlbWVudCIsInNlbGVjdGVkQ29udGV4dCIsInJlYWRPbmx5RHJhZnRFbmFibGVkIiwiY29udGV4dERhdGEiLCJ1cGRhdGFibGVCeVBhdGgiLCJub3REcmFmdEluUmVhZE9ubHlNb2RlIiwiSXNBY3RpdmVFbnRpdHkiLCJIYXNEcmFmdEVudGl0eSIsImNoZWNrSWZOb2RlSXNNb3ZhYmxlIiwibm9kZSIsImlzTm9kZU1vdmFibGVGdW5jdGlvbiIsImdldFRhYmxlRGVmaW5pdGlvbiIsImlzTm9kZU1vdmFibGUiLCJub2RlTW92YWJsZUN1c3RvbUZ1bmN0aW9uIiwiRlBNSGVscGVyIiwiZ2V0Q3VzdG9tRnVuY3Rpb24iLCJtb2R1bGVOYW1lIiwibWV0aG9kTmFtZSIsIndhcm5pbmciLCJjaGVja0lmTm9kZUlzQ29weWFibGUiLCJpc05vZGVDb3B5YWJsZUZ1bmN0aW9uIiwiaXNOb2RlQ29weWFibGUiLCJtb2RlbE9iamVjdCIsImZvckNvbnRleHRNZW51IiwiYXJndW1lbnRzIiwiY29udGV4dG1lbnUiLCJ0eXBlIiwidmlldyIsImdldFRhcmdldFZpZXciLCJpc1ZpZXdFZGl0YWJsZSIsImdldElzRWRpdGFibGUiLCJnZXRDb250cm9sbGVyTmFtZSIsImNoZWNrRHJhZnRJbnN0YW5jZSIsImdldFJvd0JpbmRpbmciLCJpc1JlbGF0aXZlIiwicGFzdGFibGVDb250ZXh0cyIsImdldEFsbEN1cnJlbnRDb250ZXh0cyIsImNvbnRleHQiLCJtYXAiLCJwYXN0YWJsZUNvbnRleHQiLCJnZXRQYXRoIiwiaW5jbHVkZXMiLCJNZXNzYWdlVG9hc3QiLCJzaG93IiwiUmVzb3VyY2VNb2RlbEhlbHBlciIsImdldFJlc291cmNlTW9kZWwiLCJnZXRUZXh0IiwiY29weUN1dFBhc3RlRW5hYmxlbWVudEluZm8iLCJkYXRhTW9kZWxzcmMiLCJjdXRhYmxlQ29udGV4dHMiLCJjb3B5YWJsZUNvbnRleHRzIiwiY3V0RW5hYmxlbWVudCIsImNvcHlFbmFibGVtZW50IiwibGFzdEFjdGlvbiIsInBhc3RlRW5hYmxlbWVudCIsImNvbnRleHRzZm9yUGFzdGFibGVFbmFibGVtZW50IiwiZXh0ZW5zaW9uUG9pbnQiLCJpc01vdmVUb1Bvc2l0aW9uQWxsb3dlZCIsImlzQ29weVRvUG9zaXRpb25BbGxvd2VkIiwidGFyZ2V0Q29udGV4dCIsIm1vZGVsT2JqZWN0UGF0aCIsImNoYW5nZVNpYmxpbmdGb3JSb290c1N1cHBvcnRlZCIsInNpbmdsZUNvbnRleHRNb3ZhYmxlVXAiLCJzaW5nbGVDb250ZXh0TW92YWJsZURvd24iLCJtb3ZlZENvbnRleHQiLCJtb3ZhYmxlRHJhZnQiLCJvdXRPZlBsYWNlQ29udGV4dCIsImlzVHJhbnNpZW50IiwiY3VzdG9tTW92YWJsZSIsImlzRGVsZXRlZCIsImdldFNpYmxpbmciLCJpbnRlcm5hbENvbnRleHQiLCJjcmVhdGVFbmFibGVtZW50Q2FsbGJhY2siLCJub2RlVHlwZVBhcmFtZXRlcnMiLCJwb3NzaWJsZVZhbHVlcyIsInZhbHVlcyIsIm9wdGlvbiIsInZhbHVlIiwiZW5hYmxlbWVudEZ1bmN0aW9uIiwiZW5hYmxlZEZsYWdzIiwiX2Vycm9yIiwiZW5hYmxlbWVudE1hcCIsInNvbWUiLCJmbGFnIiwiZm9yRWFjaCIsImluZGV4IiwiY29udGV4dFBhdGgiLCJjbGVhclNlbGVjdGlvbiIsImludGVybmFsTW9kZWxDb250ZXh0Iiwic0FjdGlvbiIsImJFbmFibGVkIiwib25GaWVsZENoYW5nZUluQ3JlYXRpb25Sb3ciLCJvRXZlbnQiLCJ3aXRoQ3VzdG9tVmFsaWRhdGlvbkZ1bmN0aW9uIiwibUZpZWxkIiwiRmllbGRSdW50aW1lSGVscGVyIiwiZ2V0RmllbGRTdGF0ZU9uQ2hhbmdlIiwib1NvdXJjZUZpZWxkIiwiZmllbGQiLCJzRmllbGRJZCIsIm1GaWVsZFZhbGlkaXR5IiwibU5ld0ZpZWxkVmFsaWRpdHkiLCJzdGF0ZSIsIm1DdXN0b21WYWxpZGl0eSIsIm1OZXdDdXN0b21WYWxpZGl0eSIsImdldEJpbmRpbmciLCJmaWVsZElkIiwic1RhcmdldCIsImdldEJpbmRpbmdQYXRoIiwiTWVzc2FnaW5nIiwiZ2V0TWVzc2FnZU1vZGVsIiwiZ2V0RGF0YSIsIm9NZXNzYWdlIiwiZ2V0VGFyZ2V0cyIsInJlbW92ZU1lc3NhZ2VzIiwib25UcmVlVGFibGVDb250ZXh0Q2hhbmdlZCIsImluaXRpYWxFeHBhbnNpb25MZXZlbCIsInJvd0JpbmRpbmciLCJnZXRDb250ZXh0IiwiZ2V0SWdub3JlQ29udGV4dENoYW5nZUV2ZW50IiwiYWdncmVnYXRpb24iLCJmaWx0ZXJJbmZvIiwiVGFibGVVdGlscyIsImdldEFsbEZpbHRlckluZm8iLCJleHBhbmRUbyIsInNlYXJjaCIsIk51bWJlciIsIk1BWF9TQUZFX0lOVEVHRVIiLCJzZXRBZ2dyZWdhdGlvbiIsIm9uQ3JlYXRlTWVudUl0ZW1QcmVzcyIsInZhbHVlSW5kZXgiLCJtZGNUYWJsZSIsImdldE1kY1RhYmxlIiwiY3JlYXRpb25EYXRhIiwicHJvcGVydHlOYW1lIiwiY3JlYXRpb25QYXJhbWV0ZXJzIiwiY3JlYXRpb25Nb2RlIiwiY3JlYXRlIiwibW9kZSIsInRhYmxlSWQiLCJDcmVhdGlvbkRpYWxvZyIsImNyZWF0aW9uRGlhbG9nRmllbGRzIiwicmViaW5kIiwiZ2V0Q29udHJvbGxlciIsImVkaXRGbG93IiwiY3JlYXRlRG9jdW1lbnQiLCJjYXRjaCIsIm9uQ3JlYXRlQnV0dG9uUHJlc3MiLCJFeHRlcm5hbCIsIm91dGJvdW5kIiwiY3JlYXRpb25Sb3ciLCJjcmVhdGVBdEVuZCIsIk5ld1BhZ2UiLCJJbmxpbmUiLCJJbmxpbmVDcmVhdGlvblJvd3MiLCJjcmVhdGVFbXB0eVJvd3NBbmRGb2N1cyIsIm5hdmlnYXRpb25BdmFpbGFibGVNYXAiLCJzS2V5IiwiYUFwcGxpY2FibGUiLCJhTm90QXBwbGljYWJsZSIsImJFbmFibGVkRm9yQ29udGV4dE1lbnUiLCJhQXBwbGljYWJsZUZvckNvbnRleHRNZW51IiwiYU5vdEFwcGxpY2FibGVGb3JDb250ZXh0TWVudSIsInNQcm9wZXJ0eSIsImVuYWJsZWRQcm9wZXJ0eSIsImFwcGxpY2FibGVQcm9wZXJ0eSIsIm5vdEFwcGxpY2FibGVQcm9wZXJ0eSIsIm9uQ29udGV4dE1lbnVJdGVtU2VsZWN0ZWQiLCJzZXRDb250ZXh0TWVudUFjdGl2ZSIsInNldFRpbWVvdXQiLCJkYXRhU3RhdGVJbmRpY2F0b3JGaWx0ZXIiLCJtZXNzYWdlIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJUYWJsZVJ1bnRpbWUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBFbnRpdHlTZXQgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXNcIjtcbmltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IEFjdGlvblJ1bnRpbWUgZnJvbSBcInNhcC9mZS9jb3JlL0FjdGlvblJ1bnRpbWVcIjtcbmltcG9ydCBDb21tb25VdGlscyBmcm9tIFwic2FwL2ZlL2NvcmUvQ29tbW9uVXRpbHNcIjtcbmltcG9ydCBCdXN5TG9ja2VyIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9CdXN5TG9ja2VyXCI7XG5pbXBvcnQgKiBhcyBNZXRhTW9kZWxDb252ZXJ0ZXIgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWV0YU1vZGVsQ29udmVydGVyXCI7XG5pbXBvcnQgdHlwZSB7IENyZWF0ZUJlaGF2aW9yRXh0ZXJuYWwgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9Db21tb24vVGFibGVcIjtcbmltcG9ydCBkZWxldGVIZWxwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvRGVsZXRlSGVscGVyXCI7XG5pbXBvcnQgRlBNSGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0ZQTUhlbHBlclwiO1xuaW1wb3J0IHR5cGUgeyBJbnRlcm5hbE1vZGVsQ29udGV4dCB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01vZGVsSGVscGVyXCI7XG5pbXBvcnQgUmVzb3VyY2VNb2RlbEhlbHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9SZXNvdXJjZU1vZGVsSGVscGVyXCI7XG5pbXBvcnQgRkVMaWJyYXJ5IGZyb20gXCJzYXAvZmUvY29yZS9saWJyYXJ5XCI7XG5pbXBvcnQgdHlwZSBUYWJsZUFQSSBmcm9tIFwic2FwL2ZlL21hY3Jvcy90YWJsZS9UYWJsZUFQSVwiO1xuaW1wb3J0IFRhYmxlVXRpbHMgZnJvbSBcInNhcC9mZS9tYWNyb3MvdGFibGUvVXRpbHNcIjtcbmltcG9ydCB0eXBlIE1lbnVJdGVtIGZyb20gXCJzYXAvbS9NZW51SXRlbVwiO1xuaW1wb3J0IE1lc3NhZ2VUb2FzdCBmcm9tIFwic2FwL20vTWVzc2FnZVRvYXN0XCI7XG5pbXBvcnQgdHlwZSBVSTVFdmVudCBmcm9tIFwic2FwL3VpL2Jhc2UvRXZlbnRcIjtcbmltcG9ydCB0eXBlIENvbnRyb2wgZnJvbSBcInNhcC91aS9jb3JlL0NvbnRyb2xcIjtcbmltcG9ydCBNZXNzYWdpbmcgZnJvbSBcInNhcC91aS9jb3JlL01lc3NhZ2luZ1wiO1xuaW1wb3J0IHR5cGUgTWVzc2FnZSBmcm9tIFwic2FwL3VpL2NvcmUvbWVzc2FnZS9NZXNzYWdlXCI7XG5pbXBvcnQgdHlwZSB7IEZpZWxkJENoYW5nZUV2ZW50IH0gZnJvbSBcInNhcC91aS9tZGMvRmllbGRcIjtcbmltcG9ydCB0eXBlIHsgZGVmYXVsdCBhcyBNRENUYWJsZSwgZGVmYXVsdCBhcyBUYWJsZSB9IGZyb20gXCJzYXAvdWkvbWRjL1RhYmxlXCI7XG5pbXBvcnQgdHlwZSBBY3Rpb25Ub29sYmFyQWN0aW9uIGZyb20gXCJzYXAvdWkvbWRjL2FjdGlvbnRvb2xiYXIvQWN0aW9uVG9vbGJhckFjdGlvblwiO1xuaW1wb3J0IHR5cGUgQ3JlYXRpb25Sb3cgZnJvbSBcInNhcC91aS9tZGMvdGFibGUvQ3JlYXRpb25Sb3dcIjtcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9Db250ZXh0XCI7XG5pbXBvcnQgdHlwZSBPRGF0YU1ldGFNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTWV0YU1vZGVsXCI7XG5pbXBvcnQgRmllbGRSdW50aW1lSGVscGVyIGZyb20gXCIuLi9maWVsZC9GaWVsZFJ1bnRpbWVIZWxwZXJcIjtcblxuY29uc3QgQ3JlYXRpb25Nb2RlID0gRkVMaWJyYXJ5LkNyZWF0aW9uTW9kZTtcbi8qKlxuICogU3RhdGljIGNsYXNzIHVzZWQgYnkgVGFibGUgYnVpbGRpbmcgYmxvY2sgZHVyaW5nIHJ1bnRpbWVcbiAqIEBwcml2YXRlXG4gKi9cbmNvbnN0IFRhYmxlUnVudGltZSA9IHtcblx0ZXhlY3V0ZUNvbmRpdGlvbmFsQWN0aW9uU2hvcnRjdXQ6IGZ1bmN0aW9uIChzQnV0dG9uTWF0Y2hlcjogc3RyaW5nLCBvU291cmNlOiBDb250cm9sKTogdm9pZCB7XG5cdFx0Ly8gR2V0IHRoZSBidXR0b24gcmVsYXRlZCB0byBrZXlib2FyZCBzaG9ydGN1dFxuXHRcdGNvbnN0IG9NZGNUYWJsZSA9IG9Tb3VyY2UuZ2V0UGFyZW50KCkgYXMgTURDVGFibGU7XG5cdFx0aWYgKHNCdXR0b25NYXRjaGVyICE9PSBDcmVhdGlvbk1vZGUuQ3JlYXRpb25Sb3cpIHtcblx0XHRcdGNvbnN0IG9CdXR0b24gPSBvTWRjVGFibGVcblx0XHRcdFx0LmdldEFjdGlvbnMoKVxuXHRcdFx0XHQucmVkdWNlKGZ1bmN0aW9uIChhQWN0aW9uQnV0dG9uczogQ29udHJvbFtdLCBvQWN0aW9uVG9vbGJhckFjdGlvbjogQ29udHJvbCkge1xuXHRcdFx0XHRcdHJldHVybiBhQWN0aW9uQnV0dG9ucy5jb25jYXQoKG9BY3Rpb25Ub29sYmFyQWN0aW9uIGFzIEFjdGlvblRvb2xiYXJBY3Rpb24pLmdldEFjdGlvbigpKTtcblx0XHRcdFx0fSwgW10gYXMgQ29udHJvbFtdKVxuXHRcdFx0XHQuZmluZChmdW5jdGlvbiAob0FjdGlvbkJ1dHRvbjogQ29udHJvbCkge1xuXHRcdFx0XHRcdHJldHVybiBvQWN0aW9uQnV0dG9uLmdldElkKCkuZW5kc1dpdGgoc0J1dHRvbk1hdGNoZXIpO1xuXHRcdFx0XHR9KTtcblx0XHRcdENvbW1vblV0aWxzLmZpcmVCdXR0b25QcmVzcyhvQnV0dG9uKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Y29uc3Qgb0NyZWF0aW9uUm93ID0gb01kY1RhYmxlLmdldEFnZ3JlZ2F0aW9uKFwiY3JlYXRpb25Sb3dcIikgYXMgQ3JlYXRpb25Sb3c7XG5cdFx0XHRpZiAob0NyZWF0aW9uUm93ICYmIG9DcmVhdGlvblJvdy5nZXRBcHBseUVuYWJsZWQoKSAmJiBvQ3JlYXRpb25Sb3cuZ2V0VmlzaWJsZSgpKSB7XG5cdFx0XHRcdG9DcmVhdGlvblJvdy5maXJlQXBwbHkoKTtcblx0XHRcdH1cblx0XHR9XG5cdH0sXG5cblx0c2V0Q29udGV4dHM6IGFzeW5jIGZ1bmN0aW9uIChldmVudDogVUk1RXZlbnQ8e30sIFRhYmxlPik6IFByb21pc2U8dm9pZD4ge1xuXHRcdGNvbnN0IHNvdXJjZSA9IGV2ZW50LmdldFNvdXJjZSgpO1xuXHRcdGNvbnN0IHRhYmxlID0gc291cmNlO1xuXHRcdEJ1c3lMb2NrZXIubG9jayh0YWJsZSk7XG5cdFx0dHJ5IHtcblx0XHRcdGF3YWl0IFRhYmxlUnVudGltZS5zZXRDb250ZXh0c0FzeW5jKHRhYmxlKTtcblx0XHR9IGNhdGNoIChlcnJvcikge1xuXHRcdFx0TG9nLmVycm9yKGVycm9yIGFzIHN0cmluZyk7XG5cdFx0fSBmaW5hbGx5IHtcblx0XHRcdEJ1c3lMb2NrZXIudW5sb2NrKHRhYmxlKTtcblx0XHR9XG5cdH0sXG5cblx0c2V0Q29udGV4dHNBc3luYzogYXN5bmMgZnVuY3Rpb24gKHRhYmxlOiBUYWJsZSk6IFByb21pc2U8dm9pZFtdIHwgdW5kZWZpbmVkPiB7XG5cdFx0Y29uc3QgbWV0YU1vZGVsID0gdGFibGUuZ2V0TW9kZWwoKT8uZ2V0TWV0YU1vZGVsKCkgYXMgdW5kZWZpbmVkIHwgT0RhdGFNZXRhTW9kZWw7XG5cdFx0Y29uc3QgdGFibGVBUEkgPSB0YWJsZS5nZXRQYXJlbnQoKSBhcyBUYWJsZUFQSTtcblx0XHRpZiAoIXRhYmxlQVBJIHx8ICFtZXRhTW9kZWwpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0Y29uc3QgdGFibGVEZWZpbml0aW9uID0gdGFibGVBUEkudGFibGVEZWZpbml0aW9uO1xuXHRcdGNvbnN0IGNvbGxlY3Rpb25FbnRpdHkgPSBNZXRhTW9kZWxDb252ZXJ0ZXIuY29udmVydFR5cGVzKG1ldGFNb2RlbCkucmVzb2x2ZVBhdGg8RW50aXR5U2V0Pihcblx0XHRcdHRhYmxlRGVmaW5pdGlvbi5hbm5vdGF0aW9uLmNvbGxlY3Rpb25cblx0XHQpLnRhcmdldDtcblx0XHRjb25zdCBzVXBkYXRhYmxlUGF0aCA9IHRhYmxlRGVmaW5pdGlvbi5hbm5vdGF0aW9uLnVwZGF0YWJsZVByb3BlcnR5UGF0aDtcblxuXHRcdGNvbnN0IGFBY3Rpb25zTXVsdGlzZWxlY3REaXNhYmxlZCA9IHRhYmxlLmRhdGEoXCJhY3Rpb25zTXVsdGlzZWxlY3REaXNhYmxlZFwiKT8uc3BsaXQoXCIsXCIpID8/IFtdO1xuXHRcdGNvbnN0IG9BY3Rpb25PcGVyYXRpb25BdmFpbGFibGVNYXAgPSBKU09OLnBhcnNlKHRhYmxlRGVmaW5pdGlvbi5vcGVyYXRpb25BdmFpbGFibGVNYXAgfHwgXCJ7fVwiKTtcblx0XHRjb25zdCBvTmF2aWdhdGlvbkF2YWlsYWJsZU1hcCA9IHRhYmxlLmRhdGEoXCJuYXZpZ2F0aW9uQXZhaWxhYmxlTWFwXCIpO1xuXG5cdFx0Y29uc3QgYVNlbGVjdGVkQ29udGV4dHMgPSB0YWJsZS5nZXRTZWxlY3RlZENvbnRleHRzKCkgYXMgQ29udGV4dFtdO1xuXHRcdGNvbnN0IGFEZWxldGFibGVDb250ZXh0czogQ29udGV4dFtdID0gW107XG5cdFx0Y29uc3QgYlJlYWRPbmx5RHJhZnRFbmFibGVkID1cblx0XHRcdHRhYmxlLmRhdGEoXCJkaXNwbGF5TW9kZVByb3BlcnR5QmluZGluZ1wiKSA9PT0gXCJ0cnVlXCIgJiYgISFjb2xsZWN0aW9uRW50aXR5Py5hbm5vdGF0aW9ucy5Db21tb24/LkRyYWZ0Um9vdDtcblx0XHRjb25zdCBhVXBkYXRhYmxlQ29udGV4dHM6IENvbnRleHRbXSA9IFtdO1xuXHRcdC8vIG9EeW5hbWljQWN0aW9ucyBhcmUgYm91bmQgYWN0aW9ucyB0aGF0IGFyZSBhdmFpbGFibGUgYWNjb3JkaW5nIHRvIHNvbWUgcHJvcGVydHlcblx0XHQvLyBpbiBlYWNoIGl0ZW1cblx0XHRjb25zdCBvRHluYW1pY0FjdGlvbnM6IFJlY29yZDxzdHJpbmcsIHsgYkVuYWJsZWQ/OiBib29sZWFuIH0+IHwgdW5kZWZpbmVkID0ge307XG5cdFx0Y29uc3Qgb0lCTiA9IHt9O1xuXHRcdGNvbnN0IG9JbnRlcm5hbE1vZGVsQ29udGV4dCA9IHRhYmxlLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikgYXMgSW50ZXJuYWxNb2RlbENvbnRleHQ7XG5cblx0XHRpZiAoIW9JbnRlcm5hbE1vZGVsQ29udGV4dCkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHQvLyBmb3IgdGhlIGRlbGV0ZSB3ZSBjb25zaWRlciB0aGUgaW5hY3RpdmUgY29udGV4dHMgYXMgcG90ZW50aWFsbHkgcGFydCBvZiB0aGUgc2VsZWN0ZWQgY29udGV4dHNcblx0XHRkZWxldGVIZWxwZXIudXBkYXRlRGVsZXRlSW5mb0ZvclNlbGVjdGVkQ29udGV4dHMob0ludGVybmFsTW9kZWxDb250ZXh0LCBhU2VsZWN0ZWRDb250ZXh0cyk7XG5cblx0XHQvL2RvIG5vdCBjb25zaWRlciBlbXB0eSByb3dzIGFzIHNlbGVjdGVkIGNvbnRleHQsIGZvciB0aGUgb3RoZXIgYWN0aW9uc1xuXHRcdGNvbnN0IGFjdGl2ZVNlbGVjdGVkQ29udGV4dHMgPSBhU2VsZWN0ZWRDb250ZXh0cy5maWx0ZXIoZnVuY3Rpb24gKG9Db250ZXh0OiBDb250ZXh0KSB7XG5cdFx0XHRyZXR1cm4gIW9Db250ZXh0LmlzSW5hY3RpdmUoKTtcblx0XHR9KTtcblxuXHRcdGNvbnN0IG9Nb2RlbE9iamVjdCA9IE9iamVjdC5hc3NpZ24ob0ludGVybmFsTW9kZWxDb250ZXh0LmdldE9iamVjdCgpIHx8IHt9LCB7XG5cdFx0XHRzZWxlY3RlZENvbnRleHRzOiBhY3RpdmVTZWxlY3RlZENvbnRleHRzLFxuXHRcdFx0c2VsZWN0ZWRDb250ZXh0c0luY2x1ZGluZ0luYWN0aXZlOiBhU2VsZWN0ZWRDb250ZXh0cyxcblx0XHRcdG51bWJlck9mU2VsZWN0ZWRDb250ZXh0czogYWN0aXZlU2VsZWN0ZWRDb250ZXh0cy5sZW5ndGgsXG5cdFx0XHRkeW5hbWljQWN0aW9uczogb0R5bmFtaWNBY3Rpb25zLFxuXHRcdFx0aWJuOiBvSUJOLFxuXHRcdFx0ZGVsZXRlRW5hYmxlZDogdHJ1ZSxcblx0XHRcdGRlbGV0YWJsZUNvbnRleHRzOiBhRGVsZXRhYmxlQ29udGV4dHMsXG5cdFx0XHR1blNhdmVkQ29udGV4dHM6IFtdLFxuXHRcdFx0bG9ja2VkQ29udGV4dHM6IFtdLFxuXHRcdFx0ZHJhZnRzV2l0aE5vbkRlbGV0YWJsZUFjdGl2ZTogW10sXG5cdFx0XHRkcmFmdHNXaXRoRGVsZXRhYmxlQWN0aXZlOiBbXSxcblx0XHRcdGNvbnRyb2xJZDogXCJcIixcblx0XHRcdHVwZGF0YWJsZUNvbnRleHRzOiBhVXBkYXRhYmxlQ29udGV4dHMsXG5cdFx0XHRwYXN0ZUF1dGhvcml6ZWQ6IHRydWUsXG5cdFx0XHRwYXN0ZUZyb21Db3B5QXV0b3JpemVkOiB0cnVlLFxuXHRcdFx0c2VtYW50aWNLZXlIYXNEcmFmdEluZGljYXRvcjogb0ludGVybmFsTW9kZWxDb250ZXh0LmdldFByb3BlcnR5KFwic2VtYW50aWNLZXlIYXNEcmFmdEluZGljYXRvclwiKVxuXHRcdFx0XHQ/IG9JbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRQcm9wZXJ0eShcInNlbWFudGljS2V5SGFzRHJhZnRJbmRpY2F0b3JcIilcblx0XHRcdFx0OiB1bmRlZmluZWRcblx0XHR9KTtcblx0XHRvTW9kZWxPYmplY3Qubm9kZVVwZGF0ZXNJbmZvID0gb01vZGVsT2JqZWN0Lm5vZGVVcGRhdGVzSW5mbyB8fCB7fTtcblxuXHRcdGZvciAoY29uc3Qgb1NlbGVjdGVkQ29udGV4dCBvZiBhY3RpdmVTZWxlY3RlZENvbnRleHRzKSB7XG5cdFx0XHRjb25zdCBvQ29udGV4dERhdGEgPSBvU2VsZWN0ZWRDb250ZXh0LmdldE9iamVjdCgpO1xuXHRcdFx0Zm9yIChjb25zdCBrZXkgaW4gb0NvbnRleHREYXRhKSB7XG5cdFx0XHRcdGlmIChrZXkuaW5kZXhPZihcIiNcIikgPT09IDApIHtcblx0XHRcdFx0XHRsZXQgc0FjdGlvblBhdGg6IHN0cmluZyA9IGtleTtcblx0XHRcdFx0XHRzQWN0aW9uUGF0aCA9IHNBY3Rpb25QYXRoLnN1YnN0cmluZygxLCBzQWN0aW9uUGF0aC5sZW5ndGgpO1xuXHRcdFx0XHRcdG9Nb2RlbE9iamVjdC5keW5hbWljQWN0aW9uc1tzQWN0aW9uUGF0aF0gPSB7IGVuYWJsZWQ6IHRydWUgfTtcblx0XHRcdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJcIiwgb01vZGVsT2JqZWN0KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0aWYgKHRoaXMuaXNVcGRhdGFibGVDb250ZXh0KHNVcGRhdGFibGVQYXRoLCBvU2VsZWN0ZWRDb250ZXh0LCBiUmVhZE9ubHlEcmFmdEVuYWJsZWQpKSB7XG5cdFx0XHRcdGFVcGRhdGFibGVDb250ZXh0cy5wdXNoKG9TZWxlY3RlZENvbnRleHQpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmICghdGFibGUuZGF0YShcImVuYWJsZUFuYWx5dGljc1wiKSkge1xuXHRcdFx0VGFibGVSdW50aW1lLnNldEludGVudEJhc2VkTmF2aWdhdGlvbkVuYWJsZW1lbnQob0ludGVybmFsTW9kZWxDb250ZXh0LCBvTmF2aWdhdGlvbkF2YWlsYWJsZU1hcCwgYWN0aXZlU2VsZWN0ZWRDb250ZXh0cyk7XG5cdFx0fVxuXG5cdFx0aWYgKGFjdGl2ZVNlbGVjdGVkQ29udGV4dHMubGVuZ3RoID4gMSkge1xuXHRcdFx0dGhpcy5kaXNhYmxlQWN0aW9uKGFBY3Rpb25zTXVsdGlzZWxlY3REaXNhYmxlZCwgb0R5bmFtaWNBY3Rpb25zKTtcblx0XHR9XG5cblx0XHRpZiAob01vZGVsT2JqZWN0KSB7XG5cdFx0XHRvTW9kZWxPYmplY3RbXCJ1cGRhdGFibGVDb250ZXh0c1wiXSA9IGFVcGRhdGFibGVDb250ZXh0cztcblx0XHRcdG9Nb2RlbE9iamVjdFtcImNvbnRyb2xJZFwiXSA9IHRhYmxlLmdldElkKCk7XG5cdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJcIiwgb01vZGVsT2JqZWN0KTtcblx0XHR9XG5cblx0XHQvLyBNYW5hZ2UgYSBwb3RlbnRpYWwgY2FsbGJhY2sgdG8gZW5hYmxlL2Rpc2FibGUgdGhlIGNyZWF0ZSBidXR0b24vbWVudSBmb3IgYSBUcmVlVGFibGVcblx0XHRpZiAoYWN0aXZlU2VsZWN0ZWRDb250ZXh0cy5sZW5ndGggPD0gMSAmJiB0YWJsZURlZmluaXRpb24uY29udHJvbC5jcmVhdGVFbmFibGVtZW50KSB7XG5cdFx0XHRjb25zdCBwYXJlbnRDb250ZXh0ID0gYWN0aXZlU2VsZWN0ZWRDb250ZXh0cy5sZW5ndGggPyBhY3RpdmVTZWxlY3RlZENvbnRleHRzWzBdIDogbnVsbDtcblx0XHRcdHRoaXMuX3VwZGF0ZUNyZWF0ZUVuYWJsZW1lbnQoXG5cdFx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dCxcblx0XHRcdFx0dGFibGVEZWZpbml0aW9uLmNvbnRyb2wuY3JlYXRlRW5hYmxlbWVudCxcblx0XHRcdFx0dGFibGUsXG5cdFx0XHRcdHBhcmVudENvbnRleHQsXG5cdFx0XHRcdHRhYmxlRGVmaW5pdGlvbi5jb250cm9sLm5vZGVUeXBlXG5cdFx0XHQpO1xuXHRcdH1cblxuXHRcdHRoaXMudXBkYXRlQ3V0Q29weVBhc3RlRW5hYmxlbWVudChvTW9kZWxPYmplY3QsIHRhYmxlKTtcblx0XHR0aGlzLnVwZGF0ZU1vdmVVcERvd25FbmFibGVtZW50KG9Nb2RlbE9iamVjdCwgdGFibGUpO1xuXHRcdHJldHVybiBBY3Rpb25SdW50aW1lLnNldEFjdGlvbkVuYWJsZW1lbnQob0ludGVybmFsTW9kZWxDb250ZXh0LCBvQWN0aW9uT3BlcmF0aW9uQXZhaWxhYmxlTWFwLCBhY3RpdmVTZWxlY3RlZENvbnRleHRzLCBcInRhYmxlXCIpO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBDaGVja3MsIGlmIHRoZSBzZWxlY3RlZCBjb250ZXh0IGlzIHVwZGF0YWJsZSBmb3IgTWFzcyBFZGl0LlxuXHQgKiBAcGFyYW0gdXBkYXRhYmxlUHJvcGVydHlQYXRoIFRoZSB1cGRhdGFibGVQcm9wZXJ0eVBhdGggZnJvbSB0aGUgdGFibGUgYW5ub3RhdGlvblxuXHQgKiBAcGFyYW0gc2VsZWN0ZWRDb250ZXh0IFRoZSBzZWxlY3RlZCBjb250ZXh0XG5cdCAqIEBwYXJhbSByZWFkT25seURyYWZ0RW5hYmxlZCBJbmRpY2F0ZXMsIGlmIHRoZSB0YWJsZSBpcyByZWFkIG9ubHkgYW5kIGRyYWZ0IGVuYWJsZWRcblx0ICogQHJldHVybnMgQm9vbGVhbiBJbmRpY2F0aW5nIGNvbnRleHQgaXMgdXBkYXRhYmxlXG5cdCAqL1xuXHRpc1VwZGF0YWJsZUNvbnRleHQ6IGZ1bmN0aW9uICh1cGRhdGFibGVQcm9wZXJ0eVBhdGg6IHN0cmluZywgc2VsZWN0ZWRDb250ZXh0OiBDb250ZXh0LCByZWFkT25seURyYWZ0RW5hYmxlZDogYm9vbGVhbik6IGJvb2xlYW4ge1xuXHRcdC8qIFRoZSB1cGRhdGFibGUgY29udGV4dHMgd2l0aCBtYXNzIGVkaXQgZGVwZW5kIG9uIHRoZSBmb2xsb3dpbmc6XG5cdFx0IFx0MS4gVXBkYXRlIGlzIGRlcGVuZGVudCBvbiBjdXJyZW50IGVudGl0eSBwcm9wZXJ0eSAodXBkYXRhYmxlUGF0aCkuXG5cdFx0IFx0Mi4gVGhlIHRhYmxlIGlzIHJlYWQgb25seSBhbmQgZHJhZnQgZW5hYmxlZCAobGlrZSBMUiksIGluIHRoaXMgY2FzZSBvbmx5IGFjdGl2ZSBjb250ZXh0cyBjYW4gYmUgbWFzcyBlZGl0ZWQgKG5vdCBkcmFmdCBjb250ZXh0cykuXG5cdFx0ICAgIFNvLCB1cGRhdGUgZGVwZW5kcyBvbiAnSXNBY3RpdmVFbnRpdHknLCAnSGFzRHJhZnRFbnRpdHknICB2YWx1ZSB3aGljaCBuZWVkcyB0byBiZSBjaGVja2VkLiAqL1xuXHRcdGNvbnN0IGNvbnRleHREYXRhID0gc2VsZWN0ZWRDb250ZXh0LmdldE9iamVjdCgpO1xuXHRcdGNvbnN0IHVwZGF0YWJsZUJ5UGF0aCA9IHVwZGF0YWJsZVByb3BlcnR5UGF0aC5sZW5ndGggPT09IDAgfHwgISFzZWxlY3RlZENvbnRleHQuZ2V0UHJvcGVydHkodXBkYXRhYmxlUHJvcGVydHlQYXRoKTtcblx0XHRjb25zdCBub3REcmFmdEluUmVhZE9ubHlNb2RlID0gIXJlYWRPbmx5RHJhZnRFbmFibGVkIHx8IChjb250ZXh0RGF0YS5Jc0FjdGl2ZUVudGl0eSAmJiAhY29udGV4dERhdGEuSGFzRHJhZnRFbnRpdHkpO1xuXHRcdGlmICh1cGRhdGFibGVCeVBhdGggJiYgbm90RHJhZnRJblJlYWRPbmx5TW9kZSkge1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXHRcdHJldHVybiBmYWxzZTtcblx0fSxcblxuXHQvKipcblx0ICogQ2hlY2tzIGlmIHRoZSBub2RlIGlzIG1vdmFibGUgYWNjb3JkaW5nIHRvIHRoZSBjdXN0b20gbG9naWMgKGlmIGFueSkuXG5cdCAqIEBwYXJhbSBub2RlXG5cdCAqIEBwYXJhbSB0YWJsZVxuXHQgKiBAcmV0dXJucyBUcnVlIGlmIHRoZSBjdXN0b20gbG9naWMgYWxsb3dzIHRoZSBub2RlIHRvIGJlIG1vdmVkIChvciBpZiB0aGVyZSdzIG5vIGN1c3RvbSBsb2dpYyksIGZhbHNlIG90aGVyd2lzZVxuXHQgKi9cblx0Y2hlY2tJZk5vZGVJc01vdmFibGU6IGZ1bmN0aW9uIChub2RlOiBDb250ZXh0LCB0YWJsZTogVGFibGUpOiBib29sZWFuIHtcblx0XHRjb25zdCBpc05vZGVNb3ZhYmxlRnVuY3Rpb24gPSAodGFibGUuZ2V0UGFyZW50KCkgYXMgVGFibGVBUEkpLmdldFRhYmxlRGVmaW5pdGlvbigpLmNvbnRyb2wuaXNOb2RlTW92YWJsZTtcblx0XHRjb25zdCBub2RlTW92YWJsZUN1c3RvbUZ1bmN0aW9uID0gaXNOb2RlTW92YWJsZUZ1bmN0aW9uXG5cdFx0XHQ/IEZQTUhlbHBlci5nZXRDdXN0b21GdW5jdGlvbjwoY29udGV4dDogQ29udGV4dCkgPT4gYm9vbGVhbj4oXG5cdFx0XHRcdFx0aXNOb2RlTW92YWJsZUZ1bmN0aW9uLm1vZHVsZU5hbWUsXG5cdFx0XHRcdFx0aXNOb2RlTW92YWJsZUZ1bmN0aW9uLm1ldGhvZE5hbWUsXG5cdFx0XHRcdFx0dGFibGVcblx0XHRcdCAgKVxuXHRcdFx0OiB1bmRlZmluZWQ7XG5cblx0XHR0cnkge1xuXHRcdFx0cmV0dXJuIG5vZGVNb3ZhYmxlQ3VzdG9tRnVuY3Rpb24gPT09IHVuZGVmaW5lZCB8fCBub2RlTW92YWJsZUN1c3RvbUZ1bmN0aW9uKG5vZGUpO1xuXHRcdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0XHRMb2cud2FybmluZyhgRXJyb3IgaW4gY3VzdG9tIGZ1bmN0aW9uIGZvciBpc05vZGVNb3ZhYmxlOiAke2Vycm9yfWApO1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXHR9LFxuXG5cdC8qKlxuXHQgKiBDaGVja3Mgd2hldGhlciB0aGUgbm9kZSBjYW4gYmUgY29waWVkIGFjY29yZGluZyB0byB0aGUgY3VzdG9tIGxvZ2ljLCBpZiBhbnkuXG5cdCAqIEBwYXJhbSBub2RlXG5cdCAqIEBwYXJhbSB0YWJsZVxuXHQgKiBAcmV0dXJucyBUcnVlIGlmIGN1c3RvbSBsb2dpYyBhbGxvd3MgdGhlIG5vZGUgdG8gYmUgY29waWVkIChvciBpZiBubyBjdXN0b20gbG9naWMgaXMgZGVmaW5lZCk7IGZhbHNlIG90aGVyd2lzZS5cblx0ICovXG5cdGNoZWNrSWZOb2RlSXNDb3B5YWJsZTogZnVuY3Rpb24gKG5vZGU6IENvbnRleHQsIHRhYmxlOiBUYWJsZSk6IGJvb2xlYW4ge1xuXHRcdGNvbnN0IGlzTm9kZUNvcHlhYmxlRnVuY3Rpb24gPSAodGFibGUuZ2V0UGFyZW50KCkgYXMgVGFibGVBUEkpLmdldFRhYmxlRGVmaW5pdGlvbigpLmNvbnRyb2wuaXNOb2RlQ29weWFibGU7XG5cdFx0Y29uc3Qgbm9kZU1vdmFibGVDdXN0b21GdW5jdGlvbiA9IGlzTm9kZUNvcHlhYmxlRnVuY3Rpb25cblx0XHRcdD8gRlBNSGVscGVyLmdldEN1c3RvbUZ1bmN0aW9uPChjb250ZXh0OiBDb250ZXh0KSA9PiBib29sZWFuPihcblx0XHRcdFx0XHRpc05vZGVDb3B5YWJsZUZ1bmN0aW9uLm1vZHVsZU5hbWUsXG5cdFx0XHRcdFx0aXNOb2RlQ29weWFibGVGdW5jdGlvbi5tZXRob2ROYW1lLFxuXHRcdFx0XHRcdHRhYmxlXG5cdFx0XHQgIClcblx0XHRcdDogdW5kZWZpbmVkO1xuXG5cdFx0dHJ5IHtcblx0XHRcdHJldHVybiBub2RlTW92YWJsZUN1c3RvbUZ1bmN0aW9uID09PSB1bmRlZmluZWQgfHwgbm9kZU1vdmFibGVDdXN0b21GdW5jdGlvbihub2RlKTtcblx0XHR9IGNhdGNoIChlcnJvcikge1xuXHRcdFx0TG9nLndhcm5pbmcoYEVycm9yIGluIGN1c3RvbSBmdW5jdGlvbiBmb3IgaXNOb2RlTW92YWJsZTogJHtlcnJvcn1gKTtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblx0fSxcblxuXHQvKipcblx0ICogVXBkYXRlcyB0aGUgaW50ZXJuYWwgY29udGV4dCB0byBlbmFibGUvZGlzYWJsZSB0aGUgQ3V0IGFuZCBQYXN0ZSBidXR0b25zLlxuXHQgKiBAcGFyYW0gbW9kZWxPYmplY3QgSW50ZXJuYWwgY29udGV4dCBvYmplY3Qgb2YgdGhlIHRhYmxlXG5cdCAqIEBwYXJhbSB0YWJsZSBJbnN0YW5jZSBvZiB0aGUgVGFibGVcblx0ICogQHBhcmFtIGZvckNvbnRleHRNZW51XG5cdCAqL1xuXHR1cGRhdGVDdXRDb3B5UGFzdGVFbmFibGVtZW50OiBmdW5jdGlvbiAobW9kZWxPYmplY3Q6IHsgW2tleTogc3RyaW5nXTogdW5rbm93biB9LCB0YWJsZTogVGFibGUsIGZvckNvbnRleHRNZW51ID0gZmFsc2UpOiB2b2lkIHtcblx0XHRtb2RlbE9iamVjdC5jb250ZXh0bWVudSA9IG1vZGVsT2JqZWN0LmNvbnRleHRtZW51ID8/IHsgc2VsZWN0ZWRDb250ZXh0czogW10gfTtcblxuXHRcdGNvbnN0IHRhYmxlRGVmaW5pdGlvbiA9ICh0YWJsZS5nZXRQYXJlbnQoKSBhcyBUYWJsZUFQSSkuZ2V0VGFibGVEZWZpbml0aW9uKCk7XG5cdFx0aWYgKHRhYmxlRGVmaW5pdGlvbi5jb250cm9sLnR5cGUgIT09IFwiVHJlZVRhYmxlXCIpIHtcblx0XHRcdC8vIFRoZSBsb2dpYyBiZWxvdyBvbmx5IG1ha2VzIHNlbnNlIGZvciBhIFRyZWUgVGFibGVcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0Y29uc3QgdmlldyA9IENvbW1vblV0aWxzLmdldFRhcmdldFZpZXcodGFibGUpO1xuXHRcdGNvbnN0IGlzVmlld0VkaXRhYmxlID0gQ29tbW9uVXRpbHMuZ2V0SXNFZGl0YWJsZSh2aWV3KTtcblx0XHRpZiAodmlldy5nZXRDb250cm9sbGVyTmFtZSgpICE9PSBcInNhcC5mZS50ZW1wbGF0ZXMuTGlzdFJlcG9ydC5MaXN0UmVwb3J0Q29udHJvbGxlclwiICYmICFpc1ZpZXdFZGl0YWJsZSkge1xuXHRcdFx0Ly8gSWYgdGhlIHZpZXcgaXMgbm90IGVkaXRhYmxlLCB3ZSBkaXNhYmxlIHRoZSBjdXQvY29weS9wYXN0ZSBmdW5jdGlvbmFsaXR5IGFuZCBjbGVhciB0aGUgbm9kZVVwZGF0ZXNJbmZvXG5cdFx0XHRtb2RlbE9iamVjdC5ub2RlVXBkYXRlc0luZm8gPSB7fTtcblx0XHRcdChtb2RlbE9iamVjdC5jb250ZXh0bWVudSBhcyB7IFtrZXk6IHN0cmluZ106IHVua25vd24gfSkubm9kZVVwZGF0ZXNJbmZvID0ge307XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGNvbnN0IGNoZWNrRHJhZnRJbnN0YW5jZSA9ICF0YWJsZS5nZXRSb3dCaW5kaW5nKCkuaXNSZWxhdGl2ZSgpO1xuXG5cdFx0aWYgKGZvckNvbnRleHRNZW51KSB7XG5cdFx0XHQobW9kZWxPYmplY3QuY29udGV4dG1lbnUgYXMgeyBba2V5OiBzdHJpbmddOiB1bmtub3duIH0pLm5vZGVVcGRhdGVzSW5mbyA9IHt9O1xuXHRcdH1cblx0XHRjb25zdCBub2RlVXBkYXRlc0luZm8gPSBtb2RlbE9iamVjdC5ub2RlVXBkYXRlc0luZm8gYXMgeyBba2V5OiBzdHJpbmddOiB1bmtub3duIH07XG5cdFx0Ly9JZiB0aGUgcGFzdGFibGVDb250ZXh0IGJlY29tZSBkaXNjb25uZWN0ZWQgZnJvbSB0aGUgbGlzdEJpbmRpbmcsIGZvciBleGFtcGxlLCB3aGVuIHRoZSB1c2VyIGNvbGxhcHNlcyB0aGUgcGFyZW50IG5vZGUsIHdlIGF0dGVtcHQgdG8gbG9jYXRlIHRoZSBjb3JyZWN0IGNvbnRleHQgYnkgY29tcGFyaW5nIHRoZWlyIHBhdGhzXG5cdFx0Y29uc3QgcGFzdGFibGVDb250ZXh0czogQ29udGV4dFtdID0gdGFibGVcblx0XHRcdC5nZXRSb3dCaW5kaW5nKClcblx0XHRcdC5nZXRBbGxDdXJyZW50Q29udGV4dHMoKVxuXHRcdFx0LmZpbHRlcigoY29udGV4dCkgPT5cblx0XHRcdFx0KChub2RlVXBkYXRlc0luZm8ucGFzdGFibGVDb250ZXh0cyB8fCBbXSkgYXMgQ29udGV4dFtdKVxuXHRcdFx0XHRcdC5tYXAoKHBhc3RhYmxlQ29udGV4dCkgPT4gcGFzdGFibGVDb250ZXh0LmdldFBhdGgoKSlcblx0XHRcdFx0XHQuaW5jbHVkZXMoY29udGV4dC5nZXRQYXRoKCkpXG5cdFx0XHQpO1xuXG5cdFx0aWYgKHBhc3RhYmxlQ29udGV4dHMubGVuZ3RoICE9PSAoKG5vZGVVcGRhdGVzSW5mby5wYXN0YWJsZUNvbnRleHRzIHx8IFtdKSBhcyBDb250ZXh0W10pLmxlbmd0aCkge1xuXHRcdFx0TWVzc2FnZVRvYXN0LnNob3coXCJcIiArIFJlc291cmNlTW9kZWxIZWxwZXIuZ2V0UmVzb3VyY2VNb2RlbCh0YWJsZSkuZ2V0VGV4dChcIk1fUEFTVEFCTEVfQ09OVEVYVFNfTk9UX0FWQUlMQUJMRVwiKSk7XG5cdFx0fVxuXHRcdGNvbnN0IGNvcHlDdXRQYXN0ZUVuYWJsZW1lbnRJbmZvID0gKCghZm9yQ29udGV4dE1lbnUgPyBtb2RlbE9iamVjdCA6IG1vZGVsT2JqZWN0LmNvbnRleHRtZW51KSBhcyB7IFtrZXk6IHN0cmluZ106IHVua25vd24gfSlcblx0XHRcdC5ub2RlVXBkYXRlc0luZm8gYXMge1xuXHRcdFx0W2tleTogc3RyaW5nXTogdW5rbm93bjtcblx0XHR9O1xuXHRcdGNvbnN0IGRhdGFNb2RlbHNyYyA9ICghZm9yQ29udGV4dE1lbnUgPyBtb2RlbE9iamVjdCA6IG1vZGVsT2JqZWN0LmNvbnRleHRtZW51KSBhcyB7IFtrZXk6IHN0cmluZ106IHVua25vd24gfTtcblx0XHRjb25zdCBjdXRhYmxlQ29udGV4dHMgPSAoZGF0YU1vZGVsc3JjLnVwZGF0YWJsZUNvbnRleHRzIGFzIENvbnRleHRbXSkuZmlsdGVyKFxuXHRcdFx0KGNvbnRleHQpID0+XG5cdFx0XHRcdFRhYmxlUnVudGltZS5jaGVja0lmTm9kZUlzTW92YWJsZShjb250ZXh0LCB0YWJsZSkgJiYgKCFjaGVja0RyYWZ0SW5zdGFuY2UgfHwgY29udGV4dC5nZXRQcm9wZXJ0eShcIkhhc0RyYWZ0RW50aXR5XCIpICE9PSB0cnVlKVxuXHRcdCk7XG5cdFx0Y29uc3QgY29weWFibGVDb250ZXh0cyA9IChkYXRhTW9kZWxzcmMuc2VsZWN0ZWRDb250ZXh0cyBhcyBDb250ZXh0W10pLmZpbHRlcigoY29udGV4dCkgPT5cblx0XHRcdFRhYmxlUnVudGltZS5jaGVja0lmTm9kZUlzQ29weWFibGUoY29udGV4dCwgdGFibGUpXG5cdFx0KTtcblx0XHRjb25zdCBzZWxlY3RlZENvbnRleHRzID0gZGF0YU1vZGVsc3JjLnNlbGVjdGVkQ29udGV4dHMgYXMgQ29udGV4dFtdO1xuXHRcdGNvcHlDdXRQYXN0ZUVuYWJsZW1lbnRJbmZvLmN1dEVuYWJsZW1lbnQgPSBzZWxlY3RlZENvbnRleHRzLmxlbmd0aCA9PT0gMSAmJiBjdXRhYmxlQ29udGV4dHMubGVuZ3RoID09PSAxO1xuXHRcdGNvcHlDdXRQYXN0ZUVuYWJsZW1lbnRJbmZvLmNvcHlFbmFibGVtZW50ID0gc2VsZWN0ZWRDb250ZXh0cy5sZW5ndGggPT09IDEgJiYgY29weWFibGVDb250ZXh0cy5sZW5ndGggPT09IDE7XG5cblx0XHRpZiAobm9kZVVwZGF0ZXNJbmZvLmxhc3RBY3Rpb24pIHtcblx0XHRcdGlmIChwYXN0YWJsZUNvbnRleHRzPy5sZW5ndGggPT09IDApIHtcblx0XHRcdFx0Y29weUN1dFBhc3RlRW5hYmxlbWVudEluZm8ucGFzdGVFbmFibGVtZW50ID0gZmFsc2U7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdGxldCBjb250ZXh0c2ZvclBhc3RhYmxlRW5hYmxlbWVudDogQ29udGV4dFtdO1xuXHRcdFx0Y29uc3QgZXh0ZW5zaW9uUG9pbnQgPVxuXHRcdFx0XHRub2RlVXBkYXRlc0luZm8ubGFzdEFjdGlvbiA9PT0gXCJDdXRcIlxuXHRcdFx0XHRcdD8gdGFibGVEZWZpbml0aW9uLmNvbnRyb2wuaXNNb3ZlVG9Qb3NpdGlvbkFsbG93ZWRcblx0XHRcdFx0XHQ6IHRhYmxlRGVmaW5pdGlvbi5jb250cm9sLmlzQ29weVRvUG9zaXRpb25BbGxvd2VkO1xuXG5cdFx0XHQvL3JlbW92ZSBjb250ZXh0cyBkZXBlbmRpbmcgb2YgdGhlIGN1c3RvbSBmdW5jdGlvblxuXHRcdFx0aWYgKGV4dGVuc2lvblBvaW50KSB7XG5cdFx0XHRcdGNvbnRleHRzZm9yUGFzdGFibGVFbmFibGVtZW50ID0gWy4uLnNlbGVjdGVkQ29udGV4dHNdLmZpbHRlcihcblx0XHRcdFx0XHQodGFyZ2V0Q29udGV4dCkgPT5cblx0XHRcdFx0XHRcdChcblx0XHRcdFx0XHRcdFx0RlBNSGVscGVyLmdldEN1c3RvbUZ1bmN0aW9uPChjb250ZXh0czogQ29udGV4dFtdKSA9PiBib29sZWFuPihcblx0XHRcdFx0XHRcdFx0XHRleHRlbnNpb25Qb2ludC5tb2R1bGVOYW1lLFxuXHRcdFx0XHRcdFx0XHRcdGV4dGVuc2lvblBvaW50Lm1ldGhvZE5hbWUsXG5cdFx0XHRcdFx0XHRcdFx0dGFibGVcblx0XHRcdFx0XHRcdFx0KSBhcyBGdW5jdGlvblxuXHRcdFx0XHRcdFx0KShwYXN0YWJsZUNvbnRleHRzWzBdLCB0YXJnZXRDb250ZXh0KSAvL25vZGVVcGRhdGVzSW5mby5wYXN0YWJsZUNvbnRleHRzIGhhcyBiZWVuIHRoZSBsYXN0IHRpbWUgdGhlIHVzZXIgcHJlc3NlZCB0aGUgY3V0L2NvcHkgYnV0dG9uXG5cdFx0XHRcdCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjb250ZXh0c2ZvclBhc3RhYmxlRW5hYmxlbWVudCA9IFsuLi5zZWxlY3RlZENvbnRleHRzXTtcblx0XHRcdH1cblxuXHRcdFx0Ly90aGUgcGFzdGUgY2Fubm90IGJlIGRvbmUgaWYgc2V2ZXJhbCBjb250ZXh0cyBhcmUgc2VsZWN0ZWRcblx0XHRcdGNvcHlDdXRQYXN0ZUVuYWJsZW1lbnRJbmZvLnBhc3RlRW5hYmxlbWVudCA9XG5cdFx0XHRcdHNlbGVjdGVkQ29udGV4dHMubGVuZ3RoIDw9IDEgJiYgY29udGV4dHNmb3JQYXN0YWJsZUVuYWJsZW1lbnQubGVuZ3RoID09PSBzZWxlY3RlZENvbnRleHRzLmxlbmd0aDtcblx0XHR9XG5cdH0sXG5cblx0LyoqXG5cdCAqICBVcGRhdGVzIHRoZSBpbnRlcm5hbCBjb250ZXh0IHRvIGVuYWJsZS9kaXNhYmxlIHRoZSBtb3ZlIHVwL21vdmUgZG93biBidXR0b25zLlxuXHQgKiBAcGFyYW0gbW9kZWxPYmplY3Rcblx0ICogQHBhcmFtIHRhYmxlXG5cdCAqIEBwYXJhbSBmb3JDb250ZXh0TWVudVxuXHQgKi9cblx0dXBkYXRlTW92ZVVwRG93bkVuYWJsZW1lbnQ6IGZ1bmN0aW9uIChtb2RlbE9iamVjdDogeyBba2V5OiBzdHJpbmddOiB1bmtub3duIH0sIHRhYmxlOiBUYWJsZSwgZm9yQ29udGV4dE1lbnUgPSBmYWxzZSk6IHZvaWQge1xuXHRcdGNvbnN0IG1vZGVsT2JqZWN0UGF0aCA9ICFmb3JDb250ZXh0TWVudSA/IG1vZGVsT2JqZWN0IDogKG1vZGVsT2JqZWN0LmNvbnRleHRtZW51IGFzIHsgW2tleTogc3RyaW5nXTogdW5rbm93biB9KTtcblx0XHRjb25zdCBzZWxlY3RlZENvbnRleHRzID0gbW9kZWxPYmplY3RQYXRoLnNlbGVjdGVkQ29udGV4dHMgYXMgQ29udGV4dFtdO1xuXHRcdGNvbnN0IHRhYmxlRGVmaW5pdGlvbiA9ICh0YWJsZS5nZXRQYXJlbnQoKSBhcyBUYWJsZUFQSSkuZ2V0VGFibGVEZWZpbml0aW9uKCk7XG5cblx0XHRjb25zdCBjaGFuZ2VTaWJsaW5nRm9yUm9vdHNTdXBwb3J0ZWQgPSB0YWJsZURlZmluaXRpb24uYW5ub3RhdGlvbi5jaGFuZ2VTaWJsaW5nRm9yUm9vdHNTdXBwb3J0ZWQ7XG5cdFx0Ly8gRGlzYWJsZSB0aGUgbW92ZSB1cC9tb3ZlIGRvd24gYnV0dG9ucyBpZiB0aGVyZSBhcmUgbm8gc2VsZWN0ZWQgY29udGV4dHMsIGlmIHRoZSB0YWJsZSBpcyBub3QgYSBUcmVlVGFibGUsIG9yIGlmIHRoZSB0YWJsZSBpcyBzb3J0ZWRcblx0XHRpZiAoXG5cdFx0XHRzZWxlY3RlZENvbnRleHRzLmxlbmd0aCAhPT0gMSB8fFxuXHRcdFx0dGFibGVEZWZpbml0aW9uLmNvbnRyb2wudHlwZSAhPT0gXCJUcmVlVGFibGVcIiB8fFxuXHRcdFx0dGFibGUuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKT8uZ2V0UHJvcGVydHkoXCJpc1NvcnRlZFwiKSA9PT0gdHJ1ZSB8fFxuXHRcdFx0KHNlbGVjdGVkQ29udGV4dHNbMF0uZ2V0UHJvcGVydHkoXCJAJHVpNS5ub2RlLmxldmVsXCIpID09PSAxICYmICFjaGFuZ2VTaWJsaW5nRm9yUm9vdHNTdXBwb3J0ZWQpIC8vIERpc2FibGUgbW92ZSB1cC9kb3duIGZvciByb290c1xuXHRcdCkge1xuXHRcdFx0bW9kZWxPYmplY3RQYXRoLnNpbmdsZUNvbnRleHRNb3ZhYmxlVXAgPSBmYWxzZTtcblx0XHRcdG1vZGVsT2JqZWN0UGF0aC5zaW5nbGVDb250ZXh0TW92YWJsZURvd24gPSBmYWxzZTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Y29uc3QgbW92ZWRDb250ZXh0ID0gc2VsZWN0ZWRDb250ZXh0c1swXTtcblxuXHRcdFx0Ly8gQ2hlY2sgaWYgdGhlIHNlbGVjdGVkIGNvbnRleHQgY2FuIGJlIG1vdmVkIGFjY29yZGluZyB0byB0aGUgY3VzdG9tIGxvZ2ljIChpZiBhbnkpIGFuZCBpZiBpdCBkb2Vzbid0IGhhdmUgYSBkcmFmdCBpbnN0YW5jZSBpZiB3ZSdyZSBpbiBhIExpc3RSZXBvcnQsXG5cdFx0XHQvLyBhbmQgaWYgaXQncyBub3Qgb3V0LW9mLXBsYWNlIChpLmUuIGl0IG11c3QgYmUgZGlzcGxheWVkIGF0IGl0cyAncmVhbCcgcG9zaXRpb24pXG5cdFx0XHRjb25zdCBtb3ZhYmxlRHJhZnQgPSB0YWJsZS5nZXRSb3dCaW5kaW5nKCkuaXNSZWxhdGl2ZSgpIHx8IG1vdmVkQ29udGV4dC5nZXRQcm9wZXJ0eShcIkhhc0RyYWZ0RW50aXR5XCIpICE9PSB0cnVlO1xuXHRcdFx0Y29uc3Qgb3V0T2ZQbGFjZUNvbnRleHQgPSBtb3ZlZENvbnRleHQuaXNUcmFuc2llbnQoKSAhPT0gdW5kZWZpbmVkO1xuXHRcdFx0Y29uc3QgY3VzdG9tTW92YWJsZSA9IFRhYmxlUnVudGltZS5jaGVja0lmTm9kZUlzTW92YWJsZShtb3ZlZENvbnRleHQsIHRhYmxlKTtcblx0XHRcdG1vZGVsT2JqZWN0UGF0aC5zaW5nbGVDb250ZXh0TW92YWJsZVVwID1cblx0XHRcdFx0bW92YWJsZURyYWZ0ICYmIGN1c3RvbU1vdmFibGUgJiYgIW91dE9mUGxhY2VDb250ZXh0ICYmICFtb3ZlZENvbnRleHQuaXNEZWxldGVkKCkgJiYgbW92ZWRDb250ZXh0LmdldFNpYmxpbmcoLTEpICE9PSBudWxsO1xuXHRcdFx0bW9kZWxPYmplY3RQYXRoLnNpbmdsZUNvbnRleHRNb3ZhYmxlRG93biA9XG5cdFx0XHRcdG1vdmFibGVEcmFmdCAmJiBjdXN0b21Nb3ZhYmxlICYmICFvdXRPZlBsYWNlQ29udGV4dCAmJiAhbW92ZWRDb250ZXh0LmlzRGVsZXRlZCgpICYmIG1vdmVkQ29udGV4dC5nZXRTaWJsaW5nKDEpICE9PSBudWxsO1xuXHRcdH1cblx0fSxcblxuXHQvKipcblx0ICogVXBkYXRlcyB0aGUgaW50ZXJuYWwgY29udGV4dCB0byBlbmFibGUvZGlzYWJsZSB0aGUgQ3JlYXRlIGJ1dHRvbiAvIG1lbnUgLyBtZW51IGl0ZW1zLlxuXHQgKiBAcGFyYW0gaW50ZXJuYWxDb250ZXh0XG5cdCAqIEBwYXJhbSBjcmVhdGVFbmFibGVtZW50Q2FsbGJhY2tcblx0ICogQHBhcmFtIGNyZWF0ZUVuYWJsZW1lbnRDYWxsYmFjay5tb2R1bGVOYW1lXG5cdCAqIEBwYXJhbSBjcmVhdGVFbmFibGVtZW50Q2FsbGJhY2subWV0aG9kTmFtZVxuXHQgKiBAcGFyYW0gdGFibGVcblx0ICogQHBhcmFtIHBhcmVudENvbnRleHRcblx0ICogQHBhcmFtIG5vZGVUeXBlUGFyYW1ldGVyc1xuXHQgKiBAcGFyYW0gbm9kZVR5cGVQYXJhbWV0ZXJzLnByb3BlcnR5TmFtZVxuXHQgKiBAcGFyYW0gbm9kZVR5cGVQYXJhbWV0ZXJzLnZhbHVlc1xuXHQgKiBAcGFyYW0gZm9yQ29udGV4dE1lbnVcblx0ICovXG5cdF91cGRhdGVDcmVhdGVFbmFibGVtZW50OiBmdW5jdGlvbiAoXG5cdFx0aW50ZXJuYWxDb250ZXh0OiBJbnRlcm5hbE1vZGVsQ29udGV4dCxcblx0XHRjcmVhdGVFbmFibGVtZW50Q2FsbGJhY2s6IHsgbW9kdWxlTmFtZTogc3RyaW5nOyBtZXRob2ROYW1lOiBzdHJpbmcgfSxcblx0XHR0YWJsZTogVGFibGUsXG5cdFx0cGFyZW50Q29udGV4dDogQ29udGV4dCB8IG51bGwsXG5cdFx0bm9kZVR5cGVQYXJhbWV0ZXJzPzogeyBwcm9wZXJ0eU5hbWU6IHN0cmluZzsgdmFsdWVzOiB7IHZhbHVlOiBzdHJpbmcgfVtdIH0sXG5cdFx0Zm9yQ29udGV4dE1lbnUgPSBmYWxzZVxuXHQpOiB2b2lkIHtcblx0XHRsZXQgcG9zc2libGVWYWx1ZXM6IChzdHJpbmcgfCB1bmRlZmluZWQpW107XG5cdFx0aWYgKG5vZGVUeXBlUGFyYW1ldGVycyAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHQvLyBQdXNoIGFsbCBwb3NzaWJsZSB2YWx1ZXMgaW4gdGhlIG1lbnVcblx0XHRcdHBvc3NpYmxlVmFsdWVzID0gbm9kZVR5cGVQYXJhbWV0ZXJzLnZhbHVlcy5tYXAoKG9wdGlvbikgPT4gb3B0aW9uLnZhbHVlKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gTm8gbWVudSAtLT4gT25seSAndW5kZWZpbmVkJyB2YWx1ZSB0aGF0IGNvcnJlc3BvbmRzIHRvIHRoZSAnQ3JlYXRlJyBidXR0b25cblx0XHRcdHBvc3NpYmxlVmFsdWVzID0gW3VuZGVmaW5lZF07XG5cdFx0fVxuXG5cdFx0Y29uc3QgZW5hYmxlbWVudEZ1bmN0aW9uID0gRlBNSGVscGVyLmdldEN1c3RvbUZ1bmN0aW9uPChub2RlVHlwZTogc3RyaW5nIHwgdW5kZWZpbmVkLCBwYXJlbnRDb250ZXh0OiBDb250ZXh0IHwgbnVsbCkgPT4gYm9vbGVhbj4oXG5cdFx0XHRjcmVhdGVFbmFibGVtZW50Q2FsbGJhY2subW9kdWxlTmFtZSxcblx0XHRcdGNyZWF0ZUVuYWJsZW1lbnRDYWxsYmFjay5tZXRob2ROYW1lLFxuXHRcdFx0dGFibGVcblx0XHQpO1xuXG5cdFx0aWYgKCFlbmFibGVtZW50RnVuY3Rpb24pIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0Y29uc3QgZW5hYmxlZEZsYWdzID0gcG9zc2libGVWYWx1ZXMubWFwKCh2YWx1ZSkgPT4ge1xuXHRcdFx0bGV0IGVuYWJsZWQgPSBmYWxzZTtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdGVuYWJsZWQgPSAhIShlbmFibGVtZW50RnVuY3Rpb24odmFsdWUsIHBhcmVudENvbnRleHQpID8/IHRydWUpO1xuXHRcdFx0fSBjYXRjaCAoX2Vycm9yKSB7XG5cdFx0XHRcdGVuYWJsZWQgPSB0cnVlO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGVuYWJsZWQ7XG5cdFx0fSk7XG5cdFx0Ly8gZW5hYmxlRmxhZ3NbaV0gaXMgdHJ1ZSA8PT4gcG9zc2libGVWYWx1ZXNbaV0gaXMgYWxsb3dlZCBmb3IgY3JlYXRpb25cblxuXHRcdGNvbnN0IGVuYWJsZW1lbnRNYXA6IFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+ID0ge307XG5cdFx0ZW5hYmxlbWVudE1hcFtcIkNyZWF0ZVwiXSA9IGVuYWJsZWRGbGFncy5zb21lKChmbGFnKSA9PiBmbGFnKTsgLy8gRW5hYmxlIHRoZSBNZW51IChvciB0aGUgYnV0dG9uKSBpZiBhdCBsZWFzdCBvbmUgb3B0aW9uIGlzIHBvc3NpYmxlXG5cdFx0ZW5hYmxlZEZsYWdzLmZvckVhY2goKGVuYWJsZWQsIGluZGV4KSA9PiB7XG5cdFx0XHRlbmFibGVtZW50TWFwW2BDcmVhdGVfJHtpbmRleH1gXSA9IGVuYWJsZWQ7XG5cdFx0fSk7XG5cblx0XHRjb25zdCBjb250ZXh0UGF0aCA9IGZvckNvbnRleHRNZW51ID8gXCJjb250ZXh0bWVudS9cIiA6IFwiXCI7XG5cdFx0aW50ZXJuYWxDb250ZXh0LnNldFByb3BlcnR5KGNvbnRleHRQYXRoICsgXCJjcmVhdGVFbmFibGVtZW50XCIsIGVuYWJsZW1lbnRNYXApO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBDbGVhcnMgdGhlIHRhYmxlIHNlbGVjdGlvbiwgYW5kIGVuYWJsZXMvZGlzYWJsZXMgdGhlICdDcmVhdGUnIGJ1dHRvbi9tZW51IGlmIG5lY2Vzc2FyeS5cblx0ICogQHBhcmFtIHRhYmxlIFRoZSB0YWJsZVxuXHQgKi9cblx0Y2xlYXJTZWxlY3Rpb246IGZ1bmN0aW9uICh0YWJsZTogVGFibGUpOiB2b2lkIHtcblx0XHQvLyBDbGVhciB0aGUgc2VsZWN0aW9uIGluIHRoZSBjb250cm9sXG5cdFx0dGFibGUuY2xlYXJTZWxlY3Rpb24oKTtcblxuXHRcdC8vIFVwZGF0ZSB0aGUgc2VsZWN0aW9uLXJlbGF0ZWQgaW5mb3JtYXRpb24gaW4gdGhlIGludGVybmFsIG1vZGVsXG5cdFx0Y29uc3QgaW50ZXJuYWxNb2RlbENvbnRleHQgPSB0YWJsZS5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpO1xuXHRcdGlmIChpbnRlcm5hbE1vZGVsQ29udGV4dCkge1xuXHRcdFx0aW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJkZWxldGVFbmFibGVkXCIsIGZhbHNlKTtcblx0XHRcdGludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwibnVtYmVyT2ZTZWxlY3RlZENvbnRleHRzXCIsIDApO1xuXHRcdFx0aW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJzZWxlY3RlZENvbnRleHRzXCIsIFtdKTtcblx0XHRcdGludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwiZGVsZXRhYmxlQ29udGV4dHNcIiwgW10pO1xuXHRcdH1cblxuXHRcdC8vIEVuYWJsZS9kaXNhYmxlIHRoZSAnQ3JlYXRlJyBidXR0b24vbWVudSBpZiBuZWNlc3Nhcnlcblx0XHRjb25zdCB0YWJsZUFQSSA9IHRhYmxlLmdldFBhcmVudCgpIGFzIFRhYmxlQVBJO1xuXHRcdGlmICh0YWJsZUFQSS50YWJsZURlZmluaXRpb24uY29udHJvbC5jcmVhdGVFbmFibGVtZW50KSB7XG5cdFx0XHR0aGlzLl91cGRhdGVDcmVhdGVFbmFibGVtZW50KFxuXHRcdFx0XHRpbnRlcm5hbE1vZGVsQ29udGV4dCBhcyBJbnRlcm5hbE1vZGVsQ29udGV4dCxcblx0XHRcdFx0dGFibGVBUEkudGFibGVEZWZpbml0aW9uLmNvbnRyb2wuY3JlYXRlRW5hYmxlbWVudCxcblx0XHRcdFx0dGFibGUsXG5cdFx0XHRcdG51bGwsXG5cdFx0XHRcdHRhYmxlQVBJLnRhYmxlRGVmaW5pdGlvbi5jb250cm9sLm5vZGVUeXBlXG5cdFx0XHQpO1xuXHRcdH1cblx0fSxcblxuXHRkaXNhYmxlQWN0aW9uOiBmdW5jdGlvbiAoYUFjdGlvbnNNdWx0aXNlbGVjdERpc2FibGVkOiBzdHJpbmdbXSwgb0R5bmFtaWNBY3Rpb25zOiBSZWNvcmQ8c3RyaW5nLCB7IGJFbmFibGVkPzogYm9vbGVhbiB9Pik6IHZvaWQge1xuXHRcdGFBY3Rpb25zTXVsdGlzZWxlY3REaXNhYmxlZC5mb3JFYWNoKGZ1bmN0aW9uIChzQWN0aW9uOiBzdHJpbmcpIHtcblx0XHRcdG9EeW5hbWljQWN0aW9uc1tzQWN0aW9uXSA9IHsgYkVuYWJsZWQ6IGZhbHNlIH07XG5cdFx0fSk7XG5cdH0sXG5cdG9uRmllbGRDaGFuZ2VJbkNyZWF0aW9uUm93OiBmdW5jdGlvbiAoXG5cdFx0b0V2ZW50OiBGaWVsZCRDaGFuZ2VFdmVudCAmIFVJNUV2ZW50PHsgaXNWYWxpZDogYm9vbGVhbiB9Pixcblx0XHR3aXRoQ3VzdG9tVmFsaWRhdGlvbkZ1bmN0aW9uOiBib29sZWFuXG5cdCk6IHZvaWQge1xuXHRcdC8vIENSRUFUSU9OIFJPVyBDQVNFXG5cdFx0Y29uc3QgbUZpZWxkID0gRmllbGRSdW50aW1lSGVscGVyLmdldEZpZWxkU3RhdGVPbkNoYW5nZShvRXZlbnQpLFxuXHRcdFx0b1NvdXJjZUZpZWxkID0gbUZpZWxkLmZpZWxkLFxuXHRcdFx0c0ZpZWxkSWQgPSBvU291cmNlRmllbGQuZ2V0SWQoKTtcblxuXHRcdGNvbnN0IG9JbnRlcm5hbE1vZGVsQ29udGV4dCA9IG9Tb3VyY2VGaWVsZC5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpIGFzIEludGVybmFsTW9kZWxDb250ZXh0LFxuXHRcdFx0bUZpZWxkVmFsaWRpdHkgPSBvSW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0UHJvcGVydHkoXCJjcmVhdGlvblJvd0ZpZWxkVmFsaWRpdHlcIiksXG5cdFx0XHRtTmV3RmllbGRWYWxpZGl0eSA9IE9iamVjdC5hc3NpZ24oe30sIG1GaWVsZFZhbGlkaXR5KTtcblxuXHRcdG1OZXdGaWVsZFZhbGlkaXR5W3NGaWVsZElkXSA9IG1GaWVsZC5zdGF0ZTtcblx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJjcmVhdGlvblJvd0ZpZWxkVmFsaWRpdHlcIiwgbU5ld0ZpZWxkVmFsaWRpdHkpO1xuXG5cdFx0Ly8gcHJlcGFyZSBDdXN0b20gVmFsaWRhdGlvblxuXHRcdGlmICh3aXRoQ3VzdG9tVmFsaWRhdGlvbkZ1bmN0aW9uKSB7XG5cdFx0XHRjb25zdCBtQ3VzdG9tVmFsaWRpdHkgPSBvSW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0UHJvcGVydHkoXCJjcmVhdGlvblJvd0N1c3RvbVZhbGlkaXR5XCIpLFxuXHRcdFx0XHRtTmV3Q3VzdG9tVmFsaWRpdHkgPSBPYmplY3QuYXNzaWduKHt9LCBtQ3VzdG9tVmFsaWRpdHkpO1xuXHRcdFx0bU5ld0N1c3RvbVZhbGlkaXR5W29Tb3VyY2VGaWVsZC5nZXRCaW5kaW5nKFwidmFsdWVcIikhLmdldFBhdGgoKV0gPSB7XG5cdFx0XHRcdGZpZWxkSWQ6IG9Tb3VyY2VGaWVsZC5nZXRJZCgpXG5cdFx0XHR9O1xuXHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwiY3JlYXRpb25Sb3dDdXN0b21WYWxpZGl0eVwiLCBtTmV3Q3VzdG9tVmFsaWRpdHkpO1xuXHRcdFx0Ly8gUmVtb3ZlIGV4aXN0aW5nIEN1c3RvbVZhbGlkYXRpb24gbWVzc2FnZVxuXHRcdFx0Y29uc3Qgc1RhcmdldCA9IGAke29Tb3VyY2VGaWVsZC5nZXRCaW5kaW5nQ29udGV4dCgpPy5nZXRQYXRoKCl9LyR7b1NvdXJjZUZpZWxkLmdldEJpbmRpbmdQYXRoKFwidmFsdWVcIil9YDtcblx0XHRcdE1lc3NhZ2luZy5nZXRNZXNzYWdlTW9kZWwoKVxuXHRcdFx0XHQuZ2V0RGF0YSgpXG5cdFx0XHRcdC5mb3JFYWNoKGZ1bmN0aW9uIChvTWVzc2FnZTogTWVzc2FnZSkge1xuXHRcdFx0XHRcdGlmIChvTWVzc2FnZS5nZXRUYXJnZXRzKClbMF0gPT09IHNUYXJnZXQpIHtcblx0XHRcdFx0XHRcdE1lc3NhZ2luZy5yZW1vdmVNZXNzYWdlcyhvTWVzc2FnZSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHR9XG5cdH0sXG5cdG9uVHJlZVRhYmxlQ29udGV4dENoYW5nZWQ6IGZ1bmN0aW9uIChldmVudDogVUk1RXZlbnQsIGluaXRpYWxFeHBhbnNpb25MZXZlbD86IG51bWJlcik6IHZvaWQge1xuXHRcdC8vIFdoZW4gdGhlIGNvbnRleHQgb2YgYSBUcmVlVGFibGUgY2hhbmdlcywgd2Ugd2FudCB0byByZXN0b3JlIGl0cyBleHBhbnNpb24gc3RhdGUgdG8gdGhlIGRlZmF1bHQ6XG5cdFx0Ly8gICAtIGFsbCBleHBhbmRlZCBpZiB0aGVyZSdzIGEgc2VhcmNoIHBhcmFtZXRlciBjb21pbmcgZnJvbSB0aGUgZmlsdGVyQmFyXG5cdFx0Ly8gICAtIG90aGVyd2lzZSBpbml0aWFsIGV4cGFuc2lvbiBzdGF0ZSBjb21pbmcgZnJvbSB0aGUgUFYgKHN0b3JlZCBpbiB0aGUgcGF5bG9hZClcblx0XHQvLyAgIC0gb3RoZXJ3aXNlIG5vIGV4cGFuc2lvbiBhdCBhbGxcblxuXHRcdGNvbnN0IHNvdXJjZSA9IGV2ZW50LmdldFNvdXJjZSgpO1xuXHRcdGNvbnN0IHRhYmxlID0gc291cmNlIGFzIFRhYmxlO1xuXHRcdGNvbnN0IHRhYmxlQVBJID0gdGFibGUuZ2V0UGFyZW50KCkgYXMgVGFibGVBUEk7XG5cdFx0Y29uc3Qgcm93QmluZGluZyA9IHRhYmxlLmdldFJvd0JpbmRpbmcoKTtcblx0XHRpZiAoIXJvd0JpbmRpbmc/LmdldENvbnRleHQoKSB8fCB0YWJsZUFQSS5nZXRJZ25vcmVDb250ZXh0Q2hhbmdlRXZlbnQoKSkge1xuXHRcdFx0Ly8gVGhlIHRhYmxlIGlzIG5vdCBib3VuZCwgb3Igd2UncmUgaW4gdGhlIG1pZGRsZSBvZiBzd2l0Y2hpbmcgYmV0d2VlbiBub3JtYWwgYW5kIGZ1bGxzY3JlZW4sIHNvIHdlIGRvbid0IHdhbnQgdG8gY2hhbmdlIHRoZSBleHBhbnNpb24gc3RhdGVcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRjb25zdCBhZ2dyZWdhdGlvbjoge1xuXHRcdFx0YWdncmVnYXRlPzogb2JqZWN0O1xuXHRcdFx0ZXhwYW5kVG8/OiBudW1iZXI7XG5cdFx0XHRncmFuZFRvdGFsQXRCb3R0b21Pbmx5PzogYm9vbGVhbjtcblx0XHRcdGdyb3VwPzogb2JqZWN0O1xuXHRcdFx0Z3JvdXBMZXZlbHM/OiBzdHJpbmdbXTtcblx0XHRcdGhpZXJhcmNoeVF1YWxpZmllcj86IHN0cmluZztcblx0XHRcdHNlYXJjaD86IHN0cmluZztcblx0XHRcdHN1YnRvdGFsc0F0Qm90dG9tT25seT86IGJvb2xlYW47XG5cdFx0fSA9IHJvd0JpbmRpbmcuZ2V0QWdncmVnYXRpb24oKSA/PyB7fTtcblx0XHRjb25zdCBmaWx0ZXJJbmZvID0gVGFibGVVdGlscy5nZXRBbGxGaWx0ZXJJbmZvKHRhYmxlKTtcblx0XHRhZ2dyZWdhdGlvbi5leHBhbmRUbyA9IGZpbHRlckluZm8uc2VhcmNoID8gTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIgOiBpbml0aWFsRXhwYW5zaW9uTGV2ZWw7XG5cdFx0cm93QmluZGluZy5zZXRBZ2dyZWdhdGlvbihhZ2dyZWdhdGlvbik7XG5cdH0sXG5cblx0LyoqXG5cdCAqIENhbGxlZCB3aGVuIGFuIGl0ZW0gaW4gYSAnQ3JlYXRlJyBtZW51IGlzIGNsaWNrZWQuIEl0IGNyZWF0ZXMgYSBkb2N1bWVudCB3aXRoIHRoZSBjb3JyZXNwb25kaW5nIGluaXRpYWwgZGF0YS5cblx0ICogQHBhcmFtIGV2ZW50XG5cdCAqIEBwYXJhbSB2YWx1ZUluZGV4IFRoZSBpbmRleCBvZiB0aGUgaXRlbSBpbiB0aGUgbWVudVxuXHQgKiBAcGFyYW0gc2VsZWN0ZWRDb250ZXh0cyBUaGUgc2VsZWN0ZWQgY29udGV4dHMgaW4gdGhlIHRhYmxlIGZvciB0aGlzICdDcmVhdGUnIG1lbnVcblx0ICovXG5cdG9uQ3JlYXRlTWVudUl0ZW1QcmVzczogYXN5bmMgZnVuY3Rpb24gKGV2ZW50OiBVSTVFdmVudDx7fSwgTWVudUl0ZW0+LCB2YWx1ZUluZGV4OiBudW1iZXIsIHNlbGVjdGVkQ29udGV4dHM6IENvbnRleHRbXSk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGNvbnN0IG1kY1RhYmxlID0gRlBNSGVscGVyLmdldE1kY1RhYmxlKGV2ZW50LmdldFNvdXJjZSgpKTtcblx0XHRjb25zdCB0YWJsZUFQSSA9IG1kY1RhYmxlPy5nZXRQYXJlbnQoKSBhcyBUYWJsZUFQSSB8IHVuZGVmaW5lZDtcblxuXHRcdC8vIFNvbWUgY2hlY2tzIHRvIGJlIG9uIHRoZSBzYWZlIHNpZGVcblx0XHRpZiAoIXRhYmxlQVBJIHx8ICFtZGNUYWJsZSkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRjb25zdCBub2RlVHlwZSA9IHRhYmxlQVBJLnRhYmxlRGVmaW5pdGlvbi5jb250cm9sLm5vZGVUeXBlO1xuXHRcdGlmICghbm9kZVR5cGUpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRjb25zdCB2aWV3ID0gQ29tbW9uVXRpbHMuZ2V0VGFyZ2V0Vmlldyh0YWJsZUFQSSk7XG5cdFx0Y29uc3QgY3JlYXRpb25EYXRhOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG5cdFx0Y3JlYXRpb25EYXRhW25vZGVUeXBlLnByb3BlcnR5TmFtZV0gPSBub2RlVHlwZS52YWx1ZXNbdmFsdWVJbmRleF0udmFsdWU7XG5cblx0XHRjb25zdCBjcmVhdGlvblBhcmFtZXRlcnM6IHtcblx0XHRcdGNyZWF0aW9uTW9kZTogc3RyaW5nO1xuXHRcdFx0c2VsZWN0ZWRDb250ZXh0cz86IENvbnRleHRbXTtcblx0XHRcdHRhYmxlSWQ/OiBzdHJpbmc7XG5cdFx0XHRjcmVhdGlvbkRpYWxvZ0ZpZWxkcz86IHN0cmluZ1tdO1xuXHRcdFx0ZGF0YT86IG9iamVjdDtcblx0XHR9ID0ge1xuXHRcdFx0c2VsZWN0ZWRDb250ZXh0cyxcblx0XHRcdGNyZWF0aW9uTW9kZTogdGFibGVBUEkudGFibGVEZWZpbml0aW9uLmFubm90YXRpb24uY3JlYXRlLm1vZGUsXG5cdFx0XHRkYXRhOiBjcmVhdGlvbkRhdGEsXG5cdFx0XHR0YWJsZUlkOiBtZGNUYWJsZT8uZ2V0SWQoKVxuXHRcdH07XG5cblx0XHRpZiAoY3JlYXRpb25QYXJhbWV0ZXJzLmNyZWF0aW9uTW9kZSA9PT0gQ3JlYXRpb25Nb2RlLkNyZWF0aW9uRGlhbG9nKSB7XG5cdFx0XHRjcmVhdGlvblBhcmFtZXRlcnMuY3JlYXRpb25EaWFsb2dGaWVsZHMgPSBub2RlVHlwZS52YWx1ZXNbdmFsdWVJbmRleF0uY3JlYXRpb25EaWFsb2dGaWVsZHM7XG5cdFx0XHRpZiAoIWNyZWF0aW9uUGFyYW1ldGVycy5jcmVhdGlvbkRpYWxvZ0ZpZWxkcyB8fCBjcmVhdGlvblBhcmFtZXRlcnMuY3JlYXRpb25EaWFsb2dGaWVsZHMubGVuZ3RoID09PSAwKSB7XG5cdFx0XHRcdC8vIFVzZSB0aGUgZGVmYXVsdCB2YWx1ZSBpZiBubyBjcmVhdGlvbiBmaWVsZHMgYXJlIHNwZWNpZmllZCBmb3IgdGhpcyBtZW51IGl0ZW1cblx0XHRcdFx0Y3JlYXRpb25QYXJhbWV0ZXJzLmNyZWF0aW9uRGlhbG9nRmllbGRzID0gdGFibGVBUEkudGFibGVEZWZpbml0aW9uLmNvbnRyb2wuY3JlYXRpb25EaWFsb2dGaWVsZHM7XG5cdFx0XHR9XG5cdFx0XHRpZiAoIW1kY1RhYmxlLmdldFJvd0JpbmRpbmcoKSkge1xuXHRcdFx0XHQvLyBJbiBjcmVhdGlvbiBkaWFsb2cgbW9kZSwgd2UgZm9yY2UgdGhlIHRhYmxlIGRhdGEgdG8gYmUgbG9hZGVkIGJlZm9yZSBjcmVhdGluZyB0aGUgZG9jdW1lbnRcblx0XHRcdFx0Ly8gKHRvIG92ZXJjb21lIHRoZSBjYXNlIGluIGEgTGlzdFJlcG9ydCB3aGVyZSBubyBkYXRhIGlzIGxvYWRlZCB5ZXQpXG5cdFx0XHRcdGF3YWl0IG1kY1RhYmxlLnJlYmluZCgpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHZpZXcuZ2V0Q29udHJvbGxlcigpXG5cdFx0XHQuZWRpdEZsb3cuY3JlYXRlRG9jdW1lbnQodGFibGVBUEkuZ2V0Um93QmluZGluZygpLCBjcmVhdGlvblBhcmFtZXRlcnMpXG5cdFx0XHQuY2F0Y2goKGVycm9yKSA9PiB7XG5cdFx0XHRcdExvZy5lcnJvcihgRmFpbGVkIHRvIGNyZWF0ZSBuZXcgZG9jdW1lbnQ6ICR7ZXJyb3J9YCk7XG5cdFx0XHR9KTtcblx0fSxcblxuXHQvKipcblx0ICogQ2FsbGVkIHdoZW4gdGhlICdDcmVhdGUnIGJ1dHRvbiBpcyBwcmVzc2VkLCBvciB0aGUgJ0NyZWF0ZScgY29tbWFuZCBpbnZva2VkLlxuXHQgKiBAcGFyYW0gZXZlbnRcblx0ICogQHBhcmFtIHNlbGVjdGVkQ29udGV4dHMgVGhlIHNlbGVjdGVkIGNvbnRleHRzIGluIHRoZSB0YWJsZSBmb3IgdGhpcyAnQ3JlYXRlJyBidXR0b25cblx0ICovXG5cdG9uQ3JlYXRlQnV0dG9uUHJlc3M6IGFzeW5jIGZ1bmN0aW9uIChldmVudDogVUk1RXZlbnQsIHNlbGVjdGVkQ29udGV4dHM/OiBDb250ZXh0W10pOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRjb25zdCBtZGNUYWJsZSA9IEZQTUhlbHBlci5nZXRNZGNUYWJsZShldmVudC5nZXRTb3VyY2UoKSk7XG5cdFx0Y29uc3QgdGFibGVBUEkgPSBtZGNUYWJsZT8uZ2V0UGFyZW50KCkgYXMgVGFibGVBUEkgfCB1bmRlZmluZWQ7XG5cblx0XHQvLyBTb21lIGNoZWNrcyB0byBiZSBvbiB0aGUgc2FmZSBzaWRlXG5cdFx0aWYgKCF0YWJsZUFQSSB8fCAhbWRjVGFibGUpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRjb25zdCBjcmVhdGlvblBhcmFtZXRlcnM6IHtcblx0XHRcdGNyZWF0ZUF0RW5kPzogYm9vbGVhbjtcblx0XHRcdGNyZWF0aW9uTW9kZTogc3RyaW5nO1xuXHRcdFx0b3V0Ym91bmQ/OiBzdHJpbmc7XG5cdFx0XHRjcmVhdGlvblJvdz86IENyZWF0aW9uUm93O1xuXHRcdFx0c2VsZWN0ZWRDb250ZXh0cz86IENvbnRleHRbXTtcblx0XHRcdHRhYmxlSWQ/OiBzdHJpbmc7XG5cdFx0XHRjcmVhdGlvbkRpYWxvZ0ZpZWxkcz86IHN0cmluZ1tdO1xuXHRcdH0gPSB7IGNyZWF0aW9uTW9kZTogdGFibGVBUEkudGFibGVEZWZpbml0aW9uLmFubm90YXRpb24uY3JlYXRlLm1vZGUgfTtcblxuXHRcdHN3aXRjaCAoY3JlYXRpb25QYXJhbWV0ZXJzLmNyZWF0aW9uTW9kZSkge1xuXHRcdFx0Y2FzZSBDcmVhdGlvbk1vZGUuRXh0ZXJuYWw6XG5cdFx0XHRcdGNyZWF0aW9uUGFyYW1ldGVycy5vdXRib3VuZCA9ICh0YWJsZUFQSS50YWJsZURlZmluaXRpb24uYW5ub3RhdGlvbi5jcmVhdGUgYXMgQ3JlYXRlQmVoYXZpb3JFeHRlcm5hbCkub3V0Ym91bmQ7XG5cdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRjYXNlIENyZWF0aW9uTW9kZS5DcmVhdGlvblJvdzpcblx0XHRcdFx0Y3JlYXRpb25QYXJhbWV0ZXJzLmNyZWF0aW9uUm93ID0gZXZlbnQuZ2V0U291cmNlKCk7XG5cdFx0XHRcdGNyZWF0aW9uUGFyYW1ldGVycy5jcmVhdGVBdEVuZCA9IHRhYmxlQVBJLnRhYmxlRGVmaW5pdGlvbi5jb250cm9sLmNyZWF0ZUF0RW5kID8/IGZhbHNlO1xuXHRcdFx0XHRicmVhaztcblxuXHRcdFx0Y2FzZSBDcmVhdGlvbk1vZGUuTmV3UGFnZTpcblx0XHRcdGNhc2UgQ3JlYXRpb25Nb2RlLklubGluZTpcblx0XHRcdGNhc2UgQ3JlYXRpb25Nb2RlLkNyZWF0aW9uRGlhbG9nOlxuXHRcdFx0XHRjcmVhdGlvblBhcmFtZXRlcnMuY3JlYXRlQXRFbmQgPSB0YWJsZUFQSS50YWJsZURlZmluaXRpb24uY29udHJvbC5jcmVhdGVBdEVuZCA/PyBmYWxzZTtcblx0XHRcdFx0Y3JlYXRpb25QYXJhbWV0ZXJzLnRhYmxlSWQgPSBtZGNUYWJsZT8uZ2V0SWQoKTtcblx0XHRcdFx0Y3JlYXRpb25QYXJhbWV0ZXJzLnNlbGVjdGVkQ29udGV4dHMgPSBzZWxlY3RlZENvbnRleHRzO1xuXHRcdFx0XHRicmVhaztcblxuXHRcdFx0Y2FzZSBDcmVhdGlvbk1vZGUuSW5saW5lQ3JlYXRpb25Sb3dzOlxuXHRcdFx0XHQvLyBOb3RoaW5nXG5cdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHQvLyBPdGhlciBtb2RlcyBhcmUgbm90IHN1cHBvcnRlZFxuXHRcdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0aWYgKGNyZWF0aW9uUGFyYW1ldGVycy5jcmVhdGlvbk1vZGUgPT09IENyZWF0aW9uTW9kZS5DcmVhdGlvbkRpYWxvZykge1xuXHRcdFx0Y3JlYXRpb25QYXJhbWV0ZXJzLmNyZWF0aW9uRGlhbG9nRmllbGRzID0gdGFibGVBUEkudGFibGVEZWZpbml0aW9uLmNvbnRyb2wuY3JlYXRpb25EaWFsb2dGaWVsZHM7XG5cdFx0XHRpZiAoIW1kY1RhYmxlLmdldFJvd0JpbmRpbmcoKSkge1xuXHRcdFx0XHQvLyBJbiBjcmVhdGlvbiBkaWFsb2cgbW9kZSwgd2UgZm9yY2UgdGhlIHRhYmxlIGRhdGEgdG8gYmUgbG9hZGVkIGJlZm9yZSBjcmVhdGluZyB0aGUgZG9jdW1lbnRcblx0XHRcdFx0Ly8gKHRvIG92ZXJjb21lIHRoZSBjYXNlIGluIGEgTGlzdFJlcG9ydCB3aGVyZSBubyBkYXRhIGlzIGxvYWRlZCB5ZXQpXG5cdFx0XHRcdGF3YWl0IG1kY1RhYmxlLnJlYmluZCgpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGNvbnN0IHZpZXcgPSBDb21tb25VdGlscy5nZXRUYXJnZXRWaWV3KHRhYmxlQVBJKTtcblxuXHRcdGlmIChjcmVhdGlvblBhcmFtZXRlcnMuY3JlYXRpb25Nb2RlID09PSBDcmVhdGlvbk1vZGUuSW5saW5lQ3JlYXRpb25Sb3dzKSB7XG5cdFx0XHR2aWV3LmdldENvbnRyb2xsZXIoKVxuXHRcdFx0XHQuZWRpdEZsb3cuY3JlYXRlRW1wdHlSb3dzQW5kRm9jdXMobWRjVGFibGUpXG5cdFx0XHRcdC5jYXRjaCgoZXJyb3IpID0+IHtcblx0XHRcdFx0XHRMb2cuZXJyb3IoYEZhaWxlZCB0byBjcmVhdGUgbmV3IGVtcHR5IHJvdzogJHtlcnJvcn1gKTtcblx0XHRcdFx0fSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHZpZXcuZ2V0Q29udHJvbGxlcigpXG5cdFx0XHRcdC5lZGl0Rmxvdy5jcmVhdGVEb2N1bWVudCh0YWJsZUFQSSwgY3JlYXRpb25QYXJhbWV0ZXJzKVxuXHRcdFx0XHQuY2F0Y2goKGVycm9yKSA9PiB7XG5cdFx0XHRcdFx0TG9nLmVycm9yKGBGYWlsZWQgdG8gY3JlYXRlIG5ldyBkb2N1bWVudDogJHtlcnJvcn1gKTtcblx0XHRcdFx0fSk7XG5cdFx0fVxuXHR9LFxuXG5cdC8qKlxuXHQgKiBNZXRob2QgdG8gbWFuYWdlIHRoZSBJbnRlbnRCYXNlZCBOYXZpZ2F0aW9uIGVuYWJsZW1lbnQuXG5cdCAqIEBwYXJhbSBpbnRlcm5hbE1vZGVsQ29udGV4dFxuXHQgKiBAcGFyYW0gbmF2aWdhdGlvbkF2YWlsYWJsZU1hcFxuXHQgKiBAcGFyYW0gc2VsZWN0ZWRDb250ZXh0c1xuXHQgKiBAcGFyYW0gZm9yQ29udGV4dE1lbnVcblx0ICovXG5cdHNldEludGVudEJhc2VkTmF2aWdhdGlvbkVuYWJsZW1lbnQ6IGZ1bmN0aW9uIChcblx0XHRpbnRlcm5hbE1vZGVsQ29udGV4dDogSW50ZXJuYWxNb2RlbENvbnRleHQsXG5cdFx0bmF2aWdhdGlvbkF2YWlsYWJsZU1hcDogc3RyaW5nW10sXG5cdFx0c2VsZWN0ZWRDb250ZXh0czogQ29udGV4dFtdLFxuXHRcdGZvckNvbnRleHRNZW51ID0gZmFsc2Vcblx0KTogdm9pZCB7XG5cdFx0Zm9yIChjb25zdCBzS2V5IGluIG5hdmlnYXRpb25BdmFpbGFibGVNYXApIHtcblx0XHRcdGlmICghZm9yQ29udGV4dE1lbnUpIHtcblx0XHRcdFx0aW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoYGlibi8ke3NLZXl9YCwge1xuXHRcdFx0XHRcdGJFbmFibGVkOiBmYWxzZSxcblx0XHRcdFx0XHRhQXBwbGljYWJsZTogW10sXG5cdFx0XHRcdFx0YU5vdEFwcGxpY2FibGU6IFtdXG5cdFx0XHRcdH0pO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0aW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoYGlibi8ke3NLZXl9YCwge1xuXHRcdFx0XHRcdC8vIERvIG5vdCBjaGFuZ2UgZW5hYmxlZCwgYUFwcGxpY2FibGUgYW5kIGFOb3RBcHBsaWNhYmxlIHByb3BlcnR5IGluIGNhc2Ugb2YgY29udGV4dCBtZW51IGNhbGN1bGF0aW9uXG5cdFx0XHRcdFx0YkVuYWJsZWQ6IGludGVybmFsTW9kZWxDb250ZXh0LmdldFByb3BlcnR5KGAke2ludGVybmFsTW9kZWxDb250ZXh0LmdldFBhdGgoKX0vaWJuLyR7c0tleX0vYkVuYWJsZWRgKSxcblx0XHRcdFx0XHRhQXBwbGljYWJsZTogaW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0UHJvcGVydHkoYCR7aW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0UGF0aCgpfS9pYm4vJHtzS2V5fS9hQXBwbGljYWJsZWApLFxuXHRcdFx0XHRcdGFOb3RBcHBsaWNhYmxlOiBpbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRQcm9wZXJ0eShgJHtpbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRQYXRoKCl9L2libi8ke3NLZXl9L2FOb3RBcHBsaWNhYmxlYCksXG5cdFx0XHRcdFx0YkVuYWJsZWRGb3JDb250ZXh0TWVudTogZmFsc2UsXG5cdFx0XHRcdFx0YUFwcGxpY2FibGVGb3JDb250ZXh0TWVudTogW10sXG5cdFx0XHRcdFx0YU5vdEFwcGxpY2FibGVGb3JDb250ZXh0TWVudTogW11cblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBhQXBwbGljYWJsZSA9IFtdLFxuXHRcdFx0XHRhTm90QXBwbGljYWJsZSA9IFtdO1xuXHRcdFx0Y29uc3Qgc1Byb3BlcnR5ID0gbmF2aWdhdGlvbkF2YWlsYWJsZU1hcFtzS2V5XTtcblx0XHRcdGZvciAoY29uc3Qgc2VsZWN0ZWRDb250ZXh0IG9mIHNlbGVjdGVkQ29udGV4dHMpIHtcblx0XHRcdFx0aWYgKHNlbGVjdGVkQ29udGV4dC5nZXRPYmplY3Qoc1Byb3BlcnR5KSkge1xuXHRcdFx0XHRcdGNvbnN0IGVuYWJsZWRQcm9wZXJ0eSA9ICFmb3JDb250ZXh0TWVudSA/IFwiYkVuYWJsZWRcIiA6IFwiYkVuYWJsZWRGb3JDb250ZXh0TWVudVwiO1xuXHRcdFx0XHRcdGludGVybmFsTW9kZWxDb250ZXh0LmdldE1vZGVsKCkuc2V0UHJvcGVydHkoYCR7aW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0UGF0aCgpfS9pYm4vJHtzS2V5fS8ke2VuYWJsZWRQcm9wZXJ0eX1gLCB0cnVlKTtcblx0XHRcdFx0XHRhQXBwbGljYWJsZS5wdXNoKHNlbGVjdGVkQ29udGV4dCk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0YU5vdEFwcGxpY2FibGUucHVzaChzZWxlY3RlZENvbnRleHQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBhcHBsaWNhYmxlUHJvcGVydHkgPSAhZm9yQ29udGV4dE1lbnUgPyBcImFBcHBsaWNhYmxlXCIgOiBcImFBcHBsaWNhYmxlRm9yQ29udGV4dE1lbnVcIjtcblx0XHRcdGNvbnN0IG5vdEFwcGxpY2FibGVQcm9wZXJ0eSA9ICFmb3JDb250ZXh0TWVudSA/IFwiYU5vdEFwcGxpY2FibGVcIiA6IFwiYU5vdEFwcGxpY2FibGVGb3JDb250ZXh0TWVudVwiO1xuXHRcdFx0aW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0TW9kZWwoKS5zZXRQcm9wZXJ0eShgJHtpbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRQYXRoKCl9L2libi8ke3NLZXl9LyR7YXBwbGljYWJsZVByb3BlcnR5fWAsIGFBcHBsaWNhYmxlKTtcblx0XHRcdGludGVybmFsTW9kZWxDb250ZXh0XG5cdFx0XHRcdC5nZXRNb2RlbCgpXG5cdFx0XHRcdC5zZXRQcm9wZXJ0eShgJHtpbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRQYXRoKCl9L2libi8ke3NLZXl9LyR7bm90QXBwbGljYWJsZVByb3BlcnR5fWAsIGFOb3RBcHBsaWNhYmxlKTtcblx0XHR9XG5cdH0sXG5cblx0LyoqXG5cdCAqIENhbGxlZCB3aGVuIGEgY29udGV4dCBtZW51IGl0ZW0gaXMgcHJlc3NlZC5cblx0ICogQHBhcmFtIGV2ZW50XG5cdCAqL1xuXHRvbkNvbnRleHRNZW51SXRlbVNlbGVjdGVkOiBmdW5jdGlvbiAoZXZlbnQ6IFVJNUV2ZW50KTogdm9pZCB7XG5cdFx0Y29uc3QgbWRjVGFibGUgPSBGUE1IZWxwZXIuZ2V0TWRjVGFibGUoZXZlbnQuZ2V0U291cmNlKCkpO1xuXHRcdGNvbnN0IHRhYmxlQVBJID0gbWRjVGFibGU/LmdldFBhcmVudCgpIGFzIFRhYmxlQVBJIHwgdW5kZWZpbmVkO1xuXG5cdFx0Ly8gU2V0IHRoZSBmbGFnIG9uIHRoZSB0YWJsZUFQSSBzbyB0aGF0IGdldFNlbGVjdGVkQ29udGV4dHMgcmV0dXJucyB0aGUgY29ycmVjdCB2YWx1ZVxuXHRcdHRhYmxlQVBJPy5zZXRDb250ZXh0TWVudUFjdGl2ZSh0cnVlKTtcblxuXHRcdC8vIEFmdGVyIGEgc2hvcnQgZGVsYXkgKG9uY2UgdGhlIGNvcnJlc3BvbmRpbmcgYWN0aW9uIGhhcyBiZWVuIHRyaWdnZXJlZCksIHdlIG5lZWQgdG8gcmVzZXQgdGhlIGZsYWcgb24gdGhlIHRhYmxlXG5cdFx0c2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHR0YWJsZUFQST8uc2V0Q29udGV4dE1lbnVBY3RpdmUoZmFsc2UpO1xuXHRcdH0sIDApO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBIYW5kbGVzIHRoZSBNREMgRGF0YVN0YXRlSW5kaWNhdG9yIHBsdWdpbiB0byBkaXNwbGF5IG1lc3NhZ2VTdHJpcCBvbiBhIHRhYmxlLlxuXHQgKiBAcGFyYW0gbWVzc2FnZVxuXHQgKiBAcGFyYW0gY29udHJvbFxuXHQgKiBAcmV0dXJucyBXaGV0aGVyIHRvIHJlbmRlciB0aGUgbWVzc2FnZVN0cmlwIHZpc2libGVcblx0ICovXG5cdGRhdGFTdGF0ZUluZGljYXRvckZpbHRlcjogZnVuY3Rpb24gKG1lc3NhZ2U6IE1lc3NhZ2UsIGNvbnRyb2w6IENvbnRyb2wpOiBib29sZWFuIHtcblx0XHRjb25zdCB0YWJsZUFQSSA9IGNvbnRyb2wuZ2V0UGFyZW50KCkgYXMgVGFibGVBUEk7XG5cdFx0cmV0dXJuIHRhYmxlQVBJLmRhdGFTdGF0ZUluZGljYXRvckZpbHRlcihtZXNzYWdlLCBjb250cm9sKTtcblx0fVxufTtcblxuZXhwb3J0IGRlZmF1bHQgVGFibGVSdW50aW1lO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0VBNEJBLE1BQU1BLFlBQVksR0FBR0MsU0FBUyxDQUFDRCxZQUFZO0VBQzNDO0FBQ0E7QUFDQTtBQUNBO0VBQ0EsTUFBTUUsWUFBWSxHQUFHO0lBQ3BCQyxnQ0FBZ0MsRUFBRSxTQUFBQSxDQUFVQyxjQUFzQixFQUFFQyxPQUFnQixFQUFRO01BQzNGO01BQ0EsTUFBTUMsU0FBUyxHQUFHRCxPQUFPLENBQUNFLFNBQVMsQ0FBQyxDQUFhO01BQ2pELElBQUlILGNBQWMsS0FBS0osWUFBWSxDQUFDUSxXQUFXLEVBQUU7UUFDaEQsTUFBTUMsT0FBTyxHQUFHSCxTQUFTLENBQ3ZCSSxVQUFVLENBQUMsQ0FBQyxDQUNaQyxNQUFNLENBQUMsVUFBVUMsY0FBeUIsRUFBRUMsb0JBQTZCLEVBQUU7VUFDM0UsT0FBT0QsY0FBYyxDQUFDRSxNQUFNLENBQUVELG9CQUFvQixDQUF5QkUsU0FBUyxDQUFDLENBQUMsQ0FBQztRQUN4RixDQUFDLEVBQUUsRUFBZSxDQUFDLENBQ2xCQyxJQUFJLENBQUMsVUFBVUMsYUFBc0IsRUFBRTtVQUN2QyxPQUFPQSxhQUFhLENBQUNDLEtBQUssQ0FBQyxD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
569
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJDcmVhdGlvbk1vZGUiLCJGRUxpYnJhcnkiLCJUYWJsZVJ1bnRpbWUiLCJleGVjdXRlQ29uZGl0aW9uYWxBY3Rpb25TaG9ydGN1dCIsInNCdXR0b25NYXRjaGVyIiwib1NvdXJjZSIsIm9NZGNUYWJsZSIsImdldFBhcmVudCIsIkNyZWF0aW9uUm93Iiwib0J1dHRvbiIsImdldEFjdGlvbnMiLCJyZWR1Y2UiLCJhQWN0aW9uQnV0dG9ucyIsIm9BY3Rpb25Ub29sYmFyQWN0aW9uIiwiY29uY2F0IiwiZ2V0QWN0aW9uIiwiZmluZCIsIm9BY3Rpb25CdXR0b24iLCJnZXRJZCIsImVuZHNXaXRoIiwiQ29tbW9uVXRpbHMiLCJmaXJlQnV0dG9uUHJlc3MiLCJvQ3JlYXRpb25Sb3ciLCJnZXRBZ2dyZWdhdGlvbiIsImdldEFwcGx5RW5hYmxlZCIsImdldFZpc2libGUiLCJmaXJlQXBwbHkiLCJzZXRDb250ZXh0cyIsImV2ZW50Iiwic291cmNlIiwiZ2V0U291cmNlIiwidGFibGUiLCJCdXN5TG9ja2VyIiwibG9jayIsInNldENvbnRleHRzQXN5bmMiLCJlcnJvciIsIkxvZyIsInVubG9jayIsIm1ldGFNb2RlbCIsImdldE1vZGVsIiwiZ2V0TWV0YU1vZGVsIiwidGFibGVBUEkiLCJ0YWJsZURlZmluaXRpb24iLCJjb2xsZWN0aW9uRW50aXR5IiwiTWV0YU1vZGVsQ29udmVydGVyIiwiY29udmVydFR5cGVzIiwicmVzb2x2ZVBhdGgiLCJhbm5vdGF0aW9uIiwiY29sbGVjdGlvbiIsInRhcmdldCIsInNVcGRhdGFibGVQYXRoIiwidXBkYXRhYmxlUHJvcGVydHlQYXRoIiwiYUFjdGlvbnNNdWx0aXNlbGVjdERpc2FibGVkIiwiZGF0YSIsInNwbGl0Iiwib0FjdGlvbk9wZXJhdGlvbkF2YWlsYWJsZU1hcCIsIkpTT04iLCJwYXJzZSIsIm9wZXJhdGlvbkF2YWlsYWJsZU1hcCIsIm9OYXZpZ2F0aW9uQXZhaWxhYmxlTWFwIiwiYVNlbGVjdGVkQ29udGV4dHMiLCJnZXRTZWxlY3RlZENvbnRleHRzIiwiYURlbGV0YWJsZUNvbnRleHRzIiwiYlJlYWRPbmx5RHJhZnRFbmFibGVkIiwiYW5ub3RhdGlvbnMiLCJDb21tb24iLCJEcmFmdFJvb3QiLCJhVXBkYXRhYmxlQ29udGV4dHMiLCJvRHluYW1pY0FjdGlvbnMiLCJvSUJOIiwib0ludGVybmFsTW9kZWxDb250ZXh0IiwiZ2V0QmluZGluZ0NvbnRleHQiLCJkZWxldGVIZWxwZXIiLCJ1cGRhdGVEZWxldGVJbmZvRm9yU2VsZWN0ZWRDb250ZXh0cyIsImFjdGl2ZVNlbGVjdGVkQ29udGV4dHMiLCJmaWx0ZXIiLCJvQ29udGV4dCIsImlzSW5hY3RpdmUiLCJvTW9kZWxPYmplY3QiLCJPYmplY3QiLCJhc3NpZ24iLCJnZXRPYmplY3QiLCJzZWxlY3RlZENvbnRleHRzIiwic2VsZWN0ZWRDb250ZXh0c0luY2x1ZGluZ0luYWN0aXZlIiwibnVtYmVyT2ZTZWxlY3RlZENvbnRleHRzIiwibGVuZ3RoIiwiZHluYW1pY0FjdGlvbnMiLCJpYm4iLCJkZWxldGVFbmFibGVkIiwiZGVsZXRhYmxlQ29udGV4dHMiLCJ1blNhdmVkQ29udGV4dHMiLCJsb2NrZWRDb250ZXh0cyIsImRyYWZ0c1dpdGhOb25EZWxldGFibGVBY3RpdmUiLCJkcmFmdHNXaXRoRGVsZXRhYmxlQWN0aXZlIiwiY29udHJvbElkIiwidXBkYXRhYmxlQ29udGV4dHMiLCJwYXN0ZUF1dGhvcml6ZWQiLCJwYXN0ZUZyb21Db3B5QXV0b3JpemVkIiwic2VtYW50aWNLZXlIYXNEcmFmdEluZGljYXRvciIsImdldFByb3BlcnR5IiwidW5kZWZpbmVkIiwibm9kZVVwZGF0ZXNJbmZvIiwib1NlbGVjdGVkQ29udGV4dCIsIm9Db250ZXh0RGF0YSIsImtleSIsImluZGV4T2YiLCJzQWN0aW9uUGF0aCIsInN1YnN0cmluZyIsImVuYWJsZWQiLCJzZXRQcm9wZXJ0eSIsImlzVXBkYXRhYmxlQ29udGV4dCIsInB1c2giLCJzZXRJbnRlbnRCYXNlZE5hdmlnYXRpb25FbmFibGVtZW50IiwiZGlzYWJsZUFjdGlvbiIsImNvbnRyb2wiLCJjcmVhdGVFbmFibGVtZW50IiwicGFyZW50Q29udGV4dCIsIl91cGRhdGVDcmVhdGVFbmFibGVtZW50Iiwibm9kZVR5cGUiLCJ1cGRhdGVDdXRDb3B5UGFzdGVFbmFibGVtZW50IiwidXBkYXRlTW92ZVVwRG93bkVuYWJsZW1lbnQiLCJBY3Rpb25SdW50aW1lIiwic2V0QWN0aW9uRW5hYmxlbWVudCIsInNlbGVjdGVkQ29udGV4dCIsInJlYWRPbmx5RHJhZnRFbmFibGVkIiwiY29udGV4dERhdGEiLCJ1cGRhdGFibGVCeVBhdGgiLCJub3REcmFmdEluUmVhZE9ubHlNb2RlIiwiSXNBY3RpdmVFbnRpdHkiLCJIYXNEcmFmdEVudGl0eSIsImNoZWNrSWZOb2RlSXNNb3ZhYmxlIiwibm9kZSIsImlzTm9kZU1vdmFibGVGdW5jdGlvbiIsImdldFRhYmxlRGVmaW5pdGlvbiIsImlzTm9kZU1vdmFibGUiLCJub2RlTW92YWJsZUN1c3RvbUZ1bmN0aW9uIiwiRlBNSGVscGVyIiwiZ2V0Q3VzdG9tRnVuY3Rpb24iLCJtb2R1bGVOYW1lIiwibWV0aG9kTmFtZSIsIndhcm5pbmciLCJjaGVja0lmTm9kZUlzQ29weWFibGUiLCJpc05vZGVDb3B5YWJsZUZ1bmN0aW9uIiwiaXNOb2RlQ29weWFibGUiLCJtb2RlbE9iamVjdCIsImZvckNvbnRleHRNZW51IiwiYXJndW1lbnRzIiwiY29udGV4dG1lbnUiLCJ0eXBlIiwidmlldyIsImdldFRhcmdldFZpZXciLCJpc1ZpZXdFZGl0YWJsZSIsImdldElzRWRpdGFibGUiLCJnZXRDb250cm9sbGVyTmFtZSIsImNoZWNrRHJhZnRJbnN0YW5jZSIsImdldFJvd0JpbmRpbmciLCJpc1JlbGF0aXZlIiwicGFzdGFibGVDb250ZXh0cyIsImdldEFsbEN1cnJlbnRDb250ZXh0cyIsImNvbnRleHQiLCJtYXAiLCJwYXN0YWJsZUNvbnRleHQiLCJnZXRQYXRoIiwiaW5jbHVkZXMiLCJNZXNzYWdlVG9hc3QiLCJzaG93IiwiUmVzb3VyY2VNb2RlbEhlbHBlciIsImdldFJlc291cmNlTW9kZWwiLCJnZXRUZXh0IiwiY29weUN1dFBhc3RlRW5hYmxlbWVudEluZm8iLCJkYXRhTW9kZWxzcmMiLCJjdXRhYmxlQ29udGV4dHMiLCJjb3B5YWJsZUNvbnRleHRzIiwiY3V0RW5hYmxlbWVudCIsImNvcHlFbmFibGVtZW50IiwibGFzdEFjdGlvbiIsInBhc3RlRW5hYmxlbWVudCIsImNvbnRleHRzZm9yUGFzdGFibGVFbmFibGVtZW50IiwiZXh0ZW5zaW9uUG9pbnQiLCJpc01vdmVUb1Bvc2l0aW9uQWxsb3dlZCIsImlzQ29weVRvUG9zaXRpb25BbGxvd2VkIiwidGFyZ2V0Q29udGV4dCIsIm1vZGVsT2JqZWN0UGF0aCIsImNoYW5nZVNpYmxpbmdGb3JSb290c1N1cHBvcnRlZCIsInNpbmdsZUNvbnRleHRNb3ZhYmxlVXAiLCJzaW5nbGVDb250ZXh0TW92YWJsZURvd24iLCJtb3ZlZENvbnRleHQiLCJtb3ZhYmxlRHJhZnQiLCJvdXRPZlBsYWNlQ29udGV4dCIsImlzVHJhbnNpZW50IiwiY3VzdG9tTW92YWJsZSIsImlzRGVsZXRlZCIsImdldFNpYmxpbmciLCJpbnRlcm5hbENvbnRleHQiLCJjcmVhdGVFbmFibGVtZW50Q2FsbGJhY2siLCJub2RlVHlwZVBhcmFtZXRlcnMiLCJwb3NzaWJsZVZhbHVlcyIsInZhbHVlcyIsIm9wdGlvbiIsInZhbHVlIiwiZW5hYmxlbWVudEZ1bmN0aW9uIiwiZW5hYmxlZEZsYWdzIiwiX2Vycm9yIiwiZW5hYmxlbWVudE1hcCIsInNvbWUiLCJmbGFnIiwiZm9yRWFjaCIsImluZGV4IiwiY29udGV4dFBhdGgiLCJjbGVhclNlbGVjdGlvbiIsImludGVybmFsTW9kZWxDb250ZXh0Iiwic0FjdGlvbiIsImJFbmFibGVkIiwib25GaWVsZENoYW5nZUluQ3JlYXRpb25Sb3ciLCJvRXZlbnQiLCJ3aXRoQ3VzdG9tVmFsaWRhdGlvbkZ1bmN0aW9uIiwibUZpZWxkIiwiRmllbGRSdW50aW1lSGVscGVyIiwiZ2V0RmllbGRTdGF0ZU9uQ2hhbmdlIiwib1NvdXJjZUZpZWxkIiwiZmllbGQiLCJzRmllbGRJZCIsIm1GaWVsZFZhbGlkaXR5IiwibU5ld0ZpZWxkVmFsaWRpdHkiLCJzdGF0ZSIsIm1DdXN0b21WYWxpZGl0eSIsIm1OZXdDdXN0b21WYWxpZGl0eSIsImdldEJpbmRpbmciLCJmaWVsZElkIiwic1RhcmdldCIsImdldEJpbmRpbmdQYXRoIiwiTWVzc2FnaW5nIiwiZ2V0TWVzc2FnZU1vZGVsIiwiZ2V0RGF0YSIsIm9NZXNzYWdlIiwiZ2V0VGFyZ2V0cyIsInJlbW92ZU1lc3NhZ2VzIiwib25UcmVlVGFibGVDb250ZXh0Q2hhbmdlZCIsImluaXRpYWxFeHBhbnNpb25MZXZlbCIsInJvd0JpbmRpbmciLCJnZXRDb250ZXh0IiwiZ2V0SWdub3JlQ29udGV4dENoYW5nZUV2ZW50IiwiYWdncmVnYXRpb24iLCJmaWx0ZXJJbmZvIiwiVGFibGVVdGlscyIsImdldEFsbEZpbHRlckluZm8iLCJleHBhbmRUbyIsInNlYXJjaCIsIk51bWJlciIsIk1BWF9TQUZFX0lOVEVHRVIiLCJzZXRBZ2dyZWdhdGlvbiIsIm9uQ3JlYXRlTWVudUl0ZW1QcmVzcyIsInZhbHVlSW5kZXgiLCJtZGNUYWJsZSIsImdldE1kY1RhYmxlIiwiY3JlYXRpb25EYXRhIiwicHJvcGVydHlOYW1lIiwiY3JlYXRpb25QYXJhbWV0ZXJzIiwiY3JlYXRpb25Nb2RlIiwiY3JlYXRlIiwibW9kZSIsInRhYmxlSWQiLCJDcmVhdGlvbkRpYWxvZyIsImNyZWF0aW9uRGlhbG9nRmllbGRzIiwicmViaW5kIiwiZ2V0Q29udHJvbGxlciIsImVkaXRGbG93IiwiY3JlYXRlRG9jdW1lbnQiLCJjYXRjaCIsIm9uQ3JlYXRlQnV0dG9uUHJlc3MiLCJFeHRlcm5hbCIsIm91dGJvdW5kIiwiY3JlYXRpb25Sb3ciLCJjcmVhdGVBdEVuZCIsIk5ld1BhZ2UiLCJJbmxpbmUiLCJJbmxpbmVDcmVhdGlvblJvd3MiLCJjcmVhdGVFbXB0eVJvd3NBbmRGb2N1cyIsIm5hdmlnYXRpb25BdmFpbGFibGVNYXAiLCJzS2V5IiwiYUFwcGxpY2FibGUiLCJhTm90QXBwbGljYWJsZSIsImJFbmFibGVkRm9yQ29udGV4dE1lbnUiLCJhQXBwbGljYWJsZUZvckNvbnRleHRNZW51IiwiYU5vdEFwcGxpY2FibGVGb3JDb250ZXh0TWVudSIsInNQcm9wZXJ0eSIsImVuYWJsZWRQcm9wZXJ0eSIsImFwcGxpY2FibGVQcm9wZXJ0eSIsIm5vdEFwcGxpY2FibGVQcm9wZXJ0eSIsIm9uQ29udGV4dE1lbnVJdGVtU2VsZWN0ZWQiLCJzZXRDb250ZXh0TWVudUFjdGl2ZSIsInNldFRpbWVvdXQiLCJkYXRhU3RhdGVJbmRpY2F0b3JGaWx0ZXIiLCJtZXNzYWdlIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJUYWJsZVJ1bnRpbWUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBFbnRpdHlTZXQgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXNcIjtcbmltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IEFjdGlvblJ1bnRpbWUgZnJvbSBcInNhcC9mZS9jb3JlL0FjdGlvblJ1bnRpbWVcIjtcbmltcG9ydCBDb21tb25VdGlscyBmcm9tIFwic2FwL2ZlL2NvcmUvQ29tbW9uVXRpbHNcIjtcbmltcG9ydCBCdXN5TG9ja2VyIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9CdXN5TG9ja2VyXCI7XG5pbXBvcnQgKiBhcyBNZXRhTW9kZWxDb252ZXJ0ZXIgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWV0YU1vZGVsQ29udmVydGVyXCI7XG5pbXBvcnQgdHlwZSB7IENyZWF0ZUJlaGF2aW9yRXh0ZXJuYWwgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9Db21tb24vVGFibGVcIjtcbmltcG9ydCBkZWxldGVIZWxwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvRGVsZXRlSGVscGVyXCI7XG5pbXBvcnQgRlBNSGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0ZQTUhlbHBlclwiO1xuaW1wb3J0IHR5cGUgeyBJbnRlcm5hbE1vZGVsQ29udGV4dCB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01vZGVsSGVscGVyXCI7XG5pbXBvcnQgUmVzb3VyY2VNb2RlbEhlbHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9SZXNvdXJjZU1vZGVsSGVscGVyXCI7XG5pbXBvcnQgRkVMaWJyYXJ5IGZyb20gXCJzYXAvZmUvY29yZS9saWJyYXJ5XCI7XG5pbXBvcnQgdHlwZSBUYWJsZUFQSSBmcm9tIFwic2FwL2ZlL21hY3Jvcy90YWJsZS9UYWJsZUFQSVwiO1xuaW1wb3J0IFRhYmxlVXRpbHMgZnJvbSBcInNhcC9mZS9tYWNyb3MvdGFibGUvVXRpbHNcIjtcbmltcG9ydCB0eXBlIE1lbnVJdGVtIGZyb20gXCJzYXAvbS9NZW51SXRlbVwiO1xuaW1wb3J0IE1lc3NhZ2VUb2FzdCBmcm9tIFwic2FwL20vTWVzc2FnZVRvYXN0XCI7XG5pbXBvcnQgdHlwZSBVSTVFdmVudCBmcm9tIFwic2FwL3VpL2Jhc2UvRXZlbnRcIjtcbmltcG9ydCB0eXBlIENvbnRyb2wgZnJvbSBcInNhcC91aS9jb3JlL0NvbnRyb2xcIjtcbmltcG9ydCBNZXNzYWdpbmcgZnJvbSBcInNhcC91aS9jb3JlL01lc3NhZ2luZ1wiO1xuaW1wb3J0IHR5cGUgTWVzc2FnZSBmcm9tIFwic2FwL3VpL2NvcmUvbWVzc2FnZS9NZXNzYWdlXCI7XG5pbXBvcnQgdHlwZSB7IGRlZmF1bHQgYXMgTURDVGFibGUsIGRlZmF1bHQgYXMgVGFibGUgfSBmcm9tIFwic2FwL3VpL21kYy9UYWJsZVwiO1xuaW1wb3J0IHR5cGUgQWN0aW9uVG9vbGJhckFjdGlvbiBmcm9tIFwic2FwL3VpL21kYy9hY3Rpb250b29sYmFyL0FjdGlvblRvb2xiYXJBY3Rpb25cIjtcbmltcG9ydCB0eXBlIENyZWF0aW9uUm93IGZyb20gXCJzYXAvdWkvbWRjL3RhYmxlL0NyZWF0aW9uUm93XCI7XG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvQ29udGV4dFwiO1xuaW1wb3J0IHR5cGUgT0RhdGFNZXRhTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YU1ldGFNb2RlbFwiO1xuaW1wb3J0IHR5cGUgeyBFdmVudFR5cGUgfSBmcm9tIFwidHlwZXMvZXh0ZW5zaW9uX3R5cGVzXCI7XG5pbXBvcnQgdHlwZSBGaWVsZCBmcm9tIFwiLi4vRmllbGRcIjtcbmltcG9ydCBGaWVsZFJ1bnRpbWVIZWxwZXIgZnJvbSBcIi4uL2ZpZWxkL0ZpZWxkUnVudGltZUhlbHBlclwiO1xuXG5jb25zdCBDcmVhdGlvbk1vZGUgPSBGRUxpYnJhcnkuQ3JlYXRpb25Nb2RlO1xuLyoqXG4gKiBTdGF0aWMgY2xhc3MgdXNlZCBieSB0aGUgVGFibGUgYnVpbGRpbmcgYmxvY2sgZHVyaW5nIHJ1bnRpbWVcbiAqIEBwcml2YXRlXG4gKi9cbmNvbnN0IFRhYmxlUnVudGltZSA9IHtcblx0ZXhlY3V0ZUNvbmRpdGlvbmFsQWN0aW9uU2hvcnRjdXQ6IGZ1bmN0aW9uIChzQnV0dG9uTWF0Y2hlcjogc3RyaW5nLCBvU291cmNlOiBDb250cm9sKTogdm9pZCB7XG5cdFx0Ly8gR2V0IHRoZSBidXR0b24gcmVsYXRlZCB0byBrZXlib2FyZCBzaG9ydGN1dFxuXHRcdGNvbnN0IG9NZGNUYWJsZSA9IG9Tb3VyY2UuZ2V0UGFyZW50KCkgYXMgTURDVGFibGU7XG5cdFx0aWYgKHNCdXR0b25NYXRjaGVyICE9PSBDcmVhdGlvbk1vZGUuQ3JlYXRpb25Sb3cpIHtcblx0XHRcdGNvbnN0IG9CdXR0b24gPSBvTWRjVGFibGVcblx0XHRcdFx0LmdldEFjdGlvbnMoKVxuXHRcdFx0XHQucmVkdWNlKGZ1bmN0aW9uIChhQWN0aW9uQnV0dG9uczogQ29udHJvbFtdLCBvQWN0aW9uVG9vbGJhckFjdGlvbjogQ29udHJvbCkge1xuXHRcdFx0XHRcdHJldHVybiBhQWN0aW9uQnV0dG9ucy5jb25jYXQoKG9BY3Rpb25Ub29sYmFyQWN0aW9uIGFzIEFjdGlvblRvb2xiYXJBY3Rpb24pLmdldEFjdGlvbigpKTtcblx0XHRcdFx0fSwgW10gYXMgQ29udHJvbFtdKVxuXHRcdFx0XHQuZmluZChmdW5jdGlvbiAob0FjdGlvbkJ1dHRvbjogQ29udHJvbCkge1xuXHRcdFx0XHRcdHJldHVybiBvQWN0aW9uQnV0dG9uLmdldElkKCkuZW5kc1dpdGgoc0J1dHRvbk1hdGNoZXIpO1xuXHRcdFx0XHR9KTtcblx0XHRcdENvbW1vblV0aWxzLmZpcmVCdXR0b25QcmVzcyhvQnV0dG9uKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Y29uc3Qgb0NyZWF0aW9uUm93ID0gb01kY1RhYmxlLmdldEFnZ3JlZ2F0aW9uKFwiY3JlYXRpb25Sb3dcIikgYXMgQ3JlYXRpb25Sb3c7XG5cdFx0XHRpZiAob0NyZWF0aW9uUm93ICYmIG9DcmVhdGlvblJvdy5nZXRBcHBseUVuYWJsZWQoKSAmJiBvQ3JlYXRpb25Sb3cuZ2V0VmlzaWJsZSgpKSB7XG5cdFx0XHRcdG9DcmVhdGlvblJvdy5maXJlQXBwbHkoKTtcblx0XHRcdH1cblx0XHR9XG5cdH0sXG5cblx0c2V0Q29udGV4dHM6IGFzeW5jIGZ1bmN0aW9uIChldmVudDogVUk1RXZlbnQ8e30sIFRhYmxlPik6IFByb21pc2U8dm9pZD4ge1xuXHRcdGNvbnN0IHNvdXJjZSA9IGV2ZW50LmdldFNvdXJjZSgpO1xuXHRcdGNvbnN0IHRhYmxlID0gc291cmNlO1xuXHRcdEJ1c3lMb2NrZXIubG9jayh0YWJsZSk7XG5cdFx0dHJ5IHtcblx0XHRcdGF3YWl0IFRhYmxlUnVudGltZS5zZXRDb250ZXh0c0FzeW5jKHRhYmxlKTtcblx0XHR9IGNhdGNoIChlcnJvcikge1xuXHRcdFx0TG9nLmVycm9yKGVycm9yIGFzIHN0cmluZyk7XG5cdFx0fSBmaW5hbGx5IHtcblx0XHRcdEJ1c3lMb2NrZXIudW5sb2NrKHRhYmxlKTtcblx0XHR9XG5cdH0sXG5cblx0c2V0Q29udGV4dHNBc3luYzogYXN5bmMgZnVuY3Rpb24gKHRhYmxlOiBUYWJsZSk6IFByb21pc2U8dm9pZFtdIHwgdW5kZWZpbmVkPiB7XG5cdFx0Y29uc3QgbWV0YU1vZGVsID0gdGFibGUuZ2V0TW9kZWwoKT8uZ2V0TWV0YU1vZGVsKCkgYXMgdW5kZWZpbmVkIHwgT0RhdGFNZXRhTW9kZWw7XG5cdFx0Y29uc3QgdGFibGVBUEkgPSB0YWJsZS5nZXRQYXJlbnQoKSBhcyBUYWJsZUFQSTtcblx0XHRpZiAoIXRhYmxlQVBJIHx8ICFtZXRhTW9kZWwpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0Y29uc3QgdGFibGVEZWZpbml0aW9uID0gdGFibGVBUEkudGFibGVEZWZpbml0aW9uO1xuXHRcdGNvbnN0IGNvbGxlY3Rpb25FbnRpdHkgPSBNZXRhTW9kZWxDb252ZXJ0ZXIuY29udmVydFR5cGVzKG1ldGFNb2RlbCkucmVzb2x2ZVBhdGg8RW50aXR5U2V0Pihcblx0XHRcdHRhYmxlRGVmaW5pdGlvbi5hbm5vdGF0aW9uLmNvbGxlY3Rpb25cblx0XHQpLnRhcmdldDtcblx0XHRjb25zdCBzVXBkYXRhYmxlUGF0aCA9IHRhYmxlRGVmaW5pdGlvbi5hbm5vdGF0aW9uLnVwZGF0YWJsZVByb3BlcnR5UGF0aDtcblxuXHRcdGNvbnN0IGFBY3Rpb25zTXVsdGlzZWxlY3REaXNhYmxlZCA9IHRhYmxlLmRhdGEoXCJhY3Rpb25zTXVsdGlzZWxlY3REaXNhYmxlZFwiKT8uc3BsaXQoXCIsXCIpID8/IFtdO1xuXHRcdGNvbnN0IG9BY3Rpb25PcGVyYXRpb25BdmFpbGFibGVNYXAgPSBKU09OLnBhcnNlKHRhYmxlRGVmaW5pdGlvbi5vcGVyYXRpb25BdmFpbGFibGVNYXAgfHwgXCJ7fVwiKTtcblx0XHRjb25zdCBvTmF2aWdhdGlvbkF2YWlsYWJsZU1hcCA9IHRhYmxlLmRhdGEoXCJuYXZpZ2F0aW9uQXZhaWxhYmxlTWFwXCIpO1xuXG5cdFx0Y29uc3QgYVNlbGVjdGVkQ29udGV4dHMgPSB0YWJsZS5nZXRTZWxlY3RlZENvbnRleHRzKCkgYXMgQ29udGV4dFtdO1xuXHRcdGNvbnN0IGFEZWxldGFibGVDb250ZXh0czogQ29udGV4dFtdID0gW107XG5cdFx0Y29uc3QgYlJlYWRPbmx5RHJhZnRFbmFibGVkID1cblx0XHRcdHRhYmxlLmRhdGEoXCJkaXNwbGF5TW9kZVByb3BlcnR5QmluZGluZ1wiKSA9PT0gXCJ0cnVlXCIgJiYgISFjb2xsZWN0aW9uRW50aXR5Py5hbm5vdGF0aW9ucy5Db21tb24/LkRyYWZ0Um9vdDtcblx0XHRjb25zdCBhVXBkYXRhYmxlQ29udGV4dHM6IENvbnRleHRbXSA9IFtdO1xuXHRcdC8vIG9EeW5hbWljQWN0aW9ucyBhcmUgYm91bmQgYWN0aW9ucyB0aGF0IGFyZSBhdmFpbGFibGUgYWNjb3JkaW5nIHRvIHNvbWUgcHJvcGVydHlcblx0XHQvLyBpbiBlYWNoIGl0ZW1cblx0XHRjb25zdCBvRHluYW1pY0FjdGlvbnM6IFJlY29yZDxzdHJpbmcsIHsgYkVuYWJsZWQ/OiBib29sZWFuIH0+IHwgdW5kZWZpbmVkID0ge307XG5cdFx0Y29uc3Qgb0lCTiA9IHt9O1xuXHRcdGNvbnN0IG9JbnRlcm5hbE1vZGVsQ29udGV4dCA9IHRhYmxlLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikgYXMgSW50ZXJuYWxNb2RlbENvbnRleHQ7XG5cblx0XHRpZiAoIW9JbnRlcm5hbE1vZGVsQ29udGV4dCkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHQvLyBmb3IgdGhlIGRlbGV0ZSB3ZSBjb25zaWRlciB0aGUgaW5hY3RpdmUgY29udGV4dHMgYXMgcG90ZW50aWFsbHkgcGFydCBvZiB0aGUgc2VsZWN0ZWQgY29udGV4dHNcblx0XHRkZWxldGVIZWxwZXIudXBkYXRlRGVsZXRlSW5mb0ZvclNlbGVjdGVkQ29udGV4dHMob0ludGVybmFsTW9kZWxDb250ZXh0LCBhU2VsZWN0ZWRDb250ZXh0cyk7XG5cblx0XHQvL2RvIG5vdCBjb25zaWRlciBlbXB0eSByb3dzIGFzIHNlbGVjdGVkIGNvbnRleHQsIGZvciB0aGUgb3RoZXIgYWN0aW9uc1xuXHRcdGNvbnN0IGFjdGl2ZVNlbGVjdGVkQ29udGV4dHMgPSBhU2VsZWN0ZWRDb250ZXh0cy5maWx0ZXIoZnVuY3Rpb24gKG9Db250ZXh0OiBDb250ZXh0KSB7XG5cdFx0XHRyZXR1cm4gIW9Db250ZXh0LmlzSW5hY3RpdmUoKTtcblx0XHR9KTtcblxuXHRcdGNvbnN0IG9Nb2RlbE9iamVjdCA9IE9iamVjdC5hc3NpZ24ob0ludGVybmFsTW9kZWxDb250ZXh0LmdldE9iamVjdCgpIHx8IHt9LCB7XG5cdFx0XHRzZWxlY3RlZENvbnRleHRzOiBhY3RpdmVTZWxlY3RlZENvbnRleHRzLFxuXHRcdFx0c2VsZWN0ZWRDb250ZXh0c0luY2x1ZGluZ0luYWN0aXZlOiBhU2VsZWN0ZWRDb250ZXh0cyxcblx0XHRcdG51bWJlck9mU2VsZWN0ZWRDb250ZXh0czogYWN0aXZlU2VsZWN0ZWRDb250ZXh0cy5sZW5ndGgsXG5cdFx0XHRkeW5hbWljQWN0aW9uczogb0R5bmFtaWNBY3Rpb25zLFxuXHRcdFx0aWJuOiBvSUJOLFxuXHRcdFx0ZGVsZXRlRW5hYmxlZDogdHJ1ZSxcblx0XHRcdGRlbGV0YWJsZUNvbnRleHRzOiBhRGVsZXRhYmxlQ29udGV4dHMsXG5cdFx0XHR1blNhdmVkQ29udGV4dHM6IFtdLFxuXHRcdFx0bG9ja2VkQ29udGV4dHM6IFtdLFxuXHRcdFx0ZHJhZnRzV2l0aE5vbkRlbGV0YWJsZUFjdGl2ZTogW10sXG5cdFx0XHRkcmFmdHNXaXRoRGVsZXRhYmxlQWN0aXZlOiBbXSxcblx0XHRcdGNvbnRyb2xJZDogXCJcIixcblx0XHRcdHVwZGF0YWJsZUNvbnRleHRzOiBhVXBkYXRhYmxlQ29udGV4dHMsXG5cdFx0XHRwYXN0ZUF1dGhvcml6ZWQ6IHRydWUsXG5cdFx0XHRwYXN0ZUZyb21Db3B5QXV0b3JpemVkOiB0cnVlLFxuXHRcdFx0c2VtYW50aWNLZXlIYXNEcmFmdEluZGljYXRvcjogb0ludGVybmFsTW9kZWxDb250ZXh0LmdldFByb3BlcnR5KFwic2VtYW50aWNLZXlIYXNEcmFmdEluZGljYXRvclwiKVxuXHRcdFx0XHQ/IG9JbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRQcm9wZXJ0eShcInNlbWFudGljS2V5SGFzRHJhZnRJbmRpY2F0b3JcIilcblx0XHRcdFx0OiB1bmRlZmluZWRcblx0XHR9KTtcblx0XHRvTW9kZWxPYmplY3Qubm9kZVVwZGF0ZXNJbmZvID0gb01vZGVsT2JqZWN0Lm5vZGVVcGRhdGVzSW5mbyB8fCB7fTtcblxuXHRcdGZvciAoY29uc3Qgb1NlbGVjdGVkQ29udGV4dCBvZiBhY3RpdmVTZWxlY3RlZENvbnRleHRzKSB7XG5cdFx0XHRjb25zdCBvQ29udGV4dERhdGEgPSBvU2VsZWN0ZWRDb250ZXh0LmdldE9iamVjdCgpO1xuXHRcdFx0Zm9yIChjb25zdCBrZXkgaW4gb0NvbnRleHREYXRhKSB7XG5cdFx0XHRcdGlmIChrZXkuaW5kZXhPZihcIiNcIikgPT09IDApIHtcblx0XHRcdFx0XHRsZXQgc0FjdGlvblBhdGg6IHN0cmluZyA9IGtleTtcblx0XHRcdFx0XHRzQWN0aW9uUGF0aCA9IHNBY3Rpb25QYXRoLnN1YnN0cmluZygxLCBzQWN0aW9uUGF0aC5sZW5ndGgpO1xuXHRcdFx0XHRcdG9Nb2RlbE9iamVjdC5keW5hbWljQWN0aW9uc1tzQWN0aW9uUGF0aF0gPSB7IGVuYWJsZWQ6IHRydWUgfTtcblx0XHRcdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJcIiwgb01vZGVsT2JqZWN0KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0aWYgKHRoaXMuaXNVcGRhdGFibGVDb250ZXh0KHNVcGRhdGFibGVQYXRoLCBvU2VsZWN0ZWRDb250ZXh0LCBiUmVhZE9ubHlEcmFmdEVuYWJsZWQpKSB7XG5cdFx0XHRcdGFVcGRhdGFibGVDb250ZXh0cy5wdXNoKG9TZWxlY3RlZENvbnRleHQpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmICghdGFibGUuZGF0YShcImVuYWJsZUFuYWx5dGljc1wiKSkge1xuXHRcdFx0VGFibGVSdW50aW1lLnNldEludGVudEJhc2VkTmF2aWdhdGlvbkVuYWJsZW1lbnQob0ludGVybmFsTW9kZWxDb250ZXh0LCBvTmF2aWdhdGlvbkF2YWlsYWJsZU1hcCwgYWN0aXZlU2VsZWN0ZWRDb250ZXh0cyk7XG5cdFx0fVxuXG5cdFx0aWYgKGFjdGl2ZVNlbGVjdGVkQ29udGV4dHMubGVuZ3RoID4gMSkge1xuXHRcdFx0dGhpcy5kaXNhYmxlQWN0aW9uKGFBY3Rpb25zTXVsdGlzZWxlY3REaXNhYmxlZCwgb0R5bmFtaWNBY3Rpb25zKTtcblx0XHR9XG5cblx0XHRpZiAob01vZGVsT2JqZWN0KSB7XG5cdFx0XHRvTW9kZWxPYmplY3RbXCJ1cGRhdGFibGVDb250ZXh0c1wiXSA9IGFVcGRhdGFibGVDb250ZXh0cztcblx0XHRcdG9Nb2RlbE9iamVjdFtcImNvbnRyb2xJZFwiXSA9IHRhYmxlLmdldElkKCk7XG5cdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJcIiwgb01vZGVsT2JqZWN0KTtcblx0XHR9XG5cblx0XHQvLyBNYW5hZ2UgYSBwb3RlbnRpYWwgY2FsbGJhY2sgdG8gZW5hYmxlL2Rpc2FibGUgdGhlIGNyZWF0ZSBidXR0b24vbWVudSBmb3IgYSBUcmVlVGFibGVcblx0XHRpZiAoYWN0aXZlU2VsZWN0ZWRDb250ZXh0cy5sZW5ndGggPD0gMSAmJiB0YWJsZURlZmluaXRpb24uY29udHJvbC5jcmVhdGVFbmFibGVtZW50KSB7XG5cdFx0XHRjb25zdCBwYXJlbnRDb250ZXh0ID0gYWN0aXZlU2VsZWN0ZWRDb250ZXh0cy5sZW5ndGggPyBhY3RpdmVTZWxlY3RlZENvbnRleHRzWzBdIDogbnVsbDtcblx0XHRcdHRoaXMuX3VwZGF0ZUNyZWF0ZUVuYWJsZW1lbnQoXG5cdFx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dCxcblx0XHRcdFx0dGFibGVEZWZpbml0aW9uLmNvbnRyb2wuY3JlYXRlRW5hYmxlbWVudCxcblx0XHRcdFx0dGFibGUsXG5cdFx0XHRcdHBhcmVudENvbnRleHQsXG5cdFx0XHRcdHRhYmxlRGVmaW5pdGlvbi5jb250cm9sLm5vZGVUeXBlXG5cdFx0XHQpO1xuXHRcdH1cblxuXHRcdHRoaXMudXBkYXRlQ3V0Q29weVBhc3RlRW5hYmxlbWVudChvTW9kZWxPYmplY3QsIHRhYmxlKTtcblx0XHR0aGlzLnVwZGF0ZU1vdmVVcERvd25FbmFibGVtZW50KG9Nb2RlbE9iamVjdCwgdGFibGUpO1xuXHRcdHJldHVybiBBY3Rpb25SdW50aW1lLnNldEFjdGlvbkVuYWJsZW1lbnQob0ludGVybmFsTW9kZWxDb250ZXh0LCBvQWN0aW9uT3BlcmF0aW9uQXZhaWxhYmxlTWFwLCBhY3RpdmVTZWxlY3RlZENvbnRleHRzLCBcInRhYmxlXCIpO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBDaGVja3MsIGlmIHRoZSBzZWxlY3RlZCBjb250ZXh0IGlzIHVwZGF0YWJsZSBmb3IgTWFzcyBFZGl0LlxuXHQgKiBAcGFyYW0gdXBkYXRhYmxlUHJvcGVydHlQYXRoIFRoZSB1cGRhdGFibGVQcm9wZXJ0eVBhdGggZnJvbSB0aGUgdGFibGUgYW5ub3RhdGlvblxuXHQgKiBAcGFyYW0gc2VsZWN0ZWRDb250ZXh0IFRoZSBzZWxlY3RlZCBjb250ZXh0XG5cdCAqIEBwYXJhbSByZWFkT25seURyYWZ0RW5hYmxlZCBJbmRpY2F0ZXMsIGlmIHRoZSB0YWJsZSBpcyByZWFkIG9ubHkgYW5kIGRyYWZ0IGVuYWJsZWRcblx0ICogQHJldHVybnMgQm9vbGVhbiBJbmRpY2F0aW5nIGNvbnRleHQgaXMgdXBkYXRhYmxlXG5cdCAqL1xuXHRpc1VwZGF0YWJsZUNvbnRleHQ6IGZ1bmN0aW9uICh1cGRhdGFibGVQcm9wZXJ0eVBhdGg6IHN0cmluZywgc2VsZWN0ZWRDb250ZXh0OiBDb250ZXh0LCByZWFkT25seURyYWZ0RW5hYmxlZDogYm9vbGVhbik6IGJvb2xlYW4ge1xuXHRcdC8qIFRoZSB1cGRhdGFibGUgY29udGV4dHMgd2l0aCBtYXNzIGVkaXQgZGVwZW5kIG9uIHRoZSBmb2xsb3dpbmc6XG5cdFx0IFx0MS4gVXBkYXRlIGlzIGRlcGVuZGVudCBvbiBjdXJyZW50IGVudGl0eSBwcm9wZXJ0eSAodXBkYXRhYmxlUGF0aCkuXG5cdFx0IFx0Mi4gVGhlIHRhYmxlIGlzIHJlYWQgb25seSBhbmQgZHJhZnQgZW5hYmxlZCAobGlrZSBMUiksIGluIHRoaXMgY2FzZSBvbmx5IGFjdGl2ZSBjb250ZXh0cyBjYW4gYmUgbWFzcyBlZGl0ZWQgKG5vdCBkcmFmdCBjb250ZXh0cykuXG5cdFx0ICAgIFNvLCB1cGRhdGUgZGVwZW5kcyBvbiAnSXNBY3RpdmVFbnRpdHknLCAnSGFzRHJhZnRFbnRpdHknICB2YWx1ZSB3aGljaCBuZWVkcyB0byBiZSBjaGVja2VkLiAqL1xuXHRcdGNvbnN0IGNvbnRleHREYXRhID0gc2VsZWN0ZWRDb250ZXh0LmdldE9iamVjdCgpO1xuXHRcdGNvbnN0IHVwZGF0YWJsZUJ5UGF0aCA9IHVwZGF0YWJsZVByb3BlcnR5UGF0aC5sZW5ndGggPT09IDAgfHwgISFzZWxlY3RlZENvbnRleHQuZ2V0UHJvcGVydHkodXBkYXRhYmxlUHJvcGVydHlQYXRoKTtcblx0XHRjb25zdCBub3REcmFmdEluUmVhZE9ubHlNb2RlID0gIXJlYWRPbmx5RHJhZnRFbmFibGVkIHx8IChjb250ZXh0RGF0YS5Jc0FjdGl2ZUVudGl0eSAmJiAhY29udGV4dERhdGEuSGFzRHJhZnRFbnRpdHkpO1xuXHRcdGlmICh1cGRhdGFibGVCeVBhdGggJiYgbm90RHJhZnRJblJlYWRPbmx5TW9kZSkge1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXHRcdHJldHVybiBmYWxzZTtcblx0fSxcblxuXHQvKipcblx0ICogQ2hlY2tzIGlmIHRoZSBub2RlIGlzIG1vdmFibGUgYWNjb3JkaW5nIHRvIHRoZSBjdXN0b20gbG9naWMgKGlmIGFueSkuXG5cdCAqIEBwYXJhbSBub2RlXG5cdCAqIEBwYXJhbSB0YWJsZVxuXHQgKiBAcmV0dXJucyBUcnVlIGlmIHRoZSBjdXN0b20gbG9naWMgYWxsb3dzIHRoZSBub2RlIHRvIGJlIG1vdmVkIChvciBpZiB0aGVyZSdzIG5vIGN1c3RvbSBsb2dpYyksIGZhbHNlIG90aGVyd2lzZVxuXHQgKi9cblx0Y2hlY2tJZk5vZGVJc01vdmFibGU6IGZ1bmN0aW9uIChub2RlOiBDb250ZXh0LCB0YWJsZTogVGFibGUpOiBib29sZWFuIHtcblx0XHRjb25zdCBpc05vZGVNb3ZhYmxlRnVuY3Rpb24gPSAodGFibGUuZ2V0UGFyZW50KCkgYXMgVGFibGVBUEkpLmdldFRhYmxlRGVmaW5pdGlvbigpLmNvbnRyb2wuaXNOb2RlTW92YWJsZTtcblx0XHRjb25zdCBub2RlTW92YWJsZUN1c3RvbUZ1bmN0aW9uID0gaXNOb2RlTW92YWJsZUZ1bmN0aW9uXG5cdFx0XHQ/IEZQTUhlbHBlci5nZXRDdXN0b21GdW5jdGlvbjwoY29udGV4dDogQ29udGV4dCkgPT4gYm9vbGVhbj4oXG5cdFx0XHRcdFx0aXNOb2RlTW92YWJsZUZ1bmN0aW9uLm1vZHVsZU5hbWUsXG5cdFx0XHRcdFx0aXNOb2RlTW92YWJsZUZ1bmN0aW9uLm1ldGhvZE5hbWUsXG5cdFx0XHRcdFx0dGFibGVcblx0XHRcdCAgKVxuXHRcdFx0OiB1bmRlZmluZWQ7XG5cblx0XHR0cnkge1xuXHRcdFx0cmV0dXJuIG5vZGVNb3ZhYmxlQ3VzdG9tRnVuY3Rpb24gPT09IHVuZGVmaW5lZCB8fCBub2RlTW92YWJsZUN1c3RvbUZ1bmN0aW9uKG5vZGUpO1xuXHRcdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0XHRMb2cud2FybmluZyhgRXJyb3IgaW4gY3VzdG9tIGZ1bmN0aW9uIGZvciBpc05vZGVNb3ZhYmxlOiAke2Vycm9yfWApO1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXHR9LFxuXG5cdC8qKlxuXHQgKiBDaGVja3Mgd2hldGhlciB0aGUgbm9kZSBjYW4gYmUgY29waWVkIGFjY29yZGluZyB0byB0aGUgY3VzdG9tIGxvZ2ljLCBpZiBhbnkuXG5cdCAqIEBwYXJhbSBub2RlXG5cdCAqIEBwYXJhbSB0YWJsZVxuXHQgKiBAcmV0dXJucyBUcnVlIGlmIGN1c3RvbSBsb2dpYyBhbGxvd3MgdGhlIG5vZGUgdG8gYmUgY29waWVkIChvciBpZiBubyBjdXN0b20gbG9naWMgaXMgZGVmaW5lZCk7IGZhbHNlIG90aGVyd2lzZS5cblx0ICovXG5cdGNoZWNrSWZOb2RlSXNDb3B5YWJsZTogZnVuY3Rpb24gKG5vZGU6IENvbnRleHQsIHRhYmxlOiBUYWJsZSk6IGJvb2xlYW4ge1xuXHRcdGNvbnN0IGlzTm9kZUNvcHlhYmxlRnVuY3Rpb24gPSAodGFibGUuZ2V0UGFyZW50KCkgYXMgVGFibGVBUEkpLmdldFRhYmxlRGVmaW5pdGlvbigpLmNvbnRyb2wuaXNOb2RlQ29weWFibGU7XG5cdFx0Y29uc3Qgbm9kZU1vdmFibGVDdXN0b21GdW5jdGlvbiA9IGlzTm9kZUNvcHlhYmxlRnVuY3Rpb25cblx0XHRcdD8gRlBNSGVscGVyLmdldEN1c3RvbUZ1bmN0aW9uPChjb250ZXh0OiBDb250ZXh0KSA9PiBib29sZWFuPihcblx0XHRcdFx0XHRpc05vZGVDb3B5YWJsZUZ1bmN0aW9uLm1vZHVsZU5hbWUsXG5cdFx0XHRcdFx0aXNOb2RlQ29weWFibGVGdW5jdGlvbi5tZXRob2ROYW1lLFxuXHRcdFx0XHRcdHRhYmxlXG5cdFx0XHQgIClcblx0XHRcdDogdW5kZWZpbmVkO1xuXG5cdFx0dHJ5IHtcblx0XHRcdHJldHVybiBub2RlTW92YWJsZUN1c3RvbUZ1bmN0aW9uID09PSB1bmRlZmluZWQgfHwgbm9kZU1vdmFibGVDdXN0b21GdW5jdGlvbihub2RlKTtcblx0XHR9IGNhdGNoIChlcnJvcikge1xuXHRcdFx0TG9nLndhcm5pbmcoYEVycm9yIGluIGN1c3RvbSBmdW5jdGlvbiBmb3IgaXNOb2RlTW92YWJsZTogJHtlcnJvcn1gKTtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblx0fSxcblxuXHQvKipcblx0ICogVXBkYXRlcyB0aGUgaW50ZXJuYWwgY29udGV4dCB0byBlbmFibGUvZGlzYWJsZSB0aGUgQ3V0IGFuZCBQYXN0ZSBidXR0b25zLlxuXHQgKiBAcGFyYW0gbW9kZWxPYmplY3QgSW50ZXJuYWwgY29udGV4dCBvYmplY3Qgb2YgdGhlIHRhYmxlXG5cdCAqIEBwYXJhbSB0YWJsZSBJbnN0YW5jZSBvZiB0aGUgVGFibGVcblx0ICogQHBhcmFtIGZvckNvbnRleHRNZW51XG5cdCAqL1xuXHR1cGRhdGVDdXRDb3B5UGFzdGVFbmFibGVtZW50OiBmdW5jdGlvbiAobW9kZWxPYmplY3Q6IHsgW2tleTogc3RyaW5nXTogdW5rbm93biB9LCB0YWJsZTogVGFibGUsIGZvckNvbnRleHRNZW51ID0gZmFsc2UpOiB2b2lkIHtcblx0XHRtb2RlbE9iamVjdC5jb250ZXh0bWVudSA9IG1vZGVsT2JqZWN0LmNvbnRleHRtZW51ID8/IHsgc2VsZWN0ZWRDb250ZXh0czogW10gfTtcblxuXHRcdGNvbnN0IHRhYmxlRGVmaW5pdGlvbiA9ICh0YWJsZS5nZXRQYXJlbnQoKSBhcyBUYWJsZUFQSSkuZ2V0VGFibGVEZWZpbml0aW9uKCk7XG5cdFx0aWYgKHRhYmxlRGVmaW5pdGlvbi5jb250cm9sLnR5cGUgIT09IFwiVHJlZVRhYmxlXCIpIHtcblx0XHRcdC8vIFRoZSBsb2dpYyBiZWxvdyBvbmx5IG1ha2VzIHNlbnNlIGZvciBhIFRyZWUgVGFibGVcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0Y29uc3QgdmlldyA9IENvbW1vblV0aWxzLmdldFRhcmdldFZpZXcodGFibGUpO1xuXHRcdGNvbnN0IGlzVmlld0VkaXRhYmxlID0gQ29tbW9uVXRpbHMuZ2V0SXNFZGl0YWJsZSh2aWV3KTtcblx0XHRpZiAodmlldy5nZXRDb250cm9sbGVyTmFtZSgpICE9PSBcInNhcC5mZS50ZW1wbGF0ZXMuTGlzdFJlcG9ydC5MaXN0UmVwb3J0Q29udHJvbGxlclwiICYmICFpc1ZpZXdFZGl0YWJsZSkge1xuXHRcdFx0Ly8gSWYgdGhlIHZpZXcgaXMgbm90IGVkaXRhYmxlLCB3ZSBkaXNhYmxlIHRoZSBjdXQvY29weS9wYXN0ZSBmdW5jdGlvbmFsaXR5IGFuZCBjbGVhciB0aGUgbm9kZVVwZGF0ZXNJbmZvXG5cdFx0XHRtb2RlbE9iamVjdC5ub2RlVXBkYXRlc0luZm8gPSB7fTtcblx0XHRcdChtb2RlbE9iamVjdC5jb250ZXh0bWVudSBhcyB7IFtrZXk6IHN0cmluZ106IHVua25vd24gfSkubm9kZVVwZGF0ZXNJbmZvID0ge307XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGNvbnN0IGNoZWNrRHJhZnRJbnN0YW5jZSA9ICF0YWJsZS5nZXRSb3dCaW5kaW5nKCkuaXNSZWxhdGl2ZSgpO1xuXG5cdFx0aWYgKGZvckNvbnRleHRNZW51KSB7XG5cdFx0XHQobW9kZWxPYmplY3QuY29udGV4dG1lbnUgYXMgeyBba2V5OiBzdHJpbmddOiB1bmtub3duIH0pLm5vZGVVcGRhdGVzSW5mbyA9IHt9O1xuXHRcdH1cblx0XHRjb25zdCBub2RlVXBkYXRlc0luZm8gPSBtb2RlbE9iamVjdC5ub2RlVXBkYXRlc0luZm8gYXMgeyBba2V5OiBzdHJpbmddOiB1bmtub3duIH07XG5cdFx0Ly9JZiB0aGUgcGFzdGFibGVDb250ZXh0IGJlY29tZSBkaXNjb25uZWN0ZWQgZnJvbSB0aGUgbGlzdEJpbmRpbmcsIGZvciBleGFtcGxlLCB3aGVuIHRoZSB1c2VyIGNvbGxhcHNlcyB0aGUgcGFyZW50IG5vZGUsIHdlIGF0dGVtcHQgdG8gbG9jYXRlIHRoZSBjb3JyZWN0IGNvbnRleHQgYnkgY29tcGFyaW5nIHRoZWlyIHBhdGhzXG5cdFx0Y29uc3QgcGFzdGFibGVDb250ZXh0czogQ29udGV4dFtdID0gdGFibGVcblx0XHRcdC5nZXRSb3dCaW5kaW5nKClcblx0XHRcdC5nZXRBbGxDdXJyZW50Q29udGV4dHMoKVxuXHRcdFx0LmZpbHRlcigoY29udGV4dCkgPT5cblx0XHRcdFx0KChub2RlVXBkYXRlc0luZm8ucGFzdGFibGVDb250ZXh0cyB8fCBbXSkgYXMgQ29udGV4dFtdKVxuXHRcdFx0XHRcdC5tYXAoKHBhc3RhYmxlQ29udGV4dCkgPT4gcGFzdGFibGVDb250ZXh0LmdldFBhdGgoKSlcblx0XHRcdFx0XHQuaW5jbHVkZXMoY29udGV4dC5nZXRQYXRoKCkpXG5cdFx0XHQpO1xuXG5cdFx0aWYgKHBhc3RhYmxlQ29udGV4dHMubGVuZ3RoICE9PSAoKG5vZGVVcGRhdGVzSW5mby5wYXN0YWJsZUNvbnRleHRzIHx8IFtdKSBhcyBDb250ZXh0W10pLmxlbmd0aCkge1xuXHRcdFx0TWVzc2FnZVRvYXN0LnNob3coXCJcIiArIFJlc291cmNlTW9kZWxIZWxwZXIuZ2V0UmVzb3VyY2VNb2RlbCh0YWJsZSkuZ2V0VGV4dChcIk1fUEFTVEFCTEVfQ09OVEVYVFNfTk9UX0FWQUlMQUJMRVwiKSk7XG5cdFx0fVxuXHRcdGNvbnN0IGNvcHlDdXRQYXN0ZUVuYWJsZW1lbnRJbmZvID0gKCghZm9yQ29udGV4dE1lbnUgPyBtb2RlbE9iamVjdCA6IG1vZGVsT2JqZWN0LmNvbnRleHRtZW51KSBhcyB7IFtrZXk6IHN0cmluZ106IHVua25vd24gfSlcblx0XHRcdC5ub2RlVXBkYXRlc0luZm8gYXMge1xuXHRcdFx0W2tleTogc3RyaW5nXTogdW5rbm93bjtcblx0XHR9O1xuXHRcdGNvbnN0IGRhdGFNb2RlbHNyYyA9ICghZm9yQ29udGV4dE1lbnUgPyBtb2RlbE9iamVjdCA6IG1vZGVsT2JqZWN0LmNvbnRleHRtZW51KSBhcyB7IFtrZXk6IHN0cmluZ106IHVua25vd24gfTtcblx0XHRjb25zdCBjdXRhYmxlQ29udGV4dHMgPSAoZGF0YU1vZGVsc3JjLnVwZGF0YWJsZUNvbnRleHRzIGFzIENvbnRleHRbXSkuZmlsdGVyKFxuXHRcdFx0KGNvbnRleHQpID0+XG5cdFx0XHRcdFRhYmxlUnVudGltZS5jaGVja0lmTm9kZUlzTW92YWJsZShjb250ZXh0LCB0YWJsZSkgJiYgKCFjaGVja0RyYWZ0SW5zdGFuY2UgfHwgY29udGV4dC5nZXRQcm9wZXJ0eShcIkhhc0RyYWZ0RW50aXR5XCIpICE9PSB0cnVlKVxuXHRcdCk7XG5cdFx0Y29uc3QgY29weWFibGVDb250ZXh0cyA9IChkYXRhTW9kZWxzcmMuc2VsZWN0ZWRDb250ZXh0cyBhcyBDb250ZXh0W10pLmZpbHRlcigoY29udGV4dCkgPT5cblx0XHRcdFRhYmxlUnVudGltZS5jaGVja0lmTm9kZUlzQ29weWFibGUoY29udGV4dCwgdGFibGUpXG5cdFx0KTtcblx0XHRjb25zdCBzZWxlY3RlZENvbnRleHRzID0gZGF0YU1vZGVsc3JjLnNlbGVjdGVkQ29udGV4dHMgYXMgQ29udGV4dFtdO1xuXHRcdGNvcHlDdXRQYXN0ZUVuYWJsZW1lbnRJbmZvLmN1dEVuYWJsZW1lbnQgPSBzZWxlY3RlZENvbnRleHRzLmxlbmd0aCA9PT0gMSAmJiBjdXRhYmxlQ29udGV4dHMubGVuZ3RoID09PSAxO1xuXHRcdGNvcHlDdXRQYXN0ZUVuYWJsZW1lbnRJbmZvLmNvcHlFbmFibGVtZW50ID0gc2VsZWN0ZWRDb250ZXh0cy5sZW5ndGggPT09IDEgJiYgY29weWFibGVDb250ZXh0cy5sZW5ndGggPT09IDE7XG5cblx0XHRpZiAobm9kZVVwZGF0ZXNJbmZvLmxhc3RBY3Rpb24pIHtcblx0XHRcdGlmIChwYXN0YWJsZUNvbnRleHRzPy5sZW5ndGggPT09IDApIHtcblx0XHRcdFx0Y29weUN1dFBhc3RlRW5hYmxlbWVudEluZm8ucGFzdGVFbmFibGVtZW50ID0gZmFsc2U7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdGxldCBjb250ZXh0c2ZvclBhc3RhYmxlRW5hYmxlbWVudDogQ29udGV4dFtdO1xuXHRcdFx0Y29uc3QgZXh0ZW5zaW9uUG9pbnQgPVxuXHRcdFx0XHRub2RlVXBkYXRlc0luZm8ubGFzdEFjdGlvbiA9PT0gXCJDdXRcIlxuXHRcdFx0XHRcdD8gdGFibGVEZWZpbml0aW9uLmNvbnRyb2wuaXNNb3ZlVG9Qb3NpdGlvbkFsbG93ZWRcblx0XHRcdFx0XHQ6IHRhYmxlRGVmaW5pdGlvbi5jb250cm9sLmlzQ29weVRvUG9zaXRpb25BbGxvd2VkO1xuXG5cdFx0XHQvL3JlbW92ZSBjb250ZXh0cyBkZXBlbmRpbmcgb2YgdGhlIGN1c3RvbSBmdW5jdGlvblxuXHRcdFx0aWYgKGV4dGVuc2lvblBvaW50KSB7XG5cdFx0XHRcdGNvbnRleHRzZm9yUGFzdGFibGVFbmFibGVtZW50ID0gWy4uLnNlbGVjdGVkQ29udGV4dHNdLmZpbHRlcihcblx0XHRcdFx0XHQodGFyZ2V0Q29udGV4dCkgPT5cblx0XHRcdFx0XHRcdChcblx0XHRcdFx0XHRcdFx0RlBNSGVscGVyLmdldEN1c3RvbUZ1bmN0aW9uPChjb250ZXh0czogQ29udGV4dFtdKSA9PiBib29sZWFuPihcblx0XHRcdFx0XHRcdFx0XHRleHRlbnNpb25Qb2ludC5tb2R1bGVOYW1lLFxuXHRcdFx0XHRcdFx0XHRcdGV4dGVuc2lvblBvaW50Lm1ldGhvZE5hbWUsXG5cdFx0XHRcdFx0XHRcdFx0dGFibGVcblx0XHRcdFx0XHRcdFx0KSBhcyBGdW5jdGlvblxuXHRcdFx0XHRcdFx0KShwYXN0YWJsZUNvbnRleHRzWzBdLCB0YXJnZXRDb250ZXh0KSAvL25vZGVVcGRhdGVzSW5mby5wYXN0YWJsZUNvbnRleHRzIGhhcyBiZWVuIHRoZSBsYXN0IHRpbWUgdGhlIHVzZXIgcHJlc3NlZCB0aGUgY3V0L2NvcHkgYnV0dG9uXG5cdFx0XHRcdCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjb250ZXh0c2ZvclBhc3RhYmxlRW5hYmxlbWVudCA9IFsuLi5zZWxlY3RlZENvbnRleHRzXTtcblx0XHRcdH1cblxuXHRcdFx0Ly90aGUgcGFzdGUgY2Fubm90IGJlIGRvbmUgaWYgc2V2ZXJhbCBjb250ZXh0cyBhcmUgc2VsZWN0ZWRcblx0XHRcdGNvcHlDdXRQYXN0ZUVuYWJsZW1lbnRJbmZvLnBhc3RlRW5hYmxlbWVudCA9XG5cdFx0XHRcdHNlbGVjdGVkQ29udGV4dHMubGVuZ3RoIDw9IDEgJiYgY29udGV4dHNmb3JQYXN0YWJsZUVuYWJsZW1lbnQubGVuZ3RoID09PSBzZWxlY3RlZENvbnRleHRzLmxlbmd0aDtcblx0XHR9XG5cdH0sXG5cblx0LyoqXG5cdCAqICBVcGRhdGVzIHRoZSBpbnRlcm5hbCBjb250ZXh0IHRvIGVuYWJsZS9kaXNhYmxlIHRoZSBtb3ZlIHVwL21vdmUgZG93biBidXR0b25zLlxuXHQgKiBAcGFyYW0gbW9kZWxPYmplY3Rcblx0ICogQHBhcmFtIHRhYmxlXG5cdCAqIEBwYXJhbSBmb3JDb250ZXh0TWVudVxuXHQgKi9cblx0dXBkYXRlTW92ZVVwRG93bkVuYWJsZW1lbnQ6IGZ1bmN0aW9uIChtb2RlbE9iamVjdDogeyBba2V5OiBzdHJpbmddOiB1bmtub3duIH0sIHRhYmxlOiBUYWJsZSwgZm9yQ29udGV4dE1lbnUgPSBmYWxzZSk6IHZvaWQge1xuXHRcdGNvbnN0IG1vZGVsT2JqZWN0UGF0aCA9ICFmb3JDb250ZXh0TWVudSA/IG1vZGVsT2JqZWN0IDogKG1vZGVsT2JqZWN0LmNvbnRleHRtZW51IGFzIHsgW2tleTogc3RyaW5nXTogdW5rbm93biB9KTtcblx0XHRjb25zdCBzZWxlY3RlZENvbnRleHRzID0gbW9kZWxPYmplY3RQYXRoLnNlbGVjdGVkQ29udGV4dHMgYXMgQ29udGV4dFtdO1xuXHRcdGNvbnN0IHRhYmxlRGVmaW5pdGlvbiA9ICh0YWJsZS5nZXRQYXJlbnQoKSBhcyBUYWJsZUFQSSkuZ2V0VGFibGVEZWZpbml0aW9uKCk7XG5cblx0XHRjb25zdCBjaGFuZ2VTaWJsaW5nRm9yUm9vdHNTdXBwb3J0ZWQgPSB0YWJsZURlZmluaXRpb24uYW5ub3RhdGlvbi5jaGFuZ2VTaWJsaW5nRm9yUm9vdHNTdXBwb3J0ZWQ7XG5cdFx0Ly8gRGlzYWJsZSB0aGUgbW92ZSB1cC9tb3ZlIGRvd24gYnV0dG9ucyBpZiB0aGVyZSBhcmUgbm8gc2VsZWN0ZWQgY29udGV4dHMsIGlmIHRoZSB0YWJsZSBpcyBub3QgYSBUcmVlVGFibGUsIG9yIGlmIHRoZSB0YWJsZSBpcyBzb3J0ZWRcblx0XHRpZiAoXG5cdFx0XHRzZWxlY3RlZENvbnRleHRzLmxlbmd0aCAhPT0gMSB8fFxuXHRcdFx0dGFibGVEZWZpbml0aW9uLmNvbnRyb2wudHlwZSAhPT0gXCJUcmVlVGFibGVcIiB8fFxuXHRcdFx0dGFibGUuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKT8uZ2V0UHJvcGVydHkoXCJpc1NvcnRlZFwiKSA9PT0gdHJ1ZSB8fFxuXHRcdFx0KHNlbGVjdGVkQ29udGV4dHNbMF0uZ2V0UHJvcGVydHkoXCJAJHVpNS5ub2RlLmxldmVsXCIpID09PSAxICYmICFjaGFuZ2VTaWJsaW5nRm9yUm9vdHNTdXBwb3J0ZWQpIC8vIERpc2FibGUgbW92ZSB1cC9kb3duIGZvciByb290c1xuXHRcdCkge1xuXHRcdFx0bW9kZWxPYmplY3RQYXRoLnNpbmdsZUNvbnRleHRNb3ZhYmxlVXAgPSBmYWxzZTtcblx0XHRcdG1vZGVsT2JqZWN0UGF0aC5zaW5nbGVDb250ZXh0TW92YWJsZURvd24gPSBmYWxzZTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Y29uc3QgbW92ZWRDb250ZXh0ID0gc2VsZWN0ZWRDb250ZXh0c1swXTtcblxuXHRcdFx0Ly8gQ2hlY2sgaWYgdGhlIHNlbGVjdGVkIGNvbnRleHQgY2FuIGJlIG1vdmVkIGFjY29yZGluZyB0byB0aGUgY3VzdG9tIGxvZ2ljIChpZiBhbnkpIGFuZCBpZiBpdCBkb2Vzbid0IGhhdmUgYSBkcmFmdCBpbnN0YW5jZSBpZiB3ZSdyZSBpbiBhIExpc3RSZXBvcnQsXG5cdFx0XHQvLyBhbmQgaWYgaXQncyBub3Qgb3V0LW9mLXBsYWNlIChpLmUuIGl0IG11c3QgYmUgZGlzcGxheWVkIGF0IGl0cyAncmVhbCcgcG9zaXRpb24pXG5cdFx0XHRjb25zdCBtb3ZhYmxlRHJhZnQgPSB0YWJsZS5nZXRSb3dCaW5kaW5nKCkuaXNSZWxhdGl2ZSgpIHx8IG1vdmVkQ29udGV4dC5nZXRQcm9wZXJ0eShcIkhhc0RyYWZ0RW50aXR5XCIpICE9PSB0cnVlO1xuXHRcdFx0Y29uc3Qgb3V0T2ZQbGFjZUNvbnRleHQgPSBtb3ZlZENvbnRleHQuaXNUcmFuc2llbnQoKSAhPT0gdW5kZWZpbmVkO1xuXHRcdFx0Y29uc3QgY3VzdG9tTW92YWJsZSA9IFRhYmxlUnVudGltZS5jaGVja0lmTm9kZUlzTW92YWJsZShtb3ZlZENvbnRleHQsIHRhYmxlKTtcblx0XHRcdG1vZGVsT2JqZWN0UGF0aC5zaW5nbGVDb250ZXh0TW92YWJsZVVwID1cblx0XHRcdFx0bW92YWJsZURyYWZ0ICYmIGN1c3RvbU1vdmFibGUgJiYgIW91dE9mUGxhY2VDb250ZXh0ICYmICFtb3ZlZENvbnRleHQuaXNEZWxldGVkKCkgJiYgbW92ZWRDb250ZXh0LmdldFNpYmxpbmcoLTEpICE9PSBudWxsO1xuXHRcdFx0bW9kZWxPYmplY3RQYXRoLnNpbmdsZUNvbnRleHRNb3ZhYmxlRG93biA9XG5cdFx0XHRcdG1vdmFibGVEcmFmdCAmJiBjdXN0b21Nb3ZhYmxlICYmICFvdXRPZlBsYWNlQ29udGV4dCAmJiAhbW92ZWRDb250ZXh0LmlzRGVsZXRlZCgpICYmIG1vdmVkQ29udGV4dC5nZXRTaWJsaW5nKDEpICE9PSBudWxsO1xuXHRcdH1cblx0fSxcblxuXHQvKipcblx0ICogVXBkYXRlcyB0aGUgaW50ZXJuYWwgY29udGV4dCB0byBlbmFibGUvZGlzYWJsZSB0aGUgQ3JlYXRlIGJ1dHRvbiAvIG1lbnUgLyBtZW51IGl0ZW1zLlxuXHQgKiBAcGFyYW0gaW50ZXJuYWxDb250ZXh0XG5cdCAqIEBwYXJhbSBjcmVhdGVFbmFibGVtZW50Q2FsbGJhY2tcblx0ICogQHBhcmFtIGNyZWF0ZUVuYWJsZW1lbnRDYWxsYmFjay5tb2R1bGVOYW1lXG5cdCAqIEBwYXJhbSBjcmVhdGVFbmFibGVtZW50Q2FsbGJhY2subWV0aG9kTmFtZVxuXHQgKiBAcGFyYW0gdGFibGVcblx0ICogQHBhcmFtIHBhcmVudENvbnRleHRcblx0ICogQHBhcmFtIG5vZGVUeXBlUGFyYW1ldGVyc1xuXHQgKiBAcGFyYW0gbm9kZVR5cGVQYXJhbWV0ZXJzLnByb3BlcnR5TmFtZVxuXHQgKiBAcGFyYW0gbm9kZVR5cGVQYXJhbWV0ZXJzLnZhbHVlc1xuXHQgKiBAcGFyYW0gZm9yQ29udGV4dE1lbnVcblx0ICovXG5cdF91cGRhdGVDcmVhdGVFbmFibGVtZW50OiBmdW5jdGlvbiAoXG5cdFx0aW50ZXJuYWxDb250ZXh0OiBJbnRlcm5hbE1vZGVsQ29udGV4dCxcblx0XHRjcmVhdGVFbmFibGVtZW50Q2FsbGJhY2s6IHsgbW9kdWxlTmFtZTogc3RyaW5nOyBtZXRob2ROYW1lOiBzdHJpbmcgfSxcblx0XHR0YWJsZTogVGFibGUsXG5cdFx0cGFyZW50Q29udGV4dDogQ29udGV4dCB8IG51bGwsXG5cdFx0bm9kZVR5cGVQYXJhbWV0ZXJzPzogeyBwcm9wZXJ0eU5hbWU6IHN0cmluZzsgdmFsdWVzOiB7IHZhbHVlOiBzdHJpbmcgfVtdIH0sXG5cdFx0Zm9yQ29udGV4dE1lbnUgPSBmYWxzZVxuXHQpOiB2b2lkIHtcblx0XHRsZXQgcG9zc2libGVWYWx1ZXM6IChzdHJpbmcgfCB1bmRlZmluZWQpW107XG5cdFx0aWYgKG5vZGVUeXBlUGFyYW1ldGVycyAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHQvLyBQdXNoIGFsbCBwb3NzaWJsZSB2YWx1ZXMgaW4gdGhlIG1lbnVcblx0XHRcdHBvc3NpYmxlVmFsdWVzID0gbm9kZVR5cGVQYXJhbWV0ZXJzLnZhbHVlcy5tYXAoKG9wdGlvbikgPT4gb3B0aW9uLnZhbHVlKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gTm8gbWVudSAtLT4gT25seSAndW5kZWZpbmVkJyB2YWx1ZSB0aGF0IGNvcnJlc3BvbmRzIHRvIHRoZSAnQ3JlYXRlJyBidXR0b25cblx0XHRcdHBvc3NpYmxlVmFsdWVzID0gW3VuZGVmaW5lZF07XG5cdFx0fVxuXG5cdFx0Y29uc3QgZW5hYmxlbWVudEZ1bmN0aW9uID0gRlBNSGVscGVyLmdldEN1c3RvbUZ1bmN0aW9uPChub2RlVHlwZTogc3RyaW5nIHwgdW5kZWZpbmVkLCBwYXJlbnRDb250ZXh0OiBDb250ZXh0IHwgbnVsbCkgPT4gYm9vbGVhbj4oXG5cdFx0XHRjcmVhdGVFbmFibGVtZW50Q2FsbGJhY2subW9kdWxlTmFtZSxcblx0XHRcdGNyZWF0ZUVuYWJsZW1lbnRDYWxsYmFjay5tZXRob2ROYW1lLFxuXHRcdFx0dGFibGVcblx0XHQpO1xuXG5cdFx0aWYgKCFlbmFibGVtZW50RnVuY3Rpb24pIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0Y29uc3QgZW5hYmxlZEZsYWdzID0gcG9zc2libGVWYWx1ZXMubWFwKCh2YWx1ZSkgPT4ge1xuXHRcdFx0bGV0IGVuYWJsZWQgPSBmYWxzZTtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdGVuYWJsZWQgPSAhIShlbmFibGVtZW50RnVuY3Rpb24odmFsdWUsIHBhcmVudENvbnRleHQpID8/IHRydWUpO1xuXHRcdFx0fSBjYXRjaCAoX2Vycm9yKSB7XG5cdFx0XHRcdGVuYWJsZWQgPSB0cnVlO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGVuYWJsZWQ7XG5cdFx0fSk7XG5cdFx0Ly8gZW5hYmxlRmxhZ3NbaV0gaXMgdHJ1ZSA8PT4gcG9zc2libGVWYWx1ZXNbaV0gaXMgYWxsb3dlZCBmb3IgY3JlYXRpb25cblxuXHRcdGNvbnN0IGVuYWJsZW1lbnRNYXA6IFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+ID0ge307XG5cdFx0ZW5hYmxlbWVudE1hcFtcIkNyZWF0ZVwiXSA9IGVuYWJsZWRGbGFncy5zb21lKChmbGFnKSA9PiBmbGFnKTsgLy8gRW5hYmxlIHRoZSBNZW51IChvciB0aGUgYnV0dG9uKSBpZiBhdCBsZWFzdCBvbmUgb3B0aW9uIGlzIHBvc3NpYmxlXG5cdFx0ZW5hYmxlZEZsYWdzLmZvckVhY2goKGVuYWJsZWQsIGluZGV4KSA9PiB7XG5cdFx0XHRlbmFibGVtZW50TWFwW2BDcmVhdGVfJHtpbmRleH1gXSA9IGVuYWJsZWQ7XG5cdFx0fSk7XG5cblx0XHRjb25zdCBjb250ZXh0UGF0aCA9IGZvckNvbnRleHRNZW51ID8gXCJjb250ZXh0bWVudS9cIiA6IFwiXCI7XG5cdFx0aW50ZXJuYWxDb250ZXh0LnNldFByb3BlcnR5KGNvbnRleHRQYXRoICsgXCJjcmVhdGVFbmFibGVtZW50XCIsIGVuYWJsZW1lbnRNYXApO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBDbGVhcnMgdGhlIHRhYmxlIHNlbGVjdGlvbiwgYW5kIGVuYWJsZXMvZGlzYWJsZXMgdGhlICdDcmVhdGUnIGJ1dHRvbi9tZW51IGlmIG5lY2Vzc2FyeS5cblx0ICogQHBhcmFtIHRhYmxlIFRoZSB0YWJsZVxuXHQgKi9cblx0Y2xlYXJTZWxlY3Rpb246IGZ1bmN0aW9uICh0YWJsZTogVGFibGUpOiB2b2lkIHtcblx0XHQvLyBDbGVhciB0aGUgc2VsZWN0aW9uIGluIHRoZSBjb250cm9sXG5cdFx0dGFibGUuY2xlYXJTZWxlY3Rpb24oKTtcblxuXHRcdC8vIFVwZGF0ZSB0aGUgc2VsZWN0aW9uLXJlbGF0ZWQgaW5mb3JtYXRpb24gaW4gdGhlIGludGVybmFsIG1vZGVsXG5cdFx0Y29uc3QgaW50ZXJuYWxNb2RlbENvbnRleHQgPSB0YWJsZS5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpO1xuXHRcdGlmIChpbnRlcm5hbE1vZGVsQ29udGV4dCkge1xuXHRcdFx0aW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJkZWxldGVFbmFibGVkXCIsIGZhbHNlKTtcblx0XHRcdGludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwibnVtYmVyT2ZTZWxlY3RlZENvbnRleHRzXCIsIDApO1xuXHRcdFx0aW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJzZWxlY3RlZENvbnRleHRzXCIsIFtdKTtcblx0XHRcdGludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwiZGVsZXRhYmxlQ29udGV4dHNcIiwgW10pO1xuXHRcdH1cblxuXHRcdC8vIEVuYWJsZS9kaXNhYmxlIHRoZSAnQ3JlYXRlJyBidXR0b24vbWVudSBpZiBuZWNlc3Nhcnlcblx0XHRjb25zdCB0YWJsZUFQSSA9IHRhYmxlLmdldFBhcmVudCgpIGFzIFRhYmxlQVBJO1xuXHRcdGlmICh0YWJsZUFQSS50YWJsZURlZmluaXRpb24uY29udHJvbC5jcmVhdGVFbmFibGVtZW50KSB7XG5cdFx0XHR0aGlzLl91cGRhdGVDcmVhdGVFbmFibGVtZW50KFxuXHRcdFx0XHRpbnRlcm5hbE1vZGVsQ29udGV4dCBhcyBJbnRlcm5hbE1vZGVsQ29udGV4dCxcblx0XHRcdFx0dGFibGVBUEkudGFibGVEZWZpbml0aW9uLmNvbnRyb2wuY3JlYXRlRW5hYmxlbWVudCxcblx0XHRcdFx0dGFibGUsXG5cdFx0XHRcdG51bGwsXG5cdFx0XHRcdHRhYmxlQVBJLnRhYmxlRGVmaW5pdGlvbi5jb250cm9sLm5vZGVUeXBlXG5cdFx0XHQpO1xuXHRcdH1cblx0fSxcblxuXHRkaXNhYmxlQWN0aW9uOiBmdW5jdGlvbiAoYUFjdGlvbnNNdWx0aXNlbGVjdERpc2FibGVkOiBzdHJpbmdbXSwgb0R5bmFtaWNBY3Rpb25zOiBSZWNvcmQ8c3RyaW5nLCB7IGJFbmFibGVkPzogYm9vbGVhbiB9Pik6IHZvaWQge1xuXHRcdGFBY3Rpb25zTXVsdGlzZWxlY3REaXNhYmxlZC5mb3JFYWNoKGZ1bmN0aW9uIChzQWN0aW9uOiBzdHJpbmcpIHtcblx0XHRcdG9EeW5hbWljQWN0aW9uc1tzQWN0aW9uXSA9IHsgYkVuYWJsZWQ6IGZhbHNlIH07XG5cdFx0fSk7XG5cdH0sXG5cdG9uRmllbGRDaGFuZ2VJbkNyZWF0aW9uUm93OiBmdW5jdGlvbiAob0V2ZW50OiBFdmVudFR5cGU8dHlwZW9mIEZpZWxkLnByb3RvdHlwZS5jaGFuZ2U+LCB3aXRoQ3VzdG9tVmFsaWRhdGlvbkZ1bmN0aW9uOiBib29sZWFuKTogdm9pZCB7XG5cdFx0Ly8gQ1JFQVRJT04gUk9XIENBU0Vcblx0XHRjb25zdCBtRmllbGQgPSBGaWVsZFJ1bnRpbWVIZWxwZXIuZ2V0RmllbGRTdGF0ZU9uQ2hhbmdlKG9FdmVudCksXG5cdFx0XHRvU291cmNlRmllbGQgPSBtRmllbGQuZmllbGQsXG5cdFx0XHRzRmllbGRJZCA9IG9Tb3VyY2VGaWVsZC5nZXRJZCgpO1xuXG5cdFx0Y29uc3Qgb0ludGVybmFsTW9kZWxDb250ZXh0ID0gb1NvdXJjZUZpZWxkLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikgYXMgSW50ZXJuYWxNb2RlbENvbnRleHQsXG5cdFx0XHRtRmllbGRWYWxpZGl0eSA9IG9JbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRQcm9wZXJ0eShcImNyZWF0aW9uUm93RmllbGRWYWxpZGl0eVwiKSxcblx0XHRcdG1OZXdGaWVsZFZhbGlkaXR5ID0gT2JqZWN0LmFzc2lnbih7fSwgbUZpZWxkVmFsaWRpdHkpO1xuXG5cdFx0bU5ld0ZpZWxkVmFsaWRpdHlbc0ZpZWxkSWRdID0gbUZpZWxkLnN0YXRlO1xuXHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcImNyZWF0aW9uUm93RmllbGRWYWxpZGl0eVwiLCBtTmV3RmllbGRWYWxpZGl0eSk7XG5cblx0XHQvLyBwcmVwYXJlIEN1c3RvbSBWYWxpZGF0aW9uXG5cdFx0aWYgKHdpdGhDdXN0b21WYWxpZGF0aW9uRnVuY3Rpb24pIHtcblx0XHRcdGNvbnN0IG1DdXN0b21WYWxpZGl0eSA9IG9JbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRQcm9wZXJ0eShcImNyZWF0aW9uUm93Q3VzdG9tVmFsaWRpdHlcIiksXG5cdFx0XHRcdG1OZXdDdXN0b21WYWxpZGl0eSA9IE9iamVjdC5hc3NpZ24oe30sIG1DdXN0b21WYWxpZGl0eSk7XG5cdFx0XHRtTmV3Q3VzdG9tVmFsaWRpdHlbb1NvdXJjZUZpZWxkLmdldEJpbmRpbmcoXCJ2YWx1ZVwiKSEuZ2V0UGF0aCgpXSA9IHtcblx0XHRcdFx0ZmllbGRJZDogb1NvdXJjZUZpZWxkLmdldElkKClcblx0XHRcdH07XG5cdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJjcmVhdGlvblJvd0N1c3RvbVZhbGlkaXR5XCIsIG1OZXdDdXN0b21WYWxpZGl0eSk7XG5cdFx0XHQvLyBSZW1vdmUgZXhpc3RpbmcgQ3VzdG9tVmFsaWRhdGlvbiBtZXNzYWdlXG5cdFx0XHRjb25zdCBzVGFyZ2V0ID0gYCR7b1NvdXJjZUZpZWxkLmdldEJpbmRpbmdDb250ZXh0KCk/LmdldFBhdGgoKX0vJHtvU291cmNlRmllbGQuZ2V0QmluZGluZ1BhdGgoXCJ2YWx1ZVwiKX1gO1xuXHRcdFx0TWVzc2FnaW5nLmdldE1lc3NhZ2VNb2RlbCgpXG5cdFx0XHRcdC5nZXREYXRhKClcblx0XHRcdFx0LmZvckVhY2goZnVuY3Rpb24gKG9NZXNzYWdlOiBNZXNzYWdlKSB7XG5cdFx0XHRcdFx0aWYgKG9NZXNzYWdlLmdldFRhcmdldHMoKVswXSA9PT0gc1RhcmdldCkge1xuXHRcdFx0XHRcdFx0TWVzc2FnaW5nLnJlbW92ZU1lc3NhZ2VzKG9NZXNzYWdlKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdH1cblx0fSxcblx0b25UcmVlVGFibGVDb250ZXh0Q2hhbmdlZDogZnVuY3Rpb24gKGV2ZW50OiBVSTVFdmVudCwgaW5pdGlhbEV4cGFuc2lvbkxldmVsPzogbnVtYmVyKTogdm9pZCB7XG5cdFx0Ly8gV2hlbiB0aGUgY29udGV4dCBvZiBhIFRyZWVUYWJsZSBjaGFuZ2VzLCB3ZSB3YW50IHRvIHJlc3RvcmUgaXRzIGV4cGFuc2lvbiBzdGF0ZSB0byB0aGUgZGVmYXVsdDpcblx0XHQvLyAgIC0gYWxsIGV4cGFuZGVkIGlmIHRoZXJlJ3MgYSBzZWFyY2ggcGFyYW1ldGVyIGNvbWluZyBmcm9tIHRoZSBmaWx0ZXJCYXJcblx0XHQvLyAgIC0gb3RoZXJ3aXNlIGluaXRpYWwgZXhwYW5zaW9uIHN0YXRlIGNvbWluZyBmcm9tIHRoZSBQViAoc3RvcmVkIGluIHRoZSBwYXlsb2FkKVxuXHRcdC8vICAgLSBvdGhlcndpc2Ugbm8gZXhwYW5zaW9uIGF0IGFsbFxuXG5cdFx0Y29uc3Qgc291cmNlID0gZXZlbnQuZ2V0U291cmNlKCk7XG5cdFx0Y29uc3QgdGFibGUgPSBzb3VyY2UgYXMgVGFibGU7XG5cdFx0Y29uc3QgdGFibGVBUEkgPSB0YWJsZS5nZXRQYXJlbnQoKSBhcyBUYWJsZUFQSTtcblx0XHRjb25zdCByb3dCaW5kaW5nID0gdGFibGUuZ2V0Um93QmluZGluZygpO1xuXHRcdGlmICghcm93QmluZGluZz8uZ2V0Q29udGV4dCgpIHx8IHRhYmxlQVBJLmdldElnbm9yZUNvbnRleHRDaGFuZ2VFdmVudCgpKSB7XG5cdFx0XHQvLyBUaGUgdGFibGUgaXMgbm90IGJvdW5kLCBvciB3ZSdyZSBpbiB0aGUgbWlkZGxlIG9mIHN3aXRjaGluZyBiZXR3ZWVuIG5vcm1hbCBhbmQgZnVsbHNjcmVlbiwgc28gd2UgZG9uJ3Qgd2FudCB0byBjaGFuZ2UgdGhlIGV4cGFuc2lvbiBzdGF0ZVxuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGNvbnN0IGFnZ3JlZ2F0aW9uOiB7XG5cdFx0XHRhZ2dyZWdhdGU/OiBvYmplY3Q7XG5cdFx0XHRleHBhbmRUbz86IG51bWJlcjtcblx0XHRcdGdyYW5kVG90YWxBdEJvdHRvbU9ubHk/OiBib29sZWFuO1xuXHRcdFx0Z3JvdXA/OiBvYmplY3Q7XG5cdFx0XHRncm91cExldmVscz86IHN0cmluZ1tdO1xuXHRcdFx0aGllcmFyY2h5UXVhbGlmaWVyPzogc3RyaW5nO1xuXHRcdFx0c2VhcmNoPzogc3RyaW5nO1xuXHRcdFx0c3VidG90YWxzQXRCb3R0b21Pbmx5PzogYm9vbGVhbjtcblx0XHR9ID0gcm93QmluZGluZy5nZXRBZ2dyZWdhdGlvbigpID8/IHt9O1xuXHRcdGNvbnN0IGZpbHRlckluZm8gPSBUYWJsZVV0aWxzLmdldEFsbEZpbHRlckluZm8odGFibGUpO1xuXHRcdGFnZ3JlZ2F0aW9uLmV4cGFuZFRvID0gZmlsdGVySW5mby5zZWFyY2ggPyBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUiA6IGluaXRpYWxFeHBhbnNpb25MZXZlbDtcblx0XHRyb3dCaW5kaW5nLnNldEFnZ3JlZ2F0aW9uKGFnZ3JlZ2F0aW9uKTtcblx0fSxcblxuXHQvKipcblx0ICogQ2FsbGVkIHdoZW4gYW4gaXRlbSBpbiBhICdDcmVhdGUnIG1lbnUgaXMgY2xpY2tlZC4gSXQgY3JlYXRlcyBhIGRvY3VtZW50IHdpdGggdGhlIGNvcnJlc3BvbmRpbmcgaW5pdGlhbCBkYXRhLlxuXHQgKiBAcGFyYW0gZXZlbnRcblx0ICogQHBhcmFtIHZhbHVlSW5kZXggVGhlIGluZGV4IG9mIHRoZSBpdGVtIGluIHRoZSBtZW51XG5cdCAqIEBwYXJhbSBzZWxlY3RlZENvbnRleHRzIFRoZSBzZWxlY3RlZCBjb250ZXh0cyBpbiB0aGUgdGFibGUgZm9yIHRoaXMgJ0NyZWF0ZScgbWVudVxuXHQgKi9cblx0b25DcmVhdGVNZW51SXRlbVByZXNzOiBhc3luYyBmdW5jdGlvbiAoZXZlbnQ6IFVJNUV2ZW50PHt9LCBNZW51SXRlbT4sIHZhbHVlSW5kZXg6IG51bWJlciwgc2VsZWN0ZWRDb250ZXh0czogQ29udGV4dFtdKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0Y29uc3QgbWRjVGFibGUgPSBGUE1IZWxwZXIuZ2V0TWRjVGFibGUoZXZlbnQuZ2V0U291cmNlKCkpO1xuXHRcdGNvbnN0IHRhYmxlQVBJID0gbWRjVGFibGU/LmdldFBhcmVudCgpIGFzIFRhYmxlQVBJIHwgdW5kZWZpbmVkO1xuXG5cdFx0Ly8gU29tZSBjaGVja3MgdG8gYmUgb24gdGhlIHNhZmUgc2lkZVxuXHRcdGlmICghdGFibGVBUEkgfHwgIW1kY1RhYmxlKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGNvbnN0IG5vZGVUeXBlID0gdGFibGVBUEkudGFibGVEZWZpbml0aW9uLmNvbnRyb2wubm9kZVR5cGU7XG5cdFx0aWYgKCFub2RlVHlwZSkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGNvbnN0IHZpZXcgPSBDb21tb25VdGlscy5nZXRUYXJnZXRWaWV3KHRhYmxlQVBJKTtcblx0XHRjb25zdCBjcmVhdGlvbkRhdGE6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcblx0XHRjcmVhdGlvbkRhdGFbbm9kZVR5cGUucHJvcGVydHlOYW1lXSA9IG5vZGVUeXBlLnZhbHVlc1t2YWx1ZUluZGV4XS52YWx1ZTtcblxuXHRcdGNvbnN0IGNyZWF0aW9uUGFyYW1ldGVyczoge1xuXHRcdFx0Y3JlYXRpb25Nb2RlOiBzdHJpbmc7XG5cdFx0XHRzZWxlY3RlZENvbnRleHRzPzogQ29udGV4dFtdO1xuXHRcdFx0dGFibGVJZD86IHN0cmluZztcblx0XHRcdGNyZWF0aW9uRGlhbG9nRmllbGRzPzogc3RyaW5nW107XG5cdFx0XHRkYXRhPzogb2JqZWN0O1xuXHRcdH0gPSB7XG5cdFx0XHRzZWxlY3RlZENvbnRleHRzLFxuXHRcdFx0Y3JlYXRpb25Nb2RlOiB0YWJsZUFQSS50YWJsZURlZmluaXRpb24uYW5ub3RhdGlvbi5jcmVhdGUubW9kZSxcblx0XHRcdGRhdGE6IGNyZWF0aW9uRGF0YSxcblx0XHRcdHRhYmxlSWQ6IG1kY1RhYmxlPy5nZXRJZCgpXG5cdFx0fTtcblxuXHRcdGlmIChjcmVhdGlvblBhcmFtZXRlcnMuY3JlYXRpb25Nb2RlID09PSBDcmVhdGlvbk1vZGUuQ3JlYXRpb25EaWFsb2cpIHtcblx0XHRcdGNyZWF0aW9uUGFyYW1ldGVycy5jcmVhdGlvbkRpYWxvZ0ZpZWxkcyA9IG5vZGVUeXBlLnZhbHVlc1t2YWx1ZUluZGV4XS5jcmVhdGlvbkRpYWxvZ0ZpZWxkcztcblx0XHRcdGlmICghY3JlYXRpb25QYXJhbWV0ZXJzLmNyZWF0aW9uRGlhbG9nRmllbGRzIHx8IGNyZWF0aW9uUGFyYW1ldGVycy5jcmVhdGlvbkRpYWxvZ0ZpZWxkcy5sZW5ndGggPT09IDApIHtcblx0XHRcdFx0Ly8gVXNlIHRoZSBkZWZhdWx0IHZhbHVlIGlmIG5vIGNyZWF0aW9uIGZpZWxkcyBhcmUgc3BlY2lmaWVkIGZvciB0aGlzIG1lbnUgaXRlbVxuXHRcdFx0XHRjcmVhdGlvblBhcmFtZXRlcnMuY3JlYXRpb25EaWFsb2dGaWVsZHMgPSB0YWJsZUFQSS50YWJsZURlZmluaXRpb24uY29udHJvbC5jcmVhdGlvbkRpYWxvZ0ZpZWxkcztcblx0XHRcdH1cblx0XHRcdGlmICghbWRjVGFibGUuZ2V0Um93QmluZGluZygpKSB7XG5cdFx0XHRcdC8vIEluIGNyZWF0aW9uIGRpYWxvZyBtb2RlLCB3ZSBmb3JjZSB0aGUgdGFibGUgZGF0YSB0byBiZSBsb2FkZWQgYmVmb3JlIGNyZWF0aW5nIHRoZSBkb2N1bWVudFxuXHRcdFx0XHQvLyAodG8gb3ZlcmNvbWUgdGhlIGNhc2UgaW4gYSBMaXN0UmVwb3J0IHdoZXJlIG5vIGRhdGEgaXMgbG9hZGVkIHlldClcblx0XHRcdFx0YXdhaXQgbWRjVGFibGUucmViaW5kKCk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0dmlldy5nZXRDb250cm9sbGVyKClcblx0XHRcdC5lZGl0Rmxvdy5jcmVhdGVEb2N1bWVudCh0YWJsZUFQSS5nZXRSb3dCaW5kaW5nKCksIGNyZWF0aW9uUGFyYW1ldGVycylcblx0XHRcdC5jYXRjaCgoZXJyb3IpID0+IHtcblx0XHRcdFx0TG9nLmVycm9yKGBGYWlsZWQgdG8gY3JlYXRlIG5ldyBkb2N1bWVudDogJHtlcnJvcn1gKTtcblx0XHRcdH0pO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBDYWxsZWQgd2hlbiB0aGUgJ0NyZWF0ZScgYnV0dG9uIGlzIHByZXNzZWQsIG9yIHRoZSAnQ3JlYXRlJyBjb21tYW5kIGludm9rZWQuXG5cdCAqIEBwYXJhbSBldmVudFxuXHQgKiBAcGFyYW0gc2VsZWN0ZWRDb250ZXh0cyBUaGUgc2VsZWN0ZWQgY29udGV4dHMgaW4gdGhlIHRhYmxlIGZvciB0aGlzICdDcmVhdGUnIGJ1dHRvblxuXHQgKi9cblx0b25DcmVhdGVCdXR0b25QcmVzczogYXN5bmMgZnVuY3Rpb24gKGV2ZW50OiBVSTVFdmVudCwgc2VsZWN0ZWRDb250ZXh0cz86IENvbnRleHRbXSk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGNvbnN0IG1kY1RhYmxlID0gRlBNSGVscGVyLmdldE1kY1RhYmxlKGV2ZW50LmdldFNvdXJjZSgpKTtcblx0XHRjb25zdCB0YWJsZUFQSSA9IG1kY1RhYmxlPy5nZXRQYXJlbnQoKSBhcyBUYWJsZUFQSSB8IHVuZGVmaW5lZDtcblxuXHRcdC8vIFNvbWUgY2hlY2tzIHRvIGJlIG9uIHRoZSBzYWZlIHNpZGVcblx0XHRpZiAoIXRhYmxlQVBJIHx8ICFtZGNUYWJsZSkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGNvbnN0IGNyZWF0aW9uUGFyYW1ldGVyczoge1xuXHRcdFx0Y3JlYXRlQXRFbmQ/OiBib29sZWFuO1xuXHRcdFx0Y3JlYXRpb25Nb2RlOiBzdHJpbmc7XG5cdFx0XHRvdXRib3VuZD86IHN0cmluZztcblx0XHRcdGNyZWF0aW9uUm93PzogQ3JlYXRpb25Sb3c7XG5cdFx0XHRzZWxlY3RlZENvbnRleHRzPzogQ29udGV4dFtdO1xuXHRcdFx0dGFibGVJZD86IHN0cmluZztcblx0XHRcdGNyZWF0aW9uRGlhbG9nRmllbGRzPzogc3RyaW5nW107XG5cdFx0fSA9IHsgY3JlYXRpb25Nb2RlOiB0YWJsZUFQSS50YWJsZURlZmluaXRpb24uYW5ub3RhdGlvbi5jcmVhdGUubW9kZSB9O1xuXG5cdFx0c3dpdGNoIChjcmVhdGlvblBhcmFtZXRlcnMuY3JlYXRpb25Nb2RlKSB7XG5cdFx0XHRjYXNlIENyZWF0aW9uTW9kZS5FeHRlcm5hbDpcblx0XHRcdFx0Y3JlYXRpb25QYXJhbWV0ZXJzLm91dGJvdW5kID0gKHRhYmxlQVBJLnRhYmxlRGVmaW5pdGlvbi5hbm5vdGF0aW9uLmNyZWF0ZSBhcyBDcmVhdGVCZWhhdmlvckV4dGVybmFsKS5vdXRib3VuZDtcblx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdGNhc2UgQ3JlYXRpb25Nb2RlLkNyZWF0aW9uUm93OlxuXHRcdFx0XHRjcmVhdGlvblBhcmFtZXRlcnMuY3JlYXRpb25Sb3cgPSBldmVudC5nZXRTb3VyY2UoKTtcblx0XHRcdFx0Y3JlYXRpb25QYXJhbWV0ZXJzLmNyZWF0ZUF0RW5kID0gdGFibGVBUEkudGFibGVEZWZpbml0aW9uLmNvbnRyb2wuY3JlYXRlQXRFbmQgPz8gZmFsc2U7XG5cdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRjYXNlIENyZWF0aW9uTW9kZS5OZXdQYWdlOlxuXHRcdFx0Y2FzZSBDcmVhdGlvbk1vZGUuSW5saW5lOlxuXHRcdFx0Y2FzZSBDcmVhdGlvbk1vZGUuQ3JlYXRpb25EaWFsb2c6XG5cdFx0XHRcdGNyZWF0aW9uUGFyYW1ldGVycy5jcmVhdGVBdEVuZCA9IHRhYmxlQVBJLnRhYmxlRGVmaW5pdGlvbi5jb250cm9sLmNyZWF0ZUF0RW5kID8/IGZhbHNlO1xuXHRcdFx0XHRjcmVhdGlvblBhcmFtZXRlcnMudGFibGVJZCA9IG1kY1RhYmxlPy5nZXRJZCgpO1xuXHRcdFx0XHRjcmVhdGlvblBhcmFtZXRlcnMuc2VsZWN0ZWRDb250ZXh0cyA9IHNlbGVjdGVkQ29udGV4dHM7XG5cdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRjYXNlIENyZWF0aW9uTW9kZS5JbmxpbmVDcmVhdGlvblJvd3M6XG5cdFx0XHRcdC8vIE5vdGhpbmdcblx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdC8vIE90aGVyIG1vZGVzIGFyZSBub3Qgc3VwcG9ydGVkXG5cdFx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRpZiAoY3JlYXRpb25QYXJhbWV0ZXJzLmNyZWF0aW9uTW9kZSA9PT0gQ3JlYXRpb25Nb2RlLkNyZWF0aW9uRGlhbG9nKSB7XG5cdFx0XHRjcmVhdGlvblBhcmFtZXRlcnMuY3JlYXRpb25EaWFsb2dGaWVsZHMgPSB0YWJsZUFQSS50YWJsZURlZmluaXRpb24uY29udHJvbC5jcmVhdGlvbkRpYWxvZ0ZpZWxkcztcblx0XHRcdGlmICghbWRjVGFibGUuZ2V0Um93QmluZGluZygpKSB7XG5cdFx0XHRcdC8vIEluIGNyZWF0aW9uIGRpYWxvZyBtb2RlLCB3ZSBmb3JjZSB0aGUgdGFibGUgZGF0YSB0byBiZSBsb2FkZWQgYmVmb3JlIGNyZWF0aW5nIHRoZSBkb2N1bWVudFxuXHRcdFx0XHQvLyAodG8gb3ZlcmNvbWUgdGhlIGNhc2UgaW4gYSBMaXN0UmVwb3J0IHdoZXJlIG5vIGRhdGEgaXMgbG9hZGVkIHlldClcblx0XHRcdFx0YXdhaXQgbWRjVGFibGUucmViaW5kKCk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Y29uc3QgdmlldyA9IENvbW1vblV0aWxzLmdldFRhcmdldFZpZXcodGFibGVBUEkpO1xuXG5cdFx0aWYgKGNyZWF0aW9uUGFyYW1ldGVycy5jcmVhdGlvbk1vZGUgPT09IENyZWF0aW9uTW9kZS5JbmxpbmVDcmVhdGlvblJvd3MpIHtcblx0XHRcdHZpZXcuZ2V0Q29udHJvbGxlcigpXG5cdFx0XHRcdC5lZGl0Rmxvdy5jcmVhdGVFbXB0eVJvd3NBbmRGb2N1cyhtZGNUYWJsZSlcblx0XHRcdFx0LmNhdGNoKChlcnJvcikgPT4ge1xuXHRcdFx0XHRcdExvZy5lcnJvcihgRmFpbGVkIHRvIGNyZWF0ZSBuZXcgZW1wdHkgcm93OiAke2Vycm9yfWApO1xuXHRcdFx0XHR9KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dmlldy5nZXRDb250cm9sbGVyKClcblx0XHRcdFx0LmVkaXRGbG93LmNyZWF0ZURvY3VtZW50KHRhYmxlQVBJLCBjcmVhdGlvblBhcmFtZXRlcnMpXG5cdFx0XHRcdC5jYXRjaCgoZXJyb3IpID0+IHtcblx0XHRcdFx0XHRMb2cuZXJyb3IoYEZhaWxlZCB0byBjcmVhdGUgbmV3IGRvY3VtZW50OiAke2Vycm9yfWApO1xuXHRcdFx0XHR9KTtcblx0XHR9XG5cdH0sXG5cblx0LyoqXG5cdCAqIE1ldGhvZCB0byBtYW5hZ2UgdGhlIEludGVudEJhc2VkIE5hdmlnYXRpb24gZW5hYmxlbWVudC5cblx0ICogQHBhcmFtIGludGVybmFsTW9kZWxDb250ZXh0XG5cdCAqIEBwYXJhbSBuYXZpZ2F0aW9uQXZhaWxhYmxlTWFwXG5cdCAqIEBwYXJhbSBzZWxlY3RlZENvbnRleHRzXG5cdCAqIEBwYXJhbSBmb3JDb250ZXh0TWVudVxuXHQgKi9cblx0c2V0SW50ZW50QmFzZWROYXZpZ2F0aW9uRW5hYmxlbWVudDogZnVuY3Rpb24gKFxuXHRcdGludGVybmFsTW9kZWxDb250ZXh0OiBJbnRlcm5hbE1vZGVsQ29udGV4dCxcblx0XHRuYXZpZ2F0aW9uQXZhaWxhYmxlTWFwOiBzdHJpbmdbXSxcblx0XHRzZWxlY3RlZENvbnRleHRzOiBDb250ZXh0W10sXG5cdFx0Zm9yQ29udGV4dE1lbnUgPSBmYWxzZVxuXHQpOiB2b2lkIHtcblx0XHRmb3IgKGNvbnN0IHNLZXkgaW4gbmF2aWdhdGlvbkF2YWlsYWJsZU1hcCkge1xuXHRcdFx0aWYgKCFmb3JDb250ZXh0TWVudSkge1xuXHRcdFx0XHRpbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShgaWJuLyR7c0tleX1gLCB7XG5cdFx0XHRcdFx0YkVuYWJsZWQ6IGZhbHNlLFxuXHRcdFx0XHRcdGFBcHBsaWNhYmxlOiBbXSxcblx0XHRcdFx0XHRhTm90QXBwbGljYWJsZTogW11cblx0XHRcdFx0fSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRpbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShgaWJuLyR7c0tleX1gLCB7XG5cdFx0XHRcdFx0Ly8gRG8gbm90IGNoYW5nZSBlbmFibGVkLCBhQXBwbGljYWJsZSBhbmQgYU5vdEFwcGxpY2FibGUgcHJvcGVydHkgaW4gY2FzZSBvZiBjb250ZXh0IG1lbnUgY2FsY3VsYXRpb25cblx0XHRcdFx0XHRiRW5hYmxlZDogaW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0UHJvcGVydHkoYCR7aW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0UGF0aCgpfS9pYm4vJHtzS2V5fS9iRW5hYmxlZGApLFxuXHRcdFx0XHRcdGFBcHBsaWNhYmxlOiBpbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRQcm9wZXJ0eShgJHtpbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRQYXRoKCl9L2libi8ke3NLZXl9L2FBcHBsaWNhYmxlYCksXG5cdFx0XHRcdFx0YU5vdEFwcGxpY2FibGU6IGludGVybmFsTW9kZWxDb250ZXh0LmdldFByb3BlcnR5KGAke2ludGVybmFsTW9kZWxDb250ZXh0LmdldFBhdGgoKX0vaWJuLyR7c0tleX0vYU5vdEFwcGxpY2FibGVgKSxcblx0XHRcdFx0XHRiRW5hYmxlZEZvckNvbnRleHRNZW51OiBmYWxzZSxcblx0XHRcdFx0XHRhQXBwbGljYWJsZUZvckNvbnRleHRNZW51OiBbXSxcblx0XHRcdFx0XHRhTm90QXBwbGljYWJsZUZvckNvbnRleHRNZW51OiBbXVxuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHRcdGNvbnN0IGFBcHBsaWNhYmxlID0gW10sXG5cdFx0XHRcdGFOb3RBcHBsaWNhYmxlID0gW107XG5cdFx0XHRjb25zdCBzUHJvcGVydHkgPSBuYXZpZ2F0aW9uQXZhaWxhYmxlTWFwW3NLZXldO1xuXHRcdFx0Zm9yIChjb25zdCBzZWxlY3RlZENvbnRleHQgb2Ygc2VsZWN0ZWRDb250ZXh0cykge1xuXHRcdFx0XHRpZiAoc2VsZWN0ZWRDb250ZXh0LmdldE9iamVjdChzUHJvcGVydHkpKSB7XG5cdFx0XHRcdFx0Y29uc3QgZW5hYmxlZFByb3BlcnR5ID0gIWZvckNvbnRleHRNZW51ID8gXCJiRW5hYmxlZFwiIDogXCJiRW5hYmxlZEZvckNvbnRleHRNZW51XCI7XG5cdFx0XHRcdFx0aW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0TW9kZWwoKS5zZXRQcm9wZXJ0eShgJHtpbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRQYXRoKCl9L2libi8ke3NLZXl9LyR7ZW5hYmxlZFByb3BlcnR5fWAsIHRydWUpO1xuXHRcdFx0XHRcdGFBcHBsaWNhYmxlLnB1c2goc2VsZWN0ZWRDb250ZXh0KTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRhTm90QXBwbGljYWJsZS5wdXNoKHNlbGVjdGVkQ29udGV4dCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGNvbnN0IGFwcGxpY2FibGVQcm9wZXJ0eSA9ICFmb3JDb250ZXh0TWVudSA/IFwiYUFwcGxpY2FibGVcIiA6IFwiYUFwcGxpY2FibGVGb3JDb250ZXh0TWVudVwiO1xuXHRcdFx0Y29uc3Qgbm90QXBwbGljYWJsZVByb3BlcnR5ID0gIWZvckNvbnRleHRNZW51ID8gXCJhTm90QXBwbGljYWJsZVwiIDogXCJhTm90QXBwbGljYWJsZUZvckNvbnRleHRNZW51XCI7XG5cdFx0XHRpbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRNb2RlbCgpLnNldFByb3BlcnR5KGAke2ludGVybmFsTW9kZWxDb250ZXh0LmdldFBhdGgoKX0vaWJuLyR7c0tleX0vJHthcHBsaWNhYmxlUHJvcGVydHl9YCwgYUFwcGxpY2FibGUpO1xuXHRcdFx0aW50ZXJuYWxNb2RlbENvbnRleHRcblx0XHRcdFx0LmdldE1vZGVsKClcblx0XHRcdFx0LnNldFByb3BlcnR5KGAke2ludGVybmFsTW9kZWxDb250ZXh0LmdldFBhdGgoKX0vaWJuLyR7c0tleX0vJHtub3RBcHBsaWNhYmxlUHJvcGVydHl9YCwgYU5vdEFwcGxpY2FibGUpO1xuXHRcdH1cblx0fSxcblxuXHQvKipcblx0ICogQ2FsbGVkIHdoZW4gYSBjb250ZXh0IG1lbnUgaXRlbSBpcyBwcmVzc2VkLlxuXHQgKiBAcGFyYW0gZXZlbnRcblx0ICovXG5cdG9uQ29udGV4dE1lbnVJdGVtU2VsZWN0ZWQ6IGZ1bmN0aW9uIChldmVudDogVUk1RXZlbnQpOiB2b2lkIHtcblx0XHRjb25zdCBtZGNUYWJsZSA9IEZQTUhlbHBlci5nZXRNZGNUYWJsZShldmVudC5nZXRTb3VyY2UoKSk7XG5cdFx0Y29uc3QgdGFibGVBUEkgPSBtZGNUYWJsZT8uZ2V0UGFyZW50KCkgYXMgVGFibGVBUEkgfCB1bmRlZmluZWQ7XG5cblx0XHQvLyBTZXQgdGhlIGZsYWcgb24gdGhlIHRhYmxlQVBJIHNvIHRoYXQgZ2V0U2VsZWN0ZWRDb250ZXh0cyByZXR1cm5zIHRoZSBjb3JyZWN0IHZhbHVlXG5cdFx0dGFibGVBUEk/LnNldENvbnRleHRNZW51QWN0aXZlKHRydWUpO1xuXG5cdFx0Ly8gQWZ0ZXIgYSBzaG9ydCBkZWxheSAob25jZSB0aGUgY29ycmVzcG9uZGluZyBhY3Rpb24gaGFzIGJlZW4gdHJpZ2dlcmVkKSwgd2UgbmVlZCB0byByZXNldCB0aGUgZmxhZyBvbiB0aGUgdGFibGVcblx0XHRzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdHRhYmxlQVBJPy5zZXRDb250ZXh0TWVudUFjdGl2ZShmYWxzZSk7XG5cdFx0fSwgMCk7XG5cdH0sXG5cblx0LyoqXG5cdCAqIEhhbmRsZXMgdGhlIE1EQyBEYXRhU3RhdGVJbmRpY2F0b3IgcGx1Z2luIHRvIGRpc3BsYXkgbWVzc2FnZVN0cmlwIG9uIGEgdGFibGUuXG5cdCAqIEBwYXJhbSBtZXNzYWdlXG5cdCAqIEBwYXJhbSBjb250cm9sXG5cdCAqIEByZXR1cm5zIFdoZXRoZXIgdG8gcmVuZGVyIHRoZSBtZXNzYWdlU3RyaXAgdmlzaWJsZVxuXHQgKi9cblx0ZGF0YVN0YXRlSW5kaWNhdG9yRmlsdGVyOiBmdW5jdGlvbiAobWVzc2FnZTogTWVzc2FnZSwgY29udHJvbDogQ29udHJvbCk6IGJvb2xlYW4ge1xuXHRcdGNvbnN0IHRhYmxlQVBJID0gY29udHJvbC5nZXRQYXJlbnQoKSBhcyBUYWJsZUFQSTtcblx0XHRyZXR1cm4gdGFibGVBUEkuZGF0YVN0YXRlSW5kaWNhdG9yRmlsdGVyKG1lc3NhZ2UsIGNvbnRyb2wpO1xuXHR9XG59O1xuXG5leHBvcnQgZGVmYXVsdCBUYWJsZVJ1bnRpbWU7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7RUE2QkEsTUFBTUEsWUFBWSxHQUFHQyxTQUFTLENBQUNELFlBQVk7RUFDM0M7QUFDQTtBQUNBO0FBQ0E7RUFDQSxNQUFNRSxZQUFZLEdBQUc7SUFDcEJDLGdDQUFnQyxFQUFFLFNBQUFBLENBQVVDLGNBQXNCLEVBQUVDLE9BQWdCLEVBQVE7TUFDM0Y7TUFDQSxNQUFNQyxTQUFTLEdBQUdELE9BQU8sQ0FBQ0UsU0FBUyxDQUFDLENBQWE7TUFDakQsSUFBSUgsY0FBYyxLQUFLSixZQUFZLENBQUNRLFdBQVcsRUFBRTtRQUNoRCxNQUFNQyxPQUFPLEdBQUdILFNBQVMsQ0FDdkJJLFVBQVUsQ0FBQyxDQUFDLENBQ1pDLE1BQU0sQ0FBQyxVQUFVQyxjQUF5QixFQUFFQyxvQkFBNkIsRUFBRTtVQUMzRSxPQUFPRCxjQUFjLENBQUNFLE1BQU0sQ0FBRUQsb0JBQW9CLENBQXlCRSxTQUFTLENBQUMsQ0FBQyxDQUFDO1FBQ3hGLENBQUMsRUFBRSxFQUFlLENBQUMsQ0FDbEJDLElBQUksQ0FBQyxVQUFVQyxhQUFzQixFQUFFO1VBQ3ZDLE9BQU9BLGFBQWEsQ0FB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
@@ -18,17 +18,18 @@ import type UI5Event from "sap/ui/base/Event";
18
18
  import type Control from "sap/ui/core/Control";
19
19
  import Messaging from "sap/ui/core/Messaging";
20
20
  import type Message from "sap/ui/core/message/Message";
21
- import type { Field$ChangeEvent } from "sap/ui/mdc/Field";
22
21
  import type { default as MDCTable, default as Table } from "sap/ui/mdc/Table";
23
22
  import type ActionToolbarAction from "sap/ui/mdc/actiontoolbar/ActionToolbarAction";
24
23
  import type CreationRow from "sap/ui/mdc/table/CreationRow";
25
24
  import type Context from "sap/ui/model/odata/v4/Context";
26
25
  import type ODataMetaModel from "sap/ui/model/odata/v4/ODataMetaModel";
26
+ import type { EventType } from "types/extension_types";
27
+ import type Field from "../Field";
27
28
  import FieldRuntimeHelper from "../field/FieldRuntimeHelper";
28
29
 
29
30
  const CreationMode = FELibrary.CreationMode;
30
31
  /**
31
- * Static class used by Table building block during runtime
32
+ * Static class used by the Table building block during runtime
32
33
  * @private
33
34
  */
34
35
  const TableRuntime = {
@@ -462,10 +463,7 @@ const TableRuntime = {
462
463
  oDynamicActions[sAction] = { bEnabled: false };
463
464
  });
464
465
  },
465
- onFieldChangeInCreationRow: function (
466
- oEvent: Field$ChangeEvent & UI5Event<{ isValid: boolean }>,
467
- withCustomValidationFunction: boolean
468
- ): void {
466
+ onFieldChangeInCreationRow: function (oEvent: EventType<typeof Field.prototype.change>, withCustomValidationFunction: boolean): void {
469
467
  // CREATION ROW CASE
470
468
  const mField = FieldRuntimeHelper.getFieldStateOnChange(oEvent),
471
469
  oSourceField = mField.field,
@@ -114,11 +114,11 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/helpers/SizeHelper", "sap/fe/core/he
114
114
  * @alias sap.fe.macros.TableSizeHelper
115
115
  * @returns {object} Object containing the width of the label and the width of the property.
116
116
  */
117
-
118
- getWidthForDataField: function (dataField, showDataFieldsLabel, properties, convertedMetaData, widthIncludingColumnHeader) {
117
+ getWidthForDataField: function (dataField, properties, convertedMetaData, widthIncludingColumnHeader, dataModelObjectPath) {
118
+ let showDataFieldsLabel = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : false;
119
119
  const oTargetedProperty = dataField.Value?.$target,
120
120
  oTextArrangementTarget = oTargetedProperty?.annotations?.Common?.Text,
121
- displayMode = getDisplayMode(dataField.Value?.$target);
121
+ displayMode = getDisplayMode(dataField.Value?.$target, dataModelObjectPath.targetEntityType);
122
122
  let nPropertyWidth = 0,
123
123
  fLabelWidth = 0;
124
124
  if (oTargetedProperty) {
@@ -145,4 +145,4 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/helpers/SizeHelper", "sap/fe/core/he
145
145
  };
146
146
  return TableSizeHelper;
147
147
  }, false);
148
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJUYWJsZVNpemVIZWxwZXIiLCJnZXRNRENDb2x1bW5XaWR0aEZyb21EYXRhRmllbGQiLCJkYXRhRmllbGQiLCJwcm9wZXJ0aWVzIiwiY29udmVydGVkTWV0YURhdGEiLCJ3aWR0aEluY2x1ZGluZ0NvbHVtbkhlYWRlciIsImFyZ3VtZW50cyIsImxlbmd0aCIsInVuZGVmaW5lZCIsInByb3BlcnR5IiwiZmluZCIsInByb3AiLCJhbm5vdGF0aW9uUGF0aCIsInJlc29sdmVQYXRoIiwidGFyZ2V0IiwiZnVsbHlRdWFsaWZpZWROYW1lIiwiZ2V0TURDQ29sdW1uV2lkdGhGcm9tUHJvcGVydHkiLCJpc1NvcnRhYmxlQ29sdW1uIiwiaXNDb2x1bW5SZXF1aXJlZCIsIm1XaWR0aENhbGN1bGF0aW9uIiwiT2JqZWN0IiwiYXNzaWduIiwiaGVhZGVyR2FwIiwiZ2FwIiwidHJ1bmNhdGVMYWJlbCIsImV4Y2x1ZGVQcm9wZXJ0aWVzIiwicmVxdWlyZWQiLCJ2aXN1YWxTZXR0aW5ncyIsIndpZHRoQ2FsY3VsYXRpb24iLCJ0eXBlcyIsInByb3BlcnR5SW5mb3MiLCJtYXAiLCJwcm9wTmFtZSIsIl9wcm9wZXJ0eSIsImtleSIsInByb3BlcnR5VHlwZUNvbmZpZyIsImRhdGFUeXBlIiwidHlwZUNvbmZpZyIsIlR5cGVNYXAiLCJnZXRUeXBlQ29uZmlnIiwiZm9ybWF0T3B0aW9ucyIsImNvbnN0cmFpbnRzIiwidHlwZUluc3RhbmNlIiwiZmlsdGVyIiwiaXRlbSIsInNpemUiLCJUYWJsZVV0aWwiLCJjYWxjQ29sdW1uV2lkdGgiLCJsYWJlbCIsIkxvZyIsImVycm9yIiwicGFyc2VGbG9hdCIsInJlcGxhY2UiLCJnZXRXaWR0aEZvckRhdGFGaWVsZEZvckFubm90YXRpb24iLCJzaG93RGF0YUZpZWxkc0xhYmVsIiwib1RhcmdldGVkUHJvcGVydHkiLCJpc0Fubm90YXRpb25PZlR5cGUiLCJUYXJnZXQiLCIkdGFyZ2V0IiwiblByb3BlcnR5V2lkdGgiLCJmTGFiZWxXaWR0aCIsIlZpc3VhbGl6YXRpb24iLCJuYlN0YXJzIiwiVGFyZ2V0VmFsdWUiLCJwYXJzZUludCIsInNMYWJlbCIsIkxhYmVsIiwidG9TdHJpbmciLCJTaXplSGVscGVyIiwiZ2V0QnV0dG9uV2lkdGgiLCJpc1BhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbiIsImZuIiwibGFiZWxXaWR0aCIsInByb3BlcnR5V2lkdGgiLCJnZXRXaWR0aEZvckRhdGFGaWVsZCIsIlZhbHVlIiwib1RleHRBcnJhbmdlbWVudFRhcmdldCIsImFubm90YXRpb25zIiwiQ29tbW9uIiwiVGV4dCIsImRpc3BsYXlNb2RlIiwiZ2V0RGlzcGxheU1vZGUiLCIkVHlwZSJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiVGFibGVTaXplSGVscGVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgUHJvcGVydHksIFNlcnZpY2VPYmplY3QgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXNcIjtcbmltcG9ydCB0eXBlIHsgQ29udmVydGVkTWV0YWRhdGEgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvRWRtXCI7XG5pbXBvcnQgdHlwZSB7IENvbnRhY3RUeXBlIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9Db21tdW5pY2F0aW9uXCI7XG5pbXBvcnQgeyBDb21tdW5pY2F0aW9uQW5ub3RhdGlvblR5cGVzIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9Db21tdW5pY2F0aW9uXCI7XG5pbXBvcnQgdHlwZSB7XG5cdERhdGFGaWVsZCxcblx0RGF0YUZpZWxkRm9yQWN0aW9uLFxuXHREYXRhRmllbGRGb3JBbm5vdGF0aW9uLFxuXHREYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24sXG5cdERhdGFQb2ludFR5cGVcbn0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9VSVwiO1xuaW1wb3J0IHsgVUlBbm5vdGF0aW9uVHlwZXMgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL1VJXCI7XG5pbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCBTaXplSGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1NpemVIZWxwZXJcIjtcbmltcG9ydCB7IGlzQW5ub3RhdGlvbk9mVHlwZSwgaXNQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9UeXBlR3VhcmRzXCI7XG5pbXBvcnQgeyBnZXREaXNwbGF5TW9kZSB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0Rpc3BsYXlNb2RlRm9ybWF0dGVyXCI7XG5pbXBvcnQgdHlwZSB7IEVuaGFuY2VkRkVQcm9wZXJ0eUluZm8gfSBmcm9tIFwic2FwL2ZlL21hY3Jvcy90YWJsZS9UYWJsZUFQSVwiO1xuaW1wb3J0IFRhYmxlVXRpbCBmcm9tIFwic2FwL20vdGFibGUvVXRpbFwiO1xuaW1wb3J0IHR5cGUgVHlwZUNvbmZpZyBmcm9tIFwic2FwL3VpL21kYy9UeXBlQ29uZmlnXCI7XG5pbXBvcnQgVHlwZU1hcCBmcm9tIFwic2FwL3VpL21kYy9vZGF0YS92NC9UeXBlTWFwXCI7XG5cbmNvbnN0IFRhYmxlU2l6ZUhlbHBlciA9IHtcblx0LyoqXG5cdCAqIE1ldGhvZCB0byBjYWxjdWxhdGUgdGhlIHdpZHRoIG9mIHRoZSBNRENDb2x1bW4uXG5cdCAqIEBwYXJhbSBkYXRhRmllbGQgVGhlIFByb3BlcnR5IG9yIFByb3BlcnR5SW5mbyBPYmplY3QgZm9yIHdoaWNoIHRoZSB3aWR0aCB3aWxsIGJlIGNhbGN1bGF0ZWQuXG5cdCAqIEBwYXJhbSBwcm9wZXJ0aWVzIEFuIGFycmF5IGNvbnRhaW5pbmcgYWxsIHByb3BlcnR5IGRlZmluaXRpb25zIChvcHRpb25hbClcblx0ICogQHBhcmFtIGNvbnZlcnRlZE1ldGFEYXRhXG5cdCAqIEBwYXJhbSB3aWR0aEluY2x1ZGluZ0NvbHVtbkhlYWRlciBJbmRpY2F0ZXMgaWYgdGhlIGxhYmVsIHNob3VsZCBiZSBhIHBhcnQgb2YgdGhlIHdpZHRoIGNhbGN1bGF0aW9uXG5cdCAqIEBwcml2YXRlXG5cdCAqIEBhbGlhcyBzYXAuZmUubWFjcm9zLlRhYmxlU2l6ZUhlbHBlclxuXHQgKiBAcmV0dXJucyBUaGUgd2lkdGggb2YgdGhlIGNvbHVtbi5cblx0ICovXG5cdGdldE1EQ0NvbHVtbldpZHRoRnJvbURhdGFGaWVsZDogZnVuY3Rpb24gKFxuXHRcdGRhdGFGaWVsZDogRGF0YUZpZWxkIHwgUHJvcGVydHkgfCB1bmRlZmluZWQsXG5cdFx0cHJvcGVydGllczogRW5oYW5jZWRGRVByb3BlcnR5SW5mb1tdLFxuXHRcdGNvbnZlcnRlZE1ldGFEYXRhOiBDb252ZXJ0ZWRNZXRhZGF0YSxcblx0XHR3aWR0aEluY2x1ZGluZ0NvbHVtbkhlYWRlciA9IGZhbHNlXG5cdCk6IG51bWJlciB7XG5cdFx0Y29uc3QgcHJvcGVydHkgPSBwcm9wZXJ0aWVzLmZpbmQoXG5cdFx0XHQocHJvcCkgPT5cblx0XHRcdFx0cHJvcC5hbm5vdGF0aW9uUGF0aCAmJlxuXHRcdFx0XHRjb252ZXJ0ZWRNZXRhRGF0YS5yZXNvbHZlUGF0aDxTZXJ2aWNlT2JqZWN0Pihwcm9wLmFubm90YXRpb25QYXRoKT8udGFyZ2V0Py5mdWxseVF1YWxpZmllZE5hbWUgPT09XG5cdFx0XHRcdFx0ZGF0YUZpZWxkPy5mdWxseVF1YWxpZmllZE5hbWVcblx0XHQpO1xuXHRcdHJldHVybiBwcm9wZXJ0eSA/IHRoaXMuZ2V0TURDQ29sdW1uV2lkdGhGcm9tUHJvcGVydHkocHJvcGVydHksIHByb3BlcnRpZXMsIHdpZHRoSW5jbHVkaW5nQ29sdW1uSGVhZGVyKSA6IDA7XG5cdH0sXG5cblx0LyoqXG5cdCAqICBNZXRob2QgdG8gY2FsY3VsYXRlIHRoZSB3aWR0aCBvZiB0aGUgTURDQ29sdW1uLlxuXHQgKiBAcGFyYW0gcHJvcGVydHkgVGhlIFByb3BlcnR5SW5mbyBvYmplY3QgZm9yIHdoaWNoIHRoZSB3aWR0aCBpcyBjYWxjdWxhdGVkXG5cdCAqIEBwYXJhbSBwcm9wZXJ0aWVzICBBbiBhcnJheSBjb250YWluaW5nIGFsbCBwcm9wZXJ0eSBkZWZpbml0aW9ucyAob3B0aW9uYWwpXG5cdCAqIEBwYXJhbSB3aWR0aEluY2x1ZGluZ0NvbHVtbkhlYWRlciBJbmRpY2F0ZXMgaWYgdGhlIGxhYmVsIGlzIHBhcnQgb2YgdGhlIHdpZHRoIGNhbGN1bGF0aW9uXG5cdCAqIEBwYXJhbSBpc1NvcnRhYmxlQ29sdW1uIEluZGljYXRlcyBpZiB0aGUgY29sdW1uIGlzIHNvcnRhYmxlXG5cdCAqIEBwYXJhbSBpc0NvbHVtblJlcXVpcmVkIEluZGljYXRlcyBpZiB0aGUgY29sdW1uIGlzIHJlcXVpcmVkXG5cdCAqIEByZXR1cm5zIFRoZSB3aWR0aCBvZiB0aGUgY29sdW1uLlxuXHQgKi9cblx0Z2V0TURDQ29sdW1uV2lkdGhGcm9tUHJvcGVydHk6IGZ1bmN0aW9uIChcblx0XHRwcm9wZXJ0eTogRW5oYW5jZWRGRVByb3BlcnR5SW5mbyxcblx0XHRwcm9wZXJ0aWVzOiBFbmhhbmNlZEZFUHJvcGVydHlJbmZvW10sXG5cdFx0d2lkdGhJbmNsdWRpbmdDb2x1bW5IZWFkZXIgPSBmYWxzZSxcblx0XHRpc1NvcnRhYmxlQ29sdW1uID0gZmFsc2UsXG5cdFx0aXNDb2x1bW5SZXF1aXJlZCA9IGZhbHNlXG5cdCk6IG51bWJlciB7XG5cdFx0Y29uc3QgbVdpZHRoQ2FsY3VsYXRpb24gPSBPYmplY3QuYXNzaWduKFxuXHRcdFx0e1xuXHRcdFx0XHRoZWFkZXJHYXA6IHdpZHRoSW5jbHVkaW5nQ29sdW1uSGVhZGVyICYmIGlzU29ydGFibGVDb2x1bW4sXG5cdFx0XHRcdGdhcDogMCxcblx0XHRcdFx0dHJ1bmNhdGVMYWJlbDogIXdpZHRoSW5jbHVkaW5nQ29sdW1uSGVhZGVyLFxuXHRcdFx0XHRleGNsdWRlUHJvcGVydGllczogW10sXG5cdFx0XHRcdHJlcXVpcmVkOiBpc0NvbHVtblJlcXVpcmVkXG5cdFx0XHR9LFxuXHRcdFx0cHJvcGVydHkudmlzdWFsU2V0dGluZ3M/LndpZHRoQ2FsY3VsYXRpb25cblx0XHQpO1xuXG5cdFx0bGV0IHR5cGVzO1xuXHRcdGlmIChwcm9wZXJ0eS5wcm9wZXJ0eUluZm9zPy5sZW5ndGgpIHtcblx0XHRcdHR5cGVzID0gcHJvcGVydHkucHJvcGVydHlJbmZvc1xuXHRcdFx0XHQubWFwKChwcm9wTmFtZSkgPT4ge1xuXHRcdFx0XHRcdGNvbnN0IHByb3AgPSBwcm9wZXJ0aWVzLmZpbmQoKF9wcm9wZXJ0eSkgPT4gX3Byb3BlcnR5LmtleSA9PT0gcHJvcE5hbWUpO1xuXHRcdFx0XHRcdC8vYWRkIHRoZSB0eXBlQ29uZmlnIHRvIHRoZSBwcm9wZXJ0aWVzIGFzIGl0J3Mgbm90IGF2YWlsYWJsZSBpbiB0aGUgdGFibGUgdmFsdWUgaGVscFxuXHRcdFx0XHRcdGNvbnN0IHByb3BlcnR5VHlwZUNvbmZpZyA9XG5cdFx0XHRcdFx0XHRwcm9wICYmIHByb3AuZGF0YVR5cGUgJiYgIXByb3AudHlwZUNvbmZpZ1xuXHRcdFx0XHRcdFx0XHQ/IFR5cGVNYXAuZ2V0VHlwZUNvbmZpZyhwcm9wLmRhdGFUeXBlLCBwcm9wLmZvcm1hdE9wdGlvbnMsIHByb3AuY29uc3RyYWludHMpXG5cdFx0XHRcdFx0XHRcdDogbnVsbDtcblx0XHRcdFx0XHRyZXR1cm4gcHJvcGVydHlUeXBlQ29uZmlnID8gcHJvcGVydHlUeXBlQ29uZmlnLnR5cGVJbnN0YW5jZSA6IHByb3A/LnR5cGVDb25maWc/LnR5cGVJbnN0YW5jZTtcblx0XHRcdFx0fSlcblx0XHRcdFx0LmZpbHRlcigoaXRlbSkgPT4gaXRlbSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGxldCBwcm9wZXJ0eVR5cGVDb25maWc6IFR5cGVDb25maWcgfCBudWxsID0gbnVsbDtcblx0XHRcdC8vYWRkIHRoZSB0eXBlQ29uZmlnIHRvIHRoZSBwcm9wZXJ0aWVzIGFzIGl0J3Mgbm90IGF2YWlsYWJsZSBpbiB0aGUgdGFibGUgdmFsdWUgaGVscFxuXHRcdFx0aWYgKHByb3BlcnR5LmRhdGFUeXBlICYmICFwcm9wZXJ0eS50eXBlQ29uZmlnKSB7XG5cdFx0XHRcdHByb3BlcnR5VHlwZUNvbmZpZyA9IFR5cGVNYXAuZ2V0VHlwZUNvbmZpZyhwcm9wZXJ0eS5kYXRhVHlwZSwgcHJvcGVydHkuZm9ybWF0T3B0aW9ucywgcHJvcGVydHkuY29uc3RyYWludHMpO1xuXHRcdFx0fVxuXHRcdFx0aWYgKHByb3BlcnR5LnR5cGVDb25maWc/LnR5cGVJbnN0YW5jZSB8fCBwcm9wZXJ0eVR5cGVDb25maWcpIHtcblx0XHRcdFx0dHlwZXMgPSBwcm9wZXJ0eVR5cGVDb25maWcgPyBbcHJvcGVydHlUeXBlQ29uZmlnLnR5cGVJbnN0YW5jZV0gOiBbcHJvcGVydHkudHlwZUNvbmZpZz8udHlwZUluc3RhbmNlXTtcblx0XHRcdH1cblx0XHR9XG5cdFx0Y29uc3Qgc2l6ZSA9IHR5cGVzID8gVGFibGVVdGlsLmNhbGNDb2x1bW5XaWR0aCh0eXBlcywgcHJvcGVydHkubGFiZWwsIG1XaWR0aENhbGN1bGF0aW9uKSA6IG51bGw7XG5cdFx0aWYgKCFzaXplKSB7XG5cdFx0XHRMb2cuZXJyb3IoYENhbm5vdCBjb21wdXRlIHRoZSBjb2x1bW4gd2lkdGggZm9yIHByb3BlcnR5OiAke3Byb3BlcnR5LmtleX1gKTtcblx0XHR9XG5cdFx0cmV0dXJuIHNpemUgPyBwYXJzZUZsb2F0KHNpemUucmVwbGFjZShcIlJlbVwiLCBcIlwiKSkgOiAwO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBNZXRob2QgdG8gY2FsY3VsYXRlIHRoZSAgd2lkdGggb2YgYSBEYXRhRmllbGRBbm5vdGF0aW9uIG9iamVjdCBjb250YWluZWQgaW4gYSBmaWVsZEdyb3VwLlxuXHQgKiBAcGFyYW0gZGF0YUZpZWxkIERhdGFGaWVsZEFubm90YXRpb24gb2JqZWN0LlxuXHQgKiBAcGFyYW0gd2lkdGhJbmNsdWRpbmdDb2x1bW5IZWFkZXIgSW5kaWNhdGVzIGlmIHRoZSBjb2x1bW4gaGVhZGVyIHNob3VsZCBiZSBhIHBhcnQgb2YgdGhlIHdpZHRoIGNhbGN1bGF0aW9uLlxuXHQgKiBAcGFyYW0gcHJvcGVydGllcyBBcnJheSBjb250YWluaW5nIGFsbCBQcm9wZXJ0eUluZm8gb2JqZWN0cy5cblx0ICogQHBhcmFtIGNvbnZlcnRlZE1ldGFEYXRhXG5cdCAqIEBwYXJhbSBzaG93RGF0YUZpZWxkc0xhYmVsIExhYmVsIGlzIGRpc3BsYXllZCBpbnNpZGUgdGhlIGZpZWxkXG5cdCAqIEBwcml2YXRlXG5cdCAqIEBhbGlhcyBzYXAuZmUubWFjcm9zLlRhYmxlU2l6ZUhlbHBlclxuXHQgKiBAcmV0dXJucyBPYmplY3QgY29udGFpbmluZyB0aGUgd2lkdGggb2YgdGhlIGxhYmVsIGFuZCB0aGUgd2lkdGggb2YgdGhlIHByb3BlcnR5LlxuXHQgKi9cblx0Z2V0V2lkdGhGb3JEYXRhRmllbGRGb3JBbm5vdGF0aW9uOiBmdW5jdGlvbiAoXG5cdFx0ZGF0YUZpZWxkOiBEYXRhRmllbGRGb3JBbm5vdGF0aW9uIHwgRGF0YUZpZWxkRm9yQWN0aW9uIHwgRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uIHwgdW5kZWZpbmVkLFxuXHRcdHdpZHRoSW5jbHVkaW5nQ29sdW1uSGVhZGVyPzogYm9vbGVhbixcblx0XHRwcm9wZXJ0aWVzPzogRW5oYW5jZWRGRVByb3BlcnR5SW5mb1tdLFxuXHRcdGNvbnZlcnRlZE1ldGFEYXRhPzogQ29udmVydGVkTWV0YWRhdGEsXG5cdFx0c2hvd0RhdGFGaWVsZHNMYWJlbCA9IGZhbHNlXG5cdCk6IHsgbGFiZWxXaWR0aDogbnVtYmVyOyBwcm9wZXJ0eVdpZHRoOiBudW1iZXIgfSB7XG5cdFx0Y29uc3Qgb1RhcmdldGVkUHJvcGVydHkgPSBpc0Fubm90YXRpb25PZlR5cGU8RGF0YUZpZWxkRm9yQW5ub3RhdGlvbj4oZGF0YUZpZWxkLCBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JBbm5vdGF0aW9uKVxuXHRcdFx0PyAoZGF0YUZpZWxkPy5UYXJnZXQ/LiR0YXJnZXQgYXMgRGF0YVBvaW50VHlwZSB8IENvbnRhY3RUeXBlIHwgdW5kZWZpbmVkKVxuXHRcdFx0OiB1bmRlZmluZWQ7XG5cdFx0bGV0IG5Qcm9wZXJ0eVdpZHRoID0gMCxcblx0XHRcdGZMYWJlbFdpZHRoID0gMDtcblx0XHRpZiAoaXNBbm5vdGF0aW9uT2ZUeXBlPERhdGFQb2ludFR5cGU+KG9UYXJnZXRlZFByb3BlcnR5LCBVSUFubm90YXRpb25UeXBlcy5EYXRhUG9pbnRUeXBlKSAmJiBvVGFyZ2V0ZWRQcm9wZXJ0eT8uVmlzdWFsaXphdGlvbikge1xuXHRcdFx0c3dpdGNoIChvVGFyZ2V0ZWRQcm9wZXJ0eS5WaXN1YWxpemF0aW9uKSB7XG5cdFx0XHRcdGNhc2UgXCJVSS5WaXN1YWxpemF0aW9uVHlwZS9SYXRpbmdcIjpcblx0XHRcdFx0XHRjb25zdCBuYlN0YXJzID0gb1RhcmdldGVkUHJvcGVydHkuVGFyZ2V0VmFsdWU7XG5cdFx0XHRcdFx0blByb3BlcnR5V2lkdGggPSBwYXJzZUludChuYlN0YXJzLCAxMCkgKiAxLjM3NTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSBcIlVJLlZpc3VhbGl6YXRpb25UeXBlL1Byb2dyZXNzXCI6XG5cdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0blByb3BlcnR5V2lkdGggPSA1O1xuXHRcdFx0fVxuXHRcdFx0Y29uc3Qgc0xhYmVsID0gb1RhcmdldGVkUHJvcGVydHkgPyAob1RhcmdldGVkUHJvcGVydHkgYXMgeyBsYWJlbD86IHN0cmluZyB9KS5sYWJlbCA6IGRhdGFGaWVsZD8uTGFiZWw/LnRvU3RyaW5nKCkgfHwgXCJcIjtcblx0XHRcdGZMYWJlbFdpZHRoID0gc2hvd0RhdGFGaWVsZHNMYWJlbCAmJiBzTGFiZWwgPyBTaXplSGVscGVyLmdldEJ1dHRvbldpZHRoKHNMYWJlbCkgOiAwO1xuXHRcdH0gZWxzZSBpZiAoXG5cdFx0XHRjb252ZXJ0ZWRNZXRhRGF0YSAmJlxuXHRcdFx0cHJvcGVydGllcyAmJlxuXHRcdFx0aXNBbm5vdGF0aW9uT2ZUeXBlPENvbnRhY3RUeXBlPihvVGFyZ2V0ZWRQcm9wZXJ0eSwgQ29tbXVuaWNhdGlvbkFubm90YXRpb25UeXBlcy5Db250YWN0VHlwZSkgJiZcblx0XHRcdGlzUGF0aEFubm90YXRpb25FeHByZXNzaW9uKG9UYXJnZXRlZFByb3BlcnR5LmZuKVxuXHRcdCkge1xuXHRcdFx0blByb3BlcnR5V2lkdGggPSB0aGlzLmdldE1EQ0NvbHVtbldpZHRoRnJvbURhdGFGaWVsZChcblx0XHRcdFx0b1RhcmdldGVkUHJvcGVydHkuZm4uJHRhcmdldCxcblx0XHRcdFx0cHJvcGVydGllcyxcblx0XHRcdFx0Y29udmVydGVkTWV0YURhdGEsXG5cdFx0XHRcdHdpZHRoSW5jbHVkaW5nQ29sdW1uSGVhZGVyXG5cdFx0XHQpO1xuXHRcdH1cblx0XHRyZXR1cm4geyBsYWJlbFdpZHRoOiBmTGFiZWxXaWR0aCwgcHJvcGVydHlXaWR0aDogblByb3BlcnR5V2lkdGggfTtcblx0fSxcblxuXHQvKipcblx0ICogTWV0aG9kIHRvIGNhbGN1bGF0ZSB0aGUgd2lkdGggb2YgYSBEYXRhRmllbGQgb2JqZWN0LlxuXHQgKiBAcGFyYW0gZGF0YUZpZWxkIERhdGFGaWVsZEFubm90YXRpb24gb2JqZWN0LlxuXHQgKiBAcGFyYW0gc2hvd0RhdGFGaWVsZHNMYWJlbCBMYWJlbCBpcyBkaXNwbGF5ZWQgaW5zaWRlIHRoZSBmaWVsZC5cblx0ICogQHBhcmFtIHByb3BlcnRpZXMgQXJyYXkgY29udGFpbmluZyBhbGwgUHJvcGVydHlJbmZvIG9iamVjdHMuXG5cdCAqIEBwYXJhbSBjb252ZXJ0ZWRNZXRhRGF0YSBDb250ZXh0IE9iamVjdCBvZiB0aGUgcGFyZW50IHByb3BlcnR5LlxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAYWxpYXMgc2FwLmZlLm1hY3Jvcy5UYWJsZVNpemVIZWxwZXJcblx0ICogQHJldHVybnMge29iamVjdH0gT2JqZWN0IGNvbnRhaW5pbmcgdGhlIHdpZHRoIG9mIHRoZSBsYWJlbCBhbmQgdGhlIHdpZHRoIG9mIHRoZSBwcm9wZXJ0eS5cblx0ICovXG5cblx0Z2V0V2lkdGhGb3JEYXRhRmllbGQ6IGZ1bmN0aW9uIChcblx0XHRkYXRhRmllbGQ6IERhdGFGaWVsZCxcblx0XHRzaG93RGF0YUZpZWxkc0xhYmVsOiBib29sZWFuLFxuXHRcdHByb3BlcnRpZXM6IEVuaGFuY2VkRkVQcm9wZXJ0eUluZm9bXSxcblx0XHRjb252ZXJ0ZWRNZXRhRGF0YTogQ29udmVydGVkTWV0YWRhdGEsXG5cdFx0d2lkdGhJbmNsdWRpbmdDb2x1bW5IZWFkZXI6IGJvb2xlYW5cblx0KTogeyBsYWJlbFdpZHRoOiBudW1iZXI7IHByb3BlcnR5V2lkdGg6IG51bWJlciB9IHtcblx0XHRjb25zdCBvVGFyZ2V0ZWRQcm9wZXJ0eSA9IGRhdGFGaWVsZC5WYWx1ZT8uJHRhcmdldCxcblx0XHRcdG9UZXh0QXJyYW5nZW1lbnRUYXJnZXQgPSBvVGFyZ2V0ZWRQcm9wZXJ0eT8uYW5ub3RhdGlvbnM/LkNvbW1vbj8uVGV4dCxcblx0XHRcdGRpc3BsYXlNb2RlID0gZ2V0RGlzcGxheU1vZGUoZGF0YUZpZWxkLlZhbHVlPy4kdGFyZ2V0KTtcblxuXHRcdGxldCBuUHJvcGVydHlXaWR0aCA9IDAsXG5cdFx0XHRmTGFiZWxXaWR0aCA9IDA7XG5cdFx0aWYgKG9UYXJnZXRlZFByb3BlcnR5KSB7XG5cdFx0XHRzd2l0Y2ggKGRpc3BsYXlNb2RlKSB7XG5cdFx0XHRcdGNhc2UgXCJEZXNjcmlwdGlvblwiOlxuXHRcdFx0XHRcdG5Qcm9wZXJ0eVdpZHRoID1cblx0XHRcdFx0XHRcdHRoaXMuZ2V0TURDQ29sdW1uV2lkdGhGcm9tRGF0YUZpZWxkKFxuXHRcdFx0XHRcdFx0XHRvVGV4dEFycmFuZ2VtZW50VGFyZ2V0LiR0YXJnZXQsXG5cdFx0XHRcdFx0XHRcdHByb3BlcnRpZXMsXG5cdFx0XHRcdFx0XHRcdGNvbnZlcnRlZE1ldGFEYXRhLFxuXHRcdFx0XHRcdFx0XHR3aWR0aEluY2x1ZGluZ0NvbHVtbkhlYWRlclxuXHRcdFx0XHRcdFx0KSAtIDE7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgXCJEZXNjcmlwdGlvblZhbHVlXCI6XG5cdFx0XHRcdGNhc2UgXCJWYWx1ZURlc2NyaXB0aW9uXCI6XG5cdFx0XHRcdGNhc2UgXCJWYWx1ZVwiOlxuXHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdG5Qcm9wZXJ0eVdpZHRoID1cblx0XHRcdFx0XHRcdHRoaXMuZ2V0TURDQ29sdW1uV2lkdGhGcm9tRGF0YUZpZWxkKG9UYXJnZXRlZFByb3BlcnR5LCBwcm9wZXJ0aWVzLCBjb252ZXJ0ZWRNZXRhRGF0YSwgd2lkdGhJbmNsdWRpbmdDb2x1bW5IZWFkZXIpIC1cblx0XHRcdFx0XHRcdDE7XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBzTGFiZWwgPSBkYXRhRmllbGQuTGFiZWwgPyBkYXRhRmllbGQuTGFiZWwgOiBvVGFyZ2V0ZWRQcm9wZXJ0eS5sYWJlbDtcblx0XHRcdGZMYWJlbFdpZHRoID0gc2hvd0RhdGFGaWVsZHNMYWJlbCAmJiBzTGFiZWwgPyBTaXplSGVscGVyLmdldEJ1dHRvbldpZHRoKHNMYWJlbCkgOiAwO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRMb2cuZXJyb3IoYENhbm5vdCBjb21wdXRlIHdpZHRoIGZvciB0eXBlIG9iamVjdDogJHtkYXRhRmllbGQuJFR5cGV9YCk7XG5cdFx0fVxuXHRcdHJldHVybiB7IGxhYmVsV2lkdGg6IGZMYWJlbFdpZHRoLCBwcm9wZXJ0eVdpZHRoOiBuUHJvcGVydHlXaWR0aCB9O1xuXHR9XG59O1xuXG5leHBvcnQgZGVmYXVsdCBUYWJsZVNpemVIZWxwZXI7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7RUFxQkEsTUFBTUEsZUFBZSxHQUFHO0lBQ3ZCO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0lBQ0NDLDhCQUE4QixFQUFFLFNBQUFBLENBQy9CQyxTQUEyQyxFQUMzQ0MsVUFBb0MsRUFDcENDLGlCQUFvQyxFQUUzQjtNQUFBLElBRFRDLDBCQUEwQixHQUFBQyxTQUFBLENBQUFDLE1BQUEs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
148
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJUYWJsZVNpemVIZWxwZXIiLCJnZXRNRENDb2x1bW5XaWR0aEZyb21EYXRhRmllbGQiLCJkYXRhRmllbGQiLCJwcm9wZXJ0aWVzIiwiY29udmVydGVkTWV0YURhdGEiLCJ3aWR0aEluY2x1ZGluZ0NvbHVtbkhlYWRlciIsImFyZ3VtZW50cyIsImxlbmd0aCIsInVuZGVmaW5lZCIsInByb3BlcnR5IiwiZmluZCIsInByb3AiLCJhbm5vdGF0aW9uUGF0aCIsInJlc29sdmVQYXRoIiwidGFyZ2V0IiwiZnVsbHlRdWFsaWZpZWROYW1lIiwiZ2V0TURDQ29sdW1uV2lkdGhGcm9tUHJvcGVydHkiLCJpc1NvcnRhYmxlQ29sdW1uIiwiaXNDb2x1bW5SZXF1aXJlZCIsIm1XaWR0aENhbGN1bGF0aW9uIiwiT2JqZWN0IiwiYXNzaWduIiwiaGVhZGVyR2FwIiwiZ2FwIiwidHJ1bmNhdGVMYWJlbCIsImV4Y2x1ZGVQcm9wZXJ0aWVzIiwicmVxdWlyZWQiLCJ2aXN1YWxTZXR0aW5ncyIsIndpZHRoQ2FsY3VsYXRpb24iLCJ0eXBlcyIsInByb3BlcnR5SW5mb3MiLCJtYXAiLCJwcm9wTmFtZSIsIl9wcm9wZXJ0eSIsImtleSIsInByb3BlcnR5VHlwZUNvbmZpZyIsImRhdGFUeXBlIiwidHlwZUNvbmZpZyIsIlR5cGVNYXAiLCJnZXRUeXBlQ29uZmlnIiwiZm9ybWF0T3B0aW9ucyIsImNvbnN0cmFpbnRzIiwidHlwZUluc3RhbmNlIiwiZmlsdGVyIiwiaXRlbSIsInNpemUiLCJUYWJsZVV0aWwiLCJjYWxjQ29sdW1uV2lkdGgiLCJsYWJlbCIsIkxvZyIsImVycm9yIiwicGFyc2VGbG9hdCIsInJlcGxhY2UiLCJnZXRXaWR0aEZvckRhdGFGaWVsZEZvckFubm90YXRpb24iLCJzaG93RGF0YUZpZWxkc0xhYmVsIiwib1RhcmdldGVkUHJvcGVydHkiLCJpc0Fubm90YXRpb25PZlR5cGUiLCJUYXJnZXQiLCIkdGFyZ2V0IiwiblByb3BlcnR5V2lkdGgiLCJmTGFiZWxXaWR0aCIsIlZpc3VhbGl6YXRpb24iLCJuYlN0YXJzIiwiVGFyZ2V0VmFsdWUiLCJwYXJzZUludCIsInNMYWJlbCIsIkxhYmVsIiwidG9TdHJpbmciLCJTaXplSGVscGVyIiwiZ2V0QnV0dG9uV2lkdGgiLCJpc1BhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbiIsImZuIiwibGFiZWxXaWR0aCIsInByb3BlcnR5V2lkdGgiLCJnZXRXaWR0aEZvckRhdGFGaWVsZCIsImRhdGFNb2RlbE9iamVjdFBhdGgiLCJWYWx1ZSIsIm9UZXh0QXJyYW5nZW1lbnRUYXJnZXQiLCJhbm5vdGF0aW9ucyIsIkNvbW1vbiIsIlRleHQiLCJkaXNwbGF5TW9kZSIsImdldERpc3BsYXlNb2RlIiwidGFyZ2V0RW50aXR5VHlwZSIsIiRUeXBlIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJUYWJsZVNpemVIZWxwZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBQcm9wZXJ0eSwgU2VydmljZU9iamVjdCB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlc1wiO1xuaW1wb3J0IHR5cGUgeyBDb252ZXJ0ZWRNZXRhZGF0YSB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy9FZG1cIjtcbmltcG9ydCB0eXBlIHsgQ29udGFjdFR5cGUgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL0NvbW11bmljYXRpb25cIjtcbmltcG9ydCB7IENvbW11bmljYXRpb25Bbm5vdGF0aW9uVHlwZXMgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL0NvbW11bmljYXRpb25cIjtcbmltcG9ydCB0eXBlIHtcblx0RGF0YUZpZWxkLFxuXHREYXRhRmllbGRBYnN0cmFjdFR5cGVzLFxuXHREYXRhRmllbGRGb3JBY3Rpb24sXG5cdERhdGFGaWVsZEZvckFubm90YXRpb24sXG5cdERhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbixcblx0RGF0YVBvaW50VHlwZVxufSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL1VJXCI7XG5pbXBvcnQgeyBVSUFubm90YXRpb25UeXBlcyB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvVUlcIjtcbmltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IFNpemVIZWxwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvU2l6ZUhlbHBlclwiO1xuaW1wb3J0IHsgaXNBbm5vdGF0aW9uT2ZUeXBlLCBpc1BhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1R5cGVHdWFyZHNcIjtcbmltcG9ydCB0eXBlIHsgRGF0YU1vZGVsT2JqZWN0UGF0aCB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0RhdGFNb2RlbFBhdGhIZWxwZXJcIjtcbmltcG9ydCB7IGdldERpc3BsYXlNb2RlIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvRGlzcGxheU1vZGVGb3JtYXR0ZXJcIjtcbmltcG9ydCB0eXBlIHsgRW5oYW5jZWRGRVByb3BlcnR5SW5mbyB9IGZyb20gXCJzYXAvZmUvbWFjcm9zL3RhYmxlL1RhYmxlQVBJXCI7XG5pbXBvcnQgVGFibGVVdGlsIGZyb20gXCJzYXAvbS90YWJsZS9VdGlsXCI7XG5pbXBvcnQgdHlwZSBUeXBlQ29uZmlnIGZyb20gXCJzYXAvdWkvbWRjL1R5cGVDb25maWdcIjtcbmltcG9ydCBUeXBlTWFwIGZyb20gXCJzYXAvdWkvbWRjL29kYXRhL3Y0L1R5cGVNYXBcIjtcbmNvbnN0IFRhYmxlU2l6ZUhlbHBlciA9IHtcblx0LyoqXG5cdCAqIE1ldGhvZCB0byBjYWxjdWxhdGUgdGhlIHdpZHRoIG9mIHRoZSBNRENDb2x1bW4uXG5cdCAqIEBwYXJhbSBkYXRhRmllbGQgVGhlIFByb3BlcnR5IG9yIFByb3BlcnR5SW5mbyBPYmplY3QgZm9yIHdoaWNoIHRoZSB3aWR0aCB3aWxsIGJlIGNhbGN1bGF0ZWQuXG5cdCAqIEBwYXJhbSBwcm9wZXJ0aWVzIEFuIGFycmF5IGNvbnRhaW5pbmcgYWxsIHByb3BlcnR5IGRlZmluaXRpb25zIChvcHRpb25hbClcblx0ICogQHBhcmFtIGNvbnZlcnRlZE1ldGFEYXRhXG5cdCAqIEBwYXJhbSB3aWR0aEluY2x1ZGluZ0NvbHVtbkhlYWRlciBJbmRpY2F0ZXMgaWYgdGhlIGxhYmVsIHNob3VsZCBiZSBhIHBhcnQgb2YgdGhlIHdpZHRoIGNhbGN1bGF0aW9uXG5cdCAqIEBwcml2YXRlXG5cdCAqIEBhbGlhcyBzYXAuZmUubWFjcm9zLlRhYmxlU2l6ZUhlbHBlclxuXHQgKiBAcmV0dXJucyBUaGUgd2lkdGggb2YgdGhlIGNvbHVtbi5cblx0ICovXG5cdGdldE1EQ0NvbHVtbldpZHRoRnJvbURhdGFGaWVsZDogZnVuY3Rpb24gKFxuXHRcdGRhdGFGaWVsZDogRGF0YUZpZWxkIHwgUHJvcGVydHkgfCB1bmRlZmluZWQsXG5cdFx0cHJvcGVydGllczogRW5oYW5jZWRGRVByb3BlcnR5SW5mb1tdLFxuXHRcdGNvbnZlcnRlZE1ldGFEYXRhOiBDb252ZXJ0ZWRNZXRhZGF0YSxcblx0XHR3aWR0aEluY2x1ZGluZ0NvbHVtbkhlYWRlciA9IGZhbHNlXG5cdCk6IG51bWJlciB7XG5cdFx0Y29uc3QgcHJvcGVydHkgPSBwcm9wZXJ0aWVzLmZpbmQoXG5cdFx0XHQocHJvcCkgPT5cblx0XHRcdFx0cHJvcC5hbm5vdGF0aW9uUGF0aCAmJlxuXHRcdFx0XHRjb252ZXJ0ZWRNZXRhRGF0YS5yZXNvbHZlUGF0aDxTZXJ2aWNlT2JqZWN0Pihwcm9wLmFubm90YXRpb25QYXRoKT8udGFyZ2V0Py5mdWxseVF1YWxpZmllZE5hbWUgPT09XG5cdFx0XHRcdFx0ZGF0YUZpZWxkPy5mdWxseVF1YWxpZmllZE5hbWVcblx0XHQpO1xuXHRcdHJldHVybiBwcm9wZXJ0eSA/IHRoaXMuZ2V0TURDQ29sdW1uV2lkdGhGcm9tUHJvcGVydHkocHJvcGVydHksIHByb3BlcnRpZXMsIHdpZHRoSW5jbHVkaW5nQ29sdW1uSGVhZGVyKSA6IDA7XG5cdH0sXG5cdC8qKlxuXHQgKiAgTWV0aG9kIHRvIGNhbGN1bGF0ZSB0aGUgd2lkdGggb2YgdGhlIE1EQ0NvbHVtbi5cblx0ICogQHBhcmFtIHByb3BlcnR5IFRoZSBQcm9wZXJ0eUluZm8gb2JqZWN0IGZvciB3aGljaCB0aGUgd2lkdGggaXMgY2FsY3VsYXRlZFxuXHQgKiBAcGFyYW0gcHJvcGVydGllcyAgQW4gYXJyYXkgY29udGFpbmluZyBhbGwgcHJvcGVydHkgZGVmaW5pdGlvbnMgKG9wdGlvbmFsKVxuXHQgKiBAcGFyYW0gd2lkdGhJbmNsdWRpbmdDb2x1bW5IZWFkZXIgSW5kaWNhdGVzIGlmIHRoZSBsYWJlbCBpcyBwYXJ0IG9mIHRoZSB3aWR0aCBjYWxjdWxhdGlvblxuXHQgKiBAcGFyYW0gaXNTb3J0YWJsZUNvbHVtbiBJbmRpY2F0ZXMgaWYgdGhlIGNvbHVtbiBpcyBzb3J0YWJsZVxuXHQgKiBAcGFyYW0gaXNDb2x1bW5SZXF1aXJlZCBJbmRpY2F0ZXMgaWYgdGhlIGNvbHVtbiBpcyByZXF1aXJlZFxuXHQgKiBAcmV0dXJucyBUaGUgd2lkdGggb2YgdGhlIGNvbHVtbi5cblx0ICovXG5cdGdldE1EQ0NvbHVtbldpZHRoRnJvbVByb3BlcnR5OiBmdW5jdGlvbiAoXG5cdFx0cHJvcGVydHk6IEVuaGFuY2VkRkVQcm9wZXJ0eUluZm8sXG5cdFx0cHJvcGVydGllczogRW5oYW5jZWRGRVByb3BlcnR5SW5mb1tdLFxuXHRcdHdpZHRoSW5jbHVkaW5nQ29sdW1uSGVhZGVyID0gZmFsc2UsXG5cdFx0aXNTb3J0YWJsZUNvbHVtbiA9IGZhbHNlLFxuXHRcdGlzQ29sdW1uUmVxdWlyZWQgPSBmYWxzZVxuXHQpOiBudW1iZXIge1xuXHRcdGNvbnN0IG1XaWR0aENhbGN1bGF0aW9uID0gT2JqZWN0LmFzc2lnbihcblx0XHRcdHtcblx0XHRcdFx0aGVhZGVyR2FwOiB3aWR0aEluY2x1ZGluZ0NvbHVtbkhlYWRlciAmJiBpc1NvcnRhYmxlQ29sdW1uLFxuXHRcdFx0XHRnYXA6IDAsXG5cdFx0XHRcdHRydW5jYXRlTGFiZWw6ICF3aWR0aEluY2x1ZGluZ0NvbHVtbkhlYWRlcixcblx0XHRcdFx0ZXhjbHVkZVByb3BlcnRpZXM6IFtdLFxuXHRcdFx0XHRyZXF1aXJlZDogaXNDb2x1bW5SZXF1aXJlZFxuXHRcdFx0fSxcblx0XHRcdHByb3BlcnR5LnZpc3VhbFNldHRpbmdzPy53aWR0aENhbGN1bGF0aW9uXG5cdFx0KTtcblx0XHRsZXQgdHlwZXM7XG5cdFx0aWYgKHByb3BlcnR5LnByb3BlcnR5SW5mb3M/Lmxlbmd0aCkge1xuXHRcdFx0dHlwZXMgPSBwcm9wZXJ0eS5wcm9wZXJ0eUluZm9zXG5cdFx0XHRcdC5tYXAoKHByb3BOYW1lKSA9PiB7XG5cdFx0XHRcdFx0Y29uc3QgcHJvcCA9IHByb3BlcnRpZXMuZmluZCgoX3Byb3BlcnR5KSA9PiBfcHJvcGVydHkua2V5ID09PSBwcm9wTmFtZSk7XG5cdFx0XHRcdFx0Ly9hZGQgdGhlIHR5cGVDb25maWcgdG8gdGhlIHByb3BlcnRpZXMgYXMgaXQncyBub3QgYXZhaWxhYmxlIGluIHRoZSB0YWJsZSB2YWx1ZSBoZWxwXG5cdFx0XHRcdFx0Y29uc3QgcHJvcGVydHlUeXBlQ29uZmlnID1cblx0XHRcdFx0XHRcdHByb3AgJiYgcHJvcC5kYXRhVHlwZSAmJiAhcHJvcC50eXBlQ29uZmlnXG5cdFx0XHRcdFx0XHRcdD8gVHlwZU1hcC5nZXRUeXBlQ29uZmlnKHByb3AuZGF0YVR5cGUsIHByb3AuZm9ybWF0T3B0aW9ucywgcHJvcC5jb25zdHJhaW50cylcblx0XHRcdFx0XHRcdFx0OiBudWxsO1xuXHRcdFx0XHRcdHJldHVybiBwcm9wZXJ0eVR5cGVDb25maWcgPyBwcm9wZXJ0eVR5cGVDb25maWcudHlwZUluc3RhbmNlIDogcHJvcD8udHlwZUNvbmZpZz8udHlwZUluc3RhbmNlO1xuXHRcdFx0XHR9KVxuXHRcdFx0XHQuZmlsdGVyKChpdGVtKSA9PiBpdGVtKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0bGV0IHByb3BlcnR5VHlwZUNvbmZpZzogVHlwZUNvbmZpZyB8IG51bGwgPSBudWxsO1xuXHRcdFx0Ly9hZGQgdGhlIHR5cGVDb25maWcgdG8gdGhlIHByb3BlcnRpZXMgYXMgaXQncyBub3QgYXZhaWxhYmxlIGluIHRoZSB0YWJsZSB2YWx1ZSBoZWxwXG5cdFx0XHRpZiAocHJvcGVydHkuZGF0YVR5cGUgJiYgIXByb3BlcnR5LnR5cGVDb25maWcpIHtcblx0XHRcdFx0cHJvcGVydHlUeXBlQ29uZmlnID0gVHlwZU1hcC5nZXRUeXBlQ29uZmlnKHByb3BlcnR5LmRhdGFUeXBlLCBwcm9wZXJ0eS5mb3JtYXRPcHRpb25zLCBwcm9wZXJ0eS5jb25zdHJhaW50cyk7XG5cdFx0XHR9XG5cdFx0XHRpZiAocHJvcGVydHkudHlwZUNvbmZpZz8udHlwZUluc3RhbmNlIHx8IHByb3BlcnR5VHlwZUNvbmZpZykge1xuXHRcdFx0XHR0eXBlcyA9IHByb3BlcnR5VHlwZUNvbmZpZyA/IFtwcm9wZXJ0eVR5cGVDb25maWcudHlwZUluc3RhbmNlXSA6IFtwcm9wZXJ0eS50eXBlQ29uZmlnPy50eXBlSW5zdGFuY2VdO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRjb25zdCBzaXplID0gdHlwZXMgPyBUYWJsZVV0aWwuY2FsY0NvbHVtbldpZHRoKHR5cGVzLCBwcm9wZXJ0eS5sYWJlbCwgbVdpZHRoQ2FsY3VsYXRpb24pIDogbnVsbDtcblx0XHRpZiAoIXNpemUpIHtcblx0XHRcdExvZy5lcnJvcihgQ2Fubm90IGNvbXB1dGUgdGhlIGNvbHVtbiB3aWR0aCBmb3IgcHJvcGVydHk6ICR7cHJvcGVydHkua2V5fWApO1xuXHRcdH1cblx0XHRyZXR1cm4gc2l6ZSA/IHBhcnNlRmxvYXQoc2l6ZS5yZXBsYWNlKFwiUmVtXCIsIFwiXCIpKSA6IDA7XG5cdH0sXG5cdC8qKlxuXHQgKiBNZXRob2QgdG8gY2FsY3VsYXRlIHRoZSAgd2lkdGggb2YgYSBEYXRhRmllbGRBbm5vdGF0aW9uIG9iamVjdCBjb250YWluZWQgaW4gYSBmaWVsZEdyb3VwLlxuXHQgKiBAcGFyYW0gZGF0YUZpZWxkIERhdGFGaWVsZEFubm90YXRpb24gb2JqZWN0LlxuXHQgKiBAcGFyYW0gd2lkdGhJbmNsdWRpbmdDb2x1bW5IZWFkZXIgSW5kaWNhdGVzIGlmIHRoZSBjb2x1bW4gaGVhZGVyIHNob3VsZCBiZSBhIHBhcnQgb2YgdGhlIHdpZHRoIGNhbGN1bGF0aW9uLlxuXHQgKiBAcGFyYW0gcHJvcGVydGllcyBBcnJheSBjb250YWluaW5nIGFsbCBQcm9wZXJ0eUluZm8gb2JqZWN0cy5cblx0ICogQHBhcmFtIGNvbnZlcnRlZE1ldGFEYXRhXG5cdCAqIEBwYXJhbSBzaG93RGF0YUZpZWxkc0xhYmVsIExhYmVsIGlzIGRpc3BsYXllZCBpbnNpZGUgdGhlIGZpZWxkXG5cdCAqIEBwcml2YXRlXG5cdCAqIEBhbGlhcyBzYXAuZmUubWFjcm9zLlRhYmxlU2l6ZUhlbHBlclxuXHQgKiBAcmV0dXJucyBPYmplY3QgY29udGFpbmluZyB0aGUgd2lkdGggb2YgdGhlIGxhYmVsIGFuZCB0aGUgd2lkdGggb2YgdGhlIHByb3BlcnR5LlxuXHQgKi9cblx0Z2V0V2lkdGhGb3JEYXRhRmllbGRGb3JBbm5vdGF0aW9uOiBmdW5jdGlvbiAoXG5cdFx0ZGF0YUZpZWxkOiBEYXRhRmllbGRGb3JBbm5vdGF0aW9uIHwgRGF0YUZpZWxkRm9yQWN0aW9uIHwgRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uIHwgdW5kZWZpbmVkLFxuXHRcdHdpZHRoSW5jbHVkaW5nQ29sdW1uSGVhZGVyPzogYm9vbGVhbixcblx0XHRwcm9wZXJ0aWVzPzogRW5oYW5jZWRGRVByb3BlcnR5SW5mb1tdLFxuXHRcdGNvbnZlcnRlZE1ldGFEYXRhPzogQ29udmVydGVkTWV0YWRhdGEsXG5cdFx0c2hvd0RhdGFGaWVsZHNMYWJlbCA9IGZhbHNlXG5cdCk6IHsgbGFiZWxXaWR0aDogbnVtYmVyOyBwcm9wZXJ0eVdpZHRoOiBudW1iZXIgfSB7XG5cdFx0Y29uc3Qgb1RhcmdldGVkUHJvcGVydHkgPSBpc0Fubm90YXRpb25PZlR5cGU8RGF0YUZpZWxkRm9yQW5ub3RhdGlvbj4oZGF0YUZpZWxkLCBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JBbm5vdGF0aW9uKVxuXHRcdFx0PyAoZGF0YUZpZWxkPy5UYXJnZXQ/LiR0YXJnZXQgYXMgRGF0YVBvaW50VHlwZSB8IENvbnRhY3RUeXBlIHwgdW5kZWZpbmVkKVxuXHRcdFx0OiB1bmRlZmluZWQ7XG5cdFx0bGV0IG5Qcm9wZXJ0eVdpZHRoID0gMCxcblx0XHRcdGZMYWJlbFdpZHRoID0gMDtcblx0XHRpZiAoaXNBbm5vdGF0aW9uT2ZUeXBlPERhdGFQb2ludFR5cGU+KG9UYXJnZXRlZFByb3BlcnR5LCBVSUFubm90YXRpb25UeXBlcy5EYXRhUG9pbnRUeXBlKSAmJiBvVGFyZ2V0ZWRQcm9wZXJ0eT8uVmlzdWFsaXphdGlvbikge1xuXHRcdFx0c3dpdGNoIChvVGFyZ2V0ZWRQcm9wZXJ0eS5WaXN1YWxpemF0aW9uKSB7XG5cdFx0XHRcdGNhc2UgXCJVSS5WaXN1YWxpemF0aW9uVHlwZS9SYXRpbmdcIjpcblx0XHRcdFx0XHRjb25zdCBuYlN0YXJzID0gb1RhcmdldGVkUHJvcGVydHkuVGFyZ2V0VmFsdWU7XG5cdFx0XHRcdFx0blByb3BlcnR5V2lkdGggPSBwYXJzZUludChuYlN0YXJzLCAxMCkgKiAxLjM3NTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSBcIlVJLlZpc3VhbGl6YXRpb25UeXBlL1Byb2dyZXNzXCI6XG5cdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0blByb3BlcnR5V2lkdGggPSA1O1xuXHRcdFx0fVxuXHRcdFx0Y29uc3Qgc0xhYmVsID0gb1RhcmdldGVkUHJvcGVydHkgPyAob1RhcmdldGVkUHJvcGVydHkgYXMgeyBsYWJlbD86IHN0cmluZyB9KS5sYWJlbCA6IGRhdGFGaWVsZD8uTGFiZWw/LnRvU3RyaW5nKCkgfHwgXCJcIjtcblx0XHRcdGZMYWJlbFdpZHRoID0gc2hvd0RhdGFGaWVsZHNMYWJlbCAmJiBzTGFiZWwgPyBTaXplSGVscGVyLmdldEJ1dHRvbldpZHRoKHNMYWJlbCkgOiAwO1xuXHRcdH0gZWxzZSBpZiAoXG5cdFx0XHRjb252ZXJ0ZWRNZXRhRGF0YSAmJlxuXHRcdFx0cHJvcGVydGllcyAmJlxuXHRcdFx0aXNBbm5vdGF0aW9uT2ZUeXBlPENvbnRhY3RUeXBlPihvVGFyZ2V0ZWRQcm9wZXJ0eSwgQ29tbXVuaWNhdGlvbkFubm90YXRpb25UeXBlcy5Db250YWN0VHlwZSkgJiZcblx0XHRcdGlzUGF0aEFubm90YXRpb25FeHByZXNzaW9uKG9UYXJnZXRlZFByb3BlcnR5LmZuKVxuXHRcdCkge1xuXHRcdFx0blByb3BlcnR5V2lkdGggPSB0aGlzLmdldE1EQ0NvbHVtbldpZHRoRnJvbURhdGFGaWVsZChcblx0XHRcdFx0b1RhcmdldGVkUHJvcGVydHkuZm4uJHRhcmdldCxcblx0XHRcdFx0cHJvcGVydGllcyxcblx0XHRcdFx0Y29udmVydGVkTWV0YURhdGEsXG5cdFx0XHRcdHdpZHRoSW5jbHVkaW5nQ29sdW1uSGVhZGVyXG5cdFx0XHQpO1xuXHRcdH1cblx0XHRyZXR1cm4geyBsYWJlbFdpZHRoOiBmTGFiZWxXaWR0aCwgcHJvcGVydHlXaWR0aDogblByb3BlcnR5V2lkdGggfTtcblx0fSxcblx0LyoqXG5cdCAqIE1ldGhvZCB0byBjYWxjdWxhdGUgdGhlIHdpZHRoIG9mIGEgRGF0YUZpZWxkIG9iamVjdC5cblx0ICogQHBhcmFtIGRhdGFGaWVsZCBEYXRhRmllbGRBbm5vdGF0aW9uIG9iamVjdC5cblx0ICogQHBhcmFtIHNob3dEYXRhRmllbGRzTGFiZWwgTGFiZWwgaXMgZGlzcGxheWVkIGluc2lkZSB0aGUgZmllbGQuXG5cdCAqIEBwYXJhbSBwcm9wZXJ0aWVzIEFycmF5IGNvbnRhaW5pbmcgYWxsIFByb3BlcnR5SW5mbyBvYmplY3RzLlxuXHQgKiBAcGFyYW0gY29udmVydGVkTWV0YURhdGEgQ29udGV4dCBPYmplY3Qgb2YgdGhlIHBhcmVudCBwcm9wZXJ0eS5cblx0ICogQHByaXZhdGVcblx0ICogQGFsaWFzIHNhcC5mZS5tYWNyb3MuVGFibGVTaXplSGVscGVyXG5cdCAqIEByZXR1cm5zIHtvYmplY3R9IE9iamVjdCBjb250YWluaW5nIHRoZSB3aWR0aCBvZiB0aGUgbGFiZWwgYW5kIHRoZSB3aWR0aCBvZiB0aGUgcHJvcGVydHkuXG5cdCAqL1xuXHRnZXRXaWR0aEZvckRhdGFGaWVsZDogZnVuY3Rpb24gKFxuXHRcdGRhdGFGaWVsZDogRGF0YUZpZWxkLFxuXHRcdHByb3BlcnRpZXM6IEVuaGFuY2VkRkVQcm9wZXJ0eUluZm9bXSxcblx0XHRjb252ZXJ0ZWRNZXRhRGF0YTogQ29udmVydGVkTWV0YWRhdGEsXG5cdFx0d2lkdGhJbmNsdWRpbmdDb2x1bW5IZWFkZXI6IGJvb2xlYW4sXG5cdFx0ZGF0YU1vZGVsT2JqZWN0UGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aDxQcm9wZXJ0eSB8IERhdGFGaWVsZEFic3RyYWN0VHlwZXMgfCBEYXRhUG9pbnRUeXBlPixcblx0XHRzaG93RGF0YUZpZWxkc0xhYmVsID0gZmFsc2Vcblx0KTogeyBsYWJlbFdpZHRoOiBudW1iZXI7IHByb3BlcnR5V2lkdGg6IG51bWJlciB9IHtcblx0XHRjb25zdCBvVGFyZ2V0ZWRQcm9wZXJ0eSA9IGRhdGFGaWVsZC5WYWx1ZT8uJHRhcmdldCxcblx0XHRcdG9UZXh0QXJyYW5nZW1lbnRUYXJnZXQgPSBvVGFyZ2V0ZWRQcm9wZXJ0eT8uYW5ub3RhdGlvbnM/LkNvbW1vbj8uVGV4dCxcblx0XHRcdGRpc3BsYXlNb2RlID0gZ2V0RGlzcGxheU1vZGUoZGF0YUZpZWxkLlZhbHVlPy4kdGFyZ2V0LCBkYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldEVudGl0eVR5cGUpO1xuXHRcdGxldCBuUHJvcGVydHlXaWR0aCA9IDAsXG5cdFx0XHRmTGFiZWxXaWR0aCA9IDA7XG5cdFx0aWYgKG9UYXJnZXRlZFByb3BlcnR5KSB7XG5cdFx0XHRzd2l0Y2ggKGRpc3BsYXlNb2RlKSB7XG5cdFx0XHRcdGNhc2UgXCJEZXNjcmlwdGlvblwiOlxuXHRcdFx0XHRcdG5Qcm9wZXJ0eVdpZHRoID1cblx0XHRcdFx0XHRcdHRoaXMuZ2V0TURDQ29sdW1uV2lkdGhGcm9tRGF0YUZpZWxkKFxuXHRcdFx0XHRcdFx0XHRvVGV4dEFycmFuZ2VtZW50VGFyZ2V0LiR0YXJnZXQsXG5cdFx0XHRcdFx0XHRcdHByb3BlcnRpZXMsXG5cdFx0XHRcdFx0XHRcdGNvbnZlcnRlZE1ldGFEYXRhLFxuXHRcdFx0XHRcdFx0XHR3aWR0aEluY2x1ZGluZ0NvbHVtbkhlYWRlclxuXHRcdFx0XHRcdFx0KSAtIDE7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgXCJEZXNjcmlwdGlvblZhbHVlXCI6XG5cdFx0XHRcdGNhc2UgXCJWYWx1ZURlc2NyaXB0aW9uXCI6XG5cdFx0XHRcdGNhc2UgXCJWYWx1ZVwiOlxuXHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdG5Qcm9wZXJ0eVdpZHRoID1cblx0XHRcdFx0XHRcdHRoaXMuZ2V0TURDQ29sdW1uV2lkdGhGcm9tRGF0YUZpZWxkKG9UYXJnZXRlZFByb3BlcnR5LCBwcm9wZXJ0aWVzLCBjb252ZXJ0ZWRNZXRhRGF0YSwgd2lkdGhJbmNsdWRpbmdDb2x1bW5IZWFkZXIpIC1cblx0XHRcdFx0XHRcdDE7XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBzTGFiZWwgPSBkYXRhRmllbGQuTGFiZWwgPyBkYXRhRmllbGQuTGFiZWwgOiBvVGFyZ2V0ZWRQcm9wZXJ0eS5sYWJlbDtcblx0XHRcdGZMYWJlbFdpZHRoID0gc2hvd0RhdGFGaWVsZHNMYWJlbCAmJiBzTGFiZWwgPyBTaXplSGVscGVyLmdldEJ1dHRvbldpZHRoKHNMYWJlbCkgOiAwO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRMb2cuZXJyb3IoYENhbm5vdCBjb21wdXRlIHdpZHRoIGZvciB0eXBlIG9iamVjdDogJHtkYXRhRmllbGQuJFR5cGV9YCk7XG5cdFx0fVxuXHRcdHJldHVybiB7IGxhYmVsV2lkdGg6IGZMYWJlbFdpZHRoLCBwcm9wZXJ0eVdpZHRoOiBuUHJvcGVydHlXaWR0aCB9O1xuXHR9XG59O1xuZXhwb3J0IGRlZmF1bHQgVGFibGVTaXplSGVscGVyO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O0VBc0JBLE1BQU1BLGVBQWUsR0FBRztJQUN2QjtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtJQUNDQyw4QkFBOEIsRUFBRSxTQUFBQSxDQUMvQkMsU0FBMkMsRUFDM0NDLFVBQW9DLEVBQ3BDQyxpQkFBb0MsRUFFM0I7TUFBQSxJQURUQywwQkFBMEIsR0FBQUMsU0FBQSxDQUFBQyxNQUFBLFFBQUFELFNBQUEsUUFBQUUsU0FBQSxHQUFBRixTQUFBLE1BQUcsS0FBSztNQUVsQyxNQUFNRyxRQUFRLEdBQUdOLFVBQVUsQ0FBQ08sSUFBSSxDQUM5QkMsSUFBSSxJQUNKQSxJQUFJLENBQUNDLGNBQWMsSUFDbkJSLGlCQUFpQixDQUFDUyxXQUFXLENBQWdCRixJQUFJLENBQUNDLGNBQWMsQ0FBQyxFQUFFRSxNQUFNLEVBQUVDLGtCQUFrQixLQUM1RmIsU0FBUyxFQUFFYSxrQkFDZCxDQUFDO01BQ0QsT0FBT04sUUFBUSxHQUFHLElBQUksQ0FBQ08sNkJBQTZCLENBQUNQLFFBQVEsRUFBRU4sVUFBVSxFQUFFRSwwQkFBMEIsQ0FBQyxHQUFHLENBQUM7SUFDM0csQ0FBQztJQUNEO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtJQUNDVyw2QkFBNkIsRUFBRSxTQUFBQSxDQUM5QlAsUUFBZ0MsRUFDaENOLFVBQW9DLEVBSTNCO01BQUEsSUFIVEUsMEJBQTBCLEdBQUFDLFNBQUEsQ0FBQUMsTUFBQSxRQUFBRCxTQUFBLFFBQUFFLFNBQUEsR0FBQUYsU0FBQSxNQUFHLEtBQUs7TUFBQSxJQUNsQ1csZ0JBQWdCLEdBQUFYLFNBQUEsQ0FBQUMsTUFBQSxRQUFBRCxTQUFBLFFBQUFFLFNBQUEsR0FBQUYsU0FBQSxNQUFHLEtBQUs7TUFBQSxJQUN4QlksZ0JBQWdCLEdBQUFaLFNBQUEsQ0FB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
@@ -4,6 +4,7 @@ import type { ContactType } from "@sap-ux/vocabularies-types/vocabularies/Commun
4
4
  import { CommunicationAnnotationTypes } from "@sap-ux/vocabularies-types/vocabularies/Communication";
5
5
  import type {
6
6
  DataField,
7
+ DataFieldAbstractTypes,
7
8
  DataFieldForAction,
8
9
  DataFieldForAnnotation,
9
10
  DataFieldForIntentBasedNavigation,
@@ -13,12 +14,12 @@ import { UIAnnotationTypes } from "@sap-ux/vocabularies-types/vocabularies/UI";
13
14
  import Log from "sap/base/Log";
14
15
  import SizeHelper from "sap/fe/core/helpers/SizeHelper";
15
16
  import { isAnnotationOfType, isPathAnnotationExpression } from "sap/fe/core/helpers/TypeGuards";
17
+ import type { DataModelObjectPath } from "sap/fe/core/templating/DataModelPathHelper";
16
18
  import { getDisplayMode } from "sap/fe/core/templating/DisplayModeFormatter";
17
19
  import type { EnhancedFEPropertyInfo } from "sap/fe/macros/table/TableAPI";
18
20
  import TableUtil from "sap/m/table/Util";
19
21
  import type TypeConfig from "sap/ui/mdc/TypeConfig";
20
22
  import TypeMap from "sap/ui/mdc/odata/v4/TypeMap";
21
-
22
23
  const TableSizeHelper = {
23
24
  /**
24
25
  * Method to calculate the width of the MDCColumn.
@@ -44,7 +45,6 @@ const TableSizeHelper = {
44
45
  );
45
46
  return property ? this.getMDCColumnWidthFromProperty(property, properties, widthIncludingColumnHeader) : 0;
46
47
  },
47
-
48
48
  /**
49
49
  * Method to calculate the width of the MDCColumn.
50
50
  * @param property The PropertyInfo object for which the width is calculated
@@ -71,7 +71,6 @@ const TableSizeHelper = {
71
71
  },
72
72
  property.visualSettings?.widthCalculation
73
73
  );
74
-
75
74
  let types;
76
75
  if (property.propertyInfos?.length) {
77
76
  types = property.propertyInfos
@@ -101,7 +100,6 @@ const TableSizeHelper = {
101
100
  }
102
101
  return size ? parseFloat(size.replace("Rem", "")) : 0;
103
102
  },
104
-
105
103
  /**
106
104
  * Method to calculate the width of a DataFieldAnnotation object contained in a fieldGroup.
107
105
  * @param dataField DataFieldAnnotation object.
@@ -152,7 +150,6 @@ const TableSizeHelper = {
152
150
  }
153
151
  return { labelWidth: fLabelWidth, propertyWidth: nPropertyWidth };
154
152
  },
155
-
156
153
  /**
157
154
  * Method to calculate the width of a DataField object.
158
155
  * @param dataField DataFieldAnnotation object.
@@ -163,18 +160,17 @@ const TableSizeHelper = {
163
160
  * @alias sap.fe.macros.TableSizeHelper
164
161
  * @returns {object} Object containing the width of the label and the width of the property.
165
162
  */
166
-
167
163
  getWidthForDataField: function (
168
164
  dataField: DataField,
169
- showDataFieldsLabel: boolean,
170
165
  properties: EnhancedFEPropertyInfo[],
171
166
  convertedMetaData: ConvertedMetadata,
172
- widthIncludingColumnHeader: boolean
167
+ widthIncludingColumnHeader: boolean,
168
+ dataModelObjectPath: DataModelObjectPath<Property | DataFieldAbstractTypes | DataPointType>,
169
+ showDataFieldsLabel = false
173
170
  ): { labelWidth: number; propertyWidth: number } {
174
171
  const oTargetedProperty = dataField.Value?.$target,
175
172
  oTextArrangementTarget = oTargetedProperty?.annotations?.Common?.Text,
176
- displayMode = getDisplayMode(dataField.Value?.$target);
177
-
173
+ displayMode = getDisplayMode(dataField.Value?.$target, dataModelObjectPath.targetEntityType);
178
174
  let nPropertyWidth = 0,
179
175
  fLabelWidth = 0;
180
176
  if (oTargetedProperty) {
@@ -204,5 +200,4 @@ const TableSizeHelper = {
204
200
  return { labelWidth: fLabelWidth, propertyWidth: nPropertyWidth };
205
201
  }
206
202
  };
207
-
208
203
  export default TableSizeHelper;