@sapui5/sap.fe.core 1.135.0 → 1.136.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (217) hide show
  1. package/package.json +1 -1
  2. package/src/sap/fe/core/.library +1 -1
  3. package/src/sap/fe/core/ActionRuntime.js +3 -2
  4. package/src/sap/fe/core/ActionRuntime.ts +3 -1
  5. package/src/sap/fe/core/AppComponent.js +6 -4
  6. package/src/sap/fe/core/AppComponent.ts +3 -1
  7. package/src/sap/fe/core/AppStateHandler.js +8 -6
  8. package/src/sap/fe/core/AppStateHandler.ts +7 -5
  9. package/src/sap/fe/core/CommonUtils.js +4 -1
  10. package/src/sap/fe/core/CommonUtils.ts +12 -2
  11. package/src/sap/fe/core/ExtensionAPI.js +5 -3
  12. package/src/sap/fe/core/ExtensionAPI.ts +4 -2
  13. package/src/sap/fe/core/PageController.js +13 -1
  14. package/src/sap/fe/core/PageController.ts +13 -0
  15. package/src/sap/fe/core/buildingBlocks/BuildingBlock.js +13 -5
  16. package/src/sap/fe/core/buildingBlocks/BuildingBlock.ts +19 -6
  17. package/src/sap/fe/core/controllerextensions/BaseControllerExtension.js +4 -2
  18. package/src/sap/fe/core/controllerextensions/BaseControllerExtension.ts +3 -1
  19. package/src/sap/fe/core/controllerextensions/EditFlow.js +58 -14
  20. package/src/sap/fe/core/controllerextensions/EditFlow.ts +71 -11
  21. package/src/sap/fe/core/controllerextensions/InlineEditFlow.js +184 -17
  22. package/src/sap/fe/core/controllerextensions/InlineEditFlow.ts +204 -12
  23. package/src/sap/fe/core/controllerextensions/InternalRouting.js +12 -3
  24. package/src/sap/fe/core/controllerextensions/InternalRouting.ts +11 -1
  25. package/src/sap/fe/core/controllerextensions/MessageHandler.js +35 -5
  26. package/src/sap/fe/core/controllerextensions/MessageHandler.ts +41 -1
  27. package/src/sap/fe/core/controllerextensions/Routing.js +6 -6
  28. package/src/sap/fe/core/controllerextensions/Routing.ts +2 -2
  29. package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.js +3 -11
  30. package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.ts +2 -10
  31. package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.js +11 -1
  32. package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.ts +12 -0
  33. package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.js +21 -6
  34. package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.ts +19 -5
  35. package/src/sap/fe/core/controllerextensions/editFlow/draft.js +17 -14
  36. package/src/sap/fe/core/controllerextensions/editFlow/draft.ts +19 -17
  37. package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.js +2 -2
  38. package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.ts +4 -1
  39. package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataOperation.js +10 -2
  40. package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataOperation.ts +8 -2
  41. package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataStrictHandling.js +2 -2
  42. package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataStrictHandling.ts +1 -1
  43. package/src/sap/fe/core/controllerextensions/editFlow/operations/Operation.js +1 -1
  44. package/src/sap/fe/core/controllerextensions/editFlow/operations/Operation.ts +33 -31
  45. package/src/sap/fe/core/controllerextensions/editFlow/operations/facade.js +2 -2
  46. package/src/sap/fe/core/controllerextensions/editFlow/operations/facade.ts +3 -3
  47. package/src/sap/fe/core/controllerextensions/editFlow/sticky.js +4 -1
  48. package/src/sap/fe/core/controllerextensions/editFlow/sticky.ts +2 -1
  49. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DraftDataLossDialog.js +2 -2
  50. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DraftDataLossDialog.tsx +8 -1
  51. package/src/sap/fe/core/controls/HideFormGroupAutomatically.js +4 -3
  52. package/src/sap/fe/core/controls/HideFormGroupAutomatically.ts +7 -2
  53. package/src/sap/fe/core/controls/inlineEditFlow/BeforeActionDialog.js +68 -0
  54. package/src/sap/fe/core/controls/inlineEditFlow/BeforeActionDialog.tsx +52 -0
  55. package/src/sap/fe/core/controls/inlineEditFlow/BeforeNavigationDialog.js +144 -0
  56. package/src/sap/fe/core/controls/inlineEditFlow/BeforeNavigationDialog.tsx +128 -0
  57. package/src/sap/fe/core/controls/inlineEditFlow/DraftExistsDialog.js +53 -0
  58. package/src/sap/fe/core/controls/inlineEditFlow/DraftExistsDialog.tsx +39 -0
  59. package/src/sap/fe/core/converters/ManifestSettings.js +1 -1
  60. package/src/sap/fe/core/converters/ManifestSettings.ts +18 -8
  61. package/src/sap/fe/core/converters/controls/Common/Action.js +54 -5
  62. package/src/sap/fe/core/converters/controls/Common/Action.ts +59 -3
  63. package/src/sap/fe/core/converters/controls/Common/Chart.js +22 -4
  64. package/src/sap/fe/core/converters/controls/Common/Chart.ts +23 -4
  65. package/src/sap/fe/core/converters/controls/Common/Form.js +13 -4
  66. package/src/sap/fe/core/converters/controls/Common/Form.ts +13 -3
  67. package/src/sap/fe/core/converters/controls/Common/Table.js +29 -9
  68. package/src/sap/fe/core/converters/controls/Common/Table.ts +38 -8
  69. package/src/sap/fe/core/converters/controls/Common/table/Columns.js +14 -16
  70. package/src/sap/fe/core/converters/controls/Common/table/Columns.ts +61 -96
  71. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +62 -13
  72. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +75 -13
  73. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +4 -33
  74. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +4 -44
  75. package/src/sap/fe/core/converters/controls/ListReport/FilterField.js +106 -0
  76. package/src/sap/fe/core/converters/controls/ListReport/FilterField.ts +129 -0
  77. package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.js +9 -4
  78. package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.ts +8 -3
  79. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js +7 -2
  80. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +5 -1
  81. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +29 -7
  82. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +40 -16
  83. package/src/sap/fe/core/designtime/AnnotationBasedChanges.js +34 -16
  84. package/src/sap/fe/core/designtime/AnnotationBasedChanges.ts +35 -16
  85. package/src/sap/fe/core/designtime/messagebundle_ar.properties +7 -0
  86. package/src/sap/fe/core/designtime/messagebundle_bg.properties +7 -0
  87. package/src/sap/fe/core/designtime/messagebundle_ca.properties +7 -0
  88. package/src/sap/fe/core/designtime/messagebundle_cnr.properties +7 -0
  89. package/src/sap/fe/core/designtime/messagebundle_cs.properties +7 -0
  90. package/src/sap/fe/core/designtime/messagebundle_cy.properties +7 -0
  91. package/src/sap/fe/core/designtime/messagebundle_da.properties +7 -0
  92. package/src/sap/fe/core/designtime/messagebundle_de.properties +7 -0
  93. package/src/sap/fe/core/designtime/messagebundle_el.properties +7 -0
  94. package/src/sap/fe/core/designtime/messagebundle_en.properties +7 -0
  95. package/src/sap/fe/core/designtime/messagebundle_en_GB.properties +7 -0
  96. package/src/sap/fe/core/designtime/messagebundle_es.properties +7 -0
  97. package/src/sap/fe/core/designtime/messagebundle_es_MX.properties +7 -0
  98. package/src/sap/fe/core/designtime/messagebundle_et.properties +7 -0
  99. package/src/sap/fe/core/designtime/messagebundle_fi.properties +7 -0
  100. package/src/sap/fe/core/designtime/messagebundle_fr.properties +7 -0
  101. package/src/sap/fe/core/designtime/messagebundle_fr_CA.properties +7 -0
  102. package/src/sap/fe/core/designtime/messagebundle_hi.properties +7 -0
  103. package/src/sap/fe/core/designtime/messagebundle_hr.properties +7 -0
  104. package/src/sap/fe/core/designtime/messagebundle_hu.properties +7 -0
  105. package/src/sap/fe/core/designtime/messagebundle_id.properties +7 -0
  106. package/src/sap/fe/core/designtime/messagebundle_it.properties +7 -0
  107. package/src/sap/fe/core/designtime/messagebundle_iw.properties +7 -0
  108. package/src/sap/fe/core/designtime/messagebundle_ja.properties +7 -0
  109. package/src/sap/fe/core/designtime/messagebundle_kk.properties +7 -0
  110. package/src/sap/fe/core/designtime/messagebundle_ko.properties +7 -0
  111. package/src/sap/fe/core/designtime/messagebundle_lt.properties +7 -0
  112. package/src/sap/fe/core/designtime/messagebundle_lv.properties +7 -0
  113. package/src/sap/fe/core/designtime/messagebundle_mk.properties +7 -0
  114. package/src/sap/fe/core/designtime/messagebundle_ms.properties +7 -0
  115. package/src/sap/fe/core/designtime/messagebundle_nl.properties +7 -0
  116. package/src/sap/fe/core/designtime/messagebundle_no.properties +7 -0
  117. package/src/sap/fe/core/designtime/messagebundle_pl.properties +7 -0
  118. package/src/sap/fe/core/designtime/messagebundle_pt.properties +7 -0
  119. package/src/sap/fe/core/designtime/messagebundle_pt_PT.properties +7 -0
  120. package/src/sap/fe/core/designtime/messagebundle_ro.properties +7 -0
  121. package/src/sap/fe/core/designtime/messagebundle_ru.properties +7 -0
  122. package/src/sap/fe/core/designtime/messagebundle_sh.properties +7 -0
  123. package/src/sap/fe/core/designtime/messagebundle_sk.properties +7 -0
  124. package/src/sap/fe/core/designtime/messagebundle_sl.properties +7 -0
  125. package/src/sap/fe/core/designtime/messagebundle_sr.properties +7 -0
  126. package/src/sap/fe/core/designtime/messagebundle_sv.properties +7 -0
  127. package/src/sap/fe/core/designtime/messagebundle_th.properties +7 -0
  128. package/src/sap/fe/core/designtime/messagebundle_tr.properties +7 -0
  129. package/src/sap/fe/core/designtime/messagebundle_uk.properties +7 -0
  130. package/src/sap/fe/core/designtime/messagebundle_vi.properties +7 -0
  131. package/src/sap/fe/core/designtime/messagebundle_zh_CN.properties +7 -0
  132. package/src/sap/fe/core/designtime/messagebundle_zh_TW.properties +7 -0
  133. package/src/sap/fe/core/fpm/manifest.json +1 -1
  134. package/src/sap/fe/core/helpers/AppStartupHelper.js +24 -3
  135. package/src/sap/fe/core/helpers/AppStartupHelper.ts +28 -2
  136. package/src/sap/fe/core/helpers/BindingHelper.js +3 -2
  137. package/src/sap/fe/core/helpers/BindingHelper.ts +2 -1
  138. package/src/sap/fe/core/helpers/DeleteHelper.js +4 -9
  139. package/src/sap/fe/core/helpers/DeleteHelper.ts +3 -8
  140. package/src/sap/fe/core/helpers/ModelHelper.js +14 -4
  141. package/src/sap/fe/core/helpers/ModelHelper.ts +15 -4
  142. package/src/sap/fe/core/helpers/PasteHelper.js +38 -39
  143. package/src/sap/fe/core/helpers/PasteHelper.ts +49 -51
  144. package/src/sap/fe/core/helpers/WebSocket.js +10 -1
  145. package/src/sap/fe/core/helpers/WebSocket.ts +8 -0
  146. package/src/sap/fe/core/library.js +1 -1
  147. package/src/sap/fe/core/messagebundle.properties +41 -2
  148. package/src/sap/fe/core/messagebundle_ar.properties +23 -2
  149. package/src/sap/fe/core/messagebundle_bg.properties +23 -2
  150. package/src/sap/fe/core/messagebundle_ca.properties +21 -0
  151. package/src/sap/fe/core/messagebundle_cnr.properties +23 -2
  152. package/src/sap/fe/core/messagebundle_cs.properties +21 -0
  153. package/src/sap/fe/core/messagebundle_cy.properties +21 -0
  154. package/src/sap/fe/core/messagebundle_da.properties +23 -2
  155. package/src/sap/fe/core/messagebundle_de.properties +23 -2
  156. package/src/sap/fe/core/messagebundle_el.properties +21 -0
  157. package/src/sap/fe/core/messagebundle_en.properties +23 -2
  158. package/src/sap/fe/core/messagebundle_en_GB.properties +23 -2
  159. package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +23 -2
  160. package/src/sap/fe/core/messagebundle_es.properties +21 -0
  161. package/src/sap/fe/core/messagebundle_es_MX.properties +21 -0
  162. package/src/sap/fe/core/messagebundle_et.properties +21 -0
  163. package/src/sap/fe/core/messagebundle_fi.properties +21 -0
  164. package/src/sap/fe/core/messagebundle_fr.properties +22 -1
  165. package/src/sap/fe/core/messagebundle_fr_CA.properties +21 -0
  166. package/src/sap/fe/core/messagebundle_hi.properties +22 -1
  167. package/src/sap/fe/core/messagebundle_hr.properties +24 -3
  168. package/src/sap/fe/core/messagebundle_hu.properties +21 -0
  169. package/src/sap/fe/core/messagebundle_id.properties +21 -0
  170. package/src/sap/fe/core/messagebundle_it.properties +23 -2
  171. package/src/sap/fe/core/messagebundle_iw.properties +21 -0
  172. package/src/sap/fe/core/messagebundle_ja.properties +21 -0
  173. package/src/sap/fe/core/messagebundle_kk.properties +21 -0
  174. package/src/sap/fe/core/messagebundle_ko.properties +21 -0
  175. package/src/sap/fe/core/messagebundle_lt.properties +21 -0
  176. package/src/sap/fe/core/messagebundle_lv.properties +23 -2
  177. package/src/sap/fe/core/messagebundle_mk.properties +21 -0
  178. package/src/sap/fe/core/messagebundle_ms.properties +22 -1
  179. package/src/sap/fe/core/messagebundle_nl.properties +21 -0
  180. package/src/sap/fe/core/messagebundle_no.properties +21 -0
  181. package/src/sap/fe/core/messagebundle_pl.properties +23 -2
  182. package/src/sap/fe/core/messagebundle_pt.properties +23 -2
  183. package/src/sap/fe/core/messagebundle_pt_PT.properties +21 -0
  184. package/src/sap/fe/core/messagebundle_ro.properties +23 -2
  185. package/src/sap/fe/core/messagebundle_ru.properties +22 -1
  186. package/src/sap/fe/core/messagebundle_sh.properties +23 -2
  187. package/src/sap/fe/core/messagebundle_sk.properties +21 -0
  188. package/src/sap/fe/core/messagebundle_sl.properties +23 -2
  189. package/src/sap/fe/core/messagebundle_sr.properties +23 -2
  190. package/src/sap/fe/core/messagebundle_sv.properties +21 -0
  191. package/src/sap/fe/core/messagebundle_th.properties +21 -0
  192. package/src/sap/fe/core/messagebundle_tr.properties +21 -0
  193. package/src/sap/fe/core/messagebundle_uk.properties +23 -2
  194. package/src/sap/fe/core/messagebundle_vi.properties +23 -2
  195. package/src/sap/fe/core/messagebundle_zh_CN.properties +23 -2
  196. package/src/sap/fe/core/messagebundle_zh_TW.properties +21 -0
  197. package/src/sap/fe/core/rootView/Fcl.controller.js +5 -5
  198. package/src/sap/fe/core/rootView/Fcl.controller.ts +10 -4
  199. package/src/sap/fe/core/rootView/NavContainer.controller.js +2 -2
  200. package/src/sap/fe/core/rootView/NavContainer.controller.ts +1 -1
  201. package/src/sap/fe/core/rootView/RootViewBaseController.js +61 -9
  202. package/src/sap/fe/core/rootView/RootViewBaseController.ts +70 -7
  203. package/src/sap/fe/core/services/CollaborationManagerServiceFactory.js +28 -12
  204. package/src/sap/fe/core/services/CollaborationManagerServiceFactory.ts +27 -13
  205. package/src/sap/fe/core/services/EnvironmentServiceFactory.js +7 -1
  206. package/src/sap/fe/core/services/EnvironmentServiceFactory.ts +6 -0
  207. package/src/sap/fe/core/services/RoutingServiceFactory.js +3 -2
  208. package/src/sap/fe/core/services/RoutingServiceFactory.ts +2 -1
  209. package/src/sap/fe/core/services/ShellServicesFactory.js +4 -3
  210. package/src/sap/fe/core/services/ShellServicesFactory.ts +5 -3
  211. package/src/sap/fe/core/services/SideEffectsServiceFactory.js +27 -3
  212. package/src/sap/fe/core/services/SideEffectsServiceFactory.ts +32 -3
  213. package/src/sap/fe/core/services/view/TemplatingErrorPage.view.xml +1 -1
  214. package/src/sap/fe/core/templating/EntitySetHelper.js +198 -58
  215. package/src/sap/fe/core/templating/EntitySetHelper.ts +221 -61
  216. package/src/sap/fe/core/templating/SemanticObjectHelper.js +6 -7
  217. package/src/sap/fe/core/templating/SemanticObjectHelper.ts +9 -7
@@ -15,6 +15,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/core/conver
15
15
  var getStandardActionDelete = StandardActions.getStandardActionDelete;
16
16
  var getStandardActionCut = StandardActions.getStandardActionCut;
17
17
  var getStandardActionCreate = StandardActions.getStandardActionCreate;
18
+ var getStandardActionCopy = StandardActions.getStandardActionCopy;
18
19
  var getRestrictions = StandardActions.getRestrictions;
19
20
  var getMassEditVisibility = StandardActions.getMassEditVisibility;
20
21
  var getInsertUpdateActionsTemplating = StandardActions.getInsertUpdateActionsTemplating;
@@ -62,6 +63,8 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/core/conver
62
63
  var OverrideType = ConfigurableObject.OverrideType;
63
64
  var removeDuplicateActions = Action.removeDuplicateActions;
64
65
  var prepareMenuActions = Action.prepareMenuActions;
66
+ var isMenuAIOperation = Action.isMenuAIOperation;
67
+ var isActionAIOperation = Action.isActionAIOperation;
65
68
  var getVisibilityEnablementMenuActions = Action.getVisibilityEnablementMenuActions;
66
69
  var getMatchingManifestAction = Action.getMatchingManifestAction;
67
70
  var getEnabledForAnnotationAction = Action.getEnabledForAnnotationAction;
@@ -69,6 +72,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/core/conver
69
72
  var getAnnotationMenuActionItems = Action.getAnnotationMenuActionItems;
70
73
  var getActionsFromManifest = Action.getActionsFromManifest;
71
74
  var dataFieldIsCopyAction = Action.dataFieldIsCopyAction;
75
+ var addCollaborationCondition = Action.addCollaborationCondition;
72
76
  var visibleExpression = DataField.visibleExpression;
73
77
  var isDataFieldForActionGroup = DataField.isDataFieldForActionGroup;
74
78
  var isDataFieldForActionAbstract = DataField.isDataFieldForActionAbstract;
@@ -106,6 +110,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/core/conver
106
110
  */
107
111
  function getTableActions(lineItemAnnotation, visualizationPath, converterContext, standardActions, navigationSettings) {
108
112
  // 1. Get actions from annotations
113
+ const isCollaborationEnabled = ModelHelper.isCollaborationDraftSupportedFromConverterContext(converterContext);
109
114
  const tableActions = getTableAnnotationActions(lineItemAnnotation, visualizationPath, converterContext);
110
115
  // 2. Get actions from manifest
111
116
  const manifestActions = getActionsFromManifest(converterContext.getManifestControlConfiguration(visualizationPath).actions, converterContext, tableActions.tableActions, navigationSettings, true);
@@ -115,7 +120,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/core/conver
115
120
  // Combine standard, annotation, and custom actions together, respecting the fixed order of standard actions
116
121
  const annotationAndStandardActions = [...annotationActions, standardActions.create, ...copyActions, standardActions.delete, standardActions.massEdit, standardActions.insights, standardActions.creationRow,
117
122
  // Not templated as a button
118
- standardActions.cut, standardActions.paste, standardActions.moveUp, standardActions.moveDown].filter(action => action !== undefined);
123
+ standardActions.cut, standardActions.copy, standardActions.paste, standardActions.moveUp, standardActions.moveDown].filter(action => action !== undefined);
119
124
  // Anchor all non-anchored manifest custom actions/menus before the standard actions
120
125
  for (const manifestAction of Object.values(manifestActions.actions)) {
121
126
  if ((manifestAction.type === ActionType.Default || manifestAction.type === ActionType.Menu) && !manifestAction.position?.anchor) {
@@ -164,6 +169,10 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/core/conver
164
169
  actions = removeDuplicateActions(actions);
165
170
  // 9. Hide menus where all menu items are hidden
166
171
  actions = getVisibilityEnablementMenuActions(actions);
172
+ // 10. Add the collaboration condition for actions other than navigation
173
+ if (isCollaborationEnabled) {
174
+ addCollaborationCondition(actions);
175
+ }
167
176
  return {
168
177
  actions: actions,
169
178
  commandActions: manifestActions.commandActions
@@ -306,6 +315,9 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/core/conver
306
315
  // We don't load DraftAdministrativeData for Analytical and Tree tables in LR because they display active instances only
307
316
  // (therefore no DraftAdministrativeData is available)
308
317
  tableVisualization.requestAtLeast["DraftAdministrativeData/InProcessByUser"] = ["draftKeys"];
318
+ if (ModelHelper.isCollaborationDraftSupportedFromConverterContext(converterContext) && converterContext.getManifestWrapper().isFclEnabled()) {
319
+ tableVisualization.requestAtLeast["DraftAdministrativeData/DraftAdministrativeUser"] = ["draftKeys"];
320
+ }
309
321
  }
310
322
  }
311
323
  }
@@ -724,7 +736,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/core/conver
724
736
  but currently not possible from the manifest as the visible key is bound on the parent entity.
725
737
  Tricky to differentiate the path as it's done for the Hidden annotation.
726
738
  For the time being we consider all the paths of the manifest*/
727
- aVisiblePathExpressions.push(resolveBindingString(action?.visible?.valueOf()));
739
+ aVisiblePathExpressions.push(resolveBindingString(action?.visible?.valueOf(), "boolean"));
728
740
  }
729
741
  }
730
742
  });
@@ -884,18 +896,21 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/core/conver
884
896
  return and(visibleExpression(dataField, converterContext), equal(pathInModel("contextmenu/inactiveContext", "internal"), false));
885
897
  }
886
898
  function getDataFieldAnnotationAction(dataField, converterContext) {
899
+ let tableAction;
900
+ let entityType;
887
901
  switch (dataField.$Type) {
888
902
  case "com.sap.vocabularies.UI.v1.DataFieldForAction":
889
- const tableAction = {
903
+ tableAction = {
890
904
  type: ActionType.DataFieldForAction,
891
905
  annotationPath: converterContext.getEntitySetBasedAnnotationPath(dataField.fullyQualifiedName),
892
906
  key: KeyHelper.generateKeyFromDataField(dataField),
893
907
  visible: compileExpression(visibleExpression(dataField, converterContext)),
894
908
  visibleForContextMenu: compileExpression(visibleForContextMenuExpression(dataField, converterContext)),
895
- isNavigable: true
909
+ isNavigable: true,
910
+ isAIOperation: isActionAIOperation(dataField) === true || undefined
896
911
  };
897
- const sEntityType = converterContext.getEntityType().fullyQualifiedName;
898
- if (_useEnabledExpression(dataField, sEntityType)) {
912
+ entityType = converterContext.getEntityType().fullyQualifiedName;
913
+ if (_useEnabledExpression(dataField, entityType)) {
899
914
  tableAction.enabled = getEnabledForAnnotationAction(converterContext, dataField.ActionTarget, true);
900
915
  }
901
916
  return tableAction;
@@ -915,6 +930,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/core/conver
915
930
  text: dataField.Label?.toString(),
916
931
  visible: compileExpression(visibleExpression(dataField, converterContext)),
917
932
  visibleForContextMenu: compileExpression(visibleForContextMenuExpression(dataField, converterContext)),
933
+ isAIOperation: isMenuAIOperation(dataField.Actions) === true || undefined,
918
934
  menu: dataField.Actions.map(action => getDataFieldAnnotationAction(action, converterContext))
919
935
  };
920
936
  default:
@@ -1087,6 +1103,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/core/conver
1087
1103
  type: ColumnType.Annotation,
1088
1104
  label: additionalProperty.label,
1089
1105
  annotationPath: additionalProperty.annotationPath,
1106
+ dataType: "Edm.String",
1090
1107
  availability: "Hidden",
1091
1108
  name: key,
1092
1109
  relativePath: additionalProperty.relativePath,
@@ -1191,7 +1208,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/core/conver
1191
1208
  */
1192
1209
  function getSortConditions(converterContext, presentationVariantAnnotation, columns) {
1193
1210
  // Currently navigation property is not supported as sorter
1194
- const nonSortableProperties = getRestrictionsOnProperties(converterContext.getEntitySet()).nonSortableProperties;
1211
+ const nonSortableProperties = getRestrictionsOnProperties(converterContext).nonSortableProperties;
1195
1212
  const sortConditions = {
1196
1213
  sorters: []
1197
1214
  };
@@ -1386,6 +1403,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/core/conver
1386
1403
  const isInsertUpdateActionsTemplated = getInsertUpdateActionsTemplating(standardActionsContext, isDraftOrStickySupported(converterContext));
1387
1404
  const standardActions = {
1388
1405
  cut: getStandardActionCut(converterContext, standardActionsContext),
1406
+ copy: getStandardActionCopy(converterContext, standardActionsContext),
1389
1407
  create: getStandardActionCreate(converterContext, standardActionsContext),
1390
1408
  delete: getStandardActionDelete(converterContext, standardActionsContext),
1391
1409
  paste: getStandardActionPaste(converterContext, standardActionsContext, isInsertUpdateActionsTemplated),
@@ -1651,7 +1669,9 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/core/conver
1651
1669
  const nonUpdatableNavigationProperties = getNonUpdatableNavigationProperties(dataModelObjectPath);
1652
1670
  tableConfiguration.isHierarchyParentNodeUpdatable = !nonUpdatableNavigationProperties?.includes(hierarchyParentNavigationPropertyPath);
1653
1671
  tableConfiguration.isNodeMovable = getCustomFunctionInfo(tableSettings.isNodeMovable, tableConfiguration);
1672
+ tableConfiguration.isNodeCopyable = getCustomFunctionInfo(tableSettings.isNodeCopyable, tableConfiguration);
1654
1673
  tableConfiguration.isMoveToPositionAllowed = getCustomFunctionInfo(tableSettings.isMoveToPositionAllowed, tableConfiguration);
1674
+ tableConfiguration.isCopyToPositionAllowed = getCustomFunctionInfo(tableSettings.isCopyToPositionAllowed, tableConfiguration);
1655
1675
  tableConfiguration.createEnablement = getCustomFunctionInfo(tableSettings.creationMode?.isCreateEnabled, tableConfiguration);
1656
1676
  if (tableSettings.creationMode?.nodeType?.propertyName && tableSettings.creationMode?.nodeType?.values) {
1657
1677
  const values = tableSettings.creationMode.nodeType.values;
@@ -1809,7 +1829,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/core/conver
1809
1829
  if (converterContext.getTemplateType() === "ListReport") {
1810
1830
  useTextForNoDataMessages = "illustratedMessage-Auto";
1811
1831
  } else {
1812
- useTextForNoDataMessages = _manifestWrapper.getUseTextForNoDataMessages() ? "text" : "illustratedMessage-Dot";
1832
+ useTextForNoDataMessages = _manifestWrapper.getUseTextForNoDataMessages() ? "text" : "illustratedMessage-ExtraSmall";
1813
1833
  }
1814
1834
  const oConfiguration = {
1815
1835
  // If no createAtEnd is specified it will be false for Inline/CreationDialog create and true otherwise
@@ -1896,4 +1916,4 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/core/conver
1896
1916
  getCustomFunctionInfo
1897
1917
  };
1898
1918
  }, false);
1899
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJnZXRUYWJsZUFjdGlvbnMiLCJsaW5lSXRlbUFubm90YXRpb24iLCJ2aXN1YWxpemF0aW9uUGF0aCIsImNvbnZlcnRlckNvbnRleHQiLCJzdGFuZGFyZEFjdGlvbnMiLCJuYXZpZ2F0aW9uU2V0dGluZ3MiLCJ0YWJsZUFjdGlvbnMiLCJnZXRUYWJsZUFubm90YXRpb25BY3Rpb25zIiwibWFuaWZlc3RBY3Rpb25zIiwiZ2V0QWN0aW9uc0Zyb21NYW5pZmVzdCIsImdldE1hbmlmZXN0Q29udHJvbENvbmZpZ3VyYXRpb24iLCJhY3Rpb25zIiwiY29weUFjdGlvbnMiLCJmaWx0ZXIiLCJhIiwidHlwZSIsIkFjdGlvblR5cGUiLCJDb3B5IiwiYW5ub3RhdGlvbkFjdGlvbnMiLCJhbm5vdGF0aW9uQW5kU3RhbmRhcmRBY3Rpb25zIiwiY3JlYXRlIiwiZGVsZXRlIiwibWFzc0VkaXQiLCJpbnNpZ2h0cyIsImNyZWF0aW9uUm93IiwiY3V0IiwicGFzdGUiLCJtb3ZlVXAiLCJtb3ZlRG93biIsImFjdGlvbiIsInVuZGVmaW5lZCIsIm1hbmlmZXN0QWN0aW9uIiwiT2JqZWN0IiwidmFsdWVzIiwiRGVmYXVsdCIsIk1lbnUiLCJwb3NpdGlvbiIsImFuY2hvciIsIlN0YW5kYXJkQWN0aW9uS2V5cyIsIkNyZWF0ZSIsInBsYWNlbWVudCIsIlBsYWNlbWVudCIsIkJlZm9yZSIsIm1hbmlmZXN0QWN0aW9uRW50cmllcyIsImVudHJpZXMiLCJzdGFuZGFyZE1hbmlmZXN0QWN0aW9ucyIsImZyb21FbnRyaWVzIiwiX3JlZiIsImtleSIsInN0YXJ0c1dpdGgiLCJub25TdGFuZGFyZE1hbmlmZXN0QWN0aW9ucyIsIl9yZWYyIiwiYWN0aW9uT3ZlcndyaXRlQ29uZmlnIiwiaXNOYXZpZ2FibGUiLCJPdmVycmlkZVR5cGUiLCJvdmVyd3JpdGUiLCJlbmFibGVPblNlbGVjdCIsImVuYWJsZUF1dG9TY3JvbGwiLCJlbmFibGVkIiwidmlzaWJsZSIsInZpc2libGVGb3JDb250ZXh0TWVudSIsImRlZmF1bHRWYWx1ZXNFeHRlbnNpb25GdW5jdGlvbiIsImNvbW1hbmQiLCJtZW51IiwiYW5ub3RhdGlvbk1lbnVBY3Rpb25JdGVtcyIsImdldEFubm90YXRpb25NZW51QWN0aW9uSXRlbXMiLCJtYXRjaGluZ01hbmlmZXN0QWN0aW9ucyIsImdldE1hdGNoaW5nTWFuaWZlc3RBY3Rpb24iLCJvdmVyd3JpdHRlbk1lbnVBY3Rpb25JdGVtcyIsImluc2VydEN1c3RvbUVsZW1lbnRzIiwicHJlcGFyZU1lbnVBY3Rpb25zIiwicmVtb3ZlRHVwbGljYXRlQWN0aW9ucyIsImdldFZpc2liaWxpdHlFbmFibGVtZW50TWVudUFjdGlvbnMiLCJjb21tYW5kQWN0aW9ucyIsIl9leHBvcnRzIiwiZ2V0Q29udGV4dERlZmluaW5nUHJvcGVydGllc0Zyb21BZ2dyZWdhdGlvbkFubm90YXRpb24iLCJhZ2dyZWdhdGlvbkhlbHBlciIsImN1c3RvbUFnZ3JlZ2F0ZUFubm90YXRpb25zIiwiZ2V0Q3VzdG9tQWdncmVnYXRlRGVmaW5pdGlvbnMiLCJjdXN0b21BZ2dyZWdhdGVkZWZpbml0aW9ucyIsImZvckVhY2giLCJhbm5vdGF0aW9uIiwiYWdncmVnYXRlZFByb3BlcnR5IiwiX2VudGl0eVR5cGUiLCJlbnRpdHlQcm9wZXJ0aWVzIiwiZmluZCIsInByb3BlcnR5IiwibmFtZSIsInF1YWxpZmllciIsImNvbnRleHREZWZpbmluZ1Byb3BlcnRpZXMiLCJhbm5vdGF0aW9ucyIsIkFnZ3JlZ2F0aW9uIiwiQ29udGV4dERlZmluaW5nUHJvcGVydGllcyIsIm1hcCIsImN0eERlZlByb3BlcnR5IiwidmFsdWUiLCJnZXRFeHRlbnNpb25JbmZvRnJvbUVudGl0eVR5cGUiLCJlbnRpdHlUeXBlIiwidGFibGVDb2x1bW5zIiwiQWdncmVnYXRpb25IZWxwZXIiLCJpc0FuYWx5dGljc1N1cHBvcnRlZCIsImN1cnJlbmN5T3JVbml0UHJvcGVydGllcyIsIlNldCIsImNvbHVtbiIsInRhYmxlQ29sdW1uIiwidW5pdCIsInRhcmdldFVuaXRQcm9wZXJ0eSIsInByb3AiLCJhZGQiLCJyZWxhdGl2ZVBhdGgiLCJjb250ZXh0RGVmaW5pbmdQcm9wZXJ0aWVzRnJvbUFnZ3JlZ2F0aW9uIiwicmVzdWx0IiwicHJvcGVydHlJbmZvcyIsInJhd0NvbnRleHREZWZpbmluZ1Byb3BlcnRpZXMiLCJmcm9tR3JvdXBhYmxlUHJvcGVydHkiLCJpc1Byb3BlcnR5R3JvdXBhYmxlIiwiaGFzIiwiY29udGV4dERlZmluaW5nUHJvcGVydHlOYW1lIiwiZm91bmRDb2x1bW4iLCJmaW5kQ29sdW1uQnlQYXRoIiwicHVzaCIsImxlbmd0aCIsImFkZGl0aW9uYWxQcm9wZXJ0aWVzIiwidXBkYXRlVGFibGVWaXN1YWxpemF0aW9uRm9yVHlwZSIsInRhYmxlVmlzdWFsaXphdGlvbiIsInByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uIiwiY29udHJvbCIsImFnZ3JlZ2F0aW9uRGF0YSIsImNvbHVtbnMiLCJlbmFibGVBbmFseXRpY3MiLCJlbmFibGUkc2VsZWN0IiwiZW5hYmxlJCRnZXRLZWVwQWxpdmVDb250ZXh0IiwiYW5hbHl0aWNzRXh0ZW5zaW9ucyIsIl91cGRhdGVQcm9wZXJ0eUluZm9zV2l0aEFnZ3JlZ2F0ZXNEZWZpbml0aW9ucyIsImFsbG93ZWRUcmFuc2Zvcm1hdGlvbnMiLCJnZXRBbGxvd2VkVHJhbnNmb3JtYXRpb25zIiwiZW5hYmxlQmFzaWNTZWFyY2giLCJpbmNsdWRlcyIsImdyb3VwQ29uZGl0aW9ucyIsImdldEdyb3VwQ29uZGl0aW9ucyIsImFnZ3JlZ2F0ZUNvbmRpdGlvbnMiLCJnZXRBZ2dyZWdhdGVDb25kaXRpb25zIiwiTG9nIiwiZXJyb3IiLCJjaGFuZ2VTaWJsaW5nRm9yUm9vdHNTdXBwb3J0ZWQiLCJIaWVyYXJjaHkiLCJoaWVyYXJjaHlRdWFsaWZpZXIiLCJDaGFuZ2VTaWJsaW5nRm9yUm9vdHNTdXBwb3J0ZWQiLCJhbGxvd0Ryb3BCZXR3ZWVuTm9kZXMiLCJDaGFuZ2VOZXh0U2libGluZ0FjdGlvbiIsIk1vZGVsSGVscGVyIiwiaXNPYmplY3RQYXRoRHJhZnRTdXBwb3J0ZWQiLCJnZXREYXRhTW9kZWxPYmplY3RQYXRoIiwicmVxdWVzdEF0TGVhc3QiLCJhbmFseXRpY2FsQ29uZmlndXJhdGlvbiIsImFnZ3JlZ2F0aW9uT25MZWFmTGV2ZWwiLCJpc0RyYWZ0Um9vdCIsImdldEVudGl0eVNldCIsImVuYWJsZVVwbG9hZFBsdWdpbiIsInN0cmVhbVByb3BlcnR5IiwiZ2V0QW5ub3RhdGlvbkVudGl0eVR5cGUiLCJVSSIsIk1lZGlhUmVzb3VyY2UiLCJTdHJlYW0iLCIkdGFyZ2V0IiwidXBsb2FkQWN0aW9uIiwidXBsb2FkVGFibGUiLCJzdHJlYW0iLCJmaWxlTmFtZSIsIkNvcmUiLCJDb250ZW50RGlzcG9zaXRpb24iLCJGaWxlbmFtZSIsInBhdGgiLCJmaWxlTmFtZU1heExlbmd0aCIsIm1heExlbmd0aCIsImFjY2VwdGFibGVNZWRpYVR5cGVzIiwiQWNjZXB0YWJsZU1lZGlhVHlwZXMiLCJjcmVhdGVSZXF1ZXN0ZWRQcm9wZXJ0aWVzIiwibGluZUl0ZW0iLCJvcGVyYXRpb25BdmFpbGFibGUiLCJzZWxlY3RlZEZpZWxkcyIsInB1c2hGaWVsZCIsImZpZWxkTmFtZSIsIm9yaWdpbiIsImluZGV4T2YiLCJwdXNoRmllbGRMaXN0IiwiZmllbGRzIiwiZmllbGQiLCJvcGVyYXRpb25BdmFpbGFibGVQcm9wZXJ0aWVzIiwic3BsaXQiLCJ2YWxpZFByb3BlcnRpZXMiLCJwcm9wTmFtZSIsInJlc29sdmVQYXRoIiwic2VtYW50aWNLZXlzIiwiQ29tbW9uIiwiU2VtYW50aWNLZXkiLCJzZW1hbnRpY0tleSIsImNhcGFiaWxpdGllc0Fubm90YXRpb24iLCJDYXBhYmlsaXRpZXMiLCJhbHRlcm5hdGVBbmRTZWNvbmRhcnlLZXlzIiwiZ2V0QWx0ZXJuYXRlQW5kU2Vjb25kYXJ5S2V5cyIsIlJlcXVlc3RBdExlYXN0IiwicHJvcGVydHlQYXRoIiwiZ2V0TmF2aWdhdGlvbkF2YWlsYWJsZUZpZWxkc0Zyb21MaW5lSXRlbSIsIkRlbGV0ZVJlc3RyaWN0aW9ucyIsIkRlbGV0YWJsZSIsIlVwZGF0ZVJlc3RyaWN0aW9ucyIsIlVwZGF0YWJsZSIsInJlY29yZCIsIiRUeXBlIiwiSW5saW5lIiwiRGV0ZXJtaW5pbmciLCJpc1BhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbiIsIk5hdmlnYXRpb25BdmFpbGFibGUiLCJnZXROYXZpZ2F0aW9uVGFyZ2V0UGF0aCIsIm5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgiLCJtYW5pZmVzdFdyYXBwZXIiLCJnZXRNYW5pZmVzdFdyYXBwZXIiLCJnZXROYXZpZ2F0aW9uQ29uZmlndXJhdGlvbiIsIm5hdkNvbmZpZyIsImtleXMiLCJkYXRhTW9kZWxQYXRoIiwiY29udGV4dFBhdGgiLCJnZXRDb250ZXh0UGF0aCIsIm5hdkNvbmZpZ0ZvckNvbnRleHRQYXRoIiwidGFyZ2V0RW50aXR5U2V0Iiwic3RhcnRpbmdFbnRpdHlTZXQiLCJnZXRTZW1hbnRpY0tleXNBbmRUaXRsZUluZm8iLCJoZWFkZXJJbmZvVGl0bGVQYXRoIiwiSGVhZGVySW5mbyIsIlRpdGxlIiwiVmFsdWUiLCJzZW1hbnRpY0tleUFubm90YXRpb25zIiwiaGVhZGVySW5mb1R5cGVOYW1lIiwiVHlwZU5hbWUiLCJzZW1hbnRpY0tleUNvbHVtbnMiLCJvQ29sdW1uIiwiY3JlYXRlVGFibGVWaXN1YWxpemF0aW9uIiwicGFyYW1zIiwiaXNDb25kZW5zZWRUYWJsZUxheW91dENvbXBsaWFudCIsInNlbGVjdGlvblZhcmlhbnRBbm5vdGF0aW9uIiwidGFibGVNYW5pZmVzdENvbmZpZyIsImdldFRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uIiwic3BsaXRQYXRoIiwibmF2aWdhdGlvblRhcmdldFBhdGgiLCJnZXRUYWJsZUNvbHVtbnMiLCJvcGVyYXRpb25BdmFpbGFibGVNYXAiLCJnZXRPcGVyYXRpb25BdmFpbGFibGVNYXAiLCJzZW1hbnRpY0tleXNBbmRIZWFkZXJJbmZvVGl0bGUiLCJzdGFuZGFyZEFjdGlvbnNDb25maWd1cmF0aW9uIiwiZ2V0U3RhbmRhcmRBY3Rpb25zQ29uZmlndXJhdGlvbiIsInRhYmxlQW5ub3RhdGlvbiIsImdldFRhYmxlQW5ub3RhdGlvbkNvbmZpZ3VyYXRpb24iLCJnZXRPcGVyYXRpb25BdmFpbGFibGVQcm9wZXJ0aWVzIiwiaGVhZGVyIiwidGl0bGUiLCJvVmlzdWFsaXphdGlvbiIsIlZpc3VhbGl6YXRpb25UeXBlIiwiVGFibGUiLCJKU09OIiwic3RyaW5naWZ5IiwiaGVhZGVySW5mb1RpdGxlIiwiaGVhZGVyVmlzaWJsZSIsImhhbmRsZVBhdGNoU2VudCIsImdldFRlbXBsYXRlVHlwZSIsIlRlbXBsYXRlVHlwZSIsIkxpc3RSZXBvcnQiLCJ1cGRhdGVMaW5rZWRQcm9wZXJ0aWVzIiwiY3JlYXRlRGVmYXVsdFRhYmxlVmlzdWFsaXphdGlvbiIsImlzQmxhbmtUYWJsZSIsImdldENvbHVtbnNGcm9tRW50aXR5VHlwZSIsImdldEVudGl0eVR5cGUiLCJjcmVhdGlvbk1vZGUiLCJBY3Rpb25IZWxwZXIiLCJnZXRDdXJyZW50RW50aXR5U2V0VXBkYXRhYmxlUGF0aCIsInJlc3RyaWN0aW9ucyIsImdldFJlc3RyaWN0aW9ucyIsImVudGl0eVNldCIsInVwZGF0YWJsZSIsImlzVXBkYXRhYmxlIiwiaXNPbmx5RHluYW1pY09uQ3VycmVudEVudGl0eSIsImlzQ29uc3RhbnQiLCJleHByZXNzaW9uIiwibmF2aWdhdGlvbkV4cHJlc3Npb24iLCJfdHlwZSIsInVwZGF0YWJsZUV4cHJlc3Npb24iLCJ1cGRhdGFibGVQcm9wZXJ0eVBhdGgiLCJwcm9wZXJ0aWVzIiwiYWN0aW9uTmFtZSIsInByb3BlcnR5TmFtZSIsInNpemUiLCJ0aXRsZVByb3BlcnR5IiwiQXJyYXkiLCJmcm9tIiwiam9pbiIsImdldFVJSGlkZGVuRXhwRm9yQWN0aW9uc1JlcXVpcmluZ0NvbnRleHQiLCJjdXJyZW50RW50aXR5VHlwZSIsImNvbnRleHREYXRhTW9kZWxPYmplY3RQYXRoIiwiYVVpSGlkZGVuUGF0aEV4cHJlc3Npb25zIiwiZGF0YUZpZWxkIiwiQWN0aW9uVGFyZ2V0IiwiaXNCb3VuZCIsInNvdXJjZUVudGl0eVR5cGUiLCJSZXF1aXJlc0NvbnRleHQiLCJ2YWx1ZU9mIiwiSGlkZGVuIiwiZXF1YWwiLCJnZXRIaWRkZW5FeHByZXNzaW9uQXRUYWJsZUxldmVsIiwiZ2V0UGF0aEZyb21BY3Rpb25Bbm5vdGF0aW9uIiwic291cmNlIiwiY29uc3RhbnQiLCJzdWJzdHJpbmciLCJzcGxpdFBhdGhGb3JOYXZpZ2F0aW9uUHJvcGVydHkiLCJuYXZpZ2F0aW9uUGF0aCIsImlzTmF2aWdhdGlvblByb3BlcnR5IiwidGFyZ2V0T2JqZWN0IiwicGFydG5lciIsInBhdGhJbk1vZGVsIiwic2xpY2UiLCJ1cGRhdGVNYW5pZmVzdEFjdGlvbkFuZFRhZ0l0IiwiZGF0YUZpZWxkSWQiLCJzb21lIiwiYWN0aW9uS2V5IiwicmVxdWlyZXNTZWxlY3Rpb24iLCJoYXNCb3VuZEFjdGlvbnNBbHdheXNWaXNpYmxlSW5Ub29sQmFyIiwibWFuaWZlc3RBY3Rpb25JZCIsImdlbmVyYXRlIiwiQWN0aW9uIiwiU2VtYW50aWNPYmplY3QiLCJBY3Rpb25zIiwiaGFzQ3VzdG9tQWN0aW9uc0Fsd2F5c1Zpc2libGVJblRvb2xCYXIiLCJjdXN0b21BY3Rpb25zIiwicmVkdWNlIiwibWVudUFjdGlvbiIsInRvU3RyaW5nIiwiZ2V0VmlzaWJsZUV4cEZvckN1c3RvbUFjdGlvbnNSZXF1aXJpbmdDb250ZXh0IiwiYVZpc2libGVQYXRoRXhwcmVzc2lvbnMiLCJyZXNvbHZlQmluZGluZ1N0cmluZyIsImdldENhcGFiaWxpdHlSZXN0cmljdGlvbiIsImlzRGVsZXRhYmxlIiwiaXNQYXRoRGVsZXRhYmxlIiwiaXNQYXRoVXBkYXRhYmxlIiwiZ2V0U2VsZWN0aW9uTW9kZSIsImlzRW50aXR5U2V0IiwidGFyZ2V0Q2FwYWJpbGl0aWVzIiwiZGVsZXRlQnV0dG9uVmlzaWJpbGl0eUV4cHJlc3Npb24iLCJtYXNzRWRpdFZpc2liaWxpdHlFeHByZXNzaW9uIiwiYXJndW1lbnRzIiwiY3V0QnV0dG9uVmlzaWJpbGl0eUV4cHJlc3Npb24iLCJ0YWJsZU1hbmlmZXN0U2V0dGluZ3MiLCJ0YWJsZVR5cGUiLCJ0YWJsZVNldHRpbmdzIiwic2VsZWN0aW9uTW9kZSIsIlNlbGVjdGlvbk1vZGUiLCJNdWx0aSIsIk5vbmUiLCJjb21waWxlRXhwcmVzc2lvbiIsImlmRWxzZSIsIkZvcmNlTXVsdGkiLCJGb3JjZVNpbmdsZSIsIlNpbmdsZSIsImFIaWRkZW5CaW5kaW5nRXhwcmVzc2lvbnMiLCJhVmlzaWJsZUJpbmRpbmdFeHByZXNzaW9ucyIsImlzUGFyZW50RGVsZXRhYmxlIiwicGFyZW50RW50aXR5U2V0RGVsZXRhYmxlIiwiT2JqZWN0UGFnZSIsImJNYXNzRWRpdEVuYWJsZWQiLCJBdXRvIiwiYnV0dG9uVmlzaWJpbGl0eUV4cHJlc3Npb24iLCJvciIsImFuZCIsIklzRWRpdGFibGUiLCJlZGl0TW9kZWJ1dHRvblZpc2liaWxpdHlFeHByZXNzaW9uIiwiY29uY2F0IiwiY29weURhdGFGaWVsZCIsImdldENvcHlBY3Rpb24iLCJkYXRhRmllbGRJc0NvcHlBY3Rpb24iLCJhbm5vdGF0aW9uUGF0aCIsImdldEVudGl0eVNldEJhc2VkQW5ub3RhdGlvblBhdGgiLCJmdWxseVF1YWxpZmllZE5hbWUiLCJLZXlIZWxwZXIiLCJnZW5lcmF0ZUtleUZyb21EYXRhRmllbGQiLCJ2aXNpYmxlRXhwcmVzc2lvbiIsInZpc2libGVGb3JDb250ZXh0TWVudUV4cHJlc3Npb24iLCJ0ZXh0IiwiTGFiZWwiLCJMaWJyYXJ5IiwiZ2V0UmVzb3VyY2VCdW5kbGVGb3IiLCJnZXRUZXh0IiwiaXNEYXRhRmllbGRGb3JBY3Rpb25BYnN0cmFjdCIsInRhYmxlQWN0aW9uIiwiZ2V0RGF0YUZpZWxkQW5ub3RhdGlvbkFjdGlvbiIsImlzRGF0YUZpZWxkRm9yQWN0aW9uR3JvdXAiLCJkYXRhRmllbGRHcm91cCIsIkRhdGFGaWVsZEZvckFjdGlvbiIsInNFbnRpdHlUeXBlIiwiX3VzZUVuYWJsZWRFeHByZXNzaW9uIiwiZ2V0RW5hYmxlZEZvckFubm90YXRpb25BY3Rpb24iLCJEYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24iLCJpZCIsImdldEhpZ2hsaWdodFJvd0JpbmRpbmciLCJjcml0aWNhbGl0eUFubm90YXRpb24iLCJpc0RyYWZ0Um9vdE9yTm9kZSIsInRhcmdldEVudGl0eVR5cGUiLCJkZWZhdWx0SGlnaGxpZ2h0Um93RGVmaW5pdGlvbiIsIk1lc3NhZ2VUeXBlIiwiZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uIiwiZ2V0TWVzc2FnZVR5cGVGcm9tQ3JpdGljYWxpdHlUeXBlIiwiZm9ybWF0UmVzdWx0IiwiRW50aXR5IiwiSGFzQWN0aXZlIiwiSXNBY3RpdmUiLCJJc0luYWN0aXZlIiwidGFibGVGb3JtYXR0ZXJzIiwicm93SGlnaGxpZ2h0aW5nIiwiZ2V0RXh0ZXJuYWxDcmVhdGlvbkJlaGF2aW9yIiwidGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24iLCJjcmVhdGlvbkRldGFpbHMiLCJvdXRib3VuZEtleSIsIm91dGJvdW5kQ3JlYXRpb24iLCJvdXRib3VuZCIsIm91dGJvdW5kRGV0YWlsIiwiZ2V0T3V0Ym91bmROYXZpZ2F0aW9uRW50cmllcyIsIm1vZGUiLCJDcmVhdGlvbk1vZGUiLCJFeHRlcm5hbCIsIndhcm5pbmciLCJOZXdQYWdlIiwiX2dldENyZWF0aW9uQmVoYXZpb3VyIiwiZXh0ZXJuYWxCZWhhdmlvciIsIm9yaWdpbmFsVGFibGVTZXR0aW5ncyIsIm5hdmlnYXRpb25EZXRhaWxzIiwiZGV0YWlsIiwiQ3JlYXRpb25EaWFsb2ciLCJuZXdBY3Rpb24iLCJ0YXJnZXRBbm5vdGF0aW9ucyIsInRhcmdldEFubm90YXRpb25zQ29tbW9uIiwidGFyZ2V0QW5ub3RhdGlvbnNTZXNzaW9uIiwiU2Vzc2lvbiIsIkRyYWZ0Um9vdCIsIk5ld0FjdGlvbiIsIlN0aWNreVNlc3Npb25TdXBwb3J0ZWQiLCJDcmVhdGlvblJvdyIsIkVycm9yIiwicm91dGUiLCJhcHBlbmQiLCJjcmVhdGVBdEVuZCIsIm5hdmlnYXRlVG9UYXJnZXQiLCJpbmZvIiwiX2dldFJvd0NvbmZpZ3VyYXRpb25Qcm9wZXJ0eSIsInRhcmdldFBhdGgiLCJhZ2dyZWdhdGlvbk9uTGVhZkxldmVsZW5hYmxlZCIsIm5hdmlnYXRpb25JbmZvIiwiY3JpdGljYWxpdHlQcm9wZXJ0eSIsIkNyaXRpY2FsaXR5IiwibmF2aWdhdGlvblRhcmdldCIsImRpc3BsYXkiLCJ0YXJnZXQiLCJnZXREcmFmdFJvb3QiLCJnZXREcmFmdE5vZGUiLCJjaGVja0VkaXRhYmxlIiwicm91dGVQYXRoIiwicmVjcmVhdGVDb250ZXh0Iiwicm93TmF2aWdhdGVkRXhwcmVzc2lvbiIsIm5hdmlnYXRlZFJvdyIsImFjdGlvblR5cGUiLCJyb3dOYXZpZ2F0ZWQiLCJyb3dDcml0aWNhbGl0eUZvckluc2lnaHRzIiwiY3JpdGljYWxpdHlFeHByZXNzaW9uRm9ySW50ZWdyYXRpb25DYXJkcyIsIm5vdCIsImlzTm9kZUxldmVsTmF2aWdhYmxlIiwiY3JlYXRlVGVjaG5pY2FsUHJvcGVydHkiLCJyZWxhdGVkQWRkaXRpb25hbFByb3BlcnR5TmFtZU1hcCIsImNvbHVtbkV4aXN0cyIsImFkZGl0aW9uYWxQcm9wZXJ0eSIsInRlY2huaWNhbENvbHVtbiIsIkNvbHVtblR5cGUiLCJBbm5vdGF0aW9uIiwibGFiZWwiLCJhdmFpbGFiaWxpdHkiLCJzb3J0YWJsZSIsImlzR3JvdXBhYmxlIiwiaXNLZXkiLCJleHBvcnRTZXR0aW5ncyIsImNhc2VTZW5zaXRpdmUiLCJhZ2dyZWdhdGFibGUiLCJmaWx0ZXJhYmxlIiwiZXh0ZW5zaW9uIiwidGVjaG5pY2FsbHlHcm91cGFibGUiLCJ0ZWNobmljYWxseUFnZ3JlZ2F0YWJsZSIsImdldFAxM25Nb2RlIiwidmFyaWFudE1hbmFnZW1lbnQiLCJnZXRWYXJpYW50TWFuYWdlbWVudCIsIm1vZGVzIiwiaXNBbmFseXRpY2FsVGFibGUiLCJpc1Jlc3BvbnNpdmVUYWJsZSIsInBlcnNvbmFsaXphdGlvbiIsInNvcnQiLCJncm91cCIsImFnZ3JlZ2F0ZSIsIlZhcmlhbnRNYW5hZ2VtZW50VHlwZSIsIkNvbnRyb2wiLCJfaXNGaWx0ZXJCYXJIaWRkZW4iLCJpc0ZpbHRlckJhckhpZGRlbiIsImhhc011bHRpcGxlVmlzdWFsaXphdGlvbnMiLCJBbmFseXRpY2FsTGlzdFBhZ2UiLCJnZXRTb3J0Q29uZGl0aW9ucyIsIm5vblNvcnRhYmxlUHJvcGVydGllcyIsImdldFJlc3RyaWN0aW9uc09uUHJvcGVydGllcyIsInNvcnRDb25kaXRpb25zIiwic29ydGVycyIsIlNvcnRPcmRlciIsImNvbmRpdGlvbiIsImNvbmRpdGlvblByb3BlcnR5IiwiUHJvcGVydHkiLCJpbmZvTmFtZSIsImNvbnZlcnRQcm9wZXJ0eVBhdGhzVG9JbmZvTmFtZXMiLCJkZXNjZW5kaW5nIiwiRGVzY2VuZGluZyIsImdldEluaXRpYWxFeHBhbnNpb25MZXZlbCIsImxldmVsIiwiSW5pdGlhbEV4cGFuc2lvbkxldmVsIiwicGF0aHMiLCJpbmZvTmFtZXMiLCJwcm9wZXJ0eUluZm8iLCJhbm5vdGF0aW9uQ29sdW1uIiwiY3VycmVudFBhdGgiLCJncm91cExldmVscyIsIkdyb3VwQnkiLCJhR3JvdXBCeSIsInByb3BlcnR5TmFtZUZyb21BbmFseXRpY3NJbmZvIiwiX2dldFByb3BlcnR5TmFtZUZyb21BbmFseXRpY3NJbmZvIiwiYWdncmVnYXRhYmxlUHJvcGVydHlEZWZpbml0aW9uIiwiYWRkaXRpb25hbFByb3BlcnR5SW5mb3MiLCJhZGRpdGlvbmFsUHJvcGVydHlJbmZvIiwiX3VwZGF0ZUZvclRleHRPbmx5UHJvcGVydGllc1dpdGhDRFAiLCJ0ZXh0QXJyYW5nZW1lbnQiLCJ0ZXh0UHJvcGVydHkiLCJhbmFseXRpY3NJbmZvUHJvcGVydHlOYW1lRm9yRGVzYyIsImNvbHVtbldpdGhUZXh0T25seSIsInRleHRPbmx5Q29sdW1uIiwiZXh0ZW5zaW9uSW5mb01hcCIsIlRvdGFsIiwiYVRvdGFscyIsImNyZWF0aW9uQmVoYXZpb3VyIiwic3RhbmRhcmRBY3Rpb25zQ29udGV4dCIsImdlbmVyYXRlU3RhbmRhcmRBY3Rpb25zQ29udGV4dCIsImdldEN1dFZpc2liaWxpdHkiLCJnZXREZWxldGVWaXNpYmlsaXR5IiwibWFzc0VkaXRCdXR0b25WaXNpYmlsaXR5RXhwcmVzc2lvbiIsImdldE1hc3NFZGl0VmlzaWJpbGl0eSIsImlzSW5zZXJ0VXBkYXRlQWN0aW9uc1RlbXBsYXRlZCIsImdldEluc2VydFVwZGF0ZUFjdGlvbnNUZW1wbGF0aW5nIiwiaXNEcmFmdE9yU3RpY2t5U3VwcG9ydGVkIiwiZ2V0U3RhbmRhcmRBY3Rpb25DdXQiLCJnZXRTdGFuZGFyZEFjdGlvbkNyZWF0ZSIsImdldFN0YW5kYXJkQWN0aW9uRGVsZXRlIiwiZ2V0U3RhbmRhcmRBY3Rpb25QYXN0ZSIsImdldFN0YW5kYXJkQWN0aW9uTWFzc0VkaXQiLCJnZXRTdGFuZGFyZEFjdGlvbkluc2lnaHRzIiwiZ2V0Q3JlYXRpb25Sb3ciLCJjb25maWd1cmF0aW9uIiwiZ2V0U3RhbmRhcmRBY3Rpb25Nb3ZlVXBEb3duIiwidHlwZU5hbWVQbHVyYWwiLCJUeXBlTmFtZVBsdXJhbCIsInBhZ2VNYW5pZmVzdFNldHRpbmdzIiwiaGFzQWJzb2x1dGVQYXRoIiwicDEzbk1vZGUiLCJnZXRUYWJsZUlEIiwidGhyZXNob2xkIiwiTWF4SXRlbXMiLCJpc1NlYXJjaGFibGUiLCJpc1BhdGhTZWFyY2hhYmxlIiwiYXBpSWQiLCJlbnRpdHlOYW1lIiwiZW50aXR5VHlwZU5hbWUiLCJjb2xsZWN0aW9uIiwiZ2V0VGFyZ2V0T2JqZWN0UGF0aCIsInJvdyIsImRpc3BsYXlNb2RlIiwiaXNJbkRpc3BsYXlNb2RlIiwic2VhcmNoYWJsZSIsImluaXRpYWxFeHBhbnNpb25MZXZlbCIsInJlcXVpcmVkUHJvcGVydGllcyIsImdldFJlcXVpcmVkUHJvcGVydGllcyIsInRhcmdldE5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgiLCJsYXN0SW5kZXhPZiIsImdldFNlbGVjdGlvblZhcmlhbnRDb25maWd1cmF0aW9uIiwic2VsZWN0aW9uVmFyaWFudFBhdGgiLCJyZXNvbHZlZFRhcmdldCIsImdldEVudGl0eVR5cGVBbm5vdGF0aW9uIiwic2VsZWN0aW9uIiwicHJvcGVydHlOYW1lcyIsIlNlbGVjdE9wdGlvbnMiLCJzZWxlY3RPcHRpb24iLCJQcm9wZXJ0eU5hbWUiLCJUZXh0IiwiX2dldEZ1bGxTY3JlZW5CYXNlZE9uRGV2aWNlIiwiaXNJcGhvbmUiLCJlbmFibGVGdWxsU2NyZWVuIiwiZ2V0RGlhZ25vc3RpY3MiLCJhZGRJc3N1ZSIsIklzc3VlQ2F0ZWdvcnkiLCJNYW5pZmVzdCIsIklzc3VlU2V2ZXJpdHkiLCJMb3ciLCJJc3N1ZVR5cGUiLCJGVUxMU0NSRUVOTU9ERV9OT1RfT05fTElTVFJFUE9SVCIsIl9nZXRNdWx0aVNlbGVjdE1vZGUiLCJtdWx0aVNlbGVjdE1vZGUiLCJzZWxlY3RBbGwiLCJ1c2VJY29uVGFiQmFyIiwiX2dldFRhYmxlTW9kZSIsImlzVGVtcGxhdGVMaXN0UmVwb3J0Iiwicm93Q291bnRNb2RlIiwicm93Q291bnQiLCJfZ2V0Q29uZGVuc2VkVGFibGVMYXlvdXQiLCJfdGFibGVUeXBlIiwiX3RhYmxlU2V0dGluZ3MiLCJjb25kZW5zZWRUYWJsZUxheW91dCIsIl9nZXRUYWJsZVNlbGVjdGlvbkxpbWl0Iiwic2VsZWN0aW9uTGltaXQiLCJfZ2V0VGFibGVJbmxpbmVDcmVhdGlvblJvd0NvdW50IiwiaW5saW5lQ3JlYXRpb25Sb3dDb3VudCIsIl9nZXRFbmFibGVFeHBvcnQiLCJlbmFibGVQYXN0ZSIsImVuYWJsZUV4cG9ydCIsIl9nZXRGcm96ZW5Db2x1bW5Db3VudCIsImZyb3plbkNvbHVtbkNvdW50IiwiX2dldFdpZHRoSW5jbHVkaW5nQ29sdW1uSGVhZGVyIiwid2lkdGhJbmNsdWRpbmdDb2x1bW5IZWFkZXIiLCJnZXRGaWx0ZXJDb25maWd1cmF0aW9uIiwiaGlkZVRhYmxlVGl0bGUiLCJmaWx0ZXJzIiwicXVpY2tWYXJpYW50U2VsZWN0aW9uIiwicXVpY2tGaWx0ZXJQYXRocyIsImZpbHRlclBhdGhzIiwicXVpY2tGaWx0ZXJzIiwic2hvd0NvdW50cyIsImhpZGRlbkZpbHRlcnMiLCJ1c2VFbmFibGVkRXhwcmVzc2lvbiIsIk9wZXJhdGlvbkF2YWlsYWJsZSIsIm92ZXJsb2FkQWN0aW9uIiwic291cmNlVHlwZSIsInN0YXRpY0FjdGlvbiIsInBhcmFtZXRlcnMiLCJpc0NvbGxlY3Rpb24iLCJ1cGRhdGVUcmVlVGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24iLCJ0YWJsZUNvbmZpZ3VyYXRpb24iLCJkYXRhTW9kZWxPYmplY3RQYXRoIiwiaGllcmFyY2h5UGFyZW50TmF2aWdhdGlvblByb3BlcnR5UGF0aCIsImdldEhpZXJhcmNoeVBhcmVudE5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgiLCJub25VcGRhdGFibGVOYXZpZ2F0aW9uUHJvcGVydGllcyIsImdldE5vblVwZGF0YWJsZU5hdmlnYXRpb25Qcm9wZXJ0aWVzIiwiaXNIaWVyYXJjaHlQYXJlbnROb2RlVXBkYXRhYmxlIiwiaXNOb2RlTW92YWJsZSIsImdldEN1c3RvbUZ1bmN0aW9uSW5mbyIsImlzTW92ZVRvUG9zaXRpb25BbGxvd2VkIiwiY3JlYXRlRW5hYmxlbWVudCIsImlzQ3JlYXRlRW5hYmxlZCIsIm5vZGVUeXBlIiwibm9kZVR5cGVJbmZvIiwiY3JlYXRpb25EaWFsb2dGaWVsZHMiLCJnZXRGaWVsZExpc3QiLCJjcmVhdGlvbkZpZWxkcyIsImNyZWF0ZUluUGxhY2UiLCJsYXN0RG90SW5kZXgiLCJtb2R1bGVOYW1lIiwicmVwbGFjZSIsIm1ldGhvZE5hbWUiLCJhZGRpdGlvbmFsUmVxdWlyZWRNb2R1bGVzIiwiZ2V0T3B0aW1pc3RpY0JhdGNoU2V0dGluZ3NGcm9tTWFuaWZlc3QiLCJkaXNhYmxlUmVxdWVzdENhY2hlIiwiZ2V0TWFzc0VkaXRTZXR0aW5ncyIsImRlZmF1bHRGaWVsZENvbmZpZ3VyYXRpb24iLCJ2aXNpYmxlRmllbGRzIiwiaWdub3JlZEZpZWxkcyIsIm9wZXJhdGlvbkdyb3VwaW5nTW9kZSIsIk9wZXJhdGlvbkdyb3VwaW5nTW9kZSIsIklzb2xhdGVkIiwiQ2hhbmdlU2V0IiwiZW5hYmxlTWFzc0VkaXQiLCJjdXN0b21GcmFnbWVudCIsImZyb21JbmxpbmUiLCJmaWVsZEdyb3VwIiwiaXNBbm5vdGF0aW9uT2ZUeXBlIiwiRGF0YSIsImlzRGF0YUZpZWxkIiwidHJpbSIsImNoZWNrQ29uZGVuc2VkTGF5b3V0IiwiX21hbmlmZXN0V3JhcHBlciIsImdsb2JhbEZFTWFuaWZlc3RTZXR0aW5ncyIsImdldFNhcEZlTWFuaWZlc3RDb25maWd1cmF0aW9uIiwiZGVmYXVsdENyZWF0aW9uTW9kZSIsIm1hY3JvcyIsInRhYmxlIiwiSW5saW5lQ3JlYXRpb25Sb3dzIiwiZW5hYmxlQXV0b0NvbHVtbldpZHRoIiwiaXNQaG9uZSIsImRpc2FibGVDb3B5VG9DbGlwYm9hcmQiLCJ0ZW1wbGF0ZVR5cGUiLCJpc0NvbmRlbnNlZExheW91dENvbXBsaWFudCIsIm9GaWx0ZXJDb25maWd1cmF0aW9uIiwiY3VzdG9tVmFsaWRhdGlvbkZ1bmN0aW9uIiwiZXhwb3J0UmVxdWVzdFNpemUiLCJnZXRUYWJsZVR5cGUiLCJ0YWJsZVJvd01vZGUiLCJkZWZhdWx0U2Nyb2xsVGhyZXNob2xkIiwiaW5saW5lQ3JlYXRpb25Sb3dzSGlkZGVuSW5FZGl0TW9kZSIsInVzZVRleHRGb3JOb0RhdGFNZXNzYWdlcyIsImdldFVzZVRleHRGb3JOb0RhdGFNZXNzYWdlcyIsIm9Db25maWd1cmF0aW9uIiwiaGFzRGF0YVN0YXRlSW5kaWNhdG9yRmlsdGVyIiwiZGlzYWJsZUFkZFJvd0J1dHRvbkZvckVtcHR5RGF0YSIsImVuYWJsZVBhc3RpbmdPZkNvbXB1dGVkUHJvcGVydGllcyIsInJlYWRPbmx5IiwiZW5hYmxlQWRkQ2FyZFRvSW5zaWdodHMiLCJzaG93Um93Q291bnQiLCJnZXRWaWV3Q29uZmlndXJhdGlvbiIsInVzZUNvbmRlbnNlZFRhYmxlTGF5b3V0IiwiaXNDb21wYWN0VHlwZSIsIm1vZGVGb3JOb0RhdGFNZXNzYWdlIiwic2Nyb2xsVGhyZXNob2xkIiwiYmVmb3JlUmViaW5kVGFibGUiLCJzZWxlY3Rpb25DaGFuZ2UiLCJyb3dQcmVzcyJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiVGFibGUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBFbnRpdHlTZXQsIEVudGl0eVR5cGUsIFBhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbiwgUHJvcGVydHlBbm5vdGF0aW9uVmFsdWUsIFByb3BlcnR5UGF0aCB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlc1wiO1xuaW1wb3J0IHR5cGUgeyBFbnRpdHlTZXRBbm5vdGF0aW9uc19Db21tb24gfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL0NvbW1vbl9FZG1cIjtcbmltcG9ydCB0eXBlIHsgRW50aXR5U2V0QW5ub3RhdGlvbnNfU2Vzc2lvbiB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvU2Vzc2lvbl9FZG1cIjtcbmltcG9ydCB0eXBlIHtcblx0Q3JpdGljYWxpdHksXG5cdERhdGFGaWVsZEFic3RyYWN0VHlwZXMsXG5cdERhdGFGaWVsZEZvckFjdGlvbixcblx0RGF0YUZpZWxkRm9yQWN0aW9uQWJzdHJhY3RUeXBlcyxcblx0RGF0YUZpZWxkRm9yQWN0aW9uR3JvdXAsXG5cdERhdGFGaWVsZEZvckFjdGlvblR5cGVzLFxuXHREYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24sXG5cdERhdGFGaWVsZFR5cGVzLFxuXHRGaWVsZEdyb3VwLFxuXHRMaW5lSXRlbSxcblx0UHJlc2VudGF0aW9uVmFyaWFudFR5cGUsXG5cdFNlbGVjdE9wdGlvblR5cGUsXG5cdFNlbGVjdGlvblZhcmlhbnQsXG5cdFNlbGVjdGlvblZhcmlhbnRUeXBlXG59IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvVUlcIjtcbmltcG9ydCB7IFVJQW5ub3RhdGlvblRlcm1zLCBVSUFubm90YXRpb25UeXBlcyB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvVUlcIjtcbmltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IHR5cGUgeyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24sIENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIH0gZnJvbSBcInNhcC9mZS9iYXNlL0JpbmRpbmdUb29sa2l0XCI7XG5pbXBvcnQge1xuXHRhbmQsXG5cdGNvbXBpbGVFeHByZXNzaW9uLFxuXHRjb25zdGFudCxcblx0ZXF1YWwsXG5cdGZvcm1hdFJlc3VsdCxcblx0Z2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uLFxuXHRpZkVsc2UsXG5cdGlzQ29uc3RhbnQsXG5cdG5vdCxcblx0b3IsXG5cdHBhdGhJbk1vZGVsLFxuXHRyZXNvbHZlQmluZGluZ1N0cmluZ1xufSBmcm9tIFwic2FwL2ZlL2Jhc2UvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCB0eXBlIHsgUGFnZUNvbnRleHRQYXRoVGFyZ2V0IH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvVGVtcGxhdGVDb252ZXJ0ZXJcIjtcbmltcG9ydCB7XG5cdGlzRGF0YUZpZWxkLFxuXHRpc0RhdGFGaWVsZEZvckFjdGlvbkFic3RyYWN0LFxuXHRpc0RhdGFGaWVsZEZvckFjdGlvbkdyb3VwLFxuXHR2aXNpYmxlRXhwcmVzc2lvblxufSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9hbm5vdGF0aW9ucy9EYXRhRmllbGRcIjtcbmltcG9ydCB0eXBlIHtcblx0QW5ub3RhdGlvbkFjdGlvbixcblx0QW5ub3RhdGlvbkFjdGlvbkdyb3VwLFxuXHRCYXNlQWN0aW9uLFxuXHRDb21iaW5lZEFjdGlvbixcblx0Q3VzdG9tQWN0aW9uLFxuXHRPdmVycmlkZVR5cGVBY3Rpb25cbn0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvQ29tbW9uL0FjdGlvblwiO1xuaW1wb3J0IHtcblx0ZGF0YUZpZWxkSXNDb3B5QWN0aW9uLFxuXHRnZXRBY3Rpb25zRnJvbU1hbmlmZXN0LFxuXHRnZXRBbm5vdGF0aW9uTWVudUFjdGlvbkl0ZW1zLFxuXHRnZXRDb3B5QWN0aW9uLFxuXHRnZXRFbmFibGVkRm9yQW5ub3RhdGlvbkFjdGlvbixcblx0Z2V0TWF0Y2hpbmdNYW5pZmVzdEFjdGlvbixcblx0Z2V0VmlzaWJpbGl0eUVuYWJsZW1lbnRNZW51QWN0aW9ucyxcblx0cHJlcGFyZU1lbnVBY3Rpb25zLFxuXHRyZW1vdmVEdXBsaWNhdGVBY3Rpb25zXG59IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0NvbW1vbi9BY3Rpb25cIjtcbmltcG9ydCB7IE92ZXJyaWRlVHlwZSwgUGxhY2VtZW50LCBpbnNlcnRDdXN0b21FbGVtZW50cyB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2hlbHBlcnMvQ29uZmlndXJhYmxlT2JqZWN0XCI7XG5pbXBvcnQgeyBJc3N1ZUNhdGVnb3J5LCBJc3N1ZVNldmVyaXR5LCBJc3N1ZVR5cGUgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9oZWxwZXJzL0lzc3VlTWFuYWdlclwiO1xuaW1wb3J0IHsgS2V5SGVscGVyIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvaGVscGVycy9LZXlcIjtcbmltcG9ydCB7IEVudGl0eSwgVUkgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9CaW5kaW5nSGVscGVyXCI7XG5pbXBvcnQgTW9kZWxIZWxwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvTW9kZWxIZWxwZXJcIjtcbmltcG9ydCB7IGdlbmVyYXRlIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvU3RhYmxlSWRIZWxwZXJcIjtcbmltcG9ydCB7IGlzQW5ub3RhdGlvbk9mVHlwZSwgaXNOYXZpZ2F0aW9uUHJvcGVydHksIGlzUGF0aEFubm90YXRpb25FeHByZXNzaW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvVHlwZUd1YXJkc1wiO1xuaW1wb3J0IHsgY3JpdGljYWxpdHlFeHByZXNzaW9uRm9ySW50ZWdyYXRpb25DYXJkcyB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0NyaXRpY2FsaXR5Rm9ybWF0dGVyc1wiO1xuaW1wb3J0IHtcblx0Z2V0SGllcmFyY2h5UGFyZW50TmF2aWdhdGlvblByb3BlcnR5UGF0aCxcblx0Z2V0Tm9uVXBkYXRhYmxlTmF2aWdhdGlvblByb3BlcnRpZXMsXG5cdGdldFRhcmdldE9iamVjdFBhdGgsXG5cdGlzUGF0aERlbGV0YWJsZSxcblx0aXNQYXRoU2VhcmNoYWJsZSxcblx0aXNQYXRoVXBkYXRhYmxlLFxuXHR0eXBlIERhdGFNb2RlbE9iamVjdFBhdGhcbn0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvRGF0YU1vZGVsUGF0aEhlbHBlclwiO1xuaW1wb3J0IHsgZ2V0UmVzdHJpY3Rpb25zT25Qcm9wZXJ0aWVzIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvRW50aXR5U2V0SGVscGVyXCI7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXJlc3RyaWN0ZWQtaW1wb3J0c1xuaW1wb3J0IHRhYmxlRm9ybWF0dGVycyBmcm9tIFwic2FwL2ZlL21hY3Jvcy9mb3JtYXR0ZXJzL1RhYmxlRm9ybWF0dGVyXCI7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXJlc3RyaWN0ZWQtaW1wb3J0c1xuaW1wb3J0IEFjdGlvbkhlbHBlciBmcm9tIFwic2FwL2ZlL21hY3Jvcy9pbnRlcm5hbC9oZWxwZXJzL0FjdGlvbkhlbHBlclwiO1xuaW1wb3J0IExpYnJhcnkgZnJvbSBcInNhcC91aS9jb3JlL0xpYlwiO1xuaW1wb3J0IE1lc3NhZ2VUeXBlIGZyb20gXCJzYXAvdWkvY29yZS9tZXNzYWdlL01lc3NhZ2VUeXBlXCI7XG5pbXBvcnQgdHlwZSBDb252ZXJ0ZXJDb250ZXh0IGZyb20gXCIuLi8uLi9Db252ZXJ0ZXJDb250ZXh0XCI7XG5pbXBvcnQgdHlwZSB7XG5cdE1hbmlmZXN0QWN0aW9uLFxuXHROYXZpZ2F0aW9uU2V0dGluZ3NDb25maWd1cmF0aW9uLFxuXHROYXZpZ2F0aW9uVGFyZ2V0Q29uZmlndXJhdGlvbixcblx0VGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24sXG5cdFRhYmxlTWFuaWZlc3RTZXR0aW5nc0NvbmZpZ3VyYXRpb25cbn0gZnJvbSBcIi4uLy4uL01hbmlmZXN0U2V0dGluZ3NcIjtcbmltcG9ydCB7XG5cdEFjdGlvblR5cGUsXG5cdENyZWF0aW9uTW9kZSxcblx0T3BlcmF0aW9uR3JvdXBpbmdNb2RlLFxuXHRTZWxlY3Rpb25Nb2RlLFxuXHRUZW1wbGF0ZVR5cGUsXG5cdFZhcmlhbnRNYW5hZ2VtZW50VHlwZSxcblx0VmlzdWFsaXphdGlvblR5cGVcbn0gZnJvbSBcIi4uLy4uL01hbmlmZXN0U2V0dGluZ3NcIjtcbmltcG9ydCB0eXBlIE1hbmlmZXN0V3JhcHBlciBmcm9tIFwiLi4vLi4vTWFuaWZlc3RXcmFwcGVyXCI7XG5pbXBvcnQgeyBBZ2dyZWdhdGlvbkhlbHBlciB9IGZyb20gXCIuLi8uLi9oZWxwZXJzL0FnZ3JlZ2F0aW9uXCI7XG5pbXBvcnQgeyBnZXRUYWJsZUlEIH0gZnJvbSBcIi4uLy4uL2hlbHBlcnMvSURcIjtcbmltcG9ydCB7IGdldE1lc3NhZ2VUeXBlRnJvbUNyaXRpY2FsaXR5VHlwZSB9IGZyb20gXCIuL0NyaXRpY2FsaXR5XCI7XG5pbXBvcnQge1xuXHRDb2x1bW5UeXBlLFxuXHRmaW5kQ29sdW1uQnlQYXRoLFxuXHRnZXRDb2x1bW5zRnJvbUVudGl0eVR5cGUsXG5cdGdldFJlcXVpcmVkUHJvcGVydGllcyxcblx0Z2V0VGFibGVDb2x1bW5zLFxuXHR1cGRhdGVMaW5rZWRQcm9wZXJ0aWVzLFxuXHR0eXBlIEFubm90YXRpb25UYWJsZUNvbHVtbixcblx0dHlwZSBFeHRlbnNpb25Gb3JBbmFseXRpY3MsXG5cdHR5cGUgVGFibGVDb2x1bW5cbn0gZnJvbSBcIi4vdGFibGUvQ29sdW1uc1wiO1xuaW1wb3J0IHR5cGUgeyBTdGFuZGFyZEFjdGlvbiB9IGZyb20gXCIuL3RhYmxlL1N0YW5kYXJkQWN0aW9uc1wiO1xuaW1wb3J0IHtcblx0U3RhbmRhcmRBY3Rpb25LZXlzLFxuXHRnZW5lcmF0ZVN0YW5kYXJkQWN0aW9uc0NvbnRleHQsXG5cdGdldENyZWF0aW9uUm93LFxuXHRnZXRDdXRWaXNpYmlsaXR5LFxuXHRnZXREZWxldGVWaXNpYmlsaXR5LFxuXHRnZXRJbnNlcnRVcGRhdGVBY3Rpb25zVGVtcGxhdGluZyxcblx0Z2V0TWFzc0VkaXRWaXNpYmlsaXR5LFxuXHRnZXRSZXN0cmljdGlvbnMsXG5cdGdldFN0YW5kYXJkQWN0aW9uQ3JlYXRlLFxuXHRnZXRTdGFuZGFyZEFjdGlvbkN1dCxcblx0Z2V0U3RhbmRhcmRBY3Rpb25EZWxldGUsXG5cdGdldFN0YW5kYXJkQWN0aW9uSW5zaWdodHMsXG5cdGdldFN0YW5kYXJkQWN0aW9uTWFzc0VkaXQsXG5cdGdldFN0YW5kYXJkQWN0aW9uTW92ZVVwRG93bixcblx0Z2V0U3RhbmRhcmRBY3Rpb25QYXN0ZSxcblx0aXNEcmFmdE9yU3RpY2t5U3VwcG9ydGVkLFxuXHRpc0luRGlzcGxheU1vZGVcbn0gZnJvbSBcIi4vdGFibGUvU3RhbmRhcmRBY3Rpb25zXCI7XG5cbnR5cGUgVXBsb2FkVGFibGVTZXR0aW5ncyA9IHtcblx0c3RyZWFtOiBzdHJpbmc7XG5cdGZpbGVOYW1lPzogc3RyaW5nO1xuXHRmaWxlTmFtZU1heExlbmd0aD86IGludDtcblx0YWNjZXB0YWJsZU1lZGlhVHlwZXM/OiBzdHJpbmdbXTtcblx0bWF4TGVuZ3RoPzogaW50O1xuXHR1cGxvYWRBY3Rpb24/OiBTdGFuZGFyZEFjdGlvbjtcbn07XG5cbnR5cGUgUm93TmF2aWdhdGlvbkluZm8gPVxuXHR8IHtcblx0XHRcdHR5cGU6IFwiT3V0Ym91bmRcIjtcblx0XHRcdG5hdmlnYXRpb25UYXJnZXQ6IHN0cmluZztcblx0XHRcdG5hdmlnYXRpb25JbkVkaXRNb2RlPzogYm9vbGVhbjtcblx0ICB9XG5cdHwge1xuXHRcdFx0dHlwZTogXCJOYXZpZ2F0aW9uXCI7XG5cdFx0XHR0YXJnZXRQYXRoOiBzdHJpbmc7XG5cdFx0XHRjaGVja0VkaXRhYmxlOiBib29sZWFuO1xuXHRcdFx0cmVjcmVhdGVDb250ZXh0OiBib29sZWFuO1xuXHRcdFx0cm91dGVQYXRoOiBzdHJpbmc7XG5cdFx0XHRuYXZpZ2F0aW9uSW5FZGl0TW9kZT86IGJvb2xlYW47XG5cdCAgfTtcblxudHlwZSBSb3dDb25maWd1cmF0aW9uID0ge1xuXHRhY3Rpb25UeXBlPzogc3RyaW5nO1xuXHRuYXZpZ2F0aW9uSW5mbz86IFJvd05hdmlnYXRpb25JbmZvO1xuXHRyb3dIaWdobGlnaHRpbmc6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uO1xuXHRyb3dOYXZpZ2F0ZWQ6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uO1xuXHRyb3dDcml0aWNhbGl0eUZvckluc2lnaHRzPzogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb247XG5cdHZpc2libGU/OiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjtcbn07XG5cbmV4cG9ydCB0eXBlIE1hc3NFZGl0VGFibGVDb25maWd1cmF0aW9uID0ge1xuXHRlbmFibGVkOiBib29sZWFuO1xuXHR2aXNpYmxlRmllbGRzOiBzdHJpbmdbXTtcblx0aWdub3JlZEZpZWxkczogc3RyaW5nW107XG5cdG9wZXJhdGlvbkdyb3VwaW5nTW9kZTogT3BlcmF0aW9uR3JvdXBpbmdNb2RlO1xuXHRjdXN0b21GcmFnbWVudD86IHN0cmluZztcblx0ZnJvbUlubGluZT86IGJvb2xlYW47XG59O1xuXG50eXBlIFRhYmxlU29ydENvbmRpdGlvbnMgPSB7XG5cdHNvcnRlcnM6IHtcblx0XHRuYW1lOiBzdHJpbmc7XG5cdFx0ZGVzY2VuZGluZzogYm9vbGVhbjtcblx0fVtdO1xufTtcblxudHlwZSBUYWJsZUdyb3VwQ29uZGl0aW9ucyA9IHtcblx0Z3JvdXBMZXZlbHM6IHsgbmFtZTogc3RyaW5nIH1bXTtcbn07XG5cbnR5cGUgVGFibGVBZ2dyZWdhdGVDb25kaXRpb25zID0gUmVjb3JkPHN0cmluZywgb2JqZWN0PjtcblxudHlwZSBUYWJsZVAxM25Nb2RlID0gXCJBZ2dyZWdhdGVcIiB8IFwiQ29sdW1uXCIgfCBcIkZpbHRlclwiIHwgXCJHcm91cFwiIHwgXCJTb3J0XCI7XG5cbmV4cG9ydCB0eXBlIEFuYWx5dGljYWxDb25maWd1cmF0aW9uID0ge1xuXHRhZ2dyZWdhdGlvbk9uTGVhZkxldmVsPzogYm9vbGVhbjtcbn07XG5cbmV4cG9ydCB0eXBlIFRhYmxlQW5ub3RhdGlvbkNvbmZpZ3VyYXRpb24gPSB7XG5cdGNvbGxlY3Rpb246IHN0cmluZztcblx0dmFyaWFudE1hbmFnZW1lbnQ6IFZhcmlhbnRNYW5hZ2VtZW50VHlwZTtcblx0ZmlsdGVySWQ/OiBzdHJpbmc7XG5cdGlkOiBzdHJpbmc7XG5cdGFwaUlkOiBzdHJpbmc7XG5cdG5hdmlnYXRpb25QYXRoOiBzdHJpbmc7XG5cdHAxM25Nb2RlPzogVGFibGVQMTNuTW9kZVtdO1xuXHRyb3c/OiBSb3dDb25maWd1cmF0aW9uO1xuXHRzZWxlY3Rpb25Nb2RlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cdGlzSW5zZXJ0VXBkYXRlQWN0aW9uc1RlbXBsYXRlZDogYm9vbGVhbjtcblx0dXBkYXRhYmxlUHJvcGVydHlQYXRoOiBzdHJpbmc7XG5cdGRpc3BsYXlNb2RlPzogYm9vbGVhbjtcblx0dGhyZXNob2xkOiBudW1iZXI7XG5cdGVudGl0eU5hbWU6IHN0cmluZztcblx0ZW50aXR5VHlwZU5hbWU6IHN0cmluZztcblx0c29ydENvbmRpdGlvbnM/OiBUYWJsZVNvcnRDb25kaXRpb25zO1xuXHRncm91cENvbmRpdGlvbnM/OiBUYWJsZUdyb3VwQ29uZGl0aW9ucztcblx0YWdncmVnYXRlQ29uZGl0aW9ucz86IFRhYmxlQWdncmVnYXRlQ29uZGl0aW9ucztcblx0aW5pdGlhbEV4cGFuc2lvbkxldmVsPzogbnVtYmVyO1xuXHRhbGxvd0Ryb3BCZXR3ZWVuTm9kZXM/OiBib29sZWFuO1xuXHRjaGFuZ2VTaWJsaW5nRm9yUm9vdHNTdXBwb3J0ZWQ/OiBib29sZWFuO1xuXHQvKiogQ3JlYXRlIG5ldyBlbnRyaWVzICovXG5cdGNyZWF0ZTogQ3JlYXRlQmVoYXZpb3IgfCBDcmVhdGVCZWhhdmlvckV4dGVybmFsO1xuXHR0aXRsZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXHRzZWFyY2hhYmxlOiBib29sZWFuO1xuXHRyZXF1aXJlZFByb3BlcnRpZXM/OiBzdHJpbmdbXTtcblx0dXBsb2FkVGFibGU/OiBVcGxvYWRUYWJsZVNldHRpbmdzO1xufTtcbi8qKlxuICogTmV3IGVudHJpZXMgYXJlIGNyZWF0ZWQgd2l0aGluIHRoZSBhcHAgKGRlZmF1bHQgY2FzZSlcbiAqL1xuZXhwb3J0IHR5cGUgQ3JlYXRlQmVoYXZpb3IgPSB7XG5cdG1vZGU6IENyZWF0aW9uTW9kZTtcblx0YXBwZW5kOiBib29sZWFuO1xuXHRuZXdBY3Rpb24/OiBzdHJpbmc7XG5cdG5hdmlnYXRlVG9UYXJnZXQ/OiBzdHJpbmc7XG59O1xuXG5leHBvcnQgdHlwZSBFeHRlcm5hbE1ldGhvZENvbmZpZyA9IHtcblx0bW9kdWxlTmFtZTogc3RyaW5nO1xuXHRtZXRob2ROYW1lOiBzdHJpbmc7XG59O1xuLyoqXG4gKiBOZXcgZW50cmllcyBhcmUgY3JlYXRlZCBieSBuYXZpZ2F0aW5nIHRvIHNvbWUgdGFyZ2V0XG4gKi9cbmV4cG9ydCB0eXBlIENyZWF0ZUJlaGF2aW9yRXh0ZXJuYWwgPSB7XG5cdG1vZGU6IFwiRXh0ZXJuYWxcIjtcblx0b3V0Ym91bmQ6IHN0cmluZztcblx0b3V0Ym91bmREZXRhaWw6IE5hdmlnYXRpb25UYXJnZXRDb25maWd1cmF0aW9uW1wib3V0Ym91bmREZXRhaWxcIl07XG59O1xuZXhwb3J0IHR5cGUgVGFibGVDYXBhYmlsaXR5UmVzdHJpY3Rpb24gPSB7XG5cdGlzRGVsZXRhYmxlOiBib29sZWFuO1xuXHRpc1VwZGF0YWJsZTogYm9vbGVhbjtcbn07XG5leHBvcnQgdHlwZSBUYWJsZUZpbHRlcnNDb25maWd1cmF0aW9uID0ge1xuXHRwYXRoczoge1xuXHRcdGFubm90YXRpb25QYXRoOiBzdHJpbmc7XG5cdH1bXTtcblx0c2hvd0NvdW50cz86IGJvb2xlYW47XG59O1xuZXhwb3J0IHR5cGUgU2VsZWN0aW9uVmFyaWFudENvbmZpZ3VyYXRpb24gPSB7XG5cdHByb3BlcnR5TmFtZXM6IHN0cmluZ1tdO1xuXHR0ZXh0Pzogc3RyaW5nO1xufTtcblxuZXhwb3J0IHR5cGUgVGFibGVDb250cm9sQ29uZmlndXJhdGlvbiA9IHtcblx0ZGlzYWJsZVJlcXVlc3RDYWNoZT86IGJvb2xlYW47XG5cdGNyZWF0ZUF0RW5kOiBib29sZWFuO1xuXHRjcmVhdGVJblBsYWNlPzogYm9vbGVhbjtcblx0Y3JlYXRpb25Nb2RlOiBDcmVhdGlvbk1vZGU7XG5cdG91dGJvdW5kQ3JlYXRpb24/OiBzdHJpbmc7XG5cdGRpc2FibGVBZGRSb3dCdXR0b25Gb3JFbXB0eURhdGE6IGJvb2xlYW47XG5cdGN1c3RvbVZhbGlkYXRpb25GdW5jdGlvbjogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXHR1c2VDb25kZW5zZWRUYWJsZUxheW91dDogYm9vbGVhbjtcblx0ZW5hYmxlRXhwb3J0OiBib29sZWFuO1xuXHRlbmFibGVQYXN0aW5nT2ZDb21wdXRlZFByb3BlcnRpZXM/OiBib29sZWFuO1xuXHRmcm96ZW5Db2x1bW5Db3VudD86IG51bWJlcjtcblx0d2lkdGhJbmNsdWRpbmdDb2x1bW5IZWFkZXI/OiBib29sZWFuO1xuXHRoZWFkZXI/OiBzdHJpbmc7XG5cdGhlYWRlclZpc2libGU/OiBib29sZWFuO1xuXHRmaWx0ZXJzPzogUGFydGlhbDxSZWNvcmQ8XCJxdWlja0ZpbHRlcnNcIiB8IFwiaGlkZGVuRmlsdGVyc1wiLCBUYWJsZUZpbHRlcnNDb25maWd1cmF0aW9uPj47XG5cdHR5cGU6IFRhYmxlVHlwZTtcblx0cm93Q291bnRNb2RlPzogVGFibGVSb3dDb3VudE1vZGU7XG5cdHJvd0NvdW50PzogbnVtYmVyO1xuXHRzY3JvbGxUaHJlc2hvbGQ/OiBudW1iZXI7XG5cdHNlbGVjdEFsbD86IGJvb2xlYW47XG5cdHNlbGVjdGlvbkxpbWl0OiBudW1iZXI7XG5cdG11bHRpU2VsZWN0TW9kZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXHRlbmFibGVQYXN0ZTogYm9vbGVhbjtcblx0aWdub3JlZEZpZWxkcz86IHN0cmluZztcblx0cmVhZE9ubHk/OiBib29sZWFuO1xuXHRkaXNhYmxlQ29weVRvQ2xpcGJvYXJkPzogYm9vbGVhbjtcblx0ZW5hYmxlRnVsbFNjcmVlbjogYm9vbGVhbjtcblx0c2hvd1Jvd0NvdW50OiBib29sZWFuO1xuXHRpbmxpbmVDcmVhdGlvblJvd0NvdW50PzogbnVtYmVyO1xuXHRpbmxpbmVDcmVhdGlvblJvd3NIaWRkZW5JbkVkaXRNb2RlPzogYm9vbGVhbjtcblx0bWFzc0VkaXQ6IE1hc3NFZGl0VGFibGVDb25maWd1cmF0aW9uO1xuXHRlbmFibGVBdXRvQ29sdW1uV2lkdGg6IGJvb2xlYW47XG5cdGhhc0RhdGFTdGF0ZUluZGljYXRvckZpbHRlcjogYm9vbGVhbjtcblx0aXNDb21wYWN0VHlwZT86IGJvb2xlYW47XG5cdGhpZXJhcmNoeVF1YWxpZmllcj86IHN0cmluZztcblx0aXNIaWVyYXJjaHlQYXJlbnROb2RlVXBkYXRhYmxlPzogYm9vbGVhbjtcblx0ZW5hYmxlQWRkQ2FyZFRvSW5zaWdodHM/OiBib29sZWFuIHwgdW5kZWZpbmVkO1xuXHRjcmVhdGlvbkRpYWxvZ0ZpZWxkcz86IHN0cmluZ1tdO1xuXHRub2RlVHlwZT86IHtcblx0XHRwcm9wZXJ0eU5hbWU6IHN0cmluZztcblx0XHR2YWx1ZXM6IHsgdmFsdWU6IHN0cmluZzsgdGV4dDogc3RyaW5nOyBjcmVhdGlvbkRpYWxvZ0ZpZWxkcz86IHN0cmluZ1tdIH1bXTtcblx0fTtcblx0Y3JlYXRlRW5hYmxlbWVudD86IEV4dGVybmFsTWV0aG9kQ29uZmlnO1xuXHRpc05vZGVNb3ZhYmxlPzogRXh0ZXJuYWxNZXRob2RDb25maWc7XG5cdGlzTW92ZVRvUG9zaXRpb25BbGxvd2VkPzogRXh0ZXJuYWxNZXRob2RDb25maWc7XG5cdHNlbGVjdGlvbkNoYW5nZT86IHN0cmluZztcblx0YWRkaXRpb25hbFJlcXVpcmVkTW9kdWxlcz86IHN0cmluZ1tdO1xuXHRyb3dQcmVzcz86IHN0cmluZztcblx0YmVmb3JlUmViaW5kVGFibGU/OiBzdHJpbmc7XG5cdGV4cG9ydFJlcXVlc3RTaXplPzogbnVtYmVyO1xuXHRlbmFibGVVcGxvYWRQbHVnaW4/OiBib29sZWFuO1xuXHRtb2RlRm9yTm9EYXRhTWVzc2FnZT86IHN0cmluZztcblx0YW5hbHl0aWNhbENvbmZpZ3VyYXRpb24/OiBBbmFseXRpY2FsQ29uZmlndXJhdGlvbjtcbn07XG5leHBvcnQgdHlwZSBUYWJsZVR5cGUgPSBcIkdyaWRUYWJsZVwiIHwgXCJSZXNwb25zaXZlVGFibGVcIiB8IFwiQW5hbHl0aWNhbFRhYmxlXCIgfCBcIlRyZWVUYWJsZVwiO1xuZXhwb3J0IHR5cGUgVGFibGVSb3dDb3VudE1vZGUgPSBcIkF1dG9cIiB8IFwiRml4ZWRcIiB8IFwiSW50ZXJhY3RpdmVcIjtcblxuZXhwb3J0IHR5cGUgSW50ZXJuYWxFeHRlbnNpb25Gb3JBbmFseXRpY3MgPSBFeHRlbnNpb25Gb3JBbmFseXRpY3MgJiB7XG5cdGZyb21Hcm91cGFibGVQcm9wZXJ0eTogYm9vbGVhbjtcblx0cmVsYXRpdmVQYXRoOiBzdHJpbmc7XG59O1xuZXhwb3J0IHR5cGUgVGFibGVWaXN1YWxpemF0aW9uID0ge1xuXHR0eXBlOiBWaXN1YWxpemF0aW9uVHlwZS5UYWJsZTtcblx0YW5ub3RhdGlvbjogVGFibGVBbm5vdGF0aW9uQ29uZmlndXJhdGlvbjtcblx0Y29udHJvbDogVGFibGVDb250cm9sQ29uZmlndXJhdGlvbjtcblx0Y29sdW1uczogVGFibGVDb2x1bW5bXTtcblx0YWN0aW9uczogQmFzZUFjdGlvbltdO1xuXHRjb21tYW5kQWN0aW9ucz86IFJlY29yZDxzdHJpbmcsIEN1c3RvbUFjdGlvbj47XG5cdGFuYWx5dGljc0V4dGVuc2lvbnM/OiBSZWNvcmQ8c3RyaW5nLCBJbnRlcm5hbEV4dGVuc2lvbkZvckFuYWx5dGljcz47XG5cdHJlcXVlc3RBdExlYXN0OiBSZXF1ZXN0QXRMZWFzdDtcblx0ZW5hYmxlQW5hbHl0aWNzPzogYm9vbGVhbjtcblx0ZW5hYmxlQmFzaWNTZWFyY2g/OiBib29sZWFuO1xuXHRvcGVyYXRpb25BdmFpbGFibGVNYXA6IHN0cmluZztcblx0b3BlcmF0aW9uQXZhaWxhYmxlUHJvcGVydGllczogc3RyaW5nO1xuXHRoZWFkZXJJbmZvVGl0bGU6IHN0cmluZztcblx0c2VtYW50aWNLZXlzOiBzdHJpbmdbXTtcblx0aGVhZGVySW5mb1R5cGVOYW1lOiBQcm9wZXJ0eUFubm90YXRpb25WYWx1ZTxTdHJpbmc+IHwgdW5kZWZpbmVkO1xuXHRlbmFibGUkc2VsZWN0OiBib29sZWFuO1xuXHRlbmFibGUkJGdldEtlZXBBbGl2ZUNvbnRleHQ6IGJvb2xlYW47XG5cdGlzSW5zaWdodHNFbmFibGVkPzogYm9vbGVhbjtcblx0aGVhZGVyPzogc3RyaW5nO1xuXHRoZWFkZXJWaXNpYmxlPzogYm9vbGVhbjtcblx0aGFuZGxlUGF0Y2hTZW50OiBib29sZWFuO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIGFuIGFycmF5IG9mIGFsbCBzdGFuZGFyZCwgYW5ub3RhdGlvbi1iYXNlZCwgYW5kIG1hbmlmZXN0LWJhc2VkIHRhYmxlIGFjdGlvbnMuXG4gKiBAcGFyYW0gbGluZUl0ZW1Bbm5vdGF0aW9uXG4gKiBAcGFyYW0gdmlzdWFsaXphdGlvblBhdGhcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcGFyYW0gc3RhbmRhcmRBY3Rpb25zXG4gKiBAcGFyYW0gbmF2aWdhdGlvblNldHRpbmdzXG4gKiBAcmV0dXJucyBUaGUgY29tcGxldGUgdGFibGUgYWN0aW9uc1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0VGFibGVBY3Rpb25zKFxuXHRsaW5lSXRlbUFubm90YXRpb246IExpbmVJdGVtLFxuXHR2aXN1YWxpemF0aW9uUGF0aDogc3RyaW5nLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sXG5cdHN0YW5kYXJkQWN0aW9uczogU3RhbmRhcmRBY3Rpb25zQ29uZmlndXJhdGlvbltcInN0YW5kYXJkQWN0aW9uc1wiXSxcblx0bmF2aWdhdGlvblNldHRpbmdzPzogTmF2aWdhdGlvblNldHRpbmdzQ29uZmlndXJhdGlvblxuKTogQ29tYmluZWRBY3Rpb24ge1xuXHQvLyAxLiBHZXQgYWN0aW9ucyBmcm9tIGFubm90YXRpb25zXG5cdGNvbnN0IHRhYmxlQWN0aW9ucyA9IGdldFRhYmxlQW5ub3RhdGlvbkFjdGlvbnMobGluZUl0ZW1Bbm5vdGF0aW9uLCB2aXN1YWxpemF0aW9uUGF0aCwgY29udmVydGVyQ29udGV4dCk7XG5cdC8vIDIuIEdldCBhY3Rpb25zIGZyb20gbWFuaWZlc3Rcblx0Y29uc3QgbWFuaWZlc3RBY3Rpb25zID0gZ2V0QWN0aW9uc0Zyb21NYW5pZmVzdChcblx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0Q29udHJvbENvbmZpZ3VyYXRpb248VGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24+KHZpc3VhbGl6YXRpb25QYXRoKS5hY3Rpb25zIGFzIFJlY29yZDxcblx0XHRcdHN0cmluZyxcblx0XHRcdE1hbmlmZXN0QWN0aW9uXG5cdFx0Pixcblx0XHRjb252ZXJ0ZXJDb250ZXh0LFxuXHRcdHRhYmxlQWN0aW9ucy50YWJsZUFjdGlvbnMsXG5cdFx0bmF2aWdhdGlvblNldHRpbmdzLFxuXHRcdHRydWVcblx0KTtcblx0Ly8gVGhlIFwiQ29weVwiIGFjdGlvbiBhbHdheXMgbmVlZHMgdG8gYmUgcGxhY2VkIGFmdGVyIHRoZSBcIkNyZWF0ZVwiIGFjdGlvbiwgc28gd2UgbmVlZCB0byBzZXBhcmF0ZSBpdFxuXHRjb25zdCBjb3B5QWN0aW9ucyA9IHRhYmxlQWN0aW9ucy50YWJsZUFjdGlvbnMuZmlsdGVyKChhKSA9PiBhLnR5cGUgPT09IEFjdGlvblR5cGUuQ29weSk7XG5cdGNvbnN0IGFubm90YXRpb25BY3Rpb25zID0gdGFibGVBY3Rpb25zLnRhYmxlQWN0aW9ucy5maWx0ZXIoKGEpID0+IGEudHlwZSAhPT0gQWN0aW9uVHlwZS5Db3B5KTtcblx0Ly8gQ29tYmluZSBzdGFuZGFyZCwgYW5ub3RhdGlvbiwgYW5kIGN1c3RvbSBhY3Rpb25zIHRvZ2V0aGVyLCByZXNwZWN0aW5nIHRoZSBmaXhlZCBvcmRlciBvZiBzdGFuZGFyZCBhY3Rpb25zXG5cdGNvbnN0IGFubm90YXRpb25BbmRTdGFuZGFyZEFjdGlvbnMgPSAoXG5cdFx0W1xuXHRcdFx0Li4uYW5ub3RhdGlvbkFjdGlvbnMsXG5cdFx0XHRzdGFuZGFyZEFjdGlvbnMuY3JlYXRlLFxuXHRcdFx0Li4uY29weUFjdGlvbnMsXG5cdFx0XHRzdGFuZGFyZEFjdGlvbnMuZGVsZXRlLFxuXHRcdFx0c3RhbmRhcmRBY3Rpb25zLm1hc3NFZGl0LFxuXHRcdFx0c3RhbmRhcmRBY3Rpb25zLmluc2lnaHRzLFxuXHRcdFx0c3RhbmRhcmRBY3Rpb25zLmNyZWF0aW9uUm93LCAvLyBOb3QgdGVtcGxhdGVkIGFzIGEgYnV0dG9uXG5cdFx0XHRzdGFuZGFyZEFjdGlvbnMuY3V0LFxuXHRcdFx0c3RhbmRhcmRBY3Rpb25zLnBhc3RlLFxuXHRcdFx0c3RhbmRhcmRBY3Rpb25zLm1vdmVVcCxcblx0XHRcdHN0YW5kYXJkQWN0aW9ucy5tb3ZlRG93blxuXHRcdF0gYXMgQmFzZUFjdGlvbltdXG5cdCkuZmlsdGVyKChhY3Rpb24pID0+IGFjdGlvbiAhPT0gdW5kZWZpbmVkKTtcblx0Ly8gQW5jaG9yIGFsbCBub24tYW5jaG9yZWQgbWFuaWZlc3QgY3VzdG9tIGFjdGlvbnMvbWVudXMgYmVmb3JlIHRoZSBzdGFuZGFyZCBhY3Rpb25zXG5cdGZvciAoY29uc3QgbWFuaWZlc3RBY3Rpb24gb2YgT2JqZWN0LnZhbHVlcyhtYW5pZmVzdEFjdGlvbnMuYWN0aW9ucykpIHtcblx0XHRpZiAoKG1hbmlmZXN0QWN0aW9uLnR5cGUgPT09IEFjdGlvblR5cGUuRGVmYXVsdCB8fCBtYW5pZmVzdEFjdGlvbi50eXBlID09PSBBY3Rpb25UeXBlLk1lbnUpICYmICFtYW5pZmVzdEFjdGlvbi5wb3NpdGlvbj8uYW5jaG9yKSB7XG5cdFx0XHRtYW5pZmVzdEFjdGlvbi5wb3NpdGlvbiA9IHtcblx0XHRcdFx0YW5jaG9yOiBTdGFuZGFyZEFjdGlvbktleXMuQ3JlYXRlLFxuXHRcdFx0XHRwbGFjZW1lbnQ6IFBsYWNlbWVudC5CZWZvcmVcblx0XHRcdH07XG5cdFx0fVxuXHR9XG5cdC8vIEluc2VydCB0d2ljZSB0byBhbGxvdyByZWd1bGFyIG92ZXJyaWRlIGZvciBub24tc3RhbmRhcmQgYWN0aW9ucyBhbmQgcG9zaXRpb25hbCBvdmVycmlkZSBmb3Igc3RhbmRhcmQgYWN0aW9uc1xuXHRjb25zdCBtYW5pZmVzdEFjdGlvbkVudHJpZXMgPSBPYmplY3QuZW50cmllcyhtYW5pZmVzdEFjdGlvbnMuYWN0aW9ucyk7XG5cdGNvbnN0IHN0YW5kYXJkTWFuaWZlc3RBY3Rpb25zID0gT2JqZWN0LmZyb21FbnRyaWVzKG1hbmlmZXN0QWN0aW9uRW50cmllcy5maWx0ZXIoKFtrZXldKSA9PiBrZXkuc3RhcnRzV2l0aChcIlN0YW5kYXJkQWN0aW9uOjpcIikpKTtcblx0Y29uc3Qgbm9uU3RhbmRhcmRNYW5pZmVzdEFjdGlvbnMgPSBPYmplY3QuZnJvbUVudHJpZXMobWFuaWZlc3RBY3Rpb25FbnRyaWVzLmZpbHRlcigoW2tleV0pID0+ICFzdGFuZGFyZE1hbmlmZXN0QWN0aW9uc1trZXldKSk7XG5cdGNvbnN0IGFjdGlvbk92ZXJ3cml0ZUNvbmZpZzogT3ZlcnJpZGVUeXBlQWN0aW9uID0ge1xuXHRcdGlzTmF2aWdhYmxlOiBPdmVycmlkZVR5cGUub3ZlcndyaXRlLFxuXHRcdGVuYWJsZU9uU2VsZWN0OiBPdmVycmlkZVR5cGUub3ZlcndyaXRlLFxuXHRcdGVuYWJsZUF1dG9TY3JvbGw6IE92ZXJyaWRlVHlwZS5vdmVyd3JpdGUsXG5cdFx0ZW5hYmxlZDogT3ZlcnJpZGVUeXBlLm92ZXJ3cml0ZSxcblx0XHR2aXNpYmxlOiBPdmVycmlkZVR5cGUub3ZlcndyaXRlLFxuXHRcdHZpc2libGVGb3JDb250ZXh0TWVudTogT3ZlcnJpZGVUeXBlLm92ZXJ3cml0ZSxcblx0XHRkZWZhdWx0VmFsdWVzRXh0ZW5zaW9uRnVuY3Rpb246IE92ZXJyaWRlVHlwZS5vdmVyd3JpdGUsXG5cdFx0Y29tbWFuZDogT3ZlcnJpZGVUeXBlLm92ZXJ3cml0ZSxcblx0XHRwb3NpdGlvbjogT3ZlcnJpZGVUeXBlLm92ZXJ3cml0ZSxcblx0XHRtZW51OiBPdmVycmlkZVR5cGUub3ZlcndyaXRlXG5cdH07XG5cdC8vIDMuIEdldCBhbGwgYW5ub3RhdGlvbiBtZW51IGl0ZW1zXG5cdGNvbnN0IGFubm90YXRpb25NZW51QWN0aW9uSXRlbXMgPSBnZXRBbm5vdGF0aW9uTWVudUFjdGlvbkl0ZW1zKGFubm90YXRpb25BY3Rpb25zKTtcblx0Ly8gNC4gRmluZCBtYW5pZmVzdCBhY3Rpb25zIHdoaWNoIG92ZXJyaWRlIGFueSBhbm5vdGF0aW9uIG1lbnUgaXRlbXNcblx0Y29uc3QgbWF0Y2hpbmdNYW5pZmVzdEFjdGlvbnMgPSBnZXRNYXRjaGluZ01hbmlmZXN0QWN0aW9uKGFubm90YXRpb25NZW51QWN0aW9uSXRlbXMsIG1hbmlmZXN0QWN0aW9ucy5hY3Rpb25zKTtcblx0Ly8gNS4gR2V0IG92ZXJyaWRkZW4gYW5ub3RhdGlvbiBtZW51IGl0ZW1zXG5cdGNvbnN0IG92ZXJ3cml0dGVuTWVudUFjdGlvbkl0ZW1zID0gaW5zZXJ0Q3VzdG9tRWxlbWVudHMoYW5ub3RhdGlvbk1lbnVBY3Rpb25JdGVtcywgbWF0Y2hpbmdNYW5pZmVzdEFjdGlvbnMsIGFjdGlvbk92ZXJ3cml0ZUNvbmZpZyk7XG5cdC8vIDYuIE92ZXJyaWRlIGFsbCBhY3Rpb25zXG5cdGxldCBhY3Rpb25zID0gaW5zZXJ0Q3VzdG9tRWxlbWVudHMoYW5ub3RhdGlvbkFuZFN0YW5kYXJkQWN0aW9ucywgbm9uU3RhbmRhcmRNYW5pZmVzdEFjdGlvbnMsIGFjdGlvbk92ZXJ3cml0ZUNvbmZpZykgYXMgQ3VzdG9tQWN0aW9uW107XG5cdGFjdGlvbnMgPSBpbnNlcnRDdXN0b21FbGVtZW50cyhhY3Rpb25zLCBzdGFuZGFyZE1hbmlmZXN0QWN0aW9ucywge1xuXHRcdHBvc2l0aW9uOiBPdmVycmlkZVR5cGUub3ZlcndyaXRlXG5cdH0pO1xuXHQvLyA3LiBSZXBsYWNlIG9yaWdpbmFsIG1lbnUgaXRlbXMgd2l0aCB0aGVpciBjb3JyZXNwb25kaW5nIG92ZXJyaWRkZW4gbWVudSBpdGVtc1xuXHRwcmVwYXJlTWVudUFjdGlvbnMoYWN0aW9ucywgb3ZlcndyaXR0ZW5NZW51QWN0aW9uSXRlbXMpO1xuXHQvLyA4LiBSZW1vdmUgZHVwbGljYXRlIGFjdGlvbnMgd2hpY2ggYXJlIG1lbnUgaXRlbXNcblx0YWN0aW9ucyA9IHJlbW92ZUR1cGxpY2F0ZUFjdGlvbnMoYWN0aW9ucyk7XG5cdC8vIDkuIEhpZGUgbWVudXMgd2hlcmUgYWxsIG1lbnUgaXRlbXMgYXJlIGhpZGRlblxuXHRhY3Rpb25zID0gZ2V0VmlzaWJpbGl0eUVuYWJsZW1lbnRNZW51QWN0aW9ucyhhY3Rpb25zKTtcblx0cmV0dXJuIHtcblx0XHRhY3Rpb25zOiBhY3Rpb25zLFxuXHRcdGNvbW1hbmRBY3Rpb25zOiBtYW5pZmVzdEFjdGlvbnMuY29tbWFuZEFjdGlvbnNcblx0fTtcbn1cblxuLy9SZXR1cm5zIHRoZSBDb250ZXh0RGVmaW5pbmdQcm9wZXJ0aWVzIGZyb20gdGhlIGN1c3RvbSBhZ2dyZWdhdGUgYW5ub3RhdGlvbiBvciBmcm9tIHRoZSBhZ2dyZWdhdGlvbiBhbm5vdGF0aW9uIG9uIHRoZSBwcm9wZXJ0eSBpdHNlbGYuXG5mdW5jdGlvbiBnZXRDb250ZXh0RGVmaW5pbmdQcm9wZXJ0aWVzRnJvbUFnZ3JlZ2F0aW9uQW5ub3RhdGlvbihhZ2dyZWdhdGlvbkhlbHBlcjogQWdncmVnYXRpb25IZWxwZXIpOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmdbXT4ge1xuXHRjb25zdCBjdXN0b21BZ2dyZWdhdGVBbm5vdGF0aW9ucyA9IGFnZ3JlZ2F0aW9uSGVscGVyLmdldEN1c3RvbUFnZ3JlZ2F0ZURlZmluaXRpb25zKCk7XG5cdGNvbnN0IGN1c3RvbUFnZ3JlZ2F0ZWRlZmluaXRpb25zOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmdbXT4gPSB7fTtcblx0Y3VzdG9tQWdncmVnYXRlQW5ub3RhdGlvbnMuZm9yRWFjaCgoYW5ub3RhdGlvbikgPT4ge1xuXHRcdGNvbnN0IGFnZ3JlZ2F0ZWRQcm9wZXJ0eSA9IGFnZ3JlZ2F0aW9uSGVscGVyLl9lbnRpdHlUeXBlLmVudGl0eVByb3BlcnRpZXMuZmluZCgocHJvcGVydHkpID0+IHtcblx0XHRcdHJldHVybiBwcm9wZXJ0eS5uYW1lID09PSBhbm5vdGF0aW9uLnF1YWxpZmllcjtcblx0XHR9KTtcblx0XHRpZiAoYWdncmVnYXRlZFByb3BlcnR5KSB7XG5cdFx0XHRjb25zdCBjb250ZXh0RGVmaW5pbmdQcm9wZXJ0aWVzID1cblx0XHRcdFx0YW5ub3RhdGlvbi5hbm5vdGF0aW9ucz8uQWdncmVnYXRpb24/LkNvbnRleHREZWZpbmluZ1Byb3BlcnRpZXMgPz9cblx0XHRcdFx0YWdncmVnYXRlZFByb3BlcnR5LmFubm90YXRpb25zLkFnZ3JlZ2F0aW9uPy5Db250ZXh0RGVmaW5pbmdQcm9wZXJ0aWVzO1xuXHRcdFx0Y3VzdG9tQWdncmVnYXRlZGVmaW5pdGlvbnNbYWdncmVnYXRlZFByb3BlcnR5Lm5hbWVdID1cblx0XHRcdFx0Y29udGV4dERlZmluaW5nUHJvcGVydGllcz8ubWFwKChjdHhEZWZQcm9wZXJ0eSkgPT4gY3R4RGVmUHJvcGVydHkudmFsdWUpID8/IFtdO1xuXHRcdH1cblx0fSk7XG5cdHJldHVybiBjdXN0b21BZ2dyZWdhdGVkZWZpbml0aW9ucztcbn1cblxuLyoqXG4gKiBSZXRyaWV2ZSB0aGUgZXh0ZW5zaW9uIGluZm9ybWF0aW9uIGZvciBhbGwgYWdncmVnYWJsZSBwcm9wZXJ0aWVzIC5cbiAqIEBwYXJhbSBlbnRpdHlUeXBlIFRoZSB0YXJnZXQgZW50aXR5IHR5cGUuXG4gKiBAcGFyYW0gdGFibGVDb2x1bW5zIFRoZSBhcnJheSBvZiBjb2x1bW5zIGZvciB0aGUgZW50aXR5IHR5cGUuXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dCBUaGUgY29udmVydGVyIGNvbnRleHQuXG4gKiBAcmV0dXJucyBUaGUgYWdncmVnYXRlIGRlZmluaXRpb25zIGZyb20gdGhlIGVudGl0eVR5cGUsIG9yIHVuZGVmaW5lZCBpZiB0aGUgZW50aXR5IGRvZXNuJ3Qgc3VwcG9ydCBhbmFseXRpY2FsIHF1ZXJpZXMuXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRFeHRlbnNpb25JbmZvRnJvbUVudGl0eVR5cGUgPSBmdW5jdGlvbiAoXG5cdGVudGl0eVR5cGU6IEVudGl0eVR5cGUsXG5cdHRhYmxlQ29sdW1uczogVGFibGVDb2x1bW5bXSxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+XG4pOiBSZWNvcmQ8c3RyaW5nLCBJbnRlcm5hbEV4dGVuc2lvbkZvckFuYWx5dGljcz4gfCB1bmRlZmluZWQge1xuXHRjb25zdCBhZ2dyZWdhdGlvbkhlbHBlciA9IG5ldyBBZ2dyZWdhdGlvbkhlbHBlcihlbnRpdHlUeXBlLCBjb252ZXJ0ZXJDb250ZXh0KTtcblx0aWYgKCFhZ2dyZWdhdGlvbkhlbHBlci5pc0FuYWx5dGljc1N1cHBvcnRlZCgpKSB7XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxuXHQvLyBLZWVwIGEgc2V0IG9mIGFsbCBjdXJyZW5jeS91bml0IHByb3BlcnRpZXMsIGFzIHdlIGRvbid0IHdhbnQgdG8gY29uc2lkZXIgdGhlbSBhcyBhZ2dyZWdhdGVzXG5cdC8vIFRoZXkgYXJlIGFnZ3JlZ2F0ZXMgZm9yIHRlY2huaWNhbCByZWFzb25zICh0byBtYW5hZ2UgbXVsdGktdW5pdHMgc2l0dWF0aW9ucykgYnV0IGl0IGRvZXNuJ3QgbWFrZSBzZW5zZSBmcm9tIGEgdXNlciBzdGFuZHBvaW50XG5cdGNvbnN0IGN1cnJlbmN5T3JVbml0UHJvcGVydGllcyA9IG5ldyBTZXQoKTtcblx0dGFibGVDb2x1bW5zLmZvckVhY2goKGNvbHVtbikgPT4ge1xuXHRcdGNvbnN0IHRhYmxlQ29sdW1uID0gY29sdW1uIGFzIEFubm90YXRpb25UYWJsZUNvbHVtbjtcblx0XHRpZiAodGFibGVDb2x1bW4udW5pdCkge1xuXHRcdFx0Y29uc3QgdGFyZ2V0VW5pdFByb3BlcnR5ID0gdGFibGVDb2x1bW5zLmZpbmQoKHByb3ApID0+IHByb3AubmFtZSA9PT0gdGFibGVDb2x1bW4udW5pdCkgYXMgQW5ub3RhdGlvblRhYmxlQ29sdW1uO1xuXHRcdFx0Y3VycmVuY3lPclVuaXRQcm9wZXJ0aWVzLmFkZCh0YXJnZXRVbml0UHJvcGVydHkucmVsYXRpdmVQYXRoKTtcblx0XHR9XG5cdH0pO1xuXHRjb25zdCBjb250ZXh0RGVmaW5pbmdQcm9wZXJ0aWVzRnJvbUFnZ3JlZ2F0aW9uID0gZ2V0Q29udGV4dERlZmluaW5nUHJvcGVydGllc0Zyb21BZ2dyZWdhdGlvbkFubm90YXRpb24oYWdncmVnYXRpb25IZWxwZXIpO1xuXHRjb25zdCByZXN1bHQ6IFJlY29yZDxzdHJpbmcsIEludGVybmFsRXh0ZW5zaW9uRm9yQW5hbHl0aWNzPiA9IHt9O1xuXHR0YWJsZUNvbHVtbnMuZm9yRWFjaCgoY29sdW1uKSA9PiB7XG5cdFx0Y29uc3QgdGFibGVDb2x1bW4gPSBjb2x1bW4gYXMgQW5ub3RhdGlvblRhYmxlQ29sdW1uO1xuXHRcdGNvbnN0IHByb3BlcnR5ID0gZW50aXR5VHlwZS5lbnRpdHlQcm9wZXJ0aWVzLmZpbmQoKHByb3ApID0+IHByb3AubmFtZSA9PT0gdGFibGVDb2x1bW4ucmVsYXRpdmVQYXRoKTtcblxuXHRcdGlmICh0YWJsZUNvbHVtbi5wcm9wZXJ0eUluZm9zICE9PSB1bmRlZmluZWQgfHwgIXRhYmxlQ29sdW1uLnJlbGF0aXZlUGF0aCkge1xuXHRcdFx0Ly8gSWdub3JlIGNvbXBsZXggY29sdW1uc1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGxldCByYXdDb250ZXh0RGVmaW5pbmdQcm9wZXJ0aWVzID0gY29udGV4dERlZmluaW5nUHJvcGVydGllc0Zyb21BZ2dyZWdhdGlvblt0YWJsZUNvbHVtbi5yZWxhdGl2ZVBhdGhdIGFzIHN0cmluZ1tdIHwgdW5kZWZpbmVkO1xuXG5cdFx0Ly8gaWYgdGhlcmUgaXMgbm8gY3VzdG9tIGFnZ3JlZ2F0ZSBkZWZpbml0aW9uLCBhbmQgdGhlIHByb3BlcnR5IGlzIGdyb3VwYWJsZSwgdGhlbiB3ZSBjYW4gdXNlIHRoZSBkZWZhdWx0IGNvbnRleHQgZGVmaW5pbmcgcHJvcGVydGllc1xuXHRcdGxldCBmcm9tR3JvdXBhYmxlUHJvcGVydHkgPSBmYWxzZTtcblx0XHRpZiAoIXJhd0NvbnRleHREZWZpbmluZ1Byb3BlcnRpZXMgJiYgcHJvcGVydHkgJiYgISFhZ2dyZWdhdGlvbkhlbHBlci5pc1Byb3BlcnR5R3JvdXBhYmxlKHByb3BlcnR5KSkge1xuXHRcdFx0ZnJvbUdyb3VwYWJsZVByb3BlcnR5ID0gdHJ1ZTtcblx0XHRcdHJhd0NvbnRleHREZWZpbmluZ1Byb3BlcnRpZXMgPSBwcm9wZXJ0eS5hbm5vdGF0aW9ucy5BZ2dyZWdhdGlvbj8uQ29udGV4dERlZmluaW5nUHJvcGVydGllcz8ubWFwKFxuXHRcdFx0XHQoY3R4RGVmUHJvcGVydHkpID0+IGN0eERlZlByb3BlcnR5LnZhbHVlXG5cdFx0XHQpO1xuXHRcdH1cblxuXHRcdGlmICghcmF3Q29udGV4dERlZmluaW5nUHJvcGVydGllcyB8fCBjdXJyZW5jeU9yVW5pdFByb3BlcnRpZXMuaGFzKHRhYmxlQ29sdW1uLnJlbGF0aXZlUGF0aCkpIHtcblx0XHRcdC8vIElnbm9yZSBhZ2dyZWdhdGVzIGNvcnJlc3BvbmRpbmcgdG8gY3VycmVuY2llcyBvciB1bml0cyBvZiBtZWFzdXJlXG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0cmVzdWx0W3RhYmxlQ29sdW1uLm5hbWVdID0ge1xuXHRcdFx0ZnJvbUdyb3VwYWJsZVByb3BlcnR5OiBmcm9tR3JvdXBhYmxlUHJvcGVydHksXG5cdFx0XHRyZWxhdGl2ZVBhdGg6IHRhYmxlQ29sdW1uLnJlbGF0aXZlUGF0aFxuXHRcdH07XG5cdFx0Y29uc3QgY29udGV4dERlZmluaW5nUHJvcGVydGllczogc3RyaW5nW10gPSBbXTtcblx0XHRyYXdDb250ZXh0RGVmaW5pbmdQcm9wZXJ0aWVzLmZvckVhY2goKGNvbnRleHREZWZpbmluZ1Byb3BlcnR5TmFtZSkgPT4ge1xuXHRcdFx0Ly8gSWdub3JlIGNvbnRleHQtZGVmaW5pbmcgcHJvcGVydGllcyBjb3JyZXNwb25kaW5nIHRvIGN1cnJlbmNpZXMgb3IgdW5pdHMgb2YgbWVhc3VyZSBvZiBhZ2dyZWdhdGFibGUgcHJvcGVydGllc1xuXHRcdFx0Ly8gKGJ1dCB0aGlzIGlzIGFsbG93ZWQgZm9yIGdyb3VwYWJsZSBwcm9wZXJ0aWVzKVxuXHRcdFx0aWYgKCFmcm9tR3JvdXBhYmxlUHJvcGVydHkgJiYgY3VycmVuY3lPclVuaXRQcm9wZXJ0aWVzLmhhcyhjb250ZXh0RGVmaW5pbmdQcm9wZXJ0eU5hbWUpKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0Y29uc3QgZm91bmRDb2x1bW4gPSBmaW5kQ29sdW1uQnlQYXRoKGNvbnRleHREZWZpbmluZ1Byb3BlcnR5TmFtZSwgdGFibGVDb2x1bW5zKTtcblx0XHRcdGlmIChmb3VuZENvbHVtbikge1xuXHRcdFx0XHRjb250ZXh0RGVmaW5pbmdQcm9wZXJ0aWVzLnB1c2goZm91bmRDb2x1bW4ubmFtZSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0aWYgKGNvbnRleHREZWZpbmluZ1Byb3BlcnRpZXMubGVuZ3RoKSB7XG5cdFx0XHRyZXN1bHRbdGFibGVDb2x1bW4ubmFtZV0uYWRkaXRpb25hbFByb3BlcnRpZXMgPSBjb250ZXh0RGVmaW5pbmdQcm9wZXJ0aWVzO1xuXHRcdH1cblx0fSk7XG5cdHJldHVybiByZXN1bHQ7XG59O1xuLyoqXG4gKiBVcGRhdGVzIGEgdGFibGUgdmlzdWFsaXphdGlvbiBmb3IgYW5hbHl0aWNhbCB1c2UgY2FzZXMuXG4gKiBAcGFyYW0gdGFibGVWaXN1YWxpemF0aW9uIFRoZSB2aXN1YWxpemF0aW9uIHRvIGJlIHVwZGF0ZWRcbiAqIEBwYXJhbSBlbnRpdHlUeXBlIFRoZSBlbnRpdHkgdHlwZSBkaXNwbGF5ZWQgaW4gdGhlIHRhYmxlXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dCBUaGUgY29udmVydGVyIGNvbnRleHRcbiAqIEBwYXJhbSBwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbiBUaGUgcHJlc2VudGF0aW9uVmFyaWFudCBhbm5vdGF0aW9uIChpZiBhbnkpXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1cGRhdGVUYWJsZVZpc3VhbGl6YXRpb25Gb3JUeXBlKFxuXHR0YWJsZVZpc3VhbGl6YXRpb246IFRhYmxlVmlzdWFsaXphdGlvbixcblx0ZW50aXR5VHlwZTogRW50aXR5VHlwZSxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+LFxuXHRwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbj86IFByZXNlbnRhdGlvblZhcmlhbnRUeXBlXG4pOiB2b2lkIHtcblx0aWYgKHRhYmxlVmlzdWFsaXphdGlvbi5jb250cm9sLnR5cGUgPT09IFwiQW5hbHl0aWNhbFRhYmxlXCIpIHtcblx0XHRjb25zdCBhZ2dyZWdhdGlvbkRhdGEgPSBnZXRFeHRlbnNpb25JbmZvRnJvbUVudGl0eVR5cGUoZW50aXR5VHlwZSwgdGFibGVWaXN1YWxpemF0aW9uLmNvbHVtbnMsIGNvbnZlcnRlckNvbnRleHQpLFxuXHRcdFx0YWdncmVnYXRpb25IZWxwZXIgPSBuZXcgQWdncmVnYXRpb25IZWxwZXIoZW50aXR5VHlwZSwgY29udmVydGVyQ29udGV4dCk7XG5cdFx0aWYgKGFnZ3JlZ2F0aW9uRGF0YSkge1xuXHRcdFx0dGFibGVWaXN1YWxpemF0aW9uLmVuYWJsZUFuYWx5dGljcyA9IHRydWU7XG5cdFx0XHR0YWJsZVZpc3VhbGl6YXRpb24uZW5hYmxlJHNlbGVjdCA9IGZhbHNlO1xuXHRcdFx0dGFibGVWaXN1YWxpemF0aW9uLmVuYWJsZSQkZ2V0S2VlcEFsaXZlQ29udGV4dCA9IGZhbHNlO1xuXHRcdFx0dGFibGVWaXN1YWxpemF0aW9uLmFuYWx5dGljc0V4dGVuc2lvbnMgPSBhZ2dyZWdhdGlvbkRhdGE7XG5cdFx0XHRfdXBkYXRlUHJvcGVydHlJbmZvc1dpdGhBZ2dyZWdhdGVzRGVmaW5pdGlvbnModGFibGVWaXN1YWxpemF0aW9uKTtcblx0XHRcdGNvbnN0IGFsbG93ZWRUcmFuc2Zvcm1hdGlvbnMgPSBhZ2dyZWdhdGlvbkhlbHBlci5nZXRBbGxvd2VkVHJhbnNmb3JtYXRpb25zKCk7XG5cdFx0XHR0YWJsZVZpc3VhbGl6YXRpb24uZW5hYmxlQmFzaWNTZWFyY2ggPSBhbGxvd2VkVHJhbnNmb3JtYXRpb25zID8gYWxsb3dlZFRyYW5zZm9ybWF0aW9ucy5pbmNsdWRlcyhcInNlYXJjaFwiKSA6IHRydWU7XG5cdFx0XHQvLyBBZGQgZ3JvdXAgYW5kIHNvcnQgY29uZGl0aW9ucyBmcm9tIHRoZSBwcmVzZW50YXRpb24gdmFyaWFudFxuXHRcdFx0dGFibGVWaXN1YWxpemF0aW9uLmFubm90YXRpb24uZ3JvdXBDb25kaXRpb25zID0gZ2V0R3JvdXBDb25kaXRpb25zKFxuXHRcdFx0XHRwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbixcblx0XHRcdFx0dGFibGVWaXN1YWxpemF0aW9uLmNvbHVtbnMsXG5cdFx0XHRcdHRhYmxlVmlzdWFsaXphdGlvbi5jb250cm9sLnR5cGVcblx0XHRcdCk7XG5cdFx0XHR0YWJsZVZpc3VhbGl6YXRpb24uYW5ub3RhdGlvbi5hZ2dyZWdhdGVDb25kaXRpb25zID0gZ2V0QWdncmVnYXRlQ29uZGl0aW9ucyhcblx0XHRcdFx0cHJlc2VudGF0aW9uVmFyaWFudEFubm90YXRpb24sXG5cdFx0XHRcdHRhYmxlVmlzdWFsaXphdGlvbi5jb2x1bW5zLFxuXHRcdFx0XHRhZ2dyZWdhdGlvbkRhdGFcblx0XHRcdCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdExvZy5lcnJvcihgQWdncmVnYXRpb24gbm90IHN1cHBvcnRlZCBmb3IgdGhpcyBlbnRpdHkgdHlwZTogJHtlbnRpdHlUeXBlLm5hbWV9YCk7XG5cdFx0fVxuXHRcdHRhYmxlVmlzdWFsaXphdGlvbi5jb250cm9sLnR5cGUgPSBcIkdyaWRUYWJsZVwiOyAvLyBBbmFseXRpY2FsVGFibGUgaXNuJ3QgYSByZWFsIHR5cGUgZm9yIHRoZSBNREM6VGFibGUsIHNvIHdlIGFsd2F5cyBzd2l0Y2ggYmFjayB0byBHcmlkXG5cdH0gZWxzZSBpZiAodGFibGVWaXN1YWxpemF0aW9uLmNvbnRyb2wudHlwZSA9PT0gXCJSZXNwb25zaXZlVGFibGVcIikge1xuXHRcdHRhYmxlVmlzdWFsaXphdGlvbi5hbm5vdGF0aW9uLmdyb3VwQ29uZGl0aW9ucyA9IGdldEdyb3VwQ29uZGl0aW9ucyhcblx0XHRcdHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uLFxuXHRcdFx0dGFibGVWaXN1YWxpemF0aW9uLmNvbHVtbnMsXG5cdFx0XHR0YWJsZVZpc3VhbGl6YXRpb24uY29udHJvbC50eXBlXG5cdFx0KTtcblx0fSBlbHNlIGlmICh0YWJsZVZpc3VhbGl6YXRpb24uY29udHJvbC50eXBlID09PSBcIlRyZWVUYWJsZVwiKSB7XG5cdFx0Y29uc3QgYWdncmVnYXRpb25IZWxwZXIgPSBuZXcgQWdncmVnYXRpb25IZWxwZXIoZW50aXR5VHlwZSwgY29udmVydGVyQ29udGV4dCk7XG5cdFx0Y29uc3QgYWxsb3dlZFRyYW5zZm9ybWF0aW9ucyA9IGFnZ3JlZ2F0aW9uSGVscGVyLmdldEFsbG93ZWRUcmFuc2Zvcm1hdGlvbnMoKTtcblx0XHR0YWJsZVZpc3VhbGl6YXRpb24uZW5hYmxlQmFzaWNTZWFyY2ggPSBhbGxvd2VkVHJhbnNmb3JtYXRpb25zID8gYWxsb3dlZFRyYW5zZm9ybWF0aW9ucy5pbmNsdWRlcyhcInNlYXJjaFwiKSA6IHRydWU7XG5cdFx0dGFibGVWaXN1YWxpemF0aW9uLmVuYWJsZSQkZ2V0S2VlcEFsaXZlQ29udGV4dCA9IHRydWU7XG5cdFx0dGFibGVWaXN1YWxpemF0aW9uLmFubm90YXRpb24uY2hhbmdlU2libGluZ0ZvclJvb3RzU3VwcG9ydGVkID0gKGVudGl0eVR5cGU/LmFubm90YXRpb25zLkhpZXJhcmNoeT8uW1xuXHRcdFx0YFJlY3Vyc2l2ZUhpZXJhcmNoeUFjdGlvbnMjJHt0YWJsZVZpc3VhbGl6YXRpb24uY29udHJvbC5oaWVyYXJjaHlRdWFsaWZpZXIgPz8gXCJcIn1gXG5cdFx0XT8uQ2hhbmdlU2libGluZ0ZvclJvb3RzU3VwcG9ydGVkID8/IHRydWUpIGFzIGJvb2xlYW47XG5cblx0XHR0YWJsZVZpc3VhbGl6YXRpb24uYW5ub3RhdGlvbi5hbGxvd0Ryb3BCZXR3ZWVuTm9kZXMgPVxuXHRcdFx0ISFlbnRpdHlUeXBlLmFubm90YXRpb25zLkhpZXJhcmNoeT8uW2BSZWN1cnNpdmVIaWVyYXJjaHlBY3Rpb25zIyR7dGFibGVWaXN1YWxpemF0aW9uLmNvbnRyb2wuaGllcmFyY2h5UXVhbGlmaWVyID8/IFwiXCJ9YF1cblx0XHRcdFx0Py5DaGFuZ2VOZXh0U2libGluZ0FjdGlvbjtcblx0fVxuXG5cdC8vIFNvbWUgcHJvcGVydGllcyBhcmUgYWx3YXlzIGxvYWRlZCBiZWNhdXNlIHRoZXkgYXJlIG5lZWRlZCBieSBvdXIgaW50ZXJuYWwgbG9naWNcblx0Ly8gLSBIYXNBY3RpdmVFbnRpdHkgaXMgbmVlZGVkIGZvciB0aGUgcm93IGNyaXRpY2FsaXR5IGV4cHJlc3Npb25cblx0Ly8gLSBIYXNEcmFmdEVudGl0eSBpcyBuZWVkZWQgaW4gTFIgd2l0aCBUcmVlVGFibGUgYW5kIEFuYWx5dGljYWwgVGFibGUgdG8gbmF2aWdhdGUgdG8gdGhlIGRyYWZ0IGluc3RhbmNlIGlmIHRoZXJlJ3Mgb25lIHdoZW4gY2xpY2tpbmcgb24gdGhlIGFjdGl2ZSBpbnN0YW5jZVxuXHQvLyAtIEhhc0RyYWZ0RW50aXR5IGFuZCBEcmFmdEFkbWluaXN0cmF0aXZlRGF0YS5JblByb2Nlc3NCeVVzZXIgYXJlIG5lZWRlZCBpbiB0aGUgTFIgZm9yIHRoZSBkZWxldGUgbG9naWNcblx0aWYgKE1vZGVsSGVscGVyLmlzT2JqZWN0UGF0aERyYWZ0U3VwcG9ydGVkKGNvbnZlcnRlckNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpKSkge1xuXHRcdHRhYmxlVmlzdWFsaXphdGlvbi5yZXF1ZXN0QXRMZWFzdFtcIkhhc0FjdGl2ZUVudGl0eVwiXSA9IFtcImRyYWZ0S2V5c1wiXTtcblx0XHRpZiAodGFibGVWaXN1YWxpemF0aW9uLmNvbnRyb2wuYW5hbHl0aWNhbENvbmZpZ3VyYXRpb24/LmFnZ3JlZ2F0aW9uT25MZWFmTGV2ZWwpIHtcblx0XHRcdC8vIElzQWN0aXZlRW50aXR5IGtleSBpcyBuZWVkZWQgZm9yIG5hdmlnYXRpb24gdG8gdGhlIGRyYWZ0IGluc3RhbmNlXG5cdFx0XHR0YWJsZVZpc3VhbGl6YXRpb24ucmVxdWVzdEF0TGVhc3RbXCJJc0FjdGl2ZUVudGl0eVwiXSA9IFtcImRyYWZ0S2V5c1wiXTtcblx0XHR9XG5cblx0XHRpZiAoTW9kZWxIZWxwZXIuaXNEcmFmdFJvb3QoY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXQoKSkpIHtcblx0XHRcdHRhYmxlVmlzdWFsaXphdGlvbi5yZXF1ZXN0QXRMZWFzdFtcIkhhc0RyYWZ0RW50aXR5XCJdID0gW1wiZHJhZnRLZXlzXCJdO1xuXHRcdFx0aWYgKHRhYmxlVmlzdWFsaXphdGlvbi5lbmFibGVBbmFseXRpY3MgIT09IHRydWUgJiYgdGFibGVWaXN1YWxpemF0aW9uLmNvbnRyb2wudHlwZSAhPT0gXCJUcmVlVGFibGVcIikge1xuXHRcdFx0XHQvLyBXZSBkb24ndCBsb2FkIERyYWZ0QWRtaW5pc3RyYXRpdmVEYXRhIGZvciBBbmFseXRpY2FsIGFuZCBUcmVlIHRhYmxlcyBpbiBMUiBiZWNhdXNlIHRoZXkgZGlzcGxheSBhY3RpdmUgaW5zdGFuY2VzIG9ubHlcblx0XHRcdFx0Ly8gKHRoZXJlZm9yZSBubyBEcmFmdEFkbWluaXN0cmF0aXZlRGF0YSBpcyBhdmFpbGFibGUpXG5cdFx0XHRcdHRhYmxlVmlzdWFsaXphdGlvbi5yZXF1ZXN0QXRMZWFzdFtcIkRyYWZ0QWRtaW5pc3RyYXRpdmVEYXRhL0luUHJvY2Vzc0J5VXNlclwiXSA9IFtcImRyYWZ0S2V5c1wiXTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRpZiAodGFibGVWaXN1YWxpemF0aW9uLmNvbnRyb2wuZW5hYmxlVXBsb2FkUGx1Z2luKSB7XG5cdFx0Y29uc3Qgc3RyZWFtUHJvcGVydHkgPSBjb252ZXJ0ZXJDb250ZXh0LmdldEFubm90YXRpb25FbnRpdHlUeXBlKCkuYW5ub3RhdGlvbnM/LlVJPy5NZWRpYVJlc291cmNlPy5TdHJlYW0/LiR0YXJnZXQ7XG5cdFx0aWYgKCFzdHJlYW1Qcm9wZXJ0eSkge1xuXHRcdFx0dGhyb3cgXCJVSS5NZWRpYVJlc291cmNlIGFubm90YXRpb24gd2l0aCBTdHJlYW0gcHJvcGVydHkgbWlzc2luZ1wiO1xuXHRcdH1cblxuXHRcdC8vIHRoZSB1cGxvYWQgYWN0aW9uIGlzIHRyZWF0ZWQgYXMgdGhlIGNyZWF0ZSBhY3Rpb25cblx0XHRjb25zdCB1cGxvYWRBY3Rpb24gPSB0YWJsZVZpc3VhbGl6YXRpb24uYWN0aW9ucy5maW5kKChhKSA9PiBhLmtleSA9PT0gU3RhbmRhcmRBY3Rpb25LZXlzLkNyZWF0ZSkgYXMgU3RhbmRhcmRBY3Rpb247XG5cblx0XHR0YWJsZVZpc3VhbGl6YXRpb24uYW5ub3RhdGlvbi51cGxvYWRUYWJsZSA9IHtcblx0XHRcdHN0cmVhbTogc3RyZWFtUHJvcGVydHkubmFtZSxcblx0XHRcdGZpbGVOYW1lOiAoc3RyZWFtUHJvcGVydHkuYW5ub3RhdGlvbnMuQ29yZT8uQ29udGVudERpc3Bvc2l0aW9uPy5GaWxlbmFtZSBhcyBQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb248c3RyaW5nPiB8IHVuZGVmaW5lZCk/LnBhdGgsXG5cdFx0XHRmaWxlTmFtZU1heExlbmd0aDogc3RyZWFtUHJvcGVydHkuYW5ub3RhdGlvbnMuQ29yZT8uQ29udGVudERpc3Bvc2l0aW9uPy5GaWxlbmFtZT8uJHRhcmdldD8ubWF4TGVuZ3RoLFxuXHRcdFx0YWNjZXB0YWJsZU1lZGlhVHlwZXM6IHN0cmVhbVByb3BlcnR5LmFubm90YXRpb25zLkNvcmU/LkFjY2VwdGFibGVNZWRpYVR5cGVzLFxuXHRcdFx0bWF4TGVuZ3RoOiBzdHJlYW1Qcm9wZXJ0eS5tYXhMZW5ndGgsXG5cdFx0XHR1cGxvYWRBY3Rpb246IHVwbG9hZEFjdGlvblxuXHRcdH07XG5cdH1cbn1cblxudHlwZSBmaWVsZE9yaWdpbiA9XG5cdHwgXCJzZW1hbnRpY0tleVwiXG5cdHwgXCJyZXN0cmljdGlvblwiXG5cdHwgXCJzZWNvbmRhcnlLZXlcIlxuXHR8IFwicHJlc2VudGF0aW9uVmFyaWFudFwiXG5cdHwgXCJuYXZpZ2F0aW9uXCJcblx0fCBcIm9wZXJhdGlvblwiXG5cdHwgXCJhbHRlcm5hdGVBbmRTZWNvbmRhcnlLZXlzXCJcblx0fCBcImRyYWZ0S2V5c1wiO1xuZXhwb3J0IHR5cGUgUmVxdWVzdEF0TGVhc3QgPSBSZWNvcmQ8c3RyaW5nLCBmaWVsZE9yaWdpbltdPjtcblxuLyoqXG4gKiBDcmVhdGVzIGFuZCByZXR1cm5zIGEgc2VsZWN0IHF1ZXJ5IHdpdGggdGhlIHNlbGVjdGVkIGZpZWxkcyBmcm9tIHRoZSBwYXJhbWV0ZXJzIHRoYXQgd2VyZSBwYXNzZWQuXG4gKiBAcGFyYW0gbGluZUl0ZW0gVGhlIExpbmVJdGVtIHdlIHdhbnQgdGhlIHJlcXVlc3RlZCBwcm9wZXJ0aWVzIGZyb20uXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dCBUaGUgY29udmVydGVyIGNvbnRleHQuXG4gKiBAcGFyYW0gb3BlcmF0aW9uQXZhaWxhYmxlIEEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIGF2YWlsYWJsZSBvcGVyYXRpb24sIHdoaWNoIHdlJ2xsIHRha2UgdGhlIHByb3BlcnRpZXMgdG8gYWRkIHRvIHRoZSBzZWxlY3QgcXVlcnkuXG4gKiBAcGFyYW0gcHJlc2VudGF0aW9uVmFyaWFudEFubm90YXRpb24gVGhlIHByZXNlbnRhdGlvbiB2YXJpYW50IGFubm90YXRpb24gd2hpY2ggd2UnbGwgdGFrZSB0aGUgUmVxdWVzdEF0TGVhc3QgcHJvcGVydGllcyBmcm9tLlxuICogQHJldHVybnMgVGhlICdzZWxlY3QnIHF1ZXJ5IHRoYXQgaGFzIHRoZSBzZWxlY3RlZCBmaWVsZHMgZnJvbSB0aGUgcGFyYW1ldGVycyB0aGF0IHdlcmUgcGFzc2VkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUmVxdWVzdGVkUHJvcGVydGllcyhcblx0bGluZUl0ZW06IExpbmVJdGVtLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0LFxuXHRvcGVyYXRpb25BdmFpbGFibGU/OiBzdHJpbmcsXG5cdHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uPzogUHJlc2VudGF0aW9uVmFyaWFudFR5cGVcbik6IFJlcXVlc3RBdExlYXN0IHtcblx0Y29uc3QgZW50aXR5VHlwZSA9IGNvbnZlcnRlckNvbnRleHQuZ2V0QW5ub3RhdGlvbkVudGl0eVR5cGUobGluZUl0ZW0pO1xuXHRjb25zdCBzZWxlY3RlZEZpZWxkczogUmVxdWVzdEF0TGVhc3QgPSB7fTtcblx0ZnVuY3Rpb24gcHVzaEZpZWxkKGZpZWxkTmFtZTogc3RyaW5nLCBvcmlnaW46IGZpZWxkT3JpZ2luKTogdm9pZCB7XG5cdFx0aWYgKGZpZWxkTmFtZSAmJiBmaWVsZE5hbWUuaW5kZXhPZihcIi9cIikgIT09IDApIHtcblx0XHRcdC8vIERvIG5vdCBhZGQgc2luZ2xldG9uIHByb3BlcnR5ICh3aXRoIGFic29sdXRlIHBhdGgpIHRvICRzZWxlY3Rcblx0XHRcdGlmICghc2VsZWN0ZWRGaWVsZHNbZmllbGROYW1lXSkge1xuXHRcdFx0XHRzZWxlY3RlZEZpZWxkc1tmaWVsZE5hbWVdID0gW29yaWdpbl07XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRzZWxlY3RlZEZpZWxkc1tmaWVsZE5hbWVdLnB1c2gob3JpZ2luKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRmdW5jdGlvbiBwdXNoRmllbGRMaXN0KGZpZWxkczogc3RyaW5nW10sIG9yaWdpbjogZmllbGRPcmlnaW4pOiB2b2lkIHtcblx0XHRpZiAoZmllbGRzPy5sZW5ndGgpIHtcblx0XHRcdGZpZWxkcy5mb3JFYWNoKChmaWVsZCkgPT4gcHVzaEZpZWxkKGZpZWxkLCBvcmlnaW4pKTtcblx0XHR9XG5cdH1cblxuXHRjb25zdCBvcGVyYXRpb25BdmFpbGFibGVQcm9wZXJ0aWVzID0gKG9wZXJhdGlvbkF2YWlsYWJsZSB8fCBcIlwiKS5zcGxpdChcIixcIik7XG5cdGNvbnN0IHZhbGlkUHJvcGVydGllcyA9IG9wZXJhdGlvbkF2YWlsYWJsZVByb3BlcnRpZXMuZmlsdGVyKGZ1bmN0aW9uIChwcm9wTmFtZTogc3RyaW5nKSB7XG5cdFx0cmV0dXJuIGVudGl0eVR5cGUucmVzb2x2ZVBhdGgocHJvcE5hbWUpO1xuXHR9KTtcblx0Y29uc3Qgc2VtYW50aWNLZXlzOiBzdHJpbmdbXSA9IChlbnRpdHlUeXBlLmFubm90YXRpb25zLkNvbW1vbj8uU2VtYW50aWNLZXkgfHwgW10pLm1hcCgoc2VtYW50aWNLZXkpID0+IHNlbWFudGljS2V5LnZhbHVlKTtcblx0Y29uc3QgY2FwYWJpbGl0aWVzQW5ub3RhdGlvbiA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0KCk/LmFubm90YXRpb25zPy5DYXBhYmlsaXRpZXM7XG5cdGNvbnN0IGFsdGVybmF0ZUFuZFNlY29uZGFyeUtleXMgPSBNb2RlbEhlbHBlci5nZXRBbHRlcm5hdGVBbmRTZWNvbmRhcnlLZXlzKGVudGl0eVR5cGUsIGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0KCkgYXMgRW50aXR5U2V0KTtcblx0aWYgKHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uKSB7XG5cdFx0cHVzaEZpZWxkTGlzdChwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbi5SZXF1ZXN0QXRMZWFzdD8ubWFwKChwcm9wZXJ0eVBhdGgpID0+IHByb3BlcnR5UGF0aC52YWx1ZSksIFwicHJlc2VudGF0aW9uVmFyaWFudFwiKTtcblx0fVxuXHRwdXNoRmllbGRMaXN0KGdldE5hdmlnYXRpb25BdmFpbGFibGVGaWVsZHNGcm9tTGluZUl0ZW0obGluZUl0ZW0sIGVudGl0eVR5cGUpLCBcIm5hdmlnYXRpb25cIik7XG5cdHB1c2hGaWVsZExpc3QodmFsaWRQcm9wZXJ0aWVzLCBcIm9wZXJhdGlvblwiKTtcblx0cHVzaEZpZWxkTGlzdChzZW1hbnRpY0tleXMsIFwic2VtYW50aWNLZXlcIik7XG5cdHB1c2hGaWVsZExpc3QoYWx0ZXJuYXRlQW5kU2Vjb25kYXJ5S2V5cywgXCJhbHRlcm5hdGVBbmRTZWNvbmRhcnlLZXlzXCIpO1xuXHRpZiAoY2FwYWJpbGl0aWVzQW5ub3RhdGlvbikge1xuXHRcdHB1c2hGaWVsZCgoY2FwYWJpbGl0aWVzQW5ub3RhdGlvbi5EZWxldGVSZXN0cmljdGlvbnM/LkRlbGV0YWJsZSBhcyBQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb248Ym9vbGVhbj4pPy5wYXRoLCBcInJlc3RyaWN0aW9uXCIpO1xuXHRcdHB1c2hGaWVsZCgoY2FwYWJpbGl0aWVzQW5ub3RhdGlvbi5VcGRhdGVSZXN0cmljdGlvbnM/LlVwZGF0YWJsZSBhcyBQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb248Ym9vbGVhbj4pPy5wYXRoLCBcInJlc3RyaWN0aW9uXCIpO1xuXHR9XG5cblx0cmV0dXJuIHNlbGVjdGVkRmllbGRzO1xufVxuXG4vKipcbiAqIFRoaXMgcmV0dXJuIHRoZSBwcm9wZXJ0eSB0aGF0IGFyZSBhdmFpbGFibGUgZnJvbSB0aGUgTmF2aWdhdGlvbkF2YWlsYWJsZSBhbm5vdGF0aW9uIG9uIElCTiBGaWVsZHMuXG4gKiBAcGFyYW0gbGluZUl0ZW0gVGhlIGxpbmUgaXRlbSBhbm5vdGF0aW9uLlxuICogQHBhcmFtIGVudGl0eVR5cGUgVGhlIEVudGl0eSBUeXBlLlxuICogQHJldHVybnMgQW4gYXJyYXkgY29udGFpbmluZyB0aGUgcHJvcGVydGllcyBuYW1lLlxuICovXG5mdW5jdGlvbiBnZXROYXZpZ2F0aW9uQXZhaWxhYmxlRmllbGRzRnJvbUxpbmVJdGVtKGxpbmVJdGVtOiBMaW5lSXRlbSwgZW50aXR5VHlwZTogRW50aXR5VHlwZSk6IHN0cmluZ1tdIHtcblx0Y29uc3Qgc2VsZWN0ZWRGaWVsZHM6IHN0cmluZ1tdID0gW107XG5cdGxpbmVJdGVtLmZvckVhY2goZnVuY3Rpb24gKHJlY29yZCkge1xuXHRcdGlmIChcblx0XHRcdHJlY29yZC4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uICYmXG5cdFx0XHQhcmVjb3JkLklubGluZSAmJlxuXHRcdFx0IXJlY29yZC5EZXRlcm1pbmluZyAmJlxuXHRcdFx0aXNQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24ocmVjb3JkLk5hdmlnYXRpb25BdmFpbGFibGUpXG5cdFx0KSB7XG5cdFx0XHRjb25zdCBwYXRoID0gKHJlY29yZC5OYXZpZ2F0aW9uQXZhaWxhYmxlIGFzIHVua25vd24gYXMgeyBwYXRoOiBzdHJpbmcgfSkucGF0aDtcblx0XHRcdGlmIChlbnRpdHlUeXBlLnJlc29sdmVQYXRoKHBhdGgpKSB7XG5cdFx0XHRcdHNlbGVjdGVkRmllbGRzLnB1c2gocGF0aCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9KTtcblx0cmV0dXJuIHNlbGVjdGVkRmllbGRzO1xufVxuXG4vKipcbiAqIEdldCB0aGUgbmF2aWdhdGlvbiB0YXJnZXQgcGF0aCBmcm9tIG1hbmlmZXN0IHNldHRpbmdzLlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKiBAcGFyYW0gbmF2aWdhdGlvblByb3BlcnR5UGF0aCBUaGUgbmF2aWdhdGlvbiBwYXRoIHRvIGNoZWNrIGluIHRoZSBtYW5pZmVzdCBzZXR0aW5nc1xuICogQHJldHVybnMgTmF2aWdhdGlvbiBwYXRoIGZyb20gbWFuaWZlc3Qgc2V0dGluZ3NcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldE5hdmlnYXRpb25UYXJnZXRQYXRoKGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0PiwgbmF2aWdhdGlvblByb3BlcnR5UGF0aDogc3RyaW5nKTogc3RyaW5nIHtcblx0Y29uc3QgbWFuaWZlc3RXcmFwcGVyID0gY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKTtcblx0aWYgKG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGggJiYgbWFuaWZlc3RXcmFwcGVyLmdldE5hdmlnYXRpb25Db25maWd1cmF0aW9uKG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgpKSB7XG5cdFx0Y29uc3QgbmF2Q29uZmlnID0gbWFuaWZlc3RXcmFwcGVyLmdldE5hdmlnYXRpb25Db25maWd1cmF0aW9uKG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgpO1xuXHRcdGlmIChPYmplY3Qua2V5cyhuYXZDb25maWcpLmxlbmd0aCA+IDApIHtcblx0XHRcdHJldHVybiBuYXZpZ2F0aW9uUHJvcGVydHlQYXRoO1xuXHRcdH1cblx0fVxuXHRjb25zdCBkYXRhTW9kZWxQYXRoID0gY29udmVydGVyQ29udGV4dC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCk7XG5cdGNvbnN0IGNvbnRleHRQYXRoID0gY29udmVydGVyQ29udGV4dC5nZXRDb250ZXh0UGF0aCgpO1xuXHRjb25zdCBuYXZDb25maWdGb3JDb250ZXh0UGF0aCA9IG1hbmlmZXN0V3JhcHBlci5nZXROYXZpZ2F0aW9uQ29uZmlndXJhdGlvbihjb250ZXh0UGF0aCk7XG5cdGlmIChuYXZDb25maWdGb3JDb250ZXh0UGF0aCAmJiBPYmplY3Qua2V5cyhuYXZDb25maWdGb3JDb250ZXh0UGF0aCkubGVuZ3RoID4gMCkge1xuXHRcdHJldHVybiBjb250ZXh0UGF0aDtcblx0fVxuXHRyZXR1cm4gZGF0YU1vZGVsUGF0aC50YXJnZXRFbnRpdHlTZXQgPyBkYXRhTW9kZWxQYXRoLnRhcmdldEVudGl0eVNldC5uYW1lIDogZGF0YU1vZGVsUGF0aC5zdGFydGluZ0VudGl0eVNldC5uYW1lO1xufVxuXG5mdW5jdGlvbiBnZXRTZW1hbnRpY0tleXNBbmRUaXRsZUluZm8oY29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+KToge1xuXHRoZWFkZXJJbmZvVGl0bGVQYXRoOiBzdHJpbmc7XG5cdHNlbWFudGljS2V5Q29sdW1uczogc3RyaW5nW107XG5cdGhlYWRlckluZm9UeXBlTmFtZTogUHJvcGVydHlBbm5vdGF0aW9uVmFsdWU8U3RyaW5nPiB8IHVuZGVmaW5lZDtcbn0ge1xuXHRjb25zdCBoZWFkZXJJbmZvVGl0bGVQYXRoID0gKGNvbnZlcnRlckNvbnRleHQuZ2V0QW5ub3RhdGlvbkVudGl0eVR5cGUoKT8uYW5ub3RhdGlvbnM/LlVJPy5IZWFkZXJJbmZvPy5UaXRsZSBhcyBEYXRhRmllbGRUeXBlcyk/LlZhbHVlXG5cdFx0Py5wYXRoO1xuXHRjb25zdCBzZW1hbnRpY0tleUFubm90YXRpb25zID0gY29udmVydGVyQ29udGV4dC5nZXRBbm5vdGF0aW9uRW50aXR5VHlwZSgpPy5hbm5vdGF0aW9ucz8uQ29tbW9uPy5TZW1hbnRpY0tleTtcblx0Y29uc3QgaGVhZGVySW5mb1R5cGVOYW1lID0gY29udmVydGVyQ29udGV4dD8uZ2V0QW5ub3RhdGlvbkVudGl0eVR5cGUoKT8uYW5ub3RhdGlvbnM/LlVJPy5IZWFkZXJJbmZvPy5UeXBlTmFtZTtcblx0Y29uc3Qgc2VtYW50aWNLZXlDb2x1bW5zOiBzdHJpbmdbXSA9IFtdO1xuXHRpZiAoc2VtYW50aWNLZXlBbm5vdGF0aW9ucykge1xuXHRcdHNlbWFudGljS2V5QW5ub3RhdGlvbnMuZm9yRWFjaChmdW5jdGlvbiAob0NvbHVtbikge1xuXHRcdFx0c2VtYW50aWNLZXlDb2x1bW5zLnB1c2gob0NvbHVtbi52YWx1ZSk7XG5cdFx0fSk7XG5cdH1cblx0cmV0dXJuIHsgaGVhZGVySW5mb1RpdGxlUGF0aCwgc2VtYW50aWNLZXlDb2x1bW5zLCBoZWFkZXJJbmZvVHlwZU5hbWUgfTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVUYWJsZVZpc3VhbGl6YXRpb24oXG5cdGxpbmVJdGVtQW5ub3RhdGlvbjogTGluZUl0ZW0sXG5cdHZpc3VhbGl6YXRpb25QYXRoOiBzdHJpbmcsXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pixcblx0cGFyYW1zPzogUGFydGlhbDx7XG5cdFx0cHJlc2VudGF0aW9uVmFyaWFudEFubm90YXRpb246IFByZXNlbnRhdGlvblZhcmlhbnRUeXBlO1xuXHRcdHNlbGVjdGlvblZhcmlhbnRBbm5vdGF0aW9uOiBTZWxlY3Rpb25WYXJpYW50VHlwZTtcblx0XHRpc0NvbmRlbnNlZFRhYmxlTGF5b3V0Q29tcGxpYW50OiBib29sZWFuO1xuXHR9PlxuKTogVGFibGVWaXN1YWxpemF0aW9uIHtcblx0Y29uc3QgeyBwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbiwgaXNDb25kZW5zZWRUYWJsZUxheW91dENvbXBsaWFudCwgc2VsZWN0aW9uVmFyaWFudEFubm90YXRpb24gfSA9IHBhcmFtcyA/PyB7fTtcblx0Y29uc3QgdGFibGVNYW5pZmVzdENvbmZpZyA9IGdldFRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uKFxuXHRcdGxpbmVJdGVtQW5ub3RhdGlvbixcblx0XHR2aXN1YWxpemF0aW9uUGF0aCxcblx0XHRjb252ZXJ0ZXJDb250ZXh0LFxuXHRcdGlzQ29uZGVuc2VkVGFibGVMYXlvdXRDb21wbGlhbnQsXG5cdFx0c2VsZWN0aW9uVmFyaWFudEFubm90YXRpb25cblx0KTtcblx0Y29uc3QgeyBuYXZpZ2F0aW9uUHJvcGVydHlQYXRoIH0gPSBzcGxpdFBhdGgodmlzdWFsaXphdGlvblBhdGgpO1xuXHRjb25zdCBuYXZpZ2F0aW9uVGFyZ2V0UGF0aCA9IGdldE5hdmlnYXRpb25UYXJnZXRQYXRoKGNvbnZlcnRlckNvbnRleHQsIG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgpO1xuXHRjb25zdCBuYXZpZ2F0aW9uU2V0dGluZ3MgPSBjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0V3JhcHBlcigpLmdldE5hdmlnYXRpb25Db25maWd1cmF0aW9uKG5hdmlnYXRpb25UYXJnZXRQYXRoKTtcblx0Y29uc3QgY29sdW1ucyA9IGdldFRhYmxlQ29sdW1ucyhsaW5lSXRlbUFubm90YXRpb24sIHRhYmxlTWFuaWZlc3RDb25maWcudHlwZSwgdmlzdWFsaXphdGlvblBhdGgsIGNvbnZlcnRlckNvbnRleHQpO1xuXHRjb25zdCBvcGVyYXRpb25BdmFpbGFibGVNYXAgPSBnZXRPcGVyYXRpb25BdmFpbGFibGVNYXAobGluZUl0ZW1Bbm5vdGF0aW9uLCBjb252ZXJ0ZXJDb250ZXh0KTtcblx0Y29uc3Qgc2VtYW50aWNLZXlzQW5kSGVhZGVySW5mb1RpdGxlID0gZ2V0U2VtYW50aWNLZXlzQW5kVGl0bGVJbmZvKGNvbnZlcnRlckNvbnRleHQpO1xuXHRjb25zdCBzdGFuZGFyZEFjdGlvbnNDb25maWd1cmF0aW9uID0gZ2V0U3RhbmRhcmRBY3Rpb25zQ29uZmlndXJhdGlvbihcblx0XHRsaW5lSXRlbUFubm90YXRpb24sXG5cdFx0dmlzdWFsaXphdGlvblBhdGgsXG5cdFx0Y29udmVydGVyQ29udGV4dCxcblx0XHR0YWJsZU1hbmlmZXN0Q29uZmlnLFxuXHRcdG5hdmlnYXRpb25TZXR0aW5nc1xuXHQpO1xuXHRjb25zdCB0YWJsZUFubm90YXRpb24gPSBnZXRUYWJsZUFubm90YXRpb25Db25maWd1cmF0aW9uKFxuXHRcdGxpbmVJdGVtQW5ub3RhdGlvbixcblx0XHR2aXN1YWxpemF0aW9uUGF0aCxcblx0XHRjb252ZXJ0ZXJDb250ZXh0LFxuXHRcdHRhYmxlTWFuaWZlc3RDb25maWcsXG5cdFx0Y29sdW1ucyxcblx0XHRuYXZpZ2F0aW9uU2V0dGluZ3MsXG5cdFx0c3RhbmRhcmRBY3Rpb25zQ29uZmlndXJhdGlvbixcblx0XHRwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvblxuXHQpO1xuXHRjb25zdCB0YWJsZUFjdGlvbnMgPSBnZXRUYWJsZUFjdGlvbnMoXG5cdFx0bGluZUl0ZW1Bbm5vdGF0aW9uLFxuXHRcdHZpc3VhbGl6YXRpb25QYXRoLFxuXHRcdGNvbnZlcnRlckNvbnRleHQsXG5cdFx0c3RhbmRhcmRBY3Rpb25zQ29uZmlndXJhdGlvbi5zdGFuZGFyZEFjdGlvbnMsXG5cdFx0bmF2aWdhdGlvblNldHRpbmdzXG5cdCk7XG5cdGNvbnN0IG9wZXJhdGlvbkF2YWlsYWJsZSA9IGdldE9wZXJhdGlvbkF2YWlsYWJsZVByb3BlcnRpZXMob3BlcmF0aW9uQXZhaWxhYmxlTWFwLCBjb252ZXJ0ZXJDb250ZXh0KTtcblx0bGV0IGhlYWRlciA9IHRhYmxlTWFuaWZlc3RDb25maWcuaGVhZGVyO1xuXHRoZWFkZXIgPz89IHRhYmxlQW5ub3RhdGlvbi50aXRsZSA9PT0gXCJcIiA/IHVuZGVmaW5lZCA6IHRhYmxlQW5ub3RhdGlvbi50aXRsZTtcblx0Y29uc3Qgb1Zpc3VhbGl6YXRpb246IFRhYmxlVmlzdWFsaXphdGlvbiA9IHtcblx0XHR0eXBlOiBWaXN1YWxpemF0aW9uVHlwZS5UYWJsZSxcblx0XHRhbm5vdGF0aW9uOiB0YWJsZUFubm90YXRpb24sXG5cdFx0Y29udHJvbDogdGFibGVNYW5pZmVzdENvbmZpZyxcblx0XHRhY3Rpb25zOiB0YWJsZUFjdGlvbnMuYWN0aW9ucyxcblx0XHRjb21tYW5kQWN0aW9uczogdGFibGVBY3Rpb25zLmNvbW1hbmRBY3Rpb25zLFxuXHRcdGNvbHVtbnM6IGNvbHVtbnMsXG5cdFx0b3BlcmF0aW9uQXZhaWxhYmxlTWFwOiBKU09OLnN0cmluZ2lmeShvcGVyYXRpb25BdmFpbGFibGVNYXApLFxuXHRcdG9wZXJhdGlvbkF2YWlsYWJsZVByb3BlcnRpZXM6IG9wZXJhdGlvbkF2YWlsYWJsZSxcblx0XHRoZWFkZXJJbmZvVGl0bGU6IHNlbWFudGljS2V5c0FuZEhlYWRlckluZm9UaXRsZS5oZWFkZXJJbmZvVGl0bGVQYXRoLFxuXHRcdHNlbWFudGljS2V5czogc2VtYW50aWNLZXlzQW5kSGVhZGVySW5mb1RpdGxlLnNlbWFudGljS2V5Q29sdW1ucyxcblx0XHRoZWFkZXJJbmZvVHlwZU5hbWU6IHNlbWFudGljS2V5c0FuZEhlYWRlckluZm9UaXRsZS5oZWFkZXJJbmZvVHlwZU5hbWUsXG5cdFx0ZW5hYmxlJHNlbGVjdDogdHJ1ZSxcblx0XHRlbmFibGUkJGdldEtlZXBBbGl2ZUNvbnRleHQ6IHRydWUsXG5cdFx0aGVhZGVyOiBoZWFkZXIsXG5cdFx0aGVhZGVyVmlzaWJsZTogdGFibGVNYW5pZmVzdENvbmZpZy5oZWFkZXJWaXNpYmxlLFxuXHRcdHJlcXVlc3RBdExlYXN0OiBjcmVhdGVSZXF1ZXN0ZWRQcm9wZXJ0aWVzKGxpbmVJdGVtQW5ub3RhdGlvbiwgY29udmVydGVyQ29udGV4dCwgb3BlcmF0aW9uQXZhaWxhYmxlLCBwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbiksXG5cdFx0aGFuZGxlUGF0Y2hTZW50OiBjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0V3JhcHBlcigpLmdldFRlbXBsYXRlVHlwZSgpICE9PSBUZW1wbGF0ZVR5cGUuTGlzdFJlcG9ydFxuXHR9O1xuXHR1cGRhdGVMaW5rZWRQcm9wZXJ0aWVzKGNvbnZlcnRlckNvbnRleHQsIGNvbHVtbnMpO1xuXHR1cGRhdGVUYWJsZVZpc3VhbGl6YXRpb25Gb3JUeXBlKFxuXHRcdG9WaXN1YWxpemF0aW9uLFxuXHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0QW5ub3RhdGlvbkVudGl0eVR5cGUobGluZUl0ZW1Bbm5vdGF0aW9uKSxcblx0XHRjb252ZXJ0ZXJDb250ZXh0LFxuXHRcdHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uXG5cdCk7XG5cdHJldHVybiBvVmlzdWFsaXphdGlvbjtcbn1cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVEZWZhdWx0VGFibGVWaXN1YWxpemF0aW9uKFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sXG5cdGlzQmxhbmtUYWJsZT86IGJvb2xlYW5cbik6IFRhYmxlVmlzdWFsaXphdGlvbiB7XG5cdGNvbnN0IHRhYmxlTWFuaWZlc3RDb25maWcgPSBnZXRUYWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbih1bmRlZmluZWQsIFwiXCIsIGNvbnZlcnRlckNvbnRleHQsIGZhbHNlKTtcblx0Y29uc3QgY29sdW1ucyA9IGdldENvbHVtbnNGcm9tRW50aXR5VHlwZShcblx0XHR7fSxcblx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGUoKSxcblx0XHRbXSxcblx0XHRjb252ZXJ0ZXJDb250ZXh0LFxuXHRcdHRhYmxlTWFuaWZlc3RDb25maWcudHlwZSxcblx0XHR0YWJsZU1hbmlmZXN0Q29uZmlnLmNyZWF0aW9uTW9kZSxcblx0XHR7fVxuXHQpO1xuXHRjb25zdCBvcGVyYXRpb25BdmFpbGFibGVNYXAgPSBnZXRPcGVyYXRpb25BdmFpbGFibGVNYXAodW5kZWZpbmVkLCBjb252ZXJ0ZXJDb250ZXh0KTtcblx0Y29uc3Qgc2VtYW50aWNLZXlzQW5kSGVhZGVySW5mb1RpdGxlID0gZ2V0U2VtYW50aWNLZXlzQW5kVGl0bGVJbmZvKGNvbnZlcnRlckNvbnRleHQpO1xuXHRjb25zdCBuYXZpZ2F0aW9uVGFyZ2V0UGF0aCA9IGdldE5hdmlnYXRpb25UYXJnZXRQYXRoKGNvbnZlcnRlckNvbnRleHQsIFwiXCIpO1xuXHRjb25zdCBuYXZpZ2F0aW9uU2V0dGluZ3MgPSBjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0V3JhcHBlcigpLmdldE5hdmlnYXRpb25Db25maWd1cmF0aW9uKG5hdmlnYXRpb25UYXJnZXRQYXRoKTtcblx0Y29uc3Qgc3RhbmRhcmRBY3Rpb25zQ29uZmlndXJhdGlvbiA9IGdldFN0YW5kYXJkQWN0aW9uc0NvbmZpZ3VyYXRpb24oXG5cdFx0dW5kZWZpbmVkLFxuXHRcdFwiXCIsXG5cdFx0Y29udmVydGVyQ29udGV4dCxcblx0XHR0YWJsZU1hbmlmZXN0Q29uZmlnLFxuXHRcdG5hdmlnYXRpb25TZXR0aW5nc1xuXHQpO1xuXHRjb25zdCBvVmlzdWFsaXphdGlvbjogVGFibGVWaXN1YWxpemF0aW9uID0ge1xuXHRcdHR5cGU6IFZpc3VhbGl6YXRpb25UeXBlLlRhYmxlLFxuXHRcdGFubm90YXRpb246IGdldFRhYmxlQW5ub3RhdGlvbkNvbmZpZ3VyYXRpb24oXG5cdFx0XHR1bmRlZmluZWQsXG5cdFx0XHRcIlwiLFxuXHRcdFx0Y29udmVydGVyQ29udGV4dCxcblx0XHRcdHRhYmxlTWFuaWZlc3RDb25maWcsXG5cdFx0XHRpc0JsYW5rVGFibGUgPyBbXSA6IGNvbHVtbnMsXG5cdFx0XHRuYXZpZ2F0aW9uU2V0dGluZ3MsXG5cdFx0XHRzdGFuZGFyZEFjdGlvbnNDb25maWd1cmF0aW9uXG5cdFx0KSxcblx0XHRjb250cm9sOiB0YWJsZU1hbmlmZXN0Q29uZmlnLFxuXHRcdGFjdGlvbnM6IFtdLFxuXHRcdGNvbHVtbnM6IGNvbHVtbnMsXG5cdFx0b3BlcmF0aW9uQXZhaWxhYmxlTWFwOiBKU09OLnN0cmluZ2lmeShvcGVyYXRpb25BdmFpbGFibGVNYXApLFxuXHRcdG9wZXJhdGlvbkF2YWlsYWJsZVByb3BlcnRpZXM6IGdldE9wZXJhdGlvbkF2YWlsYWJsZVByb3BlcnRpZXMob3BlcmF0aW9uQXZhaWxhYmxlTWFwLCBjb252ZXJ0ZXJDb250ZXh0KSxcblx0XHRoZWFkZXJJbmZvVGl0bGU6IHNlbWFudGljS2V5c0FuZEhlYWRlckluZm9UaXRsZS5oZWFkZXJJbmZvVGl0bGVQYXRoLFxuXHRcdHNlbWFudGljS2V5czogc2VtYW50aWNLZXlzQW5kSGVhZGVySW5mb1RpdGxlLnNlbWFudGljS2V5Q29sdW1ucyxcblx0XHRoZWFkZXJJbmZvVHlwZU5hbWU6IHNlbWFudGljS2V5c0FuZEhlYWRlckluZm9UaXRsZS5oZWFkZXJJbmZvVHlwZU5hbWUsXG5cdFx0ZW5hYmxlJHNlbGVjdDogdHJ1ZSxcblx0XHRlbmFibGUkJGdldEtlZXBBbGl2ZUNvbnRleHQ6IHRydWUsXG5cdFx0aGVhZGVyOiB0YWJsZU1hbmlmZXN0Q29uZmlnLmhlYWRlcixcblx0XHRoZWFkZXJWaXNpYmxlOiB0YWJsZU1hbmlmZXN0Q29uZmlnLmhlYWRlclZpc2libGUsXG5cdFx0aGFuZGxlUGF0Y2hTZW50OiBjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0V3JhcHBlcigpLmdldFRlbXBsYXRlVHlwZSgpICE9PSBUZW1wbGF0ZVR5cGUuTGlzdFJlcG9ydCxcblx0XHRyZXF1ZXN0QXRMZWFzdDoge31cblx0fTtcblx0dXBkYXRlTGlua2VkUHJvcGVydGllcyhjb252ZXJ0ZXJDb250ZXh0LCBjb2x1bW5zKTtcblx0dXBkYXRlVGFibGVWaXN1YWxpemF0aW9uRm9yVHlwZShvVmlzdWFsaXphdGlvbiwgY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlKCksIGNvbnZlcnRlckNvbnRleHQpO1xuXHRyZXR1cm4gb1Zpc3VhbGl6YXRpb247XG59XG4vKipcbiAqIEdldHMgdGhlIG1hcCBvZiBDb3JlLk9wZXJhdGlvbkF2YWlsYWJsZSBwcm9wZXJ0eSBwYXRocyBmb3IgYWxsIERhdGFGaWVsZEZvckFjdGlvbnMuXG4gKiBAcGFyYW0gbGluZUl0ZW1Bbm5vdGF0aW9uIFRoZSBpbnN0YW5jZSBvZiB0aGUgbGluZSBpdGVtXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dCBUaGUgaW5zdGFuY2Ugb2YgdGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKiBAcmV0dXJucyBUaGUgcmVjb3JkIGNvbnRhaW5pbmcgYWxsIGFjdGlvbiBuYW1lcyBhbmQgdGhlaXIgY29ycmVzcG9uZGluZyBDb3JlLk9wZXJhdGlvbkF2YWlsYWJsZSBwcm9wZXJ0eSBwYXRoc1xuICovXG5mdW5jdGlvbiBnZXRPcGVyYXRpb25BdmFpbGFibGVNYXAoXG5cdGxpbmVJdGVtQW5ub3RhdGlvbjogTGluZUl0ZW0gfCB1bmRlZmluZWQsXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0PlxuKTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4ge1xuXHRyZXR1cm4gQWN0aW9uSGVscGVyLmdldE9wZXJhdGlvbkF2YWlsYWJsZU1hcChsaW5lSXRlbUFubm90YXRpb24sIFwidGFibGVcIiwgY29udmVydGVyQ29udGV4dCk7XG59XG4vKipcbiAqIEdldHMgdXBkYXRhYmxlIHByb3BlcnR5UGF0aCBmb3IgdGhlIGN1cnJlbnQgZW50aXR5c2V0IGlmIHZhbGlkLlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGluc3RhbmNlIG9mIHRoZSBjb252ZXJ0ZXIgY29udGV4dFxuICogQHJldHVybnMgVGhlIHVwZGF0YWJsZSBwcm9wZXJ0eSBmb3IgdGhlIHJvd3NcbiAqL1xuZnVuY3Rpb24gZ2V0Q3VycmVudEVudGl0eVNldFVwZGF0YWJsZVBhdGgoY29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+KTogc3RyaW5nIHtcblx0Y29uc3QgcmVzdHJpY3Rpb25zID0gZ2V0UmVzdHJpY3Rpb25zKGNvbnZlcnRlckNvbnRleHQpO1xuXHRjb25zdCBlbnRpdHlTZXQgPSBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVNldCgpO1xuXHRjb25zdCB1cGRhdGFibGUgPSByZXN0cmljdGlvbnMuaXNVcGRhdGFibGU7XG5cdGNvbnN0IGlzT25seUR5bmFtaWNPbkN1cnJlbnRFbnRpdHkgPSAhaXNDb25zdGFudCh1cGRhdGFibGUuZXhwcmVzc2lvbikgJiYgdXBkYXRhYmxlLm5hdmlnYXRpb25FeHByZXNzaW9uLl90eXBlID09PSBcIlVucmVzb2x2YWJsZVwiO1xuXHRjb25zdCB1cGRhdGFibGVFeHByZXNzaW9uID0gZW50aXR5U2V0Py5hbm5vdGF0aW9ucy5DYXBhYmlsaXRpZXM/LlVwZGF0ZVJlc3RyaWN0aW9ucz8uVXBkYXRhYmxlO1xuXHRjb25zdCB1cGRhdGFibGVQcm9wZXJ0eVBhdGggPSBpc1BhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbih1cGRhdGFibGVFeHByZXNzaW9uKSAmJiB1cGRhdGFibGVFeHByZXNzaW9uLnBhdGg7XG5cdHJldHVybiBpc09ubHlEeW5hbWljT25DdXJyZW50RW50aXR5ID8gKHVwZGF0YWJsZVByb3BlcnR5UGF0aCBhcyBzdHJpbmcpIDogXCJcIjtcbn1cbi8qKlxuICogTWV0aG9kIHRvIHJldHJpZXZlIGFsbCBwcm9wZXJ0eSBwYXRocyBhc3NpZ25lZCB0byB0aGUgQ29yZS5PcGVyYXRpb25BdmFpbGFibGUgYW5ub3RhdGlvbi5cbiAqIEBwYXJhbSBvcGVyYXRpb25BdmFpbGFibGVNYXAgVGhlIHJlY29yZCBjb25zaXN0aW5nIG9mIGFjdGlvbnMgYW5kIHRoZWlyIENvcmUuT3BlcmF0aW9uQXZhaWxhYmxlIHByb3BlcnR5IHBhdGhzXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dCBUaGUgaW5zdGFuY2Ugb2YgdGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKiBAcmV0dXJucyBUaGUgQ1NWIHN0cmluZyBvZiBhbGwgcHJvcGVydHkgcGF0aHMgYXNzb2NpYXRlZCB3aXRoIHRoZSBDb3JlLk9wZXJhdGlvbkF2YWlsYWJsZSBhbm5vdGF0aW9uXG4gKi9cbmZ1bmN0aW9uIGdldE9wZXJhdGlvbkF2YWlsYWJsZVByb3BlcnRpZXMoXG5cdG9wZXJhdGlvbkF2YWlsYWJsZU1hcDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0PlxuKTogc3RyaW5nIHtcblx0Y29uc3QgcHJvcGVydGllcyA9IG5ldyBTZXQoKTtcblx0Zm9yIChjb25zdCBhY3Rpb25OYW1lIGluIG9wZXJhdGlvbkF2YWlsYWJsZU1hcCkge1xuXHRcdGNvbnN0IHByb3BlcnR5TmFtZSA9IG9wZXJhdGlvbkF2YWlsYWJsZU1hcFthY3Rpb25OYW1lXTtcblx0XHRpZiAocHJvcGVydHlOYW1lID09PSBudWxsKSB7XG5cdFx0XHQvLyBBbm5vdGF0aW9uIGNvbmZpZ3VyZWQgd2l0aCBleHBsaWNpdCAnbnVsbCcgKGFjdGlvbiBhZHZlcnRpc2VtZW50IHJlbGV2YW50KVxuXHRcdFx0cHJvcGVydGllcy5hZGQoYWN0aW9uTmFtZSk7XG5cdFx0fSBlbHNlIGlmICh0eXBlb2YgcHJvcGVydHlOYW1lID09PSBcInN0cmluZ1wiKSB7XG5cdFx0XHQvLyBBZGQgcHJvcGVydHkgcGF0aHMgYW5kIG5vdCBDb25zdGFudCB2YWx1ZXMuXG5cdFx0XHRwcm9wZXJ0aWVzLmFkZChwcm9wZXJ0eU5hbWUpO1xuXHRcdH1cblx0fVxuXHRpZiAocHJvcGVydGllcy5zaXplKSB7XG5cdFx0Ly8gU29tZSBhY3Rpb25zIGhhdmUgYW4gb3BlcmF0aW9uIGF2YWlsYWJsZSBiYXNlZCBvbiBwcm9wZXJ0eSAtLT4gd2UgbmVlZCB0byBsb2FkIHRoZSBIZWFkZXJJbmZvLlRpdGxlIHByb3BlcnR5XG5cdFx0Ly8gc28gdGhhdCB0aGUgZGlhbG9nIG9uIHBhcnRpYWwgYWN0aW9ucyBpcyBkaXNwbGF5ZWQgcHJvcGVybHkgKEJDUCAyMTgwMjcxNDI1KVxuXHRcdGNvbnN0IGVudGl0eVR5cGUgPSBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGUoKTtcblx0XHRjb25zdCB0aXRsZVByb3BlcnR5ID0gKGVudGl0eVR5cGUuYW5ub3RhdGlvbnM/LlVJPy5IZWFkZXJJbmZvPy5UaXRsZSBhcyBEYXRhRmllbGRUeXBlcyk/LlZhbHVlPy5wYXRoO1xuXHRcdGlmICh0aXRsZVByb3BlcnR5KSB7XG5cdFx0XHRwcm9wZXJ0aWVzLmFkZCh0aXRsZVByb3BlcnR5KTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIEFycmF5LmZyb20ocHJvcGVydGllcykuam9pbihcIixcIik7XG59XG4vKipcbiAqIEl0ZXJhdGVzIG92ZXIgdGhlIERhdGFGaWVsZEZvckFjdGlvbiBhbmQgRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uIG9mIGEgbGluZSBpdGVtIGFuZFxuICogcmV0dXJucyBhbGwgdGhlIFVJLkhpZGRlbiBhbm5vdGF0aW9uIGV4cHJlc3Npb25zLlxuICogQHBhcmFtIGxpbmVJdGVtQW5ub3RhdGlvbiBDb2xsZWN0aW9uIG9mIGRhdGEgZmllbGRzIHVzZWQgZm9yIHJlcHJlc2VudGF0aW9uIGluIGEgdGFibGUgb3IgbGlzdFxuICogQHBhcmFtIGN1cnJlbnRFbnRpdHlUeXBlIEN1cnJlbnQgZW50aXR5IHR5cGVcbiAqIEBwYXJhbSBjb250ZXh0RGF0YU1vZGVsT2JqZWN0UGF0aCBPYmplY3QgcGF0aCBvZiB0aGUgZGF0YSBtb2RlbFxuICogQHJldHVybnMgQWxsIHRoZSBgVUkuSGlkZGVuYCBwYXRoIGV4cHJlc3Npb25zIGZvdW5kIGluIHRoZSByZWxldmFudCBhY3Rpb25zXG4gKi9cbmZ1bmN0aW9uIGdldFVJSGlkZGVuRXhwRm9yQWN0aW9uc1JlcXVpcmluZ0NvbnRleHQoXG5cdGxpbmVJdGVtQW5ub3RhdGlvbjogTGluZUl0ZW0sXG5cdGN1cnJlbnRFbnRpdHlUeXBlOiBFbnRpdHlUeXBlLFxuXHRjb250ZXh0RGF0YU1vZGVsT2JqZWN0UGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+XG4pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj5bXSB7XG5cdGNvbnN0IGFVaUhpZGRlblBhdGhFeHByZXNzaW9uczogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+W10gPSBbXTtcblx0bGluZUl0ZW1Bbm5vdGF0aW9uLmZvckVhY2goKGRhdGFGaWVsZCkgPT4ge1xuXHRcdC8vIENoZWNrIGlmIHRoZSBsaW5lSXRlbSBjb250ZXh0IGlzIHRoZSBzYW1lIGFzIHRoYXQgb2YgdGhlIGFjdGlvbjpcblx0XHRpZiAoXG5cdFx0XHQoZGF0YUZpZWxkLiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JBY3Rpb24gJiZcblx0XHRcdFx0ZGF0YUZpZWxkPy5BY3Rpb25UYXJnZXQ/LmlzQm91bmQgJiZcblx0XHRcdFx0Y3VycmVudEVudGl0eVR5cGUgPT09IGRhdGFGaWVsZD8uQWN0aW9uVGFyZ2V0LnNvdXJjZUVudGl0eVR5cGUpIHx8XG5cdFx0XHQoZGF0YUZpZWxkLiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24gJiZcblx0XHRcdFx0ZGF0YUZpZWxkLlJlcXVpcmVzQ29udGV4dCAmJlxuXHRcdFx0XHRkYXRhRmllbGQ/LklubGluZT8udmFsdWVPZigpICE9PSB0cnVlKVxuXHRcdCkge1xuXHRcdFx0aWYgKHR5cGVvZiBkYXRhRmllbGQuYW5ub3RhdGlvbnM/LlVJPy5IaWRkZW4/LnZhbHVlT2YoKSA9PT0gXCJvYmplY3RcIikge1xuXHRcdFx0XHRhVWlIaWRkZW5QYXRoRXhwcmVzc2lvbnMucHVzaChlcXVhbChnZXRIaWRkZW5FeHByZXNzaW9uQXRUYWJsZUxldmVsKGRhdGFGaWVsZCwgY29udGV4dERhdGFNb2RlbE9iamVjdFBhdGgpLCBmYWxzZSkpO1xuXHRcdFx0fVxuXHRcdH1cblx0fSk7XG5cdHJldHVybiBhVWlIaWRkZW5QYXRoRXhwcmVzc2lvbnM7XG59XG4vKipcbiAqIFRoaXMgbWV0aG9kIGlzIHVzZWQgdG8gZ2V0IHRoZSBiaW5kaW5nIGV4cHJlc3Npb24gb2YgdGhlIHBhdGggb2YgYSBEYXRhRmllbGQuXG4gKiBAcGFyYW0gZXhwcmVzc2lvbiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvblxuICogQHJldHVybnMgVGhlIGJpbmRpbmcgZXhwcmVzc2lvblxuICovXG5mdW5jdGlvbiBnZXRQYXRoRnJvbUFjdGlvbkFubm90YXRpb24oZXhwcmVzc2lvbjogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24pOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB7XG5cdGxldCBwYXRoOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjtcblx0aWYgKGlzUGF0aEFubm90YXRpb25FeHByZXNzaW9uKGV4cHJlc3Npb24pKSB7XG5cdFx0cGF0aCA9IGV4cHJlc3Npb24ucGF0aDtcblx0fSBlbHNlIHtcblx0XHRwYXRoID0gZXhwcmVzc2lvbjtcblx0fVxuXHRyZXR1cm4gcGF0aDtcbn1cbi8qKlxuICogVGhpcyBtZXRob2QgaXMgdXNlZCB0byBjaGFuZ2UgdGhlIGNvbnRleHQgY3VycmVudGx5IHJlZmVyZW5jZWQgYnkgdGhpcyBiaW5kaW5nIGJ5IHJlbW92aW5nIHRoZSBsYXN0IG5hdmlnYXRpb24gcHJvcGVydHkuXG4gKlxuICogSXQgaXMgdXNlZCAoc3BlY2lmaWNhbGx5IGluIHRoaXMgY2FzZSksIHRvIHRyYW5zZm9ybSBhIGJpbmRpbmcgbWFkZSBmb3IgYSBOYXZQcm9wIGNvbnRleHQgL01haW5PYmplY3QvTmF2UHJvcDEvTmF2UHJvcDIsXG4gKiBpbnRvIGEgYmluZGluZyBvbiB0aGUgcHJldmlvdXMgY29udGV4dCAvTWFpbk9iamVjdC9OYXZQcm9wMS5cbiAqIEBwYXJhbSBzb3VyY2UgRGF0YUZpZWxkRm9yQWN0aW9uIHwgRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uIHwgQ3VzdG9tQWN0aW9uXG4gKiBAcGFyYW0gY29udGV4dERhdGFNb2RlbE9iamVjdFBhdGggRGF0YU1vZGVsT2JqZWN0UGF0aFxuICogQHJldHVybnMgVGhlIGJpbmRpbmcgZXhwcmVzc2lvblxuICovXG5mdW5jdGlvbiBnZXRIaWRkZW5FeHByZXNzaW9uQXRUYWJsZUxldmVsKFxuXHRzb3VyY2U6IERhdGFGaWVsZEFic3RyYWN0VHlwZXMsXG5cdGNvbnRleHREYXRhTW9kZWxPYmplY3RQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPFBhZ2VDb250ZXh0UGF0aFRhcmdldD5cbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjx1bmtub3duPiB7XG5cdGNvbnN0IGV4cHJlc3Npb24gPSBzb3VyY2UuYW5ub3RhdGlvbnM/LlVJPy5IaWRkZW4gYXMgQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb247XG5cdGxldCBwYXRoID0gZ2V0UGF0aEZyb21BY3Rpb25Bbm5vdGF0aW9uKGV4cHJlc3Npb24pO1xuXHRpZiAodHlwZW9mIHBhdGggPT09IFwib2JqZWN0XCIpIHtcblx0XHRyZXR1cm4gY29uc3RhbnQoZmFsc2UpO1xuXHR9IGVsc2UgaWYgKHR5cGVvZiBwYXRoID09PSBcInN0cmluZ1wiKSB7XG5cdFx0aWYgKFwidmlzaWJsZVwiIGluIHNvdXJjZSkge1xuXHRcdFx0cGF0aCA9IHBhdGguc3Vic3RyaW5nKDEsIHBhdGgubGVuZ3RoIC0gMSk7XG5cdFx0fVxuXHRcdGlmIChwYXRoLmluZGV4T2YoXCIvXCIpID4gMCkge1xuXHRcdFx0Ly9jaGVjayBpZiB0aGUgbmF2aWdhdGlvbiBwcm9wZXJ0eSBpcyBjb3JyZWN0OlxuXHRcdFx0Y29uc3Qgc3BsaXRQYXRoRm9yTmF2aWdhdGlvblByb3BlcnR5ID0gcGF0aC5zcGxpdChcIi9cIik7XG5cdFx0XHRjb25zdCBuYXZpZ2F0aW9uUGF0aCA9IHNwbGl0UGF0aEZvck5hdmlnYXRpb25Qcm9wZXJ0eVswXTtcblx0XHRcdGlmIChcblx0XHRcdFx0aXNOYXZpZ2F0aW9uUHJvcGVydHkoY29udGV4dERhdGFNb2RlbE9iamVjdFBhdGg/LnRhcmdldE9iamVjdCkgJiZcblx0XHRcdFx0Y29udGV4dERhdGFNb2RlbE9iamVjdFBhdGgudGFyZ2V0T2JqZWN0LnBhcnRuZXIgPT09IG5hdmlnYXRpb25QYXRoXG5cdFx0XHQpIHtcblx0XHRcdFx0cmV0dXJuIHBhdGhJbk1vZGVsKHNwbGl0UGF0aEZvck5hdmlnYXRpb25Qcm9wZXJ0eS5zbGljZSgxKS5qb2luKFwiL1wiKSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRyZXR1cm4gY29uc3RhbnQodHJ1ZSk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiBjb25zdGFudChmYWxzZSk7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBjb25zdGFudCh0cnVlKTtcbn1cbi8qKlxuICogTG9vcCB0aHJvdWdoIHRoZSBtYW5pZmVzdCBhY3Rpb25zIGFuZCBjaGVjayB0aGUgZm9sbG93aW5nOlxuICpcbiAqIElmIHRoZSBkYXRhIGZpZWxkIGlzIGFsc28gcmVmZXJlbmNlZCBhcyBhIGN1c3RvbSBhY3Rpb24uXG4gKiBJZiB0aGUgdW5kZXJseWluZyBtYW5pZmVzdCBhY3Rpb24gaXMgZWl0aGVyIGEgYm91bmQgYWN0aW9uIG9yIGhhcyB0aGUgJ1JlcXVpcmVzQ29udGV4dCcgcHJvcGVydHkgc2V0IHRvIHRydWUuXG4gKlxuICogSWYgc28sIHRoZSAncmVxdWlyZXNTZWxlY3Rpb24nIHByb3BlcnR5IGlzIGZvcmNlZCB0byAndHJ1ZScgaW4gdGhlIG1hbmlmZXN0LlxuICogQHBhcmFtIGRhdGFGaWVsZElkIElkIG9mIHRoZSBEYXRhRmllbGQgZXZhbHVhdGVkXG4gKiBAcGFyYW0gZGF0YUZpZWxkIERhdGFGaWVsZCBldmFsdWF0ZWRcbiAqIEBwYXJhbSBtYW5pZmVzdEFjdGlvbnMgVGhlIGFjdGlvbnMgZGVmaW5lZCBpbiB0aGUgbWFuaWZlc3RcbiAqIEByZXR1cm5zIGB0cnVlYCBpZiB0aGUgRGF0YUZpZWxkIGlzIGZvdW5kIGFtb25nIHRoZSBtYW5pZmVzdCBhY3Rpb25zXG4gKi9cbmZ1bmN0aW9uIHVwZGF0ZU1hbmlmZXN0QWN0aW9uQW5kVGFnSXQoXG5cdGRhdGFGaWVsZElkOiBzdHJpbmcsXG5cdGRhdGFGaWVsZDogRGF0YUZpZWxkRm9yQWN0aW9uIHwgRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uLFxuXHRtYW5pZmVzdEFjdGlvbnM6IFJlY29yZDxzdHJpbmcsIEN1c3RvbUFjdGlvbj5cbik6IGJvb2xlYW4ge1xuXHRyZXR1cm4gT2JqZWN0LmtleXMobWFuaWZlc3RBY3Rpb25zKS5zb21lKChhY3Rpb25LZXkpID0+IHtcblx0XHRpZiAoYWN0aW9uS2V5ID09PSBkYXRhRmllbGRJZCkge1xuXHRcdFx0aWYgKFxuXHRcdFx0XHQoZGF0YUZpZWxkIGFzIERhdGFGaWVsZEZvckFjdGlvbik/LkFjdGlvblRhcmdldD8uaXNCb3VuZCB8fFxuXHRcdFx0XHQoZGF0YUZpZWxkIGFzIERhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbik/LlJlcXVpcmVzQ29udGV4dFxuXHRcdFx0KSB7XG5cdFx0XHRcdG1hbmlmZXN0QWN0aW9uc1tkYXRhRmllbGRJZF0ucmVxdWlyZXNTZWxlY3Rpb24gPSB0cnVlO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXHRcdHJldHVybiBmYWxzZTtcblx0fSk7XG59XG4vKipcbiAqIExvb3AgdGhyb3VnaCB0aGUgRGF0YUZpZWxkRm9yQWN0aW9uIGFuZCBEYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24gb2YgYSBsaW5lIGl0ZW0gYW5kXG4gKiBjaGVjayB0aGUgZm9sbG93aW5nOlxuICogSWYgYXQgbGVhc3Qgb25lIG9mIHRoZW0gaXMgYWx3YXlzIHZpc2libGUgaW4gdGhlIHRhYmxlIHRvb2xiYXIgYW5kIHJlcXVpcmVzIGEgY29udGV4dFxuICogSWYgYW4gYWN0aW9uIGlzIGFsc28gZGVmaW5lZCBpbiB0aGUgbWFuaWZlc3QsIGl0IGlzIHNldCBhc2lkZSBhbmQgd2lsbCBiZSBjb25zaWRlcmVkXG4gKiB3aGVuIGdvaW5nIHRocm91Z2ggdGhlIG1hbmlmZXN0LlxuICogQHBhcmFtIGxpbmVJdGVtQW5ub3RhdGlvbiBDb2xsZWN0aW9uIG9mIGRhdGEgZmllbGRzIGZvciByZXByZXNlbnRhdGlvbiBpbiBhIHRhYmxlIG9yIGxpc3RcbiAqIEBwYXJhbSBtYW5pZmVzdEFjdGlvbnMgVGhlIGFjdGlvbnMgZGVmaW5lZCBpbiB0aGUgbWFuaWZlc3RcbiAqIEBwYXJhbSBjdXJyZW50RW50aXR5VHlwZSBDdXJyZW50IEVudGl0eSBUeXBlXG4gKiBAcmV0dXJucyBgdHJ1ZWAgaWYgdGhlcmUgaXMgYXQgbGVhc3QgMSBhY3Rpb24gdGhhdCBtZWV0cyB0aGUgY3JpdGVyaWFcbiAqL1xuZnVuY3Rpb24gaGFzQm91bmRBY3Rpb25zQWx3YXlzVmlzaWJsZUluVG9vbEJhcihcblx0bGluZUl0ZW1Bbm5vdGF0aW9uOiBMaW5lSXRlbSB8IERhdGFGaWVsZEZvckFjdGlvbkFic3RyYWN0VHlwZXNbXSxcblx0bWFuaWZlc3RBY3Rpb25zOiBSZWNvcmQ8c3RyaW5nLCBDdXN0b21BY3Rpb24+LFxuXHRjdXJyZW50RW50aXR5VHlwZTogRW50aXR5VHlwZVxuKTogYm9vbGVhbiB7XG5cdHJldHVybiBsaW5lSXRlbUFubm90YXRpb24uc29tZSgoZGF0YUZpZWxkKSA9PiB7XG5cdFx0aWYgKFxuXHRcdFx0KGRhdGFGaWVsZC4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQWN0aW9uIHx8XG5cdFx0XHRcdGRhdGFGaWVsZC4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uKSAmJlxuXHRcdFx0ZGF0YUZpZWxkPy5JbmxpbmU/LnZhbHVlT2YoKSAhPT0gdHJ1ZSAmJlxuXHRcdFx0KGRhdGFGaWVsZC5hbm5vdGF0aW9ucz8uVUk/LkhpZGRlbj8udmFsdWVPZigpID09PSBmYWxzZSB8fCBkYXRhRmllbGQuYW5ub3RhdGlvbnM/LlVJPy5IaWRkZW4/LnZhbHVlT2YoKSA9PT0gdW5kZWZpbmVkKVxuXHRcdCkge1xuXHRcdFx0aWYgKGRhdGFGaWVsZC4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQWN0aW9uKSB7XG5cdFx0XHRcdGNvbnN0IG1hbmlmZXN0QWN0aW9uSWQgPSBnZW5lcmF0ZShbXCJEYXRhRmllbGRGb3JBY3Rpb25cIiwgZGF0YUZpZWxkLkFjdGlvbiBhcyBzdHJpbmddKTtcblx0XHRcdFx0Ly8gaWYgdGhlIERhdGFGaWVsZEZvckFjdG9uIGZyb20gYW5ub3RhdGlvbiBhbHNvIGV4aXN0cyBpbiB0aGUgbWFuaWZlc3QsIGl0cyB2aXNpYmlsaXR5IHdpbGwgYmUgZXZhbHVhdGVkIGxhdGVyIG9uXG5cdFx0XHRcdGlmICh1cGRhdGVNYW5pZmVzdEFjdGlvbkFuZFRhZ0l0KG1hbmlmZXN0QWN0aW9uSWQsIGRhdGFGaWVsZCwgbWFuaWZlc3RBY3Rpb25zKSkge1xuXHRcdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdFx0fVxuXHRcdFx0XHQvLyBDaGVjayBpZiB0aGUgbGluZUl0ZW0gY29udGV4dCBpcyB0aGUgc2FtZSBhcyB0aGF0IG9mIHRoZSBhY3Rpb246XG5cdFx0XHRcdHJldHVybiBkYXRhRmllbGQ/LkFjdGlvblRhcmdldD8uaXNCb3VuZCAmJiBjdXJyZW50RW50aXR5VHlwZSA9PT0gZGF0YUZpZWxkPy5BY3Rpb25UYXJnZXQuc291cmNlRW50aXR5VHlwZTtcblx0XHRcdH0gZWxzZSBpZiAoZGF0YUZpZWxkLiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24pIHtcblx0XHRcdFx0Ly8gaWYgdGhlIERhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbiBmcm9tIGFubm90YXRpb24gYWxzbyBleGlzdHMgaW4gdGhlIG1hbmlmZXN0LCBpdHMgdmlzaWJpbGl0eSB3aWxsIGJlIGV2YWx1YXRlZCBsYXRlciBvblxuXHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0dXBkYXRlTWFuaWZlc3RBY3Rpb25BbmRUYWdJdChcblx0XHRcdFx0XHRcdGBEYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb246OiR7ZGF0YUZpZWxkLlNlbWFudGljT2JqZWN0fTo6JHtkYXRhRmllbGQuQWN0aW9ufWAsXG5cdFx0XHRcdFx0XHRkYXRhRmllbGQsXG5cdFx0XHRcdFx0XHRtYW5pZmVzdEFjdGlvbnNcblx0XHRcdFx0XHQpXG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gZGF0YUZpZWxkLlJlcXVpcmVzQ29udGV4dDtcblx0XHRcdH1cblx0XHR9IGVsc2UgaWYgKFxuXHRcdFx0ZGF0YUZpZWxkLiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JBY3Rpb25Hcm91cCAmJlxuXHRcdFx0KGRhdGFGaWVsZC5hbm5vdGF0aW9ucz8uVUk/LkhpZGRlbj8udmFsdWVPZigpID09PSBmYWxzZSB8fCBkYXRhRmllbGQuYW5ub3RhdGlvbnM/LlVJPy5IaWRkZW4/LnZhbHVlT2YoKSA9PT0gdW5kZWZpbmVkKVxuXHRcdCkge1xuXHRcdFx0cmV0dXJuIGhhc0JvdW5kQWN0aW9uc0Fsd2F5c1Zpc2libGVJblRvb2xCYXIoZGF0YUZpZWxkLkFjdGlvbnMsIG1hbmlmZXN0QWN0aW9ucywgY3VycmVudEVudGl0eVR5cGUpO1xuXHRcdH1cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH0pO1xufVxuLyoqXG4gKiBDaGVja3MgaWYgYSBjdXN0b20gYWN0aW9uIHRoYXQgcmVxdWlyZXMgYSBjb250ZXh0IGlzIGFsd2F5cyB2aXNpYmxlIGluIHRoZSB0b29sYmFyLlxuICogQHBhcmFtIG1hbmlmZXN0QWN0aW9ucyBUaGUgYWN0aW9ucyBkZWZpbmVkIGluIHRoZSBtYW5pZmVzdFxuICogQHJldHVybnMgYHRydWVgIGlmIHRoZXJlIGlzIGF0IGxlYXN0IDEgYWN0aW9uIHRoYXQgbWVldHMgdGhlIGNyaXRlcmlhXG4gKi9cbmZ1bmN0aW9uIGhhc0N1c3RvbUFjdGlvbnNBbHdheXNWaXNpYmxlSW5Ub29sQmFyKG1hbmlmZXN0QWN0aW9uczogUmVjb3JkPHN0cmluZywgQ3VzdG9tQWN0aW9uPik6IGJvb2xlYW4ge1xuXHRjb25zdCBjdXN0b21BY3Rpb25zID0gT2JqZWN0LmtleXMobWFuaWZlc3RBY3Rpb25zKS5yZWR1Y2UoKGFjdGlvbnM6IEN1c3RvbUFjdGlvbltdLCBhY3Rpb25LZXkpID0+IHtcblx0XHRjb25zdCBhY3Rpb24gPSBtYW5pZmVzdEFjdGlvbnNbYWN0aW9uS2V5XTtcblx0XHRpZiAoIWFjdGlvbi5tZW51KSB7XG5cdFx0XHQvL3NpbXBsZSBjdXN0b20gYWN0aW9uXG5cdFx0XHRhY3Rpb25zLnB1c2goYWN0aW9uKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gZ3JvdXBlZCBhY3Rpb25zXG5cdFx0XHRhY3Rpb25zID0gWy4uLmFjdGlvbnMsIC4uLihhY3Rpb24ubWVudS5maWx0ZXIoKG1lbnVBY3Rpb24pID0+IHR5cGVvZiBtZW51QWN0aW9uICE9PSBcInN0cmluZ1wiKSBhcyBDdXN0b21BY3Rpb25bXSldO1xuXHRcdH1cblx0XHRyZXR1cm4gYWN0aW9ucztcblx0fSwgW10pO1xuXHRyZXR1cm4gISFjdXN0b21BY3Rpb25zLmZpbmQoXG5cdFx0KGFjdGlvbikgPT4gYWN0aW9uLnJlcXVpcmVzU2VsZWN0aW9uICYmIChhY3Rpb24udmlzaWJsZSA9PT0gdW5kZWZpbmVkIHx8IGFjdGlvbi52aXNpYmxlPy50b1N0cmluZygpID09PSBcInRydWVcIilcblx0KTtcbn1cbi8qKlxuICogSXRlcmF0ZXMgb3ZlciB0aGUgY3VzdG9tIGFjdGlvbnMgKHdpdGgga2V5IHJlcXVpcmVzU2VsZWN0aW9uKSBkZWNsYXJlZCBpbiB0aGUgbWFuaWZlc3QgZm9yIHRoZSBjdXJyZW50IGxpbmUgaXRlbSBhbmQgcmV0dXJucyBhbGwgdGhlXG4gKiB2aXNpYmxlIGtleSB2YWx1ZXMgYXMgYW4gZXhwcmVzc2lvbi5cbiAqIEBwYXJhbSBtYW5pZmVzdEFjdGlvbnMgVGhlIGFjdGlvbnMgZGVmaW5lZCBpbiB0aGUgbWFuaWZlc3RcbiAqIEByZXR1cm5zIEFycmF5PEV4cHJlc3Npb248Ym9vbGVhbj4+IEFsbCB0aGUgdmlzaWJsZSBwYXRoIGV4cHJlc3Npb25zIG9mIHRoZSBhY3Rpb25zIHRoYXQgbWVldCB0aGUgY3JpdGVyaWFcbiAqL1xuZnVuY3Rpb24gZ2V0VmlzaWJsZUV4cEZvckN1c3RvbUFjdGlvbnNSZXF1aXJpbmdDb250ZXh0KG1hbmlmZXN0QWN0aW9uczogUmVjb3JkPHN0cmluZywgQ3VzdG9tQWN0aW9uPik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPltdIHtcblx0Y29uc3QgYVZpc2libGVQYXRoRXhwcmVzc2lvbnM6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPltdID0gW107XG5cdGlmIChtYW5pZmVzdEFjdGlvbnMpIHtcblx0XHRPYmplY3Qua2V5cyhtYW5pZmVzdEFjdGlvbnMpLmZvckVhY2goKGFjdGlvbktleSkgPT4ge1xuXHRcdFx0Y29uc3QgYWN0aW9uID0gbWFuaWZlc3RBY3Rpb25zW2FjdGlvbktleV07XG5cdFx0XHRpZiAoYWN0aW9uLnJlcXVpcmVzU2VsZWN0aW9uID09PSB0cnVlICYmIGFjdGlvbi52aXNpYmxlICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0aWYgKHR5cGVvZiBhY3Rpb24udmlzaWJsZSA9PT0gXCJzdHJpbmdcIikge1xuXHRcdFx0XHRcdC8qVGhlIGZpbmFsIGFpbSB3b3VsZCBiZSB0byBjaGVjayBpZiB0aGUgcGF0aCBleHByZXNzaW9uIGRlcGVuZHMgb24gdGhlIHBhcmVudCBjb250ZXh0XG5cdFx0XHRcdFx0YW5kIGNvbnNpZGVycyBvbmx5IHRob3NlIGV4cHJlc3Npb25zIGZvciB0aGUgZXhwcmVzc2lvbiBldmFsdWF0aW9uLFxuXHRcdFx0XHRcdGJ1dCBjdXJyZW50bHkgbm90IHBvc3NpYmxlIGZyb20gdGhlIG1hbmlmZXN0IGFzIHRoZSB2aXNpYmxlIGtleSBpcyBib3VuZCBvbiB0aGUgcGFyZW50IGVudGl0eS5cblx0XHRcdFx0XHRUcmlja3kgdG8gZGlmZmVyZW50aWF0ZSB0aGUgcGF0aCBhcyBpdCdzIGRvbmUgZm9yIHRoZSBIaWRkZW4gYW5ub3RhdGlvbi5cblx0XHRcdFx0XHRGb3IgdGhlIHRpbWUgYmVpbmcgd2UgY29uc2lkZXIgYWxsIHRoZSBwYXRocyBvZiB0aGUgbWFuaWZlc3QqL1xuXHRcdFx0XHRcdGFWaXNpYmxlUGF0aEV4cHJlc3Npb25zLnB1c2gocmVzb2x2ZUJpbmRpbmdTdHJpbmcoYWN0aW9uPy52aXNpYmxlPy52YWx1ZU9mKCkpKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cdHJldHVybiBhVmlzaWJsZVBhdGhFeHByZXNzaW9ucztcbn1cbi8qKlxuICogRXZhbHVhdGUgaWYgdGhlIHBhdGggaXMgc3RhdGljYWxseSBkZWxldGFibGUgb3IgdXBkYXRhYmxlLlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHRcbiAqIEByZXR1cm5zIFRoZSB0YWJsZSBjYXBhYmlsaXRpZXNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldENhcGFiaWxpdHlSZXN0cmljdGlvbihjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4pOiBUYWJsZUNhcGFiaWxpdHlSZXN0cmljdGlvbiB7XG5cdGNvbnN0IGlzRGVsZXRhYmxlID0gaXNQYXRoRGVsZXRhYmxlKGNvbnZlcnRlckNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpKTtcblx0Y29uc3QgaXNVcGRhdGFibGUgPSBpc1BhdGhVcGRhdGFibGUoY29udmVydGVyQ29udGV4dC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCkpO1xuXHRyZXR1cm4ge1xuXHRcdGlzRGVsZXRhYmxlOiAhKGlzQ29uc3RhbnQoaXNEZWxldGFibGUpICYmIGlzRGVsZXRhYmxlLnZhbHVlID09PSBmYWxzZSksXG5cdFx0aXNVcGRhdGFibGU6ICEoaXNDb25zdGFudChpc1VwZGF0YWJsZSkgJiYgaXNVcGRhdGFibGUudmFsdWUgPT09IGZhbHNlKVxuXHR9O1xufVxuZXhwb3J0IGZ1bmN0aW9uIGdldFNlbGVjdGlvbk1vZGUoXG5cdGxpbmVJdGVtQW5ub3RhdGlvbjogTGluZUl0ZW0gfCB1bmRlZmluZWQsXG5cdHZpc3VhbGl6YXRpb25QYXRoOiBzdHJpbmcsXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pixcblx0aXNFbnRpdHlTZXQ6IGJvb2xlYW4sXG5cdHRhcmdldENhcGFiaWxpdGllczogVGFibGVDYXBhYmlsaXR5UmVzdHJpY3Rpb24sXG5cdGRlbGV0ZUJ1dHRvblZpc2liaWxpdHlFeHByZXNzaW9uPzogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+LFxuXHRtYXNzRWRpdFZpc2liaWxpdHlFeHByZXNzaW9uOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4gPSBjb25zdGFudChmYWxzZSksXG5cdGN1dEJ1dHRvblZpc2liaWxpdHlFeHByZXNzaW9uOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4gPSBjb25zdGFudChmYWxzZSlcbik6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdGNvbnN0IHRhYmxlTWFuaWZlc3RTZXR0aW5ncyA9IGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RDb250cm9sQ29uZmlndXJhdGlvbjxUYWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbj4odmlzdWFsaXphdGlvblBhdGgpO1xuXHRjb25zdCB0YWJsZVR5cGUgPSB0YWJsZU1hbmlmZXN0U2V0dGluZ3MudGFibGVTZXR0aW5ncz8udHlwZTtcblx0bGV0IHNlbGVjdGlvbk1vZGUgPSB0YWJsZU1hbmlmZXN0U2V0dGluZ3MudGFibGVTZXR0aW5ncz8uc2VsZWN0aW9uTW9kZTtcblxuXHQvLyBUaGUgY29sbGFwc2UvRXhwYW5kIGFjdGlvbiBvZiBhIHRyZWUgdGFibGUgaXMgYSBib3VuZCBhY3Rpb24sIGFzIGEgcmVzdWx0LCBhIHRyZWUgdGFibGUgc2hvdWxkIGFsd2F5cyBoYXZlIGEgc2VsZWN0aW9uIG1vZGUgdG8gXCJNdWx0aVwiIHdoZW4gbm8gc2VsZWN0aW9uTW9kZSBoYXMgYmVlbiBzZXQgaW4gdGhlIG1hbmlmZXN0XG5cdGlmICh0YWJsZVR5cGUgPT09IFwiVHJlZVRhYmxlXCIgJiYgIXNlbGVjdGlvbk1vZGUpIHtcblx0XHRyZXR1cm4gU2VsZWN0aW9uTW9kZS5NdWx0aTtcblx0fVxuXG5cdC8vIElmIHRoZSBzZWxlY3Rpb24gbW9kZSBpcyBmb3JjZWQgdG8gJ05vbmUnIGluIHRoZSBtYW5pZmVzdC9tYWNybyB0YWJsZSBwYXJhbWV0ZXJzLCB3ZSBrZWVwIGl0IHVubGVzcyBoZXJlIGlzIGEgZGVsZXRlIGJ1dHRvblxuXHRpZiAoIWxpbmVJdGVtQW5ub3RhdGlvbiB8fCBzZWxlY3Rpb25Nb2RlID09PSBTZWxlY3Rpb25Nb2RlLk5vbmUpIHtcblx0XHRpZiAodGFyZ2V0Q2FwYWJpbGl0aWVzLmlzRGVsZXRhYmxlICYmIGRlbGV0ZUJ1dHRvblZpc2liaWxpdHlFeHByZXNzaW9uKSB7XG5cdFx0XHRyZXR1cm4gY29tcGlsZUV4cHJlc3Npb24oaWZFbHNlKGRlbGV0ZUJ1dHRvblZpc2liaWxpdHlFeHByZXNzaW9uLCBjb25zdGFudChTZWxlY3Rpb25Nb2RlLk11bHRpKSwgY29uc3RhbnQoU2VsZWN0aW9uTW9kZS5Ob25lKSkpO1xuXHRcdH1cblx0XHRyZXR1cm4gU2VsZWN0aW9uTW9kZS5Ob25lO1xuXHR9XG5cdGlmIChzZWxlY3Rpb25Nb2RlID09PSBTZWxlY3Rpb25Nb2RlLkZvcmNlTXVsdGkpIHtcblx0XHRyZXR1cm4gU2VsZWN0aW9uTW9kZS5NdWx0aTtcblx0fSBlbHNlIGlmIChzZWxlY3Rpb25Nb2RlID09PSBTZWxlY3Rpb25Nb2RlLkZvcmNlU2luZ2xlKSB7XG5cdFx0cmV0dXJuIFNlbGVjdGlvbk1vZGUuU2luZ2xlO1xuXHR9XG5cdGxldCBhSGlkZGVuQmluZGluZ0V4cHJlc3Npb25zOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj5bXSA9IFtdLFxuXHRcdGFWaXNpYmxlQmluZGluZ0V4cHJlc3Npb25zOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj5bXSA9IFtdO1xuXHRjb25zdCBtYW5pZmVzdEFjdGlvbnMgPSBnZXRBY3Rpb25zRnJvbU1hbmlmZXN0KFxuXHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RDb250cm9sQ29uZmlndXJhdGlvbjxUYWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbj4odmlzdWFsaXphdGlvblBhdGgpLmFjdGlvbnMsXG5cdFx0Y29udmVydGVyQ29udGV4dCxcblx0XHRbXSxcblx0XHR1bmRlZmluZWQsXG5cdFx0ZmFsc2Vcblx0KTtcblx0bGV0IGlzUGFyZW50RGVsZXRhYmxlLCBwYXJlbnRFbnRpdHlTZXREZWxldGFibGU7XG5cdGlmIChjb252ZXJ0ZXJDb250ZXh0LmdldFRlbXBsYXRlVHlwZSgpID09PSBUZW1wbGF0ZVR5cGUuT2JqZWN0UGFnZSkge1xuXHRcdGlzUGFyZW50RGVsZXRhYmxlID0gaXNQYXRoRGVsZXRhYmxlKGNvbnZlcnRlckNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpKTtcblx0XHRwYXJlbnRFbnRpdHlTZXREZWxldGFibGUgPSBpc1BhcmVudERlbGV0YWJsZSA/IGNvbXBpbGVFeHByZXNzaW9uKGlzUGFyZW50RGVsZXRhYmxlLCB0cnVlKSA6IGlzUGFyZW50RGVsZXRhYmxlO1xuXHR9XG5cdGNvbnN0IGJNYXNzRWRpdEVuYWJsZWQ6IGJvb2xlYW4gPSAhaXNDb25zdGFudChtYXNzRWRpdFZpc2liaWxpdHlFeHByZXNzaW9uKSB8fCBtYXNzRWRpdFZpc2liaWxpdHlFeHByZXNzaW9uLnZhbHVlICE9PSBmYWxzZTtcblx0aWYgKCFzZWxlY3Rpb25Nb2RlIHx8IHNlbGVjdGlvbk1vZGUgPT09IFNlbGVjdGlvbk1vZGUuQXV0bykge1xuXHRcdHNlbGVjdGlvbk1vZGUgPSBTZWxlY3Rpb25Nb2RlLk11bHRpO1xuXHR9XG5cdGlmIChiTWFzc0VkaXRFbmFibGVkKSB7XG5cdFx0Ly8gT3ZlcnJpZGUgZGVmYXVsdCBzZWxlY3Rpb24gbW9kZSB3aGVuIG1hc3MgZWRpdCBpcyB2aXNpYmxlXG5cdFx0c2VsZWN0aW9uTW9kZSA9IHNlbGVjdGlvbk1vZGUgPT09IFNlbGVjdGlvbk1vZGUuU2luZ2xlID8gU2VsZWN0aW9uTW9kZS5TaW5nbGUgOiBTZWxlY3Rpb25Nb2RlLk11bHRpO1xuXHR9XG5cdGlmIChcblx0XHRoYXNCb3VuZEFjdGlvbnNBbHdheXNWaXNpYmxlSW5Ub29sQmFyKGxpbmVJdGVtQW5ub3RhdGlvbiwgbWFuaWZlc3RBY3Rpb25zLmFjdGlvbnMsIGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZSgpKSB8fFxuXHRcdGhhc0N1c3RvbUFjdGlvbnNBbHdheXNWaXNpYmxlSW5Ub29sQmFyKG1hbmlmZXN0QWN0aW9ucy5hY3Rpb25zKVxuXHQpIHtcblx0XHRyZXR1cm4gc2VsZWN0aW9uTW9kZTtcblx0fVxuXHRhSGlkZGVuQmluZGluZ0V4cHJlc3Npb25zID0gZ2V0VUlIaWRkZW5FeHBGb3JBY3Rpb25zUmVxdWlyaW5nQ29udGV4dChcblx0XHRsaW5lSXRlbUFubm90YXRpb24sXG5cdFx0Y29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlKCksXG5cdFx0Y29udmVydGVyQ29udGV4dC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKClcblx0KTtcblx0YVZpc2libGVCaW5kaW5nRXhwcmVzc2lvbnMgPSBnZXRWaXNpYmxlRXhwRm9yQ3VzdG9tQWN0aW9uc1JlcXVpcmluZ0NvbnRleHQobWFuaWZlc3RBY3Rpb25zLmFjdGlvbnMpO1xuXHQvLyBObyBhY3Rpb24gcmVxdWlyaW5nIGEgY29udGV4dDpcblx0aWYgKFxuXHRcdGFIaWRkZW5CaW5kaW5nRXhwcmVzc2lvbnMubGVuZ3RoID09PSAwICYmXG5cdFx0YVZpc2libGVCaW5kaW5nRXhwcmVzc2lvbnMubGVuZ3RoID09PSAwICYmXG5cdFx0KGN1dEJ1dHRvblZpc2liaWxpdHlFeHByZXNzaW9uIHx8IGRlbGV0ZUJ1dHRvblZpc2liaWxpdHlFeHByZXNzaW9uIHx8IGJNYXNzRWRpdEVuYWJsZWQpXG5cdCkge1xuXHRcdGlmICghaXNFbnRpdHlTZXQpIHtcblx0XHRcdC8vIEV4YW1wbGU6IE9QIGNhc2Vcblx0XHRcdGlmICh0YXJnZXRDYXBhYmlsaXRpZXMuaXNEZWxldGFibGUgfHwgcGFyZW50RW50aXR5U2V0RGVsZXRhYmxlICE9PSBcImZhbHNlXCIgfHwgYk1hc3NFZGl0RW5hYmxlZCkge1xuXHRcdFx0XHQvLyBCdWlsZGluZyBleHByZXNzaW9uIGZvciBkZWxldGUgYW5kIG1hc3MgZWRpdFxuXHRcdFx0XHRjb25zdCBidXR0b25WaXNpYmlsaXR5RXhwcmVzc2lvbiA9IG9yKFxuXHRcdFx0XHRcdGN1dEJ1dHRvblZpc2liaWxpdHlFeHByZXNzaW9uIHx8IHRydWUsXG5cdFx0XHRcdFx0ZGVsZXRlQnV0dG9uVmlzaWJpbGl0eUV4cHJlc3Npb24gfHwgdHJ1ZSwgLy8gZGVmYXVsdCBkZWxldGUgdmlzaWJpbGl0eSBhcyB0cnVlXG5cdFx0XHRcdFx0bWFzc0VkaXRWaXNpYmlsaXR5RXhwcmVzc2lvblxuXHRcdFx0XHQpO1xuXHRcdFx0XHRyZXR1cm4gY29tcGlsZUV4cHJlc3Npb24oXG5cdFx0XHRcdFx0aWZFbHNlKGFuZChVSS5Jc0VkaXRhYmxlLCBidXR0b25WaXNpYmlsaXR5RXhwcmVzc2lvbiksIGNvbnN0YW50KHNlbGVjdGlvbk1vZGUpLCBjb25zdGFudChTZWxlY3Rpb25Nb2RlLk5vbmUpKVxuXHRcdFx0XHQpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cmV0dXJuIGNvbXBpbGVFeHByZXNzaW9uKFxuXHRcdFx0XHRcdGlmRWxzZShjdXRCdXR0b25WaXNpYmlsaXR5RXhwcmVzc2lvbiwgY29uc3RhbnQoU2VsZWN0aW9uTW9kZS5TaW5nbGUpLCBjb25zdGFudChTZWxlY3Rpb25Nb2RlLk5vbmUpKVxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdFx0Ly8gRW50aXR5U2V0IGRlbGV0YWJsZTpcblx0XHR9IGVsc2UgaWYgKGJNYXNzRWRpdEVuYWJsZWQpIHtcblx0XHRcdC8vIGV4YW1wbGU6IExSIHNjZW5hcmlvXG5cdFx0XHRyZXR1cm4gc2VsZWN0aW9uTW9kZTtcblx0XHR9IGVsc2UgaWYgKHRhcmdldENhcGFiaWxpdGllcy5pc0RlbGV0YWJsZSAmJiBkZWxldGVCdXR0b25WaXNpYmlsaXR5RXhwcmVzc2lvbikge1xuXHRcdFx0cmV0dXJuIGNvbXBpbGVFeHByZXNzaW9uKGlmRWxzZShkZWxldGVCdXR0b25WaXNpYmlsaXR5RXhwcmVzc2lvbiwgY29uc3RhbnQoc2VsZWN0aW9uTW9kZSksIGNvbnN0YW50KFNlbGVjdGlvbk1vZGUuTm9uZSkpKTtcblx0XHRcdC8vIEVudGl0eVNldCBub3QgZGVsZXRhYmxlOlxuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gU2VsZWN0aW9uTW9kZS5Ob25lO1xuXHRcdH1cblx0XHQvLyBUaGVyZSBhcmUgYWN0aW9ucyByZXF1aXJpbmcgYSBjb250ZXh0OlxuXHR9IGVsc2UgaWYgKCFpc0VudGl0eVNldCkge1xuXHRcdC8vIEV4YW1wbGU6IE9QIGNhc2Vcblx0XHRpZiAodGFyZ2V0Q2FwYWJpbGl0aWVzLmlzRGVsZXRhYmxlIHx8IHBhcmVudEVudGl0eVNldERlbGV0YWJsZSAhPT0gXCJmYWxzZVwiIHx8IGJNYXNzRWRpdEVuYWJsZWQpIHtcblx0XHRcdC8vIFVzZSBzZWxlY3Rpb25Nb2RlIGluIGVkaXQgbW9kZSBpZiBkZWxldGUgaXMgZW5hYmxlZCBvciBtYXNzIGVkaXQgaXMgdmlzaWJsZVxuXHRcdFx0Y29uc3QgZWRpdE1vZGVidXR0b25WaXNpYmlsaXR5RXhwcmVzc2lvbiA9IGlmRWxzZShcblx0XHRcdFx0Yk1hc3NFZGl0RW5hYmxlZCAmJiAhdGFyZ2V0Q2FwYWJpbGl0aWVzLmlzRGVsZXRhYmxlLFxuXHRcdFx0XHRtYXNzRWRpdFZpc2liaWxpdHlFeHByZXNzaW9uLFxuXHRcdFx0XHRjb25zdGFudCh0cnVlKVxuXHRcdFx0KTtcblx0XHRcdHJldHVybiBjb21waWxlRXhwcmVzc2lvbihcblx0XHRcdFx0aWZFbHNlKFxuXHRcdFx0XHRcdGFuZChVSS5Jc0VkaXRhYmxlLCBlZGl0TW9kZWJ1dHRvblZpc2liaWxpdHlFeHByZXNzaW9uKSxcblx0XHRcdFx0XHRjb25zdGFudChzZWxlY3Rpb25Nb2RlKSxcblx0XHRcdFx0XHRpZkVsc2UoXG5cdFx0XHRcdFx0XHRvciguLi5hSGlkZGVuQmluZGluZ0V4cHJlc3Npb25zLmNvbmNhdChhVmlzaWJsZUJpbmRpbmdFeHByZXNzaW9ucykpLFxuXHRcdFx0XHRcdFx0Y29uc3RhbnQoc2VsZWN0aW9uTW9kZSksXG5cdFx0XHRcdFx0XHRjb25zdGFudChTZWxlY3Rpb25Nb2RlLk5vbmUpXG5cdFx0XHRcdFx0KVxuXHRcdFx0XHQpXG5cdFx0XHQpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gY29tcGlsZUV4cHJlc3Npb24oXG5cdFx0XHRcdGlmRWxzZShcblx0XHRcdFx0XHRvciguLi5hSGlkZGVuQmluZGluZ0V4cHJlc3Npb25zLmNvbmNhdChhVmlzaWJsZUJpbmRpbmdFeHByZXNzaW9ucykpLFxuXHRcdFx0XHRcdGNvbnN0YW50KHNlbGVjdGlvbk1vZGUpLFxuXHRcdFx0XHRcdGNvbnN0YW50KFNlbGVjdGlvbk1vZGUuTm9uZSlcblx0XHRcdFx0KVxuXHRcdFx0KTtcblx0XHR9XG5cdFx0Ly9FbnRpdHlTZXQgZGVsZXRhYmxlOlxuXHR9IGVsc2UgaWYgKHRhcmdldENhcGFiaWxpdGllcy5pc0RlbGV0YWJsZSB8fCBiTWFzc0VkaXRFbmFibGVkKSB7XG5cdFx0Ly8gRXhhbXBsZTogTFIgc2NlbmFyaW9cblx0XHRyZXR1cm4gc2VsZWN0aW9uTW9kZTtcblx0XHQvL0VudGl0eVNldCBub3QgZGVsZXRhYmxlOlxuXHR9IGVsc2Uge1xuXHRcdHJldHVybiBjb21waWxlRXhwcmVzc2lvbihcblx0XHRcdGlmRWxzZShcblx0XHRcdFx0b3IoLi4uYUhpZGRlbkJpbmRpbmdFeHByZXNzaW9ucy5jb25jYXQoYVZpc2libGVCaW5kaW5nRXhwcmVzc2lvbnMpLCBtYXNzRWRpdFZpc2liaWxpdHlFeHByZXNzaW9uKSxcblx0XHRcdFx0Y29uc3RhbnQoc2VsZWN0aW9uTW9kZSksXG5cdFx0XHRcdGNvbnN0YW50KFNlbGVjdGlvbk1vZGUuTm9uZSlcblx0XHRcdClcblx0XHQpO1xuXHR9XG59XG5cbi8qKlxuICogTWV0aG9kIHRvIHJldHJpZXZlIGFsbCB0YWJsZSBhY3Rpb25zIGZyb20gYW5ub3RhdGlvbnMuXG4gKiBAcGFyYW0gbGluZUl0ZW1Bbm5vdGF0aW9uXG4gKiBAcGFyYW0gdmlzdWFsaXphdGlvblBhdGhcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcmV0dXJucyBUaGUgdGFibGUgYW5ub3RhdGlvbiBhY3Rpb25zXG4gKi9cbmZ1bmN0aW9uIGdldFRhYmxlQW5ub3RhdGlvbkFjdGlvbnMoXG5cdGxpbmVJdGVtQW5ub3RhdGlvbjogTGluZUl0ZW0sXG5cdHZpc3VhbGl6YXRpb25QYXRoOiBzdHJpbmcsXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0PlxuKTogeyB0YWJsZUFjdGlvbnM6IEFycmF5PEFubm90YXRpb25BY3Rpb24gfCBBbm5vdGF0aW9uQWN0aW9uR3JvdXA+IH0ge1xuXHRjb25zdCB0YWJsZUFjdGlvbnM6IEFycmF5PEFubm90YXRpb25BY3Rpb24gfCBBbm5vdGF0aW9uQWN0aW9uR3JvdXA+ID0gW107XG5cdGNvbnN0IGNvcHlEYXRhRmllbGQgPSBnZXRDb3B5QWN0aW9uKFxuXHRcdGxpbmVJdGVtQW5ub3RhdGlvbi5maWx0ZXIoKGRhdGFGaWVsZCkgPT4ge1xuXHRcdFx0cmV0dXJuIGRhdGFGaWVsZElzQ29weUFjdGlvbihkYXRhRmllbGQgYXMgRGF0YUZpZWxkRm9yQWN0aW9uVHlwZXMpO1xuXHRcdH0pIGFzIERhdGFGaWVsZEZvckFjdGlvblR5cGVzW11cblx0KTtcblx0aWYgKGNvcHlEYXRhRmllbGQpIHtcblx0XHR0YWJsZUFjdGlvbnMucHVzaCh7XG5cdFx0XHR0eXBlOiBBY3Rpb25UeXBlLkNvcHksXG5cdFx0XHRhbm5vdGF0aW9uUGF0aDogY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXRCYXNlZEFubm90YXRpb25QYXRoKGNvcHlEYXRhRmllbGQuZnVsbHlRdWFsaWZpZWROYW1lKSxcblx0XHRcdGtleTogS2V5SGVscGVyLmdlbmVyYXRlS2V5RnJvbURhdGFGaWVsZChjb3B5RGF0YUZpZWxkKSxcblx0XHRcdHZpc2libGU6IGNvbXBpbGVFeHByZXNzaW9uKHZpc2libGVFeHByZXNzaW9uKGNvcHlEYXRhRmllbGQsIGNvbnZlcnRlckNvbnRleHQpKSxcblx0XHRcdHZpc2libGVGb3JDb250ZXh0TWVudTogY29tcGlsZUV4cHJlc3Npb24odmlzaWJsZUZvckNvbnRleHRNZW51RXhwcmVzc2lvbihjb3B5RGF0YUZpZWxkLCBjb252ZXJ0ZXJDb250ZXh0KSksXG5cdFx0XHR0ZXh0OiBjb3B5RGF0YUZpZWxkLkxhYmVsPy50b1N0cmluZygpID8/IExpYnJhcnkuZ2V0UmVzb3VyY2VCdW5kbGVGb3IoXCJzYXAuZmUuY29yZVwiKSEuZ2V0VGV4dChcIkNfQ09NTU9OX0NPUFlcIiksXG5cdFx0XHRpc05hdmlnYWJsZTogdHJ1ZVxuXHRcdH0pO1xuXHR9XG5cdGxpbmVJdGVtQW5ub3RhdGlvblxuXHRcdC5maWx0ZXIoKGRhdGFGaWVsZCkgPT4ge1xuXHRcdFx0cmV0dXJuICFkYXRhRmllbGRJc0NvcHlBY3Rpb24oZGF0YUZpZWxkIGFzIERhdGFGaWVsZEZvckFjdGlvbik7XG5cdFx0fSlcblx0XHQuZm9yRWFjaCgoZGF0YUZpZWxkOiBEYXRhRmllbGRBYnN0cmFjdFR5cGVzKSA9PiB7XG5cdFx0XHRpZiAoXG5cdFx0XHRcdGlzRGF0YUZpZWxkRm9yQWN0aW9uQWJzdHJhY3QoZGF0YUZpZWxkKSAmJlxuXHRcdFx0XHRkYXRhRmllbGQuSW5saW5lPy52YWx1ZU9mKCkgIT09IHRydWUgJiZcblx0XHRcdFx0ZGF0YUZpZWxkLkRldGVybWluaW5nPy52YWx1ZU9mKCkgIT09IHRydWVcblx0XHRcdCkge1xuXHRcdFx0XHRjb25zdCB0YWJsZUFjdGlvbiA9IGdldERhdGFGaWVsZEFubm90YXRpb25BY3Rpb24oZGF0YUZpZWxkLCBjb252ZXJ0ZXJDb250ZXh0KTtcblx0XHRcdFx0aWYgKHRhYmxlQWN0aW9uKSB7XG5cdFx0XHRcdFx0dGFibGVBY3Rpb25zLnB1c2godGFibGVBY3Rpb24pO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2UgaWYgKGlzRGF0YUZpZWxkRm9yQWN0aW9uR3JvdXAoZGF0YUZpZWxkKSkge1xuXHRcdFx0XHRjb25zdCBkYXRhRmllbGRHcm91cCA9IGdldERhdGFGaWVsZEFubm90YXRpb25BY3Rpb24oZGF0YUZpZWxkLCBjb252ZXJ0ZXJDb250ZXh0KTtcblx0XHRcdFx0aWYgKGRhdGFGaWVsZEdyb3VwKSB7XG5cdFx0XHRcdFx0dGFibGVBY3Rpb25zLnB1c2goZGF0YUZpZWxkR3JvdXApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0cmV0dXJuIHtcblx0XHR0YWJsZUFjdGlvbnNcblx0fTtcbn1cblxuLy8gRm9yIHRoZSBjb250ZXh0IG1lbnUsIHRoZSB2aXNpYmlsaXR5IHNob3VsZCBhbHNvIGNvbnNpZGVyIHRoZSAnaW5hY3RpdmVDb250ZXh0JyBwcm9wZXJ0eTpcbi8vIG9ubHkgd2hlbiBhdCBsZWFzdCBvbmUgc2VsZWN0ZWQgY29udGV4dCBpcyBhY3RpdmUgKGkuZS4gXCJjb250ZXh0bWVudS9pbmFjdGl2ZUNvbnRleHRcIiBpcyBmYWxzZSksIHRoZSBhY3Rpb24gc2hvdWxkIGJlIHZpc2libGUgaW4gdGhlIGNvbnRleHQgbWVudVxuLy8gVGhpcyBpcyBvbmx5IHJlbGV2YW50IHdoZW4gdGhlIHRhYmxlIG1hbmlmZXN0IHNldHRpbmcgXCJjcmVhdGlvbk1vZGVcIiBpcyBcIklubGluZUNyZWF0aW9uUm93c1wiXG5mdW5jdGlvbiB2aXNpYmxlRm9yQ29udGV4dE1lbnVFeHByZXNzaW9uKFxuXHRkYXRhRmllbGQ6IERhdGFGaWVsZEZvckFjdGlvbiB8IERhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbiB8IERhdGFGaWVsZEZvckFjdGlvbkdyb3VwIHwgdW5kZWZpbmVkLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD5cbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiB7XG5cdHJldHVybiBhbmQodmlzaWJsZUV4cHJlc3Npb24oZGF0YUZpZWxkLCBjb252ZXJ0ZXJDb250ZXh0KSwgZXF1YWwocGF0aEluTW9kZWwoXCJjb250ZXh0bWVudS9pbmFjdGl2ZUNvbnRleHRcIiwgXCJpbnRlcm5hbFwiKSwgZmFsc2UpKTtcbn1cblxuZnVuY3Rpb24gZ2V0RGF0YUZpZWxkQW5ub3RhdGlvbkFjdGlvbihcblx0ZGF0YUZpZWxkOiBEYXRhRmllbGRBYnN0cmFjdFR5cGVzLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD5cbik6IEFubm90YXRpb25BY3Rpb24gfCBBbm5vdGF0aW9uQWN0aW9uR3JvdXAgfCB2b2lkIHtcblx0c3dpdGNoIChkYXRhRmllbGQuJFR5cGUpIHtcblx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckFjdGlvbjpcblx0XHRcdGNvbnN0IHRhYmxlQWN0aW9uOiBBbm5vdGF0aW9uQWN0aW9uID0ge1xuXHRcdFx0XHR0eXBlOiBBY3Rpb25UeXBlLkRhdGFGaWVsZEZvckFjdGlvbixcblx0XHRcdFx0YW5ub3RhdGlvblBhdGg6IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0QmFzZWRBbm5vdGF0aW9uUGF0aChkYXRhRmllbGQuZnVsbHlRdWFsaWZpZWROYW1lKSxcblx0XHRcdFx0a2V5OiBLZXlIZWxwZXIuZ2VuZXJhdGVLZXlGcm9tRGF0YUZpZWxkKGRhdGFGaWVsZCksXG5cdFx0XHRcdHZpc2libGU6IGNvbXBpbGVFeHByZXNzaW9uKHZpc2libGVFeHByZXNzaW9uKGRhdGFGaWVsZCwgY29udmVydGVyQ29udGV4dCkpLFxuXHRcdFx0XHR2aXNpYmxlRm9yQ29udGV4dE1lbnU6IGNvbXBpbGVFeHByZXNzaW9uKHZpc2libGVGb3JDb250ZXh0TWVudUV4cHJlc3Npb24oZGF0YUZpZWxkLCBjb252ZXJ0ZXJDb250ZXh0KSksXG5cdFx0XHRcdGlzTmF2aWdhYmxlOiB0cnVlXG5cdFx0XHR9O1xuXHRcdFx0Y29uc3Qgc0VudGl0eVR5cGUgPSBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGUoKS5mdWxseVF1YWxpZmllZE5hbWU7XG5cdFx0XHRpZiAoX3VzZUVuYWJsZWRFeHByZXNzaW9uKGRhdGFGaWVsZCwgc0VudGl0eVR5cGUpKSB7XG5cdFx0XHRcdHRhYmxlQWN0aW9uLmVuYWJsZWQgPSBnZXRFbmFibGVkRm9yQW5ub3RhdGlvbkFjdGlvbihjb252ZXJ0ZXJDb250ZXh0LCBkYXRhRmllbGQuQWN0aW9uVGFyZ2V0LCB0cnVlKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiB0YWJsZUFjdGlvbjtcblx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbjpcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdHR5cGU6IEFjdGlvblR5cGUuRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uLFxuXHRcdFx0XHRhbm5vdGF0aW9uUGF0aDogY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXRCYXNlZEFubm90YXRpb25QYXRoKGRhdGFGaWVsZC5mdWxseVF1YWxpZmllZE5hbWUpLFxuXHRcdFx0XHRrZXk6IEtleUhlbHBlci5nZW5lcmF0ZUtleUZyb21EYXRhRmllbGQoZGF0YUZpZWxkKSxcblx0XHRcdFx0dmlzaWJsZTogY29tcGlsZUV4cHJlc3Npb24odmlzaWJsZUV4cHJlc3Npb24oZGF0YUZpZWxkLCBjb252ZXJ0ZXJDb250ZXh0KSksXG5cdFx0XHRcdHZpc2libGVGb3JDb250ZXh0TWVudTogY29tcGlsZUV4cHJlc3Npb24odmlzaWJsZUZvckNvbnRleHRNZW51RXhwcmVzc2lvbihkYXRhRmllbGQsIGNvbnZlcnRlckNvbnRleHQpKVxuXHRcdFx0fTtcblx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckFjdGlvbkdyb3VwOlxuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0dHlwZTogQWN0aW9uVHlwZS5NZW51LFxuXHRcdFx0XHRrZXk6IEtleUhlbHBlci5nZW5lcmF0ZUtleUZyb21EYXRhRmllbGQoZGF0YUZpZWxkKSxcblx0XHRcdFx0aWQ6IEtleUhlbHBlci5nZW5lcmF0ZUtleUZyb21EYXRhRmllbGQoZGF0YUZpZWxkKSxcblx0XHRcdFx0dGV4dDogZGF0YUZpZWxkLkxhYmVsPy50b1N0cmluZygpLFxuXHRcdFx0XHR2aXNpYmxlOiBjb21waWxlRXhwcmVzc2lvbih2aXNpYmxlRXhwcmVzc2lvbihkYXRhRmllbGQsIGNvbnZlcnRlckNvbnRleHQpKSxcblx0XHRcdFx0dmlzaWJsZUZvckNvbnRleHRNZW51OiBjb21waWxlRXhwcmVzc2lvbih2aXNpYmxlRm9yQ29udGV4dE1lbnVFeHByZXNzaW9uKGRhdGFGaWVsZCwgY29udmVydGVyQ29udGV4dCkpLFxuXHRcdFx0XHRtZW51OiBkYXRhRmllbGQuQWN0aW9ucy5tYXAoKGFjdGlvbikgPT4gZ2V0RGF0YUZpZWxkQW5ub3RhdGlvbkFjdGlvbihhY3Rpb24sIGNvbnZlcnRlckNvbnRleHQpKVxuXHRcdFx0fSBhcyBBbm5vdGF0aW9uQWN0aW9uR3JvdXA7XG5cdFx0ZGVmYXVsdDpcblx0XHRcdHJldHVybjtcblx0fVxufVxuXG4vKipcbiAqIEdlbmVyYXRlIHRoZSBiaW5kaW5nRXhwcmVzc2lvbiBmb3IgdGhlIGhpZ2hsaWdodCByb3dTZXR0aW5nIHBhcmFtZXRlci5cbiAqIEBwYXJhbSBjcml0aWNhbGl0eUFubm90YXRpb24gUGF0aCBvciB2YWx1ZSBvZiB0aGUgY3JpdGljYWxpdHlcbiAqIEBwYXJhbSBpc0RyYWZ0Um9vdE9yTm9kZSAgSXMgdGhlIGN1cnJlbnQgZW50aXR5U2V0IGFuIERyYWZ0IHJvb3Qgb3IgYSBub2RlXG4gKiBAcGFyYW0gdGFyZ2V0RW50aXR5VHlwZSBUaGUgdGFyZ2V0ZWQgZW50aXR5VHlwZVxuICogQHJldHVybnMgQW4gZXhwcmVzc2lvbkJpbmRpbmdcbiAqL1xuZnVuY3Rpb24gZ2V0SGlnaGxpZ2h0Um93QmluZGluZyhcblx0Y3JpdGljYWxpdHlBbm5vdGF0aW9uOiBDcml0aWNhbGl0eSB8IHVuZGVmaW5lZCxcblx0aXNEcmFmdFJvb3RPck5vZGU6IGJvb2xlYW4sXG5cdHRhcmdldEVudGl0eVR5cGU/OiBFbnRpdHlUeXBlXG4pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248TWVzc2FnZVR5cGU+IHtcblx0bGV0IGRlZmF1bHRIaWdobGlnaHRSb3dEZWZpbml0aW9uOiBNZXNzYWdlVHlwZSB8IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxNZXNzYWdlVHlwZT4gPSBNZXNzYWdlVHlwZS5Ob25lO1xuXHRpZiAoY3JpdGljYWxpdHlBbm5vdGF0aW9uKSB7XG5cdFx0aWYgKHR5cGVvZiBjcml0aWNhbGl0eUFubm90YXRpb24gPT09IFwib2JqZWN0XCIpIHtcblx0XHRcdGRlZmF1bHRIaWdobGlnaHRSb3dEZWZpbml0aW9uID0gZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKGNyaXRpY2FsaXR5QW5ub3RhdGlvbikgYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPE1lc3NhZ2VUeXBlPjtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gRW51bSBWYWx1ZSBzbyB3ZSBnZXQgdGhlIGNvcnJlc3BvbmRpbmcgc3RhdGljIHBhcnRcblx0XHRcdGRlZmF1bHRIaWdobGlnaHRSb3dEZWZpbml0aW9uID0gZ2V0TWVzc2FnZVR5cGVGcm9tQ3JpdGljYWxpdHlUeXBlKGNyaXRpY2FsaXR5QW5ub3RhdGlvbik7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBmb3JtYXRSZXN1bHQoXG5cdFx0W1xuXHRcdFx0ZGVmYXVsdEhpZ2hsaWdodFJvd0RlZmluaXRpb24sXG5cdFx0XHRwYXRoSW5Nb2RlbChgZmlsdGVyZWRNZXNzYWdlc2AsIFwiaW50ZXJuYWxcIiksXG5cdFx0XHRpc0RyYWZ0Um9vdE9yTm9kZSAmJiBFbnRpdHkuSGFzQWN0aXZlLFxuXHRcdFx0aXNEcmFmdFJvb3RPck5vZGUgJiYgRW50aXR5LklzQWN0aXZlLFxuXHRcdFx0YCR7aXNEcmFmdFJvb3RPck5vZGV9YCxcblx0XHRcdHBhdGhJbk1vZGVsKFwiQCR1aTUuZmUuY29udGV4dFBhdGhcIiksXG5cdFx0XHRVSS5Jc0luYWN0aXZlXG5cdFx0XSxcblx0XHR0YWJsZUZvcm1hdHRlcnMucm93SGlnaGxpZ2h0aW5nLFxuXHRcdHRhcmdldEVudGl0eVR5cGVcblx0KTtcbn1cblxuLyoqXG4gKiBHZXRzIHRoZSBleHRlcm5hbCBjcmVhdGlvbiBiZWhhdmlvciBpZiB0aGVyZSdzIG9uZS5cbiAqIEBwYXJhbSB0YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvblxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHRcbiAqIEBwYXJhbSBuYXZpZ2F0aW9uU2V0dGluZ3NcbiAqIEByZXR1cm5zIFRoZSBleHRlcm5hbCBjcmVhdGlvbiBiZWhhdmlvciwgb3IgdW5kZWZpbmVkIGlmIHRoZXJlJ3Mgbm9uZS5cbiAqL1xuZnVuY3Rpb24gZ2V0RXh0ZXJuYWxDcmVhdGlvbkJlaGF2aW9yKFxuXHR0YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbjogVGFibGVDb250cm9sQ29uZmlndXJhdGlvbixcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+LFxuXHRuYXZpZ2F0aW9uU2V0dGluZ3M6IE5hdmlnYXRpb25TZXR0aW5nc0NvbmZpZ3VyYXRpb25cbik6IENyZWF0ZUJlaGF2aW9yRXh0ZXJuYWwgfCB1bmRlZmluZWQge1xuXHQvLyBMZWdhY3kgc2V0dGluZ3M6IHRoZSBvdXRib3VuZCBpcyBzcGVjaWZpZWQgaW4gbmF2aWdhdGlvbi9jcmVhdGVcblx0Ly8gTmV3IHNldHRpbmdzOiB0aGUgb3V0Ym91bmQgaXMgc3BlY2lmaWVkIGluIHRhYmxlU2V0dGluZ3MvY3JlYXRpb25Nb2RlXG5cdGNvbnN0IGNyZWF0aW9uRGV0YWlscyA9IG5hdmlnYXRpb25TZXR0aW5ncz8uY3JlYXRlO1xuXHRjb25zdCBvdXRib3VuZEtleSA9IHRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uLm91dGJvdW5kQ3JlYXRpb24gPz8gY3JlYXRpb25EZXRhaWxzPy5vdXRib3VuZDtcblx0Y29uc3Qgb3V0Ym91bmREZXRhaWwgPSBvdXRib3VuZEtleSA/IGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RXcmFwcGVyKCkuZ2V0T3V0Ym91bmROYXZpZ2F0aW9uRW50cmllcygpPy5bb3V0Ym91bmRLZXldIDogdW5kZWZpbmVkO1xuXHRpZiAob3V0Ym91bmRLZXkgJiYgb3V0Ym91bmREZXRhaWwpIHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0bW9kZTogXCJFeHRlcm5hbFwiLFxuXHRcdFx0b3V0Ym91bmQ6IG91dGJvdW5kS2V5LFxuXHRcdFx0b3V0Ym91bmREZXRhaWxcblx0XHR9O1xuXHR9IGVsc2Uge1xuXHRcdGlmICh0YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbi5jcmVhdGlvbk1vZGUgPT09IENyZWF0aW9uTW9kZS5FeHRlcm5hbCkge1xuXHRcdFx0Ly8gT3V0Ym91bmQgY29uZmlndXJhdGlvbiBpbmNvcnJlY3QgLS0+IGZhbGxiYWNrIHRvIE5ld1BhZ2Vcblx0XHRcdExvZy53YXJuaW5nKGBDYW5ub3QgZmluZCBvdXRib3VuZCBwYXJhbWV0ZXJzIGZvciBcIkV4dGVybmFsXCIgY3JlYXRpb24gbW9kZS4gSW5zdGVhZCwgdGhlIGRlZmF1bHQgbW9kZSBcIk5ld1BhZ2VcIiBpcyB1c2VkLmApO1xuXHRcdFx0dGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24uY3JlYXRpb25Nb2RlID0gQ3JlYXRpb25Nb2RlLk5ld1BhZ2U7XG5cdFx0XHRkZWxldGUgdGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24ub3V0Ym91bmRDcmVhdGlvbjtcblx0XHR9XG5cblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG59XG5cbmZ1bmN0aW9uIF9nZXRDcmVhdGlvbkJlaGF2aW91cihcblx0bGluZUl0ZW1Bbm5vdGF0aW9uOiBMaW5lSXRlbSB8IHVuZGVmaW5lZCxcblx0dGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb246IFRhYmxlQ29udHJvbENvbmZpZ3VyYXRpb24sXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pixcblx0bmF2aWdhdGlvblNldHRpbmdzOiBOYXZpZ2F0aW9uU2V0dGluZ3NDb25maWd1cmF0aW9uLFxuXHR2aXN1YWxpemF0aW9uUGF0aDogc3RyaW5nXG4pOiBDcmVhdGVCZWhhdmlvciB8IENyZWF0ZUJlaGF2aW9yRXh0ZXJuYWwge1xuXHRjb25zdCBleHRlcm5hbEJlaGF2aW9yID0gZ2V0RXh0ZXJuYWxDcmVhdGlvbkJlaGF2aW9yKHRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uLCBjb252ZXJ0ZXJDb250ZXh0LCBuYXZpZ2F0aW9uU2V0dGluZ3MpO1xuXHRpZiAoZXh0ZXJuYWxCZWhhdmlvcikge1xuXHRcdHRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uLmNyZWF0aW9uTW9kZSA9IENyZWF0aW9uTW9kZS5FeHRlcm5hbDtcblx0XHR0YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbi5vdXRib3VuZENyZWF0aW9uID0gZXh0ZXJuYWxCZWhhdmlvci5vdXRib3VuZDtcblx0XHRyZXR1cm4gZXh0ZXJuYWxCZWhhdmlvcjtcblx0fVxuXG5cdGNvbnN0IHRhYmxlTWFuaWZlc3RTZXR0aW5nczogVGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24gPSBjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0Q29udHJvbENvbmZpZ3VyYXRpb24odmlzdWFsaXphdGlvblBhdGgpO1xuXHRjb25zdCBvcmlnaW5hbFRhYmxlU2V0dGluZ3MgPSB0YWJsZU1hbmlmZXN0U2V0dGluZ3M/LnRhYmxlU2V0dGluZ3MgPz8ge307XG5cdGNvbnN0IG5hdmlnYXRpb25EZXRhaWxzID0gbmF2aWdhdGlvblNldHRpbmdzPy5kZXRhaWw7XG5cdGlmIChcblx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldFRlbXBsYXRlVHlwZSgpID09PSBUZW1wbGF0ZVR5cGUuTGlzdFJlcG9ydCAmJlxuXHRcdCFbQ3JlYXRpb25Nb2RlLk5ld1BhZ2UsIENyZWF0aW9uTW9kZS5FeHRlcm5hbCwgQ3JlYXRpb25Nb2RlLkNyZWF0aW9uRGlhbG9nXS5pbmNsdWRlcyh0YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbi5jcmVhdGlvbk1vZGUpXG5cdCkge1xuXHRcdC8vIEZhbGxiYWNrIHRvIFwiTmV3UGFnZVwiXG5cdFx0TG9nLndhcm5pbmcoXG5cdFx0XHRgQ3JlYXRpb24gbW9kZSAnJHt0YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbi5jcmVhdGlvbk1vZGV9JyBjYW4gbm90IGJlIHVzZWQgd2l0aGluIHRoZSBMaXN0IFJlcG9ydC4gSW5zdGVhZCwgdGhlIGRlZmF1bHQgbW9kZSBcIk5ld1BhZ2VcIiBpcyB1c2VkLmBcblx0XHQpO1xuXHRcdHRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uLmNyZWF0aW9uTW9kZSA9IENyZWF0aW9uTW9kZS5OZXdQYWdlO1xuXHR9IGVsc2UgaWYgKFxuXHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0VGVtcGxhdGVUeXBlKCkgIT09IFRlbXBsYXRlVHlwZS5MaXN0UmVwb3J0ICYmXG5cdFx0dGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24udHlwZSA9PT0gXCJUcmVlVGFibGVcIiAmJlxuXHRcdCFbQ3JlYXRpb25Nb2RlLk5ld1BhZ2UsIENyZWF0aW9uTW9kZS5JbmxpbmUsIENyZWF0aW9uTW9kZS5DcmVhdGlvbkRpYWxvZ10uaW5jbHVkZXModGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24uY3JlYXRpb25Nb2RlKVxuXHQpIHtcblx0XHQvLyBGYWxsYmFjayB0byBcIk5ld1BhZ2VcIiBpbiBjYXNlIG9mIGEgbm9uLXN1cHBvcnRlZCBtb2RlIGZvciBhIFRyZWVUYWJsZVxuXHRcdExvZy53YXJuaW5nKFxuXHRcdFx0YENyZWF0aW9uIG1vZGUgJyR7dGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24uY3JlYXRpb25Nb2RlfScgY2FuIG5vdCBiZSB1c2VkIHdpdGggYSBUcmVlIFRhYmxlLiBJbnN0ZWFkLCB0aGUgZGVmYXVsdCBtb2RlIFwiTmV3UGFnZVwiIGlzIHVzZWQuYFxuXHRcdCk7XG5cdFx0dGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24uY3JlYXRpb25Nb2RlID0gQ3JlYXRpb25Nb2RlLk5ld1BhZ2U7XG5cdH1cblxuXHRsZXQgbmV3QWN0aW9uO1xuXHRpZiAobGluZUl0ZW1Bbm5vdGF0aW9uKSB7XG5cdFx0Ly8gaW4tYXBwXG5cdFx0Y29uc3QgdGFyZ2V0QW5ub3RhdGlvbnMgPSBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVNldCgpPy5hbm5vdGF0aW9ucztcblx0XHRjb25zdCB0YXJnZXRBbm5vdGF0aW9uc0NvbW1vbiA9IHRhcmdldEFubm90YXRpb25zPy5Db21tb24gYXMgRW50aXR5U2V0QW5ub3RhdGlvbnNfQ29tbW9uLFxuXHRcdFx0dGFyZ2V0QW5ub3RhdGlvbnNTZXNzaW9uID0gdGFyZ2V0QW5ub3RhdGlvbnM/LlNlc3Npb24gYXMgRW50aXR5U2V0QW5ub3RhdGlvbnNfU2Vzc2lvbjtcblx0XHRuZXdBY3Rpb24gPSB0YXJnZXRBbm5vdGF0aW9uc0NvbW1vbj8uRHJhZnRSb290Py5OZXdBY3Rpb24gfHwgdGFyZ2V0QW5ub3RhdGlvbnNTZXNzaW9uPy5TdGlja3lTZXNzaW9uU3VwcG9ydGVkPy5OZXdBY3Rpb247XG5cdFx0aWYgKHRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uLmNyZWF0aW9uTW9kZSA9PT0gQ3JlYXRpb25Nb2RlLkNyZWF0aW9uUm93ICYmIG5ld0FjdGlvbikge1xuXHRcdFx0Ly8gQSBjb21iaW5hdGlvbiBvZiAnQ3JlYXRpb25Sb3cnIGFuZCAnTmV3QWN0aW9uJyBkb2VzIG5vdCBtYWtlIHNlbnNlXG5cdFx0XHR0aHJvdyBFcnJvcihgQ3JlYXRpb24gbW9kZSAnJHtDcmVhdGlvbk1vZGUuQ3JlYXRpb25Sb3d9JyBjYW4gbm90IGJlIHVzZWQgd2l0aCBhIGN1c3RvbSAnbmV3JyBhY3Rpb24gKCR7bmV3QWN0aW9ufSlgKTtcblx0XHR9XG5cdFx0aWYgKG5hdmlnYXRpb25EZXRhaWxzPy5yb3V0ZSkge1xuXHRcdFx0Ly8gcm91dGUgc3BlY2lmaWVkXG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRtb2RlOiB0YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbi5jcmVhdGlvbk1vZGUsXG5cdFx0XHRcdGFwcGVuZDogdGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24uY3JlYXRlQXRFbmQsXG5cdFx0XHRcdG5ld0FjdGlvbjogbmV3QWN0aW9uPy50b1N0cmluZygpLFxuXHRcdFx0XHRuYXZpZ2F0ZVRvVGFyZ2V0OiB0YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbi5jcmVhdGlvbk1vZGUgPT09IENyZWF0aW9uTW9kZS5OZXdQYWdlID8gbmF2aWdhdGlvbkRldGFpbHMucm91dGUgOiB1bmRlZmluZWQgLy8gbmF2aWdhdGUgb25seSBpbiBOZXdQYWdlIG1vZGVcblx0XHRcdH07XG5cdFx0fVxuXHR9XG5cdC8vIG5vIG5hdmlnYXRpb24gb3Igbm8gcm91dGUgc3BlY2lmaWVkIC0gZmFsbGJhY2sgdG8gaW5saW5lIGNyZWF0ZSBpZiBvcmlnaW5hbCBjcmVhdGlvbiBtb2RlIHdhcyAnTmV3UGFnZSdcblx0aWYgKHRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uLmNyZWF0aW9uTW9kZSA9PT0gQ3JlYXRpb25Nb2RlLk5ld1BhZ2UpIHtcblx0XHRpZiAoY29udmVydGVyQ29udGV4dC5nZXRUZW1wbGF0ZVR5cGUoKSA9PT0gVGVtcGxhdGVUeXBlLkxpc3RSZXBvcnQpIHtcblx0XHRcdExvZy5lcnJvcihcIlRoZSBjcmVhdGlvbiBtb2RlICdOZXdQYWdlJyBpcyB1c2VkIGJ1dCB0aGUgbmF2aWdhdGlvbiBjb25maWd1cmF0aW9uIHRvIHRoZSBzdWIgcGFnZSBpcyBtaXNzaW5nLlwiKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24uY3JlYXRpb25Nb2RlID0gQ3JlYXRpb25Nb2RlLklubGluZTtcblx0XHRcdC8vIEluIGNhc2UgdGhlcmUgd2FzIG5vIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBjcmVhdGVBdEVuZCB3ZSBmb3JjZSBpdCB0byBmYWxzZVxuXHRcdFx0aWYgKG9yaWdpbmFsVGFibGVTZXR0aW5ncy5jcmVhdGlvbk1vZGU/LmNyZWF0ZUF0RW5kID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0dGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24uY3JlYXRlQXRFbmQgPSBmYWxzZTtcblx0XHRcdH1cblx0XHRcdExvZy5pbmZvKFwiVGhlIGNyZWF0aW9uIG1vZGUgd2FzIGNoYW5nZWQgZnJvbSAnTmV3UGFnZScgdG8gJ0lubGluZScgZHVlIHRvIG1pc3NpbmcgbmF2aWdhdGlvbiBjb25maWd1cmF0aW9uIHRvIHRoZSBzdWIgcGFnZS5cIik7XG5cdFx0fVxuXHR9XG5cdHJldHVybiB7XG5cdFx0bW9kZTogdGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24uY3JlYXRpb25Nb2RlLFxuXHRcdGFwcGVuZDogdGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24uY3JlYXRlQXRFbmQsXG5cdFx0bmV3QWN0aW9uOiBuZXdBY3Rpb24/LnRvU3RyaW5nKClcblx0fTtcbn1cbmNvbnN0IF9nZXRSb3dDb25maWd1cmF0aW9uUHJvcGVydHkgPSBmdW5jdGlvbiAoXG5cdGxpbmVJdGVtQW5ub3RhdGlvbjogTGluZUl0ZW0gfCB1bmRlZmluZWQsXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pixcblx0bmF2aWdhdGlvblNldHRpbmdzOiBOYXZpZ2F0aW9uU2V0dGluZ3NDb25maWd1cmF0aW9uLFxuXHR0YXJnZXRQYXRoOiBzdHJpbmcsXG5cdHRhYmxlVHlwZTogVGFibGVUeXBlLFxuXHRhZ2dyZWdhdGlvbk9uTGVhZkxldmVsZW5hYmxlZD86IGJvb2xlYW5cbik6IFJvd0NvbmZpZ3VyYXRpb24ge1xuXHRsZXQgbmF2aWdhdGlvbkluZm86IFJvd05hdmlnYXRpb25JbmZvIHwgdW5kZWZpbmVkO1xuXHRsZXQgY3JpdGljYWxpdHlQcm9wZXJ0eTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPE1lc3NhZ2VUeXBlPiA9IGNvbnN0YW50KE1lc3NhZ2VUeXBlLk5vbmUpO1xuXHRjb25zdCB0YXJnZXRFbnRpdHlUeXBlID0gY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlKCk7XG5cdGNvbnN0IGNyaXRpY2FsaXR5QW5ub3RhdGlvbiA9IGxpbmVJdGVtQW5ub3RhdGlvbj8uYW5ub3RhdGlvbnM/LlVJPy5Dcml0aWNhbGl0eTtcblx0aWYgKG5hdmlnYXRpb25TZXR0aW5ncyAmJiBsaW5lSXRlbUFubm90YXRpb24pIHtcblx0XHRjb25zdCBuYXZpZ2F0aW9uVGFyZ2V0ID0gbmF2aWdhdGlvblNldHRpbmdzLmRpc3BsYXk/LnRhcmdldCB8fCBuYXZpZ2F0aW9uU2V0dGluZ3MuZGV0YWlsPy5vdXRib3VuZDtcblx0XHRjb25zdCB0YXJnZXRFbnRpdHlTZXQgPSBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVNldCgpO1xuXHRcdGNyaXRpY2FsaXR5UHJvcGVydHkgPSBnZXRIaWdobGlnaHRSb3dCaW5kaW5nKFxuXHRcdFx0Y3JpdGljYWxpdHlBbm5vdGF0aW9uLFxuXHRcdFx0ISFNb2RlbEhlbHBlci5nZXREcmFmdFJvb3QodGFyZ2V0RW50aXR5U2V0KSB8fCAhIU1vZGVsSGVscGVyLmdldERyYWZ0Tm9kZSh0YXJnZXRFbnRpdHlTZXQpLFxuXHRcdFx0dGFyZ2V0RW50aXR5VHlwZVxuXHRcdCk7XG5cdFx0aWYgKG5hdmlnYXRpb25UYXJnZXQpIHtcblx0XHRcdG5hdmlnYXRpb25JbmZvID0geyB0eXBlOiBcIk91dGJvdW5kXCIsIG5hdmlnYXRpb25UYXJnZXQgfTtcblx0XHR9XG5cdFx0aWYgKCFuYXZpZ2F0aW9uVGFyZ2V0ICYmIG5hdmlnYXRpb25TZXR0aW5ncy5kZXRhaWw/LnJvdXRlKSB7XG5cdFx0XHRjb25zdCBjaGVja0VkaXRhYmxlID1cblx0XHRcdFx0TW9kZWxIZWxwZXIuZ2V0RHJhZnRSb290KHRhcmdldEVudGl0eVNldCkgIT09IHVuZGVmaW5lZCB8fCBNb2RlbEhlbHBlci5nZXREcmFmdE5vZGUodGFyZ2V0RW50aXR5U2V0KSAhPT0gdW5kZWZpbmVkO1xuXHRcdFx0bmF2aWdhdGlvbkluZm8gPSB7XG5cdFx0XHRcdHR5cGU6IFwiTmF2aWdhdGlvblwiLFxuXHRcdFx0XHRyb3V0ZVBhdGg6IG5hdmlnYXRpb25TZXR0aW5ncy5kZXRhaWwucm91dGUsXG5cdFx0XHRcdHRhcmdldFBhdGgsXG5cdFx0XHRcdGNoZWNrRWRpdGFibGUsXG5cdFx0XHRcdHJlY3JlYXRlQ29udGV4dDogdGFibGVUeXBlID09PSBcIkFuYWx5dGljYWxUYWJsZVwiXG5cdFx0XHR9O1xuXHRcdH1cblx0fVxuXHRjb25zdCByb3dOYXZpZ2F0ZWRFeHByZXNzaW9uOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4gPSBmb3JtYXRSZXN1bHQoXG5cdFx0W3BhdGhJbk1vZGVsKFwiL2RlZXBlc3RQYXRoXCIsIFwiaW50ZXJuYWxcIildLFxuXHRcdHRhYmxlRm9ybWF0dGVycy5uYXZpZ2F0ZWRSb3csXG5cdFx0dGFyZ2V0RW50aXR5VHlwZVxuXHQpO1xuXHRyZXR1cm4ge1xuXHRcdG5hdmlnYXRpb25JbmZvLFxuXHRcdGFjdGlvblR5cGU6IG5hdmlnYXRpb25JbmZvID8gXCJOYXZpZ2F0aW9uXCIgOiB1bmRlZmluZWQsXG5cdFx0cm93SGlnaGxpZ2h0aW5nOiBjb21waWxlRXhwcmVzc2lvbihjcml0aWNhbGl0eVByb3BlcnR5KSxcblx0XHRyb3dOYXZpZ2F0ZWQ6IGNvbXBpbGVFeHByZXNzaW9uKHJvd05hdmlnYXRlZEV4cHJlc3Npb24pLFxuXHRcdHJvd0NyaXRpY2FsaXR5Rm9ySW5zaWdodHM6IGNyaXRpY2FsaXR5QW5ub3RhdGlvbiA/IGNyaXRpY2FsaXR5RXhwcmVzc2lvbkZvckludGVncmF0aW9uQ2FyZHMoY3JpdGljYWxpdHlBbm5vdGF0aW9uKSA6IHVuZGVmaW5lZCxcblx0XHR2aXNpYmxlOiBjb21waWxlRXhwcmVzc2lvbihhbmQobm90KFVJLklzSW5hY3RpdmUpLCBhZ2dyZWdhdGlvbk9uTGVhZkxldmVsZW5hYmxlZCA/IFVJLmlzTm9kZUxldmVsTmF2aWdhYmxlIDogdHJ1ZSkpXG5cdH07XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBQcm9wZXJ0eUluZm8gZm9yIHRoZSBpZGVudGlmaWVkIGFkZGl0aW9uYWwgcHJvcGVydHkgZm9yIHRoZSBBTFAgdGFibGUgdXNlLWNhc2UuXG4gKlxuICogRm9yIGUuZy4gSWYgVUkuSGlkZGVuIHBvaW50cyB0byBhIHByb3BlcnR5LCBpbmNsdWRlIHRoaXMgdGVjaG5pY2FsIHByb3BlcnR5IGluIHRoZSBhZGRpdGlvbmFsUHJvcGVydGllcyBvZiBDb21wbGV4UHJvcGVydHlJbmZvIG9iamVjdC5cbiAqIEBwYXJhbSBuYW1lIFRoZSBuYW1lIG9mIHRoZSBwcm9wZXJ0eSB0byBiZSBjcmVhdGVkLlxuICogQHBhcmFtIGNvbHVtbnMgVGhlIGxpc3Qgb2YgY29sdW1ucyBjcmVhdGVkIGZvciBMaW5lSXRlbXMgYW5kIFByb3BlcnRpZXMgb2YgZW50aXR5VHlwZSBmcm9tIHRoZSB0YWJsZSB2aXN1YWxpemF0aW9uLlxuICogQHBhcmFtIHJlbGF0ZWRBZGRpdGlvbmFsUHJvcGVydHlOYW1lTWFwXG4gKi9cbmNvbnN0IGNyZWF0ZVRlY2huaWNhbFByb3BlcnR5ID0gZnVuY3Rpb24gKFxuXHRuYW1lOiBzdHJpbmcsXG5cdGNvbHVtbnM6IFRhYmxlQ29sdW1uW10sXG5cdHJlbGF0ZWRBZGRpdGlvbmFsUHJvcGVydHlOYW1lTWFwOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+XG4pOiB2b2lkIHtcblx0Y29uc3Qga2V5ID0gYFByb3BlcnR5X1RlY2huaWNhbDo6JHtuYW1lfWA7XG5cdC8vIFZhbGlkYXRlIGlmIHRoZSB0ZWNobmljYWwgcHJvcGVydHkgaGFzbid0IHlldCBiZWVuIGNyZWF0ZWQgb24gcHJldmlvdXMgaXRlcmF0aW9ucy5cblx0Y29uc3QgY29sdW1uRXhpc3RzID0gY29sdW1ucy5maW5kKChjb2x1bW4pID0+IGNvbHVtbi5rZXkgPT09IGtleSk7XG5cdC8vIFJldHJpZXZlIHRoZSBzaW1wbGUgcHJvcGVydHkgdXNlZCBieSB0aGUgaGlkZGVuIGFubm90YXRpb24sIGl0IHdpbGwgYmUgdXNlZCBhcyBhIGJhc2UgZm9yIHRoZSBtYW5kYXRvcnkgYXR0cmlidXRlcyBvZiBuZXdseSBjcmVhdGVkIHRlY2huaWNhbCBwcm9wZXJ0eS4gRm9yIGUuZy4gcmVsYXRpdmVQYXRoXG5cdGNvbnN0IGFkZGl0aW9uYWxQcm9wZXJ0eSA9XG5cdFx0IWNvbHVtbkV4aXN0cyAmJiAoY29sdW1ucy5maW5kKChjb2x1bW4pID0+IGNvbHVtbi5uYW1lID09PSBuYW1lICYmICFjb2x1bW4ucHJvcGVydHlJbmZvcykgYXMgQW5ub3RhdGlvblRhYmxlQ29sdW1uKSE7XG5cdGlmIChhZGRpdGlvbmFsUHJvcGVydHkpIHtcblx0XHRjb25zdCB0ZWNobmljYWxDb2x1bW46IEFubm90YXRpb25UYWJsZUNvbHVtbiA9IHtcblx0XHRcdGtleToga2V5LFxuXHRcdFx0dHlwZTogQ29sdW1uVHlwZS5Bbm5vdGF0aW9uLFxuXHRcdFx0bGFiZWw6IGFkZGl0aW9uYWxQcm9wZXJ0eS5sYWJlbCxcblx0XHRcdGFubm90YXRpb25QYXRoOiBhZGRpdGlvbmFsUHJvcGVydHkuYW5ub3RhdGlvblBhdGgsXG5cdFx0XHRhdmFpbGFiaWxpdHk6IFwiSGlkZGVuXCIsXG5cdFx0XHRuYW1lOiBrZXksXG5cdFx0XHRyZWxhdGl2ZVBhdGg6IGFkZGl0aW9uYWxQcm9wZXJ0eS5yZWxhdGl2ZVBhdGgsXG5cdFx0XHRzb3J0YWJsZTogZmFsc2UsXG5cdFx0XHRpc0dyb3VwYWJsZTogZmFsc2UsXG5cdFx0XHRpc0tleTogZmFsc2UsXG5cdFx0XHRleHBvcnRTZXR0aW5nczogbnVsbCxcblx0XHRcdGNhc2VTZW5zaXRpdmU6IGZhbHNlLFxuXHRcdFx0YWdncmVnYXRhYmxlOiBmYWxzZSxcblx0XHRcdGZpbHRlcmFibGU6IGZhbHNlLFxuXHRcdFx0ZXh0ZW5zaW9uOiB7XG5cdFx0XHRcdHRlY2huaWNhbGx5R3JvdXBhYmxlOiB0cnVlLFxuXHRcdFx0XHR0ZWNobmljYWxseUFnZ3JlZ2F0YWJsZTogdHJ1ZVxuXHRcdFx0fVxuXHRcdH07XG5cdFx0Y29sdW1ucy5wdXNoKHRlY2huaWNhbENvbHVtbik7XG5cdFx0cmVsYXRlZEFkZGl0aW9uYWxQcm9wZXJ0eU5hbWVNYXBbbmFtZV0gPSB0ZWNobmljYWxDb2x1bW4ubmFtZTtcblx0fVxufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGdldFAxM25Nb2RlKFxuXHR2aXN1YWxpemF0aW9uUGF0aDogc3RyaW5nLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sXG5cdHRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uOiBUYWJsZUNvbnRyb2xDb25maWd1cmF0aW9uXG4pOiBUYWJsZVAxM25Nb2RlW10gfCB1bmRlZmluZWQge1xuXHRjb25zdCBtYW5pZmVzdFdyYXBwZXI6IE1hbmlmZXN0V3JhcHBlciA9IGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RXcmFwcGVyKCk7XG5cdGNvbnN0IHRhYmxlTWFuaWZlc3RTZXR0aW5nczogVGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24gPSBjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0Q29udHJvbENvbmZpZ3VyYXRpb24odmlzdWFsaXphdGlvblBhdGgpO1xuXHRjb25zdCB2YXJpYW50TWFuYWdlbWVudDogVmFyaWFudE1hbmFnZW1lbnRUeXBlID0gbWFuaWZlc3RXcmFwcGVyLmdldFZhcmlhbnRNYW5hZ2VtZW50KCk7XG5cdGNvbnN0IG1vZGVzOiBUYWJsZVAxM25Nb2RlW10gPSBbXTtcblx0Y29uc3QgaXNBbmFseXRpY2FsVGFibGUgPSB0YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbi50eXBlID09PSBcIkFuYWx5dGljYWxUYWJsZVwiO1xuXHRjb25zdCBpc1Jlc3BvbnNpdmVUYWJsZSA9IHRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uLnR5cGUgPT09IFwiUmVzcG9uc2l2ZVRhYmxlXCI7XG5cdGlmICh0YWJsZU1hbmlmZXN0U2V0dGluZ3M/LnRhYmxlU2V0dGluZ3M/LnBlcnNvbmFsaXphdGlvbiAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0Ly8gUGVyc29uYWxpemF0aW9uIGNvbmZpZ3VyZWQgaW4gbWFuaWZlc3QuXG5cdFx0Y29uc3QgcGVyc29uYWxpemF0aW9uID0gdGFibGVNYW5pZmVzdFNldHRpbmdzLnRhYmxlU2V0dGluZ3MucGVyc29uYWxpemF0aW9uO1xuXHRcdGlmIChwZXJzb25hbGl6YXRpb24gPT09IHRydWUpIHtcblx0XHRcdC8vIFRhYmxlIHBlcnNvbmFsaXphdGlvbiBmdWxseSBlbmFibGVkLlxuXHRcdFx0c3dpdGNoICh0YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbi50eXBlKSB7XG5cdFx0XHRcdGNhc2UgXCJBbmFseXRpY2FsVGFibGVcIjpcblx0XHRcdFx0XHRyZXR1cm4gW1wiU29ydFwiLCBcIkNvbHVtblwiLCBcIkZpbHRlclwiLCBcIkdyb3VwXCIsIFwiQWdncmVnYXRlXCJdO1xuXHRcdFx0XHRjYXNlIFwiUmVzcG9uc2l2ZVRhYmxlXCI6XG5cdFx0XHRcdFx0cmV0dXJuIFtcIlNvcnRcIiwgXCJDb2x1bW5cIiwgXCJGaWx0ZXJcIiwgXCJHcm91cFwiXTtcblx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRyZXR1cm4gW1wiU29ydFwiLCBcIkNvbHVtblwiLCBcIkZpbHRlclwiXTtcblx0XHRcdH1cblx0XHR9IGVsc2UgaWYgKHR5cGVvZiBwZXJzb25hbGl6YXRpb24gPT09IFwib2JqZWN0XCIpIHtcblx0XHRcdC8vIFNwZWNpZmljIHBlcnNvbmFsaXphdGlvbiBvcHRpb25zIGVuYWJsZWQgaW4gbWFuaWZlc3QuIFVzZSB0aGVtIGFzIGlzLlxuXHRcdFx0aWYgKHBlcnNvbmFsaXphdGlvbi5zb3J0KSB7XG5cdFx0XHRcdG1vZGVzLnB1c2goXCJTb3J0XCIpO1xuXHRcdFx0fVxuXHRcdFx0aWYgKHBlcnNvbmFsaXphdGlvbi5jb2x1bW4pIHtcblx0XHRcdFx0bW9kZXMucHVzaChcIkNvbHVtblwiKTtcblx0XHRcdH1cblx0XHRcdGlmIChwZXJzb25hbGl6YXRpb24uZmlsdGVyKSB7XG5cdFx0XHRcdG1vZGVzLnB1c2goXCJGaWx0ZXJcIik7XG5cdFx0XHR9XG5cdFx0XHRpZiAocGVyc29uYWxpemF0aW9uLmdyb3VwICYmIChpc0FuYWx5dGljYWxUYWJsZSB8fCBpc1Jlc3BvbnNpdmVUYWJsZSkpIHtcblx0XHRcdFx0bW9kZXMucHVzaChcIkdyb3VwXCIpO1xuXHRcdFx0fVxuXHRcdFx0aWYgKHBlcnNvbmFsaXphdGlvbi5hZ2dyZWdhdGUgJiYgaXNBbmFseXRpY2FsVGFibGUpIHtcblx0XHRcdFx0bW9kZXMucHVzaChcIkFnZ3JlZ2F0ZVwiKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBtb2Rlcy5sZW5ndGggPiAwID8gbW9kZXMgOiB1bmRlZmluZWQ7XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdC8vIE5vIHBlcnNvbmFsaXphdGlvbiBjb25maWd1cmVkIGluIG1hbmlmZXN0LlxuXHRcdG1vZGVzLnB1c2goXCJTb3J0XCIpO1xuXHRcdG1vZGVzLnB1c2goXCJDb2x1bW5cIik7XG5cdFx0aWYgKGNvbnZlcnRlckNvbnRleHQuZ2V0VGVtcGxhdGVUeXBlKCkgPT09IFRlbXBsYXRlVHlwZS5MaXN0UmVwb3J0KSB7XG5cdFx0XHRpZiAodmFyaWFudE1hbmFnZW1lbnQgPT09IFZhcmlhbnRNYW5hZ2VtZW50VHlwZS5Db250cm9sIHx8IF9pc0ZpbHRlckJhckhpZGRlbihtYW5pZmVzdFdyYXBwZXIsIGNvbnZlcnRlckNvbnRleHQpKSB7XG5cdFx0XHRcdC8vIEZlYXR1cmUgcGFyaXR5IHdpdGggVjIuXG5cdFx0XHRcdC8vIEVuYWJsZSB0YWJsZSBmaWx0ZXJpbmcgYnkgZGVmYXVsdCBvbmx5IGluIGNhc2Ugb2YgQ29udHJvbCBsZXZlbCB2YXJpYW50IG1hbmFnZW1lbnQuXG5cdFx0XHRcdC8vIE9yIHdoZW4gdGhlIExSIGZpbHRlciBiYXIgaXMgaGlkZGVuIHZpYSBtYW5pZmVzdCBzZXR0aW5nXG5cdFx0XHRcdG1vZGVzLnB1c2goXCJGaWx0ZXJcIik7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdG1vZGVzLnB1c2goXCJGaWx0ZXJcIik7XG5cdFx0fVxuXHRcdGlmIChpc0FuYWx5dGljYWxUYWJsZSkge1xuXHRcdFx0bW9kZXMucHVzaChcIkdyb3VwXCIpO1xuXHRcdFx0bW9kZXMucHVzaChcIkFnZ3JlZ2F0ZVwiKTtcblx0XHR9XG5cdFx0aWYgKGlzUmVzcG9uc2l2ZVRhYmxlKSB7XG5cdFx0XHRtb2Rlcy5wdXNoKFwiR3JvdXBcIik7XG5cdFx0fVxuXHRcdHJldHVybiBtb2Rlcztcblx0fVxufVxuLyoqXG4gKiBSZXR1cm5zIGEgQm9vbGVhbiB2YWx1ZSBzdWdnZXN0aW5nIGlmIGEgZmlsdGVyIGJhciBpcyBiZWluZyB1c2VkIG9uIHRoZSBwYWdlLlxuICpcbiAqIENoYXJ0IGhhcyBhIGRlcGVuZGVuY3kgdG8gZmlsdGVyIGJhciAoaXNzdWUgd2l0aCBsb2FkaW5nIGRhdGEpLiBPbmNlIHJlc29sdmVkLCB0aGUgY2hlY2sgZm9yIGNoYXJ0IHNob3VsZCBiZSByZW1vdmVkIGhlcmUuXG4gKiBVbnRpbCB0aGVuLCBoaWRpbmcgZmlsdGVyIGJhciBpcyBub3cgYWxsb3dlZCBpZiBhIGNoYXJ0IGlzIGJlaW5nIHVzZWQgb24gTFIuXG4gKiBAcGFyYW0gbWFuaWZlc3RXcmFwcGVyIE1hbmlmZXN0IHNldHRpbmdzIGdldHRlciBmb3IgdGhlIHBhZ2VcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBpbnN0YW5jZSBvZiB0aGUgY29udmVydGVyIGNvbnRleHRcbiAqIEByZXR1cm5zIEJvb2xlYW4gc3VnZ2VzdGluZyBpZiBhIGZpbHRlciBiYXIgaXMgYmVpbmcgdXNlZCBvbiB0aGUgcGFnZS5cbiAqL1xuZnVuY3Rpb24gX2lzRmlsdGVyQmFySGlkZGVuKG1hbmlmZXN0V3JhcHBlcjogTWFuaWZlc3RXcmFwcGVyLCBjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4pOiBib29sZWFuIHtcblx0cmV0dXJuIChcblx0XHRtYW5pZmVzdFdyYXBwZXIuaXNGaWx0ZXJCYXJIaWRkZW4oKSAmJlxuXHRcdCFjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0V3JhcHBlcigpLmhhc011bHRpcGxlVmlzdWFsaXphdGlvbnMoKSAmJlxuXHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0VGVtcGxhdGVUeXBlKCkgIT09IFRlbXBsYXRlVHlwZS5BbmFseXRpY2FsTGlzdFBhZ2Vcblx0KTtcbn1cbi8qKlxuICogUmV0dXJucyBhIEpTT04gc3RyaW5nIGNvbnRhaW5pbmcgdGhlIHNvcnQgY29uZGl0aW9ucyBmb3IgdGhlIHByZXNlbnRhdGlvbiB2YXJpYW50LlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGluc3RhbmNlIG9mIHRoZSBjb252ZXJ0ZXIgY29udGV4dFxuICogQHBhcmFtIHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uIFByZXNlbnRhdGlvbiB2YXJpYW50IGFubm90YXRpb25cbiAqIEBwYXJhbSBjb2x1bW5zIFRhYmxlIGNvbHVtbnMgcHJvY2Vzc2VkIGJ5IHRoZSBjb252ZXJ0ZXJcbiAqIEByZXR1cm5zIFNvcnQgY29uZGl0aW9ucyBmb3IgYSBwcmVzZW50YXRpb24gdmFyaWFudC5cbiAqL1xuZnVuY3Rpb24gZ2V0U29ydENvbmRpdGlvbnMoXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pixcblx0cHJlc2VudGF0aW9uVmFyaWFudEFubm90YXRpb246IFByZXNlbnRhdGlvblZhcmlhbnRUeXBlIHwgdW5kZWZpbmVkLFxuXHRjb2x1bW5zOiBUYWJsZUNvbHVtbltdXG4pOiBUYWJsZVNvcnRDb25kaXRpb25zIHwgdW5kZWZpbmVkIHtcblx0Ly8gQ3VycmVudGx5IG5hdmlnYXRpb24gcHJvcGVydHkgaXMgbm90IHN1cHBvcnRlZCBhcyBzb3J0ZXJcblx0Y29uc3Qgbm9uU29ydGFibGVQcm9wZXJ0aWVzID0gZ2V0UmVzdHJpY3Rpb25zT25Qcm9wZXJ0aWVzKGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0KCkpLm5vblNvcnRhYmxlUHJvcGVydGllcztcblx0Y29uc3Qgc29ydENvbmRpdGlvbnM6IFRhYmxlU29ydENvbmRpdGlvbnMgPSB7XG5cdFx0c29ydGVyczogW11cblx0fTtcblx0aWYgKHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uPy5Tb3J0T3JkZXIpIHtcblx0XHRwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbi5Tb3J0T3JkZXIuZm9yRWFjaCgoY29uZGl0aW9uKSA9PiB7XG5cdFx0XHRjb25zdCBjb25kaXRpb25Qcm9wZXJ0eSA9IGNvbmRpdGlvbi5Qcm9wZXJ0eTtcblx0XHRcdGlmIChjb25kaXRpb25Qcm9wZXJ0eT8uJHRhcmdldCAhPT0gdW5kZWZpbmVkICYmICFub25Tb3J0YWJsZVByb3BlcnRpZXMuaW5jbHVkZXMoY29uZGl0aW9uUHJvcGVydHkuJHRhcmdldC5uYW1lKSkge1xuXHRcdFx0XHRjb25zdCBpbmZvTmFtZSA9IGNvbnZlcnRQcm9wZXJ0eVBhdGhzVG9JbmZvTmFtZXMoW2NvbmRpdGlvblByb3BlcnR5XSwgY29sdW1ucylbMF07XG5cdFx0XHRcdGlmIChpbmZvTmFtZSkge1xuXHRcdFx0XHRcdHNvcnRDb25kaXRpb25zLnNvcnRlcnMucHVzaCh7XG5cdFx0XHRcdFx0XHRuYW1lOiBpbmZvTmFtZSxcblx0XHRcdFx0XHRcdGRlc2NlbmRpbmc6ICEhY29uZGl0aW9uLkRlc2NlbmRpbmdcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cdHJldHVybiBzb3J0Q29uZGl0aW9ucy5zb3J0ZXJzLmxlbmd0aCA/IHNvcnRDb25kaXRpb25zIDogdW5kZWZpbmVkO1xufVxuZnVuY3Rpb24gZ2V0SW5pdGlhbEV4cGFuc2lvbkxldmVsKHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uOiBQcmVzZW50YXRpb25WYXJpYW50VHlwZSB8IHVuZGVmaW5lZCk6IG51bWJlciB8IHVuZGVmaW5lZCB7XG5cdGlmICghcHJlc2VudGF0aW9uVmFyaWFudEFubm90YXRpb24pIHtcblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG5cdGNvbnN0IGxldmVsID0gcHJlc2VudGF0aW9uVmFyaWFudEFubm90YXRpb24uSW5pdGlhbEV4cGFuc2lvbkxldmVsPy52YWx1ZU9mKCk7XG5cdHJldHVybiB0eXBlb2YgbGV2ZWwgPT09IFwibnVtYmVyXCIgPyBsZXZlbCArIDEgOiB1bmRlZmluZWQ7XG59XG4vKipcbiAqIENvbnZlcnRzIGFuIGFycmF5IG9mIHByb3BlcnR5UGF0aCB0byBhbiBhcnJheSBvZiBwcm9wZXJ0eUluZm8gbmFtZXMuXG4gKiBAcGFyYW0gcGF0aHMgVGhlIGFycmF5IHRvIGJlIGNvbnZlcnRlZFxuICogQHBhcmFtIGNvbHVtbnMgVGhlIGFycmF5IG9mIHByb3BlcnR5SW5mb3NcbiAqIEByZXR1cm5zIEFuIGFycmF5IG9mIHByb3BlcnR5SW5mbyBuYW1lc1xuICovXG5mdW5jdGlvbiBjb252ZXJ0UHJvcGVydHlQYXRoc1RvSW5mb05hbWVzKHBhdGhzOiBQcm9wZXJ0eVBhdGhbXSwgY29sdW1uczogVGFibGVDb2x1bW5bXSk6IHN0cmluZ1tdIHtcblx0Y29uc3QgaW5mb05hbWVzOiBzdHJpbmdbXSA9IFtdO1xuXHRsZXQgcHJvcGVydHlJbmZvOiBUYWJsZUNvbHVtbiB8IHVuZGVmaW5lZCwgYW5ub3RhdGlvbkNvbHVtbjogQW5ub3RhdGlvblRhYmxlQ29sdW1uO1xuXHRwYXRocy5mb3JFYWNoKChjdXJyZW50UGF0aCkgPT4ge1xuXHRcdGlmIChjdXJyZW50UGF0aD8udmFsdWUpIHtcblx0XHRcdHByb3BlcnR5SW5mbyA9IGNvbHVtbnMuZmluZCgoY29sdW1uKSA9PiB7XG5cdFx0XHRcdGFubm90YXRpb25Db2x1bW4gPSBjb2x1bW4gYXMgQW5ub3RhdGlvblRhYmxlQ29sdW1uO1xuXHRcdFx0XHRyZXR1cm4gIWFubm90YXRpb25Db2x1bW4ucHJvcGVydHlJbmZvcyAmJiBhbm5vdGF0aW9uQ29sdW1uLnJlbGF0aXZlUGF0aCA9PT0gY3VycmVudFBhdGg/LnZhbHVlO1xuXHRcdFx0fSk7XG5cdFx0XHRpZiAocHJvcGVydHlJbmZvKSB7XG5cdFx0XHRcdGluZm9OYW1lcy5wdXNoKHByb3BlcnR5SW5mby5uYW1lKTtcblx0XHRcdH1cblx0XHR9XG5cdH0pO1xuXHRyZXR1cm4gaW5mb05hbWVzO1xufVxuLyoqXG4gKiBSZXR1cm5zIGEgSlNPTiBzdHJpbmcgY29udGFpbmluZyBQcmVzZW50YXRpb24gVmFyaWFudCBncm91cCBjb25kaXRpb25zLlxuICogQHBhcmFtIHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uIFByZXNlbnRhdGlvbiB2YXJpYW50IGFubm90YXRpb25cbiAqIEBwYXJhbSBjb2x1bW5zIENvbnZlcnRlciBwcm9jZXNzZWQgdGFibGUgY29sdW1uc1xuICogQHBhcmFtIHRhYmxlVHlwZSBUaGUgdGFibGUgdHlwZS5cbiAqIEByZXR1cm5zIEdyb3VwIGNvbmRpdGlvbnMgZm9yIGEgUHJlc2VudGF0aW9uIHZhcmlhbnQuXG4gKi9cbmZ1bmN0aW9uIGdldEdyb3VwQ29uZGl0aW9ucyhcblx0cHJlc2VudGF0aW9uVmFyaWFudEFubm90YXRpb246IFByZXNlbnRhdGlvblZhcmlhbnRUeXBlIHwgdW5kZWZpbmVkLFxuXHRjb2x1bW5zOiBUYWJsZUNvbHVtbltdLFxuXHR0YWJsZVR5cGU6IHN0cmluZ1xuKTogVGFibGVHcm91cENvbmRpdGlvbnMgfCB1bmRlZmluZWQge1xuXHRjb25zdCBncm91cENvbmRpdGlvbnM6IFRhYmxlR3JvdXBDb25kaXRpb25zID0ge1xuXHRcdGdyb3VwTGV2ZWxzOiBbXVxuXHR9O1xuXHRpZiAocHJlc2VudGF0aW9uVmFyaWFudEFubm90YXRpb24/Lkdyb3VwQnkpIHtcblx0XHRsZXQgYUdyb3VwQnkgPSBwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbi5Hcm91cEJ5O1xuXHRcdGlmICh0YWJsZVR5cGUgPT09IFwiUmVzcG9uc2l2ZVRhYmxlXCIpIHtcblx0XHRcdGFHcm91cEJ5ID0gYUdyb3VwQnkuc2xpY2UoMCwgMSk7XG5cdFx0fVxuXHRcdGdyb3VwQ29uZGl0aW9ucy5ncm91cExldmVscyA9IGNvbnZlcnRQcm9wZXJ0eVBhdGhzVG9JbmZvTmFtZXMoYUdyb3VwQnksIGNvbHVtbnMpLm1hcCgoaW5mb05hbWUpID0+IHtcblx0XHRcdHJldHVybiB7IG5hbWU6IGluZm9OYW1lIH07XG5cdFx0fSk7XG5cdH1cblx0cmV0dXJuIGdyb3VwQ29uZGl0aW9ucy5ncm91cExldmVscy5sZW5ndGggPyBncm91cENvbmRpdGlvbnMgOiB1bmRlZmluZWQ7XG59XG4vKipcbiAqIFVwZGF0ZXMgdGhlIGNvbHVtbidzIHByb3BlcnR5SW5mb3Mgb2YgYW4gYW5hbHl0aWNhbCB0YWJsZSBpbnRlZ3JhdGluZyBhbGwgZXh0ZW5zaW9ucyBhbmQgYmluZGluZy1yZWxldmFudCBwcm9wZXJ0eSBpbmZvIHBhcnQuXG4gKiBAcGFyYW0gdGFibGVWaXN1YWxpemF0aW9uIFRoZSB2aXN1YWxpemF0aW9uIHRvIGJlIHVwZGF0ZWRcbiAqL1xuZnVuY3Rpb24gX3VwZGF0ZVByb3BlcnR5SW5mb3NXaXRoQWdncmVnYXRlc0RlZmluaXRpb25zKHRhYmxlVmlzdWFsaXphdGlvbjogVGFibGVWaXN1YWxpemF0aW9uKTogdm9pZCB7XG5cdGNvbnN0IHJlbGF0ZWRBZGRpdGlvbmFsUHJvcGVydHlOYW1lTWFwOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG5cdHRhYmxlVmlzdWFsaXphdGlvbi5jb2x1bW5zLmZvckVhY2goKGNvbHVtbikgPT4ge1xuXHRcdGNvbHVtbiA9IGNvbHVtbiBhcyBBbm5vdGF0aW9uVGFibGVDb2x1bW47XG5cdFx0Y29uc3QgcHJvcGVydHlOYW1lRnJvbUFuYWx5dGljc0luZm8gPSBfZ2V0UHJvcGVydHlOYW1lRnJvbUFuYWx5dGljc0luZm8odGFibGVWaXN1YWxpemF0aW9uLCBjb2x1bW4ubmFtZSk7XG5cdFx0aWYgKHByb3BlcnR5TmFtZUZyb21BbmFseXRpY3NJbmZvKSB7XG5cdFx0XHRjb25zdCBhZ2dyZWdhdGFibGVQcm9wZXJ0eURlZmluaXRpb24gPSB0YWJsZVZpc3VhbGl6YXRpb24uYW5hbHl0aWNzRXh0ZW5zaW9ucyFbcHJvcGVydHlOYW1lRnJvbUFuYWx5dGljc0luZm9dO1xuXHRcdFx0Y29sdW1uLmFnZ3JlZ2F0YWJsZSA9ICFhZ2dyZWdhdGFibGVQcm9wZXJ0eURlZmluaXRpb24uZnJvbUdyb3VwYWJsZVByb3BlcnR5O1xuXHRcdFx0Y29sdW1uLmV4dGVuc2lvbiA9IGFnZ3JlZ2F0YWJsZVByb3BlcnR5RGVmaW5pdGlvbiA/PyB7fTtcblx0XHRcdGlmICghY29sdW1uLmlzR3JvdXBhYmxlICYmICFjb2x1bW4uYWdncmVnYXRhYmxlKSB7XG5cdFx0XHRcdC8vIFRoZSBjb2x1bW4gaXMgbmVpdGhlciBhZ2dyZWdhdGFibGUgbm9yIGdyb3VwYWJsZSAtLT4gaXQncyBhIGhpZGRlbiBjb2x1bW4gdG8gYWxsb3cgZmlsdGVyaW5nIGluIFAxM05cblx0XHRcdFx0Ly8gV2UgbmVlZCB0byByZW1vdmUgYWRkaXRpb25hbFByb3BlcnRpZXMsIGFzIGl0J3Mgbm90IG5lZWRlZCBhbmQgY2F1c2VzIGFuIGVycm9yIGluIHRoZSBNREMgdGFibGUgY29kZVxuXHRcdFx0XHRkZWxldGUgY29sdW1uLmV4dGVuc2lvbi5hZGRpdGlvbmFsUHJvcGVydGllcztcblx0XHRcdH1cblx0XHRcdGlmIChjb2x1bW4uaXNHcm91cGFibGUgJiYgY29sdW1uLmV4dGVuc2lvbi5hZGRpdGlvbmFsUHJvcGVydGllcyAmJiBjb2x1bW4uZXh0ZW5zaW9uLmFkZGl0aW9uYWxQcm9wZXJ0aWVzLmxlbmd0aCkge1xuXHRcdFx0XHQvLyBGb3IgdGhlIHRpbWUgYmVpbmcsIHByb3BlcnRpZXMgd2l0aCBjb250ZXh0LWRlZmluaW5nIHByb3BlcnRpZXMgc2hhbGwgbm90IGJlIGFsbG93ZWQgZm9yIHZpc3VhbCBncm91cGluZ1xuXHRcdFx0XHQvLyBXZSBuZWVkIGEgVVggY29uY2VwdCB0byBzdXBwb3J0IHRoaXMgKGFzIHRoZSBlbmQgdXNlciB3b3VsZCBuZWVkIHRvIGdyb3VwIG9uIHRoZSBjb250ZXh0LWRlZmluaW5nIHByb3BlcnRpZXMgYmVmb3JlIGdyb3VwaW5nXG5cdFx0XHRcdC8vIG9uIHRoZSBwcm9wZXJ0eSBpdHNlbGYpLlxuXHRcdFx0XHRjb2x1bW4uaXNHcm91cGFibGUgPSBmYWxzZTtcblx0XHRcdFx0Y29sdW1uLmV4dGVuc2lvbi50ZWNobmljYWxseUdyb3VwYWJsZSA9IHRydWU7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGlmIChjb2x1bW4uYWRkaXRpb25hbFByb3BlcnR5SW5mb3M/Lmxlbmd0aCkge1xuXHRcdFx0Y29sdW1uLmFkZGl0aW9uYWxQcm9wZXJ0eUluZm9zLmZvckVhY2goKGFkZGl0aW9uYWxQcm9wZXJ0eUluZm8pID0+IHtcblx0XHRcdFx0Ly8gQ3JlYXRlIHByb3BlcnR5SW5mbyBmb3IgZWFjaCBhZGRpdGlvbmFsIHByb3BlcnR5LlxuXHRcdFx0XHQvLyBUaGUgbmV3IHByb3BlcnR5ICduYW1lJyBoYXMgYmVlbiBwcmVmaXhlZCB3aXRoICdQcm9wZXJ0eV9UZWNobmljYWw6OicgZm9yIHVuaXF1ZW5lc3MgYW5kIGl0IGhhcyBiZWVuIG5hbWVkIHRlY2huaWNhbCBwcm9wZXJ0eSBhcyBpdCByZXF1aXJlcyBkZWRpY2F0ZWQgTURDIGF0dHJpYnV0ZXMgKHRlY2huaWNhbGx5R3JvdXBhYmxlIGFuZCB0ZWNobmljYWxseUFnZ3JlZ2F0YWJsZSkuXG5cdFx0XHRcdGNyZWF0ZVRlY2huaWNhbFByb3BlcnR5KGFkZGl0aW9uYWxQcm9wZXJ0eUluZm8sIHRhYmxlVmlzdWFsaXphdGlvbi5jb2x1bW5zLCByZWxhdGVkQWRkaXRpb25hbFByb3BlcnR5TmFtZU1hcCk7XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0X3VwZGF0ZUZvclRleHRPbmx5UHJvcGVydGllc1dpdGhDRFAodGFibGVWaXN1YWxpemF0aW9uLCBjb2x1bW4pO1xuXHR9KTtcblx0dGFibGVWaXN1YWxpemF0aW9uLmNvbHVtbnMuZm9yRWFjaCgoY29sdW1uKSA9PiB7XG5cdFx0Y29sdW1uID0gY29sdW1uIGFzIEFubm90YXRpb25UYWJsZUNvbHVtbjtcblx0XHRpZiAoY29sdW1uLmFkZGl0aW9uYWxQcm9wZXJ0eUluZm9zKSB7XG5cdFx0XHRjb2x1bW4uYWRkaXRpb25hbFByb3BlcnR5SW5mb3MgPSBjb2x1bW4uYWRkaXRpb25hbFByb3BlcnR5SW5mb3MubWFwKFxuXHRcdFx0XHQocHJvcGVydHlJbmZvKSA9PiByZWxhdGVkQWRkaXRpb25hbFByb3BlcnR5TmFtZU1hcFtwcm9wZXJ0eUluZm9dID8/IHByb3BlcnR5SW5mb1xuXHRcdFx0KTtcblx0XHRcdC8vIEFkZCBhZGRpdGlvbmFsIHByb3BlcnRpZXMgdG8gdGhlIGNvbXBsZXggcHJvcGVydHkgdXNpbmcgdGhlIGhpZGRlbiBhbm5vdGF0aW9uLlxuXHRcdFx0Y29sdW1uLnByb3BlcnR5SW5mb3MgPSBjb2x1bW4ucHJvcGVydHlJbmZvcz8uY29uY2F0KGNvbHVtbi5hZGRpdGlvbmFsUHJvcGVydHlJbmZvcyk7XG5cdFx0fVxuXHR9KTtcbn1cblxuLyoqXG4gKiBQcm92aWRlcyB0aGUgcmVmZXJlbmNlZCBwcm9wZXJ0eSBuYW1lIGZyb20gdGhlIGFuYWx5dGljcyBkYXRhXG4gKiBAcGFyYW0gdGFibGVWaXN1YWxpemF0aW9uIFRoZSB2aXN1YWxpemF0aW9uIHRvIGJlIGFuYWx5emVkXG4gKiBAcGFyYW0gbmFtZSBUaGUgcHJvcGVydHkgbmFtZVxuICogQHJldHVybnMgVGhlIHByb3BlcnR5IG5hbWUgZnJvbSB0aGUgYW5hbHl0aWNzIGRhdGFcbiAqL1xuXG5mdW5jdGlvbiBfZ2V0UHJvcGVydHlOYW1lRnJvbUFuYWx5dGljc0luZm8odGFibGVWaXN1YWxpemF0aW9uOiBUYWJsZVZpc3VhbGl6YXRpb24sIG5hbWU6IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdHJldHVybiBPYmplY3Qua2V5cyh0YWJsZVZpc3VhbGl6YXRpb24uYW5hbHl0aWNzRXh0ZW5zaW9ucyEpLmZpbmQoKGFnZ3JlZ2F0ZSkgPT4gYWdncmVnYXRlID09PSBuYW1lKTtcbn1cblxuLyoqXG4gKiBVcGRhdGVzIHRoZSBjb2x1bW4ncyBwcm9wZXJ0eUluZm9zIG9mIGEgY29sdW1uIGFubm90YXRlZCB3aXRoIHRleHQgb25seSBvbiBhbiBhbmFseXRpY2FsIHRhYmxlLlxuICogVGhlIHJlZmVyZW5jZWQgdGV4dCBwcm9wZXJ0eSBjb3VsZCBkZWZpbmUgY29udGV4dC1kZWZpbmluZyBwcm9wZXJ0aWVzIHRvIGJlIGluY2x1ZGVkIGludG8gdGhlIGNvbHVtbidzIHByb3BlcnR5SW5mb3MuXG4gKiBAcGFyYW0gdGFibGVWaXN1YWxpemF0aW9uIFRoZSB2aXN1YWxpemF0aW9uIHRvIGJlIGFuYWx5emVkXG4gKiBAcGFyYW0gY29sdW1uIFRoZSBjb2x1bW4gY29udGFpbmluZyB0aGUgXCJ0ZXh0QXJyYW5nZW1lbnRcIiBvYmplY3Qgd2hlbiBwcmVzZW50XG4gKi9cbmZ1bmN0aW9uIF91cGRhdGVGb3JUZXh0T25seVByb3BlcnRpZXNXaXRoQ0RQKHRhYmxlVmlzdWFsaXphdGlvbjogVGFibGVWaXN1YWxpemF0aW9uLCBjb2x1bW46IEFubm90YXRpb25UYWJsZUNvbHVtbik6IHZvaWQge1xuXHQvLyBDdXJyZW50bHkgYSBjb2x1bW4gcmVmZXJlbmNpbmcgYSB0ZXh0IG9ubHkgcHJvcGVydHkgb25seSBjb250YWlucyB0aGUgdGV4dCBwcm9wZXJ0eSBpbnRvIGl0cyBwcm9wZXJ0eUluZm9zLlxuXHQvLyBQcm9wZXJ0aWVzIHJlZmVyZW5jaW5nIGNvbnRleHQtZGVmaW5pbmcgcHJvcGVydGllcyAoQ0RQKSBhcmVuJ3QgYWxsb3dlZCBmb3IgZ3JvdXBpbmcuIFRoaXMgbmVlZCB0byBjaGFuZ2UgZm9yIHRleHQgb25seSBjb2x1bW5zLCBhcyBpbiBjb21tb24gY2FzZXMsIHRleHQgcHJvcGVydGllcyByZWZlcmVuY2UgdGhlaXIgdmFsdWUgcHJvcGVydGllcyBpbnRvIHRoZWlyIENEUHMuXG5cdC8vIFNvLCB3ZSBub3cgaW5jbHVkZSB0aGUgdmFsdWUgcHJvcGVydHkgaW50byB0aGUgcHJvcGVydHlJbmZvcyBvZiB0aGUgY29sdW1uIHRvIGFsbG93IHRoZSBncm91cGluZyBvbiB0aGUgcHJvcGVydHkgdmFsdWUuXG5cdGlmIChjb2x1bW4udGV4dEFycmFuZ2VtZW50Py5tb2RlID09PSBcIkRlc2NyaXB0aW9uXCIgJiYgY29sdW1uLnRleHRBcnJhbmdlbWVudC50ZXh0UHJvcGVydHkpIHtcblx0XHRjb25zdCBhbmFseXRpY3NJbmZvUHJvcGVydHlOYW1lRm9yRGVzYyA9IF9nZXRQcm9wZXJ0eU5hbWVGcm9tQW5hbHl0aWNzSW5mbyh0YWJsZVZpc3VhbGl6YXRpb24sIGNvbHVtbi50ZXh0QXJyYW5nZW1lbnQudGV4dFByb3BlcnR5KTtcblx0XHRpZiAoYW5hbHl0aWNzSW5mb1Byb3BlcnR5TmFtZUZvckRlc2MpIHtcblx0XHRcdGNvbnN0IGFnZ3JlZ2F0YWJsZVByb3BlcnR5RGVmaW5pdGlvbiA9IHRhYmxlVmlzdWFsaXphdGlvbi5hbmFseXRpY3NFeHRlbnNpb25zIVthbmFseXRpY3NJbmZvUHJvcGVydHlOYW1lRm9yRGVzY107XG5cdFx0XHQvLyBXZSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgdGV4dCBwcm9wZXJ0eSBoYXMgQ0RQIHByb3BlcnRpZXMgZGVmaW5lZCBhbmQgdGhlIHZhbHVlIHByb3BlcnR5IGlzIHBhcnQgb2YgdGhlc2UgcHJvcGVydGllcy5cblx0XHRcdGlmIChcblx0XHRcdFx0YWdncmVnYXRhYmxlUHJvcGVydHlEZWZpbml0aW9uLmFkZGl0aW9uYWxQcm9wZXJ0aWVzPy5sZW5ndGggJiZcblx0XHRcdFx0YWdncmVnYXRhYmxlUHJvcGVydHlEZWZpbml0aW9uLmFkZGl0aW9uYWxQcm9wZXJ0aWVzLmluY2x1ZGVzKGNvbHVtbi5uYW1lKVxuXHRcdFx0KSB7XG5cdFx0XHRcdC8vIFRoZSBwcm9wZXJ0eSB2YWx1ZSAoc2luZ2xlIHByb3BlcnR5KSBleGlzdHMgYWxyZWFkeSBvbiB0aGUgbGlzdCBvZiBjb2x1bW5zIGZyb20gdGhlIHRhYmxlIGJ1dCBpdCB3YXMgb25seSBjcmVhdGVkIGZvciBmaWx0ZXJpbmcgcHVycG9zZXMgaW4gUDEzbiBhbmQgbm90IGxpbmtlZCB0byB0aGUgY29sdW1uIHdpdGggdGhlIHRleHQgYXJyYW5nZW1lbnQgI1RleHRPbmx5LFxuXHRcdFx0XHQvLyB0aGVyZWZvcmUgbm90IHByb3Bvc2VkIGFzIGEgZGVmYXVsdCB2YWx1ZSBmb3IgZ3JvdXBpbmcgdGhlIGNvbHVtbiBtZW51LiBOb3cgaXQnbGwgYmUgaW5jbHVkZWQgaW50byB0aGUgcHJvcGVydHlJbmZvcyBvZiB0aGUgY29sdW1uIHRvIGFsbG93IHRoZSBkZWZhdWx0IGdyb3VwaW5nIG9uIHRoaXMgdmFsdWUgcHJvcGVydHkuXG5cdFx0XHRcdGNvbnN0IGNvbHVtbldpdGhUZXh0T25seSA9ICh0YWJsZVZpc3VhbGl6YXRpb24uY29sdW1ucyBhcyBBbm5vdGF0aW9uVGFibGVDb2x1bW5bXSkuZmluZChcblx0XHRcdFx0XHQodGV4dE9ubHlDb2x1bW4pID0+IHRleHRPbmx5Q29sdW1uLnJlbGF0aXZlUGF0aCA9PT0gY29sdW1uLnJlbGF0aXZlUGF0aCAmJiB0ZXh0T25seUNvbHVtbi5wcm9wZXJ0eUluZm9zXG5cdFx0XHRcdCk7XG5cdFx0XHRcdGNvbHVtbldpdGhUZXh0T25seT8ucHJvcGVydHlJbmZvcz8ucHVzaChjb2x1bW4ubmFtZSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59XG5cbi8qKlxuICogUmV0dXJucyBhIEpTT04gc3RyaW5nIGNvbnRhaW5pbmcgUHJlc2VudGF0aW9uIFZhcmlhbnQgYWdncmVnYXRlIGNvbmRpdGlvbnMuXG4gKiBAcGFyYW0gcHJlc2VudGF0aW9uVmFyaWFudEFubm90YXRpb24gUHJlc2VudGF0aW9uIHZhcmlhbnQgYW5ub3RhdGlvblxuICogQHBhcmFtIGNvbHVtbnMgQ29udmVydGVyIHByb2Nlc3NlZCB0YWJsZSBjb2x1bW5zXG4gKiBAcGFyYW0gZXh0ZW5zaW9uSW5mb01hcFxuICogQHJldHVybnMgR3JvdXAgY29uZGl0aW9ucyBmb3IgYSBQcmVzZW50YXRpb24gdmFyaWFudC5cbiAqL1xuZnVuY3Rpb24gZ2V0QWdncmVnYXRlQ29uZGl0aW9ucyhcblx0cHJlc2VudGF0aW9uVmFyaWFudEFubm90YXRpb246IFByZXNlbnRhdGlvblZhcmlhbnRUeXBlIHwgdW5kZWZpbmVkLFxuXHRjb2x1bW5zOiBUYWJsZUNvbHVtbltdLFxuXHRleHRlbnNpb25JbmZvTWFwOiBSZWNvcmQ8c3RyaW5nLCBJbnRlcm5hbEV4dGVuc2lvbkZvckFuYWx5dGljcz5cbik6IFRhYmxlQWdncmVnYXRlQ29uZGl0aW9ucyB8IHVuZGVmaW5lZCB7XG5cdGNvbnN0IGFnZ3JlZ2F0ZUNvbmRpdGlvbnM6IFRhYmxlQWdncmVnYXRlQ29uZGl0aW9ucyA9IHt9O1xuXHRpZiAocHJlc2VudGF0aW9uVmFyaWFudEFubm90YXRpb24/LlRvdGFsKSB7XG5cdFx0Y29uc3QgYVRvdGFscyA9IHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uLlRvdGFsO1xuXHRcdGNvbnZlcnRQcm9wZXJ0eVBhdGhzVG9JbmZvTmFtZXMoYVRvdGFscywgY29sdW1ucykuZm9yRWFjaCgoaW5mb05hbWUpID0+IHtcblx0XHRcdGFnZ3JlZ2F0ZUNvbmRpdGlvbnNbaW5mb05hbWVdID0ge307XG5cdFx0fSk7XG5cdH0gZWxzZSB7XG5cdFx0Zm9yIChjb25zdCBrZXkgaW4gZXh0ZW5zaW9uSW5mb01hcCkge1xuXHRcdFx0aWYgKCFleHRlbnNpb25JbmZvTWFwW2tleV0uZnJvbUdyb3VwYWJsZVByb3BlcnR5KSB7XG5cdFx0XHRcdGFnZ3JlZ2F0ZUNvbmRpdGlvbnNba2V5XSA9IHt9O1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHRyZXR1cm4gT2JqZWN0LmtleXMoYWdncmVnYXRlQ29uZGl0aW9ucykubGVuZ3RoID8gYWdncmVnYXRlQ29uZGl0aW9ucyA6IHVuZGVmaW5lZDtcbn1cbmV4cG9ydCB0eXBlIFN0YW5kYXJkQWN0aW9uc0NvbmZpZ3VyYXRpb24gPSB7XG5cdGNyZWF0aW9uQmVoYXZpb3VyOiBUYWJsZUFubm90YXRpb25Db25maWd1cmF0aW9uW1wiY3JlYXRlXCJdO1xuXHRjdXRCdXR0b25WaXNpYmlsaXR5RXhwcmVzc2lvbjogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+O1xuXHRkZWxldGVCdXR0b25WaXNpYmlsaXR5RXhwcmVzc2lvbjogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+O1xuXHRtYXNzRWRpdEJ1dHRvblZpc2liaWxpdHlFeHByZXNzaW9uOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj47XG5cdGlzSW5zZXJ0VXBkYXRlQWN0aW9uc1RlbXBsYXRlZDogYm9vbGVhbjtcblx0c3RhbmRhcmRBY3Rpb25zOiB7XG5cdFx0Y3JlYXRlOiBTdGFuZGFyZEFjdGlvbjtcblx0XHRkZWxldGU6IFN0YW5kYXJkQWN0aW9uO1xuXHRcdHBhc3RlOiBTdGFuZGFyZEFjdGlvbjtcblx0XHRtYXNzRWRpdDogU3RhbmRhcmRBY3Rpb247XG5cdFx0aW5zaWdodHM6IFN0YW5kYXJkQWN0aW9uO1xuXHRcdGNyZWF0aW9uUm93OiBTdGFuZGFyZEFjdGlvbjtcblx0XHRjdXQ6IFN0YW5kYXJkQWN0aW9uO1xuXHRcdG1vdmVVcD86IFN0YW5kYXJkQWN0aW9uO1xuXHRcdG1vdmVEb3duPzogU3RhbmRhcmRBY3Rpb247XG5cdH07XG59O1xuLyoqXG4gKiBDYWxjdWxhdGVzIHRoZSBzdGFuZGFyZCBhY3Rpb25zIGFuZCBhZGphY2VudCBwcm9wZXJ0aWVzIHRoYXQgYXJlIG5lZWRlZCBpbiB0aGUgZnVydGhlciBjb252ZXJzaW9uIHByb2Nlc3MuXG4gKiBAcGFyYW0gbGluZUl0ZW1Bbm5vdGF0aW9uIENvbGxlY3Rpb24gb2YgZGF0YSBmaWVsZHMgdXNlZCBmb3IgcmVwcmVzZW50YXRpb24gaW4gYSB0YWJsZSBvciBsaXN0XG4gKiBAcGFyYW0gdmlzdWFsaXphdGlvblBhdGggVGhlIHZpc3VhbGl6YXRpb24gcGF0aFxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGluc3RhbmNlIG9mIHRoZSBjb252ZXJ0ZXIgY29udGV4dFxuICogQHBhcmFtIHRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uIFRoZSB0YWJsZSBtYW5pZmVzdCBjb25maWd1cmF0aW9uXG4gKiBAcGFyYW0gbmF2aWdhdGlvblNldHRpbmdzIFRoZSBuYXZpZ2F0aW9uIHRhcmdldCBtYW5pZmVzdCBjb25maWd1cmF0aW9uXG4gKiBAcmV0dXJucyBTdGFuZGFyZCBhY3Rpb25zIGFuZCBjb25uZWN0ZWQgcHJvcGVydGllc1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0U3RhbmRhcmRBY3Rpb25zQ29uZmlndXJhdGlvbihcblx0bGluZUl0ZW1Bbm5vdGF0aW9uOiBMaW5lSXRlbSB8IHVuZGVmaW5lZCxcblx0dmlzdWFsaXphdGlvblBhdGg6IHN0cmluZyxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+LFxuXHR0YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbjogVGFibGVDb250cm9sQ29uZmlndXJhdGlvbixcblx0bmF2aWdhdGlvblNldHRpbmdzOiBOYXZpZ2F0aW9uU2V0dGluZ3NDb25maWd1cmF0aW9uXG4pOiBTdGFuZGFyZEFjdGlvbnNDb25maWd1cmF0aW9uIHtcblx0Y29uc3QgY3JlYXRpb25CZWhhdmlvdXIgPSBfZ2V0Q3JlYXRpb25CZWhhdmlvdXIoXG5cdFx0bGluZUl0ZW1Bbm5vdGF0aW9uLFxuXHRcdHRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uLFxuXHRcdGNvbnZlcnRlckNvbnRleHQsXG5cdFx0bmF2aWdhdGlvblNldHRpbmdzLFxuXHRcdHZpc3VhbGl6YXRpb25QYXRoXG5cdCk7XG5cdGNvbnN0IHN0YW5kYXJkQWN0aW9uc0NvbnRleHQgPSBnZW5lcmF0ZVN0YW5kYXJkQWN0aW9uc0NvbnRleHQoXG5cdFx0Y29udmVydGVyQ29udGV4dCxcblx0XHRjcmVhdGlvbkJlaGF2aW91ci5tb2RlIGFzIENyZWF0aW9uTW9kZSxcblx0XHR0YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvblxuXHQpO1xuXHRjb25zdCBjdXRCdXR0b25WaXNpYmlsaXR5RXhwcmVzc2lvbiA9IGdldEN1dFZpc2liaWxpdHkoY29udmVydGVyQ29udGV4dCwgc3RhbmRhcmRBY3Rpb25zQ29udGV4dCk7XG5cdGNvbnN0IGRlbGV0ZUJ1dHRvblZpc2liaWxpdHlFeHByZXNzaW9uID0gZ2V0RGVsZXRlVmlzaWJpbGl0eShjb252ZXJ0ZXJDb250ZXh0LCBzdGFuZGFyZEFjdGlvbnNDb250ZXh0KTtcblx0Y29uc3QgbWFzc0VkaXRCdXR0b25WaXNpYmlsaXR5RXhwcmVzc2lvbiA9IGdldE1hc3NFZGl0VmlzaWJpbGl0eShjb252ZXJ0ZXJDb250ZXh0LCBzdGFuZGFyZEFjdGlvbnNDb250ZXh0KTtcblx0Y29uc3QgaXNJbnNlcnRVcGRhdGVBY3Rpb25zVGVtcGxhdGVkID0gZ2V0SW5zZXJ0VXBkYXRlQWN0aW9uc1RlbXBsYXRpbmcoXG5cdFx0c3RhbmRhcmRBY3Rpb25zQ29udGV4dCxcblx0XHRpc0RyYWZ0T3JTdGlja3lTdXBwb3J0ZWQoY29udmVydGVyQ29udGV4dClcblx0KTtcblx0Y29uc3Qgc3RhbmRhcmRBY3Rpb25zID0ge1xuXHRcdGN1dDogZ2V0U3RhbmRhcmRBY3Rpb25DdXQoY29udmVydGVyQ29udGV4dCwgc3RhbmRhcmRBY3Rpb25zQ29udGV4dCksXG5cdFx0Y3JlYXRlOiBnZXRTdGFuZGFyZEFjdGlvbkNyZWF0ZShjb252ZXJ0ZXJDb250ZXh0LCBzdGFuZGFyZEFjdGlvbnNDb250ZXh0KSxcblx0XHRkZWxldGU6IGdldFN0YW5kYXJkQWN0aW9uRGVsZXRlKGNvbnZlcnRlckNvbnRleHQsIHN0YW5kYXJkQWN0aW9uc0NvbnRleHQpLFxuXHRcdHBhc3RlOiBnZXRTdGFuZGFyZEFjdGlvblBhc3RlKGNvbnZlcnRlckNvbnRleHQsIHN0YW5kYXJkQWN0aW9uc0NvbnRleHQsIGlzSW5zZXJ0VXBkYXRlQWN0aW9uc1RlbXBsYXRlZCksXG5cdFx0bWFzc0VkaXQ6IGdldFN0YW5kYXJkQWN0aW9uTWFzc0VkaXQoY29udmVydGVyQ29udGV4dCwgc3RhbmRhcmRBY3Rpb25zQ29udGV4dCksXG5cdFx0aW5zaWdodHM6IGdldFN0YW5kYXJkQWN0aW9uSW5zaWdodHMoY29udmVydGVyQ29udGV4dCwgc3RhbmRhcmRBY3Rpb25zQ29udGV4dCwgdmlzdWFsaXphdGlvblBhdGgpLFxuXHRcdGNyZWF0aW9uUm93OiBnZXRDcmVhdGlvblJvdyhjb252ZXJ0ZXJDb250ZXh0LCBzdGFuZGFyZEFjdGlvbnNDb250ZXh0KVxuXHR9O1xuXHRjb25zdCBjb25maWd1cmF0aW9uOiBTdGFuZGFyZEFjdGlvbnNDb25maWd1cmF0aW9uID0ge1xuXHRcdGNyZWF0aW9uQmVoYXZpb3VyLFxuXHRcdGN1dEJ1dHRvblZpc2liaWxpdHlFeHByZXNzaW9uLFxuXHRcdGRlbGV0ZUJ1dHRvblZpc2liaWxpdHlFeHByZXNzaW9uLFxuXHRcdG1hc3NFZGl0QnV0dG9uVmlzaWJpbGl0eUV4cHJlc3Npb24sXG5cdFx0aXNJbnNlcnRVcGRhdGVBY3Rpb25zVGVtcGxhdGVkLFxuXHRcdHN0YW5kYXJkQWN0aW9uc1xuXHR9O1xuXG5cdGlmIChzdGFuZGFyZEFjdGlvbnNDb250ZXh0LnRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uLnR5cGUgPT09IFwiVHJlZVRhYmxlXCIpIHtcblx0XHRjb25maWd1cmF0aW9uLnN0YW5kYXJkQWN0aW9ucy5tb3ZlVXAgPSBnZXRTdGFuZGFyZEFjdGlvbk1vdmVVcERvd24oY29udmVydGVyQ29udGV4dCwgc3RhbmRhcmRBY3Rpb25zQ29udGV4dCwgdHJ1ZSk7XG5cdFx0Y29uZmlndXJhdGlvbi5zdGFuZGFyZEFjdGlvbnMubW92ZURvd24gPSBnZXRTdGFuZGFyZEFjdGlvbk1vdmVVcERvd24oY29udmVydGVyQ29udGV4dCwgc3RhbmRhcmRBY3Rpb25zQ29udGV4dCwgZmFsc2UpO1xuXHR9XG5cblx0cmV0dXJuIGNvbmZpZ3VyYXRpb247XG59XG5leHBvcnQgZnVuY3Rpb24gZ2V0VGFibGVBbm5vdGF0aW9uQ29uZmlndXJhdGlvbihcblx0bGluZUl0ZW1Bbm5vdGF0aW9uOiBMaW5lSXRlbSB8IHVuZGVmaW5lZCxcblx0dmlzdWFsaXphdGlvblBhdGg6IHN0cmluZyxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+LFxuXHR0YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbjogVGFibGVDb250cm9sQ29uZmlndXJhdGlvbixcblx0Y29sdW1uczogVGFibGVDb2x1bW5bXSxcblx0bmF2aWdhdGlvblNldHRpbmdzOiBOYXZpZ2F0aW9uU2V0dGluZ3NDb25maWd1cmF0aW9uLFxuXHRzdGFuZGFyZEFjdGlvbnNDb25maWd1cmF0aW9uOiBTdGFuZGFyZEFjdGlvbnNDb25maWd1cmF0aW9uLFxuXHRwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbj86IFByZXNlbnRhdGlvblZhcmlhbnRUeXBlXG4pOiBUYWJsZUFubm90YXRpb25Db25maWd1cmF0aW9uIHtcblx0Ly8gTmVlZCB0byBnZXQgdGhlIHRhcmdldFxuXHRjb25zdCB0YWJsZU1hbmlmZXN0U2V0dGluZ3M6IFRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uID0gY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdENvbnRyb2xDb25maWd1cmF0aW9uKHZpc3VhbGl6YXRpb25QYXRoKTtcblx0Y29uc3QgeyBuYXZpZ2F0aW9uUHJvcGVydHlQYXRoIH0gPSBzcGxpdFBhdGgodmlzdWFsaXphdGlvblBhdGgpO1xuXHRjb25zdCB0eXBlTmFtZVBsdXJhbCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpLnRhcmdldEVudGl0eVR5cGUuYW5ub3RhdGlvbnM/LlVJPy5IZWFkZXJJbmZvPy5UeXBlTmFtZVBsdXJhbDtcblx0Y29uc3QgdGl0bGUgPSB0eXBlTmFtZVBsdXJhbCAmJiBjb21waWxlRXhwcmVzc2lvbihnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24odHlwZU5hbWVQbHVyYWwpKTtcblx0Y29uc3QgZW50aXR5U2V0ID0gY29udmVydGVyQ29udGV4dC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCkudGFyZ2V0RW50aXR5U2V0O1xuXHRjb25zdCBwYWdlTWFuaWZlc3RTZXR0aW5nczogTWFuaWZlc3RXcmFwcGVyID0gY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKTtcblx0Y29uc3QgaGFzQWJzb2x1dGVQYXRoID0gbmF2aWdhdGlvblByb3BlcnR5UGF0aC5sZW5ndGggPT09IDA7XG5cdGNvbnN0IHAxM25Nb2RlID0gZ2V0UDEzbk1vZGUodmlzdWFsaXphdGlvblBhdGgsIGNvbnZlcnRlckNvbnRleHQsIHRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uKTtcblx0Y29uc3QgaWQgPSBuYXZpZ2F0aW9uUHJvcGVydHlQYXRoID8gZ2V0VGFibGVJRCh2aXN1YWxpemF0aW9uUGF0aCkgOiBnZXRUYWJsZUlEKGNvbnZlcnRlckNvbnRleHQuZ2V0Q29udGV4dFBhdGgoKSwgXCJMaW5lSXRlbVwiKTtcblx0Y29uc3QgdGFyZ2V0Q2FwYWJpbGl0aWVzID0gZ2V0Q2FwYWJpbGl0eVJlc3RyaWN0aW9uKGNvbnZlcnRlckNvbnRleHQpO1xuXHRjb25zdCBuYXZpZ2F0aW9uVGFyZ2V0UGF0aCA9IGdldE5hdmlnYXRpb25UYXJnZXRQYXRoKGNvbnZlcnRlckNvbnRleHQsIG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgpO1xuXHRjb25zdCBzZWxlY3Rpb25Nb2RlID0gZ2V0U2VsZWN0aW9uTW9kZShcblx0XHRsaW5lSXRlbUFubm90YXRpb24sXG5cdFx0dmlzdWFsaXphdGlvblBhdGgsXG5cdFx0Y29udmVydGVyQ29udGV4dCxcblx0XHRoYXNBYnNvbHV0ZVBhdGgsXG5cdFx0dGFyZ2V0Q2FwYWJpbGl0aWVzLFxuXHRcdHN0YW5kYXJkQWN0aW9uc0NvbmZpZ3VyYXRpb24uZGVsZXRlQnV0dG9uVmlzaWJpbGl0eUV4cHJlc3Npb24sXG5cdFx0c3RhbmRhcmRBY3Rpb25zQ29uZmlndXJhdGlvbi5tYXNzRWRpdEJ1dHRvblZpc2liaWxpdHlFeHByZXNzaW9uLFxuXHRcdHN0YW5kYXJkQWN0aW9uc0NvbmZpZ3VyYXRpb24uY3V0QnV0dG9uVmlzaWJpbGl0eUV4cHJlc3Npb25cblx0KTtcblx0bGV0IHRocmVzaG9sZCA9IG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGggPyAxMCA6IDMwO1xuXHRpZiAocHJlc2VudGF0aW9uVmFyaWFudEFubm90YXRpb24/Lk1heEl0ZW1zKSB7XG5cdFx0dGhyZXNob2xkID0gcHJlc2VudGF0aW9uVmFyaWFudEFubm90YXRpb24uTWF4SXRlbXMudmFsdWVPZigpO1xuXHR9IGVsc2UgaWYgKHRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uLnR5cGUgPT09IFwiVHJlZVRhYmxlXCIpIHtcblx0XHQvLyBUbyBtYWtlIHNjcm9sbGluZyBzbW9vdGgsIHdlIHNldCB0aGUgdGhyZXNob2xkIHZhbHVlIGhpZ2hlciBmb3IgdHJlZSB0YWJsZXNcblx0XHR0aHJlc2hvbGQgPSAyMDA7XG5cdH0gZWxzZSBpZiAodGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24udHlwZSA9PT0gXCJHcmlkVGFibGVcIiB8fCB0YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbi50eXBlID09PSBcIkFuYWx5dGljYWxUYWJsZVwiKSB7XG5cdFx0dGhyZXNob2xkID0gMTAwO1xuXHR9XG5cdGNvbnN0IHZhcmlhbnRNYW5hZ2VtZW50OiBWYXJpYW50TWFuYWdlbWVudFR5cGUgPSBwYWdlTWFuaWZlc3RTZXR0aW5ncy5nZXRWYXJpYW50TWFuYWdlbWVudCgpO1xuXHRjb25zdCBpc1NlYXJjaGFibGUgPSBpc1BhdGhTZWFyY2hhYmxlKGNvbnZlcnRlckNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpKTtcblx0cmV0dXJuIHtcblx0XHRpZDogaWQsXG5cdFx0YXBpSWQ6IGdlbmVyYXRlKFtpZCwgXCJUYWJsZVwiXSksXG5cdFx0ZW50aXR5TmFtZTogZW50aXR5U2V0ID8gZW50aXR5U2V0Lm5hbWUgOiBcIlwiLFxuXHRcdGVudGl0eVR5cGVOYW1lOiBlbnRpdHlTZXQgJiYgZW50aXR5U2V0LmVudGl0eVR5cGUgPyBlbnRpdHlTZXQuZW50aXR5VHlwZS5uYW1lIDogXCJcIixcblx0XHRjb2xsZWN0aW9uOiBnZXRUYXJnZXRPYmplY3RQYXRoKGNvbnZlcnRlckNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpKSxcblx0XHRuYXZpZ2F0aW9uUGF0aDogbmF2aWdhdGlvblByb3BlcnR5UGF0aCxcblx0XHRyb3c6IF9nZXRSb3dDb25maWd1cmF0aW9uUHJvcGVydHkoXG5cdFx0XHRsaW5lSXRlbUFubm90YXRpb24sXG5cdFx0XHRjb252ZXJ0ZXJDb250ZXh0LFxuXHRcdFx0bmF2aWdhdGlvblNldHRpbmdzLFxuXHRcdFx0bmF2aWdhdGlvblRhcmdldFBhdGgsXG5cdFx0XHR0YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbi50eXBlLFxuXHRcdFx0dGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24uYW5hbHl0aWNhbENvbmZpZ3VyYXRpb24/LmFnZ3JlZ2F0aW9uT25MZWFmTGV2ZWxcblx0XHQpLFxuXHRcdHAxM25Nb2RlLFxuXHRcdGlzSW5zZXJ0VXBkYXRlQWN0aW9uc1RlbXBsYXRlZDogc3RhbmRhcmRBY3Rpb25zQ29uZmlndXJhdGlvbi5pc0luc2VydFVwZGF0ZUFjdGlvbnNUZW1wbGF0ZWQsXG5cdFx0dXBkYXRhYmxlUHJvcGVydHlQYXRoOiBnZXRDdXJyZW50RW50aXR5U2V0VXBkYXRhYmxlUGF0aChjb252ZXJ0ZXJDb250ZXh0KSxcblx0XHRkaXNwbGF5TW9kZTogaXNJbkRpc3BsYXlNb2RlKGNvbnZlcnRlckNvbnRleHQsIHRydWUpLFxuXHRcdGNyZWF0ZTogc3RhbmRhcmRBY3Rpb25zQ29uZmlndXJhdGlvbi5jcmVhdGlvbkJlaGF2aW91cixcblx0XHRzZWxlY3Rpb25Nb2RlOiBzZWxlY3Rpb25Nb2RlLFxuXHRcdHZhcmlhbnRNYW5hZ2VtZW50OiB2YXJpYW50TWFuYWdlbWVudCA9PT0gXCJDb250cm9sXCIgJiYgIXAxM25Nb2RlID8gVmFyaWFudE1hbmFnZW1lbnRUeXBlLk5vbmUgOiB2YXJpYW50TWFuYWdlbWVudCxcblx0XHR0aHJlc2hvbGQ6IHRocmVzaG9sZCxcblx0XHRzb3J0Q29uZGl0aW9uczogZ2V0U29ydENvbmRpdGlvbnMoY29udmVydGVyQ29udGV4dCwgcHJlc2VudGF0aW9uVmFyaWFudEFubm90YXRpb24sIGNvbHVtbnMpLFxuXHRcdHRpdGxlOiB0aXRsZSxcblx0XHRzZWFyY2hhYmxlOlxuXHRcdFx0dGFibGVNYW5pZmVzdFNldHRpbmdzLnRhYmxlU2V0dGluZ3M/LmlzU2VhcmNoYWJsZSA9PT0gZmFsc2Vcblx0XHRcdFx0PyBmYWxzZVxuXHRcdFx0XHQ6IHRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uLnR5cGUgIT09IFwiQW5hbHl0aWNhbFRhYmxlXCIgJiYgIShpc0NvbnN0YW50KGlzU2VhcmNoYWJsZSkgJiYgaXNTZWFyY2hhYmxlLnZhbHVlID09PSBmYWxzZSksXG5cdFx0aW5pdGlhbEV4cGFuc2lvbkxldmVsOiBnZXRJbml0aWFsRXhwYW5zaW9uTGV2ZWwocHJlc2VudGF0aW9uVmFyaWFudEFubm90YXRpb24pLFxuXHRcdHJlcXVpcmVkUHJvcGVydGllczogZ2V0UmVxdWlyZWRQcm9wZXJ0aWVzKGNvbnZlcnRlckNvbnRleHQpXG5cdFx0XHQuZmlsdGVyKChwcm9wZXJ0eSkgPT4gcHJvcGVydHk/LiR0YXJnZXQ/LnR5cGUgIT09IFwiRWRtLkJvb2xlYW5cIilcblx0XHRcdC5tYXAoKHByb3BlcnR5KSA9PiBwcm9wZXJ0eS52YWx1ZSlcblx0fTtcbn1cblxuLyoqXG4gKiBTcGxpdHMgdGhlIHZpc3VhbGl6YXRpb24gcGF0aCBpbnRvIG5hdmlnYXRpb24gcHJvcGVydHkgcGF0aCBhbmQgYW5ub3RhdGlvbi5cbiAqIEBwYXJhbSB2aXN1YWxpemF0aW9uUGF0aFxuICogQHJldHVybnMgVGhlIHNwbGl0IHBhdGhcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNwbGl0UGF0aCh2aXN1YWxpemF0aW9uUGF0aDogc3RyaW5nKTogeyBuYXZpZ2F0aW9uUHJvcGVydHlQYXRoOiBzdHJpbmc7IGFubm90YXRpb25QYXRoOiBzdHJpbmcgfSB7XG5cdGNvbnN0IFt0YXJnZXROYXZpZ2F0aW9uUHJvcGVydHlQYXRoLCBhbm5vdGF0aW9uUGF0aF0gPSB2aXN1YWxpemF0aW9uUGF0aC5zcGxpdChcIkBcIik7XG5cdGxldCBuYXZpZ2F0aW9uUHJvcGVydHlQYXRoID0gdGFyZ2V0TmF2aWdhdGlvblByb3BlcnR5UGF0aDtcblx0aWYgKG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgubGFzdEluZGV4T2YoXCIvXCIpID09PSBuYXZpZ2F0aW9uUHJvcGVydHlQYXRoLmxlbmd0aCAtIDEpIHtcblx0XHQvLyBEcm9wIHRyYWlsaW5nIHNsYXNoXG5cdFx0bmF2aWdhdGlvblByb3BlcnR5UGF0aCA9IG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGguc3Vic3RyaW5nKDAsIG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgubGVuZ3RoIC0gMSk7XG5cdH1cblx0cmV0dXJuIHsgbmF2aWdhdGlvblByb3BlcnR5UGF0aCwgYW5ub3RhdGlvblBhdGggfTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBnZXRTZWxlY3Rpb25WYXJpYW50Q29uZmlndXJhdGlvbihcblx0c2VsZWN0aW9uVmFyaWFudFBhdGg6IHN0cmluZyxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+XG4pOiBTZWxlY3Rpb25WYXJpYW50Q29uZmlndXJhdGlvbiB8IHVuZGVmaW5lZCB7XG5cdGNvbnN0IHJlc29sdmVkVGFyZ2V0ID0gY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlQW5ub3RhdGlvbihzZWxlY3Rpb25WYXJpYW50UGF0aCk7XG5cdGNvbnN0IHNlbGVjdGlvbjogU2VsZWN0aW9uVmFyaWFudCA9IHJlc29sdmVkVGFyZ2V0LmFubm90YXRpb24gYXMgU2VsZWN0aW9uVmFyaWFudDtcblx0aWYgKHNlbGVjdGlvbikge1xuXHRcdGNvbnN0IHByb3BlcnR5TmFtZXM6IHN0cmluZ1tdID0gW107XG5cdFx0c2VsZWN0aW9uLlNlbGVjdE9wdGlvbnM/LmZvckVhY2goKHNlbGVjdE9wdGlvbjogU2VsZWN0T3B0aW9uVHlwZSkgPT4ge1xuXHRcdFx0Y29uc3QgcHJvcGVydHlOYW1lID0gc2VsZWN0T3B0aW9uLlByb3BlcnR5TmFtZTtcblx0XHRcdGNvbnN0IHByb3BlcnR5UGF0aDogc3RyaW5nID0gcHJvcGVydHlOYW1lPy52YWx1ZSA/PyBcIlwiO1xuXHRcdFx0aWYgKCFwcm9wZXJ0eU5hbWVzLmluY2x1ZGVzKHByb3BlcnR5UGF0aCkpIHtcblx0XHRcdFx0cHJvcGVydHlOYW1lcy5wdXNoKHByb3BlcnR5UGF0aCk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0cmV0dXJuIHtcblx0XHRcdHRleHQ6IHNlbGVjdGlvbj8uVGV4dD8udG9TdHJpbmcoKSxcblx0XHRcdHByb3BlcnR5TmFtZXM6IHByb3BlcnR5TmFtZXNcblx0XHR9O1xuXHR9XG5cdHJldHVybiB1bmRlZmluZWQ7XG59XG5mdW5jdGlvbiBfZ2V0RnVsbFNjcmVlbkJhc2VkT25EZXZpY2UoXG5cdHRhYmxlU2V0dGluZ3M6IFRhYmxlTWFuaWZlc3RTZXR0aW5nc0NvbmZpZ3VyYXRpb24sXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pixcblx0aXNJcGhvbmU6IGJvb2xlYW5cbik6IGJvb2xlYW4ge1xuXHQvLyBJZiBlbmFibGVGdWxsU2NyZWVuIGlzIG5vdCBzZXQsIHVzZSBhcyBkZWZhdWx0IHRydWUgb24gcGhvbmUgYW5kIGZhbHNlIG90aGVyd2lzZVxuXHRsZXQgZW5hYmxlRnVsbFNjcmVlbiA9IHRhYmxlU2V0dGluZ3MuZW5hYmxlRnVsbFNjcmVlbiA/PyBpc0lwaG9uZTtcblx0Ly8gTWFrZSBzdXJlIHRoYXQgZW5hYmxlRnVsbFNjcmVlbiBpcyBub3Qgc2V0IG9uIExpc3RSZXBvcnQgZm9yIGRlc2t0b3Agb3IgdGFibGV0XG5cdGlmICghaXNJcGhvbmUgJiYgZW5hYmxlRnVsbFNjcmVlbiAmJiBjb252ZXJ0ZXJDb250ZXh0LmdldFRlbXBsYXRlVHlwZSgpID09PSBUZW1wbGF0ZVR5cGUuTGlzdFJlcG9ydCkge1xuXHRcdGVuYWJsZUZ1bGxTY3JlZW4gPSBmYWxzZTtcblx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldERpYWdub3N0aWNzKCkuYWRkSXNzdWUoSXNzdWVDYXRlZ29yeS5NYW5pZmVzdCwgSXNzdWVTZXZlcml0eS5Mb3csIElzc3VlVHlwZS5GVUxMU0NSRUVOTU9ERV9OT1RfT05fTElTVFJFUE9SVCk7XG5cdH1cblx0cmV0dXJuIGVuYWJsZUZ1bGxTY3JlZW47XG59XG5mdW5jdGlvbiBfZ2V0TXVsdGlTZWxlY3RNb2RlKFxuXHR0YWJsZVNldHRpbmdzOiBUYWJsZU1hbmlmZXN0U2V0dGluZ3NDb25maWd1cmF0aW9uLFxuXHR0YWJsZVR5cGU6IFRhYmxlVHlwZSxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+XG4pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRsZXQgbXVsdGlTZWxlY3RNb2RlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cdGlmICh0YWJsZVR5cGUgIT09IFwiUmVzcG9uc2l2ZVRhYmxlXCIpIHtcblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG5cdHN3aXRjaCAoY29udmVydGVyQ29udGV4dC5nZXRUZW1wbGF0ZVR5cGUoKSkge1xuXHRcdGNhc2UgVGVtcGxhdGVUeXBlLkxpc3RSZXBvcnQ6XG5cdFx0Y2FzZSBUZW1wbGF0ZVR5cGUuT2JqZWN0UGFnZTpcblx0XHRcdG11bHRpU2VsZWN0TW9kZSA9IHRhYmxlU2V0dGluZ3Muc2VsZWN0QWxsID09PSBmYWxzZSA/IFwiQ2xlYXJBbGxcIiA6IFwiRGVmYXVsdFwiO1xuXHRcdFx0aWYgKGNvbnZlcnRlckNvbnRleHQuZ2V0VGVtcGxhdGVUeXBlKCkgPT09IFRlbXBsYXRlVHlwZS5PYmplY3RQYWdlICYmIGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RXcmFwcGVyKCkudXNlSWNvblRhYkJhcigpKSB7XG5cdFx0XHRcdG11bHRpU2VsZWN0TW9kZSA9ICF0YWJsZVNldHRpbmdzLnNlbGVjdEFsbCA/IFwiQ2xlYXJBbGxcIiA6IFwiRGVmYXVsdFwiO1xuXHRcdFx0fVxuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBUZW1wbGF0ZVR5cGUuQW5hbHl0aWNhbExpc3RQYWdlOlxuXHRcdFx0bXVsdGlTZWxlY3RNb2RlID0gIXRhYmxlU2V0dGluZ3Muc2VsZWN0QWxsID8gXCJDbGVhckFsbFwiIDogXCJEZWZhdWx0XCI7XG5cdFx0XHRicmVhaztcblx0XHRkZWZhdWx0OlxuXHR9XG5cdHJldHVybiBtdWx0aVNlbGVjdE1vZGU7XG59XG5mdW5jdGlvbiBfZ2V0VGFibGVNb2RlKFxuXHR0YWJsZVR5cGU6IFRhYmxlVHlwZSxcblx0dGFibGVTZXR0aW5nczogVGFibGVNYW5pZmVzdFNldHRpbmdzQ29uZmlndXJhdGlvbixcblx0aXNUZW1wbGF0ZUxpc3RSZXBvcnQ6IGJvb2xlYW5cbik6IHsgcm93Q291bnRNb2RlPzogVGFibGVSb3dDb3VudE1vZGU7IHJvd0NvdW50PzogbnVtYmVyIH0ge1xuXHRpZiAodGFibGVUeXBlICE9PSBcIlJlc3BvbnNpdmVUYWJsZVwiKSB7XG5cdFx0aWYgKGlzVGVtcGxhdGVMaXN0UmVwb3J0KSB7XG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRyb3dDb3VudE1vZGU6IFwiQXV0b1wiLFxuXHRcdFx0XHRyb3dDb3VudDogM1xuXHRcdFx0fTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0cm93Q291bnRNb2RlOiB0YWJsZVNldHRpbmdzLnJvd0NvdW50TW9kZSA/PyBcIkZpeGVkXCIsXG5cdFx0XHRcdHJvd0NvdW50OiB0YWJsZVNldHRpbmdzLnJvd0NvdW50ID8/ICh0YWJsZVR5cGUgPT09IFwiR3JpZFRhYmxlXCIgPyA1IDogMTApXG5cdFx0XHR9O1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHRyZXR1cm4ge307XG5cdH1cbn1cbmZ1bmN0aW9uIF9nZXRDb25kZW5zZWRUYWJsZUxheW91dChfdGFibGVUeXBlOiBUYWJsZVR5cGUsIF90YWJsZVNldHRpbmdzOiBUYWJsZU1hbmlmZXN0U2V0dGluZ3NDb25maWd1cmF0aW9uKTogYm9vbGVhbiB7XG5cdHJldHVybiBfdGFibGVTZXR0aW5ncy5jb25kZW5zZWRUYWJsZUxheW91dCAhPT0gdW5kZWZpbmVkICYmIF90YWJsZVR5cGUgIT09IFwiUmVzcG9uc2l2ZVRhYmxlXCJcblx0XHQ/IF90YWJsZVNldHRpbmdzLmNvbmRlbnNlZFRhYmxlTGF5b3V0XG5cdFx0OiBmYWxzZTtcbn1cbmZ1bmN0aW9uIF9nZXRUYWJsZVNlbGVjdGlvbkxpbWl0KF90YWJsZVNldHRpbmdzOiBUYWJsZU1hbmlmZXN0U2V0dGluZ3NDb25maWd1cmF0aW9uKTogbnVtYmVyIHtcblx0cmV0dXJuIF90YWJsZVNldHRpbmdzLnNlbGVjdEFsbCA9PT0gdHJ1ZSB8fCBfdGFibGVTZXR0aW5ncy5zZWxlY3Rpb25MaW1pdCA9PT0gMCA/IDAgOiBfdGFibGVTZXR0aW5ncy5zZWxlY3Rpb25MaW1pdCB8fCAyMDA7XG59XG5mdW5jdGlvbiBfZ2V0VGFibGVJbmxpbmVDcmVhdGlvblJvd0NvdW50KF90YWJsZVNldHRpbmdzOiBUYWJsZU1hbmlmZXN0U2V0dGluZ3NDb25maWd1cmF0aW9uKTogbnVtYmVyIHtcblx0cmV0dXJuIF90YWJsZVNldHRpbmdzLmNyZWF0aW9uTW9kZT8uaW5saW5lQ3JlYXRpb25Sb3dDb3VudCA/IF90YWJsZVNldHRpbmdzLmNyZWF0aW9uTW9kZT8uaW5saW5lQ3JlYXRpb25Sb3dDb3VudCA6IDE7XG59XG5cbmZ1bmN0aW9uIF9nZXRFbmFibGVFeHBvcnQoXG5cdHRhYmxlU2V0dGluZ3M6IFRhYmxlTWFuaWZlc3RTZXR0aW5nc0NvbmZpZ3VyYXRpb24sXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pixcblx0ZW5hYmxlUGFzdGU6IGJvb2xlYW5cbik6IGJvb2xlYW4ge1xuXHRyZXR1cm4gdGFibGVTZXR0aW5ncy5lbmFibGVFeHBvcnQgIT09IHVuZGVmaW5lZFxuXHRcdD8gdGFibGVTZXR0aW5ncy5lbmFibGVFeHBvcnRcblx0XHQ6IGNvbnZlcnRlckNvbnRleHQuZ2V0VGVtcGxhdGVUeXBlKCkgIT09IFwiT2JqZWN0UGFnZVwiIHx8IGVuYWJsZVBhc3RlO1xufVxuZnVuY3Rpb24gX2dldEZyb3plbkNvbHVtbkNvdW50KHRhYmxlU2V0dGluZ3M6IFRhYmxlTWFuaWZlc3RTZXR0aW5nc0NvbmZpZ3VyYXRpb24pOiBudW1iZXIgfCB1bmRlZmluZWQge1xuXHRyZXR1cm4gdGFibGVTZXR0aW5ncy5mcm96ZW5Db2x1bW5Db3VudDtcbn1cblxuLyoqXG4gKiBHZXQgdGhlIHdpZHRoSW5jbHVkaW5nQ29sdW1uSGVhZGVyIHZhbHVlIGZyb20gdGhlIHRhYmxlU2V0dGluZ3MgaWYgaXQgZXhpc3RzLlxuICogQHBhcmFtIHRhYmxlU2V0dGluZ3MgVGFibGVTZXR0aW5ncyBPYmplY3RcbiAqIEByZXR1cm5zIFJldHVybnMgdGhlIHZhbHVlIG9mIHdpZHRoSW5jbHVkaW5nQ29sdW1uSGVhZGVyIG9yIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIF9nZXRXaWR0aEluY2x1ZGluZ0NvbHVtbkhlYWRlcih0YWJsZVNldHRpbmdzOiBUYWJsZU1hbmlmZXN0U2V0dGluZ3NDb25maWd1cmF0aW9uKTogYm9vbGVhbiB7XG5cdHJldHVybiB0YWJsZVNldHRpbmdzLndpZHRoSW5jbHVkaW5nQ29sdW1uSGVhZGVyID8/IGZhbHNlO1xufVxuXG5mdW5jdGlvbiBnZXRGaWx0ZXJDb25maWd1cmF0aW9uKFxuXHR0YWJsZVNldHRpbmdzOiBUYWJsZU1hbmlmZXN0U2V0dGluZ3NDb25maWd1cmF0aW9uLFxuXHRsaW5lSXRlbUFubm90YXRpb246IExpbmVJdGVtLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sXG5cdHNlbGVjdGlvblZhcmlhbnRBbm5vdGF0aW9uOiBTZWxlY3Rpb25WYXJpYW50VHlwZSB8IHVuZGVmaW5lZFxuKToge1xuXHRmaWx0ZXJzOiBQYXJ0aWFsPFJlY29yZDxcInF1aWNrRmlsdGVyc1wiIHwgXCJoaWRkZW5GaWx0ZXJzXCIsIFRhYmxlRmlsdGVyc0NvbmZpZ3VyYXRpb24+Pjtcblx0aGVhZGVyVmlzaWJsZTogYm9vbGVhbjtcbn0ge1xuXHRsZXQgaGlkZVRhYmxlVGl0bGUgPSBmYWxzZTtcblx0Y29uc3QgZmlsdGVyczogUGFydGlhbDxSZWNvcmQ8XCJxdWlja0ZpbHRlcnNcIiB8IFwiaGlkZGVuRmlsdGVyc1wiLCBUYWJsZUZpbHRlcnNDb25maWd1cmF0aW9uPj4gPSB7fTtcblx0Y29uc3QgdGFyZ2V0RW50aXR5VHlwZSA9IGNvbnZlcnRlckNvbnRleHQuZ2V0QW5ub3RhdGlvbkVudGl0eVR5cGUobGluZUl0ZW1Bbm5vdGF0aW9uKTtcblx0aWYgKHRhYmxlU2V0dGluZ3MucXVpY2tWYXJpYW50U2VsZWN0aW9uKSB7XG5cdFx0Y29uc3QgcXVpY2tGaWx0ZXJQYXRocyA9ICh0YWJsZVNldHRpbmdzLnF1aWNrVmFyaWFudFNlbGVjdGlvbi5wYXRocyA/PyBbXSkucmVkdWNlKFxuXHRcdFx0KGZpbHRlclBhdGhzOiB7IGFubm90YXRpb25QYXRoOiBzdHJpbmcgfVtdLCBwYXRoKSA9PiB7XG5cdFx0XHRcdGlmICh0YXJnZXRFbnRpdHlUeXBlLnJlc29sdmVQYXRoKHBhdGguYW5ub3RhdGlvblBhdGgpKSB7XG5cdFx0XHRcdFx0ZmlsdGVyUGF0aHMucHVzaCh7IGFubm90YXRpb25QYXRoOiBwYXRoLmFubm90YXRpb25QYXRoIH0pO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBmaWx0ZXJQYXRocztcblx0XHRcdH0sXG5cdFx0XHRbXVxuXHRcdCk7XG5cdFx0aWYgKHF1aWNrRmlsdGVyUGF0aHMubGVuZ3RoKSB7XG5cdFx0XHRmaWx0ZXJzLnF1aWNrRmlsdGVycyA9IHtcblx0XHRcdFx0c2hvd0NvdW50czogdGFibGVTZXR0aW5ncy5xdWlja1ZhcmlhbnRTZWxlY3Rpb24uc2hvd0NvdW50cyxcblx0XHRcdFx0cGF0aHM6IHF1aWNrRmlsdGVyUGF0aHNcblx0XHRcdH07XG5cdFx0fVxuXHR9XG5cdGlmIChzZWxlY3Rpb25WYXJpYW50QW5ub3RhdGlvbikge1xuXHRcdC8qKlxuXHRcdCAqIFByb3ZpZGUgU2VsZWN0aW9uIFZhcmlhbnQgdG8gaGlkZGVuRmlsdGVycyBpbiBvcmRlciB0byBzZXQgdGhlIFNWIGZpbHRlcnMgdG8gdGhlIHRhYmxlLlxuXHRcdCAqIE1EQyBUYWJsZSBvdmVycmlkZXMgYmluZGluZyBGaWx0ZXIgYW5kIGZyb20gU0FQIEZFIHRoZSBvbmx5IG1ldGhvZCB3aGVyZSB3ZSBhcmUgYWJsZSB0byBhZGRcblx0XHQgKiBhZGRpdGlvbmFsIGZpbHRlciBpcyAncmViaW5kVGFibGUnIGludG8gVGFibGUgZGVsZWdhdGUuXG5cdFx0ICogVG8gYXZvaWQgaW1wbGVtZW50aW5nIHNwZWNpZmljIExSIGZlYXR1cmUgdG8gU0FQIEZFIE1hY3JvIFRhYmxlLCB0aGUgZmlsdGVyKHMpICBub3QgbWFuYWdlZCBieSB0aGUgRmlsdGVyQmFyXG5cdFx0ICogY2FuIGJlIHBhc3NlZCB0byBtYWNybyB0YWJsZSB2aWEgcGFyYW1ldGVyL2NvbnRleHQgbmFtZWQgZmlsdGVycyBhbmQga2V5IGhpZGRlbkZpbHRlcnMuXG5cdFx0ICovXG5cdFx0ZmlsdGVycy5oaWRkZW5GaWx0ZXJzID0geyBwYXRoczogW3sgYW5ub3RhdGlvblBhdGg6IGBAJHtzZWxlY3Rpb25WYXJpYW50QW5ub3RhdGlvbi5mdWxseVF1YWxpZmllZE5hbWUuc3BsaXQoXCJAXCIpWzFdfWAgfV0gfTtcblx0fVxuXG5cdGhpZGVUYWJsZVRpdGxlID0gISF0YWJsZVNldHRpbmdzLnF1aWNrVmFyaWFudFNlbGVjdGlvbj8uaGlkZVRhYmxlVGl0bGU7XG5cdHJldHVybiB7XG5cdFx0ZmlsdGVyczogZmlsdGVycyxcblx0XHRoZWFkZXJWaXNpYmxlOiAhKGZpbHRlcnM/LnF1aWNrRmlsdGVycyAmJiBoaWRlVGFibGVUaXRsZSlcblx0fTtcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmVzIGlmIHRoZSBhY3Rpb24gd2lsbCBoYXZlIGFuIGV4cHJlc3Npb24gZm9yIGVuYWJsZW1lbnQgZ2VuZXJhdGVkLlxuICogQHBhcmFtIGRhdGFGaWVsZCBUaGUgZGF0YUZpZWxkIGNvbnRhaW5pbmcgYW4gYWN0aW9uXG4gKiBAcGFyYW0gc0VudGl0eVR5cGUgVGhlIGN1cnJlbnQgZW50aXR5IGZvciB0ZW1wbGF0aW5nXG4gKiBAcmV0dXJucyBXaGV0aGVyIGFuIGV4cHJlc3Npb24gZm9yIGVuYWJsZW1lbnQgaXMgdG8gYmUgZ2VuZXJhdGVkXG4gKi9cbmZ1bmN0aW9uIF91c2VFbmFibGVkRXhwcmVzc2lvbihkYXRhRmllbGQ6IERhdGFGaWVsZEZvckFjdGlvblR5cGVzLCBzRW50aXR5VHlwZTogc3RyaW5nKTogYm9vbGVhbiB7XG5cdC8vIFRoZXJlIGFyZSB0aHJlZSBjYXNlcyB3aGVuIGEgdGFibGUgYWN0aW9uIGhhcyBhbiBPcGVyYXRpb25BdmFpbGFibGUgdGhhdCBsZWFkcyB0byBhbiBlbmFibGVtZW50IGV4cHJlc3Npb25cblx0Ly8gYW5kIGlzIG5vdCBkZXBlbmRlbnQgdXBvbiB0aGUgdGFibGUgZW50cmllcy5cblx0Ly8gMS4gQW4gYWN0aW9uIHdpdGggYW4gb3ZlcmxvYWQsIHRoYXQgaXMgZXhlY3V0ZWQgYWdhaW5zdCBhIHBhcmVudCBlbnRpdHkuXG5cdC8vIDIuIEFuIHVuYm91bmQgYWN0aW9uXG5cdC8vIDMuIEEgc3RhdGljIGFjdGlvbiAodGhhdCBpcywgYm91bmQgdG8gYSBjb2xsZWN0aW9uKVxuXHRsZXQgdXNlRW5hYmxlZEV4cHJlc3Npb24gPSBmYWxzZTtcblx0aWYgKGRhdGFGaWVsZC5BY3Rpb25UYXJnZXQ/LmFubm90YXRpb25zPy5Db3JlPy5PcGVyYXRpb25BdmFpbGFibGUgIT09IHVuZGVmaW5lZCkge1xuXHRcdC8vIFVuYm91bmQgYWN0aW9uLiBJcyByZWNvZ25pc2VkLCBidXQgZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uIGNoZWNrcyBmb3IgaXNCb3VuZCA9IHRydWUsIHNvIG5vdCBnZW5lcmF0ZWQuXG5cdFx0Y29uc3QgaXNCb3VuZCA9IGRhdGFGaWVsZC5BY3Rpb25UYXJnZXQ/LmlzQm91bmQ7XG5cdFx0Ly9vdmVybG9hZCBhY3Rpb25cblx0XHRjb25zdCBvdmVybG9hZEFjdGlvbiA9IGlzQm91bmQgJiYgZGF0YUZpZWxkLkFjdGlvblRhcmdldD8uc291cmNlVHlwZSAhPT0gc0VudGl0eVR5cGU7XG5cdFx0Ly9zdGF0aWMgYWN0aW9uXG5cdFx0Y29uc3Qgc3RhdGljQWN0aW9uID0gZGF0YUZpZWxkLkFjdGlvblRhcmdldD8ucGFyYW1ldGVyc1swXT8uaXNDb2xsZWN0aW9uO1xuXHRcdC8vY29weSBhY3Rpb25cblx0XHRpZiAoIWlzQm91bmQgfHwgb3ZlcmxvYWRBY3Rpb24gfHwgc3RhdGljQWN0aW9uKSB7XG5cdFx0XHR1c2VFbmFibGVkRXhwcmVzc2lvbiA9IHRydWU7XG5cdFx0fVxuXHR9XG5cdHJldHVybiB1c2VFbmFibGVkRXhwcmVzc2lvbjtcbn1cblxuLyoqXG4gKiBVcGRhdGVzIHRoZSB0YWJsZSBjb250cm9sIGNvbmZpZ3VyYXRpb24gd2l0aCBUcmVlLVRhYmxlIHNwZWNpZmljIGluZm9ybWF0aW9uLlxuICogQHBhcmFtIHRhYmxlQ29uZmlndXJhdGlvbiBUaGUgdGFibGUgY29uZmlndXJhdGlvblxuICogQHBhcmFtIHRhYmxlU2V0dGluZ3MgU2V0dGluZ3MgZnJvbSB0aGUgbWFuaWZlc3RcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBpbnN0YW5jZSBvZiB0aGUgY29udmVydGVyIGNvbnRleHRcbiAqL1xuZnVuY3Rpb24gdXBkYXRlVHJlZVRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uKFxuXHR0YWJsZUNvbmZpZ3VyYXRpb246IFRhYmxlQ29udHJvbENvbmZpZ3VyYXRpb24sXG5cdHRhYmxlU2V0dGluZ3M6IFRhYmxlTWFuaWZlc3RTZXR0aW5nc0NvbmZpZ3VyYXRpb24sXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHRcbik6IHZvaWQge1xuXHRjb25zdCBkYXRhTW9kZWxPYmplY3RQYXRoID0gY29udmVydGVyQ29udGV4dC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCk7XG5cdHRhYmxlQ29uZmlndXJhdGlvbi5oaWVyYXJjaHlRdWFsaWZpZXIgPSB0YWJsZVNldHRpbmdzLmhpZXJhcmNoeVF1YWxpZmllcjtcblx0Y29uc3QgaGllcmFyY2h5UGFyZW50TmF2aWdhdGlvblByb3BlcnR5UGF0aCA9IGdldEhpZXJhcmNoeVBhcmVudE5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgoXG5cdFx0ZGF0YU1vZGVsT2JqZWN0UGF0aCxcblx0XHR0YWJsZUNvbmZpZ3VyYXRpb24uaGllcmFyY2h5UXVhbGlmaWVyIVxuXHQpO1xuXHRjb25zdCBub25VcGRhdGFibGVOYXZpZ2F0aW9uUHJvcGVydGllcyA9IGdldE5vblVwZGF0YWJsZU5hdmlnYXRpb25Qcm9wZXJ0aWVzKGRhdGFNb2RlbE9iamVjdFBhdGgpO1xuXHR0YWJsZUNvbmZpZ3VyYXRpb24uaXNIaWVyYXJjaHlQYXJlbnROb2RlVXBkYXRhYmxlID0gIW5vblVwZGF0YWJsZU5hdmlnYXRpb25Qcm9wZXJ0aWVzPy5pbmNsdWRlcyhoaWVyYXJjaHlQYXJlbnROYXZpZ2F0aW9uUHJvcGVydHlQYXRoKTtcblx0dGFibGVDb25maWd1cmF0aW9uLmlzTm9kZU1vdmFibGUgPSBnZXRDdXN0b21GdW5jdGlvbkluZm8odGFibGVTZXR0aW5ncy5pc05vZGVNb3ZhYmxlLCB0YWJsZUNvbmZpZ3VyYXRpb24pO1xuXHR0YWJsZUNvbmZpZ3VyYXRpb24uaXNNb3ZlVG9Qb3NpdGlvbkFsbG93ZWQgPSBnZXRDdXN0b21GdW5jdGlvbkluZm8odGFibGVTZXR0aW5ncy5pc01vdmVUb1Bvc2l0aW9uQWxsb3dlZCwgdGFibGVDb25maWd1cmF0aW9uKTtcblx0dGFibGVDb25maWd1cmF0aW9uLmNyZWF0ZUVuYWJsZW1lbnQgPSBnZXRDdXN0b21GdW5jdGlvbkluZm8odGFibGVTZXR0aW5ncy5jcmVhdGlvbk1vZGU/LmlzQ3JlYXRlRW5hYmxlZCwgdGFibGVDb25maWd1cmF0aW9uKTtcblxuXHRpZiAodGFibGVTZXR0aW5ncy5jcmVhdGlvbk1vZGU/Lm5vZGVUeXBlPy5wcm9wZXJ0eU5hbWUgJiYgdGFibGVTZXR0aW5ncy5jcmVhdGlvbk1vZGU/Lm5vZGVUeXBlPy52YWx1ZXMpIHtcblx0XHRjb25zdCB2YWx1ZXMgPSB0YWJsZVNldHRpbmdzLmNyZWF0aW9uTW9kZS5ub2RlVHlwZS52YWx1ZXM7XG5cdFx0dGFibGVDb25maWd1cmF0aW9uLm5vZGVUeXBlID0ge1xuXHRcdFx0cHJvcGVydHlOYW1lOiB0YWJsZVNldHRpbmdzLmNyZWF0aW9uTW9kZS5ub2RlVHlwZS5wcm9wZXJ0eU5hbWUsXG5cdFx0XHR2YWx1ZXM6IE9iamVjdC5rZXlzKHZhbHVlcykubWFwKCh2YWx1ZSkgPT4ge1xuXHRcdFx0XHRjb25zdCBub2RlVHlwZUluZm8gPSB2YWx1ZXNbdmFsdWVdO1xuXG5cdFx0XHRcdGlmICh0eXBlb2Ygbm9kZVR5cGVJbmZvID09PSBcInN0cmluZ1wiKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0XHRcdHZhbHVlLFxuXHRcdFx0XHRcdFx0dGV4dDogbm9kZVR5cGVJbmZvXG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdFx0dmFsdWUsXG5cdFx0XHRcdFx0XHR0ZXh0OiBub2RlVHlwZUluZm8ubGFiZWwsXG5cdFx0XHRcdFx0XHRjcmVhdGlvbkRpYWxvZ0ZpZWxkczpcblx0XHRcdFx0XHRcdFx0dGFibGVDb25maWd1cmF0aW9uLmNyZWF0aW9uTW9kZSA9PT0gQ3JlYXRpb25Nb2RlLkNyZWF0aW9uRGlhbG9nXG5cdFx0XHRcdFx0XHRcdFx0PyBnZXRGaWVsZExpc3Qobm9kZVR5cGVJbmZvLmNyZWF0aW9uRmllbGRzLCBjb252ZXJ0ZXJDb250ZXh0KVxuXHRcdFx0XHRcdFx0XHRcdDogdW5kZWZpbmVkXG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0fVxuXHRcdFx0fSlcblx0XHR9O1xuXHR9XG5cblx0Ly8gQ3JlYXRlIGluIHBsYWNlXG5cdGlmICh0YWJsZVNldHRpbmdzLmNyZWF0aW9uTW9kZT8uY3JlYXRlSW5QbGFjZSkge1xuXHRcdHRhYmxlQ29uZmlndXJhdGlvbi5jcmVhdGVJblBsYWNlID0gdHJ1ZTtcblx0fVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q3VzdG9tRnVuY3Rpb25JbmZvKFxuXHR2YWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkLFxuXHR0YWJsZUNvbmZpZ3VyYXRpb246IFRhYmxlQ29udHJvbENvbmZpZ3VyYXRpb25cbik6IEV4dGVybmFsTWV0aG9kQ29uZmlnIHwgdW5kZWZpbmVkIHtcblx0aWYgKCF2YWx1ZSkge1xuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cblx0Y29uc3QgbGFzdERvdEluZGV4ID0gdmFsdWUubGFzdEluZGV4T2YoXCIuXCIpIHx8IC0xO1xuXHRjb25zdCBtb2R1bGVOYW1lID0gdmFsdWUuc3Vic3RyaW5nKDAsIGxhc3REb3RJbmRleCkucmVwbGFjZSgvXFwuL2dpLCBcIi9cIik7XG5cdGNvbnN0IG1ldGhvZE5hbWUgPSB2YWx1ZS5zdWJzdHJpbmcobGFzdERvdEluZGV4ICsgMSk7XG5cblx0Ly8gQWRkIHRoZSBjdXN0b20gbW9kdWxlIGluIHRoZSBsaXN0IG9mIHJlcXVpcmVkIG1vZHVsZXMgaWYgbmVjZXNzYXJ5XG5cdGlmICghbW9kdWxlTmFtZS5zdGFydHNXaXRoKFwiL2V4dGVuc2lvbi9cIikpIHtcblx0XHRpZiAoIXRhYmxlQ29uZmlndXJhdGlvbi5hZGRpdGlvbmFsUmVxdWlyZWRNb2R1bGVzKSB7XG5cdFx0XHR0YWJsZUNvbmZpZ3VyYXRpb24uYWRkaXRpb25hbFJlcXVpcmVkTW9kdWxlcyA9IFttb2R1bGVOYW1lXTtcblx0XHR9IGVsc2UgaWYgKCF0YWJsZUNvbmZpZ3VyYXRpb24uYWRkaXRpb25hbFJlcXVpcmVkTW9kdWxlcy5pbmNsdWRlcyhtb2R1bGVOYW1lKSkge1xuXHRcdFx0dGFibGVDb25maWd1cmF0aW9uLmFkZGl0aW9uYWxSZXF1aXJlZE1vZHVsZXMucHVzaChtb2R1bGVOYW1lKTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4geyBtb2R1bGVOYW1lLCBtZXRob2ROYW1lIH07XG59XG5cbi8qKlxuICogUmV0cmlldmUgdGhlIHRhYmxlIGNvbnRyb2wgY29uZmlndXJhdGlvbiBvcHRpbWlzdGljIGJhdGNoIGluZm9ybWF0aW9uLlxuICogQHBhcmFtIHRhYmxlTWFuaWZlc3RTZXR0aW5ncyBUaGUgdGFibGUgY29uZmlndXJhdGlvblxuIEByZXR1cm5zIFRydWUgaWYgT3B0aW1pc3RpYyBiYXRjaCBtb2RlIGlzIGRpc2FibGVkXG4gKi9cbmZ1bmN0aW9uIGdldE9wdGltaXN0aWNCYXRjaFNldHRpbmdzRnJvbU1hbmlmZXN0KHRhYmxlTWFuaWZlc3RTZXR0aW5nczogVGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24pOiBib29sZWFuIHwgdW5kZWZpbmVkIHtcblx0Ly8gT3B0aW1pc3RpYyBiYXRjaCBpcyBzZXQgYnkgZGVmYXVsdFxuXHRyZXR1cm4gdGFibGVNYW5pZmVzdFNldHRpbmdzPy50YWJsZVNldHRpbmdzPy5kaXNhYmxlUmVxdWVzdENhY2hlO1xufVxuXG4vKipcbiAqIEdldHMgdGhlIHNldHRpbmdzIGNvbWluZyBmcm9tIHRoZSBtYW5pZmVzdCByZWxhdGVkIHRvIHRoZSBtYXNzIGVkaXQgZGlhbG9nLlxuICogQHBhcmFtIHRhYmxlU2V0dGluZ3MgVGhlIHRhYmxlIGNvbmZpZ3VyYXRpb25cbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBpbnN0YW5jZSBvZiB0aGUgY29udmVydGVyIGNvbnRleHRcbiAqIEByZXR1cm5zIFRoZSBtYXNzIGVkaXQgY29uZmlndXJhdGlvbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldE1hc3NFZGl0U2V0dGluZ3MoXG5cdHRhYmxlU2V0dGluZ3M6IFRhYmxlTWFuaWZlc3RTZXR0aW5nc0NvbmZpZ3VyYXRpb24sXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0PlxuKTogTWFzc0VkaXRUYWJsZUNvbmZpZ3VyYXRpb24ge1xuXHRjb25zdCBkZWZhdWx0RmllbGRDb25maWd1cmF0aW9uID0ge1xuXHRcdHZpc2libGVGaWVsZHM6IFtdLFxuXHRcdGlnbm9yZWRGaWVsZHM6IFtdLFxuXHRcdG9wZXJhdGlvbkdyb3VwaW5nTW9kZTpcblx0XHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0VGVtcGxhdGVUeXBlKCkgPT09IFRlbXBsYXRlVHlwZS5MaXN0UmVwb3J0XG5cdFx0XHRcdD8gT3BlcmF0aW9uR3JvdXBpbmdNb2RlLklzb2xhdGVkXG5cdFx0XHRcdDogT3BlcmF0aW9uR3JvdXBpbmdNb2RlLkNoYW5nZVNldFxuXHR9O1xuXHRpZiAoIXRhYmxlU2V0dGluZ3MuZW5hYmxlTWFzc0VkaXQpIHtcblx0XHRyZXR1cm4geyBlbmFibGVkOiBmYWxzZSwgLi4uZGVmYXVsdEZpZWxkQ29uZmlndXJhdGlvbiB9O1xuXHR9XG5cdGlmICh0YWJsZVNldHRpbmdzLmVuYWJsZU1hc3NFZGl0ID09PSB0cnVlKSB7XG5cdFx0cmV0dXJuIHsgZW5hYmxlZDogdGFibGVTZXR0aW5ncy5lbmFibGVNYXNzRWRpdCwgLi4uZGVmYXVsdEZpZWxkQ29uZmlndXJhdGlvbiB9O1xuXHR9IGVsc2UgaWYgKHR5cGVvZiB0YWJsZVNldHRpbmdzLmVuYWJsZU1hc3NFZGl0ID09PSBcIm9iamVjdFwiKSB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdGVuYWJsZWQ6IHRydWUsXG5cdFx0XHR2aXNpYmxlRmllbGRzOiBnZXRGaWVsZExpc3QodGFibGVTZXR0aW5ncy5lbmFibGVNYXNzRWRpdC52aXNpYmxlRmllbGRzLCBjb252ZXJ0ZXJDb250ZXh0KSxcblx0XHRcdGlnbm9yZWRGaWVsZHM6IGdldEZpZWxkTGlzdCh0YWJsZVNldHRpbmdzLmVuYWJsZU1hc3NFZGl0Lmlnbm9yZWRGaWVsZHMsIGNvbnZlcnRlckNvbnRleHQpLFxuXHRcdFx0b3BlcmF0aW9uR3JvdXBpbmdNb2RlOlxuXHRcdFx0XHR0YWJsZVNldHRpbmdzLmVuYWJsZU1hc3NFZGl0Lm9wZXJhdGlvbkdyb3VwaW5nTW9kZSAmJlxuXHRcdFx0XHRPYmplY3QudmFsdWVzKE9wZXJhdGlvbkdyb3VwaW5nTW9kZSkuaW5jbHVkZXModGFibGVTZXR0aW5ncy5lbmFibGVNYXNzRWRpdC5vcGVyYXRpb25Hcm91cGluZ01vZGUpXG5cdFx0XHRcdFx0PyB0YWJsZVNldHRpbmdzLmVuYWJsZU1hc3NFZGl0Lm9wZXJhdGlvbkdyb3VwaW5nTW9kZVxuXHRcdFx0XHRcdDogZGVmYXVsdEZpZWxkQ29uZmlndXJhdGlvbi5vcGVyYXRpb25Hcm91cGluZ01vZGUsXG5cdFx0XHRjdXN0b21GcmFnbWVudDogdGFibGVTZXR0aW5ncy5lbmFibGVNYXNzRWRpdC5jdXN0b21GcmFnbWVudCxcblx0XHRcdGZyb21JbmxpbmU6IHRhYmxlU2V0dGluZ3MuZW5hYmxlTWFzc0VkaXQuZnJvbUlubGluZVxuXHRcdH07XG5cdH1cblx0cmV0dXJuIHsgZW5hYmxlZDogZmFsc2UsIC4uLmRlZmF1bHRGaWVsZENvbmZpZ3VyYXRpb24gfTtcbn1cblxuLyoqXG4gKiBHZXRzIGEgbGlzdCBvZiB0aGUgZmllbGRzIGNvbWluZyBmcm9tIHRoZSBtYW5pZmVzdC5cbiAqIEBwYXJhbSBmaWVsZHMgVGhlIGZpZWxkcywgY291bGQgYmUgYSBGaWVsZEdyb3VwIG9yIGZpZWxkcyBzZXBhcmF0ZWQgYnkgYSBjb21tYVxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGluc3RhbmNlIG9mIHRoZSBjb252ZXJ0ZXIgY29udGV4dFxuICogQHJldHVybnMgVGhlIGxpc3Qgb2YgZmllbGRzLlxuICovXG5mdW5jdGlvbiBnZXRGaWVsZExpc3QoZmllbGRzOiBzdHJpbmcgfCB1bmRlZmluZWQsIGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pik6IHN0cmluZ1tdIHtcblx0aWYgKCFmaWVsZHMpIHtcblx0XHRyZXR1cm4gW107XG5cdH1cblx0aWYgKGZpZWxkcy5pbmNsdWRlcyhVSUFubm90YXRpb25UZXJtcy5GaWVsZEdyb3VwKSkge1xuXHRcdGZpZWxkcyA9IGZpZWxkcy5zdGFydHNXaXRoKFwiQFwiKSA/IGZpZWxkcyA6IGBAJHtmaWVsZHN9YDtcblx0XHRjb25zdCBmaWVsZEdyb3VwID0gY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlQW5ub3RhdGlvbjxGaWVsZEdyb3VwPihmaWVsZHMpO1xuXHRcdGlmIChpc0Fubm90YXRpb25PZlR5cGU8RmllbGRHcm91cD4oZmllbGRHcm91cC5hbm5vdGF0aW9uLCBVSUFubm90YXRpb25UeXBlcy5GaWVsZEdyb3VwVHlwZSkpIHtcblx0XHRcdHJldHVybiBmaWVsZEdyb3VwLmFubm90YXRpb24uRGF0YS5yZWR1Y2UoKHByb3BlcnRpZXM6IHN0cmluZ1tdLCBmaWVsZCkgPT4ge1xuXHRcdFx0XHRpZiAoaXNEYXRhRmllbGQoZmllbGQpICYmIGlzUGF0aEFubm90YXRpb25FeHByZXNzaW9uKGZpZWxkLlZhbHVlKSkge1xuXHRcdFx0XHRcdHByb3BlcnRpZXMucHVzaChmaWVsZC5WYWx1ZS5wYXRoKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gcHJvcGVydGllcztcblx0XHRcdH0sIFtdKTtcblx0XHR9XG5cdFx0cmV0dXJuIFtdO1xuXHR9XG5cdHJldHVybiBmaWVsZHNcblx0XHQucmVwbGFjZSgvXFxzL2csIFwiXCIpXG5cdFx0LnNwbGl0KFwiLFwiKVxuXHRcdC5tYXAoKG5hbWUpID0+IG5hbWUudHJpbSgpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uKFxuXHRsaW5lSXRlbUFubm90YXRpb246IExpbmVJdGVtIHwgdW5kZWZpbmVkLFxuXHR2aXN1YWxpemF0aW9uUGF0aDogc3RyaW5nLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sXG5cdGNoZWNrQ29uZGVuc2VkTGF5b3V0ID0gdHJ1ZSxcblx0c2VsZWN0aW9uVmFyaWFudEFubm90YXRpb24/OiBTZWxlY3Rpb25WYXJpYW50VHlwZVxuKTogVGFibGVDb250cm9sQ29uZmlndXJhdGlvbiB7XG5cdGNvbnN0IF9tYW5pZmVzdFdyYXBwZXIgPSBjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0V3JhcHBlcigpO1xuXHRjb25zdCB0YWJsZU1hbmlmZXN0U2V0dGluZ3M6IFRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uID0gY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdENvbnRyb2xDb25maWd1cmF0aW9uKHZpc3VhbGl6YXRpb25QYXRoKTtcblx0Y29uc3QgdGFibGVTZXR0aW5ncyA9IHRhYmxlTWFuaWZlc3RTZXR0aW5ncz8udGFibGVTZXR0aW5ncyA/PyB7fTtcblx0Y29uc3QgZ2xvYmFsRkVNYW5pZmVzdFNldHRpbmdzID0gX21hbmlmZXN0V3JhcHBlci5nZXRTYXBGZU1hbmlmZXN0Q29uZmlndXJhdGlvbigpO1xuXHRjb25zdCBkZWZhdWx0Q3JlYXRpb25Nb2RlID1cblx0XHRnbG9iYWxGRU1hbmlmZXN0U2V0dGluZ3M/Lm1hY3Jvcz8udGFibGU/LmRlZmF1bHRDcmVhdGlvbk1vZGUgPT09IFwiSW5saW5lQ3JlYXRpb25Sb3dzXCIgPyBDcmVhdGlvbk1vZGUuSW5saW5lQ3JlYXRpb25Sb3dzIDogdW5kZWZpbmVkO1xuXHRjb25zdCBjcmVhdGlvbk1vZGU6IENyZWF0aW9uTW9kZSA9IHRhYmxlU2V0dGluZ3MuY3JlYXRpb25Nb2RlPy5uYW1lID8/IGRlZmF1bHRDcmVhdGlvbk1vZGUgPz8gQ3JlYXRpb25Nb2RlLk5ld1BhZ2U7XG5cdGNvbnN0IGVuYWJsZUF1dG9Db2x1bW5XaWR0aCA9ICFfbWFuaWZlc3RXcmFwcGVyLmlzUGhvbmUoKTtcblx0Y29uc3QgZGlzYWJsZUNvcHlUb0NsaXBib2FyZCA9IHRhYmxlU2V0dGluZ3MuZGlzYWJsZUNvcHlUb0NsaXBib2FyZDtcblx0Y29uc3QgdGVtcGxhdGVUeXBlID0gY29udmVydGVyQ29udGV4dC5nZXRUZW1wbGF0ZVR5cGUoKTtcblx0Y29uc3QgaXNDb25kZW5zZWRUYWJsZUxheW91dENvbXBsaWFudCA9IGNoZWNrQ29uZGVuc2VkTGF5b3V0ICYmIF9tYW5pZmVzdFdyYXBwZXIuaXNDb25kZW5zZWRMYXlvdXRDb21wbGlhbnQoKTtcblx0Y29uc3Qgb0ZpbHRlckNvbmZpZ3VyYXRpb24gPSBsaW5lSXRlbUFubm90YXRpb25cblx0XHQ/IGdldEZpbHRlckNvbmZpZ3VyYXRpb24odGFibGVTZXR0aW5ncywgbGluZUl0ZW1Bbm5vdGF0aW9uLCBjb252ZXJ0ZXJDb250ZXh0LCBzZWxlY3Rpb25WYXJpYW50QW5ub3RhdGlvbilcblx0XHQ6IHt9O1xuXHRjb25zdCBjdXN0b21WYWxpZGF0aW9uRnVuY3Rpb24gPSB0YWJsZVNldHRpbmdzLmNyZWF0aW9uTW9kZT8uY3VzdG9tVmFsaWRhdGlvbkZ1bmN0aW9uO1xuXHRjb25zdCBleHBvcnRSZXF1ZXN0U2l6ZSA9IHRhYmxlU2V0dGluZ3MuZXhwb3J0UmVxdWVzdFNpemU7XG5cdGNvbnN0IHRhYmxlVHlwZSA9IGdldFRhYmxlVHlwZShjb252ZXJ0ZXJDb250ZXh0LCB0YWJsZU1hbmlmZXN0U2V0dGluZ3MpO1xuXHRjb25zdCBhbmFseXRpY2FsQ29uZmlndXJhdGlvbiA9IHRhYmxlU2V0dGluZ3MuYW5hbHl0aWNhbENvbmZpZ3VyYXRpb247XG5cdC8vIEJ5IGRlZmF1bHQsIHBhc3RlIGlzIGVuYWJsZWQgb24gYW4gT2JqZWN0UGFnZSBhbmQgb24gYSBMaXN0UmVwb3J0IHdpdGggYSBkcmFmdCBUcmVlVGFibGVcblx0Y29uc3QgZW5hYmxlUGFzdGUgPVxuXHRcdHRhYmxlU2V0dGluZ3MuZW5hYmxlUGFzdGUgPz9cblx0XHQoY29udmVydGVyQ29udGV4dC5nZXRUZW1wbGF0ZVR5cGUoKSA9PT0gXCJPYmplY3RQYWdlXCIgfHxcblx0XHRcdCh0YWJsZVR5cGUgPT09IFwiVHJlZVRhYmxlXCIgJiYgKGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0KCkgYXMgRW50aXR5U2V0KT8uYW5ub3RhdGlvbnMuQ29tbW9uPy5EcmFmdFJvb3QgIT09IHVuZGVmaW5lZCkpO1xuXHRjb25zdCB0YWJsZVJvd01vZGUgPSBfZ2V0VGFibGVNb2RlKHRhYmxlVHlwZSwgdGFibGVTZXR0aW5ncywgdGVtcGxhdGVUeXBlID09PSBUZW1wbGF0ZVR5cGUuTGlzdFJlcG9ydCk7XG5cdGNvbnN0IGRlZmF1bHRTY3JvbGxUaHJlc2hvbGQgPSB0YWJsZVR5cGUgIT09IFwiUmVzcG9uc2l2ZVRhYmxlXCIgPyAzMDAgOiB1bmRlZmluZWQ7XG5cdGNvbnN0IGNvbmRlbnNlZFRhYmxlTGF5b3V0ID0gX2dldENvbmRlbnNlZFRhYmxlTGF5b3V0KHRhYmxlVHlwZSwgdGFibGVTZXR0aW5ncyk7XG5cdGxldCBpbmxpbmVDcmVhdGlvblJvd3NIaWRkZW5JbkVkaXRNb2RlID0gZmFsc2U7XG5cdGlmICh0YWJsZVNldHRpbmdzLmNyZWF0aW9uTW9kZT8uaW5saW5lQ3JlYXRpb25Sb3dzSGlkZGVuSW5FZGl0TW9kZSkge1xuXHRcdGlubGluZUNyZWF0aW9uUm93c0hpZGRlbkluRWRpdE1vZGUgPVxuXHRcdFx0dHlwZW9mIHRhYmxlU2V0dGluZ3MuY3JlYXRpb25Nb2RlPy5pbmxpbmVDcmVhdGlvblJvd3NIaWRkZW5JbkVkaXRNb2RlID09PSBcInN0cmluZ1wiXG5cdFx0XHRcdD8gdGFibGVTZXR0aW5ncy5jcmVhdGlvbk1vZGU/LmlubGluZUNyZWF0aW9uUm93c0hpZGRlbkluRWRpdE1vZGUgPT09IFwidHJ1ZVwiXG5cdFx0XHRcdDogdGFibGVTZXR0aW5ncy5jcmVhdGlvbk1vZGU/LmlubGluZUNyZWF0aW9uUm93c0hpZGRlbkluRWRpdE1vZGU7XG5cdH1cblx0bGV0IHVzZVRleHRGb3JOb0RhdGFNZXNzYWdlczogc3RyaW5nO1xuXHRpZiAoY29udmVydGVyQ29udGV4dC5nZXRUZW1wbGF0ZVR5cGUoKSA9PT0gXCJMaXN0UmVwb3J0XCIpIHtcblx0XHR1c2VUZXh0Rm9yTm9EYXRhTWVzc2FnZXMgPSBcImlsbHVzdHJhdGVkTWVzc2FnZS1BdXRvXCI7XG5cdH0gZWxzZSB7XG5cdFx0dXNlVGV4dEZvck5vRGF0YU1lc3NhZ2VzID0gX21hbmlmZXN0V3JhcHBlci5nZXRVc2VUZXh0Rm9yTm9EYXRhTWVzc2FnZXMoKSA/IFwidGV4dFwiIDogXCJpbGx1c3RyYXRlZE1lc3NhZ2UtRG90XCI7XG5cdH1cblx0Y29uc3Qgb0NvbmZpZ3VyYXRpb24gPSB7XG5cdFx0Ly8gSWYgbm8gY3JlYXRlQXRFbmQgaXMgc3BlY2lmaWVkIGl0IHdpbGwgYmUgZmFsc2UgZm9yIElubGluZS9DcmVhdGlvbkRpYWxvZyBjcmVhdGUgYW5kIHRydWUgb3RoZXJ3aXNlXG5cdFx0Y3JlYXRlQXRFbmQ6XG5cdFx0XHR0YWJsZVNldHRpbmdzLmNyZWF0aW9uTW9kZT8uY3JlYXRlQXRFbmQgIT09IHVuZGVmaW5lZFxuXHRcdFx0XHQ/IHRhYmxlU2V0dGluZ3MuY3JlYXRpb25Nb2RlPy5jcmVhdGVBdEVuZFxuXHRcdFx0XHQ6ICFbQ3JlYXRpb25Nb2RlLklubGluZSwgQ3JlYXRpb25Nb2RlLkNyZWF0aW9uRGlhbG9nXS5pbmNsdWRlcyhjcmVhdGlvbk1vZGUpLFxuXHRcdGNyZWF0aW9uTW9kZTogY3JlYXRpb25Nb2RlLFxuXHRcdGNyZWF0aW9uRGlhbG9nRmllbGRzOlxuXHRcdFx0Y3JlYXRpb25Nb2RlID09PSBDcmVhdGlvbk1vZGUuQ3JlYXRpb25EaWFsb2dcblx0XHRcdFx0PyBnZXRGaWVsZExpc3QodGFibGVTZXR0aW5ncy5jcmVhdGlvbk1vZGU/LmNyZWF0aW9uRmllbGRzLCBjb252ZXJ0ZXJDb250ZXh0KVxuXHRcdFx0XHQ6IHVuZGVmaW5lZCxcblx0XHRjdXN0b21WYWxpZGF0aW9uRnVuY3Rpb246IGN1c3RvbVZhbGlkYXRpb25GdW5jdGlvbixcblx0XHRoYXNEYXRhU3RhdGVJbmRpY2F0b3JGaWx0ZXI6IHRlbXBsYXRlVHlwZSA9PT0gVGVtcGxhdGVUeXBlLkxpc3RSZXBvcnQsXG5cdFx0Ly8gaWYgYSBjdXN0b20gdmFsaWRhdGlvbiBmdW5jdGlvbiBpcyBwcm92aWRlZCwgZGlzYWJsZUFkZFJvd0J1dHRvbkZvckVtcHR5RGF0YSBzaG91bGQgbm90IGJlIGNvbnNpZGVyZWQsIGkuZS4gc2V0IHRvIGZhbHNlXG5cdFx0ZGlzYWJsZUFkZFJvd0J1dHRvbkZvckVtcHR5RGF0YTogIWN1c3RvbVZhbGlkYXRpb25GdW5jdGlvbiA/ICEhdGFibGVTZXR0aW5ncy5jcmVhdGlvbk1vZGU/LmRpc2FibGVBZGRSb3dCdXR0b25Gb3JFbXB0eURhdGEgOiBmYWxzZSxcblx0XHRlbmFibGVBdXRvQ29sdW1uV2lkdGg6IGVuYWJsZUF1dG9Db2x1bW5XaWR0aCxcblx0XHRlbmFibGVQYXN0aW5nT2ZDb21wdXRlZFByb3BlcnRpZXM6IHRhYmxlU2V0dGluZ3MuZW5hYmxlUGFzdGluZ09mQ29tcHV0ZWRQcm9wZXJ0aWVzLFxuXHRcdGlnbm9yZWRGaWVsZHM6IHRhYmxlU2V0dGluZ3MuaWdub3JlZEZpZWxkcyxcblx0XHRyZWFkT25seTogdGFibGVTZXR0aW5ncy5yZWFkT25seSxcblx0XHRlbmFibGVFeHBvcnQ6IF9nZXRFbmFibGVFeHBvcnQodGFibGVTZXR0aW5ncywgY29udmVydGVyQ29udGV4dCwgZW5hYmxlUGFzdGUpLFxuXHRcdGFuYWx5dGljYWxDb25maWd1cmF0aW9uLFxuXHRcdGZyb3plbkNvbHVtbkNvdW50OiBfZ2V0RnJvemVuQ29sdW1uQ291bnQodGFibGVTZXR0aW5ncyksXG5cdFx0d2lkdGhJbmNsdWRpbmdDb2x1bW5IZWFkZXI6IF9nZXRXaWR0aEluY2x1ZGluZ0NvbHVtbkhlYWRlcih0YWJsZVNldHRpbmdzKSxcblx0XHRlbmFibGVGdWxsU2NyZWVuOiBfZ2V0RnVsbFNjcmVlbkJhc2VkT25EZXZpY2UodGFibGVTZXR0aW5ncywgY29udmVydGVyQ29udGV4dCwgX21hbmlmZXN0V3JhcHBlci5pc1Bob25lKCkpLFxuXHRcdG1hc3NFZGl0OiBnZXRNYXNzRWRpdFNldHRpbmdzKHRhYmxlU2V0dGluZ3MsIGNvbnZlcnRlckNvbnRleHQpLFxuXHRcdGVuYWJsZUFkZENhcmRUb0luc2lnaHRzOiB0YWJsZVNldHRpbmdzPy5lbmFibGVBZGRDYXJkVG9JbnNpZ2h0cyxcblx0XHRlbmFibGVQYXN0ZTogZW5hYmxlUGFzdGUsXG5cdFx0ZGlzYWJsZUNvcHlUb0NsaXBib2FyZDogZGlzYWJsZUNvcHlUb0NsaXBib2FyZCxcblx0XHRoZWFkZXJWaXNpYmxlOiB0cnVlLFxuXHRcdGhlYWRlcjogdGFibGVTZXR0aW5ncy5oZWFkZXIsXG5cdFx0bXVsdGlTZWxlY3RNb2RlOiBfZ2V0TXVsdGlTZWxlY3RNb2RlKHRhYmxlU2V0dGluZ3MsIHRhYmxlVHlwZSwgY29udmVydGVyQ29udGV4dCksXG5cdFx0c2VsZWN0aW9uTGltaXQ6IF9nZXRUYWJsZVNlbGVjdGlvbkxpbWl0KHRhYmxlU2V0dGluZ3MpLFxuXHRcdGlubGluZUNyZWF0aW9uUm93Q291bnQ6IF9nZXRUYWJsZUlubGluZUNyZWF0aW9uUm93Q291bnQodGFibGVTZXR0aW5ncyksXG5cdFx0aW5saW5lQ3JlYXRpb25Sb3dzSGlkZGVuSW5FZGl0TW9kZTogaW5saW5lQ3JlYXRpb25Sb3dzSGlkZGVuSW5FZGl0TW9kZSxcblx0XHRzaG93Um93Q291bnQ6IHRhYmxlU2V0dGluZ3M/LnF1aWNrVmFyaWFudFNlbGVjdGlvbj8ucGF0aHMgPyBmYWxzZSA6ICFfbWFuaWZlc3RXcmFwcGVyLmdldFZpZXdDb25maWd1cmF0aW9uKCk/LnNob3dDb3VudHMsXG5cdFx0dHlwZTogdGFibGVUeXBlLFxuXHRcdGRpc2FibGVSZXF1ZXN0Q2FjaGU6IGdldE9wdGltaXN0aWNCYXRjaFNldHRpbmdzRnJvbU1hbmlmZXN0KHRhYmxlTWFuaWZlc3RTZXR0aW5ncyksXG5cdFx0dXNlQ29uZGVuc2VkVGFibGVMYXlvdXQ6IGNvbmRlbnNlZFRhYmxlTGF5b3V0ICYmIGlzQ29uZGVuc2VkVGFibGVMYXlvdXRDb21wbGlhbnQsXG5cdFx0aXNDb21wYWN0VHlwZTogX21hbmlmZXN0V3JhcHBlci5pc0NvbXBhY3RUeXBlKCksXG5cdFx0ZXhwb3J0UmVxdWVzdFNpemU6IGV4cG9ydFJlcXVlc3RTaXplLFxuXHRcdGVuYWJsZVVwbG9hZFBsdWdpbjogISFjb252ZXJ0ZXJDb250ZXh0LmdldEFubm90YXRpb25FbnRpdHlUeXBlKCkuYW5ub3RhdGlvbnM/LlVJPy5NZWRpYVJlc291cmNlPy5TdHJlYW0sXG5cdFx0bW9kZUZvck5vRGF0YU1lc3NhZ2U6IHVzZVRleHRGb3JOb0RhdGFNZXNzYWdlcyxcblx0XHRzY3JvbGxUaHJlc2hvbGQ6IHRhYmxlU2V0dGluZ3Muc2Nyb2xsVGhyZXNob2xkID8/IGRlZmF1bHRTY3JvbGxUaHJlc2hvbGRcblx0fTtcblxuXHRjb25zdCB0YWJsZUNvbmZpZ3VyYXRpb246IFRhYmxlQ29udHJvbENvbmZpZ3VyYXRpb24gPSB7IC4uLm9Db25maWd1cmF0aW9uLCAuLi50YWJsZVJvd01vZGUsIC4uLm9GaWx0ZXJDb25maWd1cmF0aW9uIH07XG5cdHRhYmxlQ29uZmlndXJhdGlvbi5iZWZvcmVSZWJpbmRUYWJsZSA9IHRhYmxlU2V0dGluZ3MuYmVmb3JlUmViaW5kVGFibGU7XG5cdHRhYmxlQ29uZmlndXJhdGlvbi5zZWxlY3Rpb25DaGFuZ2UgPSB0YWJsZVNldHRpbmdzLnNlbGVjdGlvbkNoYW5nZTtcblx0dGFibGVDb25maWd1cmF0aW9uLnJvd1ByZXNzID0gdGFibGVTZXR0aW5ncy5yb3dQcmVzcztcblx0aWYgKHRhYmxlVHlwZSA9PT0gXCJUcmVlVGFibGVcIikge1xuXHRcdHVwZGF0ZVRyZWVUYWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbih0YWJsZUNvbmZpZ3VyYXRpb24sIHRhYmxlU2V0dGluZ3MsIGNvbnZlcnRlckNvbnRleHQpO1xuXHR9XG5cblx0aWYgKHRhYmxlU2V0dGluZ3MuaGVhZGVyVmlzaWJsZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0dGFibGVDb25maWd1cmF0aW9uLmhlYWRlclZpc2libGUgPSB0YWJsZVNldHRpbmdzLmhlYWRlclZpc2libGU7XG5cdH1cblxuXHRpZiAodGFibGVDb25maWd1cmF0aW9uLmNyZWF0aW9uTW9kZSA9PT0gQ3JlYXRpb25Nb2RlLkV4dGVybmFsKSB7XG5cdFx0dGFibGVDb25maWd1cmF0aW9uLm91dGJvdW5kQ3JlYXRpb24gPSB0YWJsZVNldHRpbmdzLmNyZWF0aW9uTW9kZT8ub3V0Ym91bmQ7XG5cdH1cblxuXHRyZXR1cm4gdGFibGVDb25maWd1cmF0aW9uO1xufVxuXG5mdW5jdGlvbiBnZXRUYWJsZVR5cGUoXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pixcblx0dGFibGVNYW5pZmVzdFNldHRpbmdzPzogVGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb25cbik6IFRhYmxlVHlwZSB7XG5cdGlmICh0YWJsZU1hbmlmZXN0U2V0dGluZ3M/LnRhYmxlU2V0dGluZ3M/LnR5cGUpIHtcblx0XHQvLyBpbiBjYXNlIHRoZSBhcHBsaWNhdGlvbiBzcGVjaWZpZWQgYSB0YWJsZSB0eXBlIHdlIHdpbGwgdXNlIHRoaXMgb25lXG5cdFx0cmV0dXJuIHRhYmxlTWFuaWZlc3RTZXR0aW5ncy50YWJsZVNldHRpbmdzLnR5cGU7XG5cdH1cblxuXHQvLyBkZWZhdWx0IGlzIHRoZSBSZXNwb25zaXZlVGFibGVcblx0cmV0dXJuIFwiUmVzcG9uc2l2ZVRhYmxlXCI7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHtcblx0Z2V0VGFibGVBY3Rpb25zLFxuXHRjcmVhdGVUYWJsZVZpc3VhbGl6YXRpb24sXG5cdGNyZWF0ZURlZmF1bHRUYWJsZVZpc3VhbGl6YXRpb24sXG5cdGdldENhcGFiaWxpdHlSZXN0cmljdGlvbixcblx0Z2V0U2VsZWN0aW9uTW9kZSxcblx0Z2V0UDEzbk1vZGUsXG5cdGdldFN0YW5kYXJkQWN0aW9uc0NvbmZpZ3VyYXRpb24sXG5cdGdldFRhYmxlQW5ub3RhdGlvbkNvbmZpZ3VyYXRpb24sXG5cdHNwbGl0UGF0aCxcblx0Z2V0U2VsZWN0aW9uVmFyaWFudENvbmZpZ3VyYXRpb24sXG5cdGdldFRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uLFxuXHR1cGRhdGVUYWJsZVZpc3VhbGl6YXRpb25Gb3JUeXBlLFxuXHRjcmVhdGVSZXF1ZXN0ZWRQcm9wZXJ0aWVzLFxuXHRnZXROYXZpZ2F0aW9uVGFyZ2V0UGF0aCxcblx0Z2V0Q3VzdG9tRnVuY3Rpb25JbmZvXG59O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7RUFnRkE7RUFFQTtFQW1KQTtBQUNBO0FBQ0E7O0VBWUE7QUFDQTtBQUNBOztFQTJHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDTyxTQUFTQSxlQUFlQSxDQUM5QkMsa0JBQTRCLEVBQzVCQyxpQkFBeUIsRUFDekJDLGdCQUF5RCxFQUN6REMsZUFBZ0UsRUFDaEVDLGtCQUFvRCxFQUNuQztJQUNqQjtJQUNBLE1BQU1DLFlBQVksR0FBR0MseUJBQXlCLENBQUNOLGtCQUFrQixFQUFFQyxpQkFBaUIsRUFBRUMsZ0JBQWdCLENBQUM7SUFDdkc7SUFDQSxNQUFNSyxlQUFlLEdBQUdDLHNCQUFzQixDQUM3Q04sZ0JBQWdCLENBQUNPLCtCQUErQixDQUE2QlIsaUJBQWlCLENBQUMsQ0FBQ1MsT0FBTyxFQUl2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
1919
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJnZXRUYWJsZUFjdGlvbnMiLCJsaW5lSXRlbUFubm90YXRpb24iLCJ2aXN1YWxpemF0aW9uUGF0aCIsImNvbnZlcnRlckNvbnRleHQiLCJzdGFuZGFyZEFjdGlvbnMiLCJuYXZpZ2F0aW9uU2V0dGluZ3MiLCJpc0NvbGxhYm9yYXRpb25FbmFibGVkIiwiTW9kZWxIZWxwZXIiLCJpc0NvbGxhYm9yYXRpb25EcmFmdFN1cHBvcnRlZEZyb21Db252ZXJ0ZXJDb250ZXh0IiwidGFibGVBY3Rpb25zIiwiZ2V0VGFibGVBbm5vdGF0aW9uQWN0aW9ucyIsIm1hbmlmZXN0QWN0aW9ucyIsImdldEFjdGlvbnNGcm9tTWFuaWZlc3QiLCJnZXRNYW5pZmVzdENvbnRyb2xDb25maWd1cmF0aW9uIiwiYWN0aW9ucyIsImNvcHlBY3Rpb25zIiwiZmlsdGVyIiwiYSIsInR5cGUiLCJBY3Rpb25UeXBlIiwiQ29weSIsImFubm90YXRpb25BY3Rpb25zIiwiYW5ub3RhdGlvbkFuZFN0YW5kYXJkQWN0aW9ucyIsImNyZWF0ZSIsImRlbGV0ZSIsIm1hc3NFZGl0IiwiaW5zaWdodHMiLCJjcmVhdGlvblJvdyIsImN1dCIsImNvcHkiLCJwYXN0ZSIsIm1vdmVVcCIsIm1vdmVEb3duIiwiYWN0aW9uIiwidW5kZWZpbmVkIiwibWFuaWZlc3RBY3Rpb24iLCJPYmplY3QiLCJ2YWx1ZXMiLCJEZWZhdWx0IiwiTWVudSIsInBvc2l0aW9uIiwiYW5jaG9yIiwiU3RhbmRhcmRBY3Rpb25LZXlzIiwiQ3JlYXRlIiwicGxhY2VtZW50IiwiUGxhY2VtZW50IiwiQmVmb3JlIiwibWFuaWZlc3RBY3Rpb25FbnRyaWVzIiwiZW50cmllcyIsInN0YW5kYXJkTWFuaWZlc3RBY3Rpb25zIiwiZnJvbUVudHJpZXMiLCJfcmVmIiwia2V5Iiwic3RhcnRzV2l0aCIsIm5vblN0YW5kYXJkTWFuaWZlc3RBY3Rpb25zIiwiX3JlZjIiLCJhY3Rpb25PdmVyd3JpdGVDb25maWciLCJpc05hdmlnYWJsZSIsIk92ZXJyaWRlVHlwZSIsIm92ZXJ3cml0ZSIsImVuYWJsZU9uU2VsZWN0IiwiZW5hYmxlQXV0b1Njcm9sbCIsImVuYWJsZWQiLCJ2aXNpYmxlIiwidmlzaWJsZUZvckNvbnRleHRNZW51IiwiZGVmYXVsdFZhbHVlc0V4dGVuc2lvbkZ1bmN0aW9uIiwiY29tbWFuZCIsIm1lbnUiLCJhbm5vdGF0aW9uTWVudUFjdGlvbkl0ZW1zIiwiZ2V0QW5ub3RhdGlvbk1lbnVBY3Rpb25JdGVtcyIsIm1hdGNoaW5nTWFuaWZlc3RBY3Rpb25zIiwiZ2V0TWF0Y2hpbmdNYW5pZmVzdEFjdGlvbiIsIm92ZXJ3cml0dGVuTWVudUFjdGlvbkl0ZW1zIiwiaW5zZXJ0Q3VzdG9tRWxlbWVudHMiLCJwcmVwYXJlTWVudUFjdGlvbnMiLCJyZW1vdmVEdXBsaWNhdGVBY3Rpb25zIiwiZ2V0VmlzaWJpbGl0eUVuYWJsZW1lbnRNZW51QWN0aW9ucyIsImFkZENvbGxhYm9yYXRpb25Db25kaXRpb24iLCJjb21tYW5kQWN0aW9ucyIsIl9leHBvcnRzIiwiZ2V0Q29udGV4dERlZmluaW5nUHJvcGVydGllc0Zyb21BZ2dyZWdhdGlvbkFubm90YXRpb24iLCJhZ2dyZWdhdGlvbkhlbHBlciIsImN1c3RvbUFnZ3JlZ2F0ZUFubm90YXRpb25zIiwiZ2V0Q3VzdG9tQWdncmVnYXRlRGVmaW5pdGlvbnMiLCJjdXN0b21BZ2dyZWdhdGVkZWZpbml0aW9ucyIsImZvckVhY2giLCJhbm5vdGF0aW9uIiwiYWdncmVnYXRlZFByb3BlcnR5IiwiX2VudGl0eVR5cGUiLCJlbnRpdHlQcm9wZXJ0aWVzIiwiZmluZCIsInByb3BlcnR5IiwibmFtZSIsInF1YWxpZmllciIsImNvbnRleHREZWZpbmluZ1Byb3BlcnRpZXMiLCJhbm5vdGF0aW9ucyIsIkFnZ3JlZ2F0aW9uIiwiQ29udGV4dERlZmluaW5nUHJvcGVydGllcyIsIm1hcCIsImN0eERlZlByb3BlcnR5IiwidmFsdWUiLCJnZXRFeHRlbnNpb25JbmZvRnJvbUVudGl0eVR5cGUiLCJlbnRpdHlUeXBlIiwidGFibGVDb2x1bW5zIiwiQWdncmVnYXRpb25IZWxwZXIiLCJpc0FuYWx5dGljc1N1cHBvcnRlZCIsImN1cnJlbmN5T3JVbml0UHJvcGVydGllcyIsIlNldCIsImNvbHVtbiIsInRhYmxlQ29sdW1uIiwidW5pdCIsInRhcmdldFVuaXRQcm9wZXJ0eSIsInByb3AiLCJhZGQiLCJyZWxhdGl2ZVBhdGgiLCJjb250ZXh0RGVmaW5pbmdQcm9wZXJ0aWVzRnJvbUFnZ3JlZ2F0aW9uIiwicmVzdWx0IiwicHJvcGVydHlJbmZvcyIsInJhd0NvbnRleHREZWZpbmluZ1Byb3BlcnRpZXMiLCJmcm9tR3JvdXBhYmxlUHJvcGVydHkiLCJpc1Byb3BlcnR5R3JvdXBhYmxlIiwiaGFzIiwiY29udGV4dERlZmluaW5nUHJvcGVydHlOYW1lIiwiZm91bmRDb2x1bW4iLCJmaW5kQ29sdW1uQnlQYXRoIiwicHVzaCIsImxlbmd0aCIsImFkZGl0aW9uYWxQcm9wZXJ0aWVzIiwidXBkYXRlVGFibGVWaXN1YWxpemF0aW9uRm9yVHlwZSIsInRhYmxlVmlzdWFsaXphdGlvbiIsInByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uIiwiY29udHJvbCIsImFnZ3JlZ2F0aW9uRGF0YSIsImNvbHVtbnMiLCJlbmFibGVBbmFseXRpY3MiLCJlbmFibGUkc2VsZWN0IiwiZW5hYmxlJCRnZXRLZWVwQWxpdmVDb250ZXh0IiwiYW5hbHl0aWNzRXh0ZW5zaW9ucyIsIl91cGRhdGVQcm9wZXJ0eUluZm9zV2l0aEFnZ3JlZ2F0ZXNEZWZpbml0aW9ucyIsImFsbG93ZWRUcmFuc2Zvcm1hdGlvbnMiLCJnZXRBbGxvd2VkVHJhbnNmb3JtYXRpb25zIiwiZW5hYmxlQmFzaWNTZWFyY2giLCJpbmNsdWRlcyIsImdyb3VwQ29uZGl0aW9ucyIsImdldEdyb3VwQ29uZGl0aW9ucyIsImFnZ3JlZ2F0ZUNvbmRpdGlvbnMiLCJnZXRBZ2dyZWdhdGVDb25kaXRpb25zIiwiTG9nIiwiZXJyb3IiLCJjaGFuZ2VTaWJsaW5nRm9yUm9vdHNTdXBwb3J0ZWQiLCJIaWVyYXJjaHkiLCJoaWVyYXJjaHlRdWFsaWZpZXIiLCJDaGFuZ2VTaWJsaW5nRm9yUm9vdHNTdXBwb3J0ZWQiLCJhbGxvd0Ryb3BCZXR3ZWVuTm9kZXMiLCJDaGFuZ2VOZXh0U2libGluZ0FjdGlvbiIsImlzT2JqZWN0UGF0aERyYWZ0U3VwcG9ydGVkIiwiZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCIsInJlcXVlc3RBdExlYXN0IiwiYW5hbHl0aWNhbENvbmZpZ3VyYXRpb24iLCJhZ2dyZWdhdGlvbk9uTGVhZkxldmVsIiwiaXNEcmFmdFJvb3QiLCJnZXRFbnRpdHlTZXQiLCJnZXRNYW5pZmVzdFdyYXBwZXIiLCJpc0ZjbEVuYWJsZWQiLCJlbmFibGVVcGxvYWRQbHVnaW4iLCJzdHJlYW1Qcm9wZXJ0eSIsImdldEFubm90YXRpb25FbnRpdHlUeXBlIiwiVUkiLCJNZWRpYVJlc291cmNlIiwiU3RyZWFtIiwiJHRhcmdldCIsInVwbG9hZEFjdGlvbiIsInVwbG9hZFRhYmxlIiwic3RyZWFtIiwiZmlsZU5hbWUiLCJDb3JlIiwiQ29udGVudERpc3Bvc2l0aW9uIiwiRmlsZW5hbWUiLCJwYXRoIiwiZmlsZU5hbWVNYXhMZW5ndGgiLCJtYXhMZW5ndGgiLCJhY2NlcHRhYmxlTWVkaWFUeXBlcyIsIkFjY2VwdGFibGVNZWRpYVR5cGVzIiwiY3JlYXRlUmVxdWVzdGVkUHJvcGVydGllcyIsImxpbmVJdGVtIiwib3BlcmF0aW9uQXZhaWxhYmxlIiwic2VsZWN0ZWRGaWVsZHMiLCJwdXNoRmllbGQiLCJmaWVsZE5hbWUiLCJvcmlnaW4iLCJpbmRleE9mIiwicHVzaEZpZWxkTGlzdCIsImZpZWxkcyIsImZpZWxkIiwib3BlcmF0aW9uQXZhaWxhYmxlUHJvcGVydGllcyIsInNwbGl0IiwidmFsaWRQcm9wZXJ0aWVzIiwicHJvcE5hbWUiLCJyZXNvbHZlUGF0aCIsInNlbWFudGljS2V5cyIsIkNvbW1vbiIsIlNlbWFudGljS2V5Iiwic2VtYW50aWNLZXkiLCJjYXBhYmlsaXRpZXNBbm5vdGF0aW9uIiwiQ2FwYWJpbGl0aWVzIiwiYWx0ZXJuYXRlQW5kU2Vjb25kYXJ5S2V5cyIsImdldEFsdGVybmF0ZUFuZFNlY29uZGFyeUtleXMiLCJSZXF1ZXN0QXRMZWFzdCIsInByb3BlcnR5UGF0aCIsImdldE5hdmlnYXRpb25BdmFpbGFibGVGaWVsZHNGcm9tTGluZUl0ZW0iLCJEZWxldGVSZXN0cmljdGlvbnMiLCJEZWxldGFibGUiLCJVcGRhdGVSZXN0cmljdGlvbnMiLCJVcGRhdGFibGUiLCJyZWNvcmQiLCIkVHlwZSIsIklubGluZSIsIkRldGVybWluaW5nIiwiaXNQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24iLCJOYXZpZ2F0aW9uQXZhaWxhYmxlIiwiZ2V0TmF2aWdhdGlvblRhcmdldFBhdGgiLCJuYXZpZ2F0aW9uUHJvcGVydHlQYXRoIiwibWFuaWZlc3RXcmFwcGVyIiwiZ2V0TmF2aWdhdGlvbkNvbmZpZ3VyYXRpb24iLCJuYXZDb25maWciLCJrZXlzIiwiZGF0YU1vZGVsUGF0aCIsImNvbnRleHRQYXRoIiwiZ2V0Q29udGV4dFBhdGgiLCJuYXZDb25maWdGb3JDb250ZXh0UGF0aCIsInRhcmdldEVudGl0eVNldCIsInN0YXJ0aW5nRW50aXR5U2V0IiwiZ2V0U2VtYW50aWNLZXlzQW5kVGl0bGVJbmZvIiwiaGVhZGVySW5mb1RpdGxlUGF0aCIsIkhlYWRlckluZm8iLCJUaXRsZSIsIlZhbHVlIiwic2VtYW50aWNLZXlBbm5vdGF0aW9ucyIsImhlYWRlckluZm9UeXBlTmFtZSIsIlR5cGVOYW1lIiwic2VtYW50aWNLZXlDb2x1bW5zIiwib0NvbHVtbiIsImNyZWF0ZVRhYmxlVmlzdWFsaXphdGlvbiIsInBhcmFtcyIsImlzQ29uZGVuc2VkVGFibGVMYXlvdXRDb21wbGlhbnQiLCJzZWxlY3Rpb25WYXJpYW50QW5ub3RhdGlvbiIsInRhYmxlTWFuaWZlc3RDb25maWciLCJnZXRUYWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbiIsInNwbGl0UGF0aCIsIm5hdmlnYXRpb25UYXJnZXRQYXRoIiwiZ2V0VGFibGVDb2x1bW5zIiwib3BlcmF0aW9uQXZhaWxhYmxlTWFwIiwiZ2V0T3BlcmF0aW9uQXZhaWxhYmxlTWFwIiwic2VtYW50aWNLZXlzQW5kSGVhZGVySW5mb1RpdGxlIiwic3RhbmRhcmRBY3Rpb25zQ29uZmlndXJhdGlvbiIsImdldFN0YW5kYXJkQWN0aW9uc0NvbmZpZ3VyYXRpb24iLCJ0YWJsZUFubm90YXRpb24iLCJnZXRUYWJsZUFubm90YXRpb25Db25maWd1cmF0aW9uIiwiZ2V0T3BlcmF0aW9uQXZhaWxhYmxlUHJvcGVydGllcyIsImhlYWRlciIsInRpdGxlIiwib1Zpc3VhbGl6YXRpb24iLCJWaXN1YWxpemF0aW9uVHlwZSIsIlRhYmxlIiwiSlNPTiIsInN0cmluZ2lmeSIsImhlYWRlckluZm9UaXRsZSIsImhlYWRlclZpc2libGUiLCJoYW5kbGVQYXRjaFNlbnQiLCJnZXRUZW1wbGF0ZVR5cGUiLCJUZW1wbGF0ZVR5cGUiLCJMaXN0UmVwb3J0IiwidXBkYXRlTGlua2VkUHJvcGVydGllcyIsImNyZWF0ZURlZmF1bHRUYWJsZVZpc3VhbGl6YXRpb24iLCJpc0JsYW5rVGFibGUiLCJnZXRDb2x1bW5zRnJvbUVudGl0eVR5cGUiLCJnZXRFbnRpdHlUeXBlIiwiY3JlYXRpb25Nb2RlIiwiQWN0aW9uSGVscGVyIiwiZ2V0Q3VycmVudEVudGl0eVNldFVwZGF0YWJsZVBhdGgiLCJyZXN0cmljdGlvbnMiLCJnZXRSZXN0cmljdGlvbnMiLCJlbnRpdHlTZXQiLCJ1cGRhdGFibGUiLCJpc1VwZGF0YWJsZSIsImlzT25seUR5bmFtaWNPbkN1cnJlbnRFbnRpdHkiLCJpc0NvbnN0YW50IiwiZXhwcmVzc2lvbiIsIm5hdmlnYXRpb25FeHByZXNzaW9uIiwiX3R5cGUiLCJ1cGRhdGFibGVFeHByZXNzaW9uIiwidXBkYXRhYmxlUHJvcGVydHlQYXRoIiwicHJvcGVydGllcyIsImFjdGlvbk5hbWUiLCJwcm9wZXJ0eU5hbWUiLCJzaXplIiwidGl0bGVQcm9wZXJ0eSIsIkFycmF5IiwiZnJvbSIsImpvaW4iLCJnZXRVSUhpZGRlbkV4cEZvckFjdGlvbnNSZXF1aXJpbmdDb250ZXh0IiwiY3VycmVudEVudGl0eVR5cGUiLCJjb250ZXh0RGF0YU1vZGVsT2JqZWN0UGF0aCIsImFVaUhpZGRlblBhdGhFeHByZXNzaW9ucyIsImRhdGFGaWVsZCIsIkFjdGlvblRhcmdldCIsImlzQm91bmQiLCJzb3VyY2VFbnRpdHlUeXBlIiwiUmVxdWlyZXNDb250ZXh0IiwidmFsdWVPZiIsIkhpZGRlbiIsImVxdWFsIiwiZ2V0SGlkZGVuRXhwcmVzc2lvbkF0VGFibGVMZXZlbCIsImdldFBhdGhGcm9tQWN0aW9uQW5ub3RhdGlvbiIsInNvdXJjZSIsImNvbnN0YW50Iiwic3Vic3RyaW5nIiwic3BsaXRQYXRoRm9yTmF2aWdhdGlvblByb3BlcnR5IiwibmF2aWdhdGlvblBhdGgiLCJpc05hdmlnYXRpb25Qcm9wZXJ0eSIsInRhcmdldE9iamVjdCIsInBhcnRuZXIiLCJwYXRoSW5Nb2RlbCIsInNsaWNlIiwidXBkYXRlTWFuaWZlc3RBY3Rpb25BbmRUYWdJdCIsImRhdGFGaWVsZElkIiwic29tZSIsImFjdGlvbktleSIsInJlcXVpcmVzU2VsZWN0aW9uIiwiaGFzQm91bmRBY3Rpb25zQWx3YXlzVmlzaWJsZUluVG9vbEJhciIsIm1hbmlmZXN0QWN0aW9uSWQiLCJnZW5lcmF0ZSIsIkFjdGlvbiIsIlNlbWFudGljT2JqZWN0IiwiQWN0aW9ucyIsImhhc0N1c3RvbUFjdGlvbnNBbHdheXNWaXNpYmxlSW5Ub29sQmFyIiwiY3VzdG9tQWN0aW9ucyIsInJlZHVjZSIsIm1lbnVBY3Rpb24iLCJ0b1N0cmluZyIsImdldFZpc2libGVFeHBGb3JDdXN0b21BY3Rpb25zUmVxdWlyaW5nQ29udGV4dCIsImFWaXNpYmxlUGF0aEV4cHJlc3Npb25zIiwicmVzb2x2ZUJpbmRpbmdTdHJpbmciLCJnZXRDYXBhYmlsaXR5UmVzdHJpY3Rpb24iLCJpc0RlbGV0YWJsZSIsImlzUGF0aERlbGV0YWJsZSIsImlzUGF0aFVwZGF0YWJsZSIsImdldFNlbGVjdGlvbk1vZGUiLCJpc0VudGl0eVNldCIsInRhcmdldENhcGFiaWxpdGllcyIsImRlbGV0ZUJ1dHRvblZpc2liaWxpdHlFeHByZXNzaW9uIiwibWFzc0VkaXRWaXNpYmlsaXR5RXhwcmVzc2lvbiIsImFyZ3VtZW50cyIsImN1dEJ1dHRvblZpc2liaWxpdHlFeHByZXNzaW9uIiwidGFibGVNYW5pZmVzdFNldHRpbmdzIiwidGFibGVUeXBlIiwidGFibGVTZXR0aW5ncyIsInNlbGVjdGlvbk1vZGUiLCJTZWxlY3Rpb25Nb2RlIiwiTXVsdGkiLCJOb25lIiwiY29tcGlsZUV4cHJlc3Npb24iLCJpZkVsc2UiLCJGb3JjZU11bHRpIiwiRm9yY2VTaW5nbGUiLCJTaW5nbGUiLCJhSGlkZGVuQmluZGluZ0V4cHJlc3Npb25zIiwiYVZpc2libGVCaW5kaW5nRXhwcmVzc2lvbnMiLCJpc1BhcmVudERlbGV0YWJsZSIsInBhcmVudEVudGl0eVNldERlbGV0YWJsZSIsIk9iamVjdFBhZ2UiLCJiTWFzc0VkaXRFbmFibGVkIiwiQXV0byIsImJ1dHRvblZpc2liaWxpdHlFeHByZXNzaW9uIiwib3IiLCJhbmQiLCJJc0VkaXRhYmxlIiwiZWRpdE1vZGVidXR0b25WaXNpYmlsaXR5RXhwcmVzc2lvbiIsImNvbmNhdCIsImNvcHlEYXRhRmllbGQiLCJnZXRDb3B5QWN0aW9uIiwiZGF0YUZpZWxkSXNDb3B5QWN0aW9uIiwiYW5ub3RhdGlvblBhdGgiLCJnZXRFbnRpdHlTZXRCYXNlZEFubm90YXRpb25QYXRoIiwiZnVsbHlRdWFsaWZpZWROYW1lIiwiS2V5SGVscGVyIiwiZ2VuZXJhdGVLZXlGcm9tRGF0YUZpZWxkIiwidmlzaWJsZUV4cHJlc3Npb24iLCJ2aXNpYmxlRm9yQ29udGV4dE1lbnVFeHByZXNzaW9uIiwidGV4dCIsIkxhYmVsIiwiTGlicmFyeSIsImdldFJlc291cmNlQnVuZGxlRm9yIiwiZ2V0VGV4dCIsImlzRGF0YUZpZWxkRm9yQWN0aW9uQWJzdHJhY3QiLCJ0YWJsZUFjdGlvbiIsImdldERhdGFGaWVsZEFubm90YXRpb25BY3Rpb24iLCJpc0RhdGFGaWVsZEZvckFjdGlvbkdyb3VwIiwiZGF0YUZpZWxkR3JvdXAiLCJEYXRhRmllbGRGb3JBY3Rpb24iLCJpc0FJT3BlcmF0aW9uIiwiaXNBY3Rpb25BSU9wZXJhdGlvbiIsIl91c2VFbmFibGVkRXhwcmVzc2lvbiIsImdldEVuYWJsZWRGb3JBbm5vdGF0aW9uQWN0aW9uIiwiRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uIiwiaWQiLCJpc01lbnVBSU9wZXJhdGlvbiIsImdldEhpZ2hsaWdodFJvd0JpbmRpbmciLCJjcml0aWNhbGl0eUFubm90YXRpb24iLCJpc0RyYWZ0Um9vdE9yTm9kZSIsInRhcmdldEVudGl0eVR5cGUiLCJkZWZhdWx0SGlnaGxpZ2h0Um93RGVmaW5pdGlvbiIsIk1lc3NhZ2VUeXBlIiwiZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uIiwiZ2V0TWVzc2FnZVR5cGVGcm9tQ3JpdGljYWxpdHlUeXBlIiwiZm9ybWF0UmVzdWx0IiwiRW50aXR5IiwiSGFzQWN0aXZlIiwiSXNBY3RpdmUiLCJJc0luYWN0aXZlIiwidGFibGVGb3JtYXR0ZXJzIiwicm93SGlnaGxpZ2h0aW5nIiwiZ2V0RXh0ZXJuYWxDcmVhdGlvbkJlaGF2aW9yIiwidGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24iLCJjcmVhdGlvbkRldGFpbHMiLCJvdXRib3VuZEtleSIsIm91dGJvdW5kQ3JlYXRpb24iLCJvdXRib3VuZCIsIm91dGJvdW5kRGV0YWlsIiwiZ2V0T3V0Ym91bmROYXZpZ2F0aW9uRW50cmllcyIsIm1vZGUiLCJDcmVhdGlvbk1vZGUiLCJFeHRlcm5hbCIsIndhcm5pbmciLCJOZXdQYWdlIiwiX2dldENyZWF0aW9uQmVoYXZpb3VyIiwiZXh0ZXJuYWxCZWhhdmlvciIsIm9yaWdpbmFsVGFibGVTZXR0aW5ncyIsIm5hdmlnYXRpb25EZXRhaWxzIiwiZGV0YWlsIiwiQ3JlYXRpb25EaWFsb2ciLCJuZXdBY3Rpb24iLCJ0YXJnZXRBbm5vdGF0aW9ucyIsInRhcmdldEFubm90YXRpb25zQ29tbW9uIiwidGFyZ2V0QW5ub3RhdGlvbnNTZXNzaW9uIiwiU2Vzc2lvbiIsIkRyYWZ0Um9vdCIsIk5ld0FjdGlvbiIsIlN0aWNreVNlc3Npb25TdXBwb3J0ZWQiLCJDcmVhdGlvblJvdyIsIkVycm9yIiwicm91dGUiLCJhcHBlbmQiLCJjcmVhdGVBdEVuZCIsIm5hdmlnYXRlVG9UYXJnZXQiLCJpbmZvIiwiX2dldFJvd0NvbmZpZ3VyYXRpb25Qcm9wZXJ0eSIsInRhcmdldFBhdGgiLCJhZ2dyZWdhdGlvbk9uTGVhZkxldmVsZW5hYmxlZCIsIm5hdmlnYXRpb25JbmZvIiwiY3JpdGljYWxpdHlQcm9wZXJ0eSIsIkNyaXRpY2FsaXR5IiwibmF2aWdhdGlvblRhcmdldCIsImRpc3BsYXkiLCJ0YXJnZXQiLCJnZXREcmFmdFJvb3QiLCJnZXREcmFmdE5vZGUiLCJjaGVja0VkaXRhYmxlIiwicm91dGVQYXRoIiwicmVjcmVhdGVDb250ZXh0Iiwicm93TmF2aWdhdGVkRXhwcmVzc2lvbiIsIm5hdmlnYXRlZFJvdyIsImFjdGlvblR5cGUiLCJyb3dOYXZpZ2F0ZWQiLCJyb3dDcml0aWNhbGl0eUZvckluc2lnaHRzIiwiY3JpdGljYWxpdHlFeHByZXNzaW9uRm9ySW50ZWdyYXRpb25DYXJkcyIsIm5vdCIsImlzTm9kZUxldmVsTmF2aWdhYmxlIiwiY3JlYXRlVGVjaG5pY2FsUHJvcGVydHkiLCJyZWxhdGVkQWRkaXRpb25hbFByb3BlcnR5TmFtZU1hcCIsImNvbHVtbkV4aXN0cyIsImFkZGl0aW9uYWxQcm9wZXJ0eSIsInRlY2huaWNhbENvbHVtbiIsIkNvbHVtblR5cGUiLCJBbm5vdGF0aW9uIiwibGFiZWwiLCJkYXRhVHlwZSIsImF2YWlsYWJpbGl0eSIsInNvcnRhYmxlIiwiaXNHcm91cGFibGUiLCJpc0tleSIsImV4cG9ydFNldHRpbmdzIiwiY2FzZVNlbnNpdGl2ZSIsImFnZ3JlZ2F0YWJsZSIsImZpbHRlcmFibGUiLCJleHRlbnNpb24iLCJ0ZWNobmljYWxseUdyb3VwYWJsZSIsInRlY2huaWNhbGx5QWdncmVnYXRhYmxlIiwiZ2V0UDEzbk1vZGUiLCJ2YXJpYW50TWFuYWdlbWVudCIsImdldFZhcmlhbnRNYW5hZ2VtZW50IiwibW9kZXMiLCJpc0FuYWx5dGljYWxUYWJsZSIsImlzUmVzcG9uc2l2ZVRhYmxlIiwicGVyc29uYWxpemF0aW9uIiwic29ydCIsImdyb3VwIiwiYWdncmVnYXRlIiwiVmFyaWFudE1hbmFnZW1lbnRUeXBlIiwiQ29udHJvbCIsIl9pc0ZpbHRlckJhckhpZGRlbiIsImlzRmlsdGVyQmFySGlkZGVuIiwiaGFzTXVsdGlwbGVWaXN1YWxpemF0aW9ucyIsIkFuYWx5dGljYWxMaXN0UGFnZSIsImdldFNvcnRDb25kaXRpb25zIiwibm9uU29ydGFibGVQcm9wZXJ0aWVzIiwiZ2V0UmVzdHJpY3Rpb25zT25Qcm9wZXJ0aWVzIiwic29ydENvbmRpdGlvbnMiLCJzb3J0ZXJzIiwiU29ydE9yZGVyIiwiY29uZGl0aW9uIiwiY29uZGl0aW9uUHJvcGVydHkiLCJQcm9wZXJ0eSIsImluZm9OYW1lIiwiY29udmVydFByb3BlcnR5UGF0aHNUb0luZm9OYW1lcyIsImRlc2NlbmRpbmciLCJEZXNjZW5kaW5nIiwiZ2V0SW5pdGlhbEV4cGFuc2lvbkxldmVsIiwibGV2ZWwiLCJJbml0aWFsRXhwYW5zaW9uTGV2ZWwiLCJwYXRocyIsImluZm9OYW1lcyIsInByb3BlcnR5SW5mbyIsImFubm90YXRpb25Db2x1bW4iLCJjdXJyZW50UGF0aCIsImdyb3VwTGV2ZWxzIiwiR3JvdXBCeSIsImFHcm91cEJ5IiwicHJvcGVydHlOYW1lRnJvbUFuYWx5dGljc0luZm8iLCJfZ2V0UHJvcGVydHlOYW1lRnJvbUFuYWx5dGljc0luZm8iLCJhZ2dyZWdhdGFibGVQcm9wZXJ0eURlZmluaXRpb24iLCJhZGRpdGlvbmFsUHJvcGVydHlJbmZvcyIsImFkZGl0aW9uYWxQcm9wZXJ0eUluZm8iLCJfdXBkYXRlRm9yVGV4dE9ubHlQcm9wZXJ0aWVzV2l0aENEUCIsInRleHRBcnJhbmdlbWVudCIsInRleHRQcm9wZXJ0eSIsImFuYWx5dGljc0luZm9Qcm9wZXJ0eU5hbWVGb3JEZXNjIiwiY29sdW1uV2l0aFRleHRPbmx5IiwidGV4dE9ubHlDb2x1bW4iLCJleHRlbnNpb25JbmZvTWFwIiwiVG90YWwiLCJhVG90YWxzIiwiY3JlYXRpb25CZWhhdmlvdXIiLCJzdGFuZGFyZEFjdGlvbnNDb250ZXh0IiwiZ2VuZXJhdGVTdGFuZGFyZEFjdGlvbnNDb250ZXh0IiwiZ2V0Q3V0VmlzaWJpbGl0eSIsImdldERlbGV0ZVZpc2liaWxpdHkiLCJtYXNzRWRpdEJ1dHRvblZpc2liaWxpdHlFeHByZXNzaW9uIiwiZ2V0TWFzc0VkaXRWaXNpYmlsaXR5IiwiaXNJbnNlcnRVcGRhdGVBY3Rpb25zVGVtcGxhdGVkIiwiZ2V0SW5zZXJ0VXBkYXRlQWN0aW9uc1RlbXBsYXRpbmciLCJpc0RyYWZ0T3JTdGlja3lTdXBwb3J0ZWQiLCJnZXRTdGFuZGFyZEFjdGlvbkN1dCIsImdldFN0YW5kYXJkQWN0aW9uQ29weSIsImdldFN0YW5kYXJkQWN0aW9uQ3JlYXRlIiwiZ2V0U3RhbmRhcmRBY3Rpb25EZWxldGUiLCJnZXRTdGFuZGFyZEFjdGlvblBhc3RlIiwiZ2V0U3RhbmRhcmRBY3Rpb25NYXNzRWRpdCIsImdldFN0YW5kYXJkQWN0aW9uSW5zaWdodHMiLCJnZXRDcmVhdGlvblJvdyIsImNvbmZpZ3VyYXRpb24iLCJnZXRTdGFuZGFyZEFjdGlvbk1vdmVVcERvd24iLCJ0eXBlTmFtZVBsdXJhbCIsIlR5cGVOYW1lUGx1cmFsIiwicGFnZU1hbmlmZXN0U2V0dGluZ3MiLCJoYXNBYnNvbHV0ZVBhdGgiLCJwMTNuTW9kZSIsImdldFRhYmxlSUQiLCJ0aHJlc2hvbGQiLCJNYXhJdGVtcyIsImlzU2VhcmNoYWJsZSIsImlzUGF0aFNlYXJjaGFibGUiLCJhcGlJZCIsImVudGl0eU5hbWUiLCJlbnRpdHlUeXBlTmFtZSIsImNvbGxlY3Rpb24iLCJnZXRUYXJnZXRPYmplY3RQYXRoIiwicm93IiwiZGlzcGxheU1vZGUiLCJpc0luRGlzcGxheU1vZGUiLCJzZWFyY2hhYmxlIiwiaW5pdGlhbEV4cGFuc2lvbkxldmVsIiwicmVxdWlyZWRQcm9wZXJ0aWVzIiwiZ2V0UmVxdWlyZWRQcm9wZXJ0aWVzIiwidGFyZ2V0TmF2aWdhdGlvblByb3BlcnR5UGF0aCIsImxhc3RJbmRleE9mIiwiZ2V0U2VsZWN0aW9uVmFyaWFudENvbmZpZ3VyYXRpb24iLCJzZWxlY3Rpb25WYXJpYW50UGF0aCIsInJlc29sdmVkVGFyZ2V0IiwiZ2V0RW50aXR5VHlwZUFubm90YXRpb24iLCJzZWxlY3Rpb24iLCJwcm9wZXJ0eU5hbWVzIiwiU2VsZWN0T3B0aW9ucyIsInNlbGVjdE9wdGlvbiIsIlByb3BlcnR5TmFtZSIsIlRleHQiLCJfZ2V0RnVsbFNjcmVlbkJhc2VkT25EZXZpY2UiLCJpc0lwaG9uZSIsImVuYWJsZUZ1bGxTY3JlZW4iLCJnZXREaWFnbm9zdGljcyIsImFkZElzc3VlIiwiSXNzdWVDYXRlZ29yeSIsIk1hbmlmZXN0IiwiSXNzdWVTZXZlcml0eSIsIkxvdyIsIklzc3VlVHlwZSIsIkZVTExTQ1JFRU5NT0RFX05PVF9PTl9MSVNUUkVQT1JUIiwiX2dldE11bHRpU2VsZWN0TW9kZSIsIm11bHRpU2VsZWN0TW9kZSIsInNlbGVjdEFsbCIsInVzZUljb25UYWJCYXIiLCJfZ2V0VGFibGVNb2RlIiwiaXNUZW1wbGF0ZUxpc3RSZXBvcnQiLCJyb3dDb3VudE1vZGUiLCJyb3dDb3VudCIsIl9nZXRDb25kZW5zZWRUYWJsZUxheW91dCIsIl90YWJsZVR5cGUiLCJfdGFibGVTZXR0aW5ncyIsImNvbmRlbnNlZFRhYmxlTGF5b3V0IiwiX2dldFRhYmxlU2VsZWN0aW9uTGltaXQiLCJzZWxlY3Rpb25MaW1pdCIsIl9nZXRUYWJsZUlubGluZUNyZWF0aW9uUm93Q291bnQiLCJpbmxpbmVDcmVhdGlvblJvd0NvdW50IiwiX2dldEVuYWJsZUV4cG9ydCIsImVuYWJsZVBhc3RlIiwiZW5hYmxlRXhwb3J0IiwiX2dldEZyb3plbkNvbHVtbkNvdW50IiwiZnJvemVuQ29sdW1uQ291bnQiLCJfZ2V0V2lkdGhJbmNsdWRpbmdDb2x1bW5IZWFkZXIiLCJ3aWR0aEluY2x1ZGluZ0NvbHVtbkhlYWRlciIsImdldEZpbHRlckNvbmZpZ3VyYXRpb24iLCJoaWRlVGFibGVUaXRsZSIsImZpbHRlcnMiLCJxdWlja1ZhcmlhbnRTZWxlY3Rpb24iLCJxdWlja0ZpbHRlclBhdGhzIiwiZmlsdGVyUGF0aHMiLCJxdWlja0ZpbHRlcnMiLCJzaG93Q291bnRzIiwiaGlkZGVuRmlsdGVycyIsInNFbnRpdHlUeXBlIiwidXNlRW5hYmxlZEV4cHJlc3Npb24iLCJPcGVyYXRpb25BdmFpbGFibGUiLCJvdmVybG9hZEFjdGlvbiIsInNvdXJjZVR5cGUiLCJzdGF0aWNBY3Rpb24iLCJwYXJhbWV0ZXJzIiwiaXNDb2xsZWN0aW9uIiwidXBkYXRlVHJlZVRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uIiwidGFibGVDb25maWd1cmF0aW9uIiwiZGF0YU1vZGVsT2JqZWN0UGF0aCIsImhpZXJhcmNoeVBhcmVudE5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgiLCJnZXRIaWVyYXJjaHlQYXJlbnROYXZpZ2F0aW9uUHJvcGVydHlQYXRoIiwibm9uVXBkYXRhYmxlTmF2aWdhdGlvblByb3BlcnRpZXMiLCJnZXROb25VcGRhdGFibGVOYXZpZ2F0aW9uUHJvcGVydGllcyIsImlzSGllcmFyY2h5UGFyZW50Tm9kZVVwZGF0YWJsZSIsImlzTm9kZU1vdmFibGUiLCJnZXRDdXN0b21GdW5jdGlvbkluZm8iLCJpc05vZGVDb3B5YWJsZSIsImlzTW92ZVRvUG9zaXRpb25BbGxvd2VkIiwiaXNDb3B5VG9Qb3NpdGlvbkFsbG93ZWQiLCJjcmVhdGVFbmFibGVtZW50IiwiaXNDcmVhdGVFbmFibGVkIiwibm9kZVR5cGUiLCJub2RlVHlwZUluZm8iLCJjcmVhdGlvbkRpYWxvZ0ZpZWxkcyIsImdldEZpZWxkTGlzdCIsImNyZWF0aW9uRmllbGRzIiwiY3JlYXRlSW5QbGFjZSIsImxhc3REb3RJbmRleCIsIm1vZHVsZU5hbWUiLCJyZXBsYWNlIiwibWV0aG9kTmFtZSIsImFkZGl0aW9uYWxSZXF1aXJlZE1vZHVsZXMiLCJnZXRPcHRpbWlzdGljQmF0Y2hTZXR0aW5nc0Zyb21NYW5pZmVzdCIsImRpc2FibGVSZXF1ZXN0Q2FjaGUiLCJnZXRNYXNzRWRpdFNldHRpbmdzIiwiZGVmYXVsdEZpZWxkQ29uZmlndXJhdGlvbiIsInZpc2libGVGaWVsZHMiLCJpZ25vcmVkRmllbGRzIiwib3BlcmF0aW9uR3JvdXBpbmdNb2RlIiwiT3BlcmF0aW9uR3JvdXBpbmdNb2RlIiwiSXNvbGF0ZWQiLCJDaGFuZ2VTZXQiLCJlbmFibGVNYXNzRWRpdCIsImN1c3RvbUZyYWdtZW50IiwiZnJvbUlubGluZSIsImZpZWxkR3JvdXAiLCJpc0Fubm90YXRpb25PZlR5cGUiLCJEYXRhIiwiaXNEYXRhRmllbGQiLCJ0cmltIiwiY2hlY2tDb25kZW5zZWRMYXlvdXQiLCJfbWFuaWZlc3RXcmFwcGVyIiwiZ2xvYmFsRkVNYW5pZmVzdFNldHRpbmdzIiwiZ2V0U2FwRmVNYW5pZmVzdENvbmZpZ3VyYXRpb24iLCJkZWZhdWx0Q3JlYXRpb25Nb2RlIiwibWFjcm9zIiwidGFibGUiLCJJbmxpbmVDcmVhdGlvblJvd3MiLCJlbmFibGVBdXRvQ29sdW1uV2lkdGgiLCJpc1Bob25lIiwiZGlzYWJsZUNvcHlUb0NsaXBib2FyZCIsInRlbXBsYXRlVHlwZSIsImlzQ29uZGVuc2VkTGF5b3V0Q29tcGxpYW50Iiwib0ZpbHRlckNvbmZpZ3VyYXRpb24iLCJjdXN0b21WYWxpZGF0aW9uRnVuY3Rpb24iLCJleHBvcnRSZXF1ZXN0U2l6ZSIsImdldFRhYmxlVHlwZSIsInRhYmxlUm93TW9kZSIsImRlZmF1bHRTY3JvbGxUaHJlc2hvbGQiLCJpbmxpbmVDcmVhdGlvblJvd3NIaWRkZW5JbkVkaXRNb2RlIiwidXNlVGV4dEZvck5vRGF0YU1lc3NhZ2VzIiwiZ2V0VXNlVGV4dEZvck5vRGF0YU1lc3NhZ2VzIiwib0NvbmZpZ3VyYXRpb24iLCJoYXNEYXRhU3RhdGVJbmRpY2F0b3JGaWx0ZXIiLCJkaXNhYmxlQWRkUm93QnV0dG9uRm9yRW1wdHlEYXRhIiwiZW5hYmxlUGFzdGluZ09mQ29tcHV0ZWRQcm9wZXJ0aWVzIiwicmVhZE9ubHkiLCJlbmFibGVBZGRDYXJkVG9JbnNpZ2h0cyIsInNob3dSb3dDb3VudCIsImdldFZpZXdDb25maWd1cmF0aW9uIiwidXNlQ29uZGVuc2VkVGFibGVMYXlvdXQiLCJpc0NvbXBhY3RUeXBlIiwibW9kZUZvck5vRGF0YU1lc3NhZ2UiLCJzY3JvbGxUaHJlc2hvbGQiLCJiZWZvcmVSZWJpbmRUYWJsZSIsInNlbGVjdGlvbkNoYW5nZSIsInJvd1ByZXNzIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJUYWJsZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEVudGl0eVNldCwgRW50aXR5VHlwZSwgUGF0aEFubm90YXRpb25FeHByZXNzaW9uLCBQcm9wZXJ0eUFubm90YXRpb25WYWx1ZSwgUHJvcGVydHlQYXRoIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzXCI7XG5pbXBvcnQgdHlwZSB7IEVudGl0eVNldEFubm90YXRpb25zX0NvbW1vbiB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvQ29tbW9uX0VkbVwiO1xuaW1wb3J0IHR5cGUgeyBFbnRpdHlTZXRBbm5vdGF0aW9uc19TZXNzaW9uIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9TZXNzaW9uX0VkbVwiO1xuaW1wb3J0IHR5cGUge1xuXHRDcml0aWNhbGl0eSxcblx0RGF0YUZpZWxkQWJzdHJhY3RUeXBlcyxcblx0RGF0YUZpZWxkRm9yQWN0aW9uLFxuXHREYXRhRmllbGRGb3JBY3Rpb25BYnN0cmFjdFR5cGVzLFxuXHREYXRhRmllbGRGb3JBY3Rpb25Hcm91cCxcblx0RGF0YUZpZWxkRm9yQWN0aW9uVHlwZXMsXG5cdERhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbixcblx0RGF0YUZpZWxkVHlwZXMsXG5cdEZpZWxkR3JvdXAsXG5cdExpbmVJdGVtLFxuXHRQcmVzZW50YXRpb25WYXJpYW50VHlwZSxcblx0U2VsZWN0T3B0aW9uVHlwZSxcblx0U2VsZWN0aW9uVmFyaWFudCxcblx0U2VsZWN0aW9uVmFyaWFudFR5cGVcbn0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9VSVwiO1xuaW1wb3J0IHsgVUlBbm5vdGF0aW9uVGVybXMsIFVJQW5ub3RhdGlvblR5cGVzIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9VSVwiO1xuaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgdHlwZSB7IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiwgQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24gfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCB7XG5cdGFuZCxcblx0Y29tcGlsZUV4cHJlc3Npb24sXG5cdGNvbnN0YW50LFxuXHRlcXVhbCxcblx0Zm9ybWF0UmVzdWx0LFxuXHRnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24sXG5cdGlmRWxzZSxcblx0aXNDb25zdGFudCxcblx0bm90LFxuXHRvcixcblx0cGF0aEluTW9kZWwsXG5cdHJlc29sdmVCaW5kaW5nU3RyaW5nXG59IGZyb20gXCJzYXAvZmUvYmFzZS9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0IHR5cGUgeyBQYWdlQ29udGV4dFBhdGhUYXJnZXQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9UZW1wbGF0ZUNvbnZlcnRlclwiO1xuaW1wb3J0IHtcblx0aXNEYXRhRmllbGQsXG5cdGlzRGF0YUZpZWxkRm9yQWN0aW9uQWJzdHJhY3QsXG5cdGlzRGF0YUZpZWxkRm9yQWN0aW9uR3JvdXAsXG5cdHZpc2libGVFeHByZXNzaW9uXG59IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2Fubm90YXRpb25zL0RhdGFGaWVsZFwiO1xuaW1wb3J0IHR5cGUge1xuXHRBbm5vdGF0aW9uQWN0aW9uLFxuXHRBbm5vdGF0aW9uQWN0aW9uR3JvdXAsXG5cdEJhc2VBY3Rpb24sXG5cdENvbWJpbmVkQWN0aW9uLFxuXHRDdXN0b21BY3Rpb24sXG5cdE92ZXJyaWRlVHlwZUFjdGlvblxufSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9Db21tb24vQWN0aW9uXCI7XG5pbXBvcnQge1xuXHRhZGRDb2xsYWJvcmF0aW9uQ29uZGl0aW9uLFxuXHRkYXRhRmllbGRJc0NvcHlBY3Rpb24sXG5cdGdldEFjdGlvbnNGcm9tTWFuaWZlc3QsXG5cdGdldEFubm90YXRpb25NZW51QWN0aW9uSXRlbXMsXG5cdGdldENvcHlBY3Rpb24sXG5cdGdldEVuYWJsZWRGb3JBbm5vdGF0aW9uQWN0aW9uLFxuXHRnZXRNYXRjaGluZ01hbmlmZXN0QWN0aW9uLFxuXHRnZXRWaXNpYmlsaXR5RW5hYmxlbWVudE1lbnVBY3Rpb25zLFxuXHRpc0FjdGlvbkFJT3BlcmF0aW9uLFxuXHRpc01lbnVBSU9wZXJhdGlvbixcblx0cHJlcGFyZU1lbnVBY3Rpb25zLFxuXHRyZW1vdmVEdXBsaWNhdGVBY3Rpb25zXG59IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0NvbW1vbi9BY3Rpb25cIjtcbmltcG9ydCB7IE92ZXJyaWRlVHlwZSwgUGxhY2VtZW50LCBpbnNlcnRDdXN0b21FbGVtZW50cyB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2hlbHBlcnMvQ29uZmlndXJhYmxlT2JqZWN0XCI7XG5pbXBvcnQgeyBJc3N1ZUNhdGVnb3J5LCBJc3N1ZVNldmVyaXR5LCBJc3N1ZVR5cGUgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9oZWxwZXJzL0lzc3VlTWFuYWdlclwiO1xuaW1wb3J0IHsgS2V5SGVscGVyIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvaGVscGVycy9LZXlcIjtcbmltcG9ydCB7IEVudGl0eSwgVUkgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9CaW5kaW5nSGVscGVyXCI7XG5pbXBvcnQgTW9kZWxIZWxwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvTW9kZWxIZWxwZXJcIjtcbmltcG9ydCB7IGdlbmVyYXRlIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvU3RhYmxlSWRIZWxwZXJcIjtcbmltcG9ydCB7IGlzQW5ub3RhdGlvbk9mVHlwZSwgaXNOYXZpZ2F0aW9uUHJvcGVydHksIGlzUGF0aEFubm90YXRpb25FeHByZXNzaW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvVHlwZUd1YXJkc1wiO1xuaW1wb3J0IHsgY3JpdGljYWxpdHlFeHByZXNzaW9uRm9ySW50ZWdyYXRpb25DYXJkcyB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0NyaXRpY2FsaXR5Rm9ybWF0dGVyc1wiO1xuaW1wb3J0IHtcblx0Z2V0SGllcmFyY2h5UGFyZW50TmF2aWdhdGlvblByb3BlcnR5UGF0aCxcblx0Z2V0Tm9uVXBkYXRhYmxlTmF2aWdhdGlvblByb3BlcnRpZXMsXG5cdGdldFRhcmdldE9iamVjdFBhdGgsXG5cdGlzUGF0aERlbGV0YWJsZSxcblx0aXNQYXRoU2VhcmNoYWJsZSxcblx0aXNQYXRoVXBkYXRhYmxlLFxuXHR0eXBlIERhdGFNb2RlbE9iamVjdFBhdGhcbn0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvRGF0YU1vZGVsUGF0aEhlbHBlclwiO1xuaW1wb3J0IHsgZ2V0UmVzdHJpY3Rpb25zT25Qcm9wZXJ0aWVzIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvRW50aXR5U2V0SGVscGVyXCI7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXJlc3RyaWN0ZWQtaW1wb3J0c1xuaW1wb3J0IHRhYmxlRm9ybWF0dGVycyBmcm9tIFwic2FwL2ZlL21hY3Jvcy9mb3JtYXR0ZXJzL1RhYmxlRm9ybWF0dGVyXCI7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXJlc3RyaWN0ZWQtaW1wb3J0c1xuaW1wb3J0IEFjdGlvbkhlbHBlciBmcm9tIFwic2FwL2ZlL21hY3Jvcy9pbnRlcm5hbC9oZWxwZXJzL0FjdGlvbkhlbHBlclwiO1xuaW1wb3J0IExpYnJhcnkgZnJvbSBcInNhcC91aS9jb3JlL0xpYlwiO1xuaW1wb3J0IE1lc3NhZ2VUeXBlIGZyb20gXCJzYXAvdWkvY29yZS9tZXNzYWdlL01lc3NhZ2VUeXBlXCI7XG5pbXBvcnQgdHlwZSBGb3JtQ29udGFpbmVyIGZyb20gXCJzYXAvdWkvbGF5b3V0L2Zvcm0vRm9ybUNvbnRhaW5lclwiO1xuaW1wb3J0IHR5cGUgQ29udmVydGVyQ29udGV4dCBmcm9tIFwiLi4vLi4vQ29udmVydGVyQ29udGV4dFwiO1xuaW1wb3J0IHR5cGUge1xuXHRNYW5pZmVzdEFjdGlvbixcblx0TmF2aWdhdGlvblNldHRpbmdzQ29uZmlndXJhdGlvbixcblx0TmF2aWdhdGlvblRhcmdldENvbmZpZ3VyYXRpb24sXG5cdFRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uLFxuXHRUYWJsZU1hbmlmZXN0U2V0dGluZ3NDb25maWd1cmF0aW9uXG59IGZyb20gXCIuLi8uLi9NYW5pZmVzdFNldHRpbmdzXCI7XG5pbXBvcnQge1xuXHRBY3Rpb25UeXBlLFxuXHRDcmVhdGlvbk1vZGUsXG5cdE9wZXJhdGlvbkdyb3VwaW5nTW9kZSxcblx0U2VsZWN0aW9uTW9kZSxcblx0VGVtcGxhdGVUeXBlLFxuXHRWYXJpYW50TWFuYWdlbWVudFR5cGUsXG5cdFZpc3VhbGl6YXRpb25UeXBlXG59IGZyb20gXCIuLi8uLi9NYW5pZmVzdFNldHRpbmdzXCI7XG5pbXBvcnQgdHlwZSBNYW5pZmVzdFdyYXBwZXIgZnJvbSBcIi4uLy4uL01hbmlmZXN0V3JhcHBlclwiO1xuaW1wb3J0IHsgQWdncmVnYXRpb25IZWxwZXIgfSBmcm9tIFwiLi4vLi4vaGVscGVycy9BZ2dyZWdhdGlvblwiO1xuaW1wb3J0IHsgZ2V0VGFibGVJRCB9IGZyb20gXCIuLi8uLi9oZWxwZXJzL0lEXCI7XG5pbXBvcnQgeyBnZXRNZXNzYWdlVHlwZUZyb21Dcml0aWNhbGl0eVR5cGUgfSBmcm9tIFwiLi9Dcml0aWNhbGl0eVwiO1xuaW1wb3J0IHtcblx0Q29sdW1uVHlwZSxcblx0ZmluZENvbHVtbkJ5UGF0aCxcblx0Z2V0Q29sdW1uc0Zyb21FbnRpdHlUeXBlLFxuXHRnZXRSZXF1aXJlZFByb3BlcnRpZXMsXG5cdGdldFRhYmxlQ29sdW1ucyxcblx0dXBkYXRlTGlua2VkUHJvcGVydGllcyxcblx0dHlwZSBBbm5vdGF0aW9uVGFibGVDb2x1bW4sXG5cdHR5cGUgRXh0ZW5zaW9uRm9yQW5hbHl0aWNzLFxuXHR0eXBlIFRhYmxlQ29sdW1uXG59IGZyb20gXCIuL3RhYmxlL0NvbHVtbnNcIjtcbmltcG9ydCB0eXBlIHsgU3RhbmRhcmRBY3Rpb24gfSBmcm9tIFwiLi90YWJsZS9TdGFuZGFyZEFjdGlvbnNcIjtcbmltcG9ydCB7XG5cdFN0YW5kYXJkQWN0aW9uS2V5cyxcblx0Z2VuZXJhdGVTdGFuZGFyZEFjdGlvbnNDb250ZXh0LFxuXHRnZXRDcmVhdGlvblJvdyxcblx0Z2V0Q3V0VmlzaWJpbGl0eSxcblx0Z2V0RGVsZXRlVmlzaWJpbGl0eSxcblx0Z2V0SW5zZXJ0VXBkYXRlQWN0aW9uc1RlbXBsYXRpbmcsXG5cdGdldE1hc3NFZGl0VmlzaWJpbGl0eSxcblx0Z2V0UmVzdHJpY3Rpb25zLFxuXHRnZXRTdGFuZGFyZEFjdGlvbkNvcHksXG5cdGdldFN0YW5kYXJkQWN0aW9uQ3JlYXRlLFxuXHRnZXRTdGFuZGFyZEFjdGlvbkN1dCxcblx0Z2V0U3RhbmRhcmRBY3Rpb25EZWxldGUsXG5cdGdldFN0YW5kYXJkQWN0aW9uSW5zaWdodHMsXG5cdGdldFN0YW5kYXJkQWN0aW9uTWFzc0VkaXQsXG5cdGdldFN0YW5kYXJkQWN0aW9uTW92ZVVwRG93bixcblx0Z2V0U3RhbmRhcmRBY3Rpb25QYXN0ZSxcblx0aXNEcmFmdE9yU3RpY2t5U3VwcG9ydGVkLFxuXHRpc0luRGlzcGxheU1vZGVcbn0gZnJvbSBcIi4vdGFibGUvU3RhbmRhcmRBY3Rpb25zXCI7XG5cbnR5cGUgVXBsb2FkVGFibGVTZXR0aW5ncyA9IHtcblx0c3RyZWFtOiBzdHJpbmc7XG5cdGZpbGVOYW1lPzogc3RyaW5nO1xuXHRmaWxlTmFtZU1heExlbmd0aD86IGludDtcblx0YWNjZXB0YWJsZU1lZGlhVHlwZXM/OiBzdHJpbmdbXTtcblx0bWF4TGVuZ3RoPzogaW50O1xuXHR1cGxvYWRBY3Rpb24/OiBTdGFuZGFyZEFjdGlvbjtcbn07XG5cbnR5cGUgUm93TmF2aWdhdGlvbkluZm8gPVxuXHR8IHtcblx0XHRcdHR5cGU6IFwiT3V0Ym91bmRcIjtcblx0XHRcdG5hdmlnYXRpb25UYXJnZXQ6IHN0cmluZztcblx0XHRcdG5hdmlnYXRpb25JbkVkaXRNb2RlPzogYm9vbGVhbjtcblx0ICB9XG5cdHwge1xuXHRcdFx0dHlwZTogXCJOYXZpZ2F0aW9uXCI7XG5cdFx0XHR0YXJnZXRQYXRoOiBzdHJpbmc7XG5cdFx0XHRjaGVja0VkaXRhYmxlOiBib29sZWFuO1xuXHRcdFx0cmVjcmVhdGVDb250ZXh0OiBib29sZWFuO1xuXHRcdFx0cm91dGVQYXRoOiBzdHJpbmc7XG5cdFx0XHRuYXZpZ2F0aW9uSW5FZGl0TW9kZT86IGJvb2xlYW47XG5cdCAgfTtcblxudHlwZSBSb3dDb25maWd1cmF0aW9uID0ge1xuXHRhY3Rpb25UeXBlPzogc3RyaW5nO1xuXHRuYXZpZ2F0aW9uSW5mbz86IFJvd05hdmlnYXRpb25JbmZvO1xuXHRyb3dIaWdobGlnaHRpbmc6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uO1xuXHRyb3dOYXZpZ2F0ZWQ6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uO1xuXHRyb3dDcml0aWNhbGl0eUZvckluc2lnaHRzPzogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb247XG5cdHZpc2libGU/OiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjtcbn07XG5cbmV4cG9ydCB0eXBlIE1hc3NFZGl0VGFibGVDb25maWd1cmF0aW9uID0ge1xuXHRlbmFibGVkOiBib29sZWFuO1xuXHR2aXNpYmxlRmllbGRzOiBzdHJpbmdbXTtcblx0aWdub3JlZEZpZWxkczogc3RyaW5nW107XG5cdG9wZXJhdGlvbkdyb3VwaW5nTW9kZTogT3BlcmF0aW9uR3JvdXBpbmdNb2RlO1xuXHRjdXN0b21GcmFnbWVudD86IHN0cmluZyB8IEZvcm1Db250YWluZXI7XG5cdGZyb21JbmxpbmU/OiBib29sZWFuO1xufTtcblxudHlwZSBUYWJsZVNvcnRDb25kaXRpb25zID0ge1xuXHRzb3J0ZXJzOiB7XG5cdFx0bmFtZTogc3RyaW5nO1xuXHRcdGRlc2NlbmRpbmc6IGJvb2xlYW47XG5cdH1bXTtcbn07XG5cbnR5cGUgVGFibGVHcm91cENvbmRpdGlvbnMgPSB7XG5cdGdyb3VwTGV2ZWxzOiB7IG5hbWU6IHN0cmluZyB9W107XG59O1xuXG50eXBlIFRhYmxlQWdncmVnYXRlQ29uZGl0aW9ucyA9IFJlY29yZDxzdHJpbmcsIG9iamVjdD47XG5cbnR5cGUgVGFibGVQMTNuTW9kZSA9IFwiQWdncmVnYXRlXCIgfCBcIkNvbHVtblwiIHwgXCJGaWx0ZXJcIiB8IFwiR3JvdXBcIiB8IFwiU29ydFwiO1xuXG5leHBvcnQgdHlwZSBBbmFseXRpY2FsQ29uZmlndXJhdGlvbiA9IHtcblx0YWdncmVnYXRpb25PbkxlYWZMZXZlbD86IGJvb2xlYW47XG59O1xuXG5leHBvcnQgdHlwZSBUYWJsZUFubm90YXRpb25Db25maWd1cmF0aW9uID0ge1xuXHRjb2xsZWN0aW9uOiBzdHJpbmc7XG5cdHZhcmlhbnRNYW5hZ2VtZW50OiBWYXJpYW50TWFuYWdlbWVudFR5cGU7XG5cdGZpbHRlcklkPzogc3RyaW5nO1xuXHRpZDogc3RyaW5nO1xuXHRhcGlJZDogc3RyaW5nO1xuXHRuYXZpZ2F0aW9uUGF0aDogc3RyaW5nO1xuXHRwMTNuTW9kZT86IFRhYmxlUDEzbk1vZGVbXTtcblx0cm93PzogUm93Q29uZmlndXJhdGlvbjtcblx0c2VsZWN0aW9uTW9kZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXHRpc0luc2VydFVwZGF0ZUFjdGlvbnNUZW1wbGF0ZWQ6IGJvb2xlYW47XG5cdHVwZGF0YWJsZVByb3BlcnR5UGF0aDogc3RyaW5nO1xuXHRkaXNwbGF5TW9kZT86IGJvb2xlYW47XG5cdHRocmVzaG9sZDogbnVtYmVyO1xuXHRlbnRpdHlOYW1lOiBzdHJpbmc7XG5cdGVudGl0eVR5cGVOYW1lOiBzdHJpbmc7XG5cdHNvcnRDb25kaXRpb25zPzogVGFibGVTb3J0Q29uZGl0aW9ucztcblx0Z3JvdXBDb25kaXRpb25zPzogVGFibGVHcm91cENvbmRpdGlvbnM7XG5cdGFnZ3JlZ2F0ZUNvbmRpdGlvbnM/OiBUYWJsZUFnZ3JlZ2F0ZUNvbmRpdGlvbnM7XG5cdGluaXRpYWxFeHBhbnNpb25MZXZlbD86IG51bWJlcjtcblx0YWxsb3dEcm9wQmV0d2Vlbk5vZGVzPzogYm9vbGVhbjtcblx0Y2hhbmdlU2libGluZ0ZvclJvb3RzU3VwcG9ydGVkPzogYm9vbGVhbjtcblx0LyoqIENyZWF0ZSBuZXcgZW50cmllcyAqL1xuXHRjcmVhdGU6IENyZWF0ZUJlaGF2aW9yIHwgQ3JlYXRlQmVoYXZpb3JFeHRlcm5hbDtcblx0dGl0bGU6IHN0cmluZyB8IHVuZGVmaW5lZDtcblx0c2VhcmNoYWJsZTogYm9vbGVhbjtcblx0cmVxdWlyZWRQcm9wZXJ0aWVzPzogc3RyaW5nW107XG5cdHVwbG9hZFRhYmxlPzogVXBsb2FkVGFibGVTZXR0aW5ncztcbn07XG4vKipcbiAqIE5ldyBlbnRyaWVzIGFyZSBjcmVhdGVkIHdpdGhpbiB0aGUgYXBwIChkZWZhdWx0IGNhc2UpXG4gKi9cbmV4cG9ydCB0eXBlIENyZWF0ZUJlaGF2aW9yID0ge1xuXHRtb2RlOiBDcmVhdGlvbk1vZGU7XG5cdGFwcGVuZDogYm9vbGVhbjtcblx0bmV3QWN0aW9uPzogc3RyaW5nO1xuXHRuYXZpZ2F0ZVRvVGFyZ2V0Pzogc3RyaW5nO1xufTtcblxuZXhwb3J0IHR5cGUgRXh0ZXJuYWxNZXRob2RDb25maWcgPSB7XG5cdG1vZHVsZU5hbWU6IHN0cmluZztcblx0bWV0aG9kTmFtZTogc3RyaW5nO1xufTtcbi8qKlxuICogTmV3IGVudHJpZXMgYXJlIGNyZWF0ZWQgYnkgbmF2aWdhdGluZyB0byBzb21lIHRhcmdldFxuICovXG5leHBvcnQgdHlwZSBDcmVhdGVCZWhhdmlvckV4dGVybmFsID0ge1xuXHRtb2RlOiBcIkV4dGVybmFsXCI7XG5cdG91dGJvdW5kOiBzdHJpbmc7XG5cdG91dGJvdW5kRGV0YWlsOiBOYXZpZ2F0aW9uVGFyZ2V0Q29uZmlndXJhdGlvbltcIm91dGJvdW5kRGV0YWlsXCJdO1xufTtcbmV4cG9ydCB0eXBlIFRhYmxlQ2FwYWJpbGl0eVJlc3RyaWN0aW9uID0ge1xuXHRpc0RlbGV0YWJsZTogYm9vbGVhbjtcblx0aXNVcGRhdGFibGU6IGJvb2xlYW47XG59O1xuZXhwb3J0IHR5cGUgVGFibGVGaWx0ZXJzQ29uZmlndXJhdGlvbiA9IHtcblx0cGF0aHM6IHtcblx0XHRhbm5vdGF0aW9uUGF0aDogc3RyaW5nO1xuXHR9W107XG5cdHNob3dDb3VudHM/OiBib29sZWFuO1xufTtcbmV4cG9ydCB0eXBlIFNlbGVjdGlvblZhcmlhbnRDb25maWd1cmF0aW9uID0ge1xuXHRwcm9wZXJ0eU5hbWVzOiBzdHJpbmdbXTtcblx0dGV4dD86IHN0cmluZztcbn07XG5cbmV4cG9ydCB0eXBlIFRhYmxlQ29udHJvbENvbmZpZ3VyYXRpb24gPSB7XG5cdGRpc2FibGVSZXF1ZXN0Q2FjaGU/OiBib29sZWFuO1xuXHRjcmVhdGVBdEVuZDogYm9vbGVhbjtcblx0Y3JlYXRlSW5QbGFjZT86IGJvb2xlYW47XG5cdGNyZWF0aW9uTW9kZTogQ3JlYXRpb25Nb2RlO1xuXHRvdXRib3VuZENyZWF0aW9uPzogc3RyaW5nO1xuXHRkaXNhYmxlQWRkUm93QnV0dG9uRm9yRW1wdHlEYXRhOiBib29sZWFuO1xuXHRjdXN0b21WYWxpZGF0aW9uRnVuY3Rpb246IHN0cmluZyB8IHVuZGVmaW5lZDtcblx0dXNlQ29uZGVuc2VkVGFibGVMYXlvdXQ6IGJvb2xlYW47XG5cdGVuYWJsZUV4cG9ydDogYm9vbGVhbjtcblx0ZW5hYmxlUGFzdGluZ09mQ29tcHV0ZWRQcm9wZXJ0aWVzPzogYm9vbGVhbjtcblx0ZnJvemVuQ29sdW1uQ291bnQ/OiBudW1iZXI7XG5cdHdpZHRoSW5jbHVkaW5nQ29sdW1uSGVhZGVyPzogYm9vbGVhbjtcblx0aGVhZGVyPzogc3RyaW5nO1xuXHRoZWFkZXJWaXNpYmxlPzogYm9vbGVhbjtcblx0ZmlsdGVycz86IFBhcnRpYWw8UmVjb3JkPFwicXVpY2tGaWx0ZXJzXCIgfCBcImhpZGRlbkZpbHRlcnNcIiwgVGFibGVGaWx0ZXJzQ29uZmlndXJhdGlvbj4+O1xuXHR0eXBlOiBUYWJsZVR5cGU7XG5cdHJvd0NvdW50TW9kZT86IFRhYmxlUm93Q291bnRNb2RlO1xuXHRyb3dDb3VudD86IG51bWJlcjtcblx0c2Nyb2xsVGhyZXNob2xkPzogbnVtYmVyO1xuXHRzZWxlY3RBbGw/OiBib29sZWFuO1xuXHRzZWxlY3Rpb25MaW1pdDogbnVtYmVyO1xuXHRtdWx0aVNlbGVjdE1vZGU6IHN0cmluZyB8IHVuZGVmaW5lZDtcblx0ZW5hYmxlUGFzdGU6IGJvb2xlYW47XG5cdGlnbm9yZWRGaWVsZHM/OiBzdHJpbmc7XG5cdHJlYWRPbmx5PzogYm9vbGVhbjtcblx0ZGlzYWJsZUNvcHlUb0NsaXBib2FyZD86IGJvb2xlYW47XG5cdGVuYWJsZUZ1bGxTY3JlZW46IGJvb2xlYW47XG5cdHNob3dSb3dDb3VudDogYm9vbGVhbjtcblx0aW5saW5lQ3JlYXRpb25Sb3dDb3VudD86IG51bWJlcjtcblx0aW5saW5lQ3JlYXRpb25Sb3dzSGlkZGVuSW5FZGl0TW9kZT86IGJvb2xlYW47XG5cdG1hc3NFZGl0OiBNYXNzRWRpdFRhYmxlQ29uZmlndXJhdGlvbjtcblx0ZW5hYmxlQXV0b0NvbHVtbldpZHRoOiBib29sZWFuO1xuXHRoYXNEYXRhU3RhdGVJbmRpY2F0b3JGaWx0ZXI6IGJvb2xlYW47XG5cdGlzQ29tcGFjdFR5cGU/OiBib29sZWFuO1xuXHRoaWVyYXJjaHlRdWFsaWZpZXI/OiBzdHJpbmc7XG5cdGlzSGllcmFyY2h5UGFyZW50Tm9kZVVwZGF0YWJsZT86IGJvb2xlYW47XG5cdGVuYWJsZUFkZENhcmRUb0luc2lnaHRzPzogYm9vbGVhbiB8IHVuZGVmaW5lZDtcblx0Y3JlYXRpb25EaWFsb2dGaWVsZHM/OiBzdHJpbmdbXTtcblx0bm9kZVR5cGU/OiB7XG5cdFx0cHJvcGVydHlOYW1lOiBzdHJpbmc7XG5cdFx0dmFsdWVzOiB7IHZhbHVlOiBzdHJpbmc7IHRleHQ6IHN0cmluZzsgY3JlYXRpb25EaWFsb2dGaWVsZHM/OiBzdHJpbmdbXSB9W107XG5cdH07XG5cdGNyZWF0ZUVuYWJsZW1lbnQ/OiBFeHRlcm5hbE1ldGhvZENvbmZpZztcblx0aXNOb2RlTW92YWJsZT86IEV4dGVybmFsTWV0aG9kQ29uZmlnO1xuXHRpc05vZGVDb3B5YWJsZT86IEV4dGVybmFsTWV0aG9kQ29uZmlnO1xuXHRpc01vdmVUb1Bvc2l0aW9uQWxsb3dlZD86IEV4dGVybmFsTWV0aG9kQ29uZmlnO1xuXHRpc0NvcHlUb1Bvc2l0aW9uQWxsb3dlZD86IEV4dGVybmFsTWV0aG9kQ29uZmlnO1xuXHRzZWxlY3Rpb25DaGFuZ2U/OiBzdHJpbmc7XG5cdGFkZGl0aW9uYWxSZXF1aXJlZE1vZHVsZXM/OiBzdHJpbmdbXTtcblx0cm93UHJlc3M/OiBzdHJpbmc7XG5cdGJlZm9yZVJlYmluZFRhYmxlPzogc3RyaW5nO1xuXHRleHBvcnRSZXF1ZXN0U2l6ZT86IG51bWJlcjtcblx0ZW5hYmxlVXBsb2FkUGx1Z2luPzogYm9vbGVhbjtcblx0bW9kZUZvck5vRGF0YU1lc3NhZ2U/OiBzdHJpbmc7XG5cdGFuYWx5dGljYWxDb25maWd1cmF0aW9uPzogQW5hbHl0aWNhbENvbmZpZ3VyYXRpb247XG59O1xuZXhwb3J0IHR5cGUgVGFibGVUeXBlID0gXCJHcmlkVGFibGVcIiB8IFwiUmVzcG9uc2l2ZVRhYmxlXCIgfCBcIkFuYWx5dGljYWxUYWJsZVwiIHwgXCJUcmVlVGFibGVcIjtcbmV4cG9ydCB0eXBlIFRhYmxlUm93Q291bnRNb2RlID0gXCJBdXRvXCIgfCBcIkZpeGVkXCIgfCBcIkludGVyYWN0aXZlXCI7XG5cbmV4cG9ydCB0eXBlIEludGVybmFsRXh0ZW5zaW9uRm9yQW5hbHl0aWNzID0gRXh0ZW5zaW9uRm9yQW5hbHl0aWNzICYge1xuXHRmcm9tR3JvdXBhYmxlUHJvcGVydHk6IGJvb2xlYW47XG5cdHJlbGF0aXZlUGF0aDogc3RyaW5nO1xufTtcbmV4cG9ydCB0eXBlIFRhYmxlVmlzdWFsaXphdGlvbiA9IHtcblx0dHlwZTogVmlzdWFsaXphdGlvblR5cGUuVGFibGU7XG5cdGFubm90YXRpb246IFRhYmxlQW5ub3RhdGlvbkNvbmZpZ3VyYXRpb247XG5cdGNvbnRyb2w6IFRhYmxlQ29udHJvbENvbmZpZ3VyYXRpb247XG5cdGNvbHVtbnM6IFRhYmxlQ29sdW1uW107XG5cdGFjdGlvbnM6IEJhc2VBY3Rpb25bXTtcblx0Y29tbWFuZEFjdGlvbnM/OiBSZWNvcmQ8c3RyaW5nLCBDdXN0b21BY3Rpb24+O1xuXHRhbmFseXRpY3NFeHRlbnNpb25zPzogUmVjb3JkPHN0cmluZywgSW50ZXJuYWxFeHRlbnNpb25Gb3JBbmFseXRpY3M+O1xuXHRyZXF1ZXN0QXRMZWFzdDogUmVxdWVzdEF0TGVhc3Q7XG5cdGVuYWJsZUFuYWx5dGljcz86IGJvb2xlYW47XG5cdGVuYWJsZUJhc2ljU2VhcmNoPzogYm9vbGVhbjtcblx0b3BlcmF0aW9uQXZhaWxhYmxlTWFwOiBzdHJpbmc7XG5cdG9wZXJhdGlvbkF2YWlsYWJsZVByb3BlcnRpZXM6IHN0cmluZztcblx0aGVhZGVySW5mb1RpdGxlOiBzdHJpbmc7XG5cdHNlbWFudGljS2V5czogc3RyaW5nW107XG5cdGhlYWRlckluZm9UeXBlTmFtZTogUHJvcGVydHlBbm5vdGF0aW9uVmFsdWU8U3RyaW5nPiB8IHVuZGVmaW5lZDtcblx0ZW5hYmxlJHNlbGVjdDogYm9vbGVhbjtcblx0ZW5hYmxlJCRnZXRLZWVwQWxpdmVDb250ZXh0OiBib29sZWFuO1xuXHRpc0luc2lnaHRzRW5hYmxlZD86IGJvb2xlYW47XG5cdGhlYWRlcj86IHN0cmluZztcblx0aGVhZGVyVmlzaWJsZT86IGJvb2xlYW47XG5cdGhhbmRsZVBhdGNoU2VudDogYm9vbGVhbjtcbn07XG5cbi8qKlxuICogUmV0dXJucyBhbiBhcnJheSBvZiBhbGwgc3RhbmRhcmQsIGFubm90YXRpb24tYmFzZWQsIGFuZCBtYW5pZmVzdC1iYXNlZCB0YWJsZSBhY3Rpb25zLlxuICogQHBhcmFtIGxpbmVJdGVtQW5ub3RhdGlvblxuICogQHBhcmFtIHZpc3VhbGl6YXRpb25QYXRoXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dFxuICogQHBhcmFtIHN0YW5kYXJkQWN0aW9uc1xuICogQHBhcmFtIG5hdmlnYXRpb25TZXR0aW5nc1xuICogQHJldHVybnMgVGhlIGNvbXBsZXRlIHRhYmxlIGFjdGlvbnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFRhYmxlQWN0aW9ucyhcblx0bGluZUl0ZW1Bbm5vdGF0aW9uOiBMaW5lSXRlbSxcblx0dmlzdWFsaXphdGlvblBhdGg6IHN0cmluZyxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+LFxuXHRzdGFuZGFyZEFjdGlvbnM6IFN0YW5kYXJkQWN0aW9uc0NvbmZpZ3VyYXRpb25bXCJzdGFuZGFyZEFjdGlvbnNcIl0sXG5cdG5hdmlnYXRpb25TZXR0aW5ncz86IE5hdmlnYXRpb25TZXR0aW5nc0NvbmZpZ3VyYXRpb25cbik6IENvbWJpbmVkQWN0aW9uIHtcblx0Ly8gMS4gR2V0IGFjdGlvbnMgZnJvbSBhbm5vdGF0aW9uc1xuXHRjb25zdCBpc0NvbGxhYm9yYXRpb25FbmFibGVkID0gTW9kZWxIZWxwZXIuaXNDb2xsYWJvcmF0aW9uRHJhZnRTdXBwb3J0ZWRGcm9tQ29udmVydGVyQ29udGV4dChjb252ZXJ0ZXJDb250ZXh0KTtcblxuXHRjb25zdCB0YWJsZUFjdGlvbnMgPSBnZXRUYWJsZUFubm90YXRpb25BY3Rpb25zKGxpbmVJdGVtQW5ub3RhdGlvbiwgdmlzdWFsaXphdGlvblBhdGgsIGNvbnZlcnRlckNvbnRleHQpO1xuXHQvLyAyLiBHZXQgYWN0aW9ucyBmcm9tIG1hbmlmZXN0XG5cdGNvbnN0IG1hbmlmZXN0QWN0aW9ucyA9IGdldEFjdGlvbnNGcm9tTWFuaWZlc3QoXG5cdFx0Y29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdENvbnRyb2xDb25maWd1cmF0aW9uPFRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uPih2aXN1YWxpemF0aW9uUGF0aCkuYWN0aW9ucyBhcyBSZWNvcmQ8XG5cdFx0XHRzdHJpbmcsXG5cdFx0XHRNYW5pZmVzdEFjdGlvblxuXHRcdD4sXG5cdFx0Y29udmVydGVyQ29udGV4dCxcblx0XHR0YWJsZUFjdGlvbnMudGFibGVBY3Rpb25zLFxuXHRcdG5hdmlnYXRpb25TZXR0aW5ncyxcblx0XHR0cnVlXG5cdCk7XG5cdC8vIFRoZSBcIkNvcHlcIiBhY3Rpb24gYWx3YXlzIG5lZWRzIHRvIGJlIHBsYWNlZCBhZnRlciB0aGUgXCJDcmVhdGVcIiBhY3Rpb24sIHNvIHdlIG5lZWQgdG8gc2VwYXJhdGUgaXRcblx0Y29uc3QgY29weUFjdGlvbnMgPSB0YWJsZUFjdGlvbnMudGFibGVBY3Rpb25zLmZpbHRlcigoYSkgPT4gYS50eXBlID09PSBBY3Rpb25UeXBlLkNvcHkpO1xuXHRjb25zdCBhbm5vdGF0aW9uQWN0aW9ucyA9IHRhYmxlQWN0aW9ucy50YWJsZUFjdGlvbnMuZmlsdGVyKChhKSA9PiBhLnR5cGUgIT09IEFjdGlvblR5cGUuQ29weSk7XG5cdC8vIENvbWJpbmUgc3RhbmRhcmQsIGFubm90YXRpb24sIGFuZCBjdXN0b20gYWN0aW9ucyB0b2dldGhlciwgcmVzcGVjdGluZyB0aGUgZml4ZWQgb3JkZXIgb2Ygc3RhbmRhcmQgYWN0aW9uc1xuXHRjb25zdCBhbm5vdGF0aW9uQW5kU3RhbmRhcmRBY3Rpb25zID0gKFxuXHRcdFtcblx0XHRcdC4uLmFubm90YXRpb25BY3Rpb25zLFxuXHRcdFx0c3RhbmRhcmRBY3Rpb25zLmNyZWF0ZSxcblx0XHRcdC4uLmNvcHlBY3Rpb25zLFxuXHRcdFx0c3RhbmRhcmRBY3Rpb25zLmRlbGV0ZSxcblx0XHRcdHN0YW5kYXJkQWN0aW9ucy5tYXNzRWRpdCxcblx0XHRcdHN0YW5kYXJkQWN0aW9ucy5pbnNpZ2h0cyxcblx0XHRcdHN0YW5kYXJkQWN0aW9ucy5jcmVhdGlvblJvdywgLy8gTm90IHRlbXBsYXRlZCBhcyBhIGJ1dHRvblxuXHRcdFx0c3RhbmRhcmRBY3Rpb25zLmN1dCxcblx0XHRcdHN0YW5kYXJkQWN0aW9ucy5jb3B5LFxuXHRcdFx0c3RhbmRhcmRBY3Rpb25zLnBhc3RlLFxuXHRcdFx0c3RhbmRhcmRBY3Rpb25zLm1vdmVVcCxcblx0XHRcdHN0YW5kYXJkQWN0aW9ucy5tb3ZlRG93blxuXHRcdF0gYXMgQmFzZUFjdGlvbltdXG5cdCkuZmlsdGVyKChhY3Rpb24pID0+IGFjdGlvbiAhPT0gdW5kZWZpbmVkKTtcblx0Ly8gQW5jaG9yIGFsbCBub24tYW5jaG9yZWQgbWFuaWZlc3QgY3VzdG9tIGFjdGlvbnMvbWVudXMgYmVmb3JlIHRoZSBzdGFuZGFyZCBhY3Rpb25zXG5cdGZvciAoY29uc3QgbWFuaWZlc3RBY3Rpb24gb2YgT2JqZWN0LnZhbHVlcyhtYW5pZmVzdEFjdGlvbnMuYWN0aW9ucykpIHtcblx0XHRpZiAoKG1hbmlmZXN0QWN0aW9uLnR5cGUgPT09IEFjdGlvblR5cGUuRGVmYXVsdCB8fCBtYW5pZmVzdEFjdGlvbi50eXBlID09PSBBY3Rpb25UeXBlLk1lbnUpICYmICFtYW5pZmVzdEFjdGlvbi5wb3NpdGlvbj8uYW5jaG9yKSB7XG5cdFx0XHRtYW5pZmVzdEFjdGlvbi5wb3NpdGlvbiA9IHtcblx0XHRcdFx0YW5jaG9yOiBTdGFuZGFyZEFjdGlvbktleXMuQ3JlYXRlLFxuXHRcdFx0XHRwbGFjZW1lbnQ6IFBsYWNlbWVudC5CZWZvcmVcblx0XHRcdH07XG5cdFx0fVxuXHR9XG5cdC8vIEluc2VydCB0d2ljZSB0byBhbGxvdyByZWd1bGFyIG92ZXJyaWRlIGZvciBub24tc3RhbmRhcmQgYWN0aW9ucyBhbmQgcG9zaXRpb25hbCBvdmVycmlkZSBmb3Igc3RhbmRhcmQgYWN0aW9uc1xuXHRjb25zdCBtYW5pZmVzdEFjdGlvbkVudHJpZXMgPSBPYmplY3QuZW50cmllcyhtYW5pZmVzdEFjdGlvbnMuYWN0aW9ucyk7XG5cdGNvbnN0IHN0YW5kYXJkTWFuaWZlc3RBY3Rpb25zID0gT2JqZWN0LmZyb21FbnRyaWVzKG1hbmlmZXN0QWN0aW9uRW50cmllcy5maWx0ZXIoKFtrZXldKSA9PiBrZXkuc3RhcnRzV2l0aChcIlN0YW5kYXJkQWN0aW9uOjpcIikpKTtcblx0Y29uc3Qgbm9uU3RhbmRhcmRNYW5pZmVzdEFjdGlvbnMgPSBPYmplY3QuZnJvbUVudHJpZXMobWFuaWZlc3RBY3Rpb25FbnRyaWVzLmZpbHRlcigoW2tleV0pID0+ICFzdGFuZGFyZE1hbmlmZXN0QWN0aW9uc1trZXldKSk7XG5cdGNvbnN0IGFjdGlvbk92ZXJ3cml0ZUNvbmZpZzogT3ZlcnJpZGVUeXBlQWN0aW9uID0ge1xuXHRcdGlzTmF2aWdhYmxlOiBPdmVycmlkZVR5cGUub3ZlcndyaXRlLFxuXHRcdGVuYWJsZU9uU2VsZWN0OiBPdmVycmlkZVR5cGUub3ZlcndyaXRlLFxuXHRcdGVuYWJsZUF1dG9TY3JvbGw6IE92ZXJyaWRlVHlwZS5vdmVyd3JpdGUsXG5cdFx0ZW5hYmxlZDogT3ZlcnJpZGVUeXBlLm92ZXJ3cml0ZSxcblx0XHR2aXNpYmxlOiBPdmVycmlkZVR5cGUub3ZlcndyaXRlLFxuXHRcdHZpc2libGVGb3JDb250ZXh0TWVudTogT3ZlcnJpZGVUeXBlLm92ZXJ3cml0ZSxcblx0XHRkZWZhdWx0VmFsdWVzRXh0ZW5zaW9uRnVuY3Rpb246IE92ZXJyaWRlVHlwZS5vdmVyd3JpdGUsXG5cdFx0Y29tbWFuZDogT3ZlcnJpZGVUeXBlLm92ZXJ3cml0ZSxcblx0XHRwb3NpdGlvbjogT3ZlcnJpZGVUeXBlLm92ZXJ3cml0ZSxcblx0XHRtZW51OiBPdmVycmlkZVR5cGUub3ZlcndyaXRlXG5cdH07XG5cdC8vIDMuIEdldCBhbGwgYW5ub3RhdGlvbiBtZW51IGl0ZW1zXG5cdGNvbnN0IGFubm90YXRpb25NZW51QWN0aW9uSXRlbXMgPSBnZXRBbm5vdGF0aW9uTWVudUFjdGlvbkl0ZW1zKGFubm90YXRpb25BY3Rpb25zKTtcblx0Ly8gNC4gRmluZCBtYW5pZmVzdCBhY3Rpb25zIHdoaWNoIG92ZXJyaWRlIGFueSBhbm5vdGF0aW9uIG1lbnUgaXRlbXNcblx0Y29uc3QgbWF0Y2hpbmdNYW5pZmVzdEFjdGlvbnMgPSBnZXRNYXRjaGluZ01hbmlmZXN0QWN0aW9uKGFubm90YXRpb25NZW51QWN0aW9uSXRlbXMsIG1hbmlmZXN0QWN0aW9ucy5hY3Rpb25zKTtcblx0Ly8gNS4gR2V0IG92ZXJyaWRkZW4gYW5ub3RhdGlvbiBtZW51IGl0ZW1zXG5cdGNvbnN0IG92ZXJ3cml0dGVuTWVudUFjdGlvbkl0ZW1zID0gaW5zZXJ0Q3VzdG9tRWxlbWVudHMoYW5ub3RhdGlvbk1lbnVBY3Rpb25JdGVtcywgbWF0Y2hpbmdNYW5pZmVzdEFjdGlvbnMsIGFjdGlvbk92ZXJ3cml0ZUNvbmZpZyk7XG5cdC8vIDYuIE92ZXJyaWRlIGFsbCBhY3Rpb25zXG5cdGxldCBhY3Rpb25zID0gaW5zZXJ0Q3VzdG9tRWxlbWVudHMoYW5ub3RhdGlvbkFuZFN0YW5kYXJkQWN0aW9ucywgbm9uU3RhbmRhcmRNYW5pZmVzdEFjdGlvbnMsIGFjdGlvbk92ZXJ3cml0ZUNvbmZpZykgYXMgQ3VzdG9tQWN0aW9uW107XG5cdGFjdGlvbnMgPSBpbnNlcnRDdXN0b21FbGVtZW50cyhhY3Rpb25zLCBzdGFuZGFyZE1hbmlmZXN0QWN0aW9ucywge1xuXHRcdHBvc2l0aW9uOiBPdmVycmlkZVR5cGUub3ZlcndyaXRlXG5cdH0pO1xuXHQvLyA3LiBSZXBsYWNlIG9yaWdpbmFsIG1lbnUgaXRlbXMgd2l0aCB0aGVpciBjb3JyZXNwb25kaW5nIG92ZXJyaWRkZW4gbWVudSBpdGVtc1xuXHRwcmVwYXJlTWVudUFjdGlvbnMoYWN0aW9ucywgb3ZlcndyaXR0ZW5NZW51QWN0aW9uSXRlbXMpO1xuXHQvLyA4LiBSZW1vdmUgZHVwbGljYXRlIGFjdGlvbnMgd2hpY2ggYXJlIG1lbnUgaXRlbXNcblx0YWN0aW9ucyA9IHJlbW92ZUR1cGxpY2F0ZUFjdGlvbnMoYWN0aW9ucyk7XG5cdC8vIDkuIEhpZGUgbWVudXMgd2hlcmUgYWxsIG1lbnUgaXRlbXMgYXJlIGhpZGRlblxuXHRhY3Rpb25zID0gZ2V0VmlzaWJpbGl0eUVuYWJsZW1lbnRNZW51QWN0aW9ucyhhY3Rpb25zKTtcblx0Ly8gMTAuIEFkZCB0aGUgY29sbGFib3JhdGlvbiBjb25kaXRpb24gZm9yIGFjdGlvbnMgb3RoZXIgdGhhbiBuYXZpZ2F0aW9uXG5cdGlmIChpc0NvbGxhYm9yYXRpb25FbmFibGVkKSB7XG5cdFx0YWRkQ29sbGFib3JhdGlvbkNvbmRpdGlvbihhY3Rpb25zKTtcblx0fVxuXG5cdHJldHVybiB7XG5cdFx0YWN0aW9uczogYWN0aW9ucyxcblx0XHRjb21tYW5kQWN0aW9uczogbWFuaWZlc3RBY3Rpb25zLmNvbW1hbmRBY3Rpb25zXG5cdH07XG59XG5cbi8vUmV0dXJucyB0aGUgQ29udGV4dERlZmluaW5nUHJvcGVydGllcyBmcm9tIHRoZSBjdXN0b20gYWdncmVnYXRlIGFubm90YXRpb24gb3IgZnJvbSB0aGUgYWdncmVnYXRpb24gYW5ub3RhdGlvbiBvbiB0aGUgcHJvcGVydHkgaXRzZWxmLlxuZnVuY3Rpb24gZ2V0Q29udGV4dERlZmluaW5nUHJvcGVydGllc0Zyb21BZ2dyZWdhdGlvbkFubm90YXRpb24oYWdncmVnYXRpb25IZWxwZXI6IEFnZ3JlZ2F0aW9uSGVscGVyKTogUmVjb3JkPHN0cmluZywgc3RyaW5nW10+IHtcblx0Y29uc3QgY3VzdG9tQWdncmVnYXRlQW5ub3RhdGlvbnMgPSBhZ2dyZWdhdGlvbkhlbHBlci5nZXRDdXN0b21BZ2dyZWdhdGVEZWZpbml0aW9ucygpO1xuXHRjb25zdCBjdXN0b21BZ2dyZWdhdGVkZWZpbml0aW9uczogUmVjb3JkPHN0cmluZywgc3RyaW5nW10+ID0ge307XG5cdGN1c3RvbUFnZ3JlZ2F0ZUFubm90YXRpb25zLmZvckVhY2goKGFubm90YXRpb24pID0+IHtcblx0XHRjb25zdCBhZ2dyZWdhdGVkUHJvcGVydHkgPSBhZ2dyZWdhdGlvbkhlbHBlci5fZW50aXR5VHlwZS5lbnRpdHlQcm9wZXJ0aWVzLmZpbmQoKHByb3BlcnR5KSA9PiB7XG5cdFx0XHRyZXR1cm4gcHJvcGVydHkubmFtZSA9PT0gYW5ub3RhdGlvbi5xdWFsaWZpZXI7XG5cdFx0fSk7XG5cdFx0aWYgKGFnZ3JlZ2F0ZWRQcm9wZXJ0eSkge1xuXHRcdFx0Y29uc3QgY29udGV4dERlZmluaW5nUHJvcGVydGllcyA9XG5cdFx0XHRcdGFubm90YXRpb24uYW5ub3RhdGlvbnM/LkFnZ3JlZ2F0aW9uPy5Db250ZXh0RGVmaW5pbmdQcm9wZXJ0aWVzID8/XG5cdFx0XHRcdGFnZ3JlZ2F0ZWRQcm9wZXJ0eS5hbm5vdGF0aW9ucy5BZ2dyZWdhdGlvbj8uQ29udGV4dERlZmluaW5nUHJvcGVydGllcztcblx0XHRcdGN1c3RvbUFnZ3JlZ2F0ZWRlZmluaXRpb25zW2FnZ3JlZ2F0ZWRQcm9wZXJ0eS5uYW1lXSA9XG5cdFx0XHRcdGNvbnRleHREZWZpbmluZ1Byb3BlcnRpZXM/Lm1hcCgoY3R4RGVmUHJvcGVydHkpID0+IGN0eERlZlByb3BlcnR5LnZhbHVlKSA/PyBbXTtcblx0XHR9XG5cdH0pO1xuXHRyZXR1cm4gY3VzdG9tQWdncmVnYXRlZGVmaW5pdGlvbnM7XG59XG5cbi8qKlxuICogUmV0cmlldmUgdGhlIGV4dGVuc2lvbiBpbmZvcm1hdGlvbiBmb3IgYWxsIGFnZ3JlZ2FibGUgcHJvcGVydGllcyAuXG4gKiBAcGFyYW0gZW50aXR5VHlwZSBUaGUgdGFyZ2V0IGVudGl0eSB0eXBlLlxuICogQHBhcmFtIHRhYmxlQ29sdW1ucyBUaGUgYXJyYXkgb2YgY29sdW1ucyBmb3IgdGhlIGVudGl0eSB0eXBlLlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGNvbnZlcnRlciBjb250ZXh0LlxuICogQHJldHVybnMgVGhlIGFnZ3JlZ2F0ZSBkZWZpbml0aW9ucyBmcm9tIHRoZSBlbnRpdHlUeXBlLCBvciB1bmRlZmluZWQgaWYgdGhlIGVudGl0eSBkb2Vzbid0IHN1cHBvcnQgYW5hbHl0aWNhbCBxdWVyaWVzLlxuICovXG5leHBvcnQgY29uc3QgZ2V0RXh0ZW5zaW9uSW5mb0Zyb21FbnRpdHlUeXBlID0gZnVuY3Rpb24gKFxuXHRlbnRpdHlUeXBlOiBFbnRpdHlUeXBlLFxuXHR0YWJsZUNvbHVtbnM6IFRhYmxlQ29sdW1uW10sXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0PlxuKTogUmVjb3JkPHN0cmluZywgSW50ZXJuYWxFeHRlbnNpb25Gb3JBbmFseXRpY3M+IHwgdW5kZWZpbmVkIHtcblx0Y29uc3QgYWdncmVnYXRpb25IZWxwZXIgPSBuZXcgQWdncmVnYXRpb25IZWxwZXIoZW50aXR5VHlwZSwgY29udmVydGVyQ29udGV4dCk7XG5cdGlmICghYWdncmVnYXRpb25IZWxwZXIuaXNBbmFseXRpY3NTdXBwb3J0ZWQoKSkge1xuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cblx0Ly8gS2VlcCBhIHNldCBvZiBhbGwgY3VycmVuY3kvdW5pdCBwcm9wZXJ0aWVzLCBhcyB3ZSBkb24ndCB3YW50IHRvIGNvbnNpZGVyIHRoZW0gYXMgYWdncmVnYXRlc1xuXHQvLyBUaGV5IGFyZSBhZ2dyZWdhdGVzIGZvciB0ZWNobmljYWwgcmVhc29ucyAodG8gbWFuYWdlIG11bHRpLXVuaXRzIHNpdHVhdGlvbnMpIGJ1dCBpdCBkb2Vzbid0IG1ha2Ugc2Vuc2UgZnJvbSBhIHVzZXIgc3RhbmRwb2ludFxuXHRjb25zdCBjdXJyZW5jeU9yVW5pdFByb3BlcnRpZXMgPSBuZXcgU2V0KCk7XG5cdHRhYmxlQ29sdW1ucy5mb3JFYWNoKChjb2x1bW4pID0+IHtcblx0XHRjb25zdCB0YWJsZUNvbHVtbiA9IGNvbHVtbiBhcyBBbm5vdGF0aW9uVGFibGVDb2x1bW47XG5cdFx0aWYgKHRhYmxlQ29sdW1uLnVuaXQpIHtcblx0XHRcdGNvbnN0IHRhcmdldFVuaXRQcm9wZXJ0eSA9IHRhYmxlQ29sdW1ucy5maW5kKChwcm9wKSA9PiBwcm9wLm5hbWUgPT09IHRhYmxlQ29sdW1uLnVuaXQpIGFzIEFubm90YXRpb25UYWJsZUNvbHVtbjtcblx0XHRcdGN1cnJlbmN5T3JVbml0UHJvcGVydGllcy5hZGQodGFyZ2V0VW5pdFByb3BlcnR5LnJlbGF0aXZlUGF0aCk7XG5cdFx0fVxuXHR9KTtcblx0Y29uc3QgY29udGV4dERlZmluaW5nUHJvcGVydGllc0Zyb21BZ2dyZWdhdGlvbiA9IGdldENvbnRleHREZWZpbmluZ1Byb3BlcnRpZXNGcm9tQWdncmVnYXRpb25Bbm5vdGF0aW9uKGFnZ3JlZ2F0aW9uSGVscGVyKTtcblx0Y29uc3QgcmVzdWx0OiBSZWNvcmQ8c3RyaW5nLCBJbnRlcm5hbEV4dGVuc2lvbkZvckFuYWx5dGljcz4gPSB7fTtcblx0dGFibGVDb2x1bW5zLmZvckVhY2goKGNvbHVtbikgPT4ge1xuXHRcdGNvbnN0IHRhYmxlQ29sdW1uID0gY29sdW1uIGFzIEFubm90YXRpb25UYWJsZUNvbHVtbjtcblx0XHRjb25zdCBwcm9wZXJ0eSA9IGVudGl0eVR5cGUuZW50aXR5UHJvcGVydGllcy5maW5kKChwcm9wKSA9PiBwcm9wLm5hbWUgPT09IHRhYmxlQ29sdW1uLnJlbGF0aXZlUGF0aCk7XG5cblx0XHRpZiAodGFibGVDb2x1bW4ucHJvcGVydHlJbmZvcyAhPT0gdW5kZWZpbmVkIHx8ICF0YWJsZUNvbHVtbi5yZWxhdGl2ZVBhdGgpIHtcblx0XHRcdC8vIElnbm9yZSBjb21wbGV4IGNvbHVtbnNcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRsZXQgcmF3Q29udGV4dERlZmluaW5nUHJvcGVydGllcyA9IGNvbnRleHREZWZpbmluZ1Byb3BlcnRpZXNGcm9tQWdncmVnYXRpb25bdGFibGVDb2x1bW4ucmVsYXRpdmVQYXRoXSBhcyBzdHJpbmdbXSB8IHVuZGVmaW5lZDtcblxuXHRcdC8vIGlmIHRoZXJlIGlzIG5vIGN1c3RvbSBhZ2dyZWdhdGUgZGVmaW5pdGlvbiwgYW5kIHRoZSBwcm9wZXJ0eSBpcyBncm91cGFibGUsIHRoZW4gd2UgY2FuIHVzZSB0aGUgZGVmYXVsdCBjb250ZXh0IGRlZmluaW5nIHByb3BlcnRpZXNcblx0XHRsZXQgZnJvbUdyb3VwYWJsZVByb3BlcnR5ID0gZmFsc2U7XG5cdFx0aWYgKCFyYXdDb250ZXh0RGVmaW5pbmdQcm9wZXJ0aWVzICYmIHByb3BlcnR5ICYmICEhYWdncmVnYXRpb25IZWxwZXIuaXNQcm9wZXJ0eUdyb3VwYWJsZShwcm9wZXJ0eSkpIHtcblx0XHRcdGZyb21Hcm91cGFibGVQcm9wZXJ0eSA9IHRydWU7XG5cdFx0XHRyYXdDb250ZXh0RGVmaW5pbmdQcm9wZXJ0aWVzID0gcHJvcGVydHkuYW5ub3RhdGlvbnMuQWdncmVnYXRpb24/LkNvbnRleHREZWZpbmluZ1Byb3BlcnRpZXM/Lm1hcChcblx0XHRcdFx0KGN0eERlZlByb3BlcnR5KSA9PiBjdHhEZWZQcm9wZXJ0eS52YWx1ZVxuXHRcdFx0KTtcblx0XHR9XG5cblx0XHRpZiAoIXJhd0NvbnRleHREZWZpbmluZ1Byb3BlcnRpZXMgfHwgY3VycmVuY3lPclVuaXRQcm9wZXJ0aWVzLmhhcyh0YWJsZUNvbHVtbi5yZWxhdGl2ZVBhdGgpKSB7XG5cdFx0XHQvLyBJZ25vcmUgYWdncmVnYXRlcyBjb3JyZXNwb25kaW5nIHRvIGN1cnJlbmNpZXMgb3IgdW5pdHMgb2YgbWVhc3VyZVxuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdHJlc3VsdFt0YWJsZUNvbHVtbi5uYW1lXSA9IHtcblx0XHRcdGZyb21Hcm91cGFibGVQcm9wZXJ0eTogZnJvbUdyb3VwYWJsZVByb3BlcnR5LFxuXHRcdFx0cmVsYXRpdmVQYXRoOiB0YWJsZUNvbHVtbi5yZWxhdGl2ZVBhdGhcblx0XHR9O1xuXHRcdGNvbnN0IGNvbnRleHREZWZpbmluZ1Byb3BlcnRpZXM6IHN0cmluZ1tdID0gW107XG5cdFx0cmF3Q29udGV4dERlZmluaW5nUHJvcGVydGllcy5mb3JFYWNoKChjb250ZXh0RGVmaW5pbmdQcm9wZXJ0eU5hbWUpID0+IHtcblx0XHRcdC8vIElnbm9yZSBjb250ZXh0LWRlZmluaW5nIHByb3BlcnRpZXMgY29ycmVzcG9uZGluZyB0byBjdXJyZW5jaWVzIG9yIHVuaXRzIG9mIG1lYXN1cmUgb2YgYWdncmVnYXRhYmxlIHByb3BlcnRpZXNcblx0XHRcdC8vIChidXQgdGhpcyBpcyBhbGxvd2VkIGZvciBncm91cGFibGUgcHJvcGVydGllcylcblx0XHRcdGlmICghZnJvbUdyb3VwYWJsZVByb3BlcnR5ICYmIGN1cnJlbmN5T3JVbml0UHJvcGVydGllcy5oYXMoY29udGV4dERlZmluaW5nUHJvcGVydHlOYW1lKSkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IGZvdW5kQ29sdW1uID0gZmluZENvbHVtbkJ5UGF0aChjb250ZXh0RGVmaW5pbmdQcm9wZXJ0eU5hbWUsIHRhYmxlQ29sdW1ucyk7XG5cdFx0XHRpZiAoZm91bmRDb2x1bW4pIHtcblx0XHRcdFx0Y29udGV4dERlZmluaW5nUHJvcGVydGllcy5wdXNoKGZvdW5kQ29sdW1uLm5hbWUpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdGlmIChjb250ZXh0RGVmaW5pbmdQcm9wZXJ0aWVzLmxlbmd0aCkge1xuXHRcdFx0cmVzdWx0W3RhYmxlQ29sdW1uLm5hbWVdLmFkZGl0aW9uYWxQcm9wZXJ0aWVzID0gY29udGV4dERlZmluaW5nUHJvcGVydGllcztcblx0XHR9XG5cdH0pO1xuXHRyZXR1cm4gcmVzdWx0O1xufTtcbi8qKlxuICogVXBkYXRlcyBhIHRhYmxlIHZpc3VhbGl6YXRpb24gZm9yIGFuYWx5dGljYWwgdXNlIGNhc2VzLlxuICogQHBhcmFtIHRhYmxlVmlzdWFsaXphdGlvbiBUaGUgdmlzdWFsaXphdGlvbiB0byBiZSB1cGRhdGVkXG4gKiBAcGFyYW0gZW50aXR5VHlwZSBUaGUgZW50aXR5IHR5cGUgZGlzcGxheWVkIGluIHRoZSB0YWJsZVxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKiBAcGFyYW0gcHJlc2VudGF0aW9uVmFyaWFudEFubm90YXRpb24gVGhlIHByZXNlbnRhdGlvblZhcmlhbnQgYW5ub3RhdGlvbiAoaWYgYW55KVxuICovXG5leHBvcnQgZnVuY3Rpb24gdXBkYXRlVGFibGVWaXN1YWxpemF0aW9uRm9yVHlwZShcblx0dGFibGVWaXN1YWxpemF0aW9uOiBUYWJsZVZpc3VhbGl6YXRpb24sXG5cdGVudGl0eVR5cGU6IEVudGl0eVR5cGUsXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pixcblx0cHJlc2VudGF0aW9uVmFyaWFudEFubm90YXRpb24/OiBQcmVzZW50YXRpb25WYXJpYW50VHlwZVxuKTogdm9pZCB7XG5cdGlmICh0YWJsZVZpc3VhbGl6YXRpb24uY29udHJvbC50eXBlID09PSBcIkFuYWx5dGljYWxUYWJsZVwiKSB7XG5cdFx0Y29uc3QgYWdncmVnYXRpb25EYXRhID0gZ2V0RXh0ZW5zaW9uSW5mb0Zyb21FbnRpdHlUeXBlKGVudGl0eVR5cGUsIHRhYmxlVmlzdWFsaXphdGlvbi5jb2x1bW5zLCBjb252ZXJ0ZXJDb250ZXh0KSxcblx0XHRcdGFnZ3JlZ2F0aW9uSGVscGVyID0gbmV3IEFnZ3JlZ2F0aW9uSGVscGVyKGVudGl0eVR5cGUsIGNvbnZlcnRlckNvbnRleHQpO1xuXHRcdGlmIChhZ2dyZWdhdGlvbkRhdGEpIHtcblx0XHRcdHRhYmxlVmlzdWFsaXphdGlvbi5lbmFibGVBbmFseXRpY3MgPSB0cnVlO1xuXHRcdFx0dGFibGVWaXN1YWxpemF0aW9uLmVuYWJsZSRzZWxlY3QgPSBmYWxzZTtcblx0XHRcdHRhYmxlVmlzdWFsaXphdGlvbi5lbmFibGUkJGdldEtlZXBBbGl2ZUNvbnRleHQgPSBmYWxzZTtcblx0XHRcdHRhYmxlVmlzdWFsaXphdGlvbi5hbmFseXRpY3NFeHRlbnNpb25zID0gYWdncmVnYXRpb25EYXRhO1xuXHRcdFx0X3VwZGF0ZVByb3BlcnR5SW5mb3NXaXRoQWdncmVnYXRlc0RlZmluaXRpb25zKHRhYmxlVmlzdWFsaXphdGlvbik7XG5cdFx0XHRjb25zdCBhbGxvd2VkVHJhbnNmb3JtYXRpb25zID0gYWdncmVnYXRpb25IZWxwZXIuZ2V0QWxsb3dlZFRyYW5zZm9ybWF0aW9ucygpO1xuXHRcdFx0dGFibGVWaXN1YWxpemF0aW9uLmVuYWJsZUJhc2ljU2VhcmNoID0gYWxsb3dlZFRyYW5zZm9ybWF0aW9ucyA/IGFsbG93ZWRUcmFuc2Zvcm1hdGlvbnMuaW5jbHVkZXMoXCJzZWFyY2hcIikgOiB0cnVlO1xuXHRcdFx0Ly8gQWRkIGdyb3VwIGFuZCBzb3J0IGNvbmRpdGlvbnMgZnJvbSB0aGUgcHJlc2VudGF0aW9uIHZhcmlhbnRcblx0XHRcdHRhYmxlVmlzdWFsaXphdGlvbi5hbm5vdGF0aW9uLmdyb3VwQ29uZGl0aW9ucyA9IGdldEdyb3VwQ29uZGl0aW9ucyhcblx0XHRcdFx0cHJlc2VudGF0aW9uVmFyaWFudEFubm90YXRpb24sXG5cdFx0XHRcdHRhYmxlVmlzdWFsaXphdGlvbi5jb2x1bW5zLFxuXHRcdFx0XHR0YWJsZVZpc3VhbGl6YXRpb24uY29udHJvbC50eXBlXG5cdFx0XHQpO1xuXHRcdFx0dGFibGVWaXN1YWxpemF0aW9uLmFubm90YXRpb24uYWdncmVnYXRlQ29uZGl0aW9ucyA9IGdldEFnZ3JlZ2F0ZUNvbmRpdGlvbnMoXG5cdFx0XHRcdHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uLFxuXHRcdFx0XHR0YWJsZVZpc3VhbGl6YXRpb24uY29sdW1ucyxcblx0XHRcdFx0YWdncmVnYXRpb25EYXRhXG5cdFx0XHQpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRMb2cuZXJyb3IoYEFnZ3JlZ2F0aW9uIG5vdCBzdXBwb3J0ZWQgZm9yIHRoaXMgZW50aXR5IHR5cGU6ICR7ZW50aXR5VHlwZS5uYW1lfWApO1xuXHRcdH1cblx0XHR0YWJsZVZpc3VhbGl6YXRpb24uY29udHJvbC50eXBlID0gXCJHcmlkVGFibGVcIjsgLy8gQW5hbHl0aWNhbFRhYmxlIGlzbid0IGEgcmVhbCB0eXBlIGZvciB0aGUgTURDOlRhYmxlLCBzbyB3ZSBhbHdheXMgc3dpdGNoIGJhY2sgdG8gR3JpZFxuXHR9IGVsc2UgaWYgKHRhYmxlVmlzdWFsaXphdGlvbi5jb250cm9sLnR5cGUgPT09IFwiUmVzcG9uc2l2ZVRhYmxlXCIpIHtcblx0XHR0YWJsZVZpc3VhbGl6YXRpb24uYW5ub3RhdGlvbi5ncm91cENvbmRpdGlvbnMgPSBnZXRHcm91cENvbmRpdGlvbnMoXG5cdFx0XHRwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbixcblx0XHRcdHRhYmxlVmlzdWFsaXphdGlvbi5jb2x1bW5zLFxuXHRcdFx0dGFibGVWaXN1YWxpemF0aW9uLmNvbnRyb2wudHlwZVxuXHRcdCk7XG5cdH0gZWxzZSBpZiAodGFibGVWaXN1YWxpemF0aW9uLmNvbnRyb2wudHlwZSA9PT0gXCJUcmVlVGFibGVcIikge1xuXHRcdGNvbnN0IGFnZ3JlZ2F0aW9uSGVscGVyID0gbmV3IEFnZ3JlZ2F0aW9uSGVscGVyKGVudGl0eVR5cGUsIGNvbnZlcnRlckNvbnRleHQpO1xuXHRcdGNvbnN0IGFsbG93ZWRUcmFuc2Zvcm1hdGlvbnMgPSBhZ2dyZWdhdGlvbkhlbHBlci5nZXRBbGxvd2VkVHJhbnNmb3JtYXRpb25zKCk7XG5cdFx0dGFibGVWaXN1YWxpemF0aW9uLmVuYWJsZUJhc2ljU2VhcmNoID0gYWxsb3dlZFRyYW5zZm9ybWF0aW9ucyA/IGFsbG93ZWRUcmFuc2Zvcm1hdGlvbnMuaW5jbHVkZXMoXCJzZWFyY2hcIikgOiB0cnVlO1xuXHRcdHRhYmxlVmlzdWFsaXphdGlvbi5lbmFibGUkJGdldEtlZXBBbGl2ZUNvbnRleHQgPSB0cnVlO1xuXHRcdHRhYmxlVmlzdWFsaXphdGlvbi5hbm5vdGF0aW9uLmNoYW5nZVNpYmxpbmdGb3JSb290c1N1cHBvcnRlZCA9IChlbnRpdHlUeXBlPy5hbm5vdGF0aW9ucy5IaWVyYXJjaHk/Lltcblx0XHRcdGBSZWN1cnNpdmVIaWVyYXJjaHlBY3Rpb25zIyR7dGFibGVWaXN1YWxpemF0aW9uLmNvbnRyb2wuaGllcmFyY2h5UXVhbGlmaWVyID8/IFwiXCJ9YFxuXHRcdF0/LkNoYW5nZVNpYmxpbmdGb3JSb290c1N1cHBvcnRlZCA/PyB0cnVlKSBhcyBib29sZWFuO1xuXG5cdFx0dGFibGVWaXN1YWxpemF0aW9uLmFubm90YXRpb24uYWxsb3dEcm9wQmV0d2Vlbk5vZGVzID1cblx0XHRcdCEhZW50aXR5VHlwZS5hbm5vdGF0aW9ucy5IaWVyYXJjaHk/LltgUmVjdXJzaXZlSGllcmFyY2h5QWN0aW9ucyMke3RhYmxlVmlzdWFsaXphdGlvbi5jb250cm9sLmhpZXJhcmNoeVF1YWxpZmllciA/PyBcIlwifWBdXG5cdFx0XHRcdD8uQ2hhbmdlTmV4dFNpYmxpbmdBY3Rpb247XG5cdH1cblxuXHQvLyBTb21lIHByb3BlcnRpZXMgYXJlIGFsd2F5cyBsb2FkZWQgYmVjYXVzZSB0aGV5IGFyZSBuZWVkZWQgYnkgb3VyIGludGVybmFsIGxvZ2ljXG5cdC8vIC0gSGFzQWN0aXZlRW50aXR5IGlzIG5lZWRlZCBmb3IgdGhlIHJvdyBjcml0aWNhbGl0eSBleHByZXNzaW9uXG5cdC8vIC0gSGFzRHJhZnRFbnRpdHkgaXMgbmVlZGVkIGluIExSIHdpdGggVHJlZVRhYmxlIGFuZCBBbmFseXRpY2FsIFRhYmxlIHRvIG5hdmlnYXRlIHRvIHRoZSBkcmFmdCBpbnN0YW5jZSBpZiB0aGVyZSdzIG9uZSB3aGVuIGNsaWNraW5nIG9uIHRoZSBhY3RpdmUgaW5zdGFuY2Vcblx0Ly8gLSBIYXNEcmFmdEVudGl0eSBhbmQgRHJhZnRBZG1pbmlzdHJhdGl2ZURhdGEuSW5Qcm9jZXNzQnlVc2VyIGFyZSBuZWVkZWQgaW4gdGhlIExSIGZvciB0aGUgZGVsZXRlIGxvZ2ljXG5cdGlmIChNb2RlbEhlbHBlci5pc09iamVjdFBhdGhEcmFmdFN1cHBvcnRlZChjb252ZXJ0ZXJDb250ZXh0LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKSkpIHtcblx0XHR0YWJsZVZpc3VhbGl6YXRpb24ucmVxdWVzdEF0TGVhc3RbXCJIYXNBY3RpdmVFbnRpdHlcIl0gPSBbXCJkcmFmdEtleXNcIl07XG5cdFx0aWYgKHRhYmxlVmlzdWFsaXphdGlvbi5jb250cm9sLmFuYWx5dGljYWxDb25maWd1cmF0aW9uPy5hZ2dyZWdhdGlvbk9uTGVhZkxldmVsKSB7XG5cdFx0XHQvLyBJc0FjdGl2ZUVudGl0eSBrZXkgaXMgbmVlZGVkIGZvciBuYXZpZ2F0aW9uIHRvIHRoZSBkcmFmdCBpbnN0YW5jZVxuXHRcdFx0dGFibGVWaXN1YWxpemF0aW9uLnJlcXVlc3RBdExlYXN0W1wiSXNBY3RpdmVFbnRpdHlcIl0gPSBbXCJkcmFmdEtleXNcIl07XG5cdFx0fVxuXG5cdFx0aWYgKE1vZGVsSGVscGVyLmlzRHJhZnRSb290KGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0KCkpKSB7XG5cdFx0XHR0YWJsZVZpc3VhbGl6YXRpb24ucmVxdWVzdEF0TGVhc3RbXCJIYXNEcmFmdEVudGl0eVwiXSA9IFtcImRyYWZ0S2V5c1wiXTtcblx0XHRcdGlmICh0YWJsZVZpc3VhbGl6YXRpb24uZW5hYmxlQW5hbHl0aWNzICE9PSB0cnVlICYmIHRhYmxlVmlzdWFsaXphdGlvbi5jb250cm9sLnR5cGUgIT09IFwiVHJlZVRhYmxlXCIpIHtcblx0XHRcdFx0Ly8gV2UgZG9uJ3QgbG9hZCBEcmFmdEFkbWluaXN0cmF0aXZlRGF0YSBmb3IgQW5hbHl0aWNhbCBhbmQgVHJlZSB0YWJsZXMgaW4gTFIgYmVjYXVzZSB0aGV5IGRpc3BsYXkgYWN0aXZlIGluc3RhbmNlcyBvbmx5XG5cdFx0XHRcdC8vICh0aGVyZWZvcmUgbm8gRHJhZnRBZG1pbmlzdHJhdGl2ZURhdGEgaXMgYXZhaWxhYmxlKVxuXHRcdFx0XHR0YWJsZVZpc3VhbGl6YXRpb24ucmVxdWVzdEF0TGVhc3RbXCJEcmFmdEFkbWluaXN0cmF0aXZlRGF0YS9JblByb2Nlc3NCeVVzZXJcIl0gPSBbXCJkcmFmdEtleXNcIl07XG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHRNb2RlbEhlbHBlci5pc0NvbGxhYm9yYXRpb25EcmFmdFN1cHBvcnRlZEZyb21Db252ZXJ0ZXJDb250ZXh0KGNvbnZlcnRlckNvbnRleHQpICYmXG5cdFx0XHRcdFx0Y29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKS5pc0ZjbEVuYWJsZWQoKVxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHR0YWJsZVZpc3VhbGl6YXRpb24ucmVxdWVzdEF0TGVhc3RbXCJEcmFmdEFkbWluaXN0cmF0aXZlRGF0YS9EcmFmdEFkbWluaXN0cmF0aXZlVXNlclwiXSA9IFtcImRyYWZ0S2V5c1wiXTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGlmICh0YWJsZVZpc3VhbGl6YXRpb24uY29udHJvbC5lbmFibGVVcGxvYWRQbHVnaW4pIHtcblx0XHRjb25zdCBzdHJlYW1Qcm9wZXJ0eSA9IGNvbnZlcnRlckNvbnRleHQuZ2V0QW5ub3RhdGlvbkVudGl0eVR5cGUoKS5hbm5vdGF0aW9ucz8uVUk/Lk1lZGlhUmVzb3VyY2U/LlN0cmVhbT8uJHRhcmdldDtcblx0XHRpZiAoIXN0cmVhbVByb3BlcnR5KSB7XG5cdFx0XHR0aHJvdyBcIlVJLk1lZGlhUmVzb3VyY2UgYW5ub3RhdGlvbiB3aXRoIFN0cmVhbSBwcm9wZXJ0eSBtaXNzaW5nXCI7XG5cdFx0fVxuXG5cdFx0Ly8gdGhlIHVwbG9hZCBhY3Rpb24gaXMgdHJlYXRlZCBhcyB0aGUgY3JlYXRlIGFjdGlvblxuXHRcdGNvbnN0IHVwbG9hZEFjdGlvbiA9IHRhYmxlVmlzdWFsaXphdGlvbi5hY3Rpb25zLmZpbmQoKGEpID0+IGEua2V5ID09PSBTdGFuZGFyZEFjdGlvbktleXMuQ3JlYXRlKSBhcyBTdGFuZGFyZEFjdGlvbjtcblxuXHRcdHRhYmxlVmlzdWFsaXphdGlvbi5hbm5vdGF0aW9uLnVwbG9hZFRhYmxlID0ge1xuXHRcdFx0c3RyZWFtOiBzdHJlYW1Qcm9wZXJ0eS5uYW1lLFxuXHRcdFx0ZmlsZU5hbWU6IChzdHJlYW1Qcm9wZXJ0eS5hbm5vdGF0aW9ucy5Db3JlPy5Db250ZW50RGlzcG9zaXRpb24/LkZpbGVuYW1lIGFzIFBhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbjxzdHJpbmc+IHwgdW5kZWZpbmVkKT8ucGF0aCxcblx0XHRcdGZpbGVOYW1lTWF4TGVuZ3RoOiBzdHJlYW1Qcm9wZXJ0eS5hbm5vdGF0aW9ucy5Db3JlPy5Db250ZW50RGlzcG9zaXRpb24/LkZpbGVuYW1lPy4kdGFyZ2V0Py5tYXhMZW5ndGgsXG5cdFx0XHRhY2NlcHRhYmxlTWVkaWFUeXBlczogc3RyZWFtUHJvcGVydHkuYW5ub3RhdGlvbnMuQ29yZT8uQWNjZXB0YWJsZU1lZGlhVHlwZXMsXG5cdFx0XHRtYXhMZW5ndGg6IHN0cmVhbVByb3BlcnR5Lm1heExlbmd0aCxcblx0XHRcdHVwbG9hZEFjdGlvbjogdXBsb2FkQWN0aW9uXG5cdFx0fTtcblx0fVxufVxuXG50eXBlIGZpZWxkT3JpZ2luID1cblx0fCBcInNlbWFudGljS2V5XCJcblx0fCBcInJlc3RyaWN0aW9uXCJcblx0fCBcInNlY29uZGFyeUtleVwiXG5cdHwgXCJwcmVzZW50YXRpb25WYXJpYW50XCJcblx0fCBcIm5hdmlnYXRpb25cIlxuXHR8IFwib3BlcmF0aW9uXCJcblx0fCBcImFsdGVybmF0ZUFuZFNlY29uZGFyeUtleXNcIlxuXHR8IFwiZHJhZnRLZXlzXCI7XG5leHBvcnQgdHlwZSBSZXF1ZXN0QXRMZWFzdCA9IFJlY29yZDxzdHJpbmcsIGZpZWxkT3JpZ2luW10+O1xuXG4vKipcbiAqIENyZWF0ZXMgYW5kIHJldHVybnMgYSBzZWxlY3QgcXVlcnkgd2l0aCB0aGUgc2VsZWN0ZWQgZmllbGRzIGZyb20gdGhlIHBhcmFtZXRlcnMgdGhhdCB3ZXJlIHBhc3NlZC5cbiAqIEBwYXJhbSBsaW5lSXRlbSBUaGUgTGluZUl0ZW0gd2Ugd2FudCB0aGUgcmVxdWVzdGVkIHByb3BlcnRpZXMgZnJvbS5cbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBjb252ZXJ0ZXIgY29udGV4dC5cbiAqIEBwYXJhbSBvcGVyYXRpb25BdmFpbGFibGUgQSBzdHJpbmcgY29udGFpbmluZyB0aGUgYXZhaWxhYmxlIG9wZXJhdGlvbiwgd2hpY2ggd2UnbGwgdGFrZSB0aGUgcHJvcGVydGllcyB0byBhZGQgdG8gdGhlIHNlbGVjdCBxdWVyeS5cbiAqIEBwYXJhbSBwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbiBUaGUgcHJlc2VudGF0aW9uIHZhcmlhbnQgYW5ub3RhdGlvbiB3aGljaCB3ZSdsbCB0YWtlIHRoZSBSZXF1ZXN0QXRMZWFzdCBwcm9wZXJ0aWVzIGZyb20uXG4gKiBAcmV0dXJucyBUaGUgJ3NlbGVjdCcgcXVlcnkgdGhhdCBoYXMgdGhlIHNlbGVjdGVkIGZpZWxkcyBmcm9tIHRoZSBwYXJhbWV0ZXJzIHRoYXQgd2VyZSBwYXNzZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVSZXF1ZXN0ZWRQcm9wZXJ0aWVzKFxuXHRsaW5lSXRlbTogTGluZUl0ZW0sXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsXG5cdG9wZXJhdGlvbkF2YWlsYWJsZT86IHN0cmluZyxcblx0cHJlc2VudGF0aW9uVmFyaWFudEFubm90YXRpb24/OiBQcmVzZW50YXRpb25WYXJpYW50VHlwZVxuKTogUmVxdWVzdEF0TGVhc3Qge1xuXHRjb25zdCBlbnRpdHlUeXBlID0gY29udmVydGVyQ29udGV4dC5nZXRBbm5vdGF0aW9uRW50aXR5VHlwZShsaW5lSXRlbSk7XG5cdGNvbnN0IHNlbGVjdGVkRmllbGRzOiBSZXF1ZXN0QXRMZWFzdCA9IHt9O1xuXHRmdW5jdGlvbiBwdXNoRmllbGQoZmllbGROYW1lOiBzdHJpbmcsIG9yaWdpbjogZmllbGRPcmlnaW4pOiB2b2lkIHtcblx0XHRpZiAoZmllbGROYW1lICYmIGZpZWxkTmFtZS5pbmRleE9mKFwiL1wiKSAhPT0gMCkge1xuXHRcdFx0Ly8gRG8gbm90IGFkZCBzaW5nbGV0b24gcHJvcGVydHkgKHdpdGggYWJzb2x1dGUgcGF0aCkgdG8gJHNlbGVjdFxuXHRcdFx0aWYgKCFzZWxlY3RlZEZpZWxkc1tmaWVsZE5hbWVdKSB7XG5cdFx0XHRcdHNlbGVjdGVkRmllbGRzW2ZpZWxkTmFtZV0gPSBbb3JpZ2luXTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHNlbGVjdGVkRmllbGRzW2ZpZWxkTmFtZV0ucHVzaChvcmlnaW4pO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGZ1bmN0aW9uIHB1c2hGaWVsZExpc3QoZmllbGRzOiBzdHJpbmdbXSwgb3JpZ2luOiBmaWVsZE9yaWdpbik6IHZvaWQge1xuXHRcdGlmIChmaWVsZHM/Lmxlbmd0aCkge1xuXHRcdFx0ZmllbGRzLmZvckVhY2goKGZpZWxkKSA9PiBwdXNoRmllbGQoZmllbGQsIG9yaWdpbikpO1xuXHRcdH1cblx0fVxuXG5cdGNvbnN0IG9wZXJhdGlvbkF2YWlsYWJsZVByb3BlcnRpZXMgPSAob3BlcmF0aW9uQXZhaWxhYmxlIHx8IFwiXCIpLnNwbGl0KFwiLFwiKTtcblx0Y29uc3QgdmFsaWRQcm9wZXJ0aWVzID0gb3BlcmF0aW9uQXZhaWxhYmxlUHJvcGVydGllcy5maWx0ZXIoZnVuY3Rpb24gKHByb3BOYW1lOiBzdHJpbmcpIHtcblx0XHRyZXR1cm4gZW50aXR5VHlwZS5yZXNvbHZlUGF0aChwcm9wTmFtZSk7XG5cdH0pO1xuXHRjb25zdCBzZW1hbnRpY0tleXM6IHN0cmluZ1tdID0gKGVudGl0eVR5cGUuYW5ub3RhdGlvbnMuQ29tbW9uPy5TZW1hbnRpY0tleSB8fCBbXSkubWFwKChzZW1hbnRpY0tleSkgPT4gc2VtYW50aWNLZXkudmFsdWUpO1xuXHRjb25zdCBjYXBhYmlsaXRpZXNBbm5vdGF0aW9uID0gY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXQoKT8uYW5ub3RhdGlvbnM/LkNhcGFiaWxpdGllcztcblx0Y29uc3QgYWx0ZXJuYXRlQW5kU2Vjb25kYXJ5S2V5cyA9IE1vZGVsSGVscGVyLmdldEFsdGVybmF0ZUFuZFNlY29uZGFyeUtleXMoZW50aXR5VHlwZSwgY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXQoKSBhcyBFbnRpdHlTZXQpO1xuXHRpZiAocHJlc2VudGF0aW9uVmFyaWFudEFubm90YXRpb24pIHtcblx0XHRwdXNoRmllbGRMaXN0KHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uLlJlcXVlc3RBdExlYXN0Py5tYXAoKHByb3BlcnR5UGF0aCkgPT4gcHJvcGVydHlQYXRoLnZhbHVlKSwgXCJwcmVzZW50YXRpb25WYXJpYW50XCIpO1xuXHR9XG5cdHB1c2hGaWVsZExpc3QoZ2V0TmF2aWdhdGlvbkF2YWlsYWJsZUZpZWxkc0Zyb21MaW5lSXRlbShsaW5lSXRlbSwgZW50aXR5VHlwZSksIFwibmF2aWdhdGlvblwiKTtcblx0cHVzaEZpZWxkTGlzdCh2YWxpZFByb3BlcnRpZXMsIFwib3BlcmF0aW9uXCIpO1xuXHRwdXNoRmllbGRMaXN0KHNlbWFudGljS2V5cywgXCJzZW1hbnRpY0tleVwiKTtcblx0cHVzaEZpZWxkTGlzdChhbHRlcm5hdGVBbmRTZWNvbmRhcnlLZXlzLCBcImFsdGVybmF0ZUFuZFNlY29uZGFyeUtleXNcIik7XG5cdGlmIChjYXBhYmlsaXRpZXNBbm5vdGF0aW9uKSB7XG5cdFx0cHVzaEZpZWxkKChjYXBhYmlsaXRpZXNBbm5vdGF0aW9uLkRlbGV0ZVJlc3RyaWN0aW9ucz8uRGVsZXRhYmxlIGFzIFBhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbjxib29sZWFuPik/LnBhdGgsIFwicmVzdHJpY3Rpb25cIik7XG5cdFx0cHVzaEZpZWxkKChjYXBhYmlsaXRpZXNBbm5vdGF0aW9uLlVwZGF0ZVJlc3RyaWN0aW9ucz8uVXBkYXRhYmxlIGFzIFBhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbjxib29sZWFuPik/LnBhdGgsIFwicmVzdHJpY3Rpb25cIik7XG5cdH1cblxuXHRyZXR1cm4gc2VsZWN0ZWRGaWVsZHM7XG59XG5cbi8qKlxuICogVGhpcyByZXR1cm4gdGhlIHByb3BlcnR5IHRoYXQgYXJlIGF2YWlsYWJsZSBmcm9tIHRoZSBOYXZpZ2F0aW9uQXZhaWxhYmxlIGFubm90YXRpb24gb24gSUJOIEZpZWxkcy5cbiAqIEBwYXJhbSBsaW5lSXRlbSBUaGUgbGluZSBpdGVtIGFubm90YXRpb24uXG4gKiBAcGFyYW0gZW50aXR5VHlwZSBUaGUgRW50aXR5IFR5cGUuXG4gKiBAcmV0dXJucyBBbiBhcnJheSBjb250YWluaW5nIHRoZSBwcm9wZXJ0aWVzIG5hbWUuXG4gKi9cbmZ1bmN0aW9uIGdldE5hdmlnYXRpb25BdmFpbGFibGVGaWVsZHNGcm9tTGluZUl0ZW0obGluZUl0ZW06IExpbmVJdGVtLCBlbnRpdHlUeXBlOiBFbnRpdHlUeXBlKTogc3RyaW5nW10ge1xuXHRjb25zdCBzZWxlY3RlZEZpZWxkczogc3RyaW5nW10gPSBbXTtcblx0bGluZUl0ZW0uZm9yRWFjaChmdW5jdGlvbiAocmVjb3JkKSB7XG5cdFx0aWYgKFxuXHRcdFx0cmVjb3JkLiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24gJiZcblx0XHRcdCFyZWNvcmQuSW5saW5lICYmXG5cdFx0XHQhcmVjb3JkLkRldGVybWluaW5nICYmXG5cdFx0XHRpc1BhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbihyZWNvcmQuTmF2aWdhdGlvbkF2YWlsYWJsZSlcblx0XHQpIHtcblx0XHRcdGNvbnN0IHBhdGggPSAocmVjb3JkLk5hdmlnYXRpb25BdmFpbGFibGUgYXMgdW5rbm93biBhcyB7IHBhdGg6IHN0cmluZyB9KS5wYXRoO1xuXHRcdFx0aWYgKGVudGl0eVR5cGUucmVzb2x2ZVBhdGgocGF0aCkpIHtcblx0XHRcdFx0c2VsZWN0ZWRGaWVsZHMucHVzaChwYXRoKTtcblx0XHRcdH1cblx0XHR9XG5cdH0pO1xuXHRyZXR1cm4gc2VsZWN0ZWRGaWVsZHM7XG59XG5cbi8qKlxuICogR2V0IHRoZSBuYXZpZ2F0aW9uIHRhcmdldCBwYXRoIGZyb20gbWFuaWZlc3Qgc2V0dGluZ3MuXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dCBUaGUgY29udmVydGVyIGNvbnRleHRcbiAqIEBwYXJhbSBuYXZpZ2F0aW9uUHJvcGVydHlQYXRoIFRoZSBuYXZpZ2F0aW9uIHBhdGggdG8gY2hlY2sgaW4gdGhlIG1hbmlmZXN0IHNldHRpbmdzXG4gKiBAcmV0dXJucyBOYXZpZ2F0aW9uIHBhdGggZnJvbSBtYW5pZmVzdCBzZXR0aW5nc1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0TmF2aWdhdGlvblRhcmdldFBhdGgoY29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+LCBuYXZpZ2F0aW9uUHJvcGVydHlQYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xuXHRjb25zdCBtYW5pZmVzdFdyYXBwZXIgPSBjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0V3JhcHBlcigpO1xuXHRpZiAobmF2aWdhdGlvblByb3BlcnR5UGF0aCAmJiBtYW5pZmVzdFdyYXBwZXIuZ2V0TmF2aWdhdGlvbkNvbmZpZ3VyYXRpb24obmF2aWdhdGlvblByb3BlcnR5UGF0aCkpIHtcblx0XHRjb25zdCBuYXZDb25maWcgPSBtYW5pZmVzdFdyYXBwZXIuZ2V0TmF2aWdhdGlvbkNvbmZpZ3VyYXRpb24obmF2aWdhdGlvblByb3BlcnR5UGF0aCk7XG5cdFx0aWYgKE9iamVjdC5rZXlzKG5hdkNvbmZpZykubGVuZ3RoID4gMCkge1xuXHRcdFx0cmV0dXJuIG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGg7XG5cdFx0fVxuXHR9XG5cdGNvbnN0IGRhdGFNb2RlbFBhdGggPSBjb252ZXJ0ZXJDb250ZXh0LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKTtcblx0Y29uc3QgY29udGV4dFBhdGggPSBjb252ZXJ0ZXJDb250ZXh0LmdldENvbnRleHRQYXRoKCk7XG5cdGNvbnN0IG5hdkNvbmZpZ0ZvckNvbnRleHRQYXRoID0gbWFuaWZlc3RXcmFwcGVyLmdldE5hdmlnYXRpb25Db25maWd1cmF0aW9uKGNvbnRleHRQYXRoKTtcblx0aWYgKG5hdkNvbmZpZ0ZvckNvbnRleHRQYXRoICYmIE9iamVjdC5rZXlzKG5hdkNvbmZpZ0ZvckNvbnRleHRQYXRoKS5sZW5ndGggPiAwKSB7XG5cdFx0cmV0dXJuIGNvbnRleHRQYXRoO1xuXHR9XG5cdHJldHVybiBkYXRhTW9kZWxQYXRoLnRhcmdldEVudGl0eVNldCA/IGRhdGFNb2RlbFBhdGgudGFyZ2V0RW50aXR5U2V0Lm5hbWUgOiBkYXRhTW9kZWxQYXRoLnN0YXJ0aW5nRW50aXR5U2V0Lm5hbWU7XG59XG5cbmZ1bmN0aW9uIGdldFNlbWFudGljS2V5c0FuZFRpdGxlSW5mbyhjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4pOiB7XG5cdGhlYWRlckluZm9UaXRsZVBhdGg6IHN0cmluZztcblx0c2VtYW50aWNLZXlDb2x1bW5zOiBzdHJpbmdbXTtcblx0aGVhZGVySW5mb1R5cGVOYW1lOiBQcm9wZXJ0eUFubm90YXRpb25WYWx1ZTxTdHJpbmc+IHwgdW5kZWZpbmVkO1xufSB7XG5cdGNvbnN0IGhlYWRlckluZm9UaXRsZVBhdGggPSAoY29udmVydGVyQ29udGV4dC5nZXRBbm5vdGF0aW9uRW50aXR5VHlwZSgpPy5hbm5vdGF0aW9ucz8uVUk/LkhlYWRlckluZm8/LlRpdGxlIGFzIERhdGFGaWVsZFR5cGVzKT8uVmFsdWVcblx0XHQ/LnBhdGg7XG5cdGNvbnN0IHNlbWFudGljS2V5QW5ub3RhdGlvbnMgPSBjb252ZXJ0ZXJDb250ZXh0LmdldEFubm90YXRpb25FbnRpdHlUeXBlKCk/LmFubm90YXRpb25zPy5Db21tb24/LlNlbWFudGljS2V5O1xuXHRjb25zdCBoZWFkZXJJbmZvVHlwZU5hbWUgPSBjb252ZXJ0ZXJDb250ZXh0Py5nZXRBbm5vdGF0aW9uRW50aXR5VHlwZSgpPy5hbm5vdGF0aW9ucz8uVUk/LkhlYWRlckluZm8/LlR5cGVOYW1lO1xuXHRjb25zdCBzZW1hbnRpY0tleUNvbHVtbnM6IHN0cmluZ1tdID0gW107XG5cdGlmIChzZW1hbnRpY0tleUFubm90YXRpb25zKSB7XG5cdFx0c2VtYW50aWNLZXlBbm5vdGF0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uIChvQ29sdW1uKSB7XG5cdFx0XHRzZW1hbnRpY0tleUNvbHVtbnMucHVzaChvQ29sdW1uLnZhbHVlKTtcblx0XHR9KTtcblx0fVxuXHRyZXR1cm4geyBoZWFkZXJJbmZvVGl0bGVQYXRoLCBzZW1hbnRpY0tleUNvbHVtbnMsIGhlYWRlckluZm9UeXBlTmFtZSB9O1xufVxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVRhYmxlVmlzdWFsaXphdGlvbihcblx0bGluZUl0ZW1Bbm5vdGF0aW9uOiBMaW5lSXRlbSxcblx0dmlzdWFsaXphdGlvblBhdGg6IHN0cmluZyxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+LFxuXHRwYXJhbXM/OiBQYXJ0aWFsPHtcblx0XHRwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbjogUHJlc2VudGF0aW9uVmFyaWFudFR5cGU7XG5cdFx0c2VsZWN0aW9uVmFyaWFudEFubm90YXRpb246IFNlbGVjdGlvblZhcmlhbnRUeXBlO1xuXHRcdGlzQ29uZGVuc2VkVGFibGVMYXlvdXRDb21wbGlhbnQ6IGJvb2xlYW47XG5cdH0+XG4pOiBUYWJsZVZpc3VhbGl6YXRpb24ge1xuXHRjb25zdCB7IHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uLCBpc0NvbmRlbnNlZFRhYmxlTGF5b3V0Q29tcGxpYW50LCBzZWxlY3Rpb25WYXJpYW50QW5ub3RhdGlvbiB9ID0gcGFyYW1zID8/IHt9O1xuXHRjb25zdCB0YWJsZU1hbmlmZXN0Q29uZmlnID0gZ2V0VGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24oXG5cdFx0bGluZUl0ZW1Bbm5vdGF0aW9uLFxuXHRcdHZpc3VhbGl6YXRpb25QYXRoLFxuXHRcdGNvbnZlcnRlckNvbnRleHQsXG5cdFx0aXNDb25kZW5zZWRUYWJsZUxheW91dENvbXBsaWFudCxcblx0XHRzZWxlY3Rpb25WYXJpYW50QW5ub3RhdGlvblxuXHQpO1xuXHRjb25zdCB7IG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGggfSA9IHNwbGl0UGF0aCh2aXN1YWxpemF0aW9uUGF0aCk7XG5cdGNvbnN0IG5hdmlnYXRpb25UYXJnZXRQYXRoID0gZ2V0TmF2aWdhdGlvblRhcmdldFBhdGgoY29udmVydGVyQ29udGV4dCwgbmF2aWdhdGlvblByb3BlcnR5UGF0aCk7XG5cdGNvbnN0IG5hdmlnYXRpb25TZXR0aW5ncyA9IGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RXcmFwcGVyKCkuZ2V0TmF2aWdhdGlvbkNvbmZpZ3VyYXRpb24obmF2aWdhdGlvblRhcmdldFBhdGgpO1xuXHRjb25zdCBjb2x1bW5zID0gZ2V0VGFibGVDb2x1bW5zKGxpbmVJdGVtQW5ub3RhdGlvbiwgdGFibGVNYW5pZmVzdENvbmZpZy50eXBlLCB2aXN1YWxpemF0aW9uUGF0aCwgY29udmVydGVyQ29udGV4dCk7XG5cdGNvbnN0IG9wZXJhdGlvbkF2YWlsYWJsZU1hcCA9IGdldE9wZXJhdGlvbkF2YWlsYWJsZU1hcChsaW5lSXRlbUFubm90YXRpb24sIGNvbnZlcnRlckNvbnRleHQpO1xuXHRjb25zdCBzZW1hbnRpY0tleXNBbmRIZWFkZXJJbmZvVGl0bGUgPSBnZXRTZW1hbnRpY0tleXNBbmRUaXRsZUluZm8oY29udmVydGVyQ29udGV4dCk7XG5cdGNvbnN0IHN0YW5kYXJkQWN0aW9uc0NvbmZpZ3VyYXRpb24gPSBnZXRTdGFuZGFyZEFjdGlvbnNDb25maWd1cmF0aW9uKFxuXHRcdGxpbmVJdGVtQW5ub3RhdGlvbixcblx0XHR2aXN1YWxpemF0aW9uUGF0aCxcblx0XHRjb252ZXJ0ZXJDb250ZXh0LFxuXHRcdHRhYmxlTWFuaWZlc3RDb25maWcsXG5cdFx0bmF2aWdhdGlvblNldHRpbmdzXG5cdCk7XG5cdGNvbnN0IHRhYmxlQW5ub3RhdGlvbiA9IGdldFRhYmxlQW5ub3RhdGlvbkNvbmZpZ3VyYXRpb24oXG5cdFx0bGluZUl0ZW1Bbm5vdGF0aW9uLFxuXHRcdHZpc3VhbGl6YXRpb25QYXRoLFxuXHRcdGNvbnZlcnRlckNvbnRleHQsXG5cdFx0dGFibGVNYW5pZmVzdENvbmZpZyxcblx0XHRjb2x1bW5zLFxuXHRcdG5hdmlnYXRpb25TZXR0aW5ncyxcblx0XHRzdGFuZGFyZEFjdGlvbnNDb25maWd1cmF0aW9uLFxuXHRcdHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uXG5cdCk7XG5cdGNvbnN0IHRhYmxlQWN0aW9ucyA9IGdldFRhYmxlQWN0aW9ucyhcblx0XHRsaW5lSXRlbUFubm90YXRpb24sXG5cdFx0dmlzdWFsaXphdGlvblBhdGgsXG5cdFx0Y29udmVydGVyQ29udGV4dCxcblx0XHRzdGFuZGFyZEFjdGlvbnNDb25maWd1cmF0aW9uLnN0YW5kYXJkQWN0aW9ucyxcblx0XHRuYXZpZ2F0aW9uU2V0dGluZ3Ncblx0KTtcblx0Y29uc3Qgb3BlcmF0aW9uQXZhaWxhYmxlID0gZ2V0T3BlcmF0aW9uQXZhaWxhYmxlUHJvcGVydGllcyhvcGVyYXRpb25BdmFpbGFibGVNYXAsIGNvbnZlcnRlckNvbnRleHQpO1xuXHRsZXQgaGVhZGVyID0gdGFibGVNYW5pZmVzdENvbmZpZy5oZWFkZXI7XG5cdGhlYWRlciA/Pz0gdGFibGVBbm5vdGF0aW9uLnRpdGxlID09PSBcIlwiID8gdW5kZWZpbmVkIDogdGFibGVBbm5vdGF0aW9uLnRpdGxlO1xuXHRjb25zdCBvVmlzdWFsaXphdGlvbjogVGFibGVWaXN1YWxpemF0aW9uID0ge1xuXHRcdHR5cGU6IFZpc3VhbGl6YXRpb25UeXBlLlRhYmxlLFxuXHRcdGFubm90YXRpb246IHRhYmxlQW5ub3RhdGlvbixcblx0XHRjb250cm9sOiB0YWJsZU1hbmlmZXN0Q29uZmlnLFxuXHRcdGFjdGlvbnM6IHRhYmxlQWN0aW9ucy5hY3Rpb25zLFxuXHRcdGNvbW1hbmRBY3Rpb25zOiB0YWJsZUFjdGlvbnMuY29tbWFuZEFjdGlvbnMsXG5cdFx0Y29sdW1uczogY29sdW1ucyxcblx0XHRvcGVyYXRpb25BdmFpbGFibGVNYXA6IEpTT04uc3RyaW5naWZ5KG9wZXJhdGlvbkF2YWlsYWJsZU1hcCksXG5cdFx0b3BlcmF0aW9uQXZhaWxhYmxlUHJvcGVydGllczogb3BlcmF0aW9uQXZhaWxhYmxlLFxuXHRcdGhlYWRlckluZm9UaXRsZTogc2VtYW50aWNLZXlzQW5kSGVhZGVySW5mb1RpdGxlLmhlYWRlckluZm9UaXRsZVBhdGgsXG5cdFx0c2VtYW50aWNLZXlzOiBzZW1hbnRpY0tleXNBbmRIZWFkZXJJbmZvVGl0bGUuc2VtYW50aWNLZXlDb2x1bW5zLFxuXHRcdGhlYWRlckluZm9UeXBlTmFtZTogc2VtYW50aWNLZXlzQW5kSGVhZGVySW5mb1RpdGxlLmhlYWRlckluZm9UeXBlTmFtZSxcblx0XHRlbmFibGUkc2VsZWN0OiB0cnVlLFxuXHRcdGVuYWJsZSQkZ2V0S2VlcEFsaXZlQ29udGV4dDogdHJ1ZSxcblx0XHRoZWFkZXI6IGhlYWRlcixcblx0XHRoZWFkZXJWaXNpYmxlOiB0YWJsZU1hbmlmZXN0Q29uZmlnLmhlYWRlclZpc2libGUsXG5cdFx0cmVxdWVzdEF0TGVhc3Q6IGNyZWF0ZVJlcXVlc3RlZFByb3BlcnRpZXMobGluZUl0ZW1Bbm5vdGF0aW9uLCBjb252ZXJ0ZXJDb250ZXh0LCBvcGVyYXRpb25BdmFpbGFibGUsIHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uKSxcblx0XHRoYW5kbGVQYXRjaFNlbnQ6IGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RXcmFwcGVyKCkuZ2V0VGVtcGxhdGVUeXBlKCkgIT09IFRlbXBsYXRlVHlwZS5MaXN0UmVwb3J0XG5cdH07XG5cdHVwZGF0ZUxpbmtlZFByb3BlcnRpZXMoY29udmVydGVyQ29udGV4dCwgY29sdW1ucyk7XG5cdHVwZGF0ZVRhYmxlVmlzdWFsaXphdGlvbkZvclR5cGUoXG5cdFx0b1Zpc3VhbGl6YXRpb24sXG5cdFx0Y29udmVydGVyQ29udGV4dC5nZXRBbm5vdGF0aW9uRW50aXR5VHlwZShsaW5lSXRlbUFubm90YXRpb24pLFxuXHRcdGNvbnZlcnRlckNvbnRleHQsXG5cdFx0cHJlc2VudGF0aW9uVmFyaWFudEFubm90YXRpb25cblx0KTtcblx0cmV0dXJuIG9WaXN1YWxpemF0aW9uO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZURlZmF1bHRUYWJsZVZpc3VhbGl6YXRpb24oXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pixcblx0aXNCbGFua1RhYmxlPzogYm9vbGVhblxuKTogVGFibGVWaXN1YWxpemF0aW9uIHtcblx0Y29uc3QgdGFibGVNYW5pZmVzdENvbmZpZyA9IGdldFRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uKHVuZGVmaW5lZCwgXCJcIiwgY29udmVydGVyQ29udGV4dCwgZmFsc2UpO1xuXHRjb25zdCBjb2x1bW5zID0gZ2V0Q29sdW1uc0Zyb21FbnRpdHlUeXBlKFxuXHRcdHt9LFxuXHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZSgpLFxuXHRcdFtdLFxuXHRcdGNvbnZlcnRlckNvbnRleHQsXG5cdFx0dGFibGVNYW5pZmVzdENvbmZpZy50eXBlLFxuXHRcdHRhYmxlTWFuaWZlc3RDb25maWcuY3JlYXRpb25Nb2RlLFxuXHRcdHt9XG5cdCk7XG5cdGNvbnN0IG9wZXJhdGlvbkF2YWlsYWJsZU1hcCA9IGdldE9wZXJhdGlvbkF2YWlsYWJsZU1hcCh1bmRlZmluZWQsIGNvbnZlcnRlckNvbnRleHQpO1xuXHRjb25zdCBzZW1hbnRpY0tleXNBbmRIZWFkZXJJbmZvVGl0bGUgPSBnZXRTZW1hbnRpY0tleXNBbmRUaXRsZUluZm8oY29udmVydGVyQ29udGV4dCk7XG5cdGNvbnN0IG5hdmlnYXRpb25UYXJnZXRQYXRoID0gZ2V0TmF2aWdhdGlvblRhcmdldFBhdGgoY29udmVydGVyQ29udGV4dCwgXCJcIik7XG5cdGNvbnN0IG5hdmlnYXRpb25TZXR0aW5ncyA9IGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RXcmFwcGVyKCkuZ2V0TmF2aWdhdGlvbkNvbmZpZ3VyYXRpb24obmF2aWdhdGlvblRhcmdldFBhdGgpO1xuXHRjb25zdCBzdGFuZGFyZEFjdGlvbnNDb25maWd1cmF0aW9uID0gZ2V0U3RhbmRhcmRBY3Rpb25zQ29uZmlndXJhdGlvbihcblx0XHR1bmRlZmluZWQsXG5cdFx0XCJcIixcblx0XHRjb252ZXJ0ZXJDb250ZXh0LFxuXHRcdHRhYmxlTWFuaWZlc3RDb25maWcsXG5cdFx0bmF2aWdhdGlvblNldHRpbmdzXG5cdCk7XG5cdGNvbnN0IG9WaXN1YWxpemF0aW9uOiBUYWJsZVZpc3VhbGl6YXRpb24gPSB7XG5cdFx0dHlwZTogVmlzdWFsaXphdGlvblR5cGUuVGFibGUsXG5cdFx0YW5ub3RhdGlvbjogZ2V0VGFibGVBbm5vdGF0aW9uQ29uZmlndXJhdGlvbihcblx0XHRcdHVuZGVmaW5lZCxcblx0XHRcdFwiXCIsXG5cdFx0XHRjb252ZXJ0ZXJDb250ZXh0LFxuXHRcdFx0dGFibGVNYW5pZmVzdENvbmZpZyxcblx0XHRcdGlzQmxhbmtUYWJsZSA/IFtdIDogY29sdW1ucyxcblx0XHRcdG5hdmlnYXRpb25TZXR0aW5ncyxcblx0XHRcdHN0YW5kYXJkQWN0aW9uc0NvbmZpZ3VyYXRpb25cblx0XHQpLFxuXHRcdGNvbnRyb2w6IHRhYmxlTWFuaWZlc3RDb25maWcsXG5cdFx0YWN0aW9uczogW10sXG5cdFx0Y29sdW1uczogY29sdW1ucyxcblx0XHRvcGVyYXRpb25BdmFpbGFibGVNYXA6IEpTT04uc3RyaW5naWZ5KG9wZXJhdGlvbkF2YWlsYWJsZU1hcCksXG5cdFx0b3BlcmF0aW9uQXZhaWxhYmxlUHJvcGVydGllczogZ2V0T3BlcmF0aW9uQXZhaWxhYmxlUHJvcGVydGllcyhvcGVyYXRpb25BdmFpbGFibGVNYXAsIGNvbnZlcnRlckNvbnRleHQpLFxuXHRcdGhlYWRlckluZm9UaXRsZTogc2VtYW50aWNLZXlzQW5kSGVhZGVySW5mb1RpdGxlLmhlYWRlckluZm9UaXRsZVBhdGgsXG5cdFx0c2VtYW50aWNLZXlzOiBzZW1hbnRpY0tleXNBbmRIZWFkZXJJbmZvVGl0bGUuc2VtYW50aWNLZXlDb2x1bW5zLFxuXHRcdGhlYWRlckluZm9UeXBlTmFtZTogc2VtYW50aWNLZXlzQW5kSGVhZGVySW5mb1RpdGxlLmhlYWRlckluZm9UeXBlTmFtZSxcblx0XHRlbmFibGUkc2VsZWN0OiB0cnVlLFxuXHRcdGVuYWJsZSQkZ2V0S2VlcEFsaXZlQ29udGV4dDogdHJ1ZSxcblx0XHRoZWFkZXI6IHRhYmxlTWFuaWZlc3RDb25maWcuaGVhZGVyLFxuXHRcdGhlYWRlclZpc2libGU6IHRhYmxlTWFuaWZlc3RDb25maWcuaGVhZGVyVmlzaWJsZSxcblx0XHRoYW5kbGVQYXRjaFNlbnQ6IGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RXcmFwcGVyKCkuZ2V0VGVtcGxhdGVUeXBlKCkgIT09IFRlbXBsYXRlVHlwZS5MaXN0UmVwb3J0LFxuXHRcdHJlcXVlc3RBdExlYXN0OiB7fVxuXHR9O1xuXHR1cGRhdGVMaW5rZWRQcm9wZXJ0aWVzKGNvbnZlcnRlckNvbnRleHQsIGNvbHVtbnMpO1xuXHR1cGRhdGVUYWJsZVZpc3VhbGl6YXRpb25Gb3JUeXBlKG9WaXN1YWxpemF0aW9uLCBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGUoKSwgY29udmVydGVyQ29udGV4dCk7XG5cdHJldHVybiBvVmlzdWFsaXphdGlvbjtcbn1cbi8qKlxuICogR2V0cyB0aGUgbWFwIG9mIENvcmUuT3BlcmF0aW9uQXZhaWxhYmxlIHByb3BlcnR5IHBhdGhzIGZvciBhbGwgRGF0YUZpZWxkRm9yQWN0aW9ucy5cbiAqIEBwYXJhbSBsaW5lSXRlbUFubm90YXRpb24gVGhlIGluc3RhbmNlIG9mIHRoZSBsaW5lIGl0ZW1cbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBpbnN0YW5jZSBvZiB0aGUgY29udmVydGVyIGNvbnRleHRcbiAqIEByZXR1cm5zIFRoZSByZWNvcmQgY29udGFpbmluZyBhbGwgYWN0aW9uIG5hbWVzIGFuZCB0aGVpciBjb3JyZXNwb25kaW5nIENvcmUuT3BlcmF0aW9uQXZhaWxhYmxlIHByb3BlcnR5IHBhdGhzXG4gKi9cbmZ1bmN0aW9uIGdldE9wZXJhdGlvbkF2YWlsYWJsZU1hcChcblx0bGluZUl0ZW1Bbm5vdGF0aW9uOiBMaW5lSXRlbSB8IHVuZGVmaW5lZCxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+XG4pOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB7XG5cdHJldHVybiBBY3Rpb25IZWxwZXIuZ2V0T3BlcmF0aW9uQXZhaWxhYmxlTWFwKGxpbmVJdGVtQW5ub3RhdGlvbiwgXCJ0YWJsZVwiLCBjb252ZXJ0ZXJDb250ZXh0KTtcbn1cbi8qKlxuICogR2V0cyB1cGRhdGFibGUgcHJvcGVydHlQYXRoIGZvciB0aGUgY3VycmVudCBlbnRpdHlzZXQgaWYgdmFsaWQuXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dCBUaGUgaW5zdGFuY2Ugb2YgdGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKiBAcmV0dXJucyBUaGUgdXBkYXRhYmxlIHByb3BlcnR5IGZvciB0aGUgcm93c1xuICovXG5mdW5jdGlvbiBnZXRDdXJyZW50RW50aXR5U2V0VXBkYXRhYmxlUGF0aChjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4pOiBzdHJpbmcge1xuXHRjb25zdCByZXN0cmljdGlvbnMgPSBnZXRSZXN0cmljdGlvbnMoY29udmVydGVyQ29udGV4dCk7XG5cdGNvbnN0IGVudGl0eVNldCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0KCk7XG5cdGNvbnN0IHVwZGF0YWJsZSA9IHJlc3RyaWN0aW9ucy5pc1VwZGF0YWJsZTtcblx0Y29uc3QgaXNPbmx5RHluYW1pY09uQ3VycmVudEVudGl0eSA9ICFpc0NvbnN0YW50KHVwZGF0YWJsZS5leHByZXNzaW9uKSAmJiB1cGRhdGFibGUubmF2aWdhdGlvbkV4cHJlc3Npb24uX3R5cGUgPT09IFwiVW5yZXNvbHZhYmxlXCI7XG5cdGNvbnN0IHVwZGF0YWJsZUV4cHJlc3Npb24gPSBlbnRpdHlTZXQ/LmFubm90YXRpb25zLkNhcGFiaWxpdGllcz8uVXBkYXRlUmVzdHJpY3Rpb25zPy5VcGRhdGFibGU7XG5cdGNvbnN0IHVwZGF0YWJsZVByb3BlcnR5UGF0aCA9IGlzUGF0aEFubm90YXRpb25FeHByZXNzaW9uKHVwZGF0YWJsZUV4cHJlc3Npb24pICYmIHVwZGF0YWJsZUV4cHJlc3Npb24ucGF0aDtcblx0cmV0dXJuIGlzT25seUR5bmFtaWNPbkN1cnJlbnRFbnRpdHkgPyAodXBkYXRhYmxlUHJvcGVydHlQYXRoIGFzIHN0cmluZykgOiBcIlwiO1xufVxuLyoqXG4gKiBNZXRob2QgdG8gcmV0cmlldmUgYWxsIHByb3BlcnR5IHBhdGhzIGFzc2lnbmVkIHRvIHRoZSBDb3JlLk9wZXJhdGlvbkF2YWlsYWJsZSBhbm5vdGF0aW9uLlxuICogQHBhcmFtIG9wZXJhdGlvbkF2YWlsYWJsZU1hcCBUaGUgcmVjb3JkIGNvbnNpc3Rpbmcgb2YgYWN0aW9ucyBhbmQgdGhlaXIgQ29yZS5PcGVyYXRpb25BdmFpbGFibGUgcHJvcGVydHkgcGF0aHNcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBpbnN0YW5jZSBvZiB0aGUgY29udmVydGVyIGNvbnRleHRcbiAqIEByZXR1cm5zIFRoZSBDU1Ygc3RyaW5nIG9mIGFsbCBwcm9wZXJ0eSBwYXRocyBhc3NvY2lhdGVkIHdpdGggdGhlIENvcmUuT3BlcmF0aW9uQXZhaWxhYmxlIGFubm90YXRpb25cbiAqL1xuZnVuY3Rpb24gZ2V0T3BlcmF0aW9uQXZhaWxhYmxlUHJvcGVydGllcyhcblx0b3BlcmF0aW9uQXZhaWxhYmxlTWFwOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+XG4pOiBzdHJpbmcge1xuXHRjb25zdCBwcm9wZXJ0aWVzID0gbmV3IFNldCgpO1xuXHRmb3IgKGNvbnN0IGFjdGlvbk5hbWUgaW4gb3BlcmF0aW9uQXZhaWxhYmxlTWFwKSB7XG5cdFx0Y29uc3QgcHJvcGVydHlOYW1lID0gb3BlcmF0aW9uQXZhaWxhYmxlTWFwW2FjdGlvbk5hbWVdO1xuXHRcdGlmIChwcm9wZXJ0eU5hbWUgPT09IG51bGwpIHtcblx0XHRcdC8vIEFubm90YXRpb24gY29uZmlndXJlZCB3aXRoIGV4cGxpY2l0ICdudWxsJyAoYWN0aW9uIGFkdmVydGlzZW1lbnQgcmVsZXZhbnQpXG5cdFx0XHRwcm9wZXJ0aWVzLmFkZChhY3Rpb25OYW1lKTtcblx0XHR9IGVsc2UgaWYgKHR5cGVvZiBwcm9wZXJ0eU5hbWUgPT09IFwic3RyaW5nXCIpIHtcblx0XHRcdC8vIEFkZCBwcm9wZXJ0eSBwYXRocyBhbmQgbm90IENvbnN0YW50IHZhbHVlcy5cblx0XHRcdHByb3BlcnRpZXMuYWRkKHByb3BlcnR5TmFtZSk7XG5cdFx0fVxuXHR9XG5cdGlmIChwcm9wZXJ0aWVzLnNpemUpIHtcblx0XHQvLyBTb21lIGFjdGlvbnMgaGF2ZSBhbiBvcGVyYXRpb24gYXZhaWxhYmxlIGJhc2VkIG9uIHByb3BlcnR5IC0tPiB3ZSBuZWVkIHRvIGxvYWQgdGhlIEhlYWRlckluZm8uVGl0bGUgcHJvcGVydHlcblx0XHQvLyBzbyB0aGF0IHRoZSBkaWFsb2cgb24gcGFydGlhbCBhY3Rpb25zIGlzIGRpc3BsYXllZCBwcm9wZXJseSAoQkNQIDIxODAyNzE0MjUpXG5cdFx0Y29uc3QgZW50aXR5VHlwZSA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZSgpO1xuXHRcdGNvbnN0IHRpdGxlUHJvcGVydHkgPSAoZW50aXR5VHlwZS5hbm5vdGF0aW9ucz8uVUk/LkhlYWRlckluZm8/LlRpdGxlIGFzIERhdGFGaWVsZFR5cGVzKT8uVmFsdWU/LnBhdGg7XG5cdFx0aWYgKHRpdGxlUHJvcGVydHkpIHtcblx0XHRcdHByb3BlcnRpZXMuYWRkKHRpdGxlUHJvcGVydHkpO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gQXJyYXkuZnJvbShwcm9wZXJ0aWVzKS5qb2luKFwiLFwiKTtcbn1cbi8qKlxuICogSXRlcmF0ZXMgb3ZlciB0aGUgRGF0YUZpZWxkRm9yQWN0aW9uIGFuZCBEYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24gb2YgYSBsaW5lIGl0ZW0gYW5kXG4gKiByZXR1cm5zIGFsbCB0aGUgVUkuSGlkZGVuIGFubm90YXRpb24gZXhwcmVzc2lvbnMuXG4gKiBAcGFyYW0gbGluZUl0ZW1Bbm5vdGF0aW9uIENvbGxlY3Rpb24gb2YgZGF0YSBmaWVsZHMgdXNlZCBmb3IgcmVwcmVzZW50YXRpb24gaW4gYSB0YWJsZSBvciBsaXN0XG4gKiBAcGFyYW0gY3VycmVudEVudGl0eVR5cGUgQ3VycmVudCBlbnRpdHkgdHlwZVxuICogQHBhcmFtIGNvbnRleHREYXRhTW9kZWxPYmplY3RQYXRoIE9iamVjdCBwYXRoIG9mIHRoZSBkYXRhIG1vZGVsXG4gKiBAcmV0dXJucyBBbGwgdGhlIGBVSS5IaWRkZW5gIHBhdGggZXhwcmVzc2lvbnMgZm91bmQgaW4gdGhlIHJlbGV2YW50IGFjdGlvbnNcbiAqL1xuZnVuY3Rpb24gZ2V0VUlIaWRkZW5FeHBGb3JBY3Rpb25zUmVxdWlyaW5nQ29udGV4dChcblx0bGluZUl0ZW1Bbm5vdGF0aW9uOiBMaW5lSXRlbSxcblx0Y3VycmVudEVudGl0eVR5cGU6IEVudGl0eVR5cGUsXG5cdGNvbnRleHREYXRhTW9kZWxPYmplY3RQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPFBhZ2VDb250ZXh0UGF0aFRhcmdldD5cbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPltdIHtcblx0Y29uc3QgYVVpSGlkZGVuUGF0aEV4cHJlc3Npb25zOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj5bXSA9IFtdO1xuXHRsaW5lSXRlbUFubm90YXRpb24uZm9yRWFjaCgoZGF0YUZpZWxkKSA9PiB7XG5cdFx0Ly8gQ2hlY2sgaWYgdGhlIGxpbmVJdGVtIGNvbnRleHQgaXMgdGhlIHNhbWUgYXMgdGhhdCBvZiB0aGUgYWN0aW9uOlxuXHRcdGlmIChcblx0XHRcdChkYXRhRmllbGQuJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckFjdGlvbiAmJlxuXHRcdFx0XHRkYXRhRmllbGQ/LkFjdGlvblRhcmdldD8uaXNCb3VuZCAmJlxuXHRcdFx0XHRjdXJyZW50RW50aXR5VHlwZSA9PT0gZGF0YUZpZWxkPy5BY3Rpb25UYXJnZXQuc291cmNlRW50aXR5VHlwZSkgfHxcblx0XHRcdChkYXRhRmllbGQuJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbiAmJlxuXHRcdFx0XHRkYXRhRmllbGQuUmVxdWlyZXNDb250ZXh0ICYmXG5cdFx0XHRcdGRhdGFGaWVsZD8uSW5saW5lPy52YWx1ZU9mKCkgIT09IHRydWUpXG5cdFx0KSB7XG5cdFx0XHRpZiAodHlwZW9mIGRhdGFGaWVsZC5hbm5vdGF0aW9ucz8uVUk/LkhpZGRlbj8udmFsdWVPZigpID09PSBcIm9iamVjdFwiKSB7XG5cdFx0XHRcdGFVaUhpZGRlblBhdGhFeHByZXNzaW9ucy5wdXNoKGVxdWFsKGdldEhpZGRlbkV4cHJlc3Npb25BdFRhYmxlTGV2ZWwoZGF0YUZpZWxkLCBjb250ZXh0RGF0YU1vZGVsT2JqZWN0UGF0aCksIGZhbHNlKSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9KTtcblx0cmV0dXJuIGFVaUhpZGRlblBhdGhFeHByZXNzaW9ucztcbn1cbi8qKlxuICogVGhpcyBtZXRob2QgaXMgdXNlZCB0byBnZXQgdGhlIGJpbmRpbmcgZXhwcmVzc2lvbiBvZiB0aGUgcGF0aCBvZiBhIERhdGFGaWVsZC5cbiAqIEBwYXJhbSBleHByZXNzaW9uIENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uXG4gKiBAcmV0dXJucyBUaGUgYmluZGluZyBleHByZXNzaW9uXG4gKi9cbmZ1bmN0aW9uIGdldFBhdGhGcm9tQWN0aW9uQW5ub3RhdGlvbihleHByZXNzaW9uOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbik6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIHtcblx0bGV0IHBhdGg6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uO1xuXHRpZiAoaXNQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24oZXhwcmVzc2lvbikpIHtcblx0XHRwYXRoID0gZXhwcmVzc2lvbi5wYXRoO1xuXHR9IGVsc2Uge1xuXHRcdHBhdGggPSBleHByZXNzaW9uO1xuXHR9XG5cdHJldHVybiBwYXRoO1xufVxuLyoqXG4gKiBUaGlzIG1ldGhvZCBpcyB1c2VkIHRvIGNoYW5nZSB0aGUgY29udGV4dCBjdXJyZW50bHkgcmVmZXJlbmNlZCBieSB0aGlzIGJpbmRpbmcgYnkgcmVtb3ZpbmcgdGhlIGxhc3QgbmF2aWdhdGlvbiBwcm9wZXJ0eS5cbiAqXG4gKiBJdCBpcyB1c2VkIChzcGVjaWZpY2FsbHkgaW4gdGhpcyBjYXNlKSwgdG8gdHJhbnNmb3JtIGEgYmluZGluZyBtYWRlIGZvciBhIE5hdlByb3AgY29udGV4dCAvTWFpbk9iamVjdC9OYXZQcm9wMS9OYXZQcm9wMixcbiAqIGludG8gYSBiaW5kaW5nIG9uIHRoZSBwcmV2aW91cyBjb250ZXh0IC9NYWluT2JqZWN0L05hdlByb3AxLlxuICogQHBhcmFtIHNvdXJjZSBEYXRhRmllbGRGb3JBY3Rpb24gfCBEYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24gfCBDdXN0b21BY3Rpb25cbiAqIEBwYXJhbSBjb250ZXh0RGF0YU1vZGVsT2JqZWN0UGF0aCBEYXRhTW9kZWxPYmplY3RQYXRoXG4gKiBAcmV0dXJucyBUaGUgYmluZGluZyBleHByZXNzaW9uXG4gKi9cbmZ1bmN0aW9uIGdldEhpZGRlbkV4cHJlc3Npb25BdFRhYmxlTGV2ZWwoXG5cdHNvdXJjZTogRGF0YUZpZWxkQWJzdHJhY3RUeXBlcyxcblx0Y29udGV4dERhdGFNb2RlbE9iamVjdFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8UGFnZUNvbnRleHRQYXRoVGFyZ2V0PlxuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHVua25vd24+IHtcblx0Y29uc3QgZXhwcmVzc2lvbiA9IHNvdXJjZS5hbm5vdGF0aW9ucz8uVUk/LkhpZGRlbiBhcyBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjtcblx0bGV0IHBhdGggPSBnZXRQYXRoRnJvbUFjdGlvbkFubm90YXRpb24oZXhwcmVzc2lvbik7XG5cdGlmICh0eXBlb2YgcGF0aCA9PT0gXCJvYmplY3RcIikge1xuXHRcdHJldHVybiBjb25zdGFudChmYWxzZSk7XG5cdH0gZWxzZSBpZiAodHlwZW9mIHBhdGggPT09IFwic3RyaW5nXCIpIHtcblx0XHRpZiAoXCJ2aXNpYmxlXCIgaW4gc291cmNlKSB7XG5cdFx0XHRwYXRoID0gcGF0aC5zdWJzdHJpbmcoMSwgcGF0aC5sZW5ndGggLSAxKTtcblx0XHR9XG5cdFx0aWYgKHBhdGguaW5kZXhPZihcIi9cIikgPiAwKSB7XG5cdFx0XHQvL2NoZWNrIGlmIHRoZSBuYXZpZ2F0aW9uIHByb3BlcnR5IGlzIGNvcnJlY3Q6XG5cdFx0XHRjb25zdCBzcGxpdFBhdGhGb3JOYXZpZ2F0aW9uUHJvcGVydHkgPSBwYXRoLnNwbGl0KFwiL1wiKTtcblx0XHRcdGNvbnN0IG5hdmlnYXRpb25QYXRoID0gc3BsaXRQYXRoRm9yTmF2aWdhdGlvblByb3BlcnR5WzBdO1xuXHRcdFx0aWYgKFxuXHRcdFx0XHRpc05hdmlnYXRpb25Qcm9wZXJ0eShjb250ZXh0RGF0YU1vZGVsT2JqZWN0UGF0aD8udGFyZ2V0T2JqZWN0KSAmJlxuXHRcdFx0XHRjb250ZXh0RGF0YU1vZGVsT2JqZWN0UGF0aC50YXJnZXRPYmplY3QucGFydG5lciA9PT0gbmF2aWdhdGlvblBhdGhcblx0XHRcdCkge1xuXHRcdFx0XHRyZXR1cm4gcGF0aEluTW9kZWwoc3BsaXRQYXRoRm9yTmF2aWdhdGlvblByb3BlcnR5LnNsaWNlKDEpLmpvaW4oXCIvXCIpKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJldHVybiBjb25zdGFudCh0cnVlKTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIGNvbnN0YW50KGZhbHNlKTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIGNvbnN0YW50KHRydWUpO1xufVxuLyoqXG4gKiBMb29wIHRocm91Z2ggdGhlIG1hbmlmZXN0IGFjdGlvbnMgYW5kIGNoZWNrIHRoZSBmb2xsb3dpbmc6XG4gKlxuICogSWYgdGhlIGRhdGEgZmllbGQgaXMgYWxzbyByZWZlcmVuY2VkIGFzIGEgY3VzdG9tIGFjdGlvbi5cbiAqIElmIHRoZSB1bmRlcmx5aW5nIG1hbmlmZXN0IGFjdGlvbiBpcyBlaXRoZXIgYSBib3VuZCBhY3Rpb24gb3IgaGFzIHRoZSAnUmVxdWlyZXNDb250ZXh0JyBwcm9wZXJ0eSBzZXQgdG8gdHJ1ZS5cbiAqXG4gKiBJZiBzbywgdGhlICdyZXF1aXJlc1NlbGVjdGlvbicgcHJvcGVydHkgaXMgZm9yY2VkIHRvICd0cnVlJyBpbiB0aGUgbWFuaWZlc3QuXG4gKiBAcGFyYW0gZGF0YUZpZWxkSWQgSWQgb2YgdGhlIERhdGFGaWVsZCBldmFsdWF0ZWRcbiAqIEBwYXJhbSBkYXRhRmllbGQgRGF0YUZpZWxkIGV2YWx1YXRlZFxuICogQHBhcmFtIG1hbmlmZXN0QWN0aW9ucyBUaGUgYWN0aW9ucyBkZWZpbmVkIGluIHRoZSBtYW5pZmVzdFxuICogQHJldHVybnMgYHRydWVgIGlmIHRoZSBEYXRhRmllbGQgaXMgZm91bmQgYW1vbmcgdGhlIG1hbmlmZXN0IGFjdGlvbnNcbiAqL1xuZnVuY3Rpb24gdXBkYXRlTWFuaWZlc3RBY3Rpb25BbmRUYWdJdChcblx0ZGF0YUZpZWxkSWQ6IHN0cmluZyxcblx0ZGF0YUZpZWxkOiBEYXRhRmllbGRGb3JBY3Rpb24gfCBEYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24sXG5cdG1hbmlmZXN0QWN0aW9uczogUmVjb3JkPHN0cmluZywgQ3VzdG9tQWN0aW9uPlxuKTogYm9vbGVhbiB7XG5cdHJldHVybiBPYmplY3Qua2V5cyhtYW5pZmVzdEFjdGlvbnMpLnNvbWUoKGFjdGlvbktleSkgPT4ge1xuXHRcdGlmIChhY3Rpb25LZXkgPT09IGRhdGFGaWVsZElkKSB7XG5cdFx0XHRpZiAoXG5cdFx0XHRcdChkYXRhRmllbGQgYXMgRGF0YUZpZWxkRm9yQWN0aW9uKT8uQWN0aW9uVGFyZ2V0Py5pc0JvdW5kIHx8XG5cdFx0XHRcdChkYXRhRmllbGQgYXMgRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uKT8uUmVxdWlyZXNDb250ZXh0XG5cdFx0XHQpIHtcblx0XHRcdFx0bWFuaWZlc3RBY3Rpb25zW2RhdGFGaWVsZElkXS5yZXF1aXJlc1NlbGVjdGlvbiA9IHRydWU7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9KTtcbn1cbi8qKlxuICogTG9vcCB0aHJvdWdoIHRoZSBEYXRhRmllbGRGb3JBY3Rpb24gYW5kIERhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbiBvZiBhIGxpbmUgaXRlbSBhbmRcbiAqIGNoZWNrIHRoZSBmb2xsb3dpbmc6XG4gKiBJZiBhdCBsZWFzdCBvbmUgb2YgdGhlbSBpcyBhbHdheXMgdmlzaWJsZSBpbiB0aGUgdGFibGUgdG9vbGJhciBhbmQgcmVxdWlyZXMgYSBjb250ZXh0XG4gKiBJZiBhbiBhY3Rpb24gaXMgYWxzbyBkZWZpbmVkIGluIHRoZSBtYW5pZmVzdCwgaXQgaXMgc2V0IGFzaWRlIGFuZCB3aWxsIGJlIGNvbnNpZGVyZWRcbiAqIHdoZW4gZ29pbmcgdGhyb3VnaCB0aGUgbWFuaWZlc3QuXG4gKiBAcGFyYW0gbGluZUl0ZW1Bbm5vdGF0aW9uIENvbGxlY3Rpb24gb2YgZGF0YSBmaWVsZHMgZm9yIHJlcHJlc2VudGF0aW9uIGluIGEgdGFibGUgb3IgbGlzdFxuICogQHBhcmFtIG1hbmlmZXN0QWN0aW9ucyBUaGUgYWN0aW9ucyBkZWZpbmVkIGluIHRoZSBtYW5pZmVzdFxuICogQHBhcmFtIGN1cnJlbnRFbnRpdHlUeXBlIEN1cnJlbnQgRW50aXR5IFR5cGVcbiAqIEByZXR1cm5zIGB0cnVlYCBpZiB0aGVyZSBpcyBhdCBsZWFzdCAxIGFjdGlvbiB0aGF0IG1lZXRzIHRoZSBjcml0ZXJpYVxuICovXG5mdW5jdGlvbiBoYXNCb3VuZEFjdGlvbnNBbHdheXNWaXNpYmxlSW5Ub29sQmFyKFxuXHRsaW5lSXRlbUFubm90YXRpb246IExpbmVJdGVtIHwgRGF0YUZpZWxkRm9yQWN0aW9uQWJzdHJhY3RUeXBlc1tdLFxuXHRtYW5pZmVzdEFjdGlvbnM6IFJlY29yZDxzdHJpbmcsIEN1c3RvbUFjdGlvbj4sXG5cdGN1cnJlbnRFbnRpdHlUeXBlOiBFbnRpdHlUeXBlXG4pOiBib29sZWFuIHtcblx0cmV0dXJuIGxpbmVJdGVtQW5ub3RhdGlvbi5zb21lKChkYXRhRmllbGQpID0+IHtcblx0XHRpZiAoXG5cdFx0XHQoZGF0YUZpZWxkLiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JBY3Rpb24gfHxcblx0XHRcdFx0ZGF0YUZpZWxkLiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24pICYmXG5cdFx0XHRkYXRhRmllbGQ/LklubGluZT8udmFsdWVPZigpICE9PSB0cnVlICYmXG5cdFx0XHQoZGF0YUZpZWxkLmFubm90YXRpb25zPy5VST8uSGlkZGVuPy52YWx1ZU9mKCkgPT09IGZhbHNlIHx8IGRhdGFGaWVsZC5hbm5vdGF0aW9ucz8uVUk/LkhpZGRlbj8udmFsdWVPZigpID09PSB1bmRlZmluZWQpXG5cdFx0KSB7XG5cdFx0XHRpZiAoZGF0YUZpZWxkLiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JBY3Rpb24pIHtcblx0XHRcdFx0Y29uc3QgbWFuaWZlc3RBY3Rpb25JZCA9IGdlbmVyYXRlKFtcIkRhdGFGaWVsZEZvckFjdGlvblwiLCBkYXRhRmllbGQuQWN0aW9uIGFzIHN0cmluZ10pO1xuXHRcdFx0XHQvLyBpZiB0aGUgRGF0YUZpZWxkRm9yQWN0b24gZnJvbSBhbm5vdGF0aW9uIGFsc28gZXhpc3RzIGluIHRoZSBtYW5pZmVzdCwgaXRzIHZpc2liaWxpdHkgd2lsbCBiZSBldmFsdWF0ZWQgbGF0ZXIgb25cblx0XHRcdFx0aWYgKHVwZGF0ZU1hbmlmZXN0QWN0aW9uQW5kVGFnSXQobWFuaWZlc3RBY3Rpb25JZCwgZGF0YUZpZWxkLCBtYW5pZmVzdEFjdGlvbnMpKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdC8vIENoZWNrIGlmIHRoZSBsaW5lSXRlbSBjb250ZXh0IGlzIHRoZSBzYW1lIGFzIHRoYXQgb2YgdGhlIGFjdGlvbjpcblx0XHRcdFx0cmV0dXJuIGRhdGFGaWVsZD8uQWN0aW9uVGFyZ2V0Py5pc0JvdW5kICYmIGN1cnJlbnRFbnRpdHlUeXBlID09PSBkYXRhRmllbGQ/LkFjdGlvblRhcmdldC5zb3VyY2VFbnRpdHlUeXBlO1xuXHRcdFx0fSBlbHNlIGlmIChkYXRhRmllbGQuJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbikge1xuXHRcdFx0XHQvLyBpZiB0aGUgRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uIGZyb20gYW5ub3RhdGlvbiBhbHNvIGV4aXN0cyBpbiB0aGUgbWFuaWZlc3QsIGl0cyB2aXNpYmlsaXR5IHdpbGwgYmUgZXZhbHVhdGVkIGxhdGVyIG9uXG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHR1cGRhdGVNYW5pZmVzdEFjdGlvbkFuZFRhZ0l0KFxuXHRcdFx0XHRcdFx0YERhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbjo6JHtkYXRhRmllbGQuU2VtYW50aWNPYmplY3R9Ojoke2RhdGFGaWVsZC5BY3Rpb259YCxcblx0XHRcdFx0XHRcdGRhdGFGaWVsZCxcblx0XHRcdFx0XHRcdG1hbmlmZXN0QWN0aW9uc1xuXHRcdFx0XHRcdClcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBkYXRhRmllbGQuUmVxdWlyZXNDb250ZXh0O1xuXHRcdFx0fVxuXHRcdH0gZWxzZSBpZiAoXG5cdFx0XHRkYXRhRmllbGQuJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckFjdGlvbkdyb3VwICYmXG5cdFx0XHQoZGF0YUZpZWxkLmFubm90YXRpb25zPy5VST8uSGlkZGVuPy52YWx1ZU9mKCkgPT09IGZhbHNlIHx8IGRhdGFGaWVsZC5hbm5vdGF0aW9ucz8uVUk/LkhpZGRlbj8udmFsdWVPZigpID09PSB1bmRlZmluZWQpXG5cdFx0KSB7XG5cdFx0XHRyZXR1cm4gaGFzQm91bmRBY3Rpb25zQWx3YXlzVmlzaWJsZUluVG9vbEJhcihkYXRhRmllbGQuQWN0aW9ucywgbWFuaWZlc3RBY3Rpb25zLCBjdXJyZW50RW50aXR5VHlwZSk7XG5cdFx0fVxuXHRcdHJldHVybiBmYWxzZTtcblx0fSk7XG59XG4vKipcbiAqIENoZWNrcyBpZiBhIGN1c3RvbSBhY3Rpb24gdGhhdCByZXF1aXJlcyBhIGNvbnRleHQgaXMgYWx3YXlzIHZpc2libGUgaW4gdGhlIHRvb2xiYXIuXG4gKiBAcGFyYW0gbWFuaWZlc3RBY3Rpb25zIFRoZSBhY3Rpb25zIGRlZmluZWQgaW4gdGhlIG1hbmlmZXN0XG4gKiBAcmV0dXJucyBgdHJ1ZWAgaWYgdGhlcmUgaXMgYXQgbGVhc3QgMSBhY3Rpb24gdGhhdCBtZWV0cyB0aGUgY3JpdGVyaWFcbiAqL1xuZnVuY3Rpb24gaGFzQ3VzdG9tQWN0aW9uc0Fsd2F5c1Zpc2libGVJblRvb2xCYXIobWFuaWZlc3RBY3Rpb25zOiBSZWNvcmQ8c3RyaW5nLCBDdXN0b21BY3Rpb24+KTogYm9vbGVhbiB7XG5cdGNvbnN0IGN1c3RvbUFjdGlvbnMgPSBPYmplY3Qua2V5cyhtYW5pZmVzdEFjdGlvbnMpLnJlZHVjZSgoYWN0aW9uczogQ3VzdG9tQWN0aW9uW10sIGFjdGlvbktleSkgPT4ge1xuXHRcdGNvbnN0IGFjdGlvbiA9IG1hbmlmZXN0QWN0aW9uc1thY3Rpb25LZXldO1xuXHRcdGlmICghYWN0aW9uLm1lbnUpIHtcblx0XHRcdC8vc2ltcGxlIGN1c3RvbSBhY3Rpb25cblx0XHRcdGFjdGlvbnMucHVzaChhY3Rpb24pO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBncm91cGVkIGFjdGlvbnNcblx0XHRcdGFjdGlvbnMgPSBbLi4uYWN0aW9ucywgLi4uKGFjdGlvbi5tZW51LmZpbHRlcigobWVudUFjdGlvbikgPT4gdHlwZW9mIG1lbnVBY3Rpb24gIT09IFwic3RyaW5nXCIpIGFzIEN1c3RvbUFjdGlvbltdKV07XG5cdFx0fVxuXHRcdHJldHVybiBhY3Rpb25zO1xuXHR9LCBbXSk7XG5cdHJldHVybiAhIWN1c3RvbUFjdGlvbnMuZmluZChcblx0XHQoYWN0aW9uKSA9PiBhY3Rpb24ucmVxdWlyZXNTZWxlY3Rpb24gJiYgKGFjdGlvbi52aXNpYmxlID09PSB1bmRlZmluZWQgfHwgYWN0aW9uLnZpc2libGU/LnRvU3RyaW5nKCkgPT09IFwidHJ1ZVwiKVxuXHQpO1xufVxuLyoqXG4gKiBJdGVyYXRlcyBvdmVyIHRoZSBjdXN0b20gYWN0aW9ucyAod2l0aCBrZXkgcmVxdWlyZXNTZWxlY3Rpb24pIGRlY2xhcmVkIGluIHRoZSBtYW5pZmVzdCBmb3IgdGhlIGN1cnJlbnQgbGluZSBpdGVtIGFuZCByZXR1cm5zIGFsbCB0aGVcbiAqIHZpc2libGUga2V5IHZhbHVlcyBhcyBhbiBleHByZXNzaW9uLlxuICogQHBhcmFtIG1hbmlmZXN0QWN0aW9ucyBUaGUgYWN0aW9ucyBkZWZpbmVkIGluIHRoZSBtYW5pZmVzdFxuICogQHJldHVybnMgQXJyYXk8RXhwcmVzc2lvbjxib29sZWFuPj4gQWxsIHRoZSB2aXNpYmxlIHBhdGggZXhwcmVzc2lvbnMgb2YgdGhlIGFjdGlvbnMgdGhhdCBtZWV0IHRoZSBjcml0ZXJpYVxuICovXG5mdW5jdGlvbiBnZXRWaXNpYmxlRXhwRm9yQ3VzdG9tQWN0aW9uc1JlcXVpcmluZ0NvbnRleHQobWFuaWZlc3RBY3Rpb25zOiBSZWNvcmQ8c3RyaW5nLCBDdXN0b21BY3Rpb24+KTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+W10ge1xuXHRjb25zdCBhVmlzaWJsZVBhdGhFeHByZXNzaW9uczogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+W10gPSBbXTtcblx0aWYgKG1hbmlmZXN0QWN0aW9ucykge1xuXHRcdE9iamVjdC5rZXlzKG1hbmlmZXN0QWN0aW9ucykuZm9yRWFjaCgoYWN0aW9uS2V5KSA9PiB7XG5cdFx0XHRjb25zdCBhY3Rpb24gPSBtYW5pZmVzdEFjdGlvbnNbYWN0aW9uS2V5XTtcblx0XHRcdGlmIChhY3Rpb24ucmVxdWlyZXNTZWxlY3Rpb24gPT09IHRydWUgJiYgYWN0aW9uLnZpc2libGUgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRpZiAodHlwZW9mIGFjdGlvbi52aXNpYmxlID09PSBcInN0cmluZ1wiKSB7XG5cdFx0XHRcdFx0LypUaGUgZmluYWwgYWltIHdvdWxkIGJlIHRvIGNoZWNrIGlmIHRoZSBwYXRoIGV4cHJlc3Npb24gZGVwZW5kcyBvbiB0aGUgcGFyZW50IGNvbnRleHRcblx0XHRcdFx0XHRhbmQgY29uc2lkZXJzIG9ubHkgdGhvc2UgZXhwcmVzc2lvbnMgZm9yIHRoZSBleHByZXNzaW9uIGV2YWx1YXRpb24sXG5cdFx0XHRcdFx0YnV0IGN1cnJlbnRseSBub3QgcG9zc2libGUgZnJvbSB0aGUgbWFuaWZlc3QgYXMgdGhlIHZpc2libGUga2V5IGlzIGJvdW5kIG9uIHRoZSBwYXJlbnQgZW50aXR5LlxuXHRcdFx0XHRcdFRyaWNreSB0byBkaWZmZXJlbnRpYXRlIHRoZSBwYXRoIGFzIGl0J3MgZG9uZSBmb3IgdGhlIEhpZGRlbiBhbm5vdGF0aW9uLlxuXHRcdFx0XHRcdEZvciB0aGUgdGltZSBiZWluZyB3ZSBjb25zaWRlciBhbGwgdGhlIHBhdGhzIG9mIHRoZSBtYW5pZmVzdCovXG5cdFx0XHRcdFx0YVZpc2libGVQYXRoRXhwcmVzc2lvbnMucHVzaChyZXNvbHZlQmluZGluZ1N0cmluZyhhY3Rpb24/LnZpc2libGU/LnZhbHVlT2YoKSwgXCJib29sZWFuXCIpKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cdHJldHVybiBhVmlzaWJsZVBhdGhFeHByZXNzaW9ucztcbn1cbi8qKlxuICogRXZhbHVhdGUgaWYgdGhlIHBhdGggaXMgc3RhdGljYWxseSBkZWxldGFibGUgb3IgdXBkYXRhYmxlLlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHRcbiAqIEByZXR1cm5zIFRoZSB0YWJsZSBjYXBhYmlsaXRpZXNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldENhcGFiaWxpdHlSZXN0cmljdGlvbihjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4pOiBUYWJsZUNhcGFiaWxpdHlSZXN0cmljdGlvbiB7XG5cdGNvbnN0IGlzRGVsZXRhYmxlID0gaXNQYXRoRGVsZXRhYmxlKGNvbnZlcnRlckNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpKTtcblx0Y29uc3QgaXNVcGRhdGFibGUgPSBpc1BhdGhVcGRhdGFibGUoY29udmVydGVyQ29udGV4dC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCkpO1xuXHRyZXR1cm4ge1xuXHRcdGlzRGVsZXRhYmxlOiAhKGlzQ29uc3RhbnQoaXNEZWxldGFibGUpICYmIGlzRGVsZXRhYmxlLnZhbHVlID09PSBmYWxzZSksXG5cdFx0aXNVcGRhdGFibGU6ICEoaXNDb25zdGFudChpc1VwZGF0YWJsZSkgJiYgaXNVcGRhdGFibGUudmFsdWUgPT09IGZhbHNlKVxuXHR9O1xufVxuZXhwb3J0IGZ1bmN0aW9uIGdldFNlbGVjdGlvbk1vZGUoXG5cdGxpbmVJdGVtQW5ub3RhdGlvbjogTGluZUl0ZW0gfCB1bmRlZmluZWQsXG5cdHZpc3VhbGl6YXRpb25QYXRoOiBzdHJpbmcsXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pixcblx0aXNFbnRpdHlTZXQ6IGJvb2xlYW4sXG5cdHRhcmdldENhcGFiaWxpdGllczogVGFibGVDYXBhYmlsaXR5UmVzdHJpY3Rpb24sXG5cdGRlbGV0ZUJ1dHRvblZpc2liaWxpdHlFeHByZXNzaW9uPzogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+LFxuXHRtYXNzRWRpdFZpc2liaWxpdHlFeHByZXNzaW9uOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4gPSBjb25zdGFudChmYWxzZSksXG5cdGN1dEJ1dHRvblZpc2liaWxpdHlFeHByZXNzaW9uOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4gPSBjb25zdGFudChmYWxzZSlcbik6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdGNvbnN0IHRhYmxlTWFuaWZlc3RTZXR0aW5ncyA9IGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RDb250cm9sQ29uZmlndXJhdGlvbjxUYWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbj4odmlzdWFsaXphdGlvblBhdGgpO1xuXHRjb25zdCB0YWJsZVR5cGUgPSB0YWJsZU1hbmlmZXN0U2V0dGluZ3MudGFibGVTZXR0aW5ncz8udHlwZTtcblx0bGV0IHNlbGVjdGlvbk1vZGUgPSB0YWJsZU1hbmlmZXN0U2V0dGluZ3MudGFibGVTZXR0aW5ncz8uc2VsZWN0aW9uTW9kZTtcblxuXHQvLyBUaGUgY29sbGFwc2UvRXhwYW5kIGFjdGlvbiBvZiBhIHRyZWUgdGFibGUgaXMgYSBib3VuZCBhY3Rpb24sIGFzIGEgcmVzdWx0LCBhIHRyZWUgdGFibGUgc2hvdWxkIGFsd2F5cyBoYXZlIGEgc2VsZWN0aW9uIG1vZGUgdG8gXCJNdWx0aVwiIHdoZW4gbm8gc2VsZWN0aW9uTW9kZSBoYXMgYmVlbiBzZXQgaW4gdGhlIG1hbmlmZXN0XG5cdGlmICh0YWJsZVR5cGUgPT09IFwiVHJlZVRhYmxlXCIgJiYgIXNlbGVjdGlvbk1vZGUpIHtcblx0XHRyZXR1cm4gU2VsZWN0aW9uTW9kZS5NdWx0aTtcblx0fVxuXG5cdC8vIElmIHRoZSBzZWxlY3Rpb24gbW9kZSBpcyBmb3JjZWQgdG8gJ05vbmUnIGluIHRoZSBtYW5pZmVzdC9tYWNybyB0YWJsZSBwYXJhbWV0ZXJzLCB3ZSBrZWVwIGl0IHVubGVzcyBoZXJlIGlzIGEgZGVsZXRlIGJ1dHRvblxuXHRpZiAoIWxpbmVJdGVtQW5ub3RhdGlvbiB8fCBzZWxlY3Rpb25Nb2RlID09PSBTZWxlY3Rpb25Nb2RlLk5vbmUpIHtcblx0XHRpZiAodGFyZ2V0Q2FwYWJpbGl0aWVzLmlzRGVsZXRhYmxlICYmIGRlbGV0ZUJ1dHRvblZpc2liaWxpdHlFeHByZXNzaW9uKSB7XG5cdFx0XHRyZXR1cm4gY29tcGlsZUV4cHJlc3Npb24oaWZFbHNlKGRlbGV0ZUJ1dHRvblZpc2liaWxpdHlFeHByZXNzaW9uLCBjb25zdGFudChTZWxlY3Rpb25Nb2RlLk11bHRpKSwgY29uc3RhbnQoU2VsZWN0aW9uTW9kZS5Ob25lKSkpO1xuXHRcdH1cblx0XHRyZXR1cm4gU2VsZWN0aW9uTW9kZS5Ob25lO1xuXHR9XG5cdGlmIChzZWxlY3Rpb25Nb2RlID09PSBTZWxlY3Rpb25Nb2RlLkZvcmNlTXVsdGkpIHtcblx0XHRyZXR1cm4gU2VsZWN0aW9uTW9kZS5NdWx0aTtcblx0fSBlbHNlIGlmIChzZWxlY3Rpb25Nb2RlID09PSBTZWxlY3Rpb25Nb2RlLkZvcmNlU2luZ2xlKSB7XG5cdFx0cmV0dXJuIFNlbGVjdGlvbk1vZGUuU2luZ2xlO1xuXHR9XG5cdGxldCBhSGlkZGVuQmluZGluZ0V4cHJlc3Npb25zOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj5bXSA9IFtdLFxuXHRcdGFWaXNpYmxlQmluZGluZ0V4cHJlc3Npb25zOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj5bXSA9IFtdO1xuXHRjb25zdCBtYW5pZmVzdEFjdGlvbnMgPSBnZXRBY3Rpb25zRnJvbU1hbmlmZXN0KFxuXHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RDb250cm9sQ29uZmlndXJhdGlvbjxUYWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbj4odmlzdWFsaXphdGlvblBhdGgpLmFjdGlvbnMsXG5cdFx0Y29udmVydGVyQ29udGV4dCxcblx0XHRbXSxcblx0XHR1bmRlZmluZWQsXG5cdFx0ZmFsc2Vcblx0KTtcblx0bGV0IGlzUGFyZW50RGVsZXRhYmxlLCBwYXJlbnRFbnRpdHlTZXREZWxldGFibGU7XG5cdGlmIChjb252ZXJ0ZXJDb250ZXh0LmdldFRlbXBsYXRlVHlwZSgpID09PSBUZW1wbGF0ZVR5cGUuT2JqZWN0UGFnZSkge1xuXHRcdGlzUGFyZW50RGVsZXRhYmxlID0gaXNQYXRoRGVsZXRhYmxlKGNvbnZlcnRlckNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpKTtcblx0XHRwYXJlbnRFbnRpdHlTZXREZWxldGFibGUgPSBpc1BhcmVudERlbGV0YWJsZSA/IGNvbXBpbGVFeHByZXNzaW9uKGlzUGFyZW50RGVsZXRhYmxlLCB0cnVlKSA6IGlzUGFyZW50RGVsZXRhYmxlO1xuXHR9XG5cdGNvbnN0IGJNYXNzRWRpdEVuYWJsZWQ6IGJvb2xlYW4gPSAhaXNDb25zdGFudChtYXNzRWRpdFZpc2liaWxpdHlFeHByZXNzaW9uKSB8fCBtYXNzRWRpdFZpc2liaWxpdHlFeHByZXNzaW9uLnZhbHVlICE9PSBmYWxzZTtcblx0aWYgKCFzZWxlY3Rpb25Nb2RlIHx8IHNlbGVjdGlvbk1vZGUgPT09IFNlbGVjdGlvbk1vZGUuQXV0bykge1xuXHRcdHNlbGVjdGlvbk1vZGUgPSBTZWxlY3Rpb25Nb2RlLk11bHRpO1xuXHR9XG5cdGlmIChiTWFzc0VkaXRFbmFibGVkKSB7XG5cdFx0Ly8gT3ZlcnJpZGUgZGVmYXVsdCBzZWxlY3Rpb24gbW9kZSB3aGVuIG1hc3MgZWRpdCBpcyB2aXNpYmxlXG5cdFx0c2VsZWN0aW9uTW9kZSA9IHNlbGVjdGlvbk1vZGUgPT09IFNlbGVjdGlvbk1vZGUuU2luZ2xlID8gU2VsZWN0aW9uTW9kZS5TaW5nbGUgOiBTZWxlY3Rpb25Nb2RlLk11bHRpO1xuXHR9XG5cdGlmIChcblx0XHRoYXNCb3VuZEFjdGlvbnNBbHdheXNWaXNpYmxlSW5Ub29sQmFyKGxpbmVJdGVtQW5ub3RhdGlvbiwgbWFuaWZlc3RBY3Rpb25zLmFjdGlvbnMsIGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZSgpKSB8fFxuXHRcdGhhc0N1c3RvbUFjdGlvbnNBbHdheXNWaXNpYmxlSW5Ub29sQmFyKG1hbmlmZXN0QWN0aW9ucy5hY3Rpb25zKVxuXHQpIHtcblx0XHRyZXR1cm4gc2VsZWN0aW9uTW9kZTtcblx0fVxuXHRhSGlkZGVuQmluZGluZ0V4cHJlc3Npb25zID0gZ2V0VUlIaWRkZW5FeHBGb3JBY3Rpb25zUmVxdWlyaW5nQ29udGV4dChcblx0XHRsaW5lSXRlbUFubm90YXRpb24sXG5cdFx0Y29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlKCksXG5cdFx0Y29udmVydGVyQ29udGV4dC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKClcblx0KTtcblx0YVZpc2libGVCaW5kaW5nRXhwcmVzc2lvbnMgPSBnZXRWaXNpYmxlRXhwRm9yQ3VzdG9tQWN0aW9uc1JlcXVpcmluZ0NvbnRleHQobWFuaWZlc3RBY3Rpb25zLmFjdGlvbnMpO1xuXHQvLyBObyBhY3Rpb24gcmVxdWlyaW5nIGEgY29udGV4dDpcblx0aWYgKFxuXHRcdGFIaWRkZW5CaW5kaW5nRXhwcmVzc2lvbnMubGVuZ3RoID09PSAwICYmXG5cdFx0YVZpc2libGVCaW5kaW5nRXhwcmVzc2lvbnMubGVuZ3RoID09PSAwICYmXG5cdFx0KGN1dEJ1dHRvblZpc2liaWxpdHlFeHByZXNzaW9uIHx8IGRlbGV0ZUJ1dHRvblZpc2liaWxpdHlFeHByZXNzaW9uIHx8IGJNYXNzRWRpdEVuYWJsZWQpXG5cdCkge1xuXHRcdGlmICghaXNFbnRpdHlTZXQpIHtcblx0XHRcdC8vIEV4YW1wbGU6IE9QIGNhc2Vcblx0XHRcdGlmICh0YXJnZXRDYXBhYmlsaXRpZXMuaXNEZWxldGFibGUgfHwgcGFyZW50RW50aXR5U2V0RGVsZXRhYmxlICE9PSBcImZhbHNlXCIgfHwgYk1hc3NFZGl0RW5hYmxlZCkge1xuXHRcdFx0XHQvLyBCdWlsZGluZyBleHByZXNzaW9uIGZvciBkZWxldGUgYW5kIG1hc3MgZWRpdFxuXHRcdFx0XHRjb25zdCBidXR0b25WaXNpYmlsaXR5RXhwcmVzc2lvbiA9IG9yKFxuXHRcdFx0XHRcdGN1dEJ1dHRvblZpc2liaWxpdHlFeHByZXNzaW9uIHx8IHRydWUsXG5cdFx0XHRcdFx0ZGVsZXRlQnV0dG9uVmlzaWJpbGl0eUV4cHJlc3Npb24gfHwgdHJ1ZSwgLy8gZGVmYXVsdCBkZWxldGUgdmlzaWJpbGl0eSBhcyB0cnVlXG5cdFx0XHRcdFx0bWFzc0VkaXRWaXNpYmlsaXR5RXhwcmVzc2lvblxuXHRcdFx0XHQpO1xuXHRcdFx0XHRyZXR1cm4gY29tcGlsZUV4cHJlc3Npb24oXG5cdFx0XHRcdFx0aWZFbHNlKGFuZChVSS5Jc0VkaXRhYmxlLCBidXR0b25WaXNpYmlsaXR5RXhwcmVzc2lvbiksIGNvbnN0YW50KHNlbGVjdGlvbk1vZGUpLCBjb25zdGFudChTZWxlY3Rpb25Nb2RlLk5vbmUpKVxuXHRcdFx0XHQpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cmV0dXJuIGNvbXBpbGVFeHByZXNzaW9uKFxuXHRcdFx0XHRcdGlmRWxzZShjdXRCdXR0b25WaXNpYmlsaXR5RXhwcmVzc2lvbiwgY29uc3RhbnQoU2VsZWN0aW9uTW9kZS5TaW5nbGUpLCBjb25zdGFudChTZWxlY3Rpb25Nb2RlLk5vbmUpKVxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdFx0Ly8gRW50aXR5U2V0IGRlbGV0YWJsZTpcblx0XHR9IGVsc2UgaWYgKGJNYXNzRWRpdEVuYWJsZWQpIHtcblx0XHRcdC8vIGV4YW1wbGU6IExSIHNjZW5hcmlvXG5cdFx0XHRyZXR1cm4gc2VsZWN0aW9uTW9kZTtcblx0XHR9IGVsc2UgaWYgKHRhcmdldENhcGFiaWxpdGllcy5pc0RlbGV0YWJsZSAmJiBkZWxldGVCdXR0b25WaXNpYmlsaXR5RXhwcmVzc2lvbikge1xuXHRcdFx0cmV0dXJuIGNvbXBpbGVFeHByZXNzaW9uKGlmRWxzZShkZWxldGVCdXR0b25WaXNpYmlsaXR5RXhwcmVzc2lvbiwgY29uc3RhbnQoc2VsZWN0aW9uTW9kZSksIGNvbnN0YW50KFNlbGVjdGlvbk1vZGUuTm9uZSkpKTtcblx0XHRcdC8vIEVudGl0eVNldCBub3QgZGVsZXRhYmxlOlxuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gU2VsZWN0aW9uTW9kZS5Ob25lO1xuXHRcdH1cblx0XHQvLyBUaGVyZSBhcmUgYWN0aW9ucyByZXF1aXJpbmcgYSBjb250ZXh0OlxuXHR9IGVsc2UgaWYgKCFpc0VudGl0eVNldCkge1xuXHRcdC8vIEV4YW1wbGU6IE9QIGNhc2Vcblx0XHRpZiAodGFyZ2V0Q2FwYWJpbGl0aWVzLmlzRGVsZXRhYmxlIHx8IHBhcmVudEVudGl0eVNldERlbGV0YWJsZSAhPT0gXCJmYWxzZVwiIHx8IGJNYXNzRWRpdEVuYWJsZWQpIHtcblx0XHRcdC8vIFVzZSBzZWxlY3Rpb25Nb2RlIGluIGVkaXQgbW9kZSBpZiBkZWxldGUgaXMgZW5hYmxlZCBvciBtYXNzIGVkaXQgaXMgdmlzaWJsZVxuXHRcdFx0Y29uc3QgZWRpdE1vZGVidXR0b25WaXNpYmlsaXR5RXhwcmVzc2lvbiA9IGlmRWxzZShcblx0XHRcdFx0Yk1hc3NFZGl0RW5hYmxlZCAmJiAhdGFyZ2V0Q2FwYWJpbGl0aWVzLmlzRGVsZXRhYmxlLFxuXHRcdFx0XHRtYXNzRWRpdFZpc2liaWxpdHlFeHByZXNzaW9uLFxuXHRcdFx0XHRjb25zdGFudCh0cnVlKVxuXHRcdFx0KTtcblx0XHRcdHJldHVybiBjb21waWxlRXhwcmVzc2lvbihcblx0XHRcdFx0aWZFbHNlKFxuXHRcdFx0XHRcdGFuZChVSS5Jc0VkaXRhYmxlLCBlZGl0TW9kZWJ1dHRvblZpc2liaWxpdHlFeHByZXNzaW9uKSxcblx0XHRcdFx0XHRjb25zdGFudChzZWxlY3Rpb25Nb2RlKSxcblx0XHRcdFx0XHRpZkVsc2UoXG5cdFx0XHRcdFx0XHRvciguLi5hSGlkZGVuQmluZGluZ0V4cHJlc3Npb25zLmNvbmNhdChhVmlzaWJsZUJpbmRpbmdFeHByZXNzaW9ucykpLFxuXHRcdFx0XHRcdFx0Y29uc3RhbnQoc2VsZWN0aW9uTW9kZSksXG5cdFx0XHRcdFx0XHRjb25zdGFudChTZWxlY3Rpb25Nb2RlLk5vbmUpXG5cdFx0XHRcdFx0KVxuXHRcdFx0XHQpXG5cdFx0XHQpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gY29tcGlsZUV4cHJlc3Npb24oXG5cdFx0XHRcdGlmRWxzZShcblx0XHRcdFx0XHRvciguLi5hSGlkZGVuQmluZGluZ0V4cHJlc3Npb25zLmNvbmNhdChhVmlzaWJsZUJpbmRpbmdFeHByZXNzaW9ucykpLFxuXHRcdFx0XHRcdGNvbnN0YW50KHNlbGVjdGlvbk1vZGUpLFxuXHRcdFx0XHRcdGNvbnN0YW50KFNlbGVjdGlvbk1vZGUuTm9uZSlcblx0XHRcdFx0KVxuXHRcdFx0KTtcblx0XHR9XG5cdFx0Ly9FbnRpdHlTZXQgZGVsZXRhYmxlOlxuXHR9IGVsc2UgaWYgKHRhcmdldENhcGFiaWxpdGllcy5pc0RlbGV0YWJsZSB8fCBiTWFzc0VkaXRFbmFibGVkKSB7XG5cdFx0Ly8gRXhhbXBsZTogTFIgc2NlbmFyaW9cblx0XHRyZXR1cm4gc2VsZWN0aW9uTW9kZTtcblx0XHQvL0VudGl0eVNldCBub3QgZGVsZXRhYmxlOlxuXHR9IGVsc2Uge1xuXHRcdHJldHVybiBjb21waWxlRXhwcmVzc2lvbihcblx0XHRcdGlmRWxzZShcblx0XHRcdFx0b3IoLi4uYUhpZGRlbkJpbmRpbmdFeHByZXNzaW9ucy5jb25jYXQoYVZpc2libGVCaW5kaW5nRXhwcmVzc2lvbnMpLCBtYXNzRWRpdFZpc2liaWxpdHlFeHByZXNzaW9uKSxcblx0XHRcdFx0Y29uc3RhbnQoc2VsZWN0aW9uTW9kZSksXG5cdFx0XHRcdGNvbnN0YW50KFNlbGVjdGlvbk1vZGUuTm9uZSlcblx0XHRcdClcblx0XHQpO1xuXHR9XG59XG5cbi8qKlxuICogTWV0aG9kIHRvIHJldHJpZXZlIGFsbCB0YWJsZSBhY3Rpb25zIGZyb20gYW5ub3RhdGlvbnMuXG4gKiBAcGFyYW0gbGluZUl0ZW1Bbm5vdGF0aW9uXG4gKiBAcGFyYW0gdmlzdWFsaXphdGlvblBhdGhcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcmV0dXJucyBUaGUgdGFibGUgYW5ub3RhdGlvbiBhY3Rpb25zXG4gKi9cbmZ1bmN0aW9uIGdldFRhYmxlQW5ub3RhdGlvbkFjdGlvbnMoXG5cdGxpbmVJdGVtQW5ub3RhdGlvbjogTGluZUl0ZW0sXG5cdHZpc3VhbGl6YXRpb25QYXRoOiBzdHJpbmcsXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0PlxuKTogeyB0YWJsZUFjdGlvbnM6IEFycmF5PEFubm90YXRpb25BY3Rpb24gfCBBbm5vdGF0aW9uQWN0aW9uR3JvdXA+IH0ge1xuXHRjb25zdCB0YWJsZUFjdGlvbnM6IEFycmF5PEFubm90YXRpb25BY3Rpb24gfCBBbm5vdGF0aW9uQWN0aW9uR3JvdXA+ID0gW107XG5cdGNvbnN0IGNvcHlEYXRhRmllbGQgPSBnZXRDb3B5QWN0aW9uKFxuXHRcdGxpbmVJdGVtQW5ub3RhdGlvbi5maWx0ZXIoKGRhdGFGaWVsZCkgPT4ge1xuXHRcdFx0cmV0dXJuIGRhdGFGaWVsZElzQ29weUFjdGlvbihkYXRhRmllbGQgYXMgRGF0YUZpZWxkRm9yQWN0aW9uVHlwZXMpO1xuXHRcdH0pIGFzIERhdGFGaWVsZEZvckFjdGlvblR5cGVzW11cblx0KTtcblx0aWYgKGNvcHlEYXRhRmllbGQpIHtcblx0XHR0YWJsZUFjdGlvbnMucHVzaCh7XG5cdFx0XHR0eXBlOiBBY3Rpb25UeXBlLkNvcHksXG5cdFx0XHRhbm5vdGF0aW9uUGF0aDogY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXRCYXNlZEFubm90YXRpb25QYXRoKGNvcHlEYXRhRmllbGQuZnVsbHlRdWFsaWZpZWROYW1lKSxcblx0XHRcdGtleTogS2V5SGVscGVyLmdlbmVyYXRlS2V5RnJvbURhdGFGaWVsZChjb3B5RGF0YUZpZWxkKSxcblx0XHRcdHZpc2libGU6IGNvbXBpbGVFeHByZXNzaW9uKHZpc2libGVFeHByZXNzaW9uKGNvcHlEYXRhRmllbGQsIGNvbnZlcnRlckNvbnRleHQpKSxcblx0XHRcdHZpc2libGVGb3JDb250ZXh0TWVudTogY29tcGlsZUV4cHJlc3Npb24odmlzaWJsZUZvckNvbnRleHRNZW51RXhwcmVzc2lvbihjb3B5RGF0YUZpZWxkLCBjb252ZXJ0ZXJDb250ZXh0KSksXG5cdFx0XHR0ZXh0OiBjb3B5RGF0YUZpZWxkLkxhYmVsPy50b1N0cmluZygpID8/IExpYnJhcnkuZ2V0UmVzb3VyY2VCdW5kbGVGb3IoXCJzYXAuZmUuY29yZVwiKSEuZ2V0VGV4dChcIkNfQ09NTU9OX0NPUFlcIiksXG5cdFx0XHRpc05hdmlnYWJsZTogdHJ1ZVxuXHRcdH0pO1xuXHR9XG5cdGxpbmVJdGVtQW5ub3RhdGlvblxuXHRcdC5maWx0ZXIoKGRhdGFGaWVsZCkgPT4ge1xuXHRcdFx0cmV0dXJuICFkYXRhRmllbGRJc0NvcHlBY3Rpb24oZGF0YUZpZWxkIGFzIERhdGFGaWVsZEZvckFjdGlvbik7XG5cdFx0fSlcblx0XHQuZm9yRWFjaCgoZGF0YUZpZWxkOiBEYXRhRmllbGRBYnN0cmFjdFR5cGVzKSA9PiB7XG5cdFx0XHRpZiAoXG5cdFx0XHRcdGlzRGF0YUZpZWxkRm9yQWN0aW9uQWJzdHJhY3QoZGF0YUZpZWxkKSAmJlxuXHRcdFx0XHRkYXRhRmllbGQuSW5saW5lPy52YWx1ZU9mKCkgIT09IHRydWUgJiZcblx0XHRcdFx0ZGF0YUZpZWxkLkRldGVybWluaW5nPy52YWx1ZU9mKCkgIT09IHRydWVcblx0XHRcdCkge1xuXHRcdFx0XHRjb25zdCB0YWJsZUFjdGlvbiA9IGdldERhdGFGaWVsZEFubm90YXRpb25BY3Rpb24oZGF0YUZpZWxkLCBjb252ZXJ0ZXJDb250ZXh0KTtcblx0XHRcdFx0aWYgKHRhYmxlQWN0aW9uKSB7XG5cdFx0XHRcdFx0dGFibGVBY3Rpb25zLnB1c2godGFibGVBY3Rpb24pO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2UgaWYgKGlzRGF0YUZpZWxkRm9yQWN0aW9uR3JvdXAoZGF0YUZpZWxkKSkge1xuXHRcdFx0XHRjb25zdCBkYXRhRmllbGRHcm91cCA9IGdldERhdGFGaWVsZEFubm90YXRpb25BY3Rpb24oZGF0YUZpZWxkLCBjb252ZXJ0ZXJDb250ZXh0KTtcblx0XHRcdFx0aWYgKGRhdGFGaWVsZEdyb3VwKSB7XG5cdFx0XHRcdFx0dGFibGVBY3Rpb25zLnB1c2goZGF0YUZpZWxkR3JvdXApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0cmV0dXJuIHtcblx0XHR0YWJsZUFjdGlvbnNcblx0fTtcbn1cblxuLy8gRm9yIHRoZSBjb250ZXh0IG1lbnUsIHRoZSB2aXNpYmlsaXR5IHNob3VsZCBhbHNvIGNvbnNpZGVyIHRoZSAnaW5hY3RpdmVDb250ZXh0JyBwcm9wZXJ0eTpcbi8vIG9ubHkgd2hlbiBhdCBsZWFzdCBvbmUgc2VsZWN0ZWQgY29udGV4dCBpcyBhY3RpdmUgKGkuZS4gXCJjb250ZXh0bWVudS9pbmFjdGl2ZUNvbnRleHRcIiBpcyBmYWxzZSksIHRoZSBhY3Rpb24gc2hvdWxkIGJlIHZpc2libGUgaW4gdGhlIGNvbnRleHQgbWVudVxuLy8gVGhpcyBpcyBvbmx5IHJlbGV2YW50IHdoZW4gdGhlIHRhYmxlIG1hbmlmZXN0IHNldHRpbmcgXCJjcmVhdGlvbk1vZGVcIiBpcyBcIklubGluZUNyZWF0aW9uUm93c1wiXG5mdW5jdGlvbiB2aXNpYmxlRm9yQ29udGV4dE1lbnVFeHByZXNzaW9uKFxuXHRkYXRhRmllbGQ6IERhdGFGaWVsZEZvckFjdGlvbiB8IERhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbiB8IERhdGFGaWVsZEZvckFjdGlvbkdyb3VwIHwgdW5kZWZpbmVkLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD5cbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiB7XG5cdHJldHVybiBhbmQodmlzaWJsZUV4cHJlc3Npb24oZGF0YUZpZWxkLCBjb252ZXJ0ZXJDb250ZXh0KSwgZXF1YWwocGF0aEluTW9kZWwoXCJjb250ZXh0bWVudS9pbmFjdGl2ZUNvbnRleHRcIiwgXCJpbnRlcm5hbFwiKSwgZmFsc2UpKTtcbn1cblxuZnVuY3Rpb24gZ2V0RGF0YUZpZWxkQW5ub3RhdGlvbkFjdGlvbihcblx0ZGF0YUZpZWxkOiBEYXRhRmllbGRBYnN0cmFjdFR5cGVzLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD5cbik6IEFubm90YXRpb25BY3Rpb24gfCBBbm5vdGF0aW9uQWN0aW9uR3JvdXAgfCB2b2lkIHtcblx0bGV0IHRhYmxlQWN0aW9uOiBBbm5vdGF0aW9uQWN0aW9uO1xuXHRsZXQgZW50aXR5VHlwZTtcblx0c3dpdGNoIChkYXRhRmllbGQuJFR5cGUpIHtcblx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckFjdGlvbjpcblx0XHRcdHRhYmxlQWN0aW9uID0ge1xuXHRcdFx0XHR0eXBlOiBBY3Rpb25UeXBlLkRhdGFGaWVsZEZvckFjdGlvbixcblx0XHRcdFx0YW5ub3RhdGlvblBhdGg6IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0QmFzZWRBbm5vdGF0aW9uUGF0aChkYXRhRmllbGQuZnVsbHlRdWFsaWZpZWROYW1lKSxcblx0XHRcdFx0a2V5OiBLZXlIZWxwZXIuZ2VuZXJhdGVLZXlGcm9tRGF0YUZpZWxkKGRhdGFGaWVsZCksXG5cdFx0XHRcdHZpc2libGU6IGNvbXBpbGVFeHByZXNzaW9uKHZpc2libGVFeHByZXNzaW9uKGRhdGFGaWVsZCwgY29udmVydGVyQ29udGV4dCkpLFxuXHRcdFx0XHR2aXNpYmxlRm9yQ29udGV4dE1lbnU6IGNvbXBpbGVFeHByZXNzaW9uKHZpc2libGVGb3JDb250ZXh0TWVudUV4cHJlc3Npb24oZGF0YUZpZWxkLCBjb252ZXJ0ZXJDb250ZXh0KSksXG5cdFx0XHRcdGlzTmF2aWdhYmxlOiB0cnVlLFxuXHRcdFx0XHRpc0FJT3BlcmF0aW9uOiBpc0FjdGlvbkFJT3BlcmF0aW9uKGRhdGFGaWVsZCkgPT09IHRydWUgfHwgdW5kZWZpbmVkXG5cdFx0XHR9O1xuXHRcdFx0ZW50aXR5VHlwZSA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZSgpLmZ1bGx5UXVhbGlmaWVkTmFtZTtcblx0XHRcdGlmIChfdXNlRW5hYmxlZEV4cHJlc3Npb24oZGF0YUZpZWxkLCBlbnRpdHlUeXBlKSkge1xuXHRcdFx0XHR0YWJsZUFjdGlvbi5lbmFibGVkID0gZ2V0RW5hYmxlZEZvckFubm90YXRpb25BY3Rpb24oY29udmVydGVyQ29udGV4dCwgZGF0YUZpZWxkLkFjdGlvblRhcmdldCwgdHJ1ZSk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gdGFibGVBY3Rpb247XG5cdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb246XG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHR0eXBlOiBBY3Rpb25UeXBlLkRhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbixcblx0XHRcdFx0YW5ub3RhdGlvblBhdGg6IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0QmFzZWRBbm5vdGF0aW9uUGF0aChkYXRhRmllbGQuZnVsbHlRdWFsaWZpZWROYW1lKSxcblx0XHRcdFx0a2V5OiBLZXlIZWxwZXIuZ2VuZXJhdGVLZXlGcm9tRGF0YUZpZWxkKGRhdGFGaWVsZCksXG5cdFx0XHRcdHZpc2libGU6IGNvbXBpbGVFeHByZXNzaW9uKHZpc2libGVFeHByZXNzaW9uKGRhdGFGaWVsZCwgY29udmVydGVyQ29udGV4dCkpLFxuXHRcdFx0XHR2aXNpYmxlRm9yQ29udGV4dE1lbnU6IGNvbXBpbGVFeHByZXNzaW9uKHZpc2libGVGb3JDb250ZXh0TWVudUV4cHJlc3Npb24oZGF0YUZpZWxkLCBjb252ZXJ0ZXJDb250ZXh0KSlcblx0XHRcdH07XG5cdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JBY3Rpb25Hcm91cDpcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdHR5cGU6IEFjdGlvblR5cGUuTWVudSxcblx0XHRcdFx0a2V5OiBLZXlIZWxwZXIuZ2VuZXJhdGVLZXlGcm9tRGF0YUZpZWxkKGRhdGFGaWVsZCksXG5cdFx0XHRcdGlkOiBLZXlIZWxwZXIuZ2VuZXJhdGVLZXlGcm9tRGF0YUZpZWxkKGRhdGFGaWVsZCksXG5cdFx0XHRcdHRleHQ6IGRhdGFGaWVsZC5MYWJlbD8udG9TdHJpbmcoKSxcblx0XHRcdFx0dmlzaWJsZTogY29tcGlsZUV4cHJlc3Npb24odmlzaWJsZUV4cHJlc3Npb24oZGF0YUZpZWxkLCBjb252ZXJ0ZXJDb250ZXh0KSksXG5cdFx0XHRcdHZpc2libGVGb3JDb250ZXh0TWVudTogY29tcGlsZUV4cHJlc3Npb24odmlzaWJsZUZvckNvbnRleHRNZW51RXhwcmVzc2lvbihkYXRhRmllbGQsIGNvbnZlcnRlckNvbnRleHQpKSxcblx0XHRcdFx0aXNBSU9wZXJhdGlvbjogaXNNZW51QUlPcGVyYXRpb24oZGF0YUZpZWxkLkFjdGlvbnMpID09PSB0cnVlIHx8IHVuZGVmaW5lZCxcblx0XHRcdFx0bWVudTogZGF0YUZpZWxkLkFjdGlvbnMubWFwKChhY3Rpb24pID0+IGdldERhdGFGaWVsZEFubm90YXRpb25BY3Rpb24oYWN0aW9uLCBjb252ZXJ0ZXJDb250ZXh0KSlcblx0XHRcdH0gYXMgQW5ub3RhdGlvbkFjdGlvbkdyb3VwO1xuXHRcdGRlZmF1bHQ6XG5cdFx0XHRyZXR1cm47XG5cdH1cbn1cblxuLyoqXG4gKiBHZW5lcmF0ZSB0aGUgYmluZGluZ0V4cHJlc3Npb24gZm9yIHRoZSBoaWdobGlnaHQgcm93U2V0dGluZyBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0gY3JpdGljYWxpdHlBbm5vdGF0aW9uIFBhdGggb3IgdmFsdWUgb2YgdGhlIGNyaXRpY2FsaXR5XG4gKiBAcGFyYW0gaXNEcmFmdFJvb3RPck5vZGUgIElzIHRoZSBjdXJyZW50IGVudGl0eVNldCBhbiBEcmFmdCByb290IG9yIGEgbm9kZVxuICogQHBhcmFtIHRhcmdldEVudGl0eVR5cGUgVGhlIHRhcmdldGVkIGVudGl0eVR5cGVcbiAqIEByZXR1cm5zIEFuIGV4cHJlc3Npb25CaW5kaW5nXG4gKi9cbmZ1bmN0aW9uIGdldEhpZ2hsaWdodFJvd0JpbmRpbmcoXG5cdGNyaXRpY2FsaXR5QW5ub3RhdGlvbjogQ3JpdGljYWxpdHkgfCB1bmRlZmluZWQsXG5cdGlzRHJhZnRSb290T3JOb2RlOiBib29sZWFuLFxuXHR0YXJnZXRFbnRpdHlUeXBlPzogRW50aXR5VHlwZVxuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPE1lc3NhZ2VUeXBlPiB7XG5cdGxldCBkZWZhdWx0SGlnaGxpZ2h0Um93RGVmaW5pdGlvbjogTWVzc2FnZVR5cGUgfCBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248TWVzc2FnZVR5cGU+ID0gTWVzc2FnZVR5cGUuTm9uZTtcblx0aWYgKGNyaXRpY2FsaXR5QW5ub3RhdGlvbikge1xuXHRcdGlmICh0eXBlb2YgY3JpdGljYWxpdHlBbm5vdGF0aW9uID09PSBcIm9iamVjdFwiKSB7XG5cdFx0XHRkZWZhdWx0SGlnaGxpZ2h0Um93RGVmaW5pdGlvbiA9IGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihjcml0aWNhbGl0eUFubm90YXRpb24pIGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxNZXNzYWdlVHlwZT47XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIEVudW0gVmFsdWUgc28gd2UgZ2V0IHRoZSBjb3JyZXNwb25kaW5nIHN0YXRpYyBwYXJ0XG5cdFx0XHRkZWZhdWx0SGlnaGxpZ2h0Um93RGVmaW5pdGlvbiA9IGdldE1lc3NhZ2VUeXBlRnJvbUNyaXRpY2FsaXR5VHlwZShjcml0aWNhbGl0eUFubm90YXRpb24pO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gZm9ybWF0UmVzdWx0KFxuXHRcdFtcblx0XHRcdGRlZmF1bHRIaWdobGlnaHRSb3dEZWZpbml0aW9uLFxuXHRcdFx0cGF0aEluTW9kZWwoYGZpbHRlcmVkTWVzc2FnZXNgLCBcImludGVybmFsXCIpLFxuXHRcdFx0aXNEcmFmdFJvb3RPck5vZGUgJiYgRW50aXR5Lkhhc0FjdGl2ZSxcblx0XHRcdGlzRHJhZnRSb290T3JOb2RlICYmIEVudGl0eS5Jc0FjdGl2ZSxcblx0XHRcdGAke2lzRHJhZnRSb290T3JOb2RlfWAsXG5cdFx0XHRwYXRoSW5Nb2RlbChcIkAkdWk1LmZlLmNvbnRleHRQYXRoXCIpLFxuXHRcdFx0VUkuSXNJbmFjdGl2ZVxuXHRcdF0sXG5cdFx0dGFibGVGb3JtYXR0ZXJzLnJvd0hpZ2hsaWdodGluZyxcblx0XHR0YXJnZXRFbnRpdHlUeXBlXG5cdCk7XG59XG5cbi8qKlxuICogR2V0cyB0aGUgZXh0ZXJuYWwgY3JlYXRpb24gYmVoYXZpb3IgaWYgdGhlcmUncyBvbmUuXG4gKiBAcGFyYW0gdGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb25cbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcGFyYW0gbmF2aWdhdGlvblNldHRpbmdzXG4gKiBAcmV0dXJucyBUaGUgZXh0ZXJuYWwgY3JlYXRpb24gYmVoYXZpb3IsIG9yIHVuZGVmaW5lZCBpZiB0aGVyZSdzIG5vbmUuXG4gKi9cbmZ1bmN0aW9uIGdldEV4dGVybmFsQ3JlYXRpb25CZWhhdmlvcihcblx0dGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb246IFRhYmxlQ29udHJvbENvbmZpZ3VyYXRpb24sXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pixcblx0bmF2aWdhdGlvblNldHRpbmdzOiBOYXZpZ2F0aW9uU2V0dGluZ3NDb25maWd1cmF0aW9uXG4pOiBDcmVhdGVCZWhhdmlvckV4dGVybmFsIHwgdW5kZWZpbmVkIHtcblx0Ly8gTGVnYWN5IHNldHRpbmdzOiB0aGUgb3V0Ym91bmQgaXMgc3BlY2lmaWVkIGluIG5hdmlnYXRpb24vY3JlYXRlXG5cdC8vIE5ldyBzZXR0aW5nczogdGhlIG91dGJvdW5kIGlzIHNwZWNpZmllZCBpbiB0YWJsZVNldHRpbmdzL2NyZWF0aW9uTW9kZVxuXHRjb25zdCBjcmVhdGlvbkRldGFpbHMgPSBuYXZpZ2F0aW9uU2V0dGluZ3M/LmNyZWF0ZTtcblx0Y29uc3Qgb3V0Ym91bmRLZXkgPSB0YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbi5vdXRib3VuZENyZWF0aW9uID8/IGNyZWF0aW9uRGV0YWlscz8ub3V0Ym91bmQ7XG5cdGNvbnN0IG91dGJvdW5kRGV0YWlsID0gb3V0Ym91bmRLZXkgPyBjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0V3JhcHBlcigpLmdldE91dGJvdW5kTmF2aWdhdGlvbkVudHJpZXMoKT8uW291dGJvdW5kS2V5XSA6IHVuZGVmaW5lZDtcblx0aWYgKG91dGJvdW5kS2V5ICYmIG91dGJvdW5kRGV0YWlsKSB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdG1vZGU6IFwiRXh0ZXJuYWxcIixcblx0XHRcdG91dGJvdW5kOiBvdXRib3VuZEtleSxcblx0XHRcdG91dGJvdW5kRGV0YWlsXG5cdFx0fTtcblx0fSBlbHNlIHtcblx0XHRpZiAodGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24uY3JlYXRpb25Nb2RlID09PSBDcmVhdGlvbk1vZGUuRXh0ZXJuYWwpIHtcblx0XHRcdC8vIE91dGJvdW5kIGNvbmZpZ3VyYXRpb24gaW5jb3JyZWN0IC0tPiBmYWxsYmFjayB0byBOZXdQYWdlXG5cdFx0XHRMb2cud2FybmluZyhgQ2Fubm90IGZpbmQgb3V0Ym91bmQgcGFyYW1ldGVycyBmb3IgXCJFeHRlcm5hbFwiIGNyZWF0aW9uIG1vZGUuIEluc3RlYWQsIHRoZSBkZWZhdWx0IG1vZGUgXCJOZXdQYWdlXCIgaXMgdXNlZC5gKTtcblx0XHRcdHRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uLmNyZWF0aW9uTW9kZSA9IENyZWF0aW9uTW9kZS5OZXdQYWdlO1xuXHRcdFx0ZGVsZXRlIHRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uLm91dGJvdW5kQ3JlYXRpb247XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxufVxuXG5mdW5jdGlvbiBfZ2V0Q3JlYXRpb25CZWhhdmlvdXIoXG5cdGxpbmVJdGVtQW5ub3RhdGlvbjogTGluZUl0ZW0gfCB1bmRlZmluZWQsXG5cdHRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uOiBUYWJsZUNvbnRyb2xDb25maWd1cmF0aW9uLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sXG5cdG5hdmlnYXRpb25TZXR0aW5nczogTmF2aWdhdGlvblNldHRpbmdzQ29uZmlndXJhdGlvbixcblx0dmlzdWFsaXphdGlvblBhdGg6IHN0cmluZ1xuKTogQ3JlYXRlQmVoYXZpb3IgfCBDcmVhdGVCZWhhdmlvckV4dGVybmFsIHtcblx0Y29uc3QgZXh0ZXJuYWxCZWhhdmlvciA9IGdldEV4dGVybmFsQ3JlYXRpb25CZWhhdmlvcih0YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbiwgY29udmVydGVyQ29udGV4dCwgbmF2aWdhdGlvblNldHRpbmdzKTtcblx0aWYgKGV4dGVybmFsQmVoYXZpb3IpIHtcblx0XHR0YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbi5jcmVhdGlvbk1vZGUgPSBDcmVhdGlvbk1vZGUuRXh0ZXJuYWw7XG5cdFx0dGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24ub3V0Ym91bmRDcmVhdGlvbiA9IGV4dGVybmFsQmVoYXZpb3Iub3V0Ym91bmQ7XG5cdFx0cmV0dXJuIGV4dGVybmFsQmVoYXZpb3I7XG5cdH1cblxuXHRjb25zdCB0YWJsZU1hbmlmZXN0U2V0dGluZ3M6IFRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uID0gY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdENvbnRyb2xDb25maWd1cmF0aW9uKHZpc3VhbGl6YXRpb25QYXRoKTtcblx0Y29uc3Qgb3JpZ2luYWxUYWJsZVNldHRpbmdzID0gdGFibGVNYW5pZmVzdFNldHRpbmdzPy50YWJsZVNldHRpbmdzID8/IHt9O1xuXHRjb25zdCBuYXZpZ2F0aW9uRGV0YWlscyA9IG5hdmlnYXRpb25TZXR0aW5ncz8uZGV0YWlsO1xuXHRpZiAoXG5cdFx0Y29udmVydGVyQ29udGV4dC5nZXRUZW1wbGF0ZVR5cGUoKSA9PT0gVGVtcGxhdGVUeXBlLkxpc3RSZXBvcnQgJiZcblx0XHQhW0NyZWF0aW9uTW9kZS5OZXdQYWdlLCBDcmVhdGlvbk1vZGUuRXh0ZXJuYWwsIENyZWF0aW9uTW9kZS5DcmVhdGlvbkRpYWxvZ10uaW5jbHVkZXModGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24uY3JlYXRpb25Nb2RlKVxuXHQpIHtcblx0XHQvLyBGYWxsYmFjayB0byBcIk5ld1BhZ2VcIlxuXHRcdExvZy53YXJuaW5nKFxuXHRcdFx0YENyZWF0aW9uIG1vZGUgJyR7dGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24uY3JlYXRpb25Nb2RlfScgY2FuIG5vdCBiZSB1c2VkIHdpdGhpbiB0aGUgTGlzdCBSZXBvcnQuIEluc3RlYWQsIHRoZSBkZWZhdWx0IG1vZGUgXCJOZXdQYWdlXCIgaXMgdXNlZC5gXG5cdFx0KTtcblx0XHR0YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbi5jcmVhdGlvbk1vZGUgPSBDcmVhdGlvbk1vZGUuTmV3UGFnZTtcblx0fSBlbHNlIGlmIChcblx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldFRlbXBsYXRlVHlwZSgpICE9PSBUZW1wbGF0ZVR5cGUuTGlzdFJlcG9ydCAmJlxuXHRcdHRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uLnR5cGUgPT09IFwiVHJlZVRhYmxlXCIgJiZcblx0XHQhW0NyZWF0aW9uTW9kZS5OZXdQYWdlLCBDcmVhdGlvbk1vZGUuSW5saW5lLCBDcmVhdGlvbk1vZGUuQ3JlYXRpb25EaWFsb2ddLmluY2x1ZGVzKHRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uLmNyZWF0aW9uTW9kZSlcblx0KSB7XG5cdFx0Ly8gRmFsbGJhY2sgdG8gXCJOZXdQYWdlXCIgaW4gY2FzZSBvZiBhIG5vbi1zdXBwb3J0ZWQgbW9kZSBmb3IgYSBUcmVlVGFibGVcblx0XHRMb2cud2FybmluZyhcblx0XHRcdGBDcmVhdGlvbiBtb2RlICcke3RhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uLmNyZWF0aW9uTW9kZX0nIGNhbiBub3QgYmUgdXNlZCB3aXRoIGEgVHJlZSBUYWJsZS4gSW5zdGVhZCwgdGhlIGRlZmF1bHQgbW9kZSBcIk5ld1BhZ2VcIiBpcyB1c2VkLmBcblx0XHQpO1xuXHRcdHRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uLmNyZWF0aW9uTW9kZSA9IENyZWF0aW9uTW9kZS5OZXdQYWdlO1xuXHR9XG5cblx0bGV0IG5ld0FjdGlvbjtcblx0aWYgKGxpbmVJdGVtQW5ub3RhdGlvbikge1xuXHRcdC8vIGluLWFwcFxuXHRcdGNvbnN0IHRhcmdldEFubm90YXRpb25zID0gY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXQoKT8uYW5ub3RhdGlvbnM7XG5cdFx0Y29uc3QgdGFyZ2V0QW5ub3RhdGlvbnNDb21tb24gPSB0YXJnZXRBbm5vdGF0aW9ucz8uQ29tbW9uIGFzIEVudGl0eVNldEFubm90YXRpb25zX0NvbW1vbixcblx0XHRcdHRhcmdldEFubm90YXRpb25zU2Vzc2lvbiA9IHRhcmdldEFubm90YXRpb25zPy5TZXNzaW9uIGFzIEVudGl0eVNldEFubm90YXRpb25zX1Nlc3Npb247XG5cdFx0bmV3QWN0aW9uID0gdGFyZ2V0QW5ub3RhdGlvbnNDb21tb24/LkRyYWZ0Um9vdD8uTmV3QWN0aW9uIHx8IHRhcmdldEFubm90YXRpb25zU2Vzc2lvbj8uU3RpY2t5U2Vzc2lvblN1cHBvcnRlZD8uTmV3QWN0aW9uO1xuXHRcdGlmICh0YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbi5jcmVhdGlvbk1vZGUgPT09IENyZWF0aW9uTW9kZS5DcmVhdGlvblJvdyAmJiBuZXdBY3Rpb24pIHtcblx0XHRcdC8vIEEgY29tYmluYXRpb24gb2YgJ0NyZWF0aW9uUm93JyBhbmQgJ05ld0FjdGlvbicgZG9lcyBub3QgbWFrZSBzZW5zZVxuXHRcdFx0dGhyb3cgRXJyb3IoYENyZWF0aW9uIG1vZGUgJyR7Q3JlYXRpb25Nb2RlLkNyZWF0aW9uUm93fScgY2FuIG5vdCBiZSB1c2VkIHdpdGggYSBjdXN0b20gJ25ldycgYWN0aW9uICgke25ld0FjdGlvbn0pYCk7XG5cdFx0fVxuXHRcdGlmIChuYXZpZ2F0aW9uRGV0YWlscz8ucm91dGUpIHtcblx0XHRcdC8vIHJvdXRlIHNwZWNpZmllZFxuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0bW9kZTogdGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24uY3JlYXRpb25Nb2RlLFxuXHRcdFx0XHRhcHBlbmQ6IHRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uLmNyZWF0ZUF0RW5kLFxuXHRcdFx0XHRuZXdBY3Rpb246IG5ld0FjdGlvbj8udG9TdHJpbmcoKSxcblx0XHRcdFx0bmF2aWdhdGVUb1RhcmdldDogdGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24uY3JlYXRpb25Nb2RlID09PSBDcmVhdGlvbk1vZGUuTmV3UGFnZSA/IG5hdmlnYXRpb25EZXRhaWxzLnJvdXRlIDogdW5kZWZpbmVkIC8vIG5hdmlnYXRlIG9ubHkgaW4gTmV3UGFnZSBtb2RlXG5cdFx0XHR9O1xuXHRcdH1cblx0fVxuXHQvLyBubyBuYXZpZ2F0aW9uIG9yIG5vIHJvdXRlIHNwZWNpZmllZCAtIGZhbGxiYWNrIHRvIGlubGluZSBjcmVhdGUgaWYgb3JpZ2luYWwgY3JlYXRpb24gbW9kZSB3YXMgJ05ld1BhZ2UnXG5cdGlmICh0YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbi5jcmVhdGlvbk1vZGUgPT09IENyZWF0aW9uTW9kZS5OZXdQYWdlKSB7XG5cdFx0aWYgKGNvbnZlcnRlckNvbnRleHQuZ2V0VGVtcGxhdGVUeXBlKCkgPT09IFRlbXBsYXRlVHlwZS5MaXN0UmVwb3J0KSB7XG5cdFx0XHRMb2cuZXJyb3IoXCJUaGUgY3JlYXRpb24gbW9kZSAnTmV3UGFnZScgaXMgdXNlZCBidXQgdGhlIG5hdmlnYXRpb24gY29uZmlndXJhdGlvbiB0byB0aGUgc3ViIHBhZ2UgaXMgbWlzc2luZy5cIik7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uLmNyZWF0aW9uTW9kZSA9IENyZWF0aW9uTW9kZS5JbmxpbmU7XG5cdFx0XHQvLyBJbiBjYXNlIHRoZXJlIHdhcyBubyBzcGVjaWZpYyBjb25maWd1cmF0aW9uIGZvciB0aGUgY3JlYXRlQXRFbmQgd2UgZm9yY2UgaXQgdG8gZmFsc2Vcblx0XHRcdGlmIChvcmlnaW5hbFRhYmxlU2V0dGluZ3MuY3JlYXRpb25Nb2RlPy5jcmVhdGVBdEVuZCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdHRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uLmNyZWF0ZUF0RW5kID0gZmFsc2U7XG5cdFx0XHR9XG5cdFx0XHRMb2cuaW5mbyhcIlRoZSBjcmVhdGlvbiBtb2RlIHdhcyBjaGFuZ2VkIGZyb20gJ05ld1BhZ2UnIHRvICdJbmxpbmUnIGR1ZSB0byBtaXNzaW5nIG5hdmlnYXRpb24gY29uZmlndXJhdGlvbiB0byB0aGUgc3ViIHBhZ2UuXCIpO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4ge1xuXHRcdG1vZGU6IHRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uLmNyZWF0aW9uTW9kZSxcblx0XHRhcHBlbmQ6IHRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uLmNyZWF0ZUF0RW5kLFxuXHRcdG5ld0FjdGlvbjogbmV3QWN0aW9uPy50b1N0cmluZygpXG5cdH07XG59XG5jb25zdCBfZ2V0Um93Q29uZmlndXJhdGlvblByb3BlcnR5ID0gZnVuY3Rpb24gKFxuXHRsaW5lSXRlbUFubm90YXRpb246IExpbmVJdGVtIHwgdW5kZWZpbmVkLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sXG5cdG5hdmlnYXRpb25TZXR0aW5nczogTmF2aWdhdGlvblNldHRpbmdzQ29uZmlndXJhdGlvbixcblx0dGFyZ2V0UGF0aDogc3RyaW5nLFxuXHR0YWJsZVR5cGU6IFRhYmxlVHlwZSxcblx0YWdncmVnYXRpb25PbkxlYWZMZXZlbGVuYWJsZWQ/OiBib29sZWFuXG4pOiBSb3dDb25maWd1cmF0aW9uIHtcblx0bGV0IG5hdmlnYXRpb25JbmZvOiBSb3dOYXZpZ2F0aW9uSW5mbyB8IHVuZGVmaW5lZDtcblx0bGV0IGNyaXRpY2FsaXR5UHJvcGVydHk6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxNZXNzYWdlVHlwZT4gPSBjb25zdGFudChNZXNzYWdlVHlwZS5Ob25lKTtcblx0Y29uc3QgdGFyZ2V0RW50aXR5VHlwZSA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZSgpO1xuXHRjb25zdCBjcml0aWNhbGl0eUFubm90YXRpb24gPSBsaW5lSXRlbUFubm90YXRpb24/LmFubm90YXRpb25zPy5VST8uQ3JpdGljYWxpdHk7XG5cdGlmIChuYXZpZ2F0aW9uU2V0dGluZ3MgJiYgbGluZUl0ZW1Bbm5vdGF0aW9uKSB7XG5cdFx0Y29uc3QgbmF2aWdhdGlvblRhcmdldCA9IG5hdmlnYXRpb25TZXR0aW5ncy5kaXNwbGF5Py50YXJnZXQgfHwgbmF2aWdhdGlvblNldHRpbmdzLmRldGFpbD8ub3V0Ym91bmQ7XG5cdFx0Y29uc3QgdGFyZ2V0RW50aXR5U2V0ID0gY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXQoKTtcblx0XHRjcml0aWNhbGl0eVByb3BlcnR5ID0gZ2V0SGlnaGxpZ2h0Um93QmluZGluZyhcblx0XHRcdGNyaXRpY2FsaXR5QW5ub3RhdGlvbixcblx0XHRcdCEhTW9kZWxIZWxwZXIuZ2V0RHJhZnRSb290KHRhcmdldEVudGl0eVNldCkgfHwgISFNb2RlbEhlbHBlci5nZXREcmFmdE5vZGUodGFyZ2V0RW50aXR5U2V0KSxcblx0XHRcdHRhcmdldEVudGl0eVR5cGVcblx0XHQpO1xuXHRcdGlmIChuYXZpZ2F0aW9uVGFyZ2V0KSB7XG5cdFx0XHRuYXZpZ2F0aW9uSW5mbyA9IHsgdHlwZTogXCJPdXRib3VuZFwiLCBuYXZpZ2F0aW9uVGFyZ2V0IH07XG5cdFx0fVxuXHRcdGlmICghbmF2aWdhdGlvblRhcmdldCAmJiBuYXZpZ2F0aW9uU2V0dGluZ3MuZGV0YWlsPy5yb3V0ZSkge1xuXHRcdFx0Y29uc3QgY2hlY2tFZGl0YWJsZSA9XG5cdFx0XHRcdE1vZGVsSGVscGVyLmdldERyYWZ0Um9vdCh0YXJnZXRFbnRpdHlTZXQpICE9PSB1bmRlZmluZWQgfHwgTW9kZWxIZWxwZXIuZ2V0RHJhZnROb2RlKHRhcmdldEVudGl0eVNldCkgIT09IHVuZGVmaW5lZDtcblx0XHRcdG5hdmlnYXRpb25JbmZvID0ge1xuXHRcdFx0XHR0eXBlOiBcIk5hdmlnYXRpb25cIixcblx0XHRcdFx0cm91dGVQYXRoOiBuYXZpZ2F0aW9uU2V0dGluZ3MuZGV0YWlsLnJvdXRlLFxuXHRcdFx0XHR0YXJnZXRQYXRoLFxuXHRcdFx0XHRjaGVja0VkaXRhYmxlLFxuXHRcdFx0XHRyZWNyZWF0ZUNvbnRleHQ6IHRhYmxlVHlwZSA9PT0gXCJBbmFseXRpY2FsVGFibGVcIlxuXHRcdFx0fTtcblx0XHR9XG5cdH1cblx0Y29uc3Qgcm93TmF2aWdhdGVkRXhwcmVzc2lvbjogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+ID0gZm9ybWF0UmVzdWx0KFxuXHRcdFtwYXRoSW5Nb2RlbChcIi9kZWVwZXN0UGF0aFwiLCBcImludGVybmFsXCIpXSxcblx0XHR0YWJsZUZvcm1hdHRlcnMubmF2aWdhdGVkUm93LFxuXHRcdHRhcmdldEVudGl0eVR5cGVcblx0KTtcblx0cmV0dXJuIHtcblx0XHRuYXZpZ2F0aW9uSW5mbyxcblx0XHRhY3Rpb25UeXBlOiBuYXZpZ2F0aW9uSW5mbyA/IFwiTmF2aWdhdGlvblwiIDogdW5kZWZpbmVkLFxuXHRcdHJvd0hpZ2hsaWdodGluZzogY29tcGlsZUV4cHJlc3Npb24oY3JpdGljYWxpdHlQcm9wZXJ0eSksXG5cdFx0cm93TmF2aWdhdGVkOiBjb21waWxlRXhwcmVzc2lvbihyb3dOYXZpZ2F0ZWRFeHByZXNzaW9uKSxcblx0XHRyb3dDcml0aWNhbGl0eUZvckluc2lnaHRzOiBjcml0aWNhbGl0eUFubm90YXRpb24gPyBjcml0aWNhbGl0eUV4cHJlc3Npb25Gb3JJbnRlZ3JhdGlvbkNhcmRzKGNyaXRpY2FsaXR5QW5ub3RhdGlvbikgOiB1bmRlZmluZWQsXG5cdFx0dmlzaWJsZTogY29tcGlsZUV4cHJlc3Npb24oYW5kKG5vdChVSS5Jc0luYWN0aXZlKSwgYWdncmVnYXRpb25PbkxlYWZMZXZlbGVuYWJsZWQgPyBVSS5pc05vZGVMZXZlbE5hdmlnYWJsZSA6IHRydWUpKVxuXHR9O1xufTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgUHJvcGVydHlJbmZvIGZvciB0aGUgaWRlbnRpZmllZCBhZGRpdGlvbmFsIHByb3BlcnR5IGZvciB0aGUgQUxQIHRhYmxlIHVzZS1jYXNlLlxuICpcbiAqIEZvciBlLmcuIElmIFVJLkhpZGRlbiBwb2ludHMgdG8gYSBwcm9wZXJ0eSwgaW5jbHVkZSB0aGlzIHRlY2huaWNhbCBwcm9wZXJ0eSBpbiB0aGUgYWRkaXRpb25hbFByb3BlcnRpZXMgb2YgQ29tcGxleFByb3BlcnR5SW5mbyBvYmplY3QuXG4gKiBAcGFyYW0gbmFtZSBUaGUgbmFtZSBvZiB0aGUgcHJvcGVydHkgdG8gYmUgY3JlYXRlZC5cbiAqIEBwYXJhbSBjb2x1bW5zIFRoZSBsaXN0IG9mIGNvbHVtbnMgY3JlYXRlZCBmb3IgTGluZUl0ZW1zIGFuZCBQcm9wZXJ0aWVzIG9mIGVudGl0eVR5cGUgZnJvbSB0aGUgdGFibGUgdmlzdWFsaXphdGlvbi5cbiAqIEBwYXJhbSByZWxhdGVkQWRkaXRpb25hbFByb3BlcnR5TmFtZU1hcFxuICovXG5jb25zdCBjcmVhdGVUZWNobmljYWxQcm9wZXJ0eSA9IGZ1bmN0aW9uIChcblx0bmFtZTogc3RyaW5nLFxuXHRjb2x1bW5zOiBUYWJsZUNvbHVtbltdLFxuXHRyZWxhdGVkQWRkaXRpb25hbFByb3BlcnR5TmFtZU1hcDogUmVjb3JkPHN0cmluZywgc3RyaW5nPlxuKTogdm9pZCB7XG5cdGNvbnN0IGtleSA9IGBQcm9wZXJ0eV9UZWNobmljYWw6OiR7bmFtZX1gO1xuXHQvLyBWYWxpZGF0ZSBpZiB0aGUgdGVjaG5pY2FsIHByb3BlcnR5IGhhc24ndCB5ZXQgYmVlbiBjcmVhdGVkIG9uIHByZXZpb3VzIGl0ZXJhdGlvbnMuXG5cdGNvbnN0IGNvbHVtbkV4aXN0cyA9IGNvbHVtbnMuZmluZCgoY29sdW1uKSA9PiBjb2x1bW4ua2V5ID09PSBrZXkpO1xuXHQvLyBSZXRyaWV2ZSB0aGUgc2ltcGxlIHByb3BlcnR5IHVzZWQgYnkgdGhlIGhpZGRlbiBhbm5vdGF0aW9uLCBpdCB3aWxsIGJlIHVzZWQgYXMgYSBiYXNlIGZvciB0aGUgbWFuZGF0b3J5IGF0dHJpYnV0ZXMgb2YgbmV3bHkgY3JlYXRlZCB0ZWNobmljYWwgcHJvcGVydHkuIEZvciBlLmcuIHJlbGF0aXZlUGF0aFxuXHRjb25zdCBhZGRpdGlvbmFsUHJvcGVydHkgPVxuXHRcdCFjb2x1bW5FeGlzdHMgJiYgKGNvbHVtbnMuZmluZCgoY29sdW1uKSA9PiBjb2x1bW4ubmFtZSA9PT0gbmFtZSAmJiAhY29sdW1uLnByb3BlcnR5SW5mb3MpIGFzIEFubm90YXRpb25UYWJsZUNvbHVtbikhO1xuXHRpZiAoYWRkaXRpb25hbFByb3BlcnR5KSB7XG5cdFx0Y29uc3QgdGVjaG5pY2FsQ29sdW1uOiBBbm5vdGF0aW9uVGFibGVDb2x1bW4gPSB7XG5cdFx0XHRrZXk6IGtleSxcblx0XHRcdHR5cGU6IENvbHVtblR5cGUuQW5ub3RhdGlvbixcblx0XHRcdGxhYmVsOiBhZGRpdGlvbmFsUHJvcGVydHkubGFiZWwsXG5cdFx0XHRhbm5vdGF0aW9uUGF0aDogYWRkaXRpb25hbFByb3BlcnR5LmFubm90YXRpb25QYXRoLFxuXHRcdFx0ZGF0YVR5cGU6IFwiRWRtLlN0cmluZ1wiLFxuXHRcdFx0YXZhaWxhYmlsaXR5OiBcIkhpZGRlblwiLFxuXHRcdFx0bmFtZToga2V5LFxuXHRcdFx0cmVsYXRpdmVQYXRoOiBhZGRpdGlvbmFsUHJvcGVydHkucmVsYXRpdmVQYXRoLFxuXHRcdFx0c29ydGFibGU6IGZhbHNlLFxuXHRcdFx0aXNHcm91cGFibGU6IGZhbHNlLFxuXHRcdFx0aXNLZXk6IGZhbHNlLFxuXHRcdFx0ZXhwb3J0U2V0dGluZ3M6IG51bGwsXG5cdFx0XHRjYXNlU2Vuc2l0aXZlOiBmYWxzZSxcblx0XHRcdGFnZ3JlZ2F0YWJsZTogZmFsc2UsXG5cdFx0XHRmaWx0ZXJhYmxlOiBmYWxzZSxcblx0XHRcdGV4dGVuc2lvbjoge1xuXHRcdFx0XHR0ZWNobmljYWxseUdyb3VwYWJsZTogdHJ1ZSxcblx0XHRcdFx0dGVjaG5pY2FsbHlBZ2dyZWdhdGFibGU6IHRydWVcblx0XHRcdH1cblx0XHR9O1xuXHRcdGNvbHVtbnMucHVzaCh0ZWNobmljYWxDb2x1bW4pO1xuXHRcdHJlbGF0ZWRBZGRpdGlvbmFsUHJvcGVydHlOYW1lTWFwW25hbWVdID0gdGVjaG5pY2FsQ29sdW1uLm5hbWU7XG5cdH1cbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRQMTNuTW9kZShcblx0dmlzdWFsaXphdGlvblBhdGg6IHN0cmluZyxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+LFxuXHR0YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbjogVGFibGVDb250cm9sQ29uZmlndXJhdGlvblxuKTogVGFibGVQMTNuTW9kZVtdIHwgdW5kZWZpbmVkIHtcblx0Y29uc3QgbWFuaWZlc3RXcmFwcGVyOiBNYW5pZmVzdFdyYXBwZXIgPSBjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0V3JhcHBlcigpO1xuXHRjb25zdCB0YWJsZU1hbmlmZXN0U2V0dGluZ3M6IFRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uID0gY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdENvbnRyb2xDb25maWd1cmF0aW9uKHZpc3VhbGl6YXRpb25QYXRoKTtcblx0Y29uc3QgdmFyaWFudE1hbmFnZW1lbnQ6IFZhcmlhbnRNYW5hZ2VtZW50VHlwZSA9IG1hbmlmZXN0V3JhcHBlci5nZXRWYXJpYW50TWFuYWdlbWVudCgpO1xuXHRjb25zdCBtb2RlczogVGFibGVQMTNuTW9kZVtdID0gW107XG5cdGNvbnN0IGlzQW5hbHl0aWNhbFRhYmxlID0gdGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24udHlwZSA9PT0gXCJBbmFseXRpY2FsVGFibGVcIjtcblx0Y29uc3QgaXNSZXNwb25zaXZlVGFibGUgPSB0YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbi50eXBlID09PSBcIlJlc3BvbnNpdmVUYWJsZVwiO1xuXHRpZiAodGFibGVNYW5pZmVzdFNldHRpbmdzPy50YWJsZVNldHRpbmdzPy5wZXJzb25hbGl6YXRpb24gIT09IHVuZGVmaW5lZCkge1xuXHRcdC8vIFBlcnNvbmFsaXphdGlvbiBjb25maWd1cmVkIGluIG1hbmlmZXN0LlxuXHRcdGNvbnN0IHBlcnNvbmFsaXphdGlvbiA9IHRhYmxlTWFuaWZlc3RTZXR0aW5ncy50YWJsZVNldHRpbmdzLnBlcnNvbmFsaXphdGlvbjtcblx0XHRpZiAocGVyc29uYWxpemF0aW9uID09PSB0cnVlKSB7XG5cdFx0XHQvLyBUYWJsZSBwZXJzb25hbGl6YXRpb24gZnVsbHkgZW5hYmxlZC5cblx0XHRcdHN3aXRjaCAodGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24udHlwZSkge1xuXHRcdFx0XHRjYXNlIFwiQW5hbHl0aWNhbFRhYmxlXCI6XG5cdFx0XHRcdFx0cmV0dXJuIFtcIlNvcnRcIiwgXCJDb2x1bW5cIiwgXCJGaWx0ZXJcIiwgXCJHcm91cFwiLCBcIkFnZ3JlZ2F0ZVwiXTtcblx0XHRcdFx0Y2FzZSBcIlJlc3BvbnNpdmVUYWJsZVwiOlxuXHRcdFx0XHRcdHJldHVybiBbXCJTb3J0XCIsIFwiQ29sdW1uXCIsIFwiRmlsdGVyXCIsIFwiR3JvdXBcIl07XG5cdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0cmV0dXJuIFtcIlNvcnRcIiwgXCJDb2x1bW5cIiwgXCJGaWx0ZXJcIl07XG5cdFx0XHR9XG5cdFx0fSBlbHNlIGlmICh0eXBlb2YgcGVyc29uYWxpemF0aW9uID09PSBcIm9iamVjdFwiKSB7XG5cdFx0XHQvLyBTcGVjaWZpYyBwZXJzb25hbGl6YXRpb24gb3B0aW9ucyBlbmFibGVkIGluIG1hbmlmZXN0LiBVc2UgdGhlbSBhcyBpcy5cblx0XHRcdGlmIChwZXJzb25hbGl6YXRpb24uc29ydCkge1xuXHRcdFx0XHRtb2Rlcy5wdXNoKFwiU29ydFwiKTtcblx0XHRcdH1cblx0XHRcdGlmIChwZXJzb25hbGl6YXRpb24uY29sdW1uKSB7XG5cdFx0XHRcdG1vZGVzLnB1c2goXCJDb2x1bW5cIik7XG5cdFx0XHR9XG5cdFx0XHRpZiAocGVyc29uYWxpemF0aW9uLmZpbHRlcikge1xuXHRcdFx0XHRtb2Rlcy5wdXNoKFwiRmlsdGVyXCIpO1xuXHRcdFx0fVxuXHRcdFx0aWYgKHBlcnNvbmFsaXphdGlvbi5ncm91cCAmJiAoaXNBbmFseXRpY2FsVGFibGUgfHwgaXNSZXNwb25zaXZlVGFibGUpKSB7XG5cdFx0XHRcdG1vZGVzLnB1c2goXCJHcm91cFwiKTtcblx0XHRcdH1cblx0XHRcdGlmIChwZXJzb25hbGl6YXRpb24uYWdncmVnYXRlICYmIGlzQW5hbHl0aWNhbFRhYmxlKSB7XG5cdFx0XHRcdG1vZGVzLnB1c2goXCJBZ2dyZWdhdGVcIik7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gbW9kZXMubGVuZ3RoID4gMCA/IG1vZGVzIDogdW5kZWZpbmVkO1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHQvLyBObyBwZXJzb25hbGl6YXRpb24gY29uZmlndXJlZCBpbiBtYW5pZmVzdC5cblx0XHRtb2Rlcy5wdXNoKFwiU29ydFwiKTtcblx0XHRtb2Rlcy5wdXNoKFwiQ29sdW1uXCIpO1xuXHRcdGlmIChjb252ZXJ0ZXJDb250ZXh0LmdldFRlbXBsYXRlVHlwZSgpID09PSBUZW1wbGF0ZVR5cGUuTGlzdFJlcG9ydCkge1xuXHRcdFx0aWYgKHZhcmlhbnRNYW5hZ2VtZW50ID09PSBWYXJpYW50TWFuYWdlbWVudFR5cGUuQ29udHJvbCB8fCBfaXNGaWx0ZXJCYXJIaWRkZW4obWFuaWZlc3RXcmFwcGVyLCBjb252ZXJ0ZXJDb250ZXh0KSkge1xuXHRcdFx0XHQvLyBGZWF0dXJlIHBhcml0eSB3aXRoIFYyLlxuXHRcdFx0XHQvLyBFbmFibGUgdGFibGUgZmlsdGVyaW5nIGJ5IGRlZmF1bHQgb25seSBpbiBjYXNlIG9mIENvbnRyb2wgbGV2ZWwgdmFyaWFudCBtYW5hZ2VtZW50LlxuXHRcdFx0XHQvLyBPciB3aGVuIHRoZSBMUiBmaWx0ZXIgYmFyIGlzIGhpZGRlbiB2aWEgbWFuaWZlc3Qgc2V0dGluZ1xuXHRcdFx0XHRtb2Rlcy5wdXNoKFwiRmlsdGVyXCIpO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRtb2Rlcy5wdXNoKFwiRmlsdGVyXCIpO1xuXHRcdH1cblx0XHRpZiAoaXNBbmFseXRpY2FsVGFibGUpIHtcblx0XHRcdG1vZGVzLnB1c2goXCJHcm91cFwiKTtcblx0XHRcdG1vZGVzLnB1c2goXCJBZ2dyZWdhdGVcIik7XG5cdFx0fVxuXHRcdGlmIChpc1Jlc3BvbnNpdmVUYWJsZSkge1xuXHRcdFx0bW9kZXMucHVzaChcIkdyb3VwXCIpO1xuXHRcdH1cblx0XHRyZXR1cm4gbW9kZXM7XG5cdH1cbn1cbi8qKlxuICogUmV0dXJucyBhIEJvb2xlYW4gdmFsdWUgc3VnZ2VzdGluZyBpZiBhIGZpbHRlciBiYXIgaXMgYmVpbmcgdXNlZCBvbiB0aGUgcGFnZS5cbiAqXG4gKiBDaGFydCBoYXMgYSBkZXBlbmRlbmN5IHRvIGZpbHRlciBiYXIgKGlzc3VlIHdpdGggbG9hZGluZyBkYXRhKS4gT25jZSByZXNvbHZlZCwgdGhlIGNoZWNrIGZvciBjaGFydCBzaG91bGQgYmUgcmVtb3ZlZCBoZXJlLlxuICogVW50aWwgdGhlbiwgaGlkaW5nIGZpbHRlciBiYXIgaXMgbm93IGFsbG93ZWQgaWYgYSBjaGFydCBpcyBiZWluZyB1c2VkIG9uIExSLlxuICogQHBhcmFtIG1hbmlmZXN0V3JhcHBlciBNYW5pZmVzdCBzZXR0aW5ncyBnZXR0ZXIgZm9yIHRoZSBwYWdlXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dCBUaGUgaW5zdGFuY2Ugb2YgdGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKiBAcmV0dXJucyBCb29sZWFuIHN1Z2dlc3RpbmcgaWYgYSBmaWx0ZXIgYmFyIGlzIGJlaW5nIHVzZWQgb24gdGhlIHBhZ2UuXG4gKi9cbmZ1bmN0aW9uIF9pc0ZpbHRlckJhckhpZGRlbihtYW5pZmVzdFdyYXBwZXI6IE1hbmlmZXN0V3JhcHBlciwgY29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+KTogYm9vbGVhbiB7XG5cdHJldHVybiAoXG5cdFx0bWFuaWZlc3RXcmFwcGVyLmlzRmlsdGVyQmFySGlkZGVuKCkgJiZcblx0XHQhY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKS5oYXNNdWx0aXBsZVZpc3VhbGl6YXRpb25zKCkgJiZcblx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldFRlbXBsYXRlVHlwZSgpICE9PSBUZW1wbGF0ZVR5cGUuQW5hbHl0aWNhbExpc3RQYWdlXG5cdCk7XG59XG4vKipcbiAqIFJldHVybnMgYSBKU09OIHN0cmluZyBjb250YWluaW5nIHRoZSBzb3J0IGNvbmRpdGlvbnMgZm9yIHRoZSBwcmVzZW50YXRpb24gdmFyaWFudC5cbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBpbnN0YW5jZSBvZiB0aGUgY29udmVydGVyIGNvbnRleHRcbiAqIEBwYXJhbSBwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbiBQcmVzZW50YXRpb24gdmFyaWFudCBhbm5vdGF0aW9uXG4gKiBAcGFyYW0gY29sdW1ucyBUYWJsZSBjb2x1bW5zIHByb2Nlc3NlZCBieSB0aGUgY29udmVydGVyXG4gKiBAcmV0dXJucyBTb3J0IGNvbmRpdGlvbnMgZm9yIGEgcHJlc2VudGF0aW9uIHZhcmlhbnQuXG4gKi9cbmZ1bmN0aW9uIGdldFNvcnRDb25kaXRpb25zKFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sXG5cdHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uOiBQcmVzZW50YXRpb25WYXJpYW50VHlwZSB8IHVuZGVmaW5lZCxcblx0Y29sdW1uczogVGFibGVDb2x1bW5bXVxuKTogVGFibGVTb3J0Q29uZGl0aW9ucyB8IHVuZGVmaW5lZCB7XG5cdC8vIEN1cnJlbnRseSBuYXZpZ2F0aW9uIHByb3BlcnR5IGlzIG5vdCBzdXBwb3J0ZWQgYXMgc29ydGVyXG5cdGNvbnN0IG5vblNvcnRhYmxlUHJvcGVydGllcyA9IGdldFJlc3RyaWN0aW9uc09uUHJvcGVydGllcyhjb252ZXJ0ZXJDb250ZXh0KS5ub25Tb3J0YWJsZVByb3BlcnRpZXM7XG5cdGNvbnN0IHNvcnRDb25kaXRpb25zOiBUYWJsZVNvcnRDb25kaXRpb25zID0ge1xuXHRcdHNvcnRlcnM6IFtdXG5cdH07XG5cdGlmIChwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbj8uU29ydE9yZGVyKSB7XG5cdFx0cHJlc2VudGF0aW9uVmFyaWFudEFubm90YXRpb24uU29ydE9yZGVyLmZvckVhY2goKGNvbmRpdGlvbikgPT4ge1xuXHRcdFx0Y29uc3QgY29uZGl0aW9uUHJvcGVydHkgPSBjb25kaXRpb24uUHJvcGVydHk7XG5cdFx0XHRpZiAoY29uZGl0aW9uUHJvcGVydHk/LiR0YXJnZXQgIT09IHVuZGVmaW5lZCAmJiAhbm9uU29ydGFibGVQcm9wZXJ0aWVzLmluY2x1ZGVzKGNvbmRpdGlvblByb3BlcnR5LiR0YXJnZXQubmFtZSkpIHtcblx0XHRcdFx0Y29uc3QgaW5mb05hbWUgPSBjb252ZXJ0UHJvcGVydHlQYXRoc1RvSW5mb05hbWVzKFtjb25kaXRpb25Qcm9wZXJ0eV0sIGNvbHVtbnMpWzBdO1xuXHRcdFx0XHRpZiAoaW5mb05hbWUpIHtcblx0XHRcdFx0XHRzb3J0Q29uZGl0aW9ucy5zb3J0ZXJzLnB1c2goe1xuXHRcdFx0XHRcdFx0bmFtZTogaW5mb05hbWUsXG5cdFx0XHRcdFx0XHRkZXNjZW5kaW5nOiAhIWNvbmRpdGlvbi5EZXNjZW5kaW5nXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXHRyZXR1cm4gc29ydENvbmRpdGlvbnMuc29ydGVycy5sZW5ndGggPyBzb3J0Q29uZGl0aW9ucyA6IHVuZGVmaW5lZDtcbn1cbmZ1bmN0aW9uIGdldEluaXRpYWxFeHBhbnNpb25MZXZlbChwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbjogUHJlc2VudGF0aW9uVmFyaWFudFR5cGUgfCB1bmRlZmluZWQpOiBudW1iZXIgfCB1bmRlZmluZWQge1xuXHRpZiAoIXByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uKSB7XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxuXHRjb25zdCBsZXZlbCA9IHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uLkluaXRpYWxFeHBhbnNpb25MZXZlbD8udmFsdWVPZigpO1xuXHRyZXR1cm4gdHlwZW9mIGxldmVsID09PSBcIm51bWJlclwiID8gbGV2ZWwgKyAxIDogdW5kZWZpbmVkO1xufVxuLyoqXG4gKiBDb252ZXJ0cyBhbiBhcnJheSBvZiBwcm9wZXJ0eVBhdGggdG8gYW4gYXJyYXkgb2YgcHJvcGVydHlJbmZvIG5hbWVzLlxuICogQHBhcmFtIHBhdGhzIFRoZSBhcnJheSB0byBiZSBjb252ZXJ0ZWRcbiAqIEBwYXJhbSBjb2x1bW5zIFRoZSBhcnJheSBvZiBwcm9wZXJ0eUluZm9zXG4gKiBAcmV0dXJucyBBbiBhcnJheSBvZiBwcm9wZXJ0eUluZm8gbmFtZXNcbiAqL1xuZnVuY3Rpb24gY29udmVydFByb3BlcnR5UGF0aHNUb0luZm9OYW1lcyhwYXRoczogUHJvcGVydHlQYXRoW10sIGNvbHVtbnM6IFRhYmxlQ29sdW1uW10pOiBzdHJpbmdbXSB7XG5cdGNvbnN0IGluZm9OYW1lczogc3RyaW5nW10gPSBbXTtcblx0bGV0IHByb3BlcnR5SW5mbzogVGFibGVDb2x1bW4gfCB1bmRlZmluZWQsIGFubm90YXRpb25Db2x1bW46IEFubm90YXRpb25UYWJsZUNvbHVtbjtcblx0cGF0aHMuZm9yRWFjaCgoY3VycmVudFBhdGgpID0+IHtcblx0XHRpZiAoY3VycmVudFBhdGg/LnZhbHVlKSB7XG5cdFx0XHRwcm9wZXJ0eUluZm8gPSBjb2x1bW5zLmZpbmQoKGNvbHVtbikgPT4ge1xuXHRcdFx0XHRhbm5vdGF0aW9uQ29sdW1uID0gY29sdW1uIGFzIEFubm90YXRpb25UYWJsZUNvbHVtbjtcblx0XHRcdFx0cmV0dXJuICFhbm5vdGF0aW9uQ29sdW1uLnByb3BlcnR5SW5mb3MgJiYgYW5ub3RhdGlvbkNvbHVtbi5yZWxhdGl2ZVBhdGggPT09IGN1cnJlbnRQYXRoPy52YWx1ZTtcblx0XHRcdH0pO1xuXHRcdFx0aWYgKHByb3BlcnR5SW5mbykge1xuXHRcdFx0XHRpbmZvTmFtZXMucHVzaChwcm9wZXJ0eUluZm8ubmFtZSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9KTtcblx0cmV0dXJuIGluZm9OYW1lcztcbn1cbi8qKlxuICogUmV0dXJucyBhIEpTT04gc3RyaW5nIGNvbnRhaW5pbmcgUHJlc2VudGF0aW9uIFZhcmlhbnQgZ3JvdXAgY29uZGl0aW9ucy5cbiAqIEBwYXJhbSBwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbiBQcmVzZW50YXRpb24gdmFyaWFudCBhbm5vdGF0aW9uXG4gKiBAcGFyYW0gY29sdW1ucyBDb252ZXJ0ZXIgcHJvY2Vzc2VkIHRhYmxlIGNvbHVtbnNcbiAqIEBwYXJhbSB0YWJsZVR5cGUgVGhlIHRhYmxlIHR5cGUuXG4gKiBAcmV0dXJucyBHcm91cCBjb25kaXRpb25zIGZvciBhIFByZXNlbnRhdGlvbiB2YXJpYW50LlxuICovXG5mdW5jdGlvbiBnZXRHcm91cENvbmRpdGlvbnMoXG5cdHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uOiBQcmVzZW50YXRpb25WYXJpYW50VHlwZSB8IHVuZGVmaW5lZCxcblx0Y29sdW1uczogVGFibGVDb2x1bW5bXSxcblx0dGFibGVUeXBlOiBzdHJpbmdcbik6IFRhYmxlR3JvdXBDb25kaXRpb25zIHwgdW5kZWZpbmVkIHtcblx0Y29uc3QgZ3JvdXBDb25kaXRpb25zOiBUYWJsZUdyb3VwQ29uZGl0aW9ucyA9IHtcblx0XHRncm91cExldmVsczogW11cblx0fTtcblx0aWYgKHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uPy5Hcm91cEJ5KSB7XG5cdFx0bGV0IGFHcm91cEJ5ID0gcHJlc2VudGF0aW9uVmFyaWFudEFubm90YXRpb24uR3JvdXBCeTtcblx0XHRpZiAodGFibGVUeXBlID09PSBcIlJlc3BvbnNpdmVUYWJsZVwiKSB7XG5cdFx0XHRhR3JvdXBCeSA9IGFHcm91cEJ5LnNsaWNlKDAsIDEpO1xuXHRcdH1cblx0XHRncm91cENvbmRpdGlvbnMuZ3JvdXBMZXZlbHMgPSBjb252ZXJ0UHJvcGVydHlQYXRoc1RvSW5mb05hbWVzKGFHcm91cEJ5LCBjb2x1bW5zKS5tYXAoKGluZm9OYW1lKSA9PiB7XG5cdFx0XHRyZXR1cm4geyBuYW1lOiBpbmZvTmFtZSB9O1xuXHRcdH0pO1xuXHR9XG5cdHJldHVybiBncm91cENvbmRpdGlvbnMuZ3JvdXBMZXZlbHMubGVuZ3RoID8gZ3JvdXBDb25kaXRpb25zIDogdW5kZWZpbmVkO1xufVxuLyoqXG4gKiBVcGRhdGVzIHRoZSBjb2x1bW4ncyBwcm9wZXJ0eUluZm9zIG9mIGFuIGFuYWx5dGljYWwgdGFibGUgaW50ZWdyYXRpbmcgYWxsIGV4dGVuc2lvbnMgYW5kIGJpbmRpbmctcmVsZXZhbnQgcHJvcGVydHkgaW5mbyBwYXJ0LlxuICogQHBhcmFtIHRhYmxlVmlzdWFsaXphdGlvbiBUaGUgdmlzdWFsaXphdGlvbiB0byBiZSB1cGRhdGVkXG4gKi9cbmZ1bmN0aW9uIF91cGRhdGVQcm9wZXJ0eUluZm9zV2l0aEFnZ3JlZ2F0ZXNEZWZpbml0aW9ucyh0YWJsZVZpc3VhbGl6YXRpb246IFRhYmxlVmlzdWFsaXphdGlvbik6IHZvaWQge1xuXHRjb25zdCByZWxhdGVkQWRkaXRpb25hbFByb3BlcnR5TmFtZU1hcDogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuXHR0YWJsZVZpc3VhbGl6YXRpb24uY29sdW1ucy5mb3JFYWNoKChjb2x1bW4pID0+IHtcblx0XHRjb2x1bW4gPSBjb2x1bW4gYXMgQW5ub3RhdGlvblRhYmxlQ29sdW1uO1xuXHRcdGNvbnN0IHByb3BlcnR5TmFtZUZyb21BbmFseXRpY3NJbmZvID0gX2dldFByb3BlcnR5TmFtZUZyb21BbmFseXRpY3NJbmZvKHRhYmxlVmlzdWFsaXphdGlvbiwgY29sdW1uLm5hbWUpO1xuXHRcdGlmIChwcm9wZXJ0eU5hbWVGcm9tQW5hbHl0aWNzSW5mbykge1xuXHRcdFx0Y29uc3QgYWdncmVnYXRhYmxlUHJvcGVydHlEZWZpbml0aW9uID0gdGFibGVWaXN1YWxpemF0aW9uLmFuYWx5dGljc0V4dGVuc2lvbnMhW3Byb3BlcnR5TmFtZUZyb21BbmFseXRpY3NJbmZvXTtcblx0XHRcdGNvbHVtbi5hZ2dyZWdhdGFibGUgPSAhYWdncmVnYXRhYmxlUHJvcGVydHlEZWZpbml0aW9uLmZyb21Hcm91cGFibGVQcm9wZXJ0eTtcblx0XHRcdGNvbHVtbi5leHRlbnNpb24gPSBhZ2dyZWdhdGFibGVQcm9wZXJ0eURlZmluaXRpb24gPz8ge307XG5cdFx0XHRpZiAoIWNvbHVtbi5pc0dyb3VwYWJsZSAmJiAhY29sdW1uLmFnZ3JlZ2F0YWJsZSkge1xuXHRcdFx0XHQvLyBUaGUgY29sdW1uIGlzIG5laXRoZXIgYWdncmVnYXRhYmxlIG5vciBncm91cGFibGUgLS0+IGl0J3MgYSBoaWRkZW4gY29sdW1uIHRvIGFsbG93IGZpbHRlcmluZyBpbiBQMTNOXG5cdFx0XHRcdC8vIFdlIG5lZWQgdG8gcmVtb3ZlIGFkZGl0aW9uYWxQcm9wZXJ0aWVzLCBhcyBpdCdzIG5vdCBuZWVkZWQgYW5kIGNhdXNlcyBhbiBlcnJvciBpbiB0aGUgTURDIHRhYmxlIGNvZGVcblx0XHRcdFx0ZGVsZXRlIGNvbHVtbi5leHRlbnNpb24uYWRkaXRpb25hbFByb3BlcnRpZXM7XG5cdFx0XHR9XG5cdFx0XHRpZiAoY29sdW1uLmlzR3JvdXBhYmxlICYmIGNvbHVtbi5leHRlbnNpb24uYWRkaXRpb25hbFByb3BlcnRpZXMgJiYgY29sdW1uLmV4dGVuc2lvbi5hZGRpdGlvbmFsUHJvcGVydGllcy5sZW5ndGgpIHtcblx0XHRcdFx0Ly8gRm9yIHRoZSB0aW1lIGJlaW5nLCBwcm9wZXJ0aWVzIHdpdGggY29udGV4dC1kZWZpbmluZyBwcm9wZXJ0aWVzIHNoYWxsIG5vdCBiZSBhbGxvd2VkIGZvciB2aXN1YWwgZ3JvdXBpbmdcblx0XHRcdFx0Ly8gV2UgbmVlZCBhIFVYIGNvbmNlcHQgdG8gc3VwcG9ydCB0aGlzIChhcyB0aGUgZW5kIHVzZXIgd291bGQgbmVlZCB0byBncm91cCBvbiB0aGUgY29udGV4dC1kZWZpbmluZyBwcm9wZXJ0aWVzIGJlZm9yZSBncm91cGluZ1xuXHRcdFx0XHQvLyBvbiB0aGUgcHJvcGVydHkgaXRzZWxmKS5cblx0XHRcdFx0Y29sdW1uLmlzR3JvdXBhYmxlID0gZmFsc2U7XG5cdFx0XHRcdGNvbHVtbi5leHRlbnNpb24udGVjaG5pY2FsbHlHcm91cGFibGUgPSB0cnVlO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRpZiAoY29sdW1uLmFkZGl0aW9uYWxQcm9wZXJ0eUluZm9zPy5sZW5ndGgpIHtcblx0XHRcdGNvbHVtbi5hZGRpdGlvbmFsUHJvcGVydHlJbmZvcy5mb3JFYWNoKChhZGRpdGlvbmFsUHJvcGVydHlJbmZvKSA9PiB7XG5cdFx0XHRcdC8vIENyZWF0ZSBwcm9wZXJ0eUluZm8gZm9yIGVhY2ggYWRkaXRpb25hbCBwcm9wZXJ0eS5cblx0XHRcdFx0Ly8gVGhlIG5ldyBwcm9wZXJ0eSAnbmFtZScgaGFzIGJlZW4gcHJlZml4ZWQgd2l0aCAnUHJvcGVydHlfVGVjaG5pY2FsOjonIGZvciB1bmlxdWVuZXNzIGFuZCBpdCBoYXMgYmVlbiBuYW1lZCB0ZWNobmljYWwgcHJvcGVydHkgYXMgaXQgcmVxdWlyZXMgZGVkaWNhdGVkIE1EQyBhdHRyaWJ1dGVzICh0ZWNobmljYWxseUdyb3VwYWJsZSBhbmQgdGVjaG5pY2FsbHlBZ2dyZWdhdGFibGUpLlxuXHRcdFx0XHRjcmVhdGVUZWNobmljYWxQcm9wZXJ0eShhZGRpdGlvbmFsUHJvcGVydHlJbmZvLCB0YWJsZVZpc3VhbGl6YXRpb24uY29sdW1ucywgcmVsYXRlZEFkZGl0aW9uYWxQcm9wZXJ0eU5hbWVNYXApO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdF91cGRhdGVGb3JUZXh0T25seVByb3BlcnRpZXNXaXRoQ0RQKHRhYmxlVmlzdWFsaXphdGlvbiwgY29sdW1uKTtcblx0fSk7XG5cdHRhYmxlVmlzdWFsaXphdGlvbi5jb2x1bW5zLmZvckVhY2goKGNvbHVtbikgPT4ge1xuXHRcdGNvbHVtbiA9IGNvbHVtbiBhcyBBbm5vdGF0aW9uVGFibGVDb2x1bW47XG5cdFx0aWYgKGNvbHVtbi5hZGRpdGlvbmFsUHJvcGVydHlJbmZvcykge1xuXHRcdFx0Y29sdW1uLmFkZGl0aW9uYWxQcm9wZXJ0eUluZm9zID0gY29sdW1uLmFkZGl0aW9uYWxQcm9wZXJ0eUluZm9zLm1hcChcblx0XHRcdFx0KHByb3BlcnR5SW5mbykgPT4gcmVsYXRlZEFkZGl0aW9uYWxQcm9wZXJ0eU5hbWVNYXBbcHJvcGVydHlJbmZvXSA/PyBwcm9wZXJ0eUluZm9cblx0XHRcdCk7XG5cdFx0XHQvLyBBZGQgYWRkaXRpb25hbCBwcm9wZXJ0aWVzIHRvIHRoZSBjb21wbGV4IHByb3BlcnR5IHVzaW5nIHRoZSBoaWRkZW4gYW5ub3RhdGlvbi5cblx0XHRcdGNvbHVtbi5wcm9wZXJ0eUluZm9zID0gY29sdW1uLnByb3BlcnR5SW5mb3M/LmNvbmNhdChjb2x1bW4uYWRkaXRpb25hbFByb3BlcnR5SW5mb3MpO1xuXHRcdH1cblx0fSk7XG59XG5cbi8qKlxuICogUHJvdmlkZXMgdGhlIHJlZmVyZW5jZWQgcHJvcGVydHkgbmFtZSBmcm9tIHRoZSBhbmFseXRpY3MgZGF0YVxuICogQHBhcmFtIHRhYmxlVmlzdWFsaXphdGlvbiBUaGUgdmlzdWFsaXphdGlvbiB0byBiZSBhbmFseXplZFxuICogQHBhcmFtIG5hbWUgVGhlIHByb3BlcnR5IG5hbWVcbiAqIEByZXR1cm5zIFRoZSBwcm9wZXJ0eSBuYW1lIGZyb20gdGhlIGFuYWx5dGljcyBkYXRhXG4gKi9cblxuZnVuY3Rpb24gX2dldFByb3BlcnR5TmFtZUZyb21BbmFseXRpY3NJbmZvKHRhYmxlVmlzdWFsaXphdGlvbjogVGFibGVWaXN1YWxpemF0aW9uLCBuYW1lOiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRyZXR1cm4gT2JqZWN0LmtleXModGFibGVWaXN1YWxpemF0aW9uLmFuYWx5dGljc0V4dGVuc2lvbnMhKS5maW5kKChhZ2dyZWdhdGUpID0+IGFnZ3JlZ2F0ZSA9PT0gbmFtZSk7XG59XG5cbi8qKlxuICogVXBkYXRlcyB0aGUgY29sdW1uJ3MgcHJvcGVydHlJbmZvcyBvZiBhIGNvbHVtbiBhbm5vdGF0ZWQgd2l0aCB0ZXh0IG9ubHkgb24gYW4gYW5hbHl0aWNhbCB0YWJsZS5cbiAqIFRoZSByZWZlcmVuY2VkIHRleHQgcHJvcGVydHkgY291bGQgZGVmaW5lIGNvbnRleHQtZGVmaW5pbmcgcHJvcGVydGllcyB0byBiZSBpbmNsdWRlZCBpbnRvIHRoZSBjb2x1bW4ncyBwcm9wZXJ0eUluZm9zLlxuICogQHBhcmFtIHRhYmxlVmlzdWFsaXphdGlvbiBUaGUgdmlzdWFsaXphdGlvbiB0byBiZSBhbmFseXplZFxuICogQHBhcmFtIGNvbHVtbiBUaGUgY29sdW1uIGNvbnRhaW5pbmcgdGhlIFwidGV4dEFycmFuZ2VtZW50XCIgb2JqZWN0IHdoZW4gcHJlc2VudFxuICovXG5mdW5jdGlvbiBfdXBkYXRlRm9yVGV4dE9ubHlQcm9wZXJ0aWVzV2l0aENEUCh0YWJsZVZpc3VhbGl6YXRpb246IFRhYmxlVmlzdWFsaXphdGlvbiwgY29sdW1uOiBBbm5vdGF0aW9uVGFibGVDb2x1bW4pOiB2b2lkIHtcblx0Ly8gQ3VycmVudGx5IGEgY29sdW1uIHJlZmVyZW5jaW5nIGEgdGV4dCBvbmx5IHByb3BlcnR5IG9ubHkgY29udGFpbnMgdGhlIHRleHQgcHJvcGVydHkgaW50byBpdHMgcHJvcGVydHlJbmZvcy5cblx0Ly8gUHJvcGVydGllcyByZWZlcmVuY2luZyBjb250ZXh0LWRlZmluaW5nIHByb3BlcnRpZXMgKENEUCkgYXJlbid0IGFsbG93ZWQgZm9yIGdyb3VwaW5nLiBUaGlzIG5lZWQgdG8gY2hhbmdlIGZvciB0ZXh0IG9ubHkgY29sdW1ucywgYXMgaW4gY29tbW9uIGNhc2VzLCB0ZXh0IHByb3BlcnRpZXMgcmVmZXJlbmNlIHRoZWlyIHZhbHVlIHByb3BlcnRpZXMgaW50byB0aGVpciBDRFBzLlxuXHQvLyBTbywgd2Ugbm93IGluY2x1ZGUgdGhlIHZhbHVlIHByb3BlcnR5IGludG8gdGhlIHByb3BlcnR5SW5mb3Mgb2YgdGhlIGNvbHVtbiB0byBhbGxvdyB0aGUgZ3JvdXBpbmcgb24gdGhlIHByb3BlcnR5IHZhbHVlLlxuXHRpZiAoY29sdW1uLnRleHRBcnJhbmdlbWVudD8ubW9kZSA9PT0gXCJEZXNjcmlwdGlvblwiICYmIGNvbHVtbi50ZXh0QXJyYW5nZW1lbnQudGV4dFByb3BlcnR5KSB7XG5cdFx0Y29uc3QgYW5hbHl0aWNzSW5mb1Byb3BlcnR5TmFtZUZvckRlc2MgPSBfZ2V0UHJvcGVydHlOYW1lRnJvbUFuYWx5dGljc0luZm8odGFibGVWaXN1YWxpemF0aW9uLCBjb2x1bW4udGV4dEFycmFuZ2VtZW50LnRleHRQcm9wZXJ0eSk7XG5cdFx0aWYgKGFuYWx5dGljc0luZm9Qcm9wZXJ0eU5hbWVGb3JEZXNjKSB7XG5cdFx0XHRjb25zdCBhZ2dyZWdhdGFibGVQcm9wZXJ0eURlZmluaXRpb24gPSB0YWJsZVZpc3VhbGl6YXRpb24uYW5hbHl0aWNzRXh0ZW5zaW9ucyFbYW5hbHl0aWNzSW5mb1Byb3BlcnR5TmFtZUZvckRlc2NdO1xuXHRcdFx0Ly8gV2UgbmVlZCB0byBtYWtlIHN1cmUgdGhlIHRleHQgcHJvcGVydHkgaGFzIENEUCBwcm9wZXJ0aWVzIGRlZmluZWQgYW5kIHRoZSB2YWx1ZSBwcm9wZXJ0eSBpcyBwYXJ0IG9mIHRoZXNlIHByb3BlcnRpZXMuXG5cdFx0XHRpZiAoXG5cdFx0XHRcdGFnZ3JlZ2F0YWJsZVByb3BlcnR5RGVmaW5pdGlvbi5hZGRpdGlvbmFsUHJvcGVydGllcz8ubGVuZ3RoICYmXG5cdFx0XHRcdGFnZ3JlZ2F0YWJsZVByb3BlcnR5RGVmaW5pdGlvbi5hZGRpdGlvbmFsUHJvcGVydGllcy5pbmNsdWRlcyhjb2x1bW4ubmFtZSlcblx0XHRcdCkge1xuXHRcdFx0XHQvLyBUaGUgcHJvcGVydHkgdmFsdWUgKHNpbmdsZSBwcm9wZXJ0eSkgZXhpc3RzIGFscmVhZHkgb24gdGhlIGxpc3Qgb2YgY29sdW1ucyBmcm9tIHRoZSB0YWJsZSBidXQgaXQgd2FzIG9ubHkgY3JlYXRlZCBmb3IgZmlsdGVyaW5nIHB1cnBvc2VzIGluIFAxM24gYW5kIG5vdCBsaW5rZWQgdG8gdGhlIGNvbHVtbiB3aXRoIHRoZSB0ZXh0IGFycmFuZ2VtZW50ICNUZXh0T25seSxcblx0XHRcdFx0Ly8gdGhlcmVmb3JlIG5vdCBwcm9wb3NlZCBhcyBhIGRlZmF1bHQgdmFsdWUgZm9yIGdyb3VwaW5nIHRoZSBjb2x1bW4gbWVudS4gTm93IGl0J2xsIGJlIGluY2x1ZGVkIGludG8gdGhlIHByb3BlcnR5SW5mb3Mgb2YgdGhlIGNvbHVtbiB0byBhbGxvdyB0aGUgZGVmYXVsdCBncm91cGluZyBvbiB0aGlzIHZhbHVlIHByb3BlcnR5LlxuXHRcdFx0XHRjb25zdCBjb2x1bW5XaXRoVGV4dE9ubHkgPSAodGFibGVWaXN1YWxpemF0aW9uLmNvbHVtbnMgYXMgQW5ub3RhdGlvblRhYmxlQ29sdW1uW10pLmZpbmQoXG5cdFx0XHRcdFx0KHRleHRPbmx5Q29sdW1uKSA9PiB0ZXh0T25seUNvbHVtbi5yZWxhdGl2ZVBhdGggPT09IGNvbHVtbi5yZWxhdGl2ZVBhdGggJiYgdGV4dE9ubHlDb2x1bW4ucHJvcGVydHlJbmZvc1xuXHRcdFx0XHQpO1xuXHRcdFx0XHRjb2x1bW5XaXRoVGV4dE9ubHk/LnByb3BlcnR5SW5mb3M/LnB1c2goY29sdW1uLm5hbWUpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxufVxuXG4vKipcbiAqIFJldHVybnMgYSBKU09OIHN0cmluZyBjb250YWluaW5nIFByZXNlbnRhdGlvbiBWYXJpYW50IGFnZ3JlZ2F0ZSBjb25kaXRpb25zLlxuICogQHBhcmFtIHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uIFByZXNlbnRhdGlvbiB2YXJpYW50IGFubm90YXRpb25cbiAqIEBwYXJhbSBjb2x1bW5zIENvbnZlcnRlciBwcm9jZXNzZWQgdGFibGUgY29sdW1uc1xuICogQHBhcmFtIGV4dGVuc2lvbkluZm9NYXBcbiAqIEByZXR1cm5zIEdyb3VwIGNvbmRpdGlvbnMgZm9yIGEgUHJlc2VudGF0aW9uIHZhcmlhbnQuXG4gKi9cbmZ1bmN0aW9uIGdldEFnZ3JlZ2F0ZUNvbmRpdGlvbnMoXG5cdHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uOiBQcmVzZW50YXRpb25WYXJpYW50VHlwZSB8IHVuZGVmaW5lZCxcblx0Y29sdW1uczogVGFibGVDb2x1bW5bXSxcblx0ZXh0ZW5zaW9uSW5mb01hcDogUmVjb3JkPHN0cmluZywgSW50ZXJuYWxFeHRlbnNpb25Gb3JBbmFseXRpY3M+XG4pOiBUYWJsZUFnZ3JlZ2F0ZUNvbmRpdGlvbnMgfCB1bmRlZmluZWQge1xuXHRjb25zdCBhZ2dyZWdhdGVDb25kaXRpb25zOiBUYWJsZUFnZ3JlZ2F0ZUNvbmRpdGlvbnMgPSB7fTtcblx0aWYgKHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uPy5Ub3RhbCkge1xuXHRcdGNvbnN0IGFUb3RhbHMgPSBwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbi5Ub3RhbDtcblx0XHRjb252ZXJ0UHJvcGVydHlQYXRoc1RvSW5mb05hbWVzKGFUb3RhbHMsIGNvbHVtbnMpLmZvckVhY2goKGluZm9OYW1lKSA9PiB7XG5cdFx0XHRhZ2dyZWdhdGVDb25kaXRpb25zW2luZm9OYW1lXSA9IHt9O1xuXHRcdH0pO1xuXHR9IGVsc2Uge1xuXHRcdGZvciAoY29uc3Qga2V5IGluIGV4dGVuc2lvbkluZm9NYXApIHtcblx0XHRcdGlmICghZXh0ZW5zaW9uSW5mb01hcFtrZXldLmZyb21Hcm91cGFibGVQcm9wZXJ0eSkge1xuXHRcdFx0XHRhZ2dyZWdhdGVDb25kaXRpb25zW2tleV0gPSB7fTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblx0cmV0dXJuIE9iamVjdC5rZXlzKGFnZ3JlZ2F0ZUNvbmRpdGlvbnMpLmxlbmd0aCA/IGFnZ3JlZ2F0ZUNvbmRpdGlvbnMgOiB1bmRlZmluZWQ7XG59XG5leHBvcnQgdHlwZSBTdGFuZGFyZEFjdGlvbnNDb25maWd1cmF0aW9uID0ge1xuXHRjcmVhdGlvbkJlaGF2aW91cjogVGFibGVBbm5vdGF0aW9uQ29uZmlndXJhdGlvbltcImNyZWF0ZVwiXTtcblx0Y3V0QnV0dG9uVmlzaWJpbGl0eUV4cHJlc3Npb246IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPjtcblx0ZGVsZXRlQnV0dG9uVmlzaWJpbGl0eUV4cHJlc3Npb246IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPjtcblx0bWFzc0VkaXRCdXR0b25WaXNpYmlsaXR5RXhwcmVzc2lvbjogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+O1xuXHRpc0luc2VydFVwZGF0ZUFjdGlvbnNUZW1wbGF0ZWQ6IGJvb2xlYW47XG5cdHN0YW5kYXJkQWN0aW9uczoge1xuXHRcdGNyZWF0ZTogU3RhbmRhcmRBY3Rpb247XG5cdFx0ZGVsZXRlOiBTdGFuZGFyZEFjdGlvbjtcblx0XHRwYXN0ZTogU3RhbmRhcmRBY3Rpb247XG5cdFx0bWFzc0VkaXQ6IFN0YW5kYXJkQWN0aW9uO1xuXHRcdGluc2lnaHRzOiBTdGFuZGFyZEFjdGlvbjtcblx0XHRjcmVhdGlvblJvdzogU3RhbmRhcmRBY3Rpb247XG5cdFx0Y3V0OiBTdGFuZGFyZEFjdGlvbjtcblx0XHRjb3B5OiBTdGFuZGFyZEFjdGlvbjtcblx0XHRtb3ZlVXA/OiBTdGFuZGFyZEFjdGlvbjtcblx0XHRtb3ZlRG93bj86IFN0YW5kYXJkQWN0aW9uO1xuXHR9O1xufTtcbi8qKlxuICogQ2FsY3VsYXRlcyB0aGUgc3RhbmRhcmQgYWN0aW9ucyBhbmQgYWRqYWNlbnQgcHJvcGVydGllcyB0aGF0IGFyZSBuZWVkZWQgaW4gdGhlIGZ1cnRoZXIgY29udmVyc2lvbiBwcm9jZXNzLlxuICogQHBhcmFtIGxpbmVJdGVtQW5ub3RhdGlvbiBDb2xsZWN0aW9uIG9mIGRhdGEgZmllbGRzIHVzZWQgZm9yIHJlcHJlc2VudGF0aW9uIGluIGEgdGFibGUgb3IgbGlzdFxuICogQHBhcmFtIHZpc3VhbGl6YXRpb25QYXRoIFRoZSB2aXN1YWxpemF0aW9uIHBhdGhcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBpbnN0YW5jZSBvZiB0aGUgY29udmVydGVyIGNvbnRleHRcbiAqIEBwYXJhbSB0YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbiBUaGUgdGFibGUgbWFuaWZlc3QgY29uZmlndXJhdGlvblxuICogQHBhcmFtIG5hdmlnYXRpb25TZXR0aW5ncyBUaGUgbmF2aWdhdGlvbiB0YXJnZXQgbWFuaWZlc3QgY29uZmlndXJhdGlvblxuICogQHJldHVybnMgU3RhbmRhcmQgYWN0aW9ucyBhbmQgY29ubmVjdGVkIHByb3BlcnRpZXNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFN0YW5kYXJkQWN0aW9uc0NvbmZpZ3VyYXRpb24oXG5cdGxpbmVJdGVtQW5ub3RhdGlvbjogTGluZUl0ZW0gfCB1bmRlZmluZWQsXG5cdHZpc3VhbGl6YXRpb25QYXRoOiBzdHJpbmcsXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pixcblx0dGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb246IFRhYmxlQ29udHJvbENvbmZpZ3VyYXRpb24sXG5cdG5hdmlnYXRpb25TZXR0aW5nczogTmF2aWdhdGlvblNldHRpbmdzQ29uZmlndXJhdGlvblxuKTogU3RhbmRhcmRBY3Rpb25zQ29uZmlndXJhdGlvbiB7XG5cdGNvbnN0IGNyZWF0aW9uQmVoYXZpb3VyID0gX2dldENyZWF0aW9uQmVoYXZpb3VyKFxuXHRcdGxpbmVJdGVtQW5ub3RhdGlvbixcblx0XHR0YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbixcblx0XHRjb252ZXJ0ZXJDb250ZXh0LFxuXHRcdG5hdmlnYXRpb25TZXR0aW5ncyxcblx0XHR2aXN1YWxpemF0aW9uUGF0aFxuXHQpO1xuXHRjb25zdCBzdGFuZGFyZEFjdGlvbnNDb250ZXh0ID0gZ2VuZXJhdGVTdGFuZGFyZEFjdGlvbnNDb250ZXh0KFxuXHRcdGNvbnZlcnRlckNvbnRleHQsXG5cdFx0Y3JlYXRpb25CZWhhdmlvdXIubW9kZSBhcyBDcmVhdGlvbk1vZGUsXG5cdFx0dGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb25cblx0KTtcblx0Y29uc3QgY3V0QnV0dG9uVmlzaWJpbGl0eUV4cHJlc3Npb24gPSBnZXRDdXRWaXNpYmlsaXR5KGNvbnZlcnRlckNvbnRleHQsIHN0YW5kYXJkQWN0aW9uc0NvbnRleHQpO1xuXHRjb25zdCBkZWxldGVCdXR0b25WaXNpYmlsaXR5RXhwcmVzc2lvbiA9IGdldERlbGV0ZVZpc2liaWxpdHkoY29udmVydGVyQ29udGV4dCwgc3RhbmRhcmRBY3Rpb25zQ29udGV4dCk7XG5cdGNvbnN0IG1hc3NFZGl0QnV0dG9uVmlzaWJpbGl0eUV4cHJlc3Npb24gPSBnZXRNYXNzRWRpdFZpc2liaWxpdHkoY29udmVydGVyQ29udGV4dCwgc3RhbmRhcmRBY3Rpb25zQ29udGV4dCk7XG5cdGNvbnN0IGlzSW5zZXJ0VXBkYXRlQWN0aW9uc1RlbXBsYXRlZCA9IGdldEluc2VydFVwZGF0ZUFjdGlvbnNUZW1wbGF0aW5nKFxuXHRcdHN0YW5kYXJkQWN0aW9uc0NvbnRleHQsXG5cdFx0aXNEcmFmdE9yU3RpY2t5U3VwcG9ydGVkKGNvbnZlcnRlckNvbnRleHQpXG5cdCk7XG5cdGNvbnN0IHN0YW5kYXJkQWN0aW9ucyA9IHtcblx0XHRjdXQ6IGdldFN0YW5kYXJkQWN0aW9uQ3V0KGNvbnZlcnRlckNvbnRleHQsIHN0YW5kYXJkQWN0aW9uc0NvbnRleHQpLFxuXHRcdGNvcHk6IGdldFN0YW5kYXJkQWN0aW9uQ29weShjb252ZXJ0ZXJDb250ZXh0LCBzdGFuZGFyZEFjdGlvbnNDb250ZXh0KSxcblx0XHRjcmVhdGU6IGdldFN0YW5kYXJkQWN0aW9uQ3JlYXRlKGNvbnZlcnRlckNvbnRleHQsIHN0YW5kYXJkQWN0aW9uc0NvbnRleHQpLFxuXHRcdGRlbGV0ZTogZ2V0U3RhbmRhcmRBY3Rpb25EZWxldGUoY29udmVydGVyQ29udGV4dCwgc3RhbmRhcmRBY3Rpb25zQ29udGV4dCksXG5cdFx0cGFzdGU6IGdldFN0YW5kYXJkQWN0aW9uUGFzdGUoY29udmVydGVyQ29udGV4dCwgc3RhbmRhcmRBY3Rpb25zQ29udGV4dCwgaXNJbnNlcnRVcGRhdGVBY3Rpb25zVGVtcGxhdGVkKSxcblx0XHRtYXNzRWRpdDogZ2V0U3RhbmRhcmRBY3Rpb25NYXNzRWRpdChjb252ZXJ0ZXJDb250ZXh0LCBzdGFuZGFyZEFjdGlvbnNDb250ZXh0KSxcblx0XHRpbnNpZ2h0czogZ2V0U3RhbmRhcmRBY3Rpb25JbnNpZ2h0cyhjb252ZXJ0ZXJDb250ZXh0LCBzdGFuZGFyZEFjdGlvbnNDb250ZXh0LCB2aXN1YWxpemF0aW9uUGF0aCksXG5cdFx0Y3JlYXRpb25Sb3c6IGdldENyZWF0aW9uUm93KGNvbnZlcnRlckNvbnRleHQsIHN0YW5kYXJkQWN0aW9uc0NvbnRleHQpXG5cdH07XG5cdGNvbnN0IGNvbmZpZ3VyYXRpb246IFN0YW5kYXJkQWN0aW9uc0NvbmZpZ3VyYXRpb24gPSB7XG5cdFx0Y3JlYXRpb25CZWhhdmlvdXIsXG5cdFx0Y3V0QnV0dG9uVmlzaWJpbGl0eUV4cHJlc3Npb24sXG5cdFx0ZGVsZXRlQnV0dG9uVmlzaWJpbGl0eUV4cHJlc3Npb24sXG5cdFx0bWFzc0VkaXRCdXR0b25WaXNpYmlsaXR5RXhwcmVzc2lvbixcblx0XHRpc0luc2VydFVwZGF0ZUFjdGlvbnNUZW1wbGF0ZWQsXG5cdFx0c3RhbmRhcmRBY3Rpb25zXG5cdH07XG5cblx0aWYgKHN0YW5kYXJkQWN0aW9uc0NvbnRleHQudGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24udHlwZSA9PT0gXCJUcmVlVGFibGVcIikge1xuXHRcdGNvbmZpZ3VyYXRpb24uc3RhbmRhcmRBY3Rpb25zLm1vdmVVcCA9IGdldFN0YW5kYXJkQWN0aW9uTW92ZVVwRG93bihjb252ZXJ0ZXJDb250ZXh0LCBzdGFuZGFyZEFjdGlvbnNDb250ZXh0LCB0cnVlKTtcblx0XHRjb25maWd1cmF0aW9uLnN0YW5kYXJkQWN0aW9ucy5tb3ZlRG93biA9IGdldFN0YW5kYXJkQWN0aW9uTW92ZVVwRG93bihjb252ZXJ0ZXJDb250ZXh0LCBzdGFuZGFyZEFjdGlvbnNDb250ZXh0LCBmYWxzZSk7XG5cdH1cblxuXHRyZXR1cm4gY29uZmlndXJhdGlvbjtcbn1cbmV4cG9ydCBmdW5jdGlvbiBnZXRUYWJsZUFubm90YXRpb25Db25maWd1cmF0aW9uKFxuXHRsaW5lSXRlbUFubm90YXRpb246IExpbmVJdGVtIHwgdW5kZWZpbmVkLFxuXHR2aXN1YWxpemF0aW9uUGF0aDogc3RyaW5nLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sXG5cdHRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uOiBUYWJsZUNvbnRyb2xDb25maWd1cmF0aW9uLFxuXHRjb2x1bW5zOiBUYWJsZUNvbHVtbltdLFxuXHRuYXZpZ2F0aW9uU2V0dGluZ3M6IE5hdmlnYXRpb25TZXR0aW5nc0NvbmZpZ3VyYXRpb24sXG5cdHN0YW5kYXJkQWN0aW9uc0NvbmZpZ3VyYXRpb246IFN0YW5kYXJkQWN0aW9uc0NvbmZpZ3VyYXRpb24sXG5cdHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uPzogUHJlc2VudGF0aW9uVmFyaWFudFR5cGVcbik6IFRhYmxlQW5ub3RhdGlvbkNvbmZpZ3VyYXRpb24ge1xuXHQvLyBOZWVkIHRvIGdldCB0aGUgdGFyZ2V0XG5cdGNvbnN0IHRhYmxlTWFuaWZlc3RTZXR0aW5nczogVGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24gPSBjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0Q29udHJvbENvbmZpZ3VyYXRpb24odmlzdWFsaXphdGlvblBhdGgpO1xuXHRjb25zdCB7IG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGggfSA9IHNwbGl0UGF0aCh2aXN1YWxpemF0aW9uUGF0aCk7XG5cdGNvbnN0IHR5cGVOYW1lUGx1cmFsID0gY29udmVydGVyQ29udGV4dC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCkudGFyZ2V0RW50aXR5VHlwZS5hbm5vdGF0aW9ucz8uVUk/LkhlYWRlckluZm8/LlR5cGVOYW1lUGx1cmFsO1xuXHRjb25zdCB0aXRsZSA9IHR5cGVOYW1lUGx1cmFsICYmIGNvbXBpbGVFeHByZXNzaW9uKGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbih0eXBlTmFtZVBsdXJhbCkpO1xuXHRjb25zdCBlbnRpdHlTZXQgPSBjb252ZXJ0ZXJDb250ZXh0LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKS50YXJnZXRFbnRpdHlTZXQ7XG5cdGNvbnN0IHBhZ2VNYW5pZmVzdFNldHRpbmdzOiBNYW5pZmVzdFdyYXBwZXIgPSBjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0V3JhcHBlcigpO1xuXHRjb25zdCBoYXNBYnNvbHV0ZVBhdGggPSBuYXZpZ2F0aW9uUHJvcGVydHlQYXRoLmxlbmd0aCA9PT0gMDtcblx0Y29uc3QgcDEzbk1vZGUgPSBnZXRQMTNuTW9kZSh2aXN1YWxpemF0aW9uUGF0aCwgY29udmVydGVyQ29udGV4dCwgdGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24pO1xuXHRjb25zdCBpZCA9IG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGggPyBnZXRUYWJsZUlEKHZpc3VhbGl6YXRpb25QYXRoKSA6IGdldFRhYmxlSUQoY29udmVydGVyQ29udGV4dC5nZXRDb250ZXh0UGF0aCgpLCBcIkxpbmVJdGVtXCIpO1xuXHRjb25zdCB0YXJnZXRDYXBhYmlsaXRpZXMgPSBnZXRDYXBhYmlsaXR5UmVzdHJpY3Rpb24oY29udmVydGVyQ29udGV4dCk7XG5cdGNvbnN0IG5hdmlnYXRpb25UYXJnZXRQYXRoID0gZ2V0TmF2aWdhdGlvblRhcmdldFBhdGgoY29udmVydGVyQ29udGV4dCwgbmF2aWdhdGlvblByb3BlcnR5UGF0aCk7XG5cdGNvbnN0IHNlbGVjdGlvbk1vZGUgPSBnZXRTZWxlY3Rpb25Nb2RlKFxuXHRcdGxpbmVJdGVtQW5ub3RhdGlvbixcblx0XHR2aXN1YWxpemF0aW9uUGF0aCxcblx0XHRjb252ZXJ0ZXJDb250ZXh0LFxuXHRcdGhhc0Fic29sdXRlUGF0aCxcblx0XHR0YXJnZXRDYXBhYmlsaXRpZXMsXG5cdFx0c3RhbmRhcmRBY3Rpb25zQ29uZmlndXJhdGlvbi5kZWxldGVCdXR0b25WaXNpYmlsaXR5RXhwcmVzc2lvbixcblx0XHRzdGFuZGFyZEFjdGlvbnNDb25maWd1cmF0aW9uLm1hc3NFZGl0QnV0dG9uVmlzaWJpbGl0eUV4cHJlc3Npb24sXG5cdFx0c3RhbmRhcmRBY3Rpb25zQ29uZmlndXJhdGlvbi5jdXRCdXR0b25WaXNpYmlsaXR5RXhwcmVzc2lvblxuXHQpO1xuXHRsZXQgdGhyZXNob2xkID0gbmF2aWdhdGlvblByb3BlcnR5UGF0aCA/IDEwIDogMzA7XG5cdGlmIChwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbj8uTWF4SXRlbXMpIHtcblx0XHR0aHJlc2hvbGQgPSBwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbi5NYXhJdGVtcy52YWx1ZU9mKCk7XG5cdH0gZWxzZSBpZiAodGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24udHlwZSA9PT0gXCJUcmVlVGFibGVcIikge1xuXHRcdC8vIFRvIG1ha2Ugc2Nyb2xsaW5nIHNtb290aCwgd2Ugc2V0IHRoZSB0aHJlc2hvbGQgdmFsdWUgaGlnaGVyIGZvciB0cmVlIHRhYmxlc1xuXHRcdHRocmVzaG9sZCA9IDIwMDtcblx0fSBlbHNlIGlmICh0YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbi50eXBlID09PSBcIkdyaWRUYWJsZVwiIHx8IHRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uLnR5cGUgPT09IFwiQW5hbHl0aWNhbFRhYmxlXCIpIHtcblx0XHR0aHJlc2hvbGQgPSAxMDA7XG5cdH1cblx0Y29uc3QgdmFyaWFudE1hbmFnZW1lbnQ6IFZhcmlhbnRNYW5hZ2VtZW50VHlwZSA9IHBhZ2VNYW5pZmVzdFNldHRpbmdzLmdldFZhcmlhbnRNYW5hZ2VtZW50KCk7XG5cdGNvbnN0IGlzU2VhcmNoYWJsZSA9IGlzUGF0aFNlYXJjaGFibGUoY29udmVydGVyQ29udGV4dC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCkpO1xuXHRyZXR1cm4ge1xuXHRcdGlkOiBpZCxcblx0XHRhcGlJZDogZ2VuZXJhdGUoW2lkLCBcIlRhYmxlXCJdKSxcblx0XHRlbnRpdHlOYW1lOiBlbnRpdHlTZXQgPyBlbnRpdHlTZXQubmFtZSA6IFwiXCIsXG5cdFx0ZW50aXR5VHlwZU5hbWU6IGVudGl0eVNldCAmJiBlbnRpdHlTZXQuZW50aXR5VHlwZSA/IGVudGl0eVNldC5lbnRpdHlUeXBlLm5hbWUgOiBcIlwiLFxuXHRcdGNvbGxlY3Rpb246IGdldFRhcmdldE9iamVjdFBhdGgoY29udmVydGVyQ29udGV4dC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCkpLFxuXHRcdG5hdmlnYXRpb25QYXRoOiBuYXZpZ2F0aW9uUHJvcGVydHlQYXRoLFxuXHRcdHJvdzogX2dldFJvd0NvbmZpZ3VyYXRpb25Qcm9wZXJ0eShcblx0XHRcdGxpbmVJdGVtQW5ub3RhdGlvbixcblx0XHRcdGNvbnZlcnRlckNvbnRleHQsXG5cdFx0XHRuYXZpZ2F0aW9uU2V0dGluZ3MsXG5cdFx0XHRuYXZpZ2F0aW9uVGFyZ2V0UGF0aCxcblx0XHRcdHRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uLnR5cGUsXG5cdFx0XHR0YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbi5hbmFseXRpY2FsQ29uZmlndXJhdGlvbj8uYWdncmVnYXRpb25PbkxlYWZMZXZlbFxuXHRcdCksXG5cdFx0cDEzbk1vZGUsXG5cdFx0aXNJbnNlcnRVcGRhdGVBY3Rpb25zVGVtcGxhdGVkOiBzdGFuZGFyZEFjdGlvbnNDb25maWd1cmF0aW9uLmlzSW5zZXJ0VXBkYXRlQWN0aW9uc1RlbXBsYXRlZCxcblx0XHR1cGRhdGFibGVQcm9wZXJ0eVBhdGg6IGdldEN1cnJlbnRFbnRpdHlTZXRVcGRhdGFibGVQYXRoKGNvbnZlcnRlckNvbnRleHQpLFxuXHRcdGRpc3BsYXlNb2RlOiBpc0luRGlzcGxheU1vZGUoY29udmVydGVyQ29udGV4dCwgdHJ1ZSksXG5cdFx0Y3JlYXRlOiBzdGFuZGFyZEFjdGlvbnNDb25maWd1cmF0aW9uLmNyZWF0aW9uQmVoYXZpb3VyLFxuXHRcdHNlbGVjdGlvbk1vZGU6IHNlbGVjdGlvbk1vZGUsXG5cdFx0dmFyaWFudE1hbmFnZW1lbnQ6IHZhcmlhbnRNYW5hZ2VtZW50ID09PSBcIkNvbnRyb2xcIiAmJiAhcDEzbk1vZGUgPyBWYXJpYW50TWFuYWdlbWVudFR5cGUuTm9uZSA6IHZhcmlhbnRNYW5hZ2VtZW50LFxuXHRcdHRocmVzaG9sZDogdGhyZXNob2xkLFxuXHRcdHNvcnRDb25kaXRpb25zOiBnZXRTb3J0Q29uZGl0aW9ucyhjb252ZXJ0ZXJDb250ZXh0LCBwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbiwgY29sdW1ucyksXG5cdFx0dGl0bGU6IHRpdGxlLFxuXHRcdHNlYXJjaGFibGU6XG5cdFx0XHR0YWJsZU1hbmlmZXN0U2V0dGluZ3MudGFibGVTZXR0aW5ncz8uaXNTZWFyY2hhYmxlID09PSBmYWxzZVxuXHRcdFx0XHQ/IGZhbHNlXG5cdFx0XHRcdDogdGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24udHlwZSAhPT0gXCJBbmFseXRpY2FsVGFibGVcIiAmJiAhKGlzQ29uc3RhbnQoaXNTZWFyY2hhYmxlKSAmJiBpc1NlYXJjaGFibGUudmFsdWUgPT09IGZhbHNlKSxcblx0XHRpbml0aWFsRXhwYW5zaW9uTGV2ZWw6IGdldEluaXRpYWxFeHBhbnNpb25MZXZlbChwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbiksXG5cdFx0cmVxdWlyZWRQcm9wZXJ0aWVzOiBnZXRSZXF1aXJlZFByb3BlcnRpZXMoY29udmVydGVyQ29udGV4dClcblx0XHRcdC5maWx0ZXIoKHByb3BlcnR5KSA9PiBwcm9wZXJ0eT8uJHRhcmdldD8udHlwZSAhPT0gXCJFZG0uQm9vbGVhblwiKVxuXHRcdFx0Lm1hcCgocHJvcGVydHkpID0+IHByb3BlcnR5LnZhbHVlKVxuXHR9O1xufVxuXG4vKipcbiAqIFNwbGl0cyB0aGUgdmlzdWFsaXphdGlvbiBwYXRoIGludG8gbmF2aWdhdGlvbiBwcm9wZXJ0eSBwYXRoIGFuZCBhbm5vdGF0aW9uLlxuICogQHBhcmFtIHZpc3VhbGl6YXRpb25QYXRoXG4gKiBAcmV0dXJucyBUaGUgc3BsaXQgcGF0aFxuICovXG5leHBvcnQgZnVuY3Rpb24gc3BsaXRQYXRoKHZpc3VhbGl6YXRpb25QYXRoOiBzdHJpbmcpOiB7IG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGg6IHN0cmluZzsgYW5ub3RhdGlvblBhdGg6IHN0cmluZyB9IHtcblx0Y29uc3QgW3RhcmdldE5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgsIGFubm90YXRpb25QYXRoXSA9IHZpc3VhbGl6YXRpb25QYXRoLnNwbGl0KFwiQFwiKTtcblx0bGV0IG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGggPSB0YXJnZXROYXZpZ2F0aW9uUHJvcGVydHlQYXRoO1xuXHRpZiAobmF2aWdhdGlvblByb3BlcnR5UGF0aC5sYXN0SW5kZXhPZihcIi9cIikgPT09IG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgubGVuZ3RoIC0gMSkge1xuXHRcdC8vIERyb3AgdHJhaWxpbmcgc2xhc2hcblx0XHRuYXZpZ2F0aW9uUHJvcGVydHlQYXRoID0gbmF2aWdhdGlvblByb3BlcnR5UGF0aC5zdWJzdHJpbmcoMCwgbmF2aWdhdGlvblByb3BlcnR5UGF0aC5sZW5ndGggLSAxKTtcblx0fVxuXHRyZXR1cm4geyBuYXZpZ2F0aW9uUHJvcGVydHlQYXRoLCBhbm5vdGF0aW9uUGF0aCB9O1xufVxuZXhwb3J0IGZ1bmN0aW9uIGdldFNlbGVjdGlvblZhcmlhbnRDb25maWd1cmF0aW9uKFxuXHRzZWxlY3Rpb25WYXJpYW50UGF0aDogc3RyaW5nLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD5cbik6IFNlbGVjdGlvblZhcmlhbnRDb25maWd1cmF0aW9uIHwgdW5kZWZpbmVkIHtcblx0Y29uc3QgcmVzb2x2ZWRUYXJnZXQgPSBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGVBbm5vdGF0aW9uKHNlbGVjdGlvblZhcmlhbnRQYXRoKTtcblx0Y29uc3Qgc2VsZWN0aW9uOiBTZWxlY3Rpb25WYXJpYW50ID0gcmVzb2x2ZWRUYXJnZXQuYW5ub3RhdGlvbiBhcyBTZWxlY3Rpb25WYXJpYW50O1xuXHRpZiAoc2VsZWN0aW9uKSB7XG5cdFx0Y29uc3QgcHJvcGVydHlOYW1lczogc3RyaW5nW10gPSBbXTtcblx0XHRzZWxlY3Rpb24uU2VsZWN0T3B0aW9ucz8uZm9yRWFjaCgoc2VsZWN0T3B0aW9uOiBTZWxlY3RPcHRpb25UeXBlKSA9PiB7XG5cdFx0XHRjb25zdCBwcm9wZXJ0eU5hbWUgPSBzZWxlY3RPcHRpb24uUHJvcGVydHlOYW1lO1xuXHRcdFx0Y29uc3QgcHJvcGVydHlQYXRoOiBzdHJpbmcgPSBwcm9wZXJ0eU5hbWU/LnZhbHVlID8/IFwiXCI7XG5cdFx0XHRpZiAoIXByb3BlcnR5TmFtZXMuaW5jbHVkZXMocHJvcGVydHlQYXRoKSkge1xuXHRcdFx0XHRwcm9wZXJ0eU5hbWVzLnB1c2gocHJvcGVydHlQYXRoKTtcblx0XHRcdH1cblx0XHR9KTtcblx0XHRyZXR1cm4ge1xuXHRcdFx0dGV4dDogc2VsZWN0aW9uPy5UZXh0Py50b1N0cmluZygpLFxuXHRcdFx0cHJvcGVydHlOYW1lczogcHJvcGVydHlOYW1lc1xuXHRcdH07XG5cdH1cblx0cmV0dXJuIHVuZGVmaW5lZDtcbn1cbmZ1bmN0aW9uIF9nZXRGdWxsU2NyZWVuQmFzZWRPbkRldmljZShcblx0dGFibGVTZXR0aW5nczogVGFibGVNYW5pZmVzdFNldHRpbmdzQ29uZmlndXJhdGlvbixcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+LFxuXHRpc0lwaG9uZTogYm9vbGVhblxuKTogYm9vbGVhbiB7XG5cdC8vIElmIGVuYWJsZUZ1bGxTY3JlZW4gaXMgbm90IHNldCwgdXNlIGFzIGRlZmF1bHQgdHJ1ZSBvbiBwaG9uZSBhbmQgZmFsc2Ugb3RoZXJ3aXNlXG5cdGxldCBlbmFibGVGdWxsU2NyZWVuID0gdGFibGVTZXR0aW5ncy5lbmFibGVGdWxsU2NyZWVuID8/IGlzSXBob25lO1xuXHQvLyBNYWtlIHN1cmUgdGhhdCBlbmFibGVGdWxsU2NyZWVuIGlzIG5vdCBzZXQgb24gTGlzdFJlcG9ydCBmb3IgZGVza3RvcCBvciB0YWJsZXRcblx0aWYgKCFpc0lwaG9uZSAmJiBlbmFibGVGdWxsU2NyZWVuICYmIGNvbnZlcnRlckNvbnRleHQuZ2V0VGVtcGxhdGVUeXBlKCkgPT09IFRlbXBsYXRlVHlwZS5MaXN0UmVwb3J0KSB7XG5cdFx0ZW5hYmxlRnVsbFNjcmVlbiA9IGZhbHNlO1xuXHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0RGlhZ25vc3RpY3MoKS5hZGRJc3N1ZShJc3N1ZUNhdGVnb3J5Lk1hbmlmZXN0LCBJc3N1ZVNldmVyaXR5LkxvdywgSXNzdWVUeXBlLkZVTExTQ1JFRU5NT0RFX05PVF9PTl9MSVNUUkVQT1JUKTtcblx0fVxuXHRyZXR1cm4gZW5hYmxlRnVsbFNjcmVlbjtcbn1cbmZ1bmN0aW9uIF9nZXRNdWx0aVNlbGVjdE1vZGUoXG5cdHRhYmxlU2V0dGluZ3M6IFRhYmxlTWFuaWZlc3RTZXR0aW5nc0NvbmZpZ3VyYXRpb24sXG5cdHRhYmxlVHlwZTogVGFibGVUeXBlLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD5cbik6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdGxldCBtdWx0aVNlbGVjdE1vZGU6IHN0cmluZyB8IHVuZGVmaW5lZDtcblx0aWYgKHRhYmxlVHlwZSAhPT0gXCJSZXNwb25zaXZlVGFibGVcIikge1xuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cblx0c3dpdGNoIChjb252ZXJ0ZXJDb250ZXh0LmdldFRlbXBsYXRlVHlwZSgpKSB7XG5cdFx0Y2FzZSBUZW1wbGF0ZVR5cGUuTGlzdFJlcG9ydDpcblx0XHRjYXNlIFRlbXBsYXRlVHlwZS5PYmplY3RQYWdlOlxuXHRcdFx0bXVsdGlTZWxlY3RNb2RlID0gdGFibGVTZXR0aW5ncy5zZWxlY3RBbGwgPT09IGZhbHNlID8gXCJDbGVhckFsbFwiIDogXCJEZWZhdWx0XCI7XG5cdFx0XHRpZiAoY29udmVydGVyQ29udGV4dC5nZXRUZW1wbGF0ZVR5cGUoKSA9PT0gVGVtcGxhdGVUeXBlLk9iamVjdFBhZ2UgJiYgY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKS51c2VJY29uVGFiQmFyKCkpIHtcblx0XHRcdFx0bXVsdGlTZWxlY3RNb2RlID0gIXRhYmxlU2V0dGluZ3Muc2VsZWN0QWxsID8gXCJDbGVhckFsbFwiIDogXCJEZWZhdWx0XCI7XG5cdFx0XHR9XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFRlbXBsYXRlVHlwZS5BbmFseXRpY2FsTGlzdFBhZ2U6XG5cdFx0XHRtdWx0aVNlbGVjdE1vZGUgPSAhdGFibGVTZXR0aW5ncy5zZWxlY3RBbGwgPyBcIkNsZWFyQWxsXCIgOiBcIkRlZmF1bHRcIjtcblx0XHRcdGJyZWFrO1xuXHRcdGRlZmF1bHQ6XG5cdH1cblx0cmV0dXJuIG11bHRpU2VsZWN0TW9kZTtcbn1cbmZ1bmN0aW9uIF9nZXRUYWJsZU1vZGUoXG5cdHRhYmxlVHlwZTogVGFibGVUeXBlLFxuXHR0YWJsZVNldHRpbmdzOiBUYWJsZU1hbmlmZXN0U2V0dGluZ3NDb25maWd1cmF0aW9uLFxuXHRpc1RlbXBsYXRlTGlzdFJlcG9ydDogYm9vbGVhblxuKTogeyByb3dDb3VudE1vZGU/OiBUYWJsZVJvd0NvdW50TW9kZTsgcm93Q291bnQ/OiBudW1iZXIgfSB7XG5cdGlmICh0YWJsZVR5cGUgIT09IFwiUmVzcG9uc2l2ZVRhYmxlXCIpIHtcblx0XHRpZiAoaXNUZW1wbGF0ZUxpc3RSZXBvcnQpIHtcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdHJvd0NvdW50TW9kZTogXCJBdXRvXCIsXG5cdFx0XHRcdHJvd0NvdW50OiAzXG5cdFx0XHR9O1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRyb3dDb3VudE1vZGU6IHRhYmxlU2V0dGluZ3Mucm93Q291bnRNb2RlID8/IFwiRml4ZWRcIixcblx0XHRcdFx0cm93Q291bnQ6IHRhYmxlU2V0dGluZ3Mucm93Q291bnQgPz8gKHRhYmxlVHlwZSA9PT0gXCJHcmlkVGFibGVcIiA/IDUgOiAxMClcblx0XHRcdH07XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdHJldHVybiB7fTtcblx0fVxufVxuZnVuY3Rpb24gX2dldENvbmRlbnNlZFRhYmxlTGF5b3V0KF90YWJsZVR5cGU6IFRhYmxlVHlwZSwgX3RhYmxlU2V0dGluZ3M6IFRhYmxlTWFuaWZlc3RTZXR0aW5nc0NvbmZpZ3VyYXRpb24pOiBib29sZWFuIHtcblx0cmV0dXJuIF90YWJsZVNldHRpbmdzLmNvbmRlbnNlZFRhYmxlTGF5b3V0ICE9PSB1bmRlZmluZWQgJiYgX3RhYmxlVHlwZSAhPT0gXCJSZXNwb25zaXZlVGFibGVcIlxuXHRcdD8gX3RhYmxlU2V0dGluZ3MuY29uZGVuc2VkVGFibGVMYXlvdXRcblx0XHQ6IGZhbHNlO1xufVxuZnVuY3Rpb24gX2dldFRhYmxlU2VsZWN0aW9uTGltaXQoX3RhYmxlU2V0dGluZ3M6IFRhYmxlTWFuaWZlc3RTZXR0aW5nc0NvbmZpZ3VyYXRpb24pOiBudW1iZXIge1xuXHRyZXR1cm4gX3RhYmxlU2V0dGluZ3Muc2VsZWN0QWxsID09PSB0cnVlIHx8IF90YWJsZVNldHRpbmdzLnNlbGVjdGlvbkxpbWl0ID09PSAwID8gMCA6IF90YWJsZVNldHRpbmdzLnNlbGVjdGlvbkxpbWl0IHx8IDIwMDtcbn1cbmZ1bmN0aW9uIF9nZXRUYWJsZUlubGluZUNyZWF0aW9uUm93Q291bnQoX3RhYmxlU2V0dGluZ3M6IFRhYmxlTWFuaWZlc3RTZXR0aW5nc0NvbmZpZ3VyYXRpb24pOiBudW1iZXIge1xuXHRyZXR1cm4gX3RhYmxlU2V0dGluZ3MuY3JlYXRpb25Nb2RlPy5pbmxpbmVDcmVhdGlvblJvd0NvdW50ID8gX3RhYmxlU2V0dGluZ3MuY3JlYXRpb25Nb2RlPy5pbmxpbmVDcmVhdGlvblJvd0NvdW50IDogMTtcbn1cblxuZnVuY3Rpb24gX2dldEVuYWJsZUV4cG9ydChcblx0dGFibGVTZXR0aW5nczogVGFibGVNYW5pZmVzdFNldHRpbmdzQ29uZmlndXJhdGlvbixcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+LFxuXHRlbmFibGVQYXN0ZTogYm9vbGVhblxuKTogYm9vbGVhbiB7XG5cdHJldHVybiB0YWJsZVNldHRpbmdzLmVuYWJsZUV4cG9ydCAhPT0gdW5kZWZpbmVkXG5cdFx0PyB0YWJsZVNldHRpbmdzLmVuYWJsZUV4cG9ydFxuXHRcdDogY29udmVydGVyQ29udGV4dC5nZXRUZW1wbGF0ZVR5cGUoKSAhPT0gXCJPYmplY3RQYWdlXCIgfHwgZW5hYmxlUGFzdGU7XG59XG5mdW5jdGlvbiBfZ2V0RnJvemVuQ29sdW1uQ291bnQodGFibGVTZXR0aW5nczogVGFibGVNYW5pZmVzdFNldHRpbmdzQ29uZmlndXJhdGlvbik6IG51bWJlciB8IHVuZGVmaW5lZCB7XG5cdHJldHVybiB0YWJsZVNldHRpbmdzLmZyb3plbkNvbHVtbkNvdW50O1xufVxuXG4vKipcbiAqIEdldCB0aGUgd2lkdGhJbmNsdWRpbmdDb2x1bW5IZWFkZXIgdmFsdWUgZnJvbSB0aGUgdGFibGVTZXR0aW5ncyBpZiBpdCBleGlzdHMuXG4gKiBAcGFyYW0gdGFibGVTZXR0aW5ncyBUYWJsZVNldHRpbmdzIE9iamVjdFxuICogQHJldHVybnMgUmV0dXJucyB0aGUgdmFsdWUgb2Ygd2lkdGhJbmNsdWRpbmdDb2x1bW5IZWFkZXIgb3IgZmFsc2VcbiAqL1xuZnVuY3Rpb24gX2dldFdpZHRoSW5jbHVkaW5nQ29sdW1uSGVhZGVyKHRhYmxlU2V0dGluZ3M6IFRhYmxlTWFuaWZlc3RTZXR0aW5nc0NvbmZpZ3VyYXRpb24pOiBib29sZWFuIHtcblx0cmV0dXJuIHRhYmxlU2V0dGluZ3Mud2lkdGhJbmNsdWRpbmdDb2x1bW5IZWFkZXIgPz8gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGdldEZpbHRlckNvbmZpZ3VyYXRpb24oXG5cdHRhYmxlU2V0dGluZ3M6IFRhYmxlTWFuaWZlc3RTZXR0aW5nc0NvbmZpZ3VyYXRpb24sXG5cdGxpbmVJdGVtQW5ub3RhdGlvbjogTGluZUl0ZW0sXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pixcblx0c2VsZWN0aW9uVmFyaWFudEFubm90YXRpb246IFNlbGVjdGlvblZhcmlhbnRUeXBlIHwgdW5kZWZpbmVkXG4pOiB7XG5cdGZpbHRlcnM6IFBhcnRpYWw8UmVjb3JkPFwicXVpY2tGaWx0ZXJzXCIgfCBcImhpZGRlbkZpbHRlcnNcIiwgVGFibGVGaWx0ZXJzQ29uZmlndXJhdGlvbj4+O1xuXHRoZWFkZXJWaXNpYmxlOiBib29sZWFuO1xufSB7XG5cdGxldCBoaWRlVGFibGVUaXRsZSA9IGZhbHNlO1xuXHRjb25zdCBmaWx0ZXJzOiBQYXJ0aWFsPFJlY29yZDxcInF1aWNrRmlsdGVyc1wiIHwgXCJoaWRkZW5GaWx0ZXJzXCIsIFRhYmxlRmlsdGVyc0NvbmZpZ3VyYXRpb24+PiA9IHt9O1xuXHRjb25zdCB0YXJnZXRFbnRpdHlUeXBlID0gY29udmVydGVyQ29udGV4dC5nZXRBbm5vdGF0aW9uRW50aXR5VHlwZShsaW5lSXRlbUFubm90YXRpb24pO1xuXHRpZiAodGFibGVTZXR0aW5ncy5xdWlja1ZhcmlhbnRTZWxlY3Rpb24pIHtcblx0XHRjb25zdCBxdWlja0ZpbHRlclBhdGhzID0gKHRhYmxlU2V0dGluZ3MucXVpY2tWYXJpYW50U2VsZWN0aW9uLnBhdGhzID8/IFtdKS5yZWR1Y2UoXG5cdFx0XHQoZmlsdGVyUGF0aHM6IHsgYW5ub3RhdGlvblBhdGg6IHN0cmluZyB9W10sIHBhdGgpID0+IHtcblx0XHRcdFx0aWYgKHRhcmdldEVudGl0eVR5cGUucmVzb2x2ZVBhdGgocGF0aC5hbm5vdGF0aW9uUGF0aCkpIHtcblx0XHRcdFx0XHRmaWx0ZXJQYXRocy5wdXNoKHsgYW5ub3RhdGlvblBhdGg6IHBhdGguYW5ub3RhdGlvblBhdGggfSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIGZpbHRlclBhdGhzO1xuXHRcdFx0fSxcblx0XHRcdFtdXG5cdFx0KTtcblx0XHRpZiAocXVpY2tGaWx0ZXJQYXRocy5sZW5ndGgpIHtcblx0XHRcdGZpbHRlcnMucXVpY2tGaWx0ZXJzID0ge1xuXHRcdFx0XHRzaG93Q291bnRzOiB0YWJsZVNldHRpbmdzLnF1aWNrVmFyaWFudFNlbGVjdGlvbi5zaG93Q291bnRzLFxuXHRcdFx0XHRwYXRoczogcXVpY2tGaWx0ZXJQYXRoc1xuXHRcdFx0fTtcblx0XHR9XG5cdH1cblx0aWYgKHNlbGVjdGlvblZhcmlhbnRBbm5vdGF0aW9uKSB7XG5cdFx0LyoqXG5cdFx0ICogUHJvdmlkZSBTZWxlY3Rpb24gVmFyaWFudCB0byBoaWRkZW5GaWx0ZXJzIGluIG9yZGVyIHRvIHNldCB0aGUgU1YgZmlsdGVycyB0byB0aGUgdGFibGUuXG5cdFx0ICogTURDIFRhYmxlIG92ZXJyaWRlcyBiaW5kaW5nIEZpbHRlciBhbmQgZnJvbSBTQVAgRkUgdGhlIG9ubHkgbWV0aG9kIHdoZXJlIHdlIGFyZSBhYmxlIHRvIGFkZFxuXHRcdCAqIGFkZGl0aW9uYWwgZmlsdGVyIGlzICdyZWJpbmRUYWJsZScgaW50byBUYWJsZSBkZWxlZ2F0ZS5cblx0XHQgKiBUbyBhdm9pZCBpbXBsZW1lbnRpbmcgc3BlY2lmaWMgTFIgZmVhdHVyZSB0byBTQVAgRkUgTWFjcm8gVGFibGUsIHRoZSBmaWx0ZXIocykgIG5vdCBtYW5hZ2VkIGJ5IHRoZSBGaWx0ZXJCYXJcblx0XHQgKiBjYW4gYmUgcGFzc2VkIHRvIG1hY3JvIHRhYmxlIHZpYSBwYXJhbWV0ZXIvY29udGV4dCBuYW1lZCBmaWx0ZXJzIGFuZCBrZXkgaGlkZGVuRmlsdGVycy5cblx0XHQgKi9cblx0XHRmaWx0ZXJzLmhpZGRlbkZpbHRlcnMgPSB7IHBhdGhzOiBbeyBhbm5vdGF0aW9uUGF0aDogYEAke3NlbGVjdGlvblZhcmlhbnRBbm5vdGF0aW9uLmZ1bGx5UXVhbGlmaWVkTmFtZS5zcGxpdChcIkBcIilbMV19YCB9XSB9O1xuXHR9XG5cblx0aGlkZVRhYmxlVGl0bGUgPSAhIXRhYmxlU2V0dGluZ3MucXVpY2tWYXJpYW50U2VsZWN0aW9uPy5oaWRlVGFibGVUaXRsZTtcblx0cmV0dXJuIHtcblx0XHRmaWx0ZXJzOiBmaWx0ZXJzLFxuXHRcdGhlYWRlclZpc2libGU6ICEoZmlsdGVycz8ucXVpY2tGaWx0ZXJzICYmIGhpZGVUYWJsZVRpdGxlKVxuXHR9O1xufVxuXG4vKipcbiAqIERldGVybWluZXMgaWYgdGhlIGFjdGlvbiB3aWxsIGhhdmUgYW4gZXhwcmVzc2lvbiBmb3IgZW5hYmxlbWVudCBnZW5lcmF0ZWQuXG4gKiBAcGFyYW0gZGF0YUZpZWxkIFRoZSBkYXRhRmllbGQgY29udGFpbmluZyBhbiBhY3Rpb25cbiAqIEBwYXJhbSBzRW50aXR5VHlwZSBUaGUgY3VycmVudCBlbnRpdHkgZm9yIHRlbXBsYXRpbmdcbiAqIEByZXR1cm5zIFdoZXRoZXIgYW4gZXhwcmVzc2lvbiBmb3IgZW5hYmxlbWVudCBpcyB0byBiZSBnZW5lcmF0ZWRcbiAqL1xuZnVuY3Rpb24gX3VzZUVuYWJsZWRFeHByZXNzaW9uKGRhdGFGaWVsZDogRGF0YUZpZWxkRm9yQWN0aW9uVHlwZXMsIHNFbnRpdHlUeXBlOiBzdHJpbmcpOiBib29sZWFuIHtcblx0Ly8gVGhlcmUgYXJlIHRocmVlIGNhc2VzIHdoZW4gYSB0YWJsZSBhY3Rpb24gaGFzIGFuIE9wZXJhdGlvbkF2YWlsYWJsZSB0aGF0IGxlYWRzIHRvIGFuIGVuYWJsZW1lbnQgZXhwcmVzc2lvblxuXHQvLyBhbmQgaXMgbm90IGRlcGVuZGVudCB1cG9uIHRoZSB0YWJsZSBlbnRyaWVzLlxuXHQvLyAxLiBBbiBhY3Rpb24gd2l0aCBhbiBvdmVybG9hZCwgdGhhdCBpcyBleGVjdXRlZCBhZ2FpbnN0IGEgcGFyZW50IGVudGl0eS5cblx0Ly8gMi4gQW4gdW5ib3VuZCBhY3Rpb25cblx0Ly8gMy4gQSBzdGF0aWMgYWN0aW9uICh0aGF0IGlzLCBib3VuZCB0byBhIGNvbGxlY3Rpb24pXG5cdGxldCB1c2VFbmFibGVkRXhwcmVzc2lvbiA9IGZhbHNlO1xuXHRpZiAoZGF0YUZpZWxkLkFjdGlvblRhcmdldD8uYW5ub3RhdGlvbnM/LkNvcmU/Lk9wZXJhdGlvbkF2YWlsYWJsZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0Ly8gVW5ib3VuZCBhY3Rpb24uIElzIHJlY29nbmlzZWQsIGJ1dCBnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24gY2hlY2tzIGZvciBpc0JvdW5kID0gdHJ1ZSwgc28gbm90IGdlbmVyYXRlZC5cblx0XHRjb25zdCBpc0JvdW5kID0gZGF0YUZpZWxkLkFjdGlvblRhcmdldD8uaXNCb3VuZDtcblx0XHQvL292ZXJsb2FkIGFjdGlvblxuXHRcdGNvbnN0IG92ZXJsb2FkQWN0aW9uID0gaXNCb3VuZCAmJiBkYXRhRmllbGQuQWN0aW9uVGFyZ2V0Py5zb3VyY2VUeXBlICE9PSBzRW50aXR5VHlwZTtcblx0XHQvL3N0YXRpYyBhY3Rpb25cblx0XHRjb25zdCBzdGF0aWNBY3Rpb24gPSBkYXRhRmllbGQuQWN0aW9uVGFyZ2V0Py5wYXJhbWV0ZXJzWzBdPy5pc0NvbGxlY3Rpb247XG5cdFx0Ly9jb3B5IGFjdGlvblxuXHRcdGlmICghaXNCb3VuZCB8fCBvdmVybG9hZEFjdGlvbiB8fCBzdGF0aWNBY3Rpb24pIHtcblx0XHRcdHVzZUVuYWJsZWRFeHByZXNzaW9uID0gdHJ1ZTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIHVzZUVuYWJsZWRFeHByZXNzaW9uO1xufVxuXG4vKipcbiAqIFVwZGF0ZXMgdGhlIHRhYmxlIGNvbnRyb2wgY29uZmlndXJhdGlvbiB3aXRoIFRyZWUtVGFibGUgc3BlY2lmaWMgaW5mb3JtYXRpb24uXG4gKiBAcGFyYW0gdGFibGVDb25maWd1cmF0aW9uIFRoZSB0YWJsZSBjb25maWd1cmF0aW9uXG4gKiBAcGFyYW0gdGFibGVTZXR0aW5ncyBTZXR0aW5ncyBmcm9tIHRoZSBtYW5pZmVzdFxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGluc3RhbmNlIG9mIHRoZSBjb252ZXJ0ZXIgY29udGV4dFxuICovXG5mdW5jdGlvbiB1cGRhdGVUcmVlVGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24oXG5cdHRhYmxlQ29uZmlndXJhdGlvbjogVGFibGVDb250cm9sQ29uZmlndXJhdGlvbixcblx0dGFibGVTZXR0aW5nczogVGFibGVNYW5pZmVzdFNldHRpbmdzQ29uZmlndXJhdGlvbixcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dFxuKTogdm9pZCB7XG5cdGNvbnN0IGRhdGFNb2RlbE9iamVjdFBhdGggPSBjb252ZXJ0ZXJDb250ZXh0LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKTtcblx0dGFibGVDb25maWd1cmF0aW9uLmhpZXJhcmNoeVF1YWxpZmllciA9IHRhYmxlU2V0dGluZ3MuaGllcmFyY2h5UXVhbGlmaWVyO1xuXHRjb25zdCBoaWVyYXJjaHlQYXJlbnROYXZpZ2F0aW9uUHJvcGVydHlQYXRoID0gZ2V0SGllcmFyY2h5UGFyZW50TmF2aWdhdGlvblByb3BlcnR5UGF0aChcblx0XHRkYXRhTW9kZWxPYmplY3RQYXRoLFxuXHRcdHRhYmxlQ29uZmlndXJhdGlvbi5oaWVyYXJjaHlRdWFsaWZpZXIhXG5cdCk7XG5cdGNvbnN0IG5vblVwZGF0YWJsZU5hdmlnYXRpb25Qcm9wZXJ0aWVzID0gZ2V0Tm9uVXBkYXRhYmxlTmF2aWdhdGlvblByb3BlcnRpZXMoZGF0YU1vZGVsT2JqZWN0UGF0aCk7XG5cdHRhYmxlQ29uZmlndXJhdGlvbi5pc0hpZXJhcmNoeVBhcmVudE5vZGVVcGRhdGFibGUgPSAhbm9uVXBkYXRhYmxlTmF2aWdhdGlvblByb3BlcnRpZXM/LmluY2x1ZGVzKGhpZXJhcmNoeVBhcmVudE5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgpO1xuXHR0YWJsZUNvbmZpZ3VyYXRpb24uaXNOb2RlTW92YWJsZSA9IGdldEN1c3RvbUZ1bmN0aW9uSW5mbyh0YWJsZVNldHRpbmdzLmlzTm9kZU1vdmFibGUsIHRhYmxlQ29uZmlndXJhdGlvbik7XG5cdHRhYmxlQ29uZmlndXJhdGlvbi5pc05vZGVDb3B5YWJsZSA9IGdldEN1c3RvbUZ1bmN0aW9uSW5mbyh0YWJsZVNldHRpbmdzLmlzTm9kZUNvcHlhYmxlLCB0YWJsZUNvbmZpZ3VyYXRpb24pO1xuXHR0YWJsZUNvbmZpZ3VyYXRpb24uaXNNb3ZlVG9Qb3NpdGlvbkFsbG93ZWQgPSBnZXRDdXN0b21GdW5jdGlvbkluZm8odGFibGVTZXR0aW5ncy5pc01vdmVUb1Bvc2l0aW9uQWxsb3dlZCwgdGFibGVDb25maWd1cmF0aW9uKTtcblx0dGFibGVDb25maWd1cmF0aW9uLmlzQ29weVRvUG9zaXRpb25BbGxvd2VkID0gZ2V0Q3VzdG9tRnVuY3Rpb25JbmZvKHRhYmxlU2V0dGluZ3MuaXNDb3B5VG9Qb3NpdGlvbkFsbG93ZWQsIHRhYmxlQ29uZmlndXJhdGlvbik7XG5cdHRhYmxlQ29uZmlndXJhdGlvbi5jcmVhdGVFbmFibGVtZW50ID0gZ2V0Q3VzdG9tRnVuY3Rpb25JbmZvKHRhYmxlU2V0dGluZ3MuY3JlYXRpb25Nb2RlPy5pc0NyZWF0ZUVuYWJsZWQsIHRhYmxlQ29uZmlndXJhdGlvbik7XG5cblx0aWYgKHRhYmxlU2V0dGluZ3MuY3JlYXRpb25Nb2RlPy5ub2RlVHlwZT8ucHJvcGVydHlOYW1lICYmIHRhYmxlU2V0dGluZ3MuY3JlYXRpb25Nb2RlPy5ub2RlVHlwZT8udmFsdWVzKSB7XG5cdFx0Y29uc3QgdmFsdWVzID0gdGFibGVTZXR0aW5ncy5jcmVhdGlvbk1vZGUubm9kZVR5cGUudmFsdWVzO1xuXHRcdHRhYmxlQ29uZmlndXJhdGlvbi5ub2RlVHlwZSA9IHtcblx0XHRcdHByb3BlcnR5TmFtZTogdGFibGVTZXR0aW5ncy5jcmVhdGlvbk1vZGUubm9kZVR5cGUucHJvcGVydHlOYW1lLFxuXHRcdFx0dmFsdWVzOiBPYmplY3Qua2V5cyh2YWx1ZXMpLm1hcCgodmFsdWUpID0+IHtcblx0XHRcdFx0Y29uc3Qgbm9kZVR5cGVJbmZvID0gdmFsdWVzW3ZhbHVlXTtcblxuXHRcdFx0XHRpZiAodHlwZW9mIG5vZGVUeXBlSW5mbyA9PT0gXCJzdHJpbmdcIikge1xuXHRcdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0XHR2YWx1ZSxcblx0XHRcdFx0XHRcdHRleHQ6IG5vZGVUeXBlSW5mb1xuXHRcdFx0XHRcdH07XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0XHRcdHZhbHVlLFxuXHRcdFx0XHRcdFx0dGV4dDogbm9kZVR5cGVJbmZvLmxhYmVsLFxuXHRcdFx0XHRcdFx0Y3JlYXRpb25EaWFsb2dGaWVsZHM6XG5cdFx0XHRcdFx0XHRcdHRhYmxlQ29uZmlndXJhdGlvbi5jcmVhdGlvbk1vZGUgPT09IENyZWF0aW9uTW9kZS5DcmVhdGlvbkRpYWxvZ1xuXHRcdFx0XHRcdFx0XHRcdD8gZ2V0RmllbGRMaXN0KG5vZGVUeXBlSW5mby5jcmVhdGlvbkZpZWxkcywgY29udmVydGVyQ29udGV4dClcblx0XHRcdFx0XHRcdFx0XHQ6IHVuZGVmaW5lZFxuXHRcdFx0XHRcdH07XG5cdFx0XHRcdH1cblx0XHRcdH0pXG5cdFx0fTtcblx0fVxuXG5cdC8vIENyZWF0ZSBpbiBwbGFjZVxuXHRpZiAodGFibGVTZXR0aW5ncy5jcmVhdGlvbk1vZGU/LmNyZWF0ZUluUGxhY2UpIHtcblx0XHR0YWJsZUNvbmZpZ3VyYXRpb24uY3JlYXRlSW5QbGFjZSA9IHRydWU7XG5cdH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEN1c3RvbUZ1bmN0aW9uSW5mbyhcblx0dmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZCxcblx0dGFibGVDb25maWd1cmF0aW9uOiBUYWJsZUNvbnRyb2xDb25maWd1cmF0aW9uXG4pOiBFeHRlcm5hbE1ldGhvZENvbmZpZyB8IHVuZGVmaW5lZCB7XG5cdGlmICghdmFsdWUpIHtcblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG5cdGNvbnN0IGxhc3REb3RJbmRleCA9IHZhbHVlLmxhc3RJbmRleE9mKFwiLlwiKSB8fCAtMTtcblx0Y29uc3QgbW9kdWxlTmFtZSA9IHZhbHVlLnN1YnN0cmluZygwLCBsYXN0RG90SW5kZXgpLnJlcGxhY2UoL1xcLi9naSwgXCIvXCIpO1xuXHRjb25zdCBtZXRob2ROYW1lID0gdmFsdWUuc3Vic3RyaW5nKGxhc3REb3RJbmRleCArIDEpO1xuXG5cdC8vIEFkZCB0aGUgY3VzdG9tIG1vZHVsZSBpbiB0aGUgbGlzdCBvZiByZXF1aXJlZCBtb2R1bGVzIGlmIG5lY2Vzc2FyeVxuXHRpZiAoIW1vZHVsZU5hbWUuc3RhcnRzV2l0aChcIi9leHRlbnNpb24vXCIpKSB7XG5cdFx0aWYgKCF0YWJsZUNvbmZpZ3VyYXRpb24uYWRkaXRpb25hbFJlcXVpcmVkTW9kdWxlcykge1xuXHRcdFx0dGFibGVDb25maWd1cmF0aW9uLmFkZGl0aW9uYWxSZXF1aXJlZE1vZHVsZXMgPSBbbW9kdWxlTmFtZV07XG5cdFx0fSBlbHNlIGlmICghdGFibGVDb25maWd1cmF0aW9uLmFkZGl0aW9uYWxSZXF1aXJlZE1vZHVsZXMuaW5jbHVkZXMobW9kdWxlTmFtZSkpIHtcblx0XHRcdHRhYmxlQ29uZmlndXJhdGlvbi5hZGRpdGlvbmFsUmVxdWlyZWRNb2R1bGVzLnB1c2gobW9kdWxlTmFtZSk7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHsgbW9kdWxlTmFtZSwgbWV0aG9kTmFtZSB9O1xufVxuXG4vKipcbiAqIFJldHJpZXZlIHRoZSB0YWJsZSBjb250cm9sIGNvbmZpZ3VyYXRpb24gb3B0aW1pc3RpYyBiYXRjaCBpbmZvcm1hdGlvbi5cbiAqIEBwYXJhbSB0YWJsZU1hbmlmZXN0U2V0dGluZ3MgVGhlIHRhYmxlIGNvbmZpZ3VyYXRpb25cbiBAcmV0dXJucyBUcnVlIGlmIE9wdGltaXN0aWMgYmF0Y2ggbW9kZSBpcyBkaXNhYmxlZFxuICovXG5mdW5jdGlvbiBnZXRPcHRpbWlzdGljQmF0Y2hTZXR0aW5nc0Zyb21NYW5pZmVzdCh0YWJsZU1hbmlmZXN0U2V0dGluZ3M6IFRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uKTogYm9vbGVhbiB8IHVuZGVmaW5lZCB7XG5cdC8vIE9wdGltaXN0aWMgYmF0Y2ggaXMgc2V0IGJ5IGRlZmF1bHRcblx0cmV0dXJuIHRhYmxlTWFuaWZlc3RTZXR0aW5ncz8udGFibGVTZXR0aW5ncz8uZGlzYWJsZVJlcXVlc3RDYWNoZTtcbn1cblxuLyoqXG4gKiBHZXRzIHRoZSBzZXR0aW5ncyBjb21pbmcgZnJvbSB0aGUgbWFuaWZlc3QgcmVsYXRlZCB0byB0aGUgbWFzcyBlZGl0IGRpYWxvZy5cbiAqIEBwYXJhbSB0YWJsZVNldHRpbmdzIFRoZSB0YWJsZSBjb25maWd1cmF0aW9uXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dCBUaGUgaW5zdGFuY2Ugb2YgdGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKiBAcmV0dXJucyBUaGUgbWFzcyBlZGl0IGNvbmZpZ3VyYXRpb24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRNYXNzRWRpdFNldHRpbmdzKFxuXHR0YWJsZVNldHRpbmdzOiBUYWJsZU1hbmlmZXN0U2V0dGluZ3NDb25maWd1cmF0aW9uLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD5cbik6IE1hc3NFZGl0VGFibGVDb25maWd1cmF0aW9uIHtcblx0Y29uc3QgZGVmYXVsdEZpZWxkQ29uZmlndXJhdGlvbiA9IHtcblx0XHR2aXNpYmxlRmllbGRzOiBbXSxcblx0XHRpZ25vcmVkRmllbGRzOiBbXSxcblx0XHRvcGVyYXRpb25Hcm91cGluZ01vZGU6XG5cdFx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldFRlbXBsYXRlVHlwZSgpID09PSBUZW1wbGF0ZVR5cGUuTGlzdFJlcG9ydFxuXHRcdFx0XHQ/IE9wZXJhdGlvbkdyb3VwaW5nTW9kZS5Jc29sYXRlZFxuXHRcdFx0XHQ6IE9wZXJhdGlvbkdyb3VwaW5nTW9kZS5DaGFuZ2VTZXRcblx0fTtcblx0aWYgKCF0YWJsZVNldHRpbmdzLmVuYWJsZU1hc3NFZGl0KSB7XG5cdFx0cmV0dXJuIHsgZW5hYmxlZDogZmFsc2UsIC4uLmRlZmF1bHRGaWVsZENvbmZpZ3VyYXRpb24gfTtcblx0fVxuXHRpZiAodGFibGVTZXR0aW5ncy5lbmFibGVNYXNzRWRpdCA9PT0gdHJ1ZSkge1xuXHRcdHJldHVybiB7IGVuYWJsZWQ6IHRhYmxlU2V0dGluZ3MuZW5hYmxlTWFzc0VkaXQsIC4uLmRlZmF1bHRGaWVsZENvbmZpZ3VyYXRpb24gfTtcblx0fSBlbHNlIGlmICh0eXBlb2YgdGFibGVTZXR0aW5ncy5lbmFibGVNYXNzRWRpdCA9PT0gXCJvYmplY3RcIikge1xuXHRcdHJldHVybiB7XG5cdFx0XHRlbmFibGVkOiB0cnVlLFxuXHRcdFx0dmlzaWJsZUZpZWxkczogZ2V0RmllbGRMaXN0KHRhYmxlU2V0dGluZ3MuZW5hYmxlTWFzc0VkaXQudmlzaWJsZUZpZWxkcywgY29udmVydGVyQ29udGV4dCksXG5cdFx0XHRpZ25vcmVkRmllbGRzOiBnZXRGaWVsZExpc3QodGFibGVTZXR0aW5ncy5lbmFibGVNYXNzRWRpdC5pZ25vcmVkRmllbGRzLCBjb252ZXJ0ZXJDb250ZXh0KSxcblx0XHRcdG9wZXJhdGlvbkdyb3VwaW5nTW9kZTpcblx0XHRcdFx0dGFibGVTZXR0aW5ncy5lbmFibGVNYXNzRWRpdC5vcGVyYXRpb25Hcm91cGluZ01vZGUgJiZcblx0XHRcdFx0T2JqZWN0LnZhbHVlcyhPcGVyYXRpb25Hcm91cGluZ01vZGUpLmluY2x1ZGVzKHRhYmxlU2V0dGluZ3MuZW5hYmxlTWFzc0VkaXQub3BlcmF0aW9uR3JvdXBpbmdNb2RlKVxuXHRcdFx0XHRcdD8gdGFibGVTZXR0aW5ncy5lbmFibGVNYXNzRWRpdC5vcGVyYXRpb25Hcm91cGluZ01vZGVcblx0XHRcdFx0XHQ6IGRlZmF1bHRGaWVsZENvbmZpZ3VyYXRpb24ub3BlcmF0aW9uR3JvdXBpbmdNb2RlLFxuXHRcdFx0Y3VzdG9tRnJhZ21lbnQ6IHRhYmxlU2V0dGluZ3MuZW5hYmxlTWFzc0VkaXQuY3VzdG9tRnJhZ21lbnQsXG5cdFx0XHRmcm9tSW5saW5lOiB0YWJsZVNldHRpbmdzLmVuYWJsZU1hc3NFZGl0LmZyb21JbmxpbmVcblx0XHR9O1xuXHR9XG5cdHJldHVybiB7IGVuYWJsZWQ6IGZhbHNlLCAuLi5kZWZhdWx0RmllbGRDb25maWd1cmF0aW9uIH07XG59XG5cbi8qKlxuICogR2V0cyBhIGxpc3Qgb2YgdGhlIGZpZWxkcyBjb21pbmcgZnJvbSB0aGUgbWFuaWZlc3QuXG4gKiBAcGFyYW0gZmllbGRzIFRoZSBmaWVsZHMsIGNvdWxkIGJlIGEgRmllbGRHcm91cCBvciBmaWVsZHMgc2VwYXJhdGVkIGJ5IGEgY29tbWFcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBpbnN0YW5jZSBvZiB0aGUgY29udmVydGVyIGNvbnRleHRcbiAqIEByZXR1cm5zIFRoZSBsaXN0IG9mIGZpZWxkcy5cbiAqL1xuZnVuY3Rpb24gZ2V0RmllbGRMaXN0KGZpZWxkczogc3RyaW5nIHwgdW5kZWZpbmVkLCBjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4pOiBzdHJpbmdbXSB7XG5cdGlmICghZmllbGRzKSB7XG5cdFx0cmV0dXJuIFtdO1xuXHR9XG5cdGlmIChmaWVsZHMuaW5jbHVkZXMoVUlBbm5vdGF0aW9uVGVybXMuRmllbGRHcm91cCkpIHtcblx0XHRmaWVsZHMgPSBmaWVsZHMuc3RhcnRzV2l0aChcIkBcIikgPyBmaWVsZHMgOiBgQCR7ZmllbGRzfWA7XG5cdFx0Y29uc3QgZmllbGRHcm91cCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZUFubm90YXRpb248RmllbGRHcm91cD4oZmllbGRzKTtcblx0XHRpZiAoaXNBbm5vdGF0aW9uT2ZUeXBlPEZpZWxkR3JvdXA+KGZpZWxkR3JvdXAuYW5ub3RhdGlvbiwgVUlBbm5vdGF0aW9uVHlwZXMuRmllbGRHcm91cFR5cGUpKSB7XG5cdFx0XHRyZXR1cm4gZmllbGRHcm91cC5hbm5vdGF0aW9uLkRhdGEucmVkdWNlKChwcm9wZXJ0aWVzOiBzdHJpbmdbXSwgZmllbGQpID0+IHtcblx0XHRcdFx0aWYgKGlzRGF0YUZpZWxkKGZpZWxkKSAmJiBpc1BhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbihmaWVsZC5WYWx1ZSkpIHtcblx0XHRcdFx0XHRwcm9wZXJ0aWVzLnB1c2goZmllbGQuVmFsdWUucGF0aCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIHByb3BlcnRpZXM7XG5cdFx0XHR9LCBbXSk7XG5cdFx0fVxuXHRcdHJldHVybiBbXTtcblx0fVxuXHRyZXR1cm4gZmllbGRzXG5cdFx0LnJlcGxhY2UoL1xccy9nLCBcIlwiKVxuXHRcdC5zcGxpdChcIixcIilcblx0XHQubWFwKChuYW1lKSA9PiBuYW1lLnRyaW0oKSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRUYWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbihcblx0bGluZUl0ZW1Bbm5vdGF0aW9uOiBMaW5lSXRlbSB8IHVuZGVmaW5lZCxcblx0dmlzdWFsaXphdGlvblBhdGg6IHN0cmluZyxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+LFxuXHRjaGVja0NvbmRlbnNlZExheW91dCA9IHRydWUsXG5cdHNlbGVjdGlvblZhcmlhbnRBbm5vdGF0aW9uPzogU2VsZWN0aW9uVmFyaWFudFR5cGVcbik6IFRhYmxlQ29udHJvbENvbmZpZ3VyYXRpb24ge1xuXHRjb25zdCBfbWFuaWZlc3RXcmFwcGVyID0gY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKTtcblx0Y29uc3QgdGFibGVNYW5pZmVzdFNldHRpbmdzOiBUYWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbiA9IGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RDb250cm9sQ29uZmlndXJhdGlvbih2aXN1YWxpemF0aW9uUGF0aCk7XG5cdGNvbnN0IHRhYmxlU2V0dGluZ3MgPSB0YWJsZU1hbmlmZXN0U2V0dGluZ3M/LnRhYmxlU2V0dGluZ3MgPz8ge307XG5cdGNvbnN0IGdsb2JhbEZFTWFuaWZlc3RTZXR0aW5ncyA9IF9tYW5pZmVzdFdyYXBwZXIuZ2V0U2FwRmVNYW5pZmVzdENvbmZpZ3VyYXRpb24oKTtcblx0Y29uc3QgZGVmYXVsdENyZWF0aW9uTW9kZSA9XG5cdFx0Z2xvYmFsRkVNYW5pZmVzdFNldHRpbmdzPy5tYWNyb3M/LnRhYmxlPy5kZWZhdWx0Q3JlYXRpb25Nb2RlID09PSBcIklubGluZUNyZWF0aW9uUm93c1wiID8gQ3JlYXRpb25Nb2RlLklubGluZUNyZWF0aW9uUm93cyA6IHVuZGVmaW5lZDtcblx0Y29uc3QgY3JlYXRpb25Nb2RlOiBDcmVhdGlvbk1vZGUgPSB0YWJsZVNldHRpbmdzLmNyZWF0aW9uTW9kZT8ubmFtZSA/PyBkZWZhdWx0Q3JlYXRpb25Nb2RlID8/IENyZWF0aW9uTW9kZS5OZXdQYWdlO1xuXHRjb25zdCBlbmFibGVBdXRvQ29sdW1uV2lkdGggPSAhX21hbmlmZXN0V3JhcHBlci5pc1Bob25lKCk7XG5cdGNvbnN0IGRpc2FibGVDb3B5VG9DbGlwYm9hcmQgPSB0YWJsZVNldHRpbmdzLmRpc2FibGVDb3B5VG9DbGlwYm9hcmQ7XG5cdGNvbnN0IHRlbXBsYXRlVHlwZSA9IGNvbnZlcnRlckNvbnRleHQuZ2V0VGVtcGxhdGVUeXBlKCk7XG5cdGNvbnN0IGlzQ29uZGVuc2VkVGFibGVMYXlvdXRDb21wbGlhbnQgPSBjaGVja0NvbmRlbnNlZExheW91dCAmJiBfbWFuaWZlc3RXcmFwcGVyLmlzQ29uZGVuc2VkTGF5b3V0Q29tcGxpYW50KCk7XG5cdGNvbnN0IG9GaWx0ZXJDb25maWd1cmF0aW9uID0gbGluZUl0ZW1Bbm5vdGF0aW9uXG5cdFx0PyBnZXRGaWx0ZXJDb25maWd1cmF0aW9uKHRhYmxlU2V0dGluZ3MsIGxpbmVJdGVtQW5ub3RhdGlvbiwgY29udmVydGVyQ29udGV4dCwgc2VsZWN0aW9uVmFyaWFudEFubm90YXRpb24pXG5cdFx0OiB7fTtcblx0Y29uc3QgY3VzdG9tVmFsaWRhdGlvbkZ1bmN0aW9uID0gdGFibGVTZXR0aW5ncy5jcmVhdGlvbk1vZGU/LmN1c3RvbVZhbGlkYXRpb25GdW5jdGlvbjtcblx0Y29uc3QgZXhwb3J0UmVxdWVzdFNpemUgPSB0YWJsZVNldHRpbmdzLmV4cG9ydFJlcXVlc3RTaXplO1xuXHRjb25zdCB0YWJsZVR5cGUgPSBnZXRUYWJsZVR5cGUoY29udmVydGVyQ29udGV4dCwgdGFibGVNYW5pZmVzdFNldHRpbmdzKTtcblx0Y29uc3QgYW5hbHl0aWNhbENvbmZpZ3VyYXRpb24gPSB0YWJsZVNldHRpbmdzLmFuYWx5dGljYWxDb25maWd1cmF0aW9uO1xuXHQvLyBCeSBkZWZhdWx0LCBwYXN0ZSBpcyBlbmFibGVkIG9uIGFuIE9iamVjdFBhZ2UgYW5kIG9uIGEgTGlzdFJlcG9ydCB3aXRoIGEgZHJhZnQgVHJlZVRhYmxlXG5cdGNvbnN0IGVuYWJsZVBhc3RlID1cblx0XHR0YWJsZVNldHRpbmdzLmVuYWJsZVBhc3RlID8/XG5cdFx0KGNvbnZlcnRlckNvbnRleHQuZ2V0VGVtcGxhdGVUeXBlKCkgPT09IFwiT2JqZWN0UGFnZVwiIHx8XG5cdFx0XHQodGFibGVUeXBlID09PSBcIlRyZWVUYWJsZVwiICYmIChjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVNldCgpIGFzIEVudGl0eVNldCk/LmFubm90YXRpb25zLkNvbW1vbj8uRHJhZnRSb290ICE9PSB1bmRlZmluZWQpKTtcblx0Y29uc3QgdGFibGVSb3dNb2RlID0gX2dldFRhYmxlTW9kZSh0YWJsZVR5cGUsIHRhYmxlU2V0dGluZ3MsIHRlbXBsYXRlVHlwZSA9PT0gVGVtcGxhdGVUeXBlLkxpc3RSZXBvcnQpO1xuXHRjb25zdCBkZWZhdWx0U2Nyb2xsVGhyZXNob2xkID0gdGFibGVUeXBlICE9PSBcIlJlc3BvbnNpdmVUYWJsZVwiID8gMzAwIDogdW5kZWZpbmVkO1xuXHRjb25zdCBjb25kZW5zZWRUYWJsZUxheW91dCA9IF9nZXRDb25kZW5zZWRUYWJsZUxheW91dCh0YWJsZVR5cGUsIHRhYmxlU2V0dGluZ3MpO1xuXHRsZXQgaW5saW5lQ3JlYXRpb25Sb3dzSGlkZGVuSW5FZGl0TW9kZSA9IGZhbHNlO1xuXHRpZiAodGFibGVTZXR0aW5ncy5jcmVhdGlvbk1vZGU/LmlubGluZUNyZWF0aW9uUm93c0hpZGRlbkluRWRpdE1vZGUpIHtcblx0XHRpbmxpbmVDcmVhdGlvblJvd3NIaWRkZW5JbkVkaXRNb2RlID1cblx0XHRcdHR5cGVvZiB0YWJsZVNldHRpbmdzLmNyZWF0aW9uTW9kZT8uaW5saW5lQ3JlYXRpb25Sb3dzSGlkZGVuSW5FZGl0TW9kZSA9PT0gXCJzdHJpbmdcIlxuXHRcdFx0XHQ/IHRhYmxlU2V0dGluZ3MuY3JlYXRpb25Nb2RlPy5pbmxpbmVDcmVhdGlvblJvd3NIaWRkZW5JbkVkaXRNb2RlID09PSBcInRydWVcIlxuXHRcdFx0XHQ6IHRhYmxlU2V0dGluZ3MuY3JlYXRpb25Nb2RlPy5pbmxpbmVDcmVhdGlvblJvd3NIaWRkZW5JbkVkaXRNb2RlO1xuXHR9XG5cdGxldCB1c2VUZXh0Rm9yTm9EYXRhTWVzc2FnZXM6IHN0cmluZztcblx0aWYgKGNvbnZlcnRlckNvbnRleHQuZ2V0VGVtcGxhdGVUeXBlKCkgPT09IFwiTGlzdFJlcG9ydFwiKSB7XG5cdFx0dXNlVGV4dEZvck5vRGF0YU1lc3NhZ2VzID0gXCJpbGx1c3RyYXRlZE1lc3NhZ2UtQXV0b1wiO1xuXHR9IGVsc2Uge1xuXHRcdHVzZVRleHRGb3JOb0RhdGFNZXNzYWdlcyA9IF9tYW5pZmVzdFdyYXBwZXIuZ2V0VXNlVGV4dEZvck5vRGF0YU1lc3NhZ2VzKCkgPyBcInRleHRcIiA6IFwiaWxsdXN0cmF0ZWRNZXNzYWdlLUV4dHJhU21hbGxcIjtcblx0fVxuXHRjb25zdCBvQ29uZmlndXJhdGlvbiA9IHtcblx0XHQvLyBJZiBubyBjcmVhdGVBdEVuZCBpcyBzcGVjaWZpZWQgaXQgd2lsbCBiZSBmYWxzZSBmb3IgSW5saW5lL0NyZWF0aW9uRGlhbG9nIGNyZWF0ZSBhbmQgdHJ1ZSBvdGhlcndpc2Vcblx0XHRjcmVhdGVBdEVuZDpcblx0XHRcdHRhYmxlU2V0dGluZ3MuY3JlYXRpb25Nb2RlPy5jcmVhdGVBdEVuZCAhPT0gdW5kZWZpbmVkXG5cdFx0XHRcdD8gdGFibGVTZXR0aW5ncy5jcmVhdGlvbk1vZGU/LmNyZWF0ZUF0RW5kXG5cdFx0XHRcdDogIVtDcmVhdGlvbk1vZGUuSW5saW5lLCBDcmVhdGlvbk1vZGUuQ3JlYXRpb25EaWFsb2ddLmluY2x1ZGVzKGNyZWF0aW9uTW9kZSksXG5cdFx0Y3JlYXRpb25Nb2RlOiBjcmVhdGlvbk1vZGUsXG5cdFx0Y3JlYXRpb25EaWFsb2dGaWVsZHM6XG5cdFx0XHRjcmVhdGlvbk1vZGUgPT09IENyZWF0aW9uTW9kZS5DcmVhdGlvbkRpYWxvZ1xuXHRcdFx0XHQ/IGdldEZpZWxkTGlzdCh0YWJsZVNldHRpbmdzLmNyZWF0aW9uTW9kZT8uY3JlYXRpb25GaWVsZHMsIGNvbnZlcnRlckNvbnRleHQpXG5cdFx0XHRcdDogdW5kZWZpbmVkLFxuXHRcdGN1c3RvbVZhbGlkYXRpb25GdW5jdGlvbjogY3VzdG9tVmFsaWRhdGlvbkZ1bmN0aW9uLFxuXHRcdGhhc0RhdGFTdGF0ZUluZGljYXRvckZpbHRlcjogdGVtcGxhdGVUeXBlID09PSBUZW1wbGF0ZVR5cGUuTGlzdFJlcG9ydCxcblx0XHQvLyBpZiBhIGN1c3RvbSB2YWxpZGF0aW9uIGZ1bmN0aW9uIGlzIHByb3ZpZGVkLCBkaXNhYmxlQWRkUm93QnV0dG9uRm9yRW1wdHlEYXRhIHNob3VsZCBub3QgYmUgY29uc2lkZXJlZCwgaS5lLiBzZXQgdG8gZmFsc2Vcblx0XHRkaXNhYmxlQWRkUm93QnV0dG9uRm9yRW1wdHlEYXRhOiAhY3VzdG9tVmFsaWRhdGlvbkZ1bmN0aW9uID8gISF0YWJsZVNldHRpbmdzLmNyZWF0aW9uTW9kZT8uZGlzYWJsZUFkZFJvd0J1dHRvbkZvckVtcHR5RGF0YSA6IGZhbHNlLFxuXHRcdGVuYWJsZUF1dG9Db2x1bW5XaWR0aDogZW5hYmxlQXV0b0NvbHVtbldpZHRoLFxuXHRcdGVuYWJsZVBhc3RpbmdPZkNvbXB1dGVkUHJvcGVydGllczogdGFibGVTZXR0aW5ncy5lbmFibGVQYXN0aW5nT2ZDb21wdXRlZFByb3BlcnRpZXMsXG5cdFx0aWdub3JlZEZpZWxkczogdGFibGVTZXR0aW5ncy5pZ25vcmVkRmllbGRzLFxuXHRcdHJlYWRPbmx5OiB0YWJsZVNldHRpbmdzLnJlYWRPbmx5LFxuXHRcdGVuYWJsZUV4cG9ydDogX2dldEVuYWJsZUV4cG9ydCh0YWJsZVNldHRpbmdzLCBjb252ZXJ0ZXJDb250ZXh0LCBlbmFibGVQYXN0ZSksXG5cdFx0YW5hbHl0aWNhbENvbmZpZ3VyYXRpb24sXG5cdFx0ZnJvemVuQ29sdW1uQ291bnQ6IF9nZXRGcm96ZW5Db2x1bW5Db3VudCh0YWJsZVNldHRpbmdzKSxcblx0XHR3aWR0aEluY2x1ZGluZ0NvbHVtbkhlYWRlcjogX2dldFdpZHRoSW5jbHVkaW5nQ29sdW1uSGVhZGVyKHRhYmxlU2V0dGluZ3MpLFxuXHRcdGVuYWJsZUZ1bGxTY3JlZW46IF9nZXRGdWxsU2NyZWVuQmFzZWRPbkRldmljZSh0YWJsZVNldHRpbmdzLCBjb252ZXJ0ZXJDb250ZXh0LCBfbWFuaWZlc3RXcmFwcGVyLmlzUGhvbmUoKSksXG5cdFx0bWFzc0VkaXQ6IGdldE1hc3NFZGl0U2V0dGluZ3ModGFibGVTZXR0aW5ncywgY29udmVydGVyQ29udGV4dCksXG5cdFx0ZW5hYmxlQWRkQ2FyZFRvSW5zaWdodHM6IHRhYmxlU2V0dGluZ3M/LmVuYWJsZUFkZENhcmRUb0luc2lnaHRzLFxuXHRcdGVuYWJsZVBhc3RlOiBlbmFibGVQYXN0ZSxcblx0XHRkaXNhYmxlQ29weVRvQ2xpcGJvYXJkOiBkaXNhYmxlQ29weVRvQ2xpcGJvYXJkLFxuXHRcdGhlYWRlclZpc2libGU6IHRydWUsXG5cdFx0aGVhZGVyOiB0YWJsZVNldHRpbmdzLmhlYWRlcixcblx0XHRtdWx0aVNlbGVjdE1vZGU6IF9nZXRNdWx0aVNlbGVjdE1vZGUodGFibGVTZXR0aW5ncywgdGFibGVUeXBlLCBjb252ZXJ0ZXJDb250ZXh0KSxcblx0XHRzZWxlY3Rpb25MaW1pdDogX2dldFRhYmxlU2VsZWN0aW9uTGltaXQodGFibGVTZXR0aW5ncyksXG5cdFx0aW5saW5lQ3JlYXRpb25Sb3dDb3VudDogX2dldFRhYmxlSW5saW5lQ3JlYXRpb25Sb3dDb3VudCh0YWJsZVNldHRpbmdzKSxcblx0XHRpbmxpbmVDcmVhdGlvblJvd3NIaWRkZW5JbkVkaXRNb2RlOiBpbmxpbmVDcmVhdGlvblJvd3NIaWRkZW5JbkVkaXRNb2RlLFxuXHRcdHNob3dSb3dDb3VudDogdGFibGVTZXR0aW5ncz8ucXVpY2tWYXJpYW50U2VsZWN0aW9uPy5wYXRocyA/IGZhbHNlIDogIV9tYW5pZmVzdFdyYXBwZXIuZ2V0Vmlld0NvbmZpZ3VyYXRpb24oKT8uc2hvd0NvdW50cyxcblx0XHR0eXBlOiB0YWJsZVR5cGUsXG5cdFx0ZGlzYWJsZVJlcXVlc3RDYWNoZTogZ2V0T3B0aW1pc3RpY0JhdGNoU2V0dGluZ3NGcm9tTWFuaWZlc3QodGFibGVNYW5pZmVzdFNldHRpbmdzKSxcblx0XHR1c2VDb25kZW5zZWRUYWJsZUxheW91dDogY29uZGVuc2VkVGFibGVMYXlvdXQgJiYgaXNDb25kZW5zZWRUYWJsZUxheW91dENvbXBsaWFudCxcblx0XHRpc0NvbXBhY3RUeXBlOiBfbWFuaWZlc3RXcmFwcGVyLmlzQ29tcGFjdFR5cGUoKSxcblx0XHRleHBvcnRSZXF1ZXN0U2l6ZTogZXhwb3J0UmVxdWVzdFNpemUsXG5cdFx0ZW5hYmxlVXBsb2FkUGx1Z2luOiAhIWNvbnZlcnRlckNvbnRleHQuZ2V0QW5ub3RhdGlvbkVudGl0eVR5cGUoKS5hbm5vdGF0aW9ucz8uVUk/Lk1lZGlhUmVzb3VyY2U/LlN0cmVhbSxcblx0XHRtb2RlRm9yTm9EYXRhTWVzc2FnZTogdXNlVGV4dEZvck5vRGF0YU1lc3NhZ2VzLFxuXHRcdHNjcm9sbFRocmVzaG9sZDogdGFibGVTZXR0aW5ncy5zY3JvbGxUaHJlc2hvbGQgPz8gZGVmYXVsdFNjcm9sbFRocmVzaG9sZFxuXHR9O1xuXG5cdGNvbnN0IHRhYmxlQ29uZmlndXJhdGlvbjogVGFibGVDb250cm9sQ29uZmlndXJhdGlvbiA9IHsgLi4ub0NvbmZpZ3VyYXRpb24sIC4uLnRhYmxlUm93TW9kZSwgLi4ub0ZpbHRlckNvbmZpZ3VyYXRpb24gfTtcblx0dGFibGVDb25maWd1cmF0aW9uLmJlZm9yZVJlYmluZFRhYmxlID0gdGFibGVTZXR0aW5ncy5iZWZvcmVSZWJpbmRUYWJsZTtcblx0dGFibGVDb25maWd1cmF0aW9uLnNlbGVjdGlvbkNoYW5nZSA9IHRhYmxlU2V0dGluZ3Muc2VsZWN0aW9uQ2hhbmdlO1xuXHR0YWJsZUNvbmZpZ3VyYXRpb24ucm93UHJlc3MgPSB0YWJsZVNldHRpbmdzLnJvd1ByZXNzO1xuXHRpZiAodGFibGVUeXBlID09PSBcIlRyZWVUYWJsZVwiKSB7XG5cdFx0dXBkYXRlVHJlZVRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uKHRhYmxlQ29uZmlndXJhdGlvbiwgdGFibGVTZXR0aW5ncywgY29udmVydGVyQ29udGV4dCk7XG5cdH1cblxuXHRpZiAodGFibGVTZXR0aW5ncy5oZWFkZXJWaXNpYmxlICE9PSB1bmRlZmluZWQpIHtcblx0XHR0YWJsZUNvbmZpZ3VyYXRpb24uaGVhZGVyVmlzaWJsZSA9IHRhYmxlU2V0dGluZ3MuaGVhZGVyVmlzaWJsZTtcblx0fVxuXG5cdGlmICh0YWJsZUNvbmZpZ3VyYXRpb24uY3JlYXRpb25Nb2RlID09PSBDcmVhdGlvbk1vZGUuRXh0ZXJuYWwpIHtcblx0XHR0YWJsZUNvbmZpZ3VyYXRpb24ub3V0Ym91bmRDcmVhdGlvbiA9IHRhYmxlU2V0dGluZ3MuY3JlYXRpb25Nb2RlPy5vdXRib3VuZDtcblx0fVxuXG5cdHJldHVybiB0YWJsZUNvbmZpZ3VyYXRpb247XG59XG5cbmZ1bmN0aW9uIGdldFRhYmxlVHlwZShcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+LFxuXHR0YWJsZU1hbmlmZXN0U2V0dGluZ3M/OiBUYWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvblxuKTogVGFibGVUeXBlIHtcblx0aWYgKHRhYmxlTWFuaWZlc3RTZXR0aW5ncz8udGFibGVTZXR0aW5ncz8udHlwZSkge1xuXHRcdC8vIGluIGNhc2UgdGhlIGFwcGxpY2F0aW9uIHNwZWNpZmllZCBhIHRhYmxlIHR5cGUgd2Ugd2lsbCB1c2UgdGhpcyBvbmVcblx0XHRyZXR1cm4gdGFibGVNYW5pZmVzdFNldHRpbmdzLnRhYmxlU2V0dGluZ3MudHlwZTtcblx0fVxuXG5cdC8vIGRlZmF1bHQgaXMgdGhlIFJlc3BvbnNpdmVUYWJsZVxuXHRyZXR1cm4gXCJSZXNwb25zaXZlVGFibGVcIjtcbn1cblxuZXhwb3J0IGRlZmF1bHQge1xuXHRnZXRUYWJsZUFjdGlvbnMsXG5cdGNyZWF0ZVRhYmxlVmlzdWFsaXphdGlvbixcblx0Y3JlYXRlRGVmYXVsdFRhYmxlVmlzdWFsaXphdGlvbixcblx0Z2V0Q2FwYWJpbGl0eVJlc3RyaWN0aW9uLFxuXHRnZXRTZWxlY3Rpb25Nb2RlLFxuXHRnZXRQMTNuTW9kZSxcblx0Z2V0U3RhbmRhcmRBY3Rpb25zQ29uZmlndXJhdGlvbixcblx0Z2V0VGFibGVBbm5vdGF0aW9uQ29uZmlndXJhdGlvbixcblx0c3BsaXRQYXRoLFxuXHRnZXRTZWxlY3Rpb25WYXJpYW50Q29uZmlndXJhdGlvbixcblx0Z2V0VGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24sXG5cdHVwZGF0ZVRhYmxlVmlzdWFsaXphdGlvbkZvclR5cGUsXG5cdGNyZWF0ZVJlcXVlc3RlZFByb3BlcnRpZXMsXG5cdGdldE5hdmlnYXRpb25UYXJnZXRQYXRoLFxuXHRnZXRDdXN0b21GdW5jdGlvbkluZm9cbn07XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7RUFtRkE7RUFFQTtFQXFKQTtBQUNBO0FBQ0E7O0VBWUE7QUFDQTtBQUNBOztFQTZHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDTyxTQUFTQSxlQUFlQSxDQUM5QkMsa0JBQTRCLEVBQzVCQyxpQkFBeUIsRUFDekJDLGdCQUF5RCxFQUN6REMsZUFBZ0UsRUFDaEVDLGtCQUFvRCxFQUNuQztJQUNqQjtJQUNBLE1BQU1DLHNCQUFzQixHQUFHQyxXQUFXLENBQUNDLGlEQUFpRCxDQUFDTCxnQkFBZ0IsQ0FBQztJQUU5RyxNQUFNTSxZQUFZLEdBQUdDLHlCQUF5QixDQUFDVCxrQkFBa0IsRUFBRUMsaUJBQWlCLEVBQUVDLGdCQUFnQixDQUFDO0lBQ3ZHO0lBQ0EsTUFBTVEsZUFBZSxHQUFHQyxzQkFBc0IsQ0FDN0NULGdCQUFnQixDQUFDVSwrQkFBK0IsQ0FBNkJYLGlCQUFpQixDQUFDLENBQUNZLE9BQU8sRUFJdkdYLGdC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