@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
@@ -20,6 +20,8 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/core/conver
20
20
  var KeyHelper = Key.KeyHelper;
21
21
  var insertCustomElements = ConfigurableObject.insertCustomElements;
22
22
  var OverrideType = ConfigurableObject.OverrideType;
23
+ var isMenuAIOperation = Action.isMenuAIOperation;
24
+ var isActionAIOperation = Action.isActionAIOperation;
23
25
  var getActionsFromManifest = Action.getActionsFromManifest;
24
26
  var isDataFieldForActionAbstract = DataField.isDataFieldForActionAbstract;
25
27
  var not = BindingToolkit.not;
@@ -51,7 +53,8 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/core/conver
51
53
  type: ActionType.DataFieldForAction,
52
54
  annotationPath: converterContext.getEntitySetBasedAnnotationPath(dataField.fullyQualifiedName),
53
55
  key,
54
- visible: getCompileExpressionForAction(dataField, converterContext)
56
+ visible: getCompileExpressionForAction(dataField, converterContext),
57
+ isAIOperation: isActionAIOperation(dataField) === true || undefined
55
58
  });
56
59
  }
57
60
  break;
@@ -72,7 +75,8 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/core/conver
72
75
  text: dataField.Label?.toString(),
73
76
  visible: getCompileExpressionForAction(dataField, converterContext),
74
77
  menu: dataField.Actions.map(action => getDataFieldAnnotationAction(action, converterContext)),
75
- key: KeyHelper.generateKeyFromDataField(dataField)
78
+ key: KeyHelper.generateKeyFromDataField(dataField),
79
+ isAIOperation: isMenuAIOperation(dataField.Actions) === true || undefined
76
80
  });
77
81
  }
78
82
  });
@@ -303,6 +307,18 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/core/conver
303
307
  headerVisible
304
308
  } = getHeaderInfo(visualizationPath, converterContext);
305
309
  const selectionMode = getSelectionMode(visualizationPath, converterContext);
310
+ const chartDimensionKeyAndRole = [];
311
+ chartAnnotation?.DimensionAttributes?.forEach(dimensionAttribute => {
312
+ const obj = {};
313
+ obj[dimensionAttribute?.Dimension?.value] = dimensionAttribute?.Role;
314
+ chartDimensionKeyAndRole.push(obj);
315
+ });
316
+ const chartMeasureKeyAndRole = [];
317
+ chartAnnotation?.MeasureAttributes?.forEach(measureAttribute => {
318
+ const obj = {};
319
+ obj[measureAttribute?.Measure?.value] = measureAttribute?.Role;
320
+ chartMeasureKeyAndRole.push({});
321
+ });
306
322
  return {
307
323
  type: VisualizationType.Chart,
308
324
  id: qualifier ? getChartID(isEntitySet ? entityName : navigationPropertyPath, qualifier, VisualizationType.Chart) : getChartID(isEntitySet ? entityName : navigationPropertyPath, VisualizationType.Chart),
@@ -330,7 +346,9 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/core/conver
330
346
  isParameterizedEntitySet: isParameterizedEntitySet,
331
347
  header: header,
332
348
  headerVisible: headerVisible,
333
- selectionMode: selectionMode
349
+ selectionMode: selectionMode,
350
+ chartDimensionKeyAndRole: chartDimensionKeyAndRole,
351
+ chartMeasureKeyAndRole: chartMeasureKeyAndRole
334
352
  };
335
353
  }
336
354
  /**
@@ -427,4 +445,4 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/core/conver
427
445
  _exports.createBlankChartVisualization = createBlankChartVisualization;
428
446
  return _exports;
429
447
  }, false);
430
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJnZXRDaGFydEFjdGlvbnNGcm9tQW5ub3RhdGlvbnMiLCJjaGFydEFubm90YXRpb24iLCJ2aXN1YWxpemF0aW9uUGF0aCIsImNvbnZlcnRlckNvbnRleHQiLCJjaGFydEFjdGlvbnMiLCJBY3Rpb25zIiwiZm9yRWFjaCIsImRhdGFGaWVsZCIsImtleSIsIktleUhlbHBlciIsImdlbmVyYXRlS2V5RnJvbURhdGFGaWVsZCIsImlzRGF0YUZpZWxkRm9yQWN0aW9uQWJzdHJhY3QiLCJJbmxpbmUiLCJEZXRlcm1pbmluZyIsIiRUeXBlIiwiQWN0aW9uVGFyZ2V0IiwiaXNCb3VuZCIsInB1c2giLCJ0eXBlIiwiQWN0aW9uVHlwZSIsIkRhdGFGaWVsZEZvckFjdGlvbiIsImFubm90YXRpb25QYXRoIiwiZ2V0RW50aXR5U2V0QmFzZWRBbm5vdGF0aW9uUGF0aCIsImZ1bGx5UXVhbGlmaWVkTmFtZSIsInZpc2libGUiLCJnZXRDb21waWxlRXhwcmVzc2lvbkZvckFjdGlvbiIsIkRhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbiIsImlzTmF2aWdhYmxlIiwiaXNBbm5vdGF0aW9uQWN0aW9uR3JvdXAiLCJNZW51IiwidGV4dCIsIkxhYmVsIiwidG9TdHJpbmciLCJtZW51IiwibWFwIiwiYWN0aW9uIiwiZ2V0RGF0YUZpZWxkQW5ub3RhdGlvbkFjdGlvbiIsImdldENoYXJ0QWN0aW9ucyIsImFBbm5vdGF0aW9uQWN0aW9ucyIsIm1hbmlmZXN0QWN0aW9ucyIsImdldEFjdGlvbnNGcm9tTWFuaWZlc3QiLCJnZXRNYW5pZmVzdENvbnRyb2xDb25maWd1cmF0aW9uIiwiYWN0aW9ucyIsImFjdGlvbk92ZXJ3cml0ZUNvbmZpZyIsImVuYWJsZWQiLCJPdmVycmlkZVR5cGUiLCJvdmVyd3JpdGUiLCJlbmFibGVPblNlbGVjdCIsImNvbW1hbmQiLCJwb3NpdGlvbiIsImluc2VydEN1c3RvbUVsZW1lbnRzIiwiY29tbWFuZEFjdGlvbnMiLCJfZXhwb3J0cyIsImdldFAxM25Nb2RlIiwibWFuaWZlc3RXcmFwcGVyIiwiZ2V0TWFuaWZlc3RXcmFwcGVyIiwiY2hhcnRNYW5pZmVzdFNldHRpbmdzIiwidmFyaWFudE1hbmFnZW1lbnQiLCJnZXRWYXJpYW50TWFuYWdlbWVudCIsImFQZXJzb25hbGl6YXRpb24iLCJwZXJzb25hbGl6YXRpb24iLCJjaGFydFNldHRpbmdzIiwiaXNDb250cm9sVmFyaWFudCIsIlZhcmlhbnRNYW5hZ2VtZW50VHlwZSIsIkNvbnRyb2wiLCJ1bmRlZmluZWQiLCJpdGVtIiwic29ydCIsImZpbHRlciIsImpvaW4iLCJnZXRIZWFkZXJJbmZvIiwiaGVhZGVyIiwiaGVhZGVyVmlzaWJsZSIsImdldFNlbGVjdGlvbk1vZGUiLCJzZWxlY3Rpb25Nb2RlIiwiZ2V0QWdncmVnYXRhYmxlUHJvcGVydGllc09iamVjdCIsImFnZ1Byb3AiLCJvYmoiLCJQcm9wZXJ0eSIsIiRQcm9wZXJ0eVBhdGgiLCJ2YWx1ZSIsIm5hbWUiLCJjcmVhdGVDaGFydFZpc3VhbGl6YXRpb24iLCJkb05vdENoZWNrQXBwbHlTdXBwb3J0ZWQiLCJzZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50UGF0aCIsImFnZ3JlZ2F0aW9uSGVscGVyIiwiQWdncmVnYXRpb25IZWxwZXIiLCJnZXRFbnRpdHlUeXBlIiwiaXNBbmFseXRpY3NTdXBwb3J0ZWQiLCJFcnJvciIsImFUcmFuc0FnZ3JlZ2F0aW9ucyIsImdldFRyYW5zQWdncmVnYXRpb25zIiwiYUN1c3RvbUFnZ3JlZ2F0ZXMiLCJnZXRDdXN0b21BZ2dyZWdhdGVEZWZpbml0aW9ucyIsInBhZ2VNYW5pZmVzdFNldHRpbmdzIiwicDEzbk1vZGUiLCJMb2ciLCJ3YXJuaW5nIiwibUN1c3RvbUFnZ3JlZ2F0ZXMiLCJlbnRpdHlUeXBlIiwiY3VzdG9tQWdncmVnYXRlIiwiYUNvbnRleHREZWZpbmluZ1Byb3BlcnRpZXMiLCJhbm5vdGF0aW9ucyIsIkFnZ3JlZ2F0aW9uIiwiQ29udGV4dERlZmluaW5nUHJvcGVydGllcyIsInF1YWxpZmllciIsInJlbGF0ZWRDdXN0b21BZ2dyZWdhdGVQcm9wZXJ0eSIsImVudGl0eVByb3BlcnRpZXMiLCJmaW5kIiwicHJvcGVydHkiLCJsYWJlbCIsIkNvbW1vbiIsInNvcnRhYmxlIiwic29ydE9yZGVyIiwiY29udGV4dERlZmluaW5nUHJvcGVydHkiLCJvQ3R4RGVmUHJvcGVydHkiLCJtVHJhbnNBZ2dyZWdhdGlvbnMiLCJvUmVzb3VyY2VCdW5kbGVDb3JlIiwiTGlicmFyeSIsImdldFJlc291cmNlQnVuZGxlRm9yIiwiZWxlbWVudCIsIk5hbWUiLCJwcm9wZXJ0eVBhdGgiLCJBZ2dyZWdhdGFibGVQcm9wZXJ0eSIsImFnZ3JlZ2F0aW9uTWV0aG9kIiwiQWdncmVnYXRpb25NZXRob2QiLCJnZXRUZXh0IiwiY3VzdG9tIiwiYUFnZ1Byb3BzIiwiZ2V0QWdncmVnYXRhYmxlUHJvcGVydGllcyIsImFHcnBQcm9wcyIsImdldEdyb3VwYWJsZVByb3BlcnRpZXMiLCJtQXBwbHlTdXBwb3J0ZWQiLCJBZ2dyZWdhdGFibGVQcm9wZXJ0aWVzIiwiR3JvdXBhYmxlUHJvcGVydGllcyIsInByb3AiLCJuYXZpZ2F0aW9uUHJvcGVydHlQYXRoIiwic3BsaXQiLCJsYXN0SW5kZXhPZiIsImxlbmd0aCIsInN1YnN0cmluZyIsInRpdGxlIiwiVGl0bGUiLCJkYXRhTW9kZWxQYXRoIiwiZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCIsImlzRW50aXR5U2V0IiwiZW50aXR5TmFtZSIsInRhcmdldEVudGl0eVNldCIsInN0YXJ0aW5nRW50aXR5U2V0Iiwic0ZpbHRlcmJhcklkIiwiZ2V0RmlsdGVyQmFySUQiLCJnZXRDb250ZXh0UGF0aCIsIm9WaXpQcm9wZXJ0aWVzIiwicGxvdEFyZWEiLCJ3aW5kb3ciLCJzdGFydCIsImVuZCIsImxlZ2VuZEdyb3VwIiwibGF5b3V0IiwiYXV0b0JpbmRPbkluaXQiLCJnZXRUZW1wbGF0ZVR5cGUiLCJUZW1wbGF0ZVR5cGUiLCJPYmplY3RQYWdlIiwiTGlzdFJlcG9ydCIsIkFuYWx5dGljYWxMaXN0UGFnZSIsImhhc011bHRpcGxlVmlzdWFsaXphdGlvbnMiLCJvblNlZ21lbnRlZEJ1dHRvblByZXNzZWQiLCJhbGxvd2VkVHJhbnNmb3JtYXRpb25zIiwiZ2V0QWxsb3dlZFRyYW5zZm9ybWF0aW9ucyIsImVuYWJsZVNlYXJjaCIsImluY2x1ZGVzIiwiaXNJbnNpZ2h0c1Zpc2libGUiLCJnZXRJbnNpZ2h0c1Zpc2liaWxpdHkiLCJpc1BhcmFtZXRlcml6ZWRFbnRpdHlTZXQiLCJnZXRQYXJhbWV0ZXJFbnRpdHlUeXBlIiwiaXNJbnNpZ2h0c0VuYWJsZWQiLCJhbmQiLCJnZXRJbnNpZ2h0c0VuYWJsZW1lbnQiLCJWaXN1YWxpemF0aW9uVHlwZSIsIkNoYXJ0IiwiaWQiLCJnZXRDaGFydElEIiwiY29sbGVjdGlvbiIsImdldFRhcmdldE9iamVjdFBhdGgiLCJhcGlJZCIsImdlbmVyYXRlIiwibmF2aWdhdGlvblBhdGgiLCJnZXRBYnNvbHV0ZUFubm90YXRpb25QYXRoIiwiZmlsdGVySWQiLCJ2aXpQcm9wZXJ0aWVzIiwiSlNPTiIsInN0cmluZ2lmeSIsImN1c3RvbUFnZyIsInRyYW5zQWdnIiwiYXBwbHlTdXBwb3J0ZWQiLCJmaW5kVmFyaWFudE1hbmFnZW1lbnQiLCJOb25lIiwiY3JlYXRlQ2hhcnRWaXN1YWxpemF0aW9uRm9yVGVtcGxhdGluZyIsInZpc3VhbGl6YXRpb24iLCJjb21waWxlRXhwcmVzc2lvbiIsIm5vdCIsImVxdWFsIiwiZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uIiwiVUkiLCJIaWRkZW4iLCJnZXRSZWxhdGl2ZU1vZGVsUGF0aEZ1bmN0aW9uIiwiY3JlYXRlQmxhbmtDaGFydFZpc3VhbGl6YXRpb24iLCJtdWx0aVZpZXdzIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJDaGFydC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFByb3BlcnR5LCBQcm9wZXJ0eVBhdGggfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXNcIjtcbmltcG9ydCB0eXBlIHsgQWdncmVnYXRhYmxlUHJvcGVydHlUeXBlLCBBZ2dyZWdhdGlvbk1ldGhvZCB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvQWdncmVnYXRpb25cIjtcbmltcG9ydCB7IEFnZ3JlZ2F0aW9uQW5ub3RhdGlvblR5cGVzIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9BZ2dyZWdhdGlvblwiO1xuaW1wb3J0IHR5cGUge1xuXHRDaGFydCxcblx0RGF0YUZpZWxkQWJzdHJhY3RUeXBlcyxcblx0RGF0YUZpZWxkRm9yQWN0aW9uR3JvdXAsXG5cdERhdGFGaWVsZEZvckFjdGlvbkdyb3VwVHlwZXMsXG5cdERhdGFGaWVsZEZvckFjdGlvblR5cGVzXG59IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvVUlcIjtcbmltcG9ydCB7IFVJQW5ub3RhdGlvblR5cGVzIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9VSVwiO1xuaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgdHlwZSB7IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIH0gZnJvbSBcInNhcC9mZS9iYXNlL0JpbmRpbmdUb29sa2l0XCI7XG5pbXBvcnQgeyBhbmQsIGNvbXBpbGVFeHByZXNzaW9uLCBlcXVhbCwgZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uLCBub3QsIHR5cGUgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIH0gZnJvbSBcInNhcC9mZS9iYXNlL0JpbmRpbmdUb29sa2l0XCI7XG5pbXBvcnQgdHlwZSB7IFBhZ2VDb250ZXh0UGF0aFRhcmdldCB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL1RlbXBsYXRlQ29udmVydGVyXCI7XG5pbXBvcnQgeyBpc0RhdGFGaWVsZEZvckFjdGlvbkFic3RyYWN0IH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvYW5ub3RhdGlvbnMvRGF0YUZpZWxkXCI7XG5pbXBvcnQgdHlwZSB7XG5cdEFubm90YXRpb25BY3Rpb24sXG5cdEFubm90YXRpb25BY3Rpb25BY3Rpb25Hcm91cCxcblx0QmFzZUFjdGlvbixcblx0Q29tYmluZWRBY3Rpb24sXG5cdEN1c3RvbUFjdGlvbixcblx0T3ZlcnJpZGVUeXBlQWN0aW9uXG59IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0NvbW1vbi9BY3Rpb25cIjtcbmltcG9ydCB7IGdldEFjdGlvbnNGcm9tTWFuaWZlc3QgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9Db21tb24vQWN0aW9uXCI7XG5pbXBvcnQgeyBPdmVycmlkZVR5cGUsIGluc2VydEN1c3RvbUVsZW1lbnRzIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvaGVscGVycy9Db25maWd1cmFibGVPYmplY3RcIjtcbmltcG9ydCB7IEtleUhlbHBlciB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2hlbHBlcnMvS2V5XCI7XG5pbXBvcnQgeyBnZW5lcmF0ZSB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1N0YWJsZUlkSGVscGVyXCI7XG5pbXBvcnQgeyBnZXRUYXJnZXRPYmplY3RQYXRoIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvRGF0YU1vZGVsUGF0aEhlbHBlclwiO1xuaW1wb3J0IExpYnJhcnkgZnJvbSBcInNhcC91aS9jb3JlL0xpYlwiO1xuaW1wb3J0IHR5cGUgeyBFeHBhbmRQYXRoVHlwZSB9IGZyb20gXCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi90eXBlcy9tZXRhbW9kZWxfdHlwZXNcIjtcbmltcG9ydCB0eXBlIENvbnZlcnRlckNvbnRleHQgZnJvbSBcIi4uLy4uL0NvbnZlcnRlckNvbnRleHRcIjtcbmltcG9ydCB0eXBlIHsgQ2hhcnRNYW5pZmVzdENvbmZpZ3VyYXRpb24sIE1hbmlmZXN0QWN0aW9uIH0gZnJvbSBcIi4uLy4uL01hbmlmZXN0U2V0dGluZ3NcIjtcbmltcG9ydCB7IEFjdGlvblR5cGUsIFRlbXBsYXRlVHlwZSwgVmFyaWFudE1hbmFnZW1lbnRUeXBlLCBWaXN1YWxpemF0aW9uVHlwZSB9IGZyb20gXCIuLi8uLi9NYW5pZmVzdFNldHRpbmdzXCI7XG5pbXBvcnQgdHlwZSBNYW5pZmVzdFdyYXBwZXIgZnJvbSBcIi4uLy4uL01hbmlmZXN0V3JhcHBlclwiO1xuaW1wb3J0IHsgQWdncmVnYXRpb25IZWxwZXIgfSBmcm9tIFwiLi4vLi4vaGVscGVycy9BZ2dyZWdhdGlvblwiO1xuaW1wb3J0IHsgZ2V0Q2hhcnRJRCwgZ2V0RmlsdGVyQmFySUQgfSBmcm9tIFwiLi4vLi4vaGVscGVycy9JRFwiO1xuaW1wb3J0IHsgZ2V0SW5zaWdodHNFbmFibGVtZW50LCBnZXRJbnNpZ2h0c1Zpc2liaWxpdHkgfSBmcm9tIFwiLi4vLi4vaGVscGVycy9JbnNpZ2h0c0hlbHBlcnNcIjtcbmltcG9ydCB0eXBlIHsgQWN0dWFsVmlzdWFsaXphdGlvbkFubm90YXRpb25zIH0gZnJvbSBcIi4vRGF0YVZpc3VhbGl6YXRpb25cIjtcblxuZXhwb3J0IHR5cGUgQ2hhcnRBcHBseVN1cHBvcnRlZCA9IHtcblx0JFR5cGU6IHN0cmluZztcblx0ZW5hYmxlU2VhcmNoPzogYm9vbGVhbjtcblx0QWdncmVnYXRhYmxlUHJvcGVydGllcz86IChFeHBhbmRQYXRoVHlwZTxQcm9wZXJ0eVBhdGg+ICYgeyBQcm9wZXJ0eTogRXhwYW5kUGF0aFR5cGU8UHJvcGVydHlQYXRoPiB9KVtdO1xuXHRHcm91cGFibGVQcm9wZXJ0aWVzPzogKEV4cGFuZFBhdGhUeXBlPFByb3BlcnR5UGF0aD4gJiB7IFByb3BlcnR5OiBFeHBhbmRQYXRoVHlwZTxQcm9wZXJ0eVBhdGg+IH0pW107XG59O1xuZXhwb3J0IHR5cGUgQ2hhcnRUZW1wbGF0ZVZpc3VhbGl6YXRpb24gPSB7XG5cdHR5cGU6IFZpc3VhbGl6YXRpb25UeXBlLkNoYXJ0O1xuXHRpZDogc3RyaW5nO1xuXHRhcGlJZDogc3RyaW5nO1xuXHRlbnRpdHlOYW1lOiBzdHJpbmc7XG5cdGNvbGxlY3Rpb246IHN0cmluZztcblx0YW5ub3RhdGlvblBhdGg6IHN0cmluZztcblx0YXBwbHlTdXBwb3J0ZWQ6IENoYXJ0QXBwbHlTdXBwb3J0ZWQ7XG5cdGlzUGFyYW1ldGVyaXplZEVudGl0eVNldD86IGJvb2xlYW47XG59O1xuXG4vKipcbiAqIEB0eXBlZGVmIENoYXJ0VmlzdWFsaXphdGlvblxuICovXG5leHBvcnQgdHlwZSBDaGFydFZpc3VhbGl6YXRpb24gPSBDaGFydFRlbXBsYXRlVmlzdWFsaXphdGlvbiAmIHtcblx0ZW50aXR5TmFtZTogc3RyaW5nO1xuXHRwZXJzb25hbGl6YXRpb24/OiBzdHJpbmcgfCBib29sZWFuO1xuXHRuYXZpZ2F0aW9uUGF0aDogc3RyaW5nO1xuXHRmaWx0ZXJJZD86IHN0cmluZztcblx0dml6UHJvcGVydGllczogc3RyaW5nO1xuXHRhY3Rpb25zOiBCYXNlQWN0aW9uW107XG5cdGNvbW1hbmRBY3Rpb25zOiBSZWNvcmQ8c3RyaW5nLCBDdXN0b21BY3Rpb24+O1xuXHR0aXRsZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXHRhdXRvQmluZE9uSW5pdDogYm9vbGVhbiB8IHVuZGVmaW5lZDtcblx0b25TZWdtZW50ZWRCdXR0b25QcmVzc2VkOiBzdHJpbmc7XG5cdHZpc2libGU6IHN0cmluZztcblx0Y3VzdG9tQWdnOiBvYmplY3Q7XG5cdHRyYW5zQWdnOiBvYmplY3Q7XG5cdG11bHRpVmlld3M/OiBib29sZWFuO1xuXHR2YXJpYW50TWFuYWdlbWVudDogVmFyaWFudE1hbmFnZW1lbnRUeXBlO1xuXHRzZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50UGF0aD86IHN0cmluZztcblx0aXNJbnNpZ2h0c0VuYWJsZWQ/OiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj47XG5cdGlzSW5zaWdodHNWaXNpYmxlPzogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+O1xuXHRoZWFkZXI/OiBzdHJpbmc7XG5cdGhlYWRlclZpc2libGU/OiBib29sZWFuO1xuXHRzZWxlY3Rpb25Nb2RlPzogc3RyaW5nO1xufTtcblxuZXhwb3J0IHR5cGUgQ2hhcnRQMTNuVHlwZSA9IHN0cmluZyB8IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG5cbi8qKlxuICogTWV0aG9kIHRvIHJldHJpZXZlIGFsbCBjaGFydCBhY3Rpb25zIGZyb20gYW5ub3RhdGlvbnMuXG4gKiBAcGFyYW0gY2hhcnRBbm5vdGF0aW9uXG4gKiBAcGFyYW0gdmlzdWFsaXphdGlvblBhdGhcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcmV0dXJucyBUaGUgY2hhcnQgYWN0aW9ucyBmcm9tIHRoZSBhbm5vdGF0aW9uXG4gKi9cbmZ1bmN0aW9uIGdldENoYXJ0QWN0aW9uc0Zyb21Bbm5vdGF0aW9ucyhcblx0Y2hhcnRBbm5vdGF0aW9uOiBDaGFydCxcblx0dmlzdWFsaXphdGlvblBhdGg6IHN0cmluZyxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+XG4pOiBBcnJheTxBbm5vdGF0aW9uQWN0aW9uIHwgQW5ub3RhdGlvbkFjdGlvbkFjdGlvbkdyb3VwPiB7XG5cdGNvbnN0IGNoYXJ0QWN0aW9uczogQXJyYXk8QW5ub3RhdGlvbkFjdGlvbiB8IEFubm90YXRpb25BY3Rpb25BY3Rpb25Hcm91cD4gPSBbXTtcblx0aWYgKGNoYXJ0QW5ub3RhdGlvbj8uQWN0aW9ucykge1xuXHRcdGNoYXJ0QW5ub3RhdGlvbi5BY3Rpb25zLmZvckVhY2goKGRhdGFGaWVsZDogRGF0YUZpZWxkQWJzdHJhY3RUeXBlcyB8IERhdGFGaWVsZEZvckFjdGlvbkdyb3VwVHlwZXMpID0+IHtcblx0XHRcdGNvbnN0IGtleSA9IEtleUhlbHBlci5nZW5lcmF0ZUtleUZyb21EYXRhRmllbGQoZGF0YUZpZWxkKTtcblx0XHRcdGlmIChpc0RhdGFGaWVsZEZvckFjdGlvbkFic3RyYWN0KGRhdGFGaWVsZCkgJiYgIWRhdGFGaWVsZC5JbmxpbmUgJiYgIWRhdGFGaWVsZC5EZXRlcm1pbmluZykge1xuXHRcdFx0XHRzd2l0Y2ggKGRhdGFGaWVsZC4kVHlwZSkge1xuXHRcdFx0XHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQWN0aW9uOlxuXHRcdFx0XHRcdFx0aWYgKGRhdGFGaWVsZC5BY3Rpb25UYXJnZXQgJiYgIWRhdGFGaWVsZC5BY3Rpb25UYXJnZXQuaXNCb3VuZCkge1xuXHRcdFx0XHRcdFx0XHRjaGFydEFjdGlvbnMucHVzaCh7XG5cdFx0XHRcdFx0XHRcdFx0dHlwZTogQWN0aW9uVHlwZS5EYXRhRmllbGRGb3JBY3Rpb24sXG5cdFx0XHRcdFx0XHRcdFx0YW5ub3RhdGlvblBhdGg6IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0QmFzZWRBbm5vdGF0aW9uUGF0aChkYXRhRmllbGQuZnVsbHlRdWFsaWZpZWROYW1lKSxcblx0XHRcdFx0XHRcdFx0XHRrZXksXG5cdFx0XHRcdFx0XHRcdFx0dmlzaWJsZTogZ2V0Q29tcGlsZUV4cHJlc3Npb25Gb3JBY3Rpb24oZGF0YUZpZWxkLCBjb252ZXJ0ZXJDb250ZXh0KVxuXHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRcdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb246XG5cdFx0XHRcdFx0XHRjaGFydEFjdGlvbnMucHVzaCh7XG5cdFx0XHRcdFx0XHRcdHR5cGU6IEFjdGlvblR5cGUuRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uLFxuXHRcdFx0XHRcdFx0XHRhbm5vdGF0aW9uUGF0aDogY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXRCYXNlZEFubm90YXRpb25QYXRoKGRhdGFGaWVsZC5mdWxseVF1YWxpZmllZE5hbWUpLFxuXHRcdFx0XHRcdFx0XHRrZXksXG5cdFx0XHRcdFx0XHRcdHZpc2libGU6IGdldENvbXBpbGVFeHByZXNzaW9uRm9yQWN0aW9uKGRhdGFGaWVsZCwgY29udmVydGVyQ29udGV4dCksXG5cdFx0XHRcdFx0XHRcdGlzTmF2aWdhYmxlOiB0cnVlXG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGlmIChpc0Fubm90YXRpb25BY3Rpb25Hcm91cChkYXRhRmllbGQpKSB7XG5cdFx0XHRcdGNoYXJ0QWN0aW9ucy5wdXNoKHtcblx0XHRcdFx0XHR0eXBlOiBBY3Rpb25UeXBlLk1lbnUsXG5cdFx0XHRcdFx0dGV4dDogZGF0YUZpZWxkLkxhYmVsPy50b1N0cmluZygpLFxuXHRcdFx0XHRcdHZpc2libGU6IGdldENvbXBpbGVFeHByZXNzaW9uRm9yQWN0aW9uKGRhdGFGaWVsZCwgY29udmVydGVyQ29udGV4dCksXG5cdFx0XHRcdFx0bWVudTogZGF0YUZpZWxkLkFjdGlvbnMubWFwKChhY3Rpb24pID0+XG5cdFx0XHRcdFx0XHRnZXREYXRhRmllbGRBbm5vdGF0aW9uQWN0aW9uKGFjdGlvbiBhcyBEYXRhRmllbGRGb3JBY3Rpb25UeXBlcywgY29udmVydGVyQ29udGV4dClcblx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdGtleTogS2V5SGVscGVyLmdlbmVyYXRlS2V5RnJvbURhdGFGaWVsZChkYXRhRmllbGQpXG5cdFx0XHRcdH0gYXMgQW5ub3RhdGlvbkFjdGlvbkFjdGlvbkdyb3VwKTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXHRyZXR1cm4gY2hhcnRBY3Rpb25zO1xufVxuLyoqXG4gKiBDaGVja3MgaWYgdGhlIGRhdGFGaWVsZCBpcyBhIERhdGFGaWVsZEZvckFjdGlvbkdyb3VwLlxuICogQHBhcmFtIGRhdGFGaWVsZCBUaGUgZGF0YUZpZWxkIHRvIGNoZWNrLlxuICogQHJldHVybnMgVGhlIGRhdGFGaWVsZCBpZiBpdCBtYXRjaGVzIERhdGFGaWVsZEZvckFjdGlvbkdyb3VwLlxuICovXG5mdW5jdGlvbiBpc0Fubm90YXRpb25BY3Rpb25Hcm91cChkYXRhRmllbGQ6IERhdGFGaWVsZEFic3RyYWN0VHlwZXMpOiBkYXRhRmllbGQgaXMgRGF0YUZpZWxkRm9yQWN0aW9uR3JvdXAge1xuXHRyZXR1cm4gZGF0YUZpZWxkLiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JBY3Rpb25Hcm91cDtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGFuZCByZXR1cm5zIERhdGFGaWVsZEZvckFjdGlvbiBmb3IgbWVudSBvZiBEYXRhRmllbGRGb3JBY3Rpb25Hcm91cC5cbiAqIEBwYXJhbSBkYXRhRmllbGQgVGhlIGRhdGFmaWVsZCB0byBnZXQgdGhlIGFubm90YXRpb24gYWN0aW9uIGZyb20uXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dCBUaGUgY29udmVydGVyIGNvbnRleHQuXG4gKiBAcmV0dXJucyBBbiBhbm5vdGF0aW9uIGFjdGlvbi5cbiAqL1xuZnVuY3Rpb24gZ2V0RGF0YUZpZWxkQW5ub3RhdGlvbkFjdGlvbihcblx0ZGF0YUZpZWxkOiBEYXRhRmllbGRGb3JBY3Rpb25UeXBlcyxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+XG4pOiBBbm5vdGF0aW9uQWN0aW9uIHtcblx0cmV0dXJuIHtcblx0XHR0eXBlOiBBY3Rpb25UeXBlLkRhdGFGaWVsZEZvckFjdGlvbixcblx0XHRhbm5vdGF0aW9uUGF0aDogY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXRCYXNlZEFubm90YXRpb25QYXRoKGRhdGFGaWVsZC5mdWxseVF1YWxpZmllZE5hbWUpLFxuXHRcdGtleTogS2V5SGVscGVyLmdlbmVyYXRlS2V5RnJvbURhdGFGaWVsZChkYXRhRmllbGQpLFxuXHRcdHZpc2libGU6IGdldENvbXBpbGVFeHByZXNzaW9uRm9yQWN0aW9uKGRhdGFGaWVsZCwgY29udmVydGVyQ29udGV4dClcblx0fTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldENoYXJ0QWN0aW9ucyhcblx0Y2hhcnRBbm5vdGF0aW9uOiBDaGFydCxcblx0dmlzdWFsaXphdGlvblBhdGg6IHN0cmluZyxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+XG4pOiBDb21iaW5lZEFjdGlvbiB7XG5cdGNvbnN0IGFBbm5vdGF0aW9uQWN0aW9ucyA9IGdldENoYXJ0QWN0aW9uc0Zyb21Bbm5vdGF0aW9ucyhjaGFydEFubm90YXRpb24sIHZpc3VhbGl6YXRpb25QYXRoLCBjb252ZXJ0ZXJDb250ZXh0KTtcblx0Y29uc3QgbWFuaWZlc3RBY3Rpb25zID0gZ2V0QWN0aW9uc0Zyb21NYW5pZmVzdChcblx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0Q29udHJvbENvbmZpZ3VyYXRpb248Q2hhcnRNYW5pZmVzdENvbmZpZ3VyYXRpb24+KHZpc3VhbGl6YXRpb25QYXRoKS5hY3Rpb25zIGFzIFJlY29yZDxcblx0XHRcdHN0cmluZyxcblx0XHRcdE1hbmlmZXN0QWN0aW9uXG5cdFx0Pixcblx0XHRjb252ZXJ0ZXJDb250ZXh0LFxuXHRcdGFBbm5vdGF0aW9uQWN0aW9uc1xuXHQpO1xuXHRjb25zdCBhY3Rpb25PdmVyd3JpdGVDb25maWc6IE92ZXJyaWRlVHlwZUFjdGlvbiA9IHtcblx0XHRlbmFibGVkOiBPdmVycmlkZVR5cGUub3ZlcndyaXRlLFxuXHRcdGVuYWJsZU9uU2VsZWN0OiBPdmVycmlkZVR5cGUub3ZlcndyaXRlLFxuXHRcdHZpc2libGU6IE92ZXJyaWRlVHlwZS5vdmVyd3JpdGUsXG5cdFx0Y29tbWFuZDogT3ZlcnJpZGVUeXBlLm92ZXJ3cml0ZSxcblx0XHRwb3NpdGlvbjogT3ZlcnJpZGVUeXBlLm92ZXJ3cml0ZVxuXHR9O1xuXHRjb25zdCBjaGFydEFjdGlvbnMgPSBpbnNlcnRDdXN0b21FbGVtZW50czxCYXNlQWN0aW9uPihhQW5ub3RhdGlvbkFjdGlvbnMsIG1hbmlmZXN0QWN0aW9ucy5hY3Rpb25zLCBhY3Rpb25PdmVyd3JpdGVDb25maWcpO1xuXHRyZXR1cm4ge1xuXHRcdGFjdGlvbnM6IGNoYXJ0QWN0aW9ucyxcblx0XHRjb21tYW5kQWN0aW9uczogbWFuaWZlc3RBY3Rpb25zLmNvbW1hbmRBY3Rpb25zXG5cdH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRQMTNuTW9kZShcblx0dmlzdWFsaXphdGlvblBhdGg6IHN0cmluZyxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+XG4pOiBzdHJpbmcgfCBib29sZWFuIHwgdW5kZWZpbmVkIHtcblx0Y29uc3QgbWFuaWZlc3RXcmFwcGVyOiBNYW5pZmVzdFdyYXBwZXIgPSBjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0V3JhcHBlcigpO1xuXHRjb25zdCBjaGFydE1hbmlmZXN0U2V0dGluZ3M6IENoYXJ0TWFuaWZlc3RDb25maWd1cmF0aW9uID0gY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdENvbnRyb2xDb25maWd1cmF0aW9uKHZpc3VhbGl6YXRpb25QYXRoKTtcblx0Y29uc3QgdmFyaWFudE1hbmFnZW1lbnQ6IFZhcmlhbnRNYW5hZ2VtZW50VHlwZSA9IG1hbmlmZXN0V3JhcHBlci5nZXRWYXJpYW50TWFuYWdlbWVudCgpO1xuXHRjb25zdCBhUGVyc29uYWxpemF0aW9uOiBzdHJpbmdbXSA9IFtdO1xuXHQvLyBQZXJzb25hbGl6YXRpb24gY29uZmlndXJlZCBpbiBtYW5pZmVzdC5cblx0Y29uc3QgcGVyc29uYWxpemF0aW9uID0gY2hhcnRNYW5pZmVzdFNldHRpbmdzPy5jaGFydFNldHRpbmdzPy5wZXJzb25hbGl6YXRpb247XG5cdGNvbnN0IGlzQ29udHJvbFZhcmlhbnQgPSB2YXJpYW50TWFuYWdlbWVudCA9PT0gVmFyaWFudE1hbmFnZW1lbnRUeXBlLkNvbnRyb2wgPyB0cnVlIDogZmFsc2U7XG5cdC8vIGlmIHBlcnNvbmFsaXphdGlvbiBpcyBzZXQgdG8gZmFsc2UgZG8gbm90IHNob3cgYW55IG9wdGlvblxuXHRpZiAoKHBlcnNvbmFsaXphdGlvbiAhPT0gdW5kZWZpbmVkICYmICFwZXJzb25hbGl6YXRpb24pIHx8IHBlcnNvbmFsaXphdGlvbiA9PSBcImZhbHNlXCIpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblx0aWYgKHR5cGVvZiBwZXJzb25hbGl6YXRpb24gPT09IFwib2JqZWN0XCIpIHtcblx0XHQvLyBTcGVjaWZpYyBwZXJzb25hbGl6YXRpb24gb3B0aW9ucyBlbmFibGVkIGluIG1hbmlmZXN0LiBVc2UgdGhlbSBhcyBpcy5cblx0XHRpZiAocGVyc29uYWxpemF0aW9uLnR5cGUpIHtcblx0XHRcdGFQZXJzb25hbGl6YXRpb24ucHVzaChcIlR5cGVcIik7XG5cdFx0fVxuXHRcdGlmIChwZXJzb25hbGl6YXRpb24uaXRlbSkge1xuXHRcdFx0YVBlcnNvbmFsaXphdGlvbi5wdXNoKFwiSXRlbVwiKTtcblx0XHR9XG5cdFx0aWYgKHBlcnNvbmFsaXphdGlvbi5zb3J0KSB7XG5cdFx0XHRhUGVyc29uYWxpemF0aW9uLnB1c2goXCJTb3J0XCIpO1xuXHRcdH1cblx0XHRpZiAocGVyc29uYWxpemF0aW9uLmZpbHRlcikge1xuXHRcdFx0YVBlcnNvbmFsaXphdGlvbi5wdXNoKFwiRmlsdGVyXCIpO1xuXHRcdH1cblx0XHRyZXR1cm4gYVBlcnNvbmFsaXphdGlvbi5qb2luKFwiLFwiKTtcblx0fSBlbHNlIGlmIChpc0NvbnRyb2xWYXJpYW50IHx8ICEhcGVyc29uYWxpemF0aW9uKSB7XG5cdFx0Ly8gbWFuaWZlc3QgaGFzIHBlcnNvbmFsaXphdGlvbiBjb25maWd1cmVkLCBjaGVjayBpZiBpdCdzIHRydWVcblx0XHQvLyBpZiBtYW5pZmVzdCBkb2Vzbid0IGhhdmUgcGVyc29uYWxpemF0aW9uLCBjaGVjayBmb3IgdmFyaWFudCBtYW5hZ2VtZW50IGlzIHNldCB0byBjb250cm9sXG5cdFx0cmV0dXJuIFwiU29ydCxUeXBlLEl0ZW0sRmlsdGVyXCI7XG5cdH0gZWxzZSB7XG5cdFx0Ly8gaWYgbWFuaWZlc3QgZG9lc24ndCBoYXZlIHBlcnNvbmFsaXphdGlvbiwgc2hvdyBkZWZhdWx0IG9wdGlvbnMgd2l0aG91dCBmaWx0ZXJcblx0XHRyZXR1cm4gXCJTb3J0LFR5cGUsSXRlbVwiO1xuXHR9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRIZWFkZXJJbmZvKFxuXHR2aXN1YWxpemF0aW9uUGF0aDogc3RyaW5nLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD5cbik6IHsgaGVhZGVyOiBzdHJpbmcgfCB1bmRlZmluZWQ7IGhlYWRlclZpc2libGU6IGJvb2xlYW4gfCB1bmRlZmluZWQgfSB7XG5cdGNvbnN0IGNoYXJ0TWFuaWZlc3RTZXR0aW5nczogQ2hhcnRNYW5pZmVzdENvbmZpZ3VyYXRpb24gPSBjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0Q29udHJvbENvbmZpZ3VyYXRpb24odmlzdWFsaXphdGlvblBhdGgpO1xuXHRyZXR1cm4ge1xuXHRcdGhlYWRlcjogY2hhcnRNYW5pZmVzdFNldHRpbmdzLmNoYXJ0U2V0dGluZ3M/LmhlYWRlcixcblx0XHRoZWFkZXJWaXNpYmxlOiBjaGFydE1hbmlmZXN0U2V0dGluZ3M/LmNoYXJ0U2V0dGluZ3M/LmhlYWRlclZpc2libGVcblx0fTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFNlbGVjdGlvbk1vZGUoXG5cdHZpc3VhbGl6YXRpb25QYXRoOiBzdHJpbmcsXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0PlxuKTogXCJNdWx0aXBsZVwiIHwgXCJTaW5nbGVcIiB8IFwiTm9uZVwiIHwgdW5kZWZpbmVkIHtcblx0Y29uc3QgY2hhcnRNYW5pZmVzdFNldHRpbmdzOiBDaGFydE1hbmlmZXN0Q29uZmlndXJhdGlvbiA9IGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RDb250cm9sQ29uZmlndXJhdGlvbih2aXN1YWxpemF0aW9uUGF0aCk7XG5cdHJldHVybiBjaGFydE1hbmlmZXN0U2V0dGluZ3MuY2hhcnRTZXR0aW5ncz8uc2VsZWN0aW9uTW9kZTtcbn1cbmV4cG9ydCB0eXBlIENoYXJ0Q3VzdG9tQWdncmVnYXRlID0ge1xuXHRuYW1lOiBzdHJpbmc7XG5cdGxhYmVsOiBzdHJpbmc7XG5cdHNvcnRhYmxlOiBib29sZWFuO1xuXHRzb3J0T3JkZXI6IFwiYm90aFwiO1xuXHRjb250ZXh0RGVmaW5pbmdQcm9wZXJ0eTogc3RyaW5nW107XG59O1xuXG5leHBvcnQgdHlwZSBUcmFuc0FnZyA9IHtcblx0bmFtZTogc3RyaW5nO1xuXHRwcm9wZXJ0eVBhdGg6IHN0cmluZztcblx0YWdncmVnYXRpb25NZXRob2Q6IEFnZ3JlZ2F0aW9uTWV0aG9kO1xuXHRsYWJlbDogc3RyaW5nO1xuXHRzb3J0YWJsZTogYm9vbGVhbjtcblx0c29ydE9yZGVyOiBcImJvdGhcIjtcblx0Y3VzdG9tOiBib29sZWFuO1xufTtcbmZ1bmN0aW9uIGdldEFnZ3JlZ2F0YWJsZVByb3BlcnRpZXNPYmplY3QoYWdnUHJvcDogQWdncmVnYXRhYmxlUHJvcGVydHlUeXBlIHwgUHJvcGVydHkpOiB7IFByb3BlcnR5OiB7ICRQcm9wZXJ0eVBhdGg6IHN0cmluZyB9IH0ge1xuXHRsZXQgb2JqO1xuXHRpZiAoKGFnZ1Byb3AgYXMgQWdncmVnYXRhYmxlUHJvcGVydHlUeXBlKT8uUHJvcGVydHkpIHtcblx0XHRvYmogPSB7XG5cdFx0XHRQcm9wZXJ0eToge1xuXHRcdFx0XHQkUHJvcGVydHlQYXRoOiAoYWdnUHJvcCBhcyBBZ2dyZWdhdGFibGVQcm9wZXJ0eVR5cGUpPy5Qcm9wZXJ0eT8udmFsdWVcblx0XHRcdH1cblx0XHR9O1xuXHR9IGVsc2Uge1xuXHRcdG9iaiA9IHtcblx0XHRcdFByb3BlcnR5OiB7XG5cdFx0XHRcdCRQcm9wZXJ0eVBhdGg6IChhZ2dQcm9wIGFzIFByb3BlcnR5KT8ubmFtZVxuXHRcdFx0fVxuXHRcdH07XG5cdH1cblx0cmV0dXJuIG9iajtcbn1cbi8qKlxuICogQ3JlYXRlIHRoZSBDaGFydFZpc3VhbGl6YXRpb24gY29uZmlndXJhdGlvbiB0aGF0IHdpbGwgYmUgdXNlZCB0byBkaXNwbGF5IGEgY2hhcnQgdXNpbmcgdGhlIENoYXJ0IGJ1aWxkaW5nIGJsb2NrLlxuICogQHBhcmFtIGNoYXJ0QW5ub3RhdGlvbiBUaGUgdGFyZ2V0ZWQgY2hhcnQgYW5ub3RhdGlvblxuICogQHBhcmFtIHZpc3VhbGl6YXRpb25QYXRoIFRoZSBwYXRoIG9mIHRoZSB2aXN1YWxpemF0aW9uIGFubm90YXRpb25cbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBjb252ZXJ0ZXIgY29udGV4dFxuICogQHBhcmFtIGRvTm90Q2hlY2tBcHBseVN1cHBvcnRlZCBGbGFnIHRoYXQgaW5kaWNhdGVzIHdoZXRoZXIgQXBwbHlTdXBwb3J0ZWQgbmVlZHMgdG8gYmUgY2hlY2tlZCBvciBub3RcbiAqIEBwYXJhbSBzZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50UGF0aFxuICogQHJldHVybnMgVGhlIGNoYXJ0IHZpc3VhbGl6YXRpb24gYmFzZWQgb24gdGhlIGFubm90YXRpb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUNoYXJ0VmlzdWFsaXphdGlvbihcblx0Y2hhcnRBbm5vdGF0aW9uOiBDaGFydCxcblx0dmlzdWFsaXphdGlvblBhdGg6IHN0cmluZyxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+LFxuXHRkb05vdENoZWNrQXBwbHlTdXBwb3J0ZWQ/OiBib29sZWFuLFxuXHRzZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50UGF0aD86IHN0cmluZ1xuKTogQ2hhcnRWaXN1YWxpemF0aW9uIHtcblx0Y29uc3QgYWdncmVnYXRpb25IZWxwZXIgPSBuZXcgQWdncmVnYXRpb25IZWxwZXIoY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlKCksIGNvbnZlcnRlckNvbnRleHQsIHRydWUpOyAvLyBwYXNzaW5nIHRoZSBsYXN0IHBhcmFtZXRlciBhcyB0cnVlIHRvIGNvbnNpZGVyIHRoZSBvbGQgYW5ub3RhdGlvbnMgaS5lLiBBZ2dyZWdhdGlvbi5BZ2dyZWdhdGFibGUgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgaW4gY2FzZSBvZiBjaGFydFxuXHRpZiAoIWRvTm90Q2hlY2tBcHBseVN1cHBvcnRlZCAmJiAhYWdncmVnYXRpb25IZWxwZXIuaXNBbmFseXRpY3NTdXBwb3J0ZWQoKSkge1xuXHRcdHRocm93IG5ldyBFcnJvcihcIkFwcGx5U3VwcG9ydGVkIGlzIG5vdCBhZGRlZCB0byB0aGUgYW5ub3RhdGlvbnNcIik7XG5cdH1cblx0Y29uc3QgYVRyYW5zQWdncmVnYXRpb25zID0gYWdncmVnYXRpb25IZWxwZXIuZ2V0VHJhbnNBZ2dyZWdhdGlvbnMoKTtcblx0Y29uc3QgYUN1c3RvbUFnZ3JlZ2F0ZXMgPSBhZ2dyZWdhdGlvbkhlbHBlci5nZXRDdXN0b21BZ2dyZWdhdGVEZWZpbml0aW9ucygpO1xuXHRjb25zdCBwYWdlTWFuaWZlc3RTZXR0aW5nczogTWFuaWZlc3RXcmFwcGVyID0gY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKTtcblx0Y29uc3QgdmFyaWFudE1hbmFnZW1lbnQ6IFZhcmlhbnRNYW5hZ2VtZW50VHlwZSA9IHBhZ2VNYW5pZmVzdFNldHRpbmdzLmdldFZhcmlhbnRNYW5hZ2VtZW50KCk7XG5cdGNvbnN0IHAxM25Nb2RlOiBDaGFydFAxM25UeXBlID0gZ2V0UDEzbk1vZGUodmlzdWFsaXphdGlvblBhdGgsIGNvbnZlcnRlckNvbnRleHQpO1xuXHRpZiAocDEzbk1vZGUgPT09IHVuZGVmaW5lZCAmJiB2YXJpYW50TWFuYWdlbWVudCA9PT0gXCJDb250cm9sXCIpIHtcblx0XHRMb2cud2FybmluZyhcIlZhcmlhbnQgTWFuYWdlbWVudCBjYW5ub3QgYmUgZW5hYmxlZCB3aGVuIHBlcnNvbmFsaXphdGlvbiBpcyBkaXNhYmxlZFwiKTtcblx0fVxuXHRjb25zdCBtQ3VzdG9tQWdncmVnYXRlczogUmVjb3JkPHN0cmluZywgb2JqZWN0PiA9IHt9O1xuXHRpZiAoYUN1c3RvbUFnZ3JlZ2F0ZXMpIHtcblx0XHRjb25zdCBlbnRpdHlUeXBlID0gYWdncmVnYXRpb25IZWxwZXIuZ2V0RW50aXR5VHlwZSgpO1xuXHRcdGZvciAoY29uc3QgY3VzdG9tQWdncmVnYXRlIG9mIGFDdXN0b21BZ2dyZWdhdGVzKSB7XG5cdFx0XHRjb25zdCBhQ29udGV4dERlZmluaW5nUHJvcGVydGllcyA9IGN1c3RvbUFnZ3JlZ2F0ZT8uYW5ub3RhdGlvbnM/LkFnZ3JlZ2F0aW9uPy5Db250ZXh0RGVmaW5pbmdQcm9wZXJ0aWVzO1xuXHRcdFx0Y29uc3QgcXVhbGlmaWVyID0gY3VzdG9tQWdncmVnYXRlPy5xdWFsaWZpZXI7XG5cdFx0XHRjb25zdCByZWxhdGVkQ3VzdG9tQWdncmVnYXRlUHJvcGVydHkgPSBxdWFsaWZpZXIgJiYgZW50aXR5VHlwZS5lbnRpdHlQcm9wZXJ0aWVzLmZpbmQoKHByb3BlcnR5KSA9PiBwcm9wZXJ0eS5uYW1lID09PSBxdWFsaWZpZXIpO1xuXHRcdFx0Y29uc3QgbGFiZWwgPSByZWxhdGVkQ3VzdG9tQWdncmVnYXRlUHJvcGVydHkgJiYgcmVsYXRlZEN1c3RvbUFnZ3JlZ2F0ZVByb3BlcnR5Py5hbm5vdGF0aW9ucz8uQ29tbW9uPy5MYWJlbD8udG9TdHJpbmcoKTtcblx0XHRcdG1DdXN0b21BZ2dyZWdhdGVzW3F1YWxpZmllcl0gPSB7XG5cdFx0XHRcdG5hbWU6IHF1YWxpZmllcixcblx0XHRcdFx0bGFiZWw6IGxhYmVsIHx8IGBDdXN0b20gQWdncmVnYXRlICgke3F1YWxpZmllcn0pYCxcblx0XHRcdFx0c29ydGFibGU6IHRydWUsXG5cdFx0XHRcdHNvcnRPcmRlcjogXCJib3RoXCIsXG5cdFx0XHRcdGNvbnRleHREZWZpbmluZ1Byb3BlcnR5OiBhQ29udGV4dERlZmluaW5nUHJvcGVydGllc1xuXHRcdFx0XHRcdD8gYUNvbnRleHREZWZpbmluZ1Byb3BlcnRpZXMubWFwKChvQ3R4RGVmUHJvcGVydHkpID0+IHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIG9DdHhEZWZQcm9wZXJ0eS52YWx1ZTtcblx0XHRcdFx0XHQgIH0pXG5cdFx0XHRcdFx0OiBbXVxuXHRcdFx0fTtcblx0XHR9XG5cdH1cblxuXHRjb25zdCBtVHJhbnNBZ2dyZWdhdGlvbnM6IFJlY29yZDxzdHJpbmcsIFRyYW5zQWdnPiA9IHt9O1xuXHRjb25zdCBvUmVzb3VyY2VCdW5kbGVDb3JlID0gTGlicmFyeS5nZXRSZXNvdXJjZUJ1bmRsZUZvcihcInNhcC5mZS5jb3JlXCIpITtcblx0aWYgKGFUcmFuc0FnZ3JlZ2F0aW9ucykge1xuXHRcdGZvciAoY29uc3QgZWxlbWVudCBvZiBhVHJhbnNBZ2dyZWdhdGlvbnMpIHtcblx0XHRcdG1UcmFuc0FnZ3JlZ2F0aW9uc1tlbGVtZW50Lk5hbWUgYXMgc3RyaW5nXSA9IHtcblx0XHRcdFx0bmFtZTogZWxlbWVudC5OYW1lIGFzIHN0cmluZyxcblx0XHRcdFx0cHJvcGVydHlQYXRoOiBlbGVtZW50LkFnZ3JlZ2F0YWJsZVByb3BlcnR5LnZhbHVlLFxuXHRcdFx0XHRhZ2dyZWdhdGlvbk1ldGhvZDogZWxlbWVudC5BZ2dyZWdhdGlvbk1ldGhvZCxcblx0XHRcdFx0bGFiZWw6IGVsZW1lbnQ/LmFubm90YXRpb25zPy5Db21tb24/LkxhYmVsXG5cdFx0XHRcdFx0PyBlbGVtZW50Py5hbm5vdGF0aW9ucz8uQ29tbW9uPy5MYWJlbD8udG9TdHJpbmcoKVxuXHRcdFx0XHRcdDogYCR7b1Jlc291cmNlQnVuZGxlQ29yZS5nZXRUZXh0KFwiQUdHUkVHQVRBQkxFX1BST1BFUlRZXCIpfSAoJHtlbGVtZW50Lk5hbWV9KWAsXG5cdFx0XHRcdHNvcnRhYmxlOiB0cnVlLFxuXHRcdFx0XHRzb3J0T3JkZXI6IFwiYm90aFwiLFxuXHRcdFx0XHRjdXN0b206IGZhbHNlXG5cdFx0XHR9O1xuXHRcdH1cblx0fVxuXG5cdGNvbnN0IGFBZ2dQcm9wcyA9IGFnZ3JlZ2F0aW9uSGVscGVyLmdldEFnZ3JlZ2F0YWJsZVByb3BlcnRpZXMoKTtcblx0Y29uc3QgYUdycFByb3BzID0gYWdncmVnYXRpb25IZWxwZXIuZ2V0R3JvdXBhYmxlUHJvcGVydGllcygpO1xuXHRjb25zdCBtQXBwbHlTdXBwb3J0ZWQgPSB7fSBhcyBDaGFydEFwcGx5U3VwcG9ydGVkO1xuXHRtQXBwbHlTdXBwb3J0ZWQuJFR5cGUgPSBBZ2dyZWdhdGlvbkFubm90YXRpb25UeXBlcy5BcHBseVN1cHBvcnRlZFR5cGU7XG5cdG1BcHBseVN1cHBvcnRlZC5BZ2dyZWdhdGFibGVQcm9wZXJ0aWVzID0gW107XG5cdG1BcHBseVN1cHBvcnRlZC5Hcm91cGFibGVQcm9wZXJ0aWVzID0gW107XG5cblx0aWYgKGFBZ2dQcm9wcykge1xuXHRcdG1BcHBseVN1cHBvcnRlZC5BZ2dyZWdhdGFibGVQcm9wZXJ0aWVzID0gYUFnZ1Byb3BzLm1hcCgocHJvcCkgPT5cblx0XHRcdGdldEFnZ3JlZ2F0YWJsZVByb3BlcnRpZXNPYmplY3QocHJvcClcblx0XHQpIGFzIChFeHBhbmRQYXRoVHlwZTxQcm9wZXJ0eVBhdGg+ICYgeyBQcm9wZXJ0eTogRXhwYW5kUGF0aFR5cGU8UHJvcGVydHlQYXRoPiB9KVtdO1xuXHR9XG5cblx0aWYgKGFHcnBQcm9wcykge1xuXHRcdG1BcHBseVN1cHBvcnRlZC5Hcm91cGFibGVQcm9wZXJ0aWVzID0gYUdycFByb3BzLm1hcCgocHJvcCkgPT4gKHtcblx0XHRcdFtcIiRQcm9wZXJ0eVBhdGhcIl06IHByb3AudmFsdWVcblx0XHR9KSkgYXMgKEV4cGFuZFBhdGhUeXBlPFByb3BlcnR5UGF0aD4gJiB7IFByb3BlcnR5OiBFeHBhbmRQYXRoVHlwZTxQcm9wZXJ0eVBhdGg+IH0pW107XG5cdH1cblxuXHRjb25zdCBjaGFydEFjdGlvbnMgPSBnZXRDaGFydEFjdGlvbnMoY2hhcnRBbm5vdGF0aW9uLCB2aXN1YWxpemF0aW9uUGF0aCwgY29udmVydGVyQ29udGV4dCk7XG5cdGxldCBbbmF2aWdhdGlvblByb3BlcnR5UGF0aCAvKiwgYW5ub3RhdGlvblBhdGgqL10gPSB2aXN1YWxpemF0aW9uUGF0aC5zcGxpdChcIkBcIik7XG5cdGlmIChuYXZpZ2F0aW9uUHJvcGVydHlQYXRoLmxhc3RJbmRleE9mKFwiL1wiKSA9PT0gbmF2aWdhdGlvblByb3BlcnR5UGF0aC5sZW5ndGggLSAxKSB7XG5cdFx0Ly8gRHJvcCB0cmFpbGluZyBzbGFzaFxuXHRcdG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGggPSBuYXZpZ2F0aW9uUHJvcGVydHlQYXRoLnN1YnN0cmluZygwLCBuYXZpZ2F0aW9uUHJvcGVydHlQYXRoLmxlbmd0aCAtIDEpO1xuXHR9XG5cdGNvbnN0IHRpdGxlID0gY2hhcnRBbm5vdGF0aW9uLlRpdGxlPy50b1N0cmluZygpIHx8IFwiXCI7IC8vIHJlYWQgdGl0bGUgZnJvbSBjaGFydCBhbm5vdGF0aW9uXG5cdGNvbnN0IGRhdGFNb2RlbFBhdGggPSBjb252ZXJ0ZXJDb250ZXh0LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKTtcblx0Y29uc3QgaXNFbnRpdHlTZXQ6IGJvb2xlYW4gPSBuYXZpZ2F0aW9uUHJvcGVydHlQYXRoLmxlbmd0aCA9PT0gMDtcblx0Y29uc3QgZW50aXR5TmFtZTogc3RyaW5nID0gZGF0YU1vZGVsUGF0aC50YXJnZXRFbnRpdHlTZXQgPyBkYXRhTW9kZWxQYXRoLnRhcmdldEVudGl0eVNldC5uYW1lIDogZGF0YU1vZGVsUGF0aC5zdGFydGluZ0VudGl0eVNldC5uYW1lO1xuXHRjb25zdCBzRmlsdGVyYmFySWQgPSBpc0VudGl0eVNldCA/IGdldEZpbHRlckJhcklEKGNvbnZlcnRlckNvbnRleHQuZ2V0Q29udGV4dFBhdGgoKSkgOiB1bmRlZmluZWQ7XG5cdGNvbnN0IG9WaXpQcm9wZXJ0aWVzID0ge1xuXHRcdHBsb3RBcmVhOiB7XG5cdFx0XHR3aW5kb3c6IHtcblx0XHRcdFx0c3RhcnQ6IFwiZmlyc3REYXRhUG9pbnRcIixcblx0XHRcdFx0ZW5kOiBcImxhc3REYXRhUG9pbnRcIlxuXHRcdFx0fVxuXHRcdH0sXG5cdFx0bGVnZW5kR3JvdXA6IHtcblx0XHRcdGxheW91dDoge1xuXHRcdFx0XHRwb3NpdGlvbjogXCJib3R0b21cIlxuXHRcdFx0fVxuXHRcdH1cblx0fTtcblx0bGV0IGF1dG9CaW5kT25Jbml0OiBib29sZWFuIHwgdW5kZWZpbmVkO1xuXHRpZiAoY29udmVydGVyQ29udGV4dC5nZXRUZW1wbGF0ZVR5cGUoKSA9PT0gVGVtcGxhdGVUeXBlLk9iamVjdFBhZ2UpIHtcblx0XHRhdXRvQmluZE9uSW5pdCA9IHRydWU7XG5cdH0gZWxzZSBpZiAoXG5cdFx0Y29udmVydGVyQ29udGV4dC5nZXRUZW1wbGF0ZVR5cGUoKSA9PT0gVGVtcGxhdGVUeXBlLkxpc3RSZXBvcnQgfHxcblx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldFRlbXBsYXRlVHlwZSgpID09PSBUZW1wbGF0ZVR5cGUuQW5hbHl0aWNhbExpc3RQYWdlXG5cdCkge1xuXHRcdGF1dG9CaW5kT25Jbml0ID0gZmFsc2U7XG5cdH1cblx0Y29uc3QgaGFzTXVsdGlwbGVWaXN1YWxpemF0aW9ucyA9XG5cdFx0Y29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKS5oYXNNdWx0aXBsZVZpc3VhbGl6YXRpb25zKCkgfHxcblx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldFRlbXBsYXRlVHlwZSgpID09PSBUZW1wbGF0ZVR5cGUuQW5hbHl0aWNhbExpc3RQYWdlO1xuXHRjb25zdCBvblNlZ21lbnRlZEJ1dHRvblByZXNzZWQgPSBoYXNNdWx0aXBsZVZpc3VhbGl6YXRpb25zID8gXCIuaGFuZGxlcnMub25TZWdtZW50ZWRCdXR0b25QcmVzc2VkXCIgOiBcIlwiO1xuXHRjb25zdCB2aXNpYmxlID0gaGFzTXVsdGlwbGVWaXN1YWxpemF0aW9ucyA/IFwiez0gJHtwYWdlSW50ZXJuYWw+YWxwQ29udGVudFZpZXd9ICE9PSAnVGFibGUnfVwiIDogXCJ0cnVlXCI7XG5cdGNvbnN0IGFsbG93ZWRUcmFuc2Zvcm1hdGlvbnMgPSBhZ2dyZWdhdGlvbkhlbHBlci5nZXRBbGxvd2VkVHJhbnNmb3JtYXRpb25zKCk7XG5cdG1BcHBseVN1cHBvcnRlZC5lbmFibGVTZWFyY2ggPSBhbGxvd2VkVHJhbnNmb3JtYXRpb25zID8gYWxsb3dlZFRyYW5zZm9ybWF0aW9ucy5pbmNsdWRlcyhcInNlYXJjaFwiKSA6IHRydWU7XG5cdGxldCBxdWFsaWZpZXIgPSBcIlwiO1xuXHRpZiAoY2hhcnRBbm5vdGF0aW9uLmZ1bGx5UXVhbGlmaWVkTmFtZS5zcGxpdChcIiNcIikubGVuZ3RoID4gMSkge1xuXHRcdHF1YWxpZmllciA9IGNoYXJ0QW5ub3RhdGlvbi5mdWxseVF1YWxpZmllZE5hbWUuc3BsaXQoXCIjXCIpWzFdO1xuXHR9XG5cdGNvbnN0IGlzSW5zaWdodHNWaXNpYmxlID0gZ2V0SW5zaWdodHNWaXNpYmlsaXR5KFwiQW5hbHl0aWNhbFwiLCBjb252ZXJ0ZXJDb250ZXh0LCB2aXN1YWxpemF0aW9uUGF0aCk7XG5cdGNvbnN0IGlzUGFyYW1ldGVyaXplZEVudGl0eVNldCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0UGFyYW1ldGVyRW50aXR5VHlwZSgpID8gdHJ1ZSA6IGZhbHNlO1xuXHRjb25zdCBpc0luc2lnaHRzRW5hYmxlZCA9IGFuZChnZXRJbnNpZ2h0c0VuYWJsZW1lbnQoKSwgaXNJbnNpZ2h0c1Zpc2libGUpO1xuXHRjb25zdCB7IGhlYWRlciwgaGVhZGVyVmlzaWJsZSB9ID0gZ2V0SGVhZGVySW5mbyh2aXN1YWxpemF0aW9uUGF0aCwgY29udmVydGVyQ29udGV4dCk7XG5cdGNvbnN0IHNlbGVjdGlvbk1vZGUgPSBnZXRTZWxlY3Rpb25Nb2RlKHZpc3VhbGl6YXRpb25QYXRoLCBjb252ZXJ0ZXJDb250ZXh0KTtcblx0cmV0dXJuIHtcblx0XHR0eXBlOiBWaXN1YWxpemF0aW9uVHlwZS5DaGFydCxcblx0XHRpZDogcXVhbGlmaWVyXG5cdFx0XHQ/IGdldENoYXJ0SUQoaXNFbnRpdHlTZXQgPyBlbnRpdHlOYW1lIDogbmF2aWdhdGlvblByb3BlcnR5UGF0aCwgcXVhbGlmaWVyLCBWaXN1YWxpemF0aW9uVHlwZS5DaGFydClcblx0XHRcdDogZ2V0Q2hhcnRJRChpc0VudGl0eVNldCA/IGVudGl0eU5hbWUgOiBuYXZpZ2F0aW9uUHJvcGVydHlQYXRoLCBWaXN1YWxpemF0aW9uVHlwZS5DaGFydCksXG5cdFx0Y29sbGVjdGlvbjogZ2V0VGFyZ2V0T2JqZWN0UGF0aChjb252ZXJ0ZXJDb250ZXh0LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKSksXG5cdFx0YXBpSWQ6IGdlbmVyYXRlKFtcblx0XHRcdHF1YWxpZmllclxuXHRcdFx0XHQ/IGdldENoYXJ0SUQoaXNFbnRpdHlTZXQgPyBlbnRpdHlOYW1lIDogbmF2aWdhdGlvblByb3BlcnR5UGF0aCwgcXVhbGlmaWVyLCBWaXN1YWxpemF0aW9uVHlwZS5DaGFydClcblx0XHRcdFx0OiBnZXRDaGFydElEKGlzRW50aXR5U2V0ID8gZW50aXR5TmFtZSA6IG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgsIFZpc3VhbGl6YXRpb25UeXBlLkNoYXJ0KSxcblx0XHRcdFwiQ2hhcnRcIlxuXHRcdF0pLFxuXHRcdGVudGl0eU5hbWU6IGVudGl0eU5hbWUsXG5cdFx0cGVyc29uYWxpemF0aW9uOiBnZXRQMTNuTW9kZSh2aXN1YWxpemF0aW9uUGF0aCwgY29udmVydGVyQ29udGV4dCksXG5cdFx0bmF2aWdhdGlvblBhdGg6IG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgsXG5cdFx0YW5ub3RhdGlvblBhdGg6IGNvbnZlcnRlckNvbnRleHQuZ2V0QWJzb2x1dGVBbm5vdGF0aW9uUGF0aCh2aXN1YWxpemF0aW9uUGF0aCksXG5cdFx0ZmlsdGVySWQ6IHNGaWx0ZXJiYXJJZCxcblx0XHR2aXpQcm9wZXJ0aWVzOiBKU09OLnN0cmluZ2lmeShvVml6UHJvcGVydGllcyksXG5cdFx0YWN0aW9uczogY2hhcnRBY3Rpb25zLmFjdGlvbnMsXG5cdFx0Y29tbWFuZEFjdGlvbnM6IGNoYXJ0QWN0aW9ucy5jb21tYW5kQWN0aW9ucyxcblx0XHR0aXRsZTogdGl0bGUsXG5cdFx0YXV0b0JpbmRPbkluaXQ6IGF1dG9CaW5kT25Jbml0LFxuXHRcdG9uU2VnbWVudGVkQnV0dG9uUHJlc3NlZDogb25TZWdtZW50ZWRCdXR0b25QcmVzc2VkLFxuXHRcdHZpc2libGU6IHZpc2libGUsXG5cdFx0Y3VzdG9tQWdnOiBtQ3VzdG9tQWdncmVnYXRlcyxcblx0XHR0cmFuc0FnZzogbVRyYW5zQWdncmVnYXRpb25zLFxuXHRcdGFwcGx5U3VwcG9ydGVkOiBtQXBwbHlTdXBwb3J0ZWQsXG5cdFx0c2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudFBhdGgsXG5cdFx0dmFyaWFudE1hbmFnZW1lbnQ6IGZpbmRWYXJpYW50TWFuYWdlbWVudChwMTNuTW9kZSwgdmFyaWFudE1hbmFnZW1lbnQpLFxuXHRcdGlzSW5zaWdodHNFbmFibGVkOiBpc0luc2lnaHRzRW5hYmxlZCxcblx0XHRpc0luc2lnaHRzVmlzaWJsZTogaXNJbnNpZ2h0c1Zpc2libGUsXG5cdFx0aXNQYXJhbWV0ZXJpemVkRW50aXR5U2V0OiBpc1BhcmFtZXRlcml6ZWRFbnRpdHlTZXQsXG5cdFx0aGVhZGVyOiBoZWFkZXIsXG5cdFx0aGVhZGVyVmlzaWJsZTogaGVhZGVyVmlzaWJsZSxcblx0XHRzZWxlY3Rpb25Nb2RlOiBzZWxlY3Rpb25Nb2RlXG5cdH07XG59XG4vKipcbiAqIE1ldGhvZCB0byBkZXRlcm1pbmUgdGhlIHZhcmlhbnQgbWFuYWdlbWVudC5cbiAqIEBwYXJhbSBwMTNuTW9kZVxuICogQHBhcmFtIHZhcmlhbnRNYW5hZ2VtZW50XG4gKiBAcmV0dXJucyBUaGUgdmFyaWFudCBtYW5hZ2VtZW50IGZvciB0aGUgY2hhcnRcbiAqL1xuZnVuY3Rpb24gZmluZFZhcmlhbnRNYW5hZ2VtZW50KHAxM25Nb2RlOiBDaGFydFAxM25UeXBlLCB2YXJpYW50TWFuYWdlbWVudDogVmFyaWFudE1hbmFnZW1lbnRUeXBlKTogVmFyaWFudE1hbmFnZW1lbnRUeXBlIHtcblx0cmV0dXJuIHZhcmlhbnRNYW5hZ2VtZW50ID09PSBcIkNvbnRyb2xcIiAmJiAhcDEzbk1vZGUgPyBWYXJpYW50TWFuYWdlbWVudFR5cGUuTm9uZSA6IHZhcmlhbnRNYW5hZ2VtZW50O1xufVxuXG4vKipcbiAqIENyZWF0ZSB0aGUgQ2hhcnRWaXN1YWxpemF0aW9uIGNvbmZpZ3VyYXRpb24gdGhhdCB3aWxsIGJlIHVzZWQgdG8gZHVyaW5nIHRlbXBsYXRpbmcuXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dCBUaGUgY29udmVydGVyIGNvbnRleHRcbiAqIEBwYXJhbSB2aXN1YWxpemF0aW9uUGF0aCBUaGUgcGF0aCBvZiB0aGUgdmlzdWFsaXphdGlvbiBhbm5vdGF0aW9uXG4gKiBAcGFyYW0gdmlzdWFsaXphdGlvbiBUaGUgdmlzdWFsaXphdGlvbiBhbm5vdGF0aW9uXG4gKiBAcmV0dXJucyBUaGUgY2hhcnQgdmlzdWFsaXphdGlvbiBiYXNlZCBvbiB0aGUgYW5ub3RhdGlvbiB1c2VkIGZvciB0ZW1wbGF0aW5nXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVDaGFydFZpc3VhbGl6YXRpb25Gb3JUZW1wbGF0aW5nKFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sXG5cdHZpc3VhbGl6YXRpb25QYXRoOiBzdHJpbmcsXG5cdHZpc3VhbGl6YXRpb246IEFjdHVhbFZpc3VhbGl6YXRpb25Bbm5vdGF0aW9uc1xuKTogQ2hhcnRUZW1wbGF0ZVZpc3VhbGl6YXRpb24ge1xuXHRjb25zdCBxdWFsaWZpZXIgPSB2aXN1YWxpemF0aW9uLmZ1bGx5UXVhbGlmaWVkTmFtZS5zcGxpdChcIiNcIikubGVuZ3RoID4gMSA/IHZpc3VhbGl6YXRpb24uZnVsbHlRdWFsaWZpZWROYW1lLnNwbGl0KFwiI1wiKVsxXSA6IFwiXCI7XG5cdGNvbnN0IFtuYXZpZ2F0aW9uUHJvcGVydHlQYXRoXSA9IHZpc3VhbGl6YXRpb25QYXRoLnNwbGl0KFwiQFwiKTtcblxuXHRjb25zdCBkYXRhTW9kZWxQYXRoID0gY29udmVydGVyQ29udGV4dC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCk7XG5cdGNvbnN0IGlzRW50aXR5U2V0OiBib29sZWFuID0gbmF2aWdhdGlvblByb3BlcnR5UGF0aC5sZW5ndGggPT09IDA7XG5cdGNvbnN0IGVudGl0eU5hbWU6IHN0cmluZyA9IGRhdGFNb2RlbFBhdGgudGFyZ2V0RW50aXR5U2V0Py5uYW1lID8/IGRhdGFNb2RlbFBhdGguc3RhcnRpbmdFbnRpdHlTZXQubmFtZTtcblx0Y29uc3QgYWdncmVnYXRpb25IZWxwZXIgPSBuZXcgQWdncmVnYXRpb25IZWxwZXIoY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlKCksIGNvbnZlcnRlckNvbnRleHQsIHRydWUpO1xuXHRjb25zdCBhbGxvd2VkVHJhbnNmb3JtYXRpb25zID0gYWdncmVnYXRpb25IZWxwZXIuZ2V0QWxsb3dlZFRyYW5zZm9ybWF0aW9ucygpO1xuXHRjb25zdCBpc1BhcmFtZXRlcml6ZWRFbnRpdHlTZXQgPSAhIWNvbnZlcnRlckNvbnRleHQuZ2V0UGFyYW1ldGVyRW50aXR5VHlwZSgpO1xuXHRyZXR1cm4ge1xuXHRcdGFubm90YXRpb25QYXRoOiBjb252ZXJ0ZXJDb250ZXh0LmdldEFic29sdXRlQW5ub3RhdGlvblBhdGgodmlzdWFsaXphdGlvblBhdGgpLFxuXHRcdGlzUGFyYW1ldGVyaXplZEVudGl0eVNldCxcblx0XHRjb2xsZWN0aW9uOiBnZXRUYXJnZXRPYmplY3RQYXRoKGNvbnZlcnRlckNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpKSxcblx0XHR0eXBlOiBWaXN1YWxpemF0aW9uVHlwZS5DaGFydCxcblx0XHRlbnRpdHlOYW1lLFxuXHRcdGlkOiBxdWFsaWZpZXJcblx0XHRcdD8gZ2V0Q2hhcnRJRChpc0VudGl0eVNldCA/IGVudGl0eU5hbWUgOiBuYXZpZ2F0aW9uUHJvcGVydHlQYXRoLCBxdWFsaWZpZXIsIFZpc3VhbGl6YXRpb25UeXBlLkNoYXJ0KVxuXHRcdFx0OiBnZXRDaGFydElEKGlzRW50aXR5U2V0ID8gZW50aXR5TmFtZSA6IG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgsIFZpc3VhbGl6YXRpb25UeXBlLkNoYXJ0KSxcblx0XHRhcGlJZDogZ2VuZXJhdGUoW1xuXHRcdFx0cXVhbGlmaWVyXG5cdFx0XHRcdD8gZ2V0Q2hhcnRJRChpc0VudGl0eVNldCA/IGVudGl0eU5hbWUgOiBuYXZpZ2F0aW9uUHJvcGVydHlQYXRoLCBxdWFsaWZpZXIsIFZpc3VhbGl6YXRpb25UeXBlLkNoYXJ0KVxuXHRcdFx0XHQ6IGdldENoYXJ0SUQoaXNFbnRpdHlTZXQgPyBlbnRpdHlOYW1lIDogbmF2aWdhdGlvblByb3BlcnR5UGF0aCwgVmlzdWFsaXphdGlvblR5cGUuQ2hhcnQpLFxuXHRcdFx0XCJDaGFydFwiXG5cdFx0XSksXG5cdFx0YXBwbHlTdXBwb3J0ZWQ6IHtcblx0XHRcdCRUeXBlOiBcIk9yZy5PRGF0YS5BZ2dyZWdhdGlvbi5WMS5BcHBseVN1cHBvcnRlZFR5cGVcIixcblx0XHRcdGVuYWJsZVNlYXJjaDogYWxsb3dlZFRyYW5zZm9ybWF0aW9ucz8uaW5jbHVkZXMoXCJzZWFyY2hcIikgPz8gdHJ1ZVxuXHRcdH1cblx0fTtcbn1cblxuLyoqXG4gKiBNZXRob2QgdG8gZ2V0IGNvbXBpbGUgZXhwcmVzc2lvbiBmb3IgRGF0YUZpZWxkRm9yQWN0aW9uIGFuZCBEYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24uXG4gKiBAcGFyYW0gZGF0YUZpZWxkXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dFxuICogQHJldHVybnMgQ29tcGlsZSBleHByZXNzaW9uIGZvciBEYXRhRmllbGRGb3JBY3Rpb24gYW5kIERhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvblxuICovXG5mdW5jdGlvbiBnZXRDb21waWxlRXhwcmVzc2lvbkZvckFjdGlvbihcblx0ZGF0YUZpZWxkOiBEYXRhRmllbGRBYnN0cmFjdFR5cGVzLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD5cbik6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIHtcblx0cmV0dXJuIGNvbXBpbGVFeHByZXNzaW9uKFxuXHRcdG5vdChcblx0XHRcdGVxdWFsKFxuXHRcdFx0XHRnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24oXG5cdFx0XHRcdFx0ZGF0YUZpZWxkLmFubm90YXRpb25zPy5VST8uSGlkZGVuLFxuXHRcdFx0XHRcdFtdLFxuXHRcdFx0XHRcdHVuZGVmaW5lZCxcblx0XHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldFJlbGF0aXZlTW9kZWxQYXRoRnVuY3Rpb24oKVxuXHRcdFx0XHQpLFxuXHRcdFx0XHR0cnVlXG5cdFx0XHQpXG5cdFx0KVxuXHQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQmxhbmtDaGFydFZpc3VhbGl6YXRpb24oY29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+KTogQ2hhcnRWaXN1YWxpemF0aW9uIHtcblx0Y29uc3QgaGFzTXVsdGlwbGVWaXN1YWxpemF0aW9ucyA9XG5cdFx0Y29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKS5oYXNNdWx0aXBsZVZpc3VhbGl6YXRpb25zKCkgfHxcblx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldFRlbXBsYXRlVHlwZSgpID09PSBUZW1wbGF0ZVR5cGUuQW5hbHl0aWNhbExpc3RQYWdlO1xuXHRjb25zdCBkYXRhTW9kZWxQYXRoID0gY29udmVydGVyQ29udGV4dC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCk7XG5cdGNvbnN0IGVudGl0eU5hbWUgPSBkYXRhTW9kZWxQYXRoLnRhcmdldEVudGl0eVNldCA/IGRhdGFNb2RlbFBhdGgudGFyZ2V0RW50aXR5U2V0Lm5hbWUgOiBkYXRhTW9kZWxQYXRoLnN0YXJ0aW5nRW50aXR5U2V0Lm5hbWU7XG5cblx0Y29uc3QgdmlzdWFsaXphdGlvbjogQ2hhcnRWaXN1YWxpemF0aW9uID0ge1xuXHRcdHR5cGU6IFZpc3VhbGl6YXRpb25UeXBlLkNoYXJ0LFxuXHRcdGlkOiBnZXRDaGFydElEKGVudGl0eU5hbWUsIFZpc3VhbGl6YXRpb25UeXBlLkNoYXJ0KSxcblx0XHRhcGlJZDogZ2VuZXJhdGUoW2dldENoYXJ0SUQoZW50aXR5TmFtZSwgVmlzdWFsaXphdGlvblR5cGUuQ2hhcnQpLCBcIkNoYXJ0XCJdKSxcblx0XHRlbnRpdHlOYW1lOiBlbnRpdHlOYW1lLFxuXHRcdHRpdGxlOiBcIlwiLFxuXHRcdGNvbGxlY3Rpb246IFwiXCIsXG5cdFx0cGVyc29uYWxpemF0aW9uOiB1bmRlZmluZWQsXG5cdFx0bmF2aWdhdGlvblBhdGg6IFwiXCIsXG5cdFx0YW5ub3RhdGlvblBhdGg6IFwiXCIsXG5cdFx0dml6UHJvcGVydGllczogSlNPTi5zdHJpbmdpZnkoe1xuXHRcdFx0bGVnZW5kR3JvdXA6IHtcblx0XHRcdFx0bGF5b3V0OiB7XG5cdFx0XHRcdFx0cG9zaXRpb246IFwiYm90dG9tXCJcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0pLFxuXHRcdGFjdGlvbnM6IFtdLFxuXHRcdGNvbW1hbmRBY3Rpb25zOiB7fSxcblx0XHRhdXRvQmluZE9uSW5pdDogZmFsc2UsXG5cdFx0b25TZWdtZW50ZWRCdXR0b25QcmVzc2VkOiBcIlwiLFxuXHRcdHZpc2libGU6IGhhc011bHRpcGxlVmlzdWFsaXphdGlvbnMgPyBcIns9ICR7cGFnZUludGVybmFsPmFscENvbnRlbnRWaWV3fSAhPT0gJ1RhYmxlJ31cIiA6IFwidHJ1ZVwiLFxuXHRcdGN1c3RvbUFnZzoge30sXG5cdFx0dHJhbnNBZ2c6IHt9LFxuXHRcdGFwcGx5U3VwcG9ydGVkOiB7XG5cdFx0XHQkVHlwZTogXCJPcmcuT0RhdGEuQWdncmVnYXRpb24uVjEuQXBwbHlTdXBwb3J0ZWRUeXBlXCIsXG5cdFx0XHRBZ2dyZWdhdGFibGVQcm9wZXJ0aWVzOiBbXSxcblx0XHRcdEdyb3VwYWJsZVByb3BlcnRpZXM6IFtdLFxuXHRcdFx0ZW5hYmxlU2VhcmNoOiBmYWxzZVxuXHRcdH0sXG5cdFx0bXVsdGlWaWV3czogZmFsc2UsXG5cdFx0dmFyaWFudE1hbmFnZW1lbnQ6IFZhcmlhbnRNYW5hZ2VtZW50VHlwZS5Ob25lXG5cdH07XG5cblx0cmV0dXJuIHZpc3VhbGl6YXRpb247XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0VBeURBO0FBQ0E7QUFDQTs7RUEyQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDQSxTQUFTQSw4QkFBOEJBLENBQ3RDQyxlQUFzQixFQUN0QkMsaUJBQXlCLEVBQ3pCQyxnQkFBeUQsRUFDRDtJQUN4RCxNQUFNQyxZQUFtRSxHQUFHLEVBQUU7SUFDOUUsSUFBSUgsZUFBZSxFQUFFSSxPQUFPLEVBQUU7TUFDN0JKLGVBQWUsQ0FBQ0ksT0FBTyxDQUFDQyxPQUFPLENBQUVDLFNBQWdFLElBQUs7UUFDckcsTUFBTUMsR0FBRyxHQUFHQyxTQUFTLENBQUNDLHdCQUF3QixDQUFDSCxTQUFTLENBQUM7UUFDekQsSUFBSUksNEJBQTRCLENBQUNKLFNBQVMsQ0FBQyxJQUFJLENBQUNBLFNBQVMsQ0FBQ0ssTUFBTSxJQUFJLENBQUNMLFNBQVMsQ0FBQ00sV0FBVyxFQUFFO1VBQzNGLFFBQVFOLFNBQVMsQ0FBQ08sS0FBSztZQUN0QjtjQUNDLElBQUlQLFNBQVMsQ0FBQ1EsWUFBWSxJQUFJLENBQUNSLFNBQVMsQ0FBQ1EsWUFBWSxDQUFDQyxPQUFPLEVBQUU7Z0JBQzlEWixZQUFZLENBQUNhLElBQUksQ0FBQztrQkFDakJDLElBQUksRUFBRUMsVUFBVSxDQUFDQyxrQkFBa0I7a0JBQ25DQyxjQUFjLEVBQUVsQixnQkFBZ0IsQ0FBQ21CLCtCQUErQixDQUFDZixTQUFTLENBQUNnQixrQkFBa0IsQ0FBQztrQkFDOUZmLEdBQUc7a0JBQ0hnQixPQUFPLEVBQUVDLDZCQUE2QixDQUFDbEIsU0FBUyxFQUFFSixnQkFBZ0I7Z0JBQ25FLENBQUMsQ0FBQztjQUNIO2NBQ0E7WUFFRDtjQUNDQyxZQUFZLENBQUNhLElBQUksQ0FBQztnQkFDakJDLElBQUksRUFBRUMsVUFBVSxDQUFDTyxpQ0FBaUM7Z0JBQ2xETCxjQUFjLEVBQUVsQixnQkFBZ0IsQ0FBQ21CLCtCQUErQixDQUFDZixTQUFTLENBQUNnQixrQkFBa0IsQ0FBQztnQkFDOUZmLEdBQUc7Z0JBQ0hnQixPQUFPLEVBQUVDLDZCQUE2QixDQUFDbEIsU0FBUyxFQUFFSixnQkFBZ0IsQ0FBQztnQkFDbkV3QixXQUFXLEVBQUU7Y0FDZCxDQUFDLENBQUM7Y0FDRjtVQUNGO1FBQ0Q7UUFFQSxJQUFJQyx1QkFBdUIsQ0FBQ3JCLFNBQVMsQ0FBQyxFQUFFO1VBQ3ZDSCxZQUFZLENBQUNhLElBQUksQ0FBQztZQUNqQkMsSUFBSSxFQUFFQyxVQUFVLENBQUNVLElBQUk7WUFDckJDLElBQUksRUFBRXZCLFNBQVMsQ0FBQ3dCLEtBQUssRUFBRUMsUUFBUSxDQUFDLENBQUM7WUFDakNSLE9BQU8sRUFBRUMsNkJBQTZCLENBQUNsQixTQUFTLEVBQUVKLGdCQUFnQixDQUFDO1lBQ25FOEIsSUFBSSxFQUFFMUIsU0FBUyxDQUFDRixPQUFPLENBQUM2QixHQUFHLENBQUVDLE1BQU0sSUFDbENDLDRCQUE0QixDQUFDRCxNQUFNLEVBQTZCaEMsZ0JBQWdCLENBQ2pGLENBQUM7WUFDREssR0FBRyxFQUFFQyxTQUFTLENBQUNDLHdCQUF3QixDQUFDSCxTQUFTO1VBQ2xELENBQWdDLENBQUM7UUFDbEM7TUFDRCxDQUFDLENBQUM7SUFDSDtJQUNBLE9BQU9ILFlBQVk7RUFDcEI7RUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBQ0EsU0FBU3dCLHVCQUF1QkEsQ0FBQ3JCLFNBQWlDLEVBQXdDO0lBQ3pHLE9BQU9BLFNBQVMsQ0FBQ08sS0FBSyx5REFBOEM7RUFDckU7O0VBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBQ0EsU0FBU3NCLDRCQUE0QkEsQ0FDcEM3QixTQUFrQyxFQUNsQ0osZ0JBQXlELEVBQ3RDO0lBQ25CLE9BQU87TUFDTmUsSUFBSSxFQUFFQyxVQUFVLENBQUNDLGtCQUFrQjtNQUNuQ0MsY0FBYyxFQUFFbEIsZ0JBQWdCLENBQUNtQiwrQkFBK0IsQ0FBQ2YsU0FBUyxDQUFDZ0Isa0JBQWtCLENBQUM7TUFDOUZmLEdBQUcsRUFBRUMsU0FBUyxDQUFDQyx3QkFBd0IsQ0FBQ0gsU0FBUyxDQUFDO01BQ2xEaUIsT0FBTyxFQUFFQyw2QkFBNkIsQ0FBQ2xCLFNBQVMsRUFBRUosZ0JBQWdCO0lBQ25FLENBQUM7RUFDRjtFQUVPLFNBQVNrQyxlQUFlQSxDQUM5QnBDLGVBQXNCLEVBQ3RCQyxpQkFBeUIsRUFDekJDLGdCQUF5RCxFQUN4QztJQUNqQixNQUFNbUMsa0JBQWtCLEdBQUd0Qyw4QkFBOEIsQ0FBQ0MsZUFBZSxFQUFFQyxpQkFBaUIsRUFBRUMsZ0JBQWdCLENBQUM7SUFDL0csTUFBTW9DLGVBQWUsR0FBR0Msc0JBQXNCLENBQzdDckMsZ0JBQWdCLENBQUNzQywrQkFBK0IsQ0FBNkJ2QyxpQkFBaUIsQ0FBQyxDQUFDd0MsT0FBTyxFQUl2R3ZDLGdCQUFnQixFQUNoQm1DLGtCQUNELENBQUM7SUFDRCxNQUFNSyxxQkFBeUMsR0FBRztNQUNqREMsT0FBTyxFQUFFQyxZQUFZLENBQUNDLFNBQVM7TUFDL0JDLGNBQWMsRUFBRUYsWUFBWSxDQUFDQyxTQUFTO01BQ3RDdEIsT0FBTyxFQUFFcUIsWUFBWSxDQUFDQyxTQUFTO01BQy9CRSxPQUFPLEVBQUVILFlBQVksQ0FBQ0MsU0FBUztNQUMvQkcsUUFBUSxFQUFFSixZQUFZLENBQUNDO0lBQ3hCLENBQUM7SUFDRCxNQUFNMUMsWUFBWSxHQUFHOEMsb0JBQW9CLENBQWFaLGtCQUFrQixFQUFFQyxlQUFlLENBQUNHLE9BQU8sRUFBRUMscUJBQXFCLENBQUM7SUFDekgsT0FBTztNQUNORCxPQUFPLEVBQUV0QyxZQUFZO01BQ3JCK0MsY0FBYyxFQUFFWixlQUFlLENBQUNZO0lBQ2pDLENBQUM7RUFDRjtFQUFDQyxRQUFBLENBQUFmLGVBQUEsR0FBQUEsZUFBQTtFQUVNLFNBQVNnQixXQUFXQSxDQUMxQm5ELGlCQUF5QixFQUN6QkMsZ0JBQXlELEVBQzFCO0lBQy9CLE1BQU1tRCxlQUFnQyxHQUFHbkQsZ0JBQWdCLENBQUNvRCxrQkFBa0IsQ0FBQyxDQUFDO0lBQzlFLE1BQU1DLHFCQUFpRCxHQUFHckQsZ0JBQWdCLENBQUNzQywrQkFBK0IsQ0FBQ3ZDLGlCQUFpQixDQUFDO0lBQzdILE1BQU11RCxpQkFBd0MsR0FBR0gsZUFBZSxDQUFDSSxvQkFBb0IsQ0FBQyxDQUFDO0lBQ3ZGLE1BQU1DLGdCQUEwQixHQUFHLEVBQUU7SUFDckM7SUFDQSxNQUFNQyxlQUFlLEdBQUdKLHFCQUFxQixFQUFFSyxhQUFhLEVBQUVELGVBQWU7SUFDN0UsTUFBTUUsZ0JBQWdCLEdBQUdMLGlCQUFpQixLQUFLTSxxQkFBcUIsQ0FBQ0MsT0FBTyxHQUFHLElBQUksR0FBRyxLQUFLO0lBQzNGO0lBQ0EsSUFBS0osZUFBZSxLQUFLSyxTQUFTLElBQUksQ0FBQ0wsZUFBZSxJQUFLQSxlQUFlLElBQUksT0FBTyxFQUFFO01BQ3RGLE9BQU8sS0FBSztJQUNiO0lBQ0EsSUFBSSxPQUFPQSxlQUFlLEtBQUssUUFBUSxFQUFFO01BQ3hDO01BQ0EsSUFBSUEsZUFBZSxDQUFDMUMsSUFBSSxFQUFFO1FBQ3pCeUMsZ0JBQWdCLENBQUMxQyxJQUFJLENBQUMsTUFBTSxDQUFDO01BQzlCO01BQ0EsSUFBSTJDLGVBQWUsQ0FBQ00sSUFBSSxFQUFFO1FBQ3pCUCxnQkFBZ0IsQ0FBQzFDLElBQUksQ0FBQyxNQUFNLENBQUM7TUFDOUI7TUFDQSxJQUFJMkMsZUFBZSxDQUFDTyxJQUFJLEVBQUU7UUFDekJSLGdCQUFnQixDQUFDMUMsSUFBSSxDQUFDLE1BQU0sQ0FBQztNQUM5QjtNQUNBLElBQUkyQyxlQUFlLENBQUNRLE1BQU0sRUFBRTtRQUMzQlQsZ0JBQWdCLENBQUMxQyxJQUFJLENBQUMsUUFBUSxDQUFDO01BQ2hDO01BQ0EsT0FBTzBDLGdCQUFnQixDQUFDVSxJQUFJLENBQUMsR0FBRyxDQUFDO0lBQ2xDLENBQUMsTUFBTSxJQUFJUCxnQkFBZ0IsSUFBSSxDQUFDLENBQUNGLGVBQWUsRUFBRTtNQUNqRDtNQUNBO01BQ0EsT0FBTyx1QkFBdUI7SUFDL0IsQ0FBQyxNQUFNO01BQ047TUFDQSxPQUFPLGdCQUFnQjtJQUN4QjtFQUNEO0VBQUNSLFFBQUEsQ0FBQUMsV0FBQSxHQUFBQSxXQUFBO0VBRU0sU0FBU2lCLGFBQWFBLENBQzVCcEUsaUJBQXlCLEVBQ3pCQyxnQkFBeUQsRUFDWTtJQUNyRSxNQUFNcUQscUJBQWlELEdBQUdyRCxnQkFBZ0IsQ0FBQ3NDLCtCQUErQixDQUFDdkMsaUJBQWlCLENBQUM7SUFDN0gsT0FBTztNQUNOcUUsTUFBTSxFQUFFZixxQkFBcUIsQ0FBQ0ssYUFBYSxFQUFFVSxNQUFNO01BQ25EQyxhQUFhLEVBQUVoQixxQkFBcUIsRUFBRUssYUFBYSxFQUFFVztJQUN0RCxDQUFDO0VBQ0Y7RUFBQ3BCLFFBQUEsQ0FBQWtCLGFBQUEsR0FBQUEsYUFBQTtFQUVNLFNBQVNHLGdCQUFnQkEsQ0FDL0J2RSxpQkFBeUIsRUFDekJDLGdCQUF5RCxFQUNaO0lBQzdDLE1BQU1xRCxxQkFBaUQsR0FBR3JELGdCQUFnQixDQUFDc0MsK0JBQStCLENBQUN2QyxpQkFBaUIsQ0FBQztJQUM3SCxPQUFPc0QscUJBQXFCLENBQUNLLGFBQWEsRUFBRWEsYUFBYTtFQUMxRDtFQUFDdEIsUUFBQSxDQUFBcUIsZ0JBQUEsR0FBQUEsZ0JBQUE7RUFrQkQsU0FBU0UsK0JBQStCQSxDQUFDQyxPQUE0QyxFQUEyQztJQUMvSCxJQUFJQyxHQUFHO0lBQ1AsSUFBS0QsT0FBTyxFQUErQkUsUUFBUSxFQUFFO01BQ3BERCxHQUFHLEdBQUc7UUFDTEMsUUFBUSxFQUFFO1VBQ1RDLGFBQWEsRUFBR0gsT0FBTyxFQUErQkUsUUFBUSxFQUFFRTtRQUNqRTtNQUNELENBQUM7SUFDRixDQUFDLE1BQU07TUFDTkgsR0FBRyxHQUFHO1FBQ0xDLFFBQVEsRUFBRTtVQUNUQyxhQUFhLEVBQUdILE9BQU8sRUFBZUs7UUFDdkM7TUFDRCxDQUFDO0lBQ0Y7SUFDQSxPQUFPSixHQUFHO0VBQ1g7RUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDTyxTQUFTSyx3QkFBd0JBLENBQ3ZDakYsZUFBc0IsRUFDdEJDLGlCQUF5QixFQUN6QkMsZ0JBQXlELEVBQ3pEZ0Ysd0JBQWtDLEVBQ2xDQyxnQ0FBeUMsRUFDcEI7SUFDckIsTUFBTUMsaUJBQWlCLEdBQUcsSUFBSUMsaUJBQWlCLENBQUNuRixnQkFBZ0IsQ0FBQ29GLGFBQWEsQ0FBQyxDQUFDLEVBQUVwRixnQkFBZ0IsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQzNHLElBQUksQ0FBQ2dGLHdCQUF3QixJQUFJLENBQUNFLGlCQUFpQixDQUFDRyxvQkFBb0IsQ0FBQyxDQUFDLEVBQUU7TUFDM0UsTUFBTSxJQUFJQyxLQUFLLENBQUMsZ0RBQWdELENBQUM7SUFDbEU7SUFDQSxNQUFNQyxrQkFBa0IsR0FBR0wsaUJBQWlCLENBQUNNLG9CQUFvQixDQUFDLENBQUM7SUFDbkUsTUFBTUMsaUJBQWlCLEdBQUdQLGlCQUFpQixDQUFDUSw2QkFBNkIsQ0FBQyxDQUFDO0lBQzNFLE1BQU1DLG9CQUFxQyxHQUFHM0YsZ0JBQWdCLENBQUNvRCxrQkFBa0IsQ0FBQyxDQUFDO0lBQ25GLE1BQU1FLGlCQUF3QyxHQUFHcUMsb0JBQW9CLENBQUNwQyxvQkFBb0IsQ0FBQyxDQUFDO0lBQzVGLE1BQU1xQyxRQUF1QixHQUFHMUMsV0FBVyxDQUFDbkQsaUJBQWlCLEVBQUVDLGdCQUFnQixDQUFDO0lBQ2hGLElBQUk0RixRQUFRLEtBQUs5QixTQUFTLElBQUlSLGlCQUFpQixLQUFLLFNBQVMsRUFBRTtNQUM5RHVDLEdBQUcsQ0FBQ0MsT0FBTyxDQUFDLHVFQUF1RSxDQUFDO0lBQ3JGO0lBQ0EsTUFBTUMsaUJBQXlDLEdBQUcsQ0FBQyxDQUFDO0lBQ3BELElBQUlOLGlCQUFpQixFQUFFO01BQ3RCLE1BQU1PLFVBQVUsR0FBR2QsaUJBQWlCLENBQUNFLGFBQWEsQ0FBQyxDQUFDO01BQ3BELEtBQUssTUFBTWEsZUFBZSxJQUFJUixpQkFBaUIsRUFBRTtRQUNoRCxNQUFNUywwQkFBMEIsR0FBR0QsZUFBZSxFQUFFRSxXQUFXLEVBQUVDLFdBQVcsRUFBRUMseUJBQXlCO1FBQ3ZHLE1BQU1DLFNBQVMsR0FBR0wsZUFBZSxFQUFFSyxTQUFTO1FBQzVDLE1BQU1DLDhCQUE4QixHQUFHRCxTQUFTLElBQUlOLFVBQVUsQ0FBQ1EsZ0JBQWdCLENBQUNDLElBQUksQ0FBRUMsUUFBUSxJQUFLQSxRQUFRLENBQUM1QixJQUFJLEtBQUt3QixTQUFTLENBQUM7UUFDL0gsTUFBTUssS0FBSyxHQUFHSiw4QkFBOEIsSUFBSUEsOEJBQThCLEVBQUVKLFdBQVcsRUFBRVMsTUFBTSxFQUFFaEYsS0FBSyxFQUFFQyxRQUFRLENBQUMsQ0FBQztRQUN0SGtFLGlCQUFpQixDQUFDTyxTQUFTLENBQUMsR0FBRztVQUM5QnhCLElBQUksRUFBRXdCLFNBQVM7VUFDZkssS0FBSyxFQUFFQSxLQUFLLElBQUkscUJBQXFCTCxTQUFTLEdBQUc7VUFDakRPLFFBQVEsRUFBRSxJQUFJO1VBQ2RDLFNBQVMsRUFBRSxNQUFNO1VBQ2pCQyx1QkFBdUIsRUFBRWIsMEJBQTBCLEdBQ2hEQSwwQkFBMEIsQ0FBQ25FLEdBQUcsQ0FBRWlGLGVBQWUsSUFBSztZQUNwRCxPQUFPQSxlQUFlLENBQUNuQyxLQUFLO1VBQzVCLENBQUMsQ0FBQyxHQUNGO1FBQ0osQ0FBQztNQUNGO0lBQ0Q7SUFFQSxNQUFNb0Msa0JBQTRDLEdBQUcsQ0FBQyxDQUFDO0lBQ3ZELE1BQU1DLG1CQUFtQixHQUFHQyxPQUFPLENBQUNDLG9CQUFvQixDQUFDLGFBQWEsQ0FBRTtJQUN4RSxJQUFJN0Isa0JBQWtCLEVBQUU7TUFDdkIsS0FBSyxNQUFNOEIsT0FBTyxJQUFJOUIsa0JBQWtCLEVBQUU7UUFDekMwQixrQkFBa0IsQ0FBQ0ksT0FBTyxDQUFDQyxJQUFJLENBQVcsR0FBRztVQUM1Q3hDLElBQUksRUFBRXVDLE9BQU8sQ0FBQ0MsSUFBYztVQUM1QkMsWUFBWSxFQUFFRixPQUFPLENBQUNHLG9CQUFvQixDQUFDM0MsS0FBSztVQUNoRDRDLGlCQUFpQixFQUFFSixPQUFPLENBQUNLLGlCQUFpQjtVQUM1Q2YsS0FBSyxFQUFFVSxPQUFPLEVBQUVsQixXQUFXLEVBQUVTLE1BQU0sRUFBRWhGLEtBQUssR0FDdkN5RixPQUFPLEVBQUVsQixXQUFXLEVBQUVTLE1BQU0sRUFBRWhGLEtBQUssRUFBRUMsUUFBUSxDQUFDLENBQUMsR0FDL0MsR0FBR3FGLG1CQUFtQixDQUFDUyxPQUFPLENBQUMsdUJBQXVCLENBQUMsS0FBS04sT0FBTyxDQUFDQyxJQUFJLEdBQUc7VUFDOUVULFFBQVEsRUFBRSxJQUFJO1VBQ2RDLFNBQVMsRUFBRSxNQUFNO1VBQ2pCYyxNQUFNLEVBQUU7UUFDVCxDQUFDO01BQ0Y7SUFDRDtJQUVBLE1BQU1DLFNBQVMsR0FBRzNDLGlCQUFpQixDQUFDNEMseUJBQXlCLENBQUMsQ0FBQztJQUMvRCxNQUFNQyxTQUFTLEdBQUc3QyxpQkFBaUIsQ0FBQzhDLHNCQUFzQixDQUFDLENBQUM7SUFDNUQsTUFBTUMsZUFBZSxHQUFHLENBQUMsQ0FBd0I7SUFDakRBLGVBQWUsQ0FBQ3RILEtBQUssZ0RBQWdEO0lBQ3JFc0gsZUFBZSxDQUFDQyxzQkFBc0IsR0FBRyxFQUFFO0lBQzNDRCxlQUFlLENBQUNFLG1CQUFtQixHQUFHLEVBQUU7SUFFeEMsSUFBSU4sU0FBUyxFQUFFO01BQ2RJLGVBQWUsQ0FBQ0Msc0JBQXNCLEdBQUdMLFNBQVMsQ0FBQzlGLEdBQUcsQ0FBRXFHLElBQUksSUFDM0Q1RCwrQkFBK0IsQ0FBQzRELElBQUksQ0FDckMsQ0FBa0Y7SUFDbkY7SUFFQSxJQUFJTCxTQUFTLEVBQUU7TUFDZEUsZUFBZSxDQUFDRSxtQkFBbUIsR0FBR0osU0FBUyxDQUFDaEcsR0FBRyxDQUFFcUcsSUFBSSxLQUFNO1FBQzlELENBQUMsZUFBZSxHQUFHQSxJQUFJLENBQUN2RDtNQUN6QixDQUFDLENBQUMsQ0FBa0Y7SUFDckY7SUFFQSxNQUFNNUUsWUFBWSxHQUFHaUMsZUFBZSxDQUFDcEMsZUFBZSxFQUFFQyxpQkFBaUIsRUFBRUMsZ0JBQWdCLENBQUM7SUFDMUYsSUFBSSxDQUFDcUksc0JBQXNCLENBQUMscUJBQXFCLEdBQUd0SSxpQkFBaUIsQ0FBQ3VJLEtBQUssQ0FBQyxHQUFHLENBQUM7SUFDaEYsSUFBSUQsc0JBQXNCLENBQUNFLFdBQVcsQ0FBQyxHQUFHLENBQUMsS0FBS0Ysc0JBQXNCLENBQUNHLE1BQU0sR0FBRyxDQUFDLEVBQUU7TUFDbEY7TUFDQUgsc0JBQXNCLEdBQUdBLHNCQUFzQixDQUFDSSxTQUFTLENBQUMsQ0FBQyxFQUFFSixzQkFBc0IsQ0FBQ0csTUFBTSxHQUFHLENBQUMsQ0FBQztJQUNoRztJQUNBLE1BQU1FLEtBQUssR0FBRzVJLGVBQWUsQ0FBQzZJLEtBQUssRUFBRTlHLFFBQVEsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7SUFDdkQsTUFBTStHLGFBQWEsR0FBRzVJLGdCQUFnQixDQUFDNkksc0JBQXNCLENBQUMsQ0FBQztJQUMvRCxNQUFNQyxXQUFvQixHQUFHVCxzQkFBc0IsQ0FBQ0csTUFBTSxLQUFLLENBQUM7SUFDaEUsTUFBTU8sVUFBa0IsR0FBR0gsYUFBYSxDQUFDSSxlQUFlLEdBQUdKLGFBQWEsQ0FBQ0ksZUFBZSxDQUFDbEUsSUFBSSxHQUFHOEQsYUFBYSxDQUFDSyxpQkFBaUIsQ0FBQ25FLElBQUk7SUFDcEksTUFBTW9FLFlBQVksR0FBR0osV0FBVyxHQUFHSyxjQUFjLENBQUNuSixnQkFBZ0IsQ0FBQ29KLGNBQWMsQ0FBQyxDQUFDLENBQUMsR0FBR3RGLFNBQVM7SUFDaEcsTUFBTXVGLGNBQWMsR0FBRztNQUN0QkMsUUFBUSxFQUFFO1FBQ1RDLE1BQU0sRUFBRTtVQUNQQyxLQUFLLEVBQUUsZ0JBQWdCO1VBQ3ZCQyxHQUFHLEVBQUU7UUFDTjtNQUNELENBQUM7TUFDREMsV0FBVyxFQUFFO1FBQ1pDLE1BQU0sRUFBRTtVQUNQN0csUUFBUSxFQUFFO1FBQ1g7TUFDRDtJQUNELENBQUM7SUFDRCxJQUFJOEcsY0FBbUM7SUFDdkMsSUFBSTVKLGdCQUFnQixDQUFDNkosZUFBZSxDQUFDLENBQUMsS0FBS0MsWUFBWSxDQUFDQyxVQUFVLEVBQUU7TUFDbkVILGNBQWMsR0FBRyxJQUFJO0lBQ3RCLENBQUMsTUFBTSxJQUNONUosZ0JBQWdCLENBQUM2SixlQUFlLENBQUMsQ0FBQyxLQUFLQyxZQUFZLENBQUNFLFVBQVUsSUFDOURoSyxnQkFBZ0IsQ0FBQzZKLGVBQWUsQ0FBQyxDQUFDLEtBQUtDLFlBQVksQ0FBQ0csa0JBQWtCLEVBQ3JFO01BQ0RMLGNBQWMsR0FBRyxLQUFLO0lBQ3ZCO0lBQ0EsTUFBTU0seUJBQXlCLEdBQzlCbEssZ0JBQWdCLENBQUNvRCxrQkFBa0IsQ0FBQyxDQUFDLENBQUM4Ryx5QkFBeUIsQ0FBQyxDQUFDLElBQ2pFbEssZ0JBQWdCLENBQUM2SixlQUFlLENBQUMsQ0FBQyxLQUFLQyxZQUFZLENBQUNHLGtCQUFrQjtJQUN2RSxNQUFNRSx3QkFBd0IsR0FBR0QseUJBQXlCLEdBQUcsb0NBQW9DLEdBQUcsRUFBRTtJQUN0RyxNQUFNN0ksT0FBTyxHQUFHNkkseUJBQXlCLEdBQUcsZ0RBQWdELEdBQUcsTUFBTTtJQUNyRyxNQUFNRSxzQkFBc0IsR0FBR2xGLGlCQUFpQixDQUFDbUYseUJBQXlCLENBQUMsQ0FBQztJQUM1RXBDLGVBQWUsQ0FBQ3FDLFlBQVksR0FBR0Ysc0JBQXNCLEdBQUdBLHNCQUFzQixDQUFDRyxRQUFRLENBQUMsUUFBUSxDQUFDLEdBQUcsSUFBSTtJQUN4RyxJQUFJakUsU0FBUyxHQUFHLEVBQUU7SUFDbEIsSUFBSXhHLGVBQWUsQ0FBQ3NCLGtCQUFrQixDQUFDa0gsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDRSxNQUFNLEdBQUcsQ0FBQyxFQUFFO01BQzdEbEMsU0FBUyxHQUFHeEcsZUFBZSxDQUFDc0Isa0JBQWtCLENBQUNrSCxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzdEO0lBQ0EsTUFBTWtDLGlCQUFpQixHQUFHQyxxQkFBcUIsQ0FBQyxZQUFZLEVBQUV6SyxnQkFBZ0IsRUFBRUQsaUJBQWlCLENBQUM7SUFDbEcsTUFBTTJLLHdCQUF3QixHQUFHMUssZ0JBQWdCLENBQUMySyxzQkFBc0IsQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFHLEtBQUs7SUFDekYsTUFBTUMsaUJBQWlCLEdBQUdDLEdBQUcsQ0FBQ0MscUJBQXFCLENBQUMsQ0FBQyxFQUFFTixpQkFBaUIsQ0FBQztJQUN6RSxNQUFNO01BQUVwRyxNQUFNO01BQUVDO0lBQWMsQ0FBQyxHQUFHRixhQUFhLENBQUNwRSxpQkFBaUIsRUFBRUMsZ0JBQWdCLENBQUM7SUFDcEYsTUFBTXVFLGFBQWEsR0FBR0QsZ0JBQWdCLENBQUN2RSxpQkFBaUIsRUFBRUMsZ0JBQWdCLENBQUM7SUFDM0UsT0FBTztNQUNOZSxJQUFJLEVBQUVnSyxpQkFBaUIsQ0FBQ0MsS0FBSztNQUM3QkMsRUFBRSxFQUFFM0UsU0FBUyxHQUNWNEUsVUFBVSxDQUFDcEMsV0FBVyxHQUFHQyxVQUFVLEdBQUdWLHNCQUFzQixFQUFFL0IsU0FBUyxFQUFFeUUsaUJBQWlCLENBQUNDLEtBQUssQ0FBQyxHQUNqR0UsVUFBVSxDQUFDcEMsV0FBVyxHQUFHQyxVQUFVLEdBQUdWLHNCQUFzQixFQUFFMEMsaUJBQWlCLENBQUNDLEtBQUssQ0FBQztNQUN6RkcsVUFBVSxFQUFFQyxtQkFBbUIsQ0FBQ3BMLGdCQUFnQixDQUFDNkksc0JBQXNCLENBQUMsQ0FBQyxDQUFDO01BQzFFd0MsS0FBSyxFQUFFQyxRQUFRLENBQUMsQ0FDZmhGLFNBQVMsR0FDTjRFLFVBQVUsQ0FBQ3BDLFdBQVcsR0FBR0MsVUFBVSxHQUFHVixzQkFBc0IsRUFBRS9CLFNBQVMsRUFBRXlFLGlCQUFpQixDQUFDQyxLQUFLLENBQUMsR0FDakdFLFVBQVUsQ0FBQ3BDLFdBQVcsR0FBR0MsVUFBVSxHQUFHVixzQkFBc0IsRUFBRTBDLGlCQUFpQixDQUFDQyxLQUFLLENBQUMsRUFDekYsT0FBTyxDQUNQLENBQUM7TUFDRmpDLFVBQVUsRUFBRUEsVUFBVTtNQUN0QnRGLGVBQWUsRUFBRVAsV0FBVyxDQUFDbkQsaUJBQWlCLEVBQUVDLGdCQUFnQixDQUFDO01BQ2pFdUwsY0FBYyxFQUFFbEQsc0JBQXNCO01BQ3RDbkgsY0FBYyxFQUFFbEIsZ0JBQWdCLENBQUN3TCx5QkFBeUIsQ0FBQ3pMLGlCQUFpQixDQUFDO01BQzdFMEwsUUFBUSxFQUFFdkMsWUFBWTtNQUN0QndDLGFBQWEsRUFBRUMsSUFBSSxDQUFDQyxTQUFTLENBQUN2QyxjQUFjLENBQUM7TUFDN0M5RyxPQUFPLEVBQUV0QyxZQUFZLENBQUNzQyxPQUFPO01BQzdCUyxjQUFjLEVBQUUvQyxZQUFZLENBQUMrQyxjQUFjO01BQzNDMEYsS0FBSyxFQUFFQSxLQUFLO01BQ1prQixjQUFjLEVBQUVBLGNBQWM7TUFDOUJPLHdCQUF3QixFQUFFQSx3QkFBd0I7TUFDbEQ5SSxPQUFPLEVBQUVBLE9BQU87TUFDaEJ3SyxTQUFTLEVBQUU5RixpQkFBaUI7TUFDNUIrRixRQUFRLEVBQUU3RSxrQkFBa0I7TUFDNUI4RSxjQUFjLEVBQUU5RCxlQUFlO01BQy9CaEQsZ0NBQWdDO01BQ2hDM0IsaUJBQWlCLEVBQUUwSSxxQkFBcUIsQ0FBQ3BHLFFBQVEsRUFBRXRDLGlCQUFpQixDQUFDO01BQ3JFc0gsaUJBQWlCLEVBQUVBLGlCQUFpQjtNQUNwQ0osaUJBQWlCLEVBQUVBLGlCQUFpQjtNQUNwQ0Usd0JBQXdCLEVBQUVBLHdCQUF3QjtNQUNsRHRHLE1BQU0sRUFBRUEsTUFBTTtNQUNkQyxhQUFhLEVBQUVBLGFBQWE7TUFDNUJFLGFBQWEsRUFBRUE7SUFDaEIsQ0FBQztFQUNGO0VBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBTEF0QixRQUFBLENBQUE4Qix3QkFBQSxHQUFBQSx3QkFBQTtFQU1BLFNBQVNpSCxxQkFBcUJBLENBQUNwRyxRQUF1QixFQUFFdEMsaUJBQXdDLEVBQXlCO0lBQ3hILE9BQU9BLGlCQUFpQixLQUFLLFNBQVMsSUFBSSxDQUFDc0MsUUFBUSxHQUFHaEMscUJBQXFCLENBQUNxSSxJQUFJLEdBQUczSSxpQkFBaUI7RUFDckc7O0VBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDTyxTQUFTNEkscUNBQXFDQSxDQUNwRGxNLGdCQUF5RCxFQUN6REQsaUJBQXlCLEVBQ3pCb00sYUFBNkMsRUFDaEI7SUFDN0IsTUFBTTdGLFNBQVMsR0FBRzZGLGFBQWEsQ0FBQy9LLGtCQUFrQixDQUFDa0gsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDRSxNQUFNLEdBQUcsQ0FBQyxHQUFHMkQsYUFBYSxDQUFDL0ssa0JBQWtCLENBQUNrSCxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRTtJQUM5SCxNQUFNLENBQUNELHNCQUFzQixDQUFDLEdBQUd0SSxpQkFBaUIsQ0FBQ3VJLEtBQUssQ0FBQyxHQUFHLENBQUM7SUFFN0QsTUFBTU0sYUFBYSxHQUFHNUksZ0JBQWdCLENBQUM2SSxzQkFBc0IsQ0FBQyxDQUFDO0lBQy9ELE1BQU1DLFdBQW9CLEdBQUdULHNCQUFzQixDQUFDRyxNQUFNLEtBQUssQ0FBQztJQUNoRSxNQUFNTyxVQUFrQixHQUFHSCxhQUFhLENBQUNJLGVBQWUsRUFBRWxFLElBQUksSUFBSThELGFBQWEsQ0FBQ0ssaUJBQWlCLENBQUNuRSxJQUFJO0lBQ3RHLE1BQU1JLGlCQUFpQixHQUFHLElBQUlDLGlCQUFpQixDQUFDbkYsZ0JBQWdCLENBQUNvRixhQUFhLENBQUMsQ0FBQyxFQUFFcEYsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDO0lBQ3pHLE1BQU1vSyxzQkFBc0IsR0FBR2xGLGlCQUFpQixDQUFDbUYseUJBQXlCLENBQUMsQ0FBQztJQUM1RSxNQUFNSyx3QkFBd0IsR0FBRyxDQUFDLENBQUMxSyxnQkFBZ0IsQ0FBQzJLLHNCQUFzQixDQUFDLENBQUM7SUFDNUUsT0FBTztNQUNOekosY0FBYyxFQUFFbEIsZ0JBQWdCLENBQUN3TCx5QkFBeUIsQ0FBQ3pMLGlCQUFpQixDQUFDO01BQzdFMkssd0JBQXdCO01BQ3hCUyxVQUFVLEVBQUVDLG1CQUFtQixDQUFDcEwsZ0JBQWdCLENBQUM2SSxzQkFBc0IsQ0FBQyxDQUFDLENBQUM7TUFDMUU5SCxJQUFJLEVBQUVnSyxpQkFBaUIsQ0FBQ0MsS0FBSztNQUM3QmpDLFVBQVU7TUFDVmtDLEVBQUUsRUFBRTNFLFNBQVMsR0FDVjRFLFVBQVUsQ0FBQ3BDLFdBQVcsR0FBR0MsVUFBVSxHQUFHVixzQkFBc0IsRUFBRS9CLFNBQVMsRUFBRXlFLGlCQUFpQixDQUFDQyxLQUFLLENBQUMsR0FDakdFLFVBQVUsQ0FBQ3BDLFdBQVcsR0FBR0MsVUFBVSxHQUFHVixzQkFBc0IsRUFBRTBDLGlCQUFpQixDQUFDQyxLQUFLLENBQUM7TUFDekZLLEtBQUssRUFBRUMsUUFBUSxDQUFDLENBQ2ZoRixTQUFTLEdBQ040RSxVQUFVLENBQUNwQyxXQUFXLEdBQUdDLFVBQVUsR0FBR1Ysc0JBQXNCLEVBQUUvQixTQUFTLEVBQUV5RSxpQkFBaUIsQ0FBQ0MsS0FBSyxDQUFDLEdBQ2pHRSxVQUFVLENBQUNwQyxXQUFXLEdBQUdDLFVBQVUsR0FBR1Ysc0JBQXNCLEVBQUUwQyxpQkFBaUIsQ0FBQ0MsS0FBSyxDQUFDLEVBQ3pGLE9BQU8sQ0FDUCxDQUFDO01BQ0ZlLGNBQWMsRUFBRTtRQUNmcEwsS0FBSyxFQUFFLDZDQUE2QztRQUNwRDJKLFlBQVksRUFBRUYsc0JBQXNCLEVBQUVHLFFBQVEsQ0FBQyxRQUFRLENBQUMsSUFBSTtNQUM3RDtJQUNELENBQUM7RUFDRjs7RUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFMQXRILFFBQUEsQ0FBQWlKLHFDQUFBLEdBQUFBLHFDQUFBO0VBTUEsU0FBUzVLLDZCQUE2QkEsQ0FDckNsQixTQUFpQyxFQUNqQ0osZ0JBQXlELEVBQ3RCO0lBQ25DLE9BQU9vTSxpQkFBaUIsQ0FDdkJDLEdBQUcsQ0FDRkMsS0FBSyxDQUNKQywyQkFBMkIsQ0FDMUJuTSxTQUFTLENBQUMrRixXQUFXLEVBQUVxRyxFQUFFLEVBQUVDLE1BQU0sRUFDakMsRUFBRSxFQUNGM0ksU0FBUyxFQUNUOUQsZ0JBQWdCLENBQUMwTSw0QkFBNEIsQ0FBQyxDQUMvQyxDQUFDLEVBQ0QsSUFDRCxDQUNELENBQ0QsQ0FBQztFQUNGO0VBRU8sU0FBU0MsNkJBQTZCQSxDQUFDM00sZ0JBQXlELEVBQXNCO0lBQzVILE1BQU1rSyx5QkFBeUIsR0FDOUJsSyxnQkFBZ0IsQ0FBQ29ELGtCQUFrQixDQUFDLENBQUMsQ0FBQzhHLHlCQUF5QixDQUFDLENBQUMsSUFDakVsSyxnQkFBZ0IsQ0FBQzZKLGVBQWUsQ0FBQyxDQUFDLEtBQUtDLFlBQVksQ0FBQ0csa0JBQWtCO0lBQ3ZFLE1BQU1yQixhQUFhLEdBQUc1SSxnQkFBZ0IsQ0FBQzZJLHNCQUFzQixDQUFDLENBQUM7SUFDL0QsTUFBTUUsVUFBVSxHQUFHSCxhQUFhLENBQUNJLGVBQWUsR0FBR0osYUFBYSxDQUFDSSxlQUFlLENBQUNsRSxJQUFJLEdBQUc4RCxhQUFhLENBQUNLLGlCQUFpQixDQUFDbkUsSUFBSTtJQUU1SCxNQUFNcUgsYUFBaUMsR0FBRztNQUN6Q3BMLElBQUksRUFBRWdLLGlCQUFpQixDQUFDQyxLQUFLO01BQzdCQyxFQUFFLEVBQUVDLFVBQVUsQ0FBQ25DLFVBQVUsRUFBRWdDLGlCQUFpQixDQUFDQyxLQUFLLENBQUM7TUFDbkRLLEtBQUssRUFBRUMsUUFBUSxDQUFDLENBQUNKLFVBQVUsQ0FBQ25DLFVBQVUsRUFBRWdDLGlCQUFpQixDQUFDQyxLQUFLLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQztNQUMzRWpDLFVBQVUsRUFBRUEsVUFBVTtNQUN0QkwsS0FBSyxFQUFFLEVBQUU7TUFDVHlDLFVBQVUsRUFBRSxFQUFFO01BQ2QxSCxlQUFlLEVBQUVLLFNBQVM7TUFDMUJ5SCxjQUFjLEVBQUUsRUFBRTtNQUNsQnJLLGNBQWMsRUFBRSxFQUFFO01BQ2xCd0ssYUFBYSxFQUFFQyxJQUFJLENBQUNDLFNBQVMsQ0FBQztRQUM3QmxDLFdBQVcsRUFBRTtVQUNaQyxNQUFNLEVBQUU7WUFDUDdHLFFBQVEsRUFBRTtVQUNYO1FBQ0Q7TUFDRCxDQUFDLENBQUM7TUFDRlAsT0FBTyxFQUFFLEVBQUU7TUFDWFMsY0FBYyxFQUFFLENBQUMsQ0FBQztNQUNsQjRHLGNBQWMsRUFBRSxLQUFLO01BQ3JCTyx3QkFBd0IsRUFBRSxFQUFFO01BQzVCOUksT0FBTyxFQUFFNkkseUJBQXlCLEdBQUcsZ0RBQWdELEdBQUcsTUFBTTtNQUM5RjJCLFNBQVMsRUFBRSxDQUFDLENBQUM7TUFDYkMsUUFBUSxFQUFFLENBQUMsQ0FBQztNQUNaQyxjQUFjLEVBQUU7UUFDZnBMLEtBQUssRUFBRSw2Q0FBNkM7UUFDcER1SCxzQkFBc0IsRUFBRSxFQUFFO1FBQzFCQyxtQkFBbUIsRUFBRSxFQUFFO1FBQ3ZCbUMsWUFBWSxFQUFFO01BQ2YsQ0FBQztNQUNEc0MsVUFBVSxFQUFFLEtBQUs7TUFDakJ0SixpQkFBaUIsRUFBRU0scUJBQXFCLENBQUNxSTtJQUMxQyxDQUFDO0lBRUQsT0FBT0UsYUFBYTtFQUNyQjtFQUFDbEosUUFBQSxDQUFBMEosNkJBQUEsR0FBQUEsNkJBQUE7RUFBQSxPQUFBMUosUUFBQTtBQUFBIiwiaWdub3JlTGlzdCI6W119
448
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJnZXRDaGFydEFjdGlvbnNGcm9tQW5ub3RhdGlvbnMiLCJjaGFydEFubm90YXRpb24iLCJ2aXN1YWxpemF0aW9uUGF0aCIsImNvbnZlcnRlckNvbnRleHQiLCJjaGFydEFjdGlvbnMiLCJBY3Rpb25zIiwiZm9yRWFjaCIsImRhdGFGaWVsZCIsImtleSIsIktleUhlbHBlciIsImdlbmVyYXRlS2V5RnJvbURhdGFGaWVsZCIsImlzRGF0YUZpZWxkRm9yQWN0aW9uQWJzdHJhY3QiLCJJbmxpbmUiLCJEZXRlcm1pbmluZyIsIiRUeXBlIiwiQWN0aW9uVGFyZ2V0IiwiaXNCb3VuZCIsInB1c2giLCJ0eXBlIiwiQWN0aW9uVHlwZSIsIkRhdGFGaWVsZEZvckFjdGlvbiIsImFubm90YXRpb25QYXRoIiwiZ2V0RW50aXR5U2V0QmFzZWRBbm5vdGF0aW9uUGF0aCIsImZ1bGx5UXVhbGlmaWVkTmFtZSIsInZpc2libGUiLCJnZXRDb21waWxlRXhwcmVzc2lvbkZvckFjdGlvbiIsImlzQUlPcGVyYXRpb24iLCJpc0FjdGlvbkFJT3BlcmF0aW9uIiwidW5kZWZpbmVkIiwiRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uIiwiaXNOYXZpZ2FibGUiLCJpc0Fubm90YXRpb25BY3Rpb25Hcm91cCIsIk1lbnUiLCJ0ZXh0IiwiTGFiZWwiLCJ0b1N0cmluZyIsIm1lbnUiLCJtYXAiLCJhY3Rpb24iLCJnZXREYXRhRmllbGRBbm5vdGF0aW9uQWN0aW9uIiwiaXNNZW51QUlPcGVyYXRpb24iLCJnZXRDaGFydEFjdGlvbnMiLCJhQW5ub3RhdGlvbkFjdGlvbnMiLCJtYW5pZmVzdEFjdGlvbnMiLCJnZXRBY3Rpb25zRnJvbU1hbmlmZXN0IiwiZ2V0TWFuaWZlc3RDb250cm9sQ29uZmlndXJhdGlvbiIsImFjdGlvbnMiLCJhY3Rpb25PdmVyd3JpdGVDb25maWciLCJlbmFibGVkIiwiT3ZlcnJpZGVUeXBlIiwib3ZlcndyaXRlIiwiZW5hYmxlT25TZWxlY3QiLCJjb21tYW5kIiwicG9zaXRpb24iLCJpbnNlcnRDdXN0b21FbGVtZW50cyIsImNvbW1hbmRBY3Rpb25zIiwiX2V4cG9ydHMiLCJnZXRQMTNuTW9kZSIsIm1hbmlmZXN0V3JhcHBlciIsImdldE1hbmlmZXN0V3JhcHBlciIsImNoYXJ0TWFuaWZlc3RTZXR0aW5ncyIsInZhcmlhbnRNYW5hZ2VtZW50IiwiZ2V0VmFyaWFudE1hbmFnZW1lbnQiLCJhUGVyc29uYWxpemF0aW9uIiwicGVyc29uYWxpemF0aW9uIiwiY2hhcnRTZXR0aW5ncyIsImlzQ29udHJvbFZhcmlhbnQiLCJWYXJpYW50TWFuYWdlbWVudFR5cGUiLCJDb250cm9sIiwiaXRlbSIsInNvcnQiLCJmaWx0ZXIiLCJqb2luIiwiZ2V0SGVhZGVySW5mbyIsImhlYWRlciIsImhlYWRlclZpc2libGUiLCJnZXRTZWxlY3Rpb25Nb2RlIiwic2VsZWN0aW9uTW9kZSIsImdldEFnZ3JlZ2F0YWJsZVByb3BlcnRpZXNPYmplY3QiLCJhZ2dQcm9wIiwib2JqIiwiUHJvcGVydHkiLCIkUHJvcGVydHlQYXRoIiwidmFsdWUiLCJuYW1lIiwiY3JlYXRlQ2hhcnRWaXN1YWxpemF0aW9uIiwiZG9Ob3RDaGVja0FwcGx5U3VwcG9ydGVkIiwic2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudFBhdGgiLCJhZ2dyZWdhdGlvbkhlbHBlciIsIkFnZ3JlZ2F0aW9uSGVscGVyIiwiZ2V0RW50aXR5VHlwZSIsImlzQW5hbHl0aWNzU3VwcG9ydGVkIiwiRXJyb3IiLCJhVHJhbnNBZ2dyZWdhdGlvbnMiLCJnZXRUcmFuc0FnZ3JlZ2F0aW9ucyIsImFDdXN0b21BZ2dyZWdhdGVzIiwiZ2V0Q3VzdG9tQWdncmVnYXRlRGVmaW5pdGlvbnMiLCJwYWdlTWFuaWZlc3RTZXR0aW5ncyIsInAxM25Nb2RlIiwiTG9nIiwid2FybmluZyIsIm1DdXN0b21BZ2dyZWdhdGVzIiwiZW50aXR5VHlwZSIsImN1c3RvbUFnZ3JlZ2F0ZSIsImFDb250ZXh0RGVmaW5pbmdQcm9wZXJ0aWVzIiwiYW5ub3RhdGlvbnMiLCJBZ2dyZWdhdGlvbiIsIkNvbnRleHREZWZpbmluZ1Byb3BlcnRpZXMiLCJxdWFsaWZpZXIiLCJyZWxhdGVkQ3VzdG9tQWdncmVnYXRlUHJvcGVydHkiLCJlbnRpdHlQcm9wZXJ0aWVzIiwiZmluZCIsInByb3BlcnR5IiwibGFiZWwiLCJDb21tb24iLCJzb3J0YWJsZSIsInNvcnRPcmRlciIsImNvbnRleHREZWZpbmluZ1Byb3BlcnR5Iiwib0N0eERlZlByb3BlcnR5IiwibVRyYW5zQWdncmVnYXRpb25zIiwib1Jlc291cmNlQnVuZGxlQ29yZSIsIkxpYnJhcnkiLCJnZXRSZXNvdXJjZUJ1bmRsZUZvciIsImVsZW1lbnQiLCJOYW1lIiwicHJvcGVydHlQYXRoIiwiQWdncmVnYXRhYmxlUHJvcGVydHkiLCJhZ2dyZWdhdGlvbk1ldGhvZCIsIkFnZ3JlZ2F0aW9uTWV0aG9kIiwiZ2V0VGV4dCIsImN1c3RvbSIsImFBZ2dQcm9wcyIsImdldEFnZ3JlZ2F0YWJsZVByb3BlcnRpZXMiLCJhR3JwUHJvcHMiLCJnZXRHcm91cGFibGVQcm9wZXJ0aWVzIiwibUFwcGx5U3VwcG9ydGVkIiwiQWdncmVnYXRhYmxlUHJvcGVydGllcyIsIkdyb3VwYWJsZVByb3BlcnRpZXMiLCJwcm9wIiwibmF2aWdhdGlvblByb3BlcnR5UGF0aCIsInNwbGl0IiwibGFzdEluZGV4T2YiLCJsZW5ndGgiLCJzdWJzdHJpbmciLCJ0aXRsZSIsIlRpdGxlIiwiZGF0YU1vZGVsUGF0aCIsImdldERhdGFNb2RlbE9iamVjdFBhdGgiLCJpc0VudGl0eVNldCIsImVudGl0eU5hbWUiLCJ0YXJnZXRFbnRpdHlTZXQiLCJzdGFydGluZ0VudGl0eVNldCIsInNGaWx0ZXJiYXJJZCIsImdldEZpbHRlckJhcklEIiwiZ2V0Q29udGV4dFBhdGgiLCJvVml6UHJvcGVydGllcyIsInBsb3RBcmVhIiwid2luZG93Iiwic3RhcnQiLCJlbmQiLCJsZWdlbmRHcm91cCIsImxheW91dCIsImF1dG9CaW5kT25Jbml0IiwiZ2V0VGVtcGxhdGVUeXBlIiwiVGVtcGxhdGVUeXBlIiwiT2JqZWN0UGFnZSIsIkxpc3RSZXBvcnQiLCJBbmFseXRpY2FsTGlzdFBhZ2UiLCJoYXNNdWx0aXBsZVZpc3VhbGl6YXRpb25zIiwib25TZWdtZW50ZWRCdXR0b25QcmVzc2VkIiwiYWxsb3dlZFRyYW5zZm9ybWF0aW9ucyIsImdldEFsbG93ZWRUcmFuc2Zvcm1hdGlvbnMiLCJlbmFibGVTZWFyY2giLCJpbmNsdWRlcyIsImlzSW5zaWdodHNWaXNpYmxlIiwiZ2V0SW5zaWdodHNWaXNpYmlsaXR5IiwiaXNQYXJhbWV0ZXJpemVkRW50aXR5U2V0IiwiZ2V0UGFyYW1ldGVyRW50aXR5VHlwZSIsImlzSW5zaWdodHNFbmFibGVkIiwiYW5kIiwiZ2V0SW5zaWdodHNFbmFibGVtZW50IiwiY2hhcnREaW1lbnNpb25LZXlBbmRSb2xlIiwiRGltZW5zaW9uQXR0cmlidXRlcyIsImRpbWVuc2lvbkF0dHJpYnV0ZSIsIkRpbWVuc2lvbiIsIlJvbGUiLCJjaGFydE1lYXN1cmVLZXlBbmRSb2xlIiwiTWVhc3VyZUF0dHJpYnV0ZXMiLCJtZWFzdXJlQXR0cmlidXRlIiwiTWVhc3VyZSIsIlZpc3VhbGl6YXRpb25UeXBlIiwiQ2hhcnQiLCJpZCIsImdldENoYXJ0SUQiLCJjb2xsZWN0aW9uIiwiZ2V0VGFyZ2V0T2JqZWN0UGF0aCIsImFwaUlkIiwiZ2VuZXJhdGUiLCJuYXZpZ2F0aW9uUGF0aCIsImdldEFic29sdXRlQW5ub3RhdGlvblBhdGgiLCJmaWx0ZXJJZCIsInZpelByb3BlcnRpZXMiLCJKU09OIiwic3RyaW5naWZ5IiwiY3VzdG9tQWdnIiwidHJhbnNBZ2ciLCJhcHBseVN1cHBvcnRlZCIsImZpbmRWYXJpYW50TWFuYWdlbWVudCIsIk5vbmUiLCJjcmVhdGVDaGFydFZpc3VhbGl6YXRpb25Gb3JUZW1wbGF0aW5nIiwidmlzdWFsaXphdGlvbiIsImNvbXBpbGVFeHByZXNzaW9uIiwibm90IiwiZXF1YWwiLCJnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24iLCJVSSIsIkhpZGRlbiIsImdldFJlbGF0aXZlTW9kZWxQYXRoRnVuY3Rpb24iLCJjcmVhdGVCbGFua0NoYXJ0VmlzdWFsaXphdGlvbiIsIm11bHRpVmlld3MiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIkNoYXJ0LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgUHJvcGVydHksIFByb3BlcnR5UGF0aCB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlc1wiO1xuaW1wb3J0IHR5cGUgeyBBZ2dyZWdhdGFibGVQcm9wZXJ0eVR5cGUsIEFnZ3JlZ2F0aW9uTWV0aG9kIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9BZ2dyZWdhdGlvblwiO1xuaW1wb3J0IHsgQWdncmVnYXRpb25Bbm5vdGF0aW9uVHlwZXMgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL0FnZ3JlZ2F0aW9uXCI7XG5pbXBvcnQgdHlwZSB7XG5cdENoYXJ0LFxuXHREYXRhRmllbGRBYnN0cmFjdFR5cGVzLFxuXHREYXRhRmllbGRGb3JBY3Rpb25Hcm91cCxcblx0RGF0YUZpZWxkRm9yQWN0aW9uR3JvdXBUeXBlcyxcblx0RGF0YUZpZWxkRm9yQWN0aW9uVHlwZXNcbn0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9VSVwiO1xuaW1wb3J0IHsgVUlBbm5vdGF0aW9uVHlwZXMgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL1VJXCI7XG5pbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCB0eXBlIHsgQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24gfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCB7IGFuZCwgY29tcGlsZUV4cHJlc3Npb24sIGVxdWFsLCBnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24sIG5vdCwgdHlwZSBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24gfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCB0eXBlIHsgUGFnZUNvbnRleHRQYXRoVGFyZ2V0IH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvVGVtcGxhdGVDb252ZXJ0ZXJcIjtcbmltcG9ydCB7IGlzRGF0YUZpZWxkRm9yQWN0aW9uQWJzdHJhY3QgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9hbm5vdGF0aW9ucy9EYXRhRmllbGRcIjtcbmltcG9ydCB0eXBlIHtcblx0QW5ub3RhdGlvbkFjdGlvbixcblx0QW5ub3RhdGlvbkFjdGlvbkFjdGlvbkdyb3VwLFxuXHRCYXNlQWN0aW9uLFxuXHRDb21iaW5lZEFjdGlvbixcblx0Q3VzdG9tQWN0aW9uLFxuXHRPdmVycmlkZVR5cGVBY3Rpb25cbn0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvQ29tbW9uL0FjdGlvblwiO1xuaW1wb3J0IHsgZ2V0QWN0aW9uc0Zyb21NYW5pZmVzdCwgaXNBY3Rpb25BSU9wZXJhdGlvbiwgaXNNZW51QUlPcGVyYXRpb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9Db21tb24vQWN0aW9uXCI7XG5pbXBvcnQgeyBPdmVycmlkZVR5cGUsIGluc2VydEN1c3RvbUVsZW1lbnRzIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvaGVscGVycy9Db25maWd1cmFibGVPYmplY3RcIjtcbmltcG9ydCB7IEtleUhlbHBlciB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2hlbHBlcnMvS2V5XCI7XG5pbXBvcnQgeyBnZW5lcmF0ZSB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1N0YWJsZUlkSGVscGVyXCI7XG5pbXBvcnQgeyBnZXRUYXJnZXRPYmplY3RQYXRoIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvRGF0YU1vZGVsUGF0aEhlbHBlclwiO1xuaW1wb3J0IExpYnJhcnkgZnJvbSBcInNhcC91aS9jb3JlL0xpYlwiO1xuaW1wb3J0IHR5cGUgeyBFeHBhbmRQYXRoVHlwZSB9IGZyb20gXCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi90eXBlcy9tZXRhbW9kZWxfdHlwZXNcIjtcbmltcG9ydCB0eXBlIENvbnZlcnRlckNvbnRleHQgZnJvbSBcIi4uLy4uL0NvbnZlcnRlckNvbnRleHRcIjtcbmltcG9ydCB0eXBlIHsgQ2hhcnRNYW5pZmVzdENvbmZpZ3VyYXRpb24sIE1hbmlmZXN0QWN0aW9uIH0gZnJvbSBcIi4uLy4uL01hbmlmZXN0U2V0dGluZ3NcIjtcbmltcG9ydCB7IEFjdGlvblR5cGUsIFRlbXBsYXRlVHlwZSwgVmFyaWFudE1hbmFnZW1lbnRUeXBlLCBWaXN1YWxpemF0aW9uVHlwZSB9IGZyb20gXCIuLi8uLi9NYW5pZmVzdFNldHRpbmdzXCI7XG5pbXBvcnQgdHlwZSBNYW5pZmVzdFdyYXBwZXIgZnJvbSBcIi4uLy4uL01hbmlmZXN0V3JhcHBlclwiO1xuaW1wb3J0IHsgQWdncmVnYXRpb25IZWxwZXIgfSBmcm9tIFwiLi4vLi4vaGVscGVycy9BZ2dyZWdhdGlvblwiO1xuaW1wb3J0IHsgZ2V0Q2hhcnRJRCwgZ2V0RmlsdGVyQmFySUQgfSBmcm9tIFwiLi4vLi4vaGVscGVycy9JRFwiO1xuaW1wb3J0IHsgZ2V0SW5zaWdodHNFbmFibGVtZW50LCBnZXRJbnNpZ2h0c1Zpc2liaWxpdHkgfSBmcm9tIFwiLi4vLi4vaGVscGVycy9JbnNpZ2h0c0hlbHBlcnNcIjtcbmltcG9ydCB0eXBlIHsgQWN0dWFsVmlzdWFsaXphdGlvbkFubm90YXRpb25zIH0gZnJvbSBcIi4vRGF0YVZpc3VhbGl6YXRpb25cIjtcblxuZXhwb3J0IHR5cGUgQ2hhcnRBcHBseVN1cHBvcnRlZCA9IHtcblx0JFR5cGU6IHN0cmluZztcblx0ZW5hYmxlU2VhcmNoPzogYm9vbGVhbjtcblx0QWdncmVnYXRhYmxlUHJvcGVydGllcz86IChFeHBhbmRQYXRoVHlwZTxQcm9wZXJ0eVBhdGg+ICYgeyBQcm9wZXJ0eTogRXhwYW5kUGF0aFR5cGU8UHJvcGVydHlQYXRoPiB9KVtdO1xuXHRHcm91cGFibGVQcm9wZXJ0aWVzPzogKEV4cGFuZFBhdGhUeXBlPFByb3BlcnR5UGF0aD4gJiB7IFByb3BlcnR5OiBFeHBhbmRQYXRoVHlwZTxQcm9wZXJ0eVBhdGg+IH0pW107XG59O1xuZXhwb3J0IHR5cGUgQ2hhcnRUZW1wbGF0ZVZpc3VhbGl6YXRpb24gPSB7XG5cdHR5cGU6IFZpc3VhbGl6YXRpb25UeXBlLkNoYXJ0O1xuXHRpZDogc3RyaW5nO1xuXHRhcGlJZDogc3RyaW5nO1xuXHRlbnRpdHlOYW1lOiBzdHJpbmc7XG5cdGNvbGxlY3Rpb246IHN0cmluZztcblx0YW5ub3RhdGlvblBhdGg6IHN0cmluZztcblx0YXBwbHlTdXBwb3J0ZWQ6IENoYXJ0QXBwbHlTdXBwb3J0ZWQ7XG5cdGlzUGFyYW1ldGVyaXplZEVudGl0eVNldD86IGJvb2xlYW47XG59O1xuXG4vKipcbiAqIEB0eXBlZGVmIENoYXJ0VmlzdWFsaXphdGlvblxuICovXG5leHBvcnQgdHlwZSBDaGFydFZpc3VhbGl6YXRpb24gPSBDaGFydFRlbXBsYXRlVmlzdWFsaXphdGlvbiAmIHtcblx0ZW50aXR5TmFtZTogc3RyaW5nO1xuXHRwZXJzb25hbGl6YXRpb24/OiBzdHJpbmcgfCBib29sZWFuO1xuXHRuYXZpZ2F0aW9uUGF0aDogc3RyaW5nO1xuXHRmaWx0ZXJJZD86IHN0cmluZztcblx0dml6UHJvcGVydGllczogc3RyaW5nO1xuXHRhY3Rpb25zOiBCYXNlQWN0aW9uW107XG5cdGNvbW1hbmRBY3Rpb25zOiBSZWNvcmQ8c3RyaW5nLCBDdXN0b21BY3Rpb24+O1xuXHR0aXRsZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXHRhdXRvQmluZE9uSW5pdDogYm9vbGVhbiB8IHVuZGVmaW5lZDtcblx0b25TZWdtZW50ZWRCdXR0b25QcmVzc2VkOiBzdHJpbmc7XG5cdHZpc2libGU6IHN0cmluZztcblx0Y3VzdG9tQWdnOiBvYmplY3Q7XG5cdHRyYW5zQWdnOiBvYmplY3Q7XG5cdG11bHRpVmlld3M/OiBib29sZWFuO1xuXHR2YXJpYW50TWFuYWdlbWVudDogVmFyaWFudE1hbmFnZW1lbnRUeXBlO1xuXHRzZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50UGF0aD86IHN0cmluZztcblx0aXNJbnNpZ2h0c0VuYWJsZWQ/OiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj47XG5cdGlzSW5zaWdodHNWaXNpYmxlPzogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+O1xuXHRoZWFkZXI/OiBzdHJpbmc7XG5cdGhlYWRlclZpc2libGU/OiBib29sZWFuO1xuXHRzZWxlY3Rpb25Nb2RlPzogc3RyaW5nO1xuXHRjaGFydERpbWVuc2lvbktleUFuZFJvbGU/OiBvYmplY3Q7XG5cdGNoYXJ0TWVhc3VyZUtleUFuZFJvbGU/OiBvYmplY3Q7XG59O1xuXG5leHBvcnQgdHlwZSBDaGFydFAxM25UeXBlID0gc3RyaW5nIHwgYm9vbGVhbiB8IHVuZGVmaW5lZDtcblxuLyoqXG4gKiBNZXRob2QgdG8gcmV0cmlldmUgYWxsIGNoYXJ0IGFjdGlvbnMgZnJvbSBhbm5vdGF0aW9ucy5cbiAqIEBwYXJhbSBjaGFydEFubm90YXRpb25cbiAqIEBwYXJhbSB2aXN1YWxpemF0aW9uUGF0aFxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHRcbiAqIEByZXR1cm5zIFRoZSBjaGFydCBhY3Rpb25zIGZyb20gdGhlIGFubm90YXRpb25cbiAqL1xuZnVuY3Rpb24gZ2V0Q2hhcnRBY3Rpb25zRnJvbUFubm90YXRpb25zKFxuXHRjaGFydEFubm90YXRpb246IENoYXJ0LFxuXHR2aXN1YWxpemF0aW9uUGF0aDogc3RyaW5nLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD5cbik6IEFycmF5PEFubm90YXRpb25BY3Rpb24gfCBBbm5vdGF0aW9uQWN0aW9uQWN0aW9uR3JvdXA+IHtcblx0Y29uc3QgY2hhcnRBY3Rpb25zOiBBcnJheTxBbm5vdGF0aW9uQWN0aW9uIHwgQW5ub3RhdGlvbkFjdGlvbkFjdGlvbkdyb3VwPiA9IFtdO1xuXHRpZiAoY2hhcnRBbm5vdGF0aW9uPy5BY3Rpb25zKSB7XG5cdFx0Y2hhcnRBbm5vdGF0aW9uLkFjdGlvbnMuZm9yRWFjaCgoZGF0YUZpZWxkOiBEYXRhRmllbGRBYnN0cmFjdFR5cGVzIHwgRGF0YUZpZWxkRm9yQWN0aW9uR3JvdXBUeXBlcykgPT4ge1xuXHRcdFx0Y29uc3Qga2V5ID0gS2V5SGVscGVyLmdlbmVyYXRlS2V5RnJvbURhdGFGaWVsZChkYXRhRmllbGQpO1xuXHRcdFx0aWYgKGlzRGF0YUZpZWxkRm9yQWN0aW9uQWJzdHJhY3QoZGF0YUZpZWxkKSAmJiAhZGF0YUZpZWxkLklubGluZSAmJiAhZGF0YUZpZWxkLkRldGVybWluaW5nKSB7XG5cdFx0XHRcdHN3aXRjaCAoZGF0YUZpZWxkLiRUeXBlKSB7XG5cdFx0XHRcdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JBY3Rpb246XG5cdFx0XHRcdFx0XHRpZiAoZGF0YUZpZWxkLkFjdGlvblRhcmdldCAmJiAhZGF0YUZpZWxkLkFjdGlvblRhcmdldC5pc0JvdW5kKSB7XG5cdFx0XHRcdFx0XHRcdGNoYXJ0QWN0aW9ucy5wdXNoKHtcblx0XHRcdFx0XHRcdFx0XHR0eXBlOiBBY3Rpb25UeXBlLkRhdGFGaWVsZEZvckFjdGlvbixcblx0XHRcdFx0XHRcdFx0XHRhbm5vdGF0aW9uUGF0aDogY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXRCYXNlZEFubm90YXRpb25QYXRoKGRhdGFGaWVsZC5mdWxseVF1YWxpZmllZE5hbWUpLFxuXHRcdFx0XHRcdFx0XHRcdGtleSxcblx0XHRcdFx0XHRcdFx0XHR2aXNpYmxlOiBnZXRDb21waWxlRXhwcmVzc2lvbkZvckFjdGlvbihkYXRhRmllbGQsIGNvbnZlcnRlckNvbnRleHQpLFxuXHRcdFx0XHRcdFx0XHRcdGlzQUlPcGVyYXRpb246IGlzQWN0aW9uQUlPcGVyYXRpb24oZGF0YUZpZWxkKSA9PT0gdHJ1ZSB8fCB1bmRlZmluZWRcblx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRicmVhaztcblxuXHRcdFx0XHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uOlxuXHRcdFx0XHRcdFx0Y2hhcnRBY3Rpb25zLnB1c2goe1xuXHRcdFx0XHRcdFx0XHR0eXBlOiBBY3Rpb25UeXBlLkRhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbixcblx0XHRcdFx0XHRcdFx0YW5ub3RhdGlvblBhdGg6IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0QmFzZWRBbm5vdGF0aW9uUGF0aChkYXRhRmllbGQuZnVsbHlRdWFsaWZpZWROYW1lKSxcblx0XHRcdFx0XHRcdFx0a2V5LFxuXHRcdFx0XHRcdFx0XHR2aXNpYmxlOiBnZXRDb21waWxlRXhwcmVzc2lvbkZvckFjdGlvbihkYXRhRmllbGQsIGNvbnZlcnRlckNvbnRleHQpLFxuXHRcdFx0XHRcdFx0XHRpc05hdmlnYWJsZTogdHJ1ZVxuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRpZiAoaXNBbm5vdGF0aW9uQWN0aW9uR3JvdXAoZGF0YUZpZWxkKSkge1xuXHRcdFx0XHRjaGFydEFjdGlvbnMucHVzaCh7XG5cdFx0XHRcdFx0dHlwZTogQWN0aW9uVHlwZS5NZW51LFxuXHRcdFx0XHRcdHRleHQ6IGRhdGFGaWVsZC5MYWJlbD8udG9TdHJpbmcoKSxcblx0XHRcdFx0XHR2aXNpYmxlOiBnZXRDb21waWxlRXhwcmVzc2lvbkZvckFjdGlvbihkYXRhRmllbGQsIGNvbnZlcnRlckNvbnRleHQpLFxuXHRcdFx0XHRcdG1lbnU6IGRhdGFGaWVsZC5BY3Rpb25zLm1hcCgoYWN0aW9uKSA9PlxuXHRcdFx0XHRcdFx0Z2V0RGF0YUZpZWxkQW5ub3RhdGlvbkFjdGlvbihhY3Rpb24gYXMgRGF0YUZpZWxkRm9yQWN0aW9uVHlwZXMsIGNvbnZlcnRlckNvbnRleHQpXG5cdFx0XHRcdFx0KSxcblx0XHRcdFx0XHRrZXk6IEtleUhlbHBlci5nZW5lcmF0ZUtleUZyb21EYXRhRmllbGQoZGF0YUZpZWxkKSxcblx0XHRcdFx0XHRpc0FJT3BlcmF0aW9uOiBpc01lbnVBSU9wZXJhdGlvbihkYXRhRmllbGQuQWN0aW9ucykgPT09IHRydWUgfHwgdW5kZWZpbmVkXG5cdFx0XHRcdH0gYXMgQW5ub3RhdGlvbkFjdGlvbkFjdGlvbkdyb3VwKTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXHRyZXR1cm4gY2hhcnRBY3Rpb25zO1xufVxuLyoqXG4gKiBDaGVja3MgaWYgdGhlIGRhdGFGaWVsZCBpcyBhIERhdGFGaWVsZEZvckFjdGlvbkdyb3VwLlxuICogQHBhcmFtIGRhdGFGaWVsZCBUaGUgZGF0YUZpZWxkIHRvIGNoZWNrLlxuICogQHJldHVybnMgVGhlIGRhdGFGaWVsZCBpZiBpdCBtYXRjaGVzIERhdGFGaWVsZEZvckFjdGlvbkdyb3VwLlxuICovXG5mdW5jdGlvbiBpc0Fubm90YXRpb25BY3Rpb25Hcm91cChkYXRhRmllbGQ6IERhdGFGaWVsZEFic3RyYWN0VHlwZXMpOiBkYXRhRmllbGQgaXMgRGF0YUZpZWxkRm9yQWN0aW9uR3JvdXAge1xuXHRyZXR1cm4gZGF0YUZpZWxkLiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JBY3Rpb25Hcm91cDtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGFuZCByZXR1cm5zIERhdGFGaWVsZEZvckFjdGlvbiBmb3IgbWVudSBvZiBEYXRhRmllbGRGb3JBY3Rpb25Hcm91cC5cbiAqIEBwYXJhbSBkYXRhRmllbGQgVGhlIGRhdGFmaWVsZCB0byBnZXQgdGhlIGFubm90YXRpb24gYWN0aW9uIGZyb20uXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dCBUaGUgY29udmVydGVyIGNvbnRleHQuXG4gKiBAcmV0dXJucyBBbiBhbm5vdGF0aW9uIGFjdGlvbi5cbiAqL1xuZnVuY3Rpb24gZ2V0RGF0YUZpZWxkQW5ub3RhdGlvbkFjdGlvbihcblx0ZGF0YUZpZWxkOiBEYXRhRmllbGRGb3JBY3Rpb25UeXBlcyxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+XG4pOiBBbm5vdGF0aW9uQWN0aW9uIHtcblx0cmV0dXJuIHtcblx0XHR0eXBlOiBBY3Rpb25UeXBlLkRhdGFGaWVsZEZvckFjdGlvbixcblx0XHRhbm5vdGF0aW9uUGF0aDogY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXRCYXNlZEFubm90YXRpb25QYXRoKGRhdGFGaWVsZC5mdWxseVF1YWxpZmllZE5hbWUpLFxuXHRcdGtleTogS2V5SGVscGVyLmdlbmVyYXRlS2V5RnJvbURhdGFGaWVsZChkYXRhRmllbGQpLFxuXHRcdHZpc2libGU6IGdldENvbXBpbGVFeHByZXNzaW9uRm9yQWN0aW9uKGRhdGFGaWVsZCwgY29udmVydGVyQ29udGV4dClcblx0fTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldENoYXJ0QWN0aW9ucyhcblx0Y2hhcnRBbm5vdGF0aW9uOiBDaGFydCxcblx0dmlzdWFsaXphdGlvblBhdGg6IHN0cmluZyxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+XG4pOiBDb21iaW5lZEFjdGlvbiB7XG5cdGNvbnN0IGFBbm5vdGF0aW9uQWN0aW9ucyA9IGdldENoYXJ0QWN0aW9uc0Zyb21Bbm5vdGF0aW9ucyhjaGFydEFubm90YXRpb24sIHZpc3VhbGl6YXRpb25QYXRoLCBjb252ZXJ0ZXJDb250ZXh0KTtcblx0Y29uc3QgbWFuaWZlc3RBY3Rpb25zID0gZ2V0QWN0aW9uc0Zyb21NYW5pZmVzdChcblx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0Q29udHJvbENvbmZpZ3VyYXRpb248Q2hhcnRNYW5pZmVzdENvbmZpZ3VyYXRpb24+KHZpc3VhbGl6YXRpb25QYXRoKS5hY3Rpb25zIGFzIFJlY29yZDxcblx0XHRcdHN0cmluZyxcblx0XHRcdE1hbmlmZXN0QWN0aW9uXG5cdFx0Pixcblx0XHRjb252ZXJ0ZXJDb250ZXh0LFxuXHRcdGFBbm5vdGF0aW9uQWN0aW9uc1xuXHQpO1xuXHRjb25zdCBhY3Rpb25PdmVyd3JpdGVDb25maWc6IE92ZXJyaWRlVHlwZUFjdGlvbiA9IHtcblx0XHRlbmFibGVkOiBPdmVycmlkZVR5cGUub3ZlcndyaXRlLFxuXHRcdGVuYWJsZU9uU2VsZWN0OiBPdmVycmlkZVR5cGUub3ZlcndyaXRlLFxuXHRcdHZpc2libGU6IE92ZXJyaWRlVHlwZS5vdmVyd3JpdGUsXG5cdFx0Y29tbWFuZDogT3ZlcnJpZGVUeXBlLm92ZXJ3cml0ZSxcblx0XHRwb3NpdGlvbjogT3ZlcnJpZGVUeXBlLm92ZXJ3cml0ZVxuXHR9O1xuXHRjb25zdCBjaGFydEFjdGlvbnMgPSBpbnNlcnRDdXN0b21FbGVtZW50czxCYXNlQWN0aW9uPihhQW5ub3RhdGlvbkFjdGlvbnMsIG1hbmlmZXN0QWN0aW9ucy5hY3Rpb25zLCBhY3Rpb25PdmVyd3JpdGVDb25maWcpO1xuXHRyZXR1cm4ge1xuXHRcdGFjdGlvbnM6IGNoYXJ0QWN0aW9ucyxcblx0XHRjb21tYW5kQWN0aW9uczogbWFuaWZlc3RBY3Rpb25zLmNvbW1hbmRBY3Rpb25zXG5cdH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRQMTNuTW9kZShcblx0dmlzdWFsaXphdGlvblBhdGg6IHN0cmluZyxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+XG4pOiBzdHJpbmcgfCBib29sZWFuIHwgdW5kZWZpbmVkIHtcblx0Y29uc3QgbWFuaWZlc3RXcmFwcGVyOiBNYW5pZmVzdFdyYXBwZXIgPSBjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0V3JhcHBlcigpO1xuXHRjb25zdCBjaGFydE1hbmlmZXN0U2V0dGluZ3M6IENoYXJ0TWFuaWZlc3RDb25maWd1cmF0aW9uID0gY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdENvbnRyb2xDb25maWd1cmF0aW9uKHZpc3VhbGl6YXRpb25QYXRoKTtcblx0Y29uc3QgdmFyaWFudE1hbmFnZW1lbnQ6IFZhcmlhbnRNYW5hZ2VtZW50VHlwZSA9IG1hbmlmZXN0V3JhcHBlci5nZXRWYXJpYW50TWFuYWdlbWVudCgpO1xuXHRjb25zdCBhUGVyc29uYWxpemF0aW9uOiBzdHJpbmdbXSA9IFtdO1xuXHQvLyBQZXJzb25hbGl6YXRpb24gY29uZmlndXJlZCBpbiBtYW5pZmVzdC5cblx0Y29uc3QgcGVyc29uYWxpemF0aW9uID0gY2hhcnRNYW5pZmVzdFNldHRpbmdzPy5jaGFydFNldHRpbmdzPy5wZXJzb25hbGl6YXRpb247XG5cdGNvbnN0IGlzQ29udHJvbFZhcmlhbnQgPSB2YXJpYW50TWFuYWdlbWVudCA9PT0gVmFyaWFudE1hbmFnZW1lbnRUeXBlLkNvbnRyb2wgPyB0cnVlIDogZmFsc2U7XG5cdC8vIGlmIHBlcnNvbmFsaXphdGlvbiBpcyBzZXQgdG8gZmFsc2UgZG8gbm90IHNob3cgYW55IG9wdGlvblxuXHRpZiAoKHBlcnNvbmFsaXphdGlvbiAhPT0gdW5kZWZpbmVkICYmICFwZXJzb25hbGl6YXRpb24pIHx8IHBlcnNvbmFsaXphdGlvbiA9PSBcImZhbHNlXCIpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblx0aWYgKHR5cGVvZiBwZXJzb25hbGl6YXRpb24gPT09IFwib2JqZWN0XCIpIHtcblx0XHQvLyBTcGVjaWZpYyBwZXJzb25hbGl6YXRpb24gb3B0aW9ucyBlbmFibGVkIGluIG1hbmlmZXN0LiBVc2UgdGhlbSBhcyBpcy5cblx0XHRpZiAocGVyc29uYWxpemF0aW9uLnR5cGUpIHtcblx0XHRcdGFQZXJzb25hbGl6YXRpb24ucHVzaChcIlR5cGVcIik7XG5cdFx0fVxuXHRcdGlmIChwZXJzb25hbGl6YXRpb24uaXRlbSkge1xuXHRcdFx0YVBlcnNvbmFsaXphdGlvbi5wdXNoKFwiSXRlbVwiKTtcblx0XHR9XG5cdFx0aWYgKHBlcnNvbmFsaXphdGlvbi5zb3J0KSB7XG5cdFx0XHRhUGVyc29uYWxpemF0aW9uLnB1c2goXCJTb3J0XCIpO1xuXHRcdH1cblx0XHRpZiAocGVyc29uYWxpemF0aW9uLmZpbHRlcikge1xuXHRcdFx0YVBlcnNvbmFsaXphdGlvbi5wdXNoKFwiRmlsdGVyXCIpO1xuXHRcdH1cblx0XHRyZXR1cm4gYVBlcnNvbmFsaXphdGlvbi5qb2luKFwiLFwiKTtcblx0fSBlbHNlIGlmIChpc0NvbnRyb2xWYXJpYW50IHx8ICEhcGVyc29uYWxpemF0aW9uKSB7XG5cdFx0Ly8gbWFuaWZlc3QgaGFzIHBlcnNvbmFsaXphdGlvbiBjb25maWd1cmVkLCBjaGVjayBpZiBpdCdzIHRydWVcblx0XHQvLyBpZiBtYW5pZmVzdCBkb2Vzbid0IGhhdmUgcGVyc29uYWxpemF0aW9uLCBjaGVjayBmb3IgdmFyaWFudCBtYW5hZ2VtZW50IGlzIHNldCB0byBjb250cm9sXG5cdFx0cmV0dXJuIFwiU29ydCxUeXBlLEl0ZW0sRmlsdGVyXCI7XG5cdH0gZWxzZSB7XG5cdFx0Ly8gaWYgbWFuaWZlc3QgZG9lc24ndCBoYXZlIHBlcnNvbmFsaXphdGlvbiwgc2hvdyBkZWZhdWx0IG9wdGlvbnMgd2l0aG91dCBmaWx0ZXJcblx0XHRyZXR1cm4gXCJTb3J0LFR5cGUsSXRlbVwiO1xuXHR9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRIZWFkZXJJbmZvKFxuXHR2aXN1YWxpemF0aW9uUGF0aDogc3RyaW5nLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD5cbik6IHsgaGVhZGVyOiBzdHJpbmcgfCB1bmRlZmluZWQ7IGhlYWRlclZpc2libGU6IGJvb2xlYW4gfCB1bmRlZmluZWQgfSB7XG5cdGNvbnN0IGNoYXJ0TWFuaWZlc3RTZXR0aW5nczogQ2hhcnRNYW5pZmVzdENvbmZpZ3VyYXRpb24gPSBjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0Q29udHJvbENvbmZpZ3VyYXRpb24odmlzdWFsaXphdGlvblBhdGgpO1xuXHRyZXR1cm4ge1xuXHRcdGhlYWRlcjogY2hhcnRNYW5pZmVzdFNldHRpbmdzLmNoYXJ0U2V0dGluZ3M/LmhlYWRlcixcblx0XHRoZWFkZXJWaXNpYmxlOiBjaGFydE1hbmlmZXN0U2V0dGluZ3M/LmNoYXJ0U2V0dGluZ3M/LmhlYWRlclZpc2libGVcblx0fTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFNlbGVjdGlvbk1vZGUoXG5cdHZpc3VhbGl6YXRpb25QYXRoOiBzdHJpbmcsXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0PlxuKTogXCJNdWx0aXBsZVwiIHwgXCJTaW5nbGVcIiB8IFwiTm9uZVwiIHwgdW5kZWZpbmVkIHtcblx0Y29uc3QgY2hhcnRNYW5pZmVzdFNldHRpbmdzOiBDaGFydE1hbmlmZXN0Q29uZmlndXJhdGlvbiA9IGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RDb250cm9sQ29uZmlndXJhdGlvbih2aXN1YWxpemF0aW9uUGF0aCk7XG5cdHJldHVybiBjaGFydE1hbmlmZXN0U2V0dGluZ3MuY2hhcnRTZXR0aW5ncz8uc2VsZWN0aW9uTW9kZTtcbn1cbmV4cG9ydCB0eXBlIENoYXJ0Q3VzdG9tQWdncmVnYXRlID0ge1xuXHRuYW1lOiBzdHJpbmc7XG5cdGxhYmVsOiBzdHJpbmc7XG5cdHNvcnRhYmxlOiBib29sZWFuO1xuXHRzb3J0T3JkZXI6IFwiYm90aFwiO1xuXHRjb250ZXh0RGVmaW5pbmdQcm9wZXJ0eTogc3RyaW5nW107XG59O1xuXG5leHBvcnQgdHlwZSBUcmFuc0FnZyA9IHtcblx0bmFtZTogc3RyaW5nO1xuXHRwcm9wZXJ0eVBhdGg6IHN0cmluZztcblx0YWdncmVnYXRpb25NZXRob2Q6IEFnZ3JlZ2F0aW9uTWV0aG9kO1xuXHRsYWJlbDogc3RyaW5nO1xuXHRzb3J0YWJsZTogYm9vbGVhbjtcblx0c29ydE9yZGVyOiBcImJvdGhcIjtcblx0Y3VzdG9tOiBib29sZWFuO1xufTtcbmZ1bmN0aW9uIGdldEFnZ3JlZ2F0YWJsZVByb3BlcnRpZXNPYmplY3QoYWdnUHJvcDogQWdncmVnYXRhYmxlUHJvcGVydHlUeXBlIHwgUHJvcGVydHkpOiB7IFByb3BlcnR5OiB7ICRQcm9wZXJ0eVBhdGg6IHN0cmluZyB9IH0ge1xuXHRsZXQgb2JqO1xuXHRpZiAoKGFnZ1Byb3AgYXMgQWdncmVnYXRhYmxlUHJvcGVydHlUeXBlKT8uUHJvcGVydHkpIHtcblx0XHRvYmogPSB7XG5cdFx0XHRQcm9wZXJ0eToge1xuXHRcdFx0XHQkUHJvcGVydHlQYXRoOiAoYWdnUHJvcCBhcyBBZ2dyZWdhdGFibGVQcm9wZXJ0eVR5cGUpPy5Qcm9wZXJ0eT8udmFsdWVcblx0XHRcdH1cblx0XHR9O1xuXHR9IGVsc2Uge1xuXHRcdG9iaiA9IHtcblx0XHRcdFByb3BlcnR5OiB7XG5cdFx0XHRcdCRQcm9wZXJ0eVBhdGg6IChhZ2dQcm9wIGFzIFByb3BlcnR5KT8ubmFtZVxuXHRcdFx0fVxuXHRcdH07XG5cdH1cblx0cmV0dXJuIG9iajtcbn1cbi8qKlxuICogQ3JlYXRlIHRoZSBDaGFydFZpc3VhbGl6YXRpb24gY29uZmlndXJhdGlvbiB0aGF0IHdpbGwgYmUgdXNlZCB0byBkaXNwbGF5IGEgY2hhcnQgdXNpbmcgdGhlIENoYXJ0IGJ1aWxkaW5nIGJsb2NrLlxuICogQHBhcmFtIGNoYXJ0QW5ub3RhdGlvbiBUaGUgdGFyZ2V0ZWQgY2hhcnQgYW5ub3RhdGlvblxuICogQHBhcmFtIHZpc3VhbGl6YXRpb25QYXRoIFRoZSBwYXRoIG9mIHRoZSB2aXN1YWxpemF0aW9uIGFubm90YXRpb25cbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBjb252ZXJ0ZXIgY29udGV4dFxuICogQHBhcmFtIGRvTm90Q2hlY2tBcHBseVN1cHBvcnRlZCBGbGFnIHRoYXQgaW5kaWNhdGVzIHdoZXRoZXIgQXBwbHlTdXBwb3J0ZWQgbmVlZHMgdG8gYmUgY2hlY2tlZCBvciBub3RcbiAqIEBwYXJhbSBzZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50UGF0aFxuICogQHJldHVybnMgVGhlIGNoYXJ0IHZpc3VhbGl6YXRpb24gYmFzZWQgb24gdGhlIGFubm90YXRpb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUNoYXJ0VmlzdWFsaXphdGlvbihcblx0Y2hhcnRBbm5vdGF0aW9uOiBDaGFydCxcblx0dmlzdWFsaXphdGlvblBhdGg6IHN0cmluZyxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+LFxuXHRkb05vdENoZWNrQXBwbHlTdXBwb3J0ZWQ/OiBib29sZWFuLFxuXHRzZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50UGF0aD86IHN0cmluZ1xuKTogQ2hhcnRWaXN1YWxpemF0aW9uIHtcblx0Y29uc3QgYWdncmVnYXRpb25IZWxwZXIgPSBuZXcgQWdncmVnYXRpb25IZWxwZXIoY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlKCksIGNvbnZlcnRlckNvbnRleHQsIHRydWUpOyAvLyBwYXNzaW5nIHRoZSBsYXN0IHBhcmFtZXRlciBhcyB0cnVlIHRvIGNvbnNpZGVyIHRoZSBvbGQgYW5ub3RhdGlvbnMgaS5lLiBBZ2dyZWdhdGlvbi5BZ2dyZWdhdGFibGUgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgaW4gY2FzZSBvZiBjaGFydFxuXHRpZiAoIWRvTm90Q2hlY2tBcHBseVN1cHBvcnRlZCAmJiAhYWdncmVnYXRpb25IZWxwZXIuaXNBbmFseXRpY3NTdXBwb3J0ZWQoKSkge1xuXHRcdHRocm93IG5ldyBFcnJvcihcIkFwcGx5U3VwcG9ydGVkIGlzIG5vdCBhZGRlZCB0byB0aGUgYW5ub3RhdGlvbnNcIik7XG5cdH1cblx0Y29uc3QgYVRyYW5zQWdncmVnYXRpb25zID0gYWdncmVnYXRpb25IZWxwZXIuZ2V0VHJhbnNBZ2dyZWdhdGlvbnMoKTtcblx0Y29uc3QgYUN1c3RvbUFnZ3JlZ2F0ZXMgPSBhZ2dyZWdhdGlvbkhlbHBlci5nZXRDdXN0b21BZ2dyZWdhdGVEZWZpbml0aW9ucygpO1xuXHRjb25zdCBwYWdlTWFuaWZlc3RTZXR0aW5nczogTWFuaWZlc3RXcmFwcGVyID0gY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKTtcblx0Y29uc3QgdmFyaWFudE1hbmFnZW1lbnQ6IFZhcmlhbnRNYW5hZ2VtZW50VHlwZSA9IHBhZ2VNYW5pZmVzdFNldHRpbmdzLmdldFZhcmlhbnRNYW5hZ2VtZW50KCk7XG5cdGNvbnN0IHAxM25Nb2RlOiBDaGFydFAxM25UeXBlID0gZ2V0UDEzbk1vZGUodmlzdWFsaXphdGlvblBhdGgsIGNvbnZlcnRlckNvbnRleHQpO1xuXHRpZiAocDEzbk1vZGUgPT09IHVuZGVmaW5lZCAmJiB2YXJpYW50TWFuYWdlbWVudCA9PT0gXCJDb250cm9sXCIpIHtcblx0XHRMb2cud2FybmluZyhcIlZhcmlhbnQgTWFuYWdlbWVudCBjYW5ub3QgYmUgZW5hYmxlZCB3aGVuIHBlcnNvbmFsaXphdGlvbiBpcyBkaXNhYmxlZFwiKTtcblx0fVxuXHRjb25zdCBtQ3VzdG9tQWdncmVnYXRlczogUmVjb3JkPHN0cmluZywgb2JqZWN0PiA9IHt9O1xuXHRpZiAoYUN1c3RvbUFnZ3JlZ2F0ZXMpIHtcblx0XHRjb25zdCBlbnRpdHlUeXBlID0gYWdncmVnYXRpb25IZWxwZXIuZ2V0RW50aXR5VHlwZSgpO1xuXHRcdGZvciAoY29uc3QgY3VzdG9tQWdncmVnYXRlIG9mIGFDdXN0b21BZ2dyZWdhdGVzKSB7XG5cdFx0XHRjb25zdCBhQ29udGV4dERlZmluaW5nUHJvcGVydGllcyA9IGN1c3RvbUFnZ3JlZ2F0ZT8uYW5ub3RhdGlvbnM/LkFnZ3JlZ2F0aW9uPy5Db250ZXh0RGVmaW5pbmdQcm9wZXJ0aWVzO1xuXHRcdFx0Y29uc3QgcXVhbGlmaWVyID0gY3VzdG9tQWdncmVnYXRlPy5xdWFsaWZpZXI7XG5cdFx0XHRjb25zdCByZWxhdGVkQ3VzdG9tQWdncmVnYXRlUHJvcGVydHkgPSBxdWFsaWZpZXIgJiYgZW50aXR5VHlwZS5lbnRpdHlQcm9wZXJ0aWVzLmZpbmQoKHByb3BlcnR5KSA9PiBwcm9wZXJ0eS5uYW1lID09PSBxdWFsaWZpZXIpO1xuXHRcdFx0Y29uc3QgbGFiZWwgPSByZWxhdGVkQ3VzdG9tQWdncmVnYXRlUHJvcGVydHkgJiYgcmVsYXRlZEN1c3RvbUFnZ3JlZ2F0ZVByb3BlcnR5Py5hbm5vdGF0aW9ucz8uQ29tbW9uPy5MYWJlbD8udG9TdHJpbmcoKTtcblx0XHRcdG1DdXN0b21BZ2dyZWdhdGVzW3F1YWxpZmllcl0gPSB7XG5cdFx0XHRcdG5hbWU6IHF1YWxpZmllcixcblx0XHRcdFx0bGFiZWw6IGxhYmVsIHx8IGBDdXN0b20gQWdncmVnYXRlICgke3F1YWxpZmllcn0pYCxcblx0XHRcdFx0c29ydGFibGU6IHRydWUsXG5cdFx0XHRcdHNvcnRPcmRlcjogXCJib3RoXCIsXG5cdFx0XHRcdGNvbnRleHREZWZpbmluZ1Byb3BlcnR5OiBhQ29udGV4dERlZmluaW5nUHJvcGVydGllc1xuXHRcdFx0XHRcdD8gYUNvbnRleHREZWZpbmluZ1Byb3BlcnRpZXMubWFwKChvQ3R4RGVmUHJvcGVydHkpID0+IHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIG9DdHhEZWZQcm9wZXJ0eS52YWx1ZTtcblx0XHRcdFx0XHQgIH0pXG5cdFx0XHRcdFx0OiBbXVxuXHRcdFx0fTtcblx0XHR9XG5cdH1cblxuXHRjb25zdCBtVHJhbnNBZ2dyZWdhdGlvbnM6IFJlY29yZDxzdHJpbmcsIFRyYW5zQWdnPiA9IHt9O1xuXHRjb25zdCBvUmVzb3VyY2VCdW5kbGVDb3JlID0gTGlicmFyeS5nZXRSZXNvdXJjZUJ1bmRsZUZvcihcInNhcC5mZS5jb3JlXCIpITtcblx0aWYgKGFUcmFuc0FnZ3JlZ2F0aW9ucykge1xuXHRcdGZvciAoY29uc3QgZWxlbWVudCBvZiBhVHJhbnNBZ2dyZWdhdGlvbnMpIHtcblx0XHRcdG1UcmFuc0FnZ3JlZ2F0aW9uc1tlbGVtZW50Lk5hbWUgYXMgc3RyaW5nXSA9IHtcblx0XHRcdFx0bmFtZTogZWxlbWVudC5OYW1lIGFzIHN0cmluZyxcblx0XHRcdFx0cHJvcGVydHlQYXRoOiBlbGVtZW50LkFnZ3JlZ2F0YWJsZVByb3BlcnR5LnZhbHVlLFxuXHRcdFx0XHRhZ2dyZWdhdGlvbk1ldGhvZDogZWxlbWVudC5BZ2dyZWdhdGlvbk1ldGhvZCxcblx0XHRcdFx0bGFiZWw6IGVsZW1lbnQ/LmFubm90YXRpb25zPy5Db21tb24/LkxhYmVsXG5cdFx0XHRcdFx0PyBlbGVtZW50Py5hbm5vdGF0aW9ucz8uQ29tbW9uPy5MYWJlbD8udG9TdHJpbmcoKVxuXHRcdFx0XHRcdDogYCR7b1Jlc291cmNlQnVuZGxlQ29yZS5nZXRUZXh0KFwiQUdHUkVHQVRBQkxFX1BST1BFUlRZXCIpfSAoJHtlbGVtZW50Lk5hbWV9KWAsXG5cdFx0XHRcdHNvcnRhYmxlOiB0cnVlLFxuXHRcdFx0XHRzb3J0T3JkZXI6IFwiYm90aFwiLFxuXHRcdFx0XHRjdXN0b206IGZhbHNlXG5cdFx0XHR9O1xuXHRcdH1cblx0fVxuXG5cdGNvbnN0IGFBZ2dQcm9wcyA9IGFnZ3JlZ2F0aW9uSGVscGVyLmdldEFnZ3JlZ2F0YWJsZVByb3BlcnRpZXMoKTtcblx0Y29uc3QgYUdycFByb3BzID0gYWdncmVnYXRpb25IZWxwZXIuZ2V0R3JvdXBhYmxlUHJvcGVydGllcygpO1xuXHRjb25zdCBtQXBwbHlTdXBwb3J0ZWQgPSB7fSBhcyBDaGFydEFwcGx5U3VwcG9ydGVkO1xuXHRtQXBwbHlTdXBwb3J0ZWQuJFR5cGUgPSBBZ2dyZWdhdGlvbkFubm90YXRpb25UeXBlcy5BcHBseVN1cHBvcnRlZFR5cGU7XG5cdG1BcHBseVN1cHBvcnRlZC5BZ2dyZWdhdGFibGVQcm9wZXJ0aWVzID0gW107XG5cdG1BcHBseVN1cHBvcnRlZC5Hcm91cGFibGVQcm9wZXJ0aWVzID0gW107XG5cblx0aWYgKGFBZ2dQcm9wcykge1xuXHRcdG1BcHBseVN1cHBvcnRlZC5BZ2dyZWdhdGFibGVQcm9wZXJ0aWVzID0gYUFnZ1Byb3BzLm1hcCgocHJvcCkgPT5cblx0XHRcdGdldEFnZ3JlZ2F0YWJsZVByb3BlcnRpZXNPYmplY3QocHJvcClcblx0XHQpIGFzIChFeHBhbmRQYXRoVHlwZTxQcm9wZXJ0eVBhdGg+ICYgeyBQcm9wZXJ0eTogRXhwYW5kUGF0aFR5cGU8UHJvcGVydHlQYXRoPiB9KVtdO1xuXHR9XG5cblx0aWYgKGFHcnBQcm9wcykge1xuXHRcdG1BcHBseVN1cHBvcnRlZC5Hcm91cGFibGVQcm9wZXJ0aWVzID0gYUdycFByb3BzLm1hcCgocHJvcCkgPT4gKHtcblx0XHRcdFtcIiRQcm9wZXJ0eVBhdGhcIl06IHByb3AudmFsdWVcblx0XHR9KSkgYXMgKEV4cGFuZFBhdGhUeXBlPFByb3BlcnR5UGF0aD4gJiB7IFByb3BlcnR5OiBFeHBhbmRQYXRoVHlwZTxQcm9wZXJ0eVBhdGg+IH0pW107XG5cdH1cblxuXHRjb25zdCBjaGFydEFjdGlvbnMgPSBnZXRDaGFydEFjdGlvbnMoY2hhcnRBbm5vdGF0aW9uLCB2aXN1YWxpemF0aW9uUGF0aCwgY29udmVydGVyQ29udGV4dCk7XG5cdGxldCBbbmF2aWdhdGlvblByb3BlcnR5UGF0aCAvKiwgYW5ub3RhdGlvblBhdGgqL10gPSB2aXN1YWxpemF0aW9uUGF0aC5zcGxpdChcIkBcIik7XG5cdGlmIChuYXZpZ2F0aW9uUHJvcGVydHlQYXRoLmxhc3RJbmRleE9mKFwiL1wiKSA9PT0gbmF2aWdhdGlvblByb3BlcnR5UGF0aC5sZW5ndGggLSAxKSB7XG5cdFx0Ly8gRHJvcCB0cmFpbGluZyBzbGFzaFxuXHRcdG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGggPSBuYXZpZ2F0aW9uUHJvcGVydHlQYXRoLnN1YnN0cmluZygwLCBuYXZpZ2F0aW9uUHJvcGVydHlQYXRoLmxlbmd0aCAtIDEpO1xuXHR9XG5cdGNvbnN0IHRpdGxlID0gY2hhcnRBbm5vdGF0aW9uLlRpdGxlPy50b1N0cmluZygpIHx8IFwiXCI7IC8vIHJlYWQgdGl0bGUgZnJvbSBjaGFydCBhbm5vdGF0aW9uXG5cdGNvbnN0IGRhdGFNb2RlbFBhdGggPSBjb252ZXJ0ZXJDb250ZXh0LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKTtcblx0Y29uc3QgaXNFbnRpdHlTZXQ6IGJvb2xlYW4gPSBuYXZpZ2F0aW9uUHJvcGVydHlQYXRoLmxlbmd0aCA9PT0gMDtcblx0Y29uc3QgZW50aXR5TmFtZTogc3RyaW5nID0gZGF0YU1vZGVsUGF0aC50YXJnZXRFbnRpdHlTZXQgPyBkYXRhTW9kZWxQYXRoLnRhcmdldEVudGl0eVNldC5uYW1lIDogZGF0YU1vZGVsUGF0aC5zdGFydGluZ0VudGl0eVNldC5uYW1lO1xuXHRjb25zdCBzRmlsdGVyYmFySWQgPSBpc0VudGl0eVNldCA/IGdldEZpbHRlckJhcklEKGNvbnZlcnRlckNvbnRleHQuZ2V0Q29udGV4dFBhdGgoKSkgOiB1bmRlZmluZWQ7XG5cdGNvbnN0IG9WaXpQcm9wZXJ0aWVzID0ge1xuXHRcdHBsb3RBcmVhOiB7XG5cdFx0XHR3aW5kb3c6IHtcblx0XHRcdFx0c3RhcnQ6IFwiZmlyc3REYXRhUG9pbnRcIixcblx0XHRcdFx0ZW5kOiBcImxhc3REYXRhUG9pbnRcIlxuXHRcdFx0fVxuXHRcdH0sXG5cdFx0bGVnZW5kR3JvdXA6IHtcblx0XHRcdGxheW91dDoge1xuXHRcdFx0XHRwb3NpdGlvbjogXCJib3R0b21cIlxuXHRcdFx0fVxuXHRcdH1cblx0fTtcblx0bGV0IGF1dG9CaW5kT25Jbml0OiBib29sZWFuIHwgdW5kZWZpbmVkO1xuXHRpZiAoY29udmVydGVyQ29udGV4dC5nZXRUZW1wbGF0ZVR5cGUoKSA9PT0gVGVtcGxhdGVUeXBlLk9iamVjdFBhZ2UpIHtcblx0XHRhdXRvQmluZE9uSW5pdCA9IHRydWU7XG5cdH0gZWxzZSBpZiAoXG5cdFx0Y29udmVydGVyQ29udGV4dC5nZXRUZW1wbGF0ZVR5cGUoKSA9PT0gVGVtcGxhdGVUeXBlLkxpc3RSZXBvcnQgfHxcblx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldFRlbXBsYXRlVHlwZSgpID09PSBUZW1wbGF0ZVR5cGUuQW5hbHl0aWNhbExpc3RQYWdlXG5cdCkge1xuXHRcdGF1dG9CaW5kT25Jbml0ID0gZmFsc2U7XG5cdH1cblx0Y29uc3QgaGFzTXVsdGlwbGVWaXN1YWxpemF0aW9ucyA9XG5cdFx0Y29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKS5oYXNNdWx0aXBsZVZpc3VhbGl6YXRpb25zKCkgfHxcblx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldFRlbXBsYXRlVHlwZSgpID09PSBUZW1wbGF0ZVR5cGUuQW5hbHl0aWNhbExpc3RQYWdlO1xuXHRjb25zdCBvblNlZ21lbnRlZEJ1dHRvblByZXNzZWQgPSBoYXNNdWx0aXBsZVZpc3VhbGl6YXRpb25zID8gXCIuaGFuZGxlcnMub25TZWdtZW50ZWRCdXR0b25QcmVzc2VkXCIgOiBcIlwiO1xuXHRjb25zdCB2aXNpYmxlID0gaGFzTXVsdGlwbGVWaXN1YWxpemF0aW9ucyA/IFwiez0gJHtwYWdlSW50ZXJuYWw+YWxwQ29udGVudFZpZXd9ICE9PSAnVGFibGUnfVwiIDogXCJ0cnVlXCI7XG5cdGNvbnN0IGFsbG93ZWRUcmFuc2Zvcm1hdGlvbnMgPSBhZ2dyZWdhdGlvbkhlbHBlci5nZXRBbGxvd2VkVHJhbnNmb3JtYXRpb25zKCk7XG5cdG1BcHBseVN1cHBvcnRlZC5lbmFibGVTZWFyY2ggPSBhbGxvd2VkVHJhbnNmb3JtYXRpb25zID8gYWxsb3dlZFRyYW5zZm9ybWF0aW9ucy5pbmNsdWRlcyhcInNlYXJjaFwiKSA6IHRydWU7XG5cdGxldCBxdWFsaWZpZXIgPSBcIlwiO1xuXHRpZiAoY2hhcnRBbm5vdGF0aW9uLmZ1bGx5UXVhbGlmaWVkTmFtZS5zcGxpdChcIiNcIikubGVuZ3RoID4gMSkge1xuXHRcdHF1YWxpZmllciA9IGNoYXJ0QW5ub3RhdGlvbi5mdWxseVF1YWxpZmllZE5hbWUuc3BsaXQoXCIjXCIpWzFdO1xuXHR9XG5cdGNvbnN0IGlzSW5zaWdodHNWaXNpYmxlID0gZ2V0SW5zaWdodHNWaXNpYmlsaXR5KFwiQW5hbHl0aWNhbFwiLCBjb252ZXJ0ZXJDb250ZXh0LCB2aXN1YWxpemF0aW9uUGF0aCk7XG5cdGNvbnN0IGlzUGFyYW1ldGVyaXplZEVudGl0eVNldCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0UGFyYW1ldGVyRW50aXR5VHlwZSgpID8gdHJ1ZSA6IGZhbHNlO1xuXHRjb25zdCBpc0luc2lnaHRzRW5hYmxlZCA9IGFuZChnZXRJbnNpZ2h0c0VuYWJsZW1lbnQoKSwgaXNJbnNpZ2h0c1Zpc2libGUpO1xuXHRjb25zdCB7IGhlYWRlciwgaGVhZGVyVmlzaWJsZSB9ID0gZ2V0SGVhZGVySW5mbyh2aXN1YWxpemF0aW9uUGF0aCwgY29udmVydGVyQ29udGV4dCk7XG5cdGNvbnN0IHNlbGVjdGlvbk1vZGUgPSBnZXRTZWxlY3Rpb25Nb2RlKHZpc3VhbGl6YXRpb25QYXRoLCBjb252ZXJ0ZXJDb250ZXh0KTtcblx0Y29uc3QgY2hhcnREaW1lbnNpb25LZXlBbmRSb2xlOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+W10gPSBbXTtcblx0Y2hhcnRBbm5vdGF0aW9uPy5EaW1lbnNpb25BdHRyaWJ1dGVzPy5mb3JFYWNoKChkaW1lbnNpb25BdHRyaWJ1dGUpID0+IHtcblx0XHRjb25zdCBvYmo6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcblx0XHRvYmpbZGltZW5zaW9uQXR0cmlidXRlPy5EaW1lbnNpb24/LnZhbHVlIGFzIHN0cmluZ10gPSBkaW1lbnNpb25BdHRyaWJ1dGU/LlJvbGUgYXMgc3RyaW5nO1xuXHRcdGNoYXJ0RGltZW5zaW9uS2V5QW5kUm9sZS5wdXNoKG9iaik7XG5cdH0pO1xuXG5cdGNvbnN0IGNoYXJ0TWVhc3VyZUtleUFuZFJvbGU6IFJlY29yZDxzdHJpbmcsIHN0cmluZz5bXSA9IFtdO1xuXHRjaGFydEFubm90YXRpb24/Lk1lYXN1cmVBdHRyaWJ1dGVzPy5mb3JFYWNoKChtZWFzdXJlQXR0cmlidXRlKSA9PiB7XG5cdFx0Y29uc3Qgb2JqOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG5cdFx0b2JqW21lYXN1cmVBdHRyaWJ1dGU/Lk1lYXN1cmU/LnZhbHVlIGFzIHN0cmluZ10gPSBtZWFzdXJlQXR0cmlidXRlPy5Sb2xlIGFzIHN0cmluZztcblx0XHRjaGFydE1lYXN1cmVLZXlBbmRSb2xlLnB1c2goe30pO1xuXHR9KTtcblx0cmV0dXJuIHtcblx0XHR0eXBlOiBWaXN1YWxpemF0aW9uVHlwZS5DaGFydCxcblx0XHRpZDogcXVhbGlmaWVyXG5cdFx0XHQ/IGdldENoYXJ0SUQoaXNFbnRpdHlTZXQgPyBlbnRpdHlOYW1lIDogbmF2aWdhdGlvblByb3BlcnR5UGF0aCwgcXVhbGlmaWVyLCBWaXN1YWxpemF0aW9uVHlwZS5DaGFydClcblx0XHRcdDogZ2V0Q2hhcnRJRChpc0VudGl0eVNldCA/IGVudGl0eU5hbWUgOiBuYXZpZ2F0aW9uUHJvcGVydHlQYXRoLCBWaXN1YWxpemF0aW9uVHlwZS5DaGFydCksXG5cdFx0Y29sbGVjdGlvbjogZ2V0VGFyZ2V0T2JqZWN0UGF0aChjb252ZXJ0ZXJDb250ZXh0LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKSksXG5cdFx0YXBpSWQ6IGdlbmVyYXRlKFtcblx0XHRcdHF1YWxpZmllclxuXHRcdFx0XHQ/IGdldENoYXJ0SUQoaXNFbnRpdHlTZXQgPyBlbnRpdHlOYW1lIDogbmF2aWdhdGlvblByb3BlcnR5UGF0aCwgcXVhbGlmaWVyLCBWaXN1YWxpemF0aW9uVHlwZS5DaGFydClcblx0XHRcdFx0OiBnZXRDaGFydElEKGlzRW50aXR5U2V0ID8gZW50aXR5TmFtZSA6IG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgsIFZpc3VhbGl6YXRpb25UeXBlLkNoYXJ0KSxcblx0XHRcdFwiQ2hhcnRcIlxuXHRcdF0pLFxuXHRcdGVudGl0eU5hbWU6IGVudGl0eU5hbWUsXG5cdFx0cGVyc29uYWxpemF0aW9uOiBnZXRQMTNuTW9kZSh2aXN1YWxpemF0aW9uUGF0aCwgY29udmVydGVyQ29udGV4dCksXG5cdFx0bmF2aWdhdGlvblBhdGg6IG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgsXG5cdFx0YW5ub3RhdGlvblBhdGg6IGNvbnZlcnRlckNvbnRleHQuZ2V0QWJzb2x1dGVBbm5vdGF0aW9uUGF0aCh2aXN1YWxpemF0aW9uUGF0aCksXG5cdFx0ZmlsdGVySWQ6IHNGaWx0ZXJiYXJJZCxcblx0XHR2aXpQcm9wZXJ0aWVzOiBKU09OLnN0cmluZ2lmeShvVml6UHJvcGVydGllcyksXG5cdFx0YWN0aW9uczogY2hhcnRBY3Rpb25zLmFjdGlvbnMsXG5cdFx0Y29tbWFuZEFjdGlvbnM6IGNoYXJ0QWN0aW9ucy5jb21tYW5kQWN0aW9ucyxcblx0XHR0aXRsZTogdGl0bGUsXG5cdFx0YXV0b0JpbmRPbkluaXQ6IGF1dG9CaW5kT25Jbml0LFxuXHRcdG9uU2VnbWVudGVkQnV0dG9uUHJlc3NlZDogb25TZWdtZW50ZWRCdXR0b25QcmVzc2VkLFxuXHRcdHZpc2libGU6IHZpc2libGUsXG5cdFx0Y3VzdG9tQWdnOiBtQ3VzdG9tQWdncmVnYXRlcyxcblx0XHR0cmFuc0FnZzogbVRyYW5zQWdncmVnYXRpb25zLFxuXHRcdGFwcGx5U3VwcG9ydGVkOiBtQXBwbHlTdXBwb3J0ZWQsXG5cdFx0c2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudFBhdGgsXG5cdFx0dmFyaWFudE1hbmFnZW1lbnQ6IGZpbmRWYXJpYW50TWFuYWdlbWVudChwMTNuTW9kZSwgdmFyaWFudE1hbmFnZW1lbnQpLFxuXHRcdGlzSW5zaWdodHNFbmFibGVkOiBpc0luc2lnaHRzRW5hYmxlZCxcblx0XHRpc0luc2lnaHRzVmlzaWJsZTogaXNJbnNpZ2h0c1Zpc2libGUsXG5cdFx0aXNQYXJhbWV0ZXJpemVkRW50aXR5U2V0OiBpc1BhcmFtZXRlcml6ZWRFbnRpdHlTZXQsXG5cdFx0aGVhZGVyOiBoZWFkZXIsXG5cdFx0aGVhZGVyVmlzaWJsZTogaGVhZGVyVmlzaWJsZSxcblx0XHRzZWxlY3Rpb25Nb2RlOiBzZWxlY3Rpb25Nb2RlLFxuXHRcdGNoYXJ0RGltZW5zaW9uS2V5QW5kUm9sZTogY2hhcnREaW1lbnNpb25LZXlBbmRSb2xlLFxuXHRcdGNoYXJ0TWVhc3VyZUtleUFuZFJvbGU6IGNoYXJ0TWVhc3VyZUtleUFuZFJvbGVcblx0fTtcbn1cbi8qKlxuICogTWV0aG9kIHRvIGRldGVybWluZSB0aGUgdmFyaWFudCBtYW5hZ2VtZW50LlxuICogQHBhcmFtIHAxM25Nb2RlXG4gKiBAcGFyYW0gdmFyaWFudE1hbmFnZW1lbnRcbiAqIEByZXR1cm5zIFRoZSB2YXJpYW50IG1hbmFnZW1lbnQgZm9yIHRoZSBjaGFydFxuICovXG5mdW5jdGlvbiBmaW5kVmFyaWFudE1hbmFnZW1lbnQocDEzbk1vZGU6IENoYXJ0UDEzblR5cGUsIHZhcmlhbnRNYW5hZ2VtZW50OiBWYXJpYW50TWFuYWdlbWVudFR5cGUpOiBWYXJpYW50TWFuYWdlbWVudFR5cGUge1xuXHRyZXR1cm4gdmFyaWFudE1hbmFnZW1lbnQgPT09IFwiQ29udHJvbFwiICYmICFwMTNuTW9kZSA/IFZhcmlhbnRNYW5hZ2VtZW50VHlwZS5Ob25lIDogdmFyaWFudE1hbmFnZW1lbnQ7XG59XG5cbi8qKlxuICogQ3JlYXRlIHRoZSBDaGFydFZpc3VhbGl6YXRpb24gY29uZmlndXJhdGlvbiB0aGF0IHdpbGwgYmUgdXNlZCB0byBkdXJpbmcgdGVtcGxhdGluZy5cbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBjb252ZXJ0ZXIgY29udGV4dFxuICogQHBhcmFtIHZpc3VhbGl6YXRpb25QYXRoIFRoZSBwYXRoIG9mIHRoZSB2aXN1YWxpemF0aW9uIGFubm90YXRpb25cbiAqIEBwYXJhbSB2aXN1YWxpemF0aW9uIFRoZSB2aXN1YWxpemF0aW9uIGFubm90YXRpb25cbiAqIEByZXR1cm5zIFRoZSBjaGFydCB2aXN1YWxpemF0aW9uIGJhc2VkIG9uIHRoZSBhbm5vdGF0aW9uIHVzZWQgZm9yIHRlbXBsYXRpbmdcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUNoYXJ0VmlzdWFsaXphdGlvbkZvclRlbXBsYXRpbmcoXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pixcblx0dmlzdWFsaXphdGlvblBhdGg6IHN0cmluZyxcblx0dmlzdWFsaXphdGlvbjogQWN0dWFsVmlzdWFsaXphdGlvbkFubm90YXRpb25zXG4pOiBDaGFydFRlbXBsYXRlVmlzdWFsaXphdGlvbiB7XG5cdGNvbnN0IHF1YWxpZmllciA9IHZpc3VhbGl6YXRpb24uZnVsbHlRdWFsaWZpZWROYW1lLnNwbGl0KFwiI1wiKS5sZW5ndGggPiAxID8gdmlzdWFsaXphdGlvbi5mdWxseVF1YWxpZmllZE5hbWUuc3BsaXQoXCIjXCIpWzFdIDogXCJcIjtcblx0Y29uc3QgW25hdmlnYXRpb25Qcm9wZXJ0eVBhdGhdID0gdmlzdWFsaXphdGlvblBhdGguc3BsaXQoXCJAXCIpO1xuXG5cdGNvbnN0IGRhdGFNb2RlbFBhdGggPSBjb252ZXJ0ZXJDb250ZXh0LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKTtcblx0Y29uc3QgaXNFbnRpdHlTZXQ6IGJvb2xlYW4gPSBuYXZpZ2F0aW9uUHJvcGVydHlQYXRoLmxlbmd0aCA9PT0gMDtcblx0Y29uc3QgZW50aXR5TmFtZTogc3RyaW5nID0gZGF0YU1vZGVsUGF0aC50YXJnZXRFbnRpdHlTZXQ/Lm5hbWUgPz8gZGF0YU1vZGVsUGF0aC5zdGFydGluZ0VudGl0eVNldC5uYW1lO1xuXHRjb25zdCBhZ2dyZWdhdGlvbkhlbHBlciA9IG5ldyBBZ2dyZWdhdGlvbkhlbHBlcihjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGUoKSwgY29udmVydGVyQ29udGV4dCwgdHJ1ZSk7XG5cdGNvbnN0IGFsbG93ZWRUcmFuc2Zvcm1hdGlvbnMgPSBhZ2dyZWdhdGlvbkhlbHBlci5nZXRBbGxvd2VkVHJhbnNmb3JtYXRpb25zKCk7XG5cdGNvbnN0IGlzUGFyYW1ldGVyaXplZEVudGl0eVNldCA9ICEhY29udmVydGVyQ29udGV4dC5nZXRQYXJhbWV0ZXJFbnRpdHlUeXBlKCk7XG5cdHJldHVybiB7XG5cdFx0YW5ub3RhdGlvblBhdGg6IGNvbnZlcnRlckNvbnRleHQuZ2V0QWJzb2x1dGVBbm5vdGF0aW9uUGF0aCh2aXN1YWxpemF0aW9uUGF0aCksXG5cdFx0aXNQYXJhbWV0ZXJpemVkRW50aXR5U2V0LFxuXHRcdGNvbGxlY3Rpb246IGdldFRhcmdldE9iamVjdFBhdGgoY29udmVydGVyQ29udGV4dC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCkpLFxuXHRcdHR5cGU6IFZpc3VhbGl6YXRpb25UeXBlLkNoYXJ0LFxuXHRcdGVudGl0eU5hbWUsXG5cdFx0aWQ6IHF1YWxpZmllclxuXHRcdFx0PyBnZXRDaGFydElEKGlzRW50aXR5U2V0ID8gZW50aXR5TmFtZSA6IG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgsIHF1YWxpZmllciwgVmlzdWFsaXphdGlvblR5cGUuQ2hhcnQpXG5cdFx0XHQ6IGdldENoYXJ0SUQoaXNFbnRpdHlTZXQgPyBlbnRpdHlOYW1lIDogbmF2aWdhdGlvblByb3BlcnR5UGF0aCwgVmlzdWFsaXphdGlvblR5cGUuQ2hhcnQpLFxuXHRcdGFwaUlkOiBnZW5lcmF0ZShbXG5cdFx0XHRxdWFsaWZpZXJcblx0XHRcdFx0PyBnZXRDaGFydElEKGlzRW50aXR5U2V0ID8gZW50aXR5TmFtZSA6IG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgsIHF1YWxpZmllciwgVmlzdWFsaXphdGlvblR5cGUuQ2hhcnQpXG5cdFx0XHRcdDogZ2V0Q2hhcnRJRChpc0VudGl0eVNldCA/IGVudGl0eU5hbWUgOiBuYXZpZ2F0aW9uUHJvcGVydHlQYXRoLCBWaXN1YWxpemF0aW9uVHlwZS5DaGFydCksXG5cdFx0XHRcIkNoYXJ0XCJcblx0XHRdKSxcblx0XHRhcHBseVN1cHBvcnRlZDoge1xuXHRcdFx0JFR5cGU6IFwiT3JnLk9EYXRhLkFnZ3JlZ2F0aW9uLlYxLkFwcGx5U3VwcG9ydGVkVHlwZVwiLFxuXHRcdFx0ZW5hYmxlU2VhcmNoOiBhbGxvd2VkVHJhbnNmb3JtYXRpb25zPy5pbmNsdWRlcyhcInNlYXJjaFwiKSA/PyB0cnVlXG5cdFx0fVxuXHR9O1xufVxuXG4vKipcbiAqIE1ldGhvZCB0byBnZXQgY29tcGlsZSBleHByZXNzaW9uIGZvciBEYXRhRmllbGRGb3JBY3Rpb24gYW5kIERhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbi5cbiAqIEBwYXJhbSBkYXRhRmllbGRcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcmV0dXJucyBDb21waWxlIGV4cHJlc3Npb24gZm9yIERhdGFGaWVsZEZvckFjdGlvbiBhbmQgRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uXG4gKi9cbmZ1bmN0aW9uIGdldENvbXBpbGVFeHByZXNzaW9uRm9yQWN0aW9uKFxuXHRkYXRhRmllbGQ6IERhdGFGaWVsZEFic3RyYWN0VHlwZXMsXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0PlxuKTogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24ge1xuXHRyZXR1cm4gY29tcGlsZUV4cHJlc3Npb24oXG5cdFx0bm90KFxuXHRcdFx0ZXF1YWwoXG5cdFx0XHRcdGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihcblx0XHRcdFx0XHRkYXRhRmllbGQuYW5ub3RhdGlvbnM/LlVJPy5IaWRkZW4sXG5cdFx0XHRcdFx0W10sXG5cdFx0XHRcdFx0dW5kZWZpbmVkLFxuXHRcdFx0XHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0UmVsYXRpdmVNb2RlbFBhdGhGdW5jdGlvbigpXG5cdFx0XHRcdCksXG5cdFx0XHRcdHRydWVcblx0XHRcdClcblx0XHQpXG5cdCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVCbGFua0NoYXJ0VmlzdWFsaXphdGlvbihjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4pOiBDaGFydFZpc3VhbGl6YXRpb24ge1xuXHRjb25zdCBoYXNNdWx0aXBsZVZpc3VhbGl6YXRpb25zID1cblx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0V3JhcHBlcigpLmhhc011bHRpcGxlVmlzdWFsaXphdGlvbnMoKSB8fFxuXHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0VGVtcGxhdGVUeXBlKCkgPT09IFRlbXBsYXRlVHlwZS5BbmFseXRpY2FsTGlzdFBhZ2U7XG5cdGNvbnN0IGRhdGFNb2RlbFBhdGggPSBjb252ZXJ0ZXJDb250ZXh0LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKTtcblx0Y29uc3QgZW50aXR5TmFtZSA9IGRhdGFNb2RlbFBhdGgudGFyZ2V0RW50aXR5U2V0ID8gZGF0YU1vZGVsUGF0aC50YXJnZXRFbnRpdHlTZXQubmFtZSA6IGRhdGFNb2RlbFBhdGguc3RhcnRpbmdFbnRpdHlTZXQubmFtZTtcblxuXHRjb25zdCB2aXN1YWxpemF0aW9uOiBDaGFydFZpc3VhbGl6YXRpb24gPSB7XG5cdFx0dHlwZTogVmlzdWFsaXphdGlvblR5cGUuQ2hhcnQsXG5cdFx0aWQ6IGdldENoYXJ0SUQoZW50aXR5TmFtZSwgVmlzdWFsaXphdGlvblR5cGUuQ2hhcnQpLFxuXHRcdGFwaUlkOiBnZW5lcmF0ZShbZ2V0Q2hhcnRJRChlbnRpdHlOYW1lLCBWaXN1YWxpemF0aW9uVHlwZS5DaGFydCksIFwiQ2hhcnRcIl0pLFxuXHRcdGVudGl0eU5hbWU6IGVudGl0eU5hbWUsXG5cdFx0dGl0bGU6IFwiXCIsXG5cdFx0Y29sbGVjdGlvbjogXCJcIixcblx0XHRwZXJzb25hbGl6YXRpb246IHVuZGVmaW5lZCxcblx0XHRuYXZpZ2F0aW9uUGF0aDogXCJcIixcblx0XHRhbm5vdGF0aW9uUGF0aDogXCJcIixcblx0XHR2aXpQcm9wZXJ0aWVzOiBKU09OLnN0cmluZ2lmeSh7XG5cdFx0XHRsZWdlbmRHcm91cDoge1xuXHRcdFx0XHRsYXlvdXQ6IHtcblx0XHRcdFx0XHRwb3NpdGlvbjogXCJib3R0b21cIlxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSksXG5cdFx0YWN0aW9uczogW10sXG5cdFx0Y29tbWFuZEFjdGlvbnM6IHt9LFxuXHRcdGF1dG9CaW5kT25Jbml0OiBmYWxzZSxcblx0XHRvblNlZ21lbnRlZEJ1dHRvblByZXNzZWQ6IFwiXCIsXG5cdFx0dmlzaWJsZTogaGFzTXVsdGlwbGVWaXN1YWxpemF0aW9ucyA/IFwiez0gJHtwYWdlSW50ZXJuYWw+YWxwQ29udGVudFZpZXd9ICE9PSAnVGFibGUnfVwiIDogXCJ0cnVlXCIsXG5cdFx0Y3VzdG9tQWdnOiB7fSxcblx0XHR0cmFuc0FnZzoge30sXG5cdFx0YXBwbHlTdXBwb3J0ZWQ6IHtcblx0XHRcdCRUeXBlOiBcIk9yZy5PRGF0YS5BZ2dyZWdhdGlvbi5WMS5BcHBseVN1cHBvcnRlZFR5cGVcIixcblx0XHRcdEFnZ3JlZ2F0YWJsZVByb3BlcnRpZXM6IFtdLFxuXHRcdFx0R3JvdXBhYmxlUHJvcGVydGllczogW10sXG5cdFx0XHRlbmFibGVTZWFyY2g6IGZhbHNlXG5cdFx0fSxcblx0XHRtdWx0aVZpZXdzOiBmYWxzZSxcblx0XHR2YXJpYW50TWFuYWdlbWVudDogVmFyaWFudE1hbmFnZW1lbnRUeXBlLk5vbmVcblx0fTtcblxuXHRyZXR1cm4gdmlzdWFsaXphdGlvbjtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztFQXlEQTtBQUNBO0FBQ0E7O0VBNkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBQ0EsU0FBU0EsOEJBQThCQSxDQUN0Q0MsZUFBc0IsRUFDdEJDLGlCQUF5QixFQUN6QkMsZ0JBQXlELEVBQ0Q7SUFDeEQsTUFBTUMsWUFBbUUsR0FBRyxFQUFFO0lBQzlFLElBQUlILGVBQWUsRUFBRUksT0FBTyxFQUFFO01BQzdCSixlQUFlLENBQUNJLE9BQU8sQ0FBQ0MsT0FBTyxDQUFFQyxTQUFnRSxJQUFLO1FBQ3JHLE1BQU1DLEdBQUcsR0FBR0MsU0FBUyxDQUFDQyx3QkFBd0IsQ0FBQ0gsU0FBUyxDQUFDO1FBQ3pELElBQUlJLDRCQUE0QixDQUFDSixTQUFTLENBQUMsSUFBSSxDQUFDQSxTQUFTLENBQUNLLE1BQU0sSUFBSSxDQUFDTCxTQUFTLENBQUNNLFdBQVcsRUFBRTtVQUMzRixRQUFRTixTQUFTLENBQUNPLEtBQUs7WUFDdEI7Y0FDQyxJQUFJUCxTQUFTLENBQUNRLFlBQVksSUFBSSxDQUFDUixTQUFTLENBQUNRLFlBQVksQ0FBQ0MsT0FBTyxFQUFFO2dCQUM5RFosWUFBWSxDQUFDYSxJQUFJLENBQUM7a0JBQ2pCQyxJQUFJLEVBQUVDLFVBQVUsQ0FBQ0Msa0JBQWtCO2tCQUNuQ0MsY0FBYyxFQUFFbEIsZ0JBQWdCLENBQUNtQiwrQkFBK0IsQ0FBQ2YsU0FBUyxDQUFDZ0Isa0JBQWtCLENBQUM7a0JBQzlGZixHQUFHO2tCQUNIZ0IsT0FBTyxFQUFFQyw2QkFBNkIsQ0FBQ2xCLFNBQVMsRUFBRUosZ0JBQWdCLENBQUM7a0JBQ25FdUIsYUFBYSxFQUFFQyxtQkFBbUIsQ0FBQ3BCLFNBQVMsQ0FBQyxLQUFLLElBQUksSUFBSXFCO2dCQUMzRCxDQUFDLENBQUM7Y0FDSDtjQUNBO1lBRUQ7Y0FDQ3hCLFlBQVksQ0FBQ2EsSUFBSSxDQUFDO2dCQUNqQkMsSUFBSSxFQUFFQyxVQUFVLENBQUNVLGlDQUFpQztnQkFDbERSLGNBQWMsRUFBRWxCLGdCQUFnQixDQUFDbUIsK0JBQStCLENBQUNmLFNBQVMsQ0FBQ2dCLGtCQUFrQixDQUFDO2dCQUM5RmYsR0FBRztnQkFDSGdCLE9BQU8sRUFBRUMsNkJBQTZCLENBQUNsQixTQUFTLEVBQUVKLGdCQUFnQixDQUFDO2dCQUNuRTJCLFdBQVcsRUFBRTtjQUNkLENBQUMsQ0FBQztjQUNGO1VBQ0Y7UUFDRDtRQUVBLElBQUlDLHVCQUF1QixDQUFDeEIsU0FBUyxDQUFDLEVBQUU7VUFDdkNILFlBQVksQ0FBQ2EsSUFBSSxDQUFDO1lBQ2pCQyxJQUFJLEVBQUVDLFVBQVUsQ0FBQ2EsSUFBSTtZQUNyQkMsSUFBSSxFQUFFMUIsU0FBUyxDQUFDMkIsS0FBSyxFQUFFQyxRQUFRLENBQUMsQ0FBQztZQUNqQ1gsT0FBTyxFQUFFQyw2QkFBNkIsQ0FBQ2xCLFNBQVMsRUFBRUosZ0JBQWdCLENBQUM7WUFDbkVpQyxJQUFJLEVBQUU3QixTQUFTLENBQUNGLE9BQU8sQ0FBQ2dDLEdBQUcsQ0FBRUMsTUFBTSxJQUNsQ0MsNEJBQTRCLENBQUNELE1BQU0sRUFBNkJuQyxnQkFBZ0IsQ0FDakYsQ0FBQztZQUNESyxHQUFHLEVBQUVDLFNBQVMsQ0FBQ0Msd0JBQXdCLENBQUNILFNBQVMsQ0FBQztZQUNsRG1CLGFBQWEsRUFBRWMsaUJBQWlCLENBQUNqQyxTQUFTLENBQUNGLE9BQU8sQ0FBQyxLQUFLLElBQUksSUFBSXVCO1VBQ2pFLENBQWdDLENBQUM7UUFDbEM7TUFDRCxDQUFDLENBQUM7SUFDSDtJQUNBLE9BQU94QixZQUFZO0VBQ3BCO0VBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNBLFNBQVMyQix1QkFBdUJBLENBQUN4QixTQUFpQyxFQUF3QztJQUN6RyxPQUFPQSxTQUFTLENBQUNPLEtBQUsseURBQThDO0VBQ3JFOztFQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNBLFNBQVN5Qiw0QkFBNEJBLENBQ3BDaEMsU0FBa0MsRUFDbENKLGdCQUF5RCxFQUN0QztJQUNuQixPQUFPO01BQ05lLElBQUksRUFBRUMsVUFBVSxDQUFDQyxrQkFBa0I7TUFDbkNDLGNBQWMsRUFBRWxCLGdCQUFnQixDQUFDbUIsK0JBQStCLENBQUNmLFNBQVMsQ0FBQ2dCLGtCQUFrQixDQUFDO01BQzlGZixHQUFHLEVBQUVDLFNBQVMsQ0FBQ0Msd0JBQXdCLENBQUNILFNBQVMsQ0FBQztNQUNsRGlCLE9BQU8sRUFBRUMsNkJBQTZCLENBQUNsQixTQUFTLEVBQUVKLGdCQUFnQjtJQUNuRSxDQUFDO0VBQ0Y7RUFFTyxTQUFTc0MsZUFBZUEsQ0FDOUJ4QyxlQUFzQixFQUN0QkMsaUJBQXlCLEVBQ3pCQyxnQkFBeUQsRUFDeEM7SUFDakIsTUFBTXVDLGtCQUFrQixHQUFHMUMsOEJBQThCLENBQUNDLGVBQWUsRUFBRUMsaUJBQWlCLEVBQUVDLGdCQUFnQixDQUFDO0lBQy9HLE1BQU13QyxlQUFlLEdBQUdDLHNCQUFzQixDQUM3Q3pDLGdCQUFnQixDQUFDMEMsK0JBQStCLENBQTZCM0MsaUJBQWlCLENBQUMsQ0FBQzRDLE9BQU8sRUFJdkczQyxnQkFBZ0IsRUFDaEJ1QyxrQkFDRCxDQUFDO0lBQ0QsTUFBTUsscUJBQXlDLEdBQUc7TUFDakRDLE9BQU8sRUFBRUMsWUFBWSxDQUFDQyxTQUFTO01BQy9CQyxjQUFjLEVBQUVGLFlBQVksQ0FBQ0MsU0FBUztNQUN0QzFCLE9BQU8sRUFBRXlCLFlBQVksQ0FBQ0MsU0FBUztNQUMvQkUsT0FBTyxFQUFFSCxZQUFZLENBQUNDLFNBQVM7TUFDL0JHLFFBQVEsRUFBRUosWUFBWSxDQUFDQztJQUN4QixDQUFDO0lBQ0QsTUFBTTlDLFlBQVksR0FBR2tELG9CQUFvQixDQUFhWixrQkFBa0IsRUFBRUMsZUFBZSxDQUFDRyxPQUFPLEVBQUVDLHFCQUFxQixDQUFDO0lBQ3pILE9BQU87TUFDTkQsT0FBTyxFQUFFMUMsWUFBWTtNQUNyQm1ELGNBQWMsRUFBRVosZUFBZSxDQUFDWTtJQUNqQyxDQUFDO0VBQ0Y7RUFBQ0MsUUFBQSxDQUFBZixlQUFBLEdBQUFBLGVBQUE7RUFFTSxTQUFTZ0IsV0FBV0EsQ0FDMUJ2RCxpQkFBeUIsRUFDekJDLGdCQUF5RCxFQUMxQjtJQUMvQixNQUFNdUQsZUFBZ0MsR0FBR3ZELGdCQUFnQixDQUFDd0Qsa0JBQWtCLENBQUMsQ0FBQztJQUM5RSxNQUFNQyxxQkFBaUQsR0FBR3pELGdCQUFnQixDQUFDMEMsK0JBQStCLENBQUMzQyxpQkFBaUIsQ0FBQztJQUM3SCxNQUFNMkQsaUJBQXdDLEdBQUdILGVBQWUsQ0FBQ0ksb0JBQW9CLENBQUMsQ0FBQztJQUN2RixNQUFNQyxnQkFBMEIsR0FBRyxFQUFFO0lBQ3JDO0lBQ0EsTUFBTUMsZUFBZSxHQUFHSixxQkFBcUIsRUFBRUssYUFBYSxFQUFFRCxlQUFlO0lBQzdFLE1BQU1FLGdCQUFnQixHQUFHTCxpQkFBaUIsS0FBS00scUJBQXFCLENBQUNDLE9BQU8sR0FBRyxJQUFJLEdBQUcsS0FBSztJQUMzRjtJQUNBLElBQUtKLGVBQWUsS0FBS3BDLFNBQVMsSUFBSSxDQUFDb0MsZUFBZSxJQUFLQSxlQUFlLElBQUksT0FBTyxFQUFFO01BQ3RGLE9BQU8sS0FBSztJQUNiO0lBQ0EsSUFBSSxPQUFPQSxlQUFlLEtBQUssUUFBUSxFQUFFO01BQ3hDO01BQ0EsSUFBSUEsZUFBZSxDQUFDOUMsSUFBSSxFQUFFO1FBQ3pCNkMsZ0JBQWdCLENBQUM5QyxJQUFJLENBQUMsTUFBTSxDQUFDO01BQzlCO01BQ0EsSUFBSStDLGVBQWUsQ0FBQ0ssSUFBSSxFQUFFO1FBQ3pCTixnQkFBZ0IsQ0FBQzlDLElBQUksQ0FBQyxNQUFNLENBQUM7TUFDOUI7TUFDQSxJQUFJK0MsZUFBZSxDQUFDTSxJQUFJLEVBQUU7UUFDekJQLGdCQUFnQixDQUFDOUMsSUFBSSxDQUFDLE1BQU0sQ0FBQztNQUM5QjtNQUNBLElBQUkrQyxlQUFlLENBQUNPLE1BQU0sRUFBRTtRQUMzQlIsZ0JBQWdCLENBQUM5QyxJQUFJLENBQUMsUUFBUSxDQUFDO01BQ2hDO01BQ0EsT0FBTzhDLGdCQUFnQixDQUFDUyxJQUFJLENBQUMsR0FBRyxDQUFDO0lBQ2xDLENBQUMsTUFBTSxJQUFJTixnQkFBZ0IsSUFBSSxDQUFDLENBQUNGLGVBQWUsRUFBRTtNQUNqRDtNQUNBO01BQ0EsT0FBTyx1QkFBdUI7SUFDL0IsQ0FBQyxNQUFNO01BQ047TUFDQSxPQUFPLGdCQUFnQjtJQUN4QjtFQUNEO0VBQUNSLFFBQUEsQ0FBQUMsV0FBQSxHQUFBQSxXQUFBO0VBRU0sU0FBU2dCLGFBQWFBLENBQzVCdkUsaUJBQXlCLEVBQ3pCQyxnQkFBeUQsRUFDWTtJQUNyRSxNQUFNeUQscUJBQWlELEdBQUd6RCxnQkFBZ0IsQ0FBQzBDLCtCQUErQixDQUFDM0MsaUJBQWlCLENBQUM7SUFDN0gsT0FBTztNQUNOd0UsTUFBTSxFQUFFZCxxQkFBcUIsQ0FBQ0ssYUFBYSxFQUFFUyxNQUFNO01BQ25EQyxhQUFhLEVBQUVmLHFCQUFxQixFQUFFSyxhQUFhLEVBQUVVO0lBQ3RELENBQUM7RUFDRjtFQUFDbkIsUUFBQSxDQUFBaUIsYUFBQSxHQUFBQSxhQUFBO0VBRU0sU0FBU0csZ0JBQWdCQSxDQUMvQjFFLGlCQUF5QixFQUN6QkMsZ0JBQXlELEVBQ1o7SUFDN0MsTUFBTXlELHFCQUFpRCxHQUFHekQsZ0JBQWdCLENBQUMwQywrQkFBK0IsQ0FBQzNDLGlCQUFpQixDQUFDO0lBQzdILE9BQU8wRCxxQkFBcUIsQ0FBQ0ssYUFBYSxFQUFFWSxhQUFhO0VBQzFEO0VBQUNyQixRQUFBLENBQUFvQixnQkFBQSxHQUFBQSxnQkFBQTtFQWtCRCxTQUFTRSwrQkFBK0JBLENBQUNDLE9BQTRDLEVBQTJDO0lBQy9ILElBQUlDLEdBQUc7SUFDUCxJQUFLRCxPQUFPLEVBQStCRSxRQUFRLEVBQUU7TUFDcERELEdBQUcsR0FBRztRQUNMQyxRQUFRLEVBQUU7VUFDVEMsYUFBYSxFQUFHSCxPQUFPLEVBQStCRSxRQUFRLEVBQUVFO1FBQ2pFO01BQ0QsQ0FBQztJQUNGLENBQUMsTUFBTTtNQUNOSCxHQUFHLEdBQUc7UUFDTEMsUUFBUSxFQUFFO1VBQ1RDLGFBQWEsRUFBR0gsT0FBTyxFQUFlSztRQUN2QztNQUNELENBQUM7SUFDRjtJQUNBLE9BQU9KLEdBQUc7RUFDWDtFQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNPLFNBQVNLLHdCQUF3QkEsQ0FDdkNwRixlQUFzQixFQUN0QkMsaUJBQXlCLEVBQ3pCQyxnQkFBeUQsRUFDekRtRix3QkFBa0MsRUFDbENDLGdDQUF5QyxFQUNwQjtJQUNyQixNQUFNQyxpQkFBaUIsR0FBRyxJQUFJQyxpQkFBaUIsQ0FBQ3RGLGdCQUFnQixDQUFDdUYsYUFBYSxDQUFDLENBQUMsRUFBRXZGLGdCQUFnQixFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDM0csSUFBSSxDQUFDbUYsd0JBQXdCLElBQUksQ0FBQ0UsaUJBQWlCLENBQUNHLG9CQUFvQixDQUFDLENBQUMsRUFBRTtNQUMzRSxNQUFNLElBQUlDLEtBQUssQ0FBQyxnREFBZ0QsQ0FBQztJQUNsRTtJQUNBLE1BQU1DLGtCQUFrQixHQUFHTCxpQkFBaUIsQ0FBQ00sb0JBQW9CLENBQUMsQ0FBQztJQUNuRSxNQUFNQyxpQkFBaUIsR0FBR1AsaUJBQWlCLENBQUNRLDZCQUE2QixDQUFDLENBQUM7SUFDM0UsTUFBTUMsb0JBQXFDLEdBQUc5RixnQkFBZ0IsQ0FBQ3dELGtCQUFrQixDQUFDLENBQUM7SUFDbkYsTUFBTUUsaUJBQXdDLEdBQUdvQyxvQkFBb0IsQ0FBQ25DLG9CQUFvQixDQUFDLENBQUM7SUFDNUYsTUFBTW9DLFFBQXVCLEdBQUd6QyxXQUFXLENBQUN2RCxpQkFBaUIsRUFBRUMsZ0JBQWdCLENBQUM7SUFDaEYsSUFBSStGLFFBQVEsS0FBS3RFLFNBQVMsSUFBSWlDLGlCQUFpQixLQUFLLFNBQVMsRUFBRTtNQUM5RHNDLEdBQUcsQ0FBQ0MsT0FBTyxDQUFDLHVFQUF1RSxDQUFDO0lBQ3JGO0lBQ0EsTUFBTUMsaUJBQXlDLEdBQUcsQ0FBQyxDQUFDO0lBQ3BELElBQUlOLGlCQUFpQixFQUFFO01BQ3RCLE1BQU1PLFVBQVUsR0FBR2QsaUJBQWlCLENBQUNFLGFBQWEsQ0FBQyxDQUFDO01BQ3BELEtBQUssTUFBTWEsZUFBZSxJQUFJUixpQkFBaUIsRUFBRTtRQUNoRCxNQUFNUywwQkFBMEIsR0FBR0QsZUFBZSxFQUFFRSxXQUFXLEVBQUVDLFdBQVcsRUFBRUMseUJBQXlCO1FBQ3ZHLE1BQU1DLFNBQVMsR0FBR0wsZUFBZSxFQUFFSyxTQUFTO1FBQzVDLE1BQU1DLDhCQUE4QixHQUFHRCxTQUFTLElBQUlOLFVBQVUsQ0FBQ1EsZ0JBQWdCLENBQUNDLElBQUksQ0FBRUMsUUFBUSxJQUFLQSxRQUFRLENBQUM1QixJQUFJLEtBQUt3QixTQUFTLENBQUM7UUFDL0gsTUFBTUssS0FBSyxHQUFHSiw4QkFBOEIsSUFBSUEsOEJBQThCLEVBQUVKLFdBQVcsRUFBRVMsTUFBTSxFQUFFaEYsS0FBSyxFQUFFQyxRQUFRLENBQUMsQ0FBQztRQUN0SGtFLGlCQUFpQixDQUFDTyxTQUFTLENBQUMsR0FBRztVQUM5QnhCLElBQUksRUFBRXdCLFNBQVM7VUFDZkssS0FBSyxFQUFFQSxLQUFLLElBQUkscUJBQXFCTCxTQUFTLEdBQUc7VUFDakRPLFFBQVEsRUFBRSxJQUFJO1VBQ2RDLFNBQVMsRUFBRSxNQUFNO1VBQ2pCQyx1QkFBdUIsRUFBRWIsMEJBQTBCLEdBQ2hEQSwwQkFBMEIsQ0FBQ25FLEdBQUcsQ0FBRWlGLGVBQWUsSUFBSztZQUNwRCxPQUFPQSxlQUFlLENBQUNuQyxLQUFLO1VBQzVCLENBQUMsQ0FBQyxHQUNGO1FBQ0osQ0FBQztNQUNGO0lBQ0Q7SUFFQSxNQUFNb0Msa0JBQTRDLEdBQUcsQ0FBQyxDQUFDO0lBQ3ZELE1BQU1DLG1CQUFtQixHQUFHQyxPQUFPLENBQUNDLG9CQUFvQixDQUFDLGFBQWEsQ0FBRTtJQUN4RSxJQUFJN0Isa0JBQWtCLEVBQUU7TUFDdkIsS0FBSyxNQUFNOEIsT0FBTyxJQUFJOUIsa0JBQWtCLEVBQUU7UUFDekMwQixrQkFBa0IsQ0FBQ0ksT0FBTyxDQUFDQyxJQUFJLENBQVcsR0FBRztVQUM1Q3hDLElBQUksRUFBRXVDLE9BQU8sQ0FBQ0MsSUFBYztVQUM1QkMsWUFBWSxFQUFFRixPQUFPLENBQUNHLG9CQUFvQixDQUFDM0MsS0FBSztVQUNoRDRDLGlCQUFpQixFQUFFSixPQUFPLENBQUNLLGlCQUFpQjtVQUM1Q2YsS0FBSyxFQUFFVSxPQUFPLEVBQUVsQixXQUFXLEVBQUVTLE1BQU0sRUFBRWhGLEtBQUssR0FDdkN5RixPQUFPLEVBQUVsQixXQUFXLEVBQUVTLE1BQU0sRUFBRWhGLEtBQUssRUFBRUMsUUFBUSxDQUFDLENBQUMsR0FDL0MsR0FBR3FGLG1CQUFtQixDQUFDUyxPQUFPLENBQUMsdUJBQXVCLENBQUMsS0FBS04sT0FBTyxDQUFDQyxJQUFJLEdBQUc7VUFDOUVULFFBQVEsRUFBRSxJQUFJO1VBQ2RDLFNBQVMsRUFBRSxNQUFNO1VBQ2pCYyxNQUFNLEVBQUU7UUFDVCxDQUFDO01BQ0Y7SUFDRDtJQUVBLE1BQU1DLFNBQVMsR0FBRzNDLGlCQUFpQixDQUFDNEMseUJBQXlCLENBQUMsQ0FBQztJQUMvRCxNQUFNQyxTQUFTLEdBQUc3QyxpQkFBaUIsQ0FBQzhDLHNCQUFzQixDQUFDLENBQUM7SUFDNUQsTUFBTUMsZUFBZSxHQUFHLENBQUMsQ0FBd0I7SUFDakRBLGVBQWUsQ0FBQ3pILEtBQUssZ0RBQWdEO0lBQ3JFeUgsZUFBZSxDQUFDQyxzQkFBc0IsR0FBRyxFQUFFO0lBQzNDRCxlQUFlLENBQUNFLG1CQUFtQixHQUFHLEVBQUU7SUFFeEMsSUFBSU4sU0FBUyxFQUFFO01BQ2RJLGVBQWUsQ0FBQ0Msc0JBQXNCLEdBQUdMLFNBQVMsQ0FBQzlGLEdBQUcsQ0FBRXFHLElBQUksSUFDM0Q1RCwrQkFBK0IsQ0FBQzRELElBQUksQ0FDckMsQ0FBa0Y7SUFDbkY7SUFFQSxJQUFJTCxTQUFTLEVBQUU7TUFDZEUsZUFBZSxDQUFDRSxtQkFBbUIsR0FBR0osU0FBUyxDQUFDaEcsR0FBRyxDQUFFcUcsSUFBSSxLQUFNO1FBQzlELENBQUMsZUFBZSxHQUFHQSxJQUFJLENBQUN2RDtNQUN6QixDQUFDLENBQUMsQ0FBa0Y7SUFDckY7SUFFQSxNQUFNL0UsWUFBWSxHQUFHcUMsZUFBZSxDQUFDeEMsZUFBZSxFQUFFQyxpQkFBaUIsRUFBRUMsZ0JBQWdCLENBQUM7SUFDMUYsSUFBSSxDQUFDd0ksc0JBQXNCLENBQUMscUJBQXFCLEdBQUd6SSxpQkFBaUIsQ0FBQzBJLEtBQUssQ0FBQyxHQUFHLENBQUM7SUFDaEYsSUFBSUQsc0JBQXNCLENBQUNFLFdBQVcsQ0FBQyxHQUFHLENBQUMsS0FBS0Ysc0JBQXNCLENBQUNHLE1BQU0sR0FBRyxDQUFDLEVBQUU7TUFDbEY7TUFDQUgsc0JBQXNCLEdBQUdBLHNCQUFzQixDQUFDSSxTQUFTLENBQUMsQ0FBQyxFQUFFSixzQkFBc0IsQ0FBQ0csTUFBTSxHQUFHLENBQUMsQ0FBQztJQUNoRztJQUNBLE1BQU1FLEtBQUssR0FBRy9JLGVBQWUsQ0FBQ2dKLEtBQUssRUFBRTlHLFFBQVEsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7SUFDdkQsTUFBTStHLGFBQWEsR0FBRy9JLGdCQUFnQixDQUFDZ0osc0JBQXNCLENBQUMsQ0FBQztJQUMvRCxNQUFNQyxXQUFvQixHQUFHVCxzQkFBc0IsQ0FBQ0csTUFBTSxLQUFLLENBQUM7SUFDaEUsTUFBTU8sVUFBa0IsR0FBR0gsYUFBYSxDQUFDSSxlQUFlLEdBQUdKLGFBQWEsQ0FBQ0ksZUFBZSxDQUFDbEUsSUFBSSxHQUFHOEQsYUFBYSxDQUFDSyxpQkFBaUIsQ0FBQ25FLElBQUk7SUFDcEksTUFBTW9FLFlBQVksR0FBR0osV0FBVyxHQUFHSyxjQUFjLENBQUN0SixnQkFBZ0IsQ0FBQ3VKLGNBQWMsQ0FBQyxDQUFDLENBQUMsR0FBRzlILFNBQVM7SUFDaEcsTUFBTStILGNBQWMsR0FBRztNQUN0QkMsUUFBUSxFQUFFO1FBQ1RDLE1BQU0sRUFBRTtVQUNQQyxLQUFLLEVBQUUsZ0JBQWdCO1VBQ3ZCQyxHQUFHLEVBQUU7UUFDTjtNQUNELENBQUM7TUFDREMsV0FBVyxFQUFFO1FBQ1pDLE1BQU0sRUFBRTtVQUNQNUcsUUFBUSxFQUFFO1FBQ1g7TUFDRDtJQUNELENBQUM7SUFDRCxJQUFJNkcsY0FBbUM7SUFDdkMsSUFBSS9KLGdCQUFnQixDQUFDZ0ssZUFBZSxDQUFDLENBQUMsS0FBS0MsWUFBWSxDQUFDQyxVQUFVLEVBQUU7TUFDbkVILGNBQWMsR0FBRyxJQUFJO0lBQ3RCLENBQUMsTUFBTSxJQUNOL0osZ0JBQWdCLENBQUNnSyxlQUFlLENBQUMsQ0FBQyxLQUFLQyxZQUFZLENBQUNFLFVBQVUsSUFDOURuSyxnQkFBZ0IsQ0FBQ2dLLGVBQWUsQ0FBQyxDQUFDLEtBQUtDLFlBQVksQ0FBQ0csa0JBQWtCLEVBQ3JFO01BQ0RMLGNBQWMsR0FBRyxLQUFLO0lBQ3ZCO0lBQ0EsTUFBTU0seUJBQXlCLEdBQzlCckssZ0JBQWdCLENBQUN3RCxrQkFBa0IsQ0FBQyxDQUFDLENBQUM2Ryx5QkFBeUIsQ0FBQyxDQUFDLElBQ2pFckssZ0JBQWdCLENBQUNnSyxlQUFlLENBQUMsQ0FBQyxLQUFLQyxZQUFZLENBQUNHLGtCQUFrQjtJQUN2RSxNQUFNRSx3QkFBd0IsR0FBR0QseUJBQXlCLEdBQUcsb0NBQW9DLEdBQUcsRUFBRTtJQUN0RyxNQUFNaEosT0FBTyxHQUFHZ0oseUJBQXlCLEdBQUcsZ0RBQWdELEdBQUcsTUFBTTtJQUNyRyxNQUFNRSxzQkFBc0IsR0FBR2xGLGlCQUFpQixDQUFDbUYseUJBQXlCLENBQUMsQ0FBQztJQUM1RXBDLGVBQWUsQ0FBQ3FDLFlBQVksR0FBR0Ysc0JBQXNCLEdBQUdBLHNCQUFzQixDQUFDRyxRQUFRLENBQUMsUUFBUSxDQUFDLEdBQUcsSUFBSTtJQUN4RyxJQUFJakUsU0FBUyxHQUFHLEVBQUU7SUFDbEIsSUFBSTNHLGVBQWUsQ0FBQ3NCLGtCQUFrQixDQUFDcUgsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDRSxNQUFNLEdBQUcsQ0FBQyxFQUFFO01BQzdEbEMsU0FBUyxHQUFHM0csZUFBZSxDQUFDc0Isa0JBQWtCLENBQUNxSCxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzdEO0lBQ0EsTUFBTWtDLGlCQUFpQixHQUFHQyxxQkFBcUIsQ0FBQyxZQUFZLEVBQUU1SyxnQkFBZ0IsRUFBRUQsaUJBQWlCLENBQUM7SUFDbEcsTUFBTThLLHdCQUF3QixHQUFHN0ssZ0JBQWdCLENBQUM4SyxzQkFBc0IsQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFHLEtBQUs7SUFDekYsTUFBTUMsaUJBQWlCLEdBQUdDLEdBQUcsQ0FBQ0MscUJBQXFCLENBQUMsQ0FBQyxFQUFFTixpQkFBaUIsQ0FBQztJQUN6RSxNQUFNO01BQUVwRyxNQUFNO01BQUVDO0lBQWMsQ0FBQyxHQUFHRixhQUFhLENBQUN2RSxpQkFBaUIsRUFBRUMsZ0JBQWdCLENBQUM7SUFDcEYsTUFBTTBFLGFBQWEsR0FBR0QsZ0JBQWdCLENBQUMxRSxpQkFBaUIsRUFBRUMsZ0JBQWdCLENBQUM7SUFDM0UsTUFBTWtMLHdCQUFrRCxHQUFHLEVBQUU7SUFDN0RwTCxlQUFlLEVBQUVxTCxtQkFBbUIsRUFBRWhMLE9BQU8sQ0FBRWlMLGtCQUFrQixJQUFLO01BQ3JFLE1BQU12RyxHQUEyQixHQUFHLENBQUMsQ0FBQztNQUN0Q0EsR0FBRyxDQUFDdUcsa0JBQWtCLEVBQUVDLFNBQVMsRUFBRXJHLEtBQUssQ0FBVyxHQUFHb0csa0JBQWtCLEVBQUVFLElBQWM7TUFDeEZKLHdCQUF3QixDQUFDcEssSUFBSSxDQUFDK0QsR0FBRyxDQUFDO0lBQ25DLENBQUMsQ0FBQztJQUVGLE1BQU0wRyxzQkFBZ0QsR0FBRyxFQUFFO0lBQzNEekwsZUFBZSxFQUFFMEwsaUJBQWlCLEVBQUVyTCxPQUFPLENBQUVzTCxnQkFBZ0IsSUFBSztNQUNqRSxNQUFNNUcsR0FBMkIsR0FBRyxDQUFDLENBQUM7TUFDdENBLEdBQUcsQ0FBQzRHLGdCQUFnQixFQUFFQyxPQUFPLEVBQUUxRyxLQUFLLENBQVcsR0FBR3lHLGdCQUFnQixFQUFFSCxJQUFjO01BQ2xGQyxzQkFBc0IsQ0FBQ3pLLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNoQyxDQUFDLENBQUM7SUFDRixPQUFPO01BQ05DLElBQUksRUFBRTRLLGlCQUFpQixDQUFDQyxLQUFLO01BQzdCQyxFQUFFLEVBQUVwRixTQUFTLEdBQ1ZxRixVQUFVLENBQUM3QyxXQUFXLEdBQUdDLFVBQVUsR0FBR1Ysc0JBQXNCLEVBQUUvQixTQUFTLEVBQUVrRixpQkFBaUIsQ0FBQ0MsS0FBSyxDQUFDLEdBQ2pHRSxVQUFVLENBQUM3QyxXQUFXLEdBQUdDLFVBQVUsR0FBR1Ysc0JBQXNCLEVBQUVtRCxpQkFBaUIsQ0FBQ0MsS0FBSyxDQUFDO01BQ3pGRyxVQUFVLEVBQUVDLG1CQUFtQixDQUFDaE0sZ0JBQWdCLENBQUNnSixzQkFBc0IsQ0FBQyxDQUFDLENBQUM7TUFDMUVpRCxLQUFLLEVBQUVDLFFBQVEsQ0FBQyxDQUNmekYsU0FBUyxHQUNOcUYsVUFBVSxDQUFDN0MsV0FBVyxHQUFHQyxVQUFVLEdBQUdWLHNCQUFzQixFQUFFL0IsU0FBUyxFQUFFa0YsaUJBQWlCLENBQUNDLEtBQUssQ0FBQyxHQUNqR0UsVUFBVSxDQUFDN0MsV0FBVyxHQUFHQyxVQUFVLEdBQUdWLHNCQUFzQixFQUFFbUQsaUJBQWlCLENBQUNDLEtBQUssQ0FBQyxFQUN6RixPQUFPLENBQ1AsQ0FBQztNQUNGMUMsVUFBVSxFQUFFQSxVQUFVO01BQ3RCckYsZUFBZSxFQUFFUCxXQUFXLENBQUN2RCxpQkFBaUIsRUFBRUMsZ0JBQWdCLENBQUM7TUFDakVtTSxjQUFjLEVBQUUzRCxzQkFBc0I7TUFDdEN0SCxjQUFjLEVBQUVsQixnQkFBZ0IsQ0FBQ29NLHlCQUF5QixDQUFDck0saUJBQWlCLENBQUM7TUFDN0VzTSxRQUFRLEVBQUVoRCxZQUFZO01BQ3RCaUQsYUFBYSxFQUFFQyxJQUFJLENBQUNDLFNBQVMsQ0FBQ2hELGNBQWMsQ0FBQztNQUM3QzdHLE9BQU8sRUFBRTFDLFlBQVksQ0FBQzBDLE9BQU87TUFDN0JTLGNBQWMsRUFBRW5ELFlBQVksQ0FBQ21ELGNBQWM7TUFDM0N5RixLQUFLLEVBQUVBLEtBQUs7TUFDWmtCLGNBQWMsRUFBRUEsY0FBYztNQUM5Qk8sd0JBQXdCLEVBQUVBLHdCQUF3QjtNQUNsRGpKLE9BQU8sRUFBRUEsT0FBTztNQUNoQm9MLFNBQVMsRUFBRXZHLGlCQUFpQjtNQUM1QndHLFFBQVEsRUFBRXRGLGtCQUFrQjtNQUM1QnVGLGNBQWMsRUFBRXZFLGVBQWU7TUFDL0JoRCxnQ0FBZ0M7TUFDaEMxQixpQkFBaUIsRUFBRWtKLHFCQUFxQixDQUFDN0csUUFBUSxFQUFFckMsaUJBQWlCLENBQUM7TUFDckVxSCxpQkFBaUIsRUFBRUEsaUJBQWlCO01BQ3BDSixpQkFBaUIsRUFBRUEsaUJBQWlCO01BQ3BDRSx3QkFBd0IsRUFBRUEsd0JBQXdCO01BQ2xEdEcsTUFBTSxFQUFFQSxNQUFNO01BQ2RDLGFBQWEsRUFBRUEsYUFBYTtNQUM1QkUsYUFBYSxFQUFFQSxhQUFhO01BQzVCd0csd0JBQXdCLEVBQUVBLHdCQUF3QjtNQUNsREssc0JBQXNCLEVBQUVBO0lBQ3pCLENBQUM7RUFDRjtFQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUxBbEksUUFBQSxDQUFBNkIsd0JBQUEsR0FBQUEsd0JBQUE7RUFNQSxTQUFTMEgscUJBQXFCQSxDQUFDN0csUUFBdUIsRUFBRXJDLGlCQUF3QyxFQUF5QjtJQUN4SCxPQUFPQSxpQkFBaUIsS0FBSyxTQUFTLElBQUksQ0FBQ3FDLFFBQVEsR0FBRy9CLHFCQUFxQixDQUFDNkksSUFBSSxHQUFHbkosaUJBQWlCO0VBQ3JHOztFQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBQ08sU0FBU29KLHFDQUFxQ0EsQ0FDcEQ5TSxnQkFBeUQsRUFDekRELGlCQUF5QixFQUN6QmdOLGFBQTZDLEVBQ2hCO0lBQzdCLE1BQU10RyxTQUFTLEdBQUdzRyxhQUFhLENBQUMzTCxrQkFBa0IsQ0FBQ3FILEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQ0UsTUFBTSxHQUFHLENBQUMsR0FBR29FLGFBQWEsQ0FBQzNMLGtCQUFrQixDQUFDcUgsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUU7SUFDOUgsTUFBTSxDQUFDRCxzQkFBc0IsQ0FBQyxHQUFHekksaUJBQWlCLENBQUMwSSxLQUFLLENBQUMsR0FBRyxDQUFDO0lBRTdELE1BQU1NLGFBQWEsR0FBRy9JLGdCQUFnQixDQUFDZ0osc0JBQXNCLENBQUMsQ0FBQztJQUMvRCxNQUFNQyxXQUFvQixHQUFHVCxzQkFBc0IsQ0FBQ0csTUFBTSxLQUFLLENBQUM7SUFDaEUsTUFBTU8sVUFBa0IsR0FBR0gsYUFBYSxDQUFDSSxlQUFlLEVBQUVsRSxJQUFJLElBQUk4RCxhQUFhLENBQUNLLGlCQUFpQixDQUFDbkUsSUFBSTtJQUN0RyxNQUFNSSxpQkFBaUIsR0FBRyxJQUFJQyxpQkFBaUIsQ0FBQ3RGLGdCQUFnQixDQUFDdUYsYUFBYSxDQUFDLENBQUMsRUFBRXZGLGdCQUFnQixFQUFFLElBQUksQ0FBQztJQUN6RyxNQUFNdUssc0JBQXNCLEdBQUdsRixpQkFBaUIsQ0FBQ21GLHlCQUF5QixDQUFDLENBQUM7SUFDNUUsTUFBTUssd0JBQXdCLEdBQUcsQ0FBQyxDQUFDN0ssZ0JBQWdCLENBQUM4SyxzQkFBc0IsQ0FBQyxDQUFDO0lBQzVFLE9BQU87TUFDTjVKLGNBQWMsRUFBRWxCLGdCQUFnQixDQUFDb00seUJBQXlCLENBQUNyTSxpQkFBaUIsQ0FBQztNQUM3RThLLHdCQUF3QjtNQUN4QmtCLFVBQVUsRUFBRUMsbUJBQW1CLENBQUNoTSxnQkFBZ0IsQ0FBQ2dKLHNCQUFzQixDQUFDLENBQUMsQ0FBQztNQUMxRWpJLElBQUksRUFBRTRLLGlCQUFpQixDQUFDQyxLQUFLO01BQzdCMUMsVUFBVTtNQUNWMkMsRUFBRSxFQUFFcEYsU0FBUyxHQUNWcUYsVUFBVSxDQUFDN0MsV0FBVyxHQUFHQyxVQUFVLEdBQUdWLHNCQUFzQixFQUFFL0IsU0FBUyxFQUFFa0YsaUJBQWlCLENBQUNDLEtBQUssQ0FBQyxHQUNqR0UsVUFBVSxDQUFDN0MsV0FBVyxHQUFHQyxVQUFVLEdBQUdWLHNCQUFzQixFQUFFbUQsaUJBQWlCLENBQUNDLEtBQUssQ0FBQztNQUN6RkssS0FBSyxFQUFFQyxRQUFRLENBQUMsQ0FDZnpGLFNBQVMsR0FDTnFGLFVBQVUsQ0FBQzdDLFdBQVcsR0FBR0MsVUFBVSxHQUFHVixzQkFBc0IsRUFBRS9CLFNBQVMsRUFBRWtGLGlCQUFpQixDQUFDQyxLQUFLLENBQUMsR0FDakdFLFVBQVUsQ0FBQzdDLFdBQVcsR0FBR0MsVUFBVSxHQUFHVixzQkFBc0IsRUFBRW1ELGlCQUFpQixDQUFDQyxLQUFLLENBQUMsRUFDekYsT0FBTyxDQUNQLENBQUM7TUFDRmUsY0FBYyxFQUFFO1FBQ2ZoTSxLQUFLLEVBQUUsNkNBQTZDO1FBQ3BEOEosWUFBWSxFQUFFRixzQkFBc0IsRUFBRUcsUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJO01BQzdEO0lBQ0QsQ0FBQztFQUNGOztFQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUxBckgsUUFBQSxDQUFBeUoscUNBQUEsR0FBQUEscUNBQUE7RUFNQSxTQUFTeEwsNkJBQTZCQSxDQUNyQ2xCLFNBQWlDLEVBQ2pDSixnQkFBeUQsRUFDdEI7SUFDbkMsT0FBT2dOLGlCQUFpQixDQUN2QkMsR0FBRyxDQUNGQyxLQUFLLENBQ0pDLDJCQUEyQixDQUMxQi9NLFNBQVMsQ0FBQ2tHLFdBQVcsRUFBRThHLEVBQUUsRUFBRUMsTUFBTSxFQUNqQyxFQUFFLEVBQ0Y1TCxTQUFTLEVBQ1R6QixnQkFBZ0IsQ0FBQ3NOLDRCQUE0QixDQUFDLENBQy9DLENBQUMsRUFDRCxJQUNELENBQ0QsQ0FDRCxDQUFDO0VBQ0Y7RUFFTyxTQUFTQyw2QkFBNkJBLENBQUN2TixnQkFBeUQsRUFBc0I7SUFDNUgsTUFBTXFLLHlCQUF5QixHQUM5QnJLLGdCQUFnQixDQUFDd0Qsa0JBQWtCLENBQUMsQ0FBQyxDQUFDNkcseUJBQXlCLENBQUMsQ0FBQyxJQUNqRXJLLGdCQUFnQixDQUFDZ0ssZUFBZSxDQUFDLENBQUMsS0FBS0MsWUFBWSxDQUFDRyxrQkFBa0I7SUFDdkUsTUFBTXJCLGFBQWEsR0FBRy9JLGdCQUFnQixDQUFDZ0osc0JBQXNCLENBQUMsQ0FBQztJQUMvRCxNQUFNRSxVQUFVLEdBQUdILGFBQWEsQ0FBQ0ksZUFBZSxHQUFHSixhQUFhLENBQUNJLGVBQWUsQ0FBQ2xFLElBQUksR0FBRzhELGFBQWEsQ0FBQ0ssaUJBQWlCLENBQUNuRSxJQUFJO0lBRTVILE1BQU04SCxhQUFpQyxHQUFHO01BQ3pDaE0sSUFBSSxFQUFFNEssaUJBQWlCLENBQUNDLEtBQUs7TUFDN0JDLEVBQUUsRUFBRUMsVUFBVSxDQUFDNUMsVUFBVSxFQUFFeUMsaUJBQWlCLENBQUNDLEtBQUssQ0FBQztNQUNuREssS0FBSyxFQUFFQyxRQUFRLENBQUMsQ0FBQ0osVUFBVSxDQUFDNUMsVUFBVSxFQUFFeUMsaUJBQWlCLENBQUNDLEtBQUssQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDO01BQzNFMUMsVUFBVSxFQUFFQSxVQUFVO01BQ3RCTCxLQUFLLEVBQUUsRUFBRTtNQUNUa0QsVUFBVSxFQUFFLEVBQUU7TUFDZGxJLGVBQWUsRUFBRXBDLFNBQVM7TUFDMUIwSyxjQUFjLEVBQUUsRUFBRTtNQUNsQmpMLGNBQWMsRUFBRSxFQUFFO01BQ2xCb0wsYUFBYSxFQUFFQyxJQUFJLENBQUNDLFNBQVMsQ0FBQztRQUM3QjNDLFdBQVcsRUFBRTtVQUNaQyxNQUFNLEVBQUU7WUFDUDVHLFFBQVEsRUFBRTtVQUNYO1FBQ0Q7TUFDRCxDQUFDLENBQUM7TUFDRlAsT0FBTyxFQUFFLEVBQUU7TUFDWFMsY0FBYyxFQUFFLENBQUMsQ0FBQztNQUNsQjJHLGNBQWMsRUFBRSxLQUFLO01BQ3JCTyx3QkFBd0IsRUFBRSxFQUFFO01BQzVCakosT0FBTyxFQUFFZ0oseUJBQXlCLEdBQUcsZ0RBQWdELEdBQUcsTUFBTTtNQUM5Rm9DLFNBQVMsRUFBRSxDQUFDLENBQUM7TUFDYkMsUUFBUSxFQUFFLENBQUMsQ0FBQztNQUNaQyxjQUFjLEVBQUU7UUFDZmhNLEtBQUssRUFBRSw2Q0FBNkM7UUFDcEQwSCxzQkFBc0IsRUFBRSxFQUFFO1FBQzFCQyxtQkFBbUIsRUFBRSxFQUFFO1FBQ3ZCbUMsWUFBWSxFQUFFO01BQ2YsQ0FBQztNQUNEK0MsVUFBVSxFQUFFLEtBQUs7TUFDakI5SixpQkFBaUIsRUFBRU0scUJBQXFCLENBQUM2STtJQUMxQyxDQUFDO0lBRUQsT0FBT0UsYUFBYTtFQUNyQjtFQUFDMUosUUFBQSxDQUFBa0ssNkJBQUEsR0FBQUEsNkJBQUE7RUFBQSxPQUFBbEssUUFBQTtBQUFBIiwiaWdub3JlTGlzdCI6W119
@@ -22,7 +22,7 @@ import type {
22
22
  CustomAction,
23
23
  OverrideTypeAction
24
24
  } from "sap/fe/core/converters/controls/Common/Action";
25
- import { getActionsFromManifest } from "sap/fe/core/converters/controls/Common/Action";
25
+ import { getActionsFromManifest, isActionAIOperation, isMenuAIOperation } from "sap/fe/core/converters/controls/Common/Action";
26
26
  import { OverrideType, insertCustomElements } from "sap/fe/core/converters/helpers/ConfigurableObject";
27
27
  import { KeyHelper } from "sap/fe/core/converters/helpers/Key";
28
28
  import { generate } from "sap/fe/core/helpers/StableIdHelper";
@@ -80,6 +80,8 @@ export type ChartVisualization = ChartTemplateVisualization & {
80
80
  header?: string;
81
81
  headerVisible?: boolean;
82
82
  selectionMode?: string;
83
+ chartDimensionKeyAndRole?: object;
84
+ chartMeasureKeyAndRole?: object;
83
85
  };
84
86
 
85
87
  export type ChartP13nType = string | boolean | undefined;
@@ -108,7 +110,8 @@ function getChartActionsFromAnnotations(
108
110
  type: ActionType.DataFieldForAction,
109
111
  annotationPath: converterContext.getEntitySetBasedAnnotationPath(dataField.fullyQualifiedName),
110
112
  key,
111
- visible: getCompileExpressionForAction(dataField, converterContext)
113
+ visible: getCompileExpressionForAction(dataField, converterContext),
114
+ isAIOperation: isActionAIOperation(dataField) === true || undefined
112
115
  });
113
116
  }
114
117
  break;
@@ -133,7 +136,8 @@ function getChartActionsFromAnnotations(
133
136
  menu: dataField.Actions.map((action) =>
134
137
  getDataFieldAnnotationAction(action as DataFieldForActionTypes, converterContext)
135
138
  ),
136
- key: KeyHelper.generateKeyFromDataField(dataField)
139
+ key: KeyHelper.generateKeyFromDataField(dataField),
140
+ isAIOperation: isMenuAIOperation(dataField.Actions) === true || undefined
137
141
  } as AnnotationActionActionGroup);
138
142
  }
139
143
  });
@@ -423,6 +427,19 @@ export function createChartVisualization(
423
427
  const isInsightsEnabled = and(getInsightsEnablement(), isInsightsVisible);
424
428
  const { header, headerVisible } = getHeaderInfo(visualizationPath, converterContext);
425
429
  const selectionMode = getSelectionMode(visualizationPath, converterContext);
430
+ const chartDimensionKeyAndRole: Record<string, string>[] = [];
431
+ chartAnnotation?.DimensionAttributes?.forEach((dimensionAttribute) => {
432
+ const obj: Record<string, string> = {};
433
+ obj[dimensionAttribute?.Dimension?.value as string] = dimensionAttribute?.Role as string;
434
+ chartDimensionKeyAndRole.push(obj);
435
+ });
436
+
437
+ const chartMeasureKeyAndRole: Record<string, string>[] = [];
438
+ chartAnnotation?.MeasureAttributes?.forEach((measureAttribute) => {
439
+ const obj: Record<string, string> = {};
440
+ obj[measureAttribute?.Measure?.value as string] = measureAttribute?.Role as string;
441
+ chartMeasureKeyAndRole.push({});
442
+ });
426
443
  return {
427
444
  type: VisualizationType.Chart,
428
445
  id: qualifier
@@ -457,7 +474,9 @@ export function createChartVisualization(
457
474
  isParameterizedEntitySet: isParameterizedEntitySet,
458
475
  header: header,
459
476
  headerVisible: headerVisible,
460
- selectionMode: selectionMode
477
+ selectionMode: selectionMode,
478
+ chartDimensionKeyAndRole: chartDimensionKeyAndRole,
479
+ chartMeasureKeyAndRole: chartMeasureKeyAndRole
461
480
  };
462
481
  }
463
482
  /**
@@ -134,7 +134,13 @@ sap.ui.define(["sap/fe/base/BindingToolkit", "sap/fe/core/converters/annotations
134
134
  formatOptions: {
135
135
  ...getDefaultFormatOptionsForForm(),
136
136
  ...manifestFormContainer.fields[fieldId].formatOptions
137
- }
137
+ },
138
+ ...(manifestFormContainer.fields[fieldId].readOnly !== undefined && {
139
+ readOnly: manifestFormContainer.fields[fieldId].readOnly
140
+ }),
141
+ ...(manifestFormContainer.fields[fieldId].semanticObject !== undefined && {
142
+ semanticObject: manifestFormContainer.fields[fieldId].semanticObject
143
+ })
138
144
  };
139
145
  });
140
146
  }
@@ -160,7 +166,9 @@ sap.ui.define(["sap/fe/base/BindingToolkit", "sap/fe/core/converters/annotations
160
166
  sEntitySetPath = getTargetObjectPath(resolvedTarget.converterContext.getDataModelObjectPath(), false);
161
167
  }
162
168
  const aFormElements = insertCustomElements(getFormElementsFromAnnotations(facetDefinition, converterContext), getFormElementsFromManifest(facetDefinition, converterContext), {
163
- formatOptions: OverrideType.overwrite
169
+ formatOptions: OverrideType.overwrite,
170
+ readOnly: OverrideType.overwrite,
171
+ semanticObject: OverrideType.overwrite
164
172
  });
165
173
  actions = actions !== undefined ? actions.filter(action => action.facetName == facetDefinition.fullyQualifiedName) : [];
166
174
  if (actions.length === 0) {
@@ -187,7 +195,8 @@ sap.ui.define(["sap/fe/base/BindingToolkit", "sap/fe/core/converters/annotations
187
195
  isVisible: isVisible,
188
196
  entitySet: sEntitySetPath,
189
197
  actions: actions,
190
- useSingleTextAreaFieldAsNotes: additionalSettings?.useSingleTextAreaFieldAsNotes
198
+ useSingleTextAreaFieldAsNotes: additionalSettings?.useSingleTextAreaFieldAsNotes,
199
+ annotationHidden: facetDefinition.annotations?.UI?.Hidden ? true : false
191
200
  };
192
201
  }
193
202
  _exports.getFormContainer = getFormContainer;
@@ -235,4 +244,4 @@ sap.ui.define(["sap/fe/base/BindingToolkit", "sap/fe/core/converters/annotations
235
244
  _exports.createFormDefinition = createFormDefinition;
236
245
  return _exports;
237
246
  }, false);
238
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJGb3JtRWxlbWVudFR5cGUiLCJfZXhwb3J0cyIsImdldERlZmF1bHRGb3JtYXRPcHRpb25zRm9yRm9ybSIsInRleHRMaW5lc0VkaXQiLCJpc0ZpZWxkUGFydE9mUHJldmlldyIsImZpZWxkIiwiZm9ybVBhcnRPZlByZXZpZXciLCJ2YWx1ZU9mIiwiYW5ub3RhdGlvbnMiLCJVSSIsIlBhcnRPZlByZXZpZXciLCJ1bmRlZmluZWQiLCJnZXRGb3JtRWxlbWVudHNGcm9tQW5ub3RhdGlvbnMiLCJmYWNldERlZmluaXRpb24iLCJjb252ZXJ0ZXJDb250ZXh0IiwiZm9ybUVsZW1lbnRzIiwicmVzb2x2ZWRUYXJnZXQiLCJnZXRFbnRpdHlUeXBlQW5ub3RhdGlvbiIsIlRhcmdldCIsInZhbHVlIiwiZm9ybUFubm90YXRpb24iLCJhbm5vdGF0aW9uIiwiZ2V0RGF0YUZpZWxkc0Zyb21Bbm5vdGF0aW9ucyIsInNlbWFudGljT2JqZWN0QW5ub3RhdGlvblBhdGgiLCJnZXRTZW1hbnRpY09iamVjdFBhdGgiLCIkVHlwZSIsImlzUmVmZXJlbmNlUHJvcGVydHlTdGF0aWNhbGx5SGlkZGVuIiwiZm9ybUVsZW1lbnQiLCJrZXkiLCJLZXlIZWxwZXIiLCJnZW5lcmF0ZUtleUZyb21EYXRhRmllbGQiLCJ0eXBlIiwiQW5ub3RhdGlvbiIsImFubm90YXRpb25QYXRoIiwiZ2V0RW50aXR5U2V0QmFzZWRBbm5vdGF0aW9uUGF0aCIsImZ1bGx5UXVhbGlmaWVkTmFtZSIsInNlbWFudGljT2JqZWN0UGF0aCIsImZvcm1hdE9wdGlvbnMiLCJpc1BhcnRPZlByZXZpZXciLCIkdGFyZ2V0IiwiY29ubmVjdGVkRmllbGRzIiwiT2JqZWN0IiwidmFsdWVzIiwiRGF0YSIsImZpbHRlciIsImNvbm5lY3RlZEZpZWxkIiwiaGFzT3duUHJvcGVydHkiLCJtYXAiLCJjb25ubmVjdGVkRmllbGRFbGVtZW50IiwicHVzaCIsInRlcm0iLCJmb3JFYWNoIiwicXVhbGlmaWVyIiwiZ2V0Rm9ybUVsZW1lbnRzRnJvbU1hbmlmZXN0IiwibWFuaWZlc3RXcmFwcGVyIiwiZ2V0TWFuaWZlc3RXcmFwcGVyIiwibWFuaWZlc3RGb3JtQ29udGFpbmVyIiwiZ2V0Rm9ybUNvbnRhaW5lciIsImZpZWxkcyIsImtleXMiLCJmaWVsZElkIiwiaWQiLCJEZWZhdWx0IiwidGVtcGxhdGUiLCJwcm9wZXJ0eVBhdGgiLCJwcm9wZXJ0eSIsImxhYmVsIiwiZmV0Y2hUZXh0RnJvbU1ldGFNb2RlbCIsInBvc2l0aW9uIiwicGxhY2VtZW50IiwiUGxhY2VtZW50IiwiQWZ0ZXIiLCJhY3Rpb25zIiwiYWRkaXRpb25hbFNldHRpbmdzIiwic0Zvcm1Db250YWluZXJJZCIsImNyZWF0ZUlkRm9yQW5ub3RhdGlvbiIsInNBbm5vdGF0aW9uUGF0aCIsImlzVmlzaWJsZSIsImNvbXBpbGVFeHByZXNzaW9uIiwibm90IiwiZXF1YWwiLCJnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24iLCJIaWRkZW4iLCJzRW50aXR5U2V0UGF0aCIsImVudGl0eVNldCIsImdldEVudGl0eVNldCIsImRhdGFNb2RlbE9iamVjdFBhdGhUYXJnZXQiLCJnZXREYXRhTW9kZWxPYmplY3RQYXRoIiwidGFyZ2V0T2JqZWN0IiwiZ2V0VGFyZ2V0RW50aXR5U2V0UGF0aCIsImlzTmF2aWdhdGlvblByb3BlcnR5IiwiY29udGFpbnNUYXJnZXQiLCJnZXRUYXJnZXRPYmplY3RQYXRoIiwiaXNTaW5nbGV0b24iLCJhRm9ybUVsZW1lbnRzIiwiaW5zZXJ0Q3VzdG9tRWxlbWVudHMiLCJPdmVycmlkZVR5cGUiLCJvdmVyd3JpdGUiLCJhY3Rpb24iLCJmYWNldE5hbWUiLCJsZW5ndGgiLCJvQWN0aW9uU2hvd0RldGFpbHMiLCJnZXRGb3JtU3RhbmRhcmRBY3Rpb25CdXR0b25JRCIsInRleHQiLCJpZkVsc2UiLCJwYXRoSW5Nb2RlbCIsIkFjdGlvblR5cGUiLCJTaG93Rm9ybURldGFpbHMiLCJwcmVzcyIsInNvbWUiLCJvRm9ybUVsZW1lbnQiLCJ1c2VTaW5nbGVUZXh0QXJlYUZpZWxkQXNOb3RlcyIsImdldEZvcm1Db250YWluZXJzRm9yQ29sbGVjdGlvbiIsImZvcm1Db250YWluZXJzIiwiZm9ybUNvbnRhaW5lclNldHRpbmdzIiwiRmFjZXRzIiwiZmFjZXQiLCJpc1JlZmVyZW5jZUZhY2V0IiwiY3JlYXRlRm9ybURlZmluaXRpb24iLCJnZXRGb3JtSUQiLCJ1c2VGb3JtQ29udGFpbmVyTGFiZWxzIiwiaGFzRmFjZXRzTm90UGFydE9mUHJldmlldyIsImNoaWxkRmFjZXQiLCJFcnJvciJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiRm9ybS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IE1hc2tlZCB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvQ29tbW9uXCI7XG5pbXBvcnQgeyBDb21tb25Bbm5vdGF0aW9uVGVybXMgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL0NvbW1vblwiO1xuaW1wb3J0IHR5cGUgeyBDb250YWN0IH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9Db21tdW5pY2F0aW9uXCI7XG5pbXBvcnQgeyBDb21tdW5pY2F0aW9uQW5ub3RhdGlvblRlcm1zIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9Db21tdW5pY2F0aW9uXCI7XG5pbXBvcnQgdHlwZSB7XG5cdENvbGxlY3Rpb25GYWNldCxcblx0Q29sbGVjdGlvbkZhY2V0VHlwZXMsXG5cdERhdGFGaWVsZEFic3RyYWN0VHlwZXMsXG5cdERhdGFQb2ludCxcblx0RmFjZXRUeXBlcyxcblx0RmllbGRHcm91cCxcblx0RmllbGRHcm91cFR5cGUsXG5cdElkZW50aWZpY2F0aW9uLFxuXHRJbnB1dE1hc2ssXG5cdFBhcnRPZlByZXZpZXcsXG5cdFJlZmVyZW5jZUZhY2V0LFxuXHRSZWZlcmVuY2VGYWNldFR5cGVzXG59IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvVUlcIjtcbmltcG9ydCB7IFVJQW5ub3RhdGlvblRlcm1zLCBVSUFubm90YXRpb25UeXBlcyB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvVUlcIjtcbmltcG9ydCB0eXBlIHsgQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24gfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCB7IGNvbXBpbGVFeHByZXNzaW9uLCBlcXVhbCwgZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uLCBpZkVsc2UsIG5vdCwgcGF0aEluTW9kZWwgfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCB0eXBlIHsgUGFnZUNvbnRleHRQYXRoVGFyZ2V0IH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvVGVtcGxhdGVDb252ZXJ0ZXJcIjtcbmltcG9ydCB7IGdldFNlbWFudGljT2JqZWN0UGF0aCB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2Fubm90YXRpb25zL0RhdGFGaWVsZFwiO1xuaW1wb3J0IHR5cGUgeyBCYXNlQWN0aW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvQ29tbW9uL0FjdGlvblwiO1xuaW1wb3J0IHsgaXNOYXZpZ2F0aW9uUHJvcGVydHksIGlzU2luZ2xldG9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvVHlwZUd1YXJkc1wiO1xuaW1wb3J0IHsgZ2V0VGFyZ2V0RW50aXR5U2V0UGF0aCwgZ2V0VGFyZ2V0T2JqZWN0UGF0aCB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0RhdGFNb2RlbFBhdGhIZWxwZXJcIjtcbmltcG9ydCB7IGNyZWF0ZUlkRm9yQW5ub3RhdGlvbiB9IGZyb20gXCIuLi8uLi8uLi9oZWxwZXJzL1N0YWJsZUlkSGVscGVyXCI7XG5pbXBvcnQgdHlwZSBDb252ZXJ0ZXJDb250ZXh0IGZyb20gXCIuLi8uLi9Db252ZXJ0ZXJDb250ZXh0XCI7XG5pbXBvcnQgdHlwZSB7IEZvcm1NYW5pZmVzdENvbmZpZ3VyYXRpb24sIEZvcm1hdE9wdGlvbnNUeXBlIH0gZnJvbSBcIi4uLy4uL01hbmlmZXN0U2V0dGluZ3NcIjtcbmltcG9ydCB7IEFjdGlvblR5cGUgfSBmcm9tIFwiLi4vLi4vTWFuaWZlc3RTZXR0aW5nc1wiO1xuaW1wb3J0IHR5cGUgeyBDb25maWd1cmFibGVPYmplY3QsIEN1c3RvbUVsZW1lbnQgfSBmcm9tIFwiLi4vLi4vaGVscGVycy9Db25maWd1cmFibGVPYmplY3RcIjtcbmltcG9ydCB7IE92ZXJyaWRlVHlwZSwgUGxhY2VtZW50LCBpbnNlcnRDdXN0b21FbGVtZW50cyB9IGZyb20gXCIuLi8uLi9oZWxwZXJzL0NvbmZpZ3VyYWJsZU9iamVjdFwiO1xuaW1wb3J0IHsgaXNSZWZlcmVuY2VQcm9wZXJ0eVN0YXRpY2FsbHlIaWRkZW4gfSBmcm9tIFwiLi4vLi4vaGVscGVycy9EYXRhRmllbGRIZWxwZXJcIjtcbmltcG9ydCB7IGdldEZvcm1JRCwgZ2V0Rm9ybVN0YW5kYXJkQWN0aW9uQnV0dG9uSUQgfSBmcm9tIFwiLi4vLi4vaGVscGVycy9JRFwiO1xuaW1wb3J0IHsgS2V5SGVscGVyIH0gZnJvbSBcIi4uLy4uL2hlbHBlcnMvS2V5XCI7XG5cbmV4cG9ydCB0eXBlIEZvcm1EZWZpbml0aW9uID0ge1xuXHRpZDogc3RyaW5nO1xuXHR1c2VGb3JtQ29udGFpbmVyTGFiZWxzOiBib29sZWFuO1xuXHRoYXNGYWNldHNOb3RQYXJ0T2ZQcmV2aWV3OiBib29sZWFuO1xuXHRmb3JtQ29udGFpbmVyczogRm9ybUNvbnRhaW5lcltdO1xuXHRpc1Zpc2libGU6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uO1xufTtcblxuZXhwb3J0IGVudW0gRm9ybUVsZW1lbnRUeXBlIHtcblx0RGVmYXVsdCA9IFwiRGVmYXVsdFwiLFxuXHRTbG90ID0gXCJTbG90XCIsXG5cdEFubm90YXRpb24gPSBcIkFubm90YXRpb25cIlxufVxuXG5leHBvcnQgdHlwZSBCYXNlRm9ybUVsZW1lbnQgPSBDb25maWd1cmFibGVPYmplY3QgJiB7XG5cdGlkPzogc3RyaW5nO1xuXHR0eXBlOiBGb3JtRWxlbWVudFR5cGU7XG5cdGxhYmVsPzogc3RyaW5nO1xuXHR2aXNpYmxlPzogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb247XG5cdGZvcm1hdE9wdGlvbnM/OiBGb3JtYXRPcHRpb25zVHlwZTtcbn07XG5cbmV4cG9ydCB0eXBlIEFubm90YXRpb25Gb3JtRWxlbWVudCA9IEJhc2VGb3JtRWxlbWVudCAmIHtcblx0aWRQcmVmaXg/OiBzdHJpbmc7XG5cdGFubm90YXRpb25QYXRoPzogc3RyaW5nO1xuXHRpc1ZhbHVlTXVsdGlsaW5lVGV4dD86IGJvb2xlYW47XG5cdHNlbWFudGljT2JqZWN0UGF0aD86IHN0cmluZztcblx0Y29ubmVjdGVkRmllbGRzPzogeyBzZW1hbnRpY09iamVjdFBhdGg/OiBzdHJpbmcgfVtdO1xuXHRpc1BhcnRPZlByZXZpZXc/OiBib29sZWFuO1xufTtcblxuZXhwb3J0IHR5cGUgQ3VzdG9tRm9ybUVsZW1lbnQgPSBDdXN0b21FbGVtZW50PFxuXHRCYXNlRm9ybUVsZW1lbnQgJiB7XG5cdFx0dHlwZTogRm9ybUVsZW1lbnRUeXBlO1xuXHRcdHRlbXBsYXRlOiBzdHJpbmc7XG5cdFx0cHJvcGVydHlQYXRoPzogc3RyaW5nO1xuXHR9XG4+O1xuXG5leHBvcnQgdHlwZSBGb3JtRWxlbWVudCA9IEN1c3RvbUZvcm1FbGVtZW50IHwgQW5ub3RhdGlvbkZvcm1FbGVtZW50O1xuXG5leHBvcnQgdHlwZSBBZGRpdGlvbmFsRm9ybVNldHRpbmdzID0ge1xuXHR1c2VTaW5nbGVUZXh0QXJlYUZpZWxkQXNOb3Rlcz86IGJvb2xlYW47XG59O1xuXG5leHBvcnQgdHlwZSBGb3JtQ29udGFpbmVyID0ge1xuXHRpZD86IHN0cmluZztcblx0Zm9ybUVsZW1lbnRzOiBGb3JtRWxlbWVudFtdO1xuXHRhbm5vdGF0aW9uUGF0aDogc3RyaW5nO1xuXHRpc1Zpc2libGU6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uO1xuXHRlbnRpdHlTZXQ/OiBzdHJpbmc7XG5cdGFjdGlvbnM/OiBCYXNlQWN0aW9uW107XG5cdHVzZVNpbmdsZVRleHRBcmVhRmllbGRBc05vdGVzPzogYm9vbGVhbjtcbn07XG5cbi8qKlxuICogUmV0dXJucyBkZWZhdWx0IGZvcm1hdCBvcHRpb25zIGZvciB0ZXh0IGZpZWxkcyBvbiBhIGZvcm0uXG4gKiBAcmV0dXJucyBDb2xsZWN0aW9uIG9mIGZvcm1hdCBvcHRpb25zIHdpdGggZGVmYXVsdCB2YWx1ZXNcbiAqL1xuZnVuY3Rpb24gZ2V0RGVmYXVsdEZvcm1hdE9wdGlvbnNGb3JGb3JtKCk6IEZvcm1hdE9wdGlvbnNUeXBlIHtcblx0cmV0dXJuIHtcblx0XHR0ZXh0TGluZXNFZGl0OiA0XG5cdH07XG59XG5cbmZ1bmN0aW9uIGlzRmllbGRQYXJ0T2ZQcmV2aWV3KGZpZWxkOiBEYXRhRmllbGRBYnN0cmFjdFR5cGVzLCBmb3JtUGFydE9mUHJldmlldz86IFBhcnRPZlByZXZpZXcpOiBib29sZWFuIHtcblx0Ly8gQm90aCBlYWNoIGZvcm0gYW5kIGZpZWxkIGNhbiBoYXZlIHRoZSBQYXJ0T2ZQcmV2aWV3IGFubm90YXRpb24uIE9ubHkgaWYgdGhlIGZvcm0gaXMgbm90IGhpZGRlbiAobm90IHBhcnRPZlByZXZpZXcpIHdlIGFsbG93IHRvZ2dsaW5nIG9uIGZpZWxkIGxldmVsXG5cdHJldHVybiAoXG5cdFx0Zm9ybVBhcnRPZlByZXZpZXc/LnZhbHVlT2YoKSA9PT0gZmFsc2UgfHxcblx0XHRmaWVsZC5hbm5vdGF0aW9ucz8uVUk/LlBhcnRPZlByZXZpZXcgPT09IHVuZGVmaW5lZCB8fFxuXHRcdGZpZWxkLmFubm90YXRpb25zPy5VST8uUGFydE9mUHJldmlldy52YWx1ZU9mKCkgPT09IHRydWVcblx0KTtcbn1cblxuZnVuY3Rpb24gZ2V0Rm9ybUVsZW1lbnRzRnJvbUFubm90YXRpb25zKFxuXHRmYWNldERlZmluaXRpb246IFJlZmVyZW5jZUZhY2V0VHlwZXMsXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0PlxuKTogQW5ub3RhdGlvbkZvcm1FbGVtZW50W10ge1xuXHRjb25zdCBmb3JtRWxlbWVudHM6IEFubm90YXRpb25Gb3JtRWxlbWVudFtdID0gW107XG5cdGNvbnN0IHJlc29sdmVkVGFyZ2V0ID0gY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlQW5ub3RhdGlvbihmYWNldERlZmluaXRpb24uVGFyZ2V0LnZhbHVlKTtcblx0Y29uc3QgZm9ybUFubm90YXRpb246IElkZW50aWZpY2F0aW9uIHwgRmllbGRHcm91cCB8IENvbnRhY3QgfCBEYXRhUG9pbnQgfCBJbnB1dE1hc2sgfCBNYXNrZWQgPSByZXNvbHZlZFRhcmdldC5hbm5vdGF0aW9uIGFzXG5cdFx0fCBJZGVudGlmaWNhdGlvblxuXHRcdHwgRmllbGRHcm91cFxuXHRcdHwgQ29udGFjdFxuXHRcdHwgRGF0YVBvaW50XG5cdFx0fCBJbnB1dE1hc2tcblx0XHR8IE1hc2tlZDtcblx0Y29udmVydGVyQ29udGV4dCA9IHJlc29sdmVkVGFyZ2V0LmNvbnZlcnRlckNvbnRleHQ7XG5cblx0ZnVuY3Rpb24gZ2V0RGF0YUZpZWxkc0Zyb21Bbm5vdGF0aW9ucyhmaWVsZDogRGF0YUZpZWxkQWJzdHJhY3RUeXBlcywgZm9ybVBhcnRPZlByZXZpZXc6IFBhcnRPZlByZXZpZXcgfCB1bmRlZmluZWQpOiB2b2lkIHtcblx0XHRjb25zdCBzZW1hbnRpY09iamVjdEFubm90YXRpb25QYXRoID0gZ2V0U2VtYW50aWNPYmplY3RQYXRoKGNvbnZlcnRlckNvbnRleHQsIGZpZWxkKTtcblx0XHRpZiAoXG5cdFx0XHRmaWVsZC4kVHlwZSAhPT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQWN0aW9uICYmXG5cdFx0XHRmaWVsZC4kVHlwZSAhPT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uICYmXG5cdFx0XHRmaWVsZC4kVHlwZSAhPT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQWN0aW9uR3JvdXAgJiZcblx0XHRcdCFpc1JlZmVyZW5jZVByb3BlcnR5U3RhdGljYWxseUhpZGRlbihmaWVsZClcblx0XHQpIHtcblx0XHRcdGNvbnN0IGZvcm1FbGVtZW50ID0ge1xuXHRcdFx0XHRrZXk6IEtleUhlbHBlci5nZW5lcmF0ZUtleUZyb21EYXRhRmllbGQoZmllbGQpLFxuXHRcdFx0XHR0eXBlOiBGb3JtRWxlbWVudFR5cGUuQW5ub3RhdGlvbixcblx0XHRcdFx0YW5ub3RhdGlvblBhdGg6IGAke2NvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0QmFzZWRBbm5vdGF0aW9uUGF0aChmaWVsZC5mdWxseVF1YWxpZmllZE5hbWUpfS9gLFxuXHRcdFx0XHRzZW1hbnRpY09iamVjdFBhdGg6IHNlbWFudGljT2JqZWN0QW5ub3RhdGlvblBhdGgsXG5cdFx0XHRcdGZvcm1hdE9wdGlvbnM6IGdldERlZmF1bHRGb3JtYXRPcHRpb25zRm9yRm9ybSgpLFxuXHRcdFx0XHRpc1BhcnRPZlByZXZpZXc6IGlzRmllbGRQYXJ0T2ZQcmV2aWV3KGZpZWxkLCBmb3JtUGFydE9mUHJldmlldylcblx0XHRcdH07XG5cdFx0XHRpZiAoXG5cdFx0XHRcdGZpZWxkLiRUeXBlID09PSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkRhdGFGaWVsZEZvckFubm90YXRpb25cIiAmJlxuXHRcdFx0XHRmaWVsZC5UYXJnZXQuJHRhcmdldD8uJFR5cGUgPT09IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuQ29ubmVjdGVkRmllbGRzVHlwZVwiXG5cdFx0XHQpIHtcblx0XHRcdFx0Y29uc3QgY29ubmVjdGVkRmllbGRzID0gT2JqZWN0LnZhbHVlcyhmaWVsZC5UYXJnZXQuJHRhcmdldC5EYXRhKS5maWx0ZXIoXG5cdFx0XHRcdFx0KGNvbm5lY3RlZEZpZWxkOiB1bmtub3duKSA9PiAoY29ubmVjdGVkRmllbGQgYXMgRGF0YUZpZWxkQWJzdHJhY3RUeXBlcyk/Lmhhc093blByb3BlcnR5KFwiVmFsdWVcIilcblx0XHRcdFx0KSBhcyBEYXRhRmllbGRBYnN0cmFjdFR5cGVzW107XG5cdFx0XHRcdChmb3JtRWxlbWVudCBhcyBBbm5vdGF0aW9uRm9ybUVsZW1lbnQpLmNvbm5lY3RlZEZpZWxkcyA9IGNvbm5lY3RlZEZpZWxkcy5tYXAoKGNvbm5uZWN0ZWRGaWVsZEVsZW1lbnQpID0+IHtcblx0XHRcdFx0XHRyZXR1cm4geyBzZW1hbnRpY09iamVjdFBhdGg6IGdldFNlbWFudGljT2JqZWN0UGF0aChjb252ZXJ0ZXJDb250ZXh0LCBjb25ubmVjdGVkRmllbGRFbGVtZW50KSB9O1xuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHRcdGZvcm1FbGVtZW50cy5wdXNoKGZvcm1FbGVtZW50KTtcblx0XHR9XG5cdH1cblxuXHRzd2l0Y2ggKGZvcm1Bbm5vdGF0aW9uPy50ZXJtKSB7XG5cdFx0Y2FzZSBVSUFubm90YXRpb25UZXJtcy5GaWVsZEdyb3VwOlxuXHRcdFx0Zm9ybUFubm90YXRpb24uRGF0YS5mb3JFYWNoKChmaWVsZCkgPT4gZ2V0RGF0YUZpZWxkc0Zyb21Bbm5vdGF0aW9ucyhmaWVsZCwgZmFjZXREZWZpbml0aW9uLmFubm90YXRpb25zPy5VST8uUGFydE9mUHJldmlldykpO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBVSUFubm90YXRpb25UZXJtcy5JZGVudGlmaWNhdGlvbjpcblx0XHRcdGZvcm1Bbm5vdGF0aW9uLmZvckVhY2goKGZpZWxkKSA9PiBnZXREYXRhRmllbGRzRnJvbUFubm90YXRpb25zKGZpZWxkLCBmYWNldERlZmluaXRpb24uYW5ub3RhdGlvbnM/LlVJPy5QYXJ0T2ZQcmV2aWV3KSk7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFVJQW5ub3RhdGlvblRlcm1zLkRhdGFQb2ludDpcblx0XHRcdGZvcm1FbGVtZW50cy5wdXNoKHtcblx0XHRcdFx0Ly8ga2V5OiBLZXlIZWxwZXIuZ2VuZXJhdGVLZXlGcm9tRGF0YUZpZWxkKGZvcm1Bbm5vdGF0aW9uKSxcblx0XHRcdFx0a2V5OiBgRGF0YVBvaW50Ojoke2Zvcm1Bbm5vdGF0aW9uLnF1YWxpZmllciA/IGZvcm1Bbm5vdGF0aW9uLnF1YWxpZmllciA6IFwiXCJ9YCxcblx0XHRcdFx0dHlwZTogRm9ybUVsZW1lbnRUeXBlLkFubm90YXRpb24sXG5cdFx0XHRcdGFubm90YXRpb25QYXRoOiBgJHtjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVNldEJhc2VkQW5ub3RhdGlvblBhdGgoZm9ybUFubm90YXRpb24uZnVsbHlRdWFsaWZpZWROYW1lKX0vYFxuXHRcdFx0fSk7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFVJQW5ub3RhdGlvblRlcm1zLklucHV0TWFzazpcblx0XHRcdGZvcm1FbGVtZW50cy5wdXNoKHtcblx0XHRcdFx0a2V5OiBgTWFza2VkSW5wdXQ6OiR7Zm9ybUFubm90YXRpb24ucXVhbGlmaWVyID8gZm9ybUFubm90YXRpb24ucXVhbGlmaWVyIDogXCJcIn1gLFxuXHRcdFx0XHR0eXBlOiBGb3JtRWxlbWVudFR5cGUuQW5ub3RhdGlvbixcblx0XHRcdFx0YW5ub3RhdGlvblBhdGg6IGAke2NvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0QmFzZWRBbm5vdGF0aW9uUGF0aChmb3JtQW5ub3RhdGlvbi5mdWxseVF1YWxpZmllZE5hbWUpfS9gXG5cdFx0XHR9KTtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgQ29tbW9uQW5ub3RhdGlvblRlcm1zLk1hc2tlZDpcblx0XHRcdGZvcm1FbGVtZW50cy5wdXNoKHtcblx0XHRcdFx0a2V5OiBgTWFza2VkOjoke2Zvcm1Bbm5vdGF0aW9uLnF1YWxpZmllciA/IGZvcm1Bbm5vdGF0aW9uLnF1YWxpZmllciA6IFwiXCJ9YCxcblx0XHRcdFx0dHlwZTogRm9ybUVsZW1lbnRUeXBlLkFubm90YXRpb24sXG5cdFx0XHRcdGFubm90YXRpb25QYXRoOiBgJHtjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVNldEJhc2VkQW5ub3RhdGlvblBhdGgoZm9ybUFubm90YXRpb24uZnVsbHlRdWFsaWZpZWROYW1lKX0vYFxuXHRcdFx0fSk7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIENvbW11bmljYXRpb25Bbm5vdGF0aW9uVGVybXMuQ29udGFjdDpcblx0XHRcdGZvcm1FbGVtZW50cy5wdXNoKHtcblx0XHRcdFx0Ly8ga2V5OiBLZXlIZWxwZXIuZ2VuZXJhdGVLZXlGcm9tRGF0YUZpZWxkKGZvcm1Bbm5vdGF0aW9uKSxcblx0XHRcdFx0a2V5OiBgQ29udGFjdDo6JHtmb3JtQW5ub3RhdGlvbi5xdWFsaWZpZXIgPyBmb3JtQW5ub3RhdGlvbi5xdWFsaWZpZXIgOiBcIlwifWAsXG5cdFx0XHRcdHR5cGU6IEZvcm1FbGVtZW50VHlwZS5Bbm5vdGF0aW9uLFxuXHRcdFx0XHRhbm5vdGF0aW9uUGF0aDogYCR7Y29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXRCYXNlZEFubm90YXRpb25QYXRoKGZvcm1Bbm5vdGF0aW9uLmZ1bGx5UXVhbGlmaWVkTmFtZSl9L2Bcblx0XHRcdH0pO1xuXHRcdFx0YnJlYWs7XG5cdFx0ZGVmYXVsdDpcblx0XHRcdGJyZWFrO1xuXHR9XG5cdHJldHVybiBmb3JtRWxlbWVudHM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRGb3JtRWxlbWVudHNGcm9tTWFuaWZlc3QoXG5cdGZhY2V0RGVmaW5pdGlvbjogUmVmZXJlbmNlRmFjZXRUeXBlcyxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+XG4pOiBSZWNvcmQ8c3RyaW5nLCBDdXN0b21Gb3JtRWxlbWVudD4ge1xuXHRjb25zdCBtYW5pZmVzdFdyYXBwZXIgPSBjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0V3JhcHBlcigpO1xuXHRjb25zdCBtYW5pZmVzdEZvcm1Db250YWluZXI6IEZvcm1NYW5pZmVzdENvbmZpZ3VyYXRpb24gPSBtYW5pZmVzdFdyYXBwZXIuZ2V0Rm9ybUNvbnRhaW5lcihmYWNldERlZmluaXRpb24uVGFyZ2V0LnZhbHVlKTtcblx0Y29uc3QgZm9ybUVsZW1lbnRzOiBSZWNvcmQ8c3RyaW5nLCBDdXN0b21Gb3JtRWxlbWVudD4gPSB7fTtcblx0aWYgKG1hbmlmZXN0Rm9ybUNvbnRhaW5lcj8uZmllbGRzKSB7XG5cdFx0T2JqZWN0LmtleXMobWFuaWZlc3RGb3JtQ29udGFpbmVyPy5maWVsZHMpLmZvckVhY2goKGZpZWxkSWQpID0+IHtcblx0XHRcdGZvcm1FbGVtZW50c1tmaWVsZElkXSA9IHtcblx0XHRcdFx0a2V5OiBmaWVsZElkLFxuXHRcdFx0XHRpZDogYEN1c3RvbUZvcm1FbGVtZW50Ojoke2ZpZWxkSWR9YCxcblx0XHRcdFx0dHlwZTogbWFuaWZlc3RGb3JtQ29udGFpbmVyLmZpZWxkc1tmaWVsZElkXS50eXBlIHx8IEZvcm1FbGVtZW50VHlwZS5EZWZhdWx0LFxuXHRcdFx0XHR0ZW1wbGF0ZTogbWFuaWZlc3RGb3JtQ29udGFpbmVyLmZpZWxkc1tmaWVsZElkXS50ZW1wbGF0ZSxcblx0XHRcdFx0cHJvcGVydHlQYXRoOiBtYW5pZmVzdEZvcm1Db250YWluZXIuZmllbGRzW2ZpZWxkSWRdPy5wcm9wZXJ0eSxcblx0XHRcdFx0bGFiZWw6IGNvbnZlcnRlckNvbnRleHQuZmV0Y2hUZXh0RnJvbU1ldGFNb2RlbChtYW5pZmVzdEZvcm1Db250YWluZXIuZmllbGRzW2ZpZWxkSWRdLmxhYmVsKSxcblx0XHRcdFx0cG9zaXRpb246IG1hbmlmZXN0Rm9ybUNvbnRhaW5lci5maWVsZHNbZmllbGRJZF0ucG9zaXRpb24gfHwge1xuXHRcdFx0XHRcdHBsYWNlbWVudDogUGxhY2VtZW50LkFmdGVyXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGZvcm1hdE9wdGlvbnM6IHtcblx0XHRcdFx0XHQuLi5nZXREZWZhdWx0Rm9ybWF0T3B0aW9uc0ZvckZvcm0oKSxcblx0XHRcdFx0XHQuLi5tYW5pZmVzdEZvcm1Db250YWluZXIuZmllbGRzW2ZpZWxkSWRdLmZvcm1hdE9wdGlvbnNcblx0XHRcdFx0fVxuXHRcdFx0fTtcblx0XHR9KTtcblx0fVxuXHRyZXR1cm4gZm9ybUVsZW1lbnRzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Rm9ybUNvbnRhaW5lcihcblx0ZmFjZXREZWZpbml0aW9uOiBSZWZlcmVuY2VGYWNldFR5cGVzLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sXG5cdGFjdGlvbnM/OiBCYXNlQWN0aW9uW10sXG5cdGFkZGl0aW9uYWxTZXR0aW5ncz86IEFkZGl0aW9uYWxGb3JtU2V0dGluZ3Ncbik6IEZvcm1Db250YWluZXIge1xuXHRjb25zdCBzRm9ybUNvbnRhaW5lcklkID0gY3JlYXRlSWRGb3JBbm5vdGF0aW9uKGZhY2V0RGVmaW5pdGlvbikgYXMgc3RyaW5nO1xuXHRjb25zdCBzQW5ub3RhdGlvblBhdGggPSBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVNldEJhc2VkQW5ub3RhdGlvblBhdGgoZmFjZXREZWZpbml0aW9uLmZ1bGx5UXVhbGlmaWVkTmFtZSk7XG5cdGNvbnN0IHJlc29sdmVkVGFyZ2V0ID0gY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlQW5ub3RhdGlvbihmYWNldERlZmluaXRpb24uVGFyZ2V0LnZhbHVlKTtcblx0Y29uc3QgaXNWaXNpYmxlID0gY29tcGlsZUV4cHJlc3Npb24obm90KGVxdWFsKHRydWUsIGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihmYWNldERlZmluaXRpb24uYW5ub3RhdGlvbnM/LlVJPy5IaWRkZW4pKSkpO1xuXHRsZXQgc0VudGl0eVNldFBhdGghOiBzdHJpbmc7XG5cdC8vIHJlc29sdmVkVGFyZ2V0IGRvZXNuJ3QgaGF2ZSBhIGVudGl0eVNldCBpbiBjYXNlIENvbnRhaW5tZW50cyBhbmQgUGFyYW10ZXJpemVkIHNlcnZpY2VzLlxuXHRjb25zdCBlbnRpdHlTZXQgPSByZXNvbHZlZFRhcmdldC5jb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVNldCgpO1xuXHRjb25zdCBkYXRhTW9kZWxPYmplY3RQYXRoVGFyZ2V0ID0gcmVzb2x2ZWRUYXJnZXQuY29udmVydGVyQ29udGV4dC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCkudGFyZ2V0T2JqZWN0O1xuXHRpZiAoZW50aXR5U2V0ICYmIGVudGl0eVNldCAhPT0gY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXQoKSkge1xuXHRcdHNFbnRpdHlTZXRQYXRoID0gZ2V0VGFyZ2V0RW50aXR5U2V0UGF0aChyZXNvbHZlZFRhcmdldC5jb252ZXJ0ZXJDb250ZXh0LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKSk7XG5cdH0gZWxzZSBpZiAoaXNOYXZpZ2F0aW9uUHJvcGVydHkoZGF0YU1vZGVsT2JqZWN0UGF0aFRhcmdldCkgJiYgZGF0YU1vZGVsT2JqZWN0UGF0aFRhcmdldD8uY29udGFpbnNUYXJnZXQgPT09IHRydWUpIHtcblx0XHRzRW50aXR5U2V0UGF0aCA9IGdldFRhcmdldE9iamVjdFBhdGgocmVzb2x2ZWRUYXJnZXQuY29udmVydGVyQ29udGV4dC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCksIGZhbHNlKTtcblx0fSBlbHNlIGlmIChlbnRpdHlTZXQgJiYgIXNFbnRpdHlTZXRQYXRoICYmIGlzU2luZ2xldG9uKGVudGl0eVNldCkpIHtcblx0XHRzRW50aXR5U2V0UGF0aCA9IGVudGl0eVNldC5mdWxseVF1YWxpZmllZE5hbWU7XG5cdH0gZWxzZSBpZiAoIWVudGl0eVNldCAmJiBpc05hdmlnYXRpb25Qcm9wZXJ0eShkYXRhTW9kZWxPYmplY3RQYXRoVGFyZ2V0KSAmJiBkYXRhTW9kZWxPYmplY3RQYXRoVGFyZ2V0Py5jb250YWluc1RhcmdldCA9PT0gZmFsc2UpIHtcblx0XHRzRW50aXR5U2V0UGF0aCA9IGdldFRhcmdldE9iamVjdFBhdGgocmVzb2x2ZWRUYXJnZXQuY29udmVydGVyQ29udGV4dC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCksIGZhbHNlKTtcblx0fVxuXHRjb25zdCBhRm9ybUVsZW1lbnRzID0gaW5zZXJ0Q3VzdG9tRWxlbWVudHMoXG5cdFx0Z2V0Rm9ybUVsZW1lbnRzRnJvbUFubm90YXRpb25zKGZhY2V0RGVmaW5pdGlvbiwgY29udmVydGVyQ29udGV4dCksXG5cdFx0Z2V0Rm9ybUVsZW1lbnRzRnJvbU1hbmlmZXN0KGZhY2V0RGVmaW5pdGlvbiwgY29udmVydGVyQ29udGV4dCksXG5cdFx0eyBmb3JtYXRPcHRpb25zOiBPdmVycmlkZVR5cGUub3ZlcndyaXRlIH1cblx0KTtcblxuXHRhY3Rpb25zID0gYWN0aW9ucyAhPT0gdW5kZWZpbmVkID8gYWN0aW9ucy5maWx0ZXIoKGFjdGlvbikgPT4gYWN0aW9uLmZhY2V0TmFtZSA9PSBmYWNldERlZmluaXRpb24uZnVsbHlRdWFsaWZpZWROYW1lKSA6IFtdO1xuXHRpZiAoYWN0aW9ucy5sZW5ndGggPT09IDApIHtcblx0XHRhY3Rpb25zID0gdW5kZWZpbmVkO1xuXHR9XG5cblx0Y29uc3Qgb0FjdGlvblNob3dEZXRhaWxzOiBCYXNlQWN0aW9uID0ge1xuXHRcdGlkOiBnZXRGb3JtU3RhbmRhcmRBY3Rpb25CdXR0b25JRChzRm9ybUNvbnRhaW5lcklkLCBcIlNob3dIaWRlRGV0YWlsc1wiKSxcblx0XHRrZXk6IFwiU3RhbmRhcmRBY3Rpb246OlNob3dIaWRlRGV0YWlsc1wiLFxuXHRcdHRleHQ6IGNvbXBpbGVFeHByZXNzaW9uKFxuXHRcdFx0aWZFbHNlKFxuXHRcdFx0XHRlcXVhbChwYXRoSW5Nb2RlbChcInNob3dEZXRhaWxzXCIsIFwiaW50ZXJuYWxcIiksIHRydWUpLFxuXHRcdFx0XHRwYXRoSW5Nb2RlbChcIlRfQ09NTU9OX09CSkVDVF9QQUdFX0hJREVfRk9STV9DT05UQUlORVJfREVUQUlMU1wiLCBcInNhcC5mZS5pMThuXCIpLFxuXHRcdFx0XHRwYXRoSW5Nb2RlbChcIlRfQ09NTU9OX09CSkVDVF9QQUdFX1NIT1dfRk9STV9DT05UQUlORVJfREVUQUlMU1wiLCBcInNhcC5mZS5pMThuXCIpXG5cdFx0XHQpXG5cdFx0KSxcblx0XHR0eXBlOiBBY3Rpb25UeXBlLlNob3dGb3JtRGV0YWlscyxcblx0XHRwcmVzczogXCJGb3JtQ29udGFpbmVyUnVudGltZS50b2dnbGVEZXRhaWxzXCJcblx0fTtcblxuXHRpZiAoXG5cdFx0ZmFjZXREZWZpbml0aW9uLmFubm90YXRpb25zPy5VST8uUGFydE9mUHJldmlldz8udmFsdWVPZigpICE9PSBmYWxzZSAmJlxuXHRcdGFGb3JtRWxlbWVudHMuc29tZSgob0Zvcm1FbGVtZW50KSA9PiBvRm9ybUVsZW1lbnQuaXNQYXJ0T2ZQcmV2aWV3ID09PSBmYWxzZSlcblx0KSB7XG5cdFx0aWYgKGFjdGlvbnMgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0YWN0aW9ucy5wdXNoKG9BY3Rpb25TaG93RGV0YWlscyk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGFjdGlvbnMgPSBbb0FjdGlvblNob3dEZXRhaWxzXTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4ge1xuXHRcdGlkOiBzRm9ybUNvbnRhaW5lcklkLFxuXHRcdGZvcm1FbGVtZW50czogYUZvcm1FbGVtZW50cyxcblx0XHRhbm5vdGF0aW9uUGF0aDogc0Fubm90YXRpb25QYXRoLFxuXHRcdGlzVmlzaWJsZTogaXNWaXNpYmxlLFxuXHRcdGVudGl0eVNldDogc0VudGl0eVNldFBhdGgsXG5cdFx0YWN0aW9uczogYWN0aW9ucyxcblx0XHR1c2VTaW5nbGVUZXh0QXJlYUZpZWxkQXNOb3RlczogYWRkaXRpb25hbFNldHRpbmdzPy51c2VTaW5nbGVUZXh0QXJlYUZpZWxkQXNOb3Rlc1xuXHR9O1xufVxuXG5mdW5jdGlvbiBnZXRGb3JtQ29udGFpbmVyc0ZvckNvbGxlY3Rpb24oXG5cdGZhY2V0RGVmaW5pdGlvbjogQ29sbGVjdGlvbkZhY2V0VHlwZXMsXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pixcblx0YWN0aW9ucz86IEJhc2VBY3Rpb25bXSxcblx0YWRkaXRpb25hbFNldHRpbmdzPzogQWRkaXRpb25hbEZvcm1TZXR0aW5nc1xuKTogRm9ybUNvbnRhaW5lcltdIHtcblx0Y29uc3QgZm9ybUNvbnRhaW5lcnM6IEZvcm1Db250YWluZXJbXSA9IFtdO1xuXHRjb25zdCBmb3JtQ29udGFpbmVyU2V0dGluZ3MgPSB7XG5cdFx0dXNlU2luZ2xlVGV4dEFyZWFGaWVsZEFzTm90ZXM6IGFkZGl0aW9uYWxTZXR0aW5ncz8udXNlU2luZ2xlVGV4dEFyZWFGaWVsZEFzTm90ZXNcblx0fTtcblx0ZmFjZXREZWZpbml0aW9uLkZhY2V0cz8uZm9yRWFjaCgoZmFjZXQpID0+IHtcblx0XHQvLyBJZ25vcmUgbGV2ZWwgMyBjb2xsZWN0aW9uIGZhY2V0XG5cdFx0aWYgKGZhY2V0LiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5Db2xsZWN0aW9uRmFjZXQpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0Zm9ybUNvbnRhaW5lcnMucHVzaChnZXRGb3JtQ29udGFpbmVyKGZhY2V0IGFzIFJlZmVyZW5jZUZhY2V0VHlwZXMsIGNvbnZlcnRlckNvbnRleHQsIGFjdGlvbnMsIGZvcm1Db250YWluZXJTZXR0aW5ncykpO1xuXHR9KTtcblx0cmV0dXJuIGZvcm1Db250YWluZXJzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNSZWZlcmVuY2VGYWNldChmYWNldERlZmluaXRpb246IEZhY2V0VHlwZXMpOiBmYWNldERlZmluaXRpb24gaXMgUmVmZXJlbmNlRmFjZXRUeXBlcyB7XG5cdHJldHVybiBmYWNldERlZmluaXRpb24uJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLlJlZmVyZW5jZUZhY2V0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlRm9ybURlZmluaXRpb24oXG5cdGZhY2V0RGVmaW5pdGlvbjogRmllbGRHcm91cFR5cGUgfCBDb2xsZWN0aW9uRmFjZXQgfCBSZWZlcmVuY2VGYWNldCB8IHVuZGVmaW5lZCxcblx0aXNWaXNpYmxlOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbixcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+LFxuXHRhY3Rpb25zPzogQmFzZUFjdGlvbltdLFxuXHRhZGRpdGlvbmFsU2V0dGluZ3M/OiBBZGRpdGlvbmFsRm9ybVNldHRpbmdzXG4pOiBGb3JtRGVmaW5pdGlvbiB7XG5cdHN3aXRjaCAoZmFjZXREZWZpbml0aW9uPy4kVHlwZSkge1xuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuQ29sbGVjdGlvbkZhY2V0OlxuXHRcdFx0Ly8gS2VlcCBvbmx5IHZhbGlkIGNoaWxkcmVuXG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRpZDogZ2V0Rm9ybUlEKGZhY2V0RGVmaW5pdGlvbiksXG5cdFx0XHRcdHVzZUZvcm1Db250YWluZXJMYWJlbHM6IHRydWUsXG5cdFx0XHRcdGhhc0ZhY2V0c05vdFBhcnRPZlByZXZpZXc6IGZhY2V0RGVmaW5pdGlvbi5GYWNldHMuc29tZShcblx0XHRcdFx0XHQoY2hpbGRGYWNldCkgPT4gY2hpbGRGYWNldC5hbm5vdGF0aW9ucz8uVUk/LlBhcnRPZlByZXZpZXc/LnZhbHVlT2YoKSA9PT0gZmFsc2Vcblx0XHRcdFx0KSxcblx0XHRcdFx0Zm9ybUNvbnRhaW5lcnM6IGdldEZvcm1Db250YWluZXJzRm9yQ29sbGVjdGlvbihmYWNldERlZmluaXRpb24sIGNvbnZlcnRlckNvbnRleHQsIGFjdGlvbnMsIGFkZGl0aW9uYWxTZXR0aW5ncyksXG5cdFx0XHRcdGlzVmlzaWJsZTogaXNWaXNpYmxlXG5cdFx0XHR9O1xuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuUmVmZXJlbmNlRmFjZXQ6XG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRpZDogZ2V0Rm9ybUlEKGZhY2V0RGVmaW5pdGlvbiksXG5cdFx0XHRcdHVzZUZvcm1Db250YWluZXJMYWJlbHM6IGZhbHNlLFxuXHRcdFx0XHRoYXNGYWNldHNOb3RQYXJ0T2ZQcmV2aWV3OiBmYWNldERlZmluaXRpb24uYW5ub3RhdGlvbnM/LlVJPy5QYXJ0T2ZQcmV2aWV3Py52YWx1ZU9mKCkgPT09IGZhbHNlLFxuXHRcdFx0XHRmb3JtQ29udGFpbmVyczogW2dldEZvcm1Db250YWluZXIoZmFjZXREZWZpbml0aW9uLCBjb252ZXJ0ZXJDb250ZXh0LCBhY3Rpb25zLCBhZGRpdGlvbmFsU2V0dGluZ3MpXSxcblx0XHRcdFx0aXNWaXNpYmxlOiBpc1Zpc2libGVcblx0XHRcdH07XG5cdFx0ZGVmYXVsdDpcblx0XHRcdHRocm93IG5ldyBFcnJvcihcIkNhbm5vdCBjcmVhdGUgZm9ybSBiYXNlZCBvbiBSZWZlcmVuY2VVUkxGYWNldFwiKTtcblx0fVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O01BNENZQSxlQUFlLDBCQUFmQSxlQUFlO0lBQWZBLGVBQWU7SUFBZkEsZUFBZTtJQUFmQSxlQUFlO0lBQUEsT0FBZkEsZUFBZTtFQUFBO0VBQUFDLFFBQUEsQ0FBQUQsZUFBQSxHQUFBQSxlQUFBO0VBK0MzQjtBQUNBO0FBQ0E7QUFDQTtFQUNBLFNBQVNFLDhCQUE4QkEsQ0FBQSxFQUFzQjtJQUM1RCxPQUFPO01BQ05DLGFBQWEsRUFBRTtJQUNoQixDQUFDO0VBQ0Y7RUFFQSxTQUFTQyxvQkFBb0JBLENBQUNDLEtBQTZCLEVBQUVDLGlCQUFpQyxFQUFXO0lBQ3hHO0lBQ0EsT0FDQ0EsaUJBQWlCLEVBQUVDLE9BQU8sQ0FBQyxDQUFDLEtBQUssS0FBSyxJQUN0Q0YsS0FBSyxDQUFDRyxXQUFXLEVBQUVDLEVBQUUsRUFBRUMsYUFBYSxLQUFLQyxTQUFTLElBQ2xETixLQUFLLENBQUNHLFdBQVcsRUFBRUMsRUFBRSxFQUFFQyxhQUFhLENBQUNILE9BQU8sQ0FBQyxDQUFDLEtBQUssSUFBSTtFQUV6RDtFQUVBLFNBQVNLLDhCQUE4QkEsQ0FDdENDLGVBQW9DLEVBQ3BDQyxnQkFBeUQsRUFDL0I7SUFDMUIsTUFBTUMsWUFBcUMsR0FBRyxFQUFFO0lBQ2hELE1BQU1DLGNBQWMsR0FBR0YsZ0JBQWdCLENBQUNHLHVCQUF1QixDQUFDSixlQUFlLENBQUNLLE1BQU0sQ0FBQ0MsS0FBSyxDQUFDO0lBQzdGLE1BQU1DLGNBQXNGLEdBQUdKLGNBQWMsQ0FBQ0ssVUFNckc7SUFDVFAsZ0JBQWdCLEdBQUdFLGNBQWMsQ0FBQ0YsZ0JBQWdCO0lBRWxELFNBQVNRLDRCQUE0QkEsQ0FBQ2pCLEtBQTZCLEVBQUVDLGlCQUE0QyxFQUFRO01BQ3hILE1BQU1pQiw0QkFBNEIsR0FBR0MscUJBQXFCLENBQUNWLGdCQUFnQixFQUFFVCxLQUFLLENBQUM7TUFDbkYsSUFDQ0EsS0FBSyxDQUFDb0IsS0FBSyxvREFBeUMsSUFDcERwQixLQUFLLENBQUNvQixLQUFLLG1FQUF3RCxJQUNuRXBCLEtBQUssQ0FBQ29CLEtBQUsseURBQThDLElBQ3pELENBQUNDLG1DQUFtQyxDQUFDckIsS0FBSyxDQUFDLEVBQzFDO1FBQ0QsTUFBTXNCLFdBQVcsR0FBRztVQUNuQkMsR0FBRyxFQUFFQyxTQUFTLENBQUNDLHdCQUF3QixDQUFDekIsS0FBSyxDQUFDO1VBQzlDMEIsSUFBSSxFQUFFL0IsZUFBZSxDQUFDZ0MsVUFBVTtVQUNoQ0MsY0FBYyxFQUFFLEdBQUduQixnQkFBZ0IsQ0FBQ29CLCtCQUErQixDQUFDN0IsS0FBSyxDQUFDOEIsa0JBQWtCLENBQUMsR0FBRztVQUNoR0Msa0JBQWtCLEVBQUViLDRCQUE0QjtVQUNoRGMsYUFBYSxFQUFFbkMsOEJBQThCLENBQUMsQ0FBQztVQUMvQ29DLGVBQWUsRUFBRWxDLG9CQUFvQixDQUFDQyxLQUFLLEVBQUVDLGlCQUFpQjtRQUMvRCxDQUFDO1FBQ0QsSUFDQ0QsS0FBSyxDQUFDb0IsS0FBSyxLQUFLLG1EQUFtRCxJQUNuRXBCLEtBQUssQ0FBQ2EsTUFBTSxDQUFDcUIsT0FBTyxFQUFFZCxLQUFLLEtBQUssZ0RBQWdELEVBQy9FO1VBQ0QsTUFBTWUsZUFBZSxHQUFHQyxNQUFNLENBQUNDLE1BQU0sQ0FBQ3JDLEtBQUssQ0FBQ2EsTUFBTSxDQUFDcUIsT0FBTyxDQUFDSSxJQUFJLENBQUMsQ0FBQ0MsTUFBTSxDQUNyRUMsY0FBdUIsSUFBTUEsY0FBYyxFQUE2QkMsY0FBYyxDQUFDLE9BQU8sQ0FDaEcsQ0FBNkI7VUFDNUJuQixXQUFXLENBQTJCYSxlQUFlLEdBQUdBLGVBQWUsQ0FBQ08sR0FBRyxDQUFFQyxzQkFBc0IsSUFBSztZQUN4RyxPQUFPO2NBQUVaLGtCQUFrQixFQUFFWixxQkFBcUIsQ0FBQ1YsZ0JBQWdCLEVBQUVrQyxzQkFBc0I7WUFBRSxDQUFDO1VBQy9GLENBQUMsQ0FBQztRQUNIO1FBQ0FqQyxZQUFZLENBQUNrQyxJQUFJLENBQUN0QixXQUFXLENBQUM7TUFDL0I7SUFDRDtJQUVBLFFBQVFQLGNBQWMsRUFBRThCLElBQUk7TUFDM0I7UUFDQzlCLGNBQWMsQ0FBQ3VCLElBQUksQ0FBQ1EsT0FBTyxDQUFFOUMsS0FBSyxJQUFLaUIsNEJBQTRCLENBQUNqQixLQUFLLEVBQUVRLGVBQWUsQ0FBQ0wsV0FBVyxFQUFFQyxFQUFFLEVBQUVDLGFBQWEsQ0FBQyxDQUFDO1FBQzNIO01BQ0Q7UUFDQ1UsY0FBYyxDQUFDK0IsT0FBTyxDQUFFOUMsS0FBSyxJQUFLaUIsNEJBQTRCLENBQUNqQixLQUFLLEVBQUVRLGVBQWUsQ0FBQ0wsV0FBVyxFQUFFQyxFQUFFLEVBQUVDLGFBQWEsQ0FBQyxDQUFDO1FBQ3RIO01BQ0Q7UUFDQ0ssWUFBWSxDQUFDa0MsSUFBSSxDQUFDO1VBQ2pCO1VBQ0FyQixHQUFHLEVBQUUsY0FBY1IsY0FBYyxDQUFDZ0MsU0FBUyxHQUFHaEMsY0FBYyxDQUFDZ0MsU0FBUyxHQUFHLEVBQUUsRUFBRTtVQUM3RXJCLElBQUksRUFBRS9CLGVBQWUsQ0FBQ2dDLFVBQVU7VUFDaENDLGNBQWMsRUFBRSxHQUFHbkIsZ0JBQWdCLENBQUNvQiwrQkFBK0IsQ0FBQ2QsY0FBYyxDQUFDZSxrQkFBa0IsQ0FBQztRQUN2RyxDQUFDLENBQUM7UUFDRjtNQUNEO1FBQ0NwQixZQUFZLENBQUNrQyxJQUFJLENBQUM7VUFDakJyQixHQUFHLEVBQUUsZ0JBQWdCUixjQUFjLENBQUNnQyxTQUFTLEdBQUdoQyxjQUFjLENBQUNnQyxTQUFTLEdBQUcsRUFBRSxFQUFFO1VBQy9FckIsSUFBSSxFQUFFL0IsZUFBZSxDQUFDZ0MsVUFBVTtVQUNoQ0MsY0FBYyxFQUFFLEdBQUduQixnQkFBZ0IsQ0FBQ29CLCtCQUErQixDQUFDZCxjQUFjLENBQUNlLGtCQUFrQixDQUFDO1FBQ3ZHLENBQUMsQ0FBQztRQUNGO01BQ0Q7UUFDQ3BCLFlBQVksQ0FBQ2tDLElBQUksQ0FBQztVQUNqQnJCLEdBQUcsRUFBRSxXQUFXUixjQUFjLENBQUNnQyxTQUFTLEdBQUdoQyxjQUFjLENBQUNnQyxTQUFTLEdBQUcsRUFBRSxFQUFFO1VBQzFFckIsSUFBSSxFQUFFL0IsZUFBZSxDQUFDZ0MsVUFBVTtVQUNoQ0MsY0FBYyxFQUFFLEdBQUduQixnQkFBZ0IsQ0FBQ29CLCtCQUErQixDQUFDZCxjQUFjLENBQUNlLGtCQUFrQixDQUFDO1FBQ3ZHLENBQUMsQ0FBQztRQUNGO01BQ0Q7UUFDQ3BCLFlBQVksQ0FBQ2tDLElBQUksQ0FBQztVQUNqQjtVQUNBckIsR0FBRyxFQUFFLFlBQVlSLGNBQWMsQ0FBQ2dDLFNBQVMsR0FBR2hDLGNBQWMsQ0FBQ2dDLFNBQVMsR0FBRyxFQUFFLEVBQUU7VUFDM0VyQixJQUFJLEVBQUUvQixlQUFlLENBQUNnQyxVQUFVO1VBQ2hDQyxjQUFjLEVBQUUsR0FBR25CLGdCQUFnQixDQUFDb0IsK0JBQStCLENBQUNkLGNBQWMsQ0FBQ2Usa0JBQWtCLENBQUM7UUFDdkcsQ0FBQyxDQUFDO1FBQ0Y7TUFDRDtRQUNDO0lBQ0Y7SUFDQSxPQUFPcEIsWUFBWTtFQUNwQjtFQUVPLFNBQVNzQywyQkFBMkJBLENBQzFDeEMsZUFBb0MsRUFDcENDLGdCQUF5RCxFQUNyQjtJQUNwQyxNQUFNd0MsZUFBZSxHQUFHeEMsZ0JBQWdCLENBQUN5QyxrQkFBa0IsQ0FBQyxDQUFDO0lBQzdELE1BQU1DLHFCQUFnRCxHQUFHRixlQUFlLENBQUNHLGdCQUFnQixDQUFDNUMsZUFBZSxDQUFDSyxNQUFNLENBQUNDLEtBQUssQ0FBQztJQUN2SCxNQUFNSixZQUErQyxHQUFHLENBQUMsQ0FBQztJQUMxRCxJQUFJeUMscUJBQXFCLEVBQUVFLE1BQU0sRUFBRTtNQUNsQ2pCLE1BQU0sQ0FBQ2tCLElBQUksQ0FBQ0gscUJBQXFCLEVBQUVFLE1BQU0sQ0FBQyxDQUFDUCxPQUFPLENBQUVTLE9BQU8sSUFBSztRQUMvRDdDLFlBQVksQ0FBQzZDLE9BQU8sQ0FBQyxHQUFHO1VBQ3ZCaEMsR0FBRyxFQUFFZ0MsT0FBTztVQUNaQyxFQUFFLEVBQUUsc0JBQXNCRCxPQUFPLEVBQUU7VUFDbkM3QixJQUFJLEVBQUV5QixxQkFBcUIsQ0FBQ0UsTUFBTSxDQUFDRSxPQUFPLENBQUMsQ0FBQzdCLElBQUksSUFBSS9CLGVBQWUsQ0FBQzhELE9BQU87VUFDM0VDLFFBQVEsRUFBRVAscUJBQXFCLENBQUNFLE1BQU0sQ0FBQ0UsT0FBTyxDQUFDLENBQUNHLFFBQVE7VUFDeERDLFlBQVksRUFBRVIscUJBQXFCLENBQUNFLE1BQU0sQ0FBQ0UsT0FBTyxDQUFDLEVBQUVLLFFBQVE7VUFDN0RDLEtBQUssRUFBRXBELGdCQUFnQixDQUFDcUQsc0JBQXNCLENBQUNYLHFCQUFxQixDQUFDRSxNQUFNLENBQUNFLE9BQU8sQ0FBQyxDQUFDTSxLQUFLLENBQUM7VUFDM0ZFLFFBQVEsRUFBRVoscUJBQXFCLENBQUNFLE1BQU0sQ0FBQ0UsT0FBTyxDQUFDLENBQUNRLFFBQVEsSUFBSTtZQUMzREMsU0FBUyxFQUFFQyxTQUFTLENBQUNDO1VBQ3RCLENBQUM7VUFDRGxDLGFBQWEsRUFBRTtZQUNkLEdBQUduQyw4QkFBOEIsQ0FBQyxDQUFDO1lBQ25DLEdBQUdzRCxxQkFBcUIsQ0FBQ0UsTUFBTSxDQUFDRSxPQUFPLENBQUMsQ0FBQ3ZCO1VBQzFDO1FBQ0QsQ0FBQztNQUNGLENBQUMsQ0FBQztJQUNIO0lBQ0EsT0FBT3RCLFlBQVk7RUFDcEI7RUFBQ2QsUUFBQSxDQUFBb0QsMkJBQUEsR0FBQUEsMkJBQUE7RUFFTSxTQUFTSSxnQkFBZ0JBLENBQy9CNUMsZUFBb0MsRUFDcENDLGdCQUF5RCxFQUN6RDBELE9BQXNCLEVBQ3RCQyxrQkFBMkMsRUFDM0I7SUFDaEIsTUFBTUMsZ0JBQWdCLEdBQUdDLHFCQUFxQixDQUFDOUQsZUFBZSxDQUFXO0lBQ3pFLE1BQU0rRCxlQUFlLEdBQUc5RCxnQkFBZ0IsQ0FBQ29CLCtCQUErQixDQUFDckIsZUFBZSxDQUFDc0Isa0JBQWtCLENBQUM7SUFDNUcsTUFBTW5CLGNBQWMsR0FBR0YsZ0JBQWdCLENBQUNHLHVCQUF1QixDQUFDSixlQUFlLENBQUNLLE1BQU0sQ0FBQ0MsS0FBSyxDQUFDO0lBQzdGLE1BQU0wRCxTQUFTLEdBQUdDLGlCQUFpQixDQUFDQyxHQUFHLENBQUNDLEtBQUssQ0FBQyxJQUFJLEVBQUVDLDJCQUEyQixDQUFDcEUsZUFBZSxDQUFDTCxXQUFXLEVBQUVDLEVBQUUsRUFBRXlFLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMzSCxJQUFJQyxjQUF1QjtJQUMzQjtJQUNBLE1BQU1DLFNBQVMsR0FBR3BFLGNBQWMsQ0FBQ0YsZ0JBQWdCLENBQUN1RSxZQUFZLENBQUMsQ0FBQztJQUNoRSxNQUFNQyx5QkFBeUIsR0FBR3RFLGNBQWMsQ0FBQ0YsZ0JBQWdCLENBQUN5RSxzQkFBc0IsQ0FBQyxDQUFDLENBQUNDLFlBQVk7SUFDdkcsSUFBSUosU0FBUyxJQUFJQSxTQUFTLEtBQUt0RSxnQkFBZ0IsQ0FBQ3VFLFlBQVksQ0FBQyxDQUFDLEVBQUU7TUFDL0RGLGNBQWMsR0FBR00sc0JBQXNCLENBQUN6RSxjQUFjLENBQUNGLGdCQUFnQixDQUFDeUUsc0JBQXNCLENBQUMsQ0FBQyxDQUFDO0lBQ2xHLENBQUMsTUFBTSxJQUFJRyxvQkFBb0IsQ0FBQ0oseUJBQXlCLENBQUMsSUFBSUEseUJBQXlCLEVBQUVLLGNBQWMsS0FBSyxJQUFJLEVBQUU7TUFDakhSLGNBQWMsR0FBR1MsbUJBQW1CLENBQUM1RSxjQUFjLENBQUNGLGdCQUFnQixDQUFDeUUsc0JBQXNCLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQztJQUN0RyxDQUFDLE1BQU0sSUFBSUgsU0FBUyxJQUFJLENBQUNELGNBQWMsSUFBSVUsV0FBVyxDQUFDVCxTQUFTLENBQUMsRUFBRTtNQUNsRUQsY0FBYyxHQUFHQyxTQUFTLENBQUNqRCxrQkFBa0I7SUFDOUMsQ0FBQyxNQUFNLElBQUksQ0FBQ2lELFNBQVMsSUFBSU0sb0JBQW9CLENBQUNKLHlCQUF5QixDQUFDLElBQUlBLHlCQUF5QixFQUFFSyxjQUFjLEtBQUssS0FBSyxFQUFFO01BQ2hJUixjQUFjLEdBQUdTLG1CQUFtQixDQUFDNUUsY0FBYyxDQUFDRixnQkFBZ0IsQ0FBQ3lFLHNCQUFzQixDQUFDLENBQUMsRUFBRSxLQUFLLENBQUM7SUFDdEc7SUFDQSxNQUFNTyxhQUFhLEdBQUdDLG9CQUFvQixDQUN6Q25GLDhCQUE4QixDQUFDQyxlQUFlLEVBQUVDLGdCQUFnQixDQUFDLEVBQ2pFdUMsMkJBQTJCLENBQUN4QyxlQUFlLEVBQUVDLGdCQUFnQixDQUFDLEVBQzlEO01BQUV1QixhQUFhLEVBQUUyRCxZQUFZLENBQUNDO0lBQVUsQ0FDekMsQ0FBQztJQUVEekIsT0FBTyxHQUFHQSxPQUFPLEtBQUs3RCxTQUFTLEdBQUc2RCxPQUFPLENBQUM1QixNQUFNLENBQUVzRCxNQUFNLElBQUtBLE1BQU0sQ0FBQ0MsU0FBUyxJQUFJdEYsZUFBZSxDQUFDc0Isa0JBQWtCLENBQUMsR0FBRyxFQUFFO0lBQ3pILElBQUlxQyxPQUFPLENBQUM0QixNQUFNLEtBQUssQ0FBQyxFQUFFO01BQ3pCNUIsT0FBTyxHQUFHN0QsU0FBUztJQUNwQjtJQUVBLE1BQU0wRixrQkFBOEIsR0FBRztNQUN0Q3hDLEVBQUUsRUFBRXlDLDZCQUE2QixDQUFDNUIsZ0JBQWdCLEVBQUUsaUJBQWlCLENBQUM7TUFDdEU5QyxHQUFHLEVBQUUsaUNBQWlDO01BQ3RDMkUsSUFBSSxFQUFFekIsaUJBQWlCLENBQ3RCMEIsTUFBTSxDQUNMeEIsS0FBSyxDQUFDeUIsV0FBVyxDQUFDLGFBQWEsRUFBRSxVQUFVLENBQUMsRUFBRSxJQUFJLENBQUMsRUFDbkRBLFdBQVcsQ0FBQyxrREFBa0QsRUFBRSxhQUFhLENBQUMsRUFDOUVBLFdBQVcsQ0FBQyxrREFBa0QsRUFBRSxhQUFhLENBQzlFLENBQ0QsQ0FBQztNQUNEMUUsSUFBSSxFQUFFMkUsVUFBVSxDQUFDQyxlQUFlO01BQ2hDQyxLQUFLLEVBQUU7SUFDUixDQUFDO0lBRUQsSUFDQy9GLGVBQWUsQ0FBQ0wsV0FBVyxFQUFFQyxFQUFFLEVBQUVDLGFBQWEsRUFBRUgsT0FBTyxDQUFDLENBQUMsS0FBSyxLQUFLLElBQ25FdUYsYUFBYSxDQUFDZSxJQUFJLENBQUVDLFlBQVksSUFBS0EsWUFBWSxDQUFDeEUsZUFBZSxLQUFLLEtBQUssQ0FBQyxFQUMzRTtNQUNELElBQUlrQyxPQUFPLEtBQUs3RCxTQUFTLEVBQUU7UUFDMUI2RCxPQUFPLENBQUN2QixJQUFJLENBQUNvRCxrQkFBa0IsQ0FBQztNQUNqQyxDQUFDLE1BQU07UUFDTjdCLE9BQU8sR0FBRyxDQUFDNkIsa0JBQWtCLENBQUM7TUFDL0I7SUFDRDtJQUVBLE9BQU87TUFDTnhDLEVBQUUsRUFBRWEsZ0JBQWdCO01BQ3BCM0QsWUFBWSxFQUFFK0UsYUFBYTtNQUMzQjdELGNBQWMsRUFBRTJDLGVBQWU7TUFDL0JDLFNBQVMsRUFBRUEsU0FBUztNQUNwQk8sU0FBUyxFQUFFRCxjQUFjO01BQ3pCWCxPQUFPLEVBQUVBLE9BQU87TUFDaEJ1Qyw2QkFBNkIsRUFBRXRDLGtCQUFrQixFQUFFc0M7SUFDcEQsQ0FBQztFQUNGO0VBQUM5RyxRQUFBLENBQUF3RCxnQkFBQSxHQUFBQSxnQkFBQTtFQUVELFNBQVN1RCw4QkFBOEJBLENBQ3RDbkcsZUFBcUMsRUFDckNDLGdCQUF5RCxFQUN6RDBELE9BQXNCLEVBQ3RCQyxrQkFBMkMsRUFDekI7SUFDbEIsTUFBTXdDLGNBQStCLEdBQUcsRUFBRTtJQUMxQyxNQUFNQyxxQkFBcUIsR0FBRztNQUM3QkgsNkJBQTZCLEVBQUV0QyxrQkFBa0IsRUFBRXNDO0lBQ3BELENBQUM7SUFDRGxHLGVBQWUsQ0FBQ3NHLE1BQU0sRUFBRWhFLE9BQU8sQ0FBRWlFLEtBQUssSUFBSztNQUMxQztNQUNBLElBQUlBLEtBQUssQ0FBQzNGLEtBQUssaURBQXNDLEVBQUU7UUFDdEQ7TUFDRDtNQUNBd0YsY0FBYyxDQUFDaEUsSUFBSSxDQUFDUSxnQkFBZ0IsQ0FBQzJELEtBQUssRUFBeUJ0RyxnQkFBZ0IsRUFBRTBELE9BQU8sRUFBRTBDLHFCQUFxQixDQUFDLENBQUM7SUFDdEgsQ0FBQyxDQUFDO0lBQ0YsT0FBT0QsY0FBYztFQUN0QjtFQUVPLFNBQVNJLGdCQUFnQkEsQ0FBQ3hHLGVBQTJCLEVBQTBDO0lBQ3JHLE9BQU9BLGVBQWUsQ0FBQ1ksS0FBSyxnREFBcUM7RUFDbEU7RUFBQ3hCLFFBQUEsQ0FBQW9ILGdCQUFBLEdBQUFBLGdCQUFBO0VBRU0sU0FBU0Msb0JBQW9CQSxDQUNuQ3pHLGVBQThFLEVBQzlFZ0UsU0FBMkMsRUFDM0MvRCxnQkFBeUQsRUFDekQwRCxPQUFzQixFQUN0QkMsa0JBQTJDLEVBQzFCO0lBQ2pCLFFBQVE1RCxlQUFlLEVBQUVZLEtBQUs7TUFDN0I7UUFDQztRQUNBLE9BQU87VUFDTm9DLEVBQUUsRUFBRTBELFNBQVMsQ0FBQzFHLGVBQWUsQ0FBQztVQUM5QjJHLHNCQUFzQixFQUFFLElBQUk7VUFDNUJDLHlCQUF5QixFQUFFNUcsZUFBZSxDQUFDc0csTUFBTSxDQUFDTixJQUFJLENBQ3BEYSxVQUFVLElBQUtBLFVBQVUsQ0FBQ2xILFdBQVcsRUFBRUMsRUFBRSxFQUFFQyxhQUFhLEVBQUVILE9BQU8sQ0FBQyxDQUFDLEtBQUssS0FDMUUsQ0FBQztVQUNEMEcsY0FBYyxFQUFFRCw4QkFBOEIsQ0FBQ25HLGVBQWUsRUFBRUMsZ0JBQWdCLEVBQUUwRCxPQUFPLEVBQUVDLGtCQUFrQixDQUFDO1VBQzlHSSxTQUFTLEVBQUVBO1FBQ1osQ0FBQztNQUNGO1FBQ0MsT0FBTztVQUNOaEIsRUFBRSxFQUFFMEQsU0FBUyxDQUFDMUcsZUFBZSxDQUFDO1VBQzlCMkcsc0JBQXNCLEVBQUUsS0FBSztVQUM3QkMseUJBQXlCLEVBQUU1RyxlQUFlLENBQUNMLFdBQVcsRUFBRUMsRUFBRSxFQUFFQyxhQUFhLEVBQUVILE9BQU8sQ0FBQyxDQUFDLEtBQUssS0FBSztVQUM5RjBHLGNBQWMsRUFBRSxDQUFDeEQsZ0JBQWdCLENBQUM1QyxlQUFlLEVBQUVDLGdCQUFnQixFQUFFMEQsT0FBTyxFQUFFQyxrQkFBa0IsQ0FBQyxDQUFDO1VBQ2xHSSxTQUFTLEVBQUVBO1FBQ1osQ0FBQztNQUNGO1FBQ0MsTUFBTSxJQUFJOEMsS0FBSyxDQUFDLCtDQUErQyxDQUFDO0lBQ2xFO0VBQ0Q7RUFBQzFILFFBQUEsQ0FBQXFILG9CQUFBLEdBQUFBLG9CQUFBO0VBQUEsT0FBQXJILFFBQUE7QUFBQSIsImlnbm9yZUxpc3QiOltdfQ==
247
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJGb3JtRWxlbWVudFR5cGUiLCJfZXhwb3J0cyIsImdldERlZmF1bHRGb3JtYXRPcHRpb25zRm9yRm9ybSIsInRleHRMaW5lc0VkaXQiLCJpc0ZpZWxkUGFydE9mUHJldmlldyIsImZpZWxkIiwiZm9ybVBhcnRPZlByZXZpZXciLCJ2YWx1ZU9mIiwiYW5ub3RhdGlvbnMiLCJVSSIsIlBhcnRPZlByZXZpZXciLCJ1bmRlZmluZWQiLCJnZXRGb3JtRWxlbWVudHNGcm9tQW5ub3RhdGlvbnMiLCJmYWNldERlZmluaXRpb24iLCJjb252ZXJ0ZXJDb250ZXh0IiwiZm9ybUVsZW1lbnRzIiwicmVzb2x2ZWRUYXJnZXQiLCJnZXRFbnRpdHlUeXBlQW5ub3RhdGlvbiIsIlRhcmdldCIsInZhbHVlIiwiZm9ybUFubm90YXRpb24iLCJhbm5vdGF0aW9uIiwiZ2V0RGF0YUZpZWxkc0Zyb21Bbm5vdGF0aW9ucyIsInNlbWFudGljT2JqZWN0QW5ub3RhdGlvblBhdGgiLCJnZXRTZW1hbnRpY09iamVjdFBhdGgiLCIkVHlwZSIsImlzUmVmZXJlbmNlUHJvcGVydHlTdGF0aWNhbGx5SGlkZGVuIiwiZm9ybUVsZW1lbnQiLCJrZXkiLCJLZXlIZWxwZXIiLCJnZW5lcmF0ZUtleUZyb21EYXRhRmllbGQiLCJ0eXBlIiwiQW5ub3RhdGlvbiIsImFubm90YXRpb25QYXRoIiwiZ2V0RW50aXR5U2V0QmFzZWRBbm5vdGF0aW9uUGF0aCIsImZ1bGx5UXVhbGlmaWVkTmFtZSIsInNlbWFudGljT2JqZWN0UGF0aCIsImZvcm1hdE9wdGlvbnMiLCJpc1BhcnRPZlByZXZpZXciLCIkdGFyZ2V0IiwiY29ubmVjdGVkRmllbGRzIiwiT2JqZWN0IiwidmFsdWVzIiwiRGF0YSIsImZpbHRlciIsImNvbm5lY3RlZEZpZWxkIiwiaGFzT3duUHJvcGVydHkiLCJtYXAiLCJjb25ubmVjdGVkRmllbGRFbGVtZW50IiwicHVzaCIsInRlcm0iLCJmb3JFYWNoIiwicXVhbGlmaWVyIiwiZ2V0Rm9ybUVsZW1lbnRzRnJvbU1hbmlmZXN0IiwibWFuaWZlc3RXcmFwcGVyIiwiZ2V0TWFuaWZlc3RXcmFwcGVyIiwibWFuaWZlc3RGb3JtQ29udGFpbmVyIiwiZ2V0Rm9ybUNvbnRhaW5lciIsImZpZWxkcyIsImtleXMiLCJmaWVsZElkIiwiaWQiLCJEZWZhdWx0IiwidGVtcGxhdGUiLCJwcm9wZXJ0eVBhdGgiLCJwcm9wZXJ0eSIsImxhYmVsIiwiZmV0Y2hUZXh0RnJvbU1ldGFNb2RlbCIsInBvc2l0aW9uIiwicGxhY2VtZW50IiwiUGxhY2VtZW50IiwiQWZ0ZXIiLCJyZWFkT25seSIsInNlbWFudGljT2JqZWN0IiwiYWN0aW9ucyIsImFkZGl0aW9uYWxTZXR0aW5ncyIsInNGb3JtQ29udGFpbmVySWQiLCJjcmVhdGVJZEZvckFubm90YXRpb24iLCJzQW5ub3RhdGlvblBhdGgiLCJpc1Zpc2libGUiLCJjb21waWxlRXhwcmVzc2lvbiIsIm5vdCIsImVxdWFsIiwiZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uIiwiSGlkZGVuIiwic0VudGl0eVNldFBhdGgiLCJlbnRpdHlTZXQiLCJnZXRFbnRpdHlTZXQiLCJkYXRhTW9kZWxPYmplY3RQYXRoVGFyZ2V0IiwiZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCIsInRhcmdldE9iamVjdCIsImdldFRhcmdldEVudGl0eVNldFBhdGgiLCJpc05hdmlnYXRpb25Qcm9wZXJ0eSIsImNvbnRhaW5zVGFyZ2V0IiwiZ2V0VGFyZ2V0T2JqZWN0UGF0aCIsImlzU2luZ2xldG9uIiwiYUZvcm1FbGVtZW50cyIsImluc2VydEN1c3RvbUVsZW1lbnRzIiwiT3ZlcnJpZGVUeXBlIiwib3ZlcndyaXRlIiwiYWN0aW9uIiwiZmFjZXROYW1lIiwibGVuZ3RoIiwib0FjdGlvblNob3dEZXRhaWxzIiwiZ2V0Rm9ybVN0YW5kYXJkQWN0aW9uQnV0dG9uSUQiLCJ0ZXh0IiwiaWZFbHNlIiwicGF0aEluTW9kZWwiLCJBY3Rpb25UeXBlIiwiU2hvd0Zvcm1EZXRhaWxzIiwicHJlc3MiLCJzb21lIiwib0Zvcm1FbGVtZW50IiwidXNlU2luZ2xlVGV4dEFyZWFGaWVsZEFzTm90ZXMiLCJhbm5vdGF0aW9uSGlkZGVuIiwiZ2V0Rm9ybUNvbnRhaW5lcnNGb3JDb2xsZWN0aW9uIiwiZm9ybUNvbnRhaW5lcnMiLCJmb3JtQ29udGFpbmVyU2V0dGluZ3MiLCJGYWNldHMiLCJmYWNldCIsImlzUmVmZXJlbmNlRmFjZXQiLCJjcmVhdGVGb3JtRGVmaW5pdGlvbiIsImdldEZvcm1JRCIsInVzZUZvcm1Db250YWluZXJMYWJlbHMiLCJoYXNGYWNldHNOb3RQYXJ0T2ZQcmV2aWV3IiwiY2hpbGRGYWNldCIsIkVycm9yIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJGb3JtLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgTWFza2VkIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9Db21tb25cIjtcbmltcG9ydCB7IENvbW1vbkFubm90YXRpb25UZXJtcyB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvQ29tbW9uXCI7XG5pbXBvcnQgdHlwZSB7IENvbnRhY3QgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL0NvbW11bmljYXRpb25cIjtcbmltcG9ydCB7IENvbW11bmljYXRpb25Bbm5vdGF0aW9uVGVybXMgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL0NvbW11bmljYXRpb25cIjtcbmltcG9ydCB0eXBlIHtcblx0Q29sbGVjdGlvbkZhY2V0LFxuXHRDb2xsZWN0aW9uRmFjZXRUeXBlcyxcblx0RGF0YUZpZWxkQWJzdHJhY3RUeXBlcyxcblx0RGF0YVBvaW50LFxuXHRGYWNldFR5cGVzLFxuXHRGaWVsZEdyb3VwLFxuXHRGaWVsZEdyb3VwVHlwZSxcblx0SWRlbnRpZmljYXRpb24sXG5cdElucHV0TWFzayxcblx0UGFydE9mUHJldmlldyxcblx0UmVmZXJlbmNlRmFjZXQsXG5cdFJlZmVyZW5jZUZhY2V0VHlwZXNcbn0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9VSVwiO1xuaW1wb3J0IHsgVUlBbm5vdGF0aW9uVGVybXMsIFVJQW5ub3RhdGlvblR5cGVzIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9VSVwiO1xuaW1wb3J0IHR5cGUgeyBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB9IGZyb20gXCJzYXAvZmUvYmFzZS9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0IHsgY29tcGlsZUV4cHJlc3Npb24sIGVxdWFsLCBnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24sIGlmRWxzZSwgbm90LCBwYXRoSW5Nb2RlbCB9IGZyb20gXCJzYXAvZmUvYmFzZS9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0IHR5cGUgeyBQYWdlQ29udGV4dFBhdGhUYXJnZXQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9UZW1wbGF0ZUNvbnZlcnRlclwiO1xuaW1wb3J0IHsgZ2V0U2VtYW50aWNPYmplY3RQYXRoIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvYW5ub3RhdGlvbnMvRGF0YUZpZWxkXCI7XG5pbXBvcnQgdHlwZSB7IEJhc2VBY3Rpb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9Db21tb24vQWN0aW9uXCI7XG5pbXBvcnQgeyBpc05hdmlnYXRpb25Qcm9wZXJ0eSwgaXNTaW5nbGV0b24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9UeXBlR3VhcmRzXCI7XG5pbXBvcnQgeyBnZXRUYXJnZXRFbnRpdHlTZXRQYXRoLCBnZXRUYXJnZXRPYmplY3RQYXRoIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvRGF0YU1vZGVsUGF0aEhlbHBlclwiO1xuaW1wb3J0IHsgY3JlYXRlSWRGb3JBbm5vdGF0aW9uIH0gZnJvbSBcIi4uLy4uLy4uL2hlbHBlcnMvU3RhYmxlSWRIZWxwZXJcIjtcbmltcG9ydCB0eXBlIENvbnZlcnRlckNvbnRleHQgZnJvbSBcIi4uLy4uL0NvbnZlcnRlckNvbnRleHRcIjtcbmltcG9ydCB0eXBlIHsgRm9ybU1hbmlmZXN0Q29uZmlndXJhdGlvbiwgRm9ybWF0T3B0aW9uc1R5cGUgfSBmcm9tIFwiLi4vLi4vTWFuaWZlc3RTZXR0aW5nc1wiO1xuaW1wb3J0IHsgQWN0aW9uVHlwZSB9IGZyb20gXCIuLi8uLi9NYW5pZmVzdFNldHRpbmdzXCI7XG5pbXBvcnQgdHlwZSB7IENvbmZpZ3VyYWJsZU9iamVjdCwgQ3VzdG9tRWxlbWVudCB9IGZyb20gXCIuLi8uLi9oZWxwZXJzL0NvbmZpZ3VyYWJsZU9iamVjdFwiO1xuaW1wb3J0IHsgT3ZlcnJpZGVUeXBlLCBQbGFjZW1lbnQsIGluc2VydEN1c3RvbUVsZW1lbnRzIH0gZnJvbSBcIi4uLy4uL2hlbHBlcnMvQ29uZmlndXJhYmxlT2JqZWN0XCI7XG5pbXBvcnQgeyBpc1JlZmVyZW5jZVByb3BlcnR5U3RhdGljYWxseUhpZGRlbiB9IGZyb20gXCIuLi8uLi9oZWxwZXJzL0RhdGFGaWVsZEhlbHBlclwiO1xuaW1wb3J0IHsgZ2V0Rm9ybUlELCBnZXRGb3JtU3RhbmRhcmRBY3Rpb25CdXR0b25JRCB9IGZyb20gXCIuLi8uLi9oZWxwZXJzL0lEXCI7XG5pbXBvcnQgeyBLZXlIZWxwZXIgfSBmcm9tIFwiLi4vLi4vaGVscGVycy9LZXlcIjtcblxuZXhwb3J0IHR5cGUgRm9ybURlZmluaXRpb24gPSB7XG5cdGlkOiBzdHJpbmc7XG5cdHVzZUZvcm1Db250YWluZXJMYWJlbHM6IGJvb2xlYW47XG5cdGhhc0ZhY2V0c05vdFBhcnRPZlByZXZpZXc6IGJvb2xlYW47XG5cdGZvcm1Db250YWluZXJzOiBGb3JtQ29udGFpbmVyW107XG5cdGlzVmlzaWJsZTogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb247XG59O1xuXG5leHBvcnQgZW51bSBGb3JtRWxlbWVudFR5cGUge1xuXHREZWZhdWx0ID0gXCJEZWZhdWx0XCIsXG5cdFNsb3QgPSBcIlNsb3RcIixcblx0QW5ub3RhdGlvbiA9IFwiQW5ub3RhdGlvblwiXG59XG5cbmV4cG9ydCB0eXBlIEJhc2VGb3JtRWxlbWVudCA9IENvbmZpZ3VyYWJsZU9iamVjdCAmIHtcblx0aWQ/OiBzdHJpbmc7XG5cdHR5cGU6IEZvcm1FbGVtZW50VHlwZTtcblx0bGFiZWw/OiBzdHJpbmc7XG5cdHZpc2libGU/OiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjtcblx0Zm9ybWF0T3B0aW9ucz86IEZvcm1hdE9wdGlvbnNUeXBlO1xuXHRyZWFkT25seT86IGJvb2xlYW47XG5cdHNlbWFudGljT2JqZWN0Pzogc3RyaW5nO1xufTtcblxuZXhwb3J0IHR5cGUgQW5ub3RhdGlvbkZvcm1FbGVtZW50ID0gQmFzZUZvcm1FbGVtZW50ICYge1xuXHRpZFByZWZpeD86IHN0cmluZztcblx0YW5ub3RhdGlvblBhdGg/OiBzdHJpbmc7XG5cdGlzVmFsdWVNdWx0aWxpbmVUZXh0PzogYm9vbGVhbjtcblx0c2VtYW50aWNPYmplY3RQYXRoPzogc3RyaW5nO1xuXHRjb25uZWN0ZWRGaWVsZHM/OiB7IHNlbWFudGljT2JqZWN0UGF0aD86IHN0cmluZyB9W107XG5cdGlzUGFydE9mUHJldmlldz86IGJvb2xlYW47XG59O1xuXG5leHBvcnQgdHlwZSBDdXN0b21Gb3JtRWxlbWVudCA9IEN1c3RvbUVsZW1lbnQ8XG5cdEJhc2VGb3JtRWxlbWVudCAmIHtcblx0XHR0eXBlOiBGb3JtRWxlbWVudFR5cGU7XG5cdFx0dGVtcGxhdGU6IHN0cmluZztcblx0XHRwcm9wZXJ0eVBhdGg/OiBzdHJpbmc7XG5cdH1cbj47XG5cbmV4cG9ydCB0eXBlIEZvcm1FbGVtZW50ID0gQ3VzdG9tRm9ybUVsZW1lbnQgfCBBbm5vdGF0aW9uRm9ybUVsZW1lbnQ7XG5cbmV4cG9ydCB0eXBlIEFkZGl0aW9uYWxGb3JtU2V0dGluZ3MgPSB7XG5cdHVzZVNpbmdsZVRleHRBcmVhRmllbGRBc05vdGVzPzogYm9vbGVhbjtcbn07XG5cbmV4cG9ydCB0eXBlIEZvcm1Db250YWluZXIgPSB7XG5cdGlkPzogc3RyaW5nO1xuXHRmb3JtRWxlbWVudHM6IEZvcm1FbGVtZW50W107XG5cdGFubm90YXRpb25QYXRoOiBzdHJpbmc7XG5cdGlzVmlzaWJsZTogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb247XG5cdGFubm90YXRpb25IaWRkZW46IGJvb2xlYW47XG5cdGVudGl0eVNldD86IHN0cmluZztcblx0YWN0aW9ucz86IEJhc2VBY3Rpb25bXTtcblx0dXNlU2luZ2xlVGV4dEFyZWFGaWVsZEFzTm90ZXM/OiBib29sZWFuO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIGRlZmF1bHQgZm9ybWF0IG9wdGlvbnMgZm9yIHRleHQgZmllbGRzIG9uIGEgZm9ybS5cbiAqIEByZXR1cm5zIENvbGxlY3Rpb24gb2YgZm9ybWF0IG9wdGlvbnMgd2l0aCBkZWZhdWx0IHZhbHVlc1xuICovXG5mdW5jdGlvbiBnZXREZWZhdWx0Rm9ybWF0T3B0aW9uc0ZvckZvcm0oKTogRm9ybWF0T3B0aW9uc1R5cGUge1xuXHRyZXR1cm4ge1xuXHRcdHRleHRMaW5lc0VkaXQ6IDRcblx0fTtcbn1cblxuZnVuY3Rpb24gaXNGaWVsZFBhcnRPZlByZXZpZXcoZmllbGQ6IERhdGFGaWVsZEFic3RyYWN0VHlwZXMsIGZvcm1QYXJ0T2ZQcmV2aWV3PzogUGFydE9mUHJldmlldyk6IGJvb2xlYW4ge1xuXHQvLyBCb3RoIGVhY2ggZm9ybSBhbmQgZmllbGQgY2FuIGhhdmUgdGhlIFBhcnRPZlByZXZpZXcgYW5ub3RhdGlvbi4gT25seSBpZiB0aGUgZm9ybSBpcyBub3QgaGlkZGVuIChub3QgcGFydE9mUHJldmlldykgd2UgYWxsb3cgdG9nZ2xpbmcgb24gZmllbGQgbGV2ZWxcblx0cmV0dXJuIChcblx0XHRmb3JtUGFydE9mUHJldmlldz8udmFsdWVPZigpID09PSBmYWxzZSB8fFxuXHRcdGZpZWxkLmFubm90YXRpb25zPy5VST8uUGFydE9mUHJldmlldyA9PT0gdW5kZWZpbmVkIHx8XG5cdFx0ZmllbGQuYW5ub3RhdGlvbnM/LlVJPy5QYXJ0T2ZQcmV2aWV3LnZhbHVlT2YoKSA9PT0gdHJ1ZVxuXHQpO1xufVxuXG5mdW5jdGlvbiBnZXRGb3JtRWxlbWVudHNGcm9tQW5ub3RhdGlvbnMoXG5cdGZhY2V0RGVmaW5pdGlvbjogUmVmZXJlbmNlRmFjZXRUeXBlcyxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+XG4pOiBBbm5vdGF0aW9uRm9ybUVsZW1lbnRbXSB7XG5cdGNvbnN0IGZvcm1FbGVtZW50czogQW5ub3RhdGlvbkZvcm1FbGVtZW50W10gPSBbXTtcblx0Y29uc3QgcmVzb2x2ZWRUYXJnZXQgPSBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGVBbm5vdGF0aW9uKGZhY2V0RGVmaW5pdGlvbi5UYXJnZXQudmFsdWUpO1xuXHRjb25zdCBmb3JtQW5ub3RhdGlvbjogSWRlbnRpZmljYXRpb24gfCBGaWVsZEdyb3VwIHwgQ29udGFjdCB8IERhdGFQb2ludCB8IElucHV0TWFzayB8IE1hc2tlZCA9IHJlc29sdmVkVGFyZ2V0LmFubm90YXRpb24gYXNcblx0XHR8IElkZW50aWZpY2F0aW9uXG5cdFx0fCBGaWVsZEdyb3VwXG5cdFx0fCBDb250YWN0XG5cdFx0fCBEYXRhUG9pbnRcblx0XHR8IElucHV0TWFza1xuXHRcdHwgTWFza2VkO1xuXHRjb252ZXJ0ZXJDb250ZXh0ID0gcmVzb2x2ZWRUYXJnZXQuY29udmVydGVyQ29udGV4dDtcblxuXHRmdW5jdGlvbiBnZXREYXRhRmllbGRzRnJvbUFubm90YXRpb25zKGZpZWxkOiBEYXRhRmllbGRBYnN0cmFjdFR5cGVzLCBmb3JtUGFydE9mUHJldmlldzogUGFydE9mUHJldmlldyB8IHVuZGVmaW5lZCk6IHZvaWQge1xuXHRcdGNvbnN0IHNlbWFudGljT2JqZWN0QW5ub3RhdGlvblBhdGggPSBnZXRTZW1hbnRpY09iamVjdFBhdGgoY29udmVydGVyQ29udGV4dCwgZmllbGQpO1xuXHRcdGlmIChcblx0XHRcdGZpZWxkLiRUeXBlICE9PSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JBY3Rpb24gJiZcblx0XHRcdGZpZWxkLiRUeXBlICE9PSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24gJiZcblx0XHRcdGZpZWxkLiRUeXBlICE9PSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JBY3Rpb25Hcm91cCAmJlxuXHRcdFx0IWlzUmVmZXJlbmNlUHJvcGVydHlTdGF0aWNhbGx5SGlkZGVuKGZpZWxkKVxuXHRcdCkge1xuXHRcdFx0Y29uc3QgZm9ybUVsZW1lbnQgPSB7XG5cdFx0XHRcdGtleTogS2V5SGVscGVyLmdlbmVyYXRlS2V5RnJvbURhdGFGaWVsZChmaWVsZCksXG5cdFx0XHRcdHR5cGU6IEZvcm1FbGVtZW50VHlwZS5Bbm5vdGF0aW9uLFxuXHRcdFx0XHRhbm5vdGF0aW9uUGF0aDogYCR7Y29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXRCYXNlZEFubm90YXRpb25QYXRoKGZpZWxkLmZ1bGx5UXVhbGlmaWVkTmFtZSl9L2AsXG5cdFx0XHRcdHNlbWFudGljT2JqZWN0UGF0aDogc2VtYW50aWNPYmplY3RBbm5vdGF0aW9uUGF0aCxcblx0XHRcdFx0Zm9ybWF0T3B0aW9uczogZ2V0RGVmYXVsdEZvcm1hdE9wdGlvbnNGb3JGb3JtKCksXG5cdFx0XHRcdGlzUGFydE9mUHJldmlldzogaXNGaWVsZFBhcnRPZlByZXZpZXcoZmllbGQsIGZvcm1QYXJ0T2ZQcmV2aWV3KVxuXHRcdFx0fTtcblx0XHRcdGlmIChcblx0XHRcdFx0ZmllbGQuJFR5cGUgPT09IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YUZpZWxkRm9yQW5ub3RhdGlvblwiICYmXG5cdFx0XHRcdGZpZWxkLlRhcmdldC4kdGFyZ2V0Py4kVHlwZSA9PT0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5Db25uZWN0ZWRGaWVsZHNUeXBlXCJcblx0XHRcdCkge1xuXHRcdFx0XHRjb25zdCBjb25uZWN0ZWRGaWVsZHMgPSBPYmplY3QudmFsdWVzKGZpZWxkLlRhcmdldC4kdGFyZ2V0LkRhdGEpLmZpbHRlcihcblx0XHRcdFx0XHQoY29ubmVjdGVkRmllbGQ6IHVua25vd24pID0+IChjb25uZWN0ZWRGaWVsZCBhcyBEYXRhRmllbGRBYnN0cmFjdFR5cGVzKT8uaGFzT3duUHJvcGVydHkoXCJWYWx1ZVwiKVxuXHRcdFx0XHQpIGFzIERhdGFGaWVsZEFic3RyYWN0VHlwZXNbXTtcblx0XHRcdFx0KGZvcm1FbGVtZW50IGFzIEFubm90YXRpb25Gb3JtRWxlbWVudCkuY29ubmVjdGVkRmllbGRzID0gY29ubmVjdGVkRmllbGRzLm1hcCgoY29ubm5lY3RlZEZpZWxkRWxlbWVudCkgPT4ge1xuXHRcdFx0XHRcdHJldHVybiB7IHNlbWFudGljT2JqZWN0UGF0aDogZ2V0U2VtYW50aWNPYmplY3RQYXRoKGNvbnZlcnRlckNvbnRleHQsIGNvbm5uZWN0ZWRGaWVsZEVsZW1lbnQpIH07XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdFx0Zm9ybUVsZW1lbnRzLnB1c2goZm9ybUVsZW1lbnQpO1xuXHRcdH1cblx0fVxuXG5cdHN3aXRjaCAoZm9ybUFubm90YXRpb24/LnRlcm0pIHtcblx0XHRjYXNlIFVJQW5ub3RhdGlvblRlcm1zLkZpZWxkR3JvdXA6XG5cdFx0XHRmb3JtQW5ub3RhdGlvbi5EYXRhLmZvckVhY2goKGZpZWxkKSA9PiBnZXREYXRhRmllbGRzRnJvbUFubm90YXRpb25zKGZpZWxkLCBmYWNldERlZmluaXRpb24uYW5ub3RhdGlvbnM/LlVJPy5QYXJ0T2ZQcmV2aWV3KSk7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFVJQW5ub3RhdGlvblRlcm1zLklkZW50aWZpY2F0aW9uOlxuXHRcdFx0Zm9ybUFubm90YXRpb24uZm9yRWFjaCgoZmllbGQpID0+IGdldERhdGFGaWVsZHNGcm9tQW5ub3RhdGlvbnMoZmllbGQsIGZhY2V0RGVmaW5pdGlvbi5hbm5vdGF0aW9ucz8uVUk/LlBhcnRPZlByZXZpZXcpKTtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVGVybXMuRGF0YVBvaW50OlxuXHRcdFx0Zm9ybUVsZW1lbnRzLnB1c2goe1xuXHRcdFx0XHQvLyBrZXk6IEtleUhlbHBlci5nZW5lcmF0ZUtleUZyb21EYXRhRmllbGQoZm9ybUFubm90YXRpb24pLFxuXHRcdFx0XHRrZXk6IGBEYXRhUG9pbnQ6OiR7Zm9ybUFubm90YXRpb24ucXVhbGlmaWVyID8gZm9ybUFubm90YXRpb24ucXVhbGlmaWVyIDogXCJcIn1gLFxuXHRcdFx0XHR0eXBlOiBGb3JtRWxlbWVudFR5cGUuQW5ub3RhdGlvbixcblx0XHRcdFx0YW5ub3RhdGlvblBhdGg6IGAke2NvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0QmFzZWRBbm5vdGF0aW9uUGF0aChmb3JtQW5ub3RhdGlvbi5mdWxseVF1YWxpZmllZE5hbWUpfS9gXG5cdFx0XHR9KTtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVGVybXMuSW5wdXRNYXNrOlxuXHRcdFx0Zm9ybUVsZW1lbnRzLnB1c2goe1xuXHRcdFx0XHRrZXk6IGBNYXNrZWRJbnB1dDo6JHtmb3JtQW5ub3RhdGlvbi5xdWFsaWZpZXIgPyBmb3JtQW5ub3RhdGlvbi5xdWFsaWZpZXIgOiBcIlwifWAsXG5cdFx0XHRcdHR5cGU6IEZvcm1FbGVtZW50VHlwZS5Bbm5vdGF0aW9uLFxuXHRcdFx0XHRhbm5vdGF0aW9uUGF0aDogYCR7Y29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXRCYXNlZEFubm90YXRpb25QYXRoKGZvcm1Bbm5vdGF0aW9uLmZ1bGx5UXVhbGlmaWVkTmFtZSl9L2Bcblx0XHRcdH0pO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBDb21tb25Bbm5vdGF0aW9uVGVybXMuTWFza2VkOlxuXHRcdFx0Zm9ybUVsZW1lbnRzLnB1c2goe1xuXHRcdFx0XHRrZXk6IGBNYXNrZWQ6OiR7Zm9ybUFubm90YXRpb24ucXVhbGlmaWVyID8gZm9ybUFubm90YXRpb24ucXVhbGlmaWVyIDogXCJcIn1gLFxuXHRcdFx0XHR0eXBlOiBGb3JtRWxlbWVudFR5cGUuQW5ub3RhdGlvbixcblx0XHRcdFx0YW5ub3RhdGlvblBhdGg6IGAke2NvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0QmFzZWRBbm5vdGF0aW9uUGF0aChmb3JtQW5ub3RhdGlvbi5mdWxseVF1YWxpZmllZE5hbWUpfS9gXG5cdFx0XHR9KTtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgQ29tbXVuaWNhdGlvbkFubm90YXRpb25UZXJtcy5Db250YWN0OlxuXHRcdFx0Zm9ybUVsZW1lbnRzLnB1c2goe1xuXHRcdFx0XHQvLyBrZXk6IEtleUhlbHBlci5nZW5lcmF0ZUtleUZyb21EYXRhRmllbGQoZm9ybUFubm90YXRpb24pLFxuXHRcdFx0XHRrZXk6IGBDb250YWN0Ojoke2Zvcm1Bbm5vdGF0aW9uLnF1YWxpZmllciA/IGZvcm1Bbm5vdGF0aW9uLnF1YWxpZmllciA6IFwiXCJ9YCxcblx0XHRcdFx0dHlwZTogRm9ybUVsZW1lbnRUeXBlLkFubm90YXRpb24sXG5cdFx0XHRcdGFubm90YXRpb25QYXRoOiBgJHtjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVNldEJhc2VkQW5ub3RhdGlvblBhdGgoZm9ybUFubm90YXRpb24uZnVsbHlRdWFsaWZpZWROYW1lKX0vYFxuXHRcdFx0fSk7XG5cdFx0XHRicmVhaztcblx0XHRkZWZhdWx0OlxuXHRcdFx0YnJlYWs7XG5cdH1cblx0cmV0dXJuIGZvcm1FbGVtZW50cztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEZvcm1FbGVtZW50c0Zyb21NYW5pZmVzdChcblx0ZmFjZXREZWZpbml0aW9uOiBSZWZlcmVuY2VGYWNldFR5cGVzLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD5cbik6IFJlY29yZDxzdHJpbmcsIEN1c3RvbUZvcm1FbGVtZW50PiB7XG5cdGNvbnN0IG1hbmlmZXN0V3JhcHBlciA9IGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RXcmFwcGVyKCk7XG5cdGNvbnN0IG1hbmlmZXN0Rm9ybUNvbnRhaW5lcjogRm9ybU1hbmlmZXN0Q29uZmlndXJhdGlvbiA9IG1hbmlmZXN0V3JhcHBlci5nZXRGb3JtQ29udGFpbmVyKGZhY2V0RGVmaW5pdGlvbi5UYXJnZXQudmFsdWUpO1xuXHRjb25zdCBmb3JtRWxlbWVudHM6IFJlY29yZDxzdHJpbmcsIEN1c3RvbUZvcm1FbGVtZW50PiA9IHt9O1xuXHRpZiAobWFuaWZlc3RGb3JtQ29udGFpbmVyPy5maWVsZHMpIHtcblx0XHRPYmplY3Qua2V5cyhtYW5pZmVzdEZvcm1Db250YWluZXI/LmZpZWxkcykuZm9yRWFjaCgoZmllbGRJZCkgPT4ge1xuXHRcdFx0Zm9ybUVsZW1lbnRzW2ZpZWxkSWRdID0ge1xuXHRcdFx0XHRrZXk6IGZpZWxkSWQsXG5cdFx0XHRcdGlkOiBgQ3VzdG9tRm9ybUVsZW1lbnQ6OiR7ZmllbGRJZH1gLFxuXHRcdFx0XHR0eXBlOiBtYW5pZmVzdEZvcm1Db250YWluZXIuZmllbGRzW2ZpZWxkSWRdLnR5cGUgfHwgRm9ybUVsZW1lbnRUeXBlLkRlZmF1bHQsXG5cdFx0XHRcdHRlbXBsYXRlOiBtYW5pZmVzdEZvcm1Db250YWluZXIuZmllbGRzW2ZpZWxkSWRdLnRlbXBsYXRlLFxuXHRcdFx0XHRwcm9wZXJ0eVBhdGg6IG1hbmlmZXN0Rm9ybUNvbnRhaW5lci5maWVsZHNbZmllbGRJZF0/LnByb3BlcnR5LFxuXHRcdFx0XHRsYWJlbDogY29udmVydGVyQ29udGV4dC5mZXRjaFRleHRGcm9tTWV0YU1vZGVsKG1hbmlmZXN0Rm9ybUNvbnRhaW5lci5maWVsZHNbZmllbGRJZF0ubGFiZWwpLFxuXHRcdFx0XHRwb3NpdGlvbjogbWFuaWZlc3RGb3JtQ29udGFpbmVyLmZpZWxkc1tmaWVsZElkXS5wb3NpdGlvbiB8fCB7XG5cdFx0XHRcdFx0cGxhY2VtZW50OiBQbGFjZW1lbnQuQWZ0ZXJcblx0XHRcdFx0fSxcblx0XHRcdFx0Zm9ybWF0T3B0aW9uczoge1xuXHRcdFx0XHRcdC4uLmdldERlZmF1bHRGb3JtYXRPcHRpb25zRm9yRm9ybSgpLFxuXHRcdFx0XHRcdC4uLm1hbmlmZXN0Rm9ybUNvbnRhaW5lci5maWVsZHNbZmllbGRJZF0uZm9ybWF0T3B0aW9uc1xuXHRcdFx0XHR9LFxuXHRcdFx0XHQuLi4obWFuaWZlc3RGb3JtQ29udGFpbmVyLmZpZWxkc1tmaWVsZElkXS5yZWFkT25seSAhPT0gdW5kZWZpbmVkICYmIHtcblx0XHRcdFx0XHRyZWFkT25seTogbWFuaWZlc3RGb3JtQ29udGFpbmVyLmZpZWxkc1tmaWVsZElkXS5yZWFkT25seVxuXHRcdFx0XHR9KSxcblx0XHRcdFx0Li4uKG1hbmlmZXN0Rm9ybUNvbnRhaW5lci5maWVsZHNbZmllbGRJZF0uc2VtYW50aWNPYmplY3QgIT09IHVuZGVmaW5lZCAmJiB7XG5cdFx0XHRcdFx0c2VtYW50aWNPYmplY3Q6IG1hbmlmZXN0Rm9ybUNvbnRhaW5lci5maWVsZHNbZmllbGRJZF0uc2VtYW50aWNPYmplY3Rcblx0XHRcdFx0fSlcblx0XHRcdH07XG5cdFx0fSk7XG5cdH1cblx0cmV0dXJuIGZvcm1FbGVtZW50cztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEZvcm1Db250YWluZXIoXG5cdGZhY2V0RGVmaW5pdGlvbjogUmVmZXJlbmNlRmFjZXRUeXBlcyxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+LFxuXHRhY3Rpb25zPzogQmFzZUFjdGlvbltdLFxuXHRhZGRpdGlvbmFsU2V0dGluZ3M/OiBBZGRpdGlvbmFsRm9ybVNldHRpbmdzXG4pOiBGb3JtQ29udGFpbmVyIHtcblx0Y29uc3Qgc0Zvcm1Db250YWluZXJJZCA9IGNyZWF0ZUlkRm9yQW5ub3RhdGlvbihmYWNldERlZmluaXRpb24pIGFzIHN0cmluZztcblx0Y29uc3Qgc0Fubm90YXRpb25QYXRoID0gY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXRCYXNlZEFubm90YXRpb25QYXRoKGZhY2V0RGVmaW5pdGlvbi5mdWxseVF1YWxpZmllZE5hbWUpO1xuXHRjb25zdCByZXNvbHZlZFRhcmdldCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZUFubm90YXRpb24oZmFjZXREZWZpbml0aW9uLlRhcmdldC52YWx1ZSk7XG5cdGNvbnN0IGlzVmlzaWJsZSA9IGNvbXBpbGVFeHByZXNzaW9uKG5vdChlcXVhbCh0cnVlLCBnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24oZmFjZXREZWZpbml0aW9uLmFubm90YXRpb25zPy5VST8uSGlkZGVuKSkpKTtcblx0bGV0IHNFbnRpdHlTZXRQYXRoITogc3RyaW5nO1xuXHQvLyByZXNvbHZlZFRhcmdldCBkb2Vzbid0IGhhdmUgYSBlbnRpdHlTZXQgaW4gY2FzZSBDb250YWlubWVudHMgYW5kIFBhcmFtdGVyaXplZCBzZXJ2aWNlcy5cblx0Y29uc3QgZW50aXR5U2V0ID0gcmVzb2x2ZWRUYXJnZXQuY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXQoKTtcblx0Y29uc3QgZGF0YU1vZGVsT2JqZWN0UGF0aFRhcmdldCA9IHJlc29sdmVkVGFyZ2V0LmNvbnZlcnRlckNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpLnRhcmdldE9iamVjdDtcblx0aWYgKGVudGl0eVNldCAmJiBlbnRpdHlTZXQgIT09IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0KCkpIHtcblx0XHRzRW50aXR5U2V0UGF0aCA9IGdldFRhcmdldEVudGl0eVNldFBhdGgocmVzb2x2ZWRUYXJnZXQuY29udmVydGVyQ29udGV4dC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCkpO1xuXHR9IGVsc2UgaWYgKGlzTmF2aWdhdGlvblByb3BlcnR5KGRhdGFNb2RlbE9iamVjdFBhdGhUYXJnZXQpICYmIGRhdGFNb2RlbE9iamVjdFBhdGhUYXJnZXQ/LmNvbnRhaW5zVGFyZ2V0ID09PSB0cnVlKSB7XG5cdFx0c0VudGl0eVNldFBhdGggPSBnZXRUYXJnZXRPYmplY3RQYXRoKHJlc29sdmVkVGFyZ2V0LmNvbnZlcnRlckNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpLCBmYWxzZSk7XG5cdH0gZWxzZSBpZiAoZW50aXR5U2V0ICYmICFzRW50aXR5U2V0UGF0aCAmJiBpc1NpbmdsZXRvbihlbnRpdHlTZXQpKSB7XG5cdFx0c0VudGl0eVNldFBhdGggPSBlbnRpdHlTZXQuZnVsbHlRdWFsaWZpZWROYW1lO1xuXHR9IGVsc2UgaWYgKCFlbnRpdHlTZXQgJiYgaXNOYXZpZ2F0aW9uUHJvcGVydHkoZGF0YU1vZGVsT2JqZWN0UGF0aFRhcmdldCkgJiYgZGF0YU1vZGVsT2JqZWN0UGF0aFRhcmdldD8uY29udGFpbnNUYXJnZXQgPT09IGZhbHNlKSB7XG5cdFx0c0VudGl0eVNldFBhdGggPSBnZXRUYXJnZXRPYmplY3RQYXRoKHJlc29sdmVkVGFyZ2V0LmNvbnZlcnRlckNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpLCBmYWxzZSk7XG5cdH1cblx0Y29uc3QgYUZvcm1FbGVtZW50cyA9IGluc2VydEN1c3RvbUVsZW1lbnRzKFxuXHRcdGdldEZvcm1FbGVtZW50c0Zyb21Bbm5vdGF0aW9ucyhmYWNldERlZmluaXRpb24sIGNvbnZlcnRlckNvbnRleHQpLFxuXHRcdGdldEZvcm1FbGVtZW50c0Zyb21NYW5pZmVzdChmYWNldERlZmluaXRpb24sIGNvbnZlcnRlckNvbnRleHQpLFxuXHRcdHsgZm9ybWF0T3B0aW9uczogT3ZlcnJpZGVUeXBlLm92ZXJ3cml0ZSwgcmVhZE9ubHk6IE92ZXJyaWRlVHlwZS5vdmVyd3JpdGUsIHNlbWFudGljT2JqZWN0OiBPdmVycmlkZVR5cGUub3ZlcndyaXRlIH1cblx0KTtcblxuXHRhY3Rpb25zID0gYWN0aW9ucyAhPT0gdW5kZWZpbmVkID8gYWN0aW9ucy5maWx0ZXIoKGFjdGlvbikgPT4gYWN0aW9uLmZhY2V0TmFtZSA9PSBmYWNldERlZmluaXRpb24uZnVsbHlRdWFsaWZpZWROYW1lKSA6IFtdO1xuXHRpZiAoYWN0aW9ucy5sZW5ndGggPT09IDApIHtcblx0XHRhY3Rpb25zID0gdW5kZWZpbmVkO1xuXHR9XG5cblx0Y29uc3Qgb0FjdGlvblNob3dEZXRhaWxzOiBCYXNlQWN0aW9uID0ge1xuXHRcdGlkOiBnZXRGb3JtU3RhbmRhcmRBY3Rpb25CdXR0b25JRChzRm9ybUNvbnRhaW5lcklkLCBcIlNob3dIaWRlRGV0YWlsc1wiKSxcblx0XHRrZXk6IFwiU3RhbmRhcmRBY3Rpb246OlNob3dIaWRlRGV0YWlsc1wiLFxuXHRcdHRleHQ6IGNvbXBpbGVFeHByZXNzaW9uKFxuXHRcdFx0aWZFbHNlKFxuXHRcdFx0XHRlcXVhbChwYXRoSW5Nb2RlbChcInNob3dEZXRhaWxzXCIsIFwiaW50ZXJuYWxcIiksIHRydWUpLFxuXHRcdFx0XHRwYXRoSW5Nb2RlbChcIlRfQ09NTU9OX09CSkVDVF9QQUdFX0hJREVfRk9STV9DT05UQUlORVJfREVUQUlMU1wiLCBcInNhcC5mZS5pMThuXCIpLFxuXHRcdFx0XHRwYXRoSW5Nb2RlbChcIlRfQ09NTU9OX09CSkVDVF9QQUdFX1NIT1dfRk9STV9DT05UQUlORVJfREVUQUlMU1wiLCBcInNhcC5mZS5pMThuXCIpXG5cdFx0XHQpXG5cdFx0KSxcblx0XHR0eXBlOiBBY3Rpb25UeXBlLlNob3dGb3JtRGV0YWlscyxcblx0XHRwcmVzczogXCJGb3JtQ29udGFpbmVyUnVudGltZS50b2dnbGVEZXRhaWxzXCJcblx0fTtcblxuXHRpZiAoXG5cdFx0ZmFjZXREZWZpbml0aW9uLmFubm90YXRpb25zPy5VST8uUGFydE9mUHJldmlldz8udmFsdWVPZigpICE9PSBmYWxzZSAmJlxuXHRcdGFGb3JtRWxlbWVudHMuc29tZSgob0Zvcm1FbGVtZW50KSA9PiBvRm9ybUVsZW1lbnQuaXNQYXJ0T2ZQcmV2aWV3ID09PSBmYWxzZSlcblx0KSB7XG5cdFx0aWYgKGFjdGlvbnMgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0YWN0aW9ucy5wdXNoKG9BY3Rpb25TaG93RGV0YWlscyk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGFjdGlvbnMgPSBbb0FjdGlvblNob3dEZXRhaWxzXTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4ge1xuXHRcdGlkOiBzRm9ybUNvbnRhaW5lcklkLFxuXHRcdGZvcm1FbGVtZW50czogYUZvcm1FbGVtZW50cyxcblx0XHRhbm5vdGF0aW9uUGF0aDogc0Fubm90YXRpb25QYXRoLFxuXHRcdGlzVmlzaWJsZTogaXNWaXNpYmxlLFxuXHRcdGVudGl0eVNldDogc0VudGl0eVNldFBhdGgsXG5cdFx0YWN0aW9uczogYWN0aW9ucyxcblx0XHR1c2VTaW5nbGVUZXh0QXJlYUZpZWxkQXNOb3RlczogYWRkaXRpb25hbFNldHRpbmdzPy51c2VTaW5nbGVUZXh0QXJlYUZpZWxkQXNOb3Rlcyxcblx0XHRhbm5vdGF0aW9uSGlkZGVuOiBmYWNldERlZmluaXRpb24uYW5ub3RhdGlvbnM/LlVJPy5IaWRkZW4gPyB0cnVlIDogZmFsc2Vcblx0fTtcbn1cblxuZnVuY3Rpb24gZ2V0Rm9ybUNvbnRhaW5lcnNGb3JDb2xsZWN0aW9uKFxuXHRmYWNldERlZmluaXRpb246IENvbGxlY3Rpb25GYWNldFR5cGVzLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sXG5cdGFjdGlvbnM/OiBCYXNlQWN0aW9uW10sXG5cdGFkZGl0aW9uYWxTZXR0aW5ncz86IEFkZGl0aW9uYWxGb3JtU2V0dGluZ3Ncbik6IEZvcm1Db250YWluZXJbXSB7XG5cdGNvbnN0IGZvcm1Db250YWluZXJzOiBGb3JtQ29udGFpbmVyW10gPSBbXTtcblx0Y29uc3QgZm9ybUNvbnRhaW5lclNldHRpbmdzID0ge1xuXHRcdHVzZVNpbmdsZVRleHRBcmVhRmllbGRBc05vdGVzOiBhZGRpdGlvbmFsU2V0dGluZ3M/LnVzZVNpbmdsZVRleHRBcmVhRmllbGRBc05vdGVzXG5cdH07XG5cdGZhY2V0RGVmaW5pdGlvbi5GYWNldHM/LmZvckVhY2goKGZhY2V0KSA9PiB7XG5cdFx0Ly8gSWdub3JlIGxldmVsIDMgY29sbGVjdGlvbiBmYWNldFxuXHRcdGlmIChmYWNldC4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuQ29sbGVjdGlvbkZhY2V0KSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGZvcm1Db250YWluZXJzLnB1c2goZ2V0Rm9ybUNvbnRhaW5lcihmYWNldCBhcyBSZWZlcmVuY2VGYWNldFR5cGVzLCBjb252ZXJ0ZXJDb250ZXh0LCBhY3Rpb25zLCBmb3JtQ29udGFpbmVyU2V0dGluZ3MpKTtcblx0fSk7XG5cdHJldHVybiBmb3JtQ29udGFpbmVycztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzUmVmZXJlbmNlRmFjZXQoZmFjZXREZWZpbml0aW9uOiBGYWNldFR5cGVzKTogZmFjZXREZWZpbml0aW9uIGlzIFJlZmVyZW5jZUZhY2V0VHlwZXMge1xuXHRyZXR1cm4gZmFjZXREZWZpbml0aW9uLiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5SZWZlcmVuY2VGYWNldDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUZvcm1EZWZpbml0aW9uKFxuXHRmYWNldERlZmluaXRpb246IEZpZWxkR3JvdXBUeXBlIHwgQ29sbGVjdGlvbkZhY2V0IHwgUmVmZXJlbmNlRmFjZXQgfCB1bmRlZmluZWQsXG5cdGlzVmlzaWJsZTogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24sXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pixcblx0YWN0aW9ucz86IEJhc2VBY3Rpb25bXSxcblx0YWRkaXRpb25hbFNldHRpbmdzPzogQWRkaXRpb25hbEZvcm1TZXR0aW5nc1xuKTogRm9ybURlZmluaXRpb24ge1xuXHRzd2l0Y2ggKGZhY2V0RGVmaW5pdGlvbj8uJFR5cGUpIHtcblx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkNvbGxlY3Rpb25GYWNldDpcblx0XHRcdC8vIEtlZXAgb25seSB2YWxpZCBjaGlsZHJlblxuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0aWQ6IGdldEZvcm1JRChmYWNldERlZmluaXRpb24pLFxuXHRcdFx0XHR1c2VGb3JtQ29udGFpbmVyTGFiZWxzOiB0cnVlLFxuXHRcdFx0XHRoYXNGYWNldHNOb3RQYXJ0T2ZQcmV2aWV3OiBmYWNldERlZmluaXRpb24uRmFjZXRzLnNvbWUoXG5cdFx0XHRcdFx0KGNoaWxkRmFjZXQpID0+IGNoaWxkRmFjZXQuYW5ub3RhdGlvbnM/LlVJPy5QYXJ0T2ZQcmV2aWV3Py52YWx1ZU9mKCkgPT09IGZhbHNlXG5cdFx0XHRcdCksXG5cdFx0XHRcdGZvcm1Db250YWluZXJzOiBnZXRGb3JtQ29udGFpbmVyc0ZvckNvbGxlY3Rpb24oZmFjZXREZWZpbml0aW9uLCBjb252ZXJ0ZXJDb250ZXh0LCBhY3Rpb25zLCBhZGRpdGlvbmFsU2V0dGluZ3MpLFxuXHRcdFx0XHRpc1Zpc2libGU6IGlzVmlzaWJsZVxuXHRcdFx0fTtcblx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLlJlZmVyZW5jZUZhY2V0OlxuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0aWQ6IGdldEZvcm1JRChmYWNldERlZmluaXRpb24pLFxuXHRcdFx0XHR1c2VGb3JtQ29udGFpbmVyTGFiZWxzOiBmYWxzZSxcblx0XHRcdFx0aGFzRmFjZXRzTm90UGFydE9mUHJldmlldzogZmFjZXREZWZpbml0aW9uLmFubm90YXRpb25zPy5VST8uUGFydE9mUHJldmlldz8udmFsdWVPZigpID09PSBmYWxzZSxcblx0XHRcdFx0Zm9ybUNvbnRhaW5lcnM6IFtnZXRGb3JtQ29udGFpbmVyKGZhY2V0RGVmaW5pdGlvbiwgY29udmVydGVyQ29udGV4dCwgYWN0aW9ucywgYWRkaXRpb25hbFNldHRpbmdzKV0sXG5cdFx0XHRcdGlzVmlzaWJsZTogaXNWaXNpYmxlXG5cdFx0XHR9O1xuXHRcdGRlZmF1bHQ6XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJDYW5ub3QgY3JlYXRlIGZvcm0gYmFzZWQgb24gUmVmZXJlbmNlVVJMRmFjZXRcIik7XG5cdH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztNQTRDWUEsZUFBZSwwQkFBZkEsZUFBZTtJQUFmQSxlQUFlO0lBQWZBLGVBQWU7SUFBZkEsZUFBZTtJQUFBLE9BQWZBLGVBQWU7RUFBQTtFQUFBQyxRQUFBLENBQUFELGVBQUEsR0FBQUEsZUFBQTtFQWtEM0I7QUFDQTtBQUNBO0FBQ0E7RUFDQSxTQUFTRSw4QkFBOEJBLENBQUEsRUFBc0I7SUFDNUQsT0FBTztNQUNOQyxhQUFhLEVBQUU7SUFDaEIsQ0FBQztFQUNGO0VBRUEsU0FBU0Msb0JBQW9CQSxDQUFDQyxLQUE2QixFQUFFQyxpQkFBaUMsRUFBVztJQUN4RztJQUNBLE9BQ0NBLGlCQUFpQixFQUFFQyxPQUFPLENBQUMsQ0FBQyxLQUFLLEtBQUssSUFDdENGLEtBQUssQ0FBQ0csV0FBVyxFQUFFQyxFQUFFLEVBQUVDLGFBQWEsS0FBS0MsU0FBUyxJQUNsRE4sS0FBSyxDQUFDRyxXQUFXLEVBQUVDLEVBQUUsRUFBRUMsYUFBYSxDQUFDSCxPQUFPLENBQUMsQ0FBQyxLQUFLLElBQUk7RUFFekQ7RUFFQSxTQUFTSyw4QkFBOEJBLENBQ3RDQyxlQUFvQyxFQUNwQ0MsZ0JBQXlELEVBQy9CO0lBQzFCLE1BQU1DLFlBQXFDLEdBQUcsRUFBRTtJQUNoRCxNQUFNQyxjQUFjLEdBQUdGLGdCQUFnQixDQUFDRyx1QkFBdUIsQ0FBQ0osZUFBZSxDQUFDSyxNQUFNLENBQUNDLEtBQUssQ0FBQztJQUM3RixNQUFNQyxjQUFzRixHQUFHSixjQUFjLENBQUNLLFVBTXJHO0lBQ1RQLGdCQUFnQixHQUFHRSxjQUFjLENBQUNGLGdCQUFnQjtJQUVsRCxTQUFTUSw0QkFBNEJBLENBQUNqQixLQUE2QixFQUFFQyxpQkFBNEMsRUFBUTtNQUN4SCxNQUFNaUIsNEJB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