@sapui5/sap.fe.macros 1.138.0 → 1.140.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (240) hide show
  1. package/package.json +1 -1
  2. package/src/sap/fe/macros/.library +1 -1
  3. package/src/sap/fe/macros/Breadcrumbs.js +269 -0
  4. package/src/sap/fe/macros/Breadcrumbs.tsx +243 -0
  5. package/src/sap/fe/macros/CommonHelper.js +2 -2
  6. package/src/sap/fe/macros/CommonHelper.ts +1 -1
  7. package/src/sap/fe/macros/Field.js +85 -58
  8. package/src/sap/fe/macros/Field.ts +104 -60
  9. package/src/sap/fe/macros/FooterContent.js +44 -11
  10. package/src/sap/fe/macros/FooterContent.tsx +48 -9
  11. package/src/sap/fe/macros/FormElement.js +2 -2
  12. package/src/sap/fe/macros/FormElement.ts +1 -2
  13. package/src/sap/fe/macros/MessageButton.js +1 -2
  14. package/src/sap/fe/macros/MessageButton.tsx +0 -1
  15. package/src/sap/fe/macros/MultiValueField.js +17 -6
  16. package/src/sap/fe/macros/MultiValueField.tsx +7 -4
  17. package/src/sap/fe/macros/RichTextEditor.js +30 -5
  18. package/src/sap/fe/macros/RichTextEditor.tsx +34 -6
  19. package/src/sap/fe/macros/Share.js +85 -40
  20. package/src/sap/fe/macros/Share.tsx +42 -1
  21. package/src/sap/fe/macros/Status.js +226 -0
  22. package/src/sap/fe/macros/Status.tsx +192 -0
  23. package/src/sap/fe/macros/ValueHelp.js +4 -29
  24. package/src/sap/fe/macros/ValueHelp.tsx +2 -43
  25. package/src/sap/fe/macros/ai/EasyFillButton.js +10 -4
  26. package/src/sap/fe/macros/ai/EasyFillButton.tsx +8 -1
  27. package/src/sap/fe/macros/ai/EasyFillDialog.js +25 -10
  28. package/src/sap/fe/macros/ai/EasyFillDialog.tsx +32 -23
  29. package/src/sap/fe/macros/ai/EasyFilterBar.js +123 -114
  30. package/src/sap/fe/macros/ai/EasyFilterBar.tsx +140 -124
  31. package/src/sap/fe/macros/ai/EasyFilterDataFetcher.js +11 -5
  32. package/src/sap/fe/macros/ai/EasyFilterDataFetcher.ts +14 -5
  33. package/src/sap/fe/macros/ai/SummarizationButton.js +2 -2
  34. package/src/sap/fe/macros/ai/SummarizationButton.tsx +1 -1
  35. package/src/sap/fe/macros/chart/ChartDelegate.js +4 -4
  36. package/src/sap/fe/macros/chart/ChartDelegate.ts +3 -3
  37. package/src/sap/fe/macros/chart/ChartHelper.js +1 -2
  38. package/src/sap/fe/macros/chart/ChartHelper.ts +0 -1
  39. package/src/sap/fe/macros/chart/ChartRuntime.js +1 -2
  40. package/src/sap/fe/macros/chart/ChartRuntime.ts +0 -1
  41. package/src/sap/fe/macros/chart/MdcChartTemplate.js +20 -6
  42. package/src/sap/fe/macros/chart/MdcChartTemplate.tsx +16 -8
  43. package/src/sap/fe/macros/controls/BuildingBlockWithTemplating.js +3 -1
  44. package/src/sap/fe/macros/controls/BuildingBlockWithTemplating.ts +2 -0
  45. package/src/sap/fe/macros/controls/FieldWrapper.js +9 -3
  46. package/src/sap/fe/macros/controls/FieldWrapper.ts +11 -2
  47. package/src/sap/fe/macros/controls/FilterBar.js +49 -2
  48. package/src/sap/fe/macros/controls/FilterBar.ts +55 -1
  49. package/src/sap/fe/macros/controls/NumberWithUnitOrCurrency.js +2 -2
  50. package/src/sap/fe/macros/controls/NumberWithUnitOrCurrency.tsx +2 -2
  51. package/src/sap/fe/macros/controls/RequiredFlexBox.js +62 -0
  52. package/src/sap/fe/macros/controls/RequiredFlexBox.tsx +20 -0
  53. package/src/sap/fe/macros/controls/filterbar/VisualFilter.js +21 -11
  54. package/src/sap/fe/macros/controls/filterbar/VisualFilter.ts +25 -11
  55. package/src/sap/fe/macros/controls/filterbar/VisualFilterContainer.js +11 -2
  56. package/src/sap/fe/macros/controls/filterbar/VisualFilterContainer.ts +12 -1
  57. package/src/sap/fe/macros/controls/filterbar/utils/VisualFilterUtils.js +18 -1
  58. package/src/sap/fe/macros/controls/filterbar/utils/VisualFilterUtils.ts +20 -0
  59. package/src/sap/fe/macros/coreUI/CreateDialog.js +2 -2
  60. package/src/sap/fe/macros/coreUI/CreateDialog.tsx +1 -1
  61. package/src/sap/fe/macros/coreUI/OperationParameterDialog.js +43 -4
  62. package/src/sap/fe/macros/coreUI/OperationParameterDialog.tsx +48 -1
  63. package/src/sap/fe/macros/designtime/Designtime.helper.js +39 -2
  64. package/src/sap/fe/macros/designtime/Designtime.helper.ts +39 -0
  65. package/src/sap/fe/macros/draftIndicator/DraftIndicator.js +15 -4
  66. package/src/sap/fe/macros/draftIndicator/DraftIndicator.tsx +5 -0
  67. package/src/sap/fe/macros/field/FieldBaseDelegate.js +20 -8
  68. package/src/sap/fe/macros/field/FieldBaseDelegate.ts +34 -9
  69. package/src/sap/fe/macros/field/FieldFormatOptions.js +73 -44
  70. package/src/sap/fe/macros/field/FieldFormatOptions.ts +20 -2
  71. package/src/sap/fe/macros/field/FieldRuntime.js +1 -2
  72. package/src/sap/fe/macros/field/FieldRuntime.ts +0 -1
  73. package/src/sap/fe/macros/filter/FilterUtils.js +3 -5
  74. package/src/sap/fe/macros/filter/FilterUtils.ts +2 -4
  75. package/src/sap/fe/macros/filterBar/FilterBar.block.js +8 -2
  76. package/src/sap/fe/macros/filterBar/FilterBar.block.tsx +2 -5
  77. package/src/sap/fe/macros/filterBar/FilterBarAPI.js +8 -8
  78. package/src/sap/fe/macros/filterBar/FilterBarAPI.ts +8 -8
  79. package/src/sap/fe/macros/filterBar/designtime/FilterBar.designtime.js +3 -1
  80. package/src/sap/fe/macros/filterBar/designtime/FilterBar.designtime.ts +2 -0
  81. package/src/sap/fe/macros/filterBar/mixin/FilterBarAPIStateHandler.js +1 -1
  82. package/src/sap/fe/macros/filterBar/mixin/FilterBarAPIStateHandler.ts +1 -1
  83. package/src/sap/fe/macros/form/Form.js +1 -4
  84. package/src/sap/fe/macros/form/Form.tsx +0 -3
  85. package/src/sap/fe/macros/form/FormActionButtons.fragment.xml +13 -2
  86. package/src/sap/fe/macros/form/FormContainer.block.js +1 -2
  87. package/src/sap/fe/macros/form/FormContainer.block.ts +0 -1
  88. package/src/sap/fe/macros/form/FormContainer.fragment.xml +40 -0
  89. package/src/sap/fe/macros/form/FormContainerAPI.js +14 -16
  90. package/src/sap/fe/macros/form/FormContainerAPI.ts +13 -15
  91. package/src/sap/fe/macros/form/FormDelegate.js +20 -1
  92. package/src/sap/fe/macros/form/FormDelegate.ts +25 -0
  93. package/src/sap/fe/macros/form/FormHelper.js +1 -2
  94. package/src/sap/fe/macros/form/FormHelper.ts +0 -1
  95. package/src/sap/fe/macros/formatters/TableFormatter.js +10 -1
  96. package/src/sap/fe/macros/formatters/TableFormatter.ts +14 -5
  97. package/src/sap/fe/macros/fpm/CustomFragment.block.js +1 -2
  98. package/src/sap/fe/macros/fpm/CustomFragment.block.ts +0 -1
  99. package/src/sap/fe/macros/inlineEdit/InlineEdit.js +15 -3
  100. package/src/sap/fe/macros/inlineEdit/InlineEdit.ts +14 -2
  101. package/src/sap/fe/macros/internal/ActionCommand.block.js +1 -2
  102. package/src/sap/fe/macros/internal/ActionCommand.block.ts +0 -1
  103. package/src/sap/fe/macros/internal/DataPoint.js +2 -1
  104. package/src/sap/fe/macros/internal/DataPoint.tsx +1 -0
  105. package/src/sap/fe/macros/internal/DataPointFormatOptions.js +11 -2
  106. package/src/sap/fe/macros/internal/DataPointFormatOptions.ts +3 -0
  107. package/src/sap/fe/macros/internal/FilterField.block.js +10 -2
  108. package/src/sap/fe/macros/internal/FilterField.block.ts +11 -1
  109. package/src/sap/fe/macros/internal/field/CheckBoxGroup.fragment.xml +25 -0
  110. package/src/sap/fe/macros/internal/field/DisplayStyle.js +51 -13
  111. package/src/sap/fe/macros/internal/field/DisplayStyle.tsx +53 -6
  112. package/src/sap/fe/macros/internal/field/EditStyle.js +5 -1
  113. package/src/sap/fe/macros/internal/field/EditStyle.tsx +4 -0
  114. package/src/sap/fe/macros/internal/field/FieldStructureHelper.js +9 -2
  115. package/src/sap/fe/macros/internal/field/FieldStructureHelper.ts +11 -0
  116. package/src/sap/fe/macros/internal/field/FieldStyles.js +1 -1
  117. package/src/sap/fe/macros/internal/field/FieldStyles.tsx +2 -1
  118. package/src/sap/fe/macros/internal/valuehelp/AdditionalValueHelper.js +46 -8
  119. package/src/sap/fe/macros/internal/valuehelp/AdditionalValueHelper.ts +60 -6
  120. package/src/sap/fe/macros/internal/valuehelp/TableDelegate.js +38 -2
  121. package/src/sap/fe/macros/internal/valuehelp/TableDelegate.ts +37 -2
  122. package/src/sap/fe/macros/internal/valuehelp/ValueListDialogTable.fragment.xml +2 -1
  123. package/src/sap/fe/macros/internal/valuehelp/ValueListHelper.js +16 -5
  124. package/src/sap/fe/macros/internal/valuehelp/ValueListHelper.ts +21 -9
  125. package/src/sap/fe/macros/internal/valuehelp/ValueListTable.fragment.xml +1 -0
  126. package/src/sap/fe/macros/library.js +1 -1
  127. package/src/sap/fe/macros/mdc/adapter/StateHelper.js +7 -2
  128. package/src/sap/fe/macros/mdc/adapter/StateHelper.ts +7 -3
  129. package/src/sap/fe/macros/messagebundle.properties +42 -32
  130. package/src/sap/fe/macros/messagebundle_ar.properties +12 -4
  131. package/src/sap/fe/macros/messagebundle_bg.properties +11 -3
  132. package/src/sap/fe/macros/messagebundle_ca.properties +15 -7
  133. package/src/sap/fe/macros/messagebundle_cnr.properties +12 -4
  134. package/src/sap/fe/macros/messagebundle_cs.properties +10 -2
  135. package/src/sap/fe/macros/messagebundle_cy.properties +12 -4
  136. package/src/sap/fe/macros/messagebundle_da.properties +11 -3
  137. package/src/sap/fe/macros/messagebundle_de.properties +18 -10
  138. package/src/sap/fe/macros/messagebundle_el.properties +13 -5
  139. package/src/sap/fe/macros/messagebundle_en.properties +16 -8
  140. package/src/sap/fe/macros/messagebundle_en_GB.properties +16 -8
  141. package/src/sap/fe/macros/messagebundle_en_US_saprigi.properties +16 -8
  142. package/src/sap/fe/macros/messagebundle_es.properties +13 -5
  143. package/src/sap/fe/macros/messagebundle_es_MX.properties +14 -6
  144. package/src/sap/fe/macros/messagebundle_et.properties +13 -5
  145. package/src/sap/fe/macros/messagebundle_fi.properties +14 -6
  146. package/src/sap/fe/macros/messagebundle_fr.properties +14 -6
  147. package/src/sap/fe/macros/messagebundle_fr_CA.properties +15 -7
  148. package/src/sap/fe/macros/messagebundle_hi.properties +11 -3
  149. package/src/sap/fe/macros/messagebundle_hr.properties +11 -3
  150. package/src/sap/fe/macros/messagebundle_hu.properties +10 -2
  151. package/src/sap/fe/macros/messagebundle_id.properties +18 -10
  152. package/src/sap/fe/macros/messagebundle_it.properties +10 -2
  153. package/src/sap/fe/macros/messagebundle_iw.properties +10 -2
  154. package/src/sap/fe/macros/messagebundle_ja.properties +13 -5
  155. package/src/sap/fe/macros/messagebundle_kk.properties +15 -7
  156. package/src/sap/fe/macros/messagebundle_ko.properties +10 -2
  157. package/src/sap/fe/macros/messagebundle_lt.properties +11 -3
  158. package/src/sap/fe/macros/messagebundle_lv.properties +12 -4
  159. package/src/sap/fe/macros/messagebundle_mk.properties +12 -4
  160. package/src/sap/fe/macros/messagebundle_ms.properties +14 -6
  161. package/src/sap/fe/macros/messagebundle_nl.properties +13 -5
  162. package/src/sap/fe/macros/messagebundle_no.properties +12 -4
  163. package/src/sap/fe/macros/messagebundle_pl.properties +12 -4
  164. package/src/sap/fe/macros/messagebundle_pt.properties +13 -5
  165. package/src/sap/fe/macros/messagebundle_pt_PT.properties +12 -4
  166. package/src/sap/fe/macros/messagebundle_ro.properties +12 -4
  167. package/src/sap/fe/macros/messagebundle_ru.properties +13 -5
  168. package/src/sap/fe/macros/messagebundle_sh.properties +12 -4
  169. package/src/sap/fe/macros/messagebundle_sk.properties +11 -3
  170. package/src/sap/fe/macros/messagebundle_sl.properties +12 -4
  171. package/src/sap/fe/macros/messagebundle_sr.properties +12 -4
  172. package/src/sap/fe/macros/messagebundle_sv.properties +11 -3
  173. package/src/sap/fe/macros/messagebundle_th.properties +11 -3
  174. package/src/sap/fe/macros/messagebundle_tr.properties +10 -2
  175. package/src/sap/fe/macros/messagebundle_uk.properties +17 -9
  176. package/src/sap/fe/macros/messagebundle_vi.properties +12 -4
  177. package/src/sap/fe/macros/messagebundle_zh_CN.properties +11 -3
  178. package/src/sap/fe/macros/messagebundle_zh_TW.properties +12 -4
  179. package/src/sap/fe/macros/messages/MessageButton.js +55 -36
  180. package/src/sap/fe/macros/messages/MessageButton.ts +64 -39
  181. package/src/sap/fe/macros/messages/MessagePopover.js +2 -2
  182. package/src/sap/fe/macros/messages/MessagePopover.ts +4 -4
  183. package/src/sap/fe/macros/microchart/MicroChartContainer.js +1 -2
  184. package/src/sap/fe/macros/microchart/MicroChartContainer.ts +1 -2
  185. package/src/sap/fe/macros/microchart/MicroChartHelper.js +1 -2
  186. package/src/sap/fe/macros/microchart/MicroChartHelper.tsx +0 -1
  187. package/src/sap/fe/macros/share/ShareAPI.js +4 -29
  188. package/src/sap/fe/macros/share/ShareAPI.ts +1 -32
  189. package/src/sap/fe/macros/situations/SituationsPopover.js +3 -1
  190. package/src/sap/fe/macros/situations/SituationsPopover.ts +2 -0
  191. package/src/sap/fe/macros/table/Action.js +24 -2
  192. package/src/sap/fe/macros/table/Action.ts +13 -0
  193. package/src/sap/fe/macros/table/ActionGroup.js +24 -2
  194. package/src/sap/fe/macros/table/ActionGroup.ts +13 -0
  195. package/src/sap/fe/macros/table/ActionGroupOverride.js +24 -2
  196. package/src/sap/fe/macros/table/ActionGroupOverride.ts +13 -0
  197. package/src/sap/fe/macros/table/ActionOverride.js +24 -2
  198. package/src/sap/fe/macros/table/ActionOverride.ts +13 -0
  199. package/src/sap/fe/macros/table/ActionsTemplating.js +73 -12
  200. package/src/sap/fe/macros/table/ActionsTemplating.tsx +69 -13
  201. package/src/sap/fe/macros/table/Column.js +3 -3
  202. package/src/sap/fe/macros/table/Column.ts +2 -2
  203. package/src/sap/fe/macros/table/MdcTableTemplate.js +20 -8
  204. package/src/sap/fe/macros/table/MdcTableTemplate.tsx +36 -7
  205. package/src/sap/fe/macros/table/QuickFilterSelector.js +35 -14
  206. package/src/sap/fe/macros/table/QuickFilterSelector.tsx +22 -3
  207. package/src/sap/fe/macros/table/Table.block.js +137 -108
  208. package/src/sap/fe/macros/table/Table.block.tsx +29 -2
  209. package/src/sap/fe/macros/table/TableAPI.js +143 -133
  210. package/src/sap/fe/macros/table/TableAPI.ts +5 -1
  211. package/src/sap/fe/macros/table/TableDefinition.js +4 -2
  212. package/src/sap/fe/macros/table/TableDefinition.ts +3 -1
  213. package/src/sap/fe/macros/table/TableHelper.js +1 -2
  214. package/src/sap/fe/macros/table/TableHelper.ts +0 -1
  215. package/src/sap/fe/macros/table/TableRuntime.js +26 -7
  216. package/src/sap/fe/macros/table/TableRuntime.ts +33 -5
  217. package/src/sap/fe/macros/table/Utils.js +6 -2
  218. package/src/sap/fe/macros/table/Utils.ts +5 -1
  219. package/src/sap/fe/macros/table/delegates/ALPTableDelegate.js +1 -2
  220. package/src/sap/fe/macros/table/delegates/ALPTableDelegate.ts +0 -1
  221. package/src/sap/fe/macros/table/delegates/TableDelegate.js +25 -20
  222. package/src/sap/fe/macros/table/delegates/TableDelegate.ts +25 -24
  223. package/src/sap/fe/macros/table/delegates/TreeTableDelegate.js +1 -2
  224. package/src/sap/fe/macros/table/delegates/TreeTableDelegate.ts +0 -1
  225. package/src/sap/fe/macros/table/designtime/Table.designtime.js +3 -1
  226. package/src/sap/fe/macros/table/designtime/Table.designtime.ts +2 -0
  227. package/src/sap/fe/macros/table/massEdit/designtime/MassEdit.designtime.js +3 -1
  228. package/src/sap/fe/macros/table/massEdit/designtime/MassEdit.designtime.ts +2 -1
  229. package/src/sap/fe/macros/table/mixin/ContextMenuHandler.js +2 -1
  230. package/src/sap/fe/macros/table/mixin/ContextMenuHandler.ts +1 -0
  231. package/src/sap/fe/macros/table/mixin/TableHierarchy.js +8 -1
  232. package/src/sap/fe/macros/table/mixin/TableHierarchy.ts +10 -0
  233. package/src/sap/fe/macros/table/mixin/TableSharing.js +3 -2
  234. package/src/sap/fe/macros/table/mixin/TableSharing.ts +9 -1
  235. package/src/sap/fe/macros/valuehelp/ValueHelpDelegate.js +20 -6
  236. package/src/sap/fe/macros/valuehelp/ValueHelpDelegate.ts +36 -14
  237. package/src/sap/fe/macros/visualfilters/VisualFilter.js +95 -7
  238. package/src/sap/fe/macros/visualfilters/VisualFilter.tsx +93 -3
  239. package/src/sap/fe/macros/visualfilters/VisualFilterRuntime.js +16 -5
  240. package/src/sap/fe/macros/visualfilters/VisualFilterRuntime.ts +18 -4
@@ -2,7 +2,7 @@
2
2
  * SAP UI development toolkit for HTML5 (SAPUI5)
3
3
  * (c) Copyright 2009-2025 SAP SE. All rights reserved
4
4
  */
5
- sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/core/CommonUtils", "sap/fe/core/controls/CommandExecution", "sap/fe/core/controls/FormElementWrapper", "sap/fe/core/converters/ManifestSettings", "sap/fe/core/converters/MetaModelConverter", "sap/fe/core/converters/annotations/DataField", "sap/fe/core/converters/controls/Common/table/StandardActions", "sap/fe/core/helpers/BindingHelper", "sap/fe/core/helpers/ModelHelper", "sap/fe/core/helpers/StableIdHelper", "sap/fe/core/helpers/TypeGuards", "sap/fe/core/templating/DataModelPathHelper", "sap/fe/core/templating/UIFormatters", "sap/fe/macros/ActionCommand", "sap/fe/macros/CommonHelper", "sap/fe/macros/Field", "sap/fe/macros/MultiValueField", "sap/fe/macros/TSXUtils", "sap/fe/macros/draftIndicator/DraftIndicator", "sap/fe/macros/field/FieldHelper", "sap/fe/macros/field/FieldTemplating", "sap/fe/macros/internal/helpers/ActionHelper", "sap/fe/macros/internal/helpers/TableTemplating", "sap/fe/macros/situations/SituationsIndicator", "sap/fe/macros/table/ActionsTemplating", "sap/fe/macros/table/QuickFilterSelector", "sap/fe/macros/table/TableHelper", "sap/fe/macros/table/uploadTable/UploadTableTemplate", "sap/m/FlexItemData", "sap/m/HBox", "sap/m/Label", "sap/m/Menu", "sap/m/MenuItem", "sap/m/ObjectStatus", "sap/m/SegmentedButton", "sap/m/SegmentedButtonItem", "sap/m/VBox", "sap/m/library", "sap/m/plugins/CellSelector", "sap/m/plugins/ContextMenuSetting", "sap/m/plugins/CopyProvider", "sap/m/plugins/DataStateIndicator", "sap/ui/core/Lib", "sap/ui/core/library", "sap/ui/fl/variants/VariantManagement", "sap/ui/mdc/Table", "sap/ui/mdc/actiontoolbar/ActionToolbarAction", "sap/ui/mdc/enums/TableP13nMode", "sap/ui/mdc/enums/TableRowActionType", "sap/ui/mdc/p13n/PersistenceProvider", "sap/ui/mdc/table/Column", "sap/ui/mdc/table/CreationRow", "sap/ui/mdc/table/DragDropConfig", "sap/ui/mdc/table/GridTableType", "sap/ui/mdc/table/ResponsiveColumnSettings", "sap/ui/mdc/table/ResponsiveTableType", "sap/ui/mdc/table/RowActionItem", "sap/ui/mdc/table/RowSettings", "sap/ui/mdc/table/TreeTableType", "../MicroChart", "../field/FieldFormatOptions", "sap/fe/base/jsx-runtime/jsx", "sap/fe/base/jsx-runtime/jsxs"], function (Log, BindingToolkit, CommonUtils, CommandExecution, FormElementWrapper, ManifestSettings, MetaModelConverter, DataField, StandardActions, BindingHelper, ModelHelper, StableIdHelper, TypeGuards, DataModelPathHelper, UIFormatters, ActionCommand, CommonHelper, Field, MultiValueFieldBlock, TSXUtils, DraftIndicator, FieldHelper, FieldTemplating, ActionHelper, TableTemplating, SituationsIndicator, ActionsTemplating, QuickFilterSelector, TableHelper, UploadTableTemplate, FlexItemData, HBox, Label, Menu, MenuItem, ObjectStatus, SegmentedButton, SegmentedButtonItem, VBox, library, CellSelector, ContextMenuSetting, CopyProvider, DataStateIndicator, Library, coreLibrary, VariantManagement, MDCTable, ActionToolbarAction, TableP13nMode, TableRowActionType, PersistenceProvider, Column, CreationRow, DragDropConfig, GridTableType, ResponsiveColumnSettings, ResponsiveTableType, RowActionItem, RowSettings, TreeTableType, MicroChart, FieldFormatOptions, _jsx, _jsxs) {
5
+ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/core/CommonUtils", "sap/fe/core/controls/CommandExecution", "sap/fe/core/controls/FormElementWrapper", "sap/fe/core/converters/ManifestSettings", "sap/fe/core/converters/MetaModelConverter", "sap/fe/core/converters/annotations/DataField", "sap/fe/core/converters/controls/Common/table/StandardActions", "sap/fe/core/helpers/BindingHelper", "sap/fe/core/helpers/ModelHelper", "sap/fe/core/helpers/StableIdHelper", "sap/fe/core/helpers/TypeGuards", "sap/fe/core/templating/DataModelPathHelper", "sap/fe/core/templating/UIFormatters", "sap/fe/macros/ActionCommand", "sap/fe/macros/CommonHelper", "sap/fe/macros/Field", "sap/fe/macros/MultiValueField", "sap/fe/macros/TSXUtils", "sap/fe/macros/draftIndicator/DraftIndicator", "sap/fe/macros/field/FieldHelper", "sap/fe/macros/field/FieldTemplating", "sap/fe/macros/internal/helpers/ActionHelper", "sap/fe/macros/internal/helpers/TableTemplating", "sap/fe/macros/situations/SituationsIndicator", "sap/fe/macros/table/ActionsTemplating", "sap/fe/macros/table/QuickFilterSelector", "sap/fe/macros/table/SlotColumn", "sap/fe/macros/table/TableHelper", "sap/fe/macros/table/uploadTable/UploadTableTemplate", "sap/m/FlexItemData", "sap/m/HBox", "sap/m/Label", "sap/m/Menu", "sap/m/MenuItem", "sap/m/ObjectStatus", "sap/m/SegmentedButton", "sap/m/SegmentedButtonItem", "sap/m/VBox", "sap/m/library", "sap/m/plugins/CellSelector", "sap/m/plugins/ContextMenuSetting", "sap/m/plugins/CopyProvider", "sap/m/plugins/DataStateIndicator", "sap/ui/core/Lib", "sap/ui/core/library", "sap/ui/fl/variants/VariantManagement", "sap/ui/mdc/Table", "sap/ui/mdc/actiontoolbar/ActionToolbarAction", "sap/ui/mdc/enums/TableP13nMode", "sap/ui/mdc/enums/TableRowActionType", "sap/ui/mdc/p13n/PersistenceProvider", "sap/ui/mdc/table/Column", "sap/ui/mdc/table/CreationRow", "sap/ui/mdc/table/DragDropConfig", "sap/ui/mdc/table/GridTableType", "sap/ui/mdc/table/ResponsiveColumnSettings", "sap/ui/mdc/table/ResponsiveTableType", "sap/ui/mdc/table/RowActionItem", "sap/ui/mdc/table/RowSettings", "sap/ui/mdc/table/TreeTableType", "../MicroChart", "../field/FieldFormatOptions", "sap/fe/base/jsx-runtime/jsx", "sap/fe/base/jsx-runtime/jsxs"], function (Log, BindingToolkit, CommonUtils, CommandExecution, FormElementWrapper, ManifestSettings, MetaModelConverter, DataField, StandardActions, BindingHelper, ModelHelper, StableIdHelper, TypeGuards, DataModelPathHelper, UIFormatters, ActionCommand, CommonHelper, Field, MultiValueFieldBlock, TSXUtils, DraftIndicator, FieldHelper, FieldTemplating, ActionHelper, TableTemplating, SituationsIndicator, ActionsTemplating, QuickFilterSelector, SlotColumn, TableHelper, UploadTableTemplate, FlexItemData, HBox, Label, Menu, MenuItem, ObjectStatus, SegmentedButton, SegmentedButtonItem, VBox, library, CellSelector, ContextMenuSetting, CopyProvider, DataStateIndicator, Library, coreLibrary, VariantManagement, MDCTable, ActionToolbarAction, TableP13nMode, TableRowActionType, PersistenceProvider, Column, CreationRow, DragDropConfig, GridTableType, ResponsiveColumnSettings, ResponsiveTableType, RowActionItem, RowSettings, TreeTableType, MicroChart, FieldFormatOptions, _jsx, _jsxs) {
6
6
  "use strict";
7
7
 
8
8
  var _exports = {};
@@ -74,7 +74,8 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/core/Common
74
74
  return _jsx(ResponsiveTableType, {
75
75
  showDetailsButton: true,
76
76
  detailsButtonSetting: [Priority.Low, Priority.Medium, Priority.None],
77
- growingMode: collection.$kind === "EntitySet" ? "Scroll" : undefined
77
+ growingMode: collection.$kind === "EntitySet" ? "Scroll" : undefined,
78
+ popinLayout: tableDefinition.control.popinLayout
78
79
  });
79
80
  }
80
81
  }
@@ -262,6 +263,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/core/Common
262
263
  return _jsx(RowSettings, {
263
264
  navigated: tableDefinition.annotation.row?.rowNavigated,
264
265
  highlight: tableDefinition.annotation.row?.rowHighlighting,
266
+ highlightText: tableDefinition.annotation.row?.rowHighlighting,
265
267
  children: {
266
268
  rowActions: rowActionType === TableRowActionType.Navigation ? rowActionItem : undefined
267
269
  }
@@ -278,6 +280,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/core/Common
278
280
  * @param navigationInEditMode
279
281
  * @returns The context menu
280
282
  */
283
+ _exports.getRowSettings = getRowSettings;
281
284
  function getContextMenu(tableProperties, parameters, collectionEntity, rowActionType, collection, navigationInEditMode) {
282
285
  const menuItems = getTableContextMenuTemplate(tableProperties, parameters, collection, collectionEntity);
283
286
  if (rowActionType === TableRowActionType.Navigation && !navigationInEditMode) {
@@ -649,6 +652,9 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/core/Common
649
652
  */
650
653
  _exports.getComputedColumn = getComputedColumn;
651
654
  function getSlotColumn(tableId, column, isReadOnly) {
655
+ const template = typeof column.template === "string" && !column.template?.startsWith("<") ? _jsx(SlotColumn, {
656
+ templateId: column.template
657
+ }) : column.template;
652
658
  return _jsx(Column, {
653
659
  id: generate([tableId, "C", column.id]),
654
660
  propertyKey: column.name,
@@ -661,7 +667,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/core/Common
661
667
  extendedSettings: _jsx(ResponsiveColumnSettings, {
662
668
  importance: column.importance
663
669
  }),
664
- template: column.template
670
+ template: template
665
671
  }
666
672
  });
667
673
  }
@@ -750,6 +756,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/core/Common
750
756
  break;
751
757
  }
752
758
  const dataFieldObject = dataField.getObject();
759
+ const reactiveAreaMode = tableType === "ResponsiveTable" ? "Overlay" : undefined;
753
760
  const formatOptions = {
754
761
  fieldMode: fieldMode,
755
762
  textLinesEdit: column.formatOptions?.textLinesEdit,
@@ -765,7 +772,8 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/core/Common
765
772
  showIconUrl: dataFieldObject?.Inline && !!dataFieldObject?.IconUrl,
766
773
  ignoreNavigationAvailable: enableAnalytics ?? false,
767
774
  isCurrencyOrUnitAligned: true,
768
- dateTimeStyle: getDefaultDateTimeStyle(dataField)
775
+ dateTimeStyle: getDefaultDateTimeStyle(dataField),
776
+ reactiveAreaMode: reactiveAreaMode
769
777
  };
770
778
  return _jsx(Field, {
771
779
  "core:require": "{TableRuntime: 'sap/fe/macros/table/TableRuntime'}",
@@ -822,6 +830,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/core/Common
822
830
  if (tableDefinition.control.enableUploadPlugin && column.typeConfig?.className === "Edm.Stream") {
823
831
  columnEditMode = "Display";
824
832
  }
833
+ const reactiveAreaMode = tableDefinition.control.type === "ResponsiveTable" ? "Overlay" : undefined;
825
834
  const formatOptions = {
826
835
  fieldMode: fieldMode,
827
836
  textLinesEdit: column.formatOptions?.textLinesEdit,
@@ -842,7 +851,8 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/core/Common
842
851
  isCurrencyOrUnitAligned: true,
843
852
  compactSemanticKey: isCompactType === undefined ? undefined : `${isCompactType}`,
844
853
  dateTimeStyle: getDefaultDateTimeStyle(dataFieldContext),
845
- isAnalyticalAggregatedRow: tableDefinition.control.analyticalConfiguration?.aggregationOnLeafLevel
854
+ isAnalyticalAggregatedRow: tableDefinition.control.analyticalConfiguration?.aggregationOnLeafLevel,
855
+ reactiveAreaMode: reactiveAreaMode
846
856
  };
847
857
  return _jsx(Field, {
848
858
  vhIdPrefix: generate([tableId, "TableValueHelp"]),
@@ -908,13 +918,15 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/core/Common
908
918
  if (isReadOnly === "undefined") {
909
919
  template = _jsx(MultiValueFieldBlock, {
910
920
  contextPath: collection.getPath(),
911
- metaPath: dataFieldContext.getPath()
921
+ metaPath: dataFieldContext.getPath(),
922
+ useParentBindingCache: tableDefinition.disableOwnRequestOnMVF
912
923
  });
913
924
  } else {
914
925
  template = _jsx(MultiValueFieldBlock, {
915
926
  contextPath: collection.getPath(),
916
927
  metaPath: dataFieldContext.getPath(),
917
- readOnly: isReadOnly
928
+ readOnly: isReadOnly,
929
+ useParentBindingCache: tableDefinition.disableOwnRequestOnMVF
918
930
  });
919
931
  }
920
932
  } else if (isAnnotationOfType(dataField, "com.sap.vocabularies.UI.v1.DataFieldForAnnotation") && isAnnotationOfTerm(dataField.Target.$target, "com.sap.vocabularies.UI.v1.FieldGroup")) {
@@ -1269,4 +1281,4 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/core/Common
1269
1281
  _exports.getMDCTableTemplate = getMDCTableTemplate;
1270
1282
  return _exports;
1271
1283
  }, false);
1272
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJnZXRUYWJsZVR5cGUiLCJ0YWJsZURlZmluaXRpb24iLCJfY29sbGVjdGlvbiIsInRhYmxlVHlwZSIsInNlbGVjdGlvbkxpbWl0IiwiY29sbGVjdGlvbiIsImdldE9iamVjdCIsIl9qc3giLCJHcmlkVGFibGVUeXBlIiwicm93Q291bnRNb2RlIiwiY29udHJvbCIsInJvd0NvdW50IiwiZml4ZWRDb2x1bW5Db3VudCIsImZyb3plbkNvbHVtbkNvdW50Iiwic2Nyb2xsVGhyZXNob2xkIiwiZW5hYmxlQ29sdW1uRnJlZXplIiwiVHJlZVRhYmxlVHlwZSIsIlJlc3BvbnNpdmVUYWJsZVR5cGUiLCJzaG93RGV0YWlsc0J1dHRvbiIsImRldGFpbHNCdXR0b25TZXR0aW5nIiwiUHJpb3JpdHkiLCJMb3ciLCJNZWRpdW0iLCJOb25lIiwiZ3Jvd2luZ01vZGUiLCIka2luZCIsInVuZGVmaW5lZCIsImdldERhdGFTdGF0ZUluZGljYXRvciIsImhhbmRsZXJQcm92aWRlciIsIkRhdGFTdGF0ZUluZGljYXRvciIsImZpbHRlciIsImRhdGFTdGF0ZUluZGljYXRvckZpbHRlciIsImVuYWJsZUZpbHRlcmluZyIsImRhdGFTdGF0ZUNoYW5nZSIsImdldERyYWdBbmREcm9wRW5hYmxlZCIsImNvbnRleHRPYmplY3RQYXRoIiwiaXNQYXRoVXBkYXRhYmxlT25OYXZpZ2F0aW9uIiwiaXNQYXRoVXBkYXRhYmxlIiwiaWdub3JlVGFyZ2V0Q29sbGVjdGlvbiIsImF1dGhvcml6ZVVucmVzb2x2YWJsZSIsInBhdGhWaXNpdG9yIiwicGF0aCIsIm5hdmlnYXRpb25QYXRocyIsInNpbmdsZXRvblBhdGhWaXNpdG9yIiwiY29udmVydGVkVHlwZXMiLCJpc1BhdGhVcGRhdGFibGVPblRhcmdldCIsInN0YXJ0aW5nRW50aXR5U2V0IiwidGFyZ2V0RW50aXR5U2V0IiwiYW5ub3RhdGlvbnMiLCJDb21tb24iLCJEcmFmdFJvb3QiLCJhbmQiLCJfdHlwZSIsImlmRWxzZSIsImlzQ29uc3RhbnQiLCJjb25zdGFudCIsImlzSGllcmFyY2h5UGFyZW50Tm9kZVVwZGF0YWJsZSIsIlVJIiwiSXNFZGl0YWJsZSIsImdldERlcGVuZGVudHMiLCJ0YWJsZVByb3BlcnRpZXMiLCJwYXJhbWV0ZXJzIiwidmFyaWFudE1hbmFnZW1lbnQiLCJpZCIsImNvbnRlbnRJZCIsInR5cGUiLCJkZXBlbmRlbnRzIiwiY3V0QWN0aW9uIiwiYWN0aW9ucyIsImZpbmQiLCJhIiwia2V5IiwiU3RhbmRhcmRBY3Rpb25LZXlzIiwiQ3V0IiwiaXNUZW1wbGF0ZWQiLCJwdXNoIiwiQ29tbWFuZEV4ZWN1dGlvbiIsImV4ZWN1dGUiLCJnZXRDdXRIYW5kbGVyIiwiY29tbWFuZCIsImVuYWJsZWQiLCJjb3B5QWN0aW9uIiwiQ29weSIsImdldENvcHlIYW5kbGVyIiwicGFzdGVBY3Rpb24iLCJQYXN0ZSIsInZpc2libGUiLCJnZXRQYXN0ZUhhbmRsZXIiLCJjcmVhdGVBY3Rpb24iLCJDcmVhdGUiLCJkZWxldGVBY3Rpb24iLCJEZWxldGUiLCJhbm5vdGF0aW9uIiwiaXNJbnNlcnRVcGRhdGVBY3Rpb25zVGVtcGxhdGVkIiwibm9kZVR5cGUiLCJlbmFibGVVcGxvYWRQbHVnaW4iLCJnZXRDcmVhdGVCdXR0b25QcmVzc0hhbmRsZXIiLCJnZXREZWxldGVCdXR0b25QcmVzc0hhbmRsZXIiLCJtb3ZlVXBBY3Rpb24iLCJNb3ZlVXAiLCJtb3ZlRG93bkFjdGlvbiIsIk1vdmVEb3duIiwiZ2V0TW92ZVVwRG93bkhhbmRsZXIiLCJhY3Rpb25OYW1lIiwiY29tbWFuZEFjdGlvbnMiLCJhY3Rpb24iLCJhY3Rpb25Db21tYW5kIiwiZ2V0QWN0aW9uQ29tbWFuZCIsIlBlcnNpc3RlbmNlUHJvdmlkZXIiLCJnZW5lcmF0ZSIsImZvciIsIkNvbnRleHRNZW51U2V0dGluZyIsInNjb3BlIiwiZ2V0VXBsb2FkUGx1Z2luIiwiX2V4cG9ydHMiLCJnZXRBY3Rpb25zIiwidGFibGUiLCJjb2xsZWN0aW9uQ29udGV4dCIsImNvbGxlY3Rpb25FbnRpdHkiLCJkaXNwbGF5U2VnbWVudGVkQnV0dG9uIiwiYWxwQnV0dG9uSXRlbXMiLCJDb21tb25IZWxwZXIiLCJpc0Rlc2t0b3AiLCJTZWdtZW50ZWRCdXR0b25JdGVtIiwidG9vbHRpcCIsImljb24iLCJBY3Rpb25Ub29sYmFyQWN0aW9uIiwibGF5b3V0SW5mb3JtYXRpb24iLCJjaGlsZHJlbiIsIlNlZ21lbnRlZEJ1dHRvbiIsInNlbGVjdCIsInNlZ21lbnRlZEJ1dHRvblByZXNzIiwic2VsZWN0ZWRLZXkiLCJpdGVtcyIsImdldFRhYmxlQWN0aW9uc1RlbXBsYXRlIiwibGVuZ3RoIiwiZ2V0Um93U2V0dGluZ3MiLCJyb3dBY3Rpb25UeXBlIiwicm93QWN0aW9uSXRlbSIsIlJvd0FjdGlvbkl0ZW0iLCJwcmVzcyIsInJvd1ByZXNzIiwicm93IiwiUm93U2V0dGluZ3MiLCJuYXZpZ2F0ZWQiLCJyb3dOYXZpZ2F0ZWQiLCJoaWdobGlnaHQiLCJyb3dIaWdobGlnaHRpbmciLCJyb3dBY3Rpb25zIiwiVGFibGVSb3dBY3Rpb25UeXBlIiwiTmF2aWdhdGlvbiIsImdldENvbnRleHRNZW51IiwibmF2aWdhdGlvbkluRWRpdE1vZGUiLCJtZW51SXRlbXMiLCJnZXRUYWJsZUNvbnRleHRNZW51VGVtcGxhdGUiLCJnZXRTaGFyZXRvQ29sbGFib3JhdGlvbk1hbmFnZXJUZW1wbGF0ZSIsImdldE9wZW5Jbk5ld1RhYlRlbXBsYXRlIiwiTWVudSIsIml0ZW1TZWxlY3RlZCIsImNvbnRleHRNZW51SXRlbVNlbGVjdGVkIiwiZ2V0RGVwZW5kZW50c0ZvckNvbnRleHRNZW51IiwidGFibGVJZCIsIk1lbnVJdGVtIiwic3RhcnRzU2VjdGlvbiIsInRleHQiLCJjb250ZXh0TWVudVNoYXJlVG9Db2xsYWJvcmF0aW9uTWFuYWdlciIsIm5vdCIsInBhdGhJbk1vZGVsIiwiY29udGV4dE1lbnVPcGVuSW5OZXdUYWIiLCJlbmFibGVkRm9yQ29udGV4dE1lbnUiLCJnZXRWYXJpYW50TWFuYWdlbWVudCIsImhlYWRlckxldmVsIiwiVmFyaWFudE1hbmFnZW1lbnQiLCJzaG93U2V0QXNEZWZhdWx0IiwidmFyaWFudFNlbGVjdGVkIiwic2F2ZSIsInZhcmlhbnRTYXZlZCIsImdldFF1aWNrRmlsdGVyIiwicXVpY2tGaWx0ZXJzIiwiZmlsdGVycyIsIlF1aWNrRmlsdGVyU2VsZWN0b3IiLCJwYXRocyIsIm1hcCIsImFubm90YXRpb25QYXRoIiwic2hvd0NvdW50cyIsImdldENvcHlQcm92aWRlciIsInZpc2libGVFeHByZXNzaW9uIiwiZGlzYWJsZUNvcHlUb0NsaXBib2FyZCIsIkNvcHlQcm92aWRlciIsImdldENlbGxTZWxlY3RvciIsImluY2x1ZGVzIiwiQ2VsbFNlbGVjdG9yIiwib3IiLCJyYW5nZUxpbWl0IiwiZ2V0Q3JlYXRpb25Sb3ciLCJjcmVhdGlvbk1vZGUiLCJuYW1lIiwiQ3JlYXRpb25Nb2RlIiwiQ3JlYXRpb25Sb3ciLCJjcmVhdGlvblJvd0FjdGlvbiIsImN1c3RvbURhdGEiLCJjcmVhdGVDdXN0b21EYXRhcyIsInZhbHVlIiwiZGlzYWJsZUFkZFJvd0J1dHRvbkZvckVtcHR5RGF0YSIsImN1c3RvbVZhbGlkYXRpb25GdW5jdGlvbiIsImFwcGx5IiwiYXBwbHlFbmFibGVkIiwiZ2V0RHJhZ0FuZERyb3BDb25maWciLCJEcmFnRHJvcENvbmZpZyIsImNvbXBpbGVFeHByZXNzaW9uIiwiZHJvcFBvc2l0aW9uIiwiYWxsb3dEcm9wQmV0d2Vlbk5vZGVzIiwiZHJhZ2dhYmxlIiwiZHJvcHBhYmxlIiwiZHJhZ1N0YXJ0IiwiZHJhZ1N0YXJ0RG9jdW1lbnQiLCJkcmFnRW50ZXIiLCJkcmFnRW50ZXJEb2N1bWVudCIsImRyb3AiLCJkcm9wRG9jdW1lbnQiLCJmb3JDb250ZXh0TWVudSIsImRhdGFGaWVsZCIsImNvbnZlcnRlZE1ldGFkYXRhIiwicmVzb2x2ZVBhdGgiLCJ0YXJnZXQiLCJhY3Rpb25Db250ZXh0UGF0aCIsImdldEFjdGlvbkNvbnRleHQiLCJtZXRhTW9kZWwiLCJjcmVhdGVCaW5kaW5nQ29udGV4dCIsImFjdGlvbkNvbnRleHQiLCJkYXRhRmllbGREYXRhTW9kZWxPYmplY3RQYXRoIiwiZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzIiwiaXNCb3VuZCIsIkFjdGlvblRhcmdldCIsImlzT3BlcmF0aW9uQXZhaWxhYmxlIiwiQ29yZSIsIk9wZXJhdGlvbkF2YWlsYWJsZSIsInZhbHVlT2YiLCJkaXNwbGF5Q29tbWFuZEFjdGlvbiIsIlRhYmxlSGVscGVyIiwiaXNBY3Rpb25TaG93bkluQ29udGV4dE1lbnUiLCJhY3Rpb25QYXJhbWV0ZXJzIiwib25FeGVjdXRlQWN0aW9uIiwiZ2V0RGF0YUZpZWxkRm9yQWN0aW9uQnV0dG9uUHJlc3NIYW5kbGVyIiwib25FeGVjdXRlSUJOIiwiZ2V0RGF0YUZpZWxkRm9ySUJOUHJlc3NIYW5kbGVyIiwib25FeGVjdXRlTWFuaWZlc3QiLCJnZXRNYW5pZmVzdEFjdGlvblByZXNzSGFuZGxlciIsImlzSUJORW5hYmxlZCIsImlzRGF0YUZpZWxkRm9ySUJORW5hYmxlZCIsIlJlcXVpcmVzQ29udGV4dCIsIk5hdmlnYXRpb25BdmFpbGFibGUiLCJpc0FjdGlvbkVuYWJsZWQiLCJpc0RhdGFGaWVsZEZvckFjdGlvbkVuYWJsZWQiLCJBY3Rpb24iLCJlbmFibGVPblNlbGVjdCIsInRhcmdldEVudGl0eVR5cGUiLCJpc0VuYWJsZWQiLCJnZXRDb21tYW5kRXhlY3V0aW9uRm9yQWN0aW9uIiwiZ2V0Q29yZVJlcXVpcmUiLCJjdXN0b21Nb2R1bGVzIiwiYWRkaXRpb25hbFJlcXVpcmVkTW9kdWxlcyIsIm1vZHVsZSIsImluZGV4Iiwiam9pbiIsImdldENvbXB1dGVkQ29sdW1uIiwiY29sdW1uIiwiZW5hYmxlQW5hbHl0aWNzIiwiaXNEcmFmdEluZGljYXRvciIsIkNvbHVtbiIsImhlYWRlclZpc2libGUiLCJwcm9wZXJ0eUtleSIsImhlYWRlciIsImxhYmVsIiwid2lkdGgiLCJEcmFmdEluZGljYXRvciIsImRyYWZ0SW5kaWNhdG9yVHlwZSIsIk9iamVjdE1hcmtlclZpc2liaWxpdHkiLCJJY29uT25seSIsImNvbnRleHRQYXRoIiwiZ2V0UGF0aCIsInVzZWRJblRhYmxlIiwidXNlZEluQW5hbHl0aWNhbFRhYmxlIiwiaXNTaXR1YXRpb25zSW5kaWNhdG9yIiwiU2l0dWF0aW9uc0luZGljYXRvciIsImdldFNsb3RDb2x1bW4iLCJpc1JlYWRPbmx5IiwiaEFsaWduIiwiaG9yaXpvbnRhbEFsaWduIiwicmVxdWlyZWQiLCJleHRlbmRlZFNldHRpbmdzIiwiUmVzcG9uc2l2ZUNvbHVtblNldHRpbmdzIiwiaW1wb3J0YW5jZSIsInRlbXBsYXRlIiwiZ2V0RHJhZnRJbmRpY2F0b3IiLCJmb3JtYXRPcHRpb25zIiwiZmllbGRHcm91cERyYWZ0SW5kaWNhdG9yUHJvcGVydHlQYXRoIiwiRm9ybUVsZW1lbnRXcmFwcGVyIiwiSWNvbkFuZFRleHQiLCJnZXREcmFmdEluZGljYXRvclZpc2libGVCaW5kaW5nIiwiZmllbGRHcm91cE5hbWUiLCJhcmlhTGFiZWxsZWRCeSIsImdldFNpdHVhdGlvbkluZGljYXRvciIsIk9iamVjdFN0YXR1cyIsInNob3dFcnJvck9iamVjdFN0YXR1cyIsImNsYXNzIiwic3RhdGUiLCJnZXREZWZhdWx0RGF0ZVRpbWVTdHlsZSIsImRhdGFGaWVsZENvbnRleHQiLCJ0YXJnZXRPYmplY3QiLCJpc0RhdGFGaWVsZCIsIlZhbHVlIiwiJHRhcmdldCIsImlzRGF0YUZpZWxkRm9yQW5ub3RhdGlvbiIsImhhc0RhdGFQb2ludFRhcmdldCIsIlRhcmdldCIsImdldENyZWF0aW9uVGVtcGxhdGUiLCJpc1RhYmxlUmVhZE9ubHkiLCJmaWVsZE1vZGUiLCJjb2x1bW5FZGl0TW9kZSIsImRhdGFGaWVsZE9iamVjdCIsInRleHRMaW5lc0VkaXQiLCJ0ZXh0TWF4TGluZXMiLCJ0ZXh0TWF4TGVuZ3RoIiwidGV4dE1heENoYXJhY3RlcnNEaXNwbGF5IiwidGV4dEV4cGFuZEJlaGF2aW9yRGlzcGxheSIsInRleHRBbGlnbk1vZGUiLCJzZW1hbnRpY0tleVN0eWxlIiwiaGFzRHJhZnRJbmRpY2F0b3IiLCJzaG93SWNvblVybCIsIklubGluZSIsIkljb25VcmwiLCJpZ25vcmVOYXZpZ2F0aW9uQXZhaWxhYmxlIiwiaXNDdXJyZW5jeU9yVW5pdEFsaWduZWQiLCJkYXRlVGltZVN0eWxlIiwiRmllbGQiLCJ2aElkUHJlZml4IiwiZWRpdE1vZGUiLCJtZXRhUGF0aCIsIndyYXAiLCJjaGFuZ2UiLCJmaWVsZENoYW5nZUluQ3JlYXRpb25Sb3ciLCJGaWVsZEZvcm1hdE9wdGlvbnMiLCJnZXRNYWNyb0ZpZWxkVGVtcGxhdGUiLCJpc0NvbXBhY3RUeXBlIiwidGV4dEFsaWduIiwic2hvd0VtcHR5SW5kaWNhdG9yIiwiY2xhc3NOYW1lIiwidHlwZUNvbmZpZyIsImlzQW5hbHl0aWNzIiwiZm9ySW5saW5lQ3JlYXRpb25Sb3dzIiwiY29tcGFjdFNlbWFudGljS2V5IiwiaXNBbmFseXRpY2FsQWdncmVnYXRlZFJvdyIsImFuYWx5dGljYWxDb25maWd1cmF0aW9uIiwiYWdncmVnYXRpb25PbkxlYWZMZXZlbCIsImxpdmVDaGFuZ2UiLCJmaWVsZExpdmVDaGFuZ2UiLCJuYXZpZ2F0ZUFmdGVyQWN0aW9uIiwiaXNOYXZpZ2FibGUiLCJnZXRDb2x1bW5Db250ZW50VGVtcGxhdGUiLCJkYXRhRmllbGRPUCIsImNyZWF0aW9uVGVtcGxhdGUiLCJyZWFkT25seSIsImlzQW5ub3RhdGlvbk9mVHlwZSIsImlzQW5ub3RhdGlvbk9mVGVybSIsInNob3dPbmx5Q2hhcnQiLCJzZXR0aW5ncyIsInNob3dNaWNyb0NoYXJ0TGFiZWwiLCJtaWNyb0NoYXJ0U2l6ZSIsIm1pY3JvQ2hhcnRDb2xsZWN0aW9uIiwiZ2V0TW9kZWwiLCJnZXROYXZpZ2F0aW9uQ29udGV4dCIsIk1pY3JvQ2hhcnQiLCJzaXplIiwiaGlkZU9uTm9EYXRhIiwiaXNNdWx0aVZhbHVlRmllbGQiLCJlbmhhbmNlRGF0YU1vZGVsUGF0aCIsImlzVHJ1dGh5IiwiSXNJbmFjdGl2ZSIsImVxdWFsIiwiTXVsdGlWYWx1ZUZpZWxkQmxvY2siLCJmaWVsZEdyb3VwIiwiZGF0YUZpZWxkQ29sbGVjdGlvbkNvbnRleHQiLCJmaWVsZEdyb3VwQ29sZWN0aW9uTGVuZ3RoIiwiRGF0YSIsImZpZWxkR3JvdXBEYXRhRmllbGQiLCJmaWVsZEdyb3VwRGF0YUZpZWxkSWR4IiwiZmllbGRHcm91cERhdGFGaWVsZENvbnRleHQiLCJmaWVsZEdyb3VwRGF0YUZpZWxkT1AiLCJmaWVsZEdyb3VwTGFiZWwiLCJGaWVsZEhlbHBlciIsImNvbXB1dGVMYWJlbFRleHQiLCJjb250ZXh0Iiwic2hvd0RhdGFGaWVsZHNMYWJlbCIsInJlc291cmNlQnVuZGxlIiwiTGlicmFyeSIsImdldFJlc291cmNlQnVuZGxlRm9yIiwiX2pzeHMiLCJIQm94IiwiZ2V0VmlzaWJsZUV4cHJlc3Npb24iLCJhbGlnbkl0ZW1zIiwiYnVpbGRFeHByZXNzaW9uRm9yQWxpZ25JdGVtcyIsIkxhYmVsIiwiZ2V0RmllbGRHcm91cExhYmVsU3RhYmxlSWQiLCJnZXRUZXh0IiwiVkJveCIsImxheW91dERhdGEiLCJGbGV4SXRlbURhdGEiLCJncm93RmFjdG9yIiwiZ2V0Q29sdW1uU3RhYmxlSWQiLCJnZXRNYXJnaW5DbGFzcyIsImRyYWZ0SW5kaWNhdG9yIiwic2l0dWF0aW9uSW5kaWNhdG9yIiwiZ2V0VkJveFZpc2liaWxpdHkiLCJGaWVsZEdyb3VwSGlkZGVuRXhwcmVzc2lvbnMiLCJnZXRDb2x1bW5UZW1wbGF0ZSIsImdldERhdGFGaWVsZERlZmF1bHQiLCJkYXRhRmllbGRPYmplY3RNb2RlbFBhdGgiLCJ0ZW1wbGF0ZXMiLCJlbmFibGVBdXRvQ29sdW1uV2lkdGgiLCJ3aWR0aEluY2x1ZGluZ0NvbHVtbkhlYWRlciIsIkNvbW1vblV0aWxzIiwiaXNTbWFsbERldmljZSIsImdldENvbHVtbldpZHRoIiwiZ2V0VGV4dE9uQWN0aW9uRmllbGQiLCJ0aXRsZSIsImRlc2NyaXB0aW9uIiwibWluV2lkdGgiLCJnZXRDb2x1bW5BbGlnbm1lbnQiLCJzZXRIZWFkZXJMYWJlbFZpc2liaWxpdHkiLCJjcmVhdGVDdXN0b21EYXRhIiwiZ2V0Q29sdW1ucyIsImNvbHVtbnMiLCJhdmFpbGFiaWxpdHkiLCJMb2ciLCJlcnJvciIsIkVycm9yIiwiZ2V0RGVzaWdudGltZSIsImdldE1EQ1AxM25Nb2RlIiwic3RyaW5nTW9kZSIsIlRhYmxlUDEzbk1vZGUiLCJBZ2dyZWdhdGUiLCJTb3J0IiwiRmlsdGVyIiwiR3JvdXAiLCJnZXRNRENUYWJsZVRlbXBsYXRlIiwibmF2aWdhdGlvbkluZm8iLCJyb3V0ZVBhdGgiLCJ0YXJnZXRJbmZvcm1hdGlvbiIsImFwcENvbXBvbmVudCIsImdldFJvdXRpbmdTZXJ2aWNlIiwiX2dldFRhcmdldEluZm9ybWF0aW9uIiwib3B0aW9ucyIsIm9wZW5JbkVkaXRNb2RlIiwiZmlsdGVyT25BY3RpdmVFbnRpdGllcyIsIk1vZGVsSGVscGVyIiwiaXNPYmplY3RQYXRoRHJhZnRTdXBwb3J0ZWQiLCJkZWxlZ2F0ZSIsImdldERlbGVnYXRlIiwiaXNBbHAiLCJlbnRpdHlOYW1lIiwiY3VycmVudEhlYWRlciIsImhlYWRlckJpbmRpbmdFeHByZXNzaW9uIiwiYnVpbGRFeHByZXNzaW9uRm9ySGVhZGVyVmlzaWJsZSIsInRhYlRpdGxlIiwibW9kZWxDb250ZXh0Q2hhbmdlIiwidGFibGVDb250ZXh0Q2hhbmdlIiwibGluZUl0ZW0iLCJnZXRVaUxpbmVJdGVtT2JqZWN0IiwibmF2aWdhdGlvblBhdGgiLCJzdGFydHNXaXRoIiwiaXNTaW5nbGV0b24iLCJkcmFmdCIsImRlc2lnbnRpbWUiLCJvdmVycmlkZVJvd1ByZXNzIiwiYWN0aW9uVHlwZSIsInNob3dDcmVhdGUiLCJ1cGRhdGFibGVQcm9wZXJ0eVBhdGgiLCJjdXJyZW50UGVyc29uYWxpemF0aW9uIiwicGVyc29uYWxpemF0aW9uIiwicDEzbk1vZGUiLCJtb2RlIiwic3BsaXQiLCJ0cmltIiwiZXhjbHVkZUdyb3VwRnJvbVAxM24iLCJtdWx0aVNlbGVjdERpc2FibGVkQWN0aW9ucyIsIkFjdGlvbkhlbHBlciIsImdldE11bHRpU2VsZWN0RGlzYWJsZWRBY3Rpb25zIiwiaW5saW5lQ3JlYXRpb25Sb3dDb3VudCIsImNyZWF0ZUF0RW5kIiwiaGlkZGVuRmlsdGVycyIsImdldE5hdmlnYXRpb25BdmFpbGFibGVNYXAiLCJleHBvcnRSZXF1ZXN0U2l6ZSIsIk1EQ1RhYmxlIiwic29ydENvbmRpdGlvbnMiLCJncm91cENvbmRpdGlvbnMiLCJhZ2dyZWdhdGVDb25kaXRpb25zIiwiYnVzeUluZGljYXRvckRlbGF5IiwiZW5hYmxlRXhwb3J0IiwiSlNPTiIsInBhcnNlIiwiYmVmb3JlT3BlbkNvbnRleHRNZW51IiwiYXV0b0JpbmRPbkluaXQiLCJ1c2VCYXNpY1NlYXJjaCIsImZpbHRlckJhciIsInNlbGVjdGlvbk1vZGUiLCJzZWxlY3Rpb25DaGFuZ2UiLCJzaG93Um93Q291bnQiLCJoZWFkZXJTdHlsZSIsInRocmVzaG9sZCIsInBhc3RlIiwiYmVmb3JlRXhwb3J0IiwidXNlQ29uZGVuc2VkVGFibGVMYXlvdXQiLCJtdWx0aVNlbGVjdE1vZGUiLCJzaG93UGFzdGVCdXR0b24iLCJlbmFibGVQYXN0ZSIsImRhdGFTdGF0ZUluZGljYXRvciIsInJvd1NldHRpbmdzIiwiY29udGV4dE1lbnUiLCJkcmFnRHJvcENvbmZpZyIsImNyZWF0aW9uUm93IiwidmFyaWFudCIsInF1aWNrRmlsdGVyIiwiY29weVByb3ZpZGVyIiwiY2VsbFNlbGVjdG9yIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJNZGNUYWJsZVRlbXBsYXRlLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IENvbnZlcnRlZE1ldGFkYXRhLCBFbnRpdHlTZXQsIE5hdmlnYXRpb25Qcm9wZXJ0eSB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlc1wiO1xuaW1wb3J0IHR5cGUge1xuXHRDaGFydCxcblx0RGF0YUZpZWxkLFxuXHREYXRhRmllbGRGb3JBY3Rpb24sXG5cdERhdGFGaWVsZEZvckFubm90YXRpb24sXG5cdERhdGFQb2ludCxcblx0RmllbGRHcm91cCxcblx0TGluZUl0ZW0sXG5cdFByZXNlbnRhdGlvblZhcmlhbnQsXG5cdFNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnRcbn0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9VSVwiO1xuaW1wb3J0IHtcblx0VUlBbm5vdGF0aW9uVGVybXMsXG5cdFVJQW5ub3RhdGlvblR5cGVzLFxuXHR0eXBlIERhdGFGaWVsZEFic3RyYWN0VHlwZXMsXG5cdHR5cGUgRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uXG59IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvVUlcIjtcbmltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IHR5cGUgeyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24gfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCB7IGFuZCwgY29tcGlsZUV4cHJlc3Npb24sIGNvbnN0YW50LCBlcXVhbCwgaWZFbHNlLCBpc0NvbnN0YW50LCBpc1RydXRoeSwgbm90LCBvciwgcGF0aEluTW9kZWwgfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCB0eXBlIHsgUHJvcGVydGllc09mLCBTdHJpY3RQcm9wZXJ0aWVzT2YgfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQ2xhc3NTdXBwb3J0XCI7XG5pbXBvcnQgdHlwZSBBcHBDb21wb25lbnQgZnJvbSBcInNhcC9mZS9jb3JlL0FwcENvbXBvbmVudFwiO1xuaW1wb3J0IENvbW1vblV0aWxzIGZyb20gXCJzYXAvZmUvY29yZS9Db21tb25VdGlsc1wiO1xuaW1wb3J0IENvbW1hbmRFeGVjdXRpb24gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xzL0NvbW1hbmRFeGVjdXRpb25cIjtcbmltcG9ydCBGb3JtRWxlbWVudFdyYXBwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xzL0Zvcm1FbGVtZW50V3JhcHBlclwiO1xuaW1wb3J0IHsgQ3JlYXRpb25Nb2RlIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWFuaWZlc3RTZXR0aW5nc1wiO1xuaW1wb3J0IHsgZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWV0YU1vZGVsQ29udmVydGVyXCI7XG5pbXBvcnQgeyBoYXNEYXRhUG9pbnRUYXJnZXQsIGlzRGF0YUZpZWxkLCBpc0RhdGFGaWVsZEZvckFubm90YXRpb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9hbm5vdGF0aW9ucy9EYXRhRmllbGRcIjtcbmltcG9ydCB0eXBlIHsgQ3VzdG9tQWN0aW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvQ29tbW9uL0FjdGlvblwiO1xuaW1wb3J0IHR5cGUgeyBUYWJsZVR5cGUsIFRhYmxlVmlzdWFsaXphdGlvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0NvbW1vbi9UYWJsZVwiO1xuaW1wb3J0IHR5cGUge1xuXHRBbm5vdGF0aW9uVGFibGVDb2x1bW4sXG5cdENvbXB1dGVkVGFibGVDb2x1bW4sXG5cdEN1c3RvbUJhc2VkVGFibGVDb2x1bW5cbn0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvQ29tbW9uL3RhYmxlL0NvbHVtbnNcIjtcbmltcG9ydCB7IFN0YW5kYXJkQWN0aW9uS2V5cywgdHlwZSBTdGFuZGFyZEFjdGlvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0NvbW1vbi90YWJsZS9TdGFuZGFyZEFjdGlvbnNcIjtcbmltcG9ydCB7IFVJLCBzaW5nbGV0b25QYXRoVmlzaXRvciB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0JpbmRpbmdIZWxwZXJcIjtcbmltcG9ydCBNb2RlbEhlbHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9Nb2RlbEhlbHBlclwiO1xuaW1wb3J0IHsgZ2VuZXJhdGUgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9TdGFibGVJZEhlbHBlclwiO1xuaW1wb3J0IHsgaXNBbm5vdGF0aW9uT2ZUZXJtLCBpc0Fubm90YXRpb25PZlR5cGUsIGlzU2luZ2xldG9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvVHlwZUd1YXJkc1wiO1xuaW1wb3J0IHsgZW5oYW5jZURhdGFNb2RlbFBhdGgsIGlzUGF0aFVwZGF0YWJsZSwgdHlwZSBEYXRhTW9kZWxPYmplY3RQYXRoIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvRGF0YU1vZGVsUGF0aEhlbHBlclwiO1xuaW1wb3J0IHR5cGUgeyBEYXRlVGltZVN0eWxlIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvVUlGb3JtYXR0ZXJzXCI7XG5pbXBvcnQgeyBpc011bHRpVmFsdWVGaWVsZCB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL1VJRm9ybWF0dGVyc1wiO1xuaW1wb3J0IHsgZ2V0Q29tbWFuZEV4ZWN1dGlvbkZvckFjdGlvbiB9IGZyb20gXCJzYXAvZmUvbWFjcm9zL0FjdGlvbkNvbW1hbmRcIjtcbmltcG9ydCBDb21tb25IZWxwZXIgZnJvbSBcInNhcC9mZS9tYWNyb3MvQ29tbW9uSGVscGVyXCI7XG5pbXBvcnQgRmllbGQgZnJvbSBcInNhcC9mZS9tYWNyb3MvRmllbGRcIjtcbmltcG9ydCBNdWx0aVZhbHVlRmllbGRCbG9jayBmcm9tIFwic2FwL2ZlL21hY3Jvcy9NdWx0aVZhbHVlRmllbGRcIjtcbmltcG9ydCB7IGNyZWF0ZUN1c3RvbURhdGEsIGNyZWF0ZUN1c3RvbURhdGFzIH0gZnJvbSBcInNhcC9mZS9tYWNyb3MvVFNYVXRpbHNcIjtcbmltcG9ydCBEcmFmdEluZGljYXRvciBmcm9tIFwic2FwL2ZlL21hY3Jvcy9kcmFmdEluZGljYXRvci9EcmFmdEluZGljYXRvclwiO1xuaW1wb3J0IEZpZWxkSGVscGVyIGZyb20gXCJzYXAvZmUvbWFjcm9zL2ZpZWxkL0ZpZWxkSGVscGVyXCI7XG5pbXBvcnQgeyBnZXREcmFmdEluZGljYXRvclZpc2libGVCaW5kaW5nLCBnZXRWaXNpYmxlRXhwcmVzc2lvbiB9IGZyb20gXCJzYXAvZmUvbWFjcm9zL2ZpZWxkL0ZpZWxkVGVtcGxhdGluZ1wiO1xuaW1wb3J0IEFjdGlvbkhlbHBlciBmcm9tIFwic2FwL2ZlL21hY3Jvcy9pbnRlcm5hbC9oZWxwZXJzL0FjdGlvbkhlbHBlclwiO1xuaW1wb3J0IHsgYnVpbGRFeHByZXNzaW9uRm9ySGVhZGVyVmlzaWJsZSB9IGZyb20gXCJzYXAvZmUvbWFjcm9zL2ludGVybmFsL2hlbHBlcnMvVGFibGVUZW1wbGF0aW5nXCI7XG5pbXBvcnQgU2l0dWF0aW9uc0luZGljYXRvciBmcm9tIFwic2FwL2ZlL21hY3Jvcy9zaXR1YXRpb25zL1NpdHVhdGlvbnNJbmRpY2F0b3JcIjtcbmltcG9ydCB7IGdldFRhYmxlQWN0aW9uc1RlbXBsYXRlLCBnZXRUYWJsZUNvbnRleHRNZW51VGVtcGxhdGUgfSBmcm9tIFwic2FwL2ZlL21hY3Jvcy90YWJsZS9BY3Rpb25zVGVtcGxhdGluZ1wiO1xuaW1wb3J0IFF1aWNrRmlsdGVyU2VsZWN0b3IgZnJvbSBcInNhcC9mZS9tYWNyb3MvdGFibGUvUXVpY2tGaWx0ZXJTZWxlY3RvclwiO1xuaW1wb3J0IHR5cGUgVGFibGVBUEkgZnJvbSBcInNhcC9mZS9tYWNyb3MvdGFibGUvVGFibGVBUElcIjtcbmltcG9ydCB0eXBlIFRhYmxlQ3JlYXRpb25PcHRpb25zIGZyb20gXCJzYXAvZmUvbWFjcm9zL3RhYmxlL1RhYmxlQ3JlYXRpb25PcHRpb25zXCI7XG5pbXBvcnQgVGFibGVIZWxwZXIgZnJvbSBcInNhcC9mZS9tYWNyb3MvdGFibGUvVGFibGVIZWxwZXJcIjtcbmltcG9ydCB7IGdldFVwbG9hZFBsdWdpbiB9IGZyb20gXCJzYXAvZmUvbWFjcm9zL3RhYmxlL3VwbG9hZFRhYmxlL1VwbG9hZFRhYmxlVGVtcGxhdGVcIjtcbmltcG9ydCBGbGV4SXRlbURhdGEgZnJvbSBcInNhcC9tL0ZsZXhJdGVtRGF0YVwiO1xuaW1wb3J0IEhCb3ggZnJvbSBcInNhcC9tL0hCb3hcIjtcbmltcG9ydCBMYWJlbCBmcm9tIFwic2FwL20vTGFiZWxcIjtcbmltcG9ydCBNZW51IGZyb20gXCJzYXAvbS9NZW51XCI7XG5pbXBvcnQgTWVudUl0ZW0gZnJvbSBcInNhcC9tL01lbnVJdGVtXCI7XG5pbXBvcnQgT2JqZWN0U3RhdHVzIGZyb20gXCJzYXAvbS9PYmplY3RTdGF0dXNcIjtcbmltcG9ydCBTZWdtZW50ZWRCdXR0b24gZnJvbSBcInNhcC9tL1NlZ21lbnRlZEJ1dHRvblwiO1xuaW1wb3J0IFNlZ21lbnRlZEJ1dHRvbkl0ZW0gZnJvbSBcInNhcC9tL1NlZ21lbnRlZEJ1dHRvbkl0ZW1cIjtcbmltcG9ydCBWQm94IGZyb20gXCJzYXAvbS9WQm94XCI7XG5pbXBvcnQgeyBPYmplY3RNYXJrZXJWaXNpYmlsaXR5IH0gZnJvbSBcInNhcC9tL2xpYnJhcnlcIjtcbmltcG9ydCBDZWxsU2VsZWN0b3IgZnJvbSBcInNhcC9tL3BsdWdpbnMvQ2VsbFNlbGVjdG9yXCI7XG5pbXBvcnQgQ29udGV4dE1lbnVTZXR0aW5nIGZyb20gXCJzYXAvbS9wbHVnaW5zL0NvbnRleHRNZW51U2V0dGluZ1wiO1xuaW1wb3J0IENvcHlQcm92aWRlciBmcm9tIFwic2FwL20vcGx1Z2lucy9Db3B5UHJvdmlkZXJcIjtcbmltcG9ydCBEYXRhU3RhdGVJbmRpY2F0b3IgZnJvbSBcInNhcC9tL3BsdWdpbnMvRGF0YVN0YXRlSW5kaWNhdG9yXCI7XG5pbXBvcnQgdHlwZSBDb250cm9sIGZyb20gXCJzYXAvdWkvY29yZS9Db250cm9sXCI7XG5pbXBvcnQgdHlwZSBVSTVFbGVtZW50IGZyb20gXCJzYXAvdWkvY29yZS9FbGVtZW50XCI7XG5pbXBvcnQgTGlicmFyeSBmcm9tIFwic2FwL3VpL2NvcmUvTGliXCI7XG5pbXBvcnQgdHlwZSB7IFRpdGxlTGV2ZWwgfSBmcm9tIFwic2FwL3VpL2NvcmUvbGlicmFyeVwiO1xuaW1wb3J0IHsgUHJpb3JpdHkgfSBmcm9tIFwic2FwL3VpL2NvcmUvbGlicmFyeVwiO1xuaW1wb3J0IFZhcmlhbnRNYW5hZ2VtZW50IGZyb20gXCJzYXAvdWkvZmwvdmFyaWFudHMvVmFyaWFudE1hbmFnZW1lbnRcIjtcbmltcG9ydCBNRENUYWJsZSBmcm9tIFwic2FwL3VpL21kYy9UYWJsZVwiO1xuaW1wb3J0IEFjdGlvblRvb2xiYXJBY3Rpb24gZnJvbSBcInNhcC91aS9tZGMvYWN0aW9udG9vbGJhci9BY3Rpb25Ub29sYmFyQWN0aW9uXCI7XG5pbXBvcnQgVGFibGVQMTNuTW9kZSBmcm9tIFwic2FwL3VpL21kYy9lbnVtcy9UYWJsZVAxM25Nb2RlXCI7XG5pbXBvcnQgVGFibGVSb3dBY3Rpb25UeXBlIGZyb20gXCJzYXAvdWkvbWRjL2VudW1zL1RhYmxlUm93QWN0aW9uVHlwZVwiO1xuaW1wb3J0IFBlcnNpc3RlbmNlUHJvdmlkZXIgZnJvbSBcInNhcC91aS9tZGMvcDEzbi9QZXJzaXN0ZW5jZVByb3ZpZGVyXCI7XG5pbXBvcnQgQ29sdW1uIGZyb20gXCJzYXAvdWkvbWRjL3RhYmxlL0NvbHVtblwiO1xuaW1wb3J0IENyZWF0aW9uUm93IGZyb20gXCJzYXAvdWkvbWRjL3RhYmxlL0NyZWF0aW9uUm93XCI7XG5pbXBvcnQgRHJhZ0Ryb3BDb25maWcgZnJvbSBcInNhcC91aS9tZGMvdGFibGUvRHJhZ0Ryb3BDb25maWdcIjtcbmltcG9ydCBHcmlkVGFibGVUeXBlIGZyb20gXCJzYXAvdWkvbWRjL3RhYmxlL0dyaWRUYWJsZVR5cGVcIjtcbmltcG9ydCBSZXNwb25zaXZlQ29sdW1uU2V0dGluZ3MgZnJvbSBcInNhcC91aS9tZGMvdGFibGUvUmVzcG9uc2l2ZUNvbHVtblNldHRpbmdzXCI7XG5pbXBvcnQgUmVzcG9uc2l2ZVRhYmxlVHlwZSBmcm9tIFwic2FwL3VpL21kYy90YWJsZS9SZXNwb25zaXZlVGFibGVUeXBlXCI7XG5pbXBvcnQgUm93QWN0aW9uSXRlbSBmcm9tIFwic2FwL3VpL21kYy90YWJsZS9Sb3dBY3Rpb25JdGVtXCI7XG5pbXBvcnQgUm93U2V0dGluZ3MgZnJvbSBcInNhcC91aS9tZGMvdGFibGUvUm93U2V0dGluZ3NcIjtcbmltcG9ydCBUcmVlVGFibGVUeXBlIGZyb20gXCJzYXAvdWkvbWRjL3RhYmxlL1RyZWVUYWJsZVR5cGVcIjtcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9Db250ZXh0XCI7XG5pbXBvcnQgdHlwZSBPRGF0YU1ldGFNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTWV0YU1vZGVsXCI7XG5pbXBvcnQgTWljcm9DaGFydCBmcm9tIFwiLi4vTWljcm9DaGFydFwiO1xuaW1wb3J0IEZpZWxkRm9ybWF0T3B0aW9ucyBmcm9tIFwiLi4vZmllbGQvRmllbGRGb3JtYXRPcHRpb25zXCI7XG5pbXBvcnQgdHlwZSBUYWJsZUV2ZW50SGFuZGxlclByb3ZpZGVyIGZyb20gXCIuL1RhYmxlRXZlbnRIYW5kbGVyUHJvdmlkZXJcIjtcblxuZXhwb3J0IHR5cGUgVGFibGVUZW1wbGF0aW5nUGFyYW1ldGVycyA9IHtcblx0bWV0YVBhdGg6IENvbnRleHQ7XG5cdGNvbnZlcnRlZE1ldGFkYXRhOiBDb252ZXJ0ZWRNZXRhZGF0YTtcblx0bWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbDtcblx0aGFuZGxlclByb3ZpZGVyOiBUYWJsZUV2ZW50SGFuZGxlclByb3ZpZGVyO1xuXHRhcHBDb21wb25lbnQ6IEFwcENvbXBvbmVudDtcbn07XG5cbi8qKlxuICogR2VuZXJhdGVzIHRoZSB0YWJsZSB0eXBlIGZvciB0aGUgdGFibGUuXG4gKiBAcGFyYW0gdGFibGVEZWZpbml0aW9uXG4gKiBAcGFyYW0gX2NvbGxlY3Rpb25cbiAqIEBwYXJhbSB0YWJsZVR5cGVcbiAqIEBwYXJhbSBzZWxlY3Rpb25MaW1pdFxuICogQHJldHVybnMgVGhlIHRhYmxlIHR5cGVcbiAqL1xuZnVuY3Rpb24gZ2V0VGFibGVUeXBlKFxuXHR0YWJsZURlZmluaXRpb246IFRhYmxlVmlzdWFsaXphdGlvbixcblx0X2NvbGxlY3Rpb246IENvbnRleHQsXG5cdHRhYmxlVHlwZTogVGFibGVUeXBlLFxuXHRzZWxlY3Rpb25MaW1pdDogbnVtYmVyXG4pOiBSZXNwb25zaXZlVGFibGVUeXBlIHwgR3JpZFRhYmxlVHlwZSB8IFRyZWVUYWJsZVR5cGUge1xuXHRjb25zdCBjb2xsZWN0aW9uID0gX2NvbGxlY3Rpb24uZ2V0T2JqZWN0KCk7XG5cdHN3aXRjaCAodGFibGVUeXBlKSB7XG5cdFx0Y2FzZSBcIkdyaWRUYWJsZVwiOlxuXHRcdFx0cmV0dXJuIChcblx0XHRcdFx0PEdyaWRUYWJsZVR5cGVcblx0XHRcdFx0XHRyb3dDb3VudE1vZGU9e3RhYmxlRGVmaW5pdGlvbi5jb250cm9sLnJvd0NvdW50TW9kZX1cblx0XHRcdFx0XHRyb3dDb3VudD17dGFibGVEZWZpbml0aW9uLmNvbnRyb2wucm93Q291bnR9XG5cdFx0XHRcdFx0c2VsZWN0aW9uTGltaXQ9e3NlbGVjdGlvbkxpbWl0fVxuXHRcdFx0XHRcdGZpeGVkQ29sdW1uQ291bnQ9e3RhYmxlRGVmaW5pdGlvbi5jb250cm9sLmZyb3plbkNvbHVtbkNvdW50fVxuXHRcdFx0XHRcdHNjcm9sbFRocmVzaG9sZD17dGFibGVEZWZpbml0aW9uLmNvbnRyb2wuc2Nyb2xsVGhyZXNob2xkfVxuXHRcdFx0XHRcdGVuYWJsZUNvbHVtbkZyZWV6ZT17dGFibGVEZWZpbml0aW9uLmNvbnRyb2wuZW5hYmxlQ29sdW1uRnJlZXplfVxuXHRcdFx0XHQvPlxuXHRcdFx0KTtcblxuXHRcdGNhc2UgXCJUcmVlVGFibGVcIjpcblx0XHRcdHJldHVybiAoXG5cdFx0XHRcdDxUcmVlVGFibGVUeXBlXG5cdFx0XHRcdFx0cm93Q291bnRNb2RlPXt0YWJsZURlZmluaXRpb24uY29udHJvbC5yb3dDb3VudE1vZGV9XG5cdFx0XHRcdFx0cm93Q291bnQ9e3RhYmxlRGVmaW5pdGlvbi5jb250cm9sLnJvd0NvdW50fVxuXHRcdFx0XHRcdGZpeGVkQ29sdW1uQ291bnQ9e3RhYmxlRGVmaW5pdGlvbi5jb250cm9sLmZyb3plbkNvbHVtbkNvdW50fVxuXHRcdFx0XHRcdHNjcm9sbFRocmVzaG9sZD17dGFibGVEZWZpbml0aW9uLmNvbnRyb2wuc2Nyb2xsVGhyZXNob2xkfVxuXHRcdFx0XHRcdGVuYWJsZUNvbHVtbkZyZWV6ZT17dGFibGVEZWZpbml0aW9uLmNvbnRyb2wuZW5hYmxlQ29sdW1uRnJlZXplfVxuXHRcdFx0XHQvPlxuXHRcdFx0KTtcblxuXHRcdGRlZmF1bHQ6XG5cdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHQ8UmVzcG9uc2l2ZVRhYmxlVHlwZVxuXHRcdFx0XHRcdHNob3dEZXRhaWxzQnV0dG9uPXt0cnVlfVxuXHRcdFx0XHRcdGRldGFpbHNCdXR0b25TZXR0aW5nPXtbUHJpb3JpdHkuTG93LCBQcmlvcml0eS5NZWRpdW0sIFByaW9yaXR5Lk5vbmVdfVxuXHRcdFx0XHRcdGdyb3dpbmdNb2RlPXtjb2xsZWN0aW9uLiRraW5kID09PSBcIkVudGl0eVNldFwiID8gXCJTY3JvbGxcIiA6IHVuZGVmaW5lZH1cblx0XHRcdFx0Lz5cblx0XHRcdCk7XG5cdH1cbn1cblxuLyoqXG4gKiBHZW5lcmF0ZXMgdGhlIERhdGFTYXRlSW5kaWNhdG9yIGZvciB0aGUgdGFibGUuXG4gKiBAcGFyYW0gaGFuZGxlclByb3ZpZGVyXG4gKiBAcmV0dXJucyBUaGUgZGF0YXN0YXRlIGluZGljYXRvclxuICovXG5mdW5jdGlvbiBnZXREYXRhU3RhdGVJbmRpY2F0b3IoaGFuZGxlclByb3ZpZGVyOiBUYWJsZUV2ZW50SGFuZGxlclByb3ZpZGVyKTogRGF0YVN0YXRlSW5kaWNhdG9yIHtcblx0cmV0dXJuIChcblx0XHQ8RGF0YVN0YXRlSW5kaWNhdG9yXG5cdFx0XHRmaWx0ZXI9e2hhbmRsZXJQcm92aWRlci5kYXRhU3RhdGVJbmRpY2F0b3JGaWx0ZXJ9XG5cdFx0XHRlbmFibGVGaWx0ZXJpbmc9e3RydWV9XG5cdFx0XHRkYXRhU3RhdGVDaGFuZ2U9e2hhbmRsZXJQcm92aWRlci5kYXRhU3RhdGVDaGFuZ2V9XG5cdFx0Lz5cblx0KTtcbn1cblxuLyoqXG4gKiBHZW5lcmF0ZXMgdGhlIGJpbmRpbmcgZXhwcmVzc2lvbiBmb3IgdGhlIGRyYWcgYW5kIGRyb3AgZW5hYmxlbWVudC5cbiAqIEBwYXJhbSBjb250ZXh0T2JqZWN0UGF0aFxuICogQHBhcmFtIHRhYmxlRGVmaW5pdGlvblxuICogQHJldHVybnMgVGhlIGJpbmRpbmcgZXhwcmVzc2lvblxuICovXG5mdW5jdGlvbiBnZXREcmFnQW5kRHJvcEVuYWJsZWQoXG5cdGNvbnRleHRPYmplY3RQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPExpbmVJdGVtIHwgU2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudCB8IFByZXNlbnRhdGlvblZhcmlhbnQ+LFxuXHR0YWJsZURlZmluaXRpb246IFRhYmxlVmlzdWFsaXphdGlvblxuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+IHtcblx0Y29uc3QgaXNQYXRoVXBkYXRhYmxlT25OYXZpZ2F0aW9uID0gaXNQYXRoVXBkYXRhYmxlKGNvbnRleHRPYmplY3RQYXRoLCB7XG5cdFx0aWdub3JlVGFyZ2V0Q29sbGVjdGlvbjogdHJ1ZSxcblx0XHRhdXRob3JpemVVbnJlc29sdmFibGU6IHRydWUsXG5cdFx0cGF0aFZpc2l0b3I6IChwYXRoOiBzdHJpbmcsIG5hdmlnYXRpb25QYXRoczogc3RyaW5nW10pID0+XG5cdFx0XHRzaW5nbGV0b25QYXRoVmlzaXRvcihwYXRoLCBjb250ZXh0T2JqZWN0UGF0aC5jb252ZXJ0ZWRUeXBlcywgbmF2aWdhdGlvblBhdGhzKVxuXHR9KTtcblx0Y29uc3QgaXNQYXRoVXBkYXRhYmxlT25UYXJnZXQgPSBpc1BhdGhVcGRhdGFibGUoY29udGV4dE9iamVjdFBhdGgsIHtcblx0XHRhdXRob3JpemVVbnJlc29sdmFibGU6IHRydWUsXG5cdFx0cGF0aFZpc2l0b3I6IChwYXRoOiBzdHJpbmcsIG5hdmlnYXRpb25QYXRoczogc3RyaW5nW10pID0+XG5cdFx0XHRzaW5nbGV0b25QYXRoVmlzaXRvcihwYXRoLCBjb250ZXh0T2JqZWN0UGF0aC5jb252ZXJ0ZWRUeXBlcywgbmF2aWdhdGlvblBhdGhzKVxuXHR9KTtcblxuXHRpZiAoY29udGV4dE9iamVjdFBhdGguc3RhcnRpbmdFbnRpdHlTZXQgPT09IGNvbnRleHRPYmplY3RQYXRoLnRhcmdldEVudGl0eVNldCkge1xuXHRcdC8vIExpc3RSZXBvcnQgY2FzZTogd2UgYWxsb3cgZHJhZyBhbmQgZHJvcCBvbiBkcmFmdC1lbmFibGVkIGVudGl0aWVzXG5cdFx0aWYgKChjb250ZXh0T2JqZWN0UGF0aC5zdGFydGluZ0VudGl0eVNldCBhcyBFbnRpdHlTZXQpLmFubm90YXRpb25zLkNvbW1vbj8uRHJhZnRSb290ICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdHJldHVybiBhbmQoXG5cdFx0XHRcdGlzUGF0aFVwZGF0YWJsZU9uTmF2aWdhdGlvbi5fdHlwZSA9PT0gXCJVbnJlc29sdmFibGVcIlxuXHRcdFx0XHRcdD8gaWZFbHNlKGlzQ29uc3RhbnQoaXNQYXRoVXBkYXRhYmxlT25UYXJnZXQpLCBpc1BhdGhVcGRhdGFibGVPblRhcmdldCwgY29uc3RhbnQodHJ1ZSkpXG5cdFx0XHRcdFx0OiBpc1BhdGhVcGRhdGFibGVPbk5hdmlnYXRpb24sXG5cdFx0XHRcdHRhYmxlRGVmaW5pdGlvbi5jb250cm9sLmlzSGllcmFyY2h5UGFyZW50Tm9kZVVwZGF0YWJsZSFcblx0XHRcdCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiBjb25zdGFudChmYWxzZSk7XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdC8vIE9iamVjdFBhZ2UgY2FzZTogd2UgYWxsb3cgZHJhZyBhbmQgZHJvcCBpbiBlZGl0IG1vZGVcblx0XHRyZXR1cm4gYW5kKFxuXHRcdFx0aXNQYXRoVXBkYXRhYmxlT25OYXZpZ2F0aW9uLl90eXBlID09PSBcIlVucmVzb2x2YWJsZVwiXG5cdFx0XHRcdD8gaWZFbHNlKGlzQ29uc3RhbnQoaXNQYXRoVXBkYXRhYmxlT25UYXJnZXQpLCBpc1BhdGhVcGRhdGFibGVPblRhcmdldCwgY29uc3RhbnQodHJ1ZSkpXG5cdFx0XHRcdDogaXNQYXRoVXBkYXRhYmxlT25OYXZpZ2F0aW9uLFxuXHRcdFx0VUkuSXNFZGl0YWJsZSxcblx0XHRcdHRhYmxlRGVmaW5pdGlvbi5jb250cm9sLmlzSGllcmFyY2h5UGFyZW50Tm9kZVVwZGF0YWJsZSFcblx0XHQpO1xuXHR9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXREZXBlbmRlbnRzKFxuXHR0YWJsZVByb3BlcnRpZXM6IFRhYmxlQmxvY2tQcm9wZXJ0aWVzLFxuXHRwYXJhbWV0ZXJzOiBUYWJsZVRlbXBsYXRpbmdQYXJhbWV0ZXJzLFxuXHR2YXJpYW50TWFuYWdlbWVudDogc3RyaW5nIHwgdW5kZWZpbmVkLFxuXHRjb2xsZWN0aW9uOiBDb250ZXh0XG4pOiBVSTVFbGVtZW50W10ge1xuXHRjb25zdCBpZCA9IHRhYmxlUHJvcGVydGllcy5jb250ZW50SWQ7XG5cdGNvbnN0IHRhYmxlRGVmaW5pdGlvbiA9IHRhYmxlUHJvcGVydGllcy50YWJsZURlZmluaXRpb247XG5cdGNvbnN0IHRhYmxlVHlwZSA9IHRhYmxlUHJvcGVydGllcy50YWJsZURlZmluaXRpb24uY29udHJvbC50eXBlO1xuXHRjb25zdCBoYW5kbGVyUHJvdmlkZXIgPSBwYXJhbWV0ZXJzLmhhbmRsZXJQcm92aWRlcjtcblxuXHRjb25zdCBkZXBlbmRlbnRzOiBVSTVFbGVtZW50W10gPSBbXTtcblx0Y29uc3QgY3V0QWN0aW9uID0gdGFibGVEZWZpbml0aW9uLmFjdGlvbnMuZmluZCgoYSkgPT4gYS5rZXkgPT09IFN0YW5kYXJkQWN0aW9uS2V5cy5DdXQpIGFzIFN0YW5kYXJkQWN0aW9uIHwgdW5kZWZpbmVkO1xuXHRpZiAoY3V0QWN0aW9uPy5pc1RlbXBsYXRlZCA9PT0gXCJ0cnVlXCIgJiYgdGFibGVUeXBlID09PSBcIlRyZWVUYWJsZVwiKSB7XG5cdFx0ZGVwZW5kZW50cy5wdXNoKFxuXHRcdFx0PENvbW1hbmRFeGVjdXRpb25cblx0XHRcdFx0ZXhlY3V0ZT17aGFuZGxlclByb3ZpZGVyLmdldEN1dEhhbmRsZXIoZmFsc2UpfVxuXHRcdFx0XHRjb21tYW5kPVwiQ3V0XCJcblx0XHRcdFx0ZW5hYmxlZD17Y3V0QWN0aW9uLmVuYWJsZWQgYXMgdW5rbm93biBhcyBib29sZWFufVxuXHRcdFx0Lz5cblx0XHQpO1xuXHR9XG5cdGNvbnN0IGNvcHlBY3Rpb24gPSB0YWJsZURlZmluaXRpb24uYWN0aW9ucy5maW5kKChhKSA9PiBhLmtleSA9PT0gU3RhbmRhcmRBY3Rpb25LZXlzLkNvcHkpIGFzIFN0YW5kYXJkQWN0aW9uIHwgdW5kZWZpbmVkO1xuXHRpZiAoY29weUFjdGlvbj8uaXNUZW1wbGF0ZWQgPT09IFwidHJ1ZVwiICYmIHRhYmxlVHlwZSA9PT0gXCJUcmVlVGFibGVcIikge1xuXHRcdGRlcGVuZGVudHMucHVzaChcblx0XHRcdDxDb21tYW5kRXhlY3V0aW9uXG5cdFx0XHRcdGV4ZWN1dGU9e2hhbmRsZXJQcm92aWRlci5nZXRDb3B5SGFuZGxlcihmYWxzZSl9XG5cdFx0XHRcdGNvbW1hbmQ9XCJDb3B5XCJcblx0XHRcdFx0ZW5hYmxlZD17Y29weUFjdGlvbi5lbmFibGVkIGFzIHVua25vd24gYXMgYm9vbGVhbn1cblx0XHRcdC8+XG5cdFx0KTtcblx0fVxuXHRjb25zdCBwYXN0ZUFjdGlvbiA9IHRhYmxlRGVmaW5pdGlvbi5hY3Rpb25zLmZpbmQoKGEpID0+IGEua2V5ID09PSBTdGFuZGFyZEFjdGlvbktleXMuUGFzdGUpIGFzIFN0YW5kYXJkQWN0aW9uIHwgdW5kZWZpbmVkO1xuXHRpZiAocGFzdGVBY3Rpb24/LnZpc2libGUgIT09IFwiZmFsc2VcIiAmJiB0YWJsZVR5cGUgPT09IFwiVHJlZVRhYmxlXCIpIHtcblx0XHRkZXBlbmRlbnRzLnB1c2goXG5cdFx0XHQ8Q29tbWFuZEV4ZWN1dGlvblxuXHRcdFx0XHRleGVjdXRlPXtoYW5kbGVyUHJvdmlkZXIuZ2V0UGFzdGVIYW5kbGVyKGZhbHNlKX1cblx0XHRcdFx0Y29tbWFuZD1cIlBhc3RlXCJcblx0XHRcdFx0ZW5hYmxlZD17cGFzdGVBY3Rpb24/LmVuYWJsZWQgYXMgdW5rbm93biBhcyBib29sZWFufVxuXHRcdFx0Lz5cblx0XHQpO1xuXHR9XG5cblx0Y29uc3QgY3JlYXRlQWN0aW9uID0gdGFibGVEZWZpbml0aW9uLmFjdGlvbnMuZmluZCgoYSkgPT4gYS5rZXkgPT09IFN0YW5kYXJkQWN0aW9uS2V5cy5DcmVhdGUpIGFzIFN0YW5kYXJkQWN0aW9uIHwgdW5kZWZpbmVkO1xuXHRjb25zdCBkZWxldGVBY3Rpb24gPSB0YWJsZURlZmluaXRpb24uYWN0aW9ucy5maW5kKChhKSA9PiBhLmtleSA9PT0gU3RhbmRhcmRBY3Rpb25LZXlzLkRlbGV0ZSkgYXMgU3RhbmRhcmRBY3Rpb24gfCB1bmRlZmluZWQ7XG5cblx0aWYgKFxuXHRcdHRhYmxlRGVmaW5pdGlvbi5hbm5vdGF0aW9uLmlzSW5zZXJ0VXBkYXRlQWN0aW9uc1RlbXBsYXRlZCAmJlxuXHRcdGNyZWF0ZUFjdGlvbj8uaXNUZW1wbGF0ZWQgPT09IFwidHJ1ZVwiICYmXG5cdFx0dGFibGVEZWZpbml0aW9uLmNvbnRyb2wubm9kZVR5cGUgPT09IHVuZGVmaW5lZCAmJlxuXHRcdHRhYmxlRGVmaW5pdGlvbi5jb250cm9sLmVuYWJsZVVwbG9hZFBsdWdpbiA9PT0gZmFsc2Vcblx0KSB7XG5cdFx0Ly8gVGhlIHNob3J0Y3V0IGlzIG5vdCBlbmFibGVkIGluIGNhc2Ugb2YgYSBjcmVhdGUgbWVudSAoaS5lLiB3aGVuIG5vZGVUeXBlIGlzIGRlZmluZWQpXG5cdFx0ZGVwZW5kZW50cy5wdXNoKFxuXHRcdFx0PENvbW1hbmRFeGVjdXRpb25cblx0XHRcdFx0ZXhlY3V0ZT17aGFuZGxlclByb3ZpZGVyLmdldENyZWF0ZUJ1dHRvblByZXNzSGFuZGxlcihmYWxzZSwgZmFsc2UpfVxuXHRcdFx0XHR2aXNpYmxlPXtjcmVhdGVBY3Rpb24udmlzaWJsZSBhcyB1bmtub3duIGFzIGJvb2xlYW59XG5cdFx0XHRcdGVuYWJsZWQ9e2NyZWF0ZUFjdGlvbi5lbmFibGVkIGFzIHVua25vd24gYXMgYm9vbGVhbn1cblx0XHRcdFx0Y29tbWFuZD1cIkNyZWF0ZVwiXG5cdFx0XHQvPlxuXHRcdCk7XG5cdH1cblx0aWYgKGRlbGV0ZUFjdGlvbj8uaXNUZW1wbGF0ZWQgPT09IFwidHJ1ZVwiKSB7XG5cdFx0ZGVwZW5kZW50cy5wdXNoKFxuXHRcdFx0PENvbW1hbmRFeGVjdXRpb25cblx0XHRcdFx0ZXhlY3V0ZT17aGFuZGxlclByb3ZpZGVyLmdldERlbGV0ZUJ1dHRvblByZXNzSGFuZGxlcihmYWxzZSl9XG5cdFx0XHRcdHZpc2libGU9e2RlbGV0ZUFjdGlvbi52aXNpYmxlIGFzIHVua25vd24gYXMgYm9vbGVhbn1cblx0XHRcdFx0ZW5hYmxlZD17ZGVsZXRlQWN0aW9uLmVuYWJsZWQgYXMgdW5rbm93biBhcyBib29sZWFufVxuXHRcdFx0XHRjb21tYW5kPVwiRGVsZXRlRW50cnlcIlxuXHRcdFx0Lz5cblx0XHQpO1xuXHR9XG5cblx0Ly8gTW92ZSB1cCBhbmQgZG93biBhY3Rpb25zXG5cdGNvbnN0IG1vdmVVcEFjdGlvbiA9IHRhYmxlRGVmaW5pdGlvbi5hY3Rpb25zLmZpbmQoKGEpID0+IGEua2V5ID09PSBTdGFuZGFyZEFjdGlvbktleXMuTW92ZVVwKSBhcyBTdGFuZGFyZEFjdGlvbiB8IHVuZGVmaW5lZDtcblx0Y29uc3QgbW92ZURvd25BY3Rpb24gPSB0YWJsZURlZmluaXRpb24uYWN0aW9ucy5maW5kKChhKSA9PiBhLmtleSA9PT0gU3RhbmRhcmRBY3Rpb25LZXlzLk1vdmVEb3duKSBhcyBTdGFuZGFyZEFjdGlvbiB8IHVuZGVmaW5lZDtcblx0aWYgKFxuXHRcdG1vdmVVcEFjdGlvbiAmJlxuXHRcdG1vdmVEb3duQWN0aW9uICYmXG5cdFx0bW92ZVVwQWN0aW9uLnZpc2libGUgIT09IFwiZmFsc2VcIiAmJlxuXHRcdG1vdmVEb3duQWN0aW9uLnZpc2libGUgIT09IFwiZmFsc2VcIiAmJlxuXHRcdHRhYmxlVHlwZSA9PT0gXCJUcmVlVGFibGVcIlxuXHQpIHtcblx0XHRkZXBlbmRlbnRzLnB1c2goXG5cdFx0XHQ8Q29tbWFuZEV4ZWN1dGlvblxuXHRcdFx0XHRleGVjdXRlPXtoYW5kbGVyUHJvdmlkZXIuZ2V0TW92ZVVwRG93bkhhbmRsZXIodHJ1ZSwgZmFsc2UpfVxuXHRcdFx0XHRjb21tYW5kPVwiVGFibGVNb3ZlRWxlbWVudFVwXCJcblx0XHRcdFx0ZW5hYmxlZD17bW92ZVVwQWN0aW9uLmVuYWJsZWQgYXMgdW5rbm93biBhcyBib29sZWFufVxuXHRcdFx0Lz5cblx0XHQpO1xuXHRcdGRlcGVuZGVudHMucHVzaChcblx0XHRcdDxDb21tYW5kRXhlY3V0aW9uXG5cdFx0XHRcdGV4ZWN1dGU9e2hhbmRsZXJQcm92aWRlci5nZXRNb3ZlVXBEb3duSGFuZGxlcihmYWxzZSwgZmFsc2UpfVxuXHRcdFx0XHRjb21tYW5kPVwiVGFibGVNb3ZlRWxlbWVudERvd25cIlxuXHRcdFx0XHRlbmFibGVkPXttb3ZlRG93bkFjdGlvbi5lbmFibGVkIGFzIHVua25vd24gYXMgYm9vbGVhbn1cblx0XHRcdC8+XG5cdFx0KTtcblx0fVxuXG5cdGZvciAoY29uc3QgYWN0aW9uTmFtZSBpbiB0YWJsZURlZmluaXRpb24uY29tbWFuZEFjdGlvbnMpIHtcblx0XHRjb25zdCBhY3Rpb24gPSB0YWJsZURlZmluaXRpb24uY29tbWFuZEFjdGlvbnNbYWN0aW9uTmFtZV07XG5cdFx0Y29uc3QgYWN0aW9uQ29tbWFuZCA9IGdldEFjdGlvbkNvbW1hbmQoXG5cdFx0XHRhY3Rpb25OYW1lLFxuXHRcdFx0YWN0aW9uLFxuXHRcdFx0ZmFsc2UsXG5cdFx0XHRwYXJhbWV0ZXJzLFxuXHRcdFx0Y29sbGVjdGlvbixcblx0XHRcdHRhYmxlRGVmaW5pdGlvbixcblx0XHRcdHRhYmxlUHJvcGVydGllcy5jb250ZXh0T2JqZWN0UGF0aFxuXHRcdCk7XG5cdFx0aWYgKGFjdGlvbkNvbW1hbmQpIHtcblx0XHRcdGRlcGVuZGVudHMucHVzaChhY3Rpb25Db21tYW5kKTtcblx0XHR9XG5cdH1cblxuXHRpZiAodmFyaWFudE1hbmFnZW1lbnQgPT09IFwiTm9uZVwiKSB7XG5cdFx0Ly8gUGVyc2lzdGVuY2UgcHJvdmlkZXIgb2ZmZXJzIHBlcnNpc3RpbmcgcGVyc29uYWxpemF0aW9uIGNoYW5nZXMgd2l0aG91dCB2YXJpYW50IG1hbmFnZW1lbnRcblx0XHRkZXBlbmRlbnRzLnB1c2goPFBlcnNpc3RlbmNlUHJvdmlkZXIgaWQ9e2dlbmVyYXRlKFtpZCwgXCJQZXJzaXN0ZW5jZVByb3ZpZGVyXCJdKX0gZm9yPXtpZH0gLz4pO1xuXHR9XG5cblx0ZGVwZW5kZW50cy5wdXNoKDxDb250ZXh0TWVudVNldHRpbmcgc2NvcGU9XCJTZWxlY3Rpb25cIiAvPik7XG5cblx0aWYgKHRhYmxlRGVmaW5pdGlvbi5jb250cm9sLmVuYWJsZVVwbG9hZFBsdWdpbikge1xuXHRcdGRlcGVuZGVudHMucHVzaChnZXRVcGxvYWRQbHVnaW4odGFibGVEZWZpbml0aW9uLCBpZCwgaGFuZGxlclByb3ZpZGVyKSk7XG5cdH1cblxuXHRyZXR1cm4gZGVwZW5kZW50cztcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSB0YWJsZSBhY3Rpb25zLlxuICogQHBhcmFtIHRhYmxlXG4gKiBAcGFyYW0gcGFyYW1ldGVyc1xuICogQHBhcmFtIGNvbGxlY3Rpb25Db250ZXh0XG4gKiBAcGFyYW0gY29sbGVjdGlvbkVudGl0eVxuICogQHJldHVybnMgVGhlIGxpc3Qgb2YgYWN0aW9uc1xuICovXG5mdW5jdGlvbiBnZXRBY3Rpb25zKFxuXHR0YWJsZTogVGFibGVCbG9ja1Byb3BlcnRpZXMsXG5cdHBhcmFtZXRlcnM6IFRhYmxlVGVtcGxhdGluZ1BhcmFtZXRlcnMsXG5cdGNvbGxlY3Rpb25Db250ZXh0OiBDb250ZXh0LFxuXHRjb2xsZWN0aW9uRW50aXR5OiBFbnRpdHlTZXQgfCBOYXZpZ2F0aW9uUHJvcGVydHlcbik6IENvbnRyb2xbXSB8IHVuZGVmaW5lZCB7XG5cdGNvbnN0IGFjdGlvbnM6IENvbnRyb2xbXSA9IFtdO1xuXHRpZiAodGFibGUuZGlzcGxheVNlZ21lbnRlZEJ1dHRvbikge1xuXHRcdGNvbnN0IGFscEJ1dHRvbkl0ZW1zOiBTZWdtZW50ZWRCdXR0b25JdGVtW10gPSBbXTtcblx0XHRpZiAoQ29tbW9uSGVscGVyLmlzRGVza3RvcCgpKSB7XG5cdFx0XHRhbHBCdXR0b25JdGVtcy5wdXNoKFxuXHRcdFx0XHQ8U2VnbWVudGVkQnV0dG9uSXRlbVxuXHRcdFx0XHRcdHRvb2x0aXA9XCJ7c2FwLmZlLmkxOG4+TV9DT01NT05fSFlCUklEX1NFR01FTlRFRF9CVVRUT05fSVRFTV9UT09MVElQfVwiXG5cdFx0XHRcdFx0a2V5PVwiSHlicmlkXCJcblx0XHRcdFx0XHRpY29uPVwic2FwLWljb246Ly9jaGFydC10YWJsZS12aWV3XCJcblx0XHRcdFx0Lz5cblx0XHRcdCk7XG5cdFx0fVxuXHRcdGFscEJ1dHRvbkl0ZW1zLnB1c2goXG5cdFx0XHQ8U2VnbWVudGVkQnV0dG9uSXRlbVxuXHRcdFx0XHR0b29sdGlwPVwie3NhcC5mZS5pMThuPk1fQ09NTU9OX0NIQVJUX1NFR01FTlRFRF9CVVRUT05fSVRFTV9UT09MVElQfVwiXG5cdFx0XHRcdGtleT1cIkNoYXJ0XCJcblx0XHRcdFx0aWNvbj1cInNhcC1pY29uOi8vYmFyLWNoYXJ0XCJcblx0XHRcdC8+XG5cdFx0KTtcblx0XHRhbHBCdXR0b25JdGVtcy5wdXNoKFxuXHRcdFx0PFNlZ21lbnRlZEJ1dHRvbkl0ZW1cblx0XHRcdFx0dG9vbHRpcD1cIntzYXAuZmUuaTE4bj5NX0NPTU1PTl9UQUJMRV9TRUdNRU5URURfQlVUVE9OX0lURU1fVE9PTFRJUH1cIlxuXHRcdFx0XHRrZXk9XCJUYWJsZVwiXG5cdFx0XHRcdGljb249XCJzYXAtaWNvbjovL3RhYmxlLXZpZXdcIlxuXHRcdFx0Lz5cblx0XHQpO1xuXG5cdFx0YWN0aW9ucy5wdXNoKFxuXHRcdFx0PEFjdGlvblRvb2xiYXJBY3Rpb25cblx0XHRcdFx0bGF5b3V0SW5mb3JtYXRpb249eyd7IGFnZ3JlZ2F0aW9uTmFtZTogXCJlbmRcIiwgYWxpZ25tZW50OiBcIkVuZFwiIH0nfVxuXHRcdFx0XHR2aXNpYmxlPXtcIns9ICR7cGFnZUludGVybmFsPmFscENvbnRlbnRWaWV3fSA9PT0gJ1RhYmxlJyB9XCJ9XG5cdFx0XHQ+XG5cdFx0XHRcdHt7XG5cdFx0XHRcdFx0YWN0aW9uOiAoXG5cdFx0XHRcdFx0XHQ8U2VnbWVudGVkQnV0dG9uXG5cdFx0XHRcdFx0XHRcdGlkPXtnZW5lcmF0ZShbdGFibGUuY29udGVudElkLCBcIlNlZ21lbnRlZEJ1dHRvblwiLCBcIlRlbXBsYXRlQ29udGVudFZpZXdcIl0pfVxuXHRcdFx0XHRcdFx0XHRzZWxlY3Q9e3BhcmFtZXRlcnMuaGFuZGxlclByb3ZpZGVyLnNlZ21lbnRlZEJ1dHRvblByZXNzfVxuXHRcdFx0XHRcdFx0XHRzZWxlY3RlZEtleT1cIntwYWdlSW50ZXJuYWw+YWxwQ29udGVudFZpZXd9XCJcblx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0e3tcblx0XHRcdFx0XHRcdFx0XHRpdGVtczogYWxwQnV0dG9uSXRlbXNcblx0XHRcdFx0XHRcdFx0fX1cblx0XHRcdFx0XHRcdDwvU2VnbWVudGVkQnV0dG9uPlxuXHRcdFx0XHRcdClcblx0XHRcdFx0fX1cblx0XHRcdDwvQWN0aW9uVG9vbGJhckFjdGlvbj5cblx0XHQpO1xuXHR9XG5cblx0YWN0aW9ucy5wdXNoKC4uLmdldFRhYmxlQWN0aW9uc1RlbXBsYXRlKHRhYmxlLCBwYXJhbWV0ZXJzLCBjb2xsZWN0aW9uQ29udGV4dCwgY29sbGVjdGlvbkVudGl0eSkpO1xuXG5cdHJldHVybiBhY3Rpb25zLmxlbmd0aCA+IDAgPyBhY3Rpb25zIDogdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiBnZXRSb3dTZXR0aW5ncyhcblx0dGFibGVEZWZpbml0aW9uOiBUYWJsZVZpc3VhbGl6YXRpb24sXG5cdHJvd0FjdGlvblR5cGU6IFRhYmxlUm93QWN0aW9uVHlwZSB8IHVuZGVmaW5lZCxcblx0dGFibGVUeXBlOiBUYWJsZVR5cGUsXG5cdGhhbmRsZXJQcm92aWRlcjogVGFibGVFdmVudEhhbmRsZXJQcm92aWRlclxuKTogUm93U2V0dGluZ3Mge1xuXHRjb25zdCByb3dBY3Rpb25JdGVtID0gKFxuXHRcdDxSb3dBY3Rpb25JdGVtXG5cdFx0XHR0eXBlPXtyb3dBY3Rpb25UeXBlfVxuXHRcdFx0cHJlc3M9e3RhYmxlVHlwZSA9PT0gXCJSZXNwb25zaXZlVGFibGVcIiA/IHVuZGVmaW5lZCA6IGhhbmRsZXJQcm92aWRlci5yb3dQcmVzc31cblx0XHRcdHZpc2libGU9e3RhYmxlRGVmaW5pdGlvbi5hbm5vdGF0aW9uLnJvdz8udmlzaWJsZX1cblx0XHQvPlxuXHQpO1xuXG5cdHJldHVybiAoXG5cdFx0PFJvd1NldHRpbmdzIG5hdmlnYXRlZD17dGFibGVEZWZpbml0aW9uLmFubm90YXRpb24ucm93Py5yb3dOYXZpZ2F0ZWR9IGhpZ2hsaWdodD17dGFibGVEZWZpbml0aW9uLmFubm90YXRpb24ucm93Py5yb3dIaWdobGlnaHRpbmd9PlxuXHRcdFx0e3tcblx0XHRcdFx0cm93QWN0aW9uczogcm93QWN0aW9uVHlwZSA9PT0gVGFibGVSb3dBY3Rpb25UeXBlLk5hdmlnYXRpb24gPyByb3dBY3Rpb25JdGVtIDogdW5kZWZpbmVkXG5cdFx0XHR9fVxuXHRcdDwvUm93U2V0dGluZ3M+XG5cdCk7XG59XG5cbi8qKlxuICogR2VuZXJhdGVzIHRoZSBjb250ZXh0IG1lbnUgZm9yIHRoZSB0YWJsZS5cbiAqIEBwYXJhbSB0YWJsZVByb3BlcnRpZXNcbiAqIEBwYXJhbSBwYXJhbWV0ZXJzXG4gKiBAcGFyYW0gY29sbGVjdGlvbkVudGl0eVxuICogQHBhcmFtIHJvd0FjdGlvblR5cGVcbiAqIEBwYXJhbSBjb2xsZWN0aW9uXG4gKiBAcGFyYW0gbmF2aWdhdGlvbkluRWRpdE1vZGVcbiAqIEByZXR1cm5zIFRoZSBjb250ZXh0IG1lbnVcbiAqL1xuZnVuY3Rpb24gZ2V0Q29udGV4dE1lbnUoXG5cdHRhYmxlUHJvcGVydGllczogVGFibGVCbG9ja1Byb3BlcnRpZXMsXG5cdHBhcmFtZXRlcnM6IFRhYmxlVGVtcGxhdGluZ1BhcmFtZXRlcnMsXG5cdGNvbGxlY3Rpb25FbnRpdHk6IEVudGl0eVNldCB8IE5hdmlnYXRpb25Qcm9wZXJ0eSxcblx0cm93QWN0aW9uVHlwZTogVGFibGVSb3dBY3Rpb25UeXBlIHwgdW5kZWZpbmVkLFxuXHRjb2xsZWN0aW9uOiBDb250ZXh0LFxuXHRuYXZpZ2F0aW9uSW5FZGl0TW9kZTogYm9vbGVhblxuKTogTWVudSB8IHVuZGVmaW5lZCB7XG5cdGNvbnN0IG1lbnVJdGVtcyA9IGdldFRhYmxlQ29udGV4dE1lbnVUZW1wbGF0ZSh0YWJsZVByb3BlcnRpZXMsIHBhcmFtZXRlcnMsIGNvbGxlY3Rpb24sIGNvbGxlY3Rpb25FbnRpdHkpO1xuXHRpZiAocm93QWN0aW9uVHlwZSA9PT0gVGFibGVSb3dBY3Rpb25UeXBlLk5hdmlnYXRpb24gJiYgIW5hdmlnYXRpb25JbkVkaXRNb2RlKSB7XG5cdFx0bWVudUl0ZW1zLnB1c2goZ2V0U2hhcmV0b0NvbGxhYm9yYXRpb25NYW5hZ2VyVGVtcGxhdGUocGFyYW1ldGVycy5oYW5kbGVyUHJvdmlkZXIsIHRhYmxlUHJvcGVydGllcy5jb250ZW50SWQpKTtcblx0XHRtZW51SXRlbXMucHVzaChnZXRPcGVuSW5OZXdUYWJUZW1wbGF0ZShwYXJhbWV0ZXJzLmhhbmRsZXJQcm92aWRlcikpO1xuXHR9XG5cdGlmIChtZW51SXRlbXMubGVuZ3RoID4gMCkge1xuXHRcdHJldHVybiAoXG5cdFx0XHQ8TWVudSBpdGVtU2VsZWN0ZWQ9e3BhcmFtZXRlcnMuaGFuZGxlclByb3ZpZGVyLmNvbnRleHRNZW51SXRlbVNlbGVjdGVkfT5cblx0XHRcdFx0e3tcblx0XHRcdFx0XHRkZXBlbmRlbnRzOiBnZXREZXBlbmRlbnRzRm9yQ29udGV4dE1lbnUoXG5cdFx0XHRcdFx0XHR0YWJsZVByb3BlcnRpZXMudGFibGVEZWZpbml0aW9uLFxuXHRcdFx0XHRcdFx0cGFyYW1ldGVycyxcblx0XHRcdFx0XHRcdHRhYmxlUHJvcGVydGllcy5jb250ZXh0T2JqZWN0UGF0aCxcblx0XHRcdFx0XHRcdGNvbGxlY3Rpb25cblx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdGl0ZW1zOiBtZW51SXRlbXNcblx0XHRcdFx0fX1cblx0XHRcdDwvTWVudT5cblx0XHQpO1xuXHR9XG5cdHJldHVybiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogR2VuZXJhdGVzIHRoZSB0ZW1wbGF0ZSBzdHJpbmcgZm9yIHRoZSBNZW51SXRlbS5cbiAqIEBwYXJhbSBoYW5kbGVyUHJvdmlkZXJcbiAqIEBwYXJhbSB0YWJsZUlkXG4gKiBAcmV0dXJucyBUaGUgeG1sIHN0cmluZyByZXByZXNlbnRhdGlvbiBmb3IgdGhlIE1lbnVJdGVtXG4gKi9cbmZ1bmN0aW9uIGdldFNoYXJldG9Db2xsYWJvcmF0aW9uTWFuYWdlclRlbXBsYXRlKGhhbmRsZXJQcm92aWRlcjogVGFibGVFdmVudEhhbmRsZXJQcm92aWRlciwgdGFibGVJZDogc3RyaW5nKTogTWVudUl0ZW0ge1xuXHQvLyBUaGUgdmlzaWJsZSBwcm9wZXJ0eSB3aWxsIGJlIHNldCBhdCBydW50aW1lIHdoZW4gdGhlIGNvbGxhYm9yYXRpb24gbWFuYWdlciBpcyBhdmFpbGFibGUgYW5kIGFsbCBvdGhlciBjb25kaXRpb25zIGFyZSBtZXRcblx0cmV0dXJuIChcblx0XHQ8TWVudUl0ZW1cblx0XHRcdGNvcmU6cmVxdWlyZT1cIntBUEk6ICdzYXAvZmUvbWFjcm9zL3RhYmxlL1RhYmxlQVBJJ31cIlxuXHRcdFx0c3RhcnRzU2VjdGlvbj17dHJ1ZX1cblx0XHRcdGlkPXtnZW5lcmF0ZShbdGFibGVJZCwgXCJDb250ZXh0TWVudVwiLCBcIkNvbGxhYm9yYXRpb25NYW5hZ2VyXCJdKX1cblx0XHRcdHRleHQ9XCJ7c2FwLmZlLmkxOG4+TV9DT01NT05fVEFCTEVfQ09OVEVYVF9NRU5VX1NIQVJFX1RPX0NPTExBQk9SQVRJT05fTUFOQUdFUn1cIlxuXHRcdFx0cHJlc3M9e2hhbmRsZXJQcm92aWRlci5jb250ZXh0TWVudVNoYXJlVG9Db2xsYWJvcmF0aW9uTWFuYWdlcn1cblx0XHRcdGVuYWJsZWQ9XCJ7PSAke2ludGVybmFsPmNvbnRleHRtZW51L251bWJlck9mU2VsZWN0ZWRDb250ZXh0c30gPiAwfVwiXG5cdFx0XHR2aXNpYmxlPXtmYWxzZX1cblx0XHQvPlxuXHQpO1xufVxuXG4vKipcbiAqIEdlbmVyYXRlcyB0aGUgdGVtcGxhdGUgc3RyaW5nIGZvciB0aGUgTWVudUl0ZW0uXG4gKiBAcGFyYW0gaGFuZGxlclByb3ZpZGVyXG4gKiBAcmV0dXJucyBUaGUgeG1sIHN0cmluZyByZXByZXNlbnRhdGlvbiBmb3IgdGhlIE1lbnVJdGVtXG4gKi9cbmZ1bmN0aW9uIGdldE9wZW5Jbk5ld1RhYlRlbXBsYXRlKGhhbmRsZXJQcm92aWRlcjogVGFibGVFdmVudEhhbmRsZXJQcm92aWRlcik6IE1lbnVJdGVtIHtcblx0Ly8gVGhlICdPcGVuIGluIE5ldyBUYWInIGFjdGlvbiBzaG91bGQgbm90IGJlIHZpc2libGUgZm9yIHN0aWNreSBzZXNzaW9ucyBpbiBlZGl0IG1vZGVcblx0Ly8gRm9yIHRoZSBjb250ZXh0IG1lbnUsIHRoZSB2aXNpYmlsaXR5IHNob3VsZCBhbHNvIGNvbnNpZGVyIHRoZSAnaW5hY3RpdmVDb250ZXh0JyBwcm9wZXJ0eTpcblx0Ly8gb25seSB3aGVuIGF0IGxlYXN0IG9uZSBzZWxlY3RlZCBjb250ZXh0IGlzIGFjdGl2ZSAoaS5lLiBcImNvbnRleHRtZW51L2luYWN0aXZlQ29udGV4dFwiIGlzIGZhbHNlKSwgdGhlIGFjdGlvbiBzaG91bGQgYmUgdmlzaWJsZSBpbiB0aGUgY29udGV4dCBtZW51XG5cdC8vIFRoZSBzZWNvbmQgaXMgb25seSByZWxldmFudCB3aGVuIHRoZSB0YWJsZSBtYW5pZmVzdCBzZXR0aW5nIFwiY3JlYXRpb25Nb2RlXCIgaXMgXCJJbmxpbmVDcmVhdGlvblJvd3NcIlxuXHRjb25zdCB2aXNpYmxlID0gYW5kKFxuXHRcdG5vdChhbmQocGF0aEluTW9kZWwoXCIvc2Vzc2lvbk9uXCIsIFwiaW50ZXJuYWxcIiksIFVJLklzRWRpdGFibGUpKSxcblx0XHRub3QocGF0aEluTW9kZWwoXCJjb250ZXh0bWVudS9pbmFjdGl2ZUNvbnRleHRcIiwgXCJpbnRlcm5hbFwiKSlcblx0KTtcblxuXHRyZXR1cm4gKFxuXHRcdDxNZW51SXRlbVxuXHRcdFx0Y29yZTpyZXF1aXJlPVwie0FQSTogJ3NhcC9mZS9tYWNyb3MvdGFibGUvVGFibGVBUEknfVwiXG5cdFx0XHRzdGFydHNTZWN0aW9uPXt0cnVlfVxuXHRcdFx0dGV4dD1cIntzYXAuZmUuaTE4bj5NX0NPTU1PTl9UQUJMRV9DT05URVhUX01FTlVfT1BFTl9JTl9ORVdfVEFCfVwiXG5cdFx0XHRwcmVzcz17aGFuZGxlclByb3ZpZGVyLmNvbnRleHRNZW51T3BlbkluTmV3VGFifVxuXHRcdFx0ZW5hYmxlZD1cIns9ICR7aW50ZXJuYWw+Y29udGV4dG1lbnUvbnVtYmVyT2ZTZWxlY3RlZENvbnRleHRzfSA+IDB9XCJcblx0XHRcdHZpc2libGU9e3Zpc2libGV9XG5cdFx0Lz5cblx0KTtcbn1cblxuLyoqXG4gKiBHZW5lcmF0ZXMgdGhlIHRlbXBsYXRlIHN0cmluZyBmb3IgdGhlIE1lbnUgZGVwZW5kZW50cy5cbiAqIEBwYXJhbSB0YWJsZURlZmluaXRpb25cbiAqIEBwYXJhbSBwYXJhbWV0ZXJzXG4gKiBAcGFyYW0gY29udGV4dE9iamVjdFBhdGhcbiAqIEBwYXJhbSBjb2xsZWN0aW9uXG4gKiBAcmV0dXJucyBUaGUgeG1sIHN0cmluZyByZXByZXNlbnRhdGlvbiAgdGhlIE1lbnUgZGVwZW5kZW50c1xuICovXG5mdW5jdGlvbiBnZXREZXBlbmRlbnRzRm9yQ29udGV4dE1lbnUoXG5cdHRhYmxlRGVmaW5pdGlvbjogVGFibGVWaXN1YWxpemF0aW9uLFxuXHRwYXJhbWV0ZXJzOiBUYWJsZVRlbXBsYXRpbmdQYXJhbWV0ZXJzLFxuXHRjb250ZXh0T2JqZWN0UGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aDxMaW5lSXRlbSB8IFNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnQgfCBQcmVzZW50YXRpb25WYXJpYW50Pixcblx0Y29sbGVjdGlvbjogQ29udGV4dFxuKTogVUk1RWxlbWVudFtdIHwgdW5kZWZpbmVkIHtcblx0Y29uc3QgZGVwZW5kZW50czogVUk1RWxlbWVudFtdID0gW107XG5cdGNvbnN0IHRhYmxlVHlwZSA9IHRhYmxlRGVmaW5pdGlvbi5jb250cm9sLnR5cGU7XG5cdGNvbnN0IGNyZWF0ZUFjdGlvbiA9IHRhYmxlRGVmaW5pdGlvbi5hY3Rpb25zLmZpbmQoKGEpID0+IGEua2V5ID09PSBTdGFuZGFyZEFjdGlvbktleXMuQ3JlYXRlKSBhcyBTdGFuZGFyZEFjdGlvbiB8IHVuZGVmaW5lZDtcblx0aWYgKGNyZWF0ZUFjdGlvbj8uaXNUZW1wbGF0ZWQgPT09IFwidHJ1ZVwiICYmIHRhYmxlVHlwZSA9PT0gXCJUcmVlVGFibGVcIikge1xuXHRcdGRlcGVuZGVudHMucHVzaChcblx0XHRcdDxDb21tYW5kRXhlY3V0aW9uXG5cdFx0XHRcdGV4ZWN1dGU9e3BhcmFtZXRlcnMuaGFuZGxlclByb3ZpZGVyLmdldENyZWF0ZUJ1dHRvblByZXNzSGFuZGxlcih0cnVlLCBmYWxzZSl9XG5cdFx0XHRcdGNvbW1hbmQ9XCJDcmVhdGU6OkNvbnRleHRNZW51XCJcblx0XHRcdFx0dmlzaWJsZT17Y3JlYXRlQWN0aW9uLnZpc2libGUgYXMgdW5rbm93biBhcyBib29sZWFufVxuXHRcdFx0XHRlbmFibGVkPXtjcmVhdGVBY3Rpb24uZW5hYmxlZEZvckNvbnRleHRNZW51IGFzIHVua25vd24gYXMgYm9vbGVhbn1cblx0XHRcdC8+XG5cdFx0KTtcblx0fVxuXG5cdGNvbnN0IGN1dEFjdGlvbiA9IHRhYmxlRGVmaW5pdGlvbi5hY3Rpb25zLmZpbmQoKGEpID0+IGEua2V5ID09PSBTdGFuZGFyZEFjdGlvbktleXMuQ3V0KSBhcyBTdGFuZGFyZEFjdGlvbiB8IHVuZGVmaW5lZDtcblx0aWYgKGN1dEFjdGlvbj8uaXNUZW1wbGF0ZWQgPT09IFwidHJ1ZVwiKSB7XG5cdFx0ZGVwZW5kZW50cy5wdXNoKFxuXHRcdFx0PENvbW1hbmRFeGVjdXRpb25cblx0XHRcdFx0ZXhlY3V0ZT17cGFyYW1ldGVycy5oYW5kbGVyUHJvdmlkZXIuZ2V0Q3V0SGFuZGxlcih0cnVlKX1cblx0XHRcdFx0Y29tbWFuZD1cIkN1dDo6Q29udGV4dE1lbnVcIlxuXHRcdFx0XHRlbmFibGVkPXtjdXRBY3Rpb24uZW5hYmxlZEZvckNvbnRleHRNZW51IGFzIHVua25vd24gYXMgYm9vbGVhbn1cblx0XHRcdC8+XG5cdFx0KTtcblx0fVxuXHRjb25zdCBjb3B5QWN0aW9uID0gdGFibGVEZWZpbml0aW9uLmFjdGlvbnMuZmluZCgoYSkgPT4gYS5rZXkgPT09IFN0YW5kYXJkQWN0aW9uS2V5cy5Db3B5KSBhcyBTdGFuZGFyZEFjdGlvbiB8IHVuZGVmaW5lZDtcblx0aWYgKGNvcHlBY3Rpb24/LmlzVGVtcGxhdGVkID09PSBcInRydWVcIikge1xuXHRcdGRlcGVuZGVudHMucHVzaChcblx0XHRcdDxDb21tYW5kRXhlY3V0aW9uXG5cdFx0XHRcdGV4ZWN1dGU9e3BhcmFtZXRlcnMuaGFuZGxlclByb3ZpZGVyLmdldENvcHlIYW5kbGVyKHRydWUpfVxuXHRcdFx0XHRjb21tYW5kPVwiQ29weTo6Q29udGV4dE1lbnVcIlxuXHRcdFx0XHRlbmFibGVkPXtjb3B5QWN0aW9uLmVuYWJsZWRGb3JDb250ZXh0TWVudSBhcyB1bmtub3duIGFzIGJvb2xlYW59XG5cdFx0XHQvPlxuXHRcdCk7XG5cdH1cblx0Y29uc3QgcGFzdGVBY3Rpb24gPSB0YWJsZURlZmluaXRpb24uYWN0aW9ucy5maW5kKChhKSA9PiBhLmtleSA9PT0gU3RhbmRhcmRBY3Rpb25LZXlzLlBhc3RlKSBhcyBTdGFuZGFyZEFjdGlvbiB8IHVuZGVmaW5lZDtcblx0aWYgKHBhc3RlQWN0aW9uPy52aXNpYmxlICE9PSBcImZhbHNlXCIgJiYgdGFibGVUeXBlID09PSBcIlRyZWVUYWJsZVwiKSB7XG5cdFx0ZGVwZW5kZW50cy5wdXNoKFxuXHRcdFx0PENvbW1hbmRFeGVjdXRpb25cblx0XHRcdFx0ZXhlY3V0ZT17cGFyYW1ldGVycy5oYW5kbGVyUHJvdmlkZXIuZ2V0UGFzdGVIYW5kbGVyKHRydWUpfVxuXHRcdFx0XHRjb21tYW5kPVwiUGFzdGU6OkNvbnRleHRNZW51XCJcblx0XHRcdFx0ZW5hYmxlZD17cGFzdGVBY3Rpb24/LmVuYWJsZWRGb3JDb250ZXh0TWVudSBhcyB1bmtub3duIGFzIGJvb2xlYW59XG5cdFx0XHQvPlxuXHRcdCk7XG5cdH1cblxuXHRjb25zdCBkZWxldGVBY3Rpb24gPSB0YWJsZURlZmluaXRpb24uYWN0aW9ucy5maW5kKChhKSA9PiBhLmtleSA9PT0gU3RhbmRhcmRBY3Rpb25LZXlzLkRlbGV0ZSkgYXMgU3RhbmRhcmRBY3Rpb24gfCB1bmRlZmluZWQ7XG5cblx0aWYgKGRlbGV0ZUFjdGlvbj8uaXNUZW1wbGF0ZWQgPT09IFwidHJ1ZVwiKSB7XG5cdFx0ZGVwZW5kZW50cy5wdXNoKFxuXHRcdFx0PENvbW1hbmRFeGVjdXRpb25cblx0XHRcdFx0ZXhlY3V0ZT17cGFyYW1ldGVycy5oYW5kbGVyUHJvdmlkZXIuZ2V0RGVsZXRlQnV0dG9uUHJlc3NIYW5kbGVyKHRydWUpfVxuXHRcdFx0XHR2aXNpYmxlPXtkZWxldGVBY3Rpb24udmlzaWJsZSBhcyB1bmtub3duIGFzIGJvb2xlYW59XG5cdFx0XHRcdGVuYWJsZWQ9e2RlbGV0ZUFjdGlvbi5lbmFibGVkRm9yQ29udGV4dE1lbnUgYXMgdW5rbm93biBhcyBib29sZWFufVxuXHRcdFx0XHRjb21tYW5kPVwiRGVsZXRlRW50cnk6OkNvbnRleHRNZW51XCJcblx0XHRcdC8+XG5cdFx0KTtcblx0fVxuXG5cdC8vIE1vdmUgdXAgYW5kIGRvd24gYWN0aW9uc1xuXHRjb25zdCBtb3ZlVXBBY3Rpb24gPSB0YWJsZURlZmluaXRpb24uYWN0aW9ucy5maW5kKChhKSA9PiBhLmtleSA9PT0gU3RhbmRhcmRBY3Rpb25LZXlzLk1vdmVVcCkgYXMgU3RhbmRhcmRBY3Rpb24gfCB1bmRlZmluZWQ7XG5cdGNvbnN0IG1vdmVEb3duQWN0aW9uID0gdGFibGVEZWZpbml0aW9uLmFjdGlvbnMuZmluZCgoYSkgPT4gYS5rZXkgPT09IFN0YW5kYXJkQWN0aW9uS2V5cy5Nb3ZlRG93bikgYXMgU3RhbmRhcmRBY3Rpb24gfCB1bmRlZmluZWQ7XG5cdGlmIChcblx0XHRtb3ZlVXBBY3Rpb24gJiZcblx0XHRtb3ZlRG93bkFjdGlvbiAmJlxuXHRcdG1vdmVVcEFjdGlvbi52aXNpYmxlICE9PSBcImZhbHNlXCIgJiZcblx0XHRtb3ZlRG93bkFjdGlvbi52aXNpYmxlICE9PSBcImZhbHNlXCIgJiZcblx0XHR0YWJsZVR5cGUgPT09IFwiVHJlZVRhYmxlXCJcblx0KSB7XG5cdFx0ZGVwZW5kZW50cy5wdXNoKFxuXHRcdFx0PENvbW1hbmRFeGVjdXRpb25cblx0XHRcdFx0ZXhlY3V0ZT17cGFyYW1ldGVycy5oYW5kbGVyUHJvdmlkZXIuZ2V0TW92ZVVwRG93bkhhbmRsZXIodHJ1ZSwgdHJ1ZSl9XG5cdFx0XHRcdGNvbW1hbmQ9XCJUYWJsZU1vdmVFbGVtZW50VXA6OkNvbnRleHRNZW51XCJcblx0XHRcdFx0ZW5hYmxlZD17bW92ZVVwQWN0aW9uLmVuYWJsZWRGb3JDb250ZXh0TWVudSBhcyB1bmtub3duIGFzIGJvb2xlYW59XG5cdFx0XHQvPlxuXHRcdCk7XG5cdFx0ZGVwZW5kZW50cy5wdXNoKFxuXHRcdFx0PENvbW1hbmRFeGVjdXRpb25cblx0XHRcdFx0ZXhlY3V0ZT17cGFyYW1ldGVycy5oYW5kbGVyUHJvdmlkZXIuZ2V0TW92ZVVwRG93bkhhbmRsZXIoZmFsc2UsIHRydWUpfVxuXHRcdFx0XHRjb21tYW5kPVwiVGFibGVNb3ZlRWxlbWVudERvd246OkNvbnRleHRNZW51XCJcblx0XHRcdFx0ZW5hYmxlZD17bW92ZURvd25BY3Rpb24uZW5hYmxlZEZvckNvbnRleHRNZW51IGFzIHVua25vd24gYXMgYm9vbGVhbn1cblx0XHRcdC8+XG5cdFx0KTtcblx0fVxuXG5cdGZvciAoY29uc3QgYWN0aW9uTmFtZSBpbiB0YWJsZURlZmluaXRpb24uY29tbWFuZEFjdGlvbnMpIHtcblx0XHRjb25zdCBhY3Rpb24gPSB0YWJsZURlZmluaXRpb24uY29tbWFuZEFjdGlvbnNbYWN0aW9uTmFtZV07XG5cdFx0Y29uc3QgYWN0aW9uQ29tbWFuZCA9IGdldEFjdGlvbkNvbW1hbmQoYWN0aW9uTmFtZSwgYWN0aW9uLCB0cnVlLCBwYXJhbWV0ZXJzLCBjb2xsZWN0aW9uLCB0YWJsZURlZmluaXRpb24sIGNvbnRleHRPYmplY3RQYXRoKTtcblx0XHRpZiAoYWN0aW9uQ29tbWFuZCkge1xuXHRcdFx0ZGVwZW5kZW50cy5wdXNoKGFjdGlvbkNvbW1hbmQpO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gZGVwZW5kZW50cy5sZW5ndGggPiAwID8gZGVwZW5kZW50cyA6IHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBHZW5lcmF0ZXMgdGhlIFZhcmlhbnRNYW5hZ2VtZW50IGZvciB0aGUgdGFibGUuXG4gKiBAcGFyYW0gdmFyaWFudE1hbmFnZW1lbnRcbiAqIEBwYXJhbSBpZFxuICogQHBhcmFtIGhlYWRlckxldmVsXG4gKiBAcGFyYW0gaGFuZGxlclByb3ZpZGVyXG4gKiBAcmV0dXJucyBUaGUgVmFyaWFudE1hbmFnZW1lbnQgY29udHJvbFxuICovXG5mdW5jdGlvbiBnZXRWYXJpYW50TWFuYWdlbWVudChcblx0dmFyaWFudE1hbmFnZW1lbnQ6IHN0cmluZyxcblx0aWQ6IHN0cmluZyxcblx0aGVhZGVyTGV2ZWw6IFRpdGxlTGV2ZWwsXG5cdGhhbmRsZXJQcm92aWRlcjogVGFibGVFdmVudEhhbmRsZXJQcm92aWRlclxuKTogVmFyaWFudE1hbmFnZW1lbnQgfCB1bmRlZmluZWQge1xuXHRpZiAodmFyaWFudE1hbmFnZW1lbnQgPT09IFwiQ29udHJvbFwiKSB7XG5cdFx0cmV0dXJuIChcblx0XHRcdDxWYXJpYW50TWFuYWdlbWVudFxuXHRcdFx0XHRpZD17Z2VuZXJhdGUoW2lkLCBcIlZNXCJdKX1cblx0XHRcdFx0c2hvd1NldEFzRGVmYXVsdD17dHJ1ZX1cblx0XHRcdFx0c2VsZWN0PXtoYW5kbGVyUHJvdmlkZXIudmFyaWFudFNlbGVjdGVkfVxuXHRcdFx0XHRoZWFkZXJMZXZlbD17aGVhZGVyTGV2ZWx9XG5cdFx0XHRcdHNhdmU9e2hhbmRsZXJQcm92aWRlci52YXJpYW50U2F2ZWR9XG5cdFx0XHRcdGZvcj17W2lkXX1cblx0XHRcdD48L1ZhcmlhbnRNYW5hZ2VtZW50PlxuXHRcdCk7XG5cdH1cblx0cmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBHZW5lcmF0ZXMgdGhlIFF1aWNrVmFyaWFudFNlbGVjdGlvbiBjb250cm9sIGZvciB0aGUgdGFibGUuXG4gKiBAcGFyYW0gdGFibGVQcm9wZXJ0aWVzIFRoZSB0YWJsZSBwcm9wZXJ0aWVzXG4gKiBAcmV0dXJucyBUaGUgUXVpY2tWYXJpYW50U2VsZWN0aW9uIGNvbnRyb2xcbiAqL1xuZnVuY3Rpb24gZ2V0UXVpY2tGaWx0ZXIodGFibGVQcm9wZXJ0aWVzOiBUYWJsZUJsb2NrUHJvcGVydGllcyk6IFF1aWNrRmlsdGVyU2VsZWN0b3IgfCB1bmRlZmluZWQge1xuXHRjb25zdCBxdWlja0ZpbHRlcnMgPSB0YWJsZVByb3BlcnRpZXMudGFibGVEZWZpbml0aW9uLmNvbnRyb2wuZmlsdGVycz8ucXVpY2tGaWx0ZXJzO1xuXHRpZiAocXVpY2tGaWx0ZXJzKSB7XG5cdFx0cmV0dXJuIChcblx0XHRcdDxRdWlja0ZpbHRlclNlbGVjdG9yXG5cdFx0XHRcdGlkPXtnZW5lcmF0ZShbdGFibGVQcm9wZXJ0aWVzLmNvbnRlbnRJZCwgXCJRdWlja0ZpbHRlckNvbnRhaW5lclwiXSl9XG5cdFx0XHRcdHBhdGhzPXtxdWlja0ZpbHRlcnMucGF0aHMubWFwKChwYXRoKSA9PiBwYXRoLmFubm90YXRpb25QYXRoKX1cblx0XHRcdFx0c2hvd0NvdW50cz17cXVpY2tGaWx0ZXJzLnNob3dDb3VudHN9XG5cdFx0XHQvPlxuXHRcdCk7XG5cdH1cblx0cmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBHZW5lcmF0ZXMgQ29weVByb3ZpZGVyIGZvciB0aGUgdGFibGUuXG4gKiBAcGFyYW0gdGFibGVQcm9wZXJ0aWVzXG4gKiBAcmV0dXJucyBUaGUgQ29weVByb3ZpZGVyXG4gKi9cbmZ1bmN0aW9uIGdldENvcHlQcm92aWRlcih0YWJsZVByb3BlcnRpZXM6IFRhYmxlQmxvY2tQcm9wZXJ0aWVzKTogQ29weVByb3ZpZGVyIHtcblx0Y29uc3QgY29udGV4dE9iamVjdFBhdGggPSB0YWJsZVByb3BlcnRpZXMuY29udGV4dE9iamVjdFBhdGg7XG5cblx0bGV0IHZpc2libGVFeHByZXNzaW9uOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj47XG5cdGlmICh0YWJsZVByb3BlcnRpZXMudGFibGVEZWZpbml0aW9uLmNvbnRyb2wuZGlzYWJsZUNvcHlUb0NsaXBib2FyZCkge1xuXHRcdHZpc2libGVFeHByZXNzaW9uID0gY29uc3RhbnQoZmFsc2UpO1xuXHR9IGVsc2UgaWYgKHRhYmxlUHJvcGVydGllcy50YWJsZURlZmluaXRpb24uY29udHJvbC50eXBlID09PSBcIlRyZWVUYWJsZVwiKSB7XG5cdFx0Ly8gRm9yIGEgVHJlZVRhYmxlLCB0aGUgY29weSBidXR0b24gc2hhbGwgYmUgdmlzaWJsZSBvbmx5IHdoZW4gZHJhZyBhbmQgZHJvcCBpcyBkaXNhYmxlZFxuXHRcdGlmIChjb250ZXh0T2JqZWN0UGF0aC5zdGFydGluZ0VudGl0eVNldCA9PT0gY29udGV4dE9iamVjdFBhdGgudGFyZ2V0RW50aXR5U2V0KSB7XG5cdFx0XHQvLyBMaXN0UmVwb3J0OiBlbmFibGUgY29weSBpZiB0aGUgZW50aXR5IGlzIG5vdCBkcmFmdC1lbmFibGVkXG5cdFx0XHR2aXNpYmxlRXhwcmVzc2lvbiA9IGNvbnN0YW50KChjb250ZXh0T2JqZWN0UGF0aC5zdGFydGluZ0VudGl0eVNldCBhcyBFbnRpdHlTZXQpLmFubm90YXRpb25zLkNvbW1vbj8uRHJhZnRSb290ID09PSB1bmRlZmluZWQpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBPYmplY3RQYWdlOiBlbmFibGUgY29weSBpbiByZWFkLW9ubHlcblx0XHRcdHZpc2libGVFeHByZXNzaW9uID0gbm90KFVJLklzRWRpdGFibGUpO1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHR2aXNpYmxlRXhwcmVzc2lvbiA9IGNvbnN0YW50KHRydWUpO1xuXHR9XG5cblx0cmV0dXJuIDxDb3B5UHJvdmlkZXIgdmlzaWJsZT17dmlzaWJsZUV4cHJlc3Npb259IC8+O1xufVxuXG4vKipcbiAqIEdlbmVyYXRlcyB0aGUgQ2VsbFNlbGVjdG9yIGZvciB0aGUgdGFibGUuXG4gKiBAcGFyYW0gdGFibGVQcm9wZXJ0aWVzXG4gKiBAcmV0dXJucyBUaGUgQ2VsbFNlbGVjdG9yXG4gKi9cbmZ1bmN0aW9uIGdldENlbGxTZWxlY3Rvcih0YWJsZVByb3BlcnRpZXM6IFRhYmxlQmxvY2tQcm9wZXJ0aWVzKTogQ2VsbFNlbGVjdG9yIHwgdW5kZWZpbmVkIHtcblx0Y29uc3QgdGFibGVUeXBlID0gdGFibGVQcm9wZXJ0aWVzLnRhYmxlRGVmaW5pdGlvbi5jb250cm9sLnR5cGU7XG5cdGlmIChcblx0XHQhdGFibGVQcm9wZXJ0aWVzLnRhYmxlRGVmaW5pdGlvbi5jb250cm9sLmRpc2FibGVDb3B5VG9DbGlwYm9hcmQgJiZcblx0XHR0YWJsZVR5cGUgJiZcblx0XHRbXCJSZXNwb25zaXZlVGFibGVcIiwgXCJHcmlkVGFibGVcIiwgXCJUcmVlVGFibGVcIl0uaW5jbHVkZXModGFibGVUeXBlKVxuXHQpIHtcblx0XHRyZXR1cm4gKFxuXHRcdFx0PENlbGxTZWxlY3RvclxuXHRcdFx0XHRlbmFibGVkPXtvcihcblx0XHRcdFx0XHR0YWJsZVR5cGUgIT09IFwiVHJlZVRhYmxlXCIsXG5cdFx0XHRcdFx0bm90KGdldERyYWdBbmREcm9wRW5hYmxlZCh0YWJsZVByb3BlcnRpZXMuY29udGV4dE9iamVjdFBhdGgsIHRhYmxlUHJvcGVydGllcy50YWJsZURlZmluaXRpb24pKVxuXHRcdFx0XHQpfVxuXHRcdFx0XHRyYW5nZUxpbWl0PXsyMDB9XG5cdFx0XHQvPlxuXHRcdCk7XG5cdH1cblx0cmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBHZW5lcmF0ZXMgdGhlIENyZWF0aW9uUm93IGZvciB0aGUgdGFibGUuXG4gKiBAcGFyYW0gdGFibGVQcm9wZXJ0aWVzXG4gKiBAcGFyYW0gaGFuZGxlclByb3ZpZGVyXG4gKiBAcmV0dXJucyBUaGUgQ3JlYXRpb25Sb3dcbiAqL1xuZnVuY3Rpb24gZ2V0Q3JlYXRpb25Sb3codGFibGVQcm9wZXJ0aWVzOiBUYWJsZUJsb2NrUHJvcGVydGllcywgaGFuZGxlclByb3ZpZGVyOiBUYWJsZUV2ZW50SGFuZGxlclByb3ZpZGVyKTogQ3JlYXRpb25Sb3cgfCB1bmRlZmluZWQge1xuXHRpZiAoKHRhYmxlUHJvcGVydGllcy5jcmVhdGlvbk1vZGU/Lm5hbWUgYXMgc3RyaW5nKSA9PT0gQ3JlYXRpb25Nb2RlLkNyZWF0aW9uUm93KSB7XG5cdFx0Y29uc3QgY3JlYXRpb25Sb3dBY3Rpb24gPSB0YWJsZVByb3BlcnRpZXMudGFibGVEZWZpbml0aW9uLmFjdGlvbnMuZmluZCgoYSkgPT4gYS5rZXkgPT09IFN0YW5kYXJkQWN0aW9uS2V5cy5DcmVhdGlvblJvdykgYXNcblx0XHRcdHwgU3RhbmRhcmRBY3Rpb25cblx0XHRcdHwgdW5kZWZpbmVkO1xuXHRcdGlmIChjcmVhdGlvblJvd0FjdGlvbj8uaXNUZW1wbGF0ZWQpIHtcblx0XHRcdGNvbnN0IGN1c3RvbURhdGEgPSBjcmVhdGVDdXN0b21EYXRhcyhbXG5cdFx0XHRcdHsga2V5OiBcImRpc2FibGVBZGRSb3dCdXR0b25Gb3JFbXB0eURhdGFcIiwgdmFsdWU6IHRhYmxlUHJvcGVydGllcy50YWJsZURlZmluaXRpb24uY29udHJvbC5kaXNhYmxlQWRkUm93QnV0dG9uRm9yRW1wdHlEYXRhIH0sXG5cdFx0XHRcdHsga2V5OiBcImN1c3RvbVZhbGlkYXRpb25GdW5jdGlvblwiLCB2YWx1ZTogdGFibGVQcm9wZXJ0aWVzLnRhYmxlRGVmaW5pdGlvbi5jb250cm9sLmN1c3RvbVZhbGlkYXRpb25GdW5jdGlvbiB9XG5cdFx0XHRdKTtcblxuXHRcdFx0cmV0dXJuIChcblx0XHRcdFx0PENyZWF0aW9uUm93XG5cdFx0XHRcdFx0aWQ9e2dlbmVyYXRlKFt0YWJsZVByb3BlcnRpZXMuY29udGVudElkLCBDcmVhdGlvbk1vZGUuQ3JlYXRpb25Sb3ddKX1cblx0XHRcdFx0XHR2aXNpYmxlPXtjcmVhdGlvblJvd0FjdGlvbi52aXNpYmxlIGFzIHVua25vd24gYXMgYm9vbGVhbn1cblx0XHRcdFx0XHRhcHBseT17aGFuZGxlclByb3ZpZGVyLmdldENyZWF0ZUJ1dHRvblByZXNzSGFuZGxlcihmYWxzZSwgdHJ1ZSl9XG5cdFx0XHRcdFx0YXBwbHlFbmFibGVkPXtjcmVhdGlvblJvd0FjdGlvbi5lbmFibGVkIGFzIHVua25vd24gYXMgYm9vbGVhbn1cblx0XHRcdFx0PlxuXHRcdFx0XHRcdHt7XG5cdFx0XHRcdFx0XHRjdXN0b21EYXRhOiBjdXN0b21EYXRhXG5cdFx0XHRcdFx0fX1cblx0XHRcdFx0PC9DcmVhdGlvblJvdz5cblx0XHRcdCk7XG5cdFx0fVxuXHR9XG5cdHJldHVybiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogR2VuZXJhdGVzIHRoZSBkcmFnIGFuZCBkcm9wIGNvbmZpZyBmb3IgdGhlIHRhYmxlLlxuICogQHBhcmFtIHRhYmxlUHJvcGVydGllc1xuICogQHBhcmFtIGhhbmRsZXJQcm92aWRlclxuICogQHJldHVybnMgVGhlIGRyYWcgYW5kIGRyb3AgY29uZmlnXG4gKi9cbmZ1bmN0aW9uIGdldERyYWdBbmREcm9wQ29uZmlnKFxuXHR0YWJsZVByb3BlcnRpZXM6IFRhYmxlQmxvY2tQcm9wZXJ0aWVzLFxuXHRoYW5kbGVyUHJvdmlkZXI6IFRhYmxlRXZlbnRIYW5kbGVyUHJvdmlkZXJcbik6IERyYWdEcm9wQ29uZmlnIHwgdW5kZWZpbmVkIHtcblx0aWYgKHRhYmxlUHJvcGVydGllcy50YWJsZURlZmluaXRpb24uY29udHJvbC50eXBlID09PSBcIlRyZWVUYWJsZVwiKSB7XG5cdFx0cmV0dXJuIChcblx0XHRcdDxEcmFnRHJvcENvbmZpZ1xuXHRcdFx0XHRlbmFibGVkPXtjb21waWxlRXhwcmVzc2lvbihnZXREcmFnQW5kRHJvcEVuYWJsZWQodGFibGVQcm9wZXJ0aWVzLmNvbnRleHRPYmplY3RQYXRoLCB0YWJsZVByb3BlcnRpZXMudGFibGVEZWZpbml0aW9uKSl9XG5cdFx0XHRcdGRyb3BQb3NpdGlvbj17dGFibGVQcm9wZXJ0aWVzLnRhYmxlRGVmaW5pdGlvbi5hbm5vdGF0aW9uLmFsbG93RHJvcEJldHdlZW5Ob2RlcyA9PT0gdHJ1ZSA/IFwiT25PckJldHdlZW5cIiA6IFwiT25cIn1cblx0XHRcdFx0ZHJhZ2dhYmxlPXt0cnVlfVxuXHRcdFx0XHRkcm9wcGFibGU9e3RydWV9XG5cdFx0XHRcdGRyYWdTdGFydD17aGFuZGxlclByb3ZpZGVyLmRyYWdTdGFydERvY3VtZW50fVxuXHRcdFx0XHRkcmFnRW50ZXI9e2hhbmRsZXJQcm92aWRlci5kcmFnRW50ZXJEb2N1bWVudH1cblx0XHRcdFx0ZHJvcD17aGFuZGxlclByb3ZpZGVyLmRyb3BEb2N1bWVudH1cblx0XHRcdC8+XG5cdFx0KTtcblx0fVxuXHRyZXR1cm4gdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIEdlbmVyYXRlcyBhbiBhY3Rpb25Db21tYW5kIGZvciB0aGUgdGFibGUuXG4gKiBAcGFyYW0gYWN0aW9uTmFtZSBUaGUgbmFtZSBvZiB0aGUgYWN0aW9uXG4gKiBAcGFyYW0gYWN0aW9uIEFjdGlvbiB0byBiZSBldmFsdWF0ZWRcbiAqIEBwYXJhbSBmb3JDb250ZXh0TWVudSBJbmRpY2F0ZXMgaWYgdGhlIGFjdGlvbiBhcHBlYXJzIGluIHRoZSBjb250ZXh0IG1lbnUuIElmIGZhbHNlLCB0aGUgYWN0aW9uIGFwcGVhcnMgaW4gdGhlIHRhYmxlIHRvb2xiYXJcbiAqIEBwYXJhbSBwYXJhbWV0ZXJzXG4gKiBAcGFyYW0gY29sbGVjdGlvblxuICogQHBhcmFtIHRhYmxlRGVmaW5pdGlvblxuICogQHBhcmFtIGNvbnRleHRPYmplY3RQYXRoXG4gKiBAcmV0dXJucyBUaGUgYWN0aW9uQ29tbWFuZFxuICovXG5mdW5jdGlvbiBnZXRBY3Rpb25Db21tYW5kKFxuXHRhY3Rpb25OYW1lOiBzdHJpbmcsXG5cdGFjdGlvbjogQ3VzdG9tQWN0aW9uLFxuXHRmb3JDb250ZXh0TWVudTogYm9vbGVhbixcblx0cGFyYW1ldGVyczogVGFibGVUZW1wbGF0aW5nUGFyYW1ldGVycyxcblx0Y29sbGVjdGlvbjogQ29udGV4dCxcblx0dGFibGVEZWZpbml0aW9uOiBUYWJsZVZpc3VhbGl6YXRpb24sXG5cdGNvbnRleHRPYmplY3RQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPExpbmVJdGVtIHwgU2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudCB8IFByZXNlbnRhdGlvblZhcmlhbnQ+XG4pOiBDb21tYW5kRXhlY3V0aW9uIHwgdW5kZWZpbmVkIHtcblx0Y29uc3QgZGF0YUZpZWxkID0gYWN0aW9uLmFubm90YXRpb25QYXRoXG5cdFx0PyAocGFyYW1ldGVycy5jb252ZXJ0ZWRNZXRhZGF0YS5yZXNvbHZlUGF0aChhY3Rpb24uYW5ub3RhdGlvblBhdGgpLnRhcmdldCBhcyBEYXRhRmllbGRGb3JBY3Rpb24gfCBEYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24pXG5cdFx0OiB1bmRlZmluZWQ7XG5cdGNvbnN0IGFjdGlvbkNvbnRleHRQYXRoID0gYWN0aW9uLmFubm90YXRpb25QYXRoXG5cdFx0PyBDb21tb25IZWxwZXIuZ2V0QWN0aW9uQ29udGV4dChwYXJhbWV0ZXJzLm1ldGFNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChhY3Rpb24uYW5ub3RhdGlvblBhdGggKyBcIi9BY3Rpb25cIikhKVxuXHRcdDogdW5kZWZpbmVkO1xuXHRjb25zdCBhY3Rpb25Db250ZXh0ID0gYWN0aW9uQ29udGV4dFBhdGggPyBwYXJhbWV0ZXJzLm1ldGFNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChhY3Rpb25Db250ZXh0UGF0aCkgOiB1bmRlZmluZWQ7XG5cdGNvbnN0IGRhdGFGaWVsZERhdGFNb2RlbE9iamVjdFBhdGggPSBhY3Rpb25Db250ZXh0ID8gZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzKGFjdGlvbkNvbnRleHQsIGNvbGxlY3Rpb24pIDogdW5kZWZpbmVkO1xuXHRjb25zdCBpc0JvdW5kID0gKGRhdGFGaWVsZCBhcyBEYXRhRmllbGRGb3JBY3Rpb24pPy5BY3Rpb25UYXJnZXQ/LmlzQm91bmQ7XG5cdGNvbnN0IGlzT3BlcmF0aW9uQXZhaWxhYmxlID1cblx0XHQoZGF0YUZpZWxkIGFzIERhdGFGaWVsZEZvckFjdGlvbik/LkFjdGlvblRhcmdldD8uYW5ub3RhdGlvbnM/LkNvcmU/Lk9wZXJhdGlvbkF2YWlsYWJsZT8udmFsdWVPZigpICE9PSBmYWxzZTtcblx0Y29uc3QgZGlzcGxheUNvbW1hbmRBY3Rpb24gPSBhY3Rpb24udHlwZSA9PT0gXCJGb3JBY3Rpb25cIiA/IGlzQm91bmQgIT09IHRydWUgfHwgaXNPcGVyYXRpb25BdmFpbGFibGUgOiB0cnVlO1xuXHRjb25zdCBlbmFibGVkID0gIWZvckNvbnRleHRNZW51ID8gYWN0aW9uLmVuYWJsZWQgOiBhY3Rpb24uZW5hYmxlZEZvckNvbnRleHRNZW51O1xuXHRpZiAoZGlzcGxheUNvbW1hbmRBY3Rpb24gJiYgKCFmb3JDb250ZXh0TWVudSB8fCBUYWJsZUhlbHBlci5pc0FjdGlvblNob3duSW5Db250ZXh0TWVudShhY3Rpb24sIGNvbnRleHRPYmplY3RQYXRoKSkpIHtcblx0XHRjb25zdCBjb21tYW5kID0gIWZvckNvbnRleHRNZW51ID8gYWN0aW9uLmNvbW1hbmQgOiBhY3Rpb24uY29tbWFuZCArIFwiOjpDb250ZXh0TWVudVwiO1xuXG5cdFx0Y29uc3QgYWN0aW9uUGFyYW1ldGVycyA9IHtcblx0XHRcdG9uRXhlY3V0ZUFjdGlvbjogcGFyYW1ldGVycy5oYW5kbGVyUHJvdmlkZXIuZ2V0RGF0YUZpZWxkRm9yQWN0aW9uQnV0dG9uUHJlc3NIYW5kbGVyKFxuXHRcdFx0XHRkYXRhRmllbGQgYXMgRGF0YUZpZWxkRm9yQWN0aW9uLFxuXHRcdFx0XHRhY3Rpb24sXG5cdFx0XHRcdHVuZGVmaW5lZCxcblx0XHRcdFx0Zm9yQ29udGV4dE1lbnVcblx0XHRcdCksXG5cdFx0XHRvbkV4ZWN1dGVJQk46IHBhcmFtZXRlcnMuaGFuZGxlclByb3ZpZGVyLmdldERhdGFGaWVsZEZvcklCTlByZXNzSGFuZGxlcihhY3Rpb24sIGZhbHNlKSxcblx0XHRcdG9uRXhlY3V0ZU1hbmlmZXN0OiBwYXJhbWV0ZXJzLmhhbmRsZXJQcm92aWRlci5nZXRNYW5pZmVzdEFjdGlvblByZXNzSGFuZGxlcihhY3Rpb24sIGZvckNvbnRleHRNZW51KSxcblx0XHRcdGlzSUJORW5hYmxlZDpcblx0XHRcdFx0ZW5hYmxlZCA/P1xuXHRcdFx0XHRUYWJsZUhlbHBlci5pc0RhdGFGaWVsZEZvcklCTkVuYWJsZWQoXG5cdFx0XHRcdFx0eyBjb2xsZWN0aW9uOiBjb2xsZWN0aW9uLCB0YWJsZURlZmluaXRpb246IHRhYmxlRGVmaW5pdGlvbiB9LFxuXHRcdFx0XHRcdGRhdGFGaWVsZCEgYXMgRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uLFxuXHRcdFx0XHRcdCEhKGRhdGFGaWVsZCBhcyBEYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24pLlJlcXVpcmVzQ29udGV4dCxcblx0XHRcdFx0XHQoZGF0YUZpZWxkIGFzIERhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbikuTmF2aWdhdGlvbkF2YWlsYWJsZSxcblx0XHRcdFx0XHRmb3JDb250ZXh0TWVudVxuXHRcdFx0XHQpLFxuXHRcdFx0aXNBY3Rpb25FbmFibGVkOlxuXHRcdFx0XHRlbmFibGVkID8/XG5cdFx0XHRcdFRhYmxlSGVscGVyLmlzRGF0YUZpZWxkRm9yQWN0aW9uRW5hYmxlZChcblx0XHRcdFx0XHR0YWJsZURlZmluaXRpb24sXG5cdFx0XHRcdFx0KGRhdGFGaWVsZCEgYXMgRGF0YUZpZWxkRm9yQWN0aW9uKS5BY3Rpb24sXG5cdFx0XHRcdFx0ISFpc0JvdW5kLFxuXHRcdFx0XHRcdGFjdGlvbkNvbnRleHRQYXRoLFxuXHRcdFx0XHRcdGFjdGlvbi5lbmFibGVPblNlbGVjdCxcblx0XHRcdFx0XHRkYXRhRmllbGREYXRhTW9kZWxPYmplY3RQYXRoPy50YXJnZXRFbnRpdHlUeXBlLFxuXHRcdFx0XHRcdGZvckNvbnRleHRNZW51XG5cdFx0XHRcdCksXG5cdFx0XHRpc0VuYWJsZWQ6IGVuYWJsZWRcblx0XHR9O1xuXHRcdHJldHVybiBnZXRDb21tYW5kRXhlY3V0aW9uRm9yQWN0aW9uKGNvbW1hbmQsIHRhYmxlRGVmaW5pdGlvbi5jb21tYW5kQWN0aW9ucyFbYWN0aW9uTmFtZV0sIGFjdGlvblBhcmFtZXRlcnMpO1xuXHR9XG5cdHJldHVybiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogR2VuZXJhdGVzIHRoZSB0ZW1wbGF0ZSBzdHJpbmcgZm9yIHRoZSByZXF1aXJlZCBtb2R1bGVzLlxuICogQHBhcmFtIHRhYmxlRGVmaW5pdGlvblxuICogQHJldHVybnMgVGhlIGxpc3Qgb2YgcmVxdWlyZWQgbW9kdWxlc1xuICovXG5mdW5jdGlvbiBnZXRDb3JlUmVxdWlyZSh0YWJsZURlZmluaXRpb246IFRhYmxlVmlzdWFsaXphdGlvbik6IHN0cmluZyB7XG5cdGNvbnN0IGN1c3RvbU1vZHVsZXMgPSB0YWJsZURlZmluaXRpb24uY29udHJvbC5hZGRpdGlvbmFsUmVxdWlyZWRNb2R1bGVzID8/IFtdO1xuXG5cdHJldHVybiBge1RhYmxlUnVudGltZTogJ3NhcC9mZS9tYWNyb3MvdGFibGUvVGFibGVSdW50aW1lJywgQVBJOiAnc2FwL2ZlL21hY3Jvcy90YWJsZS9UYWJsZUFQSScke2N1c3RvbU1vZHVsZXNcblx0XHQubWFwKChtb2R1bGU6IHN0cmluZywgaW5kZXg6IG51bWJlcikgPT4gYCwgY3VzdG9tTW9kdWxlJHtpbmRleCArIDF9OiAnJHttb2R1bGV9J2ApXG5cdFx0LmpvaW4oXCJcIil9fWA7XG59XG5cbi8qKlxuICogQ3JlYXRlIHRoZSB0ZW1wbGF0ZSBmb3IgYSBjb21wdXRlZCBjb2x1bW4uXG4gKiBDdXJyZW50bHksIHRoaXMgcmVwcmVzZW50cyBvbmx5IHRoZSBEcmFmdEluZGljYXRvciBhbmQgdGhlIFNpdHVhdGlvbnNJbmRpY2F0b3IuXG4gKiBAcGFyYW0gdGFibGVJZCBUaGUgdGFibGUgSURcbiAqIEBwYXJhbSBjb2x1bW4gVGhlIGNvbXB1dGVkIGNvbHVtbiBkZWZpbml0aW9uXG4gKiBAcGFyYW0gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiBjb250ZXh0IHVzZWQgZm9yIGNvbnRleHQgcGF0aFxuICogQHBhcmFtIGVuYWJsZUFuYWx5dGljcyBXaGV0aGVyIGFuYWx5dGljcyBhcmUgZW5hYmxlZFxuICogQHJldHVybnMgVGhlIGNvbXB1dGVkIGNvbHVtbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldENvbXB1dGVkQ29sdW1uKFxuXHR0YWJsZUlkOiBzdHJpbmcsXG5cdGNvbHVtbjogQ29tcHV0ZWRUYWJsZUNvbHVtbixcblx0Y29sbGVjdGlvbjogQ29udGV4dCxcblx0ZW5hYmxlQW5hbHl0aWNzOiBib29sZWFuIHwgdW5kZWZpbmVkXG4pOiBDb2x1bW4gfCB1bmRlZmluZWQge1xuXHRpZiAoY29sdW1uLmlzRHJhZnRJbmRpY2F0b3IpIHtcblx0XHRyZXR1cm4gKFxuXHRcdFx0PENvbHVtblxuXHRcdFx0XHRpZD17Z2VuZXJhdGUoW3RhYmxlSWQsIFwiQ1wiLCBcImNvbXB1dGVkQ29sdW1uc1wiLCBcImRyYWZ0U3RhdHVzXCJdKX1cblx0XHRcdFx0aGVhZGVyVmlzaWJsZT17ZmFsc2V9XG5cdFx0XHRcdHByb3BlcnR5S2V5PXtjb2x1bW4ubmFtZX1cblx0XHRcdFx0aGVhZGVyPXtjb2x1bW4ubGFiZWx9XG5cdFx0XHRcdHRvb2x0aXA9e2NvbHVtbi50b29sdGlwfVxuXHRcdFx0XHR3aWR0aD1cIjNlbVwiXG5cdFx0XHQ+XG5cdFx0XHRcdDxEcmFmdEluZGljYXRvclxuXHRcdFx0XHRcdGRyYWZ0SW5kaWNhdG9yVHlwZT17T2JqZWN0TWFya2VyVmlzaWJpbGl0eS5JY29uT25seX1cblx0XHRcdFx0XHRjb250ZXh0UGF0aD17Y29sbGVjdGlvbi5nZXRQYXRoKCl9XG5cdFx0XHRcdFx0dXNlZEluVGFibGU9e3RydWV9XG5cdFx0XHRcdFx0dXNlZEluQW5hbHl0aWNhbFRhYmxlPXtlbmFibGVBbmFseXRpY3N9XG5cdFx0XHRcdC8+XG5cdFx0XHQ8L0NvbHVtbj5cblx0XHQpO1xuXHR9IGVsc2UgaWYgKGNvbHVtbi5pc1NpdHVhdGlvbnNJbmRpY2F0b3IpIHtcblx0XHRyZXR1cm4gKFxuXHRcdFx0PENvbHVtblxuXHRcdFx0XHRpZD17Z2VuZXJhdGUoW3RhYmxlSWQsIFwiQ1wiLCBcImNvbXB1dGVkQ29sdW1uc1wiLCBcInNpdHVhdGlvbnNJbmRpY2F0b3JcIl0pfVxuXHRcdFx0XHRwcm9wZXJ0eUtleT17Y29sdW1uLm5hbWV9XG5cdFx0XHRcdGhlYWRlcj17Y29sdW1uLmxhYmVsfVxuXHRcdFx0XHR0b29sdGlwPXtjb2x1bW4udG9vbHRpcH1cblx0XHRcdFx0aGVhZGVyVmlzaWJsZT17ZmFsc2V9XG5cdFx0XHRcdHdpZHRoPVwiNGVtXCJcblx0XHRcdD5cblx0XHRcdFx0PFNpdHVhdGlvbnNJbmRpY2F0b3IgY29udGV4dFBhdGg9e2NvbGxlY3Rpb24uZ2V0UGF0aCgpfSAvPlxuXHRcdFx0PC9Db2x1bW4+XG5cdFx0KTtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG59XG5cbi8qKlxuICogQ3JlYXRlIHRoZSB0ZW1wbGF0ZSBmb3IgYSBzbG90IGNvbHVtbi5cbiAqIFRoaXMgY29sdW1uIHdpbGwgZWl0aGVyIHJldXNlIGEgdGVtcGxhdGUgY29udHJvbCB0aGF0IGlzIGRlZmluZWQgYXQgcnVudGltZSAodGVtcGxhdGVJZCBjYXNlKSwgb3IgZGVmaW5lIGEgc2xvdCB3aGVyZSB0aGUgWE1MIGNvbnRlbnQgaXMgY29waWVkLlxuICogQHBhcmFtIHRhYmxlSWQgVGhlIHRhYmxlIElEXG4gKiBAcGFyYW0gY29sdW1uIFRoZSBzbG90IGNvbHVtbiBkZWZpbml0aW9uXG4gKiBAcGFyYW0gaXNSZWFkT25seSBXaGV0aGVyIHRoZSB0YWJsZSBpcyByZWFkIG9ubHlcbiAqIEByZXR1cm5zIFRoZSBzbG90IGNvbHVtbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFNsb3RDb2x1bW4odGFibGVJZDogc3RyaW5nLCBjb2x1bW46IEN1c3RvbUJhc2VkVGFibGVDb2x1bW4sIGlzUmVhZE9ubHk6IGJvb2xlYW4gfCB1bmRlZmluZWQpOiBDb2x1bW4ge1xuXHRyZXR1cm4gKFxuXHRcdDxDb2x1bW5cblx0XHRcdGlkPXtnZW5lcmF0ZShbdGFibGVJZCwgXCJDXCIsIGNvbHVtbi5pZF0pfVxuXHRcdFx0cHJvcGVydHlLZXk9e2NvbHVtbi5uYW1lfVxuXHRcdFx0d2lkdGg9e2NvbHVtbi53aWR0aH1cblx0XHRcdGhBbGlnbj17Y29sdW1uLmhvcml6b250YWxBbGlnbn1cblx0XHRcdGhlYWRlcj17Y29sdW1uLmhlYWRlcn1cblx0XHRcdHRvb2x0aXA9e2NvbHVtbi50b29sdGlwfVxuXHRcdFx0cmVxdWlyZWQ9e2lzUmVhZE9ubHkgPyB1bmRlZmluZWQgOiBjb2x1bW4ucmVxdWlyZWR9XG5cdFx0PlxuXHRcdFx0e3tcblx0XHRcdFx0ZXh0ZW5kZWRTZXR0aW5nczogPFJlc3BvbnNpdmVDb2x1bW5TZXR0aW5ncyBpbXBvcnRhbmNlPXtjb2x1bW4uaW1wb3J0YW5jZX0gLz4sXG5cdFx0XHRcdHRlbXBsYXRlOiBjb2x1bW4udGVtcGxhdGVcblx0XHRcdH19XG5cdFx0PC9Db2x1bW4+XG5cdCk7XG59XG5cbi8qKlxuICogQ3JlYXRlIHRoZSB0ZW1wbGF0ZSBmb3IgdGhlIERyYWZ0SW5kaWNhdG9yLlxuICogQHBhcmFtIGNvbGxlY3Rpb24gVGhlIGNvbnRleHQgb2YgdGhlIGNvbGxlY3Rpb25cbiAqIEBwYXJhbSBjb2x1bW4gVGhlIGNvbHVtbiBkZWZpbml0aW9uXG4gKiBAcmV0dXJucyBUaGUgWE1MIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIERyYWZ0SW5kaWNhdG9yLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RHJhZnRJbmRpY2F0b3IoY29sbGVjdGlvbjogQ29udGV4dCwgY29sdW1uOiBBbm5vdGF0aW9uVGFibGVDb2x1bW4pOiBGb3JtRWxlbWVudFdyYXBwZXIgfCB1bmRlZmluZWQge1xuXHRpZiAoXG5cdFx0Y29sbGVjdGlvbi5nZXRPYmplY3QoXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkRyYWZ0Um9vdFwiKSAmJlxuXHRcdGNvbGxlY3Rpb24uZ2V0T2JqZWN0KFwiLi9AY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlNlbWFudGljS2V5XCIpICYmXG5cdFx0Y29sdW1uLmZvcm1hdE9wdGlvbnM/LmZpZWxkR3JvdXBEcmFmdEluZGljYXRvclByb3BlcnR5UGF0aFxuXHQpIHtcblx0XHRyZXR1cm4gKFxuXHRcdFx0PEZvcm1FbGVtZW50V3JhcHBlcj5cblx0XHRcdFx0PERyYWZ0SW5kaWNhdG9yXG5cdFx0XHRcdFx0ZHJhZnRJbmRpY2F0b3JUeXBlPXtPYmplY3RNYXJrZXJWaXNpYmlsaXR5Lkljb25BbmRUZXh0fVxuXHRcdFx0XHRcdGNvbnRleHRQYXRoPXtjb2xsZWN0aW9uLmdldFBhdGgoKX1cblx0XHRcdFx0XHR2aXNpYmxlPXtnZXREcmFmdEluZGljYXRvclZpc2libGVCaW5kaW5nKGNvbHVtbi5mb3JtYXRPcHRpb25zPy5maWVsZEdyb3VwTmFtZSl9XG5cdFx0XHRcdFx0YXJpYUxhYmVsbGVkQnk9e1tcInRoaXM+YXJpYUxhYmVsbGVkQnlcIl19XG5cdFx0XHRcdC8+XG5cdFx0XHQ8L0Zvcm1FbGVtZW50V3JhcHBlcj5cblx0XHQpO1xuXHR9XG5cdHJldHVybiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogQ3JlYXRlIHRoZSBTaXR1YXRpb25JbmRpY2F0b3IgT2JqZWN0U3RhdHVzLlxuICogQHBhcmFtIGNvbGxlY3Rpb24gVGhlIGNvbnRleHQgb2YgdGhlIGNvbGxlY3Rpb25cbiAqIEBwYXJhbSBjb2x1bW4gVGhlIGNvbHVtbiBkZWZpbml0aW9uXG4gKiBAcmV0dXJucyBUaGUgT2JqZWN0U3RhdHVzLlxuICovXG5mdW5jdGlvbiBnZXRTaXR1YXRpb25JbmRpY2F0b3IoY29sbGVjdGlvbjogQ29udGV4dCwgY29sdW1uOiBBbm5vdGF0aW9uVGFibGVDb2x1bW4pOiBPYmplY3RTdGF0dXMgfCB1bmRlZmluZWQge1xuXHRpZiAoXG5cdFx0Y29sbGVjdGlvbi5nZXRPYmplY3QoXCIuL0Bjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuU2VtYW50aWNLZXlcIikgJiZcblx0XHRjb2x1bW4uZm9ybWF0T3B0aW9ucz8uZmllbGRHcm91cERyYWZ0SW5kaWNhdG9yUHJvcGVydHlQYXRoXG5cdCkge1xuXHRcdHJldHVybiAoXG5cdFx0XHQ8T2JqZWN0U3RhdHVzXG5cdFx0XHRcdHZpc2libGU9e2NvbHVtbi5mb3JtYXRPcHRpb25zPy5zaG93RXJyb3JPYmplY3RTdGF0dXN9XG5cdFx0XHRcdGNsYXNzPVwic2FwVWlTbWFsbE1hcmdpbkJvdHRvbVwiXG5cdFx0XHRcdHRleHQ9XCJ7c2FwLmZlLmkxOG4+Q29udGFpbnNfRXJyb3JzfVwiXG5cdFx0XHRcdHN0YXRlPVwiRXJyb3JcIlxuXHRcdFx0Lz5cblx0XHQpO1xuXHR9XG5cdHJldHVybiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lcyB0aGUgZGVmYXVsdCBkYXRlLXRpbWUgZm9ybWF0IHN0eWxlIGJhc2VkIG9uIHRoZSBnaXZlbiBkYXRhIGZpZWxkIGNvbnRleHQuXG4gKiBAcGFyYW0gZGF0YUZpZWxkQ29udGV4dCBUaGUgY29udGV4dCBvZiB0aGUgZGF0YSBmaWVsZFxuICogQHJldHVybnMgUmV0dXJucyAnc2hvcnQnIGlmIHRoZSB1bmRlcmx5aW5nIGRhdGEgZmllbGQgaXMgb2YgdGhlIHR5cGUgJ0VkbS5UaW1lT2ZEYXknLCBvdGhlcndpc2UgdW5kZWZpbmVkLlxuICovXG5mdW5jdGlvbiBnZXREZWZhdWx0RGF0ZVRpbWVTdHlsZShkYXRhRmllbGRDb250ZXh0OiBDb250ZXh0KTogRGF0ZVRpbWVTdHlsZSB8IHVuZGVmaW5lZCB7XG5cdGNvbnN0IHRhcmdldE9iamVjdCA9IGdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0czxEYXRhRmllbGRBYnN0cmFjdFR5cGVzPihkYXRhRmllbGRDb250ZXh0KS50YXJnZXRPYmplY3Q7XG5cdGlmIChpc0RhdGFGaWVsZCh0YXJnZXRPYmplY3QpICYmIHRhcmdldE9iamVjdC5WYWx1ZT8uJHRhcmdldD8udHlwZSA9PT0gXCJFZG0uVGltZU9mRGF5XCIpIHtcblx0XHRyZXR1cm4gXCJzaG9ydFwiO1xuXHR9XG5cdGlmIChcblx0XHRpc0RhdGFGaWVsZEZvckFubm90YXRpb24odGFyZ2V0T2JqZWN0KSAmJlxuXHRcdGhhc0RhdGFQb2ludFRhcmdldCh0YXJnZXRPYmplY3QpICYmXG5cdFx0KHRhcmdldE9iamVjdC5UYXJnZXQuJHRhcmdldCBhcyBEYXRhUG9pbnQpPy5WYWx1ZS4kdGFyZ2V0LnR5cGUgPT09IFwiRWRtLlRpbWVPZkRheVwiXG5cdCkge1xuXHRcdHJldHVybiBcInNob3J0XCI7XG5cdH1cbn1cblxuLyoqXG4gKiBDcmVhdGUgdGhlIHRlbXBsYXRlIGZvciB0aGUgY3JlYXRpb24gcm93LlxuICogQHBhcmFtIHRhYmxlSWQgVGhlIHRhYmxlIElEXG4gKiBAcGFyYW0gY29sdW1uIFRoZSBjb2x1bW4gZGVmaW5pdGlvblxuICogQHBhcmFtIHRhYmxlVHlwZSBUaGUgdHlwZSBvZiB0aGUgdGFibGVcbiAqIEBwYXJhbSBjcmVhdGlvbk1vZGUgVGhlIGNyZWF0aW9uIG1vZGVcbiAqIEBwYXJhbSBpc1RhYmxlUmVhZE9ubHkgV2hldGhlciB0aGUgdGFibGUgaXMgcmVhZCBvbmx5XG4gKiBAcGFyYW0gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiBjb250ZXh0XG4gKiBAcGFyYW0gZGF0YUZpZWxkIFRoZSBkYXRhIGZpZWxkIGNvbnRleHRcbiAqIEBwYXJhbSBmaWVsZE1vZGUgVGhlIGZpZWxkIG1vZGVcbiAqIEBwYXJhbSBlbmFibGVBbmFseXRpY3MgV2hldGhlciBhbmFseXRpY3MgYXJlIGVuYWJsZWRcbiAqIEBwYXJhbSBoYW5kbGVyUHJvdmlkZXJcbiAqIEByZXR1cm5zIFRoZSBYTUwgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgY3JlYXRpb24gcm93LlxuICovXG5mdW5jdGlvbiBnZXRDcmVhdGlvblRlbXBsYXRlKFxuXHR0YWJsZUlkOiBzdHJpbmcsXG5cdGNvbHVtbjogQW5ub3RhdGlvblRhYmxlQ29sdW1uLFxuXHR0YWJsZVR5cGU6IFRhYmxlVHlwZSxcblx0Y3JlYXRpb25Nb2RlOiBQcm9wZXJ0aWVzT2Y8VGFibGVDcmVhdGlvbk9wdGlvbnM+IHwgdW5kZWZpbmVkLFxuXHRpc1RhYmxlUmVhZE9ubHk6IGJvb2xlYW4gfCB1bmRlZmluZWQsXG5cdGNvbGxlY3Rpb246IENvbnRleHQsXG5cdGRhdGFGaWVsZDogQ29udGV4dCxcblx0ZmllbGRNb2RlOiBzdHJpbmcgfCB1bmRlZmluZWQsXG5cdGVuYWJsZUFuYWx5dGljczogYm9vbGVhbiB8IHVuZGVmaW5lZCxcblx0aGFuZGxlclByb3ZpZGVyOiBUYWJsZUV2ZW50SGFuZGxlclByb3ZpZGVyXG4pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRpZiAoKGNyZWF0aW9uTW9kZT8ubmFtZSBhcyBzdHJpbmcpID09PSBcIkNyZWF0aW9uUm93XCIpIHtcblx0XHRsZXQgY29sdW1uRWRpdE1vZGU6IHN0cmluZyB8IHVuZGVmaW5lZDtcblx0XHRzd2l0Y2ggKGlzVGFibGVSZWFkT25seSkge1xuXHRcdFx0Y2FzZSB0cnVlOlxuXHRcdFx0XHRjb2x1bW5FZGl0TW9kZSA9IFwiRGlzcGxheVwiO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgZmFsc2U6XG5cdFx0XHRcdGNvbHVtbkVkaXRNb2RlID0gXCJFZGl0YWJsZVwiO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdGNvbHVtbkVkaXRNb2RlID0gdW5kZWZpbmVkO1xuXHRcdFx0XHRicmVhaztcblx0XHR9XG5cdFx0Y29uc3QgZGF0YUZpZWxkT2JqZWN0ID0gZGF0YUZpZWxkLmdldE9iamVjdCgpO1xuXG5cdFx0Y29uc3QgZm9ybWF0T3B0aW9ucyA9IHtcblx0XHRcdGZpZWxkTW9kZTogZmllbGRNb2RlLFxuXHRcdFx0dGV4dExpbmVzRWRpdDogY29sdW1uLmZvcm1hdE9wdGlvbnM/LnRleHRMaW5lc0VkaXQsXG5cdFx0XHR0ZXh0TWF4TGluZXM6IGNvbHVtbi5mb3JtYXRPcHRpb25zPy50ZXh0TWF4TGluZXMgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IGNvbHVtbi5mb3JtYXRPcHRpb25zPy50ZXh0TWF4TGluZXMsXG5cdFx0XHR0ZXh0TWF4TGVuZ3RoOiBjb2x1bW4uZm9ybWF0T3B0aW9ucz8udGV4dE1heExlbmd0aCxcblx0XHRcdHRleHRNYXhDaGFyYWN0ZXJzRGlzcGxheTogY29sdW1uLmZvcm1hdE9wdGlvbnM/LnRleHRNYXhDaGFyYWN0ZXJzRGlzcGxheSxcblx0XHRcdHRleHRFeHBhbmRCZWhhdmlvckRpc3BsYXk6IGNvbHVtbi5mb3JtYXRPcHRpb25zPy50ZXh0RXhwYW5kQmVoYXZpb3JEaXNwbGF5LFxuXHRcdFx0dGV4dEFsaWduTW9kZTogXCJUYWJsZVwiLFxuXHRcdFx0c2VtYW50aWNLZXlTdHlsZTogdGFibGVUeXBlID09PSBcIlJlc3BvbnNpdmVUYWJsZVwiID8gXCJPYmplY3RJZGVudGlmaWVyXCIgOiBcIkxhYmVsXCIsXG5cdFx0XHRoYXNEcmFmdEluZGljYXRvcjogY29sdW1uLmZvcm1hdE9wdGlvbnM/Lmhhc0RyYWZ0SW5kaWNhdG9yLFxuXHRcdFx0ZmllbGRHcm91cERyYWZ0SW5kaWNhdG9yUHJvcGVydHlQYXRoOiBjb2x1bW4uZm9ybWF0T3B0aW9ucz8uZmllbGRHcm91cERyYWZ0SW5kaWNhdG9yUHJvcGVydHlQYXRoLFxuXHRcdFx0ZmllbGRHcm91cE5hbWU6IGNvbHVtbi5mb3JtYXRPcHRpb25zPy5maWVsZEdyb3VwTmFtZSxcblx0XHRcdHNob3dJY29uVXJsOiBkYXRhRmllbGRPYmplY3Q/LklubGluZSAmJiAhIWRhdGFGaWVsZE9iamVjdD8uSWNvblVybCxcblx0XHRcdGlnbm9yZU5hdmlnYXRpb25BdmFpbGFibGU6IGVuYWJsZUFuYWx5dGljcyA/PyBmYWxzZSxcblx0XHRcdGlzQ3VycmVuY3lPclVuaXRBbGlnbmVkOiB0cnVlLFxuXHRcdFx0ZGF0ZVRpbWVTdHlsZTogZ2V0RGVmYXVsdERhdGVUaW1lU3R5bGUoZGF0YUZpZWxkKVxuXHRcdH07XG5cblx0XHRyZXR1cm4gKFxuXHRcdFx0PEZpZWxkXG5cdFx0XHRcdGNvcmU6cmVxdWlyZT1cIntUYWJsZVJ1bnRpbWU6ICdzYXAvZmUvbWFjcm9zL3RhYmxlL1RhYmxlUnVudGltZSd9XCJcblx0XHRcdFx0dmhJZFByZWZpeD17Z2VuZXJhdGUoW3RhYmxlSWQsIFwiVGFibGVWYWx1ZUhlbHBcIl0pfVxuXHRcdFx0XHRlZGl0TW9kZT17Y29sdW1uRWRpdE1vZGV9XG5cdFx0XHRcdGNvbnRleHRQYXRoPXtjb2xsZWN0aW9uLmdldFBhdGgoKX1cblx0XHRcdFx0bWV0YVBhdGg9e2RhdGFGaWVsZC5nZXRQYXRoKCl9XG5cdFx0XHRcdHdyYXA9e3RhYmxlVHlwZSA9PT0gXCJSZXNwb25zaXZlVGFibGVcIn1cblx0XHRcdFx0Y2hhbmdlPXtoYW5kbGVyUHJvdmlkZXIuZmllbGRDaGFuZ2VJbkNyZWF0aW9uUm93fVxuXHRcdFx0XHRzaG93RXJyb3JPYmplY3RTdGF0dXM9e2NvbHVtbi5mb3JtYXRPcHRpb25zPy5zaG93RXJyb3JPYmplY3RTdGF0dXMgYXMgdW5rbm93biBhcyBib29sZWFufVxuXHRcdFx0PlxuXHRcdFx0XHR7e1xuXHRcdFx0XHRcdGZvcm1hdE9wdGlvbnM6IDxGaWVsZEZvcm1hdE9wdGlvbnMgey4uLmZvcm1hdE9wdGlvbnN9IC8+XG5cdFx0XHRcdH19XG5cdFx0XHQ8L0ZpZWxkPlxuXHRcdCk7XG5cdH1cblx0cmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBSZXRyaWV2ZXMgdGhlIHRlbXBsYXRlIGZvciB0aGUgbWFjcm9zOkZpZWxkIGluc2lkZSB0aGUgY29sdW1uLlxuICogQHBhcmFtIHRhYmxlSWQgVGhlIHRhYmxlIElEXG4gKiBAcGFyYW0gdGFibGVEZWZpbml0aW9uIFRoZSB0YWJsZSBkZWZpbml0aW9uXG4gKiBAcGFyYW0gY29sdW1uIFRoZSBjb2x1bW4gZGVmaW5pdGlvblxuICogQHBhcmFtIGRhdGFGaWVsZENvbnRleHQgVGhlIGRhdGEgZmllbGQgY29udGV4dFxuICogQHBhcmFtIGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gY29udGV4dFxuICogQHBhcmFtIGVuYWJsZUFuYWx5dGljcyBXaGV0aGVyIGFuYWx5dGljcyBhcmUgZW5hYmxlZFxuICogQHBhcmFtIHRhYmxlVHlwZSBUaGUgdHlwZSBvZiB0aGUgdGFibGVcbiAqIEBwYXJhbSBpc1RhYmxlUmVhZE9ubHkgV2hldGhlciB0aGUgdGFibGUgaXMgcmVhZCBvbmx5XG4gKiBAcGFyYW0gY3JlYXRpb25Nb2RlIFRoZSBjcmVhdGlvbiBtb2RlXG4gKiBAcGFyYW0gZmllbGRNb2RlIFRoZSBmaWVsZCBtb2RlXG4gKiBAcGFyYW0gaXNDb21wYWN0VHlwZSBXaGV0aGVyIHRoZSB0YWJsZSBpcyBjb21wYWN0XG4gKiBAcGFyYW0gdGV4dEFsaWduIFRoZSB0ZXh0IGFsaWdubWVudFxuICogQHBhcmFtIGFyaWFMYWJlbGxlZEJ5IFRoZSBhcmlhIGxhYmVsbGVkIGJ5XG4gKiBAcGFyYW0gc2hvd0VtcHR5SW5kaWNhdG9yIFdoZXRoZXIgdG8gc2hvdyB0aGUgZW1wdHkgaW5kaWNhdG9yXG4gKiBAcGFyYW0gY2xhc3NOYW1lXG4gKiBAcGFyYW0gaGFuZGxlclByb3ZpZGVyIFRoZSBoYW5kbGVyIHByb3ZpZGVyXG4gKiBAcmV0dXJucyBUaGUgWE1MIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIGZpZWxkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0TWFjcm9GaWVsZFRlbXBsYXRlKFxuXHR0YWJsZUlkOiBzdHJpbmcsXG5cdHRhYmxlRGVmaW5pdGlvbjogVGFibGVWaXN1YWxpemF0aW9uLFxuXHRjb2x1bW46IEFubm90YXRpb25UYWJsZUNvbHVtbixcblx0ZGF0YUZpZWxkQ29udGV4dDogQ29udGV4dCxcblx0Y29sbGVjdGlvbjogQ29udGV4dCxcblx0ZW5hYmxlQW5hbHl0aWNzOiBib29sZWFuIHwgdW5kZWZpbmVkLFxuXHR0YWJsZVR5cGU6IFRhYmxlVHlwZSxcblx0aXNUYWJsZVJlYWRPbmx5OiBib29sZWFuIHwgdW5kZWZpbmVkLFxuXHRjcmVhdGlvbk1vZGU6IFByb3BlcnRpZXNPZjxUYWJsZUNyZWF0aW9uT3B0aW9ucz4gfCB1bmRlZmluZWQsXG5cdGZpZWxkTW9kZTogc3RyaW5nIHwgdW5kZWZpbmVkLFxuXHRpc0NvbXBhY3RUeXBlOiBib29sZWFuIHwgdW5kZWZpbmVkLFxuXHR0ZXh0QWxpZ246IHN0cmluZyB8IHVuZGVmaW5lZCxcblx0YXJpYUxhYmVsbGVkQnk6IHN0cmluZyB8IHVuZGVmaW5lZCxcblx0c2hvd0VtcHR5SW5kaWNhdG9yOiBib29sZWFuIHwgdW5kZWZpbmVkLFxuXHRjbGFzc05hbWU6IHN0cmluZyB8IHVuZGVmaW5lZCxcblx0aGFuZGxlclByb3ZpZGVyOiBUYWJsZUV2ZW50SGFuZGxlclByb3ZpZGVyXG4pOiBzdHJpbmcge1xuXHRjb25zdCBkYXRhRmllbGRPYmplY3QgPSBkYXRhRmllbGRDb250ZXh0LmdldE9iamVjdCgpO1xuXHRsZXQgY29sdW1uRWRpdE1vZGU6IHN0cmluZyB8IHVuZGVmaW5lZDtcblx0c3dpdGNoIChpc1RhYmxlUmVhZE9ubHkpIHtcblx0XHRjYXNlIHRydWU6XG5cdFx0XHRjb2x1bW5FZGl0TW9kZSA9IFwiRGlzcGxheVwiO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBmYWxzZTpcblx0XHRcdGNvbHVtbkVkaXRNb2RlID0gXCJFZGl0YWJsZVwiO1xuXHRcdFx0YnJlYWs7XG5cdFx0ZGVmYXVsdDpcblx0XHRcdGNvbHVtbkVkaXRNb2RlID0gdW5kZWZpbmVkO1xuXHR9XG5cdGlmICh0YWJsZURlZmluaXRpb24uY29udHJvbC5lbmFibGVVcGxvYWRQbHVnaW4gJiYgY29sdW1uLnR5cGVDb25maWc/LmNsYXNzTmFtZSA9PT0gXCJFZG0uU3RyZWFtXCIpIHtcblx0XHRjb2x1bW5FZGl0TW9kZSA9IFwiRGlzcGxheVwiO1xuXHR9XG5cblx0Y29uc3QgZm9ybWF0T3B0aW9ucyA9IHtcblx0XHRmaWVsZE1vZGU6IGZpZWxkTW9kZSxcblx0XHR0ZXh0TGluZXNFZGl0OiBjb2x1bW4uZm9ybWF0T3B0aW9ucz8udGV4dExpbmVzRWRpdCxcblx0XHR0ZXh0TWF4TGluZXM6IGNvbHVtbi5mb3JtYXRPcHRpb25zPy50ZXh0TWF4TGluZXMgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IGNvbHVtbi5mb3JtYXRPcHRpb25zPy50ZXh0TWF4TGluZXMsXG5cdFx0dGV4dE1heENoYXJhY3RlcnNEaXNwbGF5OiBjb2x1bW4uZm9ybWF0T3B0aW9ucz8udGV4dE1heENoYXJhY3RlcnNEaXNwbGF5LFxuXHRcdHRleHRNYXhMZW5ndGg6IGNvbHVtbi5mb3JtYXRPcHRpb25zPy50ZXh0TWF4TGVuZ3RoLFxuXHRcdHRleHRFeHBhbmRCZWhhdmlvckRpc3BsYXk6IGNvbHVtbi5mb3JtYXRPcHRpb25zPy50ZXh0RXhwYW5kQmVoYXZpb3JEaXNwbGF5LFxuXHRcdHRleHRBbGlnbk1vZGU6IFwiVGFibGVcIixcblx0XHRzaG93RW1wdHlJbmRpY2F0b3I6IHNob3dFbXB0eUluZGljYXRvcixcblx0XHRzZW1hbnRpY0tleVN0eWxlOiB0YWJsZVR5cGUgPT09IFwiUmVzcG9uc2l2ZVRhYmxlXCIgPyBcIk9iamVjdElkZW50aWZpZXJcIiA6IFwiTGFiZWxcIixcblx0XHRoYXNEcmFmdEluZGljYXRvcjogY29sdW1uLmZvcm1hdE9wdGlvbnM/Lmhhc0RyYWZ0SW5kaWNhdG9yLFxuXHRcdGZpZWxkR3JvdXBEcmFmdEluZGljYXRvclByb3BlcnR5UGF0aDogY29sdW1uLmZvcm1hdE9wdGlvbnM/LmZpZWxkR3JvdXBEcmFmdEluZGljYXRvclByb3BlcnR5UGF0aCxcblx0XHRmaWVsZEdyb3VwTmFtZTogY29sdW1uLmZvcm1hdE9wdGlvbnM/LmZpZWxkR3JvdXBOYW1lLFxuXHRcdHNob3dJY29uVXJsOiBkYXRhRmllbGRPYmplY3Q/LklubGluZSAmJiAhIWRhdGFGaWVsZE9iamVjdD8uSWNvblVybCxcblx0XHRpZ25vcmVOYXZpZ2F0aW9uQXZhaWxhYmxlOiBlbmFibGVBbmFseXRpY3MgPz8gZmFsc2UsXG5cdFx0aXNBbmFseXRpY3M6IGVuYWJsZUFuYWx5dGljcyxcblx0XHRmb3JJbmxpbmVDcmVhdGlvblJvd3M6IGNyZWF0aW9uTW9kZT8ubmFtZSA9PT0gXCJJbmxpbmVDcmVhdGlvblJvd3NcIixcblx0XHRpc0N1cnJlbmN5T3JVbml0QWxpZ25lZDogdHJ1ZSxcblx0XHRjb21wYWN0U2VtYW50aWNLZXk6IGlzQ29tcGFjdFR5cGUgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IGAke2lzQ29tcGFjdFR5cGV9YCxcblx0XHRkYXRlVGltZVN0eWxlOiBnZXREZWZhdWx0RGF0ZVRpbWVTdHlsZShkYXRhRmllbGRDb250ZXh0KSxcblx0XHRpc0FuYWx5dGljYWxBZ2dyZWdhdGVkUm93OiB0YWJsZURlZmluaXRpb24uY29udHJvbC5hbmFseXRpY2FsQ29uZmlndXJhdGlvbj8uYWdncmVnYXRpb25PbkxlYWZMZXZlbFxuXHR9O1xuXHRyZXR1cm4gKFxuXHRcdDxGaWVsZFxuXHRcdFx0dmhJZFByZWZpeD17Z2VuZXJhdGUoW3RhYmxlSWQsIFwiVGFibGVWYWx1ZUhlbHBcIl0pfVxuXHRcdFx0ZWRpdE1vZGU9e2NvbHVtbkVkaXRNb2RlfVxuXHRcdFx0Y29udGV4dFBhdGg9e2NvbGxlY3Rpb24uZ2V0UGF0aCgpfVxuXHRcdFx0bWV0YVBhdGg9e2RhdGFGaWVsZENvbnRleHQuZ2V0UGF0aCgpfVxuXHRcdFx0dGV4dEFsaWduPXt0ZXh0QWxpZ259XG5cdFx0XHR3cmFwPXt0YWJsZVR5cGUgPT09IFwiUmVzcG9uc2l2ZVRhYmxlXCJ9XG5cdFx0XHRjbGFzcz17Y2xhc3NOYW1lfVxuXHRcdFx0bGl2ZUNoYW5nZT17aGFuZGxlclByb3ZpZGVyLmZpZWxkTGl2ZUNoYW5nZX1cblx0XHRcdGFyaWFMYWJlbGxlZEJ5PXthcmlhTGFiZWxsZWRCeSA/IFthcmlhTGFiZWxsZWRCeV0gOiB1bmRlZmluZWR9XG5cdFx0XHRuYXZpZ2F0ZUFmdGVyQWN0aW9uPXtjb2x1bW4uaXNOYXZpZ2FibGV9XG5cdFx0XHRzaG93RXJyb3JPYmplY3RTdGF0dXM9e2NvbHVtbi5mb3JtYXRPcHRpb25zPy5zaG93RXJyb3JPYmplY3RTdGF0dXMgYXMgdW5rbm93biBhcyBib29sZWFufVxuXHRcdD5cblx0XHRcdHt7XG5cdFx0XHRcdGZvcm1hdE9wdGlvbnM6IDxGaWVsZEZvcm1hdE9wdGlvbnMgey4uLmZvcm1hdE9wdGlvbnN9IC8+XG5cdFx0XHR9fVxuXHRcdDwvRmllbGQ+XG5cdCk7XG59XG5cbi8qKlxuICogQ3JlYXRlIHRoZSB0ZW1wbGF0ZSBmb3IgdGhlIGNvbHVtbi5cbiAqIEBwYXJhbSB0YWJsZUlkIFRoZSB0YWJsZSBJRFxuICogQHBhcmFtIHRhYmxlUHJvcGVydGllcyBUaGUgdGFibGUgcHJvcGVydGllc1xuICogQHBhcmFtIGNvbHVtbiBUaGUgY29sdW1uIGRlZmluaXRpb25cbiAqIEBwYXJhbSBkYXRhRmllbGRPUCBUaGUgZGF0YSBmaWVsZCBvYmplY3QgcGF0aFxuICogQHBhcmFtIGRhdGFGaWVsZENvbnRleHQgVGhlIGRhdGEgZmllbGQgY29udGV4dFxuICogQHBhcmFtIGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gY29udGV4dFxuICogQHBhcmFtIGhhbmRsZXJQcm92aWRlciBUaGUgaGFuZGxlciBwcm92aWRlclxuICogQHJldHVybnMgVGhlIFhNTCBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBjb2x1bW4uXG4gKi9cbmZ1bmN0aW9uIGdldENvbHVtbkNvbnRlbnRUZW1wbGF0ZShcblx0dGFibGVJZDogc3RyaW5nLFxuXHR0YWJsZVByb3BlcnRpZXM6IFRhYmxlQmxvY2tQcm9wZXJ0aWVzLFxuXHRjb2x1bW46IEFubm90YXRpb25UYWJsZUNvbHVtbixcblx0ZGF0YUZpZWxkT1A6IERhdGFNb2RlbE9iamVjdFBhdGg8RGF0YUZpZWxkQWJzdHJhY3RUeXBlcz4sXG5cdGRhdGFGaWVsZENvbnRleHQ6IENvbnRleHQsXG5cdGNvbGxlY3Rpb246IENvbnRleHQsXG5cdGhhbmRsZXJQcm92aWRlcjogVGFibGVFdmVudEhhbmRsZXJQcm92aWRlclxuKTogeyB0ZW1wbGF0ZTogc3RyaW5nOyBjcmVhdGlvblRlbXBsYXRlPzogc3RyaW5nIH0ge1xuXHRsZXQgdGVtcGxhdGU6IHN0cmluZztcblx0bGV0IGNyZWF0aW9uVGVtcGxhdGU6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuXHRjb25zdCB0YWJsZURlZmluaXRpb24gPSB0YWJsZVByb3BlcnRpZXMudGFibGVEZWZpbml0aW9uO1xuXHRjb25zdCBlbmFibGVBbmFseXRpY3MgPSB0YWJsZVByb3BlcnRpZXMudGFibGVEZWZpbml0aW9uLmVuYWJsZUFuYWx5dGljcztcblx0Y29uc3QgdGFibGVUeXBlID0gdGFibGVQcm9wZXJ0aWVzLnRhYmxlRGVmaW5pdGlvbi5jb250cm9sLnR5cGU7XG5cdGNvbnN0IGlzVGFibGVSZWFkT25seSA9IHRhYmxlUHJvcGVydGllcy5yZWFkT25seTtcblx0Y29uc3QgY3JlYXRpb25Nb2RlID0gdGFibGVQcm9wZXJ0aWVzLmNyZWF0aW9uTW9kZTtcblx0Y29uc3QgZmllbGRNb2RlID0gdGFibGVQcm9wZXJ0aWVzLmZpZWxkTW9kZTtcblx0Y29uc3QgaXNDb21wYWN0VHlwZSA9IHRhYmxlUHJvcGVydGllcy50YWJsZURlZmluaXRpb24uY29udHJvbC5pc0NvbXBhY3RUeXBlO1xuXG5cdGNvbnN0IGRhdGFGaWVsZCA9IGRhdGFGaWVsZE9QLnRhcmdldE9iamVjdCBhcyBEYXRhRmllbGRBYnN0cmFjdFR5cGVzO1xuXHRpZiAoXG5cdFx0aXNBbm5vdGF0aW9uT2ZUeXBlPERhdGFGaWVsZEZvckFubm90YXRpb24+KGRhdGFGaWVsZCwgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQW5ub3RhdGlvbikgJiZcblx0XHQoaXNBbm5vdGF0aW9uT2ZUZXJtPENoYXJ0PihkYXRhRmllbGQuVGFyZ2V0LiR0YXJnZXQsIFVJQW5ub3RhdGlvblRlcm1zLkNoYXJ0KSB8fFxuXHRcdFx0aXNBbm5vdGF0aW9uT2ZUZXJtPFByZXNlbnRhdGlvblZhcmlhbnQ+KGRhdGFGaWVsZC5UYXJnZXQuJHRhcmdldCwgVUlBbm5vdGF0aW9uVGVybXMuUHJlc2VudGF0aW9uVmFyaWFudCkpXG5cdCkge1xuXHRcdGNvbnN0IHNob3dPbmx5Q2hhcnQgPSAodGFibGVUeXBlID09PSBcIlJlc3BvbnNpdmVUYWJsZVwiID8gIWNvbHVtbi5zZXR0aW5ncz8uc2hvd01pY3JvQ2hhcnRMYWJlbCA6IHVuZGVmaW5lZCkgPz8gdHJ1ZTtcblx0XHRjb25zdCBtaWNyb0NoYXJ0U2l6ZSA9IHRhYmxlVHlwZSA9PT0gXCJSZXNwb25zaXZlVGFibGVcIiA/IGNvbHVtbi5zZXR0aW5ncz8ubWljcm9DaGFydFNpemUgPz8gXCJYU1wiIDogXCJYU1wiO1xuXHRcdGxldCBtaWNyb0NoYXJ0Q29sbGVjdGlvbiA9IGNvbGxlY3Rpb25cblx0XHRcdC5nZXRNb2RlbCgpXG5cdFx0XHQuY3JlYXRlQmluZGluZ0NvbnRleHQoY29sbGVjdGlvbi5nZXRQYXRoKGRhdGFGaWVsZENvbnRleHQuZ2V0T2JqZWN0KFwiVGFyZ2V0LyRBbm5vdGF0aW9uUGF0aFwiKSkpO1xuXHRcdG1pY3JvQ2hhcnRDb2xsZWN0aW9uID0gY29sbGVjdGlvbi5nZXRNb2RlbCgpLmNyZWF0ZUJpbmRpbmdDb250ZXh0KENvbW1vbkhlbHBlci5nZXROYXZpZ2F0aW9uQ29udGV4dChtaWNyb0NoYXJ0Q29sbGVjdGlvbikpO1xuXHRcdC8vV2Ugb25seSBjb25zaWRlciB0aGUgZmlyc3QgdmlzdWFsaXphdGlvbiBvZiB0aGUgUFYgaW4gUFYgY2FzZSBhbmQgZXhwZWN0IGl0IHRvIGJlIGEgY2hhcnQgKHNpbWlsYXIgdG8gVmlzdWFsRmlsdGVycylcblx0XHR0ZW1wbGF0ZSA9IChcblx0XHRcdDxNaWNyb0NoYXJ0XG5cdFx0XHRcdGlkPXtnZW5lcmF0ZShbdGFibGVJZCwgZGF0YUZpZWxkXSl9XG5cdFx0XHRcdGNvbnRleHRQYXRoPXttaWNyb0NoYXJ0Q29sbGVjdGlvbi5nZXRQYXRoKCl9XG5cdFx0XHRcdG1ldGFQYXRoPXtkYXRhRmllbGRDb250ZXh0XG5cdFx0XHRcdFx0LmdldE1vZGVsKClcblx0XHRcdFx0XHQuY3JlYXRlQmluZGluZ0NvbnRleHQoZGF0YUZpZWxkQ29udGV4dC5nZXRQYXRoKCkgKyBcIi9UYXJnZXQvJEFubm90YXRpb25QYXRoXCIpXG5cdFx0XHRcdFx0LmdldFBhdGgoKX1cblx0XHRcdFx0c2hvd09ubHlDaGFydD17c2hvd09ubHlDaGFydH1cblx0XHRcdFx0c2l6ZT17bWljcm9DaGFydFNpemUgPz8gXCJYU1wifVxuXHRcdFx0XHRoaWRlT25Ob0RhdGE9e3RydWV9XG5cdFx0XHRcdGlzQW5hbHl0aWNzPXtlbmFibGVBbmFseXRpY3N9XG5cdFx0XHQvPlxuXHRcdCk7XG5cdH0gZWxzZSBpZiAoXG5cdFx0aXNBbm5vdGF0aW9uT2ZUeXBlPERhdGFGaWVsZD4oZGF0YUZpZWxkLCBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGQpICYmXG5cdFx0aXNNdWx0aVZhbHVlRmllbGQoZW5oYW5jZURhdGFNb2RlbFBhdGgoZGF0YUZpZWxkT1AsIGRhdGFGaWVsZC5WYWx1ZS5wYXRoKSlcblx0KSB7XG5cdFx0Ly8gd2hlbiBldmFsdWF0aW5nIFwiQCR1aTUuY29udGV4dC5pc0luYWN0aXZlXCIgd2UgYXJlIGZvcmNlZCB0byBhZGQgaXNUcnV0aHkgdG8gZm9yY2UgdGhlIGJpbmRpbmcgZXZhbHVhdGlvblxuXHRcdGNvbnN0IGlzUmVhZE9ubHkgPSBjb21waWxlRXhwcmVzc2lvbihcblx0XHRcdGlmRWxzZShcblx0XHRcdFx0b3IoaXNUYWJsZVJlYWRPbmx5ID09PSB0cnVlLCBhbmQoaXNUcnV0aHkoVUkuSXNJbmFjdGl2ZSksIGNyZWF0aW9uTW9kZT8ubmFtZSA9PT0gXCJJbmxpbmVDcmVhdGlvblJvd3NcIikpLFxuXHRcdFx0XHRjb25zdGFudCh0cnVlKSxcblx0XHRcdFx0aWZFbHNlKGVxdWFsKGZpZWxkTW9kZSwgXCJub3dyYXBwZXJcIiksIGNvbnN0YW50KHRydWUpLCBjb25zdGFudCh1bmRlZmluZWQpKVxuXHRcdFx0KVxuXHRcdCk7XG5cdFx0aWYgKGlzUmVhZE9ubHkgPT09IFwidW5kZWZpbmVkXCIpIHtcblx0XHRcdHRlbXBsYXRlID0gPE11bHRpVmFsdWVGaWVsZEJsb2NrIGNvbnRleHRQYXRoPXtjb2xsZWN0aW9uLmdldFBhdGgoKX0gbWV0YVBhdGg9e2RhdGFGaWVsZENvbnRleHQuZ2V0UGF0aCgpfSAvPjtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGVtcGxhdGUgPSAoXG5cdFx0XHRcdDxNdWx0aVZhbHVlRmllbGRCbG9jayBjb250ZXh0UGF0aD17Y29sbGVjdGlvbi5nZXRQYXRoKCl9IG1ldGFQYXRoPXtkYXRhRmllbGRDb250ZXh0LmdldFBhdGgoKX0gcmVhZE9ubHk9e2lzUmVhZE9ubHl9IC8+XG5cdFx0XHQpO1xuXHRcdH1cblx0fSBlbHNlIGlmIChcblx0XHRpc0Fubm90YXRpb25PZlR5cGU8RGF0YUZpZWxkRm9yQW5ub3RhdGlvbj4oZGF0YUZpZWxkLCBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JBbm5vdGF0aW9uKSAmJlxuXHRcdGlzQW5ub3RhdGlvbk9mVGVybTxGaWVsZEdyb3VwPihkYXRhRmllbGQuVGFyZ2V0LiR0YXJnZXQsIFVJQW5ub3RhdGlvblRlcm1zLkZpZWxkR3JvdXApXG5cdCkge1xuXHRcdGNvbnN0IGZpZWxkR3JvdXA6IEZpZWxkR3JvdXAgPSBkYXRhRmllbGQuVGFyZ2V0LiR0YXJnZXQ7XG5cdFx0Y29uc3QgZGF0YUZpZWxkQ29sbGVjdGlvbkNvbnRleHQgPSBkYXRhRmllbGRDb250ZXh0XG5cdFx0XHQuZ2V0TW9kZWwoKVxuXHRcdFx0LmNyZWF0ZUJpbmRpbmdDb250ZXh0KGRhdGFGaWVsZENvbnRleHQuZ2V0UGF0aCgpICsgXCIvVGFyZ2V0LyRBbm5vdGF0aW9uUGF0aC9EYXRhXCIpO1xuXHRcdGNvbnN0IGZpZWxkR3JvdXBDb2xlY3Rpb25MZW5ndGggPSBmaWVsZEdyb3VwLkRhdGEubGVuZ3RoIC0gMTtcblxuXHRcdGNvbnN0IGl0ZW1zID0gZmllbGRHcm91cC5EYXRhLm1hcCgoZmllbGRHcm91cERhdGFGaWVsZDogRGF0YUZpZWxkQWJzdHJhY3RUeXBlcywgZmllbGRHcm91cERhdGFGaWVsZElkeDogbnVtYmVyKSA9PiB7XG5cdFx0XHRjb25zdCBmaWVsZEdyb3VwRGF0YUZpZWxkQ29udGV4dCA9IGRhdGFGaWVsZENvbGxlY3Rpb25Db250ZXh0XG5cdFx0XHRcdC5nZXRNb2RlbCgpXG5cdFx0XHRcdC5jcmVhdGVCaW5kaW5nQ29udGV4dChkYXRhRmllbGRDb2xsZWN0aW9uQ29udGV4dC5nZXRQYXRoKCkgKyBcIi9cIiArIGZpZWxkR3JvdXBEYXRhRmllbGRJZHgpO1xuXHRcdFx0Y29uc3QgZmllbGRHcm91cERhdGFGaWVsZE9QID0gZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzPERhdGFGaWVsZEFic3RyYWN0VHlwZXM+KGZpZWxkR3JvdXBEYXRhRmllbGRDb250ZXh0KTtcblx0XHRcdGNvbnN0IGZpZWxkR3JvdXBMYWJlbCA9IEZpZWxkSGVscGVyLmNvbXB1dGVMYWJlbFRleHQoZmllbGRHcm91cERhdGFGaWVsZENvbnRleHQuZ2V0T2JqZWN0KCksIHtcblx0XHRcdFx0Y29udGV4dDogZmllbGRHcm91cERhdGFGaWVsZENvbnRleHRcblx0XHRcdH0pO1xuXHRcdFx0aWYgKGNvbHVtbi5zaG93RGF0YUZpZWxkc0xhYmVsICYmICEhZmllbGRHcm91cExhYmVsKSB7XG5cdFx0XHRcdGNvbnN0IHJlc291cmNlQnVuZGxlID0gTGlicmFyeS5nZXRSZXNvdXJjZUJ1bmRsZUZvcihcInNhcC5mZS5tYWNyb3NcIikhO1xuXHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdDxIQm94XG5cdFx0XHRcdFx0XHR2aXNpYmxlPXtnZXRWaXNpYmxlRXhwcmVzc2lvbihmaWVsZEdyb3VwRGF0YUZpZWxkT1ApfVxuXHRcdFx0XHRcdFx0YWxpZ25JdGVtcz17RmllbGRIZWxwZXIuYnVpbGRFeHByZXNzaW9uRm9yQWxpZ25JdGVtcyhcblx0XHRcdFx0XHRcdFx0ZmllbGRHcm91cERhdGFGaWVsZENvbnRleHQuZ2V0T2JqZWN0KFwiVGFyZ2V0LyRBbm5vdGF0aW9uUGF0aC9WaXN1YWxpemF0aW9uLyRFbnVtTWVtYmVyXCIpXG5cdFx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdDxMYWJlbFxuXHRcdFx0XHRcdFx0XHRpZD17VGFibGVIZWxwZXIuZ2V0RmllbGRHcm91cExhYmVsU3RhYmxlSWQodGFibGVJZCwgZmllbGRHcm91cERhdGFGaWVsZE9QKX1cblx0XHRcdFx0XHRcdFx0dGV4dD17cmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkhFQURFUl9GT1JNX0xBQkVMXCIsIFtmaWVsZEdyb3VwTGFiZWxdKX1cblx0XHRcdFx0XHRcdFx0Y2xhc3M9XCJzYXBVaVRpbnlNYXJnaW5FbmRcIlxuXHRcdFx0XHRcdFx0XHR2aXNpYmxlPXtnZXRWaXNpYmxlRXhwcmVzc2lvbihmaWVsZEdyb3VwRGF0YUZpZWxkT1ApfVxuXHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHRcdDxWQm94PlxuXHRcdFx0XHRcdFx0XHR7e1xuXHRcdFx0XHRcdFx0XHRcdGxheW91dERhdGE6IDxGbGV4SXRlbURhdGEgZ3Jvd0ZhY3Rvcj1cIjFcIiAvPixcblx0XHRcdFx0XHRcdFx0XHRpdGVtczogZ2V0TWFjcm9GaWVsZFRlbXBsYXRlKFxuXHRcdFx0XHRcdFx0XHRcdFx0dGFibGVJZCxcblx0XHRcdFx0XHRcdFx0XHRcdHRhYmxlRGVmaW5pdGlvbixcblx0XHRcdFx0XHRcdFx0XHRcdGNvbHVtbixcblx0XHRcdFx0XHRcdFx0XHRcdGZpZWxkR3JvdXBEYXRhRmllbGRDb250ZXh0LFxuXHRcdFx0XHRcdFx0XHRcdFx0Y29sbGVjdGlvbixcblx0XHRcdFx0XHRcdFx0XHRcdGVuYWJsZUFuYWx5dGljcyxcblx0XHRcdFx0XHRcdFx0XHRcdHRhYmxlVHlwZSxcblx0XHRcdFx0XHRcdFx0XHRcdGlzVGFibGVSZWFkT25seSxcblx0XHRcdFx0XHRcdFx0XHRcdGNyZWF0aW9uTW9kZSxcblx0XHRcdFx0XHRcdFx0XHRcdHVuZGVmaW5lZCxcblx0XHRcdFx0XHRcdFx0XHRcdGlzQ29tcGFjdFR5cGUsXG5cdFx0XHRcdFx0XHRcdFx0XHRcIkxlZnRcIixcblx0XHRcdFx0XHRcdFx0XHRcdGAke1RhYmxlSGVscGVyLmdldENvbHVtblN0YWJsZUlkKHRhYmxlSWQsIGRhdGFGaWVsZE9QKX0gJHtUYWJsZUhlbHBlci5nZXRGaWVsZEdyb3VwTGFiZWxTdGFibGVJZChcblx0XHRcdFx0XHRcdFx0XHRcdFx0dGFibGVJZCxcblx0XHRcdFx0XHRcdFx0XHRcdFx0ZmllbGRHcm91cERhdGFGaWVsZE9QXG5cdFx0XHRcdFx0XHRcdFx0XHQpfWAsXG5cdFx0XHRcdFx0XHRcdFx0XHR0cnVlLFxuXHRcdFx0XHRcdFx0XHRcdFx0VGFibGVIZWxwZXIuZ2V0TWFyZ2luQ2xhc3MoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGZpZWxkR3JvdXBEYXRhRmllbGRDb250ZXh0LmdldE9iamVjdChcIlRhcmdldC8kQW5ub3RhdGlvblBhdGgvVmlzdWFsaXphdGlvbi8kRW51bU1lbWJlclwiKSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0ZmllbGRHcm91cERhdGFGaWVsZElkeCA9PT0gZmllbGRHcm91cENvbGVjdGlvbkxlbmd0aFxuXHRcdFx0XHRcdFx0XHRcdFx0KSxcblx0XHRcdFx0XHRcdFx0XHRcdGhhbmRsZXJQcm92aWRlclxuXHRcdFx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHRcdFx0fX1cblx0XHRcdFx0XHRcdDwvVkJveD5cblx0XHRcdFx0XHQ8L0hCb3g+XG5cdFx0XHRcdCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRyZXR1cm4gZ2V0TWFjcm9GaWVsZFRlbXBsYXRlKFxuXHRcdFx0XHRcdHRhYmxlSWQsXG5cdFx0XHRcdFx0dGFibGVEZWZpbml0aW9uLFxuXHRcdFx0XHRcdGNvbHVtbixcblx0XHRcdFx0XHRmaWVsZEdyb3VwRGF0YUZpZWxkQ29udGV4dCxcblx0XHRcdFx0XHRjb2xsZWN0aW9uLFxuXHRcdFx0XHRcdGVuYWJsZUFuYWx5dGljcyxcblx0XHRcdFx0XHR0YWJsZVR5cGUsXG5cdFx0XHRcdFx0aXNUYWJsZVJlYWRPbmx5LFxuXHRcdFx0XHRcdGNyZWF0aW9uTW9kZSxcblx0XHRcdFx0XHRmaWVsZE1vZGUsXG5cdFx0XHRcdFx0aXNDb21wYWN0VHlwZSxcblx0XHRcdFx0XHR1bmRlZmluZWQsXG5cdFx0XHRcdFx0VGFibGVIZWxwZXIuZ2V0Q29sdW1uU3RhYmxlSWQodGFibGVJZCwgZGF0YUZpZWxkT1ApLFxuXHRcdFx0XHRcdGZhbHNlLFxuXHRcdFx0XHRcdFRhYmxlSGVscGVyLmdldE1hcmdpbkNsYXNzKFxuXHRcdFx0XHRcdFx0ZmllbGRHcm91cERhdGFGaWVsZENvbnRleHQuZ2V0T2JqZWN0KFwiVGFyZ2V0LyRBbm5vdGF0aW9uUGF0aC9WaXN1YWxpemF0aW9uLyRFbnVtTWVtYmVyXCIpLFxuXHRcdFx0XHRcdFx0ZmllbGRHcm91cERhdGFGaWVsZElkeCA9PT0gZmllbGRHcm91cENvbGVjdGlvbkxlbmd0aFxuXHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0aGFuZGxlclByb3ZpZGVyXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHRjb25zdCBkcmFmdEluZGljYXRvciA9IGdldERyYWZ0SW5kaWNhdG9yKGNvbGxlY3Rpb24sIGNvbHVtbik7XG5cdFx0aWYgKGRyYWZ0SW5kaWNhdG9yKSB7XG5cdFx0XHRpdGVtcy5wdXNoKGRyYWZ0SW5kaWNhdG9yKTtcblx0XHR9XG5cdFx0Y29uc3Qgc2l0dWF0aW9uSW5kaWNhdG9yID0gZ2V0U2l0dWF0aW9uSW5kaWNhdG9yKGNvbGxlY3Rpb24sIGNvbHVtbik7XG5cdFx0aWYgKHNpdHVhdGlvbkluZGljYXRvcikge1xuXHRcdFx0aXRlbXMucHVzaChzaXR1YXRpb25JbmRpY2F0b3IpO1xuXHRcdH1cblxuXHRcdHRlbXBsYXRlID0gKFxuXHRcdFx0PFZCb3hcblx0XHRcdFx0dmlzaWJsZT17VGFibGVIZWxwZXIuZ2V0VkJveFZpc2liaWxpdHkoXG5cdFx0XHRcdFx0ZGF0YUZpZWxkQ29sbGVjdGlvbkNvbnRleHQuZ2V0T2JqZWN0KCksXG5cdFx0XHRcdFx0Y29sdW1uLkZpZWxkR3JvdXBIaWRkZW5FeHByZXNzaW9ucyxcblx0XHRcdFx0XHRkYXRhRmllbGRDb250ZXh0LmdldE9iamVjdCgpXG5cdFx0XHRcdCl9XG5cdFx0XHQ+XG5cdFx0XHRcdHt7XG5cdFx0XHRcdFx0aXRlbXM6IGl0ZW1zXG5cdFx0XHRcdH19XG5cdFx0XHQ8L1ZCb3g+XG5cdFx0KTtcblx0fSBlbHNlIHtcblx0XHR0ZW1wbGF0ZSA9IGdldE1hY3JvRmllbGRUZW1wbGF0ZShcblx0XHRcdHRhYmxlSWQsXG5cdFx0XHR0YWJsZURlZmluaXRpb24sXG5cdFx0XHRjb2x1bW4sXG5cdFx0XHRkYXRhRmllbGRDb250ZXh0LFxuXHRcdFx0Y29sbGVjdGlvbixcblx0XHRcdGVuYWJsZUFuYWx5dGljcyxcblx0XHRcdHRhYmxlVHlwZSxcblx0XHRcdGlzVGFibGVSZWFkT25seSxcblx0XHRcdGNyZWF0aW9uTW9kZSxcblx0XHRcdGZpZWxkTW9kZSxcblx0XHRcdGlzQ29tcGFjdFR5cGUsXG5cdFx0XHR1bmRlZmluZWQsXG5cdFx0XHR1bmRlZmluZWQsXG5cdFx0XHRmYWxzZSxcblx0XHRcdHVuZGVmaW5lZCxcblx0XHRcdGhhbmRsZXJQcm92aWRlclxuXHRcdCk7XG5cdFx0Y3JlYXRpb25UZW1wbGF0ZSA9IGdldENyZWF0aW9uVGVtcGxhdGUoXG5cdFx0XHR0YWJsZUlkLFxuXHRcdFx0Y29sdW1uLFxuXHRcdFx0dGFibGVUeXBlLFxuXHRcdFx0Y3JlYXRpb25Nb2RlLFxuXHRcdFx0aXNUYWJsZVJlYWRPbmx5LFxuXHRcdFx0Y29sbGVjdGlvbixcblx0XHRcdGRhdGFGaWVsZENvbnRleHQsXG5cdFx0XHRmaWVsZE1vZGUsXG5cdFx0XHRlbmFibGVBbmFseXRpY3MsXG5cdFx0XHRoYW5kbGVyUHJvdmlkZXJcblx0XHQpO1xuXHR9XG5cblx0cmV0dXJuIHsgdGVtcGxhdGUsIGNyZWF0aW9uVGVtcGxhdGUgfTtcbn1cblxuLyoqXG4gKiBDcmVhdGUgdGhlIHRlbXBsYXRlIGZvciBhIGNvbHVtbi5cbiAqIEBwYXJhbSB0YWJsZUlkIFRoZSB0YWJsZSBJRFxuICogQHBhcmFtIHRhYmxlUHJvcGVydGllcyBUYWJsZSBwcm9wZXJ0aWVzXG4gKiBAcGFyYW0gY29sdW1uIFRoZSBjb2x1bW4gZGVmaW5pdGlvblxuICogQHBhcmFtIGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gY29udGV4dCB1c2VkIGZvciBjb250ZXh0IHBhdGhcbiAqIEBwYXJhbSBoYW5kbGVyUHJvdmlkZXIgVGhlIGhhbmRsZXIgcHJvdmlkZXJcbiAqIEByZXR1cm5zIFRoZSBYTUwgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgY29sdW1uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q29sdW1uVGVtcGxhdGUoXG5cdHRhYmxlSWQ6IHN0cmluZyxcblx0dGFibGVQcm9wZXJ0aWVzOiBUYWJsZUJsb2NrUHJvcGVydGllcyxcblx0Y29sdW1uOiBBbm5vdGF0aW9uVGFibGVDb2x1bW4sXG5cdGNvbGxlY3Rpb246IENvbnRleHQsXG5cdGhhbmRsZXJQcm92aWRlcjogVGFibGVFdmVudEhhbmRsZXJQcm92aWRlclxuKTogQ29sdW1uIHwgdW5kZWZpbmVkIHtcblx0bGV0IGRhdGFGaWVsZENvbnRleHQgPSBjb2xsZWN0aW9uLmdldE1vZGVsKCkuY3JlYXRlQmluZGluZ0NvbnRleHQoY29sdW1uLmFubm90YXRpb25QYXRoKTtcblx0aWYgKCFkYXRhRmllbGRDb250ZXh0KSB7XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxuXHRkYXRhRmllbGRDb250ZXh0ID0gY29sbGVjdGlvbi5nZXRNb2RlbCgpLmNyZWF0ZUJpbmRpbmdDb250ZXh0KEZpZWxkSGVscGVyLmdldERhdGFGaWVsZERlZmF1bHQoZGF0YUZpZWxkQ29udGV4dCkpO1xuXHRjb25zdCBkYXRhRmllbGRPYmplY3RNb2RlbFBhdGggPSBnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHM8RGF0YUZpZWxkQWJzdHJhY3RUeXBlcz4oZGF0YUZpZWxkQ29udGV4dCwgY29sbGVjdGlvbik7XG5cdGNvbnN0IGRhdGFGaWVsZE9iamVjdCA9IGRhdGFGaWVsZENvbnRleHQ/LmdldE9iamVjdD8uKCkgPz8ge307XG5cblx0Y29uc3QgdGVtcGxhdGVzID0gZ2V0Q29sdW1uQ29udGVudFRlbXBsYXRlKFxuXHRcdHRhYmxlSWQsXG5cdFx0dGFibGVQcm9wZXJ0aWVzLFxuXHRcdGNvbHVtbixcblx0XHRkYXRhRmllbGRPYmplY3RNb2RlbFBhdGgsXG5cdFx0ZGF0YUZpZWxkQ29udGV4dCxcblx0XHRjb2xsZWN0aW9uLFxuXHRcdGhhbmRsZXJQcm92aWRlclxuXHQpO1xuXG5cdGNvbnN0IGVuYWJsZUF1dG9Db2x1bW5XaWR0aCA9IHRhYmxlUHJvcGVydGllcy5lbmFibGVBdXRvQ29sdW1uV2lkdGggPz8gdGFibGVQcm9wZXJ0aWVzLnRhYmxlRGVmaW5pdGlvbi5jb250cm9sLmVuYWJsZUF1dG9Db2x1bW5XaWR0aDtcblx0Y29uc3Qgd2lkdGhJbmNsdWRpbmdDb2x1bW5IZWFkZXIgPSB0YWJsZVByb3BlcnRpZXMudGFibGVEZWZpbml0aW9uLmNvbnRyb2wud2lkdGhJbmNsdWRpbmdDb2x1bW5IZWFkZXI7XG5cdGNvbnN0IHRhYmxlVHlwZSA9IHRhYmxlUHJvcGVydGllcy50YWJsZURlZmluaXRpb24uY29udHJvbC50eXBlO1xuXG5cdHJldHVybiAoXG5cdFx0PENvbHVtblxuXHRcdFx0aWQ9e1RhYmxlSGVscGVyLmdldENvbHVtblN0YWJsZUlkKHRhYmxlSWQsIGRhdGFGaWVsZE9iamVjdE1vZGVsUGF0aCl9XG5cdFx0XHR3aWR0aD17XG5cdFx0XHRcdCFDb21tb25VdGlscy5pc1NtYWxsRGV2aWNlKCkgfHwgY29sdW1uLndpZHRoXG5cdFx0XHRcdFx0PyBUYWJsZUhlbHBlci5nZXRDb2x1bW5XaWR0aChcblx0XHRcdFx0XHRcdFx0eyBlbmFibGVBdXRvQ29sdW1uV2lkdGgsIHdpZHRoSW5jbHVkaW5nQ29sdW1uSGVhZGVyLCB0YWJsZVR5cGUgfSxcblx0XHRcdFx0XHRcdFx0Y29sdW1uLFxuXHRcdFx0XHRcdFx0XHRkYXRhRmllbGRPYmplY3QsXG5cdFx0XHRcdFx0XHRcdFRhYmxlSGVscGVyLmdldFRleHRPbkFjdGlvbkZpZWxkKGRhdGFGaWVsZE9iamVjdCwgeyBjb250ZXh0OiBkYXRhRmllbGRDb250ZXh0IH0pLFxuXHRcdFx0XHRcdFx0XHRkYXRhRmllbGRPYmplY3RNb2RlbFBhdGgsXG5cdFx0XHRcdFx0XHRcdHRydWUsXG5cdFx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0XHR0aXRsZTogZGF0YUZpZWxkQ29udGV4dC5nZXRPYmplY3QoXCJUYXJnZXQvJEFubm90YXRpb25QYXRoL1RpdGxlXCIpIHx8IFwiXCIsXG5cdFx0XHRcdFx0XHRcdFx0ZGVzY3JpcHRpb246IGRhdGFGaWVsZENvbnRleHQuZ2V0T2JqZWN0KFwiVGFyZ2V0LyRBbm5vdGF0aW9uUGF0aC9UaXRsZVwiKSB8fCBcIlwiXG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHQgIClcblx0XHRcdFx0XHQ6IHVuZGVmaW5lZFxuXHRcdFx0fVxuXHRcdFx0bWluV2lkdGg9e1xuXHRcdFx0XHRDb21tb25VdGlscy5pc1NtYWxsRGV2aWNlKClcblx0XHRcdFx0XHQ/IFRhYmxlSGVscGVyLmdldENvbHVtbldpZHRoKFxuXHRcdFx0XHRcdFx0XHR7IGVuYWJsZUF1dG9Db2x1bW5XaWR0aCwgd2lkdGhJbmNsdWRpbmdDb2x1bW5IZWFkZXIsIHRhYmxlVHlwZSB9LFxuXHRcdFx0XHRcdFx0XHRjb2x1bW4sXG5cdFx0XHRcdFx0XHRcdGRhdGFGaWVsZE9iamVjdCxcblx0XHRcdFx0XHRcdFx0VGFibGVIZWxwZXIuZ2V0VGV4dE9uQWN0aW9uRmllbGQoZGF0YUZpZWxkT2JqZWN0LCB7IGNvbnRleHQ6IGRhdGFGaWVsZENvbnRleHQgfSksXG5cdFx0XHRcdFx0XHRcdGRhdGFGaWVsZE9iamVjdE1vZGVsUGF0aCxcblx0XHRcdFx0XHRcdFx0ZmFsc2UsXG5cdFx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0XHR0aXRsZTogZGF0YUZpZWxkQ29udGV4dC5nZXRPYmplY3QoXCJUYXJnZXQvJEFubm90YXRpb25QYXRoL1RpdGxlXCIpIHx8IFwiXCIsXG5cdFx0XHRcdFx0XHRcdFx0ZGVzY3JpcHRpb246IGRhdGFGaWVsZENvbnRleHQuZ2V0T2JqZWN0KFwiVGFyZ2V0LyRBbm5vdGF0aW9uUGF0aC9EZXNjcmlwdGlvblwiKSB8fCBcIlwiXG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHQgIClcblx0XHRcdFx0XHQ6IHVuZGVmaW5lZFxuXHRcdFx0fVxuXHRcdFx0aGVhZGVyPXtjb2x1bW4ubGFiZWwgfHwgY29sdW1uLm5hbWV9XG5cdFx0XHRwcm9wZXJ0eUtleT17Y29sdW1uLm5hbWV9XG5cdFx0XHRoQWxpZ249e2NvbHVtbi5ob3Jpem9udGFsQWxpZ24gfHwgRmllbGRIZWxwZXIuZ2V0Q29sdW1uQWxpZ25tZW50KGRhdGFGaWVsZE9iamVjdCwgeyBjb2xsZWN0aW9uOiBjb2xsZWN0aW9uIH0pfVxuXHRcdFx0aGVhZGVyVmlzaWJsZT17VGFibGVIZWxwZXIuc2V0SGVhZGVyTGFiZWxWaXNpYmlsaXR5KGRhdGFGaWVsZE9iamVjdCwgZGF0YUZpZWxkQ29udGV4dC5nZXRPYmplY3QoXCJUYXJnZXQvJEFubm90YXRpb25QYXRoL0RhdGFcIikpfVxuXHRcdFx0dG9vbHRpcD17Y29sdW1uLnRvb2x0aXB9XG5cdFx0XHRyZXF1aXJlZD17dGFibGVQcm9wZXJ0aWVzLnJlYWRPbmx5ID8gdW5kZWZpbmVkIDogY29sdW1uLnJlcXVpcmVkfVxuXHRcdD5cblx0XHRcdHt7XG5cdFx0XHRcdGN1c3RvbURhdGE6IGNyZWF0ZUN1c3RvbURhdGEoXCJzaG93RGF0YUZpZWxkc0xhYmVsXCIsIGNvbHVtbi5zaG93RGF0YUZpZWxkc0xhYmVsKSxcblx0XHRcdFx0ZXh0ZW5kZWRTZXR0aW5nczogPFJlc3BvbnNpdmVDb2x1bW5TZXR0aW5ncyBpbXBvcnRhbmNlPXtjb2x1bW4uaW1wb3J0YW5jZX0gLz4sXG5cdFx0XHRcdHRlbXBsYXRlOiB0ZW1wbGF0ZXMudGVtcGxhdGUsXG5cdFx0XHRcdGNyZWF0aW9uVGVtcGxhdGU6IHRlbXBsYXRlcy5jcmVhdGlvblRlbXBsYXRlXG5cdFx0XHR9fVxuXHRcdDwvQ29sdW1uPlxuXHQpO1xufVxuXG4vKipcbiAqIENyZWF0ZSB0aGUgdGVtcGxhdGUgZm9yIGFsbCB0aGUgY29sdW1ucyBpbiB0aGUgdGFibGUuXG4gKiBAcGFyYW0gdGFibGVQcm9wZXJ0aWVzIFRoZSB0YWJsZSBwcm9wZXJ0aWVzXG4gKiBAcGFyYW0gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiBjb250ZXh0IHVzZWQgZm9yIGNvbnRleHQgcGF0aFxuICogQHBhcmFtIGhhbmRsZXJQcm92aWRlciBUaGUgaGFuZGxlciBwcm92aWRlclxuICogQHJldHVybnMgVGhlIFhNTCBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBjb2x1bW5zLlxuICovXG5mdW5jdGlvbiBnZXRDb2x1bW5zKHRhYmxlUHJvcGVydGllczogVGFibGVCbG9ja1Byb3BlcnRpZXMsIGNvbGxlY3Rpb246IENvbnRleHQsIGhhbmRsZXJQcm92aWRlcjogVGFibGVFdmVudEhhbmRsZXJQcm92aWRlcik6IENvbHVtbltdIHtcblx0Y29uc3QgdGFibGVJZCA9IHRhYmxlUHJvcGVydGllcy5jb250ZW50SWQ7XG5cdHJldHVybiB0YWJsZVByb3BlcnRpZXMudGFibGVEZWZpbml0aW9uLmNvbHVtbnNcblx0XHQubWFwKChjb2x1bW4pID0+IHtcblx0XHRcdGlmIChjb2x1bW4uYXZhaWxhYmlsaXR5ID09PSBcIkRlZmF1bHRcIiAmJiBjb2x1bW4udHlwZSA9PT0gXCJEZWZhdWx0XCIpIHtcblx0XHRcdFx0TG9nLmVycm9yKFwiQ3VzdG9tIGNvbHVtbnMgZGVmaW5lZCBpbiB0aGUgbWFuaWZlc3QgYXJlIG5vdCBzdXBwb3J0ZWQgd2hlbiB1c2luZyBhIHRhYmxlIGJ1aWxkaW5nIGJsb2NrLlwiKTtcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiQ3VzdG9tIGNvbHVtbnMgZGVmaW5lZCBpbiB0aGUgbWFuaWZlc3QgYXJlIG5vdCBzdXBwb3J0ZWQgd2hlbiB1c2luZyBhIHRhYmxlIGJ1aWxkaW5nIGJsb2NrLlwiKTtcblx0XHRcdH0gZWxzZSBpZiAoY29sdW1uLmF2YWlsYWJpbGl0eSA9PT0gXCJEZWZhdWx0XCIgJiYgY29sdW1uLnR5cGUgPT09IFwiQW5ub3RhdGlvblwiKSB7XG5cdFx0XHRcdHJldHVybiBnZXRDb2x1bW5UZW1wbGF0ZSh0YWJsZUlkLCB0YWJsZVByb3BlcnRpZXMsIGNvbHVtbiBhcyBBbm5vdGF0aW9uVGFibGVDb2x1bW4sIGNvbGxlY3Rpb24sIGhhbmRsZXJQcm92aWRlcik7XG5cdFx0XHR9IGVsc2UgaWYgKGNvbHVtbi5hdmFpbGFiaWxpdHkgPT09IFwiRGVmYXVsdFwiICYmIGNvbHVtbi50eXBlID09PSBcIlNsb3RcIikge1xuXHRcdFx0XHRyZXR1cm4gZ2V0U2xvdENvbHVtbih0YWJsZUlkLCBjb2x1bW4gYXMgQ3VzdG9tQmFzZWRUYWJsZUNvbHVtbiwgdGFibGVQcm9wZXJ0aWVzLnJlYWRPbmx5KTtcblx0XHRcdH0gZWxzZSBpZiAoY29sdW1uLmF2YWlsYWJpbGl0eSA9PT0gXCJEZWZhdWx0XCIgJiYgY29sdW1uLnR5cGUgPT09IFwiQ29tcHV0ZWRcIikge1xuXHRcdFx0XHRyZXR1cm4gZ2V0Q29tcHV0ZWRDb2x1bW4oXG5cdFx0XHRcdFx0dGFibGVJZCxcblx0XHRcdFx0XHRjb2x1bW4gYXMgQ29tcHV0ZWRUYWJsZUNvbHVtbixcblx0XHRcdFx0XHRjb2xsZWN0aW9uLFxuXHRcdFx0XHRcdHRhYmxlUHJvcGVydGllcy50YWJsZURlZmluaXRpb24uZW5hYmxlQW5hbHl0aWNzXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0fSlcblx0XHQuZmlsdGVyKChjb2x1bW4pID0+IGNvbHVtbiAhPT0gdW5kZWZpbmVkKSBhcyBDb2x1bW5bXTtcbn1cblxuZXhwb3J0IHR5cGUgVGFibGVCbG9ja1Byb3BlcnRpZXMgPSBPbWl0PFN0cmljdFByb3BlcnRpZXNPZjxUYWJsZUFQST4sIFwibWV0YVBhdGhcIiB8IFwiY29udGV4dFBhdGhcIj4gJiB7XG5cdGdldFRyYW5zbGF0ZWRUZXh0KHRleHQ6IHN0cmluZywgcGFyYW1ldGVycz86IHVua25vd25bXSwgbWV0YVBhdGg/OiBzdHJpbmcpOiBzdHJpbmc7XG5cdFtcImZsOmZsZXhpYmlsaXR5XCJdPzogc3RyaW5nO1xufTtcbi8qKlxuICogRGV0ZXJtaW5lcyB0aGUgZGVzaWdudGltZSBmb3IgdGhlIE1EQyB0YWJsZS5cbiAqIEByZXR1cm5zIFRoZSB2YWx1ZSB0byBiZSBhc3NpZ25lZCB0byBkdDpkZXNpZ250aW1lXG4gKi9cbmZ1bmN0aW9uIGdldERlc2lnbnRpbWUoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0cmV0dXJuIFwic2FwL2ZlL21hY3Jvcy90YWJsZS9kZXNpZ250aW1lL1RhYmxlLmRlc2lnbnRpbWVcIjtcbn1cblxuLyoqXG4gKiBNYXBzIHRoZSBpbnRlcm5hbCBQMTNuIHRhYmxlIG1vZGUgKHN0cmluZykgdG8gdGhlIGNvcnJlc3BvbmRpbmcgTURDIGVudW0uXG4gKiBAcGFyYW0gc3RyaW5nTW9kZVxuICogQHJldHVybnMgVGhlIE1EQyBlbnVtIHZhbHVlXG4gKi9cbmZ1bmN0aW9uIGdldE1EQ1AxM25Nb2RlKHN0cmluZ01vZGU6IHN0cmluZyk6IFRhYmxlUDEzbk1vZGUge1xuXHRzd2l0Y2ggKHN0cmluZ01vZGUpIHtcblx0XHRjYXNlIFwiQWdncmVnYXRlXCI6XG5cdFx0XHRyZXR1cm4gVGFibGVQMTNuTW9kZS5BZ2dyZWdhdGU7XG5cdFx0Y2FzZSBcIlNvcnRcIjpcblx0XHRcdHJldHVybiBUYWJsZVAxM25Nb2RlLlNvcnQ7XG5cdFx0Y2FzZSBcIkNvbHVtblwiOlxuXHRcdFx0cmV0dXJuIFRhYmxlUDEzbk1vZGUuQ29sdW1uO1xuXHRcdGNhc2UgXCJGaWx0ZXJcIjpcblx0XHRcdHJldHVybiBUYWJsZVAxM25Nb2RlLkZpbHRlcjtcblx0XHRjYXNlIFwiR3JvdXBcIjpcblx0XHRcdHJldHVybiBUYWJsZVAxM25Nb2RlLkdyb3VwO1xuXHRcdGRlZmF1bHQ6XG5cdFx0XHRMb2cuZXJyb3IoXCJVbmtub3duIFAxM24gbW9kZTogXCIgKyBzdHJpbmdNb2RlKTtcblx0XHRcdHJldHVybiBUYWJsZVAxM25Nb2RlLkNvbHVtbjtcblx0fVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0TURDVGFibGVUZW1wbGF0ZSh0YWJsZVByb3BlcnRpZXM6IFRhYmxlQmxvY2tQcm9wZXJ0aWVzLCBwYXJhbWV0ZXJzOiBUYWJsZVRlbXBsYXRpbmdQYXJhbWV0ZXJzKTogTURDVGFibGUge1xuXHQvLyBGb3IgYSBUcmVlVGFibGUgaW4gYSBMaXN0UmVwb3J0IGRpc3BsYXlpbmcgYSBkcmFmdC1lbmFibGVkIGVudGl0eSwgd2Ugb25seSBkaXNwbGF5IGFjdGl2ZSBpbnN0YW5jZXNcblx0Y29uc3QgbmF2aWdhdGlvbkluZm8gPSB0YWJsZVByb3BlcnRpZXMudGFibGVEZWZpbml0aW9uLmFubm90YXRpb24/LnJvdz8ubmF2aWdhdGlvbkluZm8gYXMge1xuXHRcdHJvdXRlUGF0aD86IHN0cmluZztcblx0XHRuYXZpZ2F0aW9uSW5FZGl0TW9kZT86IGJvb2xlYW47XG5cdH07XG5cdGNvbnN0IHRhcmdldCA9IG5hdmlnYXRpb25JbmZvPy5yb3V0ZVBhdGg7XG5cdGxldCBuYXZpZ2F0aW9uSW5FZGl0TW9kZSA9IGZhbHNlO1xuXHRpZiAodGFyZ2V0KSB7XG5cdFx0Y29uc3QgdGFyZ2V0SW5mb3JtYXRpb24gPSBwYXJhbWV0ZXJzLmFwcENvbXBvbmVudC5nZXRSb3V0aW5nU2VydmljZSgpLl9nZXRUYXJnZXRJbmZvcm1hdGlvbih0YXJnZXQpO1xuXHRcdG5hdmlnYXRpb25JbkVkaXRNb2RlID0gKHRhcmdldEluZm9ybWF0aW9uPy5vcHRpb25zPy5zZXR0aW5ncz8ub3BlbkluRWRpdE1vZGUgYXMgYm9vbGVhbiB8IHVuZGVmaW5lZCkgPz8gZmFsc2U7XG5cdH1cblxuXHRjb25zdCB0YWJsZVR5cGUgPSB0YWJsZVByb3BlcnRpZXMudGFibGVEZWZpbml0aW9uLmNvbnRyb2wudHlwZTtcblx0Y29uc3QgY29udGV4dE9iamVjdFBhdGggPSB0YWJsZVByb3BlcnRpZXMuY29udGV4dE9iamVjdFBhdGg7XG5cdGNvbnN0IGZpbHRlck9uQWN0aXZlRW50aXRpZXMgPVxuXHRcdCh0YWJsZVR5cGUgPT09IFwiVHJlZVRhYmxlXCIgfHwgdGFibGVQcm9wZXJ0aWVzLnRhYmxlRGVmaW5pdGlvbi5lbmFibGVBbmFseXRpY3MgPT09IHRydWUpICYmXG5cdFx0Y29udGV4dE9iamVjdFBhdGguc3RhcnRpbmdFbnRpdHlTZXQgPT09IGNvbnRleHRPYmplY3RQYXRoLnRhcmdldEVudGl0eVNldCAmJlxuXHRcdE1vZGVsSGVscGVyLmlzT2JqZWN0UGF0aERyYWZ0U3VwcG9ydGVkKGNvbnRleHRPYmplY3RQYXRoKTtcblx0Y29uc3QgZGVsZWdhdGUgPSBUYWJsZUhlbHBlci5nZXREZWxlZ2F0ZShcblx0XHR0YWJsZVByb3BlcnRpZXMudGFibGVEZWZpbml0aW9uLFxuXHRcdHRhYmxlUHJvcGVydGllcy5pc0FscCA9PT0gdHJ1ZSxcblx0XHR0YWJsZVByb3BlcnRpZXMudGFibGVEZWZpbml0aW9uLmFubm90YXRpb24uZW50aXR5TmFtZSxcblx0XHRmaWx0ZXJPbkFjdGl2ZUVudGl0aWVzXG5cdCk7XG5cdGNvbnN0IGhlYWRlclZpc2libGUgPSB0YWJsZVByb3BlcnRpZXMuaGVhZGVyVmlzaWJsZSA/PyB0YWJsZVByb3BlcnRpZXMudGFibGVEZWZpbml0aW9uLmNvbnRyb2wuaGVhZGVyVmlzaWJsZTtcblx0Y29uc3QgY3VycmVudEhlYWRlciA9IHRhYmxlUHJvcGVydGllcy5oZWFkZXIgPz8gdGFibGVQcm9wZXJ0aWVzLnRhYmxlRGVmaW5pdGlvbi5hbm5vdGF0aW9uLnRpdGxlO1xuXHRjb25zdCBoZWFkZXJCaW5kaW5nRXhwcmVzc2lvbiA9IGJ1aWxkRXhwcmVzc2lvbkZvckhlYWRlclZpc2libGUoY3VycmVudEhlYWRlciA/PyBcIlwiLCB0YWJsZVByb3BlcnRpZXMudGFiVGl0bGUgPz8gXCJcIiwgISFoZWFkZXJWaXNpYmxlKTtcblx0Y29uc3QgcGFzdGVBY3Rpb24gPSB0YWJsZVByb3BlcnRpZXMudGFibGVEZWZpbml0aW9uLmFjdGlvbnMuZmluZCgoYSkgPT4gYS5rZXkgPT09IFN0YW5kYXJkQWN0aW9uS2V5cy5QYXN0ZSk7XG5cdGNvbnN0IGNvbGxlY3Rpb25FbnRpdHkgPSBwYXJhbWV0ZXJzLmNvbnZlcnRlZE1ldGFkYXRhLnJlc29sdmVQYXRoKHRhYmxlUHJvcGVydGllcy50YWJsZURlZmluaXRpb24uYW5ub3RhdGlvbi5jb2xsZWN0aW9uKS50YXJnZXQgYXNcblx0XHR8IEVudGl0eVNldFxuXHRcdHwgTmF2aWdhdGlvblByb3BlcnR5O1xuXHRjb25zdCBtb2RlbENvbnRleHRDaGFuZ2UgPSB0YWJsZVR5cGUgPT09IFwiVHJlZVRhYmxlXCIgPyBwYXJhbWV0ZXJzLmhhbmRsZXJQcm92aWRlci50YWJsZUNvbnRleHRDaGFuZ2UgOiB1bmRlZmluZWQ7XG5cdGNvbnN0IGxpbmVJdGVtID0gVGFibGVIZWxwZXIuZ2V0VWlMaW5lSXRlbU9iamVjdChwYXJhbWV0ZXJzLm1ldGFQYXRoLCBwYXJhbWV0ZXJzLmNvbnZlcnRlZE1ldGFkYXRhKSBhc1xuXHRcdHwgRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uW11cblx0XHR8IHVuZGVmaW5lZDtcblx0Y29uc3QgbmF2aWdhdGlvblBhdGggPSB0YWJsZVByb3BlcnRpZXMudGFibGVEZWZpbml0aW9uLmFubm90YXRpb24ubmF2aWdhdGlvblBhdGg7XG5cdGlmICh0YWJsZVByb3BlcnRpZXMudGFibGVEZWZpbml0aW9uLmFubm90YXRpb24uY29sbGVjdGlvbi5zdGFydHNXaXRoKFwiL1wiKSAmJiBpc1NpbmdsZXRvbihjb250ZXh0T2JqZWN0UGF0aC5zdGFydGluZ0VudGl0eVNldCkpIHtcblx0XHR0YWJsZVByb3BlcnRpZXMudGFibGVEZWZpbml0aW9uLmFubm90YXRpb24uY29sbGVjdGlvbiA9IG5hdmlnYXRpb25QYXRoO1xuXHR9XG5cblx0Y29uc3QgY29sbGVjdGlvbkNvbnRleHQgPSBwYXJhbWV0ZXJzLm1ldGFNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dCh0YWJsZVByb3BlcnRpZXMudGFibGVEZWZpbml0aW9uLmFubm90YXRpb24uY29sbGVjdGlvbikhO1xuXHRjb25zdCBkcmFmdCA9IChjb2xsZWN0aW9uRW50aXR5IGFzIEVudGl0eVNldCkuYW5ub3RhdGlvbnMuQ29tbW9uPy5EcmFmdFJvb3Q7XG5cdC8vIEFkZCB0aGUgZGVmaW5pdGlvbiBvZiB0aGUgZGVzaWdudGltZSBmaWxlIGlmIGRlc2lnbnRpbWUgaXMgZW5hYmxlZCBmcm9tIGNvcmUgb3IgbG9jYWxseSB2aWEgdXJsIHBhcmFtZXRlcnNcblx0Y29uc3QgdmFyaWFudE1hbmFnZW1lbnQgPSB0YWJsZVByb3BlcnRpZXMudmFyaWFudE1hbmFnZW1lbnQgPz8gXCJOb25lXCI7XG5cdGNvbnN0IGRlc2lnbnRpbWUgPSBnZXREZXNpZ250aW1lKCk7XG5cdGxldCByb3dBY3Rpb25UeXBlOiBUYWJsZVJvd0FjdGlvblR5cGUgfCB1bmRlZmluZWQ7XG5cdGlmICh0YWJsZVByb3BlcnRpZXMub3ZlcnJpZGVSb3dQcmVzcykge1xuXHRcdHJvd0FjdGlvblR5cGUgPSBUYWJsZVJvd0FjdGlvblR5cGUuTmF2aWdhdGlvbjtcblx0fVxuXHRyb3dBY3Rpb25UeXBlID8/PVxuXHRcdHRhYmxlUHJvcGVydGllcy50YWJsZURlZmluaXRpb24uYW5ub3RhdGlvbi5yb3c/LmFjdGlvblR5cGUgPT09IFwiTmF2aWdhdGlvblwiID8gVGFibGVSb3dBY3Rpb25UeXBlLk5hdmlnYXRpb24gOiB1bmRlZmluZWQ7XG5cblx0Y29uc3Qgc2hvd0NyZWF0ZSA9IHRhYmxlUHJvcGVydGllcy50YWJsZURlZmluaXRpb24uYWN0aW9ucy5maW5kKChhKSA9PiBhLmtleSA9PT0gU3RhbmRhcmRBY3Rpb25LZXlzLkNyZWF0ZSk/LnZpc2libGUgfHwgdHJ1ZTtcblxuXHQvKipcblx0ICogU3BlY2lmaWVzIHdoZXRoZXIgdGhlIGJ1dHRvbiBpcyBoaWRkZW4gd2hlbiBubyBkYXRhIGhhcyBiZWVuIGVudGVyZWQgeWV0IGluIHRoZSByb3cgKHRydWUvZmFsc2UpLiBUaGUgZGVmYXVsdCBzZXR0aW5nIGlzIGBmYWxzZWAuXG5cdCAqL1xuXHRjb25zdCB1cGRhdGFibGVQcm9wZXJ0eVBhdGggPSB0YWJsZVByb3BlcnRpZXMudGFibGVEZWZpbml0aW9uLmFubm90YXRpb24udXBkYXRhYmxlUHJvcGVydHlQYXRoO1xuXG5cdGxldCBjdXJyZW50UGVyc29uYWxpemF0aW9uOiBUYWJsZVAxM25Nb2RlW10gfCB1bmRlZmluZWQ7XG5cdHN3aXRjaCAodGFibGVQcm9wZXJ0aWVzLnBlcnNvbmFsaXphdGlvbikge1xuXHRcdGNhc2UgXCJmYWxzZVwiOlxuXHRcdFx0Y3VycmVudFBlcnNvbmFsaXphdGlvbiA9IHVuZGVmaW5lZDtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgXCJ0cnVlXCI6XG5cdFx0XHRjdXJyZW50UGVyc29uYWxpemF0aW9uID0gW1RhYmxlUDEzbk1vZGUuU29ydCwgVGFibGVQMTNuTW9kZS5Db2x1bW4sIFRhYmxlUDEzbk1vZGUuRmlsdGVyXTtcblx0XHRcdGlmICh0YWJsZVR5cGUgPT09IFwiUmVzcG9uc2l2ZVRhYmxlXCIgfHwgdGFibGVQcm9wZXJ0aWVzLnRhYmxlRGVmaW5pdGlvbi5lbmFibGVBbmFseXRpY3MgPT09IHRydWUpIHtcblx0XHRcdFx0Y3VycmVudFBlcnNvbmFsaXphdGlvbiA9IFsuLi5jdXJyZW50UGVyc29uYWxpemF0aW9uLCBUYWJsZVAxM25Nb2RlLkdyb3VwXTtcblx0XHRcdH1cblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgdW5kZWZpbmVkOlxuXHRcdFx0Y3VycmVudFBlcnNvbmFsaXphdGlvbiA9IHRhYmxlUHJvcGVydGllcy50YWJsZURlZmluaXRpb24uYW5ub3RhdGlvbi5wMTNuTW9kZT8ubWFwKChtb2RlKSA9PiBnZXRNRENQMTNuTW9kZShtb2RlKSk7XG5cdFx0XHRicmVhaztcblx0XHRkZWZhdWx0OlxuXHRcdFx0Ly8gSW4gY2FzZSBncm91cGluZyBtb2RlIGlzIGRlZmluZWQgZXhwbGljaXRlbHkgb24gdGhlIHBlcnNvbmFsaXphdGlvbiwgd2Ugb25seSBlbmFibGUgaXQgZm9yIHRoZSBhbmFseXRpY2FsIGFuZCByZXNwb25zaXZlIHRhYmxlLlxuXHRcdFx0aWYgKHRhYmxlVHlwZSA9PT0gXCJSZXNwb25zaXZlVGFibGVcIiB8fCB0YWJsZVByb3BlcnRpZXMudGFibGVEZWZpbml0aW9uLmVuYWJsZUFuYWx5dGljcyA9PT0gdHJ1ZSkge1xuXHRcdFx0XHRjdXJyZW50UGVyc29uYWxpemF0aW9uID0gdGFibGVQcm9wZXJ0aWVzLnBlcnNvbmFsaXphdGlvbi5zcGxpdChcIixcIikubWFwKChtb2RlKSA9PiBnZXRNRENQMTNuTW9kZShtb2RlLnRyaW0oKSkpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y29uc3QgZXhjbHVkZUdyb3VwRnJvbVAxM24gPSB0YWJsZVByb3BlcnRpZXMucGVyc29uYWxpemF0aW9uXG5cdFx0XHRcdFx0LnNwbGl0KFwiLFwiKVxuXHRcdFx0XHRcdC5maWx0ZXIoKG1vZGUpID0+IGdldE1EQ1AxM25Nb2RlKG1vZGUudHJpbSgpKSAhPT0gVGFibGVQMTNuTW9kZS5Hcm91cCkgYXMgVGFibGVQMTNuTW9kZVtdO1xuXHRcdFx0XHRjdXJyZW50UGVyc29uYWxpemF0aW9uID0gZXhjbHVkZUdyb3VwRnJvbVAxM24ubGVuZ3RoID8gZXhjbHVkZUdyb3VwRnJvbVAxM24gOiB1bmRlZmluZWQ7XG5cdFx0XHR9XG5cdH1cblxuXHRjb25zdCBtdWx0aVNlbGVjdERpc2FibGVkQWN0aW9ucyA9IEFjdGlvbkhlbHBlci5nZXRNdWx0aVNlbGVjdERpc2FibGVkQWN0aW9ucyhsaW5lSXRlbSk7XG5cblx0Y29uc3QgY3VzdG9tRGF0YSA9IFtcblx0XHR7IGtleTogXCJraW5kXCIsIHZhbHVlOiBjb2xsZWN0aW9uRW50aXR5Ll90eXBlIH0sXG5cdFx0eyBrZXk6IFwibmF2aWdhdGlvblBhdGhcIiwgdmFsdWU6IG5hdmlnYXRpb25QYXRoIH0sXG5cdFx0eyBrZXk6IFwiZW5hYmxlQW5hbHl0aWNzXCIsIHZhbHVlOiB0YWJsZVByb3BlcnRpZXMudGFibGVEZWZpbml0aW9uLmVuYWJsZUFuYWx5dGljcyB9LFxuXHRcdHsga2V5OiBcImNyZWF0aW9uTW9kZVwiLCB2YWx1ZTogdGFibGVQcm9wZXJ0aWVzLmNyZWF0aW9uTW9kZT8ubmFtZSB9LFxuXHRcdHsga2V5OiBcImlubGluZUNyZWF0aW9uUm93Q291bnRcIiwgdmFsdWU6IHRhYmxlUHJvcGVydGllcy50YWJsZURlZmluaXRpb24uY29udHJvbC5pbmxpbmVDcmVhdGlvblJvd0NvdW50IH0sXG5cdFx0eyBrZXk6IFwic2hvd0NyZWF0ZVwiLCB2YWx1ZTogc2hvd0NyZWF0ZSB9LFxuXHRcdHsga2V5OiBcImNyZWF0ZUF0RW5kXCIsIHZhbHVlOiB0YWJsZVByb3BlcnRpZXMuY3JlYXRpb25Nb2RlPy5jcmVhdGVBdEVuZCB9LFxuXHRcdHsga2V5OiBcImRpc3BsYXlNb2RlUHJvcGVydHlCaW5kaW5nXCIsIHZhbHVlOiB0YWJsZVByb3BlcnRpZXMucmVhZE9ubHkgfSxcblx0XHR7IGtleTogXCJ0YWJsZVR5cGVcIiwgdmFsdWU6IHRhYmxlVHlwZSB9LFxuXHRcdHsga2V5OiBcInRhcmdldENvbGxlY3Rpb25QYXRoXCIsIHZhbHVlOiBjb2xsZWN0aW9uQ29udGV4dC5nZXRQYXRoKCkgfSxcblx0XHR7IGtleTogXCJlbnRpdHlUeXBlXCIsIHZhbHVlOiBjb2xsZWN0aW9uQ29udGV4dC5nZXRQYXRoKCkgKyBcIi9cIiB9LFxuXHRcdHsga2V5OiBcIm1ldGFQYXRoXCIsIHZhbHVlOiBjb2xsZWN0aW9uQ29udGV4dC5nZXRQYXRoKCkgfSxcblx0XHR7IGtleTogXCJoaWRkZW5GaWx0ZXJzXCIsIHZhbHVlOiB0YWJsZVByb3BlcnRpZXMudGFibGVEZWZpbml0aW9uLmNvbnRyb2wuZmlsdGVycz8uaGlkZGVuRmlsdGVycyB9LFxuXHRcdHsga2V5OiBcInJlcXVlc3RHcm91cElkXCIsIHZhbHVlOiBcIiRhdXRvLldvcmtlcnNcIiB9LFxuXHRcdHsga2V5OiBcInNlZ21lbnRlZEJ1dHRvbklkXCIsIHZhbHVlOiBnZW5lcmF0ZShbdGFibGVQcm9wZXJ0aWVzLmNvbnRlbnRJZCwgXCJTZWdtZW50ZWRCdXR0b25cIiwgXCJUZW1wbGF0ZUNvbnRlbnRWaWV3XCJdKSB9LFxuXHRcdHsga2V5OiBcImRpc2FibGVDb3B5VG9DbGlwYm9hcmRcIiwgdmFsdWU6IHRhYmxlUHJvcGVydGllcy50YWJsZURlZmluaXRpb24uY29udHJvbC5kaXNhYmxlQ29weVRvQ2xpcGJvYXJkIH0sXG5cdFx0eyBrZXk6IFwiZHJhZnRcIiwgdmFsdWU6IGRyYWZ0IH0sXG5cdFx0eyBrZXk6IFwibmF2aWdhdGlvbkF2YWlsYWJsZU1hcFwiLCB2YWx1ZTogVGFibGVIZWxwZXIuZ2V0TmF2aWdhdGlvbkF2YWlsYWJsZU1hcChsaW5lSXRlbSkgfSxcblx0XHR7XG5cdFx0XHRrZXk6IFwiYWN0aW9uc011bHRpc2VsZWN0RGlzYWJsZWRcIixcblx0XHRcdHZhbHVlOiBtdWx0aVNlbGVjdERpc2FibGVkQWN0aW9ucy5sZW5ndGggPiAwID8gbXVsdGlTZWxlY3REaXNhYmxlZEFjdGlvbnMuam9pbihcIixcIikgOiB1bmRlZmluZWRcblx0XHR9LFxuXHRcdHsga2V5OiBcInVwZGF0YWJsZVByb3BlcnR5UGF0aFwiLCB2YWx1ZTogdXBkYXRhYmxlUHJvcGVydHlQYXRoIHx8IFwiXCIgfSxcblx0XHR7IGtleTogXCJleHBvcnRSZXF1ZXN0U2l6ZVwiLCB2YWx1ZTogdGFibGVQcm9wZXJ0aWVzLnRhYmxlRGVmaW5pdGlvbi5jb250cm9sLmV4cG9ydFJlcXVlc3RTaXplIH1cblx0XTtcblxuXHRyZXR1cm4gKFxuXHRcdDxNRENUYWJsZVxuXHRcdFx0Y29yZTpyZXF1aXJlPXtnZXRDb3JlUmVxdWlyZSh0YWJsZVByb3BlcnRpZXMudGFibGVEZWZpbml0aW9uKX1cblx0XHRcdGZsOmZsZXhpYmlsaXR5PXt0YWJsZVByb3BlcnRpZXNbXCJmbDpmbGV4aWJpbGl0eVwiXX1cblx0XHRcdHNvcnRDb25kaXRpb25zPXt0YWJsZVByb3BlcnRpZXMudGFibGVEZWZpbml0aW9uLmFubm90YXRpb24uc29ydENvbmRpdGlvbnN9XG5cdFx0XHRncm91cENvbmRpdGlvbnM9e3RhYmxlUHJvcGVydGllcy50YWJsZURlZmluaXRpb24uYW5ub3RhdGlvbi5ncm91cENvbmRpdGlvbnN9XG5cdFx0XHRhZ2dyZWdhdGVDb25kaXRpb25zPXt0YWJsZVByb3BlcnRpZXMudGFibGVEZWZpbml0aW9uLmFubm90YXRpb24uYWdncmVnYXRlQ29uZGl0aW9uc31cblx0XHRcdGR0OmRlc2lnbnRpbWU9e2Rlc2lnbnRpbWV9XG5cdFx0XHRpZD17dGFibGVQcm9wZXJ0aWVzLmNvbnRlbnRJZH1cblx0XHRcdGJ1c3lJbmRpY2F0b3JEZWxheT17MH1cblx0XHRcdGVuYWJsZUV4cG9ydD17dGFibGVQcm9wZXJ0aWVzLnRhYmxlRGVmaW5pdGlvbi5jb250cm9sLmVuYWJsZUV4cG9ydH1cblx0XHRcdGRlbGVnYXRlPXtKU09OLnBhcnNlKGRlbGVnYXRlKX1cblx0XHRcdHJvd1ByZXNzPXt0YWJsZVR5cGUgPT09IFwiUmVzcG9uc2l2ZVRhYmxlXCIgPyBwYXJhbWV0ZXJzLmhhbmRsZXJQcm92aWRlci5yb3dQcmVzcyA6IHVuZGVmaW5lZH1cblx0XHRcdGJlZm9yZU9wZW5Db250ZXh0TWVudT17cGFyYW1ldGVycy5oYW5kbGVyUHJvdmlkZXIuYmVmb3JlT3BlbkNvbnRleHRNZW51fVxuXHRcdFx0YXV0b0JpbmRPbkluaXQ9e3RhYmxlUHJvcGVydGllcy51c2VCYXNpY1NlYXJjaCB8fCAhdGFibGVQcm9wZXJ0aWVzLmZpbHRlckJhcn1cblx0XHRcdHNlbGVjdGlvbk1vZGU9e3RhYmxlUHJvcGVydGllcy50YWJsZURlZmluaXRpb24uYW5ub3RhdGlvbi5zZWxlY3Rpb25Nb2RlIHx8IFwiTm9uZVwifVxuXHRcdFx0c2VsZWN0aW9uQ2hhbmdlPXtwYXJhbWV0ZXJzLmhhbmRsZXJQcm92aWRlci5zZWxlY3Rpb25DaGFuZ2V9XG5cdFx0XHRzaG93Um93Q291bnQ9e3RhYmxlUHJvcGVydGllcy50YWJsZURlZmluaXRpb24uY29udHJvbC5zaG93Um93Q291bnR9XG5cdFx0XHRoZWFkZXI9e2N1cnJlbnRIZWFkZXJ9XG5cdFx0XHRoZWFkZXJWaXNpYmxlPXtoZWFkZXJCaW5kaW5nRXhwcmVzc2lvbn1cblx0XHRcdGhlYWRlckxldmVsPXt0YWJsZVByb3BlcnRpZXMuaGVhZGVyTGV2ZWx9XG5cdFx0XHRoZWFkZXJTdHlsZT17dGFibGVQcm9wZXJ0aWVzLmhlYWRlclN0eWxlfVxuXHRcdFx0dGhyZXNob2xkPXt0YWJsZVByb3BlcnRpZXMudGFibGVEZWZpbml0aW9uLmNvbnRyb2wudGhyZXNob2xkID8/IHRhYmxlUHJvcGVydGllcy50YWJsZURlZmluaXRpb24uYW5ub3RhdGlvbi50aHJlc2hvbGR9XG5cdFx0XHRwMTNuTW9kZT17Y3VycmVudFBlcnNvbmFsaXphdGlvbn1cblx0XHRcdHBhc3RlPXtwYXJhbWV0ZXJzLmhhbmRsZXJQcm92aWRlci5nZXRQYXN0ZUhhbmRsZXIoZmFsc2UpfVxuXHRcdFx0YmVmb3JlRXhwb3J0PXtwYXJhbWV0ZXJzLmhhbmRsZXJQcm92aWRlci5iZWZvcmVFeHBvcnR9XG5cdFx0XHRjbGFzcz17dGFibGVQcm9wZXJ0aWVzLnRhYmxlRGVmaW5pdGlvbi5jb250cm9sLnVzZUNvbmRlbnNlZFRhYmxlTGF5b3V0ID09PSB0cnVlID8gXCJzYXBVaVNpemVDb25kZW5zZWRcIiA6IHVuZGVmaW5lZH1cblx0XHRcdG11bHRpU2VsZWN0TW9kZT17dGFibGVQcm9wZXJ0aWVzLnRhYmxlRGVmaW5pdGlvbi5jb250cm9sLm11bHRpU2VsZWN0TW9kZX1cblx0XHRcdHNob3dQYXN0ZUJ1dHRvbj17dGFibGVUeXBlID09PSBcIlRyZWVUYWJsZVwiID8gZmFsc2UgOiBwYXN0ZUFjdGlvbj8udmlzaWJsZX1cblx0XHRcdGVuYWJsZVBhc3RlPXt0YWJsZVR5cGUgPT09IFwiVHJlZVRhYmxlXCIgPyBmYWxzZSA6IHBhc3RlQWN0aW9uPy5lbmFibGVkfVxuXHRcdFx0bW9kZWxDb250ZXh0Q2hhbmdlPXttb2RlbENvbnRleHRDaGFuZ2V9XG5cdFx0PlxuXHRcdFx0e3tcblx0XHRcdFx0Y3VzdG9tRGF0YTogY3JlYXRlQ3VzdG9tRGF0YXMoY3VzdG9tRGF0YSksXG5cdFx0XHRcdGRhdGFTdGF0ZUluZGljYXRvcjogZ2V0RGF0YVN0YXRlSW5kaWNhdG9yKHBhcmFtZXRlcnMuaGFuZGxlclByb3ZpZGVyKSxcblx0XHRcdFx0dHlwZTogZ2V0VGFibGVUeXBlKFxuXHRcdFx0XHRcdHRhYmxlUHJvcGVydGllcy50YWJsZURlZmluaXRpb24sXG5cdFx0XHRcdFx0Y29sbGVjdGlvbkNvbnRleHQsXG5cdFx0XHRcdFx0dGFibGVUeXBlLFxuXHRcdFx0XHRcdHRhYmxlUHJvcGVydGllcy50YWJsZURlZmluaXRpb24uY29udHJvbC5zZWxlY3Rpb25MaW1pdFxuXHRcdFx0XHQpLFxuXHRcdFx0XHRkZXBlbmRlbnRzOiBnZXREZXBlbmRlbnRzKHRhYmxlUHJvcGVydGllcywgcGFyYW1ldGVycywgdmFyaWFudE1hbmFnZW1lbnQsIGNvbGxlY3Rpb25Db250ZXh0KSxcblx0XHRcdFx0YWN0aW9uczogZ2V0QWN0aW9ucyh0YWJsZVByb3BlcnRpZXMsIHBhcmFtZXRlcnMsIGNvbGxlY3Rpb25Db250ZXh0LCBjb2xsZWN0aW9uRW50aXR5KSxcblx0XHRcdFx0cm93U2V0dGluZ3M6IGdldFJvd1NldHRpbmdzKHRhYmxlUHJvcGVydGllcy50YWJsZURlZmluaXRpb24sIHJvd0FjdGlvblR5cGUsIHRhYmxlVHlwZSwgcGFyYW1ldGVycy5oYW5kbGVyUHJvdmlkZXIpLFxuXHRcdFx0XHRjb250ZXh0TWVudTogZ2V0Q29udGV4dE1lbnUoXG5cdFx0XHRcdFx0dGFibGVQcm9wZXJ0aWVzLFxuXHRcdFx0XHRcdHBhcmFtZXRlcnMsXG5cdFx0XHRcdFx0Y29sbGVjdGlvbkVudGl0eSxcblx0XHRcdFx0XHRyb3dBY3Rpb25UeXBlLFxuXHRcdFx0XHRcdGNvbGxlY3Rpb25Db250ZXh0LFxuXHRcdFx0XHRcdG5hdmlnYXRpb25JbkVkaXRNb2RlXG5cdFx0XHRcdCksXG5cdFx0XHRcdGNvbHVtbnM6IGdldENvbHVtbnModGFibGVQcm9wZXJ0aWVzLCBjb2xsZWN0aW9uQ29udGV4dCwgcGFyYW1ldGVycy5oYW5kbGVyUHJvdmlkZXIpLFxuXHRcdFx0XHRkcmFnRHJvcENvbmZpZzogZ2V0RHJhZ0FuZERyb3BDb25maWcodGFibGVQcm9wZXJ0aWVzLCBwYXJhbWV0ZXJzLmhhbmRsZXJQcm92aWRlciksXG5cdFx0XHRcdGNyZWF0aW9uUm93OiBnZXRDcmVhdGlvblJvdyh0YWJsZVByb3BlcnRpZXMsIHBhcmFtZXRlcnMuaGFuZGxlclByb3ZpZGVyKSxcblx0XHRcdFx0dmFyaWFudDogZ2V0VmFyaWFudE1hbmFnZW1lbnQoXG5cdFx0XHRcdFx0dmFyaWFudE1hbmFnZW1lbnQsXG5cdFx0XHRcdFx0dGFibGVQcm9wZXJ0aWVzLmNvbnRlbnRJZCxcblx0XHRcdFx0XHR0YWJsZVByb3BlcnRpZXMuaGVhZGVyTGV2ZWwsXG5cdFx0XHRcdFx0cGFyYW1ldGVycy5oYW5kbGVyUHJvdmlkZXJcblx0XHRcdFx0KSxcblx0XHRcdFx0cXVpY2tGaWx0ZXI6IGdldFF1aWNrRmlsdGVyKHRhYmxlUHJvcGVydGllcyksXG5cdFx0XHRcdGNvcHlQcm92aWRlcjogZ2V0Q29weVByb3ZpZGVyKHRhYmxlUHJvcGVydGllcyksXG5cdFx0XHRcdGNlbGxTZWxlY3RvcjogZ2V0Q2VsbFNlbGVjdG9yKHRhYmxlUHJvcGVydGllcylcblx0XHRcdH19XG5cdFx0PC9NRENUYWJsZT5cblx0KTtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7RUE2R0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNBLFNBQVNBLFlBQVlBLENBQ3BCQyxlQUFtQyxFQUNuQ0MsV0FBb0IsRUFDcEJDLFNBQW9CLEVBQ3BCQyxjQUFzQixFQUNnQztJQUN0RCxNQUFNQyxVQUFVLEdBQUdILFdBQVcsQ0FBQ0ksU0FBUyxDQUFDLENBQUM7SUFDMUMsUUFBUUgsU0FBUztNQUNoQixLQUFLLFdBQVc7UUFDZixPQUNDSSxJQUFBLENBQUNDLGFBQWE7VUFDYkMsWUFBWSxFQUFFUixlQUFlLENBQUNTLE9BQU8sQ0FBQ0QsWUFBYTtVQUNuREUsUUFBUSxFQUFFVixlQUFlLENBQUNTLE9BQU8sQ0FBQ0MsUUFBUztVQUMzQ1AsY0FBYyxFQUFFQSxjQUFlO1VBQy9CUSxnQkFBZ0IsRUFBRVgsZUFBZSxDQUFDUyxPQUFPLENBQUNHLGlCQUFrQjtVQUM1REMsZUFBZSxFQUFFYixlQUFlLENBQUNTLE9BQU8sQ0FBQ0ksZUFBZ0I7VUFDekRDLGtCQUFrQixFQUFFZCxlQUFlLENBQUNTLE9BQU8sQ0FBQ0s7UUFBbUIsQ0FDL0QsQ0FBQztNQUdKLEtBQUssV0FBVztRQUNmLE9BQ0NSLElBQUEsQ0FBQ1MsYUFBYTtVQUNiUCxZQUFZLEVBQUVSLGVBQWUsQ0FBQ1MsT0FBTyxDQUFDRCxZQUFhO1VBQ25ERSxRQUFRLEVBQUVWLGVBQWUsQ0FBQ1MsT0FBTyxDQUFDQyxRQUFTO1VBQzNDQyxnQkFBZ0IsRUFBRVgsZUFBZSxDQUFDUyxPQUFPLENBQUNHLGlCQUFrQjtVQUM1REMsZUFBZSxFQUFF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
1284
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJnZXRUYWJsZVR5cGUiLCJ0YWJsZURlZmluaXRpb24iLCJfY29sbGVjdGlvbiIsInRhYmxlVHlwZSIsInNlbGVjdGlvbkxpbWl0IiwiY29sbGVjdGlvbiIsImdldE9iamVjdCIsIl9qc3giLCJHcmlkVGFibGVUeXBlIiwicm93Q291bnRNb2RlIiwiY29udHJvbCIsInJvd0NvdW50IiwiZml4ZWRDb2x1bW5Db3VudCIsImZyb3plbkNvbHVtbkNvdW50Iiwic2Nyb2xsVGhyZXNob2xkIiwiZW5hYmxlQ29sdW1uRnJlZXplIiwiVHJlZVRhYmxlVHlwZSIsIlJlc3BvbnNpdmVUYWJsZVR5cGUiLCJzaG93RGV0YWlsc0J1dHRvbiIsImRldGFpbHNCdXR0b25TZXR0aW5nIiwiUHJpb3JpdHkiLCJMb3ciLCJNZWRpdW0iLCJOb25lIiwiZ3Jvd2luZ01vZGUiLCIka2luZCIsInVuZGVmaW5lZCIsInBvcGluTGF5b3V0IiwiZ2V0RGF0YVN0YXRlSW5kaWNhdG9yIiwiaGFuZGxlclByb3ZpZGVyIiwiRGF0YVN0YXRlSW5kaWNhdG9yIiwiZmlsdGVyIiwiZGF0YVN0YXRlSW5kaWNhdG9yRmlsdGVyIiwiZW5hYmxlRmlsdGVyaW5nIiwiZGF0YVN0YXRlQ2hhbmdlIiwiZ2V0RHJhZ0FuZERyb3BFbmFibGVkIiwiY29udGV4dE9iamVjdFBhdGgiLCJpc1BhdGhVcGRhdGFibGVPbk5hdmlnYXRpb24iLCJpc1BhdGhVcGRhdGFibGUiLCJpZ25vcmVUYXJnZXRDb2xsZWN0aW9uIiwiYXV0aG9yaXplVW5yZXNvbHZhYmxlIiwicGF0aFZpc2l0b3IiLCJwYXRoIiwibmF2aWdhdGlvblBhdGhzIiwic2luZ2xldG9uUGF0aFZpc2l0b3IiLCJjb252ZXJ0ZWRUeXBlcyIsImlzUGF0aFVwZGF0YWJsZU9uVGFyZ2V0Iiwic3RhcnRpbmdFbnRpdHlTZXQiLCJ0YXJnZXRFbnRpdHlTZXQiLCJhbm5vdGF0aW9ucyIsIkNvbW1vbiIsIkRyYWZ0Um9vdCIsImFuZCIsIl90eXBlIiwiaWZFbHNlIiwiaXNDb25zdGFudCIsImNvbnN0YW50IiwiaXNIaWVyYXJjaHlQYXJlbnROb2RlVXBkYXRhYmxlIiwiVUkiLCJJc0VkaXRhYmxlIiwiZ2V0RGVwZW5kZW50cyIsInRhYmxlUHJvcGVydGllcyIsInBhcmFtZXRlcnMiLCJ2YXJpYW50TWFuYWdlbWVudCIsImlkIiwiY29udGVudElkIiwidHlwZSIsImRlcGVuZGVudHMiLCJjdXRBY3Rpb24iLCJhY3Rpb25zIiwiZmluZCIsImEiLCJrZXkiLCJTdGFuZGFyZEFjdGlvbktleXMiLCJDdXQiLCJpc1RlbXBsYXRlZCIsInB1c2giLCJDb21tYW5kRXhlY3V0aW9uIiwiZXhlY3V0ZSIsImdldEN1dEhhbmRsZXIiLCJjb21tYW5kIiwiZW5hYmxlZCIsImNvcHlBY3Rpb24iLCJDb3B5IiwiZ2V0Q29weUhhbmRsZXIiLCJwYXN0ZUFjdGlvbiIsIlBhc3RlIiwidmlzaWJsZSIsImdldFBhc3RlSGFuZGxlciIsImNyZWF0ZUFjdGlvbiIsIkNyZWF0ZSIsImRlbGV0ZUFjdGlvbiIsIkRlbGV0ZSIsImFubm90YXRpb24iLCJpc0luc2VydFVwZGF0ZUFjdGlvbnNUZW1wbGF0ZWQiLCJub2RlVHlwZSIsImVuYWJsZVVwbG9hZFBsdWdpbiIsImdldENyZWF0ZUJ1dHRvblByZXNzSGFuZGxlciIsImdldERlbGV0ZUJ1dHRvblByZXNzSGFuZGxlciIsIm1vdmVVcEFjdGlvbiIsIk1vdmVVcCIsIm1vdmVEb3duQWN0aW9uIiwiTW92ZURvd24iLCJnZXRNb3ZlVXBEb3duSGFuZGxlciIsImFjdGlvbk5hbWUiLCJjb21tYW5kQWN0aW9ucyIsImFjdGlvbiIsImFjdGlvbkNvbW1hbmQiLCJnZXRBY3Rpb25Db21tYW5kIiwiUGVyc2lzdGVuY2VQcm92aWRlciIsImdlbmVyYXRlIiwiZm9yIiwiQ29udGV4dE1lbnVTZXR0aW5nIiwic2NvcGUiLCJnZXRVcGxvYWRQbHVnaW4iLCJfZXhwb3J0cyIsImdldEFjdGlvbnMiLCJ0YWJsZSIsImNvbGxlY3Rpb25Db250ZXh0IiwiY29sbGVjdGlvbkVudGl0eSIsImRpc3BsYXlTZWdtZW50ZWRCdXR0b24iLCJhbHBCdXR0b25JdGVtcyIsIkNvbW1vbkhlbHBlciIsImlzRGVza3RvcCIsIlNlZ21lbnRlZEJ1dHRvbkl0ZW0iLCJ0b29sdGlwIiwiaWNvbiIsIkFjdGlvblRvb2xiYXJBY3Rpb24iLCJsYXlvdXRJbmZvcm1hdGlvbiIsImNoaWxkcmVuIiwiU2VnbWVudGVkQnV0dG9uIiwic2VsZWN0Iiwic2VnbWVudGVkQnV0dG9uUHJlc3MiLCJzZWxlY3RlZEtleSIsIml0ZW1zIiwiZ2V0VGFibGVBY3Rpb25zVGVtcGxhdGUiLCJsZW5ndGgiLCJnZXRSb3dTZXR0aW5ncyIsInJvd0FjdGlvblR5cGUiLCJyb3dBY3Rpb25JdGVtIiwiUm93QWN0aW9uSXRlbSIsInByZXNzIiwicm93UHJlc3MiLCJyb3ciLCJSb3dTZXR0aW5ncyIsIm5hdmlnYXRlZCIsInJvd05hdmlnYXRlZCIsImhpZ2hsaWdodCIsInJvd0hpZ2hsaWdodGluZyIsImhpZ2hsaWdodFRleHQiLCJyb3dBY3Rpb25zIiwiVGFibGVSb3dBY3Rpb25UeXBlIiwiTmF2aWdhdGlvbiIsImdldENvbnRleHRNZW51IiwibmF2aWdhdGlvbkluRWRpdE1vZGUiLCJtZW51SXRlbXMiLCJnZXRUYWJsZUNvbnRleHRNZW51VGVtcGxhdGUiLCJnZXRTaGFyZXRvQ29sbGFib3JhdGlvbk1hbmFnZXJUZW1wbGF0ZSIsImdldE9wZW5Jbk5ld1RhYlRlbXBsYXRlIiwiTWVudSIsIml0ZW1TZWxlY3RlZCIsImNvbnRleHRNZW51SXRlbVNlbGVjdGVkIiwiZ2V0RGVwZW5kZW50c0ZvckNvbnRleHRNZW51IiwidGFibGVJZCIsIk1lbnVJdGVtIiwic3RhcnRzU2VjdGlvbiIsInRleHQiLCJjb250ZXh0TWVudVNoYXJlVG9Db2xsYWJvcmF0aW9uTWFuYWdlciIsIm5vdCIsInBhdGhJbk1vZGVsIiwiY29udGV4dE1lbnVPcGVuSW5OZXdUYWIiLCJlbmFibGVkRm9yQ29udGV4dE1lbnUiLCJnZXRWYXJpYW50TWFuYWdlbWVudCIsImhlYWRlckxldmVsIiwiVmFyaWFudE1hbmFnZW1lbnQiLCJzaG93U2V0QXNEZWZhdWx0IiwidmFyaWFudFNlbGVjdGVkIiwic2F2ZSIsInZhcmlhbnRTYXZlZCIsImdldFF1aWNrRmlsdGVyIiwicXVpY2tGaWx0ZXJzIiwiZmlsdGVycyIsIlF1aWNrRmlsdGVyU2VsZWN0b3IiLCJwYXRocyIsIm1hcCIsImFubm90YXRpb25QYXRoIiwic2hvd0NvdW50cyIsImdldENvcHlQcm92aWRlciIsInZpc2libGVFeHByZXNzaW9uIiwiZGlzYWJsZUNvcHlUb0NsaXBib2FyZCIsIkNvcHlQcm92aWRlciIsImdldENlbGxTZWxlY3RvciIsImluY2x1ZGVzIiwiQ2VsbFNlbGVjdG9yIiwib3IiLCJyYW5nZUxpbWl0IiwiZ2V0Q3JlYXRpb25Sb3ciLCJjcmVhdGlvbk1vZGUiLCJuYW1lIiwiQ3JlYXRpb25Nb2RlIiwiQ3JlYXRpb25Sb3ciLCJjcmVhdGlvblJvd0FjdGlvbiIsImN1c3RvbURhdGEiLCJjcmVhdGVDdXN0b21EYXRhcyIsInZhbHVlIiwiZGlzYWJsZUFkZFJvd0J1dHRvbkZvckVtcHR5RGF0YSIsImN1c3RvbVZhbGlkYXRpb25GdW5jdGlvbiIsImFwcGx5IiwiYXBwbHlFbmFibGVkIiwiZ2V0RHJhZ0FuZERyb3BDb25maWciLCJEcmFnRHJvcENvbmZpZyIsImNvbXBpbGVFeHByZXNzaW9uIiwiZHJvcFBvc2l0aW9uIiwiYWxsb3dEcm9wQmV0d2Vlbk5vZGVzIiwiZHJhZ2dhYmxlIiwiZHJvcHBhYmxlIiwiZHJhZ1N0YXJ0IiwiZHJhZ1N0YXJ0RG9jdW1lbnQiLCJkcmFnRW50ZXIiLCJkcmFnRW50ZXJEb2N1bWVudCIsImRyb3AiLCJkcm9wRG9jdW1lbnQiLCJmb3JDb250ZXh0TWVudSIsImRhdGFGaWVsZCIsImNvbnZlcnRlZE1ldGFkYXRhIiwicmVzb2x2ZVBhdGgiLCJ0YXJnZXQiLCJhY3Rpb25Db250ZXh0UGF0aCIsImdldEFjdGlvbkNvbnRleHQiLCJtZXRhTW9kZWwiLCJjcmVhdGVCaW5kaW5nQ29udGV4dCIsImFjdGlvbkNvbnRleHQiLCJkYXRhRmllbGREYXRhTW9kZWxPYmplY3RQYXRoIiwiZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzIiwiaXNCb3VuZCIsIkFjdGlvblRhcmdldCIsImlzT3BlcmF0aW9uQXZhaWxhYmxlIiwiQ29yZSIsIk9wZXJhdGlvbkF2YWlsYWJsZSIsInZhbHVlT2YiLCJkaXNwbGF5Q29tbWFuZEFjdGlvbiIsIlRhYmxlSGVscGVyIiwiaXNBY3Rpb25TaG93bkluQ29udGV4dE1lbnUiLCJhY3Rpb25QYXJhbWV0ZXJzIiwib25FeGVjdXRlQWN0aW9uIiwiZ2V0RGF0YUZpZWxkRm9yQWN0aW9uQnV0dG9uUHJlc3NIYW5kbGVyIiwib25FeGVjdXRlSUJOIiwiZ2V0RGF0YUZpZWxkRm9ySUJOUHJlc3NIYW5kbGVyIiwib25FeGVjdXRlTWFuaWZlc3QiLCJnZXRNYW5pZmVzdEFjdGlvblByZXNzSGFuZGxlciIsImlzSUJORW5hYmxlZCIsImlzRGF0YUZpZWxkRm9ySUJORW5hYmxlZCIsIlJlcXVpcmVzQ29udGV4dCIsIk5hdmlnYXRpb25BdmFpbGFibGUiLCJpc0FjdGlvbkVuYWJsZWQiLCJpc0RhdGFGaWVsZEZvckFjdGlvbkVuYWJsZWQiLCJBY3Rpb24iLCJlbmFibGVPblNlbGVjdCIsInRhcmdldEVudGl0eVR5cGUiLCJpc0VuYWJsZWQiLCJnZXRDb21tYW5kRXhlY3V0aW9uRm9yQWN0aW9uIiwiZ2V0Q29yZVJlcXVpcmUiLCJjdXN0b21Nb2R1bGVzIiwiYWRkaXRpb25hbFJlcXVpcmVkTW9kdWxlcyIsIm1vZHVsZSIsImluZGV4Iiwiam9pbiIsImdldENvbXB1dGVkQ29sdW1uIiwiY29sdW1uIiwiZW5hYmxlQW5hbHl0aWNzIiwiaXNEcmFmdEluZGljYXRvciIsIkNvbHVtbiIsImhlYWRlclZpc2libGUiLCJwcm9wZXJ0eUtleSIsImhlYWRlciIsImxhYmVsIiwid2lkdGgiLCJEcmFmdEluZGljYXRvciIsImRyYWZ0SW5kaWNhdG9yVHlwZSIsIk9iamVjdE1hcmtlclZpc2liaWxpdHkiLCJJY29uT25seSIsImNvbnRleHRQYXRoIiwiZ2V0UGF0aCIsInVzZWRJblRhYmxlIiwidXNlZEluQW5hbHl0aWNhbFRhYmxlIiwiaXNTaXR1YXRpb25zSW5kaWNhdG9yIiwiU2l0dWF0aW9uc0luZGljYXRvciIsImdldFNsb3RDb2x1bW4iLCJpc1JlYWRPbmx5IiwidGVtcGxhdGUiLCJzdGFydHNXaXRoIiwiU2xvdENvbHVtbiIsInRlbXBsYXRlSWQiLCJoQWxpZ24iLCJob3Jpem9udGFsQWxpZ24iLCJyZXF1aXJlZCIsImV4dGVuZGVkU2V0dGluZ3MiLCJSZXNwb25zaXZlQ29sdW1uU2V0dGluZ3MiLCJpbXBvcnRhbmNlIiwiZ2V0RHJhZnRJbmRpY2F0b3IiLCJmb3JtYXRPcHRpb25zIiwiZmllbGRHcm91cERyYWZ0SW5kaWNhdG9yUHJvcGVydHlQYXRoIiwiRm9ybUVsZW1lbnRXcmFwcGVyIiwiSWNvbkFuZFRleHQiLCJnZXREcmFmdEluZGljYXRvclZpc2libGVCaW5kaW5nIiwiZmllbGRHcm91cE5hbWUiLCJhcmlhTGFiZWxsZWRCeSIsImdldFNpdHVhdGlvbkluZGljYXRvciIsIk9iamVjdFN0YXR1cyIsInNob3dFcnJvck9iamVjdFN0YXR1cyIsImNsYXNzIiwic3RhdGUiLCJnZXREZWZhdWx0RGF0ZVRpbWVTdHlsZSIsImRhdGFGaWVsZENvbnRleHQiLCJ0YXJnZXRPYmplY3QiLCJpc0RhdGFGaWVsZCIsIlZhbHVlIiwiJHRhcmdldCIsImlzRGF0YUZpZWxkRm9yQW5ub3RhdGlvbiIsImhhc0RhdGFQb2ludFRhcmdldCIsIlRhcmdldCIsImdldENyZWF0aW9uVGVtcGxhdGUiLCJpc1RhYmxlUmVhZE9ubHkiLCJmaWVsZE1vZGUiLCJjb2x1bW5FZGl0TW9kZSIsImRhdGFGaWVsZE9iamVjdCIsInJlYWN0aXZlQXJlYU1vZGUiLCJ0ZXh0TGluZXNFZGl0IiwidGV4dE1heExpbmVzIiwidGV4dE1heExlbmd0aCIsInRleHRNYXhDaGFyYWN0ZXJzRGlzcGxheSIsInRleHRFeHBhbmRCZWhhdmlvckRpc3BsYXkiLCJ0ZXh0QWxpZ25Nb2RlIiwic2VtYW50aWNLZXlTdHlsZSIsImhhc0RyYWZ0SW5kaWNhdG9yIiwic2hvd0ljb25VcmwiLCJJbmxpbmUiLCJJY29uVXJsIiwiaWdub3JlTmF2aWdhdGlvbkF2YWlsYWJsZSIsImlzQ3VycmVuY3lPclVuaXRBbGlnbmVkIiwiZGF0ZVRpbWVTdHlsZSIsIkZpZWxkIiwidmhJZFByZWZpeCIsImVkaXRNb2RlIiwibWV0YVBhdGgiLCJ3cmFwIiwiY2hhbmdlIiwiZmllbGRDaGFuZ2VJbkNyZWF0aW9uUm93IiwiRmllbGRGb3JtYXRPcHRpb25zIiwiZ2V0TWFjcm9GaWVsZFRlbXBsYXRlIiwiaXNDb21wYWN0VHlwZSIsInRleHRBbGlnbiIsInNob3dFbXB0eUluZGljYXRvciIsImNsYXNzTmFtZSIsInR5cGVDb25maWciLCJpc0FuYWx5dGljcyIsImZvcklubGluZUNyZWF0aW9uUm93cyIsImNvbXBhY3RTZW1hbnRpY0tleSIsImlzQW5hbHl0aWNhbEFnZ3JlZ2F0ZWRSb3ciLCJhbmFseXRpY2FsQ29uZmlndXJhdGlvbiIsImFnZ3JlZ2F0aW9uT25MZWFmTGV2ZWwiLCJsaXZlQ2hhbmdlIiwiZmllbGRMaXZlQ2hhbmdlIiwibmF2aWdhdGVBZnRlckFjdGlvbiIsImlzTmF2aWdhYmxlIiwiZ2V0Q29sdW1uQ29udGVudFRlbXBsYXRlIiwiZGF0YUZpZWxkT1AiLCJjcmVhdGlvblRlbXBsYXRlIiwicmVhZE9ubHkiLCJpc0Fubm90YXRpb25PZlR5cGUiLCJpc0Fubm90YXRpb25PZlRlcm0iLCJzaG93T25seUNoYXJ0Iiwic2V0dGluZ3MiLCJzaG93TWljcm9DaGFydExhYmVsIiwibWljcm9DaGFydFNpemUiLCJtaWNyb0NoYXJ0Q29sbGVjdGlvbiIsImdldE1vZGVsIiwiZ2V0TmF2aWdhdGlvbkNvbnRleHQiLCJNaWNyb0NoYXJ0Iiwic2l6ZSIsImhpZGVPbk5vRGF0YSIsImlzTXVsdGlWYWx1ZUZpZWxkIiwiZW5oYW5jZURhdGFNb2RlbFBhdGgiLCJpc1RydXRoeSIsIklzSW5hY3RpdmUiLCJlcXVhbCIsIk11bHRpVmFsdWVGaWVsZEJsb2NrIiwidXNlUGFyZW50QmluZGluZ0NhY2hlIiwiZGlzYWJsZU93blJlcXVlc3RPbk1WRiIsImZpZWxkR3JvdXAiLCJkYXRhRmllbGRDb2xsZWN0aW9uQ29udGV4dCIsImZpZWxkR3JvdXBDb2xlY3Rpb25MZW5ndGgiLCJEYXRhIiwiZmllbGRHcm91cERhdGFGaWVsZCIsImZpZWxkR3JvdXBEYXRhRmllbGRJZHgiLCJmaWVsZEdyb3VwRGF0YUZpZWxkQ29udGV4dCIsImZpZWxkR3JvdXBEYXRhRmllbGRPUCIsImZpZWxkR3JvdXBMYWJlbCIsIkZpZWxkSGVscGVyIiwiY29tcHV0ZUxhYmVsVGV4dCIsImNvbnRleHQiLCJzaG93RGF0YUZpZWxkc0xhYmVsIiwicmVzb3VyY2VCdW5kbGUiLCJMaWJyYXJ5IiwiZ2V0UmVzb3VyY2VCdW5kbGVGb3IiLCJfanN4cyIsIkhCb3giLCJnZXRWaXNpYmxlRXhwcmVzc2lvbiIsImFsaWduSXRlbXMiLCJidWlsZEV4cHJlc3Npb25Gb3JBbGlnbkl0ZW1zIiwiTGFiZWwiLCJnZXRGaWVsZEdyb3VwTGFiZWxTdGFibGVJZCIsImdldFRleHQiLCJWQm94IiwibGF5b3V0RGF0YSIsIkZsZXhJdGVtRGF0YSIsImdyb3dGYWN0b3IiLCJnZXRDb2x1bW5TdGFibGVJZCIsImdldE1hcmdpbkNsYXNzIiwiZHJhZnRJbmRpY2F0b3IiLCJzaXR1YXRpb25JbmRpY2F0b3IiLCJnZXRWQm94VmlzaWJpbGl0eSIsIkZpZWxkR3JvdXBIaWRkZW5FeHByZXNzaW9ucyIsImdldENvbHVtblRlbXBsYXRlIiwiZ2V0RGF0YUZpZWxkRGVmYXVsdCIsImRhdGFGaWVsZE9iamVjdE1vZGVsUGF0aCIsInRlbXBsYXRlcyIsImVuYWJsZUF1dG9Db2x1bW5XaWR0aCIsIndpZHRoSW5jbHVkaW5nQ29sdW1uSGVhZGVyIiwiQ29tbW9uVXRpbHMiLCJpc1NtYWxsRGV2aWNlIiwiZ2V0Q29sdW1uV2lkdGgiLCJnZXRUZXh0T25BY3Rpb25GaWVsZCIsInRpdGxlIiwiZGVzY3JpcHRpb24iLCJtaW5XaWR0aCIsImdldENvbHVtbkFsaWdubWVudCIsInNldEhlYWRlckxhYmVsVmlzaWJpbGl0eSIsImNyZWF0ZUN1c3RvbURhdGEiLCJnZXRDb2x1bW5zIiwiY29sdW1ucyIsImF2YWlsYWJpbGl0eSIsIkxvZyIsImVycm9yIiwiRXJyb3IiLCJnZXREZXNpZ250aW1lIiwiZ2V0TURDUDEzbk1vZGUiLCJzdHJpbmdNb2RlIiwiVGFibGVQMTNuTW9kZSIsIkFnZ3JlZ2F0ZSIsIlNvcnQiLCJGaWx0ZXIiLCJHcm91cCIsImdldE1EQ1RhYmxlVGVtcGxhdGUiLCJuYXZpZ2F0aW9uSW5mbyIsInJvdXRlUGF0aCIsInRhcmdldEluZm9ybWF0aW9uIiwiYXBwQ29tcG9uZW50IiwiZ2V0Um91dGluZ1NlcnZpY2UiLCJfZ2V0VGFyZ2V0SW5mb3JtYXRpb24iLCJvcHRpb25zIiwib3BlbkluRWRpdE1vZGUiLCJmaWx0ZXJPbkFjdGl2ZUVudGl0aWVzIiwiTW9kZWxIZWxwZXIiLCJpc09iamVjdFBhdGhEcmFmdFN1cHBvcnRlZCIsImRlbGVnYXRlIiwiZ2V0RGVsZWdhdGUiLCJpc0FscCIsImVudGl0eU5hbWUiLCJjdXJyZW50SGVhZGVyIiwiaGVhZGVyQmluZGluZ0V4cHJlc3Npb24iLCJidWlsZEV4cHJlc3Npb25Gb3JIZWFkZXJWaXNpYmxlIiwidGFiVGl0bGUiLCJtb2RlbENvbnRleHRDaGFuZ2UiLCJ0YWJsZUNvbnRleHRDaGFuZ2UiLCJsaW5lSXRlbSIsImdldFVpTGluZUl0ZW1PYmplY3QiLCJuYXZpZ2F0aW9uUGF0aCIsImlzU2luZ2xldG9uIiwiZHJhZnQiLCJkZXNpZ250aW1lIiwib3ZlcnJpZGVSb3dQcmVzcyIsImFjdGlvblR5cGUiLCJzaG93Q3JlYXRlIiwidXBkYXRhYmxlUHJvcGVydHlQYXRoIiwiY3VycmVudFBlcnNvbmFsaXphdGlvbiIsInBlcnNvbmFsaXphdGlvbiIsInAxM25Nb2RlIiwibW9kZSIsInNwbGl0IiwidHJpbSIsImV4Y2x1ZGVHcm91cEZyb21QMTNuIiwibXVsdGlTZWxlY3REaXNhYmxlZEFjdGlvbnMiLCJBY3Rpb25IZWxwZXIiLCJnZXRNdWx0aVNlbGVjdERpc2FibGVkQWN0aW9ucyIsImlubGluZUNyZWF0aW9uUm93Q291bnQiLCJjcmVhdGVBdEVuZCIsImhpZGRlbkZpbHRlcnMiLCJnZXROYXZpZ2F0aW9uQXZhaWxhYmxlTWFwIiwiZXhwb3J0UmVxdWVzdFNpemUiLCJNRENUYWJsZSIsInNvcnRDb25kaXRpb25zIiwiZ3JvdXBDb25kaXRpb25zIiwiYWdncmVnYXRlQ29uZGl0aW9ucyIsImJ1c3lJbmRpY2F0b3JEZWxheSIsImVuYWJsZUV4cG9ydCIsIkpTT04iLCJwYXJzZSIsImJlZm9yZU9wZW5Db250ZXh0TWVudSIsImF1dG9CaW5kT25Jbml0IiwidXNlQmFzaWNTZWFyY2giLCJmaWx0ZXJCYXIiLCJzZWxlY3Rpb25Nb2RlIiwic2VsZWN0aW9uQ2hhbmdlIiwic2hvd1Jvd0NvdW50IiwiaGVhZGVyU3R5bGUiLCJ0aHJlc2hvbGQiLCJwYXN0ZSIsImJlZm9yZUV4cG9ydCIsInVzZUNvbmRlbnNlZFRhYmxlTGF5b3V0IiwibXVsdGlTZWxlY3RNb2RlIiwic2hvd1Bhc3RlQnV0dG9uIiwiZW5hYmxlUGFzdGUiLCJkYXRhU3RhdGVJbmRpY2F0b3IiLCJyb3dTZXR0aW5ncyIsImNvbnRleHRNZW51IiwiZHJhZ0Ryb3BDb25maWciLCJjcmVhdGlvblJvdyIsInZhcmlhbnQiLCJxdWlja0ZpbHRlciIsImNvcHlQcm92aWRlciIsImNlbGxTZWxlY3RvciJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiTWRjVGFibGVUZW1wbGF0ZS50c3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBDb252ZXJ0ZWRNZXRhZGF0YSwgRW50aXR5U2V0LCBOYXZpZ2F0aW9uUHJvcGVydHkgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXNcIjtcbmltcG9ydCB0eXBlIHtcblx0Q2hhcnQsXG5cdERhdGFGaWVsZCxcblx0RGF0YUZpZWxkRm9yQWN0aW9uLFxuXHREYXRhRmllbGRGb3JBbm5vdGF0aW9uLFxuXHREYXRhUG9pbnQsXG5cdEZpZWxkR3JvdXAsXG5cdExpbmVJdGVtLFxuXHRQcmVzZW50YXRpb25WYXJpYW50LFxuXHRTZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50XG59IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvVUlcIjtcbmltcG9ydCB7XG5cdFVJQW5ub3RhdGlvblRlcm1zLFxuXHRVSUFubm90YXRpb25UeXBlcyxcblx0dHlwZSBEYXRhRmllbGRBYnN0cmFjdFR5cGVzLFxuXHR0eXBlIERhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvblxufSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL1VJXCI7XG5pbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCB0eXBlIHsgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIH0gZnJvbSBcInNhcC9mZS9iYXNlL0JpbmRpbmdUb29sa2l0XCI7XG5pbXBvcnQgeyBhbmQsIGNvbXBpbGVFeHByZXNzaW9uLCBjb25zdGFudCwgZXF1YWwsIGlmRWxzZSwgaXNDb25zdGFudCwgaXNUcnV0aHksIG5vdCwgb3IsIHBhdGhJbk1vZGVsIH0gZnJvbSBcInNhcC9mZS9iYXNlL0JpbmRpbmdUb29sa2l0XCI7XG5pbXBvcnQgdHlwZSB7IFByb3BlcnRpZXNPZiwgU3RyaWN0UHJvcGVydGllc09mIH0gZnJvbSBcInNhcC9mZS9iYXNlL0NsYXNzU3VwcG9ydFwiO1xuaW1wb3J0IHR5cGUgQXBwQ29tcG9uZW50IGZyb20gXCJzYXAvZmUvY29yZS9BcHBDb21wb25lbnRcIjtcbmltcG9ydCBDb21tb25VdGlscyBmcm9tIFwic2FwL2ZlL2NvcmUvQ29tbW9uVXRpbHNcIjtcbmltcG9ydCBDb21tYW5kRXhlY3V0aW9uIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9scy9Db21tYW5kRXhlY3V0aW9uXCI7XG5pbXBvcnQgRm9ybUVsZW1lbnRXcmFwcGVyIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9scy9Gb3JtRWxlbWVudFdyYXBwZXJcIjtcbmltcG9ydCB7IENyZWF0aW9uTW9kZSB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL01hbmlmZXN0U2V0dGluZ3NcIjtcbmltcG9ydCB7IGdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL01ldGFNb2RlbENvbnZlcnRlclwiO1xuaW1wb3J0IHsgaGFzRGF0YVBvaW50VGFyZ2V0LCBpc0RhdGFGaWVsZCwgaXNEYXRhRmllbGRGb3JBbm5vdGF0aW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvYW5ub3RhdGlvbnMvRGF0YUZpZWxkXCI7XG5pbXBvcnQgdHlwZSB7IEN1c3RvbUFjdGlvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0NvbW1vbi9BY3Rpb25cIjtcbmltcG9ydCB0eXBlIHsgVGFibGVUeXBlLCBUYWJsZVZpc3VhbGl6YXRpb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9Db21tb24vVGFibGVcIjtcbmltcG9ydCB0eXBlIHtcblx0QW5ub3RhdGlvblRhYmxlQ29sdW1uLFxuXHRDb21wdXRlZFRhYmxlQ29sdW1uLFxuXHRDdXN0b21CYXNlZFRhYmxlQ29sdW1uXG59IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0NvbW1vbi90YWJsZS9Db2x1bW5zXCI7XG5pbXBvcnQgeyBTdGFuZGFyZEFjdGlvbktleXMsIHR5cGUgU3RhbmRhcmRBY3Rpb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9Db21tb24vdGFibGUvU3RhbmRhcmRBY3Rpb25zXCI7XG5pbXBvcnQgeyBVSSwgc2luZ2xldG9uUGF0aFZpc2l0b3IgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9CaW5kaW5nSGVscGVyXCI7XG5pbXBvcnQgTW9kZWxIZWxwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvTW9kZWxIZWxwZXJcIjtcbmltcG9ydCB7IGdlbmVyYXRlIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvU3RhYmxlSWRIZWxwZXJcIjtcbmltcG9ydCB7IGlzQW5ub3RhdGlvbk9mVGVybSwgaXNBbm5vdGF0aW9uT2ZUeXBlLCBpc1NpbmdsZXRvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1R5cGVHdWFyZHNcIjtcbmltcG9ydCB7IGVuaGFuY2VEYXRhTW9kZWxQYXRoLCBpc1BhdGhVcGRhdGFibGUsIHR5cGUgRGF0YU1vZGVsT2JqZWN0UGF0aCB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0RhdGFNb2RlbFBhdGhIZWxwZXJcIjtcbmltcG9ydCB0eXBlIHsgRGF0ZVRpbWVTdHlsZSB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL1VJRm9ybWF0dGVyc1wiO1xuaW1wb3J0IHsgaXNNdWx0aVZhbHVlRmllbGQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9VSUZvcm1hdHRlcnNcIjtcbmltcG9ydCB7IGdldENvbW1hbmRFeGVjdXRpb25Gb3JBY3Rpb24gfSBmcm9tIFwic2FwL2ZlL21hY3Jvcy9BY3Rpb25Db21tYW5kXCI7XG5pbXBvcnQgQ29tbW9uSGVscGVyIGZyb20gXCJzYXAvZmUvbWFjcm9zL0NvbW1vbkhlbHBlclwiO1xuaW1wb3J0IEZpZWxkIGZyb20gXCJzYXAvZmUvbWFjcm9zL0ZpZWxkXCI7XG5pbXBvcnQgTXVsdGlWYWx1ZUZpZWxkQmxvY2sgZnJvbSBcInNhcC9mZS9tYWNyb3MvTXVsdGlWYWx1ZUZpZWxkXCI7XG5pbXBvcnQgeyBjcmVhdGVDdXN0b21EYXRhLCBjcmVhdGVDdXN0b21EYXRhcyB9IGZyb20gXCJzYXAvZmUvbWFjcm9zL1RTWFV0aWxzXCI7XG5pbXBvcnQgRHJhZnRJbmRpY2F0b3IgZnJvbSBcInNhcC9mZS9tYWNyb3MvZHJhZnRJbmRpY2F0b3IvRHJhZnRJbmRpY2F0b3JcIjtcbmltcG9ydCBGaWVsZEhlbHBlciBmcm9tIFwic2FwL2ZlL21hY3Jvcy9maWVsZC9GaWVsZEhlbHBlclwiO1xuaW1wb3J0IHsgZ2V0RHJhZnRJbmRpY2F0b3JWaXNpYmxlQmluZGluZywgZ2V0VmlzaWJsZUV4cHJlc3Npb24gfSBmcm9tIFwic2FwL2ZlL21hY3Jvcy9maWVsZC9GaWVsZFRlbXBsYXRpbmdcIjtcbmltcG9ydCBBY3Rpb25IZWxwZXIgZnJvbSBcInNhcC9mZS9tYWNyb3MvaW50ZXJuYWwvaGVscGVycy9BY3Rpb25IZWxwZXJcIjtcbmltcG9ydCB7IGJ1aWxkRXhwcmVzc2lvbkZvckhlYWRlclZpc2libGUgfSBmcm9tIFwic2FwL2ZlL21hY3Jvcy9pbnRlcm5hbC9oZWxwZXJzL1RhYmxlVGVtcGxhdGluZ1wiO1xuaW1wb3J0IFNpdHVhdGlvbnNJbmRpY2F0b3IgZnJvbSBcInNhcC9mZS9tYWNyb3Mvc2l0dWF0aW9ucy9TaXR1YXRpb25zSW5kaWNhdG9yXCI7XG5pbXBvcnQgeyBnZXRUYWJsZUFjdGlvbnNUZW1wbGF0ZSwgZ2V0VGFibGVDb250ZXh0TWVudVRlbXBsYXRlIH0gZnJvbSBcInNhcC9mZS9tYWNyb3MvdGFibGUvQWN0aW9uc1RlbXBsYXRpbmdcIjtcbmltcG9ydCBRdWlja0ZpbHRlclNlbGVjdG9yIGZyb20gXCJzYXAvZmUvbWFjcm9zL3RhYmxlL1F1aWNrRmlsdGVyU2VsZWN0b3JcIjtcbmltcG9ydCBTbG90Q29sdW1uIGZyb20gXCJzYXAvZmUvbWFjcm9zL3RhYmxlL1Nsb3RDb2x1bW5cIjtcbmltcG9ydCB0eXBlIFRhYmxlQVBJIGZyb20gXCJzYXAvZmUvbWFjcm9zL3RhYmxlL1RhYmxlQVBJXCI7XG5pbXBvcnQgdHlwZSBUYWJsZUNyZWF0aW9uT3B0aW9ucyBmcm9tIFwic2FwL2ZlL21hY3Jvcy90YWJsZS9UYWJsZUNyZWF0aW9uT3B0aW9uc1wiO1xuaW1wb3J0IFRhYmxlSGVscGVyIGZyb20gXCJzYXAvZmUvbWFjcm9zL3RhYmxlL1RhYmxlSGVscGVyXCI7XG5pbXBvcnQgeyBnZXRVcGxvYWRQbHVnaW4gfSBmcm9tIFwic2FwL2ZlL21hY3Jvcy90YWJsZS91cGxvYWRUYWJsZS9VcGxvYWRUYWJsZVRlbXBsYXRlXCI7XG5pbXBvcnQgRmxleEl0ZW1EYXRhIGZyb20gXCJzYXAvbS9GbGV4SXRlbURhdGFcIjtcbmltcG9ydCBIQm94IGZyb20gXCJzYXAvbS9IQm94XCI7XG5pbXBvcnQgTGFiZWwgZnJvbSBcInNhcC9tL0xhYmVsXCI7XG5pbXBvcnQgTWVudSBmcm9tIFwic2FwL20vTWVudVwiO1xuaW1wb3J0IE1lbnVJdGVtIGZyb20gXCJzYXAvbS9NZW51SXRlbVwiO1xuaW1wb3J0IE9iamVjdFN0YXR1cyBmcm9tIFwic2FwL20vT2JqZWN0U3RhdHVzXCI7XG5pbXBvcnQgU2VnbWVudGVkQnV0dG9uIGZyb20gXCJzYXAvbS9TZWdtZW50ZWRCdXR0b25cIjtcbmltcG9ydCBTZWdtZW50ZWRCdXR0b25JdGVtIGZyb20gXCJzYXAvbS9TZWdtZW50ZWRCdXR0b25JdGVtXCI7XG5pbXBvcnQgVkJveCBmcm9tIFwic2FwL20vVkJveFwiO1xuaW1wb3J0IHsgT2JqZWN0TWFya2VyVmlzaWJpbGl0eSB9IGZyb20gXCJzYXAvbS9saWJyYXJ5XCI7XG5pbXBvcnQgQ2VsbFNlbGVjdG9yIGZyb20gXCJzYXAvbS9wbHVnaW5zL0NlbGxTZWxlY3RvclwiO1xuaW1wb3J0IENvbnRleHRNZW51U2V0dGluZyBmcm9tIFwic2FwL20vcGx1Z2lucy9Db250ZXh0TWVudVNldHRpbmdcIjtcbmltcG9ydCBDb3B5UHJvdmlkZXIgZnJvbSBcInNhcC9tL3BsdWdpbnMvQ29weVByb3ZpZGVyXCI7XG5pbXBvcnQgRGF0YVN0YXRlSW5kaWNhdG9yIGZyb20gXCJzYXAvbS9wbHVnaW5zL0RhdGFTdGF0ZUluZGljYXRvclwiO1xuaW1wb3J0IHR5cGUgQ29udHJvbCBmcm9tIFwic2FwL3VpL2NvcmUvQ29udHJvbFwiO1xuaW1wb3J0IHR5cGUgVUk1RWxlbWVudCBmcm9tIFwic2FwL3VpL2NvcmUvRWxlbWVudFwiO1xuaW1wb3J0IExpYnJhcnkgZnJvbSBcInNhcC91aS9jb3JlL0xpYlwiO1xuaW1wb3J0IHR5cGUgeyBUaXRsZUxldmVsIH0gZnJvbSBcInNhcC91aS9jb3JlL2xpYnJhcnlcIjtcbmltcG9ydCB7IFByaW9yaXR5IH0gZnJvbSBcInNhcC91aS9jb3JlL2xpYnJhcnlcIjtcbmltcG9ydCBWYXJpYW50TWFuYWdlbWVudCBmcm9tIFwic2FwL3VpL2ZsL3ZhcmlhbnRzL1ZhcmlhbnRNYW5hZ2VtZW50XCI7XG5pbXBvcnQgTURDVGFibGUgZnJvbSBcInNhcC91aS9tZGMvVGFibGVcIjtcbmltcG9ydCBBY3Rpb25Ub29sYmFyQWN0aW9uIGZyb20gXCJzYXAvdWkvbWRjL2FjdGlvbnRvb2xiYXIvQWN0aW9uVG9vbGJhckFjdGlvblwiO1xuaW1wb3J0IFRhYmxlUDEzbk1vZGUgZnJvbSBcInNhcC91aS9tZGMvZW51bXMvVGFibGVQMTNuTW9kZVwiO1xuaW1wb3J0IFRhYmxlUm93QWN0aW9uVHlwZSBmcm9tIFwic2FwL3VpL21kYy9lbnVtcy9UYWJsZVJvd0FjdGlvblR5cGVcIjtcbmltcG9ydCBQZXJzaXN0ZW5jZVByb3ZpZGVyIGZyb20gXCJzYXAvdWkvbWRjL3AxM24vUGVyc2lzdGVuY2VQcm92aWRlclwiO1xuaW1wb3J0IENvbHVtbiBmcm9tIFwic2FwL3VpL21kYy90YWJsZS9Db2x1bW5cIjtcbmltcG9ydCBDcmVhdGlvblJvdyBmcm9tIFwic2FwL3VpL21kYy90YWJsZS9DcmVhdGlvblJvd1wiO1xuaW1wb3J0IERyYWdEcm9wQ29uZmlnIGZyb20gXCJzYXAvdWkvbWRjL3RhYmxlL0RyYWdEcm9wQ29uZmlnXCI7XG5pbXBvcnQgR3JpZFRhYmxlVHlwZSBmcm9tIFwic2FwL3VpL21kYy90YWJsZS9HcmlkVGFibGVUeXBlXCI7XG5pbXBvcnQgUmVzcG9uc2l2ZUNvbHVtblNldHRpbmdzIGZyb20gXCJzYXAvdWkvbWRjL3RhYmxlL1Jlc3BvbnNpdmVDb2x1bW5TZXR0aW5nc1wiO1xuaW1wb3J0IFJlc3BvbnNpdmVUYWJsZVR5cGUgZnJvbSBcInNhcC91aS9tZGMvdGFibGUvUmVzcG9uc2l2ZVRhYmxlVHlwZVwiO1xuaW1wb3J0IFJvd0FjdGlvbkl0ZW0gZnJvbSBcInNhcC91aS9tZGMvdGFibGUvUm93QWN0aW9uSXRlbVwiO1xuaW1wb3J0IFJvd1NldHRpbmdzIGZyb20gXCJzYXAvdWkvbWRjL3RhYmxlL1Jvd1NldHRpbmdzXCI7XG5pbXBvcnQgVHJlZVRhYmxlVHlwZSBmcm9tIFwic2FwL3VpL21kYy90YWJsZS9UcmVlVGFibGVUeXBlXCI7XG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvQ29udGV4dFwiO1xuaW1wb3J0IHR5cGUgT0RhdGFNZXRhTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YU1ldGFNb2RlbFwiO1xuaW1wb3J0IE1pY3JvQ2hhcnQgZnJvbSBcIi4uL01pY3JvQ2hhcnRcIjtcbmltcG9ydCBGaWVsZEZvcm1hdE9wdGlvbnMgZnJvbSBcIi4uL2ZpZWxkL0ZpZWxkRm9ybWF0T3B0aW9uc1wiO1xuaW1wb3J0IHR5cGUgVGFibGVFdmVudEhhbmRsZXJQcm92aWRlciBmcm9tIFwiLi9UYWJsZUV2ZW50SGFuZGxlclByb3ZpZGVyXCI7XG5cbmV4cG9ydCB0eXBlIFRhYmxlVGVtcGxhdGluZ1BhcmFtZXRlcnMgPSB7XG5cdG1ldGFQYXRoOiBDb250ZXh0O1xuXHRjb252ZXJ0ZWRNZXRhZGF0YTogQ29udmVydGVkTWV0YWRhdGE7XG5cdG1ldGFNb2RlbDogT0RhdGFNZXRhTW9kZWw7XG5cdGhhbmRsZXJQcm92aWRlcjogVGFibGVFdmVudEhhbmRsZXJQcm92aWRlcjtcblx0YXBwQ29tcG9uZW50OiBBcHBDb21wb25lbnQ7XG59O1xuXG4vKipcbiAqIEdlbmVyYXRlcyB0aGUgdGFibGUgdHlwZSBmb3IgdGhlIHRhYmxlLlxuICogQHBhcmFtIHRhYmxlRGVmaW5pdGlvblxuICogQHBhcmFtIF9jb2xsZWN0aW9uXG4gKiBAcGFyYW0gdGFibGVUeXBlXG4gKiBAcGFyYW0gc2VsZWN0aW9uTGltaXRcbiAqIEByZXR1cm5zIFRoZSB0YWJsZSB0eXBlXG4gKi9cbmZ1bmN0aW9uIGdldFRhYmxlVHlwZShcblx0dGFibGVEZWZpbml0aW9uOiBUYWJsZVZpc3VhbGl6YXRpb24sXG5cdF9jb2xsZWN0aW9uOiBDb250ZXh0LFxuXHR0YWJsZVR5cGU6IFRhYmxlVHlwZSxcblx0c2VsZWN0aW9uTGltaXQ6IG51bWJlclxuKTogUmVzcG9uc2l2ZVRhYmxlVHlwZSB8IEdyaWRUYWJsZVR5cGUgfCBUcmVlVGFibGVUeXBlIHtcblx0Y29uc3QgY29sbGVjdGlvbiA9IF9jb2xsZWN0aW9uLmdldE9iamVjdCgpO1xuXHRzd2l0Y2ggKHRhYmxlVHlwZSkge1xuXHRcdGNhc2UgXCJHcmlkVGFibGVcIjpcblx0XHRcdHJldHVybiAoXG5cdFx0XHRcdDxHcmlkVGFibGVUeXBlXG5cdFx0XHRcdFx0cm93Q291bnRNb2RlPXt0YWJsZURlZmluaXRpb24uY29udHJvbC5yb3dDb3VudE1vZGV9XG5cdFx0XHRcdFx0cm93Q291bnQ9e3RhYmxlRGVmaW5pdGlvbi5jb250cm9sLnJvd0NvdW50fVxuXHRcdFx0XHRcdHNlbGVjdGlvbkxpbWl0PXtzZWxlY3Rpb25MaW1pdH1cblx0XHRcdFx0XHRmaXhlZENvbHVtbkNvdW50PXt0YWJsZURlZmluaXRpb24uY29udHJvbC5mcm96ZW5Db2x1bW5Db3VudH1cblx0XHRcdFx0XHRzY3JvbGxUaHJlc2hvbGQ9e3RhYmxlRGVmaW5pdGlvbi5jb250cm9sLnNjcm9sbFRocmVzaG9sZH1cblx0XHRcdFx0XHRlbmFibGVDb2x1bW5GcmVlemU9e3RhYmxlRGVmaW5pdGlvbi5jb250cm9sLmVuYWJsZUNvbHVtbkZyZWV6ZX1cblx0XHRcdFx0Lz5cblx0XHRcdCk7XG5cblx0XHRjYXNlIFwiVHJlZVRhYmxlXCI6XG5cdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHQ8VHJlZVRhYmxlVHlwZVxuXHRcdFx0XHRcdHJvd0NvdW50TW9kZT17dGFibGVEZWZpbml0aW9uLmNvbnRyb2wucm93Q291bnRNb2RlfVxuXHRcdFx0XHRcdHJvd0NvdW50PXt0YWJsZURlZmluaXRpb24uY29udHJvbC5yb3dDb3VudH1cblx0XHRcdFx0XHRmaXhlZENvbHVtbkNvdW50PXt0YWJsZURlZmluaXRpb24uY29udHJvbC5mcm96ZW5Db2x1bW5Db3VudH1cblx0XHRcdFx0XHRzY3JvbGxUaHJlc2hvbGQ9e3RhYmxlRGVmaW5pdGlvbi5jb250cm9sLnNjcm9sbFRocmVzaG9sZH1cblx0XHRcdFx0XHRlbmFibGVDb2x1bW5GcmVlemU9e3RhYmxlRGVmaW5pdGlvbi5jb250cm9sLmVuYWJsZUNvbHVtbkZyZWV6ZX1cblx0XHRcdFx0Lz5cblx0XHRcdCk7XG5cblx0XHRkZWZhdWx0OlxuXHRcdFx0cmV0dXJuIChcblx0XHRcdFx0PFJlc3BvbnNpdmVUYWJsZVR5cGVcblx0XHRcdFx0XHRzaG93RGV0YWlsc0J1dHRvbj17dHJ1ZX1cblx0XHRcdFx0XHRkZXRhaWxzQnV0dG9uU2V0dGluZz17W1ByaW9yaXR5LkxvdywgUHJpb3JpdHkuTWVkaXVtLCBQcmlvcml0eS5Ob25lXX1cblx0XHRcdFx0XHRncm93aW5nTW9kZT17Y29sbGVjdGlvbi4ka2luZCA9PT0gXCJFbnRpdHlTZXRcIiA/IFwiU2Nyb2xsXCIgOiB1bmRlZmluZWR9XG5cdFx0XHRcdFx0cG9waW5MYXlvdXQ9e3RhYmxlRGVmaW5pdGlvbi5jb250cm9sLnBvcGluTGF5b3V0fVxuXHRcdFx0XHQvPlxuXHRcdFx0KTtcblx0fVxufVxuXG4vKipcbiAqIEdlbmVyYXRlcyB0aGUgRGF0YVNhdGVJbmRpY2F0b3IgZm9yIHRoZSB0YWJsZS5cbiAqIEBwYXJhbSBoYW5kbGVyUHJvdmlkZXJcbiAqIEByZXR1cm5zIFRoZSBkYXRhc3RhdGUgaW5kaWNhdG9yXG4gKi9cbmZ1bmN0aW9uIGdldERhdGFTdGF0ZUluZGljYXRvcihoYW5kbGVyUHJvdmlkZXI6IFRhYmxlRXZlbnRIYW5kbGVyUHJvdmlkZXIpOiBEYXRhU3RhdGVJbmRpY2F0b3Ige1xuXHRyZXR1cm4gKFxuXHRcdDxEYXRhU3RhdGVJbmRpY2F0b3Jcblx0XHRcdGZpbHRlcj17aGFuZGxlclByb3ZpZGVyLmRhdGFTdGF0ZUluZGljYXRvckZpbHRlcn1cblx0XHRcdGVuYWJsZUZpbHRlcmluZz17dHJ1ZX1cblx0XHRcdGRhdGFTdGF0ZUNoYW5nZT17aGFuZGxlclByb3ZpZGVyLmRhdGFTdGF0ZUNoYW5nZX1cblx0XHQvPlxuXHQpO1xufVxuXG4vKipcbiAqIEdlbmVyYXRlcyB0aGUgYmluZGluZyBleHByZXNzaW9uIGZvciB0aGUgZHJhZyBhbmQgZHJvcCBlbmFibGVtZW50LlxuICogQHBhcmFtIGNvbnRleHRPYmplY3RQYXRoXG4gKiBAcGFyYW0gdGFibGVEZWZpbml0aW9uXG4gKiBAcmV0dXJucyBUaGUgYmluZGluZyBleHByZXNzaW9uXG4gKi9cbmZ1bmN0aW9uIGdldERyYWdBbmREcm9wRW5hYmxlZChcblx0Y29udGV4dE9iamVjdFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8TGluZUl0ZW0gfCBTZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50IHwgUHJlc2VudGF0aW9uVmFyaWFudD4sXG5cdHRhYmxlRGVmaW5pdGlvbjogVGFibGVWaXN1YWxpemF0aW9uXG4pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4ge1xuXHRjb25zdCBpc1BhdGhVcGRhdGFibGVPbk5hdmlnYXRpb24gPSBpc1BhdGhVcGRhdGFibGUoY29udGV4dE9iamVjdFBhdGgsIHtcblx0XHRpZ25vcmVUYXJnZXRDb2xsZWN0aW9uOiB0cnVlLFxuXHRcdGF1dGhvcml6ZVVucmVzb2x2YWJsZTogdHJ1ZSxcblx0XHRwYXRoVmlzaXRvcjogKHBhdGg6IHN0cmluZywgbmF2aWdhdGlvblBhdGhzOiBzdHJpbmdbXSkgPT5cblx0XHRcdHNpbmdsZXRvblBhdGhWaXNpdG9yKHBhdGgsIGNvbnRleHRPYmplY3RQYXRoLmNvbnZlcnRlZFR5cGVzLCBuYXZpZ2F0aW9uUGF0aHMpXG5cdH0pO1xuXHRjb25zdCBpc1BhdGhVcGRhdGFibGVPblRhcmdldCA9IGlzUGF0aFVwZGF0YWJsZShjb250ZXh0T2JqZWN0UGF0aCwge1xuXHRcdGF1dGhvcml6ZVVucmVzb2x2YWJsZTogdHJ1ZSxcblx0XHRwYXRoVmlzaXRvcjogKHBhdGg6IHN0cmluZywgbmF2aWdhdGlvblBhdGhzOiBzdHJpbmdbXSkgPT5cblx0XHRcdHNpbmdsZXRvblBhdGhWaXNpdG9yKHBhdGgsIGNvbnRleHRPYmplY3RQYXRoLmNvbnZlcnRlZFR5cGVzLCBuYXZpZ2F0aW9uUGF0aHMpXG5cdH0pO1xuXG5cdGlmIChjb250ZXh0T2JqZWN0UGF0aC5zdGFydGluZ0VudGl0eVNldCA9PT0gY29udGV4dE9iamVjdFBhdGgudGFyZ2V0RW50aXR5U2V0KSB7XG5cdFx0Ly8gTGlzdFJlcG9ydCBjYXNlOiB3ZSBhbGxvdyBkcmFnIGFuZCBkcm9wIG9uIGRyYWZ0LWVuYWJsZWQgZW50aXRpZXNcblx0XHRpZiAoKGNvbnRleHRPYmplY3RQYXRoLnN0YXJ0aW5nRW50aXR5U2V0IGFzIEVudGl0eVNldCkuYW5ub3RhdGlvbnMuQ29tbW9uPy5EcmFmdFJvb3QgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0cmV0dXJuIGFuZChcblx0XHRcdFx0aXNQYXRoVXBkYXRhYmxlT25OYXZpZ2F0aW9uLl90eXBlID09PSBcIlVucmVzb2x2YWJsZVwiXG5cdFx0XHRcdFx0PyBpZkVsc2UoaXNDb25zdGFudChpc1BhdGhVcGRhdGFibGVPblRhcmdldCksIGlzUGF0aFVwZGF0YWJsZU9uVGFyZ2V0LCBjb25zdGFudCh0cnVlKSlcblx0XHRcdFx0XHQ6IGlzUGF0aFVwZGF0YWJsZU9uTmF2aWdhdGlvbixcblx0XHRcdFx0dGFibGVEZWZpbml0aW9uLmNvbnRyb2wuaXNIaWVyYXJjaHlQYXJlbnROb2RlVXBkYXRhYmxlIVxuXHRcdFx0KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIGNvbnN0YW50KGZhbHNlKTtcblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0Ly8gT2JqZWN0UGFnZSBjYXNlOiB3ZSBhbGxvdyBkcmFnIGFuZCBkcm9wIGluIGVkaXQgbW9kZVxuXHRcdHJldHVybiBhbmQoXG5cdFx0XHRpc1BhdGhVcGRhdGFibGVPbk5hdmlnYXRpb24uX3R5cGUgPT09IFwiVW5yZXNvbHZhYmxlXCJcblx0XHRcdFx0PyBpZkVsc2UoaXNDb25zdGFudChpc1BhdGhVcGRhdGFibGVPblRhcmdldCksIGlzUGF0aFVwZGF0YWJsZU9uVGFyZ2V0LCBjb25zdGFudCh0cnVlKSlcblx0XHRcdFx0OiBpc1BhdGhVcGRhdGFibGVPbk5hdmlnYXRpb24sXG5cdFx0XHRVSS5Jc0VkaXRhYmxlLFxuXHRcdFx0dGFibGVEZWZpbml0aW9uLmNvbnRyb2wuaXNIaWVyYXJjaHlQYXJlbnROb2RlVXBkYXRhYmxlIVxuXHRcdCk7XG5cdH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldERlcGVuZGVudHMoXG5cdHRhYmxlUHJvcGVydGllczogVGFibGVCbG9ja1Byb3BlcnRpZXMsXG5cdHBhcmFtZXRlcnM6IFRhYmxlVGVtcGxhdGluZ1BhcmFtZXRlcnMsXG5cdHZhcmlhbnRNYW5hZ2VtZW50OiBzdHJpbmcgfCB1bmRlZmluZWQsXG5cdGNvbGxlY3Rpb246IENvbnRleHRcbik6IFVJNUVsZW1lbnRbXSB7XG5cdGNvbnN0IGlkID0gdGFibGVQcm9wZXJ0aWVzLmNvbnRlbnRJZDtcblx0Y29uc3QgdGFibGVEZWZpbml0aW9uID0gdGFibGVQcm9wZXJ0aWVzLnRhYmxlRGVmaW5pdGlvbjtcblx0Y29uc3QgdGFibGVUeXBlID0gdGFibGVQcm9wZXJ0aWVzLnRhYmxlRGVmaW5pdGlvbi5jb250cm9sLnR5cGU7XG5cdGNvbnN0IGhhbmRsZXJQcm92aWRlciA9IHBhcmFtZXRlcnMuaGFuZGxlclByb3ZpZGVyO1xuXG5cdGNvbnN0IGRlcGVuZGVudHM6IFVJNUVsZW1lbnRbXSA9IFtdO1xuXHRjb25zdCBjdXRBY3Rpb24gPSB0YWJsZURlZmluaXRpb24uYWN0aW9ucy5maW5kKChhKSA9PiBhLmtleSA9PT0gU3RhbmRhcmRBY3Rpb25LZXlzLkN1dCkgYXMgU3RhbmRhcmRBY3Rpb24gfCB1bmRlZmluZWQ7XG5cdGlmIChjdXRBY3Rpb24/LmlzVGVtcGxhdGVkID09PSBcInRydWVcIiAmJiB0YWJsZVR5cGUgPT09IFwiVHJlZVRhYmxlXCIpIHtcblx0XHRkZXBlbmRlbnRzLnB1c2goXG5cdFx0XHQ8Q29tbWFuZEV4ZWN1dGlvblxuXHRcdFx0XHRleGVjdXRlPXtoYW5kbGVyUHJvdmlkZXIuZ2V0Q3V0SGFuZGxlcihmYWxzZSl9XG5cdFx0XHRcdGNvbW1hbmQ9XCJDdXRcIlxuXHRcdFx0XHRlbmFibGVkPXtjdXRBY3Rpb24uZW5hYmxlZCBhcyB1bmtub3duIGFzIGJvb2xlYW59XG5cdFx0XHQvPlxuXHRcdCk7XG5cdH1cblx0Y29uc3QgY29weUFjdGlvbiA9IHRhYmxlRGVmaW5pdGlvbi5hY3Rpb25zLmZpbmQoKGEpID0+IGEua2V5ID09PSBTdGFuZGFyZEFjdGlvbktleXMuQ29weSkgYXMgU3RhbmRhcmRBY3Rpb24gfCB1bmRlZmluZWQ7XG5cdGlmIChjb3B5QWN0aW9uPy5pc1RlbXBsYXRlZCA9PT0gXCJ0cnVlXCIgJiYgdGFibGVUeXBlID09PSBcIlRyZWVUYWJsZVwiKSB7XG5cdFx0ZGVwZW5kZW50cy5wdXNoKFxuXHRcdFx0PENvbW1hbmRFeGVjdXRpb25cblx0XHRcdFx0ZXhlY3V0ZT17aGFuZGxlclByb3ZpZGVyLmdldENvcHlIYW5kbGVyKGZhbHNlKX1cblx0XHRcdFx0Y29tbWFuZD1cIkNvcHlcIlxuXHRcdFx0XHRlbmFibGVkPXtjb3B5QWN0aW9uLmVuYWJsZWQgYXMgdW5rbm93biBhcyBib29sZWFufVxuXHRcdFx0Lz5cblx0XHQpO1xuXHR9XG5cdGNvbnN0IHBhc3RlQWN0aW9uID0gdGFibGVEZWZpbml0aW9uLmFjdGlvbnMuZmluZCgoYSkgPT4gYS5rZXkgPT09IFN0YW5kYXJkQWN0aW9uS2V5cy5QYXN0ZSkgYXMgU3RhbmRhcmRBY3Rpb24gfCB1bmRlZmluZWQ7XG5cdGlmIChwYXN0ZUFjdGlvbj8udmlzaWJsZSAhPT0gXCJmYWxzZVwiICYmIHRhYmxlVHlwZSA9PT0gXCJUcmVlVGFibGVcIikge1xuXHRcdGRlcGVuZGVudHMucHVzaChcblx0XHRcdDxDb21tYW5kRXhlY3V0aW9uXG5cdFx0XHRcdGV4ZWN1dGU9e2hhbmRsZXJQcm92aWRlci5nZXRQYXN0ZUhhbmRsZXIoZmFsc2UpfVxuXHRcdFx0XHRjb21tYW5kPVwiUGFzdGVcIlxuXHRcdFx0XHRlbmFibGVkPXtwYXN0ZUFjdGlvbj8uZW5hYmxlZCBhcyB1bmtub3duIGFzIGJvb2xlYW59XG5cdFx0XHQvPlxuXHRcdCk7XG5cdH1cblxuXHRjb25zdCBjcmVhdGVBY3Rpb24gPSB0YWJsZURlZmluaXRpb24uYWN0aW9ucy5maW5kKChhKSA9PiBhLmtleSA9PT0gU3RhbmRhcmRBY3Rpb25LZXlzLkNyZWF0ZSkgYXMgU3RhbmRhcmRBY3Rpb24gfCB1bmRlZmluZWQ7XG5cdGNvbnN0IGRlbGV0ZUFjdGlvbiA9IHRhYmxlRGVmaW5pdGlvbi5hY3Rpb25zLmZpbmQoKGEpID0+IGEua2V5ID09PSBTdGFuZGFyZEFjdGlvbktleXMuRGVsZXRlKSBhcyBTdGFuZGFyZEFjdGlvbiB8IHVuZGVmaW5lZDtcblxuXHRpZiAoXG5cdFx0dGFibGVEZWZpbml0aW9uLmFubm90YXRpb24uaXNJbnNlcnRVcGRhdGVBY3Rpb25zVGVtcGxhdGVkICYmXG5cdFx0Y3JlYXRlQWN0aW9uPy5pc1RlbXBsYXRlZCA9PT0gXCJ0cnVlXCIgJiZcblx0XHR0YWJsZURlZmluaXRpb24uY29udHJvbC5ub2RlVHlwZSA9PT0gdW5kZWZpbmVkICYmXG5cdFx0dGFibGVEZWZpbml0aW9uLmNvbnRyb2wuZW5hYmxlVXBsb2FkUGx1Z2luID09PSBmYWxzZVxuXHQpIHtcblx0XHQvLyBUaGUgc2hvcnRjdXQgaXMgbm90IGVuYWJsZWQgaW4gY2FzZSBvZiBhIGNyZWF0ZSBtZW51IChpLmUuIHdoZW4gbm9kZVR5cGUgaXMgZGVmaW5lZClcblx0XHRkZXBlbmRlbnRzLnB1c2goXG5cdFx0XHQ8Q29tbWFuZEV4ZWN1dGlvblxuXHRcdFx0XHRleGVjdXRlPXtoYW5kbGVyUHJvdmlkZXIuZ2V0Q3JlYXRlQnV0dG9uUHJlc3NIYW5kbGVyKGZhbHNlLCBmYWxzZSl9XG5cdFx0XHRcdHZpc2libGU9e2NyZWF0ZUFjdGlvbi52aXNpYmxlIGFzIHVua25vd24gYXMgYm9vbGVhbn1cblx0XHRcdFx0ZW5hYmxlZD17Y3JlYXRlQWN0aW9uLmVuYWJsZWQgYXMgdW5rbm93biBhcyBib29sZWFufVxuXHRcdFx0XHRjb21tYW5kPVwiQ3JlYXRlXCJcblx0XHRcdC8+XG5cdFx0KTtcblx0fVxuXHRpZiAoZGVsZXRlQWN0aW9uPy5pc1RlbXBsYXRlZCA9PT0gXCJ0cnVlXCIpIHtcblx0XHRkZXBlbmRlbnRzLnB1c2goXG5cdFx0XHQ8Q29tbWFuZEV4ZWN1dGlvblxuXHRcdFx0XHRleGVjdXRlPXtoYW5kbGVyUHJvdmlkZXIuZ2V0RGVsZXRlQnV0dG9uUHJlc3NIYW5kbGVyKGZhbHNlKX1cblx0XHRcdFx0dmlzaWJsZT17ZGVsZXRlQWN0aW9uLnZpc2libGUgYXMgdW5rbm93biBhcyBib29sZWFufVxuXHRcdFx0XHRlbmFibGVkPXtkZWxldGVBY3Rpb24uZW5hYmxlZCBhcyB1bmtub3duIGFzIGJvb2xlYW59XG5cdFx0XHRcdGNvbW1hbmQ9XCJEZWxldGVFbnRyeVwiXG5cdFx0XHQvPlxuXHRcdCk7XG5cdH1cblxuXHQvLyBNb3ZlIHVwIGFuZCBkb3duIGFjdGlvbnNcblx0Y29uc3QgbW92ZVVwQWN0aW9uID0gdGFibGVEZWZpbml0aW9uLmFjdGlvbnMuZmluZCgoYSkgPT4gYS5rZXkgPT09IFN0YW5kYXJkQWN0aW9uS2V5cy5Nb3ZlVXApIGFzIFN0YW5kYXJkQWN0aW9uIHwgdW5kZWZpbmVkO1xuXHRjb25zdCBtb3ZlRG93bkFjdGlvbiA9IHRhYmxlRGVmaW5pdGlvbi5hY3Rpb25zLmZpbmQoKGEpID0+IGEua2V5ID09PSBTdGFuZGFyZEFjdGlvbktleXMuTW92ZURvd24pIGFzIFN0YW5kYXJkQWN0aW9uIHwgdW5kZWZpbmVkO1xuXHRpZiAoXG5cdFx0bW92ZVVwQWN0aW9uICYmXG5cdFx0bW92ZURvd25BY3Rpb24gJiZcblx0XHRtb3ZlVXBBY3Rpb24udmlzaWJsZSAhPT0gXCJmYWxzZVwiICYmXG5cdFx0bW92ZURvd25BY3Rpb24udmlzaWJsZSAhPT0gXCJmYWxzZVwiICYmXG5cdFx0dGFibGVUeXBlID09PSBcIlRyZWVUYWJsZVwiXG5cdCkge1xuXHRcdGRlcGVuZGVudHMucHVzaChcblx0XHRcdDxDb21tYW5kRXhlY3V0aW9uXG5cdFx0XHRcdGV4ZWN1dGU9e2hhbmRsZXJQcm92aWRlci5nZXRNb3ZlVXBEb3duSGFuZGxlcih0cnVlLCBmYWxzZSl9XG5cdFx0XHRcdGNvbW1hbmQ9XCJUYWJsZU1vdmVFbGVtZW50VXBcIlxuXHRcdFx0XHRlbmFibGVkPXttb3ZlVXBBY3Rpb24uZW5hYmxlZCBhcyB1bmtub3duIGFzIGJvb2xlYW59XG5cdFx0XHQvPlxuXHRcdCk7XG5cdFx0ZGVwZW5kZW50cy5wdXNoKFxuXHRcdFx0PENvbW1hbmRFeGVjdXRpb25cblx0XHRcdFx0ZXhlY3V0ZT17aGFuZGxlclByb3ZpZGVyLmdldE1vdmVVcERvd25IYW5kbGVyKGZhbHNlLCBmYWxzZSl9XG5cdFx0XHRcdGNvbW1hbmQ9XCJUYWJsZU1vdmVFbGVtZW50RG93blwiXG5cdFx0XHRcdGVuYWJsZWQ9e21vdmVEb3duQWN0aW9uLmVuYWJsZWQgYXMgdW5rbm93biBhcyBib29sZWFufVxuXHRcdFx0Lz5cblx0XHQpO1xuXHR9XG5cblx0Zm9yIChjb25zdCBhY3Rpb25OYW1lIGluIHRhYmxlRGVmaW5pdGlvbi5jb21tYW5kQWN0aW9ucykge1xuXHRcdGNvbnN0IGFjdGlvbiA9IHRhYmxlRGVmaW5pdGlvbi5jb21tYW5kQWN0aW9uc1thY3Rpb25OYW1lXTtcblx0XHRjb25zdCBhY3Rpb25Db21tYW5kID0gZ2V0QWN0aW9uQ29tbWFuZChcblx0XHRcdGFjdGlvbk5hbWUsXG5cdFx0XHRhY3Rpb24sXG5cdFx0XHRmYWxzZSxcblx0XHRcdHBhcmFtZXRlcnMsXG5cdFx0XHRjb2xsZWN0aW9uLFxuXHRcdFx0dGFibGVEZWZpbml0aW9uLFxuXHRcdFx0dGFibGVQcm9wZXJ0aWVzLmNvbnRleHRPYmplY3RQYXRoXG5cdFx0KTtcblx0XHRpZiAoYWN0aW9uQ29tbWFuZCkge1xuXHRcdFx0ZGVwZW5kZW50cy5wdXNoKGFjdGlvbkNvbW1hbmQpO1xuXHRcdH1cblx0fVxuXG5cdGlmICh2YXJpYW50TWFuYWdlbWVudCA9PT0gXCJOb25lXCIpIHtcblx0XHQvLyBQZXJzaXN0ZW5jZSBwcm92aWRlciBvZmZlcnMgcGVyc2lzdGluZyBwZXJzb25hbGl6YXRpb24gY2hhbmdlcyB3aXRob3V0IHZhcmlhbnQgbWFuYWdlbWVudFxuXHRcdGRlcGVuZGVudHMucHVzaCg8UGVyc2lzdGVuY2VQcm92aWRlciBpZD17Z2VuZXJhdGUoW2lkLCBcIlBlcnNpc3RlbmNlUHJvdmlkZXJcIl0pfSBmb3I9e2lkfSAvPik7XG5cdH1cblxuXHRkZXBlbmRlbnRzLnB1c2goPENvbnRleHRNZW51U2V0dGluZyBzY29wZT1cIlNlbGVjdGlvblwiIC8+KTtcblxuXHRpZiAodGFibGVEZWZpbml0aW9uLmNvbnRyb2wuZW5hYmxlVXBsb2FkUGx1Z2luKSB7XG5cdFx0ZGVwZW5kZW50cy5wdXNoKGdldFVwbG9hZFBsdWdpbih0YWJsZURlZmluaXRpb24sIGlkLCBoYW5kbGVyUHJvdmlkZXIpKTtcblx0fVxuXG5cdHJldHVybiBkZXBlbmRlbnRzO1xufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIHRhYmxlIGFjdGlvbnMuXG4gKiBAcGFyYW0gdGFibGVcbiAqIEBwYXJhbSBwYXJhbWV0ZXJzXG4gKiBAcGFyYW0gY29sbGVjdGlvbkNvbnRleHRcbiAqIEBwYXJhbSBjb2xsZWN0aW9uRW50aXR5XG4gKiBAcmV0dXJucyBUaGUgbGlzdCBvZiBhY3Rpb25zXG4gKi9cbmZ1bmN0aW9uIGdldEFjdGlvbnMoXG5cdHRhYmxlOiBUYWJsZUJsb2NrUHJvcGVydGllcyxcblx0cGFyYW1ldGVyczogVGFibGVUZW1wbGF0aW5nUGFyYW1ldGVycyxcblx0Y29sbGVjdGlvbkNvbnRleHQ6IENvbnRleHQsXG5cdGNvbGxlY3Rpb25FbnRpdHk6IEVudGl0eVNldCB8IE5hdmlnYXRpb25Qcm9wZXJ0eVxuKTogQ29udHJvbFtdIHwgdW5kZWZpbmVkIHtcblx0Y29uc3QgYWN0aW9uczogQ29udHJvbFtdID0gW107XG5cdGlmICh0YWJsZS5kaXNwbGF5U2VnbWVudGVkQnV0dG9uKSB7XG5cdFx0Y29uc3QgYWxwQnV0dG9uSXRlbXM6IFNlZ21lbnRlZEJ1dHRvbkl0ZW1bXSA9IFtdO1xuXHRcdGlmIChDb21tb25IZWxwZXIuaXNEZXNrdG9wKCkpIHtcblx0XHRcdGFscEJ1dHRvbkl0ZW1zLnB1c2goXG5cdFx0XHRcdDxTZWdtZW50ZWRCdXR0b25JdGVtXG5cdFx0XHRcdFx0dG9vbHRpcD1cIntzYXAuZmUuaTE4bj5NX0NPTU1PTl9IWUJSSURfU0VHTUVOVEVEX0JVVFRPTl9JVEVNX1RPT0xUSVB9XCJcblx0XHRcdFx0XHRrZXk9XCJIeWJyaWRcIlxuXHRcdFx0XHRcdGljb249XCJzYXAtaWNvbjovL2NoYXJ0LXRhYmxlLXZpZXdcIlxuXHRcdFx0XHQvPlxuXHRcdFx0KTtcblx0XHR9XG5cdFx0YWxwQnV0dG9uSXRlbXMucHVzaChcblx0XHRcdDxTZWdtZW50ZWRCdXR0b25JdGVtXG5cdFx0XHRcdHRvb2x0aXA9XCJ7c2FwLmZlLmkxOG4+TV9DT01NT05fQ0hBUlRfU0VHTUVOVEVEX0JVVFRPTl9JVEVNX1RPT0xUSVB9XCJcblx0XHRcdFx0a2V5PVwiQ2hhcnRcIlxuXHRcdFx0XHRpY29uPVwic2FwLWljb246Ly9iYXItY2hhcnRcIlxuXHRcdFx0Lz5cblx0XHQpO1xuXHRcdGFscEJ1dHRvbkl0ZW1zLnB1c2goXG5cdFx0XHQ8U2VnbWVudGVkQnV0dG9uSXRlbVxuXHRcdFx0XHR0b29sdGlwPVwie3NhcC5mZS5pMThuPk1fQ09NTU9OX1RBQkxFX1NFR01FTlRFRF9CVVRUT05fSVRFTV9UT09MVElQfVwiXG5cdFx0XHRcdGtleT1cIlRhYmxlXCJcblx0XHRcdFx0aWNvbj1cInNhcC1pY29uOi8vdGFibGUtdmlld1wiXG5cdFx0XHQvPlxuXHRcdCk7XG5cblx0XHRhY3Rpb25zLnB1c2goXG5cdFx0XHQ8QWN0aW9uVG9vbGJhckFjdGlvblxuXHRcdFx0XHRsYXlvdXRJbmZvcm1hdGlvbj17J3sgYWdncmVnYXRpb25OYW1lOiBcImVuZFwiLCBhbGlnbm1lbnQ6IFwiRW5kXCIgfSd9XG5cdFx0XHRcdHZpc2libGU9e1wiez0gJHtwYWdlSW50ZXJuYWw+YWxwQ29udGVudFZpZXd9ID09PSAnVGFibGUnIH1cIn1cblx0XHRcdD5cblx0XHRcdFx0e3tcblx0XHRcdFx0XHRhY3Rpb246IChcblx0XHRcdFx0XHRcdDxTZWdtZW50ZWRCdXR0b25cblx0XHRcdFx0XHRcdFx0aWQ9e2dlbmVyYXRlKFt0YWJsZS5jb250ZW50SWQsIFwiU2VnbWVudGVkQnV0dG9uXCIsIFwiVGVtcGxhdGVDb250ZW50Vmlld1wiXSl9XG5cdFx0XHRcdFx0XHRcdHNlbGVjdD17cGFyYW1ldGVycy5oYW5kbGVyUHJvdmlkZXIuc2VnbWVudGVkQnV0dG9uUHJlc3N9XG5cdFx0XHRcdFx0XHRcdHNlbGVjdGVkS2V5PVwie3BhZ2VJbnRlcm5hbD5hbHBDb250ZW50Vmlld31cIlxuXHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHR7e1xuXHRcdFx0XHRcdFx0XHRcdGl0ZW1zOiBhbHBCdXR0b25JdGVtc1xuXHRcdFx0XHRcdFx0XHR9fVxuXHRcdFx0XHRcdFx0PC9TZWdtZW50ZWRCdXR0b24+XG5cdFx0XHRcdFx0KVxuXHRcdFx0XHR9fVxuXHRcdFx0PC9BY3Rpb25Ub29sYmFyQWN0aW9uPlxuXHRcdCk7XG5cdH1cblxuXHRhY3Rpb25zLnB1c2goLi4uZ2V0VGFibGVBY3Rpb25zVGVtcGxhdGUodGFibGUsIHBhcmFtZXRlcnMsIGNvbGxlY3Rpb25Db250ZXh0LCBjb2xsZWN0aW9uRW50aXR5KSk7XG5cblx0cmV0dXJuIGFjdGlvbnMubGVuZ3RoID4gMCA/IGFjdGlvbnMgOiB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRSb3dTZXR0aW5ncyhcblx0dGFibGVEZWZpbml0aW9uOiBUYWJsZVZpc3VhbGl6YXRpb24sXG5cdHJvd0FjdGlvblR5cGU6IFRhYmxlUm93QWN0aW9uVHlwZSB8IHVuZGVmaW5lZCxcblx0dGFibGVUeXBlOiBUYWJsZVR5cGUsXG5cdGhhbmRsZXJQcm92aWRlcjogVGFibGVFdmVudEhhbmRsZXJQcm92aWRlclxuKTogUm93U2V0dGluZ3Mge1xuXHRjb25zdCByb3dBY3Rpb25JdGVtID0gKFxuXHRcdDxSb3dBY3Rpb25JdGVtXG5cdFx0XHR0eXBlPXtyb3dBY3Rpb25UeXBlfVxuXHRcdFx0cHJlc3M9e3RhYmxlVHlwZSA9PT0gXCJSZXNwb25zaXZlVGFibGVcIiA/IHVuZGVmaW5lZCA6IGhhbmRsZXJQcm92aWRlci5yb3dQcmVzc31cblx0XHRcdHZpc2libGU9e3RhYmxlRGVmaW5pdGlvbi5hbm5vdGF0aW9uLnJvdz8udmlzaWJsZX1cblx0XHQvPlxuXHQpO1xuXG5cdHJldHVybiAoXG5cdFx0PFJvd1NldHRpbmdzXG5cdFx0XHRuYXZpZ2F0ZWQ9e3RhYmxlRGVmaW5pdGlvbi5hbm5vdGF0aW9uLnJvdz8ucm93TmF2aWdhdGVkfVxuXHRcdFx0aGlnaGxpZ2h0PXt0YWJsZURlZmluaXRpb24uYW5ub3RhdGlvbi5yb3c/LnJvd0hpZ2hsaWdodGluZ31cblx0XHRcdGhpZ2hsaWdodFRleHQ9e3RhYmxlRGVmaW5pdGlvbi5hbm5vdGF0aW9uLnJvdz8ucm93SGlnaGxpZ2h0aW5nfVxuXHRcdD5cblx0XHRcdHt7XG5cdFx0XHRcdHJvd0FjdGlvbnM6IHJvd0FjdGlvblR5cGUgPT09IFRhYmxlUm93QWN0aW9uVHlwZS5OYXZpZ2F0aW9uID8gcm93QWN0aW9uSXRlbSA6IHVuZGVmaW5lZFxuXHRcdFx0fX1cblx0XHQ8L1Jvd1NldHRpbmdzPlxuXHQpO1xufVxuXG4vKipcbiAqIEdlbmVyYXRlcyB0aGUgY29udGV4dCBtZW51IGZvciB0aGUgdGFibGUuXG4gKiBAcGFyYW0gdGFibGVQcm9wZXJ0aWVzXG4gKiBAcGFyYW0gcGFyYW1ldGVyc1xuICogQHBhcmFtIGNvbGxlY3Rpb25FbnRpdHlcbiAqIEBwYXJhbSByb3dBY3Rpb25UeXBlXG4gKiBAcGFyYW0gY29sbGVjdGlvblxuICogQHBhcmFtIG5hdmlnYXRpb25JbkVkaXRNb2RlXG4gKiBAcmV0dXJucyBUaGUgY29udGV4dCBtZW51XG4gKi9cbmZ1bmN0aW9uIGdldENvbnRleHRNZW51KFxuXHR0YWJsZVByb3BlcnRpZXM6IFRhYmxlQmxvY2tQcm9wZXJ0aWVzLFxuXHRwYXJhbWV0ZXJzOiBUYWJsZVRlbXBsYXRpbmdQYXJhbWV0ZXJzLFxuXHRjb2xsZWN0aW9uRW50aXR5OiBFbnRpdHlTZXQgfCBOYXZpZ2F0aW9uUHJvcGVydHksXG5cdHJvd0FjdGlvblR5cGU6IFRhYmxlUm93QWN0aW9uVHlwZSB8IHVuZGVmaW5lZCxcblx0Y29sbGVjdGlvbjogQ29udGV4dCxcblx0bmF2aWdhdGlvbkluRWRpdE1vZGU6IGJvb2xlYW5cbik6IE1lbnUgfCB1bmRlZmluZWQge1xuXHRjb25zdCBtZW51SXRlbXMgPSBnZXRUYWJsZUNvbnRleHRNZW51VGVtcGxhdGUodGFibGVQcm9wZXJ0aWVzLCBwYXJhbWV0ZXJzLCBjb2xsZWN0aW9uLCBjb2xsZWN0aW9uRW50aXR5KTtcblx0aWYgKHJvd0FjdGlvblR5cGUgPT09IFRhYmxlUm93QWN0aW9uVHlwZS5OYXZpZ2F0aW9uICYmICFuYXZpZ2F0aW9uSW5FZGl0TW9kZSkge1xuXHRcdG1lbnVJdGVtcy5wdXNoKGdldFNoYXJldG9Db2xsYWJvcmF0aW9uTWFuYWdlclRlbXBsYXRlKHBhcmFtZXRlcnMuaGFuZGxlclByb3ZpZGVyLCB0YWJsZVByb3BlcnRpZXMuY29udGVudElkKSk7XG5cdFx0bWVudUl0ZW1zLnB1c2goZ2V0T3BlbkluTmV3VGFiVGVtcGxhdGUocGFyYW1ldGVycy5oYW5kbGVyUHJvdmlkZXIpKTtcblx0fVxuXHRpZiAobWVudUl0ZW1zLmxlbmd0aCA+IDApIHtcblx0XHRyZXR1cm4gKFxuXHRcdFx0PE1lbnUgaXRlbVNlbGVjdGVkPXtwYXJhbWV0ZXJzLmhhbmRsZXJQcm92aWRlci5jb250ZXh0TWVudUl0ZW1TZWxlY3RlZH0+XG5cdFx0XHRcdHt7XG5cdFx0XHRcdFx0ZGVwZW5kZW50czogZ2V0RGVwZW5kZW50c0ZvckNvbnRleHRNZW51KFxuXHRcdFx0XHRcdFx0dGFibGVQcm9wZXJ0aWVzLnRhYmxlRGVmaW5pdGlvbixcblx0XHRcdFx0XHRcdHBhcmFtZXRlcnMsXG5cdFx0XHRcdFx0XHR0YWJsZVByb3BlcnRpZXMuY29udGV4dE9iamVjdFBhdGgsXG5cdFx0XHRcdFx0XHRjb2xsZWN0aW9uXG5cdFx0XHRcdFx0KSxcblx0XHRcdFx0XHRpdGVtczogbWVudUl0ZW1zXG5cdFx0XHRcdH19XG5cdFx0XHQ8L01lbnU+XG5cdFx0KTtcblx0fVxuXHRyZXR1cm4gdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIEdlbmVyYXRlcyB0aGUgdGVtcGxhdGUgc3RyaW5nIGZvciB0aGUgTWVudUl0ZW0uXG4gKiBAcGFyYW0gaGFuZGxlclByb3ZpZGVyXG4gKiBAcGFyYW0gdGFibGVJZFxuICogQHJldHVybnMgVGhlIHhtbCBzdHJpbmcgcmVwcmVzZW50YXRpb24gZm9yIHRoZSBNZW51SXRlbVxuICovXG5mdW5jdGlvbiBnZXRTaGFyZXRvQ29sbGFib3JhdGlvbk1hbmFnZXJUZW1wbGF0ZShoYW5kbGVyUHJvdmlkZXI6IFRhYmxlRXZlbnRIYW5kbGVyUHJvdmlkZXIsIHRhYmxlSWQ6IHN0cmluZyk6IE1lbnVJdGVtIHtcblx0Ly8gVGhlIHZpc2libGUgcHJvcGVydHkgd2lsbCBiZSBzZXQgYXQgcnVudGltZSB3aGVuIHRoZSBjb2xsYWJvcmF0aW9uIG1hbmFnZXIgaXMgYXZhaWxhYmxlIGFuZCBhbGwgb3RoZXIgY29uZGl0aW9ucyBhcmUgbWV0XG5cdHJldHVybiAoXG5cdFx0PE1lbnVJdGVtXG5cdFx0XHRjb3JlOnJlcXVpcmU9XCJ7QVBJOiAnc2FwL2ZlL21hY3Jvcy90YWJsZS9UYWJsZUFQSSd9XCJcblx0XHRcdHN0YXJ0c1NlY3Rpb249e3RydWV9XG5cdFx0XHRpZD17Z2VuZXJhdGUoW3RhYmxlSWQsIFwiQ29udGV4dE1lbnVcIiwgXCJDb2xsYWJvcmF0aW9uTWFuYWdlclwiXSl9XG5cdFx0XHR0ZXh0PVwie3NhcC5mZS5pMThuPk1fQ09NTU9OX1RBQkxFX0NPTlRFWFRfTUVOVV9TSEFSRV9UT19DT0xMQUJPUkFUSU9OX01BTkFHRVJ9XCJcblx0XHRcdHByZXNzPXtoYW5kbGVyUHJvdmlkZXIuY29udGV4dE1lbnVTaGFyZVRvQ29sbGFib3JhdGlvbk1hbmFnZXJ9XG5cdFx0XHRlbmFibGVkPVwiez0gJHtpbnRlcm5hbD5jb250ZXh0bWVudS9udW1iZXJPZlNlbGVjdGVkQ29udGV4dHN9ID4gMH1cIlxuXHRcdFx0dmlzaWJsZT17ZmFsc2V9XG5cdFx0Lz5cblx0KTtcbn1cblxuLyoqXG4gKiBHZW5lcmF0ZXMgdGhlIHRlbXBsYXRlIHN0cmluZyBmb3IgdGhlIE1lbnVJdGVtLlxuICogQHBhcmFtIGhhbmRsZXJQcm92aWRlclxuICogQHJldHVybnMgVGhlIHhtbCBzdHJpbmcgcmVwcmVzZW50YXRpb24gZm9yIHRoZSBNZW51SXRlbVxuICovXG5mdW5jdGlvbiBnZXRPcGVuSW5OZXdUYWJUZW1wbGF0ZShoYW5kbGVyUHJvdmlkZXI6IFRhYmxlRXZlbnRIYW5kbGVyUHJvdmlkZXIpOiBNZW51SXRlbSB7XG5cdC8vIFRoZSAnT3BlbiBpbiBOZXcgVGFiJyBhY3Rpb24gc2hvdWxkIG5vdCBiZSB2aXNpYmxlIGZvciBzdGlja3kgc2Vzc2lvbnMgaW4gZWRpdCBtb2RlXG5cdC8vIEZvciB0aGUgY29udGV4dCBtZW51LCB0aGUgdmlzaWJpbGl0eSBzaG91bGQgYWxzbyBjb25zaWRlciB0aGUgJ2luYWN0aXZlQ29udGV4dCcgcHJvcGVydHk6XG5cdC8vIG9ubHkgd2hlbiBhdCBsZWFzdCBvbmUgc2VsZWN0ZWQgY29udGV4dCBpcyBhY3RpdmUgKGkuZS4gXCJjb250ZXh0bWVudS9pbmFjdGl2ZUNvbnRleHRcIiBpcyBmYWxzZSksIHRoZSBhY3Rpb24gc2hvdWxkIGJlIHZpc2libGUgaW4gdGhlIGNvbnRleHQgbWVudVxuXHQvLyBUaGUgc2Vjb25kIGlzIG9ubHkgcmVsZXZhbnQgd2hlbiB0aGUgdGFibGUgbWFuaWZlc3Qgc2V0dGluZyBcImNyZWF0aW9uTW9kZVwiIGlzIFwiSW5saW5lQ3JlYXRpb25Sb3dzXCJcblx0Y29uc3QgdmlzaWJsZSA9IGFuZChcblx0XHRub3QoYW5kKHBhdGhJbk1vZGVsKFwiL3Nlc3Npb25PblwiLCBcImludGVybmFsXCIpLCBVSS5Jc0VkaXRhYmxlKSksXG5cdFx0bm90KHBhdGhJbk1vZGVsKFwiY29udGV4dG1lbnUvaW5hY3RpdmVDb250ZXh0XCIsIFwiaW50ZXJuYWxcIikpXG5cdCk7XG5cblx0cmV0dXJuIChcblx0XHQ8TWVudUl0ZW1cblx0XHRcdGNvcmU6cmVxdWlyZT1cIntBUEk6ICdzYXAvZmUvbWFjcm9zL3RhYmxlL1RhYmxlQVBJJ31cIlxuXHRcdFx0c3RhcnRzU2VjdGlvbj17dHJ1ZX1cblx0XHRcdHRleHQ9XCJ7c2FwLmZlLmkxOG4+TV9DT01NT05fVEFCTEVfQ09OVEVYVF9NRU5VX09QRU5fSU5fTkVXX1RBQn1cIlxuXHRcdFx0cHJlc3M9e2hhbmRsZXJQcm92aWRlci5jb250ZXh0TWVudU9wZW5Jbk5ld1RhYn1cblx0XHRcdGVuYWJsZWQ9XCJ7PSAke2ludGVybmFsPmNvbnRleHRtZW51L251bWJlck9mU2VsZWN0ZWRDb250ZXh0c30gPiAwfVwiXG5cdFx0XHR2aXNpYmxlPXt2aXNpYmxlfVxuXHRcdC8+XG5cdCk7XG59XG5cbi8qKlxuICogR2VuZXJhdGVzIHRoZSB0ZW1wbGF0ZSBzdHJpbmcgZm9yIHRoZSBNZW51IGRlcGVuZGVudHMuXG4gKiBAcGFyYW0gdGFibGVEZWZpbml0aW9uXG4gKiBAcGFyYW0gcGFyYW1ldGVyc1xuICogQHBhcmFtIGNvbnRleHRPYmplY3RQYXRoXG4gKiBAcGFyYW0gY29sbGVjdGlvblxuICogQHJldHVybnMgVGhlIHhtbCBzdHJpbmcgcmVwcmVzZW50YXRpb24gIHRoZSBNZW51IGRlcGVuZGVudHNcbiAqL1xuZnVuY3Rpb24gZ2V0RGVwZW5kZW50c0ZvckNvbnRleHRNZW51KFxuXHR0YWJsZURlZmluaXRpb246IFRhYmxlVmlzdWFsaXphdGlvbixcblx0cGFyYW1ldGVyczogVGFibGVUZW1wbGF0aW5nUGFyYW1ldGVycyxcblx0Y29udGV4dE9iamVjdFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8TGluZUl0ZW0gfCBTZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50IHwgUHJlc2VudGF0aW9uVmFyaWFudD4sXG5cdGNvbGxlY3Rpb246IENvbnRleHRcbik6IFVJNUVsZW1lbnRbXSB8IHVuZGVmaW5lZCB7XG5cdGNvbnN0IGRlcGVuZGVudHM6IFVJNUVsZW1lbnRbXSA9IFtdO1xuXHRjb25zdCB0YWJsZVR5cGUgPSB0YWJsZURlZmluaXRpb24uY29udHJvbC50eXBlO1xuXHRjb25zdCBjcmVhdGVBY3Rpb24gPSB0YWJsZURlZmluaXRpb24uYWN0aW9ucy5maW5kKChhKSA9PiBhLmtleSA9PT0gU3RhbmRhcmRBY3Rpb25LZXlzLkNyZWF0ZSkgYXMgU3RhbmRhcmRBY3Rpb24gfCB1bmRlZmluZWQ7XG5cdGlmIChjcmVhdGVBY3Rpb24/LmlzVGVtcGxhdGVkID09PSBcInRydWVcIiAmJiB0YWJsZVR5cGUgPT09IFwiVHJlZVRhYmxlXCIpIHtcblx0XHRkZXBlbmRlbnRzLnB1c2goXG5cdFx0XHQ8Q29tbWFuZEV4ZWN1dGlvblxuXHRcdFx0XHRleGVjdXRlPXtwYXJhbWV0ZXJzLmhhbmRsZXJQcm92aWRlci5nZXRDcmVhdGVCdXR0b25QcmVzc0hhbmRsZXIodHJ1ZSwgZmFsc2UpfVxuXHRcdFx0XHRjb21tYW5kPVwiQ3JlYXRlOjpDb250ZXh0TWVudVwiXG5cdFx0XHRcdHZpc2libGU9e2NyZWF0ZUFjdGlvbi52aXNpYmxlIGFzIHVua25vd24gYXMgYm9vbGVhbn1cblx0XHRcdFx0ZW5hYmxlZD17Y3JlYXRlQWN0aW9uLmVuYWJsZWRGb3JDb250ZXh0TWVudSBhcyB1bmtub3duIGFzIGJvb2xlYW59XG5cdFx0XHQvPlxuXHRcdCk7XG5cdH1cblxuXHRjb25zdCBjdXRBY3Rpb24gPSB0YWJsZURlZmluaXRpb24uYWN0aW9ucy5maW5kKChhKSA9PiBhLmtleSA9PT0gU3RhbmRhcmRBY3Rpb25LZXlzLkN1dCkgYXMgU3RhbmRhcmRBY3Rpb24gfCB1bmRlZmluZWQ7XG5cdGlmIChjdXRBY3Rpb24/LmlzVGVtcGxhdGVkID09PSBcInRydWVcIikge1xuXHRcdGRlcGVuZGVudHMucHVzaChcblx0XHRcdDxDb21tYW5kRXhlY3V0aW9uXG5cdFx0XHRcdGV4ZWN1dGU9e3BhcmFtZXRlcnMuaGFuZGxlclByb3ZpZGVyLmdldEN1dEhhbmRsZXIodHJ1ZSl9XG5cdFx0XHRcdGNvbW1hbmQ9XCJDdXQ6OkNvbnRleHRNZW51XCJcblx0XHRcdFx0ZW5hYmxlZD17Y3V0QWN0aW9uLmVuYWJsZWRGb3JDb250ZXh0TWVudSBhcyB1bmtub3duIGFzIGJvb2xlYW59XG5cdFx0XHQvPlxuXHRcdCk7XG5cdH1cblx0Y29uc3QgY29weUFjdGlvbiA9IHRhYmxlRGVmaW5pdGlvbi5hY3Rpb25zLmZpbmQoKGEpID0+IGEua2V5ID09PSBTdGFuZGFyZEFjdGlvbktleXMuQ29weSkgYXMgU3RhbmRhcmRBY3Rpb24gfCB1bmRlZmluZWQ7XG5cdGlmIChjb3B5QWN0aW9uPy5pc1RlbXBsYXRlZCA9PT0gXCJ0cnVlXCIpIHtcblx0XHRkZXBlbmRlbnRzLnB1c2goXG5cdFx0XHQ8Q29tbWFuZEV4ZWN1dGlvblxuXHRcdFx0XHRleGVjdXRlPXtwYXJhbWV0ZXJzLmhhbmRsZXJQcm92aWRlci5nZXRDb3B5SGFuZGxlcih0cnVlKX1cblx0XHRcdFx0Y29tbWFuZD1cIkNvcHk6OkNvbnRleHRNZW51XCJcblx0XHRcdFx0ZW5hYmxlZD17Y29weUFjdGlvbi5lbmFibGVkRm9yQ29udGV4dE1lbnUgYXMgdW5rbm93biBhcyBib29sZWFufVxuXHRcdFx0Lz5cblx0XHQpO1xuXHR9XG5cdGNvbnN0IHBhc3RlQWN0aW9uID0gdGFibGVEZWZpbml0aW9uLmFjdGlvbnMuZmluZCgoYSkgPT4gYS5rZXkgPT09IFN0YW5kYXJkQWN0aW9uS2V5cy5QYXN0ZSkgYXMgU3RhbmRhcmRBY3Rpb24gfCB1bmRlZmluZWQ7XG5cdGlmIChwYXN0ZUFjdGlvbj8udmlzaWJsZSAhPT0gXCJmYWxzZVwiICYmIHRhYmxlVHlwZSA9PT0gXCJUcmVlVGFibGVcIikge1xuXHRcdGRlcGVuZGVudHMucHVzaChcblx0XHRcdDxDb21tYW5kRXhlY3V0aW9uXG5cdFx0XHRcdGV4ZWN1dGU9e3BhcmFtZXRlcnMuaGFuZGxlclByb3ZpZGVyLmdldFBhc3RlSGFuZGxlcih0cnVlKX1cblx0XHRcdFx0Y29tbWFuZD1cIlBhc3RlOjpDb250ZXh0TWVudVwiXG5cdFx0XHRcdGVuYWJsZWQ9e3Bhc3RlQWN0aW9uPy5lbmFibGVkRm9yQ29udGV4dE1lbnUgYXMgdW5rbm93biBhcyBib29sZWFufVxuXHRcdFx0Lz5cblx0XHQpO1xuXHR9XG5cblx0Y29uc3QgZGVsZXRlQWN0aW9uID0gdGFibGVEZWZpbml0aW9uLmFjdGlvbnMuZmluZCgoYSkgPT4gYS5rZXkgPT09IFN0YW5kYXJkQWN0aW9uS2V5cy5EZWxldGUpIGFzIFN0YW5kYXJkQWN0aW9uIHwgdW5kZWZpbmVkO1xuXG5cdGlmIChkZWxldGVBY3Rpb24/LmlzVGVtcGxhdGVkID09PSBcInRydWVcIikge1xuXHRcdGRlcGVuZGVudHMucHVzaChcblx0XHRcdDxDb21tYW5kRXhlY3V0aW9uXG5cdFx0XHRcdGV4ZWN1dGU9e3BhcmFtZXRlcnMuaGFuZGxlclByb3ZpZGVyLmdldERlbGV0ZUJ1dHRvblByZXNzSGFuZGxlcih0cnVlKX1cblx0XHRcdFx0dmlzaWJsZT17ZGVsZXRlQWN0aW9uLnZpc2libGUgYXMgdW5rbm93biBhcyBib29sZWFufVxuXHRcdFx0XHRlbmFibGVkPXtkZWxldGVBY3Rpb24uZW5hYmxlZEZvckNvbnRleHRNZW51IGFzIHVua25vd24gYXMgYm9vbGVhbn1cblx0XHRcdFx0Y29tbWFuZD1cIkRlbGV0ZUVudHJ5OjpDb250ZXh0TWVudVwiXG5cdFx0XHQvPlxuXHRcdCk7XG5cdH1cblxuXHQvLyBNb3ZlIHVwIGFuZCBkb3duIGFjdGlvbnNcblx0Y29uc3QgbW92ZVVwQWN0aW9uID0gdGFibGVEZWZpbml0aW9uLmFjdGlvbnMuZmluZCgoYSkgPT4gYS5rZXkgPT09IFN0YW5kYXJkQWN0aW9uS2V5cy5Nb3ZlVXApIGFzIFN0YW5kYXJkQWN0aW9uIHwgdW5kZWZpbmVkO1xuXHRjb25zdCBtb3ZlRG93bkFjdGlvbiA9IHRhYmxlRGVmaW5pdGlvbi5hY3Rpb25zLmZpbmQoKGEpID0+IGEua2V5ID09PSBTdGFuZGFyZEFjdGlvbktleXMuTW92ZURvd24pIGFzIFN0YW5kYXJkQWN0aW9uIHwgdW5kZWZpbmVkO1xuXHRpZiAoXG5cdFx0bW92ZVVwQWN0aW9uICYmXG5cdFx0bW92ZURvd25BY3Rpb24gJiZcblx0XHRtb3ZlVXBBY3Rpb24udmlzaWJsZSAhPT0gXCJmYWxzZVwiICYmXG5cdFx0bW92ZURvd25BY3Rpb24udmlzaWJsZSAhPT0gXCJmYWxzZVwiICYmXG5cdFx0dGFibGVUeXBlID09PSBcIlRyZWVUYWJsZVwiXG5cdCkge1xuXHRcdGRlcGVuZGVudHMucHVzaChcblx0XHRcdDxDb21tYW5kRXhlY3V0aW9uXG5cdFx0XHRcdGV4ZWN1dGU9e3BhcmFtZXRlcnMuaGFuZGxlclByb3ZpZGVyLmdldE1vdmVVcERvd25IYW5kbGVyKHRydWUsIHRydWUpfVxuXHRcdFx0XHRjb21tYW5kPVwiVGFibGVNb3ZlRWxlbWVudFVwOjpDb250ZXh0TWVudVwiXG5cdFx0XHRcdGVuYWJsZWQ9e21vdmVVcEFjdGlvbi5lbmFibGVkRm9yQ29udGV4dE1lbnUgYXMgdW5rbm93biBhcyBib29sZWFufVxuXHRcdFx0Lz5cblx0XHQpO1xuXHRcdGRlcGVuZGVudHMucHVzaChcblx0XHRcdDxDb21tYW5kRXhlY3V0aW9uXG5cdFx0XHRcdGV4ZWN1dGU9e3BhcmFtZXRlcnMuaGFuZGxlclByb3ZpZGVyLmdldE1vdmVVcERvd25IYW5kbGVyKGZhbHNlLCB0cnVlKX1cblx0XHRcdFx0Y29tbWFuZD1cIlRhYmxlTW92ZUVsZW1lbnREb3duOjpDb250ZXh0TWVudVwiXG5cdFx0XHRcdGVuYWJsZWQ9e21vdmVEb3duQWN0aW9uLmVuYWJsZWRGb3JDb250ZXh0TWVudSBhcyB1bmtub3duIGFzIGJvb2xlYW59XG5cdFx0XHQvPlxuXHRcdCk7XG5cdH1cblxuXHRmb3IgKGNvbnN0IGFjdGlvbk5hbWUgaW4gdGFibGVEZWZpbml0aW9uLmNvbW1hbmRBY3Rpb25zKSB7XG5cdFx0Y29uc3QgYWN0aW9uID0gdGFibGVEZWZpbml0aW9uLmNvbW1hbmRBY3Rpb25zW2FjdGlvbk5hbWVdO1xuXHRcdGNvbnN0IGFjdGlvbkNvbW1hbmQgPSBnZXRBY3Rpb25Db21tYW5kKGFjdGlvbk5hbWUsIGFjdGlvbiwgdHJ1ZSwgcGFyYW1ldGVycywgY29sbGVjdGlvbiwgdGFibGVEZWZpbml0aW9uLCBjb250ZXh0T2JqZWN0UGF0aCk7XG5cdFx0aWYgKGFjdGlvbkNvbW1hbmQpIHtcblx0XHRcdGRlcGVuZGVudHMucHVzaChhY3Rpb25Db21tYW5kKTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIGRlcGVuZGVudHMubGVuZ3RoID4gMCA/IGRlcGVuZGVudHMgOiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogR2VuZXJhdGVzIHRoZSBWYXJpYW50TWFuYWdlbWVudCBmb3IgdGhlIHRhYmxlLlxuICogQHBhcmFtIHZhcmlhbnRNYW5hZ2VtZW50XG4gKiBAcGFyYW0gaWRcbiAqIEBwYXJhbSBoZWFkZXJMZXZlbFxuICogQHBhcmFtIGhhbmRsZXJQcm92aWRlclxuICogQHJldHVybnMgVGhlIFZhcmlhbnRNYW5hZ2VtZW50IGNvbnRyb2xcbiAqL1xuZnVuY3Rpb24gZ2V0VmFyaWFudE1hbmFnZW1lbnQoXG5cdHZhcmlhbnRNYW5hZ2VtZW50OiBzdHJpbmcsXG5cdGlkOiBzdHJpbmcsXG5cdGhlYWRlckxldmVsOiBUaXRsZUxldmVsLFxuXHRoYW5kbGVyUHJvdmlkZXI6IFRhYmxlRXZlbnRIYW5kbGVyUHJvdmlkZXJcbik6IFZhcmlhbnRNYW5hZ2VtZW50IHwgdW5kZWZpbmVkIHtcblx0aWYgKHZhcmlhbnRNYW5hZ2VtZW50ID09PSBcIkNvbnRyb2xcIikge1xuXHRcdHJldHVybiAoXG5cdFx0XHQ8VmFyaWFudE1hbmFnZW1lbnRcblx0XHRcdFx0aWQ9e2dlbmVyYXRlKFtpZCwgXCJWTVwiXSl9XG5cdFx0XHRcdHNob3dTZXRBc0RlZmF1bHQ9e3RydWV9XG5cdFx0XHRcdHNlbGVjdD17aGFuZGxlclByb3ZpZGVyLnZhcmlhbnRTZWxlY3RlZH1cblx0XHRcdFx0aGVhZGVyTGV2ZWw9e2hlYWRlckxldmVsfVxuXHRcdFx0XHRzYXZlPXtoYW5kbGVyUHJvdmlkZXIudmFyaWFudFNhdmVkfVxuXHRcdFx0XHRmb3I9e1tpZF19XG5cdFx0XHQ+PC9WYXJpYW50TWFuYWdlbWVudD5cblx0XHQpO1xuXHR9XG5cdHJldHVybiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogR2VuZXJhdGVzIHRoZSBRdWlja1ZhcmlhbnRTZWxlY3Rpb24gY29udHJvbCBmb3IgdGhlIHRhYmxlLlxuICogQHBhcmFtIHRhYmxlUHJvcGVydGllcyBUaGUgdGFibGUgcHJvcGVydGllc1xuICogQHJldHVybnMgVGhlIFF1aWNrVmFyaWFudFNlbGVjdGlvbiBjb250cm9sXG4gKi9cbmZ1bmN0aW9uIGdldFF1aWNrRmlsdGVyKHRhYmxlUHJvcGVydGllczogVGFibGVCbG9ja1Byb3BlcnRpZXMpOiBRdWlja0ZpbHRlclNlbGVjdG9yIHwgdW5kZWZpbmVkIHtcblx0Y29uc3QgcXVpY2tGaWx0ZXJzID0gdGFibGVQcm9wZXJ0aWVzLnRhYmxlRGVmaW5pdGlvbi5jb250cm9sLmZpbHRlcnM/LnF1aWNrRmlsdGVycztcblx0aWYgKHF1aWNrRmlsdGVycykge1xuXHRcdHJldHVybiAoXG5cdFx0XHQ8UXVpY2tGaWx0ZXJTZWxlY3RvclxuXHRcdFx0XHRpZD17Z2VuZXJhdGUoW3RhYmxlUHJvcGVydGllcy5jb250ZW50SWQsIFwiUXVpY2tGaWx0ZXJDb250YWluZXJcIl0pfVxuXHRcdFx0XHRwYXRocz17cXVpY2tGaWx0ZXJzLnBhdGhzLm1hcCgocGF0aCkgPT4gcGF0aC5hbm5vdGF0aW9uUGF0aCl9XG5cdFx0XHRcdHNob3dDb3VudHM9e3F1aWNrRmlsdGVycy5zaG93Q291bnRzfVxuXHRcdFx0Lz5cblx0XHQpO1xuXHR9XG5cdHJldHVybiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogR2VuZXJhdGVzIENvcHlQcm92aWRlciBmb3IgdGhlIHRhYmxlLlxuICogQHBhcmFtIHRhYmxlUHJvcGVydGllc1xuICogQHJldHVybnMgVGhlIENvcHlQcm92aWRlclxuICovXG5mdW5jdGlvbiBnZXRDb3B5UHJvdmlkZXIodGFibGVQcm9wZXJ0aWVzOiBUYWJsZUJsb2NrUHJvcGVydGllcyk6IENvcHlQcm92aWRlciB7XG5cdGNvbnN0IGNvbnRleHRPYmplY3RQYXRoID0gdGFibGVQcm9wZXJ0aWVzLmNvbnRleHRPYmplY3RQYXRoO1xuXG5cdGxldCB2aXNpYmxlRXhwcmVzc2lvbjogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+O1xuXHRpZiAodGFibGVQcm9wZXJ0aWVzLnRhYmxlRGVmaW5pdGlvbi5jb250cm9sLmRpc2FibGVDb3B5VG9DbGlwYm9hcmQpIHtcblx0XHR2aXNpYmxlRXhwcmVzc2lvbiA9IGNvbnN0YW50KGZhbHNlKTtcblx0fSBlbHNlIGlmICh0YWJsZVByb3BlcnRpZXMudGFibGVEZWZpbml0aW9uLmNvbnRyb2wudHlwZSA9PT0gXCJUcmVlVGFibGVcIikge1xuXHRcdC8vIEZvciBhIFRyZWVUYWJsZSwgdGhlIGNvcHkgYnV0dG9uIHNoYWxsIGJlIHZpc2libGUgb25seSB3aGVuIGRyYWcgYW5kIGRyb3AgaXMgZGlzYWJsZWRcblx0XHRpZiAoY29udGV4dE9iamVjdFBhdGguc3RhcnRpbmdFbnRpdHlTZXQgPT09IGNvbnRleHRPYmplY3RQYXRoLnRhcmdldEVudGl0eVNldCkge1xuXHRcdFx0Ly8gTGlzdFJlcG9ydDogZW5hYmxlIGNvcHkgaWYgdGhlIGVudGl0eSBpcyBub3QgZHJhZnQtZW5hYmxlZFxuXHRcdFx0dmlzaWJsZUV4cHJlc3Npb24gPSBjb25zdGFudCgoY29udGV4dE9iamVjdFBhdGguc3RhcnRpbmdFbnRpdHlTZXQgYXMgRW50aXR5U2V0KS5hbm5vdGF0aW9ucy5Db21tb24/LkRyYWZ0Um9vdCA9PT0gdW5kZWZpbmVkKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gT2JqZWN0UGFnZTogZW5hYmxlIGNvcHkgaW4gcmVhZC1vbmx5XG5cdFx0XHR2aXNpYmxlRXhwcmVzc2lvbiA9IG5vdChVSS5Jc0VkaXRhYmxlKTtcblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0dmlzaWJsZUV4cHJlc3Npb24gPSBjb25zdGFudCh0cnVlKTtcblx0fVxuXG5cdHJldHVybiA8Q29weVByb3ZpZGVyIHZpc2libGU9e3Zpc2libGVFeHByZXNzaW9ufSAvPjtcbn1cblxuLyoqXG4gKiBHZW5lcmF0ZXMgdGhlIENlbGxTZWxlY3RvciBmb3IgdGhlIHRhYmxlLlxuICogQHBhcmFtIHRhYmxlUHJvcGVydGllc1xuICogQHJldHVybnMgVGhlIENlbGxTZWxlY3RvclxuICovXG5mdW5jdGlvbiBnZXRDZWxsU2VsZWN0b3IodGFibGVQcm9wZXJ0aWVzOiBUYWJsZUJsb2NrUHJvcGVydGllcyk6IENlbGxTZWxlY3RvciB8IHVuZGVmaW5lZCB7XG5cdGNvbnN0IHRhYmxlVHlwZSA9IHRhYmxlUHJvcGVydGllcy50YWJsZURlZmluaXRpb24uY29udHJvbC50eXBlO1xuXHRpZiAoXG5cdFx0IXRhYmxlUHJvcGVydGllcy50YWJsZURlZmluaXRpb24uY29udHJvbC5kaXNhYmxlQ29weVRvQ2xpcGJvYXJkICYmXG5cdFx0dGFibGVUeXBlICYmXG5cdFx0W1wiUmVzcG9uc2l2ZVRhYmxlXCIsIFwiR3JpZFRhYmxlXCIsIFwiVHJlZVRhYmxlXCJdLmluY2x1ZGVzKHRhYmxlVHlwZSlcblx0KSB7XG5cdFx0cmV0dXJuIChcblx0XHRcdDxDZWxsU2VsZWN0b3Jcblx0XHRcdFx0ZW5hYmxlZD17b3IoXG5cdFx0XHRcdFx0dGFibGVUeXBlICE9PSBcIlRyZWVUYWJsZVwiLFxuXHRcdFx0XHRcdG5vdChnZXREcmFnQW5kRHJvcEVuYWJsZWQodGFibGVQcm9wZXJ0aWVzLmNvbnRleHRPYmplY3RQYXRoLCB0YWJsZVByb3BlcnRpZXMudGFibGVEZWZpbml0aW9uKSlcblx0XHRcdFx0KX1cblx0XHRcdFx0cmFuZ2VMaW1pdD17MjAwfVxuXHRcdFx0Lz5cblx0XHQpO1xuXHR9XG5cdHJldHVybiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogR2VuZXJhdGVzIHRoZSBDcmVhdGlvblJvdyBmb3IgdGhlIHRhYmxlLlxuICogQHBhcmFtIHRhYmxlUHJvcGVydGllc1xuICogQHBhcmFtIGhhbmRsZXJQcm92aWRlclxuICogQHJldHVybnMgVGhlIENyZWF0aW9uUm93XG4gKi9cbmZ1bmN0aW9uIGdldENyZWF0aW9uUm93KHRhYmxlUHJvcGVydGllczogVGFibGVCbG9ja1Byb3BlcnRpZXMsIGhhbmRsZXJQcm92aWRlcjogVGFibGVFdmVudEhhbmRsZXJQcm92aWRlcik6IENyZWF0aW9uUm93IHwgdW5kZWZpbmVkIHtcblx0aWYgKCh0YWJsZVByb3BlcnRpZXMuY3JlYXRpb25Nb2RlPy5uYW1lIGFzIHN0cmluZykgPT09IENyZWF0aW9uTW9kZS5DcmVhdGlvblJvdykge1xuXHRcdGNvbnN0IGNyZWF0aW9uUm93QWN0aW9uID0gdGFibGVQcm9wZXJ0aWVzLnRhYmxlRGVmaW5pdGlvbi5hY3Rpb25zLmZpbmQoKGEpID0+IGEua2V5ID09PSBTdGFuZGFyZEFjdGlvbktleXMuQ3JlYXRpb25Sb3cpIGFzXG5cdFx0XHR8IFN0YW5kYXJkQWN0aW9uXG5cdFx0XHR8IHVuZGVmaW5lZDtcblx0XHRpZiAoY3JlYXRpb25Sb3dBY3Rpb24/LmlzVGVtcGxhdGVkKSB7XG5cdFx0XHRjb25zdCBjdXN0b21EYXRhID0gY3JlYXRlQ3VzdG9tRGF0YXMoW1xuXHRcdFx0XHR7IGtleTogXCJkaXNhYmxlQWRkUm93QnV0dG9uRm9yRW1wdHlEYXRhXCIsIHZhbHVlOiB0YWJsZVByb3BlcnRpZXMudGFibGVEZWZpbml0aW9uLmNvbnRyb2wuZGlzYWJsZUFkZFJvd0J1dHRvbkZvckVtcHR5RGF0YSB9LFxuXHRcdFx0XHR7IGtleTogXCJjdXN0b21WYWxpZGF0aW9uRnVuY3Rpb25cIiwgdmFsdWU6IHRhYmxlUHJvcGVydGllcy50YWJsZURlZmluaXRpb24uY29udHJvbC5jdXN0b21WYWxpZGF0aW9uRnVuY3Rpb24gfVxuXHRcdFx0XSk7XG5cblx0XHRcdHJldHVybiAoXG5cdFx0XHRcdDxDcmVhdGlvblJvd1xuXHRcdFx0XHRcdGlkPXtnZW5lcmF0ZShbdGFibGVQcm9wZXJ0aWVzLmNvbnRlbnRJZCwgQ3JlYXRpb25Nb2RlLkNyZWF0aW9uUm93XSl9XG5cdFx0XHRcdFx0dmlzaWJsZT17Y3JlYXRpb25Sb3dBY3Rpb24udmlzaWJsZSBhcyB1bmtub3duIGFzIGJvb2xlYW59XG5cdFx0XHRcdFx0YXBwbHk9e2hhbmRsZXJQcm92aWRlci5nZXRDcmVhdGVCdXR0b25QcmVzc0hhbmRsZXIoZmFsc2UsIHRydWUpfVxuXHRcdFx0XHRcdGFwcGx5RW5hYmxlZD17Y3JlYXRpb25Sb3dBY3Rpb24uZW5hYmxlZCBhcyB1bmtub3duIGFzIGJvb2xlYW59XG5cdFx0XHRcdD5cblx0XHRcdFx0XHR7e1xuXHRcdFx0XHRcdFx0Y3VzdG9tRGF0YTogY3VzdG9tRGF0YVxuXHRcdFx0XHRcdH19XG5cdFx0XHRcdDwvQ3JlYXRpb25Sb3c+XG5cdFx0XHQpO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIEdlbmVyYXRlcyB0aGUgZHJhZyBhbmQgZHJvcCBjb25maWcgZm9yIHRoZSB0YWJsZS5cbiAqIEBwYXJhbSB0YWJsZVByb3BlcnRpZXNcbiAqIEBwYXJhbSBoYW5kbGVyUHJvdmlkZXJcbiAqIEByZXR1cm5zIFRoZSBkcmFnIGFuZCBkcm9wIGNvbmZpZ1xuICovXG5mdW5jdGlvbiBnZXREcmFnQW5kRHJvcENvbmZpZyhcblx0dGFibGVQcm9wZXJ0aWVzOiBUYWJsZUJsb2NrUHJvcGVydGllcyxcblx0aGFuZGxlclByb3ZpZGVyOiBUYWJsZUV2ZW50SGFuZGxlclByb3ZpZGVyXG4pOiBEcmFnRHJvcENvbmZpZyB8IHVuZGVmaW5lZCB7XG5cdGlmICh0YWJsZVByb3BlcnRpZXMudGFibGVEZWZpbml0aW9uLmNvbnRyb2wudHlwZSA9PT0gXCJUcmVlVGFibGVcIikge1xuXHRcdHJldHVybiAoXG5cdFx0XHQ8RHJhZ0Ryb3BDb25maWdcblx0XHRcdFx0ZW5hYmxlZD17Y29tcGlsZUV4cHJlc3Npb24oZ2V0RHJhZ0FuZERyb3BFbmFibGVkKHRhYmxlUHJvcGVydGllcy5jb250ZXh0T2JqZWN0UGF0aCwgdGFibGVQcm9wZXJ0aWVzLnRhYmxlRGVmaW5pdGlvbikpfVxuXHRcdFx0XHRkcm9wUG9zaXRpb249e3RhYmxlUHJvcGVydGllcy50YWJsZURlZmluaXRpb24uYW5ub3RhdGlvbi5hbGxvd0Ryb3BCZXR3ZWVuTm9kZXMgPT09IHRydWUgPyBcIk9uT3JCZXR3ZWVuXCIgOiBcIk9uXCJ9XG5cdFx0XHRcdGRyYWdnYWJsZT17dHJ1ZX1cblx0XHRcdFx0ZHJvcHBhYmxlPXt0cnVlfVxuXHRcdFx0XHRkcmFnU3RhcnQ9e2hhbmRsZXJQcm92aWRlci5kcmFnU3RhcnREb2N1bWVudH1cblx0XHRcdFx0ZHJhZ0VudGVyPXtoYW5kbGVyUHJvdmlkZXIuZHJhZ0VudGVyRG9jdW1lbnR9XG5cdFx0XHRcdGRyb3A9e2hhbmRsZXJQcm92aWRlci5kcm9wRG9jdW1lbnR9XG5cdFx0XHQvPlxuXHRcdCk7XG5cdH1cblx0cmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBHZW5lcmF0ZXMgYW4gYWN0aW9uQ29tbWFuZCBmb3IgdGhlIHRhYmxlLlxuICogQHBhcmFtIGFjdGlvbk5hbWUgVGhlIG5hbWUgb2YgdGhlIGFjdGlvblxuICogQHBhcmFtIGFjdGlvbiBBY3Rpb24gdG8gYmUgZXZhbHVhdGVkXG4gKiBAcGFyYW0gZm9yQ29udGV4dE1lbnUgSW5kaWNhdGVzIGlmIHRoZSBhY3Rpb24gYXBwZWFycyBpbiB0aGUgY29udGV4dCBtZW51LiBJZiBmYWxzZSwgdGhlIGFjdGlvbiBhcHBlYXJzIGluIHRoZSB0YWJsZSB0b29sYmFyXG4gKiBAcGFyYW0gcGFyYW1ldGVyc1xuICogQHBhcmFtIGNvbGxlY3Rpb25cbiAqIEBwYXJhbSB0YWJsZURlZmluaXRpb25cbiAqIEBwYXJhbSBjb250ZXh0T2JqZWN0UGF0aFxuICogQHJldHVybnMgVGhlIGFjdGlvbkNvbW1hbmRcbiAqL1xuZnVuY3Rpb24gZ2V0QWN0aW9uQ29tbWFuZChcblx0YWN0aW9uTmFtZTogc3RyaW5nLFxuXHRhY3Rpb246IEN1c3RvbUFjdGlvbixcblx0Zm9yQ29udGV4dE1lbnU6IGJvb2xlYW4sXG5cdHBhcmFtZXRlcnM6IFRhYmxlVGVtcGxhdGluZ1BhcmFtZXRlcnMsXG5cdGNvbGxlY3Rpb246IENvbnRleHQsXG5cdHRhYmxlRGVmaW5pdGlvbjogVGFibGVWaXN1YWxpemF0aW9uLFxuXHRjb250ZXh0T2JqZWN0UGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aDxMaW5lSXRlbSB8IFNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnQgfCBQcmVzZW50YXRpb25WYXJpYW50PlxuKTogQ29tbWFuZEV4ZWN1dGlvbiB8IHVuZGVmaW5lZCB7XG5cdGNvbnN0IGRhdGFGaWVsZCA9IGFjdGlvbi5hbm5vdGF0aW9uUGF0aFxuXHRcdD8gKHBhcmFtZXRlcnMuY29udmVydGVkTWV0YWRhdGEucmVzb2x2ZVBhdGgoYWN0aW9uLmFubm90YXRpb25QYXRoKS50YXJnZXQgYXMgRGF0YUZpZWxkRm9yQWN0aW9uIHwgRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uKVxuXHRcdDogdW5kZWZpbmVkO1xuXHRjb25zdCBhY3Rpb25Db250ZXh0UGF0aCA9IGFjdGlvbi5hbm5vdGF0aW9uUGF0aFxuXHRcdD8gQ29tbW9uSGVscGVyLmdldEFjdGlvbkNvbnRleHQocGFyYW1ldGVycy5tZXRhTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoYWN0aW9uLmFubm90YXRpb25QYXRoICsgXCIvQWN0aW9uXCIpISlcblx0XHQ6IHVuZGVmaW5lZDtcblx0Y29uc3QgYWN0aW9uQ29udGV4dCA9IGFjdGlvbkNvbnRleHRQYXRoID8gcGFyYW1ldGVycy5tZXRhTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoYWN0aW9uQ29udGV4dFBhdGgpIDogdW5kZWZpbmVkO1xuXHRjb25zdCBkYXRhRmllbGREYXRhTW9kZWxPYmplY3RQYXRoID0gYWN0aW9uQ29udGV4dCA/IGdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyhhY3Rpb25Db250ZXh0LCBjb2xsZWN0aW9uKSA6IHVuZGVmaW5lZDtcblx0Y29uc3QgaXNCb3VuZCA9IChkYXRhRmllbGQgYXMgRGF0YUZpZWxkRm9yQWN0aW9uKT8uQWN0aW9uVGFyZ2V0Py5pc0JvdW5kO1xuXHRjb25zdCBpc09wZXJhdGlvbkF2YWlsYWJsZSA9XG5cdFx0KGRhdGFGaWVsZCBhcyBEYXRhRmllbGRGb3JBY3Rpb24pPy5BY3Rpb25UYXJnZXQ/LmFubm90YXRpb25zPy5Db3JlPy5PcGVyYXRpb25BdmFpbGFibGU/LnZhbHVlT2YoKSAhPT0gZmFsc2U7XG5cdGNvbnN0IGRpc3BsYXlDb21tYW5kQWN0aW9uID0gYWN0aW9uLnR5cGUgPT09IFwiRm9yQWN0aW9uXCIgPyBpc0JvdW5kICE9PSB0cnVlIHx8IGlzT3BlcmF0aW9uQXZhaWxhYmxlIDogdHJ1ZTtcblx0Y29uc3QgZW5hYmxlZCA9ICFmb3JDb250ZXh0TWVudSA/IGFjdGlvbi5lbmFibGVkIDogYWN0aW9uLmVuYWJsZWRGb3JDb250ZXh0TWVudTtcblx0aWYgKGRpc3BsYXlDb21tYW5kQWN0aW9uICYmICghZm9yQ29udGV4dE1lbnUgfHwgVGFibGVIZWxwZXIuaXNBY3Rpb25TaG93bkluQ29udGV4dE1lbnUoYWN0aW9uLCBjb250ZXh0T2JqZWN0UGF0aCkpKSB7XG5cdFx0Y29uc3QgY29tbWFuZCA9ICFmb3JDb250ZXh0TWVudSA/IGFjdGlvbi5jb21tYW5kIDogYWN0aW9uLmNvbW1hbmQgKyBcIjo6Q29udGV4dE1lbnVcIjtcblxuXHRcdGNvbnN0IGFjdGlvblBhcmFtZXRlcnMgPSB7XG5cdFx0XHRvbkV4ZWN1dGVBY3Rpb246IHBhcmFtZXRlcnMuaGFuZGxlclByb3ZpZGVyLmdldERhdGFGaWVsZEZvckFjdGlvbkJ1dHRvblByZXNzSGFuZGxlcihcblx0XHRcdFx0ZGF0YUZpZWxkIGFzIERhdGFGaWVsZEZvckFjdGlvbixcblx0XHRcdFx0YWN0aW9uLFxuXHRcdFx0XHR1bmRlZmluZWQsXG5cdFx0XHRcdGZvckNvbnRleHRNZW51XG5cdFx0XHQpLFxuXHRcdFx0b25FeGVjdXRlSUJOOiBwYXJhbWV0ZXJzLmhhbmRsZXJQcm92aWRlci5nZXREYXRhRmllbGRGb3JJQk5QcmVzc0hhbmRsZXIoYWN0aW9uLCBmYWxzZSksXG5cdFx0XHRvbkV4ZWN1dGVNYW5pZmVzdDogcGFyYW1ldGVycy5oYW5kbGVyUHJvdmlkZXIuZ2V0TWFuaWZlc3RBY3Rpb25QcmVzc0hhbmRsZXIoYWN0aW9uLCBmb3JDb250ZXh0TWVudSksXG5cdFx0XHRpc0lCTkVuYWJsZWQ6XG5cdFx0XHRcdGVuYWJsZWQgPz9cblx0XHRcdFx0VGFibGVIZWxwZXIuaXNEYXRhRmllbGRGb3JJQk5FbmFibGVkKFxuXHRcdFx0XHRcdHsgY29sbGVjdGlvbjogY29sbGVjdGlvbiwgdGFibGVEZWZpbml0aW9uOiB0YWJsZURlZmluaXRpb24gfSxcblx0XHRcdFx0XHRkYXRhRmllbGQhIGFzIERhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbixcblx0XHRcdFx0XHQhIShkYXRhRmllbGQgYXMgRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uKS5SZXF1aXJlc0NvbnRleHQsXG5cdFx0XHRcdFx0KGRhdGFGaWVsZCBhcyBEYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24pLk5hdmlnYXRpb25BdmFpbGFibGUsXG5cdFx0XHRcdFx0Zm9yQ29udGV4dE1lbnVcblx0XHRcdFx0KSxcblx0XHRcdGlzQWN0aW9uRW5hYmxlZDpcblx0XHRcdFx0ZW5hYmxlZCA/P1xuXHRcdFx0XHRUYWJsZUhlbHBlci5pc0RhdGFGaWVsZEZvckFjdGlvbkVuYWJsZWQoXG5cdFx0XHRcdFx0dGFibGVEZWZpbml0aW9uLFxuXHRcdFx0XHRcdChkYXRhRmllbGQhIGFzIERhdGFGaWVsZEZvckFjdGlvbikuQWN0aW9uLFxuXHRcdFx0XHRcdCEhaXNCb3VuZCxcblx0XHRcdFx0XHRhY3Rpb25Db250ZXh0UGF0aCxcblx0XHRcdFx0XHRhY3Rpb24uZW5hYmxlT25TZWxlY3QsXG5cdFx0XHRcdFx0ZGF0YUZpZWxkRGF0YU1vZGVsT2JqZWN0UGF0aD8udGFyZ2V0RW50aXR5VHlwZSxcblx0XHRcdFx0XHRmb3JDb250ZXh0TWVudVxuXHRcdFx0XHQpLFxuXHRcdFx0aXNFbmFibGVkOiBlbmFibGVkXG5cdFx0fTtcblx0XHRyZXR1cm4gZ2V0Q29tbWFuZEV4ZWN1dGlvbkZvckFjdGlvbihjb21tYW5kLCB0YWJsZURlZmluaXRpb24uY29tbWFuZEFjdGlvbnMhW2FjdGlvbk5hbWVdLCBhY3Rpb25QYXJhbWV0ZXJzKTtcblx0fVxuXHRyZXR1cm4gdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIEdlbmVyYXRlcyB0aGUgdGVtcGxhdGUgc3RyaW5nIGZvciB0aGUgcmVxdWlyZWQgbW9kdWxlcy5cbiAqIEBwYXJhbSB0YWJsZURlZmluaXRpb25cbiAqIEByZXR1cm5zIFRoZSBsaXN0IG9mIHJlcXVpcmVkIG1vZHVsZXNcbiAqL1xuZnVuY3Rpb24gZ2V0Q29yZVJlcXVpcmUodGFibGVEZWZpbml0aW9uOiBUYWJsZVZpc3VhbGl6YXRpb24pOiBzdHJpbmcge1xuXHRjb25zdCBjdXN0b21Nb2R1bGVzID0gdGFibGVEZWZpbml0aW9uLmNvbnRyb2wuYWRkaXRpb25hbFJlcXVpcmVkTW9kdWxlcyA/PyBbXTtcblxuXHRyZXR1cm4gYHtUYWJsZVJ1bnRpbWU6ICdzYXAvZmUvbWFjcm9zL3RhYmxlL1RhYmxlUnVudGltZScsIEFQSTogJ3NhcC9mZS9tYWNyb3MvdGFibGUvVGFibGVBUEknJHtjdXN0b21Nb2R1bGVzXG5cdFx0Lm1hcCgobW9kdWxlOiBzdHJpbmcsIGluZGV4OiBudW1iZXIpID0+IGAsIGN1c3RvbU1vZHVsZSR7aW5kZXggKyAxfTogJyR7bW9kdWxlfSdgKVxuXHRcdC5qb2luKFwiXCIpfX1gO1xufVxuXG4vKipcbiAqIENyZWF0ZSB0aGUgdGVtcGxhdGUgZm9yIGEgY29tcHV0ZWQgY29sdW1uLlxuICogQ3VycmVudGx5LCB0aGlzIHJlcHJlc2VudHMgb25seSB0aGUgRHJhZnRJbmRpY2F0b3IgYW5kIHRoZSBTaXR1YXRpb25zSW5kaWNhdG9yLlxuICogQHBhcmFtIHRhYmxlSWQgVGhlIHRhYmxlIElEXG4gKiBAcGFyYW0gY29sdW1uIFRoZSBjb21wdXRlZCBjb2x1bW4gZGVmaW5pdGlvblxuICogQHBhcmFtIGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gY29udGV4dCB1c2VkIGZvciBjb250ZXh0IHBhdGhcbiAqIEBwYXJhbSBlbmFibGVBbmFseXRpY3MgV2hldGhlciBhbmFseXRpY3MgYXJlIGVuYWJsZWRcbiAqIEByZXR1cm5zIFRoZSBjb21wdXRlZCBjb2x1bW4uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRDb21wdXRlZENvbHVtbihcblx0dGFibGVJZDogc3RyaW5nLFxuXHRjb2x1bW46IENvbXB1dGVkVGFibGVDb2x1bW4sXG5cdGNvbGxlY3Rpb246IENvbnRleHQsXG5cdGVuYWJsZUFuYWx5dGljczogYm9vbGVhbiB8IHVuZGVmaW5lZFxuKTogQ29sdW1uIHwgdW5kZWZpbmVkIHtcblx0aWYgKGNvbHVtbi5pc0RyYWZ0SW5kaWNhdG9yKSB7XG5cdFx0cmV0dXJuIChcblx0XHRcdDxDb2x1bW5cblx0XHRcdFx0aWQ9e2dlbmVyYXRlKFt0YWJsZUlkLCBcIkNcIiwgXCJjb21wdXRlZENvbHVtbnNcIiwgXCJkcmFmdFN0YXR1c1wiXSl9XG5cdFx0XHRcdGhlYWRlclZpc2libGU9e2ZhbHNlfVxuXHRcdFx0XHRwcm9wZXJ0eUtleT17Y29sdW1uLm5hbWV9XG5cdFx0XHRcdGhlYWRlcj17Y29sdW1uLmxhYmVsfVxuXHRcdFx0XHR0b29sdGlwPXtjb2x1bW4udG9vbHRpcH1cblx0XHRcdFx0d2lkdGg9XCIzZW1cIlxuXHRcdFx0PlxuXHRcdFx0XHQ8RHJhZnRJbmRpY2F0b3Jcblx0XHRcdFx0XHRkcmFmdEluZGljYXRvclR5cGU9e09iamVjdE1hcmtlclZpc2liaWxpdHkuSWNvbk9ubHl9XG5cdFx0XHRcdFx0Y29udGV4dFBhdGg9e2NvbGxlY3Rpb24uZ2V0UGF0aCgpfVxuXHRcdFx0XHRcdHVzZWRJblRhYmxlPXt0cnVlfVxuXHRcdFx0XHRcdHVzZWRJbkFuYWx5dGljYWxUYWJsZT17ZW5hYmxlQW5hbHl0aWNzfVxuXHRcdFx0XHQvPlxuXHRcdFx0PC9Db2x1bW4+XG5cdFx0KTtcblx0fSBlbHNlIGlmIChjb2x1bW4uaXNTaXR1YXRpb25zSW5kaWNhdG9yKSB7XG5cdFx0cmV0dXJuIChcblx0XHRcdDxDb2x1bW5cblx0XHRcdFx0aWQ9e2dlbmVyYXRlKFt0YWJsZUlkLCBcIkNcIiwgXCJjb21wdXRlZENvbHVtbnNcIiwgXCJzaXR1YXRpb25zSW5kaWNhdG9yXCJdKX1cblx0XHRcdFx0cHJvcGVydHlLZXk9e2NvbHVtbi5uYW1lfVxuXHRcdFx0XHRoZWFkZXI9e2NvbHVtbi5sYWJlbH1cblx0XHRcdFx0dG9vbHRpcD17Y29sdW1uLnRvb2x0aXB9XG5cdFx0XHRcdGhlYWRlclZpc2libGU9e2ZhbHNlfVxuXHRcdFx0XHR3aWR0aD1cIjRlbVwiXG5cdFx0XHQ+XG5cdFx0XHRcdDxTaXR1YXRpb25zSW5kaWNhdG9yIGNvbnRleHRQYXRoPXtjb2xsZWN0aW9uLmdldFBhdGgoKX0gLz5cblx0XHRcdDwvQ29sdW1uPlxuXHRcdCk7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxufVxuXG4vKipcbiAqIENyZWF0ZSB0aGUgdGVtcGxhdGUgZm9yIGEgc2xvdCBjb2x1bW4uXG4gKiBUaGlzIGNvbHVtbiB3aWxsIGVpdGhlciByZXVzZSBhIHRlbXBsYXRlIGNvbnRyb2wgdGhhdCBpcyBkZWZpbmVkIGF0IHJ1bnRpbWUgKHRlbXBsYXRlSWQgY2FzZSksIG9yIGRlZmluZSBhIHNsb3Qgd2hlcmUgdGhlIFhNTCBjb250ZW50IGlzIGNvcGllZC5cbiAqIEBwYXJhbSB0YWJsZUlkIFRoZSB0YWJsZSBJRFxuICogQHBhcmFtIGNvbHVtbiBUaGUgc2xvdCBjb2x1bW4gZGVmaW5pdGlvblxuICogQHBhcmFtIGlzUmVhZE9ubHkgV2hldGhlciB0aGUgdGFibGUgaXMgcmVhZCBvbmx5XG4gKiBAcmV0dXJucyBUaGUgc2xvdCBjb2x1bW4uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRTbG90Q29sdW1uKHRhYmxlSWQ6IHN0cmluZywgY29sdW1uOiBDdXN0b21CYXNlZFRhYmxlQ29sdW1uLCBpc1JlYWRPbmx5OiBib29sZWFuIHwgdW5kZWZpbmVkKTogQ29sdW1uIHtcblx0Y29uc3QgdGVtcGxhdGUgPVxuXHRcdHR5cGVvZiBjb2x1bW4udGVtcGxhdGUgPT09IFwic3RyaW5nXCIgJiYgIWNvbHVtbi50ZW1wbGF0ZT8uc3RhcnRzV2l0aChcIjxcIikgPyAoXG5cdFx0XHQ8U2xvdENvbHVtbiB0ZW1wbGF0ZUlkPXtjb2x1bW4udGVtcGxhdGV9IC8+XG5cdFx0KSA6IChcblx0XHRcdGNvbHVtbi50ZW1wbGF0ZVxuXHRcdCk7XG5cdHJldHVybiAoXG5cdFx0PENvbHVtblxuXHRcdFx0aWQ9e2dlbmVyYXRlKFt0YWJsZUlkLCBcIkNcIiwgY29sdW1uLmlkXSl9XG5cdFx0XHRwcm9wZXJ0eUtleT17Y29sdW1uLm5hbWV9XG5cdFx0XHR3aWR0aD17Y29sdW1uLndpZHRofVxuXHRcdFx0aEFsaWduPXtjb2x1bW4uaG9yaXpvbnRhbEFsaWdufVxuXHRcdFx0aGVhZGVyPXtjb2x1bW4uaGVhZGVyfVxuXHRcdFx0dG9vbHRpcD17Y29sdW1uLnRvb2x0aXB9XG5cdFx0XHRyZXF1aXJlZD17aXNSZWFkT25seSA/IHVuZGVmaW5lZCA6IGNvbHVtbi5yZXF1aXJlZH1cblx0XHQ+XG5cdFx0XHR7e1xuXHRcdFx0XHRleHRlbmRlZFNldHRpbmdzOiA8UmVzcG9uc2l2ZUNvbHVtblNldHRpbmdzIGltcG9ydGFuY2U9e2NvbHVtbi5pbXBvcnRhbmNlfSAvPixcblx0XHRcdFx0dGVtcGxhdGU6IHRlbXBsYXRlXG5cdFx0XHR9fVxuXHRcdDwvQ29sdW1uPlxuXHQpO1xufVxuXG4vKipcbiAqIENyZWF0ZSB0aGUgdGVtcGxhdGUgZm9yIHRoZSBEcmFmdEluZGljYXRvci5cbiAqIEBwYXJhbSBjb2xsZWN0aW9uIFRoZSBjb250ZXh0IG9mIHRoZSBjb2xsZWN0aW9uXG4gKiBAcGFyYW0gY29sdW1uIFRoZSBjb2x1bW4gZGVmaW5pdGlvblxuICogQHJldHVybnMgVGhlIFhNTCBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBEcmFmdEluZGljYXRvci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldERyYWZ0SW5kaWNhdG9yKGNvbGxlY3Rpb246IENvbnRleHQsIGNvbHVtbjogQW5ub3RhdGlvblRhYmxlQ29sdW1uKTogRm9ybUVsZW1lbnRXcmFwcGVyIHwgdW5kZWZpbmVkIHtcblx0aWYgKFxuXHRcdGNvbGxlY3Rpb24uZ2V0T2JqZWN0KFwiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5EcmFmdFJvb3RcIikgJiZcblx0XHRjb2xsZWN0aW9uLmdldE9iamVjdChcIi4vQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5TZW1hbnRpY0tleVwiKSAmJlxuXHRcdGNvbHVtbi5mb3JtYXRPcHRpb25zPy5maWVsZEdyb3VwRHJhZnRJbmRpY2F0b3JQcm9wZXJ0eVBhdGhcblx0KSB7XG5cdFx0cmV0dXJuIChcblx0XHRcdDxGb3JtRWxlbWVudFdyYXBwZXI+XG5cdFx0XHRcdDxEcmFmdEluZGljYXRvclxuXHRcdFx0XHRcdGRyYWZ0SW5kaWNhdG9yVHlwZT17T2JqZWN0TWFya2VyVmlzaWJpbGl0eS5JY29uQW5kVGV4dH1cblx0XHRcdFx0XHRjb250ZXh0UGF0aD17Y29sbGVjdGlvbi5nZXRQYXRoKCl9XG5cdFx0XHRcdFx0dmlzaWJsZT17Z2V0RHJhZnRJbmRpY2F0b3JWaXNpYmxlQmluZGluZyhjb2x1bW4uZm9ybWF0T3B0aW9ucz8uZmllbGRHcm91cE5hbWUpfVxuXHRcdFx0XHRcdGFyaWFMYWJlbGxlZEJ5PXtbXCJ0aGlzPmFyaWFMYWJlbGxlZEJ5XCJdfVxuXHRcdFx0XHQvPlxuXHRcdFx0PC9Gb3JtRWxlbWVudFdyYXBwZXI+XG5cdFx0KTtcblx0fVxuXHRyZXR1cm4gdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIENyZWF0ZSB0aGUgU2l0dWF0aW9uSW5kaWNhdG9yIE9iamVjdFN0YXR1cy5cbiAqIEBwYXJhbSBjb2xsZWN0aW9uIFRoZSBjb250ZXh0IG9mIHRoZSBjb2xsZWN0aW9uXG4gKiBAcGFyYW0gY29sdW1uIFRoZSBjb2x1bW4gZGVmaW5pdGlvblxuICogQHJldHVybnMgVGhlIE9iamVjdFN0YXR1cy5cbiAqL1xuZnVuY3Rpb24gZ2V0U2l0dWF0aW9uSW5kaWNhdG9yKGNvbGxlY3Rpb246IENvbnRleHQsIGNvbHVtbjogQW5ub3RhdGlvblRhYmxlQ29sdW1uKTogT2JqZWN0U3RhdHVzIHwgdW5kZWZpbmVkIHtcblx0aWYgKFxuXHRcdGNvbGxlY3Rpb24uZ2V0T2JqZWN0KFwiLi9AY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlNlbWFudGljS2V5XCIpICYmXG5cdFx0Y29sdW1uLmZvcm1hdE9wdGlvbnM/LmZpZWxkR3JvdXBEcmFmdEluZGljYXRvclByb3BlcnR5UGF0aFxuXHQpIHtcblx0XHRyZXR1cm4gKFxuXHRcdFx0PE9iamVjdFN0YXR1c1xuXHRcdFx0XHR2aXNpYmxlPXtjb2x1bW4uZm9ybWF0T3B0aW9ucz8uc2hvd0Vycm9yT2JqZWN0U3RhdHVzfVxuXHRcdFx0XHRjbGFzcz1cInNhcFVpU21hbGxNYXJnaW5Cb3R0b21cIlxuXHRcdFx0XHR0ZXh0PVwie3NhcC5mZS5pMThuPkNvbnRhaW5zX0Vycm9yc31cIlxuXHRcdFx0XHRzdGF0ZT1cIkVycm9yXCJcblx0XHRcdC8+XG5cdFx0KTtcblx0fVxuXHRyZXR1cm4gdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIERldGVybWluZXMgdGhlIGRlZmF1bHQgZGF0ZS10aW1lIGZvcm1hdCBzdHlsZSBiYXNlZCBvbiB0aGUgZ2l2ZW4gZGF0YSBmaWVsZCBjb250ZXh0LlxuICogQHBhcmFtIGRhdGFGaWVsZENvbnRleHQgVGhlIGNvbnRleHQgb2YgdGhlIGRhdGEgZmllbGRcbiAqIEByZXR1cm5zIFJldHVybnMgJ3Nob3J0JyBpZiB0aGUgdW5kZXJseWluZyBkYXRhIGZpZWxkIGlzIG9mIHRoZSB0eXBlICdFZG0uVGltZU9mRGF5Jywgb3RoZXJ3aXNlIHVuZGVmaW5lZC5cbiAqL1xuZnVuY3Rpb24gZ2V0RGVmYXVsdERhdGVUaW1lU3R5bGUoZGF0YUZpZWxkQ29udGV4dDogQ29udGV4dCk6IERhdGVUaW1lU3R5bGUgfCB1bmRlZmluZWQge1xuXHRjb25zdCB0YXJnZXRPYmplY3QgPSBnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHM8RGF0YUZpZWxkQWJzdHJhY3RUeXBlcz4oZGF0YUZpZWxkQ29udGV4dCkudGFyZ2V0T2JqZWN0O1xuXHRpZiAoaXNEYXRhRmllbGQodGFyZ2V0T2JqZWN0KSAmJiB0YXJnZXRPYmplY3QuVmFsdWU/LiR0YXJnZXQ/LnR5cGUgPT09IFwiRWRtLlRpbWVPZkRheVwiKSB7XG5cdFx0cmV0dXJuIFwic2hvcnRcIjtcblx0fVxuXHRpZiAoXG5cdFx0aXNEYXRhRmllbGRGb3JBbm5vdGF0aW9uKHRhcmdldE9iamVjdCkgJiZcblx0XHRoYXNEYXRhUG9pbnRUYXJnZXQodGFyZ2V0T2JqZWN0KSAmJlxuXHRcdCh0YXJnZXRPYmplY3QuVGFyZ2V0LiR0YXJnZXQgYXMgRGF0YVBvaW50KT8uVmFsdWUuJHRhcmdldC50eXBlID09PSBcIkVkbS5UaW1lT2ZEYXlcIlxuXHQpIHtcblx0XHRyZXR1cm4gXCJzaG9ydFwiO1xuXHR9XG59XG5cbi8qKlxuICogQ3JlYXRlIHRoZSB0ZW1wbGF0ZSBmb3IgdGhlIGNyZWF0aW9uIHJvdy5cbiAqIEBwYXJhbSB0YWJsZUlkIFRoZSB0YWJsZSBJRFxuICogQHBhcmFtIGNvbHVtbiBUaGUgY29sdW1uIGRlZmluaXRpb25cbiAqIEBwYXJhbSB0YWJsZVR5cGUgVGhlIHR5cGUgb2YgdGhlIHRhYmxlXG4gKiBAcGFyYW0gY3JlYXRpb25Nb2RlIFRoZSBjcmVhdGlvbiBtb2RlXG4gKiBAcGFyYW0gaXNUYWJsZVJlYWRPbmx5IFdoZXRoZXIgdGhlIHRhYmxlIGlzIHJlYWQgb25seVxuICogQHBhcmFtIGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gY29udGV4dFxuICogQHBhcmFtIGRhdGFGaWVsZCBUaGUgZGF0YSBmaWVsZCBjb250ZXh0XG4gKiBAcGFyYW0gZmllbGRNb2RlIFRoZSBmaWVsZCBtb2RlXG4gKiBAcGFyYW0gZW5hYmxlQW5hbHl0aWNzIFdoZXRoZXIgYW5hbHl0aWNzIGFyZSBlbmFibGVkXG4gKiBAcGFyYW0gaGFuZGxlclByb3ZpZGVyXG4gKiBAcmV0dXJucyBUaGUgWE1MIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIGNyZWF0aW9uIHJvdy5cbiAqL1xuZnVuY3Rpb24gZ2V0Q3JlYXRpb25UZW1wbGF0ZShcblx0dGFibGVJZDogc3RyaW5nLFxuXHRjb2x1bW46IEFubm90YXRpb25UYWJsZUNvbHVtbixcblx0dGFibGVUeXBlOiBUYWJsZVR5cGUsXG5cdGNyZWF0aW9uTW9kZTogUHJvcGVydGllc09mPFRhYmxlQ3JlYXRpb25PcHRpb25zPiB8IHVuZGVmaW5lZCxcblx0aXNUYWJsZVJlYWRPbmx5OiBib29sZWFuIHwgdW5kZWZpbmVkLFxuXHRjb2xsZWN0aW9uOiBDb250ZXh0LFxuXHRkYXRhRmllbGQ6IENvbnRleHQsXG5cdGZpZWxkTW9kZTogc3RyaW5nIHwgdW5kZWZpbmVkLFxuXHRlbmFibGVBbmFseXRpY3M6IGJvb2xlYW4gfCB1bmRlZmluZWQsXG5cdGhhbmRsZXJQcm92aWRlcjogVGFibGVFdmVudEhhbmRsZXJQcm92aWRlclxuKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0aWYgKChjcmVhdGlvbk1vZGU/Lm5hbWUgYXMgc3RyaW5nKSA9PT0gXCJDcmVhdGlvblJvd1wiKSB7XG5cdFx0bGV0IGNvbHVtbkVkaXRNb2RlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cdFx0c3dpdGNoIChpc1RhYmxlUmVhZE9ubHkpIHtcblx0XHRcdGNhc2UgdHJ1ZTpcblx0XHRcdFx0Y29sdW1uRWRpdE1vZGUgPSBcIkRpc3BsYXlcIjtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIGZhbHNlOlxuXHRcdFx0XHRjb2x1bW5FZGl0TW9kZSA9IFwiRWRpdGFibGVcIjtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRjb2x1bW5FZGl0TW9kZSA9IHVuZGVmaW5lZDtcblx0XHRcdFx0YnJlYWs7XG5cdFx0fVxuXHRcdGNvbnN0IGRhdGFGaWVsZE9iamVjdCA9IGRhdGFGaWVsZC5nZXRPYmplY3QoKTtcblxuXHRcdGNvbnN0IHJlYWN0aXZlQXJlYU1vZGU6IFwiSW5saW5lXCIgfCBcIk92ZXJsYXlcIiB8IHVuZGVmaW5lZCA9IHRhYmxlVHlwZSA9PT0gXCJSZXNwb25zaXZlVGFibGVcIiA/IFwiT3ZlcmxheVwiIDogdW5kZWZpbmVkO1xuXG5cdFx0Y29uc3QgZm9ybWF0T3B0aW9ucyA9IHtcblx0XHRcdGZpZWxkTW9kZTogZmllbGRNb2RlLFxuXHRcdFx0dGV4dExpbmVzRWRpdDogY29sdW1uLmZvcm1hdE9wdGlvbnM/LnRleHRMaW5lc0VkaXQsXG5cdFx0XHR0ZXh0TWF4TGluZXM6IGNvbHVtbi5mb3JtYXRPcHRpb25zPy50ZXh0TWF4TGluZXMgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IGNvbHVtbi5mb3JtYXRPcHRpb25zPy50ZXh0TWF4TGluZXMsXG5cdFx0XHR0ZXh0TWF4TGVuZ3RoOiBjb2x1bW4uZm9ybWF0T3B0aW9ucz8udGV4dE1heExlbmd0aCxcblx0XHRcdHRleHRNYXhDaGFyYWN0ZXJzRGlzcGxheTogY29sdW1uLmZvcm1hdE9wdGlvbnM/LnRleHRNYXhDaGFyYWN0ZXJzRGlzcGxheSxcblx0XHRcdHRleHRFeHBhbmRCZWhhdmlvckRpc3BsYXk6IGNvbHVtbi5mb3JtYXRPcHRpb25zPy50ZXh0RXhwYW5kQmVoYXZpb3JEaXNwbGF5LFxuXHRcdFx0dGV4dEFsaWduTW9kZTogXCJUYWJsZVwiLFxuXHRcdFx0c2VtYW50aWNLZXlTdHlsZTogdGFibGVUeXBlID09PSBcIlJlc3BvbnNpdmVUYWJsZVwiID8gXCJPYmplY3RJZGVudGlmaWVyXCIgOiBcIkxhYmVsXCIsXG5cdFx0XHRoYXNEcmFmdEluZGljYXRvcjogY29sdW1uLmZvcm1hdE9wdGlvbnM/Lmhhc0RyYWZ0SW5kaWNhdG9yLFxuXHRcdFx0ZmllbGRHcm91cERyYWZ0SW5kaWNhdG9yUHJvcGVydHlQYXRoOiBjb2x1bW4uZm9ybWF0T3B0aW9ucz8uZmllbGRHcm91cERyYWZ0SW5kaWNhdG9yUHJvcGVydHlQYXRoLFxuXHRcdFx0ZmllbGRHcm91cE5hbWU6IGNvbHVtbi5mb3JtYXRPcHRpb25zPy5maWVsZEdyb3VwTmFtZSxcblx0XHRcdHNob3dJY29uVXJsOiBkYXRhRmllbGRPYmplY3Q/LklubGluZSAmJiAhIWRhdGFGaWVsZE9iamVjdD8uSWNvblVybCxcblx0XHRcdGlnbm9yZU5hdmlnYXRpb25BdmFpbGFibGU6IGVuYWJsZUFuYWx5dGljcyA/PyBmYWxzZSxcblx0XHRcdGlzQ3VycmVuY3lPclVuaXRBbGlnbmVkOiB0cnVlLFxuXHRcdFx0ZGF0ZVRpbWVTdHlsZTogZ2V0RGVmYXVsdERhdGVUaW1lU3R5bGUoZGF0YUZpZWxkKSxcblx0XHRcdHJlYWN0aXZlQXJlYU1vZGU6IHJlYWN0aXZlQXJlYU1vZGVcblx0XHR9O1xuXG5cdFx0cmV0dXJuIChcblx0XHRcdDxGaWVsZFxuXHRcdFx0XHRjb3JlOnJlcXVpcmU9XCJ7VGFibGVSdW50aW1lOiAnc2FwL2ZlL21hY3Jvcy90YWJsZS9UYWJsZVJ1bnRpbWUnfVwiXG5cdFx0XHRcdHZoSWRQcmVmaXg9e2dlbmVyYXRlKFt0YWJsZUlkLCBcIlRhYmxlVmFsdWVIZWxwXCJdKX1cblx0XHRcdFx0ZWRpdE1vZGU9e2NvbHVtbkVkaXRNb2RlfVxuXHRcdFx0XHRjb250ZXh0UGF0aD17Y29sbGVjdGlvbi5nZXRQYXRoKCl9XG5cdFx0XHRcdG1ldGFQYXRoPXtkYXRhRmllbGQuZ2V0UGF0aCgpfVxuXHRcdFx0XHR3cmFwPXt0YWJsZVR5cGUgPT09IFwiUmVzcG9uc2l2ZVRhYmxlXCJ9XG5cdFx0XHRcdGNoYW5nZT17aGFuZGxlclByb3ZpZGVyLmZpZWxkQ2hhbmdlSW5DcmVhdGlvblJvd31cblx0XHRcdFx0c2hvd0Vycm9yT2JqZWN0U3RhdHVzPXtjb2x1bW4uZm9ybWF0T3B0aW9ucz8uc2hvd0Vycm9yT2JqZWN0U3RhdHVzIGFzIHVua25vd24gYXMgYm9vbGVhbn1cblx0XHRcdD5cblx0XHRcdFx0e3tcblx0XHRcdFx0XHRmb3JtYXRPcHRpb25zOiA8RmllbGRGb3JtYXRPcHRpb25zIHsuLi5mb3JtYXRPcHRpb25zfSAvPlxuXHRcdFx0XHR9fVxuXHRcdFx0PC9GaWVsZD5cblx0XHQpO1xuXHR9XG5cdHJldHVybiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogUmV0cmlldmVzIHRoZSB0ZW1wbGF0ZSBmb3IgdGhlIG1hY3JvczpGaWVsZCBpbnNpZGUgdGhlIGNvbHVtbi5cbiAqIEBwYXJhbSB0YWJsZUlkIFRoZSB0YWJsZSBJRFxuICogQHBhcmFtIHRhYmxlRGVmaW5pdGlvbiBUaGUgdGFibGUgZGVmaW5pdGlvblxuICogQHBhcmFtIGNvbHVtbiBUaGUgY29sdW1uIGRlZmluaXRpb25cbiAqIEBwYXJhbSBkYXRhRmllbGRDb250ZXh0IFRoZSBkYXRhIGZpZWxkIGNvbnRleHRcbiAqIEBwYXJhbSBjb2xsZWN0aW9uIFRoZSBjb2xsZWN0aW9uIGNvbnRleHRcbiAqIEBwYXJhbSBlbmFibGVBbmFseXRpY3MgV2hldGhlciBhbmFseXRpY3MgYXJlIGVuYWJsZWRcbiAqIEBwYXJhbSB0YWJsZVR5cGUgVGhlIHR5cGUgb2YgdGhlIHRhYmxlXG4gKiBAcGFyYW0gaXNUYWJsZVJlYWRPbmx5IFdoZXRoZXIgdGhlIHRhYmxlIGlzIHJlYWQgb25seVxuICogQHBhcmFtIGNyZWF0aW9uTW9kZSBUaGUgY3JlYXRpb24gbW9kZVxuICogQHBhcmFtIGZpZWxkTW9kZSBUaGUgZmllbGQgbW9kZVxuICogQHBhcmFtIGlzQ29tcGFjdFR5cGUgV2hldGhlciB0aGUgdGFibGUgaXMgY29tcGFjdFxuICogQHBhcmFtIHRleHRBbGlnbiBUaGUgdGV4dCBhbGlnbm1lbnRcbiAqIEBwYXJhbSBhcmlhTGFiZWxsZWRCeSBUaGUgYXJpYSBsYWJlbGxlZCBieVxuICogQHBhcmFtIHNob3dFbXB0eUluZGljYXRvciBXaGV0aGVyIHRvIHNob3cgdGhlIGVtcHR5IGluZGljYXRvclxuICogQHBhcmFtIGNsYXNzTmFtZVxuICogQHBhcmFtIGhhbmRsZXJQcm92aWRlciBUaGUgaGFuZGxlciBwcm92aWRlclxuICogQHJldHVybnMgVGhlIFhNTCBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBmaWVsZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldE1hY3JvRmllbGRUZW1wbGF0ZShcblx0dGFibGVJZDogc3RyaW5nLFxuXHR0YWJsZURlZmluaXRpb246IFRhYmxlVmlzdWFsaXphdGlvbixcblx0Y29sdW1uOiBBbm5vdGF0aW9uVGFibGVDb2x1bW4sXG5cdGRhdGFGaWVsZENvbnRleHQ6IENvbnRleHQsXG5cdGNvbGxlY3Rpb246IENvbnRleHQsXG5cdGVuYWJsZUFuYWx5dGljczogYm9vbGVhbiB8IHVuZGVmaW5lZCxcblx0dGFibGVUeXBlOiBUYWJsZVR5cGUsXG5cdGlzVGFibGVSZWFkT25seTogYm9vbGVhbiB8IHVuZGVmaW5lZCxcblx0Y3JlYXRpb25Nb2RlOiBQcm9wZXJ0aWVzT2Y8VGFibGVDcmVhdGlvbk9wdGlvbnM+IHwgdW5kZWZpbmVkLFxuXHRmaWVsZE1vZGU6IHN0cmluZyB8IHVuZGVmaW5lZCxcblx0aXNDb21wYWN0VHlwZTogYm9vbGVhbiB8IHVuZGVmaW5lZCxcblx0dGV4dEFsaWduOiBzdHJpbmcgfCB1bmRlZmluZWQsXG5cdGFyaWFMYWJlbGxlZEJ5OiBzdHJpbmcgfCB1bmRlZmluZWQsXG5cdHNob3dFbXB0eUluZGljYXRvcjogYm9vbGVhbiB8IHVuZGVmaW5lZCxcblx0Y2xhc3NOYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQsXG5cdGhhbmRsZXJQcm92aWRlcjogVGFibGVFdmVudEhhbmRsZXJQcm92aWRlclxuKTogc3RyaW5nIHtcblx0Y29uc3QgZGF0YUZpZWxkT2JqZWN0ID0gZGF0YUZpZWxkQ29udGV4dC5nZXRPYmplY3QoKTtcblx0bGV0IGNvbHVtbkVkaXRNb2RlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cdHN3aXRjaCAoaXNUYWJsZVJlYWRPbmx5KSB7XG5cdFx0Y2FzZSB0cnVlOlxuXHRcdFx0Y29sdW1uRWRpdE1vZGUgPSBcIkRpc3BsYXlcIjtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgZmFsc2U6XG5cdFx0XHRjb2x1bW5FZGl0TW9kZSA9IFwiRWRpdGFibGVcIjtcblx0XHRcdGJyZWFrO1xuXHRcdGRlZmF1bHQ6XG5cdFx0XHRjb2x1bW5FZGl0TW9kZSA9IHVuZGVmaW5lZDtcblx0fVxuXHRpZiAodGFibGVEZWZpbml0aW9uLmNvbnRyb2wuZW5hYmxlVXBsb2FkUGx1Z2luICYmIGNvbHVtbi50eXBlQ29uZmlnPy5jbGFzc05hbWUgPT09IFwiRWRtLlN0cmVhbVwiKSB7XG5cdFx0Y29sdW1uRWRpdE1vZGUgPSBcIkRpc3BsYXlcIjtcblx0fVxuXG5cdGNvbnN0IHJlYWN0aXZlQXJlYU1vZGU6IFwiSW5saW5lXCIgfCBcIk92ZXJsYXlcIiB8IHVuZGVmaW5lZCA9IHRhYmxlRGVmaW5pdGlvbi5jb250cm9sLnR5cGUgPT09IFwiUmVzcG9uc2l2ZVRhYmxlXCIgPyBcIk92ZXJsYXlcIiA6IHVuZGVmaW5lZDtcblxuXHRjb25zdCBmb3JtYXRPcHRpb25zID0ge1xuXHRcdGZpZWxkTW9kZTogZmllbGRNb2RlLFxuXHRcdHRleHRMaW5lc0VkaXQ6IGNvbHVtbi5mb3JtYXRPcHRpb25zPy50ZXh0TGluZXNFZGl0LFxuXHRcdHRleHRNYXhMaW5lczogY29sdW1uLmZvcm1hdE9wdGlvbnM/LnRleHRNYXhMaW5lcyA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogY29sdW1uLmZvcm1hdE9wdGlvbnM/LnRleHRNYXhMaW5lcyxcblx0XHR0ZXh0TWF4Q2hhcmFjdGVyc0Rpc3BsYXk6IGNvbHVtbi5mb3JtYXRPcHRpb25zPy50ZXh0TWF4Q2hhcmFjdGVyc0Rpc3BsYXksXG5cdFx0dGV4dE1heExlbmd0aDogY29sdW1uLmZvcm1hdE9wdGlvbnM/LnRleHRNYXhMZW5ndGgsXG5cdFx0dGV4dEV4cGFuZEJlaGF2aW9yRGlzcGxheTogY29sdW1uLmZvcm1hdE9wdGlvbnM/LnRleHRFeHBhbmRCZWhhdmlvckRpc3BsYXksXG5cdFx0dGV4dEFsaWduTW9kZTogXCJUYWJsZVwiLFxuXHRcdHNob3dFbXB0eUluZGljYXRvcjogc2hvd0VtcHR5SW5kaWNhdG9yLFxuXHRcdHNlbWFudGljS2V5U3R5bGU6IHRhYmxlVHlwZSA9PT0gXCJSZXNwb25zaXZlVGFibGVcIiA/IFwiT2JqZWN0SWRlbnRpZmllclwiIDogXCJMYWJlbFwiLFxuXHRcdGhhc0RyYWZ0SW5kaWNhdG9yOiBjb2x1bW4uZm9ybWF0T3B0aW9ucz8uaGFzRHJhZnRJbmRpY2F0b3IsXG5cdFx0ZmllbGRHcm91cERyYWZ0SW5kaWNhdG9yUHJvcGVydHlQYXRoOiBjb2x1bW4uZm9ybWF0T3B0aW9ucz8uZmllbGRHcm91cERyYWZ0SW5kaWNhdG9yUHJvcGVydHlQYXRoLFxuXHRcdGZpZWxkR3JvdXBOYW1lOiBjb2x1bW4uZm9ybWF0T3B0aW9ucz8uZmllbGRHcm91cE5hbWUsXG5cdFx0c2hvd0ljb25Vcmw6IGRhdGFGaWVsZE9iamVjdD8uSW5saW5lICYmICEhZGF0YUZpZWxkT2JqZWN0Py5JY29uVXJsLFxuXHRcdGlnbm9yZU5hdmlnYXRpb25BdmFpbGFibGU6IGVuYWJsZUFuYWx5dGljcyA/PyBmYWxzZSxcblx0XHRpc0FuYWx5dGljczogZW5hYmxlQW5hbHl0aWNzLFxuXHRcdGZvcklubGluZUNyZWF0aW9uUm93czogY3JlYXRpb25Nb2RlPy5uYW1lID09PSBcIklubGluZUNyZWF0aW9uUm93c1wiLFxuXHRcdGlzQ3VycmVuY3lPclVuaXRBbGlnbmVkOiB0cnVlLFxuXHRcdGNvbXBhY3RTZW1hbnRpY0tleTogaXNDb21wYWN0VHlwZSA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogYCR7aXNDb21wYWN0VHlwZX1gLFxuXHRcdGRhdGVUaW1lU3R5bGU6IGdldERlZmF1bHREYXRlVGltZVN0eWxlKGRhdGFGaWVsZENvbnRleHQpLFxuXHRcdGlzQW5hbHl0aWNhbEFnZ3JlZ2F0ZWRSb3c6IHRhYmxlRGVmaW5pdGlvbi5jb250cm9sLmFuYWx5dGljYWxDb25maWd1cmF0aW9uPy5hZ2dyZWdhdGlvbk9uTGVhZkxldmVsLFxuXHRcdHJlYWN0aXZlQXJlYU1vZGU6IHJlYWN0aXZlQXJlYU1vZGVcblx0fTtcblx0cmV0dXJuIChcblx0XHQ8RmllbGRcblx0XHRcdHZoSWRQcmVmaXg9e2dlbmVyYXRlKFt0YWJsZUlkLCBcIlRhYmxlVmFsdWVIZWxwXCJdKX1cblx0XHRcdGVkaXRNb2RlPXtjb2x1bW5FZGl0TW9kZX1cblx0XHRcdGNvbnRleHRQYXRoPXtjb2xsZWN0aW9uLmdldFBhdGgoKX1cblx0XHRcdG1ldGFQYXRoPXtkYXRhRmllbGRDb250ZXh0LmdldFBhdGgoKX1cblx0XHRcdHRleHRBbGlnbj17dGV4dEFsaWdufVxuXHRcdFx0d3JhcD17dGFibGVUeXBlID09PSBcIlJlc3BvbnNpdmVUYWJsZVwifVxuXHRcdFx0Y2xhc3M9e2NsYXNzTmFtZX1cblx0XHRcdGxpdmVDaGFuZ2U9e2hhbmRsZXJQcm92aWRlci5maWVsZExpdmVDaGFuZ2V9XG5cdFx0XHRhcmlhTGFiZWxsZWRCeT17YXJpYUxhYmVsbGVkQnkgPyBbYXJpYUxhYmVsbGVkQnldIDogdW5kZWZpbmVkfVxuXHRcdFx0bmF2aWdhdGVBZnRlckFjdGlvbj17Y29sdW1uLmlzTmF2aWdhYmxlfVxuXHRcdFx0c2hvd0Vycm9yT2JqZWN0U3RhdHVzPXtjb2x1bW4uZm9ybWF0T3B0aW9ucz8uc2hvd0Vycm9yT2JqZWN0U3RhdHVzIGFzIHVua25vd24gYXMgYm9vbGVhbn1cblx0XHQ+XG5cdFx0XHR7e1xuXHRcdFx0XHRmb3JtYXRPcHRpb25zOiA8RmllbGRGb3JtYXRPcHRpb25zIHsuLi5mb3JtYXRPcHRpb25zfSAvPlxuXHRcdFx0fX1cblx0XHQ8L0ZpZWxkPlxuXHQpO1xufVxuXG4vKipcbiAqIENyZWF0ZSB0aGUgdGVtcGxhdGUgZm9yIHRoZSBjb2x1bW4uXG4gKiBAcGFyYW0gdGFibGVJZCBUaGUgdGFibGUgSURcbiAqIEBwYXJhbSB0YWJsZVByb3BlcnRpZXMgVGhlIHRhYmxlIHByb3BlcnRpZXNcbiAqIEBwYXJhbSBjb2x1bW4gVGhlIGNvbHVtbiBkZWZpbml0aW9uXG4gKiBAcGFyYW0gZGF0YUZpZWxkT1AgVGhlIGRhdGEgZmllbGQgb2JqZWN0IHBhdGhcbiAqIEBwYXJhbSBkYXRhRmllbGRDb250ZXh0IFRoZSBkYXRhIGZpZWxkIGNvbnRleHRcbiAqIEBwYXJhbSBjb2xsZWN0aW9uIFRoZSBjb2xsZWN0aW9uIGNvbnRleHRcbiAqIEBwYXJhbSBoYW5kbGVyUHJvdmlkZXIgVGhlIGhhbmRsZXIgcHJvdmlkZXJcbiAqIEByZXR1cm5zIFRoZSBYTUwgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgY29sdW1uLlxuICovXG5mdW5jdGlvbiBnZXRDb2x1bW5Db250ZW50VGVtcGxhdGUoXG5cdHRhYmxlSWQ6IHN0cmluZyxcblx0dGFibGVQcm9wZXJ0aWVzOiBUYWJsZUJsb2NrUHJvcGVydGllcyxcblx0Y29sdW1uOiBBbm5vdGF0aW9uVGFibGVDb2x1bW4sXG5cdGRhdGFGaWVsZE9QOiBEYXRhTW9kZWxPYmplY3RQYXRoPERhdGFGaWVsZEFic3RyYWN0VHlwZXM+LFxuXHRkYXRhRmllbGRDb250ZXh0OiBDb250ZXh0LFxuXHRjb2xsZWN0aW9uOiBDb250ZXh0LFxuXHRoYW5kbGVyUHJvdmlkZXI6IFRhYmxlRXZlbnRIYW5kbGVyUHJvdmlkZXJcbik6IHsgdGVtcGxhdGU6IHN0cmluZzsgY3JlYXRpb25UZW1wbGF0ZT86IHN0cmluZyB9IHtcblx0bGV0IHRlbXBsYXRlOiBzdHJpbmc7XG5cdGxldCBjcmVhdGlvblRlbXBsYXRlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cblx0Y29uc3QgdGFibGVEZWZpbml0aW9uID0gdGFibGVQcm9wZXJ0aWVzLnRhYmxlRGVmaW5pdGlvbjtcblx0Y29uc3QgZW5hYmxlQW5hbHl0aWNzID0gdGFibGVQcm9wZXJ0aWVzLnRhYmxlRGVmaW5pdGlvbi5lbmFibGVBbmFseXRpY3M7XG5cdGNvbnN0IHRhYmxlVHlwZSA9IHRhYmxlUHJvcGVydGllcy50YWJsZURlZmluaXRpb24uY29udHJvbC50eXBlO1xuXHRjb25zdCBpc1RhYmxlUmVhZE9ubHkgPSB0YWJsZVByb3BlcnRpZXMucmVhZE9ubHk7XG5cdGNvbnN0IGNyZWF0aW9uTW9kZSA9IHRhYmxlUHJvcGVydGllcy5jcmVhdGlvbk1vZGU7XG5cdGNvbnN0IGZpZWxkTW9kZSA9IHRhYmxlUHJvcGVydGllcy5maWVsZE1vZGU7XG5cdGNvbnN0IGlzQ29tcGFjdFR5cGUgPSB0YWJsZVByb3BlcnRpZXMudGFibGVEZWZpbml0aW9uLmNvbnRyb2wuaXNDb21wYWN0VHlwZTtcblxuXHRjb25zdCBkYXRhRmllbGQgPSBkYXRhRmllbGRPUC50YXJnZXRPYmplY3QgYXMgRGF0YUZpZWxkQWJzdHJhY3RUeXBlcztcblx0aWYgKFxuXHRcdGlzQW5ub3RhdGlvbk9mVHlwZTxEYXRhRmllbGRGb3JBbm5vdGF0aW9uPihkYXRhRmllbGQsIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckFubm90YXRpb24pICYmXG5cdFx0KGlzQW5ub3RhdGlvbk9mVGVybTxDaGFydD4oZGF0YUZpZWxkLlRhcmdldC4kdGFyZ2V0LCBVSUFubm90YXRpb25UZXJtcy5DaGFydCkgfHxcblx0XHRcdGlzQW5ub3RhdGlvbk9mVGVybTxQcmVzZW50YXRpb25WYXJpYW50PihkYXRhRmllbGQuVGFyZ2V0LiR0YXJnZXQsIFVJQW5ub3RhdGlvblRlcm1zLlByZXNlbnRhdGlvblZhcmlhbnQpKVxuXHQpIHtcblx0XHRjb25zdCBzaG93T25seUNoYXJ0ID0gKHRhYmxlVHlwZSA9PT0gXCJSZXNwb25zaXZlVGFibGVcIiA/ICFjb2x1bW4uc2V0dGluZ3M/LnNob3dNaWNyb0NoYXJ0TGFiZWwgOiB1bmRlZmluZWQpID8/IHRydWU7XG5cdFx0Y29uc3QgbWljcm9DaGFydFNpemUgPSB0YWJsZVR5cGUgPT09IFwiUmVzcG9uc2l2ZVRhYmxlXCIgPyBjb2x1bW4uc2V0dGluZ3M/Lm1pY3JvQ2hhcnRTaXplID8/IFwiWFNcIiA6IFwiWFNcIjtcblx0XHRsZXQgbWljcm9DaGFydENvbGxlY3Rpb24gPSBjb2xsZWN0aW9uXG5cdFx0XHQuZ2V0TW9kZWwoKVxuXHRcdFx0LmNyZWF0ZUJpbmRpbmdDb250ZXh0KGNvbGxlY3Rpb24uZ2V0UGF0aChkYXRhRmllbGRDb250ZXh0LmdldE9iamVjdChcIlRhcmdldC8kQW5ub3RhdGlvblBhdGhcIikpKTtcblx0XHRtaWNyb0NoYXJ0Q29sbGVjdGlvbiA9IGNvbGxlY3Rpb24uZ2V0TW9kZWwoKS5jcmVhdGVCaW5kaW5nQ29udGV4dChDb21tb25IZWxwZXIuZ2V0TmF2aWdhdGlvbkNvbnRleHQobWljcm9DaGFydENvbGxlY3Rpb24pKTtcblx0XHQvL1dlIG9ubHkgY29uc2lkZXIgdGhlIGZpcnN0IHZpc3VhbGl6YXRpb24gb2YgdGhlIFBWIGluIFBWIGNhc2UgYW5kIGV4cGVjdCBpdCB0byBiZSBhIGNoYXJ0IChzaW1pbGFyIHRvIFZpc3VhbEZpbHRlcnMpXG5cdFx0dGVtcGxhdGUgPSAoXG5cdFx0XHQ8TWljcm9DaGFydFxuXHRcdFx0XHRpZD17Z2VuZXJhdGUoW3RhYmxlSWQsIGRhdGFGaWVsZF0pfVxuXHRcdFx0XHRjb250ZXh0UGF0aD17bWljcm9DaGFydENvbGxlY3Rpb24uZ2V0UGF0aCgpfVxuXHRcdFx0XHRtZXRhUGF0aD17ZGF0YUZpZWxkQ29udGV4dFxuXHRcdFx0XHRcdC5nZXRNb2RlbCgpXG5cdFx0XHRcdFx0LmNyZWF0ZUJpbmRpbmdDb250ZXh0KGRhdGFGaWVsZENvbnRleHQuZ2V0UGF0aCgpICsgXCIvVGFyZ2V0LyRBbm5vdGF0aW9uUGF0aFwiKVxuXHRcdFx0XHRcdC5nZXRQYXRoKCl9XG5cdFx0XHRcdHNob3dPbmx5Q2hhcnQ9e3Nob3dPbmx5Q2hhcnR9XG5cdFx0XHRcdHNpemU9e21pY3JvQ2hhcnRTaXplID8/IFwiWFNcIn1cblx0XHRcdFx0aGlkZU9uTm9EYXRhPXt0cnVlfVxuXHRcdFx0XHRpc0FuYWx5dGljcz17ZW5hYmxlQW5hbHl0aWNzfVxuXHRcdFx0Lz5cblx0XHQpO1xuXHR9IGVsc2UgaWYgKFxuXHRcdGlzQW5ub3RhdGlvbk9mVHlwZTxEYXRhRmllbGQ+KGRhdGFGaWVsZCwgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkKSAmJlxuXHRcdGlzTXVsdGlWYWx1ZUZpZWxkKGVuaGFuY2VEYXRhTW9kZWxQYXRoKGRhdGFGaWVsZE9QLCBkYXRhRmllbGQuVmFsdWUucGF0aCkpXG5cdCkge1xuXHRcdC8vIHdoZW4gZXZhbHVhdGluZyBcIkAkdWk1LmNvbnRleHQuaXNJbmFjdGl2ZVwiIHdlIGFyZSBmb3JjZWQgdG8gYWRkIGlzVHJ1dGh5IHRvIGZvcmNlIHRoZSBiaW5kaW5nIGV2YWx1YXRpb25cblx0XHRjb25zdCBpc1JlYWRPbmx5ID0gY29tcGlsZUV4cHJlc3Npb24oXG5cdFx0XHRpZkVsc2UoXG5cdFx0XHRcdG9yKGlzVGFibGVSZWFkT25seSA9PT0gdHJ1ZSwgYW5kKGlzVHJ1dGh5KFVJLklzSW5hY3RpdmUpLCBjcmVhdGlvbk1vZGU/Lm5hbWUgPT09IFwiSW5saW5lQ3JlYXRpb25Sb3dzXCIpKSxcblx0XHRcdFx0Y29uc3RhbnQodHJ1ZSksXG5cdFx0XHRcdGlmRWxzZShlcXVhbChmaWVsZE1vZGUsIFwibm93cmFwcGVyXCIpLCBjb25zdGFudCh0cnVlKSwgY29uc3RhbnQodW5kZWZpbmVkKSlcblx0XHRcdClcblx0XHQpO1xuXHRcdGlmIChpc1JlYWRPbmx5ID09PSBcInVuZGVmaW5lZFwiKSB7XG5cdFx0XHR0ZW1wbGF0ZSA9IChcblx0XHRcdFx0PE11bHRpVmFsdWVGaWVsZEJsb2NrXG5cdFx0XHRcdFx0Y29udGV4dFBhdGg9e2NvbGxlY3Rpb24uZ2V0UGF0aCgpfVxuXHRcdFx0XHRcdG1ldGFQYXRoPXtkYXRhRmllbGRDb250ZXh0LmdldFBhdGgoKX1cblx0XHRcdFx0XHR1c2VQYXJlbnRCaW5kaW5nQ2FjaGU9e3RhYmxlRGVmaW5pdGlvbi5kaXNhYmxlT3duUmVxdWVzdE9uTVZGfVxuXHRcdFx0XHQvPlxuXHRcdFx0KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGVtcGxhdGUgPSAoXG5cdFx0XHRcdDxNdWx0aVZhbHVlRmllbGRCbG9ja1xuXHRcdFx0XHRcdGNvbnRleHRQYXRoPXtjb2xsZWN0aW9uLmdldFBhdGgoKX1cblx0XHRcdFx0XHRtZXRhUGF0aD17ZGF0YUZpZWxkQ29udGV4dC5nZXRQYXRoKCl9XG5cdFx0XHRcdFx0cmVhZE9ubHk9e2lzUmVhZE9ubHl9XG5cdFx0XHRcdFx0dXNlUGFyZW50QmluZGluZ0NhY2hlPXt0YWJsZURlZmluaXRpb24uZGlzYWJsZU93blJlcXVlc3RPbk1WRn1cblx0XHRcdFx0Lz5cblx0XHRcdCk7XG5cdFx0fVxuXHR9IGVsc2UgaWYgKFxuXHRcdGlzQW5ub3RhdGlvbk9mVHlwZTxEYXRhRmllbGRGb3JBbm5vdGF0aW9uPihkYXRhRmllbGQsIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckFubm90YXRpb24pICYmXG5cdFx0aXNBbm5vdGF0aW9uT2ZUZXJtPEZpZWxkR3JvdXA+KGRhdGFGaWVsZC5UYXJnZXQuJHRhcmdldCwgVUlBbm5vdGF0aW9uVGVybXMuRmllbGRHcm91cClcblx0KSB7XG5cdFx0Y29uc3QgZmllbGRHcm91cDogRmllbGRHcm91cCA9IGRhdGFGaWVsZC5UYXJnZXQuJHRhcmdldDtcblx0XHRjb25zdCBkYXRhRmllbGRDb2xsZWN0aW9uQ29udGV4dCA9IGRhdGFGaWVsZENvbnRleHRcblx0XHRcdC5nZXRNb2RlbCgpXG5cdFx0XHQuY3JlYXRlQmluZGluZ0NvbnRleHQoZGF0YUZpZWxkQ29udGV4dC5nZXRQYXRoKCkgKyBcIi9UYXJnZXQvJEFubm90YXRpb25QYXRoL0RhdGFcIik7XG5cdFx0Y29uc3QgZmllbGRHcm91cENvbGVjdGlvbkxlbmd0aCA9IGZpZWxkR3JvdXAuRGF0YS5sZW5ndGggLSAxO1xuXG5cdFx0Y29uc3QgaXRlbXMgPSBmaWVsZEdyb3VwLkRhdGEubWFwKChmaWVsZEdyb3VwRGF0YUZpZWxkOiBEYXRhRmllbGRBYnN0cmFjdFR5cGVzLCBmaWVsZEdyb3VwRGF0YUZpZWxkSWR4OiBudW1iZXIpID0+IHtcblx0XHRcdGNvbnN0IGZpZWxkR3JvdXBEYXRhRmllbGRDb250ZXh0ID0gZGF0YUZpZWxkQ29sbGVjdGlvbkNvbnRleHRcblx0XHRcdFx0LmdldE1vZGVsKClcblx0XHRcdFx0LmNyZWF0ZUJpbmRpbmdDb250ZXh0KGRhdGFGaWVsZENvbGxlY3Rpb25Db250ZXh0LmdldFBhdGgoKSArIFwiL1wiICsgZmllbGRHcm91cERhdGFGaWVsZElkeCk7XG5cdFx0XHRjb25zdCBmaWVsZEdyb3VwRGF0YUZpZWxkT1AgPSBnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHM8RGF0YUZpZWxkQWJzdHJhY3RUeXBlcz4oZmllbGRHcm91cERhdGFGaWVsZENvbnRleHQpO1xuXHRcdFx0Y29uc3QgZmllbGRHcm91cExhYmVsID0gRmllbGRIZWxwZXIuY29tcHV0ZUxhYmVsVGV4dChmaWVsZEdyb3VwRGF0YUZpZWxkQ29udGV4dC5nZXRPYmplY3QoKSwge1xuXHRcdFx0XHRjb250ZXh0OiBmaWVsZEdyb3VwRGF0YUZpZWxkQ29udGV4dFxuXHRcdFx0fSk7XG5cdFx0XHRpZiAoY29sdW1uLnNob3dEYXRhRmllbGRzTGFiZWwgJiYgISFmaWVsZEdyb3VwTGFiZWwpIHtcblx0XHRcdFx0Y29uc3QgcmVzb3VyY2VCdW5kbGUgPSBMaWJyYXJ5LmdldFJlc291cmNlQnVuZGxlRm9yKFwic2FwLmZlLm1hY3Jvc1wiKSE7XG5cdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0PEhCb3hcblx0XHRcdFx0XHRcdHZpc2libGU9e2dldFZpc2libGVFeHByZXNzaW9uKGZpZWxkR3JvdXBEYXRhRmllbGRPUCl9XG5cdFx0XHRcdFx0XHRhbGlnbkl0ZW1zPXtGaWVsZEhlbHBlci5idWlsZEV4cHJlc3Npb25Gb3JBbGlnbkl0ZW1zKFxuXHRcdFx0XHRcdFx0XHRmaWVsZEdyb3VwRGF0YUZpZWxkQ29udGV4dC5nZXRPYmplY3QoXCJUYXJnZXQvJEFubm90YXRpb25QYXRoL1Zpc3VhbGl6YXRpb24vJEVudW1NZW1iZXJcIilcblx0XHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0PExhYmVsXG5cdFx0XHRcdFx0XHRcdGlkPXtUYWJsZUhlbHBlci5nZXRGaWVsZEdyb3VwTGFiZWxTdGFibGVJZCh0YWJsZUlkLCBmaWVsZEdyb3VwRGF0YUZpZWxkT1ApfVxuXHRcdFx0XHRcdFx0XHR0ZXh0PXtyZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiSEVBREVSX0ZPUk1fTEFCRUxcIiwgW2ZpZWxkR3JvdXBMYWJlbF0pfVxuXHRcdFx0XHRcdFx0XHRjbGFzcz1cInNhcFVpVGlueU1hcmdpbkVuZFwiXG5cdFx0XHRcdFx0XHRcdHZpc2libGU9e2dldFZpc2libGVFeHByZXNzaW9uKGZpZWxkR3JvdXBEYXRhRmllbGRPUCl9XG5cdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0PFZCb3g+XG5cdFx0XHRcdFx0XHRcdHt7XG5cdFx0XHRcdFx0XHRcdFx0bGF5b3V0RGF0YTogPEZsZXhJdGVtRGF0YSBncm93RmFjdG9yPVwiMVwiIC8+LFxuXHRcdFx0XHRcdFx0XHRcdGl0ZW1zOiBnZXRNYWNyb0ZpZWxkVGVtcGxhdGUoXG5cdFx0XHRcdFx0XHRcdFx0XHR0YWJsZUlkLFxuXHRcdFx0XHRcdFx0XHRcdFx0dGFibGVEZWZpbml0aW9uLFxuXHRcdFx0XHRcdFx0XHRcdFx0Y29sdW1uLFxuXHRcdFx0XHRcdFx0XHRcdFx0ZmllbGRHcm91cERhdGFGaWVsZENvbnRleHQsXG5cdFx0XHRcdFx0XHRcdFx0XHRjb2xsZWN0aW9uLFxuXHRcdFx0XHRcdFx0XHRcdFx0ZW5hYmxlQW5hbHl0aWNzLFxuXHRcdFx0XHRcdFx0XHRcdFx0dGFibGVUeXBlLFxuXHRcdFx0XHRcdFx0XHRcdFx0aXNUYWJsZVJlYWRPbmx5LFxuXHRcdFx0XHRcdFx0XHRcdFx0Y3JlYXRpb25Nb2RlLFxuXHRcdFx0XHRcdFx0XHRcdFx0dW5kZWZpbmVkLFxuXHRcdFx0XHRcdFx0XHRcdFx0aXNDb21wYWN0VHlwZSxcblx0XHRcdFx0XHRcdFx0XHRcdFwiTGVmdFwiLFxuXHRcdFx0XHRcdFx0XHRcdFx0YCR7VGFibGVIZWxwZXIuZ2V0Q29sdW1uU3RhYmxlSWQodGFibGVJZCwgZGF0YUZpZWxkT1ApfSAke1RhYmxlSGVscGVyLmdldEZpZWxkR3JvdXBMYWJlbFN0YWJsZUlkKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHR0YWJsZUlkLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRmaWVsZEdyb3VwRGF0YUZpZWxkT1Bcblx0XHRcdFx0XHRcdFx0XHRcdCl9YCxcblx0XHRcdFx0XHRcdFx0XHRcdHRydWUsXG5cdFx0XHRcdFx0XHRcdFx0XHRUYWJsZUhlbHBlci5nZXRNYXJnaW5DbGFzcyhcblx0XHRcdFx0XHRcdFx0XHRcdFx0ZmllbGRHcm91cERhdGFGaWVsZENvbnRleHQuZ2V0T2JqZWN0KFwiVGFyZ2V0LyRBbm5vdGF0aW9uUGF0aC9WaXN1YWxpemF0aW9uLyRFbnVtTWVtYmVyXCIpLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRmaWVsZEdyb3VwRGF0YUZpZWxkSWR4ID09PSBmaWVsZEdyb3VwQ29sZWN0aW9uTGVuZ3RoXG5cdFx0XHRcdFx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdFx0XHRcdFx0aGFuZGxlclByb3ZpZGVyXG5cdFx0XHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdFx0XHR9fVxuXHRcdFx0XHRcdFx0PC9WQm94PlxuXHRcdFx0XHRcdDwvSEJveD5cblx0XHRcdFx0KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJldHVybiBnZXRNYWNyb0ZpZWxkVGVtcGxhdGUoXG5cdFx0XHRcdFx0dGFibGVJZCxcblx0XHRcdFx0XHR0YWJsZURlZmluaXRpb24sXG5cdFx0XHRcdFx0Y29sdW1uLFxuXHRcdFx0XHRcdGZpZWxkR3JvdXBEYXRhRmllbGRDb250ZXh0LFxuXHRcdFx0XHRcdGNvbGxlY3Rpb24sXG5cdFx0XHRcdFx0ZW5hYmxlQW5hbHl0aWNzLFxuXHRcdFx0XHRcdHRhYmxlVHlwZSxcblx0XHRcdFx0XHRpc1RhYmxlUmVhZE9ubHksXG5cdFx0XHRcdFx0Y3JlYXRpb25Nb2RlLFxuXHRcdFx0XHRcdGZpZWxkTW9kZSxcblx0XHRcdFx0XHRpc0NvbXBhY3RUeXBlLFxuXHRcdFx0XHRcdHVuZGVmaW5lZCxcblx0XHRcdFx0XHRUYWJsZUhlbHBlci5nZXRDb2x1bW5TdGFibGVJZCh0YWJsZUlkLCBkYXRhRmllbGRPUCksXG5cdFx0XHRcdFx0ZmFsc2UsXG5cdFx0XHRcdFx0VGFibGVIZWxwZXIuZ2V0TWFyZ2luQ2xhc3MoXG5cdFx0XHRcdFx0XHRmaWVsZEdyb3VwRGF0YUZpZWxkQ29udGV4dC5nZXRPYmplY3QoXCJUYXJnZXQvJEFubm90YXRpb25QYXRoL1Zpc3VhbGl6YXRpb24vJEVudW1NZW1iZXJcIiksXG5cdFx0XHRcdFx0XHRmaWVsZEdyb3VwRGF0YUZpZWxkSWR4ID09PSBmaWVsZEdyb3VwQ29sZWN0aW9uTGVuZ3RoXG5cdFx0XHRcdFx0KSxcblx0XHRcdFx0XHRoYW5kbGVyUHJvdmlkZXJcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHR9KTtcblxuXHRcdGNvbnN0IGRyYWZ0SW5kaWNhdG9yID0gZ2V0RHJhZnRJbmRpY2F0b3IoY29sbGVjdGlvbiwgY29sdW1uKTtcblx0XHRpZiAoZHJhZnRJbmRpY2F0b3IpIHtcblx0XHRcdGl0ZW1zLnB1c2goZHJhZnRJbmRpY2F0b3IpO1xuXHRcdH1cblx0XHRjb25zdCBzaXR1YXRpb25JbmRpY2F0b3IgPSBnZXRTaXR1YXRpb25JbmRpY2F0b3IoY29sbGVjdGlvbiwgY29sdW1uKTtcblx0XHRpZiAoc2l0dWF0aW9uSW5kaWNhdG9yKSB7XG5cdFx0XHRpdGVtcy5wdXNoKHNpdHVhdGlvbkluZGljYXRvcik7XG5cdFx0fVxuXG5cdFx0dGVtcGxhdGUgPSAoXG5cdFx0XHQ8VkJveFxuXHRcdFx0XHR2aXNpYmxlPXtUYWJsZUhlbHBlci5nZXRWQm94VmlzaWJpbGl0eShcblx0XHRcdFx0XHRkYXRhRmllbGRDb2xsZWN0aW9uQ29udGV4dC5nZXRPYmplY3QoKSxcblx0XHRcdFx0XHRjb2x1bW4uRmllbGRHcm91cEhpZGRlbkV4cHJlc3Npb25zLFxuXHRcdFx0XHRcdGRhdGFGaWVsZENvbnRleHQuZ2V0T2JqZWN0KClcblx0XHRcdFx0KX1cblx0XHRcdD5cblx0XHRcdFx0e3tcblx0XHRcdFx0XHRpdGVtczogaXRlbXNcblx0XHRcdFx0fX1cblx0XHRcdDwvVkJveD5cblx0XHQpO1xuXHR9IGVsc2Uge1xuXHRcdHRlbXBsYXRlID0gZ2V0TWFjcm9GaWVsZFRlbXBsYXRlKFxuXHRcdFx0dGFibGVJZCxcblx0XHRcdHRhYmxlRGVmaW5pdGlvbixcblx0XHRcdGNvbHVtbixcblx0XHRcdGRhdGFGaWVsZENvbnRleHQsXG5cdFx0XHRjb2xsZWN0aW9uLFxuXHRcdFx0ZW5hYmxlQW5hbHl0aWNzLFxuXHRcdFx0dGFibGVUeXBlLFxuXHRcdFx0aXNUYWJsZVJlYWRPbmx5LFxuXHRcdFx0Y3JlYXRpb25Nb2RlLFxuXHRcdFx0ZmllbGRNb2RlLFxuXHRcdFx0aXNDb21wYWN0VHlwZSxcblx0XHRcdHVuZGVmaW5lZCxcblx0XHRcdHVuZGVmaW5lZCxcblx0XHRcdGZhbHNlLFxuXHRcdFx0dW5kZWZpbmVkLFxuXHRcdFx0aGFuZGxlclByb3ZpZGVyXG5cdFx0KTtcblx0XHRjcmVhdGlvblRlbXBsYXRlID0gZ2V0Q3JlYXRpb25UZW1wbGF0ZShcblx0XHRcdHRhYmxlSWQsXG5cdFx0XHRjb2x1bW4sXG5cdFx0XHR0YWJsZVR5cGUsXG5cdFx0XHRjcmVhdGlvbk1vZGUsXG5cdFx0XHRpc1RhYmxlUmVhZE9ubHksXG5cdFx0XHRjb2xsZWN0aW9uLFxuXHRcdFx0ZGF0YUZpZWxkQ29udGV4dCxcblx0XHRcdGZpZWxkTW9kZSxcblx0XHRcdGVuYWJsZUFuYWx5dGljcyxcblx0XHRcdGhhbmRsZXJQcm92aWRlclxuXHRcdCk7XG5cdH1cblxuXHRyZXR1cm4geyB0ZW1wbGF0ZSwgY3JlYXRpb25UZW1wbGF0ZSB9O1xufVxuXG4vKipcbiAqIENyZWF0ZSB0aGUgdGVtcGxhdGUgZm9yIGEgY29sdW1uLlxuICogQHBhcmFtIHRhYmxlSWQgVGhlIHRhYmxlIElEXG4gKiBAcGFyYW0gdGFibGVQcm9wZXJ0aWVzIFRhYmxlIHByb3BlcnRpZXNcbiAqIEBwYXJhbSBjb2x1bW4gVGhlIGNvbHVtbiBkZWZpbml0aW9uXG4gKiBAcGFyYW0gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiBjb250ZXh0IHVzZWQgZm9yIGNvbnRleHQgcGF0aFxuICogQHBhcmFtIGhhbmRsZXJQcm92aWRlciBUaGUgaGFuZGxlciBwcm92aWRlclxuICogQHJldHVybnMgVGhlIFhNTCBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBjb2x1bW4uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRDb2x1bW5UZW1wbGF0ZShcblx0dGFibGVJZDogc3RyaW5nLFxuXHR0YWJsZVByb3BlcnRpZXM6IFRhYmxlQmxvY2tQcm9wZXJ0aWVzLFxuXHRjb2x1bW46IEFubm90YXRpb25UYWJsZUNvbHVtbixcblx0Y29sbGVjdGlvbjogQ29udGV4dCxcblx0aGFuZGxlclByb3ZpZGVyOiBUYWJsZUV2ZW50SGFuZGxlclByb3ZpZGVyXG4pOiBDb2x1bW4gfCB1bmRlZmluZWQge1xuXHRsZXQgZGF0YUZpZWxkQ29udGV4dCA9IGNvbGxlY3Rpb24uZ2V0TW9kZWwoKS5jcmVhdGVCaW5kaW5nQ29udGV4dChjb2x1bW4uYW5ub3RhdGlvblBhdGgpO1xuXHRpZiAoIWRhdGFGaWVsZENvbnRleHQpIHtcblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG5cdGRhdGFGaWVsZENvbnRleHQgPSBjb2xsZWN0aW9uLmdldE1vZGVsKCkuY3JlYXRlQmluZGluZ0NvbnRleHQoRmllbGRIZWxwZXIuZ2V0RGF0YUZpZWxkRGVmYXVsdChkYXRhRmllbGRDb250ZXh0KSk7XG5cdGNvbnN0IGRhdGFGaWVsZE9iamVjdE1vZGVsUGF0aCA9IGdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0czxEYXRhRmllbGRBYnN0cmFjdFR5cGVzPihkYXRhRmllbGRDb250ZXh0LCBjb2xsZWN0aW9uKTtcblx0Y29uc3QgZGF0YUZpZWxkT2JqZWN0ID0gZGF0YUZpZWxkQ29udGV4dD8uZ2V0T2JqZWN0Py4oKSA/PyB7fTtcblxuXHRjb25zdCB0ZW1wbGF0ZXMgPSBnZXRDb2x1bW5Db250ZW50VGVtcGxhdGUoXG5cdFx0dGFibGVJZCxcblx0XHR0YWJsZVByb3BlcnRpZXMsXG5cdFx0Y29sdW1uLFxuXHRcdGRhdGFGaWVsZE9iamVjdE1vZGVsUGF0aCxcblx0XHRkYXRhRmllbGRDb250ZXh0LFxuXHRcdGNvbGxlY3Rpb24sXG5cdFx0aGFuZGxlclByb3ZpZGVyXG5cdCk7XG5cblx0Y29uc3QgZW5hYmxlQXV0b0NvbHVtbldpZHRoID0gdGFibGVQcm9wZXJ0aWVzLmVuYWJsZUF1dG9Db2x1bW5XaWR0aCA/PyB0YWJsZVByb3BlcnRpZXMudGFibGVEZWZpbml0aW9uLmNvbnRyb2wuZW5hYmxlQXV0b0NvbHVtbldpZHRoO1xuXHRjb25zdCB3aWR0aEluY2x1ZGluZ0NvbHVtbkhlYWRlciA9IHRhYmxlUHJvcGVydGllcy50YWJsZURlZmluaXRpb24uY29udHJvbC53aWR0aEluY2x1ZGluZ0NvbHVtbkhlYWRlcjtcblx0Y29uc3QgdGFibGVUeXBlID0gdGFibGVQcm9wZXJ0aWVzLnRhYmxlRGVmaW5pdGlvbi5jb250cm9sLnR5cGU7XG5cblx0cmV0dXJuIChcblx0XHQ8Q29sdW1uXG5cdFx0XHRpZD17VGFibGVIZWxwZXIuZ2V0Q29sdW1uU3RhYmxlSWQodGFibGVJZCwgZGF0YUZpZWxkT2JqZWN0TW9kZWxQYXRoKX1cblx0XHRcdHdpZHRoPXtcblx0XHRcdFx0IUNvbW1vblV0aWxzLmlzU21hbGxEZXZpY2UoKSB8fCBjb2x1bW4ud2lkdGhcblx0XHRcdFx0XHQ/IFRhYmxlSGVscGVyLmdldENvbHVtbldpZHRoKFxuXHRcdFx0XHRcdFx0XHR7IGVuYWJsZUF1dG9Db2x1bW5XaWR0aCwgd2lkdGhJbmNsdWRpbmdDb2x1bW5IZWFkZXIsIHRhYmxlVHlwZSB9LFxuXHRcdFx0XHRcdFx0XHRjb2x1bW4sXG5cdFx0XHRcdFx0XHRcdGRhdGFGaWVsZE9iamVjdCxcblx0XHRcdFx0XHRcdFx0VGFibGVIZWxwZXIuZ2V0VGV4dE9uQWN0aW9uRmllbGQoZGF0YUZpZWxkT2JqZWN0LCB7IGNvbnRleHQ6IGRhdGFGaWVsZENvbnRleHQgfSksXG5cdFx0XHRcdFx0XHRcdGRhdGFGaWVsZE9iamVjdE1vZGVsUGF0aCxcblx0XHRcdFx0XHRcdFx0dHJ1ZSxcblx0XHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRcdHRpdGxlOiBkYXRhRmllbGRDb250ZXh0LmdldE9iamVjdChcIlRhcmdldC8kQW5ub3RhdGlvblBhdGgvVGl0bGVcIikgfHwgXCJcIixcblx0XHRcdFx0XHRcdFx0XHRkZXNjcmlwdGlvbjogZGF0YUZpZWxkQ29udGV4dC5nZXRPYmplY3QoXCJUYXJnZXQvJEFubm90YXRpb25QYXRoL1RpdGxlXCIpIHx8IFwiXCJcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdCAgKVxuXHRcdFx0XHRcdDogdW5kZWZpbmVkXG5cdFx0XHR9XG5cdFx0XHRtaW5XaWR0aD17XG5cdFx0XHRcdENvbW1vblV0aWxzLmlzU21hbGxEZXZpY2UoKVxuXHRcdFx0XHRcdD8gVGFibGVIZWxwZXIuZ2V0Q29sdW1uV2lkdGgoXG5cdFx0XHRcdFx0XHRcdHsgZW5hYmxlQXV0b0NvbHVtbldpZHRoLCB3aWR0aEluY2x1ZGluZ0NvbHVtbkhlYWRlciwgdGFibGVUeXBlIH0sXG5cdFx0XHRcdFx0XHRcdGNvbHVtbixcblx0XHRcdFx0XHRcdFx0ZGF0YUZpZWxkT2JqZWN0LFxuXHRcdFx0XHRcdFx0XHRUYWJsZUhlbHBlci5nZXRUZXh0T25BY3Rpb25GaWVsZChkYXRhRmllbGRPYmplY3QsIHsgY29udGV4dDogZGF0YUZpZWxkQ29udGV4dCB9KSxcblx0XHRcdFx0XHRcdFx0ZGF0YUZpZWxkT2JqZWN0TW9kZWxQYXRoLFxuXHRcdFx0XHRcdFx0XHRmYWxzZSxcblx0XHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRcdHRpdGxlOiBkYXRhRmllbGRDb250ZXh0LmdldE9iamVjdChcIlRhcmdldC8kQW5ub3RhdGlvblBhdGgvVGl0bGVcIikgfHwgXCJcIixcblx0XHRcdFx0XHRcdFx0XHRkZXNjcmlwdGlvbjogZGF0YUZpZWxkQ29udGV4dC5nZXRPYmplY3QoXCJUYXJnZXQvJEFubm90YXRpb25QYXRoL0Rlc2NyaXB0aW9uXCIpIHx8IFwiXCJcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdCAgKVxuXHRcdFx0XHRcdDogdW5kZWZpbmVkXG5cdFx0XHR9XG5cdFx0XHRoZWFkZXI9e2NvbHVtbi5sYWJlbCB8fCBjb2x1bW4ubmFtZX1cblx0XHRcdHByb3BlcnR5S2V5PXtjb2x1bW4ubmFtZX1cblx0XHRcdGhBbGlnbj17Y29sdW1uLmhvcml6b250YWxBbGlnbiB8fCBGaWVsZEhlbHBlci5nZXRDb2x1bW5BbGlnbm1lbnQoZGF0YUZpZWxkT2JqZWN0LCB7IGNvbGxlY3Rpb246IGNvbGxlY3Rpb24gfSl9XG5cdFx0XHRoZWFkZXJWaXNpYmxlPXtUYWJsZUhlbHBlci5zZXRIZWFkZXJMYWJlbFZpc2liaWxpdHkoZGF0YUZpZWxkT2JqZWN0LCBkYXRhRmllbGRDb250ZXh0LmdldE9iamVjdChcIlRhcmdldC8kQW5ub3RhdGlvblBhdGgvRGF0YVwiKSl9XG5cdFx0XHR0b29sdGlwPXtjb2x1bW4udG9vbHRpcH1cblx0XHRcdHJlcXVpcmVkPXt0YWJsZVByb3BlcnRpZXMucmVhZE9ubHkgPyB1bmRlZmluZWQgOiBjb2x1bW4ucmVxdWlyZWR9XG5cdFx0PlxuXHRcdFx0e3tcblx0XHRcdFx0Y3VzdG9tRGF0YTogY3JlYXRlQ3VzdG9tRGF0YShcInNob3dEYXRhRmllbGRzTGFiZWxcIiwgY29sdW1uLnNob3dEYXRhRmllbGRzTGFiZWwpLFxuXHRcdFx0XHRleHRlbmRlZFNldHRpbmdzOiA8UmVzcG9uc2l2ZUNvbHVtblNldHRpbmdzIGltcG9ydGFuY2U9e2NvbHVtbi5pbXBvcnRhbmNlfSAvPixcblx0XHRcdFx0dGVtcGxhdGU6IHRlbXBsYXRlcy50ZW1wbGF0ZSxcblx0XHRcdFx0Y3JlYXRpb25UZW1wbGF0ZTogdGVtcGxhdGVzLmNyZWF0aW9uVGVtcGxhdGVcblx0XHRcdH19XG5cdFx0PC9Db2x1bW4+XG5cdCk7XG59XG5cbi8qKlxuICogQ3JlYXRlIHRoZSB0ZW1wbGF0ZSBmb3IgYWxsIHRoZSBjb2x1bW5zIGluIHRoZSB0YWJsZS5cbiAqIEBwYXJhbSB0YWJsZVByb3BlcnRpZXMgVGhlIHRhYmxlIHByb3BlcnRpZXNcbiAqIEBwYXJhbSBjb2xsZWN0aW9uIFRoZSBjb2xsZWN0aW9uIGNvbnRleHQgdXNlZCBmb3IgY29udGV4dCBwYXRoXG4gKiBAcGFyYW0gaGFuZGxlclByb3ZpZGVyIFRoZSBoYW5kbGVyIHByb3ZpZGVyXG4gKiBAcmV0dXJucyBUaGUgWE1MIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIGNvbHVtbnMuXG4gKi9cbmZ1bmN0aW9uIGdldENvbHVtbnModGFibGVQcm9wZXJ0aWVzOiBUYWJsZUJsb2NrUHJvcGVydGllcywgY29sbGVjdGlvbjogQ29udGV4dCwgaGFuZGxlclByb3ZpZGVyOiBUYWJsZUV2ZW50SGFuZGxlclByb3ZpZGVyKTogQ29sdW1uW10ge1xuXHRjb25zdCB0YWJsZUlkID0gdGFibGVQcm9wZXJ0aWVzLmNvbnRlbnRJZDtcblx0cmV0dXJuIHRhYmxlUHJvcGVydGllcy50YWJsZURlZmluaXRpb24uY29sdW1uc1xuXHRcdC5tYXAoKGNvbHVtbikgPT4ge1xuXHRcdFx0aWYgKGNvbHVtbi5hdmFpbGFiaWxpdHkgPT09IFwiRGVmYXVsdFwiICYmIGNvbHVtbi50eXBlID09PSBcIkRlZmF1bHRcIikge1xuXHRcdFx0XHRMb2cuZXJyb3IoXCJDdXN0b20gY29sdW1ucyBkZWZpbmVkIGluIHRoZSBtYW5pZmVzdCBhcmUgbm90IHN1cHBvcnRlZCB3aGVuIHVzaW5nIGEgdGFibGUgYnVpbGRpbmcgYmxvY2suXCIpO1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJDdXN0b20gY29sdW1ucyBkZWZpbmVkIGluIHRoZSBtYW5pZmVzdCBhcmUgbm90IHN1cHBvcnRlZCB3aGVuIHVzaW5nIGEgdGFibGUgYnVpbGRpbmcgYmxvY2suXCIpO1xuXHRcdFx0fSBlbHNlIGlmIChjb2x1bW4uYXZhaWxhYmlsaXR5ID09PSBcIkRlZmF1bHRcIiAmJiBjb2x1bW4udHlwZSA9PT0gXCJBbm5vdGF0aW9uXCIpIHtcblx0XHRcdFx0cmV0dXJuIGdldENvbHVtblRlbXBsYXRlKHRhYmxlSWQsIHRhYmxlUHJvcGVydGllcywgY29sdW1uIGFzIEFubm90YXRpb25UYWJsZUNvbHVtbiwgY29sbGVjdGlvbiwgaGFuZGxlclByb3ZpZGVyKTtcblx0XHRcdH0gZWxzZSBpZiAoY29sdW1uLmF2YWlsYWJpbGl0eSA9PT0gXCJEZWZhdWx0XCIgJiYgY29sdW1uLnR5cGUgPT09IFwiU2xvdFwiKSB7XG5cdFx0XHRcdHJldHVybiBnZXRTbG90Q29sdW1uKHRhYmxlSWQsIGNvbHVtbiBhcyBDdXN0b21CYXNlZFRhYmxlQ29sdW1uLCB0YWJsZVByb3BlcnRpZXMucmVhZE9ubHkpO1xuXHRcdFx0fSBlbHNlIGlmIChjb2x1bW4uYXZhaWxhYmlsaXR5ID09PSBcIkRlZmF1bHRcIiAmJiBjb2x1bW4udHlwZSA9PT0gXCJDb21wdXRlZFwiKSB7XG5cdFx0XHRcdHJldHVybiBnZXRDb21wdXRlZENvbHVtbihcblx0XHRcdFx0XHR0YWJsZUlkLFxuXHRcdFx0XHRcdGNvbHVtbiBhcyBDb21wdXRlZFRhYmxlQ29sdW1uLFxuXHRcdFx0XHRcdGNvbGxlY3Rpb24sXG5cdFx0XHRcdFx0dGFibGVQcm9wZXJ0aWVzLnRhYmxlRGVmaW5pdGlvbi5lbmFibGVBbmFseXRpY3Ncblx0XHRcdFx0KTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHR9KVxuXHRcdC5maWx0ZXIoKGNvbHVtbikgPT4gY29sdW1uICE9PSB1bmRlZmluZWQpIGFzIENvbHVtbltdO1xufVxuXG5leHBvcnQgdHlwZSBUYWJsZUJsb2NrUHJvcGVydGllcyA9IE9taXQ8U3RyaWN0UHJvcGVydGllc09mPFRhYmxlQVBJPiwgXCJtZXRhUGF0aFwiIHwgXCJjb250ZXh0UGF0aFwiPiAmIHtcblx0Z2V0VHJhbnNsYXRlZFRleHQodGV4dDogc3RyaW5nLCBwYXJhbWV0ZXJzPzogdW5rbm93bltdLCBtZXRhUGF0aD86IHN0cmluZyk6IHN0cmluZztcblx0W1wiZmw6ZmxleGliaWxpdHlcIl0/OiBzdHJpbmc7XG59O1xuLyoqXG4gKiBEZXRlcm1pbmVzIHRoZSBkZXNpZ250aW1lIGZvciB0aGUgTURDIHRhYmxlLlxuICogQHJldHVybnMgVGhlIHZhbHVlIHRvIGJlIGFzc2lnbmVkIHRvIGR0OmRlc2lnbnRpbWVcbiAqL1xuZnVuY3Rpb24gZ2V0RGVzaWdudGltZSgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRyZXR1cm4gXCJzYXAvZmUvbWFjcm9zL3RhYmxlL2Rlc2lnbnRpbWUvVGFibGUuZGVzaWdudGltZVwiO1xufVxuXG4vKipcbiAqIE1hcHMgdGhlIGludGVybmFsIFAxM24gdGFibGUgbW9kZSAoc3RyaW5nKSB0byB0aGUgY29ycmVzcG9uZGluZyBNREMgZW51bS5cbiAqIEBwYXJhbSBzdHJpbmdNb2RlXG4gKiBAcmV0dXJucyBUaGUgTURDIGVudW0gdmFsdWVcbiAqL1xuZnVuY3Rpb24gZ2V0TURDUDEzbk1vZGUoc3RyaW5nTW9kZTogc3RyaW5nKTogVGFibGVQMTNuTW9kZSB7XG5cdHN3aXRjaCAoc3RyaW5nTW9kZSkge1xuXHRcdGNhc2UgXCJBZ2dyZWdhdGVcIjpcblx0XHRcdHJldHVybiBUYWJsZVAxM25Nb2RlLkFnZ3JlZ2F0ZTtcblx0XHRjYXNlIFwiU29ydFwiOlxuXHRcdFx0cmV0dXJuIFRhYmxlUDEzbk1vZGUuU29ydDtcblx0XHRjYXNlIFwiQ29sdW1uXCI6XG5cdFx0XHRyZXR1cm4gVGFibGVQMTNuTW9kZS5Db2x1bW47XG5cdFx0Y2FzZSBcIkZpbHRlclwiOlxuXHRcdFx0cmV0dXJuIFRhYmxlUDEzbk1vZGUuRmlsdGVyO1xuXHRcdGNhc2UgXCJHcm91cFwiOlxuXHRcdFx0cmV0dXJuIFRhYmxlUDEzbk1vZGUuR3JvdXA7XG5cdFx0ZGVmYXVsdDpcblx0XHRcdExvZy5lcnJvcihcIlVua25vd24gUDEzbiBtb2RlOiBcIiArIHN0cmluZ01vZGUpO1xuXHRcdFx0cmV0dXJuIFRhYmxlUDEzbk1vZGUuQ29sdW1uO1xuXHR9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRNRENUYWJsZVRlbXBsYXRlKHRhYmxlUHJvcGVydGllczogVGFibGVCbG9ja1Byb3BlcnRpZXMsIHBhcmFtZXRlcnM6IFRhYmxlVGVtcGxhdGluZ1BhcmFtZXRlcnMpOiBNRENUYWJsZSB7XG5cdC8vIEZvciBhIFRyZWVUYWJsZSBpbiBhIExpc3RSZXBvcnQgZGlzcGxheWluZyBhIGRyYWZ0LWVuYWJsZWQgZW50aXR5LCB3ZSBvbmx5IGRpc3BsYXkgYWN0aXZlIGluc3RhbmNlc1xuXHRjb25zdCBuYXZpZ2F0aW9uSW5mbyA9IHRhYmxlUHJvcGVydGllcy50YWJsZURlZmluaXRpb24uYW5ub3RhdGlvbj8ucm93Py5uYXZpZ2F0aW9uSW5mbyBhcyB7XG5cdFx0cm91dGVQYXRoPzogc3RyaW5nO1xuXHRcdG5hdmlnYXRpb25JbkVkaXRNb2RlPzogYm9vbGVhbjtcblx0fTtcblx0Y29uc3QgdGFyZ2V0ID0gbmF2aWdhdGlvbkluZm8/LnJvdXRlUGF0aDtcblx0bGV0IG5hdmlnYXRpb25JbkVkaXRNb2RlID0gZmFsc2U7XG5cdGlmICh0YXJnZXQpIHtcblx0XHRjb25zdCB0YXJnZXRJbmZvcm1hdGlvbiA9IHBhcmFtZXRlcnMuYXBwQ29tcG9uZW50LmdldFJvdXRpbmdTZXJ2aWNlKCkuX2dldFRhcmdldEluZm9ybWF0aW9uKHRhcmdldCk7XG5cdFx0bmF2aWdhdGlvbkluRWRpdE1vZGUgPSAodGFyZ2V0SW5mb3JtYXRpb24/Lm9wdGlvbnM/LnNldHRpbmdzPy5vcGVuSW5FZGl0TW9kZSBhcyBib29sZWFuIHwgdW5kZWZpbmVkKSA/PyBmYWxzZTtcblx0fVxuXG5cdGNvbnN0IHRhYmxlVHlwZSA9IHRhYmxlUHJvcGVydGllcy50YWJsZURlZmluaXRpb24uY29udHJvbC50eXBlO1xuXHRjb25zdCBjb250ZXh0T2JqZWN0UGF0aCA9IHRhYmxlUHJvcGVydGllcy5jb250ZXh0T2JqZWN0UGF0aDtcblx0Y29uc3QgZmlsdGVyT25BY3RpdmVFbnRpdGllcyA9XG5cdFx0KHRhYmxlVHlwZSA9PT0gXCJUcmVlVGFibGVcIiB8fCB0YWJsZVByb3BlcnRpZXMudGFibGVEZWZpbml0aW9uLmVuYWJsZUFuYWx5dGljcyA9PT0gdHJ1ZSkgJiZcblx0XHRjb250ZXh0T2JqZWN0UGF0aC5zdGFydGluZ0VudGl0eVNldCA9PT0gY29udGV4dE9iamVjdFBhdGgudGFyZ2V0RW50aXR5U2V0ICYmXG5cdFx0TW9kZWxIZWxwZXIuaXNPYmplY3RQYXRoRHJhZnRTdXBwb3J0ZWQoY29udGV4dE9iamVjdFBhdGgpO1xuXHRjb25zdCBkZWxlZ2F0ZSA9IFRhYmxlSGVscGVyLmdldERlbGVnYXRlKFxuXHRcdHRhYmxlUHJvcGVydGllcy50YWJsZURlZmluaXRpb24sXG5cdFx0dGFibGVQcm9wZXJ0aWVzLmlzQWxwID09PSB0cnVlLFxuXHRcdHRhYmxlUHJvcGVydGllcy50YWJsZURlZmluaXRpb24uYW5ub3RhdGlvbi5lbnRpdHlOYW1lLFxuXHRcdGZpbHRlck9uQWN0aXZlRW50aXRpZXNcblx0KTtcblx0Y29uc3QgaGVhZGVyVmlzaWJsZSA9IHRhYmxlUHJvcGVydGllcy5oZWFkZXJWaXNpYmxlID8/IHRhYmxlUHJvcGVydGllcy50YWJsZURlZmluaXRpb24uY29udHJvbC5oZWFkZXJWaXNpYmxlO1xuXHRjb25zdCBjdXJyZW50SGVhZGVyID0gdGFibGVQcm9wZXJ0aWVzLmhlYWRlciA/PyB0YWJsZVByb3BlcnRpZXMudGFibGVEZWZpbml0aW9uLmFubm90YXRpb24udGl0bGU7XG5cdGNvbnN0IGhlYWRlckJpbmRpbmdFeHByZXNzaW9uID0gYnVpbGRFeHByZXNzaW9uRm9ySGVhZGVyVmlzaWJsZShjdXJyZW50SGVhZGVyID8/IFwiXCIsIHRhYmxlUHJvcGVydGllcy50YWJUaXRsZSA/PyBcIlwiLCAhIWhlYWRlclZpc2libGUpO1xuXHRjb25zdCBwYXN0ZUFjdGlvbiA9IHRhYmxlUHJvcGVydGllcy50YWJsZURlZmluaXRpb24uYWN0aW9ucy5maW5kKChhKSA9PiBhLmtleSA9PT0gU3RhbmRhcmRBY3Rpb25LZXlzLlBhc3RlKTtcblx0Y29uc3QgY29sbGVjdGlvbkVudGl0eSA9IHBhcmFtZXRlcnMuY29udmVydGVkTWV0YWRhdGEucmVzb2x2ZVBhdGgodGFibGVQcm9wZXJ0aWVzLnRhYmxlRGVmaW5pdGlvbi5hbm5vdGF0aW9uLmNvbGxlY3Rpb24pLnRhcmdldCBhc1xuXHRcdHwgRW50aXR5U2V0XG5cdFx0fCBOYXZpZ2F0aW9uUHJvcGVydHk7XG5cdGNvbnN0IG1vZGVsQ29udGV4dENoYW5nZSA9IHRhYmxlVHlwZSA9PT0gXCJUcmVlVGFibGVcIiA/IHBhcmFtZXRlcnMuaGFuZGxlclByb3ZpZGVyLnRhYmxlQ29udGV4dENoYW5nZSA6IHVuZGVmaW5lZDtcblx0Y29uc3QgbGluZUl0ZW0gPSBUYWJsZUhlbHBlci5nZXRVaUxpbmVJdGVtT2JqZWN0KHBhcmFtZXRlcnMubWV0YVBhdGgsIHBhcmFtZXRlcnMuY29udmVydGVkTWV0YWRhdGEpIGFzXG5cdFx0fCBEYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb25bXVxuXHRcdHwgdW5kZWZpbmVkO1xuXHRjb25zdCBuYXZpZ2F0aW9uUGF0aCA9IHRhYmxlUHJvcGVydGllcy50YWJsZURlZmluaXRpb24uYW5ub3RhdGlvbi5uYXZpZ2F0aW9uUGF0aDtcblx0aWYgKHRhYmxlUHJvcGVydGllcy50YWJsZURlZmluaXRpb24uYW5ub3RhdGlvbi5jb2xsZWN0aW9uLnN0YXJ0c1dpdGgoXCIvXCIpICYmIGlzU2luZ2xldG9uKGNvbnRleHRPYmplY3RQYXRoLnN0YXJ0aW5nRW50aXR5U2V0KSkge1xuXHRcdHRhYmxlUHJvcGVydGllcy50YWJsZURlZmluaXRpb24uYW5ub3RhdGlvbi5jb2xsZWN0aW9uID0gbmF2aWdhdGlvblBhdGg7XG5cdH1cblxuXHRjb25zdCBjb2xsZWN0aW9uQ29udGV4dCA9IHBhcmFtZXRlcnMubWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KHRhYmxlUHJvcGVydGllcy50YWJsZURlZmluaXRpb24uYW5ub3RhdGlvbi5jb2xsZWN0aW9uKSE7XG5cdGNvbnN0IGRyYWZ0ID0gKGNvbGxlY3Rpb25FbnRpdHkgYXMgRW50aXR5U2V0KS5hbm5vdGF0aW9ucy5Db21tb24/LkRyYWZ0Um9vdDtcblx0Ly8gQWRkIHRoZSBkZWZpbml0aW9uIG9mIHRoZSBkZXNpZ250aW1lIGZpbGUgaWYgZGVzaWdudGltZSBpcyBlbmFibGVkIGZyb20gY29yZSBvciBsb2NhbGx5IHZpYSB1cmwgcGFyYW1ldGVyc1xuXHRjb25zdCB2YXJpYW50TWFuYWdlbWVudCA9IHRhYmxlUHJvcGVydGllcy52YXJpYW50TWFuYWdlbWVudCA/PyBcIk5vbmVcIjtcblx0Y29uc3QgZGVzaWdudGltZSA9IGdldERlc2lnbnRpbWUoKTtcblx0bGV0IHJvd0FjdGlvblR5cGU6IFRhYmxlUm93QWN0aW9uVHlwZSB8IHVuZGVmaW5lZDtcblx0aWYgKHRhYmxlUHJvcGVydGllcy5vdmVycmlkZVJvd1ByZXNzKSB7XG5cdFx0cm93QWN0aW9uVHlwZSA9IFRhYmxlUm93QWN0aW9uVHlwZS5OYXZpZ2F0aW9uO1xuXHR9XG5cdHJvd0FjdGlvblR5cGUgPz89XG5cdFx0dGFibGVQcm9wZXJ0aWVzLnRhYmxlRGVmaW5pdGlvbi5hbm5vdGF0aW9uLnJvdz8uYWN0aW9uVHlwZSA9PT0gXCJOYXZpZ2F0aW9uXCIgPyBUYWJsZVJvd0FjdGlvblR5cGUuTmF2aWdhdGlvbiA6IHVuZGVmaW5lZDtcblxuXHRjb25zdCBzaG93Q3JlYXRlID0gdGFibGVQcm9wZXJ0aWVzLnRhYmxlRGVmaW5pdGlvbi5hY3Rpb25zLmZpbmQoKGEpID0+IGEua2V5ID09PSBTdGFuZGFyZEFjdGlvbktleXMuQ3JlYXRlKT8udmlzaWJsZSB8fCB0cnVlO1xuXG5cdC8qKlxuXHQgKiBTcGVjaWZpZXMgd2hldGhlciB0aGUgYnV0dG9uIGlzIGhpZGRlbiB3aGVuIG5vIGRhdGEgaGFzIGJlZW4gZW50ZXJlZCB5ZXQgaW4gdGhlIHJvdyAodHJ1ZS9mYWxzZSkuIFRoZSBkZWZhdWx0IHNldHRpbmcgaXMgYGZhbHNlYC5cblx0ICovXG5cdGNvbnN0IHVwZGF0YWJsZVByb3BlcnR5UGF0aCA9IHRhYmxlUHJvcGVydGllcy50YWJsZURlZmluaXRpb24uYW5ub3RhdGlvbi51cGRhdGFibGVQcm9wZXJ0eVBhdGg7XG5cblx0bGV0IGN1cnJlbnRQZXJzb25hbGl6YXRpb246IFRhYmxlUDEzbk1vZGVbXSB8IHVuZGVmaW5lZDtcblx0c3dpdGNoICh0YWJsZVByb3BlcnRpZXMucGVyc29uYWxpemF0aW9uKSB7XG5cdFx0Y2FzZSBcImZhbHNlXCI6XG5cdFx0XHRjdXJyZW50UGVyc29uYWxpemF0aW9uID0gdW5kZWZpbmVkO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBcInRydWVcIjpcblx0XHRcdGN1cnJlbnRQZXJzb25hbGl6YXRpb24gPSBbVGFibGVQMTNuTW9kZS5Tb3J0LCBUYWJsZVAxM25Nb2RlLkNvbHVtbiwgVGFibGVQMTNuTW9kZS5GaWx0ZXJdO1xuXHRcdFx0aWYgKHRhYmxlVHlwZSA9PT0gXCJSZXNwb25zaXZlVGFibGVcIiB8fCB0YWJsZVByb3BlcnRpZXMudGFibGVEZWZpbml0aW9uLmVuYWJsZUFuYWx5dGljcyA9PT0gdHJ1ZSkge1xuXHRcdFx0XHRjdXJyZW50UGVyc29uYWxpemF0aW9uID0gWy4uLmN1cnJlbnRQZXJzb25hbGl6YXRpb24sIFRhYmxlUDEzbk1vZGUuR3JvdXBdO1xuXHRcdFx0fVxuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSB1bmRlZmluZWQ6XG5cdFx0XHRjdXJyZW50UGVyc29uYWxpemF0aW9uID0gdGFibGVQcm9wZXJ0aWVzLnRhYmxlRGVmaW5pdGlvbi5hbm5vdGF0aW9uLnAxM25Nb2RlPy5tYXAoKG1vZGUpID0+IGdldE1EQ1AxM25Nb2RlKG1vZGUpKTtcblx0XHRcdGJyZWFrO1xuXHRcdGRlZmF1bHQ6XG5cdFx0XHQvLyBJbiBjYXNlIGdyb3VwaW5nIG1vZGUgaXMgZGVmaW5lZCBleHBsaWNpdGVseSBvbiB0aGUgcGVyc29uYWxpemF0aW9uLCB3ZSBvbmx5IGVuYWJsZSBpdCBmb3IgdGhlIGFuYWx5dGljYWwgYW5kIHJlc3BvbnNpdmUgdGFibGUuXG5cdFx0XHRpZiAodGFibGVUeXBlID09PSBcIlJlc3BvbnNpdmVUYWJsZVwiIHx8IHRhYmxlUHJvcGVydGllcy50YWJsZURlZmluaXRpb24uZW5hYmxlQW5hbHl0aWNzID09PSB0cnVlKSB7XG5cdFx0XHRcdGN1cnJlbnRQZXJzb25hbGl6YXRpb24gPSB0YWJsZVByb3BlcnRpZXMucGVyc29uYWxpemF0aW9uLnNwbGl0KFwiLFwiKS5tYXAoKG1vZGUpID0+IGdldE1EQ1AxM25Nb2RlKG1vZGUudHJpbSgpKSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjb25zdCBleGNsdWRlR3JvdXBGcm9tUDEzbiA9IHRhYmxlUHJvcGVydGllcy5wZXJzb25hbGl6YXRpb25cblx0XHRcdFx0XHQuc3BsaXQoXCIsXCIpXG5cdFx0XHRcdFx0LmZpbHRlcigobW9kZSkgPT4gZ2V0TURDUDEzbk1vZGUobW9kZS50cmltKCkpICE9PSBUYWJsZVAxM25Nb2RlLkdyb3VwKSBhcyBUYWJsZVAxM25Nb2RlW107XG5cdFx0XHRcdGN1cnJlbnRQZXJzb25hbGl6YXRpb24gPSBleGNsdWRlR3JvdXBGcm9tUDEzbi5sZW5ndGggPyBleGNsdWRlR3JvdXBGcm9tUDEzbiA6IHVuZGVmaW5lZDtcblx0XHRcdH1cblx0fVxuXG5cdGNvbnN0IG11bHRpU2VsZWN0RGlzYWJsZWRBY3Rpb25zID0gQWN0aW9uSGVscGVyLmdldE11bHRpU2VsZWN0RGlzYWJsZWRBY3Rpb25zKGxpbmVJdGVtKTtcblxuXHRjb25zdCBjdXN0b21EYXRhID0gW1xuXHRcdHsga2V5OiBcImtpbmRcIiwgdmFsdWU6IGNvbGxlY3Rpb25FbnRpdHkuX3R5cGUgfSxcblx0XHR7IGtleTogXCJuYXZpZ2F0aW9uUGF0aFwiLCB2YWx1ZTogbmF2aWdhdGlvblBhdGggfSxcblx0XHR7IGtleTogXCJlbmFibGVBbmFseXRpY3NcIiwgdmFsdWU6IHRhYmxlUHJvcGVydGllcy50YWJsZURlZmluaXRpb24uZW5hYmxlQW5hbHl0aWNzIH0sXG5cdFx0eyBrZXk6IFwiY3JlYXRpb25Nb2RlXCIsIHZhbHVlOiB0YWJsZVByb3BlcnRpZXMuY3JlYXRpb25Nb2RlPy5uYW1lIH0sXG5cdFx0eyBrZXk6IFwiaW5saW5lQ3JlYXRpb25Sb3dDb3VudFwiLCB2YWx1ZTogdGFibGVQcm9wZXJ0aWVzLnRhYmxlRGVmaW5pdGlvbi5jb250cm9sLmlubGluZUNyZWF0aW9uUm93Q291bnQgfSxcblx0XHR7IGtleTogXCJzaG93Q3JlYXRlXCIsIHZhbHVlOiBzaG93Q3JlYXRlIH0sXG5cdFx0eyBrZXk6IFwiY3JlYXRlQXRFbmRcIiwgdmFsdWU6IHRhYmxlUHJvcGVydGllcy5jcmVhdGlvbk1vZGU/LmNyZWF0ZUF0RW5kIH0sXG5cdFx0eyBrZXk6IFwiZGlzcGxheU1vZGVQcm9wZXJ0eUJpbmRpbmdcIiwgdmFsdWU6IHRhYmxlUHJvcGVydGllcy5yZWFkT25seSB9LFxuXHRcdHsga2V5OiBcInRhYmxlVHlwZVwiLCB2YWx1ZTogdGFibGVUeXBlIH0sXG5cdFx0eyBrZXk6IFwidGFyZ2V0Q29sbGVjdGlvblBhdGhcIiwgdmFsdWU6IGNvbGxlY3Rpb25Db250ZXh0LmdldFBhdGgoKSB9LFxuXHRcdHsga2V5OiBcImVudGl0eVR5cGVcIiwgdmFsdWU6IGNvbGxlY3Rpb25Db250ZXh0LmdldFBhdGgoKSArIFwiL1wiIH0sXG5cdFx0eyBrZXk6IFwibWV0YVBhdGhcIiwgdmFsdWU6IGNvbGxlY3Rpb25Db250ZXh0LmdldFBhdGgoKSB9LFxuXHRcdHsga2V5OiBcImhpZGRlbkZpbHRlcnNcIiwgdmFsdWU6IHRhYmxlUHJvcGVydGllcy50YWJsZURlZmluaXRpb24uY29udHJvbC5maWx0ZXJzPy5oaWRkZW5GaWx0ZXJzIH0sXG5cdFx0eyBrZXk6IFwicmVxdWVzdEdyb3VwSWRcIiwgdmFsdWU6IFwiJGF1dG8uV29ya2Vyc1wiIH0sXG5cdFx0eyBrZXk6IFwic2VnbWVudGVkQnV0dG9uSWRcIiwgdmFsdWU6IGdlbmVyYXRlKFt0YWJsZVByb3BlcnRpZXMuY29udGVudElkLCBcIlNlZ21lbnRlZEJ1dHRvblwiLCBcIlRlbXBsYXRlQ29udGVudFZpZXdcIl0pIH0sXG5cdFx0eyBrZXk6IFwiZGlzYWJsZUNvcHlUb0NsaXBib2FyZFwiLCB2YWx1ZTogdGFibGVQcm9wZXJ0aWVzLnRhYmxlRGVmaW5pdGlvbi5jb250cm9sLmRpc2FibGVDb3B5VG9DbGlwYm9hcmQgfSxcblx0XHR7IGtleTogXCJkcmFmdFwiLCB2YWx1ZTogZHJhZnQgfSxcblx0XHR7IGtleTogXCJuYXZpZ2F0aW9uQXZhaWxhYmxlTWFwXCIsIHZhbHVlOiBUYWJsZUhlbHBlci5nZXROYXZpZ2F0aW9uQXZhaWxhYmxlTWFwKGxpbmVJdGVtKSB9LFxuXHRcdHtcblx0XHRcdGtleTogXCJhY3Rpb25zTXVsdGlzZWxlY3REaXNhYmxlZFwiLFxuXHRcdFx0dmFsdWU6IG11bHRpU2VsZWN0RGlzYWJsZWRBY3Rpb25zLmxlbmd0aCA+IDAgPyBtdWx0aVNlbGVjdERpc2FibGVkQWN0aW9ucy5qb2luKFwiLFwiKSA6IHVuZGVmaW5lZFxuXHRcdH0sXG5cdFx0eyBrZXk6IFwidXBkYXRhYmxlUHJvcGVydHlQYXRoXCIsIHZhbHVlOiB1cGRhdGFibGVQcm9wZXJ0eVBhdGggfHwgXCJcIiB9LFxuXHRcdHsga2V5OiBcImV4cG9ydFJlcXVlc3RTaXplXCIsIHZhbHVlOiB0YWJsZVByb3BlcnRpZXMudGFibGVEZWZpbml0aW9uLmNvbnRyb2wuZXhwb3J0UmVxdWVzdFNpemUgfVxuXHRdO1xuXG5cdHJldHVybiAoXG5cdFx0PE1EQ1RhYmxlXG5cdFx0XHRjb3JlOnJlcXVpcmU9e2dldENvcmVSZXF1aXJlKHRhYmxlUHJvcGVydGllcy50YWJsZURlZmluaXRpb24pfVxuXHRcdFx0Zmw6ZmxleGliaWxpdHk9e3RhYmxlUHJvcGVydGllc1tcImZsOmZsZXhpYmlsaXR5XCJdfVxuXHRcdFx0c29ydENvbmRpdGlvbnM9e3RhYmxlUHJvcGVydGllcy50YWJsZURlZmluaXRpb24uYW5ub3RhdGlvbi5zb3J0Q29uZGl0aW9uc31cblx0XHRcdGdyb3VwQ29uZGl0aW9ucz17dGFibGVQcm9wZXJ0aWVzLnRhYmxlRGVmaW5pdGlvbi5hbm5vdGF0aW9uLmdyb3VwQ29uZGl0aW9uc31cblx0XHRcdGFnZ3JlZ2F0ZUNvbmRpdGlvbnM9e3RhYmxlUHJvcGVydGllcy50YWJsZURlZmluaXRpb24uYW5ub3RhdGlvbi5hZ2dyZWdhdGVDb25kaXRpb25zfVxuXHRcdFx0ZHQ6ZGVzaWdudGltZT17ZGVzaWdudGltZX1cblx0XHRcdGlkPXt0YWJsZVByb3BlcnRpZXMuY29udGVudElkfVxuXHRcdFx0YnVzeUluZGljYXRvckRlbGF5PXswfVxuXHRcdFx0ZW5hYmxlRXhwb3J0PXt0YWJsZVByb3BlcnRpZXMudGFibGVEZWZpbml0aW9uLmNvbnRyb2wuZW5hYmxlRXhwb3J0fVxuXHRcdFx0ZGVsZWdhdGU9e0pTT04ucGFyc2UoZGVsZWdhdGUpfVxuXHRcdFx0cm93UHJlc3M9e3RhYmxlVHlwZSA9PT0gXCJSZXNwb25zaXZlVGFibGVcIiA/IHBhcmFtZXRlcnMuaGFuZGxlclByb3ZpZGVyLnJvd1ByZXNzIDogdW5kZWZpbmVkfVxuXHRcdFx0YmVmb3JlT3BlbkNvbnRleHRNZW51PXtwYXJhbWV0ZXJzLmhhbmRsZXJQcm92aWRlci5iZWZvcmVPcGVuQ29udGV4dE1lbnV9XG5cdFx0XHRhdXRvQmluZE9uSW5pdD17dGFibGVQcm9wZXJ0aWVzLnVzZUJhc2ljU2VhcmNoIHx8ICF0YWJsZVByb3BlcnRpZXMuZmlsdGVyQmFyfVxuXHRcdFx0c2VsZWN0aW9uTW9kZT17dGFibGVQcm9wZXJ0aWVzLnRhYmxlRGVmaW5pdGlvbi5hbm5vdGF0aW9uLnNlbGVjdGlvbk1vZGUgfHwgXCJOb25lXCJ9XG5cdFx0XHRzZWxlY3Rpb25DaGFuZ2U9e3BhcmFtZXRlcnMuaGFuZGxlclByb3ZpZGVyLnNlbGVjdGlvbkNoYW5nZX1cblx0XHRcdHNob3dSb3dDb3VudD17dGFibGVQcm9wZXJ0aWVzLnRhYmxlRGVmaW5pdGlvbi5jb250cm9sLnNob3dSb3dDb3VudH1cblx0XHRcdGhlYWRlcj17Y3VycmVudEhlYWRlcn1cblx0XHRcdGhlYWRlclZpc2libGU9e2hlYWRlckJpbmRpbmdFeHByZXNzaW9ufVxuXHRcdFx0aGVhZGVyTGV2ZWw9e3RhYmxlUHJvcGVydGllcy5oZWFkZXJMZXZlbH1cblx0XHRcdGhlYWRlclN0eWxlPXt0YWJsZVByb3BlcnRpZXMuaGVhZGVyU3R5bGV9XG5cdFx0XHR0aHJlc2hvbGQ9e3RhYmxlUHJvcGVydGllcy50YWJsZURlZmluaXRpb24uY29udHJvbC50aHJlc2hvbGQgPz8gdGFibGVQcm9wZXJ0aWVzLnRhYmxlRGVmaW5pdGlvbi5hbm5vdGF0aW9uLnRocmVzaG9sZH1cblx0XHRcdHAxM25Nb2RlPXtjdXJyZW50UGVyc29uYWxpemF0aW9ufVxuXHRcdFx0cGFzdGU9e3BhcmFtZXRlcnMuaGFuZGxlclByb3ZpZGVyLmdldFBhc3RlSGFuZGxlcihmYWxzZSl9XG5cdFx0XHRiZWZvcmVFeHBvcnQ9e3BhcmFtZXRlcnMuaGFuZGxlclByb3ZpZGVyLmJlZm9yZUV4cG9ydH1cblx0XHRcdGNsYXNzPXt0YWJsZVByb3BlcnRpZXMudGFibGVEZWZpbml0aW9uLmNvbnRyb2wudXNlQ29uZGVuc2VkVGFibGVMYXlvdXQgPT09IHRydWUgPyBcInNhcFVpU2l6ZUNvbmRlbnNlZFwiIDogdW5kZWZpbmVkfVxuXHRcdFx0bXVsdGlTZWxlY3RNb2RlPXt0YWJsZVByb3BlcnRpZXMudGFibGVEZWZpbml0aW9uLmNvbnRyb2wubXVsdGlTZWxlY3RNb2RlfVxuXHRcdFx0c2hvd1Bhc3RlQnV0dG9uPXt0YWJsZVR5cGUgPT09IFwiVHJlZVRhYmxlXCIgPyBmYWxzZSA6IHBhc3RlQWN0aW9uPy52aXNpYmxlfVxuXHRcdFx0ZW5hYmxlUGFzdGU9e3RhYmxlVHlwZSA9PT0gXCJUcmVlVGFibGVcIiA/IGZhbHNlIDogcGFzdGVBY3Rpb24/LmVuYWJsZWR9XG5cdFx0XHRtb2RlbENvbnRleHRDaGFuZ2U9e21vZGVsQ29udGV4dENoYW5nZX1cblx0XHQ+XG5cdFx0XHR7e1xuXHRcdFx0XHRjdXN0b21EYXRhOiBjcmVhdGVDdXN0b21EYXRhcyhjdXN0b21EYXRhKSxcblx0XHRcdFx0ZGF0YVN0YXRlSW5kaWNhdG9yOiBnZXREYXRhU3RhdGVJbmRpY2F0b3IocGFyYW1ldGVycy5oYW5kbGVyUHJvdmlkZXIpLFxuXHRcdFx0XHR0eXBlOiBnZXRUYWJsZVR5cGUoXG5cdFx0XHRcdFx0dGFibGVQcm9wZXJ0aWVzLnRhYmxlRGVmaW5pdGlvbixcblx0XHRcdFx0XHRjb2xsZWN0aW9uQ29udGV4dCxcblx0XHRcdFx0XHR0YWJsZVR5cGUsXG5cdFx0XHRcdFx0dGFibGVQcm9wZXJ0aWVzLnRhYmxlRGVmaW5pdGlvbi5jb250cm9sLnNlbGVjdGlvbkxpbWl0XG5cdFx0XHRcdCksXG5cdFx0XHRcdGRlcGVuZGVudHM6IGdldERlcGVuZGVudHModGFibGVQcm9wZXJ0aWVzLCBwYXJhbWV0ZXJzLCB2YXJpYW50TWFuYWdlbWVudCwgY29sbGVjdGlvbkNvbnRleHQpLFxuXHRcdFx0XHRhY3Rpb25zOiBnZXRBY3Rpb25zKHRhYmxlUHJvcGVydGllcywgcGFyYW1ldGVycywgY29sbGVjdGlvbkNvbnRleHQsIGNvbGxlY3Rpb25FbnRpdHkpLFxuXHRcdFx0XHRyb3dTZXR0aW5nczogZ2V0Um93U2V0dGluZ3ModGFibGVQcm9wZXJ0aWVzLnRhYmxlRGVmaW5pdGlvbiwgcm93QWN0aW9uVHlwZSwgdGFibGVUeXBlLCBwYXJhbWV0ZXJzLmhhbmRsZXJQcm92aWRlciksXG5cdFx0XHRcdGNvbnRleHRNZW51OiBnZXRDb250ZXh0TWVudShcblx0XHRcdFx0XHR0YWJsZVByb3BlcnRpZXMsXG5cdFx0XHRcdFx0cGFyYW1ldGVycyxcblx0XHRcdFx0XHRjb2xsZWN0aW9uRW50aXR5LFxuXHRcdFx0XHRcdHJvd0FjdGlvblR5cGUsXG5cdFx0XHRcdFx0Y29sbGVjdGlvbkNvbnRleHQsXG5cdFx0XHRcdFx0bmF2aWdhdGlvbkluRWRpdE1vZGVcblx0XHRcdFx0KSxcblx0XHRcdFx0Y29sdW1uczogZ2V0Q29sdW1ucyh0YWJsZVByb3BlcnRpZXMsIGNvbGxlY3Rpb25Db250ZXh0LCBwYXJhbWV0ZXJzLmhhbmRsZXJQcm92aWRlciksXG5cdFx0XHRcdGRyYWdEcm9wQ29uZmlnOiBnZXREcmFnQW5kRHJvcENvbmZpZyh0YWJsZVByb3BlcnRpZXMsIHBhcmFtZXRlcnMuaGFuZGxlclByb3ZpZGVyKSxcblx0XHRcdFx0Y3JlYXRpb25Sb3c6IGdldENyZWF0aW9uUm93KHRhYmxlUHJvcGVydGllcywgcGFyYW1ldGVycy5oYW5kbGVyUHJvdmlkZXIpLFxuXHRcdFx0XHR2YXJpYW50OiBnZXRWYXJpYW50TWFuYWdlbWVudChcblx0XHRcdFx0XHR2YXJpYW50TWFuYWdlbWVudCxcblx0XHRcdFx0XHR0YWJsZVByb3BlcnRpZXMuY29udGVudElkLFxuXHRcdFx0XHRcdHRhYmxlUHJvcGVydGllcy5oZWFkZXJMZXZlbCxcblx0XHRcdFx0XHRwYXJhbWV0ZXJzLmhhbmRsZXJQcm92aWRlclxuXHRcdFx0XHQpLFxuXHRcdFx0XHRxdWlja0ZpbHRlcjogZ2V0UXVpY2tGaWx0ZXIodGFibGVQcm9wZXJ0aWVzKSxcblx0XHRcdFx0Y29weVByb3ZpZGVyOiBnZXRDb3B5UHJvdmlkZXIodGFibGVQcm9wZXJ0aWVzKSxcblx0XHRcdFx0Y2VsbFNlbGVjdG9yOiBnZXRDZWxsU2VsZWN0b3IodGFibGVQcm9wZXJ0aWVzKVxuXHRcdFx0fX1cblx0XHQ8L01EQ1RhYmxlPlxuXHQpO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztFQThHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBQ0EsU0FBU0EsWUFBWUEsQ0FDcEJDLGVBQW1DLEVBQ25DQyxXQUFvQixFQUNwQkMsU0FBb0IsRUFDcEJDLGNBQXNCLEVBQ2dDO0lBQ3RELE1BQU1DLFVBQVUsR0FBR0gsV0FBVyxDQUFDSSxTQUFTLENBQUMsQ0FBQztJQUMxQyxRQUFRSCxTQUFTO01BQ2hCLEtBQUssV0FBVztRQUNmLE9BQ0NJLElBQUEsQ0FBQ0MsYUFBYTtVQUNiQyxZQUFZLEVBQUVSLGVBQWUsQ0FBQ1MsT0FBTyxDQUFDRCxZQUFhO1VBQ25ERSxRQUFRLEVBQUVWLGVBQWUsQ0FBQ1MsT0FBTyxDQUFDQyxRQUFTO1VBQzNDUCxjQUFjLEVBQUVBLGNBQWU7VUFDL0JRLGdCQUFnQixFQUFFWCxlQUFlLENBQUNTLE9BQU8sQ0FBQ0csaUJBQWtCO1VBQzVEQyxlQUFlLEVBQUViLGVBQWUsQ0FBQ1MsT0FBTyxDQUFDSSxlQUFnQjtVQUN6REMsa0JBQWtCLEVB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